lily-lark-ui 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lark-ui-components.html +1 -1
- package/package.json +1 -1
package/lark-ui-components.html
CHANGED
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
|
15
|
-
<script>eval(new TextDecoder().decode(Uint8Array.from(atob("dmFyIHMxPVR0PT57dGhyb3cgVHlwZUVycm9yKFR0KX07dmFyIGYxPShUdCxJdCxQdCk9Pkl0LmhhcyhUdCl8fHMxKCJDYW5ub3QgIitQdCk7dmFyIGp0PShUdCxJdCxQdCk9PihmMShUdCxJdCwicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSxQdD9QdC5jYWxsKFR0KTpJdC5nZXQoVHQpKSxkMT0oVHQsSXQsUHQpPT5JdC5oYXMoVHQpP3MxKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik6SXQgaW5zdGFuY2VvZiBXZWFrU2V0P0l0LmFkZChUdCk6SXQuc2V0KFR0LFB0KSx1aD0oVHQsSXQsUHQsT2wpPT4oZjEoVHQsSXQsIndyaXRlIHRvIHByaXZhdGUgZmllbGQiKSxPbD9PbC5jYWxsKFR0LFB0KTpJdC5zZXQoVHQsUHQpLFB0KTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHJ0LFd0O2Z1bmN0aW9uIFR0KGEsbyl7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe2NvbnN0IGk9b1t1XTtpZih0eXBlb2YgaSE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KGkpKXtmb3IoY29uc3QgcyBpbiBpKWlmKHMhPT0iZGVmYXVsdCImJiEocyBpbiBhKSl7Y29uc3QgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGkscyk7ZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyxmLmdldD9mOntlbnVtZXJhYmxlOiEwLGdldDooKT0+aVtzXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX1mdW5jdGlvbiBJdChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiZGVmYXVsdCIpP2EuZGVmYXVsdDphfXZhciBQdD17ZXhwb3J0czp7fX0sT2w9e307dmFyIHNoO2Z1bmN0aW9uIG0xKCl7aWYoc2gpcmV0dXJuIE9sO3NoPTE7dmFyIGE9U3ltYm9sLmZvcigicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnQiKSxvPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik7ZnVuY3Rpb24gdShpLHMsZil7dmFyIGQ9bnVsbDtpZihmIT09dm9pZCAwJiYoZD0iIitmKSxzLmtleSE9PXZvaWQgMCYmKGQ9IiIrcy5rZXkpLCJrZXkiaW4gcyl7Zj17fTtmb3IodmFyIHAgaW4gcylwIT09ImtleSImJihmW3BdPXNbcF0pfWVsc2UgZj1zO3JldHVybiBzPWYucmVmLHskJHR5cGVvZjphLHR5cGU6aSxrZXk6ZCxyZWY6cyE9PXZvaWQgMD9zOm51bGwscHJvcHM6Zn19cmV0dXJuIE9sLkZyYWdtZW50PW8sT2wuanN4PXUsT2wuanN4cz11LE9sfXZhciBmaDtmdW5jdGlvbiBoMSgpe3JldHVybiBmaHx8KGZoPTEsUHQuZXhwb3J0cz1tMSgpKSxQdC5leHBvcnRzfXZhciBtPWgxKCksenU9e2V4cG9ydHM6e319LFRlPXt9O3ZhciBkaDtmdW5jdGlvbiBwMSgpe2lmKGRoKXJldHVybiBUZTtkaD0xO3ZhciBhPVN5bWJvbC5mb3IoInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50Iiksbz1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSx1PVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksaT1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLHM9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxmPVN5bWJvbC5mb3IoInJlYWN0LmNvbnN1bWVyIiksZD1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IikscD1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLHk9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxiPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSx4PVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKSxnPVN5bWJvbC5mb3IoInJlYWN0LmFjdGl2aXR5IiksQz1TeW1ib2wuZm9yKCJyZWFjdC52aWV3X3RyYW5zaXRpb24iKSx3PVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBSKEQpe3JldHVybiBEPT09bnVsbHx8dHlwZW9mIEQhPSJvYmplY3QiP251bGw6KEQ9dyYmRFt3XXx8RFsiQEBpdGVyYXRvciJdLHR5cGVvZiBEPT0iZnVuY3Rpb24iP0Q6bnVsbCl9dmFyIEU9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LFQ9T2JqZWN0LmFzc2lnbixPPXt9O2Z1bmN0aW9uIEEoRCxYLEspe3RoaXMucHJvcHM9RCx0aGlzLmNvbnRleHQ9WCx0aGlzLnJlZnM9Tyx0aGlzLnVwZGF0ZXI9S3x8RX1BLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LEEucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKEQsWCl7aWYodHlwZW9mIEQhPSJvYmplY3QiJiZ0eXBlb2YgRCE9ImZ1bmN0aW9uIiYmRCE9bnVsbCl0aHJvdyBFcnJvcigidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLEQsWCwic2V0U3RhdGUiKX0sQS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oRCl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLEQsImZvcmNlVXBkYXRlIil9O2Z1bmN0aW9uIE4oKXt9Ti5wcm90b3R5cGU9QS5wcm90b3R5cGU7ZnVuY3Rpb24gTShELFgsSyl7dGhpcy5wcm9wcz1ELHRoaXMuY29udGV4dD1YLHRoaXMucmVmcz1PLHRoaXMudXBkYXRlcj1LfHxFfXZhciBZPU0ucHJvdG90eXBlPW5ldyBOO1kuY29uc3RydWN0b3I9TSxUKFksQS5wcm90b3R5cGUpLFkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEg9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBVKCl7fXZhciBCPXtIOm51bGwsQTpudWxsLFQ6bnVsbCxTOm51bGx9LEo9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKEQsWCxLKXt2YXIgYWU9Sy5yZWY7cmV0dXJueyQkdHlwZW9mOmEsdHlwZTpELGtleTpYLHJlZjphZSE9PXZvaWQgMD9hZTpudWxsLHByb3BzOkt9fWZ1bmN0aW9uIG5lKEQsWCl7cmV0dXJuIFcoRC50eXBlLFgsRC5wcm9wcyl9ZnVuY3Rpb24gZWUoRCl7cmV0dXJuIHR5cGVvZiBEPT0ib2JqZWN0IiYmRCE9PW51bGwmJkQuJCR0eXBlb2Y9PT1hfWZ1bmN0aW9uIGNlKEQpe3ZhciBYPXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK0QucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKEspe3JldHVybiBYW0tdfSl9dmFyIG1lPS9cLysvZztmdW5jdGlvbiBoZShELFgpe3JldHVybiB0eXBlb2YgRD09Im9iamVjdCImJkQhPT1udWxsJiZELmtleSE9bnVsbD9jZSgiIitELmtleSk6WC50b1N0cmluZygzNil9ZnVuY3Rpb24gUChEKXtzd2l0Y2goRC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gRC52YWx1ZTtjYXNlInJlamVjdGVkIjp0aHJvdyBELnJlYXNvbjtkZWZhdWx0OnN3aXRjaCh0eXBlb2YgRC5zdGF0dXM9PSJzdHJpbmciP0QudGhlbihVLFUpOihELnN0YXR1cz0icGVuZGluZyIsRC50aGVuKGZ1bmN0aW9uKFgpe0Quc3RhdHVzPT09InBlbmRpbmciJiYoRC5zdGF0dXM9ImZ1bGZpbGxlZCIsRC52YWx1ZT1YKX0sZnVuY3Rpb24oWCl7RC5zdGF0dXM9PT0icGVuZGluZyImJihELnN0YXR1cz0icmVqZWN0ZWQiLEQucmVhc29uPVgpfSkpLEQuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIEQudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgRC5yZWFzb259fXRocm93IER9ZnVuY3Rpb24gJChELFgsSyxhZSx5ZSl7dmFyIHNlPXR5cGVvZiBEOyhzZT09PSJ1bmRlZmluZWQifHxzZT09PSJib29sZWFuIikmJihEPW51bGwpO3ZhciBsZT0hMTtpZihEPT09bnVsbClsZT0hMDtlbHNlIHN3aXRjaChzZSl7Y2FzZSJiaWdpbnQiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bGU9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChELiQkdHlwZW9mKXtjYXNlIGE6Y2FzZSBvOmxlPSEwO2JyZWFrO2Nhc2UgeDpyZXR1cm4gbGU9RC5faW5pdCwkKGxlKEQuX3BheWxvYWQpLFgsSyxhZSx5ZSl9fWlmKGxlKXJldHVybiB5ZT15ZShEKSxsZT1hZT09PSIiPyIuIitoZShELDApOmFlLEgoeWUpPyhLPSIiLGxlIT1udWxsJiYoSz1sZS5yZXBsYWNlKG1lLCIkJi8iKSsiLyIpLCQoeWUsWCxLLCIiLGZ1bmN0aW9uKGJlKXtyZXR1cm4gYmV9KSk6eWUhPW51bGwmJihlZSh5ZSkmJih5ZT1uZSh5ZSxLKyh5ZS5rZXk9PW51bGx8fEQmJkQua2V5PT09eWUua2V5PyIiOigiIit5ZS5rZXkpLnJlcGxhY2UobWUsIiQmLyIpKyIvIikrbGUpKSxYLnB1c2goeWUpKSwxO2xlPTA7dmFyIHRlPWFlPT09IiI/Ii4iOmFlKyI6IjtpZihIKEQpKWZvcih2YXIgaWU9MDtpZTxELmxlbmd0aDtpZSsrKWFlPURbaWVdLHNlPXRlK2hlKGFlLGllKSxsZSs9JChhZSxYLEssc2UseWUpO2Vsc2UgaWYoaWU9UihEKSx0eXBlb2YgaWU9PSJmdW5jdGlvbiIpZm9yKEQ9aWUuY2FsbChEKSxpZT0wOyEoYWU9RC5uZXh0KCkpLmRvbmU7KWFlPWFlLnZhbHVlLHNlPXRlK2hlKGFlLGllKyspLGxlKz0kKGFlLFgsSyxzZSx5ZSk7ZWxzZSBpZihzZT09PSJvYmplY3QiKXtpZih0eXBlb2YgRC50aGVuPT0iZnVuY3Rpb24iKXJldHVybiAkKFAoRCksWCxLLGFlLHllKTt0aHJvdyBYPVN0cmluZyhEKSxFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiKyhYPT09IltvYmplY3QgT2JqZWN0XSI/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoRCkuam9pbigiLCAiKSsifSI6WCkrIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC4iKX1yZXR1cm4gbGV9ZnVuY3Rpb24gRihELFgsSyl7aWYoRD09bnVsbClyZXR1cm4gRDt2YXIgYWU9W10seWU9MDtyZXR1cm4gJChELGFlLCIiLCIiLGZ1bmN0aW9uKHNlKXtyZXR1cm4gWC5jYWxsKEssc2UseWUrKyl9KSxhZX1mdW5jdGlvbiByZShEKXtpZihELl9zdGF0dXM9PT0tMSl7dmFyIFg9RC5fcmVzdWx0LEs9WCgpO0sudGhlbihmdW5jdGlvbihhZSl7KEQuX3N0YXR1cz09PTB8fEQuX3N0YXR1cz09PS0xKSYmKEQuX3N0YXR1cz0xLEQuX3Jlc3VsdD1hZSxLLnN0YXR1cz09PXZvaWQgMCYmKEsuc3RhdHVzPSJmdWxmaWxsZWQiLEsudmFsdWU9YWUpKX0sZnVuY3Rpb24oYWUpeyhELl9zdGF0dXM9PT0wfHxELl9zdGF0dXM9PT0tMSkmJihELl9zdGF0dXM9MixELl9yZXN1bHQ9YWUsSy5zdGF0dXM9PT12b2lkIDAmJihLLnN0YXR1cz0icmVqZWN0ZWQiLEsucmVhc29uPWFlKSl9KSxELl9zdGF0dXM9PT0tMSYmKEQuX3N0YXR1cz0wLEQuX3Jlc3VsdD1LKX1pZihELl9zdGF0dXM9PT0xKXJldHVybiBELl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBELl9yZXN1bHR9dmFyIHE9dHlwZW9mIHJlcG9ydEVycm9yPT0iZnVuY3Rpb24iP3JlcG9ydEVycm9yOmZ1bmN0aW9uKEQpe2lmKHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2Ygd2luZG93LkVycm9yRXZlbnQ9PSJmdW5jdGlvbiIpe3ZhciBYPW5ldyB3aW5kb3cuRXJyb3JFdmVudCgiZXJyb3IiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsbWVzc2FnZTp0eXBlb2YgRD09Im9iamVjdCImJkQhPT1udWxsJiZ0eXBlb2YgRC5tZXNzYWdlPT0ic3RyaW5nIj9TdHJpbmcoRC5tZXNzYWdlKTpTdHJpbmcoRCksZXJyb3I6RH0pO2lmKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChYKSlyZXR1cm59ZWxzZSBpZih0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLmVtaXQ9PSJmdW5jdGlvbiIpe3Byb2Nlc3MuZW1pdCgidW5jYXVnaHRFeGNlcHRpb24iLEQpO3JldHVybn1jb25zb2xlLmVycm9yKEQpfTtmdW5jdGlvbiB4ZShEKXt2YXIgWD1CLlQsSz17fTtLLnR5cGVzPVghPT1udWxsP1gudHlwZXM6bnVsbCxCLlQ9Szt0cnl7dmFyIGFlPUQoKSx5ZT1CLlM7eWUhPT1udWxsJiZ5ZShLLGFlKSx0eXBlb2YgYWU9PSJvYmplY3QiJiZhZSE9PW51bGwmJnR5cGVvZiBhZS50aGVuPT0iZnVuY3Rpb24iJiZhZS50aGVuKFUscSl9Y2F0Y2goc2Upe3Eoc2UpfWZpbmFsbHl7WCE9PW51bGwmJksudHlwZXMhPT1udWxsJiYoWC50eXBlcz1LLnR5cGVzKSxCLlQ9WH19ZnVuY3Rpb24gamUoRCl7dmFyIFg9Qi5UO2lmKFghPT1udWxsKXt2YXIgSz1YLnR5cGVzO0s9PT1udWxsP1gudHlwZXM9W0RdOksuaW5kZXhPZihEKT09PS0xJiZLLnB1c2goRCl9ZWxzZSB4ZShqZS5iaW5kKG51bGwsRCkpfXZhciBZZT17bWFwOkYsZm9yRWFjaDpmdW5jdGlvbihELFgsSyl7RihELGZ1bmN0aW9uKCl7WC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEspfSxjb3VudDpmdW5jdGlvbihEKXt2YXIgWD0wO3JldHVybiBGKEQsZnVuY3Rpb24oKXtYKyt9KSxYfSx0b0FycmF5OmZ1bmN0aW9uKEQpe3JldHVybiBGKEQsZnVuY3Rpb24oWCl7cmV0dXJuIFh9KXx8W119LG9ubHk6ZnVuY3Rpb24oRCl7aWYoIWVlKEQpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gRH19O3JldHVybiBUZS5BY3Rpdml0eT1nLFRlLkNoaWxkcmVuPVllLFRlLkNvbXBvbmVudD1BLFRlLkZyYWdtZW50PXUsVGUuUHJvZmlsZXI9cyxUZS5QdXJlQ29tcG9uZW50PU0sVGUuU3RyaWN0TW9kZT1pLFRlLlN1c3BlbnNlPXksVGUuVmlld1RyYW5zaXRpb249QyxUZS5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9QixUZS5fX0NPTVBJTEVSX1JVTlRJTUU9e19fcHJvdG9fXzpudWxsLGM6ZnVuY3Rpb24oRCl7cmV0dXJuIEIuSC51c2VNZW1vQ2FjaGUoRCl9fSxUZS5hZGRUcmFuc2l0aW9uVHlwZT1qZSxUZS5jYWNoZT1mdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRC5hcHBseShudWxsLGFyZ3VtZW50cyl9fSxUZS5jYWNoZVNpZ25hbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxUZS5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oRCxYLEspe2lmKEQ9PW51bGwpdGhyb3cgRXJyb3IoIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgIitEKyIuIik7dmFyIGFlPVQoe30sRC5wcm9wcykseWU9RC5rZXk7aWYoWCE9bnVsbClmb3Ioc2UgaW4gWC5rZXkhPT12b2lkIDAmJih5ZT0iIitYLmtleSksWCkhSi5jYWxsKFgsc2UpfHxzZT09PSJrZXkifHxzZT09PSJfX3NlbGYifHxzZT09PSJfX3NvdXJjZSJ8fHNlPT09InJlZiImJlgucmVmPT09dm9pZCAwfHwoYWVbc2VdPVhbc2VdKTt2YXIgc2U9YXJndW1lbnRzLmxlbmd0aC0yO2lmKHNlPT09MSlhZS5jaGlsZHJlbj1LO2Vsc2UgaWYoMTxzZSl7Zm9yKHZhciBsZT1BcnJheShzZSksdGU9MDt0ZTxzZTt0ZSsrKWxlW3RlXT1hcmd1bWVudHNbdGUrMl07YWUuY2hpbGRyZW49bGV9cmV0dXJuIFcoRC50eXBlLHllLGFlKX0sVGUuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihEKXtyZXR1cm4gRD17JCR0eXBlb2Y6ZCxfY3VycmVudFZhbHVlOkQsX2N1cnJlbnRWYWx1ZTI6RCxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9LEQuUHJvdmlkZXI9RCxELkNvbnN1bWVyPXskJHR5cGVvZjpmLF9jb250ZXh0OkR9LER9LFRlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oRCxYLEspe3ZhciBhZSx5ZT17fSxzZT1udWxsO2lmKFghPW51bGwpZm9yKGFlIGluIFgua2V5IT09dm9pZCAwJiYoc2U9IiIrWC5rZXkpLFgpSi5jYWxsKFgsYWUpJiZhZSE9PSJrZXkiJiZhZSE9PSJfX3NlbGYiJiZhZSE9PSJfX3NvdXJjZSImJih5ZVthZV09WFthZV0pO3ZhciBsZT1hcmd1bWVudHMubGVuZ3RoLTI7aWYobGU9PT0xKXllLmNoaWxkcmVuPUs7ZWxzZSBpZigxPGxlKXtmb3IodmFyIHRlPUFycmF5KGxlKSxpZT0wO2llPGxlO2llKyspdGVbaWVdPWFyZ3VtZW50c1tpZSsyXTt5ZS5jaGlsZHJlbj10ZX1pZihEJiZELmRlZmF1bHRQcm9wcylmb3IoYWUgaW4gbGU9RC5kZWZhdWx0UHJvcHMsbGUpeWVbYWVdPT09dm9pZCAwJiYoeWVbYWVdPWxlW2FlXSk7cmV0dXJuIFcoRCxzZSx5ZSl9LFRlLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSxUZS5mb3J3YXJkUmVmPWZ1bmN0aW9uKEQpe3JldHVybnskJHR5cGVvZjpwLHJlbmRlcjpEfX0sVGUuaXNWYWxpZEVsZW1lbnQ9ZWUsVGUubGF6eT1mdW5jdGlvbihEKXtyZXR1cm57JCR0eXBlb2Y6eCxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OkR9LF9pbml0OnJlfX0sVGUubWVtbz1mdW5jdGlvbihELFgpe3JldHVybnskJHR5cGVvZjpiLHR5cGU6RCxjb21wYXJlOlg9PT12b2lkIDA/bnVsbDpYfX0sVGUuc3RhcnRUcmFuc2l0aW9uPXhlLFRlLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaD1mdW5jdGlvbigpe3JldHVybiBCLkgudXNlQ2FjaGVSZWZyZXNoKCl9LFRlLnVzZT1mdW5jdGlvbihEKXtyZXR1cm4gQi5ILnVzZShEKX0sVGUudXNlQWN0aW9uU3RhdGU9ZnVuY3Rpb24oRCxYLEspe3JldHVybiBCLkgudXNlQWN0aW9uU3RhdGUoRCxYLEspfSxUZS51c2VDYWxsYmFjaz1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlQ2FsbGJhY2soRCxYKX0sVGUudXNlQ29udGV4dD1mdW5jdGlvbihEKXtyZXR1cm4gQi5ILnVzZUNvbnRleHQoRCl9LFRlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LFRlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oRCxYKXtyZXR1cm4gQi5ILnVzZURlZmVycmVkVmFsdWUoRCxYKX0sVGUudXNlRWZmZWN0PWZ1bmN0aW9uKEQsWCl7cmV0dXJuIEIuSC51c2VFZmZlY3QoRCxYKX0sVGUudXNlRWZmZWN0RXZlbnQ9ZnVuY3Rpb24oRCl7cmV0dXJuIEIuSC51c2VFZmZlY3RFdmVudChEKX0sVGUudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQi5ILnVzZUlkKCl9LFRlLnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oRCxYLEspe3JldHVybiBCLkgudXNlSW1wZXJhdGl2ZUhhbmRsZShELFgsSyl9LFRlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlSW5zZXJ0aW9uRWZmZWN0KEQsWCl9LFRlLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlTGF5b3V0RWZmZWN0KEQsWCl9LFRlLnVzZU1lbW89ZnVuY3Rpb24oRCxYKXtyZXR1cm4gQi5ILnVzZU1lbW8oRCxYKX0sVGUudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlT3B0aW1pc3RpYyhELFgpfSxUZS51c2VSZWR1Y2VyPWZ1bmN0aW9uKEQsWCxLKXtyZXR1cm4gQi5ILnVzZVJlZHVjZXIoRCxYLEspfSxUZS51c2VSZWY9ZnVuY3Rpb24oRCl7cmV0dXJuIEIuSC51c2VSZWYoRCl9LFRlLnVzZVN0YXRlPWZ1bmN0aW9uKEQpe3JldHVybiBCLkgudXNlU3RhdGUoRCl9LFRlLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKEQsWCxLKXtyZXR1cm4gQi5ILnVzZVN5bmNFeHRlcm5hbFN0b3JlKEQsWCxLKX0sVGUudXNlVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiBCLkgudXNlVHJhbnNpdGlvbigpfSxUZS52ZXJzaW9uPSIxOS4zLjEiLFRlfXZhciBtaDtmdW5jdGlvbiBrdSgpe3JldHVybiBtaHx8KG1oPTEsenUuZXhwb3J0cz1wMSgpKSx6dS5leHBvcnRzfXZhciB2PWt1KCk7Y29uc3QgQWw9VHQoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6SXQodil9LFt2XSk7dmFyIEx1PXtleHBvcnRzOnt9fSx0cj17fSxVdT17ZXhwb3J0czp7fX0sSHU9e307dmFyIGhoO2Z1bmN0aW9uIHYxKCl7cmV0dXJuIGhofHwoaGg9MSwoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbyhQLCQpe3ZhciBGPVAubGVuZ3RoO1AucHVzaCgkKTtlOmZvcig7MDxGOyl7dmFyIHJlPUYtMT4+PjEscT1QW3JlXTtpZigwPHMocSwkKSlQW3JlXT0kLFBbRl09cSxGPXJlO2Vsc2UgYnJlYWsgZX19ZnVuY3Rpb24gdShQKXtyZXR1cm4gUC5sZW5ndGg9PT0wP251bGw6UFswXX1mdW5jdGlvbiBpKFApe2lmKFAubGVuZ3RoPT09MClyZXR1cm4gbnVsbDt2YXIgJD1QWzBdLEY9UC5wb3AoKTtpZihGIT09JCl7UFswXT1GO2U6Zm9yKHZhciByZT0wLHE9UC5sZW5ndGgseGU9cT4+PjE7cmU8eGU7KXt2YXIgamU9MioocmUrMSktMSxZZT1QW2plXSxEPWplKzEsWD1QW0RdO2lmKDA+cyhZZSxGKSlEPHEmJjA+cyhYLFllKT8oUFtyZV09WCxQW0RdPUYscmU9RCk6KFBbcmVdPVllLFBbamVdPUYscmU9amUpO2Vsc2UgaWYoRDxxJiYwPnMoWCxGKSlQW3JlXT1YLFBbRF09RixyZT1EO2Vsc2UgYnJlYWsgZX19cmV0dXJuICR9ZnVuY3Rpb24gcyhQLCQpe3ZhciBGPVAuc29ydEluZGV4LSQuc29ydEluZGV4O3JldHVybiBGIT09MD9GOlAuaWQtJC5pZH1pZihhLnVuc3RhYmxlX25vdz12b2lkIDAsdHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIGY9cGVyZm9ybWFuY2U7YS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi5ub3coKX19ZWxzZXt2YXIgZD1EYXRlLHA9ZC5ub3coKTthLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBkLm5vdygpLXB9fXZhciB5PVtdLGI9W10seD0xLGc9bnVsbCxDPTMsdz0hMSxSPSExLEU9ITEsVD0hMSxPPXR5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP3NldFRpbWVvdXQ6bnVsbCxBPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsTj10eXBlb2Ygc2V0SW1tZWRpYXRlPCJ1Ij9zZXRJbW1lZGlhdGU6bnVsbDtmdW5jdGlvbiBNKFApe2Zvcih2YXIgJD11KGIpOyQhPT1udWxsOyl7aWYoJC5jYWxsYmFjaz09PW51bGwpaShiKTtlbHNlIGlmKCQuc3RhcnRUaW1lPD1QKWkoYiksJC5zb3J0SW5kZXg9JC5leHBpcmF0aW9uVGltZSxvKHksJCk7ZWxzZSBicmVhazskPXUoYil9fWZ1bmN0aW9uIFkoUCl7aWYoRT0hMSxNKFApLCFSKWlmKHUoeSkhPT1udWxsKVI9ITAsSHx8KEg9ITAsZWUoKSk7ZWxzZXt2YXIgJD11KGIpOyQhPT1udWxsJiZoZShZLCQuc3RhcnRUaW1lLVApfX12YXIgSD0hMSxVPS0xLEI9NSxKPS0xO2Z1bmN0aW9uIFcoKXtyZXR1cm4gVD8hMDohKGEudW5zdGFibGVfbm93KCktSjxCKX1mdW5jdGlvbiBuZSgpe2lmKFQ9ITEsSCl7dmFyIFA9YS51bnN0YWJsZV9ub3coKTtKPVA7dmFyICQ9ITA7dHJ5e2U6e1I9ITEsRSYmKEU9ITEsQShVKSxVPS0xKSx3PSEwO3ZhciBGPUM7dHJ5e3Q6e2ZvcihNKFApLGc9dSh5KTtnIT09bnVsbCYmIShnLmV4cGlyYXRpb25UaW1lPlAmJlcoKSk7KXt2YXIgcmU9Zy5jYWxsYmFjaztpZih0eXBlb2YgcmU9PSJmdW5jdGlvbiIpe2cuY2FsbGJhY2s9bnVsbCxDPWcucHJpb3JpdHlMZXZlbDt2YXIgcT1yZShnLmV4cGlyYXRpb25UaW1lPD1QKTtpZihQPWEudW5zdGFibGVfbm93KCksdHlwZW9mIHE9PSJmdW5jdGlvbiIpe2cuY2FsbGJhY2s9cSxNKFApLCQ9ITA7YnJlYWsgdH1nPT09dSh5KSYmaSh5KSxNKFApfWVsc2UgaSh5KTtnPXUoeSl9aWYoZyE9PW51bGwpJD0hMDtlbHNle3ZhciB4ZT11KGIpO3hlIT09bnVsbCYmaGUoWSx4ZS5zdGFydFRpbWUtUCksJD0hMX19YnJlYWsgZX1maW5hbGx5e2c9bnVsbCxDPUYsdz0hMX0kPXZvaWQgMH19ZmluYWxseXskP2VlKCk6SD0hMX19fXZhciBlZTtpZih0eXBlb2YgTj09ImZ1bmN0aW9uIillZT1mdW5jdGlvbigpe04obmUpfTtlbHNlIGlmKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbDwidSIpe3ZhciBjZT1uZXcgTWVzc2FnZUNoYW5uZWwsbWU9Y2UucG9ydDI7Y2UucG9ydDEub25tZXNzYWdlPW5lLGVlPWZ1bmN0aW9uKCl7bWUucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgZWU9ZnVuY3Rpb24oKXtPKG5lLDApfTtmdW5jdGlvbiBoZShQLCQpe1U9TyhmdW5jdGlvbigpe1AoYS51bnN0YWJsZV9ub3coKSl9LCQpfWEudW5zdGFibGVfSWRsZVByaW9yaXR5PTUsYS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xLGEudW5zdGFibGVfTG93UHJpb3JpdHk9NCxhLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTMsYS51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbCxhLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsYS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihQKXtQLmNhbGxiYWNrPW51bGx9LGEudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oUCl7MD5QfHwxMjU8UD9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpCPTA8UD9NYXRoLmZsb29yKDFlMy9QKTo1fSxhLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIEN9LGEudW5zdGFibGVfbmV4dD1mdW5jdGlvbihQKXtzd2l0Y2goQyl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyICQ9MzticmVhaztkZWZhdWx0OiQ9Q312YXIgRj1DO0M9JDt0cnl7cmV0dXJuIFAoKX1maW5hbGx5e0M9Rn19LGEudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7VD0hMH0sYS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oUCwkKXtzd2l0Y2goUCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0OlA9M312YXIgRj1DO0M9UDt0cnl7cmV0dXJuICQoKX1maW5hbGx5e0M9Rn19LGEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihQLCQsRil7dmFyIHJlPWEudW5zdGFibGVfbm93KCk7c3dpdGNoKHR5cGVvZiBGPT0ib2JqZWN0IiYmRiE9PW51bGw/KEY9Ri5kZWxheSxGPXR5cGVvZiBGPT0ibnVtYmVyIiYmMDxGP3JlK0Y6cmUpOkY9cmUsUCl7Y2FzZSAxOnZhciBxPS0xO2JyZWFrO2Nhc2UgMjpxPTI1MDticmVhaztjYXNlIDU6cT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDpxPTFlNDticmVhaztkZWZhdWx0OnE9NWUzfXJldHVybiBxPUYrcSxQPXtpZDp4KyssY2FsbGJhY2s6JCxwcmlvcml0eUxldmVsOlAsc3RhcnRUaW1lOkYsZXhwaXJhdGlvblRpbWU6cSxzb3J0SW5kZXg6LTF9LEY+cmU/KFAuc29ydEluZGV4PUYsbyhiLFApLHUoeSk9PT1udWxsJiZQPT09dShiKSYmKEU/KEEoVSksVT0tMSk6RT0hMCxoZShZLEYtcmUpKSk6KFAuc29ydEluZGV4PXEsbyh5LFApLFJ8fHd8fChSPSEwLEh8fChIPSEwLGVlKCkpKSksUH0sYS51bnN0YWJsZV9zaG91bGRZaWVsZD1XLGEudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKFApe3ZhciAkPUM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEY9QztDPSQ7dHJ5e3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e0M9Rn19fX0pKEh1KSksSHV9dmFyIHBoO2Z1bmN0aW9uIGcxKCl7cmV0dXJuIHBofHwocGg9MSxVdS5leHBvcnRzPXYxKCkpLFV1LmV4cG9ydHN9dmFyIEJ1PXtleHBvcnRzOnt9fSx3dD17fTt2YXIgdmg7ZnVuY3Rpb24geTEoKXtpZih2aClyZXR1cm4gd3Q7dmg9MTt2YXIgYT1rdSgpO2Z1bmN0aW9uIG8oeCl7dmFyIGc9Imh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy8iK3g7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXtnKz0iP2FyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgQz0yO0M8YXJndW1lbnRzLmxlbmd0aDtDKyspZys9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW0NdKX1yZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIreCsiOyB2aXNpdCAiK2crIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn1mdW5jdGlvbiB1KCl7fXZhciBpPXtkOntmOnUscjpmdW5jdGlvbigpe3Rocm93IEVycm9yKG8oNTIyKSl9LEQ6dSxDOnUsTDp1LG06dSxYOnUsUzp1LE06dX0scDowLGZpbmRET01Ob2RlOm51bGx9LHM9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksZj1TeW1ib2wuZm9yKCJyZWFjdC5yZWNvdmVyYWJsZSIpLGQ9U3ltYm9sLmZvcigicmVhY3Qub3B0aW1pc3RpY19rZXkiKTtmdW5jdGlvbiBwKHgsZyxDKXt2YXIgdz0zPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6cyxrZXk6dz09bnVsbD9udWxsOnc9PT1kP2Q6IiIrdyxjaGlsZHJlbjp4LGNvbnRhaW5lckluZm86ZyxpbXBsZW1lbnRhdGlvbjpDfX12YXIgeT1hLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERTtmdW5jdGlvbiBiKHgsZyl7aWYoeD09PSJmb250IilyZXR1cm4iIjtpZih0eXBlb2YgZz09InN0cmluZyIpcmV0dXJuIGc9PT0idXNlLWNyZWRlbnRpYWxzIj9nOiIifXJldHVybiB3dC5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9aSx3dC5icm93c2VyPWZ1bmN0aW9uKHgpe3JldHVybnskJHR5cGVvZjpmLF9yZWFzb246eH19LHd0LmNyZWF0ZVBvcnRhbD1mdW5jdGlvbih4LGcpe3ZhciBDPTI8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsO2lmKCFnfHxnLm5vZGVUeXBlIT09MSYmZy5ub2RlVHlwZSE9PTkmJmcubm9kZVR5cGUhPT0xMSl0aHJvdyBFcnJvcihvKDI5OSkpO3JldHVybiBwKHgsZyxudWxsLEMpfSx3dC5mbHVzaFN5bmM9ZnVuY3Rpb24oeCl7dmFyIGc9eS5ULEM9aS5wO3RyeXtpZih5LlQ9bnVsbCxpLnA9Mix4KXJldHVybiB4KCl9ZmluYWxseXt5LlQ9ZyxpLnA9QyxpLmQuZigpfX0sd3QucHJlY29ubmVjdD1mdW5jdGlvbih4LGcpe3R5cGVvZiB4PT0ic3RyaW5nIiYmKGc/KGc9Zy5jcm9zc09yaWdpbixnPXR5cGVvZiBnPT0ic3RyaW5nIj9nPT09InVzZS1jcmVkZW50aWFscyI/ZzoiIjp2b2lkIDApOmc9bnVsbCxpLmQuQyh4LGcpKX0sd3QucHJlZmV0Y2hETlM9ZnVuY3Rpb24oeCl7dHlwZW9mIHg9PSJzdHJpbmciJiZpLmQuRCh4KX0sd3QucHJlaW5pdD1mdW5jdGlvbih4LGcpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIiYmZyYmdHlwZW9mIGcuYXM9PSJzdHJpbmciKXt2YXIgQz1nLmFzLHc9YihDLGcuY3Jvc3NPcmlnaW4pLFI9dHlwZW9mIGcuaW50ZWdyaXR5PT0ic3RyaW5nIj9nLmludGVncml0eTp2b2lkIDAsRT10eXBlb2YgZy5mZXRjaFByaW9yaXR5PT0ic3RyaW5nIj9nLmZldGNoUHJpb3JpdHk6dm9pZCAwO0M9PT0ic3R5bGUiP2kuZC5TKHgsdHlwZW9mIGcucHJlY2VkZW5jZT09InN0cmluZyI/Zy5wcmVjZWRlbmNlOnZvaWQgMCx7Y3Jvc3NPcmlnaW46dyxpbnRlZ3JpdHk6UixmZXRjaFByaW9yaXR5OkV9KTpDPT09InNjcmlwdCImJmkuZC5YKHgse2Nyb3NzT3JpZ2luOncsaW50ZWdyaXR5OlIsZmV0Y2hQcmlvcml0eTpFLG5vbmNlOnR5cGVvZiBnLm5vbmNlPT0ic3RyaW5nIj9nLm5vbmNlOnZvaWQgMH0pfX0sd3QucHJlaW5pdE1vZHVsZT1mdW5jdGlvbih4LGcpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilpZih0eXBlb2YgZz09Im9iamVjdCImJmchPT1udWxsKXtpZihnLmFzPT1udWxsfHxnLmFzPT09InNjcmlwdCIpe3ZhciBDPWIoZy5hcyxnLmNyb3NzT3JpZ2luKTtpLmQuTSh4LHtjcm9zc09yaWdpbjpDLGludGVncml0eTp0eXBlb2YgZy5pbnRlZ3JpdHk9PSJzdHJpbmciP2cuaW50ZWdyaXR5OnZvaWQgMCxub25jZTp0eXBlb2YgZy5ub25jZT09InN0cmluZyI/Zy5ub25jZTp2b2lkIDAsZmV0Y2hQcmlvcml0eTp0eXBlb2YgZy5mZXRjaFByaW9yaXR5PT0ic3RyaW5nIj9nLmZldGNoUHJpb3JpdHk6dm9pZCAwfSl9fWVsc2UgZz09bnVsbCYmaS5kLk0oeCl9LHd0LnByZWxvYWQ9ZnVuY3Rpb24oeCxnKXtpZih0eXBlb2YgeD09InN0cmluZyImJnR5cGVvZiBnPT0ib2JqZWN0IiYmZyE9PW51bGwmJnR5cGVvZiBnLmFzPT0ic3RyaW5nIil7dmFyIEM9Zy5hcyx3PWIoQyxnLmNyb3NzT3JpZ2luKTtpLmQuTCh4LEMse2Nyb3NzT3JpZ2luOncsaW50ZWdyaXR5OnR5cGVvZiBnLmludGVncml0eT09InN0cmluZyI/Zy5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOnR5cGVvZiBnLm5vbmNlPT0ic3RyaW5nIj9nLm5vbmNlOnZvaWQgMCx0eXBlOnR5cGVvZiBnLnR5cGU9PSJzdHJpbmciP2cudHlwZTp2b2lkIDAsZmV0Y2hQcmlvcml0eTp0eXBlb2YgZy5mZXRjaFByaW9yaXR5PT0ic3RyaW5nIj9nLmZldGNoUHJpb3JpdHk6dm9pZCAwLHJlZmVycmVyUG9saWN5OnR5cGVvZiBnLnJlZmVycmVyUG9saWN5PT0ic3RyaW5nIj9nLnJlZmVycmVyUG9saWN5OnZvaWQgMCxpbWFnZVNyY1NldDp0eXBlb2YgZy5pbWFnZVNyY1NldD09InN0cmluZyI/Zy5pbWFnZVNyY1NldDp2b2lkIDAsaW1hZ2VTaXplczp0eXBlb2YgZy5pbWFnZVNpemVzPT0ic3RyaW5nIj9nLmltYWdlU2l6ZXM6dm9pZCAwLG1lZGlhOnR5cGVvZiBnLm1lZGlhPT0ic3RyaW5nIj9nLm1lZGlhOnZvaWQgMH0pfX0sd3QucHJlbG9hZE1vZHVsZT1mdW5jdGlvbih4LGcpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilpZihnKXt2YXIgQz1iKGcuYXMsZy5jcm9zc09yaWdpbik7aS5kLm0oeCx7YXM6dHlwZW9mIGcuYXM9PSJzdHJpbmciJiZnLmFzIT09InNjcmlwdCI/Zy5hczp2b2lkIDAsY3Jvc3NPcmlnaW46QyxpbnRlZ3JpdHk6dHlwZW9mIGcuaW50ZWdyaXR5PT0ic3RyaW5nIj9nLmludGVncml0eTp2b2lkIDAsbm9uY2U6dHlwZW9mIGcubm9uY2U9PSJzdHJpbmciP2cubm9uY2U6dm9pZCAwLGZldGNoUHJpb3JpdHk6dHlwZW9mIGcuZmV0Y2hQcmlvcml0eT09InN0cmluZyI/Zy5mZXRjaFByaW9yaXR5OnZvaWQgMH0pfWVsc2UgaS5kLm0oeCl9LHd0LnJlcXVlc3RGb3JtUmVzZXQ9ZnVuY3Rpb24oeCl7aS5kLnIoeCl9LHd0LnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZ1bmN0aW9uKHgsZyl7cmV0dXJuIHgoZyl9LHd0LnVzZUZvcm1TdGF0ZT1mdW5jdGlvbih4LGcsQyl7cmV0dXJuIHkuSC51c2VGb3JtU3RhdGUoeCxnLEMpfSx3dC51c2VGb3JtU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHkuSC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cygpfSx3dC52ZXJzaW9uPSIxOS4zLjEiLHd0fXZhciBnaDtmdW5jdGlvbiB5aCgpe2lmKGdoKXJldHVybiBCdS5leHBvcnRzO2doPTE7ZnVuY3Rpb24gYSgpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz4idSJ8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPSJmdW5jdGlvbiIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoYSl9Y2F0Y2gobyl7Y29uc29sZS5lcnJvcihvKX19cmV0dXJuIGEoKSxCdS5leHBvcnRzPXkxKCksQnUuZXhwb3J0c312YXIgYmg7ZnVuY3Rpb24gYjEoKXtpZihiaClyZXR1cm4gdHI7Ymg9MTt2YXIgYT1nMSgpLG89a3UoKSx1PXloKCk7ZnVuY3Rpb24gaShlKXt2YXIgdD0iaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzLyIrZTtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe3QrPSI/YXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pfXJldHVybiJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICIrdCsiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifWZ1bmN0aW9uIHMoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEpfWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PWUsbj10O24mJiFuLmFsdGVybmF0ZTspdD1uLCh0LmZsYWdzJjQwOTgpIT09MCYmKGU9dC5yZXR1cm4pLG49dC5yZXR1cm47Zm9yKDt0LnJldHVybjspdD10LnJldHVybjtyZXR1cm4gdC50YWc9PT0zP2U6bnVsbH1mdW5jdGlvbiBkKGUpe2lmKGUudGFnPT09MTMpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZih0PT09bnVsbCYmKGU9ZS5hbHRlcm5hdGUsZSE9PW51bGwmJih0PWUubWVtb2l6ZWRTdGF0ZSkpLHQhPT1udWxsKXJldHVybiB0LmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlKXtpZihlLnRhZz09PTMxKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoZSl7aWYoZihlKSE9PWUpdGhyb3cgRXJyb3IoaSgxODgpKX1mdW5jdGlvbiBiKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PWYoZSksdD09PW51bGwpdGhyb3cgRXJyb3IoaSgxODgpKTtyZXR1cm4gdCE9PWU/bnVsbDplfWZvcih2YXIgbj1lLGw9dDs7KXt2YXIgcj1uLnJldHVybjtpZihyPT09bnVsbClicmVhazt2YXIgYz1yLmFsdGVybmF0ZTtpZihjPT09bnVsbCl7aWYobD1yLnJldHVybixsIT09bnVsbCl7bj1sO2NvbnRpbnVlfWJyZWFrfWlmKHIuY2hpbGQ9PT1jLmNoaWxkKXtmb3IoYz1yLmNoaWxkO2M7KXtpZihjPT09bilyZXR1cm4geShyKSxlO2lmKGM9PT1sKXJldHVybiB5KHIpLHQ7Yz1jLnNpYmxpbmd9dGhyb3cgRXJyb3IoaSgxODgpKX1pZihuLnJldHVybiE9PWwucmV0dXJuKW49cixsPWM7ZWxzZXtmb3IodmFyIGg9ITEsUz1yLmNoaWxkO1M7KXtpZihTPT09bil7aD0hMCxuPXIsbD1jO2JyZWFrfWlmKFM9PT1sKXtoPSEwLGw9cixuPWM7YnJlYWt9Uz1TLnNpYmxpbmd9aWYoIWgpe2ZvcihTPWMuY2hpbGQ7Uzspe2lmKFM9PT1uKXtoPSEwLG49YyxsPXI7YnJlYWt9aWYoUz09PWwpe2g9ITAsbD1jLG49cjticmVha31TPVMuc2libGluZ31pZighaCl0aHJvdyBFcnJvcihpKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PWwpdGhyb3cgRXJyb3IoaSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoaSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIHgoZSl7dmFyIHQ9ZS50YWc7aWYodD09PTV8fHQ9PT0yNnx8dD09PTI3fHx0PT09NilyZXR1cm4gZTtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7aWYodD14KGUpLHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGcoZSx0LG4sbCxyLGMpe2Zvcig7ZSE9PW51bGw7KXtpZigoZS50YWc9PT01fHxlLnRhZz09PTI3fHxlLnRhZz09PTYpJiZuKGUsbCxyLGMpfHwoZS50YWchPT0yMnx8ZS5tZW1vaXplZFN0YXRlPT09bnVsbCkmJih0fHxlLnRhZyE9PTUmJmUudGFnIT09MjcpJiZnKGUuY2hpbGQsdCxuLGwscixjKSlyZXR1cm4hMDtlPWUuc2libGluZ31yZXR1cm4hMX1mdW5jdGlvbiBDKGUpe2ZvcihlPWUucmV0dXJuO2UhPT1udWxsOyl7aWYoZS50YWc9PT0zfHxlLnRhZz09PTV8fGUudGFnPT09MjcpcmV0dXJuIGU7ZT1lLnJldHVybn1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KGUpe3ZhciB0PSExO2ZvcihlPWUucmV0dXJuO2UhPT1udWxsJiYoZS50YWc9PT00JiYodD0hMCksIShlLnRhZz09PTN8fGUudGFnPT09NXx8ZS50YWc9PT0yNykpOyllPWUucmV0dXJuO3JldHVybiB0fWZ1bmN0aW9uIFIoZSl7dmFyIHQ9W251bGwsbnVsbF0sbj1DKGUpO3JldHVybiBuPT09bnVsbHx8RSh0LGUsbi5jaGlsZCx7Zm91bmRTZWxmOiExfSksdH1mdW5jdGlvbiBFKGUsdCxuLGwpe2Zvcig7biE9PW51bGw7KXtpZihuPT09dClsLmZvdW5kU2VsZj0hMDtlbHNlIGlmKG4udGFnPT09NXx8bi50YWc9PT0yN3x8bi50YWc9PT02KXtpZihsLmZvdW5kU2VsZilyZXR1cm4gZVsxXT1uLCEwO2VbMF09bn1lbHNlIGlmKChuLnRhZyE9PTIyfHxuLm1lbW9pemVkU3RhdGU9PT1udWxsKSYmRShlLHQsbi5jaGlsZCxsKSlyZXR1cm4hMDtuPW4uc2libGluZ31yZXR1cm4hMX1mdW5jdGlvbiBUKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OmNhc2UgMjc6Y2FzZSA2OnJldHVybiBlLnN0YXRlTm9kZTtjYXNlIDM6cmV0dXJuIGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDU1OSkpfX12YXIgTz1udWxsLEE9bnVsbDtmdW5jdGlvbiBOKGUsdCxuKXtyZXR1cm4gZT09PW4/ITA6ZT09PXQ/KE89ZSwhMCk6ITF9ZnVuY3Rpb24gTShlLHQsbil7cmV0dXJuIGU9PT1uPyhBPWUsITEpOmU9PT10PyhBIT09bnVsbCYmKE89ZSksITApOiExfWZ1bmN0aW9uIFkoZSl7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7ZG8gZT1lPT09bnVsbD9udWxsOmUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSYmZS50YWchPT0yNyYmZS50YWchPT0zKTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBIKGUsdCxuKXtmb3IodmFyIGw9MCxyPWU7cjtyPW4ocikpbCsrO3I9MDtmb3IodmFyIGM9dDtjO2M9bihjKSlyKys7Zm9yKDswPGwtcjspZT1uKGUpLGwtLTtmb3IoOzA8ci1sOyl0PW4odCksci0tO2Zvcig7bC0tOyl7aWYoZT09PXR8fHQhPT1udWxsJiZlPT09dC5hbHRlcm5hdGUpcmV0dXJuIGU7ZT1uKGUpLHQ9bih0KX1yZXR1cm4gbnVsbH12YXIgVT1PYmplY3QuYXNzaWduLEI9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLEo9U3ltYm9sLmZvcigicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnQiKSxXPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLG5lPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksZWU9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxjZT1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLG1lPVN5bWJvbC5mb3IoInJlYWN0LmNvbnN1bWVyIiksaGU9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLFA9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSwkPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksRj1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IikscmU9U3ltYm9sLmZvcigicmVhY3QubWVtbyIpLHE9U3ltYm9sLmZvcigicmVhY3QubGF6eSIpLHhlPVN5bWJvbC5mb3IoInJlYWN0LmFjdGl2aXR5IiksamU9U3ltYm9sLmZvcigicmVhY3QubGVnYWN5X2hpZGRlbiIpLFllPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWwiKSxEPVN5bWJvbC5mb3IoInJlYWN0LnZpZXdfdHJhbnNpdGlvbiIpLFg9U3ltYm9sLmZvcigicmVhY3QucmVjb3ZlcmFibGUiKSxLPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBhZShlKXtyZXR1cm4gZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Ij9udWxsOihlPUsmJmVbS118fGVbIkBAaXRlcmF0b3IiXSx0eXBlb2YgZT09ImZ1bmN0aW9uIj9lOm51bGwpfXZhciB5ZT1TeW1ib2wuZm9yKCJyZWFjdC5jbGllbnQucmVmZXJlbmNlIik7ZnVuY3Rpb24gc2UoZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIilyZXR1cm4gZS4kJHR5cGVvZj09PXllP251bGw6ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxudWxsO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZTtzd2l0Y2goZSl7Y2FzZSBuZTpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgY2U6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIGVlOnJldHVybiJTdHJpY3RNb2RlIjtjYXNlICQ6cmV0dXJuIlN1c3BlbnNlIjtjYXNlIEY6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSB4ZTpyZXR1cm4iQWN0aXZpdHkiO2Nhc2UgRDpyZXR1cm4iVmlld1RyYW5zaXRpb24ifWlmKHR5cGVvZiBlPT0ib2JqZWN0Iilzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBXOnJldHVybiJQb3J0YWwiO2Nhc2UgaGU6cmV0dXJuIGUuZGlzcGxheU5hbWV8fCJDb250ZXh0IjtjYXNlIG1lOnJldHVybihlLl9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgUDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSByZTpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6c2UoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgcTp0PWUuX3BheWxvYWQsZT1lLl9pbml0O3RyeXtyZXR1cm4gc2UoZSh0KSl9Y2F0Y2h7fX1yZXR1cm4gbnVsbH12YXIgbGU9QXJyYXkuaXNBcnJheSx0ZT1vLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxpZT11Ll9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxiZT17cGVuZGluZzohMSxkYXRhOm51bGwsbWV0aG9kOm51bGwsYWN0aW9uOm51bGx9LHdlPVtdLFJlPS0xO2Z1bmN0aW9uIHF0KGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIGl0KGUpezA+UmV8fChlLmN1cnJlbnQ9d2VbUmVdLHdlW1JlXT1udWxsLFJlLS0pfWZ1bmN0aW9uIFBlKGUsdCl7UmUrKyx3ZVtSZV09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBQbj1xdChudWxsKSxicj1xdChudWxsKSxIbD1xdChudWxsKSxhYz1xdChudWxsKTtmdW5jdGlvbiBvYyhlLHQpe3N3aXRjaChQZShIbCx0KSxQZShicixlKSxQZShQbixudWxsKSx0Lm5vZGVUeXBlKXtjYXNlIDk6Y2FzZSAxMTplPShlPXQuZG9jdW1lbnRFbGVtZW50KSYmKGU9ZS5uYW1lc3BhY2VVUkkpP2JTKGUpOjA7YnJlYWs7ZGVmYXVsdDppZihlPXQudGFnTmFtZSx0PXQubmFtZXNwYWNlVVJJKXQ9YlModCksZT14Uyh0LGUpO2Vsc2Ugc3dpdGNoKGUpe2Nhc2Uic3ZnIjplPTE7YnJlYWs7Y2FzZSJtYXRoIjplPTI7YnJlYWs7ZGVmYXVsdDplPTB9fWl0KFBuKSxQZShQbixlKX1mdW5jdGlvbiBzbygpe2l0KFBuKSxpdChiciksaXQoSGwpfWZ1bmN0aW9uIEFmKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTt0IT09bnVsbCYmKEpvLl9jdXJyZW50VmFsdWU9dC5tZW1vaXplZFN0YXRlLFBlKGFjLGUpKSx0PVBuLmN1cnJlbnQ7dmFyIG49eFModCxlLnR5cGUpO3QhPT1uJiYoUGUoYnIsZSksUGUoUG4sbikpfWZ1bmN0aW9uIHJjKGUpe2JyLmN1cnJlbnQ9PT1lJiYoaXQoUG4pLGl0KGJyKSksYWMuY3VycmVudD09PWUmJihpdChhYyksSm8uX2N1cnJlbnRWYWx1ZT1iZSl9dmFyIE5mLEl5O2Z1bmN0aW9uIEJsKGUpe2lmKE5mPT09dm9pZCAwKXRyeXt0aHJvdyBFcnJvcigpfWNhdGNoKG4pe3ZhciB0PW4uc3RhY2sudHJpbSgpLm1hdGNoKC9cbiggKihhdCApPykvKTtOZj10JiZ0WzFdfHwiIixJeT0tMTxuLnN0YWNrLmluZGV4T2YoYAogICAgYXRgKT8iICg8YW5vbnltb3VzPikiOi0xPG4uc3RhY2suaW5kZXhPZigiQCIpPyJAdW5rbm93bjowOjAiOiIifXJldHVybmAKYCtOZitlK0l5fXZhciBEZj0hMTtmdW5jdGlvbiBqZihlLHQpe2lmKCFlfHxEZilyZXR1cm4iIjtEZj0hMDt2YXIgbj1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e3ZhciBsPXtEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6ZnVuY3Rpb24oKXt0cnl7aWYodCl7dmFyIFo9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkoWi5wcm90b3R5cGUsInByb3BzIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KSx0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoWixbXSl9Y2F0Y2gob2Upe3ZhciB6PW9lfVJlZmxlY3QuY29uc3RydWN0KGUsW10sWil9ZWxzZXt0cnl7Wi5jYWxsKCl9Y2F0Y2gob2Upe3o9b2V9Wj0hMTt0cnl7dmFyIEc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLnByb3RvdHlwZSwicHJvcHMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInByb3BzIix7Y29uZmlndXJhYmxlOiEwLHNldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksWj0hMCxuZXcgZX1maW5hbGx5e1omJihHIT09dm9pZCAwP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicHJvcHMiLEcpOmRlbGV0ZSBlLnByb3RvdHlwZS5wcm9wcyl9fX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKG9lKXt6PW9lfShaPWUoKSkmJnR5cGVvZiBaLmNhdGNoPT0iZnVuY3Rpb24iJiZaLmNhdGNoKGZ1bmN0aW9uKCl7fSl9fWNhdGNoKG9lKXtpZihvZSYmeiYmdHlwZW9mIG9lLnN0YWNrPT0ic3RyaW5nIilyZXR1cm5bb2Uuc3RhY2ssei5zdGFja119cmV0dXJuW251bGwsbnVsbF19fTtsLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZT0iRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Ijt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCJuYW1lIik7ciYmci5jb25maWd1cmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwibmFtZSIse3ZhbHVlOiJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QifSk7dmFyIGM9bC5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxoPWNbMF0sUz1jWzFdO2lmKGgmJlMpe3ZhciBfPWguc3BsaXQoYApgKSxMPVMuc3BsaXQoYApgKTtmb3Iocj1sPTA7bDxfLmxlbmd0aCYmIV9bbF0uaW5jbHVkZXMoIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCIpOylsKys7Zm9yKDtyPEwubGVuZ3RoJiYhTFtyXS5pbmNsdWRlcygiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Iik7KXIrKztpZihsPT09Xy5sZW5ndGh8fHI9PT1MLmxlbmd0aClmb3IobD1fLmxlbmd0aC0xLHI9TC5sZW5ndGgtMTsxPD1sJiYwPD1yJiZfW2xdIT09TFtyXTspci0tO2Zvcig7MTw9bCYmMDw9cjtsLS0sci0tKWlmKF9bbF0hPT1MW3JdKXtpZihsIT09MXx8ciE9PTEpZG8gaWYobC0tLHItLSwwPnJ8fF9bbF0hPT1MW3JdKXt2YXIgVj1gCmArX1tsXS5yZXBsYWNlKCIgYXQgbmV3ICIsIiBhdCAiKTtyZXR1cm4gZS5kaXNwbGF5TmFtZSYmVi5pbmNsdWRlcygiPGFub255bW91cz4iKSYmKFY9Vi5yZXBsYWNlKCI8YW5vbnltb3VzPiIsZS5kaXNwbGF5TmFtZSkpLFZ9d2hpbGUoMTw9bCYmMDw9cik7YnJlYWt9fX1maW5hbGx5e0RmPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPW59cmV0dXJuKG49ZT9lLmRpc3BsYXlOYW1lfHxlLm5hbWU6IiIpP0JsKG4pOiIifWZ1bmN0aW9uIFpPKGUsdCl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBCbChlLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIEJsKCJMYXp5Iik7Y2FzZSAxMzpyZXR1cm4gZS5jaGlsZCE9PXQmJnQhPT1udWxsP0JsKCJTdXNwZW5zZSBGYWxsYmFjayIpOkJsKCJTdXNwZW5zZSIpO2Nhc2UgMTk6cmV0dXJuIEJsKCJTdXNwZW5zZUxpc3QiKTtjYXNlIDA6Y2FzZSAxNTpyZXR1cm4gamYoZS50eXBlLCExKTtjYXNlIDExOnJldHVybiBqZihlLnR5cGUucmVuZGVyLCExKTtjYXNlIDE6cmV0dXJuIGpmKGUudHlwZSwhMCk7Y2FzZSAzMTpyZXR1cm4gQmwoIkFjdGl2aXR5Iik7Y2FzZSAzMDpyZXR1cm4gQmwoIlZpZXdUcmFuc2l0aW9uIik7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gUHkoZSl7dHJ5e3ZhciB0PSIiLG49bnVsbDtkbyB0Kz1aTyhlLG4pLG49ZSxlPWUucmV0dXJuO3doaWxlKGUpO3JldHVybiB0fWNhdGNoKGwpe3JldHVybmAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtsLm1lc3NhZ2UrYApgK2wuc3RhY2t9fXZhciBNZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHpmPWEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxrZj1hLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLEZPPWEudW5zdGFibGVfc2hvdWxkWWllbGQsJE89YS51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsZW49YS51bnN0YWJsZV9ub3csSk89YS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxHeT1hLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFZ5PWEudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksaWM9YS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxXTz1hLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFl5PWEudW5zdGFibGVfSWRsZVByaW9yaXR5LGVBPWEubG9nLHRBPWEudW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUseHI9bnVsbCx0bj1udWxsO2Z1bmN0aW9uIElsKGUpe2lmKHR5cGVvZiBlQT09ImZ1bmN0aW9uIiYmdEEoZSksdG4mJnR5cGVvZiB0bi5zZXRTdHJpY3RNb2RlPT0iZnVuY3Rpb24iKXRyeXt0bi5zZXRTdHJpY3RNb2RlKHhyLGUpfWNhdGNoe319dmFyIG5uPU1hdGguY2x6MzI/TWF0aC5jbHozMjphQSxuQT1NYXRoLmxvZyxsQT1NYXRoLkxOMjtmdW5jdGlvbiBhQShlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLShuQShlKS9sQXwwKXwwfXZhciBjYz0yNTYsdWM9MjYyMTQ0LHNjPTQxOTQzMDQ7ZnVuY3Rpb24gd2EoZSl7dmFyIHQ9ZSY0MjtpZih0IT09MClyZXR1cm4gdDtzd2l0Y2goZSYtZSl7Y2FzZSAxOnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA4OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIDE2O2Nhc2UgMzI6cmV0dXJuIDMyO2Nhc2UgNjQ6cmV0dXJuIDY0O2Nhc2UgMTI4OnJldHVybiAxMjg7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOnJldHVybiBlJi1lO2Nhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIGUmMzkzMjE2MDtjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpyZXR1cm4gZSY2MjkxNDU2MDtjYXNlIDY3MTA4ODY0OnJldHVybiA2NzEwODg2NDtjYXNlIDEzNDIxNzcyODpyZXR1cm4gMTM0MjE3NzI4O2Nhc2UgMjY4NDM1NDU2OnJldHVybiAyNjg0MzU0NTY7Y2FzZSA1MzY4NzA5MTI6cmV0dXJuIDUzNjg3MDkxMjtjYXNlIDEwNzM3NDE4MjQ6cmV0dXJuIDA7ZGVmYXVsdDpyZXR1cm4gZX19ZnVuY3Rpb24gZmMoZSx0LG4pe3ZhciBsPWUucGVuZGluZ0xhbmVzO2lmKGw9PT0wKXJldHVybiAwO3ZhciByPTAsYz1lLnN1c3BlbmRlZExhbmVzLGg9ZS5waW5nZWRMYW5lcztlPWUud2FybUxhbmVzO3ZhciBTPWwmMTM0MjE3NzI3O3JldHVybiBTIT09MD8obD1TJn5jLGwhPT0wP3I9d2EobCk6KGgmPVMsaCE9PTA/cj13YShoKTpufHwobj1TJn5lLG4hPT0wJiYocj13YShuKSkpKSk6KFM9bCZ+YyxTIT09MD9yPXdhKFMpOmghPT0wP3I9d2EoaCk6bnx8KG49bCZ+ZSxuIT09MCYmKHI9d2EobikpKSkscj09PTA/MDp0IT09MCYmdCE9PXImJih0JmMpPT09MCYmKGM9ciYtcixuPXQmLXQsYz49bnx8Yz09PTMyJiYobiY0MTk0MDQ4KSE9PTApP3Q6cn1mdW5jdGlvbiBTcihlLHQpe3JldHVybihlLnBlbmRpbmdMYW5lcyZ+KGUuc3VzcGVuZGVkTGFuZXMmfmUucGluZ2VkTGFuZXMpJnQpPT09MH1mdW5jdGlvbiBxeShlLHQpeyh0JjgpIT09MCYmKHR8PXQmMzIpO3ZhciBuPWUuZW50YW5nbGVkTGFuZXM7aWYobiE9PTApZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLG4mPXQ7MDxuOyl7dmFyIGw9MzEtbm4obikscj0xPDxsO3R8PWVbbF0sbiY9fnJ9cmV0dXJuIHR9ZnVuY3Rpb24gb0EoZSx0KXtzd2l0Y2goZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA4OmNhc2UgNjQ6cmV0dXJuIHQrMjUwO2Nhc2UgMTY6Y2FzZSAzMjpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gdCs1ZTM7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6cmV0dXJuLTE7Y2FzZSA2NzEwODg2NDpjYXNlIDEzNDIxNzcyODpjYXNlIDI2ODQzNTQ1NjpjYXNlIDUzNjg3MDkxMjpjYXNlIDEwNzM3NDE4MjQ6cmV0dXJuLTE7ZGVmYXVsdDpyZXR1cm4tMX19ZnVuY3Rpb24gWHkoKXt2YXIgZT1zYztyZXR1cm4gc2M8PD0xLChzYyY2MjkxNDU2MCk9PT0wJiYoc2M9NDE5NDMwNCksZX1mdW5jdGlvbiBMZihlKXtmb3IodmFyIHQ9W10sbj0wOzMxPm47bisrKXQucHVzaChlKTtyZXR1cm4gdH1mdW5jdGlvbiBDcihlLHQpe2UucGVuZGluZ0xhbmVzfD10LHQhPT0yNjg0MzU0NTYmJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTApfWZ1bmN0aW9uIHJBKGUsdCxuLGwscixjKXt2YXIgaD1lLnBlbmRpbmdMYW5lcztlLnBlbmRpbmdMYW5lcz1uLGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTAsZS53YXJtTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9bixlLmVudGFuZ2xlZExhbmVzJj1uLGUuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMmPW4sZS5zaGVsbFN1c3BlbmRDb3VudGVyPTA7dmFyIFM9ZS5lbnRhbmdsZW1lbnRzLF89ZS5leHBpcmF0aW9uVGltZXMsTD1lLmhpZGRlblVwZGF0ZXM7Zm9yKG49aCZ+bjswPG47KXt2YXIgVj0zMS1ubihuKSxaPTE8PFY7U1tWXT0wLF9bVl09LTE7dmFyIHo9TFtWXTtpZih6IT09bnVsbClmb3IoTFtWXT1udWxsLFY9MDtWPHoubGVuZ3RoO1YrKyl7dmFyIEc9eltWXTtHIT09bnVsbCYmKEcubGFuZSY9LTUzNjg3MDkxMyl9biY9flp9bCE9PTAmJkt5KGUsbCwwKSxjIT09MCYmcj09PTAmJmUudGFnIT09MCYmKGUuc3VzcGVuZGVkTGFuZXN8PWMmfihoJn50KSl9ZnVuY3Rpb24gS3koZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LGUuc3VzcGVuZGVkTGFuZXMmPX50O3ZhciBsPTMxLW5uKHQpO2UuZW50YW5nbGVkTGFuZXN8PXQsZS5lbnRhbmdsZW1lbnRzW2xdPWUuZW50YW5nbGVtZW50c1tsXXwxMDczNzQxODI0fG4mMjYxOTMwfWZ1bmN0aW9uIFF5KGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciBsPTMxLW5uKG4pLHI9MTw8bDtyJnR8ZVtsXSZ0JiYoZVtsXXw9dCksbiY9fnJ9fWZ1bmN0aW9uIFp5KGUsdCl7dmFyIG49dCYtdDtyZXR1cm4gbj0obiY0MikhPT0wPzE6VWYobiksKG4mKGUuc3VzcGVuZGVkTGFuZXN8dCkpIT09MD8wOm59ZnVuY3Rpb24gVWYoZSl7c3dpdGNoKGUpe2Nhc2UgMjplPTE7YnJlYWs7Y2FzZSA4OmU9NDticmVhaztjYXNlIDMyOmU9MTY7YnJlYWs7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6ZT0xMjg7YnJlYWs7Y2FzZSAyNjg0MzU0NTY6ZT0xMzQyMTc3Mjg7YnJlYWs7ZGVmYXVsdDplPTB9cmV0dXJuIGV9ZnVuY3Rpb24gSGYoZSl7cmV0dXJuIGUmPS1lLDI8ZT84PGU/KGUmMTM0MjE3NzI3KSE9PTA/MzI6MjY4NDM1NDU2Ojg6Mn1mdW5jdGlvbiBGeSgpe3ZhciBlPWllLnA7cmV0dXJuIGUhPT0wP2U6KGU9d2luZG93LmV2ZW50LGU9PT12b2lkIDA/MzI6bDEoZS50eXBlKSl9ZnVuY3Rpb24gJHkoZSx0KXt2YXIgbj1pZS5wO3RyeXtyZXR1cm4gaWUucD1lLHQoKX1maW5hbGx5e2llLnA9bn19dmFyIG1sPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFJ0PSJfX3JlYWN0RmliZXIkIittbCxYdD0iX19yZWFjdFByb3BzJCIrbWwsZm89Il9fcmVhY3RDb250YWluZXIkIittbCxKeT0iX19yZWFjdEV2ZW50cyQiK21sLGlBPSJfX3JlYWN0TGlzdGVuZXJzJCIrbWwsY0E9Il9fcmVhY3RIYW5kbGVzJCIrbWwsV3k9Il9fcmVhY3RSZXNvdXJjZXMkIittbCxUcj0iX19yZWFjdE1hcmtlciQiK21sLGRjPSJfX3JlYWN0TG9hZCQiK21sO2Z1bmN0aW9uIG1jKGUpe2RlbGV0ZSBlW1J0XSxkZWxldGUgZVtYdF0sZGVsZXRlIGVbaUFdLGRlbGV0ZSBlW2NBXX1mdW5jdGlvbiBFYShlKXt2YXIgdDtpZih0PWVbUnRdKXJldHVybiB0O2Zvcih2YXIgbj1lLnBhcmVudE5vZGU7bjspe2lmKHQ9bltmb118fG5bUnRdKXtpZihuPXQuYWx0ZXJuYXRlLHQuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKGU9VVMoZSk7ZSE9PW51bGw7KXtpZihuPWVbUnRdKXJldHVybiBuO2U9VVMoZSl9cmV0dXJuIHR9ZT1uLG49ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIG1vKGUpe2lmKGU9ZVtSdF18fGVbZm9dKXt2YXIgdD1lLnRhZztpZih0PT09NXx8dD09PTZ8fHQ9PT0xM3x8dD09PTMxfHx0PT09MjZ8fHQ9PT0yN3x8dD09PTMpcmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gd3IoZSl7dmFyIHQ9ZS50YWc7aWYodD09PTV8fHQ9PT0yNnx8dD09PTI3fHx0PT09NilyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IoaSgzMykpfWZ1bmN0aW9uIGhvKGUpe3ZhciB0PWVbV3ldO3JldHVybiB0fHwodD1lW1d5XT17aG9pc3RhYmxlU3R5bGVzOm5ldyBNYXAsaG9pc3RhYmxlU2NyaXB0czpuZXcgTWFwfSksdH1mdW5jdGlvbiBidChlKXtlW1RyXT0hMH1mdW5jdGlvbiBlYihlKXtlW2RjXT12b2lkIDB9dmFyIHRiPW5ldyBTZXQsbmI9e307ZnVuY3Rpb24gUmEoZSx0KXtwbyhlLHQpLHBvKGUrIkNhcHR1cmUiLHQpfWZ1bmN0aW9uIHBvKGUsdCl7Zm9yKG5iW2VdPXQsZT0wO2U8dC5sZW5ndGg7ZSsrKXRiLmFkZCh0W2VdKX12YXIgdUE9UmVnRXhwKCJeWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokIiksbGI9e30sYWI9e307ZnVuY3Rpb24gc0EoZSl7cmV0dXJuIE1mLmNhbGwoYWIsZSk/ITA6TWYuY2FsbChsYixlKT8hMTp1QS50ZXN0KGUpP2FiW2VdPSEwOihsYltlXT0hMCwhMSl9dmFyIEJlPSExO2Z1bmN0aW9uIG9iKCl7dmFyIGU9QmU7cmV0dXJuIEJlPSExLGV9ZnVuY3Rpb24gaGMoZSx0LG4pe2lmKHNBKHQpKWlmKG49PT1udWxsKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7c3dpdGNoKHR5cGVvZiBuKXtjYXNlInVuZGVmaW5lZCI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybjtjYXNlImJvb2xlYW4iOnZhciBsPXQudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO2lmKGwhPT0iZGF0YS0iJiZsIT09ImFyaWEtIil7ZS5yZW1vdmVBdHRyaWJ1dGUodCk7cmV0dXJufX1lLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBwYyhlLHQsbil7aWYobj09PW51bGwpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6Y2FzZSJib29sZWFuIjplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gaGwoZSx0LG4sbCl7aWYobD09PW51bGwpZS5yZW1vdmVBdHRyaWJ1dGUobik7ZWxzZXtzd2l0Y2godHlwZW9mIGwpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6Y2FzZSJib29sZWFuIjplLnJlbW92ZUF0dHJpYnV0ZShuKTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGVOUyh0LG4sbCl9fWZ1bmN0aW9uIGxuKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJiaWdpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuIGU7Y2FzZSJvYmplY3QiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIiJ9fWZ1bmN0aW9uIHJiKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmKHQ9PT0iY2hlY2tib3gifHx0PT09InJhZGlvIil9ZnVuY3Rpb24gZkEoZSx0LG4pe3ZhciBsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsdCk7aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBsPCJ1IiYmdHlwZW9mIGwuZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5zZXQ9PSJmdW5jdGlvbiIpe3ZhciByPWwuZ2V0LGM9bC5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaCl7bj0iIitoLGMuY2FsbCh0aGlzLGgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bC5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LHNldFZhbHVlOmZ1bmN0aW9uKGgpe249IiIraH0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gQmYoZSl7aWYoIWUuX3ZhbHVlVHJhY2tlcil7dmFyIHQ9cmIoZSk/ImNoZWNrZWQiOiJ2YWx1ZSI7ZS5fdmFsdWVUcmFja2VyPWZBKGUsdCwiIitlW3RdKX19ZnVuY3Rpb24gaWIoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZS5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciBuPXQuZ2V0VmFsdWUoKSxsPSIiO3JldHVybiBlJiYobD1yYihlKT9lLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6ZS52YWx1ZSksZT1sLGUhPT1uPyh0LnNldFZhbHVlKGUpLCEwKTohMX12YXIgZEE9L1tcbiJcXF0vZztmdW5jdGlvbiB2bihlKXtyZXR1cm4gZS5yZXBsYWNlKGRBLGZ1bmN0aW9uKHQpe3JldHVybiJcXCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiICJ9KX1mdW5jdGlvbiBJZihlLHQsbixsLHIsYyxoLFMpe2UubmFtZT0iIixoIT1udWxsJiZ0eXBlb2YgaCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGghPSJzeW1ib2wiJiZ0eXBlb2YgaCE9ImJvb2xlYW4iP2UudHlwZT1oOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksdCE9bnVsbD9oPT09Im51bWJlciI/KHQ9PT0wJiZlLnZhbHVlPT09IiJ8fGUudmFsdWUhPXQpJiYoZS52YWx1ZT0iIitsbih0KSk6ZS52YWx1ZSE9PSIiK2xuKHQpJiYoZS52YWx1ZT0iIitsbih0KSk6aCE9PSJzdWJtaXQiJiZoIT09InJlc2V0Inx8ZS5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIiksdCE9bnVsbD9oPT09Im51bWJlciImJmUudmFsdWU9PXQ/UGYoZSxsbihlLnZhbHVlKSk6UGYoZSxsbih0KSk6biE9bnVsbD9QZihlLGxuKG4pKTpsIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKSxyPT1udWxsJiZjIT1udWxsJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIWMpLHIhPW51bGwmJihlLmNoZWNrZWQ9ciYmdHlwZW9mIHIhPSJmdW5jdGlvbiImJnR5cGVvZiByIT0ic3ltYm9sIiksUyE9bnVsbCYmdHlwZW9mIFMhPSJmdW5jdGlvbiImJnR5cGVvZiBTIT0ic3ltYm9sIiYmdHlwZW9mIFMhPSJib29sZWFuIj9lLm5hbWU9IiIrbG4oUyk6ZS5yZW1vdmVBdHRyaWJ1dGUoIm5hbWUiKX1mdW5jdGlvbiBjYihlLHQsbixsLHIsYyxoLFMpe2lmKGMhPW51bGwmJnR5cGVvZiBjIT0iZnVuY3Rpb24iJiZ0eXBlb2YgYyE9InN5bWJvbCImJnR5cGVvZiBjIT0iYm9vbGVhbiImJihlLnR5cGU9YyksdCE9bnVsbHx8biE9bnVsbCl7aWYoIShjIT09InN1Ym1pdCImJmMhPT0icmVzZXQifHx0IT1udWxsKSl7QmYoZSk7cmV0dXJufW49biE9bnVsbD8iIitsbihuKToiIix0PXQhPW51bGw/IiIrbG4odCk6bixTfHx0PT09ZS52YWx1ZXx8KGUudmFsdWU9dCksZS5kZWZhdWx0VmFsdWU9dH1sPWw/P3IsbD10eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiJiYhIWwsZS5jaGVja2VkPVM/ZS5jaGVja2VkOiEhbCxlLmRlZmF1bHRDaGVja2VkPSEhbCxoIT1udWxsJiZ0eXBlb2YgaCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGghPSJzeW1ib2wiJiZ0eXBlb2YgaCE9ImJvb2xlYW4iJiYoZS5uYW1lPWgpLEJmKGUpfWZ1bmN0aW9uIFBmKGUsdCl7ZS5kZWZhdWx0VmFsdWUhPT0iIit0JiYoZS5kZWZhdWx0VmFsdWU9IiIrdCl9ZnVuY3Rpb24gdm8oZSx0LG4sbCl7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0WyIkIituW3JdXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXI9dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PXImJihlW25dLnNlbGVjdGVkPXIpLHImJmwmJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitsbihuKSx0PW51bGwscj0wO3I8ZS5sZW5ndGg7cisrKXtpZihlW3JdLnZhbHVlPT09bil7ZVtyXS5zZWxlY3RlZD0hMCxsJiYoZVtyXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtyXS5kaXNhYmxlZHx8KHQ9ZVtyXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gdWIoZSx0LG4pe2lmKHQhPW51bGwmJih0PSIiK2xuKHQpLHQhPT1lLnZhbHVlJiYoZS52YWx1ZT10KSxuPT1udWxsKSl7ZS5kZWZhdWx0VmFsdWUhPT10JiYoZS5kZWZhdWx0VmFsdWU9dCk7cmV0dXJufWUuZGVmYXVsdFZhbHVlPW4hPW51bGw/IiIrbG4obik6IiJ9ZnVuY3Rpb24gc2IoZSx0LG4sbCl7aWYodD09bnVsbCl7aWYobCE9bnVsbCl7aWYobiE9bnVsbCl0aHJvdyBFcnJvcihpKDkyKSk7aWYobGUobCkpe2lmKDE8bC5sZW5ndGgpdGhyb3cgRXJyb3IoaSg5MykpO2w9bFswXX1uPWx9bj09bnVsbCYmKG49IiIpLHQ9bn1uPWxuKHQpLGUuZGVmYXVsdFZhbHVlPW4sbD1lLnRleHRDb250ZW50LGw9PT1uJiZsIT09IiImJmwhPT1udWxsJiYoZS52YWx1ZT1sKSxCZihlKX1mdW5jdGlvbiBnbyhlLHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJm4ubm9kZVR5cGU9PT0zKXtuLm5vZGVWYWx1ZT10O3JldHVybn19ZS50ZXh0Q29udGVudD10fXZhciBtQT1uZXcgU2V0KCJhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXAiLnNwbGl0KCIgIikpO2Z1bmN0aW9uIGZiKGUsdCxuKXt2YXIgbD10LmluZGV4T2YoIi0tIik9PT0wO249PW51bGx8fHR5cGVvZiBuPT0iYm9vbGVhbiJ8fG49PT0iIj9sP2Uuc2V0UHJvcGVydHkodCwiIik6dD09PSJmbG9hdCI/ZS5jc3NGbG9hdD0iIjplW3RdPSIiOmw/ZS5zZXRQcm9wZXJ0eSh0LG4pOnR5cGVvZiBuIT0ibnVtYmVyInx8bj09PTB8fG1BLmhhcyh0KT90PT09ImZsb2F0Ij9lLmNzc0Zsb2F0PW46ZVt0XT0oIiIrbikudHJpbSgpOmVbdF09bisicHgifWZ1bmN0aW9uIGRiKGUsdCxuKXtpZih0IT1udWxsJiZ0eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgRXJyb3IoaSg2MikpO2lmKGU9ZS5zdHlsZSxuIT1udWxsKXtmb3IodmFyIGwgaW4gbikhbi5oYXNPd25Qcm9wZXJ0eShsKXx8dCE9bnVsbCYmdC5oYXNPd25Qcm9wZXJ0eShsKXx8KGwuaW5kZXhPZigiLS0iKT09PTA/ZS5zZXRQcm9wZXJ0eShsLCIiKTpsPT09ImZsb2F0Ij9lLmNzc0Zsb2F0PSIiOmVbbF09IiIsQmU9ITApO2Zvcih2YXIgciBpbiB0KWw9dFtyXSx0Lmhhc093blByb3BlcnR5KHIpJiZuW3JdIT09bCYmKGZiKGUscixsKSxCZT0hMCl9ZWxzZSBmb3IodmFyIGMgaW4gdCl0Lmhhc093blByb3BlcnR5KGMpJiZmYihlLGMsdFtjXSl9ZnVuY3Rpb24gR2YoZSl7aWYoZS5pbmRleE9mKCItIik9PT0tMSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgaEE9bmV3IE1hcChbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImh0bWxGb3IiLCJmb3IiXSxbImh0dHBFcXVpdiIsImh0dHAtZXF1aXYiXSxbImNyb3NzT3JpZ2luIiwiY3Jvc3NvcmlnaW4iXSxbImFjY2VudEhlaWdodCIsImFjY2VudC1oZWlnaHQiXSxbImFsaWdubWVudEJhc2VsaW5lIiwiYWxpZ25tZW50LWJhc2VsaW5lIl0sWyJhcmFiaWNGb3JtIiwiYXJhYmljLWZvcm0iXSxbImJhc2VsaW5lU2hpZnQiLCJiYXNlbGluZS1zaGlmdCJdLFsiY2FwSGVpZ2h0IiwiY2FwLWhlaWdodCJdLFsiY2xpcFBhdGgiLCJjbGlwLXBhdGgiXSxbImNsaXBSdWxlIiwiY2xpcC1ydWxlIl0sWyJjb2xvckludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uIl0sWyJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIl0sWyJjb2xvclByb2ZpbGUiLCJjb2xvci1wcm9maWxlIl0sWyJjb2xvclJlbmRlcmluZyIsImNvbG9yLXJlbmRlcmluZyJdLFsiZG9taW5hbnRCYXNlbGluZSIsImRvbWluYW50LWJhc2VsaW5lIl0sWyJlbmFibGVCYWNrZ3JvdW5kIiwiZW5hYmxlLWJhY2tncm91bmQiXSxbImZpbGxPcGFjaXR5IiwiZmlsbC1vcGFjaXR5Il0sWyJmaWxsUnVsZSIsImZpbGwtcnVsZSJdLFsiZmxvb2RDb2xvciIsImZsb29kLWNvbG9yIl0sWyJmbG9vZE9wYWNpdHkiLCJmbG9vZC1vcGFjaXR5Il0sWyJmb250RmFtaWx5IiwiZm9udC1mYW1pbHkiXSxbImZvbnRTaXplIiwiZm9udC1zaXplIl0sWyJmb250U2l6ZUFkanVzdCIsImZvbnQtc2l6ZS1hZGp1c3QiXSxbImZvbnRTdHJldGNoIiwiZm9udC1zdHJldGNoIl0sWyJmb250U3R5bGUiLCJmb250LXN0eWxlIl0sWyJmb250VmFyaWFudCIsImZvbnQtdmFyaWFudCJdLFsiZm9udFdlaWdodCIsImZvbnQtd2VpZ2h0Il0sWyJnbHlwaE5hbWUiLCJnbHlwaC1uYW1lIl0sWyJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCIsImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiXSxbImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCIsImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIl0sWyJob3JpekFkdlgiLCJob3Jpei1hZHYteCJdLFsiaG9yaXpPcmlnaW5YIiwiaG9yaXotb3JpZ2luLXgiXSxbImltYWdlUmVuZGVyaW5nIiwiaW1hZ2UtcmVuZGVyaW5nIl0sWyJsZXR0ZXJTcGFjaW5nIiwibGV0dGVyLXNwYWNpbmciXSxbImxpZ2h0aW5nQ29sb3IiLCJsaWdodGluZy1jb2xvciJdLFsibWFya2VyRW5kIiwibWFya2VyLWVuZCJdLFsibWFya2VyTWlkIiwibWFya2VyLW1pZCJdLFsibWFya2VyU3RhcnQiLCJtYXJrZXItc3RhcnQiXSxbIm1hc2tUeXBlIiwibWFzay10eXBlIl0sWyJvdmVybGluZVBvc2l0aW9uIiwib3ZlcmxpbmUtcG9zaXRpb24iXSxbIm92ZXJsaW5lVGhpY2tuZXNzIiwib3ZlcmxpbmUtdGhpY2tuZXNzIl0sWyJwYWludE9yZGVyIiwicGFpbnQtb3JkZXIiXSxbInBhbm9zZS0xIiwicGFub3NlLTEiXSxbInBvaW50ZXJFdmVudHMiLCJwb2ludGVyLWV2ZW50cyJdLFsicmVuZGVyaW5nSW50ZW50IiwicmVuZGVyaW5nLWludGVudCJdLFsic2hhcGVSZW5kZXJpbmciLCJzaGFwZS1yZW5kZXJpbmciXSxbInN0b3BDb2xvciIsInN0b3AtY29sb3IiXSxbInN0b3BPcGFjaXR5Iiwic3RvcC1vcGFjaXR5Il0sWyJzdHJpa2V0aHJvdWdoUG9zaXRpb24iLCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIl0sWyJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzIiwic3RyaWtldGhyb3VnaC10aGlja25lc3MiXSxbInN0cm9rZURhc2hhcnJheSIsInN0cm9rZS1kYXNoYXJyYXkiXSxbInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2UtZGFzaG9mZnNldCJdLFsic3Ryb2tlTGluZWNhcCIsInN0cm9rZS1saW5lY2FwIl0sWyJzdHJva2VMaW5lam9pbiIsInN0cm9rZS1saW5lam9pbiJdLFsic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZS1taXRlcmxpbWl0Il0sWyJzdHJva2VPcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiXSxbInN0cm9rZVdpZHRoIiwic3Ryb2tlLXdpZHRoIl0sWyJ0ZXh0QW5jaG9yIiwidGV4dC1hbmNob3IiXSxbInRleHREZWNvcmF0aW9uIiwidGV4dC1kZWNvcmF0aW9uIl0sWyJ0ZXh0UmVuZGVyaW5nIiwidGV4dC1yZW5kZXJpbmciXSxbInRyYW5zZm9ybU9yaWdpbiIsInRyYW5zZm9ybS1vcmlnaW4iXSxbInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lLXBvc2l0aW9uIl0sWyJ1bmRlcmxpbmVUaGlja25lc3MiLCJ1bmRlcmxpbmUtdGhpY2tuZXNzIl0sWyJ1bmljb2RlQmlkaSIsInVuaWNvZGUtYmlkaSJdLFsidW5pY29kZVJhbmdlIiwidW5pY29kZS1yYW5nZSJdLFsidW5pdHNQZXJFbSIsInVuaXRzLXBlci1lbSJdLFsidkFscGhhYmV0aWMiLCJ2LWFscGhhYmV0aWMiXSxbInZIYW5naW5nIiwidi1oYW5naW5nIl0sWyJ2SWRlb2dyYXBoaWMiLCJ2LWlkZW9ncmFwaGljIl0sWyJ2TWF0aGVtYXRpY2FsIiwidi1tYXRoZW1hdGljYWwiXSxbInZlY3RvckVmZmVjdCIsInZlY3Rvci1lZmZlY3QiXSxbInZlcnRBZHZZIiwidmVydC1hZHYteSJdLFsidmVydE9yaWdpblgiLCJ2ZXJ0LW9yaWdpbi14Il0sWyJ2ZXJ0T3JpZ2luWSIsInZlcnQtb3JpZ2luLXkiXSxbIndvcmRTcGFjaW5nIiwid29yZC1zcGFjaW5nIl0sWyJ3cml0aW5nTW9kZSIsIndyaXRpbmctbW9kZSJdLFsieG1sbnNYbGluayIsInhtbG5zOnhsaW5rIl0sWyJ4SGVpZ2h0IiwieC1oZWlnaHQiXV0pLHBBPS9eW1x1MDAwMC1cdTAwMUYgXSpqW1xyXG5cdF0qYVtcclxuXHRdKnZbXHJcblx0XSphW1xyXG5cdF0qc1tcclxuXHRdKmNbXHJcblx0XSpyW1xyXG5cdF0qaVtcclxuXHRdKnBbXHJcblx0XSp0W1xyXG5cdF0qOi9pO2Z1bmN0aW9uIHZjKGUpe3JldHVybiBwQS50ZXN0KCIiK2UpPyJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLicpIjplfWZ1bmN0aW9uIEduKCl7fXZhciBWZj1udWxsO2Z1bmN0aW9uIFlmKGUpe3JldHVybiBlPWUudGFyZ2V0fHxlLnNyY0VsZW1lbnR8fHdpbmRvdyxlLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSxlLm5vZGVUeXBlPT09Mz9lLnBhcmVudE5vZGU6ZX12YXIgeW89bnVsbCxibz1udWxsO2Z1bmN0aW9uIG1iKGUpe3ZhciB0PW1vKGUpO2lmKHQmJihlPXQuc3RhdGVOb2RlKSl7dmFyIG49ZVtYdF18fG51bGw7ZTpzd2l0Y2goZT10LnN0YXRlTm9kZSx0LnR5cGUpe2Nhc2UiaW5wdXQiOmlmKElmKGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmNoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZCxuLnR5cGUsbi5uYW1lKSx0PW4ubmFtZSxuLnR5cGU9PT0icmFkaW8iJiZ0IT1udWxsKXtmb3Iobj1lO24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPSInK3ZuKCIiK3QpKyciXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgbD1uW3RdO2lmKGwhPT1lJiZsLmZvcm09PT1lLmZvcm0pe3ZhciByPWxbWHRdfHxudWxsO2lmKCFyKXRocm93IEVycm9yKGkoOTApKTtJZihsLHIudmFsdWUsci5kZWZhdWx0VmFsdWUsci5kZWZhdWx0VmFsdWUsci5jaGVja2VkLHIuZGVmYXVsdENoZWNrZWQsci50eXBlLHIubmFtZSl9fWZvcih0PTA7dDxuLmxlbmd0aDt0KyspbD1uW3RdLGwuZm9ybT09PWUuZm9ybSYmaWIobCl9YnJlYWsgZTtjYXNlInRleHRhcmVhIjp1YihlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUpO2JyZWFrIGU7Y2FzZSJzZWxlY3QiOnQ9bi52YWx1ZSx0IT1udWxsJiZ2byhlLCEhbi5tdWx0aXBsZSx0LCExKX19fXZhciBxZj0hMTtmdW5jdGlvbiBoYihlLHQsbil7aWYocWYpcmV0dXJuIGUodCxuKTtxZj0hMDt0cnl7dmFyIGw9ZSh0KTtyZXR1cm4gbH1maW5hbGx5e2lmKHFmPSExLCh5byE9PW51bGx8fGJvIT09bnVsbCkmJih2dSgpLHlvJiYodD15byxlPWJvLGJvPXlvPW51bGwsbWIodCksZSkpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspbWIoZVt0XSl9fWZ1bmN0aW9uIEVyKGUsdCl7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobj09PW51bGwpcmV0dXJuIG51bGw7dmFyIGw9bltYdF18fG51bGw7aWYobD09PW51bGwpcmV0dXJuIG51bGw7bj1sW3RdO2U6c3dpdGNoKHQpe2Nhc2Uib25DbGljayI6Y2FzZSJvbkNsaWNrQ2FwdHVyZSI6Y2FzZSJvbkRvdWJsZUNsaWNrIjpjYXNlIm9uRG91YmxlQ2xpY2tDYXB0dXJlIjpjYXNlIm9uTW91c2VEb3duIjpjYXNlIm9uTW91c2VEb3duQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlTW92ZSI6Y2FzZSJvbk1vdXNlTW92ZUNhcHR1cmUiOmNhc2Uib25Nb3VzZVVwIjpjYXNlIm9uTW91c2VVcENhcHR1cmUiOmNhc2Uib25Nb3VzZUVudGVyIjoobD0hbC5kaXNhYmxlZCl8fChlPWUudHlwZSxsPSEoZT09PSJidXR0b24ifHxlPT09ImlucHV0Inx8ZT09PSJzZWxlY3QifHxlPT09InRleHRhcmVhIikpLGU9IWw7YnJlYWsgZTtkZWZhdWx0OmU9ITF9aWYoZSlyZXR1cm4gbnVsbDtpZihuJiZ0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihpKDIzMSx0LHR5cGVvZiBuKSk7cmV0dXJuIG59dmFyIHBsPSEodHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ+InUiKSxYZj0hMTtpZihwbCl0cnl7dmFyIFJyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShSciwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1hmPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixScixSciksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLFJyLFJyKX1jYXRjaHtYZj0hMX12YXIgUGw9bnVsbCxLZj1udWxsLGdjPW51bGw7ZnVuY3Rpb24gcGIoKXtpZihnYylyZXR1cm4gZ2M7dmFyIGUsdD1LZixuPXQubGVuZ3RoLGwscj0idmFsdWUiaW4gUGw/UGwudmFsdWU6UGwudGV4dENvbnRlbnQsYz1yLmxlbmd0aDtmb3IoZT0wO2U8biYmdFtlXT09PXJbZV07ZSsrKTt2YXIgaD1uLWU7Zm9yKGw9MTtsPD1oJiZ0W24tbF09PT1yW2MtbF07bCsrKTtyZXR1cm4gZ2M9ci5zbGljZShlLDE8bD8xLWw6dm9pZCAwKX1mdW5jdGlvbiB5YyhlKXt2YXIgdD1lLmtleUNvZGU7cmV0dXJuImNoYXJDb2RlImluIGU/KGU9ZS5jaGFyQ29kZSxlPT09MCYmdD09PTEzJiYoZT0xMykpOmU9dCxlPT09MTAmJihlPTEzKSwzMjw9ZXx8ZT09PTEzP2U6MH1mdW5jdGlvbiBiYygpe3JldHVybiEwfWZ1bmN0aW9uIHZiKCl7cmV0dXJuITF9ZnVuY3Rpb24gTHQoZSl7ZnVuY3Rpb24gdChuLGwscixjLGgpe3RoaXMuX3JlYWN0TmFtZT1uLHRoaXMuX3RhcmdldEluc3Q9cix0aGlzLnR5cGU9bCx0aGlzLm5hdGl2ZUV2ZW50PWMsdGhpcy50YXJnZXQ9aCx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIFMgaW4gZSllLmhhc093blByb3BlcnR5KFMpJiYobj1lW1NdLHRoaXNbU109bj9uKGMpOmNbU10pO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0oYy5kZWZhdWx0UHJldmVudGVkIT1udWxsP2MuZGVmYXVsdFByZXZlbnRlZDpjLnJldHVyblZhbHVlPT09ITEpP2JjOnZiLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dmIsdGhpc31yZXR1cm4gVSh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWJjKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWJjKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OmJjfSksdH12YXIgR2w9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0seGM9THQoR2wpLF9yPVUoe30sR2wse3ZpZXc6MCxkZXRhaWw6MH0pLHZBPUx0KF9yKSxRZixaZixPcixTYz1VKHt9LF9yLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOiRmLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbGF0ZWRUYXJnZXQ9PT12b2lkIDA/ZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50OmUucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFgiaW4gZT9lLm1vdmVtZW50WDooZSE9PU9yJiYoT3ImJmUudHlwZT09PSJtb3VzZW1vdmUiPyhRZj1lLnNjcmVlblgtT3Iuc2NyZWVuWCxaZj1lLnNjcmVlblktT3Iuc2NyZWVuWSk6WmY9UWY9MCxPcj1lKSxRZil9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtyZXR1cm4ibW92ZW1lbnRZImluIGU/ZS5tb3ZlbWVudFk6WmZ9fSksZ2I9THQoU2MpLGdBPVUoe30sU2Mse2RhdGFUcmFuc2ZlcjowfSkseUE9THQoZ0EpLGJBPVUoe30sX3Ise3JlbGF0ZWRUYXJnZXQ6MH0pLEZmPUx0KGJBKSx4QT1VKHt9LEdsLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxTQT1MdCh4QSksQ0E9VSh7fSxHbCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxUQT1MdChDQSksd0E9VSh7fSxHbCx7ZGF0YTowfSkseWI9THQod0EpLEVBPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSxSQT17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoiQWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9LF9BPXtBbHQ6ImFsdEtleSIsQ29udHJvbDoiY3RybEtleSIsTWV0YToibWV0YUtleSIsU2hpZnQ6InNoaWZ0S2V5In07ZnVuY3Rpb24gT0EoZSl7dmFyIHQ9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gdC5nZXRNb2RpZmllclN0YXRlP3QuZ2V0TW9kaWZpZXJTdGF0ZShlKTooZT1fQVtlXSk/ISF0W2VdOiExfWZ1bmN0aW9uICRmKCl7cmV0dXJuIE9BfXZhciBBQT1VKHt9LF9yLHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciB0PUVBW2Uua2V5XXx8ZS5rZXk7aWYodCE9PSJVbmlkZW50aWZpZWQiKXJldHVybiB0fXJldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiPyhlPXljKGUpLGU9PT0xMz8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9SQVtlLmtleUNvZGVdfHwiVW5pZGVudGlmaWVkIjoiIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6JGYsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/eWMoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj95YyhlKTplLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9fSksTkE9THQoQUEpLERBPVUoe30sU2Mse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksYmI9THQoREEpLGpBPVUoe30sR2wse3N1Ym1pdHRlcjowfSksTUE9THQoakEpLHpBPVUoe30sX3Ise3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTokZn0pLGtBPUx0KHpBKSxMQT1VKHt9LEdsLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLFVBPUx0KExBKSxIQT1VKHt9LFNjLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksQkE9THQoSEEpLElBPVUoe30sR2wse25ld1N0YXRlOjAsb2xkU3RhdGU6MCxzb3VyY2U6MH0pLFBBPUx0KElBKSxHQT1bOSwxMywyNywzMl0sSmY9cGwmJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyxBcj1udWxsO3BsJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiYoQXI9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgVkE9cGwmJiJUZXh0RXZlbnQiaW4gd2luZG93JiYhQXIseGI9cGwmJighSmZ8fEFyJiY4PEFyJiYxMT49QXIpLFNiPSIgIixDYj0hMTtmdW5jdGlvbiBUYihlLHQpe3N3aXRjaChlKXtjYXNlImtleXVwIjpyZXR1cm4gR0EuaW5kZXhPZih0LmtleUNvZGUpIT09LTE7Y2FzZSJrZXlkb3duIjpyZXR1cm4gdC5rZXlDb2RlIT09MjI5O2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImZvY3Vzb3V0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB3YihlKXtyZXR1cm4gZT1lLmRldGFpbCx0eXBlb2YgZT09Im9iamVjdCImJiJkYXRhImluIGU/ZS5kYXRhOm51bGx9dmFyIHhvPSExO2Z1bmN0aW9uIFlBKGUsdCl7c3dpdGNoKGUpe2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiB3Yih0KTtjYXNlImtleXByZXNzIjpyZXR1cm4gdC53aGljaCE9PTMyP251bGw6KENiPSEwLFNiKTtjYXNlInRleHRJbnB1dCI6cmV0dXJuIGU9dC5kYXRhLGU9PT1TYiYmQ2I/bnVsbDplO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHFBKGUsdCl7aWYoeG8pcmV0dXJuIGU9PT0iY29tcG9zaXRpb25lbmQifHwhSmYmJlRiKGUsdCk/KGU9cGIoKSxnYz1LZj1QbD1udWxsLHhvPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2UicGFzdGUiOnJldHVybiBudWxsO2Nhc2Uia2V5cHJlc3MiOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiB4YiYmdC5sb2NhbGUhPT0ia28iP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBYQT17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gRWIoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09ImlucHV0Ij8hIVhBW2UudHlwZV06dD09PSJ0ZXh0YXJlYSJ9ZnVuY3Rpb24gUmIoZSx0LG4sbCl7eW8/Ym8/Ym8ucHVzaChsKTpibz1bbF06eW89bCx0PUN1KHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IHhjKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLGwpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgTnI9bnVsbCxEcj1udWxsO2Z1bmN0aW9uIEtBKGUpe21TKGUsMCl9ZnVuY3Rpb24gQ2MoZSl7dmFyIHQ9d3IoZSk7aWYoaWIodCkpcmV0dXJuIGV9ZnVuY3Rpb24gX2IoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIE9iPSExO2lmKHBsKXt2YXIgV2Y7aWYocGwpe3ZhciBlZD0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighZWQpe3ZhciBBYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtBYi5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksZWQ9dHlwZW9mIEFiLm9uaW5wdXQ9PSJmdW5jdGlvbiJ9V2Y9ZWR9ZWxzZSBXZj0hMTtPYj1XZiYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBOYigpe05yJiYoTnIuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLERiKSxEcj1Ocj1udWxsKX1mdW5jdGlvbiBEYihlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJkNjKERyKSl7dmFyIHQ9W107UmIodCxEcixlLFlmKGUpKSxoYihLQSx0KX19ZnVuY3Rpb24gUUEoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KE5iKCksTnI9dCxEcj1uLE5yLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixEYikpOmU9PT0iZm9jdXNvdXQiJiZOYigpfWZ1bmN0aW9uIFpBKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIENjKERyKX1mdW5jdGlvbiBGQShlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiBDYyh0KX1mdW5jdGlvbiAkQShlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIENjKHQpfWZ1bmN0aW9uIEpBKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgYW49dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6SkE7ZnVuY3Rpb24ganIoZSx0KXtpZihhbihlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbD1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciByPW5bbF07aWYoIU1mLmNhbGwodCxyKXx8IWFuKGVbcl0sdFtyXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdGQoZSl7aWYoZT1lfHwodHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudDp2b2lkIDApLHR5cGVvZiBlPiJ1IilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoe3JldHVybiBlLmJvZHl9fWZ1bmN0aW9uIGpiKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBNYihlLHQpe3ZhciBuPWpiKGUpO2U9MDtmb3IodmFyIGw7bjspe2lmKG4ubm9kZVR5cGU9PT0zKXtpZihsPWUrbi50ZXh0Q29udGVudC5sZW5ndGgsZTw9dCYmbD49dClyZXR1cm57bm9kZTpuLG9mZnNldDp0LWV9O2U9bH1lOntmb3IoO247KXtpZihuLm5leHRTaWJsaW5nKXtuPW4ubmV4dFNpYmxpbmc7YnJlYWsgZX1uPW4ucGFyZW50Tm9kZX1uPXZvaWQgMH1uPWpiKG4pfX1mdW5jdGlvbiB6YihlLHQpe3JldHVybiBlJiZ0P2U9PT10PyEwOmUmJmUubm9kZVR5cGU9PT0zPyExOnQmJnQubm9kZVR5cGU9PT0zP3piKGUsdC5wYXJlbnROb2RlKToiY29udGFpbnMiaW4gZT9lLmNvbnRhaW5zKHQpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSYxNik6ITE6ITF9ZnVuY3Rpb24ga2IoZSl7ZT1lIT1udWxsJiZlLm93bmVyRG9jdW1lbnQhPW51bGwmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyE9bnVsbD9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc6d2luZG93O2Zvcih2YXIgdD10ZChlLmRvY3VtZW50KTt0IGluc3RhbmNlb2YgZS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgbj10eXBlb2YgdC5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWY9PSJzdHJpbmcifWNhdGNoe249ITF9aWYobillPXQuY29udGVudFdpbmRvdztlbHNlIGJyZWFrO3Q9dGQoZS5kb2N1bWVudCl9cmV0dXJuIHR9ZnVuY3Rpb24gbmQoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0JiYodD09PSJpbnB1dCImJihlLnR5cGU9PT0idGV4dCJ8fGUudHlwZT09PSJzZWFyY2gifHxlLnR5cGU9PT0idGVsInx8ZS50eXBlPT09InVybCJ8fGUudHlwZT09PSJwYXNzd29yZCIpfHx0PT09InRleHRhcmVhInx8ZS5jb250ZW50RWRpdGFibGU9PT0idHJ1ZSIpfXZhciBXQT1wbCYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxTbz1udWxsLGxkPW51bGwsTXI9bnVsbCxhZD0hMTtmdW5jdGlvbiBMYihlLHQsbil7dmFyIGw9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7YWR8fFNvPT1udWxsfHxTbyE9PXRkKGwpfHwobD1Tbywic2VsZWN0aW9uU3RhcnQiaW4gbCYmbmQobCk/bD17c3RhcnQ6bC5zZWxlY3Rpb25TdGFydCxlbmQ6bC5zZWxlY3Rpb25FbmR9OihsPShsLm93bmVyRG9jdW1lbnQmJmwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxsPXthbmNob3JOb2RlOmwuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6bC5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOmwuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OmwuZm9jdXNPZmZzZXR9KSxNciYmanIoTXIsbCl8fChNcj1sLGw9Q3UobGQsIm9uU2VsZWN0IiksMDxsLmxlbmd0aCYmKHQ9bmV3IHhjKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6bH0pLHQudGFyZ2V0PVNvKSkpfWZ1bmN0aW9uIF9hKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBDbz17YW5pbWF0aW9uZW5kOl9hKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246X2EoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0Ol9hKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25ydW46X2EoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uUnVuIiksdHJhbnNpdGlvbnN0YXJ0Ol9hKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvblN0YXJ0IiksdHJhbnNpdGlvbmNhbmNlbDpfYSgiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25DYW5jZWwiKSx0cmFuc2l0aW9uZW5kOl9hKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxvZD17fSxVYj17fTtwbCYmKFViPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmltYXRpb25FdmVudCJpbiB3aW5kb3d8fChkZWxldGUgQ28uYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgQ28uYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgQ28uYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIENvLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gT2EoZSl7aWYob2RbZV0pcmV0dXJuIG9kW2VdO2lmKCFDb1tlXSlyZXR1cm4gZTt2YXIgdD1Db1tlXSxuO2ZvcihuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiBVYilyZXR1cm4gb2RbZV09dFtuXTtyZXR1cm4gZX12YXIgSGI9T2EoImFuaW1hdGlvbmVuZCIpLEJiPU9hKCJhbmltYXRpb25pdGVyYXRpb24iKSxJYj1PYSgiYW5pbWF0aW9uc3RhcnQiKSxlTj1PYSgidHJhbnNpdGlvbnJ1biIpLHROPU9hKCJ0cmFuc2l0aW9uc3RhcnQiKSxuTj1PYSgidHJhbnNpdGlvbmNhbmNlbCIpLFBiPU9hKCJ0cmFuc2l0aW9uZW5kIiksR2I9bmV3IE1hcCxyZD0iYWJvcnQgYXV4Q2xpY2sgYmVmb3JlVG9nZ2xlIGNhbmNlbCBjYW5QbGF5IGNhblBsYXlUaHJvdWdoIGNsaWNrIGNsb3NlIGNvbnRleHRNZW51IGNvcHkgY3V0IGRyYWcgZHJhZ0VuZCBkcmFnRW50ZXIgZHJhZ0V4aXQgZHJhZ0xlYXZlIGRyYWdPdmVyIGRyYWdTdGFydCBkcm9wIGR1cmF0aW9uQ2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGZ1bGxzY3JlZW5DaGFuZ2UgZnVsbHNjcmVlbkVycm9yIGdvdFBvaW50ZXJDYXB0dXJlIGlucHV0IGludmFsaWQga2V5RG93biBrZXlQcmVzcyBrZXlVcCBsb2FkIGxvYWRlZERhdGEgbG9hZGVkTWV0YWRhdGEgbG9hZFN0YXJ0IGxvc3RQb2ludGVyQ2FwdHVyZSBtb3VzZURvd24gbW91c2VNb3ZlIG1vdXNlT3V0IG1vdXNlT3ZlciBtb3VzZVVwIHBhc3RlIHBhdXNlIHBsYXkgcGxheWluZyBwb2ludGVyQ2FuY2VsIHBvaW50ZXJEb3duIHBvaW50ZXJNb3ZlIHBvaW50ZXJPdXQgcG9pbnRlck92ZXIgcG9pbnRlclVwIHByb2dyZXNzIHJhdGVDaGFuZ2UgcmVzZXQgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VibWl0IHN1c3BlbmQgdGltZVVwZGF0ZSB0b3VjaENhbmNlbCB0b3VjaEVuZCB0b3VjaFN0YXJ0IHZvbHVtZUNoYW5nZSBzY3JvbGwgdG9nZ2xlIHRvdWNoTW92ZSB3YWl0aW5nIHdoZWVsIi5zcGxpdCgiICIpO3JkLnB1c2goInNjcm9sbEVuZCIpO2Z1bmN0aW9uIEFuKGUsdCl7R2Iuc2V0KGUsdCksUmEodCxbZV0pfXZhciBsTj0wO2Z1bmN0aW9uIHZsKGUsdCl7aWYoZS5uYW1lIT1udWxsJiZlLm5hbWUhPT0iYXV0byIpcmV0dXJuIGUubmFtZTtpZih0LmF1dG9OYW1lIT09bnVsbClyZXR1cm4gdC5hdXRvTmFtZTtlPU1uLmlkZW50aWZpZXJQcmVmaXg7dmFyIG49bE4rKztyZXR1cm4gZT0iXyIrZSsidF8iK24udG9TdHJpbmcoMzIpKyJfIix0LmF1dG9OYW1lPWV9ZnVuY3Rpb24gVmIoZSl7aWYoZT09bnVsbHx8dHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3ZhciB0PW51bGwsbj1HbztpZihuIT09bnVsbClmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIHI9ZVtuW2xdXTtpZihyIT1udWxsKXtpZihyPT09Im5vbmUiKXJldHVybiJub25lIjt0PXQ9PW51bGw/cjp0KygiICIrcil9fXJldHVybiB0Pz9lLmRlZmF1bHR9ZnVuY3Rpb24gZ2woZSx0KXtyZXR1cm4gZT1WYihlKSx0PVZiKHQpLHQ9PW51bGw/ZT09PSJhdXRvIj9udWxsOmU6dD09PSJhdXRvIj9udWxsOnR9dmFyIFRjPXR5cGVvZiByZXBvcnRFcnJvcj09ImZ1bmN0aW9uIj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZih0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50PT0iZnVuY3Rpb24iKXt2YXIgdD1uZXcgd2luZG93LkVycm9yRXZlbnQoImVycm9yIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6dHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmdHlwZW9mIGUubWVzc2FnZT09InN0cmluZyI/U3RyaW5nKGUubWVzc2FnZSk6U3RyaW5nKGUpLGVycm9yOmV9KTtpZighd2luZG93LmRpc3BhdGNoRXZlbnQodCkpcmV0dXJufWVsc2UgaWYodHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy5lbWl0PT0iZnVuY3Rpb24iKXtwcm9jZXNzLmVtaXQoInVuY2F1Z2h0RXhjZXB0aW9uIixlKTtyZXR1cm59Y29uc29sZS5lcnJvcihlKX0sZ249W10sVG89MCxpZD0wO2Z1bmN0aW9uIHdjKCl7Zm9yKHZhciBlPVRvLHQ9aWQ9VG89MDt0PGU7KXt2YXIgbj1nblt0XTtnblt0KytdPW51bGw7dmFyIGw9Z25bdF07Z25bdCsrXT1udWxsO3ZhciByPWduW3RdO2duW3QrK109bnVsbDt2YXIgYz1nblt0XTtpZihnblt0KytdPW51bGwsbCE9PW51bGwmJnIhPT1udWxsKXt2YXIgaD1sLnBlbmRpbmc7aD09PW51bGw/ci5uZXh0PXI6KHIubmV4dD1oLm5leHQsaC5uZXh0PXIpLGwucGVuZGluZz1yfWMhPT0wJiZZYihuLHIsYyl9fWZ1bmN0aW9uIEVjKGUsdCxuLGwpe2duW1RvKytdPWUsZ25bVG8rK109dCxnbltUbysrXT1uLGduW1RvKytdPWwsaWR8PWwsZS5sYW5lc3w9bCxlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZS5sYW5lc3w9bCl9ZnVuY3Rpb24gY2QoZSx0LG4sbCl7cmV0dXJuIEVjKGUsdCxuLGwpLFJjKGUpfWZ1bmN0aW9uIEFhKGUsdCl7cmV0dXJuIEVjKGUsbnVsbCxudWxsLHQpLFJjKGUpfWZ1bmN0aW9uIFliKGUsdCxuKXtlLmxhbmVzfD1uO3ZhciBsPWUuYWx0ZXJuYXRlO2whPT1udWxsJiYobC5sYW5lc3w9bik7Zm9yKHZhciByPSExLGM9ZS5yZXR1cm47YyE9PW51bGw7KWMuY2hpbGRMYW5lc3w9bixsPWMuYWx0ZXJuYXRlLGwhPT1udWxsJiYobC5jaGlsZExhbmVzfD1uKSxjLnRhZz09PTIyJiYoZT1jLnN0YXRlTm9kZSxlPT09bnVsbHx8ZS5fdmlzaWJpbGl0eSYxfHwocj0hMCkpLGU9YyxjPWMucmV0dXJuO3JldHVybiBlLnRhZz09PTM/KGM9ZS5zdGF0ZU5vZGUsciYmdCE9PW51bGwmJihyPTMxLW5uKG4pLGU9Yy5oaWRkZW5VcGRhdGVzLGw9ZVtyXSxsPT09bnVsbD9lW3JdPVt0XTpsLnB1c2godCksdC5sYW5lPW58NTM2ODcwOTEyKSxjKTpudWxsfWZ1bmN0aW9uIFJjKGUpe2lmKDUwPHRpKXRocm93IHRpPTAscHU9bnVsbCxFcnJvcihpKDE4NSkpO2Zvcih2YXIgdD1lLnJldHVybjt0IT09bnVsbDspZT10LHQ9ZS5yZXR1cm47cmV0dXJuIGUudGFnPT09Mz9lLnN0YXRlTm9kZTpudWxsfXZhciB3bz17fTtmdW5jdGlvbiBhTihlLHQsbixsKXt0aGlzLnRhZz1lLHRoaXMua2V5PW4sdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWZDbGVhbnVwPXRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9bCx0aGlzLnN1YnRyZWVGbGFncz10aGlzLmZsYWdzPTAsdGhpcy5kZWxldGlvbnM9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gS3QoZSx0LG4sbCl7cmV0dXJuIG5ldyBhTihlLHQsbixsKX1mdW5jdGlvbiB1ZChlKXtyZXR1cm4gZT1lLnByb3RvdHlwZSwhKCFlfHwhZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiB5bChlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBuPT09bnVsbD8obj1LdChlLnRhZyx0LGUua2V5LGUubW9kZSksbi5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLG4udHlwZT1lLnR5cGUsbi5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsbi5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT1uKToobi5wZW5kaW5nUHJvcHM9dCxuLnR5cGU9ZS50eXBlLG4uZmxhZ3M9MCxuLnN1YnRyZWVGbGFncz0wLG4uZGVsZXRpb25zPW51bGwpLG4uZmxhZ3M9ZS5mbGFncyYxMjA2OTEwOTc2LG4uY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMsbi5sYW5lcz1lLmxhbmVzLG4uY2hpbGQ9ZS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQ9ZS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9LG4uc2libGluZz1lLnNpYmxpbmcsbi5pbmRleD1lLmluZGV4LG4ucmVmPWUucmVmLG4ucmVmQ2xlYW51cD1lLnJlZkNsZWFudXAsbn1mdW5jdGlvbiBxYihlLHQpe2UuZmxhZ3MmPTEyMDY5MTA5Nzg7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPXQsZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz1uLmNoaWxkTGFuZXMsZS5sYW5lcz1uLmxhbmVzLGUuY2hpbGQ9bi5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPW4ubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9bi5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9bi51cGRhdGVRdWV1ZSxlLnR5cGU9bi50eXBlLHQ9bi5kZXBlbmRlbmNpZXMsZS5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIF9jKGUsdCxuLGwscixjKXt2YXIgaD0wO2lmKGw9ZSx0eXBlb2YgbD09ImZ1bmN0aW9uIil1ZChsKSYmKGg9MSk7ZWxzZSBpZih0eXBlb2YgbD09InN0cmluZyIpaD1qRChlLG4sUG4uY3VycmVudCk/MjY6ZT09PSJodG1sInx8ZT09PSJoZWFkInx8ZT09PSJib2R5Ij8yNzo1O2Vsc2UgZTpzd2l0Y2gobCl7Y2FzZSB4ZTpyZXR1cm4gZT1LdCgzMSxuLHQsciksZS5lbGVtZW50VHlwZT14ZSxlLmxhbmVzPWMsZTtjYXNlIG5lOnJldHVybiBOYShuLmNoaWxkcmVuLHIsYyx0KTtjYXNlIGVlOmg9OCxyfD0yNDticmVhaztjYXNlIGNlOnJldHVybiBlPUt0KDEyLG4sdCxyfDIpLGUuZWxlbWVudFR5cGU9Y2UsZS5sYW5lcz1jLGU7Y2FzZSAkOnJldHVybiBlPUt0KDEzLG4sdCxyKSxlLmVsZW1lbnRUeXBlPSQsZS5sYW5lcz1jLGU7Y2FzZSBGOnJldHVybiBlPUt0KDE5LG4sdCxyKSxlLmVsZW1lbnRUeXBlPUYsZS5sYW5lcz1jLGU7Y2FzZSBqZTpjYXNlIEQ6cmV0dXJuIGU9cnwzMixlPUt0KDMwLG4sdCxlKSxlLmVsZW1lbnRUeXBlPUQsZS5sYW5lcz1jLGUuc3RhdGVOb2RlPXthdXRvTmFtZTpudWxsLHBhaXJlZDpudWxsLGNsb25lczpudWxsLHJlZjpudWxsfSxlO2RlZmF1bHQ6aWYodHlwZW9mIGw9PSJvYmplY3QiJiZsIT09bnVsbClzd2l0Y2gobC4kJHR5cGVvZil7Y2FzZSBoZTpoPTEwO2JyZWFrIGU7Y2FzZSBtZTpoPTk7YnJlYWsgZTtjYXNlIFA6aD0xMTticmVhayBlO2Nhc2UgcmU6aD0xNDticmVhayBlO2Nhc2UgcTpoPTE2LGw9bnVsbDticmVhayBlfWg9Mjksbj1FcnJvcihpKDEzMCxlPT09bnVsbD8ibnVsbCI6dHlwZW9mIGUsIiIpKSxsPW51bGx9cmV0dXJuIHQ9S3QoaCxuLHQsciksdC5lbGVtZW50VHlwZT1lLHQudHlwZT1sLHQubGFuZXM9Yyx0fWZ1bmN0aW9uIE5hKGUsdCxuLGwpe3JldHVybiBlPUt0KDcsZSxsLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIHNkKGUsdCxuKXtyZXR1cm4gZT1LdCg2LGUsbnVsbCx0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiBYYihlKXt2YXIgdD1LdCgxOCxudWxsLG51bGwsMCk7cmV0dXJuIHQuc3RhdGVOb2RlPWUsdH1mdW5jdGlvbiBmZChlLHQsbil7cmV0dXJuIHQ9S3QoNCxlLmNoaWxkcmVuIT09bnVsbD9lLmNoaWxkcmVuOltdLGUua2V5LHQpLHQubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH12YXIgS2I9bmV3IFdlYWtNYXA7ZnVuY3Rpb24geW4oZSx0KXtpZih0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsKXt2YXIgbj1LYi5nZXQoZSk7cmV0dXJuIG4hPT12b2lkIDA/bjoodD17dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpQeSh0KX0sS2Iuc2V0KGUsdCksdCl9cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6UHkodCl9fXZhciBFbz1bXSxSbz0wLE9jPW51bGwsenI9MCxibj1bXSx4bj0wLFZsPW51bGwsVm49MSxZbj0iIjtmdW5jdGlvbiBibChlLHQpe0VvW1JvKytdPXpyLEVvW1JvKytdPU9jLE9jPWUsenI9dH1mdW5jdGlvbiBRYihlLHQsbil7Ym5beG4rK109Vm4sYm5beG4rK109WW4sYm5beG4rK109VmwsVmw9ZTt2YXIgbD1WbjtlPVluO3ZhciByPTMyLW5uKGwpLTE7bCY9figxPDxyKSxuKz0xO3ZhciBjPTMyLW5uKHQpK3I7aWYoMzA8Yyl7dmFyIGg9ci1yJTU7Yz0obCYoMTw8aCktMSkudG9TdHJpbmcoMzIpLGw+Pj1oLHItPWgsVm49MTw8MzItbm4odCkrcnxuPDxyfGwsWW49YytlfWVsc2UgVm49MTw8Y3xuPDxyfGwsWW49ZX1mdW5jdGlvbiBBYyhlKXtlLnJldHVybiE9PW51bGwmJihibChlLDEpLFFiKGUsMSwwKSl9ZnVuY3Rpb24gZGQoZSl7Zm9yKDtlPT09T2M7KU9jPUVvWy0tUm9dLEVvW1JvXT1udWxsLHpyPUVvWy0tUm9dLEVvW1JvXT1udWxsO2Zvcig7ZT09PVZsOylWbD1iblstLXhuXSxiblt4bl09bnVsbCxZbj1iblstLXhuXSxiblt4bl09bnVsbCxWbj1iblstLXhuXSxiblt4bl09bnVsbH1mdW5jdGlvbiBaYihlLHQpe2JuW3huKytdPVZuLGJuW3huKytdPVluLGJuW3huKytdPVZsLFZuPXQuaWQsWW49dC5vdmVyZmxvdyxWbD1lfXZhciB4dD1udWxsLEplPW51bGwsTmU9ITEsWWw9bnVsbCxTbj0hMSxtZD1FcnJvcihpKDUxOSkpO2Z1bmN0aW9uIHFsKGUpe3ZhciB0PUVycm9yKGkoNDE4LDE8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzFdIT09dm9pZCAwJiZhcmd1bWVudHNbMV0/InRleHQiOiJIVE1MIiwiIikpO3Rocm93IGtyKHluKHQsZSkpLG1kfWZ1bmN0aW9uIEZiKGUpe3ZhciB0PWUuc3RhdGVOb2RlLG49ZS50eXBlLGw9ZS5tZW1vaXplZFByb3BzO3N3aXRjaCh0W1J0XT1lLHRbWHRdPWwsbil7Y2FzZSJkaWFsb2ciOnplKCJjYW5jZWwiLHQpLHplKCJjbG9zZSIsdCk7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjp6ZSgibG9hZCIsdCk7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG49MDtuPGxpLmxlbmd0aDtuKyspemUobGlbbl0sdCk7YnJlYWs7Y2FzZSJzb3VyY2UiOnplKCJlcnJvciIsdCk7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6emUoImVycm9yIix0KSx6ZSgibG9hZCIsdCk7YnJlYWs7Y2FzZSJkZXRhaWxzIjp6ZSgidG9nZ2xlIix0KTticmVhaztjYXNlImlucHV0Ijp6ZSgiaW52YWxpZCIsdCksY2IodCxsLnZhbHVlLGwuZGVmYXVsdFZhbHVlLGwuY2hlY2tlZCxsLmRlZmF1bHRDaGVja2VkLGwudHlwZSxsLm5hbWUsITApO2JyZWFrO2Nhc2Uic2VsZWN0Ijp6ZSgiaW52YWxpZCIsdCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6emUoImludmFsaWQiLHQpLHNiKHQsbC52YWx1ZSxsLmRlZmF1bHRWYWx1ZSxsLmNoaWxkcmVuKX1uPWwuY2hpbGRyZW4sdHlwZW9mIG4hPSJzdHJpbmciJiZ0eXBlb2YgbiE9Im51bWJlciImJnR5cGVvZiBuIT0iYmlnaW50Inx8dC50ZXh0Q29udGVudD09PSIiK258fGwuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nPT09ITB8fGdTKHQudGV4dENvbnRlbnQsbik/KGwucG9wb3ZlciE9bnVsbCYmKHplKCJiZWZvcmV0b2dnbGUiLHQpLHplKCJ0b2dnbGUiLHQpKSxsLm9uU2Nyb2xsIT1udWxsJiZ6ZSgic2Nyb2xsIix0KSxsLm9uU2Nyb2xsRW5kIT1udWxsJiZ6ZSgic2Nyb2xsZW5kIix0KSxsLm9uQ2xpY2shPW51bGwmJih0Lm9uY2xpY2s9R24pLHQ9ITApOnQ9ITEsdHx8cWwoZSwhMCl9ZnVuY3Rpb24gTmMoZSl7Zm9yKHh0PWUucmV0dXJuO3h0Oylzd2l0Y2goeHQudGFnKXtjYXNlIDU6Y2FzZSAzMTpjYXNlIDEzOlNuPSExO3JldHVybjtjYXNlIDI3OmNhc2UgMzpTbj0hMDtyZXR1cm47ZGVmYXVsdDp4dD14dC5yZXR1cm59fWZ1bmN0aW9uIF9vKGUpe2lmKGUhPT14dClyZXR1cm4hMTtpZighTmUpcmV0dXJuIE5jKGUpLE5lPSEwLCExO3ZhciB0PWUudGFnLG47aWYoKG49dCE9PTMmJnQhPT0yNykmJigobj10PT09NSkmJihuPWUudHlwZSxuPSEobiE9PSJmb3JtIiYmbiE9PSJidXR0b24iKXx8Vm0oZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLG49IW4pLG4mJkplJiZxbChlKSxOYyhlKSx0PT09MTMpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGU9ZSE9PW51bGw/ZS5kZWh5ZHJhdGVkOm51bGwsIWUpdGhyb3cgRXJyb3IoaSgzMTcpKTtKZT1MUyhlKX1lbHNlIGlmKHQ9PT0zMSl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZT1lIT09bnVsbD9lLmRlaHlkcmF0ZWQ6bnVsbCwhZSl0aHJvdyBFcnJvcihpKDMxNykpO0plPUxTKGUpfWVsc2UgdD09PTI3Pyh0PUplLGlhKGUudHlwZSk/KGU9Sm0sSm09bnVsbCxKZT1lKTpKZT10KTpKZT14dD9UbihlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBEYSgpe0plPXh0PW51bGwsTmU9ITF9ZnVuY3Rpb24gaGQoKXt2YXIgZT1ZbDtyZXR1cm4gZSE9PW51bGwmJihGdD09PW51bGw/RnQ9ZTpGdC5wdXNoLmFwcGx5KEZ0LGUpLFlsPW51bGwpLGV9ZnVuY3Rpb24ga3IoZSl7WWw9PT1udWxsP1lsPVtlXTpZbC5wdXNoKGUpfXZhciBwZD1xdChudWxsKSxqYT1udWxsLHhsPW51bGw7ZnVuY3Rpb24gWGwoZSx0LG4pe1BlKHBkLHQuX2N1cnJlbnRWYWx1ZSksdC5fY3VycmVudFZhbHVlPW59ZnVuY3Rpb24gU2woZSl7ZS5fY3VycmVudFZhbHVlPXBkLmN1cnJlbnQsaXQocGQpfWZ1bmN0aW9uIERjKGUsdCxuKXtmb3IoO2UhPT1udWxsOyl7dmFyIGw9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZ0KSE9PXQ/KGUuY2hpbGRMYW5lc3w9dCxsIT09bnVsbCYmKGwuY2hpbGRMYW5lc3w9dCkpOmwhPT1udWxsJiYobC5jaGlsZExhbmVzJnQpIT09dCYmKGwuY2hpbGRMYW5lc3w9dCksZT09PW4pYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gdmQoZSx0LG4sbCl7dmFyIHI9ZS5jaGlsZDtmb3IociE9PW51bGwmJihyLnJldHVybj1lKTtyIT09bnVsbDspe3ZhciBjPXIuZGVwZW5kZW5jaWVzO2lmKGMhPT1udWxsKXt2YXIgaD1yLmNoaWxkO2M9Yy5maXJzdENvbnRleHQ7ZTpmb3IoO2MhPT1udWxsOyl7dmFyIFM9YztjPXI7Zm9yKHZhciBfPTA7Xzx0Lmxlbmd0aDtfKyspaWYoUy5jb250ZXh0PT09dFtfXSl7Yy5sYW5lc3w9bixTPWMuYWx0ZXJuYXRlLFMhPT1udWxsJiYoUy5sYW5lc3w9biksRGMoYy5yZXR1cm4sbixlKSxsfHwoaD1udWxsKTticmVhayBlfWM9Uy5uZXh0fX1lbHNlIGlmKHIudGFnPT09MTgpe2lmKGg9ci5yZXR1cm4saD09PW51bGwpdGhyb3cgRXJyb3IoaSgzNDEpKTtoLmxhbmVzfD1uLGM9aC5hbHRlcm5hdGUsYyE9PW51bGwmJihjLmxhbmVzfD1uKSxEYyhoLG4sZSksaD1udWxsfWVsc2Ugci50YWc9PT0xMyYmci5tZW1vaXplZFN0YXRlIT09bnVsbCYmci5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQ9PT1udWxsPyhyLmxhbmVzfD1uLGg9ci5hbHRlcm5hdGUsaCE9PW51bGwmJihoLmxhbmVzfD1uKSxEYyhyLnJldHVybixuLGUpLGg9ci5jaGlsZCxoPWghPT1udWxsP2guc2libGluZzpudWxsKTpoPXIuY2hpbGQ7aWYoaCE9PW51bGwpaC5yZXR1cm49cjtlbHNlIGZvcihoPXI7aCE9PW51bGw7KXtpZihoPT09ZSl7aD1udWxsO2JyZWFrfWlmKHI9aC5zaWJsaW5nLHIhPT1udWxsKXtyLnJldHVybj1oLnJldHVybixoPXI7YnJlYWt9aD1oLnJldHVybn1yPWh9fWZ1bmN0aW9uIE1hKGUsdCxuLGwpe2U9bnVsbDtmb3IodmFyIHI9dCxjPSExO3IhPT1udWxsOyl7aWYoIWMpe2lmKChyLmZsYWdzJjUyNDI4OCkhPT0wKWM9ITA7ZWxzZSBpZigoci5mbGFncyYyNjIxNDQpIT09MClicmVha31pZihyLnRhZz09PTEwKXt2YXIgaD1yLmFsdGVybmF0ZTtpZihoPT09bnVsbCl0aHJvdyBFcnJvcihpKDM4NykpO2lmKGg9aC5tZW1vaXplZFByb3BzLGghPT1udWxsKXt2YXIgUz1yLnR5cGU7YW4oci5wZW5kaW5nUHJvcHMudmFsdWUsaC52YWx1ZSl8fChlIT09bnVsbD9lLnB1c2goUyk6ZT1bU10pfX1lbHNlIGlmKHI9PT1hYy5jdXJyZW50KXtpZihoPXIuYWx0ZXJuYXRlLGg9PT1udWxsKXRocm93IEVycm9yKGkoMzg3KSk7aC5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUhPT1yLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSYmKGUhPT1udWxsP2UucHVzaChKbyk6ZT1bSm9dKX1yPXIucmV0dXJufXJldHVybiBlIT09bnVsbCYmdmQodCxlLG4sbCksdC5mbGFnc3w9MjYyMTQ0LGUhPT1udWxsfWZ1bmN0aW9uIGpjKGUpe2ZvcihlPWUuZmlyc3RDb250ZXh0O2UhPT1udWxsOyl7aWYoIWFuKGUuY29udGV4dC5fY3VycmVudFZhbHVlLGUubWVtb2l6ZWRWYWx1ZSkpcmV0dXJuITA7ZT1lLm5leHR9cmV0dXJuITF9ZnVuY3Rpb24gemEoZSl7amE9ZSx4bD1udWxsLGU9ZS5kZXBlbmRlbmNpZXMsZSE9PW51bGwmJihlLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiBfdChlKXtyZXR1cm4gJGIoamEsZSl9ZnVuY3Rpb24gTWMoZSx0KXtyZXR1cm4gamE9PT1udWxsJiZ6YShlKSwkYihlLHQpfWZ1bmN0aW9uICRiKGUsdCl7dmFyIG49dC5fY3VycmVudFZhbHVlO2lmKHQ9e2NvbnRleHQ6dCxtZW1vaXplZFZhbHVlOm4sbmV4dDpudWxsfSx4bD09PW51bGwpe2lmKGU9PT1udWxsKXRocm93IEVycm9yKGkoMzA4KSk7eGw9dCxlLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6dH0sZS5mbGFnc3w9NTI0Mjg4fWVsc2UgeGw9eGwubmV4dD10O3JldHVybiBufXZhciBvTj10eXBlb2YgQWJvcnRDb250cm9sbGVyPCJ1Ij9BYm9ydENvbnRyb2xsZXI6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc2lnbmFsPXthYm9ydGVkOiExLGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24obixsKXtlLnB1c2gobCl9fTt0aGlzLmFib3J0PWZ1bmN0aW9uKCl7dC5hYm9ydGVkPSEwLGUuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbigpfSl9fSxyTj1hLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssaU49YS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxmdD17JCR0eXBlb2Y6aGUsQ29uc3VtZXI6bnVsbCxQcm92aWRlcjpudWxsLF9jdXJyZW50VmFsdWU6bnVsbCxfY3VycmVudFZhbHVlMjpudWxsLF90aHJlYWRDb3VudDowfTtmdW5jdGlvbiBnZCgpe3JldHVybntjb250cm9sbGVyOm5ldyBvTixkYXRhOm5ldyBNYXAscmVmQ291bnQ6MH19ZnVuY3Rpb24gTHIoZSl7ZS5yZWZDb3VudC0tLGUucmVmQ291bnQ9PT0wJiZyTihpTixmdW5jdGlvbigpe2UuY29udHJvbGxlci5hYm9ydCgpfSl9ZnVuY3Rpb24gSmIoZSx0KXtpZigoZS5wZW5kaW5nTGFuZXMmNDE5NDA0OCkhPT0wKXt2YXIgbj1lLnRyYW5zaXRpb25UeXBlcztmb3Iobj09PW51bGwmJihuPWUudHJhbnNpdGlvblR5cGVzPVtdKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBsPXRbZV07bi5pbmRleE9mKGwpPT09LTEmJm4ucHVzaChsKX19fXZhciBVcj1udWxsO2Z1bmN0aW9uIGNOKGUpe3ZhciB0PWUudHJhbnNpdGlvblR5cGVzO3JldHVybiBlLnRyYW5zaXRpb25UeXBlcz1udWxsLHR9dmFyIEhyPW51bGwseWQ9MCxrYT0wLE9vPW51bGw7ZnVuY3Rpb24gdU4oZSx0KXtpZihIcj09PW51bGwpe3ZhciBuPUhyPVtdO3lkPTAsa2E9em0oKSxPbz17c3RhdHVzOiJwZW5kaW5nIix2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihsKXtuLnB1c2gobCl9fX1yZXR1cm4geWQrKyx0LnRoZW4oV2IsV2IpLHR9ZnVuY3Rpb24gV2IoKXtpZigtLXlkPT09MCYmKFVyPW51bGwsSHIhPT1udWxsKSl7T28hPT1udWxsJiYoT28uc3RhdHVzPSJmdWxmaWxsZWQiKTt2YXIgZT1IcjtIcj1udWxsLGthPTAsT289bnVsbDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfX1mdW5jdGlvbiBzTihlLHQpe3ZhciBuPVtdLGw9e3N0YXR1czoicGVuZGluZyIsdmFsdWU6bnVsbCxyZWFzb246bnVsbCx0aGVuOmZ1bmN0aW9uKHIpe24ucHVzaChyKX19O3JldHVybiBlLnRoZW4oZnVuY3Rpb24oKXtsLnN0YXR1cz0iZnVsZmlsbGVkIixsLnZhbHVlPXQ7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspKDAsbltyXSkodCl9LGZ1bmN0aW9uKHIpe2ZvcihsLnN0YXR1cz0icmVqZWN0ZWQiLGwucmVhc29uPXIscj0wO3I8bi5sZW5ndGg7cisrKSgwLG5bcl0pKHZvaWQgMCl9KSxsfXZhciBlMD10ZS5TO3RlLlM9ZnVuY3Rpb24oZSx0KXtpZihYeD1lbigpLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiImJnVOKGUsdCksVXIhPT1udWxsKWZvcih2YXIgbj1YbztuIT09bnVsbDspSmIobixVciksbj1uLm5leHQ7aWYobj1lLnR5cGVzLG4hPT1udWxsKXtmb3IodmFyIGw9WG87bCE9PW51bGw7KUpiKGwsbiksbD1sLm5leHQ7aWYoa2EhPT0wKXtsPVVyLGw9PT1udWxsJiYobD1Vcj1bXSk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBjPW5bcl07bC5pbmRleE9mKGMpPT09LTEmJmwucHVzaChjKX19fWUwIT09bnVsbCYmZTAoZSx0KX07dmFyIExhPXF0KG51bGwpO2Z1bmN0aW9uIGJkKCl7dmFyIGU9TGEuY3VycmVudDtyZXR1cm4gZSE9PW51bGw/ZTokZS5wb29sZWRDYWNoZX1mdW5jdGlvbiB6YyhlLHQpe3Q9PT1udWxsP1BlKExhLExhLmN1cnJlbnQpOlBlKExhLHQucG9vbCl9ZnVuY3Rpb24gdDAoKXt2YXIgZT1iZCgpO3JldHVybiBlPT09bnVsbD9udWxsOntwYXJlbnQ6ZnQuX2N1cnJlbnRWYWx1ZSxwb29sOmV9fXZhciBBbz1FcnJvcihpKDQ2MCkpLHhkPUVycm9yKGkoNDc0KSksa2M9RXJyb3IoaSg1NDIpKSxMYz17dGhlbjpmdW5jdGlvbigpe319O2Z1bmN0aW9uIG4wKGUpe3JldHVybiBlPWUuc3RhdHVzLGU9PT0iZnVsZmlsbGVkInx8ZT09PSJyZWplY3RlZCJ9ZnVuY3Rpb24gbDAoZSx0LG4pe3N3aXRjaChuPWVbbl0sbj09PXZvaWQgMD9lLnB1c2godCk6biE9PXQmJih0LnRoZW4oR24sR24pLHQ9biksdC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gdC52YWx1ZTtjYXNlInJlamVjdGVkIjp0aHJvdyBlPXQucmVhc29uLG8wKGUpLGU9PT12b2lkIDAmJiEoInJlYXNvbiJpbiB0KT9FcnJvcihpKDYwMCkpOmU7ZGVmYXVsdDppZih0eXBlb2YgdC5zdGF0dXM9PSJzdHJpbmciKXQudGhlbihHbixHbik7ZWxzZXtpZihlPSRlLGUhPT1udWxsJiYxMDA8ZS5zaGVsbFN1c3BlbmRDb3VudGVyKXRocm93IEVycm9yKGkoNDgyKSk7ZT10LGUuc3RhdHVzPSJwZW5kaW5nIixlLnRoZW4oZnVuY3Rpb24obCl7aWYodC5zdGF0dXM9PT0icGVuZGluZyIpe3ZhciByPXQ7ci5zdGF0dXM9ImZ1bGZpbGxlZCIsci52YWx1ZT1sfX0sZnVuY3Rpb24obCl7aWYodC5zdGF0dXM9PT0icGVuZGluZyIpe3ZhciByPXQ7ci5zdGF0dXM9InJlamVjdGVkIixyLnJlYXNvbj1sfX0pfXN3aXRjaCh0LnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiB0LnZhbHVlO2Nhc2UicmVqZWN0ZWQiOnRocm93IGU9dC5yZWFzb24sbzAoZSksZX10aHJvdyBIYT10LEFvfX1mdW5jdGlvbiBVYShlKXt0cnl7dmFyIHQ9ZS5faW5pdDtyZXR1cm4gdChlLl9wYXlsb2FkKX1jYXRjaChuKXt0aHJvdyBuIT09bnVsbCYmdHlwZW9mIG49PSJvYmplY3QiJiZ0eXBlb2Ygbi50aGVuPT0iZnVuY3Rpb24iPyhIYT1uLEFvKTpufX12YXIgSGE9bnVsbDtmdW5jdGlvbiBhMCgpe2lmKEhhPT09bnVsbCl0aHJvdyBFcnJvcihpKDQ1OSkpO3ZhciBlPUhhO3JldHVybiBIYT1udWxsLGV9ZnVuY3Rpb24gbzAoZSl7aWYoZT09PUFvfHxlPT09a2MpdGhyb3cgRXJyb3IoaSg0ODMpKX12YXIgTm89bnVsbCxCcj0wO2Z1bmN0aW9uIFVjKGUpe3ZhciB0PUJyO3JldHVybiBCcis9MSxObz09PW51bGwmJihObz1bXSksbDAoTm8sZSx0KX1mdW5jdGlvbiBLbChlLHQpe3Q9dC5wcm9wcy5yZWYsZS5yZWY9dCE9PXZvaWQgMD90Om51bGx9ZnVuY3Rpb24gSGMoZSx0KXt0aHJvdyB0LiQkdHlwZW9mPT09Qj9FcnJvcihpKDUyNSkpOihlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihpKDMxLGU9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjplKSkpfWZ1bmN0aW9uIHIwKGUpe2Z1bmN0aW9uIHQoayxqKXtpZihlKXt2YXIgST1rLmRlbGV0aW9ucztJPT09bnVsbD8oay5kZWxldGlvbnM9W2pdLGsuZmxhZ3N8PTE2KTpJLnB1c2goail9fWZ1bmN0aW9uIG4oayxqKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO2ohPT1udWxsOyl0KGssaiksaj1qLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChrKXtmb3IodmFyIGo9bmV3IE1hcDtrIT09bnVsbDspay5rZXk9PT1udWxsP2ouc2V0KGsuaW5kZXgsayk6ai5zZXQoay5rZXksayksaz1rLnNpYmxpbmc7cmV0dXJuIGp9ZnVuY3Rpb24gcihrLGope3JldHVybiBrPXlsKGssaiksay5pbmRleD0wLGsuc2libGluZz1udWxsLGt9ZnVuY3Rpb24gYyhrLGosSSl7cmV0dXJuIGsuaW5kZXg9SSxlPyhJPWsuYWx0ZXJuYXRlLEkhPT1udWxsPyhJPUkuaW5kZXgsSTxqPyhrLmZsYWdzfD0yLGopOkkpOihrLmZsYWdzfD0xMzQyMTc3MzAsaikpOihrLmZsYWdzfD0xMDQ4NTc2LGopfWZ1bmN0aW9uIGgoayl7cmV0dXJuIGUmJmsuYWx0ZXJuYXRlPT09bnVsbCYmKGsuZmxhZ3N8PTEzNDIxNzczMCksa31mdW5jdGlvbiBTKGssaixJLFEpe3JldHVybiBqPT09bnVsbHx8ai50YWchPT02PyhqPXNkKEksay5tb2RlLFEpLGoucmV0dXJuPWssaik6KGo9cihqLEkpLGoucmV0dXJuPWssail9ZnVuY3Rpb24gXyhrLGosSSxRKXt2YXIgZmU9SS50eXBlO3JldHVybiBmZT09PW5lPyhrPVYoayxqLEkucHJvcHMuY2hpbGRyZW4sUSxJLmtleSksS2woayxJKSxrKTpqIT09bnVsbCYmKGouZWxlbWVudFR5cGU9PT1mZXx8dHlwZW9mIGZlPT0ib2JqZWN0IiYmZmUhPT1udWxsJiZmZS4kJHR5cGVvZj09PXEmJlVhKGZlKT09PWoudHlwZSk/KGo9cihqLEkucHJvcHMpLEtsKGosSSksai5yZXR1cm49ayxqKTooaj1fYyhJLnR5cGUsSS5rZXksSS5wcm9wcyxudWxsLGsubW9kZSxRKSxLbChqLEkpLGoucmV0dXJuPWssail9ZnVuY3Rpb24gTChrLGosSSxRKXtyZXR1cm4gaj09PW51bGx8fGoudGFnIT09NHx8ai5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PUkuY29udGFpbmVySW5mb3x8ai5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1JLmltcGxlbWVudGF0aW9uPyhqPWZkKEksay5tb2RlLFEpLGoucmV0dXJuPWssaik6KGo9cihqLEkuY2hpbGRyZW58fFtdKSxqLnJldHVybj1rLGopfWZ1bmN0aW9uIFYoayxqLEksUSxmZSl7cmV0dXJuIGo9PT1udWxsfHxqLnRhZyE9PTc/KGo9TmEoSSxrLm1vZGUsUSxmZSksai5yZXR1cm49ayxqKTooaj1yKGosSSksai5yZXR1cm49ayxqKX1mdW5jdGlvbiBaKGssaixJKXtpZih0eXBlb2Ygaj09InN0cmluZyImJmohPT0iInx8dHlwZW9mIGo9PSJudW1iZXIifHx0eXBlb2Ygaj09ImJpZ2ludCIpcmV0dXJuIGo9c2QoIiIraixrLm1vZGUsSSksai5yZXR1cm49ayxqO2lmKHR5cGVvZiBqPT0ib2JqZWN0IiYmaiE9PW51bGwpe3N3aXRjaChqLiQkdHlwZW9mKXtjYXNlIEo6cmV0dXJuIEk9X2Moai50eXBlLGoua2V5LGoucHJvcHMsbnVsbCxrLm1vZGUsSSksS2woSSxqKSxJLnJldHVybj1rLEk7Y2FzZSBXOnJldHVybiBqPWZkKGosay5tb2RlLEkpLGoucmV0dXJuPWssajtjYXNlIHE6cmV0dXJuIGo9VWEoaiksWihrLGosSSl9aWYobGUoail8fGFlKGopKXJldHVybiBqPU5hKGosay5tb2RlLEksbnVsbCksai5yZXR1cm49ayxqO2lmKHR5cGVvZiBqLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIFooayxVYyhqKSxJKTtpZihqLiQkdHlwZW9mPT09aGUpcmV0dXJuIFooayxNYyhrLGopLEkpO0hjKGssail9cmV0dXJuIG51bGx9ZnVuY3Rpb24geihrLGosSSxRKXt2YXIgZmU9aiE9PW51bGw/ai5rZXk6bnVsbDtpZih0eXBlb2YgST09InN0cmluZyImJkkhPT0iInx8dHlwZW9mIEk9PSJudW1iZXIifHx0eXBlb2YgST09ImJpZ2ludCIpcmV0dXJuIGZlIT09bnVsbD9udWxsOlMoayxqLCIiK0ksUSk7aWYodHlwZW9mIEk9PSJvYmplY3QiJiZJIT09bnVsbCl7c3dpdGNoKEkuJCR0eXBlb2Ype2Nhc2UgSjpyZXR1cm4gSS5rZXk9PT1mZT9fKGssaixJLFEpOm51bGw7Y2FzZSBXOnJldHVybiBJLmtleT09PWZlP0woayxqLEksUSk6bnVsbDtjYXNlIHE6cmV0dXJuIEk9VWEoSSkseihrLGosSSxRKX1pZihsZShJKXx8YWUoSSkpcmV0dXJuIGZlIT09bnVsbD9udWxsOlYoayxqLEksUSxudWxsKTtpZih0eXBlb2YgSS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiB6KGssaixVYyhJKSxRKTtpZihJLiQkdHlwZW9mPT09aGUpcmV0dXJuIHooayxqLE1jKGssSSksUSk7SGMoayxJKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBHKGssaixJLFEsZmUpe2lmKHR5cGVvZiBRPT0ic3RyaW5nIiYmUSE9PSIifHx0eXBlb2YgUT09Im51bWJlciJ8fHR5cGVvZiBRPT0iYmlnaW50IilyZXR1cm4gaz1rLmdldChJKXx8bnVsbCxTKGosaywiIitRLGZlKTtpZih0eXBlb2YgUT09Im9iamVjdCImJlEhPT1udWxsKXtzd2l0Y2goUS4kJHR5cGVvZil7Y2FzZSBKOnJldHVybiBrPWsuZ2V0KFEua2V5PT09bnVsbD9JOlEua2V5KXx8bnVsbCxfKGosayxRLGZlKTtjYXNlIFc6cmV0dXJuIGs9ay5nZXQoUS5rZXk9PT1udWxsP0k6US5rZXkpfHxudWxsLEwoaixrLFEsZmUpO2Nhc2UgcTpyZXR1cm4gUT1VYShRKSxHKGssaixJLFEsZmUpfWlmKGxlKFEpfHxhZShRKSlyZXR1cm4gaz1rLmdldChJKXx8bnVsbCxWKGosayxRLGZlLG51bGwpO2lmKHR5cGVvZiBRLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIEcoayxqLEksVWMoUSksZmUpO2lmKFEuJCR0eXBlb2Y9PT1oZSlyZXR1cm4gRyhrLGosSSxNYyhqLFEpLGZlKTtIYyhqLFEpfXJldHVybiBudWxsfWZ1bmN0aW9uIG9lKGssaixJLFEpe2Zvcih2YXIgZmU9bnVsbCxVZT1udWxsLGdlPWosU2U9aj0wLGh0PW51bGw7Z2UhPT1udWxsJiZTZTxJLmxlbmd0aDtTZSsrKXtnZS5pbmRleD5TZT8oaHQ9Z2UsZ2U9bnVsbCk6aHQ9Z2Uuc2libGluZzt2YXIgSGU9eihrLGdlLElbU2VdLFEpO2lmKEhlPT09bnVsbCl7Z2U9PT1udWxsJiYoZ2U9aHQpO2JyZWFrfWUmJmdlJiZIZS5hbHRlcm5hdGU9PT1udWxsJiZ0KGssZ2UpLGo9YyhIZSxqLFNlKSxVZT09PW51bGw/ZmU9SGU6VWUuc2libGluZz1IZSxVZT1IZSxnZT1odH1pZihTZT09PUkubGVuZ3RoKXJldHVybiBuKGssZ2UpLE5lJiZibChrLFNlKSxmZTtpZihnZT09PW51bGwpe2Zvcig7U2U8SS5sZW5ndGg7U2UrKylnZT1aKGssSVtTZV0sUSksZ2UhPT1udWxsJiYoaj1jKGdlLGosU2UpLFVlPT09bnVsbD9mZT1nZTpVZS5zaWJsaW5nPWdlLFVlPWdlKTtyZXR1cm4gTmUmJmJsKGssU2UpLGZlfWZvcihnZT1sKGdlKTtTZTxJLmxlbmd0aDtTZSsrKWh0PUcoZ2UsayxTZSxJW1NlXSxRKSxodCE9PW51bGwmJihlJiYoSGU9aHQuYWx0ZXJuYXRlLEhlIT09bnVsbCYmZ2UuZGVsZXRlKEhlLmtleT09PW51bGw/U2U6SGUua2V5KSksaj1jKGh0LGosU2UpLFVlPT09bnVsbD9mZT1odDpVZS5zaWJsaW5nPWh0LFVlPWh0KTtyZXR1cm4gZSYmZ2UuZm9yRWFjaChmdW5jdGlvbihkYSl7cmV0dXJuIHQoayxkYSl9KSxOZSYmYmwoayxTZSksZmV9ZnVuY3Rpb24gdmUoayxqLEksUSl7aWYoST09bnVsbCl0aHJvdyBFcnJvcihpKDE1MSkpO2Zvcih2YXIgZmU9bnVsbCxVZT1udWxsLGdlPWosU2U9aj0wLGh0PW51bGwsSGU9SS5uZXh0KCk7Z2UhPT1udWxsJiYhSGUuZG9uZTtTZSsrLEhlPUkubmV4dCgpKXtnZS5pbmRleD5TZT8oaHQ9Z2UsZ2U9bnVsbCk6aHQ9Z2Uuc2libGluZzt2YXIgZGE9eihrLGdlLEhlLnZhbHVlLFEpO2lmKGRhPT09bnVsbCl7Z2U9PT1udWxsJiYoZ2U9aHQpO2JyZWFrfWUmJmdlJiZkYS5hbHRlcm5hdGU9PT1udWxsJiZ0KGssZ2UpLGo9YyhkYSxqLFNlKSxVZT09PW51bGw/ZmU9ZGE6VWUuc2libGluZz1kYSxVZT1kYSxnZT1odH1pZihIZS5kb25lKXJldHVybiBuKGssZ2UpLE5lJiZibChrLFNlKSxmZTtpZihnZT09PW51bGwpe2Zvcig7IUhlLmRvbmU7U2UrKyxIZT1JLm5leHQoKSlIZT1aKGssSGUudmFsdWUsUSksSGUhPT1udWxsJiYoaj1jKEhlLGosU2UpLFVlPT09bnVsbD9mZT1IZTpVZS5zaWJsaW5nPUhlLFVlPUhlKTtyZXR1cm4gTmUmJmJsKGssU2UpLGZlfWZvcihnZT1sKGdlKTshSGUuZG9uZTtTZSsrLEhlPUkubmV4dCgpKUhlPUcoZ2UsayxTZSxIZS52YWx1ZSxRKSxIZSE9PW51bGwmJihlJiYoaHQ9SGUuYWx0ZXJuYXRlLGh0IT09bnVsbCYmZ2UuZGVsZXRlKGh0LmtleT09PW51bGw/U2U6aHQua2V5KSksaj1jKEhlLGosU2UpLFVlPT09bnVsbD9mZT1IZTpVZS5zaWJsaW5nPUhlLFVlPUhlKTtyZXR1cm4gZSYmZ2UuZm9yRWFjaChmdW5jdGlvbihZRCl7cmV0dXJuIHQoayxZRCl9KSxOZSYmYmwoayxTZSksZmV9ZnVuY3Rpb24gT2UoayxqLEksUSl7aWYodHlwZW9mIEk9PSJvYmplY3QiJiZJIT09bnVsbCYmSS50eXBlPT09bmUmJkkua2V5PT09bnVsbCYmSS5wcm9wcy5yZWY9PT12b2lkIDAmJihJPUkucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiBJPT0ib2JqZWN0IiYmSSE9PW51bGwpe3N3aXRjaChJLiQkdHlwZW9mKXtjYXNlIEo6ZTp7Zm9yKHZhciBmZT1JLmtleTtqIT09bnVsbDspe2lmKGoua2V5PT09ZmUpe2lmKGZlPUkudHlwZSxmZT09PW5lKXtpZihqLnRhZz09PTcpe24oayxqLnNpYmxpbmcpLFE9cihqLEkucHJvcHMuY2hpbGRyZW4pLEtsKFEsSSksUS5yZXR1cm49ayxrPVE7YnJlYWsgZX19ZWxzZSBpZihqLmVsZW1lbnRUeXBlPT09ZmV8fHR5cGVvZiBmZT09Im9iamVjdCImJmZlIT09bnVsbCYmZmUuJCR0eXBlb2Y9PT1xJiZVYShmZSk9PT1qLnR5cGUpe24oayxqLnNpYmxpbmcpLFE9cihqLEkucHJvcHMpLEtsKFEsSSksUS5yZXR1cm49ayxrPVE7YnJlYWsgZX1uKGssaik7YnJlYWt9ZWxzZSB0KGssaik7aj1qLnNpYmxpbmd9SS50eXBlPT09bmU/KFE9TmEoSS5wcm9wcy5jaGlsZHJlbixrLm1vZGUsUSxJLmtleSksS2woUSxJKSxRLnJldHVybj1rLGs9USk6KFE9X2MoSS50eXBlLEkua2V5LEkucHJvcHMsbnVsbCxrLm1vZGUsUSksS2woUSxJKSxRLnJldHVybj1rLGs9USl9cmV0dXJuIGgoayk7Y2FzZSBXOmU6e2ZvcihmZT1JLmtleTtqIT09bnVsbDspe2lmKGoua2V5PT09ZmUpaWYoai50YWc9PT00JiZqLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09SS5jb250YWluZXJJbmZvJiZqLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PUkuaW1wbGVtZW50YXRpb24pe24oayxqLnNpYmxpbmcpLFE9cihqLEkuY2hpbGRyZW58fFtdKSxRLnJldHVybj1rLGs9UTticmVhayBlfWVsc2V7bihrLGopO2JyZWFrfWVsc2UgdChrLGopO2o9ai5zaWJsaW5nfVE9ZmQoSSxrLm1vZGUsUSksUS5yZXR1cm49ayxrPVF9cmV0dXJuIGgoayk7Y2FzZSBxOnJldHVybiBJPVVhKEkpLE9lKGssaixJLFEpfWlmKGxlKEkpKXJldHVybiBvZShrLGosSSxRKTtpZihhZShJKSl7aWYoZmU9YWUoSSksdHlwZW9mIGZlIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKGkoMTUwKSk7cmV0dXJuIEk9ZmUuY2FsbChJKSx2ZShrLGosSSxRKX1pZih0eXBlb2YgSS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBPZShrLGosVWMoSSksUSk7aWYoSS4kJHR5cGVvZj09PWhlKXJldHVybiBPZShrLGosTWMoayxJKSxRKTtIYyhrLEkpfXJldHVybiB0eXBlb2YgST09InN0cmluZyImJkkhPT0iInx8dHlwZW9mIEk9PSJudW1iZXIifHx0eXBlb2YgST09ImJpZ2ludCI/KEk9IiIrSSxqIT09bnVsbCYmai50YWc9PT02PyhuKGssai5zaWJsaW5nKSxRPXIoaixJKSxRLnJldHVybj1rLGs9USk6KG4oayxqKSxRPXNkKEksay5tb2RlLFEpLFEucmV0dXJuPWssaz1RKSxoKGspKTpuKGssail9cmV0dXJuIGZ1bmN0aW9uKGssaixJLFEpe3RyeXtCcj0wO3ZhciBmZT1PZShrLGosSSxRKTtyZXR1cm4gTm89bnVsbCxmZX1jYXRjaChnZSl7aWYoZ2U9PT1Bb3x8Z2U9PT1rYyl0aHJvdyBnZTt2YXIgVWU9S3QoMjksZ2UsbnVsbCxrLm1vZGUpO3JldHVybiBVZS5sYW5lcz1RLFVlLnJldHVybj1rLFVlfX19dmFyIEJhPXIwKCEwKSxpMD1yMCghMSksUWw9ITE7ZnVuY3Rpb24gU2QoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGxhbmVzOjAsaGlkZGVuQ2FsbGJhY2tzOm51bGx9LGNhbGxiYWNrczpudWxsfX1mdW5jdGlvbiBDZChlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsY2FsbGJhY2tzOm51bGx9KX1mdW5jdGlvbiBabChlKXtyZXR1cm57bGFuZTplLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gRmwoZSx0LG4pe3ZhciBsPWUudXBkYXRlUXVldWU7aWYobD09PW51bGwpcmV0dXJuIG51bGw7aWYobD1sLnNoYXJlZCwoSWUmMikhPT0wKXt2YXIgcj1sLnBlbmRpbmc7cmV0dXJuIHI9PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9ci5uZXh0LHIubmV4dD10KSxsLnBlbmRpbmc9dCx0PVJjKGUpLFliKGUsbnVsbCxuKSx0fXJldHVybiBFYyhlLGwsdCxuKSxSYyhlKX1mdW5jdGlvbiBJcihlLHQsbil7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwobiY0MTk0MDQ4KSE9PTApKXt2YXIgbD10LmxhbmVzO2wmPWUucGVuZGluZ0xhbmVzLG58PWwsdC5sYW5lcz1uLFF5KGUsbil9fWZ1bmN0aW9uIFRkKGUsdCl7dmFyIG49ZS51cGRhdGVRdWV1ZSxsPWUuYWx0ZXJuYXRlO2lmKGwhPT1udWxsJiYobD1sLnVwZGF0ZVF1ZXVlLG49PT1sKSl7dmFyIHI9bnVsbCxjPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGg9e2xhbmU6bi5sYW5lLHRhZzpuLnRhZyxwYXlsb2FkOm4ucGF5bG9hZCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH07Yz09PW51bGw/cj1jPWg6Yz1jLm5leHQ9aCxuPW4ubmV4dH13aGlsZShuIT09bnVsbCk7Yz09PW51bGw/cj1jPXQ6Yz1jLm5leHQ9dH1lbHNlIHI9Yz10O249e2Jhc2VTdGF0ZTpsLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6cixsYXN0QmFzZVVwZGF0ZTpjLHNoYXJlZDpsLnNoYXJlZCxjYWxsYmFja3M6bC5jYWxsYmFja3N9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59ZT1uLmxhc3RCYXNlVXBkYXRlLGU9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fXZhciB3ZD0hMTtmdW5jdGlvbiBQcigpe2lmKHdkKXt2YXIgZT1PbztpZihlIT09bnVsbCl0aHJvdyBlfX1mdW5jdGlvbiBHcihlLHQsbixsKXt3ZD0hMTt2YXIgcj1lLnVwZGF0ZVF1ZXVlO1FsPSExO3ZhciBjPXIuZmlyc3RCYXNlVXBkYXRlLGg9ci5sYXN0QmFzZVVwZGF0ZSxTPXIuc2hhcmVkLnBlbmRpbmc7aWYoUyE9PW51bGwpe3Iuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgXz1TLEw9Xy5uZXh0O18ubmV4dD1udWxsLGg9PT1udWxsP2M9TDpoLm5leHQ9TCxoPV87dmFyIFY9ZS5hbHRlcm5hdGU7ViE9PW51bGwmJihWPVYudXBkYXRlUXVldWUsUz1WLmxhc3RCYXNlVXBkYXRlLFMhPT1oJiYoUz09PW51bGw/Vi5maXJzdEJhc2VVcGRhdGU9TDpTLm5leHQ9TCxWLmxhc3RCYXNlVXBkYXRlPV8pKX1pZihjIT09bnVsbCl7dmFyIFo9ci5iYXNlU3RhdGU7aD0wLFY9TD1fPW51bGwsUz1jO2Rve3ZhciB6PVMubGFuZSYtNTM2ODcwOTEzLEc9eiE9PVMubGFuZTtpZihHPyhMZSZ6KT09PXo6KGwmeik9PT16KXt6IT09MCYmej09PWthJiYod2Q9ITApLFYhPT1udWxsJiYoVj1WLm5leHQ9e2xhbmU6MCx0YWc6Uy50YWcscGF5bG9hZDpTLnBheWxvYWQsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9KTtlOnt2YXIgb2U9ZSx2ZT1TO3o9dDt2YXIgT2U9bjtzd2l0Y2godmUudGFnKXtjYXNlIDE6aWYob2U9dmUucGF5bG9hZCx0eXBlb2Ygb2U9PSJmdW5jdGlvbiIpe1o9b2UuY2FsbChPZSxaLHopO2JyZWFrIGV9Wj1vZTticmVhayBlO2Nhc2UgMzpvZS5mbGFncz1vZS5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihvZT12ZS5wYXlsb2FkLHo9dHlwZW9mIG9lPT0iZnVuY3Rpb24iP29lLmNhbGwoT2UsWix6KTpvZSx6PT1udWxsKWJyZWFrIGU7Wj1VKHt9LFoseik7YnJlYWsgZTtjYXNlIDI6UWw9ITB9fXo9Uy5jYWxsYmFjayx6IT09bnVsbCYmKGUuZmxhZ3N8PTY0LEcmJihlLmZsYWdzfD04MTkyKSxHPXIuY2FsbGJhY2tzLEc9PT1udWxsP3IuY2FsbGJhY2tzPVt6XTpHLnB1c2goeikpfWVsc2UgRz17bGFuZTp6LHRhZzpTLnRhZyxwYXlsb2FkOlMucGF5bG9hZCxjYWxsYmFjazpTLmNhbGxiYWNrLG5leHQ6bnVsbH0sVj09PW51bGw/KEw9Vj1HLF89Wik6Vj1WLm5leHQ9RyxofD16O2lmKFM9Uy5uZXh0LFM9PT1udWxsKXtpZihTPXIuc2hhcmVkLnBlbmRpbmcsUz09PW51bGwpYnJlYWs7Rz1TLFM9Ry5uZXh0LEcubmV4dD1udWxsLHIubGFzdEJhc2VVcGRhdGU9RyxyLnNoYXJlZC5wZW5kaW5nPW51bGx9fXdoaWxlKCEwKTtWPT09bnVsbCYmKF89Wiksci5iYXNlU3RhdGU9XyxyLmZpcnN0QmFzZVVwZGF0ZT1MLHIubGFzdEJhc2VVcGRhdGU9VixjPT09bnVsbCYmKHIuc2hhcmVkLmxhbmVzPTApLGxhfD1oLGUubGFuZXM9aCxlLm1lbW9pemVkU3RhdGU9Wn19ZnVuY3Rpb24gYzAoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihpKDE5MSxlKSk7ZS5jYWxsKHQpfWZ1bmN0aW9uIHUwKGUsdCl7dmFyIG49ZS5jYWxsYmFja3M7aWYobiE9PW51bGwpZm9yKGUuY2FsbGJhY2tzPW51bGwsZT0wO2U8bi5sZW5ndGg7ZSsrKWMwKG5bZV0sdCl9dmFyICRsPXF0KG51bGwpLEJjPXF0KDApO2Z1bmN0aW9uIHMwKGUsdCl7ZT1SbCxQZShCYyxlKSxQZSgkbCx0KSxSbD1lfHQuYmFzZUxhbmVzfWZ1bmN0aW9uIEVkKCl7UGUoQmMsUmwpLFBlKCRsLCRsLmN1cnJlbnQpfWZ1bmN0aW9uIFJkKCl7Umw9QmMuY3VycmVudCxpdCgkbCksaXQoQmMpfXZhciBPdD1xdChudWxsKSxrdD1udWxsO2Z1bmN0aW9uIEpsKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO1BlKEF0LEF0LmN1cnJlbnQmMSksUGUoT3QsZSksa3Q9PT1udWxsJiYodD09PW51bGx8fCRsLmN1cnJlbnQhPT1udWxsfHx0Lm1lbW9pemVkU3RhdGUhPT1udWxsKSYmKGt0PWUpfWZ1bmN0aW9uIF9kKGUpe1BlKEF0LEF0LmN1cnJlbnQpLFBlKE90LGUpLGt0PT09bnVsbCYmKGt0PWUpfWZ1bmN0aW9uIGYwKGUpe2UudGFnPT09MjI/KFBlKEF0LEF0LmN1cnJlbnQpLFBlKE90LGUpLGt0PT09bnVsbCYmKGt0PWUpKTpXbCgpfWZ1bmN0aW9uIFdsKCl7UGUoQXQsQXQuY3VycmVudCksUGUoT3QsT3QuY3VycmVudCl9ZnVuY3Rpb24gb24oZSl7aXQoT3QpLGt0PT09ZSYmKGt0PW51bGwpLGl0KEF0KX12YXIgQXQ9cXQoMCk7ZnVuY3Rpb24gVnIoZSx0KXtQZShPdCxPdC5jdXJyZW50KSxQZShBdCx0KX1mdW5jdGlvbiBPZChlKXtpdChBdCksaXQoT3QpLGt0PT09ZSYmKGt0PW51bGwpfWZ1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fEZtKG4pfHwkbShuKSkpcmV0dXJuIHR9ZWxzZSBpZih0LnRhZz09PTE5JiZ0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIhPT0iaW5kZXBlbmRlbnQiKXtpZigodC5mbGFncyYxMjgpIT09MClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIENsPTAsX2U9bnVsbCxRZT1udWxsLGR0PW51bGwsUGM9ITEsRG89ITEsSWE9ITEsR2M9MCxZcj0wLGpvPW51bGwsZk49MDtmdW5jdGlvbiBsdCgpe3Rocm93IEVycm9yKGkoMzIxKSl9ZnVuY3Rpb24gQWQoZSx0KXtpZih0PT09bnVsbClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZuPGUubGVuZ3RoO24rKylpZighYW4oZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBOZChlLHQsbixsLHIsYyl7cmV0dXJuIENsPWMsX2U9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLHRlLkg9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/UTA6WjAsSWE9ITEsYz1uKGwsciksSWE9ITEsRG8mJihjPW0wKHQsbixsLHIpKSxkMChlKSxjfWZ1bmN0aW9uIGQwKGUpe3RlLkg9WmM7dmFyIHQ9UWUhPT1udWxsJiZRZS5uZXh0IT09bnVsbDtpZihDbD0wLGR0PVFlPV9lPW51bGwsUGM9ITEsWXI9MCxqbz1udWxsLHQpdGhyb3cgRXJyb3IoaSgzMDApKTtlPT09bnVsbHx8bXR8fChlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZqYyhlKSYmKG10PSEwKSl9ZnVuY3Rpb24gbTAoZSx0LG4sbCl7X2U9ZTt2YXIgcj0wO2Rve2lmKERvJiYoam89bnVsbCksWXI9MCxEbz0hMSwyNTw9cil0aHJvdyBFcnJvcihpKDMwMSkpO2lmKHIrPTEsZHQ9UWU9bnVsbCxlLnVwZGF0ZVF1ZXVlIT1udWxsKXt2YXIgYz1lLnVwZGF0ZVF1ZXVlO2MubGFzdEVmZmVjdD1udWxsLGMuZXZlbnRzPW51bGwsYy5zdG9yZXM9bnVsbCxjLm1lbW9DYWNoZSE9bnVsbCYmKGMubWVtb0NhY2hlLmluZGV4PTApfXRlLkg9Yk4sYz10KG4sbCl9d2hpbGUoRG8pO3JldHVybiBjfWZ1bmN0aW9uIGROKCl7dmFyIGU9dGUuSCx0PWUudXNlU3RhdGUoKVswXTtyZXR1cm4gdD10eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iP3FyKHQpOnQsZT1lLnVzZVN0YXRlKClbMF0sKFFlIT09bnVsbD9RZS5tZW1vaXplZFN0YXRlOm51bGwpIT09ZSYmKF9lLmZsYWdzfD0xMDI0KSx0fWZ1bmN0aW9uIERkKCl7dmFyIGU9R2MhPT0wO3JldHVybiBHYz0wLGV9ZnVuY3Rpb24gamQoZSx0LG4pe3QudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+bn1mdW5jdGlvbiBNZChlKXtpZihQYyl7Zm9yKGU9ZS5tZW1vaXplZFN0YXRlO2UhPT1udWxsOyl7dmFyIHQ9ZS5xdWV1ZTt0IT09bnVsbCYmKHQucGVuZGluZz1udWxsKSxlPWUubmV4dH1QYz0hMX1DbD0wLGR0PVFlPV9lPW51bGwsRG89ITEsWXI9R2M9MCxqbz1udWxsfWZ1bmN0aW9uIFV0KCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07cmV0dXJuIGR0PT09bnVsbD9fZS5tZW1vaXplZFN0YXRlPWR0PWU6ZHQ9ZHQubmV4dD1lLGR0fWZ1bmN0aW9uIGN0KCl7aWYoUWU9PT1udWxsKXt2YXIgZT1fZS5hbHRlcm5hdGU7ZT1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGU9UWUubmV4dDt2YXIgdD1kdD09PW51bGw/X2UubWVtb2l6ZWRTdGF0ZTpkdC5uZXh0O2lmKHQhPT1udWxsKWR0PXQsUWU9ZTtlbHNle2lmKGU9PT1udWxsKXRocm93IF9lLmFsdGVybmF0ZT09PW51bGw/RXJyb3IoaSg0NjcpKTpFcnJvcihpKDMxMCkpO1FlPWUsZT17bWVtb2l6ZWRTdGF0ZTpRZS5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpRZS5iYXNlU3RhdGUsYmFzZVF1ZXVlOlFlLmJhc2VRdWV1ZSxxdWV1ZTpRZS5xdWV1ZSxuZXh0Om51bGx9LGR0PT09bnVsbD9fZS5tZW1vaXplZFN0YXRlPWR0PWU6ZHQ9ZHQubmV4dD1lfXJldHVybiBkdH1mdW5jdGlvbiBWYygpe3JldHVybntsYXN0RWZmZWN0Om51bGwsZXZlbnRzOm51bGwsc3RvcmVzOm51bGwsbWVtb0NhY2hlOm51bGx9fWZ1bmN0aW9uIHFyKGUpe3ZhciB0PVlyO3JldHVybiBZcis9MSxqbz09PW51bGwmJihqbz1bXSksZT1sMChqbyxlLHQpLHQ9X2UsKGR0PT09bnVsbD90Lm1lbW9pemVkU3RhdGU6ZHQubmV4dCk9PT1udWxsJiYodD10LmFsdGVybmF0ZSx0ZS5IPXQ9PT1udWxsfHx0Lm1lbW9pemVkU3RhdGU9PT1udWxsP1EwOlowKSxlfWZ1bmN0aW9uIFljKGUpe2lmKGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKHR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIHFyKGUpO2lmKGUuJCR0eXBlb2Y9PT1YKXJldHVybjtpZihlLiQkdHlwZW9mPT09aGUpcmV0dXJuIF90KGUpfXRocm93IEVycm9yKGkoNDM4LFN0cmluZyhlKSkpfWZ1bmN0aW9uIHpkKGUpe3ZhciB0PW51bGwsbj1fZS51cGRhdGVRdWV1ZTtpZihuIT09bnVsbCYmKHQ9bi5tZW1vQ2FjaGUpLHQ9PW51bGwpe3ZhciBsPV9lLmFsdGVybmF0ZTtsIT09bnVsbCYmKGw9bC51cGRhdGVRdWV1ZSxsIT09bnVsbCYmKGw9bC5tZW1vQ2FjaGUsbCE9bnVsbCYmKHQ9e2RhdGE6bC5kYXRhLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5zbGljZSgpfSksaW5kZXg6MH0pKSl9aWYodD09bnVsbCYmKHQ9e2RhdGE6W10saW5kZXg6MH0pLG49PT1udWxsJiYobj1WYygpLF9lLnVwZGF0ZVF1ZXVlPW4pLG4ubWVtb0NhY2hlPXQsbj10LmRhdGFbdC5pbmRleF0sbj09PXZvaWQgMClmb3Iobj10LmRhdGFbdC5pbmRleF09QXJyYXkoZSksbD0wO2w8ZTtsKyspbltsXT1ZZTtyZXR1cm4gdC5pbmRleCsrLG59ZnVuY3Rpb24gVGwoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIHFjKGUpe3ZhciB0PWN0KCk7cmV0dXJuIGtkKHQsUWUsZSl9ZnVuY3Rpb24ga2QoZSx0LG4pe3ZhciBsPWUucXVldWU7aWYobD09PW51bGwpdGhyb3cgRXJyb3IoaSgzMTEpKTtsLmxhc3RSZW5kZXJlZFJlZHVjZXI9bjt2YXIgcj1lLmJhc2VRdWV1ZSxjPWwucGVuZGluZztpZihjIT09bnVsbCl7aWYociE9PW51bGwpe3ZhciBoPXIubmV4dDtyLm5leHQ9Yy5uZXh0LGMubmV4dD1ofXQuYmFzZVF1ZXVlPXI9YyxsLnBlbmRpbmc9bnVsbH1pZihjPWUuYmFzZVN0YXRlLHI9PT1udWxsKWUubWVtb2l6ZWRTdGF0ZT1jO2Vsc2V7dD1yLm5leHQ7dmFyIFM9aD1udWxsLF89bnVsbCxMPXQsVj0hMTtkb3t2YXIgWj1MLmxhbmUmLTUzNjg3MDkxMztpZihaIT09TC5sYW5lPyhMZSZaKT09PVo6KENsJlopPT09Wil7dmFyIHo9TC5yZXZlcnRMYW5lO2lmKHo9PT0wKV8hPT1udWxsJiYoXz1fLm5leHQ9e2xhbmU6MCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjpMLmFjdGlvbixoYXNFYWdlclN0YXRlOkwuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOkwuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxaPT09a2EmJihWPSEwKTtlbHNlIGlmKChDbCZ6KT09PXope0w9TC5uZXh0LHo9PT1rYSYmKFY9ITApO2NvbnRpbnVlfWVsc2UgWj17bGFuZTowLHJldmVydExhbmU6TC5yZXZlcnRMYW5lLGdlc3R1cmU6bnVsbCxhY3Rpb246TC5hY3Rpb24saGFzRWFnZXJTdGF0ZTpMLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpMLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxfPT09bnVsbD8oUz1fPVosaD1jKTpfPV8ubmV4dD1aLF9lLmxhbmVzfD16LGxhfD16O1o9TC5hY3Rpb24sSWEmJm4oYyxaKSxjPUwuaGFzRWFnZXJTdGF0ZT9MLmVhZ2VyU3RhdGU6bihjLFopfWVsc2Ugej17bGFuZTpaLHJldmVydExhbmU6TC5yZXZlcnRMYW5lLGdlc3R1cmU6TC5nZXN0dXJlLGFjdGlvbjpMLmFjdGlvbixoYXNFYWdlclN0YXRlOkwuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOkwuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LF89PT1udWxsPyhTPV89eixoPWMpOl89Xy5uZXh0PXosX2UubGFuZXN8PVosbGF8PVo7TD1MLm5leHR9d2hpbGUoTCE9PW51bGwmJkwhPT10KTtpZihfPT09bnVsbD9oPWM6Xy5uZXh0PVMsIWFuKGMsZS5tZW1vaXplZFN0YXRlKSYmKG10PSEwLFYmJihuPU9vLG4hPT1udWxsKSkpdGhyb3cgbjtlLm1lbW9pemVkU3RhdGU9YyxlLmJhc2VTdGF0ZT1oLGUuYmFzZVF1ZXVlPV8sbC5sYXN0UmVuZGVyZWRTdGF0ZT1jfXJldHVybiByPT09bnVsbCYmKGwubGFuZXM9MCksW2UubWVtb2l6ZWRTdGF0ZSxsLmRpc3BhdGNoXX1mdW5jdGlvbiBMZChlKXt2YXIgdD1jdCgpLG49dC5xdWV1ZTtpZihuPT09bnVsbCl0aHJvdyBFcnJvcihpKDMxMSkpO24ubGFzdFJlbmRlcmVkUmVkdWNlcj1lO3ZhciBsPW4uZGlzcGF0Y2gscj1uLnBlbmRpbmcsYz10Lm1lbW9pemVkU3RhdGU7aWYociE9PW51bGwpe24ucGVuZGluZz1udWxsO3ZhciBoPXI9ci5uZXh0O2RvIGM9ZShjLGguYWN0aW9uKSxoPWgubmV4dDt3aGlsZShoIT09cik7YW4oYyx0Lm1lbW9pemVkU3RhdGUpfHwobXQ9ITApLHQubWVtb2l6ZWRTdGF0ZT1jLHQuYmFzZVF1ZXVlPT09bnVsbCYmKHQuYmFzZVN0YXRlPWMpLG4ubGFzdFJlbmRlcmVkU3RhdGU9Y31yZXR1cm5bYyxsXX1mdW5jdGlvbiBoMChlLHQsbil7dmFyIGw9X2Uscj1jdCgpLGM9TmU7aWYoYyl7aWYobj09PXZvaWQgMCl0aHJvdyBFcnJvcihpKDQwNykpO249bigpfWVsc2Ugbj10KCk7dmFyIGg9IWFuKChRZXx8cikubWVtb2l6ZWRTdGF0ZSxuKTtpZihoJiYoci5tZW1vaXplZFN0YXRlPW4sbXQ9ITApLHI9ci5xdWV1ZSxCZChnMC5iaW5kKG51bGwsbCxyLGUpLFtlXSksZT1yLmdldFNuYXBzaG90IT09dHx8aHx8ZHQhPT1udWxsJiYoZHQubWVtb2l6ZWRTdGF0ZS50YWcmMSkhPT0wLE1vKGU/OTo4LHtkZXN0cm95OnZvaWQgMH0sdjAuYmluZChudWxsLGwscixuLHQpLG51bGwpLGUpe2lmKGwuZmxhZ3N8PTIwNDgsJGU9PT1udWxsKXRocm93IEVycm9yKGkoMzQ5KSk7Y3x8KENsJjEyNykhPT0wfHxwMChsLHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gcDAoZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sdD1fZS51cGRhdGVRdWV1ZSx0PT09bnVsbD8odD1WYygpLF9lLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiB2MChlLHQsbixsKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1sLHkwKHQpJiZiMChlKX1mdW5jdGlvbiBnMChlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXt5MCh0KSYmYjAoZSl9KX1mdW5jdGlvbiB5MChlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFhbihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBiMChlKXt2YXIgdD1BYShlLDIpO3QhPT1udWxsJiYkdCh0LGUsMil9ZnVuY3Rpb24gVWQoZSl7dmFyIHQ9VXQoKTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIil7dmFyIG49ZTtpZihlPW4oKSxJYSl7SWwoITApO3RyeXtuKCl9ZmluYWxseXtJbCghMSl9fX1yZXR1cm4gdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsdC5xdWV1ZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlRsLGxhc3RSZW5kZXJlZFN0YXRlOmV9LHR9ZnVuY3Rpb24geDAoZSx0LG4sbCl7cmV0dXJuIGUuYmFzZVN0YXRlPW4sa2QoZSxRZSx0eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlRsKX1mdW5jdGlvbiBtTihlLHQsbixsLHIpe2lmKFFjKGUpKXRocm93IEVycm9yKGkoNDg1KSk7aWYoZT10LmFjdGlvbixlIT09bnVsbCl7dmFyIGM9e3BheWxvYWQ6cixhY3Rpb246ZSxuZXh0Om51bGwsaXNUcmFuc2l0aW9uOiEwLHN0YXR1czoicGVuZGluZyIsdmFsdWU6bnVsbCxyZWFzb246bnVsbCxsaXN0ZW5lcnM6W10sdGhlbjpmdW5jdGlvbihoKXtjLmxpc3RlbmVycy5wdXNoKGgpfX07dGUuVCE9PW51bGw/bighMCk6Yy5pc1RyYW5zaXRpb249ITEsbChjKSxuPXQucGVuZGluZyxuPT09bnVsbD8oYy5uZXh0PXQucGVuZGluZz1jLFMwKHQsYykpOihjLm5leHQ9bi5uZXh0LHQucGVuZGluZz1uLm5leHQ9Yyl9fWZ1bmN0aW9uIFMwKGUsdCl7dmFyIG49dC5hY3Rpb24sbD10LnBheWxvYWQscj1lLnN0YXRlO2lmKHQuaXNUcmFuc2l0aW9uKXt2YXIgYz10ZS5ULGg9e307aC50eXBlcz1jIT09bnVsbD9jLnR5cGVzOm51bGwsdGUuVD1oO3RyeXt2YXIgUz1uKHIsbCksXz10ZS5TO18hPT1udWxsJiZfKGgsUyksQzAoZSx0LFMpfWNhdGNoKEwpe0hkKGUsdCxMKX1maW5hbGx5e2MhPT1udWxsJiZoLnR5cGVzIT09bnVsbCYmKGMudHlwZXM9aC50eXBlcyksdGUuVD1jfX1lbHNlIHRyeXtjPW4ocixsKSxDMChlLHQsYyl9Y2F0Y2goTCl7SGQoZSx0LEwpfX1mdW5jdGlvbiBDMChlLHQsbil7biE9PW51bGwmJnR5cGVvZiBuPT0ib2JqZWN0IiYmdHlwZW9mIG4udGhlbj09ImZ1bmN0aW9uIj9uLnRoZW4oZnVuY3Rpb24obCl7VDAoZSx0LGwpfSxmdW5jdGlvbihsKXtyZXR1cm4gSGQoZSx0LGwpfSk6VDAoZSx0LG4pfWZ1bmN0aW9uIFQwKGUsdCxuKXt0LnN0YXR1cz0iZnVsZmlsbGVkIix0LnZhbHVlPW4sdzAodCksZS5zdGF0ZT1uLHQ9ZS5wZW5kaW5nLHQhPT1udWxsJiYobj10Lm5leHQsbj09PXQ/ZS5wZW5kaW5nPW51bGw6KG49bi5uZXh0LHQubmV4dD1uLFMwKGUsbikpKX1mdW5jdGlvbiBIZChlLHQsbil7dmFyIGw9ZS5wZW5kaW5nO2lmKGUucGVuZGluZz1udWxsLGwhPT1udWxsKXtsPWwubmV4dDtkbyB0LnN0YXR1cz0icmVqZWN0ZWQiLHQucmVhc29uPW4sdzAodCksdD10Lm5leHQ7d2hpbGUodCE9PWwpfWUuYWN0aW9uPW51bGx9ZnVuY3Rpb24gdzAoZSl7ZT1lLmxpc3RlbmVycztmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfWZ1bmN0aW9uIEUwKGUsdCl7cmV0dXJuIHR9ZnVuY3Rpb24gUjAoZSx0KXtpZihOZSl7dmFyIG49JGUuZm9ybVN0YXRlO2lmKG4hPT1udWxsKXtlOnt2YXIgbD1fZTtpZihOZSl7aWYoSmUpe3Q6e2Zvcih2YXIgcj1KZSxjPVNuO3Iubm9kZVR5cGUhPT04Oyl7aWYoIWMpe3I9bnVsbDticmVhayB0fWlmKHI9VG4oci5uZXh0U2libGluZykscj09PW51bGwpe3I9bnVsbDticmVhayB0fX1jPXIuZGF0YSxyPWM9PT0iRiEifHxjPT09IkYiP3I6bnVsbH1pZihyKXtKZT1UbihyLm5leHRTaWJsaW5nKSxsPXIuZGF0YT09PSJGISI7YnJlYWsgZX19cWwobCl9bD0hMX1sJiYodD1uWzBdKX19cmV0dXJuIG49VXQoKSxuLm1lbW9pemVkU3RhdGU9bi5iYXNlU3RhdGU9dCxsPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6RTAsbGFzdFJlbmRlcmVkU3RhdGU6dH0sbi5xdWV1ZT1sLG49cTAuYmluZChudWxsLF9lLGwpLGwuZGlzcGF0Y2g9bixsPVVkKCExKSxjPVlkLmJpbmQobnVsbCxfZSwhMSxsLnF1ZXVlKSxsPVV0KCkscj17c3RhdGU6dCxkaXNwYXRjaDpudWxsLGFjdGlvbjplLHBlbmRpbmc6bnVsbH0sbC5xdWV1ZT1yLG49bU4uYmluZChudWxsLF9lLHIsYyxuKSxyLmRpc3BhdGNoPW4sbC5tZW1vaXplZFN0YXRlPWUsW3QsbiwhMV19ZnVuY3Rpb24gXzAoZSl7dmFyIHQ9Y3QoKTtyZXR1cm4gTzAodCxRZSxlKX1mdW5jdGlvbiBPMChlLHQsbil7aWYodD1rZChlLHQsRTApWzBdLGU9cWMoVGwpWzBdLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiIpdHJ5e3ZhciBsPXFyKHQpfWNhdGNoKGgpe3Rocm93IGg9PT1Bbz9rYzpofWVsc2UgbD10O3Q9Y3QoKTt2YXIgcj10LnF1ZXVlLGM9ci5kaXNwYXRjaDtyZXR1cm4gbiE9PXQubWVtb2l6ZWRTdGF0ZSYmKF9lLmZsYWdzfD0yMDQ4LE1vKDkse2Rlc3Ryb3k6dm9pZCAwfSxoTi5iaW5kKG51bGwscixuKSxudWxsKSksW2wsYyxlXX1mdW5jdGlvbiBoTihlLHQpe2UuYWN0aW9uPXR9ZnVuY3Rpb24gQTAoZSl7dmFyIHQ9Y3QoKSxuPVFlO2lmKG4hPT1udWxsKXJldHVybiBPMCh0LG4sZSk7Y3QoKSx0PXQubWVtb2l6ZWRTdGF0ZSxuPWN0KCk7dmFyIGw9bi5xdWV1ZS5kaXNwYXRjaDtyZXR1cm4gbi5tZW1vaXplZFN0YXRlPWUsW3QsbCwhMV19ZnVuY3Rpb24gTW8oZSx0LG4sbCl7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTpuLGRlcHM6bCxpbnN0OnQsbmV4dDpudWxsfSx0PV9lLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsJiYodD1WYygpLF9lLnVwZGF0ZVF1ZXVlPXQpLG49dC5sYXN0RWZmZWN0LG49PT1udWxsP3QubGFzdEVmZmVjdD1lLm5leHQ9ZToobD1uLm5leHQsbi5uZXh0PWUsZS5uZXh0PWwsdC5sYXN0RWZmZWN0PWUpLGV9ZnVuY3Rpb24gTjAoKXtyZXR1cm4gY3QoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIFhjKGUsdCxuLGwpe3ZhciByPVV0KCk7X2UuZmxhZ3N8PWUsci5tZW1vaXplZFN0YXRlPU1vKDF8dCx7ZGVzdHJveTp2b2lkIDB9LG4sbD09PXZvaWQgMD9udWxsOmwpfWZ1bmN0aW9uIEtjKGUsdCxuLGwpe3ZhciByPWN0KCk7bD1sPT09dm9pZCAwP251bGw6bDt2YXIgYz1yLm1lbW9pemVkU3RhdGUuaW5zdDtRZSE9PW51bGwmJmwhPT1udWxsJiZBZChsLFFlLm1lbW9pemVkU3RhdGUuZGVwcyk/ci5tZW1vaXplZFN0YXRlPU1vKHQsYyxuLGwpOihfZS5mbGFnc3w9ZSxyLm1lbW9pemVkU3RhdGU9TW8oMXx0LGMsbixsKSl9ZnVuY3Rpb24gRDAoZSx0KXtYYyg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBCZChlLHQpe0tjKDIwNDgsOCxlLHQpfWZ1bmN0aW9uIHBOKGUpe19lLmZsYWdzfD00O3ZhciB0PV9lLnVwZGF0ZVF1ZXVlO2lmKHQ9PT1udWxsKXQ9VmMoKSxfZS51cGRhdGVRdWV1ZT10LHQuZXZlbnRzPVtlXTtlbHNle3ZhciBuPXQuZXZlbnRzO249PT1udWxsP3QuZXZlbnRzPVtlXTpuLnB1c2goZSl9fWZ1bmN0aW9uIGowKGUpe3ZhciB0PWN0KCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gcE4oe3JlZjp0LG5leHRJbXBsOmV9KSxmdW5jdGlvbigpe2lmKChJZSYyKSE9PTApdGhyb3cgRXJyb3IoaSg0NDApKTtyZXR1cm4gdC5pbXBsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1mdW5jdGlvbiBNMChlLHQpe3JldHVybiBLYyg0LDIsZSx0KX1mdW5jdGlvbiB6MChlLHQpe3JldHVybiBLYyg0LDQsZSx0KX1mdW5jdGlvbiBrMChlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXtlPWUoKTt2YXIgbj10KGUpO3JldHVybiBmdW5jdGlvbigpe3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTp0KG51bGwpfX1pZih0IT1udWxsKXJldHVybiBlPWUoKSx0LmN1cnJlbnQ9ZSxmdW5jdGlvbigpe3QuY3VycmVudD1udWxsfX1mdW5jdGlvbiBMMChlLHQsbil7bj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxLYyg0LDQsazAuYmluZChudWxsLHQsZSksbil9ZnVuY3Rpb24gSWQoKXt9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgbj1jdCgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIGw9bi5tZW1vaXplZFN0YXRlO3JldHVybiB0IT09bnVsbCYmQWQodCxsWzFdKT9sWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gSDAoZSx0KXt2YXIgbj1jdCgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIGw9bi5tZW1vaXplZFN0YXRlO2lmKHQhPT1udWxsJiZBZCh0LGxbMV0pKXJldHVybiBsWzBdO2lmKGw9ZSgpLElhKXtJbCghMCk7dHJ5e2UoKX1maW5hbGx5e0lsKCExKX19cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT1bbCx0XSxsfWZ1bmN0aW9uIFBkKGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMHx8KENsJjEwNzM3NDE4MjQpIT09MCYmKExlJjI2MTkzMCk9PT0wP2UubWVtb2l6ZWRTdGF0ZT10OihlLm1lbW9pemVkU3RhdGU9bixlPVF4KCksX2UubGFuZXN8PWUsbGF8PWUsbil9ZnVuY3Rpb24gQjAoZSx0LG4sbCl7cmV0dXJuIGFuKG4sdCk/bjokbC5jdXJyZW50IT09bnVsbD8oZT1QZChlLG4sbCksYW4oZSx0KXx8KG10PSEwKSxlKTooQ2wmMTA2KT09PTB8fChDbCYxMDczNzQxODI0KSE9PTAmJihMZSYyNjE5MzApPT09MD8obXQ9ITAsZS5tZW1vaXplZFN0YXRlPW4pOihlPVF4KCksX2UubGFuZXN8PWUsbGF8PWUsdCl9ZnVuY3Rpb24gSTAoZSx0LG4sbCxyKXt2YXIgYz1pZS5wO2llLnA9YyE9PTAmJjg+Yz9jOjg7dmFyIGg9dGUuVCxTPXt9O1MudHlwZXM9aCE9PW51bGw/aC50eXBlczpudWxsLHRlLlQ9UyxZZChlLCExLHQsbik7dHJ5e3ZhciBfPXIoKSxMPXRlLlM7aWYoTCE9PW51bGwmJkwoUyxfKSxfIT09bnVsbCYmdHlwZW9mIF89PSJvYmplY3QiJiZ0eXBlb2YgXy50aGVuPT0iZnVuY3Rpb24iKXt2YXIgVj1zTihfLGwpO1hyKGUsdCxWLHNuKGUpKX1lbHNlIFhyKGUsdCxsLHNuKGUpKX1jYXRjaChaKXtYcihlLHQse3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpafSxzbigpKX1maW5hbGx5e2llLnA9YyxoIT09bnVsbCYmUy50eXBlcyE9PW51bGwmJihoLnR5cGVzPVMudHlwZXMpLHRlLlQ9aH19ZnVuY3Rpb24gdk4oKXt9ZnVuY3Rpb24gR2QoZSx0LG4sbCl7aWYoZS50YWchPT01KXRocm93IEVycm9yKGkoNDc2KSk7dmFyIHI9UDAoZSkucXVldWU7STAoZSxyLHQsYmUsbj09PW51bGw/dk46ZnVuY3Rpb24oKXtyZXR1cm4gRzAoZSksbihsKX0pfWZ1bmN0aW9uIFAwKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZih0IT09bnVsbClyZXR1cm4gdDt0PXttZW1vaXplZFN0YXRlOmJlLGJhc2VTdGF0ZTpiZSxiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlRsLGxhc3RSZW5kZXJlZFN0YXRlOmJlfSxuZXh0Om51bGx9O3ZhciBuPXt9O3JldHVybiB0Lm5leHQ9e21lbW9pemVkU3RhdGU6bixiYXNlU3RhdGU6bixiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlRsLGxhc3RSZW5kZXJlZFN0YXRlOm59LG5leHQ6bnVsbH0sZS5tZW1vaXplZFN0YXRlPXQsZT1lLmFsdGVybmF0ZSxlIT09bnVsbCYmKGUubWVtb2l6ZWRTdGF0ZT10KSx0fWZ1bmN0aW9uIEcwKGUpe3ZhciB0PVAwKGUpO3QubmV4dD09PW51bGwmJih0PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpLFhyKGUsdC5uZXh0LnF1ZXVlLHt9LHNuKCkpfWZ1bmN0aW9uIFZkKCl7cmV0dXJuIF90KEpvKX1mdW5jdGlvbiBWMCgpe3JldHVybiBjdCgpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gWTAoKXtyZXR1cm4gY3QoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGdOKGUpe2Zvcih2YXIgdD1lLnJldHVybjt0IT09bnVsbDspe3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpjYXNlIDM6dmFyIG49c24oKTtlPVpsKG4pO3ZhciBsPUZsKHQsZSxuKTtsIT09bnVsbCYmKCR0KGwsdCxuKSxJcihsLHQsbikpLHQ9e2NhY2hlOmdkKCl9LGUucGF5bG9hZD10O3JldHVybn10PXQucmV0dXJufX1mdW5jdGlvbiB5TihlLHQsbil7dmFyIGw9c24oKTtuPXtsYW5lOmwscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LFFjKGUpP1gwKHQsbik6KG49Y2QoZSx0LG4sbCksbiE9PW51bGwmJigkdChuLGUsbCksSzAobix0LGwpKSl9ZnVuY3Rpb24gcTAoZSx0LG4pe3ZhciBsPXNuKCk7WHIoZSx0LG4sbCl9ZnVuY3Rpb24gWHIoZSx0LG4sbCl7dmFyIHI9e2xhbmU6bCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjpuLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoUWMoZSkpWDAodCxyKTtlbHNle3ZhciBjPWUuYWx0ZXJuYXRlO2lmKGUubGFuZXM9PT0wJiYoYz09PW51bGx8fGMubGFuZXM9PT0wKSYmKGM9dC5sYXN0UmVuZGVyZWRSZWR1Y2VyLGMhPT1udWxsKSl0cnl7dmFyIGg9dC5sYXN0UmVuZGVyZWRTdGF0ZSxTPWMoaCxuKTtpZihyLmhhc0VhZ2VyU3RhdGU9ITAsci5lYWdlclN0YXRlPVMsYW4oUyxoKSlyZXR1cm4gRWMoZSx0LHIsMCksJGU9PT1udWxsJiZ3YygpLCExfWNhdGNoe31pZihuPWNkKGUsdCxyLGwpLG4hPT1udWxsKXJldHVybiAkdChuLGUsbCksSzAobix0LGwpLCEwfXJldHVybiExfWZ1bmN0aW9uIFlkKGUsdCxuLGwpe2lmKGw9e2xhbmU6MixyZXZlcnRMYW5lOnptKCksZ2VzdHVyZTpudWxsLGFjdGlvbjpsLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sUWMoZSkpe2lmKHQpdGhyb3cgRXJyb3IoaSg0NzkpKX1lbHNlIHQ9Y2QoZSxuLGwsMiksdCE9PW51bGwmJiR0KHQsZSwyKX1mdW5jdGlvbiBRYyhlKXt2YXIgdD1lLmFsdGVybmF0ZTtyZXR1cm4gZT09PV9lfHx0IT09bnVsbCYmdD09PV9lfWZ1bmN0aW9uIFgwKGUsdCl7RG89UGM9ITA7dmFyIG49ZS5wZW5kaW5nO249PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9bi5uZXh0LG4ubmV4dD10KSxlLnBlbmRpbmc9dH1mdW5jdGlvbiBLMChlLHQsbil7aWYoKG4mNDE5NDA0OCkhPT0wKXt2YXIgbD10LmxhbmVzO2wmPWUucGVuZGluZ0xhbmVzLG58PWwsdC5sYW5lcz1uLFF5KGUsbil9fXZhciBaYz17cmVhZENvbnRleHQ6X3QsdXNlOlljLHVzZUNhbGxiYWNrOmx0LHVzZUNvbnRleHQ6bHQsdXNlRWZmZWN0Omx0LHVzZUltcGVyYXRpdmVIYW5kbGU6bHQsdXNlTGF5b3V0RWZmZWN0Omx0LHVzZUluc2VydGlvbkVmZmVjdDpsdCx1c2VNZW1vOmx0LHVzZVJlZHVjZXI6bHQsdXNlUmVmOmx0LHVzZVN0YXRlOmx0LHVzZURlYnVnVmFsdWU6bHQsdXNlRGVmZXJyZWRWYWx1ZTpsdCx1c2VUcmFuc2l0aW9uOmx0LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmx0LHVzZUlkOmx0LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmx0LHVzZUZvcm1TdGF0ZTpsdCx1c2VBY3Rpb25TdGF0ZTpsdCx1c2VPcHRpbWlzdGljOmx0LHVzZU1lbW9DYWNoZTpsdCx1c2VDYWNoZVJlZnJlc2g6bHQsdXNlRWZmZWN0RXZlbnQ6bHR9LFEwPXtyZWFkQ29udGV4dDpfdCx1c2U6WWMsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVXQoKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0Ol90LHVzZUVmZmVjdDpEMCx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLFhjKDQxOTQzMDgsNCxrMC5iaW5kKG51bGwsdCxlKSxuKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFhjKDQxOTQzMDgsNCxlLHQpfSx1c2VJbnNlcnRpb25FZmZlY3Q6ZnVuY3Rpb24oZSx0KXtYYyg0LDIsZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3ZhciBuPVV0KCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgbD1lKCk7aWYoSWEpe0lsKCEwKTt0cnl7ZSgpfWZpbmFsbHl7SWwoITEpfX1yZXR1cm4gbi5tZW1vaXplZFN0YXRlPVtsLHRdLGx9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPVV0KCk7aWYobiE9PXZvaWQgMCl7dmFyIHI9bih0KTtpZihJYSl7SWwoITApO3RyeXtuKHQpfWZpbmFsbHl7SWwoITEpfX19ZWxzZSByPXQ7cmV0dXJuIGwubWVtb2l6ZWRTdGF0ZT1sLmJhc2VTdGF0ZT1yLGU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnJ9LGwucXVldWU9ZSxlPWUuZGlzcGF0Y2g9eU4uYmluZChudWxsLF9lLGUpLFtsLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1VdCgpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpmdW5jdGlvbihlKXtlPVVkKGUpO3ZhciB0PWUucXVldWUsbj1xMC5iaW5kKG51bGwsX2UsdCk7cmV0dXJuIHQuZGlzcGF0Y2g9bixbZS5tZW1vaXplZFN0YXRlLG5dfSx1c2VEZWJ1Z1ZhbHVlOklkLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1VdCgpO3JldHVybiBQZChuLGUsdCl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1VZCghMSk7cmV0dXJuIGU9STAuYmluZChudWxsLF9lLGUucXVldWUsITAsITEpLFV0KCkubWVtb2l6ZWRTdGF0ZT1lLFshMSxlXX0sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPV9lLHI9VXQoKTtpZihOZSl7aWYobj09PXZvaWQgMCl0aHJvdyBFcnJvcihpKDQwNykpO249bigpfWVsc2V7aWYobj10KCksJGU9PT1udWxsKXRocm93IEVycm9yKGkoMzQ5KSk7KExlJjEyNykhPT0wfHxwMChsLHQsbil9ci5tZW1vaXplZFN0YXRlPW47dmFyIGM9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIHIucXVldWU9YyxEMChnMC5iaW5kKG51bGwsbCxjLGUpLFtlXSksbC5mbGFnc3w9MjA0OCxNbyg5LHtkZXN0cm95OnZvaWQgMH0sdjAuYmluZChudWxsLGwsYyxuLHQpLG51bGwpLG59LHVzZUlkOmZ1bmN0aW9uKCl7dmFyIGU9VXQoKSx0PSRlLmlkZW50aWZpZXJQcmVmaXg7aWYoTmUpe3ZhciBuPVluLGw9Vm47bj0obCZ+KDE8PDMyLW5uKGwpLTEpKS50b1N0cmluZygzMikrbix0PSJfIit0KyJSXyIrbixuPUdjKyssMDxuJiYodCs9IkgiK24udG9TdHJpbmcoMzIpKSx0Kz0iXyJ9ZWxzZSBuPWZOKyssdD0iXyIrdCsicl8iK24udG9TdHJpbmcoMzIpKyJfIjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOlZkLHVzZUZvcm1TdGF0ZTpSMCx1c2VBY3Rpb25TdGF0ZTpSMCx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUpe3ZhciB0PVV0KCk7dC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWU7dmFyIG49e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpudWxsLGxhc3RSZW5kZXJlZFN0YXRlOm51bGx9O3JldHVybiB0LnF1ZXVlPW4sdD1ZZC5iaW5kKG51bGwsX2UsITAsbiksbi5kaXNwYXRjaD10LFtlLHRdfSx1c2VNZW1vQ2FjaGU6emQsdXNlQ2FjaGVSZWZyZXNoOmZ1bmN0aW9uKCl7cmV0dXJuIFV0KCkubWVtb2l6ZWRTdGF0ZT1nTi5iaW5kKG51bGwsX2UpfSx1c2VFZmZlY3RFdmVudDpmdW5jdGlvbihlKXt2YXIgdD1VdCgpLG49e2ltcGw6ZX07cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1uLGZ1bmN0aW9uKCl7aWYoKEllJjIpIT09MCl0aHJvdyBFcnJvcihpKDQ0MCkpO3JldHVybiBuLmltcGwuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sWjA9e3JlYWRDb250ZXh0Ol90LHVzZTpZYyx1c2VDYWxsYmFjazpVMCx1c2VDb250ZXh0Ol90LHVzZUVmZmVjdDpCZCx1c2VJbXBlcmF0aXZlSGFuZGxlOkwwLHVzZUluc2VydGlvbkVmZmVjdDpNMCx1c2VMYXlvdXRFZmZlY3Q6ejAsdXNlTWVtbzpIMCx1c2VSZWR1Y2VyOnFjLHVzZVJlZjpOMCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBxYyhUbCl9LHVzZURlYnVnVmFsdWU6SWQsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWN0KCk7cmV0dXJuIEIwKG4sUWUubWVtb2l6ZWRTdGF0ZSxlLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9cWMoVGwpWzBdLHQ9Y3QoKS5tZW1vaXplZFN0YXRlO3JldHVyblt0eXBlb2YgZT09ImJvb2xlYW4iP2U6cXIoZSksdF19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmgwLHVzZUlkOlYwLHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOlZkLHVzZUZvcm1TdGF0ZTpfMCx1c2VBY3Rpb25TdGF0ZTpfMCx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUsdCl7dmFyIG49Y3QoKTtyZXR1cm4geDAobixRZSxlLHQpfSx1c2VNZW1vQ2FjaGU6emQsdXNlQ2FjaGVSZWZyZXNoOlkwLHVzZUVmZmVjdEV2ZW50OmowfSxiTj17cmVhZENvbnRleHQ6X3QsdXNlOlljLHVzZUNhbGxiYWNrOlUwLHVzZUNvbnRleHQ6X3QsdXNlRWZmZWN0OkJkLHVzZUltcGVyYXRpdmVIYW5kbGU6TDAsdXNlSW5zZXJ0aW9uRWZmZWN0Ok0wLHVzZUxheW91dEVmZmVjdDp6MCx1c2VNZW1vOkgwLHVzZVJlZHVjZXI6TGQsdXNlUmVmOk4wLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIExkKFRsKX0sdXNlRGVidWdWYWx1ZTpJZCx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49Y3QoKTtyZXR1cm4gUWU9PT1udWxsP1BkKG4sZSx0KTpCMChuLFFlLm1lbW9pemVkU3RhdGUsZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPUxkKFRsKVswXSx0PWN0KCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdHlwZW9mIGU9PSJib29sZWFuIj9lOnFyKGUpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpoMCx1c2VJZDpWMCx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpWZCx1c2VGb3JtU3RhdGU6QTAsdXNlQWN0aW9uU3RhdGU6QTAsdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLHQpe3ZhciBuPWN0KCk7cmV0dXJuIFFlIT09bnVsbD94MChuLFFlLGUsdCk6KG4uYmFzZVN0YXRlPWUsW2Usbi5xdWV1ZS5kaXNwYXRjaF0pfSx1c2VNZW1vQ2FjaGU6emQsdXNlQ2FjaGVSZWZyZXNoOlkwLHVzZUVmZmVjdEV2ZW50OmowfTtmdW5jdGlvbiBxZChlLHQsbixsKXt0PWUubWVtb2l6ZWRTdGF0ZSxuPW4obCx0KSxuPW49PW51bGw/dDpVKHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sZS5sYW5lcz09PTAmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1uKX12YXIgWGQ9e2VucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgbD1zbigpLHI9WmwobCk7ci5wYXlsb2FkPXQsbiE9bnVsbCYmKHIuY2FsbGJhY2s9biksdD1GbChlLHIsbCksdCE9PW51bGwmJigkdCh0LGUsbCksSXIodCxlLGwpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgbD1zbigpLHI9WmwobCk7ci50YWc9MSxyLnBheWxvYWQ9dCxuIT1udWxsJiYoci5jYWxsYmFjaz1uKSx0PUZsKGUscixsKSx0IT09bnVsbCYmKCR0KHQsZSxsKSxJcih0LGUsbCkpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPXNuKCksbD1abChuKTtsLnRhZz0yLHQhPW51bGwmJihsLmNhbGxiYWNrPXQpLHQ9RmwoZSxsLG4pLHQhPT1udWxsJiYoJHQodCxlLG4pLElyKHQsZSxuKSl9fTtmdW5jdGlvbiBGMChlLHQsbixsLHIsYyxoKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUobCxjLGgpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hanIobixsKXx8IWpyKHIsYyk6ITB9ZnVuY3Rpb24gJDAoZSx0LG4sbCl7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLGwpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sbCksdC5zdGF0ZSE9PWUmJlhkLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIFBhKGUsdCl7dmFyIG49dDtpZigicmVmImluIHQpe249e307Zm9yKHZhciBsIGluIHQpbCE9PSJyZWYiJiYobltsXT10W2xdKX1pZihlPWUuZGVmYXVsdFByb3BzKXtuPT09dCYmKG49VSh7fSxuKSk7Zm9yKHZhciByIGluIGUpbltyXT09PXZvaWQgMCYmKG5bcl09ZVtyXSl9cmV0dXJuIG59ZnVuY3Rpb24gSjAoZSl7VGMoZSl9ZnVuY3Rpb24gVzAoZSl7Y29uc29sZS5lcnJvcihlKX1mdW5jdGlvbiBleChlKXtUYyhlKX1mdW5jdGlvbiBGYyhlLHQpe3RyeXt2YXIgbj1lLm9uVW5jYXVnaHRFcnJvcjtuKHQudmFsdWUse2NvbXBvbmVudFN0YWNrOnQuc3RhY2t9KX1jYXRjaChsKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgbH0pfX1mdW5jdGlvbiB0eChlLHQsbil7dHJ5e3ZhciBsPWUub25DYXVnaHRFcnJvcjtsKG4udmFsdWUse2NvbXBvbmVudFN0YWNrOm4uc3RhY2ssZXJyb3JCb3VuZGFyeTp0LnRhZz09PTE/dC5zdGF0ZU5vZGU6bnVsbH0pfWNhdGNoKHIpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyByfSl9fWZ1bmN0aW9uIEtkKGUsdCxuKXtyZXR1cm4gbj1abChuKSxuLnRhZz0zLG4ucGF5bG9hZD17ZWxlbWVudDpudWxsfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7RmMoZSx0KX0sbn1mdW5jdGlvbiBueChlKXtyZXR1cm4gZT1abChlKSxlLnRhZz0zLGV9ZnVuY3Rpb24gbHgoZSx0LG4sbCl7dmFyIHI9bi50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIGM9bC52YWx1ZTtlLnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcihjKX0sZS5jYWxsYmFjaz1mdW5jdGlvbigpe3R4KHQsbixsKX19dmFyIGg9bi5zdGF0ZU5vZGU7aCE9PW51bGwmJnR5cGVvZiBoLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoZS5jYWxsYmFjaz1mdW5jdGlvbigpe3R4KHQsbixsKSx0eXBlb2YgciE9ImZ1bmN0aW9uIiYmKGFhPT09bnVsbD9hYT1uZXcgU2V0KFt0aGlzXSk6YWEuYWRkKHRoaXMpKTt2YXIgUz1sLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2gobC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6UyE9PW51bGw/UzoiIn0pfSl9ZnVuY3Rpb24geE4oZSx0LG4sbCxyKXtpZihuLmZsYWdzfD0zMjc2OCxsIT09bnVsbCYmdHlwZW9mIGw9PSJvYmplY3QiJiZ0eXBlb2YgbC50aGVuPT0iZnVuY3Rpb24iKXtpZih0PW4uYWx0ZXJuYXRlLHQhPT1udWxsJiZNYSh0LG4sciwhMCksbj1PdC5jdXJyZW50LG4hPT1udWxsKXtzd2l0Y2gobi50YWcpe2Nhc2UgMzE6Y2FzZSAxMzpjYXNlIDE5OnJldHVybiBrdD09PW51bGw/Z3UoKTpuLmFsdGVybmF0ZT09PW51bGwmJmF0PT09MCYmKGF0PTMpLG4uZmxhZ3MmPS0yNTcsbi5mbGFnc3w9NjU1MzYsbi5sYW5lcz1yLGw9PT1MYz9uLmZsYWdzfD0xNjM4NDoodD1uLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsP24udXBkYXRlUXVldWU9bmV3IFNldChbbF0pOnQuYWRkKGwpLERtKGUsbCxyKSksITE7Y2FzZSAyMjpyZXR1cm4gbi5mbGFnc3w9NjU1MzYsbD09PUxjP24uZmxhZ3N8PTE2Mzg0Oih0PW4udXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e3RyYW5zaXRpb25zOm51bGwsbWFya2VySW5zdGFuY2VzOm51bGwscmV0cnlRdWV1ZTpuZXcgU2V0KFtsXSl9LG4udXBkYXRlUXVldWU9dCk6KG49dC5yZXRyeVF1ZXVlLG49PT1udWxsP3QucmV0cnlRdWV1ZT1uZXcgU2V0KFtsXSk6bi5hZGQobCkpLERtKGUsbCxyKSksITF9dGhyb3cgRXJyb3IoaSg0MzUsbi50YWcpKX1yZXR1cm4gRG0oZSxsLHIpLGd1KCksITF9aWYoTmUpcmV0dXJuIHQ9T3QuY3VycmVudCx0IT09bnVsbD8oKHQuZmxhZ3MmNjU1MzYpPT09MCYmKHQuZmxhZ3N8PTI1NiksdC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1yLGwhPT1tZCYmKGU9RXJyb3IoaSg0MjIpLHtjYXVzZTpsfSksa3IoeW4oZSxuKSkpKToobCE9PW1kJiYodD1FcnJvcihpKDQyMykse2NhdXNlOmx9KSxrcih5bih0LG4pKSksZT1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmxhZ3N8PTY1NTM2LHImPS1yLGUubGFuZXN8PXIsbD15bihsLG4pLHI9S2QoZS5zdGF0ZU5vZGUsbCxyKSxUZChlLHIpLGF0IT09NCYmKGF0PTIpKSwhMTt2YXIgYz1FcnJvcihpKDUyMCkse2NhdXNlOmx9KTtpZihjPXluKGMsbiksZWk9PT1udWxsP2VpPVtjXTplaS5wdXNoKGMpLGF0IT09NCYmKGF0PTIpLHQ9PT1udWxsKXJldHVybiEwO2w9eW4obCxuKSxuPXQ7ZG97c3dpdGNoKG4udGFnKXtjYXNlIDM6cmV0dXJuIG4uZmxhZ3N8PTY1NTM2LGU9ciYtcixuLmxhbmVzfD1lLGU9S2Qobi5zdGF0ZU5vZGUsbCxlKSxUZChuLGUpLCExO2Nhc2UgMTppZih0PW4udHlwZSxjPW4uc3RhdGVOb2RlLChuLmZsYWdzJjEyOCk9PT0wJiYodHlwZW9mIHQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHxjIT09bnVsbCYmdHlwZW9mIGMuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihhYT09PW51bGx8fCFhYS5oYXMoYykpKSlyZXR1cm4gbi5mbGFnc3w9NjU1MzYsciY9LXIsbi5sYW5lc3w9cixyPW54KHIpLGx4KHIsZSxuLGwpLFRkKG4sciksITE7YnJlYWs7Y2FzZSAyMjppZihuLm1lbW9pemVkU3RhdGUhPT1udWxsKXJldHVybiBuLmZsYWdzfD02NTUzNiwhMX1uPW4ucmV0dXJufXdoaWxlKG4hPT1udWxsKTtyZXR1cm4hMX12YXIgUWQ9RXJyb3IoaSg0NjEpKSxtdD0hMTtmdW5jdGlvbiB5dChlLHQsbixsKXt0LmNoaWxkPWU9PT1udWxsP2kwKHQsbnVsbCxuLGwpOkJhKHQsZS5jaGlsZCxuLGwpfWZ1bmN0aW9uIGF4KGUsdCxuLGwscil7bj1uLnJlbmRlcjt2YXIgYz10LnJlZjtpZigicmVmImluIGwpe3ZhciBoPXt9O2Zvcih2YXIgUyBpbiBsKVMhPT0icmVmIiYmKGhbU109bFtTXSl9ZWxzZSBoPWw7cmV0dXJuIHphKHQpLGw9TmQoZSx0LG4saCxjLHIpLFM9RGQoKSxlIT09bnVsbCYmIW10PyhqZChlLHQsciksd2woZSx0LHIpKTooTmUmJlMmJkFjKHQpLHQuZmxhZ3N8PTEseXQoZSx0LGwsciksdC5jaGlsZCl9ZnVuY3Rpb24gb3goZSx0LG4sbCxyKXtpZihlPT09bnVsbCl7dmFyIGM9bi50eXBlO3JldHVybiB0eXBlb2YgYz09ImZ1bmN0aW9uIiYmIXVkKGMpJiZjLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbD8odC50YWc9MTUsdC50eXBlPWMscngoZSx0LGMsbCxyKSk6KGU9X2Mobi50eXBlLG51bGwsbCx0LHQubW9kZSxyKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSl9aWYoYz1lLmNoaWxkLCFubShlLHIpKXt2YXIgaD1jLm1lbW9pemVkUHJvcHM7aWYobj1uLmNvbXBhcmUsbj1uIT09bnVsbD9uOmpyLG4oaCxsKSYmZS5yZWY9PT10LnJlZilyZXR1cm4gd2woZSx0LHIpfXJldHVybiB0LmZsYWdzfD0xLGU9eWwoYyxsKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiByeChlLHQsbixsLHIpe2lmKGUhPT1udWxsKXt2YXIgYz1lLm1lbW9pemVkUHJvcHM7aWYoanIoYyxsKSYmZS5yZWY9PT10LnJlZilpZihtdD0hMSx0LnBlbmRpbmdQcm9wcz1sPWMsbm0oZSxyKSkoZS5mbGFncyYxMzEwNzIpIT09MCYmKG10PSEwKTtlbHNlIHJldHVybiB0LmxhbmVzPWUubGFuZXMsd2woZSx0LHIpfXJldHVybiBaZChlLHQsbixsLHIpfWZ1bmN0aW9uIGl4KGUsdCxuLGwpe3ZhciByPWwuY2hpbGRyZW4sYz1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbDtpZihlPT09bnVsbCYmdC5zdGF0ZU5vZGU9PT1udWxsJiYodC5zdGF0ZU5vZGU9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbH0pLGwubW9kZT09PSJoaWRkZW4iKXtpZigodC5mbGFncyYxMjgpIT09MCl7aWYoYz1jIT09bnVsbD9jLmJhc2VMYW5lc3xuOm4sZSE9PW51bGwpe2ZvcihsPXQuY2hpbGQ9ZS5jaGlsZCxyPTA7bCE9PW51bGw7KXI9cnxsLmxhbmVzfGwuY2hpbGRMYW5lcyxsPWwuc2libGluZztsPXImfmN9ZWxzZSBsPTAsdC5jaGlsZD1udWxsO3JldHVybiBjeChlLHQsYyxuLGwpfWlmKChuJjUzNjg3MDkxMikhPT0wKXQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGx9LGUhPT1udWxsJiZ6Yyh0LGMhPT1udWxsP2MuY2FjaGVQb29sOm51bGwpLGMhPT1udWxsP3MwKHQsYyk6RWQoKSxmMCh0KTtlbHNlIHJldHVybiBsPXQubGFuZXM9NTM2ODcwOTEyLGN4KGUsdCxjIT09bnVsbD9jLmJhc2VMYW5lc3xuOm4sbixsKX1lbHNlIGMhPT1udWxsPyh6Yyh0LGMuY2FjaGVQb29sKSxzMCh0LGMpLFdsKCksdC5tZW1vaXplZFN0YXRlPW51bGwpOihlIT09bnVsbCYmemModCxudWxsKSxFZCgpLFdsKCkpO3JldHVybiB5dChlLHQscixuKSx0LmNoaWxkfWZ1bmN0aW9uIEtyKGUsdCl7cmV0dXJuIGUhPT1udWxsJiZlLnRhZz09PTIyfHx0LnN0YXRlTm9kZSE9PW51bGx8fCh0LnN0YXRlTm9kZT17X3Zpc2liaWxpdHk6MSxfcGVuZGluZ01hcmtlcnM6bnVsbCxfcmV0cnlDYWNoZTpudWxsLF90cmFuc2l0aW9uczpudWxsfSksdC5zaWJsaW5nfWZ1bmN0aW9uIGN4KGUsdCxuLGwscil7dmFyIGM9YmQoKTtyZXR1cm4gYz1jPT09bnVsbD9udWxsOntwYXJlbnQ6ZnQuX2N1cnJlbnRWYWx1ZSxwb29sOmN9LHQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOm4sY2FjaGVQb29sOmN9LGUhPT1udWxsJiZ6Yyh0LG51bGwpLEVkKCksZjAodCksZSE9PW51bGwmJk1hKGUsdCxsLCEwKSx0LmNoaWxkTGFuZXM9cixudWxsfWZ1bmN0aW9uICRjKGUsdCl7cmV0dXJuIHQ9SmMoe21vZGU6dC5tb2RlLGNoaWxkcmVuOnQuY2hpbGRyZW59LGUubW9kZSksdC5yZWY9ZS5yZWYsZS5jaGlsZD10LHQucmV0dXJuPWUsdH1mdW5jdGlvbiB1eChlLHQsbil7cmV0dXJuIEJhKHQsZS5jaGlsZCxudWxsLG4pLGU9JGModCx0LnBlbmRpbmdQcm9wcyksZS5mbGFnc3w9Mixvbih0KSx0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIFNOKGUsdCxuKXt2YXIgbD10LnBlbmRpbmdQcm9wcyxyPSh0LmZsYWdzJjEyOCkhPT0wO2lmKHQuZmxhZ3MmPS0xMjksZT09PW51bGwpe2lmKE5lKXtpZihsLm1vZGU9PT0iaGlkZGVuIilyZXR1cm4gZT0kYyh0LGwpLHQubGFuZXM9NTM2ODcwOTEyLGUubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGx9LEtyKG51bGwsZSk7aWYoX2QodCksKGU9SmUpPyhlPWtTKGUsU24pLGU9ZSE9PW51bGwmJmUuZGF0YT09PSImIj9lOm51bGwsZSE9PW51bGwmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpWbCE9PW51bGw/e2lkOlZuLG92ZXJmbG93OllufTpudWxsLHJldHJ5TGFuZTo1MzY4NzA5MTIsaHlkcmF0aW9uRXJyb3JzOm51bGx9LG49WGIoZSksbi5yZXR1cm49dCx0LmNoaWxkPW4seHQ9dCxKZT1udWxsKSk6ZT1udWxsLGU9PT1udWxsKXRocm93IHFsKHQpO3JldHVybiB0LmxhbmVzPTUzNjg3MDkxMixudWxsfXJldHVybiAkYyh0LGwpfXZhciBjPWUubWVtb2l6ZWRTdGF0ZTtpZihjIT09bnVsbCl7dmFyIGg9Yy5kZWh5ZHJhdGVkO2lmKF9kKHQpLHIpaWYodC5mbGFncyYyNTYpdC5mbGFncyY9LTI1Nyx0PXV4KGUsdCxuKTtlbHNlIGlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpdC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCx0PW51bGw7ZWxzZSB0aHJvdyBFcnJvcihpKDU1OCkpO2Vsc2UgaWYobXR8fE1hKGUsdCxuLCExKSxyPShuJmUuY2hpbGRMYW5lcykhPT0wLG10fHxyKXtpZigkbC5jdXJyZW50PT09bnVsbCl7aWYobD0kZSxsIT09bnVsbCYmKGg9WnkobCxuKSxoIT09MCYmaCE9PWMucmV0cnlMYW5lKSl0aHJvdyBjLnJldHJ5TGFuZT1oLEFhKGUsaCksJHQobCxlLGgpLFFkO2d1KCl9dD11eChlLHQsbil9ZWxzZSBlPWMudHJlZUNvbnRleHQsSmU9VG4oaC5uZXh0U2libGluZykseHQ9dCxOZT0hMCxZbD1udWxsLFNuPSExLGUhPT1udWxsJiZaYih0LGUpLHQ9JGModCxsKSx0LmZsYWdzfD0xMzQyMjE4MjQ7cmV0dXJuIHR9cmV0dXJuIGU9eWwoZS5jaGlsZCx7bW9kZTpsLm1vZGUsY2hpbGRyZW46bC5jaGlsZHJlbn0pLGUucmVmPXQucmVmLHQuY2hpbGQ9ZSxlLnJldHVybj10LGV9ZnVuY3Rpb24gem8oZSx0KXt2YXIgbj10LnJlZjtpZihuPT09bnVsbCllIT09bnVsbCYmZS5yZWYhPT1udWxsJiYodC5mbGFnc3w9NDE5NDgxNik7ZWxzZXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmdHlwZW9mIG4hPSJvYmplY3QiKXRocm93IEVycm9yKGkoMjg0KSk7KGU9PT1udWxsfHxlLnJlZiE9PW4pJiYodC5mbGFnc3w9NDE5NDgxNil9fWZ1bmN0aW9uIFpkKGUsdCxuLGwscil7cmV0dXJuIHphKHQpLG49TmQoZSx0LG4sbCx2b2lkIDAsciksbD1EZCgpLGUhPT1udWxsJiYhbXQ/KGpkKGUsdCxyKSx3bChlLHQscikpOihOZSYmbCYmQWModCksdC5mbGFnc3w9MSx5dChlLHQsbixyKSx0LmNoaWxkKX1mdW5jdGlvbiBzeChlLHQsbixsLHIsYyl7cmV0dXJuIHphKHQpLHQudXBkYXRlUXVldWU9bnVsbCxuPW0wKHQsbCxuLHIpLGQwKGUpLGw9RGQoKSxlIT09bnVsbCYmIW10PyhqZChlLHQsYyksd2woZSx0LGMpKTooTmUmJmwmJkFjKHQpLHQuZmxhZ3N8PTEseXQoZSx0LG4sYyksdC5jaGlsZCl9ZnVuY3Rpb24gZngoZSx0LG4sbCxyKXtpZih6YSh0KSx0LnN0YXRlTm9kZT09PW51bGwpe3ZhciBjPXdvLGg9bi5jb250ZXh0VHlwZTt0eXBlb2YgaD09Im9iamVjdCImJmghPT1udWxsJiYoYz1fdChoKSksYz1uZXcgbihsLGMpLHQubWVtb2l6ZWRTdGF0ZT1jLnN0YXRlIT09bnVsbCYmYy5zdGF0ZSE9PXZvaWQgMD9jLnN0YXRlOm51bGwsYy51cGRhdGVyPVhkLHQuc3RhdGVOb2RlPWMsYy5fcmVhY3RJbnRlcm5hbHM9dCxjPXQuc3RhdGVOb2RlLGMucHJvcHM9bCxjLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxjLnJlZnM9e30sU2QodCksaD1uLmNvbnRleHRUeXBlLGMuY29udGV4dD10eXBlb2YgaD09Im9iamVjdCImJmghPT1udWxsP190KGgpOndvLGMuc3RhdGU9dC5tZW1vaXplZFN0YXRlLGg9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsdHlwZW9mIGg9PSJmdW5jdGlvbiImJihxZCh0LG4saCxsKSxjLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSksdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT0iZnVuY3Rpb24ifHx0eXBlb2YgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uInx8dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24ifHwoaD1jLnN0YXRlLHR5cGVvZiBjLmNvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmYy5jb21wb25lbnRXaWxsTW91bnQoKSx0eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZjLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxoIT09Yy5zdGF0ZSYmWGQuZW5xdWV1ZVJlcGxhY2VTdGF0ZShjLGMuc3RhdGUsbnVsbCksR3IodCxsLGMsciksUHIoKSxjLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSksdHlwZW9mIGMuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSxsPSEwfWVsc2UgaWYoZT09PW51bGwpe2M9dC5zdGF0ZU5vZGU7dmFyIFM9dC5tZW1vaXplZFByb3BzLF89UGEobixTKTtjLnByb3BzPV87dmFyIEw9Yy5jb250ZXh0LFY9bi5jb250ZXh0VHlwZTtoPXdvLHR5cGVvZiBWPT0ib2JqZWN0IiYmViE9PW51bGwmJihoPV90KFYpKTt2YXIgWj1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztWPXR5cGVvZiBaPT0iZnVuY3Rpb24ifHx0eXBlb2YgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIixTPXQucGVuZGluZ1Byb3BzIT09UyxWfHx0eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KFN8fEwhPT1oKSYmJDAodCxjLGwsaCksUWw9ITE7dmFyIHo9dC5tZW1vaXplZFN0YXRlO2Muc3RhdGU9eixHcih0LGwsYyxyKSxQcigpLEw9dC5tZW1vaXplZFN0YXRlLFN8fHohPT1MfHxRbD8odHlwZW9mIFo9PSJmdW5jdGlvbiImJihxZCh0LG4sWixsKSxMPXQubWVtb2l6ZWRTdGF0ZSksKF89UWx8fEYwKHQsbixfLGwseixMLGgpKT8oVnx8dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24ifHwodHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZjLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBjLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSx0eXBlb2YgYy5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpKToodHlwZW9mIGMuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSx0Lm1lbW9pemVkUHJvcHM9bCx0Lm1lbW9pemVkU3RhdGU9TCksYy5wcm9wcz1sLGMuc3RhdGU9TCxjLmNvbnRleHQ9aCxsPV8pOih0eXBlb2YgYy5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLGw9ITEpfWVsc2V7Yz10LnN0YXRlTm9kZSxDZChlLHQpLGg9dC5tZW1vaXplZFByb3BzLFY9UGEobixoKSxjLnByb3BzPVYsWj10LnBlbmRpbmdQcm9wcyx6PWMuY29udGV4dCxMPW4uY29udGV4dFR5cGUsXz13byx0eXBlb2YgTD09Im9iamVjdCImJkwhPT1udWxsJiYoXz1fdChMKSksUz1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywoTD10eXBlb2YgUz09ImZ1bmN0aW9uInx8dHlwZW9mIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiIpfHx0eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KGghPT1afHx6IT09XykmJiQwKHQsYyxsLF8pLFFsPSExLHo9dC5tZW1vaXplZFN0YXRlLGMuc3RhdGU9eixHcih0LGwsYyxyKSxQcigpO3ZhciBHPXQubWVtb2l6ZWRTdGF0ZTtoIT09Wnx8eiE9PUd8fFFsfHxlIT09bnVsbCYmZS5kZXBlbmRlbmNpZXMhPT1udWxsJiZqYyhlLmRlcGVuZGVuY2llcyk/KHR5cGVvZiBTPT0iZnVuY3Rpb24iJiYocWQodCxuLFMsbCksRz10Lm1lbW9pemVkU3RhdGUpLChWPVFsfHxGMCh0LG4sVixsLHosRyxfKXx8ZSE9PW51bGwmJmUuZGVwZW5kZW5jaWVzIT09bnVsbCYmamMoZS5kZXBlbmRlbmNpZXMpKT8oTHx8dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBjLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgYy5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZjLmNvbXBvbmVudFdpbGxVcGRhdGUobCxHLF8pLHR5cGVvZiBjLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZjLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKGwsRyxfKSksdHlwZW9mIGMuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NCksdHlwZW9mIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBjLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8aD09PWUubWVtb2l6ZWRQcm9wcyYmej09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxoPT09ZS5tZW1vaXplZFByb3BzJiZ6PT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCksdC5tZW1vaXplZFByb3BzPWwsdC5tZW1vaXplZFN0YXRlPUcpLGMucHJvcHM9bCxjLnN0YXRlPUcsYy5jb250ZXh0PV8sbD1WKToodHlwZW9mIGMuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxoPT09ZS5tZW1vaXplZFByb3BzJiZ6PT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fGg9PT1lLm1lbW9pemVkUHJvcHMmJno9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSxsPSExKX1yZXR1cm4gYz1sLHpvKGUsdCksbD0odC5mbGFncyYxMjgpIT09MCxjfHxsPyhjPXQuc3RhdGVOb2RlLG49bCYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6Yy5yZW5kZXIoKSx0LmZsYWdzfD0xLGUhPT1udWxsJiZsPyh0LmNoaWxkPUJhKHQsZS5jaGlsZCxudWxsLHIpLHQuY2hpbGQ9QmEodCxudWxsLG4scikpOnl0KGUsdCxuLHIpLHQubWVtb2l6ZWRTdGF0ZT1jLnN0YXRlLGU9dC5jaGlsZCk6ZT13bChlLHQsciksZX1mdW5jdGlvbiBkeChlLHQsbixsKXtyZXR1cm4gRGEoKSx0LmZsYWdzfD0yNTYseXQoZSx0LG4sbCksdC5jaGlsZH12YXIgRmQ9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowLGh5ZHJhdGlvbkVycm9yczpudWxsfTtmdW5jdGlvbiAkZChlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOnQwKCl9fWZ1bmN0aW9uIEpkKGUsdCxuKXtyZXR1cm4gZT1lIT09bnVsbD9lLmNoaWxkTGFuZXMmfm46MCx0JiYoZXw9dW4pLGV9ZnVuY3Rpb24gbXgoZSx0LG4pe3ZhciBsPXQucGVuZGluZ1Byb3BzLHI9ITEsYz0odC5mbGFncyYxMjgpIT09MCxoO2lmKChoPWMpfHwoaD1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlPT09bnVsbD8hMTooQXQuY3VycmVudCYyKSE9PTApLGgmJihyPSEwLHQuZmxhZ3MmPS0xMjkpLGg9KHQuZmxhZ3MmMzIpIT09MCx0LmZsYWdzJj0tMzMsZT09PW51bGwpe2lmKE5lKXtpZihyP0psKHQpOldsKCksKGU9SmUpPyhlPWtTKGUsU24pLGU9ZSE9PW51bGwmJmUuZGF0YSE9PSImIj9lOm51bGwsZSE9PW51bGwmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpWbCE9PW51bGw/e2lkOlZuLG92ZXJmbG93OllufTpudWxsLHJldHJ5TGFuZTo1MzY4NzA5MTIsaHlkcmF0aW9uRXJyb3JzOm51bGx9LG49WGIoZSksbi5yZXR1cm49dCx0LmNoaWxkPW4seHQ9dCxKZT1udWxsKSk6ZT1udWxsLGU9PT1udWxsKXRocm93IHFsKHQpO3JldHVybiAkbShlKT90LmxhbmVzPTMyOnQubGFuZXM9NTM2ODcwOTEyLG51bGx9cmV0dXJuIGM9bC5jaGlsZHJlbixsPWwuZmFsbGJhY2sscj8oV2woKSxyPXQubW9kZSxjPUpjKHttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOmN9LHIpLGw9TmEobCxyLG4sbnVsbCksYy5yZXR1cm49dCxsLnJldHVybj10LGMuc2libGluZz1sLHQuY2hpbGQ9YyxsPXQuY2hpbGQsbC5tZW1vaXplZFN0YXRlPSRkKG4pLGwuY2hpbGRMYW5lcz1KZChlLGgsbiksdC5tZW1vaXplZFN0YXRlPUZkLEtyKG51bGwsbCkpOihKbCh0KSxXZCh0LGMpKX12YXIgUz1lLm1lbW9pemVkU3RhdGU7aWYoUyE9PW51bGwpe3ZhciBfPVMuZGVoeWRyYXRlZDtpZihfIT09bnVsbClyZXR1cm4gQ04oZSx0LGMsaCxsLF8sUyxuKX1yZXR1cm4gcj8oV2woKSxyPWwuZmFsbGJhY2ssYz10Lm1vZGUsUz1lLmNoaWxkLF89Uy5zaWJsaW5nLGw9eWwoUyx7bW9kZToiaGlkZGVuIixjaGlsZHJlbjpsLmNoaWxkcmVufSksbC5zdWJ0cmVlRmxhZ3M9Uy5zdWJ0cmVlRmxhZ3MmMTIwNjkxMDk3NixfIT09bnVsbD9yPXlsKF8scik6KHI9TmEocixjLG4sbnVsbCksci5mbGFnc3w9Miksci5yZXR1cm49dCxsLnJldHVybj10LGwuc2libGluZz1yLHQuY2hpbGQ9bCxLcihudWxsLGwpLGw9dC5jaGlsZCxyPWUuY2hpbGQubWVtb2l6ZWRTdGF0ZSxyPT09bnVsbD9yPSRkKG4pOihjPXIuY2FjaGVQb29sLGMhPT1udWxsPyhTPWZ0Ll9jdXJyZW50VmFsdWUsYz1jLnBhcmVudCE9PVM/e3BhcmVudDpTLHBvb2w6U306Yyk6Yz10MCgpLHI9e2Jhc2VMYW5lczpyLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpjfSksbC5tZW1vaXplZFN0YXRlPXIsbC5jaGlsZExhbmVzPUpkKGUsaCxuKSx0Lm1lbW9pemVkU3RhdGU9RmQsS3IoZS5jaGlsZCxsKSk6KEpsKHQpLG49ZS5jaGlsZCxlPW4uc2libGluZyxuPXlsKG4se21vZGU6InZpc2libGUiLGNoaWxkcmVuOmwuY2hpbGRyZW59KSxuLnJldHVybj10LG4uc2libGluZz1udWxsLGUhPT1udWxsJiYoaD10LmRlbGV0aW9ucyxoPT09bnVsbD8odC5kZWxldGlvbnM9W2VdLHQuZmxhZ3N8PTE2KTpoLnB1c2goZSkpLHQuY2hpbGQ9bix0Lm1lbW9pemVkU3RhdGU9bnVsbCxuKX1mdW5jdGlvbiBXZChlLHQpe3JldHVybiB0PUpjKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjp0fSxlLm1vZGUpLHQucmV0dXJuPWUsZS5jaGlsZD10fWZ1bmN0aW9uIEpjKGUsdCl7cmV0dXJuIGU9S3QoMjIsZSxudWxsLHQpLGUubGFuZXM9MCxlfWZ1bmN0aW9uIFdjKGUsdCxuKXtyZXR1cm4gQmEodCxlLmNoaWxkLG51bGwsbiksZT1XZCh0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuKSxlLmZsYWdzfD0yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gQ04oZSx0LG4sbCxyLGMsaCxTKXtpZihuKXJldHVybiB0LmZsYWdzJjI1Nj8oSmwodCksdC5mbGFncyY9LTI1NyxXYyhlLHQsUykpOnQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KFdsKCksdC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCxudWxsKTooV2woKSxjPXIuZmFsbGJhY2ssaD10Lm1vZGUscj1KYyh7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ci5jaGlsZHJlbn0saCksYz1OYShjLGgsUyxudWxsKSxjLmZsYWdzfD0yLHIucmV0dXJuPXQsYy5yZXR1cm49dCxyLnNpYmxpbmc9Yyx0LmNoaWxkPXIsQmEodCxlLmNoaWxkLG51bGwsUykscj10LmNoaWxkLHIubWVtb2l6ZWRTdGF0ZT0kZChTKSxyLmNoaWxkTGFuZXM9SmQoZSxsLFMpLHQubWVtb2l6ZWRTdGF0ZT1GZCxLcihudWxsLHIpKTtpZihKbCh0KSwkbShjKSl7aWYobD1jLm5leHRTaWJsaW5nJiZjLm5leHRTaWJsaW5nLmRhdGFzZXQsbCl2YXIgXz1sLmRnc3Q7cmV0dXJuIGw9XyxsIT09IiImJihyPUVycm9yKGkoNDE5KSksci5zdGFjaz0iIixyLmRpZ2VzdD1sLGtyKHt2YWx1ZTpyLHNvdXJjZTpudWxsLHN0YWNrOm51bGx9KSksV2MoZSx0LFMpfWlmKG10fHxNYShlLHQsUywhMSksbD0oUyZlLmNoaWxkTGFuZXMpIT09MCxtdHx8bCl7aWYoJGwuY3VycmVudCE9PW51bGwpcmV0dXJuIFdjKGUsdCxTKTtpZihsPSRlLGwhPT1udWxsJiYocj1aeShsLFMpLHIhPT0wJiZyIT09aC5yZXRyeUxhbmUpKXRocm93IGgucmV0cnlMYW5lPXIsQWEoZSxyKSwkdChsLGUsciksUWQ7cmV0dXJuIEZtKGMpfHxndSgpLFdjKGUsdCxTKX1yZXR1cm4gRm0oYyk/KHQuZmxhZ3N8PTE5Mix0LmNoaWxkPWUuY2hpbGQsbnVsbCk6KGU9aC50cmVlQ29udGV4dCxKZT1UbihjLm5leHRTaWJsaW5nKSx4dD10LE5lPSEwLFlsPW51bGwsU249ITEsZSE9PW51bGwmJlpiKHQsZSksdD1XZCh0LHIuY2hpbGRyZW4pLHQuZmxhZ3N8PTEzNDIyMTgyNCx0KX1mdW5jdGlvbiBoeChlLHQsbil7ZS5sYW5lc3w9dDt2YXIgbD1lLmFsdGVybmF0ZTtsIT09bnVsbCYmKGwubGFuZXN8PXQpLERjKGUucmV0dXJuLHQsbil9ZnVuY3Rpb24gcHgoZSl7Zm9yKHZhciB0PW51bGw7ZSE9PW51bGw7KXt2YXIgbj1lLmFsdGVybmF0ZTtuIT09bnVsbCYmSWMobik9PT1udWxsJiYodD1lKSxlPWUuc2libGluZ31yZXR1cm4gdH1mdW5jdGlvbiBldShlLHQsbixsLHIsYyl7dmFyIGg9ZS5tZW1vaXplZFN0YXRlO2g9PT1udWxsP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OmwsdGFpbDpuLHRhaWxNb2RlOnIsdHJlZUZvcmtDb3VudDpjfTooaC5pc0JhY2t3YXJkcz10LGgucmVuZGVyaW5nPW51bGwsaC5yZW5kZXJpbmdTdGFydFRpbWU9MCxoLmxhc3Q9bCxoLnRhaWw9bixoLnRhaWxNb2RlPXIsaC50cmVlRm9ya0NvdW50PWMpfWZ1bmN0aW9uIGVtKGUpe3ZhciB0PWUuY2hpbGQ7Zm9yKGUuY2hpbGQ9bnVsbDt0IT09bnVsbDspe3ZhciBuPXQuc2libGluZzt0LnNpYmxpbmc9ZS5jaGlsZCxlLmNoaWxkPXQsdD1ufX1mdW5jdGlvbiB0bShlLHQsbil7dmFyIGw9dC5wZW5kaW5nUHJvcHMscj1sLnJldmVhbE9yZGVyLGM9bC50YWlsO2w9bC5jaGlsZHJlbjt2YXIgaD1BdC5jdXJyZW50O2lmKHQuZmxhZ3MmMTI4KXJldHVybiBWcih0LGgpLG51bGw7dmFyIFM9KGgmMikhPT0wO2lmKFM/KGg9aCYxfDIsdC5mbGFnc3w9MTI4KTpoJj0xLFZyKHQsaCkscj09PSJiYWNrd2FyZHMiJiZlIT09bnVsbD8oZW0oZSkseXQoZSx0LGwsbiksZW0oZSkpOnl0KGUsdCxsLG4pLGw9TmU/enI6MCwhUyYmZSE9PW51bGwmJihlLmZsYWdzJjEyOCkhPT0wKWU6Zm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MTMpZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmaHgoZSxuLHQpO2Vsc2UgaWYoZS50YWc9PT0xOSloeChlLG4sdCk7ZWxzZSBpZihlLmNoaWxkIT09bnVsbCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PXQpYnJlYWsgZTtmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31zd2l0Y2gocil7Y2FzZSJiYWNrd2FyZHMiOm49cHgodC5jaGlsZCksbj09PW51bGw/KHI9dC5jaGlsZCx0LmNoaWxkPW51bGwpOihyPW4uc2libGluZyxuLnNpYmxpbmc9bnVsbCxlbSh0KSksZXUodCwhMCxyLG51bGwsYyxsKTticmVhaztjYXNlInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHMiOmZvcihuPW51bGwscj10LmNoaWxkLHQuY2hpbGQ9bnVsbDtyIT09bnVsbDspe2lmKGU9ci5hbHRlcm5hdGUsZSE9PW51bGwmJkljKGUpPT09bnVsbCl7dC5jaGlsZD1yO2JyZWFrfWU9ci5zaWJsaW5nLHIuc2libGluZz1uLG49cixyPWV9ZXUodCwhMCxuLG51bGwsYyxsKTticmVhaztjYXNlInRvZ2V0aGVyIjpldSh0LCExLG51bGwsbnVsbCx2b2lkIDAsbCk7YnJlYWs7Y2FzZSJpbmRlcGVuZGVudCI6dC5tZW1vaXplZFN0YXRlPW51bGw7YnJlYWs7ZGVmYXVsdDpuPXB4KHQuY2hpbGQpLG49PT1udWxsPyhyPXQuY2hpbGQsdC5jaGlsZD1udWxsKToocj1uLnNpYmxpbmcsbi5zaWJsaW5nPW51bGwpLGV1KHQsITEscixuLGMsbCl9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24gdngoZSx0LG4pe3ZhciBsPXQucGVuZGluZ1Byb3BzO3JldHVybiBYbCh0LHQudHlwZSxsLnZhbHVlKSx5dChlLHQsbC5jaGlsZHJlbixuKSx0LmNoaWxkfWZ1bmN0aW9uIHdsKGUsdCxuKXtpZihlIT09bnVsbCYmKHQuZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKSxsYXw9dC5sYW5lcywobiZ0LmNoaWxkTGFuZXMpPT09MClpZihlIT09bnVsbCl7aWYoTWEoZSx0LG4sITEpLChuJnQuY2hpbGRMYW5lcyk9PT0wKXJldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGw7aWYoZSE9PW51bGwmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKGkoMTUzKSk7aWYodC5jaGlsZCE9PW51bGwpe2ZvcihlPXQuY2hpbGQsbj15bChlLGUucGVuZGluZ1Byb3BzKSx0LmNoaWxkPW4sbi5yZXR1cm49dDtlLnNpYmxpbmchPT1udWxsOyllPWUuc2libGluZyxuPW4uc2libGluZz15bChlLGUucGVuZGluZ1Byb3BzKSxuLnJldHVybj10O24uc2libGluZz1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIG5tKGUsdCl7cmV0dXJuKGUubGFuZXMmdCkhPT0wPyEwOihlPWUuZGVwZW5kZW5jaWVzLCEhKGUhPT1udWxsJiZqYyhlKSkpfWZ1bmN0aW9uIFROKGUsdCxuKXtzd2l0Y2godC50YWcpe2Nhc2UgMzpvYyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFhsKHQsZnQsZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxEYSgpO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OkFmKHQpO2JyZWFrO2Nhc2UgNDpvYyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6WGwodCx0LnR5cGUsdC5tZW1vaXplZFByb3BzLnZhbHVlKTticmVhaztjYXNlIDMxOmlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpcmV0dXJuIHQuZmxhZ3N8PTEyOCxfZCh0KSxudWxsO2JyZWFrO2Nhc2UgMTM6dmFyIGw9dC5tZW1vaXplZFN0YXRlO2lmKGwhPT1udWxsKXtpZihsLmRlaHlkcmF0ZWQhPT1udWxsKXJldHVybiBKbCh0KSx0LmZsYWdzfD0xMjgsbnVsbDtsPU1hKGUsdCxuLCExKTt2YXIgcj10LmNoaWxkLmNoaWxkTGFuZXM7cmV0dXJuIGx8fChuJnIpIT09MD9teChlLHQsbik6KEpsKHQpLGU9d2woZSx0LG4pLGUhPT1udWxsP2Uuc2libGluZzpudWxsKX1KbCh0KTticmVhaztjYXNlIDE5OmlmKHQuZmxhZ3MmMTI4KXJldHVybiB0bShlLHQsbik7aWYocj0oZS5mbGFncyYxMjgpIT09MCxsPShuJnQuY2hpbGRMYW5lcykhPT0wLGx8fChNYShlLHQsbiwhMSksbD0obiZ0LmNoaWxkTGFuZXMpIT09MCkscil7aWYobClyZXR1cm4gdG0oZSx0LG4pO3QuZmxhZ3N8PTEyOH1pZihyPXQubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbCYmKHIucmVuZGVyaW5nPW51bGwsci50YWlsPW51bGwsci5sYXN0RWZmZWN0PW51bGwpLFZyKHQsQXQuY3VycmVudCksbClicmVhaztyZXR1cm4gbnVsbDtjYXNlIDIyOnJldHVybiB0LmxhbmVzPTAsaXgoZSx0LG4sdC5wZW5kaW5nUHJvcHMpO2Nhc2UgMjQ6WGwodCxmdCxlLm1lbW9pemVkU3RhdGUuY2FjaGUpfXJldHVybiB3bChlLHQsbil9ZnVuY3Rpb24gZ3goZSx0LG4pe2lmKGUhPT1udWxsKWlmKGUubWVtb2l6ZWRQcm9wcyE9PXQucGVuZGluZ1Byb3BzKW10PSEwO2Vsc2V7aWYoIW5tKGUsbikmJih0LmZsYWdzJjEyOCk9PT0wKXJldHVybiBtdD0hMSxUTihlLHQsbik7bXQ9KGUuZmxhZ3MmMTMxMDcyKSE9PTB9ZWxzZSBtdD0hMSxOZSYmKHQuZmxhZ3MmMTA0ODU3NikhPT0wJiZRYih0LHpyLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMTY6ZTp7dmFyIGw9dC5wZW5kaW5nUHJvcHM7aWYoZT1VYSh0LmVsZW1lbnRUeXBlKSx0LnR5cGU9ZSx0eXBlb2YgZT09ImZ1bmN0aW9uIil1ZChlKT8obD1QYShlLGwpLHQudGFnPTEsdD1meChudWxsLHQsZSxsLG4pKToodC50YWc9MCx0PVpkKG51bGwsdCxlLGwsbikpO2Vsc2V7aWYoZSE9bnVsbCl7dmFyIHI9ZS4kJHR5cGVvZjtpZihyPT09UCl7dC50YWc9MTEsdD1heChudWxsLHQsZSxsLG4pO2JyZWFrIGV9ZWxzZSBpZihyPT09cmUpe3QudGFnPTE0LHQ9b3gobnVsbCx0LGUsbCxuKTticmVhayBlfWVsc2UgaWYocj09PWhlKXt0LnRhZz0xMCx0LnR5cGU9ZSx0PXZ4KG51bGwsdCxuKTticmVhayBlfX10aHJvdyB0PXNlKGUpfHxlLEVycm9yKGkoMzA2LHQsIiIpKX19cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiBaZChlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTpyZXR1cm4gbD10LnR5cGUscj1QYShsLHQucGVuZGluZ1Byb3BzKSxmeChlLHQsbCxyLG4pO2Nhc2UgMzplOntpZihvYyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGU9PT1udWxsKXRocm93IEVycm9yKGkoMzg3KSk7bD10LnBlbmRpbmdQcm9wczt2YXIgYz10Lm1lbW9pemVkU3RhdGU7cj1jLmVsZW1lbnQsQ2QoZSx0KSxHcih0LGwsbnVsbCxuKTt2YXIgaD10Lm1lbW9pemVkU3RhdGU7aWYobD1oLmNhY2hlLFhsKHQsZnQsbCksbCE9PWMuY2FjaGUmJnZkKHQsW2Z0XSxuLCEwKSxQcigpLGw9aC5lbGVtZW50LGMuaXNEZWh5ZHJhdGVkKWlmKGM9e2VsZW1lbnQ6bCxpc0RlaHlkcmF0ZWQ6ITEsY2FjaGU6aC5jYWNoZX0sdC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9Yyx0Lm1lbW9pemVkU3RhdGU9Yyx0LmZsYWdzJjI1Nil7dD1keChlLHQsbCxuKTticmVhayBlfWVsc2UgaWYobCE9PXIpe3I9eW4oRXJyb3IoaSg0MjQpKSx0KSxrcihyKSx0PWR4KGUsdCxsLG4pO2JyZWFrIGV9ZWxzZSBmb3IoZT10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGUubm9kZVR5cGU9PT05P2U9ZS5ib2R5OmU9ZS5ub2RlTmFtZT09PSJIVE1MIj9lLm93bmVyRG9jdW1lbnQuYm9keTplLEplPVRuKGUuZmlyc3RDaGlsZCkseHQ9dCxOZT0hMCxZbD1udWxsLFNuPSEwLG49aTAodCxudWxsLGwsbiksdC5jaGlsZD1uO247KW4uZmxhZ3M9bi5mbGFncyYtM3wxMzQyMjE4MjQsbj1uLnNpYmxpbmc7ZWxzZXtpZihEYSgpLGw9PT1yKXt0PXdsKGUsdCxuKTticmVhayBlfXl0KGUsdCxsLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDI2OnJldHVybiB6byhlLHQpLGU9PT1udWxsPyhuPUdTKHQudHlwZSxudWxsLHQucGVuZGluZ1Byb3BzLG51bGwpKT90Lm1lbW9pemVkU3RhdGU9bjpOZXx8KHQuc3RhdGVOb2RlPVNTKHQudHlwZSx0LnBlbmRpbmdQcm9wcyxIbC5jdXJyZW50LHQpKTp0Lm1lbW9pemVkU3RhdGU9R1ModC50eXBlLGUubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxlLm1lbW9pemVkU3RhdGUpLG51bGw7Y2FzZSAyNzpyZXR1cm4gQWYodCksZT09PW51bGwmJk5lJiYobD10LnN0YXRlTm9kZT1IUyh0LnR5cGUsdC5wZW5kaW5nUHJvcHMsSGwuY3VycmVudCkseHQ9dCxTbj0hMCxyPUplLGlhKHQudHlwZSk/KEptPXIsSmU9VG4obC5maXJzdENoaWxkKSk6SmU9cikseXQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHpvKGUsdCksZT09PW51bGwmJih0LmZsYWdzfD00MTk0MzA0KSx0LmNoaWxkO2Nhc2UgNTpyZXR1cm4gZT09PW51bGwmJk5lJiYoKHI9bD1KZSkmJihsPWdEKGwsdC50eXBlLHQucGVuZGluZ1Byb3BzLFNuKSxsIT09bnVsbD8odC5zdGF0ZU5vZGU9bCx4dD10LEplPVRuKGwuZmlyc3RDaGlsZCksU249ITEscj0hMCk6cj0hMSkscnx8cWwodCkpLEFmKHQpLHI9dC50eXBlLGM9dC5wZW5kaW5nUHJvcHMsaD1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxsPWMuY2hpbGRyZW4sVm0ocixjKT9sPW51bGw6aCE9PW51bGwmJlZtKHIsaCkmJih0LmZsYWdzfD0zMiksdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmKHI9TmQoZSx0LGROLG51bGwsbnVsbCxuKSxKby5fY3VycmVudFZhbHVlPXIpLHpvKGUsdCkseXQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDY6cmV0dXJuIGU9PT1udWxsJiZOZSYmKChlPW49SmUpJiYobj15RChuLHQucGVuZGluZ1Byb3BzLFNuKSxuIT09bnVsbD8odC5zdGF0ZU5vZGU9bix4dD10LEplPW51bGwsZT0hMCk6ZT0hMSksZXx8cWwodCkpLG51bGw7Y2FzZSAxMzpyZXR1cm4gbXgoZSx0LG4pO2Nhc2UgNDpyZXR1cm4gb2ModCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsPXQucGVuZGluZ1Byb3BzLGU9PT1udWxsP3QuY2hpbGQ9QmEodCxudWxsLGwsbik6eXQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiBheChlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgNzpyZXR1cm4gbD10LnBlbmRpbmdQcm9wcyx6byhlLHQpLHl0KGUsdCxsLG4pLHQuY2hpbGQ7Y2FzZSA4OnJldHVybiB5dChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEyOnJldHVybiB5dChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEwOnJldHVybiB2eChlLHQsbik7Y2FzZSA5OnJldHVybiByPXQudHlwZS5fY29udGV4dCxsPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHphKHQpLHI9X3QociksbD1sKHIpLHQuZmxhZ3N8PTEseXQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDE0OnJldHVybiBveChlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTU6cmV0dXJuIHJ4KGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsbik7Y2FzZSAxOTpyZXR1cm4gdG0oZSx0LG4pO2Nhc2UgMzE6cmV0dXJuIFNOKGUsdCxuKTtjYXNlIDIyOnJldHVybiBpeChlLHQsbix0LnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpyZXR1cm4gemEodCksbD1fdChmdCksZT09PW51bGw/KHI9YmQoKSxyPT09bnVsbCYmKHI9JGUsYz1nZCgpLHIucG9vbGVkQ2FjaGU9YyxjLnJlZkNvdW50KyssYyE9PW51bGwmJihyLnBvb2xlZENhY2hlTGFuZXN8PW4pLHI9YyksdC5tZW1vaXplZFN0YXRlPXtwYXJlbnQ6bCxjYWNoZTpyfSxTZCh0KSxYbCh0LGZ0LHIpKTooKGUubGFuZXMmbikhPT0wJiYoQ2QoZSx0KSxHcih0LG51bGwsbnVsbCxuKSxQcigpKSxyPWUubWVtb2l6ZWRTdGF0ZSxjPXQubWVtb2l6ZWRTdGF0ZSxyLnBhcmVudCE9PWw/KHI9e3BhcmVudDpsLGNhY2hlOmx9LHQubWVtb2l6ZWRTdGF0ZT1yLHQubGFuZXM9PT0wJiYodC5tZW1vaXplZFN0YXRlPXQudXBkYXRlUXVldWUuYmFzZVN0YXRlPXIpLFhsKHQsZnQsbCkpOihsPWMuY2FjaGUsWGwodCxmdCxsKSxsIT09ci5jYWNoZSYmdmQodCxbZnRdLG4sITApKSkseXQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAzMDpyZXR1cm4gdC5zdGF0ZU5vZGU9PT1udWxsJiYodC5zdGF0ZU5vZGU9e2F1dG9OYW1lOm51bGwscGFpcmVkOm51bGwsY2xvbmVzOm51bGwscmVmOm51bGx9KSxsPXQucGVuZGluZ1Byb3BzLGwubmFtZSE9bnVsbCYmbC5uYW1lIT09ImF1dG8iP3QuZmxhZ3N8PWU9PT1udWxsPzE4ODgyNTYwOjE4ODc0MzY4Ok5lJiZBYyh0KSxlIT09bnVsbCYmZS5tZW1vaXplZFByb3BzLm5hbWUhPT1sLm5hbWU/dC5mbGFnc3w9NDE5NDgxNjp6byhlLHQpLHl0KGUsdCxsLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAyOTp0aHJvdyB0LnBlbmRpbmdQcm9wc310aHJvdyBFcnJvcihpKDE1Nix0LnRhZykpfWZ1bmN0aW9uIEVsKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gbG0oZSx0LG4sbCxyKXt2YXIgYztpZigoYz0oZS5tb2RlJjMyKSE9PTApJiYoYz1uPT09bnVsbD9YUyh0LGwpOlhTKHQsbCkmJihsLnNyYyE9PW4uc3JjfHxsLnNyY1NldCE9PW4uc3JjU2V0KSksYyl7aWYoZS5mbGFnc3w9MTY3NzcyMTYsKHImMzM1NTQ0MTI4KT09PXIpaWYoZS5zdGF0ZU5vZGUuY29tcGxldGUpZS5mbGFnc3w9ODE5MjtlbHNlIGlmKEp4KCkpZS5mbGFnc3w9ODE5MjtlbHNlIHRocm93IEhhPUxjLHhkfWVsc2UgZS5mbGFncyY9LTE2Nzc3MjE3fWZ1bmN0aW9uIHl4KGUsdCl7aWYodC50eXBlIT09InN0eWxlc2hlZXQifHwodC5zdGF0ZS5sb2FkaW5nJjQpIT09MCllLmZsYWdzJj0tMTY3NzcyMTc7ZWxzZSBpZihlLmZsYWdzfD0xNjc3NzIxNiwhS1ModCkpaWYoSngoKSllLmZsYWdzfD04MTkyO2Vsc2UgdGhyb3cgSGE9TGMseGR9ZnVuY3Rpb24gdHUoZSx0KXt0IT09bnVsbCYmKGUuZmxhZ3N8PTQpLGUuZmxhZ3MmMTYzODQmJih0PWUudGFnIT09MjI/WHkoKTo1MzY4NzA5MTIsZS5sYW5lc3w9dCxCb3w9dCl9ZnVuY3Rpb24gUXIoZSx0KXtpZighTmUpc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2UidmlzaWJsZSI6YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOmZvcih2YXIgbj1lLnRhaWwsbD1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihsPW4pLG49bi5zaWJsaW5nO2w9PT1udWxsP3R8fGUudGFpbD09PW51bGw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpsLnNpYmxpbmc9bnVsbDticmVhaztkZWZhdWx0OmZvcih0PWUudGFpbCxuPW51bGw7dCE9PW51bGw7KXQuYWx0ZXJuYXRlIT09bnVsbCYmKG49dCksdD10LnNpYmxpbmc7bj09PW51bGw/ZS50YWlsPW51bGw6bi5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIFdlKGUpe3ZhciB0PWUuYWx0ZXJuYXRlIT09bnVsbCYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLG49MCxsPTA7aWYodClmb3IodmFyIHI9ZS5jaGlsZDtyIT09bnVsbDspbnw9ci5sYW5lc3xyLmNoaWxkTGFuZXMsbHw9ci5zdWJ0cmVlRmxhZ3MmMTIwNjkxMDk3NixsfD1yLmZsYWdzJjEyMDY5MTA5NzYsci5yZXR1cm49ZSxyPXIuc2libGluZztlbHNlIGZvcihyPWUuY2hpbGQ7ciE9PW51bGw7KW58PXIubGFuZXN8ci5jaGlsZExhbmVzLGx8PXIuc3VidHJlZUZsYWdzLGx8PXIuZmxhZ3Msci5yZXR1cm49ZSxyPXIuc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PWwsZS5jaGlsZExhbmVzPW4sdH1mdW5jdGlvbiB3TihlLHQsbil7dmFyIGw9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKGRkKHQpLHQudGFnKXtjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBXZSh0KSxudWxsO2Nhc2UgMTpyZXR1cm4gV2UodCksbnVsbDtjYXNlIDM6cmV0dXJuIG49dC5zdGF0ZU5vZGUsbD1udWxsLGUhPT1udWxsJiYobD1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PWwmJih0LmZsYWdzfD0yMDQ4KSxTbChmdCksc28oKSxuLnBlbmRpbmdDb250ZXh0JiYobi5jb250ZXh0PW4ucGVuZGluZ0NvbnRleHQsbi5wZW5kaW5nQ29udGV4dD1udWxsKSwoZT09PW51bGx8fGUuY2hpbGQ9PT1udWxsKSYmKF9vKHQpP0VsKHQpOmU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYodC5mbGFncyYyNTYpPT09MHx8KHQuZmxhZ3N8PTEwMjQsaGQoKSkpLFdlKHQpLG51bGw7Y2FzZSAyNjp2YXIgcj10LnR5cGUsYz10Lm1lbW9pemVkU3RhdGU7cmV0dXJuIGU9PT1udWxsPyhFbCh0KSxjIT09bnVsbD8oV2UodCkseXgodCxjKSk6KFdlKHQpLGxtKHQscixudWxsLGwsbikpKTpjP2MhPT1lLm1lbW9pemVkU3RhdGU/KEVsKHQpLFdlKHQpLHl4KHQsYykpOihXZSh0KSx0LmZsYWdzJj0tMTY3NzcyMTcpOihlPWUubWVtb2l6ZWRQcm9wcyxlIT09bCYmRWwodCksV2UodCksbG0odCxyLGUsbCxuKSksbnVsbDtjYXNlIDI3OmlmKHJjKHQpLG49SGwuY3VycmVudCxyPXQudHlwZSxlIT09bnVsbCYmdC5zdGF0ZU5vZGUhPW51bGwpZS5tZW1vaXplZFByb3BzIT09bCYmRWwodCk7ZWxzZXtpZighbCl7aWYodC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKGkoMTY2KSk7cmV0dXJuIFdlKHQpLHQuc3VidHJlZUZsYWdzJj0tMzM1NTQ0MzMsbnVsbH1lPVBuLmN1cnJlbnQsX28odCk/RmIodCk6KGU9SFMocixsLG4pLHQuc3RhdGVOb2RlPWUsRWwodCkpfXJldHVybiBXZSh0KSx0LnN1YnRyZWVGbGFncyY9LTMzNTU0NDMzLG51bGw7Y2FzZSA1OmlmKHJjKHQpLHI9dC50eXBlLGUhPT1udWxsJiZ0LnN0YXRlTm9kZSE9bnVsbCllLm1lbW9pemVkUHJvcHMhPT1sJiZFbCh0KTtlbHNle2lmKCFsKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoaSgxNjYpKTtyZXR1cm4gV2UodCksdC5zdWJ0cmVlRmxhZ3MmPS0zMzU1NDQzMyxudWxsfWlmKGM9UG4uY3VycmVudCxfbyh0KSlGYih0KTtlbHNle3ZhciBoPW9pKEhsLmN1cnJlbnQpO3N3aXRjaChjKXtjYXNlIDE6Yz1oLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIpO2JyZWFrO2Nhc2UgMjpjPWguY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixyKTticmVhaztkZWZhdWx0OnN3aXRjaChyKXtjYXNlInN2ZyI6Yz1oLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIpO2JyZWFrO2Nhc2UibWF0aCI6Yz1oLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIscik7YnJlYWs7Y2FzZSJzY3JpcHQiOmM9aC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmlubmVySFRNTD0iPHNjcmlwdD48XC9zY3JpcHQ+IixjPWMucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKTticmVhaztjYXNlInNlbGVjdCI6Yz10eXBlb2YgbC5pcz09InN0cmluZyI/aC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLHtpczpsLmlzfSk6aC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxsLm11bHRpcGxlP2MubXVsdGlwbGU9ITA6bC5zaXplJiYoYy5zaXplPWwuc2l6ZSk7YnJlYWs7ZGVmYXVsdDpjPXR5cGVvZiBsLmlzPT0ic3RyaW5nIj9oLmNyZWF0ZUVsZW1lbnQocix7aXM6bC5pc30pOmguY3JlYXRlRWxlbWVudChyKX19Y1tSdF09dCxjW1h0XT1sO2U6Zm9yKGg9dC5jaGlsZDtoIT09bnVsbDspe2lmKGgudGFnPT09NXx8aC50YWc9PT02KWMuYXBwZW5kQ2hpbGQoaC5zdGF0ZU5vZGUpO2Vsc2UgaWYoaC50YWchPT00JiZoLnRhZyE9PTI3JiZoLmNoaWxkIT09bnVsbCl7aC5jaGlsZC5yZXR1cm49aCxoPWguY2hpbGQ7Y29udGludWV9aWYoaD09PXQpYnJlYWsgZTtmb3IoO2guc2libGluZz09PW51bGw7KXtpZihoLnJldHVybj09PW51bGx8fGgucmV0dXJuPT09dClicmVhayBlO2g9aC5yZXR1cm59aC5zaWJsaW5nLnJldHVybj1oLnJldHVybixoPWguc2libGluZ310LnN0YXRlTm9kZT1jO2U6c3dpdGNoKER0KGMscixsKSxyKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOmw9ISFsLmF1dG9Gb2N1czticmVhayBlO2Nhc2UiaW1nIjpsPSEwO2JyZWFrIGU7ZGVmYXVsdDpsPSExfWwmJkVsKHQpfX1yZXR1cm4gV2UodCksdC5zdWJ0cmVlRmxhZ3MmPS0zMzU1NDQzMyxsbSh0LHQudHlwZSxlPT09bnVsbD9udWxsOmUubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxuKSxudWxsO2Nhc2UgNjppZihlJiZ0LnN0YXRlTm9kZSE9bnVsbCllLm1lbW9pemVkUHJvcHMhPT1sJiZFbCh0KTtlbHNle2lmKHR5cGVvZiBsIT0ic3RyaW5nIiYmdC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKGkoMTY2KSk7aWYoZT1IbC5jdXJyZW50LF9vKHQpKXtpZihlPXQuc3RhdGVOb2RlLG49dC5tZW1vaXplZFByb3BzLGw9bnVsbCxyPXh0LHIhPT1udWxsKXN3aXRjaChyLnRhZyl7Y2FzZSAyNzpjYXNlIDU6bD1yLm1lbW9pemVkUHJvcHN9ZVtSdF09dCxlPSEhKGUubm9kZVZhbHVlPT09bnx8bCE9PW51bGwmJmwuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nPT09ITB8fGdTKGUubm9kZVZhbHVlLG4pKSxlfHxxbCh0LCEwKX1lbHNlIGU9b2koZSkuY3JlYXRlVGV4dE5vZGUobCksZVtSdF09dCx0LnN0YXRlTm9kZT1lfXJldHVybiBXZSh0KSxudWxsO2Nhc2UgMzE6aWYobj10Lm1lbW9pemVkU3RhdGUsZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2lmKGw9X28odCksbiE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighbCl0aHJvdyBFcnJvcihpKDMxOCkpO2lmKGU9dC5tZW1vaXplZFN0YXRlLGU9ZSE9PW51bGw/ZS5kZWh5ZHJhdGVkOm51bGwsIWUpdGhyb3cgRXJyb3IoaSg1NTcpKTtlW1J0XT10fWVsc2UgRGEoKSwodC5mbGFncyYxMjgpPT09MCYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O1dlKHQpLGU9ITF9ZWxzZSBuPWhkKCksZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPW4pLGU9ITA7aWYoIWUpcmV0dXJuIHQuZmxhZ3MmMjU2Pyhvbih0KSx0KToob24odCksbnVsbCk7aWYoKHQuZmxhZ3MmMTI4KSE9PTApdGhyb3cgRXJyb3IoaSg1NTgpKX1yZXR1cm4gV2UodCksbnVsbDtjYXNlIDEzOmlmKGw9dC5tZW1vaXplZFN0YXRlLGU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHI9X28odCksbCE9PW51bGwmJmwuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighcil0aHJvdyBFcnJvcihpKDMxOCkpO2lmKHI9dC5tZW1vaXplZFN0YXRlLHI9ciE9PW51bGw/ci5kZWh5ZHJhdGVkOm51bGwsIXIpdGhyb3cgRXJyb3IoaSgzMTcpKTtyW1J0XT10fWVsc2UgRGEoKSwodC5mbGFncyYxMjgpPT09MCYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O1dlKHQpLHI9ITF9ZWxzZSByPWhkKCksZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPXIpLHI9ITA7aWYoIXIpcmV0dXJuIHQuZmxhZ3MmMjU2Pyhvbih0KSx0KToob24odCksbnVsbCl9cmV0dXJuIG9uKHQpLCh0LmZsYWdzJjEyOCkhPT0wPyh0LmxhbmVzPW4sdCk6KG49bCE9PW51bGwsZT1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCxuJiYobD10LmNoaWxkLHI9bnVsbCxsLmFsdGVybmF0ZSE9PW51bGwmJmwuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZsLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihyPWwuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGM9bnVsbCxsLm1lbW9pemVkU3RhdGUhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKGM9bC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxjIT09ciYmKGwuZmxhZ3N8PTIwNDgpKSxuIT09ZSYmbiYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLHR1KHQsdC51cGRhdGVRdWV1ZSksV2UodCksbnVsbCk7Y2FzZSA0OnJldHVybiBzbygpLGU9PT1udWxsJiZIbSh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSx0LmZsYWdzfD02NzEwODg2NCxXZSh0KSxudWxsO2Nhc2UgMTA6cmV0dXJuIFNsKHQudHlwZSksV2UodCksbnVsbDtjYXNlIDE5OmlmKE9kKHQpLGw9dC5tZW1vaXplZFN0YXRlLGw9PT1udWxsKXJldHVybiBXZSh0KSxudWxsO2lmKHI9KHQuZmxhZ3MmMTI4KSE9PTAsYz1sLnJlbmRlcmluZyxjPT09bnVsbClpZihyKVFyKGwsITEpO2Vsc2V7aWYoYXQhPT0wfHxlIT09bnVsbCYmKGUuZmxhZ3MmMTI4KSE9PTApZm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGM9SWMoZSksYyE9PW51bGwpe2Zvcih0LmZsYWdzfD0xMjgsUXIobCwhMSksZT1jLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSx0dSh0LGUpLHQuc3VidHJlZUZsYWdzPTAsZT1uLG49dC5jaGlsZDtuIT09bnVsbDspcWIobixlKSxuPW4uc2libGluZztyZXR1cm4gVnIodCxBdC5jdXJyZW50JjF8MiksTmUmJmJsKHQsbC50cmVlRm9ya0NvdW50KSx0LmNoaWxkfWU9ZS5zaWJsaW5nfWwudGFpbCE9PW51bGwmJmVuKCk+bXUmJih0LmZsYWdzfD0xMjgscj0hMCxRcihsLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYoZT1JYyhjKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LHI9ITAsZT1lLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSx0dSh0LGUpLFFyKGwsITApLGwudGFpbD09PW51bGwmJmwudGFpbE1vZGUhPT0iY29sbGFwc2VkIiYmbC50YWlsTW9kZSE9PSJ2aXNpYmxlIiYmIWMuYWx0ZXJuYXRlJiYhTmUpcmV0dXJuIFdlKHQpLG51bGx9ZWxzZSAyKmVuKCktbC5yZW5kZXJpbmdTdGFydFRpbWU+bXUmJm4hPT01MzY4NzA5MTImJih0LmZsYWdzfD0xMjgscj0hMCxRcihsLCExKSx0LmxhbmVzPTQxOTQzMDQpO2wuaXNCYWNrd2FyZHM/KGMuc2libGluZz10LmNoaWxkLHQuY2hpbGQ9Yyk6KGU9bC5sYXN0LGUhPT1udWxsP2Uuc2libGluZz1jOnQuY2hpbGQ9YyxsLmxhc3Q9Yyl9aWYobC50YWlsIT09bnVsbCl7ZT1sLnRhaWw7ZTp7Zm9yKG49ZTtuIT09bnVsbDspe2lmKG4uYWx0ZXJuYXRlIT09bnVsbCl7bj0hMTticmVhayBlfW49bi5zaWJsaW5nfW49ITB9cmV0dXJuIGwucmVuZGVyaW5nPWUsbC50YWlsPWUuc2libGluZyxsLnJlbmRlcmluZ1N0YXJ0VGltZT1lbigpLGUuc2libGluZz1udWxsLGM9QXQuY3VycmVudCxjPXI/YyYxfDI6YyYxLGwudGFpbE1vZGU9PT0idmlzaWJsZSJ8fGwudGFpbE1vZGU9PT0iY29sbGFwc2VkInx8IW58fE5lP1ZyKHQsYyk6KG49YyxQZShPdCx0KSxQZShBdCxuKSxrdD09PW51bGwmJihrdD10KSksTmUmJmJsKHQsbC50cmVlRm9ya0NvdW50KSxlfXJldHVybiBXZSh0KSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gb24odCksUmQoKSxsPXQubWVtb2l6ZWRTdGF0ZSE9PW51bGwsZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9PWwmJih0LmZsYWdzfD04MTkyKTpsJiYodC5mbGFnc3w9ODE5MiksbD8obiY1MzY4NzA5MTIpIT09MCYmKHQuZmxhZ3MmMTI4KT09PTAmJihXZSh0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOldlKHQpLG49dC51cGRhdGVRdWV1ZSxuIT09bnVsbCYmdHUodCxuLnJldHJ5UXVldWUpLG49bnVsbCxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihuPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksbD1udWxsLHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2whPT1udWxsJiYobD10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGwhPT1uJiYodC5mbGFnc3w9MjA0OCksZSE9PW51bGwmJml0KExhKSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG49bnVsbCxlIT09bnVsbCYmKG49ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSx0Lm1lbW9pemVkU3RhdGUuY2FjaGUhPT1uJiYodC5mbGFnc3w9MjA0OCksU2woZnQpLFdlKHQpLG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbDtjYXNlIDMwOnJldHVybiB0LmZsYWdzfD0zMzU1NDQzMixXZSh0KSxudWxsfXRocm93IEVycm9yKGkoMTU2LHQudGFnKSl9ZnVuY3Rpb24gRU4oZSx0KXtzd2l0Y2goZGQodCksdC50YWcpe2Nhc2UgMTpyZXR1cm4gZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAzOnJldHVybiBTbChmdCksc28oKSxlPXQuZmxhZ3MsKGUmNjU1MzYpIT09MCYmKGUmMTI4KT09PTA/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpyZXR1cm4gcmModCksbnVsbDtjYXNlIDMxOmlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2lmKG9uKHQpLHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihpKDM0MCkpO0RhKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTM6aWYob24odCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihpKDM0MCkpO0RhKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIE9kKHQpLGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCxlPXQubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmKGUucmVuZGVyaW5nPW51bGwsZS50YWlsPW51bGwpLHQuZmxhZ3N8PTQsdCk6bnVsbDtjYXNlIDQ6cmV0dXJuIHNvKCksbnVsbDtjYXNlIDEwOnJldHVybiBTbCh0LnR5cGUpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvbih0KSxSZCgpLGUhPT1udWxsJiZpdChMYSksZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAyNDpyZXR1cm4gU2woZnQpLG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBieChlLHQpe3N3aXRjaChkZCh0KSx0LnRhZyl7Y2FzZSAzOlNsKGZ0KSxzbygpO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmModCk7YnJlYWs7Y2FzZSA0OnNvKCk7YnJlYWs7Y2FzZSAzMTp0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiZvbih0KTticmVhaztjYXNlIDEzOm9uKHQpO2JyZWFrO2Nhc2UgMTk6T2QodCk7YnJlYWs7Y2FzZSAxMDpTbCh0LnR5cGUpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpvbih0KSxSZCgpLGUhPT1udWxsJiZpdChMYSk7YnJlYWs7Y2FzZSAyNDpTbChmdCl9fWZ1bmN0aW9uIFpyKGUsdCl7dHJ5e3ZhciBuPXQudXBkYXRlUXVldWUsbD1uIT09bnVsbD9uLmxhc3RFZmZlY3Q6bnVsbDtpZihsIT09bnVsbCl7dmFyIHI9bC5uZXh0O249cjtkb3tpZigobi50YWcmZSk9PT1lKXtsPXZvaWQgMDt2YXIgYz1uLmNyZWF0ZSxoPW4uaW5zdDtsPWMoKSxoLmRlc3Ryb3k9bH1uPW4ubmV4dH13aGlsZShuIT09cil9fWNhdGNoKFMpe1hlKHQsdC5yZXR1cm4sUyl9fWZ1bmN0aW9uIGVhKGUsdCxuKXt0cnl7dmFyIGw9dC51cGRhdGVRdWV1ZSxyPWwhPT1udWxsP2wubGFzdEVmZmVjdDpudWxsO2lmKHIhPT1udWxsKXt2YXIgYz1yLm5leHQ7bD1jO2Rve2lmKChsLnRhZyZlKT09PWUpe3ZhciBoPWwuaW5zdCxTPWguZGVzdHJveTtpZihTIT09dm9pZCAwKXtoLmRlc3Ryb3k9dm9pZCAwLHI9dDt2YXIgXz1uLEw9Uzt0cnl7TCgpfWNhdGNoKFYpe1hlKHIsXyxWKX19fWw9bC5uZXh0fXdoaWxlKGwhPT1jKX19Y2F0Y2goVil7WGUodCx0LnJldHVybixWKX19ZnVuY3Rpb24geHgoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZih0IT09bnVsbCl7dmFyIG49ZS5zdGF0ZU5vZGU7dHJ5e3UwKHQsbil9Y2F0Y2gobCl7WGUoZSxlLnJldHVybixsKX19fWZ1bmN0aW9uIFN4KGUsdCxuKXtuLnByb3BzPVBhKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpLG4uc3RhdGU9ZS5tZW1vaXplZFN0YXRlO3RyeXtuLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobCl7WGUoZSx0LGwpfX1mdW5jdGlvbiBxbihlLHQpe3RyeXt2YXIgbj1lLnJlZjtpZihuIT09bnVsbCl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnZhciBsPWUuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMzA6dmFyIHI9ZS5zdGF0ZU5vZGUsYz12bChlLm1lbW9pemVkUHJvcHMscik7KHIucmVmPT09bnVsbHx8ci5yZWYubmFtZSE9PWMpJiYoci5yZWY9T1MoYykpLGw9ci5yZWY7YnJlYWs7Y2FzZSA3OmlmKGUuc3RhdGVOb2RlPT09bnVsbCl7dmFyIGg9bmV3IGZuKGUpO2coZS5jaGlsZCwhMSxwRCxoLHZvaWQgMCx2b2lkIDApLGUuc3RhdGVOb2RlPWh9bD1lLnN0YXRlTm9kZTticmVhaztkZWZhdWx0Omw9ZS5zdGF0ZU5vZGV9dHlwZW9mIG49PSJmdW5jdGlvbiI/ZS5yZWZDbGVhbnVwPW4obCk6bi5jdXJyZW50PWx9fWNhdGNoKFMpe1hlKGUsdCxTKX19ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1lLnJlZixsPWUucmVmQ2xlYW51cDtpZihuIT09bnVsbClpZih0eXBlb2YgbD09ImZ1bmN0aW9uIil0cnl7bCgpfWNhdGNoKHIpe1hlKGUsdCxyKX1maW5hbGx5e2UucmVmQ2xlYW51cD1udWxsLGU9ZS5hbHRlcm5hdGUsZSE9bnVsbCYmKGUucmVmQ2xlYW51cD1udWxsKX1lbHNlIGlmKHR5cGVvZiBuPT0iZnVuY3Rpb24iKXRyeXtuKG51bGwpfWNhdGNoKHIpe1hlKGUsdCxyKX1lbHNlIG4uY3VycmVudD1udWxsfWZ1bmN0aW9uIG51KGUsdCl7aWYoKGUudGFnPT09NXx8ZS50YWc9PT0yN3x8ZS50YWc9PT02KSYmZS5hbHRlcm5hdGU9PT1udWxsJiZ0IT09bnVsbClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl6UyhlLnN0YXRlTm9kZSx0W25dKX1mdW5jdGlvbiBDeChlKXtmb3IodmFyIHQ9ZS5yZXR1cm47dCE9PW51bGwmJihvbSh0KSYmelMoZS5zdGF0ZU5vZGUsdC5zdGF0ZU5vZGUpLCFhbSh0KSk7KXQ9dC5yZXR1cm59ZnVuY3Rpb24gRnIoZSl7Zm9yKHZhciB0PWUucmV0dXJuO3QhPT1udWxsJiYob20odCkmJnZEKGUuc3RhdGVOb2RlLHQuc3RhdGVOb2RlKSwhYW0odCkpOyl0PXQucmV0dXJufWZ1bmN0aW9uIGFtKGUpe3JldHVybiBlLnRhZz09PTV8fGUudGFnPT09M3x8ZS50YWc9PT0yN31mdW5jdGlvbiBvbShlKXtyZXR1cm4gZSYmZS50YWc9PT03JiZlLnN0YXRlTm9kZSE9PW51bGx9ZnVuY3Rpb24gcm0oZSl7dmFyIHQ9ZS50eXBlLG49ZS5tZW1vaXplZFByb3BzLGw9ZS5zdGF0ZU5vZGU7dHJ5e2U6c3dpdGNoKHQpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6bi5hdXRvRm9jdXMmJmwuZm9jdXMoKTticmVhayBlO2Nhc2UiaW1nIjpuLnNyYz9sLnNyYz1uLnNyYzpuLnNyY1NldCYmKGwuc3Jjc2V0PW4uc3JjU2V0KX19Y2F0Y2gocil7WGUoZSxlLnJldHVybixyKX19ZnVuY3Rpb24gaW0oZSx0LG4pe3RyeXt2YXIgbD1lLnN0YXRlTm9kZTskTihsLGUudHlwZSxuLHQpLGxbWHRdPXR9Y2F0Y2gocil7WGUoZSxlLnJldHVybixyKX19ZnVuY3Rpb24gVHgoZSl7cmV0dXJuIGUudGFnPT09NXx8ZS50YWc9PT0zfHxlLnRhZz09PTI2fHxlLnRhZz09PTI3JiZpYShlLnR5cGUpfHxlLnRhZz09PTR9ZnVuY3Rpb24gY20oZSl7ZTpmb3IoOzspe2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8VHgoZS5yZXR1cm4pKXJldHVybiBudWxsO2U9ZS5yZXR1cm59Zm9yKGUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmc7ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTg7KXtpZihlLnRhZz09PTI3JiZpYShlLnR5cGUpfHxlLmZsYWdzJjJ8fGUuY2hpbGQ9PT1udWxsfHxlLnRhZz09PTQpY29udGludWUgZTtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZH1pZighKGUuZmxhZ3MmMikpcmV0dXJuIGUuc3RhdGVOb2RlfX1mdW5jdGlvbiB1bShlLHQsbixsKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpcj1lLnN0YXRlTm9kZSx0PyhuLm5vZGVUeXBlPT09OT9uLmJvZHk6bi5ub2RlTmFtZT09PSJIVE1MIj9uLm93bmVyRG9jdW1lbnQuYm9keTpuKS5pbnNlcnRCZWZvcmUocix0KToodD1uLm5vZGVUeXBlPT09OT9uLmJvZHk6bi5ub2RlTmFtZT09PSJIVE1MIj9uLm93bmVyRG9jdW1lbnQuYm9keTpuLHQuYXBwZW5kQ2hpbGQociksbj1uLl9yZWFjdFJvb3RDb250YWluZXIsbiE9bnVsbHx8dC5vbmNsaWNrIT09bnVsbHx8KHQub25jbGljaz1HbikpLG51KGUsbCksQmU9ITA7ZWxzZSBpZihyIT09NCYmKHI9PT0yNyYmKG51KGUsbCksbD1udWxsLGlhKGUudHlwZSkmJihuPWUuc3RhdGVOb2RlLHQ9bnVsbCkpLGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKHVtKGUsdCxuLGwpLGU9ZS5zaWJsaW5nO2UhPT1udWxsOyl1bShlLHQsbixsKSxlPWUuc2libGluZ31mdW5jdGlvbiBsdShlLHQsbixsKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpcj1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKHIsdCk6bi5hcHBlbmRDaGlsZChyKSxudShlLGwpLEJlPSEwO2Vsc2UgaWYociE9PTQmJihyPT09MjcmJihudShlLGwpLGw9bnVsbCxpYShlLnR5cGUpJiYobj1lLnN0YXRlTm9kZSkpLGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKGx1KGUsdCxuLGwpLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylsdShlLHQsbixsKSxlPWUuc2libGluZ31mdW5jdGlvbiB3eChlKXt2YXIgdD1lLnN0YXRlTm9kZSxuPWUubWVtb2l6ZWRQcm9wczt0cnl7Zm9yKHZhciBsPWUudHlwZSxyPXQuYXR0cmlidXRlcztyLmxlbmd0aDspdC5yZW1vdmVBdHRyaWJ1dGVOb2RlKHJbMF0pO0R0KHQsbCxuKSx0W1J0XT1lLHRbWHRdPW59Y2F0Y2goYyl7WGUoZSxlLnJldHVybixjKX19dmFyIGF1PSExLHJuPW51bGw7ZnVuY3Rpb24gRXgoZSl7KGUudGFnPT09MzB8fChlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wKSYmKGF1PSEwKX12YXIgWG49bnVsbDtmdW5jdGlvbiBSeCgpe3ZhciBlPVhuO3JldHVybiBYbj1udWxsLGV9dmFyIFF0PTA7ZnVuY3Rpb24ga28oZSx0LG4sbCxyKXtyZXR1cm4gUXQ9MCxfeChlLmNoaWxkLHQsbixsLHIpfWZ1bmN0aW9uIF94KGUsdCxuLGwscil7Zm9yKHZhciBjPSExO2UhPT1udWxsOyl7aWYoZS50YWc9PT01KXt2YXIgaD1lLnN0YXRlTm9kZTtpZihsIT09bnVsbCl7dmFyIFM9WG0oaCk7bC5wdXNoKFMpLFMudmlldyYmKGM9ITApfWVsc2UgY3x8WG0oaCkudmlldyYmKGM9ITApO2F1PSEwLFJTKGgsUXQ9PT0wP3Q6dCsiXyIrUXQsbiksUXQrK31lbHNlKGUudGFnIT09MjJ8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpJiYoZS50YWc9PT0zMCYmcnx8X3goZS5jaGlsZCx0LG4sbCxyKSYmKGM9ITApKTtlPWUuc2libGluZ31yZXR1cm4gY31mdW5jdGlvbiBLbihlLHQpe2Zvcig7ZSE9PW51bGw7KWUudGFnPT09NT9fUyhlLnN0YXRlTm9kZSxlLm1lbW9pemVkUHJvcHMpOihlLnRhZyE9PTIyfHxlLm1lbW9pemVkU3RhdGU9PT1udWxsKSYmKGUudGFnPT09MzAmJnR8fEtuKGUuY2hpbGQsdCkpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIG91KGUpe2lmKChlLnN1YnRyZWVGbGFncyYxODg3NDM2OCkhPT0wKWZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KXtpZigoZS50YWchPT0yMnx8ZS5tZW1vaXplZFN0YXRlPT09bnVsbCkmJihvdShlKSxlLnRhZz09PTMwJiYoZS5mbGFncyYxODg3NDM2OCkhPT0wJiZlLnN0YXRlTm9kZS5wYWlyZWQpKXt2YXIgdD1lLm1lbW9pemVkUHJvcHM7aWYodC5uYW1lPT1udWxsfHx0Lm5hbWU9PT0iYXV0byIpdGhyb3cgRXJyb3IoaSg1NDQpKTt2YXIgbj10Lm5hbWU7dD1nbCh0LmRlZmF1bHQsdC5zaGFyZSksdCE9PSJub25lIiYmKGtvKGUsbix0LG51bGwsITEpfHxLbihlLmNoaWxkLCExKSl9ZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIHNtKGUsdCl7aWYoZS50YWc9PT0zMCl7dmFyIG49ZS5zdGF0ZU5vZGUsbD1lLm1lbW9pemVkUHJvcHMscj12bChsLG4pLGM9Z2wobC5kZWZhdWx0LG4ucGFpcmVkP2wuc2hhcmU6bC5lbnRlcik7YyE9PSJub25lIj9rbyhlLHIsYyxudWxsLCExKT8ob3UoZSksbi5wYWlyZWR8fHR8fFZvKGUsbC5vbkVudGVyKSk6S24oZS5jaGlsZCwhMSk6b3UoZSl9ZWxzZSBpZigoZS5zdWJ0cmVlRmxhZ3MmMzM1NTQ0MzIpIT09MClmb3IoZT1lLmNoaWxkO2UhPT1udWxsOylzbShlLHQpLGU9ZS5zaWJsaW5nO2Vsc2Ugb3UoZSl9ZnVuY3Rpb24gZm0oZSl7aWYocm4hPT1udWxsJiZybi5zaXplIT09MCl7dmFyIHQ9cm47aWYoKGUuc3VidHJlZUZsYWdzJjE4ODc0MzY4KSE9PTApZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnIT09MjJ8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpe2lmKGUudGFnPT09MzAmJihlLmZsYWdzJjE4ODc0MzY4KSE9PTApe3ZhciBuPWUubWVtb2l6ZWRQcm9wcyxsPW4ubmFtZTtpZihsIT1udWxsJiZsIT09ImF1dG8iKXt2YXIgcj10LmdldChsKTtpZihyIT09dm9pZCAwKXt2YXIgYz1nbChuLmRlZmF1bHQsbi5zaGFyZSk7aWYoYyE9PSJub25lIiYmKGtvKGUsbCxjLG51bGwsITEpPyhjPWUuc3RhdGVOb2RlLHIucGFpcmVkPWMsYy5wYWlyZWQ9cixWbyhlLG4ub25TaGFyZSkpOktuKGUuY2hpbGQsITEpKSx0LmRlbGV0ZShsKSx0LnNpemU9PT0wKWJyZWFrfX19Zm0oZSl9ZT1lLnNpYmxpbmd9fX1mdW5jdGlvbiBkbShlKXtpZihlLnRhZz09PTMwKXt2YXIgdD1lLm1lbW9pemVkUHJvcHMsbj12bCh0LGUuc3RhdGVOb2RlKSxsPXJuIT09bnVsbD9ybi5nZXQobik6dm9pZCAwLHI9Z2wodC5kZWZhdWx0LGwhPT12b2lkIDA/dC5zaGFyZTp0LmV4aXQpO3IhPT0ibm9uZSImJihrbyhlLG4scixudWxsLCExKT9sIT09dm9pZCAwPyhyPWUuc3RhdGVOb2RlLGwucGFpcmVkPXIsci5wYWlyZWQ9bCxybi5kZWxldGUobiksVm8oZSx0Lm9uU2hhcmUpKTpWbyhlLHQub25FeGl0KTpLbihlLmNoaWxkLCExKSkscm4hPT1udWxsJiZmbShlKX1lbHNlIGlmKChlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wKWZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KWRtKGUpLGU9ZS5zaWJsaW5nO2Vsc2Ugcm4hPT1udWxsJiZmbShlKX1mdW5jdGlvbiBPeChlKXtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7aWYoZS50YWc9PT0zMCl7dmFyIHQ9ZS5tZW1vaXplZFByb3BzLG49dmwodCxlLnN0YXRlTm9kZSk7dD1nbCh0LmRlZmF1bHQsdC51cGRhdGUpLGUuZmxhZ3MmPS01LHQhPT0ibm9uZSImJmtvKGUsbix0LGUubWVtb2l6ZWRTdGF0ZT1bXSwhMSl9ZWxzZShlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wJiZPeChlKTtlPWUuc2libGluZ319ZnVuY3Rpb24gbW0oZSl7aWYoKGUuc3VidHJlZUZsYWdzJjE4ODc0MzY4KSE9PTApZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnIT09MjJ8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpe2lmKGUudGFnPT09MzAmJihlLmZsYWdzJjE4ODc0MzY4KSE9PTApe3ZhciB0PWUuc3RhdGVOb2RlO3QucGFpcmVkIT09bnVsbCYmKHQucGFpcmVkPW51bGwsS24oZS5jaGlsZCwhMSkpfW1tKGUpfWU9ZS5zaWJsaW5nfX1mdW5jdGlvbiBydShlKXtpZihlLnRhZz09PTMwKWUuc3RhdGVOb2RlLnBhaXJlZD1udWxsLEtuKGUuY2hpbGQsITEpLG1tKGUpO2Vsc2UgaWYoKGUuc3VidHJlZUZsYWdzJjMzNTU0NDMyKSE9PTApZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspcnUoZSksZT1lLnNpYmxpbmc7ZWxzZSBtbShlKX1mdW5jdGlvbiBBeChlKXtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyllLnRhZz09PTMwP0tuKGUuY2hpbGQsITEpOihlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wJiZBeChlKSxlPWUuc2libGluZ31mdW5jdGlvbiBobShlLHQsbixsLHIsYyxoKXtmb3IodmFyIFM9ITE7dCE9PW51bGw7KXtpZih0LnRhZz09PTUpe3ZhciBfPXQuc3RhdGVOb2RlO2lmKGMhPT1udWxsJiZRdDxjLmxlbmd0aCl7dmFyIEw9Y1tRdF0sVj1YbShfKTsoTC52aWV3fHxWLnZpZXcpJiYoUz0hMCk7dmFyIFo7aWYoWj0oZS5mbGFncyY0KT09PTApaWYoVi5jbGlwKVo9ITA7ZWxzZXtaPUwucmVjdDt2YXIgej1WLnJlY3Q7Wj1aLnkhPT16Lnl8fFoueCE9PXoueHx8Wi5oZWlnaHQhPT16LmhlaWdodHx8Wi53aWR0aCE9PXoud2lkdGh9WiYmKGUuZmxhZ3N8PTQpLFYuYWJzP1Y9IUwuYWJzOihMPUwucmVjdCxWPVYucmVjdCxWPUwuaGVpZ2h0IT09Vi5oZWlnaHR8fEwud2lkdGghPT1WLndpZHRoKSxWJiYoZS5mbGFnc3w9MzIpfWVsc2UgZS5mbGFnc3w9MzI7KGUuZmxhZ3MmNCkhPT0wJiZSUyhfLFF0PT09MD9uOm4rIl8iK1F0LHIpLFMmJihlLmZsYWdzJjQpIT09MHx8KFhuPT09bnVsbCYmKFhuPVtdKSxYbi5wdXNoKF8sUXQ9PT0wP2w6bCsiXyIrUXQsdC5tZW1vaXplZFByb3BzKSksUXQrK31lbHNlKHQudGFnIT09MjJ8fHQubWVtb2l6ZWRTdGF0ZT09PW51bGwpJiYodC50YWc9PT0zMCYmaD9lLmZsYWdzfD10LmZsYWdzJjMyOmhtKGUsdC5jaGlsZCxuLGwscixjLGgpJiYoUz0hMCkpO3Q9dC5zaWJsaW5nfXJldHVybiBTfWZ1bmN0aW9uIE54KGUsdCl7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MzApe3ZhciBuPWUubWVtb2l6ZWRQcm9wcyxsPWUuc3RhdGVOb2RlLHI9dmwobixsKSxjPWdsKG4uZGVmYXVsdCxuLnVwZGF0ZSksaDtoPWUubWVtb2l6ZWRTdGF0ZSxlLm1lbW9pemVkU3RhdGU9bnVsbCxsPWU7dmFyIFM9ZS5jaGlsZDtRdD0wLHI9aG0obCxTLHIscixjLGgsITEpLChlLmZsYWdzJjQpIT09MCYmciYmVm8oZSxuLm9uVXBkYXRlKX1lbHNlKGUuc3VidHJlZUZsYWdzJjMzNTU0NDMyKSE9PTAmJk54KGUpO2U9ZS5zaWJsaW5nfX12YXIgU3Q9ITEsR2U9ITEsUW49ITEscG09ITEsRHg9dHlwZW9mIFdlYWtTZXQ9PSJmdW5jdGlvbiI/V2Vha1NldDpTZXQsQ3Q9bnVsbCxabj0hMSwkcj0hMSxpdT0hMSx2bT0hMTtmdW5jdGlvbiBSTihlLHQsbil7aWYoZT1lLmNvbnRhaW5lckluZm8sUG09V28sZT1rYihlKSxuZChlKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIGw9e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e2w9KGw9ZS5vd25lckRvY3VtZW50KSYmbC5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciByPWwuZ2V0U2VsZWN0aW9uJiZsLmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudCE9PTApe2w9ci5hbmNob3JOb2RlO3ZhciBjPXIuYW5jaG9yT2Zmc2V0LGg9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtsLm5vZGVUeXBlLGgubm9kZVR5cGV9Y2F0Y2h7bD1udWxsO2JyZWFrIGV9dmFyIFM9MCxfPS0xLEw9LTEsVj0wLFo9MCx6PWUsRz1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIG9lO3ohPT1sfHxjIT09MCYmei5ub2RlVHlwZSE9PTN8fChfPVMrYykseiE9PWh8fHIhPT0wJiZ6Lm5vZGVUeXBlIT09M3x8KEw9UytyKSx6Lm5vZGVUeXBlPT09MyYmKFMrPXoubm9kZVZhbHVlLmxlbmd0aCksKG9lPXouZmlyc3RDaGlsZCkhPT1udWxsOylHPXosej1vZTtmb3IoOzspe2lmKHo9PT1lKWJyZWFrIHQ7aWYoRz09PWwmJisrVj09PWMmJihfPVMpLEc9PT1oJiYrK1o9PT1yJiYoTD1TKSwob2U9ei5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO3o9RyxHPXoucGFyZW50Tm9kZX16PW9lfWw9Xz09PS0xfHxMPT09LTE/bnVsbDp7c3RhcnQ6XyxlbmQ6TH19ZWxzZSBsPW51bGx9bD1sfHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBsPW51bGw7Zm9yKEdtPXtmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOmx9LFdvPSExLG49KG4mMzM1NTQ0MDY0KT09PW4sQ3Q9dCx0PW4/OTI3MDoxMDI0O0N0IT09bnVsbDspe2lmKGU9Q3QsbiYmKGw9ZS5kZWxldGlvbnMsbCE9PW51bGwpKWZvcihjPTA7YzxsLmxlbmd0aDtjKyspbiYmZG0obFtjXSk7aWYoZS5hbHRlcm5hdGU9PT1udWxsJiYoZS5mbGFncyYyKSE9PTApbiYmRXgoZSksY3Uobik7ZWxzZXtpZihlLnRhZz09PTIyKXtpZihsPWUuYWx0ZXJuYXRlLGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2whPT1udWxsJiZsLm1lbW9pemVkU3RhdGU9PT1udWxsJiZuJiZkbShsKSxjdShuKTtjb250aW51ZX1lbHNlIGlmKGwhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsKXtuJiZFeChlKSxjdShuKTtjb250aW51ZX19bD1lLmNoaWxkLChlLnN1YnRyZWVGbGFncyZ0KSE9PTAmJmwhPT1udWxsPyhsLnJldHVybj1lLEN0PWwpOihuJiZPeChlKSxjdShuKSl9fXJuPW51bGx9ZnVuY3Rpb24gY3UoZSl7Zm9yKDtDdCE9PW51bGw7KXt2YXIgdD1DdCxuPWUsbD10LmFsdGVybmF0ZSxyPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmJyZWFrO2Nhc2UgMTppZigociYxMDI0KSE9PTAmJmwhPT1udWxsKXtuPXZvaWQgMCxyPWwubWVtb2l6ZWRQcm9wcyxsPWwubWVtb2l6ZWRTdGF0ZTt2YXIgYz10LnN0YXRlTm9kZTt0cnl7dmFyIGg9UGEodC50eXBlLHIpO249Yy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShoLGwpLGMuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9bn1jYXRjaChTKXtYZSh0LHQucmV0dXJuLFMpfX1icmVhaztjYXNlIDM6aWYoKHImMTAyNCkhPT0wKXtpZihsPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbj1sLm5vZGVUeXBlLG49PT05KVptKGwpO2Vsc2UgaWYobj09PTEpc3dpdGNoKGwubm9kZU5hbWUpe2Nhc2UiSEVBRCI6Y2FzZSJIVE1MIjpjYXNlIkJPRFkiOlptKGwpO2JyZWFrO2RlZmF1bHQ6bC50ZXh0Q29udGVudD0iIn19YnJlYWs7Y2FzZSA1OmNhc2UgMjY6Y2FzZSAyNzpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7Y2FzZSAzMDpuJiZsIT09bnVsbCYmKG49dmwobC5tZW1vaXplZFByb3BzLGwuc3RhdGVOb2RlKSxyPXQubWVtb2l6ZWRQcm9wcyxyPWdsKHIuZGVmYXVsdCxyLnVwZGF0ZSksciE9PSJub25lIiYma28obCxuLHIsbC5tZW1vaXplZFN0YXRlPVtdLCEwKSk7YnJlYWs7ZGVmYXVsdDppZigociYxMDI0KSE9PTApdGhyb3cgRXJyb3IoaSgxNjMpKX1pZihsPXQuc2libGluZyxsIT09bnVsbCl7bC5yZXR1cm49dC5yZXR1cm4sQ3Q9bDticmVha31DdD10LnJldHVybn19ZnVuY3Rpb24gangoZSx0LG4pe3ZhciBsPW4uZmxhZ3M7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkZuKGUsbiksbCY0JiZacig1LG4pO2JyZWFrO2Nhc2UgMTppZihGbihlLG4pLGwmNClpZihlPW4uc3RhdGVOb2RlLHQ9PT1udWxsKXRyeXtlLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2goaCl7WGUobixuLnJldHVybixoKX1lbHNle3ZhciByPVBhKG4udHlwZSx0Lm1lbW9pemVkUHJvcHMpO3Q9dC5tZW1vaXplZFN0YXRlO3RyeXtlLmNvbXBvbmVudERpZFVwZGF0ZShyLHQsZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9Y2F0Y2goaCl7WGUobixuLnJldHVybixoKX19bCY2NCYmeHgobiksbCY1MTImJnFuKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMzppZihGbihlLG4pLGwmNjQmJihlPW4udXBkYXRlUXVldWUsZSE9PW51bGwpKXtpZih0PW51bGwsbi5jaGlsZCE9PW51bGwpc3dpdGNoKG4uY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTp0PW4uY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTp0PW4uY2hpbGQuc3RhdGVOb2RlfXRyeXt1MChlLHQpfWNhdGNoKGgpe1hlKG4sbi5yZXR1cm4saCl9fWJyZWFrO2Nhc2UgMjc6dD09PW51bGwmJmwmNCYmd3gobik7Y2FzZSAyNjpjYXNlIDU6Rm4oZSxuKSx0PT09bnVsbCYmbCY0JiZybShuKSxsJjUxMiYmcW4obixuLnJldHVybik7YnJlYWs7Y2FzZSAxMjpGbihlLG4pO2JyZWFrO2Nhc2UgMzE6Rm4oZSxuKSxsJjQmJkx4KGUsbik7YnJlYWs7Y2FzZSAxMzpGbihlLG4pLGwmNCYmVXgoZSxuKSxsJjY0JiYoZT1uLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCYmKG49SE4uYmluZChudWxsLG4pLGJEKGUsbikpKSk7YnJlYWs7Y2FzZSAyMjppZihsPW4ubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fFN0LCFsKXt2YXIgYz10IT09bnVsbCYmdC5tZW1vaXplZFN0YXRlIT09bnVsbHx8R2U7dD1TdCxyPUdlLFN0PWwsKEdlPWMpJiYhcj8obD0yLChuLnN1YnRyZWVGbGFncyY4NzcyKSE9PTAmJihsfD0xKSxqbihlLG4sbCkpOkZuKGUsbiksU3Q9dCxHZT1yfWJyZWFrO2Nhc2UgMzA6Rm4oZSxuKSxsJjUxMiYmcW4obixuLnJldHVybik7YnJlYWs7Y2FzZSA3OmwmNTEyJiZxbihuLG4ucmV0dXJuKTtkZWZhdWx0OkZuKGUsbil9fWZ1bmN0aW9uIGdtKGUsdCl7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspTXgoZSx0KSxlPWUuc2libGluZ31mdW5jdGlvbiBNeChlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OmNhc2UgMjY6dHJ5e3ZhciBuPWUuc3RhdGVOb2RlO2lmKHQpe3ZhciBsPW4uc3R5bGU7dHlwZW9mIGwuc2V0UHJvcGVydHk9PSJmdW5jdGlvbiI/bC5zZXRQcm9wZXJ0eSgiZGlzcGxheSIsIm5vbmUiLCJpbXBvcnRhbnQiKTpsLmRpc3BsYXk9Im5vbmUifWVsc2V7dmFyIHI9ZS5zdGF0ZU5vZGUsYz1lLm1lbW9pemVkUHJvcHMuc3R5bGUsaD1jIT1udWxsJiZjLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/Yy5kaXNwbGF5Om51bGw7ci5zdHlsZS5kaXNwbGF5PWg9PW51bGx8fHR5cGVvZiBoPT0iYm9vbGVhbiI/IiI6KCIiK2gpLnRyaW0oKX19Y2F0Y2goXyl7WGUoZSxlLnJldHVybixfKX15bShlLHQpO2JyZWFrO2Nhc2UgNjp0cnl7ZS5zdGF0ZU5vZGUubm9kZVZhbHVlPXQ/IiI6ZS5tZW1vaXplZFByb3BzLEJlPSEwfWNhdGNoKF8pe1hlKGUsZS5yZXR1cm4sXyl9YnJlYWs7Y2FzZSAxODp0cnl7dmFyIFM9ZS5zdGF0ZU5vZGU7dD9FUyhTLCEwKTpFUyhlLnN0YXRlTm9kZSwhMSl9Y2F0Y2goXyl7WGUoZSxlLnJldHVybixfKX1icmVhaztjYXNlIDIyOmNhc2UgMjM6ZS5tZW1vaXplZFN0YXRlPT09bnVsbCYmZ20oZSx0KTticmVhaztkZWZhdWx0OmdtKGUsdCl9fWZ1bmN0aW9uIHltKGUsdCl7aWYoZS5zdWJ0cmVlRmxhZ3MmNjcxMDg4NjQpZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2U6e3ZhciBuPWUsbD10O3N3aXRjaChuLnRhZyl7Y2FzZSA0Ok14KG4sbCk7YnJlYWsgZTtjYXNlIDIyOm4ubWVtb2l6ZWRTdGF0ZT09PW51bGwmJnltKG4sbCk7YnJlYWsgZTtkZWZhdWx0OnltKG4sbCl9fWU9ZS5zaWJsaW5nfX1mdW5jdGlvbiB6eChlKXt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsengodCkpLGUuY2hpbGQ9bnVsbCxlLmRlbGV0aW9ucz1udWxsLGUuc2libGluZz1udWxsLGUudGFnPT09NSYmKHQ9ZS5zdGF0ZU5vZGUsdCE9PW51bGwmJm1jKHQpKSxlLnN0YXRlTm9kZT1udWxsLGUucmV0dXJuPW51bGwsZS5kZXBlbmRlbmNpZXM9bnVsbCxlLm1lbW9pemVkUHJvcHM9bnVsbCxlLm1lbW9pemVkU3RhdGU9bnVsbCxlLnBlbmRpbmdQcm9wcz1udWxsLGUuc3RhdGVOb2RlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsfXZhciBldD1udWxsLFp0PSExO2Z1bmN0aW9uIE5uKGUsdCxuKXtmb3Iobj1uLmNoaWxkO24hPT1udWxsOylreChlLHQsbiksbj1uLnNpYmxpbmd9ZnVuY3Rpb24ga3goZSx0LG4pe2lmKHRuJiZ0eXBlb2YgdG4ub25Db21taXRGaWJlclVubW91bnQ9PSJmdW5jdGlvbiIpdHJ5e3RuLm9uQ29tbWl0RmliZXJVbm1vdW50KHhyLG4pfWNhdGNoe31zd2l0Y2gobi50YWcpe2Nhc2UgMjY6R2V8fE50KG4sdCksTm4oZSx0LG4pLG4ubWVtb2l6ZWRTdGF0ZT9uLm1lbW9pemVkU3RhdGUuY291bnQtLTpuLnN0YXRlTm9kZSYmIUdlJiYobj1uLnN0YXRlTm9kZSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO2JyZWFrO2Nhc2UgMjc6R2V8fE50KG4sdCksRnIobik7dmFyIGw9ZXQscj1adDtpYShuLnR5cGUpJiYoZXQ9bi5zdGF0ZU5vZGUsWnQ9ITEpLE5uKGUsdCxuKSxCUyhuLnN0YXRlTm9kZSxuLnR5cGUsbi5tZW1vaXplZFByb3BzKSxldD1sLFp0PXI7YnJlYWs7Y2FzZSA1OkdlfHxOdChuLHQpLEZyKG4pO2Nhc2UgNjppZihuLnRhZz09PTYmJkZyKG4pLGw9ZXQscj1adCxldD1udWxsLE5uKGUsdCxuKSxldD1sLFp0PXIsZXQhPT1udWxsKWlmKFp0KXRyeXsoZXQubm9kZVR5cGU9PT05P2V0LmJvZHk6ZXQubm9kZU5hbWU9PT0iSFRNTCI/ZXQub3duZXJEb2N1bWVudC5ib2R5OmV0KS5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSksQmU9ITB9Y2F0Y2goYyl7WGUobix0LGMpfWVsc2UgdHJ5e2V0LnJlbW92ZUNoaWxkKG4uc3RhdGVOb2RlKSxCZT0hMH1jYXRjaChjKXtYZShuLHQsYyl9YnJlYWs7Y2FzZSAxODpldCE9PW51bGwmJihadD8oZT1ldCx3UyhlLm5vZGVUeXBlPT09OT9lLmJvZHk6ZS5ub2RlTmFtZT09PSJIVE1MIj9lLm93bmVyRG9jdW1lbnQuYm9keTplLG4uc3RhdGVOb2RlKSxlcihlKSk6d1MoZXQsbi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6bD1ldCxyPVp0LGV0PW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sWnQ9ITAsTm4oZSx0LG4pLGV0PWwsWnQ9cjticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6ZWEoMixuLHQpLEdlfHxlYSg0LG4sdCksTm4oZSx0LG4pO2JyZWFrO2Nhc2UgMTpHZXx8KE50KG4sdCksbD1uLnN0YXRlTm9kZSx0eXBlb2YgbC5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIiYmU3gobix0LGwpKSxObihlLHQsbik7YnJlYWs7Y2FzZSAyMTpObihlLHQsbik7YnJlYWs7Y2FzZSAyMjpHZT0obD1HZSl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsTm4oZSx0LG4pLEdlPWw7YnJlYWs7Y2FzZSAzMDpOdChuLHQpLE5uKGUsdCxuKTticmVhaztjYXNlIDc6R2V8fE50KG4sdCksTm4oZSx0LG4pO2JyZWFrO2RlZmF1bHQ6Tm4oZSx0LG4pfX1mdW5jdGlvbiBMeChlLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihlPXQuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwpKSl7ZT1lLmRlaHlkcmF0ZWQ7dHJ5e2VyKGUpfWNhdGNoKG4pe1hlKHQsdC5yZXR1cm4sbil9fX1mdW5jdGlvbiBVeChlLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihlPXQuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCkpKSl0cnl7ZXIoZSl9Y2F0Y2gobil7WGUodCx0LnJldHVybixuKX19ZnVuY3Rpb24gX04oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDMxOmNhc2UgMTM6Y2FzZSAxOTp2YXIgdD1lLnN0YXRlTm9kZTtyZXR1cm4gdD09PW51bGwmJih0PWUuc3RhdGVOb2RlPW5ldyBEeCksdDtjYXNlIDIyOnJldHVybiBlPWUuc3RhdGVOb2RlLHQ9ZS5fcmV0cnlDYWNoZSx0PT09bnVsbCYmKHQ9ZS5fcmV0cnlDYWNoZT1uZXcgRHgpLHQ7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQzNSxlLnRhZykpfX1mdW5jdGlvbiB1dShlLHQpe3ZhciBuPV9OKGUpO3QuZm9yRWFjaChmdW5jdGlvbihsKXtpZighbi5oYXMobCkpe24uYWRkKGwpO3ZhciByPUJOLmJpbmQobnVsbCxlLGwpO2wudGhlbihyLHIpfX0pfWZ1bmN0aW9uIEh0KGUsdCxuKXt2YXIgbD10LmRlbGV0aW9ucztpZihsIT09bnVsbClmb3IodmFyIHI9MDtyPGwubGVuZ3RoO3IrKyl7dmFyIGM9bFtyXSxoPWUsUz10LF89UztlOmZvcig7XyE9PW51bGw7KXtzd2l0Y2goXy50YWcpe2Nhc2UgMjc6aWYoaWEoXy50eXBlKSl7ZXQ9Xy5zdGF0ZU5vZGUsWnQ9ITE7YnJlYWsgZX1icmVhaztjYXNlIDU6ZXQ9Xy5zdGF0ZU5vZGUsWnQ9ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0OmV0PV8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sWnQ9ITA7YnJlYWsgZX1fPV8ucmV0dXJufWlmKGV0PT09bnVsbCl0aHJvdyBFcnJvcihpKDE2MCkpO2t4KGgsUyxjKSxldD1udWxsLFp0PSExLGg9Yy5hbHRlcm5hdGUsaCE9PW51bGwmJihoLnJldHVybj1udWxsKSxjLnJldHVybj1udWxsfWlmKHQuc3VidHJlZUZsYWdzJjEzODg2KWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KUh4KHQsZSxuKSx0PXQuc2libGluZ312YXIgRG49bnVsbDtmdW5jdGlvbiBIeChlLHQsbil7dmFyIGw9ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKHImNCYmKGw9ZS51cGRhdGVRdWV1ZSxsPWwhPT1udWxsP2wuZXZlbnRzOm51bGwsbCE9PW51bGwpKWZvcih2YXIgYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgaD1sW2NdO2gucmVmLmltcGw9aC5uZXh0SW1wbH1IdCh0LGUsbiksQnQoZSksciY0JiYoZWEoMyxlLGUucmV0dXJuKSxacigzLGUpLGVhKDUsZSxlLnJldHVybikpO2JyZWFrO2Nhc2UgMTpIdCh0LGUsbiksQnQoZSksciY1MTImJihHZXx8bD09PW51bGx8fE50KGwsbC5yZXR1cm4pKSxyJjY0JiZTdCYmKGU9ZS51cGRhdGVRdWV1ZSxlIT09bnVsbCYmKHQ9ZS5jYWxsYmFja3MsdCE9PW51bGwmJihuPWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyxlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bj09PW51bGw/dDpuLmNvbmNhdCh0KSkpKTticmVhaztjYXNlIDI2OmlmKGM9RG4sSHQodCxlLG4pLEJ0KGUpLHImNTEyJiYoR2V8fGw9PT1udWxsfHxOdChsLGwucmV0dXJuKSksciY0KWlmKHI9bCE9PW51bGw/bC5tZW1vaXplZFN0YXRlOm51bGwsbj1lLm1lbW9pemVkU3RhdGUsbD09PW51bGwpaWYobj09PW51bGwpaWYoZS5zdGF0ZU5vZGU9PT1udWxsKWlmKFN0KWUuc3RhdGVOb2RlPVNTKGUudHlwZSxlLm1lbW9pemVkUHJvcHMsdC5jb250YWluZXJJbmZvLGUpO2Vsc2V7ZTp7dD1lLnR5cGUsbj1lLm1lbW9pemVkUHJvcHMscj1jLm93bmVyRG9jdW1lbnR8fGM7dDpzd2l0Y2godCl7Y2FzZSJ0aXRsZSI6bD1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdLCghbHx8bFtUcl18fGxbUnRdfHxsLm5hbWVzcGFjZVVSST09PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fGwuaGFzQXR0cmlidXRlKCJpdGVtcHJvcCIpKSYmKGw9ci5jcmVhdGVFbGVtZW50KHQpLHIuaGVhZC5pbnNlcnRCZWZvcmUobCxyLnF1ZXJ5U2VsZWN0b3IoImhlYWQgPiB0aXRsZSIpKSksRHQobCx0LG4pLGxbUnRdPWUsYnQobCksdD1sO2JyZWFrIGU7Y2FzZSJsaW5rIjppZihjPXFTKCJsaW5rIiwiaHJlZiIscikuZ2V0KHQrKG4uaHJlZnx8IiIpKSl7Zm9yKGg9MDtoPGMubGVuZ3RoO2grKylpZihsPWNbaF0sbC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PShuLmhyZWY9PW51bGx8fG4uaHJlZj09PSIiP251bGw6bi5ocmVmKSYmbC5nZXRBdHRyaWJ1dGUoInJlbCIpPT09KG4ucmVsPT1udWxsP251bGw6bi5yZWwpJiZsLmdldEF0dHJpYnV0ZSgidGl0bGUiKT09PShuLnRpdGxlPT1udWxsP251bGw6bi50aXRsZSkmJmwuZ2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIpPT09KG4uY3Jvc3NPcmlnaW49PW51bGw/bnVsbDpuLmNyb3NzT3JpZ2luKSl7Yy5zcGxpY2UoaCwxKTticmVhayB0fX1sPXIuY3JlYXRlRWxlbWVudCh0KSxEdChsLHQsbiksci5oZWFkLmFwcGVuZENoaWxkKGwpO2JyZWFrO2Nhc2UibWV0YSI6aWYoYz1xUygibWV0YSIsImNvbnRlbnQiLHIpLmdldCh0KyhuLmNvbnRlbnR8fCIiKSkpe2ZvcihoPTA7aDxjLmxlbmd0aDtoKyspaWYobD1jW2hdLGwuZ2V0QXR0cmlidXRlKCJjb250ZW50Iik9PT0obi5jb250ZW50PT1udWxsP251bGw6IiIrbi5jb250ZW50KSYmbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PShuLm5hbWU9PW51bGw/bnVsbDpuLm5hbWUpJiZsLmdldEF0dHJpYnV0ZSgicHJvcGVydHkiKT09PShuLnByb3BlcnR5PT1udWxsP251bGw6bi5wcm9wZXJ0eSkmJmwuZ2V0QXR0cmlidXRlKCJodHRwLWVxdWl2Iik9PT0obi5odHRwRXF1aXY9PW51bGw/bnVsbDpuLmh0dHBFcXVpdikmJmwuZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik9PT0obi5jaGFyU2V0PT1udWxsP251bGw6bi5jaGFyU2V0KSl7Yy5zcGxpY2UoaCwxKTticmVhayB0fX1sPXIuY3JlYXRlRWxlbWVudCh0KSxEdChsLHQsbiksci5oZWFkLmFwcGVuZENoaWxkKGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NjgsdCkpfWxbUnRdPWUsYnQobCksdD1sfWUuc3RhdGVOb2RlPXR9ZWxzZSBTdHx8bmgoYyxlLnR5cGUsZS5zdGF0ZU5vZGUpO2Vsc2UgZS5zdGF0ZU5vZGU9WVMoYyxuLGUubWVtb2l6ZWRQcm9wcyk7ZWxzZSByIT09bj8ocj09PW51bGw/KHQ9bC5zdGF0ZU5vZGUsdD09PW51bGx8fEdlfHx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOnIuY291bnQtLSxuPT09bnVsbD9TdHx8bmgoYyxlLnR5cGUsZS5zdGF0ZU5vZGUpOllTKGMsbixlLm1lbW9pemVkUHJvcHMpKTpuPT09bnVsbCYmZS5zdGF0ZU5vZGUhPT1udWxsJiZpbShlLGUubWVtb2l6ZWRQcm9wcyxsLm1lbW9pemVkUHJvcHMpO2JyZWFrO2Nhc2UgMjc6SHQodCxlLG4pLEJ0KGUpLHImNTEyJiYoR2V8fGw9PT1udWxsfHxOdChsLGwucmV0dXJuKSksbCE9PW51bGwmJnImNCYmaW0oZSxlLm1lbW9pemVkUHJvcHMsbC5tZW1vaXplZFByb3BzKTticmVhaztjYXNlIDU6aWYoYz1RbixRbj0hMSxIdCh0LGUsbiksUW49YyxCdChlKSxyJjUxMiYmKEdlfHxsPT09bnVsbHx8TnQobCxsLnJldHVybikpLGUuZmxhZ3MmMzIpe3Q9ZS5zdGF0ZU5vZGU7dHJ5e2dvKHQsIiIpLEJlPSEwfWNhdGNoKFYpe1hlKGUsZS5yZXR1cm4sVil9fXImNCYmZS5zdGF0ZU5vZGUhPW51bGwmJih0PWUubWVtb2l6ZWRQcm9wcyxpbShlLHQsbCE9PW51bGw/bC5tZW1vaXplZFByb3BzOnQpKSxyJjEwMjQmJihwbT0hMCk7YnJlYWs7Y2FzZSA2OmlmKEh0KHQsZSxuKSxCdChlKSxyJjQpe2lmKGUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihpKDE2MikpO3Q9ZS5tZW1vaXplZFByb3BzLG49ZS5zdGF0ZU5vZGU7dHJ5e24ubm9kZVZhbHVlPXQsQmU9ITB9Y2F0Y2goVil7WGUoZSxlLnJldHVybixWKX19YnJlYWs7Y2FzZSAzOmlmKEJlPSExLHd1PW51bGwsYz1EbixEbj1yaSh0LmNvbnRhaW5lckluZm8pLEh0KHQsZSxuKSxEbj1jLEJ0KGUpLHImNCYmbCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpdHJ5e2VyKHQuY29udGFpbmVySW5mbyl9Y2F0Y2goVil7WGUoZSxlLnJldHVybixWKX1wbSYmKHBtPSExLEJ4KGUpKSxCZT0hMTticmVhaztjYXNlIDQ6cj1RbixRbj1TdCxsPW9iKCksYz1EbixEbj1yaShlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxIdCh0LGUsbiksQnQoZSksRG49YyxCZSYmJHImJihpdT0hMCksQmU9bCxRbj1yO2JyZWFrO2Nhc2UgMTI6SHQodCxlLG4pLEJ0KGUpO2JyZWFrO2Nhc2UgMzE6SHQodCxlLG4pLEJ0KGUpLHImNCYmKHQ9ZS51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKGUudXBkYXRlUXVldWU9bnVsbCx1dShlLHQpKSk7YnJlYWs7Y2FzZSAxMzpIdCh0LGUsbiksQnQoZSksZS5jaGlsZC5mbGFncyY4MTkyJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsIT0obCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYoZHU9ZW4oKSksciY0JiYodD1lLnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYoZS51cGRhdGVRdWV1ZT1udWxsLHV1KGUsdCkpKTticmVhaztjYXNlIDIyOmM9ZS5tZW1vaXplZFN0YXRlIT09bnVsbCxoPWwhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsO3ZhciBTPVN0LF89R2UsTD1RbjtTdD1TfHxjLFFuPUx8fGMsR2U9X3x8aCxIdCh0LGUsbiksR2U9XyxRbj1MLFN0PVMsQnQoZSksciY4MTkyJiYodD1lLnN0YXRlTm9kZSx0Ll92aXNpYmlsaXR5PWM/dC5fdmlzaWJpbGl0eSYtMjp0Ll92aXNpYmlsaXR5fDEsIWN8fGw9PT1udWxsfHxofHxTdHx8R2V8fCh0PWh8fEdlLG49U3QsbD1HZSxTdD1jfHxTdCxHZT10LHRhKGUsMiksU3Q9bixHZT1sKSwhYyYmUW58fGdtKGUsYykpLHImNCYmKHQ9ZS51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKG49dC5yZXRyeVF1ZXVlLG4hPT1udWxsJiYodC5yZXRyeVF1ZXVlPW51bGwsdXUoZSxuKSkpKTticmVhaztjYXNlIDE5Okh0KHQsZSxuKSxCdChlKSxyJjQmJih0PWUudXBkYXRlUXVldWUsdCE9PW51bGwmJihlLnVwZGF0ZVF1ZXVlPW51bGwsdXUoZSx0KSkpO2JyZWFrO2Nhc2UgMzA6ciY1MTImJihHZXx8bD09PW51bGx8fE50KGwsbC5yZXR1cm4pKSxyPW9iKCksYz0kcixoPShuJjMzNTU0NDA2NCk9PT1uLFM9ZS5tZW1vaXplZFByb3BzLCRyPWgmJmdsKFMuZGVmYXVsdCxTLnVwZGF0ZSkhPT0ibm9uZSIsSHQodCxlLG4pLEJ0KGUpLGgmJmwhPT1udWxsJiZCZSYmKGUuZmxhZ3N8PTQpLCRyPWMsQmU9cjticmVhaztjYXNlIDIxOmJyZWFrO2Nhc2UgNzpyJjUxMiYmKEdlfHxsPT09bnVsbHx8TnQobCxsLnJldHVybikpLGwmJmwuc3RhdGVOb2RlIT09bnVsbCYmKGwuc3RhdGVOb2RlLl9mcmFnbWVudEZpYmVyPWUpO2RlZmF1bHQ6SHQodCxlLG4pLEJ0KGUpfX1mdW5jdGlvbiBCdChlKXt2YXIgdD1lLmZsYWdzO2lmKHQmMil7dHJ5e2Zvcih2YXIgbixsPWUucmV0dXJuO2whPT1udWxsOyl7aWYoVHgobCkpe249bDticmVha31sPWwucmV0dXJufWw9bnVsbDtmb3IodmFyIHI9ZS5yZXR1cm47ciE9PW51bGw7KXtpZihvbShyKSl7dmFyIGM9ci5zdGF0ZU5vZGU7bD09PW51bGw/bD1bY106bC5wdXNoKGMpfWlmKGFtKHIpKWJyZWFrO3I9ci5yZXR1cm59dmFyIGg9bDtpZihuPT1udWxsKXRocm93IEVycm9yKGkoMTYwKSk7c3dpdGNoKG4udGFnKXtjYXNlIDI3OnZhciBTPW4uc3RhdGVOb2RlLF89Y20oZSk7bHUoZSxfLFMsaCk7YnJlYWs7Y2FzZSA1OnZhciBMPW4uc3RhdGVOb2RlO24uZmxhZ3MmMzImJihnbyhMLCIiKSxuLmZsYWdzJj0tMzMpO3ZhciBWPWNtKGUpO2x1KGUsVixMLGgpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIFo9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyx6PWNtKGUpO3VtKGUseixaLGgpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSgxNjEpKX19Y2F0Y2goRyl7WGUoZSxlLnJldHVybixHKX1lLmZsYWdzJj0tM310JjQwOTYmJihlLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gQngoZSl7aWYoZS5zdWJ0cmVlRmxhZ3MmMTAyNClmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7dmFyIHQ9ZTtCeCh0KSx0LnRhZz09PTUmJnQuZmxhZ3MmMTAyNCYmKHQ9dC5zdGF0ZU5vZGUsV289ITAsdC5yZXNldCgpLFdvPSExKSxlPWUuc2libGluZ319ZnVuY3Rpb24gTG8oZSx0KXtpZih0LnN1YnRyZWVGbGFncyY5MjcwKWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KUl4KHQsZSksdD10LnNpYmxpbmc7ZWxzZSBOeCh0KX1mdW5jdGlvbiBJeChlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO2lmKG49PT1udWxsKXNtKGUsITEpO2Vsc2Ugc3dpdGNoKGUudGFnKXtjYXNlIDM6aWYodm09Wm49ITEsUngoKSxMbyh0LGUpLCFabiYmIWl1KXtpZihlPVhuLGUhPT1udWxsKWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCs9Myl7bj1lW2xdO3ZhciByPWVbbCsxXTtfUyhuLGVbbCsyXSksbj1uLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG4hPT1udWxsJiZuLmFuaW1hdGUoe29wYWNpdHk6WzAsMF0scG9pbnRlckV2ZW50czpbIm5vbmUiLCJub25lIl19LHtkdXJhdGlvbjowLGZpbGw6ImZvcndhcmRzIixwc2V1ZG9FbGVtZW50OiI6OnZpZXctdHJhbnNpdGlvbi1ncm91cCgiK3IrIikifSl9ZT10LmNvbnRhaW5lckluZm8sZT1lLm5vZGVUeXBlPT09OT9lLmRvY3VtZW50RWxlbWVudDplLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGUhPT1udWxsJiZlLnN0eWxlLnZpZXdUcmFuc2l0aW9uTmFtZT09PSIiJiYoZS5zdHlsZS52aWV3VHJhbnNpdGlvbk5hbWU9Im5vbmUiLGUuYW5pbWF0ZSh7b3BhY2l0eTpbMCwwXSxwb2ludGVyRXZlbnRzOlsibm9uZSIsIm5vbmUiXX0se2R1cmF0aW9uOjAsZmlsbDoiZm9yd2FyZHMiLHBzZXVkb0VsZW1lbnQ6Ijo6dmlldy10cmFuc2l0aW9uLWdyb3VwKHJvb3QpIn0pLGUuYW5pbWF0ZSh7d2lkdGg6WzAsMF0saGVpZ2h0OlswLDBdfSx7ZHVyYXRpb246MCxmaWxsOiJmb3J3YXJkcyIscHNldWRvRWxlbWVudDoiOjp2aWV3LXRyYW5zaXRpb24ifSkpLHZtPSEwfVhuPW51bGw7YnJlYWs7Y2FzZSA1OkxvKHQsZSk7YnJlYWs7Y2FzZSA0Omw9Wm4sWm49ITEsTG8odCxlKSxabiYmKGl1PSEwKSxabj1sO2JyZWFrO2Nhc2UgMjI6ZS5tZW1vaXplZFN0YXRlPT09bnVsbCYmKG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGw/c20oZSwhMSk6TG8odCxlKSk7YnJlYWs7Y2FzZSAzMDpsPVpuLHI9UngoKSxabj0hMSxMbyh0LGUpLFpuJiYoZS5mbGFnc3w9NCk7dmFyIGM9ZS5tZW1vaXplZFByb3BzLGg9ZS5zdGF0ZU5vZGU7dD12bChjLGgpLGg9dmwobi5tZW1vaXplZFByb3BzLGgpO3ZhciBTPWdsKGMuZGVmYXVsdCxjLnVwZGF0ZSk7Uz09PSJub25lIj90PSExOihjPW4ubWVtb2l6ZWRTdGF0ZSxuLm1lbW9pemVkU3RhdGU9bnVsbCxuPWUuY2hpbGQsUXQ9MCx0PWhtKGUsbix0LGgsUyxjLCEwKSxRdCE9PShjPT09bnVsbD8wOmMubGVuZ3RoKSYmKGUuZmxhZ3N8PTMyKSksKGUuZmxhZ3MmNCkhPT0wJiZ0PyhWbyhlLGUubWVtb2l6ZWRQcm9wcy5vblVwZGF0ZSksWG49cik6ciE9PW51bGwmJihyLnB1c2guYXBwbHkocixYbiksWG49ciksWm49KGUuZmxhZ3MmMzIpIT09MD8hMDpsO2JyZWFrO2RlZmF1bHQ6TG8odCxlKX19ZnVuY3Rpb24gRm4oZSx0KXtpZih0LnN1YnRyZWVGbGFncyY4NzcyKWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KWp4KGUsdC5hbHRlcm5hdGUsdCksdD10LnNpYmxpbmd9ZnVuY3Rpb24gdGEoZSx0KXtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7dmFyIG49ZSxsPXQ7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6ZWEoNCxuLG4ucmV0dXJuKSx0YShuLGwpO2JyZWFrO2Nhc2UgMTpOdChuLG4ucmV0dXJuKTt2YXIgcj1uLnN0YXRlTm9kZTt0eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIiYmU3gobixuLnJldHVybixyKSx0YShuLGwpO2JyZWFrO2Nhc2UgMjc6KGwmMikhPT0wJiZCUyhuLnN0YXRlTm9kZSxuLnR5cGUsbi5tZW1vaXplZFByb3BzKTtjYXNlIDU6TnQobixuLnJldHVybiksbi50YWchPT01JiZuLnRhZyE9PTI3fHxGcihuKSx0YShuLGwpO2JyZWFrO2Nhc2UgNjpGcihuKTticmVhaztjYXNlIDI2Ok50KG4sbi5yZXR1cm4pLHI9bi5zdGF0ZU5vZGUsbi5tZW1vaXplZFN0YXRlIT09bnVsbHx8cj09PW51bGx8fEdlfHxyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQociksdGEobixsKTticmVhaztjYXNlIDIyOm4ubWVtb2l6ZWRTdGF0ZT09PW51bGwmJnRhKG4sbCk7YnJlYWs7Y2FzZSAzMDpOdChuLG4ucmV0dXJuKSx0YShuLGwpO2JyZWFrO2Nhc2UgNzpOdChuLG4ucmV0dXJuKTtkZWZhdWx0OnRhKG4sbCl9ZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIGpuKGUsdCxuKXtmb3Iobj0odC5zdWJ0cmVlRmxhZ3MmODc3MikhPT0wP246biYtMix0PXQuY2hpbGQ7dCE9PW51bGw7KXt2YXIgbD10LmFsdGVybmF0ZSxyPWUsYz10LGg9Yy5mbGFncyxTPShuJjEpIT09MDtzd2l0Y2goYy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6am4ocixjLG4pLFpyKDQsYyk7YnJlYWs7Y2FzZSAxOmlmKGpuKHIsYyxuKSxsPWMscj1sLnN0YXRlTm9kZSx0eXBlb2Ygci5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIil0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKFYpe1hlKGwsbC5yZXR1cm4sVil9aWYobD1jLHI9bC51cGRhdGVRdWV1ZSxyIT09bnVsbCl7dmFyIF89bC5zdGF0ZU5vZGU7dHJ5e3ZhciBMPXIuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcztpZihMIT09bnVsbClmb3Ioci5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzPW51bGwscj0wO3I8TC5sZW5ndGg7cisrKWMwKExbcl0sXyl9Y2F0Y2goVil7WGUobCxsLnJldHVybixWKX19UyYmaCY2NCYmeHgoYykscW4oYyxjLnJldHVybik7YnJlYWs7Y2FzZSAyNzoobiYyKSE9PTAmJnd4KGMpO2Nhc2UgNTpjLnRhZyE9PTUmJmMudGFnIT09Mjd8fEN4KGMpLGpuKHIsYyxuKSxTJiZsPT09bnVsbCYmaCY0JiZybShjKSxxbihjLGMucmV0dXJuKTticmVhaztjYXNlIDY6Q3goYyk7YnJlYWs7Y2FzZSAyNjpfPWMuc3RhdGVOb2RlLGMubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fF89PT1udWxsfHxTdHx8bmgocmkoXy5vd25lckRvY3VtZW50KSxjLnR5cGUsXyksam4ocixjLG4pLFMmJmw9PT1udWxsJiZoJjQmJnJtKGMpLHFuKGMsYy5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6am4ocixjLG4pO2JyZWFrO2Nhc2UgMzE6am4ocixjLG4pLFMmJmgmNCYmTHgocixjKTticmVhaztjYXNlIDEzOmpuKHIsYyxuKSxTJiZoJjQmJlV4KHIsYyk7YnJlYWs7Y2FzZSAyMjpjLm1lbW9pemVkU3RhdGU9PT1udWxsJiZqbihyLGMsbikscW4oYyxjLnJldHVybik7YnJlYWs7Y2FzZSAzMDpqbihyLGMsbikscW4oYyxjLnJldHVybik7YnJlYWs7Y2FzZSA3OnFuKGMsYy5yZXR1cm4pO2RlZmF1bHQ6am4ocixjLG4pfXQ9dC5zaWJsaW5nfX1mdW5jdGlvbiBibShlLHQpe3ZhciBuPW51bGw7ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2whPT1udWxsJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGU9bnVsbCx0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKGU9dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlIT09biYmKGUhPW51bGwmJmUucmVmQ291bnQrKyxuIT1udWxsJiZMcihuKSl9ZnVuY3Rpb24geG0oZSx0KXtlPW51bGwsdC5hbHRlcm5hdGUhPT1udWxsJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSx0PXQubWVtb2l6ZWRTdGF0ZS5jYWNoZSx0IT09ZSYmKHQucmVmQ291bnQrKyxlIT1udWxsJiZMcihlKSl9ZnVuY3Rpb24gQ24oZSx0LG4sbCl7dmFyIHI9KG4mMzM1NTQ0MDY0KT09PW47aWYodC5zdWJ0cmVlRmxhZ3MmKHI/MTAyNjI6MTAyNTYpKWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KVB4KGUsdCxuLGwpLHQ9dC5zaWJsaW5nO2Vsc2UgciYmQXgodCl9ZnVuY3Rpb24gUHgoZSx0LG4sbCl7dmFyIHI9KG4mMzM1NTQ0MDY0KT09PW47ciYmdC5hbHRlcm5hdGU9PT1udWxsJiZ0LnJldHVybiE9PW51bGwmJnQucmV0dXJuLmFsdGVybmF0ZSE9PW51bGwmJnJ1KHQpO3ZhciBjPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkNuKGUsdCxuLGwpLGMmMjA0OCYmWnIoOSx0KTticmVhaztjYXNlIDE6Q24oZSx0LG4sbCk7YnJlYWs7Y2FzZSAzOkNuKGUsdCxuLGwpLHImJnZtJiYoZT1lLmNvbnRhaW5lckluZm8sZT1lLm5vZGVUeXBlPT09OT9lLmJvZHk6ZS5ub2RlTmFtZT09PSJIVE1MIj9lLm93bmVyRG9jdW1lbnQuYm9keTplLGUuc3R5bGUudmlld1RyYW5zaXRpb25OYW1lPT09InJvb3QiJiYoZS5zdHlsZS52aWV3VHJhbnNpdGlvbk5hbWU9IiIpLGU9ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlIT09bnVsbCYmZS5zdHlsZS52aWV3VHJhbnNpdGlvbk5hbWU9PT0ibm9uZSImJihlLnN0eWxlLnZpZXdUcmFuc2l0aW9uTmFtZT0iIikpLGMmMjA0OCYmKGM9bnVsbCx0LmFsdGVybmF0ZSE9PW51bGwmJihjPXQuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQ9dC5tZW1vaXplZFN0YXRlLmNhY2hlLHQhPT1jJiYodC5yZWZDb3VudCsrLGMhPW51bGwmJkxyKGMpKSk7YnJlYWs7Y2FzZSAxMjppZihjJjIwNDgpe0NuKGUsdCxuLGwpLGM9dC5zdGF0ZU5vZGU7dHJ5e3ZhciBoPXQubWVtb2l6ZWRQcm9wcyxTPWguaWQsXz1oLm9uUG9zdENvbW1pdDt0eXBlb2YgXz09ImZ1bmN0aW9uIiYmXyhTLHQuYWx0ZXJuYXRlPT09bnVsbD8ibW91bnQiOiJ1cGRhdGUiLGMucGFzc2l2ZUVmZmVjdER1cmF0aW9uLC0wKX1jYXRjaChMKXtYZSh0LHQucmV0dXJuLEwpfX1lbHNlIENuKGUsdCxuLGwpO2JyZWFrO2Nhc2UgMzE6Q24oZSx0LG4sbCk7YnJlYWs7Y2FzZSAxMzpDbihlLHQsbixsKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6aD10LnN0YXRlTm9kZSxTPXQuYWx0ZXJuYXRlLHQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KHImJlMhPT1udWxsJiZTLm1lbW9pemVkU3RhdGU9PT1udWxsJiZydShTKSxoLl92aXNpYmlsaXR5JjI/Q24oZSx0LG4sbCk6SnIoZSx0KSk6KHImJlMhPT1udWxsJiZTLm1lbW9pemVkU3RhdGUhPT1udWxsJiZydSh0KSxoLl92aXNpYmlsaXR5JjI/Q24oZSx0LG4sbCk6KGguX3Zpc2liaWxpdHl8PTIsVW8oZSx0LG4sbCwodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT09MHx8ITEpKSksYyYyMDQ4JiZibShTLHQpO2JyZWFrO2Nhc2UgMjQ6Q24oZSx0LG4sbCksYyYyMDQ4JiZ4bSh0LmFsdGVybmF0ZSx0KTticmVhaztjYXNlIDMwOnImJihjPXQuYWx0ZXJuYXRlLGMhPT1udWxsJiYoS24oYy5jaGlsZCwhMCksS24odC5jaGlsZCwhMCkpKSxDbihlLHQsbixsKTticmVhaztkZWZhdWx0OkNuKGUsdCxuLGwpfX1mdW5jdGlvbiBVbyhlLHQsbixsLHIpe2ZvcihyPXImJigodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT09MHx8ITEpLHQ9dC5jaGlsZDt0IT09bnVsbDspe3ZhciBjPWUsaD10LFM9bixfPWwsTD1oLmZsYWdzO3N3aXRjaChoLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpVbyhjLGgsUyxfLHIpLFpyKDgsaCk7YnJlYWs7Y2FzZSAyMzpicmVhaztjYXNlIDIyOnZhciBWPWguc3RhdGVOb2RlO2gubWVtb2l6ZWRTdGF0ZSE9PW51bGw/Vi5fdmlzaWJpbGl0eSYyP1VvKGMsaCxTLF8scik6SnIoYyxoKTooVi5fdmlzaWJpbGl0eXw9MixVbyhjLGgsUyxfLHIpKSxyJiZMJjIwNDgmJmJtKGguYWx0ZXJuYXRlLGgpO2JyZWFrO2Nhc2UgMjQ6VW8oYyxoLFMsXyxyKSxyJiZMJjIwNDgmJnhtKGguYWx0ZXJuYXRlLGgpO2JyZWFrO2RlZmF1bHQ6VW8oYyxoLFMsXyxyKX10PXQuc2libGluZ319ZnVuY3Rpb24gSnIoZSx0KXtpZih0LnN1YnRyZWVGbGFncyYxMDI1Nilmb3IodD10LmNoaWxkO3QhPT1udWxsOyl7dmFyIG49ZSxsPXQscj1sLmZsYWdzO3N3aXRjaChsLnRhZyl7Y2FzZSAyMjpKcihuLGwpLHImMjA0OCYmYm0obC5hbHRlcm5hdGUsbCk7YnJlYWs7Y2FzZSAyNDpKcihuLGwpLHImMjA0OCYmeG0obC5hbHRlcm5hdGUsbCk7YnJlYWs7ZGVmYXVsdDpKcihuLGwpfXQ9dC5zaWJsaW5nfX12YXIgR2E9ODE5MjtmdW5jdGlvbiBWYShlLHQsbil7aWYoZS5zdWJ0cmVlRmxhZ3MmR2EpZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspR3goZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIEd4KGUsdCxuKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6VmEoZSx0LG4pLGUuZmxhZ3MmR2EmJihlLm1lbW9pemVkU3RhdGUhPT1udWxsP01EKG4sRG4sZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk6KGU9ZS5zdGF0ZU5vZGUsKHQmMzM1NTQ0MTI4KT09PXQmJlpTKG4sZSkpKTticmVhaztjYXNlIDU6VmEoZSx0LG4pLGUuZmxhZ3MmR2EmJihlPWUuc3RhdGVOb2RlLCh0JjMzNTU0NDEyOCk9PT10JiZaUyhuLGUpKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBsPURuO0RuPXJpKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFZhKGUsdCxuKSxEbj1sO2JyZWFrO2Nhc2UgMjI6ZS5tZW1vaXplZFN0YXRlPT09bnVsbCYmKGw9ZS5hbHRlcm5hdGUsbCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KGw9R2EsR2E9MTY3NzcyMTYsVmEoZSx0LG4pLEdhPWwpOlZhKGUsdCxuKSk7YnJlYWs7Y2FzZSAzMDppZigoZS5mbGFncyZHYSkhPT0wJiYobD1lLm1lbW9pemVkUHJvcHMubmFtZSxsIT1udWxsJiZsIT09ImF1dG8iKSl7dmFyIHI9ZS5zdGF0ZU5vZGU7ci5wYWlyZWQ9bnVsbCxybj09PW51bGwmJihybj1uZXcgTWFwKSxybi5zZXQobCxyKX1WYShlLHQsbik7YnJlYWs7ZGVmYXVsdDpWYShlLHQsbil9fWZ1bmN0aW9uIFZ4KGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKHQhPT1udWxsJiYoZT10LmNoaWxkLGUhPT1udWxsKSl7dC5jaGlsZD1udWxsO2RvIHQ9ZS5zaWJsaW5nLGUuc2libGluZz1udWxsLGU9dDt3aGlsZShlIT09bnVsbCl9fWZ1bmN0aW9uIFdyKGUpe3ZhciB0PWUuZGVsZXRpb25zO2lmKChlLmZsYWdzJjE2KSE9PTApe2lmKHQhPT1udWxsKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbD10W25dO0N0PWwscXgobCxlKX1WeChlKX1pZihlLnN1YnRyZWVGbGFncyYxMDI1Nilmb3IoZT1lLmNoaWxkO2UhPT1udWxsOylZeChlKSxlPWUuc2libGluZ31mdW5jdGlvbiBZeChlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6V3IoZSksZS5mbGFncyYyMDQ4JiZlYSg5LGUsZS5yZXR1cm4pO2JyZWFrO2Nhc2UgMzpXcihlKTticmVhaztjYXNlIDEyOldyKGUpO2JyZWFrO2Nhc2UgMjI6dmFyIHQ9ZS5zdGF0ZU5vZGU7ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5fdmlzaWJpbGl0eSYyJiYoZS5yZXR1cm49PT1udWxsfHxlLnJldHVybi50YWchPT0xMyk/KHQuX3Zpc2liaWxpdHkmPS0zLHN1KGUpKTpXcihlKTticmVhaztkZWZhdWx0OldyKGUpfX1mdW5jdGlvbiBzdShlKXt2YXIgdD1lLmRlbGV0aW9ucztpZigoZS5mbGFncyYxNikhPT0wKXtpZih0IT09bnVsbClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGw9dFtuXTtDdD1sLHF4KGwsZSl9VngoZSl9Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3N3aXRjaCh0PWUsdC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6ZWEoOCx0LHQucmV0dXJuKSxzdSh0KTticmVhaztjYXNlIDIyOm49dC5zdGF0ZU5vZGUsbi5fdmlzaWJpbGl0eSYyJiYobi5fdmlzaWJpbGl0eSY9LTMsc3UodCkpO2JyZWFrO2RlZmF1bHQ6c3UodCl9ZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIHF4KGUsdCl7Zm9yKDtDdCE9PW51bGw7KXt2YXIgbj1DdDtzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6ZWEoOCxuLHQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyMjppZihuLm1lbW9pemVkU3RhdGUhPT1udWxsJiZuLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCl7dmFyIGw9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO2whPW51bGwmJmwucmVmQ291bnQrK31icmVhaztjYXNlIDI0OkxyKG4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9aWYobD1uLmNoaWxkLGwhPT1udWxsKWwucmV0dXJuPW4sQ3Q9bDtlbHNlIGU6Zm9yKG49ZTtDdCE9PW51bGw7KXtsPUN0O3ZhciByPWwuc2libGluZyxjPWwucmV0dXJuO2lmKHp4KGwpLGw9PT1uKXtDdD1udWxsO2JyZWFrIGV9aWYociE9PW51bGwpe3IucmV0dXJuPWMsQ3Q9cjticmVhayBlfUN0PWN9fX12YXIgT049e2dldENhY2hlRm9yVHlwZTpmdW5jdGlvbihlKXt2YXIgdD1fdChmdCksbj10LmRhdGEuZ2V0KGUpO3JldHVybiBuPT09dm9pZCAwJiYobj1lKCksdC5kYXRhLnNldChlLG4pKSxufSxjYWNoZVNpZ25hbDpmdW5jdGlvbigpe3JldHVybiBfdChmdCkuY29udHJvbGxlci5zaWduYWx9fSxBTj10eXBlb2YgV2Vha01hcD09ImZ1bmN0aW9uIj9XZWFrTWFwOk1hcCxJZT0wLCRlPW51bGwsTWU9bnVsbCxMZT0wLHFlPTAsY249bnVsbCxuYT0hMSxIbz0hMSxTbT0hMSxSbD0wLGF0PTAsbGE9MCxZYT0wLGZ1PTAsdW49MCxCbz0wLGVpPW51bGwsRnQ9bnVsbCxDbT0hMSxkdT0wLFh4PTAsbXU9MS8wLGh1PW51bGwsYWE9bnVsbCx0dD0wLE1uPW51bGwscWE9bnVsbCwkbj0wLFRtPTAsd209bnVsbCxLeD1udWxsLElvPW51bGwsUG89bnVsbCxHbz1udWxsLHRpPTAscHU9bnVsbDtmdW5jdGlvbiBzbigpe3JldHVybihJZSYyKSE9PTAmJkxlIT09MD9MZSYtTGU6dGUuVCE9PW51bGw/em0oKTpGeSgpfWZ1bmN0aW9uIFF4KCl7aWYodW49PT0wKWlmKChMZSY1MzY4NzA5MTIpPT09MHx8TmUpe3ZhciBlPXVjO3VjPDw9MSwodWMmMzkzMjE2MCk9PT0wJiYodWM9MjYyMTQ0KSx1bj1lfWVsc2UgdW49NTM2ODcwOTEyO3JldHVybiBlPU90LmN1cnJlbnQsZSE9PW51bGwmJihlLmZsYWdzfD0zMiksdW59ZnVuY3Rpb24gVm8oZSx0KXtpZih0IT1udWxsKXt2YXIgbj1lLnN0YXRlTm9kZSxsPW4ucmVmO2w9PT1udWxsJiYobD1uLnJlZj1PUyh2bChlLm1lbW9pemVkUHJvcHMsbikpKSxQbz09PW51bGwmJihQbz1bXSksUG8ucHVzaCh0LmJpbmQobnVsbCxsKSl9fWZ1bmN0aW9uICR0KGUsdCxuKXsoZT09PSRlJiYocWU9PT0yfHxxZT09PTkpfHxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKSYmKFlvKGUsMCksb2EoZSxMZSx1biwhMSkpLENyKGUsbiksKChJZSYyKT09PTB8fGUhPT0kZSkmJihlPT09JGUmJigoSWUmMik9PT0wJiYoWWF8PW4pLGF0PT09NCYmb2EoZSxMZSx1biwhMSkpLEpuKGUpKX1mdW5jdGlvbiBaeChlLHQsbil7aWYoKEllJjYpIT09MCl0aHJvdyBFcnJvcihpKDMyNykpO3ZhciBsPSFuJiYodCYxMjcpPT09MCYmKHQmZS5leHBpcmVkTGFuZXMpPT09MHx8U3IoZSx0KSxyPWw/ak4oZSx0KTpSbShlLHQsITApLGM9bDtkb3tpZihyPT09MCl7SG8mJiFsJiZvYShlLHQsMCwhMSk7YnJlYWt9ZWxzZXtpZihuPWUuY3VycmVudC5hbHRlcm5hdGUsYyYmIU5OKG4pKXtyPVJtKGUsdCwhMSksYz0hMTtjb250aW51ZX1pZihyPT09Mil7aWYoYz10LGUuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMmYyl2YXIgaD0wO2Vsc2UgaD1lLnBlbmRpbmdMYW5lcyYtNTM2ODcwOTEzLGg9aCE9PTA/aDpoJjUzNjg3MDkxMj81MzY4NzA5MTI6MDtpZihoIT09MCl7dD1oO2U6e3ZhciBTPWU7cj1laTt2YXIgXz1TLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQ7aWYoXyYmKFlvKFMsaCkuZmxhZ3N8PTI1NiksaD1SbShTLGgsITEpLGghPT0yJiZoIT09Nil7aWYoU20mJiFfKXtTLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzfD1jLFlhfD1jLHI9NDticmVhayBlfWM9RnQsRnQ9cixjIT09bnVsbCYmKEZ0PT09bnVsbD9GdD1jOkZ0LnB1c2guYXBwbHkoRnQsYykpfXI9aH1pZihjPSExLHIhPT0yKWNvbnRpbnVlfX1pZihyPT09MSl7WW8oZSwwKSxvYShlLHQsMCwhMCk7YnJlYWt9ZTp7c3dpdGNoKGw9ZSxjPXIsYyl7Y2FzZSAwOmNhc2UgMTp0aHJvdyBFcnJvcihpKDM0NSkpO2Nhc2UgNDppZigodCY0MTk0MDQ4KSE9PXQmJih0JjYyOTE0NTYwKSE9PXQpYnJlYWs7Y2FzZSA2Om9hKGwsdCx1biwhbmEpO2JyZWFrIGU7Y2FzZSAyOkZ0PW51bGw7YnJlYWs7Y2FzZSAzOmNhc2UgNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoMzI5KSl9aWYoKHQmNjI5MTQ1NjApPT09dCYmKHI9ZHUrMzAwLWVuKCksMTA8cikpe2lmKG9hKGwsdCx1biwhbmEpLGZjKGwsMCwhMCkhPT0wKWJyZWFrIGU7JG49dCxsLnRpbWVvdXRIYW5kbGU9cW0oRnguYmluZChudWxsLGwsbixGdCxodSxDbSx0LHVuLFlhLEJvLG5hLGMsIlRocm90dGxlZCIsLTAsMCkscik7YnJlYWsgZX1GeChsLG4sRnQsaHUsQ20sdCx1bixZYSxCbyxuYSxjLG51bGwsLTAsMCl9fWJyZWFrfXdoaWxlKCEwKTtKbihlKX1mdW5jdGlvbiBGeChlLHQsbixsLHIsYyxoLFMsXyxMLFYsWix6LEcpe2UudGltZW91dEhhbmRsZT0tMTt2YXIgb2U9dC5zdWJ0cmVlRmxhZ3MsdmU9KGMmMzM1NTQ0MDY0KT09PWM7aWYoWj1udWxsLCh2ZXx8b2UmODE5Mnx8KG9lJjE2Nzg1NDA4KT09PTE2Nzg1NDA4KSYmKFo9e3N0eWxlc2hlZXRzOm51bGwsY291bnQ6MCxpbWdDb3VudDowLGltZ0J5dGVzOjAsc3VzcGVuc2V5SW1hZ2VzOltdLHdhaXRpbmdGb3JJbWFnZXM6ITAsd2FpdGluZ0ZvclZpZXdUcmFuc2l0aW9uOiExLHVuc3VzcGVuZDpHbn0scm49bnVsbCxHeCh0LGMsWiksdmUmJihvZT1aLHZlPWUuY29udGFpbmVySW5mbyx2ZT0odmUubm9kZVR5cGU9PT05P3ZlOnZlLm93bmVyRG9jdW1lbnQpLl9fcmVhY3RWaWV3VHJhbnNpdGlvbix2ZSE9bnVsbCYmKG9lLmNvdW50Kyssb2Uud2FpdGluZ0ZvclZpZXdUcmFuc2l0aW9uPSEwLG9lPXVpLmJpbmQob2UpLHZlLmZpbmlzaGVkLnRoZW4ob2Usb2UpKSksb2U9KGMmNjI5MTQ1NjApPT09Yz9kdS1lbigpOihjJjQxOTQwNDgpPT09Yz9YeC1lbigpOjAsb2U9ekQoWixvZSksb2UhPT1udWxsKSl7JG49YyxlLmNhbmNlbFBlbmRpbmdDb21taXQ9b2UoYVMuYmluZChudWxsLGUsdCxjLG4sbCxyLGgsUyxfLEwsVixaLG51bGwseixHKSksb2EoZSxjLGgsIUwpO3JldHVybn1hUyhlLHQsYyxuLGwscixoLFMsXyxMLFYsWil9ZnVuY3Rpb24gTk4oZSl7Zm9yKHZhciB0PWU7Oyl7dmFyIG49dC50YWc7aWYoKG49PT0wfHxuPT09MTF8fG49PT0xNSkmJnQuZmxhZ3MmMTYzODQmJihuPXQudXBkYXRlUXVldWUsbiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSkpZm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciByPW5bbF0sYz1yLmdldFNuYXBzaG90O3I9ci52YWx1ZTt0cnl7aWYoIWFuKGMoKSxyKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gb2EoZSx0LG4sbCl7dD1xeShlLHQpLHQmPX5mdSx0Jj1+WWEsZS5zdXNwZW5kZWRMYW5lc3w9dCxlLnBpbmdlZExhbmVzJj1+dCxsJiYoZS53YXJtTGFuZXN8PXQpLGw9ZS5leHBpcmF0aW9uVGltZXM7Zm9yKHZhciByPXQ7MDxyOyl7dmFyIGM9MzEtbm4ociksaD0xPDxjO2xbY109LTEsciY9fmh9biE9PTAmJkt5KGUsbix0KX1mdW5jdGlvbiB2dSgpe3JldHVybihJZSY2KT09PTA/KG5pKDApLCExKTohMH1mdW5jdGlvbiBFbSgpe2lmKE1lIT09bnVsbCl7aWYocWU9PT0wKXZhciBlPU1lLnJldHVybjtlbHNlIGU9TWUseGw9amE9bnVsbCxNZChlKSxObz1udWxsLEJyPTAsZT1NZTtmb3IoO2UhPT1udWxsOylieChlLmFsdGVybmF0ZSxlKSxlPWUucmV0dXJuO01lPW51bGx9fWZ1bmN0aW9uIFlvKGUsdCl7dmFyIG49ZS50aW1lb3V0SGFuZGxlO3JldHVybiBuIT09LTEmJihlLnRpbWVvdXRIYW5kbGU9LTEsZUQobikpLG49ZS5jYW5jZWxQZW5kaW5nQ29tbWl0LG4hPT1udWxsJiYoZS5jYW5jZWxQZW5kaW5nQ29tbWl0PW51bGwsbigpKSwkbj0wLEVtKCksJGU9ZSxNZT1uPXlsKGUuY3VycmVudCxudWxsKSxMZT10LHFlPTAsY249bnVsbCxuYT0hMSxIbz1TcihlLHQpLFNtPSExLEJvPXVuPWZ1PVlhPWxhPWF0PTAsRnQ9ZWk9bnVsbCxDbT0hMSxSbD1xeShlLHQpLHdjKCksbn1mdW5jdGlvbiAkeChlLHQpe19lPW51bGwsdGUuSD1aYyx0PT09QW98fHQ9PT1rYz8odD1hMCgpLHFlPTMpOnQ9PT14ZD8odD1hMCgpLHFlPTQpOnFlPXQ9PT1RZD84OnQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiI/NjoxLGNuPXQsTWU9PT1udWxsJiYoYXQ9MSxGYyhlLHluKHQsZS5jdXJyZW50KSkpfWZ1bmN0aW9uIEp4KCl7dmFyIGU9T3QuY3VycmVudDtyZXR1cm4gZT09PW51bGw/ITA6KExlJjQxOTQwNDgpPT09TGU/a3Q9PT1udWxsOihMZSY2MjkxNDU2MCk9PT1MZXx8KExlJjUzNjg3MDkxMikhPT0wP2U9PT1rdDohMX1mdW5jdGlvbiBXeCgpe3ZhciBlPXRlLkg7cmV0dXJuIHRlLkg9WmMsZT09PW51bGw/WmM6ZX1mdW5jdGlvbiBlUygpe3ZhciBlPXRlLkE7cmV0dXJuIHRlLkE9T04sZX1mdW5jdGlvbiBndSgpe2F0PTQsbmF8fChMZSY0MTk0MDQ4KSE9PUxlJiZPdC5jdXJyZW50IT09bnVsbHx8KEhvPSEwKSwobGEmMTM0MjE3NzI3KT09PTAmJihZYSYxMzQyMTc3MjcpPT09MHx8JGU9PT1udWxsfHxvYSgkZSxMZSx1biwhMSl9ZnVuY3Rpb24gUm0oZSx0LG4pe3ZhciBsPUllO0llfD0yO3ZhciByPVd4KCksYz1lUygpOygkZSE9PWV8fExlIT09dCkmJihodT1udWxsLFlvKGUsdCkpLHQ9ITE7dmFyIGg9YXQ7ZTpkbyB0cnl7aWYocWUhPT0wJiZNZSE9PW51bGwpe3ZhciBTPU1lLF89Y247c3dpdGNoKHFlKXtjYXNlIDg6RW0oKSxoPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOmNhc2UgOTpjYXNlIDY6T3QuY3VycmVudD09PW51bGwmJih0PSEwKTt2YXIgTD1xZTtpZihxZT0wLGNuPW51bGwscW8oZSxTLF8sTCksbiYmSG8pe2g9MDticmVhayBlfWJyZWFrO2RlZmF1bHQ6TD1xZSxxZT0wLGNuPW51bGwscW8oZSxTLF8sTCl9fUROKCksaD1hdDticmVha31jYXRjaChWKXskeChlLFYpfXdoaWxlKCEwKTtyZXR1cm4gdCYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKysseGw9amE9bnVsbCxJZT1sLHRlLkg9cix0ZS5BPWMsTWU9PT1udWxsJiYoJGU9bnVsbCxMZT0wLHdjKCkpLGh9ZnVuY3Rpb24gRE4oKXtmb3IoO01lIT09bnVsbDspdFMoTWUpfWZ1bmN0aW9uIGpOKGUsdCl7dmFyIG49SWU7SWV8PTI7dmFyIGw9V3goKSxyPWVTKCk7JGUhPT1lfHxMZSE9PXQ/KGh1PW51bGwsbXU9ZW4oKSs1MDAsWW8oZSx0KSk6SG89U3IoZSx0KTtlOmRvIHRyeXtpZihxZSE9PTAmJk1lIT09bnVsbCl7dD1NZTt2YXIgYz1jbjt0OnN3aXRjaChxZSl7Y2FzZSAxOnFlPTAsY249bnVsbCxxbyhlLHQsYywxKTticmVhaztjYXNlIDI6Y2FzZSA5OmlmKG4wKGMpKXtxZT0wLGNuPW51bGwsblModCk7YnJlYWt9dD1mdW5jdGlvbigpe3FlIT09MiYmcWUhPT05fHwkZSE9PWV8fChxZT03KSxKbihlKX0sYy50aGVuKHQsdCk7YnJlYWsgZTtjYXNlIDM6cWU9NzticmVhayBlO2Nhc2UgNDpxZT01O2JyZWFrIGU7Y2FzZSA3Om4wKGMpPyhxZT0wLGNuPW51bGwsblModCkpOihxZT0wLGNuPW51bGwscW8oZSx0LGMsNykpO2JyZWFrO2Nhc2UgNTp2YXIgaD1udWxsO3N3aXRjaChNZS50YWcpe2Nhc2UgMjY6aD1NZS5tZW1vaXplZFN0YXRlO2Nhc2UgNTpjYXNlIDI3OnZhciBTPU1lO2lmKGg/S1MoaCk6Uy5zdGF0ZU5vZGUuY29tcGxldGUpe3FlPTAsY249bnVsbDt2YXIgXz1TLnNpYmxpbmc7aWYoXyE9PW51bGwpTWU9XztlbHNle3ZhciBMPVMucmV0dXJuO0whPT1udWxsPyhNZT1MLHl1KEwpKTpNZT1udWxsfWJyZWFrIHR9fXFlPTAsY249bnVsbCxxbyhlLHQsYyw1KTticmVhaztjYXNlIDY6cWU9MCxjbj1udWxsLHFvKGUsdCxjLDYpO2JyZWFrO2Nhc2UgODpFbSgpLGF0PTY7YnJlYWsgZTtkZWZhdWx0OnRocm93IEVycm9yKGkoNDYyKSl9fU1OKCk7YnJlYWt9Y2F0Y2goVil7JHgoZSxWKX13aGlsZSghMCk7cmV0dXJuIHhsPWphPW51bGwsdGUuSD1sLHRlLkE9cixJZT1uLE1lIT09bnVsbD8wOigkZT1udWxsLExlPTAsd2MoKSxhdCl9ZnVuY3Rpb24gTU4oKXtmb3IoO01lIT09bnVsbCYmIUZPKCk7KXRTKE1lKX1mdW5jdGlvbiB0UyhlKXt2YXIgdD1neChlLmFsdGVybmF0ZSxlLFJsKTtlLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/eXUoZSk6TWU9dH1mdW5jdGlvbiBuUyhlKXt2YXIgdD1lLG49dC5hbHRlcm5hdGU7c3dpdGNoKHQudGFnKXtjYXNlIDE1OmNhc2UgMDp0PXN4KG4sdCx0LnBlbmRpbmdQcm9wcyx0LnR5cGUsdm9pZCAwLExlKTticmVhaztjYXNlIDExOnQ9c3gobix0LHQucGVuZGluZ1Byb3BzLHQudHlwZS5yZW5kZXIsdC5yZWYsTGUpO2JyZWFrO2Nhc2UgNTpNZCh0KTt2YXIgbD10O2w9PT14dCYmKE5lPyhOYyhsKSxsLnRhZz09PTUmJmwuc3RhdGVOb2RlIT1udWxsJiYoSmU9bC5zdGF0ZU5vZGUpKTooTmMobCksTmU9ITApKTtkZWZhdWx0OmJ4KG4sdCksdD1NZT1xYih0LFJsKSx0PWd4KG4sdCxSbCl9ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLHQ9PT1udWxsP3l1KGUpOk1lPXR9ZnVuY3Rpb24gcW8oZSx0LG4sbCl7eGw9amE9bnVsbCxNZCh0KSxObz1udWxsLEJyPTA7dmFyIHI9dC5yZXR1cm47dHJ5e2lmKHhOKGUscix0LG4sTGUpKXthdD0xLEZjKGUseW4obixlLmN1cnJlbnQpKSxNZT1udWxsO3JldHVybn19Y2F0Y2goYyl7aWYociE9PW51bGwpdGhyb3cgTWU9cixjO2F0PTEsRmMoZSx5bihuLGUuY3VycmVudCkpLE1lPW51bGw7cmV0dXJufXQuZmxhZ3MmMzI3Njg/KE5lfHxsPT09MT9lPSEwOkhvfHwoTGUmNTM2ODcwOTEyKSE9PTA/ZT0hMToobmE9ZT0hMCwobD09PTJ8fGw9PT05fHxsPT09M3x8bD09PTYpJiYobD1PdC5jdXJyZW50LGwhPT1udWxsJiZsLnRhZz09PTEzJiYobC5mbGFnc3w9MTYzODQpKSksbFModCxlKSk6eXUodCl9ZnVuY3Rpb24geXUoZSl7dmFyIHQ9ZTtkb3tpZigodC5mbGFncyYzMjc2OCkhPT0wKXtsUyh0LG5hKTtyZXR1cm59ZT10LnJldHVybjt2YXIgbj13Tih0LmFsdGVybmF0ZSx0LFJsKTtpZihuIT09bnVsbCl7TWU9bjtyZXR1cm59aWYodD10LnNpYmxpbmcsdCE9PW51bGwpe01lPXQ7cmV0dXJufU1lPXQ9ZX13aGlsZSh0IT09bnVsbCk7YXQ9PT0wJiYoYXQ9NSl9ZnVuY3Rpb24gbFMoZSx0KXtkb3t2YXIgbj1FTihlLmFsdGVybmF0ZSxlKTtpZihuIT09bnVsbCl7bi5mbGFncyY9MzI3NjcsTWU9bjtyZXR1cm59aWYobj1lLnJldHVybixuIT09bnVsbCYmKG4uZmxhZ3N8PTMyNzY4LG4uc3VidHJlZUZsYWdzPTAsbi5kZWxldGlvbnM9bnVsbCksIXQmJihlPWUuc2libGluZyxlIT09bnVsbCkpe01lPWU7cmV0dXJufU1lPWU9bn13aGlsZShlIT09bnVsbCk7YXQ9NixNZT1udWxsfWZ1bmN0aW9uIGFTKGUsdCxuLGwscixjLGgsUyxfLEwsVixaKXtlLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbDtkbyBidSgpO3doaWxlKHR0IT09MCk7aWYoKEllJjYpIT09MCl0aHJvdyBFcnJvcihpKDMyNykpO2lmKHQhPT1udWxsKXtpZih0PT09ZS5jdXJyZW50KXRocm93IEVycm9yKGkoMTc3KSk7ZT09PSRlJiYoTWU9JGU9bnVsbCxMZT0wKSxxYT10LE1uPWUsJG49bix3bT1yLEt4PWwsek4oZSx0LG4saCxTLF8sWil9fWZ1bmN0aW9uIHpOKGUsdCxuLGwscixjLGgpe3ZhciBTPXQubGFuZXN8dC5jaGlsZExhbmVzO2lmKFRtPVMsU3w9aWQsckEoZSxuLFMsbCxyLGMpLFBvPW51bGwsKG4mMzM1NTQ0MDY0KT09PW4/KEdvPWNOKGUpLGw9MTAyNjIpOihHbz1udWxsLGw9MTAyNTYpLCh0LnN1YnRyZWVGbGFncyZsKSE9PTB8fCh0LmZsYWdzJmwpIT09MD8oZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCxJTihpYyxmdW5jdGlvbigpe3JldHVybiBObSgpLG51bGx9KSk6KGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTApLGF1PSExLGw9KHQuZmxhZ3MmMTM4NzgpIT09MCwodC5zdWJ0cmVlRmxhZ3MmMTM4NzgpIT09MHx8bCl7bD10ZS5ULHRlLlQ9bnVsbCxyPWllLnAsaWUucD0yLGM9SWUsSWV8PTQ7dHJ5e1JOKGUsdCxuKX1maW5hbGx5e0llPWMsaWUucD1yLHRlLlQ9bH19dHQ9MSxhdT9Jbz1yRChoLGUuY29udGFpbmVySW5mbyxHbyxfbSxPbSxMTixBbSxObSxrTik6KF9tKCksT20oKSxBbSgpKX1mdW5jdGlvbiBrTihlKXtpZih0dCE9PTApe3ZhciB0PU1uLm9uUmVjb3ZlcmFibGVFcnJvcjt0KGUse2NvbXBvbmVudFN0YWNrOm51bGx9KX19ZnVuY3Rpb24gTE4oKXt0dD09PTMmJih0dD0wLEl4KHFhLE1uKSx0dD00KX1mdW5jdGlvbiBfbSgpe2lmKHR0PT09MSl7dHQ9MDt2YXIgZT1Nbix0PXFhLG49JG4sbD0odC5mbGFncyYxMzg3OCkhPT0wO2lmKCh0LnN1YnRyZWVGbGFncyYxMzg3OCkhPT0wfHxsKXtsPXRlLlQsdGUuVD1udWxsO3ZhciByPWllLnA7aWUucD0yO3ZhciBjPUllO0llfD00O3RyeXskcj1pdT0hMSxIeCh0LGUsbiksbj1HbTt2YXIgaD1rYihlLmNvbnRhaW5lckluZm8pLFM9bi5mb2N1c2VkRWxlbSxfPW4uc2VsZWN0aW9uUmFuZ2U7aWYoaCE9PVMmJlMmJlMub3duZXJEb2N1bWVudCYmemIoUy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTKSl7aWYoXyE9PW51bGwmJm5kKFMpKXt2YXIgTD1fLnN0YXJ0LFY9Xy5lbmQ7aWYoVj09PXZvaWQgMCYmKFY9TCksInNlbGVjdGlvblN0YXJ0ImluIFMpUy5zZWxlY3Rpb25TdGFydD1MLFMuc2VsZWN0aW9uRW5kPU1hdGgubWluKFYsUy52YWx1ZS5sZW5ndGgpO2Vsc2V7dmFyIFo9Uy5vd25lckRvY3VtZW50fHxkb2N1bWVudCx6PVomJlouZGVmYXVsdFZpZXd8fHdpbmRvdztpZih6LmdldFNlbGVjdGlvbil7dmFyIEc9ei5nZXRTZWxlY3Rpb24oKSxvZT1TLnRleHRDb250ZW50Lmxlbmd0aCx2ZT1NYXRoLm1pbihfLnN0YXJ0LG9lKSxPZT1fLmVuZD09PXZvaWQgMD92ZTpNYXRoLm1pbihfLmVuZCxvZSk7IUcuZXh0ZW5kJiZ2ZT5PZSYmKGg9T2UsT2U9dmUsdmU9aCk7dmFyIGs9TWIoUyx2ZSksaj1NYihTLE9lKTtpZihrJiZqJiYoRy5yYW5nZUNvdW50IT09MXx8Ry5hbmNob3JOb2RlIT09ay5ub2RlfHxHLmFuY2hvck9mZnNldCE9PWsub2Zmc2V0fHxHLmZvY3VzTm9kZSE9PWoubm9kZXx8Ry5mb2N1c09mZnNldCE9PWoub2Zmc2V0KSl7dmFyIEk9Wi5jcmVhdGVSYW5nZSgpO0kuc2V0U3RhcnQoay5ub2RlLGsub2Zmc2V0KSxHLnJlbW92ZUFsbFJhbmdlcygpLHZlPk9lPyhHLmFkZFJhbmdlKEkpLEcuZXh0ZW5kKGoubm9kZSxqLm9mZnNldCkpOihJLnNldEVuZChqLm5vZGUsai5vZmZzZXQpLEcuYWRkUmFuZ2UoSSkpfX19fWZvcihaPVtdLEc9UztHPUcucGFyZW50Tm9kZTspRy5ub2RlVHlwZT09PTEmJloucHVzaCh7ZWxlbWVudDpHLGxlZnQ6Ry5zY3JvbGxMZWZ0LHRvcDpHLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2YgUy5mb2N1cz09ImZ1bmN0aW9uIiYmUy5mb2N1cygpLFM9MDtTPFoubGVuZ3RoO1MrKyl7dmFyIFE9WltTXTtRLmVsZW1lbnQuc2Nyb2xsTGVmdD1RLmxlZnQsUS5lbGVtZW50LnNjcm9sbFRvcD1RLnRvcH19V289ISFQbSxHbT1QbT1udWxsfWZpbmFsbHl7SWU9YyxpZS5wPXIsdGUuVD1sfX1lLmN1cnJlbnQ9dCx0dD0yfX1mdW5jdGlvbiBPbSgpe2lmKHR0PT09Mil7dHQ9MDt2YXIgZT1Nbix0PXFhLG49KHQuZmxhZ3MmODc3MikhPT0wO2lmKCh0LnN1YnRyZWVGbGFncyY4NzcyKSE9PTB8fG4pe249dGUuVCx0ZS5UPW51bGw7dmFyIGw9aWUucDtpZS5wPTI7dmFyIHI9SWU7SWV8PTQ7dHJ5e2p4KGUsdC5hbHRlcm5hdGUsdCl9ZmluYWxseXtJZT1yLGllLnA9bCx0ZS5UPW59fXR0PTN9fWZ1bmN0aW9uIEFtKCl7aWYodHQ9PT00fHx0dD09PTMpe3R0PTA7dmFyIGU9SW87SW89bnVsbCwkTygpO3ZhciB0PU1uLG49cWEsbD0kbixyPUt4LGM9KGwmMzM1NTQ0MDY0KT09PWw/MTAyNjI6MTAyNTY7aWYoKG4uc3VidHJlZUZsYWdzJmMpIT09MHx8KG4uZmxhZ3MmYykhPT0wP3R0PTU6KHR0PTAscWE9TW49bnVsbCxvUyh0LHQucGVuZGluZ0xhbmVzKSksYz10LnBlbmRpbmdMYW5lcyxjPT09MCYmKGFhPW51bGwpLEhmKGwpLG49bi5zdGF0ZU5vZGUsdG4mJnR5cGVvZiB0bi5vbkNvbW1pdEZpYmVyUm9vdD09ImZ1bmN0aW9uIil0cnl7dG4ub25Db21taXRGaWJlclJvb3QoeHIsbix2b2lkIDAsKG4uY3VycmVudC5mbGFncyYxMjgpPT09MTI4KX1jYXRjaHt9aWYociE9PW51bGwpe249dGUuVCxjPWllLnAsaWUucD0yLHRlLlQ9bnVsbDt0cnl7Zm9yKHZhciBoPXQub25SZWNvdmVyYWJsZUVycm9yLFM9MDtTPHIubGVuZ3RoO1MrKyl7dmFyIF89cltTXTtoKF8udmFsdWUse2NvbXBvbmVudFN0YWNrOl8uc3RhY2t9KX19ZmluYWxseXt0ZS5UPW4saWUucD1jfX1pZihyPVBvLGg9R28sR289bnVsbCxyIT09bnVsbCYmKFBvPW51bGwsaD09PW51bGwmJihoPVtdKSxlIT09bnVsbCkpZm9yKF89MDtfPHIubGVuZ3RoO18rKyluPSgwLHJbX10pKGgpLG4hPT12b2lkIDAmJmUuZmluaXNoZWQuZmluYWxseShuKTsoJG4mMykhPT0wJiZidSgpLEpuKHQpLGM9dC5wZW5kaW5nTGFuZXMsKGwmMjYxOTMwKSE9PTAmJihjJjQyKSE9PTA/dD09PXB1P3RpKys6KHRpPTAscHU9dCk6KHRpPTAscHU9bnVsbCksbmkoMCl9fWZ1bmN0aW9uIG9TKGUsdCl7KGUucG9vbGVkQ2FjaGVMYW5lcyY9dCk9PT0wJiYodD1lLnBvb2xlZENhY2hlLHQhPW51bGwmJihlLnBvb2xlZENhY2hlPW51bGwsTHIodCkpKX1mdW5jdGlvbiBidSgpe3JldHVybiBJbyE9PW51bGwmJihJby5za2lwVHJhbnNpdGlvbigpLElvPW51bGwpLF9tKCksT20oKSxBbSgpLE5tKCl9ZnVuY3Rpb24gTm0oKXtpZih0dCE9PTUpcmV0dXJuITE7dmFyIGU9TW4sdD1UbTtUbT0wO3ZhciBuPUhmKCRuKSxsPXRlLlQscj1pZS5wO3RyeXtpZS5wPTMyPm4/MzI6bix0ZS5UPW51bGwsbj13bSx3bT1udWxsO3ZhciBjPU1uLGg9JG47aWYodHQ9MCxxYT1Nbj1udWxsLCRuPTAsKEllJjYpIT09MCl0aHJvdyBFcnJvcihpKDMzMSkpO3ZhciBTPUllO2lmKEllfD00LFl4KGMuY3VycmVudCksUHgoYyxjLmN1cnJlbnQsaCxuKSxJZT1TLG5pKDAsITEpLHRuJiZ0eXBlb2YgdG4ub25Qb3N0Q29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXt0bi5vblBvc3RDb21taXRGaWJlclJvb3QoeHIsYyl9Y2F0Y2h7fXJldHVybiEwfWZpbmFsbHl7aWUucD1yLHRlLlQ9bCxvUyhlLHQpfX1mdW5jdGlvbiByUyhlLHQsbil7dD15bihuLHQpLHQ9S2QoZS5zdGF0ZU5vZGUsdCwyKSxlPUZsKGUsdCwyKSxlIT09bnVsbCYmKENyKGUsMiksSm4oZSkpfWZ1bmN0aW9uIFhlKGUsdCxuKXtpZihlLnRhZz09PTMpclMoZSxlLG4pO2Vsc2UgZm9yKDt0IT09bnVsbDspe2lmKHQudGFnPT09Myl7clModCxlLG4pO2JyZWFrfWVsc2UgaWYodC50YWc9PT0xKXt2YXIgbD10LnN0YXRlTm9kZTtpZih0eXBlb2YgdC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dHlwZW9mIGwuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihhYT09PW51bGx8fCFhYS5oYXMobCkpKXtlPXluKG4sZSksbj1ueCgyKSxsPUZsKHQsbiwyKSxsIT09bnVsbCYmKGx4KG4sbCx0LGUpLENyKGwsMiksSm4obCkpO2JyZWFrfX10PXQucmV0dXJufX1mdW5jdGlvbiBEbShlLHQsbil7dmFyIGw9ZS5waW5nQ2FjaGU7aWYobD09PW51bGwpe2w9ZS5waW5nQ2FjaGU9bmV3IEFOO3ZhciByPW5ldyBTZXQ7bC5zZXQodCxyKX1lbHNlIHI9bC5nZXQodCkscj09PXZvaWQgMCYmKHI9bmV3IFNldCxsLnNldCh0LHIpKTtyLmhhcyhuKXx8KFNtPSEwLHIuYWRkKG4pLGU9VU4uYmluZChudWxsLGUsdCxuKSx0LnRoZW4oZSxlKSl9ZnVuY3Rpb24gVU4oZSx0LG4pe3ZhciBsPWUucGluZ0NhY2hlO2whPT1udWxsJiZsLmRlbGV0ZSh0KSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm4sZS53YXJtTGFuZXMmPX5uLCRlPT09ZSYmKExlJm4pPT09biYmKChhdD09PTR8fGF0PT09MyYmKExlJjYyOTE0NTYwKT09PUxlJiYzMDA+ZW4oKS1kdSkmJihJZSYyKT09PTA/WW8oZSwwKTpmdXw9bixCbz09PUxlJiYoQm89MCkpLEpuKGUpfWZ1bmN0aW9uIGlTKGUsdCl7dD09PTAmJih0PVh5KCkpLGU9QWEoZSx0KSxlIT09bnVsbCYmKENyKGUsdCksSm4oZSkpfWZ1bmN0aW9uIEhOKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZSxuPTA7dCE9PW51bGwmJihuPXQucmV0cnlMYW5lKSxpUyhlLG4pfWZ1bmN0aW9uIEJOKGUsdCl7dmFyIG49MDtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzp2YXIgbD1lLnN0YXRlTm9kZSxyPWUubWVtb2l6ZWRTdGF0ZTtyIT09bnVsbCYmKG49ci5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6bD1lLnN0YXRlTm9kZTticmVhaztjYXNlIDIyOmw9ZS5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDMxNCkpfWwhPT1udWxsJiZsLmRlbGV0ZSh0KSxpUyhlLG4pfWZ1bmN0aW9uIElOKGUsdCl7cmV0dXJuIHpmKGUsdCl9dmFyIFhvPW51bGwsS289bnVsbCxqbT0hMSx4dT0hMSxNbT0hMSxyYT0wO2Z1bmN0aW9uIEpuKGUpe2UhPT1LbyYmZS5uZXh0PT09bnVsbCYmKEtvPT09bnVsbD9Ybz1Lbz1lOktvPUtvLm5leHQ9ZSkseHU9ITAsam18fChqbT0hMCxHTigpKX1mdW5jdGlvbiBuaShlLHQpe2lmKCFNbSYmeHUpe01tPSEwO2RvIGZvcih2YXIgbj0hMSxsPVhvO2whPT1udWxsOyl7aWYoZSE9PTApe3ZhciByPWwucGVuZGluZ0xhbmVzO2lmKHI9PT0wKXZhciBjPTA7ZWxzZXt2YXIgaD1sLnN1c3BlbmRlZExhbmVzLFM9bC5waW5nZWRMYW5lcztjPSgxPDwzMS1ubig0MnxlKSsxKS0xLGMmPXImfihoJn5TKSxjPWMmMjAxMzI2NzQxP2MmMjAxMzI2NzQxfDE6Yz9jfDI6MH1jIT09MCYmKG49ITAsZlMobCxjKSl9ZWxzZSBjPUxlLGM9ZmMobCxsPT09JGU/YzowLGwuY2FuY2VsUGVuZGluZ0NvbW1pdCE9PW51bGx8fGwudGltZW91dEhhbmRsZSE9PS0xKSwoYyYzKT09PTB8fFNyKGwsYyl8fChuPSEwLGZTKGwsYykpO2w9bC5uZXh0fXdoaWxlKG4pO01tPSExfX1mdW5jdGlvbiBQTigpe2NTKCl9ZnVuY3Rpb24gY1MoKXt4dT1qbT0hMTt2YXIgZT0wO3JhIT09MCYmV04oKSYmKGU9cmEpO2Zvcih2YXIgdD1lbigpLG49bnVsbCxsPVhvO2whPT1udWxsOyl7dmFyIHI9bC5uZXh0LGM9dVMobCx0KTtjPT09MD8obC5uZXh0PW51bGwsbj09PW51bGw/WG89cjpuLm5leHQ9cixyPT09bnVsbCYmKEtvPW4pKToobj1sLChlIT09MHx8KGMmMykhPT0wKSYmKHh1PSEwKSksbD1yfXR0IT09MCYmdHQhPT01fHxuaShlKSxyYSE9PTAmJihyYT0wKX1mdW5jdGlvbiB1UyhlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLGw9ZS5waW5nZWRMYW5lcyxyPWUuZXhwaXJhdGlvblRpbWVzLGM9ZS5wZW5kaW5nTGFuZXMmLTYyOTE0NTYxOzA8Yzspe3ZhciBoPTMxLW5uKGMpLFM9MTw8aCxfPXJbaF07Xz09PS0xPygoUyZuKT09PTB8fChTJmwpIT09MCkmJihyW2hdPW9BKFMsdCkpOl88PXQmJihlLmV4cGlyZWRMYW5lc3w9UyksYyY9flN9aWYodD0kZSxuPUxlLG49ZmMoZSxlPT09dD9uOjAsZS5jYW5jZWxQZW5kaW5nQ29tbWl0IT09bnVsbHx8ZS50aW1lb3V0SGFuZGxlIT09LTEpLGw9ZS5jYWxsYmFja05vZGUsbj09PTB8fGU9PT10JiYocWU9PT0yfHxxZT09PTkpfHxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKXJldHVybiBsIT09bnVsbCYmbCE9PW51bGwmJmtmKGwpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoKG4mMyk9PT0wfHxTcihlLG4pKXtpZih0PW4mLW4sdD09PWUuY2FsbGJhY2tQcmlvcml0eSlyZXR1cm4gdDtzd2l0Y2gobCE9PW51bGwmJmtmKGwpLEhmKG4pKXtjYXNlIDI6Y2FzZSA4Om49Vnk7YnJlYWs7Y2FzZSAzMjpuPWljO2JyZWFrO2Nhc2UgMjY4NDM1NDU2Om49WXk7YnJlYWs7ZGVmYXVsdDpuPWljfXJldHVybiBsPXNTLmJpbmQobnVsbCxlKSxuPXpmKG4sbCksZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bix0fXJldHVybiBsIT09bnVsbCYmbCE9PW51bGwmJmtmKGwpLGUuY2FsbGJhY2tQcmlvcml0eT0yLGUuY2FsbGJhY2tOb2RlPW51bGwsMn1mdW5jdGlvbiBzUyhlLHQpe2lmKHR0IT09MCYmdHQhPT01KXJldHVybiBlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLG51bGw7dmFyIG49ZS5jYWxsYmFja05vZGU7aWYoYnUoKSYmZS5jYWxsYmFja05vZGUhPT1uKXJldHVybiBudWxsO3ZhciBsPUxlO3JldHVybiBsPWZjKGUsZT09PSRlP2w6MCxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsfHxlLnRpbWVvdXRIYW5kbGUhPT0tMSksbD09PTA/bnVsbDooWngoZSxsLHQpLHVTKGUsZW4oKSksZS5jYWxsYmFja05vZGUhPW51bGwmJmUuY2FsbGJhY2tOb2RlPT09bj9zUy5iaW5kKG51bGwsZSk6bnVsbCl9ZnVuY3Rpb24gZlMoZSx0KXtpZihidSgpKXJldHVybiBudWxsO1p4KGUsdCwhMCl9ZnVuY3Rpb24gR04oKXt0RChmdW5jdGlvbigpeyhJZSY2KSE9PTA/emYoR3ksUE4pOmNTKCl9KX1mdW5jdGlvbiB6bSgpe2lmKHJhPT09MCl7dmFyIGU9a2E7ZT09PTAmJihlPWNjLGNjPDw9MSwoY2MmMjYxODg4KT09PTAmJihjYz0yNTYpKSxyYT1lfXJldHVybiByYX1mdW5jdGlvbiBkUyhlKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PSJzeW1ib2wifHx0eXBlb2YgZT09ImJvb2xlYW4iP251bGw6dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTp2YyhlKX1mdW5jdGlvbiBWTihlLHQsbixsLHIpe2lmKHQ9PT0ic3VibWl0IiYmbiYmbi5zdGF0ZU5vZGU9PT1yKXt2YXIgYz1kUygocltYdF18fG51bGwpLmFjdGlvbiksaD1sLnN1Ym1pdHRlcjtoJiYodD0odD1oW1h0XXx8bnVsbCk/ZFModC5mb3JtQWN0aW9uKTpoLmdldEF0dHJpYnV0ZSgiZm9ybUFjdGlvbiIpLHQhPT1udWxsJiYoYz10LGg9bnVsbCkpO3ZhciBTPW5ldyB4YygiYWN0aW9uIiwiYWN0aW9uIixudWxsLGwscik7ZS5wdXNoKHtldmVudDpTLGxpc3RlbmVyczpbe2luc3RhbmNlOm51bGwsbGlzdGVuZXI6ZnVuY3Rpb24oKXtpZihsLmRlZmF1bHRQcmV2ZW50ZWQpe2lmKHJhIT09MCl7dmFyIF89bmV3IEZvcm1EYXRhKHIsaCk7R2Qobix7cGVuZGluZzohMCxkYXRhOl8sbWV0aG9kOnIubWV0aG9kLGFjdGlvbjpjfSxudWxsLF8pfX1lbHNlIHR5cGVvZiBjPT0iZnVuY3Rpb24iJiYoUy5wcmV2ZW50RGVmYXVsdCgpLF89bmV3IEZvcm1EYXRhKHIsaCksR2Qobix7cGVuZGluZzohMCxkYXRhOl8sbWV0aG9kOnIubWV0aG9kLGFjdGlvbjpjfSxjLF8pKX0sY3VycmVudFRhcmdldDpyfV19KX19Zm9yKHZhciBrbT0wO2ttPHJkLmxlbmd0aDtrbSsrKXt2YXIgTG09cmRba21dLFlOPUxtLnRvTG93ZXJDYXNlKCkscU49TG1bMF0udG9VcHBlckNhc2UoKStMbS5zbGljZSgxKTtBbihZTiwib24iK3FOKX1BbihIYiwib25BbmltYXRpb25FbmQiKSxBbihCYiwib25BbmltYXRpb25JdGVyYXRpb24iKSxBbihJYiwib25BbmltYXRpb25TdGFydCIpLEFuKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKSxBbigiZm9jdXNpbiIsIm9uRm9jdXMiKSxBbigiZm9jdXNvdXQiLCJvbkJsdXIiKSxBbihlTiwib25UcmFuc2l0aW9uUnVuIiksQW4odE4sIm9uVHJhbnNpdGlvblN0YXJ0IiksQW4obk4sIm9uVHJhbnNpdGlvbkNhbmNlbCIpLEFuKFBiLCJvblRyYW5zaXRpb25FbmQiKSxwbygib25Nb3VzZUVudGVyIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pLHBvKCJvbk1vdXNlTGVhdmUiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSkscG8oIm9uUG9pbnRlckVudGVyIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKSxwbygib25Qb2ludGVyTGVhdmUiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pLFJhKCJvbkNoYW5nZSIsImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKSxSYSgib25TZWxlY3QiLCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpLFJhKCJvbkJlZm9yZUlucHV0IixbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdKSxSYSgib25Db21wb3NpdGlvbkVuZCIsImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKSxSYSgib25Db21wb3NpdGlvblN0YXJ0IiwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSksUmEoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7dmFyIGxpPSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZyIuc3BsaXQoIiAiKSxYTj1uZXcgU2V0KCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQobGkpKTtmdW5jdGlvbiBtUyhlLHQpe3Q9KHQmNCkhPT0wO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLHI9bC5ldmVudDtsPWwubGlzdGVuZXJzO2U6e3ZhciBjPXZvaWQgMDtpZih0KWZvcih2YXIgaD1sLmxlbmd0aC0xOzA8PWg7aC0tKXt2YXIgUz1sW2hdLF89Uy5pbnN0YW5jZSxMPVMuY3VycmVudFRhcmdldDtpZihTPVMubGlzdGVuZXIsXyE9PWMmJnIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO2M9UyxyLmN1cnJlbnRUYXJnZXQ9TDt0cnl7YyhyKX1jYXRjaChWKXtUYyhWKX1yLmN1cnJlbnRUYXJnZXQ9bnVsbCxjPV99ZWxzZSBmb3IoaD0wO2g8bC5sZW5ndGg7aCsrKXtpZihTPWxbaF0sXz1TLmluc3RhbmNlLEw9Uy5jdXJyZW50VGFyZ2V0LFM9Uy5saXN0ZW5lcixfIT09YyYmci5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7Yz1TLHIuY3VycmVudFRhcmdldD1MO3RyeXtjKHIpfWNhdGNoKFYpe1RjKFYpfXIuY3VycmVudFRhcmdldD1udWxsLGM9X319fX1mdW5jdGlvbiB6ZShlLHQpe3ZhciBuPXRbSnldO249PT12b2lkIDAmJihuPXRbSnldPW5ldyBTZXQpO3ZhciBsPWUrIl9fYnViYmxlIjtuLmhhcyhsKXx8KGhTKHQsZSwyLCExKSxuLmFkZChsKSl9ZnVuY3Rpb24gVW0oZSx0LG4pe3ZhciBsPTA7dCYmKGx8PTQpLGhTKG4sZSxsLHQpfXZhciBTdT0iX3JlYWN0TGlzdGVuaW5nIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBIbShlKXtpZighZVtTdV0pe2VbU3VdPSEwLHRiLmZvckVhY2goZnVuY3Rpb24obil7biE9PSJzZWxlY3Rpb25jaGFuZ2UiJiYoWE4uaGFzKG4pfHxVbShuLCExLGUpLFVtKG4sITAsZSkpfSk7dmFyIHQ9ZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnQ7dD09PW51bGx8fHRbU3VdfHwodFtTdV09ITAsVW0oInNlbGVjdGlvbmNoYW5nZSIsITEsdCkpfX1mdW5jdGlvbiBoUyhlLHQsbixsKXtzd2l0Y2gobDEodCkpe2Nhc2UgMjp2YXIgcj1IRDticmVhaztjYXNlIDg6cj1CRDticmVhaztkZWZhdWx0OnI9YWh9bj1yLmJpbmQobnVsbCx0LG4sZSkscj12b2lkIDAsIVhmfHx0IT09InRvdWNoc3RhcnQiJiZ0IT09InRvdWNobW92ZSImJnQhPT0id2hlZWwifHwocj0hMCksbD9yIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se2NhcHR1cmU6ITAscGFzc2l2ZTpyfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCk6ciE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtwYXNzaXZlOnJ9KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBCbShlLHQsbixsLHIpe3ZhciBjPWw7aWYoKHQmMSk9PT0wJiYodCYyKT09PTAmJmwhPT1udWxsKWU6Zm9yKDs7KXtpZihsPT09bnVsbClyZXR1cm47dmFyIGg9bC50YWc7aWYoaD09PTN8fGg9PT00KXt2YXIgUz1sLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKFM9PT1yKWJyZWFrO2lmKGg9PT00KWZvcihoPWwucmV0dXJuO2ghPT1udWxsOyl7dmFyIF89aC50YWc7aWYoKF89PT0zfHxfPT09NCkmJmguc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1yKXJldHVybjtoPWgucmV0dXJufWZvcig7UyE9PW51bGw7KXtpZihoPUVhKFMpLGg9PT1udWxsKXJldHVybjtpZihfPWgudGFnLF89PT01fHxfPT09Nnx8Xz09PTI2fHxfPT09Mjcpe2w9Yz1oO2NvbnRpbnVlIGV9Uz1TLnBhcmVudE5vZGV9fWw9bC5yZXR1cm59aGIoZnVuY3Rpb24oKXt2YXIgTD1jLFY9WWYobiksWj1bXTtlOnt2YXIgej1HYi5nZXQoZSk7aWYoeiE9PXZvaWQgMCl7dmFyIEc9eGMsb2U9ZTtzd2l0Y2goZSl7Y2FzZSJrZXlwcmVzcyI6aWYoeWMobik9PT0wKWJyZWFrIGU7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpHPU5BO2JyZWFrO2Nhc2UiZm9jdXNpbiI6b2U9ImZvY3VzIixHPUZmO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOm9lPSJibHVyIixHPUZmO2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOkc9RmY7YnJlYWs7Y2FzZSJjbGljayI6aWYobi5idXR0b249PT0yKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51IjpHPWdiO2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOkc9eUE7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6Rz1rQTticmVhaztjYXNlIEhiOmNhc2UgQmI6Y2FzZSBJYjpHPVNBO2JyZWFrO2Nhc2UgUGI6Rz1VQTticmVhaztjYXNlInNjcm9sbCI6Y2FzZSJzY3JvbGxlbmQiOkc9dkE7YnJlYWs7Y2FzZSJ3aGVlbCI6Rz1CQTticmVhaztjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlInBhc3RlIjpHPVRBO2JyZWFrO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOmNhc2UibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJwb2ludGVydXAiOkc9YmI7YnJlYWs7Y2FzZSJzdWJtaXQiOkc9TUE7YnJlYWs7Y2FzZSJ0b2dnbGUiOmNhc2UiYmVmb3JldG9nZ2xlIjpHPVBBfXZhciB2ZT0odCY0KSE9PTAsT2U9IXZlJiYoZT09PSJzY3JvbGwifHxlPT09InNjcm9sbGVuZCIpLGs9dmU/eiE9PW51bGw/eisiQ2FwdHVyZSI6bnVsbDp6O3ZlPVtdO2Zvcih2YXIgaj1MLEk7aiE9PW51bGw7KXt2YXIgUT1qO2lmKEk9US5zdGF0ZU5vZGUsUT1RLnRhZyxRIT09NSYmUSE9PTI2JiZRIT09Mjd8fEk9PT1udWxsfHxrPT09bnVsbHx8KFE9RXIoaixrKSxRIT1udWxsJiZ2ZS5wdXNoKGFpKGosUSxJKSkpLE9lKWJyZWFrO2o9ai5yZXR1cm59MDx2ZS5sZW5ndGgmJih6PW5ldyBHKHosb2UsbnVsbCxuLFYpLFoucHVzaCh7ZXZlbnQ6eixsaXN0ZW5lcnM6dmV9KSl9fWlmKCh0JjcpPT09MCl7ZTp7aWYoRz1lPT09Im1vdXNlb3ZlciJ8fGU9PT0icG9pbnRlcm92ZXIiLHo9ZT09PSJtb3VzZW91dCJ8fGU9PT0icG9pbnRlcm91dCIsRyYmbiE9PVZmJiYob2U9bi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KSYmKEVhKG9lKXx8b2VbZm9dKSlicmVhayBlOyh6fHxHKSYmKG9lPVYud2luZG93PT09Vj9WOihHPVYub3duZXJEb2N1bWVudCk/Ry5kZWZhdWx0Vmlld3x8Ry5wYXJlbnRXaW5kb3c6d2luZG93LHo/KEc9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVudCx6PUwsRz1HP0VhKEcpOm51bGwsRyE9PW51bGwmJihPZT1mKEcpLHZlPUcudGFnLEchPT1PZXx8dmUhPT01JiZ2ZSE9PTI3JiZ2ZSE9PTYpJiYoRz1udWxsKSk6KHo9bnVsbCxHPUwpLHohPT1HJiYodmU9Z2IsUT0ib25Nb3VzZUxlYXZlIixrPSJvbk1vdXNlRW50ZXIiLGo9Im1vdXNlIiwoZT09PSJwb2ludGVyb3V0Inx8ZT09PSJwb2ludGVyb3ZlciIpJiYodmU9YmIsUT0ib25Qb2ludGVyTGVhdmUiLGs9Im9uUG9pbnRlckVudGVyIixqPSJwb2ludGVyIiksT2U9ej09bnVsbD9vZTp3cih6KSxJPUc9PW51bGw/b2U6d3IoRyksb2U9bmV3IHZlKFEsaisibGVhdmUiLHosbixWKSxvZS50YXJnZXQ9T2Usb2UucmVsYXRlZFRhcmdldD1JLFE9bnVsbCxFYShWKT09PUwmJih2ZT1uZXcgdmUoayxqKyJlbnRlciIsRyxuLFYpLHZlLnRhcmdldD1JLHZlLnJlbGF0ZWRUYXJnZXQ9T2UsUT12ZSksT2U9USx2ZT16JiZHP0goeixHLEtOKTpudWxsLHohPT1udWxsJiZwUyhaLG9lLHosdmUsITEpLEchPT1udWxsJiZPZSE9PW51bGwmJnBTKFosT2UsRyx2ZSwhMCkpKX1lOntpZih6PUw/d3IoTCk6d2luZG93LEc9ei5ub2RlTmFtZSYmei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLEc9PT0ic2VsZWN0Inx8Rz09PSJpbnB1dCImJnoudHlwZT09PSJmaWxlIil2YXIgZmU9X2I7ZWxzZSBpZihFYih6KSlpZihPYilmZT0kQTtlbHNle2ZlPVpBO3ZhciBVZT1RQX1lbHNlIEc9ei5ub2RlTmFtZSwhR3x8Ry50b0xvd2VyQ2FzZSgpIT09ImlucHV0Inx8ei50eXBlIT09ImNoZWNrYm94IiYmei50eXBlIT09InJhZGlvIj9MJiZHZihMLmVsZW1lbnRUeXBlKSYmKGZlPV9iKTpmZT1GQTtpZihmZSYmKGZlPWZlKGUsTCkpKXtSYihaLGZlLG4sVik7YnJlYWsgZX1VZSYmVWUoZSx6LEwpfXN3aXRjaChVZT1MP3dyKEwpOndpbmRvdyxlKXtjYXNlImZvY3VzaW4iOihFYihVZSl8fFVlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIikmJihTbz1VZSxsZD1MLE1yPW51bGwpO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOk1yPWxkPVNvPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmFkPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjphZD0hMSxMYihaLG4sVik7YnJlYWs7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKFdBKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6TGIoWixuLFYpfXZhciBnZTtpZihKZillOntzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgU2U9Im9uQ29tcG9zaXRpb25TdGFydCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjpTZT0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpTZT0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1TZT12b2lkIDB9ZWxzZSB4bz9UYihlLG4pJiYoU2U9Im9uQ29tcG9zaXRpb25FbmQiKTplPT09ImtleWRvd24iJiZuLmtleUNvZGU9PT0yMjkmJihTZT0ib25Db21wb3NpdGlvblN0YXJ0Iik7U2UmJih4YiYmbi5sb2NhbGUhPT0ia28iJiYoeG98fFNlIT09Im9uQ29tcG9zaXRpb25TdGFydCI/U2U9PT0ib25Db21wb3NpdGlvbkVuZCImJnhvJiYoZ2U9cGIoKSk6KFBsPVYsS2Y9InZhbHVlImluIFBsP1BsLnZhbHVlOlBsLnRleHRDb250ZW50LHhvPSEwKSksVWU9Q3UoTCxTZSksMDxVZS5sZW5ndGgmJihTZT1uZXcgeWIoU2UsZSxudWxsLG4sViksWi5wdXNoKHtldmVudDpTZSxsaXN0ZW5lcnM6VWV9KSxnZT9TZS5kYXRhPWdlOihnZT13YihuKSxnZSE9PW51bGwmJihTZS5kYXRhPWdlKSkpKSwoZ2U9VkE/WUEoZSxuKTpxQShlLG4pKSYmKFNlPUN1KEwsIm9uQmVmb3JlSW5wdXQiKSwwPFNlLmxlbmd0aCYmKFVlPW5ldyB5Yigib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sViksWi5wdXNoKHtldmVudDpVZSxsaXN0ZW5lcnM6U2V9KSxVZS5kYXRhPWdlKSksVk4oWixlLEwsbixWKX1tUyhaLHQpfSl9ZnVuY3Rpb24gYWkoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBDdShlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixsPVtdO2UhPT1udWxsOyl7dmFyIHI9ZSxjPXIuc3RhdGVOb2RlO2lmKHI9ci50YWcsciE9PTUmJnIhPT0yNiYmciE9PTI3fHxjPT09bnVsbHx8KHI9RXIoZSxuKSxyIT1udWxsJiZsLnVuc2hpZnQoYWkoZSxyLGMpKSxyPUVyKGUsdCksciE9bnVsbCYmbC5wdXNoKGFpKGUscixjKSkpLGUudGFnPT09MylyZXR1cm4gbDtlPWUucmV0dXJufXJldHVybltdfWZ1bmN0aW9uIEtOKGUpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2RvIGU9ZS5yZXR1cm47d2hpbGUoZSYmZS50YWchPT01JiZlLnRhZyE9PTI3KTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBwUyhlLHQsbixsLHIpe2Zvcih2YXIgYz10Ll9yZWFjdE5hbWUsaD1bXTtuIT09bnVsbCYmbiE9PWw7KXt2YXIgUz1uLF89Uy5hbHRlcm5hdGUsTD1TLnN0YXRlTm9kZTtpZihTPVMudGFnLF8hPT1udWxsJiZfPT09bClicmVhaztTIT09NSYmUyE9PTI2JiZTIT09Mjd8fEw9PT1udWxsfHwoXz1MLHI/KEw9RXIobixjKSxMIT1udWxsJiZoLnVuc2hpZnQoYWkobixMLF8pKSk6cnx8KEw9RXIobixjKSxMIT1udWxsJiZoLnB1c2goYWkobixMLF8pKSkpLG49bi5yZXR1cm59aC5sZW5ndGghPT0wJiZlLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOmh9KX12YXIgUU49L1xyXG4/L2csWk49L1x1MDAwMHxcdUZGRkQvZztmdW5jdGlvbiB2UyhlKXtyZXR1cm4odHlwZW9mIGU9PSJzdHJpbmciP2U6IiIrZSkucmVwbGFjZShRTixgCmApLnJlcGxhY2UoWk4sIiIpfWZ1bmN0aW9uIGdTKGUsdCl7cmV0dXJuIHQ9dlModCksdlMoZSk9PT10fWZ1bmN0aW9uIEtlKGUsdCxuLGwscixjKXtzd2l0Y2gobil7Y2FzZSJjaGlsZHJlbiI6aWYodHlwZW9mIGw9PSJzdHJpbmciKXQ9PT0iYm9keSJ8fHQ9PT0idGV4dGFyZWEiJiZsPT09IiJ8fGdvKGUsbCk7ZWxzZSBpZih0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0iYmlnaW50Iil0IT09ImJvZHkiJiZnbyhlLCIiK2wpO2Vsc2UgcmV0dXJuO2JyZWFrO2Nhc2UiY2xhc3NOYW1lIjpwYyhlLCJjbGFzcyIsbCk7YnJlYWs7Y2FzZSJ0YWJJbmRleCI6cGMoZSwidGFiaW5kZXgiLGwpO2JyZWFrO2Nhc2UiZGlyIjpjYXNlInJvbGUiOmNhc2Uidmlld0JveCI6Y2FzZSJ3aWR0aCI6Y2FzZSJoZWlnaHQiOnBjKGUsbixsKTticmVhaztjYXNlInN0eWxlIjpkYihlLGwsYyk7cmV0dXJuO2Nhc2UiZGF0YSI6aWYodCE9PSJvYmplY3QiKXtwYyhlLCJkYXRhIixsKTticmVha31jYXNlInNyYyI6Y2FzZSJocmVmIjppZihsPT09IiImJih0IT09ImEifHxuIT09ImhyZWYiKSl7ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWt9aWYobD09bnVsbHx8dHlwZW9mIGw9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsPT0ic3ltYm9sInx8dHlwZW9mIGw9PSJib29sZWFuIil7ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWt9bD12YyhsKSxlLnNldEF0dHJpYnV0ZShuLGwpO2JyZWFrO2Nhc2UiYWN0aW9uIjpjYXNlImZvcm1BY3Rpb24iOmlmKHR5cGVvZiBsPT0iZnVuY3Rpb24iKXtlLnNldEF0dHJpYnV0ZShuLCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcJ3JlIHRyeWluZyB0byB1c2UgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaW4gYSBzdWJtaXQgZXZlbnQgaGFuZGxlciwgY29uc2lkZXIgYWxzbyBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkuJykiKTticmVha31lbHNlIHR5cGVvZiBjPT0iZnVuY3Rpb24iJiYobj09PSJmb3JtQWN0aW9uIj8odCE9PSJpbnB1dCImJktlKGUsdCwibmFtZSIsci5uYW1lLHIsbnVsbCksS2UoZSx0LCJmb3JtRW5jVHlwZSIsci5mb3JtRW5jVHlwZSxyLG51bGwpLEtlKGUsdCwiZm9ybU1ldGhvZCIsci5mb3JtTWV0aG9kLHIsbnVsbCksS2UoZSx0LCJmb3JtVGFyZ2V0IixyLmZvcm1UYXJnZXQscixudWxsKSk6KEtlKGUsdCwiZW5jVHlwZSIsci5lbmNUeXBlLHIsbnVsbCksS2UoZSx0LCJtZXRob2QiLHIubWV0aG9kLHIsbnVsbCksS2UoZSx0LCJ0YXJnZXQiLHIudGFyZ2V0LHIsbnVsbCkpKTtpZihsPT1udWxsfHx0eXBlb2YgbD09InN5bWJvbCJ8fHR5cGVvZiBsPT0iYm9vbGVhbiIpe2UucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrfWw9dmMobCksZS5zZXRBdHRyaWJ1dGUobixsKTticmVhaztjYXNlIm9uQ2xpY2siOmwhPW51bGwmJihlLm9uY2xpY2s9R24pO3JldHVybjtjYXNlIm9uU2Nyb2xsIjpsIT1udWxsJiZ6ZSgic2Nyb2xsIixlKTtyZXR1cm47Y2FzZSJvblNjcm9sbEVuZCI6bCE9bnVsbCYmemUoInNjcm9sbGVuZCIsZSk7cmV0dXJuO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKGwhPW51bGwpe2lmKHR5cGVvZiBsIT0ib2JqZWN0Inx8ISgiX19odG1sImluIGwpKXRocm93IEVycm9yKGkoNjEpKTtpZihuPWwuX19odG1sLG4hPW51bGwpe2lmKHIuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoaSg2MCkpO2M/Ll9faHRtbCE9PW4mJihlLmlubmVySFRNTD1uKX19YnJlYWs7Y2FzZSJtdWx0aXBsZSI6ZS5tdWx0aXBsZT1sJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiO2JyZWFrO2Nhc2UibXV0ZWQiOmUubXV0ZWQ9bCYmdHlwZW9mIGwhPSJmdW5jdGlvbiImJnR5cGVvZiBsIT0ic3ltYm9sIjticmVhaztjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiZGVmYXVsdFZhbHVlIjpjYXNlImRlZmF1bHRDaGVja2VkIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmJyZWFrO2Nhc2UiYXV0b0ZvY3VzIjpicmVhaztjYXNlInhsaW5rSHJlZiI6aWYobD09bnVsbHx8dHlwZW9mIGw9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsPT0iYm9vbGVhbiJ8fHR5cGVvZiBsPT0ic3ltYm9sIil7ZS5yZW1vdmVBdHRyaWJ1dGUoInhsaW5rOmhyZWYiKTticmVha31uPXZjKGwpLGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazpocmVmIixuKTticmVhaztjYXNlImNvbnRlbnRFZGl0YWJsZSI6Y2FzZSJzcGVsbENoZWNrIjpjYXNlImRyYWdnYWJsZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJhdXRvUmV2ZXJzZSI6Y2FzZSJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIjpjYXNlImZvY3VzYWJsZSI6Y2FzZSJwcmVzZXJ2ZUFscGhhIjpsIT1udWxsJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiP2Uuc2V0QXR0cmlidXRlKG4sbCk6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJpbmVydCI6Y2FzZSJhbGxvd0Z1bGxTY3JlZW4iOmNhc2UiYXN5bmMiOmNhc2UiYXV0b1BsYXkiOmNhc2UiY29udHJvbHMiOmNhc2UiY3JlZGVudGlhbGxlc3MiOmNhc2UiZGVmYXVsdCI6Y2FzZSJkZWZlciI6Y2FzZSJkaXNhYmxlZCI6Y2FzZSJkaXNhYmxlUGljdHVyZUluUGljdHVyZSI6Y2FzZSJkaXNhYmxlUmVtb3RlUGxheWJhY2siOmNhc2UiZm9ybU5vVmFsaWRhdGUiOmNhc2UiaGlkZGVuIjpjYXNlImxvb3AiOmNhc2Uibm9Nb2R1bGUiOmNhc2Uibm9WYWxpZGF0ZSI6Y2FzZSJvcGVuIjpjYXNlInBsYXlzSW5saW5lIjpjYXNlInJlYWRPbmx5IjpjYXNlInJlcXVpcmVkIjpjYXNlInJldmVyc2VkIjpjYXNlInNjb3BlZCI6Y2FzZSJzZWFtbGVzcyI6Y2FzZSJpdGVtU2NvcGUiOmwmJnR5cGVvZiBsIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbCE9InN5bWJvbCI/ZS5zZXRBdHRyaWJ1dGUobiwiIik6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJjYXB0dXJlIjpjYXNlImRvd25sb2FkIjpsPT09ITA/ZS5zZXRBdHRyaWJ1dGUobiwiIik6bCE9PSExJiZsIT1udWxsJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiP2Uuc2V0QXR0cmlidXRlKG4sbCk6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJjb2xzIjpjYXNlInJvd3MiOmNhc2Uic2l6ZSI6Y2FzZSJzcGFuIjpsIT1udWxsJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiJiYhaXNOYU4obCkmJjE8PWw/ZS5zZXRBdHRyaWJ1dGUobixsKTplLnJlbW92ZUF0dHJpYnV0ZShuKTticmVhaztjYXNlInJvd1NwYW4iOmNhc2Uic3RhcnQiOmw9PW51bGx8fHR5cGVvZiBsPT0iZnVuY3Rpb24ifHx0eXBlb2YgbD09InN5bWJvbCJ8fGlzTmFOKGwpP2UucmVtb3ZlQXR0cmlidXRlKG4pOmUuc2V0QXR0cmlidXRlKG4sbCk7YnJlYWs7Y2FzZSJwb3BvdmVyIjp6ZSgiYmVmb3JldG9nZ2xlIixlKSx6ZSgidG9nZ2xlIixlKSxoYyhlLCJwb3BvdmVyIixsKTticmVhaztjYXNlInhsaW5rQWN0dWF0ZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmFjdHVhdGUiLGwpO2JyZWFrO2Nhc2UieGxpbmtBcmNyb2xlIjpobChlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6YXJjcm9sZSIsbCk7YnJlYWs7Y2FzZSJ4bGlua1JvbGUiOmhsKGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazpyb2xlIixsKTticmVhaztjYXNlInhsaW5rU2hvdyI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnNob3ciLGwpO2JyZWFrO2Nhc2UieGxpbmtUaXRsZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnRpdGxlIixsKTticmVhaztjYXNlInhsaW5rVHlwZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnR5cGUiLGwpO2JyZWFrO2Nhc2UieG1sQmFzZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOmJhc2UiLGwpO2JyZWFrO2Nhc2UieG1sTGFuZyI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOmxhbmciLGwpO2JyZWFrO2Nhc2UieG1sU3BhY2UiOmhsKGUsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsbCk7YnJlYWs7Y2FzZSJpcyI6aGMoZSwiaXMiLGwpO2JyZWFrO2Nhc2UiaW5uZXJUZXh0IjpjYXNlInRleHRDb250ZW50IjpyZXR1cm47ZGVmYXVsdDppZighKDI8bi5sZW5ndGgpfHxuWzBdIT09Im8iJiZuWzBdIT09Ik8ifHxuWzFdIT09Im4iJiZuWzFdIT09Ik4iKW49aEEuZ2V0KG4pfHxuLGhjKGUsbixsKTtlbHNlIHJldHVybn1CZT0hMH1mdW5jdGlvbiBJbShlLHQsbixsLHIsYyl7c3dpdGNoKG4pe2Nhc2Uic3R5bGUiOmRiKGUsbCxjKTtyZXR1cm47Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobCE9bnVsbCl7aWYodHlwZW9mIGwhPSJvYmplY3QifHwhKCJfX2h0bWwiaW4gbCkpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG49bC5fX2h0bWwsbiE9bnVsbCl7aWYoci5jaGlsZHJlbiE9bnVsbCl0aHJvdyBFcnJvcihpKDYwKSk7Yz8uX19odG1sIT09biYmKGUuaW5uZXJIVE1MPW4pfX1icmVhaztjYXNlImNoaWxkcmVuIjppZih0eXBlb2YgbD09InN0cmluZyIpZ28oZSxsKTtlbHNlIGlmKHR5cGVvZiBsPT0ibnVtYmVyInx8dHlwZW9mIGw9PSJiaWdpbnQiKWdvKGUsIiIrbCk7ZWxzZSByZXR1cm47YnJlYWs7Y2FzZSJvblNjcm9sbCI6bCE9bnVsbCYmemUoInNjcm9sbCIsZSk7cmV0dXJuO2Nhc2Uib25TY3JvbGxFbmQiOmwhPW51bGwmJnplKCJzY3JvbGxlbmQiLGUpO3JldHVybjtjYXNlIm9uQ2xpY2siOmwhPW51bGwmJihlLm9uY2xpY2s9R24pO3JldHVybjtjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiaW5uZXJIVE1MIjpjYXNlInJlZiI6cmV0dXJuO2Nhc2UiaW5uZXJUZXh0IjpjYXNlInRleHRDb250ZW50IjpyZXR1cm47ZGVmYXVsdDppZighbmIuaGFzT3duUHJvcGVydHkobikpZTp7aWYoblswXT09PSJvIiYmblsxXT09PSJuIiYmKHI9bi5lbmRzV2l0aCgiQ2FwdHVyZSIpLGM9bi5zbGljZSgyLHI/bi5sZW5ndGgtNzp2b2lkIDApLHQ9ZVtYdF18fG51bGwsdD10IT1udWxsP3Rbbl06bnVsbCx0eXBlb2YgdD09ImZ1bmN0aW9uIiYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGMsdCxyKSx0eXBlb2YgbD09ImZ1bmN0aW9uIikpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiZ0IT09bnVsbCYmKG4gaW4gZT9lW25dPW51bGw6ZS5oYXNBdHRyaWJ1dGUobikmJmUucmVtb3ZlQXR0cmlidXRlKG4pKSxlLmFkZEV2ZW50TGlzdGVuZXIoYyxsLHIpO2JyZWFrIGV9QmU9ITAsbiBpbiBlP2Vbbl09bDpsPT09ITA/ZS5zZXRBdHRyaWJ1dGUobiwiIik6aGMoZSxuLGwpfXJldHVybn1CZT0hMH1mdW5jdGlvbiBEdChlLHQsbil7c3dpdGNoKHQpe2Nhc2UiZGl2IjpjYXNlInNwYW4iOmNhc2Uic3ZnIjpjYXNlInBhdGgiOmNhc2UiYSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UibGkiOmJyZWFrO2Nhc2UiaW1nIjp6ZSgiZXJyb3IiLGUpLHplKCJsb2FkIixlKTt2YXIgbD0hMSxyPSExLGM7Zm9yKGMgaW4gbilpZihuLmhhc093blByb3BlcnR5KGMpKXt2YXIgaD1uW2NdO2lmKGghPW51bGwpc3dpdGNoKGMpe2Nhc2Uic3JjIjpsPSEwO2JyZWFrO2Nhc2Uic3JjU2V0IjpyPSEwO2JyZWFrO2Nhc2UiY2hpbGRyZW4iOmNhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOnRocm93IEVycm9yKGkoMTM3LHQpKTtkZWZhdWx0OktlKGUsdCxjLGgsbixudWxsKX19ciYmS2UoZSx0LCJzcmNTZXQiLG4uc3JjU2V0LG4sbnVsbCksbCYmS2UoZSx0LCJzcmMiLG4uc3JjLG4sbnVsbCk7cmV0dXJuO2Nhc2UiaW5wdXQiOnplKCJpbnZhbGlkIixlKTt2YXIgUz1jPWg9cj1udWxsLF89bnVsbCxMPW51bGw7Zm9yKGwgaW4gbilpZihuLmhhc093blByb3BlcnR5KGwpKXt2YXIgVj1uW2xdO2lmKFYhPW51bGwpc3dpdGNoKGwpe2Nhc2UibmFtZSI6cj1WO2JyZWFrO2Nhc2UidHlwZSI6aD1WO2JyZWFrO2Nhc2UiY2hlY2tlZCI6Xz1WO2JyZWFrO2Nhc2UiZGVmYXVsdENoZWNrZWQiOkw9VjticmVhaztjYXNlInZhbHVlIjpjPVY7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOlM9VjticmVhaztjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihWIT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OktlKGUsdCxsLFYsbixudWxsKX19Y2IoZSxjLFMsXyxMLGgsciwhMSk7cmV0dXJuO2Nhc2Uic2VsZWN0Ijp6ZSgiaW52YWxpZCIsZSksbD1oPWM9bnVsbDtmb3IociBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikmJihTPW5bcl0sUyE9bnVsbCkpc3dpdGNoKHIpe2Nhc2UidmFsdWUiOmM9UzticmVhaztjYXNlImRlZmF1bHRWYWx1ZSI6aD1TO2JyZWFrO2Nhc2UibXVsdGlwbGUiOmw9UztkZWZhdWx0OktlKGUsdCxyLFMsbixudWxsKX10PWMsbj1oLGUubXVsdGlwbGU9ISFsLHQhPW51bGw/dm8oZSwhIWwsdCwhMSk6biE9bnVsbCYmdm8oZSwhIWwsbiwhMCk7cmV0dXJuO2Nhc2UidGV4dGFyZWEiOnplKCJpbnZhbGlkIixlKSxjPXI9bD1udWxsO2ZvcihoIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShoKSYmKFM9bltoXSxTIT1udWxsKSlzd2l0Y2goaCl7Y2FzZSJ2YWx1ZSI6bD1TO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyPVM7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6Yz1TO2JyZWFrO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKFMhPW51bGwpdGhyb3cgRXJyb3IoaSg5MSkpO2JyZWFrO2RlZmF1bHQ6S2UoZSx0LGgsUyxuLG51bGwpfXNiKGUsbCxyLGMpO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKF8gaW4gbiluLmhhc093blByb3BlcnR5KF8pJiYobD1uW19dLGwhPW51bGwpJiYoXz09PSJzZWxlY3RlZCI/ZS5zZWxlY3RlZD1sJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiOktlKGUsdCxfLGwsbixudWxsKSk7cmV0dXJuO2Nhc2UiZGlhbG9nIjp6ZSgiYmVmb3JldG9nZ2xlIixlKSx6ZSgidG9nZ2xlIixlKSx6ZSgiY2FuY2VsIixlKSx6ZSgiY2xvc2UiLGUpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6emUoImxvYWQiLGUpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihsPTA7bDxsaS5sZW5ndGg7bCsrKXplKGxpW2xdLGUpO2JyZWFrO2Nhc2UiaW1hZ2UiOnplKCJlcnJvciIsZSksemUoImxvYWQiLGUpO2JyZWFrO2Nhc2UiZGV0YWlscyI6emUoInRvZ2dsZSIsZSk7YnJlYWs7Y2FzZSJlbWJlZCI6Y2FzZSJzb3VyY2UiOmNhc2UibGluayI6emUoImVycm9yIixlKSx6ZSgibG9hZCIsZSk7Y2FzZSJhcmVhIjpjYXNlImJhc2UiOmNhc2UiYnIiOmNhc2UiY29sIjpjYXNlImhyIjpjYXNlImtleWdlbiI6Y2FzZSJtZXRhIjpjYXNlInBhcmFtIjpjYXNlInRyYWNrIjpjYXNlIndiciI6Y2FzZSJtZW51aXRlbSI6Zm9yKEwgaW4gbilpZihuLmhhc093blByb3BlcnR5KEwpJiYobD1uW0xdLGwhPW51bGwpKXN3aXRjaChMKXtjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjp0aHJvdyBFcnJvcihpKDEzNyx0KSk7ZGVmYXVsdDpLZShlLHQsTCxsLG4sbnVsbCl9cmV0dXJuO2RlZmF1bHQ6aWYoR2YodCkpe2ZvcihWIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShWKSYmKGw9bltWXSxsIT09dm9pZCAwJiZJbShlLHQsVixsLG4sdm9pZCAwKSk7cmV0dXJufX1mb3IoUyBpbiBuKW4uaGFzT3duUHJvcGVydHkoUykmJihsPW5bU10sbCE9bnVsbCYmS2UoZSx0LFMsbCxuLG51bGwpKX12YXIgRk49e307ZnVuY3Rpb24gJE4oZSx0LG4sbCl7c3dpdGNoKHQpe2Nhc2UiZGl2IjpjYXNlInNwYW4iOmNhc2Uic3ZnIjpjYXNlInBhdGgiOmNhc2UiYSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UibGkiOmJyZWFrO2Nhc2UiaW5wdXQiOnZhciByPW51bGwsYz1udWxsLGg9bnVsbCxTPW51bGwsXz1udWxsLEw9bnVsbCxWPW51bGw7Zm9yKEcgaW4gbil7dmFyIFo9bltHXTtpZihuLmhhc093blByb3BlcnR5KEcpJiZaIT1udWxsKXN3aXRjaChHKXtjYXNlImNoZWNrZWQiOmJyZWFrO2Nhc2UidmFsdWUiOmJyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpfPVo7ZGVmYXVsdDpsLmhhc093blByb3BlcnR5KEcpfHxLZShlLHQsRyxudWxsLGwsWil9fWZvcih2YXIgeiBpbiBsKXt2YXIgRz1sW3pdO2lmKFo9blt6XSxsLmhhc093blByb3BlcnR5KHopJiYoRyE9bnVsbHx8WiE9bnVsbCkpc3dpdGNoKHope2Nhc2UidHlwZSI6RyE9PVomJihCZT0hMCksYz1HO2JyZWFrO2Nhc2UibmFtZSI6RyE9PVomJihCZT0hMCkscj1HO2JyZWFrO2Nhc2UiY2hlY2tlZCI6RyE9PVomJihCZT0hMCksTD1HO2JyZWFrO2Nhc2UiZGVmYXVsdENoZWNrZWQiOkchPT1aJiYoQmU9ITApLFY9RzticmVhaztjYXNlInZhbHVlIjpHIT09WiYmKEJlPSEwKSxoPUc7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOkchPT1aJiYoQmU9ITApLFM9RzticmVhaztjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihHIT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OkchPT1aJiZLZShlLHQseixHLGwsWil9fUlmKGUsaCxTLF8sTCxWLGMscik7cmV0dXJuO2Nhc2Uic2VsZWN0IjpHPWg9Uz16PW51bGw7Zm9yKGMgaW4gbilpZihfPW5bY10sbi5oYXNPd25Qcm9wZXJ0eShjKSYmXyE9bnVsbClzd2l0Y2goYyl7Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJtdWx0aXBsZSI6Rz1fO2RlZmF1bHQ6bC5oYXNPd25Qcm9wZXJ0eShjKXx8S2UoZSx0LGMsbnVsbCxsLF8pfWZvcihyIGluIGwpaWYoYz1sW3JdLF89bltyXSxsLmhhc093blByb3BlcnR5KHIpJiYoYyE9bnVsbHx8XyE9bnVsbCkpc3dpdGNoKHIpe2Nhc2UidmFsdWUiOmMhPT1fJiYoQmU9ITApLHo9YzticmVhaztjYXNlImRlZmF1bHRWYWx1ZSI6YyE9PV8mJihCZT0hMCksUz1jO2JyZWFrO2Nhc2UibXVsdGlwbGUiOmMhPT1fJiYoQmU9ITApLGg9YztkZWZhdWx0OmMhPT1fJiZLZShlLHQscixjLGwsXyl9dD1TLG49aCxsPUcseiE9bnVsbD92byhlLCEhbix6LCExKTohIWwhPSEhbiYmKHQhPW51bGw/dm8oZSwhIW4sdCwhMCk6dm8oZSwhIW4sbj9bXToiIiwhMSkpO3JldHVybjtjYXNlInRleHRhcmVhIjpHPXo9bnVsbDtmb3IoUyBpbiBuKWlmKHI9bltTXSxuLmhhc093blByb3BlcnR5KFMpJiZyIT1udWxsJiYhbC5oYXNPd25Qcm9wZXJ0eShTKSlzd2l0Y2goUyl7Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YnJlYWs7ZGVmYXVsdDpLZShlLHQsUyxudWxsLGwscil9Zm9yKGggaW4gbClpZihyPWxbaF0sYz1uW2hdLGwuaGFzT3duUHJvcGVydHkoaCkmJihyIT1udWxsfHxjIT1udWxsKSlzd2l0Y2goaCl7Y2FzZSJ2YWx1ZSI6ciE9PWMmJihCZT0hMCksej1yO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyIT09YyYmKEJlPSEwKSxHPXI7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYociE9bnVsbCl0aHJvdyBFcnJvcihpKDkxKSk7YnJlYWs7ZGVmYXVsdDpyIT09YyYmS2UoZSx0LGgscixsLGMpfXViKGUseixHKTtyZXR1cm47Y2FzZSJvcHRpb24iOmZvcih2YXIgb2UgaW4gbil6PW5bb2VdLG4uaGFzT3duUHJvcGVydHkob2UpJiZ6IT1udWxsJiYhbC5oYXNPd25Qcm9wZXJ0eShvZSkmJihvZT09PSJzZWxlY3RlZCI/ZS5zZWxlY3RlZD0hMTpLZShlLHQsb2UsbnVsbCxsLHopKTtmb3IoXyBpbiBsKXo9bFtfXSxHPW5bX10sbC5oYXNPd25Qcm9wZXJ0eShfKSYmeiE9PUcmJih6IT1udWxsfHxHIT1udWxsKSYmKF89PT0ic2VsZWN0ZWQiPyh6IT09RyYmKEJlPSEwKSxlLnNlbGVjdGVkPXomJnR5cGVvZiB6IT0iZnVuY3Rpb24iJiZ0eXBlb2YgeiE9InN5bWJvbCIpOktlKGUsdCxfLHosbCxHKSk7cmV0dXJuO2Nhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2UiYXJlYSI6Y2FzZSJiYXNlIjpjYXNlImJyIjpjYXNlImNvbCI6Y2FzZSJlbWJlZCI6Y2FzZSJociI6Y2FzZSJrZXlnZW4iOmNhc2UibWV0YSI6Y2FzZSJwYXJhbSI6Y2FzZSJzb3VyY2UiOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IodmFyIHZlIGluIG4pej1uW3ZlXSxuLmhhc093blByb3BlcnR5KHZlKSYmeiE9bnVsbCYmIWwuaGFzT3duUHJvcGVydHkodmUpJiZLZShlLHQsdmUsbnVsbCxsLHopO2ZvcihMIGluIGwpaWYoej1sW0xdLEc9bltMXSxsLmhhc093blByb3BlcnR5KEwpJiZ6IT09RyYmKHohPW51bGx8fEchPW51bGwpKXN3aXRjaChMKXtjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZih6IT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OktlKGUsdCxMLHosbCxHKX1yZXR1cm47ZGVmYXVsdDppZihHZih0KSl7Zm9yKHZhciBPZSBpbiBuKXo9bltPZV0sbi5oYXNPd25Qcm9wZXJ0eShPZSkmJnohPT12b2lkIDAmJiFsLmhhc093blByb3BlcnR5KE9lKSYmSW0oZSx0LE9lLHZvaWQgMCxsLHopO2ZvcihWIGluIGwpej1sW1ZdLEc9bltWXSwhbC5oYXNPd25Qcm9wZXJ0eShWKXx8ej09PUd8fHo9PT12b2lkIDAmJkc9PT12b2lkIDB8fEltKGUsdCxWLHosbCxHKTtyZXR1cm59fWZvcih2YXIgayBpbiBuKXo9bltrXSxuLmhhc093blByb3BlcnR5KGspJiZ6IT1udWxsJiYhbC5oYXNPd25Qcm9wZXJ0eShrKSYmS2UoZSx0LGssbnVsbCxsLHopO2ZvcihaIGluIGwpej1sW1pdLEc9bltaXSwhbC5oYXNPd25Qcm9wZXJ0eShaKXx8ej09PUd8fHo9PW51bGwmJkc9PW51bGx8fEtlKGUsdCxaLHosbCxHKX1mdW5jdGlvbiB5UyhlKXtzd2l0Y2goZSl7Y2FzZSJjc3MiOmNhc2Uic2NyaXB0IjpjYXNlImZvbnQiOmNhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImlucHV0IjpjYXNlImxpbmsiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEpOKCl7aWYodHlwZW9mIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGU9PSJmdW5jdGlvbiIpe2Zvcih2YXIgZT0wLHQ9MCxuPXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoInJlc291cmNlIiksbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgcj1uW2xdLGM9ci50cmFuc2ZlclNpemUsaD1yLmluaXRpYXRvclR5cGUsUz1yLmR1cmF0aW9uO2lmKGMmJlMmJnlTKGgpKXtmb3IoaD0wLFM9ci5yZXNwb25zZUVuZCxsKz0xO2w8bi5sZW5ndGg7bCsrKXt2YXIgXz1uW2xdLEw9Xy5zdGFydFRpbWU7aWYoTD5TKWJyZWFrO3ZhciBWPV8udHJhbnNmZXJTaXplLFo9Xy5pbml0aWF0b3JUeXBlO1YmJnlTKFopJiYoXz1fLnJlc3BvbnNlRW5kLGgrPVYqKF88Uz8xOihTLUwpLyhfLUwpKSl9aWYoLS1sLHQrPTgqKGMraCkvKHIuZHVyYXRpb24vMWUzKSxlKyssMTA8ZSlicmVha319aWYoMDxlKXJldHVybiB0L2UvMWU2fXJldHVybiBuYXZpZ2F0b3IuY29ubmVjdGlvbiYmKGU9bmF2aWdhdG9yLmNvbm5lY3Rpb24uZG93bmxpbmssdHlwZW9mIGU9PSJudW1iZXIiKT9lOjV9dmFyIFBtPW51bGwsR209bnVsbDtmdW5jdGlvbiBvaShlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gYlMoZSl7c3dpdGNoKGUpe2Nhc2UiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOnJldHVybiAxO2Nhc2UiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24geFMoZSx0KXtpZihlPT09MClzd2l0Y2godCl7Y2FzZSJzdmciOnJldHVybiAxO2Nhc2UibWF0aCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH1yZXR1cm4gZT09PTEmJnQ9PT0iZm9yZWlnbk9iamVjdCI/MDplfWZ1bmN0aW9uIFNTKGUsdCxuLGwpe3JldHVybiBuPW9pKG4pLmNyZWF0ZUVsZW1lbnQoZSksbltSdF09bCxuW1h0XT10LER0KG4sZSx0KSxidChuKSxufWZ1bmN0aW9uIFZtKGUsdCl7cmV0dXJuIGU9PT0idGV4dGFyZWEifHxlPT09Im5vc2NyaXB0Inx8dHlwZW9mIHQuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgdC5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0iYmlnaW50Inx8dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9PSJvYmplY3QiJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT09bnVsbCYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwhPW51bGx9dmFyIFltPW51bGw7ZnVuY3Rpb24gV04oKXt2YXIgZT13aW5kb3cuZXZlbnQ7cmV0dXJuIGUmJmUudHlwZT09PSJwb3BzdGF0ZSI/ZT09PVltPyExOihZbT1lLCEwKTooWW09bnVsbCwhMSl9dmFyIHFtPXR5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP3NldFRpbWVvdXQ6dm9pZCAwLGVEPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0OnZvaWQgMCxDUz10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlOnZvaWQgMCxUUz10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iP3JlcXVlc3RBbmltYXRpb25GcmFtZTpxbSx0RD10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PSJmdW5jdGlvbiI/cXVldWVNaWNyb3Rhc2s6dHlwZW9mIENTPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gQ1MucmVzb2x2ZShudWxsKS50aGVuKGUpLmNhdGNoKG5EKX06cW07ZnVuY3Rpb24gbkQoZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX1mdW5jdGlvbiBpYShlKXtyZXR1cm4gZT09PSJoZWFkIn1mdW5jdGlvbiB3UyhlLHQpe3ZhciBuPXQsbD0wO2Rve3ZhciByPW4ubmV4dFNpYmxpbmc7aWYoZS5yZW1vdmVDaGlsZChuKSxyJiZyLm5vZGVUeXBlPT09OClpZihuPXIuZGF0YSxuPT09Ii8kInx8bj09PSIvJiIpe2lmKGw9PT0wKXtlLnJlbW92ZUNoaWxkKHIpLGVyKHQpO3JldHVybn1sLS19ZWxzZSBpZihuPT09IiQifHxuPT09IiQ/Inx8bj09PSIkfiJ8fG49PT0iJCEifHxuPT09IiYiKWwrKztlbHNlIGlmKG49PT0iaHRtbCIpV20oZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7ZWxzZSBpZihuPT09ImhlYWQiKXtuPWUub3duZXJEb2N1bWVudC5oZWFkLFdtKG4pO2Zvcih2YXIgYz1uLmZpcnN0Q2hpbGQ7Yzspe3ZhciBoPWMubmV4dFNpYmxpbmcsUz1jLm5vZGVOYW1lO2NbVHJdfHxTPT09IlNDUklQVCJ8fFM9PT0iU1RZTEUifHxTPT09IkxJTksiJiZjLnJlbC50b0xvd2VyQ2FzZSgpPT09InN0eWxlc2hlZXQifHxuLnJlbW92ZUNoaWxkKGMpLGM9aH19ZWxzZSBuPT09ImJvZHkiJiZXbShlLm93bmVyRG9jdW1lbnQuYm9keSk7bj1yfXdoaWxlKG4pO2VyKHQpfWZ1bmN0aW9uIEVTKGUsdCl7dmFyIG49ZTtlPTA7ZG97dmFyIGw9bi5uZXh0U2libGluZztpZihuLm5vZGVUeXBlPT09MT90PyhuLl9zdGFzaGVkRGlzcGxheT1uLnN0eWxlLmRpc3BsYXksbi5zdHlsZS5kaXNwbGF5PSJub25lIik6KG4uc3R5bGUuZGlzcGxheT1uLl9zdGFzaGVkRGlzcGxheXx8IiIsbi5nZXRBdHRyaWJ1dGUoInN0eWxlIik9PT0iIiYmbi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIikpOm4ubm9kZVR5cGU9PT0zJiYodD8obi5fc3Rhc2hlZFRleHQ9bi5ub2RlVmFsdWUsbi5ub2RlVmFsdWU9IiIpOm4ubm9kZVZhbHVlPW4uX3N0YXNoZWRUZXh0fHwiIiksbCYmbC5ub2RlVHlwZT09PTgpaWYobj1sLmRhdGEsbj09PSIvJCIpe2lmKGU9PT0wKWJyZWFrO2UtLX1lbHNlIG4hPT0iJCImJm4hPT0iJD8iJiZuIT09IiR+IiYmbiE9PSIkISJ8fGUrKztuPWx9d2hpbGUobil9ZnVuY3Rpb24gUlMoZSx0LG4pe2lmKHQ9Q1NTLmVzY2FwZSh0KSE9PXQ/InItIitidG9hKHQpLnJlcGxhY2UoLz0vZywiIik6dCxlLnN0eWxlLnZpZXdUcmFuc2l0aW9uTmFtZT10LG4hPW51bGwmJihlLnN0eWxlLnZpZXdUcmFuc2l0aW9uQ2xhc3M9biksbj1nZXRDb21wdXRlZFN0eWxlKGUpLG4uZGlzcGxheT09PSJpbmxpbmUiKXtpZih0PWUuZ2V0Q2xpZW50UmVjdHMoKSx0Lmxlbmd0aD09PTEpdmFyIGw9MTtlbHNlIGZvcih2YXIgcj1sPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBjPXRbcl07MDxjLndpZHRoJiYwPGMuaGVpZ2h0JiZsKyt9bD09PTEmJihlPWUuc3R5bGUsZS5kaXNwbGF5PXQubGVuZ3RoPT09MT8iaW5saW5lLWJsb2NrIjoiYmxvY2siLGUubWFyZ2luVG9wPSItIituLnBhZGRpbmdUb3AsZS5tYXJnaW5Cb3R0b209Ii0iK24ucGFkZGluZ0JvdHRvbSl9fWZ1bmN0aW9uIF9TKGUsdCl7ZT1lLnN0eWxlLHQ9dC5zdHlsZTt2YXIgbj10IT1udWxsP3QuaGFzT3duUHJvcGVydHkoInZpZXdUcmFuc2l0aW9uTmFtZSIpP3Qudmlld1RyYW5zaXRpb25OYW1lOnQuaGFzT3duUHJvcGVydHkoInZpZXctdHJhbnNpdGlvbi1uYW1lIik/dFsidmlldy10cmFuc2l0aW9uLW5hbWUiXTpudWxsOm51bGw7ZS52aWV3VHJhbnNpdGlvbk5hbWU9bj09bnVsbHx8dHlwZW9mIG49PSJib29sZWFuIj8iIjooIiIrbikudHJpbSgpLG49dCE9bnVsbD90Lmhhc093blByb3BlcnR5KCJ2aWV3VHJhbnNpdGlvbkNsYXNzIik/dC52aWV3VHJhbnNpdGlvbkNsYXNzOnQuaGFzT3duUHJvcGVydHkoInZpZXctdHJhbnNpdGlvbi1jbGFzcyIpP3RbInZpZXctdHJhbnNpdGlvbi1jbGFzcyJdOm51bGw6bnVsbCxlLnZpZXdUcmFuc2l0aW9uQ2xhc3M9bj09bnVsbHx8dHlwZW9mIG49PSJib29sZWFuIj8iIjooIiIrbikudHJpbSgpLGUuZGlzcGxheT09PSJpbmxpbmUtYmxvY2siJiYodD09bnVsbD9lLmRpc3BsYXk9ZS5tYXJnaW49IiI6KG49dC5kaXNwbGF5LGUuZGlzcGxheT1uPT1udWxsfHx0eXBlb2Ygbj09ImJvb2xlYW4iPyIiOm4sbj10Lm1hcmdpbixuIT1udWxsP2UubWFyZ2luPW46KG49dC5oYXNPd25Qcm9wZXJ0eSgibWFyZ2luVG9wIik/dC5tYXJnaW5Ub3A6dFsibWFyZ2luLXRvcCJdLGUubWFyZ2luVG9wPW49PW51bGx8fHR5cGVvZiBuPT0iYm9vbGVhbiI/IiI6bix0PXQuaGFzT3duUHJvcGVydHkoIm1hcmdpbkJvdHRvbSIpP3QubWFyZ2luQm90dG9tOnRbIm1hcmdpbi1ib3R0b20iXSxlLm1hcmdpbkJvdHRvbT10PT1udWxsfHx0eXBlb2YgdD09ImJvb2xlYW4iPyIiOnQpKSl9ZnVuY3Rpb24gbEQoZSx0LG4pe3JldHVybiBuPW4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7cmVjdDplLGFiczp0LnBvc2l0aW9uPT09ImFic29sdXRlInx8dC5wb3NpdGlvbj09PSJmaXhlZCIsY2xpcDp0LmNsaXBQYXRoIT09Im5vbmUifHx0Lm92ZXJmbG93IT09InZpc2libGUifHx0LmZpbHRlciE9PSJub25lInx8dC5tYXNrIT09Im5vbmUifHx0Lm1hc2shPT0ibm9uZSJ8fHQuYm9yZGVyUmFkaXVzIT09IjBweCIsdmlldzowPD1lLmJvdHRvbSYmMDw9ZS5yaWdodCYmZS50b3A8PW4uaW5uZXJIZWlnaHQmJmUubGVmdDw9bi5pbm5lcldpZHRofX1mdW5jdGlvbiBYbShlKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49Z2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gbEQodCxuLGUpfWZ1bmN0aW9uIGFEKGUpe3JldHVybiBlLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gb0QoZSl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixlKX1mdW5jdGlvbiByRChlLHQsbixsLHIsYyxoLFMsXyl7dmFyIEw9dC5ub2RlVHlwZT09PTk/dDp0Lm93bmVyRG9jdW1lbnQ7dHJ5e3ZhciBWPUwuc3RhcnRWaWV3VHJhbnNpdGlvbih7dXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHo9TC5kZWZhdWx0VmlldyxHPXoubmF2aWdhdGlvbiYmei5uYXZpZ2F0aW9uLnRyYW5zaXRpb24sb2U9TC5mb250cy5zdGF0dXM7bCgpO3ZhciB2ZT1bXTtpZihvZT09PSJsb2FkZWQiJiYoYUQoTCksTC5mb250cy5zdGF0dXM9PT0ibG9hZGluZyImJnZlLnB1c2goTC5mb250cy5yZWFkeSkpLG9lPXZlLmxlbmd0aCxlIT09bnVsbClmb3IodmFyIE9lPWUuc3VzcGVuc2V5SW1hZ2VzLGs9MCxqPTA7ajxPZS5sZW5ndGg7aisrKXt2YXIgST1PZVtqXTtpZighSS5jb21wbGV0ZSl7dmFyIFE9SS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPFEuYm90dG9tJiYwPFEucmlnaHQmJlEudG9wPHouaW5uZXJIZWlnaHQmJlEubGVmdDx6LmlubmVyV2lkdGgpe2lmKGsrPVFTKEkpLGs+RXUpe3ZlLmxlbmd0aD1vZTticmVha31JPW5ldyBQcm9taXNlKG9ELmJpbmQoSSkpLHZlLnB1c2goSSl9fX1pZigwPHZlLmxlbmd0aClyZXR1cm4gej1Qcm9taXNlLnJhY2UoW1Byb21pc2UuYWxsKHZlKSxuZXcgUHJvbWlzZShmdW5jdGlvbihmZSl7cmV0dXJuIHNldFRpbWVvdXQoZmUsNTAwKX0pXSkudGhlbihyLHIpLChHP1Byb21pc2UuYWxsU2V0dGxlZChbRy5maW5pc2hlZCx6XSk6eikudGhlbihjLGMpO2lmKHIoKSxHKXJldHVybiBHLmZpbmlzaGVkLnRoZW4oYyxjKTtjKCl9LHR5cGVzOm59KTtMLl9fcmVhY3RWaWV3VHJhbnNpdGlvbj1WO3ZhciBaPVtdO3JldHVybiBWLnJlYWR5LnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHo9TC5kb2N1bWVudEVsZW1lbnQuZ2V0QW5pbWF0aW9ucyh7c3VidHJlZTohMH0pLEc9MDtHPHoubGVuZ3RoO0crKyl7dmFyIG9lPXpbR10sdmU9b2UuZWZmZWN0LE9lPXZlLnBzZXVkb0VsZW1lbnQ7aWYoT2UhPW51bGwmJk9lLnN0YXJ0c1dpdGgoIjo6dmlldy10cmFuc2l0aW9uIikpe1oucHVzaChvZSksb2U9dmUuZ2V0S2V5ZnJhbWVzKCk7Zm9yKHZhciBrPU9lPXZvaWQgMCxqPSEwLEk9MDtJPG9lLmxlbmd0aDtJKyspe3ZhciBRPW9lW0ldLGZlPVEud2lkdGg7aWYoT2U9PT12b2lkIDApT2U9ZmU7ZWxzZSBpZihPZSE9PWZlKXtqPSExO2JyZWFrfWlmKGZlPVEuaGVpZ2h0LGs9PT12b2lkIDApaz1mZTtlbHNlIGlmKGshPT1mZSl7aj0hMTticmVha31kZWxldGUgUS53aWR0aCxkZWxldGUgUS5oZWlnaHQsUS50cmFuc2Zvcm09PT0ibm9uZSImJmRlbGV0ZSBRLnRyYW5zZm9ybX1qJiZPZSE9PXZvaWQgMCYmayE9PXZvaWQgMCYmKHZlLnNldEtleWZyYW1lcyhvZSksaj1nZXRDb21wdXRlZFN0eWxlKHZlLnRhcmdldCx2ZS5wc2V1ZG9FbGVtZW50KSxqLndpZHRoIT09T2V8fGouaGVpZ2h0IT09aykmJihqPW9lWzBdLGoud2lkdGg9T2Usai5oZWlnaHQ9ayxqPW9lW29lLmxlbmd0aC0xXSxqLndpZHRoPU9lLGouaGVpZ2h0PWssdmUuc2V0S2V5ZnJhbWVzKG9lKSl9fWgoKX0sZnVuY3Rpb24oeil7TC5fX3JlYWN0Vmlld1RyYW5zaXRpb249PT1WJiYoTC5fX3JlYWN0Vmlld1RyYW5zaXRpb249bnVsbCk7dHJ5e3R5cGVvZiB6PT0ib2JqZWN0IiYmeiE9PW51bGwmJnoubmFtZT09PSJJbnZhbGlkU3RhdGVFcnJvciImJih6Lm1lc3NhZ2U9PT0iVmlldyB0cmFuc2l0aW9uIHdhcyBza2lwcGVkIGJlY2F1c2UgZG9jdW1lbnQgdmlzaWJpbGl0eSBzdGF0ZSBpcyBoaWRkZW4uInx8ei5tZXNzYWdlPT09IlNraXBwaW5nIHZpZXcgdHJhbnNpdGlvbiBiZWNhdXNlIGRvY3VtZW50IHZpc2liaWxpdHkgc3RhdGUgaGFzIGJlY29tZSBoaWRkZW4uInx8ei5tZXNzYWdlPT09IlNraXBwaW5nIHZpZXcgdHJhbnNpdGlvbiBiZWNhdXNlIHZpZXdwb3J0IHNpemUgY2hhbmdlZC4ifHx6Lm1lc3NhZ2U9PT0iVHJhbnNpdGlvbiB3YXMgYWJvcnRlZCBiZWNhdXNlIG9mIGludmFsaWQgc3RhdGUiKSYmKHo9bnVsbCkseiE9PW51bGwmJl8oeil9ZmluYWxseXtsKCkscigpLGgoKX19KSxWLmZpbmlzaGVkLmZpbmFsbHkoZnVuY3Rpb24oKXtmb3IodmFyIHo9MDt6PFoubGVuZ3RoO3orKylaW3pdLmNhbmNlbCgpO0wuX19yZWFjdFZpZXdUcmFuc2l0aW9uPT09ViYmKEwuX19yZWFjdFZpZXdUcmFuc2l0aW9uPW51bGwpLFMoKX0pLFZ9Y2F0Y2h7cmV0dXJuIGwoKSxyKCksaCgpLG51bGx9fWZ1bmN0aW9uIFhhKGUsdCl7dGhpcy5fc2NvcGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuX3NlbGVjdG9yPSI6OnZpZXctdHJhbnNpdGlvbi0iK2UrIigiK3QrIikifVhhLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PSJudW1iZXIiP3tkdXJhdGlvbjp0fTpVKHt9LHQpLHQucHNldWRvRWxlbWVudD10aGlzLl9zZWxlY3Rvcix0aGlzLl9zY29wZS5hbmltYXRlKGUsdCl9LFhhLnByb3RvdHlwZS5nZXRBbmltYXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX3Njb3BlLHQ9dGhpcy5fc2VsZWN0b3Isbj1lLmdldEFuaW1hdGlvbnMoe3N1YnRyZWU6ITB9KSxsPVtdLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGM9bltyXS5lZmZlY3Q7YyE9PW51bGwmJmMudGFyZ2V0PT09ZSYmYy5wc2V1ZG9FbGVtZW50PT09dCYmbC5wdXNoKG5bcl0pfXJldHVybiBsfSxYYS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbigpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX3Njb3BlLHRoaXMuX3NlbGVjdG9yKX07ZnVuY3Rpb24gT1MoZSl7cmV0dXJue25hbWU6ZSxncm91cDpuZXcgWGEoImdyb3VwIixlKSxpbWFnZVBhaXI6bmV3IFhhKCJpbWFnZS1wYWlyIixlKSxvbGQ6bmV3IFhhKCJvbGQiLGUpLG5ldzpuZXcgWGEoIm5ldyIsZSl9fWZ1bmN0aW9uIGZuKGUpe3RoaXMuX2ZyYWdtZW50RmliZXI9ZSx0aGlzLl9vYnNlcnZlcnM9dGhpcy5fZXZlbnRMaXN0ZW5lcnM9bnVsbH1mbi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbil7dmFyIGw9bnVsbCxyPW51bGw7aWYoIShuIT1udWxsJiZ0eXBlb2YgbiE9ImJvb2xlYW4iJiYobD1uLnNpZ25hbHx8bnVsbCxsIT09bnVsbCYmbC5hYm9ydGVkKSkpe3RoaXMuX2V2ZW50TGlzdGVuZXJzPT09bnVsbCYmKHRoaXMuX2V2ZW50TGlzdGVuZXJzPVtdKTt2YXIgYz10aGlzLl9ldmVudExpc3RlbmVycztpZihOUyhjLGUsdCxuKT09PS0xKXt2YXIgaD10aGlzLFM9dDtuIT1udWxsJiZ0eXBlb2YgbiE9ImJvb2xlYW4iJiZuLm9uY2U9PT0hMCYmKFM9ZnVuY3Rpb24oXyl7aC5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCxuKSx0eXBlb2YgdD09ImZ1bmN0aW9uIj90LmNhbGwodGhpcyxfKTp0LmhhbmRsZUV2ZW50KF8pfSksbCE9PW51bGwmJihyPWgucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGgsZSx0LG4pLGwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIse29uY2U6ITB9KSxyPWwucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGwsImFib3J0IixyKSksbD1RbyhuKSxjLnB1c2goe3R5cGU6ZSxsaXN0ZW5lcjp0LG9wdGlvbnNPclVzZUNhcHR1cmU6bixhdHRhY2hlZExpc3RlbmVyOlMsY2xlYW51cDpyfSksZyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLGlELGUsUyxsKX10aGlzLl9ldmVudExpc3RlbmVycz1jfX07ZnVuY3Rpb24gaUQoZSx0LG4sbCl7cmV0dXJuIFQoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LG4sbCksITF9Zm4ucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPXRoaXMuX2V2ZW50TGlzdGVuZXJzO2lmKGwhPT1udWxsJiYodD1OUyhsLGUsdCxuKSx0IT09LTEpKXt2YXIgcj1sW3RdO249ci5hdHRhY2hlZExpc3RlbmVyO3ZhciBjPXIuY2xlYW51cDtyPVFvKHIub3B0aW9uc09yVXNlQ2FwdHVyZSksZyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLGNELGUsbixyKSxsLnNwbGljZSh0LDEpLGMhPT1udWxsJiZjKCl9fTtmdW5jdGlvbiBjRChlLHQsbixsKXtyZXR1cm4gVChlKS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixsKSwhMX1mdW5jdGlvbiBRbyhlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGUhPSJib29sZWFuIiYmKGUub25jZT09PSEwfHxlLnNpZ25hbCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmV9OmV9ZnVuY3Rpb24gQVMoZSl7cmV0dXJuIGU9PW51bGw/ImM9MCI6dHlwZW9mIGU9PSJib29sZWFuIj8iYz0iKyhlPyIxIjoiMCIpOiJjPSIrKGUuY2FwdHVyZT8iMSI6IjAiKX1mdW5jdGlvbiBOUyhlLHQsbixsKXtpZihlLmxlbmd0aD09PTApcmV0dXJuLTE7bD1BUyhsKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGM9ZVtyXTtpZihjLnR5cGU9PT10JiZjLmxpc3RlbmVyPT09biYmQVMoYy5vcHRpb25zT3JVc2VDYXB0dXJlKT09PWwpcmV0dXJuIHJ9cmV0dXJuLTF9Zm4ucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9Qyh0aGlzLl9mcmFnbWVudEZpYmVyKTtpZih0PT09bnVsbClyZXR1cm4hMDt0PVQodCk7dmFyIG49dGhpcy5fZXZlbnRMaXN0ZW5lcnM7aWYobiE9PW51bGwmJjA8bi5sZW5ndGh8fCFlLmJ1YmJsZXMpe3ZhciBsPXQubm9kZVR5cGU9PT05P3QuY3JlYXRlQ29tbWVudCgiIik6ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBjPW5bcl07bC5hZGRFdmVudExpc3RlbmVyKGMudHlwZSxjLmF0dGFjaGVkTGlzdGVuZXIsUW8oYy5vcHRpb25zT3JVc2VDYXB0dXJlKSl9aWYodC5hcHBlbmRDaGlsZChsKSxlPWwuZGlzcGF0Y2hFdmVudChlKSxuKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspYz1uW3JdLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLnR5cGUsYy5hdHRhY2hlZExpc3RlbmVyLFFvKGMub3B0aW9uc09yVXNlQ2FwdHVyZSkpO3JldHVybiB0LnJlbW92ZUNoaWxkKGwpLGV9cmV0dXJuIHQuZGlzcGF0Y2hFdmVudChlKX0sZm4ucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKGUpe2codGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMCxEUyxlLHZvaWQgMCx2b2lkIDApfTtmdW5jdGlvbiBEUyhlLHQpe3JldHVybiBlLnRhZz09PTY/ITE6KGU9VChlKSx4RChlLHQpKX1mbi5wcm90b3R5cGUuZm9jdXNMYXN0PWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2codGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMCxLbSx0LHZvaWQgMCx2b2lkIDApO2Zvcih2YXIgbj10Lmxlbmd0aC0xOzA8PW4mJiFEUyh0W25dLGUpO24tLSk7fTtmdW5jdGlvbiBLbShlLHQpe3JldHVybiB0LnB1c2goZSksITF9Zm4ucHJvdG90eXBlLmJsdXI9ZnVuY3Rpb24oKXt2YXIgZT1DKHRoaXMuX2ZyYWdtZW50RmliZXIpO2UhPT1udWxsJiYoZT1UKGUpLGU9b2koZSkuYWN0aXZlRWxlbWVudCxlIT09bnVsbCYmZyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLHVELGUsdm9pZCAwLHZvaWQgMCkpfTtmdW5jdGlvbiB1RChlLHQpe3JldHVybiBlLnRhZz09PTY/ITE6KGU9VChlKSxlPT09dHx8ZS5jb250YWlucyh0KT8odC5ibHVyKCksITApOiExKX1mbi5wcm90b3R5cGUub2JzZXJ2ZVVzaW5nPWZ1bmN0aW9uKGUpe3RoaXMuX29ic2VydmVycz09PW51bGwmJih0aGlzLl9vYnNlcnZlcnM9bmV3IFNldCksdGhpcy5fb2JzZXJ2ZXJzLmFkZChlKSxnKHRoaXMuX2ZyYWdtZW50RmliZXIuY2hpbGQsITEsc0QsZSx2b2lkIDAsdm9pZCAwKX07ZnVuY3Rpb24gc0QoZSx0KXtyZXR1cm4gZS50YWc9PT02fHwoZT1UKGUpLHQub2JzZXJ2ZShlKSksITF9Zm4ucHJvdG90eXBlLnVub2JzZXJ2ZVVzaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29ic2VydmVycztpZih0IT09bnVsbCYmdC5oYXMoZSkpe3QuZGVsZXRlKGUpLGcodGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMSxmRCxlLHZvaWQgMCx2b2lkIDApO2Zvcih2YXIgbj10PTA7bjx6bi5sZW5ndGg7bisrKXt2YXIgbD16bltuXTtsLmZyYWdtZW50SW5zdGFuY2U9PT10aGlzJiZsLm9ic2VydmVyPT09ZT9lLnVub2JzZXJ2ZShsLmluc3RhbmNlKTp6blt0KytdPWx9em4ubGVuZ3RoPXR9fTtmdW5jdGlvbiBmRChlLHQpe3JldHVybiBlLnRhZz09PTZ8fChlPVQoZSksdC51bm9ic2VydmUoZSkpLCExfXZhciB6bj1bXSxRbT0hMTtmdW5jdGlvbiBkRChlLHQsbil7em4ucHVzaCh7ZnJhZ21lbnRJbnN0YW5jZTplLG9ic2VydmVyOnQsaW5zdGFuY2U6bn0pLFFtfHwoUW09ITAsU0QoZnVuY3Rpb24oKXtRbT0hMTt2YXIgbD16bjt6bj1bXTtmb3IodmFyIHI9MDtyPGwubGVuZ3RoO3IrKyl7dmFyIGM9bFtyXTtjLm9ic2VydmVyLnVub2JzZXJ2ZShjLmluc3RhbmNlKX19KSl9Zm4ucHJvdG90eXBlLmdldENsaWVudFJlY3RzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGcodGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMSxtRCxlLHZvaWQgMCx2b2lkIDApLGV9O2Z1bmN0aW9uIG1EKGUsdCl7aWYoZS50YWc9PT02KXtlPWUuc3RhdGVOb2RlO3ZhciBuPWUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO24uc2VsZWN0Tm9kZUNvbnRlbnRzKGUpLHQucHVzaC5hcHBseSh0LG4uZ2V0Q2xpZW50UmVjdHMoKSl9ZWxzZSBlPVQoZSksdC5wdXNoLmFwcGx5KHQsZS5nZXRDbGllbnRSZWN0cygpKTtyZXR1cm4hMX1mbi5wcm90b3R5cGUuZ2V0Um9vdE5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9Qyh0aGlzLl9mcmFnbWVudEZpYmVyKTtyZXR1cm4gdD09PW51bGw/dGhpczpUKHQpLmdldFJvb3ROb2RlKGUpfSxmbi5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9Qyh0aGlzLl9mcmFnbWVudEZpYmVyKTtpZih0PT09bnVsbClyZXR1cm4gTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQ7dmFyIG49W107Zyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLEttLG4sdm9pZCAwLHZvaWQgMCk7dmFyIGw9VCh0KTtpZihuLmxlbmd0aD09PTApe2lmKG49bCx3KHRoaXMuX2ZyYWdtZW50RmliZXIpKXtlOntmb3IodD10aGlzLl9mcmFnbWVudEZpYmVyLnJldHVybjt0IT09bnVsbDspe2lmKHQudGFnPT09NCl7dD10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2JyZWFrIGV9aWYodC50YWc9PT0zfHx0LnRhZz09PTV8fHQudGFnPT09MjcpYnJlYWs7dD10LnJldHVybn10PW51bGx9dCE9bnVsbCYmKG49dCl9dD10aGlzLl9mcmFnbWVudEZpYmVyO3ZhciByPWw9bi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKTtyZXR1cm4gbj09PWU/cj1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TOmwmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkmJihuPVIodClbMV0sbj09PW51bGw/cj1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORzooZT1UKG4pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpLHI9ZT09PTB8fGUmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc6Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcpKSxyfD1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDfXQ9VChuWzBdKSxyPVQobltuLmxlbmd0aC0xXSk7dmFyIGM9dyh0aGlzLl9mcmFnbWVudEZpYmVyKT90LnBhcmVudEVsZW1lbnQ6bDtpZihjPT1udWxsKXJldHVybiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRDtsPWMuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlksYz1jLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZO3ZhciBoPXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSksUz1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpLF89aCZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWXx8UyZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWTtyZXR1cm4gUz1sJiZjJiZoJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HJiZTJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HLHQ9bCYmdD09PWV8fGMmJnI9PT1lfHxffHxTP05vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZOiFsJiZ0PT09ZXx8IWMmJnI9PT1lP05vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUM6aCx0Jk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEfHx0Jk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUN8fGhEKHQsdGhpcy5fZnJhZ21lbnRGaWJlcixuWzBdLG5bbi5sZW5ndGgtMV0sZSk/dDpOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDfTtmdW5jdGlvbiBoRChlLHQsbixsLHIpe3ZhciBjPUVhKHIpO2lmKGUmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpe2lmKG49ISFjKWU6e2Zvcig7YyE9PW51bGw7KXtpZihjLnRhZz09PTcmJihjPT09dHx8Yy5hbHRlcm5hdGU9PT10KSl7bj0hMDticmVhayBlfWM9Yy5yZXR1cm59bj0hMX1yZXR1cm4gbn1pZihlJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpe2lmKGM9PT1udWxsKXJldHVybiBjPXIub3duZXJEb2N1bWVudCxyPT09Y3x8cj09PWMuZG9jdW1lbnRFbGVtZW50fHxyPT09Yy5ib2R5O2U6e2ZvcihjPXQsdD1DKHQpO2MhPT1udWxsOyl7aWYoIShjLnRhZyE9PTUmJmMudGFnIT09MyYmYy50YWchPT0yN3x8YyE9PXQmJmMuYWx0ZXJuYXRlIT09dCkpe2M9ITA7YnJlYWsgZX1jPWMucmV0dXJufWM9ITF9cmV0dXJuIGN9cmV0dXJuIGUmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkc/KCh0PSEhYykmJiEodD1jPT09bikmJih0PUgobixjLFkpLHQ9PT1udWxsP3Q9ITE6KGcodCwhMCxOLGMsbiksYz1PLE89bnVsbCx0PWMhPT1udWxsKSksdCk6ZSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8oKHQ9ISFjKSYmISh0PWM9PT1sKSYmKHQ9SChsLGMsWSksdD09PW51bGw/dD0hMTooZyh0LCEwLE0sYyxsKSxjPU8sQT1PPW51bGwsdD1jIT09bnVsbCkpLHQpOiExfWZ1bmN0aW9uIGpTKGUsdCl7dmFyIG49ZS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bi5zZWxlY3ROb2RlQ29udGVudHMoZSksZT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHdpbmRvdy5zY3JvbGxUbyh3aW5kb3cuc2Nyb2xsWCtlLmxlZnQsdD93aW5kb3cuc2Nyb2xsWStlLnRvcDp3aW5kb3cuc2Nyb2xsWStlLmJvdHRvbS13aW5kb3cuaW5uZXJIZWlnaHQpfWZuLnByb3RvdHlwZS5zY3JvbGxJbnRvVmlldz1mdW5jdGlvbihlKXtpZih0eXBlb2YgZT09Im9iamVjdCIpdGhyb3cgRXJyb3IoaSg1NjYpKTt2YXIgdD1bXTtnKHRoaXMuX2ZyYWdtZW50RmliZXIuY2hpbGQsITEsS20sdCx2b2lkIDAsdm9pZCAwKTt2YXIgbj1lIT09ITE7aWYodC5sZW5ndGg9PT0wKXt2YXIgbD1SKHRoaXMuX2ZyYWdtZW50RmliZXIpO2lmKGw9bj9sWzFdfHxsWzBdfHxDKHRoaXMuX2ZyYWdtZW50RmliZXIpOmxbMF18fGxbMV0sbD09PW51bGwpcmV0dXJuO2lmKGwudGFnPT09Nil7ZT1UKGwpLGpTKGUsbik7cmV0dXJufWlmKGw9VChsKSxsLm5vZGVUeXBlIT09OSl7aWYobC5ub2RlVHlwZT09PTExKXtuPSJob3N0ImluIGw/bC5ob3N0Om51bGwsbiE9PW51bGwmJm4uc2Nyb2xsSW50b1ZpZXcoZSk7cmV0dXJufWwuc2Nyb2xsSW50b1ZpZXcoZSl9fWZvcihsPW4/dC5sZW5ndGgtMTowO2whPT0obj8tMTp0Lmxlbmd0aCk7KXt2YXIgcj10W2xdO3IudGFnPT09Nj8ocj1UKHIpLGpTKHIsbikpOlQocikuc2Nyb2xsSW50b1ZpZXcoZSksbCs9bj8tMToxfX07ZnVuY3Rpb24gcEQoZSx0KXtyZXR1cm4gZT1UKGUpLE1TKGUsdCksITF9ZnVuY3Rpb24gTVMoZSx0KXtlLnJlYWN0RnJhZ21lbnRzPT1udWxsJiYoZS5yZWFjdEZyYWdtZW50cz1uZXcgU2V0KSxlLnJlYWN0RnJhZ21lbnRzLmFkZCh0KX1mdW5jdGlvbiB6UyhlLHQpe3ZhciBuPXQuX2V2ZW50TGlzdGVuZXJzO2lmKG4hPT1udWxsKWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgcj1uW2xdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5hdHRhY2hlZExpc3RlbmVyLFFvKHIub3B0aW9uc09yVXNlQ2FwdHVyZSkpfWUubm9kZVR5cGUhPT0zJiYobj10Ll9vYnNlcnZlcnMsbiE9PW51bGwmJm4uZm9yRWFjaChmdW5jdGlvbihjKXtmb3IodmFyIGg9MCxTPTA7Uzx6bi5sZW5ndGg7UysrKXt2YXIgXz16bltTXTsoXy5mcmFnbWVudEluc3RhbmNlIT09dHx8Xy5vYnNlcnZlciE9PWN8fF8uaW5zdGFuY2UhPT1lKSYmKHpuW2grK109Xyl9em4ubGVuZ3RoPWgsYy5vYnNlcnZlKGUpfSksTVMoZSx0KSl9ZnVuY3Rpb24gdkQoZSx0KXt2YXIgbj10Ll9ldmVudExpc3RlbmVycztpZihuIT09bnVsbClmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIHI9bltsXTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoci50eXBlLHIuYXR0YWNoZWRMaXN0ZW5lcixRbyhyLm9wdGlvbnNPclVzZUNhcHR1cmUpKX1lLm5vZGVUeXBlIT09MyYmKG49dC5fb2JzZXJ2ZXJzLG4hPT1udWxsJiZuLmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucm9vdE1hcmdpbj09InN0cmluZyI/ZEQodCxjLGUpOmMudW5vYnNlcnZlKGUpfSksZS5yZWFjdEZyYWdtZW50cyE9bnVsbCYmZS5yZWFjdEZyYWdtZW50cy5kZWxldGUodCkpfWZ1bmN0aW9uIFptKGUpe3ZhciB0PWUuZmlyc3RDaGlsZDtmb3IodCYmdC5ub2RlVHlwZT09PTEwJiYodD10Lm5leHRTaWJsaW5nKTt0Oyl7dmFyIG49dDtzd2l0Y2godD10Lm5leHRTaWJsaW5nLG4ubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJIRUFEIjpjYXNlIkJPRFkiOlptKG4pLG1jKG4pO2NvbnRpbnVlO2Nhc2UiU0NSSVBUIjpjYXNlIlNUWUxFIjpjb250aW51ZTtjYXNlIkxJTksiOmlmKG4ucmVsLnRvTG93ZXJDYXNlKCk9PT0ic3R5bGVzaGVldCIpY29udGludWV9ZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gZ0QoZSx0LG4sbCl7Zm9yKDtlLm5vZGVUeXBlPT09MTspe3ZhciByPW47aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKXtpZighbCYmKGUubm9kZU5hbWUhPT0iSU5QVVQifHxlLnR5cGUhPT0iaGlkZGVuIikpYnJlYWt9ZWxzZSBpZihsKXtpZighZVtUcl0pc3dpdGNoKHQpe2Nhc2UibWV0YSI6aWYoIWUuaGFzQXR0cmlidXRlKCJpdGVtcHJvcCIpKWJyZWFrO3JldHVybiBlO2Nhc2UibGluayI6aWYoYz1lLmdldEF0dHJpYnV0ZSgicmVsIiksYz09PSJzdHlsZXNoZWV0IiYmZS5oYXNBdHRyaWJ1dGUoImRhdGEtcHJlY2VkZW5jZSIpKWJyZWFrO2lmKGMhPT1yLnJlbHx8ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PShyLmhyZWY9PW51bGx8fHIuaHJlZj09PSIiP251bGw6ci5ocmVmKXx8ZS5nZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIikhPT0oci5jcm9zc09yaWdpbj09bnVsbD9udWxsOnIuY3Jvc3NPcmlnaW4pfHxlLmdldEF0dHJpYnV0ZSgidGl0bGUiKSE9PShyLnRpdGxlPT1udWxsP251bGw6ci50aXRsZSkpYnJlYWs7cmV0dXJuIGU7Y2FzZSJzdHlsZSI6aWYoZS5oYXNBdHRyaWJ1dGUoImRhdGEtcHJlY2VkZW5jZSIpKWJyZWFrO3JldHVybiBlO2Nhc2Uic2NyaXB0IjppZihjPWUuZ2V0QXR0cmlidXRlKCJzcmMiKSwoYyE9PShyLnNyYz09bnVsbD9udWxsOnIuc3JjKXx8ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSE9PShyLnR5cGU9PW51bGw/bnVsbDpyLnR5cGUpfHxlLmdldEF0dHJpYnV0ZSgiY3Jvc3NvcmlnaW4iKSE9PShyLmNyb3NzT3JpZ2luPT1udWxsP251bGw6ci5jcm9zc09yaWdpbikpJiZjJiZlLmhhc0F0dHJpYnV0ZSgiYXN5bmMiKSYmIWUuaGFzQXR0cmlidXRlKCJpdGVtcHJvcCIpKWJyZWFrO3JldHVybiBlO2RlZmF1bHQ6cmV0dXJuIGV9fWVsc2UgaWYodD09PSJpbnB1dCImJmUudHlwZT09PSJoaWRkZW4iKXt2YXIgYz1yLm5hbWU9PW51bGw/bnVsbDoiIityLm5hbWU7aWYoci50eXBlPT09ImhpZGRlbiImJmUuZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1jKXJldHVybiBlfWVsc2UgcmV0dXJuIGU7aWYoZT1UbihlLm5leHRTaWJsaW5nKSxlPT09bnVsbClicmVha31yZXR1cm4gbnVsbH1mdW5jdGlvbiB5RChlLHQsbil7aWYodD09PSIiKXJldHVybiBudWxsO2Zvcig7ZS5ub2RlVHlwZSE9PTM7KWlmKChlLm5vZGVUeXBlIT09MXx8ZS5ub2RlTmFtZSE9PSJJTlBVVCJ8fGUudHlwZSE9PSJoaWRkZW4iKSYmIW58fChlPVRuKGUubmV4dFNpYmxpbmcpLGU9PT1udWxsKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX1mdW5jdGlvbiBrUyhlLHQpe2Zvcig7ZS5ub2RlVHlwZSE9PTg7KWlmKChlLm5vZGVUeXBlIT09MXx8ZS5ub2RlTmFtZSE9PSJJTlBVVCJ8fGUudHlwZSE9PSJoaWRkZW4iKSYmIXR8fChlPVRuKGUubmV4dFNpYmxpbmcpLGU9PT1udWxsKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX1mdW5jdGlvbiBGbShlKXtyZXR1cm4gZS5kYXRhPT09IiQ/Inx8ZS5kYXRhPT09IiR+In1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZS5kYXRhPT09IiQhInx8ZS5kYXRhPT09IiQ/IiYmZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGUhPT0ibG9hZGluZyJ9ZnVuY3Rpb24gYkQoZSx0KXt2YXIgbj1lLm93bmVyRG9jdW1lbnQ7aWYoZS5kYXRhPT09IiR+IillLl9yZWFjdFJldHJ5PXQ7ZWxzZSBpZihlLmRhdGEhPT0iJD8ifHxuLnJlYWR5U3RhdGUhPT0ibG9hZGluZyIpdCgpO2Vsc2V7dmFyIGw9ZnVuY3Rpb24oKXt0KCksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixsKX07bi5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixsKSxlLl9yZWFjdFJldHJ5PWx9fWZ1bmN0aW9uIFRuKGUpe2Zvcig7ZSE9bnVsbDtlPWUubmV4dFNpYmxpbmcpe3ZhciB0PWUubm9kZVR5cGU7aWYodD09PTF8fHQ9PT0zKWJyZWFrO2lmKHQ9PT04KXtpZih0PWUuZGF0YSx0PT09IiQifHx0PT09IiQhInx8dD09PSIkPyJ8fHQ9PT0iJH4ifHx0PT09IiYifHx0PT09IkYhInx8dD09PSJGIilicmVhaztpZih0PT09Ii8kInx8dD09PSIvJiIpcmV0dXJuIG51bGx9fXJldHVybiBlfXZhciBKbT1udWxsO2Z1bmN0aW9uIExTKGUpe2U9ZS5uZXh0U2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciBuPWUuZGF0YTtpZihuPT09Ii8kInx8bj09PSIvJiIpe2lmKHQ9PT0wKXJldHVybiBUbihlLm5leHRTaWJsaW5nKTt0LS19ZWxzZSBuIT09IiQiJiZuIT09IiQhIiYmbiE9PSIkPyImJm4hPT0iJH4iJiZuIT09IiYifHx0Kyt9ZT1lLm5leHRTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIFVTKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIkInx8bj09PSIkISJ8fG49PT0iJD8ifHxuPT09IiR+Inx8bj09PSImIil7aWYodD09PTApcmV0dXJuIGU7dC0tfWVsc2UgbiE9PSIvJCImJm4hPT0iLyYifHx0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiB4RChlLHQpe2Z1bmN0aW9uIG4oKXtsPSEwfWlmKGUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZSlyZXR1cm4hMDt2YXIgbD0hMTt0cnl7ZS5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixuLCEwKSwoZS5mb2N1c3x8SFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzKS5jYWxsKGUsdCl9ZmluYWxseXtlLm93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLG4sITApfXJldHVybiBsfWZ1bmN0aW9uIFNEKGUpe1RTKGZ1bmN0aW9uKCl7VFMoZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9KX0pfWZ1bmN0aW9uIEhTKGUsdCxuKXtzd2l0Y2godD1vaShuKSxlKXtjYXNlImh0bWwiOmlmKGU9dC5kb2N1bWVudEVsZW1lbnQsIWUpdGhyb3cgRXJyb3IoaSg0NTIpKTtyZXR1cm4gZTtjYXNlImhlYWQiOmlmKGU9dC5oZWFkLCFlKXRocm93IEVycm9yKGkoNDUzKSk7cmV0dXJuIGU7Y2FzZSJib2R5IjppZihlPXQuYm9keSwhZSl0aHJvdyBFcnJvcihpKDQ1NCkpO3JldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NTEpKX19ZnVuY3Rpb24gQlMoZSx0LG4pe2Zvcih2YXIgbCBpbiBuKXt2YXIgcj1uW2xdO24uaGFzT3duUHJvcGVydHkobCkmJnIhPW51bGwmJktlKGUsdCxsLG51bGwsRk4scil9bi5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCYmKGUudGV4dENvbnRlbnQ9IiIpLGUub25jbGljaz09PUduJiYoZS5vbmNsaWNrPW51bGwpLG1jKGUpfWZ1bmN0aW9uIFdtKGUpe2Zvcih2YXIgdD1lLmF0dHJpYnV0ZXM7dC5sZW5ndGg7KWUucmVtb3ZlQXR0cmlidXRlTm9kZSh0WzBdKTttYyhlKX12YXIgd249bmV3IE1hcCxJUz1uZXcgU2V0O2Z1bmN0aW9uIHJpKGUpe2lmKHR5cGVvZiBlLmdldFJvb3ROb2RlPT0iZnVuY3Rpb24iKXt2YXIgdD1lLmdldFJvb3ROb2RlKCk7aWYodC5ub2RlVHlwZT09PTl8fHQubm9kZVR5cGU9PT0xMSlyZXR1cm4gdH1yZXR1cm4gZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnR9dmFyIF9sPWllLmQ7aWUuZD17ZjpDRCxyOlRELEQ6d0QsQzpFRCxMOlJELG06X0QsWDpBRCxTOk9ELE06TkR9O2Z1bmN0aW9uIENEKCl7dmFyIGU9X2wuZigpLHQ9dnUoKTtyZXR1cm4gZXx8dH1mdW5jdGlvbiBURChlKXt2YXIgdD1tbyhlKTt0IT09bnVsbCYmdC50YWc9PT01JiZ0LnR5cGU9PT0iZm9ybSI/RzAodCk6X2wucihlKX12YXIgWm89dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50O2Z1bmN0aW9uIFBTKGUsdCxuKXt2YXIgbD1abztpZihsJiZ0eXBlb2YgdD09InN0cmluZyImJnQpe3ZhciByPXZuKHQpO3I9J2xpbmtbcmVsPSInK2UrJyJdW2hyZWY9IicrcisnIl0nLHR5cGVvZiBuPT0ic3RyaW5nIiYmKHIrPSdbY3Jvc3NvcmlnaW49IicrbisnIl0nKSxJUy5oYXMocil8fChJUy5hZGQociksZT17cmVsOmUsY3Jvc3NPcmlnaW46bixocmVmOnR9LGwucXVlcnlTZWxlY3RvcihyKT09PW51bGwmJih0PWwuY3JlYXRlRWxlbWVudCgibGluayIpLER0KHQsImxpbmsiLGUpLGJ0KHQpLGwuaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX1mdW5jdGlvbiB3RChlKXtfbC5EKGUpLFBTKCJkbnMtcHJlZmV0Y2giLGUsbnVsbCl9ZnVuY3Rpb24gRUQoZSx0KXtfbC5DKGUsdCksUFMoInByZWNvbm5lY3QiLGUsdCl9ZnVuY3Rpb24gUkQoZSx0LG4pe19sLkwoZSx0LG4pO3ZhciBsPVpvO2lmKGwmJmUmJnQpe3ZhciByPSdsaW5rW3JlbD0icHJlbG9hZCJdW2FzPSInK3ZuKHQpKyciXSc7dD09PSJpbWFnZSImJm4mJm4uaW1hZ2VTcmNTZXQ/KHIrPSdbaW1hZ2VzcmNzZXQ9Iicrdm4obi5pbWFnZVNyY1NldCkrJyJdJyx0eXBlb2Ygbi5pbWFnZVNpemVzPT0ic3RyaW5nIiYmKHIrPSdbaW1hZ2VzaXplcz0iJyt2bihuLmltYWdlU2l6ZXMpKyciXScpKTpyKz0nW2hyZWY9Iicrdm4oZSkrJyJdJzt2YXIgYz1yO3N3aXRjaCh0KXtjYXNlInN0eWxlIjpjPUZvKGUpO2JyZWFrO2Nhc2Uic2NyaXB0IjpjPSRvKGUpfWlmKCEod24uaGFzKGMpfHwoZT1VKHtyZWw6InByZWxvYWQiLGhyZWY6dD09PSJpbWFnZSImJm4mJm4uaW1hZ2VTcmNTZXQ/dm9pZCAwOmUsYXM6dH0sbiksd24uc2V0KGMsZSksbC5xdWVyeVNlbGVjdG9yKHIpIT09bnVsbHx8dD09PSJzdHlsZSImJmwucXVlcnlTZWxlY3RvcihpaShjKSl8fHQ9PT0ic2NyaXB0IiYmbC5xdWVyeVNlbGVjdG9yKGNpKGMpKSkpKXt2YXIgaD1sLmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtEdChoLCJsaW5rIixlKSx0PT09InN0eWxlIiYmKGhbZGNdPSEwLGgub25sb2FkPWgub25lcnJvcj1mdW5jdGlvbigpe2ViKGgpfSksYnQoaCksbC5oZWFkLmFwcGVuZENoaWxkKGgpfX19ZnVuY3Rpb24gX0QoZSx0KXtfbC5tKGUsdCk7dmFyIG49Wm87aWYobiYmZSl7dmFyIGw9dCYmdHlwZW9mIHQuYXM9PSJzdHJpbmciP3QuYXM6InNjcmlwdCIscj0nbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXVthcz0iJyt2bihsKSsnIl1baHJlZj0iJyt2bihlKSsnIl0nLGM9cjtzd2l0Y2gobCl7Y2FzZSJhdWRpb3dvcmtsZXQiOmNhc2UicGFpbnR3b3JrbGV0IjpjYXNlInNlcnZpY2V3b3JrZXIiOmNhc2Uic2hhcmVkd29ya2VyIjpjYXNlIndvcmtlciI6Y2FzZSJzY3JpcHQiOmM9JG8oZSl9aWYoIXduLmhhcyhjKSYmKGU9VSh7cmVsOiJtb2R1bGVwcmVsb2FkIixocmVmOmV9LHQpLHduLnNldChjLGUpLG4ucXVlcnlTZWxlY3RvcihyKT09PW51bGwpKXtzd2l0Y2gobCl7Y2FzZSJhdWRpb3dvcmtsZXQiOmNhc2UicGFpbnR3b3JrbGV0IjpjYXNlInNlcnZpY2V3b3JrZXIiOmNhc2Uic2hhcmVkd29ya2VyIjpjYXNlIndvcmtlciI6Y2FzZSJzY3JpcHQiOmlmKG4ucXVlcnlTZWxlY3RvcihjaShjKSkpcmV0dXJufWw9bi5jcmVhdGVFbGVtZW50KCJsaW5rIiksRHQobCwibGluayIsZSksYnQobCksbi5oZWFkLmFwcGVuZENoaWxkKGwpfX19ZnVuY3Rpb24gT0QoZSx0LG4pe19sLlMoZSx0LG4pO3ZhciBsPVpvO2lmKGwmJmUpe3ZhciByPWhvKGwpLmhvaXN0YWJsZVN0eWxlcyxjPUZvKGUpO3Q9dHx8ImRlZmF1bHQiO3ZhciBoPXIuZ2V0KGMpO2lmKCFoKXt2YXIgUz17bG9hZGluZzowLHByZWxvYWQ6bnVsbH07aWYoaD1sLnF1ZXJ5U2VsZWN0b3IoaWkoYykpKVMubG9hZGluZz01O2Vsc2V7ZT1VKHtyZWw6InN0eWxlc2hlZXQiLGhyZWY6ZSwiZGF0YS1wcmVjZWRlbmNlIjp0fSxuKSwobj13bi5nZXQoYykpJiZlaChlLG4pO3ZhciBfPWg9bC5jcmVhdGVFbGVtZW50KCJsaW5rIik7YnQoXyksRHQoXywibGluayIsZSksXy5fcD1uZXcgUHJvbWlzZShmdW5jdGlvbihMLFYpe18ub25sb2FkPUwsXy5vbmVycm9yPVZ9KSxfLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7Uy5sb2FkaW5nfD0xfSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtTLmxvYWRpbmd8PTJ9KSxTLmxvYWRpbmd8PTQsVHUoaCx0LGwpfWg9e3R5cGU6InN0eWxlc2hlZXQiLGluc3RhbmNlOmgsY291bnQ6MSxzdGF0ZTpTfSxyLnNldChjLGgpfX19ZnVuY3Rpb24gQUQoZSx0KXtfbC5YKGUsdCk7dmFyIG49Wm87aWYobiYmZSl7dmFyIGw9aG8obikuaG9pc3RhYmxlU2NyaXB0cyxyPSRvKGUpLGM9bC5nZXQocik7Y3x8KGM9bi5xdWVyeVNlbGVjdG9yKGNpKHIpKSxjfHwoZT1VKHtzcmM6ZSxhc3luYzohMH0sdCksKHQ9d24uZ2V0KHIpKSYmdGgoZSx0KSxjPW4uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYnQoYyksRHQoYywibGluayIsZSksbi5oZWFkLmFwcGVuZENoaWxkKGMpKSxjPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOmMsY291bnQ6MSxzdGF0ZTpudWxsfSxsLnNldChyLGMpKX19ZnVuY3Rpb24gTkQoZSx0KXtfbC5NKGUsdCk7dmFyIG49Wm87aWYobiYmZSl7dmFyIGw9aG8obikuaG9pc3RhYmxlU2NyaXB0cyxyPSRvKGUpLGM9bC5nZXQocik7Y3x8KGM9bi5xdWVyeVNlbGVjdG9yKGNpKHIpKSxjfHwoZT1VKHtzcmM6ZSxhc3luYzohMCx0eXBlOiJtb2R1bGUifSx0KSwodD13bi5nZXQocikpJiZ0aChlLHQpLGM9bi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxidChjKSxEdChjLCJsaW5rIixlKSxuLmhlYWQuYXBwZW5kQ2hpbGQoYykpLGM9e3R5cGU6InNjcmlwdCIsaW5zdGFuY2U6Yyxjb3VudDoxLHN0YXRlOm51bGx9LGwuc2V0KHIsYykpfX1mdW5jdGlvbiBHUyhlLHQsbixsKXt2YXIgcj0ocj1IbC5jdXJyZW50KT9yaShyKTpudWxsO2lmKCFyKXRocm93IEVycm9yKGkoNDQ2KSk7c3dpdGNoKGUpe2Nhc2UibWV0YSI6Y2FzZSJ0aXRsZSI6cmV0dXJuIG51bGw7Y2FzZSJzdHlsZSI6cmV0dXJuIHR5cGVvZiBuLnByZWNlZGVuY2U9PSJzdHJpbmciJiZ0eXBlb2Ygbi5ocmVmPT0ic3RyaW5nIj8obj1GbyhuLmhyZWYpLHQ9aG8ocikuaG9pc3RhYmxlU3R5bGVzLGw9dC5nZXQobiksbHx8KGw9e3R5cGU6InN0eWxlIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH0sdC5zZXQobixsKSksbCk6e3R5cGU6InZvaWQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlImxpbmsiOmlmKG4ucmVsPT09InN0eWxlc2hlZXQiJiZ0eXBlb2Ygbi5ocmVmPT0ic3RyaW5nIiYmdHlwZW9mIG4ucHJlY2VkZW5jZT09InN0cmluZyIpe2U9Rm8obi5ocmVmKTt2YXIgYz1obyhyKS5ob2lzdGFibGVTdHlsZXMsaD1jLmdldChlKTtpZihofHwocj1yLm93bmVyRG9jdW1lbnR8fHIsaD17dHlwZToic3R5bGVzaGVldCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sYy5zZXQoZSxoKSwoYz1yLnF1ZXJ5U2VsZWN0b3IoaWkoZSkpKT9jLl9wfHwoaC5pbnN0YW5jZT1jLGguc3RhdGUubG9hZGluZz01KTooYz13bi5nZXQoZSksY3x8KGM9e3JlbDoicHJlbG9hZCIsYXM6InN0eWxlIixocmVmOm4uaHJlZixjcm9zc09yaWdpbjpuLmNyb3NzT3JpZ2luLGludGVncml0eTpuLmludGVncml0eSxtZWRpYTpuLm1lZGlhLGhyZWZMYW5nOm4uaHJlZkxhbmcscmVmZXJyZXJQb2xpY3k6bi5yZWZlcnJlclBvbGljeX0sd24uc2V0KGUsYykpLEREKHIsZSxjLGguc3RhdGUpKSksdCYmbD09PW51bGwpdGhyb3cgRXJyb3IoaSg1MjgsIiIpKTtyZXR1cm4gaH1pZih0JiZsIT09bnVsbCl0aHJvdyBFcnJvcihpKDUyOSwiIikpO3JldHVybiBudWxsO2Nhc2Uic2NyaXB0IjpyZXR1cm4gdD1uLmFzeW5jLG49bi5zcmMsdHlwZW9mIG49PSJzdHJpbmciJiZ0JiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQhPSJzeW1ib2wiPyhuPSRvKG4pLHQ9aG8ocikuaG9pc3RhYmxlU2NyaXB0cyxsPXQuZ2V0KG4pLGx8fChsPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSx0LnNldChuLGwpKSxsKTp7dHlwZToidm9pZCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9O2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NDQsZSkpfX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4naHJlZj0iJyt2bihlKSsnIid9ZnVuY3Rpb24gaWkoZSl7cmV0dXJuJ2xpbmtbcmVsPSJzdHlsZXNoZWV0Il1bJytlKyJdIn1mdW5jdGlvbiBWUyhlKXtyZXR1cm4gVSh7fSxlLHsiZGF0YS1wcmVjZWRlbmNlIjplLnByZWNlZGVuY2UscHJlY2VkZW5jZTpudWxsfSl9ZnVuY3Rpb24gREQoZSx0LG4sbCl7aWYodD1lLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9InN0eWxlIl1bJyt0KyJdIikpe2lmKHRbZGNdIT09ITApe2wubG9hZGluZz0xO3JldHVybn19ZWxzZSB0PWUuY3JlYXRlRWxlbWVudCgibGluayIpLHRbZGNdPSEwLHQub25sb2FkPXQub25lcnJvcj1lYi5iaW5kKG51bGwsdCksRHQodCwibGluayIsbiksYnQodCksZS5oZWFkLmFwcGVuZENoaWxkKHQpO2wucHJlbG9hZD10LHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5sb2FkaW5nfD0xfSksdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5sb2FkaW5nfD0yfSl9ZnVuY3Rpb24gJG8oZSl7cmV0dXJuJ1tzcmM9Iicrdm4oZSkrJyJdJ31mdW5jdGlvbiBjaShlKXtyZXR1cm4ic2NyaXB0W2FzeW5jXSIrZX1mdW5jdGlvbiBZUyhlLHQsbil7aWYodC5jb3VudCsrLHQuaW5zdGFuY2U9PT1udWxsKXN3aXRjaCh0LnR5cGUpe2Nhc2Uic3R5bGUiOnZhciBsPWUucXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS1ocmVmfj0iJyt2bihuLmhyZWYpKyciXScpO2lmKGwpcmV0dXJuIHQuaW5zdGFuY2U9bCxidChsKSxsO3ZhciByPVUoe30sbix7ImRhdGEtaHJlZiI6bi5ocmVmLCJkYXRhLXByZWNlZGVuY2UiOm4ucHJlY2VkZW5jZSxocmVmOm51bGwscHJlY2VkZW5jZTpudWxsfSk7cmV0dXJuIGw9KGUub3duZXJEb2N1bWVudHx8ZSkuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxidChsKSxEdChsLCJzdHlsZSIsciksVHUobCxuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1sO2Nhc2Uic3R5bGVzaGVldCI6cj1GbyhuLmhyZWYpO3ZhciBjPWUucXVlcnlTZWxlY3RvcihpaShyKSk7aWYoYylyZXR1cm4gdC5zdGF0ZS5sb2FkaW5nfD00LHQuaW5zdGFuY2U9YyxidChjKSxjO2w9VlMobiksKHI9d24uZ2V0KHIpKSYmZWgobCxyKSxjPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxidChjKTt2YXIgaD1jO3JldHVybiBoLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKFMsXyl7aC5vbmxvYWQ9UyxoLm9uZXJyb3I9X30pLER0KGMsImxpbmsiLGwpLHQuc3RhdGUubG9hZGluZ3w9NCxUdShjLG4ucHJlY2VkZW5jZSxlKSx0Lmluc3RhbmNlPWM7Y2FzZSJzY3JpcHQiOnJldHVybiBjPSRvKG4uc3JjKSwocj1lLnF1ZXJ5U2VsZWN0b3IoY2koYykpKT8odC5pbnN0YW5jZT1yLGJ0KHIpLHIpOihsPW4sKHI9d24uZ2V0KGMpKSYmKGw9VSh7fSxuKSx0aChsLHIpKSxlPWUub3duZXJEb2N1bWVudHx8ZSxyPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYnQociksRHQociwibGluayIsbCksZS5oZWFkLmFwcGVuZENoaWxkKHIpLHQuaW5zdGFuY2U9cik7Y2FzZSJ2b2lkIjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IEVycm9yKGkoNDQzLHQudHlwZSkpfWVsc2UgdC50eXBlPT09InN0eWxlc2hlZXQiJiYodC5zdGF0ZS5sb2FkaW5nJjQpPT09MCYmKGw9dC5pbnN0YW5jZSx0LnN0YXRlLmxvYWRpbmd8PTQsVHUobCxuLnByZWNlZGVuY2UsZSkpO3JldHVybiB0Lmluc3RhbmNlfWZ1bmN0aW9uIFR1KGUsdCxuKXtmb3IodmFyIGw9bi5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD0ic3R5bGVzaGVldCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXScpLHI9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpudWxsLGM9cixoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBTPWxbaF07aWYoUy5kYXRhc2V0LnByZWNlZGVuY2U9PT10KWM9UztlbHNlIGlmKGMhPT1yKWJyZWFrfWM/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGMubmV4dFNpYmxpbmcpOih0PW4ubm9kZVR5cGU9PT05P24uaGVhZDpuLHQuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKSl9ZnVuY3Rpb24gZWgoZSx0KXtlLmNyb3NzT3JpZ2luPT1udWxsJiYoZS5jcm9zc09yaWdpbj10LmNyb3NzT3JpZ2luKSxlLnJlZmVycmVyUG9saWN5PT1udWxsJiYoZS5yZWZlcnJlclBvbGljeT10LnJlZmVycmVyUG9saWN5KSxlLnRpdGxlPT1udWxsJiYoZS50aXRsZT10LnRpdGxlKX1mdW5jdGlvbiB0aChlLHQpe2UuY3Jvc3NPcmlnaW49PW51bGwmJihlLmNyb3NzT3JpZ2luPXQuY3Jvc3NPcmlnaW4pLGUucmVmZXJyZXJQb2xpY3k9PW51bGwmJihlLnJlZmVycmVyUG9saWN5PXQucmVmZXJyZXJQb2xpY3kpLGUuaW50ZWdyaXR5PT1udWxsJiYoZS5pbnRlZ3JpdHk9dC5pbnRlZ3JpdHkpfXZhciB3dT1udWxsO2Z1bmN0aW9uIHFTKGUsdCxuKXtpZih3dT09PW51bGwpe3ZhciBsPW5ldyBNYXAscj13dT1uZXcgTWFwO3Iuc2V0KG4sbCl9ZWxzZSByPXd1LGw9ci5nZXQobiksbHx8KGw9bmV3IE1hcCxyLnNldChuLGwpKTtpZihsLmhhcyhlKSlyZXR1cm4gbDtmb3IobC5zZXQoZSxudWxsKSxuPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgYz1uW3JdO2lmKCEoY1tUcl18fGNbUnRdfHxlPT09ImxpbmsiJiZjLmdldEF0dHJpYnV0ZSgicmVsIik9PT0ic3R5bGVzaGVldCIpJiZjLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpe3ZhciBoPWMuZ2V0QXR0cmlidXRlKHQpfHwiIjtoPWUraDt2YXIgUz1sLmdldChoKTtTP1MucHVzaChjKTpsLnNldChoLFtjXSl9fXJldHVybiBsfWZ1bmN0aW9uIG5oKGUsdCxuKXtlPWUub3duZXJEb2N1bWVudHx8ZSxlLmhlYWQuaW5zZXJ0QmVmb3JlKG4sdD09PSJ0aXRsZSI/ZS5xdWVyeVNlbGVjdG9yKCJoZWFkID4gdGl0bGUiKTpudWxsKX1mdW5jdGlvbiBqRChlLHQsbil7aWYobj09PTF8fHQuaXRlbVByb3AhPW51bGwpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UibWV0YSI6Y2FzZSJ0aXRsZSI6cmV0dXJuITA7Y2FzZSJzdHlsZSI6aWYodHlwZW9mIHQucHJlY2VkZW5jZSE9InN0cmluZyJ8fHR5cGVvZiB0LmhyZWYhPSJzdHJpbmcifHx0LmhyZWY9PT0iIilicmVhaztyZXR1cm4hMDtjYXNlImxpbmsiOmlmKHR5cGVvZiB0LnJlbCE9InN0cmluZyJ8fHR5cGVvZiB0LmhyZWYhPSJzdHJpbmcifHx0LmhyZWY9PT0iInx8dC5vbkxvYWR8fHQub25FcnJvcilicmVhaztyZXR1cm4gdC5yZWw9PT0ic3R5bGVzaGVldCI/KGU9dC5kaXNhYmxlZCx0eXBlb2YgdC5wcmVjZWRlbmNlPT0ic3RyaW5nIiYmZT09bnVsbCk6ITA7Y2FzZSJzY3JpcHQiOmlmKHQuYXN5bmMmJnR5cGVvZiB0LmFzeW5jIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC5hc3luYyE9InN5bWJvbCImJiF0Lm9uTG9hZCYmIXQub25FcnJvciYmdC5zcmMmJnR5cGVvZiB0LnNyYz09InN0cmluZyIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWFMoZSx0KXtyZXR1cm4gZT09PSJpbWciJiZ0LnNyYyE9bnVsbCYmdC5zcmMhPT0iIiYmdC5vbkxvYWQ9PW51bGwmJnQubG9hZGluZyE9PSJsYXp5In1mdW5jdGlvbiBLUyhlKXtyZXR1cm4hKGUudHlwZT09PSJzdHlsZXNoZWV0IiYmKGUuc3RhdGUubG9hZGluZyYzKT09PTApfWZ1bmN0aW9uIFFTKGUpe3JldHVybihlLndpZHRofHwxMDApKihlLmhlaWdodHx8MTAwKSoodHlwZW9mIGRldmljZVBpeGVsUmF0aW89PSJudW1iZXIiP2RldmljZVBpeGVsUmF0aW86MSkqLjI1fWZ1bmN0aW9uIFpTKGUsdCl7dHlwZW9mIHQuZGVjb2RlPT0iZnVuY3Rpb24iJiYoZS5pbWdDb3VudCsrLHQuY29tcGxldGV8fChlLmltZ0J5dGVzKz1RUyh0KSxlLnN1c3BlbnNleUltYWdlcy5wdXNoKHQpKSxlPWtELmJpbmQoZSksdC5kZWNvZGUoKS50aGVuKGUsZSkpfWZ1bmN0aW9uIE1EKGUsdCxuLGwpe2lmKG4udHlwZT09PSJzdHlsZXNoZWV0IiYmKHR5cGVvZiBsLm1lZGlhIT0ic3RyaW5nInx8bWF0Y2hNZWRpYShsLm1lZGlhKS5tYXRjaGVzIT09ITEpJiYobi5zdGF0ZS5sb2FkaW5nJjQpPT09MCl7aWYobi5pbnN0YW5jZT09PW51bGwpe3ZhciByPUZvKGwuaHJlZiksYz10LnF1ZXJ5U2VsZWN0b3IoaWkocikpO2lmKGMpe3Q9Yy5fcCx0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iJiYoZS5jb3VudCsrLGU9dWkuYmluZChlKSx0LnRoZW4oZSxlKSksbi5zdGF0ZS5sb2FkaW5nfD00LG4uaW5zdGFuY2U9YyxidChjKTtyZXR1cm59Yz10Lm93bmVyRG9jdW1lbnR8fHQsbD1WUyhsKSwocj13bi5nZXQocikpJiZlaChsLHIpLGM9Yy5jcmVhdGVFbGVtZW50KCJsaW5rIiksYnQoYyk7dmFyIGg9YztoLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKFMsXyl7aC5vbmxvYWQ9UyxoLm9uZXJyb3I9X30pLER0KGMsImxpbmsiLGwpLG4uaW5zdGFuY2U9Y31lLnN0eWxlc2hlZXRzPT09bnVsbCYmKGUuc3R5bGVzaGVldHM9bmV3IE1hcCksZS5zdHlsZXNoZWV0cy5zZXQobix0KSwodD1uLnN0YXRlLnByZWxvYWQpJiYobi5zdGF0ZS5sb2FkaW5nJjMpPT09MCYmKGUuY291bnQrKyxuPXVpLmJpbmQoZSksdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuKSx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixuKSl9fXZhciBFdT0wO2Z1bmN0aW9uIHpEKGUsdCl7cmV0dXJuIGUuc3R5bGVzaGVldHMmJmUuY291bnQ9PT0wJiZfdShlLGUuc3R5bGVzaGVldHMpLDA8ZS5jb3VudHx8MDxlLmltZ0NvdW50P2Z1bmN0aW9uKG4pe3ZhciBsPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLnN0eWxlc2hlZXRzJiZfdShlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKXt2YXIgYz1lLnVuc3VzcGVuZDtlLnVuc3VzcGVuZD1udWxsLGMoKX19LDZlNCt0KTswPGUuaW1nQnl0ZXMmJkV1PT09MCYmKEV1PTYyNTAwKkpOKCkpO3ZhciByPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLndhaXRpbmdGb3JJbWFnZXM9ITEsZS5jb3VudD09PTAmJihlLnN0eWxlc2hlZXRzJiZfdShlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKSl7dmFyIGM9ZS51bnN1c3BlbmQ7ZS51bnN1c3BlbmQ9bnVsbCxjKCl9fSwoZS5pbWdCeXRlcz5FdT81MDo4MDApK3QpO3JldHVybiBlLnVuc3VzcGVuZD1uLGZ1bmN0aW9uKCl7ZS51bnN1c3BlbmQ9bnVsbCxjbGVhclRpbWVvdXQobCksY2xlYXJUaW1lb3V0KHIpfX06bnVsbH1mdW5jdGlvbiBGUyhlKXtpZihlLmNvdW50PT09MCYmKGUuaW1nQ291bnQ9PT0wfHwhZS53YWl0aW5nRm9ySW1hZ2VzKSl7aWYoZS5zdHlsZXNoZWV0cylfdShlLGUuc3R5bGVzaGVldHMpO2Vsc2UgaWYoZS51bnN1c3BlbmQpe3ZhciB0PWUudW5zdXNwZW5kO2UudW5zdXNwZW5kPW51bGwsdCgpfX19ZnVuY3Rpb24gdWkoKXt0aGlzLmNvdW50LS0sRlModGhpcyl9ZnVuY3Rpb24ga0QoKXt0aGlzLmltZ0NvdW50LS0sRlModGhpcyl9dmFyIFJ1PW51bGw7ZnVuY3Rpb24gX3UoZSx0KXtlLnN0eWxlc2hlZXRzPW51bGwsZS51bnN1c3BlbmQhPT1udWxsJiYoZS5jb3VudCsrLFJ1PW5ldyBNYXAsdC5mb3JFYWNoKExELGUpLFJ1PW51bGwsdWkuY2FsbChlKSl9ZnVuY3Rpb24gTEQoZSx0KXtpZighKHQuc3RhdGUubG9hZGluZyY0KSl7dmFyIG49UnUuZ2V0KGUpO2lmKG4pdmFyIGw9bi5nZXQobnVsbCk7ZWxzZXtuPW5ldyBNYXAsUnUuc2V0KGUsbik7Zm9yKHZhciByPWUucXVlcnlTZWxlY3RvckFsbCgibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0iKSxjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBoPXJbY107KGgubm9kZU5hbWU9PT0iTElOSyJ8fGguZ2V0QXR0cmlidXRlKCJtZWRpYSIpIT09Im5vdCBhbGwiKSYmKG4uc2V0KGguZGF0YXNldC5wcmVjZWRlbmNlLGgpLGw9aCl9bCYmbi5zZXQobnVsbCxsKX1yPXQuaW5zdGFuY2UsaD1yLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIiksYz1uLmdldChoKXx8bCxjPT09bCYmbi5zZXQobnVsbCxyKSxuLnNldChoLHIpLHRoaXMuY291bnQrKyxsPXVpLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixsKSxjP2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixjLm5leHRTaWJsaW5nKTooZT1lLm5vZGVUeXBlPT09OT9lLmhlYWQ6ZSxlLmluc2VydEJlZm9yZShyLGUuZmlyc3RDaGlsZCkpLHQuc3RhdGUubG9hZGluZ3w9NH19dmFyIEpvPXskJHR5cGVvZjpoZSxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2N1cnJlbnRWYWx1ZTpiZSxfY3VycmVudFZhbHVlMjpiZSxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gVUQoZSx0LG4sbCxyLGMsaCxTLF8pe3RoaXMudGFnPTEsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMubmV4dD10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD10aGlzLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV4cGlyYXRpb25UaW1lcz1MZigtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLnNoZWxsU3VzcGVuZENvdW50ZXI9dGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLndhcm1MYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9TGYoMCksdGhpcy5oaWRkZW5VcGRhdGVzPUxmKG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1sLHRoaXMub25VbmNhdWdodEVycm9yPXIsdGhpcy5vbkNhdWdodEVycm9yPWMsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9aCx0aGlzLnBvb2xlZENhY2hlPW51bGwsdGhpcy5wb29sZWRDYWNoZUxhbmVzPTAsdGhpcy5mb3JtU3RhdGU9Xyx0aGlzLnRyYW5zaXRpb25UeXBlcz1udWxsLHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zPW5ldyBNYXB9ZnVuY3Rpb24gJFMoZSx0LG4sbCxyLGMsaCxTLF8sTCxWLFope3JldHVybiBlPW5ldyBVRChlLHQsbixoLF8sTCxWLFosUyksdD0xLGM9PT0hMCYmKHR8PTI0KSxjPUt0KDMsbnVsbCxudWxsLHQpLGUuY3VycmVudD1jLGMuc3RhdGVOb2RlPWUsdD1nZCgpLHQucmVmQ291bnQrKyxlLnBvb2xlZENhY2hlPXQsdC5yZWZDb3VudCsrLGMubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpsLGlzRGVoeWRyYXRlZDpuLGNhY2hlOnR9LFNkKGMpLGV9ZnVuY3Rpb24gSlMoZSl7cmV0dXJuIGU/KGU9d28sZSk6d299ZnVuY3Rpb24gV1MoZSx0LG4sbCxyLGMpe3I9SlMociksbC5jb250ZXh0PT09bnVsbD9sLmNvbnRleHQ9cjpsLnBlbmRpbmdDb250ZXh0PXIsbD1abCh0KSxsLnBheWxvYWQ9e2VsZW1lbnQ6bn0sYz1jPT09dm9pZCAwP251bGw6YyxjIT09bnVsbCYmKGwuY2FsbGJhY2s9Yyksbj1GbChlLGwsdCksbiE9PW51bGwmJigkdChuLGUsdCksSXIobixlLHQpKX1mdW5jdGlvbiBlMShlLHQpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXt2YXIgbj1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT1uIT09MCYmbjx0P246dH19ZnVuY3Rpb24gbGgoZSx0KXtlMShlLHQpLChlPWUuYWx0ZXJuYXRlKSYmZTEoZSx0KX1mdW5jdGlvbiB0MShlKXtpZihlLnRhZz09PTEzfHxlLnRhZz09PTMxKXt2YXIgdD1BYShlLDY3MTA4ODY0KTt0IT09bnVsbCYmJHQodCxlLDY3MTA4ODY0KSxsaChlLDY3MTA4ODY0KX19ZnVuY3Rpb24gbjEoZSl7aWYoZS50YWc9PT0xM3x8ZS50YWc9PT0zMSl7dmFyIHQ9c24oKTt0PVVmKHQpO3ZhciBuPUFhKGUsdCk7biE9PW51bGwmJiR0KG4sZSx0KSxsaChlLHQpfX12YXIgV289ITA7ZnVuY3Rpb24gSEQoZSx0LG4sbCl7dmFyIHI9dGUuVDt0ZS5UPW51bGw7dmFyIGM9aWUucDt0cnl7aWUucD0yLGFoKGUsdCxuLGwpfWZpbmFsbHl7aWUucD1jLHRlLlQ9cn19ZnVuY3Rpb24gQkQoZSx0LG4sbCl7dmFyIHI9dGUuVDt0ZS5UPW51bGw7dmFyIGM9aWUucDt0cnl7aWUucD04LGFoKGUsdCxuLGwpfWZpbmFsbHl7aWUucD1jLHRlLlQ9cn19ZnVuY3Rpb24gYWgoZSx0LG4sbCl7aWYoV28pe3ZhciByPW9oKGwpO2lmKHI9PT1udWxsKUJtKGUsdCxsLE91LG4pLGExKGUsbCk7ZWxzZSBpZihQRChyLGUsdCxuLGwpKWwuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihhMShlLGwpLHQmNCYmLTE8SUQuaW5kZXhPZihlKSl7Zm9yKDtyIT09bnVsbDspe3ZhciBjPW1vKHIpO2lmKGMhPT1udWxsKXN3aXRjaChjLnRhZyl7Y2FzZSAzOmlmKGM9Yy5zdGF0ZU5vZGUsYy5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgaD13YShjLnBlbmRpbmdMYW5lcyk7aWYoaCE9PTApe3ZhciBTPWM7Zm9yKFMucGVuZGluZ0xhbmVzfD0yLFMuZW50YW5nbGVkTGFuZXN8PTI7aDspe3ZhciBfPTE8PDMxLW5uKGgpO1MuZW50YW5nbGVtZW50c1sxXXw9XyxoJj1+X31KbihjKSwoSWUmNik9PT0wJiYobXU9ZW4oKSs1MDAsbmkoMCkpfX1icmVhaztjYXNlIDMxOmNhc2UgMTM6Uz1BYShjLDIpLFMhPT1udWxsJiYkdChTLGMsMiksdnUoKSxsaChjLDIpfWlmKGM9b2gobCksYz09PW51bGwmJkJtKGUsdCxsLE91LG4pLGM9PT1yKWJyZWFrO3I9Y31yIT09bnVsbCYmbC5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIEJtKGUsdCxsLG51bGwsbil9fWZ1bmN0aW9uIG9oKGUpe3JldHVybiBlPVlmKGUpLHJoKGUpfXZhciBPdT1udWxsO2Z1bmN0aW9uIHJoKGUpe2lmKE91PW51bGwsZT1FYShlKSxlIT09bnVsbCl7dmFyIHQ9ZihlKTtpZih0PT09bnVsbCllPW51bGw7ZWxzZXt2YXIgbj10LnRhZztpZihuPT09MTMpe2lmKGU9ZCh0KSxlIT09bnVsbClyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZihuPT09MzEpe2lmKGU9cCh0KSxlIT09bnVsbClyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZihuPT09Myl7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gdC50YWc9PT0zP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSB0IT09ZSYmKGU9bnVsbCl9fXJldHVybiBPdT1lLG51bGx9ZnVuY3Rpb24gbDEoZSl7c3dpdGNoKGUpe2Nhc2UiYmVmb3JldG9nZ2xlIjpjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJzZWVrZWQiOmNhc2Uic3VibWl0IjpjYXNlInRvZ2dsZSI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmdWxsc2NyZWVuZXJyb3IiOmNhc2UiZm9jdXMiOmNhc2UiaGFzaGNoYW5nZSI6Y2FzZSJwb3BzdGF0ZSI6Y2FzZSJzZWxlY3QiOmNhc2Uic2VsZWN0c3RhcnQiOnJldHVybiAyO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2V4aXQiOmNhc2UiZHJhZ2xlYXZlIjpjYXNlImRyYWdvdmVyIjpjYXNlIm1vdXNlbW92ZSI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJyZXNpemUiOmNhc2Uic2Nyb2xsIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ3aGVlbCI6Y2FzZSJtb3VzZWVudGVyIjpjYXNlIm1vdXNlbGVhdmUiOmNhc2UicG9pbnRlcmVudGVyIjpjYXNlInBvaW50ZXJsZWF2ZSI6cmV0dXJuIDg7Y2FzZSJtZXNzYWdlIjpzd2l0Y2goSk8oKSl7Y2FzZSBHeTpyZXR1cm4gMjtjYXNlIFZ5OnJldHVybiA4O2Nhc2UgaWM6Y2FzZSBXTzpyZXR1cm4gMzI7Y2FzZSBZeTpyZXR1cm4gMjY4NDM1NDU2O2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgaWg9ITEsY2E9bnVsbCx1YT1udWxsLHNhPW51bGwsc2k9bmV3IE1hcCxmaT1uZXcgTWFwLGZhPVtdLElEPSJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQiLnNwbGl0KCIgIik7ZnVuY3Rpb24gYTEoZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1c2luIjpjYXNlImZvY3Vzb3V0IjpjYT1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6dWE9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6c2E9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOnNpLmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmZpLmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIGRpKGUsdCxuLGwscixjKXtyZXR1cm4gZT09PW51bGx8fGUubmF0aXZlRXZlbnQhPT1jPyhlPXtibG9ja2VkT246dCxkb21FdmVudE5hbWU6bixldmVudFN5c3RlbUZsYWdzOmwsbmF0aXZlRXZlbnQ6Yyx0YXJnZXRDb250YWluZXJzOltyXX0sdCE9PW51bGwmJih0PW1vKHQpLHQhPT1udWxsJiZ0MSh0KSksZSk6KGUuZXZlbnRTeXN0ZW1GbGFnc3w9bCx0PWUudGFyZ2V0Q29udGFpbmVycyxyIT09bnVsbCYmdC5pbmRleE9mKHIpPT09LTEmJnQucHVzaChyKSxlKX1mdW5jdGlvbiBQRChlLHQsbixsLHIpe3N3aXRjaCh0KXtjYXNlImZvY3VzaW4iOnJldHVybiBjYT1kaShjYSxlLHQsbixsLHIpLCEwO2Nhc2UiZHJhZ2VudGVyIjpyZXR1cm4gdWE9ZGkodWEsZSx0LG4sbCxyKSwhMDtjYXNlIm1vdXNlb3ZlciI6cmV0dXJuIHNhPWRpKHNhLGUsdCxuLGwsciksITA7Y2FzZSJwb2ludGVyb3ZlciI6dmFyIGM9ci5wb2ludGVySWQ7cmV0dXJuIHNpLnNldChjLGRpKHNpLmdldChjKXx8bnVsbCxlLHQsbixsLHIpKSwhMDtjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpyZXR1cm4gYz1yLnBvaW50ZXJJZCxmaS5zZXQoYyxkaShmaS5nZXQoYyl8fG51bGwsZSx0LG4sbCxyKSksITB9cmV0dXJuITF9ZnVuY3Rpb24gbzEoZSl7dmFyIHQ9RWEoZS50YXJnZXQpO2lmKHQhPT1udWxsKXt2YXIgbj1mKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1kKG4pLHQhPT1udWxsKXtlLmJsb2NrZWRPbj10LCR5KGUucHJpb3JpdHksZnVuY3Rpb24oKXtuMShuKX0pO3JldHVybn19ZWxzZSBpZih0PT09MzEpe2lmKHQ9cChuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCwkeShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7bjEobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBBdShlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49b2goZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgbD1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7VmY9bCxuLnRhcmdldC5kaXNwYXRjaEV2ZW50KGwpLFZmPW51bGx9ZWxzZSByZXR1cm4gdD1tbyhuKSx0IT09bnVsbCYmdDEodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gcjEoZSx0LG4pe0F1KGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBHRCgpe2loPSExLGNhIT09bnVsbCYmQXUoY2EpJiYoY2E9bnVsbCksdWEhPT1udWxsJiZBdSh1YSkmJih1YT1udWxsKSxzYSE9PW51bGwmJkF1KHNhKSYmKHNhPW51bGwpLHNpLmZvckVhY2gocjEpLGZpLmZvckVhY2gocjEpfWZ1bmN0aW9uIE51KGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxpaHx8KGloPSEwLGEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhhLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEdEKSkpfXZhciBEdT1udWxsO2Z1bmN0aW9uIGkxKGUpe0R1IT09ZSYmKER1PWUsYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGEudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZnVuY3Rpb24oKXtEdT09PWUmJihEdT1udWxsKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrPTMpe3ZhciBuPWVbdF0sbD1lW3QrMV0scj1lW3QrMl07aWYodHlwZW9mIGwhPSJmdW5jdGlvbiIpe2lmKHJoKGx8fG4pPT09bnVsbCljb250aW51ZTticmVha312YXIgYz1tbyhuKTtjIT09bnVsbCYmKGUuc3BsaWNlKHQsMyksdC09MyxHZChjLHtwZW5kaW5nOiEwLGRhdGE6cixtZXRob2Q6bi5tZXRob2QsYWN0aW9uOmx9LGwscikpfX0pKX1mdW5jdGlvbiBlcihlKXtmdW5jdGlvbiB0KF8pe3JldHVybiBOdShfLGUpfWNhIT09bnVsbCYmTnUoY2EsZSksdWEhPT1udWxsJiZOdSh1YSxlKSxzYSE9PW51bGwmJk51KHNhLGUpLHNpLmZvckVhY2godCksZmkuZm9yRWFjaCh0KTtmb3IodmFyIG49MDtuPGZhLmxlbmd0aDtuKyspe3ZhciBsPWZhW25dO2wuYmxvY2tlZE9uPT09ZSYmKGwuYmxvY2tlZE9uPW51bGwpfWZvcig7MDxmYS5sZW5ndGgmJihuPWZhWzBdLG4uYmxvY2tlZE9uPT09bnVsbCk7KW8xKG4pLG4uYmxvY2tlZE9uPT09bnVsbCYmZmEuc2hpZnQoKTtpZihuPShlLm93bmVyRG9jdW1lbnR8fGUpLiQkcmVhY3RGb3JtUmVwbGF5LG4hPW51bGwpZm9yKGw9MDtsPG4ubGVuZ3RoO2wrPTMpe3ZhciByPW5bbF0sYz1uW2wrMV0saD1yW1h0XXx8bnVsbDtpZih0eXBlb2YgYz09ImZ1bmN0aW9uIilofHxpMShuKTtlbHNlIGlmKGgpe3ZhciBTPW51bGw7aWYoYyYmYy5oYXNBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSl7aWYocj1jLGg9Y1tYdF18fG51bGwpUz1oLmZvcm1BY3Rpb247ZWxzZSBpZihyaChyKSE9PW51bGwpY29udGludWV9ZWxzZSBTPWguYWN0aW9uO3R5cGVvZiBTPT0iZnVuY3Rpb24iP25bbCsxXT1TOihuLnNwbGljZShsLDMpLGwtPTMpLGkxKG4pfX19ZnVuY3Rpb24gYzEoKXtmdW5jdGlvbiBlKGMpe2MuY2FuSW50ZXJjZXB0JiZjLmluZm89PT0icmVhY3QtdHJhbnNpdGlvbiImJmMuaW50ZXJjZXB0KHtoYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGgpe3JldHVybiByPWh9KX0sZm9jdXNSZXNldDoibWFudWFsIixzY3JvbGw6Im1hbnVhbCJ9KX1mdW5jdGlvbiB0KCl7ciE9PW51bGwmJihyKCkscj1udWxsKSxsfHxzZXRUaW1lb3V0KG4sMjApfWZ1bmN0aW9uIG4oKXtpZighbCYmIW5hdmlnYXRpb24udHJhbnNpdGlvbil7dmFyIGM9bmF2aWdhdGlvbi5jdXJyZW50RW50cnk7YyYmYy51cmwhPW51bGwmJm5hdmlnYXRpb24ubmF2aWdhdGUoYy51cmwse3N0YXRlOmMuZ2V0U3RhdGUoKSxpbmZvOiJyZWFjdC10cmFuc2l0aW9uIixoaXN0b3J5OiJyZXBsYWNlIn0pfX1pZih0eXBlb2YgbmF2aWdhdGlvbj09Im9iamVjdCIpe3ZhciBsPSExLHI9bnVsbDtyZXR1cm4gbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJuYXZpZ2F0ZSIsZSksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJuYXZpZ2F0ZXN1Y2Nlc3MiLHQpLG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigibmF2aWdhdGVlcnJvciIsdCksc2V0VGltZW91dChuLDEwMCksZnVuY3Rpb24oKXtsPSEwLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibmF2aWdhdGUiLGUpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibmF2aWdhdGVzdWNjZXNzIix0KSxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm5hdmlnYXRlZXJyb3IiLHQpLHIhPT1udWxsJiYocigpLHI9bnVsbCl9fX1mdW5jdGlvbiBjaChlKXt0aGlzLl9pbnRlcm5hbFJvb3Q9ZX1qdS5wcm90b3R5cGUucmVuZGVyPWNoLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQ9PT1udWxsKXRocm93IEVycm9yKGkoNDA5KSk7dmFyIG49dC5jdXJyZW50LGw9c24oKTtXUyhuLGwsZSx0LG51bGwsbnVsbCl9LGp1LnByb3RvdHlwZS51bm1vdW50PWNoLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGUhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87V1MoZS5jdXJyZW50LDIsbnVsbCxlLG51bGwsbnVsbCksdnUoKSx0W2ZvXT1udWxsfX07ZnVuY3Rpb24ganUoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9anUucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PUZ5KCk7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjxmYS5sZW5ndGgmJnQhPT0wJiZ0PGZhW25dLnByaW9yaXR5O24rKyk7ZmEuc3BsaWNlKG4sMCxlKSxuPT09MCYmbzEoZSl9fTt2YXIgdTE9by52ZXJzaW9uO2lmKHUxIT09IjE5LjMuMSIpdGhyb3cgRXJyb3IoaSg1MjcsdTEsIjE5LjMuMSIpKTtpZS5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihpKDE4OCkpOihlPU9iamVjdC5rZXlzKGUpLmpvaW4oIiwiKSxFcnJvcihpKDI2OCxlKSkpO3JldHVybiBlPWIodCksZT1lIT09bnVsbD94KGUpOm51bGwsZT1lPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlLGV9O3ZhciBWRD17YnVuZGxlVHlwZTowLHZlcnNpb246IjE5LjMuMSIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIixjdXJyZW50RGlzcGF0Y2hlclJlZjp0ZSxyZWNvbmNpbGVyVmVyc2lvbjoiMTkuMy4xIn07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzwidSIpe3ZhciBNdT1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIU11LmlzRGlzYWJsZWQmJk11LnN1cHBvcnRzRmliZXIpdHJ5e3hyPU11LmluamVjdChWRCksdG49TXV9Y2F0Y2h7fX1yZXR1cm4gdHIuY3JlYXRlUm9vdD1mdW5jdGlvbihlLHQpe2lmKCFzKGUpKXRocm93IEVycm9yKGkoMjk5KSk7dmFyIG49ITEsbD0iIixyPUowLGM9VzAsaD1leDtyZXR1cm4gdCE9bnVsbCYmKHQudW5zdGFibGVfc3RyaWN0TW9kZT09PSEwJiYobj0hMCksdC5pZGVudGlmaWVyUHJlZml4IT09dm9pZCAwJiYobD10LmlkZW50aWZpZXJQcmVmaXgpLHQub25VbmNhdWdodEVycm9yIT09dm9pZCAwJiYocj10Lm9uVW5jYXVnaHRFcnJvciksdC5vbkNhdWdodEVycm9yIT09dm9pZCAwJiYoYz10Lm9uQ2F1Z2h0RXJyb3IpLHQub25SZWNvdmVyYWJsZUVycm9yIT09dm9pZCAwJiYoaD10Lm9uUmVjb3ZlcmFibGVFcnJvcikpLHQ9JFMoZSwxLCExLG51bGwsbnVsbCxuLGwsbnVsbCxyLGMsaCxjMSksZVtmb109dC5jdXJyZW50LEhtKGUpLG5ldyBjaCh0KX0sdHIuaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFzKGUpKXRocm93IEVycm9yKGkoMjk5KSk7dmFyIGw9ITEscj0iIixjPUowLGg9VzAsUz1leCxfPW51bGw7cmV0dXJuIG4hPW51bGwmJihuLnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKGw9ITApLG4uaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKHI9bi5pZGVudGlmaWVyUHJlZml4KSxuLm9uVW5jYXVnaHRFcnJvciE9PXZvaWQgMCYmKGM9bi5vblVuY2F1Z2h0RXJyb3IpLG4ub25DYXVnaHRFcnJvciE9PXZvaWQgMCYmKGg9bi5vbkNhdWdodEVycm9yKSxuLm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKFM9bi5vblJlY292ZXJhYmxlRXJyb3IpLG4uZm9ybVN0YXRlIT09dm9pZCAwJiYoXz1uLmZvcm1TdGF0ZSkpLHQ9JFMoZSwxLCEwLHQsbj8/bnVsbCxsLHIsXyxjLGgsUyxjMSksdC5jb250ZXh0PUpTKG51bGwpLG49dC5jdXJyZW50LGw9c24oKSxsPVVmKGwpLHI9WmwobCksci5jYWxsYmFjaz1udWxsLEZsKG4scixsKSxuPWwsdC5jdXJyZW50LmxhbmVzPW4sQ3IodCxuKSxKbih0KSxlW2ZvXT10LmN1cnJlbnQsSG0oZSksbmV3IGp1KHQpfSx0ci52ZXJzaW9uPSIxOS4zLjEiLHRyfXZhciB4aDtmdW5jdGlvbiB4MSgpe2lmKHhoKXJldHVybiBMdS5leHBvcnRzO3hoPTE7ZnVuY3Rpb24gYSgpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz4idSJ8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPSJmdW5jdGlvbiIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoYSl9Y2F0Y2gobyl7Y29uc29sZS5lcnJvcihvKX19cmV0dXJuIGEoKSxMdS5leHBvcnRzPWIxKCksTHUuZXhwb3J0c312YXIgUzE9eDEoKTtjb25zdCBDMT1hPT5hPy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7ZnVuY3Rpb24gVDEoYSxvLHU9W10pe2lmKG89PW51bGwpdGhyb3cgbmV3IEVycm9yKCJbbHVjaWRlXTogaWNvbk5vZGUgaXMgcmVxdWlyZWQgd2hlbiBpY29uIG5hbWUgaXMgdXNlZCIpO3JldHVybntuYW1lOkMxKGEpLHNpemU6MjQsbm9kZTpvLC4uLnUubGVuZ3RoPjA/e2FsaWFzZXM6dX06e319fWNvbnN0IHcxPWE9PntsZXQgbz0iIix1PSExO2Zvcihjb25zdCBpIG9mIGEpe2lmKGk9PT0iLSJ8fGk9PT0iXyJ8fGk8PSIgIil7dT1vLmxlbmd0aD4wO2NvbnRpbnVlfW8ubGVuZ3RoPT09MD9vKz1pLnRvTG93ZXJDYXNlKCk6bys9dT9pLnRvVXBwZXJDYXNlKCk6aSx1PSExfXJldHVybiBvfTtjb25zdCBFMT1hPT57Y29uc3Qgbz13MShhKTtyZXR1cm4gby5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStvLnNsaWNlKDEpfTtjb25zdCBJdT0oLi4uYSk9PmEuZmlsdGVyKChvLHUsaSk9PiEhbyYmby50cmltKCkhPT0iIiYmaS5pbmRleE9mKG8pPT09dSkuam9pbigiICIpLnRyaW0oKTtjb25zdCBtYT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsInN0cm9rZS13aWR0aCI6Miwic3Ryb2tlLWxpbmVjYXAiOiJyb3VuZCIsInN0cm9rZS1saW5lam9pbiI6InJvdW5kIn07ZnVuY3Rpb24gUHUoYSl7cmV0dXJuIGEhPW51bGx9ZnVuY3Rpb24gUjEoYSxvPXt9KXtjb25zdCB1PW8uYXR0cmlidXRlTmFtZXM/P3t9LGk9Qz0+dVtDXT8/QyxzPWEuc2l6ZT8/YS53aWR0aD8/bWEud2lkdGgsZj1hLnNpemU/P2EuaGVpZ2h0Pz9tYS5oZWlnaHQsZD1hLmFsaWFzZXM/LmZpbHRlcihDPT50eXBlb2YgQz09InN0cmluZyImJkMudHJpbSgpIT09IiIpLm1hcChDPT5gbHVjaWRlLSR7Q31gKT8/W10scD1bLi4uYS5uYW1lP1tgbHVjaWRlLSR7YS5uYW1lfWBdOltdLC4uLmRdLHk9by5jbGFzc05hbWU/LnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pPz9bXSxiPW8uaW5jbHVkZURlZmF1bHRDbGFzc2VzPT09ITE/SXUoLi4ueSk6SXUoImx1Y2lkZSIsLi4ucCwuLi55KSx4PW8uYWJzb2x1dGVTdHJva2VXaWR0aD9OdW1iZXIoby5zdHJva2VXaWR0aD8/bWFbInN0cm9rZS13aWR0aCJdKSpOdW1iZXIoYS5zaXplPz9hLndpZHRoPz9tYS53aWR0aCkvTnVtYmVyKG8uc2l6ZT8/by53aWR0aD8/bWEud2lkdGgpOm8uc3Ryb2tlV2lkdGg/P21hWyJzdHJva2Utd2lkdGgiXTtyZXR1cm5bInN2ZyIsey4uLk9iamVjdC5lbnRyaWVzKG1hKS5yZWR1Y2UoKEMsW3csUl0pPT4oQ1tpKHcpXT1SLEMpLHt9KSwuLi4iY29sb3IiaW4gbyYmby5jb2xvciYme1tpKCJzdHJva2UiKV06by5jb2xvcn0sLi4uInNpemUiaW4gbyYmUHUoby5zaXplKSYme1tpKCJ3aWR0aCIpXTpvLnNpemUsW2koImhlaWdodCIpXTpvLnNpemV9LC4uLiJ3aWR0aCJpbiBvJiZQdShvLndpZHRoKSYme1tpKCJ3aWR0aCIpXTpvLndpZHRofSwuLi4iaGVpZ2h0ImluIG8mJlB1KG8uaGVpZ2h0KSYme1tpKCJoZWlnaHQiKV06by5oZWlnaHR9LFtpKCJzdHJva2Utd2lkdGgiKV06eCwuLi5iJiZ7W2koImNsYXNzIildOmJ9LFtpKCJ2aWV3Qm94IildOmAwIDAgJHtzfSAke2Z9YCwuLi5vLmhhc0ExMXlQcm9wPT09ITE/e1tpKCJhcmlhLWhpZGRlbiIpXToidHJ1ZSJ9Ont9LC4uLiJhdHRyaWJ1dGVzImluIG8mJm8uYXR0cmlidXRlc30sYS5ub2RlLm1hcChDPT57Y29uc3RbdyxSLEVdPUMsVD1vLm5vblNjYWxpbmdTdHJva2U/e1tpKCJ2ZWN0b3ItZWZmZWN0IildOiJub24tc2NhbGluZy1zdHJva2UiLC4uLlJ9OlI7cmV0dXJuIEU/W3csVCxFXTpbdyxUXX0pXX1mdW5jdGlvbiBfMShhLG89e30pe3JldHVybiBSMShhLHsuLi5vLGF0dHJpYnV0ZU5hbWVzOnsuLi5vLmF0dHJpYnV0ZU5hbWVzLGNsYXNzOiJjbGFzc05hbWUiLCJzdHJva2Utd2lkdGgiOiJzdHJva2VXaWR0aCIsInN0cm9rZS1saW5lY2FwIjoic3Ryb2tlTGluZWNhcCIsInN0cm9rZS1saW5lam9pbiI6InN0cm9rZUxpbmVqb2luIiwidmVjdG9yLWVmZmVjdCI6InZlY3RvckVmZmVjdCJ9fSl9Y29uc3QgTzE9YT0+e2Zvcihjb25zdCBvIGluIGEpaWYoby5zdGFydHNXaXRoKCJhcmlhLSIpfHxvPT09InJvbGUifHxvPT09InRpdGxlIilyZXR1cm4hMDtyZXR1cm4hMX0sQTE9di5jcmVhdGVDb250ZXh0KHt9KSxOMT0oKT0+di51c2VDb250ZXh0KEExKSxEMT12LmZvcndhcmRSZWYoKHtjb2xvcjphLHNpemU6byx3aWR0aDp1LGhlaWdodDppLHN0cm9rZVdpZHRoOnMsYWJzb2x1dGVTdHJva2VXaWR0aDpmLG5vblNjYWxpbmdTdHJva2U6ZCxjbGFzc05hbWU6cD0iIixjaGlsZHJlbjp5LGljb25Ob2RlOmI9W10saWNvbjp4PXtub2RlOmIsYWxpYXNlczpbXSxzaXplOjI0fSwuLi5nfSxDKT0+e2NvbnN0e3NpemU6dz0yNCxzdHJva2VXaWR0aDpSPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpFPSExLG5vblNjYWxpbmdTdHJva2U6VD0hMSxjb2xvcjpPPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpBPSIifT1OMSgpPz97fSxOPSEheXx8TzEoZyksW00sWSxIPVtdXT1fMSh4LHtjb2xvcjphPz9PLHdpZHRoOnU/P28/P3csaGVpZ2h0Omk/P28/P3csc3Ryb2tlV2lkdGg6cz8/UixhYnNvbHV0ZVN0cm9rZVdpZHRoOmY/P0Usbm9uU2NhbGluZ1N0cm9rZTpkPz9ULGNsYXNzTmFtZTpJdShBLHApLGhhc0ExMXlQcm9wOk4sYXR0cmlidXRlczpnfSk7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChNLHtyZWY6QywuLi5ZfSxbLi4uSC5tYXAoKFtVLEJdKT0+di5jcmVhdGVFbGVtZW50KFUsQikpLC4uLkFycmF5LmlzQXJyYXkoeSk/eTpbeV1dKX0pO2Z1bmN0aW9uIG90KGEsbz1bXSx1PVtdKXtjb25zdCBpPXR5cGVvZiBhPT0ic3RyaW5nIj9UMShhLG8sdSk6YSxzPXYuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTpmLC4uLmR9LHApPT52LmNyZWF0ZUVsZW1lbnQoRDEse3JlZjpwLGljb246aSxjbGFzc05hbWU6ZiwuLi5kfSkpO3JldHVybiBpLm5hbWUmJihzLmRpc3BsYXlOYW1lPUUxKGkubmFtZSkpLHN9Y29uc3QgU2g9e25hbWU6ImJlbGwiLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIsa2V5OiJ2d3ZidDkifV0sWyJwYXRoIix7ZDoiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiLGtleToiMTFnOXZpIn1dXX07U2gubm9kZTtjb25zdCBDaD1vdChTaCk7Y29uc3QgVGg9e25hbWU6ImNhbGVuZGFyIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik04IDJ2MyIsa2V5OiIxaW9lc24ifV0sWyJwYXRoIix7ZDoiTTE2IDJ2MyIsa2V5OiJvdGwzNDcifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiIsa2V5OiJoMW9pYiJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4IixrZXk6IjFwdWRjdCJ9XV19O1RoLm5vZGU7Y29uc3Qgd2g9b3QoVGgpO2NvbnN0IEVoPXtuYW1lOiJjaGVjayIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXX07RWgubm9kZTtjb25zdCBHdT1vdChFaCk7Y29uc3QgUmg9e25hbWU6ImNoZXZyb24tZG93biIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXX07Umgubm9kZTtjb25zdCBfaD1vdChSaCk7Y29uc3QgT2g9e25hbWU6ImNoZXZyb24tbGVmdCIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJtMTUgMTgtNi02IDYtNiIsa2V5OiIxd25mZzMifV1dfTtPaC5ub2RlO2NvbnN0IGoxPW90KE9oKTtjb25zdCBBaD17bmFtZToiY2hldnJvbi1yaWdodCIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02IixrZXk6Im10aGh3cSJ9XV19O0FoLm5vZGU7Y29uc3QgTTE9b3QoQWgpO2NvbnN0IE5oPXtuYW1lOiJjaXJjbGUtY2hlY2stYmlnIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik0yMS44MDEgMTBBMTAgMTAgMCAxIDEgMTcgMy4zMzUiLGtleToieXBzM2N0In1dLFsicGF0aCIse2Q6Im05IDExIDMgM0wyMiA0IixrZXk6IjFwZmx6bCJ9XV0sYWxpYXNlczpbImNoZWNrLWNpcmNsZSJdfTtOaC5ub2RlO2NvbnN0IHoxPW90KE5oKTtjb25zdCBEaD17bmFtZToiY2lyY2xlLXF1ZXN0aW9uLW1hcmsiLHNpemU6MjQsbm9kZTpbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIsa2V5OiIxdTc3M3MifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSIsa2V5OiJwMzJwMDUifV1dLGFsaWFzZXM6WyJoZWxwLWNpcmNsZSIsImNpcmNsZS1oZWxwIl19O0RoLm5vZGU7Y29uc3QgazE9b3QoRGgpO2NvbnN0IGpoPXtuYW1lOiJjaXJjbGUteCIsc2l6ZToyNCxub2RlOltbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoibTE1IDktNiA2IixrZXk6IjF1emh2ciJ9XSxbInBhdGgiLHtkOiJtOSA5IDYgNiIsa2V5OiJ6MGJpcWYifV1dLGFsaWFzZXM6WyJ4LWNpcmNsZSJdfTtqaC5ub2RlO2NvbnN0IEwxPW90KGpoKTtjb25zdCBNaD17bmFtZToiZG93bmxvYWQiLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTEyIDE1VjMiLGtleToibTlnMXgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XSxbInBhdGgiLHtkOiJtNyAxMCA1IDUgNS01IixrZXk6ImJyc243MCJ9XV19O01oLm5vZGU7Y29uc3QgVTE9b3QoTWgpO2NvbnN0IHpoPXtuYW1lOiJmaWxlLXRleHQiLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiLGtleToiMW9lZmo2In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IixrZXk6Indmc2dyeiJ9XSxbInBhdGgiLHtkOiJNMTAgOUg4IixrZXk6ImIxbXJsciJ9XSxbInBhdGgiLHtkOiJNMTYgMTNIOCIsa2V5OiJ0NGUwMDIifV0sWyJwYXRoIix7ZDoiTTE2IDE3SDgiLGtleToiejF1aDNhIn1dXX07emgubm9kZTtjb25zdCBraD1vdCh6aCk7Y29uc3QgTGg9e25hbWU6ImluYm94IixzaXplOjI0LG5vZGU6W1sicG9seWxpbmUiLHtwb2ludHM6IjIyIDEyIDE2IDEyIDE0IDE1IDEwIDE1IDggMTIgMiAxMiIsa2V5OiJvOTd0OWQifV0sWyJwYXRoIix7ZDoiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIsa2V5OiJvb3Q2bXIifV1dfTtMaC5ub2RlO2NvbnN0IEgxPW90KExoKTtjb25zdCBVaD17bmFtZToibG9hZGVyLWNpcmNsZSIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiLGtleToiMTN6YWxkIn1dXSxhbGlhc2VzOlsibG9hZGVyLTIiXX07VWgubm9kZTtjb25zdCBIaD1vdChVaCk7Y29uc3QgQmg9e25hbWU6Im1pbnVzIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik01IDEyaDE0IixrZXk6IjFheXMwaCJ9XV19O0JoLm5vZGU7Y29uc3QgQjE9b3QoQmgpO2NvbnN0IEloPXtuYW1lOiJtb29uIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIixrZXk6Imtmd3RtIn1dXX07SWgubm9kZTtjb25zdCBJMT1vdChJaCk7Y29uc3QgUGg9e25hbWU6InBlbmNpbCIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIsa2V5OiIxYTh1c3UifV0sWyJwYXRoIix7ZDoibTE1IDUgNCA0IixrZXk6IjFtazd6byJ9XV19O1BoLm5vZGU7Y29uc3QgR2g9b3QoUGgpO2NvbnN0IFZoPXtuYW1lOiJwbHVzIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik01IDEyaDE0IixrZXk6IjFheXMwaCJ9XSxbInBhdGgiLHtkOiJNMTIgNXYxNCIsa2V5OiJzNjk5bGUifV1dfTtWaC5ub2RlO2NvbnN0IFloPW90KFZoKTtjb25zdCBxaD17bmFtZToic2VhcmNoIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXX07cWgubm9kZTtjb25zdCBYaD1vdChxaCk7Y29uc3QgS2g9e25hbWU6InN1biIsc2l6ZToyNCxub2RlOltbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0IixrZXk6IjRleGlwMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEiLGtleToiMTQ5dDZqIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEiLGtleToicHRiZ3V2In1dLFsicGF0aCIse2Q6Ik0yIDEyaDIiLGtleToiMXQ4ZjhuIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIixrZXk6IjFxOG1qdyJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiLGtleToiMW04eno1In1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSIsa2V5OiIxc2hsY3MifV1dfTtLaC5ub2RlO2NvbnN0IFAxPW90KEtoKTtjb25zdCBRaD17bmFtZToidHJhc2giLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTEwIDExdjYiLGtleToibmNvMG9tIn1dLFsicGF0aCIse2Q6Ik0xNCAxMXY2IixrZXk6Im91dHYxdSJ9XSxbInBhdGgiLHtkOiJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IixrZXk6Im1peXRyYyJ9XSxbInBhdGgiLHtkOiJNMyA2aDE4IixrZXk6ImQwd20waiJ9XSxbInBhdGgiLHtkOiJNOCA2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MiIsa2V5OiJlNzkxamkifV1dLGFsaWFzZXM6WyJ0cmFzaC0yIl19O1FoLm5vZGU7Y29uc3QgRzE9b3QoUWgpO2NvbnN0IFpoPXtuYW1lOiJ4IixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXX07Wmgubm9kZTtjb25zdCBWMT1vdChaaCksRmg9ImxhcmstdWktc2hvd2Nhc2UtdGhlbWUiO2Z1bmN0aW9uIFkxKCl7Y29uc3QgYT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShGaCk7cmV0dXJuIGE9PT0ibGlnaHQifHxhPT09ImRhcmsiP2E6d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQifWZ1bmN0aW9uIHExKCl7Y29uc3RbYSxvXT12LnVzZVN0YXRlKCJsaWdodCIpO3YudXNlRWZmZWN0KCgpPT57Y29uc3Qgcz1ZMSgpO28ocyksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWU9c30sW10pO2Z1bmN0aW9uIHUocyl7byhzKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZT1zLGxvY2FsU3RvcmFnZS5zZXRJdGVtKEZoLHMpfWNvbnN0IGk9YT09PSJkYXJrIjtyZXR1cm4gbS5qc3hzKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnUoaT8ibGlnaHQiOiJkYXJrIiksImFyaWEtbGFiZWwiOmk/IkNodXnhu4NuIHNhbmcgZ2lhbyBkaeG7h24gc8OhbmciOiJDaHV54buDbiBzYW5nIGdpYW8gZGnhu4duIHThu5FpIiwiYXJpYS1wcmVzc2VkIjppLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaC04IGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4zMDAgYmctYnJhbmQtcHJpbWFyeSBweC0yLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjcwMCBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgaG92ZXI6YmctbGFyay1uNTAgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLVt2YXIoLS1mb2N1cy1yaW5nLWNvbG9yKV0iLGNoaWxkcmVuOltpP20uanN4KFAxLHtjbGFzc05hbWU6InNpemUtNCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KTptLmpzeChJMSx7Y2xhc3NOYW1lOiJzaXplLTQiLCJhcmlhLWhpZGRlbiI6InRydWUifSksbS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImhpZGRlbiBzbTppbmxpbmUiLGNoaWxkcmVuOmk/IlPDoW5nIjoiVOG7kWkifSldfSl9ZnVuY3Rpb24gJGgoYSl7dmFyIG8sdSxpPSIiO2lmKHR5cGVvZiBhPT0ic3RyaW5nInx8dHlwZW9mIGE9PSJudW1iZXIiKWkrPWE7ZWxzZSBpZih0eXBlb2YgYT09Im9iamVjdCIpaWYoQXJyYXkuaXNBcnJheShhKSl7dmFyIHM9YS5sZW5ndGg7Zm9yKG89MDtvPHM7bysrKWFbb10mJih1PSRoKGFbb10pKSYmKGkmJihpKz0iICIpLGkrPXUpfWVsc2UgZm9yKHUgaW4gYSlhW3VdJiYoaSYmKGkrPSIgIiksaSs9dSk7cmV0dXJuIGl9ZnVuY3Rpb24gSmgoKXtmb3IodmFyIGEsbyx1PTAsaT0iIixzPWFyZ3VtZW50cy5sZW5ndGg7dTxzO3UrKykoYT1hcmd1bWVudHNbdV0pJiYobz0kaChhKSkmJihpJiYoaSs9IiAiKSxpKz1vKTtyZXR1cm4gaX1jb25zdCBYMT0oYSxvKT0+e2NvbnN0IHU9bmV3IEFycmF5KGEubGVuZ3RoK28ubGVuZ3RoKTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl1W2ldPWFbaV07Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspdVthLmxlbmd0aCtpXT1vW2ldO3JldHVybiB1fSxLMT0oYSxvKT0+KHtjbGFzc0dyb3VwSWQ6YSx2YWxpZGF0b3I6b30pLFdoPShhPW5ldyBNYXAsbz1udWxsLHUpPT4oe25leHRQYXJ0OmEsdmFsaWRhdG9yczpvLGNsYXNzR3JvdXBJZDp1fSksbWk9Ii0iLGVwPVtdLFExPSJhcmJpdHJhcnkuLiIsWjE9YT0+e2NvbnN0IG89JDEoYSkse2NvbmZsaWN0aW5nQ2xhc3NHcm91cHM6dSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6aX09YTtyZXR1cm57Z2V0Q2xhc3NHcm91cElkOmQ9PntpZihkLnN0YXJ0c1dpdGgoIlsiKSYmZC5lbmRzV2l0aCgiXSIpKXJldHVybiBGMShkKTtjb25zdCBwPWQuc3BsaXQobWkpLHk9cFswXT09PSIiJiZwLmxlbmd0aD4xPzE6MDtyZXR1cm4gdHAocCx5LG8pfSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6KGQscCk9PntpZihwKXtjb25zdCB5PWlbZF0sYj11W2RdO3JldHVybiB5P2I/WDEoYix5KTp5OmJ8fGVwfXJldHVybiB1W2RdfHxlcH19fSx0cD0oYSxvLHUpPT57aWYoYS5sZW5ndGgtbz09PTApcmV0dXJuIHUuY2xhc3NHcm91cElkO2NvbnN0IHM9YVtvXSxmPXUubmV4dFBhcnQuZ2V0KHMpO2lmKGYpe2NvbnN0IGI9dHAoYSxvKzEsZik7aWYoYilyZXR1cm4gYn1jb25zdCBkPXUudmFsaWRhdG9ycztpZihkPT09bnVsbClyZXR1cm47Y29uc3QgcD1vPT09MD9hLmpvaW4obWkpOmEuc2xpY2Uobykuam9pbihtaSkseT1kLmxlbmd0aDtmb3IobGV0IGI9MDtiPHk7YisrKXtjb25zdCB4PWRbYl07aWYoeC52YWxpZGF0b3IocCkpcmV0dXJuIHguY2xhc3NHcm91cElkfX0sRjE9YT0+YS5zbGljZSgxLC0xKS5pbmRleE9mKCI6Iik9PT0tMT92b2lkIDA6KCgpPT57Y29uc3Qgbz1hLnNsaWNlKDEsLTEpLHU9by5pbmRleE9mKCI6IiksaT1vLnNsaWNlKDAsdSk7cmV0dXJuIGk/UTEraTp2b2lkIDB9KSgpLCQxPWE9Pntjb25zdHt0aGVtZTpvLGNsYXNzR3JvdXBzOnV9PWE7cmV0dXJuIEoxKHUsbyl9LEoxPShhLG8pPT57Y29uc3QgdT1XaCgpO2Zvcihjb25zdCBpIGluIGEpe2NvbnN0IHM9YVtpXTtWdShzLHUsaSxvKX1yZXR1cm4gdX0sVnU9KGEsbyx1LGkpPT57Y29uc3Qgcz1hLmxlbmd0aDtmb3IobGV0IGY9MDtmPHM7ZisrKXtjb25zdCBkPWFbZl07VzEoZCxvLHUsaSl9fSxXMT0oYSxvLHUsaSk9PntpZih0eXBlb2YgYT09InN0cmluZyIpe2VDKGEsbyx1KTtyZXR1cm59aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpe3RDKGEsbyx1LGkpO3JldHVybn1uQyhhLG8sdSxpKX0sZUM9KGEsbyx1KT0+e2NvbnN0IGk9YT09PSIiP286bnAobyxhKTtpLmNsYXNzR3JvdXBJZD11fSx0Qz0oYSxvLHUsaSk9PntpZihsQyhhKSl7VnUoYShpKSxvLHUsaSk7cmV0dXJufW8udmFsaWRhdG9ycz09PW51bGwmJihvLnZhbGlkYXRvcnM9W10pLG8udmFsaWRhdG9ycy5wdXNoKEsxKHUsYSkpfSxuQz0oYSxvLHUsaSk9Pntjb25zdCBzPU9iamVjdC5lbnRyaWVzKGEpLGY9cy5sZW5ndGg7Zm9yKGxldCBkPTA7ZDxmO2QrKyl7Y29uc3RbcCx5XT1zW2RdO1Z1KHksbnAobyxwKSx1LGkpfX0sbnA9KGEsbyk9PntsZXQgdT1hO2NvbnN0IGk9by5zcGxpdChtaSkscz1pLmxlbmd0aDtmb3IobGV0IGY9MDtmPHM7ZisrKXtjb25zdCBkPWlbZl07bGV0IHA9dS5uZXh0UGFydC5nZXQoZCk7cHx8KHA9V2goKSx1Lm5leHRQYXJ0LnNldChkLHApKSx1PXB9cmV0dXJuIHV9LGxDPWE9PiJpc1RoZW1lR2V0dGVyImluIGEmJmEuaXNUaGVtZUdldHRlcj09PSEwLGFDPWE9PntpZihhPDEpcmV0dXJue2dldDooKT0+e30sc2V0OigpPT57fX07bGV0IG89MCx1PU9iamVjdC5jcmVhdGUobnVsbCksaT1PYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IHM9KGYsZCk9Pnt1W2ZdPWQsbysrLG8+YSYmKG89MCxpPXUsdT1PYmplY3QuY3JlYXRlKG51bGwpKX07cmV0dXJue2dldChmKXtsZXQgZD11W2ZdO2lmKGQhPT12b2lkIDApcmV0dXJuIGQ7aWYoKGQ9aVtmXSkhPT12b2lkIDApcmV0dXJuIHMoZixkKSxkfSxzZXQoZixkKXtmIGluIHU/dVtmXT1kOnMoZixkKX19fSxZdT0iISIsbHA9IjoiLG9DPVtdLGFwPShhLG8sdSxpLHMpPT4oe21vZGlmaWVyczphLGhhc0ltcG9ydGFudE1vZGlmaWVyOm8sYmFzZUNsYXNzTmFtZTp1LG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246aSxpc0V4dGVybmFsOnN9KSxyQz1hPT57Y29uc3R7cHJlZml4Om8sZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWU6dX09YTtsZXQgaT1zPT57Y29uc3QgZj1bXTtsZXQgZD0wLHA9MCx5PTAsYjtjb25zdCB4PXMubGVuZ3RoO2ZvcihsZXQgRT0wO0U8eDtFKyspe2NvbnN0IFQ9c1tFXTtpZihkPT09MCYmcD09PTApe2lmKFQ9PT1scCl7Zi5wdXNoKHMuc2xpY2UoeSxFKSkseT1FKzE7Y29udGludWV9aWYoVD09PSIvIil7Yj1FO2NvbnRpbnVlfX1UPT09IlsiP2QrKzpUPT09Il0iP2QtLTpUPT09IigiP3ArKzpUPT09IikiJiZwLS19Y29uc3QgZz1mLmxlbmd0aD09PTA/czpzLnNsaWNlKHkpO2xldCBDPWcsdz0hMTtnLmVuZHNXaXRoKFl1KT8oQz1nLnNsaWNlKDAsLTEpLHc9ITApOmcuc3RhcnRzV2l0aChZdSkmJihDPWcuc2xpY2UoMSksdz0hMCk7Y29uc3QgUj1iJiZiPnk/Yi15OnZvaWQgMDtyZXR1cm4gYXAoZix3LEMsUil9O2lmKG8pe2NvbnN0IHM9bytscCxmPWk7aT1kPT5kLnN0YXJ0c1dpdGgocyk/ZihkLnNsaWNlKHMubGVuZ3RoKSk6YXAob0MsITEsZCx2b2lkIDAsITApfWlmKHUpe2NvbnN0IHM9aTtpPWY9PnUoe2NsYXNzTmFtZTpmLHBhcnNlQ2xhc3NOYW1lOnN9KX1yZXR1cm4gaX0saUM9YT0+e2NvbnN0IG89bmV3IE1hcDtyZXR1cm4gYS5vcmRlclNlbnNpdGl2ZU1vZGlmaWVycy5mb3JFYWNoKCh1LGkpPT57by5zZXQodSwxZTYraSl9KSx1PT57Y29uc3QgaT1bXTtsZXQgcz1bXTtmb3IobGV0IGY9MDtmPHUubGVuZ3RoO2YrKyl7Y29uc3QgZD11W2ZdLHA9ZFswXT09PSJbIix5PW8uaGFzKGQpO3B8fHk/KHMubGVuZ3RoPjAmJihzLnNvcnQoKSxpLnB1c2goLi4ucykscz1bXSksaS5wdXNoKGQpKTpzLnB1c2goZCl9cmV0dXJuIHMubGVuZ3RoPjAmJihzLnNvcnQoKSxpLnB1c2goLi4ucykpLGl9fSxjQz1hPT4oe2NhY2hlOmFDKGEuY2FjaGVTaXplKSxwYXJzZUNsYXNzTmFtZTpyQyhhKSxzb3J0TW9kaWZpZXJzOmlDKGEpLHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwSWRzOnVDKGEpLC4uLloxKGEpfSksdUM9YT0+e2NvbnN0IG89T2JqZWN0LmNyZWF0ZShudWxsKSx1PWEucG9zdGZpeExvb2t1cENsYXNzR3JvdXBzO2lmKHUpZm9yKGxldCBpPTA7aTx1Lmxlbmd0aDtpKyspb1t1W2ldXT0hMDtyZXR1cm4gb30sc0M9L1xzKy8sZkM9KGEsbyk9Pntjb25zdHtwYXJzZUNsYXNzTmFtZTp1LGdldENsYXNzR3JvdXBJZDppLGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkczpzLHNvcnRNb2RpZmllcnM6Zixwb3N0Zml4TG9va3VwQ2xhc3NHcm91cElkczpkfT1vLHA9W10seT1hLnRyaW0oKS5zcGxpdChzQyk7bGV0IGI9IiI7Zm9yKGxldCB4PXkubGVuZ3RoLTE7eD49MDt4LT0xKXtjb25zdCBnPXlbeF0se2lzRXh0ZXJuYWw6Qyxtb2RpZmllcnM6dyxoYXNJbXBvcnRhbnRNb2RpZmllcjpSLGJhc2VDbGFzc05hbWU6RSxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOlR9PXUoZyk7aWYoQyl7Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpO2NvbnRpbnVlfWxldCBPPSEhVCxBO2lmKE8pe2NvbnN0IFU9RS5zdWJzdHJpbmcoMCxUKTtBPWkoVSk7Y29uc3QgQj1BJiZkW0FdP2koRSk6dm9pZCAwO0ImJkIhPT1BJiYoQT1CLE89ITEpfWVsc2UgQT1pKEUpO2lmKCFBKXtpZighTyl7Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpO2NvbnRpbnVlfWlmKEE9aShFKSwhQSl7Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpO2NvbnRpbnVlfU89ITF9Y29uc3QgTj13Lmxlbmd0aD09PTA/IiI6dy5sZW5ndGg9PT0xP3dbMF06Zih3KS5qb2luKCI6IiksTT1SP04rWXU6TixZPU0rQTtpZihwLmluZGV4T2YoWSk+LTEpY29udGludWU7cC5wdXNoKFkpO2NvbnN0IEg9cyhBLE8pO2ZvcihsZXQgVT0wO1U8SC5sZW5ndGg7KytVKXtjb25zdCBCPUhbVV07cC5wdXNoKE0rQil9Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpfXJldHVybiBifSxkQz0oLi4uYSk9PntsZXQgbz0wLHUsaSxzPSIiO2Zvcig7bzxhLmxlbmd0aDspKHU9YVtvKytdKSYmKGk9b3AodSkpJiYocyYmKHMrPSIgIikscys9aSk7cmV0dXJuIHN9LG9wPWE9PntpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGE7bGV0IG8sdT0iIjtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKylhW2ldJiYobz1vcChhW2ldKSkmJih1JiYodSs9IiAiKSx1Kz1vKTtyZXR1cm4gdX0sbUM9KGEsLi4ubyk9PntsZXQgdSxpLHMsZjtjb25zdCBkPXk9Pntjb25zdCBiPW8ucmVkdWNlKCh4LGcpPT5nKHgpLGEoKSk7cmV0dXJuIHU9Y0MoYiksaT11LmNhY2hlLmdldCxzPXUuY2FjaGUuc2V0LGY9cCxwKHkpfSxwPXk9Pntjb25zdCBiPWkoeSk7aWYoYilyZXR1cm4gYjtjb25zdCB4PWZDKHksdSk7cmV0dXJuIHMoeSx4KSx4fTtyZXR1cm4gZj1kLCguLi55KT0+ZihkQyguLi55KSl9LGhDPVtdLHB0PWE9Pntjb25zdCBvPXU9PnVbYV18fGhDO3JldHVybiBvLmlzVGhlbWVHZXR0ZXI9ITAsby50aGVtZUtleT1hLG99LHJwPS9eXFsoPzooXHdbXHctXSopOik/KC4rKVxdJC9pLGlwPS9eXCgoPzooXHdbXHctXSopOik/KC4rKVwpJC9pLHBDPS9eXGQrKD86XC5cZCspP1wvXGQrKD86XC5cZCspPyQvLHZDPS9eKFxkKyhcLlxkKyk/KT8oeHN8c218bWR8bGd8eGwpJC8sZ0M9L1xkKyglfHB4fHI/ZW18W3NkbF0/dihbaHdpYl18bWlufG1heCl8cHR8cGN8aW58Y218bW18Y2FwfGNofGV4fHI/bGh8Y3Eod3xofGl8YnxtaW58bWF4KSl8XGIoY2FsY3xtaW58bWF4fGNsYW1wKVwoLitcKXxeMCQvLHlDPS9eKHJnYmE/fGhzbGE/fGh3Ynwob2spPyhsYWJ8bGNoKXxjb2xvci1taXh8Y29sb3J8bGlnaHQtZGFyaylcKC4rXCkkLyxiQz0vXihpbnNldF8pPy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyx4Qz0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvLE5sPWE9PnBDLnRlc3QoYSksQWU9YT0+ISFhJiYhTnVtYmVyLmlzTmFOKE51bWJlcihhKSksa249YT0+ISFhJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihhKSkscXU9YT0+YS5lbmRzV2l0aCgiJSIpJiZBZShhLnNsaWNlKDAsLTEpKSxXbj1hPT52Qy50ZXN0KGEpLGNwPSgpPT4hMCxTQz1hPT5nQy50ZXN0KGEpJiYheUMudGVzdChhKSxYdT0oKT0+ITEsQ0M9YT0+YkMudGVzdChhKSxUQz1hPT54Qy50ZXN0KGEpLHdDPWE9PiFkZShhKSYmIXBlKGEpLEVDPWE9PmEuc3RhcnRzV2l0aCgiQGNvbnRhaW5lciIpJiYoYVsxMF09PT0iLyImJmFbMTFdIT09dm9pZCAwfHxhWzExXT09PSJzIiYmYVsxNl0hPT12b2lkIDAmJmEuc3RhcnRzV2l0aCgiLXNpemUvIiwxMCl8fGFbMTFdPT09Im4iJiZhWzE4XSE9PXZvaWQgMCYmYS5zdGFydHNXaXRoKCItbm9ybWFsLyIsMTApKSxSQz1hPT5EbChhLGhwLFh1KSxkZT1hPT5ycC50ZXN0KGEpLGhhPWE9PkRsKGEscHAsU0MpLHVwPWE9PkRsKGEsekMsQWUpLF9DPWE9PkRsKGEsZ3AsY3ApLE9DPWE9PkRsKGEsdnAsWHUpLHNwPWE9PkRsKGEsZHAsWHUpLEFDPWE9PkRsKGEsbXAsVEMpLGhpPWE9PkRsKGEseXAsQ0MpLHBlPWE9PmlwLnRlc3QoYSksbnI9YT0+cGEoYSxwcCksTkM9YT0+cGEoYSx2cCksZnA9YT0+cGEoYSxkcCksREM9YT0+cGEoYSxocCksakM9YT0+cGEoYSxtcCkscGk9YT0+cGEoYSx5cCwhMCksTUM9YT0+cGEoYSxncCwhMCksRGw9KGEsbyx1KT0+e2NvbnN0IGk9cnAuZXhlYyhhKTtyZXR1cm4gaT9pWzFdP28oaVsxXSk6dShpWzJdKTohMX0scGE9KGEsbyx1PSExKT0+e2NvbnN0IGk9aXAuZXhlYyhhKTtyZXR1cm4gaT9pWzFdP28oaVsxXSk6dTohMX0sZHA9YT0+YT09PSJwb3NpdGlvbiJ8fGE9PT0icGVyY2VudGFnZSIsbXA9YT0+YT09PSJpbWFnZSJ8fGE9PT0idXJsIixocD1hPT5hPT09Imxlbmd0aCJ8fGE9PT0ic2l6ZSJ8fGE9PT0iYmctc2l6ZSIscHA9YT0+YT09PSJsZW5ndGgiLHpDPWE9PmE9PT0ibnVtYmVyIix2cD1hPT5hPT09ImZhbWlseS1uYW1lIixncD1hPT5hPT09Im51bWJlciJ8fGE9PT0id2VpZ2h0Iix5cD1hPT5hPT09InNoYWRvdyIsa0M9bUMoKCk9Pntjb25zdCBhPXB0KCJjb2xvciIpLG89cHQoImZvbnQiKSx1PXB0KCJ0ZXh0IiksaT1wdCgiZm9udC13ZWlnaHQiKSxzPXB0KCJ0cmFja2luZyIpLGY9cHQoImxlYWRpbmciKSxkPXB0KCJicmVha3BvaW50IikscD1wdCgiY29udGFpbmVyIikseT1wdCgic3BhY2luZyIpLGI9cHQoInJhZGl1cyIpLHg9cHQoInNoYWRvdyIpLGc9cHQoImluc2V0LXNoYWRvdyIpLEM9cHQoInRleHQtc2hhZG93Iiksdz1wdCgiZHJvcC1zaGFkb3ciKSxSPXB0KCJibHVyIiksRT1wdCgicGVyc3BlY3RpdmUiKSxUPXB0KCJhc3BlY3QiKSxPPXB0KCJlYXNlIiksQT1wdCgiYW5pbWF0ZSIpLE49KCk9PlsiYXV0byIsImF2b2lkIiwiYWxsIiwiYXZvaWQtcGFnZSIsInBhZ2UiLCJsZWZ0IiwicmlnaHQiLCJjb2x1bW4iXSxNPSgpPT5bImNlbnRlciIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcC1sZWZ0IiwibGVmdC10b3AiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJib3R0b20tcmlnaHQiLCJyaWdodC1ib3R0b20iLCJib3R0b20tbGVmdCIsImxlZnQtYm90dG9tIl0sWT0oKT0+Wy4uLk0oKSxwZSxkZV0sSD0oKT0+WyJhdXRvIiwiaGlkZGVuIiwiY2xpcCIsInZpc2libGUiLCJzY3JvbGwiXSxVPSgpPT5bImF1dG8iLCJjb250YWluIiwibm9uZSJdLEI9KCk9PltwZSxkZSx5XSxKPSgpPT5bTmwsImZ1bGwiLCJhdXRvIiwuLi5CKCldLFc9KCk9Pltrbiwibm9uZSIsInN1YmdyaWQiLHBlLGRlXSxuZT0oKT0+WyJhdXRvIix7c3BhbjpbImZ1bGwiLGtuLHBlLGRlXX0sa24scGUsZGVdLGVlPSgpPT5ba24sImF1dG8iLHBlLGRlXSxjZT0oKT0+WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLHBlLGRlXSxtZT0oKT0+WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJldHdlZW4iLCJhcm91bmQiLCJldmVubHkiLCJzdHJldGNoIiwiYmFzZWxpbmUiLCJjZW50ZXItc2FmZSIsImVuZC1zYWZlIl0saGU9KCk9Plsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIiwiY2VudGVyLXNhZmUiLCJlbmQtc2FmZSJdLFA9KCk9PlsiYXV0byIsLi4uQigpXSwkPSgpPT5bTmwsImF1dG8iLCJmdWxsIiwiZHZ3IiwiZHZoIiwibHZ3IiwibHZoIiwic3Z3Iiwic3ZoIiwibWluIiwibWF4IiwiZml0IiwuLi5CKCldLEY9KCk9PltwLE5sLCJzY3JlZW4iLCJmdWxsIiwiZHZ3IiwibHZ3Iiwic3Z3IiwibWluIiwibWF4IiwiZml0IiwuLi5CKCldLHJlPSgpPT5bTmwsInNjcmVlbiIsImZ1bGwiLCJsaCIsImR2aCIsImx2aCIsInN2aCIsIm1pbiIsIm1heCIsImZpdCIsLi4uQigpXSxxPSgpPT5bYSxwZSxkZV0seGU9KCk9PlsuLi5NKCksZnAsc3Ase3Bvc2l0aW9uOltwZSxkZV19XSxqZT0oKT0+WyJuby1yZXBlYXQiLHtyZXBlYXQ6WyIiLCJ4IiwieSIsInNwYWNlIiwicm91bmQiXX1dLFllPSgpPT5bImF1dG8iLCJjb3ZlciIsImNvbnRhaW4iLERDLFJDLHtzaXplOltwZSxkZV19XSxEPSgpPT5bcXUsbnIsaGFdLFg9KCk9PlsiIiwibm9uZSIsImZ1bGwiLGIscGUsZGVdLEs9KCk9PlsiIixBZSxucixoYV0sYWU9KCk9Plsic29saWQiLCJkYXNoZWQiLCJkb3R0ZWQiLCJkb3VibGUiXSx5ZT0oKT0+WyJub3JtYWwiLCJtdWx0aXBseSIsInNjcmVlbiIsIm92ZXJsYXkiLCJkYXJrZW4iLCJsaWdodGVuIiwiY29sb3ItZG9kZ2UiLCJjb2xvci1idXJuIiwiaGFyZC1saWdodCIsInNvZnQtbGlnaHQiLCJkaWZmZXJlbmNlIiwiZXhjbHVzaW9uIiwiaHVlIiwic2F0dXJhdGlvbiIsImNvbG9yIiwibHVtaW5vc2l0eSJdLHNlPSgpPT5bQWUscXUsZnAsc3BdLGxlPSgpPT5bIiIsIm5vbmUiLFIscGUsZGVdLHRlPSgpPT5bIm5vbmUiLEFlLHBlLGRlXSxpZT0oKT0+WyJub25lIixBZSxwZSxkZV0sYmU9KCk9PltBZSxwZSxkZV0sd2U9KCk9PltObCwiZnVsbCIsLi4uQigpXTtyZXR1cm57Y2FjaGVTaXplOjUwMCx0aGVtZTp7YW5pbWF0ZTpbInNwaW4iLCJwaW5nIiwicHVsc2UiLCJib3VuY2UiXSxhc3BlY3Q6WyJ2aWRlbyJdLGJsdXI6W1duXSxicmVha3BvaW50OltXbl0sY29sb3I6W2NwXSxjb250YWluZXI6W1duXSwiZHJvcC1zaGFkb3ciOltXbl0sZWFzZTpbImluIiwib3V0IiwiaW4tb3V0Il0sZm9udDpbd0NdLCJmb250LXdlaWdodCI6WyJ0aGluIiwiZXh0cmFsaWdodCIsImxpZ2h0Iiwibm9ybWFsIiwibWVkaXVtIiwic2VtaWJvbGQiLCJib2xkIiwiZXh0cmFib2xkIiwiYmxhY2siXSwiaW5zZXQtc2hhZG93IjpbV25dLGxlYWRpbmc6WyJub25lIiwidGlnaHQiLCJzbnVnIiwibm9ybWFsIiwicmVsYXhlZCIsImxvb3NlIl0scGVyc3BlY3RpdmU6WyJkcmFtYXRpYyIsIm5lYXIiLCJub3JtYWwiLCJtaWRyYW5nZSIsImRpc3RhbnQiLCJub25lIl0scmFkaXVzOltXbl0sc2hhZG93OltXbl0sc3BhY2luZzpbInB4IixBZV0sdGV4dDpbV25dLCJ0ZXh0LXNoYWRvdyI6W1duXSx0cmFja2luZzpbInRpZ2h0ZXIiLCJ0aWdodCIsIm5vcm1hbCIsIndpZGUiLCJ3aWRlciIsIndpZGVzdCJdfSxjbGFzc0dyb3Vwczp7YXNwZWN0Olt7YXNwZWN0OlsiYXV0byIsInNxdWFyZSIsTmwsZGUscGUsVF19XSxjb250YWluZXI6WyJjb250YWluZXIiXSwiY29udGFpbmVyLXR5cGUiOlt7IkBjb250YWluZXIiOlsiIiwibm9ybWFsIiwic2l6ZSIscGUsZGVdfV0sImNvbnRhaW5lci1uYW1lZCI6W0VDXSxjb2x1bW5zOlt7Y29sdW1uczpbQWUsImF1dG8iLGRlLHBlLHBdfV0sImJyZWFrLWFmdGVyIjpbeyJicmVhay1hZnRlciI6TigpfV0sImJyZWFrLWJlZm9yZSI6W3siYnJlYWstYmVmb3JlIjpOKCl9XSwiYnJlYWstaW5zaWRlIjpbeyJicmVhay1pbnNpZGUiOlsiYXV0byIsImF2b2lkIiwiYXZvaWQtcGFnZSIsImF2b2lkLWNvbHVtbiJdfV0sImJveC1kZWNvcmF0aW9uIjpbeyJib3gtZGVjb3JhdGlvbiI6WyJzbGljZSIsImNsb25lIl19XSxib3g6W3tib3g6WyJib3JkZXIiLCJjb250ZW50Il19XSxkaXNwbGF5OlsiYmxvY2siLCJpbmxpbmUtYmxvY2siLCJpbmxpbmUiLCJmbGV4IiwiaW5saW5lLWZsZXgiLCJ0YWJsZSIsImlubGluZS10YWJsZSIsInRhYmxlLWNhcHRpb24iLCJ0YWJsZS1jZWxsIiwidGFibGUtY29sdW1uIiwidGFibGUtY29sdW1uLWdyb3VwIiwidGFibGUtZm9vdGVyLWdyb3VwIiwidGFibGUtaGVhZGVyLWdyb3VwIiwidGFibGUtcm93LWdyb3VwIiwidGFibGUtcm93IiwiZmxvdy1yb290IiwiZ3JpZCIsImlubGluZS1ncmlkIiwiY29udGVudHMiLCJsaXN0LWl0ZW0iLCJoaWRkZW4iXSxzcjpbInNyLW9ubHkiLCJub3Qtc3Itb25seSJdLGZsb2F0Olt7ZmxvYXQ6WyJyaWdodCIsImxlZnQiLCJub25lIiwic3RhcnQiLCJlbmQiXX1dLGNsZWFyOlt7Y2xlYXI6WyJsZWZ0IiwicmlnaHQiLCJib3RoIiwibm9uZSIsInN0YXJ0IiwiZW5kIl19XSxpc29sYXRpb246WyJpc29sYXRlIiwiaXNvbGF0aW9uLWF1dG8iXSwib2JqZWN0LWZpdCI6W3tvYmplY3Q6WyJjb250YWluIiwiY292ZXIiLCJmaWxsIiwibm9uZSIsInNjYWxlLWRvd24iXX1dLCJvYmplY3QtcG9zaXRpb24iOlt7b2JqZWN0OlkoKX1dLG92ZXJmbG93Olt7b3ZlcmZsb3c6SCgpfV0sIm92ZXJmbG93LXgiOlt7Im92ZXJmbG93LXgiOkgoKX1dLCJvdmVyZmxvdy15IjpbeyJvdmVyZmxvdy15IjpIKCl9XSxvdmVyc2Nyb2xsOlt7b3ZlcnNjcm9sbDpVKCl9XSwib3ZlcnNjcm9sbC14IjpbeyJvdmVyc2Nyb2xsLXgiOlUoKX1dLCJvdmVyc2Nyb2xsLXkiOlt7Im92ZXJzY3JvbGwteSI6VSgpfV0scG9zaXRpb246WyJzdGF0aWMiLCJmaXhlZCIsImFic29sdXRlIiwicmVsYXRpdmUiLCJzdGlja3kiXSxpbnNldDpbe2luc2V0OkooKX1dLCJpbnNldC14IjpbeyJpbnNldC14IjpKKCl9XSwiaW5zZXQteSI6W3siaW5zZXQteSI6SigpfV0sc3RhcnQ6W3siaW5zZXQtcyI6SigpLHN0YXJ0OkooKX1dLGVuZDpbeyJpbnNldC1lIjpKKCksZW5kOkooKX1dLCJpbnNldC1icyI6W3siaW5zZXQtYnMiOkooKX1dLCJpbnNldC1iZSI6W3siaW5zZXQtYmUiOkooKX1dLHRvcDpbe3RvcDpKKCl9XSxyaWdodDpbe3JpZ2h0OkooKX1dLGJvdHRvbTpbe2JvdHRvbTpKKCl9XSxsZWZ0Olt7bGVmdDpKKCl9XSx2aXNpYmlsaXR5OlsidmlzaWJsZSIsImludmlzaWJsZSIsImNvbGxhcHNlIl0sejpbe3o6W2tuLCJhdXRvIixwZSxkZV19XSxiYXNpczpbe2Jhc2lzOltObCwiZnVsbCIsImF1dG8iLHAsLi4uQigpXX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Olsicm93Iiwicm93LXJldmVyc2UiLCJjb2wiLCJjb2wtcmV2ZXJzZSJdfV0sImZsZXgtd3JhcCI6W3tmbGV4Olsibm93cmFwIiwid3JhcCIsIndyYXAtcmV2ZXJzZSJdfV0sZmxleDpbe2ZsZXg6W0FlLE5sLCJhdXRvIiwiaW5pdGlhbCIsIm5vbmUiLGRlXX1dLGdyb3c6W3tncm93OlsiIixBZSxwZSxkZV19XSxzaHJpbms6W3tzaHJpbms6WyIiLEFlLHBlLGRlXX1dLG9yZGVyOlt7b3JkZXI6W2tuLCJmaXJzdCIsImxhc3QiLCJub25lIixwZSxkZV19XSwiZ3JpZC1jb2xzIjpbeyJncmlkLWNvbHMiOlcoKX1dLCJjb2wtc3RhcnQtZW5kIjpbe2NvbDpuZSgpfV0sImNvbC1zdGFydCI6W3siY29sLXN0YXJ0IjplZSgpfV0sImNvbC1lbmQiOlt7ImNvbC1lbmQiOmVlKCl9XSwiZ3JpZC1yb3dzIjpbeyJncmlkLXJvd3MiOlcoKX1dLCJyb3ctc3RhcnQtZW5kIjpbe3JvdzpuZSgpfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjplZSgpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOmVlKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOlsicm93IiwiY29sIiwiZGVuc2UiLCJyb3ctZGVuc2UiLCJjb2wtZGVuc2UiXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6Y2UoKX1dLCJhdXRvLXJvd3MiOlt7ImF1dG8tcm93cyI6Y2UoKX1dLGdhcDpbe2dhcDpCKCl9XSwiZ2FwLXgiOlt7ImdhcC14IjpCKCl9XSwiZ2FwLXkiOlt7ImdhcC15IjpCKCl9XSwianVzdGlmeS1jb250ZW50Ijpbe2p1c3RpZnk6Wy4uLm1lKCksIm5vcm1hbCJdfV0sImp1c3RpZnktaXRlbXMiOlt7Imp1c3RpZnktaXRlbXMiOlsuLi5oZSgpLCJub3JtYWwiXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6WyJhdXRvIiwuLi5oZSgpXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6WyJub3JtYWwiLC4uLm1lKCldfV0sImFsaWduLWl0ZW1zIjpbe2l0ZW1zOlsuLi5oZSgpLHtiYXNlbGluZTpbIiIsImxhc3QiXX1dfV0sImFsaWduLXNlbGYiOlt7c2VsZjpbImF1dG8iLC4uLmhlKCkse2Jhc2VsaW5lOlsiIiwibGFzdCJdfV19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6bWUoKX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsuLi5oZSgpLCJiYXNlbGluZSJdfV0sInBsYWNlLXNlbGYiOlt7InBsYWNlLXNlbGYiOlsiYXV0byIsLi4uaGUoKV19XSxwOlt7cDpCKCl9XSxweDpbe3B4OkIoKX1dLHB5Olt7cHk6QigpfV0scHM6W3twczpCKCl9XSxwZTpbe3BlOkIoKX1dLHBiczpbe3BiczpCKCl9XSxwYmU6W3twYmU6QigpfV0scHQ6W3twdDpCKCl9XSxwcjpbe3ByOkIoKX1dLHBiOlt7cGI6QigpfV0scGw6W3twbDpCKCl9XSxtOlt7bTpQKCl9XSxteDpbe214OlAoKX1dLG15Olt7bXk6UCgpfV0sbXM6W3ttczpQKCl9XSxtZTpbe21lOlAoKX1dLG1iczpbe21iczpQKCl9XSxtYmU6W3ttYmU6UCgpfV0sbXQ6W3ttdDpQKCl9XSxtcjpbe21yOlAoKX1dLG1iOlt7bWI6UCgpfV0sbWw6W3ttbDpQKCl9XSwic3BhY2UteCI6W3sic3BhY2UteCI6QigpfV0sInNwYWNlLXgtcmV2ZXJzZSI6WyJzcGFjZS14LXJldmVyc2UiXSwic3BhY2UteSI6W3sic3BhY2UteSI6QigpfV0sInNwYWNlLXktcmV2ZXJzZSI6WyJzcGFjZS15LXJldmVyc2UiXSxzaXplOlt7c2l6ZTokKCl9XSwiaW5saW5lLXNpemUiOlt7aW5saW5lOlsiYXV0byIsLi4uRigpXX1dLCJtaW4taW5saW5lLXNpemUiOlt7Im1pbi1pbmxpbmUiOlsiYXV0byIsLi4uRigpXX1dLCJtYXgtaW5saW5lLXNpemUiOlt7Im1heC1pbmxpbmUiOlsibm9uZSIsLi4uRigpXX1dLCJibG9jay1zaXplIjpbe2Jsb2NrOlsiYXV0byIsLi4ucmUoKV19XSwibWluLWJsb2NrLXNpemUiOlt7Im1pbi1ibG9jayI6WyJhdXRvIiwuLi5yZSgpXX1dLCJtYXgtYmxvY2stc2l6ZSI6W3sibWF4LWJsb2NrIjpbIm5vbmUiLC4uLnJlKCldfV0sdzpbe3c6W3AsInNjcmVlbiIsLi4uJCgpXX1dLCJtaW4tdyI6W3sibWluLXciOltwLCJzY3JlZW4iLCJub25lIiwuLi4kKCldfV0sIm1heC13IjpbeyJtYXgtdyI6W3AsInNjcmVlbiIsIm5vbmUiLCJwcm9zZSIse3NjcmVlbjpbZF19LC4uLiQoKV19XSxoOlt7aDpbInNjcmVlbiIsImxoIiwuLi4kKCldfV0sIm1pbi1oIjpbeyJtaW4taCI6WyJzY3JlZW4iLCJsaCIsIm5vbmUiLC4uLiQoKV19XSwibWF4LWgiOlt7Im1heC1oIjpbInNjcmVlbiIsImxoIiwibm9uZSIsLi4uJCgpXX1dLCJmb250LXNpemUiOlt7dGV4dDpbImJhc2UiLHUsbnIsaGFdfV0sImZvbnQtc21vb3RoaW5nIjpbImFudGlhbGlhc2VkIiwic3VicGl4ZWwtYW50aWFsaWFzZWQiXSwiZm9udC1zdHlsZSI6WyJpdGFsaWMiLCJub3QtaXRhbGljIl0sImZvbnQtd2VpZ2h0Ijpbe2ZvbnQ6W2ksTUMsX0NdfV0sImZvbnQtc3RyZXRjaCI6W3siZm9udC1zdHJldGNoIjpbInVsdHJhLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsImNvbmRlbnNlZCIsInNlbWktY29uZGVuc2VkIiwibm9ybWFsIiwic2VtaS1leHBhbmRlZCIsImV4cGFuZGVkIiwiZXh0cmEtZXhwYW5kZWQiLCJ1bHRyYS1leHBhbmRlZCIscXUsZGVdfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W05DLE9DLG9dfV0sImZvbnQtZmVhdHVyZXMiOlt7ImZvbnQtZmVhdHVyZXMiOltkZV19XSwiZnZuLW5vcm1hbCI6WyJub3JtYWwtbnVtcyJdLCJmdm4tb3JkaW5hbCI6WyJvcmRpbmFsIl0sImZ2bi1zbGFzaGVkLXplcm8iOlsic2xhc2hlZC16ZXJvIl0sImZ2bi1maWd1cmUiOlsibGluaW5nLW51bXMiLCJvbGRzdHlsZS1udW1zIl0sImZ2bi1zcGFjaW5nIjpbInByb3BvcnRpb25hbC1udW1zIiwidGFidWxhci1udW1zIl0sImZ2bi1mcmFjdGlvbiI6WyJkaWFnb25hbC1mcmFjdGlvbnMiLCJzdGFja2VkLWZyYWN0aW9ucyJdLHRyYWNraW5nOlt7dHJhY2tpbmc6W3MscGUsZGVdfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOltBZSwibm9uZSIscGUsdXBdfV0sbGVhZGluZzpbe2xlYWRpbmc6WyJub25lIixmLC4uLkIoKV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6WyJub25lIixwZSxkZV19XSwibGlzdC1zdHlsZS1wb3NpdGlvbiI6W3tsaXN0OlsiaW5zaWRlIiwib3V0c2lkZSJdfV0sImxpc3Qtc3R5bGUtdHlwZSI6W3tsaXN0OlsiZGlzYyIsImRlY2ltYWwiLCJub25lIixwZSxkZV19XSwidGV4dC1hbGlnbm1lbnQiOlt7dGV4dDpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImp1c3RpZnkiLCJzdGFydCIsImVuZCJdfV0sInBsYWNlaG9sZGVyLWNvbG9yIjpbe3BsYWNlaG9sZGVyOnEoKX1dLCJ0ZXh0LWNvbG9yIjpbe3RleHQ6cSgpfV0sInRleHQtZGVjb3JhdGlvbiI6WyJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCIsIm5vLXVuZGVybGluZSJdLCJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOlt7ZGVjb3JhdGlvbjpbLi4uYWUoKSwid2F2eSJdfV0sInRleHQtZGVjb3JhdGlvbi10aGlja25lc3MiOlt7ZGVjb3JhdGlvbjpbQWUsImZyb20tZm9udCIsImF1dG8iLHBlLGhhXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpxKCl9XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6W0FlLCJhdXRvIixwZSxkZV19XSwidGV4dC10cmFuc2Zvcm0iOlsidXBwZXJjYXNlIiwibG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSIsIm5vcm1hbC1jYXNlIl0sInRleHQtb3ZlcmZsb3ciOlsidHJ1bmNhdGUiLCJ0ZXh0LWVsbGlwc2lzIiwidGV4dC1jbGlwIl0sInRleHQtd3JhcCI6W3t0ZXh0Olsid3JhcCIsIm5vd3JhcCIsImJhbGFuY2UiLCJwcmV0dHkiXX1dLGluZGVudDpbe2luZGVudDpCKCl9XSwidGFiLXNpemUiOlt7dGFiOltrbixwZSxkZV19XSwidmVydGljYWwtYWxpZ24iOlt7YWxpZ246WyJiYXNlbGluZSIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSIsInRleHQtdG9wIiwidGV4dC1ib3R0b20iLCJzdWIiLCJzdXBlciIscGUsZGVdfV0sd2hpdGVzcGFjZTpbe3doaXRlc3BhY2U6WyJub3JtYWwiLCJub3dyYXAiLCJwcmUiLCJwcmUtbGluZSIsInByZS13cmFwIiwiYnJlYWstc3BhY2VzIl19XSxicmVhazpbe2JyZWFrOlsibm9ybWFsIiwid29yZHMiLCJhbGwiLCJrZWVwIl19XSx3cmFwOlt7d3JhcDpbImJyZWFrLXdvcmQiLCJhbnl3aGVyZSIsIm5vcm1hbCJdfV0saHlwaGVuczpbe2h5cGhlbnM6WyJub25lIiwibWFudWFsIiwiYXV0byJdfV0sY29udGVudDpbe2NvbnRlbnQ6WyJub25lIixwZSxkZV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbImZpeGVkIiwibG9jYWwiLCJzY3JvbGwiXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwidGV4dCJdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50Il19XSwiYmctcG9zaXRpb24iOlt7Ymc6eGUoKX1dLCJiZy1yZXBlYXQiOlt7Ymc6amUoKX1dLCJiZy1zaXplIjpbe2JnOlllKCl9XSwiYmctaW1hZ2UiOlt7Ymc6WyJub25lIix7bGluZWFyOlt7dG86WyJ0IiwidHIiLCJyIiwiYnIiLCJiIiwiYmwiLCJsIiwidGwiXX0sa24scGUsZGVdLHJhZGlhbDpbIiIscGUsZGVdLGNvbmljOlsiIixrbixwZSxkZV19LGpDLEFDXX1dLCJiZy1jb2xvciI6W3tiZzpxKCl9XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpEKCl9XSwiZ3JhZGllbnQtdmlhLXBvcyI6W3t2aWE6RCgpfV0sImdyYWRpZW50LXRvLXBvcyI6W3t0bzpEKCl9XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOnEoKX1dLCJncmFkaWVudC12aWEiOlt7dmlhOnEoKX1dLCJncmFkaWVudC10byI6W3t0bzpxKCl9XSxyb3VuZGVkOlt7cm91bmRlZDpYKCl9XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOlgoKX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6WCgpfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpYKCl9XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOlgoKX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6WCgpfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpYKCl9XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6WCgpfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOlgoKX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpYKCl9XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6WCgpfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOlgoKX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpYKCl9XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6WCgpfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOlgoKX1dLCJib3JkZXItdyI6W3tib3JkZXI6SygpfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14IjpLKCl9XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOksoKX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6SygpfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpLKCl9XSwiYm9yZGVyLXctYnMiOlt7ImJvcmRlci1icyI6SygpfV0sImJvcmRlci13LWJlIjpbeyJib3JkZXItYmUiOksoKX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6SygpfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjpLKCl9XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOksoKX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6SygpfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6SygpfV0sImRpdmlkZS14LXJldmVyc2UiOlsiZGl2aWRlLXgtcmV2ZXJzZSJdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOksoKX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbImRpdmlkZS15LXJldmVyc2UiXSwiYm9yZGVyLXN0eWxlIjpbe2JvcmRlcjpbLi4uYWUoKSwiaGlkZGVuIiwibm9uZSJdfV0sImRpdmlkZS1zdHlsZSI6W3tkaXZpZGU6Wy4uLmFlKCksImhpZGRlbiIsIm5vbmUiXX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOnEoKX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOnEoKX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOnEoKX1dLCJib3JkZXItY29sb3ItcyI6W3siYm9yZGVyLXMiOnEoKX1dLCJib3JkZXItY29sb3ItZSI6W3siYm9yZGVyLWUiOnEoKX1dLCJib3JkZXItY29sb3ItYnMiOlt7ImJvcmRlci1icyI6cSgpfV0sImJvcmRlci1jb2xvci1iZSI6W3siYm9yZGVyLWJlIjpxKCl9XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpxKCl9XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpxKCl9XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpxKCl9XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpxKCl9XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpxKCl9XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsuLi5hZSgpLCJub25lIiwiaGlkZGVuIl19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbQWUscGUsZGVdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOlsiIixBZSxucixoYV19XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOnEoKX1dLHNoYWRvdzpbe3NoYWRvdzpbIiIsImlubmVyIiwibm9uZSIseCxwaSxoaV19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpxKCl9XSwiaW5zZXQtc2hhZG93IjpbeyJpbnNldC1zaGFkb3ciOlsibm9uZSIsZyxwaSxoaV19XSwiaW5zZXQtc2hhZG93LWNvbG9yIjpbeyJpbnNldC1zaGFkb3ciOnEoKX1dLCJyaW5nLXciOlt7cmluZzpLKCl9XSwicmluZy13LWluc2V0IjpbInJpbmctaW5zZXQiXSwicmluZy1jb2xvciI6W3tyaW5nOnEoKX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W0FlLGhhXX1dLCJyaW5nLW9mZnNldC1jb2xvciI6W3sicmluZy1vZmZzZXQiOnEoKX1dLCJpbnNldC1yaW5nLXciOlt7Imluc2V0LXJpbmciOksoKX1dLCJpbnNldC1yaW5nLWNvbG9yIjpbeyJpbnNldC1yaW5nIjpxKCl9XSwidGV4dC1zaGFkb3ciOlt7InRleHQtc2hhZG93IjpbIm5vbmUiLEMscGksaGldfV0sInRleHQtc2hhZG93LWNvbG9yIjpbeyJ0ZXh0LXNoYWRvdyI6cSgpfV0sb3BhY2l0eTpbe29wYWNpdHk6W0FlLHBlLGRlXX1dLCJtaXgtYmxlbmQiOlt7Im1peC1ibGVuZCI6Wy4uLnllKCksInBsdXMtZGFya2VyIiwicGx1cy1saWdodGVyIl19XSwiYmctYmxlbmQiOlt7ImJnLWJsZW5kIjp5ZSgpfV0sIm1hc2stY2xpcCI6W3sibWFzay1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwiZmlsbCIsInN0cm9rZSIsInZpZXciXX0sIm1hc2stbm8tY2xpcCJdLCJtYXNrLWNvbXBvc2l0ZSI6W3ttYXNrOlsiYWRkIiwic3VidHJhY3QiLCJpbnRlcnNlY3QiLCJleGNsdWRlIl19XSwibWFzay1pbWFnZS1saW5lYXItcG9zIjpbeyJtYXNrLWxpbmVhciI6W0FlXX1dLCJtYXNrLWltYWdlLWxpbmVhci1mcm9tLXBvcyI6W3sibWFzay1saW5lYXItZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1wb3MiOlt7Im1hc2stbGluZWFyLXRvIjpzZSgpfV0sIm1hc2staW1hZ2UtbGluZWFyLWZyb20tY29sb3IiOlt7Im1hc2stbGluZWFyLWZyb20iOnEoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1jb2xvciI6W3sibWFzay1saW5lYXItdG8iOnEoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1wb3MiOlt7Im1hc2stdC1mcm9tIjpzZSgpfV0sIm1hc2staW1hZ2UtdC10by1wb3MiOlt7Im1hc2stdC10byI6c2UoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1jb2xvciI6W3sibWFzay10LWZyb20iOnEoKX1dLCJtYXNrLWltYWdlLXQtdG8tY29sb3IiOlt7Im1hc2stdC10byI6cSgpfV0sIm1hc2staW1hZ2Utci1mcm9tLXBvcyI6W3sibWFzay1yLWZyb20iOnNlKCl9XSwibWFzay1pbWFnZS1yLXRvLXBvcyI6W3sibWFzay1yLXRvIjpzZSgpfV0sIm1hc2staW1hZ2Utci1mcm9tLWNvbG9yIjpbeyJtYXNrLXItZnJvbSI6cSgpfV0sIm1hc2staW1hZ2Utci10by1jb2xvciI6W3sibWFzay1yLXRvIjpxKCl9XSwibWFzay1pbWFnZS1iLWZyb20tcG9zIjpbeyJtYXNrLWItZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLWItdG8tcG9zIjpbeyJtYXNrLWItdG8iOnNlKCl9XSwibWFzay1pbWFnZS1iLWZyb20tY29sb3IiOlt7Im1hc2stYi1mcm9tIjpxKCl9XSwibWFzay1pbWFnZS1iLXRvLWNvbG9yIjpbeyJtYXNrLWItdG8iOnEoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1wb3MiOlt7Im1hc2stbC1mcm9tIjpzZSgpfV0sIm1hc2staW1hZ2UtbC10by1wb3MiOlt7Im1hc2stbC10byI6c2UoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1jb2xvciI6W3sibWFzay1sLWZyb20iOnEoKX1dLCJtYXNrLWltYWdlLWwtdG8tY29sb3IiOlt7Im1hc2stbC10byI6cSgpfV0sIm1hc2staW1hZ2UteC1mcm9tLXBvcyI6W3sibWFzay14LWZyb20iOnNlKCl9XSwibWFzay1pbWFnZS14LXRvLXBvcyI6W3sibWFzay14LXRvIjpzZSgpfV0sIm1hc2staW1hZ2UteC1mcm9tLWNvbG9yIjpbeyJtYXNrLXgtZnJvbSI6cSgpfV0sIm1hc2staW1hZ2UteC10by1jb2xvciI6W3sibWFzay14LXRvIjpxKCl9XSwibWFzay1pbWFnZS15LWZyb20tcG9zIjpbeyJtYXNrLXktZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLXktdG8tcG9zIjpbeyJtYXNrLXktdG8iOnNlKCl9XSwibWFzay1pbWFnZS15LWZyb20tY29sb3IiOlt7Im1hc2steS1mcm9tIjpxKCl9XSwibWFzay1pbWFnZS15LXRvLWNvbG9yIjpbeyJtYXNrLXktdG8iOnEoKX1dLCJtYXNrLWltYWdlLXJhZGlhbCI6W3sibWFzay1yYWRpYWwiOltwZSxkZV19XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1wb3MiOlt7Im1hc2stcmFkaWFsLWZyb20iOnNlKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtdG8tcG9zIjpbeyJtYXNrLXJhZGlhbC10byI6c2UoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC1mcm9tLWNvbG9yIjpbeyJtYXNrLXJhZGlhbC1mcm9tIjpxKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtdG8tY29sb3IiOlt7Im1hc2stcmFkaWFsLXRvIjpxKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtc2hhcGUiOlt7Im1hc2stcmFkaWFsIjpbImNpcmNsZSIsImVsbGlwc2UiXX1dLCJtYXNrLWltYWdlLXJhZGlhbC1zaXplIjpbeyJtYXNrLXJhZGlhbCI6W3tjbG9zZXN0Olsic2lkZSIsImNvcm5lciJdLGZhcnRoZXN0Olsic2lkZSIsImNvcm5lciJdfV19XSwibWFzay1pbWFnZS1yYWRpYWwtcG9zIjpbeyJtYXNrLXJhZGlhbC1hdCI6TSgpfV0sIm1hc2staW1hZ2UtY29uaWMtcG9zIjpbeyJtYXNrLWNvbmljIjpbQWVdfV0sIm1hc2staW1hZ2UtY29uaWMtZnJvbS1wb3MiOlt7Im1hc2stY29uaWMtZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLXBvcyI6W3sibWFzay1jb25pYy10byI6c2UoKX1dLCJtYXNrLWltYWdlLWNvbmljLWZyb20tY29sb3IiOlt7Im1hc2stY29uaWMtZnJvbSI6cSgpfV0sIm1hc2staW1hZ2UtY29uaWMtdG8tY29sb3IiOlt7Im1hc2stY29uaWMtdG8iOnEoKX1dLCJtYXNrLW1vZGUiOlt7bWFzazpbImFscGhhIiwibHVtaW5hbmNlIiwibWF0Y2giXX1dLCJtYXNrLW9yaWdpbiI6W3sibWFzay1vcmlnaW4iOlsiYm9yZGVyIiwicGFkZGluZyIsImNvbnRlbnQiLCJmaWxsIiwic3Ryb2tlIiwidmlldyJdfV0sIm1hc2stcG9zaXRpb24iOlt7bWFzazp4ZSgpfV0sIm1hc2stcmVwZWF0Ijpbe21hc2s6amUoKX1dLCJtYXNrLXNpemUiOlt7bWFzazpZZSgpfV0sIm1hc2stdHlwZSI6W3sibWFzay10eXBlIjpbImFscGhhIiwibHVtaW5hbmNlIl19XSwibWFzay1pbWFnZSI6W3ttYXNrOlsibm9uZSIscGUsZGVdfV0sZmlsdGVyOlt7ZmlsdGVyOlsiIiwibm9uZSIscGUsZGVdfV0sYmx1cjpbe2JsdXI6bGUoKX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltBZSxwZSxkZV19XSxjb250cmFzdDpbe2NvbnRyYXN0OltBZSxwZSxkZV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbIiIsIm5vbmUiLHcscGksaGldfV0sImRyb3Atc2hhZG93LWNvbG9yIjpbeyJkcm9wLXNoYWRvdyI6cSgpfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOlsiIixBZSxwZSxkZV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W0FlLHBlLGRlXX1dLGludmVydDpbe2ludmVydDpbIiIsQWUscGUsZGVdfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbQWUscGUsZGVdfV0sc2VwaWE6W3tzZXBpYTpbIiIsQWUscGUsZGVdfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbIiIsIm5vbmUiLHBlLGRlXX1dLCJiYWNrZHJvcC1ibHVyIjpbeyJiYWNrZHJvcC1ibHVyIjpsZSgpfV0sImJhY2tkcm9wLWJyaWdodG5lc3MiOlt7ImJhY2tkcm9wLWJyaWdodG5lc3MiOltBZSxwZSxkZV19XSwiYmFja2Ryb3AtY29udHJhc3QiOlt7ImJhY2tkcm9wLWNvbnRyYXN0IjpbQWUscGUsZGVdfV0sImJhY2tkcm9wLWdyYXlzY2FsZSI6W3siYmFja2Ryb3AtZ3JheXNjYWxlIjpbIiIsQWUscGUsZGVdfV0sImJhY2tkcm9wLWh1ZS1yb3RhdGUiOlt7ImJhY2tkcm9wLWh1ZS1yb3RhdGUiOltBZSxwZSxkZV19XSwiYmFja2Ryb3AtaW52ZXJ0IjpbeyJiYWNrZHJvcC1pbnZlcnQiOlsiIixBZSxwZSxkZV19XSwiYmFja2Ryb3Atb3BhY2l0eSI6W3siYmFja2Ryb3Atb3BhY2l0eSI6W0FlLHBlLGRlXX1dLCJiYWNrZHJvcC1zYXR1cmF0ZSI6W3siYmFja2Ryb3Atc2F0dXJhdGUiOltBZSxwZSxkZV19XSwiYmFja2Ryb3Atc2VwaWEiOlt7ImJhY2tkcm9wLXNlcGlhIjpbIiIsQWUscGUsZGVdfV0sImJvcmRlci1jb2xsYXBzZSI6W3tib3JkZXI6WyJjb2xsYXBzZSIsInNlcGFyYXRlIl19XSwiYm9yZGVyLXNwYWNpbmciOlt7ImJvcmRlci1zcGFjaW5nIjpCKCl9XSwiYm9yZGVyLXNwYWNpbmcteCI6W3siYm9yZGVyLXNwYWNpbmcteCI6QigpfV0sImJvcmRlci1zcGFjaW5nLXkiOlt7ImJvcmRlci1zcGFjaW5nLXkiOkIoKX1dLCJ0YWJsZS1sYXlvdXQiOlt7dGFibGU6WyJhdXRvIiwiZml4ZWQiXX1dLGNhcHRpb246W3tjYXB0aW9uOlsidG9wIiwiYm90dG9tIl19XSx0cmFuc2l0aW9uOlt7dHJhbnNpdGlvbjpbIiIsImFsbCIsImNvbG9ycyIsIm9wYWNpdHkiLCJzaGFkb3ciLCJ0cmFuc2Zvcm0iLCJub25lIixwZSxkZV19XSwidHJhbnNpdGlvbi1iZWhhdmlvciI6W3t0cmFuc2l0aW9uOlsibm9ybWFsIiwiZGlzY3JldGUiXX1dLGR1cmF0aW9uOlt7ZHVyYXRpb246W0FlLCJpbml0aWFsIixwZSxkZV19XSxlYXNlOlt7ZWFzZTpbImxpbmVhciIsImluaXRpYWwiLE8scGUsZGVdfV0sZGVsYXk6W3tkZWxheTpbQWUscGUsZGVdfV0sYW5pbWF0ZTpbe2FuaW1hdGU6WyJub25lIixBLHBlLGRlXX1dLGJhY2tmYWNlOlt7YmFja2ZhY2U6WyJoaWRkZW4iLCJ2aXNpYmxlIl19XSxwZXJzcGVjdGl2ZTpbe3BlcnNwZWN0aXZlOltFLHBlLGRlXX1dLCJwZXJzcGVjdGl2ZS1vcmlnaW4iOlt7InBlcnNwZWN0aXZlLW9yaWdpbiI6WSgpfV0scm90YXRlOlt7cm90YXRlOnRlKCl9XSwicm90YXRlLXgiOlt7InJvdGF0ZS14Ijp0ZSgpfV0sInJvdGF0ZS15IjpbeyJyb3RhdGUteSI6dGUoKX1dLCJyb3RhdGUteiI6W3sicm90YXRlLXoiOnRlKCl9XSxzY2FsZTpbe3NjYWxlOmllKCl9XSwic2NhbGUteCI6W3sic2NhbGUteCI6aWUoKX1dLCJzY2FsZS15IjpbeyJzY2FsZS15IjppZSgpfV0sInNjYWxlLXoiOlt7InNjYWxlLXoiOmllKCl9XSwic2NhbGUtM2QiOlsic2NhbGUtM2QiXSxza2V3Olt7c2tldzpiZSgpfV0sInNrZXcteCI6W3sic2tldy14IjpiZSgpfV0sInNrZXcteSI6W3sic2tldy15IjpiZSgpfV0sdHJhbnNmb3JtOlt7dHJhbnNmb3JtOltwZSxkZSwiIiwibm9uZSIsImdwdSIsImNwdSJdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOlkoKX1dLCJ0cmFuc2Zvcm0tc3R5bGUiOlt7dHJhbnNmb3JtOlsiM2QiLCJmbGF0Il19XSx0cmFuc2xhdGU6W3t0cmFuc2xhdGU6d2UoKX1dLCJ0cmFuc2xhdGUteCI6W3sidHJhbnNsYXRlLXgiOndlKCl9XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15Ijp3ZSgpfV0sInRyYW5zbGF0ZS16IjpbeyJ0cmFuc2xhdGUteiI6d2UoKX1dLCJ0cmFuc2xhdGUtbm9uZSI6WyJ0cmFuc2xhdGUtbm9uZSJdLHpvb206W3t6b29tOltrbixwZSxkZV19XSxhY2NlbnQ6W3thY2NlbnQ6cSgpfV0sYXBwZWFyYW5jZTpbe2FwcGVhcmFuY2U6WyJub25lIiwiYXV0byJdfV0sImNhcmV0LWNvbG9yIjpbe2NhcmV0OnEoKX1dLCJjb2xvci1zY2hlbWUiOlt7c2NoZW1lOlsibm9ybWFsIiwiZGFyayIsImxpZ2h0IiwibGlnaHQtZGFyayIsIm9ubHktZGFyayIsIm9ubHktbGlnaHQiXX1dLGN1cnNvcjpbe2N1cnNvcjpbImF1dG8iLCJkZWZhdWx0IiwicG9pbnRlciIsIndhaXQiLCJ0ZXh0IiwibW92ZSIsImhlbHAiLCJub3QtYWxsb3dlZCIsIm5vbmUiLCJjb250ZXh0LW1lbnUiLCJwcm9ncmVzcyIsImNlbGwiLCJjcm9zc2hhaXIiLCJ2ZXJ0aWNhbC10ZXh0IiwiYWxpYXMiLCJjb3B5Iiwibm8tZHJvcCIsImdyYWIiLCJncmFiYmluZyIsImFsbC1zY3JvbGwiLCJjb2wtcmVzaXplIiwicm93LXJlc2l6ZSIsIm4tcmVzaXplIiwiZS1yZXNpemUiLCJzLXJlc2l6ZSIsInctcmVzaXplIiwibmUtcmVzaXplIiwibnctcmVzaXplIiwic2UtcmVzaXplIiwic3ctcmVzaXplIiwiZXctcmVzaXplIiwibnMtcmVzaXplIiwibmVzdy1yZXNpemUiLCJud3NlLXJlc2l6ZSIsInpvb20taW4iLCJ6b29tLW91dCIscGUsZGVdfV0sImZpZWxkLXNpemluZyI6W3siZmllbGQtc2l6aW5nIjpbImZpeGVkIiwiY29udGVudCJdfV0sInBvaW50ZXItZXZlbnRzIjpbeyJwb2ludGVyLWV2ZW50cyI6WyJhdXRvIiwibm9uZSJdfV0scmVzaXplOlt7cmVzaXplOlsibm9uZSIsIiIsInkiLCJ4Il19XSwic2Nyb2xsLWJlaGF2aW9yIjpbe3Njcm9sbDpbImF1dG8iLCJzbW9vdGgiXX1dLCJzY3JvbGxiYXItdGh1bWItY29sb3IiOlt7InNjcm9sbGJhci10aHVtYiI6cSgpfV0sInNjcm9sbGJhci10cmFjay1jb2xvciI6W3sic2Nyb2xsYmFyLXRyYWNrIjpxKCl9XSwic2Nyb2xsYmFyLWd1dHRlciI6W3sic2Nyb2xsYmFyLWd1dHRlciI6WyJhdXRvIiwic3RhYmxlIiwiYm90aCJdfV0sInNjcm9sbGJhci13Ijpbe3Njcm9sbGJhcjpbImF1dG8iLCJ0aGluIiwibm9uZSJdfV0sInNjcm9sbC1tIjpbeyJzY3JvbGwtbSI6QigpfV0sInNjcm9sbC1teCI6W3sic2Nyb2xsLW14IjpCKCl9XSwic2Nyb2xsLW15IjpbeyJzY3JvbGwtbXkiOkIoKX1dLCJzY3JvbGwtbXMiOlt7InNjcm9sbC1tcyI6QigpfV0sInNjcm9sbC1tZSI6W3sic2Nyb2xsLW1lIjpCKCl9XSwic2Nyb2xsLW1icyI6W3sic2Nyb2xsLW1icyI6QigpfV0sInNjcm9sbC1tYmUiOlt7InNjcm9sbC1tYmUiOkIoKX1dLCJzY3JvbGwtbXQiOlt7InNjcm9sbC1tdCI6QigpfV0sInNjcm9sbC1tciI6W3sic2Nyb2xsLW1yIjpCKCl9XSwic2Nyb2xsLW1iIjpbeyJzY3JvbGwtbWIiOkIoKX1dLCJzY3JvbGwtbWwiOlt7InNjcm9sbC1tbCI6QigpfV0sInNjcm9sbC1wIjpbeyJzY3JvbGwtcCI6QigpfV0sInNjcm9sbC1weCI6W3sic2Nyb2xsLXB4IjpCKCl9XSwic2Nyb2xsLXB5IjpbeyJzY3JvbGwtcHkiOkIoKX1dLCJzY3JvbGwtcHMiOlt7InNjcm9sbC1wcyI6QigpfV0sInNjcm9sbC1wZSI6W3sic2Nyb2xsLXBlIjpCKCl9XSwic2Nyb2xsLXBicyI6W3sic2Nyb2xsLXBicyI6QigpfV0sInNjcm9sbC1wYmUiOlt7InNjcm9sbC1wYmUiOkIoKX1dLCJzY3JvbGwtcHQiOlt7InNjcm9sbC1wdCI6QigpfV0sInNjcm9sbC1wciI6W3sic2Nyb2xsLXByIjpCKCl9XSwic2Nyb2xsLXBiIjpbeyJzY3JvbGwtcGIiOkIoKX1dLCJzY3JvbGwtcGwiOlt7InNjcm9sbC1wbCI6QigpfV0sInNuYXAtYWxpZ24iOlt7c25hcDpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYWxpZ24tbm9uZSJdfV0sInNuYXAtc3RvcCI6W3tzbmFwOlsibm9ybWFsIiwiYWx3YXlzIl19XSwic25hcC10eXBlIjpbe3NuYXA6WyJub25lIiwieCIsInkiLCJib3RoIl19XSwic25hcC1zdHJpY3RuZXNzIjpbe3NuYXA6WyJtYW5kYXRvcnkiLCJwcm94aW1pdHkiXX1dLHRvdWNoOlt7dG91Y2g6WyJhdXRvIiwibm9uZSIsIm1hbmlwdWxhdGlvbiJdfV0sInRvdWNoLXgiOlt7InRvdWNoLXBhbiI6WyJ4IiwibGVmdCIsInJpZ2h0Il19XSwidG91Y2gteSI6W3sidG91Y2gtcGFuIjpbInkiLCJ1cCIsImRvd24iXX1dLCJ0b3VjaC1weiI6WyJ0b3VjaC1waW5jaC16b29tIl0sc2VsZWN0Olt7c2VsZWN0Olsibm9uZSIsInRleHQiLCJhbGwiLCJhdXRvIl19XSwid2lsbC1jaGFuZ2UiOlt7IndpbGwtY2hhbmdlIjpbImF1dG8iLCJzY3JvbGwiLCJjb250ZW50cyIsInRyYW5zZm9ybSIscGUsZGVdfV0sZmlsbDpbe2ZpbGw6WyJub25lIiwuLi5xKCldfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbQWUsbnIsaGEsdXBdfV0sc3Ryb2tlOlt7c3Ryb2tlOlsibm9uZSIsLi4ucSgpXX1dLCJmb3JjZWQtY29sb3ItYWRqdXN0IjpbeyJmb3JjZWQtY29sb3ItYWRqdXN0IjpbImF1dG8iLCJub25lIl19XX0sY29uZmxpY3RpbmdDbGFzc0dyb3Vwczp7ImNvbnRhaW5lci1uYW1lZCI6WyJjb250YWluZXItdHlwZSJdLG92ZXJmbG93Olsib3ZlcmZsb3cteCIsIm92ZXJmbG93LXkiXSxvdmVyc2Nyb2xsOlsib3ZlcnNjcm9sbC14Iiwib3ZlcnNjcm9sbC15Il0saW5zZXQ6WyJpbnNldC14IiwiaW5zZXQteSIsImluc2V0LWJzIiwiaW5zZXQtYmUiLCJzdGFydCIsImVuZCIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLCJpbnNldC14IjpbInN0YXJ0IiwiZW5kIiwicmlnaHQiLCJsZWZ0Il0sImluc2V0LXkiOlsiaW5zZXQtYnMiLCJpbnNldC1iZSIsInRvcCIsImJvdHRvbSJdLGZsZXg6WyJiYXNpcyIsImdyb3ciLCJzaHJpbmsiXSxnYXA6WyJnYXAteCIsImdhcC15Il0scDpbInB4IiwicHkiLCJwcyIsInBlIiwicGJzIiwicGJlIiwicHQiLCJwciIsInBiIiwicGwiXSxweDpbInBzIiwicGUiLCJwciIsInBsIl0scHk6WyJwYnMiLCJwYmUiLCJwdCIsInBiIl0sbTpbIm14IiwibXkiLCJtcyIsIm1lIiwibWJzIiwibWJlIiwibXQiLCJtciIsIm1iIiwibWwiXSxteDpbIm1zIiwibWUiLCJtciIsIm1sIl0sbXk6WyJtYnMiLCJtYmUiLCJtdCIsIm1iIl0sc2l6ZTpbInciLCJoIl0sImZvbnQtc2l6ZSI6WyJsZWFkaW5nIl0sImZ2bi1ub3JtYWwiOlsiZnZuLW9yZGluYWwiLCJmdm4tc2xhc2hlZC16ZXJvIiwiZnZuLWZpZ3VyZSIsImZ2bi1zcGFjaW5nIiwiZnZuLWZyYWN0aW9uIl0sImZ2bi1vcmRpbmFsIjpbImZ2bi1ub3JtYWwiXSwiZnZuLXNsYXNoZWQtemVybyI6WyJmdm4tbm9ybWFsIl0sImZ2bi1maWd1cmUiOlsiZnZuLW5vcm1hbCJdLCJmdm4tc3BhY2luZyI6WyJmdm4tbm9ybWFsIl0sImZ2bi1mcmFjdGlvbiI6WyJmdm4tbm9ybWFsIl0sImxpbmUtY2xhbXAiOlsiZGlzcGxheSIsIm92ZXJmbG93Il0scm91bmRlZDpbInJvdW5kZWQtcyIsInJvdW5kZWQtZSIsInJvdW5kZWQtdCIsInJvdW5kZWQtciIsInJvdW5kZWQtYiIsInJvdW5kZWQtbCIsInJvdW5kZWQtc3MiLCJyb3VuZGVkLXNlIiwicm91bmRlZC1lZSIsInJvdW5kZWQtZXMiLCJyb3VuZGVkLXRsIiwicm91bmRlZC10ciIsInJvdW5kZWQtYnIiLCJyb3VuZGVkLWJsIl0sInJvdW5kZWQtcyI6WyJyb3VuZGVkLXNzIiwicm91bmRlZC1lcyJdLCJyb3VuZGVkLWUiOlsicm91bmRlZC1zZSIsInJvdW5kZWQtZWUiXSwicm91bmRlZC10IjpbInJvdW5kZWQtdGwiLCJyb3VuZGVkLXRyIl0sInJvdW5kZWQtciI6WyJyb3VuZGVkLXRyIiwicm91bmRlZC1iciJdLCJyb3VuZGVkLWIiOlsicm91bmRlZC1iciIsInJvdW5kZWQtYmwiXSwicm91bmRlZC1sIjpbInJvdW5kZWQtdGwiLCJyb3VuZGVkLWJsIl0sImJvcmRlci1zcGFjaW5nIjpbImJvcmRlci1zcGFjaW5nLXgiLCJib3JkZXItc3BhY2luZy15Il0sImJvcmRlci13IjpbImJvcmRlci13LXgiLCJib3JkZXItdy15IiwiYm9yZGVyLXctcyIsImJvcmRlci13LWUiLCJib3JkZXItdy1icyIsImJvcmRlci13LWJlIiwiYm9yZGVyLXctdCIsImJvcmRlci13LXIiLCJib3JkZXItdy1iIiwiYm9yZGVyLXctbCJdLCJib3JkZXItdy14IjpbImJvcmRlci13LXMiLCJib3JkZXItdy1lIiwiYm9yZGVyLXctciIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteSI6WyJib3JkZXItdy1icyIsImJvcmRlci13LWJlIiwiYm9yZGVyLXctdCIsImJvcmRlci13LWIiXSwiYm9yZGVyLWNvbG9yIjpbImJvcmRlci1jb2xvci14IiwiYm9yZGVyLWNvbG9yLXkiLCJib3JkZXItY29sb3ItcyIsImJvcmRlci1jb2xvci1lIiwiYm9yZGVyLWNvbG9yLWJzIiwiYm9yZGVyLWNvbG9yLWJlIiwiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1iIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXgiOlsiYm9yZGVyLWNvbG9yLXMiLCJib3JkZXItY29sb3ItZSIsImJvcmRlci1jb2xvci1yIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXkiOlsiYm9yZGVyLWNvbG9yLWJzIiwiYm9yZGVyLWNvbG9yLWJlIiwiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItYiJdLHRyYW5zbGF0ZTpbInRyYW5zbGF0ZS14IiwidHJhbnNsYXRlLXkiLCJ0cmFuc2xhdGUtbm9uZSJdLCJ0cmFuc2xhdGUtbm9uZSI6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGUteCIsInRyYW5zbGF0ZS15IiwidHJhbnNsYXRlLXoiXSwic2Nyb2xsLW0iOlsic2Nyb2xsLW14Iiwic2Nyb2xsLW15Iiwic2Nyb2xsLW1zIiwic2Nyb2xsLW1lIiwic2Nyb2xsLW1icyIsInNjcm9sbC1tYmUiLCJzY3JvbGwtbXQiLCJzY3JvbGwtbXIiLCJzY3JvbGwtbWIiLCJzY3JvbGwtbWwiXSwic2Nyb2xsLW14IjpbInNjcm9sbC1tcyIsInNjcm9sbC1tZSIsInNjcm9sbC1tciIsInNjcm9sbC1tbCJdLCJzY3JvbGwtbXkiOlsic2Nyb2xsLW1icyIsInNjcm9sbC1tYmUiLCJzY3JvbGwtbXQiLCJzY3JvbGwtbWIiXSwic2Nyb2xsLXAiOlsic2Nyb2xsLXB4Iiwic2Nyb2xsLXB5Iiwic2Nyb2xsLXBzIiwic2Nyb2xsLXBlIiwic2Nyb2xsLXBicyIsInNjcm9sbC1wYmUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcHIiLCJzY3JvbGwtcGIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB4IjpbInNjcm9sbC1wcyIsInNjcm9sbC1wZSIsInNjcm9sbC1wciIsInNjcm9sbC1wbCJdLCJzY3JvbGwtcHkiOlsic2Nyb2xsLXBicyIsInNjcm9sbC1wYmUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcGIiXSx0b3VjaDpbInRvdWNoLXgiLCJ0b3VjaC15IiwidG91Y2gtcHoiXSwidG91Y2gteCI6WyJ0b3VjaCJdLCJ0b3VjaC15IjpbInRvdWNoIl0sInRvdWNoLXB6IjpbInRvdWNoIl19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczp7ImZvbnQtc2l6ZSI6WyJsZWFkaW5nIl19LHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwczpbImNvbnRhaW5lci10eXBlIl0sb3JkZXJTZW5zaXRpdmVNb2RpZmllcnM6WyIqIiwiKioiLCJhZnRlciIsImJhY2tkcm9wIiwiYmVmb3JlIiwiZGV0YWlscy1jb250ZW50IiwiZmlsZSIsImZpcnN0LWxldHRlciIsImZpcnN0LWxpbmUiLCJtYXJrZXIiLCJwbGFjZWhvbGRlciIsInNlbGVjdGlvbiJdfX0pO2Z1bmN0aW9uIGtlKC4uLmEpe3JldHVybiBrQyhKaChhKSl9dmFyIExDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxLdT0oYSxvKT0+TEMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gUXUoYSxvKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gYShvKTthIT1udWxsJiYoYS5jdXJyZW50PW8pfUt1KFF1LCJzZXRSZWYiKTtmdW5jdGlvbiBicCguLi5hKXtyZXR1cm4gbz0+e2xldCB1PSExO2NvbnN0IGk9YS5tYXAocz0+e2NvbnN0IGY9UXUocyxvKTtyZXR1cm4hdSYmdHlwZW9mIGY9PSJmdW5jdGlvbiImJih1PSEwKSxmfSk7aWYodSlyZXR1cm4oKT0+e2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtjb25zdCBmPWlbc107dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZigpOlF1KGFbc10sbnVsbCl9fX19S3UoYnAsImNvbXBvc2VSZWZzIik7ZnVuY3Rpb24gRWUoLi4uYSl7cmV0dXJuIHYudXNlQ2FsbGJhY2soYnAoLi4uYSksYSl9S3UoRWUsInVzZUNvbXBvc2VkUmVmcyIpO3ZhciBVQz1PYmplY3QuZGVmaW5lUHJvcGVydHksSnQ9KGEsbyk9PlVDKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pO2Z1bmN0aW9uIExuKGEpe2NvbnN0IG89di5mb3J3YXJkUmVmKCh1LGkpPT57bGV0e2NoaWxkcmVuOnMsLi4uZn09dSxkPW51bGwscD0hMTtjb25zdCB5PVtdO3M9UnAocyksdi5DaGlsZHJlbi5mb3JFYWNoKHMsQz0+e2lmKHdwKEMpKXtwPSEwO2NvbnN0IHc9QztsZXQgUj0iY2hpbGQiaW4gdy5wcm9wcz93LnByb3BzLmNoaWxkOncucHJvcHMuY2hpbGRyZW47Zm9yKDtadShSKSYmdHlwZW9mIHZpPT0iZnVuY3Rpb24iOylSPXZpKFIuX3BheWxvYWQpO2Q9QkModyxSKSx5LnB1c2goZD8ucHJvcHM/LmNoaWxkcmVuKX1lbHNlIHkucHVzaChDKX0pLGQ/ZD12LmNsb25lRWxlbWVudChkLHZvaWQgMCx5KTohcCYmdi5DaGlsZHJlbi5jb3VudChzKT09PTEmJnYuaXNWYWxpZEVsZW1lbnQocykmJihkPXMpO2NvbnN0IGI9ZD9UcChkKTp2b2lkIDAseD1FZShpLGIpO2lmKCFkKXtpZihzfHxzPT09MCl0aHJvdyBuZXcgRXJyb3IocD9HQyhhKTpQQyhhKSk7cmV0dXJuIHN9Y29uc3QgZz1DcChmLGQucHJvcHM/P3t9KTtyZXR1cm4gZC50eXBlIT09di5GcmFnbWVudCYmKGcucmVmPWk/eDpiKSx2LmNsb25lRWxlbWVudChkLGcpfSk7cmV0dXJuIG8uZGlzcGxheU5hbWU9YCR7YX0uU2xvdGAsb31KdChMbiwiY3JlYXRlU2xvdCIpO3ZhciBIQz1MbigiU2xvdCIpLHhwPVN5bWJvbC5mb3IoInJhZGl4LnNsb3R0YWJsZSIpO2Z1bmN0aW9uIFNwKGEpe2NvbnN0IG89SnQodT0+ImNoaWxkImluIHU/dS5jaGlsZHJlbih1LmNoaWxkKTp1LmNoaWxkcmVuLCJTbG90dGFibGUiKTtyZXR1cm4gby5kaXNwbGF5TmFtZT1gJHthfS5TbG90dGFibGVgLG8uX19yYWRpeElkPXhwLG99SnQoU3AsImNyZWF0ZVNsb3R0YWJsZSIpO3ZhciBCQz1KdCgoYSxvKT0+ImNoaWxkImluIGEucHJvcHM/di5pc1ZhbGlkRWxlbWVudChvKT92LmNsb25lRWxlbWVudChvLHZvaWQgMCxhLnByb3BzLmNoaWxkcmVuKG8ucHJvcHMuY2hpbGRyZW4pKTpudWxsOnYuaXNWYWxpZEVsZW1lbnQobyk/bzpudWxsLCJnZXRTbG90dGFibGVFbGVtZW50RnJvbVNsb3R0YWJsZSIpO2Z1bmN0aW9uIENwKGEsbyl7Y29uc3QgdT17Li4ub307Zm9yKGNvbnN0IGkgaW4gbyl7Y29uc3Qgcz1hW2ldLGY9b1tpXTsvXm9uW0EtWl0vLnRlc3QoaSk/cyYmZj91W2ldPSguLi5wKT0+e2NvbnN0IHk9ZiguLi5wKTtyZXR1cm4gcyguLi5wKSx5fTpzJiYodVtpXT1zKTppPT09InN0eWxlIj91W2ldPXsuLi5zLC4uLmZ9Omk9PT0iY2xhc3NOYW1lIj91W2ldPVtzLGZdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik6aT09PSJhcmlhLWRlc2NyaWJlZGJ5IiYmKHVbaV09X3AoZixzKSl9cmV0dXJuey4uLmEsLi4udX19SnQoQ3AsIm1lcmdlUHJvcHMiKTtmdW5jdGlvbiBUcChhKXtsZXQgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEucHJvcHMsInJlZiIpPy5nZXQsdT1vJiYiaXNSZWFjdFdhcm5pbmciaW4gbyYmby5pc1JlYWN0V2FybmluZztyZXR1cm4gdT9hLnJlZjoobz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsInJlZiIpPy5nZXQsdT1vJiYiaXNSZWFjdFdhcm5pbmciaW4gbyYmby5pc1JlYWN0V2FybmluZyx1P2EucHJvcHMucmVmOmEucHJvcHMucmVmfHxhLnJlZil9SnQoVHAsImdldEVsZW1lbnRSZWYiKTtmdW5jdGlvbiB3cChhKXtyZXR1cm4gdi5pc1ZhbGlkRWxlbWVudChhKSYmdHlwZW9mIGEudHlwZT09ImZ1bmN0aW9uIiYmIl9fcmFkaXhJZCJpbiBhLnR5cGUmJmEudHlwZS5fX3JhZGl4SWQ9PT14cH1KdCh3cCwiaXNTbG90dGFibGUiKTt2YXIgSUM9U3ltYm9sLmZvcigicmVhY3QubGF6eSIpO2Z1bmN0aW9uIFp1KGEpe3JldHVybiBhIT1udWxsJiZ0eXBlb2YgYT09Im9iamVjdCImJiIkJHR5cGVvZiJpbiBhJiZhLiQkdHlwZW9mPT09SUMmJiJfcGF5bG9hZCJpbiBhJiZFcChhLl9wYXlsb2FkKX1KdChadSwiaXNMYXp5Q29tcG9uZW50Iik7ZnVuY3Rpb24gRXAoYSl7cmV0dXJuIHR5cGVvZiBhPT0ib2JqZWN0IiYmYSE9PW51bGwmJiJ0aGVuImluIGF9SnQoRXAsImlzUHJvbWlzZUxpa2UiKTtmdW5jdGlvbiBScChhKXtsZXQgbz1hO2Zvcig7WnUobykmJnR5cGVvZiB2aT09ImZ1bmN0aW9uIjspbz12aShvLl9wYXlsb2FkKTtyZXR1cm4gb31KdChScCwidXNlVW53cmFwcGVkTGF6eSIpO2Z1bmN0aW9uIF9wKC4uLmEpe2NvbnN0IG89bmV3IFNldDtmb3IoY29uc3QgdSBvZiBhKWlmKHR5cGVvZiB1PT0ic3RyaW5nIilmb3IoY29uc3QgaSBvZiBTdHJpbmcodSkudHJpbSgpLnNwbGl0KC9ccysvKSlpJiZvLmFkZChpKTtyZXR1cm4gby5zaXplPjA/QXJyYXkuZnJvbShvKS5qb2luKCIgIik6dm9pZCAwfUp0KF9wLCJjb25jYXRBcmlhRGVzY3JpYmVkYnkiKTt2YXIgUEM9SnQoYT0+YCR7YX0gZmFpbGVkIHRvIHNsb3Qgb250byBpdHMgY2hpbGRyZW4uIEV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQgb3IgXGBTbG90dGFibGVcYC5gLCJjcmVhdGVTbG90RXJyb3IiKSxHQz1KdChhPT5gJHthfSBmYWlsZWQgdG8gc2xvdCBvbnRvIGl0cyBcYFNsb3R0YWJsZVxgLiBFeHBlY3RlZCBcYFNsb3R0YWJsZVxgIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC5gLCJjcmVhdGVTbG90dGFibGVFcnJvciIpLHZpPUFsWyIgdXNlICIudHJpbSgpLnRvU3RyaW5nKCldO2NvbnN0IE9wPWE9PnR5cGVvZiBhPT0iYm9vbGVhbiI/YCR7YX1gOmE9PT0wPyIwIjphLEFwPUpoLFZDPSgoYSxvKT0+dT0+e3ZhciBpO2lmKG8/LnZhcmlhbnRzPT1udWxsKXJldHVybiBBcChhLHU/LmNsYXNzLHU/LmNsYXNzTmFtZSk7Y29uc3R7dmFyaWFudHM6cyxkZWZhdWx0VmFyaWFudHM6Zn09byxkPU9iamVjdC5rZXlzKHMpLm1hcChiPT57Y29uc3QgeD11Py5bYl0sZz1mPy5bYl07aWYoeD09PW51bGwpcmV0dXJuIG51bGw7Y29uc3QgQz1PcCh4KXx8T3AoZyk7cmV0dXJuIHNbYl1bQ119KSxwPXUmJk9iamVjdC5lbnRyaWVzKHUpLnJlZHVjZSgoYix4KT0+e2xldFtnLENdPXg7cmV0dXJuIEM9PT12b2lkIDB8fChiW2ddPUMpLGJ9LHt9KSx5PW89PW51bGx8fChpPW8uY29tcG91bmRWYXJpYW50cyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnJlZHVjZSgoYix4KT0+e2xldHtjbGFzczpnLGNsYXNzTmFtZTpDLC4uLnd9PXg7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHcpLmV2ZXJ5KFI9PntsZXRbRSxUXT1SO3JldHVybiBBcnJheS5pc0FycmF5KFQpP1QuaW5jbHVkZXMoey4uLmYsLi4ucH1bRV0pOnsuLi5mLC4uLnB9W0VdPT09VH0pP1suLi5iLGcsQ106Yn0sW10pO3JldHVybiBBcChhLGQseSx1Py5jbGFzcyx1Py5jbGFzc05hbWUpfSkoImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6Zm9jdXMtcmluZyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi1mYXN0IGVhc2UtYmFzZSIse3ZhcmlhbnRzOnt2YXJpYW50OntwcmltYXJ5OiJiZy1icmFuZC1zZWNvbmRhcnkgdGV4dC13aGl0ZSBob3ZlcjpiZy1hY2NlbnQtaG92ZXIgYWN0aXZlOmJnLWFjY2VudC1hY3RpdmUgZGF0YS1bcGVuZGluZz10cnVlXTpvcGFjaXR5LTcwIGRpc2FibGVkOmJnLWxhcmstbjQwMCBkaXNhYmxlZDp0ZXh0LXdoaXRlIixzZWNvbmRhcnk6ImJvcmRlciBib3JkZXItbGFyay1uMzAwIGJnLWJyYW5kLXByaW1hcnkgdGV4dC1sYXJrLW45MDAgaG92ZXI6YmctbGFyay1uNTAgYWN0aXZlOmJnLWxhcmstbjEwMCBkaXNhYmxlZDp0ZXh0LWxhcmstbjQwMCIsc2Vjb25kYXJ5Qmx1ZToiYm9yZGVyIGJvcmRlci1icmFuZC1zZWNvbmRhcnkgYmctYnJhbmQtcHJpbWFyeSB0ZXh0LWJyYW5kLWxpbmsgaG92ZXI6YmctbGFyay1hY2NlbnQtc29mdCBhY3RpdmU6YmctYnJhbmQtc2Vjb25kYXJ5IGFjdGl2ZTp0ZXh0LXdoaXRlIGRpc2FibGVkOnRleHQtbGFyay1uNDAwIixnaG9zdDoiYmctdHJhbnNwYXJlbnQgdGV4dC1icmFuZC1saW5rIGhvdmVyOmJnLWxhcmstYWNjZW50LXNvZnQgYWN0aXZlOmJnLWxhcmstYWNjZW50LXNvZnQgZGlzYWJsZWQ6dGV4dC1sYXJrLW40MDAiLHRleHQ6ImJnLXRyYW5zcGFyZW50IHRleHQtYnJhbmQtbGluayBob3Zlcjp1bmRlcmxpbmUgZGlzYWJsZWQ6dGV4dC1sYXJrLW40MDAiLHByaW1hcnlFcnJvcjoiYmctbGFyay1kYW5nZXIgdGV4dC1bdmFyKC0tZGFuZ2VyLWZvcmVncm91bmQpXSBob3ZlcjpvcGFjaXR5LTkwIGFjdGl2ZTpvcGFjaXR5LTgwIGRpc2FibGVkOmJnLWxhcmstbjQwMCBkaXNhYmxlZDp0ZXh0LXdoaXRlIixzZWNvbmRhcnlFcnJvcjoiYm9yZGVyIGJvcmRlci1sYXJrLWRhbmdlciBiZy1icmFuZC1wcmltYXJ5IHRleHQtbGFyay1kYW5nZXIgaG92ZXI6YmctbGFyay1kYW5nZXIvMTAgZGlzYWJsZWQ6dGV4dC1sYXJrLW40MDAifSxzaXplOnt4czoiaC02IG1pbi1oLTYgcHgtMiBnYXAtMSB0ZXh0LXhzIixzbToiaC03IG1pbi1oLTcgcHgtMiBnYXAtMSB0ZXh0LXhzIixtZDoiaC04IG1pbi1oLTggcHgtMyBnYXAtMS41IHRleHQtc20gbWF4LXNtOmgtOSBtYXgtc206bWluLWgtOSIsbGc6ImgtMTAgbWluLWgtMTAgcHgtNCBnYXAtMS41IHRleHQtYmFzZSBtYXgtc206aC0xMiBtYXgtc206bWluLWgtMTIgbWF4LXNtOnctZnVsbCJ9LGlzSWNvbk9ubHk6e3RydWU6IiIsZmFsc2U6IiJ9LGZ1bGxXaWR0aDp7dHJ1ZToidy1mdWxsIixmYWxzZToiIn19LGNvbXBvdW5kVmFyaWFudHM6W3tpc0ljb25Pbmx5OiEwLHNpemU6InhzIixjbGFzczoidy02IHAtMCJ9LHtpc0ljb25Pbmx5OiEwLHNpemU6InNtIixjbGFzczoidy03IHAtMCJ9LHtpc0ljb25Pbmx5OiEwLHNpemU6Im1kIixjbGFzczoidy04IHAtMCJ9LHtpc0ljb25Pbmx5OiEwLHNpemU6ImxnIixjbGFzczoidy0xMCBwLTAifSx7dmFyaWFudDoidGV4dCIsY2xhc3M6InB4LTAifV0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OiJzZWNvbmRhcnkiLHNpemU6Im1kIixpc0ljb25Pbmx5OiExLGZ1bGxXaWR0aDohMX19KTtmdW5jdGlvbiBZQyh7dmFyaWFudDphLHNpemU6byxpc0ljb25Pbmx5OnUsaXNQZW5kaW5nOmksZnVsbFdpZHRoOnMsYXNDaGlsZDpmLGNsYXNzTmFtZTpkLGRpc2FibGVkOnAsY2hpbGRyZW46eSwuLi5ifSx4KXtpZihmJiZpKXRocm93IG5ldyBFcnJvcigiTGFya0J1dHRvbjogYXNDaGlsZCBraMO0bmcgaOG7lyB0cuG7oyBpc1BlbmRpbmciKTtjb25zdCBnPWY/SEM6ImJ1dHRvbiI7cmV0dXJuIG0uanN4cyhnLHtyZWY6eCxjbGFzc05hbWU6a2UoVkMoe3ZhcmlhbnQ6YSxzaXplOm8saXNJY29uT25seTp1LGZ1bGxXaWR0aDpzfSksZCksImRhdGEtcGVuZGluZyI6aT8idHJ1ZSI6dm9pZCAwLGRpc2FibGVkOnB8fGksLi4uYixjaGlsZHJlbjpbaSYmbS5qc3goSGgse2NsYXNzTmFtZToic2l6ZS00IGFuaW1hdGUtc3BpbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx5XX0pfWNvbnN0IERlPXYuZm9yd2FyZFJlZihZQyk7RGUuZGlzcGxheU5hbWU9IkxhcmtCdXR0b24iO2NvbnN0IE5wPSJtaW4taC1bNDJweF0gdy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4zMDAgYmctYnJhbmQtcHJpbWFyeSBweC0zIHRleHQtYmFzZSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBtZDptaW4taC05IG1kOnRleHQtc20gZm9jdXM6Ym9yZGVyLVt2YXIoLS1maWVsZC1ib3JkZXItZm9jdXMpXSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6YmctbGFyay1uNTAgZGlzYWJsZWQ6dGV4dC1sYXJrLW42MDAgcmVhZC1vbmx5OmJnLWxhcmstbjEwMCIsbHI9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKHtsYWJlbDpvLGVycm9yOnUsZGVzY3JpcHRpb246aSxpc1JlcXVpcmVkOnMsaXNJbnZhbGlkOmYsaWQ6ZCxjbGFzc05hbWU6cCxyZWFkT25seTp5LCJhcmlhLWRlc2NyaWJlZGJ5IjpiLC4uLnh9LGcpe2NvbnN0IEM9di51c2VJZCgpLHc9ZD8/QyxSPWY/P3UhPT12b2lkIDAsRT1pP2Ake3d9LWRlc2NyaXB0aW9uYDp2b2lkIDAsVD11P2Ake3d9LWVycm9yYDp2b2lkIDAsTz1bRSxULGJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil8fHZvaWQgMDtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOlttLmpzeHMoImxhYmVsIix7aHRtbEZvcjp3LGNsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46W28scz9tLmpzeCgic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidGV4dC1sYXJrLWRhbmdlciIsY2hpbGRyZW46IiAqIn0pOm51bGxdfSksbS5qc3goImlucHV0Iix7cmVmOmcsaWQ6dyxjbGFzc05hbWU6a2UoTnAsUiYmImJvcmRlci1sYXJrLWRhbmdlciIseSYmImN1cnNvci1kZWZhdWx0IGJnLWxhcmstbjEwMCIscCksImFyaWEtaW52YWxpZCI6UiwiYXJpYS1yZXF1aXJlZCI6cywiYXJpYS1kZXNjcmliZWRieSI6TyxyZWFkT25seTp5LC4uLnh9KSxpJiYhdT9tLmpzeCgicCIse2lkOkUsY2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjppfSk6bnVsbCx1P20uanN4KCJwIix7aWQ6VCxyb2xlOiJhbGVydCIsY2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1kYW5nZXIiLGNoaWxkcmVuOnV9KTpudWxsXX0pfSkscUM9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKHtsYWJlbDpvLGVycm9yOnUsaXNSZXF1aXJlZDppLGlkOnMsY2xhc3NOYW1lOmYsImFyaWEtZGVzY3JpYmVkYnkiOmQsLi4ucH0seSl7Y29uc3QgYj12LnVzZUlkKCkseD1zPz9iLGc9dSE9PXZvaWQgMCxDPXU/YCR7eH0tZXJyb3JgOnZvaWQgMCx3PVtDLGRdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil8fHZvaWQgMDtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOlttLmpzeHMoImxhYmVsIix7aHRtbEZvcjp4LGNsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46W28saT9tLmpzeCgic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidGV4dC1sYXJrLWRhbmdlciIsY2hpbGRyZW46IiAqIn0pOm51bGxdfSksbS5qc3goInRleHRhcmVhIix7cmVmOnksaWQ6eCxjbGFzc05hbWU6a2UoTnAsIm1pbi1oLVs3MnB4XSBweS0yIG1kOm1pbi1oLVs3MnB4XSIsZyYmImJvcmRlci1sYXJrLWRhbmdlciIsZiksImFyaWEtaW52YWxpZCI6ZywiYXJpYS1yZXF1aXJlZCI6aSwiYXJpYS1kZXNjcmliZWRieSI6dyxyZXF1aXJlZDppLC4uLnB9KSx1P20uanN4KCJwIix7aWQ6Qyxyb2xlOiJhbGVydCIsY2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1kYW5nZXIiLGNoaWxkcmVuOnV9KTpudWxsXX0pfSk7dmFyIFhDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxLYT0oYSxvKT0+WEMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksRHA9ISEodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO2Z1bmN0aW9uIHVlKGEsbyx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOnU9ITB9PXt9KXtyZXR1cm4gS2EoZnVuY3Rpb24ocyl7aWYoYT8uKHMpLHU9PT0hMXx8IXN8fCFzLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuIG8/LihzKX0sImhhbmRsZUV2ZW50Iil9S2EodWUsImNvbXBvc2VFdmVudEhhbmRsZXJzIik7ZnVuY3Rpb24gS0MoYSl7aWYoIURwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyB3aW5kb3cgb3V0c2lkZSBvZiB0aGUgRE9NIik7cmV0dXJuIGE/Lm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3Pz93aW5kb3d9S2EoS0MsImdldE93bmVyV2luZG93Iik7ZnVuY3Rpb24gRnUoYSl7aWYoIURwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBkb2N1bWVudCBvdXRzaWRlIG9mIHRoZSBET00iKTtyZXR1cm4gYT8ub3duZXJEb2N1bWVudD8/ZG9jdW1lbnR9S2EoRnUsImdldE93bmVyRG9jdW1lbnQiKTtmdW5jdGlvbiBqcChhLG89ITEpe2NvbnN0e2FjdGl2ZUVsZW1lbnQ6dX09RnUoYSk7aWYoIXU/Lm5vZGVOYW1lKXJldHVybiBudWxsO2lmKE1wKHUpJiZ1LmNvbnRlbnREb2N1bWVudClyZXR1cm4ganAodS5jb250ZW50RG9jdW1lbnQuYm9keSxvKTtpZihvKXtjb25zdCBpPXUuZ2V0QXR0cmlidXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKTtpZihpKXtjb25zdCBzPUZ1KHUpLmdldEVsZW1lbnRCeUlkKGkpO2lmKHMpcmV0dXJuIHN9fXJldHVybiB1fUthKGpwLCJnZXRBY3RpdmVFbGVtZW50Iik7ZnVuY3Rpb24gTXAoYSl7cmV0dXJuIGEudGFnTmFtZT09PSJJRlJBTUUifUthKE1wLCJpc0ZyYW1lIik7dmFyIFFDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkbj0oYSxvKT0+UUMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gWkMoYSxvKXtjb25zdCB1PXYuY3JlYXRlQ29udGV4dChvKTt1LmRpc3BsYXlOYW1lPWErIkNvbnRleHQiO2NvbnN0IGk9ZG4oZj0+e2NvbnN0e2NoaWxkcmVuOmQsLi4ucH09Zix5PXYudXNlTWVtbygoKT0+cCxPYmplY3QudmFsdWVzKHApKTtyZXR1cm4gbS5qc3godS5Qcm92aWRlcix7dmFsdWU6eSxjaGlsZHJlbjpkfSl9LCJQcm92aWRlciIpO2kuZGlzcGxheU5hbWU9YSsiUHJvdmlkZXIiO2Z1bmN0aW9uIHMoZixkPXt9KXtjb25zdHtvcHRpb25hbDpwPSExfT1kLHk9di51c2VDb250ZXh0KHUpO2lmKHkpcmV0dXJuIHk7aWYobyE9PXZvaWQgMClyZXR1cm4gbztpZighcCl0aHJvdyBuZXcgRXJyb3IoYFxgJHtmfVxgIG11c3QgYmUgdXNlZCB3aXRoaW4gXGAke2F9XGBgKX1yZXR1cm4gZG4ocywidXNlQ29udGV4dCIpLFtpLHNdfWRuKFpDLCJjcmVhdGVDb250ZXh0Iik7ZnVuY3Rpb24gTXQoYSxvPVtdKXtsZXQgdT1bXTtmdW5jdGlvbiBpKGYsZCl7Y29uc3QgcD12LmNyZWF0ZUNvbnRleHQoZCk7cC5kaXNwbGF5TmFtZT1mKyJDb250ZXh0Ijtjb25zdCB5PXUubGVuZ3RoO3U9Wy4uLnUsZF07Y29uc3QgYj1kbihnPT57Y29uc3R7c2NvcGU6QyxjaGlsZHJlbjp3LC4uLlJ9PWcsRT1DPy5bYV0/Llt5XXx8cCxUPXYudXNlTWVtbygoKT0+UixPYmplY3QudmFsdWVzKFIpKTtyZXR1cm4gbS5qc3goRS5Qcm92aWRlcix7dmFsdWU6VCxjaGlsZHJlbjp3fSl9LCJQcm92aWRlciIpO2IuZGlzcGxheU5hbWU9ZisiUHJvdmlkZXIiO2Z1bmN0aW9uIHgoZyxDLHc9e30pe2NvbnN0e29wdGlvbmFsOlI9ITF9PXcsRT1DPy5bYV0/Llt5XXx8cCxUPXYudXNlQ29udGV4dChFKTtpZihUKXJldHVybiBUO2lmKGQhPT12b2lkIDApcmV0dXJuIGQ7aWYoIVIpdGhyb3cgbmV3IEVycm9yKGBcYCR7Z31cYCBtdXN0IGJlIHVzZWQgd2l0aGluIFxgJHtmfVxgYCl9cmV0dXJuIGRuKHgsInVzZUNvbnRleHQiKSxbYix4XX1kbihpLCJjcmVhdGVDb250ZXh0Iik7Y29uc3Qgcz1kbigoKT0+e2NvbnN0IGY9dS5tYXAoZD0+di5jcmVhdGVDb250ZXh0KGQpKTtyZXR1cm4gZG4oZnVuY3Rpb24ocCl7Y29uc3QgeT1wPy5bYV18fGY7cmV0dXJuIHYudXNlTWVtbygoKT0+KHtbYF9fc2NvcGUke2F9YF06ey4uLnAsW2FdOnl9fSksW3AseV0pfSwidXNlU2NvcGUiKX0sImNyZWF0ZVNjb3BlIik7cmV0dXJuIHMuc2NvcGVOYW1lPWEsW2ksenAocywuLi5vKV19ZG4oTXQsImNyZWF0ZUNvbnRleHRTY29wZSIpO2Z1bmN0aW9uIHpwKC4uLmEpe2NvbnN0IG89YVswXTtpZihhLmxlbmd0aD09PTEpcmV0dXJuIG87Y29uc3QgdT1kbigoKT0+e2NvbnN0IGk9YS5tYXAocz0+KHt1c2VTY29wZTpzKCksc2NvcGVOYW1lOnMuc2NvcGVOYW1lfSkpO3JldHVybiBkbihmdW5jdGlvbihmKXtjb25zdCBkPWkucmVkdWNlKChwLHt1c2VTY29wZTp5LHNjb3BlTmFtZTpifSk9Pntjb25zdCBnPXkoZilbYF9fc2NvcGUke2J9YF07cmV0dXJuey4uLnAsLi4uZ319LHt9KTtyZXR1cm4gdi51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7by5zY29wZU5hbWV9YF06ZH0pLFtkXSl9LCJ1c2VDb21wb3NlZFNjb3BlcyIpfSwiY3JlYXRlU2NvcGUiKTtyZXR1cm4gdS5zY29wZU5hbWU9by5zY29wZU5hbWUsdX1kbih6cCwiY29tcG9zZUNvbnRleHRTY29wZXMiKTt2YXIgbnQ9Z2xvYmFsVGhpcz8uZG9jdW1lbnQ/di51c2VMYXlvdXRFZmZlY3Q6KCk9Pnt9LEZDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx2dD0oYSxvKT0+RkMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gYXIoYSl7Y29uc3Qgbz1hKyJDb2xsZWN0aW9uUHJvdmlkZXIiLFt1LGldPU10KG8pLFtzLGZdPXUobyx7Y29sbGVjdGlvblJlZjp7Y3VycmVudDpudWxsfSxpdGVtTWFwOm5ldyBNYXB9KSxkPXZ0KEU9Pntjb25zdHtzY29wZTpULGNoaWxkcmVuOk99PUUsQT12LnVzZVJlZihudWxsKSxOPXYudXNlUmVmKG5ldyBNYXApLmN1cnJlbnQ7cmV0dXJuIG0uanN4KHMse3Njb3BlOlQsaXRlbU1hcDpOLGNvbGxlY3Rpb25SZWY6QSxjaGlsZHJlbjpPfSl9LCJDb2xsZWN0aW9uUHJvdmlkZXIiKTtkLmRpc3BsYXlOYW1lPW87Y29uc3QgcD1hKyJDb2xsZWN0aW9uU2xvdCIseT1MbihwKSxiPXYuZm9yd2FyZFJlZigoRSxUKT0+e2NvbnN0e3Njb3BlOk8sY2hpbGRyZW46QX09RSxOPWYocCxPKSxNPUVlKFQsTi5jb2xsZWN0aW9uUmVmKTtyZXR1cm4gbS5qc3goeSx7cmVmOk0sY2hpbGRyZW46QX0pfSk7Yi5kaXNwbGF5TmFtZT1wO2NvbnN0IHg9YSsiQ29sbGVjdGlvbkl0ZW1TbG90IixnPSJkYXRhLXJhZGl4LWNvbGxlY3Rpb24taXRlbSIsQz1Mbih4KSx3PXYuZm9yd2FyZFJlZigoRSxUKT0+e2NvbnN0e3Njb3BlOk8sY2hpbGRyZW46QSwuLi5OfT1FLE09di51c2VSZWYobnVsbCksWT1FZShULE0pLEg9Zih4LE8pO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+KEguaXRlbU1hcC5zZXQoTSx7cmVmOk0sLi4uTn0pLCgpPT57SC5pdGVtTWFwLmRlbGV0ZShNKX0pKSxtLmpzeChDLHtbZ106IiIscmVmOlksY2hpbGRyZW46QX0pfSk7dy5kaXNwbGF5TmFtZT14O2Z1bmN0aW9uIFIoRSl7Y29uc3QgVD1mKGErIkNvbGxlY3Rpb25Db25zdW1lciIsRSk7cmV0dXJuIHYudXNlQ2FsbGJhY2soKCk9Pntjb25zdCBBPVQuY29sbGVjdGlvblJlZi5jdXJyZW50O2lmKCFBKXJldHVybltdO2NvbnN0IE49QXJyYXkuZnJvbShBLnF1ZXJ5U2VsZWN0b3JBbGwoYFske2d9XWApKTtyZXR1cm4gQXJyYXkuZnJvbShULml0ZW1NYXAudmFsdWVzKCkpLnNvcnQoKEgsVSk9Pk4uaW5kZXhPZihILnJlZi5jdXJyZW50KS1OLmluZGV4T2YoVS5yZWYuY3VycmVudCkpfSxbVC5jb2xsZWN0aW9uUmVmLFQuaXRlbU1hcF0pfXJldHVybiB2dChSLCJ1c2VDb2xsZWN0aW9uIiksW3tQcm92aWRlcjpkLFNsb3Q6YixJdGVtU2xvdDp3fSxSLGldfXZ0KGFyLCJjcmVhdGVDb2xsZWN0aW9uIik7dmFyIGtwPW5ldyBXZWFrTWFwLGdpPShXdD1jbGFzcyBleHRlbmRzIE1hcHtjb25zdHJ1Y3Rvcih1KXtzdXBlcih1KTtkMSh0aGlzLHJ0KTt1aCh0aGlzLHJ0LFsuLi5zdXBlci5rZXlzKCldKSxrcC5zZXQodGhpcywhMCl9c2V0KHUsaSl7cmV0dXJuIGtwLmdldCh0aGlzKSYmIXRoaXMuaGFzKHUpJiZqdCh0aGlzLHJ0KS5wdXNoKHUpLHN1cGVyLnNldCh1LGkpLHRoaXN9aW5zZXJ0KHUsaSxzKXtjb25zdCBmPXRoaXMuaGFzKGkpLGQ9Zj90aGlzLnNpemU6dGhpcy5zaXplKzEscD0kdSh1KSx5PXA+PTA/TWF0aC5taW4ocCxkLTEpOk1hdGgubWF4KGQrcCwwKTtpZihmP2p0KHRoaXMscnQpLmluZGV4T2YoaSk9PT15Onk9PT10aGlzLnNpemUpcmV0dXJuIHRoaXMuc2V0KGkscyksdGhpcztjb25zdCBiPWp0KHRoaXMscnQpLmZpbHRlcihnPT5nIT09aSk7Yi5zcGxpY2UoeSwwLGkpO2NvbnN0IHg9Yi5tYXAoZz0+W2csZz09PWk/czp0aGlzLmdldChnKV0pO3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbZyxDXW9mIHgpdGhpcy5zZXQoZyxDKTtyZXR1cm4gdGhpc313aXRoKHUsaSxzKXtjb25zdCBmPW5ldyBXdCh0aGlzKTtyZXR1cm4gZi5pbnNlcnQodSxpLHMpLGZ9YmVmb3JlKHUpe2NvbnN0IGk9anQodGhpcyxydCkuaW5kZXhPZih1KS0xO2lmKCEoaTwwKSlyZXR1cm4gdGhpcy5lbnRyeUF0KGkpfXNldEJlZm9yZSh1LGkscyl7Y29uc3QgZj1qdCh0aGlzLHJ0KS5pbmRleE9mKHUpO2lmKGY9PT0tMSlyZXR1cm4gdGhpcztjb25zdCBkPWp0KHRoaXMscnQpLmluZGV4T2YoaSkscD1kIT09LTEmJmQ8Zj9mLTE6ZjtyZXR1cm4gdGhpcy5pbnNlcnQocCxpLHMpfWFmdGVyKHUpe2xldCBpPWp0KHRoaXMscnQpLmluZGV4T2YodSk7aWYoaT1pPT09LTF8fGk9PT10aGlzLnNpemUtMT8tMTppKzEsaSE9PS0xKXJldHVybiB0aGlzLmVudHJ5QXQoaSl9c2V0QWZ0ZXIodSxpLHMpe2NvbnN0IGY9anQodGhpcyxydCkuaW5kZXhPZih1KTtpZihmPT09LTEpcmV0dXJuIHRoaXM7Y29uc3QgZD1qdCh0aGlzLHJ0KS5pbmRleE9mKGkpLHA9ZCE9PS0xJiZkPD1mP2Y6ZisxO3JldHVybiB0aGlzLmluc2VydChwLGkscyl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5lbnRyeUF0KDApfWxhc3QoKXtyZXR1cm4gdGhpcy5lbnRyeUF0KC0xKX1jbGVhcigpe3JldHVybiB1aCh0aGlzLHJ0LFtdKSxzdXBlci5jbGVhcigpfWRlbGV0ZSh1KXtjb25zdCBpPXN1cGVyLmRlbGV0ZSh1KTtyZXR1cm4gaSYmanQodGhpcyxydCkuc3BsaWNlKGp0KHRoaXMscnQpLmluZGV4T2YodSksMSksaX1kZWxldGVBdCh1KXtjb25zdCBpPXRoaXMua2V5QXQodSk7cmV0dXJuIGkhPT12b2lkIDA/dGhpcy5kZWxldGUoaSk6ITF9YXQodSl7Y29uc3QgaT15aShqdCh0aGlzLHJ0KSx1KTtpZihpIT09dm9pZCAwKXJldHVybiB0aGlzLmdldChpKX1lbnRyeUF0KHUpe2NvbnN0IGk9eWkoanQodGhpcyxydCksdSk7aWYoaSE9PXZvaWQgMClyZXR1cm5baSx0aGlzLmdldChpKV19aW5kZXhPZih1KXtyZXR1cm4ganQodGhpcyxydCkuaW5kZXhPZih1KX1rZXlBdCh1KXtyZXR1cm4geWkoanQodGhpcyxydCksdSl9ZnJvbSh1LGkpe2NvbnN0IHM9dGhpcy5pbmRleE9mKHUpO2lmKHM9PT0tMSlyZXR1cm47bGV0IGY9cytpO3JldHVybiBmPDAmJihmPTApLGY+PXRoaXMuc2l6ZSYmKGY9dGhpcy5zaXplLTEpLHRoaXMuYXQoZil9a2V5RnJvbSh1LGkpe2NvbnN0IHM9dGhpcy5pbmRleE9mKHUpO2lmKHM9PT0tMSlyZXR1cm47bGV0IGY9cytpO3JldHVybiBmPDAmJihmPTApLGY+PXRoaXMuc2l6ZSYmKGY9dGhpcy5zaXplLTEpLHRoaXMua2V5QXQoZil9ZmluZCh1LGkpe2xldCBzPTA7Zm9yKGNvbnN0IGYgb2YgdGhpcyl7aWYoUmVmbGVjdC5hcHBseSh1LGksW2Yscyx0aGlzXSkpcmV0dXJuIGY7cysrfX1maW5kSW5kZXgodSxpKXtsZXQgcz0wO2Zvcihjb25zdCBmIG9mIHRoaXMpe2lmKFJlZmxlY3QuYXBwbHkodSxpLFtmLHMsdGhpc10pKXJldHVybiBzO3MrK31yZXR1cm4tMX1maWx0ZXIodSxpKXtjb25zdCBzPVtdO2xldCBmPTA7Zm9yKGNvbnN0IGQgb2YgdGhpcylSZWZsZWN0LmFwcGx5KHUsaSxbZCxmLHRoaXNdKSYmcy5wdXNoKGQpLGYrKztyZXR1cm4gbmV3IFd0KHMpfW1hcCh1LGkpe2NvbnN0IHM9W107bGV0IGY9MDtmb3IoY29uc3QgZCBvZiB0aGlzKXMucHVzaChbZFswXSxSZWZsZWN0LmFwcGx5KHUsaSxbZCxmLHRoaXNdKV0pLGYrKztyZXR1cm4gbmV3IFd0KHMpfXJlZHVjZSguLi51KXtjb25zdFtpLHNdPXUsZj11Lmxlbmd0aD4xO2lmKCFmJiZ0aGlzLnNpemU9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBPcmRlcmVkRGljdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtsZXQgZD0wLHA9cztmb3IoY29uc3QgeSBvZiB0aGlzKWQ9PT0wJiYhZj9wPXk6cD1SZWZsZWN0LmFwcGx5KGksdGhpcyxbcCx5LGQsdGhpc10pLGQrKztyZXR1cm4gcH1yZWR1Y2VSaWdodCguLi51KXtjb25zdFtpLHNdPXUsZj11Lmxlbmd0aD4xO2lmKCFmJiZ0aGlzLnNpemU9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBPcmRlcmVkRGljdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtsZXQgZD1zO2ZvcihsZXQgcD10aGlzLnNpemUtMTtwPj0wO3AtLSl7Y29uc3QgeT10aGlzLmVudHJ5QXQocCk7cD09PXRoaXMuc2l6ZS0xJiYhZj9kPXk6ZD1SZWZsZWN0LmFwcGx5KGksdGhpcyxbZCx5LHAsdGhpc10pfXJldHVybiBkfXNvcnQodSl7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT3JkZXJlZERpY3Quc29ydCByZXF1aXJlcyBhIGNvbXBhcmUgZnVuY3Rpb24iKTtjb25zdCBpPVsuLi50aGlzLmVudHJpZXMoKV0uc29ydCh1KTt0aGlzLmNsZWFyKCk7Zm9yKGNvbnN0W3MsZl1vZiBpKXRoaXMuc2V0KHMsZik7cmV0dXJuIHRoaXN9dG9Tb3J0ZWQodSl7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT3JkZXJlZERpY3QudG9Tb3J0ZWQgcmVxdWlyZXMgYSBjb21wYXJlIGZ1bmN0aW9uIik7Y29uc3QgaT1bLi4udGhpcy5lbnRyaWVzKCldLnNvcnQodSk7cmV0dXJuIG5ldyBXdChpKX10b1JldmVyc2VkKCl7Y29uc3QgdT1uZXcgV3Q7Zm9yKGxldCBpPXRoaXMuc2l6ZS0xO2k+PTA7aS0tKXtjb25zdCBzPXRoaXMua2V5QXQoaSksZj10aGlzLmdldChzKTt1LnNldChzLGYpfXJldHVybiB1fXRvU3BsaWNlZCguLi51KXtjb25zdCBpPVsuLi50aGlzLmVudHJpZXMoKV07cmV0dXJuIGkuc3BsaWNlKC4uLnUpLG5ldyBXdChpKX1zbGljZSh1LGkpe2NvbnN0IHM9bmV3IFd0O2Zvcihjb25zdCBmIG9mIGp0KHRoaXMscnQpLnNsaWNlKHUsaSkpcy5zZXQoZix0aGlzLmdldChmKSk7cmV0dXJuIHN9ZXZlcnkodSxpKXtsZXQgcz0wO2Zvcihjb25zdCBmIG9mIHRoaXMpe2lmKCFSZWZsZWN0LmFwcGx5KHUsaSxbZixzLHRoaXNdKSlyZXR1cm4hMTtzKyt9cmV0dXJuITB9c29tZSh1LGkpe2xldCBzPTA7Zm9yKGNvbnN0IGYgb2YgdGhpcyl7aWYoUmVmbGVjdC5hcHBseSh1LGksW2Yscyx0aGlzXSkpcmV0dXJuITA7cysrfXJldHVybiExfX0scnQ9bmV3IFdlYWtNYXAsdnQoV3QsIk9yZGVyZWREaWN0IiksV3QpO2Z1bmN0aW9uIHlpKGEsbyl7aWYoImF0ImluIEFycmF5LnByb3RvdHlwZSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLmF0LmNhbGwoYSxvKTtjb25zdCB1PUxwKGEsbyk7cmV0dXJuIHU9PT0tMT92b2lkIDA6YVt1XX12dCh5aSwiYXQiKTtmdW5jdGlvbiBMcChhLG8pe2NvbnN0IHU9YS5sZW5ndGgsaT0kdShvKSxzPWk+PTA/aTp1K2k7cmV0dXJuIHM8MHx8cz49dT8tMTpzfXZ0KExwLCJ0b1NhZmVJbmRleCIpO2Z1bmN0aW9uICR1KGEpe3JldHVybiBhIT09YXx8YT09PTA/MDpNYXRoLnRydW5jKGEpfXZ0KCR1LCJ0b1NhZmVJbnRlZ2VyIik7ZnVuY3Rpb24gJEMoYSl7Y29uc3Qgbz1hKyJDb2xsZWN0aW9uUHJvdmlkZXIiLFt1LGldPU10KG8pLFtzLGZdPXUobyk7cy5kaXNwbGF5TmFtZT1hKyJDb2xsZWN0aW9uU3RhYmxlQ29udGV4dFByb3ZpZGVyIjtjb25zdFtkLHBdPXUobyk7ZC5kaXNwbGF5TmFtZT1hKyJDb2xsZWN0aW9uU3RhdGVmdWxDb250ZXh0UHJvdmlkZXIiO2NvbnN0IHk9dnQoKHtzdGF0ZTpILC4uLlV9KT0+SD9tLmpzeCh4LHsuLi5VLHN0YXRlOkh9KTptLmpzeChiLHsuLi5VfSksIkNvbGxlY3Rpb25Qcm92aWRlciIpO3kuZGlzcGxheU5hbWU9bztjb25zdCBiPXZ0KEg9Pntjb25zdCBVPUEoKTtyZXR1cm4gbS5qc3goeCx7Li4uSCxzdGF0ZTpVfSl9LCJDb2xsZWN0aW9uSW5pdCIpO2IuZGlzcGxheU5hbWU9YSsiQ29sbGVjdGlvbkluaXQiO2NvbnN0IHg9dnQoSD0+e2NvbnN0e3Njb3BlOlUsY2hpbGRyZW46QixzdGF0ZTpKfT1ILFc9di51c2VSZWYobnVsbCksW25lLGVlXT12LnVzZVN0YXRlKG51bGwpLGNlPUVlKFcsZWUpLFttZSxoZV09SixQPXYudXNlUmVmKG5ldyBnaSksJD12LnVzZUNhbGxiYWNrKCgpPT57Y29uc3QgRj1QLmN1cnJlbnQ7cmV0dXJuIEJwKEYpfHxGLnNvcnQoYmkpLEZ9LFtdKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PntpZighbmUpcmV0dXJuO2NvbnN0IEY9SXAoKCk9PntoZShyZT0+e2NvbnN0IHE9cmUudG9Tb3J0ZWQoYmkpO3JldHVybiBxLnNvbWUoKFtqZV0sWWUpPT5yZS5rZXlBdChZZSkhPT1qZSk/cTpyZX0pfSk7cmV0dXJuIEYub2JzZXJ2ZShuZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSwoKT0+e0YuZGlzY29ubmVjdCgpfX0sW25lLGhlXSksbS5qc3gocyx7c2NvcGU6VSxjb2xsZWN0aW9uRWxlbWVudFJlZjpjZSxjb2xsZWN0aW9uRWxlbWVudFJlZk9iamVjdDpXLGdldENvbGxlY3Rpb246JCxzZXRDb2xsZWN0aW9uOmhlLHJlZ2lzdHJ5UmVmOlAsY2hpbGRyZW46bS5qc3goZCx7c2NvcGU6VSxjb2xsZWN0aW9uRWxlbWVudDpuZSxjb2xsZWN0aW9uOm1lLGNoaWxkcmVuOkJ9KX0pfSwiQ29sbGVjdGlvblByb3ZpZGVySW1wbCIpO3guZGlzcGxheU5hbWU9YSsiQ29sbGVjdGlvblByb3ZpZGVySW1wbCI7Y29uc3QgZz1hKyJDb2xsZWN0aW9uU2xvdCIsQz1MbihnKSx3PXYuZm9yd2FyZFJlZigoSCxVKT0+e2NvbnN0e3Njb3BlOkIsY2hpbGRyZW46Sn09SCxXPWYoZyxCKSxuZT1FZShVLFcuY29sbGVjdGlvbkVsZW1lbnRSZWYpO3JldHVybiBtLmpzeChDLHtyZWY6bmUsY2hpbGRyZW46Sn0pfSk7dy5kaXNwbGF5TmFtZT1nO2NvbnN0IFI9YSsiQ29sbGVjdGlvbkl0ZW1TbG90IixFPSJkYXRhLXJhZGl4LWNvbGxlY3Rpb24taXRlbSIsVD1MbihSKSxPPXYuZm9yd2FyZFJlZigoSCxVKT0+e2NvbnN0e3Njb3BlOkIsY2hpbGRyZW46SiwuLi5XfT1ILG5lPXYudXNlUmVmKG51bGwpLGVlPWYoUixCKSx7c2V0Q29sbGVjdGlvbjpjZSxyZWdpc3RyeVJlZjptZX09ZWUsaGU9di51c2VSZWYoVyk7VXAoaGUuY3VycmVudCxXKXx8KGhlLmN1cnJlbnQ9Vyk7Y29uc3QgUD1oZS5jdXJyZW50LCQ9di51c2VDYWxsYmFjayhxPT57Y29uc3QgeGU9bWUuY3VycmVudDtxP3hlLnNldChxLHsuLi5oZS5jdXJyZW50LGVsZW1lbnQ6cX0pOm5lLmN1cnJlbnQmJnhlLmRlbGV0ZShuZS5jdXJyZW50KX0sW21lXSksRj1FZShVLCQsbmUpO250KCgpPT57Y29uc3QgcT1uZS5jdXJyZW50LHhlPW1lLmN1cnJlbnQ7cSYmeGUuaGFzKHEpJiZ4ZS5zZXQocSx7Li4uUCxlbGVtZW50OnF9KX0sW1AsbWVdKTtjb25zdCByZT12LnVzZVJlZihudWxsKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBxPW5lLmN1cnJlbnQseGU9cmUuY3VycmVudDsoeGU/LmVsZW1lbnQ/P251bGwpPT09cSYmKCFxfHx4ZT8uaXRlbURhdGE9PT1QKXx8KHJlLmN1cnJlbnQ9cT97ZWxlbWVudDpxLGl0ZW1EYXRhOlB9Om51bGwsY2UoamU9Pntjb25zdCBZZT1uZXcgZ2koamUpO3JldHVybiB4ZSYmeGUuZWxlbWVudCE9PXEmJlllLmRlbGV0ZSh4ZS5lbGVtZW50KSxxJiZZZS5zZXQocSx7Li4uUCxlbGVtZW50OnF9KSxZZS5zb3J0KGJpKX0pKX0pLHYudXNlRWZmZWN0KCgpPT4oKT0+e2NvbnN0IHE9cmUuY3VycmVudDtyZS5jdXJyZW50PW51bGwscSYmY2UoeGU9PntpZigheGUuaGFzKHEuZWxlbWVudCkpcmV0dXJuIHhlO2NvbnN0IGplPW5ldyBnaSh4ZSk7cmV0dXJuIGplLmRlbGV0ZShxLmVsZW1lbnQpLGplfSl9LFtjZV0pLG0uanN4KFQse1tFXToiIixyZWY6RixjaGlsZHJlbjpKfSl9KTtPLmRpc3BsYXlOYW1lPVI7ZnVuY3Rpb24gQSgpe3JldHVybiB2LnVzZVN0YXRlKG5ldyBnaSl9dnQoQSwidXNlSW5pdENvbGxlY3Rpb24iKTtmdW5jdGlvbiBOKEgpe2NvbnN0e2NvbGxlY3Rpb246VX09cChhKyJDb2xsZWN0aW9uQ29uc3VtZXIiLEgpO3JldHVybiBVfXZ0KE4sInVzZUNvbGxlY3Rpb24iKTtmdW5jdGlvbiBNKEgpe2NvbnN0e2dldENvbGxlY3Rpb246VX09ZihhKyJDb2xsZWN0aW9uQ29uc3VtZXIiLEgpO3JldHVybiBVfXJldHVybiB2dChNLCJ1c2VHZXRDb2xsZWN0aW9uIiksW3tQcm92aWRlcjp5LFNsb3Q6dyxJdGVtU2xvdDpPfSx7Y3JlYXRlQ29sbGVjdGlvblNjb3BlOmksdXNlQ29sbGVjdGlvbjpOLHVzZUdldENvbGxlY3Rpb246TSx1c2VJbml0Q29sbGVjdGlvbjpBfV19dnQoJEMsImNyZWF0ZUNvbGxlY3Rpb24iKTtmdW5jdGlvbiBVcChhLG8pe2lmKGE9PT1vKXJldHVybiEwO2lmKHR5cGVvZiBhIT0ib2JqZWN0Inx8dHlwZW9mIG8hPSJvYmplY3QifHxhPT1udWxsfHxvPT1udWxsKXJldHVybiExO2NvbnN0IHU9T2JqZWN0LmtleXMoYSksaT1PYmplY3Qua2V5cyhvKTtpZih1Lmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2Zvcihjb25zdCBzIG9mIHUpaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLHMpfHxhW3NdIT09b1tzXSlyZXR1cm4hMTtyZXR1cm4hMH12dChVcCwic2hhbGxvd0VxdWFsIik7ZnVuY3Rpb24gSHAoYSxvKXtyZXR1cm4hIShvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKX12dChIcCwiaXNFbGVtZW50UHJlY2VkaW5nIik7ZnVuY3Rpb24gQnAoYSl7bGV0IG87Zm9yKGNvbnN0IHUgb2YgYS5rZXlzKCkpe2lmKG8pe2NvbnN0IGk9by5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih1KTtpZighKGkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpJiZpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKXJldHVybiExfW89dX1yZXR1cm4hMH12dChCcCwiaXNJbkRvY3VtZW50T3JkZXIiKTtmdW5jdGlvbiBiaShhLG8pe3JldHVybiFhWzFdLmVsZW1lbnR8fCFvWzFdLmVsZW1lbnQ/MDpIcChhWzFdLmVsZW1lbnQsb1sxXS5lbGVtZW50KT8tMToxfXZ0KGJpLCJzb3J0QnlEb2N1bWVudFBvc2l0aW9uIik7ZnVuY3Rpb24gSXAoYSl7cmV0dXJuIG5ldyBNdXRhdGlvbk9ic2VydmVyKHU9Pntmb3IoY29uc3QgaSBvZiB1KWlmKGkudHlwZT09PSJjaGlsZExpc3QiKXthKCk7cmV0dXJufX0pfXZ0KElwLCJnZXRDaGlsZExpc3RPYnNlcnZlciIpO3ZhciBKQz1PYmplY3QuZGVmaW5lUHJvcGVydHksV0M9KGEsbyk9PkpDKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLGVUPXtMVFI6Imx0ciJ9LHRUPXYuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIFFhKGEpe2NvbnN0IG89di51c2VDb250ZXh0KHRUKTtyZXR1cm4gYXx8b3x8ZVQuTFRSfVdDKFFhLCJ1c2VEaXJlY3Rpb24iKTt2YXIgWmE9eWgoKSxuVD1PYmplY3QuZGVmaW5lUHJvcGVydHksbFQ9KGEsbyk9Pm5UKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLGFUPVsiYSIsImJ1dHRvbiIsImRpdiIsImZvcm0iLCJoMiIsImgzIiwiaW1nIiwiaW5wdXQiLCJsYWJlbCIsImxpIiwibmF2Iiwib2wiLCJwIiwic2VsZWN0Iiwic3BhbiIsInN2ZyIsInVsIl0sQ2U9YVQucmVkdWNlKChhLG8pPT57Y29uc3QgdT1MbihgUHJpbWl0aXZlLiR7b31gKSxpPXYuZm9yd2FyZFJlZigocyxmKT0+e2NvbnN0e2FzQ2hpbGQ6ZCwuLi5wfT1zLHk9ZD91Om87cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93W1N5bWJvbC5mb3IoInJhZGl4LXVpIildPSEwKSxtLmpzeCh5LHsuLi5wLHJlZjpmfSl9KTtyZXR1cm4gaS5kaXNwbGF5TmFtZT1gUHJpbWl0aXZlLiR7b31gLHsuLi5hLFtvXTppfX0se30pO2Z1bmN0aW9uIHhpKGEsbyl7YSYmWmEuZmx1c2hTeW5jKCgpPT5hLmRpc3BhdGNoRXZlbnQobykpfWxUKHhpLCJkaXNwYXRjaERpc2NyZXRlQ3VzdG9tRXZlbnQiKTt2YXIgb1Q9T2JqZWN0LmRlZmluZVByb3BlcnR5LHJUPShhLG8pPT5vVChhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxQcD1BbFsiIHVzZUluc2VydGlvbkVmZmVjdCAiLnRyaW0oKS50b1N0cmluZygpXTtmdW5jdGlvbiB6dChhKXtjb25zdCBvPXYudXNlUmVmKGEpO3JldHVybiB0eXBlb2YgUHA9PSJmdW5jdGlvbiI/UHAoKCk9PntvLmN1cnJlbnQ9YX0pOm50KCgpPT57by5jdXJyZW50PWF9KSx2LnVzZU1lbW8oKCk9PigoLi4udSk9Pm8uY3VycmVudD8uKC4uLnUpKSxbXSl9clQoenQsInVzZUNhbGxiYWNrUmVmIik7dmFyIGlUPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxndD0oYSxvKT0+aVQoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksSnU9ImRpc21pc3NhYmxlTGF5ZXIudXBkYXRlIixjVD0iZGlzbWlzc2FibGVMYXllci5wb2ludGVyRG93bk91dHNpZGUiLHVUPSJkaXNtaXNzYWJsZUxheWVyLmZvY3VzT3V0c2lkZSIsR3AsV3U9di5jcmVhdGVDb250ZXh0KHtsYXllcnM6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LGJyYW5jaGVzOm5ldyBTZXQsZGlzbWlzc2FibGVTdXJmYWNlczpuZXcgU2V0fSksb3I9di5mb3J3YXJkUmVmKGd0KGZ1bmN0aW9uKG8sdSl7Y29uc3R7ZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOmk9ITEsZGVmZXJQb2ludGVyRG93bk91dHNpZGU6cz0hMSxvbkVzY2FwZUtleURvd246ZixvblBvaW50ZXJEb3duT3V0c2lkZTpkLG9uRm9jdXNPdXRzaWRlOnAsb25JbnRlcmFjdE91dHNpZGU6eSxvbkRpc21pc3M6YiwuLi54fT1vLGc9di51c2VDb250ZXh0KFd1KSxbQyx3XT12LnVzZVN0YXRlKG51bGwpLFI9Qz8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcz8uZG9jdW1lbnQsWyxFXT12LnVzZVN0YXRlKHt9KSxUPUVlKHUsdyksTz1BcnJheS5mcm9tKGcubGF5ZXJzKSxbQV09Wy4uLmcubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRdLnNsaWNlKC0xKSxOPUE/Ty5pbmRleE9mKEEpOi0xLE09Qz9PLmluZGV4T2YoQyk6LTEsWT1nLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU+MCxIPU0+PU4sVT12LnVzZVJlZighMSksQj1ZcChlZT0+e2Q/LihlZSkseT8uKGVlKSxlZS5kZWZhdWx0UHJldmVudGVkfHxiPy4oKX0se293bmVyRG9jdW1lbnQ6UixkZWZlclBvaW50ZXJEb3duT3V0c2lkZTpzLGlzRGVmZXJyZWRQb2ludGVyRG93bk91dHNpZGVSZWY6VSxkaXNtaXNzYWJsZVN1cmZhY2VzOmcuZGlzbWlzc2FibGVTdXJmYWNlcyxzaG91bGRIYW5kbGVQb2ludGVyRG93bk91dHNpZGU6di51c2VDYWxsYmFjayhlZT0+e2lmKCEoZWUgaW5zdGFuY2VvZiBOb2RlKSlyZXR1cm4hMTtjb25zdCBjZT1bLi4uZy5icmFuY2hlc10uc29tZShtZT0+bWUuY29udGFpbnMoZWUpKTtyZXR1cm4gSCYmIWNlfSxbZy5icmFuY2hlcyxIXSl9KSxKPXFwKGVlPT57aWYocyYmVS5jdXJyZW50KXJldHVybjtjb25zdCBjZT1lZS50YXJnZXQ7Wy4uLmcuYnJhbmNoZXNdLnNvbWUoaGU9PmhlLmNvbnRhaW5zKGNlKSl8fChwPy4oZWUpLHk/LihlZSksZWUuZGVmYXVsdFByZXZlbnRlZHx8Yj8uKCkpfSxSKSxXPUM/TT09PU8ubGVuZ3RoLTE6ITEsbmU9enQoZWU9PntlZS5rZXk9PT0iRXNjYXBlIiYmKGY/LihlZSksIWVlLmRlZmF1bHRQcmV2ZW50ZWQmJmImJihlZS5wcmV2ZW50RGVmYXVsdCgpLGIoKSkpfSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57aWYoVylyZXR1cm4gUi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixuZSx7Y2FwdHVyZTohMH0pLCgpPT5SLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLG5lLHtjYXB0dXJlOiEwfSl9LFtSLFcsbmVdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKEMpcmV0dXJuIGkmJihnLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoR3A9Ui5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMsUi5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKSxnLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChDKSksZy5sYXllcnMuYWRkKEMpLGVzKCksKCk9PntpJiYoZy5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoQyksZy5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKFIuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPUdwKSl9fSxbQyxSLGksZ10pLHYudXNlRWZmZWN0KCgpPT4oKT0+e0MmJihnLmxheWVycy5kZWxldGUoQyksZy5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoQyksZXMoKSl9LFtDLGddKSx2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IGVlPWd0KCgpPT5FKHt9KSwiaGFuZGxlVXBkYXRlIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSnUsZWUpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEp1LGVlKX0sW10pLG0uanN4KENlLmRpdix7Li4ueCxyZWY6VCxzdHlsZTp7cG9pbnRlckV2ZW50czpZP0g/ImF1dG8iOiJub25lIjp2b2lkIDAsLi4uby5zdHlsZX0sb25Gb2N1c0NhcHR1cmU6dWUoby5vbkZvY3VzQ2FwdHVyZSxKLm9uRm9jdXNDYXB0dXJlKSxvbkJsdXJDYXB0dXJlOnVlKG8ub25CbHVyQ2FwdHVyZSxKLm9uQmx1ckNhcHR1cmUpLG9uUG9pbnRlckRvd25DYXB0dXJlOnVlKG8ub25Qb2ludGVyRG93bkNhcHR1cmUsQi5vblBvaW50ZXJEb3duQ2FwdHVyZSl9KX0sIkRpc21pc3NhYmxlTGF5ZXIiKSksc1Q9di5mb3J3YXJkUmVmKGd0KGZ1bmN0aW9uKG8sdSl7Y29uc3QgaT12LnVzZUNvbnRleHQoV3UpLHM9di51c2VSZWYobnVsbCksZj1FZSh1LHMpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IGQ9cy5jdXJyZW50O2lmKGQpcmV0dXJuIGkuYnJhbmNoZXMuYWRkKGQpLCgpPT57aS5icmFuY2hlcy5kZWxldGUoZCl9fSxbaS5icmFuY2hlc10pLG0uanN4KENlLmRpdix7Li4ubyxyZWY6Zn0pfSwiRGlzbWlzc2FibGVMYXllckJyYW5jaCIpKTtmdW5jdGlvbiBWcCgpe2NvbnN0IGE9di51c2VDb250ZXh0KFd1KSxbbyx1XT12LnVzZVN0YXRlKG51bGwpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2lmKG8pcmV0dXJuIGEuZGlzbWlzc2FibGVTdXJmYWNlcy5hZGQobyksKCk9PnthLmRpc21pc3NhYmxlU3VyZmFjZXMuZGVsZXRlKG8pfX0sW28sYS5kaXNtaXNzYWJsZVN1cmZhY2VzXSksdX1ndChWcCwidXNlRGlzbWlzc2FibGVMYXllclN1cmZhY2UiKTt2YXIgZlQ9Z3QoKCk9PiEwLCJJU19UUlVFIik7ZnVuY3Rpb24gWXAoYSxvKXtjb25zdHtvd25lckRvY3VtZW50OnU9Z2xvYmFsVGhpcz8uZG9jdW1lbnQsZGVmZXJQb2ludGVyRG93bk91dHNpZGU6aT0hMSxpc0RlZmVycmVkUG9pbnRlckRvd25PdXRzaWRlUmVmOnMsZGlzbWlzc2FibGVTdXJmYWNlczpmLHNob3VsZEhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZTpkPWZUfT1vLHA9enQoYSkseT12LnVzZVJlZighMSksYj12LnVzZVJlZighMSkseD12LnVzZVJlZihuZXcgTWFwKSxnPXYudXNlUmVmKCgpPT57fSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57ZnVuY3Rpb24gQygpe2IuY3VycmVudD0hMSxzLmN1cnJlbnQ9ITEseC5jdXJyZW50LmNsZWFyKCl9Z3QoQywicmVzZXRPdXRzaWRlSW50ZXJhY3Rpb24iKTtmdW5jdGlvbiB3KCl7cmV0dXJuIEFycmF5LmZyb20oeC5jdXJyZW50LnZhbHVlcygpKS5zb21lKEJvb2xlYW4pfWd0KHcsImlzT3V0c2lkZUludGVyYWN0aW9uSW50ZXJjZXB0ZWQiKTtmdW5jdGlvbiBSKE4pe2lmKCFiLmN1cnJlbnQpcmV0dXJuO2NvbnN0IE09Ti50YXJnZXQ7TSBpbnN0YW5jZW9mIE5vZGUmJlsuLi5mXS5zb21lKEg9PkguY29udGFpbnMoTSkpfHx4LmN1cnJlbnQuc2V0KE4udHlwZSwhMCksTi50eXBlPT09ImNsaWNrIiYmd2luZG93LnNldFRpbWVvdXQoKCk9PntiLmN1cnJlbnQmJmcuY3VycmVudCgpfSwwKX1ndChSLCJoYW5kbGVJbnRlcmFjdGlvbkNhcHR1cmUiKTtmdW5jdGlvbiBFKE4pe2IuY3VycmVudCYmeC5jdXJyZW50LnNldChOLnR5cGUsITEpfWd0KEUsImhhbmRsZUludGVyYWN0aW9uQnViYmxlIik7Y29uc3QgVD1ndChOPT57aWYoTi50YXJnZXQmJiF5LmN1cnJlbnQpe2xldCBNPWZ1bmN0aW9uKCl7dS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZy5jdXJyZW50KTtjb25zdCBIPXcoKTtDKCksSHx8dHMoY1QscCxZLHtkaXNjcmV0ZTohMH0pfTtpZihndChNLCJoYW5kbGVBbmREaXNwYXRjaFBvaW50ZXJEb3duT3V0c2lkZUV2ZW50IiksIWQoTi50YXJnZXQpKXt1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLmN1cnJlbnQpLEMoKSx5LmN1cnJlbnQ9ITE7cmV0dXJufWNvbnN0IFk9e29yaWdpbmFsRXZlbnQ6Tn07Yi5jdXJyZW50PSEwLHMuY3VycmVudD1pJiZOLmJ1dHRvbj09PTAseC5jdXJyZW50LmNsZWFyKCksIWl8fE4uYnV0dG9uIT09MD9NKCk6KHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGcuY3VycmVudCksZy5jdXJyZW50PU0sdS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZy5jdXJyZW50LHtvbmNlOiEwfSkpfWVsc2UgdS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZy5jdXJyZW50KSxDKCk7eS5jdXJyZW50PSExfSwiaGFuZGxlUG9pbnRlckRvd24iKSxPPVsicG9pbnRlcnVwIiwibW91c2Vkb3duIiwibW91c2V1cCIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsImNsaWNrIl07Zm9yKGNvbnN0IE4gb2YgTyl1LmFkZEV2ZW50TGlzdGVuZXIoTixSLCEwKSx1LmFkZEV2ZW50TGlzdGVuZXIoTixFKTtjb25zdCBBPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57dS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsVCl9LDApO3JldHVybigpPT57d2luZG93LmNsZWFyVGltZW91dChBKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixUKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLmN1cnJlbnQpO2Zvcihjb25zdCBOIG9mIE8pdS5yZW1vdmVFdmVudExpc3RlbmVyKE4sUiwhMCksdS5yZW1vdmVFdmVudExpc3RlbmVyKE4sRSl9fSxbdSxwLGkscyxmLGRdKSx7b25Qb2ludGVyRG93bkNhcHR1cmU6Z3QoKCk9PnkuY3VycmVudD0hMCwib25Qb2ludGVyRG93bkNhcHR1cmUiKX19Z3QoWXAsInVzZVBvaW50ZXJEb3duT3V0c2lkZSIpO2Z1bmN0aW9uIHFwKGEsbz1nbG9iYWxUaGlzPy5kb2N1bWVudCl7Y29uc3QgdT16dChhKSxpPXYudXNlUmVmKCExKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBzPWd0KGY9PntmLnRhcmdldCYmIWkuY3VycmVudCYmdHModVQsdSx7b3JpZ2luYWxFdmVudDpmfSx7ZGlzY3JldGU6ITF9KX0sImhhbmRsZUZvY3VzIik7cmV0dXJuIG8uYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscyksKCk9Pm8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscyl9LFtvLHVdKSx7b25Gb2N1c0NhcHR1cmU6Z3QoKCk9PmkuY3VycmVudD0hMCwib25Gb2N1c0NhcHR1cmUiKSxvbkJsdXJDYXB0dXJlOmd0KCgpPT5pLmN1cnJlbnQ9ITEsIm9uQmx1ckNhcHR1cmUiKX19Z3QocXAsInVzZUZvY3VzT3V0c2lkZSIpO2Z1bmN0aW9uIGVzKCl7Y29uc3QgYT1uZXcgQ3VzdG9tRXZlbnQoSnUpO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoYSl9Z3QoZXMsImRpc3BhdGNoVXBkYXRlIik7ZnVuY3Rpb24gdHMoYSxvLHUse2Rpc2NyZXRlOml9KXtjb25zdCBzPXUub3JpZ2luYWxFdmVudC50YXJnZXQsZj1uZXcgQ3VzdG9tRXZlbnQoYSx7YnViYmxlczohMSxjYW5jZWxhYmxlOiEwLGRldGFpbDp1fSk7byYmcy5hZGRFdmVudExpc3RlbmVyKGEsbyx7b25jZTohMH0pLGk/eGkocyxmKTpzLmRpc3BhdGNoRXZlbnQoZil9Z3QodHMsImhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQiKTt2YXIgZFQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG5zPShhLG8pPT5kVChhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxTaT0wLEZhPW51bGw7ZnVuY3Rpb24gbVQoYSl7cmV0dXJuIHJyKCksYS5jaGlsZHJlbn1ucyhtVCwiRm9jdXNHdWFyZHMiKTtmdW5jdGlvbiBycigpe3YudXNlRWZmZWN0KCgpPT57RmF8fChGYT17c3RhcnQ6bHMoKSxlbmQ6bHMoKX0pO2NvbnN0e3N0YXJ0OmEsZW5kOm99PUZhO3JldHVybiBkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkIT09YSYmZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyYmVnaW4iLGEpLGRvY3VtZW50LmJvZHkubGFzdEVsZW1lbnRDaGlsZCE9PW8mJmRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLG8pLFNpKyssKCk9PntTaT09PTEmJihGYT8uc3RhcnQucmVtb3ZlKCksRmE/LmVuZC5yZW1vdmUoKSxGYT1udWxsKSxTaT1NYXRoLm1heCgwLFNpLTEpfX0sW10pfW5zKHJyLCJ1c2VGb2N1c0d1YXJkcyIpO2Z1bmN0aW9uIGxzKCl7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJkYXRhLXJhZGl4LWZvY3VzLWd1YXJkIiwiIiksYS50YWJJbmRleD0wLGEuc3R5bGUub3V0bGluZT0ibm9uZSIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsYS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixhfW5zKGxzLCJjcmVhdGVGb2N1c0d1YXJkIik7dmFyIGhUPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx1dD0oYSxvKT0+aFQoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksYXM9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Nb3VudCIsb3M9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Vbm1vdW50IixYcD17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxycz12LmZvcndhcmRSZWYodXQoZnVuY3Rpb24obyx1KXtjb25zdHtsb29wOmk9ITEsdHJhcHBlZDpzPSExLGJyYW5jaGVzOmYsb25Nb3VudEF1dG9Gb2N1czpkLG9uVW5tb3VudEF1dG9Gb2N1czpwLC4uLnl9PW8sW2IseF09di51c2VTdGF0ZShudWxsKSxnPXp0KGQpLEM9enQocCksdz12LnVzZVJlZihudWxsKSxSPUVlKHUseCksRT12LnVzZVJlZihmKTt2LnVzZUVmZmVjdCgoKT0+e0UuY3VycmVudD1mfSk7Y29uc3QgVD12LnVzZUNhbGxiYWNrKE49Pk4/Yj8uY29udGFpbnMoTik/ITA6ISFFLmN1cnJlbnQ/LnNvbWUoTT0+TS5jb250YWlucyhOKSk6ITEsW2JdKSxPPXYudXNlUmVmKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSkuY3VycmVudDt2LnVzZUVmZmVjdCgoKT0+e2lmKHMpe2xldCBOPWZ1bmN0aW9uKFUpe2lmKE8ucGF1c2VkfHwhYilyZXR1cm47Y29uc3QgQj1VLnRhcmdldDtUKEIpP3cuY3VycmVudD1COmVsKHcuY3VycmVudCx7c2VsZWN0OiEwfSl9LE09ZnVuY3Rpb24oVSl7aWYoTy5wYXVzZWR8fCFiKXJldHVybjtjb25zdCBCPVUucmVsYXRlZFRhcmdldDtCIT09bnVsbCYmKFQoQil8fGVsKHcuY3VycmVudCx7c2VsZWN0OiEwfSkpfSxZPWZ1bmN0aW9uKFUpe2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5KWZvcihjb25zdCBKIG9mIFUpSi5yZW1vdmVkTm9kZXMubGVuZ3RoPjAmJmVsKGIpfTt1dChOLCJoYW5kbGVGb2N1c0luIiksdXQoTSwiaGFuZGxlRm9jdXNPdXQiKSx1dChZLCJoYW5kbGVNdXRhdGlvbnMiKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixOKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsTSk7Y29uc3QgSD1uZXcgTXV0YXRpb25PYnNlcnZlcihZKTtyZXR1cm4gYiYmSC5vYnNlcnZlKGIse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixOKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsTSksSC5kaXNjb25uZWN0KCl9fX0sW3MsYixPLnBhdXNlZCxUXSksdi51c2VFZmZlY3QoKCk9PntpZihiKXtKcC5hZGQoTyk7Y29uc3QgTj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFiLmNvbnRhaW5zKE4pKXtjb25zdCBZPW5ldyBDdXN0b21FdmVudChhcyxYcCk7Yi5hZGRFdmVudExpc3RlbmVyKGFzLGcpLGIuZGlzcGF0Y2hFdmVudChZKSxZLmRlZmF1bHRQcmV2ZW50ZWR8fChRcChldihzcyhiKSkse3NlbGVjdDohMH0pLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1OJiZlbChiKSl9cmV0dXJuKCk9PntiLnJlbW92ZUV2ZW50TGlzdGVuZXIoYXMsZyk7Y29uc3QgWT1iLm93bmVyRG9jdW1lbnQsSD1DdXN0b21FdmVudDtzZXRUaW1lb3V0KCgpPT57Y29uc3QgVT1uZXcgSChvcyxYcCk7Yi5hZGRFdmVudExpc3RlbmVyKG9zLEMpLGIuZGlzcGF0Y2hFdmVudChVKSxVLmRlZmF1bHRQcmV2ZW50ZWR8fGVsKE4/P1kuYm9keSx7c2VsZWN0OiEwfSksYi5yZW1vdmVFdmVudExpc3RlbmVyKG9zLEMpLEpwLnJlbW92ZShPKX0sMCl9fX0sW2IsZyxDLE9dKTtjb25zdCBBPXYudXNlQ2FsbGJhY2soTj0+e2lmKCFpJiYhc3x8Ty5wYXVzZWQpcmV0dXJuO2NvbnN0IE09Ti5rZXk9PT0iVGFiIiYmIU4uYWx0S2V5JiYhTi5jdHJsS2V5JiYhTi5tZXRhS2V5LFk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihNJiZZKXtjb25zdCBIPU4uY3VycmVudFRhcmdldCxbVSxCXT1acChIKTtVJiZCPyFOLnNoaWZ0S2V5JiZZPT09Qj8oTi5wcmV2ZW50RGVmYXVsdCgpLGkmJmVsKFUse3NlbGVjdDohMH0pKTpOLnNoaWZ0S2V5JiZZPT09VSYmKE4ucHJldmVudERlZmF1bHQoKSxpJiZlbChCLHtzZWxlY3Q6ITB9KSk6WT09PUgmJk4ucHJldmVudERlZmF1bHQoKX19LFtpLHMsTy5wYXVzZWRdKTtyZXR1cm4gbS5qc3goQ2UuZGl2LHt0YWJJbmRleDotMSwuLi55LHJlZjpSLG9uS2V5RG93bjpBfSl9LCJGb2N1c1Njb3BlIikpLEtwPXYuY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBpcyh7cmVnaXN0cnk6YSxjaGlsZHJlbjpvfSl7cmV0dXJuIGE/bS5qc3goS3AuUHJvdmlkZXIse3ZhbHVlOmEsY2hpbGRyZW46b30pOm99dXQoaXMsIkZvY3VzU2NvcGVCcmFuY2hQcm92aWRlciIpO2Z1bmN0aW9uIGNzKCl7Y29uc3RbYSxvXT12LnVzZVN0YXRlKFtdKSx1PXYudXNlTWVtbygoKT0+KHthZGQ6dXQoaT0+byhzPT5zLmluY2x1ZGVzKGkpP3M6Wy4uLnMsaV0pLCJhZGQiKSxyZW1vdmU6dXQoaT0+byhzPT5zLmZpbHRlcihmPT5mIT09aSkpLCJyZW1vdmUiKX0pLFtdKTtyZXR1cm57bm9kZXM6YSxyZWdpc3RyeTp1fX11dChjcywidXNlRm9jdXNTY29wZUJyYW5jaFJlZ2lzdHJ5Iik7ZnVuY3Rpb24gdXMoYSl7Y29uc3Qgbz12LnVzZUNvbnRleHQoS3ApO3YudXNlRWZmZWN0KCgpPT57aWYoISghYXx8IW8pKXJldHVybiBvLmFkZChhKSwoKT0+by5yZW1vdmUoYSl9LFthLG9dKX11dCh1cywidXNlRm9jdXNTY29wZUJyYW5jaCIpO2Z1bmN0aW9uIFFwKGEse3NlbGVjdDpvPSExfT17fSl7Y29uc3QgdT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2Zvcihjb25zdCBpIG9mIGEpaWYoZWwoaSx7c2VsZWN0Om99KSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dSlyZXR1cm59dXQoUXAsImZvY3VzRmlyc3QiKTtmdW5jdGlvbiBacChhKXtjb25zdCBvPXNzKGEpLHU9ZnMobyxhKSxpPWZzKG8ucmV2ZXJzZSgpLGEpO3JldHVyblt1LGldfXV0KFpwLCJnZXRUYWJiYWJsZUVkZ2VzIik7ZnVuY3Rpb24gc3MoYSl7Y29uc3Qgbz1bXSxpPWEub3duZXJEb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGEsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQse2FjY2VwdE5vZGU6dXQocz0+e2NvbnN0IGY9cy50YWdOYW1lPT09IklOUFVUIiYmcy50eXBlPT09ImhpZGRlbiI7cmV0dXJuIHMuZGlzYWJsZWR8fHMuaGlkZGVufHxmP05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6cy50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH0sImFjY2VwdE5vZGUiKX0pO2Zvcig7aS5uZXh0Tm9kZSgpOylvLnB1c2goaS5jdXJyZW50Tm9kZSk7cmV0dXJuIG99dXQoc3MsImdldFRhYmJhYmxlQ2FuZGlkYXRlcyIpO2Z1bmN0aW9uIGZzKGEsbyl7Y29uc3QgdT10eXBlb2Ygby5jaGVja1Zpc2liaWxpdHk9PSJmdW5jdGlvbiImJm8uY2hlY2tWaXNpYmlsaXR5KHtjaGVja1Zpc2liaWxpdHlDU1M6ITB9KTtmb3IoY29uc3QgaSBvZiBhKWlmKCEodT8haS5jaGVja1Zpc2liaWxpdHkoe2NoZWNrVmlzaWJpbGl0eUNTUzohMH0pOkZwKGkse3VwVG86b30pKSlyZXR1cm4gaX11dChmcywiZmluZFZpc2libGUiKTtmdW5jdGlvbiBGcChhLHt1cFRvOm99KXtpZihnZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHk9PT0iaGlkZGVuIilyZXR1cm4hMDtmb3IoO2E7KXtpZihvIT09dm9pZCAwJiZhPT09bylyZXR1cm4hMTtpZihnZXRDb21wdXRlZFN0eWxlKGEpLmRpc3BsYXk9PT0ibm9uZSIpcmV0dXJuITA7YT1hLnBhcmVudEVsZW1lbnR9cmV0dXJuITF9dXQoRnAsImlzSGlkZGVuIik7ZnVuY3Rpb24gJHAoYSl7cmV0dXJuIGEudGFnTmFtZT09PSJJTlBVVCImJnR5cGVvZiBhLnNlbGVjdD09ImZ1bmN0aW9uIn11dCgkcCwiaXNTZWxlY3RhYmxlSW5wdXQiKTtmdW5jdGlvbiBlbChhLHtzZWxlY3Q6bz0hMX09e30pe2lmKGEmJmEuZm9jdXMpe2NvbnN0IGk9KGEub3duZXJEb2N1bWVudD8/ZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQ7YS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGEhPT1pJiYkcChhKSYmbyYmYS5zZWxlY3QoKX19dXQoZWwsImZvY3VzIik7dmFyIEpwPVdwKCk7ZnVuY3Rpb24gV3AoKXtsZXQgYT1bXTtyZXR1cm57YWRkKG8pe2NvbnN0IHU9YVswXTtvIT09dSYmdT8ucGF1c2UoKSxhPWRzKGEsbyksYS51bnNoaWZ0KG8pfSxyZW1vdmUobyl7YT1kcyhhLG8pLGFbMF0/LnJlc3VtZSgpfX19dXQoV3AsImNyZWF0ZUZvY3VzU2NvcGVzU3RhY2siKTtmdW5jdGlvbiBkcyhhLG8pe2NvbnN0IHU9Wy4uLmFdLGk9dS5pbmRleE9mKG8pO3JldHVybiBpIT09LTEmJnUuc3BsaWNlKGksMSksdX11dChkcywiYXJyYXlSZW1vdmUiKTtmdW5jdGlvbiBldihhKXtyZXR1cm4gYS5maWx0ZXIobz0+by50YWdOYW1lIT09IkEiKX11dChldiwicmVtb3ZlTGlua3MiKTt2YXIgcFQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LHZUPShhLG8pPT5wVChhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxnVD1BbFsiIHVzZUlkICIudHJpbSgpLnRvU3RyaW5nKCldfHwoKCk9Pnt9KSx5VD0wO2Z1bmN0aW9uIHRsKGEpe2NvbnN0W28sdV09di51c2VTdGF0ZShnVCgpKTtyZXR1cm4gbnQoKCk9PnthfHx1KGk9Pmk/P1N0cmluZyh5VCsrKSl9LFthXSksYXx8KG8/YHJhZGl4LSR7b31gOiIiKX12VCh0bCwidXNlSWQiKTtjb25zdCBiVD1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLGpsPU1hdGgubWluLG5sPU1hdGgubWF4LENpPU1hdGgucm91bmQsVGk9TWF0aC5mbG9vcixsbD1hPT4oe3g6YSx5OmF9KSx4VD17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iixib3R0b206InRvcCIsdG9wOiJib3R0b20ifTtmdW5jdGlvbiB0dihhLG8sdSl7cmV0dXJuIG5sKGEsamwobyx1KSl9ZnVuY3Rpb24gYWwoYSxvKXtyZXR1cm4gdHlwZW9mIGE9PSJmdW5jdGlvbiI/YShvKTphfWZ1bmN0aW9uIE1sKGEpe3JldHVybiBhLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gJGEoYSl7cmV0dXJuIGEuc3BsaXQoIi0iKVsxXX1mdW5jdGlvbiBtcyhhKXtyZXR1cm4gYT09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIGhzKGEpe3JldHVybiBhPT09InkiPyJoZWlnaHQiOiJ3aWR0aCJ9ZnVuY3Rpb24gVW4oYSl7Y29uc3Qgbz1hWzBdO3JldHVybiBvPT09InQifHxvPT09ImIiPyJ5IjoieCJ9ZnVuY3Rpb24gcHMoYSl7cmV0dXJuIG1zKFVuKGEpKX1mdW5jdGlvbiBTVChhLG8sdSl7dT09PXZvaWQgMCYmKHU9ITEpO2NvbnN0IGk9JGEoYSkscz1wcyhhKSxmPWhzKHMpO2xldCBkPXM9PT0ieCI/aT09PSh1PyJlbmQiOiJzdGFydCIpPyJyaWdodCI6ImxlZnQiOmk9PT0ic3RhcnQiPyJib3R0b20iOiJ0b3AiO3JldHVybiBvLnJlZmVyZW5jZVtmXT5vLmZsb2F0aW5nW2ZdJiYoZD13aShkKSksW2Qsd2koZCldfWZ1bmN0aW9uIENUKGEpe2NvbnN0IG89d2koYSk7cmV0dXJuW3ZzKGEpLG8sdnMobyldfWZ1bmN0aW9uIHZzKGEpe3JldHVybiBhLmluY2x1ZGVzKCJzdGFydCIpP2EucmVwbGFjZSgic3RhcnQiLCJlbmQiKTphLnJlcGxhY2UoImVuZCIsInN0YXJ0Iil9Y29uc3QgbnY9WyJsZWZ0IiwicmlnaHQiXSxsdj1bInJpZ2h0IiwibGVmdCJdLFRUPVsidG9wIiwiYm90dG9tIl0sd1Q9WyJib3R0b20iLCJ0b3AiXTtmdW5jdGlvbiBFVChhLG8sdSl7c3dpdGNoKGEpe2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cmV0dXJuIHU/bz9sdjpudjpvP252Omx2O2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6cmV0dXJuIG8/VFQ6d1Q7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gUlQoYSxvLHUsaSl7Y29uc3Qgcz0kYShhKTtsZXQgZj1FVChNbChhKSx1PT09InN0YXJ0IixpKTtyZXR1cm4gcyYmKGY9Zi5tYXAoZD0+ZCsiLSIrcyksbyYmKGY9Zi5jb25jYXQoZi5tYXAodnMpKSkpLGZ9ZnVuY3Rpb24gd2koYSl7Y29uc3Qgbz1NbChhKTtyZXR1cm4geFRbb10rYS5zbGljZShvLmxlbmd0aCl9ZnVuY3Rpb24gX1QoYSl7dmFyIG8sdSxpLHM7cmV0dXJue3RvcDoobz1hLnRvcCkhPW51bGw/bzowLHJpZ2h0Oih1PWEucmlnaHQpIT1udWxsP3U6MCxib3R0b206KGk9YS5ib3R0b20pIT1udWxsP2k6MCxsZWZ0OihzPWEubGVmdCkhPW51bGw/czowfX1mdW5jdGlvbiBhdihhKXtyZXR1cm4gdHlwZW9mIGEhPSJudW1iZXIiP19UKGEpOnt0b3A6YSxyaWdodDphLGJvdHRvbTphLGxlZnQ6YX19ZnVuY3Rpb24gRWkoYSl7Y29uc3R7eDpvLHk6dSx3aWR0aDppLGhlaWdodDpzfT1hO3JldHVybnt3aWR0aDppLGhlaWdodDpzLHRvcDp1LGxlZnQ6byxyaWdodDpvK2ksYm90dG9tOnUrcyx4Om8seTp1fX1mdW5jdGlvbiBvdihhLG8sdSl7bGV0e3JlZmVyZW5jZTppLGZsb2F0aW5nOnN9PWE7Y29uc3QgZj1VbihvKSxkPXBzKG8pLHA9aHMoZCkseT1NbChvKSxiPWY9PT0ieSIseD1pLngraS53aWR0aC8yLXMud2lkdGgvMixnPWkueStpLmhlaWdodC8yLXMuaGVpZ2h0LzIsQz1pW3BdLzItc1twXS8yO2xldCB3O3N3aXRjaCh5KXtjYXNlInRvcCI6dz17eCx5OmkueS1zLmhlaWdodH07YnJlYWs7Y2FzZSJib3R0b20iOnc9e3gseTppLnkraS5oZWlnaHR9O2JyZWFrO2Nhc2UicmlnaHQiOnc9e3g6aS54K2kud2lkdGgseTpnfTticmVhaztjYXNlImxlZnQiOnc9e3g6aS54LXMud2lkdGgseTpnfTticmVhaztkZWZhdWx0Onc9e3g6aS54LHk6aS55fX1jb25zdCBSPSRhKG8pO3JldHVybiBSJiYod1tkXSs9QyooUj09PSJlbmQiPzE6LTEpKih1JiZiPy0xOjEpKSx3fWFzeW5jIGZ1bmN0aW9uIE9UKGEsbyl7dmFyIHU7bz09PXZvaWQgMCYmKG89e30pO2NvbnN0e3g6aSx5OnMscGxhdGZvcm06ZixyZWN0czpkLGVsZW1lbnRzOnAsc3RyYXRlZ3k6eX09YSx7Ym91bmRhcnk6Yj0iY2xpcHBpbmdBbmNlc3RvcnMiLHJvb3RCb3VuZGFyeTp4PSJ2aWV3cG9ydCIsZWxlbWVudENvbnRleHQ6Zz0iZmxvYXRpbmciLGFsdEJvdW5kYXJ5OkM9ITEscGFkZGluZzp3PTB9PWFsKG8sYSksUj1hdih3KSxUPXBbQz9nPT09ImZsb2F0aW5nIj8icmVmZXJlbmNlIjoiZmxvYXRpbmciOmddLE89RWkoYXdhaXQgZi5nZXRDbGlwcGluZ1JlY3Qoe2VsZW1lbnQ6KHU9YXdhaXQoZi5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmYuaXNFbGVtZW50KFQpKSk9PW51bGx8fHU/VDpULmNvbnRleHRFbGVtZW50fHxhd2FpdChmLmdldERvY3VtZW50RWxlbWVudD09bnVsbD92b2lkIDA6Zi5nZXREb2N1bWVudEVsZW1lbnQocC5mbG9hdGluZykpLGJvdW5kYXJ5OmIscm9vdEJvdW5kYXJ5Ongsc3RyYXRlZ3k6eX0pKSxBPWc9PT0iZmxvYXRpbmciP3t4OmkseTpzLHdpZHRoOmQuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmQuZmxvYXRpbmcuaGVpZ2h0fTpkLnJlZmVyZW5jZSxOPWF3YWl0KGYuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpmLmdldE9mZnNldFBhcmVudChwLmZsb2F0aW5nKSksTT1hd2FpdChmLmlzRWxlbWVudD09bnVsbD92b2lkIDA6Zi5pc0VsZW1lbnQoTikpJiZhd2FpdChmLmdldFNjYWxlPT1udWxsP3ZvaWQgMDpmLmdldFNjYWxlKE4pKXx8e3g6MSx5OjF9LFk9RWkoZi5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBmLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpwLHJlY3Q6QSxvZmZzZXRQYXJlbnQ6TixzdHJhdGVneTp5fSk6QSk7cmV0dXJue3RvcDooTy50b3AtWS50b3ArUi50b3ApL00ueSxib3R0b206KFkuYm90dG9tLU8uYm90dG9tK1IuYm90dG9tKS9NLnksbGVmdDooTy5sZWZ0LVkubGVmdCtSLmxlZnQpL00ueCxyaWdodDooWS5yaWdodC1PLnJpZ2h0K1IucmlnaHQpL00ueH19Y29uc3QgQVQ9NTAsTlQ9YXN5bmMoYSxvLHUpPT57Y29uc3R7cGxhY2VtZW50Omk9ImJvdHRvbSIsc3RyYXRlZ3k6cz0iYWJzb2x1dGUiLG1pZGRsZXdhcmU6Zj1bXSxwbGF0Zm9ybTpkfT11LHA9ZC5kZXRlY3RPdmVyZmxvdz9kOnsuLi5kLGRldGVjdE92ZXJmbG93Ok9UfSx5PWF3YWl0KGQuaXNSVEw9PW51bGw/dm9pZCAwOmQuaXNSVEwobykpO2xldCBiPWF3YWl0IGQuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6YSxmbG9hdGluZzpvLHN0cmF0ZWd5OnN9KSx7eCx5Omd9PW92KGIsaSx5KSxDPWksdz0wO2NvbnN0IFI9e307Zm9yKGxldCBFPTA7RTxmLmxlbmd0aDtFKyspe2NvbnN0IFQ9ZltFXTtpZighVCljb250aW51ZTtjb25zdHtuYW1lOk8sZm46QX09VCx7eDpOLHk6TSxkYXRhOlkscmVzZXQ6SH09YXdhaXQgQSh7eCx5OmcsaW5pdGlhbFBsYWNlbWVudDppLHBsYWNlbWVudDpDLHN0cmF0ZWd5OnMsbWlkZGxld2FyZURhdGE6UixyZWN0czpiLHBsYXRmb3JtOnAsZWxlbWVudHM6e3JlZmVyZW5jZTphLGZsb2F0aW5nOm99fSk7eD1OPz94LGc9TT8/ZyxSW09dPXsuLi5SW09dLC4uLll9LEgmJnc8QVQmJih3KyssdHlwZW9mIEg9PSJvYmplY3QiJiYoSC5wbGFjZW1lbnQmJihDPUgucGxhY2VtZW50KSxILnJlY3RzJiYoYj1ILnJlY3RzPT09ITA/YXdhaXQgZC5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTphLGZsb2F0aW5nOm8sc3RyYXRlZ3k6c30pOkgucmVjdHMpLHt4LHk6Z309b3YoYixDLHkpKSxFPS0xKX1yZXR1cm57eCx5OmcscGxhY2VtZW50OkMsc3RyYXRlZ3k6cyxtaWRkbGV3YXJlRGF0YTpSfX0sRFQ9YT0+KHtuYW1lOiJhcnJvdyIsb3B0aW9uczphLGFzeW5jIGZuKG8pe2NvbnN0e3g6dSx5OmkscGxhY2VtZW50OnMscmVjdHM6ZixwbGF0Zm9ybTpkLGVsZW1lbnRzOnAsbWlkZGxld2FyZURhdGE6eX09byx7ZWxlbWVudDpiLHBhZGRpbmc6eD0wfT1hbChhLG8pfHx7fTtpZihiPT1udWxsKXJldHVybnt9O2NvbnN0IGc9YXYoeCksQz17eDp1LHk6aX0sdz1wcyhzKSxSPWhzKHcpLEU9YXdhaXQgZC5nZXREaW1lbnNpb25zKGIpLFQ9dz09PSJ5IixPPVQ/InRvcCI6ImxlZnQiLEE9VD8iYm90dG9tIjoicmlnaHQiLE49VD8iY2xpZW50SGVpZ2h0IjoiY2xpZW50V2lkdGgiLE09Zi5yZWZlcmVuY2VbUl0rZi5yZWZlcmVuY2Vbd10tQ1t3XS1mLmZsb2F0aW5nW1JdLFk9Q1t3XS1mLnJlZmVyZW5jZVt3XSxIPWF3YWl0KGQuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpkLmdldE9mZnNldFBhcmVudChiKSk7bGV0IFU9SD9IW05dOjA7KCFVfHwhYXdhaXQoZC5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmQuaXNFbGVtZW50KEgpKSkmJihVPXAuZmxvYXRpbmdbTl18fGYuZmxvYXRpbmdbUl0pO2NvbnN0IEI9TS8yLVkvMixKPVUvMi1FW1JdLzItMSxXPWpsKGdbT10sSiksbmU9amwoZ1tBXSxKKSxlZT1VLUVbUl0tbmUsY2U9VS8yLUVbUl0vMitCLG1lPXR2KFcsY2UsZWUpLGhlPSF5LmFycm93JiYkYShzKSE9bnVsbCYmY2UhPT1tZSYmZi5yZWZlcmVuY2VbUl0vMi0oY2U8Vz9XOm5lKS1FW1JdLzI8MCxQPWhlP2NlPFc/Y2UtVzpjZS1lZTowO3JldHVybntbd106Q1t3XStQLGRhdGE6e1t3XTptZSxjZW50ZXJPZmZzZXQ6Y2UtbWUtUCwuLi5oZSYme2FsaWdubWVudE9mZnNldDpQfX0scmVzZXQ6aGV9fX0pLGpUPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6YSxhc3luYyBmbihvKXt2YXIgdSxpO2NvbnN0e3BsYWNlbWVudDpzLG1pZGRsZXdhcmVEYXRhOmYscmVjdHM6ZCxpbml0aWFsUGxhY2VtZW50OnAscGxhdGZvcm06eSxlbGVtZW50czpifT1vLHttYWluQXhpczp4PSEwLGNyb3NzQXhpczpnPSEwLGZhbGxiYWNrUGxhY2VtZW50czpDLGZhbGxiYWNrU3RyYXRlZ3k6dz0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpSPSJub25lIixmbGlwQWxpZ25tZW50OkU9ITAsLi4uVH09YWwoYSxvKTtpZigodT1mLmFycm93KSE9bnVsbCYmdS5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3QgTz1NbChzKSxBPVVuKHApLE49TWwocCk9PT1wLE09YXdhaXQoeS5pc1JUTD09bnVsbD92b2lkIDA6eS5pc1JUTChiLmZsb2F0aW5nKSksWT1DfHwoTnx8IUU/W3dpKHApXTpDVChwKSksSD1SIT09Im5vbmUiOyFDJiZIJiZZLnB1c2goLi4uUlQocCxFLFIsTSkpO2NvbnN0IFU9W3AsLi4uWV0sQj1hd2FpdCB5LmRldGVjdE92ZXJmbG93KG8sVCksSj1bXTtsZXQgVz0oKGk9Zi5mbGlwKT09bnVsbD92b2lkIDA6aS5vdmVyZmxvd3MpfHxbXTtpZih4JiZKLnB1c2goQltPXSksZyl7Y29uc3QgbWU9U1QocyxkLE0pO0oucHVzaChCW21lWzBdXSxCW21lWzFdXSl9aWYoVz1bLi4uVyx7cGxhY2VtZW50OnMsb3ZlcmZsb3dzOkp9XSwhSi5ldmVyeShtZT0+bWU8PTApKXt2YXIgbmUsZWU7Y29uc3QgbWU9KCgobmU9Zi5mbGlwKT09bnVsbD92b2lkIDA6bmUuaW5kZXgpfHwwKSsxLGhlPVVbbWVdO2lmKGhlJiYoIShnPT09ImFsaWdubWVudCI/QSE9PVVuKGhlKTohMSl8fFcuZXZlcnkoRj0+VW4oRi5wbGFjZW1lbnQpPT09QT9GLm92ZXJmbG93c1swXT4wOiEwKSkpcmV0dXJue2RhdGE6e2luZGV4Om1lLG92ZXJmbG93czpXfSxyZXNldDp7cGxhY2VtZW50OmhlfX07bGV0IFA9KGVlPVcuZmlsdGVyKCQ9PiQub3ZlcmZsb3dzWzBdPD0wKS5zb3J0KCgkLEYpPT4kLm92ZXJmbG93c1sxXS1GLm92ZXJmbG93c1sxXSlbMF0pPT1udWxsP3ZvaWQgMDplZS5wbGFjZW1lbnQ7aWYoIVApc3dpdGNoKHcpe2Nhc2UiYmVzdEZpdCI6e3ZhciBjZTtjb25zdCAkPShjZT1XLmZpbHRlcihGPT57aWYoSCl7Y29uc3QgcmU9VW4oRi5wbGFjZW1lbnQpO3JldHVybiByZT09PUF8fHJlPT09InkifXJldHVybiEwfSkubWFwKEY9PltGLnBsYWNlbWVudCxGLm92ZXJmbG93cy5maWx0ZXIocmU9PnJlPjApLnJlZHVjZSgocmUscSk9PnJlK3EsMCldKS5zb3J0KChGLHJlKT0+RlsxXS1yZVsxXSlbMF0pPT1udWxsP3ZvaWQgMDpjZVswXTskJiYoUD0kKTticmVha31jYXNlImluaXRpYWxQbGFjZW1lbnQiOlA9cDticmVha31pZihzIT09UClyZXR1cm57cmVzZXQ6e3BsYWNlbWVudDpQfX19cmV0dXJue319fX07ZnVuY3Rpb24gcnYoYSxvKXtyZXR1cm57dG9wOmEudG9wLW8uaGVpZ2h0LHJpZ2h0OmEucmlnaHQtby53aWR0aCxib3R0b206YS5ib3R0b20tby5oZWlnaHQsbGVmdDphLmxlZnQtby53aWR0aH19ZnVuY3Rpb24gaXYoYSl7cmV0dXJuIGJULnNvbWUobz0+YVtvXT49MCl9Y29uc3QgTVQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT12b2lkIDAmJihhPXt9KSx7bmFtZToiaGlkZSIsb3B0aW9uczphLGFzeW5jIGZuKG8pe2NvbnN0e3JlY3RzOnUscGxhdGZvcm06aX09byx7c3RyYXRlZ3k6cz0icmVmZXJlbmNlSGlkZGVuIiwuLi5mfT1hbChhLG8pO3N3aXRjaChzKXtjYXNlInJlZmVyZW5jZUhpZGRlbiI6e2NvbnN0IGQ9YXdhaXQgaS5kZXRlY3RPdmVyZmxvdyhvLHsuLi5mLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSkscD1ydihkLHUucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpwLHJlZmVyZW5jZUhpZGRlbjppdihwKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IGQ9YXdhaXQgaS5kZXRlY3RPdmVyZmxvdyhvLHsuLi5mLGFsdEJvdW5kYXJ5OiEwfSkscD1ydihkLHUuZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czpwLGVzY2FwZWQ6aXYocCl9fX1kZWZhdWx0OnJldHVybnt9fX19fSxjdj1uZXcgU2V0KFsibGVmdCIsInRvcCJdKTthc3luYyBmdW5jdGlvbiB6VChhLG8pe2NvbnN0e3BsYWNlbWVudDp1LHBsYXRmb3JtOmksZWxlbWVudHM6c309YSxmPWF3YWl0KGkuaXNSVEw9PW51bGw/dm9pZCAwOmkuaXNSVEwocy5mbG9hdGluZykpLGQ9TWwodSkscD0kYSh1KSx5PVVuKHUpPT09InkiLGI9Y3YuaGFzKGQpPy0xOjEseD1mJiZ5Py0xOjEsZz1hbChvLGEpO2xldHttYWluQXhpczpDLGNyb3NzQXhpczp3LGFsaWdubWVudEF4aXM6Un09dHlwZW9mIGc9PSJudW1iZXIiP3ttYWluQXhpczpnLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmcubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmcuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6Zy5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gcCYmdHlwZW9mIFI9PSJudW1iZXIiJiYodz1wPT09ImVuZCI/UiotMTpSKSx5P3t4OncqeCx5OkMqYn06e3g6QypiLHk6dyp4fX1jb25zdCBrVD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9MCkse25hbWU6Im9mZnNldCIsb3B0aW9uczphLGFzeW5jIGZuKG8pe3ZhciB1LGk7Y29uc3R7eDpzLHk6ZixwbGFjZW1lbnQ6ZCxtaWRkbGV3YXJlRGF0YTpwfT1vLHk9YXdhaXQgelQobyxhKTtyZXR1cm4gZD09PSgodT1wLm9mZnNldCk9PW51bGw/dm9pZCAwOnUucGxhY2VtZW50KSYmKGk9cC5hcnJvdykhPW51bGwmJmkuYWxpZ25tZW50T2Zmc2V0P3t9Ont4OnMreS54LHk6Zit5LnksZGF0YTp7Li4ueSxwbGFjZW1lbnQ6ZH19fX19LExUPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOmEsYXN5bmMgZm4obyl7Y29uc3R7eDp1LHk6aSxwbGFjZW1lbnQ6cyxwbGF0Zm9ybTpmfT1vLHttYWluQXhpczpkPSEwLGNyb3NzQXhpczpwPSExLGxpbWl0ZXI6eT17Zm46QT0+e2xldHt4Ok4seTpNfT1BO3JldHVybnt4Ok4seTpNfX19LC4uLmJ9PWFsKGEsbykseD17eDp1LHk6aX0sZz1hd2FpdCBmLmRldGVjdE92ZXJmbG93KG8sYiksQz1VbihzKSx3PW1zKEMpO2xldCBSPXhbd10sRT14W0NdO2NvbnN0IFQ9KEEsTik9PnR2KE4rZ1tBPT09InkiPyJ0b3AiOiJsZWZ0Il0sTixOLWdbQT09PSJ5Ij8iYm90dG9tIjoicmlnaHQiXSk7ZCYmKFI9VCh3LFIpKSxwJiYoRT1UKEMsRSkpO2NvbnN0IE89eS5mbih7Li4ubyxbd106UixbQ106RX0pO3JldHVybnsuLi5PLGRhdGE6e3g6Ty54LXUseTpPLnktaSxlbmFibGVkOntbd106ZCxbQ106cH19fX19fSxVVD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30pLHtvcHRpb25zOmEsZm4obyl7dmFyIHUsaTtjb25zdHt4OnMseTpmLHBsYWNlbWVudDpkLHJlY3RzOnAsbWlkZGxld2FyZURhdGE6eX09byx7b2Zmc2V0OmI9MCxtYWluQXhpczp4PSEwLGNyb3NzQXhpczpnPSEwfT1hbChhLG8pLEM9e3g6cyx5OmZ9LHc9VW4oZCksUj1tcyh3KTtsZXQgRT1DW1JdLFQ9Q1t3XTtjb25zdCBPPWFsKGIsbyksQT10eXBlb2YgTz09Im51bWJlciI/e21haW5BeGlzOk8sY3Jvc3NBeGlzOjB9OnttYWluQXhpczoodT1PLm1haW5BeGlzKSE9bnVsbD91OjAsY3Jvc3NBeGlzOihpPU8uY3Jvc3NBeGlzKSE9bnVsbD9pOjB9O2lmKHgpe2NvbnN0IFk9Uj09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLEg9cC5yZWZlcmVuY2VbUl0tcC5mbG9hdGluZ1tZXStBLm1haW5BeGlzLFU9cC5yZWZlcmVuY2VbUl0rcC5yZWZlcmVuY2VbWV0tQS5tYWluQXhpcztFPEg/RT1IOkU+VSYmKEU9VSl9aWYoZyl7dmFyIE4sTTtjb25zdCBZPVI9PT0ieSI/IndpZHRoIjoiaGVpZ2h0IixIPWN2LmhhcyhNbChkKSksVT1wLnJlZmVyZW5jZVt3XS1wLmZsb2F0aW5nW1ldKyhIJiYoKE49eS5vZmZzZXQpPT1udWxsP3ZvaWQgMDpOW3ddKXx8MCkrKEg/MDpBLmNyb3NzQXhpcyksQj1wLnJlZmVyZW5jZVt3XStwLnJlZmVyZW5jZVtZXSsoSD8wOigoTT15Lm9mZnNldCk9PW51bGw/dm9pZCAwOk1bd10pfHwwKS0oSD9BLmNyb3NzQXhpczowKTtUPFU/VD1VOlQ+QiYmKFQ9Qil9cmV0dXJue1tSXTpFLFt3XTpUfX19fSxIVD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30pLHtuYW1lOiJzaXplIixvcHRpb25zOmEsYXN5bmMgZm4obyl7Y29uc3R7cGxhY2VtZW50OnUscmVjdHM6aSxwbGF0Zm9ybTpzLGVsZW1lbnRzOmZ9PW8se2FwcGx5OmQ9KCk9Pnt9LC4uLnB9PWFsKGEsbykseT1hd2FpdCBzLmRldGVjdE92ZXJmbG93KG8scCksYj1NbCh1KSx4PSRhKHUpLGc9VW4odSk9PT0ieSIse3dpZHRoOkMsaGVpZ2h0Ond9PWkuZmxvYXRpbmc7bGV0IFIsRTtiPT09InRvcCJ8fGI9PT0iYm90dG9tIj8oUj1iLEU9eD09PShhd2FpdChzLmlzUlRMPT1udWxsP3ZvaWQgMDpzLmlzUlRMKGYuZmxvYXRpbmcpKT8ic3RhcnQiOiJlbmQiKT8ibGVmdCI6InJpZ2h0Iik6KEU9YixSPXg9PT0iZW5kIj8idG9wIjoiYm90dG9tIik7Y29uc3QgVD13LXkudG9wLXkuYm90dG9tLE89Qy15LmxlZnQteS5yaWdodCxBPWpsKHcteVtSXSxUKSxOPWpsKEMteVtFXSxPKSxNPW8ubWlkZGxld2FyZURhdGEuc2hpZnQsWT0hTTtsZXQgSD1BLFU9TjtNIT1udWxsJiZNLmVuYWJsZWQueCYmKFU9TyksTSE9bnVsbCYmTS5lbmFibGVkLnkmJihIPVQpLFkmJiF4JiYoZz9VPUMtMipubCh5LmxlZnQseS5yaWdodCk6SD13LTIqbmwoeS50b3AseS5ib3R0b20pKSxhd2FpdCBkKHsuLi5vLGF2YWlsYWJsZVdpZHRoOlUsYXZhaWxhYmxlSGVpZ2h0Okh9KTtjb25zdCBCPWF3YWl0IHMuZ2V0RGltZW5zaW9ucyhmLmZsb2F0aW5nKTtyZXR1cm4gQyE9PUIud2lkdGh8fHchPT1CLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fX07ZnVuY3Rpb24gUmkoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9ZnVuY3Rpb24gSmEoYSl7cmV0dXJuIHV2KGEpPyhhLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKToiI2RvY3VtZW50In1mdW5jdGlvbiBHdChhKXt2YXIgbztyZXR1cm4oYT09bnVsbHx8KG89YS5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6by5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBvbChhKXt2YXIgbztyZXR1cm4obz0odXYoYSk/YS5vd25lckRvY3VtZW50OmEuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpvLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiB1dihhKXtyZXR1cm4gUmkoKT9hIGluc3RhbmNlb2YgTm9kZXx8YSBpbnN0YW5jZW9mIEd0KGEpLk5vZGU6ITF9ZnVuY3Rpb24gSG4oYSl7cmV0dXJuIFJpKCk/YSBpbnN0YW5jZW9mIEVsZW1lbnR8fGEgaW5zdGFuY2VvZiBHdChhKS5FbGVtZW50OiExfWZ1bmN0aW9uIHpsKGEpe3JldHVybiBSaSgpP2EgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8YSBpbnN0YW5jZW9mIEd0KGEpLkhUTUxFbGVtZW50OiExfWZ1bmN0aW9uIHN2KGEpe3JldHVybiFSaSgpfHx0eXBlb2YgU2hhZG93Um9vdD4idSI/ITE6YSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGEgaW5zdGFuY2VvZiBHdChhKS5TaGFkb3dSb290fWZ1bmN0aW9uIF9pKGEpe2NvbnN0e292ZXJmbG93Om8sb3ZlcmZsb3dYOnUsb3ZlcmZsb3dZOmksZGlzcGxheTpzfT1CbihhKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvK2krdSkmJnMhPT0iaW5saW5lIiYmcyE9PSJjb250ZW50cyJ9ZnVuY3Rpb24gQlQoYSl7cmV0dXJuL14odGFibGV8dGR8dGgpJC8udGVzdChKYShhKSl9ZnVuY3Rpb24gT2koYSl7dHJ5e2lmKGEubWF0Y2hlcygiOnBvcG92ZXItb3BlbiIpKXJldHVybiEwfWNhdGNoe310cnl7cmV0dXJuIGEubWF0Y2hlcygiOm1vZGFsIil9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IElUPS90cmFuc2Zvcm18dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxwZXJzcGVjdGl2ZXxmaWx0ZXIvLFBUPS9wYWludHxsYXlvdXR8c3RyaWN0fGNvbnRlbnQvLHZhPWE9PiEhYSYmYSE9PSJub25lIjtsZXQgZ3M7ZnVuY3Rpb24geXMoYSl7Y29uc3Qgbz1IbihhKT9CbihhKTphO3JldHVybiB2YShvLnRyYW5zZm9ybSl8fHZhKG8udHJhbnNsYXRlKXx8dmEoby5zY2FsZSl8fHZhKG8ucm90YXRlKXx8dmEoby5wZXJzcGVjdGl2ZSl8fCFicygpJiYodmEoby5iYWNrZHJvcEZpbHRlcil8fHZhKG8uZmlsdGVyKSl8fElULnRlc3Qoby53aWxsQ2hhbmdlfHwiIil8fFBULnRlc3Qoby5jb250YWlufHwiIil9ZnVuY3Rpb24gR1QoYSl7bGV0IG89Z2EoYSk7Zm9yKDt6bChvKSYmIWlyKG8pOyl7aWYoeXMobykpcmV0dXJuIG87aWYoT2kobykpcmV0dXJuIG51bGw7bz1nYShvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBicygpe3JldHVybiBncz09bnVsbCYmKGdzPXR5cGVvZiBDU1M8InUiJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiLCJub25lIikpLGdzfWZ1bmN0aW9uIGlyKGEpe3JldHVybi9eKGh0bWx8Ym9keXwjZG9jdW1lbnQpJC8udGVzdChKYShhKSl9ZnVuY3Rpb24gQm4oYSl7cmV0dXJuIEd0KGEpLmdldENvbXB1dGVkU3R5bGUoYSl9ZnVuY3Rpb24gQWkoYSl7cmV0dXJuIEhuKGEpP3tzY3JvbGxMZWZ0OmEuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6YS5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OmEuc2Nyb2xsWCxzY3JvbGxUb3A6YS5zY3JvbGxZfX1mdW5jdGlvbiBnYShhKXtpZihKYShhKT09PSJodG1sIilyZXR1cm4gYTtjb25zdCBvPWEuYXNzaWduZWRTbG90fHxhLnBhcmVudE5vZGV8fHN2KGEpJiZhLmhvc3R8fG9sKGEpO3JldHVybiBzdihvKT9vLmhvc3Q6b31mdW5jdGlvbiBmdihhKXtjb25zdCBvPWdhKGEpO3JldHVybiBpcihvKT8oYS5vd25lckRvY3VtZW50fHxhKS5ib2R5OnpsKG8pJiZfaShvKT9vOmZ2KG8pfWZ1bmN0aW9uIGNyKGEsbyx1KXt2YXIgaTtvPT09dm9pZCAwJiYobz1bXSksdT09PXZvaWQgMCYmKHU9ITApO2NvbnN0IHM9ZnYoYSksZj1zPT09KChpPWEub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOmkuYm9keSksZD1HdChzKTtpZihmKXtjb25zdCBwPXhzKGQpO3JldHVybiBvLmNvbmNhdChkLGQudmlzdWFsVmlld3BvcnR8fFtdLF9pKHMpP3M6W10scCYmdT9jcihwKTpbXSl9ZWxzZSByZXR1cm4gby5jb25jYXQocyxjcihzLFtdLHUpKX1mdW5jdGlvbiB4cyhhKXtyZXR1cm4gYS5wYXJlbnQmJk9iamVjdC5nZXRQcm90b3R5cGVPZihhLnBhcmVudCk/YS5mcmFtZUVsZW1lbnQ6bnVsbH1mdW5jdGlvbiBkdihhKXtjb25zdCBvPUJuKGEpO2xldCB1PXBhcnNlRmxvYXQoby53aWR0aCl8fDAsaT1wYXJzZUZsb2F0KG8uaGVpZ2h0KXx8MDtjb25zdCBzPXpsKGEpLGY9cz9hLm9mZnNldFdpZHRoOnUsZD1zP2Eub2Zmc2V0SGVpZ2h0OmkscD1DaSh1KSE9PWZ8fENpKGkpIT09ZDtyZXR1cm4gcCYmKHU9ZixpPWQpLHt3aWR0aDp1LGhlaWdodDppLCQ6cH19ZnVuY3Rpb24gU3MoYSl7cmV0dXJuIEhuKGEpP2E6YS5jb250ZXh0RWxlbWVudH1mdW5jdGlvbiBXYShhKXtjb25zdCBvPVNzKGEpO2lmKCF6bChvKSlyZXR1cm4gbGwoMSk7Y29uc3QgdT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDppLGhlaWdodDpzLCQ6Zn09ZHYobyk7bGV0IGQ9KGY/Q2kodS53aWR0aCk6dS53aWR0aCkvaSxwPShmP0NpKHUuaGVpZ2h0KTp1LmhlaWdodCkvcztyZXR1cm4oIWR8fCFOdW1iZXIuaXNGaW5pdGUoZCkpJiYoZD0xKSwoIXB8fCFOdW1iZXIuaXNGaW5pdGUocCkpJiYocD0xKSx7eDpkLHk6cH19Y29uc3QgVlQ9bGwoMCk7ZnVuY3Rpb24gbXYoYSl7Y29uc3Qgbz1HdChhKTtyZXR1cm4hYnMoKXx8IW8udmlzdWFsVmlld3BvcnQ/VlQ6e3g6by52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6by52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIFlUKGEsbyx1KXtyZXR1cm4gbz09PXZvaWQgMCYmKG89ITEpLCEhdSYmbyYmdT09PUd0KGEpfWZ1bmN0aW9uIHlhKGEsbyx1LGkpe289PT12b2lkIDAmJihvPSExKSx1PT09dm9pZCAwJiYodT0hMSk7Y29uc3Qgcz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9U3MoYSk7bGV0IGQ9bGwoMSk7byYmKGk/SG4oaSkmJihkPVdhKGkpKTpkPVdhKGEpKTtjb25zdCBwPVlUKGYsdSxpKT9tdihmKTpsbCgwKTtsZXQgeT0ocy5sZWZ0K3AueCkvZC54LGI9KHMudG9wK3AueSkvZC55LHg9cy53aWR0aC9kLngsZz1zLmhlaWdodC9kLnk7aWYoZiYmaSl7Y29uc3QgQz1HdChmKSx3PUhuKGkpP0d0KGkpOmk7bGV0IFI9QyxFPXhzKFIpO2Zvcig7RSYmdyE9PVI7KXtjb25zdCBUPVdhKEUpLE89RS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBPUJuKEUpLE49Ty5sZWZ0KyhFLmNsaWVudExlZnQrcGFyc2VGbG9hdChBLnBhZGRpbmdMZWZ0KSkqVC54LE09Ty50b3ArKEUuY2xpZW50VG9wK3BhcnNlRmxvYXQoQS5wYWRkaW5nVG9wKSkqVC55O3kqPVQueCxiKj1ULnkseCo9VC54LGcqPVQueSx5Kz1OLGIrPU0sUj1HdChFKSxFPXhzKFIpfX1yZXR1cm4gRWkoe3dpZHRoOngsaGVpZ2h0OmcseDp5LHk6Yn0pfWZ1bmN0aW9uIE5pKGEsbyl7Y29uc3QgdT1BaShhKS5zY3JvbGxMZWZ0O3JldHVybiBvP28ubGVmdCt1OnlhKG9sKGEpKS5sZWZ0K3V9ZnVuY3Rpb24gaHYoYSxvKXtjb25zdCB1PWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT11LmxlZnQrby5zY3JvbGxMZWZ0LU5pKGEsdSkscz11LnRvcCtvLnNjcm9sbFRvcDtyZXR1cm57eDppLHk6c319ZnVuY3Rpb24gcVQoYSl7bGV0e2VsZW1lbnRzOm8scmVjdDp1LG9mZnNldFBhcmVudDppLHN0cmF0ZWd5OnN9PWE7Y29uc3QgZj1zPT09ImZpeGVkIixkPW9sKGkpLHA9bz9PaShvLmZsb2F0aW5nKTohMTtpZihpPT09ZHx8cCYmZilyZXR1cm4gdTtsZXQgeT17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxiPWxsKDEpO2NvbnN0IHg9bGwoMCksZz16bChpKTtpZigoZ3x8IWYpJiYoKEphKGkpIT09ImJvZHkifHxfaShkKSkmJih5PUFpKGkpKSxnKSl7Y29uc3Qgdz15YShpKTtiPVdhKGkpLHgueD13LngraS5jbGllbnRMZWZ0LHgueT13LnkraS5jbGllbnRUb3B9Y29uc3QgQz1kJiYhZyYmIWY/aHYoZCx5KTpsbCgwKTtyZXR1cm57d2lkdGg6dS53aWR0aCpiLngsaGVpZ2h0OnUuaGVpZ2h0KmIueSx4OnUueCpiLngteS5zY3JvbGxMZWZ0KmIueCt4LngrQy54LHk6dS55KmIueS15LnNjcm9sbFRvcCpiLnkreC55K0MueX19ZnVuY3Rpb24gWFQoYSl7cmV0dXJuIGEuZ2V0Q2xpZW50UmVjdHM/QXJyYXkuZnJvbShhLmdldENsaWVudFJlY3RzKCkpOltdfWZ1bmN0aW9uIEtUKGEpe2NvbnN0IG89QWkoYSksdT1hLm93bmVyRG9jdW1lbnQuYm9keSxpPW5sKGEuc2Nyb2xsV2lkdGgsYS5jbGllbnRXaWR0aCx1LnNjcm9sbFdpZHRoLHUuY2xpZW50V2lkdGgpLHM9bmwoYS5zY3JvbGxIZWlnaHQsYS5jbGllbnRIZWlnaHQsdS5zY3JvbGxIZWlnaHQsdS5jbGllbnRIZWlnaHQpO2xldCBmPS1vLnNjcm9sbExlZnQrTmkoYSk7Y29uc3QgZD0tby5zY3JvbGxUb3A7cmV0dXJuIEJuKHUpLmRpcmVjdGlvbj09PSJydGwiJiYoZis9bmwoYS5jbGllbnRXaWR0aCx1LmNsaWVudFdpZHRoKS1pKSx7d2lkdGg6aSxoZWlnaHQ6cyx4OmYseTpkfX1jb25zdCBRVD0yNTtmdW5jdGlvbiBaVChhLG8sdSl7dT09PXZvaWQgMCYmKHU9InZpZXdwb3J0Iik7Y29uc3QgaT11PT09ImxheW91dFZpZXdwb3J0IixzPUd0KGEpLGY9b2woYSksZD1zLnZpc3VhbFZpZXdwb3J0O2xldCBwPWYuY2xpZW50V2lkdGgseT1mLmNsaWVudEhlaWdodCxiPTAseD0wO2lmKGQpe2NvbnN0IEM9IWJzKCl8fG89PT0iZml4ZWQiO2k/Q3x8KGI9LWQub2Zmc2V0TGVmdCx4PS1kLm9mZnNldFRvcCk6KHA9ZC53aWR0aCx5PWQuaGVpZ2h0LEMmJihiPWQub2Zmc2V0TGVmdCx4PWQub2Zmc2V0VG9wKSl9aWYoTmkoZik8PTApe2NvbnN0IEM9Zi5vd25lckRvY3VtZW50LHc9Qy5ib2R5LFI9Z2V0Q29tcHV0ZWRTdHlsZSh3KSxFPUMuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmcGFyc2VGbG9hdChSLm1hcmdpbkxlZnQpK3BhcnNlRmxvYXQoUi5tYXJnaW5SaWdodCl8fDAsVD1NYXRoLmFicyhmLmNsaWVudFdpZHRoLXcuY2xpZW50V2lkdGgtRSksTz1nZXRDb21wdXRlZFN0eWxlKGYpLnNjcm9sbGJhckd1dHRlcj09PSJzdGFibGUgYm90aC1lZGdlcyI/VC8yOlQ7Tzw9UVQmJihwLT1PKX1yZXR1cm57d2lkdGg6cCxoZWlnaHQ6eSx4OmIseTp4fX1mdW5jdGlvbiBGVChhLG8pe2NvbnN0IHU9eWEoYSwhMCxvPT09ImZpeGVkIiksaT11LnRvcCthLmNsaWVudFRvcCxzPXUubGVmdCthLmNsaWVudExlZnQsZj1XYShhKSxkPWEuY2xpZW50V2lkdGgqZi54LHA9YS5jbGllbnRIZWlnaHQqZi55LHk9cypmLngsYj1pKmYueTtyZXR1cm57d2lkdGg6ZCxoZWlnaHQ6cCx4OnkseTpifX1mdW5jdGlvbiBwdihhLG8sdSl7bGV0IGk7aWYobz09PSJ2aWV3cG9ydCJ8fG89PT0ibGF5b3V0Vmlld3BvcnQiKWk9WlQoYSx1LG8pO2Vsc2UgaWYobz09PSJkb2N1bWVudCIpaT1LVChvbChhKSk7ZWxzZSBpZihIbihvKSlpPUZUKG8sdSk7ZWxzZXtjb25zdCBzPW12KGEpO2k9e3g6by54LXMueCx5Om8ueS1zLnksd2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9fXJldHVybiBFaShpKX1mdW5jdGlvbiAkVChhLG8pe2NvbnN0IHU9by5nZXQoYSk7aWYodSlyZXR1cm4gdTtsZXQgaT1jcihhLFtdLCExKS5maWx0ZXIocD0+SG4ocCkmJkphKHApIT09ImJvZHkiKSxzPW51bGw7Y29uc3QgZj1CbihhKS5wb3NpdGlvbj09PSJmaXhlZCI7bGV0IGQ9Zj9nYShhKTphO2Zvcig7SG4oZCkmJiFpcihkKTspe2NvbnN0IHA9Qm4oZCkseT15cyhkKSxiPXM/cy5wb3NpdGlvbjpmPyJmaXhlZCI6IiI7IXkmJihiPT09ImZpeGVkInx8Yj09PSJhYnNvbHV0ZSImJnAucG9zaXRpb249PT0ic3RhdGljIik/aT1pLmZpbHRlcihnPT5nIT09ZCk6cz1wLGQ9Z2EoZCl9cmV0dXJuIG8uc2V0KGEsaSksaX1mdW5jdGlvbiBKVChhKXtsZXR7ZWxlbWVudDpvLGJvdW5kYXJ5OnUscm9vdEJvdW5kYXJ5Omksc3RyYXRlZ3k6c309YTtjb25zdCBkPVsuLi51PT09ImNsaXBwaW5nQW5jZXN0b3JzIj9PaShvKT9bXTokVChvLHRoaXMuX2MpOltdLmNvbmNhdCh1KSxpXSxwPXB2KG8sZFswXSxzKTtsZXQgeT1wLnRvcCxiPXAucmlnaHQseD1wLmJvdHRvbSxnPXAubGVmdDtmb3IobGV0IEM9MTtDPGQubGVuZ3RoO0MrKyl7Y29uc3Qgdz1wdihvLGRbQ10scyk7eT1ubCh3LnRvcCx5KSxiPWpsKHcucmlnaHQsYikseD1qbCh3LmJvdHRvbSx4KSxnPW5sKHcubGVmdCxnKX1yZXR1cm57d2lkdGg6Yi1nLGhlaWdodDp4LXkseDpnLHl9fWZ1bmN0aW9uIFdUKGEpe2NvbnN0e3dpZHRoOm8saGVpZ2h0OnV9PWR2KGEpO3JldHVybnt3aWR0aDpvLGhlaWdodDp1fX1mdW5jdGlvbiBldyhhLG8sdSl7Y29uc3QgaT16bChvKSxzPW9sKG8pLGY9dT09PSJmaXhlZCIsZD15YShhLCEwLGYsbyk7bGV0IHA9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH07Y29uc3QgeT1sbCgwKTtpZigoaXx8IWYpJiYoKEphKG8pIT09ImJvZHkifHxfaShzKSkmJihwPUFpKG8pKSxpKSl7Y29uc3QgQz15YShvLCEwLGYsbyk7eS54PUMueCtvLmNsaWVudExlZnQseS55PUMueStvLmNsaWVudFRvcH0haSYmcyYmKHkueD1OaShzKSk7Y29uc3QgYj1zJiYhaSYmIWY/aHYocyxwKTpsbCgwKSx4PWQubGVmdCtwLnNjcm9sbExlZnQteS54LWIueCxnPWQudG9wK3Auc2Nyb2xsVG9wLXkueS1iLnk7cmV0dXJue3gseTpnLHdpZHRoOmQud2lkdGgsaGVpZ2h0OmQuaGVpZ2h0fX1mdW5jdGlvbiBDcyhhKXtyZXR1cm4gQm4oYSkucG9zaXRpb249PT0ic3RhdGljIn1mdW5jdGlvbiB2dihhLG8pe2lmKCF6bChhKXx8Qm4oYSkucG9zaXRpb249PT0iZml4ZWQiKXJldHVybiBudWxsO2lmKG8pcmV0dXJuIG8oYSk7bGV0IHU9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIG9sKGEpPT09dSYmKHU9dS5vd25lckRvY3VtZW50LmJvZHkpLHV9ZnVuY3Rpb24gZ3YoYSxvKXtjb25zdCB1PUd0KGEpO2lmKE9pKGEpKXJldHVybiB1O2lmKCF6bChhKSl7bGV0IHM9Z2EoYSk7Zm9yKDtzJiYhaXIocyk7KXtpZihIbihzKSYmIUNzKHMpKXJldHVybiBzO3M9Z2Eocyl9cmV0dXJuIHV9bGV0IGk9dnYoYSxvKTtmb3IoO2kmJkJUKGkpJiZDcyhpKTspaT12dihpLG8pO3JldHVybiBpJiZpcihpKSYmQ3MoaSkmJiF5cyhpKT91Oml8fEdUKGEpfHx1fWNvbnN0IHR3PWFzeW5jIGZ1bmN0aW9uKGEpe2NvbnN0IG89dGhpcy5nZXRPZmZzZXRQYXJlbnR8fGd2LHU9dGhpcy5nZXREaW1lbnNpb25zLGk9YXdhaXQgdShhLmZsb2F0aW5nKTtyZXR1cm57cmVmZXJlbmNlOmV3KGEucmVmZXJlbmNlLGF3YWl0IG8oYS5mbG9hdGluZyksYS5zdHJhdGVneSksZmxvYXRpbmc6e3g6MCx5OjAsd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fX07ZnVuY3Rpb24gbncoYSl7cmV0dXJuIEJuKGEpLmRpcmVjdGlvbj09PSJydGwifWNvbnN0IGx3PXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpxVCxnZXREb2N1bWVudEVsZW1lbnQ6b2wsZ2V0Q2xpcHBpbmdSZWN0OkpULGdldE9mZnNldFBhcmVudDpndixnZXRFbGVtZW50UmVjdHM6dHcsZ2V0Q2xpZW50UmVjdHM6WFQsZ2V0RGltZW5zaW9uczpXVCxnZXRTY2FsZTpXYSxpc0VsZW1lbnQ6SG4saXNSVEw6bnd9O2Z1bmN0aW9uIHl2KGEsbyl7cmV0dXJuIGEueD09PW8ueCYmYS55PT09by55JiZhLndpZHRoPT09by53aWR0aCYmYS5oZWlnaHQ9PT1vLmhlaWdodH1mdW5jdGlvbiBhdyhhLG8sdSl7bGV0IGk9bnVsbCxzO2NvbnN0IGY9b2woYSk7ZnVuY3Rpb24gZCgpe3ZhciB4O2NsZWFyVGltZW91dChzKSwoeD1pKT09bnVsbHx8eC5kaXNjb25uZWN0KCksaT1udWxsfWZ1bmN0aW9uIHAoeCxnKXt4PT09dm9pZCAwJiYoeD0hMSksZz09PXZvaWQgMCYmKGc9MSksZCgpO2NvbnN0IEM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7bGVmdDp3LHRvcDpSLHdpZHRoOkUsaGVpZ2h0OlR9PUM7aWYoeHx8bygpLCFFfHwhVClyZXR1cm47Y29uc3QgTz1UaShSKSxBPVRpKGYuY2xpZW50V2lkdGgtKHcrRSkpLE49VGkoZi5jbGllbnRIZWlnaHQtKFIrVCkpLE09VGkodyksSD17cm9vdE1hcmdpbjotTysicHggIistQSsicHggIistTisicHggIistTSsicHgiLHRocmVzaG9sZDpubCgwLGpsKDEsZykpfHwxfTtsZXQgVT0hMDtmdW5jdGlvbiBCKEope2NvbnN0IFc9SlswXS5pbnRlcnNlY3Rpb25SYXRpbztpZigheXYoQyxhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSlyZXR1cm4gcCgpO2lmKFchPT1nKXtpZighVSlyZXR1cm4gcCgpO1c/cCghMSxXKTpzPXNldFRpbWVvdXQoKCk9PntwKCExLDFlLTcpfSwxZTMpfVU9ITF9dHJ5e2k9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKEIsey4uLkgscm9vdDpmLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtpPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihCLEgpfWkub2JzZXJ2ZShhKX1jb25zdCB5PUd0KGEpLGI9KCk9PnAodSk7cmV0dXJuIHkuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixiKSxwKCEwKSwoKT0+e3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixiKSxkKCl9fWZ1bmN0aW9uIG93KGEsbyx1LGkpe2k9PT12b2lkIDAmJihpPXt9KTtjb25zdHthbmNlc3RvclNjcm9sbDpzPSEwLGFuY2VzdG9yUmVzaXplOmY9ITAsZWxlbWVudFJlc2l6ZTpkPXR5cGVvZiBSZXNpemVPYnNlcnZlcj09ImZ1bmN0aW9uIixsYXlvdXRTaGlmdDpwPXR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcj09ImZ1bmN0aW9uIixhbmltYXRpb25GcmFtZTp5PSExfT1pLGI9U3MoYSkseD1zfHxmP1suLi5iP2NyKGIpOltdLC4uLm8/Y3Iobyk6W11dOltdO3guZm9yRWFjaChPPT57cyYmTy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHUpLGYmJk8uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix1KX0pO2NvbnN0IGc9YiYmcD9hdyhiLHUsZik6bnVsbDtsZXQgQz0tMSx3PW51bGw7ZCYmKHc9bmV3IFJlc2l6ZU9ic2VydmVyKE89PntsZXRbQV09TztBJiZBLnRhcmdldD09PWImJncmJm8mJih3LnVub2JzZXJ2ZShvKSxjYW5jZWxBbmltYXRpb25GcmFtZShDKSxDPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ZhciBOOyhOPXcpPT1udWxsfHxOLm9ic2VydmUobyl9KSksdSgpfSksYiYmIXkmJncub2JzZXJ2ZShiKSxvJiZ3Lm9ic2VydmUobykpO2xldCBSLEU9eT95YShhKTpudWxsO3kmJlQoKTtmdW5jdGlvbiBUKCl7Y29uc3QgTz15YShhKTtFJiYheXYoRSxPKSYmdSgpLEU9TyxSPXJlcXVlc3RBbmltYXRpb25GcmFtZShUKX1yZXR1cm4gdSgpLCgpPT57dmFyIE87eC5mb3JFYWNoKEE9PntzJiZBLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdSksZiYmQS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHUpfSksZz8uKCksKE89dyk9PW51bGx8fE8uZGlzY29ubmVjdCgpLHc9bnVsbCx5JiZjYW5jZWxBbmltYXRpb25GcmFtZShSKX19Y29uc3Qgcnc9a1QsaXc9TFQsY3c9alQsdXc9SFQsc3c9TVQsYnY9RFQsZnc9VVQsZHc9KGEsbyx1KT0+e2NvbnN0IGk9bmV3IE1hcCxzPXU/P3t9LGY9ey4uLmx3LC4uLnMucGxhdGZvcm0sX2M6aX07cmV0dXJuIE5UKGEsbyx7Li4ucyxwbGF0Zm9ybTpmfSl9O3ZhciBtdz10eXBlb2YgZG9jdW1lbnQ8InUiLGh3PWZ1bmN0aW9uKCl7fSxEaT1tdz92LnVzZUxheW91dEVmZmVjdDpodztmdW5jdGlvbiBqaShhLG8pe2lmKGE9PT1vKXJldHVybiEwO2lmKHR5cGVvZiBhIT10eXBlb2YgbylyZXR1cm4hMTtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIiYmYS50b1N0cmluZygpPT09by50b1N0cmluZygpKXJldHVybiEwO2xldCB1LGkscztpZihhJiZvJiZ0eXBlb2YgYT09Im9iamVjdCIpe2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKHU9YS5sZW5ndGgsdSE9PW8ubGVuZ3RoKXJldHVybiExO2ZvcihpPXU7aS0tIT09MDspaWYoIWppKGFbaV0sb1tpXSkpcmV0dXJuITE7cmV0dXJuITB9aWYocz1PYmplY3Qua2V5cyhhKSx1PXMubGVuZ3RoLHUhPT1PYmplY3Qua2V5cyhvKS5sZW5ndGgpcmV0dXJuITE7Zm9yKGk9dTtpLS0hPT0wOylpZighe30uaGFzT3duUHJvcGVydHkuY2FsbChvLHNbaV0pKXJldHVybiExO2ZvcihpPXU7aS0tIT09MDspe2NvbnN0IGY9c1tpXTtpZighKGY9PT0iX293bmVyIiYmYS4kJHR5cGVvZikmJiFqaShhW2ZdLG9bZl0pKXJldHVybiExfXJldHVybiEwfXJldHVybiBhIT09YSYmbyE9PW99ZnVuY3Rpb24geHYoYSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiPzE6KGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIFN2KGEsbyl7Y29uc3QgdT14dihhKTtyZXR1cm4gTWF0aC5yb3VuZChvKnUpL3V9ZnVuY3Rpb24gVHMoYSl7Y29uc3Qgbz12LnVzZVJlZihhKTtyZXR1cm4gRGkoKCk9PntvLmN1cnJlbnQ9YX0pLG99ZnVuY3Rpb24gcHcoYSl7YT09PXZvaWQgMCYmKGE9e30pO2NvbnN0e3BsYWNlbWVudDpvPSJib3R0b20iLHN0cmF0ZWd5OnU9ImFic29sdXRlIixtaWRkbGV3YXJlOmk9W10scGxhdGZvcm06cyxlbGVtZW50czp7cmVmZXJlbmNlOmYsZmxvYXRpbmc6ZH09e30sdHJhbnNmb3JtOnA9ITAsd2hpbGVFbGVtZW50c01vdW50ZWQ6eSxvcGVuOmJ9PWEsW3gsZ109di51c2VTdGF0ZSh7eDowLHk6MCxzdHJhdGVneTp1LHBsYWNlbWVudDpvLG1pZGRsZXdhcmVEYXRhOnt9LGlzUG9zaXRpb25lZDohMX0pLFtDLHddPXYudXNlU3RhdGUoaSk7amkoQyxpKXx8dyhpKTtjb25zdFtSLEVdPXYudXNlU3RhdGUobnVsbCksW1QsT109di51c2VTdGF0ZShudWxsKSxBPXYudXNlQ2FsbGJhY2soRj0+e0YhPT1ILmN1cnJlbnQmJihILmN1cnJlbnQ9RixFKEYpKX0sW10pLE49di51c2VDYWxsYmFjayhGPT57RiE9PVUuY3VycmVudCYmKFUuY3VycmVudD1GLE8oRikpfSxbXSksTT1mfHxSLFk9ZHx8VCxIPXYudXNlUmVmKG51bGwpLFU9di51c2VSZWYobnVsbCksQj12LnVzZVJlZih4KSxKPXkhPW51bGwsVz1Ucyh5KSxuZT1UcyhzKSxlZT1UcyhiKSxjZT12LnVzZUNhbGxiYWNrKCgpPT57aWYoIUguY3VycmVudHx8IVUuY3VycmVudClyZXR1cm47Y29uc3QgRj17cGxhY2VtZW50Om8sc3RyYXRlZ3k6dSxtaWRkbGV3YXJlOkN9O25lLmN1cnJlbnQmJihGLnBsYXRmb3JtPW5lLmN1cnJlbnQpLGR3KEguY3VycmVudCxVLmN1cnJlbnQsRikudGhlbihyZT0+e2NvbnN0IHE9ey4uLnJlLGlzUG9zaXRpb25lZDplZS5jdXJyZW50IT09ITF9O21lLmN1cnJlbnQmJiFqaShCLmN1cnJlbnQscSkmJihCLmN1cnJlbnQ9cSxaYS5mbHVzaFN5bmMoKCk9PntnKHEpfSkpfSl9LFtDLG8sdSxuZSxlZV0pO0RpKCgpPT57Yj09PSExJiZCLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoQi5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxnKEY9Pih7Li4uRixpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbYl0pO2NvbnN0IG1lPXYudXNlUmVmKCExKTtEaSgoKT0+KG1lLmN1cnJlbnQ9ITAsKCk9PnttZS5jdXJyZW50PSExfSksW10pLERpKCgpPT57aWYoTSYmKEguY3VycmVudD1NKSxZJiYoVS5jdXJyZW50PVkpLE0mJlkpe2lmKFcuY3VycmVudClyZXR1cm4gVy5jdXJyZW50KE0sWSxjZSk7Y2UoKX19LFtNLFksY2UsVyxKXSk7Y29uc3QgaGU9di51c2VNZW1vKCgpPT4oe3JlZmVyZW5jZTpILGZsb2F0aW5nOlUsc2V0UmVmZXJlbmNlOkEsc2V0RmxvYXRpbmc6Tn0pLFtBLE5dKSxQPXYudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6TSxmbG9hdGluZzpZfSksW00sWV0pLCQ9di51c2VNZW1vKCgpPT57Y29uc3QgRj17cG9zaXRpb246dSxsZWZ0OjAsdG9wOjB9O2lmKCFQLmZsb2F0aW5nKXJldHVybiBGO2NvbnN0IHJlPVN2KFAuZmxvYXRpbmcseC54KSxxPVN2KFAuZmxvYXRpbmcseC55KTtyZXR1cm4gcD97Li4uRix0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK3JlKyJweCwgIitxKyJweCkiLC4uLnh2KFAuZmxvYXRpbmcpPj0xLjUmJnt3aWxsQ2hhbmdlOiJ0cmFuc2Zvcm0ifX06e3Bvc2l0aW9uOnUsbGVmdDpyZSx0b3A6cX19LFt1LHAsUC5mbG9hdGluZyx4LngseC55XSk7cmV0dXJuIHYudXNlTWVtbygoKT0+KHsuLi54LHVwZGF0ZTpjZSxyZWZzOmhlLGVsZW1lbnRzOlAsZmxvYXRpbmdTdHlsZXM6JH0pLFt4LGNlLGhlLFAsJF0pfWNvbnN0IHZ3PWE9PntmdW5jdGlvbiBvKHUpe3JldHVybnt9Lmhhc093blByb3BlcnR5LmNhbGwodSwiY3VycmVudCIpfXJldHVybntuYW1lOiJhcnJvdyIsb3B0aW9uczphLGZuKHUpe2NvbnN0e2VsZW1lbnQ6aSxwYWRkaW5nOnN9PXR5cGVvZiBhPT0iZnVuY3Rpb24iP2EodSk6YTtyZXR1cm4gaSYmbyhpKT9pLmN1cnJlbnQhPW51bGw/YnYoe2VsZW1lbnQ6aS5jdXJyZW50LHBhZGRpbmc6c30pLmZuKHUpOnt9Omk/YnYoe2VsZW1lbnQ6aSxwYWRkaW5nOnN9KS5mbih1KTp7fX19fSxndz0oYSxvKT0+e2NvbnN0IHU9cncoYSk7cmV0dXJue25hbWU6dS5uYW1lLGZuOnUuZm4sb3B0aW9uczpbYSxvXX19LHl3PShhLG8pPT57Y29uc3QgdT1pdyhhKTtyZXR1cm57bmFtZTp1Lm5hbWUsZm46dS5mbixvcHRpb25zOlthLG9dfX0sYnc9KGEsbyk9Pih7Zm46ZncoYSkuZm4sb3B0aW9uczpbYSxvXX0pLHh3PShhLG8pPT57Y29uc3QgdT1jdyhhKTtyZXR1cm57bmFtZTp1Lm5hbWUsZm46dS5mbixvcHRpb25zOlthLG9dfX0sU3c9KGEsbyk9Pntjb25zdCB1PXV3KGEpO3JldHVybntuYW1lOnUubmFtZSxmbjp1LmZuLG9wdGlvbnM6W2Esb119fSxDdz0oYSxvKT0+e2NvbnN0IHU9c3coYSk7cmV0dXJue25hbWU6dS5uYW1lLGZuOnUuZm4sb3B0aW9uczpbYSxvXX19LFR3PShhLG8pPT57Y29uc3QgdT12dyhhKTtyZXR1cm57bmFtZTp1Lm5hbWUsZm46dS5mbixvcHRpb25zOlthLG9dfX07dmFyIHd3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxFdz0oYSxvKT0+d3coYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksUnc9di5mb3J3YXJkUmVmKEV3KGZ1bmN0aW9uKG8sdSl7Y29uc3R7Y2hpbGRyZW46aSx3aWR0aDpzPTEwLGhlaWdodDpmPTUsLi4uZH09bztyZXR1cm4gbS5qc3goQ2Uuc3ZnLHsuLi5kLHJlZjp1LHdpZHRoOnMsaGVpZ2h0OmYsdmlld0JveDoiMCAwIDMwIDEwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjaGlsZHJlbjpvLmFzQ2hpbGQ/aTptLmpzeCgicG9seWdvbiIse3BvaW50czoiMCwwIDMwLDAgMTUsMTAifSl9KX0sIkFycm93IikpLF93PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxPdz0oYSxvKT0+X3coYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gdXIoYSl7Y29uc3Rbbyx1XT12LnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIG50KCgpPT57aWYoYSl7dSh7d2lkdGg6YS5vZmZzZXRXaWR0aCxoZWlnaHQ6YS5vZmZzZXRIZWlnaHR9KTtsZXQgaT0wO2NvbnN0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKGY9PntpZighQXJyYXkuaXNBcnJheShmKXx8IWYubGVuZ3RoKXJldHVybjtjb25zdCBkPWZbMF07d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2xldCBwLHk7aWYoImJvcmRlckJveFNpemUiaW4gZCl7Y29uc3QgYj1kLmJvcmRlckJveFNpemUseD1BcnJheS5pc0FycmF5KGIpP2JbMF06YjtwPXguaW5saW5lU2l6ZSx5PXguYmxvY2tTaXplfWVsc2UgcD1hLm9mZnNldFdpZHRoLHk9YS5vZmZzZXRIZWlnaHQ7dSh7d2lkdGg6cCxoZWlnaHQ6eX0pfSl9KTtyZXR1cm4gcy5vYnNlcnZlKGEse2JveDoiYm9yZGVyLWJveCJ9KSwoKT0+e3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShpKSxzLnVub2JzZXJ2ZShhKX19ZWxzZSB1KHZvaWQgMCl9LFthXSksb31Pdyh1ciwidXNlU2l6ZSIpO3ZhciBBdz1PYmplY3QuZGVmaW5lUHJvcGVydHkscmw9KGEsbyk9PkF3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLEN2PXtQYXJ0aWFsOiJwYXJ0aWFsIn0sVHY9e09wdGltaXplZDoib3B0aW1pemVkIixBbHdheXM6ImFsd2F5cyJ9LHd2PSJQb3BwZXIiLFtFdixlb109TXQod3YpLFtOdyxSdl09RXYod3YpLHdzPXJsKGE9Pntjb25zdHtfX3Njb3BlUG9wcGVyOm8sY2hpbGRyZW46dX09YSxbaSxzXT12LnVzZVN0YXRlKG51bGwpLFtmLGRdPXYudXNlU3RhdGUodm9pZCAwKTtyZXR1cm4gbS5qc3goTncse3Njb3BlOm8sYW5jaG9yOmksb25BbmNob3JDaGFuZ2U6cyxwbGFjZW1lbnRTdGF0ZTpmLHNldFBsYWNlbWVudFN0YXRlOmQsY2hpbGRyZW46dX0pfSwiUG9wcGVyIiksRHc9IlBvcHBlckFuY2hvciIsRXM9di5mb3J3YXJkUmVmKHJsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVBvcHBlcjppLHZpcnR1YWxSZWY6cywuLi5mfT1vLGQ9UnYoRHcsaSkscD12LnVzZVJlZihudWxsKSx5PWQub25BbmNob3JDaGFuZ2UsYj12LnVzZUNhbGxiYWNrKEU9PntwLmN1cnJlbnQ9RSxFJiZ5KEUpfSxbeV0pLHg9RWUodSxiKSxnPXYudXNlUmVmKG51bGwpO3YudXNlRWZmZWN0KCgpPT57aWYoIXMpcmV0dXJuO2NvbnN0IEU9Zy5jdXJyZW50O2cuY3VycmVudD1zLmN1cnJlbnQsRSE9PWcuY3VycmVudCYmeShnLmN1cnJlbnQpfSk7Y29uc3QgQz1kLnBsYWNlbWVudFN0YXRlJiZNaShkLnBsYWNlbWVudFN0YXRlKSx3PUM/LlswXSxSPUM/LlsxXTtyZXR1cm4gcz9udWxsOm0uanN4KENlLmRpdix7ImRhdGEtcmFkaXgtcG9wcGVyLXNpZGUiOncsImRhdGEtcmFkaXgtcG9wcGVyLWFsaWduIjpSLC4uLmYscmVmOnh9KX0sIlBvcHBlckFuY2hvciIpKSxfdj0iUG9wcGVyQ29udGVudCIsW2p3LE13XT1FdihfdiksUnM9di5mb3J3YXJkUmVmKHJsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVBvcHBlcjppLHNpZGU6cz0iYm90dG9tIixzaWRlT2Zmc2V0OmY9MCxhbGlnbjpkPSJjZW50ZXIiLGFsaWduT2Zmc2V0OnA9MCxhcnJvd1BhZGRpbmc6eT0wLGF2b2lkQ29sbGlzaW9uczpiPSEwLGNvbGxpc2lvbkJvdW5kYXJ5Ong9W10sY29sbGlzaW9uUGFkZGluZzpnPTAsc3RpY2t5OkM9Q3YuUGFydGlhbCxoaWRlV2hlbkRldGFjaGVkOnc9ITEsdXBkYXRlUG9zaXRpb25TdHJhdGVneTpSPVR2Lk9wdGltaXplZCxvblBsYWNlZDpFLC4uLlR9PW8sTz1SdihfdixpKSxbQSxOXT12LnVzZVN0YXRlKG51bGwpLE09RWUodSxOKSxbWSxIXT12LnVzZVN0YXRlKG51bGwpLFU9dXIoWSksQj1VPy53aWR0aD8/MCxKPVU/LmhlaWdodD8/MCxXPXMrKGQhPT0iY2VudGVyIj8iLSIrZDoiIiksbmU9dHlwZW9mIGc9PSJudW1iZXIiP2c6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLmd9LGVlPUFycmF5LmlzQXJyYXkoeCk/eDpbeF0sY2U9ZWUubGVuZ3RoPjAsbWU9e3BhZGRpbmc6bmUsYm91bmRhcnk6ZWUuZmlsdGVyKE92KSxhbHRCb3VuZGFyeTpjZX0se3JlZnM6aGUsZmxvYXRpbmdTdHlsZXM6UCxwbGFjZW1lbnQ6JCxpc1Bvc2l0aW9uZWQ6RixtaWRkbGV3YXJlRGF0YTpyZX09cHcoe3N0cmF0ZWd5OiJmaXhlZCIscGxhY2VtZW50Olcsd2hpbGVFbGVtZW50c01vdW50ZWQ6cmwoKC4uLnNlKT0+b3coLi4uc2Use2FuaW1hdGlvbkZyYW1lOlI9PT1Udi5BbHdheXN9KSwid2hpbGVFbGVtZW50c01vdW50ZWQiKSxlbGVtZW50czp7cmVmZXJlbmNlOk8uYW5jaG9yfSxtaWRkbGV3YXJlOltndyh7bWFpbkF4aXM6ZitKLGFsaWdubWVudEF4aXM6cH0pLGImJnl3KHttYWluQXhpczohMCxjcm9zc0F4aXM6ITEsLi4uQz09PUN2LlBhcnRpYWw/e2xpbWl0ZXI6YncoKX06e30sLi4ubWV9KSxiJiZ4dyh7Li4ubWV9KSxTdyh7Li4ubWUsYXBwbHk6cmwoKHtlbGVtZW50czpzZSxyZWN0czpsZSxhdmFpbGFibGVXaWR0aDp0ZSxhdmFpbGFibGVIZWlnaHQ6aWV9KT0+e2NvbnN0e3dpZHRoOmJlLGhlaWdodDp3ZX09bGUucmVmZXJlbmNlLFJlPXNlLmZsb2F0aW5nLnN0eWxlO1JlLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgiLGAke3RlfXB4YCksUmUuc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQiLGAke2llfXB4YCksUmUuc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCIsYCR7YmV9cHhgKSxSZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodCIsYCR7d2V9cHhgKX0sImFwcGx5Iil9KSxZJiZUdyh7ZWxlbWVudDpZLHBhZGRpbmc6eX0pLFV3KHthcnJvd1dpZHRoOkIsYXJyb3dIZWlnaHQ6Sn0pLHcmJkN3KGNlP3tzdHJhdGVneToicmVmZXJlbmNlSGlkZGVuIiwuLi5tZX06e3N0cmF0ZWd5OiJyZWZlcmVuY2VIaWRkZW4iLHBhZGRpbmc6bWUucGFkZGluZyxhbHRCb3VuZGFyeTptZS5hbHRCb3VuZGFyeX0pXX0pLHE9Ty5zZXRQbGFjZW1lbnRTdGF0ZTtudCgoKT0+KHEoJCksKCk9PntxKHZvaWQgMCl9KSxbJCxxXSk7Y29uc3RbeGUsamVdPU1pKCQpLFllPXp0KEUpO250KCgpPT57RiYmWWU/LigpfSxbRixZZV0pO2NvbnN0IEQ9cmUuYXJyb3c/LngsWD1yZS5hcnJvdz8ueSxLPXJlLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wLFthZSx5ZV09di51c2VTdGF0ZSgpO3JldHVybiBudCgoKT0+e0EmJnllKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKEEpLnpJbmRleCl9LFtBXSksbS5qc3goImRpdiIse3JlZjpoZS5zZXRGbG9hdGluZywiZGF0YS1yYWRpeC1wb3BwZXItY29udGVudC13cmFwcGVyIjoiIixzdHlsZTp7Li4uUCx0cmFuc2Zvcm06Rj9QLnRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yMDAlKSIsbWluV2lkdGg6Im1heC1jb250ZW50Iix6SW5kZXg6YWUsIi0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4iOltyZS50cmFuc2Zvcm1PcmlnaW4/LngscmUudHJhbnNmb3JtT3JpZ2luPy55XS5qb2luKCIgIiksLi4ucmUuaGlkZT8ucmVmZXJlbmNlSGlkZGVuJiZ7dmlzaWJpbGl0eToiaGlkZGVuIixwb2ludGVyRXZlbnRzOiJub25lIn19LGRpcjpvLmRpcixjaGlsZHJlbjptLmpzeChqdyx7c2NvcGU6aSxwbGFjZWRTaWRlOnhlLHBsYWNlZEFsaWduOmplLG9uQXJyb3dDaGFuZ2U6SCxhcnJvd1g6RCxhcnJvd1k6WCxzaG91bGRIaWRlQXJyb3c6SyxjaGlsZHJlbjptLmpzeChDZS5kaXYseyJkYXRhLXNpZGUiOnhlLCJkYXRhLWFsaWduIjpqZSwuLi5ULHJlZjpNLHN0eWxlOnsuLi5ULnN0eWxlLGFuaW1hdGlvbjpGP1Quc3R5bGU/LmFuaW1hdGlvbjoibm9uZSJ9fSl9KX0pfSwiUG9wcGVyQ29udGVudCIpKSx6dz0iUG9wcGVyQXJyb3ciLGt3PXt0b3A6ImJvdHRvbSIscmlnaHQ6ImxlZnQiLGJvdHRvbToidG9wIixsZWZ0OiJyaWdodCJ9LEx3PXYuZm9yd2FyZFJlZihybChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVQb3BwZXI6aSwuLi5zfT1vLGY9TXcoencsaSksZD1rd1tmLnBsYWNlZFNpZGVdO3JldHVybiBtLmpzeCgic3BhbiIse3JlZjpmLm9uQXJyb3dDaGFuZ2Usc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpmLmFycm93WCx0b3A6Zi5hcnJvd1ksW2RdOjAsdHJhbnNmb3JtT3JpZ2luOnt0b3A6IiIscmlnaHQ6IjAgMCIsYm90dG9tOiJjZW50ZXIgMCIsbGVmdDoiMTAwJSAwIn1bZi5wbGFjZWRTaWRlXSx0cmFuc2Zvcm06e3RvcDoidHJhbnNsYXRlWSgxMDAlKSIscmlnaHQ6InRyYW5zbGF0ZVkoNTAlKSByb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZVgoLTUwJSkiLGJvdHRvbToicm90YXRlKDE4MGRlZykiLGxlZnQ6InRyYW5zbGF0ZVkoNTAlKSByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGVYKDUwJSkifVtmLnBsYWNlZFNpZGVdLHZpc2liaWxpdHk6Zi5zaG91bGRIaWRlQXJyb3c/ImhpZGRlbiI6dm9pZCAwfSxjaGlsZHJlbjptLmpzeChSdyx7Li4ucyxyZWY6dSxzdHlsZTp7Li4ucy5zdHlsZSxkaXNwbGF5OiJibG9jayJ9fSl9KX0sIlBvcHBlckFycm93IikpO2Z1bmN0aW9uIE92KGEpe3JldHVybiBhIT09bnVsbH1ybChPdiwiaXNOb3ROdWxsIik7dmFyIFV3PXJsKGE9Pih7bmFtZToidHJhbnNmb3JtT3JpZ2luIixvcHRpb25zOmEsZm4obyl7Y29uc3R7cGxhY2VtZW50OnUscmVjdHM6aSxtaWRkbGV3YXJlRGF0YTpzfT1vLGQ9cy5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MCxwPWQ/MDphLmFycm93V2lkdGgseT1kPzA6YS5hcnJvd0hlaWdodCxbYix4XT1NaSh1KSxnPXtzdGFydDoiMCUiLGNlbnRlcjoiNTAlIixlbmQ6IjEwMCUifVt4XSxDPShzLmFycm93Py54Pz8wKStwLzIsdz0ocy5hcnJvdz8ueT8/MCkreS8yO2xldCBSPSIiLEU9IiI7cmV0dXJuIGI9PT0iYm90dG9tIj8oUj1kP2c6YCR7Q31weGAsRT1gJHsteX1weGApOmI9PT0idG9wIj8oUj1kP2c6YCR7Q31weGAsRT1gJHtpLmZsb2F0aW5nLmhlaWdodCt5fXB4YCk6Yj09PSJyaWdodCI/KFI9YCR7LXl9cHhgLEU9ZD9nOmAke3d9cHhgKTpiPT09ImxlZnQiJiYoUj1gJHtpLmZsb2F0aW5nLndpZHRoK3l9cHhgLEU9ZD9nOmAke3d9cHhgKSx7ZGF0YTp7eDpSLHk6RX19fX0pLCJ0cmFuc2Zvcm1PcmlnaW4iKTtmdW5jdGlvbiBNaShhKXtjb25zdFtvLHU9ImNlbnRlciJdPWEuc3BsaXQoIi0iKTtyZXR1cm5bbyx1XX1ybChNaSwiZ2V0U2lkZUFuZEFsaWduRnJvbVBsYWNlbWVudCIpO3ZhciBIdz1PYmplY3QuZGVmaW5lUHJvcGVydHksQnc9KGEsbyk9Pkh3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLHNyPXYuZm9yd2FyZFJlZihCdyhmdW5jdGlvbihvLHUpe2NvbnN0e2NvbnRhaW5lcjppLC4uLnN9PW8sW2YsZF09di51c2VTdGF0ZSghMSk7bnQoKCk9PmQoITApLFtdKTtjb25zdCBwPWl8fGYmJmdsb2JhbFRoaXM/LmRvY3VtZW50Py5ib2R5O3JldHVybiBwP1phLmNyZWF0ZVBvcnRhbChtLmpzeChDZS5kaXYsey4uLnMscmVmOnV9KSxwKTpudWxsfSwiUG9ydGFsIikpLEl3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpbD0oYSxvKT0+SXcoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gQXYoYSxvKXtyZXR1cm4gdi51c2VSZWR1Y2VyKCh1LGkpPT5vW3VdW2ldPz91LGEpfWlsKEF2LCJ1c2VTdGF0ZU1hY2hpbmUiKTt2YXIgbW49aWwoYT0+e2NvbnN0e3ByZXNlbnQ6byxjaGlsZHJlbjp1fT1hLGk9TnYobykscz10eXBlb2YgdT09ImZ1bmN0aW9uIj91KHtwcmVzZW50OmkuaXNQcmVzZW50fSk6di5DaGlsZHJlbi5vbmx5KHUpLGY9RHYoaS5yZWYsanYocykpO3JldHVybiB0eXBlb2YgdT09ImZ1bmN0aW9uInx8aS5pc1ByZXNlbnQ/di5jbG9uZUVsZW1lbnQocyx7cmVmOmZ9KTpudWxsfSwiUHJlc2VuY2UiKTtmdW5jdGlvbiBOdihhKXtjb25zdFtvLHVdPXYudXNlU3RhdGUoKSxpPXYudXNlUmVmKG51bGwpLHM9di51c2VSZWYoYSksZj12LnVzZVJlZigibm9uZSIpLGQ9di51c2VSZWYodm9pZCAwKSxwPWE/Im1vdW50ZWQiOiJ1bm1vdW50ZWQiLFt5LGJdPUF2KHAse21vdW50ZWQ6e1VOTU9VTlQ6InVubW91bnRlZCIsQU5JTUFUSU9OX09VVDoidW5tb3VudFN1c3BlbmRlZCJ9LHVubW91bnRTdXNwZW5kZWQ6e01PVU5UOiJtb3VudGVkIixBTklNQVRJT05fRU5EOiJ1bm1vdW50ZWQifSx1bm1vdW50ZWQ6e01PVU5UOiJtb3VudGVkIn19KTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pnt5PT09Im1vdW50ZWQiPyhmLmN1cnJlbnQ9ZC5jdXJyZW50Pz90byhpLmN1cnJlbnQpLGQuY3VycmVudD12b2lkIDApOmYuY3VycmVudD0ibm9uZSJ9LFt5XSksbnQoKCk9Pntjb25zdCB4PWkuY3VycmVudCxnPXMuY3VycmVudDtpZihnIT09YSl7Y29uc3Qgdz1mLmN1cnJlbnQsUj10byh4KTthPyhkLmN1cnJlbnQ9UixiKCJNT1VOVCIpKTpSPT09Im5vbmUifHx4Py5kaXNwbGF5PT09Im5vbmUiP2IoIlVOTU9VTlQiKTpiKGcmJnchPT1SPyJBTklNQVRJT05fT1VUIjoiVU5NT1VOVCIpLHMuY3VycmVudD1hfX0sW2EsYl0pLG50KCgpPT57aWYobyl7bGV0IHg7Y29uc3QgZz1vLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc/P3dpbmRvdyxDPWlsKFI9Pntjb25zdCBUPXRvKGkuY3VycmVudCkuaW5jbHVkZXMoQ1NTLmVzY2FwZShSLmFuaW1hdGlvbk5hbWUpKTtpZihSLnRhcmdldD09PW8mJlQmJihiKCJBTklNQVRJT05fRU5EIiksIXMuY3VycmVudCkpe2NvbnN0IE89by5zdHlsZS5hbmltYXRpb25GaWxsTW9kZTtvLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPSJmb3J3YXJkcyIseD1nLnNldFRpbWVvdXQoKCk9PntvLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPT09ImZvcndhcmRzIiYmKG8uc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9Tyl9KX19LCJoYW5kbGVBbmltYXRpb25FbmQiKSx3PWlsKFI9PntSLnRhcmdldD09PW8mJihmLmN1cnJlbnQ9dG8oaS5jdXJyZW50KSl9LCJoYW5kbGVBbmltYXRpb25TdGFydCIpO3JldHVybiBvLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0Iix3KSxvLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmNhbmNlbCIsQyksby5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLEMpLCgpPT57Zy5jbGVhclRpbWVvdXQoeCksby5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsdyksby5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25jYW5jZWwiLEMpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIixDKX19ZWxzZSBiKCJBTklNQVRJT05fRU5EIil9LFtvLGJdKSx7aXNQcmVzZW50OlsibW91bnRlZCIsInVubW91bnRTdXNwZW5kZWQiXS5pbmNsdWRlcyh5KSxyZWY6di51c2VDYWxsYmFjayh4PT57aWYoeCl7Y29uc3QgZz1nZXRDb21wdXRlZFN0eWxlKHgpO2kuY3VycmVudD1nLGQuY3VycmVudD10byhnKX1lbHNlIGkuY3VycmVudD1udWxsO3UoeCl9LFtdKX19aWwoTnYsInVzZVByZXNlbmNlIik7ZnVuY3Rpb24gX3MoYSxvKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gYShvKTthIT1udWxsJiYoYS5jdXJyZW50PW8pfWlsKF9zLCJzZXRSZWYiKTtmdW5jdGlvbiBEdiguLi5hKXtjb25zdCBvPXYudXNlUmVmKGEpO3JldHVybiBvLmN1cnJlbnQ9YSx2LnVzZUNhbGxiYWNrKHU9Pntjb25zdCBpPW8uY3VycmVudDtsZXQgcz0hMTtjb25zdCBmPWkubWFwKGQ9Pntjb25zdCBwPV9zKGQsdSk7cmV0dXJuIXMmJnR5cGVvZiBwPT0iZnVuY3Rpb24iJiYocz0hMCkscH0pO2lmKHMpcmV0dXJuKCk9Pntmb3IobGV0IGQ9MDtkPGYubGVuZ3RoO2QrKyl7Y29uc3QgcD1mW2RdO3R5cGVvZiBwPT0iZnVuY3Rpb24iP3AoKTpfcyhpW2RdLG51bGwpfX19LFtdKX1pbChEdiwidXNlU3RhYmxlQ29tcG9zZWRSZWZzIik7ZnVuY3Rpb24gdG8oYSl7cmV0dXJuIGE/LmFuaW1hdGlvbk5hbWV8fCJub25lIn1pbCh0bywiZ2V0QW5pbWF0aW9uTmFtZSIpO2Z1bmN0aW9uIGp2KGEpe2xldCBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5wcm9wcywicmVmIik/LmdldCx1PW8mJiJpc1JlYWN0V2FybmluZyJpbiBvJiZvLmlzUmVhY3RXYXJuaW5nO3JldHVybiB1P2EucmVmOihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSwicmVmIik/LmdldCx1PW8mJiJpc1JlYWN0V2FybmluZyJpbiBvJiZvLmlzUmVhY3RXYXJuaW5nLHU/YS5wcm9wcy5yZWY6YS5wcm9wcy5yZWZ8fGEucmVmKX1pbChqdiwiZ2V0RWxlbWVudFJlZiIpO3ZhciBQdz1PYmplY3QuZGVmaW5lUHJvcGVydHksR3c9KGEsbyk9PlB3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLE12PUFsWyIgdXNlRWZmZWN0RXZlbnQgIi50cmltKCkudG9TdHJpbmcoKV0senY9QWxbIiB1c2VJbnNlcnRpb25FZmZlY3QgIi50cmltKCkudG9TdHJpbmcoKV07ZnVuY3Rpb24ga3YoYSl7aWYodHlwZW9mIE12PT0iZnVuY3Rpb24iKXJldHVybiBNdihhKTtjb25zdCBvPXYudXNlUmVmKCgpPT57dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsbCBhbiBldmVudCBoYW5kbGVyIHdoaWxlIHJlbmRlcmluZy4iKX0pO3JldHVybiB0eXBlb2YgenY9PSJmdW5jdGlvbiI/enYoKCk9PntvLmN1cnJlbnQ9YX0pOm50KCgpPT57by5jdXJyZW50PWF9KSx2LnVzZU1lbW8oKCk9PigoLi4udSk9Pm8uY3VycmVudD8uKC4uLnUpKSxbXSl9R3coa3YsInVzZUVmZmVjdEV2ZW50Iik7dmFyIFZ3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmcj0oYSxvKT0+VncoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksWXc9QWxbIiB1c2VJbnNlcnRpb25FZmZlY3QgIi50cmltKCkudG9TdHJpbmcoKV18fG50O2Z1bmN0aW9uIEVuKHtwcm9wOmEsZGVmYXVsdFByb3A6byxvbkNoYW5nZTp1PWZyKCgpPT57fSwib25DaGFuZ2UiKSxjYWxsZXI6aX0pe2NvbnN0W3MsZixkXT1Mdih7ZGVmYXVsdFByb3A6byxvbkNoYW5nZTp1fSkscD1hIT09dm9pZCAwLHk9cD9hOnMsYj12LnVzZUNhbGxiYWNrKHg9PntpZihwKXtjb25zdCBnPVV2KHgpP3goYSk6eDtnIT09YSYmZC5jdXJyZW50Py4oZyl9ZWxzZSBmKHgpfSxbcCxhLGYsZF0pO3JldHVyblt5LGJdfWZyKEVuLCJ1c2VDb250cm9sbGFibGVTdGF0ZSIpO2Z1bmN0aW9uIEx2KHtkZWZhdWx0UHJvcDphLG9uQ2hhbmdlOm99KXtjb25zdFt1LGldPXYudXNlU3RhdGUoYSkscz12LnVzZVJlZih1KSxmPXYudXNlUmVmKG8pO3JldHVybiBZdygoKT0+e2YuY3VycmVudD1vfSxbb10pLHYudXNlRWZmZWN0KCgpPT57cy5jdXJyZW50IT09dSYmKGYuY3VycmVudD8uKHUpLHMuY3VycmVudD11KX0sW3Usc10pLFt1LGksZl19ZnIoTHYsInVzZVVuY29udHJvbGxlZFN0YXRlIik7ZnVuY3Rpb24gVXYoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifWZyKFV2LCJpc0Z1bmN0aW9uIik7dmFyIEh2PVN5bWJvbCgiUkFESVg6U1lOQ19TVEFURSIpO2Z1bmN0aW9uIHF3KGEsbyx1LGkpe2NvbnN0e3Byb3A6cyxkZWZhdWx0UHJvcDpmLG9uQ2hhbmdlOmQsY2FsbGVyOnB9PW8seT1zIT09dm9pZCAwLGI9a3YoZCkseD1bey4uLnUsc3RhdGU6Zn1dO2kmJngucHVzaChpKTtjb25zdFtnLENdPXYudXNlUmVkdWNlcigoVCxPKT0+e2lmKE8udHlwZT09PUh2KXJldHVybnsuLi5ULHN0YXRlOk8uc3RhdGV9O2NvbnN0IEE9YShULE8pO3JldHVybiB5JiYhT2JqZWN0LmlzKEEuc3RhdGUsVC5zdGF0ZSkmJmIoQS5zdGF0ZSksQX0sLi4ueCksdz1nLnN0YXRlLFI9di51c2VSZWYodyk7di51c2VFZmZlY3QoKCk9PntSLmN1cnJlbnQhPT13JiYoUi5jdXJyZW50PXcseXx8Yih3KSl9LFt3LFIseV0pO2NvbnN0IEU9di51c2VNZW1vKCgpPT5zIT09dm9pZCAwP3suLi5nLHN0YXRlOnN9OmcsW2csc10pO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e3kmJiFPYmplY3QuaXMocyxnLnN0YXRlKSYmQyh7dHlwZTpIdixzdGF0ZTpzfSl9LFtzLGcuc3RhdGUseV0pLFtFLENdfWZyKHF3LCJ1c2VDb250cm9sbGFibGVTdGF0ZVJlZHVjZXIiKTt2YXIgWHc9T2JqZWN0LmRlZmluZVByb3BlcnR5LE9zPShhLG8pPT5YdyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxBcz0hMTtmdW5jdGlvbiBCdigpe2NvbnN0W2Esb109di51c2VTdGF0ZShBcyk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57QXN8fChBcz0hMCxvKCEwKSl9LFtdKSxhfU9zKEJ2LCJ1c2VJc0h5ZHJhdGVkIik7dmFyIEl2PUFsWyIgdXNlU3luY0V4dGVybmFsU3RvcmUgIi50cmltKCkudG9TdHJpbmcoKV07ZnVuY3Rpb24gUHYoKXtyZXR1cm4oKT0+e319T3MoUHYsInN1YnNjcmliZSIpO2Z1bmN0aW9uIEd2KCl7cmV0dXJuIEl2KFB2LCgpPT4hMCwoKT0+ITEpfU9zKEd2LCJ1c2VJc0h5ZHJhdGVkTW9kZXJuIik7dmFyIEt3PXR5cGVvZiBJdj09ImZ1bmN0aW9uIj9HdjpCdixRdz1PYmplY3QuZGVmaW5lUHJvcGVydHksYmE9KGEsbyk9PlF3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLE5zPSJyb3ZpbmdGb2N1c0dyb3VwLm9uRW50cnlGb2N1cyIsWnc9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH0semk9IlJvdmluZ0ZvY3VzR3JvdXAiLFtEcyxWdixGd109YXIoemkpLFskdyxub109TXQoemksW0Z3XSksWXY9e1ZlcnRpY2FsOiJ2ZXJ0aWNhbCIsSG9yaXpvbnRhbDoiaG9yaXpvbnRhbCJ9LEp3PXtSVEw6InJ0bCJ9LFtXdyxlRV09JHcoemkpLGpzPXYuZm9yd2FyZFJlZihiYShmdW5jdGlvbihvLHUpe3JldHVybiBtLmpzeChEcy5Qcm92aWRlcix7c2NvcGU6by5fX3Njb3BlUm92aW5nRm9jdXNHcm91cCxjaGlsZHJlbjptLmpzeChEcy5TbG90LHtzY29wZTpvLl9fc2NvcGVSb3ZpbmdGb2N1c0dyb3VwLGNoaWxkcmVuOm0uanN4KHRFLHsuLi5vLHJlZjp1fSl9KX0pfSwiUm92aW5nRm9jdXNHcm91cCIpKSx0RT12LmZvcndhcmRSZWYoYmEoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUm92aW5nRm9jdXNHcm91cDppLG9yaWVudGF0aW9uOnMsbG9vcDpmPSExLGRpcjpkLGN1cnJlbnRUYWJTdG9wSWQ6cCxkZWZhdWx0Q3VycmVudFRhYlN0b3BJZDp5LG9uQ3VycmVudFRhYlN0b3BJZENoYW5nZTpiLG9uRW50cnlGb2N1czp4LHByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXM6Zz0hMSwuLi5DfT1vLHc9di51c2VSZWYobnVsbCksUj1FZSh1LHcpLEU9UWEoZCksW1QsT109RW4oe3Byb3A6cCxkZWZhdWx0UHJvcDp5Pz9udWxsLG9uQ2hhbmdlOmIsY2FsbGVyOnppfSksW0EsTl09di51c2VTdGF0ZSghMSksTT16dCh4KSxZPVZ2KGkpLEg9di51c2VSZWYoITEpLFtVLEJdPXYudXNlU3RhdGUoMCk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgSj13LmN1cnJlbnQ7aWYoSilyZXR1cm4gSi5hZGRFdmVudExpc3RlbmVyKE5zLE0pLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoTnMsTSl9LFtNXSksbS5qc3goV3cse3Njb3BlOmksb3JpZW50YXRpb246cyxkaXI6RSxsb29wOmYsY3VycmVudFRhYlN0b3BJZDpULG9uSXRlbUZvY3VzOnYudXNlQ2FsbGJhY2soSj0+TyhKKSxbT10pLG9uSXRlbVNoaWZ0VGFiOnYudXNlQ2FsbGJhY2soKCk9Pk4oITApLFtdKSxvbkZvY3VzYWJsZUl0ZW1BZGQ6di51c2VDYWxsYmFjaygoKT0+QihKPT5KKzEpLFtdKSxvbkZvY3VzYWJsZUl0ZW1SZW1vdmU6di51c2VDYWxsYmFjaygoKT0+QihKPT5KLTEpLFtdKSxjaGlsZHJlbjptLmpzeChDZS5kaXYse3RhYkluZGV4OkF8fFU9PT0wPy0xOjAsImRhdGEtb3JpZW50YXRpb24iOnMsLi4uQyxyZWY6UixzdHlsZTp7b3V0bGluZToibm9uZSIsLi4uby5zdHlsZX0sb25Nb3VzZURvd246dWUoby5vbk1vdXNlRG93biwoKT0+e0guY3VycmVudD0hMH0pLG9uRm9jdXM6dWUoby5vbkZvY3VzLEo9Pntjb25zdCBXPSFILmN1cnJlbnQ7aWYoSi50YXJnZXQ9PT1KLmN1cnJlbnRUYXJnZXQmJlcmJiFBKXtjb25zdCBuZT1uZXcgQ3VzdG9tRXZlbnQoTnMsWncpO2lmKEouY3VycmVudFRhcmdldC5kaXNwYXRjaEV2ZW50KG5lKSwhbmUuZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgZWU9WSgpLmZpbHRlcigkPT4kLmZvY3VzYWJsZSksY2U9ZWUuZmluZCgkPT4kLmFjdGl2ZSksbWU9ZWUuZmluZCgkPT4kLmlkPT09VCksUD1bY2UsbWUsLi4uZWVdLmZpbHRlcihCb29sZWFuKS5tYXAoJD0+JC5yZWYuY3VycmVudCk7enMoUCxnKX19SC5jdXJyZW50PSExfSksb25CbHVyOnVlKG8ub25CbHVyLCgpPT5OKCExKSl9KX0pfSwiUm92aW5nRm9jdXNHcm91cEltcGwiKSksbkU9IlJvdmluZ0ZvY3VzR3JvdXBJdGVtIixNcz12LmZvcndhcmRSZWYoYmEoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUm92aW5nRm9jdXNHcm91cDppLGZvY3VzYWJsZTpzPSEwLGFjdGl2ZTpmPSExLHRhYlN0b3BJZDpkLGNoaWxkcmVuOnAsLi4ueX09byxiPXRsKCkseD1kfHxiLGc9ZUUobkUsaSksQz1nLmN1cnJlbnRUYWJTdG9wSWQ9PT14LHc9VnYoaSkse29uRm9jdXNhYmxlSXRlbUFkZDpSLG9uRm9jdXNhYmxlSXRlbVJlbW92ZTpFLGN1cnJlbnRUYWJTdG9wSWQ6VH09ZyxPPUt3KCk7cmV0dXJuIG50KCgpPT57aWYoISghT3x8IXMpKXJldHVybiBSKCksKCk9PkUoKX0sW08scyxSLEVdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKCEoT3x8IXMpKXJldHVybiBSKCksKCk9PkUoKX0sW08scyxSLEVdKSxtLmpzeChEcy5JdGVtU2xvdCx7c2NvcGU6aSxpZDp4LGZvY3VzYWJsZTpzLGFjdGl2ZTpmLGNoaWxkcmVuOm0uanN4KENlLnNwYW4se3RhYkluZGV4OkM/MDotMSwiZGF0YS1vcmllbnRhdGlvbiI6Zy5vcmllbnRhdGlvbiwuLi55LHJlZjp1LG9uTW91c2VEb3duOnVlKG8ub25Nb3VzZURvd24sQT0+e3M/Zy5vbkl0ZW1Gb2N1cyh4KTpBLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzOnVlKG8ub25Gb2N1cywoKT0+Zy5vbkl0ZW1Gb2N1cyh4KSksb25LZXlEb3duOnVlKG8ub25LZXlEb3duLEE9PntpZihBLmtleT09PSJUYWIiJiZBLnNoaWZ0S2V5KXtnLm9uSXRlbVNoaWZ0VGFiKCk7cmV0dXJufWlmKEEudGFyZ2V0IT09QS5jdXJyZW50VGFyZ2V0KXJldHVybjtjb25zdCBOPVh2KEEsZy5vcmllbnRhdGlvbixnLmRpcik7aWYoTiE9PXZvaWQgMCl7aWYoQS5tZXRhS2V5fHxBLmN0cmxLZXl8fEEuYWx0S2V5fHxBLnNoaWZ0S2V5KXJldHVybjtBLnByZXZlbnREZWZhdWx0KCk7bGV0IFk9dygpLmZpbHRlcihIPT5ILmZvY3VzYWJsZSkubWFwKEg9PkgucmVmLmN1cnJlbnQpO2lmKE49PT0ibGFzdCIpWS5yZXZlcnNlKCk7ZWxzZSBpZihOPT09InByZXYifHxOPT09Im5leHQiKXtOPT09InByZXYiJiZZLnJldmVyc2UoKTtjb25zdCBIPVkuaW5kZXhPZihBLmN1cnJlbnRUYXJnZXQpO1k9Zy5sb29wP0t2KFksSCsxKTpZLnNsaWNlKEgrMSl9c2V0VGltZW91dCgoKT0+enMoWSkpfX0pLGNoaWxkcmVuOnR5cGVvZiBwPT0iZnVuY3Rpb24iP3Aoe2lzQ3VycmVudFRhYlN0b3A6QyxoYXNUYWJTdG9wOlQhPW51bGx9KTpwfSl9KX0sIlJvdmluZ0ZvY3VzR3JvdXBJdGVtIikpLGxFPXtBcnJvd0xlZnQ6InByZXYiLEFycm93VXA6InByZXYiLEFycm93UmlnaHQ6Im5leHQiLEFycm93RG93bjoibmV4dCIsUGFnZVVwOiJmaXJzdCIsSG9tZToiZmlyc3QiLFBhZ2VEb3duOiJsYXN0IixFbmQ6Imxhc3QifTtmdW5jdGlvbiBxdihhLG8pe3JldHVybiBvIT09SncuUlRMP2E6YT09PSJBcnJvd0xlZnQiPyJBcnJvd1JpZ2h0IjphPT09IkFycm93UmlnaHQiPyJBcnJvd0xlZnQiOmF9YmEocXYsImdldERpcmVjdGlvbkF3YXJlS2V5Iik7ZnVuY3Rpb24gWHYoYSxvLHUpe2NvbnN0IGk9cXYoYS5rZXksdSk7aWYoIShvPT09WXYuVmVydGljYWwmJlsiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCJdLmluY2x1ZGVzKGkpKSYmIShvPT09WXYuSG9yaXpvbnRhbCYmWyJBcnJvd1VwIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoaSkpKXJldHVybiBsRVtpXX1iYShYdiwiZ2V0Rm9jdXNJbnRlbnQiKTtmdW5jdGlvbiB6cyhhLG89ITEpe2NvbnN0IHU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgaSBvZiBhKWlmKGk9PT11fHwoaS5mb2N1cyh7cHJldmVudFNjcm9sbDpvfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXUpKXJldHVybn1iYSh6cywiZm9jdXNGaXJzdCIpO2Z1bmN0aW9uIEt2KGEsbyl7cmV0dXJuIGEubWFwKCh1LGkpPT5hWyhvK2kpJWEubGVuZ3RoXSl9YmEoS3YsIndyYXBBcnJheSIpO3ZhciBhRT1mdW5jdGlvbihhKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciBvPUFycmF5LmlzQXJyYXkoYSk/YVswXTphO3JldHVybiBvLm93bmVyRG9jdW1lbnQuYm9keX0sbG89bmV3IFdlYWtNYXAsa2k9bmV3IFdlYWtNYXAsTGk9e30sa3M9MCxRdj1mdW5jdGlvbihhKXtyZXR1cm4gYSYmKGEuaG9zdHx8UXYoYS5wYXJlbnROb2RlKSl9LG9FPWZ1bmN0aW9uKGEsbyl7cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKHUpe2lmKGEuY29udGFpbnModSkpcmV0dXJuIHU7dmFyIGk9UXYodSk7cmV0dXJuIGkmJmEuY29udGFpbnMoaSk/aTooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLHUsImluIG5vdCBjb250YWluZWQgaW5zaWRlIixhLCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbih1KXtyZXR1cm4hIXV9KX0sckU9ZnVuY3Rpb24oYSxvLHUsaSl7dmFyIHM9b0UobyxBcnJheS5pc0FycmF5KGEpP2E6W2FdKTtMaVt1XXx8KExpW3VdPW5ldyBXZWFrTWFwKTt2YXIgZj1MaVt1XSxkPVtdLHA9bmV3IFNldCx5PW5ldyBTZXQocyksYj1mdW5jdGlvbihnKXshZ3x8cC5oYXMoZyl8fChwLmFkZChnKSxiKGcucGFyZW50Tm9kZSkpfTtzLmZvckVhY2goYik7dmFyIHg9ZnVuY3Rpb24oZyl7IWd8fHkuaGFzKGcpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGcuY2hpbGRyZW4sZnVuY3Rpb24oQyl7aWYocC5oYXMoQykpeChDKTtlbHNlIHRyeXt2YXIgdz1DLmdldEF0dHJpYnV0ZShpKSxSPXchPT1udWxsJiZ3IT09ImZhbHNlIixFPShsby5nZXQoQyl8fDApKzEsVD0oZi5nZXQoQyl8fDApKzE7bG8uc2V0KEMsRSksZi5zZXQoQyxUKSxkLnB1c2goQyksRT09PTEmJlImJmtpLnNldChDLCEwKSxUPT09MSYmQy5zZXRBdHRyaWJ1dGUodSwidHJ1ZSIpLFJ8fEMuc2V0QXR0cmlidXRlKGksInRydWUiKX1jYXRjaChPKXtjb25zb2xlLmVycm9yKCJhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gIixDLE8pfX0pfTtyZXR1cm4geChvKSxwLmNsZWFyKCksa3MrKyxmdW5jdGlvbigpe2QuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgQz1sby5nZXQoZyktMSx3PWYuZ2V0KGcpLTE7bG8uc2V0KGcsQyksZi5zZXQoZyx3KSxDfHwoa2kuaGFzKGcpfHxnLnJlbW92ZUF0dHJpYnV0ZShpKSxraS5kZWxldGUoZykpLHd8fGcucmVtb3ZlQXR0cmlidXRlKHUpfSksa3MtLSxrc3x8KGxvPW5ldyBXZWFrTWFwLGxvPW5ldyBXZWFrTWFwLGtpPW5ldyBXZWFrTWFwLExpPXt9KX19LExzPWZ1bmN0aW9uKGEsbyx1KXt1PT09dm9pZCAwJiYodT0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciBpPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShhKT9hOlthXSkscz1hRShhKTtyZXR1cm4gcz8oaS5wdXNoLmFwcGx5KGksQXJyYXkuZnJvbShzLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdLCBzY3JpcHQiKSkpLHJFKGkscyx1LCJhcmlhLWhpZGRlbiIpKTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sSW49ZnVuY3Rpb24oKXtyZXR1cm4gSW49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obyl7Zm9yKHZhciB1LGk9MSxzPWFyZ3VtZW50cy5sZW5ndGg7aTxzO2krKyl7dT1hcmd1bWVudHNbaV07Zm9yKHZhciBmIGluIHUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsZikmJihvW2ZdPXVbZl0pfXJldHVybiBvfSxJbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIFp2KGEsbyl7dmFyIHU9e307Zm9yKHZhciBpIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsaSkmJm8uaW5kZXhPZihpKTwwJiYodVtpXT1hW2ldKTtpZihhIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHM9MCxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYSk7czxpLmxlbmd0aDtzKyspby5pbmRleE9mKGlbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChhLGlbc10pJiYodVtpW3NdXT1hW2lbc11dKTtyZXR1cm4gdX1mdW5jdGlvbiBpRShhLG8sdSl7aWYodXx8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBpPTAscz1vLmxlbmd0aCxmO2k8cztpKyspKGZ8fCEoaSBpbiBvKSkmJihmfHwoZj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvLDAsaSkpLGZbaV09b1tpXSk7cmV0dXJuIGEuY29uY2F0KGZ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8pKX10eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iJiZTdXBwcmVzc2VkRXJyb3I7dmFyIFVpPSJyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uIixIaT0id2lkdGgtYmVmb3JlLXNjcm9sbC1iYXIiLGNFPSJ3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbiIsdUU9Ii0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSI7ZnVuY3Rpb24gVXMoYSxvKXtyZXR1cm4gdHlwZW9mIGE9PSJmdW5jdGlvbiI/YShvKTphJiYoYS5jdXJyZW50PW8pLGF9ZnVuY3Rpb24gc0UoYSxvKXt2YXIgdT12LnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlOmEsY2FsbGJhY2s6byxmYWNhZGU6e2dldCBjdXJyZW50KCl7cmV0dXJuIHUudmFsdWV9LHNldCBjdXJyZW50KGkpe3ZhciBzPXUudmFsdWU7cyE9PWkmJih1LnZhbHVlPWksdS5jYWxsYmFjayhpLHMpKX19fX0pWzBdO3JldHVybiB1LmNhbGxiYWNrPW8sdS5mYWNhZGV9dmFyIGZFPXR5cGVvZiB3aW5kb3c8InUiP3YudXNlTGF5b3V0RWZmZWN0OnYudXNlRWZmZWN0LEZ2PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGRFKGEsbyl7dmFyIHU9c0UobnVsbCxmdW5jdGlvbihpKXtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBVcyhzLGkpfSl9KTtyZXR1cm4gZkUoZnVuY3Rpb24oKXt2YXIgaT1Gdi5nZXQodSk7aWYoaSl7dmFyIHM9bmV3IFNldChpKSxmPW5ldyBTZXQoYSksZD11LmN1cnJlbnQ7cy5mb3JFYWNoKGZ1bmN0aW9uKHApe2YuaGFzKHApfHxVcyhwLG51bGwpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3MuaGFzKHApfHxVcyhwLGQpfSl9RnYuc2V0KHUsYSl9LFthXSksdX1mdW5jdGlvbiBtRShhKXtyZXR1cm4gYX1mdW5jdGlvbiBoRShhLG8pe289PT12b2lkIDAmJihvPW1FKTt2YXIgdT1bXSxpPSExLHM9e3JlYWQ6ZnVuY3Rpb24oKXtpZihpKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuIik7cmV0dXJuIHUubGVuZ3RoP3VbdS5sZW5ndGgtMV06YX0sdXNlTWVkaXVtOmZ1bmN0aW9uKGYpe3ZhciBkPW8oZixpKTtyZXR1cm4gdS5wdXNoKGQpLGZ1bmN0aW9uKCl7dT11LmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcCE9PWR9KX19LGFzc2lnblN5bmNNZWRpdW06ZnVuY3Rpb24oZil7Zm9yKGk9ITA7dS5sZW5ndGg7KXt2YXIgZD11O3U9W10sZC5mb3JFYWNoKGYpfXU9e3B1c2g6ZnVuY3Rpb24ocCl7cmV0dXJuIGYocCl9LGZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB1fX19LGFzc2lnbk1lZGl1bTpmdW5jdGlvbihmKXtpPSEwO3ZhciBkPVtdO2lmKHUubGVuZ3RoKXt2YXIgcD11O3U9W10scC5mb3JFYWNoKGYpLGQ9dX12YXIgeT1mdW5jdGlvbigpe3ZhciB4PWQ7ZD1bXSx4LmZvckVhY2goZil9LGI9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbih5KX07YigpLHU9e3B1c2g6ZnVuY3Rpb24oeCl7ZC5wdXNoKHgpLGIoKX0sZmlsdGVyOmZ1bmN0aW9uKHgpe3JldHVybiBkPWQuZmlsdGVyKHgpLHV9fX19O3JldHVybiBzfWZ1bmN0aW9uIHBFKGEpe2E9PT12b2lkIDAmJihhPXt9KTt2YXIgbz1oRShudWxsKTtyZXR1cm4gby5vcHRpb25zPUluKHthc3luYzohMCxzc3I6ITF9LGEpLG99dmFyICR2PWZ1bmN0aW9uKGEpe3ZhciBvPWEuc2lkZUNhcix1PVp2KGEsWyJzaWRlQ2FyIl0pO2lmKCFvKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyIik7dmFyIGk9by5yZWFkKCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQiKTtyZXR1cm4gdi5jcmVhdGVFbGVtZW50KGksSW4oe30sdSkpfTskdi5pc1NpZGVDYXJFeHBvcnQ9ITA7ZnVuY3Rpb24gdkUoYSxvKXtyZXR1cm4gYS51c2VNZWRpdW0obyksJHZ9dmFyIEp2PXBFKCksSHM9ZnVuY3Rpb24oKXt9LEJpPXYuZm9yd2FyZFJlZihmdW5jdGlvbihhLG8pe3ZhciB1PXYudXNlUmVmKG51bGwpLGk9di51c2VTdGF0ZSh7b25TY3JvbGxDYXB0dXJlOkhzLG9uV2hlZWxDYXB0dXJlOkhzLG9uVG91Y2hNb3ZlQ2FwdHVyZTpIc30pLHM9aVswXSxmPWlbMV0sZD1hLmZvcndhcmRQcm9wcyxwPWEuY2hpbGRyZW4seT1hLmNsYXNzTmFtZSxiPWEucmVtb3ZlU2Nyb2xsQmFyLHg9YS5lbmFibGVkLGc9YS5zaGFyZHMsQz1hLnNpZGVDYXIsdz1hLm5vUmVsYXRpdmUsUj1hLm5vSXNvbGF0aW9uLEU9YS5pbmVydCxUPWEuYWxsb3dQaW5jaFpvb20sTz1hLmFzLEE9Tz09PXZvaWQgMD8iZGl2IjpPLE49YS5nYXBNb2RlLE09WnYoYSxbImZvcndhcmRQcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVtb3ZlU2Nyb2xsQmFyIiwiZW5hYmxlZCIsInNoYXJkcyIsInNpZGVDYXIiLCJub1JlbGF0aXZlIiwibm9Jc29sYXRpb24iLCJpbmVydCIsImFsbG93UGluY2hab29tIiwiYXMiLCJnYXBNb2RlIl0pLFk9QyxIPWRFKFt1LG9dKSxVPUluKEluKHt9LE0pLHMpO3JldHVybiB2LmNyZWF0ZUVsZW1lbnQodi5GcmFnbWVudCxudWxsLHgmJnYuY3JlYXRlRWxlbWVudChZLHtzaWRlQ2FyOkp2LHJlbW92ZVNjcm9sbEJhcjpiLHNoYXJkczpnLG5vUmVsYXRpdmU6dyxub0lzb2xhdGlvbjpSLGluZXJ0OkUsc2V0Q2FsbGJhY2tzOmYsYWxsb3dQaW5jaFpvb206ISFULGxvY2tSZWY6dSxnYXBNb2RlOk59KSxkP3YuY2xvbmVFbGVtZW50KHYuQ2hpbGRyZW4ub25seShwKSxJbihJbih7fSxVKSx7cmVmOkh9KSk6di5jcmVhdGVFbGVtZW50KEEsSW4oe30sVSx7Y2xhc3NOYW1lOnkscmVmOkh9KSxwKSl9KTtCaS5kZWZhdWx0UHJvcHM9e2VuYWJsZWQ6ITAscmVtb3ZlU2Nyb2xsQmFyOiEwLGluZXJ0OiExfSxCaS5jbGFzc05hbWVzPXtmdWxsV2lkdGg6SGksemVyb1JpZ2h0OlVpfTt2YXIgZ0U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgX193ZWJwYWNrX25vbmNlX188InUiKXJldHVybiBfX3dlYnBhY2tfbm9uY2VfX307ZnVuY3Rpb24geUUoKXtpZighZG9jdW1lbnQpcmV0dXJuIG51bGw7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnR5cGU9InRleHQvY3NzIjt2YXIgbz1nRSgpO3JldHVybiBvJiZhLnNldEF0dHJpYnV0ZSgibm9uY2UiLG8pLGF9ZnVuY3Rpb24gYkUoYSxvKXthLnN0eWxlU2hlZXQ/YS5zdHlsZVNoZWV0LmNzc1RleHQ9bzphLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pKX1mdW5jdGlvbiB4RShhKXt2YXIgbz1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO28uYXBwZW5kQ2hpbGQoYSl9dmFyIFNFPWZ1bmN0aW9uKCl7dmFyIGE9MCxvPW51bGw7cmV0dXJue2FkZDpmdW5jdGlvbih1KXthPT0wJiYobz15RSgpKSYmKGJFKG8sdSkseEUobykpLGErK30scmVtb3ZlOmZ1bmN0aW9uKCl7YS0tLCFhJiZvJiYoby5wYXJlbnROb2RlJiZvLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyksbz1udWxsKX19fSxDRT1mdW5jdGlvbigpe3ZhciBhPVNFKCk7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7di51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gYS5hZGQobyksZnVuY3Rpb24oKXthLnJlbW92ZSgpfX0sW28mJnVdKX19LFd2PWZ1bmN0aW9uKCl7dmFyIGE9Q0UoKSxvPWZ1bmN0aW9uKHUpe3ZhciBpPXUuc3R5bGVzLHM9dS5keW5hbWljO3JldHVybiBhKGkscyksbnVsbH07cmV0dXJuIG99LFRFPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxnYXA6MH0sQnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGF8fCIiLDEwKXx8MH0sd0U9ZnVuY3Rpb24oYSl7dmFyIG89d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSksdT1vW2E9PT0icGFkZGluZyI/InBhZGRpbmdMZWZ0IjoibWFyZ2luTGVmdCJdLGk9b1thPT09InBhZGRpbmciPyJwYWRkaW5nVG9wIjoibWFyZ2luVG9wIl0scz1vW2E9PT0icGFkZGluZyI/InBhZGRpbmdSaWdodCI6Im1hcmdpblJpZ2h0Il07cmV0dXJuW0JzKHUpLEJzKGkpLEJzKHMpXX0sRUU9ZnVuY3Rpb24oYSl7aWYoYT09PXZvaWQgMCYmKGE9Im1hcmdpbiIpLHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBURTt2YXIgbz13RShhKSx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxpPXdpbmRvdy5pbm5lcldpZHRoO3JldHVybntsZWZ0Om9bMF0sdG9wOm9bMV0scmlnaHQ6b1syXSxnYXA6TWF0aC5tYXgoMCxpLXUrb1syXS1vWzBdKX19LFJFPVd2KCksYW89ImRhdGEtc2Nyb2xsLWxvY2tlZCIsX0U9ZnVuY3Rpb24oYSxvLHUsaSl7dmFyIHM9YS5sZWZ0LGY9YS50b3AsZD1hLnJpZ2h0LHA9YS5nYXA7cmV0dXJuIHU9PT12b2lkIDAmJih1PSJtYXJnaW4iKSxgCiAgLmAuY29uY2F0KGNFLGAgewogICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChpLGA7CiAgIHBhZGRpbmctcmlnaHQ6IGApLmNvbmNhdChwLCJweCAiKS5jb25jYXQoaSxgOwogIH0KICBib2R5W2ApLmNvbmNhdChhbyxgXSB7CiAgICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChpLGA7CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgYCkuY29uY2F0KFtvJiYicG9zaXRpb246IHJlbGF0aXZlICIuY29uY2F0KGksIjsiKSx1PT09Im1hcmdpbiImJmAKICAgIHBhZGRpbmctbGVmdDogYC5jb25jYXQocyxgcHg7CiAgICBwYWRkaW5nLXRvcDogYCkuY29uY2F0KGYsYHB4OwogICAgcGFkZGluZy1yaWdodDogYCkuY29uY2F0KGQsYHB4OwogICAgbWFyZ2luLWxlZnQ6MDsKICAgIG1hcmdpbi10b3A6MDsKICAgIG1hcmdpbi1yaWdodDogYCkuY29uY2F0KHAsInB4ICIpLmNvbmNhdChpLGA7CiAgICBgKSx1PT09InBhZGRpbmciJiYicGFkZGluZy1yaWdodDogIi5jb25jYXQocCwicHggIikuY29uY2F0KGksIjsiKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiIpLGAKICB9CiAgCiAgLmApLmNvbmNhdChVaSxgIHsKICAgIHJpZ2h0OiBgKS5jb25jYXQocCwicHggIikuY29uY2F0KGksYDsKICB9CiAgCiAgLmApLmNvbmNhdChIaSxgIHsKICAgIG1hcmdpbi1yaWdodDogYCkuY29uY2F0KHAsInB4ICIpLmNvbmNhdChpLGA7CiAgfQogIAogIC5gKS5jb25jYXQoVWksIiAuIikuY29uY2F0KFVpLGAgewogICAgcmlnaHQ6IDAgYCkuY29uY2F0KGksYDsKICB9CiAgCiAgLmApLmNvbmNhdChIaSwiIC4iKS5jb25jYXQoSGksYCB7CiAgICBtYXJnaW4tcmlnaHQ6IDAgYCkuY29uY2F0KGksYDsKICB9CiAgCiAgYm9keVtgKS5jb25jYXQoYW8sYF0gewogICAgYCkuY29uY2F0KHVFLCI6ICIpLmNvbmNhdChwLGBweDsKICB9CmApfSxlZz1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGFvKXx8IjAiLDEwKTtyZXR1cm4gaXNGaW5pdGUoYSk/YTowfSxPRT1mdW5jdGlvbigpe3YudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGFvLChlZygpKzEpLnRvU3RyaW5nKCkpLGZ1bmN0aW9uKCl7dmFyIGE9ZWcoKS0xO2E8PTA/ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoYW8pOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGFvLGEudG9TdHJpbmcoKSl9fSxbXSl9LEFFPWZ1bmN0aW9uKGEpe3ZhciBvPWEubm9SZWxhdGl2ZSx1PWEubm9JbXBvcnRhbnQsaT1hLmdhcE1vZGUscz1pPT09dm9pZCAwPyJtYXJnaW4iOmk7T0UoKTt2YXIgZj12LnVzZU1lbW8oZnVuY3Rpb24oKXtyZXR1cm4gRUUocyl9LFtzXSk7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChSRSx7c3R5bGVzOl9FKGYsIW8scyx1PyIiOiIhaW1wb3J0YW50Iil9KX0sSXM9ITE7aWYodHlwZW9mIHdpbmRvdzwidSIpdHJ5e3ZhciBJaT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSXM9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLElpLElpKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsSWksSWkpfWNhdGNoe0lzPSExfXZhciBvbz1Jcz97cGFzc2l2ZTohMX06ITEsTkU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnTmFtZT09PSJURVhUQVJFQSJ9LHRnPWZ1bmN0aW9uKGEsbyl7aWYoIShhIGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuITE7dmFyIHU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSk7cmV0dXJuIHVbb10hPT0iaGlkZGVuIiYmISh1Lm92ZXJmbG93WT09PXUub3ZlcmZsb3dYJiYhTkUoYSkmJnVbb109PT0idmlzaWJsZSIpfSxERT1mdW5jdGlvbihhKXtyZXR1cm4gdGcoYSwib3ZlcmZsb3dZIil9LGpFPWZ1bmN0aW9uKGEpe3JldHVybiB0ZyhhLCJvdmVyZmxvd1giKX0sbmc9ZnVuY3Rpb24oYSxvKXt2YXIgdT1vLm93bmVyRG9jdW1lbnQsaT1vO2Rve3R5cGVvZiBTaGFkb3dSb290PCJ1IiYmaSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QmJihpPWkuaG9zdCk7dmFyIHM9bGcoYSxpKTtpZihzKXt2YXIgZj1hZyhhLGkpLGQ9ZlsxXSxwPWZbMl07aWYoZD5wKXJldHVybiEwfWk9aS5wYXJlbnROb2RlfXdoaWxlKGkmJmkhPT11LmJvZHkpO3JldHVybiExfSxNRT1mdW5jdGlvbihhKXt2YXIgbz1hLnNjcm9sbFRvcCx1PWEuc2Nyb2xsSGVpZ2h0LGk9YS5jbGllbnRIZWlnaHQ7cmV0dXJuW28sdSxpXX0sekU9ZnVuY3Rpb24oYSl7dmFyIG89YS5zY3JvbGxMZWZ0LHU9YS5zY3JvbGxXaWR0aCxpPWEuY2xpZW50V2lkdGg7cmV0dXJuW28sdSxpXX0sbGc9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYT09PSJ2Ij9ERShvKTpqRShvKX0sYWc9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYT09PSJ2Ij9NRShvKTp6RShvKX0sa0U9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYT09PSJoIiYmbz09PSJydGwiPy0xOjF9LExFPWZ1bmN0aW9uKGEsbyx1LGkscyl7dmFyIGY9a0UoYSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvKS5kaXJlY3Rpb24pLGQ9ZippLHA9dS50YXJnZXQseT1vLmNvbnRhaW5zKHApLGI9ITEseD1kPjAsZz0wLEM9MDtkb3tpZighcClicmVhazt2YXIgdz1hZyhhLHApLFI9d1swXSxFPXdbMV0sVD13WzJdLE89RS1ULWYqUjsoUnx8TykmJmxnKGEscCkmJihnKz1PLEMrPVIpO3ZhciBBPXAucGFyZW50Tm9kZTtwPUEmJkEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QS5ob3N0OkF9d2hpbGUoIXkmJnAhPT1kb2N1bWVudC5ib2R5fHx5JiYoby5jb250YWlucyhwKXx8bz09PXApKTtyZXR1cm4oeCYmTWF0aC5hYnMoZyk8MXx8IXgmJk1hdGguYWJzKEMpPDEpJiYoYj0hMCksYn0sUGk9ZnVuY3Rpb24oYSl7cmV0dXJuImNoYW5nZWRUb3VjaGVzImluIGE/W2EuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCxhLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldOlswLDBdfSxvZz1mdW5jdGlvbihhKXtyZXR1cm5bYS5kZWx0YVgsYS5kZWx0YVldfSxyZz1mdW5jdGlvbihhKXtyZXR1cm4gYSYmImN1cnJlbnQiaW4gYT9hLmN1cnJlbnQ6YX0sVUU9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYVswXT09PW9bMF0mJmFbMV09PT1vWzFdfSxIRT1mdW5jdGlvbihhKXtyZXR1cm5gCiAgLmJsb2NrLWludGVyYWN0aXZpdHktYC5jb25jYXQoYSxgIHtwb2ludGVyLWV2ZW50czogbm9uZTt9CiAgLmFsbG93LWludGVyYWN0aXZpdHktYCkuY29uY2F0KGEsYCB7cG9pbnRlci1ldmVudHM6IGFsbDt9CmApfSxCRT0wLHJvPVtdO2Z1bmN0aW9uIElFKGEpe3ZhciBvPXYudXNlUmVmKFtdKSx1PXYudXNlUmVmKFswLDBdKSxpPXYudXNlUmVmKCkscz12LnVzZVN0YXRlKEJFKyspWzBdLGY9di51c2VTdGF0ZShXdilbMF0sZD12LnVzZVJlZihhKTt2LnVzZUVmZmVjdChmdW5jdGlvbigpe2QuY3VycmVudD1hfSxbYV0pLHYudXNlRWZmZWN0KGZ1bmN0aW9uKCl7aWYoYS5pbmVydCl7ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJibG9jay1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KHMpKTt2YXIgRT1pRShbYS5sb2NrUmVmLmN1cnJlbnRdLChhLnNoYXJkc3x8W10pLm1hcChyZyksITApLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBULmNsYXNzTGlzdC5hZGQoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQocykpfSksZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQocykpLEUuZm9yRWFjaChmdW5jdGlvbihUKXtyZXR1cm4gVC5jbGFzc0xpc3QucmVtb3ZlKCJhbGxvdy1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KHMpKX0pfX19LFthLmluZXJ0LGEubG9ja1JlZi5jdXJyZW50LGEuc2hhcmRzXSk7dmFyIHA9di51c2VDYWxsYmFjayhmdW5jdGlvbihFLFQpe2lmKCJ0b3VjaGVzImluIEUmJkUudG91Y2hlcy5sZW5ndGg9PT0yfHxFLnR5cGU9PT0id2hlZWwiJiZFLmN0cmxLZXkpcmV0dXJuIWQuY3VycmVudC5hbGxvd1BpbmNoWm9vbTt2YXIgTz1QaShFKSxBPXUuY3VycmVudCxOPSJkZWx0YVgiaW4gRT9FLmRlbHRhWDpBWzBdLU9bMF0sTT0iZGVsdGFZImluIEU/RS5kZWx0YVk6QVsxXS1PWzFdLFksSD1FLnRhcmdldCxVPU1hdGguYWJzKE4pPk1hdGguYWJzKE0pPyJoIjoidiI7aWYoInRvdWNoZXMiaW4gRSYmVT09PSJoIiYmSC50eXBlPT09InJhbmdlIilyZXR1cm4hMTt2YXIgQj13aW5kb3cuZ2V0U2VsZWN0aW9uKCksSj1CJiZCLmFuY2hvck5vZGUsVz1KP0o9PT1IfHxKLmNvbnRhaW5zKEgpOiExO2lmKFcpcmV0dXJuITE7dmFyIG5lPW5nKFUsSCk7aWYoIW5lKXJldHVybiEwO2lmKG5lP1k9VTooWT1VPT09InYiPyJoIjoidiIsbmU9bmcoVSxIKSksIW5lKXJldHVybiExO2lmKCFpLmN1cnJlbnQmJiJjaGFuZ2VkVG91Y2hlcyJpbiBFJiYoTnx8TSkmJihpLmN1cnJlbnQ9WSksIVkpcmV0dXJuITA7dmFyIGVlPWkuY3VycmVudHx8WTtyZXR1cm4gTEUoZWUsVCxFLGVlPT09ImgiP046TSl9LFtdKSx5PXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7dmFyIFQ9RTtpZighKCFyby5sZW5ndGh8fHJvW3JvLmxlbmd0aC0xXSE9PWYpKXt2YXIgTz0iZGVsdGFZImluIFQ/b2coVCk6UGkoVCksQT1vLmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZLm5hbWU9PT1ULnR5cGUmJihZLnRhcmdldD09PVQudGFyZ2V0fHxULnRhcmdldD09PVkuc2hhZG93UGFyZW50KSYmVUUoWS5kZWx0YSxPKX0pWzBdO2lmKEEmJkEuc2hvdWxkKXtULmNhbmNlbGFibGUmJlQucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoIUEpe3ZhciBOPShkLmN1cnJlbnQuc2hhcmRzfHxbXSkubWFwKHJnKS5maWx0ZXIoQm9vbGVhbikuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZLmNvbnRhaW5zKFQudGFyZ2V0KX0pLE09Ti5sZW5ndGg+MD9wKFQsTlswXSk6IWQuY3VycmVudC5ub0lzb2xhdGlvbjtNJiZULmNhbmNlbGFibGUmJlQucHJldmVudERlZmF1bHQoKX19fSxbXSksYj12LnVzZUNhbGxiYWNrKGZ1bmN0aW9uKEUsVCxPLEEpe3ZhciBOPXtuYW1lOkUsZGVsdGE6VCx0YXJnZXQ6TyxzaG91bGQ6QSxzaGFkb3dQYXJlbnQ6UEUoTyl9O28uY3VycmVudC5wdXNoKE4pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmN1cnJlbnQ9by5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihNKXtyZXR1cm4gTSE9PU59KX0sMSl9LFtdKSx4PXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7dS5jdXJyZW50PVBpKEUpLGkuY3VycmVudD12b2lkIDB9LFtdKSxnPXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7YihFLnR5cGUsb2coRSksRS50YXJnZXQscChFLGEubG9ja1JlZi5jdXJyZW50KSl9LFtdKSxDPXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7YihFLnR5cGUsUGkoRSksRS50YXJnZXQscChFLGEubG9ja1JlZi5jdXJyZW50KSl9LFtdKTt2LnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiByby5wdXNoKGYpLGEuc2V0Q2FsbGJhY2tzKHtvblNjcm9sbENhcHR1cmU6ZyxvbldoZWVsQ2FwdHVyZTpnLG9uVG91Y2hNb3ZlQ2FwdHVyZTpDfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHksb28pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseSxvbyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIseCxvbyksZnVuY3Rpb24oKXtybz1yby5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUhPT1mfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHksb28pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseSxvbyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIseCxvbyl9fSxbXSk7dmFyIHc9YS5yZW1vdmVTY3JvbGxCYXIsUj1hLmluZXJ0O3JldHVybiB2LmNyZWF0ZUVsZW1lbnQodi5GcmFnbWVudCxudWxsLFI/di5jcmVhdGVFbGVtZW50KGYse3N0eWxlczpIRShzKX0pOm51bGwsdz92LmNyZWF0ZUVsZW1lbnQoQUUse25vUmVsYXRpdmU6YS5ub1JlbGF0aXZlLGdhcE1vZGU6YS5nYXBNb2RlfSk6bnVsbCl9ZnVuY3Rpb24gUEUoYSl7Zm9yKHZhciBvPW51bGw7YSE9PW51bGw7KWEgaW5zdGFuY2VvZiBTaGFkb3dSb290JiYobz1hLmhvc3QsYT1hLmhvc3QpLGE9YS5wYXJlbnROb2RlO3JldHVybiBvfWNvbnN0IEdFPXZFKEp2LElFKTt2YXIgR2k9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKGEsbyl7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChCaSxJbih7fSxhLHtyZWY6byxzaWRlQ2FyOkdFfSkpfSk7R2kuY2xhc3NOYW1lcz1CaS5jbGFzc05hbWVzO3ZhciBWRT1PYmplY3QuZGVmaW5lUHJvcGVydHksWmU9KGEsbyk9PlZFKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLFlFPVsiRW50ZXIiLCIgIl0scUU9WyJBcnJvd0Rvd24iLCJQYWdlVXAiLCJIb21lIl0saWc9WyJBcnJvd1VwIiwiUGFnZURvd24iLCJFbmQiXSxYRT1bLi4ucUUsLi4uaWddLFZpPSJNZW51IixbUHMsS0UsUUVdPWFyKFZpKSxbeGEsUURdPU10KFZpLFtRRSxlbyxub10pLEdzPWVvKCksY2c9bm8oKSxbWkUsZHJdPXhhKFZpKSxbRkUsVnNdPXhhKFZpKSwkRT1aZShhPT57Y29uc3R7X19zY29wZU1lbnU6byxvcGVuOnU9ITEsY2hpbGRyZW46aSxkaXI6cyxvbk9wZW5DaGFuZ2U6Zixtb2RhbDpkPSEwfT1hLHA9R3MobyksW3ksYl09di51c2VTdGF0ZShudWxsKSx4PXYudXNlUmVmKCExKSxnPXp0KGYpLEM9UWEocyk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3Qgdz1aZSgoKT0+e3guY3VycmVudD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsUix7Y2FwdHVyZTohMCxvbmNlOiEwfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFIse2NhcHR1cmU6ITAsb25jZTohMH0pfSwiaGFuZGxlS2V5RG93biIpLFI9WmUoKCk9PnguY3VycmVudD0hMSwiaGFuZGxlUG9pbnRlciIpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix3LHtjYXB0dXJlOiEwfSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix3LHtjYXB0dXJlOiEwfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIse2NhcHR1cmU6ITB9KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsUix7Y2FwdHVyZTohMH0pfX0sW10pLHYudXNlRWZmZWN0KCgpPT57aWYoIXUpcmV0dXJuO2NvbnN0IHc9WmUoKCk9PmcoITEpLCJoYW5kbGVCbHVyIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix3KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHcpfSxbdSxnXSksbS5qc3god3Msey4uLnAsY2hpbGRyZW46bS5qc3goWkUse3Njb3BlOm8sb3Blbjp1LG9uT3BlbkNoYW5nZTpnLGNvbnRlbnQ6eSxvbkNvbnRlbnRDaGFuZ2U6YixjaGlsZHJlbjptLmpzeChGRSx7c2NvcGU6byxvbkNsb3NlOnYudXNlQ2FsbGJhY2soKCk9PmcoITEpLFtnXSksaXNVc2luZ0tleWJvYXJkUmVmOngsZGlyOkMsbW9kYWw6ZCxjaGlsZHJlbjppfSl9KX0pfSwiTWVudSIpLEpFPXYuZm9yd2FyZFJlZihaZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVNZW51OmksLi4uc309byxmPUdzKGkpO3JldHVybiBtLmpzeChFcyx7Li4uZiwuLi5zLHJlZjp1fSl9LCJNZW51QW5jaG9yIikpLHVnPSJNZW51UG9ydGFsIixbV0UsZTJdPXhhKHVnLHtmb3JjZU1vdW50OnZvaWQgMH0pLHQyPVplKGE9Pntjb25zdHtfX3Njb3BlTWVudTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjppLGNvbnRhaW5lcjpzfT1hLGY9ZHIodWcsbyk7cmV0dXJuIG0uanN4KFdFLHtzY29wZTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjptLmpzeChtbix7cHJlc2VudDp1fHxmLm9wZW4sY2hpbGRyZW46bS5qc3goc3Ise2FzQ2hpbGQ6ITAsY29udGFpbmVyOnMsY2hpbGRyZW46aX0pfSl9KX0sIk1lbnVQb3J0YWwiKSxrbD0iTWVudUNvbnRlbnQiLFtuMixzZ109eGEoa2wpLGwyPXYuZm9yd2FyZFJlZihaZShmdW5jdGlvbihvLHUpe2NvbnN0IGk9ZTIoa2wsby5fX3Njb3BlTWVudSkse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsLi4uZn09byxkPWRyKGtsLG8uX19zY29wZU1lbnUpLHA9VnMoa2wsby5fX3Njb3BlTWVudSk7cmV0dXJuIG0uanN4KFBzLlByb3ZpZGVyLHtzY29wZTpvLl9fc2NvcGVNZW51LGNoaWxkcmVuOm0uanN4KG1uLHtwcmVzZW50OnN8fGQub3BlbixjaGlsZHJlbjptLmpzeChQcy5TbG90LHtzY29wZTpvLl9fc2NvcGVNZW51LGNoaWxkcmVuOnAubW9kYWw/bS5qc3goYTIsey4uLmYscmVmOnV9KTptLmpzeChvMix7Li4uZixyZWY6dX0pfSl9KX0pfSwiTWVudUNvbnRlbnQiKSksYTI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3QgaT1kcihrbCxvLl9fc2NvcGVNZW51KSxzPXYudXNlUmVmKG51bGwpLGY9RWUodSxzKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBkPXMuY3VycmVudDtpZihkKXJldHVybiBMcyhkKX0sW10pLG0uanN4KGZnLHsuLi5vLHJlZjpmLHRyYXBGb2N1czppLm9wZW4sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOmkub3BlbixkaXNhYmxlT3V0c2lkZVNjcm9sbDohMCxvbkZvY3VzT3V0c2lkZTp1ZShvLm9uRm9jdXNPdXRzaWRlLGQ9PmQucHJldmVudERlZmF1bHQoKSx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOiExfSksb25EaXNtaXNzOigpPT5pLm9uT3BlbkNoYW5nZSghMSl9KX0sIk1lbnVSb290Q29udGVudE1vZGFsIikpLG8yPXYuZm9yd2FyZFJlZihaZShmdW5jdGlvbihvLHUpe2NvbnN0IGk9ZHIoa2wsby5fX3Njb3BlTWVudSk7cmV0dXJuIG0uanN4KGZnLHsuLi5vLHJlZjp1LHRyYXBGb2N1czohMSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITEsZGlzYWJsZU91dHNpZGVTY3JvbGw6ITEsb25EaXNtaXNzOigpPT5pLm9uT3BlbkNoYW5nZSghMSl9KX0sIk1lbnVSb290Q29udGVudE5vbk1vZGFsIikpLHIyPUxuKCJNZW51Q29udGVudC5TY3JvbGxMb2NrIiksZmc9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZU1lbnU6aSxsb29wOnM9ITEsdHJhcEZvY3VzOmYsb25PcGVuQXV0b0ZvY3VzOmQsb25DbG9zZUF1dG9Gb2N1czpwLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp5LG9uRW50cnlGb2N1czpiLG9uRXNjYXBlS2V5RG93bjp4LG9uUG9pbnRlckRvd25PdXRzaWRlOmcsb25Gb2N1c091dHNpZGU6QyxvbkludGVyYWN0T3V0c2lkZTp3LG9uRGlzbWlzczpSLGRpc2FibGVPdXRzaWRlU2Nyb2xsOkUsLi4uVH09byxPPWRyKGtsLGkpLEE9VnMoa2wsaSksTj1HcyhpKSxNPWNnKGkpLFk9S0UoaSksW0gsVV09di51c2VTdGF0ZShudWxsKSxCPXYudXNlUmVmKG51bGwpLFtKLFddPXYudXNlU3RhdGUobnVsbCk7dXMoSik7Y29uc3R7bm9kZXM6bmUscmVnaXN0cnk6ZWV9PWNzKCksY2U9ISEoZnx8RSksbWU9RWUodSxCLE8ub25Db250ZW50Q2hhbmdlLFcpLGhlPXYudXNlUmVmKDApLFA9di51c2VSZWYoIiIpLCQ9di51c2VSZWYoMCksRj12LnVzZVJlZihudWxsKSxyZT12LnVzZVJlZigicmlnaHQiKSxxPXYudXNlUmVmKDApLHhlPXYudXNlTWVtbygoKT0+RT9bQiwuLi5uZS5tYXAoSz0+KHtjdXJyZW50Okt9KSldOltdLFtCLG5lLEVdKSxqZT1FP0dpOnYuRnJhZ21lbnQsWWU9RT97YXM6cjIsYWxsb3dQaW5jaFpvb206ITAsc2hhcmRzOnhlfTp2b2lkIDAsRD1aZShLPT57Y29uc3QgYWU9UC5jdXJyZW50K0sseWU9WSgpLmZpbHRlcihSZT0+IVJlLmRpc2FibGVkKSxzZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50LGxlPXllLmZpbmQoUmU9PlJlLnJlZi5jdXJyZW50PT09c2UpPy50ZXh0VmFsdWUsdGU9eWUubWFwKFJlPT5SZS50ZXh0VmFsdWUpLGllPXlnKHRlLGFlLGxlKSxiZT15ZS5maW5kKFJlPT5SZS50ZXh0VmFsdWU9PT1pZSk/LnJlZi5jdXJyZW50O2Z1bmN0aW9uIHdlKFJlKXtQLmN1cnJlbnQ9UmUsd2luZG93LmNsZWFyVGltZW91dChoZS5jdXJyZW50KSxSZSE9PSIiJiYoaGUuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+d2UoIiIpLDFlMykpfVplKHdlLCJ1cGRhdGVTZWFyY2giKSx3ZShhZSksYmUmJnNldFRpbWVvdXQoKCk9PmJlLmZvY3VzKCkpfSwiaGFuZGxlVHlwZWFoZWFkU2VhcmNoIik7di51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KGhlLmN1cnJlbnQpLFtdKSxycigpO2NvbnN0IFg9di51c2VDYWxsYmFjayhLPT5yZS5jdXJyZW50PT09Ri5jdXJyZW50Py5zaWRlJiZ4ZyhLLEYuY3VycmVudD8uYXJlYSksW10pO3JldHVybiBtLmpzeChuMix7c2NvcGU6aSxzZWFyY2hSZWY6UCxvbkl0ZW1FbnRlcjp2LnVzZUNhbGxiYWNrKEs9PntYKEspJiZLLnByZXZlbnREZWZhdWx0KCl9LFtYXSksb25JdGVtTGVhdmU6di51c2VDYWxsYmFjayhLPT57WChLKXx8KEIuY3VycmVudD8uZm9jdXMoKSxVKG51bGwpKX0sW1hdKSxvblRyaWdnZXJMZWF2ZTp2LnVzZUNhbGxiYWNrKEs9PntYKEspJiZLLnByZXZlbnREZWZhdWx0KCl9LFtYXSkscG9pbnRlckdyYWNlVGltZXJSZWY6JCxvblBvaW50ZXJHcmFjZUludGVudENoYW5nZTp2LnVzZUNhbGxiYWNrKEs9PntGLmN1cnJlbnQ9S30sW10pLGNoaWxkcmVuOm0uanN4KGlzLHtyZWdpc3RyeTpjZT9lZTpudWxsLGNoaWxkcmVuOm0uanN4KGplLHsuLi5ZZSxjaGlsZHJlbjptLmpzeChycyx7YXNDaGlsZDohMCx0cmFwcGVkOmYsYnJhbmNoZXM6bmUsb25Nb3VudEF1dG9Gb2N1czp1ZShkLEs9PntLLnByZXZlbnREZWZhdWx0KCksQi5jdXJyZW50Py5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSksb25Vbm1vdW50QXV0b0ZvY3VzOnAsY2hpbGRyZW46bS5qc3gob3Ise2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnksb25Fc2NhcGVLZXlEb3duOngsb25Qb2ludGVyRG93bk91dHNpZGU6ZyxvbkZvY3VzT3V0c2lkZTpDLG9uSW50ZXJhY3RPdXRzaWRlOncsb25EaXNtaXNzOlIsY2hpbGRyZW46bS5qc3goanMse2FzQ2hpbGQ6ITAsLi4uTSxkaXI6QS5kaXIsb3JpZW50YXRpb246InZlcnRpY2FsIixsb29wOnMsY3VycmVudFRhYlN0b3BJZDpILG9uQ3VycmVudFRhYlN0b3BJZENoYW5nZTpVLG9uRW50cnlGb2N1czp1ZShiLEs9PntBLmlzVXNpbmdLZXlib2FyZFJlZi5jdXJyZW50fHxLLnByZXZlbnREZWZhdWx0KCl9KSxwcmV2ZW50U2Nyb2xsT25FbnRyeUZvY3VzOiEwLGNoaWxkcmVuOm0uanN4KFJzLHtyb2xlOiJtZW51IiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiZGF0YS1zdGF0ZSI6aGcoTy5vcGVuKSwiZGF0YS1yYWRpeC1tZW51LWNvbnRlbnQiOiIiLGRpcjpBLmRpciwuLi5OLC4uLlQscmVmOm1lLHN0eWxlOntvdXRsaW5lOiJub25lIiwuLi5ULnN0eWxlfSxvbktleURvd246dWUoVC5vbktleURvd24sSz0+e2NvbnN0IHllPUsudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXJhZGl4LW1lbnUtY29udGVudF0iKT09PUsuY3VycmVudFRhcmdldCxzZT1LLmN0cmxLZXl8fEsuYWx0S2V5fHxLLm1ldGFLZXksbGU9Sy5rZXkubGVuZ3RoPT09MTt5ZSYmKEsua2V5PT09IlRhYiImJksucHJldmVudERlZmF1bHQoKSwhc2UmJmxlJiZEKEsua2V5KSk7Y29uc3QgdGU9Qi5jdXJyZW50O2lmKEsudGFyZ2V0IT09dGV8fCFYRS5pbmNsdWRlcyhLLmtleSkpcmV0dXJuO0sucHJldmVudERlZmF1bHQoKTtjb25zdCBiZT1ZKCkuZmlsdGVyKHdlPT4hd2UuZGlzYWJsZWQpLm1hcCh3ZT0+d2UucmVmLmN1cnJlbnQpO2lnLmluY2x1ZGVzKEsua2V5KSYmYmUucmV2ZXJzZSgpLHZnKGJlKX0pLG9uQmx1cjp1ZShvLm9uQmx1cixLPT57Sy5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKEsudGFyZ2V0KXx8KHdpbmRvdy5jbGVhclRpbWVvdXQoaGUuY3VycmVudCksUC5jdXJyZW50PSIiKX0pLG9uUG9pbnRlck1vdmU6dWUoby5vblBvaW50ZXJNb3ZlLFlpKEs9Pntjb25zdCBhZT1LLnRhcmdldCx5ZT1xLmN1cnJlbnQhPT1LLmNsaWVudFg7aWYoSy5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGFlKSYmeWUpe2NvbnN0IHNlPUsuY2xpZW50WD5xLmN1cnJlbnQ/InJpZ2h0IjoibGVmdCI7cmUuY3VycmVudD1zZSxxLmN1cnJlbnQ9Sy5jbGllbnRYfX0pKX0pfSl9KX0pfSl9KX0pfSwiTWVudUNvbnRlbnRJbXBsIikpLFlzPSJNZW51SXRlbSIsZGc9Im1lbnUuaXRlbVNlbGVjdCIsaTI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7ZGlzYWJsZWQ6aT0hMSxvblNlbGVjdDpzLC4uLmZ9PW8sZD12LnVzZVJlZihudWxsKSxwPVZzKFlzLG8uX19zY29wZU1lbnUpLHk9c2coWXMsby5fX3Njb3BlTWVudSksYj1FZSh1LGQpLHg9di51c2VSZWYoITEpLGc9WmUoKCk9Pntjb25zdCBDPWQuY3VycmVudDtpZighaSYmQyl7Y29uc3Qgdz1uZXcgQ3VzdG9tRXZlbnQoZGcse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO0MuYWRkRXZlbnRMaXN0ZW5lcihkZyxSPT5zPy4oUikse29uY2U6ITB9KSx4aShDLHcpLHcuZGVmYXVsdFByZXZlbnRlZD94LmN1cnJlbnQ9ITE6cC5vbkNsb3NlKCl9fSwiaGFuZGxlU2VsZWN0Iik7cmV0dXJuIG0uanN4KGMyLHsuLi5mLHJlZjpiLGRpc2FibGVkOmksb25DbGljazp1ZShvLm9uQ2xpY2ssZyksb25Qb2ludGVyRG93bjpDPT57by5vblBvaW50ZXJEb3duPy4oQykseC5jdXJyZW50PSEwfSxvblBvaW50ZXJVcDp1ZShvLm9uUG9pbnRlclVwLEM9Pnt4LmN1cnJlbnR8fEMuY3VycmVudFRhcmdldD8uY2xpY2soKX0pLG9uS2V5RG93bjp1ZShvLm9uS2V5RG93bixDPT57aXx8Qy50YXJnZXQhPT1DLmN1cnJlbnRUYXJnZXR8fHkuc2VhcmNoUmVmLmN1cnJlbnQhPT0iIiYmQy5rZXk9PT0iICJ8fFlFLmluY2x1ZGVzKEMua2V5KSYmKEMuY3VycmVudFRhcmdldC5jbGljaygpLEMucHJldmVudERlZmF1bHQoKSl9KX0pfSwiTWVudUl0ZW0iKSksYzI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZU1lbnU6aSxkaXNhYmxlZDpzPSExLHRleHRWYWx1ZTpmLC4uLmR9PW8scD1zZyhZcyxpKSx5PWNnKGkpLGI9di51c2VSZWYobnVsbCkseD1FZSh1LGIpLFtnLENdPXYudXNlU3RhdGUoITEpLFt3LFJdPXYudXNlU3RhdGUoIiIpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IEU9Yi5jdXJyZW50O0UmJlIoKEUudGV4dENvbnRlbnQ/PyIiKS50cmltKCkpfSxbZC5jaGlsZHJlbl0pLG0uanN4KFBzLkl0ZW1TbG90LHtzY29wZTppLGRpc2FibGVkOnMsdGV4dFZhbHVlOmY/P3csY2hpbGRyZW46bS5qc3goTXMse2FzQ2hpbGQ6ITAsLi4ueSxmb2N1c2FibGU6IXMsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtyb2xlOiJtZW51aXRlbSIsImRhdGEtaGlnaGxpZ2h0ZWQiOmc/IiI6dm9pZCAwLCJhcmlhLWRpc2FibGVkIjpzfHx2b2lkIDAsImRhdGEtZGlzYWJsZWQiOnM/IiI6dm9pZCAwLC4uLmQscmVmOngsb25Qb2ludGVyTW92ZTp1ZShvLm9uUG9pbnRlck1vdmUsWWkoRT0+e3M/cC5vbkl0ZW1MZWF2ZShFKToocC5vbkl0ZW1FbnRlcihFKSxFLmRlZmF1bHRQcmV2ZW50ZWR8fEUuY3VycmVudFRhcmdldC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pKX0pKSxvblBvaW50ZXJMZWF2ZTp1ZShvLm9uUG9pbnRlckxlYXZlLFlpKEU9PnAub25JdGVtTGVhdmUoRSkpKSxvbkZvY3VzOnVlKG8ub25Gb2N1cywoKT0+QyghMCkpLG9uQmx1cjp1ZShvLm9uQmx1ciwoKT0+QyghMSkpfSl9KX0pfSwiTWVudUl0ZW1JbXBsIikpLHUyPSJNZW51UmFkaW9Hcm91cCIsW1pELEZEXT14YSh1Mix7dmFsdWU6dm9pZCAwLG9uVmFsdWVDaGFuZ2U6WmUoKCk9Pnt9LCJvblZhbHVlQ2hhbmdlIil9KSxtZz0iTWVudUl0ZW1JbmRpY2F0b3IiLFskRCxzMl09eGEobWcse2NoZWNrZWQ6ITF9KSxmMj12LmZvcndhcmRSZWYoWmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlTWVudTppLGZvcmNlTW91bnQ6cywuLi5mfT1vLGQ9czIobWcsaSk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50OnN8fHFzKGQuY2hlY2tlZCl8fGQuY2hlY2tlZD09PSEwLGNoaWxkcmVuOm0uanN4KENlLnNwYW4sey4uLmYscmVmOnUsImRhdGEtc3RhdGUiOnBnKGQuY2hlY2tlZCl9KX0pfSwiTWVudUl0ZW1JbmRpY2F0b3IiKSksZDI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZU1lbnU6aSwuLi5zfT1vO3JldHVybiBtLmpzeChDZS5kaXYse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJob3Jpem9udGFsIiwuLi5zLHJlZjp1fSl9LCJNZW51U2VwYXJhdG9yIikpLG0yPSJNZW51U3ViIixbSkQsV0RdPXhhKG0yKTtmdW5jdGlvbiBoZyhhKXtyZXR1cm4gYT8ib3BlbiI6ImNsb3NlZCJ9WmUoaGcsImdldE9wZW5TdGF0ZSIpO2Z1bmN0aW9uIHFzKGEpe3JldHVybiBhPT09ImluZGV0ZXJtaW5hdGUifVplKHFzLCJpc0luZGV0ZXJtaW5hdGUiKTtmdW5jdGlvbiBwZyhhKXtyZXR1cm4gcXMoYSk/ImluZGV0ZXJtaW5hdGUiOmE/ImNoZWNrZWQiOiJ1bmNoZWNrZWQifVplKHBnLCJnZXRDaGVja2VkU3RhdGUiKTtmdW5jdGlvbiB2ZyhhKXtjb25zdCBvPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IHUgb2YgYSlpZih1PT09b3x8KHUuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bykpcmV0dXJufVplKHZnLCJmb2N1c0ZpcnN0Iik7ZnVuY3Rpb24gZ2coYSxvKXtyZXR1cm4gYS5tYXAoKHUsaSk9PmFbKG8raSklYS5sZW5ndGhdKX1aZShnZywid3JhcEFycmF5Iik7ZnVuY3Rpb24geWcoYSxvLHUpe2NvbnN0IHM9by5sZW5ndGg+MSYmQXJyYXkuZnJvbShvKS5ldmVyeShiPT5iPT09b1swXSk/b1swXTpvLGY9dT9hLmluZGV4T2YodSk6LTE7bGV0IGQ9Z2coYSxNYXRoLm1heChmLDApKTtzLmxlbmd0aD09PTEmJihkPWQuZmlsdGVyKGI9PmIhPT11KSk7Y29uc3QgeT1kLmZpbmQoYj0+Yi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIHkhPT11P3k6dm9pZCAwfVplKHlnLCJnZXROZXh0TWF0Y2giKTtmdW5jdGlvbiBiZyhhLG8pe2NvbnN0e3g6dSx5Oml9PWE7bGV0IHM9ITE7Zm9yKGxldCBmPTAsZD1vLmxlbmd0aC0xO2Y8by5sZW5ndGg7ZD1mKyspe2NvbnN0IHA9b1tmXSx5PW9bZF0sYj1wLngseD1wLnksZz15LngsQz15Lnk7eD5pIT1DPmkmJnU8KGctYikqKGkteCkvKEMteCkrYiYmKHM9IXMpfXJldHVybiBzfVplKGJnLCJpc1BvaW50SW5Qb2x5Z29uIik7ZnVuY3Rpb24geGcoYSxvKXtpZighbylyZXR1cm4hMTtjb25zdCB1PXt4OmEuY2xpZW50WCx5OmEuY2xpZW50WX07cmV0dXJuIGJnKHUsbyl9WmUoeGcsImlzUG9pbnRlckluR3JhY2VBcmVhIik7ZnVuY3Rpb24gWWkoYSl7cmV0dXJuIG89Pm8ucG9pbnRlclR5cGU9PT0ibW91c2UiP2Eobyk6dm9pZCAwfVplKFlpLCJ3aGVuTW91c2UiKTtmdW5jdGlvbiBoMih7dHJpZ2dlcjphLGFsaWduOm89InN0YXJ0IixjaGlsZHJlbjp1LGNsYXNzTmFtZTppfSxzKXtjb25zdFtmLGRdPXYudXNlU3RhdGUoITEpLHA9eyJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOmYsImRhdGEtc3RhdGUiOmY/Im9wZW4iOiJjbG9zZWQiLG9uQ2xpY2s6Yj0+e2IuZGVmYXVsdFByZXZlbnRlZHx8ZCh4PT4heCl9LG9uS2V5RG93bjpiPT57KGIua2V5PT09IkFycm93RG93biJ8fGIua2V5PT09IkFycm93VXAiKSYmKGIucHJldmVudERlZmF1bHQoKSxkKCEwKSl9fSx5PXYuaXNWYWxpZEVsZW1lbnQoYSk/di5jbG9uZUVsZW1lbnQoYSx7Li4ucCxvbkNsaWNrOmI9PnthLnByb3BzLm9uQ2xpY2s/LihiKSxwLm9uQ2xpY2soYil9LG9uS2V5RG93bjpiPT57YS5wcm9wcy5vbktleURvd24/LihiKSxwLm9uS2V5RG93bihiKX19KTptLmpzeCgic3BhbiIsey4uLnAsY2hpbGRyZW46YX0pO3JldHVybiBtLmpzeHMoJEUse29wZW46Zixvbk9wZW5DaGFuZ2U6ZCxtb2RhbDohMSxjaGlsZHJlbjpbbS5qc3goSkUse2FzQ2hpbGQ6ITAsY2hpbGRyZW46eX0pLG0uanN4KHQyLHtjaGlsZHJlbjptLmpzeChsMix7cmVmOnMsYWxpZ246byxjbGFzc05hbWU6a2UoIm1pbi13LVsyMDBweF0gcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWxhcmstbjIwMCBiZy1icmFuZC1wcmltYXJ5IHAtMSBzaGFkb3ctW3ZhcigtLXNoYWRvdy1vdmVybGF5KV0gZGF0YS1bc3RhdGU9b3Blbl06YW5pbS1vdmVybGF5LWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbS1vdmVybGF5LW91dCIsaSksY2hpbGRyZW46dX0pfSldfSl9Y29uc3QgU2c9di5mb3J3YXJkUmVmKGgyKTtTZy5kaXNwbGF5TmFtZT0iTGFya0Ryb3Bkb3duTWVudSI7ZnVuY3Rpb24gcDIoe3ZhbHVlOmEsb25TZWxlY3Q6byxkYW5nZXI6dSxkaXNhYmxlZDppLGNoZWNrZWQ6cyxjaGlsZHJlbjpmfSl7cmV0dXJuIG0uanN4cyhpMix7ZGlzYWJsZWQ6aSxvblNlbGVjdDooKT0+bz8uKGEpLCJkYXRhLWNoZWNrZWQiOnM/InRydWUiOnZvaWQgMCxjbGFzc05hbWU6a2UoImZsZXggaC04IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTMgdGV4dC1zbSBvdXRsaW5lLW5vbmUgZGF0YS1baGlnaGxpZ2h0ZWRdOmJnLWxhcmstbjEwMCIscyYmImZvbnQtbWVkaXVtIHRleHQtYnJhbmQtbGluayIsdSYmInRleHQtbGFyay1kYW5nZXIiKSxjaGlsZHJlbjpbcz9tLmpzeChHdSx7Y2xhc3NOYW1lOiJzaXplLTQgc2hyaW5rLTAifSk6bS5qc3goInNwYW4iLHtjbGFzc05hbWU6InNpemUtNCBzaHJpbmstMCIsImFyaWEtaGlkZGVuIjohMH0pLGZdfSl9Y29uc3QgdjI9KHtjaGlsZHJlbjphfSk9Pm0uanN4KGYyLHtjaGlsZHJlbjphfSksZzI9KHtjbGFzc05hbWU6YX0sbyk9Pm0uanN4KGQyLHtyZWY6byxjbGFzc05hbWU6a2UoImgtcHggYmctbGFyay1uMjAwIixhKX0pLENnPXYuZm9yd2FyZFJlZihnMik7Q2cuZGlzcGxheU5hbWU9IkxhcmtEcm9wZG93bk1lbnUuU2VwYXJhdG9yIjtjb25zdCBTYT1PYmplY3QuYXNzaWduKFNnLHtJdGVtOnAyLEl0ZW1JbmRpY2F0b3I6djIsU2VwYXJhdG9yOkNnfSk7dmFyIHkyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpbz0oYSxvKT0+eTIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksVGc9e0F1dG9tYXRpYzoiYXV0b21hdGljIixNYW51YWw6Im1hbnVhbCJ9LFhzPSJUYWJzIixbYjIsZWpdPU10KFhzLFtub10pLHdnPW5vKCksW3gyLEtzXT1iMihYcyksUzI9di5mb3J3YXJkUmVmKGlvKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRhYnM6aSx2YWx1ZTpzLG9uVmFsdWVDaGFuZ2U6ZixkZWZhdWx0VmFsdWU6ZCxvcmllbnRhdGlvbjpwPSJob3Jpem9udGFsIixkaXI6eSxhY3RpdmF0aW9uTW9kZTpiPVRnLkF1dG9tYXRpYywuLi54fT1vLGc9UWEoeSksW0Msd109RW4oe3Byb3A6cyxvbkNoYW5nZTpmLGRlZmF1bHRQcm9wOmQ/PyIiLGNhbGxlcjpYc30pO3JldHVybiBtLmpzeCh4Mix7c2NvcGU6aSxiYXNlSWQ6dGwoKSx2YWx1ZTpDLG9uVmFsdWVDaGFuZ2U6dyxvcmllbnRhdGlvbjpwLGRpcjpnLGFjdGl2YXRpb25Nb2RlOmIsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtkaXI6ZywiZGF0YS1vcmllbnRhdGlvbiI6cCwuLi54LHJlZjp1fSl9KX0sIlRhYnMiKSksQzI9IlRhYnNMaXN0IixUMj12LmZvcndhcmRSZWYoaW8oZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVGFiczppLGxvb3A6cz0hMCwuLi5mfT1vLGQ9S3MoQzIsaSkscD13ZyhpKTtyZXR1cm4gbS5qc3goanMse2FzQ2hpbGQ6ITAsLi4ucCxvcmllbnRhdGlvbjpkLm9yaWVudGF0aW9uLGRpcjpkLmRpcixsb29wOnMsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtyb2xlOiJ0YWJsaXN0IiwiYXJpYS1vcmllbnRhdGlvbiI6ZC5vcmllbnRhdGlvbiwuLi5mLHJlZjp1fSl9KX0sIlRhYnNMaXN0IikpLHcyPSJUYWJzVHJpZ2dlciIsRTI9di5mb3J3YXJkUmVmKGlvKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRhYnM6aSx2YWx1ZTpzLGRpc2FibGVkOmY9ITEsLi4uZH09byxwPUtzKHcyLGkpLHk9d2coaSksYj1RcyhwLmJhc2VJZCxzKSx4PVpzKHAuYmFzZUlkLHMpLGc9cz09PXAudmFsdWU7cmV0dXJuIG0uanN4KE1zLHthc0NoaWxkOiEwLC4uLnksZm9jdXNhYmxlOiFmLGFjdGl2ZTpnLGNoaWxkcmVuOm0uanN4KENlLmJ1dHRvbix7dHlwZToiYnV0dG9uIixyb2xlOiJ0YWIiLCJhcmlhLXNlbGVjdGVkIjpnLCJhcmlhLWNvbnRyb2xzIjp4LCJkYXRhLXN0YXRlIjpnPyJhY3RpdmUiOiJpbmFjdGl2ZSIsImRhdGEtZGlzYWJsZWQiOmY/IiI6dm9pZCAwLGRpc2FibGVkOmYsaWQ6YiwuLi5kLHJlZjp1LG9uTW91c2VEb3duOnVlKG8ub25Nb3VzZURvd24sQz0+eyFmJiZDLmJ1dHRvbj09PTAmJkMuY3RybEtleT09PSExPyhDLmN1cnJlbnRUYXJnZXQuZm9jdXMoKSxwLm9uVmFsdWVDaGFuZ2UocykpOkMucHJldmVudERlZmF1bHQoKX0pLG9uS2V5RG93bjp1ZShvLm9uS2V5RG93bixDPT57Znx8Qy50YXJnZXQhPT1DLmN1cnJlbnRUYXJnZXR8fFsiICIsIkVudGVyIl0uaW5jbHVkZXMoQy5rZXkpJiZwLm9uVmFsdWVDaGFuZ2Uocyl9KSxvbkZvY3VzOnVlKG8ub25Gb2N1cywoKT0+e2NvbnN0IEM9cC5hY3RpdmF0aW9uTW9kZSE9PVRnLk1hbnVhbDshZyYmIWYmJkMmJnAub25WYWx1ZUNoYW5nZShzKX0pfSl9KX0sIlRhYnNUcmlnZ2VyIikpLFIyPSJUYWJzQ29udGVudCIsXzI9di5mb3J3YXJkUmVmKGlvKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRhYnM6aSx2YWx1ZTpzLGZvcmNlTW91bnQ6ZixjaGlsZHJlbjpkLC4uLnB9PW8seT1LcyhSMixpKSxiPVFzKHkuYmFzZUlkLHMpLHg9WnMoeS5iYXNlSWQscyksZz1zPT09eS52YWx1ZSxDPXYudXNlUmVmKGcpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IHc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5DLmN1cnJlbnQ9ITEpO3JldHVybigpPT5jYW5jZWxBbmltYXRpb25GcmFtZSh3KX0sW10pLG0uanN4KG1uLHtwcmVzZW50OmZ8fGcsY2hpbGRyZW46KHtwcmVzZW50Ond9KT0+bS5qc3goQ2UuZGl2LHsiZGF0YS1zdGF0ZSI6Zz8iYWN0aXZlIjoiaW5hY3RpdmUiLCJkYXRhLW9yaWVudGF0aW9uIjp5Lm9yaWVudGF0aW9uLHJvbGU6InRhYnBhbmVsIiwiYXJpYS1sYWJlbGxlZGJ5IjpiLGhpZGRlbjohdyxpZDp4LHRhYkluZGV4OjAsLi4ucCxyZWY6dSxzdHlsZTp7Li4uby5zdHlsZSxhbmltYXRpb25EdXJhdGlvbjpDLmN1cnJlbnQ/IjBzIjp2b2lkIDB9LGNoaWxkcmVuOncmJmR9KX0pfSwiVGFic0NvbnRlbnQiKSk7ZnVuY3Rpb24gUXMoYSxvKXtyZXR1cm5gJHthfS10cmlnZ2VyLSR7b31gfWlvKFFzLCJtYWtlVHJpZ2dlcklkIik7ZnVuY3Rpb24gWnMoYSxvKXtyZXR1cm5gJHthfS1jb250ZW50LSR7b31gfWlvKFpzLCJtYWtlQ29udGVudElkIik7ZnVuY3Rpb24gTzIoe2RlZmF1bHRWYWx1ZTphLHZhbHVlOm8sb25WYWx1ZUNoYW5nZTp1LGNoaWxkcmVuOmksY2xhc3NOYW1lOnN9LGYpe3JldHVybiBtLmpzeChTMix7cmVmOmYsZGVmYXVsdFZhbHVlOmEsdmFsdWU6byxvblZhbHVlQ2hhbmdlOnUsY2xhc3NOYW1lOnMsY2hpbGRyZW46aX0pfWNvbnN0IEVnPXYuZm9yd2FyZFJlZihPMik7RWcuZGlzcGxheU5hbWU9IkxhcmtUYWJzIjtmdW5jdGlvbiBBMih7Y2hpbGRyZW46YSxjbGFzc05hbWU6bywuLi51fSxpKXtyZXR1cm4gbS5qc3goVDIse3JlZjppLGNsYXNzTmFtZTprZSgiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0wLjUiLG8pLC4uLnUsY2hpbGRyZW46YX0pfWNvbnN0IFJnPXYuZm9yd2FyZFJlZihBMik7UmcuZGlzcGxheU5hbWU9IkxhcmtUYWJzLkxpc3QiO2Z1bmN0aW9uIE4yKHt2YWx1ZTphLGRpc2FibGVkOm8sY2hpbGRyZW46dSxjbGFzc05hbWU6aX0scyl7cmV0dXJuIG0uanN4KEUyLHtyZWY6cyx2YWx1ZTphLGRpc2FibGVkOm8sY2xhc3NOYW1lOmtlKCJyZWxhdGl2ZSBmbGV4IGgtWzM0cHhdIGl0ZW1zLWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLWxnIHB4LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjcwMCBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgZGF0YS1bc3RhdGU9YWN0aXZlXTpiZy1sYXJrLWFjY2VudC1zb2Z0IGRhdGEtW3N0YXRlPWFjdGl2ZV06Zm9udC1zZW1pYm9sZCBkYXRhLVtzdGF0ZT1hY3RpdmVdOnRleHQtYnJhbmQtbGluayBhZnRlcjphYnNvbHV0ZSBhZnRlcjppbnNldC14LTIgYWZ0ZXI6Ym90dG9tLTAgYWZ0ZXI6aC1bM3B4XSBhZnRlcjpyb3VuZGVkLWZ1bGwgYWZ0ZXI6YmctYnJhbmQtc2Vjb25kYXJ5IGRhdGEtW3N0YXRlPWluYWN0aXZlXTphZnRlcjpoaWRkZW4gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOnRleHQtbGFyay1uNDAwIixpKSxjaGlsZHJlbjp1fSl9Y29uc3QgX2c9di5mb3J3YXJkUmVmKE4yKTtfZy5kaXNwbGF5TmFtZT0iTGFya1RhYnMuVGFiIjtmdW5jdGlvbiBEMih7dmFsdWU6YSxjaGlsZHJlbjpvLGNsYXNzTmFtZTp1fSxpKXtyZXR1cm4gbS5qc3goXzIse3JlZjppLHZhbHVlOmEsY2xhc3NOYW1lOmtlKCJtdC0zIHRleHQtc20gdGV4dC1sYXJrLW45MDAgb3V0bGluZS1ub25lIix1KSxjaGlsZHJlbjpvfSl9Y29uc3QgT2c9di5mb3J3YXJkUmVmKEQyKTtPZy5kaXNwbGF5TmFtZT0iTGFya1RhYnMuUGFuZWwiO2NvbnN0IEV0PU9iamVjdC5hc3NpZ24oRWcse0xpc3Q6UmcsVGFiOl9nLFBhbmVsOk9nfSk7dmFyIGoyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxNMj0oYSxvKT0+ajIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksQWc9T2JqZWN0LmZyZWV6ZSh7cG9zaXRpb246ImFic29sdXRlIixib3JkZXI6MCx3aWR0aDoxLGhlaWdodDoxLHBhZGRpbmc6MCxtYXJnaW46LTEsb3ZlcmZsb3c6ImhpZGRlbiIsY2xpcDoicmVjdCgwLCAwLCAwLCAwKSIsd2hpdGVTcGFjZToibm93cmFwIix3b3JkV3JhcDoibm9ybWFsIn0pLEZzPXYuZm9yd2FyZFJlZihNMihmdW5jdGlvbihvLHUpe3JldHVybiBtLmpzeChDZS5zcGFuLHsuLi5vLHJlZjp1LHN0eWxlOnsuLi5BZywuLi5vLnN0eWxlfX0pfSwiVmlzdWFsbHlIaWRkZW4iKSksejI9T2JqZWN0LmRlZmluZVByb3BlcnR5LHN0PShhLG8pPT56MihhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxbJHMsdGpdPU10KCJUb29sdGlwIixbZW9dKSxxaT1lbygpLGsyPSJUb29sdGlwUHJvdmlkZXIiLEwyPTcwMCxKcz0idG9vbHRpcC5vcGVuIixbVTIsV3NdPSRzKGsyKSxOZz1zdChhPT57Y29uc3R7X19zY29wZVRvb2x0aXA6byxkZWxheUR1cmF0aW9uOnU9TDIsc2tpcERlbGF5RHVyYXRpb246aT0zMDAsZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ6cz0hMSxjaGlsZHJlbjpmfT1hLGQ9di51c2VSZWYoITApLHA9di51c2VSZWYoITEpLHk9di51c2VSZWYoMCk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgYj15LmN1cnJlbnQ7cmV0dXJuKCk9PndpbmRvdy5jbGVhclRpbWVvdXQoYil9LFtdKSxtLmpzeChVMix7c2NvcGU6byxpc09wZW5EZWxheWVkUmVmOmQsZGVsYXlEdXJhdGlvbjp1LG9uT3Blbjp2LnVzZUNhbGxiYWNrKCgpPT57aTw9MHx8KHdpbmRvdy5jbGVhclRpbWVvdXQoeS5jdXJyZW50KSxkLmN1cnJlbnQ9ITEpfSxbaV0pLG9uQ2xvc2U6di51c2VDYWxsYmFjaygoKT0+e2k8PTB8fCh3aW5kb3cuY2xlYXJUaW1lb3V0KHkuY3VycmVudCkseS5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5kLmN1cnJlbnQ9ITAsaSkpfSxbaV0pLGlzUG9pbnRlckluVHJhbnNpdFJlZjpwLG9uUG9pbnRlckluVHJhbnNpdENoYW5nZTp2LnVzZUNhbGxiYWNrKGI9PntwLmN1cnJlbnQ9Yn0sW10pLGRpc2FibGVIb3ZlcmFibGVDb250ZW50OnMsY2hpbGRyZW46Zn0pfSwiVG9vbHRpcFByb3ZpZGVyIiksZWY9IlRvb2x0aXAiLFtIMixtcl09JHMoZWYpLEIyPXN0KGE9Pntjb25zdHtfX3Njb3BlVG9vbHRpcDpvLGNoaWxkcmVuOnUsb3BlbjppLGRlZmF1bHRPcGVuOnMsb25PcGVuQ2hhbmdlOmYsZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ6ZCxkZWxheUR1cmF0aW9uOnB9PWEseT1XcyhlZixhLl9fc2NvcGVUb29sdGlwKSxiPXFpKG8pLFt4LGddPXYudXNlU3RhdGUobnVsbCksW0Msd109di51c2VTdGF0ZSh2b2lkIDApLFI9dGwoKSxFPXYudXNlUmVmKDApLFQ9ZD8/eS5kaXNhYmxlSG92ZXJhYmxlQ29udGVudCxPPXA/P3kuZGVsYXlEdXJhdGlvbixBPXYudXNlUmVmKCExKSxbTixNXT1Fbih7cHJvcDppLGRlZmF1bHRQcm9wOnM/PyExLG9uQ2hhbmdlOnN0KFc9PntXPyh5Lm9uT3BlbigpLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KEpzKSkpOnkub25DbG9zZSgpLGY/LihXKX0sIm9uQ2hhbmdlIiksY2FsbGVyOmVmfSksWT12LnVzZU1lbW8oKCk9Pk4/QS5jdXJyZW50PyJkZWxheWVkLW9wZW4iOiJpbnN0YW50LW9wZW4iOiJjbG9zZWQiLFtOXSksSD12LnVzZUNhbGxiYWNrKCgpPT57d2luZG93LmNsZWFyVGltZW91dChFLmN1cnJlbnQpLEUuY3VycmVudD0wLEEuY3VycmVudD0hMSxNKCEwKX0sW01dKSxVPXYudXNlQ2FsbGJhY2soKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PTAsTSghMSl9LFtNXSksQj12LnVzZUNhbGxiYWNrKCgpPT57d2luZG93LmNsZWFyVGltZW91dChFLmN1cnJlbnQpLEUuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e0EuY3VycmVudD0hMCxNKCEwKSxFLmN1cnJlbnQ9MH0sTyl9LFtPLE1dKTt2LnVzZUVmZmVjdCgoKT0+KCk9PntFLmN1cnJlbnQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PTApfSxbXSk7Y29uc3QgSj1DPz9SO3JldHVybiBtLmpzeCh3cyx7Li4uYixjaGlsZHJlbjptLmpzeChIMix7c2NvcGU6byxjb250ZW50SWQ6SixzZXRDb250ZW50SWQ6dyxvcGVuOk4sc3RhdGVBdHRyaWJ1dGU6WSx0cmlnZ2VyOngsb25UcmlnZ2VyQ2hhbmdlOmcsb25UcmlnZ2VyRW50ZXI6di51c2VDYWxsYmFjaygoKT0+e3kuaXNPcGVuRGVsYXllZFJlZi5jdXJyZW50P0IoKTpIKCl9LFt5LmlzT3BlbkRlbGF5ZWRSZWYsQixIXSksb25UcmlnZ2VyTGVhdmU6di51c2VDYWxsYmFjaygoKT0+e1Q/VSgpOih3aW5kb3cuY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PTApfSxbVSxUXSksb25PcGVuOkgsb25DbG9zZTpVLGRpc2FibGVIb3ZlcmFibGVDb250ZW50OlQsY2hpbGRyZW46dX0pfSl9LCJUb29sdGlwIiksRGc9IlRvb2x0aXBUcmlnZ2VyIixJMj12LmZvcndhcmRSZWYoc3QoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9vbHRpcDppLCJhcmlhLWRlc2NyaWJlZGJ5IjpzLC4uLmZ9PW8sZD1tcihEZyxpKSxwPVdzKERnLGkpLHk9cWkoaSksYj12LnVzZVJlZihudWxsKSx4PUVlKHUsYixkLm9uVHJpZ2dlckNoYW5nZSksZz12LnVzZVJlZighMSksQz12LnVzZVJlZighMSksdz12LnVzZUNhbGxiYWNrKCgpPT5nLmN1cnJlbnQ9ITEsW10pO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+KCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdyksW3ddKSxtLmpzeChFcyx7YXNDaGlsZDohMCwuLi55LGNoaWxkcmVuOm0uanN4KENlLmJ1dHRvbix7ImFyaWEtZGVzY3JpYmVkYnkiOmQub3Blbj9JZyhzLGQuY29udGVudElkKTpzLCJkYXRhLXN0YXRlIjpkLnN0YXRlQXR0cmlidXRlLC4uLmYscmVmOngsb25Qb2ludGVyTW92ZTp1ZShvLm9uUG9pbnRlck1vdmUsUj0+e1IucG9pbnRlclR5cGUhPT0idG91Y2giJiYhQy5jdXJyZW50JiYhcC5pc1BvaW50ZXJJblRyYW5zaXRSZWYuY3VycmVudCYmKGQub25UcmlnZ2VyRW50ZXIoKSxDLmN1cnJlbnQ9ITApfSksb25Qb2ludGVyTGVhdmU6dWUoby5vblBvaW50ZXJMZWF2ZSwoKT0+e2Qub25UcmlnZ2VyTGVhdmUoKSxDLmN1cnJlbnQ9ITF9KSxvblBvaW50ZXJEb3duOnVlKG8ub25Qb2ludGVyRG93biwoKT0+e2Qub3BlbiYmZC5vbkNsb3NlKCksZy5jdXJyZW50PSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdyx7b25jZTohMH0pfSksb25Gb2N1czp1ZShvLm9uRm9jdXMsKCk9PntnLmN1cnJlbnR8fGQub25PcGVuKCl9KSxvbkJsdXI6dWUoby5vbkJsdXIsZC5vbkNsb3NlKSxvbkNsaWNrOnVlKG8ub25DbGljayxkLm9uQ2xvc2UpfSl9KX0sIlRvb2x0aXBUcmlnZ2VyIikpLGpnPSJUb29sdGlwUG9ydGFsIixbUDIsRzJdPSRzKGpnLHtmb3JjZU1vdW50OnZvaWQgMH0pLFYyPXN0KGE9Pntjb25zdHtfX3Njb3BlVG9vbHRpcDpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjppLGNvbnRhaW5lcjpzfT1hLGY9bXIoamcsbyk7cmV0dXJuIG0uanN4KFAyLHtzY29wZTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjptLmpzeChtbix7cHJlc2VudDp1fHxmLm9wZW4sY2hpbGRyZW46bS5qc3goc3Ise2FzQ2hpbGQ6ITAsY29udGFpbmVyOnMsY2hpbGRyZW46aX0pfSl9KX0sIlRvb2x0aXBQb3J0YWwiKSxocj0iVG9vbHRpcENvbnRlbnQiLFkyPXYuZm9yd2FyZFJlZihzdChmdW5jdGlvbihvLHUpe2NvbnN0IGk9RzIoaHIsby5fX3Njb3BlVG9vbHRpcCkse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsc2lkZTpmPSJ0b3AiLC4uLmR9PW8scD1tcihocixvLl9fc2NvcGVUb29sdGlwKTtyZXR1cm4gbS5qc3gobW4se3ByZXNlbnQ6c3x8cC5vcGVuLGNoaWxkcmVuOnAuZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ/bS5qc3goTWcse3NpZGU6ZiwuLi5kLHJlZjp1fSk6bS5qc3gocTIse3NpZGU6ZiwuLi5kLHJlZjp1fSl9KX0sIlRvb2x0aXBDb250ZW50IikpLHEyPXYuZm9yd2FyZFJlZihzdChmdW5jdGlvbihvLHUpe2NvbnN0IGk9bXIoaHIsby5fX3Njb3BlVG9vbHRpcCkscz1XcyhocixvLl9fc2NvcGVUb29sdGlwKSxmPXYudXNlUmVmKG51bGwpLGQ9RWUodSxmKSxbcCx5XT12LnVzZVN0YXRlKG51bGwpLHt0cmlnZ2VyOmIsb25DbG9zZTp4fT1pLGc9Zi5jdXJyZW50LHtvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2U6Q309cyx3PXYudXNlQ2FsbGJhY2soKCk9Pnt5KG51bGwpLEMoITEpfSxbQ10pLFI9di51c2VDYWxsYmFjaygoRSxUKT0+e2NvbnN0IE89RS5jdXJyZW50VGFyZ2V0LEE9e3g6RS5jbGllbnRYLHk6RS5jbGllbnRZfSxOPXpnKEEsTy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksTT1rZyhBLE4pLFk9TGcoVC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksSD1IZyhbLi4uTSwuLi5ZXSk7eShIKSxDKCEwKX0sW0NdKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PigpPT53KCksW3ddKSx2LnVzZUVmZmVjdCgoKT0+e2lmKGImJmcpe2NvbnN0IEU9c3QoTz0+UihPLGcpLCJoYW5kbGVUcmlnZ2VyTGVhdmUiKSxUPXN0KE89PlIoTyxiKSwiaGFuZGxlQ29udGVudExlYXZlIik7cmV0dXJuIGIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixFKSxnLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsVCksKCk9PntiLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsRSksZy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFQpfX19LFtiLGcsUix3XSksdi51c2VFZmZlY3QoKCk9PntpZihwKXtjb25zdCBFPXN0KFQ9Pntjb25zdCBPPVQudGFyZ2V0LEE9e3g6VC5jbGllbnRYLHk6VC5jbGllbnRZfSxOPWI/LmNvbnRhaW5zKE8pfHxnPy5jb250YWlucyhPKSxNPSFVZyhBLHApO04/dygpOk0mJih3KCkseCgpKX0sImhhbmRsZVRyYWNrUG9pbnRlckdyYWNlIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixFKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEUpfX0sW2IsZyxwLHgsd10pLG0uanN4KE1nLHsuLi5vLHJlZjpkfSl9LCJUb29sdGlwQ29udGVudEhvdmVyYWJsZSIpKSxYMj1TcCgiVG9vbHRpcENvbnRlbnQiKSxNZz12LmZvcndhcmRSZWYoc3QoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9vbHRpcDppLGNoaWxkcmVuOnMsImFyaWEtbGFiZWwiOmYsaWQ6ZCxvbkVzY2FwZUtleURvd246cCxvblBvaW50ZXJEb3duT3V0c2lkZTp5LC4uLmJ9PW8seD1tcihocixpKSxnPXFpKGkpLHtvbkNsb3NlOkN9PXgsW3csUl09di51c2VTdGF0ZShudWxsKSxFPUVlKHUsUik7dXModyksdi51c2VFZmZlY3QoKCk9Pihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKEpzLEMpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEpzLEMpKSxbQ10pLHYudXNlRWZmZWN0KCgpPT57aWYoeC50cmlnZ2VyKXtjb25zdCBPPXN0KEE9PntBLnRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJkEudGFyZ2V0LmNvbnRhaW5zKHgudHJpZ2dlcikmJkMoKX0sImhhbmRsZVNjcm9sbCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixPLHtjYXB0dXJlOiEwfSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLE8se2NhcHR1cmU6ITB9KX19LFt4LnRyaWdnZXIsQ10pO2NvbnN0e3NldENvbnRlbnRJZDpUfT14O3JldHVybiBudCgoKT0+KFQoZCksKCk9PntUKHZvaWQgMCl9KSxbZCxUXSksbS5qc3gob3Ise2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiExLG9uRXNjYXBlS2V5RG93bjpwLG9uUG9pbnRlckRvd25PdXRzaWRlOnksb25Gb2N1c091dHNpZGU6Tz0+Ty5wcmV2ZW50RGVmYXVsdCgpLG9uRGlzbWlzczpDLGNoaWxkcmVuOm0uanN4cyhScyx7ImRhdGEtc3RhdGUiOnguc3RhdGVBdHRyaWJ1dGUscm9sZTpmP3ZvaWQgMDoidG9vbHRpcCIsaWQ6Zj92b2lkIDA6eC5jb250ZW50SWQsLi4uZywuLi5iLHJlZjpFLHN0eWxlOnsuLi5iLnN0eWxlLCItLXJhZGl4LXRvb2x0aXAtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjoidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pIiwiLS1yYWRpeC10b29sdGlwLWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCkiLCItLXJhZGl4LXRvb2x0aXAtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpIiwiLS1yYWRpeC10b29sdGlwLXRyaWdnZXItd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKSIsIi0tcmFkaXgtdG9vbHRpcC10cmlnZ2VyLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0KSJ9LGNoaWxkcmVuOlttLmpzeChYMix7Y2hpbGRyZW46c30pLGY/bS5qc3goRnMse2lkOnguY29udGVudElkLHJvbGU6InRvb2x0aXAiLGNoaWxkcmVuOmZ9KTpudWxsXX0pfSl9LCJUb29sdGlwQ29udGVudEltcGwiKSksSzI9di5mb3J3YXJkUmVmKHN0KGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRvb2x0aXA6aSwuLi5zfT1vLGY9cWkoaSk7cmV0dXJuIG0uanN4KEx3LHsuLi5mLC4uLnMscmVmOnV9KX0sIlRvb2x0aXBBcnJvdyIpKTtmdW5jdGlvbiB6ZyhhLG8pe2NvbnN0IHU9TWF0aC5hYnMoby50b3AtYS55KSxpPU1hdGguYWJzKG8uYm90dG9tLWEueSkscz1NYXRoLmFicyhvLnJpZ2h0LWEueCksZj1NYXRoLmFicyhvLmxlZnQtYS54KTtzd2l0Y2goTWF0aC5taW4odSxpLHMsZikpe2Nhc2UgZjpyZXR1cm4ibGVmdCI7Y2FzZSBzOnJldHVybiJyaWdodCI7Y2FzZSB1OnJldHVybiJ0b3AiO2Nhc2UgaTpyZXR1cm4iYm90dG9tIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19c3QoemcsImdldEV4aXRTaWRlRnJvbVJlY3QiKTtmdW5jdGlvbiBrZyhhLG8sdT01KXtjb25zdCBpPVtdO3N3aXRjaChvKXtjYXNlInRvcCI6aS5wdXNoKHt4OmEueC11LHk6YS55K3V9LHt4OmEueCt1LHk6YS55K3V9KTticmVhaztjYXNlImJvdHRvbSI6aS5wdXNoKHt4OmEueC11LHk6YS55LXV9LHt4OmEueCt1LHk6YS55LXV9KTticmVhaztjYXNlImxlZnQiOmkucHVzaCh7eDphLngrdSx5OmEueS11fSx7eDphLngrdSx5OmEueSt1fSk7YnJlYWs7Y2FzZSJyaWdodCI6aS5wdXNoKHt4OmEueC11LHk6YS55LXV9LHt4OmEueC11LHk6YS55K3V9KTticmVha31yZXR1cm4gaX1zdChrZywiZ2V0UGFkZGVkRXhpdFBvaW50cyIpO2Z1bmN0aW9uIExnKGEpe2NvbnN0e3RvcDpvLHJpZ2h0OnUsYm90dG9tOmksbGVmdDpzfT1hO3JldHVyblt7eDpzLHk6b30se3g6dSx5Om99LHt4OnUseTppfSx7eDpzLHk6aX1dfXN0KExnLCJnZXRQb2ludHNGcm9tUmVjdCIpO2Z1bmN0aW9uIFVnKGEsbyl7Y29uc3R7eDp1LHk6aX09YTtsZXQgcz0hMTtmb3IobGV0IGY9MCxkPW8ubGVuZ3RoLTE7ZjxvLmxlbmd0aDtkPWYrKyl7Y29uc3QgcD1vW2ZdLHk9b1tkXSxiPXAueCx4PXAueSxnPXkueCxDPXkueTt4PmkhPUM+aSYmdTwoZy1iKSooaS14KS8oQy14KStiJiYocz0hcyl9cmV0dXJuIHN9c3QoVWcsImlzUG9pbnRJblBvbHlnb24iKTtmdW5jdGlvbiBIZyhhKXtjb25zdCBvPWEuc2xpY2UoKTtyZXR1cm4gby5zb3J0KCh1LGkpPT51Lng8aS54Py0xOnUueD5pLng/MTp1Lnk8aS55Py0xOnUueT5pLnk/MTowKSxCZyhvKX1zdChIZywiZ2V0SHVsbCIpO2Z1bmN0aW9uIEJnKGEpe2lmKGEubGVuZ3RoPD0xKXJldHVybiBhLnNsaWNlKCk7Y29uc3Qgbz1bXTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl7Y29uc3Qgcz1hW2ldO2Zvcig7by5sZW5ndGg+PTI7KXtjb25zdCBmPW9bby5sZW5ndGgtMV0sZD1vW28ubGVuZ3RoLTJdO2lmKChmLngtZC54KSoocy55LWQueSk+PShmLnktZC55KSoocy54LWQueCkpby5wb3AoKTtlbHNlIGJyZWFrfW8ucHVzaChzKX1vLnBvcCgpO2NvbnN0IHU9W107Zm9yKGxldCBpPWEubGVuZ3RoLTE7aT49MDtpLS0pe2NvbnN0IHM9YVtpXTtmb3IoO3UubGVuZ3RoPj0yOyl7Y29uc3QgZj11W3UubGVuZ3RoLTFdLGQ9dVt1Lmxlbmd0aC0yXTtpZigoZi54LWQueCkqKHMueS1kLnkpPj0oZi55LWQueSkqKHMueC1kLngpKXUucG9wKCk7ZWxzZSBicmVha311LnB1c2gocyl9cmV0dXJuIHUucG9wKCksby5sZW5ndGg9PT0xJiZ1Lmxlbmd0aD09PTEmJm9bMF0ueD09PXVbMF0ueCYmb1swXS55PT09dVswXS55P286by5jb25jYXQodSl9c3QoQmcsImdldEh1bGxQcmVzb3J0ZWQiKTtmdW5jdGlvbiBJZyguLi5hKXtjb25zdCBvPW5ldyBTZXQ7Zm9yKGNvbnN0IHUgb2YgYSlpZih0eXBlb2YgdT09InN0cmluZyIpZm9yKGNvbnN0IGkgb2YgU3RyaW5nKHUpLnRyaW0oKS5zcGxpdCgvXHMrLykpaSYmby5hZGQoaSk7cmV0dXJuIG8uc2l6ZT4wP0FycmF5LmZyb20obykuam9pbigiICIpOnZvaWQgMH1zdChJZywiY29uY2F0QXJpYURlc2NyaWJlZGJ5Iik7Y29uc3QgUGc9di5jcmVhdGVDb250ZXh0KCExKSxRMj0oe2NoaWxkcmVuOmEsZGVsYXlEdXJhdGlvbjpvPTMwMCxza2lwRGVsYXlEdXJhdGlvbjp1fSk9Pm0uanN4KFBnLlByb3ZpZGVyLHt2YWx1ZTohMCxjaGlsZHJlbjptLmpzeChOZyx7ZGVsYXlEdXJhdGlvbjpvLHNraXBEZWxheUR1cmF0aW9uOnUsY2hpbGRyZW46YX0pfSksWGk9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKHtjb250ZW50Om8sY2hpbGRyZW46dSxzaWRlOmk9InRvcCIsZGVsYXlEdXJhdGlvbjpzLGNsYXNzTmFtZTpmfSxkKXtjb25zdCBwPXYudXNlQ29udGV4dChQZykseT1tLmpzeHMoQjIse2RlbGF5RHVyYXRpb246cyxjaGlsZHJlbjpbbS5qc3goSTIse2FzQ2hpbGQ6ITAsY2hpbGRyZW46dX0pLG0uanN4KFYyLHtjaGlsZHJlbjptLmpzeHMoWTIse3JlZjpkLHNpZGU6aSxzaWRlT2Zmc2V0OjYsY2xhc3NOYW1lOmtlKCJyb3VuZGVkLXhsIGJnLWxhcmstbjkwMCBweC0yIHB5LTEgdGV4dC14cyB0ZXh0LXdoaXRlIGRhdGEtW3N0YXRlPWRlbGF5ZWQtb3Blbl06YW5pbS1vdmVybGF5LWluIixmKSxjaGlsZHJlbjpbbyxtLmpzeChLMix7Y2xhc3NOYW1lOiJmaWxsLWxhcmstbjkwMCJ9KV19KX0pXX0pO3JldHVybiBwP3k6bS5qc3goTmcse2RlbGF5RHVyYXRpb246MzAwLGNoaWxkcmVuOnl9KX0pO1hpLmRpc3BsYXlOYW1lPSJMYXJrVG9vbHRpcCI7dmFyIFoyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxGMj0oYSxvKT0+WjIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gdGYoYSxbbyx1XSl7cmV0dXJuIE1hdGgubWluKHUsTWF0aC5tYXgobyxhKSl9RjIodGYsImNsYW1wIik7dmFyICQyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWZT0oYSxvKT0+JDIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksR2c9e0l0ZW1BbGlnbmVkOiJpdGVtLWFsaWduZWQiLFBvcHBlcjoicG9wcGVyIn0sSjI9e1JUTDoicnRsIn0sVzI9WyIgIiwiRW50ZXIiLCJBcnJvd1VwIiwiQXJyb3dEb3duIl0sZVI9WyIgIiwiRW50ZXIiXSxjbz0iU2VsZWN0IixbS2ksbmYsdFJdPWFyKGNvKSxbQ2EsbmpdPU10KGNvLFt0Uixlb10pLGxmPWVvKCksW25SLExsXT1DYShjbyksW2xSLGFSXT1DYShjbyk7ZnVuY3Rpb24gVmcoYSl7Y29uc3R7X19zY29wZVNlbGVjdDpvLGNoaWxkcmVuOnUsb3BlbjppLGRlZmF1bHRPcGVuOnMsb25PcGVuQ2hhbmdlOmYsdmFsdWU6ZCxkZWZhdWx0VmFsdWU6cCxvblZhbHVlQ2hhbmdlOnksZGlyOmIsbmFtZTp4LGF1dG9Db21wbGV0ZTpnLGRpc2FibGVkOkMscmVxdWlyZWQ6dyxmb3JtOlIsaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6RX09YSxUPWxmKG8pLFtPLEFdPXYudXNlU3RhdGUobnVsbCksW04sTV09di51c2VTdGF0ZShudWxsKSxbWSxIXT12LnVzZVN0YXRlKCExKSxVPVFhKGIpLFtCLEpdPUVuKHtwcm9wOmksZGVmYXVsdFByb3A6cz8/ITEsb25DaGFuZ2U6ZixjYWxsZXI6Y299KSxbVyxuZV09RW4oe3Byb3A6ZCxkZWZhdWx0UHJvcDpwLG9uQ2hhbmdlOnksY2FsbGVyOmNvfSksZWU9di51c2VSZWYobnVsbCksY2U9di51c2VSZWYoITEpLFttZSxoZV09di51c2VTdGF0ZShudWxsKSxQPVZlKEs9PntoZSh7dmFsdWU6SyxoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjpjZS5jdXJyZW50fSksbmUoSyl9LCJoYW5kbGVVc2VyU2VsZWN0IiksJD12LnVzZVJlZihXKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IEs9Uj9PPy5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFIpOk8/LmZvcm07aWYoSyBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCl7Y29uc3QgYWU9VmUoKCk9Pm5lKCQuY3VycmVudCksInJlc2V0Iik7cmV0dXJuIEsuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXQiLGFlKSwoKT0+Sy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNldCIsYWUpfX0sW1IsTyxuZV0pO2NvbnN0IEY9Tz8hIVJ8fCEhTy5jbG9zZXN0KCJmb3JtIik6ITAsW3JlLHFdPXYudXNlU3RhdGUobmV3IFNldCkseGU9dGwoKSxqZT1BcnJheS5mcm9tKHJlKS5tYXAoSz0+Sy5wcm9wcy52YWx1ZSkuam9pbigiOyIpLFllPXYudXNlQ2FsbGJhY2soSz0+e3EoYWU9Pm5ldyBTZXQoYWUpLmFkZChLKSl9LFtdKSxEPXYudXNlQ2FsbGJhY2soSz0+e3EoYWU9Pntjb25zdCB5ZT1uZXcgU2V0KGFlKTtyZXR1cm4geWUuZGVsZXRlKEspLHllfSl9LFtdKSxYPXtyZXF1aXJlZDp3LHRyaWdnZXI6TyxvblRyaWdnZXJDaGFuZ2U6QSx2YWx1ZU5vZGU6TixvblZhbHVlTm9kZUNoYW5nZTpNLHZhbHVlTm9kZUhhc0NoaWxkcmVuOlksb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTpILGNvbnRlbnRJZDp4ZSx2YWx1ZTpXLG9uVmFsdWVDaGFuZ2U6bmUsaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb25SZWY6Y2UsdXNlclNlbGVjdGlvbjptZSxvblVzZXJTZWxlY3Q6UCxvcGVuOkIsb25PcGVuQ2hhbmdlOkosZGlyOlUsdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOmVlLGRpc2FibGVkOkMsbmFtZTp4LGF1dG9Db21wbGV0ZTpnLGZvcm06UixuYXRpdmVPcHRpb25zOnJlLG5hdGl2ZVNlbGVjdEtleTpqZSxpc0Zvcm1Db250cm9sOkZ9O3JldHVybiBtLmpzeCh3cyx7Li4uVCxjaGlsZHJlbjptLmpzeChuUix7c2NvcGU6bywuLi5YLGNoaWxkcmVuOm0uanN4KEtpLlByb3ZpZGVyLHtzY29wZTpvLGNoaWxkcmVuOm0uanN4KGxSLHtzY29wZTpvLG9uTmF0aXZlT3B0aW9uQWRkOlllLG9uTmF0aXZlT3B0aW9uUmVtb3ZlOkQsY2hpbGRyZW46UWcoRSk/RShYKTp1fSl9KX0pfSl9VmUoVmcsIlNlbGVjdFByb3ZpZGVyIik7dmFyIG9SPVZlKGE9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om8sY2hpbGRyZW46dSwuLi5pfT1hO3JldHVybiBtLmpzeChWZyx7X19zY29wZVNlbGVjdDpvLC4uLmksaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6KHtpc0Zvcm1Db250cm9sOnN9KT0+bS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOlt1LHM/bS5qc3goTlIse19fc2NvcGVTZWxlY3Q6b30pOm51bGxdfSl9KX0sIlNlbGVjdCIpLHJSPSJTZWxlY3RUcmlnZ2VyIixpUj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksZGlzYWJsZWQ6cz0hMSwuLi5mfT1vLGQ9bGYoaSkscD1MbChyUixpKSx5PXAuZGlzYWJsZWR8fHMsYj1FZSh1LHAub25UcmlnZ2VyQ2hhbmdlKSx4PW5mKGkpLGc9di51c2VSZWYoInRvdWNoIiksW0MsdyxSXT1vZihUPT57Y29uc3QgTz14KCkuZmlsdGVyKE09PiFNLmRpc2FibGVkKSxBPU8uZmluZChNPT5NLnZhbHVlPT09cC52YWx1ZSksTj1yZihPLFQsQSk7TiE9PXZvaWQgMCYmcC5vblVzZXJTZWxlY3QoTi52YWx1ZSl9KSxFPVZlKFQ9Pnt5fHwocC5vbk9wZW5DaGFuZ2UoITApLFIoKSksVCYmKHAudHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ9e3g6TWF0aC5yb3VuZChULnBhZ2VYKSx5Ok1hdGgucm91bmQoVC5wYWdlWSl9KX0sImhhbmRsZU9wZW4iKTtyZXR1cm4gbS5qc3goRXMse2FzQ2hpbGQ6ITAsLi4uZCxjaGlsZHJlbjptLmpzeChDZS5idXR0b24se3R5cGU6ImJ1dHRvbiIscm9sZToiY29tYm9ib3giLCJhcmlhLWNvbnRyb2xzIjpwLm9wZW4/cC5jb250ZW50SWQ6dm9pZCAwLCJhcmlhLWV4cGFuZGVkIjpwLm9wZW4sImFyaWEtcmVxdWlyZWQiOnAucmVxdWlyZWQsImFyaWEtYXV0b2NvbXBsZXRlIjoibm9uZSIsZGlyOnAuZGlyLCJkYXRhLXN0YXRlIjpwLm9wZW4/Im9wZW4iOiJjbG9zZWQiLGRpc2FibGVkOnksImRhdGEtZGlzYWJsZWQiOnk/IiI6dm9pZCAwLCJkYXRhLXBsYWNlaG9sZGVyIjpwcihwLnZhbHVlKT8iIjp2b2lkIDAsLi4uZixyZWY6YixvbkNsaWNrOnVlKGYub25DbGljayxUPT57VC5jdXJyZW50VGFyZ2V0LmZvY3VzKCksZy5jdXJyZW50IT09Im1vdXNlIiYmRShUKX0pLG9uUG9pbnRlckRvd246dWUoZi5vblBvaW50ZXJEb3duLFQ9PntnLmN1cnJlbnQ9VC5wb2ludGVyVHlwZTtjb25zdCBPPVQudGFyZ2V0O08uaGFzUG9pbnRlckNhcHR1cmUoVC5wb2ludGVySWQpJiZPLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShULnBvaW50ZXJJZCksVC5idXR0b249PT0wJiZULmN0cmxLZXk9PT0hMSYmVC5wb2ludGVyVHlwZT09PSJtb3VzZSImJihFKFQpLFQucHJldmVudERlZmF1bHQoKSl9KSxvbktleURvd246dWUoZi5vbktleURvd24sVD0+e2NvbnN0IE89Qy5jdXJyZW50IT09IiI7IShULmN0cmxLZXl8fFQuYWx0S2V5fHxULm1ldGFLZXkpJiZULmtleS5sZW5ndGg9PT0xJiYocC5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZi5jdXJyZW50PVQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSx3KFQua2V5KSksIShPJiZULmtleT09PSIgIikmJlcyLmluY2x1ZGVzKFQua2V5KSYmKEUoKSxULnByZXZlbnREZWZhdWx0KCkpfSl9KX0pfSwiU2VsZWN0VHJpZ2dlciIpKSxjUj0iU2VsZWN0VmFsdWUiLHVSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVTZWxlY3Q6aSxjbGFzc05hbWU6cyxzdHlsZTpmLGNoaWxkcmVuOmQscGxhY2Vob2xkZXI6cD0iIiwuLi55fT1vLGI9TGwoY1IsaSkse29uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2U6eH09YixnPWQhPT12b2lkIDAsQz1FZSh1LGIub25WYWx1ZU5vZGVDaGFuZ2UpO250KCgpPT57eChnKX0sW3gsZ10pO2NvbnN0IHc9cHIoYi52YWx1ZSk7cmV0dXJuIG0uanN4KENlLnNwYW4sey4uLnksYXNDaGlsZDp3PyExOnkuYXNDaGlsZCxyZWY6QyxzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOm0uanN4KHYuRnJhZ21lbnQse2NoaWxkcmVuOnc/cDpkfSx3PyJwbGFjZWhvbGRlciI6InZhbHVlIil9KX0sIlNlbGVjdFZhbHVlIikpLHNSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVTZWxlY3Q6aSxjaGlsZHJlbjpzLC4uLmZ9PW87cmV0dXJuIG0uanN4KENlLnNwYW4seyJhcmlhLWhpZGRlbiI6ITAsLi4uZixyZWY6dSxjaGlsZHJlbjpzfHwi4pa8In0pfSwiU2VsZWN0SWNvbiIpKSxmUj0iU2VsZWN0UG9ydGFsIixbZFIsbVJdPUNhKGZSLHtmb3JjZU1vdW50OnZvaWQgMH0pLGhSPVZlKGE9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om8sZm9yY2VNb3VudDp1LC4uLml9PWE7cmV0dXJuIG0uanN4KGRSLHtzY29wZTphLl9fc2NvcGVTZWxlY3QsZm9yY2VNb3VudDp1LGNoaWxkcmVuOm0uanN4KHNyLHthc0NoaWxkOiEwLC4uLml9KX0pfSwiU2VsZWN0UG9ydGFsIiksVGE9IlNlbGVjdENvbnRlbnQiLHBSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0IGk9bVIoVGEsby5fX3Njb3BlU2VsZWN0KSx7Zm9yY2VNb3VudDpzPWkuZm9yY2VNb3VudCwuLi5mfT1vLGQ9TGwoVGEsby5fX3Njb3BlU2VsZWN0KSxbcCx5XT12LnVzZVN0YXRlKCk7cmV0dXJuIG50KCgpPT57eShuZXcgRG9jdW1lbnRGcmFnbWVudCl9LFtdKSxtLmpzeChtbix7cHJlc2VudDpzfHxkLm9wZW4sY2hpbGRyZW46KHtwcmVzZW50OmJ9KT0+Yj9tLmpzeCh5Uix7Li4uZixyZWY6dX0pOm0uanN4KHZSLHsuLi5mLGZyYWdtZW50OnB9KX0pfSwiU2VsZWN0Q29udGVudCIpKSx2Uj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksY2hpbGRyZW46cyxmcmFnbWVudDpmfT1vO3JldHVybiBmP1phLmNyZWF0ZVBvcnRhbChtLmpzeChZZyx7c2NvcGU6aSxjaGlsZHJlbjptLmpzeChLaS5TbG90LHtzY29wZTppLGNoaWxkcmVuOm0uanN4KCJkaXYiLHtyZWY6dSxjaGlsZHJlbjpzfSl9KX0pLGYpOm51bGx9LCJTZWxlY3RDb250ZW50RnJhZ21lbnQiKSksUm49MTAsW1lnLFFpXT1DYShUYSksZ1I9TG4oIlNlbGVjdENvbnRlbnQuUmVtb3ZlU2Nyb2xsIikseVI9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppfT1vLHtwb3NpdGlvbjpzPUdnLkl0ZW1BbGlnbmVkLG9uQ2xvc2VBdXRvRm9jdXM6ZixvbkVzY2FwZUtleURvd246ZCxvblBvaW50ZXJEb3duT3V0c2lkZTpwLHNpZGU6eSxzaWRlT2Zmc2V0OmIsYWxpZ246eCxhbGlnbk9mZnNldDpnLGFycm93UGFkZGluZzpDLGNvbGxpc2lvbkJvdW5kYXJ5OncsY29sbGlzaW9uUGFkZGluZzpSLHN0aWNreTpFLGhpZGVXaGVuRGV0YWNoZWQ6VCxhdm9pZENvbGxpc2lvbnM6TywuLi5BfT1vLE49TGwoVGEsaSksW00sWV09di51c2VTdGF0ZShudWxsKSxbSCxVXT12LnVzZVN0YXRlKG51bGwpLEI9RWUodSxZKSxbSixXXT12LnVzZVN0YXRlKG51bGwpLFtuZSxlZV09di51c2VTdGF0ZShudWxsKSxjZT1uZihpKSxbbWUsaGVdPXYudXNlU3RhdGUoITEpLFA9di51c2VSZWYoITEpLCQ9di51c2VSZWYoITEpLEY9di51c2VSZWYoITEpO3YudXNlRWZmZWN0KCgpPT57aWYoTSlyZXR1cm4gTHMoTSl9LFtNXSkscnIoKTtjb25zdCByZT12LnVzZUNhbGxiYWNrKGxlPT57Y29uc3RbdGUsLi4uaWVdPWNlKCkubWFwKFJlPT5SZS5yZWYuY3VycmVudCksW2JlXT1pZS5zbGljZSgtMSksd2U9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgUmUgb2YgbGUpaWYoUmU9PT13ZXx8KFJlPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QifSksUmU9PT10ZSYmSCYmKEguc2Nyb2xsVG9wPTApLFJlPT09YmUmJkgmJihILnNjcm9sbFRvcD1ILnNjcm9sbEhlaWdodCksUmU/LmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXdlKSlyZXR1cm59LFtjZSxIXSkscT12LnVzZUNhbGxiYWNrKCgpPT5yZShbSixNXSksW3JlLEosTV0pO3YudXNlRWZmZWN0KCgpPT57bWUmJnEoKX0sW21lLHFdKTtjb25zdHtvbk9wZW5DaGFuZ2U6eGUsdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOmplfT1OO3YudXNlRWZmZWN0KCgpPT57aWYoTSl7bGV0IGxlPXt4OjAseTowfTtjb25zdCB0ZT1WZShiZT0+e2xlPXt4Ok1hdGguYWJzKE1hdGgucm91bmQoYmUucGFnZVgpLShqZS5jdXJyZW50Py54Pz8wKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKGJlLnBhZ2VZKS0oamUuY3VycmVudD8ueT8/MCkpfX0sImhhbmRsZVBvaW50ZXJNb3ZlIiksaWU9VmUoYmU9PntsZS54PD0xMCYmbGUueTw9MTA/YmUucHJldmVudERlZmF1bHQoKTpiZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyhNKXx8eGUoITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0ZSksamUuY3VycmVudD1udWxsfSwiaGFuZGxlUG9pbnRlclVwIik7cmV0dXJuIGplLmN1cnJlbnQhPT1udWxsJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGllLHtjYXB0dXJlOiEwLG9uY2U6ITB9KSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsdGUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsaWUse2NhcHR1cmU6ITB9KX19fSxbTSx4ZSxqZV0pLHYudXNlRWZmZWN0KCgpPT57Y29uc3QgbGU9VmUoKCk9PnhlKCExKSwiY2xvc2UiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGxlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixsZSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsbGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGxlKX19LFt4ZV0pO2NvbnN0W1llLERdPW9mKGxlPT57Y29uc3QgdGU9Y2UoKS5maWx0ZXIod2U9PiF3ZS5kaXNhYmxlZCksaWU9dGUuZmluZCh3ZT0+d2UucmVmLmN1cnJlbnQ9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSxiZT1yZih0ZSxsZSxpZSk7YmUmJnNldFRpbWVvdXQoKCk9PmJlLnJlZi5jdXJyZW50Py5mb2N1cygpKX0pLFg9di51c2VDYWxsYmFjaygobGUsdGUsaWUpPT57Y29uc3QgYmU9ISQuY3VycmVudDtiZSYmKCQuY3VycmVudD0hMCk7Y29uc3Qgd2U9IVAuY3VycmVudCYmIWllO04udmFsdWUhPT12b2lkIDAmJk4udmFsdWU9PT10ZXx8d2U/KFcobGUpLHdlJiYoUC5jdXJyZW50PSEwKSk6YmUmJlcobGUpfSxbTi52YWx1ZV0pLEs9di51c2VDYWxsYmFjaygoKT0+TT8uZm9jdXMoKSxbTV0pLGFlPXYudXNlQ2FsbGJhY2soKGxlLHRlLGllKT0+e2lmKCFsZSlyZXR1cm47Y29uc3QgYmU9IUYuY3VycmVudDtiZSYmKEYuY3VycmVudD0hMCk7Y29uc3Qgd2U9IVAuY3VycmVudCYmIWllOyhOLnZhbHVlIT09dm9pZCAwJiZOLnZhbHVlPT09dGV8fHdlfHxiZSkmJmVlKGxlKX0sW04udmFsdWVdKSx5ZT1zPT09R2cuUG9wcGVyP3FnOmJSLHNlPXllPT09cWc/e3NpZGU6eSxzaWRlT2Zmc2V0OmIsYWxpZ246eCxhbGlnbk9mZnNldDpnLGFycm93UGFkZGluZzpDLGNvbGxpc2lvbkJvdW5kYXJ5OncsY29sbGlzaW9uUGFkZGluZzpSLHN0aWNreTpFLGhpZGVXaGVuRGV0YWNoZWQ6VCxhdm9pZENvbGxpc2lvbnM6T306e307cmV0dXJuIG0uanN4KFlnLHtzY29wZTppLGNvbnRlbnQ6TSx2aWV3cG9ydDpILG9uVmlld3BvcnRDaGFuZ2U6VSxpdGVtUmVmQ2FsbGJhY2s6WCxzZWxlY3RlZEl0ZW06Sixvbkl0ZW1MZWF2ZTpLLGl0ZW1UZXh0UmVmQ2FsbGJhY2s6YWUsZm9jdXNTZWxlY3RlZEl0ZW06cSxzZWxlY3RlZEl0ZW1UZXh0Om5lLHBvc2l0aW9uOnMsaXNQb3NpdGlvbmVkOm1lLHNlYXJjaFJlZjpZZSxjaGlsZHJlbjptLmpzeChHaSx7YXM6Z1IsYWxsb3dQaW5jaFpvb206ITAsY2hpbGRyZW46bS5qc3gocnMse2FzQ2hpbGQ6ITAsdHJhcHBlZDpOLm9wZW4sb25Nb3VudEF1dG9Gb2N1czpsZT0+e2xlLnByZXZlbnREZWZhdWx0KCl9LG9uVW5tb3VudEF1dG9Gb2N1czp1ZShmLGxlPT57Ti50cmlnZ2VyPy5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGxlLnByZXZlbnREZWZhdWx0KCl9KSxjaGlsZHJlbjptLmpzeChvcix7YXNDaGlsZDohMCxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITAsb25Fc2NhcGVLZXlEb3duOmQsb25Qb2ludGVyRG93bk91dHNpZGU6cCxvbkZvY3VzT3V0c2lkZTpsZT0+bGUucHJldmVudERlZmF1bHQoKSxvbkRpc21pc3M6KCk9Pk4ub25PcGVuQ2hhbmdlKCExKSxjaGlsZHJlbjptLmpzeCh5ZSx7cm9sZToibGlzdGJveCIsaWQ6Ti5jb250ZW50SWQsImRhdGEtc3RhdGUiOk4ub3Blbj8ib3BlbiI6ImNsb3NlZCIsZGlyOk4uZGlyLG9uQ29udGV4dE1lbnU6bGU9PmxlLnByZXZlbnREZWZhdWx0KCksLi4uQSwuLi5zZSxvblBsYWNlZDooKT0+aGUoITApLHJlZjpCLHN0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG91dGxpbmU6Im5vbmUiLC4uLkEuc3R5bGV9LG9uS2V5RG93bjp1ZShBLm9uS2V5RG93bixsZT0+e2NvbnN0IHRlPWxlLmN0cmxLZXl8fGxlLmFsdEtleXx8bGUubWV0YUtleTtpZihsZS5rZXk9PT0iVGFiIiYmbGUucHJldmVudERlZmF1bHQoKSwhdGUmJmxlLmtleS5sZW5ndGg9PT0xJiZEKGxlLmtleSksWyJBcnJvd1VwIiwiQXJyb3dEb3duIiwiSG9tZSIsIkVuZCJdLmluY2x1ZGVzKGxlLmtleSkpe2xldCBiZT1jZSgpLmZpbHRlcih3ZT0+IXdlLmRpc2FibGVkKS5tYXAod2U9PndlLnJlZi5jdXJyZW50KTtpZihbIkFycm93VXAiLCJFbmQiXS5pbmNsdWRlcyhsZS5rZXkpJiYoYmU9YmUuc2xpY2UoKS5yZXZlcnNlKCkpLFsiQXJyb3dVcCIsIkFycm93RG93biJdLmluY2x1ZGVzKGxlLmtleSkpe2NvbnN0IHdlPWxlLnRhcmdldCxSZT1iZS5pbmRleE9mKHdlKTtiZT1iZS5zbGljZShSZSsxKX1zZXRUaW1lb3V0KCgpPT5yZShiZSkpLGxlLnByZXZlbnREZWZhdWx0KCl9fSl9KX0pfSl9KX0pfSwiU2VsZWN0Q29udGVudEltcGwiKSksYlI9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppLG9uUGxhY2VkOnMsLi4uZn09byxkPUxsKFRhLGkpLHA9UWkoVGEsaSksW3ksYl09di51c2VTdGF0ZShudWxsKSxbeCxnXT12LnVzZVN0YXRlKG51bGwpLEM9RWUodSxnKSx3PW5mKGkpLFI9di51c2VSZWYoITEpLEU9di51c2VSZWYoITApLHt2aWV3cG9ydDpULHNlbGVjdGVkSXRlbTpPLHNlbGVjdGVkSXRlbVRleHQ6QSxmb2N1c1NlbGVjdGVkSXRlbTpOfT1wLE09di51c2VDYWxsYmFjaygoKT0+e2lmKGQudHJpZ2dlciYmZC52YWx1ZU5vZGUmJnkmJngmJlQmJk8mJkEpe2NvbnN0IEI9ZC50cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEo9eC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxXPWQudmFsdWVOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG5lPUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZC5kaXIhPT1KMi5SVEwpe2NvbnN0IGllPW5lLmxlZnQtSi5sZWZ0LGJlPVcubGVmdC1pZSx3ZT1CLmxlZnQtYmUsUmU9Qi53aWR0aCt3ZSxxdD1NYXRoLm1heChSZSxKLndpZHRoKSxpdD13aW5kb3cuaW5uZXJXaWR0aC1SbixQZT10ZihiZSxbUm4sTWF0aC5tYXgoUm4saXQtcXQpXSk7eS5zdHlsZS5taW5XaWR0aD1SZSsicHgiLHkuc3R5bGUubGVmdD1QZSsicHgifWVsc2V7Y29uc3QgaWU9Si5yaWdodC1uZS5yaWdodCxiZT13aW5kb3cuaW5uZXJXaWR0aC1XLnJpZ2h0LWllLHdlPXdpbmRvdy5pbm5lcldpZHRoLUIucmlnaHQtYmUsUmU9Qi53aWR0aCt3ZSxxdD1NYXRoLm1heChSZSxKLndpZHRoKSxpdD13aW5kb3cuaW5uZXJXaWR0aC1SbixQZT10ZihiZSxbUm4sTWF0aC5tYXgoUm4saXQtcXQpXSk7eS5zdHlsZS5taW5XaWR0aD1SZSsicHgiLHkuc3R5bGUucmlnaHQ9UGUrInB4In1jb25zdCBlZT13KCksY2U9d2luZG93LmlubmVySGVpZ2h0LVJuKjIsbWU9VC5zY3JvbGxIZWlnaHQsaGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCksUD1wYXJzZUludChoZS5ib3JkZXJUb3BXaWR0aCwxMCksJD1wYXJzZUludChoZS5wYWRkaW5nVG9wLDEwKSxGPXBhcnNlSW50KGhlLmJvcmRlckJvdHRvbVdpZHRoLDEwKSxyZT1wYXJzZUludChoZS5wYWRkaW5nQm90dG9tLDEwKSxxPVArJCttZStyZStGLHhlPU1hdGgubWluKE8ub2Zmc2V0SGVpZ2h0KjUscSksamU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoVCksWWU9cGFyc2VJbnQoamUucGFkZGluZ1RvcCwxMCksRD1wYXJzZUludChqZS5wYWRkaW5nQm90dG9tLDEwKSxYPUIudG9wK0IuaGVpZ2h0LzItUm4sSz1jZS1YLGFlPU8ub2Zmc2V0SGVpZ2h0LzIseWU9Ty5vZmZzZXRUb3ArYWUsc2U9UCskK3llLGxlPXEtc2U7aWYoc2U8PVgpe2NvbnN0IGllPWVlLmxlbmd0aD4wJiZPPT09ZWVbZWUubGVuZ3RoLTFdLnJlZi5jdXJyZW50O3kuc3R5bGUuYm90dG9tPSIwcHgiO2NvbnN0IGJlPXguY2xpZW50SGVpZ2h0LVQub2Zmc2V0VG9wLVQub2Zmc2V0SGVpZ2h0LHdlPU1hdGgubWF4KEssYWUrKGllP0Q6MCkrYmUrRiksUmU9c2Urd2U7eS5zdHlsZS5oZWlnaHQ9UmUrInB4In1lbHNle2NvbnN0IGllPWVlLmxlbmd0aD4wJiZPPT09ZWVbMF0ucmVmLmN1cnJlbnQ7eS5zdHlsZS50b3A9IjBweCI7Y29uc3Qgd2U9TWF0aC5tYXgoWCxQK1Qub2Zmc2V0VG9wKyhpZT9ZZTowKSthZSkrbGU7eS5zdHlsZS5oZWlnaHQ9d2UrInB4IixULnNjcm9sbFRvcD1zZS1YK1Qub2Zmc2V0VG9wfXkuc3R5bGUubWFyZ2luPWAke1JufXB4IDBgLHkuc3R5bGUubWluSGVpZ2h0PXhlKyJweCIseS5zdHlsZS5tYXhIZWlnaHQ9Y2UrInB4IixzPy4oKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PlIuY3VycmVudD0hMCl9fSxbdyxkLnRyaWdnZXIsZC52YWx1ZU5vZGUseSx4LFQsTyxBLGQuZGlyLHNdKTtudCgoKT0+TSgpLFtNXSk7Y29uc3RbWSxIXT12LnVzZVN0YXRlKCk7bnQoKCk9Pnt4JiZIKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLnpJbmRleCl9LFt4XSk7Y29uc3QgVT12LnVzZUNhbGxiYWNrKEI9PntCJiZFLmN1cnJlbnQ9PT0hMCYmKE0oKSxOPy4oKSxFLmN1cnJlbnQ9ITEpfSxbTSxOXSk7cmV0dXJuIG0uanN4KHhSLHtzY29wZTppLGNvbnRlbnRXcmFwcGVyOnksc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6UixvblNjcm9sbEJ1dHRvbkNoYW5nZTpVLGNoaWxkcmVuOm0uanN4KCJkaXYiLHtyZWY6YixzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixwb3NpdGlvbjoiZml4ZWQiLHpJbmRleDpZfSxjaGlsZHJlbjptLmpzeChDZS5kaXYsey4uLmYscmVmOkMsc3R5bGU6e2JveFNpemluZzoiYm9yZGVyLWJveCIsbWF4SGVpZ2h0OiIxMDAlIiwuLi5mLnN0eWxlfX0pfSl9KX0sIlNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb24iKSkscWc9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppLGFsaWduOnM9InN0YXJ0Iixjb2xsaXNpb25QYWRkaW5nOmY9Um4sLi4uZH09byxwPWxmKGkpO3JldHVybiBtLmpzeChScyx7Li4ucCwuLi5kLHJlZjp1LGFsaWduOnMsY29sbGlzaW9uUGFkZGluZzpmLHN0eWxlOntib3hTaXppbmc6ImJvcmRlci1ib3giLC4uLmQuc3R5bGUsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbiI6InZhcigtLXJhZGl4LXBvcHBlci10cmFuc2Zvcm0tb3JpZ2luKSIsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCkiLCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCkiLCItLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCkiLCItLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0KSJ9fSl9LCJTZWxlY3RQb3BwZXJQb3NpdGlvbiIpKSxbeFIsU1JdPUNhKFRhLHt9KSxYZz0iU2VsZWN0Vmlld3BvcnQiLENSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVTZWxlY3Q6aSxub25jZTpzLC4uLmZ9PW8sZD1RaShYZyxpKSxwPVNSKFhnLGkpLHk9RWUodSxkLm9uVmlld3BvcnRDaGFuZ2UpLGI9di51c2VSZWYoMCk7cmV0dXJuIG0uanN4cyhtLkZyYWdtZW50LHtjaGlsZHJlbjpbbS5qc3goInN0eWxlIix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDoiW2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XXtzY3JvbGxiYXItd2lkdGg6bm9uZTstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt9W2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfSJ9LG5vbmNlOnN9KSxtLmpzeChLaS5TbG90LHtzY29wZTppLGNoaWxkcmVuOm0uanN4KENlLmRpdix7ImRhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0IjoiIixyb2xlOiJwcmVzZW50YXRpb24iLC4uLmYscmVmOnksc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG92ZXJmbG93OiJoaWRkZW4gYXV0byIsLi4uZi5zdHlsZX0sb25TY3JvbGw6dWUoZi5vblNjcm9sbCx4PT57Y29uc3QgZz14LmN1cnJlbnRUYXJnZXQse2NvbnRlbnRXcmFwcGVyOkMsc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6d309cDtpZih3Py5jdXJyZW50JiZDKXtjb25zdCBSPU1hdGguYWJzKGIuY3VycmVudC1nLnNjcm9sbFRvcCk7aWYoUj4wKXtjb25zdCBFPXdpbmRvdy5pbm5lckhlaWdodC1SbioyLFQ9cGFyc2VGbG9hdChDLnN0eWxlLm1pbkhlaWdodCksTz1wYXJzZUZsb2F0KEMuc3R5bGUuaGVpZ2h0KSxBPU1hdGgubWF4KFQsTyk7aWYoQTxFKXtjb25zdCBOPUErUixNPU1hdGgubWluKEUsTiksWT1OLU07Qy5zdHlsZS5oZWlnaHQ9TSsicHgiLEMuc3R5bGUuYm90dG9tPT09IjBweCImJihnLnNjcm9sbFRvcD1ZPjA/WTowLEMuc3R5bGUuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIil9fX1iLmN1cnJlbnQ9Zy5zY3JvbGxUb3B9KX0pfSldfSl9LCJTZWxlY3RWaWV3cG9ydCIpKSxUUj0iU2VsZWN0R3JvdXAiLFtsaixhal09Q2EoVFIpLGFmPSJTZWxlY3RJdGVtIixbd1IsS2ddPUNhKGFmKSxFUj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksdmFsdWU6cyxkaXNhYmxlZDpmPSExLHRleHRWYWx1ZTpkLC4uLnB9PW8seT1MbChhZixpKSxiPVFpKGFmLGkpLHg9eS52YWx1ZT09PXMsW2csQ109di51c2VTdGF0ZShkPz8iIiksW3csUl09di51c2VTdGF0ZSghMSksRT16dChNPT5iLml0ZW1SZWZDYWxsYmFjaz8uKE0scyxmKSksVD1FZSh1LEUpLE89dGwoKSxBPXYudXNlUmVmKCJ0b3VjaCIpO2Z1bmN0aW9uIE4oTSl7eS5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZi5jdXJyZW50PU0uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSx5Lm9uVXNlclNlbGVjdChzKSx5Lm9uT3BlbkNoYW5nZSghMSl9cmV0dXJuIFZlKE4sImhhbmRsZVNlbGVjdCIpLG0uanN4KHdSLHtzY29wZTppLHZhbHVlOnMsZGlzYWJsZWQ6Zix0ZXh0SWQ6Tyxpc1NlbGVjdGVkOngsb25JdGVtVGV4dENoYW5nZTp2LnVzZUNhbGxiYWNrKE09PntDKFk9Pll8fChNPy50ZXh0Q29udGVudD8/IiIpLnRyaW0oKSl9LFtdKSxjaGlsZHJlbjptLmpzeChLaS5JdGVtU2xvdCx7c2NvcGU6aSx2YWx1ZTpzLGRpc2FibGVkOmYsdGV4dFZhbHVlOmcsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtyb2xlOiJvcHRpb24iLCJhcmlhLWxhYmVsbGVkYnkiOk8sImRhdGEtaGlnaGxpZ2h0ZWQiOnc/IiI6dm9pZCAwLCJhcmlhLXNlbGVjdGVkIjp4JiZ3LCJkYXRhLXN0YXRlIjp4PyJjaGVja2VkIjoidW5jaGVja2VkIiwiYXJpYS1kaXNhYmxlZCI6Znx8dm9pZCAwLCJkYXRhLWRpc2FibGVkIjpmPyIiOnZvaWQgMCx0YWJJbmRleDpmP3ZvaWQgMDotMSwuLi5wLHJlZjpULG9uRm9jdXM6dWUocC5vbkZvY3VzLCgpPT5SKCEwKSksb25CbHVyOnVlKHAub25CbHVyLCgpPT5SKCExKSksb25DbGljazp1ZShwLm9uQ2xpY2ssTT0+e2Z8fEEuY3VycmVudCE9PSJtb3VzZSImJk4oTSl9KSxvblBvaW50ZXJVcDp1ZShwLm9uUG9pbnRlclVwLE09PntmfHxBLmN1cnJlbnQ9PT0ibW91c2UiJiZOKE0pfSksb25Qb2ludGVyRG93bjp1ZShwLm9uUG9pbnRlckRvd24sTT0+e0EuY3VycmVudD1NLnBvaW50ZXJUeXBlfSksb25Qb2ludGVyTW92ZTp1ZShwLm9uUG9pbnRlck1vdmUsTT0+e0EuY3VycmVudD1NLnBvaW50ZXJUeXBlLGY/Yi5vbkl0ZW1MZWF2ZT8uKCk6QS5jdXJyZW50PT09Im1vdXNlIiYmTS5jdXJyZW50VGFyZ2V0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9KSxvblBvaW50ZXJMZWF2ZTp1ZShwLm9uUG9pbnRlckxlYXZlLE09PntNLmN1cnJlbnRUYXJnZXQ9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50JiZiLm9uSXRlbUxlYXZlPy4oKX0pLG9uS2V5RG93bjp1ZShwLm9uS2V5RG93bixNPT57Znx8TS50YXJnZXQhPT1NLmN1cnJlbnRUYXJnZXR8fGIuc2VhcmNoUmVmPy5jdXJyZW50IT09IiImJk0ua2V5PT09IiAifHwoZVIuaW5jbHVkZXMoTS5rZXkpJiZOKE0pLE0ua2V5PT09IiAiJiZNLnByZXZlbnREZWZhdWx0KCkpfSl9KX0pfSl9LCJTZWxlY3RJdGVtIikpLFppPSJTZWxlY3RJdGVtVGV4dCIsUlI9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppLGNsYXNzTmFtZTpzLHN0eWxlOmYsLi4uZH09byxwPUxsKFppLGkpLHk9UWkoWmksaSksYj1LZyhaaSxpKSx4PWFSKFppLGkpLFtnLENdPXYudXNlU3RhdGUobnVsbCksdz16dChOPT55Lml0ZW1UZXh0UmVmQ2FsbGJhY2s/LihOLGIudmFsdWUsYi5kaXNhYmxlZCkpLFI9RWUodSxDLGIub25JdGVtVGV4dENoYW5nZSx3KSxFPWc/LnRleHRDb250ZW50LFQ9di51c2VNZW1vKCgpPT5tLmpzeCgib3B0aW9uIix7dmFsdWU6Yi52YWx1ZSxkaXNhYmxlZDpiLmRpc2FibGVkLGNoaWxkcmVuOkV9LGIudmFsdWUpLFtiLmRpc2FibGVkLGIudmFsdWUsRV0pLHtvbk5hdGl2ZU9wdGlvbkFkZDpPLG9uTmF0aXZlT3B0aW9uUmVtb3ZlOkF9PXg7cmV0dXJuIG50KCgpPT4oTyhUKSwoKT0+QShUKSksW08sQSxUXSksbS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOlttLmpzeChDZS5zcGFuLHtpZDpiLnRleHRJZCwuLi5kLHJlZjpSfSksYi5pc1NlbGVjdGVkJiZwLnZhbHVlTm9kZSYmIXAudmFsdWVOb2RlSGFzQ2hpbGRyZW4mJiFwcihwLnZhbHVlKT9aYS5jcmVhdGVQb3J0YWwoZC5jaGlsZHJlbixwLnZhbHVlTm9kZSk6bnVsbF19KX0sIlNlbGVjdEl0ZW1UZXh0IikpLF9SPSJTZWxlY3RJdGVtSW5kaWNhdG9yIixPUj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksLi4uc309bztyZXR1cm4gS2coX1IsaSkuaXNTZWxlY3RlZD9tLmpzeChDZS5zcGFuLHsiYXJpYS1oaWRkZW4iOiEwLC4uLnMscmVmOnV9KTpudWxsfSwiU2VsZWN0SXRlbUluZGljYXRvciIpKSxBUj0iU2VsZWN0QnViYmxlSW5wdXQiLE5SPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbih7X19zY29wZVNlbGVjdDpvLC4uLnV9LGkpe2NvbnN0IHM9TGwoQVIsbykse3ZhbHVlOmYsb25WYWx1ZUNoYW5nZTpkLHJlcXVpcmVkOnAsZGlzYWJsZWQ6eSxuYW1lOmIsYXV0b0NvbXBsZXRlOngsZm9ybTpnLHVzZXJTZWxlY3Rpb246Q309cyx7bmF0aXZlT3B0aW9uczp3LG5hdGl2ZVNlbGVjdEtleTpSfT1zLEU9di51c2VSZWYobnVsbCksVD1FZShpLEUpLE89Zj8/IiIsQT12LnVzZVJlZihPKSxOPXYudXNlUmVmKEMpLE09di51c2VSZWYoITEpLFk9QXJyYXkuZnJvbSh3KS5zb21lKEg9PihILnByb3BzLnZhbHVlPz8iIik9PT0iIik7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgSD1FLmN1cnJlbnQ7aWYoIUgpcmV0dXJuO2NvbnN0IFU9d2luZG93LkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSxKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVSwidmFsdWUiKS5zZXQsVz1DIT09bnVsbCYmQyE9PU4uY3VycmVudDtOLmN1cnJlbnQ9Qztjb25zdCBuZT1BLmN1cnJlbnQhPT1PO0EuY3VycmVudD1PO2NvbnN0IGVlPVcmJm5lO2lmKFcmJiFuZSYmQy52YWx1ZSE9PU8mJiFDLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uJiZKKXtNLmN1cnJlbnQ9ITA7dHJ5e0ouY2FsbChILEMudmFsdWUpLEguZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImNoYW5nZSIse2J1YmJsZXM6ITB9KSl9ZmluYWxseXtNLmN1cnJlbnQ9ITEsSi5jYWxsKEgsTyl9cmV0dXJufWNvbnN0IGNlPWVlJiYhQy5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjtpZihuZSYmSil7Y29uc3QgbWU9bmV3IEV2ZW50KCJjaGFuZ2UiLHtidWJibGVzOmNlfSk7Si5jYWxsKEgsTyksSC5kaXNwYXRjaEV2ZW50KG1lKX19LFtPLENdKSxtLmpzeHMoQ2Uuc2VsZWN0LHsiYXJpYS1oaWRkZW4iOiEwLHJlcXVpcmVkOnAsdGFiSW5kZXg6LTEsbmFtZTpiLGF1dG9Db21wbGV0ZTp4LGRpc2FibGVkOnksZm9ybTpnLG9uQ2hhbmdlOkg9PntNLmN1cnJlbnR8fGQoSC50YXJnZXQudmFsdWUpfSwuLi51LHN0eWxlOnsuLi5BZywuLi51LnN0eWxlfSxyZWY6VCxkZWZhdWx0VmFsdWU6TyxjaGlsZHJlbjpbcHIoZikmJiFZP20uanN4KCJvcHRpb24iLHt2YWx1ZToiIn0pOm51bGwsQXJyYXkuZnJvbSh3KV19LFIpfSwiU2VsZWN0QnViYmxlSW5wdXQiKSk7ZnVuY3Rpb24gUWcoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifVZlKFFnLCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24gcHIoYSl7cmV0dXJuIGE9PT0iInx8YT09PXZvaWQgMH1WZShwciwic2hvdWxkU2hvd1BsYWNlaG9sZGVyIik7ZnVuY3Rpb24gb2YoYSl7Y29uc3Qgbz16dChhKSx1PXYudXNlUmVmKCIiKSxpPXYudXNlUmVmKDApLHM9di51c2VDYWxsYmFjayhkPT57Y29uc3QgcD11LmN1cnJlbnQrZDtvKHApO2Z1bmN0aW9uIHkoYil7dS5jdXJyZW50PWIsd2luZG93LmNsZWFyVGltZW91dChpLmN1cnJlbnQpLGIhPT0iIiYmKGkuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+eSgiIiksMWUzKSl9VmUoeSwidXBkYXRlU2VhcmNoIikseShwKX0sW29dKSxmPXYudXNlQ2FsbGJhY2soKCk9Pnt1LmN1cnJlbnQ9IiIsd2luZG93LmNsZWFyVGltZW91dChpLmN1cnJlbnQpfSxbXSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT4oKT0+d2luZG93LmNsZWFyVGltZW91dChpLmN1cnJlbnQpLFtdKSxbdSxzLGZdfVZlKG9mLCJ1c2VUeXBlYWhlYWRTZWFyY2giKTtmdW5jdGlvbiByZihhLG8sdSl7Y29uc3Qgcz1vLmxlbmd0aD4xJiZBcnJheS5mcm9tKG8pLmV2ZXJ5KGI9PmI9PT1vWzBdKT9vWzBdOm8sZj11P2EuaW5kZXhPZih1KTotMTtsZXQgZD1aZyhhLE1hdGgubWF4KGYsMCkpO3MubGVuZ3RoPT09MSYmKGQ9ZC5maWx0ZXIoYj0+YiE9PXUpKTtjb25zdCB5PWQuZmluZChiPT5iLnRleHRWYWx1ZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIHkhPT11P3k6dm9pZCAwfVZlKHJmLCJmaW5kTmV4dEl0ZW0iKTtmdW5jdGlvbiBaZyhhLG8pe3JldHVybiBhLm1hcCgodSxpKT0+YVsobytpKSVhLmxlbmd0aF0pfVZlKFpnLCJ3cmFwQXJyYXkiKTtmdW5jdGlvbiBEUih7bGFiZWw6YSxvcHRpb25zOm8sdmFsdWU6dSxvblZhbHVlQ2hhbmdlOmkscGxhY2Vob2xkZXI6cyxkaXNhYmxlZDpmLGlzSW52YWxpZDpkLGNsYXNzTmFtZTpwLGFyaWFMYWJlbDp5fSxiKXtjb25zdCB4PXYudXNlSWQoKTtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOlthP20uanN4KCJsYWJlbCIse2h0bWxGb3I6eCxjbGFzc05hbWU6InRleHQtc20gdGV4dC1sYXJrLW43MDAiLGNoaWxkcmVuOmF9KTpudWxsLG0uanN4cyhvUix7dmFsdWU6dSxvblZhbHVlQ2hhbmdlOmksZGlzYWJsZWQ6ZixjaGlsZHJlbjpbbS5qc3hzKGlSLHtyZWY6YixpZDp4LCJhcmlhLWxhYmVsIjp5LCJhcmlhLWludmFsaWQiOmR8fHZvaWQgMCxjbGFzc05hbWU6a2UoImZsZXggaC04IG1pbi1oLTggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWxhcmstbjMwMCBiZy1icmFuZC1wcmltYXJ5IHB4LTMgdGV4dC1zbSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgaG92ZXI6Ym9yZGVyLWJyYW5kLXNlY29uZGFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1bdmFyKC0tZmllbGQtYm9yZGVyLWZvY3VzKV0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJnLWxhcmstbjUwIGRpc2FibGVkOnRleHQtbGFyay1uNDAwIixkJiYiYm9yZGVyLWxhcmstZGFuZ2VyIixwKSxjaGlsZHJlbjpbbS5qc3godVIse3BsYWNlaG9sZGVyOnMsY2xhc3NOYW1lOiJkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1sYXJrLW42MDAifSksbS5qc3goc1Ise2FzQ2hpbGQ6ITAsY2hpbGRyZW46bS5qc3goX2gse2NsYXNzTmFtZToic2l6ZS00IHRleHQtbGFyay1uNTAwIn0pfSldfSksbS5qc3goaFIse2NoaWxkcmVuOm0uanN4KHBSLHtwb3NpdGlvbjoicG9wcGVyIixjbGFzc05hbWU6Im1heC1oLVttaW4oMjByZW0sNjB2aCldIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIG92ZXJmbG93LXktYXV0byByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItbGFyay1uMjAwIGJnLWJyYW5kLXByaW1hcnkgcC0xIHNoYWRvdy1bdmFyKC0tc2hhZG93LW92ZXJsYXkpXSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0IixjaGlsZHJlbjptLmpzeChDUix7Y2hpbGRyZW46by5tYXAoZz0+bS5qc3hzKEVSLHt2YWx1ZTpnLnZhbHVlLGRpc2FibGVkOmcuZGlzYWJsZWQsY2xhc3NOYW1lOiJmbGV4IGgtOCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbGcgcHgtMyB0ZXh0LXNtIGZvY3VzLXZpc2libGU6Zm9jdXMtcmluZyBkYXRhLVtkaXNhYmxlZF06Y3Vyc29yLW5vdC1hbGxvd2VkIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIGRhdGEtW2hpZ2hsaWdodGVkXTpiZy1sYXJrLW4xMDAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Zm9udC1tZWRpdW0gZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1icmFuZC1saW5rIixjaGlsZHJlbjpbbS5qc3goUlIse2NoaWxkcmVuOmcubGFiZWx9KSxtLmpzeChPUix7Y2hpbGRyZW46bS5qc3goR3Use2NsYXNzTmFtZToic2l6ZS00In0pfSldfSxnLnZhbHVlKSl9KX0pfSldfSldfSl9Y29uc3QgdW89di5mb3J3YXJkUmVmKERSKTt1by5kaXNwbGF5TmFtZT0iTGFya1NlbGVjdCI7dmFyIGpSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjbD0oYSxvKT0+alIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksY2Y9IkNoZWNrYm94IixbTVIsb2pdPU10KGNmKSxbelIsdWZdPU1SKGNmKTtmdW5jdGlvbiBGZyhhKXtjb25zdHtfX3Njb3BlQ2hlY2tib3g6byxjaGVja2VkOnUsY2hpbGRyZW46aSxkZWZhdWx0Q2hlY2tlZDpzLGRpc2FibGVkOmYsZm9ybTpkLG5hbWU6cCxvbkNoZWNrZWRDaGFuZ2U6eSxyZXF1aXJlZDpiLHZhbHVlOng9Im9uIixpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjpnfT1hLFtDLHddPUVuKHtwcm9wOnUsZGVmYXVsdFByb3A6cz8/ITEsb25DaGFuZ2U6eSxjYWxsZXI6Y2Z9KSxbUixFXT12LnVzZVN0YXRlKG51bGwpLFtULE9dPXYudXNlU3RhdGUobnVsbCksW0EsTl09di51c2VTdGF0ZShudWxsKSxNPVI/ISFkfHwhIVIuY2xvc2VzdCgiZm9ybSIpOiEwLFk9e2NoZWNrZWQ6QyxkaXNhYmxlZDpmLHNldENoZWNrZWQ6dyxjb250cm9sOlIsc2V0Q29udHJvbDpFLG5hbWU6cCxmb3JtOmQsdmFsdWU6eCx1c2VyQ2xpY2s6QSxvblVzZXJDbGljazpOLHJlcXVpcmVkOmIsZGVmYXVsdENoZWNrZWQ6aG4ocyk/ITE6cyxpc0Zvcm1Db250cm9sOk0sYnViYmxlSW5wdXQ6VCxzZXRCdWJibGVJbnB1dDpPfTtyZXR1cm4gbS5qc3goelIse3Njb3BlOm8sLi4uWSxjaGlsZHJlbjokZyhnKT9nKFkpOml9KX1jbChGZywiQ2hlY2tib3hQcm92aWRlciIpO3ZhciBrUj0iQ2hlY2tib3hUcmlnZ2VyIixMUj12LmZvcndhcmRSZWYoY2woZnVuY3Rpb24oe19fc2NvcGVDaGVja2JveDpvLG9uS2V5RG93bjp1LG9uQ2xpY2s6aSwuLi5zfSxmKXtjb25zdHtjb250cm9sOmQsdmFsdWU6cCxkaXNhYmxlZDp5LGNoZWNrZWQ6YixyZXF1aXJlZDp4LHNldENvbnRyb2w6ZyxzZXRDaGVja2VkOkMsb25Vc2VyQ2xpY2s6dyxpc0Zvcm1Db250cm9sOlIsYnViYmxlSW5wdXQ6RX09dWYoa1IsbyksVD1FZShmLGcpLE89di51c2VSZWYoYik7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgQT1kPy5mb3JtO2lmKEEpe2NvbnN0IE49Y2woKCk9PkMoTy5jdXJyZW50KSwicmVzZXQiKTtyZXR1cm4gQS5hZGRFdmVudExpc3RlbmVyKCJyZXNldCIsTiksKCk9PkEucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzZXQiLE4pfX0sW2QsQ10pLG0uanN4KENlLmJ1dHRvbix7dHlwZToiYnV0dG9uIixyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6aG4oYik/Im1peGVkIjpiLCJhcmlhLXJlcXVpcmVkIjp4LCJkYXRhLXN0YXRlIjpzZihiKSwiZGF0YS1kaXNhYmxlZCI6eT8iIjp2b2lkIDAsZGlzYWJsZWQ6eSx2YWx1ZTpwLC4uLnMscmVmOlQsb25LZXlEb3duOnVlKHUsQT0+e0Eua2V5PT09IkVudGVyIiYmQS5wcmV2ZW50RGVmYXVsdCgpfSksb25DbGljazp1ZShpLEE9Pntjb25zdCBOPUEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTt3KHtyZXF1ZXN0ZWRDaGVja2VkOmhuKGIpPyEwOiFiLGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uOk59KSxDKE09PmhuKE0pPyEwOiFNKSxFJiZSJiYoTnx8QS5zdG9wUHJvcGFnYXRpb24oKSl9KX0pfSwiQ2hlY2tib3hUcmlnZ2VyIikpLFVSPXYuZm9yd2FyZFJlZihjbChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVDaGVja2JveDppLG5hbWU6cyxjaGVja2VkOmYsZGVmYXVsdENoZWNrZWQ6ZCxyZXF1aXJlZDpwLGRpc2FibGVkOnksdmFsdWU6YixvbkNoZWNrZWRDaGFuZ2U6eCxmb3JtOmcsLi4uQ309bztyZXR1cm4gbS5qc3goRmcse19fc2NvcGVDaGVja2JveDppLGNoZWNrZWQ6ZixkZWZhdWx0Q2hlY2tlZDpkLGRpc2FibGVkOnkscmVxdWlyZWQ6cCxvbkNoZWNrZWRDaGFuZ2U6eCxuYW1lOnMsZm9ybTpnLHZhbHVlOmIsaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6KHtpc0Zvcm1Db250cm9sOnd9KT0+bS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOlttLmpzeChMUix7Li4uQyxyZWY6dSxfX3Njb3BlQ2hlY2tib3g6aX0pLHcmJm0uanN4KFBSLHtfX3Njb3BlQ2hlY2tib3g6aX0pXX0pfSl9LCJDaGVja2JveCIpKSxIUj0iQ2hlY2tib3hJbmRpY2F0b3IiLEJSPXYuZm9yd2FyZFJlZihjbChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVDaGVja2JveDppLGZvcmNlTW91bnQ6cywuLi5mfT1vLGQ9dWYoSFIsaSk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50OnN8fGhuKGQuY2hlY2tlZCl8fGQuY2hlY2tlZD09PSEwLGNoaWxkcmVuOm0uanN4KENlLnNwYW4seyJkYXRhLXN0YXRlIjpzZihkLmNoZWNrZWQpLCJkYXRhLWRpc2FibGVkIjpkLmRpc2FibGVkPyIiOnZvaWQgMCwuLi5mLHJlZjp1LHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIiwuLi5vLnN0eWxlfX0pfSl9LCJDaGVja2JveEluZGljYXRvciIpKSxJUj0iQ2hlY2tib3hCdWJibGVJbnB1dCIsUFI9di5mb3J3YXJkUmVmKGNsKGZ1bmN0aW9uKHtfX3Njb3BlQ2hlY2tib3g6byxvbkNsaWNrOnUsLi4uaX0scyl7Y29uc3R7Y29udHJvbDpmLHVzZXJDbGljazpkLGNoZWNrZWQ6cCxkZWZhdWx0Q2hlY2tlZDp5LHJlcXVpcmVkOmIsZGlzYWJsZWQ6eCxuYW1lOmcsdmFsdWU6Qyxmb3JtOncsYnViYmxlSW5wdXQ6UixzZXRCdWJibGVJbnB1dDpFfT11ZihJUixvKSxUPUVlKHMsRSksTz11cihmKSxBPXYudXNlUmVmKCExKSxOPXYudXNlUmVmKHApLE09di51c2VSZWYoZCksWT12LnVzZVJlZihudWxsKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IFU9UjtpZighVSlyZXR1cm47Y29uc3QgQj13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsVz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsImNoZWNrZWQiKS5zZXQ7aWYoIVcpcmV0dXJuO2NvbnN0IG5lPU4uY3VycmVudCE9PXA7Ti5jdXJyZW50PXA7Y29uc3QgZWU9ZCE9PW51bGwmJmQhPT1NLmN1cnJlbnQ7aWYoTS5jdXJyZW50PWQsZWUpWS5jdXJyZW50PW5lP251bGw6ZCxuZSYmKFUuaW5kZXRlcm1pbmF0ZT1obihwKSxXLmNhbGwoVSxobihwKT8hMTpwKSksVS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiFkLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9ufSkpO2Vsc2UgaWYobmUpe2NvbnN0IGNlPVkuY3VycmVudDtZLmN1cnJlbnQ9bnVsbDtjb25zdCBtZT1jZT8ucmVxdWVzdGVkQ2hlY2tlZD09PXA7QS5jdXJyZW50PSEwLFUuaW5kZXRlcm1pbmF0ZT1obihwKSxXLmNhbGwoVSxobihwKT8hMTpwKSxVLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJjbGljayIse2J1YmJsZXM6IShtZSYmY2UuaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb24pfSkpLEEuY3VycmVudD0hMX19LFtSLHAsZF0pO2NvbnN0IEg9di51c2VSZWYoaG4ocCk/ITE6cCk7cmV0dXJuIG0uanN4KENlLmlucHV0LHt0eXBlOiJjaGVja2JveCIsImFyaWEtaGlkZGVuIjohMCxkZWZhdWx0Q2hlY2tlZDp5Pz9ILmN1cnJlbnQscmVxdWlyZWQ6YixkaXNhYmxlZDp4LG5hbWU6Zyx2YWx1ZTpDLGZvcm06dywuLi5pLHRhYkluZGV4Oi0xLHJlZjpULG9uQ2xpY2s6dWUodSxVPT57QS5jdXJyZW50JiZVLnN0b3BQcm9wYWdhdGlvbigpfSksc3R5bGU6ey4uLmkuc3R5bGUsLi4uTyxwb3NpdGlvbjoiYWJzb2x1dGUiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG9wYWNpdHk6MCxtYXJnaW46MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTEwMCUpIn19KX0sIkNoZWNrYm94QnViYmxlSW5wdXQiKSk7ZnVuY3Rpb24gJGcoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifWNsKCRnLCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24gaG4oYSl7cmV0dXJuIGE9PT0iaW5kZXRlcm1pbmF0ZSJ9Y2woaG4sImlzSW5kZXRlcm1pbmF0ZSIpO2Z1bmN0aW9uIHNmKGEpe3JldHVybiBobihhKT8iaW5kZXRlcm1pbmF0ZSI6YT8iY2hlY2tlZCI6InVuY2hlY2tlZCJ9Y2woc2YsImdldFN0YXRlIik7dmFyIEdSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWUj0oYSxvKT0+R1IoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksZmY9di5mb3J3YXJkUmVmKFZSKGZ1bmN0aW9uKG8sdSl7cmV0dXJuIG0uanN4KENlLmxhYmVsLHsuLi5vLHJlZjp1LG9uTW91c2VEb3duOmk9PntpLnRhcmdldC5jbG9zZXN0KCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhIil8fChvLm9uTW91c2VEb3duPy4oaSksIWkuZGVmYXVsdFByZXZlbnRlZCYmaS5kZXRhaWw+MSYmaS5wcmV2ZW50RGVmYXVsdCgpKX19KX0sIkxhYmVsIikpO2Z1bmN0aW9uIFlSKHtsYWJlbDphLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZTpzfSxmKXtjb25zdCBkPXYudXNlSWQoKSxwPW89PT0iaW5kZXRlcm1pbmF0ZSI7cmV0dXJuIG0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOmtlKCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIscyksY2hpbGRyZW46W20uanN4KFVSLHtyZWY6ZixpZDpkLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZToic2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIGJvcmRlci1sYXJrLW41MDAgYmctYnJhbmQtcHJpbWFyeSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLWJyYW5kLXNlY29uZGFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1icmFuZC1zZWNvbmRhcnkgZGF0YS1bc3RhdGU9aW5kZXRlcm1pbmF0ZV06Ym9yZGVyLWJyYW5kLXNlY29uZGFyeSBkYXRhLVtzdGF0ZT1pbmRldGVybWluYXRlXTpiZy1icmFuZC1zZWNvbmRhcnkgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAiLGNoaWxkcmVuOm0uanN4KEJSLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpwP20uanN4KEIxLHtjbGFzc05hbWU6InNpemUtMyB0ZXh0LXdoaXRlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pOm0uanN4KEd1LHtjbGFzc05hbWU6InNpemUtMyB0ZXh0LXdoaXRlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfSl9KSxtLmpzeChmZix7aHRtbEZvcjpkLGNsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWxhcmstbjkwMCIsY2hpbGRyZW46YX0pXX0pfWNvbnN0IEZpPXYuZm9yd2FyZFJlZihZUik7RmkuZGlzcGxheU5hbWU9IkxhcmtDaGVja2JveCI7dmFyIHFSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWdD0oYSxvKT0+cVIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksSmc9IlJhZGlvIixbWFIsV2ddPU10KEpnKSxbS1IsZGZdPVhSKEpnKTtmdW5jdGlvbiBleShhKXtjb25zdHtfX3Njb3BlUmFkaW86byxjaGVja2VkOnU9ITEsY2hpbGRyZW46aSxkaXNhYmxlZDpzLGZvcm06ZixuYW1lOmQsb25DaGVjazpwLHJlcXVpcmVkOnksdmFsdWU6Yj0ib24iLGludGVybmFsX2RvX25vdF91c2VfcmVuZGVyOnh9PWEsW2csQ109di51c2VTdGF0ZShudWxsKSxbdyxSXT12LnVzZVN0YXRlKG51bGwpLFtFLFRdPXYudXNlU3RhdGUobnVsbCksTz1nPyEhZnx8ISFnLmNsb3Nlc3QoImZvcm0iKTohMCxBPXtjaGVja2VkOnUsZGlzYWJsZWQ6cyxyZXF1aXJlZDp5LG5hbWU6ZCxmb3JtOmYsdmFsdWU6Yixjb250cm9sOmcsc2V0Q29udHJvbDpDLHVzZXJDbGljazpFLG9uVXNlckNsaWNrOlQsaXNGb3JtQ29udHJvbDpPLGJ1YmJsZUlucHV0Oncsc2V0QnViYmxlSW5wdXQ6UixvbkNoZWNrOlZ0KCgpPT5wPy4oKSwib25DaGVjayIpfTtyZXR1cm4gbS5qc3goS1Ise3Njb3BlOm8sLi4uQSxjaGlsZHJlbjp0eSh4KT94KEEpOml9KX1WdChleSwiUmFkaW9Qcm92aWRlciIpO3ZhciBRUj0iUmFkaW9UcmlnZ2VyIixaUj12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24oe19fc2NvcGVSYWRpbzpvLG9uQ2xpY2s6dSwuLi5pfSxzKXtjb25zdHtjaGVja2VkOmYsZGlzYWJsZWQ6ZCx2YWx1ZTpwLHNldENvbnRyb2w6eSxvbkNoZWNrOmIsb25Vc2VyQ2xpY2s6eCxpc0Zvcm1Db250cm9sOmcsYnViYmxlSW5wdXQ6Q309ZGYoUVIsbyksdz1FZShzLHkpO3JldHVybiBtLmpzeChDZS5idXR0b24se3R5cGU6ImJ1dHRvbiIscm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOmYsImRhdGEtc3RhdGUiOm55KGYpLCJkYXRhLWRpc2FibGVkIjpkPyIiOnZvaWQgMCxkaXNhYmxlZDpkLHZhbHVlOnAsLi4uaSxyZWY6dyxvbkNsaWNrOnVlKHUsUj0+e2NvbnN0IEU9Ui5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2Z8fCh4KHtoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjpFfSksYigpKSxDJiZnJiYoRXx8Ui5zdG9wUHJvcGFnYXRpb24oKSl9KX0pfSwiUmFkaW9UcmlnZ2VyIikpLEZSPSJSYWRpb0J1YmJsZUlucHV0IiwkUj12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24oe19fc2NvcGVSYWRpbzpvLG9uQ2xpY2s6dSwuLi5pfSxzKXtjb25zdHtjb250cm9sOmYsY2hlY2tlZDpkLHJlcXVpcmVkOnAsZGlzYWJsZWQ6eSxuYW1lOmIsdmFsdWU6eCxmb3JtOmcsYnViYmxlSW5wdXQ6QyxzZXRCdWJibGVJbnB1dDp3LHVzZXJDbGljazpSfT1kZihGUixvKSxFPUVlKHMsdyksVD11cihmKSxPPXYudXNlUmVmKCExKSxBPXYudXNlUmVmKGQpLE49di51c2VSZWYoUiksTT12LnVzZVJlZihudWxsKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IEg9QztpZighSClyZXR1cm47Y29uc3QgVT13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsSj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFUsImNoZWNrZWQiKS5zZXQ7aWYoIUopcmV0dXJuO2NvbnN0IFc9QS5jdXJyZW50IT09ZDtBLmN1cnJlbnQ9ZDtjb25zdCBuZT1SIT09bnVsbCYmUiE9PU4uY3VycmVudDtpZihOLmN1cnJlbnQ9UixuZSlNLmN1cnJlbnQ9Vz9udWxsOlIsVyYmSi5jYWxsKEgsZCksSC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiFSLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9ufSkpO2Vsc2UgaWYoVyl7Y29uc3QgZWU9TS5jdXJyZW50O00uY3VycmVudD1udWxsO2NvbnN0IGNlPWQmJmVlIT09bnVsbDtPLmN1cnJlbnQ9ITAsSi5jYWxsKEgsZCksSC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiEoY2UmJmVlLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uKX0pKSxPLmN1cnJlbnQ9ITF9fSxbQyxkLFJdKTtjb25zdCBZPXYudXNlUmVmKGQpO3JldHVybiBtLmpzeChDZS5pbnB1dCx7dHlwZToicmFkaW8iLCJhcmlhLWhpZGRlbiI6ITAsZGVmYXVsdENoZWNrZWQ6WS5jdXJyZW50LHJlcXVpcmVkOnAsZGlzYWJsZWQ6eSxuYW1lOmIsdmFsdWU6eCxmb3JtOmcsLi4uaSx0YWJJbmRleDotMSxyZWY6RSxvbkNsaWNrOnVlKHUsSD0+e08uY3VycmVudCYmSC5zdG9wUHJvcGFnYXRpb24oKX0pLHN0eWxlOnsuLi5pLnN0eWxlLC4uLlQscG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJub25lIixvcGFjaXR5OjAsbWFyZ2luOjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0xMDAlKSJ9fSl9LCJSYWRpb0J1YmJsZUlucHV0IikpO2Z1bmN0aW9uIHR5KGEpe3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIn1WdCh0eSwiaXNGdW5jdGlvbiIpO2Z1bmN0aW9uIG55KGEpe3JldHVybiBhPyJjaGVja2VkIjoidW5jaGVja2VkIn1WdChueSwiZ2V0U3RhdGUiKTt2YXIgSlI9WyJBcnJvd1VwIiwiQXJyb3dEb3duIiwiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCJdLG1mPSJSYWRpb0dyb3VwIixbV1IscmpdPU10KG1mLFtubyxXZ10pLGx5PW5vKCksaGY9V2coKSxbZV8sdF9dPVdSKG1mKSxuXz12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUmFkaW9Hcm91cDppLG5hbWU6cyxmb3JtOmYsZGVmYXVsdFZhbHVlOmQsdmFsdWU6cCxyZXF1aXJlZDp5PSExLGRpc2FibGVkOmI9ITEsb3JpZW50YXRpb246eCxkaXI6Zyxsb29wOkM9ITAsb25WYWx1ZUNoYW5nZTp3LC4uLlJ9PW8sRT1seShpKSxUPVFhKGcpLFtPLEFdPUVuKHtwcm9wOnAsZGVmYXVsdFByb3A6ZD8/bnVsbCxvbkNoYW5nZTp3LGNhbGxlcjptZn0pLFtOLE1dPXYudXNlU3RhdGUobnVsbCksWT1FZSh1LE0pLEg9di51c2VSZWYoTyk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgVT1mP04/Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik6Tj8uY2xvc2VzdCgiZm9ybSIpO2lmKFUgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpe2NvbnN0IEI9VnQoKCk9PkEoSC5jdXJyZW50KSwicmVzZXQiKTtyZXR1cm4gVS5hZGRFdmVudExpc3RlbmVyKCJyZXNldCIsQiksKCk9PlUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzZXQiLEIpfX0sW04sZixBXSksbS5qc3goZV8se3Njb3BlOmksbmFtZTpzLGZvcm06ZixyZXF1aXJlZDp5LGRpc2FibGVkOmIsdmFsdWU6TyxvblZhbHVlQ2hhbmdlOkEsY2hpbGRyZW46bS5qc3goanMse2FzQ2hpbGQ6ITAsLi4uRSxvcmllbnRhdGlvbjp4LGRpcjpULGxvb3A6QyxjaGlsZHJlbjptLmpzeChDZS5kaXYse3JvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLXJlcXVpcmVkIjp5LCJhcmlhLW9yaWVudGF0aW9uIjp4LCJkYXRhLWRpc2FibGVkIjpiPyIiOnZvaWQgMCxkaXI6VCwuLi5SLHJlZjpZfSl9KX0pfSwiUmFkaW9Hcm91cCIpKSxsXz0iUmFkaW9Hcm91cEl0ZW1Qcm92aWRlciIsYV89IlJhZGlvR3JvdXBJdGVtVHJpZ2dlciI7ZnVuY3Rpb24gYXkoYSl7Y29uc3R7X19zY29wZVJhZGlvR3JvdXA6byx2YWx1ZTp1LGRpc2FibGVkOmksY2hpbGRyZW46cyxpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjpmfT1hLGQ9dF8obF8sbykscD1oZihvKSx5PWQuZGlzYWJsZWR8fGk7cmV0dXJuIG0uanN4KGV5LHsuLi5wLGNoZWNrZWQ6ZC52YWx1ZT09PXUsZGlzYWJsZWQ6eSxyZXF1aXJlZDpkLnJlcXVpcmVkLG5hbWU6ZC5uYW1lLGZvcm06ZC5mb3JtLHZhbHVlOnUsb25DaGVjazooKT0+ZC5vblZhbHVlQ2hhbmdlKHUpLGludGVybmFsX2RvX25vdF91c2VfcmVuZGVyOmYsY2hpbGRyZW46c30pfVZ0KGF5LCJSYWRpb0dyb3VwSXRlbVByb3ZpZGVyIik7dmFyIG9fPXYuZm9yd2FyZFJlZihWdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVSYWRpb0dyb3VwOmksLi4uc309byxmPWx5KGkpLGQ9aGYoaSkse2NoZWNrZWQ6cCxkaXNhYmxlZDp5fT1kZihhXyxkLl9fc2NvcGVSYWRpbyksYj12LnVzZVJlZihudWxsKSx4PUVlKHUsYiksZz12LnVzZVJlZighMSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgQz1WdChSPT57SlIuaW5jbHVkZXMoUi5rZXkpJiYoZy5jdXJyZW50PSEwKX0sImhhbmRsZUtleURvd24iKSx3PVZ0KCgpPT5nLmN1cnJlbnQ9ITEsImhhbmRsZUtleVVwIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix3KSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEMpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix3KX19LFtdKSxtLmpzeChNcyx7YXNDaGlsZDohMCwuLi5mLGZvY3VzYWJsZToheSxhY3RpdmU6cCxjaGlsZHJlbjptLmpzeChaUix7Li4uZCwuLi5zLHJlZjp4LG9uS2V5RG93bjp1ZShzLm9uS2V5RG93bixDPT57Qy5rZXk9PT0iRW50ZXIiJiZDLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzOnVlKHMub25Gb2N1cywoKT0+e2cuY3VycmVudCYmYi5jdXJyZW50Py5jbGljaygpfSl9KX0pfSwiUmFkaW9Hcm91cEl0ZW1UcmlnZ2VyIikpLHJfPXYuZm9yd2FyZFJlZihWdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVSYWRpb0dyb3VwOmksdmFsdWU6cyxkaXNhYmxlZDpmLC4uLmR9PW87cmV0dXJuIG0uanN4KGF5LHtfX3Njb3BlUmFkaW9Hcm91cDppLHZhbHVlOnMsZGlzYWJsZWQ6ZixpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjooe2lzRm9ybUNvbnRyb2w6cH0pPT5tLmpzeHMobS5GcmFnbWVudCx7Y2hpbGRyZW46W20uanN4KG9fLHsuLi5kLHJlZjp1LF9fc2NvcGVSYWRpb0dyb3VwOml9KSxwJiZtLmpzeChpXyx7X19zY29wZVJhZGlvR3JvdXA6aX0pXX0pfSl9LCJSYWRpb0dyb3VwSXRlbSIpKSxpXz12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUmFkaW9Hcm91cDppLC4uLnN9PW8sZj1oZihpKTtyZXR1cm4gbS5qc3goJFIsey4uLmYsLi4ucyxyZWY6dX0pfSwiUmFkaW9Hcm91cEl0ZW1CdWJibGVJbnB1dCIpKTtmdW5jdGlvbiBjXyh7dmFsdWU6YSxsYWJlbDpvLGRpc2FibGVkOnUsaWQ6aSxjbGFzc05hbWU6c30sZil7Y29uc3QgZD12LnVzZUlkKCkscD1pPz9gJHtkfS0ke2F9YDtyZXR1cm4gbS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOmtlKCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIscyksY2hpbGRyZW46W20uanN4KHJfLHtyZWY6ZixpZDpwLHZhbHVlOmEsZGlzYWJsZWQ6dSxjbGFzc05hbWU6InNpemUtNCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1sYXJrLW41MDAgYmctYnJhbmQtcHJpbWFyeSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLVs1cHhdIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJvcmRlci1icmFuZC1zZWNvbmRhcnkgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAifSksbS5qc3goZmYse2h0bWxGb3I6cCxjbGFzc05hbWU6InRleHQtc20gdGV4dC1sYXJrLW45MDAiLGNoaWxkcmVuOm99KV19KX1jb25zdCBwZj12LmZvcndhcmRSZWYoY18pO3BmLmRpc3BsYXlOYW1lPSJMYXJrUmFkaW9Hcm91cC5JdGVtIjtmdW5jdGlvbiB1Xyh7bGFiZWw6YSxvcHRpb25zOm8sdmFsdWU6dSxvblZhbHVlQ2hhbmdlOmksY2xhc3NOYW1lOnN9LGYpe2NvbnN0IGQ9di51c2VJZCgpLHA9YT9gJHtkfS1sYWJlbGA6dm9pZCAwO3JldHVybiBtLmpzeHMoImRpdiIse2NsYXNzTmFtZTprZSgiZmxleCBmbGV4LWNvbCIscyksY2hpbGRyZW46W2E/bS5qc3goInNwYW4iLHtpZDpwLGNsYXNzTmFtZToibWItMSB0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphfSk6bnVsbCxtLmpzeChuXyx7cmVmOmYsdmFsdWU6dSxvblZhbHVlQ2hhbmdlOmksImFyaWEtbGFiZWxsZWRieSI6cCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOm8ubWFwKHk9Pm0uanN4KHBmLHt2YWx1ZTp5LnZhbHVlLGxhYmVsOnkubGFiZWwsZGlzYWJsZWQ6eS5kaXNhYmxlZCxpZDpgJHtkfS0ke3kudmFsdWV9YH0seS52YWx1ZSkpfSldfSl9Y29uc3Qgb3k9di5mb3J3YXJkUmVmKHVfKTtveS5kaXNwbGF5TmFtZT0iTGFya1JhZGlvR3JvdXAiO2NvbnN0IHNfPU9iamVjdC5hc3NpZ24ob3kse0l0ZW06cGZ9KTt2YXIgZl89T2JqZWN0LmRlZmluZVByb3BlcnR5LFVsPShhLG8pPT5mXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSx2Zj0iU3dpdGNoIixbZF8saWpdPU10KHZmKSxbbV8sZ2ZdPWRfKHZmKTtmdW5jdGlvbiByeShhKXtjb25zdHtfX3Njb3BlU3dpdGNoOm8sY2hlY2tlZDp1LGNoaWxkcmVuOmksZGVmYXVsdENoZWNrZWQ6cyxkaXNhYmxlZDpmLGZvcm06ZCxuYW1lOnAsb25DaGVja2VkQ2hhbmdlOnkscmVxdWlyZWQ6Yix2YWx1ZTp4PSJvbiIsaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6Z309YSxbQyx3XT1Fbih7cHJvcDp1LGRlZmF1bHRQcm9wOnM/PyExLG9uQ2hhbmdlOnksY2FsbGVyOnZmfSksW1IsRV09di51c2VTdGF0ZShudWxsKSxbVCxPXT12LnVzZVN0YXRlKG51bGwpLFtBLE5dPXYudXNlU3RhdGUobnVsbCksTT1SPyEhZHx8ISFSLmNsb3Nlc3QoImZvcm0iKTohMCxZPXtjaGVja2VkOkMsc2V0Q2hlY2tlZDp3LGRpc2FibGVkOmYsY29udHJvbDpSLHNldENvbnRyb2w6RSxuYW1lOnAsZm9ybTpkLHZhbHVlOngsdXNlckNsaWNrOkEsb25Vc2VyQ2xpY2s6TixyZXF1aXJlZDpiLGRlZmF1bHRDaGVja2VkOnMsaXNGb3JtQ29udHJvbDpNLGJ1YmJsZUlucHV0OlQsc2V0QnViYmxlSW5wdXQ6T307cmV0dXJuIG0uanN4KG1fLHtzY29wZTpvLC4uLlksY2hpbGRyZW46aXkoZyk/ZyhZKTppfSl9VWwocnksIlN3aXRjaFByb3ZpZGVyIik7dmFyIGhfPSJTd2l0Y2hUcmlnZ2VyIixwXz12LmZvcndhcmRSZWYoVWwoZnVuY3Rpb24oe19fc2NvcGVTd2l0Y2g6byxvbkNsaWNrOnUsLi4uaX0scyl7Y29uc3R7Y29udHJvbDpmLGZvcm06ZCx2YWx1ZTpwLGRpc2FibGVkOnksY2hlY2tlZDpiLHJlcXVpcmVkOngsc2V0Q29udHJvbDpnLHNldENoZWNrZWQ6QyxvblVzZXJDbGljazp3LGlzRm9ybUNvbnRyb2w6UixidWJibGVJbnB1dDpFfT1nZihoXyxvKSxUPUVlKHMsZyksTz12LnVzZVJlZihiKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBBPWQ/Zj8ub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKTpmPy5mb3JtO2lmKEEgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpe2NvbnN0IE49VWwoKCk9PkMoTy5jdXJyZW50KSwicmVzZXQiKTtyZXR1cm4gQS5hZGRFdmVudExpc3RlbmVyKCJyZXNldCIsTiksKCk9PkEucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzZXQiLE4pfX0sW2YsZCxDXSksbS5qc3goQ2UuYnV0dG9uLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6YiwiYXJpYS1yZXF1aXJlZCI6eCwiZGF0YS1zdGF0ZSI6eWYoYiksImRhdGEtZGlzYWJsZWQiOnk/IiI6dm9pZCAwLGRpc2FibGVkOnksdmFsdWU6cCwuLi5pLHJlZjpULG9uQ2xpY2s6dWUodSxBPT57Y29uc3QgTj1BLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7dyh7cmVxdWVzdGVkQ2hlY2tlZDohYixoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjpOfSksQyhNPT4hTSksRSYmUiYmKE58fEEuc3RvcFByb3BhZ2F0aW9uKCkpfSl9KX0sIlN3aXRjaFRyaWdnZXIiKSksdl89di5mb3J3YXJkUmVmKFVsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVN3aXRjaDppLG5hbWU6cyxjaGVja2VkOmYsZGVmYXVsdENoZWNrZWQ6ZCxyZXF1aXJlZDpwLGRpc2FibGVkOnksdmFsdWU6YixvbkNoZWNrZWRDaGFuZ2U6eCxmb3JtOmcsLi4uQ309bztyZXR1cm4gbS5qc3gocnkse19fc2NvcGVTd2l0Y2g6aSxjaGVja2VkOmYsZGVmYXVsdENoZWNrZWQ6ZCxkaXNhYmxlZDp5LHJlcXVpcmVkOnAsb25DaGVja2VkQ2hhbmdlOngsbmFtZTpzLGZvcm06Zyx2YWx1ZTpiLGludGVybmFsX2RvX25vdF91c2VfcmVuZGVyOih7aXNGb3JtQ29udHJvbDp3fSk9Pm0uanN4cyhtLkZyYWdtZW50LHtjaGlsZHJlbjpbbS5qc3gocF8sey4uLkMscmVmOnUsX19zY29wZVN3aXRjaDppfSksdyYmbS5qc3goeF8se19fc2NvcGVTd2l0Y2g6aX0pXX0pfSl9LCJTd2l0Y2giKSksZ189IlN3aXRjaFRodW1iIix5Xz12LmZvcndhcmRSZWYoVWwoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU3dpdGNoOmksLi4uc309byxmPWdmKGdfLGkpO3JldHVybiBtLmpzeChDZS5zcGFuLHsiZGF0YS1zdGF0ZSI6eWYoZi5jaGVja2VkKSwiZGF0YS1kaXNhYmxlZCI6Zi5kaXNhYmxlZD8iIjp2b2lkIDAsLi4ucyxyZWY6dX0pfSwiU3dpdGNoVGh1bWIiKSksYl89IlN3aXRjaEJ1YmJsZUlucHV0Iix4Xz12LmZvcndhcmRSZWYoVWwoZnVuY3Rpb24oe19fc2NvcGVTd2l0Y2g6byxvbkNsaWNrOnUsLi4uaX0scyl7Y29uc3R7Y29udHJvbDpmLHVzZXJDbGljazpkLGNoZWNrZWQ6cCxkZWZhdWx0Q2hlY2tlZDp5LHJlcXVpcmVkOmIsZGlzYWJsZWQ6eCxuYW1lOmcsdmFsdWU6Qyxmb3JtOncsYnViYmxlSW5wdXQ6UixzZXRCdWJibGVJbnB1dDpFfT1nZihiXyxvKSxUPUVlKHMsRSksTz11cihmKSxBPXYudXNlUmVmKCExKSxOPXYudXNlUmVmKHApLE09di51c2VSZWYoZCksWT12LnVzZVJlZihudWxsKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IFU9UjtpZighVSlyZXR1cm47Y29uc3QgQj13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsVz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsImNoZWNrZWQiKS5zZXQ7aWYoIVcpcmV0dXJuO2NvbnN0IG5lPU4uY3VycmVudCE9PXA7Ti5jdXJyZW50PXA7Y29uc3QgZWU9ZCE9PW51bGwmJmQhPT1NLmN1cnJlbnQ7aWYoTS5jdXJyZW50PWQsZWUpWS5jdXJyZW50PW5lP251bGw6ZCxuZSYmVy5jYWxsKFUscCksVS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiFkLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9ufSkpO2Vsc2UgaWYobmUpe2NvbnN0IGNlPVkuY3VycmVudDtZLmN1cnJlbnQ9bnVsbDtjb25zdCBtZT1jZT8ucmVxdWVzdGVkQ2hlY2tlZD09PXA7QS5jdXJyZW50PSEwLFcuY2FsbChVLHApLFUuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImNsaWNrIix7YnViYmxlczohKG1lJiZjZS5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbil9KSksQS5jdXJyZW50PSExfX0sW1IscCxkXSk7Y29uc3QgSD12LnVzZVJlZihwKTtyZXR1cm4gbS5qc3goQ2UuaW5wdXQse3R5cGU6ImNoZWNrYm94IiwiYXJpYS1oaWRkZW4iOiEwLGRlZmF1bHRDaGVja2VkOnk/P0guY3VycmVudCxyZXF1aXJlZDpiLGRpc2FibGVkOngsbmFtZTpnLHZhbHVlOkMsZm9ybTp3LC4uLmksdGFiSW5kZXg6LTEscmVmOlQsb25DbGljazp1ZSh1LFU9PntBLmN1cnJlbnQmJlUuc3RvcFByb3BhZ2F0aW9uKCl9KSxzdHlsZTp7Li4uaS5zdHlsZSwuLi5PLHBvc2l0aW9uOiJhYnNvbHV0ZSIscG9pbnRlckV2ZW50czoibm9uZSIsb3BhY2l0eTowLG1hcmdpbjowLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtMTAwJSkifX0pfSwiU3dpdGNoQnViYmxlSW5wdXQiKSk7ZnVuY3Rpb24gaXkoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifVVsKGl5LCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24geWYoYSl7cmV0dXJuIGE/ImNoZWNrZWQiOiJ1bmNoZWNrZWQifVVsKHlmLCJnZXRTdGF0ZSIpO2Z1bmN0aW9uIFNfKHtsYWJlbDphLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZTpzfSxmKXtjb25zdCBkPXYudXNlSWQoKSxwPW0uanN4KHZfLHtyZWY6ZixpZDpkLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZToiaC01IHctOSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYmctbGFyay1uMzAwIGZvY3VzLXZpc2libGU6Zm9jdXMtcmluZyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi1mYXN0IGVhc2UtYmFzZSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1icmFuZC1zZWNvbmRhcnkgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAiLGNoaWxkcmVuOm0uanN4KHlfLHtjbGFzc05hbWU6ImJsb2NrIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUgc2hhZG93LXNtIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLWZhc3QgZWFzZS1iYXNlIGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRyYW5zbGF0ZS14LTQgZGF0YS1bc3RhdGU9dW5jaGVja2VkXTp0cmFuc2xhdGUteC0wLjUifSl9KTtyZXR1cm4gYT9tLmpzeHMoImRpdiIse2NsYXNzTmFtZTprZSgiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLHMpLGNoaWxkcmVuOltwLG0uanN4KGZmLHtodG1sRm9yOmQsY2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphfSldfSk6bS5qc3goImRpdiIse2NsYXNzTmFtZTpzLGNoaWxkcmVuOnB9KX1jb25zdCAkaT12LmZvcndhcmRSZWYoU18pOyRpLmRpc3BsYXlOYW1lPSJMYXJrU3dpdGNoIjt2YXIgQ189T2JqZWN0LmRlZmluZVByb3BlcnR5LFl0PShhLG8pPT5DXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxiZj0iRGlhbG9nIixbY3ksdXldPU10KGJmKSxbVF8sX25dPWN5KGJmKSxzeT1ZdChhPT57Y29uc3R7X19zY29wZURpYWxvZzpvLGNoaWxkcmVuOnUsb3BlbjppLGRlZmF1bHRPcGVuOnMsb25PcGVuQ2hhbmdlOmYsbW9kYWw6ZD0hMH09YSxwPXYudXNlUmVmKG51bGwpLHk9di51c2VSZWYobnVsbCkse25vZGVzOmIscmVnaXN0cnk6eH09Y3MoKSxbZyxDXT1Fbih7cHJvcDppLGRlZmF1bHRQcm9wOnM/PyExLG9uQ2hhbmdlOmYsY2FsbGVyOmJmfSksW3csUl09di51c2VTdGF0ZSgwKSxbRSxUXT12LnVzZVN0YXRlKDApO3JldHVybiBtLmpzeChUXyx7c2NvcGU6byx0cmlnZ2VyUmVmOnAsY29udGVudFJlZjp5LGNvbnRlbnRJZDp0bCgpLHRpdGxlSWQ6dGwoKSxkZXNjcmlwdGlvbklkOnRsKCksdGl0bGVQcmVzZW50Onc+MCxkZXNjcmlwdGlvblByZXNlbnQ6RT4wLHNldFRpdGxlQ291bnQ6UixzZXREZXNjcmlwdGlvbkNvdW50OlQsb3BlbjpnLG9uT3BlbkNoYW5nZTpDLG9uT3BlblRvZ2dsZTp2LnVzZUNhbGxiYWNrKCgpPT5DKE89PiFPKSxbQ10pLG1vZGFsOmQsYnJhbmNoTm9kZXM6YixicmFuY2hSZWdpc3RyeTp4LGNoaWxkcmVuOnV9KX0sIkRpYWxvZyIpLHdfPSJEaWFsb2dUcmlnZ2VyIixFXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlRGlhbG9nOmksLi4uc309byxmPV9uKHdfLGkpLGQ9RWUodSxmLnRyaWdnZXJSZWYpO3JldHVybiBtLmpzeChDZS5idXR0b24se3R5cGU6ImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiOiJkaWFsb2ciLCJhcmlhLWV4cGFuZGVkIjpmLm9wZW4sImFyaWEtY29udHJvbHMiOmYub3Blbj9mLmNvbnRlbnRJZDp2b2lkIDAsImRhdGEtc3RhdGUiOkppKGYub3BlbiksLi4ucyxyZWY6ZCxvbkNsaWNrOnVlKG8ub25DbGljayxmLm9uT3BlblRvZ2dsZSl9KX0sIkRpYWxvZ1RyaWdnZXIiKSksZnk9IkRpYWxvZ1BvcnRhbCIsW1JfLGR5XT1jeShmeSx7Zm9yY2VNb3VudDp2b2lkIDB9KSxteT1ZdChhPT57Y29uc3R7X19zY29wZURpYWxvZzpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjppLGNvbnRhaW5lcjpzfT1hLGY9X24oZnksbyk7cmV0dXJuIG0uanN4KFJfLHtzY29wZTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjp2LkNoaWxkcmVuLm1hcChpLGQ9Pm0uanN4KG1uLHtwcmVzZW50OnV8fGYub3BlbixjaGlsZHJlbjptLmpzeChzcix7YXNDaGlsZDohMCxjb250YWluZXI6cyxjaGlsZHJlbjpkfSl9KSl9KX0sIkRpYWxvZ1BvcnRhbCIpLHhmPSJEaWFsb2dPdmVybGF5IixoeT12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPWR5KHhmLG8uX19zY29wZURpYWxvZykse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsLi4uZn09byxkPV9uKHhmLG8uX19zY29wZURpYWxvZyk7cmV0dXJuIGQubW9kYWw/bS5qc3gobW4se3ByZXNlbnQ6c3x8ZC5vcGVuLGNoaWxkcmVuOm0uanN4KE9fLHsuLi5mLHJlZjp1fSl9KTpudWxsfSwiRGlhbG9nT3ZlcmxheSIpKSxfXz1MbigiRGlhbG9nT3ZlcmxheS5SZW1vdmVTY3JvbGwiKSxPXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlRGlhbG9nOmksLi4uc309byxmPV9uKHhmLGkpLGQ9VnAoKSxwPUVlKHUsZCk7cmV0dXJuIG0uanN4KEdpLHthczpfXyxhbGxvd1BpbmNoWm9vbTohMCxzaGFyZHM6di51c2VNZW1vKCgpPT5bZi5jb250ZW50UmVmLC4uLmYuYnJhbmNoTm9kZXMubWFwKHk9Pih7Y3VycmVudDp5fSkpXSxbZi5jb250ZW50UmVmLGYuYnJhbmNoTm9kZXNdKSxjaGlsZHJlbjptLmpzeChDZS5kaXYseyJkYXRhLXN0YXRlIjpKaShmLm9wZW4pLC4uLnMscmVmOnAsc3R5bGU6e3BvaW50ZXJFdmVudHM6ImF1dG8iLC4uLnMuc3R5bGV9fSl9KX0sIkRpYWxvZ092ZXJsYXlJbXBsIikpLHZyPSJEaWFsb2dDb250ZW50IixweT12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPWR5KHZyLG8uX19zY29wZURpYWxvZykse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsLi4uZn09byxkPV9uKHZyLG8uX19zY29wZURpYWxvZyk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50OnN8fGQub3BlbixjaGlsZHJlbjpkLm1vZGFsP20uanN4KEFfLHsuLi5mLHJlZjp1fSk6bS5qc3goTl8sey4uLmYscmVmOnV9KX0pfSwiRGlhbG9nQ29udGVudCIpKSxBXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPV9uKHZyLG8uX19zY29wZURpYWxvZykscz12LnVzZVJlZihudWxsKSxmPUVlKHUsaS5jb250ZW50UmVmLHMpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IGQ9cy5jdXJyZW50O2lmKGQpcmV0dXJuIExzKGQpfSxbXSksbS5qc3godnksey4uLm8scmVmOmYsdHJhcEZvY3VzOmkub3BlbixkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6aS5vcGVuLG9uQ2xvc2VBdXRvRm9jdXM6dWUoby5vbkNsb3NlQXV0b0ZvY3VzLGQ9PntkLnByZXZlbnREZWZhdWx0KCksaS50cmlnZ2VyUmVmLmN1cnJlbnQ/LmZvY3VzKCl9KSxvblBvaW50ZXJEb3duT3V0c2lkZTp1ZShvLm9uUG9pbnRlckRvd25PdXRzaWRlLGQ9Pntjb25zdCBwPWQuZGV0YWlsLm9yaWdpbmFsRXZlbnQseT1wLmJ1dHRvbj09PTAmJnAuY3RybEtleT09PSEwOyhwLmJ1dHRvbj09PTJ8fHkpJiZkLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzT3V0c2lkZTp1ZShvLm9uRm9jdXNPdXRzaWRlLGQ9PmQucHJldmVudERlZmF1bHQoKSl9KX0sIkRpYWxvZ0NvbnRlbnRNb2RhbCIpKSxOXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPV9uKHZyLG8uX19zY29wZURpYWxvZykscz12LnVzZVJlZighMSksZj12LnVzZVJlZighMSk7cmV0dXJuIG0uanN4KHZ5LHsuLi5vLHJlZjp1LHRyYXBGb2N1czohMSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITEsb25DbG9zZUF1dG9Gb2N1czpkPT57by5vbkNsb3NlQXV0b0ZvY3VzPy4oZCksZC5kZWZhdWx0UHJldmVudGVkfHwocy5jdXJyZW50fHxpLnRyaWdnZXJSZWYuY3VycmVudD8uZm9jdXMoKSxkLnByZXZlbnREZWZhdWx0KCkpLHMuY3VycmVudD0hMSxmLmN1cnJlbnQ9ITF9LG9uSW50ZXJhY3RPdXRzaWRlOmQ9PntvLm9uSW50ZXJhY3RPdXRzaWRlPy4oZCksZC5kZWZhdWx0UHJldmVudGVkfHwocy5jdXJyZW50PSEwLGQuZGV0YWlsLm9yaWdpbmFsRXZlbnQudHlwZT09PSJwb2ludGVyZG93biImJihmLmN1cnJlbnQ9ITApKTtjb25zdCBwPWQudGFyZ2V0O2kudHJpZ2dlclJlZi5jdXJyZW50Py5jb250YWlucyhwKSYmZC5wcmV2ZW50RGVmYXVsdCgpLGQuZGV0YWlsLm9yaWdpbmFsRXZlbnQudHlwZT09PSJmb2N1c2luIiYmZi5jdXJyZW50JiZkLnByZXZlbnREZWZhdWx0KCl9fSl9LCJEaWFsb2dDb250ZW50Tm9uTW9kYWwiKSksdnk9di5mb3J3YXJkUmVmKFl0KGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZURpYWxvZzppLHRyYXBGb2N1czpzLG9uT3BlbkF1dG9Gb2N1czpmLG9uQ2xvc2VBdXRvRm9jdXM6ZCwiYXJpYS1kZXNjcmliZWRieSI6cCxjaGlsZHJlbjp5LC4uLmJ9PW8seD1fbih2cixpKTtyZXR1cm4gcnIoKSxtLmpzeChpcyx7cmVnaXN0cnk6eC5icmFuY2hSZWdpc3RyeSxjaGlsZHJlbjptLmpzeChycyx7YXNDaGlsZDohMCxsb29wOiEwLHRyYXBwZWQ6cyxicmFuY2hlczp4LmJyYW5jaE5vZGVzLG9uTW91bnRBdXRvRm9jdXM6ZixvblVubW91bnRBdXRvRm9jdXM6ZCxjaGlsZHJlbjptLmpzeChvcix7cm9sZToiZGlhbG9nIixpZDp4LmNvbnRlbnRJZCwiYXJpYS1sYWJlbGxlZGJ5Ijp4LnRpdGxlUHJlc2VudD94LnRpdGxlSWQ6dm9pZCAwLCJhcmlhLWRlc2NyaWJlZGJ5Ijp4LmRlc2NyaXB0aW9uUHJlc2VudD94eShwLHguZGVzY3JpcHRpb25JZCk6cCwiZGF0YS1zdGF0ZSI6SmkoeC5vcGVuKSwuLi5iLHJlZjp1LGRlZmVyUG9pbnRlckRvd25PdXRzaWRlOiEwLG9uRGlzbWlzczooKT0+eC5vbk9wZW5DaGFuZ2UoITEpLGNoaWxkcmVuOnl9KX0pfSl9LCJEaWFsb2dDb250ZW50SW1wbCIpKSxneT12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlRGlhbG9nOmksLi4uc309byxmPV9uKCJEaWFsb2dUaXRsZSIsaSkse3NldFRpdGxlQ291bnQ6ZH09ZjtyZXR1cm4gbnQoKCk9PihkKHA9PnArMSksKCk9PmQocD0+cC0xKSksW2RdKSxtLmpzeChDZS5oMix7aWQ6Zi50aXRsZUlkLC4uLnMscmVmOnV9KX0sIkRpYWxvZ1RpdGxlIikpLHl5PXYuZm9yd2FyZFJlZihZdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVEaWFsb2c6aSwuLi5zfT1vLGY9X24oIkRpYWxvZ0Rlc2NyaXB0aW9uIixpKSx7c2V0RGVzY3JpcHRpb25Db3VudDpkfT1mO3JldHVybiBudCgoKT0+KGQocD0+cCsxKSwoKT0+ZChwPT5wLTEpKSxbZF0pLG0uanN4KENlLnAse2lkOmYuZGVzY3JpcHRpb25JZCwuLi5zLHJlZjp1fSl9LCJEaWFsb2dEZXNjcmlwdGlvbiIpKSxEXz0iRGlhbG9nQ2xvc2UiLGJ5PXYuZm9yd2FyZFJlZihZdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVEaWFsb2c6aSwuLi5zfT1vLGY9X24oRF8saSk7cmV0dXJuIG0uanN4KENlLmJ1dHRvbix7dHlwZToiYnV0dG9uIiwuLi5zLHJlZjp1LG9uQ2xpY2s6dWUoby5vbkNsaWNrLCgpPT5mLm9uT3BlbkNoYW5nZSghMSkpfSl9LCJEaWFsb2dDbG9zZSIpKTtmdW5jdGlvbiB4eSguLi5hKXtjb25zdCBvPW5ldyBTZXQ7Zm9yKGNvbnN0IHUgb2YgYSlpZih0eXBlb2YgdT09InN0cmluZyIpZm9yKGNvbnN0IGkgb2YgU3RyaW5nKHUpLnRyaW0oKS5zcGxpdCgvXHMrLykpaSYmby5hZGQoaSk7cmV0dXJuIG8uc2l6ZT4wP0FycmF5LmZyb20obykuam9pbigiICIpOnZvaWQgMH1ZdCh4eSwiY29uY2F0QXJpYURlc2NyaWJlZGJ5Iik7ZnVuY3Rpb24gSmkoYSl7cmV0dXJuIGE/Im9wZW4iOiJjbG9zZWQifVl0KEppLCJnZXRTdGF0ZSIpO2Z1bmN0aW9uIGpfKHtvcGVuOmEsb25PcGVuQ2hhbmdlOm8sY2hpbGRyZW46dX0pe3JldHVybiBtLmpzeChzeSx7b3BlbjphLG9uT3BlbkNoYW5nZTpvLGNoaWxkcmVuOnV9KX1mdW5jdGlvbiBNXyh7dGl0bGU6YSxkZXNjcmlwdGlvbjpvLGNsYXNzTmFtZTp1LGNoaWxkcmVuOml9LHMpe3JldHVybiBtLmpzeHMobXkse2NoaWxkcmVuOlttLmpzeChoeSx7Y2xhc3NOYW1lOiJmaXhlZCBpbnNldC0wIGJnLVt2YXIoLS1vdmVybGF5LW1hc2spXSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0In0pLG0uanN4cyhweSx7cmVmOnMsLi4ubz97fTp7ImFyaWEtZGVzY3JpYmVkYnkiOnZvaWQgMH0sY2xhc3NOYW1lOmtlKCJmaXhlZCBsZWZ0LTEvMiB0b3AtMS8yIHctW2NhbGMoMTAwdnctMi41cmVtKV0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHJvdW5kZWQteGwgYmctYnJhbmQtcHJpbWFyeSBwLTUgc2hhZG93LVt2YXIoLS1zaGFkb3ctb3ZlcmxheSldIG91dGxpbmUtbm9uZSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0IG1kOnctZnVsbCBtZDptYXgtdy1tZCBtZDpwLTYiLHUpLGNoaWxkcmVuOlttLmpzeChneSx7Y2xhc3NOYW1lOiJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1sYXJrLW45MDAgbWQ6dGV4dC1bMTdweF0iLGNoaWxkcmVuOmF9KSxvP20uanN4KHl5LHtjbGFzc05hbWU6Im10LTMgdGV4dC1zbSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46b30pOm51bGwsaV19KV19KX1jb25zdCBTeT12LmZvcndhcmRSZWYoTV8pO1N5LmRpc3BsYXlOYW1lPSJMYXJrRGlhbG9nLkNvbnRlbnQiO2Z1bmN0aW9uIHpfKHtjaGlsZHJlbjphLGNsYXNzTmFtZTpvfSl7cmV0dXJuIG0uanN4KCJkaXYiLHtjbGFzc05hbWU6a2UoImZsZXgganVzdGlmeS1lbmQgZ2FwLTMgYm9yZGVyLXQgYm9yZGVyLVtjb2xvci1taXgoaW5fc3JnYix2YXIoLS1jb2xvci1sYXJrLW45MDApXzE1JSx0cmFuc3BhcmVudCldIHB4LTUgcHktNCBtZDpweC02IC1teC01IC1tYi01IG1kOi1teC02IG1kOi1tYi02IixvKSxjaGlsZHJlbjphfSl9Y29uc3QgU2Y9T2JqZWN0LmFzc2lnbihqXyx7Q29udGVudDpTeSxGb290ZXI6el99KTt2YXIga189T2JqZWN0LmRlZmluZVByb3BlcnR5LHVsPShhLG8pPT5rXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxMXz0iQWxlcnREaWFsb2ciLFtVXyxjal09TXQoTF8sW3V5XSksc2w9dXkoKSxIXz11bChhPT57Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOm8sLi4udX09YSxpPXNsKG8pO3JldHVybiBtLmpzeChzeSx7Li4uaSwuLi51LG1vZGFsOiEwfSl9LCJBbGVydERpYWxvZyIpO3YuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLC4uLnN9PW8sZj1zbChpKTtyZXR1cm4gbS5qc3goRV8sey4uLmYsLi4ucyxyZWY6dX0pfSwiQWxlcnREaWFsb2dUcmlnZ2VyIikpO3ZhciBCXz11bChhPT57Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOm8sLi4udX09YSxpPXNsKG8pO3JldHVybiBtLmpzeChteSx7Li4uaSwuLi51fSl9LCJBbGVydERpYWxvZ1BvcnRhbCIpLElfPXYuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLC4uLnN9PW8sZj1zbChpKTtyZXR1cm4gbS5qc3goaHksey4uLmYsLi4ucyxyZWY6dX0pfSwiQWxlcnREaWFsb2dPdmVybGF5IikpLFBfPSJBbGVydERpYWxvZ0NvbnRlbnQiLFtHXyxWX109VV8oUF8pLFlfPXYuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLGNoaWxkcmVuOnMsLi4uZn09byxkPXNsKGkpLHA9di51c2VSZWYobnVsbCkseT1FZSh1LHApLGI9di51c2VSZWYobnVsbCk7cmV0dXJuIG0uanN4KEdfLHtzY29wZTppLGNhbmNlbFJlZjpiLGNoaWxkcmVuOm0uanN4KHB5LHtyb2xlOiJhbGVydGRpYWxvZyIsLi4uZCwuLi5mLHJlZjp5LG9uT3BlbkF1dG9Gb2N1czp1ZShmLm9uT3BlbkF1dG9Gb2N1cyx4PT57eC5wcmV2ZW50RGVmYXVsdCgpLGIuY3VycmVudD8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0pLG9uUG9pbnRlckRvd25PdXRzaWRlOng9PngucHJldmVudERlZmF1bHQoKSxvbkludGVyYWN0T3V0c2lkZTp4PT54LnByZXZlbnREZWZhdWx0KCksY2hpbGRyZW46c30pfSl9LCJBbGVydERpYWxvZ0NvbnRlbnQiKSkscV89di5mb3J3YXJkUmVmKHVsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOmksLi4uc309byxmPXNsKGkpO3JldHVybiBtLmpzeChneSx7Li4uZiwuLi5zLHJlZjp1fSl9LCJBbGVydERpYWxvZ1RpdGxlIikpLFhfPXYuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLC4uLnN9PW8sZj1zbChpKTtyZXR1cm4gbS5qc3goeXksey4uLmYsLi4ucyxyZWY6dX0pfSwiQWxlcnREaWFsb2dEZXNjcmlwdGlvbiIpKSxLXz12LmZvcndhcmRSZWYodWwoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlQWxlcnREaWFsb2c6aSwuLi5zfT1vLGY9c2woaSk7cmV0dXJuIG0uanN4KGJ5LHsuLi5mLC4uLnMscmVmOnV9KX0sIkFsZXJ0RGlhbG9nQWN0aW9uIikpLFFfPSJBbGVydERpYWxvZ0NhbmNlbCIsWl89di5mb3J3YXJkUmVmKHVsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOmksLi4uc309byx7Y2FuY2VsUmVmOmZ9PVZfKFFfLGkpLGQ9c2woaSkscD1FZSh1LGYpO3JldHVybiBtLmpzeChieSx7Li4uZCwuLi5zLHJlZjpwfSl9LCJBbGVydERpYWxvZ0NhbmNlbCIpKTtmdW5jdGlvbiBGXyh7b3BlbjphLG9uT3BlbkNoYW5nZTpvLHRpdGxlOnUsZGVzY3JpcHRpb246aSxjb25maXJtTGFiZWw6cyxjYW5jZWxMYWJlbDpmPSJI4buneSIsb25Db25maXJtOmQsaXNQZW5kaW5nOnAsY2hpbGRyZW46eSxjbGFzc05hbWU6Yn0seCl7cmV0dXJuIG0uanN4KEhfLHtvcGVuOmEsb25PcGVuQ2hhbmdlOm8sY2hpbGRyZW46bS5qc3hzKEJfLHtjaGlsZHJlbjpbbS5qc3goSV8se2NsYXNzTmFtZToiZml4ZWQgaW5zZXQtMCBiZy1bdmFyKC0tb3ZlcmxheS1tYXNrKV0gZGF0YS1bc3RhdGU9b3Blbl06YW5pbS1vdmVybGF5LWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbS1vdmVybGF5LW91dCJ9KSxtLmpzeHMoWV8se3JlZjp4LC4uLmk/e306eyJhcmlhLWRlc2NyaWJlZGJ5Ijp2b2lkIDB9LG9uRXNjYXBlS2V5RG93bjpwP2c9PmcucHJldmVudERlZmF1bHQoKTp2b2lkIDAsY2xhc3NOYW1lOmtlKCJmaXhlZCBsZWZ0LTEvMiB0b3AtMS8yIHctW2NhbGMoMTAwdnctMi41cmVtKV0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHJvdW5kZWQteGwgYmctYnJhbmQtcHJpbWFyeSBwLTUgc2hhZG93LVt2YXIoLS1zaGFkb3ctb3ZlcmxheSldIG91dGxpbmUtbm9uZSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0IG1kOnctZnVsbCBtZDptYXgtdy1tZCBtZDpwLTYiLGIpLGNoaWxkcmVuOlttLmpzeChxXyx7Y2xhc3NOYW1lOiJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1sYXJrLW45MDAgbWQ6dGV4dC1bMTdweF0iLGNoaWxkcmVuOnV9KSxpP20uanN4KFhfLHtjbGFzc05hbWU6Im10LTMgdGV4dC1zbSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46aX0pOm51bGwseT9tLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0zIixjaGlsZHJlbjp5fSk6bnVsbCxtLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtMyBmbGV4IGp1c3RpZnktZW5kIGdhcC0zIGJvcmRlci10IGJvcmRlci1bY29sb3ItbWl4KGluX3NyZ2IsdmFyKC0tY29sb3ItbGFyay1uOTAwKV8xNSUsdHJhbnNwYXJlbnQpXSBweC01IHB5LTQgbWQ6cHgtNiAtbXgtNSAtbWItNSBtZDotbXgtNiBtZDotbWItNiIsY2hpbGRyZW46W20uanN4KFpfLHthc0NoaWxkOiEwLGNoaWxkcmVuOm0uanN4KERlLHt0eXBlOiJidXR0b24iLGRpc2FibGVkOnAsY2hpbGRyZW46Zn0pfSksbS5qc3goS18se2FzQ2hpbGQ6ITAsY2hpbGRyZW46bS5qc3goRGUse3R5cGU6ImJ1dHRvbiIsdmFyaWFudDoicHJpbWFyeSIsaXNQZW5kaW5nOnAsb25DbGljazpkLGNoaWxkcmVuOnN9KX0pXX0pXX0pXX0pfSl9Y29uc3QgQ3k9di5mb3J3YXJkUmVmKEZfKTtDeS5kaXNwbGF5TmFtZT0iTGFya0FsZXJ0RGlhbG9nIjt2YXIgJF89T2JqZWN0LmRlZmluZVByb3BlcnR5LEZlPShhLG8pPT4kXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxUeT1BbFsiIHN0YXJ0VHJhbnNpdGlvbiAiLnRyaW0oKS50b1N0cmluZygpXXx8KCgpPT57fSksd3k9IlRvYXN0UHJvdmlkZXIiLFtDZixFeSxKX109YXIoIlRvYXN0IiksVGY9e0xlZnQ6ImxlZnQiLFJpZ2h0OiJyaWdodCJ9LFJ5PXtGb3JlZ3JvdW5kOiJmb3JlZ3JvdW5kIn0sW195LHVqXT1NdCgiVG9hc3QiLFtKX10pLFtXXyxXaV09X3kod3kpO2Z1bmN0aW9uIGVjKGEpe3R5cGVvZiBUeT09ImZ1bmN0aW9uIj9UeShhKTphKCl9RmUoZWMsInNjaGVkdWxlVXBkYXRlIik7dmFyIGVPPUZlKGE9Pntjb25zdHtfX3Njb3BlVG9hc3Q6byxsYWJlbDp1PSJOb3RpZmljYXRpb24iLGR1cmF0aW9uOmk9NWUzLHN3aXBlRGlyZWN0aW9uOnM9VGYuUmlnaHQsc3dpcGVUaHJlc2hvbGQ6Zj01MCxhbm5vdW5jZXJDb250YWluZXI6ZCxjaGlsZHJlbjpwfT1hLFt5LGJdPXYudXNlU3RhdGUobnVsbCksW3gsZ109di51c2VTdGF0ZSgwKSxDPXYudXNlUmVmKCExKSx3PXYudXNlQ2FsbGJhY2soVD0+e2VjKCgpPT5iKFQpKX0sW10pLFI9di51c2VDYWxsYmFjaygoKT0+e2VjKCgpPT5nKFQ9PlQrMSkpfSxbXSksRT12LnVzZUNhbGxiYWNrKCgpPT57ZWMoKCk9PmcoVD0+VC0xKSl9LFtdKTtyZXR1cm4gdS50cmltKCl8fGNvbnNvbGUuZXJyb3IoYEludmFsaWQgcHJvcCBcYGxhYmVsXGAgc3VwcGxpZWQgdG8gXGAke3d5fVxgLiBFeHBlY3RlZCBub24tZW1wdHkgXGBzdHJpbmdcYC5gKSxtLmpzeChDZi5Qcm92aWRlcix7c2NvcGU6byxjaGlsZHJlbjptLmpzeChXXyx7c2NvcGU6byxsYWJlbDp1LGR1cmF0aW9uOmksc3dpcGVEaXJlY3Rpb246cyxzd2lwZVRocmVzaG9sZDpmLHRvYXN0Q291bnQ6eCx2aWV3cG9ydDp5LG9uVmlld3BvcnRDaGFuZ2U6dyxvblRvYXN0QWRkOlIsb25Ub2FzdFJlbW92ZTpFLGlzQ2xvc2VQYXVzZWRSZWY6Qyxhbm5vdW5jZXJDb250YWluZXI6ZCxjaGlsZHJlbjpwfSl9KX0sIlRvYXN0UHJvdmlkZXIiKSx0Tz0iVG9hc3RWaWV3cG9ydCIsbk89WyJGOCJdLHdmPSJ0b2FzdC52aWV3cG9ydFBhdXNlIixFZj0idG9hc3Qudmlld3BvcnRSZXN1bWUiLGxPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLGhvdGtleTpzPW5PLGxhYmVsOmY9Ik5vdGlmaWNhdGlvbnMgKHtob3RrZXl9KSIsLi4uZH09byxwPVdpKHRPLGkpLHk9RXkoaSksYj12LnVzZVJlZihudWxsKSx4PXYudXNlUmVmKG51bGwpLGc9di51c2VSZWYobnVsbCksQz12LnVzZVJlZihudWxsKSx3PUVlKHUsQyxwLm9uVmlld3BvcnRDaGFuZ2UpLFI9cy5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLEU9cC50b2FzdENvdW50PjA7di51c2VFZmZlY3QoKCk9Pntjb25zdCBPPUZlKEE9PntzLmxlbmd0aCE9PTAmJnMuZXZlcnkoTT0+QVtNXXx8QS5jb2RlPT09TSkmJkMuY3VycmVudD8uZm9jdXMoKX0sImhhbmRsZUtleURvd24iKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE8pfSxbc10pLHYudXNlRWZmZWN0KCgpPT57Y29uc3QgTz1iLmN1cnJlbnQsQT1DLmN1cnJlbnQ7aWYoRSYmTyYmQSl7Y29uc3QgTj1GZSgoKT0+e2lmKCFwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudCl7Y29uc3QgVT1uZXcgQ3VzdG9tRXZlbnQod2YpO0EuZGlzcGF0Y2hFdmVudChVKSxwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudD0hMH19LCJoYW5kbGVQYXVzZSIpLE09RmUoKCk9PntpZihwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudCl7Y29uc3QgVT1uZXcgQ3VzdG9tRXZlbnQoRWYpO0EuZGlzcGF0Y2hFdmVudChVKSxwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudD0hMX19LCJoYW5kbGVSZXN1bWUiKSxZPUZlKFU9PnshTy5jb250YWlucyhVLnJlbGF0ZWRUYXJnZXQpJiZNKCl9LCJoYW5kbGVGb2N1c091dFJlc3VtZSIpLEg9RmUoKCk9PntPLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxNKCl9LCJoYW5kbGVQb2ludGVyTGVhdmVSZXN1bWUiKTtyZXR1cm4gTy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixOKSxPLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixZKSxPLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixOKSxPLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsSCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLE4pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsTSksKCk9PntPLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLE4pLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLFkpLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE4pLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixIKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsTiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixNKX19fSxbRSxwLmlzQ2xvc2VQYXVzZWRSZWZdKTtjb25zdCBUPXYudXNlQ2FsbGJhY2soKHt0YWJiaW5nRGlyZWN0aW9uOk99KT0+e2NvbnN0IE49eSgpLm1hcChNPT57Y29uc3QgWT1NLnJlZi5jdXJyZW50LEg9W1ksLi4uankoWSldO3JldHVybiBPPT09ImZvcndhcmRzIj9IOkgucmV2ZXJzZSgpfSk7cmV0dXJuKE89PT0iZm9yd2FyZHMiP04ucmV2ZXJzZSgpOk4pLmZsYXQoKX0sW3ldKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBPPUMuY3VycmVudDtpZihPKXtjb25zdCBBPUZlKE49Pntjb25zdCBNPU4uYWx0S2V5fHxOLmN0cmxLZXl8fE4ubWV0YUtleTtpZihOLmtleT09PSJUYWIiJiYhTSl7Y29uc3QgSD1kb2N1bWVudC5hY3RpdmVFbGVtZW50LFU9Ti5zaGlmdEtleTtpZihOLnRhcmdldD09PU8mJlUpe3guY3VycmVudD8uZm9jdXMoKTtyZXR1cm59Y29uc3QgVz1UKHt0YWJiaW5nRGlyZWN0aW9uOlU/ImJhY2t3YXJkcyI6ImZvcndhcmRzIn0pLG5lPVcuZmluZEluZGV4KGVlPT5lZT09PUgpO25jKFcuc2xpY2UobmUrMSkpP04ucHJldmVudERlZmF1bHQoKTpVP3guY3VycmVudD8uZm9jdXMoKTpnLmN1cnJlbnQ/LmZvY3VzKCl9fSwiaGFuZGxlS2V5RG93biIpO3JldHVybiBPLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEEpLCgpPT5PLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEEpfX0sW3ksVF0pLG0uanN4cyhzVCx7cmVmOmIscm9sZToicmVnaW9uIiwiYXJpYS1sYWJlbCI6Zi5yZXBsYWNlKCJ7aG90a2V5fSIsUiksdGFiSW5kZXg6LTEsc3R5bGU6e3BvaW50ZXJFdmVudHM6RT92b2lkIDA6Im5vbmUifSxjaGlsZHJlbjpbRSYmbS5qc3goT3kse3JlZjp4LG9uRm9jdXNGcm9tT3V0c2lkZVZpZXdwb3J0OigpPT57Y29uc3QgTz1UKHt0YWJiaW5nRGlyZWN0aW9uOiJmb3J3YXJkcyJ9KTtuYyhPKX19KSxtLmpzeChDZi5TbG90LHtzY29wZTppLGNoaWxkcmVuOm0uanN4KENlLm9sLHt0YWJJbmRleDotMSwuLi5kLHJlZjp3fSl9KSxFJiZtLmpzeChPeSx7cmVmOmcsb25Gb2N1c0Zyb21PdXRzaWRlVmlld3BvcnQ6KCk9Pntjb25zdCBPPVQoe3RhYmJpbmdEaXJlY3Rpb246ImJhY2t3YXJkcyJ9KTtuYyhPKX19KV19KX0sIlRvYXN0Vmlld3BvcnQiKSksYU89IlRvYXN0Rm9jdXNQcm94eSIsT3k9di5mb3J3YXJkUmVmKEZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRvYXN0Omksb25Gb2N1c0Zyb21PdXRzaWRlVmlld3BvcnQ6cywuLi5mfT1vLGQ9V2koYU8saSk7cmV0dXJuIG0uanN4KEZzLHt0YWJJbmRleDowLC4uLmYscmVmOnUsc3R5bGU6e3Bvc2l0aW9uOiJmaXhlZCJ9LG9uRm9jdXM6cD0+e2NvbnN0IHk9cC5yZWxhdGVkVGFyZ2V0OyFkLnZpZXdwb3J0Py5jb250YWlucyh5KSYmcygpfX0pfSwiVG9hc3RGb2N1c1Byb3h5IikpLHRjPSJUb2FzdCIsb089InRvYXN0LnN3aXBlU3RhcnQiLHJPPSJ0b2FzdC5zd2lwZU1vdmUiLGlPPSJ0b2FzdC5zd2lwZUNhbmNlbCIsY089InRvYXN0LnN3aXBlRW5kIix1Tz12LmZvcndhcmRSZWYoRmUoZnVuY3Rpb24obyx1KXtjb25zdHtmb3JjZU1vdW50Omksb3BlbjpzLGRlZmF1bHRPcGVuOmYsb25PcGVuQ2hhbmdlOmQsLi4ucH09byxbeSxiXT1Fbih7cHJvcDpzLGRlZmF1bHRQcm9wOmY/PyEwLG9uQ2hhbmdlOmQsY2FsbGVyOnRjfSk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50Oml8fHksY2hpbGRyZW46bS5qc3goZE8se29wZW46eSwuLi5wLHJlZjp1LG9uQ2xvc2U6KCk9PmIoITEpLG9uUGF1c2U6enQoby5vblBhdXNlKSxvblJlc3VtZTp6dChvLm9uUmVzdW1lKSxvblN3aXBlU3RhcnQ6dWUoby5vblN3aXBlU3RhcnQseD0+e3guY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJzdGFydCIpfSksb25Td2lwZU1vdmU6dWUoby5vblN3aXBlTW92ZSx4PT57Y29uc3R7eDpnLHk6Q309eC5kZXRhaWwuZGVsdGE7eC5jdXJyZW50VGFyZ2V0LnNldEF0dHJpYnV0ZSgiZGF0YS1zd2lwZSIsIm1vdmUiKSx4LmN1cnJlbnRUYXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14IixgJHtnfXB4YCkseC5jdXJyZW50VGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteSIsYCR7Q31weGApfSksb25Td2lwZUNhbmNlbDp1ZShvLm9uU3dpcGVDYW5jZWwseD0+e3guY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJjYW5jZWwiKSx4LmN1cnJlbnRUYXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14IikseC5jdXJyZW50VGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteSIpLHguY3VycmVudFRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteCIpLHguY3VycmVudFRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteSIpfSksb25Td2lwZUVuZDp1ZShvLm9uU3dpcGVFbmQseD0+e2NvbnN0e3g6Zyx5OkN9PXguZGV0YWlsLmRlbHRhO3guY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJlbmQiKSx4LmN1cnJlbnRUYXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14IikseC5jdXJyZW50VGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteSIpLHguY3VycmVudFRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteCIsYCR7Z31weGApLHguY3VycmVudFRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteSIsYCR7Q31weGApLGIoITEpfSl9KX0pfSwiVG9hc3QiKSksW3NPLGZPXT1feSh0Yyx7b25DbG9zZSgpe319KSxkTz12LmZvcndhcmRSZWYoRmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9hc3Q6aSx0eXBlOnM9UnkuRm9yZWdyb3VuZCxkdXJhdGlvbjpmLG9wZW46ZCxvbkNsb3NlOnAsb25Fc2NhcGVLZXlEb3duOnksb25QYXVzZTpiLG9uUmVzdW1lOngsb25Td2lwZVN0YXJ0Omcsb25Td2lwZU1vdmU6QyxvblN3aXBlQ2FuY2VsOncsb25Td2lwZUVuZDpSLC4uLkV9PW8sVD1XaSh0YyxpKSxPPUV5KGkpLFtBLE5dPXYudXNlU3RhdGUobnVsbCksTT1FZSh1LE4pLFk9di51c2VSZWYobnVsbCksSD12LnVzZVJlZihudWxsKSxVPWZ8fFQuZHVyYXRpb24sQj12LnVzZVJlZigwKSxKPXYudXNlUmVmKFUpLFc9di51c2VSZWYoMCkse29uVG9hc3RBZGQ6bmUsb25Ub2FzdFJlbW92ZTplZX09VCxjZT16dCgoKT0+e0E/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZULnZpZXdwb3J0Py5mb2N1cygpLHAoKX0pLG1lPXYudXNlQ2FsbGJhY2soUD0+eyFQfHxQPT09MS8wfHwod2luZG93LmNsZWFyVGltZW91dChXLmN1cnJlbnQpLEIuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSxXLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoY2UsUCkpfSxbY2VdKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IFA9VC52aWV3cG9ydDtpZihQKXtjb25zdCAkPUZlKCgpPT57bWUoSi5jdXJyZW50KSx4Py4oKX0sImhhbmRsZVJlc3VtZSIpLEY9RmUoKCk9Pntjb25zdCByZT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1CLmN1cnJlbnQ7Si5jdXJyZW50PUouY3VycmVudC1yZSx3aW5kb3cuY2xlYXJUaW1lb3V0KFcuY3VycmVudCksYj8uKCl9LCJoYW5kbGVQYXVzZSIpO3JldHVybiBQLmFkZEV2ZW50TGlzdGVuZXIod2YsRiksUC5hZGRFdmVudExpc3RlbmVyKEVmLCQpLCgpPT57UC5yZW1vdmVFdmVudExpc3RlbmVyKHdmLEYpLFAucmVtb3ZlRXZlbnRMaXN0ZW5lcihFZiwkKX19fSxbVC52aWV3cG9ydCxVLGIseCxtZV0pLHYudXNlRWZmZWN0KCgpPT57Si5jdXJyZW50PVUsZCYmIVQuaXNDbG9zZVBhdXNlZFJlZi5jdXJyZW50JiZtZShVKX0sW2QsVSxULmlzQ2xvc2VQYXVzZWRSZWYsbWVdKSx2LnVzZUVmZmVjdCgoKT0+KCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KFcuY3VycmVudCl9LFtdKSx2LnVzZUVmZmVjdCgoKT0+KG5lKCksKCk9PmVlKCkpLFtuZSxlZV0pO2NvbnN0IGhlPXYudXNlTWVtbygoKT0+QT9SZihBKTpudWxsLFtBXSk7cmV0dXJuIFQudmlld3BvcnQ/bS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOltoZSYmbS5qc3gobU8se19fc2NvcGVUb2FzdDppLHJvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6cz09PVJ5LkZvcmVncm91bmQ/ImFzc2VydGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46aGV9KSxtLmpzeChzTyx7c2NvcGU6aSxvbkNsb3NlOmNlLGNoaWxkcmVuOlphLmNyZWF0ZVBvcnRhbChtLmpzeChDZi5JdGVtU2xvdCx7c2NvcGU6aSxjaGlsZHJlbjptLmpzeChvcix7YXNDaGlsZDohMCxvbkVzY2FwZUtleURvd246dWUoeSxQPT57TygpLnNvbWUoRj0+Ri5yZWYuY3VycmVudD8uY29udGFpbnMoUC50YXJnZXQpKXx8Y2UoKX0pLGNoaWxkcmVuOm0uanN4KENlLmxpLHt0YWJJbmRleDowLCJkYXRhLXN0YXRlIjpkPyJvcGVuIjoiY2xvc2VkIiwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOlQuc3dpcGVEaXJlY3Rpb24sLi4uRSxyZWY6TSxzdHlsZTp7dXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLm8uc3R5bGV9LG9uS2V5RG93bjp1ZShvLm9uS2V5RG93bixQPT57UC5rZXk9PT0iRXNjYXBlIiYmKHk/LihQLm5hdGl2ZUV2ZW50KSxQLm5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fGNlKCkpfSksb25Qb2ludGVyRG93bjp1ZShvLm9uUG9pbnRlckRvd24sUD0+e1AuYnV0dG9uPT09MCYmKFkuY3VycmVudD17eDpQLmNsaWVudFgseTpQLmNsaWVudFl9KX0pLG9uUG9pbnRlck1vdmU6dWUoby5vblBvaW50ZXJNb3ZlLFA9PntpZighWS5jdXJyZW50KXJldHVybjtjb25zdCAkPVAuY2xpZW50WC1ZLmN1cnJlbnQueCxGPVAuY2xpZW50WS1ZLmN1cnJlbnQueSxyZT0hIUguY3VycmVudCxxPVsibGVmdCIsInJpZ2h0Il0uaW5jbHVkZXMoVC5zd2lwZURpcmVjdGlvbikseGU9WyJsZWZ0IiwidXAiXS5pbmNsdWRlcyhULnN3aXBlRGlyZWN0aW9uKT9NYXRoLm1pbjpNYXRoLm1heCxqZT1xP3hlKDAsJCk6MCxZZT1xPzA6eGUoMCxGKSxEPVAucG9pbnRlclR5cGU9PT0idG91Y2giPzEwOjIsWD17eDpqZSx5OlllfSxLPXtvcmlnaW5hbEV2ZW50OlAsZGVsdGE6WH07cmU/KEguY3VycmVudD1YLGdyKHJPLEMsSyx7ZGlzY3JldGU6ITF9KSk6QXkoWCxULnN3aXBlRGlyZWN0aW9uLEQpPyhILmN1cnJlbnQ9WCxncihvTyxnLEsse2Rpc2NyZXRlOiExfSksUC50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpKTooTWF0aC5hYnMoJCk+RHx8TWF0aC5hYnMoRik+RCkmJihZLmN1cnJlbnQ9bnVsbCl9KSxvblBvaW50ZXJVcDp1ZShvLm9uUG9pbnRlclVwLFA9Pntjb25zdCAkPUguY3VycmVudCxGPVAudGFyZ2V0O2lmKEYuaGFzUG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpJiZGLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShQLnBvaW50ZXJJZCksSC5jdXJyZW50PW51bGwsWS5jdXJyZW50PW51bGwsJCl7Y29uc3QgcmU9UC5jdXJyZW50VGFyZ2V0LHE9e29yaWdpbmFsRXZlbnQ6UCxkZWx0YTokfTtBeSgkLFQuc3dpcGVEaXJlY3Rpb24sVC5zd2lwZVRocmVzaG9sZCk/Z3IoY08sUixxLHtkaXNjcmV0ZTohMH0pOmdyKGlPLHcscSx7ZGlzY3JldGU6ITB9KSxyZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseGU9PnhlLnByZXZlbnREZWZhdWx0KCkse29uY2U6ITB9KX19KX0pfSl9KSxULnZpZXdwb3J0KX0pXX0pOm51bGx9LCJUb2FzdEltcGwiKSksbU89RmUoYT0+e2NvbnN0e19fc2NvcGVUb2FzdDpvLGNoaWxkcmVuOnUsLi4uaX09YSxzPVdpKHRjLG8pLFtmLGRdPXYudXNlU3RhdGUoITEpLFtwLHldPXYudXNlU3RhdGUoITEpO3JldHVybiBOeSgoKT0+ZCghMCkpLHYudXNlRWZmZWN0KCgpPT57Y29uc3QgYj13aW5kb3cuc2V0VGltZW91dCgoKT0+eSghMCksMWUzKTtyZXR1cm4oKT0+d2luZG93LmNsZWFyVGltZW91dChiKX0sW10pLHA/bnVsbDptLmpzeChzcix7YXNDaGlsZDohMCxjb250YWluZXI6cy5hbm5vdW5jZXJDb250YWluZXJ8fHZvaWQgMCxjaGlsZHJlbjptLmpzeChGcyx7Li4uaSxjaGlsZHJlbjpmJiZtLmpzeHMobS5GcmFnbWVudCx7Y2hpbGRyZW46W3MubGFiZWwsIiAiLHVdfSl9KX0pfSwiVG9hc3RBbm5vdW5jZSIpLGhPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLC4uLnN9PW87cmV0dXJuIG0uanN4KENlLmRpdix7Li4ucyxyZWY6dX0pfSwiVG9hc3RUaXRsZSIpKSxwTz12LmZvcndhcmRSZWYoRmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9hc3Q6aSwuLi5zfT1vO3JldHVybiBtLmpzeChDZS5kaXYsey4uLnMscmVmOnV9KX0sIlRvYXN0RGVzY3JpcHRpb24iKSksdk89IlRvYXN0Q2xvc2UiLGdPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLC4uLnN9PW8sZj1mTyh2TyxpKTtyZXR1cm4gbS5qc3goeU8se2FzQ2hpbGQ6ITAsY2hpbGRyZW46bS5qc3goQ2UuYnV0dG9uLHt0eXBlOiJidXR0b24iLC4uLnMscmVmOnUsb25DbGljazp1ZShvLm9uQ2xpY2ssZi5vbkNsb3NlKX0pfSl9LCJUb2FzdENsb3NlIikpLHlPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLGFsdFRleHQ6cywuLi5mfT1vO3JldHVybiBtLmpzeChDZS5kaXYseyJkYXRhLXJhZGl4LXRvYXN0LWFubm91bmNlLWV4Y2x1ZGUiOiIiLCJkYXRhLXJhZGl4LXRvYXN0LWFubm91bmNlLWFsdCI6c3x8dm9pZCAwLC4uLmYscmVmOnV9KX0sIlRvYXN0QW5ub3VuY2VFeGNsdWRlIikpO2Z1bmN0aW9uIFJmKGEpe2NvbnN0IG89W107cmV0dXJuIEFycmF5LmZyb20oYS5jaGlsZE5vZGVzKS5mb3JFYWNoKGk9PntpZihpLm5vZGVUeXBlPT09aS5URVhUX05PREUmJmkudGV4dENvbnRlbnQmJm8ucHVzaChpLnRleHRDb250ZW50KSxEeShpKSl7Y29uc3Qgcz1pLmFyaWFIaWRkZW58fGkuaGlkZGVufHxpLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSIsZj1pLmRhdGFzZXQucmFkaXhUb2FzdEFubm91bmNlRXhjbHVkZT09PSIiO2lmKCFzKWlmKGYpe2NvbnN0IGQ9aS5kYXRhc2V0LnJhZGl4VG9hc3RBbm5vdW5jZUFsdDtkJiZvLnB1c2goZCl9ZWxzZSBvLnB1c2goLi4uUmYoaSkpfX0pLG99RmUoUmYsImdldEFubm91bmNlVGV4dENvbnRlbnQiKTtmdW5jdGlvbiBncihhLG8sdSx7ZGlzY3JldGU6aX0pe2NvbnN0IHM9dS5vcmlnaW5hbEV2ZW50LmN1cnJlbnRUYXJnZXQsZj1uZXcgQ3VzdG9tRXZlbnQoYSx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGRldGFpbDp1fSk7byYmcy5hZGRFdmVudExpc3RlbmVyKGEsbyx7b25jZTohMH0pLGk/eGkocyxmKTpzLmRpc3BhdGNoRXZlbnQoZil9RmUoZ3IsImhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQiKTt2YXIgQXk9RmUoKGEsbyx1PTApPT57Y29uc3QgaT1NYXRoLmFicyhhLngpLHM9TWF0aC5hYnMoYS55KSxmPWk+cztyZXR1cm4gbz09PVRmLkxlZnR8fG89PT1UZi5SaWdodD9mJiZpPnU6IWYmJnM+dX0sImlzRGVsdGFJbkRpcmVjdGlvbiIpO2Z1bmN0aW9uIE55KGE9KCk9Pnt9KXtjb25zdCBvPXp0KGEpO250KCgpPT57bGV0IHU9MCxpPTA7cmV0dXJuIHU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+aT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pKSwoKT0+e3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh1KSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaSl9fSxbb10pfUZlKE55LCJ1c2VOZXh0RnJhbWUiKTtmdW5jdGlvbiBEeShhKXtyZXR1cm4gYS5ub2RlVHlwZT09PWEuRUxFTUVOVF9OT0RFfUZlKER5LCJpc0hUTUxFbGVtZW50Iik7ZnVuY3Rpb24gankoYSl7Y29uc3Qgbz1bXSx1PWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoYSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTpGZShpPT57Y29uc3Qgcz1pLnRhZ05hbWU9PT0iSU5QVVQiJiZpLnR5cGU9PT0iaGlkZGVuIjtyZXR1cm4gaS5kaXNhYmxlZHx8aS5oaWRkZW58fHM/Tm9kZUZpbHRlci5GSUxURVJfU0tJUDppLnRhYkluZGV4Pj0wP05vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDpOb2RlRmlsdGVyLkZJTFRFUl9TS0lQfSwiYWNjZXB0Tm9kZSIpfSk7Zm9yKDt1Lm5leHROb2RlKCk7KW8ucHVzaCh1LmN1cnJlbnROb2RlKTtyZXR1cm4gb31GZShqeSwiZ2V0VGFiYmFibGVDYW5kaWRhdGVzIik7ZnVuY3Rpb24gbmMoYSl7Y29uc3Qgbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiBhLnNvbWUodT0+dT09PW8/ITA6KHUuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bykpfUZlKG5jLCJmb2N1c0ZpcnN0Iik7Y29uc3QgTXk9di5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIGJPKCl7Y29uc3QgYT12LnVzZUNvbnRleHQoTXkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigidXNlTGFya1RvYXN0IHBoYWkgZHVuZyB0cm9uZyBMYXJrVG9hc3RQcm92aWRlciIpO3JldHVybiBhfWZ1bmN0aW9uIHhPKHtjbGFzc05hbWU6YSwuLi5vfSx1KXtyZXR1cm4gbS5qc3gobE8se3JlZjp1LGNsYXNzTmFtZTprZSgiZml4ZWQgYm90dG9tLTQgZW5kLTQgei01MCBmbGV4IHctYXV0byBmbGV4LWNvbCBnYXAtMiBtYXgtc206Ym90dG9tLTQgbWF4LXNtOmxlZnQtNCBtYXgtc206cmlnaHQtNCIsYSksLi4ub30pfWNvbnN0IHp5PXYuZm9yd2FyZFJlZih4Tyk7enkuZGlzcGxheU5hbWU9IkxhcmtUb2FzdFZpZXdwb3J0Ijtjb25zdCBreT0oe2NoaWxkcmVuOmF9KT0+e2NvbnN0W28sdV09di51c2VTdGF0ZShbXSksaT12LnVzZVJlZigwKSxzPXYudXNlQ2FsbGJhY2socD0+e2kuY3VycmVudCs9MTtjb25zdCB5PXtpZDppLmN1cnJlbnQsdGl0bGU6cC50aXRsZSxkZXNjcmlwdGlvbjpwLmRlc2NyaXB0aW9uLHZhcmlhbnQ6cC52YXJpYW50Pz8iZGVmYXVsdCJ9O3UoYj0+Wy4uLmIseV0pfSxbXSksZj12LnVzZUNhbGxiYWNrKHA9Pnt1KHk9PnkuZmlsdGVyKGI9PmIuaWQhPT1wKSl9LFtdKSxkPXYudXNlTWVtbygoKT0+KHt0b2FzdDpzfSksW3NdKTtyZXR1cm4gbS5qc3goTXkuUHJvdmlkZXIse3ZhbHVlOmQsY2hpbGRyZW46bS5qc3hzKGVPLHtkdXJhdGlvbjo0ZTMsc3dpcGVEaXJlY3Rpb246InJpZ2h0IixjaGlsZHJlbjpbYSxvLm1hcChwPT5tLmpzeHModU8se29uT3BlbkNoYW5nZTp5PT57eXx8ZihwLmlkKX0sY2xhc3NOYW1lOmtlKCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLWxhcmstbjkwMCBweC00IHB5LTIuNSB0ZXh0LXNtIHRleHQtd2hpdGUgc2hhZG93LVt2YXIoLS1zaGFkb3ctb3ZlcmxheSldIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW0tc2xpZGUtdXAgbWF4LXNtOnJvdW5kZWQtZnVsbCIpLGNoaWxkcmVuOltwLnZhcmlhbnQ9PT0ic3VjY2VzcyImJm0uanN4KHoxLHtjbGFzc05hbWU6InNpemUtNCBzaHJpbmstMCB0ZXh0LWxhcmstc3VjY2VzcyIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxwLnZhcmlhbnQ9PT0iZGFuZ2VyIiYmbS5qc3goTDEse2NsYXNzTmFtZToic2l6ZS00IHNocmluay0wIHRleHQtbGFyay1kYW5nZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W20uanN4KGhPLHtjbGFzc05hbWU6InRydW5jYXRlIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpwLnRpdGxlfSkscC5kZXNjcmlwdGlvbiYmbS5qc3gocE8se2NsYXNzTmFtZToidGV4dC13aGl0ZS84MCIsY2hpbGRyZW46cC5kZXNjcmlwdGlvbn0pXX0pLG0uanN4KGdPLHsiYXJpYS1sYWJlbCI6IkRvbmcgdGhvbmcgYmFvIixjbGFzc05hbWU6Im1zLWF1dG8gc2hyaW5rLTAgcm91bmRlZCB0ZXh0LXdoaXRlLzcwIGhvdmVyOnRleHQtd2hpdGUiLGNoaWxkcmVuOm0uanN4KFYxLHtjbGFzc05hbWU6InNpemUtNCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX0pXX0scC5pZCkpLG0uanN4KHp5LHt9KV19KX0pfTtreS5kaXNwbGF5TmFtZT0iTGFya1RvYXN0UHJvdmlkZXIiO2NvbnN0IFNPPXtzbToic2l6ZS00IixtZDoic2l6ZS02In07ZnVuY3Rpb24gX2Yoe3NpemU6YT0ibWQiLGxhYmVsOm8sY2xhc3NOYW1lOnV9KXtyZXR1cm4gbS5qc3goSGgse3JvbGU6InN0YXR1cyIsImFyaWEtbGFiZWwiOm8sY2xhc3NOYW1lOmtlKCJhbmltYXRlLXNwaW4gdGV4dC1sYXJrLW41MDAiLFNPW2FdLHUpfSl9ZnVuY3Rpb24gTHkoe2ljb246YSx0aXRsZTpvLGRlc2NyaXB0aW9uOnUsYWN0aW9uOmksY2xhc3NOYW1lOnN9KXtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6a2UoImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0yIHB5LTEwIHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLHMpLGNoaWxkcmVuOlthJiZtLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1sYXJrLW40MDAgWyZfc3ZnXTpzaXplLTYiLGNoaWxkcmVuOmF9KSxtLmpzeCgicCIse2NsYXNzTmFtZToiZm9udC1tZWRpdW0gdGV4dC1sYXJrLW43MDAiLGNoaWxkcmVuOm99KSx1JiZtLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOnV9KSxpJiZtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0yIixjaGlsZHJlbjppfSldfSl9ZnVuY3Rpb24gQ08oe2NoaWxkcmVuOmEsY2xhc3NOYW1lOm99KXtyZXR1cm4gbS5qc3goImRpdiIse2NsYXNzTmFtZTprZSgibWluLWgtMCBmbGV4LTEgb3ZlcmZsb3cteC1hdXRvIixvKSxjaGlsZHJlbjphfSl9ZnVuY3Rpb24gVE8oe2NoaWxkcmVuOmEsY2xhc3NOYW1lOm99KXtyZXR1cm4gbS5qc3goImRpdiIse2NsYXNzTmFtZTprZSgiZmxleCB3LWZ1bGwgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWxhcmstbjIwMCBiZy1icmFuZC1wcmltYXJ5IHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtbGFyay1uNjAwIHNtOmp1c3RpZnktZW5kIixvKSxjaGlsZHJlbjphfSl9Y29uc3QgT2Y9e2xlZnQ6InRleHQtbGVmdCIsY2VudGVyOiJ0ZXh0LWNlbnRlciIscmlnaHQ6InRleHQtcmlnaHQifTtmdW5jdGlvbiB3TyhhLG8pe2NvbnN0IHU9YVtvXTtyZXR1cm4gdT09bnVsbHx8dHlwZW9mIHU9PSJib29sZWFuIj9udWxsOnV9ZnVuY3Rpb24gRU8oe2NvbHVtbnM6YSxyb3dzOm8scm93S2V5OnUsaXNMb2FkaW5nOmksZW1wdHlTdGF0ZTpzLGNsYXNzTmFtZTpmfSl7Y29uc3QgZD0haSYmby5sZW5ndGg9PT0wO3JldHVybiBtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4taC0wIGZsZXgtMSBvdmVyZmxvdy14LWF1dG8iLGNoaWxkcmVuOm0uanN4cygidGFibGUiLHtjbGFzc05hbWU6a2UoInctZnVsbCBtaW4tdy1tYXggYm9yZGVyLWNvbGxhcHNlIixmKSwiYXJpYS1idXN5IjppPyJ0cnVlIjp2b2lkIDAsY2hpbGRyZW46W2kmJm0uanN4KCJjYXB0aW9uIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjoixJBhbmcgdOG6o2kifSksbS5qc3goInRoZWFkIix7Y2hpbGRyZW46bS5qc3goInRyIix7Y2xhc3NOYW1lOiJib3JkZXItYiBib3JkZXItbGFyay1uMzAwIixjaGlsZHJlbjphLm1hcChwPT5tLmpzeCgidGgiLHtzY29wZToiY29sIixzdHlsZTpwLndpZHRoP3t3aWR0aDpwLndpZHRofTp2b2lkIDAsY2xhc3NOYW1lOmtlKCJzdGlja3kgdG9wLTAgei0xMCBoLTEyIGJnLWJyYW5kLXByaW1hcnkgcHgtMyBhbGlnbi1taWRkbGUgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjYwMCIsT2ZbcC5hbGlnbj8/ImxlZnQiXSxwLnBpbj09PSJyaWdodCImJiJzdGlja3kgcmlnaHQtMCB6LTIwIG1pbi13LXB4IHdoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1zIGJvcmRlci1sYXJrLW4yMDAiKSxjaGlsZHJlbjpwLmhlYWRlcn0scC5rZXkpKX0pfSksbS5qc3hzKCJ0Ym9keSIse2NoaWxkcmVuOltpJiZbMCwxLDJdLm1hcChwPT5tLmpzeCgidHIiLHtjbGFzc05hbWU6ImFuaW1hdGUtcHVsc2UgYm9yZGVyLWIgYm9yZGVyLWxhcmstbjIwMCBiZy1sYXJrLW41MCIsY2hpbGRyZW46YS5tYXAoeT0+bS5qc3goInRkIix7Y2xhc3NOYW1lOmtlKCJoLVs0N3B4XSBweC0zIGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixPZlt5LmFsaWduPz8ibGVmdCJdLHkucGluPT09InJpZ2h0IiYmInN0aWNreSByaWdodC0wIHotMTAgbWluLXctcHggYmctYnJhbmQtcHJpbWFyeSB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItcyBib3JkZXItbGFyay1uMjAwIiksY2hpbGRyZW46bS5qc3goImRpdiIse2NsYXNzTmFtZToiaC0zIHctMi8zIHJvdW5kZWQgYmctbGFyay1uMjAwIn0pfSx5LmtleSkpfSxgc2tlbGV0b24tJHtwfWApKSxkJiZtLmpzeCgidHIiLHtjbGFzc05hbWU6ImJvcmRlci1iIGJvcmRlci1sYXJrLW4yMDAiLGNoaWxkcmVuOm0uanN4KCJ0ZCIse2NvbFNwYW46YS5sZW5ndGgsY2xhc3NOYW1lOiJweC0zIHB5LTggdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46cz8/Iktow7RuZyBjw7MgZOG7ryBsaeG7h3UifSl9KSwhaSYmIWQmJm8ubWFwKHA9Pm0uanN4KCJ0ciIse2NsYXNzTmFtZToiYm9yZGVyLWIgYm9yZGVyLWxhcmstbjIwMCIsY2hpbGRyZW46YS5tYXAoeT0+bS5qc3goInRkIix7Y2xhc3NOYW1lOmtlKCJoLVs0N3B4XSBweC0zIGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixPZlt5LmFsaWduPz8ibGVmdCJdLHkucGluPT09InJpZ2h0IiYmInN0aWNreSByaWdodC0wIHotMTAgbWluLXctcHggYmctYnJhbmQtcHJpbWFyeSB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItcyBib3JkZXItbGFyay1uMjAwIiksY2hpbGRyZW46eS5jZWxsP3kuY2VsbChwKTp3TyhwLHkua2V5KX0seS5rZXkpKX0sdShwKSkpXX0pXX0pfSl9ZnVuY3Rpb24gUk8oe2NoaWxkcmVuOmEsY2xhc3NOYW1lOm8sdGl0bGU6dX0pe3JldHVybiBtLmpzeCgiZGl2Iix7dGl0bGU6dSxjbGFzc05hbWU6a2UoImxpbmUtY2xhbXAtMiBtYXgtdy02NCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vcm1hbCB0ZXh0LXN0YXJ0IixvKSxjaGlsZHJlbjphfSl9Y29uc3QgbGM9T2JqZWN0LmFzc2lnbihFTyx7V3JhcHBlcjpDTyxGb290ZXI6VE99KSxfTz1bNTAsMTAwLDIwMF07ZnVuY3Rpb24gT08oYSxvKXtyZXR1cm4gbzw9Nz9BcnJheS5mcm9tKHtsZW5ndGg6b30sKHUsaSk9PmkrMSk6YTw9ND9bMSwyLDMsNCw1LCJlbGxpcHNpcyIsb106YT49by0zP1sxLCJlbGxpcHNpcyIsby00LG8tMyxvLTIsby0xLG9dOlsxLCJlbGxpcHNpcyIsYS0xLGEsYSsxLCJlbGxpcHNpcyIsb119Y29uc3QgQU89ImlubGluZS1mbGV4IHNpemUtNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtYnJhbmQtbGluayBob3ZlcjpiZy1sYXJrLW41MCI7ZnVuY3Rpb24gTk8oe3BhZ2U6YSx0b3RhbDpvLHBhZ2VTaXplOnUsb25QYWdlQ2hhbmdlOmkscGFnZVNpemVzOnM9X08sb25QYWdlU2l6ZUNoYW5nZTpmLGlzTG9hZGluZzpkLGNsYXNzTmFtZTpwfSx5KXtjb25zdCBiPU1hdGgubWF4KDEsTWF0aC5jZWlsKG8vdSkpLHg9T08oYSxiKTtyZXR1cm4gbS5qc3hzKCJkaXYiLHtyZWY6eSxjbGFzc05hbWU6a2UoImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtNCIscCksY2hpbGRyZW46W2Q/bS5qc3goX2Yse3NpemU6InNtIixsYWJlbDoixJBhbmcgdOG6o2kgZOG7ryBsaeG7h3UifSk6bnVsbCxtLmpzeHMoIm5hdiIseyJhcmlhLWxhYmVsIjoiUGjDom4gdHJhbmciLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEiLGNoaWxkcmVuOlttLmpzeChEZSx7aXNJY29uT25seTohMCx2YXJpYW50OiJnaG9zdCIsc2l6ZToic20iLCJhcmlhLWxhYmVsIjoiVHJhbmcgdHLGsOG7m2MiLGRpc2FibGVkOmE8PTEsb25DbGljazooKT0+aShhLTEpLGNoaWxkcmVuOm0uanN4KGoxLHtjbGFzc05hbWU6InNpemUtNCIsc3Ryb2tlV2lkdGg6Mi40fSl9KSx4Lm1hcCgoZyxDKT0+Zz09PSJlbGxpcHNpcyI/bS5qc3goInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InB4LTEgdGV4dC1sYXJrLW40MDAiLGNoaWxkcmVuOiLigKYifSxgZ2FwLSR7Q31gKTptLmpzeCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6YFRyYW5nICR7Z31gLCJhcmlhLWN1cnJlbnQiOmc9PT1hPyJwYWdlIjp2b2lkIDAsb25DbGljazooKT0+aShnKSxjbGFzc05hbWU6a2UoQU8sZz09PWEmJiJiZy1icmFuZC1zZWNvbmRhcnkgZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIiksY2hpbGRyZW46Z30sZykpLG0uanN4KERlLHtpc0ljb25Pbmx5OiEwLHZhcmlhbnQ6Imdob3N0IixzaXplOiJzbSIsImFyaWEtbGFiZWwiOiJUcmFuZyBzYXUiLGRpc2FibGVkOmE+PWIsb25DbGljazooKT0+aShhKzEpLGNoaWxkcmVuOm0uanN4KE0xLHtjbGFzc05hbWU6InNpemUtNCIsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KSxtLmpzeCh1byx7YXJpYUxhYmVsOiJT4buRIGTDsm5nIG3hu5dpIHRyYW5nIixvcHRpb25zOnMubWFwKGc9Pih7dmFsdWU6U3RyaW5nKGcpLGxhYmVsOlN0cmluZyhnKX0pKSx2YWx1ZTpTdHJpbmcodSksb25WYWx1ZUNoYW5nZTpnPT5mPy4oTnVtYmVyKGcpKSxjbGFzc05hbWU6InctMjAifSldfSl9Y29uc3QgVXk9di5mb3J3YXJkUmVmKE5PKTtVeS5kaXNwbGF5TmFtZT0iTGFya1BhZ2luYXRpb24iO2NvbnN0IERPPXtibHVlOiJiZy1sYXJrLWFjY2VudC1zb2Z0IHRleHQtYnJhbmQtbGluayIsZ3JheToiYmctbGFyay1uOTAwLzEwIHRleHQtbGFyay1uNjAwIixzdWNjZXNzOiJiZy1sYXJrLXN1Y2Nlc3MvMTUgdGV4dC1sYXJrLXN1Y2Nlc3MiLGRhbmdlcjoiYmctbGFyay1kYW5nZXIvMTUgdGV4dC1sYXJrLWRhbmdlciIsd2FybmluZzoiYmctYnJhbmQtc3VwcG9ydC8xNSB0ZXh0LWJyYW5kLXN1cHBvcnQifSxqTz17c206ImgtNCBweC0xIHRleHQtWzEwcHhdIixtZDoiaC02IHB4LTIgdGV4dC14cyJ9O2Z1bmN0aW9uIE1PKHtjb2xvcjphPSJibHVlIixzaXplOm89Im1kIixjbGFzc05hbWU6dSxjaGlsZHJlbjppLC4uLnN9LGYpe3JldHVybiBtLmpzeCgic3BhbiIse3JlZjpmLGNsYXNzTmFtZTprZSgiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtc20gZm9udC1tZWRpdW0gd2hpdGVzcGFjZS1ub3dyYXAiLERPW2FdLGpPW29dLHUpLC4uLnMsY2hpbGRyZW46aX0pfWNvbnN0IE9uPXYuZm9yd2FyZFJlZihNTyk7T24uZGlzcGxheU5hbWU9IkxhcmtUYWciO2Z1bmN0aW9uIHpPKHtjb3VudDphLG1heDpvPTk5LGRvdDp1LGNsYXNzTmFtZTppLC4uLnN9LGYpe2lmKHUpcmV0dXJuIG0uanN4KCJzcGFuIix7cmVmOmYsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOmtlKCJpbmxpbmUtYmxvY2sgc2l6ZS0yIHJvdW5kZWQtZnVsbCBiZy1sYXJrLWRhbmdlciIsaSksLi4uc30pO2lmKGE9PT12b2lkIDApcmV0dXJuIG51bGw7Y29uc3QgZD1hPm8/YCR7b30rYDpgJHthfWA7cmV0dXJuIG0uanN4KCJzcGFuIix7cmVmOmYsY2xhc3NOYW1lOmtlKCJpbmxpbmUtZmxleCBoLVsxNHB4XSBtaW4tdy1bMTRweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1sYXJrLWRhbmdlciBweC0xIHRleHQtWzEwcHhdIGxlYWRpbmctWzEzcHhdIGZvbnQtbWVkaXVtIHRleHQtW3ZhcigtLWRhbmdlci1mb3JlZ3JvdW5kKV0iLGkpLC4uLnMsY2hpbGRyZW46ZH0pfWNvbnN0IHlyPXYuZm9yd2FyZFJlZih6Tyk7eXIuZGlzcGxheU5hbWU9IkxhcmtCYWRnZSI7Y29uc3QgSHk9e3NtOiJzaXplLTUgdGV4dC1bMTBweF0iLG1kOiJzaXplLTggdGV4dC14cyIsbGc6InNpemUtOSB0ZXh0LXhzIn07ZnVuY3Rpb24ga08oYSl7aWYoIWEpcmV0dXJuIlUiO2NvbnN0IG89YS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gby5sZW5ndGg9PT0wPyJVIjpvLmxlbmd0aD09PTE/KG9bMF1bMF0/PyJVIikudG9VcHBlckNhc2UoKTpgJHtvWzBdWzBdPz8iIn0ke29bby5sZW5ndGgtMV1bMF0/PyIifWAudG9VcHBlckNhc2UoKXx8IlUifWZ1bmN0aW9uIExPKHtuYW1lOmEsc3JjOm8sdGVhbTp1LHNpemU6aSxjbGFzc05hbWU6cyxjaGlsZHJlbjpmLC4uLmR9LHApe2NvbnN0IHk9aT8/KHU/ImxnIjoibWQiKSxiPSJyb3VuZGVkLWZ1bGwiO3JldHVybiBvP20uanN4KCJzcGFuIix7cmVmOnAsY2xhc3NOYW1lOmtlKCJncmlkIHNocmluay0wIHBsYWNlLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gYmctYnJhbmQtc2Vjb25kYXJ5IGZvbnQtYm9sZCB0ZXh0LXdoaXRlIixiLEh5W3ldLHMpLC4uLmQsY2hpbGRyZW46Zj8/bS5qc3goImltZyIse3NyYzpvLGFsdDphPz8iIixjbGFzc05hbWU6InNpemUtZnVsbCByb3VuZGVkLVtpbmhlcml0XSBvYmplY3QtY292ZXIifSl9KTptLmpzeCgic3BhbiIse3JlZjpwLHJvbGU6ImltZyIsImFyaWEtbGFiZWwiOmE/PyJOZ8aw4budaSBkw7luZyIsY2xhc3NOYW1lOmtlKCJncmlkIHNocmluay0wIHBsYWNlLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gYmctYnJhbmQtc2Vjb25kYXJ5IGZvbnQtYm9sZCB0ZXh0LXdoaXRlIixiLEh5W3ldLHMpLC4uLmQsY2hpbGRyZW46Zj8/a08oYSl9KX1jb25zdCBmbD12LmZvcndhcmRSZWYoTE8pO2ZsLmRpc3BsYXlOYW1lPSJMYXJrQXZhdGFyIjtjb25zdCBVTz1be2lkOiJQRC0xMDQyIixraGFjaDoiTmd1eeG7hW4gxJDhu6ljIFRy4buNbmcgQW5oIixjdWFIYW5nOiJMaWx5IFF14bqtbiAxIixuZ2F5OiIwNC8xMS8yMDI2Iixkb2FuaFRodToiMTIuNDUwLjAwMCIsdHJhbmdUaGFpOiJob2FuIixnaGlDaHU6IsSQxqFuIGvDrW5oIGPhuq1uLCBj4bqvdCB0csOybmcgxJHhu5VpIG3DoHUsIGdpYW8gdHJvbmcgbmfDoHkuIEtow6FjaCBo4bq5biBs4bqleSBsw7pjIDE3aC4ifSx7aWQ6IlBELTEwNDEiLGtoYWNoOiJUcuG6p24gTWluaCBUw7luZyIsY3VhSGFuZzoiTGlseSBUaOG7pyDEkOG7qWMiLG5nYXk6IjA0LzExLzIwMjYiLGRvYW5oVGh1OiI4LjkwMC4wMDAiLHRyYW5nVGhhaToiY2hvIixnaGlDaHU6IkNo4budIGtow6FjaCB4w6FjIG5o4bqtbiBn4buNbmcgdGl0YW4sIMSRw6MgYsOhbyBnacOhIDIgbOG7sWEgY2jhu41uLiJ9LHtpZDoiUEQtMTA0MCIsa2hhY2g6IkzDqiBUaHUgSMOgIixjdWFIYW5nOiJMaWx5IFF14bqtbiA3IixuZ2F5OiIwMy8xMS8yMDI2Iixkb2FuaFRodToiNS4yMDAuMDAwIix0cmFuZ1RoYWk6ImhvYW4iLGdoaUNodToixJDGoW4ga8OtbmggcsOibSwga2jDtG5nIGPhuq90IHRyw7JuZy4ifSx7aWQ6IlBELTEwMzkiLGtoYWNoOiJQaOG6oW0gUXXhu5FjIELhuqNvIixjdWFIYW5nOiJMaWx5IFF14bqtbiAxIixuZ2F5OiIwMy8xMS8yMDI2Iixkb2FuaFRodToiMCIsdHJhbmdUaGFpOiJodXkiLGdoaUNodToiS2jDoWNoIGh14bu3IGRvIGtow7RuZyDEkcO6bmcgxJHhu5ksIMSRw6MgaG/DoG4gY+G7jWMuIn1dLEhPPXtob2FuOntjb2xvcjoic3VjY2VzcyIsdGV4dDoiSG/DoG4gdOG6pXQifSxjaG86e2NvbG9yOiJ3YXJuaW5nIix0ZXh0OiJDaOG7nSB4w6FjIG5o4bqtbiJ9LGh1eTp7Y29sb3I6ImRhbmdlciIsdGV4dDoixJDDoyBodeG7tyJ9fTtmdW5jdGlvbiBkbCh7dGl0bGU6YSxoaW50Om8sY2hpbGRyZW46dSxjbGFzc05hbWU6aT0iIn0pe3JldHVybiBtLmpzeHMoInNlY3Rpb24iLHtjbGFzc05hbWU6YG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1sYXJrLW4yMDAgYmctYnJhbmQtcHJpbWFyeSBwLTQgJHtpfWAsY2hpbGRyZW46W20uanN4cygiaGVhZGVyIix7Y2xhc3NOYW1lOiJtYi0zIGZsZXggZmxleC13cmFwIGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiBnYXAtMSIsY2hpbGRyZW46W20uanN4KCJoMyIse2NsYXNzTmFtZToidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphfSksbyYmbS5qc3goInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOm99KV19KSx1XX0pfWZ1bmN0aW9uIHBuKHtjaGlsZHJlbjphLGNsYXNzTmFtZTpvPSIifSl7cmV0dXJuIG0uanN4KCJkaXYiLHtjbGFzc05hbWU6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMiAke299YCxjaGlsZHJlbjphfSl9ZnVuY3Rpb24gQk8oKXtyZXR1cm4gbS5qc3hzKGRsLHt0aXRsZToiQnV0dG9uIixoaW50OiI3IHZhcmlhbnQgw5cgNCBzaXplLCAzMiBt4bq3YyDEkeG7i25oLCA0MCBmb3JtIixjaGlsZHJlbjpbbS5qc3hzKHBuLHtjaGlsZHJlbjpbbS5qc3goRGUse3ZhcmlhbnQ6InByaW1hcnkiLGNoaWxkcmVuOiJMxrB1IHBoaeG6v3UifSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsY2hpbGRyZW46Ikh14bu3In0pLG0uanN4KERlLHt2YXJpYW50OiJzZWNvbmRhcnlCbHVlIixjaGlsZHJlbjoiWGVtIGNoaSB0aeG6v3QifSksbS5qc3goRGUse3ZhcmlhbnQ6Imdob3N0IixjaGlsZHJlbjoiQuG7jyBs4buNYyJ9KSxtLmpzeChEZSx7dmFyaWFudDoidGV4dCIsY2hpbGRyZW46IlhlbSB04bqldCBj4bqjIn0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0yIixjaGlsZHJlbjpbbS5qc3goRGUse3ZhcmlhbnQ6InByaW1hcnlFcnJvciIsY2hpbGRyZW46Ilhvw6EifSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeUVycm9yIixjaGlsZHJlbjoiWG/DoSBwaGnhur91In0pLG0uanN4KERlLHt2YXJpYW50OiJwcmltYXJ5Iixpc1BlbmRpbmc6ITAsY2hpbGRyZW46IsSQYW5nIGzGsHUifSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsZGlzYWJsZWQ6ITAsY2hpbGRyZW46Iktow7RuZyBkw7luZyDEkcaw4bujYyJ9KV19KSxtLmpzeHMocG4se2NsYXNzTmFtZToibXQtMiIsY2hpbGRyZW46W20uanN4KERlLHtzaXplOiJ4cyIsY2hpbGRyZW46InhzIDI0In0pLG0uanN4KERlLHtzaXplOiJzbSIsY2hpbGRyZW46InNtIDI4In0pLG0uanN4KERlLHtzaXplOiJtZCIsdmFyaWFudDoicHJpbWFyeSIsY2hpbGRyZW46Im1kIDMyIn0pLG0uanN4KERlLHtzaXplOiJsZyIsdmFyaWFudDoicHJpbWFyeSIsY2hpbGRyZW46ImxnIDQwIn0pLG0uanN4KFhpLHtjb250ZW50OiJUaMOqbSBwaGnhur91IG3hu5tpIixjaGlsZHJlbjptLmpzeChEZSx7c2l6ZToibWQiLGlzSWNvbk9ubHk6ITAsImFyaWEtbGFiZWwiOiJUaMOqbSBwaGnhur91IixjaGlsZHJlbjptLmpzeChZaCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KX0pLG0uanN4KFhpLHtjb250ZW50OiJDaOG7iW5oIHPhu61hIixjaGlsZHJlbjptLmpzeChEZSx7c2l6ZToic20iLGlzSWNvbk9ubHk6ITAsImFyaWEtbGFiZWwiOiJDaOG7iW5oIHPhu61hIixjaGlsZHJlbjptLmpzeChHaCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KX0pXX0pXX0pfWZ1bmN0aW9uIElPKCl7cmV0dXJuIG0uanN4cyhkbCx7dGl0bGU6IsOUIG5o4bqtcCIsaGludDoiSW5wdXQgNDIgbW9iaWxlIC8gMzYgZGVza3RvcCDCtyBUZXh0YXJlYSA3MiIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdhcC0zIHNtOmdyaWQtY29scy0yIixjaGlsZHJlbjpbbS5qc3gobHIse2xhYmVsOiJUw6puIGtow6FjaCBow6BuZyIscGxhY2Vob2xkZXI6Ik5o4bqtcCB0w6puIixpc1JlcXVpcmVkOiEwfSksbS5qc3gobHIse2xhYmVsOiJT4buRIMSRaeG7h24gdGhv4bqhaSIscGxhY2Vob2xkZXI6IjA5MDkgMDAwIDAwMCIsZGVzY3JpcHRpb246IkTDuW5nIMSR4buDIGxpw6puIGjhu4cga2hpIHBoaeG6v3UgeG9uZyJ9KSxtLmpzeChscix7bGFiZWw6Ik3DoyBwaGnhur91IixkZWZhdWx0VmFsdWU6IlBELTEwNDIiLGRpc2FibGVkOiEwfSksbS5qc3gobHIse2xhYmVsOiJFbWFpbCIsZGVmYXVsdFZhbHVlOiJzYWktZW1haWwiLGVycm9yOiJFbWFpbCBraMO0bmcgaOG7o3AgbOG7hyJ9KSxtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJzbTpjb2wtc3Bhbi0yIixjaGlsZHJlbjptLmpzeChxQyx7bGFiZWw6IkdoaSBjaMO6IGNobyBr4bu5IHRodeG6rXQiLHBsYWNlaG9sZGVyOiJWw60gZOG7pTogxJFvIGzhuqFpIGtob+G6o25nIGPDoWNoIMSR4buTbmcgdOG7rSBt4bqvdCBwaOG6o2kiLGlzUmVxdWlyZWQ6ITB9KX0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0zIixjaGlsZHJlbjpbbS5qc3godW8se2xhYmVsOiJD4butYSBow6BuZyIsYXJpYUxhYmVsOiJDaOG7jW4gY+G7rWEgaMOgbmciLG9wdGlvbnM6W3t2YWx1ZToicTEiLGxhYmVsOiJMaWx5IFF14bqtbiAxIn0se3ZhbHVlOiJxNyIsbGFiZWw6IkxpbHkgUXXhuq1uIDcifSx7dmFsdWU6InRkIixsYWJlbDoiTGlseSBUaOG7pyDEkOG7qWMifSx7dmFsdWU6Im9mZiIsbGFiZWw6IkPhu61hIGjDoG5nIMSRw6MgxJHDs25nIixkaXNhYmxlZDohMH1dLHBsYWNlaG9sZGVyOiJDaOG7jW4gY+G7rWEgaMOgbmciLGNsYXNzTmFtZToidy1mdWxsIHNtOnctNTYifSksbS5qc3godW8se2xhYmVsOiJUcuG6oW5nIHRow6FpIixhcmlhTGFiZWw6IkNo4buNbiB0cuG6oW5nIHRow6FpIixvcHRpb25zOlt7dmFsdWU6ImhvYW4iLGxhYmVsOiJIb8OgbiB04bqldCJ9LHt2YWx1ZToiY2hvIixsYWJlbDoiQ2jhu50geMOhYyBuaOG6rW4ifV0sdmFsdWU6ImhvYW4iLGNsYXNzTmFtZToidy1mdWxsIHNtOnctNTYifSksbS5qc3godW8se2xhYmVsOiJC4buLIGtob8OhIixhcmlhTGFiZWw6IkNo4buNbiBi4buLIGtob8OhIixvcHRpb25zOlt7dmFsdWU6ImEiLGxhYmVsOiJLaMO0bmcgY2jhu41uIMSRxrDhu6NjIn1dLGRpc2FibGVkOiEwLGNsYXNzTmFtZToidy1mdWxsIHNtOnctNTYifSldfSldfSl9ZnVuY3Rpb24gUE8oKXtjb25zdFthLG9dPXYudXNlU3RhdGUoITApLFt1LGldPXYudXNlU3RhdGUoInRyb24iKSxbcyxmXT12LnVzZVN0YXRlKCEwKTtyZXR1cm4gbS5qc3goZGwse3RpdGxlOiJDaOG7jW4gZ2nDoSB0cuG7iyIsaGludDoiQ2hlY2tib3ggMTYgwrcgUmFkaW8gMTYgwrcgU3dpdGNoIDM2w5cyMCIsY2hpbGRyZW46bS5qc3hzKHBuLHtjbGFzc05hbWU6Iml0ZW1zLXN0YXJ0IGdhcC02IixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOlttLmpzeChGaSx7bGFiZWw6IsSQw6MgZ+G7jWkgeMOhYyBuaOG6rW4iLGNoZWNrZWQ6YSxvbkNoZWNrZWRDaGFuZ2U6b30pLG0uanN4KEZpLHtsYWJlbDoiS2jDtG5nIHjDoWMgxJHhu4tuaCIsY2hlY2tlZDoiaW5kZXRlcm1pbmF0ZSJ9KSxtLmpzeChGaSx7bGFiZWw6IsSQYW5nIGtob8OhIixjaGVja2VkOiEwLGRpc2FibGVkOiEwfSldfSksbS5qc3goc18se2xhYmVsOiJLaeG7g3UgdHLDsm5nIix2YWx1ZTp1LG9uVmFsdWVDaGFuZ2U6aSxvcHRpb25zOlt7dmFsdWU6InRyb24iLGxhYmVsOiJUcsOybmcgdHLDsm4ifSx7dmFsdWU6ImRhIixsYWJlbDoiVHLDsm5nIMSRYSB0csOybmcifSx7dmFsdWU6Im1hdSIsbGFiZWw6IlRyw7JuZyDEkeG7lWkgbcOgdSIsZGlzYWJsZWQ6ITB9XX0pLG0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbbS5qc3goJGkse2xhYmVsOiJC4bqtdCB0aMO0bmcgYsOhbyBaYWxvIixjaGVja2VkOnMsb25DaGVja2VkQ2hhbmdlOmZ9KSxtLmpzeCgkaSx7bGFiZWw6IsSQw6MgdOG6r3QiLGNoZWNrZWQ6ITF9KSxtLmpzeCgkaSx7bGFiZWw6IsSQYW5nIGtob8OhIixjaGVja2VkOiEwLGRpc2FibGVkOiEwfSldfSldfSl9KX1mdW5jdGlvbiBHTygpe3JldHVybiBtLmpzeHMoZGwse3RpdGxlOiJUYWcgwrcgQmFkZ2UgwrcgQXZhdGFyIixoaW50OiJUYWcgMjQvMTYgwrcgQmFkZ2UgMTQgwrcgQXZhdGFyIDIwLzMyLzM2IixjaGlsZHJlbjpbbS5qc3hzKHBuLHtjaGlsZHJlbjpbbS5qc3goT24se2NvbG9yOiJibHVlIixjaGlsZHJlbjoiQuG6o28gaMOgbmgifSksbS5qc3goT24se2NvbG9yOiJncmF5IixjaGlsZHJlbjoiTMawdSBuaMOhcCJ9KSxtLmpzeChPbix7Y29sb3I6InN1Y2Nlc3MiLGNoaWxkcmVuOiJIb8OgbiB04bqldCJ9KSxtLmpzeChPbix7Y29sb3I6Indhcm5pbmciLGNoaWxkcmVuOiJDaOG7nSB4w6FjIG5o4bqtbiJ9KSxtLmpzeChPbix7Y29sb3I6ImRhbmdlciIsY2hpbGRyZW46IsSQw6MgaHXhu7cifSksbS5qc3goT24se2NvbG9yOiJibHVlIixzaXplOiJzbSIsY2hpbGRyZW46InNtIn0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0zIGdhcC00IixjaGlsZHJlbjpbbS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46W20uanN4KENoLHtjbGFzc05hbWU6InNpemUtNCJ9KSwiIFRow7RuZyBiw6FvICIsbS5qc3goeXIse2NvdW50OjN9KV19KSxtLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIHRleHQtbGFyay1uNzAwIixjaGlsZHJlbjpbIlBoaeG6v3UgY2jhu50gIixtLmpzeCh5cix7Y291bnQ6MTI4fSldfSksbS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46WyJDw7MgY+G6rXAgbmjhuq10ICIsbS5qc3goeXIse2RvdDohMH0pXX0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0zIGdhcC0zIixjaGlsZHJlbjpbbS5qc3goZmwse25hbWU6Ik5ndXnhu4VuIMSQ4bupYyBUcuG7jW5nIEFuaCJ9KSxtLmpzeChmbCx7bmFtZToiVHLhuqduIE1pbmggVMO5bmcifSksbS5qc3goZmwse25hbWU6IkzDqiBUaHUgSMOgIixzaXplOiJzbSJ9KSxtLmpzeChmbCx7bmFtZToiTGlseSBRdeG6rW4gMSIsdGVhbTohMH0pLG0uanN4KGZsLHtzcmM6Imh0dHBzOi8vaS5wcmF2YXRhci5jYy82ND9pbWc9MTIiLG5hbWU6IuG6om5oIHRo4bqtdCJ9KV19KV19KX1mdW5jdGlvbiBWTygpe3JldHVybiBtLmpzeChkbCx7dGl0bGU6IlRhYnMiLGhpbnQ6IkNhbyAzNCwgaW5kaWNhdG9yIDNweCwgYWN0aXZlICMxNDU2RjAiLGNoaWxkcmVuOm0uanN4cyhFdCx7ZGVmYXVsdFZhbHVlOiJhbGwiLGNoaWxkcmVuOlttLmpzeHMoRXQuTGlzdCx7ImFyaWEtbGFiZWwiOiJM4buNYyBwaGnhur91IixjaGlsZHJlbjpbbS5qc3goRXQuVGFiLHt2YWx1ZToiYWxsIixjaGlsZHJlbjoiVOG6pXQgY+G6oyJ9KSxtLmpzeChFdC5UYWIse3ZhbHVlOiJ3YWl0IixjaGlsZHJlbjoiQ2jhu50geMOhYyBuaOG6rW4ifSksbS5qc3goRXQuVGFiLHt2YWx1ZToiZG9uZSIsY2hpbGRyZW46Ikhvw6BuIHThuqV0In0pLG0uanN4KEV0LlRhYix7dmFsdWU6ImNhbmNlbCIsZGlzYWJsZWQ6ITAsY2hpbGRyZW46IsSQw6MgaHXhu7cifSldfSksbS5qc3goRXQuUGFuZWwse3ZhbHVlOiJhbGwiLGNoaWxkcmVuOm0uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiNCBwaGnhur91IHRyb25nIDIgbmfDoHkgZ+G6p24gbmjhuqV0LiJ9KX0pLG0uanN4KEV0LlBhbmVsLHt2YWx1ZToid2FpdCIsY2hpbGRyZW46bS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiIxIHBoaeG6v3UgxJFhbmcgY2jhu50ga2jDoWNoIHjDoWMgbmjhuq1uIGfhu41uZy4ifSl9KSxtLmpzeChFdC5QYW5lbCx7dmFsdWU6ImRvbmUiLGNoaWxkcmVuOm0uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiMiBwaGnhur91IMSRw6MgaG/DoG4gdOG6pXQgdsOgIGdpYW8ga2jDoWNoLiJ9KX0pXX0pfSl9ZnVuY3Rpb24gWU8oKXtyZXR1cm4gbS5qc3goZGwse3RpdGxlOiJEcm9wZG93biBtZW51IixoaW50OiJJdGVtIDMyLCBt4bulYyDEkWFuZyBjaOG7jW4gbuG7gW4gdHLhuq9uZyArIGljb24iLGNoaWxkcmVuOm0uanN4cyhwbix7Y2hpbGRyZW46W20uanN4cyhTYSx7dHJpZ2dlcjptLmpzeHMoRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsY2hpbGRyZW46WyJUaGFvIHTDoWMgIixtLmpzeChfaCx7Y2xhc3NOYW1lOiJzaXplLTQifSldfSksY2hpbGRyZW46W20uanN4KFNhLkl0ZW0se3ZhbHVlOiJ2aWV3IixjaGVja2VkOiEwLGNoaWxkcmVuOiJYZW0gY2hpIHRp4bq/dCJ9KSxtLmpzeChTYS5JdGVtLHt2YWx1ZToiZWRpdCIsY2hpbGRyZW46IkNo4buJbmggc+G7rWEifSksbS5qc3goU2EuSXRlbSx7dmFsdWU6ImNvcHkiLGNoaWxkcmVuOiJOaMOibiBi4bqjbiJ9KSxtLmpzeChTYS5TZXBhcmF0b3Ise2NsYXNzTmFtZToibXktMSBib3JkZXItMCBoLXB4IGJnLWxhcmstbjIwMCJ9KSxtLmpzeChTYS5JdGVtLHt2YWx1ZToiZGVsZXRlIixkYW5nZXI6ITAsY2hpbGRyZW46Ilhvw6EgcGhp4bq/dSJ9KSxtLmpzeChTYS5JdGVtLHt2YWx1ZToibG9ja2VkIixkaXNhYmxlZDohMCxjaGlsZHJlbjoiQ2jhu4kgYWRtaW4ifSldfSksbS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiJDbGljayDEkeG7gyBt4bufLCBFc2NhcGUgxJHhu4MgxJHDs25nIChmb2N1cyB24buBIG7DunQpIn0pXX0pfSl9ZnVuY3Rpb24gcU8oKXtjb25zdFthLG9dPXYudXNlU3RhdGUoITEpLFt1LGldPXYudXNlU3RhdGUoITEpLHt0b2FzdDpzfT1iTygpO3JldHVybiBtLmpzeChkbCx7dGl0bGU6IkRpYWxvZyDCtyBBbGVydERpYWxvZyDCtyBUb2FzdCIsaGludDoiTuG7gW4gbeG7nSA0MCUsIG1vdGlvbiAzMDBtcyB2w6BvIC8gMjAwbXMgcmEiLGNoaWxkcmVuOm0uanN4cyhwbix7Y2hpbGRyZW46W20uanN4cyhTZix7b3BlbjphLG9uT3BlbkNoYW5nZTpvLGNoaWxkcmVuOlttLmpzeChEZSx7dmFyaWFudDoic2Vjb25kYXJ5IixvbkNsaWNrOigpPT5vKCEwKSxjaGlsZHJlbjoiTeG7nyBkaWFsb2cifSksbS5qc3hzKFNmLkNvbnRlbnQse3RpdGxlOiJU4bqhbyBwaGnhur91IG3hu5tpIixkZXNjcmlwdGlvbjoiUGhp4bq/dSBz4bq9IMSRxrDhu6NjIGfhuq9uIHbhu5tpIGPhu61hIGjDoG5nIMSRYW5nIGNo4buNbiB2w6AgZ+G7rWkgY2hvIGvhu7kgdGh14bqtdCB2acOqbi4iLGNoaWxkcmVuOlttLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtMyBmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbbS5qc3gobHIse2xhYmVsOiJUw6puIGtow6FjaCIscGxhY2Vob2xkZXI6Ik5o4bqtcCB0w6puIn0pLG0uanN4KHVvLHtsYWJlbDoiQ+G7rWEgaMOgbmciLGFyaWFMYWJlbDoiQ2jhu41uIGPhu61hIGjDoG5nIixvcHRpb25zOlt7dmFsdWU6InExIixsYWJlbDoiTGlseSBRdeG6rW4gMSJ9LHt2YWx1ZToicTciLGxhYmVsOiJMaWx5IFF14bqtbiA3In1dLHBsYWNlaG9sZGVyOiJDaOG7jW4gY+G7rWEgaMOgbmcifSldfSksbS5qc3hzKFNmLkZvb3Rlcix7Y2hpbGRyZW46W20uanN4KERlLHt2YXJpYW50OiJzZWNvbmRhcnkiLG9uQ2xpY2s6KCk9Pm8oITEpLGNoaWxkcmVuOiJIdeG7tyJ9KSxtLmpzeChEZSx7dmFyaWFudDoicHJpbWFyeSIsb25DbGljazooKT0+byghMSksY2hpbGRyZW46IlThuqFvIHBoaeG6v3UifSldfSldfSldfSksbS5qc3goRGUse3ZhcmlhbnQ6InByaW1hcnlFcnJvciIsb25DbGljazooKT0+aSghMCksY2hpbGRyZW46Ilhvw6EgcGhp4bq/dSJ9KSxtLmpzeChDeSx7b3Blbjp1LG9uT3BlbkNoYW5nZTppLHRpdGxlOiJYb8OhIHBoaeG6v3UgbsOgeT8iLGRlc2NyaXB0aW9uOiJQaGnhur91IFBELTEwNDEgc+G6vSBi4buLIHhvw6Ega2jhu49pIGRhbmggc8OhY2guIFRoYW8gdMOhYyBraMO0bmcgaG/DoG4gdMOhYyDEkcaw4bujYy4iLGNvbmZpcm1MYWJlbDoiWG/DoSIsY2FuY2VsTGFiZWw6Ikh14bu3IixvbkNvbmZpcm06KCk9PmkoITEpfSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsb25DbGljazooKT0+cyh7dGl0bGU6IsSQw6MgbMawdSBwaGnhur91IixkZXNjcmlwdGlvbjoiUEQtMTA0MiBj4bqtcCBuaOG6rXQgbMO6YyAwOTo0MSIsdmFyaWFudDoic3VjY2VzcyJ9KSxjaGlsZHJlbjoiVG9hc3QgdGjDoG5oIGPDtG5nIn0pLG0uanN4KERlLHt2YXJpYW50OiJzZWNvbmRhcnkiLG9uQ2xpY2s6KCk9PnMoe3RpdGxlOiJLaMO0bmcgZ+G7rWkgxJHGsOG7o2MiLGRlc2NyaXB0aW9uOiJLaeG7g20gdHJhIGvhur90IG7hu5FpIHLhu5NpIHRo4butIGzhuqFpIix2YXJpYW50OiJkYW5nZXIifSksY2hpbGRyZW46IlRvYXN0IGzhu5dpIn0pLG0uanN4KERlLHt2YXJpYW50OiJnaG9zdCIsb25DbGljazooKT0+cyh7dGl0bGU6IsSQYW5nIMSR4buTbmcgYuG7mSBk4buvIGxp4buHdSJ9KSxjaGlsZHJlbjoiVG9hc3QgbeG6t2MgxJHhu4tuaCJ9KV19KX0pfWZ1bmN0aW9uIEJ5KCl7Y29uc3RbYSxvXT12LnVzZVN0YXRlKDEpLFt1LGldPXYudXNlU3RhdGUoNTApLHM9W3trZXk6ImlkIixoZWFkZXI6Ik3DoyBwaGnhur91Iix3aWR0aDoiOTJweCJ9LHtrZXk6ImtoYWNoIixoZWFkZXI6Iktow6FjaCBow6BuZyIsY2VsbDpmPT5tLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOlttLmpzeChmbCx7bmFtZTpmLmtoYWNoLHNpemU6InNtIn0pLG0uanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSIsY2hpbGRyZW46Zi5raGFjaH0pXX0pfSx7a2V5OiJjdWFIYW5nIixoZWFkZXI6IkPhu61hIGjDoG5nIn0se2tleToibmdheSIsaGVhZGVyOiJOZ8OgeSIsd2lkdGg6IjEwOHB4In0se2tleToiZG9hbmhUaHUiLGhlYWRlcjoiRG9hbmggdGh1IixhbGlnbjoicmlnaHQiLGNlbGw6Zj0+bS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMiLGNoaWxkcmVuOltmLmRvYW5oVGh1LCIgxJEiXX0pfSx7a2V5OiJ0cmFuZ1RoYWkiLGhlYWRlcjoiVHLhuqFuZyB0aMOhaSIsY2VsbDpmPT57Y29uc3QgZD1IT1tmLnRyYW5nVGhhaV07cmV0dXJuIG0uanN4KE9uLHtjb2xvcjpkLmNvbG9yLGNoaWxkcmVuOmQudGV4dH0pfX0se2tleToiZ2hpQ2h1IixoZWFkZXI6IkdoaSBjaMO6IixjZWxsOmY9Pm0uanN4KFJPLHt0aXRsZTpmLmdoaUNodSxjaGlsZHJlbjpmLmdoaUNodX0pfSx7a2V5OiJhY3Rpb25zIixoZWFkZXI6IkjDoG5oIMSR4buZbmciLGFsaWduOiJyaWdodCIscGluOiJyaWdodCIsY2VsbDooKT0+bS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEiLGNoaWxkcmVuOlttLmpzeChEZSx7c2l6ZToic20iLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiWGVtIixjaGlsZHJlbjptLmpzeChYaCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KSxtLmpzeChEZSx7c2l6ZToic20iLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiU+G7rWEiLGNoaWxkcmVuOm0uanN4KEdoLHtjbGFzc05hbWU6InNpemUtNCJ9KX0pLG0uanN4KERlLHtzaXplOiJzbSIsaXNJY29uT25seTohMCx2YXJpYW50OiJnaG9zdCIsImFyaWEtbGFiZWwiOiJYb8OhIixjaGlsZHJlbjptLmpzeChHMSx7Y2xhc3NOYW1lOiJzaXplLTQgdGV4dC1sYXJrLWRhbmdlciJ9KX0pXX0pfV07cmV0dXJuIG0uanN4cyhkbCx7dGl0bGU6IlRhYmxlICsgUGFnaW5hdGlvbiIsaGludDoiSGVhZCA0OCDCtyBCb2R5IDQ3IMK3IGPhu5l0IEjDoG5oIMSR4buZbmcgZ2hpbSBwaOG6o2kiLGNoaWxkcmVuOlttLmpzeHMoImRpdiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4yMDAiLGNoaWxkcmVuOlttLmpzeChsYyx7Y29sdW1uczpzLHJvd3M6VU8scm93S2V5OmY9PmYuaWR9KSxtLmpzeChsYy5Gb290ZXIse2NoaWxkcmVuOm0uanN4KFV5LHtwYWdlOmEsdG90YWw6MTI4NCxwYWdlU2l6ZTp1LG9uUGFnZUNoYW5nZTpvLHBhZ2VTaXplczpbNTAsMTAwLDIwMF0sb25QYWdlU2l6ZUNoYW5nZTppfSl9KV19KSxtLmpzeCgicCIse2NsYXNzTmFtZToibXQtMiB0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiS8OpbyBuZ2FuZyB0csOqbiBraHVuZyBo4bq5cCDEkeG7gyB0aOG6pXkgY+G7mXQgSMOgbmggxJHhu5luZyBkw61uaCBiw6puIHBo4bqjaS4ifSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTQgZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCBtZDpncmlkLWNvbHMtMiIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4yMDAgcC0zIixjaGlsZHJlbjpbbS5qc3goInAiLHtjbGFzc05hbWU6Im1iLTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46IsSQYW5nIHThuqNpIChza2VsZXRvbikifSksbS5qc3gobGMse2NvbHVtbnM6W3trZXk6ImlkIixoZWFkZXI6Ik3DoyBwaGnhur91In0se2tleToia2hhY2giLGhlYWRlcjoiS2jDoWNoIGjDoG5nIn1dLHJvd3M6W10scm93S2V5OmY9PmYuaWQsaXNMb2FkaW5nOiEwfSldfSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWxhcmstbjIwMCBwLTMiLGNoaWxkcmVuOlttLmpzeCgicCIse2NsYXNzTmFtZToibWItMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiUuG7l25nIChFbXB0eVN0YXRlKSJ9KSxtLmpzeChsYyx7Y29sdW1uczpbe2tleToiaWQiLGhlYWRlcjoiTcOjIHBoaeG6v3UifSx7a2V5OiJraGFjaCIsaGVhZGVyOiJLaMOhY2ggaMOgbmcifV0scm93czpbXSxyb3dLZXk6Zj0+Zi5pZCxlbXB0eVN0YXRlOm0uanN4KEx5LHtpY29uOm0uanN4KEgxLHt9KSx0aXRsZToiQ2jGsGEgY8OzIHBoaeG6v3UgbsOgbyIsZGVzY3JpcHRpb246IlThuqFvIHBoaeG6v3UgxJHhuqd1IHRpw6puIMSR4buDIGLhuq90IMSR4bqndSB0aGVvIGTDtWkgZG9hbmggdGh1LiIsYWN0aW9uOm0uanN4KERlLHt2YXJpYW50OiJwcmltYXJ5IixjaGlsZHJlbjoiVOG6oW8gcGhp4bq/dSJ9KX0pfSldfSldfSldfSl9ZnVuY3Rpb24gWE8oKXtyZXR1cm4gbS5qc3hzKGRsLHt0aXRsZToiU3Bpbm5lciDCtyBFbXB0eVN0YXRlIixoaW50OiJTcGlubmVyIDE2LzI0IMK3IEVtcHR5U3RhdGUgaWNvbiAyNCIsY2hpbGRyZW46W20uanN4cyhwbix7Y2xhc3NOYW1lOiJnYXAtNiIsY2hpbGRyZW46W20uanN4cygic3BhbiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOlttLmpzeChfZix7c2l6ZToic20iLGxhYmVsOiLEkGFuZyB04bqjaSJ9KSwiIHNtIDE2Il19KSxtLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjpbbS5qc3goX2Yse3NpemU6Im1kIixsYWJlbDoixJBhbmcgdOG6o2kifSksIiBtZCAyNCJdfSldfSksbS5qc3goImRpdiIse2NsYXNzTmFtZToibXQtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci1sYXJrLW4zMDAiLGNoaWxkcmVuOm0uanN4KEx5LHtpY29uOm0uanN4KGtoLHt9KSx0aXRsZToiQ2jGsGEgY8OzIGThu68gbGnhu4d1IHRyb25nIGvhu7MgbsOgeSIsZGVzY3JpcHRpb246IlRo4butIMSR4buVaSBraG/huqNuZyB0aOG7nWkgZ2lhbiBob+G6t2MgY2jhu41uIGPhu61hIGjDoG5nIGtow6FjLiIsYWN0aW9uOm0uanN4KERlLHtzaXplOiJzbSIsdmFyaWFudDoic2Vjb25kYXJ5Qmx1ZSIsY2hpbGRyZW46IsSQ4buVaSBi4buZIGzhu41jIn0pfSl9KV19KX1mdW5jdGlvbiBLTygpe3JldHVybiBtLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBtaW4taC1bNTYwcHhdIG1pbi13LTAgZmxleC1jb2wgYmctbGFyay1uNTAiLGNoaWxkcmVuOlttLmpzeHMoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJvcmRlci1iIGJvcmRlci1sYXJrLW4yMDAgYmctYnJhbmQtcHJpbWFyeSBweC0zIHB5LTIuNSBzbTpweC00IixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOlttLmpzeCgic3BhbiIse2NsYXNzTmFtZToiZ3JpZCBzaXplLTcgc2hyaW5rLTAgcGxhY2UtaXRlbXMtY2VudGVyIHJvdW5kZWQtbGcgYmctYnJhbmQtc2Vjb25kYXJ5IHRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiJMIn0pLG0uanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1sYXJrLW45MDAiLGNoaWxkcmVuOiJQaGnhur91IMSRbyDCtyBMaWx5In0pXX0pLG0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMS41IHNtOmdhcC0yIixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImhpZGRlbiBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLWxnIGJnLWxhcmstbjUwIHB4LTIgcHktMS41IHRleHQteHMgdGV4dC1sYXJrLW42MDAgbGc6ZmxleCIsY2hpbGRyZW46W20uanN4KFhoLHtjbGFzc05hbWU6InNpemUtMy41In0pLCIgVMOsbSBwaGnhur914oCmIl19KSxtLmpzeChYaSx7Y29udGVudDoiTOG7i2NoIGjhurluIixjaGlsZHJlbjptLmpzeChEZSx7c2l6ZToibWQiLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiTOG7i2NoIGjhurluIixjaGlsZHJlbjptLmpzeCh3aCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KX0pLG0uanN4cygic3BhbiIse2NsYXNzTmFtZToicmVsYXRpdmUgaW5saW5lLWZsZXgiLGNoaWxkcmVuOlttLmpzeChEZSx7c2l6ZToibWQiLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiVGjDtG5nIGLDoW8iLGNoaWxkcmVuOm0uanN4KENoLHtjbGFzc05hbWU6InNpemUtNCJ9KX0pLG0uanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIC1lbmQtMSAtdG9wLTEiLGNoaWxkcmVuOm0uanN4KHlyLHtjb3VudDo1fSl9KV19KSxtLmpzeChmbCx7bmFtZToiTmd1eeG7hW4gxJDhu6ljIFRy4buNbmcgQW5oIixzaXplOiJtZCJ9KV19KV19KSxtLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGZsZXgtMSBmbGV4LWNvbCBnYXAtMyBwLTMgc206cC00IixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOlttLmpzeHMoImRpdiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46W20uanN4KCJoMiIse2NsYXNzTmFtZToidGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdGV4dC1sYXJrLW45MDAiLGNoaWxkcmVuOiJEYW5oIHPDoWNoIHBoaeG6v3UifSksbS5qc3goInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiIxLjI4NCBwaGnhur91IMK3IGPhuq1wIG5o4bqtdCAwOTo0MSJ9KV19KSxtLmpzeHMocG4se2NoaWxkcmVuOlttLmpzeHMoRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsY2hpbGRyZW46W20uanN4KFUxLHtjbGFzc05hbWU6InNpemUtNCJ9KSwiIFh14bqldCJdfSksbS5qc3hzKERlLHt2YXJpYW50OiJwcmltYXJ5IixzaXplOiJsZyIsY2hpbGRyZW46W20uanN4KFloLHtjbGFzc05hbWU6InNpemUtNCJ9KSwiIFThuqFvIHBoaeG6v3UiXX0pXX0pXX0pLG0uanN4KCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWxhcmstbjIwMCBiZy1icmFuZC1wcmltYXJ5IHAtMyIsY2hpbGRyZW46bS5qc3hzKEV0LHtkZWZhdWx0VmFsdWU6ImFsbCIsY2hpbGRyZW46W20uanN4cyhFdC5MaXN0LHsiYXJpYS1sYWJlbCI6Ikzhu41jIHBoaeG6v3UiLGNoaWxkcmVuOlttLmpzeChFdC5UYWIse3ZhbHVlOiJhbGwiLGNoaWxkcmVuOiJU4bqldCBj4bqjIn0pLG0uanN4KEV0LlRhYix7dmFsdWU6IndhaXQiLGNoaWxkcmVuOiJDaOG7nSJ9KSxtLmpzeChFdC5UYWIse3ZhbHVlOiJkb25lIixjaGlsZHJlbjoiSG/DoG4gdOG6pXQifSldfSksbS5qc3goRXQuUGFuZWwse3ZhbHVlOiJhbGwiLGNoaWxkcmVuOm0uanN4KCJkaXYiLHtjbGFzc05hbWU6Im10LTIgZ3JpZCBnYXAtMiBzbTpncmlkLWNvbHMtMyIsY2hpbGRyZW46W3trOiJEb2FuaCB0aHUgaMO0bSBuYXkiLHY6IjI2LjU1MC4wMDAiLGQ6IisxMiUifSx7azoiUGhp4bq/dSBjaOG7nSB4w6FjIG5o4bqtbiIsdjoiNyIsZDoiMiBxdcOhIGjhuqFuIn0se2s6IlThu4kgbOG7hyBj4bqvdCB0csOybmciLHY6IjY4JSIsZDoi4oiSMyUifV0ubWFwKGE9Pm0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLWxnIGJnLWxhcmstbjUwIHB4LTMgcHktMiIsY2hpbGRyZW46W20uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjphLmt9KSxtLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphLnZ9KSxtLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC14cyB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46YS5kfSldfSxhLmspKX0pfSksbS5qc3goRXQuUGFuZWwse3ZhbHVlOiJ3YWl0IixjaGlsZHJlbjptLmpzeCgicCIse2NsYXNzTmFtZToibXQtMiB0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiNyBwaGnhur91IMSRYW5nIGNo4budIGtow6FjaCB4w6FjIG5o4bqtbi4ifSl9KSxtLmpzeChFdC5QYW5lbCx7dmFsdWU6ImRvbmUiLGNoaWxkcmVuOm0uanN4KCJwIix7Y2xhc3NOYW1lOiJtdC0yIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiIyMSBwaGnhur91IGhvw6BuIHThuqV0IHRyb25nIGjDtG0gbmF5LiJ9KX0pXX0pfSksbS5qc3goQnkse30pXX0pLG0uanN4KCJuYXYiLHsiYXJpYS1sYWJlbCI6IsSQaeG7gXUgaMaw4bubbmcgY2jDrW5oIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYXJvdW5kIGJvcmRlci10IGJvcmRlci1sYXJrLW4yMDAgYmctYnJhbmQtcHJpbWFyeSBweC0yIHB5LTIgdGV4dC14cyB0ZXh0LWxhcmstbjYwMCBtZDpoaWRkZW4iLGNoaWxkcmVuOlt7aWNvbjptLmpzeChraCx7Y2xhc3NOYW1lOiJzaXplLTUifSksbGFiZWw6IlBoaeG6v3UifSx7aWNvbjptLmpzeCh3aCx7Y2xhc3NOYW1lOiJzaXplLTUifSksbGFiZWw6Ikzhu4tjaCJ9LHtpY29uOm0uanN4KGsxLHtjbGFzc05hbWU6InNpemUtNSJ9KSxsYWJlbDoiSOG7lyB0cuG7oyJ9LHtpY29uOm0uanN4KGZsLHtuYW1lOiJOZ3V54buFbiDEkOG7qWMgVHLhu41uZyBBbmgiLHNpemU6InNtIn0pLGxhYmVsOiJUw7RpIn1dLm1hcChhPT5tLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0wLjUiLGNoaWxkcmVuOlthLmljb24sYS5sYWJlbF19LGEubGFiZWwpKX0pLG0uanN4KCJmb290ZXIiLHtjbGFzc05hbWU6ImhpZGRlbiBib3JkZXItdCBib3JkZXItbGFyay1uMjAwIGJnLWJyYW5kLXByaW1hcnkgcHgtNCBweS0yIHRleHQteHMgdGV4dC1sYXJrLW42MDAgbWQ6YmxvY2siLGNoaWxkcmVuOiJMaWx5IFN0b3JlIERpdmlzaW9uIMK3IGThu68gbGnhu4d1IG1pbmggaG/huqEifSldfSl9ZnVuY3Rpb24gUU8oKXtyZXR1cm4gbS5qc3hzKCJtYWluIix7Y2xhc3NOYW1lOiJteC1hdXRvIGZsZXggdy1mdWxsIG1heC13LVsxNTYwcHhdIGZsZXgtY29sIGdhcC02IHAtNCBtZDpwLTYiLGNoaWxkcmVuOlttLmpzeHMoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBmbGV4LXdyYXAgaXRlbXMtZW5kIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2hpbGRyZW46W20uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtYnJhbmQtbGluayIsY2hpbGRyZW46ImxpbHktbGFyay11aSDCtyB2MC4yLjAifSksbS5qc3goImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjoiQuG7mSBjb21wb25lbnQgTGFyayJ9KSxtLmpzeHMoInAiLHtjbGFzc05hbWU6Im10LTEgbWF4LXctMnhsIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOlsiMjAgY29tcG9uZW50IHJlbmRlciB0aOG6rXQgduG7m2kgdG9rZW4gTGFyay4gU+G7kSDEkW8gbOG6pXkgdOG7qyIsIiAiLG0uanN4KCJjb2RlIix7Y2xhc3NOYW1lOiJyb3VuZGVkIGJnLWxhcmstbjEwMCBweC0xIHRleHQteHMiLGNoaWxkcmVuOiJsYXJrLWRlc2lnbi1ndWlkZS9maWdtYSJ9KSwiLiBUcmFuZyB04buxIGNvIGdpw6NuOiBrw6lvIGPhu61hIHPhu5UgduG7gSAzNzUsIDc2OCBoYXkgMTI4MCDEkeG7gXUgZMO5bmcgY8O5bmcgbeG7mXQgbGF5b3V0LiJdfSldfSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjpbbS5qc3goT24se2NvbG9yOiJibHVlIixjaGlsZHJlbjoiVGFpbHdpbmQgdjQifSksbS5qc3goT24se2NvbG9yOiJzdWNjZXNzIixjaGlsZHJlbjoiMjAgY29tcG9uZW50In0pLG0uanN4KE9uLHtjb2xvcjoiZ3JheSIsY2hpbGRyZW46IjE4NyB0ZXN0In0pLG0uanN4KHExLHt9KV19KV19KSxtLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtMiIsY2hpbGRyZW46W20uanN4KEJPLHt9KSxtLmpzeChJTyx7fSksbS5qc3goUE8se30pLG0uanN4KEdPLHt9KSxtLmpzeChWTyx7fSksbS5qc3goWU8se30pLG0uanN4KHFPLHt9KSxtLmpzeChYTyx7fSldfSksbS5qc3goQnkse30pLG0uanN4cygic2VjdGlvbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtd3JhcCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOlttLmpzeCgiaDIiLHtjbGFzc05hbWU6InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWxhcmstbjkwMCIsY2hpbGRyZW46Ik3DoG4gdsOtIGThu6UgKHJlc3BvbnNpdmUpIn0pLG0uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiQ8O5bmcgbeG7mXQgbcOgbiwga8OpbyBi4buBIHLhu5luZyBj4butYSBz4buVOiAzNzUgLyA3NjggLyAxMjgwIMSR4buBdSBkw7luZyBsYXlvdXQgbsOgeSJ9KV19KSxtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWxhcmstbjMwMCBzaGFkb3ctc20iLGNoaWxkcmVuOm0uanN4KEtPLHt9KX0pXX0pXX0pfVMxLmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKG0uanN4KHYuU3RyaWN0TW9kZSx7Y2hpbGRyZW46bS5qc3goUTIse2RlbGF5RHVyYXRpb246MzAwLGNoaWxkcmVuOm0uanN4KGt5LHtjaGlsZHJlbjptLmpzeChRTyx7fSl9KX0pfSkpfSkoKTsK"), c => c.charCodeAt(0))))</script>
|
|
15
|
+
<script>eval(new TextDecoder().decode(Uint8Array.from(atob("dmFyIHMxPVR0PT57dGhyb3cgVHlwZUVycm9yKFR0KX07dmFyIGYxPShUdCxJdCxQdCk9Pkl0LmhhcyhUdCl8fHMxKCJDYW5ub3QgIitQdCk7dmFyIGp0PShUdCxJdCxQdCk9PihmMShUdCxJdCwicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSxQdD9QdC5jYWxsKFR0KTpJdC5nZXQoVHQpKSxkMT0oVHQsSXQsUHQpPT5JdC5oYXMoVHQpP3MxKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik6SXQgaW5zdGFuY2VvZiBXZWFrU2V0P0l0LmFkZChUdCk6SXQuc2V0KFR0LFB0KSx1aD0oVHQsSXQsUHQsT2wpPT4oZjEoVHQsSXQsIndyaXRlIHRvIHByaXZhdGUgZmllbGQiKSxPbD9PbC5jYWxsKFR0LFB0KTpJdC5zZXQoVHQsUHQpLFB0KTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHJ0LFd0O2Z1bmN0aW9uIFR0KGEsbyl7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe2NvbnN0IGk9b1t1XTtpZih0eXBlb2YgaSE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KGkpKXtmb3IoY29uc3QgcyBpbiBpKWlmKHMhPT0iZGVmYXVsdCImJiEocyBpbiBhKSl7Y29uc3QgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGkscyk7ZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyxmLmdldD9mOntlbnVtZXJhYmxlOiEwLGdldDooKT0+aVtzXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX1mdW5jdGlvbiBJdChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiZGVmYXVsdCIpP2EuZGVmYXVsdDphfXZhciBQdD17ZXhwb3J0czp7fX0sT2w9e307dmFyIHNoO2Z1bmN0aW9uIG0xKCl7aWYoc2gpcmV0dXJuIE9sO3NoPTE7dmFyIGE9U3ltYm9sLmZvcigicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnQiKSxvPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik7ZnVuY3Rpb24gdShpLHMsZil7dmFyIGQ9bnVsbDtpZihmIT09dm9pZCAwJiYoZD0iIitmKSxzLmtleSE9PXZvaWQgMCYmKGQ9IiIrcy5rZXkpLCJrZXkiaW4gcyl7Zj17fTtmb3IodmFyIHAgaW4gcylwIT09ImtleSImJihmW3BdPXNbcF0pfWVsc2UgZj1zO3JldHVybiBzPWYucmVmLHskJHR5cGVvZjphLHR5cGU6aSxrZXk6ZCxyZWY6cyE9PXZvaWQgMD9zOm51bGwscHJvcHM6Zn19cmV0dXJuIE9sLkZyYWdtZW50PW8sT2wuanN4PXUsT2wuanN4cz11LE9sfXZhciBmaDtmdW5jdGlvbiBoMSgpe3JldHVybiBmaHx8KGZoPTEsUHQuZXhwb3J0cz1tMSgpKSxQdC5leHBvcnRzfXZhciBtPWgxKCksenU9e2V4cG9ydHM6e319LFRlPXt9O3ZhciBkaDtmdW5jdGlvbiBwMSgpe2lmKGRoKXJldHVybiBUZTtkaD0xO3ZhciBhPVN5bWJvbC5mb3IoInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50Iiksbz1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSx1PVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksaT1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLHM9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxmPVN5bWJvbC5mb3IoInJlYWN0LmNvbnN1bWVyIiksZD1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IikscD1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLHk9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxiPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSx4PVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKSxnPVN5bWJvbC5mb3IoInJlYWN0LmFjdGl2aXR5IiksQz1TeW1ib2wuZm9yKCJyZWFjdC52aWV3X3RyYW5zaXRpb24iKSx3PVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBSKEQpe3JldHVybiBEPT09bnVsbHx8dHlwZW9mIEQhPSJvYmplY3QiP251bGw6KEQ9dyYmRFt3XXx8RFsiQEBpdGVyYXRvciJdLHR5cGVvZiBEPT0iZnVuY3Rpb24iP0Q6bnVsbCl9dmFyIEU9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LFQ9T2JqZWN0LmFzc2lnbixPPXt9O2Z1bmN0aW9uIEEoRCxYLEspe3RoaXMucHJvcHM9RCx0aGlzLmNvbnRleHQ9WCx0aGlzLnJlZnM9Tyx0aGlzLnVwZGF0ZXI9S3x8RX1BLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LEEucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKEQsWCl7aWYodHlwZW9mIEQhPSJvYmplY3QiJiZ0eXBlb2YgRCE9ImZ1bmN0aW9uIiYmRCE9bnVsbCl0aHJvdyBFcnJvcigidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLEQsWCwic2V0U3RhdGUiKX0sQS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oRCl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLEQsImZvcmNlVXBkYXRlIil9O2Z1bmN0aW9uIE4oKXt9Ti5wcm90b3R5cGU9QS5wcm90b3R5cGU7ZnVuY3Rpb24gTShELFgsSyl7dGhpcy5wcm9wcz1ELHRoaXMuY29udGV4dD1YLHRoaXMucmVmcz1PLHRoaXMudXBkYXRlcj1LfHxFfXZhciBZPU0ucHJvdG90eXBlPW5ldyBOO1kuY29uc3RydWN0b3I9TSxUKFksQS5wcm90b3R5cGUpLFkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEg9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBVKCl7fXZhciBCPXtIOm51bGwsQTpudWxsLFQ6bnVsbCxTOm51bGx9LEo9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKEQsWCxLKXt2YXIgYWU9Sy5yZWY7cmV0dXJueyQkdHlwZW9mOmEsdHlwZTpELGtleTpYLHJlZjphZSE9PXZvaWQgMD9hZTpudWxsLHByb3BzOkt9fWZ1bmN0aW9uIG5lKEQsWCl7cmV0dXJuIFcoRC50eXBlLFgsRC5wcm9wcyl9ZnVuY3Rpb24gZWUoRCl7cmV0dXJuIHR5cGVvZiBEPT0ib2JqZWN0IiYmRCE9PW51bGwmJkQuJCR0eXBlb2Y9PT1hfWZ1bmN0aW9uIGNlKEQpe3ZhciBYPXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK0QucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKEspe3JldHVybiBYW0tdfSl9dmFyIG1lPS9cLysvZztmdW5jdGlvbiBoZShELFgpe3JldHVybiB0eXBlb2YgRD09Im9iamVjdCImJkQhPT1udWxsJiZELmtleSE9bnVsbD9jZSgiIitELmtleSk6WC50b1N0cmluZygzNil9ZnVuY3Rpb24gUChEKXtzd2l0Y2goRC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gRC52YWx1ZTtjYXNlInJlamVjdGVkIjp0aHJvdyBELnJlYXNvbjtkZWZhdWx0OnN3aXRjaCh0eXBlb2YgRC5zdGF0dXM9PSJzdHJpbmciP0QudGhlbihVLFUpOihELnN0YXR1cz0icGVuZGluZyIsRC50aGVuKGZ1bmN0aW9uKFgpe0Quc3RhdHVzPT09InBlbmRpbmciJiYoRC5zdGF0dXM9ImZ1bGZpbGxlZCIsRC52YWx1ZT1YKX0sZnVuY3Rpb24oWCl7RC5zdGF0dXM9PT0icGVuZGluZyImJihELnN0YXR1cz0icmVqZWN0ZWQiLEQucmVhc29uPVgpfSkpLEQuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIEQudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgRC5yZWFzb259fXRocm93IER9ZnVuY3Rpb24gJChELFgsSyxhZSx5ZSl7dmFyIHNlPXR5cGVvZiBEOyhzZT09PSJ1bmRlZmluZWQifHxzZT09PSJib29sZWFuIikmJihEPW51bGwpO3ZhciBsZT0hMTtpZihEPT09bnVsbClsZT0hMDtlbHNlIHN3aXRjaChzZSl7Y2FzZSJiaWdpbnQiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bGU9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChELiQkdHlwZW9mKXtjYXNlIGE6Y2FzZSBvOmxlPSEwO2JyZWFrO2Nhc2UgeDpyZXR1cm4gbGU9RC5faW5pdCwkKGxlKEQuX3BheWxvYWQpLFgsSyxhZSx5ZSl9fWlmKGxlKXJldHVybiB5ZT15ZShEKSxsZT1hZT09PSIiPyIuIitoZShELDApOmFlLEgoeWUpPyhLPSIiLGxlIT1udWxsJiYoSz1sZS5yZXBsYWNlKG1lLCIkJi8iKSsiLyIpLCQoeWUsWCxLLCIiLGZ1bmN0aW9uKGJlKXtyZXR1cm4gYmV9KSk6eWUhPW51bGwmJihlZSh5ZSkmJih5ZT1uZSh5ZSxLKyh5ZS5rZXk9PW51bGx8fEQmJkQua2V5PT09eWUua2V5PyIiOigiIit5ZS5rZXkpLnJlcGxhY2UobWUsIiQmLyIpKyIvIikrbGUpKSxYLnB1c2goeWUpKSwxO2xlPTA7dmFyIHRlPWFlPT09IiI/Ii4iOmFlKyI6IjtpZihIKEQpKWZvcih2YXIgaWU9MDtpZTxELmxlbmd0aDtpZSsrKWFlPURbaWVdLHNlPXRlK2hlKGFlLGllKSxsZSs9JChhZSxYLEssc2UseWUpO2Vsc2UgaWYoaWU9UihEKSx0eXBlb2YgaWU9PSJmdW5jdGlvbiIpZm9yKEQ9aWUuY2FsbChEKSxpZT0wOyEoYWU9RC5uZXh0KCkpLmRvbmU7KWFlPWFlLnZhbHVlLHNlPXRlK2hlKGFlLGllKyspLGxlKz0kKGFlLFgsSyxzZSx5ZSk7ZWxzZSBpZihzZT09PSJvYmplY3QiKXtpZih0eXBlb2YgRC50aGVuPT0iZnVuY3Rpb24iKXJldHVybiAkKFAoRCksWCxLLGFlLHllKTt0aHJvdyBYPVN0cmluZyhEKSxFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiKyhYPT09IltvYmplY3QgT2JqZWN0XSI/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoRCkuam9pbigiLCAiKSsifSI6WCkrIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC4iKX1yZXR1cm4gbGV9ZnVuY3Rpb24gRihELFgsSyl7aWYoRD09bnVsbClyZXR1cm4gRDt2YXIgYWU9W10seWU9MDtyZXR1cm4gJChELGFlLCIiLCIiLGZ1bmN0aW9uKHNlKXtyZXR1cm4gWC5jYWxsKEssc2UseWUrKyl9KSxhZX1mdW5jdGlvbiByZShEKXtpZihELl9zdGF0dXM9PT0tMSl7dmFyIFg9RC5fcmVzdWx0LEs9WCgpO0sudGhlbihmdW5jdGlvbihhZSl7KEQuX3N0YXR1cz09PTB8fEQuX3N0YXR1cz09PS0xKSYmKEQuX3N0YXR1cz0xLEQuX3Jlc3VsdD1hZSxLLnN0YXR1cz09PXZvaWQgMCYmKEsuc3RhdHVzPSJmdWxmaWxsZWQiLEsudmFsdWU9YWUpKX0sZnVuY3Rpb24oYWUpeyhELl9zdGF0dXM9PT0wfHxELl9zdGF0dXM9PT0tMSkmJihELl9zdGF0dXM9MixELl9yZXN1bHQ9YWUsSy5zdGF0dXM9PT12b2lkIDAmJihLLnN0YXR1cz0icmVqZWN0ZWQiLEsucmVhc29uPWFlKSl9KSxELl9zdGF0dXM9PT0tMSYmKEQuX3N0YXR1cz0wLEQuX3Jlc3VsdD1LKX1pZihELl9zdGF0dXM9PT0xKXJldHVybiBELl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBELl9yZXN1bHR9dmFyIHE9dHlwZW9mIHJlcG9ydEVycm9yPT0iZnVuY3Rpb24iP3JlcG9ydEVycm9yOmZ1bmN0aW9uKEQpe2lmKHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2Ygd2luZG93LkVycm9yRXZlbnQ9PSJmdW5jdGlvbiIpe3ZhciBYPW5ldyB3aW5kb3cuRXJyb3JFdmVudCgiZXJyb3IiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsbWVzc2FnZTp0eXBlb2YgRD09Im9iamVjdCImJkQhPT1udWxsJiZ0eXBlb2YgRC5tZXNzYWdlPT0ic3RyaW5nIj9TdHJpbmcoRC5tZXNzYWdlKTpTdHJpbmcoRCksZXJyb3I6RH0pO2lmKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChYKSlyZXR1cm59ZWxzZSBpZih0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLmVtaXQ9PSJmdW5jdGlvbiIpe3Byb2Nlc3MuZW1pdCgidW5jYXVnaHRFeGNlcHRpb24iLEQpO3JldHVybn1jb25zb2xlLmVycm9yKEQpfTtmdW5jdGlvbiB4ZShEKXt2YXIgWD1CLlQsSz17fTtLLnR5cGVzPVghPT1udWxsP1gudHlwZXM6bnVsbCxCLlQ9Szt0cnl7dmFyIGFlPUQoKSx5ZT1CLlM7eWUhPT1udWxsJiZ5ZShLLGFlKSx0eXBlb2YgYWU9PSJvYmplY3QiJiZhZSE9PW51bGwmJnR5cGVvZiBhZS50aGVuPT0iZnVuY3Rpb24iJiZhZS50aGVuKFUscSl9Y2F0Y2goc2Upe3Eoc2UpfWZpbmFsbHl7WCE9PW51bGwmJksudHlwZXMhPT1udWxsJiYoWC50eXBlcz1LLnR5cGVzKSxCLlQ9WH19ZnVuY3Rpb24gamUoRCl7dmFyIFg9Qi5UO2lmKFghPT1udWxsKXt2YXIgSz1YLnR5cGVzO0s9PT1udWxsP1gudHlwZXM9W0RdOksuaW5kZXhPZihEKT09PS0xJiZLLnB1c2goRCl9ZWxzZSB4ZShqZS5iaW5kKG51bGwsRCkpfXZhciBZZT17bWFwOkYsZm9yRWFjaDpmdW5jdGlvbihELFgsSyl7RihELGZ1bmN0aW9uKCl7WC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEspfSxjb3VudDpmdW5jdGlvbihEKXt2YXIgWD0wO3JldHVybiBGKEQsZnVuY3Rpb24oKXtYKyt9KSxYfSx0b0FycmF5OmZ1bmN0aW9uKEQpe3JldHVybiBGKEQsZnVuY3Rpb24oWCl7cmV0dXJuIFh9KXx8W119LG9ubHk6ZnVuY3Rpb24oRCl7aWYoIWVlKEQpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gRH19O3JldHVybiBUZS5BY3Rpdml0eT1nLFRlLkNoaWxkcmVuPVllLFRlLkNvbXBvbmVudD1BLFRlLkZyYWdtZW50PXUsVGUuUHJvZmlsZXI9cyxUZS5QdXJlQ29tcG9uZW50PU0sVGUuU3RyaWN0TW9kZT1pLFRlLlN1c3BlbnNlPXksVGUuVmlld1RyYW5zaXRpb249QyxUZS5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9QixUZS5fX0NPTVBJTEVSX1JVTlRJTUU9e19fcHJvdG9fXzpudWxsLGM6ZnVuY3Rpb24oRCl7cmV0dXJuIEIuSC51c2VNZW1vQ2FjaGUoRCl9fSxUZS5hZGRUcmFuc2l0aW9uVHlwZT1qZSxUZS5jYWNoZT1mdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRC5hcHBseShudWxsLGFyZ3VtZW50cyl9fSxUZS5jYWNoZVNpZ25hbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxUZS5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oRCxYLEspe2lmKEQ9PW51bGwpdGhyb3cgRXJyb3IoIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgIitEKyIuIik7dmFyIGFlPVQoe30sRC5wcm9wcykseWU9RC5rZXk7aWYoWCE9bnVsbClmb3Ioc2UgaW4gWC5rZXkhPT12b2lkIDAmJih5ZT0iIitYLmtleSksWCkhSi5jYWxsKFgsc2UpfHxzZT09PSJrZXkifHxzZT09PSJfX3NlbGYifHxzZT09PSJfX3NvdXJjZSJ8fHNlPT09InJlZiImJlgucmVmPT09dm9pZCAwfHwoYWVbc2VdPVhbc2VdKTt2YXIgc2U9YXJndW1lbnRzLmxlbmd0aC0yO2lmKHNlPT09MSlhZS5jaGlsZHJlbj1LO2Vsc2UgaWYoMTxzZSl7Zm9yKHZhciBsZT1BcnJheShzZSksdGU9MDt0ZTxzZTt0ZSsrKWxlW3RlXT1hcmd1bWVudHNbdGUrMl07YWUuY2hpbGRyZW49bGV9cmV0dXJuIFcoRC50eXBlLHllLGFlKX0sVGUuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihEKXtyZXR1cm4gRD17JCR0eXBlb2Y6ZCxfY3VycmVudFZhbHVlOkQsX2N1cnJlbnRWYWx1ZTI6RCxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9LEQuUHJvdmlkZXI9RCxELkNvbnN1bWVyPXskJHR5cGVvZjpmLF9jb250ZXh0OkR9LER9LFRlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oRCxYLEspe3ZhciBhZSx5ZT17fSxzZT1udWxsO2lmKFghPW51bGwpZm9yKGFlIGluIFgua2V5IT09dm9pZCAwJiYoc2U9IiIrWC5rZXkpLFgpSi5jYWxsKFgsYWUpJiZhZSE9PSJrZXkiJiZhZSE9PSJfX3NlbGYiJiZhZSE9PSJfX3NvdXJjZSImJih5ZVthZV09WFthZV0pO3ZhciBsZT1hcmd1bWVudHMubGVuZ3RoLTI7aWYobGU9PT0xKXllLmNoaWxkcmVuPUs7ZWxzZSBpZigxPGxlKXtmb3IodmFyIHRlPUFycmF5KGxlKSxpZT0wO2llPGxlO2llKyspdGVbaWVdPWFyZ3VtZW50c1tpZSsyXTt5ZS5jaGlsZHJlbj10ZX1pZihEJiZELmRlZmF1bHRQcm9wcylmb3IoYWUgaW4gbGU9RC5kZWZhdWx0UHJvcHMsbGUpeWVbYWVdPT09dm9pZCAwJiYoeWVbYWVdPWxlW2FlXSk7cmV0dXJuIFcoRCxzZSx5ZSl9LFRlLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSxUZS5mb3J3YXJkUmVmPWZ1bmN0aW9uKEQpe3JldHVybnskJHR5cGVvZjpwLHJlbmRlcjpEfX0sVGUuaXNWYWxpZEVsZW1lbnQ9ZWUsVGUubGF6eT1mdW5jdGlvbihEKXtyZXR1cm57JCR0eXBlb2Y6eCxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OkR9LF9pbml0OnJlfX0sVGUubWVtbz1mdW5jdGlvbihELFgpe3JldHVybnskJHR5cGVvZjpiLHR5cGU6RCxjb21wYXJlOlg9PT12b2lkIDA/bnVsbDpYfX0sVGUuc3RhcnRUcmFuc2l0aW9uPXhlLFRlLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaD1mdW5jdGlvbigpe3JldHVybiBCLkgudXNlQ2FjaGVSZWZyZXNoKCl9LFRlLnVzZT1mdW5jdGlvbihEKXtyZXR1cm4gQi5ILnVzZShEKX0sVGUudXNlQWN0aW9uU3RhdGU9ZnVuY3Rpb24oRCxYLEspe3JldHVybiBCLkgudXNlQWN0aW9uU3RhdGUoRCxYLEspfSxUZS51c2VDYWxsYmFjaz1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlQ2FsbGJhY2soRCxYKX0sVGUudXNlQ29udGV4dD1mdW5jdGlvbihEKXtyZXR1cm4gQi5ILnVzZUNvbnRleHQoRCl9LFRlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LFRlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oRCxYKXtyZXR1cm4gQi5ILnVzZURlZmVycmVkVmFsdWUoRCxYKX0sVGUudXNlRWZmZWN0PWZ1bmN0aW9uKEQsWCl7cmV0dXJuIEIuSC51c2VFZmZlY3QoRCxYKX0sVGUudXNlRWZmZWN0RXZlbnQ9ZnVuY3Rpb24oRCl7cmV0dXJuIEIuSC51c2VFZmZlY3RFdmVudChEKX0sVGUudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQi5ILnVzZUlkKCl9LFRlLnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oRCxYLEspe3JldHVybiBCLkgudXNlSW1wZXJhdGl2ZUhhbmRsZShELFgsSyl9LFRlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlSW5zZXJ0aW9uRWZmZWN0KEQsWCl9LFRlLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlTGF5b3V0RWZmZWN0KEQsWCl9LFRlLnVzZU1lbW89ZnVuY3Rpb24oRCxYKXtyZXR1cm4gQi5ILnVzZU1lbW8oRCxYKX0sVGUudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihELFgpe3JldHVybiBCLkgudXNlT3B0aW1pc3RpYyhELFgpfSxUZS51c2VSZWR1Y2VyPWZ1bmN0aW9uKEQsWCxLKXtyZXR1cm4gQi5ILnVzZVJlZHVjZXIoRCxYLEspfSxUZS51c2VSZWY9ZnVuY3Rpb24oRCl7cmV0dXJuIEIuSC51c2VSZWYoRCl9LFRlLnVzZVN0YXRlPWZ1bmN0aW9uKEQpe3JldHVybiBCLkgudXNlU3RhdGUoRCl9LFRlLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKEQsWCxLKXtyZXR1cm4gQi5ILnVzZVN5bmNFeHRlcm5hbFN0b3JlKEQsWCxLKX0sVGUudXNlVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiBCLkgudXNlVHJhbnNpdGlvbigpfSxUZS52ZXJzaW9uPSIxOS4zLjEiLFRlfXZhciBtaDtmdW5jdGlvbiBrdSgpe3JldHVybiBtaHx8KG1oPTEsenUuZXhwb3J0cz1wMSgpKSx6dS5leHBvcnRzfXZhciB2PWt1KCk7Y29uc3QgQWw9VHQoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6SXQodil9LFt2XSk7dmFyIEx1PXtleHBvcnRzOnt9fSx0cj17fSxVdT17ZXhwb3J0czp7fX0sSHU9e307dmFyIGhoO2Z1bmN0aW9uIHYxKCl7cmV0dXJuIGhofHwoaGg9MSwoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbyhQLCQpe3ZhciBGPVAubGVuZ3RoO1AucHVzaCgkKTtlOmZvcig7MDxGOyl7dmFyIHJlPUYtMT4+PjEscT1QW3JlXTtpZigwPHMocSwkKSlQW3JlXT0kLFBbRl09cSxGPXJlO2Vsc2UgYnJlYWsgZX19ZnVuY3Rpb24gdShQKXtyZXR1cm4gUC5sZW5ndGg9PT0wP251bGw6UFswXX1mdW5jdGlvbiBpKFApe2lmKFAubGVuZ3RoPT09MClyZXR1cm4gbnVsbDt2YXIgJD1QWzBdLEY9UC5wb3AoKTtpZihGIT09JCl7UFswXT1GO2U6Zm9yKHZhciByZT0wLHE9UC5sZW5ndGgseGU9cT4+PjE7cmU8eGU7KXt2YXIgamU9MioocmUrMSktMSxZZT1QW2plXSxEPWplKzEsWD1QW0RdO2lmKDA+cyhZZSxGKSlEPHEmJjA+cyhYLFllKT8oUFtyZV09WCxQW0RdPUYscmU9RCk6KFBbcmVdPVllLFBbamVdPUYscmU9amUpO2Vsc2UgaWYoRDxxJiYwPnMoWCxGKSlQW3JlXT1YLFBbRF09RixyZT1EO2Vsc2UgYnJlYWsgZX19cmV0dXJuICR9ZnVuY3Rpb24gcyhQLCQpe3ZhciBGPVAuc29ydEluZGV4LSQuc29ydEluZGV4O3JldHVybiBGIT09MD9GOlAuaWQtJC5pZH1pZihhLnVuc3RhYmxlX25vdz12b2lkIDAsdHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIGY9cGVyZm9ybWFuY2U7YS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi5ub3coKX19ZWxzZXt2YXIgZD1EYXRlLHA9ZC5ub3coKTthLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBkLm5vdygpLXB9fXZhciB5PVtdLGI9W10seD0xLGc9bnVsbCxDPTMsdz0hMSxSPSExLEU9ITEsVD0hMSxPPXR5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP3NldFRpbWVvdXQ6bnVsbCxBPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsTj10eXBlb2Ygc2V0SW1tZWRpYXRlPCJ1Ij9zZXRJbW1lZGlhdGU6bnVsbDtmdW5jdGlvbiBNKFApe2Zvcih2YXIgJD11KGIpOyQhPT1udWxsOyl7aWYoJC5jYWxsYmFjaz09PW51bGwpaShiKTtlbHNlIGlmKCQuc3RhcnRUaW1lPD1QKWkoYiksJC5zb3J0SW5kZXg9JC5leHBpcmF0aW9uVGltZSxvKHksJCk7ZWxzZSBicmVhazskPXUoYil9fWZ1bmN0aW9uIFkoUCl7aWYoRT0hMSxNKFApLCFSKWlmKHUoeSkhPT1udWxsKVI9ITAsSHx8KEg9ITAsZWUoKSk7ZWxzZXt2YXIgJD11KGIpOyQhPT1udWxsJiZoZShZLCQuc3RhcnRUaW1lLVApfX12YXIgSD0hMSxVPS0xLEI9NSxKPS0xO2Z1bmN0aW9uIFcoKXtyZXR1cm4gVD8hMDohKGEudW5zdGFibGVfbm93KCktSjxCKX1mdW5jdGlvbiBuZSgpe2lmKFQ9ITEsSCl7dmFyIFA9YS51bnN0YWJsZV9ub3coKTtKPVA7dmFyICQ9ITA7dHJ5e2U6e1I9ITEsRSYmKEU9ITEsQShVKSxVPS0xKSx3PSEwO3ZhciBGPUM7dHJ5e3Q6e2ZvcihNKFApLGc9dSh5KTtnIT09bnVsbCYmIShnLmV4cGlyYXRpb25UaW1lPlAmJlcoKSk7KXt2YXIgcmU9Zy5jYWxsYmFjaztpZih0eXBlb2YgcmU9PSJmdW5jdGlvbiIpe2cuY2FsbGJhY2s9bnVsbCxDPWcucHJpb3JpdHlMZXZlbDt2YXIgcT1yZShnLmV4cGlyYXRpb25UaW1lPD1QKTtpZihQPWEudW5zdGFibGVfbm93KCksdHlwZW9mIHE9PSJmdW5jdGlvbiIpe2cuY2FsbGJhY2s9cSxNKFApLCQ9ITA7YnJlYWsgdH1nPT09dSh5KSYmaSh5KSxNKFApfWVsc2UgaSh5KTtnPXUoeSl9aWYoZyE9PW51bGwpJD0hMDtlbHNle3ZhciB4ZT11KGIpO3hlIT09bnVsbCYmaGUoWSx4ZS5zdGFydFRpbWUtUCksJD0hMX19YnJlYWsgZX1maW5hbGx5e2c9bnVsbCxDPUYsdz0hMX0kPXZvaWQgMH19ZmluYWxseXskP2VlKCk6SD0hMX19fXZhciBlZTtpZih0eXBlb2YgTj09ImZ1bmN0aW9uIillZT1mdW5jdGlvbigpe04obmUpfTtlbHNlIGlmKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbDwidSIpe3ZhciBjZT1uZXcgTWVzc2FnZUNoYW5uZWwsbWU9Y2UucG9ydDI7Y2UucG9ydDEub25tZXNzYWdlPW5lLGVlPWZ1bmN0aW9uKCl7bWUucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgZWU9ZnVuY3Rpb24oKXtPKG5lLDApfTtmdW5jdGlvbiBoZShQLCQpe1U9TyhmdW5jdGlvbigpe1AoYS51bnN0YWJsZV9ub3coKSl9LCQpfWEudW5zdGFibGVfSWRsZVByaW9yaXR5PTUsYS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xLGEudW5zdGFibGVfTG93UHJpb3JpdHk9NCxhLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTMsYS51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbCxhLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsYS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihQKXtQLmNhbGxiYWNrPW51bGx9LGEudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oUCl7MD5QfHwxMjU8UD9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpCPTA8UD9NYXRoLmZsb29yKDFlMy9QKTo1fSxhLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIEN9LGEudW5zdGFibGVfbmV4dD1mdW5jdGlvbihQKXtzd2l0Y2goQyl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyICQ9MzticmVhaztkZWZhdWx0OiQ9Q312YXIgRj1DO0M9JDt0cnl7cmV0dXJuIFAoKX1maW5hbGx5e0M9Rn19LGEudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7VD0hMH0sYS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oUCwkKXtzd2l0Y2goUCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0OlA9M312YXIgRj1DO0M9UDt0cnl7cmV0dXJuICQoKX1maW5hbGx5e0M9Rn19LGEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihQLCQsRil7dmFyIHJlPWEudW5zdGFibGVfbm93KCk7c3dpdGNoKHR5cGVvZiBGPT0ib2JqZWN0IiYmRiE9PW51bGw/KEY9Ri5kZWxheSxGPXR5cGVvZiBGPT0ibnVtYmVyIiYmMDxGP3JlK0Y6cmUpOkY9cmUsUCl7Y2FzZSAxOnZhciBxPS0xO2JyZWFrO2Nhc2UgMjpxPTI1MDticmVhaztjYXNlIDU6cT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDpxPTFlNDticmVhaztkZWZhdWx0OnE9NWUzfXJldHVybiBxPUYrcSxQPXtpZDp4KyssY2FsbGJhY2s6JCxwcmlvcml0eUxldmVsOlAsc3RhcnRUaW1lOkYsZXhwaXJhdGlvblRpbWU6cSxzb3J0SW5kZXg6LTF9LEY+cmU/KFAuc29ydEluZGV4PUYsbyhiLFApLHUoeSk9PT1udWxsJiZQPT09dShiKSYmKEU/KEEoVSksVT0tMSk6RT0hMCxoZShZLEYtcmUpKSk6KFAuc29ydEluZGV4PXEsbyh5LFApLFJ8fHd8fChSPSEwLEh8fChIPSEwLGVlKCkpKSksUH0sYS51bnN0YWJsZV9zaG91bGRZaWVsZD1XLGEudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKFApe3ZhciAkPUM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEY9QztDPSQ7dHJ5e3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e0M9Rn19fX0pKEh1KSksSHV9dmFyIHBoO2Z1bmN0aW9uIGcxKCl7cmV0dXJuIHBofHwocGg9MSxVdS5leHBvcnRzPXYxKCkpLFV1LmV4cG9ydHN9dmFyIEJ1PXtleHBvcnRzOnt9fSx3dD17fTt2YXIgdmg7ZnVuY3Rpb24geTEoKXtpZih2aClyZXR1cm4gd3Q7dmg9MTt2YXIgYT1rdSgpO2Z1bmN0aW9uIG8oeCl7dmFyIGc9Imh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy8iK3g7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXtnKz0iP2FyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgQz0yO0M8YXJndW1lbnRzLmxlbmd0aDtDKyspZys9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW0NdKX1yZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIreCsiOyB2aXNpdCAiK2crIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn1mdW5jdGlvbiB1KCl7fXZhciBpPXtkOntmOnUscjpmdW5jdGlvbigpe3Rocm93IEVycm9yKG8oNTIyKSl9LEQ6dSxDOnUsTDp1LG06dSxYOnUsUzp1LE06dX0scDowLGZpbmRET01Ob2RlOm51bGx9LHM9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksZj1TeW1ib2wuZm9yKCJyZWFjdC5yZWNvdmVyYWJsZSIpLGQ9U3ltYm9sLmZvcigicmVhY3Qub3B0aW1pc3RpY19rZXkiKTtmdW5jdGlvbiBwKHgsZyxDKXt2YXIgdz0zPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6cyxrZXk6dz09bnVsbD9udWxsOnc9PT1kP2Q6IiIrdyxjaGlsZHJlbjp4LGNvbnRhaW5lckluZm86ZyxpbXBsZW1lbnRhdGlvbjpDfX12YXIgeT1hLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERTtmdW5jdGlvbiBiKHgsZyl7aWYoeD09PSJmb250IilyZXR1cm4iIjtpZih0eXBlb2YgZz09InN0cmluZyIpcmV0dXJuIGc9PT0idXNlLWNyZWRlbnRpYWxzIj9nOiIifXJldHVybiB3dC5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9aSx3dC5icm93c2VyPWZ1bmN0aW9uKHgpe3JldHVybnskJHR5cGVvZjpmLF9yZWFzb246eH19LHd0LmNyZWF0ZVBvcnRhbD1mdW5jdGlvbih4LGcpe3ZhciBDPTI8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsO2lmKCFnfHxnLm5vZGVUeXBlIT09MSYmZy5ub2RlVHlwZSE9PTkmJmcubm9kZVR5cGUhPT0xMSl0aHJvdyBFcnJvcihvKDI5OSkpO3JldHVybiBwKHgsZyxudWxsLEMpfSx3dC5mbHVzaFN5bmM9ZnVuY3Rpb24oeCl7dmFyIGc9eS5ULEM9aS5wO3RyeXtpZih5LlQ9bnVsbCxpLnA9Mix4KXJldHVybiB4KCl9ZmluYWxseXt5LlQ9ZyxpLnA9QyxpLmQuZigpfX0sd3QucHJlY29ubmVjdD1mdW5jdGlvbih4LGcpe3R5cGVvZiB4PT0ic3RyaW5nIiYmKGc/KGc9Zy5jcm9zc09yaWdpbixnPXR5cGVvZiBnPT0ic3RyaW5nIj9nPT09InVzZS1jcmVkZW50aWFscyI/ZzoiIjp2b2lkIDApOmc9bnVsbCxpLmQuQyh4LGcpKX0sd3QucHJlZmV0Y2hETlM9ZnVuY3Rpb24oeCl7dHlwZW9mIHg9PSJzdHJpbmciJiZpLmQuRCh4KX0sd3QucHJlaW5pdD1mdW5jdGlvbih4LGcpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIiYmZyYmdHlwZW9mIGcuYXM9PSJzdHJpbmciKXt2YXIgQz1nLmFzLHc9YihDLGcuY3Jvc3NPcmlnaW4pLFI9dHlwZW9mIGcuaW50ZWdyaXR5PT0ic3RyaW5nIj9nLmludGVncml0eTp2b2lkIDAsRT10eXBlb2YgZy5mZXRjaFByaW9yaXR5PT0ic3RyaW5nIj9nLmZldGNoUHJpb3JpdHk6dm9pZCAwO0M9PT0ic3R5bGUiP2kuZC5TKHgsdHlwZW9mIGcucHJlY2VkZW5jZT09InN0cmluZyI/Zy5wcmVjZWRlbmNlOnZvaWQgMCx7Y3Jvc3NPcmlnaW46dyxpbnRlZ3JpdHk6UixmZXRjaFByaW9yaXR5OkV9KTpDPT09InNjcmlwdCImJmkuZC5YKHgse2Nyb3NzT3JpZ2luOncsaW50ZWdyaXR5OlIsZmV0Y2hQcmlvcml0eTpFLG5vbmNlOnR5cGVvZiBnLm5vbmNlPT0ic3RyaW5nIj9nLm5vbmNlOnZvaWQgMH0pfX0sd3QucHJlaW5pdE1vZHVsZT1mdW5jdGlvbih4LGcpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilpZih0eXBlb2YgZz09Im9iamVjdCImJmchPT1udWxsKXtpZihnLmFzPT1udWxsfHxnLmFzPT09InNjcmlwdCIpe3ZhciBDPWIoZy5hcyxnLmNyb3NzT3JpZ2luKTtpLmQuTSh4LHtjcm9zc09yaWdpbjpDLGludGVncml0eTp0eXBlb2YgZy5pbnRlZ3JpdHk9PSJzdHJpbmciP2cuaW50ZWdyaXR5OnZvaWQgMCxub25jZTp0eXBlb2YgZy5ub25jZT09InN0cmluZyI/Zy5ub25jZTp2b2lkIDAsZmV0Y2hQcmlvcml0eTp0eXBlb2YgZy5mZXRjaFByaW9yaXR5PT0ic3RyaW5nIj9nLmZldGNoUHJpb3JpdHk6dm9pZCAwfSl9fWVsc2UgZz09bnVsbCYmaS5kLk0oeCl9LHd0LnByZWxvYWQ9ZnVuY3Rpb24oeCxnKXtpZih0eXBlb2YgeD09InN0cmluZyImJnR5cGVvZiBnPT0ib2JqZWN0IiYmZyE9PW51bGwmJnR5cGVvZiBnLmFzPT0ic3RyaW5nIil7dmFyIEM9Zy5hcyx3PWIoQyxnLmNyb3NzT3JpZ2luKTtpLmQuTCh4LEMse2Nyb3NzT3JpZ2luOncsaW50ZWdyaXR5OnR5cGVvZiBnLmludGVncml0eT09InN0cmluZyI/Zy5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOnR5cGVvZiBnLm5vbmNlPT0ic3RyaW5nIj9nLm5vbmNlOnZvaWQgMCx0eXBlOnR5cGVvZiBnLnR5cGU9PSJzdHJpbmciP2cudHlwZTp2b2lkIDAsZmV0Y2hQcmlvcml0eTp0eXBlb2YgZy5mZXRjaFByaW9yaXR5PT0ic3RyaW5nIj9nLmZldGNoUHJpb3JpdHk6dm9pZCAwLHJlZmVycmVyUG9saWN5OnR5cGVvZiBnLnJlZmVycmVyUG9saWN5PT0ic3RyaW5nIj9nLnJlZmVycmVyUG9saWN5OnZvaWQgMCxpbWFnZVNyY1NldDp0eXBlb2YgZy5pbWFnZVNyY1NldD09InN0cmluZyI/Zy5pbWFnZVNyY1NldDp2b2lkIDAsaW1hZ2VTaXplczp0eXBlb2YgZy5pbWFnZVNpemVzPT0ic3RyaW5nIj9nLmltYWdlU2l6ZXM6dm9pZCAwLG1lZGlhOnR5cGVvZiBnLm1lZGlhPT0ic3RyaW5nIj9nLm1lZGlhOnZvaWQgMH0pfX0sd3QucHJlbG9hZE1vZHVsZT1mdW5jdGlvbih4LGcpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilpZihnKXt2YXIgQz1iKGcuYXMsZy5jcm9zc09yaWdpbik7aS5kLm0oeCx7YXM6dHlwZW9mIGcuYXM9PSJzdHJpbmciJiZnLmFzIT09InNjcmlwdCI/Zy5hczp2b2lkIDAsY3Jvc3NPcmlnaW46QyxpbnRlZ3JpdHk6dHlwZW9mIGcuaW50ZWdyaXR5PT0ic3RyaW5nIj9nLmludGVncml0eTp2b2lkIDAsbm9uY2U6dHlwZW9mIGcubm9uY2U9PSJzdHJpbmciP2cubm9uY2U6dm9pZCAwLGZldGNoUHJpb3JpdHk6dHlwZW9mIGcuZmV0Y2hQcmlvcml0eT09InN0cmluZyI/Zy5mZXRjaFByaW9yaXR5OnZvaWQgMH0pfWVsc2UgaS5kLm0oeCl9LHd0LnJlcXVlc3RGb3JtUmVzZXQ9ZnVuY3Rpb24oeCl7aS5kLnIoeCl9LHd0LnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZ1bmN0aW9uKHgsZyl7cmV0dXJuIHgoZyl9LHd0LnVzZUZvcm1TdGF0ZT1mdW5jdGlvbih4LGcsQyl7cmV0dXJuIHkuSC51c2VGb3JtU3RhdGUoeCxnLEMpfSx3dC51c2VGb3JtU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHkuSC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cygpfSx3dC52ZXJzaW9uPSIxOS4zLjEiLHd0fXZhciBnaDtmdW5jdGlvbiB5aCgpe2lmKGdoKXJldHVybiBCdS5leHBvcnRzO2doPTE7ZnVuY3Rpb24gYSgpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz4idSJ8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPSJmdW5jdGlvbiIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoYSl9Y2F0Y2gobyl7Y29uc29sZS5lcnJvcihvKX19cmV0dXJuIGEoKSxCdS5leHBvcnRzPXkxKCksQnUuZXhwb3J0c312YXIgYmg7ZnVuY3Rpb24gYjEoKXtpZihiaClyZXR1cm4gdHI7Ymg9MTt2YXIgYT1nMSgpLG89a3UoKSx1PXloKCk7ZnVuY3Rpb24gaShlKXt2YXIgdD0iaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzLyIrZTtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe3QrPSI/YXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pfXJldHVybiJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICIrdCsiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifWZ1bmN0aW9uIHMoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEpfWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PWUsbj10O24mJiFuLmFsdGVybmF0ZTspdD1uLCh0LmZsYWdzJjQwOTgpIT09MCYmKGU9dC5yZXR1cm4pLG49dC5yZXR1cm47Zm9yKDt0LnJldHVybjspdD10LnJldHVybjtyZXR1cm4gdC50YWc9PT0zP2U6bnVsbH1mdW5jdGlvbiBkKGUpe2lmKGUudGFnPT09MTMpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZih0PT09bnVsbCYmKGU9ZS5hbHRlcm5hdGUsZSE9PW51bGwmJih0PWUubWVtb2l6ZWRTdGF0ZSkpLHQhPT1udWxsKXJldHVybiB0LmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlKXtpZihlLnRhZz09PTMxKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoZSl7aWYoZihlKSE9PWUpdGhyb3cgRXJyb3IoaSgxODgpKX1mdW5jdGlvbiBiKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PWYoZSksdD09PW51bGwpdGhyb3cgRXJyb3IoaSgxODgpKTtyZXR1cm4gdCE9PWU/bnVsbDplfWZvcih2YXIgbj1lLGw9dDs7KXt2YXIgcj1uLnJldHVybjtpZihyPT09bnVsbClicmVhazt2YXIgYz1yLmFsdGVybmF0ZTtpZihjPT09bnVsbCl7aWYobD1yLnJldHVybixsIT09bnVsbCl7bj1sO2NvbnRpbnVlfWJyZWFrfWlmKHIuY2hpbGQ9PT1jLmNoaWxkKXtmb3IoYz1yLmNoaWxkO2M7KXtpZihjPT09bilyZXR1cm4geShyKSxlO2lmKGM9PT1sKXJldHVybiB5KHIpLHQ7Yz1jLnNpYmxpbmd9dGhyb3cgRXJyb3IoaSgxODgpKX1pZihuLnJldHVybiE9PWwucmV0dXJuKW49cixsPWM7ZWxzZXtmb3IodmFyIGg9ITEsUz1yLmNoaWxkO1M7KXtpZihTPT09bil7aD0hMCxuPXIsbD1jO2JyZWFrfWlmKFM9PT1sKXtoPSEwLGw9cixuPWM7YnJlYWt9Uz1TLnNpYmxpbmd9aWYoIWgpe2ZvcihTPWMuY2hpbGQ7Uzspe2lmKFM9PT1uKXtoPSEwLG49YyxsPXI7YnJlYWt9aWYoUz09PWwpe2g9ITAsbD1jLG49cjticmVha31TPVMuc2libGluZ31pZighaCl0aHJvdyBFcnJvcihpKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PWwpdGhyb3cgRXJyb3IoaSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoaSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIHgoZSl7dmFyIHQ9ZS50YWc7aWYodD09PTV8fHQ9PT0yNnx8dD09PTI3fHx0PT09NilyZXR1cm4gZTtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7aWYodD14KGUpLHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGcoZSx0LG4sbCxyLGMpe2Zvcig7ZSE9PW51bGw7KXtpZigoZS50YWc9PT01fHxlLnRhZz09PTI3fHxlLnRhZz09PTYpJiZuKGUsbCxyLGMpfHwoZS50YWchPT0yMnx8ZS5tZW1vaXplZFN0YXRlPT09bnVsbCkmJih0fHxlLnRhZyE9PTUmJmUudGFnIT09MjcpJiZnKGUuY2hpbGQsdCxuLGwscixjKSlyZXR1cm4hMDtlPWUuc2libGluZ31yZXR1cm4hMX1mdW5jdGlvbiBDKGUpe2ZvcihlPWUucmV0dXJuO2UhPT1udWxsOyl7aWYoZS50YWc9PT0zfHxlLnRhZz09PTV8fGUudGFnPT09MjcpcmV0dXJuIGU7ZT1lLnJldHVybn1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KGUpe3ZhciB0PSExO2ZvcihlPWUucmV0dXJuO2UhPT1udWxsJiYoZS50YWc9PT00JiYodD0hMCksIShlLnRhZz09PTN8fGUudGFnPT09NXx8ZS50YWc9PT0yNykpOyllPWUucmV0dXJuO3JldHVybiB0fWZ1bmN0aW9uIFIoZSl7dmFyIHQ9W251bGwsbnVsbF0sbj1DKGUpO3JldHVybiBuPT09bnVsbHx8RSh0LGUsbi5jaGlsZCx7Zm91bmRTZWxmOiExfSksdH1mdW5jdGlvbiBFKGUsdCxuLGwpe2Zvcig7biE9PW51bGw7KXtpZihuPT09dClsLmZvdW5kU2VsZj0hMDtlbHNlIGlmKG4udGFnPT09NXx8bi50YWc9PT0yN3x8bi50YWc9PT02KXtpZihsLmZvdW5kU2VsZilyZXR1cm4gZVsxXT1uLCEwO2VbMF09bn1lbHNlIGlmKChuLnRhZyE9PTIyfHxuLm1lbW9pemVkU3RhdGU9PT1udWxsKSYmRShlLHQsbi5jaGlsZCxsKSlyZXR1cm4hMDtuPW4uc2libGluZ31yZXR1cm4hMX1mdW5jdGlvbiBUKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OmNhc2UgMjc6Y2FzZSA2OnJldHVybiBlLnN0YXRlTm9kZTtjYXNlIDM6cmV0dXJuIGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDU1OSkpfX12YXIgTz1udWxsLEE9bnVsbDtmdW5jdGlvbiBOKGUsdCxuKXtyZXR1cm4gZT09PW4/ITA6ZT09PXQ/KE89ZSwhMCk6ITF9ZnVuY3Rpb24gTShlLHQsbil7cmV0dXJuIGU9PT1uPyhBPWUsITEpOmU9PT10PyhBIT09bnVsbCYmKE89ZSksITApOiExfWZ1bmN0aW9uIFkoZSl7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7ZG8gZT1lPT09bnVsbD9udWxsOmUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSYmZS50YWchPT0yNyYmZS50YWchPT0zKTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBIKGUsdCxuKXtmb3IodmFyIGw9MCxyPWU7cjtyPW4ocikpbCsrO3I9MDtmb3IodmFyIGM9dDtjO2M9bihjKSlyKys7Zm9yKDswPGwtcjspZT1uKGUpLGwtLTtmb3IoOzA8ci1sOyl0PW4odCksci0tO2Zvcig7bC0tOyl7aWYoZT09PXR8fHQhPT1udWxsJiZlPT09dC5hbHRlcm5hdGUpcmV0dXJuIGU7ZT1uKGUpLHQ9bih0KX1yZXR1cm4gbnVsbH12YXIgVT1PYmplY3QuYXNzaWduLEI9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLEo9U3ltYm9sLmZvcigicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnQiKSxXPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLG5lPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksZWU9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxjZT1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLG1lPVN5bWJvbC5mb3IoInJlYWN0LmNvbnN1bWVyIiksaGU9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLFA9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSwkPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksRj1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IikscmU9U3ltYm9sLmZvcigicmVhY3QubWVtbyIpLHE9U3ltYm9sLmZvcigicmVhY3QubGF6eSIpLHhlPVN5bWJvbC5mb3IoInJlYWN0LmFjdGl2aXR5IiksamU9U3ltYm9sLmZvcigicmVhY3QubGVnYWN5X2hpZGRlbiIpLFllPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWwiKSxEPVN5bWJvbC5mb3IoInJlYWN0LnZpZXdfdHJhbnNpdGlvbiIpLFg9U3ltYm9sLmZvcigicmVhY3QucmVjb3ZlcmFibGUiKSxLPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBhZShlKXtyZXR1cm4gZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Ij9udWxsOihlPUsmJmVbS118fGVbIkBAaXRlcmF0b3IiXSx0eXBlb2YgZT09ImZ1bmN0aW9uIj9lOm51bGwpfXZhciB5ZT1TeW1ib2wuZm9yKCJyZWFjdC5jbGllbnQucmVmZXJlbmNlIik7ZnVuY3Rpb24gc2UoZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIilyZXR1cm4gZS4kJHR5cGVvZj09PXllP251bGw6ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxudWxsO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZTtzd2l0Y2goZSl7Y2FzZSBuZTpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgY2U6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIGVlOnJldHVybiJTdHJpY3RNb2RlIjtjYXNlICQ6cmV0dXJuIlN1c3BlbnNlIjtjYXNlIEY6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSB4ZTpyZXR1cm4iQWN0aXZpdHkiO2Nhc2UgRDpyZXR1cm4iVmlld1RyYW5zaXRpb24ifWlmKHR5cGVvZiBlPT0ib2JqZWN0Iilzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBXOnJldHVybiJQb3J0YWwiO2Nhc2UgaGU6cmV0dXJuIGUuZGlzcGxheU5hbWV8fCJDb250ZXh0IjtjYXNlIG1lOnJldHVybihlLl9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgUDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSByZTpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6c2UoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgcTp0PWUuX3BheWxvYWQsZT1lLl9pbml0O3RyeXtyZXR1cm4gc2UoZSh0KSl9Y2F0Y2h7fX1yZXR1cm4gbnVsbH12YXIgbGU9QXJyYXkuaXNBcnJheSx0ZT1vLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxpZT11Ll9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxiZT17cGVuZGluZzohMSxkYXRhOm51bGwsbWV0aG9kOm51bGwsYWN0aW9uOm51bGx9LHdlPVtdLFJlPS0xO2Z1bmN0aW9uIHF0KGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIGl0KGUpezA+UmV8fChlLmN1cnJlbnQ9d2VbUmVdLHdlW1JlXT1udWxsLFJlLS0pfWZ1bmN0aW9uIFBlKGUsdCl7UmUrKyx3ZVtSZV09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBQbj1xdChudWxsKSxicj1xdChudWxsKSxIbD1xdChudWxsKSxhYz1xdChudWxsKTtmdW5jdGlvbiBvYyhlLHQpe3N3aXRjaChQZShIbCx0KSxQZShicixlKSxQZShQbixudWxsKSx0Lm5vZGVUeXBlKXtjYXNlIDk6Y2FzZSAxMTplPShlPXQuZG9jdW1lbnRFbGVtZW50KSYmKGU9ZS5uYW1lc3BhY2VVUkkpP2JTKGUpOjA7YnJlYWs7ZGVmYXVsdDppZihlPXQudGFnTmFtZSx0PXQubmFtZXNwYWNlVVJJKXQ9YlModCksZT14Uyh0LGUpO2Vsc2Ugc3dpdGNoKGUpe2Nhc2Uic3ZnIjplPTE7YnJlYWs7Y2FzZSJtYXRoIjplPTI7YnJlYWs7ZGVmYXVsdDplPTB9fWl0KFBuKSxQZShQbixlKX1mdW5jdGlvbiBzbygpe2l0KFBuKSxpdChiciksaXQoSGwpfWZ1bmN0aW9uIEFmKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTt0IT09bnVsbCYmKEpvLl9jdXJyZW50VmFsdWU9dC5tZW1vaXplZFN0YXRlLFBlKGFjLGUpKSx0PVBuLmN1cnJlbnQ7dmFyIG49eFModCxlLnR5cGUpO3QhPT1uJiYoUGUoYnIsZSksUGUoUG4sbikpfWZ1bmN0aW9uIHJjKGUpe2JyLmN1cnJlbnQ9PT1lJiYoaXQoUG4pLGl0KGJyKSksYWMuY3VycmVudD09PWUmJihpdChhYyksSm8uX2N1cnJlbnRWYWx1ZT1iZSl9dmFyIE5mLEl5O2Z1bmN0aW9uIEJsKGUpe2lmKE5mPT09dm9pZCAwKXRyeXt0aHJvdyBFcnJvcigpfWNhdGNoKG4pe3ZhciB0PW4uc3RhY2sudHJpbSgpLm1hdGNoKC9cbiggKihhdCApPykvKTtOZj10JiZ0WzFdfHwiIixJeT0tMTxuLnN0YWNrLmluZGV4T2YoYAogICAgYXRgKT8iICg8YW5vbnltb3VzPikiOi0xPG4uc3RhY2suaW5kZXhPZigiQCIpPyJAdW5rbm93bjowOjAiOiIifXJldHVybmAKYCtOZitlK0l5fXZhciBEZj0hMTtmdW5jdGlvbiBqZihlLHQpe2lmKCFlfHxEZilyZXR1cm4iIjtEZj0hMDt2YXIgbj1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e3ZhciBsPXtEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6ZnVuY3Rpb24oKXt0cnl7aWYodCl7dmFyIFo9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkoWi5wcm90b3R5cGUsInByb3BzIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KSx0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoWixbXSl9Y2F0Y2gob2Upe3ZhciB6PW9lfVJlZmxlY3QuY29uc3RydWN0KGUsW10sWil9ZWxzZXt0cnl7Wi5jYWxsKCl9Y2F0Y2gob2Upe3o9b2V9Wj0hMTt0cnl7dmFyIEc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLnByb3RvdHlwZSwicHJvcHMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInByb3BzIix7Y29uZmlndXJhYmxlOiEwLHNldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksWj0hMCxuZXcgZX1maW5hbGx5e1omJihHIT09dm9pZCAwP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicHJvcHMiLEcpOmRlbGV0ZSBlLnByb3RvdHlwZS5wcm9wcyl9fX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKG9lKXt6PW9lfShaPWUoKSkmJnR5cGVvZiBaLmNhdGNoPT0iZnVuY3Rpb24iJiZaLmNhdGNoKGZ1bmN0aW9uKCl7fSl9fWNhdGNoKG9lKXtpZihvZSYmeiYmdHlwZW9mIG9lLnN0YWNrPT0ic3RyaW5nIilyZXR1cm5bb2Uuc3RhY2ssei5zdGFja119cmV0dXJuW251bGwsbnVsbF19fTtsLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZT0iRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Ijt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCJuYW1lIik7ciYmci5jb25maWd1cmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwibmFtZSIse3ZhbHVlOiJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QifSk7dmFyIGM9bC5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxoPWNbMF0sUz1jWzFdO2lmKGgmJlMpe3ZhciBfPWguc3BsaXQoYApgKSxMPVMuc3BsaXQoYApgKTtmb3Iocj1sPTA7bDxfLmxlbmd0aCYmIV9bbF0uaW5jbHVkZXMoIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCIpOylsKys7Zm9yKDtyPEwubGVuZ3RoJiYhTFtyXS5pbmNsdWRlcygiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Iik7KXIrKztpZihsPT09Xy5sZW5ndGh8fHI9PT1MLmxlbmd0aClmb3IobD1fLmxlbmd0aC0xLHI9TC5sZW5ndGgtMTsxPD1sJiYwPD1yJiZfW2xdIT09TFtyXTspci0tO2Zvcig7MTw9bCYmMDw9cjtsLS0sci0tKWlmKF9bbF0hPT1MW3JdKXtpZihsIT09MXx8ciE9PTEpZG8gaWYobC0tLHItLSwwPnJ8fF9bbF0hPT1MW3JdKXt2YXIgVj1gCmArX1tsXS5yZXBsYWNlKCIgYXQgbmV3ICIsIiBhdCAiKTtyZXR1cm4gZS5kaXNwbGF5TmFtZSYmVi5pbmNsdWRlcygiPGFub255bW91cz4iKSYmKFY9Vi5yZXBsYWNlKCI8YW5vbnltb3VzPiIsZS5kaXNwbGF5TmFtZSkpLFZ9d2hpbGUoMTw9bCYmMDw9cik7YnJlYWt9fX1maW5hbGx5e0RmPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPW59cmV0dXJuKG49ZT9lLmRpc3BsYXlOYW1lfHxlLm5hbWU6IiIpP0JsKG4pOiIifWZ1bmN0aW9uIFpPKGUsdCl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBCbChlLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIEJsKCJMYXp5Iik7Y2FzZSAxMzpyZXR1cm4gZS5jaGlsZCE9PXQmJnQhPT1udWxsP0JsKCJTdXNwZW5zZSBGYWxsYmFjayIpOkJsKCJTdXNwZW5zZSIpO2Nhc2UgMTk6cmV0dXJuIEJsKCJTdXNwZW5zZUxpc3QiKTtjYXNlIDA6Y2FzZSAxNTpyZXR1cm4gamYoZS50eXBlLCExKTtjYXNlIDExOnJldHVybiBqZihlLnR5cGUucmVuZGVyLCExKTtjYXNlIDE6cmV0dXJuIGpmKGUudHlwZSwhMCk7Y2FzZSAzMTpyZXR1cm4gQmwoIkFjdGl2aXR5Iik7Y2FzZSAzMDpyZXR1cm4gQmwoIlZpZXdUcmFuc2l0aW9uIik7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gUHkoZSl7dHJ5e3ZhciB0PSIiLG49bnVsbDtkbyB0Kz1aTyhlLG4pLG49ZSxlPWUucmV0dXJuO3doaWxlKGUpO3JldHVybiB0fWNhdGNoKGwpe3JldHVybmAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtsLm1lc3NhZ2UrYApgK2wuc3RhY2t9fXZhciBNZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHpmPWEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxrZj1hLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLEZPPWEudW5zdGFibGVfc2hvdWxkWWllbGQsJE89YS51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsZW49YS51bnN0YWJsZV9ub3csSk89YS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxHeT1hLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFZ5PWEudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksaWM9YS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxXTz1hLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFl5PWEudW5zdGFibGVfSWRsZVByaW9yaXR5LGVBPWEubG9nLHRBPWEudW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUseHI9bnVsbCx0bj1udWxsO2Z1bmN0aW9uIElsKGUpe2lmKHR5cGVvZiBlQT09ImZ1bmN0aW9uIiYmdEEoZSksdG4mJnR5cGVvZiB0bi5zZXRTdHJpY3RNb2RlPT0iZnVuY3Rpb24iKXRyeXt0bi5zZXRTdHJpY3RNb2RlKHhyLGUpfWNhdGNoe319dmFyIG5uPU1hdGguY2x6MzI/TWF0aC5jbHozMjphQSxuQT1NYXRoLmxvZyxsQT1NYXRoLkxOMjtmdW5jdGlvbiBhQShlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLShuQShlKS9sQXwwKXwwfXZhciBjYz0yNTYsdWM9MjYyMTQ0LHNjPTQxOTQzMDQ7ZnVuY3Rpb24gd2EoZSl7dmFyIHQ9ZSY0MjtpZih0IT09MClyZXR1cm4gdDtzd2l0Y2goZSYtZSl7Y2FzZSAxOnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA4OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIDE2O2Nhc2UgMzI6cmV0dXJuIDMyO2Nhc2UgNjQ6cmV0dXJuIDY0O2Nhc2UgMTI4OnJldHVybiAxMjg7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOnJldHVybiBlJi1lO2Nhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIGUmMzkzMjE2MDtjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpyZXR1cm4gZSY2MjkxNDU2MDtjYXNlIDY3MTA4ODY0OnJldHVybiA2NzEwODg2NDtjYXNlIDEzNDIxNzcyODpyZXR1cm4gMTM0MjE3NzI4O2Nhc2UgMjY4NDM1NDU2OnJldHVybiAyNjg0MzU0NTY7Y2FzZSA1MzY4NzA5MTI6cmV0dXJuIDUzNjg3MDkxMjtjYXNlIDEwNzM3NDE4MjQ6cmV0dXJuIDA7ZGVmYXVsdDpyZXR1cm4gZX19ZnVuY3Rpb24gZmMoZSx0LG4pe3ZhciBsPWUucGVuZGluZ0xhbmVzO2lmKGw9PT0wKXJldHVybiAwO3ZhciByPTAsYz1lLnN1c3BlbmRlZExhbmVzLGg9ZS5waW5nZWRMYW5lcztlPWUud2FybUxhbmVzO3ZhciBTPWwmMTM0MjE3NzI3O3JldHVybiBTIT09MD8obD1TJn5jLGwhPT0wP3I9d2EobCk6KGgmPVMsaCE9PTA/cj13YShoKTpufHwobj1TJn5lLG4hPT0wJiYocj13YShuKSkpKSk6KFM9bCZ+YyxTIT09MD9yPXdhKFMpOmghPT0wP3I9d2EoaCk6bnx8KG49bCZ+ZSxuIT09MCYmKHI9d2EobikpKSkscj09PTA/MDp0IT09MCYmdCE9PXImJih0JmMpPT09MCYmKGM9ciYtcixuPXQmLXQsYz49bnx8Yz09PTMyJiYobiY0MTk0MDQ4KSE9PTApP3Q6cn1mdW5jdGlvbiBTcihlLHQpe3JldHVybihlLnBlbmRpbmdMYW5lcyZ+KGUuc3VzcGVuZGVkTGFuZXMmfmUucGluZ2VkTGFuZXMpJnQpPT09MH1mdW5jdGlvbiBxeShlLHQpeyh0JjgpIT09MCYmKHR8PXQmMzIpO3ZhciBuPWUuZW50YW5nbGVkTGFuZXM7aWYobiE9PTApZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLG4mPXQ7MDxuOyl7dmFyIGw9MzEtbm4obikscj0xPDxsO3R8PWVbbF0sbiY9fnJ9cmV0dXJuIHR9ZnVuY3Rpb24gb0EoZSx0KXtzd2l0Y2goZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA4OmNhc2UgNjQ6cmV0dXJuIHQrMjUwO2Nhc2UgMTY6Y2FzZSAzMjpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gdCs1ZTM7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6cmV0dXJuLTE7Y2FzZSA2NzEwODg2NDpjYXNlIDEzNDIxNzcyODpjYXNlIDI2ODQzNTQ1NjpjYXNlIDUzNjg3MDkxMjpjYXNlIDEwNzM3NDE4MjQ6cmV0dXJuLTE7ZGVmYXVsdDpyZXR1cm4tMX19ZnVuY3Rpb24gWHkoKXt2YXIgZT1zYztyZXR1cm4gc2M8PD0xLChzYyY2MjkxNDU2MCk9PT0wJiYoc2M9NDE5NDMwNCksZX1mdW5jdGlvbiBMZihlKXtmb3IodmFyIHQ9W10sbj0wOzMxPm47bisrKXQucHVzaChlKTtyZXR1cm4gdH1mdW5jdGlvbiBDcihlLHQpe2UucGVuZGluZ0xhbmVzfD10LHQhPT0yNjg0MzU0NTYmJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTApfWZ1bmN0aW9uIHJBKGUsdCxuLGwscixjKXt2YXIgaD1lLnBlbmRpbmdMYW5lcztlLnBlbmRpbmdMYW5lcz1uLGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTAsZS53YXJtTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9bixlLmVudGFuZ2xlZExhbmVzJj1uLGUuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMmPW4sZS5zaGVsbFN1c3BlbmRDb3VudGVyPTA7dmFyIFM9ZS5lbnRhbmdsZW1lbnRzLF89ZS5leHBpcmF0aW9uVGltZXMsTD1lLmhpZGRlblVwZGF0ZXM7Zm9yKG49aCZ+bjswPG47KXt2YXIgVj0zMS1ubihuKSxaPTE8PFY7U1tWXT0wLF9bVl09LTE7dmFyIHo9TFtWXTtpZih6IT09bnVsbClmb3IoTFtWXT1udWxsLFY9MDtWPHoubGVuZ3RoO1YrKyl7dmFyIEc9eltWXTtHIT09bnVsbCYmKEcubGFuZSY9LTUzNjg3MDkxMyl9biY9flp9bCE9PTAmJkt5KGUsbCwwKSxjIT09MCYmcj09PTAmJmUudGFnIT09MCYmKGUuc3VzcGVuZGVkTGFuZXN8PWMmfihoJn50KSl9ZnVuY3Rpb24gS3koZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LGUuc3VzcGVuZGVkTGFuZXMmPX50O3ZhciBsPTMxLW5uKHQpO2UuZW50YW5nbGVkTGFuZXN8PXQsZS5lbnRhbmdsZW1lbnRzW2xdPWUuZW50YW5nbGVtZW50c1tsXXwxMDczNzQxODI0fG4mMjYxOTMwfWZ1bmN0aW9uIFF5KGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciBsPTMxLW5uKG4pLHI9MTw8bDtyJnR8ZVtsXSZ0JiYoZVtsXXw9dCksbiY9fnJ9fWZ1bmN0aW9uIFp5KGUsdCl7dmFyIG49dCYtdDtyZXR1cm4gbj0obiY0MikhPT0wPzE6VWYobiksKG4mKGUuc3VzcGVuZGVkTGFuZXN8dCkpIT09MD8wOm59ZnVuY3Rpb24gVWYoZSl7c3dpdGNoKGUpe2Nhc2UgMjplPTE7YnJlYWs7Y2FzZSA4OmU9NDticmVhaztjYXNlIDMyOmU9MTY7YnJlYWs7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6ZT0xMjg7YnJlYWs7Y2FzZSAyNjg0MzU0NTY6ZT0xMzQyMTc3Mjg7YnJlYWs7ZGVmYXVsdDplPTB9cmV0dXJuIGV9ZnVuY3Rpb24gSGYoZSl7cmV0dXJuIGUmPS1lLDI8ZT84PGU/KGUmMTM0MjE3NzI3KSE9PTA/MzI6MjY4NDM1NDU2Ojg6Mn1mdW5jdGlvbiBGeSgpe3ZhciBlPWllLnA7cmV0dXJuIGUhPT0wP2U6KGU9d2luZG93LmV2ZW50LGU9PT12b2lkIDA/MzI6bDEoZS50eXBlKSl9ZnVuY3Rpb24gJHkoZSx0KXt2YXIgbj1pZS5wO3RyeXtyZXR1cm4gaWUucD1lLHQoKX1maW5hbGx5e2llLnA9bn19dmFyIG1sPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFJ0PSJfX3JlYWN0RmliZXIkIittbCxYdD0iX19yZWFjdFByb3BzJCIrbWwsZm89Il9fcmVhY3RDb250YWluZXIkIittbCxKeT0iX19yZWFjdEV2ZW50cyQiK21sLGlBPSJfX3JlYWN0TGlzdGVuZXJzJCIrbWwsY0E9Il9fcmVhY3RIYW5kbGVzJCIrbWwsV3k9Il9fcmVhY3RSZXNvdXJjZXMkIittbCxUcj0iX19yZWFjdE1hcmtlciQiK21sLGRjPSJfX3JlYWN0TG9hZCQiK21sO2Z1bmN0aW9uIG1jKGUpe2RlbGV0ZSBlW1J0XSxkZWxldGUgZVtYdF0sZGVsZXRlIGVbaUFdLGRlbGV0ZSBlW2NBXX1mdW5jdGlvbiBFYShlKXt2YXIgdDtpZih0PWVbUnRdKXJldHVybiB0O2Zvcih2YXIgbj1lLnBhcmVudE5vZGU7bjspe2lmKHQ9bltmb118fG5bUnRdKXtpZihuPXQuYWx0ZXJuYXRlLHQuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKGU9VVMoZSk7ZSE9PW51bGw7KXtpZihuPWVbUnRdKXJldHVybiBuO2U9VVMoZSl9cmV0dXJuIHR9ZT1uLG49ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIG1vKGUpe2lmKGU9ZVtSdF18fGVbZm9dKXt2YXIgdD1lLnRhZztpZih0PT09NXx8dD09PTZ8fHQ9PT0xM3x8dD09PTMxfHx0PT09MjZ8fHQ9PT0yN3x8dD09PTMpcmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gd3IoZSl7dmFyIHQ9ZS50YWc7aWYodD09PTV8fHQ9PT0yNnx8dD09PTI3fHx0PT09NilyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IoaSgzMykpfWZ1bmN0aW9uIGhvKGUpe3ZhciB0PWVbV3ldO3JldHVybiB0fHwodD1lW1d5XT17aG9pc3RhYmxlU3R5bGVzOm5ldyBNYXAsaG9pc3RhYmxlU2NyaXB0czpuZXcgTWFwfSksdH1mdW5jdGlvbiBidChlKXtlW1RyXT0hMH1mdW5jdGlvbiBlYihlKXtlW2RjXT12b2lkIDB9dmFyIHRiPW5ldyBTZXQsbmI9e307ZnVuY3Rpb24gUmEoZSx0KXtwbyhlLHQpLHBvKGUrIkNhcHR1cmUiLHQpfWZ1bmN0aW9uIHBvKGUsdCl7Zm9yKG5iW2VdPXQsZT0wO2U8dC5sZW5ndGg7ZSsrKXRiLmFkZCh0W2VdKX12YXIgdUE9UmVnRXhwKCJeWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokIiksbGI9e30sYWI9e307ZnVuY3Rpb24gc0EoZSl7cmV0dXJuIE1mLmNhbGwoYWIsZSk/ITA6TWYuY2FsbChsYixlKT8hMTp1QS50ZXN0KGUpP2FiW2VdPSEwOihsYltlXT0hMCwhMSl9dmFyIEJlPSExO2Z1bmN0aW9uIG9iKCl7dmFyIGU9QmU7cmV0dXJuIEJlPSExLGV9ZnVuY3Rpb24gaGMoZSx0LG4pe2lmKHNBKHQpKWlmKG49PT1udWxsKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7c3dpdGNoKHR5cGVvZiBuKXtjYXNlInVuZGVmaW5lZCI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybjtjYXNlImJvb2xlYW4iOnZhciBsPXQudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO2lmKGwhPT0iZGF0YS0iJiZsIT09ImFyaWEtIil7ZS5yZW1vdmVBdHRyaWJ1dGUodCk7cmV0dXJufX1lLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBwYyhlLHQsbil7aWYobj09PW51bGwpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6Y2FzZSJib29sZWFuIjplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gaGwoZSx0LG4sbCl7aWYobD09PW51bGwpZS5yZW1vdmVBdHRyaWJ1dGUobik7ZWxzZXtzd2l0Y2godHlwZW9mIGwpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6Y2FzZSJib29sZWFuIjplLnJlbW92ZUF0dHJpYnV0ZShuKTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGVOUyh0LG4sbCl9fWZ1bmN0aW9uIGxuKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJiaWdpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuIGU7Y2FzZSJvYmplY3QiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIiJ9fWZ1bmN0aW9uIHJiKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmKHQ9PT0iY2hlY2tib3gifHx0PT09InJhZGlvIil9ZnVuY3Rpb24gZkEoZSx0LG4pe3ZhciBsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsdCk7aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBsPCJ1IiYmdHlwZW9mIGwuZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5zZXQ9PSJmdW5jdGlvbiIpe3ZhciByPWwuZ2V0LGM9bC5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaCl7bj0iIitoLGMuY2FsbCh0aGlzLGgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bC5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LHNldFZhbHVlOmZ1bmN0aW9uKGgpe249IiIraH0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gQmYoZSl7aWYoIWUuX3ZhbHVlVHJhY2tlcil7dmFyIHQ9cmIoZSk/ImNoZWNrZWQiOiJ2YWx1ZSI7ZS5fdmFsdWVUcmFja2VyPWZBKGUsdCwiIitlW3RdKX19ZnVuY3Rpb24gaWIoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZS5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciBuPXQuZ2V0VmFsdWUoKSxsPSIiO3JldHVybiBlJiYobD1yYihlKT9lLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6ZS52YWx1ZSksZT1sLGUhPT1uPyh0LnNldFZhbHVlKGUpLCEwKTohMX12YXIgZEE9L1tcbiJcXF0vZztmdW5jdGlvbiB2bihlKXtyZXR1cm4gZS5yZXBsYWNlKGRBLGZ1bmN0aW9uKHQpe3JldHVybiJcXCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiICJ9KX1mdW5jdGlvbiBJZihlLHQsbixsLHIsYyxoLFMpe2UubmFtZT0iIixoIT1udWxsJiZ0eXBlb2YgaCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGghPSJzeW1ib2wiJiZ0eXBlb2YgaCE9ImJvb2xlYW4iP2UudHlwZT1oOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksdCE9bnVsbD9oPT09Im51bWJlciI/KHQ9PT0wJiZlLnZhbHVlPT09IiJ8fGUudmFsdWUhPXQpJiYoZS52YWx1ZT0iIitsbih0KSk6ZS52YWx1ZSE9PSIiK2xuKHQpJiYoZS52YWx1ZT0iIitsbih0KSk6aCE9PSJzdWJtaXQiJiZoIT09InJlc2V0Inx8ZS5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIiksdCE9bnVsbD9oPT09Im51bWJlciImJmUudmFsdWU9PXQ/UGYoZSxsbihlLnZhbHVlKSk6UGYoZSxsbih0KSk6biE9bnVsbD9QZihlLGxuKG4pKTpsIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKSxyPT1udWxsJiZjIT1udWxsJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIWMpLHIhPW51bGwmJihlLmNoZWNrZWQ9ciYmdHlwZW9mIHIhPSJmdW5jdGlvbiImJnR5cGVvZiByIT0ic3ltYm9sIiksUyE9bnVsbCYmdHlwZW9mIFMhPSJmdW5jdGlvbiImJnR5cGVvZiBTIT0ic3ltYm9sIiYmdHlwZW9mIFMhPSJib29sZWFuIj9lLm5hbWU9IiIrbG4oUyk6ZS5yZW1vdmVBdHRyaWJ1dGUoIm5hbWUiKX1mdW5jdGlvbiBjYihlLHQsbixsLHIsYyxoLFMpe2lmKGMhPW51bGwmJnR5cGVvZiBjIT0iZnVuY3Rpb24iJiZ0eXBlb2YgYyE9InN5bWJvbCImJnR5cGVvZiBjIT0iYm9vbGVhbiImJihlLnR5cGU9YyksdCE9bnVsbHx8biE9bnVsbCl7aWYoIShjIT09InN1Ym1pdCImJmMhPT0icmVzZXQifHx0IT1udWxsKSl7QmYoZSk7cmV0dXJufW49biE9bnVsbD8iIitsbihuKToiIix0PXQhPW51bGw/IiIrbG4odCk6bixTfHx0PT09ZS52YWx1ZXx8KGUudmFsdWU9dCksZS5kZWZhdWx0VmFsdWU9dH1sPWw/P3IsbD10eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiJiYhIWwsZS5jaGVja2VkPVM/ZS5jaGVja2VkOiEhbCxlLmRlZmF1bHRDaGVja2VkPSEhbCxoIT1udWxsJiZ0eXBlb2YgaCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGghPSJzeW1ib2wiJiZ0eXBlb2YgaCE9ImJvb2xlYW4iJiYoZS5uYW1lPWgpLEJmKGUpfWZ1bmN0aW9uIFBmKGUsdCl7ZS5kZWZhdWx0VmFsdWUhPT0iIit0JiYoZS5kZWZhdWx0VmFsdWU9IiIrdCl9ZnVuY3Rpb24gdm8oZSx0LG4sbCl7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0WyIkIituW3JdXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXI9dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PXImJihlW25dLnNlbGVjdGVkPXIpLHImJmwmJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitsbihuKSx0PW51bGwscj0wO3I8ZS5sZW5ndGg7cisrKXtpZihlW3JdLnZhbHVlPT09bil7ZVtyXS5zZWxlY3RlZD0hMCxsJiYoZVtyXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtyXS5kaXNhYmxlZHx8KHQ9ZVtyXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gdWIoZSx0LG4pe2lmKHQhPW51bGwmJih0PSIiK2xuKHQpLHQhPT1lLnZhbHVlJiYoZS52YWx1ZT10KSxuPT1udWxsKSl7ZS5kZWZhdWx0VmFsdWUhPT10JiYoZS5kZWZhdWx0VmFsdWU9dCk7cmV0dXJufWUuZGVmYXVsdFZhbHVlPW4hPW51bGw/IiIrbG4obik6IiJ9ZnVuY3Rpb24gc2IoZSx0LG4sbCl7aWYodD09bnVsbCl7aWYobCE9bnVsbCl7aWYobiE9bnVsbCl0aHJvdyBFcnJvcihpKDkyKSk7aWYobGUobCkpe2lmKDE8bC5sZW5ndGgpdGhyb3cgRXJyb3IoaSg5MykpO2w9bFswXX1uPWx9bj09bnVsbCYmKG49IiIpLHQ9bn1uPWxuKHQpLGUuZGVmYXVsdFZhbHVlPW4sbD1lLnRleHRDb250ZW50LGw9PT1uJiZsIT09IiImJmwhPT1udWxsJiYoZS52YWx1ZT1sKSxCZihlKX1mdW5jdGlvbiBnbyhlLHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJm4ubm9kZVR5cGU9PT0zKXtuLm5vZGVWYWx1ZT10O3JldHVybn19ZS50ZXh0Q29udGVudD10fXZhciBtQT1uZXcgU2V0KCJhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXAiLnNwbGl0KCIgIikpO2Z1bmN0aW9uIGZiKGUsdCxuKXt2YXIgbD10LmluZGV4T2YoIi0tIik9PT0wO249PW51bGx8fHR5cGVvZiBuPT0iYm9vbGVhbiJ8fG49PT0iIj9sP2Uuc2V0UHJvcGVydHkodCwiIik6dD09PSJmbG9hdCI/ZS5jc3NGbG9hdD0iIjplW3RdPSIiOmw/ZS5zZXRQcm9wZXJ0eSh0LG4pOnR5cGVvZiBuIT0ibnVtYmVyInx8bj09PTB8fG1BLmhhcyh0KT90PT09ImZsb2F0Ij9lLmNzc0Zsb2F0PW46ZVt0XT0oIiIrbikudHJpbSgpOmVbdF09bisicHgifWZ1bmN0aW9uIGRiKGUsdCxuKXtpZih0IT1udWxsJiZ0eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgRXJyb3IoaSg2MikpO2lmKGU9ZS5zdHlsZSxuIT1udWxsKXtmb3IodmFyIGwgaW4gbikhbi5oYXNPd25Qcm9wZXJ0eShsKXx8dCE9bnVsbCYmdC5oYXNPd25Qcm9wZXJ0eShsKXx8KGwuaW5kZXhPZigiLS0iKT09PTA/ZS5zZXRQcm9wZXJ0eShsLCIiKTpsPT09ImZsb2F0Ij9lLmNzc0Zsb2F0PSIiOmVbbF09IiIsQmU9ITApO2Zvcih2YXIgciBpbiB0KWw9dFtyXSx0Lmhhc093blByb3BlcnR5KHIpJiZuW3JdIT09bCYmKGZiKGUscixsKSxCZT0hMCl9ZWxzZSBmb3IodmFyIGMgaW4gdCl0Lmhhc093blByb3BlcnR5KGMpJiZmYihlLGMsdFtjXSl9ZnVuY3Rpb24gR2YoZSl7aWYoZS5pbmRleE9mKCItIik9PT0tMSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgaEE9bmV3IE1hcChbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImh0bWxGb3IiLCJmb3IiXSxbImh0dHBFcXVpdiIsImh0dHAtZXF1aXYiXSxbImNyb3NzT3JpZ2luIiwiY3Jvc3NvcmlnaW4iXSxbImFjY2VudEhlaWdodCIsImFjY2VudC1oZWlnaHQiXSxbImFsaWdubWVudEJhc2VsaW5lIiwiYWxpZ25tZW50LWJhc2VsaW5lIl0sWyJhcmFiaWNGb3JtIiwiYXJhYmljLWZvcm0iXSxbImJhc2VsaW5lU2hpZnQiLCJiYXNlbGluZS1zaGlmdCJdLFsiY2FwSGVpZ2h0IiwiY2FwLWhlaWdodCJdLFsiY2xpcFBhdGgiLCJjbGlwLXBhdGgiXSxbImNsaXBSdWxlIiwiY2xpcC1ydWxlIl0sWyJjb2xvckludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uIl0sWyJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIl0sWyJjb2xvclByb2ZpbGUiLCJjb2xvci1wcm9maWxlIl0sWyJjb2xvclJlbmRlcmluZyIsImNvbG9yLXJlbmRlcmluZyJdLFsiZG9taW5hbnRCYXNlbGluZSIsImRvbWluYW50LWJhc2VsaW5lIl0sWyJlbmFibGVCYWNrZ3JvdW5kIiwiZW5hYmxlLWJhY2tncm91bmQiXSxbImZpbGxPcGFjaXR5IiwiZmlsbC1vcGFjaXR5Il0sWyJmaWxsUnVsZSIsImZpbGwtcnVsZSJdLFsiZmxvb2RDb2xvciIsImZsb29kLWNvbG9yIl0sWyJmbG9vZE9wYWNpdHkiLCJmbG9vZC1vcGFjaXR5Il0sWyJmb250RmFtaWx5IiwiZm9udC1mYW1pbHkiXSxbImZvbnRTaXplIiwiZm9udC1zaXplIl0sWyJmb250U2l6ZUFkanVzdCIsImZvbnQtc2l6ZS1hZGp1c3QiXSxbImZvbnRTdHJldGNoIiwiZm9udC1zdHJldGNoIl0sWyJmb250U3R5bGUiLCJmb250LXN0eWxlIl0sWyJmb250VmFyaWFudCIsImZvbnQtdmFyaWFudCJdLFsiZm9udFdlaWdodCIsImZvbnQtd2VpZ2h0Il0sWyJnbHlwaE5hbWUiLCJnbHlwaC1uYW1lIl0sWyJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCIsImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiXSxbImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCIsImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIl0sWyJob3JpekFkdlgiLCJob3Jpei1hZHYteCJdLFsiaG9yaXpPcmlnaW5YIiwiaG9yaXotb3JpZ2luLXgiXSxbImltYWdlUmVuZGVyaW5nIiwiaW1hZ2UtcmVuZGVyaW5nIl0sWyJsZXR0ZXJTcGFjaW5nIiwibGV0dGVyLXNwYWNpbmciXSxbImxpZ2h0aW5nQ29sb3IiLCJsaWdodGluZy1jb2xvciJdLFsibWFya2VyRW5kIiwibWFya2VyLWVuZCJdLFsibWFya2VyTWlkIiwibWFya2VyLW1pZCJdLFsibWFya2VyU3RhcnQiLCJtYXJrZXItc3RhcnQiXSxbIm1hc2tUeXBlIiwibWFzay10eXBlIl0sWyJvdmVybGluZVBvc2l0aW9uIiwib3ZlcmxpbmUtcG9zaXRpb24iXSxbIm92ZXJsaW5lVGhpY2tuZXNzIiwib3ZlcmxpbmUtdGhpY2tuZXNzIl0sWyJwYWludE9yZGVyIiwicGFpbnQtb3JkZXIiXSxbInBhbm9zZS0xIiwicGFub3NlLTEiXSxbInBvaW50ZXJFdmVudHMiLCJwb2ludGVyLWV2ZW50cyJdLFsicmVuZGVyaW5nSW50ZW50IiwicmVuZGVyaW5nLWludGVudCJdLFsic2hhcGVSZW5kZXJpbmciLCJzaGFwZS1yZW5kZXJpbmciXSxbInN0b3BDb2xvciIsInN0b3AtY29sb3IiXSxbInN0b3BPcGFjaXR5Iiwic3RvcC1vcGFjaXR5Il0sWyJzdHJpa2V0aHJvdWdoUG9zaXRpb24iLCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIl0sWyJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzIiwic3RyaWtldGhyb3VnaC10aGlja25lc3MiXSxbInN0cm9rZURhc2hhcnJheSIsInN0cm9rZS1kYXNoYXJyYXkiXSxbInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2UtZGFzaG9mZnNldCJdLFsic3Ryb2tlTGluZWNhcCIsInN0cm9rZS1saW5lY2FwIl0sWyJzdHJva2VMaW5lam9pbiIsInN0cm9rZS1saW5lam9pbiJdLFsic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZS1taXRlcmxpbWl0Il0sWyJzdHJva2VPcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiXSxbInN0cm9rZVdpZHRoIiwic3Ryb2tlLXdpZHRoIl0sWyJ0ZXh0QW5jaG9yIiwidGV4dC1hbmNob3IiXSxbInRleHREZWNvcmF0aW9uIiwidGV4dC1kZWNvcmF0aW9uIl0sWyJ0ZXh0UmVuZGVyaW5nIiwidGV4dC1yZW5kZXJpbmciXSxbInRyYW5zZm9ybU9yaWdpbiIsInRyYW5zZm9ybS1vcmlnaW4iXSxbInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lLXBvc2l0aW9uIl0sWyJ1bmRlcmxpbmVUaGlja25lc3MiLCJ1bmRlcmxpbmUtdGhpY2tuZXNzIl0sWyJ1bmljb2RlQmlkaSIsInVuaWNvZGUtYmlkaSJdLFsidW5pY29kZVJhbmdlIiwidW5pY29kZS1yYW5nZSJdLFsidW5pdHNQZXJFbSIsInVuaXRzLXBlci1lbSJdLFsidkFscGhhYmV0aWMiLCJ2LWFscGhhYmV0aWMiXSxbInZIYW5naW5nIiwidi1oYW5naW5nIl0sWyJ2SWRlb2dyYXBoaWMiLCJ2LWlkZW9ncmFwaGljIl0sWyJ2TWF0aGVtYXRpY2FsIiwidi1tYXRoZW1hdGljYWwiXSxbInZlY3RvckVmZmVjdCIsInZlY3Rvci1lZmZlY3QiXSxbInZlcnRBZHZZIiwidmVydC1hZHYteSJdLFsidmVydE9yaWdpblgiLCJ2ZXJ0LW9yaWdpbi14Il0sWyJ2ZXJ0T3JpZ2luWSIsInZlcnQtb3JpZ2luLXkiXSxbIndvcmRTcGFjaW5nIiwid29yZC1zcGFjaW5nIl0sWyJ3cml0aW5nTW9kZSIsIndyaXRpbmctbW9kZSJdLFsieG1sbnNYbGluayIsInhtbG5zOnhsaW5rIl0sWyJ4SGVpZ2h0IiwieC1oZWlnaHQiXV0pLHBBPS9eW1x1MDAwMC1cdTAwMUYgXSpqW1xyXG5cdF0qYVtcclxuXHRdKnZbXHJcblx0XSphW1xyXG5cdF0qc1tcclxuXHRdKmNbXHJcblx0XSpyW1xyXG5cdF0qaVtcclxuXHRdKnBbXHJcblx0XSp0W1xyXG5cdF0qOi9pO2Z1bmN0aW9uIHZjKGUpe3JldHVybiBwQS50ZXN0KCIiK2UpPyJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLicpIjplfWZ1bmN0aW9uIEduKCl7fXZhciBWZj1udWxsO2Z1bmN0aW9uIFlmKGUpe3JldHVybiBlPWUudGFyZ2V0fHxlLnNyY0VsZW1lbnR8fHdpbmRvdyxlLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSxlLm5vZGVUeXBlPT09Mz9lLnBhcmVudE5vZGU6ZX12YXIgeW89bnVsbCxibz1udWxsO2Z1bmN0aW9uIG1iKGUpe3ZhciB0PW1vKGUpO2lmKHQmJihlPXQuc3RhdGVOb2RlKSl7dmFyIG49ZVtYdF18fG51bGw7ZTpzd2l0Y2goZT10LnN0YXRlTm9kZSx0LnR5cGUpe2Nhc2UiaW5wdXQiOmlmKElmKGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmNoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZCxuLnR5cGUsbi5uYW1lKSx0PW4ubmFtZSxuLnR5cGU9PT0icmFkaW8iJiZ0IT1udWxsKXtmb3Iobj1lO24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPSInK3ZuKCIiK3QpKyciXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgbD1uW3RdO2lmKGwhPT1lJiZsLmZvcm09PT1lLmZvcm0pe3ZhciByPWxbWHRdfHxudWxsO2lmKCFyKXRocm93IEVycm9yKGkoOTApKTtJZihsLHIudmFsdWUsci5kZWZhdWx0VmFsdWUsci5kZWZhdWx0VmFsdWUsci5jaGVja2VkLHIuZGVmYXVsdENoZWNrZWQsci50eXBlLHIubmFtZSl9fWZvcih0PTA7dDxuLmxlbmd0aDt0KyspbD1uW3RdLGwuZm9ybT09PWUuZm9ybSYmaWIobCl9YnJlYWsgZTtjYXNlInRleHRhcmVhIjp1YihlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUpO2JyZWFrIGU7Y2FzZSJzZWxlY3QiOnQ9bi52YWx1ZSx0IT1udWxsJiZ2byhlLCEhbi5tdWx0aXBsZSx0LCExKX19fXZhciBxZj0hMTtmdW5jdGlvbiBoYihlLHQsbil7aWYocWYpcmV0dXJuIGUodCxuKTtxZj0hMDt0cnl7dmFyIGw9ZSh0KTtyZXR1cm4gbH1maW5hbGx5e2lmKHFmPSExLCh5byE9PW51bGx8fGJvIT09bnVsbCkmJih2dSgpLHlvJiYodD15byxlPWJvLGJvPXlvPW51bGwsbWIodCksZSkpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspbWIoZVt0XSl9fWZ1bmN0aW9uIEVyKGUsdCl7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobj09PW51bGwpcmV0dXJuIG51bGw7dmFyIGw9bltYdF18fG51bGw7aWYobD09PW51bGwpcmV0dXJuIG51bGw7bj1sW3RdO2U6c3dpdGNoKHQpe2Nhc2Uib25DbGljayI6Y2FzZSJvbkNsaWNrQ2FwdHVyZSI6Y2FzZSJvbkRvdWJsZUNsaWNrIjpjYXNlIm9uRG91YmxlQ2xpY2tDYXB0dXJlIjpjYXNlIm9uTW91c2VEb3duIjpjYXNlIm9uTW91c2VEb3duQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlTW92ZSI6Y2FzZSJvbk1vdXNlTW92ZUNhcHR1cmUiOmNhc2Uib25Nb3VzZVVwIjpjYXNlIm9uTW91c2VVcENhcHR1cmUiOmNhc2Uib25Nb3VzZUVudGVyIjoobD0hbC5kaXNhYmxlZCl8fChlPWUudHlwZSxsPSEoZT09PSJidXR0b24ifHxlPT09ImlucHV0Inx8ZT09PSJzZWxlY3QifHxlPT09InRleHRhcmVhIikpLGU9IWw7YnJlYWsgZTtkZWZhdWx0OmU9ITF9aWYoZSlyZXR1cm4gbnVsbDtpZihuJiZ0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihpKDIzMSx0LHR5cGVvZiBuKSk7cmV0dXJuIG59dmFyIHBsPSEodHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ+InUiKSxYZj0hMTtpZihwbCl0cnl7dmFyIFJyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShSciwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1hmPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixScixSciksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLFJyLFJyKX1jYXRjaHtYZj0hMX12YXIgUGw9bnVsbCxLZj1udWxsLGdjPW51bGw7ZnVuY3Rpb24gcGIoKXtpZihnYylyZXR1cm4gZ2M7dmFyIGUsdD1LZixuPXQubGVuZ3RoLGwscj0idmFsdWUiaW4gUGw/UGwudmFsdWU6UGwudGV4dENvbnRlbnQsYz1yLmxlbmd0aDtmb3IoZT0wO2U8biYmdFtlXT09PXJbZV07ZSsrKTt2YXIgaD1uLWU7Zm9yKGw9MTtsPD1oJiZ0W24tbF09PT1yW2MtbF07bCsrKTtyZXR1cm4gZ2M9ci5zbGljZShlLDE8bD8xLWw6dm9pZCAwKX1mdW5jdGlvbiB5YyhlKXt2YXIgdD1lLmtleUNvZGU7cmV0dXJuImNoYXJDb2RlImluIGU/KGU9ZS5jaGFyQ29kZSxlPT09MCYmdD09PTEzJiYoZT0xMykpOmU9dCxlPT09MTAmJihlPTEzKSwzMjw9ZXx8ZT09PTEzP2U6MH1mdW5jdGlvbiBiYygpe3JldHVybiEwfWZ1bmN0aW9uIHZiKCl7cmV0dXJuITF9ZnVuY3Rpb24gTHQoZSl7ZnVuY3Rpb24gdChuLGwscixjLGgpe3RoaXMuX3JlYWN0TmFtZT1uLHRoaXMuX3RhcmdldEluc3Q9cix0aGlzLnR5cGU9bCx0aGlzLm5hdGl2ZUV2ZW50PWMsdGhpcy50YXJnZXQ9aCx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIFMgaW4gZSllLmhhc093blByb3BlcnR5KFMpJiYobj1lW1NdLHRoaXNbU109bj9uKGMpOmNbU10pO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0oYy5kZWZhdWx0UHJldmVudGVkIT1udWxsP2MuZGVmYXVsdFByZXZlbnRlZDpjLnJldHVyblZhbHVlPT09ITEpP2JjOnZiLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dmIsdGhpc31yZXR1cm4gVSh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWJjKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWJjKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OmJjfSksdH12YXIgR2w9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0seGM9THQoR2wpLF9yPVUoe30sR2wse3ZpZXc6MCxkZXRhaWw6MH0pLHZBPUx0KF9yKSxRZixaZixPcixTYz1VKHt9LF9yLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOiRmLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbGF0ZWRUYXJnZXQ9PT12b2lkIDA/ZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50OmUucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFgiaW4gZT9lLm1vdmVtZW50WDooZSE9PU9yJiYoT3ImJmUudHlwZT09PSJtb3VzZW1vdmUiPyhRZj1lLnNjcmVlblgtT3Iuc2NyZWVuWCxaZj1lLnNjcmVlblktT3Iuc2NyZWVuWSk6WmY9UWY9MCxPcj1lKSxRZil9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtyZXR1cm4ibW92ZW1lbnRZImluIGU/ZS5tb3ZlbWVudFk6WmZ9fSksZ2I9THQoU2MpLGdBPVUoe30sU2Mse2RhdGFUcmFuc2ZlcjowfSkseUE9THQoZ0EpLGJBPVUoe30sX3Ise3JlbGF0ZWRUYXJnZXQ6MH0pLEZmPUx0KGJBKSx4QT1VKHt9LEdsLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxTQT1MdCh4QSksQ0E9VSh7fSxHbCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxUQT1MdChDQSksd0E9VSh7fSxHbCx7ZGF0YTowfSkseWI9THQod0EpLEVBPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSxSQT17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoiQWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9LF9BPXtBbHQ6ImFsdEtleSIsQ29udHJvbDoiY3RybEtleSIsTWV0YToibWV0YUtleSIsU2hpZnQ6InNoaWZ0S2V5In07ZnVuY3Rpb24gT0EoZSl7dmFyIHQ9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gdC5nZXRNb2RpZmllclN0YXRlP3QuZ2V0TW9kaWZpZXJTdGF0ZShlKTooZT1fQVtlXSk/ISF0W2VdOiExfWZ1bmN0aW9uICRmKCl7cmV0dXJuIE9BfXZhciBBQT1VKHt9LF9yLHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciB0PUVBW2Uua2V5XXx8ZS5rZXk7aWYodCE9PSJVbmlkZW50aWZpZWQiKXJldHVybiB0fXJldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiPyhlPXljKGUpLGU9PT0xMz8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9SQVtlLmtleUNvZGVdfHwiVW5pZGVudGlmaWVkIjoiIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6JGYsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/eWMoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj95YyhlKTplLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9fSksTkE9THQoQUEpLERBPVUoe30sU2Mse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksYmI9THQoREEpLGpBPVUoe30sR2wse3N1Ym1pdHRlcjowfSksTUE9THQoakEpLHpBPVUoe30sX3Ise3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTokZn0pLGtBPUx0KHpBKSxMQT1VKHt9LEdsLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLFVBPUx0KExBKSxIQT1VKHt9LFNjLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksQkE9THQoSEEpLElBPVUoe30sR2wse25ld1N0YXRlOjAsb2xkU3RhdGU6MCxzb3VyY2U6MH0pLFBBPUx0KElBKSxHQT1bOSwxMywyNywzMl0sSmY9cGwmJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyxBcj1udWxsO3BsJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiYoQXI9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgVkE9cGwmJiJUZXh0RXZlbnQiaW4gd2luZG93JiYhQXIseGI9cGwmJighSmZ8fEFyJiY4PEFyJiYxMT49QXIpLFNiPSIgIixDYj0hMTtmdW5jdGlvbiBUYihlLHQpe3N3aXRjaChlKXtjYXNlImtleXVwIjpyZXR1cm4gR0EuaW5kZXhPZih0LmtleUNvZGUpIT09LTE7Y2FzZSJrZXlkb3duIjpyZXR1cm4gdC5rZXlDb2RlIT09MjI5O2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImZvY3Vzb3V0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB3YihlKXtyZXR1cm4gZT1lLmRldGFpbCx0eXBlb2YgZT09Im9iamVjdCImJiJkYXRhImluIGU/ZS5kYXRhOm51bGx9dmFyIHhvPSExO2Z1bmN0aW9uIFlBKGUsdCl7c3dpdGNoKGUpe2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiB3Yih0KTtjYXNlImtleXByZXNzIjpyZXR1cm4gdC53aGljaCE9PTMyP251bGw6KENiPSEwLFNiKTtjYXNlInRleHRJbnB1dCI6cmV0dXJuIGU9dC5kYXRhLGU9PT1TYiYmQ2I/bnVsbDplO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHFBKGUsdCl7aWYoeG8pcmV0dXJuIGU9PT0iY29tcG9zaXRpb25lbmQifHwhSmYmJlRiKGUsdCk/KGU9cGIoKSxnYz1LZj1QbD1udWxsLHhvPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2UicGFzdGUiOnJldHVybiBudWxsO2Nhc2Uia2V5cHJlc3MiOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiB4YiYmdC5sb2NhbGUhPT0ia28iP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBYQT17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gRWIoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09ImlucHV0Ij8hIVhBW2UudHlwZV06dD09PSJ0ZXh0YXJlYSJ9ZnVuY3Rpb24gUmIoZSx0LG4sbCl7eW8/Ym8/Ym8ucHVzaChsKTpibz1bbF06eW89bCx0PUN1KHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IHhjKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLGwpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgTnI9bnVsbCxEcj1udWxsO2Z1bmN0aW9uIEtBKGUpe21TKGUsMCl9ZnVuY3Rpb24gQ2MoZSl7dmFyIHQ9d3IoZSk7aWYoaWIodCkpcmV0dXJuIGV9ZnVuY3Rpb24gX2IoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIE9iPSExO2lmKHBsKXt2YXIgV2Y7aWYocGwpe3ZhciBlZD0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighZWQpe3ZhciBBYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtBYi5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksZWQ9dHlwZW9mIEFiLm9uaW5wdXQ9PSJmdW5jdGlvbiJ9V2Y9ZWR9ZWxzZSBXZj0hMTtPYj1XZiYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBOYigpe05yJiYoTnIuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLERiKSxEcj1Ocj1udWxsKX1mdW5jdGlvbiBEYihlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJkNjKERyKSl7dmFyIHQ9W107UmIodCxEcixlLFlmKGUpKSxoYihLQSx0KX19ZnVuY3Rpb24gUUEoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KE5iKCksTnI9dCxEcj1uLE5yLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixEYikpOmU9PT0iZm9jdXNvdXQiJiZOYigpfWZ1bmN0aW9uIFpBKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIENjKERyKX1mdW5jdGlvbiBGQShlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiBDYyh0KX1mdW5jdGlvbiAkQShlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIENjKHQpfWZ1bmN0aW9uIEpBKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgYW49dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6SkE7ZnVuY3Rpb24ganIoZSx0KXtpZihhbihlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbD1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciByPW5bbF07aWYoIU1mLmNhbGwodCxyKXx8IWFuKGVbcl0sdFtyXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdGQoZSl7aWYoZT1lfHwodHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudDp2b2lkIDApLHR5cGVvZiBlPiJ1IilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoe3JldHVybiBlLmJvZHl9fWZ1bmN0aW9uIGpiKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBNYihlLHQpe3ZhciBuPWpiKGUpO2U9MDtmb3IodmFyIGw7bjspe2lmKG4ubm9kZVR5cGU9PT0zKXtpZihsPWUrbi50ZXh0Q29udGVudC5sZW5ndGgsZTw9dCYmbD49dClyZXR1cm57bm9kZTpuLG9mZnNldDp0LWV9O2U9bH1lOntmb3IoO247KXtpZihuLm5leHRTaWJsaW5nKXtuPW4ubmV4dFNpYmxpbmc7YnJlYWsgZX1uPW4ucGFyZW50Tm9kZX1uPXZvaWQgMH1uPWpiKG4pfX1mdW5jdGlvbiB6YihlLHQpe3JldHVybiBlJiZ0P2U9PT10PyEwOmUmJmUubm9kZVR5cGU9PT0zPyExOnQmJnQubm9kZVR5cGU9PT0zP3piKGUsdC5wYXJlbnROb2RlKToiY29udGFpbnMiaW4gZT9lLmNvbnRhaW5zKHQpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSYxNik6ITE6ITF9ZnVuY3Rpb24ga2IoZSl7ZT1lIT1udWxsJiZlLm93bmVyRG9jdW1lbnQhPW51bGwmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyE9bnVsbD9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc6d2luZG93O2Zvcih2YXIgdD10ZChlLmRvY3VtZW50KTt0IGluc3RhbmNlb2YgZS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgbj10eXBlb2YgdC5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWY9PSJzdHJpbmcifWNhdGNoe249ITF9aWYobillPXQuY29udGVudFdpbmRvdztlbHNlIGJyZWFrO3Q9dGQoZS5kb2N1bWVudCl9cmV0dXJuIHR9ZnVuY3Rpb24gbmQoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0JiYodD09PSJpbnB1dCImJihlLnR5cGU9PT0idGV4dCJ8fGUudHlwZT09PSJzZWFyY2gifHxlLnR5cGU9PT0idGVsInx8ZS50eXBlPT09InVybCJ8fGUudHlwZT09PSJwYXNzd29yZCIpfHx0PT09InRleHRhcmVhInx8ZS5jb250ZW50RWRpdGFibGU9PT0idHJ1ZSIpfXZhciBXQT1wbCYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxTbz1udWxsLGxkPW51bGwsTXI9bnVsbCxhZD0hMTtmdW5jdGlvbiBMYihlLHQsbil7dmFyIGw9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7YWR8fFNvPT1udWxsfHxTbyE9PXRkKGwpfHwobD1Tbywic2VsZWN0aW9uU3RhcnQiaW4gbCYmbmQobCk/bD17c3RhcnQ6bC5zZWxlY3Rpb25TdGFydCxlbmQ6bC5zZWxlY3Rpb25FbmR9OihsPShsLm93bmVyRG9jdW1lbnQmJmwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxsPXthbmNob3JOb2RlOmwuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6bC5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOmwuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OmwuZm9jdXNPZmZzZXR9KSxNciYmanIoTXIsbCl8fChNcj1sLGw9Q3UobGQsIm9uU2VsZWN0IiksMDxsLmxlbmd0aCYmKHQ9bmV3IHhjKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6bH0pLHQudGFyZ2V0PVNvKSkpfWZ1bmN0aW9uIF9hKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBDbz17YW5pbWF0aW9uZW5kOl9hKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246X2EoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0Ol9hKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25ydW46X2EoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uUnVuIiksdHJhbnNpdGlvbnN0YXJ0Ol9hKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvblN0YXJ0IiksdHJhbnNpdGlvbmNhbmNlbDpfYSgiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25DYW5jZWwiKSx0cmFuc2l0aW9uZW5kOl9hKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxvZD17fSxVYj17fTtwbCYmKFViPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmltYXRpb25FdmVudCJpbiB3aW5kb3d8fChkZWxldGUgQ28uYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgQ28uYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgQ28uYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIENvLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gT2EoZSl7aWYob2RbZV0pcmV0dXJuIG9kW2VdO2lmKCFDb1tlXSlyZXR1cm4gZTt2YXIgdD1Db1tlXSxuO2ZvcihuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiBVYilyZXR1cm4gb2RbZV09dFtuXTtyZXR1cm4gZX12YXIgSGI9T2EoImFuaW1hdGlvbmVuZCIpLEJiPU9hKCJhbmltYXRpb25pdGVyYXRpb24iKSxJYj1PYSgiYW5pbWF0aW9uc3RhcnQiKSxlTj1PYSgidHJhbnNpdGlvbnJ1biIpLHROPU9hKCJ0cmFuc2l0aW9uc3RhcnQiKSxuTj1PYSgidHJhbnNpdGlvbmNhbmNlbCIpLFBiPU9hKCJ0cmFuc2l0aW9uZW5kIiksR2I9bmV3IE1hcCxyZD0iYWJvcnQgYXV4Q2xpY2sgYmVmb3JlVG9nZ2xlIGNhbmNlbCBjYW5QbGF5IGNhblBsYXlUaHJvdWdoIGNsaWNrIGNsb3NlIGNvbnRleHRNZW51IGNvcHkgY3V0IGRyYWcgZHJhZ0VuZCBkcmFnRW50ZXIgZHJhZ0V4aXQgZHJhZ0xlYXZlIGRyYWdPdmVyIGRyYWdTdGFydCBkcm9wIGR1cmF0aW9uQ2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGZ1bGxzY3JlZW5DaGFuZ2UgZnVsbHNjcmVlbkVycm9yIGdvdFBvaW50ZXJDYXB0dXJlIGlucHV0IGludmFsaWQga2V5RG93biBrZXlQcmVzcyBrZXlVcCBsb2FkIGxvYWRlZERhdGEgbG9hZGVkTWV0YWRhdGEgbG9hZFN0YXJ0IGxvc3RQb2ludGVyQ2FwdHVyZSBtb3VzZURvd24gbW91c2VNb3ZlIG1vdXNlT3V0IG1vdXNlT3ZlciBtb3VzZVVwIHBhc3RlIHBhdXNlIHBsYXkgcGxheWluZyBwb2ludGVyQ2FuY2VsIHBvaW50ZXJEb3duIHBvaW50ZXJNb3ZlIHBvaW50ZXJPdXQgcG9pbnRlck92ZXIgcG9pbnRlclVwIHByb2dyZXNzIHJhdGVDaGFuZ2UgcmVzZXQgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VibWl0IHN1c3BlbmQgdGltZVVwZGF0ZSB0b3VjaENhbmNlbCB0b3VjaEVuZCB0b3VjaFN0YXJ0IHZvbHVtZUNoYW5nZSBzY3JvbGwgdG9nZ2xlIHRvdWNoTW92ZSB3YWl0aW5nIHdoZWVsIi5zcGxpdCgiICIpO3JkLnB1c2goInNjcm9sbEVuZCIpO2Z1bmN0aW9uIEFuKGUsdCl7R2Iuc2V0KGUsdCksUmEodCxbZV0pfXZhciBsTj0wO2Z1bmN0aW9uIHZsKGUsdCl7aWYoZS5uYW1lIT1udWxsJiZlLm5hbWUhPT0iYXV0byIpcmV0dXJuIGUubmFtZTtpZih0LmF1dG9OYW1lIT09bnVsbClyZXR1cm4gdC5hdXRvTmFtZTtlPU1uLmlkZW50aWZpZXJQcmVmaXg7dmFyIG49bE4rKztyZXR1cm4gZT0iXyIrZSsidF8iK24udG9TdHJpbmcoMzIpKyJfIix0LmF1dG9OYW1lPWV9ZnVuY3Rpb24gVmIoZSl7aWYoZT09bnVsbHx8dHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3ZhciB0PW51bGwsbj1HbztpZihuIT09bnVsbClmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIHI9ZVtuW2xdXTtpZihyIT1udWxsKXtpZihyPT09Im5vbmUiKXJldHVybiJub25lIjt0PXQ9PW51bGw/cjp0KygiICIrcil9fXJldHVybiB0Pz9lLmRlZmF1bHR9ZnVuY3Rpb24gZ2woZSx0KXtyZXR1cm4gZT1WYihlKSx0PVZiKHQpLHQ9PW51bGw/ZT09PSJhdXRvIj9udWxsOmU6dD09PSJhdXRvIj9udWxsOnR9dmFyIFRjPXR5cGVvZiByZXBvcnRFcnJvcj09ImZ1bmN0aW9uIj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZih0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50PT0iZnVuY3Rpb24iKXt2YXIgdD1uZXcgd2luZG93LkVycm9yRXZlbnQoImVycm9yIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6dHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmdHlwZW9mIGUubWVzc2FnZT09InN0cmluZyI/U3RyaW5nKGUubWVzc2FnZSk6U3RyaW5nKGUpLGVycm9yOmV9KTtpZighd2luZG93LmRpc3BhdGNoRXZlbnQodCkpcmV0dXJufWVsc2UgaWYodHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy5lbWl0PT0iZnVuY3Rpb24iKXtwcm9jZXNzLmVtaXQoInVuY2F1Z2h0RXhjZXB0aW9uIixlKTtyZXR1cm59Y29uc29sZS5lcnJvcihlKX0sZ249W10sVG89MCxpZD0wO2Z1bmN0aW9uIHdjKCl7Zm9yKHZhciBlPVRvLHQ9aWQ9VG89MDt0PGU7KXt2YXIgbj1nblt0XTtnblt0KytdPW51bGw7dmFyIGw9Z25bdF07Z25bdCsrXT1udWxsO3ZhciByPWduW3RdO2duW3QrK109bnVsbDt2YXIgYz1nblt0XTtpZihnblt0KytdPW51bGwsbCE9PW51bGwmJnIhPT1udWxsKXt2YXIgaD1sLnBlbmRpbmc7aD09PW51bGw/ci5uZXh0PXI6KHIubmV4dD1oLm5leHQsaC5uZXh0PXIpLGwucGVuZGluZz1yfWMhPT0wJiZZYihuLHIsYyl9fWZ1bmN0aW9uIEVjKGUsdCxuLGwpe2duW1RvKytdPWUsZ25bVG8rK109dCxnbltUbysrXT1uLGduW1RvKytdPWwsaWR8PWwsZS5sYW5lc3w9bCxlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZS5sYW5lc3w9bCl9ZnVuY3Rpb24gY2QoZSx0LG4sbCl7cmV0dXJuIEVjKGUsdCxuLGwpLFJjKGUpfWZ1bmN0aW9uIEFhKGUsdCl7cmV0dXJuIEVjKGUsbnVsbCxudWxsLHQpLFJjKGUpfWZ1bmN0aW9uIFliKGUsdCxuKXtlLmxhbmVzfD1uO3ZhciBsPWUuYWx0ZXJuYXRlO2whPT1udWxsJiYobC5sYW5lc3w9bik7Zm9yKHZhciByPSExLGM9ZS5yZXR1cm47YyE9PW51bGw7KWMuY2hpbGRMYW5lc3w9bixsPWMuYWx0ZXJuYXRlLGwhPT1udWxsJiYobC5jaGlsZExhbmVzfD1uKSxjLnRhZz09PTIyJiYoZT1jLnN0YXRlTm9kZSxlPT09bnVsbHx8ZS5fdmlzaWJpbGl0eSYxfHwocj0hMCkpLGU9YyxjPWMucmV0dXJuO3JldHVybiBlLnRhZz09PTM/KGM9ZS5zdGF0ZU5vZGUsciYmdCE9PW51bGwmJihyPTMxLW5uKG4pLGU9Yy5oaWRkZW5VcGRhdGVzLGw9ZVtyXSxsPT09bnVsbD9lW3JdPVt0XTpsLnB1c2godCksdC5sYW5lPW58NTM2ODcwOTEyKSxjKTpudWxsfWZ1bmN0aW9uIFJjKGUpe2lmKDUwPHRpKXRocm93IHRpPTAscHU9bnVsbCxFcnJvcihpKDE4NSkpO2Zvcih2YXIgdD1lLnJldHVybjt0IT09bnVsbDspZT10LHQ9ZS5yZXR1cm47cmV0dXJuIGUudGFnPT09Mz9lLnN0YXRlTm9kZTpudWxsfXZhciB3bz17fTtmdW5jdGlvbiBhTihlLHQsbixsKXt0aGlzLnRhZz1lLHRoaXMua2V5PW4sdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWZDbGVhbnVwPXRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9bCx0aGlzLnN1YnRyZWVGbGFncz10aGlzLmZsYWdzPTAsdGhpcy5kZWxldGlvbnM9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gS3QoZSx0LG4sbCl7cmV0dXJuIG5ldyBhTihlLHQsbixsKX1mdW5jdGlvbiB1ZChlKXtyZXR1cm4gZT1lLnByb3RvdHlwZSwhKCFlfHwhZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiB5bChlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBuPT09bnVsbD8obj1LdChlLnRhZyx0LGUua2V5LGUubW9kZSksbi5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLG4udHlwZT1lLnR5cGUsbi5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsbi5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT1uKToobi5wZW5kaW5nUHJvcHM9dCxuLnR5cGU9ZS50eXBlLG4uZmxhZ3M9MCxuLnN1YnRyZWVGbGFncz0wLG4uZGVsZXRpb25zPW51bGwpLG4uZmxhZ3M9ZS5mbGFncyYxMjA2OTEwOTc2LG4uY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMsbi5sYW5lcz1lLmxhbmVzLG4uY2hpbGQ9ZS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQ9ZS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9LG4uc2libGluZz1lLnNpYmxpbmcsbi5pbmRleD1lLmluZGV4LG4ucmVmPWUucmVmLG4ucmVmQ2xlYW51cD1lLnJlZkNsZWFudXAsbn1mdW5jdGlvbiBxYihlLHQpe2UuZmxhZ3MmPTEyMDY5MTA5Nzg7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPXQsZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz1uLmNoaWxkTGFuZXMsZS5sYW5lcz1uLmxhbmVzLGUuY2hpbGQ9bi5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPW4ubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9bi5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9bi51cGRhdGVRdWV1ZSxlLnR5cGU9bi50eXBlLHQ9bi5kZXBlbmRlbmNpZXMsZS5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIF9jKGUsdCxuLGwscixjKXt2YXIgaD0wO2lmKGw9ZSx0eXBlb2YgbD09ImZ1bmN0aW9uIil1ZChsKSYmKGg9MSk7ZWxzZSBpZih0eXBlb2YgbD09InN0cmluZyIpaD1qRChlLG4sUG4uY3VycmVudCk/MjY6ZT09PSJodG1sInx8ZT09PSJoZWFkInx8ZT09PSJib2R5Ij8yNzo1O2Vsc2UgZTpzd2l0Y2gobCl7Y2FzZSB4ZTpyZXR1cm4gZT1LdCgzMSxuLHQsciksZS5lbGVtZW50VHlwZT14ZSxlLmxhbmVzPWMsZTtjYXNlIG5lOnJldHVybiBOYShuLmNoaWxkcmVuLHIsYyx0KTtjYXNlIGVlOmg9OCxyfD0yNDticmVhaztjYXNlIGNlOnJldHVybiBlPUt0KDEyLG4sdCxyfDIpLGUuZWxlbWVudFR5cGU9Y2UsZS5sYW5lcz1jLGU7Y2FzZSAkOnJldHVybiBlPUt0KDEzLG4sdCxyKSxlLmVsZW1lbnRUeXBlPSQsZS5sYW5lcz1jLGU7Y2FzZSBGOnJldHVybiBlPUt0KDE5LG4sdCxyKSxlLmVsZW1lbnRUeXBlPUYsZS5sYW5lcz1jLGU7Y2FzZSBqZTpjYXNlIEQ6cmV0dXJuIGU9cnwzMixlPUt0KDMwLG4sdCxlKSxlLmVsZW1lbnRUeXBlPUQsZS5sYW5lcz1jLGUuc3RhdGVOb2RlPXthdXRvTmFtZTpudWxsLHBhaXJlZDpudWxsLGNsb25lczpudWxsLHJlZjpudWxsfSxlO2RlZmF1bHQ6aWYodHlwZW9mIGw9PSJvYmplY3QiJiZsIT09bnVsbClzd2l0Y2gobC4kJHR5cGVvZil7Y2FzZSBoZTpoPTEwO2JyZWFrIGU7Y2FzZSBtZTpoPTk7YnJlYWsgZTtjYXNlIFA6aD0xMTticmVhayBlO2Nhc2UgcmU6aD0xNDticmVhayBlO2Nhc2UgcTpoPTE2LGw9bnVsbDticmVhayBlfWg9Mjksbj1FcnJvcihpKDEzMCxlPT09bnVsbD8ibnVsbCI6dHlwZW9mIGUsIiIpKSxsPW51bGx9cmV0dXJuIHQ9S3QoaCxuLHQsciksdC5lbGVtZW50VHlwZT1lLHQudHlwZT1sLHQubGFuZXM9Yyx0fWZ1bmN0aW9uIE5hKGUsdCxuLGwpe3JldHVybiBlPUt0KDcsZSxsLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIHNkKGUsdCxuKXtyZXR1cm4gZT1LdCg2LGUsbnVsbCx0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiBYYihlKXt2YXIgdD1LdCgxOCxudWxsLG51bGwsMCk7cmV0dXJuIHQuc3RhdGVOb2RlPWUsdH1mdW5jdGlvbiBmZChlLHQsbil7cmV0dXJuIHQ9S3QoNCxlLmNoaWxkcmVuIT09bnVsbD9lLmNoaWxkcmVuOltdLGUua2V5LHQpLHQubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH12YXIgS2I9bmV3IFdlYWtNYXA7ZnVuY3Rpb24geW4oZSx0KXtpZih0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsKXt2YXIgbj1LYi5nZXQoZSk7cmV0dXJuIG4hPT12b2lkIDA/bjoodD17dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpQeSh0KX0sS2Iuc2V0KGUsdCksdCl9cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6UHkodCl9fXZhciBFbz1bXSxSbz0wLE9jPW51bGwsenI9MCxibj1bXSx4bj0wLFZsPW51bGwsVm49MSxZbj0iIjtmdW5jdGlvbiBibChlLHQpe0VvW1JvKytdPXpyLEVvW1JvKytdPU9jLE9jPWUsenI9dH1mdW5jdGlvbiBRYihlLHQsbil7Ym5beG4rK109Vm4sYm5beG4rK109WW4sYm5beG4rK109VmwsVmw9ZTt2YXIgbD1WbjtlPVluO3ZhciByPTMyLW5uKGwpLTE7bCY9figxPDxyKSxuKz0xO3ZhciBjPTMyLW5uKHQpK3I7aWYoMzA8Yyl7dmFyIGg9ci1yJTU7Yz0obCYoMTw8aCktMSkudG9TdHJpbmcoMzIpLGw+Pj1oLHItPWgsVm49MTw8MzItbm4odCkrcnxuPDxyfGwsWW49YytlfWVsc2UgVm49MTw8Y3xuPDxyfGwsWW49ZX1mdW5jdGlvbiBBYyhlKXtlLnJldHVybiE9PW51bGwmJihibChlLDEpLFFiKGUsMSwwKSl9ZnVuY3Rpb24gZGQoZSl7Zm9yKDtlPT09T2M7KU9jPUVvWy0tUm9dLEVvW1JvXT1udWxsLHpyPUVvWy0tUm9dLEVvW1JvXT1udWxsO2Zvcig7ZT09PVZsOylWbD1iblstLXhuXSxiblt4bl09bnVsbCxZbj1iblstLXhuXSxiblt4bl09bnVsbCxWbj1iblstLXhuXSxiblt4bl09bnVsbH1mdW5jdGlvbiBaYihlLHQpe2JuW3huKytdPVZuLGJuW3huKytdPVluLGJuW3huKytdPVZsLFZuPXQuaWQsWW49dC5vdmVyZmxvdyxWbD1lfXZhciB4dD1udWxsLEplPW51bGwsTmU9ITEsWWw9bnVsbCxTbj0hMSxtZD1FcnJvcihpKDUxOSkpO2Z1bmN0aW9uIHFsKGUpe3ZhciB0PUVycm9yKGkoNDE4LDE8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzFdIT09dm9pZCAwJiZhcmd1bWVudHNbMV0/InRleHQiOiJIVE1MIiwiIikpO3Rocm93IGtyKHluKHQsZSkpLG1kfWZ1bmN0aW9uIEZiKGUpe3ZhciB0PWUuc3RhdGVOb2RlLG49ZS50eXBlLGw9ZS5tZW1vaXplZFByb3BzO3N3aXRjaCh0W1J0XT1lLHRbWHRdPWwsbil7Y2FzZSJkaWFsb2ciOnplKCJjYW5jZWwiLHQpLHplKCJjbG9zZSIsdCk7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjp6ZSgibG9hZCIsdCk7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG49MDtuPGxpLmxlbmd0aDtuKyspemUobGlbbl0sdCk7YnJlYWs7Y2FzZSJzb3VyY2UiOnplKCJlcnJvciIsdCk7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6emUoImVycm9yIix0KSx6ZSgibG9hZCIsdCk7YnJlYWs7Y2FzZSJkZXRhaWxzIjp6ZSgidG9nZ2xlIix0KTticmVhaztjYXNlImlucHV0Ijp6ZSgiaW52YWxpZCIsdCksY2IodCxsLnZhbHVlLGwuZGVmYXVsdFZhbHVlLGwuY2hlY2tlZCxsLmRlZmF1bHRDaGVja2VkLGwudHlwZSxsLm5hbWUsITApO2JyZWFrO2Nhc2Uic2VsZWN0Ijp6ZSgiaW52YWxpZCIsdCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6emUoImludmFsaWQiLHQpLHNiKHQsbC52YWx1ZSxsLmRlZmF1bHRWYWx1ZSxsLmNoaWxkcmVuKX1uPWwuY2hpbGRyZW4sdHlwZW9mIG4hPSJzdHJpbmciJiZ0eXBlb2YgbiE9Im51bWJlciImJnR5cGVvZiBuIT0iYmlnaW50Inx8dC50ZXh0Q29udGVudD09PSIiK258fGwuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nPT09ITB8fGdTKHQudGV4dENvbnRlbnQsbik/KGwucG9wb3ZlciE9bnVsbCYmKHplKCJiZWZvcmV0b2dnbGUiLHQpLHplKCJ0b2dnbGUiLHQpKSxsLm9uU2Nyb2xsIT1udWxsJiZ6ZSgic2Nyb2xsIix0KSxsLm9uU2Nyb2xsRW5kIT1udWxsJiZ6ZSgic2Nyb2xsZW5kIix0KSxsLm9uQ2xpY2shPW51bGwmJih0Lm9uY2xpY2s9R24pLHQ9ITApOnQ9ITEsdHx8cWwoZSwhMCl9ZnVuY3Rpb24gTmMoZSl7Zm9yKHh0PWUucmV0dXJuO3h0Oylzd2l0Y2goeHQudGFnKXtjYXNlIDU6Y2FzZSAzMTpjYXNlIDEzOlNuPSExO3JldHVybjtjYXNlIDI3OmNhc2UgMzpTbj0hMDtyZXR1cm47ZGVmYXVsdDp4dD14dC5yZXR1cm59fWZ1bmN0aW9uIF9vKGUpe2lmKGUhPT14dClyZXR1cm4hMTtpZighTmUpcmV0dXJuIE5jKGUpLE5lPSEwLCExO3ZhciB0PWUudGFnLG47aWYoKG49dCE9PTMmJnQhPT0yNykmJigobj10PT09NSkmJihuPWUudHlwZSxuPSEobiE9PSJmb3JtIiYmbiE9PSJidXR0b24iKXx8Vm0oZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLG49IW4pLG4mJkplJiZxbChlKSxOYyhlKSx0PT09MTMpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGU9ZSE9PW51bGw/ZS5kZWh5ZHJhdGVkOm51bGwsIWUpdGhyb3cgRXJyb3IoaSgzMTcpKTtKZT1MUyhlKX1lbHNlIGlmKHQ9PT0zMSl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZT1lIT09bnVsbD9lLmRlaHlkcmF0ZWQ6bnVsbCwhZSl0aHJvdyBFcnJvcihpKDMxNykpO0plPUxTKGUpfWVsc2UgdD09PTI3Pyh0PUplLGlhKGUudHlwZSk/KGU9Sm0sSm09bnVsbCxKZT1lKTpKZT10KTpKZT14dD9UbihlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBEYSgpe0plPXh0PW51bGwsTmU9ITF9ZnVuY3Rpb24gaGQoKXt2YXIgZT1ZbDtyZXR1cm4gZSE9PW51bGwmJihGdD09PW51bGw/RnQ9ZTpGdC5wdXNoLmFwcGx5KEZ0LGUpLFlsPW51bGwpLGV9ZnVuY3Rpb24ga3IoZSl7WWw9PT1udWxsP1lsPVtlXTpZbC5wdXNoKGUpfXZhciBwZD1xdChudWxsKSxqYT1udWxsLHhsPW51bGw7ZnVuY3Rpb24gWGwoZSx0LG4pe1BlKHBkLHQuX2N1cnJlbnRWYWx1ZSksdC5fY3VycmVudFZhbHVlPW59ZnVuY3Rpb24gU2woZSl7ZS5fY3VycmVudFZhbHVlPXBkLmN1cnJlbnQsaXQocGQpfWZ1bmN0aW9uIERjKGUsdCxuKXtmb3IoO2UhPT1udWxsOyl7dmFyIGw9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZ0KSE9PXQ/KGUuY2hpbGRMYW5lc3w9dCxsIT09bnVsbCYmKGwuY2hpbGRMYW5lc3w9dCkpOmwhPT1udWxsJiYobC5jaGlsZExhbmVzJnQpIT09dCYmKGwuY2hpbGRMYW5lc3w9dCksZT09PW4pYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gdmQoZSx0LG4sbCl7dmFyIHI9ZS5jaGlsZDtmb3IociE9PW51bGwmJihyLnJldHVybj1lKTtyIT09bnVsbDspe3ZhciBjPXIuZGVwZW5kZW5jaWVzO2lmKGMhPT1udWxsKXt2YXIgaD1yLmNoaWxkO2M9Yy5maXJzdENvbnRleHQ7ZTpmb3IoO2MhPT1udWxsOyl7dmFyIFM9YztjPXI7Zm9yKHZhciBfPTA7Xzx0Lmxlbmd0aDtfKyspaWYoUy5jb250ZXh0PT09dFtfXSl7Yy5sYW5lc3w9bixTPWMuYWx0ZXJuYXRlLFMhPT1udWxsJiYoUy5sYW5lc3w9biksRGMoYy5yZXR1cm4sbixlKSxsfHwoaD1udWxsKTticmVhayBlfWM9Uy5uZXh0fX1lbHNlIGlmKHIudGFnPT09MTgpe2lmKGg9ci5yZXR1cm4saD09PW51bGwpdGhyb3cgRXJyb3IoaSgzNDEpKTtoLmxhbmVzfD1uLGM9aC5hbHRlcm5hdGUsYyE9PW51bGwmJihjLmxhbmVzfD1uKSxEYyhoLG4sZSksaD1udWxsfWVsc2Ugci50YWc9PT0xMyYmci5tZW1vaXplZFN0YXRlIT09bnVsbCYmci5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQ9PT1udWxsPyhyLmxhbmVzfD1uLGg9ci5hbHRlcm5hdGUsaCE9PW51bGwmJihoLmxhbmVzfD1uKSxEYyhyLnJldHVybixuLGUpLGg9ci5jaGlsZCxoPWghPT1udWxsP2guc2libGluZzpudWxsKTpoPXIuY2hpbGQ7aWYoaCE9PW51bGwpaC5yZXR1cm49cjtlbHNlIGZvcihoPXI7aCE9PW51bGw7KXtpZihoPT09ZSl7aD1udWxsO2JyZWFrfWlmKHI9aC5zaWJsaW5nLHIhPT1udWxsKXtyLnJldHVybj1oLnJldHVybixoPXI7YnJlYWt9aD1oLnJldHVybn1yPWh9fWZ1bmN0aW9uIE1hKGUsdCxuLGwpe2U9bnVsbDtmb3IodmFyIHI9dCxjPSExO3IhPT1udWxsOyl7aWYoIWMpe2lmKChyLmZsYWdzJjUyNDI4OCkhPT0wKWM9ITA7ZWxzZSBpZigoci5mbGFncyYyNjIxNDQpIT09MClicmVha31pZihyLnRhZz09PTEwKXt2YXIgaD1yLmFsdGVybmF0ZTtpZihoPT09bnVsbCl0aHJvdyBFcnJvcihpKDM4NykpO2lmKGg9aC5tZW1vaXplZFByb3BzLGghPT1udWxsKXt2YXIgUz1yLnR5cGU7YW4oci5wZW5kaW5nUHJvcHMudmFsdWUsaC52YWx1ZSl8fChlIT09bnVsbD9lLnB1c2goUyk6ZT1bU10pfX1lbHNlIGlmKHI9PT1hYy5jdXJyZW50KXtpZihoPXIuYWx0ZXJuYXRlLGg9PT1udWxsKXRocm93IEVycm9yKGkoMzg3KSk7aC5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUhPT1yLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSYmKGUhPT1udWxsP2UucHVzaChKbyk6ZT1bSm9dKX1yPXIucmV0dXJufXJldHVybiBlIT09bnVsbCYmdmQodCxlLG4sbCksdC5mbGFnc3w9MjYyMTQ0LGUhPT1udWxsfWZ1bmN0aW9uIGpjKGUpe2ZvcihlPWUuZmlyc3RDb250ZXh0O2UhPT1udWxsOyl7aWYoIWFuKGUuY29udGV4dC5fY3VycmVudFZhbHVlLGUubWVtb2l6ZWRWYWx1ZSkpcmV0dXJuITA7ZT1lLm5leHR9cmV0dXJuITF9ZnVuY3Rpb24gemEoZSl7amE9ZSx4bD1udWxsLGU9ZS5kZXBlbmRlbmNpZXMsZSE9PW51bGwmJihlLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiBfdChlKXtyZXR1cm4gJGIoamEsZSl9ZnVuY3Rpb24gTWMoZSx0KXtyZXR1cm4gamE9PT1udWxsJiZ6YShlKSwkYihlLHQpfWZ1bmN0aW9uICRiKGUsdCl7dmFyIG49dC5fY3VycmVudFZhbHVlO2lmKHQ9e2NvbnRleHQ6dCxtZW1vaXplZFZhbHVlOm4sbmV4dDpudWxsfSx4bD09PW51bGwpe2lmKGU9PT1udWxsKXRocm93IEVycm9yKGkoMzA4KSk7eGw9dCxlLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6dH0sZS5mbGFnc3w9NTI0Mjg4fWVsc2UgeGw9eGwubmV4dD10O3JldHVybiBufXZhciBvTj10eXBlb2YgQWJvcnRDb250cm9sbGVyPCJ1Ij9BYm9ydENvbnRyb2xsZXI6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc2lnbmFsPXthYm9ydGVkOiExLGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24obixsKXtlLnB1c2gobCl9fTt0aGlzLmFib3J0PWZ1bmN0aW9uKCl7dC5hYm9ydGVkPSEwLGUuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbigpfSl9fSxyTj1hLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssaU49YS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxmdD17JCR0eXBlb2Y6aGUsQ29uc3VtZXI6bnVsbCxQcm92aWRlcjpudWxsLF9jdXJyZW50VmFsdWU6bnVsbCxfY3VycmVudFZhbHVlMjpudWxsLF90aHJlYWRDb3VudDowfTtmdW5jdGlvbiBnZCgpe3JldHVybntjb250cm9sbGVyOm5ldyBvTixkYXRhOm5ldyBNYXAscmVmQ291bnQ6MH19ZnVuY3Rpb24gTHIoZSl7ZS5yZWZDb3VudC0tLGUucmVmQ291bnQ9PT0wJiZyTihpTixmdW5jdGlvbigpe2UuY29udHJvbGxlci5hYm9ydCgpfSl9ZnVuY3Rpb24gSmIoZSx0KXtpZigoZS5wZW5kaW5nTGFuZXMmNDE5NDA0OCkhPT0wKXt2YXIgbj1lLnRyYW5zaXRpb25UeXBlcztmb3Iobj09PW51bGwmJihuPWUudHJhbnNpdGlvblR5cGVzPVtdKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBsPXRbZV07bi5pbmRleE9mKGwpPT09LTEmJm4ucHVzaChsKX19fXZhciBVcj1udWxsO2Z1bmN0aW9uIGNOKGUpe3ZhciB0PWUudHJhbnNpdGlvblR5cGVzO3JldHVybiBlLnRyYW5zaXRpb25UeXBlcz1udWxsLHR9dmFyIEhyPW51bGwseWQ9MCxrYT0wLE9vPW51bGw7ZnVuY3Rpb24gdU4oZSx0KXtpZihIcj09PW51bGwpe3ZhciBuPUhyPVtdO3lkPTAsa2E9em0oKSxPbz17c3RhdHVzOiJwZW5kaW5nIix2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihsKXtuLnB1c2gobCl9fX1yZXR1cm4geWQrKyx0LnRoZW4oV2IsV2IpLHR9ZnVuY3Rpb24gV2IoKXtpZigtLXlkPT09MCYmKFVyPW51bGwsSHIhPT1udWxsKSl7T28hPT1udWxsJiYoT28uc3RhdHVzPSJmdWxmaWxsZWQiKTt2YXIgZT1IcjtIcj1udWxsLGthPTAsT289bnVsbDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfX1mdW5jdGlvbiBzTihlLHQpe3ZhciBuPVtdLGw9e3N0YXR1czoicGVuZGluZyIsdmFsdWU6bnVsbCxyZWFzb246bnVsbCx0aGVuOmZ1bmN0aW9uKHIpe24ucHVzaChyKX19O3JldHVybiBlLnRoZW4oZnVuY3Rpb24oKXtsLnN0YXR1cz0iZnVsZmlsbGVkIixsLnZhbHVlPXQ7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspKDAsbltyXSkodCl9LGZ1bmN0aW9uKHIpe2ZvcihsLnN0YXR1cz0icmVqZWN0ZWQiLGwucmVhc29uPXIscj0wO3I8bi5sZW5ndGg7cisrKSgwLG5bcl0pKHZvaWQgMCl9KSxsfXZhciBlMD10ZS5TO3RlLlM9ZnVuY3Rpb24oZSx0KXtpZihYeD1lbigpLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiImJnVOKGUsdCksVXIhPT1udWxsKWZvcih2YXIgbj1YbztuIT09bnVsbDspSmIobixVciksbj1uLm5leHQ7aWYobj1lLnR5cGVzLG4hPT1udWxsKXtmb3IodmFyIGw9WG87bCE9PW51bGw7KUpiKGwsbiksbD1sLm5leHQ7aWYoa2EhPT0wKXtsPVVyLGw9PT1udWxsJiYobD1Vcj1bXSk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBjPW5bcl07bC5pbmRleE9mKGMpPT09LTEmJmwucHVzaChjKX19fWUwIT09bnVsbCYmZTAoZSx0KX07dmFyIExhPXF0KG51bGwpO2Z1bmN0aW9uIGJkKCl7dmFyIGU9TGEuY3VycmVudDtyZXR1cm4gZSE9PW51bGw/ZTokZS5wb29sZWRDYWNoZX1mdW5jdGlvbiB6YyhlLHQpe3Q9PT1udWxsP1BlKExhLExhLmN1cnJlbnQpOlBlKExhLHQucG9vbCl9ZnVuY3Rpb24gdDAoKXt2YXIgZT1iZCgpO3JldHVybiBlPT09bnVsbD9udWxsOntwYXJlbnQ6ZnQuX2N1cnJlbnRWYWx1ZSxwb29sOmV9fXZhciBBbz1FcnJvcihpKDQ2MCkpLHhkPUVycm9yKGkoNDc0KSksa2M9RXJyb3IoaSg1NDIpKSxMYz17dGhlbjpmdW5jdGlvbigpe319O2Z1bmN0aW9uIG4wKGUpe3JldHVybiBlPWUuc3RhdHVzLGU9PT0iZnVsZmlsbGVkInx8ZT09PSJyZWplY3RlZCJ9ZnVuY3Rpb24gbDAoZSx0LG4pe3N3aXRjaChuPWVbbl0sbj09PXZvaWQgMD9lLnB1c2godCk6biE9PXQmJih0LnRoZW4oR24sR24pLHQ9biksdC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gdC52YWx1ZTtjYXNlInJlamVjdGVkIjp0aHJvdyBlPXQucmVhc29uLG8wKGUpLGU9PT12b2lkIDAmJiEoInJlYXNvbiJpbiB0KT9FcnJvcihpKDYwMCkpOmU7ZGVmYXVsdDppZih0eXBlb2YgdC5zdGF0dXM9PSJzdHJpbmciKXQudGhlbihHbixHbik7ZWxzZXtpZihlPSRlLGUhPT1udWxsJiYxMDA8ZS5zaGVsbFN1c3BlbmRDb3VudGVyKXRocm93IEVycm9yKGkoNDgyKSk7ZT10LGUuc3RhdHVzPSJwZW5kaW5nIixlLnRoZW4oZnVuY3Rpb24obCl7aWYodC5zdGF0dXM9PT0icGVuZGluZyIpe3ZhciByPXQ7ci5zdGF0dXM9ImZ1bGZpbGxlZCIsci52YWx1ZT1sfX0sZnVuY3Rpb24obCl7aWYodC5zdGF0dXM9PT0icGVuZGluZyIpe3ZhciByPXQ7ci5zdGF0dXM9InJlamVjdGVkIixyLnJlYXNvbj1sfX0pfXN3aXRjaCh0LnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiB0LnZhbHVlO2Nhc2UicmVqZWN0ZWQiOnRocm93IGU9dC5yZWFzb24sbzAoZSksZX10aHJvdyBIYT10LEFvfX1mdW5jdGlvbiBVYShlKXt0cnl7dmFyIHQ9ZS5faW5pdDtyZXR1cm4gdChlLl9wYXlsb2FkKX1jYXRjaChuKXt0aHJvdyBuIT09bnVsbCYmdHlwZW9mIG49PSJvYmplY3QiJiZ0eXBlb2Ygbi50aGVuPT0iZnVuY3Rpb24iPyhIYT1uLEFvKTpufX12YXIgSGE9bnVsbDtmdW5jdGlvbiBhMCgpe2lmKEhhPT09bnVsbCl0aHJvdyBFcnJvcihpKDQ1OSkpO3ZhciBlPUhhO3JldHVybiBIYT1udWxsLGV9ZnVuY3Rpb24gbzAoZSl7aWYoZT09PUFvfHxlPT09a2MpdGhyb3cgRXJyb3IoaSg0ODMpKX12YXIgTm89bnVsbCxCcj0wO2Z1bmN0aW9uIFVjKGUpe3ZhciB0PUJyO3JldHVybiBCcis9MSxObz09PW51bGwmJihObz1bXSksbDAoTm8sZSx0KX1mdW5jdGlvbiBLbChlLHQpe3Q9dC5wcm9wcy5yZWYsZS5yZWY9dCE9PXZvaWQgMD90Om51bGx9ZnVuY3Rpb24gSGMoZSx0KXt0aHJvdyB0LiQkdHlwZW9mPT09Qj9FcnJvcihpKDUyNSkpOihlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihpKDMxLGU9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjplKSkpfWZ1bmN0aW9uIHIwKGUpe2Z1bmN0aW9uIHQoayxqKXtpZihlKXt2YXIgST1rLmRlbGV0aW9ucztJPT09bnVsbD8oay5kZWxldGlvbnM9W2pdLGsuZmxhZ3N8PTE2KTpJLnB1c2goail9fWZ1bmN0aW9uIG4oayxqKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO2ohPT1udWxsOyl0KGssaiksaj1qLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChrKXtmb3IodmFyIGo9bmV3IE1hcDtrIT09bnVsbDspay5rZXk9PT1udWxsP2ouc2V0KGsuaW5kZXgsayk6ai5zZXQoay5rZXksayksaz1rLnNpYmxpbmc7cmV0dXJuIGp9ZnVuY3Rpb24gcihrLGope3JldHVybiBrPXlsKGssaiksay5pbmRleD0wLGsuc2libGluZz1udWxsLGt9ZnVuY3Rpb24gYyhrLGosSSl7cmV0dXJuIGsuaW5kZXg9SSxlPyhJPWsuYWx0ZXJuYXRlLEkhPT1udWxsPyhJPUkuaW5kZXgsSTxqPyhrLmZsYWdzfD0yLGopOkkpOihrLmZsYWdzfD0xMzQyMTc3MzAsaikpOihrLmZsYWdzfD0xMDQ4NTc2LGopfWZ1bmN0aW9uIGgoayl7cmV0dXJuIGUmJmsuYWx0ZXJuYXRlPT09bnVsbCYmKGsuZmxhZ3N8PTEzNDIxNzczMCksa31mdW5jdGlvbiBTKGssaixJLFEpe3JldHVybiBqPT09bnVsbHx8ai50YWchPT02PyhqPXNkKEksay5tb2RlLFEpLGoucmV0dXJuPWssaik6KGo9cihqLEkpLGoucmV0dXJuPWssail9ZnVuY3Rpb24gXyhrLGosSSxRKXt2YXIgZmU9SS50eXBlO3JldHVybiBmZT09PW5lPyhrPVYoayxqLEkucHJvcHMuY2hpbGRyZW4sUSxJLmtleSksS2woayxJKSxrKTpqIT09bnVsbCYmKGouZWxlbWVudFR5cGU9PT1mZXx8dHlwZW9mIGZlPT0ib2JqZWN0IiYmZmUhPT1udWxsJiZmZS4kJHR5cGVvZj09PXEmJlVhKGZlKT09PWoudHlwZSk/KGo9cihqLEkucHJvcHMpLEtsKGosSSksai5yZXR1cm49ayxqKTooaj1fYyhJLnR5cGUsSS5rZXksSS5wcm9wcyxudWxsLGsubW9kZSxRKSxLbChqLEkpLGoucmV0dXJuPWssail9ZnVuY3Rpb24gTChrLGosSSxRKXtyZXR1cm4gaj09PW51bGx8fGoudGFnIT09NHx8ai5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PUkuY29udGFpbmVySW5mb3x8ai5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1JLmltcGxlbWVudGF0aW9uPyhqPWZkKEksay5tb2RlLFEpLGoucmV0dXJuPWssaik6KGo9cihqLEkuY2hpbGRyZW58fFtdKSxqLnJldHVybj1rLGopfWZ1bmN0aW9uIFYoayxqLEksUSxmZSl7cmV0dXJuIGo9PT1udWxsfHxqLnRhZyE9PTc/KGo9TmEoSSxrLm1vZGUsUSxmZSksai5yZXR1cm49ayxqKTooaj1yKGosSSksai5yZXR1cm49ayxqKX1mdW5jdGlvbiBaKGssaixJKXtpZih0eXBlb2Ygaj09InN0cmluZyImJmohPT0iInx8dHlwZW9mIGo9PSJudW1iZXIifHx0eXBlb2Ygaj09ImJpZ2ludCIpcmV0dXJuIGo9c2QoIiIraixrLm1vZGUsSSksai5yZXR1cm49ayxqO2lmKHR5cGVvZiBqPT0ib2JqZWN0IiYmaiE9PW51bGwpe3N3aXRjaChqLiQkdHlwZW9mKXtjYXNlIEo6cmV0dXJuIEk9X2Moai50eXBlLGoua2V5LGoucHJvcHMsbnVsbCxrLm1vZGUsSSksS2woSSxqKSxJLnJldHVybj1rLEk7Y2FzZSBXOnJldHVybiBqPWZkKGosay5tb2RlLEkpLGoucmV0dXJuPWssajtjYXNlIHE6cmV0dXJuIGo9VWEoaiksWihrLGosSSl9aWYobGUoail8fGFlKGopKXJldHVybiBqPU5hKGosay5tb2RlLEksbnVsbCksai5yZXR1cm49ayxqO2lmKHR5cGVvZiBqLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIFooayxVYyhqKSxJKTtpZihqLiQkdHlwZW9mPT09aGUpcmV0dXJuIFooayxNYyhrLGopLEkpO0hjKGssail9cmV0dXJuIG51bGx9ZnVuY3Rpb24geihrLGosSSxRKXt2YXIgZmU9aiE9PW51bGw/ai5rZXk6bnVsbDtpZih0eXBlb2YgST09InN0cmluZyImJkkhPT0iInx8dHlwZW9mIEk9PSJudW1iZXIifHx0eXBlb2YgST09ImJpZ2ludCIpcmV0dXJuIGZlIT09bnVsbD9udWxsOlMoayxqLCIiK0ksUSk7aWYodHlwZW9mIEk9PSJvYmplY3QiJiZJIT09bnVsbCl7c3dpdGNoKEkuJCR0eXBlb2Ype2Nhc2UgSjpyZXR1cm4gSS5rZXk9PT1mZT9fKGssaixJLFEpOm51bGw7Y2FzZSBXOnJldHVybiBJLmtleT09PWZlP0woayxqLEksUSk6bnVsbDtjYXNlIHE6cmV0dXJuIEk9VWEoSSkseihrLGosSSxRKX1pZihsZShJKXx8YWUoSSkpcmV0dXJuIGZlIT09bnVsbD9udWxsOlYoayxqLEksUSxudWxsKTtpZih0eXBlb2YgSS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiB6KGssaixVYyhJKSxRKTtpZihJLiQkdHlwZW9mPT09aGUpcmV0dXJuIHooayxqLE1jKGssSSksUSk7SGMoayxJKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBHKGssaixJLFEsZmUpe2lmKHR5cGVvZiBRPT0ic3RyaW5nIiYmUSE9PSIifHx0eXBlb2YgUT09Im51bWJlciJ8fHR5cGVvZiBRPT0iYmlnaW50IilyZXR1cm4gaz1rLmdldChJKXx8bnVsbCxTKGosaywiIitRLGZlKTtpZih0eXBlb2YgUT09Im9iamVjdCImJlEhPT1udWxsKXtzd2l0Y2goUS4kJHR5cGVvZil7Y2FzZSBKOnJldHVybiBrPWsuZ2V0KFEua2V5PT09bnVsbD9JOlEua2V5KXx8bnVsbCxfKGosayxRLGZlKTtjYXNlIFc6cmV0dXJuIGs9ay5nZXQoUS5rZXk9PT1udWxsP0k6US5rZXkpfHxudWxsLEwoaixrLFEsZmUpO2Nhc2UgcTpyZXR1cm4gUT1VYShRKSxHKGssaixJLFEsZmUpfWlmKGxlKFEpfHxhZShRKSlyZXR1cm4gaz1rLmdldChJKXx8bnVsbCxWKGosayxRLGZlLG51bGwpO2lmKHR5cGVvZiBRLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIEcoayxqLEksVWMoUSksZmUpO2lmKFEuJCR0eXBlb2Y9PT1oZSlyZXR1cm4gRyhrLGosSSxNYyhqLFEpLGZlKTtIYyhqLFEpfXJldHVybiBudWxsfWZ1bmN0aW9uIG9lKGssaixJLFEpe2Zvcih2YXIgZmU9bnVsbCxVZT1udWxsLGdlPWosU2U9aj0wLGh0PW51bGw7Z2UhPT1udWxsJiZTZTxJLmxlbmd0aDtTZSsrKXtnZS5pbmRleD5TZT8oaHQ9Z2UsZ2U9bnVsbCk6aHQ9Z2Uuc2libGluZzt2YXIgSGU9eihrLGdlLElbU2VdLFEpO2lmKEhlPT09bnVsbCl7Z2U9PT1udWxsJiYoZ2U9aHQpO2JyZWFrfWUmJmdlJiZIZS5hbHRlcm5hdGU9PT1udWxsJiZ0KGssZ2UpLGo9YyhIZSxqLFNlKSxVZT09PW51bGw/ZmU9SGU6VWUuc2libGluZz1IZSxVZT1IZSxnZT1odH1pZihTZT09PUkubGVuZ3RoKXJldHVybiBuKGssZ2UpLE5lJiZibChrLFNlKSxmZTtpZihnZT09PW51bGwpe2Zvcig7U2U8SS5sZW5ndGg7U2UrKylnZT1aKGssSVtTZV0sUSksZ2UhPT1udWxsJiYoaj1jKGdlLGosU2UpLFVlPT09bnVsbD9mZT1nZTpVZS5zaWJsaW5nPWdlLFVlPWdlKTtyZXR1cm4gTmUmJmJsKGssU2UpLGZlfWZvcihnZT1sKGdlKTtTZTxJLmxlbmd0aDtTZSsrKWh0PUcoZ2UsayxTZSxJW1NlXSxRKSxodCE9PW51bGwmJihlJiYoSGU9aHQuYWx0ZXJuYXRlLEhlIT09bnVsbCYmZ2UuZGVsZXRlKEhlLmtleT09PW51bGw/U2U6SGUua2V5KSksaj1jKGh0LGosU2UpLFVlPT09bnVsbD9mZT1odDpVZS5zaWJsaW5nPWh0LFVlPWh0KTtyZXR1cm4gZSYmZ2UuZm9yRWFjaChmdW5jdGlvbihkYSl7cmV0dXJuIHQoayxkYSl9KSxOZSYmYmwoayxTZSksZmV9ZnVuY3Rpb24gdmUoayxqLEksUSl7aWYoST09bnVsbCl0aHJvdyBFcnJvcihpKDE1MSkpO2Zvcih2YXIgZmU9bnVsbCxVZT1udWxsLGdlPWosU2U9aj0wLGh0PW51bGwsSGU9SS5uZXh0KCk7Z2UhPT1udWxsJiYhSGUuZG9uZTtTZSsrLEhlPUkubmV4dCgpKXtnZS5pbmRleD5TZT8oaHQ9Z2UsZ2U9bnVsbCk6aHQ9Z2Uuc2libGluZzt2YXIgZGE9eihrLGdlLEhlLnZhbHVlLFEpO2lmKGRhPT09bnVsbCl7Z2U9PT1udWxsJiYoZ2U9aHQpO2JyZWFrfWUmJmdlJiZkYS5hbHRlcm5hdGU9PT1udWxsJiZ0KGssZ2UpLGo9YyhkYSxqLFNlKSxVZT09PW51bGw/ZmU9ZGE6VWUuc2libGluZz1kYSxVZT1kYSxnZT1odH1pZihIZS5kb25lKXJldHVybiBuKGssZ2UpLE5lJiZibChrLFNlKSxmZTtpZihnZT09PW51bGwpe2Zvcig7IUhlLmRvbmU7U2UrKyxIZT1JLm5leHQoKSlIZT1aKGssSGUudmFsdWUsUSksSGUhPT1udWxsJiYoaj1jKEhlLGosU2UpLFVlPT09bnVsbD9mZT1IZTpVZS5zaWJsaW5nPUhlLFVlPUhlKTtyZXR1cm4gTmUmJmJsKGssU2UpLGZlfWZvcihnZT1sKGdlKTshSGUuZG9uZTtTZSsrLEhlPUkubmV4dCgpKUhlPUcoZ2UsayxTZSxIZS52YWx1ZSxRKSxIZSE9PW51bGwmJihlJiYoaHQ9SGUuYWx0ZXJuYXRlLGh0IT09bnVsbCYmZ2UuZGVsZXRlKGh0LmtleT09PW51bGw/U2U6aHQua2V5KSksaj1jKEhlLGosU2UpLFVlPT09bnVsbD9mZT1IZTpVZS5zaWJsaW5nPUhlLFVlPUhlKTtyZXR1cm4gZSYmZ2UuZm9yRWFjaChmdW5jdGlvbihZRCl7cmV0dXJuIHQoayxZRCl9KSxOZSYmYmwoayxTZSksZmV9ZnVuY3Rpb24gT2UoayxqLEksUSl7aWYodHlwZW9mIEk9PSJvYmplY3QiJiZJIT09bnVsbCYmSS50eXBlPT09bmUmJkkua2V5PT09bnVsbCYmSS5wcm9wcy5yZWY9PT12b2lkIDAmJihJPUkucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiBJPT0ib2JqZWN0IiYmSSE9PW51bGwpe3N3aXRjaChJLiQkdHlwZW9mKXtjYXNlIEo6ZTp7Zm9yKHZhciBmZT1JLmtleTtqIT09bnVsbDspe2lmKGoua2V5PT09ZmUpe2lmKGZlPUkudHlwZSxmZT09PW5lKXtpZihqLnRhZz09PTcpe24oayxqLnNpYmxpbmcpLFE9cihqLEkucHJvcHMuY2hpbGRyZW4pLEtsKFEsSSksUS5yZXR1cm49ayxrPVE7YnJlYWsgZX19ZWxzZSBpZihqLmVsZW1lbnRUeXBlPT09ZmV8fHR5cGVvZiBmZT09Im9iamVjdCImJmZlIT09bnVsbCYmZmUuJCR0eXBlb2Y9PT1xJiZVYShmZSk9PT1qLnR5cGUpe24oayxqLnNpYmxpbmcpLFE9cihqLEkucHJvcHMpLEtsKFEsSSksUS5yZXR1cm49ayxrPVE7YnJlYWsgZX1uKGssaik7YnJlYWt9ZWxzZSB0KGssaik7aj1qLnNpYmxpbmd9SS50eXBlPT09bmU/KFE9TmEoSS5wcm9wcy5jaGlsZHJlbixrLm1vZGUsUSxJLmtleSksS2woUSxJKSxRLnJldHVybj1rLGs9USk6KFE9X2MoSS50eXBlLEkua2V5LEkucHJvcHMsbnVsbCxrLm1vZGUsUSksS2woUSxJKSxRLnJldHVybj1rLGs9USl9cmV0dXJuIGgoayk7Y2FzZSBXOmU6e2ZvcihmZT1JLmtleTtqIT09bnVsbDspe2lmKGoua2V5PT09ZmUpaWYoai50YWc9PT00JiZqLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09SS5jb250YWluZXJJbmZvJiZqLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PUkuaW1wbGVtZW50YXRpb24pe24oayxqLnNpYmxpbmcpLFE9cihqLEkuY2hpbGRyZW58fFtdKSxRLnJldHVybj1rLGs9UTticmVhayBlfWVsc2V7bihrLGopO2JyZWFrfWVsc2UgdChrLGopO2o9ai5zaWJsaW5nfVE9ZmQoSSxrLm1vZGUsUSksUS5yZXR1cm49ayxrPVF9cmV0dXJuIGgoayk7Y2FzZSBxOnJldHVybiBJPVVhKEkpLE9lKGssaixJLFEpfWlmKGxlKEkpKXJldHVybiBvZShrLGosSSxRKTtpZihhZShJKSl7aWYoZmU9YWUoSSksdHlwZW9mIGZlIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKGkoMTUwKSk7cmV0dXJuIEk9ZmUuY2FsbChJKSx2ZShrLGosSSxRKX1pZih0eXBlb2YgSS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBPZShrLGosVWMoSSksUSk7aWYoSS4kJHR5cGVvZj09PWhlKXJldHVybiBPZShrLGosTWMoayxJKSxRKTtIYyhrLEkpfXJldHVybiB0eXBlb2YgST09InN0cmluZyImJkkhPT0iInx8dHlwZW9mIEk9PSJudW1iZXIifHx0eXBlb2YgST09ImJpZ2ludCI/KEk9IiIrSSxqIT09bnVsbCYmai50YWc9PT02PyhuKGssai5zaWJsaW5nKSxRPXIoaixJKSxRLnJldHVybj1rLGs9USk6KG4oayxqKSxRPXNkKEksay5tb2RlLFEpLFEucmV0dXJuPWssaz1RKSxoKGspKTpuKGssail9cmV0dXJuIGZ1bmN0aW9uKGssaixJLFEpe3RyeXtCcj0wO3ZhciBmZT1PZShrLGosSSxRKTtyZXR1cm4gTm89bnVsbCxmZX1jYXRjaChnZSl7aWYoZ2U9PT1Bb3x8Z2U9PT1rYyl0aHJvdyBnZTt2YXIgVWU9S3QoMjksZ2UsbnVsbCxrLm1vZGUpO3JldHVybiBVZS5sYW5lcz1RLFVlLnJldHVybj1rLFVlfX19dmFyIEJhPXIwKCEwKSxpMD1yMCghMSksUWw9ITE7ZnVuY3Rpb24gU2QoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGxhbmVzOjAsaGlkZGVuQ2FsbGJhY2tzOm51bGx9LGNhbGxiYWNrczpudWxsfX1mdW5jdGlvbiBDZChlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsY2FsbGJhY2tzOm51bGx9KX1mdW5jdGlvbiBabChlKXtyZXR1cm57bGFuZTplLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gRmwoZSx0LG4pe3ZhciBsPWUudXBkYXRlUXVldWU7aWYobD09PW51bGwpcmV0dXJuIG51bGw7aWYobD1sLnNoYXJlZCwoSWUmMikhPT0wKXt2YXIgcj1sLnBlbmRpbmc7cmV0dXJuIHI9PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9ci5uZXh0LHIubmV4dD10KSxsLnBlbmRpbmc9dCx0PVJjKGUpLFliKGUsbnVsbCxuKSx0fXJldHVybiBFYyhlLGwsdCxuKSxSYyhlKX1mdW5jdGlvbiBJcihlLHQsbil7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwobiY0MTk0MDQ4KSE9PTApKXt2YXIgbD10LmxhbmVzO2wmPWUucGVuZGluZ0xhbmVzLG58PWwsdC5sYW5lcz1uLFF5KGUsbil9fWZ1bmN0aW9uIFRkKGUsdCl7dmFyIG49ZS51cGRhdGVRdWV1ZSxsPWUuYWx0ZXJuYXRlO2lmKGwhPT1udWxsJiYobD1sLnVwZGF0ZVF1ZXVlLG49PT1sKSl7dmFyIHI9bnVsbCxjPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGg9e2xhbmU6bi5sYW5lLHRhZzpuLnRhZyxwYXlsb2FkOm4ucGF5bG9hZCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH07Yz09PW51bGw/cj1jPWg6Yz1jLm5leHQ9aCxuPW4ubmV4dH13aGlsZShuIT09bnVsbCk7Yz09PW51bGw/cj1jPXQ6Yz1jLm5leHQ9dH1lbHNlIHI9Yz10O249e2Jhc2VTdGF0ZTpsLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6cixsYXN0QmFzZVVwZGF0ZTpjLHNoYXJlZDpsLnNoYXJlZCxjYWxsYmFja3M6bC5jYWxsYmFja3N9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59ZT1uLmxhc3RCYXNlVXBkYXRlLGU9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fXZhciB3ZD0hMTtmdW5jdGlvbiBQcigpe2lmKHdkKXt2YXIgZT1PbztpZihlIT09bnVsbCl0aHJvdyBlfX1mdW5jdGlvbiBHcihlLHQsbixsKXt3ZD0hMTt2YXIgcj1lLnVwZGF0ZVF1ZXVlO1FsPSExO3ZhciBjPXIuZmlyc3RCYXNlVXBkYXRlLGg9ci5sYXN0QmFzZVVwZGF0ZSxTPXIuc2hhcmVkLnBlbmRpbmc7aWYoUyE9PW51bGwpe3Iuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgXz1TLEw9Xy5uZXh0O18ubmV4dD1udWxsLGg9PT1udWxsP2M9TDpoLm5leHQ9TCxoPV87dmFyIFY9ZS5hbHRlcm5hdGU7ViE9PW51bGwmJihWPVYudXBkYXRlUXVldWUsUz1WLmxhc3RCYXNlVXBkYXRlLFMhPT1oJiYoUz09PW51bGw/Vi5maXJzdEJhc2VVcGRhdGU9TDpTLm5leHQ9TCxWLmxhc3RCYXNlVXBkYXRlPV8pKX1pZihjIT09bnVsbCl7dmFyIFo9ci5iYXNlU3RhdGU7aD0wLFY9TD1fPW51bGwsUz1jO2Rve3ZhciB6PVMubGFuZSYtNTM2ODcwOTEzLEc9eiE9PVMubGFuZTtpZihHPyhMZSZ6KT09PXo6KGwmeik9PT16KXt6IT09MCYmej09PWthJiYod2Q9ITApLFYhPT1udWxsJiYoVj1WLm5leHQ9e2xhbmU6MCx0YWc6Uy50YWcscGF5bG9hZDpTLnBheWxvYWQsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9KTtlOnt2YXIgb2U9ZSx2ZT1TO3o9dDt2YXIgT2U9bjtzd2l0Y2godmUudGFnKXtjYXNlIDE6aWYob2U9dmUucGF5bG9hZCx0eXBlb2Ygb2U9PSJmdW5jdGlvbiIpe1o9b2UuY2FsbChPZSxaLHopO2JyZWFrIGV9Wj1vZTticmVhayBlO2Nhc2UgMzpvZS5mbGFncz1vZS5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihvZT12ZS5wYXlsb2FkLHo9dHlwZW9mIG9lPT0iZnVuY3Rpb24iP29lLmNhbGwoT2UsWix6KTpvZSx6PT1udWxsKWJyZWFrIGU7Wj1VKHt9LFoseik7YnJlYWsgZTtjYXNlIDI6UWw9ITB9fXo9Uy5jYWxsYmFjayx6IT09bnVsbCYmKGUuZmxhZ3N8PTY0LEcmJihlLmZsYWdzfD04MTkyKSxHPXIuY2FsbGJhY2tzLEc9PT1udWxsP3IuY2FsbGJhY2tzPVt6XTpHLnB1c2goeikpfWVsc2UgRz17bGFuZTp6LHRhZzpTLnRhZyxwYXlsb2FkOlMucGF5bG9hZCxjYWxsYmFjazpTLmNhbGxiYWNrLG5leHQ6bnVsbH0sVj09PW51bGw/KEw9Vj1HLF89Wik6Vj1WLm5leHQ9RyxofD16O2lmKFM9Uy5uZXh0LFM9PT1udWxsKXtpZihTPXIuc2hhcmVkLnBlbmRpbmcsUz09PW51bGwpYnJlYWs7Rz1TLFM9Ry5uZXh0LEcubmV4dD1udWxsLHIubGFzdEJhc2VVcGRhdGU9RyxyLnNoYXJlZC5wZW5kaW5nPW51bGx9fXdoaWxlKCEwKTtWPT09bnVsbCYmKF89Wiksci5iYXNlU3RhdGU9XyxyLmZpcnN0QmFzZVVwZGF0ZT1MLHIubGFzdEJhc2VVcGRhdGU9VixjPT09bnVsbCYmKHIuc2hhcmVkLmxhbmVzPTApLGxhfD1oLGUubGFuZXM9aCxlLm1lbW9pemVkU3RhdGU9Wn19ZnVuY3Rpb24gYzAoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihpKDE5MSxlKSk7ZS5jYWxsKHQpfWZ1bmN0aW9uIHUwKGUsdCl7dmFyIG49ZS5jYWxsYmFja3M7aWYobiE9PW51bGwpZm9yKGUuY2FsbGJhY2tzPW51bGwsZT0wO2U8bi5sZW5ndGg7ZSsrKWMwKG5bZV0sdCl9dmFyICRsPXF0KG51bGwpLEJjPXF0KDApO2Z1bmN0aW9uIHMwKGUsdCl7ZT1SbCxQZShCYyxlKSxQZSgkbCx0KSxSbD1lfHQuYmFzZUxhbmVzfWZ1bmN0aW9uIEVkKCl7UGUoQmMsUmwpLFBlKCRsLCRsLmN1cnJlbnQpfWZ1bmN0aW9uIFJkKCl7Umw9QmMuY3VycmVudCxpdCgkbCksaXQoQmMpfXZhciBPdD1xdChudWxsKSxrdD1udWxsO2Z1bmN0aW9uIEpsKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO1BlKEF0LEF0LmN1cnJlbnQmMSksUGUoT3QsZSksa3Q9PT1udWxsJiYodD09PW51bGx8fCRsLmN1cnJlbnQhPT1udWxsfHx0Lm1lbW9pemVkU3RhdGUhPT1udWxsKSYmKGt0PWUpfWZ1bmN0aW9uIF9kKGUpe1BlKEF0LEF0LmN1cnJlbnQpLFBlKE90LGUpLGt0PT09bnVsbCYmKGt0PWUpfWZ1bmN0aW9uIGYwKGUpe2UudGFnPT09MjI/KFBlKEF0LEF0LmN1cnJlbnQpLFBlKE90LGUpLGt0PT09bnVsbCYmKGt0PWUpKTpXbCgpfWZ1bmN0aW9uIFdsKCl7UGUoQXQsQXQuY3VycmVudCksUGUoT3QsT3QuY3VycmVudCl9ZnVuY3Rpb24gb24oZSl7aXQoT3QpLGt0PT09ZSYmKGt0PW51bGwpLGl0KEF0KX12YXIgQXQ9cXQoMCk7ZnVuY3Rpb24gVnIoZSx0KXtQZShPdCxPdC5jdXJyZW50KSxQZShBdCx0KX1mdW5jdGlvbiBPZChlKXtpdChBdCksaXQoT3QpLGt0PT09ZSYmKGt0PW51bGwpfWZ1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fEZtKG4pfHwkbShuKSkpcmV0dXJuIHR9ZWxzZSBpZih0LnRhZz09PTE5JiZ0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIhPT0iaW5kZXBlbmRlbnQiKXtpZigodC5mbGFncyYxMjgpIT09MClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIENsPTAsX2U9bnVsbCxRZT1udWxsLGR0PW51bGwsUGM9ITEsRG89ITEsSWE9ITEsR2M9MCxZcj0wLGpvPW51bGwsZk49MDtmdW5jdGlvbiBsdCgpe3Rocm93IEVycm9yKGkoMzIxKSl9ZnVuY3Rpb24gQWQoZSx0KXtpZih0PT09bnVsbClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZuPGUubGVuZ3RoO24rKylpZighYW4oZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBOZChlLHQsbixsLHIsYyl7cmV0dXJuIENsPWMsX2U9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLHRlLkg9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/UTA6WjAsSWE9ITEsYz1uKGwsciksSWE9ITEsRG8mJihjPW0wKHQsbixsLHIpKSxkMChlKSxjfWZ1bmN0aW9uIGQwKGUpe3RlLkg9WmM7dmFyIHQ9UWUhPT1udWxsJiZRZS5uZXh0IT09bnVsbDtpZihDbD0wLGR0PVFlPV9lPW51bGwsUGM9ITEsWXI9MCxqbz1udWxsLHQpdGhyb3cgRXJyb3IoaSgzMDApKTtlPT09bnVsbHx8bXR8fChlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZqYyhlKSYmKG10PSEwKSl9ZnVuY3Rpb24gbTAoZSx0LG4sbCl7X2U9ZTt2YXIgcj0wO2Rve2lmKERvJiYoam89bnVsbCksWXI9MCxEbz0hMSwyNTw9cil0aHJvdyBFcnJvcihpKDMwMSkpO2lmKHIrPTEsZHQ9UWU9bnVsbCxlLnVwZGF0ZVF1ZXVlIT1udWxsKXt2YXIgYz1lLnVwZGF0ZVF1ZXVlO2MubGFzdEVmZmVjdD1udWxsLGMuZXZlbnRzPW51bGwsYy5zdG9yZXM9bnVsbCxjLm1lbW9DYWNoZSE9bnVsbCYmKGMubWVtb0NhY2hlLmluZGV4PTApfXRlLkg9Yk4sYz10KG4sbCl9d2hpbGUoRG8pO3JldHVybiBjfWZ1bmN0aW9uIGROKCl7dmFyIGU9dGUuSCx0PWUudXNlU3RhdGUoKVswXTtyZXR1cm4gdD10eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iP3FyKHQpOnQsZT1lLnVzZVN0YXRlKClbMF0sKFFlIT09bnVsbD9RZS5tZW1vaXplZFN0YXRlOm51bGwpIT09ZSYmKF9lLmZsYWdzfD0xMDI0KSx0fWZ1bmN0aW9uIERkKCl7dmFyIGU9R2MhPT0wO3JldHVybiBHYz0wLGV9ZnVuY3Rpb24gamQoZSx0LG4pe3QudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+bn1mdW5jdGlvbiBNZChlKXtpZihQYyl7Zm9yKGU9ZS5tZW1vaXplZFN0YXRlO2UhPT1udWxsOyl7dmFyIHQ9ZS5xdWV1ZTt0IT09bnVsbCYmKHQucGVuZGluZz1udWxsKSxlPWUubmV4dH1QYz0hMX1DbD0wLGR0PVFlPV9lPW51bGwsRG89ITEsWXI9R2M9MCxqbz1udWxsfWZ1bmN0aW9uIFV0KCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07cmV0dXJuIGR0PT09bnVsbD9fZS5tZW1vaXplZFN0YXRlPWR0PWU6ZHQ9ZHQubmV4dD1lLGR0fWZ1bmN0aW9uIGN0KCl7aWYoUWU9PT1udWxsKXt2YXIgZT1fZS5hbHRlcm5hdGU7ZT1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGU9UWUubmV4dDt2YXIgdD1kdD09PW51bGw/X2UubWVtb2l6ZWRTdGF0ZTpkdC5uZXh0O2lmKHQhPT1udWxsKWR0PXQsUWU9ZTtlbHNle2lmKGU9PT1udWxsKXRocm93IF9lLmFsdGVybmF0ZT09PW51bGw/RXJyb3IoaSg0NjcpKTpFcnJvcihpKDMxMCkpO1FlPWUsZT17bWVtb2l6ZWRTdGF0ZTpRZS5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpRZS5iYXNlU3RhdGUsYmFzZVF1ZXVlOlFlLmJhc2VRdWV1ZSxxdWV1ZTpRZS5xdWV1ZSxuZXh0Om51bGx9LGR0PT09bnVsbD9fZS5tZW1vaXplZFN0YXRlPWR0PWU6ZHQ9ZHQubmV4dD1lfXJldHVybiBkdH1mdW5jdGlvbiBWYygpe3JldHVybntsYXN0RWZmZWN0Om51bGwsZXZlbnRzOm51bGwsc3RvcmVzOm51bGwsbWVtb0NhY2hlOm51bGx9fWZ1bmN0aW9uIHFyKGUpe3ZhciB0PVlyO3JldHVybiBZcis9MSxqbz09PW51bGwmJihqbz1bXSksZT1sMChqbyxlLHQpLHQ9X2UsKGR0PT09bnVsbD90Lm1lbW9pemVkU3RhdGU6ZHQubmV4dCk9PT1udWxsJiYodD10LmFsdGVybmF0ZSx0ZS5IPXQ9PT1udWxsfHx0Lm1lbW9pemVkU3RhdGU9PT1udWxsP1EwOlowKSxlfWZ1bmN0aW9uIFljKGUpe2lmKGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKHR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIHFyKGUpO2lmKGUuJCR0eXBlb2Y9PT1YKXJldHVybjtpZihlLiQkdHlwZW9mPT09aGUpcmV0dXJuIF90KGUpfXRocm93IEVycm9yKGkoNDM4LFN0cmluZyhlKSkpfWZ1bmN0aW9uIHpkKGUpe3ZhciB0PW51bGwsbj1fZS51cGRhdGVRdWV1ZTtpZihuIT09bnVsbCYmKHQ9bi5tZW1vQ2FjaGUpLHQ9PW51bGwpe3ZhciBsPV9lLmFsdGVybmF0ZTtsIT09bnVsbCYmKGw9bC51cGRhdGVRdWV1ZSxsIT09bnVsbCYmKGw9bC5tZW1vQ2FjaGUsbCE9bnVsbCYmKHQ9e2RhdGE6bC5kYXRhLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5zbGljZSgpfSksaW5kZXg6MH0pKSl9aWYodD09bnVsbCYmKHQ9e2RhdGE6W10saW5kZXg6MH0pLG49PT1udWxsJiYobj1WYygpLF9lLnVwZGF0ZVF1ZXVlPW4pLG4ubWVtb0NhY2hlPXQsbj10LmRhdGFbdC5pbmRleF0sbj09PXZvaWQgMClmb3Iobj10LmRhdGFbdC5pbmRleF09QXJyYXkoZSksbD0wO2w8ZTtsKyspbltsXT1ZZTtyZXR1cm4gdC5pbmRleCsrLG59ZnVuY3Rpb24gVGwoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIHFjKGUpe3ZhciB0PWN0KCk7cmV0dXJuIGtkKHQsUWUsZSl9ZnVuY3Rpb24ga2QoZSx0LG4pe3ZhciBsPWUucXVldWU7aWYobD09PW51bGwpdGhyb3cgRXJyb3IoaSgzMTEpKTtsLmxhc3RSZW5kZXJlZFJlZHVjZXI9bjt2YXIgcj1lLmJhc2VRdWV1ZSxjPWwucGVuZGluZztpZihjIT09bnVsbCl7aWYociE9PW51bGwpe3ZhciBoPXIubmV4dDtyLm5leHQ9Yy5uZXh0LGMubmV4dD1ofXQuYmFzZVF1ZXVlPXI9YyxsLnBlbmRpbmc9bnVsbH1pZihjPWUuYmFzZVN0YXRlLHI9PT1udWxsKWUubWVtb2l6ZWRTdGF0ZT1jO2Vsc2V7dD1yLm5leHQ7dmFyIFM9aD1udWxsLF89bnVsbCxMPXQsVj0hMTtkb3t2YXIgWj1MLmxhbmUmLTUzNjg3MDkxMztpZihaIT09TC5sYW5lPyhMZSZaKT09PVo6KENsJlopPT09Wil7dmFyIHo9TC5yZXZlcnRMYW5lO2lmKHo9PT0wKV8hPT1udWxsJiYoXz1fLm5leHQ9e2xhbmU6MCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjpMLmFjdGlvbixoYXNFYWdlclN0YXRlOkwuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOkwuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxaPT09a2EmJihWPSEwKTtlbHNlIGlmKChDbCZ6KT09PXope0w9TC5uZXh0LHo9PT1rYSYmKFY9ITApO2NvbnRpbnVlfWVsc2UgWj17bGFuZTowLHJldmVydExhbmU6TC5yZXZlcnRMYW5lLGdlc3R1cmU6bnVsbCxhY3Rpb246TC5hY3Rpb24saGFzRWFnZXJTdGF0ZTpMLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpMLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxfPT09bnVsbD8oUz1fPVosaD1jKTpfPV8ubmV4dD1aLF9lLmxhbmVzfD16LGxhfD16O1o9TC5hY3Rpb24sSWEmJm4oYyxaKSxjPUwuaGFzRWFnZXJTdGF0ZT9MLmVhZ2VyU3RhdGU6bihjLFopfWVsc2Ugej17bGFuZTpaLHJldmVydExhbmU6TC5yZXZlcnRMYW5lLGdlc3R1cmU6TC5nZXN0dXJlLGFjdGlvbjpMLmFjdGlvbixoYXNFYWdlclN0YXRlOkwuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOkwuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LF89PT1udWxsPyhTPV89eixoPWMpOl89Xy5uZXh0PXosX2UubGFuZXN8PVosbGF8PVo7TD1MLm5leHR9d2hpbGUoTCE9PW51bGwmJkwhPT10KTtpZihfPT09bnVsbD9oPWM6Xy5uZXh0PVMsIWFuKGMsZS5tZW1vaXplZFN0YXRlKSYmKG10PSEwLFYmJihuPU9vLG4hPT1udWxsKSkpdGhyb3cgbjtlLm1lbW9pemVkU3RhdGU9YyxlLmJhc2VTdGF0ZT1oLGUuYmFzZVF1ZXVlPV8sbC5sYXN0UmVuZGVyZWRTdGF0ZT1jfXJldHVybiByPT09bnVsbCYmKGwubGFuZXM9MCksW2UubWVtb2l6ZWRTdGF0ZSxsLmRpc3BhdGNoXX1mdW5jdGlvbiBMZChlKXt2YXIgdD1jdCgpLG49dC5xdWV1ZTtpZihuPT09bnVsbCl0aHJvdyBFcnJvcihpKDMxMSkpO24ubGFzdFJlbmRlcmVkUmVkdWNlcj1lO3ZhciBsPW4uZGlzcGF0Y2gscj1uLnBlbmRpbmcsYz10Lm1lbW9pemVkU3RhdGU7aWYociE9PW51bGwpe24ucGVuZGluZz1udWxsO3ZhciBoPXI9ci5uZXh0O2RvIGM9ZShjLGguYWN0aW9uKSxoPWgubmV4dDt3aGlsZShoIT09cik7YW4oYyx0Lm1lbW9pemVkU3RhdGUpfHwobXQ9ITApLHQubWVtb2l6ZWRTdGF0ZT1jLHQuYmFzZVF1ZXVlPT09bnVsbCYmKHQuYmFzZVN0YXRlPWMpLG4ubGFzdFJlbmRlcmVkU3RhdGU9Y31yZXR1cm5bYyxsXX1mdW5jdGlvbiBoMChlLHQsbil7dmFyIGw9X2Uscj1jdCgpLGM9TmU7aWYoYyl7aWYobj09PXZvaWQgMCl0aHJvdyBFcnJvcihpKDQwNykpO249bigpfWVsc2Ugbj10KCk7dmFyIGg9IWFuKChRZXx8cikubWVtb2l6ZWRTdGF0ZSxuKTtpZihoJiYoci5tZW1vaXplZFN0YXRlPW4sbXQ9ITApLHI9ci5xdWV1ZSxCZChnMC5iaW5kKG51bGwsbCxyLGUpLFtlXSksZT1yLmdldFNuYXBzaG90IT09dHx8aHx8ZHQhPT1udWxsJiYoZHQubWVtb2l6ZWRTdGF0ZS50YWcmMSkhPT0wLE1vKGU/OTo4LHtkZXN0cm95OnZvaWQgMH0sdjAuYmluZChudWxsLGwscixuLHQpLG51bGwpLGUpe2lmKGwuZmxhZ3N8PTIwNDgsJGU9PT1udWxsKXRocm93IEVycm9yKGkoMzQ5KSk7Y3x8KENsJjEyNykhPT0wfHxwMChsLHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gcDAoZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sdD1fZS51cGRhdGVRdWV1ZSx0PT09bnVsbD8odD1WYygpLF9lLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiB2MChlLHQsbixsKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1sLHkwKHQpJiZiMChlKX1mdW5jdGlvbiBnMChlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXt5MCh0KSYmYjAoZSl9KX1mdW5jdGlvbiB5MChlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFhbihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBiMChlKXt2YXIgdD1BYShlLDIpO3QhPT1udWxsJiYkdCh0LGUsMil9ZnVuY3Rpb24gVWQoZSl7dmFyIHQ9VXQoKTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIil7dmFyIG49ZTtpZihlPW4oKSxJYSl7SWwoITApO3RyeXtuKCl9ZmluYWxseXtJbCghMSl9fX1yZXR1cm4gdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsdC5xdWV1ZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlRsLGxhc3RSZW5kZXJlZFN0YXRlOmV9LHR9ZnVuY3Rpb24geDAoZSx0LG4sbCl7cmV0dXJuIGUuYmFzZVN0YXRlPW4sa2QoZSxRZSx0eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlRsKX1mdW5jdGlvbiBtTihlLHQsbixsLHIpe2lmKFFjKGUpKXRocm93IEVycm9yKGkoNDg1KSk7aWYoZT10LmFjdGlvbixlIT09bnVsbCl7dmFyIGM9e3BheWxvYWQ6cixhY3Rpb246ZSxuZXh0Om51bGwsaXNUcmFuc2l0aW9uOiEwLHN0YXR1czoicGVuZGluZyIsdmFsdWU6bnVsbCxyZWFzb246bnVsbCxsaXN0ZW5lcnM6W10sdGhlbjpmdW5jdGlvbihoKXtjLmxpc3RlbmVycy5wdXNoKGgpfX07dGUuVCE9PW51bGw/bighMCk6Yy5pc1RyYW5zaXRpb249ITEsbChjKSxuPXQucGVuZGluZyxuPT09bnVsbD8oYy5uZXh0PXQucGVuZGluZz1jLFMwKHQsYykpOihjLm5leHQ9bi5uZXh0LHQucGVuZGluZz1uLm5leHQ9Yyl9fWZ1bmN0aW9uIFMwKGUsdCl7dmFyIG49dC5hY3Rpb24sbD10LnBheWxvYWQscj1lLnN0YXRlO2lmKHQuaXNUcmFuc2l0aW9uKXt2YXIgYz10ZS5ULGg9e307aC50eXBlcz1jIT09bnVsbD9jLnR5cGVzOm51bGwsdGUuVD1oO3RyeXt2YXIgUz1uKHIsbCksXz10ZS5TO18hPT1udWxsJiZfKGgsUyksQzAoZSx0LFMpfWNhdGNoKEwpe0hkKGUsdCxMKX1maW5hbGx5e2MhPT1udWxsJiZoLnR5cGVzIT09bnVsbCYmKGMudHlwZXM9aC50eXBlcyksdGUuVD1jfX1lbHNlIHRyeXtjPW4ocixsKSxDMChlLHQsYyl9Y2F0Y2goTCl7SGQoZSx0LEwpfX1mdW5jdGlvbiBDMChlLHQsbil7biE9PW51bGwmJnR5cGVvZiBuPT0ib2JqZWN0IiYmdHlwZW9mIG4udGhlbj09ImZ1bmN0aW9uIj9uLnRoZW4oZnVuY3Rpb24obCl7VDAoZSx0LGwpfSxmdW5jdGlvbihsKXtyZXR1cm4gSGQoZSx0LGwpfSk6VDAoZSx0LG4pfWZ1bmN0aW9uIFQwKGUsdCxuKXt0LnN0YXR1cz0iZnVsZmlsbGVkIix0LnZhbHVlPW4sdzAodCksZS5zdGF0ZT1uLHQ9ZS5wZW5kaW5nLHQhPT1udWxsJiYobj10Lm5leHQsbj09PXQ/ZS5wZW5kaW5nPW51bGw6KG49bi5uZXh0LHQubmV4dD1uLFMwKGUsbikpKX1mdW5jdGlvbiBIZChlLHQsbil7dmFyIGw9ZS5wZW5kaW5nO2lmKGUucGVuZGluZz1udWxsLGwhPT1udWxsKXtsPWwubmV4dDtkbyB0LnN0YXR1cz0icmVqZWN0ZWQiLHQucmVhc29uPW4sdzAodCksdD10Lm5leHQ7d2hpbGUodCE9PWwpfWUuYWN0aW9uPW51bGx9ZnVuY3Rpb24gdzAoZSl7ZT1lLmxpc3RlbmVycztmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfWZ1bmN0aW9uIEUwKGUsdCl7cmV0dXJuIHR9ZnVuY3Rpb24gUjAoZSx0KXtpZihOZSl7dmFyIG49JGUuZm9ybVN0YXRlO2lmKG4hPT1udWxsKXtlOnt2YXIgbD1fZTtpZihOZSl7aWYoSmUpe3Q6e2Zvcih2YXIgcj1KZSxjPVNuO3Iubm9kZVR5cGUhPT04Oyl7aWYoIWMpe3I9bnVsbDticmVhayB0fWlmKHI9VG4oci5uZXh0U2libGluZykscj09PW51bGwpe3I9bnVsbDticmVhayB0fX1jPXIuZGF0YSxyPWM9PT0iRiEifHxjPT09IkYiP3I6bnVsbH1pZihyKXtKZT1UbihyLm5leHRTaWJsaW5nKSxsPXIuZGF0YT09PSJGISI7YnJlYWsgZX19cWwobCl9bD0hMX1sJiYodD1uWzBdKX19cmV0dXJuIG49VXQoKSxuLm1lbW9pemVkU3RhdGU9bi5iYXNlU3RhdGU9dCxsPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6RTAsbGFzdFJlbmRlcmVkU3RhdGU6dH0sbi5xdWV1ZT1sLG49cTAuYmluZChudWxsLF9lLGwpLGwuZGlzcGF0Y2g9bixsPVVkKCExKSxjPVlkLmJpbmQobnVsbCxfZSwhMSxsLnF1ZXVlKSxsPVV0KCkscj17c3RhdGU6dCxkaXNwYXRjaDpudWxsLGFjdGlvbjplLHBlbmRpbmc6bnVsbH0sbC5xdWV1ZT1yLG49bU4uYmluZChudWxsLF9lLHIsYyxuKSxyLmRpc3BhdGNoPW4sbC5tZW1vaXplZFN0YXRlPWUsW3QsbiwhMV19ZnVuY3Rpb24gXzAoZSl7dmFyIHQ9Y3QoKTtyZXR1cm4gTzAodCxRZSxlKX1mdW5jdGlvbiBPMChlLHQsbil7aWYodD1rZChlLHQsRTApWzBdLGU9cWMoVGwpWzBdLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiIpdHJ5e3ZhciBsPXFyKHQpfWNhdGNoKGgpe3Rocm93IGg9PT1Bbz9rYzpofWVsc2UgbD10O3Q9Y3QoKTt2YXIgcj10LnF1ZXVlLGM9ci5kaXNwYXRjaDtyZXR1cm4gbiE9PXQubWVtb2l6ZWRTdGF0ZSYmKF9lLmZsYWdzfD0yMDQ4LE1vKDkse2Rlc3Ryb3k6dm9pZCAwfSxoTi5iaW5kKG51bGwscixuKSxudWxsKSksW2wsYyxlXX1mdW5jdGlvbiBoTihlLHQpe2UuYWN0aW9uPXR9ZnVuY3Rpb24gQTAoZSl7dmFyIHQ9Y3QoKSxuPVFlO2lmKG4hPT1udWxsKXJldHVybiBPMCh0LG4sZSk7Y3QoKSx0PXQubWVtb2l6ZWRTdGF0ZSxuPWN0KCk7dmFyIGw9bi5xdWV1ZS5kaXNwYXRjaDtyZXR1cm4gbi5tZW1vaXplZFN0YXRlPWUsW3QsbCwhMV19ZnVuY3Rpb24gTW8oZSx0LG4sbCl7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTpuLGRlcHM6bCxpbnN0OnQsbmV4dDpudWxsfSx0PV9lLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsJiYodD1WYygpLF9lLnVwZGF0ZVF1ZXVlPXQpLG49dC5sYXN0RWZmZWN0LG49PT1udWxsP3QubGFzdEVmZmVjdD1lLm5leHQ9ZToobD1uLm5leHQsbi5uZXh0PWUsZS5uZXh0PWwsdC5sYXN0RWZmZWN0PWUpLGV9ZnVuY3Rpb24gTjAoKXtyZXR1cm4gY3QoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIFhjKGUsdCxuLGwpe3ZhciByPVV0KCk7X2UuZmxhZ3N8PWUsci5tZW1vaXplZFN0YXRlPU1vKDF8dCx7ZGVzdHJveTp2b2lkIDB9LG4sbD09PXZvaWQgMD9udWxsOmwpfWZ1bmN0aW9uIEtjKGUsdCxuLGwpe3ZhciByPWN0KCk7bD1sPT09dm9pZCAwP251bGw6bDt2YXIgYz1yLm1lbW9pemVkU3RhdGUuaW5zdDtRZSE9PW51bGwmJmwhPT1udWxsJiZBZChsLFFlLm1lbW9pemVkU3RhdGUuZGVwcyk/ci5tZW1vaXplZFN0YXRlPU1vKHQsYyxuLGwpOihfZS5mbGFnc3w9ZSxyLm1lbW9pemVkU3RhdGU9TW8oMXx0LGMsbixsKSl9ZnVuY3Rpb24gRDAoZSx0KXtYYyg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBCZChlLHQpe0tjKDIwNDgsOCxlLHQpfWZ1bmN0aW9uIHBOKGUpe19lLmZsYWdzfD00O3ZhciB0PV9lLnVwZGF0ZVF1ZXVlO2lmKHQ9PT1udWxsKXQ9VmMoKSxfZS51cGRhdGVRdWV1ZT10LHQuZXZlbnRzPVtlXTtlbHNle3ZhciBuPXQuZXZlbnRzO249PT1udWxsP3QuZXZlbnRzPVtlXTpuLnB1c2goZSl9fWZ1bmN0aW9uIGowKGUpe3ZhciB0PWN0KCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gcE4oe3JlZjp0LG5leHRJbXBsOmV9KSxmdW5jdGlvbigpe2lmKChJZSYyKSE9PTApdGhyb3cgRXJyb3IoaSg0NDApKTtyZXR1cm4gdC5pbXBsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1mdW5jdGlvbiBNMChlLHQpe3JldHVybiBLYyg0LDIsZSx0KX1mdW5jdGlvbiB6MChlLHQpe3JldHVybiBLYyg0LDQsZSx0KX1mdW5jdGlvbiBrMChlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXtlPWUoKTt2YXIgbj10KGUpO3JldHVybiBmdW5jdGlvbigpe3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTp0KG51bGwpfX1pZih0IT1udWxsKXJldHVybiBlPWUoKSx0LmN1cnJlbnQ9ZSxmdW5jdGlvbigpe3QuY3VycmVudD1udWxsfX1mdW5jdGlvbiBMMChlLHQsbil7bj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxLYyg0LDQsazAuYmluZChudWxsLHQsZSksbil9ZnVuY3Rpb24gSWQoKXt9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgbj1jdCgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIGw9bi5tZW1vaXplZFN0YXRlO3JldHVybiB0IT09bnVsbCYmQWQodCxsWzFdKT9sWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gSDAoZSx0KXt2YXIgbj1jdCgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIGw9bi5tZW1vaXplZFN0YXRlO2lmKHQhPT1udWxsJiZBZCh0LGxbMV0pKXJldHVybiBsWzBdO2lmKGw9ZSgpLElhKXtJbCghMCk7dHJ5e2UoKX1maW5hbGx5e0lsKCExKX19cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT1bbCx0XSxsfWZ1bmN0aW9uIFBkKGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMHx8KENsJjEwNzM3NDE4MjQpIT09MCYmKExlJjI2MTkzMCk9PT0wP2UubWVtb2l6ZWRTdGF0ZT10OihlLm1lbW9pemVkU3RhdGU9bixlPVF4KCksX2UubGFuZXN8PWUsbGF8PWUsbil9ZnVuY3Rpb24gQjAoZSx0LG4sbCl7cmV0dXJuIGFuKG4sdCk/bjokbC5jdXJyZW50IT09bnVsbD8oZT1QZChlLG4sbCksYW4oZSx0KXx8KG10PSEwKSxlKTooQ2wmMTA2KT09PTB8fChDbCYxMDczNzQxODI0KSE9PTAmJihMZSYyNjE5MzApPT09MD8obXQ9ITAsZS5tZW1vaXplZFN0YXRlPW4pOihlPVF4KCksX2UubGFuZXN8PWUsbGF8PWUsdCl9ZnVuY3Rpb24gSTAoZSx0LG4sbCxyKXt2YXIgYz1pZS5wO2llLnA9YyE9PTAmJjg+Yz9jOjg7dmFyIGg9dGUuVCxTPXt9O1MudHlwZXM9aCE9PW51bGw/aC50eXBlczpudWxsLHRlLlQ9UyxZZChlLCExLHQsbik7dHJ5e3ZhciBfPXIoKSxMPXRlLlM7aWYoTCE9PW51bGwmJkwoUyxfKSxfIT09bnVsbCYmdHlwZW9mIF89PSJvYmplY3QiJiZ0eXBlb2YgXy50aGVuPT0iZnVuY3Rpb24iKXt2YXIgVj1zTihfLGwpO1hyKGUsdCxWLHNuKGUpKX1lbHNlIFhyKGUsdCxsLHNuKGUpKX1jYXRjaChaKXtYcihlLHQse3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpafSxzbigpKX1maW5hbGx5e2llLnA9YyxoIT09bnVsbCYmUy50eXBlcyE9PW51bGwmJihoLnR5cGVzPVMudHlwZXMpLHRlLlQ9aH19ZnVuY3Rpb24gdk4oKXt9ZnVuY3Rpb24gR2QoZSx0LG4sbCl7aWYoZS50YWchPT01KXRocm93IEVycm9yKGkoNDc2KSk7dmFyIHI9UDAoZSkucXVldWU7STAoZSxyLHQsYmUsbj09PW51bGw/dk46ZnVuY3Rpb24oKXtyZXR1cm4gRzAoZSksbihsKX0pfWZ1bmN0aW9uIFAwKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZih0IT09bnVsbClyZXR1cm4gdDt0PXttZW1vaXplZFN0YXRlOmJlLGJhc2VTdGF0ZTpiZSxiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlRsLGxhc3RSZW5kZXJlZFN0YXRlOmJlfSxuZXh0Om51bGx9O3ZhciBuPXt9O3JldHVybiB0Lm5leHQ9e21lbW9pemVkU3RhdGU6bixiYXNlU3RhdGU6bixiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlRsLGxhc3RSZW5kZXJlZFN0YXRlOm59LG5leHQ6bnVsbH0sZS5tZW1vaXplZFN0YXRlPXQsZT1lLmFsdGVybmF0ZSxlIT09bnVsbCYmKGUubWVtb2l6ZWRTdGF0ZT10KSx0fWZ1bmN0aW9uIEcwKGUpe3ZhciB0PVAwKGUpO3QubmV4dD09PW51bGwmJih0PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpLFhyKGUsdC5uZXh0LnF1ZXVlLHt9LHNuKCkpfWZ1bmN0aW9uIFZkKCl7cmV0dXJuIF90KEpvKX1mdW5jdGlvbiBWMCgpe3JldHVybiBjdCgpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gWTAoKXtyZXR1cm4gY3QoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGdOKGUpe2Zvcih2YXIgdD1lLnJldHVybjt0IT09bnVsbDspe3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpjYXNlIDM6dmFyIG49c24oKTtlPVpsKG4pO3ZhciBsPUZsKHQsZSxuKTtsIT09bnVsbCYmKCR0KGwsdCxuKSxJcihsLHQsbikpLHQ9e2NhY2hlOmdkKCl9LGUucGF5bG9hZD10O3JldHVybn10PXQucmV0dXJufX1mdW5jdGlvbiB5TihlLHQsbil7dmFyIGw9c24oKTtuPXtsYW5lOmwscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LFFjKGUpP1gwKHQsbik6KG49Y2QoZSx0LG4sbCksbiE9PW51bGwmJigkdChuLGUsbCksSzAobix0LGwpKSl9ZnVuY3Rpb24gcTAoZSx0LG4pe3ZhciBsPXNuKCk7WHIoZSx0LG4sbCl9ZnVuY3Rpb24gWHIoZSx0LG4sbCl7dmFyIHI9e2xhbmU6bCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjpuLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoUWMoZSkpWDAodCxyKTtlbHNle3ZhciBjPWUuYWx0ZXJuYXRlO2lmKGUubGFuZXM9PT0wJiYoYz09PW51bGx8fGMubGFuZXM9PT0wKSYmKGM9dC5sYXN0UmVuZGVyZWRSZWR1Y2VyLGMhPT1udWxsKSl0cnl7dmFyIGg9dC5sYXN0UmVuZGVyZWRTdGF0ZSxTPWMoaCxuKTtpZihyLmhhc0VhZ2VyU3RhdGU9ITAsci5lYWdlclN0YXRlPVMsYW4oUyxoKSlyZXR1cm4gRWMoZSx0LHIsMCksJGU9PT1udWxsJiZ3YygpLCExfWNhdGNoe31pZihuPWNkKGUsdCxyLGwpLG4hPT1udWxsKXJldHVybiAkdChuLGUsbCksSzAobix0LGwpLCEwfXJldHVybiExfWZ1bmN0aW9uIFlkKGUsdCxuLGwpe2lmKGw9e2xhbmU6MixyZXZlcnRMYW5lOnptKCksZ2VzdHVyZTpudWxsLGFjdGlvbjpsLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sUWMoZSkpe2lmKHQpdGhyb3cgRXJyb3IoaSg0NzkpKX1lbHNlIHQ9Y2QoZSxuLGwsMiksdCE9PW51bGwmJiR0KHQsZSwyKX1mdW5jdGlvbiBRYyhlKXt2YXIgdD1lLmFsdGVybmF0ZTtyZXR1cm4gZT09PV9lfHx0IT09bnVsbCYmdD09PV9lfWZ1bmN0aW9uIFgwKGUsdCl7RG89UGM9ITA7dmFyIG49ZS5wZW5kaW5nO249PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9bi5uZXh0LG4ubmV4dD10KSxlLnBlbmRpbmc9dH1mdW5jdGlvbiBLMChlLHQsbil7aWYoKG4mNDE5NDA0OCkhPT0wKXt2YXIgbD10LmxhbmVzO2wmPWUucGVuZGluZ0xhbmVzLG58PWwsdC5sYW5lcz1uLFF5KGUsbil9fXZhciBaYz17cmVhZENvbnRleHQ6X3QsdXNlOlljLHVzZUNhbGxiYWNrOmx0LHVzZUNvbnRleHQ6bHQsdXNlRWZmZWN0Omx0LHVzZUltcGVyYXRpdmVIYW5kbGU6bHQsdXNlTGF5b3V0RWZmZWN0Omx0LHVzZUluc2VydGlvbkVmZmVjdDpsdCx1c2VNZW1vOmx0LHVzZVJlZHVjZXI6bHQsdXNlUmVmOmx0LHVzZVN0YXRlOmx0LHVzZURlYnVnVmFsdWU6bHQsdXNlRGVmZXJyZWRWYWx1ZTpsdCx1c2VUcmFuc2l0aW9uOmx0LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmx0LHVzZUlkOmx0LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmx0LHVzZUZvcm1TdGF0ZTpsdCx1c2VBY3Rpb25TdGF0ZTpsdCx1c2VPcHRpbWlzdGljOmx0LHVzZU1lbW9DYWNoZTpsdCx1c2VDYWNoZVJlZnJlc2g6bHQsdXNlRWZmZWN0RXZlbnQ6bHR9LFEwPXtyZWFkQ29udGV4dDpfdCx1c2U6WWMsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVXQoKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0Ol90LHVzZUVmZmVjdDpEMCx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLFhjKDQxOTQzMDgsNCxrMC5iaW5kKG51bGwsdCxlKSxuKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFhjKDQxOTQzMDgsNCxlLHQpfSx1c2VJbnNlcnRpb25FZmZlY3Q6ZnVuY3Rpb24oZSx0KXtYYyg0LDIsZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3ZhciBuPVV0KCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgbD1lKCk7aWYoSWEpe0lsKCEwKTt0cnl7ZSgpfWZpbmFsbHl7SWwoITEpfX1yZXR1cm4gbi5tZW1vaXplZFN0YXRlPVtsLHRdLGx9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPVV0KCk7aWYobiE9PXZvaWQgMCl7dmFyIHI9bih0KTtpZihJYSl7SWwoITApO3RyeXtuKHQpfWZpbmFsbHl7SWwoITEpfX19ZWxzZSByPXQ7cmV0dXJuIGwubWVtb2l6ZWRTdGF0ZT1sLmJhc2VTdGF0ZT1yLGU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnJ9LGwucXVldWU9ZSxlPWUuZGlzcGF0Y2g9eU4uYmluZChudWxsLF9lLGUpLFtsLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1VdCgpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpmdW5jdGlvbihlKXtlPVVkKGUpO3ZhciB0PWUucXVldWUsbj1xMC5iaW5kKG51bGwsX2UsdCk7cmV0dXJuIHQuZGlzcGF0Y2g9bixbZS5tZW1vaXplZFN0YXRlLG5dfSx1c2VEZWJ1Z1ZhbHVlOklkLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1VdCgpO3JldHVybiBQZChuLGUsdCl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1VZCghMSk7cmV0dXJuIGU9STAuYmluZChudWxsLF9lLGUucXVldWUsITAsITEpLFV0KCkubWVtb2l6ZWRTdGF0ZT1lLFshMSxlXX0sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPV9lLHI9VXQoKTtpZihOZSl7aWYobj09PXZvaWQgMCl0aHJvdyBFcnJvcihpKDQwNykpO249bigpfWVsc2V7aWYobj10KCksJGU9PT1udWxsKXRocm93IEVycm9yKGkoMzQ5KSk7KExlJjEyNykhPT0wfHxwMChsLHQsbil9ci5tZW1vaXplZFN0YXRlPW47dmFyIGM9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIHIucXVldWU9YyxEMChnMC5iaW5kKG51bGwsbCxjLGUpLFtlXSksbC5mbGFnc3w9MjA0OCxNbyg5LHtkZXN0cm95OnZvaWQgMH0sdjAuYmluZChudWxsLGwsYyxuLHQpLG51bGwpLG59LHVzZUlkOmZ1bmN0aW9uKCl7dmFyIGU9VXQoKSx0PSRlLmlkZW50aWZpZXJQcmVmaXg7aWYoTmUpe3ZhciBuPVluLGw9Vm47bj0obCZ+KDE8PDMyLW5uKGwpLTEpKS50b1N0cmluZygzMikrbix0PSJfIit0KyJSXyIrbixuPUdjKyssMDxuJiYodCs9IkgiK24udG9TdHJpbmcoMzIpKSx0Kz0iXyJ9ZWxzZSBuPWZOKyssdD0iXyIrdCsicl8iK24udG9TdHJpbmcoMzIpKyJfIjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOlZkLHVzZUZvcm1TdGF0ZTpSMCx1c2VBY3Rpb25TdGF0ZTpSMCx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUpe3ZhciB0PVV0KCk7dC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWU7dmFyIG49e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpudWxsLGxhc3RSZW5kZXJlZFN0YXRlOm51bGx9O3JldHVybiB0LnF1ZXVlPW4sdD1ZZC5iaW5kKG51bGwsX2UsITAsbiksbi5kaXNwYXRjaD10LFtlLHRdfSx1c2VNZW1vQ2FjaGU6emQsdXNlQ2FjaGVSZWZyZXNoOmZ1bmN0aW9uKCl7cmV0dXJuIFV0KCkubWVtb2l6ZWRTdGF0ZT1nTi5iaW5kKG51bGwsX2UpfSx1c2VFZmZlY3RFdmVudDpmdW5jdGlvbihlKXt2YXIgdD1VdCgpLG49e2ltcGw6ZX07cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1uLGZ1bmN0aW9uKCl7aWYoKEllJjIpIT09MCl0aHJvdyBFcnJvcihpKDQ0MCkpO3JldHVybiBuLmltcGwuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sWjA9e3JlYWRDb250ZXh0Ol90LHVzZTpZYyx1c2VDYWxsYmFjazpVMCx1c2VDb250ZXh0Ol90LHVzZUVmZmVjdDpCZCx1c2VJbXBlcmF0aXZlSGFuZGxlOkwwLHVzZUluc2VydGlvbkVmZmVjdDpNMCx1c2VMYXlvdXRFZmZlY3Q6ejAsdXNlTWVtbzpIMCx1c2VSZWR1Y2VyOnFjLHVzZVJlZjpOMCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBxYyhUbCl9LHVzZURlYnVnVmFsdWU6SWQsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWN0KCk7cmV0dXJuIEIwKG4sUWUubWVtb2l6ZWRTdGF0ZSxlLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9cWMoVGwpWzBdLHQ9Y3QoKS5tZW1vaXplZFN0YXRlO3JldHVyblt0eXBlb2YgZT09ImJvb2xlYW4iP2U6cXIoZSksdF19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmgwLHVzZUlkOlYwLHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOlZkLHVzZUZvcm1TdGF0ZTpfMCx1c2VBY3Rpb25TdGF0ZTpfMCx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUsdCl7dmFyIG49Y3QoKTtyZXR1cm4geDAobixRZSxlLHQpfSx1c2VNZW1vQ2FjaGU6emQsdXNlQ2FjaGVSZWZyZXNoOlkwLHVzZUVmZmVjdEV2ZW50OmowfSxiTj17cmVhZENvbnRleHQ6X3QsdXNlOlljLHVzZUNhbGxiYWNrOlUwLHVzZUNvbnRleHQ6X3QsdXNlRWZmZWN0OkJkLHVzZUltcGVyYXRpdmVIYW5kbGU6TDAsdXNlSW5zZXJ0aW9uRWZmZWN0Ok0wLHVzZUxheW91dEVmZmVjdDp6MCx1c2VNZW1vOkgwLHVzZVJlZHVjZXI6TGQsdXNlUmVmOk4wLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIExkKFRsKX0sdXNlRGVidWdWYWx1ZTpJZCx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49Y3QoKTtyZXR1cm4gUWU9PT1udWxsP1BkKG4sZSx0KTpCMChuLFFlLm1lbW9pemVkU3RhdGUsZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPUxkKFRsKVswXSx0PWN0KCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdHlwZW9mIGU9PSJib29sZWFuIj9lOnFyKGUpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpoMCx1c2VJZDpWMCx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpWZCx1c2VGb3JtU3RhdGU6QTAsdXNlQWN0aW9uU3RhdGU6QTAsdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLHQpe3ZhciBuPWN0KCk7cmV0dXJuIFFlIT09bnVsbD94MChuLFFlLGUsdCk6KG4uYmFzZVN0YXRlPWUsW2Usbi5xdWV1ZS5kaXNwYXRjaF0pfSx1c2VNZW1vQ2FjaGU6emQsdXNlQ2FjaGVSZWZyZXNoOlkwLHVzZUVmZmVjdEV2ZW50OmowfTtmdW5jdGlvbiBxZChlLHQsbixsKXt0PWUubWVtb2l6ZWRTdGF0ZSxuPW4obCx0KSxuPW49PW51bGw/dDpVKHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sZS5sYW5lcz09PTAmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1uKX12YXIgWGQ9e2VucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgbD1zbigpLHI9WmwobCk7ci5wYXlsb2FkPXQsbiE9bnVsbCYmKHIuY2FsbGJhY2s9biksdD1GbChlLHIsbCksdCE9PW51bGwmJigkdCh0LGUsbCksSXIodCxlLGwpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgbD1zbigpLHI9WmwobCk7ci50YWc9MSxyLnBheWxvYWQ9dCxuIT1udWxsJiYoci5jYWxsYmFjaz1uKSx0PUZsKGUscixsKSx0IT09bnVsbCYmKCR0KHQsZSxsKSxJcih0LGUsbCkpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPXNuKCksbD1abChuKTtsLnRhZz0yLHQhPW51bGwmJihsLmNhbGxiYWNrPXQpLHQ9RmwoZSxsLG4pLHQhPT1udWxsJiYoJHQodCxlLG4pLElyKHQsZSxuKSl9fTtmdW5jdGlvbiBGMChlLHQsbixsLHIsYyxoKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUobCxjLGgpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hanIobixsKXx8IWpyKHIsYyk6ITB9ZnVuY3Rpb24gJDAoZSx0LG4sbCl7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLGwpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sbCksdC5zdGF0ZSE9PWUmJlhkLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIFBhKGUsdCl7dmFyIG49dDtpZigicmVmImluIHQpe249e307Zm9yKHZhciBsIGluIHQpbCE9PSJyZWYiJiYobltsXT10W2xdKX1pZihlPWUuZGVmYXVsdFByb3BzKXtuPT09dCYmKG49VSh7fSxuKSk7Zm9yKHZhciByIGluIGUpbltyXT09PXZvaWQgMCYmKG5bcl09ZVtyXSl9cmV0dXJuIG59ZnVuY3Rpb24gSjAoZSl7VGMoZSl9ZnVuY3Rpb24gVzAoZSl7Y29uc29sZS5lcnJvcihlKX1mdW5jdGlvbiBleChlKXtUYyhlKX1mdW5jdGlvbiBGYyhlLHQpe3RyeXt2YXIgbj1lLm9uVW5jYXVnaHRFcnJvcjtuKHQudmFsdWUse2NvbXBvbmVudFN0YWNrOnQuc3RhY2t9KX1jYXRjaChsKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgbH0pfX1mdW5jdGlvbiB0eChlLHQsbil7dHJ5e3ZhciBsPWUub25DYXVnaHRFcnJvcjtsKG4udmFsdWUse2NvbXBvbmVudFN0YWNrOm4uc3RhY2ssZXJyb3JCb3VuZGFyeTp0LnRhZz09PTE/dC5zdGF0ZU5vZGU6bnVsbH0pfWNhdGNoKHIpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyByfSl9fWZ1bmN0aW9uIEtkKGUsdCxuKXtyZXR1cm4gbj1abChuKSxuLnRhZz0zLG4ucGF5bG9hZD17ZWxlbWVudDpudWxsfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7RmMoZSx0KX0sbn1mdW5jdGlvbiBueChlKXtyZXR1cm4gZT1abChlKSxlLnRhZz0zLGV9ZnVuY3Rpb24gbHgoZSx0LG4sbCl7dmFyIHI9bi50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIGM9bC52YWx1ZTtlLnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcihjKX0sZS5jYWxsYmFjaz1mdW5jdGlvbigpe3R4KHQsbixsKX19dmFyIGg9bi5zdGF0ZU5vZGU7aCE9PW51bGwmJnR5cGVvZiBoLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoZS5jYWxsYmFjaz1mdW5jdGlvbigpe3R4KHQsbixsKSx0eXBlb2YgciE9ImZ1bmN0aW9uIiYmKGFhPT09bnVsbD9hYT1uZXcgU2V0KFt0aGlzXSk6YWEuYWRkKHRoaXMpKTt2YXIgUz1sLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2gobC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6UyE9PW51bGw/UzoiIn0pfSl9ZnVuY3Rpb24geE4oZSx0LG4sbCxyKXtpZihuLmZsYWdzfD0zMjc2OCxsIT09bnVsbCYmdHlwZW9mIGw9PSJvYmplY3QiJiZ0eXBlb2YgbC50aGVuPT0iZnVuY3Rpb24iKXtpZih0PW4uYWx0ZXJuYXRlLHQhPT1udWxsJiZNYSh0LG4sciwhMCksbj1PdC5jdXJyZW50LG4hPT1udWxsKXtzd2l0Y2gobi50YWcpe2Nhc2UgMzE6Y2FzZSAxMzpjYXNlIDE5OnJldHVybiBrdD09PW51bGw/Z3UoKTpuLmFsdGVybmF0ZT09PW51bGwmJmF0PT09MCYmKGF0PTMpLG4uZmxhZ3MmPS0yNTcsbi5mbGFnc3w9NjU1MzYsbi5sYW5lcz1yLGw9PT1MYz9uLmZsYWdzfD0xNjM4NDoodD1uLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsP24udXBkYXRlUXVldWU9bmV3IFNldChbbF0pOnQuYWRkKGwpLERtKGUsbCxyKSksITE7Y2FzZSAyMjpyZXR1cm4gbi5mbGFnc3w9NjU1MzYsbD09PUxjP24uZmxhZ3N8PTE2Mzg0Oih0PW4udXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e3RyYW5zaXRpb25zOm51bGwsbWFya2VySW5zdGFuY2VzOm51bGwscmV0cnlRdWV1ZTpuZXcgU2V0KFtsXSl9LG4udXBkYXRlUXVldWU9dCk6KG49dC5yZXRyeVF1ZXVlLG49PT1udWxsP3QucmV0cnlRdWV1ZT1uZXcgU2V0KFtsXSk6bi5hZGQobCkpLERtKGUsbCxyKSksITF9dGhyb3cgRXJyb3IoaSg0MzUsbi50YWcpKX1yZXR1cm4gRG0oZSxsLHIpLGd1KCksITF9aWYoTmUpcmV0dXJuIHQ9T3QuY3VycmVudCx0IT09bnVsbD8oKHQuZmxhZ3MmNjU1MzYpPT09MCYmKHQuZmxhZ3N8PTI1NiksdC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1yLGwhPT1tZCYmKGU9RXJyb3IoaSg0MjIpLHtjYXVzZTpsfSksa3IoeW4oZSxuKSkpKToobCE9PW1kJiYodD1FcnJvcihpKDQyMykse2NhdXNlOmx9KSxrcih5bih0LG4pKSksZT1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmxhZ3N8PTY1NTM2LHImPS1yLGUubGFuZXN8PXIsbD15bihsLG4pLHI9S2QoZS5zdGF0ZU5vZGUsbCxyKSxUZChlLHIpLGF0IT09NCYmKGF0PTIpKSwhMTt2YXIgYz1FcnJvcihpKDUyMCkse2NhdXNlOmx9KTtpZihjPXluKGMsbiksZWk9PT1udWxsP2VpPVtjXTplaS5wdXNoKGMpLGF0IT09NCYmKGF0PTIpLHQ9PT1udWxsKXJldHVybiEwO2w9eW4obCxuKSxuPXQ7ZG97c3dpdGNoKG4udGFnKXtjYXNlIDM6cmV0dXJuIG4uZmxhZ3N8PTY1NTM2LGU9ciYtcixuLmxhbmVzfD1lLGU9S2Qobi5zdGF0ZU5vZGUsbCxlKSxUZChuLGUpLCExO2Nhc2UgMTppZih0PW4udHlwZSxjPW4uc3RhdGVOb2RlLChuLmZsYWdzJjEyOCk9PT0wJiYodHlwZW9mIHQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHxjIT09bnVsbCYmdHlwZW9mIGMuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihhYT09PW51bGx8fCFhYS5oYXMoYykpKSlyZXR1cm4gbi5mbGFnc3w9NjU1MzYsciY9LXIsbi5sYW5lc3w9cixyPW54KHIpLGx4KHIsZSxuLGwpLFRkKG4sciksITE7YnJlYWs7Y2FzZSAyMjppZihuLm1lbW9pemVkU3RhdGUhPT1udWxsKXJldHVybiBuLmZsYWdzfD02NTUzNiwhMX1uPW4ucmV0dXJufXdoaWxlKG4hPT1udWxsKTtyZXR1cm4hMX12YXIgUWQ9RXJyb3IoaSg0NjEpKSxtdD0hMTtmdW5jdGlvbiB5dChlLHQsbixsKXt0LmNoaWxkPWU9PT1udWxsP2kwKHQsbnVsbCxuLGwpOkJhKHQsZS5jaGlsZCxuLGwpfWZ1bmN0aW9uIGF4KGUsdCxuLGwscil7bj1uLnJlbmRlcjt2YXIgYz10LnJlZjtpZigicmVmImluIGwpe3ZhciBoPXt9O2Zvcih2YXIgUyBpbiBsKVMhPT0icmVmIiYmKGhbU109bFtTXSl9ZWxzZSBoPWw7cmV0dXJuIHphKHQpLGw9TmQoZSx0LG4saCxjLHIpLFM9RGQoKSxlIT09bnVsbCYmIW10PyhqZChlLHQsciksd2woZSx0LHIpKTooTmUmJlMmJkFjKHQpLHQuZmxhZ3N8PTEseXQoZSx0LGwsciksdC5jaGlsZCl9ZnVuY3Rpb24gb3goZSx0LG4sbCxyKXtpZihlPT09bnVsbCl7dmFyIGM9bi50eXBlO3JldHVybiB0eXBlb2YgYz09ImZ1bmN0aW9uIiYmIXVkKGMpJiZjLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbD8odC50YWc9MTUsdC50eXBlPWMscngoZSx0LGMsbCxyKSk6KGU9X2Mobi50eXBlLG51bGwsbCx0LHQubW9kZSxyKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSl9aWYoYz1lLmNoaWxkLCFubShlLHIpKXt2YXIgaD1jLm1lbW9pemVkUHJvcHM7aWYobj1uLmNvbXBhcmUsbj1uIT09bnVsbD9uOmpyLG4oaCxsKSYmZS5yZWY9PT10LnJlZilyZXR1cm4gd2woZSx0LHIpfXJldHVybiB0LmZsYWdzfD0xLGU9eWwoYyxsKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiByeChlLHQsbixsLHIpe2lmKGUhPT1udWxsKXt2YXIgYz1lLm1lbW9pemVkUHJvcHM7aWYoanIoYyxsKSYmZS5yZWY9PT10LnJlZilpZihtdD0hMSx0LnBlbmRpbmdQcm9wcz1sPWMsbm0oZSxyKSkoZS5mbGFncyYxMzEwNzIpIT09MCYmKG10PSEwKTtlbHNlIHJldHVybiB0LmxhbmVzPWUubGFuZXMsd2woZSx0LHIpfXJldHVybiBaZChlLHQsbixsLHIpfWZ1bmN0aW9uIGl4KGUsdCxuLGwpe3ZhciByPWwuY2hpbGRyZW4sYz1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbDtpZihlPT09bnVsbCYmdC5zdGF0ZU5vZGU9PT1udWxsJiYodC5zdGF0ZU5vZGU9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbH0pLGwubW9kZT09PSJoaWRkZW4iKXtpZigodC5mbGFncyYxMjgpIT09MCl7aWYoYz1jIT09bnVsbD9jLmJhc2VMYW5lc3xuOm4sZSE9PW51bGwpe2ZvcihsPXQuY2hpbGQ9ZS5jaGlsZCxyPTA7bCE9PW51bGw7KXI9cnxsLmxhbmVzfGwuY2hpbGRMYW5lcyxsPWwuc2libGluZztsPXImfmN9ZWxzZSBsPTAsdC5jaGlsZD1udWxsO3JldHVybiBjeChlLHQsYyxuLGwpfWlmKChuJjUzNjg3MDkxMikhPT0wKXQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGx9LGUhPT1udWxsJiZ6Yyh0LGMhPT1udWxsP2MuY2FjaGVQb29sOm51bGwpLGMhPT1udWxsP3MwKHQsYyk6RWQoKSxmMCh0KTtlbHNlIHJldHVybiBsPXQubGFuZXM9NTM2ODcwOTEyLGN4KGUsdCxjIT09bnVsbD9jLmJhc2VMYW5lc3xuOm4sbixsKX1lbHNlIGMhPT1udWxsPyh6Yyh0LGMuY2FjaGVQb29sKSxzMCh0LGMpLFdsKCksdC5tZW1vaXplZFN0YXRlPW51bGwpOihlIT09bnVsbCYmemModCxudWxsKSxFZCgpLFdsKCkpO3JldHVybiB5dChlLHQscixuKSx0LmNoaWxkfWZ1bmN0aW9uIEtyKGUsdCl7cmV0dXJuIGUhPT1udWxsJiZlLnRhZz09PTIyfHx0LnN0YXRlTm9kZSE9PW51bGx8fCh0LnN0YXRlTm9kZT17X3Zpc2liaWxpdHk6MSxfcGVuZGluZ01hcmtlcnM6bnVsbCxfcmV0cnlDYWNoZTpudWxsLF90cmFuc2l0aW9uczpudWxsfSksdC5zaWJsaW5nfWZ1bmN0aW9uIGN4KGUsdCxuLGwscil7dmFyIGM9YmQoKTtyZXR1cm4gYz1jPT09bnVsbD9udWxsOntwYXJlbnQ6ZnQuX2N1cnJlbnRWYWx1ZSxwb29sOmN9LHQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOm4sY2FjaGVQb29sOmN9LGUhPT1udWxsJiZ6Yyh0LG51bGwpLEVkKCksZjAodCksZSE9PW51bGwmJk1hKGUsdCxsLCEwKSx0LmNoaWxkTGFuZXM9cixudWxsfWZ1bmN0aW9uICRjKGUsdCl7cmV0dXJuIHQ9SmMoe21vZGU6dC5tb2RlLGNoaWxkcmVuOnQuY2hpbGRyZW59LGUubW9kZSksdC5yZWY9ZS5yZWYsZS5jaGlsZD10LHQucmV0dXJuPWUsdH1mdW5jdGlvbiB1eChlLHQsbil7cmV0dXJuIEJhKHQsZS5jaGlsZCxudWxsLG4pLGU9JGModCx0LnBlbmRpbmdQcm9wcyksZS5mbGFnc3w9Mixvbih0KSx0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIFNOKGUsdCxuKXt2YXIgbD10LnBlbmRpbmdQcm9wcyxyPSh0LmZsYWdzJjEyOCkhPT0wO2lmKHQuZmxhZ3MmPS0xMjksZT09PW51bGwpe2lmKE5lKXtpZihsLm1vZGU9PT0iaGlkZGVuIilyZXR1cm4gZT0kYyh0LGwpLHQubGFuZXM9NTM2ODcwOTEyLGUubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGx9LEtyKG51bGwsZSk7aWYoX2QodCksKGU9SmUpPyhlPWtTKGUsU24pLGU9ZSE9PW51bGwmJmUuZGF0YT09PSImIj9lOm51bGwsZSE9PW51bGwmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpWbCE9PW51bGw/e2lkOlZuLG92ZXJmbG93OllufTpudWxsLHJldHJ5TGFuZTo1MzY4NzA5MTIsaHlkcmF0aW9uRXJyb3JzOm51bGx9LG49WGIoZSksbi5yZXR1cm49dCx0LmNoaWxkPW4seHQ9dCxKZT1udWxsKSk6ZT1udWxsLGU9PT1udWxsKXRocm93IHFsKHQpO3JldHVybiB0LmxhbmVzPTUzNjg3MDkxMixudWxsfXJldHVybiAkYyh0LGwpfXZhciBjPWUubWVtb2l6ZWRTdGF0ZTtpZihjIT09bnVsbCl7dmFyIGg9Yy5kZWh5ZHJhdGVkO2lmKF9kKHQpLHIpaWYodC5mbGFncyYyNTYpdC5mbGFncyY9LTI1Nyx0PXV4KGUsdCxuKTtlbHNlIGlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpdC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCx0PW51bGw7ZWxzZSB0aHJvdyBFcnJvcihpKDU1OCkpO2Vsc2UgaWYobXR8fE1hKGUsdCxuLCExKSxyPShuJmUuY2hpbGRMYW5lcykhPT0wLG10fHxyKXtpZigkbC5jdXJyZW50PT09bnVsbCl7aWYobD0kZSxsIT09bnVsbCYmKGg9WnkobCxuKSxoIT09MCYmaCE9PWMucmV0cnlMYW5lKSl0aHJvdyBjLnJldHJ5TGFuZT1oLEFhKGUsaCksJHQobCxlLGgpLFFkO2d1KCl9dD11eChlLHQsbil9ZWxzZSBlPWMudHJlZUNvbnRleHQsSmU9VG4oaC5uZXh0U2libGluZykseHQ9dCxOZT0hMCxZbD1udWxsLFNuPSExLGUhPT1udWxsJiZaYih0LGUpLHQ9JGModCxsKSx0LmZsYWdzfD0xMzQyMjE4MjQ7cmV0dXJuIHR9cmV0dXJuIGU9eWwoZS5jaGlsZCx7bW9kZTpsLm1vZGUsY2hpbGRyZW46bC5jaGlsZHJlbn0pLGUucmVmPXQucmVmLHQuY2hpbGQ9ZSxlLnJldHVybj10LGV9ZnVuY3Rpb24gem8oZSx0KXt2YXIgbj10LnJlZjtpZihuPT09bnVsbCllIT09bnVsbCYmZS5yZWYhPT1udWxsJiYodC5mbGFnc3w9NDE5NDgxNik7ZWxzZXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmdHlwZW9mIG4hPSJvYmplY3QiKXRocm93IEVycm9yKGkoMjg0KSk7KGU9PT1udWxsfHxlLnJlZiE9PW4pJiYodC5mbGFnc3w9NDE5NDgxNil9fWZ1bmN0aW9uIFpkKGUsdCxuLGwscil7cmV0dXJuIHphKHQpLG49TmQoZSx0LG4sbCx2b2lkIDAsciksbD1EZCgpLGUhPT1udWxsJiYhbXQ/KGpkKGUsdCxyKSx3bChlLHQscikpOihOZSYmbCYmQWModCksdC5mbGFnc3w9MSx5dChlLHQsbixyKSx0LmNoaWxkKX1mdW5jdGlvbiBzeChlLHQsbixsLHIsYyl7cmV0dXJuIHphKHQpLHQudXBkYXRlUXVldWU9bnVsbCxuPW0wKHQsbCxuLHIpLGQwKGUpLGw9RGQoKSxlIT09bnVsbCYmIW10PyhqZChlLHQsYyksd2woZSx0LGMpKTooTmUmJmwmJkFjKHQpLHQuZmxhZ3N8PTEseXQoZSx0LG4sYyksdC5jaGlsZCl9ZnVuY3Rpb24gZngoZSx0LG4sbCxyKXtpZih6YSh0KSx0LnN0YXRlTm9kZT09PW51bGwpe3ZhciBjPXdvLGg9bi5jb250ZXh0VHlwZTt0eXBlb2YgaD09Im9iamVjdCImJmghPT1udWxsJiYoYz1fdChoKSksYz1uZXcgbihsLGMpLHQubWVtb2l6ZWRTdGF0ZT1jLnN0YXRlIT09bnVsbCYmYy5zdGF0ZSE9PXZvaWQgMD9jLnN0YXRlOm51bGwsYy51cGRhdGVyPVhkLHQuc3RhdGVOb2RlPWMsYy5fcmVhY3RJbnRlcm5hbHM9dCxjPXQuc3RhdGVOb2RlLGMucHJvcHM9bCxjLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxjLnJlZnM9e30sU2QodCksaD1uLmNvbnRleHRUeXBlLGMuY29udGV4dD10eXBlb2YgaD09Im9iamVjdCImJmghPT1udWxsP190KGgpOndvLGMuc3RhdGU9dC5tZW1vaXplZFN0YXRlLGg9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsdHlwZW9mIGg9PSJmdW5jdGlvbiImJihxZCh0LG4saCxsKSxjLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSksdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT0iZnVuY3Rpb24ifHx0eXBlb2YgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uInx8dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24ifHwoaD1jLnN0YXRlLHR5cGVvZiBjLmNvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmYy5jb21wb25lbnRXaWxsTW91bnQoKSx0eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZjLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxoIT09Yy5zdGF0ZSYmWGQuZW5xdWV1ZVJlcGxhY2VTdGF0ZShjLGMuc3RhdGUsbnVsbCksR3IodCxsLGMsciksUHIoKSxjLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSksdHlwZW9mIGMuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSxsPSEwfWVsc2UgaWYoZT09PW51bGwpe2M9dC5zdGF0ZU5vZGU7dmFyIFM9dC5tZW1vaXplZFByb3BzLF89UGEobixTKTtjLnByb3BzPV87dmFyIEw9Yy5jb250ZXh0LFY9bi5jb250ZXh0VHlwZTtoPXdvLHR5cGVvZiBWPT0ib2JqZWN0IiYmViE9PW51bGwmJihoPV90KFYpKTt2YXIgWj1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztWPXR5cGVvZiBaPT0iZnVuY3Rpb24ifHx0eXBlb2YgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIixTPXQucGVuZGluZ1Byb3BzIT09UyxWfHx0eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KFN8fEwhPT1oKSYmJDAodCxjLGwsaCksUWw9ITE7dmFyIHo9dC5tZW1vaXplZFN0YXRlO2Muc3RhdGU9eixHcih0LGwsYyxyKSxQcigpLEw9dC5tZW1vaXplZFN0YXRlLFN8fHohPT1MfHxRbD8odHlwZW9mIFo9PSJmdW5jdGlvbiImJihxZCh0LG4sWixsKSxMPXQubWVtb2l6ZWRTdGF0ZSksKF89UWx8fEYwKHQsbixfLGwseixMLGgpKT8oVnx8dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24ifHwodHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZjLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBjLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSx0eXBlb2YgYy5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpKToodHlwZW9mIGMuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSx0Lm1lbW9pemVkUHJvcHM9bCx0Lm1lbW9pemVkU3RhdGU9TCksYy5wcm9wcz1sLGMuc3RhdGU9TCxjLmNvbnRleHQ9aCxsPV8pOih0eXBlb2YgYy5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLGw9ITEpfWVsc2V7Yz10LnN0YXRlTm9kZSxDZChlLHQpLGg9dC5tZW1vaXplZFByb3BzLFY9UGEobixoKSxjLnByb3BzPVYsWj10LnBlbmRpbmdQcm9wcyx6PWMuY29udGV4dCxMPW4uY29udGV4dFR5cGUsXz13byx0eXBlb2YgTD09Im9iamVjdCImJkwhPT1udWxsJiYoXz1fdChMKSksUz1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywoTD10eXBlb2YgUz09ImZ1bmN0aW9uInx8dHlwZW9mIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiIpfHx0eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KGghPT1afHx6IT09XykmJiQwKHQsYyxsLF8pLFFsPSExLHo9dC5tZW1vaXplZFN0YXRlLGMuc3RhdGU9eixHcih0LGwsYyxyKSxQcigpO3ZhciBHPXQubWVtb2l6ZWRTdGF0ZTtoIT09Wnx8eiE9PUd8fFFsfHxlIT09bnVsbCYmZS5kZXBlbmRlbmNpZXMhPT1udWxsJiZqYyhlLmRlcGVuZGVuY2llcyk/KHR5cGVvZiBTPT0iZnVuY3Rpb24iJiYocWQodCxuLFMsbCksRz10Lm1lbW9pemVkU3RhdGUpLChWPVFsfHxGMCh0LG4sVixsLHosRyxfKXx8ZSE9PW51bGwmJmUuZGVwZW5kZW5jaWVzIT09bnVsbCYmamMoZS5kZXBlbmRlbmNpZXMpKT8oTHx8dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBjLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgYy5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZjLmNvbXBvbmVudFdpbGxVcGRhdGUobCxHLF8pLHR5cGVvZiBjLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZjLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKGwsRyxfKSksdHlwZW9mIGMuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NCksdHlwZW9mIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBjLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8aD09PWUubWVtb2l6ZWRQcm9wcyYmej09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxoPT09ZS5tZW1vaXplZFByb3BzJiZ6PT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCksdC5tZW1vaXplZFByb3BzPWwsdC5tZW1vaXplZFN0YXRlPUcpLGMucHJvcHM9bCxjLnN0YXRlPUcsYy5jb250ZXh0PV8sbD1WKToodHlwZW9mIGMuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxoPT09ZS5tZW1vaXplZFByb3BzJiZ6PT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fGg9PT1lLm1lbW9pemVkUHJvcHMmJno9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSxsPSExKX1yZXR1cm4gYz1sLHpvKGUsdCksbD0odC5mbGFncyYxMjgpIT09MCxjfHxsPyhjPXQuc3RhdGVOb2RlLG49bCYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6Yy5yZW5kZXIoKSx0LmZsYWdzfD0xLGUhPT1udWxsJiZsPyh0LmNoaWxkPUJhKHQsZS5jaGlsZCxudWxsLHIpLHQuY2hpbGQ9QmEodCxudWxsLG4scikpOnl0KGUsdCxuLHIpLHQubWVtb2l6ZWRTdGF0ZT1jLnN0YXRlLGU9dC5jaGlsZCk6ZT13bChlLHQsciksZX1mdW5jdGlvbiBkeChlLHQsbixsKXtyZXR1cm4gRGEoKSx0LmZsYWdzfD0yNTYseXQoZSx0LG4sbCksdC5jaGlsZH12YXIgRmQ9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowLGh5ZHJhdGlvbkVycm9yczpudWxsfTtmdW5jdGlvbiAkZChlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOnQwKCl9fWZ1bmN0aW9uIEpkKGUsdCxuKXtyZXR1cm4gZT1lIT09bnVsbD9lLmNoaWxkTGFuZXMmfm46MCx0JiYoZXw9dW4pLGV9ZnVuY3Rpb24gbXgoZSx0LG4pe3ZhciBsPXQucGVuZGluZ1Byb3BzLHI9ITEsYz0odC5mbGFncyYxMjgpIT09MCxoO2lmKChoPWMpfHwoaD1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlPT09bnVsbD8hMTooQXQuY3VycmVudCYyKSE9PTApLGgmJihyPSEwLHQuZmxhZ3MmPS0xMjkpLGg9KHQuZmxhZ3MmMzIpIT09MCx0LmZsYWdzJj0tMzMsZT09PW51bGwpe2lmKE5lKXtpZihyP0psKHQpOldsKCksKGU9SmUpPyhlPWtTKGUsU24pLGU9ZSE9PW51bGwmJmUuZGF0YSE9PSImIj9lOm51bGwsZSE9PW51bGwmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpWbCE9PW51bGw/e2lkOlZuLG92ZXJmbG93OllufTpudWxsLHJldHJ5TGFuZTo1MzY4NzA5MTIsaHlkcmF0aW9uRXJyb3JzOm51bGx9LG49WGIoZSksbi5yZXR1cm49dCx0LmNoaWxkPW4seHQ9dCxKZT1udWxsKSk6ZT1udWxsLGU9PT1udWxsKXRocm93IHFsKHQpO3JldHVybiAkbShlKT90LmxhbmVzPTMyOnQubGFuZXM9NTM2ODcwOTEyLG51bGx9cmV0dXJuIGM9bC5jaGlsZHJlbixsPWwuZmFsbGJhY2sscj8oV2woKSxyPXQubW9kZSxjPUpjKHttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOmN9LHIpLGw9TmEobCxyLG4sbnVsbCksYy5yZXR1cm49dCxsLnJldHVybj10LGMuc2libGluZz1sLHQuY2hpbGQ9YyxsPXQuY2hpbGQsbC5tZW1vaXplZFN0YXRlPSRkKG4pLGwuY2hpbGRMYW5lcz1KZChlLGgsbiksdC5tZW1vaXplZFN0YXRlPUZkLEtyKG51bGwsbCkpOihKbCh0KSxXZCh0LGMpKX12YXIgUz1lLm1lbW9pemVkU3RhdGU7aWYoUyE9PW51bGwpe3ZhciBfPVMuZGVoeWRyYXRlZDtpZihfIT09bnVsbClyZXR1cm4gQ04oZSx0LGMsaCxsLF8sUyxuKX1yZXR1cm4gcj8oV2woKSxyPWwuZmFsbGJhY2ssYz10Lm1vZGUsUz1lLmNoaWxkLF89Uy5zaWJsaW5nLGw9eWwoUyx7bW9kZToiaGlkZGVuIixjaGlsZHJlbjpsLmNoaWxkcmVufSksbC5zdWJ0cmVlRmxhZ3M9Uy5zdWJ0cmVlRmxhZ3MmMTIwNjkxMDk3NixfIT09bnVsbD9yPXlsKF8scik6KHI9TmEocixjLG4sbnVsbCksci5mbGFnc3w9Miksci5yZXR1cm49dCxsLnJldHVybj10LGwuc2libGluZz1yLHQuY2hpbGQ9bCxLcihudWxsLGwpLGw9dC5jaGlsZCxyPWUuY2hpbGQubWVtb2l6ZWRTdGF0ZSxyPT09bnVsbD9yPSRkKG4pOihjPXIuY2FjaGVQb29sLGMhPT1udWxsPyhTPWZ0Ll9jdXJyZW50VmFsdWUsYz1jLnBhcmVudCE9PVM/e3BhcmVudDpTLHBvb2w6U306Yyk6Yz10MCgpLHI9e2Jhc2VMYW5lczpyLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpjfSksbC5tZW1vaXplZFN0YXRlPXIsbC5jaGlsZExhbmVzPUpkKGUsaCxuKSx0Lm1lbW9pemVkU3RhdGU9RmQsS3IoZS5jaGlsZCxsKSk6KEpsKHQpLG49ZS5jaGlsZCxlPW4uc2libGluZyxuPXlsKG4se21vZGU6InZpc2libGUiLGNoaWxkcmVuOmwuY2hpbGRyZW59KSxuLnJldHVybj10LG4uc2libGluZz1udWxsLGUhPT1udWxsJiYoaD10LmRlbGV0aW9ucyxoPT09bnVsbD8odC5kZWxldGlvbnM9W2VdLHQuZmxhZ3N8PTE2KTpoLnB1c2goZSkpLHQuY2hpbGQ9bix0Lm1lbW9pemVkU3RhdGU9bnVsbCxuKX1mdW5jdGlvbiBXZChlLHQpe3JldHVybiB0PUpjKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjp0fSxlLm1vZGUpLHQucmV0dXJuPWUsZS5jaGlsZD10fWZ1bmN0aW9uIEpjKGUsdCl7cmV0dXJuIGU9S3QoMjIsZSxudWxsLHQpLGUubGFuZXM9MCxlfWZ1bmN0aW9uIFdjKGUsdCxuKXtyZXR1cm4gQmEodCxlLmNoaWxkLG51bGwsbiksZT1XZCh0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuKSxlLmZsYWdzfD0yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gQ04oZSx0LG4sbCxyLGMsaCxTKXtpZihuKXJldHVybiB0LmZsYWdzJjI1Nj8oSmwodCksdC5mbGFncyY9LTI1NyxXYyhlLHQsUykpOnQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KFdsKCksdC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCxudWxsKTooV2woKSxjPXIuZmFsbGJhY2ssaD10Lm1vZGUscj1KYyh7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ci5jaGlsZHJlbn0saCksYz1OYShjLGgsUyxudWxsKSxjLmZsYWdzfD0yLHIucmV0dXJuPXQsYy5yZXR1cm49dCxyLnNpYmxpbmc9Yyx0LmNoaWxkPXIsQmEodCxlLmNoaWxkLG51bGwsUykscj10LmNoaWxkLHIubWVtb2l6ZWRTdGF0ZT0kZChTKSxyLmNoaWxkTGFuZXM9SmQoZSxsLFMpLHQubWVtb2l6ZWRTdGF0ZT1GZCxLcihudWxsLHIpKTtpZihKbCh0KSwkbShjKSl7aWYobD1jLm5leHRTaWJsaW5nJiZjLm5leHRTaWJsaW5nLmRhdGFzZXQsbCl2YXIgXz1sLmRnc3Q7cmV0dXJuIGw9XyxsIT09IiImJihyPUVycm9yKGkoNDE5KSksci5zdGFjaz0iIixyLmRpZ2VzdD1sLGtyKHt2YWx1ZTpyLHNvdXJjZTpudWxsLHN0YWNrOm51bGx9KSksV2MoZSx0LFMpfWlmKG10fHxNYShlLHQsUywhMSksbD0oUyZlLmNoaWxkTGFuZXMpIT09MCxtdHx8bCl7aWYoJGwuY3VycmVudCE9PW51bGwpcmV0dXJuIFdjKGUsdCxTKTtpZihsPSRlLGwhPT1udWxsJiYocj1aeShsLFMpLHIhPT0wJiZyIT09aC5yZXRyeUxhbmUpKXRocm93IGgucmV0cnlMYW5lPXIsQWEoZSxyKSwkdChsLGUsciksUWQ7cmV0dXJuIEZtKGMpfHxndSgpLFdjKGUsdCxTKX1yZXR1cm4gRm0oYyk/KHQuZmxhZ3N8PTE5Mix0LmNoaWxkPWUuY2hpbGQsbnVsbCk6KGU9aC50cmVlQ29udGV4dCxKZT1UbihjLm5leHRTaWJsaW5nKSx4dD10LE5lPSEwLFlsPW51bGwsU249ITEsZSE9PW51bGwmJlpiKHQsZSksdD1XZCh0LHIuY2hpbGRyZW4pLHQuZmxhZ3N8PTEzNDIyMTgyNCx0KX1mdW5jdGlvbiBoeChlLHQsbil7ZS5sYW5lc3w9dDt2YXIgbD1lLmFsdGVybmF0ZTtsIT09bnVsbCYmKGwubGFuZXN8PXQpLERjKGUucmV0dXJuLHQsbil9ZnVuY3Rpb24gcHgoZSl7Zm9yKHZhciB0PW51bGw7ZSE9PW51bGw7KXt2YXIgbj1lLmFsdGVybmF0ZTtuIT09bnVsbCYmSWMobik9PT1udWxsJiYodD1lKSxlPWUuc2libGluZ31yZXR1cm4gdH1mdW5jdGlvbiBldShlLHQsbixsLHIsYyl7dmFyIGg9ZS5tZW1vaXplZFN0YXRlO2g9PT1udWxsP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OmwsdGFpbDpuLHRhaWxNb2RlOnIsdHJlZUZvcmtDb3VudDpjfTooaC5pc0JhY2t3YXJkcz10LGgucmVuZGVyaW5nPW51bGwsaC5yZW5kZXJpbmdTdGFydFRpbWU9MCxoLmxhc3Q9bCxoLnRhaWw9bixoLnRhaWxNb2RlPXIsaC50cmVlRm9ya0NvdW50PWMpfWZ1bmN0aW9uIGVtKGUpe3ZhciB0PWUuY2hpbGQ7Zm9yKGUuY2hpbGQ9bnVsbDt0IT09bnVsbDspe3ZhciBuPXQuc2libGluZzt0LnNpYmxpbmc9ZS5jaGlsZCxlLmNoaWxkPXQsdD1ufX1mdW5jdGlvbiB0bShlLHQsbil7dmFyIGw9dC5wZW5kaW5nUHJvcHMscj1sLnJldmVhbE9yZGVyLGM9bC50YWlsO2w9bC5jaGlsZHJlbjt2YXIgaD1BdC5jdXJyZW50O2lmKHQuZmxhZ3MmMTI4KXJldHVybiBWcih0LGgpLG51bGw7dmFyIFM9KGgmMikhPT0wO2lmKFM/KGg9aCYxfDIsdC5mbGFnc3w9MTI4KTpoJj0xLFZyKHQsaCkscj09PSJiYWNrd2FyZHMiJiZlIT09bnVsbD8oZW0oZSkseXQoZSx0LGwsbiksZW0oZSkpOnl0KGUsdCxsLG4pLGw9TmU/enI6MCwhUyYmZSE9PW51bGwmJihlLmZsYWdzJjEyOCkhPT0wKWU6Zm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MTMpZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmaHgoZSxuLHQpO2Vsc2UgaWYoZS50YWc9PT0xOSloeChlLG4sdCk7ZWxzZSBpZihlLmNoaWxkIT09bnVsbCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PXQpYnJlYWsgZTtmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31zd2l0Y2gocil7Y2FzZSJiYWNrd2FyZHMiOm49cHgodC5jaGlsZCksbj09PW51bGw/KHI9dC5jaGlsZCx0LmNoaWxkPW51bGwpOihyPW4uc2libGluZyxuLnNpYmxpbmc9bnVsbCxlbSh0KSksZXUodCwhMCxyLG51bGwsYyxsKTticmVhaztjYXNlInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHMiOmZvcihuPW51bGwscj10LmNoaWxkLHQuY2hpbGQ9bnVsbDtyIT09bnVsbDspe2lmKGU9ci5hbHRlcm5hdGUsZSE9PW51bGwmJkljKGUpPT09bnVsbCl7dC5jaGlsZD1yO2JyZWFrfWU9ci5zaWJsaW5nLHIuc2libGluZz1uLG49cixyPWV9ZXUodCwhMCxuLG51bGwsYyxsKTticmVhaztjYXNlInRvZ2V0aGVyIjpldSh0LCExLG51bGwsbnVsbCx2b2lkIDAsbCk7YnJlYWs7Y2FzZSJpbmRlcGVuZGVudCI6dC5tZW1vaXplZFN0YXRlPW51bGw7YnJlYWs7ZGVmYXVsdDpuPXB4KHQuY2hpbGQpLG49PT1udWxsPyhyPXQuY2hpbGQsdC5jaGlsZD1udWxsKToocj1uLnNpYmxpbmcsbi5zaWJsaW5nPW51bGwpLGV1KHQsITEscixuLGMsbCl9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24gdngoZSx0LG4pe3ZhciBsPXQucGVuZGluZ1Byb3BzO3JldHVybiBYbCh0LHQudHlwZSxsLnZhbHVlKSx5dChlLHQsbC5jaGlsZHJlbixuKSx0LmNoaWxkfWZ1bmN0aW9uIHdsKGUsdCxuKXtpZihlIT09bnVsbCYmKHQuZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKSxsYXw9dC5sYW5lcywobiZ0LmNoaWxkTGFuZXMpPT09MClpZihlIT09bnVsbCl7aWYoTWEoZSx0LG4sITEpLChuJnQuY2hpbGRMYW5lcyk9PT0wKXJldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGw7aWYoZSE9PW51bGwmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKGkoMTUzKSk7aWYodC5jaGlsZCE9PW51bGwpe2ZvcihlPXQuY2hpbGQsbj15bChlLGUucGVuZGluZ1Byb3BzKSx0LmNoaWxkPW4sbi5yZXR1cm49dDtlLnNpYmxpbmchPT1udWxsOyllPWUuc2libGluZyxuPW4uc2libGluZz15bChlLGUucGVuZGluZ1Byb3BzKSxuLnJldHVybj10O24uc2libGluZz1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIG5tKGUsdCl7cmV0dXJuKGUubGFuZXMmdCkhPT0wPyEwOihlPWUuZGVwZW5kZW5jaWVzLCEhKGUhPT1udWxsJiZqYyhlKSkpfWZ1bmN0aW9uIFROKGUsdCxuKXtzd2l0Y2godC50YWcpe2Nhc2UgMzpvYyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFhsKHQsZnQsZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxEYSgpO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OkFmKHQpO2JyZWFrO2Nhc2UgNDpvYyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6WGwodCx0LnR5cGUsdC5tZW1vaXplZFByb3BzLnZhbHVlKTticmVhaztjYXNlIDMxOmlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpcmV0dXJuIHQuZmxhZ3N8PTEyOCxfZCh0KSxudWxsO2JyZWFrO2Nhc2UgMTM6dmFyIGw9dC5tZW1vaXplZFN0YXRlO2lmKGwhPT1udWxsKXtpZihsLmRlaHlkcmF0ZWQhPT1udWxsKXJldHVybiBKbCh0KSx0LmZsYWdzfD0xMjgsbnVsbDtsPU1hKGUsdCxuLCExKTt2YXIgcj10LmNoaWxkLmNoaWxkTGFuZXM7cmV0dXJuIGx8fChuJnIpIT09MD9teChlLHQsbik6KEpsKHQpLGU9d2woZSx0LG4pLGUhPT1udWxsP2Uuc2libGluZzpudWxsKX1KbCh0KTticmVhaztjYXNlIDE5OmlmKHQuZmxhZ3MmMTI4KXJldHVybiB0bShlLHQsbik7aWYocj0oZS5mbGFncyYxMjgpIT09MCxsPShuJnQuY2hpbGRMYW5lcykhPT0wLGx8fChNYShlLHQsbiwhMSksbD0obiZ0LmNoaWxkTGFuZXMpIT09MCkscil7aWYobClyZXR1cm4gdG0oZSx0LG4pO3QuZmxhZ3N8PTEyOH1pZihyPXQubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbCYmKHIucmVuZGVyaW5nPW51bGwsci50YWlsPW51bGwsci5sYXN0RWZmZWN0PW51bGwpLFZyKHQsQXQuY3VycmVudCksbClicmVhaztyZXR1cm4gbnVsbDtjYXNlIDIyOnJldHVybiB0LmxhbmVzPTAsaXgoZSx0LG4sdC5wZW5kaW5nUHJvcHMpO2Nhc2UgMjQ6WGwodCxmdCxlLm1lbW9pemVkU3RhdGUuY2FjaGUpfXJldHVybiB3bChlLHQsbil9ZnVuY3Rpb24gZ3goZSx0LG4pe2lmKGUhPT1udWxsKWlmKGUubWVtb2l6ZWRQcm9wcyE9PXQucGVuZGluZ1Byb3BzKW10PSEwO2Vsc2V7aWYoIW5tKGUsbikmJih0LmZsYWdzJjEyOCk9PT0wKXJldHVybiBtdD0hMSxUTihlLHQsbik7bXQ9KGUuZmxhZ3MmMTMxMDcyKSE9PTB9ZWxzZSBtdD0hMSxOZSYmKHQuZmxhZ3MmMTA0ODU3NikhPT0wJiZRYih0LHpyLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMTY6ZTp7dmFyIGw9dC5wZW5kaW5nUHJvcHM7aWYoZT1VYSh0LmVsZW1lbnRUeXBlKSx0LnR5cGU9ZSx0eXBlb2YgZT09ImZ1bmN0aW9uIil1ZChlKT8obD1QYShlLGwpLHQudGFnPTEsdD1meChudWxsLHQsZSxsLG4pKToodC50YWc9MCx0PVpkKG51bGwsdCxlLGwsbikpO2Vsc2V7aWYoZSE9bnVsbCl7dmFyIHI9ZS4kJHR5cGVvZjtpZihyPT09UCl7dC50YWc9MTEsdD1heChudWxsLHQsZSxsLG4pO2JyZWFrIGV9ZWxzZSBpZihyPT09cmUpe3QudGFnPTE0LHQ9b3gobnVsbCx0LGUsbCxuKTticmVhayBlfWVsc2UgaWYocj09PWhlKXt0LnRhZz0xMCx0LnR5cGU9ZSx0PXZ4KG51bGwsdCxuKTticmVhayBlfX10aHJvdyB0PXNlKGUpfHxlLEVycm9yKGkoMzA2LHQsIiIpKX19cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiBaZChlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTpyZXR1cm4gbD10LnR5cGUscj1QYShsLHQucGVuZGluZ1Byb3BzKSxmeChlLHQsbCxyLG4pO2Nhc2UgMzplOntpZihvYyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGU9PT1udWxsKXRocm93IEVycm9yKGkoMzg3KSk7bD10LnBlbmRpbmdQcm9wczt2YXIgYz10Lm1lbW9pemVkU3RhdGU7cj1jLmVsZW1lbnQsQ2QoZSx0KSxHcih0LGwsbnVsbCxuKTt2YXIgaD10Lm1lbW9pemVkU3RhdGU7aWYobD1oLmNhY2hlLFhsKHQsZnQsbCksbCE9PWMuY2FjaGUmJnZkKHQsW2Z0XSxuLCEwKSxQcigpLGw9aC5lbGVtZW50LGMuaXNEZWh5ZHJhdGVkKWlmKGM9e2VsZW1lbnQ6bCxpc0RlaHlkcmF0ZWQ6ITEsY2FjaGU6aC5jYWNoZX0sdC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9Yyx0Lm1lbW9pemVkU3RhdGU9Yyx0LmZsYWdzJjI1Nil7dD1keChlLHQsbCxuKTticmVhayBlfWVsc2UgaWYobCE9PXIpe3I9eW4oRXJyb3IoaSg0MjQpKSx0KSxrcihyKSx0PWR4KGUsdCxsLG4pO2JyZWFrIGV9ZWxzZSBmb3IoZT10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGUubm9kZVR5cGU9PT05P2U9ZS5ib2R5OmU9ZS5ub2RlTmFtZT09PSJIVE1MIj9lLm93bmVyRG9jdW1lbnQuYm9keTplLEplPVRuKGUuZmlyc3RDaGlsZCkseHQ9dCxOZT0hMCxZbD1udWxsLFNuPSEwLG49aTAodCxudWxsLGwsbiksdC5jaGlsZD1uO247KW4uZmxhZ3M9bi5mbGFncyYtM3wxMzQyMjE4MjQsbj1uLnNpYmxpbmc7ZWxzZXtpZihEYSgpLGw9PT1yKXt0PXdsKGUsdCxuKTticmVhayBlfXl0KGUsdCxsLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDI2OnJldHVybiB6byhlLHQpLGU9PT1udWxsPyhuPUdTKHQudHlwZSxudWxsLHQucGVuZGluZ1Byb3BzLG51bGwpKT90Lm1lbW9pemVkU3RhdGU9bjpOZXx8KHQuc3RhdGVOb2RlPVNTKHQudHlwZSx0LnBlbmRpbmdQcm9wcyxIbC5jdXJyZW50LHQpKTp0Lm1lbW9pemVkU3RhdGU9R1ModC50eXBlLGUubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxlLm1lbW9pemVkU3RhdGUpLG51bGw7Y2FzZSAyNzpyZXR1cm4gQWYodCksZT09PW51bGwmJk5lJiYobD10LnN0YXRlTm9kZT1IUyh0LnR5cGUsdC5wZW5kaW5nUHJvcHMsSGwuY3VycmVudCkseHQ9dCxTbj0hMCxyPUplLGlhKHQudHlwZSk/KEptPXIsSmU9VG4obC5maXJzdENoaWxkKSk6SmU9cikseXQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHpvKGUsdCksZT09PW51bGwmJih0LmZsYWdzfD00MTk0MzA0KSx0LmNoaWxkO2Nhc2UgNTpyZXR1cm4gZT09PW51bGwmJk5lJiYoKHI9bD1KZSkmJihsPWdEKGwsdC50eXBlLHQucGVuZGluZ1Byb3BzLFNuKSxsIT09bnVsbD8odC5zdGF0ZU5vZGU9bCx4dD10LEplPVRuKGwuZmlyc3RDaGlsZCksU249ITEscj0hMCk6cj0hMSkscnx8cWwodCkpLEFmKHQpLHI9dC50eXBlLGM9dC5wZW5kaW5nUHJvcHMsaD1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxsPWMuY2hpbGRyZW4sVm0ocixjKT9sPW51bGw6aCE9PW51bGwmJlZtKHIsaCkmJih0LmZsYWdzfD0zMiksdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmKHI9TmQoZSx0LGROLG51bGwsbnVsbCxuKSxKby5fY3VycmVudFZhbHVlPXIpLHpvKGUsdCkseXQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDY6cmV0dXJuIGU9PT1udWxsJiZOZSYmKChlPW49SmUpJiYobj15RChuLHQucGVuZGluZ1Byb3BzLFNuKSxuIT09bnVsbD8odC5zdGF0ZU5vZGU9bix4dD10LEplPW51bGwsZT0hMCk6ZT0hMSksZXx8cWwodCkpLG51bGw7Y2FzZSAxMzpyZXR1cm4gbXgoZSx0LG4pO2Nhc2UgNDpyZXR1cm4gb2ModCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsPXQucGVuZGluZ1Byb3BzLGU9PT1udWxsP3QuY2hpbGQ9QmEodCxudWxsLGwsbik6eXQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiBheChlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgNzpyZXR1cm4gbD10LnBlbmRpbmdQcm9wcyx6byhlLHQpLHl0KGUsdCxsLG4pLHQuY2hpbGQ7Y2FzZSA4OnJldHVybiB5dChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEyOnJldHVybiB5dChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEwOnJldHVybiB2eChlLHQsbik7Y2FzZSA5OnJldHVybiByPXQudHlwZS5fY29udGV4dCxsPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHphKHQpLHI9X3QociksbD1sKHIpLHQuZmxhZ3N8PTEseXQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDE0OnJldHVybiBveChlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTU6cmV0dXJuIHJ4KGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsbik7Y2FzZSAxOTpyZXR1cm4gdG0oZSx0LG4pO2Nhc2UgMzE6cmV0dXJuIFNOKGUsdCxuKTtjYXNlIDIyOnJldHVybiBpeChlLHQsbix0LnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpyZXR1cm4gemEodCksbD1fdChmdCksZT09PW51bGw/KHI9YmQoKSxyPT09bnVsbCYmKHI9JGUsYz1nZCgpLHIucG9vbGVkQ2FjaGU9YyxjLnJlZkNvdW50KyssYyE9PW51bGwmJihyLnBvb2xlZENhY2hlTGFuZXN8PW4pLHI9YyksdC5tZW1vaXplZFN0YXRlPXtwYXJlbnQ6bCxjYWNoZTpyfSxTZCh0KSxYbCh0LGZ0LHIpKTooKGUubGFuZXMmbikhPT0wJiYoQ2QoZSx0KSxHcih0LG51bGwsbnVsbCxuKSxQcigpKSxyPWUubWVtb2l6ZWRTdGF0ZSxjPXQubWVtb2l6ZWRTdGF0ZSxyLnBhcmVudCE9PWw/KHI9e3BhcmVudDpsLGNhY2hlOmx9LHQubWVtb2l6ZWRTdGF0ZT1yLHQubGFuZXM9PT0wJiYodC5tZW1vaXplZFN0YXRlPXQudXBkYXRlUXVldWUuYmFzZVN0YXRlPXIpLFhsKHQsZnQsbCkpOihsPWMuY2FjaGUsWGwodCxmdCxsKSxsIT09ci5jYWNoZSYmdmQodCxbZnRdLG4sITApKSkseXQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAzMDpyZXR1cm4gdC5zdGF0ZU5vZGU9PT1udWxsJiYodC5zdGF0ZU5vZGU9e2F1dG9OYW1lOm51bGwscGFpcmVkOm51bGwsY2xvbmVzOm51bGwscmVmOm51bGx9KSxsPXQucGVuZGluZ1Byb3BzLGwubmFtZSE9bnVsbCYmbC5uYW1lIT09ImF1dG8iP3QuZmxhZ3N8PWU9PT1udWxsPzE4ODgyNTYwOjE4ODc0MzY4Ok5lJiZBYyh0KSxlIT09bnVsbCYmZS5tZW1vaXplZFByb3BzLm5hbWUhPT1sLm5hbWU/dC5mbGFnc3w9NDE5NDgxNjp6byhlLHQpLHl0KGUsdCxsLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAyOTp0aHJvdyB0LnBlbmRpbmdQcm9wc310aHJvdyBFcnJvcihpKDE1Nix0LnRhZykpfWZ1bmN0aW9uIEVsKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gbG0oZSx0LG4sbCxyKXt2YXIgYztpZigoYz0oZS5tb2RlJjMyKSE9PTApJiYoYz1uPT09bnVsbD9YUyh0LGwpOlhTKHQsbCkmJihsLnNyYyE9PW4uc3JjfHxsLnNyY1NldCE9PW4uc3JjU2V0KSksYyl7aWYoZS5mbGFnc3w9MTY3NzcyMTYsKHImMzM1NTQ0MTI4KT09PXIpaWYoZS5zdGF0ZU5vZGUuY29tcGxldGUpZS5mbGFnc3w9ODE5MjtlbHNlIGlmKEp4KCkpZS5mbGFnc3w9ODE5MjtlbHNlIHRocm93IEhhPUxjLHhkfWVsc2UgZS5mbGFncyY9LTE2Nzc3MjE3fWZ1bmN0aW9uIHl4KGUsdCl7aWYodC50eXBlIT09InN0eWxlc2hlZXQifHwodC5zdGF0ZS5sb2FkaW5nJjQpIT09MCllLmZsYWdzJj0tMTY3NzcyMTc7ZWxzZSBpZihlLmZsYWdzfD0xNjc3NzIxNiwhS1ModCkpaWYoSngoKSllLmZsYWdzfD04MTkyO2Vsc2UgdGhyb3cgSGE9TGMseGR9ZnVuY3Rpb24gdHUoZSx0KXt0IT09bnVsbCYmKGUuZmxhZ3N8PTQpLGUuZmxhZ3MmMTYzODQmJih0PWUudGFnIT09MjI/WHkoKTo1MzY4NzA5MTIsZS5sYW5lc3w9dCxCb3w9dCl9ZnVuY3Rpb24gUXIoZSx0KXtpZighTmUpc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2UidmlzaWJsZSI6YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOmZvcih2YXIgbj1lLnRhaWwsbD1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihsPW4pLG49bi5zaWJsaW5nO2w9PT1udWxsP3R8fGUudGFpbD09PW51bGw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpsLnNpYmxpbmc9bnVsbDticmVhaztkZWZhdWx0OmZvcih0PWUudGFpbCxuPW51bGw7dCE9PW51bGw7KXQuYWx0ZXJuYXRlIT09bnVsbCYmKG49dCksdD10LnNpYmxpbmc7bj09PW51bGw/ZS50YWlsPW51bGw6bi5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIFdlKGUpe3ZhciB0PWUuYWx0ZXJuYXRlIT09bnVsbCYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLG49MCxsPTA7aWYodClmb3IodmFyIHI9ZS5jaGlsZDtyIT09bnVsbDspbnw9ci5sYW5lc3xyLmNoaWxkTGFuZXMsbHw9ci5zdWJ0cmVlRmxhZ3MmMTIwNjkxMDk3NixsfD1yLmZsYWdzJjEyMDY5MTA5NzYsci5yZXR1cm49ZSxyPXIuc2libGluZztlbHNlIGZvcihyPWUuY2hpbGQ7ciE9PW51bGw7KW58PXIubGFuZXN8ci5jaGlsZExhbmVzLGx8PXIuc3VidHJlZUZsYWdzLGx8PXIuZmxhZ3Msci5yZXR1cm49ZSxyPXIuc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PWwsZS5jaGlsZExhbmVzPW4sdH1mdW5jdGlvbiB3TihlLHQsbil7dmFyIGw9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKGRkKHQpLHQudGFnKXtjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBXZSh0KSxudWxsO2Nhc2UgMTpyZXR1cm4gV2UodCksbnVsbDtjYXNlIDM6cmV0dXJuIG49dC5zdGF0ZU5vZGUsbD1udWxsLGUhPT1udWxsJiYobD1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PWwmJih0LmZsYWdzfD0yMDQ4KSxTbChmdCksc28oKSxuLnBlbmRpbmdDb250ZXh0JiYobi5jb250ZXh0PW4ucGVuZGluZ0NvbnRleHQsbi5wZW5kaW5nQ29udGV4dD1udWxsKSwoZT09PW51bGx8fGUuY2hpbGQ9PT1udWxsKSYmKF9vKHQpP0VsKHQpOmU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYodC5mbGFncyYyNTYpPT09MHx8KHQuZmxhZ3N8PTEwMjQsaGQoKSkpLFdlKHQpLG51bGw7Y2FzZSAyNjp2YXIgcj10LnR5cGUsYz10Lm1lbW9pemVkU3RhdGU7cmV0dXJuIGU9PT1udWxsPyhFbCh0KSxjIT09bnVsbD8oV2UodCkseXgodCxjKSk6KFdlKHQpLGxtKHQscixudWxsLGwsbikpKTpjP2MhPT1lLm1lbW9pemVkU3RhdGU/KEVsKHQpLFdlKHQpLHl4KHQsYykpOihXZSh0KSx0LmZsYWdzJj0tMTY3NzcyMTcpOihlPWUubWVtb2l6ZWRQcm9wcyxlIT09bCYmRWwodCksV2UodCksbG0odCxyLGUsbCxuKSksbnVsbDtjYXNlIDI3OmlmKHJjKHQpLG49SGwuY3VycmVudCxyPXQudHlwZSxlIT09bnVsbCYmdC5zdGF0ZU5vZGUhPW51bGwpZS5tZW1vaXplZFByb3BzIT09bCYmRWwodCk7ZWxzZXtpZighbCl7aWYodC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKGkoMTY2KSk7cmV0dXJuIFdlKHQpLHQuc3VidHJlZUZsYWdzJj0tMzM1NTQ0MzMsbnVsbH1lPVBuLmN1cnJlbnQsX28odCk/RmIodCk6KGU9SFMocixsLG4pLHQuc3RhdGVOb2RlPWUsRWwodCkpfXJldHVybiBXZSh0KSx0LnN1YnRyZWVGbGFncyY9LTMzNTU0NDMzLG51bGw7Y2FzZSA1OmlmKHJjKHQpLHI9dC50eXBlLGUhPT1udWxsJiZ0LnN0YXRlTm9kZSE9bnVsbCllLm1lbW9pemVkUHJvcHMhPT1sJiZFbCh0KTtlbHNle2lmKCFsKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoaSgxNjYpKTtyZXR1cm4gV2UodCksdC5zdWJ0cmVlRmxhZ3MmPS0zMzU1NDQzMyxudWxsfWlmKGM9UG4uY3VycmVudCxfbyh0KSlGYih0KTtlbHNle3ZhciBoPW9pKEhsLmN1cnJlbnQpO3N3aXRjaChjKXtjYXNlIDE6Yz1oLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIpO2JyZWFrO2Nhc2UgMjpjPWguY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixyKTticmVhaztkZWZhdWx0OnN3aXRjaChyKXtjYXNlInN2ZyI6Yz1oLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIpO2JyZWFrO2Nhc2UibWF0aCI6Yz1oLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIscik7YnJlYWs7Y2FzZSJzY3JpcHQiOmM9aC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmlubmVySFRNTD0iPHNjcmlwdD48XC9zY3JpcHQ+IixjPWMucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKTticmVhaztjYXNlInNlbGVjdCI6Yz10eXBlb2YgbC5pcz09InN0cmluZyI/aC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLHtpczpsLmlzfSk6aC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxsLm11bHRpcGxlP2MubXVsdGlwbGU9ITA6bC5zaXplJiYoYy5zaXplPWwuc2l6ZSk7YnJlYWs7ZGVmYXVsdDpjPXR5cGVvZiBsLmlzPT0ic3RyaW5nIj9oLmNyZWF0ZUVsZW1lbnQocix7aXM6bC5pc30pOmguY3JlYXRlRWxlbWVudChyKX19Y1tSdF09dCxjW1h0XT1sO2U6Zm9yKGg9dC5jaGlsZDtoIT09bnVsbDspe2lmKGgudGFnPT09NXx8aC50YWc9PT02KWMuYXBwZW5kQ2hpbGQoaC5zdGF0ZU5vZGUpO2Vsc2UgaWYoaC50YWchPT00JiZoLnRhZyE9PTI3JiZoLmNoaWxkIT09bnVsbCl7aC5jaGlsZC5yZXR1cm49aCxoPWguY2hpbGQ7Y29udGludWV9aWYoaD09PXQpYnJlYWsgZTtmb3IoO2guc2libGluZz09PW51bGw7KXtpZihoLnJldHVybj09PW51bGx8fGgucmV0dXJuPT09dClicmVhayBlO2g9aC5yZXR1cm59aC5zaWJsaW5nLnJldHVybj1oLnJldHVybixoPWguc2libGluZ310LnN0YXRlTm9kZT1jO2U6c3dpdGNoKER0KGMscixsKSxyKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOmw9ISFsLmF1dG9Gb2N1czticmVhayBlO2Nhc2UiaW1nIjpsPSEwO2JyZWFrIGU7ZGVmYXVsdDpsPSExfWwmJkVsKHQpfX1yZXR1cm4gV2UodCksdC5zdWJ0cmVlRmxhZ3MmPS0zMzU1NDQzMyxsbSh0LHQudHlwZSxlPT09bnVsbD9udWxsOmUubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxuKSxudWxsO2Nhc2UgNjppZihlJiZ0LnN0YXRlTm9kZSE9bnVsbCllLm1lbW9pemVkUHJvcHMhPT1sJiZFbCh0KTtlbHNle2lmKHR5cGVvZiBsIT0ic3RyaW5nIiYmdC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKGkoMTY2KSk7aWYoZT1IbC5jdXJyZW50LF9vKHQpKXtpZihlPXQuc3RhdGVOb2RlLG49dC5tZW1vaXplZFByb3BzLGw9bnVsbCxyPXh0LHIhPT1udWxsKXN3aXRjaChyLnRhZyl7Y2FzZSAyNzpjYXNlIDU6bD1yLm1lbW9pemVkUHJvcHN9ZVtSdF09dCxlPSEhKGUubm9kZVZhbHVlPT09bnx8bCE9PW51bGwmJmwuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nPT09ITB8fGdTKGUubm9kZVZhbHVlLG4pKSxlfHxxbCh0LCEwKX1lbHNlIGU9b2koZSkuY3JlYXRlVGV4dE5vZGUobCksZVtSdF09dCx0LnN0YXRlTm9kZT1lfXJldHVybiBXZSh0KSxudWxsO2Nhc2UgMzE6aWYobj10Lm1lbW9pemVkU3RhdGUsZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2lmKGw9X28odCksbiE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighbCl0aHJvdyBFcnJvcihpKDMxOCkpO2lmKGU9dC5tZW1vaXplZFN0YXRlLGU9ZSE9PW51bGw/ZS5kZWh5ZHJhdGVkOm51bGwsIWUpdGhyb3cgRXJyb3IoaSg1NTcpKTtlW1J0XT10fWVsc2UgRGEoKSwodC5mbGFncyYxMjgpPT09MCYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O1dlKHQpLGU9ITF9ZWxzZSBuPWhkKCksZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPW4pLGU9ITA7aWYoIWUpcmV0dXJuIHQuZmxhZ3MmMjU2Pyhvbih0KSx0KToob24odCksbnVsbCk7aWYoKHQuZmxhZ3MmMTI4KSE9PTApdGhyb3cgRXJyb3IoaSg1NTgpKX1yZXR1cm4gV2UodCksbnVsbDtjYXNlIDEzOmlmKGw9dC5tZW1vaXplZFN0YXRlLGU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHI9X28odCksbCE9PW51bGwmJmwuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighcil0aHJvdyBFcnJvcihpKDMxOCkpO2lmKHI9dC5tZW1vaXplZFN0YXRlLHI9ciE9PW51bGw/ci5kZWh5ZHJhdGVkOm51bGwsIXIpdGhyb3cgRXJyb3IoaSgzMTcpKTtyW1J0XT10fWVsc2UgRGEoKSwodC5mbGFncyYxMjgpPT09MCYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O1dlKHQpLHI9ITF9ZWxzZSByPWhkKCksZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPXIpLHI9ITA7aWYoIXIpcmV0dXJuIHQuZmxhZ3MmMjU2Pyhvbih0KSx0KToob24odCksbnVsbCl9cmV0dXJuIG9uKHQpLCh0LmZsYWdzJjEyOCkhPT0wPyh0LmxhbmVzPW4sdCk6KG49bCE9PW51bGwsZT1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCxuJiYobD10LmNoaWxkLHI9bnVsbCxsLmFsdGVybmF0ZSE9PW51bGwmJmwuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZsLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihyPWwuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGM9bnVsbCxsLm1lbW9pemVkU3RhdGUhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKGM9bC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxjIT09ciYmKGwuZmxhZ3N8PTIwNDgpKSxuIT09ZSYmbiYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLHR1KHQsdC51cGRhdGVRdWV1ZSksV2UodCksbnVsbCk7Y2FzZSA0OnJldHVybiBzbygpLGU9PT1udWxsJiZIbSh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSx0LmZsYWdzfD02NzEwODg2NCxXZSh0KSxudWxsO2Nhc2UgMTA6cmV0dXJuIFNsKHQudHlwZSksV2UodCksbnVsbDtjYXNlIDE5OmlmKE9kKHQpLGw9dC5tZW1vaXplZFN0YXRlLGw9PT1udWxsKXJldHVybiBXZSh0KSxudWxsO2lmKHI9KHQuZmxhZ3MmMTI4KSE9PTAsYz1sLnJlbmRlcmluZyxjPT09bnVsbClpZihyKVFyKGwsITEpO2Vsc2V7aWYoYXQhPT0wfHxlIT09bnVsbCYmKGUuZmxhZ3MmMTI4KSE9PTApZm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGM9SWMoZSksYyE9PW51bGwpe2Zvcih0LmZsYWdzfD0xMjgsUXIobCwhMSksZT1jLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSx0dSh0LGUpLHQuc3VidHJlZUZsYWdzPTAsZT1uLG49dC5jaGlsZDtuIT09bnVsbDspcWIobixlKSxuPW4uc2libGluZztyZXR1cm4gVnIodCxBdC5jdXJyZW50JjF8MiksTmUmJmJsKHQsbC50cmVlRm9ya0NvdW50KSx0LmNoaWxkfWU9ZS5zaWJsaW5nfWwudGFpbCE9PW51bGwmJmVuKCk+bXUmJih0LmZsYWdzfD0xMjgscj0hMCxRcihsLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYoZT1JYyhjKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LHI9ITAsZT1lLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSx0dSh0LGUpLFFyKGwsITApLGwudGFpbD09PW51bGwmJmwudGFpbE1vZGUhPT0iY29sbGFwc2VkIiYmbC50YWlsTW9kZSE9PSJ2aXNpYmxlIiYmIWMuYWx0ZXJuYXRlJiYhTmUpcmV0dXJuIFdlKHQpLG51bGx9ZWxzZSAyKmVuKCktbC5yZW5kZXJpbmdTdGFydFRpbWU+bXUmJm4hPT01MzY4NzA5MTImJih0LmZsYWdzfD0xMjgscj0hMCxRcihsLCExKSx0LmxhbmVzPTQxOTQzMDQpO2wuaXNCYWNrd2FyZHM/KGMuc2libGluZz10LmNoaWxkLHQuY2hpbGQ9Yyk6KGU9bC5sYXN0LGUhPT1udWxsP2Uuc2libGluZz1jOnQuY2hpbGQ9YyxsLmxhc3Q9Yyl9aWYobC50YWlsIT09bnVsbCl7ZT1sLnRhaWw7ZTp7Zm9yKG49ZTtuIT09bnVsbDspe2lmKG4uYWx0ZXJuYXRlIT09bnVsbCl7bj0hMTticmVhayBlfW49bi5zaWJsaW5nfW49ITB9cmV0dXJuIGwucmVuZGVyaW5nPWUsbC50YWlsPWUuc2libGluZyxsLnJlbmRlcmluZ1N0YXJ0VGltZT1lbigpLGUuc2libGluZz1udWxsLGM9QXQuY3VycmVudCxjPXI/YyYxfDI6YyYxLGwudGFpbE1vZGU9PT0idmlzaWJsZSJ8fGwudGFpbE1vZGU9PT0iY29sbGFwc2VkInx8IW58fE5lP1ZyKHQsYyk6KG49YyxQZShPdCx0KSxQZShBdCxuKSxrdD09PW51bGwmJihrdD10KSksTmUmJmJsKHQsbC50cmVlRm9ya0NvdW50KSxlfXJldHVybiBXZSh0KSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gb24odCksUmQoKSxsPXQubWVtb2l6ZWRTdGF0ZSE9PW51bGwsZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9PWwmJih0LmZsYWdzfD04MTkyKTpsJiYodC5mbGFnc3w9ODE5MiksbD8obiY1MzY4NzA5MTIpIT09MCYmKHQuZmxhZ3MmMTI4KT09PTAmJihXZSh0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOldlKHQpLG49dC51cGRhdGVRdWV1ZSxuIT09bnVsbCYmdHUodCxuLnJldHJ5UXVldWUpLG49bnVsbCxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihuPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksbD1udWxsLHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2whPT1udWxsJiYobD10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGwhPT1uJiYodC5mbGFnc3w9MjA0OCksZSE9PW51bGwmJml0KExhKSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG49bnVsbCxlIT09bnVsbCYmKG49ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSx0Lm1lbW9pemVkU3RhdGUuY2FjaGUhPT1uJiYodC5mbGFnc3w9MjA0OCksU2woZnQpLFdlKHQpLG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbDtjYXNlIDMwOnJldHVybiB0LmZsYWdzfD0zMzU1NDQzMixXZSh0KSxudWxsfXRocm93IEVycm9yKGkoMTU2LHQudGFnKSl9ZnVuY3Rpb24gRU4oZSx0KXtzd2l0Y2goZGQodCksdC50YWcpe2Nhc2UgMTpyZXR1cm4gZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAzOnJldHVybiBTbChmdCksc28oKSxlPXQuZmxhZ3MsKGUmNjU1MzYpIT09MCYmKGUmMTI4KT09PTA/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpyZXR1cm4gcmModCksbnVsbDtjYXNlIDMxOmlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2lmKG9uKHQpLHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihpKDM0MCkpO0RhKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTM6aWYob24odCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihpKDM0MCkpO0RhKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIE9kKHQpLGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCxlPXQubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmKGUucmVuZGVyaW5nPW51bGwsZS50YWlsPW51bGwpLHQuZmxhZ3N8PTQsdCk6bnVsbDtjYXNlIDQ6cmV0dXJuIHNvKCksbnVsbDtjYXNlIDEwOnJldHVybiBTbCh0LnR5cGUpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvbih0KSxSZCgpLGUhPT1udWxsJiZpdChMYSksZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAyNDpyZXR1cm4gU2woZnQpLG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBieChlLHQpe3N3aXRjaChkZCh0KSx0LnRhZyl7Y2FzZSAzOlNsKGZ0KSxzbygpO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmModCk7YnJlYWs7Y2FzZSA0OnNvKCk7YnJlYWs7Y2FzZSAzMTp0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiZvbih0KTticmVhaztjYXNlIDEzOm9uKHQpO2JyZWFrO2Nhc2UgMTk6T2QodCk7YnJlYWs7Y2FzZSAxMDpTbCh0LnR5cGUpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpvbih0KSxSZCgpLGUhPT1udWxsJiZpdChMYSk7YnJlYWs7Y2FzZSAyNDpTbChmdCl9fWZ1bmN0aW9uIFpyKGUsdCl7dHJ5e3ZhciBuPXQudXBkYXRlUXVldWUsbD1uIT09bnVsbD9uLmxhc3RFZmZlY3Q6bnVsbDtpZihsIT09bnVsbCl7dmFyIHI9bC5uZXh0O249cjtkb3tpZigobi50YWcmZSk9PT1lKXtsPXZvaWQgMDt2YXIgYz1uLmNyZWF0ZSxoPW4uaW5zdDtsPWMoKSxoLmRlc3Ryb3k9bH1uPW4ubmV4dH13aGlsZShuIT09cil9fWNhdGNoKFMpe1hlKHQsdC5yZXR1cm4sUyl9fWZ1bmN0aW9uIGVhKGUsdCxuKXt0cnl7dmFyIGw9dC51cGRhdGVRdWV1ZSxyPWwhPT1udWxsP2wubGFzdEVmZmVjdDpudWxsO2lmKHIhPT1udWxsKXt2YXIgYz1yLm5leHQ7bD1jO2Rve2lmKChsLnRhZyZlKT09PWUpe3ZhciBoPWwuaW5zdCxTPWguZGVzdHJveTtpZihTIT09dm9pZCAwKXtoLmRlc3Ryb3k9dm9pZCAwLHI9dDt2YXIgXz1uLEw9Uzt0cnl7TCgpfWNhdGNoKFYpe1hlKHIsXyxWKX19fWw9bC5uZXh0fXdoaWxlKGwhPT1jKX19Y2F0Y2goVil7WGUodCx0LnJldHVybixWKX19ZnVuY3Rpb24geHgoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZih0IT09bnVsbCl7dmFyIG49ZS5zdGF0ZU5vZGU7dHJ5e3UwKHQsbil9Y2F0Y2gobCl7WGUoZSxlLnJldHVybixsKX19fWZ1bmN0aW9uIFN4KGUsdCxuKXtuLnByb3BzPVBhKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpLG4uc3RhdGU9ZS5tZW1vaXplZFN0YXRlO3RyeXtuLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobCl7WGUoZSx0LGwpfX1mdW5jdGlvbiBxbihlLHQpe3RyeXt2YXIgbj1lLnJlZjtpZihuIT09bnVsbCl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnZhciBsPWUuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMzA6dmFyIHI9ZS5zdGF0ZU5vZGUsYz12bChlLm1lbW9pemVkUHJvcHMscik7KHIucmVmPT09bnVsbHx8ci5yZWYubmFtZSE9PWMpJiYoci5yZWY9T1MoYykpLGw9ci5yZWY7YnJlYWs7Y2FzZSA3OmlmKGUuc3RhdGVOb2RlPT09bnVsbCl7dmFyIGg9bmV3IGZuKGUpO2coZS5jaGlsZCwhMSxwRCxoLHZvaWQgMCx2b2lkIDApLGUuc3RhdGVOb2RlPWh9bD1lLnN0YXRlTm9kZTticmVhaztkZWZhdWx0Omw9ZS5zdGF0ZU5vZGV9dHlwZW9mIG49PSJmdW5jdGlvbiI/ZS5yZWZDbGVhbnVwPW4obCk6bi5jdXJyZW50PWx9fWNhdGNoKFMpe1hlKGUsdCxTKX19ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1lLnJlZixsPWUucmVmQ2xlYW51cDtpZihuIT09bnVsbClpZih0eXBlb2YgbD09ImZ1bmN0aW9uIil0cnl7bCgpfWNhdGNoKHIpe1hlKGUsdCxyKX1maW5hbGx5e2UucmVmQ2xlYW51cD1udWxsLGU9ZS5hbHRlcm5hdGUsZSE9bnVsbCYmKGUucmVmQ2xlYW51cD1udWxsKX1lbHNlIGlmKHR5cGVvZiBuPT0iZnVuY3Rpb24iKXRyeXtuKG51bGwpfWNhdGNoKHIpe1hlKGUsdCxyKX1lbHNlIG4uY3VycmVudD1udWxsfWZ1bmN0aW9uIG51KGUsdCl7aWYoKGUudGFnPT09NXx8ZS50YWc9PT0yN3x8ZS50YWc9PT02KSYmZS5hbHRlcm5hdGU9PT1udWxsJiZ0IT09bnVsbClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl6UyhlLnN0YXRlTm9kZSx0W25dKX1mdW5jdGlvbiBDeChlKXtmb3IodmFyIHQ9ZS5yZXR1cm47dCE9PW51bGwmJihvbSh0KSYmelMoZS5zdGF0ZU5vZGUsdC5zdGF0ZU5vZGUpLCFhbSh0KSk7KXQ9dC5yZXR1cm59ZnVuY3Rpb24gRnIoZSl7Zm9yKHZhciB0PWUucmV0dXJuO3QhPT1udWxsJiYob20odCkmJnZEKGUuc3RhdGVOb2RlLHQuc3RhdGVOb2RlKSwhYW0odCkpOyl0PXQucmV0dXJufWZ1bmN0aW9uIGFtKGUpe3JldHVybiBlLnRhZz09PTV8fGUudGFnPT09M3x8ZS50YWc9PT0yN31mdW5jdGlvbiBvbShlKXtyZXR1cm4gZSYmZS50YWc9PT03JiZlLnN0YXRlTm9kZSE9PW51bGx9ZnVuY3Rpb24gcm0oZSl7dmFyIHQ9ZS50eXBlLG49ZS5tZW1vaXplZFByb3BzLGw9ZS5zdGF0ZU5vZGU7dHJ5e2U6c3dpdGNoKHQpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6bi5hdXRvRm9jdXMmJmwuZm9jdXMoKTticmVhayBlO2Nhc2UiaW1nIjpuLnNyYz9sLnNyYz1uLnNyYzpuLnNyY1NldCYmKGwuc3Jjc2V0PW4uc3JjU2V0KX19Y2F0Y2gocil7WGUoZSxlLnJldHVybixyKX19ZnVuY3Rpb24gaW0oZSx0LG4pe3RyeXt2YXIgbD1lLnN0YXRlTm9kZTskTihsLGUudHlwZSxuLHQpLGxbWHRdPXR9Y2F0Y2gocil7WGUoZSxlLnJldHVybixyKX19ZnVuY3Rpb24gVHgoZSl7cmV0dXJuIGUudGFnPT09NXx8ZS50YWc9PT0zfHxlLnRhZz09PTI2fHxlLnRhZz09PTI3JiZpYShlLnR5cGUpfHxlLnRhZz09PTR9ZnVuY3Rpb24gY20oZSl7ZTpmb3IoOzspe2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8VHgoZS5yZXR1cm4pKXJldHVybiBudWxsO2U9ZS5yZXR1cm59Zm9yKGUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmc7ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTg7KXtpZihlLnRhZz09PTI3JiZpYShlLnR5cGUpfHxlLmZsYWdzJjJ8fGUuY2hpbGQ9PT1udWxsfHxlLnRhZz09PTQpY29udGludWUgZTtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZH1pZighKGUuZmxhZ3MmMikpcmV0dXJuIGUuc3RhdGVOb2RlfX1mdW5jdGlvbiB1bShlLHQsbixsKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpcj1lLnN0YXRlTm9kZSx0PyhuLm5vZGVUeXBlPT09OT9uLmJvZHk6bi5ub2RlTmFtZT09PSJIVE1MIj9uLm93bmVyRG9jdW1lbnQuYm9keTpuKS5pbnNlcnRCZWZvcmUocix0KToodD1uLm5vZGVUeXBlPT09OT9uLmJvZHk6bi5ub2RlTmFtZT09PSJIVE1MIj9uLm93bmVyRG9jdW1lbnQuYm9keTpuLHQuYXBwZW5kQ2hpbGQociksbj1uLl9yZWFjdFJvb3RDb250YWluZXIsbiE9bnVsbHx8dC5vbmNsaWNrIT09bnVsbHx8KHQub25jbGljaz1HbikpLG51KGUsbCksQmU9ITA7ZWxzZSBpZihyIT09NCYmKHI9PT0yNyYmKG51KGUsbCksbD1udWxsLGlhKGUudHlwZSkmJihuPWUuc3RhdGVOb2RlLHQ9bnVsbCkpLGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKHVtKGUsdCxuLGwpLGU9ZS5zaWJsaW5nO2UhPT1udWxsOyl1bShlLHQsbixsKSxlPWUuc2libGluZ31mdW5jdGlvbiBsdShlLHQsbixsKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpcj1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKHIsdCk6bi5hcHBlbmRDaGlsZChyKSxudShlLGwpLEJlPSEwO2Vsc2UgaWYociE9PTQmJihyPT09MjcmJihudShlLGwpLGw9bnVsbCxpYShlLnR5cGUpJiYobj1lLnN0YXRlTm9kZSkpLGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKGx1KGUsdCxuLGwpLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylsdShlLHQsbixsKSxlPWUuc2libGluZ31mdW5jdGlvbiB3eChlKXt2YXIgdD1lLnN0YXRlTm9kZSxuPWUubWVtb2l6ZWRQcm9wczt0cnl7Zm9yKHZhciBsPWUudHlwZSxyPXQuYXR0cmlidXRlcztyLmxlbmd0aDspdC5yZW1vdmVBdHRyaWJ1dGVOb2RlKHJbMF0pO0R0KHQsbCxuKSx0W1J0XT1lLHRbWHRdPW59Y2F0Y2goYyl7WGUoZSxlLnJldHVybixjKX19dmFyIGF1PSExLHJuPW51bGw7ZnVuY3Rpb24gRXgoZSl7KGUudGFnPT09MzB8fChlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wKSYmKGF1PSEwKX12YXIgWG49bnVsbDtmdW5jdGlvbiBSeCgpe3ZhciBlPVhuO3JldHVybiBYbj1udWxsLGV9dmFyIFF0PTA7ZnVuY3Rpb24ga28oZSx0LG4sbCxyKXtyZXR1cm4gUXQ9MCxfeChlLmNoaWxkLHQsbixsLHIpfWZ1bmN0aW9uIF94KGUsdCxuLGwscil7Zm9yKHZhciBjPSExO2UhPT1udWxsOyl7aWYoZS50YWc9PT01KXt2YXIgaD1lLnN0YXRlTm9kZTtpZihsIT09bnVsbCl7dmFyIFM9WG0oaCk7bC5wdXNoKFMpLFMudmlldyYmKGM9ITApfWVsc2UgY3x8WG0oaCkudmlldyYmKGM9ITApO2F1PSEwLFJTKGgsUXQ9PT0wP3Q6dCsiXyIrUXQsbiksUXQrK31lbHNlKGUudGFnIT09MjJ8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpJiYoZS50YWc9PT0zMCYmcnx8X3goZS5jaGlsZCx0LG4sbCxyKSYmKGM9ITApKTtlPWUuc2libGluZ31yZXR1cm4gY31mdW5jdGlvbiBLbihlLHQpe2Zvcig7ZSE9PW51bGw7KWUudGFnPT09NT9fUyhlLnN0YXRlTm9kZSxlLm1lbW9pemVkUHJvcHMpOihlLnRhZyE9PTIyfHxlLm1lbW9pemVkU3RhdGU9PT1udWxsKSYmKGUudGFnPT09MzAmJnR8fEtuKGUuY2hpbGQsdCkpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIG91KGUpe2lmKChlLnN1YnRyZWVGbGFncyYxODg3NDM2OCkhPT0wKWZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KXtpZigoZS50YWchPT0yMnx8ZS5tZW1vaXplZFN0YXRlPT09bnVsbCkmJihvdShlKSxlLnRhZz09PTMwJiYoZS5mbGFncyYxODg3NDM2OCkhPT0wJiZlLnN0YXRlTm9kZS5wYWlyZWQpKXt2YXIgdD1lLm1lbW9pemVkUHJvcHM7aWYodC5uYW1lPT1udWxsfHx0Lm5hbWU9PT0iYXV0byIpdGhyb3cgRXJyb3IoaSg1NDQpKTt2YXIgbj10Lm5hbWU7dD1nbCh0LmRlZmF1bHQsdC5zaGFyZSksdCE9PSJub25lIiYmKGtvKGUsbix0LG51bGwsITEpfHxLbihlLmNoaWxkLCExKSl9ZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIHNtKGUsdCl7aWYoZS50YWc9PT0zMCl7dmFyIG49ZS5zdGF0ZU5vZGUsbD1lLm1lbW9pemVkUHJvcHMscj12bChsLG4pLGM9Z2wobC5kZWZhdWx0LG4ucGFpcmVkP2wuc2hhcmU6bC5lbnRlcik7YyE9PSJub25lIj9rbyhlLHIsYyxudWxsLCExKT8ob3UoZSksbi5wYWlyZWR8fHR8fFZvKGUsbC5vbkVudGVyKSk6S24oZS5jaGlsZCwhMSk6b3UoZSl9ZWxzZSBpZigoZS5zdWJ0cmVlRmxhZ3MmMzM1NTQ0MzIpIT09MClmb3IoZT1lLmNoaWxkO2UhPT1udWxsOylzbShlLHQpLGU9ZS5zaWJsaW5nO2Vsc2Ugb3UoZSl9ZnVuY3Rpb24gZm0oZSl7aWYocm4hPT1udWxsJiZybi5zaXplIT09MCl7dmFyIHQ9cm47aWYoKGUuc3VidHJlZUZsYWdzJjE4ODc0MzY4KSE9PTApZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnIT09MjJ8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpe2lmKGUudGFnPT09MzAmJihlLmZsYWdzJjE4ODc0MzY4KSE9PTApe3ZhciBuPWUubWVtb2l6ZWRQcm9wcyxsPW4ubmFtZTtpZihsIT1udWxsJiZsIT09ImF1dG8iKXt2YXIgcj10LmdldChsKTtpZihyIT09dm9pZCAwKXt2YXIgYz1nbChuLmRlZmF1bHQsbi5zaGFyZSk7aWYoYyE9PSJub25lIiYmKGtvKGUsbCxjLG51bGwsITEpPyhjPWUuc3RhdGVOb2RlLHIucGFpcmVkPWMsYy5wYWlyZWQ9cixWbyhlLG4ub25TaGFyZSkpOktuKGUuY2hpbGQsITEpKSx0LmRlbGV0ZShsKSx0LnNpemU9PT0wKWJyZWFrfX19Zm0oZSl9ZT1lLnNpYmxpbmd9fX1mdW5jdGlvbiBkbShlKXtpZihlLnRhZz09PTMwKXt2YXIgdD1lLm1lbW9pemVkUHJvcHMsbj12bCh0LGUuc3RhdGVOb2RlKSxsPXJuIT09bnVsbD9ybi5nZXQobik6dm9pZCAwLHI9Z2wodC5kZWZhdWx0LGwhPT12b2lkIDA/dC5zaGFyZTp0LmV4aXQpO3IhPT0ibm9uZSImJihrbyhlLG4scixudWxsLCExKT9sIT09dm9pZCAwPyhyPWUuc3RhdGVOb2RlLGwucGFpcmVkPXIsci5wYWlyZWQ9bCxybi5kZWxldGUobiksVm8oZSx0Lm9uU2hhcmUpKTpWbyhlLHQub25FeGl0KTpLbihlLmNoaWxkLCExKSkscm4hPT1udWxsJiZmbShlKX1lbHNlIGlmKChlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wKWZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KWRtKGUpLGU9ZS5zaWJsaW5nO2Vsc2Ugcm4hPT1udWxsJiZmbShlKX1mdW5jdGlvbiBPeChlKXtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7aWYoZS50YWc9PT0zMCl7dmFyIHQ9ZS5tZW1vaXplZFByb3BzLG49dmwodCxlLnN0YXRlTm9kZSk7dD1nbCh0LmRlZmF1bHQsdC51cGRhdGUpLGUuZmxhZ3MmPS01LHQhPT0ibm9uZSImJmtvKGUsbix0LGUubWVtb2l6ZWRTdGF0ZT1bXSwhMSl9ZWxzZShlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wJiZPeChlKTtlPWUuc2libGluZ319ZnVuY3Rpb24gbW0oZSl7aWYoKGUuc3VidHJlZUZsYWdzJjE4ODc0MzY4KSE9PTApZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnIT09MjJ8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpe2lmKGUudGFnPT09MzAmJihlLmZsYWdzJjE4ODc0MzY4KSE9PTApe3ZhciB0PWUuc3RhdGVOb2RlO3QucGFpcmVkIT09bnVsbCYmKHQucGFpcmVkPW51bGwsS24oZS5jaGlsZCwhMSkpfW1tKGUpfWU9ZS5zaWJsaW5nfX1mdW5jdGlvbiBydShlKXtpZihlLnRhZz09PTMwKWUuc3RhdGVOb2RlLnBhaXJlZD1udWxsLEtuKGUuY2hpbGQsITEpLG1tKGUpO2Vsc2UgaWYoKGUuc3VidHJlZUZsYWdzJjMzNTU0NDMyKSE9PTApZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspcnUoZSksZT1lLnNpYmxpbmc7ZWxzZSBtbShlKX1mdW5jdGlvbiBBeChlKXtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyllLnRhZz09PTMwP0tuKGUuY2hpbGQsITEpOihlLnN1YnRyZWVGbGFncyYzMzU1NDQzMikhPT0wJiZBeChlKSxlPWUuc2libGluZ31mdW5jdGlvbiBobShlLHQsbixsLHIsYyxoKXtmb3IodmFyIFM9ITE7dCE9PW51bGw7KXtpZih0LnRhZz09PTUpe3ZhciBfPXQuc3RhdGVOb2RlO2lmKGMhPT1udWxsJiZRdDxjLmxlbmd0aCl7dmFyIEw9Y1tRdF0sVj1YbShfKTsoTC52aWV3fHxWLnZpZXcpJiYoUz0hMCk7dmFyIFo7aWYoWj0oZS5mbGFncyY0KT09PTApaWYoVi5jbGlwKVo9ITA7ZWxzZXtaPUwucmVjdDt2YXIgej1WLnJlY3Q7Wj1aLnkhPT16Lnl8fFoueCE9PXoueHx8Wi5oZWlnaHQhPT16LmhlaWdodHx8Wi53aWR0aCE9PXoud2lkdGh9WiYmKGUuZmxhZ3N8PTQpLFYuYWJzP1Y9IUwuYWJzOihMPUwucmVjdCxWPVYucmVjdCxWPUwuaGVpZ2h0IT09Vi5oZWlnaHR8fEwud2lkdGghPT1WLndpZHRoKSxWJiYoZS5mbGFnc3w9MzIpfWVsc2UgZS5mbGFnc3w9MzI7KGUuZmxhZ3MmNCkhPT0wJiZSUyhfLFF0PT09MD9uOm4rIl8iK1F0LHIpLFMmJihlLmZsYWdzJjQpIT09MHx8KFhuPT09bnVsbCYmKFhuPVtdKSxYbi5wdXNoKF8sUXQ9PT0wP2w6bCsiXyIrUXQsdC5tZW1vaXplZFByb3BzKSksUXQrK31lbHNlKHQudGFnIT09MjJ8fHQubWVtb2l6ZWRTdGF0ZT09PW51bGwpJiYodC50YWc9PT0zMCYmaD9lLmZsYWdzfD10LmZsYWdzJjMyOmhtKGUsdC5jaGlsZCxuLGwscixjLGgpJiYoUz0hMCkpO3Q9dC5zaWJsaW5nfXJldHVybiBTfWZ1bmN0aW9uIE54KGUsdCl7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MzApe3ZhciBuPWUubWVtb2l6ZWRQcm9wcyxsPWUuc3RhdGVOb2RlLHI9dmwobixsKSxjPWdsKG4uZGVmYXVsdCxuLnVwZGF0ZSksaDtoPWUubWVtb2l6ZWRTdGF0ZSxlLm1lbW9pemVkU3RhdGU9bnVsbCxsPWU7dmFyIFM9ZS5jaGlsZDtRdD0wLHI9aG0obCxTLHIscixjLGgsITEpLChlLmZsYWdzJjQpIT09MCYmciYmVm8oZSxuLm9uVXBkYXRlKX1lbHNlKGUuc3VidHJlZUZsYWdzJjMzNTU0NDMyKSE9PTAmJk54KGUpO2U9ZS5zaWJsaW5nfX12YXIgU3Q9ITEsR2U9ITEsUW49ITEscG09ITEsRHg9dHlwZW9mIFdlYWtTZXQ9PSJmdW5jdGlvbiI/V2Vha1NldDpTZXQsQ3Q9bnVsbCxabj0hMSwkcj0hMSxpdT0hMSx2bT0hMTtmdW5jdGlvbiBSTihlLHQsbil7aWYoZT1lLmNvbnRhaW5lckluZm8sUG09V28sZT1rYihlKSxuZChlKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIGw9e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e2w9KGw9ZS5vd25lckRvY3VtZW50KSYmbC5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciByPWwuZ2V0U2VsZWN0aW9uJiZsLmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudCE9PTApe2w9ci5hbmNob3JOb2RlO3ZhciBjPXIuYW5jaG9yT2Zmc2V0LGg9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtsLm5vZGVUeXBlLGgubm9kZVR5cGV9Y2F0Y2h7bD1udWxsO2JyZWFrIGV9dmFyIFM9MCxfPS0xLEw9LTEsVj0wLFo9MCx6PWUsRz1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIG9lO3ohPT1sfHxjIT09MCYmei5ub2RlVHlwZSE9PTN8fChfPVMrYykseiE9PWh8fHIhPT0wJiZ6Lm5vZGVUeXBlIT09M3x8KEw9UytyKSx6Lm5vZGVUeXBlPT09MyYmKFMrPXoubm9kZVZhbHVlLmxlbmd0aCksKG9lPXouZmlyc3RDaGlsZCkhPT1udWxsOylHPXosej1vZTtmb3IoOzspe2lmKHo9PT1lKWJyZWFrIHQ7aWYoRz09PWwmJisrVj09PWMmJihfPVMpLEc9PT1oJiYrK1o9PT1yJiYoTD1TKSwob2U9ei5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO3o9RyxHPXoucGFyZW50Tm9kZX16PW9lfWw9Xz09PS0xfHxMPT09LTE/bnVsbDp7c3RhcnQ6XyxlbmQ6TH19ZWxzZSBsPW51bGx9bD1sfHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBsPW51bGw7Zm9yKEdtPXtmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOmx9LFdvPSExLG49KG4mMzM1NTQ0MDY0KT09PW4sQ3Q9dCx0PW4/OTI3MDoxMDI0O0N0IT09bnVsbDspe2lmKGU9Q3QsbiYmKGw9ZS5kZWxldGlvbnMsbCE9PW51bGwpKWZvcihjPTA7YzxsLmxlbmd0aDtjKyspbiYmZG0obFtjXSk7aWYoZS5hbHRlcm5hdGU9PT1udWxsJiYoZS5mbGFncyYyKSE9PTApbiYmRXgoZSksY3Uobik7ZWxzZXtpZihlLnRhZz09PTIyKXtpZihsPWUuYWx0ZXJuYXRlLGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2whPT1udWxsJiZsLm1lbW9pemVkU3RhdGU9PT1udWxsJiZuJiZkbShsKSxjdShuKTtjb250aW51ZX1lbHNlIGlmKGwhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsKXtuJiZFeChlKSxjdShuKTtjb250aW51ZX19bD1lLmNoaWxkLChlLnN1YnRyZWVGbGFncyZ0KSE9PTAmJmwhPT1udWxsPyhsLnJldHVybj1lLEN0PWwpOihuJiZPeChlKSxjdShuKSl9fXJuPW51bGx9ZnVuY3Rpb24gY3UoZSl7Zm9yKDtDdCE9PW51bGw7KXt2YXIgdD1DdCxuPWUsbD10LmFsdGVybmF0ZSxyPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmJyZWFrO2Nhc2UgMTppZigociYxMDI0KSE9PTAmJmwhPT1udWxsKXtuPXZvaWQgMCxyPWwubWVtb2l6ZWRQcm9wcyxsPWwubWVtb2l6ZWRTdGF0ZTt2YXIgYz10LnN0YXRlTm9kZTt0cnl7dmFyIGg9UGEodC50eXBlLHIpO249Yy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShoLGwpLGMuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9bn1jYXRjaChTKXtYZSh0LHQucmV0dXJuLFMpfX1icmVhaztjYXNlIDM6aWYoKHImMTAyNCkhPT0wKXtpZihsPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbj1sLm5vZGVUeXBlLG49PT05KVptKGwpO2Vsc2UgaWYobj09PTEpc3dpdGNoKGwubm9kZU5hbWUpe2Nhc2UiSEVBRCI6Y2FzZSJIVE1MIjpjYXNlIkJPRFkiOlptKGwpO2JyZWFrO2RlZmF1bHQ6bC50ZXh0Q29udGVudD0iIn19YnJlYWs7Y2FzZSA1OmNhc2UgMjY6Y2FzZSAyNzpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7Y2FzZSAzMDpuJiZsIT09bnVsbCYmKG49dmwobC5tZW1vaXplZFByb3BzLGwuc3RhdGVOb2RlKSxyPXQubWVtb2l6ZWRQcm9wcyxyPWdsKHIuZGVmYXVsdCxyLnVwZGF0ZSksciE9PSJub25lIiYma28obCxuLHIsbC5tZW1vaXplZFN0YXRlPVtdLCEwKSk7YnJlYWs7ZGVmYXVsdDppZigociYxMDI0KSE9PTApdGhyb3cgRXJyb3IoaSgxNjMpKX1pZihsPXQuc2libGluZyxsIT09bnVsbCl7bC5yZXR1cm49dC5yZXR1cm4sQ3Q9bDticmVha31DdD10LnJldHVybn19ZnVuY3Rpb24gangoZSx0LG4pe3ZhciBsPW4uZmxhZ3M7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkZuKGUsbiksbCY0JiZacig1LG4pO2JyZWFrO2Nhc2UgMTppZihGbihlLG4pLGwmNClpZihlPW4uc3RhdGVOb2RlLHQ9PT1udWxsKXRyeXtlLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2goaCl7WGUobixuLnJldHVybixoKX1lbHNle3ZhciByPVBhKG4udHlwZSx0Lm1lbW9pemVkUHJvcHMpO3Q9dC5tZW1vaXplZFN0YXRlO3RyeXtlLmNvbXBvbmVudERpZFVwZGF0ZShyLHQsZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9Y2F0Y2goaCl7WGUobixuLnJldHVybixoKX19bCY2NCYmeHgobiksbCY1MTImJnFuKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMzppZihGbihlLG4pLGwmNjQmJihlPW4udXBkYXRlUXVldWUsZSE9PW51bGwpKXtpZih0PW51bGwsbi5jaGlsZCE9PW51bGwpc3dpdGNoKG4uY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTp0PW4uY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTp0PW4uY2hpbGQuc3RhdGVOb2RlfXRyeXt1MChlLHQpfWNhdGNoKGgpe1hlKG4sbi5yZXR1cm4saCl9fWJyZWFrO2Nhc2UgMjc6dD09PW51bGwmJmwmNCYmd3gobik7Y2FzZSAyNjpjYXNlIDU6Rm4oZSxuKSx0PT09bnVsbCYmbCY0JiZybShuKSxsJjUxMiYmcW4obixuLnJldHVybik7YnJlYWs7Y2FzZSAxMjpGbihlLG4pO2JyZWFrO2Nhc2UgMzE6Rm4oZSxuKSxsJjQmJkx4KGUsbik7YnJlYWs7Y2FzZSAxMzpGbihlLG4pLGwmNCYmVXgoZSxuKSxsJjY0JiYoZT1uLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCYmKG49SE4uYmluZChudWxsLG4pLGJEKGUsbikpKSk7YnJlYWs7Y2FzZSAyMjppZihsPW4ubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fFN0LCFsKXt2YXIgYz10IT09bnVsbCYmdC5tZW1vaXplZFN0YXRlIT09bnVsbHx8R2U7dD1TdCxyPUdlLFN0PWwsKEdlPWMpJiYhcj8obD0yLChuLnN1YnRyZWVGbGFncyY4NzcyKSE9PTAmJihsfD0xKSxqbihlLG4sbCkpOkZuKGUsbiksU3Q9dCxHZT1yfWJyZWFrO2Nhc2UgMzA6Rm4oZSxuKSxsJjUxMiYmcW4obixuLnJldHVybik7YnJlYWs7Y2FzZSA3OmwmNTEyJiZxbihuLG4ucmV0dXJuKTtkZWZhdWx0OkZuKGUsbil9fWZ1bmN0aW9uIGdtKGUsdCl7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspTXgoZSx0KSxlPWUuc2libGluZ31mdW5jdGlvbiBNeChlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OmNhc2UgMjY6dHJ5e3ZhciBuPWUuc3RhdGVOb2RlO2lmKHQpe3ZhciBsPW4uc3R5bGU7dHlwZW9mIGwuc2V0UHJvcGVydHk9PSJmdW5jdGlvbiI/bC5zZXRQcm9wZXJ0eSgiZGlzcGxheSIsIm5vbmUiLCJpbXBvcnRhbnQiKTpsLmRpc3BsYXk9Im5vbmUifWVsc2V7dmFyIHI9ZS5zdGF0ZU5vZGUsYz1lLm1lbW9pemVkUHJvcHMuc3R5bGUsaD1jIT1udWxsJiZjLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/Yy5kaXNwbGF5Om51bGw7ci5zdHlsZS5kaXNwbGF5PWg9PW51bGx8fHR5cGVvZiBoPT0iYm9vbGVhbiI/IiI6KCIiK2gpLnRyaW0oKX19Y2F0Y2goXyl7WGUoZSxlLnJldHVybixfKX15bShlLHQpO2JyZWFrO2Nhc2UgNjp0cnl7ZS5zdGF0ZU5vZGUubm9kZVZhbHVlPXQ/IiI6ZS5tZW1vaXplZFByb3BzLEJlPSEwfWNhdGNoKF8pe1hlKGUsZS5yZXR1cm4sXyl9YnJlYWs7Y2FzZSAxODp0cnl7dmFyIFM9ZS5zdGF0ZU5vZGU7dD9FUyhTLCEwKTpFUyhlLnN0YXRlTm9kZSwhMSl9Y2F0Y2goXyl7WGUoZSxlLnJldHVybixfKX1icmVhaztjYXNlIDIyOmNhc2UgMjM6ZS5tZW1vaXplZFN0YXRlPT09bnVsbCYmZ20oZSx0KTticmVhaztkZWZhdWx0OmdtKGUsdCl9fWZ1bmN0aW9uIHltKGUsdCl7aWYoZS5zdWJ0cmVlRmxhZ3MmNjcxMDg4NjQpZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2U6e3ZhciBuPWUsbD10O3N3aXRjaChuLnRhZyl7Y2FzZSA0Ok14KG4sbCk7YnJlYWsgZTtjYXNlIDIyOm4ubWVtb2l6ZWRTdGF0ZT09PW51bGwmJnltKG4sbCk7YnJlYWsgZTtkZWZhdWx0OnltKG4sbCl9fWU9ZS5zaWJsaW5nfX1mdW5jdGlvbiB6eChlKXt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsengodCkpLGUuY2hpbGQ9bnVsbCxlLmRlbGV0aW9ucz1udWxsLGUuc2libGluZz1udWxsLGUudGFnPT09NSYmKHQ9ZS5zdGF0ZU5vZGUsdCE9PW51bGwmJm1jKHQpKSxlLnN0YXRlTm9kZT1udWxsLGUucmV0dXJuPW51bGwsZS5kZXBlbmRlbmNpZXM9bnVsbCxlLm1lbW9pemVkUHJvcHM9bnVsbCxlLm1lbW9pemVkU3RhdGU9bnVsbCxlLnBlbmRpbmdQcm9wcz1udWxsLGUuc3RhdGVOb2RlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsfXZhciBldD1udWxsLFp0PSExO2Z1bmN0aW9uIE5uKGUsdCxuKXtmb3Iobj1uLmNoaWxkO24hPT1udWxsOylreChlLHQsbiksbj1uLnNpYmxpbmd9ZnVuY3Rpb24ga3goZSx0LG4pe2lmKHRuJiZ0eXBlb2YgdG4ub25Db21taXRGaWJlclVubW91bnQ9PSJmdW5jdGlvbiIpdHJ5e3RuLm9uQ29tbWl0RmliZXJVbm1vdW50KHhyLG4pfWNhdGNoe31zd2l0Y2gobi50YWcpe2Nhc2UgMjY6R2V8fE50KG4sdCksTm4oZSx0LG4pLG4ubWVtb2l6ZWRTdGF0ZT9uLm1lbW9pemVkU3RhdGUuY291bnQtLTpuLnN0YXRlTm9kZSYmIUdlJiYobj1uLnN0YXRlTm9kZSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO2JyZWFrO2Nhc2UgMjc6R2V8fE50KG4sdCksRnIobik7dmFyIGw9ZXQscj1adDtpYShuLnR5cGUpJiYoZXQ9bi5zdGF0ZU5vZGUsWnQ9ITEpLE5uKGUsdCxuKSxCUyhuLnN0YXRlTm9kZSxuLnR5cGUsbi5tZW1vaXplZFByb3BzKSxldD1sLFp0PXI7YnJlYWs7Y2FzZSA1OkdlfHxOdChuLHQpLEZyKG4pO2Nhc2UgNjppZihuLnRhZz09PTYmJkZyKG4pLGw9ZXQscj1adCxldD1udWxsLE5uKGUsdCxuKSxldD1sLFp0PXIsZXQhPT1udWxsKWlmKFp0KXRyeXsoZXQubm9kZVR5cGU9PT05P2V0LmJvZHk6ZXQubm9kZU5hbWU9PT0iSFRNTCI/ZXQub3duZXJEb2N1bWVudC5ib2R5OmV0KS5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSksQmU9ITB9Y2F0Y2goYyl7WGUobix0LGMpfWVsc2UgdHJ5e2V0LnJlbW92ZUNoaWxkKG4uc3RhdGVOb2RlKSxCZT0hMH1jYXRjaChjKXtYZShuLHQsYyl9YnJlYWs7Y2FzZSAxODpldCE9PW51bGwmJihadD8oZT1ldCx3UyhlLm5vZGVUeXBlPT09OT9lLmJvZHk6ZS5ub2RlTmFtZT09PSJIVE1MIj9lLm93bmVyRG9jdW1lbnQuYm9keTplLG4uc3RhdGVOb2RlKSxlcihlKSk6d1MoZXQsbi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6bD1ldCxyPVp0LGV0PW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sWnQ9ITAsTm4oZSx0LG4pLGV0PWwsWnQ9cjticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6ZWEoMixuLHQpLEdlfHxlYSg0LG4sdCksTm4oZSx0LG4pO2JyZWFrO2Nhc2UgMTpHZXx8KE50KG4sdCksbD1uLnN0YXRlTm9kZSx0eXBlb2YgbC5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIiYmU3gobix0LGwpKSxObihlLHQsbik7YnJlYWs7Y2FzZSAyMTpObihlLHQsbik7YnJlYWs7Y2FzZSAyMjpHZT0obD1HZSl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsTm4oZSx0LG4pLEdlPWw7YnJlYWs7Y2FzZSAzMDpOdChuLHQpLE5uKGUsdCxuKTticmVhaztjYXNlIDc6R2V8fE50KG4sdCksTm4oZSx0LG4pO2JyZWFrO2RlZmF1bHQ6Tm4oZSx0LG4pfX1mdW5jdGlvbiBMeChlLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihlPXQuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwpKSl7ZT1lLmRlaHlkcmF0ZWQ7dHJ5e2VyKGUpfWNhdGNoKG4pe1hlKHQsdC5yZXR1cm4sbil9fX1mdW5jdGlvbiBVeChlLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihlPXQuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCkpKSl0cnl7ZXIoZSl9Y2F0Y2gobil7WGUodCx0LnJldHVybixuKX19ZnVuY3Rpb24gX04oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDMxOmNhc2UgMTM6Y2FzZSAxOTp2YXIgdD1lLnN0YXRlTm9kZTtyZXR1cm4gdD09PW51bGwmJih0PWUuc3RhdGVOb2RlPW5ldyBEeCksdDtjYXNlIDIyOnJldHVybiBlPWUuc3RhdGVOb2RlLHQ9ZS5fcmV0cnlDYWNoZSx0PT09bnVsbCYmKHQ9ZS5fcmV0cnlDYWNoZT1uZXcgRHgpLHQ7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQzNSxlLnRhZykpfX1mdW5jdGlvbiB1dShlLHQpe3ZhciBuPV9OKGUpO3QuZm9yRWFjaChmdW5jdGlvbihsKXtpZighbi5oYXMobCkpe24uYWRkKGwpO3ZhciByPUJOLmJpbmQobnVsbCxlLGwpO2wudGhlbihyLHIpfX0pfWZ1bmN0aW9uIEh0KGUsdCxuKXt2YXIgbD10LmRlbGV0aW9ucztpZihsIT09bnVsbClmb3IodmFyIHI9MDtyPGwubGVuZ3RoO3IrKyl7dmFyIGM9bFtyXSxoPWUsUz10LF89UztlOmZvcig7XyE9PW51bGw7KXtzd2l0Y2goXy50YWcpe2Nhc2UgMjc6aWYoaWEoXy50eXBlKSl7ZXQ9Xy5zdGF0ZU5vZGUsWnQ9ITE7YnJlYWsgZX1icmVhaztjYXNlIDU6ZXQ9Xy5zdGF0ZU5vZGUsWnQ9ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0OmV0PV8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sWnQ9ITA7YnJlYWsgZX1fPV8ucmV0dXJufWlmKGV0PT09bnVsbCl0aHJvdyBFcnJvcihpKDE2MCkpO2t4KGgsUyxjKSxldD1udWxsLFp0PSExLGg9Yy5hbHRlcm5hdGUsaCE9PW51bGwmJihoLnJldHVybj1udWxsKSxjLnJldHVybj1udWxsfWlmKHQuc3VidHJlZUZsYWdzJjEzODg2KWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KUh4KHQsZSxuKSx0PXQuc2libGluZ312YXIgRG49bnVsbDtmdW5jdGlvbiBIeChlLHQsbil7dmFyIGw9ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKHImNCYmKGw9ZS51cGRhdGVRdWV1ZSxsPWwhPT1udWxsP2wuZXZlbnRzOm51bGwsbCE9PW51bGwpKWZvcih2YXIgYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgaD1sW2NdO2gucmVmLmltcGw9aC5uZXh0SW1wbH1IdCh0LGUsbiksQnQoZSksciY0JiYoZWEoMyxlLGUucmV0dXJuKSxacigzLGUpLGVhKDUsZSxlLnJldHVybikpO2JyZWFrO2Nhc2UgMTpIdCh0LGUsbiksQnQoZSksciY1MTImJihHZXx8bD09PW51bGx8fE50KGwsbC5yZXR1cm4pKSxyJjY0JiZTdCYmKGU9ZS51cGRhdGVRdWV1ZSxlIT09bnVsbCYmKHQ9ZS5jYWxsYmFja3MsdCE9PW51bGwmJihuPWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyxlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bj09PW51bGw/dDpuLmNvbmNhdCh0KSkpKTticmVhaztjYXNlIDI2OmlmKGM9RG4sSHQodCxlLG4pLEJ0KGUpLHImNTEyJiYoR2V8fGw9PT1udWxsfHxOdChsLGwucmV0dXJuKSksciY0KWlmKHI9bCE9PW51bGw/bC5tZW1vaXplZFN0YXRlOm51bGwsbj1lLm1lbW9pemVkU3RhdGUsbD09PW51bGwpaWYobj09PW51bGwpaWYoZS5zdGF0ZU5vZGU9PT1udWxsKWlmKFN0KWUuc3RhdGVOb2RlPVNTKGUudHlwZSxlLm1lbW9pemVkUHJvcHMsdC5jb250YWluZXJJbmZvLGUpO2Vsc2V7ZTp7dD1lLnR5cGUsbj1lLm1lbW9pemVkUHJvcHMscj1jLm93bmVyRG9jdW1lbnR8fGM7dDpzd2l0Y2godCl7Y2FzZSJ0aXRsZSI6bD1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdLCghbHx8bFtUcl18fGxbUnRdfHxsLm5hbWVzcGFjZVVSST09PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fGwuaGFzQXR0cmlidXRlKCJpdGVtcHJvcCIpKSYmKGw9ci5jcmVhdGVFbGVtZW50KHQpLHIuaGVhZC5pbnNlcnRCZWZvcmUobCxyLnF1ZXJ5U2VsZWN0b3IoImhlYWQgPiB0aXRsZSIpKSksRHQobCx0LG4pLGxbUnRdPWUsYnQobCksdD1sO2JyZWFrIGU7Y2FzZSJsaW5rIjppZihjPXFTKCJsaW5rIiwiaHJlZiIscikuZ2V0KHQrKG4uaHJlZnx8IiIpKSl7Zm9yKGg9MDtoPGMubGVuZ3RoO2grKylpZihsPWNbaF0sbC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PShuLmhyZWY9PW51bGx8fG4uaHJlZj09PSIiP251bGw6bi5ocmVmKSYmbC5nZXRBdHRyaWJ1dGUoInJlbCIpPT09KG4ucmVsPT1udWxsP251bGw6bi5yZWwpJiZsLmdldEF0dHJpYnV0ZSgidGl0bGUiKT09PShuLnRpdGxlPT1udWxsP251bGw6bi50aXRsZSkmJmwuZ2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIpPT09KG4uY3Jvc3NPcmlnaW49PW51bGw/bnVsbDpuLmNyb3NzT3JpZ2luKSl7Yy5zcGxpY2UoaCwxKTticmVhayB0fX1sPXIuY3JlYXRlRWxlbWVudCh0KSxEdChsLHQsbiksci5oZWFkLmFwcGVuZENoaWxkKGwpO2JyZWFrO2Nhc2UibWV0YSI6aWYoYz1xUygibWV0YSIsImNvbnRlbnQiLHIpLmdldCh0KyhuLmNvbnRlbnR8fCIiKSkpe2ZvcihoPTA7aDxjLmxlbmd0aDtoKyspaWYobD1jW2hdLGwuZ2V0QXR0cmlidXRlKCJjb250ZW50Iik9PT0obi5jb250ZW50PT1udWxsP251bGw6IiIrbi5jb250ZW50KSYmbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PShuLm5hbWU9PW51bGw/bnVsbDpuLm5hbWUpJiZsLmdldEF0dHJpYnV0ZSgicHJvcGVydHkiKT09PShuLnByb3BlcnR5PT1udWxsP251bGw6bi5wcm9wZXJ0eSkmJmwuZ2V0QXR0cmlidXRlKCJodHRwLWVxdWl2Iik9PT0obi5odHRwRXF1aXY9PW51bGw/bnVsbDpuLmh0dHBFcXVpdikmJmwuZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik9PT0obi5jaGFyU2V0PT1udWxsP251bGw6bi5jaGFyU2V0KSl7Yy5zcGxpY2UoaCwxKTticmVhayB0fX1sPXIuY3JlYXRlRWxlbWVudCh0KSxEdChsLHQsbiksci5oZWFkLmFwcGVuZENoaWxkKGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NjgsdCkpfWxbUnRdPWUsYnQobCksdD1sfWUuc3RhdGVOb2RlPXR9ZWxzZSBTdHx8bmgoYyxlLnR5cGUsZS5zdGF0ZU5vZGUpO2Vsc2UgZS5zdGF0ZU5vZGU9WVMoYyxuLGUubWVtb2l6ZWRQcm9wcyk7ZWxzZSByIT09bj8ocj09PW51bGw/KHQ9bC5zdGF0ZU5vZGUsdD09PW51bGx8fEdlfHx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOnIuY291bnQtLSxuPT09bnVsbD9TdHx8bmgoYyxlLnR5cGUsZS5zdGF0ZU5vZGUpOllTKGMsbixlLm1lbW9pemVkUHJvcHMpKTpuPT09bnVsbCYmZS5zdGF0ZU5vZGUhPT1udWxsJiZpbShlLGUubWVtb2l6ZWRQcm9wcyxsLm1lbW9pemVkUHJvcHMpO2JyZWFrO2Nhc2UgMjc6SHQodCxlLG4pLEJ0KGUpLHImNTEyJiYoR2V8fGw9PT1udWxsfHxOdChsLGwucmV0dXJuKSksbCE9PW51bGwmJnImNCYmaW0oZSxlLm1lbW9pemVkUHJvcHMsbC5tZW1vaXplZFByb3BzKTticmVhaztjYXNlIDU6aWYoYz1RbixRbj0hMSxIdCh0LGUsbiksUW49YyxCdChlKSxyJjUxMiYmKEdlfHxsPT09bnVsbHx8TnQobCxsLnJldHVybikpLGUuZmxhZ3MmMzIpe3Q9ZS5zdGF0ZU5vZGU7dHJ5e2dvKHQsIiIpLEJlPSEwfWNhdGNoKFYpe1hlKGUsZS5yZXR1cm4sVil9fXImNCYmZS5zdGF0ZU5vZGUhPW51bGwmJih0PWUubWVtb2l6ZWRQcm9wcyxpbShlLHQsbCE9PW51bGw/bC5tZW1vaXplZFByb3BzOnQpKSxyJjEwMjQmJihwbT0hMCk7YnJlYWs7Y2FzZSA2OmlmKEh0KHQsZSxuKSxCdChlKSxyJjQpe2lmKGUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihpKDE2MikpO3Q9ZS5tZW1vaXplZFByb3BzLG49ZS5zdGF0ZU5vZGU7dHJ5e24ubm9kZVZhbHVlPXQsQmU9ITB9Y2F0Y2goVil7WGUoZSxlLnJldHVybixWKX19YnJlYWs7Y2FzZSAzOmlmKEJlPSExLHd1PW51bGwsYz1EbixEbj1yaSh0LmNvbnRhaW5lckluZm8pLEh0KHQsZSxuKSxEbj1jLEJ0KGUpLHImNCYmbCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpdHJ5e2VyKHQuY29udGFpbmVySW5mbyl9Y2F0Y2goVil7WGUoZSxlLnJldHVybixWKX1wbSYmKHBtPSExLEJ4KGUpKSxCZT0hMTticmVhaztjYXNlIDQ6cj1RbixRbj1TdCxsPW9iKCksYz1EbixEbj1yaShlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxIdCh0LGUsbiksQnQoZSksRG49YyxCZSYmJHImJihpdT0hMCksQmU9bCxRbj1yO2JyZWFrO2Nhc2UgMTI6SHQodCxlLG4pLEJ0KGUpO2JyZWFrO2Nhc2UgMzE6SHQodCxlLG4pLEJ0KGUpLHImNCYmKHQ9ZS51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKGUudXBkYXRlUXVldWU9bnVsbCx1dShlLHQpKSk7YnJlYWs7Y2FzZSAxMzpIdCh0LGUsbiksQnQoZSksZS5jaGlsZC5mbGFncyY4MTkyJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsIT0obCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYoZHU9ZW4oKSksciY0JiYodD1lLnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYoZS51cGRhdGVRdWV1ZT1udWxsLHV1KGUsdCkpKTticmVhaztjYXNlIDIyOmM9ZS5tZW1vaXplZFN0YXRlIT09bnVsbCxoPWwhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsO3ZhciBTPVN0LF89R2UsTD1RbjtTdD1TfHxjLFFuPUx8fGMsR2U9X3x8aCxIdCh0LGUsbiksR2U9XyxRbj1MLFN0PVMsQnQoZSksciY4MTkyJiYodD1lLnN0YXRlTm9kZSx0Ll92aXNpYmlsaXR5PWM/dC5fdmlzaWJpbGl0eSYtMjp0Ll92aXNpYmlsaXR5fDEsIWN8fGw9PT1udWxsfHxofHxTdHx8R2V8fCh0PWh8fEdlLG49U3QsbD1HZSxTdD1jfHxTdCxHZT10LHRhKGUsMiksU3Q9bixHZT1sKSwhYyYmUW58fGdtKGUsYykpLHImNCYmKHQ9ZS51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKG49dC5yZXRyeVF1ZXVlLG4hPT1udWxsJiYodC5yZXRyeVF1ZXVlPW51bGwsdXUoZSxuKSkpKTticmVhaztjYXNlIDE5Okh0KHQsZSxuKSxCdChlKSxyJjQmJih0PWUudXBkYXRlUXVldWUsdCE9PW51bGwmJihlLnVwZGF0ZVF1ZXVlPW51bGwsdXUoZSx0KSkpO2JyZWFrO2Nhc2UgMzA6ciY1MTImJihHZXx8bD09PW51bGx8fE50KGwsbC5yZXR1cm4pKSxyPW9iKCksYz0kcixoPShuJjMzNTU0NDA2NCk9PT1uLFM9ZS5tZW1vaXplZFByb3BzLCRyPWgmJmdsKFMuZGVmYXVsdCxTLnVwZGF0ZSkhPT0ibm9uZSIsSHQodCxlLG4pLEJ0KGUpLGgmJmwhPT1udWxsJiZCZSYmKGUuZmxhZ3N8PTQpLCRyPWMsQmU9cjticmVhaztjYXNlIDIxOmJyZWFrO2Nhc2UgNzpyJjUxMiYmKEdlfHxsPT09bnVsbHx8TnQobCxsLnJldHVybikpLGwmJmwuc3RhdGVOb2RlIT09bnVsbCYmKGwuc3RhdGVOb2RlLl9mcmFnbWVudEZpYmVyPWUpO2RlZmF1bHQ6SHQodCxlLG4pLEJ0KGUpfX1mdW5jdGlvbiBCdChlKXt2YXIgdD1lLmZsYWdzO2lmKHQmMil7dHJ5e2Zvcih2YXIgbixsPWUucmV0dXJuO2whPT1udWxsOyl7aWYoVHgobCkpe249bDticmVha31sPWwucmV0dXJufWw9bnVsbDtmb3IodmFyIHI9ZS5yZXR1cm47ciE9PW51bGw7KXtpZihvbShyKSl7dmFyIGM9ci5zdGF0ZU5vZGU7bD09PW51bGw/bD1bY106bC5wdXNoKGMpfWlmKGFtKHIpKWJyZWFrO3I9ci5yZXR1cm59dmFyIGg9bDtpZihuPT1udWxsKXRocm93IEVycm9yKGkoMTYwKSk7c3dpdGNoKG4udGFnKXtjYXNlIDI3OnZhciBTPW4uc3RhdGVOb2RlLF89Y20oZSk7bHUoZSxfLFMsaCk7YnJlYWs7Y2FzZSA1OnZhciBMPW4uc3RhdGVOb2RlO24uZmxhZ3MmMzImJihnbyhMLCIiKSxuLmZsYWdzJj0tMzMpO3ZhciBWPWNtKGUpO2x1KGUsVixMLGgpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIFo9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyx6PWNtKGUpO3VtKGUseixaLGgpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSgxNjEpKX19Y2F0Y2goRyl7WGUoZSxlLnJldHVybixHKX1lLmZsYWdzJj0tM310JjQwOTYmJihlLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gQngoZSl7aWYoZS5zdWJ0cmVlRmxhZ3MmMTAyNClmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7dmFyIHQ9ZTtCeCh0KSx0LnRhZz09PTUmJnQuZmxhZ3MmMTAyNCYmKHQ9dC5zdGF0ZU5vZGUsV289ITAsdC5yZXNldCgpLFdvPSExKSxlPWUuc2libGluZ319ZnVuY3Rpb24gTG8oZSx0KXtpZih0LnN1YnRyZWVGbGFncyY5MjcwKWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KUl4KHQsZSksdD10LnNpYmxpbmc7ZWxzZSBOeCh0KX1mdW5jdGlvbiBJeChlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO2lmKG49PT1udWxsKXNtKGUsITEpO2Vsc2Ugc3dpdGNoKGUudGFnKXtjYXNlIDM6aWYodm09Wm49ITEsUngoKSxMbyh0LGUpLCFabiYmIWl1KXtpZihlPVhuLGUhPT1udWxsKWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCs9Myl7bj1lW2xdO3ZhciByPWVbbCsxXTtfUyhuLGVbbCsyXSksbj1uLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG4hPT1udWxsJiZuLmFuaW1hdGUoe29wYWNpdHk6WzAsMF0scG9pbnRlckV2ZW50czpbIm5vbmUiLCJub25lIl19LHtkdXJhdGlvbjowLGZpbGw6ImZvcndhcmRzIixwc2V1ZG9FbGVtZW50OiI6OnZpZXctdHJhbnNpdGlvbi1ncm91cCgiK3IrIikifSl9ZT10LmNvbnRhaW5lckluZm8sZT1lLm5vZGVUeXBlPT09OT9lLmRvY3VtZW50RWxlbWVudDplLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGUhPT1udWxsJiZlLnN0eWxlLnZpZXdUcmFuc2l0aW9uTmFtZT09PSIiJiYoZS5zdHlsZS52aWV3VHJhbnNpdGlvbk5hbWU9Im5vbmUiLGUuYW5pbWF0ZSh7b3BhY2l0eTpbMCwwXSxwb2ludGVyRXZlbnRzOlsibm9uZSIsIm5vbmUiXX0se2R1cmF0aW9uOjAsZmlsbDoiZm9yd2FyZHMiLHBzZXVkb0VsZW1lbnQ6Ijo6dmlldy10cmFuc2l0aW9uLWdyb3VwKHJvb3QpIn0pLGUuYW5pbWF0ZSh7d2lkdGg6WzAsMF0saGVpZ2h0OlswLDBdfSx7ZHVyYXRpb246MCxmaWxsOiJmb3J3YXJkcyIscHNldWRvRWxlbWVudDoiOjp2aWV3LXRyYW5zaXRpb24ifSkpLHZtPSEwfVhuPW51bGw7YnJlYWs7Y2FzZSA1OkxvKHQsZSk7YnJlYWs7Y2FzZSA0Omw9Wm4sWm49ITEsTG8odCxlKSxabiYmKGl1PSEwKSxabj1sO2JyZWFrO2Nhc2UgMjI6ZS5tZW1vaXplZFN0YXRlPT09bnVsbCYmKG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGw/c20oZSwhMSk6TG8odCxlKSk7YnJlYWs7Y2FzZSAzMDpsPVpuLHI9UngoKSxabj0hMSxMbyh0LGUpLFpuJiYoZS5mbGFnc3w9NCk7dmFyIGM9ZS5tZW1vaXplZFByb3BzLGg9ZS5zdGF0ZU5vZGU7dD12bChjLGgpLGg9dmwobi5tZW1vaXplZFByb3BzLGgpO3ZhciBTPWdsKGMuZGVmYXVsdCxjLnVwZGF0ZSk7Uz09PSJub25lIj90PSExOihjPW4ubWVtb2l6ZWRTdGF0ZSxuLm1lbW9pemVkU3RhdGU9bnVsbCxuPWUuY2hpbGQsUXQ9MCx0PWhtKGUsbix0LGgsUyxjLCEwKSxRdCE9PShjPT09bnVsbD8wOmMubGVuZ3RoKSYmKGUuZmxhZ3N8PTMyKSksKGUuZmxhZ3MmNCkhPT0wJiZ0PyhWbyhlLGUubWVtb2l6ZWRQcm9wcy5vblVwZGF0ZSksWG49cik6ciE9PW51bGwmJihyLnB1c2guYXBwbHkocixYbiksWG49ciksWm49KGUuZmxhZ3MmMzIpIT09MD8hMDpsO2JyZWFrO2RlZmF1bHQ6TG8odCxlKX19ZnVuY3Rpb24gRm4oZSx0KXtpZih0LnN1YnRyZWVGbGFncyY4NzcyKWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KWp4KGUsdC5hbHRlcm5hdGUsdCksdD10LnNpYmxpbmd9ZnVuY3Rpb24gdGEoZSx0KXtmb3IoZT1lLmNoaWxkO2UhPT1udWxsOyl7dmFyIG49ZSxsPXQ7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6ZWEoNCxuLG4ucmV0dXJuKSx0YShuLGwpO2JyZWFrO2Nhc2UgMTpOdChuLG4ucmV0dXJuKTt2YXIgcj1uLnN0YXRlTm9kZTt0eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIiYmU3gobixuLnJldHVybixyKSx0YShuLGwpO2JyZWFrO2Nhc2UgMjc6KGwmMikhPT0wJiZCUyhuLnN0YXRlTm9kZSxuLnR5cGUsbi5tZW1vaXplZFByb3BzKTtjYXNlIDU6TnQobixuLnJldHVybiksbi50YWchPT01JiZuLnRhZyE9PTI3fHxGcihuKSx0YShuLGwpO2JyZWFrO2Nhc2UgNjpGcihuKTticmVhaztjYXNlIDI2Ok50KG4sbi5yZXR1cm4pLHI9bi5zdGF0ZU5vZGUsbi5tZW1vaXplZFN0YXRlIT09bnVsbHx8cj09PW51bGx8fEdlfHxyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQociksdGEobixsKTticmVhaztjYXNlIDIyOm4ubWVtb2l6ZWRTdGF0ZT09PW51bGwmJnRhKG4sbCk7YnJlYWs7Y2FzZSAzMDpOdChuLG4ucmV0dXJuKSx0YShuLGwpO2JyZWFrO2Nhc2UgNzpOdChuLG4ucmV0dXJuKTtkZWZhdWx0OnRhKG4sbCl9ZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIGpuKGUsdCxuKXtmb3Iobj0odC5zdWJ0cmVlRmxhZ3MmODc3MikhPT0wP246biYtMix0PXQuY2hpbGQ7dCE9PW51bGw7KXt2YXIgbD10LmFsdGVybmF0ZSxyPWUsYz10LGg9Yy5mbGFncyxTPShuJjEpIT09MDtzd2l0Y2goYy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6am4ocixjLG4pLFpyKDQsYyk7YnJlYWs7Y2FzZSAxOmlmKGpuKHIsYyxuKSxsPWMscj1sLnN0YXRlTm9kZSx0eXBlb2Ygci5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIil0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKFYpe1hlKGwsbC5yZXR1cm4sVil9aWYobD1jLHI9bC51cGRhdGVRdWV1ZSxyIT09bnVsbCl7dmFyIF89bC5zdGF0ZU5vZGU7dHJ5e3ZhciBMPXIuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcztpZihMIT09bnVsbClmb3Ioci5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzPW51bGwscj0wO3I8TC5sZW5ndGg7cisrKWMwKExbcl0sXyl9Y2F0Y2goVil7WGUobCxsLnJldHVybixWKX19UyYmaCY2NCYmeHgoYykscW4oYyxjLnJldHVybik7YnJlYWs7Y2FzZSAyNzoobiYyKSE9PTAmJnd4KGMpO2Nhc2UgNTpjLnRhZyE9PTUmJmMudGFnIT09Mjd8fEN4KGMpLGpuKHIsYyxuKSxTJiZsPT09bnVsbCYmaCY0JiZybShjKSxxbihjLGMucmV0dXJuKTticmVhaztjYXNlIDY6Q3goYyk7YnJlYWs7Y2FzZSAyNjpfPWMuc3RhdGVOb2RlLGMubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fF89PT1udWxsfHxTdHx8bmgocmkoXy5vd25lckRvY3VtZW50KSxjLnR5cGUsXyksam4ocixjLG4pLFMmJmw9PT1udWxsJiZoJjQmJnJtKGMpLHFuKGMsYy5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6am4ocixjLG4pO2JyZWFrO2Nhc2UgMzE6am4ocixjLG4pLFMmJmgmNCYmTHgocixjKTticmVhaztjYXNlIDEzOmpuKHIsYyxuKSxTJiZoJjQmJlV4KHIsYyk7YnJlYWs7Y2FzZSAyMjpjLm1lbW9pemVkU3RhdGU9PT1udWxsJiZqbihyLGMsbikscW4oYyxjLnJldHVybik7YnJlYWs7Y2FzZSAzMDpqbihyLGMsbikscW4oYyxjLnJldHVybik7YnJlYWs7Y2FzZSA3OnFuKGMsYy5yZXR1cm4pO2RlZmF1bHQ6am4ocixjLG4pfXQ9dC5zaWJsaW5nfX1mdW5jdGlvbiBibShlLHQpe3ZhciBuPW51bGw7ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2whPT1udWxsJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGU9bnVsbCx0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKGU9dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlIT09biYmKGUhPW51bGwmJmUucmVmQ291bnQrKyxuIT1udWxsJiZMcihuKSl9ZnVuY3Rpb24geG0oZSx0KXtlPW51bGwsdC5hbHRlcm5hdGUhPT1udWxsJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSx0PXQubWVtb2l6ZWRTdGF0ZS5jYWNoZSx0IT09ZSYmKHQucmVmQ291bnQrKyxlIT1udWxsJiZMcihlKSl9ZnVuY3Rpb24gQ24oZSx0LG4sbCl7dmFyIHI9KG4mMzM1NTQ0MDY0KT09PW47aWYodC5zdWJ0cmVlRmxhZ3MmKHI/MTAyNjI6MTAyNTYpKWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KVB4KGUsdCxuLGwpLHQ9dC5zaWJsaW5nO2Vsc2UgciYmQXgodCl9ZnVuY3Rpb24gUHgoZSx0LG4sbCl7dmFyIHI9KG4mMzM1NTQ0MDY0KT09PW47ciYmdC5hbHRlcm5hdGU9PT1udWxsJiZ0LnJldHVybiE9PW51bGwmJnQucmV0dXJuLmFsdGVybmF0ZSE9PW51bGwmJnJ1KHQpO3ZhciBjPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkNuKGUsdCxuLGwpLGMmMjA0OCYmWnIoOSx0KTticmVhaztjYXNlIDE6Q24oZSx0LG4sbCk7YnJlYWs7Y2FzZSAzOkNuKGUsdCxuLGwpLHImJnZtJiYoZT1lLmNvbnRhaW5lckluZm8sZT1lLm5vZGVUeXBlPT09OT9lLmJvZHk6ZS5ub2RlTmFtZT09PSJIVE1MIj9lLm93bmVyRG9jdW1lbnQuYm9keTplLGUuc3R5bGUudmlld1RyYW5zaXRpb25OYW1lPT09InJvb3QiJiYoZS5zdHlsZS52aWV3VHJhbnNpdGlvbk5hbWU9IiIpLGU9ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlIT09bnVsbCYmZS5zdHlsZS52aWV3VHJhbnNpdGlvbk5hbWU9PT0ibm9uZSImJihlLnN0eWxlLnZpZXdUcmFuc2l0aW9uTmFtZT0iIikpLGMmMjA0OCYmKGM9bnVsbCx0LmFsdGVybmF0ZSE9PW51bGwmJihjPXQuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQ9dC5tZW1vaXplZFN0YXRlLmNhY2hlLHQhPT1jJiYodC5yZWZDb3VudCsrLGMhPW51bGwmJkxyKGMpKSk7YnJlYWs7Y2FzZSAxMjppZihjJjIwNDgpe0NuKGUsdCxuLGwpLGM9dC5zdGF0ZU5vZGU7dHJ5e3ZhciBoPXQubWVtb2l6ZWRQcm9wcyxTPWguaWQsXz1oLm9uUG9zdENvbW1pdDt0eXBlb2YgXz09ImZ1bmN0aW9uIiYmXyhTLHQuYWx0ZXJuYXRlPT09bnVsbD8ibW91bnQiOiJ1cGRhdGUiLGMucGFzc2l2ZUVmZmVjdER1cmF0aW9uLC0wKX1jYXRjaChMKXtYZSh0LHQucmV0dXJuLEwpfX1lbHNlIENuKGUsdCxuLGwpO2JyZWFrO2Nhc2UgMzE6Q24oZSx0LG4sbCk7YnJlYWs7Y2FzZSAxMzpDbihlLHQsbixsKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6aD10LnN0YXRlTm9kZSxTPXQuYWx0ZXJuYXRlLHQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KHImJlMhPT1udWxsJiZTLm1lbW9pemVkU3RhdGU9PT1udWxsJiZydShTKSxoLl92aXNpYmlsaXR5JjI/Q24oZSx0LG4sbCk6SnIoZSx0KSk6KHImJlMhPT1udWxsJiZTLm1lbW9pemVkU3RhdGUhPT1udWxsJiZydSh0KSxoLl92aXNpYmlsaXR5JjI/Q24oZSx0LG4sbCk6KGguX3Zpc2liaWxpdHl8PTIsVW8oZSx0LG4sbCwodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT09MHx8ITEpKSksYyYyMDQ4JiZibShTLHQpO2JyZWFrO2Nhc2UgMjQ6Q24oZSx0LG4sbCksYyYyMDQ4JiZ4bSh0LmFsdGVybmF0ZSx0KTticmVhaztjYXNlIDMwOnImJihjPXQuYWx0ZXJuYXRlLGMhPT1udWxsJiYoS24oYy5jaGlsZCwhMCksS24odC5jaGlsZCwhMCkpKSxDbihlLHQsbixsKTticmVhaztkZWZhdWx0OkNuKGUsdCxuLGwpfX1mdW5jdGlvbiBVbyhlLHQsbixsLHIpe2ZvcihyPXImJigodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT09MHx8ITEpLHQ9dC5jaGlsZDt0IT09bnVsbDspe3ZhciBjPWUsaD10LFM9bixfPWwsTD1oLmZsYWdzO3N3aXRjaChoLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpVbyhjLGgsUyxfLHIpLFpyKDgsaCk7YnJlYWs7Y2FzZSAyMzpicmVhaztjYXNlIDIyOnZhciBWPWguc3RhdGVOb2RlO2gubWVtb2l6ZWRTdGF0ZSE9PW51bGw/Vi5fdmlzaWJpbGl0eSYyP1VvKGMsaCxTLF8scik6SnIoYyxoKTooVi5fdmlzaWJpbGl0eXw9MixVbyhjLGgsUyxfLHIpKSxyJiZMJjIwNDgmJmJtKGguYWx0ZXJuYXRlLGgpO2JyZWFrO2Nhc2UgMjQ6VW8oYyxoLFMsXyxyKSxyJiZMJjIwNDgmJnhtKGguYWx0ZXJuYXRlLGgpO2JyZWFrO2RlZmF1bHQ6VW8oYyxoLFMsXyxyKX10PXQuc2libGluZ319ZnVuY3Rpb24gSnIoZSx0KXtpZih0LnN1YnRyZWVGbGFncyYxMDI1Nilmb3IodD10LmNoaWxkO3QhPT1udWxsOyl7dmFyIG49ZSxsPXQscj1sLmZsYWdzO3N3aXRjaChsLnRhZyl7Y2FzZSAyMjpKcihuLGwpLHImMjA0OCYmYm0obC5hbHRlcm5hdGUsbCk7YnJlYWs7Y2FzZSAyNDpKcihuLGwpLHImMjA0OCYmeG0obC5hbHRlcm5hdGUsbCk7YnJlYWs7ZGVmYXVsdDpKcihuLGwpfXQ9dC5zaWJsaW5nfX12YXIgR2E9ODE5MjtmdW5jdGlvbiBWYShlLHQsbil7aWYoZS5zdWJ0cmVlRmxhZ3MmR2EpZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspR3goZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIEd4KGUsdCxuKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6VmEoZSx0LG4pLGUuZmxhZ3MmR2EmJihlLm1lbW9pemVkU3RhdGUhPT1udWxsP01EKG4sRG4sZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk6KGU9ZS5zdGF0ZU5vZGUsKHQmMzM1NTQ0MTI4KT09PXQmJlpTKG4sZSkpKTticmVhaztjYXNlIDU6VmEoZSx0LG4pLGUuZmxhZ3MmR2EmJihlPWUuc3RhdGVOb2RlLCh0JjMzNTU0NDEyOCk9PT10JiZaUyhuLGUpKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBsPURuO0RuPXJpKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFZhKGUsdCxuKSxEbj1sO2JyZWFrO2Nhc2UgMjI6ZS5tZW1vaXplZFN0YXRlPT09bnVsbCYmKGw9ZS5hbHRlcm5hdGUsbCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KGw9R2EsR2E9MTY3NzcyMTYsVmEoZSx0LG4pLEdhPWwpOlZhKGUsdCxuKSk7YnJlYWs7Y2FzZSAzMDppZigoZS5mbGFncyZHYSkhPT0wJiYobD1lLm1lbW9pemVkUHJvcHMubmFtZSxsIT1udWxsJiZsIT09ImF1dG8iKSl7dmFyIHI9ZS5zdGF0ZU5vZGU7ci5wYWlyZWQ9bnVsbCxybj09PW51bGwmJihybj1uZXcgTWFwKSxybi5zZXQobCxyKX1WYShlLHQsbik7YnJlYWs7ZGVmYXVsdDpWYShlLHQsbil9fWZ1bmN0aW9uIFZ4KGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKHQhPT1udWxsJiYoZT10LmNoaWxkLGUhPT1udWxsKSl7dC5jaGlsZD1udWxsO2RvIHQ9ZS5zaWJsaW5nLGUuc2libGluZz1udWxsLGU9dDt3aGlsZShlIT09bnVsbCl9fWZ1bmN0aW9uIFdyKGUpe3ZhciB0PWUuZGVsZXRpb25zO2lmKChlLmZsYWdzJjE2KSE9PTApe2lmKHQhPT1udWxsKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbD10W25dO0N0PWwscXgobCxlKX1WeChlKX1pZihlLnN1YnRyZWVGbGFncyYxMDI1Nilmb3IoZT1lLmNoaWxkO2UhPT1udWxsOylZeChlKSxlPWUuc2libGluZ31mdW5jdGlvbiBZeChlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6V3IoZSksZS5mbGFncyYyMDQ4JiZlYSg5LGUsZS5yZXR1cm4pO2JyZWFrO2Nhc2UgMzpXcihlKTticmVhaztjYXNlIDEyOldyKGUpO2JyZWFrO2Nhc2UgMjI6dmFyIHQ9ZS5zdGF0ZU5vZGU7ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5fdmlzaWJpbGl0eSYyJiYoZS5yZXR1cm49PT1udWxsfHxlLnJldHVybi50YWchPT0xMyk/KHQuX3Zpc2liaWxpdHkmPS0zLHN1KGUpKTpXcihlKTticmVhaztkZWZhdWx0OldyKGUpfX1mdW5jdGlvbiBzdShlKXt2YXIgdD1lLmRlbGV0aW9ucztpZigoZS5mbGFncyYxNikhPT0wKXtpZih0IT09bnVsbClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGw9dFtuXTtDdD1sLHF4KGwsZSl9VngoZSl9Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3N3aXRjaCh0PWUsdC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6ZWEoOCx0LHQucmV0dXJuKSxzdSh0KTticmVhaztjYXNlIDIyOm49dC5zdGF0ZU5vZGUsbi5fdmlzaWJpbGl0eSYyJiYobi5fdmlzaWJpbGl0eSY9LTMsc3UodCkpO2JyZWFrO2RlZmF1bHQ6c3UodCl9ZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIHF4KGUsdCl7Zm9yKDtDdCE9PW51bGw7KXt2YXIgbj1DdDtzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6ZWEoOCxuLHQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyMjppZihuLm1lbW9pemVkU3RhdGUhPT1udWxsJiZuLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCl7dmFyIGw9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO2whPW51bGwmJmwucmVmQ291bnQrK31icmVhaztjYXNlIDI0OkxyKG4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9aWYobD1uLmNoaWxkLGwhPT1udWxsKWwucmV0dXJuPW4sQ3Q9bDtlbHNlIGU6Zm9yKG49ZTtDdCE9PW51bGw7KXtsPUN0O3ZhciByPWwuc2libGluZyxjPWwucmV0dXJuO2lmKHp4KGwpLGw9PT1uKXtDdD1udWxsO2JyZWFrIGV9aWYociE9PW51bGwpe3IucmV0dXJuPWMsQ3Q9cjticmVhayBlfUN0PWN9fX12YXIgT049e2dldENhY2hlRm9yVHlwZTpmdW5jdGlvbihlKXt2YXIgdD1fdChmdCksbj10LmRhdGEuZ2V0KGUpO3JldHVybiBuPT09dm9pZCAwJiYobj1lKCksdC5kYXRhLnNldChlLG4pKSxufSxjYWNoZVNpZ25hbDpmdW5jdGlvbigpe3JldHVybiBfdChmdCkuY29udHJvbGxlci5zaWduYWx9fSxBTj10eXBlb2YgV2Vha01hcD09ImZ1bmN0aW9uIj9XZWFrTWFwOk1hcCxJZT0wLCRlPW51bGwsTWU9bnVsbCxMZT0wLHFlPTAsY249bnVsbCxuYT0hMSxIbz0hMSxTbT0hMSxSbD0wLGF0PTAsbGE9MCxZYT0wLGZ1PTAsdW49MCxCbz0wLGVpPW51bGwsRnQ9bnVsbCxDbT0hMSxkdT0wLFh4PTAsbXU9MS8wLGh1PW51bGwsYWE9bnVsbCx0dD0wLE1uPW51bGwscWE9bnVsbCwkbj0wLFRtPTAsd209bnVsbCxLeD1udWxsLElvPW51bGwsUG89bnVsbCxHbz1udWxsLHRpPTAscHU9bnVsbDtmdW5jdGlvbiBzbigpe3JldHVybihJZSYyKSE9PTAmJkxlIT09MD9MZSYtTGU6dGUuVCE9PW51bGw/em0oKTpGeSgpfWZ1bmN0aW9uIFF4KCl7aWYodW49PT0wKWlmKChMZSY1MzY4NzA5MTIpPT09MHx8TmUpe3ZhciBlPXVjO3VjPDw9MSwodWMmMzkzMjE2MCk9PT0wJiYodWM9MjYyMTQ0KSx1bj1lfWVsc2UgdW49NTM2ODcwOTEyO3JldHVybiBlPU90LmN1cnJlbnQsZSE9PW51bGwmJihlLmZsYWdzfD0zMiksdW59ZnVuY3Rpb24gVm8oZSx0KXtpZih0IT1udWxsKXt2YXIgbj1lLnN0YXRlTm9kZSxsPW4ucmVmO2w9PT1udWxsJiYobD1uLnJlZj1PUyh2bChlLm1lbW9pemVkUHJvcHMsbikpKSxQbz09PW51bGwmJihQbz1bXSksUG8ucHVzaCh0LmJpbmQobnVsbCxsKSl9fWZ1bmN0aW9uICR0KGUsdCxuKXsoZT09PSRlJiYocWU9PT0yfHxxZT09PTkpfHxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKSYmKFlvKGUsMCksb2EoZSxMZSx1biwhMSkpLENyKGUsbiksKChJZSYyKT09PTB8fGUhPT0kZSkmJihlPT09JGUmJigoSWUmMik9PT0wJiYoWWF8PW4pLGF0PT09NCYmb2EoZSxMZSx1biwhMSkpLEpuKGUpKX1mdW5jdGlvbiBaeChlLHQsbil7aWYoKEllJjYpIT09MCl0aHJvdyBFcnJvcihpKDMyNykpO3ZhciBsPSFuJiYodCYxMjcpPT09MCYmKHQmZS5leHBpcmVkTGFuZXMpPT09MHx8U3IoZSx0KSxyPWw/ak4oZSx0KTpSbShlLHQsITApLGM9bDtkb3tpZihyPT09MCl7SG8mJiFsJiZvYShlLHQsMCwhMSk7YnJlYWt9ZWxzZXtpZihuPWUuY3VycmVudC5hbHRlcm5hdGUsYyYmIU5OKG4pKXtyPVJtKGUsdCwhMSksYz0hMTtjb250aW51ZX1pZihyPT09Mil7aWYoYz10LGUuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMmYyl2YXIgaD0wO2Vsc2UgaD1lLnBlbmRpbmdMYW5lcyYtNTM2ODcwOTEzLGg9aCE9PTA/aDpoJjUzNjg3MDkxMj81MzY4NzA5MTI6MDtpZihoIT09MCl7dD1oO2U6e3ZhciBTPWU7cj1laTt2YXIgXz1TLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQ7aWYoXyYmKFlvKFMsaCkuZmxhZ3N8PTI1NiksaD1SbShTLGgsITEpLGghPT0yJiZoIT09Nil7aWYoU20mJiFfKXtTLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzfD1jLFlhfD1jLHI9NDticmVhayBlfWM9RnQsRnQ9cixjIT09bnVsbCYmKEZ0PT09bnVsbD9GdD1jOkZ0LnB1c2guYXBwbHkoRnQsYykpfXI9aH1pZihjPSExLHIhPT0yKWNvbnRpbnVlfX1pZihyPT09MSl7WW8oZSwwKSxvYShlLHQsMCwhMCk7YnJlYWt9ZTp7c3dpdGNoKGw9ZSxjPXIsYyl7Y2FzZSAwOmNhc2UgMTp0aHJvdyBFcnJvcihpKDM0NSkpO2Nhc2UgNDppZigodCY0MTk0MDQ4KSE9PXQmJih0JjYyOTE0NTYwKSE9PXQpYnJlYWs7Y2FzZSA2Om9hKGwsdCx1biwhbmEpO2JyZWFrIGU7Y2FzZSAyOkZ0PW51bGw7YnJlYWs7Y2FzZSAzOmNhc2UgNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoMzI5KSl9aWYoKHQmNjI5MTQ1NjApPT09dCYmKHI9ZHUrMzAwLWVuKCksMTA8cikpe2lmKG9hKGwsdCx1biwhbmEpLGZjKGwsMCwhMCkhPT0wKWJyZWFrIGU7JG49dCxsLnRpbWVvdXRIYW5kbGU9cW0oRnguYmluZChudWxsLGwsbixGdCxodSxDbSx0LHVuLFlhLEJvLG5hLGMsIlRocm90dGxlZCIsLTAsMCkscik7YnJlYWsgZX1GeChsLG4sRnQsaHUsQ20sdCx1bixZYSxCbyxuYSxjLG51bGwsLTAsMCl9fWJyZWFrfXdoaWxlKCEwKTtKbihlKX1mdW5jdGlvbiBGeChlLHQsbixsLHIsYyxoLFMsXyxMLFYsWix6LEcpe2UudGltZW91dEhhbmRsZT0tMTt2YXIgb2U9dC5zdWJ0cmVlRmxhZ3MsdmU9KGMmMzM1NTQ0MDY0KT09PWM7aWYoWj1udWxsLCh2ZXx8b2UmODE5Mnx8KG9lJjE2Nzg1NDA4KT09PTE2Nzg1NDA4KSYmKFo9e3N0eWxlc2hlZXRzOm51bGwsY291bnQ6MCxpbWdDb3VudDowLGltZ0J5dGVzOjAsc3VzcGVuc2V5SW1hZ2VzOltdLHdhaXRpbmdGb3JJbWFnZXM6ITAsd2FpdGluZ0ZvclZpZXdUcmFuc2l0aW9uOiExLHVuc3VzcGVuZDpHbn0scm49bnVsbCxHeCh0LGMsWiksdmUmJihvZT1aLHZlPWUuY29udGFpbmVySW5mbyx2ZT0odmUubm9kZVR5cGU9PT05P3ZlOnZlLm93bmVyRG9jdW1lbnQpLl9fcmVhY3RWaWV3VHJhbnNpdGlvbix2ZSE9bnVsbCYmKG9lLmNvdW50Kyssb2Uud2FpdGluZ0ZvclZpZXdUcmFuc2l0aW9uPSEwLG9lPXVpLmJpbmQob2UpLHZlLmZpbmlzaGVkLnRoZW4ob2Usb2UpKSksb2U9KGMmNjI5MTQ1NjApPT09Yz9kdS1lbigpOihjJjQxOTQwNDgpPT09Yz9YeC1lbigpOjAsb2U9ekQoWixvZSksb2UhPT1udWxsKSl7JG49YyxlLmNhbmNlbFBlbmRpbmdDb21taXQ9b2UoYVMuYmluZChudWxsLGUsdCxjLG4sbCxyLGgsUyxfLEwsVixaLG51bGwseixHKSksb2EoZSxjLGgsIUwpO3JldHVybn1hUyhlLHQsYyxuLGwscixoLFMsXyxMLFYsWil9ZnVuY3Rpb24gTk4oZSl7Zm9yKHZhciB0PWU7Oyl7dmFyIG49dC50YWc7aWYoKG49PT0wfHxuPT09MTF8fG49PT0xNSkmJnQuZmxhZ3MmMTYzODQmJihuPXQudXBkYXRlUXVldWUsbiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSkpZm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciByPW5bbF0sYz1yLmdldFNuYXBzaG90O3I9ci52YWx1ZTt0cnl7aWYoIWFuKGMoKSxyKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gb2EoZSx0LG4sbCl7dD1xeShlLHQpLHQmPX5mdSx0Jj1+WWEsZS5zdXNwZW5kZWRMYW5lc3w9dCxlLnBpbmdlZExhbmVzJj1+dCxsJiYoZS53YXJtTGFuZXN8PXQpLGw9ZS5leHBpcmF0aW9uVGltZXM7Zm9yKHZhciByPXQ7MDxyOyl7dmFyIGM9MzEtbm4ociksaD0xPDxjO2xbY109LTEsciY9fmh9biE9PTAmJkt5KGUsbix0KX1mdW5jdGlvbiB2dSgpe3JldHVybihJZSY2KT09PTA/KG5pKDApLCExKTohMH1mdW5jdGlvbiBFbSgpe2lmKE1lIT09bnVsbCl7aWYocWU9PT0wKXZhciBlPU1lLnJldHVybjtlbHNlIGU9TWUseGw9amE9bnVsbCxNZChlKSxObz1udWxsLEJyPTAsZT1NZTtmb3IoO2UhPT1udWxsOylieChlLmFsdGVybmF0ZSxlKSxlPWUucmV0dXJuO01lPW51bGx9fWZ1bmN0aW9uIFlvKGUsdCl7dmFyIG49ZS50aW1lb3V0SGFuZGxlO3JldHVybiBuIT09LTEmJihlLnRpbWVvdXRIYW5kbGU9LTEsZUQobikpLG49ZS5jYW5jZWxQZW5kaW5nQ29tbWl0LG4hPT1udWxsJiYoZS5jYW5jZWxQZW5kaW5nQ29tbWl0PW51bGwsbigpKSwkbj0wLEVtKCksJGU9ZSxNZT1uPXlsKGUuY3VycmVudCxudWxsKSxMZT10LHFlPTAsY249bnVsbCxuYT0hMSxIbz1TcihlLHQpLFNtPSExLEJvPXVuPWZ1PVlhPWxhPWF0PTAsRnQ9ZWk9bnVsbCxDbT0hMSxSbD1xeShlLHQpLHdjKCksbn1mdW5jdGlvbiAkeChlLHQpe19lPW51bGwsdGUuSD1aYyx0PT09QW98fHQ9PT1rYz8odD1hMCgpLHFlPTMpOnQ9PT14ZD8odD1hMCgpLHFlPTQpOnFlPXQ9PT1RZD84OnQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiI/NjoxLGNuPXQsTWU9PT1udWxsJiYoYXQ9MSxGYyhlLHluKHQsZS5jdXJyZW50KSkpfWZ1bmN0aW9uIEp4KCl7dmFyIGU9T3QuY3VycmVudDtyZXR1cm4gZT09PW51bGw/ITA6KExlJjQxOTQwNDgpPT09TGU/a3Q9PT1udWxsOihMZSY2MjkxNDU2MCk9PT1MZXx8KExlJjUzNjg3MDkxMikhPT0wP2U9PT1rdDohMX1mdW5jdGlvbiBXeCgpe3ZhciBlPXRlLkg7cmV0dXJuIHRlLkg9WmMsZT09PW51bGw/WmM6ZX1mdW5jdGlvbiBlUygpe3ZhciBlPXRlLkE7cmV0dXJuIHRlLkE9T04sZX1mdW5jdGlvbiBndSgpe2F0PTQsbmF8fChMZSY0MTk0MDQ4KSE9PUxlJiZPdC5jdXJyZW50IT09bnVsbHx8KEhvPSEwKSwobGEmMTM0MjE3NzI3KT09PTAmJihZYSYxMzQyMTc3MjcpPT09MHx8JGU9PT1udWxsfHxvYSgkZSxMZSx1biwhMSl9ZnVuY3Rpb24gUm0oZSx0LG4pe3ZhciBsPUllO0llfD0yO3ZhciByPVd4KCksYz1lUygpOygkZSE9PWV8fExlIT09dCkmJihodT1udWxsLFlvKGUsdCkpLHQ9ITE7dmFyIGg9YXQ7ZTpkbyB0cnl7aWYocWUhPT0wJiZNZSE9PW51bGwpe3ZhciBTPU1lLF89Y247c3dpdGNoKHFlKXtjYXNlIDg6RW0oKSxoPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOmNhc2UgOTpjYXNlIDY6T3QuY3VycmVudD09PW51bGwmJih0PSEwKTt2YXIgTD1xZTtpZihxZT0wLGNuPW51bGwscW8oZSxTLF8sTCksbiYmSG8pe2g9MDticmVhayBlfWJyZWFrO2RlZmF1bHQ6TD1xZSxxZT0wLGNuPW51bGwscW8oZSxTLF8sTCl9fUROKCksaD1hdDticmVha31jYXRjaChWKXskeChlLFYpfXdoaWxlKCEwKTtyZXR1cm4gdCYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKysseGw9amE9bnVsbCxJZT1sLHRlLkg9cix0ZS5BPWMsTWU9PT1udWxsJiYoJGU9bnVsbCxMZT0wLHdjKCkpLGh9ZnVuY3Rpb24gRE4oKXtmb3IoO01lIT09bnVsbDspdFMoTWUpfWZ1bmN0aW9uIGpOKGUsdCl7dmFyIG49SWU7SWV8PTI7dmFyIGw9V3goKSxyPWVTKCk7JGUhPT1lfHxMZSE9PXQ/KGh1PW51bGwsbXU9ZW4oKSs1MDAsWW8oZSx0KSk6SG89U3IoZSx0KTtlOmRvIHRyeXtpZihxZSE9PTAmJk1lIT09bnVsbCl7dD1NZTt2YXIgYz1jbjt0OnN3aXRjaChxZSl7Y2FzZSAxOnFlPTAsY249bnVsbCxxbyhlLHQsYywxKTticmVhaztjYXNlIDI6Y2FzZSA5OmlmKG4wKGMpKXtxZT0wLGNuPW51bGwsblModCk7YnJlYWt9dD1mdW5jdGlvbigpe3FlIT09MiYmcWUhPT05fHwkZSE9PWV8fChxZT03KSxKbihlKX0sYy50aGVuKHQsdCk7YnJlYWsgZTtjYXNlIDM6cWU9NzticmVhayBlO2Nhc2UgNDpxZT01O2JyZWFrIGU7Y2FzZSA3Om4wKGMpPyhxZT0wLGNuPW51bGwsblModCkpOihxZT0wLGNuPW51bGwscW8oZSx0LGMsNykpO2JyZWFrO2Nhc2UgNTp2YXIgaD1udWxsO3N3aXRjaChNZS50YWcpe2Nhc2UgMjY6aD1NZS5tZW1vaXplZFN0YXRlO2Nhc2UgNTpjYXNlIDI3OnZhciBTPU1lO2lmKGg/S1MoaCk6Uy5zdGF0ZU5vZGUuY29tcGxldGUpe3FlPTAsY249bnVsbDt2YXIgXz1TLnNpYmxpbmc7aWYoXyE9PW51bGwpTWU9XztlbHNle3ZhciBMPVMucmV0dXJuO0whPT1udWxsPyhNZT1MLHl1KEwpKTpNZT1udWxsfWJyZWFrIHR9fXFlPTAsY249bnVsbCxxbyhlLHQsYyw1KTticmVhaztjYXNlIDY6cWU9MCxjbj1udWxsLHFvKGUsdCxjLDYpO2JyZWFrO2Nhc2UgODpFbSgpLGF0PTY7YnJlYWsgZTtkZWZhdWx0OnRocm93IEVycm9yKGkoNDYyKSl9fU1OKCk7YnJlYWt9Y2F0Y2goVil7JHgoZSxWKX13aGlsZSghMCk7cmV0dXJuIHhsPWphPW51bGwsdGUuSD1sLHRlLkE9cixJZT1uLE1lIT09bnVsbD8wOigkZT1udWxsLExlPTAsd2MoKSxhdCl9ZnVuY3Rpb24gTU4oKXtmb3IoO01lIT09bnVsbCYmIUZPKCk7KXRTKE1lKX1mdW5jdGlvbiB0UyhlKXt2YXIgdD1neChlLmFsdGVybmF0ZSxlLFJsKTtlLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/eXUoZSk6TWU9dH1mdW5jdGlvbiBuUyhlKXt2YXIgdD1lLG49dC5hbHRlcm5hdGU7c3dpdGNoKHQudGFnKXtjYXNlIDE1OmNhc2UgMDp0PXN4KG4sdCx0LnBlbmRpbmdQcm9wcyx0LnR5cGUsdm9pZCAwLExlKTticmVhaztjYXNlIDExOnQ9c3gobix0LHQucGVuZGluZ1Byb3BzLHQudHlwZS5yZW5kZXIsdC5yZWYsTGUpO2JyZWFrO2Nhc2UgNTpNZCh0KTt2YXIgbD10O2w9PT14dCYmKE5lPyhOYyhsKSxsLnRhZz09PTUmJmwuc3RhdGVOb2RlIT1udWxsJiYoSmU9bC5zdGF0ZU5vZGUpKTooTmMobCksTmU9ITApKTtkZWZhdWx0OmJ4KG4sdCksdD1NZT1xYih0LFJsKSx0PWd4KG4sdCxSbCl9ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLHQ9PT1udWxsP3l1KGUpOk1lPXR9ZnVuY3Rpb24gcW8oZSx0LG4sbCl7eGw9amE9bnVsbCxNZCh0KSxObz1udWxsLEJyPTA7dmFyIHI9dC5yZXR1cm47dHJ5e2lmKHhOKGUscix0LG4sTGUpKXthdD0xLEZjKGUseW4obixlLmN1cnJlbnQpKSxNZT1udWxsO3JldHVybn19Y2F0Y2goYyl7aWYociE9PW51bGwpdGhyb3cgTWU9cixjO2F0PTEsRmMoZSx5bihuLGUuY3VycmVudCkpLE1lPW51bGw7cmV0dXJufXQuZmxhZ3MmMzI3Njg/KE5lfHxsPT09MT9lPSEwOkhvfHwoTGUmNTM2ODcwOTEyKSE9PTA/ZT0hMToobmE9ZT0hMCwobD09PTJ8fGw9PT05fHxsPT09M3x8bD09PTYpJiYobD1PdC5jdXJyZW50LGwhPT1udWxsJiZsLnRhZz09PTEzJiYobC5mbGFnc3w9MTYzODQpKSksbFModCxlKSk6eXUodCl9ZnVuY3Rpb24geXUoZSl7dmFyIHQ9ZTtkb3tpZigodC5mbGFncyYzMjc2OCkhPT0wKXtsUyh0LG5hKTtyZXR1cm59ZT10LnJldHVybjt2YXIgbj13Tih0LmFsdGVybmF0ZSx0LFJsKTtpZihuIT09bnVsbCl7TWU9bjtyZXR1cm59aWYodD10LnNpYmxpbmcsdCE9PW51bGwpe01lPXQ7cmV0dXJufU1lPXQ9ZX13aGlsZSh0IT09bnVsbCk7YXQ9PT0wJiYoYXQ9NSl9ZnVuY3Rpb24gbFMoZSx0KXtkb3t2YXIgbj1FTihlLmFsdGVybmF0ZSxlKTtpZihuIT09bnVsbCl7bi5mbGFncyY9MzI3NjcsTWU9bjtyZXR1cm59aWYobj1lLnJldHVybixuIT09bnVsbCYmKG4uZmxhZ3N8PTMyNzY4LG4uc3VidHJlZUZsYWdzPTAsbi5kZWxldGlvbnM9bnVsbCksIXQmJihlPWUuc2libGluZyxlIT09bnVsbCkpe01lPWU7cmV0dXJufU1lPWU9bn13aGlsZShlIT09bnVsbCk7YXQ9NixNZT1udWxsfWZ1bmN0aW9uIGFTKGUsdCxuLGwscixjLGgsUyxfLEwsVixaKXtlLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbDtkbyBidSgpO3doaWxlKHR0IT09MCk7aWYoKEllJjYpIT09MCl0aHJvdyBFcnJvcihpKDMyNykpO2lmKHQhPT1udWxsKXtpZih0PT09ZS5jdXJyZW50KXRocm93IEVycm9yKGkoMTc3KSk7ZT09PSRlJiYoTWU9JGU9bnVsbCxMZT0wKSxxYT10LE1uPWUsJG49bix3bT1yLEt4PWwsek4oZSx0LG4saCxTLF8sWil9fWZ1bmN0aW9uIHpOKGUsdCxuLGwscixjLGgpe3ZhciBTPXQubGFuZXN8dC5jaGlsZExhbmVzO2lmKFRtPVMsU3w9aWQsckEoZSxuLFMsbCxyLGMpLFBvPW51bGwsKG4mMzM1NTQ0MDY0KT09PW4/KEdvPWNOKGUpLGw9MTAyNjIpOihHbz1udWxsLGw9MTAyNTYpLCh0LnN1YnRyZWVGbGFncyZsKSE9PTB8fCh0LmZsYWdzJmwpIT09MD8oZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCxJTihpYyxmdW5jdGlvbigpe3JldHVybiBObSgpLG51bGx9KSk6KGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTApLGF1PSExLGw9KHQuZmxhZ3MmMTM4NzgpIT09MCwodC5zdWJ0cmVlRmxhZ3MmMTM4NzgpIT09MHx8bCl7bD10ZS5ULHRlLlQ9bnVsbCxyPWllLnAsaWUucD0yLGM9SWUsSWV8PTQ7dHJ5e1JOKGUsdCxuKX1maW5hbGx5e0llPWMsaWUucD1yLHRlLlQ9bH19dHQ9MSxhdT9Jbz1yRChoLGUuY29udGFpbmVySW5mbyxHbyxfbSxPbSxMTixBbSxObSxrTik6KF9tKCksT20oKSxBbSgpKX1mdW5jdGlvbiBrTihlKXtpZih0dCE9PTApe3ZhciB0PU1uLm9uUmVjb3ZlcmFibGVFcnJvcjt0KGUse2NvbXBvbmVudFN0YWNrOm51bGx9KX19ZnVuY3Rpb24gTE4oKXt0dD09PTMmJih0dD0wLEl4KHFhLE1uKSx0dD00KX1mdW5jdGlvbiBfbSgpe2lmKHR0PT09MSl7dHQ9MDt2YXIgZT1Nbix0PXFhLG49JG4sbD0odC5mbGFncyYxMzg3OCkhPT0wO2lmKCh0LnN1YnRyZWVGbGFncyYxMzg3OCkhPT0wfHxsKXtsPXRlLlQsdGUuVD1udWxsO3ZhciByPWllLnA7aWUucD0yO3ZhciBjPUllO0llfD00O3RyeXskcj1pdT0hMSxIeCh0LGUsbiksbj1HbTt2YXIgaD1rYihlLmNvbnRhaW5lckluZm8pLFM9bi5mb2N1c2VkRWxlbSxfPW4uc2VsZWN0aW9uUmFuZ2U7aWYoaCE9PVMmJlMmJlMub3duZXJEb2N1bWVudCYmemIoUy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTKSl7aWYoXyE9PW51bGwmJm5kKFMpKXt2YXIgTD1fLnN0YXJ0LFY9Xy5lbmQ7aWYoVj09PXZvaWQgMCYmKFY9TCksInNlbGVjdGlvblN0YXJ0ImluIFMpUy5zZWxlY3Rpb25TdGFydD1MLFMuc2VsZWN0aW9uRW5kPU1hdGgubWluKFYsUy52YWx1ZS5sZW5ndGgpO2Vsc2V7dmFyIFo9Uy5vd25lckRvY3VtZW50fHxkb2N1bWVudCx6PVomJlouZGVmYXVsdFZpZXd8fHdpbmRvdztpZih6LmdldFNlbGVjdGlvbil7dmFyIEc9ei5nZXRTZWxlY3Rpb24oKSxvZT1TLnRleHRDb250ZW50Lmxlbmd0aCx2ZT1NYXRoLm1pbihfLnN0YXJ0LG9lKSxPZT1fLmVuZD09PXZvaWQgMD92ZTpNYXRoLm1pbihfLmVuZCxvZSk7IUcuZXh0ZW5kJiZ2ZT5PZSYmKGg9T2UsT2U9dmUsdmU9aCk7dmFyIGs9TWIoUyx2ZSksaj1NYihTLE9lKTtpZihrJiZqJiYoRy5yYW5nZUNvdW50IT09MXx8Ry5hbmNob3JOb2RlIT09ay5ub2RlfHxHLmFuY2hvck9mZnNldCE9PWsub2Zmc2V0fHxHLmZvY3VzTm9kZSE9PWoubm9kZXx8Ry5mb2N1c09mZnNldCE9PWoub2Zmc2V0KSl7dmFyIEk9Wi5jcmVhdGVSYW5nZSgpO0kuc2V0U3RhcnQoay5ub2RlLGsub2Zmc2V0KSxHLnJlbW92ZUFsbFJhbmdlcygpLHZlPk9lPyhHLmFkZFJhbmdlKEkpLEcuZXh0ZW5kKGoubm9kZSxqLm9mZnNldCkpOihJLnNldEVuZChqLm5vZGUsai5vZmZzZXQpLEcuYWRkUmFuZ2UoSSkpfX19fWZvcihaPVtdLEc9UztHPUcucGFyZW50Tm9kZTspRy5ub2RlVHlwZT09PTEmJloucHVzaCh7ZWxlbWVudDpHLGxlZnQ6Ry5zY3JvbGxMZWZ0LHRvcDpHLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2YgUy5mb2N1cz09ImZ1bmN0aW9uIiYmUy5mb2N1cygpLFM9MDtTPFoubGVuZ3RoO1MrKyl7dmFyIFE9WltTXTtRLmVsZW1lbnQuc2Nyb2xsTGVmdD1RLmxlZnQsUS5lbGVtZW50LnNjcm9sbFRvcD1RLnRvcH19V289ISFQbSxHbT1QbT1udWxsfWZpbmFsbHl7SWU9YyxpZS5wPXIsdGUuVD1sfX1lLmN1cnJlbnQ9dCx0dD0yfX1mdW5jdGlvbiBPbSgpe2lmKHR0PT09Mil7dHQ9MDt2YXIgZT1Nbix0PXFhLG49KHQuZmxhZ3MmODc3MikhPT0wO2lmKCh0LnN1YnRyZWVGbGFncyY4NzcyKSE9PTB8fG4pe249dGUuVCx0ZS5UPW51bGw7dmFyIGw9aWUucDtpZS5wPTI7dmFyIHI9SWU7SWV8PTQ7dHJ5e2p4KGUsdC5hbHRlcm5hdGUsdCl9ZmluYWxseXtJZT1yLGllLnA9bCx0ZS5UPW59fXR0PTN9fWZ1bmN0aW9uIEFtKCl7aWYodHQ9PT00fHx0dD09PTMpe3R0PTA7dmFyIGU9SW87SW89bnVsbCwkTygpO3ZhciB0PU1uLG49cWEsbD0kbixyPUt4LGM9KGwmMzM1NTQ0MDY0KT09PWw/MTAyNjI6MTAyNTY7aWYoKG4uc3VidHJlZUZsYWdzJmMpIT09MHx8KG4uZmxhZ3MmYykhPT0wP3R0PTU6KHR0PTAscWE9TW49bnVsbCxvUyh0LHQucGVuZGluZ0xhbmVzKSksYz10LnBlbmRpbmdMYW5lcyxjPT09MCYmKGFhPW51bGwpLEhmKGwpLG49bi5zdGF0ZU5vZGUsdG4mJnR5cGVvZiB0bi5vbkNvbW1pdEZpYmVyUm9vdD09ImZ1bmN0aW9uIil0cnl7dG4ub25Db21taXRGaWJlclJvb3QoeHIsbix2b2lkIDAsKG4uY3VycmVudC5mbGFncyYxMjgpPT09MTI4KX1jYXRjaHt9aWYociE9PW51bGwpe249dGUuVCxjPWllLnAsaWUucD0yLHRlLlQ9bnVsbDt0cnl7Zm9yKHZhciBoPXQub25SZWNvdmVyYWJsZUVycm9yLFM9MDtTPHIubGVuZ3RoO1MrKyl7dmFyIF89cltTXTtoKF8udmFsdWUse2NvbXBvbmVudFN0YWNrOl8uc3RhY2t9KX19ZmluYWxseXt0ZS5UPW4saWUucD1jfX1pZihyPVBvLGg9R28sR289bnVsbCxyIT09bnVsbCYmKFBvPW51bGwsaD09PW51bGwmJihoPVtdKSxlIT09bnVsbCkpZm9yKF89MDtfPHIubGVuZ3RoO18rKyluPSgwLHJbX10pKGgpLG4hPT12b2lkIDAmJmUuZmluaXNoZWQuZmluYWxseShuKTsoJG4mMykhPT0wJiZidSgpLEpuKHQpLGM9dC5wZW5kaW5nTGFuZXMsKGwmMjYxOTMwKSE9PTAmJihjJjQyKSE9PTA/dD09PXB1P3RpKys6KHRpPTAscHU9dCk6KHRpPTAscHU9bnVsbCksbmkoMCl9fWZ1bmN0aW9uIG9TKGUsdCl7KGUucG9vbGVkQ2FjaGVMYW5lcyY9dCk9PT0wJiYodD1lLnBvb2xlZENhY2hlLHQhPW51bGwmJihlLnBvb2xlZENhY2hlPW51bGwsTHIodCkpKX1mdW5jdGlvbiBidSgpe3JldHVybiBJbyE9PW51bGwmJihJby5za2lwVHJhbnNpdGlvbigpLElvPW51bGwpLF9tKCksT20oKSxBbSgpLE5tKCl9ZnVuY3Rpb24gTm0oKXtpZih0dCE9PTUpcmV0dXJuITE7dmFyIGU9TW4sdD1UbTtUbT0wO3ZhciBuPUhmKCRuKSxsPXRlLlQscj1pZS5wO3RyeXtpZS5wPTMyPm4/MzI6bix0ZS5UPW51bGwsbj13bSx3bT1udWxsO3ZhciBjPU1uLGg9JG47aWYodHQ9MCxxYT1Nbj1udWxsLCRuPTAsKEllJjYpIT09MCl0aHJvdyBFcnJvcihpKDMzMSkpO3ZhciBTPUllO2lmKEllfD00LFl4KGMuY3VycmVudCksUHgoYyxjLmN1cnJlbnQsaCxuKSxJZT1TLG5pKDAsITEpLHRuJiZ0eXBlb2YgdG4ub25Qb3N0Q29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXt0bi5vblBvc3RDb21taXRGaWJlclJvb3QoeHIsYyl9Y2F0Y2h7fXJldHVybiEwfWZpbmFsbHl7aWUucD1yLHRlLlQ9bCxvUyhlLHQpfX1mdW5jdGlvbiByUyhlLHQsbil7dD15bihuLHQpLHQ9S2QoZS5zdGF0ZU5vZGUsdCwyKSxlPUZsKGUsdCwyKSxlIT09bnVsbCYmKENyKGUsMiksSm4oZSkpfWZ1bmN0aW9uIFhlKGUsdCxuKXtpZihlLnRhZz09PTMpclMoZSxlLG4pO2Vsc2UgZm9yKDt0IT09bnVsbDspe2lmKHQudGFnPT09Myl7clModCxlLG4pO2JyZWFrfWVsc2UgaWYodC50YWc9PT0xKXt2YXIgbD10LnN0YXRlTm9kZTtpZih0eXBlb2YgdC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dHlwZW9mIGwuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihhYT09PW51bGx8fCFhYS5oYXMobCkpKXtlPXluKG4sZSksbj1ueCgyKSxsPUZsKHQsbiwyKSxsIT09bnVsbCYmKGx4KG4sbCx0LGUpLENyKGwsMiksSm4obCkpO2JyZWFrfX10PXQucmV0dXJufX1mdW5jdGlvbiBEbShlLHQsbil7dmFyIGw9ZS5waW5nQ2FjaGU7aWYobD09PW51bGwpe2w9ZS5waW5nQ2FjaGU9bmV3IEFOO3ZhciByPW5ldyBTZXQ7bC5zZXQodCxyKX1lbHNlIHI9bC5nZXQodCkscj09PXZvaWQgMCYmKHI9bmV3IFNldCxsLnNldCh0LHIpKTtyLmhhcyhuKXx8KFNtPSEwLHIuYWRkKG4pLGU9VU4uYmluZChudWxsLGUsdCxuKSx0LnRoZW4oZSxlKSl9ZnVuY3Rpb24gVU4oZSx0LG4pe3ZhciBsPWUucGluZ0NhY2hlO2whPT1udWxsJiZsLmRlbGV0ZSh0KSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm4sZS53YXJtTGFuZXMmPX5uLCRlPT09ZSYmKExlJm4pPT09biYmKChhdD09PTR8fGF0PT09MyYmKExlJjYyOTE0NTYwKT09PUxlJiYzMDA+ZW4oKS1kdSkmJihJZSYyKT09PTA/WW8oZSwwKTpmdXw9bixCbz09PUxlJiYoQm89MCkpLEpuKGUpfWZ1bmN0aW9uIGlTKGUsdCl7dD09PTAmJih0PVh5KCkpLGU9QWEoZSx0KSxlIT09bnVsbCYmKENyKGUsdCksSm4oZSkpfWZ1bmN0aW9uIEhOKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZSxuPTA7dCE9PW51bGwmJihuPXQucmV0cnlMYW5lKSxpUyhlLG4pfWZ1bmN0aW9uIEJOKGUsdCl7dmFyIG49MDtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzp2YXIgbD1lLnN0YXRlTm9kZSxyPWUubWVtb2l6ZWRTdGF0ZTtyIT09bnVsbCYmKG49ci5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6bD1lLnN0YXRlTm9kZTticmVhaztjYXNlIDIyOmw9ZS5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDMxNCkpfWwhPT1udWxsJiZsLmRlbGV0ZSh0KSxpUyhlLG4pfWZ1bmN0aW9uIElOKGUsdCl7cmV0dXJuIHpmKGUsdCl9dmFyIFhvPW51bGwsS289bnVsbCxqbT0hMSx4dT0hMSxNbT0hMSxyYT0wO2Z1bmN0aW9uIEpuKGUpe2UhPT1LbyYmZS5uZXh0PT09bnVsbCYmKEtvPT09bnVsbD9Ybz1Lbz1lOktvPUtvLm5leHQ9ZSkseHU9ITAsam18fChqbT0hMCxHTigpKX1mdW5jdGlvbiBuaShlLHQpe2lmKCFNbSYmeHUpe01tPSEwO2RvIGZvcih2YXIgbj0hMSxsPVhvO2whPT1udWxsOyl7aWYoZSE9PTApe3ZhciByPWwucGVuZGluZ0xhbmVzO2lmKHI9PT0wKXZhciBjPTA7ZWxzZXt2YXIgaD1sLnN1c3BlbmRlZExhbmVzLFM9bC5waW5nZWRMYW5lcztjPSgxPDwzMS1ubig0MnxlKSsxKS0xLGMmPXImfihoJn5TKSxjPWMmMjAxMzI2NzQxP2MmMjAxMzI2NzQxfDE6Yz9jfDI6MH1jIT09MCYmKG49ITAsZlMobCxjKSl9ZWxzZSBjPUxlLGM9ZmMobCxsPT09JGU/YzowLGwuY2FuY2VsUGVuZGluZ0NvbW1pdCE9PW51bGx8fGwudGltZW91dEhhbmRsZSE9PS0xKSwoYyYzKT09PTB8fFNyKGwsYyl8fChuPSEwLGZTKGwsYykpO2w9bC5uZXh0fXdoaWxlKG4pO01tPSExfX1mdW5jdGlvbiBQTigpe2NTKCl9ZnVuY3Rpb24gY1MoKXt4dT1qbT0hMTt2YXIgZT0wO3JhIT09MCYmV04oKSYmKGU9cmEpO2Zvcih2YXIgdD1lbigpLG49bnVsbCxsPVhvO2whPT1udWxsOyl7dmFyIHI9bC5uZXh0LGM9dVMobCx0KTtjPT09MD8obC5uZXh0PW51bGwsbj09PW51bGw/WG89cjpuLm5leHQ9cixyPT09bnVsbCYmKEtvPW4pKToobj1sLChlIT09MHx8KGMmMykhPT0wKSYmKHh1PSEwKSksbD1yfXR0IT09MCYmdHQhPT01fHxuaShlKSxyYSE9PTAmJihyYT0wKX1mdW5jdGlvbiB1UyhlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLGw9ZS5waW5nZWRMYW5lcyxyPWUuZXhwaXJhdGlvblRpbWVzLGM9ZS5wZW5kaW5nTGFuZXMmLTYyOTE0NTYxOzA8Yzspe3ZhciBoPTMxLW5uKGMpLFM9MTw8aCxfPXJbaF07Xz09PS0xPygoUyZuKT09PTB8fChTJmwpIT09MCkmJihyW2hdPW9BKFMsdCkpOl88PXQmJihlLmV4cGlyZWRMYW5lc3w9UyksYyY9flN9aWYodD0kZSxuPUxlLG49ZmMoZSxlPT09dD9uOjAsZS5jYW5jZWxQZW5kaW5nQ29tbWl0IT09bnVsbHx8ZS50aW1lb3V0SGFuZGxlIT09LTEpLGw9ZS5jYWxsYmFja05vZGUsbj09PTB8fGU9PT10JiYocWU9PT0yfHxxZT09PTkpfHxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKXJldHVybiBsIT09bnVsbCYmbCE9PW51bGwmJmtmKGwpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoKG4mMyk9PT0wfHxTcihlLG4pKXtpZih0PW4mLW4sdD09PWUuY2FsbGJhY2tQcmlvcml0eSlyZXR1cm4gdDtzd2l0Y2gobCE9PW51bGwmJmtmKGwpLEhmKG4pKXtjYXNlIDI6Y2FzZSA4Om49Vnk7YnJlYWs7Y2FzZSAzMjpuPWljO2JyZWFrO2Nhc2UgMjY4NDM1NDU2Om49WXk7YnJlYWs7ZGVmYXVsdDpuPWljfXJldHVybiBsPXNTLmJpbmQobnVsbCxlKSxuPXpmKG4sbCksZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bix0fXJldHVybiBsIT09bnVsbCYmbCE9PW51bGwmJmtmKGwpLGUuY2FsbGJhY2tQcmlvcml0eT0yLGUuY2FsbGJhY2tOb2RlPW51bGwsMn1mdW5jdGlvbiBzUyhlLHQpe2lmKHR0IT09MCYmdHQhPT01KXJldHVybiBlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLG51bGw7dmFyIG49ZS5jYWxsYmFja05vZGU7aWYoYnUoKSYmZS5jYWxsYmFja05vZGUhPT1uKXJldHVybiBudWxsO3ZhciBsPUxlO3JldHVybiBsPWZjKGUsZT09PSRlP2w6MCxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsfHxlLnRpbWVvdXRIYW5kbGUhPT0tMSksbD09PTA/bnVsbDooWngoZSxsLHQpLHVTKGUsZW4oKSksZS5jYWxsYmFja05vZGUhPW51bGwmJmUuY2FsbGJhY2tOb2RlPT09bj9zUy5iaW5kKG51bGwsZSk6bnVsbCl9ZnVuY3Rpb24gZlMoZSx0KXtpZihidSgpKXJldHVybiBudWxsO1p4KGUsdCwhMCl9ZnVuY3Rpb24gR04oKXt0RChmdW5jdGlvbigpeyhJZSY2KSE9PTA/emYoR3ksUE4pOmNTKCl9KX1mdW5jdGlvbiB6bSgpe2lmKHJhPT09MCl7dmFyIGU9a2E7ZT09PTAmJihlPWNjLGNjPDw9MSwoY2MmMjYxODg4KT09PTAmJihjYz0yNTYpKSxyYT1lfXJldHVybiByYX1mdW5jdGlvbiBkUyhlKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PSJzeW1ib2wifHx0eXBlb2YgZT09ImJvb2xlYW4iP251bGw6dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTp2YyhlKX1mdW5jdGlvbiBWTihlLHQsbixsLHIpe2lmKHQ9PT0ic3VibWl0IiYmbiYmbi5zdGF0ZU5vZGU9PT1yKXt2YXIgYz1kUygocltYdF18fG51bGwpLmFjdGlvbiksaD1sLnN1Ym1pdHRlcjtoJiYodD0odD1oW1h0XXx8bnVsbCk/ZFModC5mb3JtQWN0aW9uKTpoLmdldEF0dHJpYnV0ZSgiZm9ybUFjdGlvbiIpLHQhPT1udWxsJiYoYz10LGg9bnVsbCkpO3ZhciBTPW5ldyB4YygiYWN0aW9uIiwiYWN0aW9uIixudWxsLGwscik7ZS5wdXNoKHtldmVudDpTLGxpc3RlbmVyczpbe2luc3RhbmNlOm51bGwsbGlzdGVuZXI6ZnVuY3Rpb24oKXtpZihsLmRlZmF1bHRQcmV2ZW50ZWQpe2lmKHJhIT09MCl7dmFyIF89bmV3IEZvcm1EYXRhKHIsaCk7R2Qobix7cGVuZGluZzohMCxkYXRhOl8sbWV0aG9kOnIubWV0aG9kLGFjdGlvbjpjfSxudWxsLF8pfX1lbHNlIHR5cGVvZiBjPT0iZnVuY3Rpb24iJiYoUy5wcmV2ZW50RGVmYXVsdCgpLF89bmV3IEZvcm1EYXRhKHIsaCksR2Qobix7cGVuZGluZzohMCxkYXRhOl8sbWV0aG9kOnIubWV0aG9kLGFjdGlvbjpjfSxjLF8pKX0sY3VycmVudFRhcmdldDpyfV19KX19Zm9yKHZhciBrbT0wO2ttPHJkLmxlbmd0aDtrbSsrKXt2YXIgTG09cmRba21dLFlOPUxtLnRvTG93ZXJDYXNlKCkscU49TG1bMF0udG9VcHBlckNhc2UoKStMbS5zbGljZSgxKTtBbihZTiwib24iK3FOKX1BbihIYiwib25BbmltYXRpb25FbmQiKSxBbihCYiwib25BbmltYXRpb25JdGVyYXRpb24iKSxBbihJYiwib25BbmltYXRpb25TdGFydCIpLEFuKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKSxBbigiZm9jdXNpbiIsIm9uRm9jdXMiKSxBbigiZm9jdXNvdXQiLCJvbkJsdXIiKSxBbihlTiwib25UcmFuc2l0aW9uUnVuIiksQW4odE4sIm9uVHJhbnNpdGlvblN0YXJ0IiksQW4obk4sIm9uVHJhbnNpdGlvbkNhbmNlbCIpLEFuKFBiLCJvblRyYW5zaXRpb25FbmQiKSxwbygib25Nb3VzZUVudGVyIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pLHBvKCJvbk1vdXNlTGVhdmUiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSkscG8oIm9uUG9pbnRlckVudGVyIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKSxwbygib25Qb2ludGVyTGVhdmUiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pLFJhKCJvbkNoYW5nZSIsImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKSxSYSgib25TZWxlY3QiLCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpLFJhKCJvbkJlZm9yZUlucHV0IixbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdKSxSYSgib25Db21wb3NpdGlvbkVuZCIsImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKSxSYSgib25Db21wb3NpdGlvblN0YXJ0IiwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSksUmEoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7dmFyIGxpPSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZyIuc3BsaXQoIiAiKSxYTj1uZXcgU2V0KCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQobGkpKTtmdW5jdGlvbiBtUyhlLHQpe3Q9KHQmNCkhPT0wO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLHI9bC5ldmVudDtsPWwubGlzdGVuZXJzO2U6e3ZhciBjPXZvaWQgMDtpZih0KWZvcih2YXIgaD1sLmxlbmd0aC0xOzA8PWg7aC0tKXt2YXIgUz1sW2hdLF89Uy5pbnN0YW5jZSxMPVMuY3VycmVudFRhcmdldDtpZihTPVMubGlzdGVuZXIsXyE9PWMmJnIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO2M9UyxyLmN1cnJlbnRUYXJnZXQ9TDt0cnl7YyhyKX1jYXRjaChWKXtUYyhWKX1yLmN1cnJlbnRUYXJnZXQ9bnVsbCxjPV99ZWxzZSBmb3IoaD0wO2g8bC5sZW5ndGg7aCsrKXtpZihTPWxbaF0sXz1TLmluc3RhbmNlLEw9Uy5jdXJyZW50VGFyZ2V0LFM9Uy5saXN0ZW5lcixfIT09YyYmci5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7Yz1TLHIuY3VycmVudFRhcmdldD1MO3RyeXtjKHIpfWNhdGNoKFYpe1RjKFYpfXIuY3VycmVudFRhcmdldD1udWxsLGM9X319fX1mdW5jdGlvbiB6ZShlLHQpe3ZhciBuPXRbSnldO249PT12b2lkIDAmJihuPXRbSnldPW5ldyBTZXQpO3ZhciBsPWUrIl9fYnViYmxlIjtuLmhhcyhsKXx8KGhTKHQsZSwyLCExKSxuLmFkZChsKSl9ZnVuY3Rpb24gVW0oZSx0LG4pe3ZhciBsPTA7dCYmKGx8PTQpLGhTKG4sZSxsLHQpfXZhciBTdT0iX3JlYWN0TGlzdGVuaW5nIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBIbShlKXtpZighZVtTdV0pe2VbU3VdPSEwLHRiLmZvckVhY2goZnVuY3Rpb24obil7biE9PSJzZWxlY3Rpb25jaGFuZ2UiJiYoWE4uaGFzKG4pfHxVbShuLCExLGUpLFVtKG4sITAsZSkpfSk7dmFyIHQ9ZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnQ7dD09PW51bGx8fHRbU3VdfHwodFtTdV09ITAsVW0oInNlbGVjdGlvbmNoYW5nZSIsITEsdCkpfX1mdW5jdGlvbiBoUyhlLHQsbixsKXtzd2l0Y2gobDEodCkpe2Nhc2UgMjp2YXIgcj1IRDticmVhaztjYXNlIDg6cj1CRDticmVhaztkZWZhdWx0OnI9YWh9bj1yLmJpbmQobnVsbCx0LG4sZSkscj12b2lkIDAsIVhmfHx0IT09InRvdWNoc3RhcnQiJiZ0IT09InRvdWNobW92ZSImJnQhPT0id2hlZWwifHwocj0hMCksbD9yIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se2NhcHR1cmU6ITAscGFzc2l2ZTpyfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCk6ciE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtwYXNzaXZlOnJ9KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBCbShlLHQsbixsLHIpe3ZhciBjPWw7aWYoKHQmMSk9PT0wJiYodCYyKT09PTAmJmwhPT1udWxsKWU6Zm9yKDs7KXtpZihsPT09bnVsbClyZXR1cm47dmFyIGg9bC50YWc7aWYoaD09PTN8fGg9PT00KXt2YXIgUz1sLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKFM9PT1yKWJyZWFrO2lmKGg9PT00KWZvcihoPWwucmV0dXJuO2ghPT1udWxsOyl7dmFyIF89aC50YWc7aWYoKF89PT0zfHxfPT09NCkmJmguc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1yKXJldHVybjtoPWgucmV0dXJufWZvcig7UyE9PW51bGw7KXtpZihoPUVhKFMpLGg9PT1udWxsKXJldHVybjtpZihfPWgudGFnLF89PT01fHxfPT09Nnx8Xz09PTI2fHxfPT09Mjcpe2w9Yz1oO2NvbnRpbnVlIGV9Uz1TLnBhcmVudE5vZGV9fWw9bC5yZXR1cm59aGIoZnVuY3Rpb24oKXt2YXIgTD1jLFY9WWYobiksWj1bXTtlOnt2YXIgej1HYi5nZXQoZSk7aWYoeiE9PXZvaWQgMCl7dmFyIEc9eGMsb2U9ZTtzd2l0Y2goZSl7Y2FzZSJrZXlwcmVzcyI6aWYoeWMobik9PT0wKWJyZWFrIGU7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpHPU5BO2JyZWFrO2Nhc2UiZm9jdXNpbiI6b2U9ImZvY3VzIixHPUZmO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOm9lPSJibHVyIixHPUZmO2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOkc9RmY7YnJlYWs7Y2FzZSJjbGljayI6aWYobi5idXR0b249PT0yKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51IjpHPWdiO2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOkc9eUE7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6Rz1rQTticmVhaztjYXNlIEhiOmNhc2UgQmI6Y2FzZSBJYjpHPVNBO2JyZWFrO2Nhc2UgUGI6Rz1VQTticmVhaztjYXNlInNjcm9sbCI6Y2FzZSJzY3JvbGxlbmQiOkc9dkE7YnJlYWs7Y2FzZSJ3aGVlbCI6Rz1CQTticmVhaztjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlInBhc3RlIjpHPVRBO2JyZWFrO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOmNhc2UibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJwb2ludGVydXAiOkc9YmI7YnJlYWs7Y2FzZSJzdWJtaXQiOkc9TUE7YnJlYWs7Y2FzZSJ0b2dnbGUiOmNhc2UiYmVmb3JldG9nZ2xlIjpHPVBBfXZhciB2ZT0odCY0KSE9PTAsT2U9IXZlJiYoZT09PSJzY3JvbGwifHxlPT09InNjcm9sbGVuZCIpLGs9dmU/eiE9PW51bGw/eisiQ2FwdHVyZSI6bnVsbDp6O3ZlPVtdO2Zvcih2YXIgaj1MLEk7aiE9PW51bGw7KXt2YXIgUT1qO2lmKEk9US5zdGF0ZU5vZGUsUT1RLnRhZyxRIT09NSYmUSE9PTI2JiZRIT09Mjd8fEk9PT1udWxsfHxrPT09bnVsbHx8KFE9RXIoaixrKSxRIT1udWxsJiZ2ZS5wdXNoKGFpKGosUSxJKSkpLE9lKWJyZWFrO2o9ai5yZXR1cm59MDx2ZS5sZW5ndGgmJih6PW5ldyBHKHosb2UsbnVsbCxuLFYpLFoucHVzaCh7ZXZlbnQ6eixsaXN0ZW5lcnM6dmV9KSl9fWlmKCh0JjcpPT09MCl7ZTp7aWYoRz1lPT09Im1vdXNlb3ZlciJ8fGU9PT0icG9pbnRlcm92ZXIiLHo9ZT09PSJtb3VzZW91dCJ8fGU9PT0icG9pbnRlcm91dCIsRyYmbiE9PVZmJiYob2U9bi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KSYmKEVhKG9lKXx8b2VbZm9dKSlicmVhayBlOyh6fHxHKSYmKG9lPVYud2luZG93PT09Vj9WOihHPVYub3duZXJEb2N1bWVudCk/Ry5kZWZhdWx0Vmlld3x8Ry5wYXJlbnRXaW5kb3c6d2luZG93LHo/KEc9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVudCx6PUwsRz1HP0VhKEcpOm51bGwsRyE9PW51bGwmJihPZT1mKEcpLHZlPUcudGFnLEchPT1PZXx8dmUhPT01JiZ2ZSE9PTI3JiZ2ZSE9PTYpJiYoRz1udWxsKSk6KHo9bnVsbCxHPUwpLHohPT1HJiYodmU9Z2IsUT0ib25Nb3VzZUxlYXZlIixrPSJvbk1vdXNlRW50ZXIiLGo9Im1vdXNlIiwoZT09PSJwb2ludGVyb3V0Inx8ZT09PSJwb2ludGVyb3ZlciIpJiYodmU9YmIsUT0ib25Qb2ludGVyTGVhdmUiLGs9Im9uUG9pbnRlckVudGVyIixqPSJwb2ludGVyIiksT2U9ej09bnVsbD9vZTp3cih6KSxJPUc9PW51bGw/b2U6d3IoRyksb2U9bmV3IHZlKFEsaisibGVhdmUiLHosbixWKSxvZS50YXJnZXQ9T2Usb2UucmVsYXRlZFRhcmdldD1JLFE9bnVsbCxFYShWKT09PUwmJih2ZT1uZXcgdmUoayxqKyJlbnRlciIsRyxuLFYpLHZlLnRhcmdldD1JLHZlLnJlbGF0ZWRUYXJnZXQ9T2UsUT12ZSksT2U9USx2ZT16JiZHP0goeixHLEtOKTpudWxsLHohPT1udWxsJiZwUyhaLG9lLHosdmUsITEpLEchPT1udWxsJiZPZSE9PW51bGwmJnBTKFosT2UsRyx2ZSwhMCkpKX1lOntpZih6PUw/d3IoTCk6d2luZG93LEc9ei5ub2RlTmFtZSYmei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLEc9PT0ic2VsZWN0Inx8Rz09PSJpbnB1dCImJnoudHlwZT09PSJmaWxlIil2YXIgZmU9X2I7ZWxzZSBpZihFYih6KSlpZihPYilmZT0kQTtlbHNle2ZlPVpBO3ZhciBVZT1RQX1lbHNlIEc9ei5ub2RlTmFtZSwhR3x8Ry50b0xvd2VyQ2FzZSgpIT09ImlucHV0Inx8ei50eXBlIT09ImNoZWNrYm94IiYmei50eXBlIT09InJhZGlvIj9MJiZHZihMLmVsZW1lbnRUeXBlKSYmKGZlPV9iKTpmZT1GQTtpZihmZSYmKGZlPWZlKGUsTCkpKXtSYihaLGZlLG4sVik7YnJlYWsgZX1VZSYmVWUoZSx6LEwpfXN3aXRjaChVZT1MP3dyKEwpOndpbmRvdyxlKXtjYXNlImZvY3VzaW4iOihFYihVZSl8fFVlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIikmJihTbz1VZSxsZD1MLE1yPW51bGwpO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOk1yPWxkPVNvPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmFkPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjphZD0hMSxMYihaLG4sVik7YnJlYWs7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKFdBKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6TGIoWixuLFYpfXZhciBnZTtpZihKZillOntzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgU2U9Im9uQ29tcG9zaXRpb25TdGFydCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjpTZT0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpTZT0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1TZT12b2lkIDB9ZWxzZSB4bz9UYihlLG4pJiYoU2U9Im9uQ29tcG9zaXRpb25FbmQiKTplPT09ImtleWRvd24iJiZuLmtleUNvZGU9PT0yMjkmJihTZT0ib25Db21wb3NpdGlvblN0YXJ0Iik7U2UmJih4YiYmbi5sb2NhbGUhPT0ia28iJiYoeG98fFNlIT09Im9uQ29tcG9zaXRpb25TdGFydCI/U2U9PT0ib25Db21wb3NpdGlvbkVuZCImJnhvJiYoZ2U9cGIoKSk6KFBsPVYsS2Y9InZhbHVlImluIFBsP1BsLnZhbHVlOlBsLnRleHRDb250ZW50LHhvPSEwKSksVWU9Q3UoTCxTZSksMDxVZS5sZW5ndGgmJihTZT1uZXcgeWIoU2UsZSxudWxsLG4sViksWi5wdXNoKHtldmVudDpTZSxsaXN0ZW5lcnM6VWV9KSxnZT9TZS5kYXRhPWdlOihnZT13YihuKSxnZSE9PW51bGwmJihTZS5kYXRhPWdlKSkpKSwoZ2U9VkE/WUEoZSxuKTpxQShlLG4pKSYmKFNlPUN1KEwsIm9uQmVmb3JlSW5wdXQiKSwwPFNlLmxlbmd0aCYmKFVlPW5ldyB5Yigib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sViksWi5wdXNoKHtldmVudDpVZSxsaXN0ZW5lcnM6U2V9KSxVZS5kYXRhPWdlKSksVk4oWixlLEwsbixWKX1tUyhaLHQpfSl9ZnVuY3Rpb24gYWkoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBDdShlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixsPVtdO2UhPT1udWxsOyl7dmFyIHI9ZSxjPXIuc3RhdGVOb2RlO2lmKHI9ci50YWcsciE9PTUmJnIhPT0yNiYmciE9PTI3fHxjPT09bnVsbHx8KHI9RXIoZSxuKSxyIT1udWxsJiZsLnVuc2hpZnQoYWkoZSxyLGMpKSxyPUVyKGUsdCksciE9bnVsbCYmbC5wdXNoKGFpKGUscixjKSkpLGUudGFnPT09MylyZXR1cm4gbDtlPWUucmV0dXJufXJldHVybltdfWZ1bmN0aW9uIEtOKGUpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2RvIGU9ZS5yZXR1cm47d2hpbGUoZSYmZS50YWchPT01JiZlLnRhZyE9PTI3KTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBwUyhlLHQsbixsLHIpe2Zvcih2YXIgYz10Ll9yZWFjdE5hbWUsaD1bXTtuIT09bnVsbCYmbiE9PWw7KXt2YXIgUz1uLF89Uy5hbHRlcm5hdGUsTD1TLnN0YXRlTm9kZTtpZihTPVMudGFnLF8hPT1udWxsJiZfPT09bClicmVhaztTIT09NSYmUyE9PTI2JiZTIT09Mjd8fEw9PT1udWxsfHwoXz1MLHI/KEw9RXIobixjKSxMIT1udWxsJiZoLnVuc2hpZnQoYWkobixMLF8pKSk6cnx8KEw9RXIobixjKSxMIT1udWxsJiZoLnB1c2goYWkobixMLF8pKSkpLG49bi5yZXR1cm59aC5sZW5ndGghPT0wJiZlLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOmh9KX12YXIgUU49L1xyXG4/L2csWk49L1x1MDAwMHxcdUZGRkQvZztmdW5jdGlvbiB2UyhlKXtyZXR1cm4odHlwZW9mIGU9PSJzdHJpbmciP2U6IiIrZSkucmVwbGFjZShRTixgCmApLnJlcGxhY2UoWk4sIiIpfWZ1bmN0aW9uIGdTKGUsdCl7cmV0dXJuIHQ9dlModCksdlMoZSk9PT10fWZ1bmN0aW9uIEtlKGUsdCxuLGwscixjKXtzd2l0Y2gobil7Y2FzZSJjaGlsZHJlbiI6aWYodHlwZW9mIGw9PSJzdHJpbmciKXQ9PT0iYm9keSJ8fHQ9PT0idGV4dGFyZWEiJiZsPT09IiJ8fGdvKGUsbCk7ZWxzZSBpZih0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0iYmlnaW50Iil0IT09ImJvZHkiJiZnbyhlLCIiK2wpO2Vsc2UgcmV0dXJuO2JyZWFrO2Nhc2UiY2xhc3NOYW1lIjpwYyhlLCJjbGFzcyIsbCk7YnJlYWs7Y2FzZSJ0YWJJbmRleCI6cGMoZSwidGFiaW5kZXgiLGwpO2JyZWFrO2Nhc2UiZGlyIjpjYXNlInJvbGUiOmNhc2Uidmlld0JveCI6Y2FzZSJ3aWR0aCI6Y2FzZSJoZWlnaHQiOnBjKGUsbixsKTticmVhaztjYXNlInN0eWxlIjpkYihlLGwsYyk7cmV0dXJuO2Nhc2UiZGF0YSI6aWYodCE9PSJvYmplY3QiKXtwYyhlLCJkYXRhIixsKTticmVha31jYXNlInNyYyI6Y2FzZSJocmVmIjppZihsPT09IiImJih0IT09ImEifHxuIT09ImhyZWYiKSl7ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWt9aWYobD09bnVsbHx8dHlwZW9mIGw9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsPT0ic3ltYm9sInx8dHlwZW9mIGw9PSJib29sZWFuIil7ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWt9bD12YyhsKSxlLnNldEF0dHJpYnV0ZShuLGwpO2JyZWFrO2Nhc2UiYWN0aW9uIjpjYXNlImZvcm1BY3Rpb24iOmlmKHR5cGVvZiBsPT0iZnVuY3Rpb24iKXtlLnNldEF0dHJpYnV0ZShuLCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcJ3JlIHRyeWluZyB0byB1c2UgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaW4gYSBzdWJtaXQgZXZlbnQgaGFuZGxlciwgY29uc2lkZXIgYWxzbyBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkuJykiKTticmVha31lbHNlIHR5cGVvZiBjPT0iZnVuY3Rpb24iJiYobj09PSJmb3JtQWN0aW9uIj8odCE9PSJpbnB1dCImJktlKGUsdCwibmFtZSIsci5uYW1lLHIsbnVsbCksS2UoZSx0LCJmb3JtRW5jVHlwZSIsci5mb3JtRW5jVHlwZSxyLG51bGwpLEtlKGUsdCwiZm9ybU1ldGhvZCIsci5mb3JtTWV0aG9kLHIsbnVsbCksS2UoZSx0LCJmb3JtVGFyZ2V0IixyLmZvcm1UYXJnZXQscixudWxsKSk6KEtlKGUsdCwiZW5jVHlwZSIsci5lbmNUeXBlLHIsbnVsbCksS2UoZSx0LCJtZXRob2QiLHIubWV0aG9kLHIsbnVsbCksS2UoZSx0LCJ0YXJnZXQiLHIudGFyZ2V0LHIsbnVsbCkpKTtpZihsPT1udWxsfHx0eXBlb2YgbD09InN5bWJvbCJ8fHR5cGVvZiBsPT0iYm9vbGVhbiIpe2UucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrfWw9dmMobCksZS5zZXRBdHRyaWJ1dGUobixsKTticmVhaztjYXNlIm9uQ2xpY2siOmwhPW51bGwmJihlLm9uY2xpY2s9R24pO3JldHVybjtjYXNlIm9uU2Nyb2xsIjpsIT1udWxsJiZ6ZSgic2Nyb2xsIixlKTtyZXR1cm47Y2FzZSJvblNjcm9sbEVuZCI6bCE9bnVsbCYmemUoInNjcm9sbGVuZCIsZSk7cmV0dXJuO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKGwhPW51bGwpe2lmKHR5cGVvZiBsIT0ib2JqZWN0Inx8ISgiX19odG1sImluIGwpKXRocm93IEVycm9yKGkoNjEpKTtpZihuPWwuX19odG1sLG4hPW51bGwpe2lmKHIuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoaSg2MCkpO2M/Ll9faHRtbCE9PW4mJihlLmlubmVySFRNTD1uKX19YnJlYWs7Y2FzZSJtdWx0aXBsZSI6ZS5tdWx0aXBsZT1sJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiO2JyZWFrO2Nhc2UibXV0ZWQiOmUubXV0ZWQ9bCYmdHlwZW9mIGwhPSJmdW5jdGlvbiImJnR5cGVvZiBsIT0ic3ltYm9sIjticmVhaztjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiZGVmYXVsdFZhbHVlIjpjYXNlImRlZmF1bHRDaGVja2VkIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmJyZWFrO2Nhc2UiYXV0b0ZvY3VzIjpicmVhaztjYXNlInhsaW5rSHJlZiI6aWYobD09bnVsbHx8dHlwZW9mIGw9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsPT0iYm9vbGVhbiJ8fHR5cGVvZiBsPT0ic3ltYm9sIil7ZS5yZW1vdmVBdHRyaWJ1dGUoInhsaW5rOmhyZWYiKTticmVha31uPXZjKGwpLGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazpocmVmIixuKTticmVhaztjYXNlImNvbnRlbnRFZGl0YWJsZSI6Y2FzZSJzcGVsbENoZWNrIjpjYXNlImRyYWdnYWJsZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJhdXRvUmV2ZXJzZSI6Y2FzZSJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIjpjYXNlImZvY3VzYWJsZSI6Y2FzZSJwcmVzZXJ2ZUFscGhhIjpsIT1udWxsJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiP2Uuc2V0QXR0cmlidXRlKG4sbCk6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJpbmVydCI6Y2FzZSJhbGxvd0Z1bGxTY3JlZW4iOmNhc2UiYXN5bmMiOmNhc2UiYXV0b1BsYXkiOmNhc2UiY29udHJvbHMiOmNhc2UiY3JlZGVudGlhbGxlc3MiOmNhc2UiZGVmYXVsdCI6Y2FzZSJkZWZlciI6Y2FzZSJkaXNhYmxlZCI6Y2FzZSJkaXNhYmxlUGljdHVyZUluUGljdHVyZSI6Y2FzZSJkaXNhYmxlUmVtb3RlUGxheWJhY2siOmNhc2UiZm9ybU5vVmFsaWRhdGUiOmNhc2UiaGlkZGVuIjpjYXNlImxvb3AiOmNhc2Uibm9Nb2R1bGUiOmNhc2Uibm9WYWxpZGF0ZSI6Y2FzZSJvcGVuIjpjYXNlInBsYXlzSW5saW5lIjpjYXNlInJlYWRPbmx5IjpjYXNlInJlcXVpcmVkIjpjYXNlInJldmVyc2VkIjpjYXNlInNjb3BlZCI6Y2FzZSJzZWFtbGVzcyI6Y2FzZSJpdGVtU2NvcGUiOmwmJnR5cGVvZiBsIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbCE9InN5bWJvbCI/ZS5zZXRBdHRyaWJ1dGUobiwiIik6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJjYXB0dXJlIjpjYXNlImRvd25sb2FkIjpsPT09ITA/ZS5zZXRBdHRyaWJ1dGUobiwiIik6bCE9PSExJiZsIT1udWxsJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiP2Uuc2V0QXR0cmlidXRlKG4sbCk6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJjb2xzIjpjYXNlInJvd3MiOmNhc2Uic2l6ZSI6Y2FzZSJzcGFuIjpsIT1udWxsJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiJiYhaXNOYU4obCkmJjE8PWw/ZS5zZXRBdHRyaWJ1dGUobixsKTplLnJlbW92ZUF0dHJpYnV0ZShuKTticmVhaztjYXNlInJvd1NwYW4iOmNhc2Uic3RhcnQiOmw9PW51bGx8fHR5cGVvZiBsPT0iZnVuY3Rpb24ifHx0eXBlb2YgbD09InN5bWJvbCJ8fGlzTmFOKGwpP2UucmVtb3ZlQXR0cmlidXRlKG4pOmUuc2V0QXR0cmlidXRlKG4sbCk7YnJlYWs7Y2FzZSJwb3BvdmVyIjp6ZSgiYmVmb3JldG9nZ2xlIixlKSx6ZSgidG9nZ2xlIixlKSxoYyhlLCJwb3BvdmVyIixsKTticmVhaztjYXNlInhsaW5rQWN0dWF0ZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmFjdHVhdGUiLGwpO2JyZWFrO2Nhc2UieGxpbmtBcmNyb2xlIjpobChlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6YXJjcm9sZSIsbCk7YnJlYWs7Y2FzZSJ4bGlua1JvbGUiOmhsKGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazpyb2xlIixsKTticmVhaztjYXNlInhsaW5rU2hvdyI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnNob3ciLGwpO2JyZWFrO2Nhc2UieGxpbmtUaXRsZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnRpdGxlIixsKTticmVhaztjYXNlInhsaW5rVHlwZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnR5cGUiLGwpO2JyZWFrO2Nhc2UieG1sQmFzZSI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOmJhc2UiLGwpO2JyZWFrO2Nhc2UieG1sTGFuZyI6aGwoZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOmxhbmciLGwpO2JyZWFrO2Nhc2UieG1sU3BhY2UiOmhsKGUsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsbCk7YnJlYWs7Y2FzZSJpcyI6aGMoZSwiaXMiLGwpO2JyZWFrO2Nhc2UiaW5uZXJUZXh0IjpjYXNlInRleHRDb250ZW50IjpyZXR1cm47ZGVmYXVsdDppZighKDI8bi5sZW5ndGgpfHxuWzBdIT09Im8iJiZuWzBdIT09Ik8ifHxuWzFdIT09Im4iJiZuWzFdIT09Ik4iKW49aEEuZ2V0KG4pfHxuLGhjKGUsbixsKTtlbHNlIHJldHVybn1CZT0hMH1mdW5jdGlvbiBJbShlLHQsbixsLHIsYyl7c3dpdGNoKG4pe2Nhc2Uic3R5bGUiOmRiKGUsbCxjKTtyZXR1cm47Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobCE9bnVsbCl7aWYodHlwZW9mIGwhPSJvYmplY3QifHwhKCJfX2h0bWwiaW4gbCkpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG49bC5fX2h0bWwsbiE9bnVsbCl7aWYoci5jaGlsZHJlbiE9bnVsbCl0aHJvdyBFcnJvcihpKDYwKSk7Yz8uX19odG1sIT09biYmKGUuaW5uZXJIVE1MPW4pfX1icmVhaztjYXNlImNoaWxkcmVuIjppZih0eXBlb2YgbD09InN0cmluZyIpZ28oZSxsKTtlbHNlIGlmKHR5cGVvZiBsPT0ibnVtYmVyInx8dHlwZW9mIGw9PSJiaWdpbnQiKWdvKGUsIiIrbCk7ZWxzZSByZXR1cm47YnJlYWs7Y2FzZSJvblNjcm9sbCI6bCE9bnVsbCYmemUoInNjcm9sbCIsZSk7cmV0dXJuO2Nhc2Uib25TY3JvbGxFbmQiOmwhPW51bGwmJnplKCJzY3JvbGxlbmQiLGUpO3JldHVybjtjYXNlIm9uQ2xpY2siOmwhPW51bGwmJihlLm9uY2xpY2s9R24pO3JldHVybjtjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiaW5uZXJIVE1MIjpjYXNlInJlZiI6cmV0dXJuO2Nhc2UiaW5uZXJUZXh0IjpjYXNlInRleHRDb250ZW50IjpyZXR1cm47ZGVmYXVsdDppZighbmIuaGFzT3duUHJvcGVydHkobikpZTp7aWYoblswXT09PSJvIiYmblsxXT09PSJuIiYmKHI9bi5lbmRzV2l0aCgiQ2FwdHVyZSIpLGM9bi5zbGljZSgyLHI/bi5sZW5ndGgtNzp2b2lkIDApLHQ9ZVtYdF18fG51bGwsdD10IT1udWxsP3Rbbl06bnVsbCx0eXBlb2YgdD09ImZ1bmN0aW9uIiYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGMsdCxyKSx0eXBlb2YgbD09ImZ1bmN0aW9uIikpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiZ0IT09bnVsbCYmKG4gaW4gZT9lW25dPW51bGw6ZS5oYXNBdHRyaWJ1dGUobikmJmUucmVtb3ZlQXR0cmlidXRlKG4pKSxlLmFkZEV2ZW50TGlzdGVuZXIoYyxsLHIpO2JyZWFrIGV9QmU9ITAsbiBpbiBlP2Vbbl09bDpsPT09ITA/ZS5zZXRBdHRyaWJ1dGUobiwiIik6aGMoZSxuLGwpfXJldHVybn1CZT0hMH1mdW5jdGlvbiBEdChlLHQsbil7c3dpdGNoKHQpe2Nhc2UiZGl2IjpjYXNlInNwYW4iOmNhc2Uic3ZnIjpjYXNlInBhdGgiOmNhc2UiYSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UibGkiOmJyZWFrO2Nhc2UiaW1nIjp6ZSgiZXJyb3IiLGUpLHplKCJsb2FkIixlKTt2YXIgbD0hMSxyPSExLGM7Zm9yKGMgaW4gbilpZihuLmhhc093blByb3BlcnR5KGMpKXt2YXIgaD1uW2NdO2lmKGghPW51bGwpc3dpdGNoKGMpe2Nhc2Uic3JjIjpsPSEwO2JyZWFrO2Nhc2Uic3JjU2V0IjpyPSEwO2JyZWFrO2Nhc2UiY2hpbGRyZW4iOmNhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOnRocm93IEVycm9yKGkoMTM3LHQpKTtkZWZhdWx0OktlKGUsdCxjLGgsbixudWxsKX19ciYmS2UoZSx0LCJzcmNTZXQiLG4uc3JjU2V0LG4sbnVsbCksbCYmS2UoZSx0LCJzcmMiLG4uc3JjLG4sbnVsbCk7cmV0dXJuO2Nhc2UiaW5wdXQiOnplKCJpbnZhbGlkIixlKTt2YXIgUz1jPWg9cj1udWxsLF89bnVsbCxMPW51bGw7Zm9yKGwgaW4gbilpZihuLmhhc093blByb3BlcnR5KGwpKXt2YXIgVj1uW2xdO2lmKFYhPW51bGwpc3dpdGNoKGwpe2Nhc2UibmFtZSI6cj1WO2JyZWFrO2Nhc2UidHlwZSI6aD1WO2JyZWFrO2Nhc2UiY2hlY2tlZCI6Xz1WO2JyZWFrO2Nhc2UiZGVmYXVsdENoZWNrZWQiOkw9VjticmVhaztjYXNlInZhbHVlIjpjPVY7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOlM9VjticmVhaztjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihWIT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OktlKGUsdCxsLFYsbixudWxsKX19Y2IoZSxjLFMsXyxMLGgsciwhMSk7cmV0dXJuO2Nhc2Uic2VsZWN0Ijp6ZSgiaW52YWxpZCIsZSksbD1oPWM9bnVsbDtmb3IociBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikmJihTPW5bcl0sUyE9bnVsbCkpc3dpdGNoKHIpe2Nhc2UidmFsdWUiOmM9UzticmVhaztjYXNlImRlZmF1bHRWYWx1ZSI6aD1TO2JyZWFrO2Nhc2UibXVsdGlwbGUiOmw9UztkZWZhdWx0OktlKGUsdCxyLFMsbixudWxsKX10PWMsbj1oLGUubXVsdGlwbGU9ISFsLHQhPW51bGw/dm8oZSwhIWwsdCwhMSk6biE9bnVsbCYmdm8oZSwhIWwsbiwhMCk7cmV0dXJuO2Nhc2UidGV4dGFyZWEiOnplKCJpbnZhbGlkIixlKSxjPXI9bD1udWxsO2ZvcihoIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShoKSYmKFM9bltoXSxTIT1udWxsKSlzd2l0Y2goaCl7Y2FzZSJ2YWx1ZSI6bD1TO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyPVM7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6Yz1TO2JyZWFrO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKFMhPW51bGwpdGhyb3cgRXJyb3IoaSg5MSkpO2JyZWFrO2RlZmF1bHQ6S2UoZSx0LGgsUyxuLG51bGwpfXNiKGUsbCxyLGMpO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKF8gaW4gbiluLmhhc093blByb3BlcnR5KF8pJiYobD1uW19dLGwhPW51bGwpJiYoXz09PSJzZWxlY3RlZCI/ZS5zZWxlY3RlZD1sJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGwhPSJzeW1ib2wiOktlKGUsdCxfLGwsbixudWxsKSk7cmV0dXJuO2Nhc2UiZGlhbG9nIjp6ZSgiYmVmb3JldG9nZ2xlIixlKSx6ZSgidG9nZ2xlIixlKSx6ZSgiY2FuY2VsIixlKSx6ZSgiY2xvc2UiLGUpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6emUoImxvYWQiLGUpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihsPTA7bDxsaS5sZW5ndGg7bCsrKXplKGxpW2xdLGUpO2JyZWFrO2Nhc2UiaW1hZ2UiOnplKCJlcnJvciIsZSksemUoImxvYWQiLGUpO2JyZWFrO2Nhc2UiZGV0YWlscyI6emUoInRvZ2dsZSIsZSk7YnJlYWs7Y2FzZSJlbWJlZCI6Y2FzZSJzb3VyY2UiOmNhc2UibGluayI6emUoImVycm9yIixlKSx6ZSgibG9hZCIsZSk7Y2FzZSJhcmVhIjpjYXNlImJhc2UiOmNhc2UiYnIiOmNhc2UiY29sIjpjYXNlImhyIjpjYXNlImtleWdlbiI6Y2FzZSJtZXRhIjpjYXNlInBhcmFtIjpjYXNlInRyYWNrIjpjYXNlIndiciI6Y2FzZSJtZW51aXRlbSI6Zm9yKEwgaW4gbilpZihuLmhhc093blByb3BlcnR5KEwpJiYobD1uW0xdLGwhPW51bGwpKXN3aXRjaChMKXtjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjp0aHJvdyBFcnJvcihpKDEzNyx0KSk7ZGVmYXVsdDpLZShlLHQsTCxsLG4sbnVsbCl9cmV0dXJuO2RlZmF1bHQ6aWYoR2YodCkpe2ZvcihWIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShWKSYmKGw9bltWXSxsIT09dm9pZCAwJiZJbShlLHQsVixsLG4sdm9pZCAwKSk7cmV0dXJufX1mb3IoUyBpbiBuKW4uaGFzT3duUHJvcGVydHkoUykmJihsPW5bU10sbCE9bnVsbCYmS2UoZSx0LFMsbCxuLG51bGwpKX12YXIgRk49e307ZnVuY3Rpb24gJE4oZSx0LG4sbCl7c3dpdGNoKHQpe2Nhc2UiZGl2IjpjYXNlInNwYW4iOmNhc2Uic3ZnIjpjYXNlInBhdGgiOmNhc2UiYSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UibGkiOmJyZWFrO2Nhc2UiaW5wdXQiOnZhciByPW51bGwsYz1udWxsLGg9bnVsbCxTPW51bGwsXz1udWxsLEw9bnVsbCxWPW51bGw7Zm9yKEcgaW4gbil7dmFyIFo9bltHXTtpZihuLmhhc093blByb3BlcnR5KEcpJiZaIT1udWxsKXN3aXRjaChHKXtjYXNlImNoZWNrZWQiOmJyZWFrO2Nhc2UidmFsdWUiOmJyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpfPVo7ZGVmYXVsdDpsLmhhc093blByb3BlcnR5KEcpfHxLZShlLHQsRyxudWxsLGwsWil9fWZvcih2YXIgeiBpbiBsKXt2YXIgRz1sW3pdO2lmKFo9blt6XSxsLmhhc093blByb3BlcnR5KHopJiYoRyE9bnVsbHx8WiE9bnVsbCkpc3dpdGNoKHope2Nhc2UidHlwZSI6RyE9PVomJihCZT0hMCksYz1HO2JyZWFrO2Nhc2UibmFtZSI6RyE9PVomJihCZT0hMCkscj1HO2JyZWFrO2Nhc2UiY2hlY2tlZCI6RyE9PVomJihCZT0hMCksTD1HO2JyZWFrO2Nhc2UiZGVmYXVsdENoZWNrZWQiOkchPT1aJiYoQmU9ITApLFY9RzticmVhaztjYXNlInZhbHVlIjpHIT09WiYmKEJlPSEwKSxoPUc7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOkchPT1aJiYoQmU9ITApLFM9RzticmVhaztjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihHIT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OkchPT1aJiZLZShlLHQseixHLGwsWil9fUlmKGUsaCxTLF8sTCxWLGMscik7cmV0dXJuO2Nhc2Uic2VsZWN0IjpHPWg9Uz16PW51bGw7Zm9yKGMgaW4gbilpZihfPW5bY10sbi5oYXNPd25Qcm9wZXJ0eShjKSYmXyE9bnVsbClzd2l0Y2goYyl7Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJtdWx0aXBsZSI6Rz1fO2RlZmF1bHQ6bC5oYXNPd25Qcm9wZXJ0eShjKXx8S2UoZSx0LGMsbnVsbCxsLF8pfWZvcihyIGluIGwpaWYoYz1sW3JdLF89bltyXSxsLmhhc093blByb3BlcnR5KHIpJiYoYyE9bnVsbHx8XyE9bnVsbCkpc3dpdGNoKHIpe2Nhc2UidmFsdWUiOmMhPT1fJiYoQmU9ITApLHo9YzticmVhaztjYXNlImRlZmF1bHRWYWx1ZSI6YyE9PV8mJihCZT0hMCksUz1jO2JyZWFrO2Nhc2UibXVsdGlwbGUiOmMhPT1fJiYoQmU9ITApLGg9YztkZWZhdWx0OmMhPT1fJiZLZShlLHQscixjLGwsXyl9dD1TLG49aCxsPUcseiE9bnVsbD92byhlLCEhbix6LCExKTohIWwhPSEhbiYmKHQhPW51bGw/dm8oZSwhIW4sdCwhMCk6dm8oZSwhIW4sbj9bXToiIiwhMSkpO3JldHVybjtjYXNlInRleHRhcmVhIjpHPXo9bnVsbDtmb3IoUyBpbiBuKWlmKHI9bltTXSxuLmhhc093blByb3BlcnR5KFMpJiZyIT1udWxsJiYhbC5oYXNPd25Qcm9wZXJ0eShTKSlzd2l0Y2goUyl7Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YnJlYWs7ZGVmYXVsdDpLZShlLHQsUyxudWxsLGwscil9Zm9yKGggaW4gbClpZihyPWxbaF0sYz1uW2hdLGwuaGFzT3duUHJvcGVydHkoaCkmJihyIT1udWxsfHxjIT1udWxsKSlzd2l0Y2goaCl7Y2FzZSJ2YWx1ZSI6ciE9PWMmJihCZT0hMCksej1yO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyIT09YyYmKEJlPSEwKSxHPXI7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYociE9bnVsbCl0aHJvdyBFcnJvcihpKDkxKSk7YnJlYWs7ZGVmYXVsdDpyIT09YyYmS2UoZSx0LGgscixsLGMpfXViKGUseixHKTtyZXR1cm47Y2FzZSJvcHRpb24iOmZvcih2YXIgb2UgaW4gbil6PW5bb2VdLG4uaGFzT3duUHJvcGVydHkob2UpJiZ6IT1udWxsJiYhbC5oYXNPd25Qcm9wZXJ0eShvZSkmJihvZT09PSJzZWxlY3RlZCI/ZS5zZWxlY3RlZD0hMTpLZShlLHQsb2UsbnVsbCxsLHopKTtmb3IoXyBpbiBsKXo9bFtfXSxHPW5bX10sbC5oYXNPd25Qcm9wZXJ0eShfKSYmeiE9PUcmJih6IT1udWxsfHxHIT1udWxsKSYmKF89PT0ic2VsZWN0ZWQiPyh6IT09RyYmKEJlPSEwKSxlLnNlbGVjdGVkPXomJnR5cGVvZiB6IT0iZnVuY3Rpb24iJiZ0eXBlb2YgeiE9InN5bWJvbCIpOktlKGUsdCxfLHosbCxHKSk7cmV0dXJuO2Nhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2UiYXJlYSI6Y2FzZSJiYXNlIjpjYXNlImJyIjpjYXNlImNvbCI6Y2FzZSJlbWJlZCI6Y2FzZSJociI6Y2FzZSJrZXlnZW4iOmNhc2UibWV0YSI6Y2FzZSJwYXJhbSI6Y2FzZSJzb3VyY2UiOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IodmFyIHZlIGluIG4pej1uW3ZlXSxuLmhhc093blByb3BlcnR5KHZlKSYmeiE9bnVsbCYmIWwuaGFzT3duUHJvcGVydHkodmUpJiZLZShlLHQsdmUsbnVsbCxsLHopO2ZvcihMIGluIGwpaWYoej1sW0xdLEc9bltMXSxsLmhhc093blByb3BlcnR5KEwpJiZ6IT09RyYmKHohPW51bGx8fEchPW51bGwpKXN3aXRjaChMKXtjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZih6IT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OktlKGUsdCxMLHosbCxHKX1yZXR1cm47ZGVmYXVsdDppZihHZih0KSl7Zm9yKHZhciBPZSBpbiBuKXo9bltPZV0sbi5oYXNPd25Qcm9wZXJ0eShPZSkmJnohPT12b2lkIDAmJiFsLmhhc093blByb3BlcnR5KE9lKSYmSW0oZSx0LE9lLHZvaWQgMCxsLHopO2ZvcihWIGluIGwpej1sW1ZdLEc9bltWXSwhbC5oYXNPd25Qcm9wZXJ0eShWKXx8ej09PUd8fHo9PT12b2lkIDAmJkc9PT12b2lkIDB8fEltKGUsdCxWLHosbCxHKTtyZXR1cm59fWZvcih2YXIgayBpbiBuKXo9bltrXSxuLmhhc093blByb3BlcnR5KGspJiZ6IT1udWxsJiYhbC5oYXNPd25Qcm9wZXJ0eShrKSYmS2UoZSx0LGssbnVsbCxsLHopO2ZvcihaIGluIGwpej1sW1pdLEc9bltaXSwhbC5oYXNPd25Qcm9wZXJ0eShaKXx8ej09PUd8fHo9PW51bGwmJkc9PW51bGx8fEtlKGUsdCxaLHosbCxHKX1mdW5jdGlvbiB5UyhlKXtzd2l0Y2goZSl7Y2FzZSJjc3MiOmNhc2Uic2NyaXB0IjpjYXNlImZvbnQiOmNhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImlucHV0IjpjYXNlImxpbmsiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEpOKCl7aWYodHlwZW9mIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGU9PSJmdW5jdGlvbiIpe2Zvcih2YXIgZT0wLHQ9MCxuPXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoInJlc291cmNlIiksbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgcj1uW2xdLGM9ci50cmFuc2ZlclNpemUsaD1yLmluaXRpYXRvclR5cGUsUz1yLmR1cmF0aW9uO2lmKGMmJlMmJnlTKGgpKXtmb3IoaD0wLFM9ci5yZXNwb25zZUVuZCxsKz0xO2w8bi5sZW5ndGg7bCsrKXt2YXIgXz1uW2xdLEw9Xy5zdGFydFRpbWU7aWYoTD5TKWJyZWFrO3ZhciBWPV8udHJhbnNmZXJTaXplLFo9Xy5pbml0aWF0b3JUeXBlO1YmJnlTKFopJiYoXz1fLnJlc3BvbnNlRW5kLGgrPVYqKF88Uz8xOihTLUwpLyhfLUwpKSl9aWYoLS1sLHQrPTgqKGMraCkvKHIuZHVyYXRpb24vMWUzKSxlKyssMTA8ZSlicmVha319aWYoMDxlKXJldHVybiB0L2UvMWU2fXJldHVybiBuYXZpZ2F0b3IuY29ubmVjdGlvbiYmKGU9bmF2aWdhdG9yLmNvbm5lY3Rpb24uZG93bmxpbmssdHlwZW9mIGU9PSJudW1iZXIiKT9lOjV9dmFyIFBtPW51bGwsR209bnVsbDtmdW5jdGlvbiBvaShlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gYlMoZSl7c3dpdGNoKGUpe2Nhc2UiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOnJldHVybiAxO2Nhc2UiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24geFMoZSx0KXtpZihlPT09MClzd2l0Y2godCl7Y2FzZSJzdmciOnJldHVybiAxO2Nhc2UibWF0aCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH1yZXR1cm4gZT09PTEmJnQ9PT0iZm9yZWlnbk9iamVjdCI/MDplfWZ1bmN0aW9uIFNTKGUsdCxuLGwpe3JldHVybiBuPW9pKG4pLmNyZWF0ZUVsZW1lbnQoZSksbltSdF09bCxuW1h0XT10LER0KG4sZSx0KSxidChuKSxufWZ1bmN0aW9uIFZtKGUsdCl7cmV0dXJuIGU9PT0idGV4dGFyZWEifHxlPT09Im5vc2NyaXB0Inx8dHlwZW9mIHQuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgdC5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0iYmlnaW50Inx8dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9PSJvYmplY3QiJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT09bnVsbCYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwhPW51bGx9dmFyIFltPW51bGw7ZnVuY3Rpb24gV04oKXt2YXIgZT13aW5kb3cuZXZlbnQ7cmV0dXJuIGUmJmUudHlwZT09PSJwb3BzdGF0ZSI/ZT09PVltPyExOihZbT1lLCEwKTooWW09bnVsbCwhMSl9dmFyIHFtPXR5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP3NldFRpbWVvdXQ6dm9pZCAwLGVEPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0OnZvaWQgMCxDUz10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlOnZvaWQgMCxUUz10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iP3JlcXVlc3RBbmltYXRpb25GcmFtZTpxbSx0RD10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PSJmdW5jdGlvbiI/cXVldWVNaWNyb3Rhc2s6dHlwZW9mIENTPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gQ1MucmVzb2x2ZShudWxsKS50aGVuKGUpLmNhdGNoKG5EKX06cW07ZnVuY3Rpb24gbkQoZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX1mdW5jdGlvbiBpYShlKXtyZXR1cm4gZT09PSJoZWFkIn1mdW5jdGlvbiB3UyhlLHQpe3ZhciBuPXQsbD0wO2Rve3ZhciByPW4ubmV4dFNpYmxpbmc7aWYoZS5yZW1vdmVDaGlsZChuKSxyJiZyLm5vZGVUeXBlPT09OClpZihuPXIuZGF0YSxuPT09Ii8kInx8bj09PSIvJiIpe2lmKGw9PT0wKXtlLnJlbW92ZUNoaWxkKHIpLGVyKHQpO3JldHVybn1sLS19ZWxzZSBpZihuPT09IiQifHxuPT09IiQ/Inx8bj09PSIkfiJ8fG49PT0iJCEifHxuPT09IiYiKWwrKztlbHNlIGlmKG49PT0iaHRtbCIpV20oZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7ZWxzZSBpZihuPT09ImhlYWQiKXtuPWUub3duZXJEb2N1bWVudC5oZWFkLFdtKG4pO2Zvcih2YXIgYz1uLmZpcnN0Q2hpbGQ7Yzspe3ZhciBoPWMubmV4dFNpYmxpbmcsUz1jLm5vZGVOYW1lO2NbVHJdfHxTPT09IlNDUklQVCJ8fFM9PT0iU1RZTEUifHxTPT09IkxJTksiJiZjLnJlbC50b0xvd2VyQ2FzZSgpPT09InN0eWxlc2hlZXQifHxuLnJlbW92ZUNoaWxkKGMpLGM9aH19ZWxzZSBuPT09ImJvZHkiJiZXbShlLm93bmVyRG9jdW1lbnQuYm9keSk7bj1yfXdoaWxlKG4pO2VyKHQpfWZ1bmN0aW9uIEVTKGUsdCl7dmFyIG49ZTtlPTA7ZG97dmFyIGw9bi5uZXh0U2libGluZztpZihuLm5vZGVUeXBlPT09MT90PyhuLl9zdGFzaGVkRGlzcGxheT1uLnN0eWxlLmRpc3BsYXksbi5zdHlsZS5kaXNwbGF5PSJub25lIik6KG4uc3R5bGUuZGlzcGxheT1uLl9zdGFzaGVkRGlzcGxheXx8IiIsbi5nZXRBdHRyaWJ1dGUoInN0eWxlIik9PT0iIiYmbi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIikpOm4ubm9kZVR5cGU9PT0zJiYodD8obi5fc3Rhc2hlZFRleHQ9bi5ub2RlVmFsdWUsbi5ub2RlVmFsdWU9IiIpOm4ubm9kZVZhbHVlPW4uX3N0YXNoZWRUZXh0fHwiIiksbCYmbC5ub2RlVHlwZT09PTgpaWYobj1sLmRhdGEsbj09PSIvJCIpe2lmKGU9PT0wKWJyZWFrO2UtLX1lbHNlIG4hPT0iJCImJm4hPT0iJD8iJiZuIT09IiR+IiYmbiE9PSIkISJ8fGUrKztuPWx9d2hpbGUobil9ZnVuY3Rpb24gUlMoZSx0LG4pe2lmKHQ9Q1NTLmVzY2FwZSh0KSE9PXQ/InItIitidG9hKHQpLnJlcGxhY2UoLz0vZywiIik6dCxlLnN0eWxlLnZpZXdUcmFuc2l0aW9uTmFtZT10LG4hPW51bGwmJihlLnN0eWxlLnZpZXdUcmFuc2l0aW9uQ2xhc3M9biksbj1nZXRDb21wdXRlZFN0eWxlKGUpLG4uZGlzcGxheT09PSJpbmxpbmUiKXtpZih0PWUuZ2V0Q2xpZW50UmVjdHMoKSx0Lmxlbmd0aD09PTEpdmFyIGw9MTtlbHNlIGZvcih2YXIgcj1sPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBjPXRbcl07MDxjLndpZHRoJiYwPGMuaGVpZ2h0JiZsKyt9bD09PTEmJihlPWUuc3R5bGUsZS5kaXNwbGF5PXQubGVuZ3RoPT09MT8iaW5saW5lLWJsb2NrIjoiYmxvY2siLGUubWFyZ2luVG9wPSItIituLnBhZGRpbmdUb3AsZS5tYXJnaW5Cb3R0b209Ii0iK24ucGFkZGluZ0JvdHRvbSl9fWZ1bmN0aW9uIF9TKGUsdCl7ZT1lLnN0eWxlLHQ9dC5zdHlsZTt2YXIgbj10IT1udWxsP3QuaGFzT3duUHJvcGVydHkoInZpZXdUcmFuc2l0aW9uTmFtZSIpP3Qudmlld1RyYW5zaXRpb25OYW1lOnQuaGFzT3duUHJvcGVydHkoInZpZXctdHJhbnNpdGlvbi1uYW1lIik/dFsidmlldy10cmFuc2l0aW9uLW5hbWUiXTpudWxsOm51bGw7ZS52aWV3VHJhbnNpdGlvbk5hbWU9bj09bnVsbHx8dHlwZW9mIG49PSJib29sZWFuIj8iIjooIiIrbikudHJpbSgpLG49dCE9bnVsbD90Lmhhc093blByb3BlcnR5KCJ2aWV3VHJhbnNpdGlvbkNsYXNzIik/dC52aWV3VHJhbnNpdGlvbkNsYXNzOnQuaGFzT3duUHJvcGVydHkoInZpZXctdHJhbnNpdGlvbi1jbGFzcyIpP3RbInZpZXctdHJhbnNpdGlvbi1jbGFzcyJdOm51bGw6bnVsbCxlLnZpZXdUcmFuc2l0aW9uQ2xhc3M9bj09bnVsbHx8dHlwZW9mIG49PSJib29sZWFuIj8iIjooIiIrbikudHJpbSgpLGUuZGlzcGxheT09PSJpbmxpbmUtYmxvY2siJiYodD09bnVsbD9lLmRpc3BsYXk9ZS5tYXJnaW49IiI6KG49dC5kaXNwbGF5LGUuZGlzcGxheT1uPT1udWxsfHx0eXBlb2Ygbj09ImJvb2xlYW4iPyIiOm4sbj10Lm1hcmdpbixuIT1udWxsP2UubWFyZ2luPW46KG49dC5oYXNPd25Qcm9wZXJ0eSgibWFyZ2luVG9wIik/dC5tYXJnaW5Ub3A6dFsibWFyZ2luLXRvcCJdLGUubWFyZ2luVG9wPW49PW51bGx8fHR5cGVvZiBuPT0iYm9vbGVhbiI/IiI6bix0PXQuaGFzT3duUHJvcGVydHkoIm1hcmdpbkJvdHRvbSIpP3QubWFyZ2luQm90dG9tOnRbIm1hcmdpbi1ib3R0b20iXSxlLm1hcmdpbkJvdHRvbT10PT1udWxsfHx0eXBlb2YgdD09ImJvb2xlYW4iPyIiOnQpKSl9ZnVuY3Rpb24gbEQoZSx0LG4pe3JldHVybiBuPW4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7cmVjdDplLGFiczp0LnBvc2l0aW9uPT09ImFic29sdXRlInx8dC5wb3NpdGlvbj09PSJmaXhlZCIsY2xpcDp0LmNsaXBQYXRoIT09Im5vbmUifHx0Lm92ZXJmbG93IT09InZpc2libGUifHx0LmZpbHRlciE9PSJub25lInx8dC5tYXNrIT09Im5vbmUifHx0Lm1hc2shPT0ibm9uZSJ8fHQuYm9yZGVyUmFkaXVzIT09IjBweCIsdmlldzowPD1lLmJvdHRvbSYmMDw9ZS5yaWdodCYmZS50b3A8PW4uaW5uZXJIZWlnaHQmJmUubGVmdDw9bi5pbm5lcldpZHRofX1mdW5jdGlvbiBYbShlKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49Z2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gbEQodCxuLGUpfWZ1bmN0aW9uIGFEKGUpe3JldHVybiBlLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gb0QoZSl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixlKX1mdW5jdGlvbiByRChlLHQsbixsLHIsYyxoLFMsXyl7dmFyIEw9dC5ub2RlVHlwZT09PTk/dDp0Lm93bmVyRG9jdW1lbnQ7dHJ5e3ZhciBWPUwuc3RhcnRWaWV3VHJhbnNpdGlvbih7dXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHo9TC5kZWZhdWx0VmlldyxHPXoubmF2aWdhdGlvbiYmei5uYXZpZ2F0aW9uLnRyYW5zaXRpb24sb2U9TC5mb250cy5zdGF0dXM7bCgpO3ZhciB2ZT1bXTtpZihvZT09PSJsb2FkZWQiJiYoYUQoTCksTC5mb250cy5zdGF0dXM9PT0ibG9hZGluZyImJnZlLnB1c2goTC5mb250cy5yZWFkeSkpLG9lPXZlLmxlbmd0aCxlIT09bnVsbClmb3IodmFyIE9lPWUuc3VzcGVuc2V5SW1hZ2VzLGs9MCxqPTA7ajxPZS5sZW5ndGg7aisrKXt2YXIgST1PZVtqXTtpZighSS5jb21wbGV0ZSl7dmFyIFE9SS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPFEuYm90dG9tJiYwPFEucmlnaHQmJlEudG9wPHouaW5uZXJIZWlnaHQmJlEubGVmdDx6LmlubmVyV2lkdGgpe2lmKGsrPVFTKEkpLGs+RXUpe3ZlLmxlbmd0aD1vZTticmVha31JPW5ldyBQcm9taXNlKG9ELmJpbmQoSSkpLHZlLnB1c2goSSl9fX1pZigwPHZlLmxlbmd0aClyZXR1cm4gej1Qcm9taXNlLnJhY2UoW1Byb21pc2UuYWxsKHZlKSxuZXcgUHJvbWlzZShmdW5jdGlvbihmZSl7cmV0dXJuIHNldFRpbWVvdXQoZmUsNTAwKX0pXSkudGhlbihyLHIpLChHP1Byb21pc2UuYWxsU2V0dGxlZChbRy5maW5pc2hlZCx6XSk6eikudGhlbihjLGMpO2lmKHIoKSxHKXJldHVybiBHLmZpbmlzaGVkLnRoZW4oYyxjKTtjKCl9LHR5cGVzOm59KTtMLl9fcmVhY3RWaWV3VHJhbnNpdGlvbj1WO3ZhciBaPVtdO3JldHVybiBWLnJlYWR5LnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHo9TC5kb2N1bWVudEVsZW1lbnQuZ2V0QW5pbWF0aW9ucyh7c3VidHJlZTohMH0pLEc9MDtHPHoubGVuZ3RoO0crKyl7dmFyIG9lPXpbR10sdmU9b2UuZWZmZWN0LE9lPXZlLnBzZXVkb0VsZW1lbnQ7aWYoT2UhPW51bGwmJk9lLnN0YXJ0c1dpdGgoIjo6dmlldy10cmFuc2l0aW9uIikpe1oucHVzaChvZSksb2U9dmUuZ2V0S2V5ZnJhbWVzKCk7Zm9yKHZhciBrPU9lPXZvaWQgMCxqPSEwLEk9MDtJPG9lLmxlbmd0aDtJKyspe3ZhciBRPW9lW0ldLGZlPVEud2lkdGg7aWYoT2U9PT12b2lkIDApT2U9ZmU7ZWxzZSBpZihPZSE9PWZlKXtqPSExO2JyZWFrfWlmKGZlPVEuaGVpZ2h0LGs9PT12b2lkIDApaz1mZTtlbHNlIGlmKGshPT1mZSl7aj0hMTticmVha31kZWxldGUgUS53aWR0aCxkZWxldGUgUS5oZWlnaHQsUS50cmFuc2Zvcm09PT0ibm9uZSImJmRlbGV0ZSBRLnRyYW5zZm9ybX1qJiZPZSE9PXZvaWQgMCYmayE9PXZvaWQgMCYmKHZlLnNldEtleWZyYW1lcyhvZSksaj1nZXRDb21wdXRlZFN0eWxlKHZlLnRhcmdldCx2ZS5wc2V1ZG9FbGVtZW50KSxqLndpZHRoIT09T2V8fGouaGVpZ2h0IT09aykmJihqPW9lWzBdLGoud2lkdGg9T2Usai5oZWlnaHQ9ayxqPW9lW29lLmxlbmd0aC0xXSxqLndpZHRoPU9lLGouaGVpZ2h0PWssdmUuc2V0S2V5ZnJhbWVzKG9lKSl9fWgoKX0sZnVuY3Rpb24oeil7TC5fX3JlYWN0Vmlld1RyYW5zaXRpb249PT1WJiYoTC5fX3JlYWN0Vmlld1RyYW5zaXRpb249bnVsbCk7dHJ5e3R5cGVvZiB6PT0ib2JqZWN0IiYmeiE9PW51bGwmJnoubmFtZT09PSJJbnZhbGlkU3RhdGVFcnJvciImJih6Lm1lc3NhZ2U9PT0iVmlldyB0cmFuc2l0aW9uIHdhcyBza2lwcGVkIGJlY2F1c2UgZG9jdW1lbnQgdmlzaWJpbGl0eSBzdGF0ZSBpcyBoaWRkZW4uInx8ei5tZXNzYWdlPT09IlNraXBwaW5nIHZpZXcgdHJhbnNpdGlvbiBiZWNhdXNlIGRvY3VtZW50IHZpc2liaWxpdHkgc3RhdGUgaGFzIGJlY29tZSBoaWRkZW4uInx8ei5tZXNzYWdlPT09IlNraXBwaW5nIHZpZXcgdHJhbnNpdGlvbiBiZWNhdXNlIHZpZXdwb3J0IHNpemUgY2hhbmdlZC4ifHx6Lm1lc3NhZ2U9PT0iVHJhbnNpdGlvbiB3YXMgYWJvcnRlZCBiZWNhdXNlIG9mIGludmFsaWQgc3RhdGUiKSYmKHo9bnVsbCkseiE9PW51bGwmJl8oeil9ZmluYWxseXtsKCkscigpLGgoKX19KSxWLmZpbmlzaGVkLmZpbmFsbHkoZnVuY3Rpb24oKXtmb3IodmFyIHo9MDt6PFoubGVuZ3RoO3orKylaW3pdLmNhbmNlbCgpO0wuX19yZWFjdFZpZXdUcmFuc2l0aW9uPT09ViYmKEwuX19yZWFjdFZpZXdUcmFuc2l0aW9uPW51bGwpLFMoKX0pLFZ9Y2F0Y2h7cmV0dXJuIGwoKSxyKCksaCgpLG51bGx9fWZ1bmN0aW9uIFhhKGUsdCl7dGhpcy5fc2NvcGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuX3NlbGVjdG9yPSI6OnZpZXctdHJhbnNpdGlvbi0iK2UrIigiK3QrIikifVhhLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PSJudW1iZXIiP3tkdXJhdGlvbjp0fTpVKHt9LHQpLHQucHNldWRvRWxlbWVudD10aGlzLl9zZWxlY3Rvcix0aGlzLl9zY29wZS5hbmltYXRlKGUsdCl9LFhhLnByb3RvdHlwZS5nZXRBbmltYXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX3Njb3BlLHQ9dGhpcy5fc2VsZWN0b3Isbj1lLmdldEFuaW1hdGlvbnMoe3N1YnRyZWU6ITB9KSxsPVtdLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGM9bltyXS5lZmZlY3Q7YyE9PW51bGwmJmMudGFyZ2V0PT09ZSYmYy5wc2V1ZG9FbGVtZW50PT09dCYmbC5wdXNoKG5bcl0pfXJldHVybiBsfSxYYS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbigpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX3Njb3BlLHRoaXMuX3NlbGVjdG9yKX07ZnVuY3Rpb24gT1MoZSl7cmV0dXJue25hbWU6ZSxncm91cDpuZXcgWGEoImdyb3VwIixlKSxpbWFnZVBhaXI6bmV3IFhhKCJpbWFnZS1wYWlyIixlKSxvbGQ6bmV3IFhhKCJvbGQiLGUpLG5ldzpuZXcgWGEoIm5ldyIsZSl9fWZ1bmN0aW9uIGZuKGUpe3RoaXMuX2ZyYWdtZW50RmliZXI9ZSx0aGlzLl9vYnNlcnZlcnM9dGhpcy5fZXZlbnRMaXN0ZW5lcnM9bnVsbH1mbi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbil7dmFyIGw9bnVsbCxyPW51bGw7aWYoIShuIT1udWxsJiZ0eXBlb2YgbiE9ImJvb2xlYW4iJiYobD1uLnNpZ25hbHx8bnVsbCxsIT09bnVsbCYmbC5hYm9ydGVkKSkpe3RoaXMuX2V2ZW50TGlzdGVuZXJzPT09bnVsbCYmKHRoaXMuX2V2ZW50TGlzdGVuZXJzPVtdKTt2YXIgYz10aGlzLl9ldmVudExpc3RlbmVycztpZihOUyhjLGUsdCxuKT09PS0xKXt2YXIgaD10aGlzLFM9dDtuIT1udWxsJiZ0eXBlb2YgbiE9ImJvb2xlYW4iJiZuLm9uY2U9PT0hMCYmKFM9ZnVuY3Rpb24oXyl7aC5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCxuKSx0eXBlb2YgdD09ImZ1bmN0aW9uIj90LmNhbGwodGhpcyxfKTp0LmhhbmRsZUV2ZW50KF8pfSksbCE9PW51bGwmJihyPWgucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGgsZSx0LG4pLGwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIse29uY2U6ITB9KSxyPWwucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGwsImFib3J0IixyKSksbD1RbyhuKSxjLnB1c2goe3R5cGU6ZSxsaXN0ZW5lcjp0LG9wdGlvbnNPclVzZUNhcHR1cmU6bixhdHRhY2hlZExpc3RlbmVyOlMsY2xlYW51cDpyfSksZyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLGlELGUsUyxsKX10aGlzLl9ldmVudExpc3RlbmVycz1jfX07ZnVuY3Rpb24gaUQoZSx0LG4sbCl7cmV0dXJuIFQoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LG4sbCksITF9Zm4ucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPXRoaXMuX2V2ZW50TGlzdGVuZXJzO2lmKGwhPT1udWxsJiYodD1OUyhsLGUsdCxuKSx0IT09LTEpKXt2YXIgcj1sW3RdO249ci5hdHRhY2hlZExpc3RlbmVyO3ZhciBjPXIuY2xlYW51cDtyPVFvKHIub3B0aW9uc09yVXNlQ2FwdHVyZSksZyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLGNELGUsbixyKSxsLnNwbGljZSh0LDEpLGMhPT1udWxsJiZjKCl9fTtmdW5jdGlvbiBjRChlLHQsbixsKXtyZXR1cm4gVChlKS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixsKSwhMX1mdW5jdGlvbiBRbyhlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGUhPSJib29sZWFuIiYmKGUub25jZT09PSEwfHxlLnNpZ25hbCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmV9OmV9ZnVuY3Rpb24gQVMoZSl7cmV0dXJuIGU9PW51bGw/ImM9MCI6dHlwZW9mIGU9PSJib29sZWFuIj8iYz0iKyhlPyIxIjoiMCIpOiJjPSIrKGUuY2FwdHVyZT8iMSI6IjAiKX1mdW5jdGlvbiBOUyhlLHQsbixsKXtpZihlLmxlbmd0aD09PTApcmV0dXJuLTE7bD1BUyhsKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGM9ZVtyXTtpZihjLnR5cGU9PT10JiZjLmxpc3RlbmVyPT09biYmQVMoYy5vcHRpb25zT3JVc2VDYXB0dXJlKT09PWwpcmV0dXJuIHJ9cmV0dXJuLTF9Zm4ucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9Qyh0aGlzLl9mcmFnbWVudEZpYmVyKTtpZih0PT09bnVsbClyZXR1cm4hMDt0PVQodCk7dmFyIG49dGhpcy5fZXZlbnRMaXN0ZW5lcnM7aWYobiE9PW51bGwmJjA8bi5sZW5ndGh8fCFlLmJ1YmJsZXMpe3ZhciBsPXQubm9kZVR5cGU9PT05P3QuY3JlYXRlQ29tbWVudCgiIik6ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBjPW5bcl07bC5hZGRFdmVudExpc3RlbmVyKGMudHlwZSxjLmF0dGFjaGVkTGlzdGVuZXIsUW8oYy5vcHRpb25zT3JVc2VDYXB0dXJlKSl9aWYodC5hcHBlbmRDaGlsZChsKSxlPWwuZGlzcGF0Y2hFdmVudChlKSxuKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspYz1uW3JdLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLnR5cGUsYy5hdHRhY2hlZExpc3RlbmVyLFFvKGMub3B0aW9uc09yVXNlQ2FwdHVyZSkpO3JldHVybiB0LnJlbW92ZUNoaWxkKGwpLGV9cmV0dXJuIHQuZGlzcGF0Y2hFdmVudChlKX0sZm4ucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKGUpe2codGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMCxEUyxlLHZvaWQgMCx2b2lkIDApfTtmdW5jdGlvbiBEUyhlLHQpe3JldHVybiBlLnRhZz09PTY/ITE6KGU9VChlKSx4RChlLHQpKX1mbi5wcm90b3R5cGUuZm9jdXNMYXN0PWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2codGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMCxLbSx0LHZvaWQgMCx2b2lkIDApO2Zvcih2YXIgbj10Lmxlbmd0aC0xOzA8PW4mJiFEUyh0W25dLGUpO24tLSk7fTtmdW5jdGlvbiBLbShlLHQpe3JldHVybiB0LnB1c2goZSksITF9Zm4ucHJvdG90eXBlLmJsdXI9ZnVuY3Rpb24oKXt2YXIgZT1DKHRoaXMuX2ZyYWdtZW50RmliZXIpO2UhPT1udWxsJiYoZT1UKGUpLGU9b2koZSkuYWN0aXZlRWxlbWVudCxlIT09bnVsbCYmZyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLHVELGUsdm9pZCAwLHZvaWQgMCkpfTtmdW5jdGlvbiB1RChlLHQpe3JldHVybiBlLnRhZz09PTY/ITE6KGU9VChlKSxlPT09dHx8ZS5jb250YWlucyh0KT8odC5ibHVyKCksITApOiExKX1mbi5wcm90b3R5cGUub2JzZXJ2ZVVzaW5nPWZ1bmN0aW9uKGUpe3RoaXMuX29ic2VydmVycz09PW51bGwmJih0aGlzLl9vYnNlcnZlcnM9bmV3IFNldCksdGhpcy5fb2JzZXJ2ZXJzLmFkZChlKSxnKHRoaXMuX2ZyYWdtZW50RmliZXIuY2hpbGQsITEsc0QsZSx2b2lkIDAsdm9pZCAwKX07ZnVuY3Rpb24gc0QoZSx0KXtyZXR1cm4gZS50YWc9PT02fHwoZT1UKGUpLHQub2JzZXJ2ZShlKSksITF9Zm4ucHJvdG90eXBlLnVub2JzZXJ2ZVVzaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29ic2VydmVycztpZih0IT09bnVsbCYmdC5oYXMoZSkpe3QuZGVsZXRlKGUpLGcodGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMSxmRCxlLHZvaWQgMCx2b2lkIDApO2Zvcih2YXIgbj10PTA7bjx6bi5sZW5ndGg7bisrKXt2YXIgbD16bltuXTtsLmZyYWdtZW50SW5zdGFuY2U9PT10aGlzJiZsLm9ic2VydmVyPT09ZT9lLnVub2JzZXJ2ZShsLmluc3RhbmNlKTp6blt0KytdPWx9em4ubGVuZ3RoPXR9fTtmdW5jdGlvbiBmRChlLHQpe3JldHVybiBlLnRhZz09PTZ8fChlPVQoZSksdC51bm9ic2VydmUoZSkpLCExfXZhciB6bj1bXSxRbT0hMTtmdW5jdGlvbiBkRChlLHQsbil7em4ucHVzaCh7ZnJhZ21lbnRJbnN0YW5jZTplLG9ic2VydmVyOnQsaW5zdGFuY2U6bn0pLFFtfHwoUW09ITAsU0QoZnVuY3Rpb24oKXtRbT0hMTt2YXIgbD16bjt6bj1bXTtmb3IodmFyIHI9MDtyPGwubGVuZ3RoO3IrKyl7dmFyIGM9bFtyXTtjLm9ic2VydmVyLnVub2JzZXJ2ZShjLmluc3RhbmNlKX19KSl9Zm4ucHJvdG90eXBlLmdldENsaWVudFJlY3RzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGcodGhpcy5fZnJhZ21lbnRGaWJlci5jaGlsZCwhMSxtRCxlLHZvaWQgMCx2b2lkIDApLGV9O2Z1bmN0aW9uIG1EKGUsdCl7aWYoZS50YWc9PT02KXtlPWUuc3RhdGVOb2RlO3ZhciBuPWUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO24uc2VsZWN0Tm9kZUNvbnRlbnRzKGUpLHQucHVzaC5hcHBseSh0LG4uZ2V0Q2xpZW50UmVjdHMoKSl9ZWxzZSBlPVQoZSksdC5wdXNoLmFwcGx5KHQsZS5nZXRDbGllbnRSZWN0cygpKTtyZXR1cm4hMX1mbi5wcm90b3R5cGUuZ2V0Um9vdE5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9Qyh0aGlzLl9mcmFnbWVudEZpYmVyKTtyZXR1cm4gdD09PW51bGw/dGhpczpUKHQpLmdldFJvb3ROb2RlKGUpfSxmbi5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9Qyh0aGlzLl9mcmFnbWVudEZpYmVyKTtpZih0PT09bnVsbClyZXR1cm4gTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQ7dmFyIG49W107Zyh0aGlzLl9mcmFnbWVudEZpYmVyLmNoaWxkLCExLEttLG4sdm9pZCAwLHZvaWQgMCk7dmFyIGw9VCh0KTtpZihuLmxlbmd0aD09PTApe2lmKG49bCx3KHRoaXMuX2ZyYWdtZW50RmliZXIpKXtlOntmb3IodD10aGlzLl9mcmFnbWVudEZpYmVyLnJldHVybjt0IT09bnVsbDspe2lmKHQudGFnPT09NCl7dD10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2JyZWFrIGV9aWYodC50YWc9PT0zfHx0LnRhZz09PTV8fHQudGFnPT09MjcpYnJlYWs7dD10LnJldHVybn10PW51bGx9dCE9bnVsbCYmKG49dCl9dD10aGlzLl9mcmFnbWVudEZpYmVyO3ZhciByPWw9bi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKTtyZXR1cm4gbj09PWU/cj1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TOmwmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkmJihuPVIodClbMV0sbj09PW51bGw/cj1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORzooZT1UKG4pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpLHI9ZT09PTB8fGUmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc6Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcpKSxyfD1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDfXQ9VChuWzBdKSxyPVQobltuLmxlbmd0aC0xXSk7dmFyIGM9dyh0aGlzLl9mcmFnbWVudEZpYmVyKT90LnBhcmVudEVsZW1lbnQ6bDtpZihjPT1udWxsKXJldHVybiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRDtsPWMuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlksYz1jLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZO3ZhciBoPXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSksUz1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpLF89aCZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWXx8UyZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWTtyZXR1cm4gUz1sJiZjJiZoJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HJiZTJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HLHQ9bCYmdD09PWV8fGMmJnI9PT1lfHxffHxTP05vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZOiFsJiZ0PT09ZXx8IWMmJnI9PT1lP05vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUM6aCx0Jk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEfHx0Jk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUN8fGhEKHQsdGhpcy5fZnJhZ21lbnRGaWJlcixuWzBdLG5bbi5sZW5ndGgtMV0sZSk/dDpOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDfTtmdW5jdGlvbiBoRChlLHQsbixsLHIpe3ZhciBjPUVhKHIpO2lmKGUmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpe2lmKG49ISFjKWU6e2Zvcig7YyE9PW51bGw7KXtpZihjLnRhZz09PTcmJihjPT09dHx8Yy5hbHRlcm5hdGU9PT10KSl7bj0hMDticmVhayBlfWM9Yy5yZXR1cm59bj0hMX1yZXR1cm4gbn1pZihlJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpe2lmKGM9PT1udWxsKXJldHVybiBjPXIub3duZXJEb2N1bWVudCxyPT09Y3x8cj09PWMuZG9jdW1lbnRFbGVtZW50fHxyPT09Yy5ib2R5O2U6e2ZvcihjPXQsdD1DKHQpO2MhPT1udWxsOyl7aWYoIShjLnRhZyE9PTUmJmMudGFnIT09MyYmYy50YWchPT0yN3x8YyE9PXQmJmMuYWx0ZXJuYXRlIT09dCkpe2M9ITA7YnJlYWsgZX1jPWMucmV0dXJufWM9ITF9cmV0dXJuIGN9cmV0dXJuIGUmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkc/KCh0PSEhYykmJiEodD1jPT09bikmJih0PUgobixjLFkpLHQ9PT1udWxsP3Q9ITE6KGcodCwhMCxOLGMsbiksYz1PLE89bnVsbCx0PWMhPT1udWxsKSksdCk6ZSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8oKHQ9ISFjKSYmISh0PWM9PT1sKSYmKHQ9SChsLGMsWSksdD09PW51bGw/dD0hMTooZyh0LCEwLE0sYyxsKSxjPU8sQT1PPW51bGwsdD1jIT09bnVsbCkpLHQpOiExfWZ1bmN0aW9uIGpTKGUsdCl7dmFyIG49ZS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bi5zZWxlY3ROb2RlQ29udGVudHMoZSksZT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHdpbmRvdy5zY3JvbGxUbyh3aW5kb3cuc2Nyb2xsWCtlLmxlZnQsdD93aW5kb3cuc2Nyb2xsWStlLnRvcDp3aW5kb3cuc2Nyb2xsWStlLmJvdHRvbS13aW5kb3cuaW5uZXJIZWlnaHQpfWZuLnByb3RvdHlwZS5zY3JvbGxJbnRvVmlldz1mdW5jdGlvbihlKXtpZih0eXBlb2YgZT09Im9iamVjdCIpdGhyb3cgRXJyb3IoaSg1NjYpKTt2YXIgdD1bXTtnKHRoaXMuX2ZyYWdtZW50RmliZXIuY2hpbGQsITEsS20sdCx2b2lkIDAsdm9pZCAwKTt2YXIgbj1lIT09ITE7aWYodC5sZW5ndGg9PT0wKXt2YXIgbD1SKHRoaXMuX2ZyYWdtZW50RmliZXIpO2lmKGw9bj9sWzFdfHxsWzBdfHxDKHRoaXMuX2ZyYWdtZW50RmliZXIpOmxbMF18fGxbMV0sbD09PW51bGwpcmV0dXJuO2lmKGwudGFnPT09Nil7ZT1UKGwpLGpTKGUsbik7cmV0dXJufWlmKGw9VChsKSxsLm5vZGVUeXBlIT09OSl7aWYobC5ub2RlVHlwZT09PTExKXtuPSJob3N0ImluIGw/bC5ob3N0Om51bGwsbiE9PW51bGwmJm4uc2Nyb2xsSW50b1ZpZXcoZSk7cmV0dXJufWwuc2Nyb2xsSW50b1ZpZXcoZSl9fWZvcihsPW4/dC5sZW5ndGgtMTowO2whPT0obj8tMTp0Lmxlbmd0aCk7KXt2YXIgcj10W2xdO3IudGFnPT09Nj8ocj1UKHIpLGpTKHIsbikpOlQocikuc2Nyb2xsSW50b1ZpZXcoZSksbCs9bj8tMToxfX07ZnVuY3Rpb24gcEQoZSx0KXtyZXR1cm4gZT1UKGUpLE1TKGUsdCksITF9ZnVuY3Rpb24gTVMoZSx0KXtlLnJlYWN0RnJhZ21lbnRzPT1udWxsJiYoZS5yZWFjdEZyYWdtZW50cz1uZXcgU2V0KSxlLnJlYWN0RnJhZ21lbnRzLmFkZCh0KX1mdW5jdGlvbiB6UyhlLHQpe3ZhciBuPXQuX2V2ZW50TGlzdGVuZXJzO2lmKG4hPT1udWxsKWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgcj1uW2xdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5hdHRhY2hlZExpc3RlbmVyLFFvKHIub3B0aW9uc09yVXNlQ2FwdHVyZSkpfWUubm9kZVR5cGUhPT0zJiYobj10Ll9vYnNlcnZlcnMsbiE9PW51bGwmJm4uZm9yRWFjaChmdW5jdGlvbihjKXtmb3IodmFyIGg9MCxTPTA7Uzx6bi5sZW5ndGg7UysrKXt2YXIgXz16bltTXTsoXy5mcmFnbWVudEluc3RhbmNlIT09dHx8Xy5vYnNlcnZlciE9PWN8fF8uaW5zdGFuY2UhPT1lKSYmKHpuW2grK109Xyl9em4ubGVuZ3RoPWgsYy5vYnNlcnZlKGUpfSksTVMoZSx0KSl9ZnVuY3Rpb24gdkQoZSx0KXt2YXIgbj10Ll9ldmVudExpc3RlbmVycztpZihuIT09bnVsbClmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIHI9bltsXTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoci50eXBlLHIuYXR0YWNoZWRMaXN0ZW5lcixRbyhyLm9wdGlvbnNPclVzZUNhcHR1cmUpKX1lLm5vZGVUeXBlIT09MyYmKG49dC5fb2JzZXJ2ZXJzLG4hPT1udWxsJiZuLmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucm9vdE1hcmdpbj09InN0cmluZyI/ZEQodCxjLGUpOmMudW5vYnNlcnZlKGUpfSksZS5yZWFjdEZyYWdtZW50cyE9bnVsbCYmZS5yZWFjdEZyYWdtZW50cy5kZWxldGUodCkpfWZ1bmN0aW9uIFptKGUpe3ZhciB0PWUuZmlyc3RDaGlsZDtmb3IodCYmdC5ub2RlVHlwZT09PTEwJiYodD10Lm5leHRTaWJsaW5nKTt0Oyl7dmFyIG49dDtzd2l0Y2godD10Lm5leHRTaWJsaW5nLG4ubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJIRUFEIjpjYXNlIkJPRFkiOlptKG4pLG1jKG4pO2NvbnRpbnVlO2Nhc2UiU0NSSVBUIjpjYXNlIlNUWUxFIjpjb250aW51ZTtjYXNlIkxJTksiOmlmKG4ucmVsLnRvTG93ZXJDYXNlKCk9PT0ic3R5bGVzaGVldCIpY29udGludWV9ZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gZ0QoZSx0LG4sbCl7Zm9yKDtlLm5vZGVUeXBlPT09MTspe3ZhciByPW47aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKXtpZighbCYmKGUubm9kZU5hbWUhPT0iSU5QVVQifHxlLnR5cGUhPT0iaGlkZGVuIikpYnJlYWt9ZWxzZSBpZihsKXtpZighZVtUcl0pc3dpdGNoKHQpe2Nhc2UibWV0YSI6aWYoIWUuaGFzQXR0cmlidXRlKCJpdGVtcHJvcCIpKWJyZWFrO3JldHVybiBlO2Nhc2UibGluayI6aWYoYz1lLmdldEF0dHJpYnV0ZSgicmVsIiksYz09PSJzdHlsZXNoZWV0IiYmZS5oYXNBdHRyaWJ1dGUoImRhdGEtcHJlY2VkZW5jZSIpKWJyZWFrO2lmKGMhPT1yLnJlbHx8ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PShyLmhyZWY9PW51bGx8fHIuaHJlZj09PSIiP251bGw6ci5ocmVmKXx8ZS5nZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIikhPT0oci5jcm9zc09yaWdpbj09bnVsbD9udWxsOnIuY3Jvc3NPcmlnaW4pfHxlLmdldEF0dHJpYnV0ZSgidGl0bGUiKSE9PShyLnRpdGxlPT1udWxsP251bGw6ci50aXRsZSkpYnJlYWs7cmV0dXJuIGU7Y2FzZSJzdHlsZSI6aWYoZS5oYXNBdHRyaWJ1dGUoImRhdGEtcHJlY2VkZW5jZSIpKWJyZWFrO3JldHVybiBlO2Nhc2Uic2NyaXB0IjppZihjPWUuZ2V0QXR0cmlidXRlKCJzcmMiKSwoYyE9PShyLnNyYz09bnVsbD9udWxsOnIuc3JjKXx8ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSE9PShyLnR5cGU9PW51bGw/bnVsbDpyLnR5cGUpfHxlLmdldEF0dHJpYnV0ZSgiY3Jvc3NvcmlnaW4iKSE9PShyLmNyb3NzT3JpZ2luPT1udWxsP251bGw6ci5jcm9zc09yaWdpbikpJiZjJiZlLmhhc0F0dHJpYnV0ZSgiYXN5bmMiKSYmIWUuaGFzQXR0cmlidXRlKCJpdGVtcHJvcCIpKWJyZWFrO3JldHVybiBlO2RlZmF1bHQ6cmV0dXJuIGV9fWVsc2UgaWYodD09PSJpbnB1dCImJmUudHlwZT09PSJoaWRkZW4iKXt2YXIgYz1yLm5hbWU9PW51bGw/bnVsbDoiIityLm5hbWU7aWYoci50eXBlPT09ImhpZGRlbiImJmUuZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1jKXJldHVybiBlfWVsc2UgcmV0dXJuIGU7aWYoZT1UbihlLm5leHRTaWJsaW5nKSxlPT09bnVsbClicmVha31yZXR1cm4gbnVsbH1mdW5jdGlvbiB5RChlLHQsbil7aWYodD09PSIiKXJldHVybiBudWxsO2Zvcig7ZS5ub2RlVHlwZSE9PTM7KWlmKChlLm5vZGVUeXBlIT09MXx8ZS5ub2RlTmFtZSE9PSJJTlBVVCJ8fGUudHlwZSE9PSJoaWRkZW4iKSYmIW58fChlPVRuKGUubmV4dFNpYmxpbmcpLGU9PT1udWxsKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX1mdW5jdGlvbiBrUyhlLHQpe2Zvcig7ZS5ub2RlVHlwZSE9PTg7KWlmKChlLm5vZGVUeXBlIT09MXx8ZS5ub2RlTmFtZSE9PSJJTlBVVCJ8fGUudHlwZSE9PSJoaWRkZW4iKSYmIXR8fChlPVRuKGUubmV4dFNpYmxpbmcpLGU9PT1udWxsKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX1mdW5jdGlvbiBGbShlKXtyZXR1cm4gZS5kYXRhPT09IiQ/Inx8ZS5kYXRhPT09IiR+In1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZS5kYXRhPT09IiQhInx8ZS5kYXRhPT09IiQ/IiYmZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGUhPT0ibG9hZGluZyJ9ZnVuY3Rpb24gYkQoZSx0KXt2YXIgbj1lLm93bmVyRG9jdW1lbnQ7aWYoZS5kYXRhPT09IiR+IillLl9yZWFjdFJldHJ5PXQ7ZWxzZSBpZihlLmRhdGEhPT0iJD8ifHxuLnJlYWR5U3RhdGUhPT0ibG9hZGluZyIpdCgpO2Vsc2V7dmFyIGw9ZnVuY3Rpb24oKXt0KCksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixsKX07bi5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixsKSxlLl9yZWFjdFJldHJ5PWx9fWZ1bmN0aW9uIFRuKGUpe2Zvcig7ZSE9bnVsbDtlPWUubmV4dFNpYmxpbmcpe3ZhciB0PWUubm9kZVR5cGU7aWYodD09PTF8fHQ9PT0zKWJyZWFrO2lmKHQ9PT04KXtpZih0PWUuZGF0YSx0PT09IiQifHx0PT09IiQhInx8dD09PSIkPyJ8fHQ9PT0iJH4ifHx0PT09IiYifHx0PT09IkYhInx8dD09PSJGIilicmVhaztpZih0PT09Ii8kInx8dD09PSIvJiIpcmV0dXJuIG51bGx9fXJldHVybiBlfXZhciBKbT1udWxsO2Z1bmN0aW9uIExTKGUpe2U9ZS5uZXh0U2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciBuPWUuZGF0YTtpZihuPT09Ii8kInx8bj09PSIvJiIpe2lmKHQ9PT0wKXJldHVybiBUbihlLm5leHRTaWJsaW5nKTt0LS19ZWxzZSBuIT09IiQiJiZuIT09IiQhIiYmbiE9PSIkPyImJm4hPT0iJH4iJiZuIT09IiYifHx0Kyt9ZT1lLm5leHRTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIFVTKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIkInx8bj09PSIkISJ8fG49PT0iJD8ifHxuPT09IiR+Inx8bj09PSImIil7aWYodD09PTApcmV0dXJuIGU7dC0tfWVsc2UgbiE9PSIvJCImJm4hPT0iLyYifHx0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiB4RChlLHQpe2Z1bmN0aW9uIG4oKXtsPSEwfWlmKGUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZSlyZXR1cm4hMDt2YXIgbD0hMTt0cnl7ZS5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixuLCEwKSwoZS5mb2N1c3x8SFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzKS5jYWxsKGUsdCl9ZmluYWxseXtlLm93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLG4sITApfXJldHVybiBsfWZ1bmN0aW9uIFNEKGUpe1RTKGZ1bmN0aW9uKCl7VFMoZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9KX0pfWZ1bmN0aW9uIEhTKGUsdCxuKXtzd2l0Y2godD1vaShuKSxlKXtjYXNlImh0bWwiOmlmKGU9dC5kb2N1bWVudEVsZW1lbnQsIWUpdGhyb3cgRXJyb3IoaSg0NTIpKTtyZXR1cm4gZTtjYXNlImhlYWQiOmlmKGU9dC5oZWFkLCFlKXRocm93IEVycm9yKGkoNDUzKSk7cmV0dXJuIGU7Y2FzZSJib2R5IjppZihlPXQuYm9keSwhZSl0aHJvdyBFcnJvcihpKDQ1NCkpO3JldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NTEpKX19ZnVuY3Rpb24gQlMoZSx0LG4pe2Zvcih2YXIgbCBpbiBuKXt2YXIgcj1uW2xdO24uaGFzT3duUHJvcGVydHkobCkmJnIhPW51bGwmJktlKGUsdCxsLG51bGwsRk4scil9bi5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCYmKGUudGV4dENvbnRlbnQ9IiIpLGUub25jbGljaz09PUduJiYoZS5vbmNsaWNrPW51bGwpLG1jKGUpfWZ1bmN0aW9uIFdtKGUpe2Zvcih2YXIgdD1lLmF0dHJpYnV0ZXM7dC5sZW5ndGg7KWUucmVtb3ZlQXR0cmlidXRlTm9kZSh0WzBdKTttYyhlKX12YXIgd249bmV3IE1hcCxJUz1uZXcgU2V0O2Z1bmN0aW9uIHJpKGUpe2lmKHR5cGVvZiBlLmdldFJvb3ROb2RlPT0iZnVuY3Rpb24iKXt2YXIgdD1lLmdldFJvb3ROb2RlKCk7aWYodC5ub2RlVHlwZT09PTl8fHQubm9kZVR5cGU9PT0xMSlyZXR1cm4gdH1yZXR1cm4gZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnR9dmFyIF9sPWllLmQ7aWUuZD17ZjpDRCxyOlRELEQ6d0QsQzpFRCxMOlJELG06X0QsWDpBRCxTOk9ELE06TkR9O2Z1bmN0aW9uIENEKCl7dmFyIGU9X2wuZigpLHQ9dnUoKTtyZXR1cm4gZXx8dH1mdW5jdGlvbiBURChlKXt2YXIgdD1tbyhlKTt0IT09bnVsbCYmdC50YWc9PT01JiZ0LnR5cGU9PT0iZm9ybSI/RzAodCk6X2wucihlKX12YXIgWm89dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50O2Z1bmN0aW9uIFBTKGUsdCxuKXt2YXIgbD1abztpZihsJiZ0eXBlb2YgdD09InN0cmluZyImJnQpe3ZhciByPXZuKHQpO3I9J2xpbmtbcmVsPSInK2UrJyJdW2hyZWY9IicrcisnIl0nLHR5cGVvZiBuPT0ic3RyaW5nIiYmKHIrPSdbY3Jvc3NvcmlnaW49IicrbisnIl0nKSxJUy5oYXMocil8fChJUy5hZGQociksZT17cmVsOmUsY3Jvc3NPcmlnaW46bixocmVmOnR9LGwucXVlcnlTZWxlY3RvcihyKT09PW51bGwmJih0PWwuY3JlYXRlRWxlbWVudCgibGluayIpLER0KHQsImxpbmsiLGUpLGJ0KHQpLGwuaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX1mdW5jdGlvbiB3RChlKXtfbC5EKGUpLFBTKCJkbnMtcHJlZmV0Y2giLGUsbnVsbCl9ZnVuY3Rpb24gRUQoZSx0KXtfbC5DKGUsdCksUFMoInByZWNvbm5lY3QiLGUsdCl9ZnVuY3Rpb24gUkQoZSx0LG4pe19sLkwoZSx0LG4pO3ZhciBsPVpvO2lmKGwmJmUmJnQpe3ZhciByPSdsaW5rW3JlbD0icHJlbG9hZCJdW2FzPSInK3ZuKHQpKyciXSc7dD09PSJpbWFnZSImJm4mJm4uaW1hZ2VTcmNTZXQ/KHIrPSdbaW1hZ2VzcmNzZXQ9Iicrdm4obi5pbWFnZVNyY1NldCkrJyJdJyx0eXBlb2Ygbi5pbWFnZVNpemVzPT0ic3RyaW5nIiYmKHIrPSdbaW1hZ2VzaXplcz0iJyt2bihuLmltYWdlU2l6ZXMpKyciXScpKTpyKz0nW2hyZWY9Iicrdm4oZSkrJyJdJzt2YXIgYz1yO3N3aXRjaCh0KXtjYXNlInN0eWxlIjpjPUZvKGUpO2JyZWFrO2Nhc2Uic2NyaXB0IjpjPSRvKGUpfWlmKCEod24uaGFzKGMpfHwoZT1VKHtyZWw6InByZWxvYWQiLGhyZWY6dD09PSJpbWFnZSImJm4mJm4uaW1hZ2VTcmNTZXQ/dm9pZCAwOmUsYXM6dH0sbiksd24uc2V0KGMsZSksbC5xdWVyeVNlbGVjdG9yKHIpIT09bnVsbHx8dD09PSJzdHlsZSImJmwucXVlcnlTZWxlY3RvcihpaShjKSl8fHQ9PT0ic2NyaXB0IiYmbC5xdWVyeVNlbGVjdG9yKGNpKGMpKSkpKXt2YXIgaD1sLmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtEdChoLCJsaW5rIixlKSx0PT09InN0eWxlIiYmKGhbZGNdPSEwLGgub25sb2FkPWgub25lcnJvcj1mdW5jdGlvbigpe2ViKGgpfSksYnQoaCksbC5oZWFkLmFwcGVuZENoaWxkKGgpfX19ZnVuY3Rpb24gX0QoZSx0KXtfbC5tKGUsdCk7dmFyIG49Wm87aWYobiYmZSl7dmFyIGw9dCYmdHlwZW9mIHQuYXM9PSJzdHJpbmciP3QuYXM6InNjcmlwdCIscj0nbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXVthcz0iJyt2bihsKSsnIl1baHJlZj0iJyt2bihlKSsnIl0nLGM9cjtzd2l0Y2gobCl7Y2FzZSJhdWRpb3dvcmtsZXQiOmNhc2UicGFpbnR3b3JrbGV0IjpjYXNlInNlcnZpY2V3b3JrZXIiOmNhc2Uic2hhcmVkd29ya2VyIjpjYXNlIndvcmtlciI6Y2FzZSJzY3JpcHQiOmM9JG8oZSl9aWYoIXduLmhhcyhjKSYmKGU9VSh7cmVsOiJtb2R1bGVwcmVsb2FkIixocmVmOmV9LHQpLHduLnNldChjLGUpLG4ucXVlcnlTZWxlY3RvcihyKT09PW51bGwpKXtzd2l0Y2gobCl7Y2FzZSJhdWRpb3dvcmtsZXQiOmNhc2UicGFpbnR3b3JrbGV0IjpjYXNlInNlcnZpY2V3b3JrZXIiOmNhc2Uic2hhcmVkd29ya2VyIjpjYXNlIndvcmtlciI6Y2FzZSJzY3JpcHQiOmlmKG4ucXVlcnlTZWxlY3RvcihjaShjKSkpcmV0dXJufWw9bi5jcmVhdGVFbGVtZW50KCJsaW5rIiksRHQobCwibGluayIsZSksYnQobCksbi5oZWFkLmFwcGVuZENoaWxkKGwpfX19ZnVuY3Rpb24gT0QoZSx0LG4pe19sLlMoZSx0LG4pO3ZhciBsPVpvO2lmKGwmJmUpe3ZhciByPWhvKGwpLmhvaXN0YWJsZVN0eWxlcyxjPUZvKGUpO3Q9dHx8ImRlZmF1bHQiO3ZhciBoPXIuZ2V0KGMpO2lmKCFoKXt2YXIgUz17bG9hZGluZzowLHByZWxvYWQ6bnVsbH07aWYoaD1sLnF1ZXJ5U2VsZWN0b3IoaWkoYykpKVMubG9hZGluZz01O2Vsc2V7ZT1VKHtyZWw6InN0eWxlc2hlZXQiLGhyZWY6ZSwiZGF0YS1wcmVjZWRlbmNlIjp0fSxuKSwobj13bi5nZXQoYykpJiZlaChlLG4pO3ZhciBfPWg9bC5jcmVhdGVFbGVtZW50KCJsaW5rIik7YnQoXyksRHQoXywibGluayIsZSksXy5fcD1uZXcgUHJvbWlzZShmdW5jdGlvbihMLFYpe18ub25sb2FkPUwsXy5vbmVycm9yPVZ9KSxfLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7Uy5sb2FkaW5nfD0xfSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtTLmxvYWRpbmd8PTJ9KSxTLmxvYWRpbmd8PTQsVHUoaCx0LGwpfWg9e3R5cGU6InN0eWxlc2hlZXQiLGluc3RhbmNlOmgsY291bnQ6MSxzdGF0ZTpTfSxyLnNldChjLGgpfX19ZnVuY3Rpb24gQUQoZSx0KXtfbC5YKGUsdCk7dmFyIG49Wm87aWYobiYmZSl7dmFyIGw9aG8obikuaG9pc3RhYmxlU2NyaXB0cyxyPSRvKGUpLGM9bC5nZXQocik7Y3x8KGM9bi5xdWVyeVNlbGVjdG9yKGNpKHIpKSxjfHwoZT1VKHtzcmM6ZSxhc3luYzohMH0sdCksKHQ9d24uZ2V0KHIpKSYmdGgoZSx0KSxjPW4uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYnQoYyksRHQoYywibGluayIsZSksbi5oZWFkLmFwcGVuZENoaWxkKGMpKSxjPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOmMsY291bnQ6MSxzdGF0ZTpudWxsfSxsLnNldChyLGMpKX19ZnVuY3Rpb24gTkQoZSx0KXtfbC5NKGUsdCk7dmFyIG49Wm87aWYobiYmZSl7dmFyIGw9aG8obikuaG9pc3RhYmxlU2NyaXB0cyxyPSRvKGUpLGM9bC5nZXQocik7Y3x8KGM9bi5xdWVyeVNlbGVjdG9yKGNpKHIpKSxjfHwoZT1VKHtzcmM6ZSxhc3luYzohMCx0eXBlOiJtb2R1bGUifSx0KSwodD13bi5nZXQocikpJiZ0aChlLHQpLGM9bi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxidChjKSxEdChjLCJsaW5rIixlKSxuLmhlYWQuYXBwZW5kQ2hpbGQoYykpLGM9e3R5cGU6InNjcmlwdCIsaW5zdGFuY2U6Yyxjb3VudDoxLHN0YXRlOm51bGx9LGwuc2V0KHIsYykpfX1mdW5jdGlvbiBHUyhlLHQsbixsKXt2YXIgcj0ocj1IbC5jdXJyZW50KT9yaShyKTpudWxsO2lmKCFyKXRocm93IEVycm9yKGkoNDQ2KSk7c3dpdGNoKGUpe2Nhc2UibWV0YSI6Y2FzZSJ0aXRsZSI6cmV0dXJuIG51bGw7Y2FzZSJzdHlsZSI6cmV0dXJuIHR5cGVvZiBuLnByZWNlZGVuY2U9PSJzdHJpbmciJiZ0eXBlb2Ygbi5ocmVmPT0ic3RyaW5nIj8obj1GbyhuLmhyZWYpLHQ9aG8ocikuaG9pc3RhYmxlU3R5bGVzLGw9dC5nZXQobiksbHx8KGw9e3R5cGU6InN0eWxlIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH0sdC5zZXQobixsKSksbCk6e3R5cGU6InZvaWQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlImxpbmsiOmlmKG4ucmVsPT09InN0eWxlc2hlZXQiJiZ0eXBlb2Ygbi5ocmVmPT0ic3RyaW5nIiYmdHlwZW9mIG4ucHJlY2VkZW5jZT09InN0cmluZyIpe2U9Rm8obi5ocmVmKTt2YXIgYz1obyhyKS5ob2lzdGFibGVTdHlsZXMsaD1jLmdldChlKTtpZihofHwocj1yLm93bmVyRG9jdW1lbnR8fHIsaD17dHlwZToic3R5bGVzaGVldCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sYy5zZXQoZSxoKSwoYz1yLnF1ZXJ5U2VsZWN0b3IoaWkoZSkpKT9jLl9wfHwoaC5pbnN0YW5jZT1jLGguc3RhdGUubG9hZGluZz01KTooYz13bi5nZXQoZSksY3x8KGM9e3JlbDoicHJlbG9hZCIsYXM6InN0eWxlIixocmVmOm4uaHJlZixjcm9zc09yaWdpbjpuLmNyb3NzT3JpZ2luLGludGVncml0eTpuLmludGVncml0eSxtZWRpYTpuLm1lZGlhLGhyZWZMYW5nOm4uaHJlZkxhbmcscmVmZXJyZXJQb2xpY3k6bi5yZWZlcnJlclBvbGljeX0sd24uc2V0KGUsYykpLEREKHIsZSxjLGguc3RhdGUpKSksdCYmbD09PW51bGwpdGhyb3cgRXJyb3IoaSg1MjgsIiIpKTtyZXR1cm4gaH1pZih0JiZsIT09bnVsbCl0aHJvdyBFcnJvcihpKDUyOSwiIikpO3JldHVybiBudWxsO2Nhc2Uic2NyaXB0IjpyZXR1cm4gdD1uLmFzeW5jLG49bi5zcmMsdHlwZW9mIG49PSJzdHJpbmciJiZ0JiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQhPSJzeW1ib2wiPyhuPSRvKG4pLHQ9aG8ocikuaG9pc3RhYmxlU2NyaXB0cyxsPXQuZ2V0KG4pLGx8fChsPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSx0LnNldChuLGwpKSxsKTp7dHlwZToidm9pZCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9O2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NDQsZSkpfX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4naHJlZj0iJyt2bihlKSsnIid9ZnVuY3Rpb24gaWkoZSl7cmV0dXJuJ2xpbmtbcmVsPSJzdHlsZXNoZWV0Il1bJytlKyJdIn1mdW5jdGlvbiBWUyhlKXtyZXR1cm4gVSh7fSxlLHsiZGF0YS1wcmVjZWRlbmNlIjplLnByZWNlZGVuY2UscHJlY2VkZW5jZTpudWxsfSl9ZnVuY3Rpb24gREQoZSx0LG4sbCl7aWYodD1lLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9InN0eWxlIl1bJyt0KyJdIikpe2lmKHRbZGNdIT09ITApe2wubG9hZGluZz0xO3JldHVybn19ZWxzZSB0PWUuY3JlYXRlRWxlbWVudCgibGluayIpLHRbZGNdPSEwLHQub25sb2FkPXQub25lcnJvcj1lYi5iaW5kKG51bGwsdCksRHQodCwibGluayIsbiksYnQodCksZS5oZWFkLmFwcGVuZENoaWxkKHQpO2wucHJlbG9hZD10LHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5sb2FkaW5nfD0xfSksdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5sb2FkaW5nfD0yfSl9ZnVuY3Rpb24gJG8oZSl7cmV0dXJuJ1tzcmM9Iicrdm4oZSkrJyJdJ31mdW5jdGlvbiBjaShlKXtyZXR1cm4ic2NyaXB0W2FzeW5jXSIrZX1mdW5jdGlvbiBZUyhlLHQsbil7aWYodC5jb3VudCsrLHQuaW5zdGFuY2U9PT1udWxsKXN3aXRjaCh0LnR5cGUpe2Nhc2Uic3R5bGUiOnZhciBsPWUucXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS1ocmVmfj0iJyt2bihuLmhyZWYpKyciXScpO2lmKGwpcmV0dXJuIHQuaW5zdGFuY2U9bCxidChsKSxsO3ZhciByPVUoe30sbix7ImRhdGEtaHJlZiI6bi5ocmVmLCJkYXRhLXByZWNlZGVuY2UiOm4ucHJlY2VkZW5jZSxocmVmOm51bGwscHJlY2VkZW5jZTpudWxsfSk7cmV0dXJuIGw9KGUub3duZXJEb2N1bWVudHx8ZSkuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxidChsKSxEdChsLCJzdHlsZSIsciksVHUobCxuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1sO2Nhc2Uic3R5bGVzaGVldCI6cj1GbyhuLmhyZWYpO3ZhciBjPWUucXVlcnlTZWxlY3RvcihpaShyKSk7aWYoYylyZXR1cm4gdC5zdGF0ZS5sb2FkaW5nfD00LHQuaW5zdGFuY2U9YyxidChjKSxjO2w9VlMobiksKHI9d24uZ2V0KHIpKSYmZWgobCxyKSxjPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxidChjKTt2YXIgaD1jO3JldHVybiBoLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKFMsXyl7aC5vbmxvYWQ9UyxoLm9uZXJyb3I9X30pLER0KGMsImxpbmsiLGwpLHQuc3RhdGUubG9hZGluZ3w9NCxUdShjLG4ucHJlY2VkZW5jZSxlKSx0Lmluc3RhbmNlPWM7Y2FzZSJzY3JpcHQiOnJldHVybiBjPSRvKG4uc3JjKSwocj1lLnF1ZXJ5U2VsZWN0b3IoY2koYykpKT8odC5pbnN0YW5jZT1yLGJ0KHIpLHIpOihsPW4sKHI9d24uZ2V0KGMpKSYmKGw9VSh7fSxuKSx0aChsLHIpKSxlPWUub3duZXJEb2N1bWVudHx8ZSxyPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYnQociksRHQociwibGluayIsbCksZS5oZWFkLmFwcGVuZENoaWxkKHIpLHQuaW5zdGFuY2U9cik7Y2FzZSJ2b2lkIjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IEVycm9yKGkoNDQzLHQudHlwZSkpfWVsc2UgdC50eXBlPT09InN0eWxlc2hlZXQiJiYodC5zdGF0ZS5sb2FkaW5nJjQpPT09MCYmKGw9dC5pbnN0YW5jZSx0LnN0YXRlLmxvYWRpbmd8PTQsVHUobCxuLnByZWNlZGVuY2UsZSkpO3JldHVybiB0Lmluc3RhbmNlfWZ1bmN0aW9uIFR1KGUsdCxuKXtmb3IodmFyIGw9bi5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD0ic3R5bGVzaGVldCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXScpLHI9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpudWxsLGM9cixoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBTPWxbaF07aWYoUy5kYXRhc2V0LnByZWNlZGVuY2U9PT10KWM9UztlbHNlIGlmKGMhPT1yKWJyZWFrfWM/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGMubmV4dFNpYmxpbmcpOih0PW4ubm9kZVR5cGU9PT05P24uaGVhZDpuLHQuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKSl9ZnVuY3Rpb24gZWgoZSx0KXtlLmNyb3NzT3JpZ2luPT1udWxsJiYoZS5jcm9zc09yaWdpbj10LmNyb3NzT3JpZ2luKSxlLnJlZmVycmVyUG9saWN5PT1udWxsJiYoZS5yZWZlcnJlclBvbGljeT10LnJlZmVycmVyUG9saWN5KSxlLnRpdGxlPT1udWxsJiYoZS50aXRsZT10LnRpdGxlKX1mdW5jdGlvbiB0aChlLHQpe2UuY3Jvc3NPcmlnaW49PW51bGwmJihlLmNyb3NzT3JpZ2luPXQuY3Jvc3NPcmlnaW4pLGUucmVmZXJyZXJQb2xpY3k9PW51bGwmJihlLnJlZmVycmVyUG9saWN5PXQucmVmZXJyZXJQb2xpY3kpLGUuaW50ZWdyaXR5PT1udWxsJiYoZS5pbnRlZ3JpdHk9dC5pbnRlZ3JpdHkpfXZhciB3dT1udWxsO2Z1bmN0aW9uIHFTKGUsdCxuKXtpZih3dT09PW51bGwpe3ZhciBsPW5ldyBNYXAscj13dT1uZXcgTWFwO3Iuc2V0KG4sbCl9ZWxzZSByPXd1LGw9ci5nZXQobiksbHx8KGw9bmV3IE1hcCxyLnNldChuLGwpKTtpZihsLmhhcyhlKSlyZXR1cm4gbDtmb3IobC5zZXQoZSxudWxsKSxuPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgYz1uW3JdO2lmKCEoY1tUcl18fGNbUnRdfHxlPT09ImxpbmsiJiZjLmdldEF0dHJpYnV0ZSgicmVsIik9PT0ic3R5bGVzaGVldCIpJiZjLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpe3ZhciBoPWMuZ2V0QXR0cmlidXRlKHQpfHwiIjtoPWUraDt2YXIgUz1sLmdldChoKTtTP1MucHVzaChjKTpsLnNldChoLFtjXSl9fXJldHVybiBsfWZ1bmN0aW9uIG5oKGUsdCxuKXtlPWUub3duZXJEb2N1bWVudHx8ZSxlLmhlYWQuaW5zZXJ0QmVmb3JlKG4sdD09PSJ0aXRsZSI/ZS5xdWVyeVNlbGVjdG9yKCJoZWFkID4gdGl0bGUiKTpudWxsKX1mdW5jdGlvbiBqRChlLHQsbil7aWYobj09PTF8fHQuaXRlbVByb3AhPW51bGwpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UibWV0YSI6Y2FzZSJ0aXRsZSI6cmV0dXJuITA7Y2FzZSJzdHlsZSI6aWYodHlwZW9mIHQucHJlY2VkZW5jZSE9InN0cmluZyJ8fHR5cGVvZiB0LmhyZWYhPSJzdHJpbmcifHx0LmhyZWY9PT0iIilicmVhaztyZXR1cm4hMDtjYXNlImxpbmsiOmlmKHR5cGVvZiB0LnJlbCE9InN0cmluZyJ8fHR5cGVvZiB0LmhyZWYhPSJzdHJpbmcifHx0LmhyZWY9PT0iInx8dC5vbkxvYWR8fHQub25FcnJvcilicmVhaztyZXR1cm4gdC5yZWw9PT0ic3R5bGVzaGVldCI/KGU9dC5kaXNhYmxlZCx0eXBlb2YgdC5wcmVjZWRlbmNlPT0ic3RyaW5nIiYmZT09bnVsbCk6ITA7Y2FzZSJzY3JpcHQiOmlmKHQuYXN5bmMmJnR5cGVvZiB0LmFzeW5jIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC5hc3luYyE9InN5bWJvbCImJiF0Lm9uTG9hZCYmIXQub25FcnJvciYmdC5zcmMmJnR5cGVvZiB0LnNyYz09InN0cmluZyIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWFMoZSx0KXtyZXR1cm4gZT09PSJpbWciJiZ0LnNyYyE9bnVsbCYmdC5zcmMhPT0iIiYmdC5vbkxvYWQ9PW51bGwmJnQubG9hZGluZyE9PSJsYXp5In1mdW5jdGlvbiBLUyhlKXtyZXR1cm4hKGUudHlwZT09PSJzdHlsZXNoZWV0IiYmKGUuc3RhdGUubG9hZGluZyYzKT09PTApfWZ1bmN0aW9uIFFTKGUpe3JldHVybihlLndpZHRofHwxMDApKihlLmhlaWdodHx8MTAwKSoodHlwZW9mIGRldmljZVBpeGVsUmF0aW89PSJudW1iZXIiP2RldmljZVBpeGVsUmF0aW86MSkqLjI1fWZ1bmN0aW9uIFpTKGUsdCl7dHlwZW9mIHQuZGVjb2RlPT0iZnVuY3Rpb24iJiYoZS5pbWdDb3VudCsrLHQuY29tcGxldGV8fChlLmltZ0J5dGVzKz1RUyh0KSxlLnN1c3BlbnNleUltYWdlcy5wdXNoKHQpKSxlPWtELmJpbmQoZSksdC5kZWNvZGUoKS50aGVuKGUsZSkpfWZ1bmN0aW9uIE1EKGUsdCxuLGwpe2lmKG4udHlwZT09PSJzdHlsZXNoZWV0IiYmKHR5cGVvZiBsLm1lZGlhIT0ic3RyaW5nInx8bWF0Y2hNZWRpYShsLm1lZGlhKS5tYXRjaGVzIT09ITEpJiYobi5zdGF0ZS5sb2FkaW5nJjQpPT09MCl7aWYobi5pbnN0YW5jZT09PW51bGwpe3ZhciByPUZvKGwuaHJlZiksYz10LnF1ZXJ5U2VsZWN0b3IoaWkocikpO2lmKGMpe3Q9Yy5fcCx0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iJiYoZS5jb3VudCsrLGU9dWkuYmluZChlKSx0LnRoZW4oZSxlKSksbi5zdGF0ZS5sb2FkaW5nfD00LG4uaW5zdGFuY2U9YyxidChjKTtyZXR1cm59Yz10Lm93bmVyRG9jdW1lbnR8fHQsbD1WUyhsKSwocj13bi5nZXQocikpJiZlaChsLHIpLGM9Yy5jcmVhdGVFbGVtZW50KCJsaW5rIiksYnQoYyk7dmFyIGg9YztoLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKFMsXyl7aC5vbmxvYWQ9UyxoLm9uZXJyb3I9X30pLER0KGMsImxpbmsiLGwpLG4uaW5zdGFuY2U9Y31lLnN0eWxlc2hlZXRzPT09bnVsbCYmKGUuc3R5bGVzaGVldHM9bmV3IE1hcCksZS5zdHlsZXNoZWV0cy5zZXQobix0KSwodD1uLnN0YXRlLnByZWxvYWQpJiYobi5zdGF0ZS5sb2FkaW5nJjMpPT09MCYmKGUuY291bnQrKyxuPXVpLmJpbmQoZSksdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuKSx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixuKSl9fXZhciBFdT0wO2Z1bmN0aW9uIHpEKGUsdCl7cmV0dXJuIGUuc3R5bGVzaGVldHMmJmUuY291bnQ9PT0wJiZfdShlLGUuc3R5bGVzaGVldHMpLDA8ZS5jb3VudHx8MDxlLmltZ0NvdW50P2Z1bmN0aW9uKG4pe3ZhciBsPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLnN0eWxlc2hlZXRzJiZfdShlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKXt2YXIgYz1lLnVuc3VzcGVuZDtlLnVuc3VzcGVuZD1udWxsLGMoKX19LDZlNCt0KTswPGUuaW1nQnl0ZXMmJkV1PT09MCYmKEV1PTYyNTAwKkpOKCkpO3ZhciByPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLndhaXRpbmdGb3JJbWFnZXM9ITEsZS5jb3VudD09PTAmJihlLnN0eWxlc2hlZXRzJiZfdShlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKSl7dmFyIGM9ZS51bnN1c3BlbmQ7ZS51bnN1c3BlbmQ9bnVsbCxjKCl9fSwoZS5pbWdCeXRlcz5FdT81MDo4MDApK3QpO3JldHVybiBlLnVuc3VzcGVuZD1uLGZ1bmN0aW9uKCl7ZS51bnN1c3BlbmQ9bnVsbCxjbGVhclRpbWVvdXQobCksY2xlYXJUaW1lb3V0KHIpfX06bnVsbH1mdW5jdGlvbiBGUyhlKXtpZihlLmNvdW50PT09MCYmKGUuaW1nQ291bnQ9PT0wfHwhZS53YWl0aW5nRm9ySW1hZ2VzKSl7aWYoZS5zdHlsZXNoZWV0cylfdShlLGUuc3R5bGVzaGVldHMpO2Vsc2UgaWYoZS51bnN1c3BlbmQpe3ZhciB0PWUudW5zdXNwZW5kO2UudW5zdXNwZW5kPW51bGwsdCgpfX19ZnVuY3Rpb24gdWkoKXt0aGlzLmNvdW50LS0sRlModGhpcyl9ZnVuY3Rpb24ga0QoKXt0aGlzLmltZ0NvdW50LS0sRlModGhpcyl9dmFyIFJ1PW51bGw7ZnVuY3Rpb24gX3UoZSx0KXtlLnN0eWxlc2hlZXRzPW51bGwsZS51bnN1c3BlbmQhPT1udWxsJiYoZS5jb3VudCsrLFJ1PW5ldyBNYXAsdC5mb3JFYWNoKExELGUpLFJ1PW51bGwsdWkuY2FsbChlKSl9ZnVuY3Rpb24gTEQoZSx0KXtpZighKHQuc3RhdGUubG9hZGluZyY0KSl7dmFyIG49UnUuZ2V0KGUpO2lmKG4pdmFyIGw9bi5nZXQobnVsbCk7ZWxzZXtuPW5ldyBNYXAsUnUuc2V0KGUsbik7Zm9yKHZhciByPWUucXVlcnlTZWxlY3RvckFsbCgibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0iKSxjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBoPXJbY107KGgubm9kZU5hbWU9PT0iTElOSyJ8fGguZ2V0QXR0cmlidXRlKCJtZWRpYSIpIT09Im5vdCBhbGwiKSYmKG4uc2V0KGguZGF0YXNldC5wcmVjZWRlbmNlLGgpLGw9aCl9bCYmbi5zZXQobnVsbCxsKX1yPXQuaW5zdGFuY2UsaD1yLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIiksYz1uLmdldChoKXx8bCxjPT09bCYmbi5zZXQobnVsbCxyKSxuLnNldChoLHIpLHRoaXMuY291bnQrKyxsPXVpLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixsKSxjP2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixjLm5leHRTaWJsaW5nKTooZT1lLm5vZGVUeXBlPT09OT9lLmhlYWQ6ZSxlLmluc2VydEJlZm9yZShyLGUuZmlyc3RDaGlsZCkpLHQuc3RhdGUubG9hZGluZ3w9NH19dmFyIEpvPXskJHR5cGVvZjpoZSxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2N1cnJlbnRWYWx1ZTpiZSxfY3VycmVudFZhbHVlMjpiZSxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gVUQoZSx0LG4sbCxyLGMsaCxTLF8pe3RoaXMudGFnPTEsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMubmV4dD10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD10aGlzLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV4cGlyYXRpb25UaW1lcz1MZigtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLnNoZWxsU3VzcGVuZENvdW50ZXI9dGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLndhcm1MYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9TGYoMCksdGhpcy5oaWRkZW5VcGRhdGVzPUxmKG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1sLHRoaXMub25VbmNhdWdodEVycm9yPXIsdGhpcy5vbkNhdWdodEVycm9yPWMsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9aCx0aGlzLnBvb2xlZENhY2hlPW51bGwsdGhpcy5wb29sZWRDYWNoZUxhbmVzPTAsdGhpcy5mb3JtU3RhdGU9Xyx0aGlzLnRyYW5zaXRpb25UeXBlcz1udWxsLHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zPW5ldyBNYXB9ZnVuY3Rpb24gJFMoZSx0LG4sbCxyLGMsaCxTLF8sTCxWLFope3JldHVybiBlPW5ldyBVRChlLHQsbixoLF8sTCxWLFosUyksdD0xLGM9PT0hMCYmKHR8PTI0KSxjPUt0KDMsbnVsbCxudWxsLHQpLGUuY3VycmVudD1jLGMuc3RhdGVOb2RlPWUsdD1nZCgpLHQucmVmQ291bnQrKyxlLnBvb2xlZENhY2hlPXQsdC5yZWZDb3VudCsrLGMubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpsLGlzRGVoeWRyYXRlZDpuLGNhY2hlOnR9LFNkKGMpLGV9ZnVuY3Rpb24gSlMoZSl7cmV0dXJuIGU/KGU9d28sZSk6d299ZnVuY3Rpb24gV1MoZSx0LG4sbCxyLGMpe3I9SlMociksbC5jb250ZXh0PT09bnVsbD9sLmNvbnRleHQ9cjpsLnBlbmRpbmdDb250ZXh0PXIsbD1abCh0KSxsLnBheWxvYWQ9e2VsZW1lbnQ6bn0sYz1jPT09dm9pZCAwP251bGw6YyxjIT09bnVsbCYmKGwuY2FsbGJhY2s9Yyksbj1GbChlLGwsdCksbiE9PW51bGwmJigkdChuLGUsdCksSXIobixlLHQpKX1mdW5jdGlvbiBlMShlLHQpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXt2YXIgbj1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT1uIT09MCYmbjx0P246dH19ZnVuY3Rpb24gbGgoZSx0KXtlMShlLHQpLChlPWUuYWx0ZXJuYXRlKSYmZTEoZSx0KX1mdW5jdGlvbiB0MShlKXtpZihlLnRhZz09PTEzfHxlLnRhZz09PTMxKXt2YXIgdD1BYShlLDY3MTA4ODY0KTt0IT09bnVsbCYmJHQodCxlLDY3MTA4ODY0KSxsaChlLDY3MTA4ODY0KX19ZnVuY3Rpb24gbjEoZSl7aWYoZS50YWc9PT0xM3x8ZS50YWc9PT0zMSl7dmFyIHQ9c24oKTt0PVVmKHQpO3ZhciBuPUFhKGUsdCk7biE9PW51bGwmJiR0KG4sZSx0KSxsaChlLHQpfX12YXIgV289ITA7ZnVuY3Rpb24gSEQoZSx0LG4sbCl7dmFyIHI9dGUuVDt0ZS5UPW51bGw7dmFyIGM9aWUucDt0cnl7aWUucD0yLGFoKGUsdCxuLGwpfWZpbmFsbHl7aWUucD1jLHRlLlQ9cn19ZnVuY3Rpb24gQkQoZSx0LG4sbCl7dmFyIHI9dGUuVDt0ZS5UPW51bGw7dmFyIGM9aWUucDt0cnl7aWUucD04LGFoKGUsdCxuLGwpfWZpbmFsbHl7aWUucD1jLHRlLlQ9cn19ZnVuY3Rpb24gYWgoZSx0LG4sbCl7aWYoV28pe3ZhciByPW9oKGwpO2lmKHI9PT1udWxsKUJtKGUsdCxsLE91LG4pLGExKGUsbCk7ZWxzZSBpZihQRChyLGUsdCxuLGwpKWwuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihhMShlLGwpLHQmNCYmLTE8SUQuaW5kZXhPZihlKSl7Zm9yKDtyIT09bnVsbDspe3ZhciBjPW1vKHIpO2lmKGMhPT1udWxsKXN3aXRjaChjLnRhZyl7Y2FzZSAzOmlmKGM9Yy5zdGF0ZU5vZGUsYy5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgaD13YShjLnBlbmRpbmdMYW5lcyk7aWYoaCE9PTApe3ZhciBTPWM7Zm9yKFMucGVuZGluZ0xhbmVzfD0yLFMuZW50YW5nbGVkTGFuZXN8PTI7aDspe3ZhciBfPTE8PDMxLW5uKGgpO1MuZW50YW5nbGVtZW50c1sxXXw9XyxoJj1+X31KbihjKSwoSWUmNik9PT0wJiYobXU9ZW4oKSs1MDAsbmkoMCkpfX1icmVhaztjYXNlIDMxOmNhc2UgMTM6Uz1BYShjLDIpLFMhPT1udWxsJiYkdChTLGMsMiksdnUoKSxsaChjLDIpfWlmKGM9b2gobCksYz09PW51bGwmJkJtKGUsdCxsLE91LG4pLGM9PT1yKWJyZWFrO3I9Y31yIT09bnVsbCYmbC5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIEJtKGUsdCxsLG51bGwsbil9fWZ1bmN0aW9uIG9oKGUpe3JldHVybiBlPVlmKGUpLHJoKGUpfXZhciBPdT1udWxsO2Z1bmN0aW9uIHJoKGUpe2lmKE91PW51bGwsZT1FYShlKSxlIT09bnVsbCl7dmFyIHQ9ZihlKTtpZih0PT09bnVsbCllPW51bGw7ZWxzZXt2YXIgbj10LnRhZztpZihuPT09MTMpe2lmKGU9ZCh0KSxlIT09bnVsbClyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZihuPT09MzEpe2lmKGU9cCh0KSxlIT09bnVsbClyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZihuPT09Myl7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gdC50YWc9PT0zP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSB0IT09ZSYmKGU9bnVsbCl9fXJldHVybiBPdT1lLG51bGx9ZnVuY3Rpb24gbDEoZSl7c3dpdGNoKGUpe2Nhc2UiYmVmb3JldG9nZ2xlIjpjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJzZWVrZWQiOmNhc2Uic3VibWl0IjpjYXNlInRvZ2dsZSI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmdWxsc2NyZWVuZXJyb3IiOmNhc2UiZm9jdXMiOmNhc2UiaGFzaGNoYW5nZSI6Y2FzZSJwb3BzdGF0ZSI6Y2FzZSJzZWxlY3QiOmNhc2Uic2VsZWN0c3RhcnQiOnJldHVybiAyO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2V4aXQiOmNhc2UiZHJhZ2xlYXZlIjpjYXNlImRyYWdvdmVyIjpjYXNlIm1vdXNlbW92ZSI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJyZXNpemUiOmNhc2Uic2Nyb2xsIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ3aGVlbCI6Y2FzZSJtb3VzZWVudGVyIjpjYXNlIm1vdXNlbGVhdmUiOmNhc2UicG9pbnRlcmVudGVyIjpjYXNlInBvaW50ZXJsZWF2ZSI6cmV0dXJuIDg7Y2FzZSJtZXNzYWdlIjpzd2l0Y2goSk8oKSl7Y2FzZSBHeTpyZXR1cm4gMjtjYXNlIFZ5OnJldHVybiA4O2Nhc2UgaWM6Y2FzZSBXTzpyZXR1cm4gMzI7Y2FzZSBZeTpyZXR1cm4gMjY4NDM1NDU2O2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgaWg9ITEsY2E9bnVsbCx1YT1udWxsLHNhPW51bGwsc2k9bmV3IE1hcCxmaT1uZXcgTWFwLGZhPVtdLElEPSJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQiLnNwbGl0KCIgIik7ZnVuY3Rpb24gYTEoZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1c2luIjpjYXNlImZvY3Vzb3V0IjpjYT1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6dWE9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6c2E9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOnNpLmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmZpLmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIGRpKGUsdCxuLGwscixjKXtyZXR1cm4gZT09PW51bGx8fGUubmF0aXZlRXZlbnQhPT1jPyhlPXtibG9ja2VkT246dCxkb21FdmVudE5hbWU6bixldmVudFN5c3RlbUZsYWdzOmwsbmF0aXZlRXZlbnQ6Yyx0YXJnZXRDb250YWluZXJzOltyXX0sdCE9PW51bGwmJih0PW1vKHQpLHQhPT1udWxsJiZ0MSh0KSksZSk6KGUuZXZlbnRTeXN0ZW1GbGFnc3w9bCx0PWUudGFyZ2V0Q29udGFpbmVycyxyIT09bnVsbCYmdC5pbmRleE9mKHIpPT09LTEmJnQucHVzaChyKSxlKX1mdW5jdGlvbiBQRChlLHQsbixsLHIpe3N3aXRjaCh0KXtjYXNlImZvY3VzaW4iOnJldHVybiBjYT1kaShjYSxlLHQsbixsLHIpLCEwO2Nhc2UiZHJhZ2VudGVyIjpyZXR1cm4gdWE9ZGkodWEsZSx0LG4sbCxyKSwhMDtjYXNlIm1vdXNlb3ZlciI6cmV0dXJuIHNhPWRpKHNhLGUsdCxuLGwsciksITA7Y2FzZSJwb2ludGVyb3ZlciI6dmFyIGM9ci5wb2ludGVySWQ7cmV0dXJuIHNpLnNldChjLGRpKHNpLmdldChjKXx8bnVsbCxlLHQsbixsLHIpKSwhMDtjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpyZXR1cm4gYz1yLnBvaW50ZXJJZCxmaS5zZXQoYyxkaShmaS5nZXQoYyl8fG51bGwsZSx0LG4sbCxyKSksITB9cmV0dXJuITF9ZnVuY3Rpb24gbzEoZSl7dmFyIHQ9RWEoZS50YXJnZXQpO2lmKHQhPT1udWxsKXt2YXIgbj1mKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1kKG4pLHQhPT1udWxsKXtlLmJsb2NrZWRPbj10LCR5KGUucHJpb3JpdHksZnVuY3Rpb24oKXtuMShuKX0pO3JldHVybn19ZWxzZSBpZih0PT09MzEpe2lmKHQ9cChuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCwkeShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7bjEobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBBdShlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49b2goZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgbD1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7VmY9bCxuLnRhcmdldC5kaXNwYXRjaEV2ZW50KGwpLFZmPW51bGx9ZWxzZSByZXR1cm4gdD1tbyhuKSx0IT09bnVsbCYmdDEodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gcjEoZSx0LG4pe0F1KGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBHRCgpe2loPSExLGNhIT09bnVsbCYmQXUoY2EpJiYoY2E9bnVsbCksdWEhPT1udWxsJiZBdSh1YSkmJih1YT1udWxsKSxzYSE9PW51bGwmJkF1KHNhKSYmKHNhPW51bGwpLHNpLmZvckVhY2gocjEpLGZpLmZvckVhY2gocjEpfWZ1bmN0aW9uIE51KGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxpaHx8KGloPSEwLGEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhhLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEdEKSkpfXZhciBEdT1udWxsO2Z1bmN0aW9uIGkxKGUpe0R1IT09ZSYmKER1PWUsYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGEudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZnVuY3Rpb24oKXtEdT09PWUmJihEdT1udWxsKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrPTMpe3ZhciBuPWVbdF0sbD1lW3QrMV0scj1lW3QrMl07aWYodHlwZW9mIGwhPSJmdW5jdGlvbiIpe2lmKHJoKGx8fG4pPT09bnVsbCljb250aW51ZTticmVha312YXIgYz1tbyhuKTtjIT09bnVsbCYmKGUuc3BsaWNlKHQsMyksdC09MyxHZChjLHtwZW5kaW5nOiEwLGRhdGE6cixtZXRob2Q6bi5tZXRob2QsYWN0aW9uOmx9LGwscikpfX0pKX1mdW5jdGlvbiBlcihlKXtmdW5jdGlvbiB0KF8pe3JldHVybiBOdShfLGUpfWNhIT09bnVsbCYmTnUoY2EsZSksdWEhPT1udWxsJiZOdSh1YSxlKSxzYSE9PW51bGwmJk51KHNhLGUpLHNpLmZvckVhY2godCksZmkuZm9yRWFjaCh0KTtmb3IodmFyIG49MDtuPGZhLmxlbmd0aDtuKyspe3ZhciBsPWZhW25dO2wuYmxvY2tlZE9uPT09ZSYmKGwuYmxvY2tlZE9uPW51bGwpfWZvcig7MDxmYS5sZW5ndGgmJihuPWZhWzBdLG4uYmxvY2tlZE9uPT09bnVsbCk7KW8xKG4pLG4uYmxvY2tlZE9uPT09bnVsbCYmZmEuc2hpZnQoKTtpZihuPShlLm93bmVyRG9jdW1lbnR8fGUpLiQkcmVhY3RGb3JtUmVwbGF5LG4hPW51bGwpZm9yKGw9MDtsPG4ubGVuZ3RoO2wrPTMpe3ZhciByPW5bbF0sYz1uW2wrMV0saD1yW1h0XXx8bnVsbDtpZih0eXBlb2YgYz09ImZ1bmN0aW9uIilofHxpMShuKTtlbHNlIGlmKGgpe3ZhciBTPW51bGw7aWYoYyYmYy5oYXNBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSl7aWYocj1jLGg9Y1tYdF18fG51bGwpUz1oLmZvcm1BY3Rpb247ZWxzZSBpZihyaChyKSE9PW51bGwpY29udGludWV9ZWxzZSBTPWguYWN0aW9uO3R5cGVvZiBTPT0iZnVuY3Rpb24iP25bbCsxXT1TOihuLnNwbGljZShsLDMpLGwtPTMpLGkxKG4pfX19ZnVuY3Rpb24gYzEoKXtmdW5jdGlvbiBlKGMpe2MuY2FuSW50ZXJjZXB0JiZjLmluZm89PT0icmVhY3QtdHJhbnNpdGlvbiImJmMuaW50ZXJjZXB0KHtoYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGgpe3JldHVybiByPWh9KX0sZm9jdXNSZXNldDoibWFudWFsIixzY3JvbGw6Im1hbnVhbCJ9KX1mdW5jdGlvbiB0KCl7ciE9PW51bGwmJihyKCkscj1udWxsKSxsfHxzZXRUaW1lb3V0KG4sMjApfWZ1bmN0aW9uIG4oKXtpZighbCYmIW5hdmlnYXRpb24udHJhbnNpdGlvbil7dmFyIGM9bmF2aWdhdGlvbi5jdXJyZW50RW50cnk7YyYmYy51cmwhPW51bGwmJm5hdmlnYXRpb24ubmF2aWdhdGUoYy51cmwse3N0YXRlOmMuZ2V0U3RhdGUoKSxpbmZvOiJyZWFjdC10cmFuc2l0aW9uIixoaXN0b3J5OiJyZXBsYWNlIn0pfX1pZih0eXBlb2YgbmF2aWdhdGlvbj09Im9iamVjdCIpe3ZhciBsPSExLHI9bnVsbDtyZXR1cm4gbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJuYXZpZ2F0ZSIsZSksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJuYXZpZ2F0ZXN1Y2Nlc3MiLHQpLG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigibmF2aWdhdGVlcnJvciIsdCksc2V0VGltZW91dChuLDEwMCksZnVuY3Rpb24oKXtsPSEwLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibmF2aWdhdGUiLGUpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibmF2aWdhdGVzdWNjZXNzIix0KSxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm5hdmlnYXRlZXJyb3IiLHQpLHIhPT1udWxsJiYocigpLHI9bnVsbCl9fX1mdW5jdGlvbiBjaChlKXt0aGlzLl9pbnRlcm5hbFJvb3Q9ZX1qdS5wcm90b3R5cGUucmVuZGVyPWNoLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQ9PT1udWxsKXRocm93IEVycm9yKGkoNDA5KSk7dmFyIG49dC5jdXJyZW50LGw9c24oKTtXUyhuLGwsZSx0LG51bGwsbnVsbCl9LGp1LnByb3RvdHlwZS51bm1vdW50PWNoLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGUhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87V1MoZS5jdXJyZW50LDIsbnVsbCxlLG51bGwsbnVsbCksdnUoKSx0W2ZvXT1udWxsfX07ZnVuY3Rpb24ganUoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9anUucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PUZ5KCk7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjxmYS5sZW5ndGgmJnQhPT0wJiZ0PGZhW25dLnByaW9yaXR5O24rKyk7ZmEuc3BsaWNlKG4sMCxlKSxuPT09MCYmbzEoZSl9fTt2YXIgdTE9by52ZXJzaW9uO2lmKHUxIT09IjE5LjMuMSIpdGhyb3cgRXJyb3IoaSg1MjcsdTEsIjE5LjMuMSIpKTtpZS5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihpKDE4OCkpOihlPU9iamVjdC5rZXlzKGUpLmpvaW4oIiwiKSxFcnJvcihpKDI2OCxlKSkpO3JldHVybiBlPWIodCksZT1lIT09bnVsbD94KGUpOm51bGwsZT1lPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlLGV9O3ZhciBWRD17YnVuZGxlVHlwZTowLHZlcnNpb246IjE5LjMuMSIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIixjdXJyZW50RGlzcGF0Y2hlclJlZjp0ZSxyZWNvbmNpbGVyVmVyc2lvbjoiMTkuMy4xIn07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzwidSIpe3ZhciBNdT1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIU11LmlzRGlzYWJsZWQmJk11LnN1cHBvcnRzRmliZXIpdHJ5e3hyPU11LmluamVjdChWRCksdG49TXV9Y2F0Y2h7fX1yZXR1cm4gdHIuY3JlYXRlUm9vdD1mdW5jdGlvbihlLHQpe2lmKCFzKGUpKXRocm93IEVycm9yKGkoMjk5KSk7dmFyIG49ITEsbD0iIixyPUowLGM9VzAsaD1leDtyZXR1cm4gdCE9bnVsbCYmKHQudW5zdGFibGVfc3RyaWN0TW9kZT09PSEwJiYobj0hMCksdC5pZGVudGlmaWVyUHJlZml4IT09dm9pZCAwJiYobD10LmlkZW50aWZpZXJQcmVmaXgpLHQub25VbmNhdWdodEVycm9yIT09dm9pZCAwJiYocj10Lm9uVW5jYXVnaHRFcnJvciksdC5vbkNhdWdodEVycm9yIT09dm9pZCAwJiYoYz10Lm9uQ2F1Z2h0RXJyb3IpLHQub25SZWNvdmVyYWJsZUVycm9yIT09dm9pZCAwJiYoaD10Lm9uUmVjb3ZlcmFibGVFcnJvcikpLHQ9JFMoZSwxLCExLG51bGwsbnVsbCxuLGwsbnVsbCxyLGMsaCxjMSksZVtmb109dC5jdXJyZW50LEhtKGUpLG5ldyBjaCh0KX0sdHIuaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFzKGUpKXRocm93IEVycm9yKGkoMjk5KSk7dmFyIGw9ITEscj0iIixjPUowLGg9VzAsUz1leCxfPW51bGw7cmV0dXJuIG4hPW51bGwmJihuLnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKGw9ITApLG4uaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKHI9bi5pZGVudGlmaWVyUHJlZml4KSxuLm9uVW5jYXVnaHRFcnJvciE9PXZvaWQgMCYmKGM9bi5vblVuY2F1Z2h0RXJyb3IpLG4ub25DYXVnaHRFcnJvciE9PXZvaWQgMCYmKGg9bi5vbkNhdWdodEVycm9yKSxuLm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKFM9bi5vblJlY292ZXJhYmxlRXJyb3IpLG4uZm9ybVN0YXRlIT09dm9pZCAwJiYoXz1uLmZvcm1TdGF0ZSkpLHQ9JFMoZSwxLCEwLHQsbj8/bnVsbCxsLHIsXyxjLGgsUyxjMSksdC5jb250ZXh0PUpTKG51bGwpLG49dC5jdXJyZW50LGw9c24oKSxsPVVmKGwpLHI9WmwobCksci5jYWxsYmFjaz1udWxsLEZsKG4scixsKSxuPWwsdC5jdXJyZW50LmxhbmVzPW4sQ3IodCxuKSxKbih0KSxlW2ZvXT10LmN1cnJlbnQsSG0oZSksbmV3IGp1KHQpfSx0ci52ZXJzaW9uPSIxOS4zLjEiLHRyfXZhciB4aDtmdW5jdGlvbiB4MSgpe2lmKHhoKXJldHVybiBMdS5leHBvcnRzO3hoPTE7ZnVuY3Rpb24gYSgpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz4idSJ8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPSJmdW5jdGlvbiIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoYSl9Y2F0Y2gobyl7Y29uc29sZS5lcnJvcihvKX19cmV0dXJuIGEoKSxMdS5leHBvcnRzPWIxKCksTHUuZXhwb3J0c312YXIgUzE9eDEoKTtjb25zdCBDMT1hPT5hPy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7ZnVuY3Rpb24gVDEoYSxvLHU9W10pe2lmKG89PW51bGwpdGhyb3cgbmV3IEVycm9yKCJbbHVjaWRlXTogaWNvbk5vZGUgaXMgcmVxdWlyZWQgd2hlbiBpY29uIG5hbWUgaXMgdXNlZCIpO3JldHVybntuYW1lOkMxKGEpLHNpemU6MjQsbm9kZTpvLC4uLnUubGVuZ3RoPjA/e2FsaWFzZXM6dX06e319fWNvbnN0IHcxPWE9PntsZXQgbz0iIix1PSExO2Zvcihjb25zdCBpIG9mIGEpe2lmKGk9PT0iLSJ8fGk9PT0iXyJ8fGk8PSIgIil7dT1vLmxlbmd0aD4wO2NvbnRpbnVlfW8ubGVuZ3RoPT09MD9vKz1pLnRvTG93ZXJDYXNlKCk6bys9dT9pLnRvVXBwZXJDYXNlKCk6aSx1PSExfXJldHVybiBvfTtjb25zdCBFMT1hPT57Y29uc3Qgbz13MShhKTtyZXR1cm4gby5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStvLnNsaWNlKDEpfTtjb25zdCBJdT0oLi4uYSk9PmEuZmlsdGVyKChvLHUsaSk9PiEhbyYmby50cmltKCkhPT0iIiYmaS5pbmRleE9mKG8pPT09dSkuam9pbigiICIpLnRyaW0oKTtjb25zdCBtYT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsInN0cm9rZS13aWR0aCI6Miwic3Ryb2tlLWxpbmVjYXAiOiJyb3VuZCIsInN0cm9rZS1saW5lam9pbiI6InJvdW5kIn07ZnVuY3Rpb24gUHUoYSl7cmV0dXJuIGEhPW51bGx9ZnVuY3Rpb24gUjEoYSxvPXt9KXtjb25zdCB1PW8uYXR0cmlidXRlTmFtZXM/P3t9LGk9Qz0+dVtDXT8/QyxzPWEuc2l6ZT8/YS53aWR0aD8/bWEud2lkdGgsZj1hLnNpemU/P2EuaGVpZ2h0Pz9tYS5oZWlnaHQsZD1hLmFsaWFzZXM/LmZpbHRlcihDPT50eXBlb2YgQz09InN0cmluZyImJkMudHJpbSgpIT09IiIpLm1hcChDPT5gbHVjaWRlLSR7Q31gKT8/W10scD1bLi4uYS5uYW1lP1tgbHVjaWRlLSR7YS5uYW1lfWBdOltdLC4uLmRdLHk9by5jbGFzc05hbWU/LnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pPz9bXSxiPW8uaW5jbHVkZURlZmF1bHRDbGFzc2VzPT09ITE/SXUoLi4ueSk6SXUoImx1Y2lkZSIsLi4ucCwuLi55KSx4PW8uYWJzb2x1dGVTdHJva2VXaWR0aD9OdW1iZXIoby5zdHJva2VXaWR0aD8/bWFbInN0cm9rZS13aWR0aCJdKSpOdW1iZXIoYS5zaXplPz9hLndpZHRoPz9tYS53aWR0aCkvTnVtYmVyKG8uc2l6ZT8/by53aWR0aD8/bWEud2lkdGgpOm8uc3Ryb2tlV2lkdGg/P21hWyJzdHJva2Utd2lkdGgiXTtyZXR1cm5bInN2ZyIsey4uLk9iamVjdC5lbnRyaWVzKG1hKS5yZWR1Y2UoKEMsW3csUl0pPT4oQ1tpKHcpXT1SLEMpLHt9KSwuLi4iY29sb3IiaW4gbyYmby5jb2xvciYme1tpKCJzdHJva2UiKV06by5jb2xvcn0sLi4uInNpemUiaW4gbyYmUHUoby5zaXplKSYme1tpKCJ3aWR0aCIpXTpvLnNpemUsW2koImhlaWdodCIpXTpvLnNpemV9LC4uLiJ3aWR0aCJpbiBvJiZQdShvLndpZHRoKSYme1tpKCJ3aWR0aCIpXTpvLndpZHRofSwuLi4iaGVpZ2h0ImluIG8mJlB1KG8uaGVpZ2h0KSYme1tpKCJoZWlnaHQiKV06by5oZWlnaHR9LFtpKCJzdHJva2Utd2lkdGgiKV06eCwuLi5iJiZ7W2koImNsYXNzIildOmJ9LFtpKCJ2aWV3Qm94IildOmAwIDAgJHtzfSAke2Z9YCwuLi5vLmhhc0ExMXlQcm9wPT09ITE/e1tpKCJhcmlhLWhpZGRlbiIpXToidHJ1ZSJ9Ont9LC4uLiJhdHRyaWJ1dGVzImluIG8mJm8uYXR0cmlidXRlc30sYS5ub2RlLm1hcChDPT57Y29uc3RbdyxSLEVdPUMsVD1vLm5vblNjYWxpbmdTdHJva2U/e1tpKCJ2ZWN0b3ItZWZmZWN0IildOiJub24tc2NhbGluZy1zdHJva2UiLC4uLlJ9OlI7cmV0dXJuIEU/W3csVCxFXTpbdyxUXX0pXX1mdW5jdGlvbiBfMShhLG89e30pe3JldHVybiBSMShhLHsuLi5vLGF0dHJpYnV0ZU5hbWVzOnsuLi5vLmF0dHJpYnV0ZU5hbWVzLGNsYXNzOiJjbGFzc05hbWUiLCJzdHJva2Utd2lkdGgiOiJzdHJva2VXaWR0aCIsInN0cm9rZS1saW5lY2FwIjoic3Ryb2tlTGluZWNhcCIsInN0cm9rZS1saW5lam9pbiI6InN0cm9rZUxpbmVqb2luIiwidmVjdG9yLWVmZmVjdCI6InZlY3RvckVmZmVjdCJ9fSl9Y29uc3QgTzE9YT0+e2Zvcihjb25zdCBvIGluIGEpaWYoby5zdGFydHNXaXRoKCJhcmlhLSIpfHxvPT09InJvbGUifHxvPT09InRpdGxlIilyZXR1cm4hMDtyZXR1cm4hMX0sQTE9di5jcmVhdGVDb250ZXh0KHt9KSxOMT0oKT0+di51c2VDb250ZXh0KEExKSxEMT12LmZvcndhcmRSZWYoKHtjb2xvcjphLHNpemU6byx3aWR0aDp1LGhlaWdodDppLHN0cm9rZVdpZHRoOnMsYWJzb2x1dGVTdHJva2VXaWR0aDpmLG5vblNjYWxpbmdTdHJva2U6ZCxjbGFzc05hbWU6cD0iIixjaGlsZHJlbjp5LGljb25Ob2RlOmI9W10saWNvbjp4PXtub2RlOmIsYWxpYXNlczpbXSxzaXplOjI0fSwuLi5nfSxDKT0+e2NvbnN0e3NpemU6dz0yNCxzdHJva2VXaWR0aDpSPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpFPSExLG5vblNjYWxpbmdTdHJva2U6VD0hMSxjb2xvcjpPPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpBPSIifT1OMSgpPz97fSxOPSEheXx8TzEoZyksW00sWSxIPVtdXT1fMSh4LHtjb2xvcjphPz9PLHdpZHRoOnU/P28/P3csaGVpZ2h0Omk/P28/P3csc3Ryb2tlV2lkdGg6cz8/UixhYnNvbHV0ZVN0cm9rZVdpZHRoOmY/P0Usbm9uU2NhbGluZ1N0cm9rZTpkPz9ULGNsYXNzTmFtZTpJdShBLHApLGhhc0ExMXlQcm9wOk4sYXR0cmlidXRlczpnfSk7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChNLHtyZWY6QywuLi5ZfSxbLi4uSC5tYXAoKFtVLEJdKT0+di5jcmVhdGVFbGVtZW50KFUsQikpLC4uLkFycmF5LmlzQXJyYXkoeSk/eTpbeV1dKX0pO2Z1bmN0aW9uIG90KGEsbz1bXSx1PVtdKXtjb25zdCBpPXR5cGVvZiBhPT0ic3RyaW5nIj9UMShhLG8sdSk6YSxzPXYuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTpmLC4uLmR9LHApPT52LmNyZWF0ZUVsZW1lbnQoRDEse3JlZjpwLGljb246aSxjbGFzc05hbWU6ZiwuLi5kfSkpO3JldHVybiBpLm5hbWUmJihzLmRpc3BsYXlOYW1lPUUxKGkubmFtZSkpLHN9Y29uc3QgU2g9e25hbWU6ImJlbGwiLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIsa2V5OiJ2d3ZidDkifV0sWyJwYXRoIix7ZDoiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiLGtleToiMTFnOXZpIn1dXX07U2gubm9kZTtjb25zdCBDaD1vdChTaCk7Y29uc3QgVGg9e25hbWU6ImNhbGVuZGFyIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik04IDJ2MyIsa2V5OiIxaW9lc24ifV0sWyJwYXRoIix7ZDoiTTE2IDJ2MyIsa2V5OiJvdGwzNDcifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiIsa2V5OiJoMW9pYiJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4IixrZXk6IjFwdWRjdCJ9XV19O1RoLm5vZGU7Y29uc3Qgd2g9b3QoVGgpO2NvbnN0IEVoPXtuYW1lOiJjaGVjayIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXX07RWgubm9kZTtjb25zdCBHdT1vdChFaCk7Y29uc3QgUmg9e25hbWU6ImNoZXZyb24tZG93biIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXX07Umgubm9kZTtjb25zdCBfaD1vdChSaCk7Y29uc3QgT2g9e25hbWU6ImNoZXZyb24tbGVmdCIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJtMTUgMTgtNi02IDYtNiIsa2V5OiIxd25mZzMifV1dfTtPaC5ub2RlO2NvbnN0IGoxPW90KE9oKTtjb25zdCBBaD17bmFtZToiY2hldnJvbi1yaWdodCIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02IixrZXk6Im10aGh3cSJ9XV19O0FoLm5vZGU7Y29uc3QgTTE9b3QoQWgpO2NvbnN0IE5oPXtuYW1lOiJjaXJjbGUtY2hlY2stYmlnIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik0yMS44MDEgMTBBMTAgMTAgMCAxIDEgMTcgMy4zMzUiLGtleToieXBzM2N0In1dLFsicGF0aCIse2Q6Im05IDExIDMgM0wyMiA0IixrZXk6IjFwZmx6bCJ9XV0sYWxpYXNlczpbImNoZWNrLWNpcmNsZSJdfTtOaC5ub2RlO2NvbnN0IHoxPW90KE5oKTtjb25zdCBEaD17bmFtZToiY2lyY2xlLXF1ZXN0aW9uLW1hcmsiLHNpemU6MjQsbm9kZTpbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIsa2V5OiIxdTc3M3MifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSIsa2V5OiJwMzJwMDUifV1dLGFsaWFzZXM6WyJoZWxwLWNpcmNsZSIsImNpcmNsZS1oZWxwIl19O0RoLm5vZGU7Y29uc3QgazE9b3QoRGgpO2NvbnN0IGpoPXtuYW1lOiJjaXJjbGUteCIsc2l6ZToyNCxub2RlOltbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoibTE1IDktNiA2IixrZXk6IjF1emh2ciJ9XSxbInBhdGgiLHtkOiJtOSA5IDYgNiIsa2V5OiJ6MGJpcWYifV1dLGFsaWFzZXM6WyJ4LWNpcmNsZSJdfTtqaC5ub2RlO2NvbnN0IEwxPW90KGpoKTtjb25zdCBNaD17bmFtZToiZG93bmxvYWQiLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTEyIDE1VjMiLGtleToibTlnMXgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XSxbInBhdGgiLHtkOiJtNyAxMCA1IDUgNS01IixrZXk6ImJyc243MCJ9XV19O01oLm5vZGU7Y29uc3QgVTE9b3QoTWgpO2NvbnN0IHpoPXtuYW1lOiJmaWxlLXRleHQiLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiLGtleToiMW9lZmo2In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IixrZXk6Indmc2dyeiJ9XSxbInBhdGgiLHtkOiJNMTAgOUg4IixrZXk6ImIxbXJsciJ9XSxbInBhdGgiLHtkOiJNMTYgMTNIOCIsa2V5OiJ0NGUwMDIifV0sWyJwYXRoIix7ZDoiTTE2IDE3SDgiLGtleToiejF1aDNhIn1dXX07emgubm9kZTtjb25zdCBraD1vdCh6aCk7Y29uc3QgTGg9e25hbWU6ImluYm94IixzaXplOjI0LG5vZGU6W1sicG9seWxpbmUiLHtwb2ludHM6IjIyIDEyIDE2IDEyIDE0IDE1IDEwIDE1IDggMTIgMiAxMiIsa2V5OiJvOTd0OWQifV0sWyJwYXRoIix7ZDoiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIsa2V5OiJvb3Q2bXIifV1dfTtMaC5ub2RlO2NvbnN0IEgxPW90KExoKTtjb25zdCBVaD17bmFtZToibG9hZGVyLWNpcmNsZSIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiLGtleToiMTN6YWxkIn1dXSxhbGlhc2VzOlsibG9hZGVyLTIiXX07VWgubm9kZTtjb25zdCBIaD1vdChVaCk7Y29uc3QgQmg9e25hbWU6Im1pbnVzIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik01IDEyaDE0IixrZXk6IjFheXMwaCJ9XV19O0JoLm5vZGU7Y29uc3QgQjE9b3QoQmgpO2NvbnN0IEloPXtuYW1lOiJtb29uIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIixrZXk6Imtmd3RtIn1dXX07SWgubm9kZTtjb25zdCBJMT1vdChJaCk7Y29uc3QgUGg9e25hbWU6InBlbmNpbCIsc2l6ZToyNCxub2RlOltbInBhdGgiLHtkOiJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIsa2V5OiIxYTh1c3UifV0sWyJwYXRoIix7ZDoibTE1IDUgNCA0IixrZXk6IjFtazd6byJ9XV19O1BoLm5vZGU7Y29uc3QgR2g9b3QoUGgpO2NvbnN0IFZoPXtuYW1lOiJwbHVzIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik01IDEyaDE0IixrZXk6IjFheXMwaCJ9XSxbInBhdGgiLHtkOiJNMTIgNXYxNCIsa2V5OiJzNjk5bGUifV1dfTtWaC5ub2RlO2NvbnN0IFloPW90KFZoKTtjb25zdCBxaD17bmFtZToic2VhcmNoIixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXX07cWgubm9kZTtjb25zdCBYaD1vdChxaCk7Y29uc3QgS2g9e25hbWU6InN1biIsc2l6ZToyNCxub2RlOltbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0IixrZXk6IjRleGlwMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEiLGtleToiMTQ5dDZqIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEiLGtleToicHRiZ3V2In1dLFsicGF0aCIse2Q6Ik0yIDEyaDIiLGtleToiMXQ4ZjhuIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIixrZXk6IjFxOG1qdyJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiLGtleToiMW04eno1In1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSIsa2V5OiIxc2hsY3MifV1dfTtLaC5ub2RlO2NvbnN0IFAxPW90KEtoKTtjb25zdCBRaD17bmFtZToidHJhc2giLHNpemU6MjQsbm9kZTpbWyJwYXRoIix7ZDoiTTEwIDExdjYiLGtleToibmNvMG9tIn1dLFsicGF0aCIse2Q6Ik0xNCAxMXY2IixrZXk6Im91dHYxdSJ9XSxbInBhdGgiLHtkOiJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IixrZXk6Im1peXRyYyJ9XSxbInBhdGgiLHtkOiJNMyA2aDE4IixrZXk6ImQwd20waiJ9XSxbInBhdGgiLHtkOiJNOCA2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MiIsa2V5OiJlNzkxamkifV1dLGFsaWFzZXM6WyJ0cmFzaC0yIl19O1FoLm5vZGU7Y29uc3QgRzE9b3QoUWgpO2NvbnN0IFpoPXtuYW1lOiJ4IixzaXplOjI0LG5vZGU6W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXX07Wmgubm9kZTtjb25zdCBWMT1vdChaaCksRmg9ImxhcmstdWktc2hvd2Nhc2UtdGhlbWUiO2Z1bmN0aW9uIFkxKCl7Y29uc3QgYT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShGaCk7cmV0dXJuIGE9PT0ibGlnaHQifHxhPT09ImRhcmsiP2E6d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQifWZ1bmN0aW9uIHExKCl7Y29uc3RbYSxvXT12LnVzZVN0YXRlKCJsaWdodCIpO3YudXNlRWZmZWN0KCgpPT57Y29uc3Qgcz1ZMSgpO28ocyksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWU9c30sW10pO2Z1bmN0aW9uIHUocyl7byhzKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZT1zLGxvY2FsU3RvcmFnZS5zZXRJdGVtKEZoLHMpfWNvbnN0IGk9YT09PSJkYXJrIjtyZXR1cm4gbS5qc3hzKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnUoaT8ibGlnaHQiOiJkYXJrIiksImFyaWEtbGFiZWwiOmk/IkNodXnhu4NuIHNhbmcgZ2lhbyBkaeG7h24gc8OhbmciOiJDaHV54buDbiBzYW5nIGdpYW8gZGnhu4duIHThu5FpIiwiYXJpYS1wcmVzc2VkIjppLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaC04IGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4zMDAgYmctYnJhbmQtcHJpbWFyeSBweC0yLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjcwMCBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgaG92ZXI6YmctbGFyay1uNTAgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLVt2YXIoLS1mb2N1cy1yaW5nLWNvbG9yKV0iLGNoaWxkcmVuOltpP20uanN4KFAxLHtjbGFzc05hbWU6InNpemUtNCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KTptLmpzeChJMSx7Y2xhc3NOYW1lOiJzaXplLTQiLCJhcmlhLWhpZGRlbiI6InRydWUifSksbS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImhpZGRlbiBzbTppbmxpbmUiLGNoaWxkcmVuOmk/IlPDoW5nIjoiVOG7kWkifSldfSl9ZnVuY3Rpb24gJGgoYSl7dmFyIG8sdSxpPSIiO2lmKHR5cGVvZiBhPT0ic3RyaW5nInx8dHlwZW9mIGE9PSJudW1iZXIiKWkrPWE7ZWxzZSBpZih0eXBlb2YgYT09Im9iamVjdCIpaWYoQXJyYXkuaXNBcnJheShhKSl7dmFyIHM9YS5sZW5ndGg7Zm9yKG89MDtvPHM7bysrKWFbb10mJih1PSRoKGFbb10pKSYmKGkmJihpKz0iICIpLGkrPXUpfWVsc2UgZm9yKHUgaW4gYSlhW3VdJiYoaSYmKGkrPSIgIiksaSs9dSk7cmV0dXJuIGl9ZnVuY3Rpb24gSmgoKXtmb3IodmFyIGEsbyx1PTAsaT0iIixzPWFyZ3VtZW50cy5sZW5ndGg7dTxzO3UrKykoYT1hcmd1bWVudHNbdV0pJiYobz0kaChhKSkmJihpJiYoaSs9IiAiKSxpKz1vKTtyZXR1cm4gaX1jb25zdCBYMT0oYSxvKT0+e2NvbnN0IHU9bmV3IEFycmF5KGEubGVuZ3RoK28ubGVuZ3RoKTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl1W2ldPWFbaV07Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspdVthLmxlbmd0aCtpXT1vW2ldO3JldHVybiB1fSxLMT0oYSxvKT0+KHtjbGFzc0dyb3VwSWQ6YSx2YWxpZGF0b3I6b30pLFdoPShhPW5ldyBNYXAsbz1udWxsLHUpPT4oe25leHRQYXJ0OmEsdmFsaWRhdG9yczpvLGNsYXNzR3JvdXBJZDp1fSksbWk9Ii0iLGVwPVtdLFExPSJhcmJpdHJhcnkuLiIsWjE9YT0+e2NvbnN0IG89JDEoYSkse2NvbmZsaWN0aW5nQ2xhc3NHcm91cHM6dSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6aX09YTtyZXR1cm57Z2V0Q2xhc3NHcm91cElkOmQ9PntpZihkLnN0YXJ0c1dpdGgoIlsiKSYmZC5lbmRzV2l0aCgiXSIpKXJldHVybiBGMShkKTtjb25zdCBwPWQuc3BsaXQobWkpLHk9cFswXT09PSIiJiZwLmxlbmd0aD4xPzE6MDtyZXR1cm4gdHAocCx5LG8pfSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6KGQscCk9PntpZihwKXtjb25zdCB5PWlbZF0sYj11W2RdO3JldHVybiB5P2I/WDEoYix5KTp5OmJ8fGVwfXJldHVybiB1W2RdfHxlcH19fSx0cD0oYSxvLHUpPT57aWYoYS5sZW5ndGgtbz09PTApcmV0dXJuIHUuY2xhc3NHcm91cElkO2NvbnN0IHM9YVtvXSxmPXUubmV4dFBhcnQuZ2V0KHMpO2lmKGYpe2NvbnN0IGI9dHAoYSxvKzEsZik7aWYoYilyZXR1cm4gYn1jb25zdCBkPXUudmFsaWRhdG9ycztpZihkPT09bnVsbClyZXR1cm47Y29uc3QgcD1vPT09MD9hLmpvaW4obWkpOmEuc2xpY2Uobykuam9pbihtaSkseT1kLmxlbmd0aDtmb3IobGV0IGI9MDtiPHk7YisrKXtjb25zdCB4PWRbYl07aWYoeC52YWxpZGF0b3IocCkpcmV0dXJuIHguY2xhc3NHcm91cElkfX0sRjE9YT0+YS5zbGljZSgxLC0xKS5pbmRleE9mKCI6Iik9PT0tMT92b2lkIDA6KCgpPT57Y29uc3Qgbz1hLnNsaWNlKDEsLTEpLHU9by5pbmRleE9mKCI6IiksaT1vLnNsaWNlKDAsdSk7cmV0dXJuIGk/UTEraTp2b2lkIDB9KSgpLCQxPWE9Pntjb25zdHt0aGVtZTpvLGNsYXNzR3JvdXBzOnV9PWE7cmV0dXJuIEoxKHUsbyl9LEoxPShhLG8pPT57Y29uc3QgdT1XaCgpO2Zvcihjb25zdCBpIGluIGEpe2NvbnN0IHM9YVtpXTtWdShzLHUsaSxvKX1yZXR1cm4gdX0sVnU9KGEsbyx1LGkpPT57Y29uc3Qgcz1hLmxlbmd0aDtmb3IobGV0IGY9MDtmPHM7ZisrKXtjb25zdCBkPWFbZl07VzEoZCxvLHUsaSl9fSxXMT0oYSxvLHUsaSk9PntpZih0eXBlb2YgYT09InN0cmluZyIpe2VDKGEsbyx1KTtyZXR1cm59aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpe3RDKGEsbyx1LGkpO3JldHVybn1uQyhhLG8sdSxpKX0sZUM9KGEsbyx1KT0+e2NvbnN0IGk9YT09PSIiP286bnAobyxhKTtpLmNsYXNzR3JvdXBJZD11fSx0Qz0oYSxvLHUsaSk9PntpZihsQyhhKSl7VnUoYShpKSxvLHUsaSk7cmV0dXJufW8udmFsaWRhdG9ycz09PW51bGwmJihvLnZhbGlkYXRvcnM9W10pLG8udmFsaWRhdG9ycy5wdXNoKEsxKHUsYSkpfSxuQz0oYSxvLHUsaSk9Pntjb25zdCBzPU9iamVjdC5lbnRyaWVzKGEpLGY9cy5sZW5ndGg7Zm9yKGxldCBkPTA7ZDxmO2QrKyl7Y29uc3RbcCx5XT1zW2RdO1Z1KHksbnAobyxwKSx1LGkpfX0sbnA9KGEsbyk9PntsZXQgdT1hO2NvbnN0IGk9by5zcGxpdChtaSkscz1pLmxlbmd0aDtmb3IobGV0IGY9MDtmPHM7ZisrKXtjb25zdCBkPWlbZl07bGV0IHA9dS5uZXh0UGFydC5nZXQoZCk7cHx8KHA9V2goKSx1Lm5leHRQYXJ0LnNldChkLHApKSx1PXB9cmV0dXJuIHV9LGxDPWE9PiJpc1RoZW1lR2V0dGVyImluIGEmJmEuaXNUaGVtZUdldHRlcj09PSEwLGFDPWE9PntpZihhPDEpcmV0dXJue2dldDooKT0+e30sc2V0OigpPT57fX07bGV0IG89MCx1PU9iamVjdC5jcmVhdGUobnVsbCksaT1PYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IHM9KGYsZCk9Pnt1W2ZdPWQsbysrLG8+YSYmKG89MCxpPXUsdT1PYmplY3QuY3JlYXRlKG51bGwpKX07cmV0dXJue2dldChmKXtsZXQgZD11W2ZdO2lmKGQhPT12b2lkIDApcmV0dXJuIGQ7aWYoKGQ9aVtmXSkhPT12b2lkIDApcmV0dXJuIHMoZixkKSxkfSxzZXQoZixkKXtmIGluIHU/dVtmXT1kOnMoZixkKX19fSxZdT0iISIsbHA9IjoiLG9DPVtdLGFwPShhLG8sdSxpLHMpPT4oe21vZGlmaWVyczphLGhhc0ltcG9ydGFudE1vZGlmaWVyOm8sYmFzZUNsYXNzTmFtZTp1LG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246aSxpc0V4dGVybmFsOnN9KSxyQz1hPT57Y29uc3R7cHJlZml4Om8sZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWU6dX09YTtsZXQgaT1zPT57Y29uc3QgZj1bXTtsZXQgZD0wLHA9MCx5PTAsYjtjb25zdCB4PXMubGVuZ3RoO2ZvcihsZXQgRT0wO0U8eDtFKyspe2NvbnN0IFQ9c1tFXTtpZihkPT09MCYmcD09PTApe2lmKFQ9PT1scCl7Zi5wdXNoKHMuc2xpY2UoeSxFKSkseT1FKzE7Y29udGludWV9aWYoVD09PSIvIil7Yj1FO2NvbnRpbnVlfX1UPT09IlsiP2QrKzpUPT09Il0iP2QtLTpUPT09IigiP3ArKzpUPT09IikiJiZwLS19Y29uc3QgZz1mLmxlbmd0aD09PTA/czpzLnNsaWNlKHkpO2xldCBDPWcsdz0hMTtnLmVuZHNXaXRoKFl1KT8oQz1nLnNsaWNlKDAsLTEpLHc9ITApOmcuc3RhcnRzV2l0aChZdSkmJihDPWcuc2xpY2UoMSksdz0hMCk7Y29uc3QgUj1iJiZiPnk/Yi15OnZvaWQgMDtyZXR1cm4gYXAoZix3LEMsUil9O2lmKG8pe2NvbnN0IHM9bytscCxmPWk7aT1kPT5kLnN0YXJ0c1dpdGgocyk/ZihkLnNsaWNlKHMubGVuZ3RoKSk6YXAob0MsITEsZCx2b2lkIDAsITApfWlmKHUpe2NvbnN0IHM9aTtpPWY9PnUoe2NsYXNzTmFtZTpmLHBhcnNlQ2xhc3NOYW1lOnN9KX1yZXR1cm4gaX0saUM9YT0+e2NvbnN0IG89bmV3IE1hcDtyZXR1cm4gYS5vcmRlclNlbnNpdGl2ZU1vZGlmaWVycy5mb3JFYWNoKCh1LGkpPT57by5zZXQodSwxZTYraSl9KSx1PT57Y29uc3QgaT1bXTtsZXQgcz1bXTtmb3IobGV0IGY9MDtmPHUubGVuZ3RoO2YrKyl7Y29uc3QgZD11W2ZdLHA9ZFswXT09PSJbIix5PW8uaGFzKGQpO3B8fHk/KHMubGVuZ3RoPjAmJihzLnNvcnQoKSxpLnB1c2goLi4ucykscz1bXSksaS5wdXNoKGQpKTpzLnB1c2goZCl9cmV0dXJuIHMubGVuZ3RoPjAmJihzLnNvcnQoKSxpLnB1c2goLi4ucykpLGl9fSxjQz1hPT4oe2NhY2hlOmFDKGEuY2FjaGVTaXplKSxwYXJzZUNsYXNzTmFtZTpyQyhhKSxzb3J0TW9kaWZpZXJzOmlDKGEpLHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwSWRzOnVDKGEpLC4uLloxKGEpfSksdUM9YT0+e2NvbnN0IG89T2JqZWN0LmNyZWF0ZShudWxsKSx1PWEucG9zdGZpeExvb2t1cENsYXNzR3JvdXBzO2lmKHUpZm9yKGxldCBpPTA7aTx1Lmxlbmd0aDtpKyspb1t1W2ldXT0hMDtyZXR1cm4gb30sc0M9L1xzKy8sZkM9KGEsbyk9Pntjb25zdHtwYXJzZUNsYXNzTmFtZTp1LGdldENsYXNzR3JvdXBJZDppLGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkczpzLHNvcnRNb2RpZmllcnM6Zixwb3N0Zml4TG9va3VwQ2xhc3NHcm91cElkczpkfT1vLHA9W10seT1hLnRyaW0oKS5zcGxpdChzQyk7bGV0IGI9IiI7Zm9yKGxldCB4PXkubGVuZ3RoLTE7eD49MDt4LT0xKXtjb25zdCBnPXlbeF0se2lzRXh0ZXJuYWw6Qyxtb2RpZmllcnM6dyxoYXNJbXBvcnRhbnRNb2RpZmllcjpSLGJhc2VDbGFzc05hbWU6RSxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOlR9PXUoZyk7aWYoQyl7Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpO2NvbnRpbnVlfWxldCBPPSEhVCxBO2lmKE8pe2NvbnN0IFU9RS5zdWJzdHJpbmcoMCxUKTtBPWkoVSk7Y29uc3QgQj1BJiZkW0FdP2koRSk6dm9pZCAwO0ImJkIhPT1BJiYoQT1CLE89ITEpfWVsc2UgQT1pKEUpO2lmKCFBKXtpZighTyl7Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpO2NvbnRpbnVlfWlmKEE9aShFKSwhQSl7Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpO2NvbnRpbnVlfU89ITF9Y29uc3QgTj13Lmxlbmd0aD09PTA/IiI6dy5sZW5ndGg9PT0xP3dbMF06Zih3KS5qb2luKCI6IiksTT1SP04rWXU6TixZPU0rQTtpZihwLmluZGV4T2YoWSk+LTEpY29udGludWU7cC5wdXNoKFkpO2NvbnN0IEg9cyhBLE8pO2ZvcihsZXQgVT0wO1U8SC5sZW5ndGg7KytVKXtjb25zdCBCPUhbVV07cC5wdXNoKE0rQil9Yj1nKyhiLmxlbmd0aD4wPyIgIitiOmIpfXJldHVybiBifSxkQz0oLi4uYSk9PntsZXQgbz0wLHUsaSxzPSIiO2Zvcig7bzxhLmxlbmd0aDspKHU9YVtvKytdKSYmKGk9b3AodSkpJiYocyYmKHMrPSIgIikscys9aSk7cmV0dXJuIHN9LG9wPWE9PntpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGE7bGV0IG8sdT0iIjtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKylhW2ldJiYobz1vcChhW2ldKSkmJih1JiYodSs9IiAiKSx1Kz1vKTtyZXR1cm4gdX0sbUM9KGEsLi4ubyk9PntsZXQgdSxpLHMsZjtjb25zdCBkPXk9Pntjb25zdCBiPW8ucmVkdWNlKCh4LGcpPT5nKHgpLGEoKSk7cmV0dXJuIHU9Y0MoYiksaT11LmNhY2hlLmdldCxzPXUuY2FjaGUuc2V0LGY9cCxwKHkpfSxwPXk9Pntjb25zdCBiPWkoeSk7aWYoYilyZXR1cm4gYjtjb25zdCB4PWZDKHksdSk7cmV0dXJuIHMoeSx4KSx4fTtyZXR1cm4gZj1kLCguLi55KT0+ZihkQyguLi55KSl9LGhDPVtdLHB0PWE9Pntjb25zdCBvPXU9PnVbYV18fGhDO3JldHVybiBvLmlzVGhlbWVHZXR0ZXI9ITAsby50aGVtZUtleT1hLG99LHJwPS9eXFsoPzooXHdbXHctXSopOik/KC4rKVxdJC9pLGlwPS9eXCgoPzooXHdbXHctXSopOik/KC4rKVwpJC9pLHBDPS9eXGQrKD86XC5cZCspP1wvXGQrKD86XC5cZCspPyQvLHZDPS9eKFxkKyhcLlxkKyk/KT8oeHN8c218bWR8bGd8eGwpJC8sZ0M9L1xkKyglfHB4fHI/ZW18W3NkbF0/dihbaHdpYl18bWlufG1heCl8cHR8cGN8aW58Y218bW18Y2FwfGNofGV4fHI/bGh8Y3Eod3xofGl8YnxtaW58bWF4KSl8XGIoY2FsY3xtaW58bWF4fGNsYW1wKVwoLitcKXxeMCQvLHlDPS9eKHJnYmE/fGhzbGE/fGh3Ynwob2spPyhsYWJ8bGNoKXxjb2xvci1taXh8Y29sb3J8bGlnaHQtZGFyaylcKC4rXCkkLyxiQz0vXihpbnNldF8pPy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyx4Qz0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvLE5sPWE9PnBDLnRlc3QoYSksQWU9YT0+ISFhJiYhTnVtYmVyLmlzTmFOKE51bWJlcihhKSksa249YT0+ISFhJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihhKSkscXU9YT0+YS5lbmRzV2l0aCgiJSIpJiZBZShhLnNsaWNlKDAsLTEpKSxXbj1hPT52Qy50ZXN0KGEpLGNwPSgpPT4hMCxTQz1hPT5nQy50ZXN0KGEpJiYheUMudGVzdChhKSxYdT0oKT0+ITEsQ0M9YT0+YkMudGVzdChhKSxUQz1hPT54Qy50ZXN0KGEpLHdDPWE9PiFkZShhKSYmIXBlKGEpLEVDPWE9PmEuc3RhcnRzV2l0aCgiQGNvbnRhaW5lciIpJiYoYVsxMF09PT0iLyImJmFbMTFdIT09dm9pZCAwfHxhWzExXT09PSJzIiYmYVsxNl0hPT12b2lkIDAmJmEuc3RhcnRzV2l0aCgiLXNpemUvIiwxMCl8fGFbMTFdPT09Im4iJiZhWzE4XSE9PXZvaWQgMCYmYS5zdGFydHNXaXRoKCItbm9ybWFsLyIsMTApKSxSQz1hPT5EbChhLGhwLFh1KSxkZT1hPT5ycC50ZXN0KGEpLGhhPWE9PkRsKGEscHAsU0MpLHVwPWE9PkRsKGEsekMsQWUpLF9DPWE9PkRsKGEsZ3AsY3ApLE9DPWE9PkRsKGEsdnAsWHUpLHNwPWE9PkRsKGEsZHAsWHUpLEFDPWE9PkRsKGEsbXAsVEMpLGhpPWE9PkRsKGEseXAsQ0MpLHBlPWE9PmlwLnRlc3QoYSksbnI9YT0+cGEoYSxwcCksTkM9YT0+cGEoYSx2cCksZnA9YT0+cGEoYSxkcCksREM9YT0+cGEoYSxocCksakM9YT0+cGEoYSxtcCkscGk9YT0+cGEoYSx5cCwhMCksTUM9YT0+cGEoYSxncCwhMCksRGw9KGEsbyx1KT0+e2NvbnN0IGk9cnAuZXhlYyhhKTtyZXR1cm4gaT9pWzFdP28oaVsxXSk6dShpWzJdKTohMX0scGE9KGEsbyx1PSExKT0+e2NvbnN0IGk9aXAuZXhlYyhhKTtyZXR1cm4gaT9pWzFdP28oaVsxXSk6dTohMX0sZHA9YT0+YT09PSJwb3NpdGlvbiJ8fGE9PT0icGVyY2VudGFnZSIsbXA9YT0+YT09PSJpbWFnZSJ8fGE9PT0idXJsIixocD1hPT5hPT09Imxlbmd0aCJ8fGE9PT0ic2l6ZSJ8fGE9PT0iYmctc2l6ZSIscHA9YT0+YT09PSJsZW5ndGgiLHpDPWE9PmE9PT0ibnVtYmVyIix2cD1hPT5hPT09ImZhbWlseS1uYW1lIixncD1hPT5hPT09Im51bWJlciJ8fGE9PT0id2VpZ2h0Iix5cD1hPT5hPT09InNoYWRvdyIsa0M9bUMoKCk9Pntjb25zdCBhPXB0KCJjb2xvciIpLG89cHQoImZvbnQiKSx1PXB0KCJ0ZXh0IiksaT1wdCgiZm9udC13ZWlnaHQiKSxzPXB0KCJ0cmFja2luZyIpLGY9cHQoImxlYWRpbmciKSxkPXB0KCJicmVha3BvaW50IikscD1wdCgiY29udGFpbmVyIikseT1wdCgic3BhY2luZyIpLGI9cHQoInJhZGl1cyIpLHg9cHQoInNoYWRvdyIpLGc9cHQoImluc2V0LXNoYWRvdyIpLEM9cHQoInRleHQtc2hhZG93Iiksdz1wdCgiZHJvcC1zaGFkb3ciKSxSPXB0KCJibHVyIiksRT1wdCgicGVyc3BlY3RpdmUiKSxUPXB0KCJhc3BlY3QiKSxPPXB0KCJlYXNlIiksQT1wdCgiYW5pbWF0ZSIpLE49KCk9PlsiYXV0byIsImF2b2lkIiwiYWxsIiwiYXZvaWQtcGFnZSIsInBhZ2UiLCJsZWZ0IiwicmlnaHQiLCJjb2x1bW4iXSxNPSgpPT5bImNlbnRlciIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcC1sZWZ0IiwibGVmdC10b3AiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJib3R0b20tcmlnaHQiLCJyaWdodC1ib3R0b20iLCJib3R0b20tbGVmdCIsImxlZnQtYm90dG9tIl0sWT0oKT0+Wy4uLk0oKSxwZSxkZV0sSD0oKT0+WyJhdXRvIiwiaGlkZGVuIiwiY2xpcCIsInZpc2libGUiLCJzY3JvbGwiXSxVPSgpPT5bImF1dG8iLCJjb250YWluIiwibm9uZSJdLEI9KCk9PltwZSxkZSx5XSxKPSgpPT5bTmwsImZ1bGwiLCJhdXRvIiwuLi5CKCldLFc9KCk9Pltrbiwibm9uZSIsInN1YmdyaWQiLHBlLGRlXSxuZT0oKT0+WyJhdXRvIix7c3BhbjpbImZ1bGwiLGtuLHBlLGRlXX0sa24scGUsZGVdLGVlPSgpPT5ba24sImF1dG8iLHBlLGRlXSxjZT0oKT0+WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLHBlLGRlXSxtZT0oKT0+WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJldHdlZW4iLCJhcm91bmQiLCJldmVubHkiLCJzdHJldGNoIiwiYmFzZWxpbmUiLCJjZW50ZXItc2FmZSIsImVuZC1zYWZlIl0saGU9KCk9Plsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIiwiY2VudGVyLXNhZmUiLCJlbmQtc2FmZSJdLFA9KCk9PlsiYXV0byIsLi4uQigpXSwkPSgpPT5bTmwsImF1dG8iLCJmdWxsIiwiZHZ3IiwiZHZoIiwibHZ3IiwibHZoIiwic3Z3Iiwic3ZoIiwibWluIiwibWF4IiwiZml0IiwuLi5CKCldLEY9KCk9PltwLE5sLCJzY3JlZW4iLCJmdWxsIiwiZHZ3IiwibHZ3Iiwic3Z3IiwibWluIiwibWF4IiwiZml0IiwuLi5CKCldLHJlPSgpPT5bTmwsInNjcmVlbiIsImZ1bGwiLCJsaCIsImR2aCIsImx2aCIsInN2aCIsIm1pbiIsIm1heCIsImZpdCIsLi4uQigpXSxxPSgpPT5bYSxwZSxkZV0seGU9KCk9PlsuLi5NKCksZnAsc3Ase3Bvc2l0aW9uOltwZSxkZV19XSxqZT0oKT0+WyJuby1yZXBlYXQiLHtyZXBlYXQ6WyIiLCJ4IiwieSIsInNwYWNlIiwicm91bmQiXX1dLFllPSgpPT5bImF1dG8iLCJjb3ZlciIsImNvbnRhaW4iLERDLFJDLHtzaXplOltwZSxkZV19XSxEPSgpPT5bcXUsbnIsaGFdLFg9KCk9PlsiIiwibm9uZSIsImZ1bGwiLGIscGUsZGVdLEs9KCk9PlsiIixBZSxucixoYV0sYWU9KCk9Plsic29saWQiLCJkYXNoZWQiLCJkb3R0ZWQiLCJkb3VibGUiXSx5ZT0oKT0+WyJub3JtYWwiLCJtdWx0aXBseSIsInNjcmVlbiIsIm92ZXJsYXkiLCJkYXJrZW4iLCJsaWdodGVuIiwiY29sb3ItZG9kZ2UiLCJjb2xvci1idXJuIiwiaGFyZC1saWdodCIsInNvZnQtbGlnaHQiLCJkaWZmZXJlbmNlIiwiZXhjbHVzaW9uIiwiaHVlIiwic2F0dXJhdGlvbiIsImNvbG9yIiwibHVtaW5vc2l0eSJdLHNlPSgpPT5bQWUscXUsZnAsc3BdLGxlPSgpPT5bIiIsIm5vbmUiLFIscGUsZGVdLHRlPSgpPT5bIm5vbmUiLEFlLHBlLGRlXSxpZT0oKT0+WyJub25lIixBZSxwZSxkZV0sYmU9KCk9PltBZSxwZSxkZV0sd2U9KCk9PltObCwiZnVsbCIsLi4uQigpXTtyZXR1cm57Y2FjaGVTaXplOjUwMCx0aGVtZTp7YW5pbWF0ZTpbInNwaW4iLCJwaW5nIiwicHVsc2UiLCJib3VuY2UiXSxhc3BlY3Q6WyJ2aWRlbyJdLGJsdXI6W1duXSxicmVha3BvaW50OltXbl0sY29sb3I6W2NwXSxjb250YWluZXI6W1duXSwiZHJvcC1zaGFkb3ciOltXbl0sZWFzZTpbImluIiwib3V0IiwiaW4tb3V0Il0sZm9udDpbd0NdLCJmb250LXdlaWdodCI6WyJ0aGluIiwiZXh0cmFsaWdodCIsImxpZ2h0Iiwibm9ybWFsIiwibWVkaXVtIiwic2VtaWJvbGQiLCJib2xkIiwiZXh0cmFib2xkIiwiYmxhY2siXSwiaW5zZXQtc2hhZG93IjpbV25dLGxlYWRpbmc6WyJub25lIiwidGlnaHQiLCJzbnVnIiwibm9ybWFsIiwicmVsYXhlZCIsImxvb3NlIl0scGVyc3BlY3RpdmU6WyJkcmFtYXRpYyIsIm5lYXIiLCJub3JtYWwiLCJtaWRyYW5nZSIsImRpc3RhbnQiLCJub25lIl0scmFkaXVzOltXbl0sc2hhZG93OltXbl0sc3BhY2luZzpbInB4IixBZV0sdGV4dDpbV25dLCJ0ZXh0LXNoYWRvdyI6W1duXSx0cmFja2luZzpbInRpZ2h0ZXIiLCJ0aWdodCIsIm5vcm1hbCIsIndpZGUiLCJ3aWRlciIsIndpZGVzdCJdfSxjbGFzc0dyb3Vwczp7YXNwZWN0Olt7YXNwZWN0OlsiYXV0byIsInNxdWFyZSIsTmwsZGUscGUsVF19XSxjb250YWluZXI6WyJjb250YWluZXIiXSwiY29udGFpbmVyLXR5cGUiOlt7IkBjb250YWluZXIiOlsiIiwibm9ybWFsIiwic2l6ZSIscGUsZGVdfV0sImNvbnRhaW5lci1uYW1lZCI6W0VDXSxjb2x1bW5zOlt7Y29sdW1uczpbQWUsImF1dG8iLGRlLHBlLHBdfV0sImJyZWFrLWFmdGVyIjpbeyJicmVhay1hZnRlciI6TigpfV0sImJyZWFrLWJlZm9yZSI6W3siYnJlYWstYmVmb3JlIjpOKCl9XSwiYnJlYWstaW5zaWRlIjpbeyJicmVhay1pbnNpZGUiOlsiYXV0byIsImF2b2lkIiwiYXZvaWQtcGFnZSIsImF2b2lkLWNvbHVtbiJdfV0sImJveC1kZWNvcmF0aW9uIjpbeyJib3gtZGVjb3JhdGlvbiI6WyJzbGljZSIsImNsb25lIl19XSxib3g6W3tib3g6WyJib3JkZXIiLCJjb250ZW50Il19XSxkaXNwbGF5OlsiYmxvY2siLCJpbmxpbmUtYmxvY2siLCJpbmxpbmUiLCJmbGV4IiwiaW5saW5lLWZsZXgiLCJ0YWJsZSIsImlubGluZS10YWJsZSIsInRhYmxlLWNhcHRpb24iLCJ0YWJsZS1jZWxsIiwidGFibGUtY29sdW1uIiwidGFibGUtY29sdW1uLWdyb3VwIiwidGFibGUtZm9vdGVyLWdyb3VwIiwidGFibGUtaGVhZGVyLWdyb3VwIiwidGFibGUtcm93LWdyb3VwIiwidGFibGUtcm93IiwiZmxvdy1yb290IiwiZ3JpZCIsImlubGluZS1ncmlkIiwiY29udGVudHMiLCJsaXN0LWl0ZW0iLCJoaWRkZW4iXSxzcjpbInNyLW9ubHkiLCJub3Qtc3Itb25seSJdLGZsb2F0Olt7ZmxvYXQ6WyJyaWdodCIsImxlZnQiLCJub25lIiwic3RhcnQiLCJlbmQiXX1dLGNsZWFyOlt7Y2xlYXI6WyJsZWZ0IiwicmlnaHQiLCJib3RoIiwibm9uZSIsInN0YXJ0IiwiZW5kIl19XSxpc29sYXRpb246WyJpc29sYXRlIiwiaXNvbGF0aW9uLWF1dG8iXSwib2JqZWN0LWZpdCI6W3tvYmplY3Q6WyJjb250YWluIiwiY292ZXIiLCJmaWxsIiwibm9uZSIsInNjYWxlLWRvd24iXX1dLCJvYmplY3QtcG9zaXRpb24iOlt7b2JqZWN0OlkoKX1dLG92ZXJmbG93Olt7b3ZlcmZsb3c6SCgpfV0sIm92ZXJmbG93LXgiOlt7Im92ZXJmbG93LXgiOkgoKX1dLCJvdmVyZmxvdy15IjpbeyJvdmVyZmxvdy15IjpIKCl9XSxvdmVyc2Nyb2xsOlt7b3ZlcnNjcm9sbDpVKCl9XSwib3ZlcnNjcm9sbC14IjpbeyJvdmVyc2Nyb2xsLXgiOlUoKX1dLCJvdmVyc2Nyb2xsLXkiOlt7Im92ZXJzY3JvbGwteSI6VSgpfV0scG9zaXRpb246WyJzdGF0aWMiLCJmaXhlZCIsImFic29sdXRlIiwicmVsYXRpdmUiLCJzdGlja3kiXSxpbnNldDpbe2luc2V0OkooKX1dLCJpbnNldC14IjpbeyJpbnNldC14IjpKKCl9XSwiaW5zZXQteSI6W3siaW5zZXQteSI6SigpfV0sc3RhcnQ6W3siaW5zZXQtcyI6SigpLHN0YXJ0OkooKX1dLGVuZDpbeyJpbnNldC1lIjpKKCksZW5kOkooKX1dLCJpbnNldC1icyI6W3siaW5zZXQtYnMiOkooKX1dLCJpbnNldC1iZSI6W3siaW5zZXQtYmUiOkooKX1dLHRvcDpbe3RvcDpKKCl9XSxyaWdodDpbe3JpZ2h0OkooKX1dLGJvdHRvbTpbe2JvdHRvbTpKKCl9XSxsZWZ0Olt7bGVmdDpKKCl9XSx2aXNpYmlsaXR5OlsidmlzaWJsZSIsImludmlzaWJsZSIsImNvbGxhcHNlIl0sejpbe3o6W2tuLCJhdXRvIixwZSxkZV19XSxiYXNpczpbe2Jhc2lzOltObCwiZnVsbCIsImF1dG8iLHAsLi4uQigpXX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Olsicm93Iiwicm93LXJldmVyc2UiLCJjb2wiLCJjb2wtcmV2ZXJzZSJdfV0sImZsZXgtd3JhcCI6W3tmbGV4Olsibm93cmFwIiwid3JhcCIsIndyYXAtcmV2ZXJzZSJdfV0sZmxleDpbe2ZsZXg6W0FlLE5sLCJhdXRvIiwiaW5pdGlhbCIsIm5vbmUiLGRlXX1dLGdyb3c6W3tncm93OlsiIixBZSxwZSxkZV19XSxzaHJpbms6W3tzaHJpbms6WyIiLEFlLHBlLGRlXX1dLG9yZGVyOlt7b3JkZXI6W2tuLCJmaXJzdCIsImxhc3QiLCJub25lIixwZSxkZV19XSwiZ3JpZC1jb2xzIjpbeyJncmlkLWNvbHMiOlcoKX1dLCJjb2wtc3RhcnQtZW5kIjpbe2NvbDpuZSgpfV0sImNvbC1zdGFydCI6W3siY29sLXN0YXJ0IjplZSgpfV0sImNvbC1lbmQiOlt7ImNvbC1lbmQiOmVlKCl9XSwiZ3JpZC1yb3dzIjpbeyJncmlkLXJvd3MiOlcoKX1dLCJyb3ctc3RhcnQtZW5kIjpbe3JvdzpuZSgpfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjplZSgpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOmVlKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOlsicm93IiwiY29sIiwiZGVuc2UiLCJyb3ctZGVuc2UiLCJjb2wtZGVuc2UiXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6Y2UoKX1dLCJhdXRvLXJvd3MiOlt7ImF1dG8tcm93cyI6Y2UoKX1dLGdhcDpbe2dhcDpCKCl9XSwiZ2FwLXgiOlt7ImdhcC14IjpCKCl9XSwiZ2FwLXkiOlt7ImdhcC15IjpCKCl9XSwianVzdGlmeS1jb250ZW50Ijpbe2p1c3RpZnk6Wy4uLm1lKCksIm5vcm1hbCJdfV0sImp1c3RpZnktaXRlbXMiOlt7Imp1c3RpZnktaXRlbXMiOlsuLi5oZSgpLCJub3JtYWwiXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6WyJhdXRvIiwuLi5oZSgpXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6WyJub3JtYWwiLC4uLm1lKCldfV0sImFsaWduLWl0ZW1zIjpbe2l0ZW1zOlsuLi5oZSgpLHtiYXNlbGluZTpbIiIsImxhc3QiXX1dfV0sImFsaWduLXNlbGYiOlt7c2VsZjpbImF1dG8iLC4uLmhlKCkse2Jhc2VsaW5lOlsiIiwibGFzdCJdfV19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6bWUoKX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsuLi5oZSgpLCJiYXNlbGluZSJdfV0sInBsYWNlLXNlbGYiOlt7InBsYWNlLXNlbGYiOlsiYXV0byIsLi4uaGUoKV19XSxwOlt7cDpCKCl9XSxweDpbe3B4OkIoKX1dLHB5Olt7cHk6QigpfV0scHM6W3twczpCKCl9XSxwZTpbe3BlOkIoKX1dLHBiczpbe3BiczpCKCl9XSxwYmU6W3twYmU6QigpfV0scHQ6W3twdDpCKCl9XSxwcjpbe3ByOkIoKX1dLHBiOlt7cGI6QigpfV0scGw6W3twbDpCKCl9XSxtOlt7bTpQKCl9XSxteDpbe214OlAoKX1dLG15Olt7bXk6UCgpfV0sbXM6W3ttczpQKCl9XSxtZTpbe21lOlAoKX1dLG1iczpbe21iczpQKCl9XSxtYmU6W3ttYmU6UCgpfV0sbXQ6W3ttdDpQKCl9XSxtcjpbe21yOlAoKX1dLG1iOlt7bWI6UCgpfV0sbWw6W3ttbDpQKCl9XSwic3BhY2UteCI6W3sic3BhY2UteCI6QigpfV0sInNwYWNlLXgtcmV2ZXJzZSI6WyJzcGFjZS14LXJldmVyc2UiXSwic3BhY2UteSI6W3sic3BhY2UteSI6QigpfV0sInNwYWNlLXktcmV2ZXJzZSI6WyJzcGFjZS15LXJldmVyc2UiXSxzaXplOlt7c2l6ZTokKCl9XSwiaW5saW5lLXNpemUiOlt7aW5saW5lOlsiYXV0byIsLi4uRigpXX1dLCJtaW4taW5saW5lLXNpemUiOlt7Im1pbi1pbmxpbmUiOlsiYXV0byIsLi4uRigpXX1dLCJtYXgtaW5saW5lLXNpemUiOlt7Im1heC1pbmxpbmUiOlsibm9uZSIsLi4uRigpXX1dLCJibG9jay1zaXplIjpbe2Jsb2NrOlsiYXV0byIsLi4ucmUoKV19XSwibWluLWJsb2NrLXNpemUiOlt7Im1pbi1ibG9jayI6WyJhdXRvIiwuLi5yZSgpXX1dLCJtYXgtYmxvY2stc2l6ZSI6W3sibWF4LWJsb2NrIjpbIm5vbmUiLC4uLnJlKCldfV0sdzpbe3c6W3AsInNjcmVlbiIsLi4uJCgpXX1dLCJtaW4tdyI6W3sibWluLXciOltwLCJzY3JlZW4iLCJub25lIiwuLi4kKCldfV0sIm1heC13IjpbeyJtYXgtdyI6W3AsInNjcmVlbiIsIm5vbmUiLCJwcm9zZSIse3NjcmVlbjpbZF19LC4uLiQoKV19XSxoOlt7aDpbInNjcmVlbiIsImxoIiwuLi4kKCldfV0sIm1pbi1oIjpbeyJtaW4taCI6WyJzY3JlZW4iLCJsaCIsIm5vbmUiLC4uLiQoKV19XSwibWF4LWgiOlt7Im1heC1oIjpbInNjcmVlbiIsImxoIiwibm9uZSIsLi4uJCgpXX1dLCJmb250LXNpemUiOlt7dGV4dDpbImJhc2UiLHUsbnIsaGFdfV0sImZvbnQtc21vb3RoaW5nIjpbImFudGlhbGlhc2VkIiwic3VicGl4ZWwtYW50aWFsaWFzZWQiXSwiZm9udC1zdHlsZSI6WyJpdGFsaWMiLCJub3QtaXRhbGljIl0sImZvbnQtd2VpZ2h0Ijpbe2ZvbnQ6W2ksTUMsX0NdfV0sImZvbnQtc3RyZXRjaCI6W3siZm9udC1zdHJldGNoIjpbInVsdHJhLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsImNvbmRlbnNlZCIsInNlbWktY29uZGVuc2VkIiwibm9ybWFsIiwic2VtaS1leHBhbmRlZCIsImV4cGFuZGVkIiwiZXh0cmEtZXhwYW5kZWQiLCJ1bHRyYS1leHBhbmRlZCIscXUsZGVdfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W05DLE9DLG9dfV0sImZvbnQtZmVhdHVyZXMiOlt7ImZvbnQtZmVhdHVyZXMiOltkZV19XSwiZnZuLW5vcm1hbCI6WyJub3JtYWwtbnVtcyJdLCJmdm4tb3JkaW5hbCI6WyJvcmRpbmFsIl0sImZ2bi1zbGFzaGVkLXplcm8iOlsic2xhc2hlZC16ZXJvIl0sImZ2bi1maWd1cmUiOlsibGluaW5nLW51bXMiLCJvbGRzdHlsZS1udW1zIl0sImZ2bi1zcGFjaW5nIjpbInByb3BvcnRpb25hbC1udW1zIiwidGFidWxhci1udW1zIl0sImZ2bi1mcmFjdGlvbiI6WyJkaWFnb25hbC1mcmFjdGlvbnMiLCJzdGFja2VkLWZyYWN0aW9ucyJdLHRyYWNraW5nOlt7dHJhY2tpbmc6W3MscGUsZGVdfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOltBZSwibm9uZSIscGUsdXBdfV0sbGVhZGluZzpbe2xlYWRpbmc6WyJub25lIixmLC4uLkIoKV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6WyJub25lIixwZSxkZV19XSwibGlzdC1zdHlsZS1wb3NpdGlvbiI6W3tsaXN0OlsiaW5zaWRlIiwib3V0c2lkZSJdfV0sImxpc3Qtc3R5bGUtdHlwZSI6W3tsaXN0OlsiZGlzYyIsImRlY2ltYWwiLCJub25lIixwZSxkZV19XSwidGV4dC1hbGlnbm1lbnQiOlt7dGV4dDpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImp1c3RpZnkiLCJzdGFydCIsImVuZCJdfV0sInBsYWNlaG9sZGVyLWNvbG9yIjpbe3BsYWNlaG9sZGVyOnEoKX1dLCJ0ZXh0LWNvbG9yIjpbe3RleHQ6cSgpfV0sInRleHQtZGVjb3JhdGlvbiI6WyJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCIsIm5vLXVuZGVybGluZSJdLCJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOlt7ZGVjb3JhdGlvbjpbLi4uYWUoKSwid2F2eSJdfV0sInRleHQtZGVjb3JhdGlvbi10aGlja25lc3MiOlt7ZGVjb3JhdGlvbjpbQWUsImZyb20tZm9udCIsImF1dG8iLHBlLGhhXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpxKCl9XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6W0FlLCJhdXRvIixwZSxkZV19XSwidGV4dC10cmFuc2Zvcm0iOlsidXBwZXJjYXNlIiwibG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSIsIm5vcm1hbC1jYXNlIl0sInRleHQtb3ZlcmZsb3ciOlsidHJ1bmNhdGUiLCJ0ZXh0LWVsbGlwc2lzIiwidGV4dC1jbGlwIl0sInRleHQtd3JhcCI6W3t0ZXh0Olsid3JhcCIsIm5vd3JhcCIsImJhbGFuY2UiLCJwcmV0dHkiXX1dLGluZGVudDpbe2luZGVudDpCKCl9XSwidGFiLXNpemUiOlt7dGFiOltrbixwZSxkZV19XSwidmVydGljYWwtYWxpZ24iOlt7YWxpZ246WyJiYXNlbGluZSIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSIsInRleHQtdG9wIiwidGV4dC1ib3R0b20iLCJzdWIiLCJzdXBlciIscGUsZGVdfV0sd2hpdGVzcGFjZTpbe3doaXRlc3BhY2U6WyJub3JtYWwiLCJub3dyYXAiLCJwcmUiLCJwcmUtbGluZSIsInByZS13cmFwIiwiYnJlYWstc3BhY2VzIl19XSxicmVhazpbe2JyZWFrOlsibm9ybWFsIiwid29yZHMiLCJhbGwiLCJrZWVwIl19XSx3cmFwOlt7d3JhcDpbImJyZWFrLXdvcmQiLCJhbnl3aGVyZSIsIm5vcm1hbCJdfV0saHlwaGVuczpbe2h5cGhlbnM6WyJub25lIiwibWFudWFsIiwiYXV0byJdfV0sY29udGVudDpbe2NvbnRlbnQ6WyJub25lIixwZSxkZV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbImZpeGVkIiwibG9jYWwiLCJzY3JvbGwiXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwidGV4dCJdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50Il19XSwiYmctcG9zaXRpb24iOlt7Ymc6eGUoKX1dLCJiZy1yZXBlYXQiOlt7Ymc6amUoKX1dLCJiZy1zaXplIjpbe2JnOlllKCl9XSwiYmctaW1hZ2UiOlt7Ymc6WyJub25lIix7bGluZWFyOlt7dG86WyJ0IiwidHIiLCJyIiwiYnIiLCJiIiwiYmwiLCJsIiwidGwiXX0sa24scGUsZGVdLHJhZGlhbDpbIiIscGUsZGVdLGNvbmljOlsiIixrbixwZSxkZV19LGpDLEFDXX1dLCJiZy1jb2xvciI6W3tiZzpxKCl9XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpEKCl9XSwiZ3JhZGllbnQtdmlhLXBvcyI6W3t2aWE6RCgpfV0sImdyYWRpZW50LXRvLXBvcyI6W3t0bzpEKCl9XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOnEoKX1dLCJncmFkaWVudC12aWEiOlt7dmlhOnEoKX1dLCJncmFkaWVudC10byI6W3t0bzpxKCl9XSxyb3VuZGVkOlt7cm91bmRlZDpYKCl9XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOlgoKX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6WCgpfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpYKCl9XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOlgoKX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6WCgpfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpYKCl9XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6WCgpfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOlgoKX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpYKCl9XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6WCgpfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOlgoKX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpYKCl9XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6WCgpfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOlgoKX1dLCJib3JkZXItdyI6W3tib3JkZXI6SygpfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14IjpLKCl9XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOksoKX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6SygpfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpLKCl9XSwiYm9yZGVyLXctYnMiOlt7ImJvcmRlci1icyI6SygpfV0sImJvcmRlci13LWJlIjpbeyJib3JkZXItYmUiOksoKX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6SygpfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjpLKCl9XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOksoKX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6SygpfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6SygpfV0sImRpdmlkZS14LXJldmVyc2UiOlsiZGl2aWRlLXgtcmV2ZXJzZSJdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOksoKX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbImRpdmlkZS15LXJldmVyc2UiXSwiYm9yZGVyLXN0eWxlIjpbe2JvcmRlcjpbLi4uYWUoKSwiaGlkZGVuIiwibm9uZSJdfV0sImRpdmlkZS1zdHlsZSI6W3tkaXZpZGU6Wy4uLmFlKCksImhpZGRlbiIsIm5vbmUiXX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOnEoKX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOnEoKX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOnEoKX1dLCJib3JkZXItY29sb3ItcyI6W3siYm9yZGVyLXMiOnEoKX1dLCJib3JkZXItY29sb3ItZSI6W3siYm9yZGVyLWUiOnEoKX1dLCJib3JkZXItY29sb3ItYnMiOlt7ImJvcmRlci1icyI6cSgpfV0sImJvcmRlci1jb2xvci1iZSI6W3siYm9yZGVyLWJlIjpxKCl9XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpxKCl9XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpxKCl9XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpxKCl9XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpxKCl9XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpxKCl9XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsuLi5hZSgpLCJub25lIiwiaGlkZGVuIl19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbQWUscGUsZGVdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOlsiIixBZSxucixoYV19XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOnEoKX1dLHNoYWRvdzpbe3NoYWRvdzpbIiIsImlubmVyIiwibm9uZSIseCxwaSxoaV19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpxKCl9XSwiaW5zZXQtc2hhZG93IjpbeyJpbnNldC1zaGFkb3ciOlsibm9uZSIsZyxwaSxoaV19XSwiaW5zZXQtc2hhZG93LWNvbG9yIjpbeyJpbnNldC1zaGFkb3ciOnEoKX1dLCJyaW5nLXciOlt7cmluZzpLKCl9XSwicmluZy13LWluc2V0IjpbInJpbmctaW5zZXQiXSwicmluZy1jb2xvciI6W3tyaW5nOnEoKX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W0FlLGhhXX1dLCJyaW5nLW9mZnNldC1jb2xvciI6W3sicmluZy1vZmZzZXQiOnEoKX1dLCJpbnNldC1yaW5nLXciOlt7Imluc2V0LXJpbmciOksoKX1dLCJpbnNldC1yaW5nLWNvbG9yIjpbeyJpbnNldC1yaW5nIjpxKCl9XSwidGV4dC1zaGFkb3ciOlt7InRleHQtc2hhZG93IjpbIm5vbmUiLEMscGksaGldfV0sInRleHQtc2hhZG93LWNvbG9yIjpbeyJ0ZXh0LXNoYWRvdyI6cSgpfV0sb3BhY2l0eTpbe29wYWNpdHk6W0FlLHBlLGRlXX1dLCJtaXgtYmxlbmQiOlt7Im1peC1ibGVuZCI6Wy4uLnllKCksInBsdXMtZGFya2VyIiwicGx1cy1saWdodGVyIl19XSwiYmctYmxlbmQiOlt7ImJnLWJsZW5kIjp5ZSgpfV0sIm1hc2stY2xpcCI6W3sibWFzay1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwiZmlsbCIsInN0cm9rZSIsInZpZXciXX0sIm1hc2stbm8tY2xpcCJdLCJtYXNrLWNvbXBvc2l0ZSI6W3ttYXNrOlsiYWRkIiwic3VidHJhY3QiLCJpbnRlcnNlY3QiLCJleGNsdWRlIl19XSwibWFzay1pbWFnZS1saW5lYXItcG9zIjpbeyJtYXNrLWxpbmVhciI6W0FlXX1dLCJtYXNrLWltYWdlLWxpbmVhci1mcm9tLXBvcyI6W3sibWFzay1saW5lYXItZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1wb3MiOlt7Im1hc2stbGluZWFyLXRvIjpzZSgpfV0sIm1hc2staW1hZ2UtbGluZWFyLWZyb20tY29sb3IiOlt7Im1hc2stbGluZWFyLWZyb20iOnEoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1jb2xvciI6W3sibWFzay1saW5lYXItdG8iOnEoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1wb3MiOlt7Im1hc2stdC1mcm9tIjpzZSgpfV0sIm1hc2staW1hZ2UtdC10by1wb3MiOlt7Im1hc2stdC10byI6c2UoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1jb2xvciI6W3sibWFzay10LWZyb20iOnEoKX1dLCJtYXNrLWltYWdlLXQtdG8tY29sb3IiOlt7Im1hc2stdC10byI6cSgpfV0sIm1hc2staW1hZ2Utci1mcm9tLXBvcyI6W3sibWFzay1yLWZyb20iOnNlKCl9XSwibWFzay1pbWFnZS1yLXRvLXBvcyI6W3sibWFzay1yLXRvIjpzZSgpfV0sIm1hc2staW1hZ2Utci1mcm9tLWNvbG9yIjpbeyJtYXNrLXItZnJvbSI6cSgpfV0sIm1hc2staW1hZ2Utci10by1jb2xvciI6W3sibWFzay1yLXRvIjpxKCl9XSwibWFzay1pbWFnZS1iLWZyb20tcG9zIjpbeyJtYXNrLWItZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLWItdG8tcG9zIjpbeyJtYXNrLWItdG8iOnNlKCl9XSwibWFzay1pbWFnZS1iLWZyb20tY29sb3IiOlt7Im1hc2stYi1mcm9tIjpxKCl9XSwibWFzay1pbWFnZS1iLXRvLWNvbG9yIjpbeyJtYXNrLWItdG8iOnEoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1wb3MiOlt7Im1hc2stbC1mcm9tIjpzZSgpfV0sIm1hc2staW1hZ2UtbC10by1wb3MiOlt7Im1hc2stbC10byI6c2UoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1jb2xvciI6W3sibWFzay1sLWZyb20iOnEoKX1dLCJtYXNrLWltYWdlLWwtdG8tY29sb3IiOlt7Im1hc2stbC10byI6cSgpfV0sIm1hc2staW1hZ2UteC1mcm9tLXBvcyI6W3sibWFzay14LWZyb20iOnNlKCl9XSwibWFzay1pbWFnZS14LXRvLXBvcyI6W3sibWFzay14LXRvIjpzZSgpfV0sIm1hc2staW1hZ2UteC1mcm9tLWNvbG9yIjpbeyJtYXNrLXgtZnJvbSI6cSgpfV0sIm1hc2staW1hZ2UteC10by1jb2xvciI6W3sibWFzay14LXRvIjpxKCl9XSwibWFzay1pbWFnZS15LWZyb20tcG9zIjpbeyJtYXNrLXktZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLXktdG8tcG9zIjpbeyJtYXNrLXktdG8iOnNlKCl9XSwibWFzay1pbWFnZS15LWZyb20tY29sb3IiOlt7Im1hc2steS1mcm9tIjpxKCl9XSwibWFzay1pbWFnZS15LXRvLWNvbG9yIjpbeyJtYXNrLXktdG8iOnEoKX1dLCJtYXNrLWltYWdlLXJhZGlhbCI6W3sibWFzay1yYWRpYWwiOltwZSxkZV19XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1wb3MiOlt7Im1hc2stcmFkaWFsLWZyb20iOnNlKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtdG8tcG9zIjpbeyJtYXNrLXJhZGlhbC10byI6c2UoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC1mcm9tLWNvbG9yIjpbeyJtYXNrLXJhZGlhbC1mcm9tIjpxKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtdG8tY29sb3IiOlt7Im1hc2stcmFkaWFsLXRvIjpxKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtc2hhcGUiOlt7Im1hc2stcmFkaWFsIjpbImNpcmNsZSIsImVsbGlwc2UiXX1dLCJtYXNrLWltYWdlLXJhZGlhbC1zaXplIjpbeyJtYXNrLXJhZGlhbCI6W3tjbG9zZXN0Olsic2lkZSIsImNvcm5lciJdLGZhcnRoZXN0Olsic2lkZSIsImNvcm5lciJdfV19XSwibWFzay1pbWFnZS1yYWRpYWwtcG9zIjpbeyJtYXNrLXJhZGlhbC1hdCI6TSgpfV0sIm1hc2staW1hZ2UtY29uaWMtcG9zIjpbeyJtYXNrLWNvbmljIjpbQWVdfV0sIm1hc2staW1hZ2UtY29uaWMtZnJvbS1wb3MiOlt7Im1hc2stY29uaWMtZnJvbSI6c2UoKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLXBvcyI6W3sibWFzay1jb25pYy10byI6c2UoKX1dLCJtYXNrLWltYWdlLWNvbmljLWZyb20tY29sb3IiOlt7Im1hc2stY29uaWMtZnJvbSI6cSgpfV0sIm1hc2staW1hZ2UtY29uaWMtdG8tY29sb3IiOlt7Im1hc2stY29uaWMtdG8iOnEoKX1dLCJtYXNrLW1vZGUiOlt7bWFzazpbImFscGhhIiwibHVtaW5hbmNlIiwibWF0Y2giXX1dLCJtYXNrLW9yaWdpbiI6W3sibWFzay1vcmlnaW4iOlsiYm9yZGVyIiwicGFkZGluZyIsImNvbnRlbnQiLCJmaWxsIiwic3Ryb2tlIiwidmlldyJdfV0sIm1hc2stcG9zaXRpb24iOlt7bWFzazp4ZSgpfV0sIm1hc2stcmVwZWF0Ijpbe21hc2s6amUoKX1dLCJtYXNrLXNpemUiOlt7bWFzazpZZSgpfV0sIm1hc2stdHlwZSI6W3sibWFzay10eXBlIjpbImFscGhhIiwibHVtaW5hbmNlIl19XSwibWFzay1pbWFnZSI6W3ttYXNrOlsibm9uZSIscGUsZGVdfV0sZmlsdGVyOlt7ZmlsdGVyOlsiIiwibm9uZSIscGUsZGVdfV0sYmx1cjpbe2JsdXI6bGUoKX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltBZSxwZSxkZV19XSxjb250cmFzdDpbe2NvbnRyYXN0OltBZSxwZSxkZV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbIiIsIm5vbmUiLHcscGksaGldfV0sImRyb3Atc2hhZG93LWNvbG9yIjpbeyJkcm9wLXNoYWRvdyI6cSgpfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOlsiIixBZSxwZSxkZV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W0FlLHBlLGRlXX1dLGludmVydDpbe2ludmVydDpbIiIsQWUscGUsZGVdfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbQWUscGUsZGVdfV0sc2VwaWE6W3tzZXBpYTpbIiIsQWUscGUsZGVdfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbIiIsIm5vbmUiLHBlLGRlXX1dLCJiYWNrZHJvcC1ibHVyIjpbeyJiYWNrZHJvcC1ibHVyIjpsZSgpfV0sImJhY2tkcm9wLWJyaWdodG5lc3MiOlt7ImJhY2tkcm9wLWJyaWdodG5lc3MiOltBZSxwZSxkZV19XSwiYmFja2Ryb3AtY29udHJhc3QiOlt7ImJhY2tkcm9wLWNvbnRyYXN0IjpbQWUscGUsZGVdfV0sImJhY2tkcm9wLWdyYXlzY2FsZSI6W3siYmFja2Ryb3AtZ3JheXNjYWxlIjpbIiIsQWUscGUsZGVdfV0sImJhY2tkcm9wLWh1ZS1yb3RhdGUiOlt7ImJhY2tkcm9wLWh1ZS1yb3RhdGUiOltBZSxwZSxkZV19XSwiYmFja2Ryb3AtaW52ZXJ0IjpbeyJiYWNrZHJvcC1pbnZlcnQiOlsiIixBZSxwZSxkZV19XSwiYmFja2Ryb3Atb3BhY2l0eSI6W3siYmFja2Ryb3Atb3BhY2l0eSI6W0FlLHBlLGRlXX1dLCJiYWNrZHJvcC1zYXR1cmF0ZSI6W3siYmFja2Ryb3Atc2F0dXJhdGUiOltBZSxwZSxkZV19XSwiYmFja2Ryb3Atc2VwaWEiOlt7ImJhY2tkcm9wLXNlcGlhIjpbIiIsQWUscGUsZGVdfV0sImJvcmRlci1jb2xsYXBzZSI6W3tib3JkZXI6WyJjb2xsYXBzZSIsInNlcGFyYXRlIl19XSwiYm9yZGVyLXNwYWNpbmciOlt7ImJvcmRlci1zcGFjaW5nIjpCKCl9XSwiYm9yZGVyLXNwYWNpbmcteCI6W3siYm9yZGVyLXNwYWNpbmcteCI6QigpfV0sImJvcmRlci1zcGFjaW5nLXkiOlt7ImJvcmRlci1zcGFjaW5nLXkiOkIoKX1dLCJ0YWJsZS1sYXlvdXQiOlt7dGFibGU6WyJhdXRvIiwiZml4ZWQiXX1dLGNhcHRpb246W3tjYXB0aW9uOlsidG9wIiwiYm90dG9tIl19XSx0cmFuc2l0aW9uOlt7dHJhbnNpdGlvbjpbIiIsImFsbCIsImNvbG9ycyIsIm9wYWNpdHkiLCJzaGFkb3ciLCJ0cmFuc2Zvcm0iLCJub25lIixwZSxkZV19XSwidHJhbnNpdGlvbi1iZWhhdmlvciI6W3t0cmFuc2l0aW9uOlsibm9ybWFsIiwiZGlzY3JldGUiXX1dLGR1cmF0aW9uOlt7ZHVyYXRpb246W0FlLCJpbml0aWFsIixwZSxkZV19XSxlYXNlOlt7ZWFzZTpbImxpbmVhciIsImluaXRpYWwiLE8scGUsZGVdfV0sZGVsYXk6W3tkZWxheTpbQWUscGUsZGVdfV0sYW5pbWF0ZTpbe2FuaW1hdGU6WyJub25lIixBLHBlLGRlXX1dLGJhY2tmYWNlOlt7YmFja2ZhY2U6WyJoaWRkZW4iLCJ2aXNpYmxlIl19XSxwZXJzcGVjdGl2ZTpbe3BlcnNwZWN0aXZlOltFLHBlLGRlXX1dLCJwZXJzcGVjdGl2ZS1vcmlnaW4iOlt7InBlcnNwZWN0aXZlLW9yaWdpbiI6WSgpfV0scm90YXRlOlt7cm90YXRlOnRlKCl9XSwicm90YXRlLXgiOlt7InJvdGF0ZS14Ijp0ZSgpfV0sInJvdGF0ZS15IjpbeyJyb3RhdGUteSI6dGUoKX1dLCJyb3RhdGUteiI6W3sicm90YXRlLXoiOnRlKCl9XSxzY2FsZTpbe3NjYWxlOmllKCl9XSwic2NhbGUteCI6W3sic2NhbGUteCI6aWUoKX1dLCJzY2FsZS15IjpbeyJzY2FsZS15IjppZSgpfV0sInNjYWxlLXoiOlt7InNjYWxlLXoiOmllKCl9XSwic2NhbGUtM2QiOlsic2NhbGUtM2QiXSxza2V3Olt7c2tldzpiZSgpfV0sInNrZXcteCI6W3sic2tldy14IjpiZSgpfV0sInNrZXcteSI6W3sic2tldy15IjpiZSgpfV0sdHJhbnNmb3JtOlt7dHJhbnNmb3JtOltwZSxkZSwiIiwibm9uZSIsImdwdSIsImNwdSJdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOlkoKX1dLCJ0cmFuc2Zvcm0tc3R5bGUiOlt7dHJhbnNmb3JtOlsiM2QiLCJmbGF0Il19XSx0cmFuc2xhdGU6W3t0cmFuc2xhdGU6d2UoKX1dLCJ0cmFuc2xhdGUteCI6W3sidHJhbnNsYXRlLXgiOndlKCl9XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15Ijp3ZSgpfV0sInRyYW5zbGF0ZS16IjpbeyJ0cmFuc2xhdGUteiI6d2UoKX1dLCJ0cmFuc2xhdGUtbm9uZSI6WyJ0cmFuc2xhdGUtbm9uZSJdLHpvb206W3t6b29tOltrbixwZSxkZV19XSxhY2NlbnQ6W3thY2NlbnQ6cSgpfV0sYXBwZWFyYW5jZTpbe2FwcGVhcmFuY2U6WyJub25lIiwiYXV0byJdfV0sImNhcmV0LWNvbG9yIjpbe2NhcmV0OnEoKX1dLCJjb2xvci1zY2hlbWUiOlt7c2NoZW1lOlsibm9ybWFsIiwiZGFyayIsImxpZ2h0IiwibGlnaHQtZGFyayIsIm9ubHktZGFyayIsIm9ubHktbGlnaHQiXX1dLGN1cnNvcjpbe2N1cnNvcjpbImF1dG8iLCJkZWZhdWx0IiwicG9pbnRlciIsIndhaXQiLCJ0ZXh0IiwibW92ZSIsImhlbHAiLCJub3QtYWxsb3dlZCIsIm5vbmUiLCJjb250ZXh0LW1lbnUiLCJwcm9ncmVzcyIsImNlbGwiLCJjcm9zc2hhaXIiLCJ2ZXJ0aWNhbC10ZXh0IiwiYWxpYXMiLCJjb3B5Iiwibm8tZHJvcCIsImdyYWIiLCJncmFiYmluZyIsImFsbC1zY3JvbGwiLCJjb2wtcmVzaXplIiwicm93LXJlc2l6ZSIsIm4tcmVzaXplIiwiZS1yZXNpemUiLCJzLXJlc2l6ZSIsInctcmVzaXplIiwibmUtcmVzaXplIiwibnctcmVzaXplIiwic2UtcmVzaXplIiwic3ctcmVzaXplIiwiZXctcmVzaXplIiwibnMtcmVzaXplIiwibmVzdy1yZXNpemUiLCJud3NlLXJlc2l6ZSIsInpvb20taW4iLCJ6b29tLW91dCIscGUsZGVdfV0sImZpZWxkLXNpemluZyI6W3siZmllbGQtc2l6aW5nIjpbImZpeGVkIiwiY29udGVudCJdfV0sInBvaW50ZXItZXZlbnRzIjpbeyJwb2ludGVyLWV2ZW50cyI6WyJhdXRvIiwibm9uZSJdfV0scmVzaXplOlt7cmVzaXplOlsibm9uZSIsIiIsInkiLCJ4Il19XSwic2Nyb2xsLWJlaGF2aW9yIjpbe3Njcm9sbDpbImF1dG8iLCJzbW9vdGgiXX1dLCJzY3JvbGxiYXItdGh1bWItY29sb3IiOlt7InNjcm9sbGJhci10aHVtYiI6cSgpfV0sInNjcm9sbGJhci10cmFjay1jb2xvciI6W3sic2Nyb2xsYmFyLXRyYWNrIjpxKCl9XSwic2Nyb2xsYmFyLWd1dHRlciI6W3sic2Nyb2xsYmFyLWd1dHRlciI6WyJhdXRvIiwic3RhYmxlIiwiYm90aCJdfV0sInNjcm9sbGJhci13Ijpbe3Njcm9sbGJhcjpbImF1dG8iLCJ0aGluIiwibm9uZSJdfV0sInNjcm9sbC1tIjpbeyJzY3JvbGwtbSI6QigpfV0sInNjcm9sbC1teCI6W3sic2Nyb2xsLW14IjpCKCl9XSwic2Nyb2xsLW15IjpbeyJzY3JvbGwtbXkiOkIoKX1dLCJzY3JvbGwtbXMiOlt7InNjcm9sbC1tcyI6QigpfV0sInNjcm9sbC1tZSI6W3sic2Nyb2xsLW1lIjpCKCl9XSwic2Nyb2xsLW1icyI6W3sic2Nyb2xsLW1icyI6QigpfV0sInNjcm9sbC1tYmUiOlt7InNjcm9sbC1tYmUiOkIoKX1dLCJzY3JvbGwtbXQiOlt7InNjcm9sbC1tdCI6QigpfV0sInNjcm9sbC1tciI6W3sic2Nyb2xsLW1yIjpCKCl9XSwic2Nyb2xsLW1iIjpbeyJzY3JvbGwtbWIiOkIoKX1dLCJzY3JvbGwtbWwiOlt7InNjcm9sbC1tbCI6QigpfV0sInNjcm9sbC1wIjpbeyJzY3JvbGwtcCI6QigpfV0sInNjcm9sbC1weCI6W3sic2Nyb2xsLXB4IjpCKCl9XSwic2Nyb2xsLXB5IjpbeyJzY3JvbGwtcHkiOkIoKX1dLCJzY3JvbGwtcHMiOlt7InNjcm9sbC1wcyI6QigpfV0sInNjcm9sbC1wZSI6W3sic2Nyb2xsLXBlIjpCKCl9XSwic2Nyb2xsLXBicyI6W3sic2Nyb2xsLXBicyI6QigpfV0sInNjcm9sbC1wYmUiOlt7InNjcm9sbC1wYmUiOkIoKX1dLCJzY3JvbGwtcHQiOlt7InNjcm9sbC1wdCI6QigpfV0sInNjcm9sbC1wciI6W3sic2Nyb2xsLXByIjpCKCl9XSwic2Nyb2xsLXBiIjpbeyJzY3JvbGwtcGIiOkIoKX1dLCJzY3JvbGwtcGwiOlt7InNjcm9sbC1wbCI6QigpfV0sInNuYXAtYWxpZ24iOlt7c25hcDpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYWxpZ24tbm9uZSJdfV0sInNuYXAtc3RvcCI6W3tzbmFwOlsibm9ybWFsIiwiYWx3YXlzIl19XSwic25hcC10eXBlIjpbe3NuYXA6WyJub25lIiwieCIsInkiLCJib3RoIl19XSwic25hcC1zdHJpY3RuZXNzIjpbe3NuYXA6WyJtYW5kYXRvcnkiLCJwcm94aW1pdHkiXX1dLHRvdWNoOlt7dG91Y2g6WyJhdXRvIiwibm9uZSIsIm1hbmlwdWxhdGlvbiJdfV0sInRvdWNoLXgiOlt7InRvdWNoLXBhbiI6WyJ4IiwibGVmdCIsInJpZ2h0Il19XSwidG91Y2gteSI6W3sidG91Y2gtcGFuIjpbInkiLCJ1cCIsImRvd24iXX1dLCJ0b3VjaC1weiI6WyJ0b3VjaC1waW5jaC16b29tIl0sc2VsZWN0Olt7c2VsZWN0Olsibm9uZSIsInRleHQiLCJhbGwiLCJhdXRvIl19XSwid2lsbC1jaGFuZ2UiOlt7IndpbGwtY2hhbmdlIjpbImF1dG8iLCJzY3JvbGwiLCJjb250ZW50cyIsInRyYW5zZm9ybSIscGUsZGVdfV0sZmlsbDpbe2ZpbGw6WyJub25lIiwuLi5xKCldfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbQWUsbnIsaGEsdXBdfV0sc3Ryb2tlOlt7c3Ryb2tlOlsibm9uZSIsLi4ucSgpXX1dLCJmb3JjZWQtY29sb3ItYWRqdXN0IjpbeyJmb3JjZWQtY29sb3ItYWRqdXN0IjpbImF1dG8iLCJub25lIl19XX0sY29uZmxpY3RpbmdDbGFzc0dyb3Vwczp7ImNvbnRhaW5lci1uYW1lZCI6WyJjb250YWluZXItdHlwZSJdLG92ZXJmbG93Olsib3ZlcmZsb3cteCIsIm92ZXJmbG93LXkiXSxvdmVyc2Nyb2xsOlsib3ZlcnNjcm9sbC14Iiwib3ZlcnNjcm9sbC15Il0saW5zZXQ6WyJpbnNldC14IiwiaW5zZXQteSIsImluc2V0LWJzIiwiaW5zZXQtYmUiLCJzdGFydCIsImVuZCIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLCJpbnNldC14IjpbInN0YXJ0IiwiZW5kIiwicmlnaHQiLCJsZWZ0Il0sImluc2V0LXkiOlsiaW5zZXQtYnMiLCJpbnNldC1iZSIsInRvcCIsImJvdHRvbSJdLGZsZXg6WyJiYXNpcyIsImdyb3ciLCJzaHJpbmsiXSxnYXA6WyJnYXAteCIsImdhcC15Il0scDpbInB4IiwicHkiLCJwcyIsInBlIiwicGJzIiwicGJlIiwicHQiLCJwciIsInBiIiwicGwiXSxweDpbInBzIiwicGUiLCJwciIsInBsIl0scHk6WyJwYnMiLCJwYmUiLCJwdCIsInBiIl0sbTpbIm14IiwibXkiLCJtcyIsIm1lIiwibWJzIiwibWJlIiwibXQiLCJtciIsIm1iIiwibWwiXSxteDpbIm1zIiwibWUiLCJtciIsIm1sIl0sbXk6WyJtYnMiLCJtYmUiLCJtdCIsIm1iIl0sc2l6ZTpbInciLCJoIl0sImZvbnQtc2l6ZSI6WyJsZWFkaW5nIl0sImZ2bi1ub3JtYWwiOlsiZnZuLW9yZGluYWwiLCJmdm4tc2xhc2hlZC16ZXJvIiwiZnZuLWZpZ3VyZSIsImZ2bi1zcGFjaW5nIiwiZnZuLWZyYWN0aW9uIl0sImZ2bi1vcmRpbmFsIjpbImZ2bi1ub3JtYWwiXSwiZnZuLXNsYXNoZWQtemVybyI6WyJmdm4tbm9ybWFsIl0sImZ2bi1maWd1cmUiOlsiZnZuLW5vcm1hbCJdLCJmdm4tc3BhY2luZyI6WyJmdm4tbm9ybWFsIl0sImZ2bi1mcmFjdGlvbiI6WyJmdm4tbm9ybWFsIl0sImxpbmUtY2xhbXAiOlsiZGlzcGxheSIsIm92ZXJmbG93Il0scm91bmRlZDpbInJvdW5kZWQtcyIsInJvdW5kZWQtZSIsInJvdW5kZWQtdCIsInJvdW5kZWQtciIsInJvdW5kZWQtYiIsInJvdW5kZWQtbCIsInJvdW5kZWQtc3MiLCJyb3VuZGVkLXNlIiwicm91bmRlZC1lZSIsInJvdW5kZWQtZXMiLCJyb3VuZGVkLXRsIiwicm91bmRlZC10ciIsInJvdW5kZWQtYnIiLCJyb3VuZGVkLWJsIl0sInJvdW5kZWQtcyI6WyJyb3VuZGVkLXNzIiwicm91bmRlZC1lcyJdLCJyb3VuZGVkLWUiOlsicm91bmRlZC1zZSIsInJvdW5kZWQtZWUiXSwicm91bmRlZC10IjpbInJvdW5kZWQtdGwiLCJyb3VuZGVkLXRyIl0sInJvdW5kZWQtciI6WyJyb3VuZGVkLXRyIiwicm91bmRlZC1iciJdLCJyb3VuZGVkLWIiOlsicm91bmRlZC1iciIsInJvdW5kZWQtYmwiXSwicm91bmRlZC1sIjpbInJvdW5kZWQtdGwiLCJyb3VuZGVkLWJsIl0sImJvcmRlci1zcGFjaW5nIjpbImJvcmRlci1zcGFjaW5nLXgiLCJib3JkZXItc3BhY2luZy15Il0sImJvcmRlci13IjpbImJvcmRlci13LXgiLCJib3JkZXItdy15IiwiYm9yZGVyLXctcyIsImJvcmRlci13LWUiLCJib3JkZXItdy1icyIsImJvcmRlci13LWJlIiwiYm9yZGVyLXctdCIsImJvcmRlci13LXIiLCJib3JkZXItdy1iIiwiYm9yZGVyLXctbCJdLCJib3JkZXItdy14IjpbImJvcmRlci13LXMiLCJib3JkZXItdy1lIiwiYm9yZGVyLXctciIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteSI6WyJib3JkZXItdy1icyIsImJvcmRlci13LWJlIiwiYm9yZGVyLXctdCIsImJvcmRlci13LWIiXSwiYm9yZGVyLWNvbG9yIjpbImJvcmRlci1jb2xvci14IiwiYm9yZGVyLWNvbG9yLXkiLCJib3JkZXItY29sb3ItcyIsImJvcmRlci1jb2xvci1lIiwiYm9yZGVyLWNvbG9yLWJzIiwiYm9yZGVyLWNvbG9yLWJlIiwiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1iIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXgiOlsiYm9yZGVyLWNvbG9yLXMiLCJib3JkZXItY29sb3ItZSIsImJvcmRlci1jb2xvci1yIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXkiOlsiYm9yZGVyLWNvbG9yLWJzIiwiYm9yZGVyLWNvbG9yLWJlIiwiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItYiJdLHRyYW5zbGF0ZTpbInRyYW5zbGF0ZS14IiwidHJhbnNsYXRlLXkiLCJ0cmFuc2xhdGUtbm9uZSJdLCJ0cmFuc2xhdGUtbm9uZSI6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGUteCIsInRyYW5zbGF0ZS15IiwidHJhbnNsYXRlLXoiXSwic2Nyb2xsLW0iOlsic2Nyb2xsLW14Iiwic2Nyb2xsLW15Iiwic2Nyb2xsLW1zIiwic2Nyb2xsLW1lIiwic2Nyb2xsLW1icyIsInNjcm9sbC1tYmUiLCJzY3JvbGwtbXQiLCJzY3JvbGwtbXIiLCJzY3JvbGwtbWIiLCJzY3JvbGwtbWwiXSwic2Nyb2xsLW14IjpbInNjcm9sbC1tcyIsInNjcm9sbC1tZSIsInNjcm9sbC1tciIsInNjcm9sbC1tbCJdLCJzY3JvbGwtbXkiOlsic2Nyb2xsLW1icyIsInNjcm9sbC1tYmUiLCJzY3JvbGwtbXQiLCJzY3JvbGwtbWIiXSwic2Nyb2xsLXAiOlsic2Nyb2xsLXB4Iiwic2Nyb2xsLXB5Iiwic2Nyb2xsLXBzIiwic2Nyb2xsLXBlIiwic2Nyb2xsLXBicyIsInNjcm9sbC1wYmUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcHIiLCJzY3JvbGwtcGIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB4IjpbInNjcm9sbC1wcyIsInNjcm9sbC1wZSIsInNjcm9sbC1wciIsInNjcm9sbC1wbCJdLCJzY3JvbGwtcHkiOlsic2Nyb2xsLXBicyIsInNjcm9sbC1wYmUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcGIiXSx0b3VjaDpbInRvdWNoLXgiLCJ0b3VjaC15IiwidG91Y2gtcHoiXSwidG91Y2gteCI6WyJ0b3VjaCJdLCJ0b3VjaC15IjpbInRvdWNoIl0sInRvdWNoLXB6IjpbInRvdWNoIl19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczp7ImZvbnQtc2l6ZSI6WyJsZWFkaW5nIl19LHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwczpbImNvbnRhaW5lci10eXBlIl0sb3JkZXJTZW5zaXRpdmVNb2RpZmllcnM6WyIqIiwiKioiLCJhZnRlciIsImJhY2tkcm9wIiwiYmVmb3JlIiwiZGV0YWlscy1jb250ZW50IiwiZmlsZSIsImZpcnN0LWxldHRlciIsImZpcnN0LWxpbmUiLCJtYXJrZXIiLCJwbGFjZWhvbGRlciIsInNlbGVjdGlvbiJdfX0pO2Z1bmN0aW9uIGtlKC4uLmEpe3JldHVybiBrQyhKaChhKSl9dmFyIExDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxLdT0oYSxvKT0+TEMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gUXUoYSxvKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gYShvKTthIT1udWxsJiYoYS5jdXJyZW50PW8pfUt1KFF1LCJzZXRSZWYiKTtmdW5jdGlvbiBicCguLi5hKXtyZXR1cm4gbz0+e2xldCB1PSExO2NvbnN0IGk9YS5tYXAocz0+e2NvbnN0IGY9UXUocyxvKTtyZXR1cm4hdSYmdHlwZW9mIGY9PSJmdW5jdGlvbiImJih1PSEwKSxmfSk7aWYodSlyZXR1cm4oKT0+e2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtjb25zdCBmPWlbc107dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZigpOlF1KGFbc10sbnVsbCl9fX19S3UoYnAsImNvbXBvc2VSZWZzIik7ZnVuY3Rpb24gRWUoLi4uYSl7cmV0dXJuIHYudXNlQ2FsbGJhY2soYnAoLi4uYSksYSl9S3UoRWUsInVzZUNvbXBvc2VkUmVmcyIpO3ZhciBVQz1PYmplY3QuZGVmaW5lUHJvcGVydHksSnQ9KGEsbyk9PlVDKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pO2Z1bmN0aW9uIExuKGEpe2NvbnN0IG89di5mb3J3YXJkUmVmKCh1LGkpPT57bGV0e2NoaWxkcmVuOnMsLi4uZn09dSxkPW51bGwscD0hMTtjb25zdCB5PVtdO3M9UnAocyksdi5DaGlsZHJlbi5mb3JFYWNoKHMsQz0+e2lmKHdwKEMpKXtwPSEwO2NvbnN0IHc9QztsZXQgUj0iY2hpbGQiaW4gdy5wcm9wcz93LnByb3BzLmNoaWxkOncucHJvcHMuY2hpbGRyZW47Zm9yKDtadShSKSYmdHlwZW9mIHZpPT0iZnVuY3Rpb24iOylSPXZpKFIuX3BheWxvYWQpO2Q9QkModyxSKSx5LnB1c2goZD8ucHJvcHM/LmNoaWxkcmVuKX1lbHNlIHkucHVzaChDKX0pLGQ/ZD12LmNsb25lRWxlbWVudChkLHZvaWQgMCx5KTohcCYmdi5DaGlsZHJlbi5jb3VudChzKT09PTEmJnYuaXNWYWxpZEVsZW1lbnQocykmJihkPXMpO2NvbnN0IGI9ZD9UcChkKTp2b2lkIDAseD1FZShpLGIpO2lmKCFkKXtpZihzfHxzPT09MCl0aHJvdyBuZXcgRXJyb3IocD9HQyhhKTpQQyhhKSk7cmV0dXJuIHN9Y29uc3QgZz1DcChmLGQucHJvcHM/P3t9KTtyZXR1cm4gZC50eXBlIT09di5GcmFnbWVudCYmKGcucmVmPWk/eDpiKSx2LmNsb25lRWxlbWVudChkLGcpfSk7cmV0dXJuIG8uZGlzcGxheU5hbWU9YCR7YX0uU2xvdGAsb31KdChMbiwiY3JlYXRlU2xvdCIpO3ZhciBIQz1MbigiU2xvdCIpLHhwPVN5bWJvbC5mb3IoInJhZGl4LnNsb3R0YWJsZSIpO2Z1bmN0aW9uIFNwKGEpe2NvbnN0IG89SnQodT0+ImNoaWxkImluIHU/dS5jaGlsZHJlbih1LmNoaWxkKTp1LmNoaWxkcmVuLCJTbG90dGFibGUiKTtyZXR1cm4gby5kaXNwbGF5TmFtZT1gJHthfS5TbG90dGFibGVgLG8uX19yYWRpeElkPXhwLG99SnQoU3AsImNyZWF0ZVNsb3R0YWJsZSIpO3ZhciBCQz1KdCgoYSxvKT0+ImNoaWxkImluIGEucHJvcHM/di5pc1ZhbGlkRWxlbWVudChvKT92LmNsb25lRWxlbWVudChvLHZvaWQgMCxhLnByb3BzLmNoaWxkcmVuKG8ucHJvcHMuY2hpbGRyZW4pKTpudWxsOnYuaXNWYWxpZEVsZW1lbnQobyk/bzpudWxsLCJnZXRTbG90dGFibGVFbGVtZW50RnJvbVNsb3R0YWJsZSIpO2Z1bmN0aW9uIENwKGEsbyl7Y29uc3QgdT17Li4ub307Zm9yKGNvbnN0IGkgaW4gbyl7Y29uc3Qgcz1hW2ldLGY9b1tpXTsvXm9uW0EtWl0vLnRlc3QoaSk/cyYmZj91W2ldPSguLi5wKT0+e2NvbnN0IHk9ZiguLi5wKTtyZXR1cm4gcyguLi5wKSx5fTpzJiYodVtpXT1zKTppPT09InN0eWxlIj91W2ldPXsuLi5zLC4uLmZ9Omk9PT0iY2xhc3NOYW1lIj91W2ldPVtzLGZdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik6aT09PSJhcmlhLWRlc2NyaWJlZGJ5IiYmKHVbaV09X3AoZixzKSl9cmV0dXJuey4uLmEsLi4udX19SnQoQ3AsIm1lcmdlUHJvcHMiKTtmdW5jdGlvbiBUcChhKXtsZXQgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEucHJvcHMsInJlZiIpPy5nZXQsdT1vJiYiaXNSZWFjdFdhcm5pbmciaW4gbyYmby5pc1JlYWN0V2FybmluZztyZXR1cm4gdT9hLnJlZjoobz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsInJlZiIpPy5nZXQsdT1vJiYiaXNSZWFjdFdhcm5pbmciaW4gbyYmby5pc1JlYWN0V2FybmluZyx1P2EucHJvcHMucmVmOmEucHJvcHMucmVmfHxhLnJlZil9SnQoVHAsImdldEVsZW1lbnRSZWYiKTtmdW5jdGlvbiB3cChhKXtyZXR1cm4gdi5pc1ZhbGlkRWxlbWVudChhKSYmdHlwZW9mIGEudHlwZT09ImZ1bmN0aW9uIiYmIl9fcmFkaXhJZCJpbiBhLnR5cGUmJmEudHlwZS5fX3JhZGl4SWQ9PT14cH1KdCh3cCwiaXNTbG90dGFibGUiKTt2YXIgSUM9U3ltYm9sLmZvcigicmVhY3QubGF6eSIpO2Z1bmN0aW9uIFp1KGEpe3JldHVybiBhIT1udWxsJiZ0eXBlb2YgYT09Im9iamVjdCImJiIkJHR5cGVvZiJpbiBhJiZhLiQkdHlwZW9mPT09SUMmJiJfcGF5bG9hZCJpbiBhJiZFcChhLl9wYXlsb2FkKX1KdChadSwiaXNMYXp5Q29tcG9uZW50Iik7ZnVuY3Rpb24gRXAoYSl7cmV0dXJuIHR5cGVvZiBhPT0ib2JqZWN0IiYmYSE9PW51bGwmJiJ0aGVuImluIGF9SnQoRXAsImlzUHJvbWlzZUxpa2UiKTtmdW5jdGlvbiBScChhKXtsZXQgbz1hO2Zvcig7WnUobykmJnR5cGVvZiB2aT09ImZ1bmN0aW9uIjspbz12aShvLl9wYXlsb2FkKTtyZXR1cm4gb31KdChScCwidXNlVW53cmFwcGVkTGF6eSIpO2Z1bmN0aW9uIF9wKC4uLmEpe2NvbnN0IG89bmV3IFNldDtmb3IoY29uc3QgdSBvZiBhKWlmKHR5cGVvZiB1PT0ic3RyaW5nIilmb3IoY29uc3QgaSBvZiBTdHJpbmcodSkudHJpbSgpLnNwbGl0KC9ccysvKSlpJiZvLmFkZChpKTtyZXR1cm4gby5zaXplPjA/QXJyYXkuZnJvbShvKS5qb2luKCIgIik6dm9pZCAwfUp0KF9wLCJjb25jYXRBcmlhRGVzY3JpYmVkYnkiKTt2YXIgUEM9SnQoYT0+YCR7YX0gZmFpbGVkIHRvIHNsb3Qgb250byBpdHMgY2hpbGRyZW4uIEV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQgb3IgXGBTbG90dGFibGVcYC5gLCJjcmVhdGVTbG90RXJyb3IiKSxHQz1KdChhPT5gJHthfSBmYWlsZWQgdG8gc2xvdCBvbnRvIGl0cyBcYFNsb3R0YWJsZVxgLiBFeHBlY3RlZCBcYFNsb3R0YWJsZVxgIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC5gLCJjcmVhdGVTbG90dGFibGVFcnJvciIpLHZpPUFsWyIgdXNlICIudHJpbSgpLnRvU3RyaW5nKCldO2NvbnN0IE9wPWE9PnR5cGVvZiBhPT0iYm9vbGVhbiI/YCR7YX1gOmE9PT0wPyIwIjphLEFwPUpoLFZDPSgoYSxvKT0+dT0+e3ZhciBpO2lmKG8/LnZhcmlhbnRzPT1udWxsKXJldHVybiBBcChhLHU/LmNsYXNzLHU/LmNsYXNzTmFtZSk7Y29uc3R7dmFyaWFudHM6cyxkZWZhdWx0VmFyaWFudHM6Zn09byxkPU9iamVjdC5rZXlzKHMpLm1hcChiPT57Y29uc3QgeD11Py5bYl0sZz1mPy5bYl07aWYoeD09PW51bGwpcmV0dXJuIG51bGw7Y29uc3QgQz1PcCh4KXx8T3AoZyk7cmV0dXJuIHNbYl1bQ119KSxwPXUmJk9iamVjdC5lbnRyaWVzKHUpLnJlZHVjZSgoYix4KT0+e2xldFtnLENdPXg7cmV0dXJuIEM9PT12b2lkIDB8fChiW2ddPUMpLGJ9LHt9KSx5PW89PW51bGx8fChpPW8uY29tcG91bmRWYXJpYW50cyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnJlZHVjZSgoYix4KT0+e2xldHtjbGFzczpnLGNsYXNzTmFtZTpDLC4uLnd9PXg7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHcpLmV2ZXJ5KFI9PntsZXRbRSxUXT1SO3JldHVybiBBcnJheS5pc0FycmF5KFQpP1QuaW5jbHVkZXMoey4uLmYsLi4ucH1bRV0pOnsuLi5mLC4uLnB9W0VdPT09VH0pP1suLi5iLGcsQ106Yn0sW10pO3JldHVybiBBcChhLGQseSx1Py5jbGFzcyx1Py5jbGFzc05hbWUpfSkoImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6Zm9jdXMtcmluZyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi1mYXN0IGVhc2UtYmFzZSIse3ZhcmlhbnRzOnt2YXJpYW50OntwcmltYXJ5OiJiZy1icmFuZC1zZWNvbmRhcnkgdGV4dC13aGl0ZSBob3ZlcjpiZy1hY2NlbnQtaG92ZXIgYWN0aXZlOmJnLWFjY2VudC1hY3RpdmUgZGF0YS1bcGVuZGluZz10cnVlXTpvcGFjaXR5LTcwIGRpc2FibGVkOmJnLWxhcmstbjQwMCBkaXNhYmxlZDp0ZXh0LXdoaXRlIixzZWNvbmRhcnk6ImJvcmRlciBib3JkZXItbGFyay1uMzAwIGJnLWJyYW5kLXByaW1hcnkgdGV4dC1sYXJrLW45MDAgaG92ZXI6YmctbGFyay1uNTAgYWN0aXZlOmJnLWxhcmstbjEwMCBkaXNhYmxlZDp0ZXh0LWxhcmstbjQwMCIsc2Vjb25kYXJ5Qmx1ZToiYm9yZGVyIGJvcmRlci1icmFuZC1zZWNvbmRhcnkgYmctYnJhbmQtcHJpbWFyeSB0ZXh0LWJyYW5kLWxpbmsgaG92ZXI6YmctbGFyay1hY2NlbnQtc29mdCBhY3RpdmU6YmctYnJhbmQtc2Vjb25kYXJ5IGFjdGl2ZTp0ZXh0LXdoaXRlIGRpc2FibGVkOnRleHQtbGFyay1uNDAwIixnaG9zdDoiYmctdHJhbnNwYXJlbnQgdGV4dC1icmFuZC1saW5rIGhvdmVyOmJnLWxhcmstYWNjZW50LXNvZnQgYWN0aXZlOmJnLWxhcmstYWNjZW50LXNvZnQgZGlzYWJsZWQ6dGV4dC1sYXJrLW40MDAiLHRleHQ6ImJnLXRyYW5zcGFyZW50IHRleHQtYnJhbmQtbGluayBob3Zlcjp1bmRlcmxpbmUgZGlzYWJsZWQ6dGV4dC1sYXJrLW40MDAiLHByaW1hcnlFcnJvcjoiYmctbGFyay1kYW5nZXIgdGV4dC1bdmFyKC0tZGFuZ2VyLWZvcmVncm91bmQpXSBob3ZlcjpvcGFjaXR5LTkwIGFjdGl2ZTpvcGFjaXR5LTgwIGRpc2FibGVkOmJnLWxhcmstbjQwMCBkaXNhYmxlZDp0ZXh0LXdoaXRlIixzZWNvbmRhcnlFcnJvcjoiYm9yZGVyIGJvcmRlci1sYXJrLWRhbmdlciBiZy1icmFuZC1wcmltYXJ5IHRleHQtbGFyay1kYW5nZXIgaG92ZXI6YmctbGFyay1kYW5nZXIvMTAgZGlzYWJsZWQ6dGV4dC1sYXJrLW40MDAifSxzaXplOnt4czoiaC02IG1pbi1oLTYgcHgtMiBnYXAtMSB0ZXh0LXhzIixzbToiaC03IG1pbi1oLTcgcHgtMiBnYXAtMSB0ZXh0LXhzIixtZDoiaC04IG1pbi1oLTggcHgtMyBnYXAtMS41IHRleHQtc20gbWF4LXNtOmgtOSBtYXgtc206bWluLWgtOSIsbGc6ImgtMTAgbWluLWgtMTAgcHgtNCBnYXAtMS41IHRleHQtYmFzZSBtYXgtc206aC0xMiBtYXgtc206bWluLWgtMTIgbWF4LXNtOnctZnVsbCJ9LGlzSWNvbk9ubHk6e3RydWU6IiIsZmFsc2U6IiJ9LGZ1bGxXaWR0aDp7dHJ1ZToidy1mdWxsIixmYWxzZToiIn19LGNvbXBvdW5kVmFyaWFudHM6W3tpc0ljb25Pbmx5OiEwLHNpemU6InhzIixjbGFzczoidy02IHAtMCJ9LHtpc0ljb25Pbmx5OiEwLHNpemU6InNtIixjbGFzczoidy03IHAtMCJ9LHtpc0ljb25Pbmx5OiEwLHNpemU6Im1kIixjbGFzczoidy04IHAtMCJ9LHtpc0ljb25Pbmx5OiEwLHNpemU6ImxnIixjbGFzczoidy0xMCBwLTAifSx7dmFyaWFudDoidGV4dCIsY2xhc3M6InB4LTAifV0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OiJzZWNvbmRhcnkiLHNpemU6Im1kIixpc0ljb25Pbmx5OiExLGZ1bGxXaWR0aDohMX19KTtmdW5jdGlvbiBZQyh7dmFyaWFudDphLHNpemU6byxpc0ljb25Pbmx5OnUsaXNQZW5kaW5nOmksZnVsbFdpZHRoOnMsYXNDaGlsZDpmLGNsYXNzTmFtZTpkLGRpc2FibGVkOnAsY2hpbGRyZW46eSwuLi5ifSx4KXtpZihmJiZpKXRocm93IG5ldyBFcnJvcigiTGFya0J1dHRvbjogYXNDaGlsZCBraMO0bmcgaOG7lyB0cuG7oyBpc1BlbmRpbmciKTtjb25zdCBnPWY/SEM6ImJ1dHRvbiI7cmV0dXJuIG0uanN4cyhnLHtyZWY6eCxjbGFzc05hbWU6a2UoVkMoe3ZhcmlhbnQ6YSxzaXplOm8saXNJY29uT25seTp1LGZ1bGxXaWR0aDpzfSksZCksImRhdGEtcGVuZGluZyI6aT8idHJ1ZSI6dm9pZCAwLGRpc2FibGVkOnB8fGksLi4uYixjaGlsZHJlbjpbaSYmbS5qc3goSGgse2NsYXNzTmFtZToic2l6ZS00IGFuaW1hdGUtc3BpbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx5XX0pfWNvbnN0IERlPXYuZm9yd2FyZFJlZihZQyk7RGUuZGlzcGxheU5hbWU9IkxhcmtCdXR0b24iO2NvbnN0IE5wPSJtaW4taC1bNDJweF0gdy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4zMDAgYmctYnJhbmQtcHJpbWFyeSBweC0zIHRleHQtYmFzZSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBtZDptaW4taC05IG1kOnRleHQtc20gZm9jdXM6Ym9yZGVyLVt2YXIoLS1maWVsZC1ib3JkZXItZm9jdXMpXSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6YmctbGFyay1uNTAgZGlzYWJsZWQ6dGV4dC1sYXJrLW42MDAgcmVhZC1vbmx5OmJnLWxhcmstbjEwMCIsbHI9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKHtsYWJlbDpvLGVycm9yOnUsZGVzY3JpcHRpb246aSxpc1JlcXVpcmVkOnMsaXNJbnZhbGlkOmYsaWQ6ZCxjbGFzc05hbWU6cCxyZWFkT25seTp5LCJhcmlhLWRlc2NyaWJlZGJ5IjpiLC4uLnh9LGcpe2NvbnN0IEM9di51c2VJZCgpLHc9ZD8/QyxSPWY/P3UhPT12b2lkIDAsRT1pP2Ake3d9LWRlc2NyaXB0aW9uYDp2b2lkIDAsVD11P2Ake3d9LWVycm9yYDp2b2lkIDAsTz1bRSxULGJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil8fHZvaWQgMDtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOlttLmpzeHMoImxhYmVsIix7aHRtbEZvcjp3LGNsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46W28scz9tLmpzeCgic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidGV4dC1sYXJrLWRhbmdlciIsY2hpbGRyZW46IiAqIn0pOm51bGxdfSksbS5qc3goImlucHV0Iix7cmVmOmcsaWQ6dyxjbGFzc05hbWU6a2UoTnAsUiYmImJvcmRlci1sYXJrLWRhbmdlciIseSYmImN1cnNvci1kZWZhdWx0IGJnLWxhcmstbjEwMCIscCksImFyaWEtaW52YWxpZCI6UiwiYXJpYS1yZXF1aXJlZCI6cywiYXJpYS1kZXNjcmliZWRieSI6TyxyZWFkT25seTp5LC4uLnh9KSxpJiYhdT9tLmpzeCgicCIse2lkOkUsY2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjppfSk6bnVsbCx1P20uanN4KCJwIix7aWQ6VCxyb2xlOiJhbGVydCIsY2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1kYW5nZXIiLGNoaWxkcmVuOnV9KTpudWxsXX0pfSkscUM9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKHtsYWJlbDpvLGVycm9yOnUsaXNSZXF1aXJlZDppLGlkOnMsY2xhc3NOYW1lOmYsImFyaWEtZGVzY3JpYmVkYnkiOmQsLi4ucH0seSl7Y29uc3QgYj12LnVzZUlkKCkseD1zPz9iLGc9dSE9PXZvaWQgMCxDPXU/YCR7eH0tZXJyb3JgOnZvaWQgMCx3PVtDLGRdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil8fHZvaWQgMDtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOlttLmpzeHMoImxhYmVsIix7aHRtbEZvcjp4LGNsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46W28saT9tLmpzeCgic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidGV4dC1sYXJrLWRhbmdlciIsY2hpbGRyZW46IiAqIn0pOm51bGxdfSksbS5qc3goInRleHRhcmVhIix7cmVmOnksaWQ6eCxjbGFzc05hbWU6a2UoTnAsIm1pbi1oLVs3MnB4XSBweS0yIG1kOm1pbi1oLVs3MnB4XSIsZyYmImJvcmRlci1sYXJrLWRhbmdlciIsZiksImFyaWEtaW52YWxpZCI6ZywiYXJpYS1yZXF1aXJlZCI6aSwiYXJpYS1kZXNjcmliZWRieSI6dyxyZXF1aXJlZDppLC4uLnB9KSx1P20uanN4KCJwIix7aWQ6Qyxyb2xlOiJhbGVydCIsY2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1kYW5nZXIiLGNoaWxkcmVuOnV9KTpudWxsXX0pfSk7dmFyIFhDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxLYT0oYSxvKT0+WEMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksRHA9ISEodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO2Z1bmN0aW9uIHVlKGEsbyx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOnU9ITB9PXt9KXtyZXR1cm4gS2EoZnVuY3Rpb24ocyl7aWYoYT8uKHMpLHU9PT0hMXx8IXN8fCFzLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuIG8/LihzKX0sImhhbmRsZUV2ZW50Iil9S2EodWUsImNvbXBvc2VFdmVudEhhbmRsZXJzIik7ZnVuY3Rpb24gS0MoYSl7aWYoIURwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyB3aW5kb3cgb3V0c2lkZSBvZiB0aGUgRE9NIik7cmV0dXJuIGE/Lm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3Pz93aW5kb3d9S2EoS0MsImdldE93bmVyV2luZG93Iik7ZnVuY3Rpb24gRnUoYSl7aWYoIURwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBkb2N1bWVudCBvdXRzaWRlIG9mIHRoZSBET00iKTtyZXR1cm4gYT8ub3duZXJEb2N1bWVudD8/ZG9jdW1lbnR9S2EoRnUsImdldE93bmVyRG9jdW1lbnQiKTtmdW5jdGlvbiBqcChhLG89ITEpe2NvbnN0e2FjdGl2ZUVsZW1lbnQ6dX09RnUoYSk7aWYoIXU/Lm5vZGVOYW1lKXJldHVybiBudWxsO2lmKE1wKHUpJiZ1LmNvbnRlbnREb2N1bWVudClyZXR1cm4ganAodS5jb250ZW50RG9jdW1lbnQuYm9keSxvKTtpZihvKXtjb25zdCBpPXUuZ2V0QXR0cmlidXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKTtpZihpKXtjb25zdCBzPUZ1KHUpLmdldEVsZW1lbnRCeUlkKGkpO2lmKHMpcmV0dXJuIHN9fXJldHVybiB1fUthKGpwLCJnZXRBY3RpdmVFbGVtZW50Iik7ZnVuY3Rpb24gTXAoYSl7cmV0dXJuIGEudGFnTmFtZT09PSJJRlJBTUUifUthKE1wLCJpc0ZyYW1lIik7dmFyIFFDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkbj0oYSxvKT0+UUMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gWkMoYSxvKXtjb25zdCB1PXYuY3JlYXRlQ29udGV4dChvKTt1LmRpc3BsYXlOYW1lPWErIkNvbnRleHQiO2NvbnN0IGk9ZG4oZj0+e2NvbnN0e2NoaWxkcmVuOmQsLi4ucH09Zix5PXYudXNlTWVtbygoKT0+cCxPYmplY3QudmFsdWVzKHApKTtyZXR1cm4gbS5qc3godS5Qcm92aWRlcix7dmFsdWU6eSxjaGlsZHJlbjpkfSl9LCJQcm92aWRlciIpO2kuZGlzcGxheU5hbWU9YSsiUHJvdmlkZXIiO2Z1bmN0aW9uIHMoZixkPXt9KXtjb25zdHtvcHRpb25hbDpwPSExfT1kLHk9di51c2VDb250ZXh0KHUpO2lmKHkpcmV0dXJuIHk7aWYobyE9PXZvaWQgMClyZXR1cm4gbztpZighcCl0aHJvdyBuZXcgRXJyb3IoYFxgJHtmfVxgIG11c3QgYmUgdXNlZCB3aXRoaW4gXGAke2F9XGBgKX1yZXR1cm4gZG4ocywidXNlQ29udGV4dCIpLFtpLHNdfWRuKFpDLCJjcmVhdGVDb250ZXh0Iik7ZnVuY3Rpb24gTXQoYSxvPVtdKXtsZXQgdT1bXTtmdW5jdGlvbiBpKGYsZCl7Y29uc3QgcD12LmNyZWF0ZUNvbnRleHQoZCk7cC5kaXNwbGF5TmFtZT1mKyJDb250ZXh0Ijtjb25zdCB5PXUubGVuZ3RoO3U9Wy4uLnUsZF07Y29uc3QgYj1kbihnPT57Y29uc3R7c2NvcGU6QyxjaGlsZHJlbjp3LC4uLlJ9PWcsRT1DPy5bYV0/Llt5XXx8cCxUPXYudXNlTWVtbygoKT0+UixPYmplY3QudmFsdWVzKFIpKTtyZXR1cm4gbS5qc3goRS5Qcm92aWRlcix7dmFsdWU6VCxjaGlsZHJlbjp3fSl9LCJQcm92aWRlciIpO2IuZGlzcGxheU5hbWU9ZisiUHJvdmlkZXIiO2Z1bmN0aW9uIHgoZyxDLHc9e30pe2NvbnN0e29wdGlvbmFsOlI9ITF9PXcsRT1DPy5bYV0/Llt5XXx8cCxUPXYudXNlQ29udGV4dChFKTtpZihUKXJldHVybiBUO2lmKGQhPT12b2lkIDApcmV0dXJuIGQ7aWYoIVIpdGhyb3cgbmV3IEVycm9yKGBcYCR7Z31cYCBtdXN0IGJlIHVzZWQgd2l0aGluIFxgJHtmfVxgYCl9cmV0dXJuIGRuKHgsInVzZUNvbnRleHQiKSxbYix4XX1kbihpLCJjcmVhdGVDb250ZXh0Iik7Y29uc3Qgcz1kbigoKT0+e2NvbnN0IGY9dS5tYXAoZD0+di5jcmVhdGVDb250ZXh0KGQpKTtyZXR1cm4gZG4oZnVuY3Rpb24ocCl7Y29uc3QgeT1wPy5bYV18fGY7cmV0dXJuIHYudXNlTWVtbygoKT0+KHtbYF9fc2NvcGUke2F9YF06ey4uLnAsW2FdOnl9fSksW3AseV0pfSwidXNlU2NvcGUiKX0sImNyZWF0ZVNjb3BlIik7cmV0dXJuIHMuc2NvcGVOYW1lPWEsW2ksenAocywuLi5vKV19ZG4oTXQsImNyZWF0ZUNvbnRleHRTY29wZSIpO2Z1bmN0aW9uIHpwKC4uLmEpe2NvbnN0IG89YVswXTtpZihhLmxlbmd0aD09PTEpcmV0dXJuIG87Y29uc3QgdT1kbigoKT0+e2NvbnN0IGk9YS5tYXAocz0+KHt1c2VTY29wZTpzKCksc2NvcGVOYW1lOnMuc2NvcGVOYW1lfSkpO3JldHVybiBkbihmdW5jdGlvbihmKXtjb25zdCBkPWkucmVkdWNlKChwLHt1c2VTY29wZTp5LHNjb3BlTmFtZTpifSk9Pntjb25zdCBnPXkoZilbYF9fc2NvcGUke2J9YF07cmV0dXJuey4uLnAsLi4uZ319LHt9KTtyZXR1cm4gdi51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7by5zY29wZU5hbWV9YF06ZH0pLFtkXSl9LCJ1c2VDb21wb3NlZFNjb3BlcyIpfSwiY3JlYXRlU2NvcGUiKTtyZXR1cm4gdS5zY29wZU5hbWU9by5zY29wZU5hbWUsdX1kbih6cCwiY29tcG9zZUNvbnRleHRTY29wZXMiKTt2YXIgbnQ9Z2xvYmFsVGhpcz8uZG9jdW1lbnQ/di51c2VMYXlvdXRFZmZlY3Q6KCk9Pnt9LEZDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx2dD0oYSxvKT0+RkMoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gYXIoYSl7Y29uc3Qgbz1hKyJDb2xsZWN0aW9uUHJvdmlkZXIiLFt1LGldPU10KG8pLFtzLGZdPXUobyx7Y29sbGVjdGlvblJlZjp7Y3VycmVudDpudWxsfSxpdGVtTWFwOm5ldyBNYXB9KSxkPXZ0KEU9Pntjb25zdHtzY29wZTpULGNoaWxkcmVuOk99PUUsQT12LnVzZVJlZihudWxsKSxOPXYudXNlUmVmKG5ldyBNYXApLmN1cnJlbnQ7cmV0dXJuIG0uanN4KHMse3Njb3BlOlQsaXRlbU1hcDpOLGNvbGxlY3Rpb25SZWY6QSxjaGlsZHJlbjpPfSl9LCJDb2xsZWN0aW9uUHJvdmlkZXIiKTtkLmRpc3BsYXlOYW1lPW87Y29uc3QgcD1hKyJDb2xsZWN0aW9uU2xvdCIseT1MbihwKSxiPXYuZm9yd2FyZFJlZigoRSxUKT0+e2NvbnN0e3Njb3BlOk8sY2hpbGRyZW46QX09RSxOPWYocCxPKSxNPUVlKFQsTi5jb2xsZWN0aW9uUmVmKTtyZXR1cm4gbS5qc3goeSx7cmVmOk0sY2hpbGRyZW46QX0pfSk7Yi5kaXNwbGF5TmFtZT1wO2NvbnN0IHg9YSsiQ29sbGVjdGlvbkl0ZW1TbG90IixnPSJkYXRhLXJhZGl4LWNvbGxlY3Rpb24taXRlbSIsQz1Mbih4KSx3PXYuZm9yd2FyZFJlZigoRSxUKT0+e2NvbnN0e3Njb3BlOk8sY2hpbGRyZW46QSwuLi5OfT1FLE09di51c2VSZWYobnVsbCksWT1FZShULE0pLEg9Zih4LE8pO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+KEguaXRlbU1hcC5zZXQoTSx7cmVmOk0sLi4uTn0pLCgpPT57SC5pdGVtTWFwLmRlbGV0ZShNKX0pKSxtLmpzeChDLHtbZ106IiIscmVmOlksY2hpbGRyZW46QX0pfSk7dy5kaXNwbGF5TmFtZT14O2Z1bmN0aW9uIFIoRSl7Y29uc3QgVD1mKGErIkNvbGxlY3Rpb25Db25zdW1lciIsRSk7cmV0dXJuIHYudXNlQ2FsbGJhY2soKCk9Pntjb25zdCBBPVQuY29sbGVjdGlvblJlZi5jdXJyZW50O2lmKCFBKXJldHVybltdO2NvbnN0IE49QXJyYXkuZnJvbShBLnF1ZXJ5U2VsZWN0b3JBbGwoYFske2d9XWApKTtyZXR1cm4gQXJyYXkuZnJvbShULml0ZW1NYXAudmFsdWVzKCkpLnNvcnQoKEgsVSk9Pk4uaW5kZXhPZihILnJlZi5jdXJyZW50KS1OLmluZGV4T2YoVS5yZWYuY3VycmVudCkpfSxbVC5jb2xsZWN0aW9uUmVmLFQuaXRlbU1hcF0pfXJldHVybiB2dChSLCJ1c2VDb2xsZWN0aW9uIiksW3tQcm92aWRlcjpkLFNsb3Q6YixJdGVtU2xvdDp3fSxSLGldfXZ0KGFyLCJjcmVhdGVDb2xsZWN0aW9uIik7dmFyIGtwPW5ldyBXZWFrTWFwLGdpPShXdD1jbGFzcyBleHRlbmRzIE1hcHtjb25zdHJ1Y3Rvcih1KXtzdXBlcih1KTtkMSh0aGlzLHJ0KTt1aCh0aGlzLHJ0LFsuLi5zdXBlci5rZXlzKCldKSxrcC5zZXQodGhpcywhMCl9c2V0KHUsaSl7cmV0dXJuIGtwLmdldCh0aGlzKSYmIXRoaXMuaGFzKHUpJiZqdCh0aGlzLHJ0KS5wdXNoKHUpLHN1cGVyLnNldCh1LGkpLHRoaXN9aW5zZXJ0KHUsaSxzKXtjb25zdCBmPXRoaXMuaGFzKGkpLGQ9Zj90aGlzLnNpemU6dGhpcy5zaXplKzEscD0kdSh1KSx5PXA+PTA/TWF0aC5taW4ocCxkLTEpOk1hdGgubWF4KGQrcCwwKTtpZihmP2p0KHRoaXMscnQpLmluZGV4T2YoaSk9PT15Onk9PT10aGlzLnNpemUpcmV0dXJuIHRoaXMuc2V0KGkscyksdGhpcztjb25zdCBiPWp0KHRoaXMscnQpLmZpbHRlcihnPT5nIT09aSk7Yi5zcGxpY2UoeSwwLGkpO2NvbnN0IHg9Yi5tYXAoZz0+W2csZz09PWk/czp0aGlzLmdldChnKV0pO3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbZyxDXW9mIHgpdGhpcy5zZXQoZyxDKTtyZXR1cm4gdGhpc313aXRoKHUsaSxzKXtjb25zdCBmPW5ldyBXdCh0aGlzKTtyZXR1cm4gZi5pbnNlcnQodSxpLHMpLGZ9YmVmb3JlKHUpe2NvbnN0IGk9anQodGhpcyxydCkuaW5kZXhPZih1KS0xO2lmKCEoaTwwKSlyZXR1cm4gdGhpcy5lbnRyeUF0KGkpfXNldEJlZm9yZSh1LGkscyl7Y29uc3QgZj1qdCh0aGlzLHJ0KS5pbmRleE9mKHUpO2lmKGY9PT0tMSlyZXR1cm4gdGhpcztjb25zdCBkPWp0KHRoaXMscnQpLmluZGV4T2YoaSkscD1kIT09LTEmJmQ8Zj9mLTE6ZjtyZXR1cm4gdGhpcy5pbnNlcnQocCxpLHMpfWFmdGVyKHUpe2xldCBpPWp0KHRoaXMscnQpLmluZGV4T2YodSk7aWYoaT1pPT09LTF8fGk9PT10aGlzLnNpemUtMT8tMTppKzEsaSE9PS0xKXJldHVybiB0aGlzLmVudHJ5QXQoaSl9c2V0QWZ0ZXIodSxpLHMpe2NvbnN0IGY9anQodGhpcyxydCkuaW5kZXhPZih1KTtpZihmPT09LTEpcmV0dXJuIHRoaXM7Y29uc3QgZD1qdCh0aGlzLHJ0KS5pbmRleE9mKGkpLHA9ZCE9PS0xJiZkPD1mP2Y6ZisxO3JldHVybiB0aGlzLmluc2VydChwLGkscyl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5lbnRyeUF0KDApfWxhc3QoKXtyZXR1cm4gdGhpcy5lbnRyeUF0KC0xKX1jbGVhcigpe3JldHVybiB1aCh0aGlzLHJ0LFtdKSxzdXBlci5jbGVhcigpfWRlbGV0ZSh1KXtjb25zdCBpPXN1cGVyLmRlbGV0ZSh1KTtyZXR1cm4gaSYmanQodGhpcyxydCkuc3BsaWNlKGp0KHRoaXMscnQpLmluZGV4T2YodSksMSksaX1kZWxldGVBdCh1KXtjb25zdCBpPXRoaXMua2V5QXQodSk7cmV0dXJuIGkhPT12b2lkIDA/dGhpcy5kZWxldGUoaSk6ITF9YXQodSl7Y29uc3QgaT15aShqdCh0aGlzLHJ0KSx1KTtpZihpIT09dm9pZCAwKXJldHVybiB0aGlzLmdldChpKX1lbnRyeUF0KHUpe2NvbnN0IGk9eWkoanQodGhpcyxydCksdSk7aWYoaSE9PXZvaWQgMClyZXR1cm5baSx0aGlzLmdldChpKV19aW5kZXhPZih1KXtyZXR1cm4ganQodGhpcyxydCkuaW5kZXhPZih1KX1rZXlBdCh1KXtyZXR1cm4geWkoanQodGhpcyxydCksdSl9ZnJvbSh1LGkpe2NvbnN0IHM9dGhpcy5pbmRleE9mKHUpO2lmKHM9PT0tMSlyZXR1cm47bGV0IGY9cytpO3JldHVybiBmPDAmJihmPTApLGY+PXRoaXMuc2l6ZSYmKGY9dGhpcy5zaXplLTEpLHRoaXMuYXQoZil9a2V5RnJvbSh1LGkpe2NvbnN0IHM9dGhpcy5pbmRleE9mKHUpO2lmKHM9PT0tMSlyZXR1cm47bGV0IGY9cytpO3JldHVybiBmPDAmJihmPTApLGY+PXRoaXMuc2l6ZSYmKGY9dGhpcy5zaXplLTEpLHRoaXMua2V5QXQoZil9ZmluZCh1LGkpe2xldCBzPTA7Zm9yKGNvbnN0IGYgb2YgdGhpcyl7aWYoUmVmbGVjdC5hcHBseSh1LGksW2Yscyx0aGlzXSkpcmV0dXJuIGY7cysrfX1maW5kSW5kZXgodSxpKXtsZXQgcz0wO2Zvcihjb25zdCBmIG9mIHRoaXMpe2lmKFJlZmxlY3QuYXBwbHkodSxpLFtmLHMsdGhpc10pKXJldHVybiBzO3MrK31yZXR1cm4tMX1maWx0ZXIodSxpKXtjb25zdCBzPVtdO2xldCBmPTA7Zm9yKGNvbnN0IGQgb2YgdGhpcylSZWZsZWN0LmFwcGx5KHUsaSxbZCxmLHRoaXNdKSYmcy5wdXNoKGQpLGYrKztyZXR1cm4gbmV3IFd0KHMpfW1hcCh1LGkpe2NvbnN0IHM9W107bGV0IGY9MDtmb3IoY29uc3QgZCBvZiB0aGlzKXMucHVzaChbZFswXSxSZWZsZWN0LmFwcGx5KHUsaSxbZCxmLHRoaXNdKV0pLGYrKztyZXR1cm4gbmV3IFd0KHMpfXJlZHVjZSguLi51KXtjb25zdFtpLHNdPXUsZj11Lmxlbmd0aD4xO2lmKCFmJiZ0aGlzLnNpemU9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBPcmRlcmVkRGljdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtsZXQgZD0wLHA9cztmb3IoY29uc3QgeSBvZiB0aGlzKWQ9PT0wJiYhZj9wPXk6cD1SZWZsZWN0LmFwcGx5KGksdGhpcyxbcCx5LGQsdGhpc10pLGQrKztyZXR1cm4gcH1yZWR1Y2VSaWdodCguLi51KXtjb25zdFtpLHNdPXUsZj11Lmxlbmd0aD4xO2lmKCFmJiZ0aGlzLnNpemU9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBPcmRlcmVkRGljdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtsZXQgZD1zO2ZvcihsZXQgcD10aGlzLnNpemUtMTtwPj0wO3AtLSl7Y29uc3QgeT10aGlzLmVudHJ5QXQocCk7cD09PXRoaXMuc2l6ZS0xJiYhZj9kPXk6ZD1SZWZsZWN0LmFwcGx5KGksdGhpcyxbZCx5LHAsdGhpc10pfXJldHVybiBkfXNvcnQodSl7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT3JkZXJlZERpY3Quc29ydCByZXF1aXJlcyBhIGNvbXBhcmUgZnVuY3Rpb24iKTtjb25zdCBpPVsuLi50aGlzLmVudHJpZXMoKV0uc29ydCh1KTt0aGlzLmNsZWFyKCk7Zm9yKGNvbnN0W3MsZl1vZiBpKXRoaXMuc2V0KHMsZik7cmV0dXJuIHRoaXN9dG9Tb3J0ZWQodSl7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT3JkZXJlZERpY3QudG9Tb3J0ZWQgcmVxdWlyZXMgYSBjb21wYXJlIGZ1bmN0aW9uIik7Y29uc3QgaT1bLi4udGhpcy5lbnRyaWVzKCldLnNvcnQodSk7cmV0dXJuIG5ldyBXdChpKX10b1JldmVyc2VkKCl7Y29uc3QgdT1uZXcgV3Q7Zm9yKGxldCBpPXRoaXMuc2l6ZS0xO2k+PTA7aS0tKXtjb25zdCBzPXRoaXMua2V5QXQoaSksZj10aGlzLmdldChzKTt1LnNldChzLGYpfXJldHVybiB1fXRvU3BsaWNlZCguLi51KXtjb25zdCBpPVsuLi50aGlzLmVudHJpZXMoKV07cmV0dXJuIGkuc3BsaWNlKC4uLnUpLG5ldyBXdChpKX1zbGljZSh1LGkpe2NvbnN0IHM9bmV3IFd0O2Zvcihjb25zdCBmIG9mIGp0KHRoaXMscnQpLnNsaWNlKHUsaSkpcy5zZXQoZix0aGlzLmdldChmKSk7cmV0dXJuIHN9ZXZlcnkodSxpKXtsZXQgcz0wO2Zvcihjb25zdCBmIG9mIHRoaXMpe2lmKCFSZWZsZWN0LmFwcGx5KHUsaSxbZixzLHRoaXNdKSlyZXR1cm4hMTtzKyt9cmV0dXJuITB9c29tZSh1LGkpe2xldCBzPTA7Zm9yKGNvbnN0IGYgb2YgdGhpcyl7aWYoUmVmbGVjdC5hcHBseSh1LGksW2Yscyx0aGlzXSkpcmV0dXJuITA7cysrfXJldHVybiExfX0scnQ9bmV3IFdlYWtNYXAsdnQoV3QsIk9yZGVyZWREaWN0IiksV3QpO2Z1bmN0aW9uIHlpKGEsbyl7aWYoImF0ImluIEFycmF5LnByb3RvdHlwZSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLmF0LmNhbGwoYSxvKTtjb25zdCB1PUxwKGEsbyk7cmV0dXJuIHU9PT0tMT92b2lkIDA6YVt1XX12dCh5aSwiYXQiKTtmdW5jdGlvbiBMcChhLG8pe2NvbnN0IHU9YS5sZW5ndGgsaT0kdShvKSxzPWk+PTA/aTp1K2k7cmV0dXJuIHM8MHx8cz49dT8tMTpzfXZ0KExwLCJ0b1NhZmVJbmRleCIpO2Z1bmN0aW9uICR1KGEpe3JldHVybiBhIT09YXx8YT09PTA/MDpNYXRoLnRydW5jKGEpfXZ0KCR1LCJ0b1NhZmVJbnRlZ2VyIik7ZnVuY3Rpb24gJEMoYSl7Y29uc3Qgbz1hKyJDb2xsZWN0aW9uUHJvdmlkZXIiLFt1LGldPU10KG8pLFtzLGZdPXUobyk7cy5kaXNwbGF5TmFtZT1hKyJDb2xsZWN0aW9uU3RhYmxlQ29udGV4dFByb3ZpZGVyIjtjb25zdFtkLHBdPXUobyk7ZC5kaXNwbGF5TmFtZT1hKyJDb2xsZWN0aW9uU3RhdGVmdWxDb250ZXh0UHJvdmlkZXIiO2NvbnN0IHk9dnQoKHtzdGF0ZTpILC4uLlV9KT0+SD9tLmpzeCh4LHsuLi5VLHN0YXRlOkh9KTptLmpzeChiLHsuLi5VfSksIkNvbGxlY3Rpb25Qcm92aWRlciIpO3kuZGlzcGxheU5hbWU9bztjb25zdCBiPXZ0KEg9Pntjb25zdCBVPUEoKTtyZXR1cm4gbS5qc3goeCx7Li4uSCxzdGF0ZTpVfSl9LCJDb2xsZWN0aW9uSW5pdCIpO2IuZGlzcGxheU5hbWU9YSsiQ29sbGVjdGlvbkluaXQiO2NvbnN0IHg9dnQoSD0+e2NvbnN0e3Njb3BlOlUsY2hpbGRyZW46QixzdGF0ZTpKfT1ILFc9di51c2VSZWYobnVsbCksW25lLGVlXT12LnVzZVN0YXRlKG51bGwpLGNlPUVlKFcsZWUpLFttZSxoZV09SixQPXYudXNlUmVmKG5ldyBnaSksJD12LnVzZUNhbGxiYWNrKCgpPT57Y29uc3QgRj1QLmN1cnJlbnQ7cmV0dXJuIEJwKEYpfHxGLnNvcnQoYmkpLEZ9LFtdKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PntpZighbmUpcmV0dXJuO2NvbnN0IEY9SXAoKCk9PntoZShyZT0+e2NvbnN0IHE9cmUudG9Tb3J0ZWQoYmkpO3JldHVybiBxLnNvbWUoKFtqZV0sWWUpPT5yZS5rZXlBdChZZSkhPT1qZSk/cTpyZX0pfSk7cmV0dXJuIEYub2JzZXJ2ZShuZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSwoKT0+e0YuZGlzY29ubmVjdCgpfX0sW25lLGhlXSksbS5qc3gocyx7c2NvcGU6VSxjb2xsZWN0aW9uRWxlbWVudFJlZjpjZSxjb2xsZWN0aW9uRWxlbWVudFJlZk9iamVjdDpXLGdldENvbGxlY3Rpb246JCxzZXRDb2xsZWN0aW9uOmhlLHJlZ2lzdHJ5UmVmOlAsY2hpbGRyZW46bS5qc3goZCx7c2NvcGU6VSxjb2xsZWN0aW9uRWxlbWVudDpuZSxjb2xsZWN0aW9uOm1lLGNoaWxkcmVuOkJ9KX0pfSwiQ29sbGVjdGlvblByb3ZpZGVySW1wbCIpO3guZGlzcGxheU5hbWU9YSsiQ29sbGVjdGlvblByb3ZpZGVySW1wbCI7Y29uc3QgZz1hKyJDb2xsZWN0aW9uU2xvdCIsQz1MbihnKSx3PXYuZm9yd2FyZFJlZigoSCxVKT0+e2NvbnN0e3Njb3BlOkIsY2hpbGRyZW46Sn09SCxXPWYoZyxCKSxuZT1FZShVLFcuY29sbGVjdGlvbkVsZW1lbnRSZWYpO3JldHVybiBtLmpzeChDLHtyZWY6bmUsY2hpbGRyZW46Sn0pfSk7dy5kaXNwbGF5TmFtZT1nO2NvbnN0IFI9YSsiQ29sbGVjdGlvbkl0ZW1TbG90IixFPSJkYXRhLXJhZGl4LWNvbGxlY3Rpb24taXRlbSIsVD1MbihSKSxPPXYuZm9yd2FyZFJlZigoSCxVKT0+e2NvbnN0e3Njb3BlOkIsY2hpbGRyZW46SiwuLi5XfT1ILG5lPXYudXNlUmVmKG51bGwpLGVlPWYoUixCKSx7c2V0Q29sbGVjdGlvbjpjZSxyZWdpc3RyeVJlZjptZX09ZWUsaGU9di51c2VSZWYoVyk7VXAoaGUuY3VycmVudCxXKXx8KGhlLmN1cnJlbnQ9Vyk7Y29uc3QgUD1oZS5jdXJyZW50LCQ9di51c2VDYWxsYmFjayhxPT57Y29uc3QgeGU9bWUuY3VycmVudDtxP3hlLnNldChxLHsuLi5oZS5jdXJyZW50LGVsZW1lbnQ6cX0pOm5lLmN1cnJlbnQmJnhlLmRlbGV0ZShuZS5jdXJyZW50KX0sW21lXSksRj1FZShVLCQsbmUpO250KCgpPT57Y29uc3QgcT1uZS5jdXJyZW50LHhlPW1lLmN1cnJlbnQ7cSYmeGUuaGFzKHEpJiZ4ZS5zZXQocSx7Li4uUCxlbGVtZW50OnF9KX0sW1AsbWVdKTtjb25zdCByZT12LnVzZVJlZihudWxsKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBxPW5lLmN1cnJlbnQseGU9cmUuY3VycmVudDsoeGU/LmVsZW1lbnQ/P251bGwpPT09cSYmKCFxfHx4ZT8uaXRlbURhdGE9PT1QKXx8KHJlLmN1cnJlbnQ9cT97ZWxlbWVudDpxLGl0ZW1EYXRhOlB9Om51bGwsY2UoamU9Pntjb25zdCBZZT1uZXcgZ2koamUpO3JldHVybiB4ZSYmeGUuZWxlbWVudCE9PXEmJlllLmRlbGV0ZSh4ZS5lbGVtZW50KSxxJiZZZS5zZXQocSx7Li4uUCxlbGVtZW50OnF9KSxZZS5zb3J0KGJpKX0pKX0pLHYudXNlRWZmZWN0KCgpPT4oKT0+e2NvbnN0IHE9cmUuY3VycmVudDtyZS5jdXJyZW50PW51bGwscSYmY2UoeGU9PntpZigheGUuaGFzKHEuZWxlbWVudCkpcmV0dXJuIHhlO2NvbnN0IGplPW5ldyBnaSh4ZSk7cmV0dXJuIGplLmRlbGV0ZShxLmVsZW1lbnQpLGplfSl9LFtjZV0pLG0uanN4KFQse1tFXToiIixyZWY6RixjaGlsZHJlbjpKfSl9KTtPLmRpc3BsYXlOYW1lPVI7ZnVuY3Rpb24gQSgpe3JldHVybiB2LnVzZVN0YXRlKG5ldyBnaSl9dnQoQSwidXNlSW5pdENvbGxlY3Rpb24iKTtmdW5jdGlvbiBOKEgpe2NvbnN0e2NvbGxlY3Rpb246VX09cChhKyJDb2xsZWN0aW9uQ29uc3VtZXIiLEgpO3JldHVybiBVfXZ0KE4sInVzZUNvbGxlY3Rpb24iKTtmdW5jdGlvbiBNKEgpe2NvbnN0e2dldENvbGxlY3Rpb246VX09ZihhKyJDb2xsZWN0aW9uQ29uc3VtZXIiLEgpO3JldHVybiBVfXJldHVybiB2dChNLCJ1c2VHZXRDb2xsZWN0aW9uIiksW3tQcm92aWRlcjp5LFNsb3Q6dyxJdGVtU2xvdDpPfSx7Y3JlYXRlQ29sbGVjdGlvblNjb3BlOmksdXNlQ29sbGVjdGlvbjpOLHVzZUdldENvbGxlY3Rpb246TSx1c2VJbml0Q29sbGVjdGlvbjpBfV19dnQoJEMsImNyZWF0ZUNvbGxlY3Rpb24iKTtmdW5jdGlvbiBVcChhLG8pe2lmKGE9PT1vKXJldHVybiEwO2lmKHR5cGVvZiBhIT0ib2JqZWN0Inx8dHlwZW9mIG8hPSJvYmplY3QifHxhPT1udWxsfHxvPT1udWxsKXJldHVybiExO2NvbnN0IHU9T2JqZWN0LmtleXMoYSksaT1PYmplY3Qua2V5cyhvKTtpZih1Lmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2Zvcihjb25zdCBzIG9mIHUpaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLHMpfHxhW3NdIT09b1tzXSlyZXR1cm4hMTtyZXR1cm4hMH12dChVcCwic2hhbGxvd0VxdWFsIik7ZnVuY3Rpb24gSHAoYSxvKXtyZXR1cm4hIShvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKX12dChIcCwiaXNFbGVtZW50UHJlY2VkaW5nIik7ZnVuY3Rpb24gQnAoYSl7bGV0IG87Zm9yKGNvbnN0IHUgb2YgYS5rZXlzKCkpe2lmKG8pe2NvbnN0IGk9by5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih1KTtpZighKGkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpJiZpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKXJldHVybiExfW89dX1yZXR1cm4hMH12dChCcCwiaXNJbkRvY3VtZW50T3JkZXIiKTtmdW5jdGlvbiBiaShhLG8pe3JldHVybiFhWzFdLmVsZW1lbnR8fCFvWzFdLmVsZW1lbnQ/MDpIcChhWzFdLmVsZW1lbnQsb1sxXS5lbGVtZW50KT8tMToxfXZ0KGJpLCJzb3J0QnlEb2N1bWVudFBvc2l0aW9uIik7ZnVuY3Rpb24gSXAoYSl7cmV0dXJuIG5ldyBNdXRhdGlvbk9ic2VydmVyKHU9Pntmb3IoY29uc3QgaSBvZiB1KWlmKGkudHlwZT09PSJjaGlsZExpc3QiKXthKCk7cmV0dXJufX0pfXZ0KElwLCJnZXRDaGlsZExpc3RPYnNlcnZlciIpO3ZhciBKQz1PYmplY3QuZGVmaW5lUHJvcGVydHksV0M9KGEsbyk9PkpDKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLGVUPXtMVFI6Imx0ciJ9LHRUPXYuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIFFhKGEpe2NvbnN0IG89di51c2VDb250ZXh0KHRUKTtyZXR1cm4gYXx8b3x8ZVQuTFRSfVdDKFFhLCJ1c2VEaXJlY3Rpb24iKTt2YXIgWmE9eWgoKSxuVD1PYmplY3QuZGVmaW5lUHJvcGVydHksbFQ9KGEsbyk9Pm5UKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLGFUPVsiYSIsImJ1dHRvbiIsImRpdiIsImZvcm0iLCJoMiIsImgzIiwiaW1nIiwiaW5wdXQiLCJsYWJlbCIsImxpIiwibmF2Iiwib2wiLCJwIiwic2VsZWN0Iiwic3BhbiIsInN2ZyIsInVsIl0sQ2U9YVQucmVkdWNlKChhLG8pPT57Y29uc3QgdT1MbihgUHJpbWl0aXZlLiR7b31gKSxpPXYuZm9yd2FyZFJlZigocyxmKT0+e2NvbnN0e2FzQ2hpbGQ6ZCwuLi5wfT1zLHk9ZD91Om87cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93W1N5bWJvbC5mb3IoInJhZGl4LXVpIildPSEwKSxtLmpzeCh5LHsuLi5wLHJlZjpmfSl9KTtyZXR1cm4gaS5kaXNwbGF5TmFtZT1gUHJpbWl0aXZlLiR7b31gLHsuLi5hLFtvXTppfX0se30pO2Z1bmN0aW9uIHhpKGEsbyl7YSYmWmEuZmx1c2hTeW5jKCgpPT5hLmRpc3BhdGNoRXZlbnQobykpfWxUKHhpLCJkaXNwYXRjaERpc2NyZXRlQ3VzdG9tRXZlbnQiKTt2YXIgb1Q9T2JqZWN0LmRlZmluZVByb3BlcnR5LHJUPShhLG8pPT5vVChhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxQcD1BbFsiIHVzZUluc2VydGlvbkVmZmVjdCAiLnRyaW0oKS50b1N0cmluZygpXTtmdW5jdGlvbiB6dChhKXtjb25zdCBvPXYudXNlUmVmKGEpO3JldHVybiB0eXBlb2YgUHA9PSJmdW5jdGlvbiI/UHAoKCk9PntvLmN1cnJlbnQ9YX0pOm50KCgpPT57by5jdXJyZW50PWF9KSx2LnVzZU1lbW8oKCk9PigoLi4udSk9Pm8uY3VycmVudD8uKC4uLnUpKSxbXSl9clQoenQsInVzZUNhbGxiYWNrUmVmIik7dmFyIGlUPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxndD0oYSxvKT0+aVQoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksSnU9ImRpc21pc3NhYmxlTGF5ZXIudXBkYXRlIixjVD0iZGlzbWlzc2FibGVMYXllci5wb2ludGVyRG93bk91dHNpZGUiLHVUPSJkaXNtaXNzYWJsZUxheWVyLmZvY3VzT3V0c2lkZSIsR3AsV3U9di5jcmVhdGVDb250ZXh0KHtsYXllcnM6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LGJyYW5jaGVzOm5ldyBTZXQsZGlzbWlzc2FibGVTdXJmYWNlczpuZXcgU2V0fSksb3I9di5mb3J3YXJkUmVmKGd0KGZ1bmN0aW9uKG8sdSl7Y29uc3R7ZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOmk9ITEsZGVmZXJQb2ludGVyRG93bk91dHNpZGU6cz0hMSxvbkVzY2FwZUtleURvd246ZixvblBvaW50ZXJEb3duT3V0c2lkZTpkLG9uRm9jdXNPdXRzaWRlOnAsb25JbnRlcmFjdE91dHNpZGU6eSxvbkRpc21pc3M6YiwuLi54fT1vLGc9di51c2VDb250ZXh0KFd1KSxbQyx3XT12LnVzZVN0YXRlKG51bGwpLFI9Qz8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcz8uZG9jdW1lbnQsWyxFXT12LnVzZVN0YXRlKHt9KSxUPUVlKHUsdyksTz1BcnJheS5mcm9tKGcubGF5ZXJzKSxbQV09Wy4uLmcubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRdLnNsaWNlKC0xKSxOPUE/Ty5pbmRleE9mKEEpOi0xLE09Qz9PLmluZGV4T2YoQyk6LTEsWT1nLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU+MCxIPU0+PU4sVT12LnVzZVJlZighMSksQj1ZcChlZT0+e2Q/LihlZSkseT8uKGVlKSxlZS5kZWZhdWx0UHJldmVudGVkfHxiPy4oKX0se293bmVyRG9jdW1lbnQ6UixkZWZlclBvaW50ZXJEb3duT3V0c2lkZTpzLGlzRGVmZXJyZWRQb2ludGVyRG93bk91dHNpZGVSZWY6VSxkaXNtaXNzYWJsZVN1cmZhY2VzOmcuZGlzbWlzc2FibGVTdXJmYWNlcyxzaG91bGRIYW5kbGVQb2ludGVyRG93bk91dHNpZGU6di51c2VDYWxsYmFjayhlZT0+e2lmKCEoZWUgaW5zdGFuY2VvZiBOb2RlKSlyZXR1cm4hMTtjb25zdCBjZT1bLi4uZy5icmFuY2hlc10uc29tZShtZT0+bWUuY29udGFpbnMoZWUpKTtyZXR1cm4gSCYmIWNlfSxbZy5icmFuY2hlcyxIXSl9KSxKPXFwKGVlPT57aWYocyYmVS5jdXJyZW50KXJldHVybjtjb25zdCBjZT1lZS50YXJnZXQ7Wy4uLmcuYnJhbmNoZXNdLnNvbWUoaGU9PmhlLmNvbnRhaW5zKGNlKSl8fChwPy4oZWUpLHk/LihlZSksZWUuZGVmYXVsdFByZXZlbnRlZHx8Yj8uKCkpfSxSKSxXPUM/TT09PU8ubGVuZ3RoLTE6ITEsbmU9enQoZWU9PntlZS5rZXk9PT0iRXNjYXBlIiYmKGY/LihlZSksIWVlLmRlZmF1bHRQcmV2ZW50ZWQmJmImJihlZS5wcmV2ZW50RGVmYXVsdCgpLGIoKSkpfSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57aWYoVylyZXR1cm4gUi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixuZSx7Y2FwdHVyZTohMH0pLCgpPT5SLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLG5lLHtjYXB0dXJlOiEwfSl9LFtSLFcsbmVdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKEMpcmV0dXJuIGkmJihnLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoR3A9Ui5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMsUi5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKSxnLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChDKSksZy5sYXllcnMuYWRkKEMpLGVzKCksKCk9PntpJiYoZy5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoQyksZy5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKFIuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPUdwKSl9fSxbQyxSLGksZ10pLHYudXNlRWZmZWN0KCgpPT4oKT0+e0MmJihnLmxheWVycy5kZWxldGUoQyksZy5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoQyksZXMoKSl9LFtDLGddKSx2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IGVlPWd0KCgpPT5FKHt9KSwiaGFuZGxlVXBkYXRlIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSnUsZWUpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEp1LGVlKX0sW10pLG0uanN4KENlLmRpdix7Li4ueCxyZWY6VCxzdHlsZTp7cG9pbnRlckV2ZW50czpZP0g/ImF1dG8iOiJub25lIjp2b2lkIDAsLi4uby5zdHlsZX0sb25Gb2N1c0NhcHR1cmU6dWUoby5vbkZvY3VzQ2FwdHVyZSxKLm9uRm9jdXNDYXB0dXJlKSxvbkJsdXJDYXB0dXJlOnVlKG8ub25CbHVyQ2FwdHVyZSxKLm9uQmx1ckNhcHR1cmUpLG9uUG9pbnRlckRvd25DYXB0dXJlOnVlKG8ub25Qb2ludGVyRG93bkNhcHR1cmUsQi5vblBvaW50ZXJEb3duQ2FwdHVyZSl9KX0sIkRpc21pc3NhYmxlTGF5ZXIiKSksc1Q9di5mb3J3YXJkUmVmKGd0KGZ1bmN0aW9uKG8sdSl7Y29uc3QgaT12LnVzZUNvbnRleHQoV3UpLHM9di51c2VSZWYobnVsbCksZj1FZSh1LHMpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IGQ9cy5jdXJyZW50O2lmKGQpcmV0dXJuIGkuYnJhbmNoZXMuYWRkKGQpLCgpPT57aS5icmFuY2hlcy5kZWxldGUoZCl9fSxbaS5icmFuY2hlc10pLG0uanN4KENlLmRpdix7Li4ubyxyZWY6Zn0pfSwiRGlzbWlzc2FibGVMYXllckJyYW5jaCIpKTtmdW5jdGlvbiBWcCgpe2NvbnN0IGE9di51c2VDb250ZXh0KFd1KSxbbyx1XT12LnVzZVN0YXRlKG51bGwpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2lmKG8pcmV0dXJuIGEuZGlzbWlzc2FibGVTdXJmYWNlcy5hZGQobyksKCk9PnthLmRpc21pc3NhYmxlU3VyZmFjZXMuZGVsZXRlKG8pfX0sW28sYS5kaXNtaXNzYWJsZVN1cmZhY2VzXSksdX1ndChWcCwidXNlRGlzbWlzc2FibGVMYXllclN1cmZhY2UiKTt2YXIgZlQ9Z3QoKCk9PiEwLCJJU19UUlVFIik7ZnVuY3Rpb24gWXAoYSxvKXtjb25zdHtvd25lckRvY3VtZW50OnU9Z2xvYmFsVGhpcz8uZG9jdW1lbnQsZGVmZXJQb2ludGVyRG93bk91dHNpZGU6aT0hMSxpc0RlZmVycmVkUG9pbnRlckRvd25PdXRzaWRlUmVmOnMsZGlzbWlzc2FibGVTdXJmYWNlczpmLHNob3VsZEhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZTpkPWZUfT1vLHA9enQoYSkseT12LnVzZVJlZighMSksYj12LnVzZVJlZighMSkseD12LnVzZVJlZihuZXcgTWFwKSxnPXYudXNlUmVmKCgpPT57fSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57ZnVuY3Rpb24gQygpe2IuY3VycmVudD0hMSxzLmN1cnJlbnQ9ITEseC5jdXJyZW50LmNsZWFyKCl9Z3QoQywicmVzZXRPdXRzaWRlSW50ZXJhY3Rpb24iKTtmdW5jdGlvbiB3KCl7cmV0dXJuIEFycmF5LmZyb20oeC5jdXJyZW50LnZhbHVlcygpKS5zb21lKEJvb2xlYW4pfWd0KHcsImlzT3V0c2lkZUludGVyYWN0aW9uSW50ZXJjZXB0ZWQiKTtmdW5jdGlvbiBSKE4pe2lmKCFiLmN1cnJlbnQpcmV0dXJuO2NvbnN0IE09Ti50YXJnZXQ7TSBpbnN0YW5jZW9mIE5vZGUmJlsuLi5mXS5zb21lKEg9PkguY29udGFpbnMoTSkpfHx4LmN1cnJlbnQuc2V0KE4udHlwZSwhMCksTi50eXBlPT09ImNsaWNrIiYmd2luZG93LnNldFRpbWVvdXQoKCk9PntiLmN1cnJlbnQmJmcuY3VycmVudCgpfSwwKX1ndChSLCJoYW5kbGVJbnRlcmFjdGlvbkNhcHR1cmUiKTtmdW5jdGlvbiBFKE4pe2IuY3VycmVudCYmeC5jdXJyZW50LnNldChOLnR5cGUsITEpfWd0KEUsImhhbmRsZUludGVyYWN0aW9uQnViYmxlIik7Y29uc3QgVD1ndChOPT57aWYoTi50YXJnZXQmJiF5LmN1cnJlbnQpe2xldCBNPWZ1bmN0aW9uKCl7dS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZy5jdXJyZW50KTtjb25zdCBIPXcoKTtDKCksSHx8dHMoY1QscCxZLHtkaXNjcmV0ZTohMH0pfTtpZihndChNLCJoYW5kbGVBbmREaXNwYXRjaFBvaW50ZXJEb3duT3V0c2lkZUV2ZW50IiksIWQoTi50YXJnZXQpKXt1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLmN1cnJlbnQpLEMoKSx5LmN1cnJlbnQ9ITE7cmV0dXJufWNvbnN0IFk9e29yaWdpbmFsRXZlbnQ6Tn07Yi5jdXJyZW50PSEwLHMuY3VycmVudD1pJiZOLmJ1dHRvbj09PTAseC5jdXJyZW50LmNsZWFyKCksIWl8fE4uYnV0dG9uIT09MD9NKCk6KHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGcuY3VycmVudCksZy5jdXJyZW50PU0sdS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZy5jdXJyZW50LHtvbmNlOiEwfSkpfWVsc2UgdS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZy5jdXJyZW50KSxDKCk7eS5jdXJyZW50PSExfSwiaGFuZGxlUG9pbnRlckRvd24iKSxPPVsicG9pbnRlcnVwIiwibW91c2Vkb3duIiwibW91c2V1cCIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsImNsaWNrIl07Zm9yKGNvbnN0IE4gb2YgTyl1LmFkZEV2ZW50TGlzdGVuZXIoTixSLCEwKSx1LmFkZEV2ZW50TGlzdGVuZXIoTixFKTtjb25zdCBBPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57dS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsVCl9LDApO3JldHVybigpPT57d2luZG93LmNsZWFyVGltZW91dChBKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixUKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLmN1cnJlbnQpO2Zvcihjb25zdCBOIG9mIE8pdS5yZW1vdmVFdmVudExpc3RlbmVyKE4sUiwhMCksdS5yZW1vdmVFdmVudExpc3RlbmVyKE4sRSl9fSxbdSxwLGkscyxmLGRdKSx7b25Qb2ludGVyRG93bkNhcHR1cmU6Z3QoKCk9PnkuY3VycmVudD0hMCwib25Qb2ludGVyRG93bkNhcHR1cmUiKX19Z3QoWXAsInVzZVBvaW50ZXJEb3duT3V0c2lkZSIpO2Z1bmN0aW9uIHFwKGEsbz1nbG9iYWxUaGlzPy5kb2N1bWVudCl7Y29uc3QgdT16dChhKSxpPXYudXNlUmVmKCExKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBzPWd0KGY9PntmLnRhcmdldCYmIWkuY3VycmVudCYmdHModVQsdSx7b3JpZ2luYWxFdmVudDpmfSx7ZGlzY3JldGU6ITF9KX0sImhhbmRsZUZvY3VzIik7cmV0dXJuIG8uYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscyksKCk9Pm8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscyl9LFtvLHVdKSx7b25Gb2N1c0NhcHR1cmU6Z3QoKCk9PmkuY3VycmVudD0hMCwib25Gb2N1c0NhcHR1cmUiKSxvbkJsdXJDYXB0dXJlOmd0KCgpPT5pLmN1cnJlbnQ9ITEsIm9uQmx1ckNhcHR1cmUiKX19Z3QocXAsInVzZUZvY3VzT3V0c2lkZSIpO2Z1bmN0aW9uIGVzKCl7Y29uc3QgYT1uZXcgQ3VzdG9tRXZlbnQoSnUpO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoYSl9Z3QoZXMsImRpc3BhdGNoVXBkYXRlIik7ZnVuY3Rpb24gdHMoYSxvLHUse2Rpc2NyZXRlOml9KXtjb25zdCBzPXUub3JpZ2luYWxFdmVudC50YXJnZXQsZj1uZXcgQ3VzdG9tRXZlbnQoYSx7YnViYmxlczohMSxjYW5jZWxhYmxlOiEwLGRldGFpbDp1fSk7byYmcy5hZGRFdmVudExpc3RlbmVyKGEsbyx7b25jZTohMH0pLGk/eGkocyxmKTpzLmRpc3BhdGNoRXZlbnQoZil9Z3QodHMsImhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQiKTt2YXIgZFQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG5zPShhLG8pPT5kVChhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxTaT0wLEZhPW51bGw7ZnVuY3Rpb24gbVQoYSl7cmV0dXJuIHJyKCksYS5jaGlsZHJlbn1ucyhtVCwiRm9jdXNHdWFyZHMiKTtmdW5jdGlvbiBycigpe3YudXNlRWZmZWN0KCgpPT57RmF8fChGYT17c3RhcnQ6bHMoKSxlbmQ6bHMoKX0pO2NvbnN0e3N0YXJ0OmEsZW5kOm99PUZhO3JldHVybiBkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkIT09YSYmZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyYmVnaW4iLGEpLGRvY3VtZW50LmJvZHkubGFzdEVsZW1lbnRDaGlsZCE9PW8mJmRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLG8pLFNpKyssKCk9PntTaT09PTEmJihGYT8uc3RhcnQucmVtb3ZlKCksRmE/LmVuZC5yZW1vdmUoKSxGYT1udWxsKSxTaT1NYXRoLm1heCgwLFNpLTEpfX0sW10pfW5zKHJyLCJ1c2VGb2N1c0d1YXJkcyIpO2Z1bmN0aW9uIGxzKCl7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJkYXRhLXJhZGl4LWZvY3VzLWd1YXJkIiwiIiksYS50YWJJbmRleD0wLGEuc3R5bGUub3V0bGluZT0ibm9uZSIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsYS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixhfW5zKGxzLCJjcmVhdGVGb2N1c0d1YXJkIik7dmFyIGhUPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx1dD0oYSxvKT0+aFQoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksYXM9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Nb3VudCIsb3M9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Vbm1vdW50IixYcD17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxycz12LmZvcndhcmRSZWYodXQoZnVuY3Rpb24obyx1KXtjb25zdHtsb29wOmk9ITEsdHJhcHBlZDpzPSExLGJyYW5jaGVzOmYsb25Nb3VudEF1dG9Gb2N1czpkLG9uVW5tb3VudEF1dG9Gb2N1czpwLC4uLnl9PW8sW2IseF09di51c2VTdGF0ZShudWxsKSxnPXp0KGQpLEM9enQocCksdz12LnVzZVJlZihudWxsKSxSPUVlKHUseCksRT12LnVzZVJlZihmKTt2LnVzZUVmZmVjdCgoKT0+e0UuY3VycmVudD1mfSk7Y29uc3QgVD12LnVzZUNhbGxiYWNrKE49Pk4/Yj8uY29udGFpbnMoTik/ITA6ISFFLmN1cnJlbnQ/LnNvbWUoTT0+TS5jb250YWlucyhOKSk6ITEsW2JdKSxPPXYudXNlUmVmKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSkuY3VycmVudDt2LnVzZUVmZmVjdCgoKT0+e2lmKHMpe2xldCBOPWZ1bmN0aW9uKFUpe2lmKE8ucGF1c2VkfHwhYilyZXR1cm47Y29uc3QgQj1VLnRhcmdldDtUKEIpP3cuY3VycmVudD1COmVsKHcuY3VycmVudCx7c2VsZWN0OiEwfSl9LE09ZnVuY3Rpb24oVSl7aWYoTy5wYXVzZWR8fCFiKXJldHVybjtjb25zdCBCPVUucmVsYXRlZFRhcmdldDtCIT09bnVsbCYmKFQoQil8fGVsKHcuY3VycmVudCx7c2VsZWN0OiEwfSkpfSxZPWZ1bmN0aW9uKFUpe2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5KWZvcihjb25zdCBKIG9mIFUpSi5yZW1vdmVkTm9kZXMubGVuZ3RoPjAmJmVsKGIpfTt1dChOLCJoYW5kbGVGb2N1c0luIiksdXQoTSwiaGFuZGxlRm9jdXNPdXQiKSx1dChZLCJoYW5kbGVNdXRhdGlvbnMiKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixOKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsTSk7Y29uc3QgSD1uZXcgTXV0YXRpb25PYnNlcnZlcihZKTtyZXR1cm4gYiYmSC5vYnNlcnZlKGIse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixOKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsTSksSC5kaXNjb25uZWN0KCl9fX0sW3MsYixPLnBhdXNlZCxUXSksdi51c2VFZmZlY3QoKCk9PntpZihiKXtKcC5hZGQoTyk7Y29uc3QgTj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFiLmNvbnRhaW5zKE4pKXtjb25zdCBZPW5ldyBDdXN0b21FdmVudChhcyxYcCk7Yi5hZGRFdmVudExpc3RlbmVyKGFzLGcpLGIuZGlzcGF0Y2hFdmVudChZKSxZLmRlZmF1bHRQcmV2ZW50ZWR8fChRcChldihzcyhiKSkse3NlbGVjdDohMH0pLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1OJiZlbChiKSl9cmV0dXJuKCk9PntiLnJlbW92ZUV2ZW50TGlzdGVuZXIoYXMsZyk7Y29uc3QgWT1iLm93bmVyRG9jdW1lbnQsSD1DdXN0b21FdmVudDtzZXRUaW1lb3V0KCgpPT57Y29uc3QgVT1uZXcgSChvcyxYcCk7Yi5hZGRFdmVudExpc3RlbmVyKG9zLEMpLGIuZGlzcGF0Y2hFdmVudChVKSxVLmRlZmF1bHRQcmV2ZW50ZWR8fGVsKE4/P1kuYm9keSx7c2VsZWN0OiEwfSksYi5yZW1vdmVFdmVudExpc3RlbmVyKG9zLEMpLEpwLnJlbW92ZShPKX0sMCl9fX0sW2IsZyxDLE9dKTtjb25zdCBBPXYudXNlQ2FsbGJhY2soTj0+e2lmKCFpJiYhc3x8Ty5wYXVzZWQpcmV0dXJuO2NvbnN0IE09Ti5rZXk9PT0iVGFiIiYmIU4uYWx0S2V5JiYhTi5jdHJsS2V5JiYhTi5tZXRhS2V5LFk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihNJiZZKXtjb25zdCBIPU4uY3VycmVudFRhcmdldCxbVSxCXT1acChIKTtVJiZCPyFOLnNoaWZ0S2V5JiZZPT09Qj8oTi5wcmV2ZW50RGVmYXVsdCgpLGkmJmVsKFUse3NlbGVjdDohMH0pKTpOLnNoaWZ0S2V5JiZZPT09VSYmKE4ucHJldmVudERlZmF1bHQoKSxpJiZlbChCLHtzZWxlY3Q6ITB9KSk6WT09PUgmJk4ucHJldmVudERlZmF1bHQoKX19LFtpLHMsTy5wYXVzZWRdKTtyZXR1cm4gbS5qc3goQ2UuZGl2LHt0YWJJbmRleDotMSwuLi55LHJlZjpSLG9uS2V5RG93bjpBfSl9LCJGb2N1c1Njb3BlIikpLEtwPXYuY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBpcyh7cmVnaXN0cnk6YSxjaGlsZHJlbjpvfSl7cmV0dXJuIGE/bS5qc3goS3AuUHJvdmlkZXIse3ZhbHVlOmEsY2hpbGRyZW46b30pOm99dXQoaXMsIkZvY3VzU2NvcGVCcmFuY2hQcm92aWRlciIpO2Z1bmN0aW9uIGNzKCl7Y29uc3RbYSxvXT12LnVzZVN0YXRlKFtdKSx1PXYudXNlTWVtbygoKT0+KHthZGQ6dXQoaT0+byhzPT5zLmluY2x1ZGVzKGkpP3M6Wy4uLnMsaV0pLCJhZGQiKSxyZW1vdmU6dXQoaT0+byhzPT5zLmZpbHRlcihmPT5mIT09aSkpLCJyZW1vdmUiKX0pLFtdKTtyZXR1cm57bm9kZXM6YSxyZWdpc3RyeTp1fX11dChjcywidXNlRm9jdXNTY29wZUJyYW5jaFJlZ2lzdHJ5Iik7ZnVuY3Rpb24gdXMoYSl7Y29uc3Qgbz12LnVzZUNvbnRleHQoS3ApO3YudXNlRWZmZWN0KCgpPT57aWYoISghYXx8IW8pKXJldHVybiBvLmFkZChhKSwoKT0+by5yZW1vdmUoYSl9LFthLG9dKX11dCh1cywidXNlRm9jdXNTY29wZUJyYW5jaCIpO2Z1bmN0aW9uIFFwKGEse3NlbGVjdDpvPSExfT17fSl7Y29uc3QgdT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2Zvcihjb25zdCBpIG9mIGEpaWYoZWwoaSx7c2VsZWN0Om99KSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dSlyZXR1cm59dXQoUXAsImZvY3VzRmlyc3QiKTtmdW5jdGlvbiBacChhKXtjb25zdCBvPXNzKGEpLHU9ZnMobyxhKSxpPWZzKG8ucmV2ZXJzZSgpLGEpO3JldHVyblt1LGldfXV0KFpwLCJnZXRUYWJiYWJsZUVkZ2VzIik7ZnVuY3Rpb24gc3MoYSl7Y29uc3Qgbz1bXSxpPWEub3duZXJEb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGEsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQse2FjY2VwdE5vZGU6dXQocz0+e2NvbnN0IGY9cy50YWdOYW1lPT09IklOUFVUIiYmcy50eXBlPT09ImhpZGRlbiI7cmV0dXJuIHMuZGlzYWJsZWR8fHMuaGlkZGVufHxmP05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6cy50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH0sImFjY2VwdE5vZGUiKX0pO2Zvcig7aS5uZXh0Tm9kZSgpOylvLnB1c2goaS5jdXJyZW50Tm9kZSk7cmV0dXJuIG99dXQoc3MsImdldFRhYmJhYmxlQ2FuZGlkYXRlcyIpO2Z1bmN0aW9uIGZzKGEsbyl7Y29uc3QgdT10eXBlb2Ygby5jaGVja1Zpc2liaWxpdHk9PSJmdW5jdGlvbiImJm8uY2hlY2tWaXNpYmlsaXR5KHtjaGVja1Zpc2liaWxpdHlDU1M6ITB9KTtmb3IoY29uc3QgaSBvZiBhKWlmKCEodT8haS5jaGVja1Zpc2liaWxpdHkoe2NoZWNrVmlzaWJpbGl0eUNTUzohMH0pOkZwKGkse3VwVG86b30pKSlyZXR1cm4gaX11dChmcywiZmluZFZpc2libGUiKTtmdW5jdGlvbiBGcChhLHt1cFRvOm99KXtpZihnZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHk9PT0iaGlkZGVuIilyZXR1cm4hMDtmb3IoO2E7KXtpZihvIT09dm9pZCAwJiZhPT09bylyZXR1cm4hMTtpZihnZXRDb21wdXRlZFN0eWxlKGEpLmRpc3BsYXk9PT0ibm9uZSIpcmV0dXJuITA7YT1hLnBhcmVudEVsZW1lbnR9cmV0dXJuITF9dXQoRnAsImlzSGlkZGVuIik7ZnVuY3Rpb24gJHAoYSl7cmV0dXJuIGEudGFnTmFtZT09PSJJTlBVVCImJnR5cGVvZiBhLnNlbGVjdD09ImZ1bmN0aW9uIn11dCgkcCwiaXNTZWxlY3RhYmxlSW5wdXQiKTtmdW5jdGlvbiBlbChhLHtzZWxlY3Q6bz0hMX09e30pe2lmKGEmJmEuZm9jdXMpe2NvbnN0IGk9KGEub3duZXJEb2N1bWVudD8/ZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQ7YS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGEhPT1pJiYkcChhKSYmbyYmYS5zZWxlY3QoKX19dXQoZWwsImZvY3VzIik7dmFyIEpwPVdwKCk7ZnVuY3Rpb24gV3AoKXtsZXQgYT1bXTtyZXR1cm57YWRkKG8pe2NvbnN0IHU9YVswXTtvIT09dSYmdT8ucGF1c2UoKSxhPWRzKGEsbyksYS51bnNoaWZ0KG8pfSxyZW1vdmUobyl7YT1kcyhhLG8pLGFbMF0/LnJlc3VtZSgpfX19dXQoV3AsImNyZWF0ZUZvY3VzU2NvcGVzU3RhY2siKTtmdW5jdGlvbiBkcyhhLG8pe2NvbnN0IHU9Wy4uLmFdLGk9dS5pbmRleE9mKG8pO3JldHVybiBpIT09LTEmJnUuc3BsaWNlKGksMSksdX11dChkcywiYXJyYXlSZW1vdmUiKTtmdW5jdGlvbiBldihhKXtyZXR1cm4gYS5maWx0ZXIobz0+by50YWdOYW1lIT09IkEiKX11dChldiwicmVtb3ZlTGlua3MiKTt2YXIgcFQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LHZUPShhLG8pPT5wVChhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxnVD1BbFsiIHVzZUlkICIudHJpbSgpLnRvU3RyaW5nKCldfHwoKCk9Pnt9KSx5VD0wO2Z1bmN0aW9uIHRsKGEpe2NvbnN0W28sdV09di51c2VTdGF0ZShnVCgpKTtyZXR1cm4gbnQoKCk9PnthfHx1KGk9Pmk/P1N0cmluZyh5VCsrKSl9LFthXSksYXx8KG8/YHJhZGl4LSR7b31gOiIiKX12VCh0bCwidXNlSWQiKTtjb25zdCBiVD1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLGpsPU1hdGgubWluLG5sPU1hdGgubWF4LENpPU1hdGgucm91bmQsVGk9TWF0aC5mbG9vcixsbD1hPT4oe3g6YSx5OmF9KSx4VD17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iixib3R0b206InRvcCIsdG9wOiJib3R0b20ifTtmdW5jdGlvbiB0dihhLG8sdSl7cmV0dXJuIG5sKGEsamwobyx1KSl9ZnVuY3Rpb24gYWwoYSxvKXtyZXR1cm4gdHlwZW9mIGE9PSJmdW5jdGlvbiI/YShvKTphfWZ1bmN0aW9uIE1sKGEpe3JldHVybiBhLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gJGEoYSl7cmV0dXJuIGEuc3BsaXQoIi0iKVsxXX1mdW5jdGlvbiBtcyhhKXtyZXR1cm4gYT09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIGhzKGEpe3JldHVybiBhPT09InkiPyJoZWlnaHQiOiJ3aWR0aCJ9ZnVuY3Rpb24gVW4oYSl7Y29uc3Qgbz1hWzBdO3JldHVybiBvPT09InQifHxvPT09ImIiPyJ5IjoieCJ9ZnVuY3Rpb24gcHMoYSl7cmV0dXJuIG1zKFVuKGEpKX1mdW5jdGlvbiBTVChhLG8sdSl7dT09PXZvaWQgMCYmKHU9ITEpO2NvbnN0IGk9JGEoYSkscz1wcyhhKSxmPWhzKHMpO2xldCBkPXM9PT0ieCI/aT09PSh1PyJlbmQiOiJzdGFydCIpPyJyaWdodCI6ImxlZnQiOmk9PT0ic3RhcnQiPyJib3R0b20iOiJ0b3AiO3JldHVybiBvLnJlZmVyZW5jZVtmXT5vLmZsb2F0aW5nW2ZdJiYoZD13aShkKSksW2Qsd2koZCldfWZ1bmN0aW9uIENUKGEpe2NvbnN0IG89d2koYSk7cmV0dXJuW3ZzKGEpLG8sdnMobyldfWZ1bmN0aW9uIHZzKGEpe3JldHVybiBhLmluY2x1ZGVzKCJzdGFydCIpP2EucmVwbGFjZSgic3RhcnQiLCJlbmQiKTphLnJlcGxhY2UoImVuZCIsInN0YXJ0Iil9Y29uc3QgbnY9WyJsZWZ0IiwicmlnaHQiXSxsdj1bInJpZ2h0IiwibGVmdCJdLFRUPVsidG9wIiwiYm90dG9tIl0sd1Q9WyJib3R0b20iLCJ0b3AiXTtmdW5jdGlvbiBFVChhLG8sdSl7c3dpdGNoKGEpe2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cmV0dXJuIHU/bz9sdjpudjpvP252Omx2O2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6cmV0dXJuIG8/VFQ6d1Q7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gUlQoYSxvLHUsaSl7Y29uc3Qgcz0kYShhKTtsZXQgZj1FVChNbChhKSx1PT09InN0YXJ0IixpKTtyZXR1cm4gcyYmKGY9Zi5tYXAoZD0+ZCsiLSIrcyksbyYmKGY9Zi5jb25jYXQoZi5tYXAodnMpKSkpLGZ9ZnVuY3Rpb24gd2koYSl7Y29uc3Qgbz1NbChhKTtyZXR1cm4geFRbb10rYS5zbGljZShvLmxlbmd0aCl9ZnVuY3Rpb24gX1QoYSl7dmFyIG8sdSxpLHM7cmV0dXJue3RvcDoobz1hLnRvcCkhPW51bGw/bzowLHJpZ2h0Oih1PWEucmlnaHQpIT1udWxsP3U6MCxib3R0b206KGk9YS5ib3R0b20pIT1udWxsP2k6MCxsZWZ0OihzPWEubGVmdCkhPW51bGw/czowfX1mdW5jdGlvbiBhdihhKXtyZXR1cm4gdHlwZW9mIGEhPSJudW1iZXIiP19UKGEpOnt0b3A6YSxyaWdodDphLGJvdHRvbTphLGxlZnQ6YX19ZnVuY3Rpb24gRWkoYSl7Y29uc3R7eDpvLHk6dSx3aWR0aDppLGhlaWdodDpzfT1hO3JldHVybnt3aWR0aDppLGhlaWdodDpzLHRvcDp1LGxlZnQ6byxyaWdodDpvK2ksYm90dG9tOnUrcyx4Om8seTp1fX1mdW5jdGlvbiBvdihhLG8sdSl7bGV0e3JlZmVyZW5jZTppLGZsb2F0aW5nOnN9PWE7Y29uc3QgZj1VbihvKSxkPXBzKG8pLHA9aHMoZCkseT1NbChvKSxiPWY9PT0ieSIseD1pLngraS53aWR0aC8yLXMud2lkdGgvMixnPWkueStpLmhlaWdodC8yLXMuaGVpZ2h0LzIsQz1pW3BdLzItc1twXS8yO2xldCB3O3N3aXRjaCh5KXtjYXNlInRvcCI6dz17eCx5OmkueS1zLmhlaWdodH07YnJlYWs7Y2FzZSJib3R0b20iOnc9e3gseTppLnkraS5oZWlnaHR9O2JyZWFrO2Nhc2UicmlnaHQiOnc9e3g6aS54K2kud2lkdGgseTpnfTticmVhaztjYXNlImxlZnQiOnc9e3g6aS54LXMud2lkdGgseTpnfTticmVhaztkZWZhdWx0Onc9e3g6aS54LHk6aS55fX1jb25zdCBSPSRhKG8pO3JldHVybiBSJiYod1tkXSs9QyooUj09PSJlbmQiPzE6LTEpKih1JiZiPy0xOjEpKSx3fWFzeW5jIGZ1bmN0aW9uIE9UKGEsbyl7dmFyIHU7bz09PXZvaWQgMCYmKG89e30pO2NvbnN0e3g6aSx5OnMscGxhdGZvcm06ZixyZWN0czpkLGVsZW1lbnRzOnAsc3RyYXRlZ3k6eX09YSx7Ym91bmRhcnk6Yj0iY2xpcHBpbmdBbmNlc3RvcnMiLHJvb3RCb3VuZGFyeTp4PSJ2aWV3cG9ydCIsZWxlbWVudENvbnRleHQ6Zz0iZmxvYXRpbmciLGFsdEJvdW5kYXJ5OkM9ITEscGFkZGluZzp3PTB9PWFsKG8sYSksUj1hdih3KSxUPXBbQz9nPT09ImZsb2F0aW5nIj8icmVmZXJlbmNlIjoiZmxvYXRpbmciOmddLE89RWkoYXdhaXQgZi5nZXRDbGlwcGluZ1JlY3Qoe2VsZW1lbnQ6KHU9YXdhaXQoZi5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmYuaXNFbGVtZW50KFQpKSk9PW51bGx8fHU/VDpULmNvbnRleHRFbGVtZW50fHxhd2FpdChmLmdldERvY3VtZW50RWxlbWVudD09bnVsbD92b2lkIDA6Zi5nZXREb2N1bWVudEVsZW1lbnQocC5mbG9hdGluZykpLGJvdW5kYXJ5OmIscm9vdEJvdW5kYXJ5Ongsc3RyYXRlZ3k6eX0pKSxBPWc9PT0iZmxvYXRpbmciP3t4OmkseTpzLHdpZHRoOmQuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmQuZmxvYXRpbmcuaGVpZ2h0fTpkLnJlZmVyZW5jZSxOPWF3YWl0KGYuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpmLmdldE9mZnNldFBhcmVudChwLmZsb2F0aW5nKSksTT1hd2FpdChmLmlzRWxlbWVudD09bnVsbD92b2lkIDA6Zi5pc0VsZW1lbnQoTikpJiZhd2FpdChmLmdldFNjYWxlPT1udWxsP3ZvaWQgMDpmLmdldFNjYWxlKE4pKXx8e3g6MSx5OjF9LFk9RWkoZi5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBmLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpwLHJlY3Q6QSxvZmZzZXRQYXJlbnQ6TixzdHJhdGVneTp5fSk6QSk7cmV0dXJue3RvcDooTy50b3AtWS50b3ArUi50b3ApL00ueSxib3R0b206KFkuYm90dG9tLU8uYm90dG9tK1IuYm90dG9tKS9NLnksbGVmdDooTy5sZWZ0LVkubGVmdCtSLmxlZnQpL00ueCxyaWdodDooWS5yaWdodC1PLnJpZ2h0K1IucmlnaHQpL00ueH19Y29uc3QgQVQ9NTAsTlQ9YXN5bmMoYSxvLHUpPT57Y29uc3R7cGxhY2VtZW50Omk9ImJvdHRvbSIsc3RyYXRlZ3k6cz0iYWJzb2x1dGUiLG1pZGRsZXdhcmU6Zj1bXSxwbGF0Zm9ybTpkfT11LHA9ZC5kZXRlY3RPdmVyZmxvdz9kOnsuLi5kLGRldGVjdE92ZXJmbG93Ok9UfSx5PWF3YWl0KGQuaXNSVEw9PW51bGw/dm9pZCAwOmQuaXNSVEwobykpO2xldCBiPWF3YWl0IGQuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6YSxmbG9hdGluZzpvLHN0cmF0ZWd5OnN9KSx7eCx5Omd9PW92KGIsaSx5KSxDPWksdz0wO2NvbnN0IFI9e307Zm9yKGxldCBFPTA7RTxmLmxlbmd0aDtFKyspe2NvbnN0IFQ9ZltFXTtpZighVCljb250aW51ZTtjb25zdHtuYW1lOk8sZm46QX09VCx7eDpOLHk6TSxkYXRhOlkscmVzZXQ6SH09YXdhaXQgQSh7eCx5OmcsaW5pdGlhbFBsYWNlbWVudDppLHBsYWNlbWVudDpDLHN0cmF0ZWd5OnMsbWlkZGxld2FyZURhdGE6UixyZWN0czpiLHBsYXRmb3JtOnAsZWxlbWVudHM6e3JlZmVyZW5jZTphLGZsb2F0aW5nOm99fSk7eD1OPz94LGc9TT8/ZyxSW09dPXsuLi5SW09dLC4uLll9LEgmJnc8QVQmJih3KyssdHlwZW9mIEg9PSJvYmplY3QiJiYoSC5wbGFjZW1lbnQmJihDPUgucGxhY2VtZW50KSxILnJlY3RzJiYoYj1ILnJlY3RzPT09ITA/YXdhaXQgZC5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTphLGZsb2F0aW5nOm8sc3RyYXRlZ3k6c30pOkgucmVjdHMpLHt4LHk6Z309b3YoYixDLHkpKSxFPS0xKX1yZXR1cm57eCx5OmcscGxhY2VtZW50OkMsc3RyYXRlZ3k6cyxtaWRkbGV3YXJlRGF0YTpSfX0sRFQ9YT0+KHtuYW1lOiJhcnJvdyIsb3B0aW9uczphLGFzeW5jIGZuKG8pe2NvbnN0e3g6dSx5OmkscGxhY2VtZW50OnMscmVjdHM6ZixwbGF0Zm9ybTpkLGVsZW1lbnRzOnAsbWlkZGxld2FyZURhdGE6eX09byx7ZWxlbWVudDpiLHBhZGRpbmc6eD0wfT1hbChhLG8pfHx7fTtpZihiPT1udWxsKXJldHVybnt9O2NvbnN0IGc9YXYoeCksQz17eDp1LHk6aX0sdz1wcyhzKSxSPWhzKHcpLEU9YXdhaXQgZC5nZXREaW1lbnNpb25zKGIpLFQ9dz09PSJ5IixPPVQ/InRvcCI6ImxlZnQiLEE9VD8iYm90dG9tIjoicmlnaHQiLE49VD8iY2xpZW50SGVpZ2h0IjoiY2xpZW50V2lkdGgiLE09Zi5yZWZlcmVuY2VbUl0rZi5yZWZlcmVuY2Vbd10tQ1t3XS1mLmZsb2F0aW5nW1JdLFk9Q1t3XS1mLnJlZmVyZW5jZVt3XSxIPWF3YWl0KGQuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpkLmdldE9mZnNldFBhcmVudChiKSk7bGV0IFU9SD9IW05dOjA7KCFVfHwhYXdhaXQoZC5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmQuaXNFbGVtZW50KEgpKSkmJihVPXAuZmxvYXRpbmdbTl18fGYuZmxvYXRpbmdbUl0pO2NvbnN0IEI9TS8yLVkvMixKPVUvMi1FW1JdLzItMSxXPWpsKGdbT10sSiksbmU9amwoZ1tBXSxKKSxlZT1VLUVbUl0tbmUsY2U9VS8yLUVbUl0vMitCLG1lPXR2KFcsY2UsZWUpLGhlPSF5LmFycm93JiYkYShzKSE9bnVsbCYmY2UhPT1tZSYmZi5yZWZlcmVuY2VbUl0vMi0oY2U8Vz9XOm5lKS1FW1JdLzI8MCxQPWhlP2NlPFc/Y2UtVzpjZS1lZTowO3JldHVybntbd106Q1t3XStQLGRhdGE6e1t3XTptZSxjZW50ZXJPZmZzZXQ6Y2UtbWUtUCwuLi5oZSYme2FsaWdubWVudE9mZnNldDpQfX0scmVzZXQ6aGV9fX0pLGpUPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6YSxhc3luYyBmbihvKXt2YXIgdSxpO2NvbnN0e3BsYWNlbWVudDpzLG1pZGRsZXdhcmVEYXRhOmYscmVjdHM6ZCxpbml0aWFsUGxhY2VtZW50OnAscGxhdGZvcm06eSxlbGVtZW50czpifT1vLHttYWluQXhpczp4PSEwLGNyb3NzQXhpczpnPSEwLGZhbGxiYWNrUGxhY2VtZW50czpDLGZhbGxiYWNrU3RyYXRlZ3k6dz0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpSPSJub25lIixmbGlwQWxpZ25tZW50OkU9ITAsLi4uVH09YWwoYSxvKTtpZigodT1mLmFycm93KSE9bnVsbCYmdS5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3QgTz1NbChzKSxBPVVuKHApLE49TWwocCk9PT1wLE09YXdhaXQoeS5pc1JUTD09bnVsbD92b2lkIDA6eS5pc1JUTChiLmZsb2F0aW5nKSksWT1DfHwoTnx8IUU/W3dpKHApXTpDVChwKSksSD1SIT09Im5vbmUiOyFDJiZIJiZZLnB1c2goLi4uUlQocCxFLFIsTSkpO2NvbnN0IFU9W3AsLi4uWV0sQj1hd2FpdCB5LmRldGVjdE92ZXJmbG93KG8sVCksSj1bXTtsZXQgVz0oKGk9Zi5mbGlwKT09bnVsbD92b2lkIDA6aS5vdmVyZmxvd3MpfHxbXTtpZih4JiZKLnB1c2goQltPXSksZyl7Y29uc3QgbWU9U1QocyxkLE0pO0oucHVzaChCW21lWzBdXSxCW21lWzFdXSl9aWYoVz1bLi4uVyx7cGxhY2VtZW50OnMsb3ZlcmZsb3dzOkp9XSwhSi5ldmVyeShtZT0+bWU8PTApKXt2YXIgbmUsZWU7Y29uc3QgbWU9KCgobmU9Zi5mbGlwKT09bnVsbD92b2lkIDA6bmUuaW5kZXgpfHwwKSsxLGhlPVVbbWVdO2lmKGhlJiYoIShnPT09ImFsaWdubWVudCI/QSE9PVVuKGhlKTohMSl8fFcuZXZlcnkoRj0+VW4oRi5wbGFjZW1lbnQpPT09QT9GLm92ZXJmbG93c1swXT4wOiEwKSkpcmV0dXJue2RhdGE6e2luZGV4Om1lLG92ZXJmbG93czpXfSxyZXNldDp7cGxhY2VtZW50OmhlfX07bGV0IFA9KGVlPVcuZmlsdGVyKCQ9PiQub3ZlcmZsb3dzWzBdPD0wKS5zb3J0KCgkLEYpPT4kLm92ZXJmbG93c1sxXS1GLm92ZXJmbG93c1sxXSlbMF0pPT1udWxsP3ZvaWQgMDplZS5wbGFjZW1lbnQ7aWYoIVApc3dpdGNoKHcpe2Nhc2UiYmVzdEZpdCI6e3ZhciBjZTtjb25zdCAkPShjZT1XLmZpbHRlcihGPT57aWYoSCl7Y29uc3QgcmU9VW4oRi5wbGFjZW1lbnQpO3JldHVybiByZT09PUF8fHJlPT09InkifXJldHVybiEwfSkubWFwKEY9PltGLnBsYWNlbWVudCxGLm92ZXJmbG93cy5maWx0ZXIocmU9PnJlPjApLnJlZHVjZSgocmUscSk9PnJlK3EsMCldKS5zb3J0KChGLHJlKT0+RlsxXS1yZVsxXSlbMF0pPT1udWxsP3ZvaWQgMDpjZVswXTskJiYoUD0kKTticmVha31jYXNlImluaXRpYWxQbGFjZW1lbnQiOlA9cDticmVha31pZihzIT09UClyZXR1cm57cmVzZXQ6e3BsYWNlbWVudDpQfX19cmV0dXJue319fX07ZnVuY3Rpb24gcnYoYSxvKXtyZXR1cm57dG9wOmEudG9wLW8uaGVpZ2h0LHJpZ2h0OmEucmlnaHQtby53aWR0aCxib3R0b206YS5ib3R0b20tby5oZWlnaHQsbGVmdDphLmxlZnQtby53aWR0aH19ZnVuY3Rpb24gaXYoYSl7cmV0dXJuIGJULnNvbWUobz0+YVtvXT49MCl9Y29uc3QgTVQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT12b2lkIDAmJihhPXt9KSx7bmFtZToiaGlkZSIsb3B0aW9uczphLGFzeW5jIGZuKG8pe2NvbnN0e3JlY3RzOnUscGxhdGZvcm06aX09byx7c3RyYXRlZ3k6cz0icmVmZXJlbmNlSGlkZGVuIiwuLi5mfT1hbChhLG8pO3N3aXRjaChzKXtjYXNlInJlZmVyZW5jZUhpZGRlbiI6e2NvbnN0IGQ9YXdhaXQgaS5kZXRlY3RPdmVyZmxvdyhvLHsuLi5mLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSkscD1ydihkLHUucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpwLHJlZmVyZW5jZUhpZGRlbjppdihwKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IGQ9YXdhaXQgaS5kZXRlY3RPdmVyZmxvdyhvLHsuLi5mLGFsdEJvdW5kYXJ5OiEwfSkscD1ydihkLHUuZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czpwLGVzY2FwZWQ6aXYocCl9fX1kZWZhdWx0OnJldHVybnt9fX19fSxjdj1uZXcgU2V0KFsibGVmdCIsInRvcCJdKTthc3luYyBmdW5jdGlvbiB6VChhLG8pe2NvbnN0e3BsYWNlbWVudDp1LHBsYXRmb3JtOmksZWxlbWVudHM6c309YSxmPWF3YWl0KGkuaXNSVEw9PW51bGw/dm9pZCAwOmkuaXNSVEwocy5mbG9hdGluZykpLGQ9TWwodSkscD0kYSh1KSx5PVVuKHUpPT09InkiLGI9Y3YuaGFzKGQpPy0xOjEseD1mJiZ5Py0xOjEsZz1hbChvLGEpO2xldHttYWluQXhpczpDLGNyb3NzQXhpczp3LGFsaWdubWVudEF4aXM6Un09dHlwZW9mIGc9PSJudW1iZXIiP3ttYWluQXhpczpnLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmcubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmcuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6Zy5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gcCYmdHlwZW9mIFI9PSJudW1iZXIiJiYodz1wPT09ImVuZCI/UiotMTpSKSx5P3t4OncqeCx5OkMqYn06e3g6QypiLHk6dyp4fX1jb25zdCBrVD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9MCkse25hbWU6Im9mZnNldCIsb3B0aW9uczphLGFzeW5jIGZuKG8pe3ZhciB1LGk7Y29uc3R7eDpzLHk6ZixwbGFjZW1lbnQ6ZCxtaWRkbGV3YXJlRGF0YTpwfT1vLHk9YXdhaXQgelQobyxhKTtyZXR1cm4gZD09PSgodT1wLm9mZnNldCk9PW51bGw/dm9pZCAwOnUucGxhY2VtZW50KSYmKGk9cC5hcnJvdykhPW51bGwmJmkuYWxpZ25tZW50T2Zmc2V0P3t9Ont4OnMreS54LHk6Zit5LnksZGF0YTp7Li4ueSxwbGFjZW1lbnQ6ZH19fX19LExUPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOmEsYXN5bmMgZm4obyl7Y29uc3R7eDp1LHk6aSxwbGFjZW1lbnQ6cyxwbGF0Zm9ybTpmfT1vLHttYWluQXhpczpkPSEwLGNyb3NzQXhpczpwPSExLGxpbWl0ZXI6eT17Zm46QT0+e2xldHt4Ok4seTpNfT1BO3JldHVybnt4Ok4seTpNfX19LC4uLmJ9PWFsKGEsbykseD17eDp1LHk6aX0sZz1hd2FpdCBmLmRldGVjdE92ZXJmbG93KG8sYiksQz1VbihzKSx3PW1zKEMpO2xldCBSPXhbd10sRT14W0NdO2NvbnN0IFQ9KEEsTik9PnR2KE4rZ1tBPT09InkiPyJ0b3AiOiJsZWZ0Il0sTixOLWdbQT09PSJ5Ij8iYm90dG9tIjoicmlnaHQiXSk7ZCYmKFI9VCh3LFIpKSxwJiYoRT1UKEMsRSkpO2NvbnN0IE89eS5mbih7Li4ubyxbd106UixbQ106RX0pO3JldHVybnsuLi5PLGRhdGE6e3g6Ty54LXUseTpPLnktaSxlbmFibGVkOntbd106ZCxbQ106cH19fX19fSxVVD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30pLHtvcHRpb25zOmEsZm4obyl7dmFyIHUsaTtjb25zdHt4OnMseTpmLHBsYWNlbWVudDpkLHJlY3RzOnAsbWlkZGxld2FyZURhdGE6eX09byx7b2Zmc2V0OmI9MCxtYWluQXhpczp4PSEwLGNyb3NzQXhpczpnPSEwfT1hbChhLG8pLEM9e3g6cyx5OmZ9LHc9VW4oZCksUj1tcyh3KTtsZXQgRT1DW1JdLFQ9Q1t3XTtjb25zdCBPPWFsKGIsbyksQT10eXBlb2YgTz09Im51bWJlciI/e21haW5BeGlzOk8sY3Jvc3NBeGlzOjB9OnttYWluQXhpczoodT1PLm1haW5BeGlzKSE9bnVsbD91OjAsY3Jvc3NBeGlzOihpPU8uY3Jvc3NBeGlzKSE9bnVsbD9pOjB9O2lmKHgpe2NvbnN0IFk9Uj09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLEg9cC5yZWZlcmVuY2VbUl0tcC5mbG9hdGluZ1tZXStBLm1haW5BeGlzLFU9cC5yZWZlcmVuY2VbUl0rcC5yZWZlcmVuY2VbWV0tQS5tYWluQXhpcztFPEg/RT1IOkU+VSYmKEU9VSl9aWYoZyl7dmFyIE4sTTtjb25zdCBZPVI9PT0ieSI/IndpZHRoIjoiaGVpZ2h0IixIPWN2LmhhcyhNbChkKSksVT1wLnJlZmVyZW5jZVt3XS1wLmZsb2F0aW5nW1ldKyhIJiYoKE49eS5vZmZzZXQpPT1udWxsP3ZvaWQgMDpOW3ddKXx8MCkrKEg/MDpBLmNyb3NzQXhpcyksQj1wLnJlZmVyZW5jZVt3XStwLnJlZmVyZW5jZVtZXSsoSD8wOigoTT15Lm9mZnNldCk9PW51bGw/dm9pZCAwOk1bd10pfHwwKS0oSD9BLmNyb3NzQXhpczowKTtUPFU/VD1VOlQ+QiYmKFQ9Qil9cmV0dXJue1tSXTpFLFt3XTpUfX19fSxIVD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30pLHtuYW1lOiJzaXplIixvcHRpb25zOmEsYXN5bmMgZm4obyl7Y29uc3R7cGxhY2VtZW50OnUscmVjdHM6aSxwbGF0Zm9ybTpzLGVsZW1lbnRzOmZ9PW8se2FwcGx5OmQ9KCk9Pnt9LC4uLnB9PWFsKGEsbykseT1hd2FpdCBzLmRldGVjdE92ZXJmbG93KG8scCksYj1NbCh1KSx4PSRhKHUpLGc9VW4odSk9PT0ieSIse3dpZHRoOkMsaGVpZ2h0Ond9PWkuZmxvYXRpbmc7bGV0IFIsRTtiPT09InRvcCJ8fGI9PT0iYm90dG9tIj8oUj1iLEU9eD09PShhd2FpdChzLmlzUlRMPT1udWxsP3ZvaWQgMDpzLmlzUlRMKGYuZmxvYXRpbmcpKT8ic3RhcnQiOiJlbmQiKT8ibGVmdCI6InJpZ2h0Iik6KEU9YixSPXg9PT0iZW5kIj8idG9wIjoiYm90dG9tIik7Y29uc3QgVD13LXkudG9wLXkuYm90dG9tLE89Qy15LmxlZnQteS5yaWdodCxBPWpsKHcteVtSXSxUKSxOPWpsKEMteVtFXSxPKSxNPW8ubWlkZGxld2FyZURhdGEuc2hpZnQsWT0hTTtsZXQgSD1BLFU9TjtNIT1udWxsJiZNLmVuYWJsZWQueCYmKFU9TyksTSE9bnVsbCYmTS5lbmFibGVkLnkmJihIPVQpLFkmJiF4JiYoZz9VPUMtMipubCh5LmxlZnQseS5yaWdodCk6SD13LTIqbmwoeS50b3AseS5ib3R0b20pKSxhd2FpdCBkKHsuLi5vLGF2YWlsYWJsZVdpZHRoOlUsYXZhaWxhYmxlSGVpZ2h0Okh9KTtjb25zdCBCPWF3YWl0IHMuZ2V0RGltZW5zaW9ucyhmLmZsb2F0aW5nKTtyZXR1cm4gQyE9PUIud2lkdGh8fHchPT1CLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fX07ZnVuY3Rpb24gUmkoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9ZnVuY3Rpb24gSmEoYSl7cmV0dXJuIHV2KGEpPyhhLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKToiI2RvY3VtZW50In1mdW5jdGlvbiBHdChhKXt2YXIgbztyZXR1cm4oYT09bnVsbHx8KG89YS5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6by5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBvbChhKXt2YXIgbztyZXR1cm4obz0odXYoYSk/YS5vd25lckRvY3VtZW50OmEuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpvLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiB1dihhKXtyZXR1cm4gUmkoKT9hIGluc3RhbmNlb2YgTm9kZXx8YSBpbnN0YW5jZW9mIEd0KGEpLk5vZGU6ITF9ZnVuY3Rpb24gSG4oYSl7cmV0dXJuIFJpKCk/YSBpbnN0YW5jZW9mIEVsZW1lbnR8fGEgaW5zdGFuY2VvZiBHdChhKS5FbGVtZW50OiExfWZ1bmN0aW9uIHpsKGEpe3JldHVybiBSaSgpP2EgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8YSBpbnN0YW5jZW9mIEd0KGEpLkhUTUxFbGVtZW50OiExfWZ1bmN0aW9uIHN2KGEpe3JldHVybiFSaSgpfHx0eXBlb2YgU2hhZG93Um9vdD4idSI/ITE6YSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGEgaW5zdGFuY2VvZiBHdChhKS5TaGFkb3dSb290fWZ1bmN0aW9uIF9pKGEpe2NvbnN0e292ZXJmbG93Om8sb3ZlcmZsb3dYOnUsb3ZlcmZsb3dZOmksZGlzcGxheTpzfT1CbihhKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvK2krdSkmJnMhPT0iaW5saW5lIiYmcyE9PSJjb250ZW50cyJ9ZnVuY3Rpb24gQlQoYSl7cmV0dXJuL14odGFibGV8dGR8dGgpJC8udGVzdChKYShhKSl9ZnVuY3Rpb24gT2koYSl7dHJ5e2lmKGEubWF0Y2hlcygiOnBvcG92ZXItb3BlbiIpKXJldHVybiEwfWNhdGNoe310cnl7cmV0dXJuIGEubWF0Y2hlcygiOm1vZGFsIil9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IElUPS90cmFuc2Zvcm18dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxwZXJzcGVjdGl2ZXxmaWx0ZXIvLFBUPS9wYWludHxsYXlvdXR8c3RyaWN0fGNvbnRlbnQvLHZhPWE9PiEhYSYmYSE9PSJub25lIjtsZXQgZ3M7ZnVuY3Rpb24geXMoYSl7Y29uc3Qgbz1IbihhKT9CbihhKTphO3JldHVybiB2YShvLnRyYW5zZm9ybSl8fHZhKG8udHJhbnNsYXRlKXx8dmEoby5zY2FsZSl8fHZhKG8ucm90YXRlKXx8dmEoby5wZXJzcGVjdGl2ZSl8fCFicygpJiYodmEoby5iYWNrZHJvcEZpbHRlcil8fHZhKG8uZmlsdGVyKSl8fElULnRlc3Qoby53aWxsQ2hhbmdlfHwiIil8fFBULnRlc3Qoby5jb250YWlufHwiIil9ZnVuY3Rpb24gR1QoYSl7bGV0IG89Z2EoYSk7Zm9yKDt6bChvKSYmIWlyKG8pOyl7aWYoeXMobykpcmV0dXJuIG87aWYoT2kobykpcmV0dXJuIG51bGw7bz1nYShvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBicygpe3JldHVybiBncz09bnVsbCYmKGdzPXR5cGVvZiBDU1M8InUiJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiLCJub25lIikpLGdzfWZ1bmN0aW9uIGlyKGEpe3JldHVybi9eKGh0bWx8Ym9keXwjZG9jdW1lbnQpJC8udGVzdChKYShhKSl9ZnVuY3Rpb24gQm4oYSl7cmV0dXJuIEd0KGEpLmdldENvbXB1dGVkU3R5bGUoYSl9ZnVuY3Rpb24gQWkoYSl7cmV0dXJuIEhuKGEpP3tzY3JvbGxMZWZ0OmEuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6YS5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OmEuc2Nyb2xsWCxzY3JvbGxUb3A6YS5zY3JvbGxZfX1mdW5jdGlvbiBnYShhKXtpZihKYShhKT09PSJodG1sIilyZXR1cm4gYTtjb25zdCBvPWEuYXNzaWduZWRTbG90fHxhLnBhcmVudE5vZGV8fHN2KGEpJiZhLmhvc3R8fG9sKGEpO3JldHVybiBzdihvKT9vLmhvc3Q6b31mdW5jdGlvbiBmdihhKXtjb25zdCBvPWdhKGEpO3JldHVybiBpcihvKT8oYS5vd25lckRvY3VtZW50fHxhKS5ib2R5OnpsKG8pJiZfaShvKT9vOmZ2KG8pfWZ1bmN0aW9uIGNyKGEsbyx1KXt2YXIgaTtvPT09dm9pZCAwJiYobz1bXSksdT09PXZvaWQgMCYmKHU9ITApO2NvbnN0IHM9ZnYoYSksZj1zPT09KChpPWEub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOmkuYm9keSksZD1HdChzKTtpZihmKXtjb25zdCBwPXhzKGQpO3JldHVybiBvLmNvbmNhdChkLGQudmlzdWFsVmlld3BvcnR8fFtdLF9pKHMpP3M6W10scCYmdT9jcihwKTpbXSl9ZWxzZSByZXR1cm4gby5jb25jYXQocyxjcihzLFtdLHUpKX1mdW5jdGlvbiB4cyhhKXtyZXR1cm4gYS5wYXJlbnQmJk9iamVjdC5nZXRQcm90b3R5cGVPZihhLnBhcmVudCk/YS5mcmFtZUVsZW1lbnQ6bnVsbH1mdW5jdGlvbiBkdihhKXtjb25zdCBvPUJuKGEpO2xldCB1PXBhcnNlRmxvYXQoby53aWR0aCl8fDAsaT1wYXJzZUZsb2F0KG8uaGVpZ2h0KXx8MDtjb25zdCBzPXpsKGEpLGY9cz9hLm9mZnNldFdpZHRoOnUsZD1zP2Eub2Zmc2V0SGVpZ2h0OmkscD1DaSh1KSE9PWZ8fENpKGkpIT09ZDtyZXR1cm4gcCYmKHU9ZixpPWQpLHt3aWR0aDp1LGhlaWdodDppLCQ6cH19ZnVuY3Rpb24gU3MoYSl7cmV0dXJuIEhuKGEpP2E6YS5jb250ZXh0RWxlbWVudH1mdW5jdGlvbiBXYShhKXtjb25zdCBvPVNzKGEpO2lmKCF6bChvKSlyZXR1cm4gbGwoMSk7Y29uc3QgdT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDppLGhlaWdodDpzLCQ6Zn09ZHYobyk7bGV0IGQ9KGY/Q2kodS53aWR0aCk6dS53aWR0aCkvaSxwPShmP0NpKHUuaGVpZ2h0KTp1LmhlaWdodCkvcztyZXR1cm4oIWR8fCFOdW1iZXIuaXNGaW5pdGUoZCkpJiYoZD0xKSwoIXB8fCFOdW1iZXIuaXNGaW5pdGUocCkpJiYocD0xKSx7eDpkLHk6cH19Y29uc3QgVlQ9bGwoMCk7ZnVuY3Rpb24gbXYoYSl7Y29uc3Qgbz1HdChhKTtyZXR1cm4hYnMoKXx8IW8udmlzdWFsVmlld3BvcnQ/VlQ6e3g6by52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6by52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIFlUKGEsbyx1KXtyZXR1cm4gbz09PXZvaWQgMCYmKG89ITEpLCEhdSYmbyYmdT09PUd0KGEpfWZ1bmN0aW9uIHlhKGEsbyx1LGkpe289PT12b2lkIDAmJihvPSExKSx1PT09dm9pZCAwJiYodT0hMSk7Y29uc3Qgcz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9U3MoYSk7bGV0IGQ9bGwoMSk7byYmKGk/SG4oaSkmJihkPVdhKGkpKTpkPVdhKGEpKTtjb25zdCBwPVlUKGYsdSxpKT9tdihmKTpsbCgwKTtsZXQgeT0ocy5sZWZ0K3AueCkvZC54LGI9KHMudG9wK3AueSkvZC55LHg9cy53aWR0aC9kLngsZz1zLmhlaWdodC9kLnk7aWYoZiYmaSl7Y29uc3QgQz1HdChmKSx3PUhuKGkpP0d0KGkpOmk7bGV0IFI9QyxFPXhzKFIpO2Zvcig7RSYmdyE9PVI7KXtjb25zdCBUPVdhKEUpLE89RS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBPUJuKEUpLE49Ty5sZWZ0KyhFLmNsaWVudExlZnQrcGFyc2VGbG9hdChBLnBhZGRpbmdMZWZ0KSkqVC54LE09Ty50b3ArKEUuY2xpZW50VG9wK3BhcnNlRmxvYXQoQS5wYWRkaW5nVG9wKSkqVC55O3kqPVQueCxiKj1ULnkseCo9VC54LGcqPVQueSx5Kz1OLGIrPU0sUj1HdChFKSxFPXhzKFIpfX1yZXR1cm4gRWkoe3dpZHRoOngsaGVpZ2h0OmcseDp5LHk6Yn0pfWZ1bmN0aW9uIE5pKGEsbyl7Y29uc3QgdT1BaShhKS5zY3JvbGxMZWZ0O3JldHVybiBvP28ubGVmdCt1OnlhKG9sKGEpKS5sZWZ0K3V9ZnVuY3Rpb24gaHYoYSxvKXtjb25zdCB1PWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT11LmxlZnQrby5zY3JvbGxMZWZ0LU5pKGEsdSkscz11LnRvcCtvLnNjcm9sbFRvcDtyZXR1cm57eDppLHk6c319ZnVuY3Rpb24gcVQoYSl7bGV0e2VsZW1lbnRzOm8scmVjdDp1LG9mZnNldFBhcmVudDppLHN0cmF0ZWd5OnN9PWE7Y29uc3QgZj1zPT09ImZpeGVkIixkPW9sKGkpLHA9bz9PaShvLmZsb2F0aW5nKTohMTtpZihpPT09ZHx8cCYmZilyZXR1cm4gdTtsZXQgeT17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxiPWxsKDEpO2NvbnN0IHg9bGwoMCksZz16bChpKTtpZigoZ3x8IWYpJiYoKEphKGkpIT09ImJvZHkifHxfaShkKSkmJih5PUFpKGkpKSxnKSl7Y29uc3Qgdz15YShpKTtiPVdhKGkpLHgueD13LngraS5jbGllbnRMZWZ0LHgueT13LnkraS5jbGllbnRUb3B9Y29uc3QgQz1kJiYhZyYmIWY/aHYoZCx5KTpsbCgwKTtyZXR1cm57d2lkdGg6dS53aWR0aCpiLngsaGVpZ2h0OnUuaGVpZ2h0KmIueSx4OnUueCpiLngteS5zY3JvbGxMZWZ0KmIueCt4LngrQy54LHk6dS55KmIueS15LnNjcm9sbFRvcCpiLnkreC55K0MueX19ZnVuY3Rpb24gWFQoYSl7cmV0dXJuIGEuZ2V0Q2xpZW50UmVjdHM/QXJyYXkuZnJvbShhLmdldENsaWVudFJlY3RzKCkpOltdfWZ1bmN0aW9uIEtUKGEpe2NvbnN0IG89QWkoYSksdT1hLm93bmVyRG9jdW1lbnQuYm9keSxpPW5sKGEuc2Nyb2xsV2lkdGgsYS5jbGllbnRXaWR0aCx1LnNjcm9sbFdpZHRoLHUuY2xpZW50V2lkdGgpLHM9bmwoYS5zY3JvbGxIZWlnaHQsYS5jbGllbnRIZWlnaHQsdS5zY3JvbGxIZWlnaHQsdS5jbGllbnRIZWlnaHQpO2xldCBmPS1vLnNjcm9sbExlZnQrTmkoYSk7Y29uc3QgZD0tby5zY3JvbGxUb3A7cmV0dXJuIEJuKHUpLmRpcmVjdGlvbj09PSJydGwiJiYoZis9bmwoYS5jbGllbnRXaWR0aCx1LmNsaWVudFdpZHRoKS1pKSx7d2lkdGg6aSxoZWlnaHQ6cyx4OmYseTpkfX1jb25zdCBRVD0yNTtmdW5jdGlvbiBaVChhLG8sdSl7dT09PXZvaWQgMCYmKHU9InZpZXdwb3J0Iik7Y29uc3QgaT11PT09ImxheW91dFZpZXdwb3J0IixzPUd0KGEpLGY9b2woYSksZD1zLnZpc3VhbFZpZXdwb3J0O2xldCBwPWYuY2xpZW50V2lkdGgseT1mLmNsaWVudEhlaWdodCxiPTAseD0wO2lmKGQpe2NvbnN0IEM9IWJzKCl8fG89PT0iZml4ZWQiO2k/Q3x8KGI9LWQub2Zmc2V0TGVmdCx4PS1kLm9mZnNldFRvcCk6KHA9ZC53aWR0aCx5PWQuaGVpZ2h0LEMmJihiPWQub2Zmc2V0TGVmdCx4PWQub2Zmc2V0VG9wKSl9aWYoTmkoZik8PTApe2NvbnN0IEM9Zi5vd25lckRvY3VtZW50LHc9Qy5ib2R5LFI9Z2V0Q29tcHV0ZWRTdHlsZSh3KSxFPUMuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmcGFyc2VGbG9hdChSLm1hcmdpbkxlZnQpK3BhcnNlRmxvYXQoUi5tYXJnaW5SaWdodCl8fDAsVD1NYXRoLmFicyhmLmNsaWVudFdpZHRoLXcuY2xpZW50V2lkdGgtRSksTz1nZXRDb21wdXRlZFN0eWxlKGYpLnNjcm9sbGJhckd1dHRlcj09PSJzdGFibGUgYm90aC1lZGdlcyI/VC8yOlQ7Tzw9UVQmJihwLT1PKX1yZXR1cm57d2lkdGg6cCxoZWlnaHQ6eSx4OmIseTp4fX1mdW5jdGlvbiBGVChhLG8pe2NvbnN0IHU9eWEoYSwhMCxvPT09ImZpeGVkIiksaT11LnRvcCthLmNsaWVudFRvcCxzPXUubGVmdCthLmNsaWVudExlZnQsZj1XYShhKSxkPWEuY2xpZW50V2lkdGgqZi54LHA9YS5jbGllbnRIZWlnaHQqZi55LHk9cypmLngsYj1pKmYueTtyZXR1cm57d2lkdGg6ZCxoZWlnaHQ6cCx4OnkseTpifX1mdW5jdGlvbiBwdihhLG8sdSl7bGV0IGk7aWYobz09PSJ2aWV3cG9ydCJ8fG89PT0ibGF5b3V0Vmlld3BvcnQiKWk9WlQoYSx1LG8pO2Vsc2UgaWYobz09PSJkb2N1bWVudCIpaT1LVChvbChhKSk7ZWxzZSBpZihIbihvKSlpPUZUKG8sdSk7ZWxzZXtjb25zdCBzPW12KGEpO2k9e3g6by54LXMueCx5Om8ueS1zLnksd2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9fXJldHVybiBFaShpKX1mdW5jdGlvbiAkVChhLG8pe2NvbnN0IHU9by5nZXQoYSk7aWYodSlyZXR1cm4gdTtsZXQgaT1jcihhLFtdLCExKS5maWx0ZXIocD0+SG4ocCkmJkphKHApIT09ImJvZHkiKSxzPW51bGw7Y29uc3QgZj1CbihhKS5wb3NpdGlvbj09PSJmaXhlZCI7bGV0IGQ9Zj9nYShhKTphO2Zvcig7SG4oZCkmJiFpcihkKTspe2NvbnN0IHA9Qm4oZCkseT15cyhkKSxiPXM/cy5wb3NpdGlvbjpmPyJmaXhlZCI6IiI7IXkmJihiPT09ImZpeGVkInx8Yj09PSJhYnNvbHV0ZSImJnAucG9zaXRpb249PT0ic3RhdGljIik/aT1pLmZpbHRlcihnPT5nIT09ZCk6cz1wLGQ9Z2EoZCl9cmV0dXJuIG8uc2V0KGEsaSksaX1mdW5jdGlvbiBKVChhKXtsZXR7ZWxlbWVudDpvLGJvdW5kYXJ5OnUscm9vdEJvdW5kYXJ5Omksc3RyYXRlZ3k6c309YTtjb25zdCBkPVsuLi51PT09ImNsaXBwaW5nQW5jZXN0b3JzIj9PaShvKT9bXTokVChvLHRoaXMuX2MpOltdLmNvbmNhdCh1KSxpXSxwPXB2KG8sZFswXSxzKTtsZXQgeT1wLnRvcCxiPXAucmlnaHQseD1wLmJvdHRvbSxnPXAubGVmdDtmb3IobGV0IEM9MTtDPGQubGVuZ3RoO0MrKyl7Y29uc3Qgdz1wdihvLGRbQ10scyk7eT1ubCh3LnRvcCx5KSxiPWpsKHcucmlnaHQsYikseD1qbCh3LmJvdHRvbSx4KSxnPW5sKHcubGVmdCxnKX1yZXR1cm57d2lkdGg6Yi1nLGhlaWdodDp4LXkseDpnLHl9fWZ1bmN0aW9uIFdUKGEpe2NvbnN0e3dpZHRoOm8saGVpZ2h0OnV9PWR2KGEpO3JldHVybnt3aWR0aDpvLGhlaWdodDp1fX1mdW5jdGlvbiBldyhhLG8sdSl7Y29uc3QgaT16bChvKSxzPW9sKG8pLGY9dT09PSJmaXhlZCIsZD15YShhLCEwLGYsbyk7bGV0IHA9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH07Y29uc3QgeT1sbCgwKTtpZigoaXx8IWYpJiYoKEphKG8pIT09ImJvZHkifHxfaShzKSkmJihwPUFpKG8pKSxpKSl7Y29uc3QgQz15YShvLCEwLGYsbyk7eS54PUMueCtvLmNsaWVudExlZnQseS55PUMueStvLmNsaWVudFRvcH0haSYmcyYmKHkueD1OaShzKSk7Y29uc3QgYj1zJiYhaSYmIWY/aHYocyxwKTpsbCgwKSx4PWQubGVmdCtwLnNjcm9sbExlZnQteS54LWIueCxnPWQudG9wK3Auc2Nyb2xsVG9wLXkueS1iLnk7cmV0dXJue3gseTpnLHdpZHRoOmQud2lkdGgsaGVpZ2h0OmQuaGVpZ2h0fX1mdW5jdGlvbiBDcyhhKXtyZXR1cm4gQm4oYSkucG9zaXRpb249PT0ic3RhdGljIn1mdW5jdGlvbiB2dihhLG8pe2lmKCF6bChhKXx8Qm4oYSkucG9zaXRpb249PT0iZml4ZWQiKXJldHVybiBudWxsO2lmKG8pcmV0dXJuIG8oYSk7bGV0IHU9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIG9sKGEpPT09dSYmKHU9dS5vd25lckRvY3VtZW50LmJvZHkpLHV9ZnVuY3Rpb24gZ3YoYSxvKXtjb25zdCB1PUd0KGEpO2lmKE9pKGEpKXJldHVybiB1O2lmKCF6bChhKSl7bGV0IHM9Z2EoYSk7Zm9yKDtzJiYhaXIocyk7KXtpZihIbihzKSYmIUNzKHMpKXJldHVybiBzO3M9Z2Eocyl9cmV0dXJuIHV9bGV0IGk9dnYoYSxvKTtmb3IoO2kmJkJUKGkpJiZDcyhpKTspaT12dihpLG8pO3JldHVybiBpJiZpcihpKSYmQ3MoaSkmJiF5cyhpKT91Oml8fEdUKGEpfHx1fWNvbnN0IHR3PWFzeW5jIGZ1bmN0aW9uKGEpe2NvbnN0IG89dGhpcy5nZXRPZmZzZXRQYXJlbnR8fGd2LHU9dGhpcy5nZXREaW1lbnNpb25zLGk9YXdhaXQgdShhLmZsb2F0aW5nKTtyZXR1cm57cmVmZXJlbmNlOmV3KGEucmVmZXJlbmNlLGF3YWl0IG8oYS5mbG9hdGluZyksYS5zdHJhdGVneSksZmxvYXRpbmc6e3g6MCx5OjAsd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fX07ZnVuY3Rpb24gbncoYSl7cmV0dXJuIEJuKGEpLmRpcmVjdGlvbj09PSJydGwifWNvbnN0IGx3PXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpxVCxnZXREb2N1bWVudEVsZW1lbnQ6b2wsZ2V0Q2xpcHBpbmdSZWN0OkpULGdldE9mZnNldFBhcmVudDpndixnZXRFbGVtZW50UmVjdHM6dHcsZ2V0Q2xpZW50UmVjdHM6WFQsZ2V0RGltZW5zaW9uczpXVCxnZXRTY2FsZTpXYSxpc0VsZW1lbnQ6SG4saXNSVEw6bnd9O2Z1bmN0aW9uIHl2KGEsbyl7cmV0dXJuIGEueD09PW8ueCYmYS55PT09by55JiZhLndpZHRoPT09by53aWR0aCYmYS5oZWlnaHQ9PT1vLmhlaWdodH1mdW5jdGlvbiBhdyhhLG8sdSl7bGV0IGk9bnVsbCxzO2NvbnN0IGY9b2woYSk7ZnVuY3Rpb24gZCgpe3ZhciB4O2NsZWFyVGltZW91dChzKSwoeD1pKT09bnVsbHx8eC5kaXNjb25uZWN0KCksaT1udWxsfWZ1bmN0aW9uIHAoeCxnKXt4PT09dm9pZCAwJiYoeD0hMSksZz09PXZvaWQgMCYmKGc9MSksZCgpO2NvbnN0IEM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7bGVmdDp3LHRvcDpSLHdpZHRoOkUsaGVpZ2h0OlR9PUM7aWYoeHx8bygpLCFFfHwhVClyZXR1cm47Y29uc3QgTz1UaShSKSxBPVRpKGYuY2xpZW50V2lkdGgtKHcrRSkpLE49VGkoZi5jbGllbnRIZWlnaHQtKFIrVCkpLE09VGkodyksSD17cm9vdE1hcmdpbjotTysicHggIistQSsicHggIistTisicHggIistTSsicHgiLHRocmVzaG9sZDpubCgwLGpsKDEsZykpfHwxfTtsZXQgVT0hMDtmdW5jdGlvbiBCKEope2NvbnN0IFc9SlswXS5pbnRlcnNlY3Rpb25SYXRpbztpZigheXYoQyxhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSlyZXR1cm4gcCgpO2lmKFchPT1nKXtpZighVSlyZXR1cm4gcCgpO1c/cCghMSxXKTpzPXNldFRpbWVvdXQoKCk9PntwKCExLDFlLTcpfSwxZTMpfVU9ITF9dHJ5e2k9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKEIsey4uLkgscm9vdDpmLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtpPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihCLEgpfWkub2JzZXJ2ZShhKX1jb25zdCB5PUd0KGEpLGI9KCk9PnAodSk7cmV0dXJuIHkuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixiKSxwKCEwKSwoKT0+e3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixiKSxkKCl9fWZ1bmN0aW9uIG93KGEsbyx1LGkpe2k9PT12b2lkIDAmJihpPXt9KTtjb25zdHthbmNlc3RvclNjcm9sbDpzPSEwLGFuY2VzdG9yUmVzaXplOmY9ITAsZWxlbWVudFJlc2l6ZTpkPXR5cGVvZiBSZXNpemVPYnNlcnZlcj09ImZ1bmN0aW9uIixsYXlvdXRTaGlmdDpwPXR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcj09ImZ1bmN0aW9uIixhbmltYXRpb25GcmFtZTp5PSExfT1pLGI9U3MoYSkseD1zfHxmP1suLi5iP2NyKGIpOltdLC4uLm8/Y3Iobyk6W11dOltdO3guZm9yRWFjaChPPT57cyYmTy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHUpLGYmJk8uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix1KX0pO2NvbnN0IGc9YiYmcD9hdyhiLHUsZik6bnVsbDtsZXQgQz0tMSx3PW51bGw7ZCYmKHc9bmV3IFJlc2l6ZU9ic2VydmVyKE89PntsZXRbQV09TztBJiZBLnRhcmdldD09PWImJncmJm8mJih3LnVub2JzZXJ2ZShvKSxjYW5jZWxBbmltYXRpb25GcmFtZShDKSxDPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ZhciBOOyhOPXcpPT1udWxsfHxOLm9ic2VydmUobyl9KSksdSgpfSksYiYmIXkmJncub2JzZXJ2ZShiKSxvJiZ3Lm9ic2VydmUobykpO2xldCBSLEU9eT95YShhKTpudWxsO3kmJlQoKTtmdW5jdGlvbiBUKCl7Y29uc3QgTz15YShhKTtFJiYheXYoRSxPKSYmdSgpLEU9TyxSPXJlcXVlc3RBbmltYXRpb25GcmFtZShUKX1yZXR1cm4gdSgpLCgpPT57dmFyIE87eC5mb3JFYWNoKEE9PntzJiZBLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdSksZiYmQS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHUpfSksZz8uKCksKE89dyk9PW51bGx8fE8uZGlzY29ubmVjdCgpLHc9bnVsbCx5JiZjYW5jZWxBbmltYXRpb25GcmFtZShSKX19Y29uc3Qgcnc9a1QsaXc9TFQsY3c9alQsdXc9SFQsc3c9TVQsYnY9RFQsZnc9VVQsZHc9KGEsbyx1KT0+e2NvbnN0IGk9bmV3IE1hcCxzPXU/P3t9LGY9ey4uLmx3LC4uLnMucGxhdGZvcm0sX2M6aX07cmV0dXJuIE5UKGEsbyx7Li4ucyxwbGF0Zm9ybTpmfSl9O3ZhciBtdz10eXBlb2YgZG9jdW1lbnQ8InUiLGh3PWZ1bmN0aW9uKCl7fSxEaT1tdz92LnVzZUxheW91dEVmZmVjdDpodztmdW5jdGlvbiBqaShhLG8pe2lmKGE9PT1vKXJldHVybiEwO2lmKHR5cGVvZiBhIT10eXBlb2YgbylyZXR1cm4hMTtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIiYmYS50b1N0cmluZygpPT09by50b1N0cmluZygpKXJldHVybiEwO2xldCB1LGkscztpZihhJiZvJiZ0eXBlb2YgYT09Im9iamVjdCIpe2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKHU9YS5sZW5ndGgsdSE9PW8ubGVuZ3RoKXJldHVybiExO2ZvcihpPXU7aS0tIT09MDspaWYoIWppKGFbaV0sb1tpXSkpcmV0dXJuITE7cmV0dXJuITB9aWYocz1PYmplY3Qua2V5cyhhKSx1PXMubGVuZ3RoLHUhPT1PYmplY3Qua2V5cyhvKS5sZW5ndGgpcmV0dXJuITE7Zm9yKGk9dTtpLS0hPT0wOylpZighe30uaGFzT3duUHJvcGVydHkuY2FsbChvLHNbaV0pKXJldHVybiExO2ZvcihpPXU7aS0tIT09MDspe2NvbnN0IGY9c1tpXTtpZighKGY9PT0iX293bmVyIiYmYS4kJHR5cGVvZikmJiFqaShhW2ZdLG9bZl0pKXJldHVybiExfXJldHVybiEwfXJldHVybiBhIT09YSYmbyE9PW99ZnVuY3Rpb24geHYoYSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiPzE6KGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIFN2KGEsbyl7Y29uc3QgdT14dihhKTtyZXR1cm4gTWF0aC5yb3VuZChvKnUpL3V9ZnVuY3Rpb24gVHMoYSl7Y29uc3Qgbz12LnVzZVJlZihhKTtyZXR1cm4gRGkoKCk9PntvLmN1cnJlbnQ9YX0pLG99ZnVuY3Rpb24gcHcoYSl7YT09PXZvaWQgMCYmKGE9e30pO2NvbnN0e3BsYWNlbWVudDpvPSJib3R0b20iLHN0cmF0ZWd5OnU9ImFic29sdXRlIixtaWRkbGV3YXJlOmk9W10scGxhdGZvcm06cyxlbGVtZW50czp7cmVmZXJlbmNlOmYsZmxvYXRpbmc6ZH09e30sdHJhbnNmb3JtOnA9ITAsd2hpbGVFbGVtZW50c01vdW50ZWQ6eSxvcGVuOmJ9PWEsW3gsZ109di51c2VTdGF0ZSh7eDowLHk6MCxzdHJhdGVneTp1LHBsYWNlbWVudDpvLG1pZGRsZXdhcmVEYXRhOnt9LGlzUG9zaXRpb25lZDohMX0pLFtDLHddPXYudXNlU3RhdGUoaSk7amkoQyxpKXx8dyhpKTtjb25zdFtSLEVdPXYudXNlU3RhdGUobnVsbCksW1QsT109di51c2VTdGF0ZShudWxsKSxBPXYudXNlQ2FsbGJhY2soRj0+e0YhPT1ILmN1cnJlbnQmJihILmN1cnJlbnQ9RixFKEYpKX0sW10pLE49di51c2VDYWxsYmFjayhGPT57RiE9PVUuY3VycmVudCYmKFUuY3VycmVudD1GLE8oRikpfSxbXSksTT1mfHxSLFk9ZHx8VCxIPXYudXNlUmVmKG51bGwpLFU9di51c2VSZWYobnVsbCksQj12LnVzZVJlZih4KSxKPXkhPW51bGwsVz1Ucyh5KSxuZT1UcyhzKSxlZT1UcyhiKSxjZT12LnVzZUNhbGxiYWNrKCgpPT57aWYoIUguY3VycmVudHx8IVUuY3VycmVudClyZXR1cm47Y29uc3QgRj17cGxhY2VtZW50Om8sc3RyYXRlZ3k6dSxtaWRkbGV3YXJlOkN9O25lLmN1cnJlbnQmJihGLnBsYXRmb3JtPW5lLmN1cnJlbnQpLGR3KEguY3VycmVudCxVLmN1cnJlbnQsRikudGhlbihyZT0+e2NvbnN0IHE9ey4uLnJlLGlzUG9zaXRpb25lZDplZS5jdXJyZW50IT09ITF9O21lLmN1cnJlbnQmJiFqaShCLmN1cnJlbnQscSkmJihCLmN1cnJlbnQ9cSxaYS5mbHVzaFN5bmMoKCk9PntnKHEpfSkpfSl9LFtDLG8sdSxuZSxlZV0pO0RpKCgpPT57Yj09PSExJiZCLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoQi5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxnKEY9Pih7Li4uRixpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbYl0pO2NvbnN0IG1lPXYudXNlUmVmKCExKTtEaSgoKT0+KG1lLmN1cnJlbnQ9ITAsKCk9PnttZS5jdXJyZW50PSExfSksW10pLERpKCgpPT57aWYoTSYmKEguY3VycmVudD1NKSxZJiYoVS5jdXJyZW50PVkpLE0mJlkpe2lmKFcuY3VycmVudClyZXR1cm4gVy5jdXJyZW50KE0sWSxjZSk7Y2UoKX19LFtNLFksY2UsVyxKXSk7Y29uc3QgaGU9di51c2VNZW1vKCgpPT4oe3JlZmVyZW5jZTpILGZsb2F0aW5nOlUsc2V0UmVmZXJlbmNlOkEsc2V0RmxvYXRpbmc6Tn0pLFtBLE5dKSxQPXYudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6TSxmbG9hdGluZzpZfSksW00sWV0pLCQ9di51c2VNZW1vKCgpPT57Y29uc3QgRj17cG9zaXRpb246dSxsZWZ0OjAsdG9wOjB9O2lmKCFQLmZsb2F0aW5nKXJldHVybiBGO2NvbnN0IHJlPVN2KFAuZmxvYXRpbmcseC54KSxxPVN2KFAuZmxvYXRpbmcseC55KTtyZXR1cm4gcD97Li4uRix0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK3JlKyJweCwgIitxKyJweCkiLC4uLnh2KFAuZmxvYXRpbmcpPj0xLjUmJnt3aWxsQ2hhbmdlOiJ0cmFuc2Zvcm0ifX06e3Bvc2l0aW9uOnUsbGVmdDpyZSx0b3A6cX19LFt1LHAsUC5mbG9hdGluZyx4LngseC55XSk7cmV0dXJuIHYudXNlTWVtbygoKT0+KHsuLi54LHVwZGF0ZTpjZSxyZWZzOmhlLGVsZW1lbnRzOlAsZmxvYXRpbmdTdHlsZXM6JH0pLFt4LGNlLGhlLFAsJF0pfWNvbnN0IHZ3PWE9PntmdW5jdGlvbiBvKHUpe3JldHVybnt9Lmhhc093blByb3BlcnR5LmNhbGwodSwiY3VycmVudCIpfXJldHVybntuYW1lOiJhcnJvdyIsb3B0aW9uczphLGZuKHUpe2NvbnN0e2VsZW1lbnQ6aSxwYWRkaW5nOnN9PXR5cGVvZiBhPT0iZnVuY3Rpb24iP2EodSk6YTtyZXR1cm4gaSYmbyhpKT9pLmN1cnJlbnQhPW51bGw/YnYoe2VsZW1lbnQ6aS5jdXJyZW50LHBhZGRpbmc6c30pLmZuKHUpOnt9Omk/YnYoe2VsZW1lbnQ6aSxwYWRkaW5nOnN9KS5mbih1KTp7fX19fSxndz0oYSxvKT0+e2NvbnN0IHU9cncoYSk7cmV0dXJue25hbWU6dS5uYW1lLGZuOnUuZm4sb3B0aW9uczpbYSxvXX19LHl3PShhLG8pPT57Y29uc3QgdT1pdyhhKTtyZXR1cm57bmFtZTp1Lm5hbWUsZm46dS5mbixvcHRpb25zOlthLG9dfX0sYnc9KGEsbyk9Pih7Zm46ZncoYSkuZm4sb3B0aW9uczpbYSxvXX0pLHh3PShhLG8pPT57Y29uc3QgdT1jdyhhKTtyZXR1cm57bmFtZTp1Lm5hbWUsZm46dS5mbixvcHRpb25zOlthLG9dfX0sU3c9KGEsbyk9Pntjb25zdCB1PXV3KGEpO3JldHVybntuYW1lOnUubmFtZSxmbjp1LmZuLG9wdGlvbnM6W2Esb119fSxDdz0oYSxvKT0+e2NvbnN0IHU9c3coYSk7cmV0dXJue25hbWU6dS5uYW1lLGZuOnUuZm4sb3B0aW9uczpbYSxvXX19LFR3PShhLG8pPT57Y29uc3QgdT12dyhhKTtyZXR1cm57bmFtZTp1Lm5hbWUsZm46dS5mbixvcHRpb25zOlthLG9dfX07dmFyIHd3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxFdz0oYSxvKT0+d3coYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksUnc9di5mb3J3YXJkUmVmKEV3KGZ1bmN0aW9uKG8sdSl7Y29uc3R7Y2hpbGRyZW46aSx3aWR0aDpzPTEwLGhlaWdodDpmPTUsLi4uZH09bztyZXR1cm4gbS5qc3goQ2Uuc3ZnLHsuLi5kLHJlZjp1LHdpZHRoOnMsaGVpZ2h0OmYsdmlld0JveDoiMCAwIDMwIDEwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjaGlsZHJlbjpvLmFzQ2hpbGQ/aTptLmpzeCgicG9seWdvbiIse3BvaW50czoiMCwwIDMwLDAgMTUsMTAifSl9KX0sIkFycm93IikpLF93PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxPdz0oYSxvKT0+X3coYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gdXIoYSl7Y29uc3Rbbyx1XT12LnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIG50KCgpPT57aWYoYSl7dSh7d2lkdGg6YS5vZmZzZXRXaWR0aCxoZWlnaHQ6YS5vZmZzZXRIZWlnaHR9KTtsZXQgaT0wO2NvbnN0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKGY9PntpZighQXJyYXkuaXNBcnJheShmKXx8IWYubGVuZ3RoKXJldHVybjtjb25zdCBkPWZbMF07d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2xldCBwLHk7aWYoImJvcmRlckJveFNpemUiaW4gZCl7Y29uc3QgYj1kLmJvcmRlckJveFNpemUseD1BcnJheS5pc0FycmF5KGIpP2JbMF06YjtwPXguaW5saW5lU2l6ZSx5PXguYmxvY2tTaXplfWVsc2UgcD1hLm9mZnNldFdpZHRoLHk9YS5vZmZzZXRIZWlnaHQ7dSh7d2lkdGg6cCxoZWlnaHQ6eX0pfSl9KTtyZXR1cm4gcy5vYnNlcnZlKGEse2JveDoiYm9yZGVyLWJveCJ9KSwoKT0+e3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShpKSxzLnVub2JzZXJ2ZShhKX19ZWxzZSB1KHZvaWQgMCl9LFthXSksb31Pdyh1ciwidXNlU2l6ZSIpO3ZhciBBdz1PYmplY3QuZGVmaW5lUHJvcGVydHkscmw9KGEsbyk9PkF3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLEN2PXtQYXJ0aWFsOiJwYXJ0aWFsIn0sVHY9e09wdGltaXplZDoib3B0aW1pemVkIixBbHdheXM6ImFsd2F5cyJ9LHd2PSJQb3BwZXIiLFtFdixlb109TXQod3YpLFtOdyxSdl09RXYod3YpLHdzPXJsKGE9Pntjb25zdHtfX3Njb3BlUG9wcGVyOm8sY2hpbGRyZW46dX09YSxbaSxzXT12LnVzZVN0YXRlKG51bGwpLFtmLGRdPXYudXNlU3RhdGUodm9pZCAwKTtyZXR1cm4gbS5qc3goTncse3Njb3BlOm8sYW5jaG9yOmksb25BbmNob3JDaGFuZ2U6cyxwbGFjZW1lbnRTdGF0ZTpmLHNldFBsYWNlbWVudFN0YXRlOmQsY2hpbGRyZW46dX0pfSwiUG9wcGVyIiksRHc9IlBvcHBlckFuY2hvciIsRXM9di5mb3J3YXJkUmVmKHJsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVBvcHBlcjppLHZpcnR1YWxSZWY6cywuLi5mfT1vLGQ9UnYoRHcsaSkscD12LnVzZVJlZihudWxsKSx5PWQub25BbmNob3JDaGFuZ2UsYj12LnVzZUNhbGxiYWNrKEU9PntwLmN1cnJlbnQ9RSxFJiZ5KEUpfSxbeV0pLHg9RWUodSxiKSxnPXYudXNlUmVmKG51bGwpO3YudXNlRWZmZWN0KCgpPT57aWYoIXMpcmV0dXJuO2NvbnN0IEU9Zy5jdXJyZW50O2cuY3VycmVudD1zLmN1cnJlbnQsRSE9PWcuY3VycmVudCYmeShnLmN1cnJlbnQpfSk7Y29uc3QgQz1kLnBsYWNlbWVudFN0YXRlJiZNaShkLnBsYWNlbWVudFN0YXRlKSx3PUM/LlswXSxSPUM/LlsxXTtyZXR1cm4gcz9udWxsOm0uanN4KENlLmRpdix7ImRhdGEtcmFkaXgtcG9wcGVyLXNpZGUiOncsImRhdGEtcmFkaXgtcG9wcGVyLWFsaWduIjpSLC4uLmYscmVmOnh9KX0sIlBvcHBlckFuY2hvciIpKSxfdj0iUG9wcGVyQ29udGVudCIsW2p3LE13XT1FdihfdiksUnM9di5mb3J3YXJkUmVmKHJsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVBvcHBlcjppLHNpZGU6cz0iYm90dG9tIixzaWRlT2Zmc2V0OmY9MCxhbGlnbjpkPSJjZW50ZXIiLGFsaWduT2Zmc2V0OnA9MCxhcnJvd1BhZGRpbmc6eT0wLGF2b2lkQ29sbGlzaW9uczpiPSEwLGNvbGxpc2lvbkJvdW5kYXJ5Ong9W10sY29sbGlzaW9uUGFkZGluZzpnPTAsc3RpY2t5OkM9Q3YuUGFydGlhbCxoaWRlV2hlbkRldGFjaGVkOnc9ITEsdXBkYXRlUG9zaXRpb25TdHJhdGVneTpSPVR2Lk9wdGltaXplZCxvblBsYWNlZDpFLC4uLlR9PW8sTz1SdihfdixpKSxbQSxOXT12LnVzZVN0YXRlKG51bGwpLE09RWUodSxOKSxbWSxIXT12LnVzZVN0YXRlKG51bGwpLFU9dXIoWSksQj1VPy53aWR0aD8/MCxKPVU/LmhlaWdodD8/MCxXPXMrKGQhPT0iY2VudGVyIj8iLSIrZDoiIiksbmU9dHlwZW9mIGc9PSJudW1iZXIiP2c6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLmd9LGVlPUFycmF5LmlzQXJyYXkoeCk/eDpbeF0sY2U9ZWUubGVuZ3RoPjAsbWU9e3BhZGRpbmc6bmUsYm91bmRhcnk6ZWUuZmlsdGVyKE92KSxhbHRCb3VuZGFyeTpjZX0se3JlZnM6aGUsZmxvYXRpbmdTdHlsZXM6UCxwbGFjZW1lbnQ6JCxpc1Bvc2l0aW9uZWQ6RixtaWRkbGV3YXJlRGF0YTpyZX09cHcoe3N0cmF0ZWd5OiJmaXhlZCIscGxhY2VtZW50Olcsd2hpbGVFbGVtZW50c01vdW50ZWQ6cmwoKC4uLnNlKT0+b3coLi4uc2Use2FuaW1hdGlvbkZyYW1lOlI9PT1Udi5BbHdheXN9KSwid2hpbGVFbGVtZW50c01vdW50ZWQiKSxlbGVtZW50czp7cmVmZXJlbmNlOk8uYW5jaG9yfSxtaWRkbGV3YXJlOltndyh7bWFpbkF4aXM6ZitKLGFsaWdubWVudEF4aXM6cH0pLGImJnl3KHttYWluQXhpczohMCxjcm9zc0F4aXM6ITEsLi4uQz09PUN2LlBhcnRpYWw/e2xpbWl0ZXI6YncoKX06e30sLi4ubWV9KSxiJiZ4dyh7Li4ubWV9KSxTdyh7Li4ubWUsYXBwbHk6cmwoKHtlbGVtZW50czpzZSxyZWN0czpsZSxhdmFpbGFibGVXaWR0aDp0ZSxhdmFpbGFibGVIZWlnaHQ6aWV9KT0+e2NvbnN0e3dpZHRoOmJlLGhlaWdodDp3ZX09bGUucmVmZXJlbmNlLFJlPXNlLmZsb2F0aW5nLnN0eWxlO1JlLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgiLGAke3RlfXB4YCksUmUuc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQiLGAke2llfXB4YCksUmUuc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCIsYCR7YmV9cHhgKSxSZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodCIsYCR7d2V9cHhgKX0sImFwcGx5Iil9KSxZJiZUdyh7ZWxlbWVudDpZLHBhZGRpbmc6eX0pLFV3KHthcnJvd1dpZHRoOkIsYXJyb3dIZWlnaHQ6Sn0pLHcmJkN3KGNlP3tzdHJhdGVneToicmVmZXJlbmNlSGlkZGVuIiwuLi5tZX06e3N0cmF0ZWd5OiJyZWZlcmVuY2VIaWRkZW4iLHBhZGRpbmc6bWUucGFkZGluZyxhbHRCb3VuZGFyeTptZS5hbHRCb3VuZGFyeX0pXX0pLHE9Ty5zZXRQbGFjZW1lbnRTdGF0ZTtudCgoKT0+KHEoJCksKCk9PntxKHZvaWQgMCl9KSxbJCxxXSk7Y29uc3RbeGUsamVdPU1pKCQpLFllPXp0KEUpO250KCgpPT57RiYmWWU/LigpfSxbRixZZV0pO2NvbnN0IEQ9cmUuYXJyb3c/LngsWD1yZS5hcnJvdz8ueSxLPXJlLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wLFthZSx5ZV09di51c2VTdGF0ZSgpO3JldHVybiBudCgoKT0+e0EmJnllKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKEEpLnpJbmRleCl9LFtBXSksbS5qc3goImRpdiIse3JlZjpoZS5zZXRGbG9hdGluZywiZGF0YS1yYWRpeC1wb3BwZXItY29udGVudC13cmFwcGVyIjoiIixzdHlsZTp7Li4uUCx0cmFuc2Zvcm06Rj9QLnRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yMDAlKSIsbWluV2lkdGg6Im1heC1jb250ZW50Iix6SW5kZXg6YWUsIi0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4iOltyZS50cmFuc2Zvcm1PcmlnaW4/LngscmUudHJhbnNmb3JtT3JpZ2luPy55XS5qb2luKCIgIiksLi4ucmUuaGlkZT8ucmVmZXJlbmNlSGlkZGVuJiZ7dmlzaWJpbGl0eToiaGlkZGVuIixwb2ludGVyRXZlbnRzOiJub25lIn19LGRpcjpvLmRpcixjaGlsZHJlbjptLmpzeChqdyx7c2NvcGU6aSxwbGFjZWRTaWRlOnhlLHBsYWNlZEFsaWduOmplLG9uQXJyb3dDaGFuZ2U6SCxhcnJvd1g6RCxhcnJvd1k6WCxzaG91bGRIaWRlQXJyb3c6SyxjaGlsZHJlbjptLmpzeChDZS5kaXYseyJkYXRhLXNpZGUiOnhlLCJkYXRhLWFsaWduIjpqZSwuLi5ULHJlZjpNLHN0eWxlOnsuLi5ULnN0eWxlLGFuaW1hdGlvbjpGP1Quc3R5bGU/LmFuaW1hdGlvbjoibm9uZSJ9fSl9KX0pfSwiUG9wcGVyQ29udGVudCIpKSx6dz0iUG9wcGVyQXJyb3ciLGt3PXt0b3A6ImJvdHRvbSIscmlnaHQ6ImxlZnQiLGJvdHRvbToidG9wIixsZWZ0OiJyaWdodCJ9LEx3PXYuZm9yd2FyZFJlZihybChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVQb3BwZXI6aSwuLi5zfT1vLGY9TXcoencsaSksZD1rd1tmLnBsYWNlZFNpZGVdO3JldHVybiBtLmpzeCgic3BhbiIse3JlZjpmLm9uQXJyb3dDaGFuZ2Usc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpmLmFycm93WCx0b3A6Zi5hcnJvd1ksW2RdOjAsdHJhbnNmb3JtT3JpZ2luOnt0b3A6IiIscmlnaHQ6IjAgMCIsYm90dG9tOiJjZW50ZXIgMCIsbGVmdDoiMTAwJSAwIn1bZi5wbGFjZWRTaWRlXSx0cmFuc2Zvcm06e3RvcDoidHJhbnNsYXRlWSgxMDAlKSIscmlnaHQ6InRyYW5zbGF0ZVkoNTAlKSByb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZVgoLTUwJSkiLGJvdHRvbToicm90YXRlKDE4MGRlZykiLGxlZnQ6InRyYW5zbGF0ZVkoNTAlKSByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGVYKDUwJSkifVtmLnBsYWNlZFNpZGVdLHZpc2liaWxpdHk6Zi5zaG91bGRIaWRlQXJyb3c/ImhpZGRlbiI6dm9pZCAwfSxjaGlsZHJlbjptLmpzeChSdyx7Li4ucyxyZWY6dSxzdHlsZTp7Li4ucy5zdHlsZSxkaXNwbGF5OiJibG9jayJ9fSl9KX0sIlBvcHBlckFycm93IikpO2Z1bmN0aW9uIE92KGEpe3JldHVybiBhIT09bnVsbH1ybChPdiwiaXNOb3ROdWxsIik7dmFyIFV3PXJsKGE9Pih7bmFtZToidHJhbnNmb3JtT3JpZ2luIixvcHRpb25zOmEsZm4obyl7Y29uc3R7cGxhY2VtZW50OnUscmVjdHM6aSxtaWRkbGV3YXJlRGF0YTpzfT1vLGQ9cy5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MCxwPWQ/MDphLmFycm93V2lkdGgseT1kPzA6YS5hcnJvd0hlaWdodCxbYix4XT1NaSh1KSxnPXtzdGFydDoiMCUiLGNlbnRlcjoiNTAlIixlbmQ6IjEwMCUifVt4XSxDPShzLmFycm93Py54Pz8wKStwLzIsdz0ocy5hcnJvdz8ueT8/MCkreS8yO2xldCBSPSIiLEU9IiI7cmV0dXJuIGI9PT0iYm90dG9tIj8oUj1kP2c6YCR7Q31weGAsRT1gJHsteX1weGApOmI9PT0idG9wIj8oUj1kP2c6YCR7Q31weGAsRT1gJHtpLmZsb2F0aW5nLmhlaWdodCt5fXB4YCk6Yj09PSJyaWdodCI/KFI9YCR7LXl9cHhgLEU9ZD9nOmAke3d9cHhgKTpiPT09ImxlZnQiJiYoUj1gJHtpLmZsb2F0aW5nLndpZHRoK3l9cHhgLEU9ZD9nOmAke3d9cHhgKSx7ZGF0YTp7eDpSLHk6RX19fX0pLCJ0cmFuc2Zvcm1PcmlnaW4iKTtmdW5jdGlvbiBNaShhKXtjb25zdFtvLHU9ImNlbnRlciJdPWEuc3BsaXQoIi0iKTtyZXR1cm5bbyx1XX1ybChNaSwiZ2V0U2lkZUFuZEFsaWduRnJvbVBsYWNlbWVudCIpO3ZhciBIdz1PYmplY3QuZGVmaW5lUHJvcGVydHksQnc9KGEsbyk9Pkh3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLHNyPXYuZm9yd2FyZFJlZihCdyhmdW5jdGlvbihvLHUpe2NvbnN0e2NvbnRhaW5lcjppLC4uLnN9PW8sW2YsZF09di51c2VTdGF0ZSghMSk7bnQoKCk9PmQoITApLFtdKTtjb25zdCBwPWl8fGYmJmdsb2JhbFRoaXM/LmRvY3VtZW50Py5ib2R5O3JldHVybiBwP1phLmNyZWF0ZVBvcnRhbChtLmpzeChDZS5kaXYsey4uLnMscmVmOnV9KSxwKTpudWxsfSwiUG9ydGFsIikpLEl3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpbD0oYSxvKT0+SXcoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gQXYoYSxvKXtyZXR1cm4gdi51c2VSZWR1Y2VyKCh1LGkpPT5vW3VdW2ldPz91LGEpfWlsKEF2LCJ1c2VTdGF0ZU1hY2hpbmUiKTt2YXIgbW49aWwoYT0+e2NvbnN0e3ByZXNlbnQ6byxjaGlsZHJlbjp1fT1hLGk9TnYobykscz10eXBlb2YgdT09ImZ1bmN0aW9uIj91KHtwcmVzZW50OmkuaXNQcmVzZW50fSk6di5DaGlsZHJlbi5vbmx5KHUpLGY9RHYoaS5yZWYsanYocykpO3JldHVybiB0eXBlb2YgdT09ImZ1bmN0aW9uInx8aS5pc1ByZXNlbnQ/di5jbG9uZUVsZW1lbnQocyx7cmVmOmZ9KTpudWxsfSwiUHJlc2VuY2UiKTtmdW5jdGlvbiBOdihhKXtjb25zdFtvLHVdPXYudXNlU3RhdGUoKSxpPXYudXNlUmVmKG51bGwpLHM9di51c2VSZWYoYSksZj12LnVzZVJlZigibm9uZSIpLGQ9di51c2VSZWYodm9pZCAwKSxwPWE/Im1vdW50ZWQiOiJ1bm1vdW50ZWQiLFt5LGJdPUF2KHAse21vdW50ZWQ6e1VOTU9VTlQ6InVubW91bnRlZCIsQU5JTUFUSU9OX09VVDoidW5tb3VudFN1c3BlbmRlZCJ9LHVubW91bnRTdXNwZW5kZWQ6e01PVU5UOiJtb3VudGVkIixBTklNQVRJT05fRU5EOiJ1bm1vdW50ZWQifSx1bm1vdW50ZWQ6e01PVU5UOiJtb3VudGVkIn19KTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pnt5PT09Im1vdW50ZWQiPyhmLmN1cnJlbnQ9ZC5jdXJyZW50Pz90byhpLmN1cnJlbnQpLGQuY3VycmVudD12b2lkIDApOmYuY3VycmVudD0ibm9uZSJ9LFt5XSksbnQoKCk9Pntjb25zdCB4PWkuY3VycmVudCxnPXMuY3VycmVudDtpZihnIT09YSl7Y29uc3Qgdz1mLmN1cnJlbnQsUj10byh4KTthPyhkLmN1cnJlbnQ9UixiKCJNT1VOVCIpKTpSPT09Im5vbmUifHx4Py5kaXNwbGF5PT09Im5vbmUiP2IoIlVOTU9VTlQiKTpiKGcmJnchPT1SPyJBTklNQVRJT05fT1VUIjoiVU5NT1VOVCIpLHMuY3VycmVudD1hfX0sW2EsYl0pLG50KCgpPT57aWYobyl7bGV0IHg7Y29uc3QgZz1vLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc/P3dpbmRvdyxDPWlsKFI9Pntjb25zdCBUPXRvKGkuY3VycmVudCkuaW5jbHVkZXMoQ1NTLmVzY2FwZShSLmFuaW1hdGlvbk5hbWUpKTtpZihSLnRhcmdldD09PW8mJlQmJihiKCJBTklNQVRJT05fRU5EIiksIXMuY3VycmVudCkpe2NvbnN0IE89by5zdHlsZS5hbmltYXRpb25GaWxsTW9kZTtvLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPSJmb3J3YXJkcyIseD1nLnNldFRpbWVvdXQoKCk9PntvLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPT09ImZvcndhcmRzIiYmKG8uc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9Tyl9KX19LCJoYW5kbGVBbmltYXRpb25FbmQiKSx3PWlsKFI9PntSLnRhcmdldD09PW8mJihmLmN1cnJlbnQ9dG8oaS5jdXJyZW50KSl9LCJoYW5kbGVBbmltYXRpb25TdGFydCIpO3JldHVybiBvLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0Iix3KSxvLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmNhbmNlbCIsQyksby5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLEMpLCgpPT57Zy5jbGVhclRpbWVvdXQoeCksby5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsdyksby5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25jYW5jZWwiLEMpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIixDKX19ZWxzZSBiKCJBTklNQVRJT05fRU5EIil9LFtvLGJdKSx7aXNQcmVzZW50OlsibW91bnRlZCIsInVubW91bnRTdXNwZW5kZWQiXS5pbmNsdWRlcyh5KSxyZWY6di51c2VDYWxsYmFjayh4PT57aWYoeCl7Y29uc3QgZz1nZXRDb21wdXRlZFN0eWxlKHgpO2kuY3VycmVudD1nLGQuY3VycmVudD10byhnKX1lbHNlIGkuY3VycmVudD1udWxsO3UoeCl9LFtdKX19aWwoTnYsInVzZVByZXNlbmNlIik7ZnVuY3Rpb24gX3MoYSxvKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gYShvKTthIT1udWxsJiYoYS5jdXJyZW50PW8pfWlsKF9zLCJzZXRSZWYiKTtmdW5jdGlvbiBEdiguLi5hKXtjb25zdCBvPXYudXNlUmVmKGEpO3JldHVybiBvLmN1cnJlbnQ9YSx2LnVzZUNhbGxiYWNrKHU9Pntjb25zdCBpPW8uY3VycmVudDtsZXQgcz0hMTtjb25zdCBmPWkubWFwKGQ9Pntjb25zdCBwPV9zKGQsdSk7cmV0dXJuIXMmJnR5cGVvZiBwPT0iZnVuY3Rpb24iJiYocz0hMCkscH0pO2lmKHMpcmV0dXJuKCk9Pntmb3IobGV0IGQ9MDtkPGYubGVuZ3RoO2QrKyl7Y29uc3QgcD1mW2RdO3R5cGVvZiBwPT0iZnVuY3Rpb24iP3AoKTpfcyhpW2RdLG51bGwpfX19LFtdKX1pbChEdiwidXNlU3RhYmxlQ29tcG9zZWRSZWZzIik7ZnVuY3Rpb24gdG8oYSl7cmV0dXJuIGE/LmFuaW1hdGlvbk5hbWV8fCJub25lIn1pbCh0bywiZ2V0QW5pbWF0aW9uTmFtZSIpO2Z1bmN0aW9uIGp2KGEpe2xldCBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5wcm9wcywicmVmIik/LmdldCx1PW8mJiJpc1JlYWN0V2FybmluZyJpbiBvJiZvLmlzUmVhY3RXYXJuaW5nO3JldHVybiB1P2EucmVmOihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSwicmVmIik/LmdldCx1PW8mJiJpc1JlYWN0V2FybmluZyJpbiBvJiZvLmlzUmVhY3RXYXJuaW5nLHU/YS5wcm9wcy5yZWY6YS5wcm9wcy5yZWZ8fGEucmVmKX1pbChqdiwiZ2V0RWxlbWVudFJlZiIpO3ZhciBQdz1PYmplY3QuZGVmaW5lUHJvcGVydHksR3c9KGEsbyk9PlB3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLE12PUFsWyIgdXNlRWZmZWN0RXZlbnQgIi50cmltKCkudG9TdHJpbmcoKV0senY9QWxbIiB1c2VJbnNlcnRpb25FZmZlY3QgIi50cmltKCkudG9TdHJpbmcoKV07ZnVuY3Rpb24ga3YoYSl7aWYodHlwZW9mIE12PT0iZnVuY3Rpb24iKXJldHVybiBNdihhKTtjb25zdCBvPXYudXNlUmVmKCgpPT57dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsbCBhbiBldmVudCBoYW5kbGVyIHdoaWxlIHJlbmRlcmluZy4iKX0pO3JldHVybiB0eXBlb2YgenY9PSJmdW5jdGlvbiI/enYoKCk9PntvLmN1cnJlbnQ9YX0pOm50KCgpPT57by5jdXJyZW50PWF9KSx2LnVzZU1lbW8oKCk9PigoLi4udSk9Pm8uY3VycmVudD8uKC4uLnUpKSxbXSl9R3coa3YsInVzZUVmZmVjdEV2ZW50Iik7dmFyIFZ3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmcj0oYSxvKT0+VncoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksWXc9QWxbIiB1c2VJbnNlcnRpb25FZmZlY3QgIi50cmltKCkudG9TdHJpbmcoKV18fG50O2Z1bmN0aW9uIEVuKHtwcm9wOmEsZGVmYXVsdFByb3A6byxvbkNoYW5nZTp1PWZyKCgpPT57fSwib25DaGFuZ2UiKSxjYWxsZXI6aX0pe2NvbnN0W3MsZixkXT1Mdih7ZGVmYXVsdFByb3A6byxvbkNoYW5nZTp1fSkscD1hIT09dm9pZCAwLHk9cD9hOnMsYj12LnVzZUNhbGxiYWNrKHg9PntpZihwKXtjb25zdCBnPVV2KHgpP3goYSk6eDtnIT09YSYmZC5jdXJyZW50Py4oZyl9ZWxzZSBmKHgpfSxbcCxhLGYsZF0pO3JldHVyblt5LGJdfWZyKEVuLCJ1c2VDb250cm9sbGFibGVTdGF0ZSIpO2Z1bmN0aW9uIEx2KHtkZWZhdWx0UHJvcDphLG9uQ2hhbmdlOm99KXtjb25zdFt1LGldPXYudXNlU3RhdGUoYSkscz12LnVzZVJlZih1KSxmPXYudXNlUmVmKG8pO3JldHVybiBZdygoKT0+e2YuY3VycmVudD1vfSxbb10pLHYudXNlRWZmZWN0KCgpPT57cy5jdXJyZW50IT09dSYmKGYuY3VycmVudD8uKHUpLHMuY3VycmVudD11KX0sW3Usc10pLFt1LGksZl19ZnIoTHYsInVzZVVuY29udHJvbGxlZFN0YXRlIik7ZnVuY3Rpb24gVXYoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifWZyKFV2LCJpc0Z1bmN0aW9uIik7dmFyIEh2PVN5bWJvbCgiUkFESVg6U1lOQ19TVEFURSIpO2Z1bmN0aW9uIHF3KGEsbyx1LGkpe2NvbnN0e3Byb3A6cyxkZWZhdWx0UHJvcDpmLG9uQ2hhbmdlOmQsY2FsbGVyOnB9PW8seT1zIT09dm9pZCAwLGI9a3YoZCkseD1bey4uLnUsc3RhdGU6Zn1dO2kmJngucHVzaChpKTtjb25zdFtnLENdPXYudXNlUmVkdWNlcigoVCxPKT0+e2lmKE8udHlwZT09PUh2KXJldHVybnsuLi5ULHN0YXRlOk8uc3RhdGV9O2NvbnN0IEE9YShULE8pO3JldHVybiB5JiYhT2JqZWN0LmlzKEEuc3RhdGUsVC5zdGF0ZSkmJmIoQS5zdGF0ZSksQX0sLi4ueCksdz1nLnN0YXRlLFI9di51c2VSZWYodyk7di51c2VFZmZlY3QoKCk9PntSLmN1cnJlbnQhPT13JiYoUi5jdXJyZW50PXcseXx8Yih3KSl9LFt3LFIseV0pO2NvbnN0IEU9di51c2VNZW1vKCgpPT5zIT09dm9pZCAwP3suLi5nLHN0YXRlOnN9OmcsW2csc10pO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e3kmJiFPYmplY3QuaXMocyxnLnN0YXRlKSYmQyh7dHlwZTpIdixzdGF0ZTpzfSl9LFtzLGcuc3RhdGUseV0pLFtFLENdfWZyKHF3LCJ1c2VDb250cm9sbGFibGVTdGF0ZVJlZHVjZXIiKTt2YXIgWHc9T2JqZWN0LmRlZmluZVByb3BlcnR5LE9zPShhLG8pPT5YdyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxBcz0hMTtmdW5jdGlvbiBCdigpe2NvbnN0W2Esb109di51c2VTdGF0ZShBcyk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57QXN8fChBcz0hMCxvKCEwKSl9LFtdKSxhfU9zKEJ2LCJ1c2VJc0h5ZHJhdGVkIik7dmFyIEl2PUFsWyIgdXNlU3luY0V4dGVybmFsU3RvcmUgIi50cmltKCkudG9TdHJpbmcoKV07ZnVuY3Rpb24gUHYoKXtyZXR1cm4oKT0+e319T3MoUHYsInN1YnNjcmliZSIpO2Z1bmN0aW9uIEd2KCl7cmV0dXJuIEl2KFB2LCgpPT4hMCwoKT0+ITEpfU9zKEd2LCJ1c2VJc0h5ZHJhdGVkTW9kZXJuIik7dmFyIEt3PXR5cGVvZiBJdj09ImZ1bmN0aW9uIj9HdjpCdixRdz1PYmplY3QuZGVmaW5lUHJvcGVydHksYmE9KGEsbyk9PlF3KGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLE5zPSJyb3ZpbmdGb2N1c0dyb3VwLm9uRW50cnlGb2N1cyIsWnc9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH0semk9IlJvdmluZ0ZvY3VzR3JvdXAiLFtEcyxWdixGd109YXIoemkpLFskdyxub109TXQoemksW0Z3XSksWXY9e1ZlcnRpY2FsOiJ2ZXJ0aWNhbCIsSG9yaXpvbnRhbDoiaG9yaXpvbnRhbCJ9LEp3PXtSVEw6InJ0bCJ9LFtXdyxlRV09JHcoemkpLGpzPXYuZm9yd2FyZFJlZihiYShmdW5jdGlvbihvLHUpe3JldHVybiBtLmpzeChEcy5Qcm92aWRlcix7c2NvcGU6by5fX3Njb3BlUm92aW5nRm9jdXNHcm91cCxjaGlsZHJlbjptLmpzeChEcy5TbG90LHtzY29wZTpvLl9fc2NvcGVSb3ZpbmdGb2N1c0dyb3VwLGNoaWxkcmVuOm0uanN4KHRFLHsuLi5vLHJlZjp1fSl9KX0pfSwiUm92aW5nRm9jdXNHcm91cCIpKSx0RT12LmZvcndhcmRSZWYoYmEoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUm92aW5nRm9jdXNHcm91cDppLG9yaWVudGF0aW9uOnMsbG9vcDpmPSExLGRpcjpkLGN1cnJlbnRUYWJTdG9wSWQ6cCxkZWZhdWx0Q3VycmVudFRhYlN0b3BJZDp5LG9uQ3VycmVudFRhYlN0b3BJZENoYW5nZTpiLG9uRW50cnlGb2N1czp4LHByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXM6Zz0hMSwuLi5DfT1vLHc9di51c2VSZWYobnVsbCksUj1FZSh1LHcpLEU9UWEoZCksW1QsT109RW4oe3Byb3A6cCxkZWZhdWx0UHJvcDp5Pz9udWxsLG9uQ2hhbmdlOmIsY2FsbGVyOnppfSksW0EsTl09di51c2VTdGF0ZSghMSksTT16dCh4KSxZPVZ2KGkpLEg9di51c2VSZWYoITEpLFtVLEJdPXYudXNlU3RhdGUoMCk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgSj13LmN1cnJlbnQ7aWYoSilyZXR1cm4gSi5hZGRFdmVudExpc3RlbmVyKE5zLE0pLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoTnMsTSl9LFtNXSksbS5qc3goV3cse3Njb3BlOmksb3JpZW50YXRpb246cyxkaXI6RSxsb29wOmYsY3VycmVudFRhYlN0b3BJZDpULG9uSXRlbUZvY3VzOnYudXNlQ2FsbGJhY2soSj0+TyhKKSxbT10pLG9uSXRlbVNoaWZ0VGFiOnYudXNlQ2FsbGJhY2soKCk9Pk4oITApLFtdKSxvbkZvY3VzYWJsZUl0ZW1BZGQ6di51c2VDYWxsYmFjaygoKT0+QihKPT5KKzEpLFtdKSxvbkZvY3VzYWJsZUl0ZW1SZW1vdmU6di51c2VDYWxsYmFjaygoKT0+QihKPT5KLTEpLFtdKSxjaGlsZHJlbjptLmpzeChDZS5kaXYse3RhYkluZGV4OkF8fFU9PT0wPy0xOjAsImRhdGEtb3JpZW50YXRpb24iOnMsLi4uQyxyZWY6UixzdHlsZTp7b3V0bGluZToibm9uZSIsLi4uby5zdHlsZX0sb25Nb3VzZURvd246dWUoby5vbk1vdXNlRG93biwoKT0+e0guY3VycmVudD0hMH0pLG9uRm9jdXM6dWUoby5vbkZvY3VzLEo9Pntjb25zdCBXPSFILmN1cnJlbnQ7aWYoSi50YXJnZXQ9PT1KLmN1cnJlbnRUYXJnZXQmJlcmJiFBKXtjb25zdCBuZT1uZXcgQ3VzdG9tRXZlbnQoTnMsWncpO2lmKEouY3VycmVudFRhcmdldC5kaXNwYXRjaEV2ZW50KG5lKSwhbmUuZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgZWU9WSgpLmZpbHRlcigkPT4kLmZvY3VzYWJsZSksY2U9ZWUuZmluZCgkPT4kLmFjdGl2ZSksbWU9ZWUuZmluZCgkPT4kLmlkPT09VCksUD1bY2UsbWUsLi4uZWVdLmZpbHRlcihCb29sZWFuKS5tYXAoJD0+JC5yZWYuY3VycmVudCk7enMoUCxnKX19SC5jdXJyZW50PSExfSksb25CbHVyOnVlKG8ub25CbHVyLCgpPT5OKCExKSl9KX0pfSwiUm92aW5nRm9jdXNHcm91cEltcGwiKSksbkU9IlJvdmluZ0ZvY3VzR3JvdXBJdGVtIixNcz12LmZvcndhcmRSZWYoYmEoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUm92aW5nRm9jdXNHcm91cDppLGZvY3VzYWJsZTpzPSEwLGFjdGl2ZTpmPSExLHRhYlN0b3BJZDpkLGNoaWxkcmVuOnAsLi4ueX09byxiPXRsKCkseD1kfHxiLGc9ZUUobkUsaSksQz1nLmN1cnJlbnRUYWJTdG9wSWQ9PT14LHc9VnYoaSkse29uRm9jdXNhYmxlSXRlbUFkZDpSLG9uRm9jdXNhYmxlSXRlbVJlbW92ZTpFLGN1cnJlbnRUYWJTdG9wSWQ6VH09ZyxPPUt3KCk7cmV0dXJuIG50KCgpPT57aWYoISghT3x8IXMpKXJldHVybiBSKCksKCk9PkUoKX0sW08scyxSLEVdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKCEoT3x8IXMpKXJldHVybiBSKCksKCk9PkUoKX0sW08scyxSLEVdKSxtLmpzeChEcy5JdGVtU2xvdCx7c2NvcGU6aSxpZDp4LGZvY3VzYWJsZTpzLGFjdGl2ZTpmLGNoaWxkcmVuOm0uanN4KENlLnNwYW4se3RhYkluZGV4OkM/MDotMSwiZGF0YS1vcmllbnRhdGlvbiI6Zy5vcmllbnRhdGlvbiwuLi55LHJlZjp1LG9uTW91c2VEb3duOnVlKG8ub25Nb3VzZURvd24sQT0+e3M/Zy5vbkl0ZW1Gb2N1cyh4KTpBLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzOnVlKG8ub25Gb2N1cywoKT0+Zy5vbkl0ZW1Gb2N1cyh4KSksb25LZXlEb3duOnVlKG8ub25LZXlEb3duLEE9PntpZihBLmtleT09PSJUYWIiJiZBLnNoaWZ0S2V5KXtnLm9uSXRlbVNoaWZ0VGFiKCk7cmV0dXJufWlmKEEudGFyZ2V0IT09QS5jdXJyZW50VGFyZ2V0KXJldHVybjtjb25zdCBOPVh2KEEsZy5vcmllbnRhdGlvbixnLmRpcik7aWYoTiE9PXZvaWQgMCl7aWYoQS5tZXRhS2V5fHxBLmN0cmxLZXl8fEEuYWx0S2V5fHxBLnNoaWZ0S2V5KXJldHVybjtBLnByZXZlbnREZWZhdWx0KCk7bGV0IFk9dygpLmZpbHRlcihIPT5ILmZvY3VzYWJsZSkubWFwKEg9PkgucmVmLmN1cnJlbnQpO2lmKE49PT0ibGFzdCIpWS5yZXZlcnNlKCk7ZWxzZSBpZihOPT09InByZXYifHxOPT09Im5leHQiKXtOPT09InByZXYiJiZZLnJldmVyc2UoKTtjb25zdCBIPVkuaW5kZXhPZihBLmN1cnJlbnRUYXJnZXQpO1k9Zy5sb29wP0t2KFksSCsxKTpZLnNsaWNlKEgrMSl9c2V0VGltZW91dCgoKT0+enMoWSkpfX0pLGNoaWxkcmVuOnR5cGVvZiBwPT0iZnVuY3Rpb24iP3Aoe2lzQ3VycmVudFRhYlN0b3A6QyxoYXNUYWJTdG9wOlQhPW51bGx9KTpwfSl9KX0sIlJvdmluZ0ZvY3VzR3JvdXBJdGVtIikpLGxFPXtBcnJvd0xlZnQ6InByZXYiLEFycm93VXA6InByZXYiLEFycm93UmlnaHQ6Im5leHQiLEFycm93RG93bjoibmV4dCIsUGFnZVVwOiJmaXJzdCIsSG9tZToiZmlyc3QiLFBhZ2VEb3duOiJsYXN0IixFbmQ6Imxhc3QifTtmdW5jdGlvbiBxdihhLG8pe3JldHVybiBvIT09SncuUlRMP2E6YT09PSJBcnJvd0xlZnQiPyJBcnJvd1JpZ2h0IjphPT09IkFycm93UmlnaHQiPyJBcnJvd0xlZnQiOmF9YmEocXYsImdldERpcmVjdGlvbkF3YXJlS2V5Iik7ZnVuY3Rpb24gWHYoYSxvLHUpe2NvbnN0IGk9cXYoYS5rZXksdSk7aWYoIShvPT09WXYuVmVydGljYWwmJlsiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCJdLmluY2x1ZGVzKGkpKSYmIShvPT09WXYuSG9yaXpvbnRhbCYmWyJBcnJvd1VwIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoaSkpKXJldHVybiBsRVtpXX1iYShYdiwiZ2V0Rm9jdXNJbnRlbnQiKTtmdW5jdGlvbiB6cyhhLG89ITEpe2NvbnN0IHU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgaSBvZiBhKWlmKGk9PT11fHwoaS5mb2N1cyh7cHJldmVudFNjcm9sbDpvfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXUpKXJldHVybn1iYSh6cywiZm9jdXNGaXJzdCIpO2Z1bmN0aW9uIEt2KGEsbyl7cmV0dXJuIGEubWFwKCh1LGkpPT5hWyhvK2kpJWEubGVuZ3RoXSl9YmEoS3YsIndyYXBBcnJheSIpO3ZhciBhRT1mdW5jdGlvbihhKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciBvPUFycmF5LmlzQXJyYXkoYSk/YVswXTphO3JldHVybiBvLm93bmVyRG9jdW1lbnQuYm9keX0sbG89bmV3IFdlYWtNYXAsa2k9bmV3IFdlYWtNYXAsTGk9e30sa3M9MCxRdj1mdW5jdGlvbihhKXtyZXR1cm4gYSYmKGEuaG9zdHx8UXYoYS5wYXJlbnROb2RlKSl9LG9FPWZ1bmN0aW9uKGEsbyl7cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKHUpe2lmKGEuY29udGFpbnModSkpcmV0dXJuIHU7dmFyIGk9UXYodSk7cmV0dXJuIGkmJmEuY29udGFpbnMoaSk/aTooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLHUsImluIG5vdCBjb250YWluZWQgaW5zaWRlIixhLCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbih1KXtyZXR1cm4hIXV9KX0sckU9ZnVuY3Rpb24oYSxvLHUsaSl7dmFyIHM9b0UobyxBcnJheS5pc0FycmF5KGEpP2E6W2FdKTtMaVt1XXx8KExpW3VdPW5ldyBXZWFrTWFwKTt2YXIgZj1MaVt1XSxkPVtdLHA9bmV3IFNldCx5PW5ldyBTZXQocyksYj1mdW5jdGlvbihnKXshZ3x8cC5oYXMoZyl8fChwLmFkZChnKSxiKGcucGFyZW50Tm9kZSkpfTtzLmZvckVhY2goYik7dmFyIHg9ZnVuY3Rpb24oZyl7IWd8fHkuaGFzKGcpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGcuY2hpbGRyZW4sZnVuY3Rpb24oQyl7aWYocC5oYXMoQykpeChDKTtlbHNlIHRyeXt2YXIgdz1DLmdldEF0dHJpYnV0ZShpKSxSPXchPT1udWxsJiZ3IT09ImZhbHNlIixFPShsby5nZXQoQyl8fDApKzEsVD0oZi5nZXQoQyl8fDApKzE7bG8uc2V0KEMsRSksZi5zZXQoQyxUKSxkLnB1c2goQyksRT09PTEmJlImJmtpLnNldChDLCEwKSxUPT09MSYmQy5zZXRBdHRyaWJ1dGUodSwidHJ1ZSIpLFJ8fEMuc2V0QXR0cmlidXRlKGksInRydWUiKX1jYXRjaChPKXtjb25zb2xlLmVycm9yKCJhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gIixDLE8pfX0pfTtyZXR1cm4geChvKSxwLmNsZWFyKCksa3MrKyxmdW5jdGlvbigpe2QuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgQz1sby5nZXQoZyktMSx3PWYuZ2V0KGcpLTE7bG8uc2V0KGcsQyksZi5zZXQoZyx3KSxDfHwoa2kuaGFzKGcpfHxnLnJlbW92ZUF0dHJpYnV0ZShpKSxraS5kZWxldGUoZykpLHd8fGcucmVtb3ZlQXR0cmlidXRlKHUpfSksa3MtLSxrc3x8KGxvPW5ldyBXZWFrTWFwLGxvPW5ldyBXZWFrTWFwLGtpPW5ldyBXZWFrTWFwLExpPXt9KX19LExzPWZ1bmN0aW9uKGEsbyx1KXt1PT09dm9pZCAwJiYodT0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciBpPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShhKT9hOlthXSkscz1hRShhKTtyZXR1cm4gcz8oaS5wdXNoLmFwcGx5KGksQXJyYXkuZnJvbShzLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdLCBzY3JpcHQiKSkpLHJFKGkscyx1LCJhcmlhLWhpZGRlbiIpKTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sSW49ZnVuY3Rpb24oKXtyZXR1cm4gSW49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obyl7Zm9yKHZhciB1LGk9MSxzPWFyZ3VtZW50cy5sZW5ndGg7aTxzO2krKyl7dT1hcmd1bWVudHNbaV07Zm9yKHZhciBmIGluIHUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsZikmJihvW2ZdPXVbZl0pfXJldHVybiBvfSxJbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIFp2KGEsbyl7dmFyIHU9e307Zm9yKHZhciBpIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsaSkmJm8uaW5kZXhPZihpKTwwJiYodVtpXT1hW2ldKTtpZihhIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHM9MCxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYSk7czxpLmxlbmd0aDtzKyspby5pbmRleE9mKGlbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChhLGlbc10pJiYodVtpW3NdXT1hW2lbc11dKTtyZXR1cm4gdX1mdW5jdGlvbiBpRShhLG8sdSl7aWYodXx8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBpPTAscz1vLmxlbmd0aCxmO2k8cztpKyspKGZ8fCEoaSBpbiBvKSkmJihmfHwoZj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvLDAsaSkpLGZbaV09b1tpXSk7cmV0dXJuIGEuY29uY2F0KGZ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8pKX10eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iJiZTdXBwcmVzc2VkRXJyb3I7dmFyIFVpPSJyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uIixIaT0id2lkdGgtYmVmb3JlLXNjcm9sbC1iYXIiLGNFPSJ3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbiIsdUU9Ii0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSI7ZnVuY3Rpb24gVXMoYSxvKXtyZXR1cm4gdHlwZW9mIGE9PSJmdW5jdGlvbiI/YShvKTphJiYoYS5jdXJyZW50PW8pLGF9ZnVuY3Rpb24gc0UoYSxvKXt2YXIgdT12LnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlOmEsY2FsbGJhY2s6byxmYWNhZGU6e2dldCBjdXJyZW50KCl7cmV0dXJuIHUudmFsdWV9LHNldCBjdXJyZW50KGkpe3ZhciBzPXUudmFsdWU7cyE9PWkmJih1LnZhbHVlPWksdS5jYWxsYmFjayhpLHMpKX19fX0pWzBdO3JldHVybiB1LmNhbGxiYWNrPW8sdS5mYWNhZGV9dmFyIGZFPXR5cGVvZiB3aW5kb3c8InUiP3YudXNlTGF5b3V0RWZmZWN0OnYudXNlRWZmZWN0LEZ2PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGRFKGEsbyl7dmFyIHU9c0UobnVsbCxmdW5jdGlvbihpKXtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBVcyhzLGkpfSl9KTtyZXR1cm4gZkUoZnVuY3Rpb24oKXt2YXIgaT1Gdi5nZXQodSk7aWYoaSl7dmFyIHM9bmV3IFNldChpKSxmPW5ldyBTZXQoYSksZD11LmN1cnJlbnQ7cy5mb3JFYWNoKGZ1bmN0aW9uKHApe2YuaGFzKHApfHxVcyhwLG51bGwpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3MuaGFzKHApfHxVcyhwLGQpfSl9RnYuc2V0KHUsYSl9LFthXSksdX1mdW5jdGlvbiBtRShhKXtyZXR1cm4gYX1mdW5jdGlvbiBoRShhLG8pe289PT12b2lkIDAmJihvPW1FKTt2YXIgdT1bXSxpPSExLHM9e3JlYWQ6ZnVuY3Rpb24oKXtpZihpKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuIik7cmV0dXJuIHUubGVuZ3RoP3VbdS5sZW5ndGgtMV06YX0sdXNlTWVkaXVtOmZ1bmN0aW9uKGYpe3ZhciBkPW8oZixpKTtyZXR1cm4gdS5wdXNoKGQpLGZ1bmN0aW9uKCl7dT11LmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcCE9PWR9KX19LGFzc2lnblN5bmNNZWRpdW06ZnVuY3Rpb24oZil7Zm9yKGk9ITA7dS5sZW5ndGg7KXt2YXIgZD11O3U9W10sZC5mb3JFYWNoKGYpfXU9e3B1c2g6ZnVuY3Rpb24ocCl7cmV0dXJuIGYocCl9LGZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB1fX19LGFzc2lnbk1lZGl1bTpmdW5jdGlvbihmKXtpPSEwO3ZhciBkPVtdO2lmKHUubGVuZ3RoKXt2YXIgcD11O3U9W10scC5mb3JFYWNoKGYpLGQ9dX12YXIgeT1mdW5jdGlvbigpe3ZhciB4PWQ7ZD1bXSx4LmZvckVhY2goZil9LGI9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbih5KX07YigpLHU9e3B1c2g6ZnVuY3Rpb24oeCl7ZC5wdXNoKHgpLGIoKX0sZmlsdGVyOmZ1bmN0aW9uKHgpe3JldHVybiBkPWQuZmlsdGVyKHgpLHV9fX19O3JldHVybiBzfWZ1bmN0aW9uIHBFKGEpe2E9PT12b2lkIDAmJihhPXt9KTt2YXIgbz1oRShudWxsKTtyZXR1cm4gby5vcHRpb25zPUluKHthc3luYzohMCxzc3I6ITF9LGEpLG99dmFyICR2PWZ1bmN0aW9uKGEpe3ZhciBvPWEuc2lkZUNhcix1PVp2KGEsWyJzaWRlQ2FyIl0pO2lmKCFvKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyIik7dmFyIGk9by5yZWFkKCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQiKTtyZXR1cm4gdi5jcmVhdGVFbGVtZW50KGksSW4oe30sdSkpfTskdi5pc1NpZGVDYXJFeHBvcnQ9ITA7ZnVuY3Rpb24gdkUoYSxvKXtyZXR1cm4gYS51c2VNZWRpdW0obyksJHZ9dmFyIEp2PXBFKCksSHM9ZnVuY3Rpb24oKXt9LEJpPXYuZm9yd2FyZFJlZihmdW5jdGlvbihhLG8pe3ZhciB1PXYudXNlUmVmKG51bGwpLGk9di51c2VTdGF0ZSh7b25TY3JvbGxDYXB0dXJlOkhzLG9uV2hlZWxDYXB0dXJlOkhzLG9uVG91Y2hNb3ZlQ2FwdHVyZTpIc30pLHM9aVswXSxmPWlbMV0sZD1hLmZvcndhcmRQcm9wcyxwPWEuY2hpbGRyZW4seT1hLmNsYXNzTmFtZSxiPWEucmVtb3ZlU2Nyb2xsQmFyLHg9YS5lbmFibGVkLGc9YS5zaGFyZHMsQz1hLnNpZGVDYXIsdz1hLm5vUmVsYXRpdmUsUj1hLm5vSXNvbGF0aW9uLEU9YS5pbmVydCxUPWEuYWxsb3dQaW5jaFpvb20sTz1hLmFzLEE9Tz09PXZvaWQgMD8iZGl2IjpPLE49YS5nYXBNb2RlLE09WnYoYSxbImZvcndhcmRQcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVtb3ZlU2Nyb2xsQmFyIiwiZW5hYmxlZCIsInNoYXJkcyIsInNpZGVDYXIiLCJub1JlbGF0aXZlIiwibm9Jc29sYXRpb24iLCJpbmVydCIsImFsbG93UGluY2hab29tIiwiYXMiLCJnYXBNb2RlIl0pLFk9QyxIPWRFKFt1LG9dKSxVPUluKEluKHt9LE0pLHMpO3JldHVybiB2LmNyZWF0ZUVsZW1lbnQodi5GcmFnbWVudCxudWxsLHgmJnYuY3JlYXRlRWxlbWVudChZLHtzaWRlQ2FyOkp2LHJlbW92ZVNjcm9sbEJhcjpiLHNoYXJkczpnLG5vUmVsYXRpdmU6dyxub0lzb2xhdGlvbjpSLGluZXJ0OkUsc2V0Q2FsbGJhY2tzOmYsYWxsb3dQaW5jaFpvb206ISFULGxvY2tSZWY6dSxnYXBNb2RlOk59KSxkP3YuY2xvbmVFbGVtZW50KHYuQ2hpbGRyZW4ub25seShwKSxJbihJbih7fSxVKSx7cmVmOkh9KSk6di5jcmVhdGVFbGVtZW50KEEsSW4oe30sVSx7Y2xhc3NOYW1lOnkscmVmOkh9KSxwKSl9KTtCaS5kZWZhdWx0UHJvcHM9e2VuYWJsZWQ6ITAscmVtb3ZlU2Nyb2xsQmFyOiEwLGluZXJ0OiExfSxCaS5jbGFzc05hbWVzPXtmdWxsV2lkdGg6SGksemVyb1JpZ2h0OlVpfTt2YXIgZ0U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgX193ZWJwYWNrX25vbmNlX188InUiKXJldHVybiBfX3dlYnBhY2tfbm9uY2VfX307ZnVuY3Rpb24geUUoKXtpZighZG9jdW1lbnQpcmV0dXJuIG51bGw7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnR5cGU9InRleHQvY3NzIjt2YXIgbz1nRSgpO3JldHVybiBvJiZhLnNldEF0dHJpYnV0ZSgibm9uY2UiLG8pLGF9ZnVuY3Rpb24gYkUoYSxvKXthLnN0eWxlU2hlZXQ/YS5zdHlsZVNoZWV0LmNzc1RleHQ9bzphLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pKX1mdW5jdGlvbiB4RShhKXt2YXIgbz1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO28uYXBwZW5kQ2hpbGQoYSl9dmFyIFNFPWZ1bmN0aW9uKCl7dmFyIGE9MCxvPW51bGw7cmV0dXJue2FkZDpmdW5jdGlvbih1KXthPT0wJiYobz15RSgpKSYmKGJFKG8sdSkseEUobykpLGErK30scmVtb3ZlOmZ1bmN0aW9uKCl7YS0tLCFhJiZvJiYoby5wYXJlbnROb2RlJiZvLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyksbz1udWxsKX19fSxDRT1mdW5jdGlvbigpe3ZhciBhPVNFKCk7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7di51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gYS5hZGQobyksZnVuY3Rpb24oKXthLnJlbW92ZSgpfX0sW28mJnVdKX19LFd2PWZ1bmN0aW9uKCl7dmFyIGE9Q0UoKSxvPWZ1bmN0aW9uKHUpe3ZhciBpPXUuc3R5bGVzLHM9dS5keW5hbWljO3JldHVybiBhKGkscyksbnVsbH07cmV0dXJuIG99LFRFPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxnYXA6MH0sQnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGF8fCIiLDEwKXx8MH0sd0U9ZnVuY3Rpb24oYSl7dmFyIG89d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSksdT1vW2E9PT0icGFkZGluZyI/InBhZGRpbmdMZWZ0IjoibWFyZ2luTGVmdCJdLGk9b1thPT09InBhZGRpbmciPyJwYWRkaW5nVG9wIjoibWFyZ2luVG9wIl0scz1vW2E9PT0icGFkZGluZyI/InBhZGRpbmdSaWdodCI6Im1hcmdpblJpZ2h0Il07cmV0dXJuW0JzKHUpLEJzKGkpLEJzKHMpXX0sRUU9ZnVuY3Rpb24oYSl7aWYoYT09PXZvaWQgMCYmKGE9Im1hcmdpbiIpLHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBURTt2YXIgbz13RShhKSx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxpPXdpbmRvdy5pbm5lcldpZHRoO3JldHVybntsZWZ0Om9bMF0sdG9wOm9bMV0scmlnaHQ6b1syXSxnYXA6TWF0aC5tYXgoMCxpLXUrb1syXS1vWzBdKX19LFJFPVd2KCksYW89ImRhdGEtc2Nyb2xsLWxvY2tlZCIsX0U9ZnVuY3Rpb24oYSxvLHUsaSl7dmFyIHM9YS5sZWZ0LGY9YS50b3AsZD1hLnJpZ2h0LHA9YS5nYXA7cmV0dXJuIHU9PT12b2lkIDAmJih1PSJtYXJnaW4iKSxgCiAgLmAuY29uY2F0KGNFLGAgewogICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChpLGA7CiAgIHBhZGRpbmctcmlnaHQ6IGApLmNvbmNhdChwLCJweCAiKS5jb25jYXQoaSxgOwogIH0KICBib2R5W2ApLmNvbmNhdChhbyxgXSB7CiAgICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChpLGA7CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgYCkuY29uY2F0KFtvJiYicG9zaXRpb246IHJlbGF0aXZlICIuY29uY2F0KGksIjsiKSx1PT09Im1hcmdpbiImJmAKICAgIHBhZGRpbmctbGVmdDogYC5jb25jYXQocyxgcHg7CiAgICBwYWRkaW5nLXRvcDogYCkuY29uY2F0KGYsYHB4OwogICAgcGFkZGluZy1yaWdodDogYCkuY29uY2F0KGQsYHB4OwogICAgbWFyZ2luLWxlZnQ6MDsKICAgIG1hcmdpbi10b3A6MDsKICAgIG1hcmdpbi1yaWdodDogYCkuY29uY2F0KHAsInB4ICIpLmNvbmNhdChpLGA7CiAgICBgKSx1PT09InBhZGRpbmciJiYicGFkZGluZy1yaWdodDogIi5jb25jYXQocCwicHggIikuY29uY2F0KGksIjsiKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiIpLGAKICB9CiAgCiAgLmApLmNvbmNhdChVaSxgIHsKICAgIHJpZ2h0OiBgKS5jb25jYXQocCwicHggIikuY29uY2F0KGksYDsKICB9CiAgCiAgLmApLmNvbmNhdChIaSxgIHsKICAgIG1hcmdpbi1yaWdodDogYCkuY29uY2F0KHAsInB4ICIpLmNvbmNhdChpLGA7CiAgfQogIAogIC5gKS5jb25jYXQoVWksIiAuIikuY29uY2F0KFVpLGAgewogICAgcmlnaHQ6IDAgYCkuY29uY2F0KGksYDsKICB9CiAgCiAgLmApLmNvbmNhdChIaSwiIC4iKS5jb25jYXQoSGksYCB7CiAgICBtYXJnaW4tcmlnaHQ6IDAgYCkuY29uY2F0KGksYDsKICB9CiAgCiAgYm9keVtgKS5jb25jYXQoYW8sYF0gewogICAgYCkuY29uY2F0KHVFLCI6ICIpLmNvbmNhdChwLGBweDsKICB9CmApfSxlZz1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGFvKXx8IjAiLDEwKTtyZXR1cm4gaXNGaW5pdGUoYSk/YTowfSxPRT1mdW5jdGlvbigpe3YudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGFvLChlZygpKzEpLnRvU3RyaW5nKCkpLGZ1bmN0aW9uKCl7dmFyIGE9ZWcoKS0xO2E8PTA/ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoYW8pOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGFvLGEudG9TdHJpbmcoKSl9fSxbXSl9LEFFPWZ1bmN0aW9uKGEpe3ZhciBvPWEubm9SZWxhdGl2ZSx1PWEubm9JbXBvcnRhbnQsaT1hLmdhcE1vZGUscz1pPT09dm9pZCAwPyJtYXJnaW4iOmk7T0UoKTt2YXIgZj12LnVzZU1lbW8oZnVuY3Rpb24oKXtyZXR1cm4gRUUocyl9LFtzXSk7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChSRSx7c3R5bGVzOl9FKGYsIW8scyx1PyIiOiIhaW1wb3J0YW50Iil9KX0sSXM9ITE7aWYodHlwZW9mIHdpbmRvdzwidSIpdHJ5e3ZhciBJaT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSXM9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLElpLElpKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsSWksSWkpfWNhdGNoe0lzPSExfXZhciBvbz1Jcz97cGFzc2l2ZTohMX06ITEsTkU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnTmFtZT09PSJURVhUQVJFQSJ9LHRnPWZ1bmN0aW9uKGEsbyl7aWYoIShhIGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuITE7dmFyIHU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSk7cmV0dXJuIHVbb10hPT0iaGlkZGVuIiYmISh1Lm92ZXJmbG93WT09PXUub3ZlcmZsb3dYJiYhTkUoYSkmJnVbb109PT0idmlzaWJsZSIpfSxERT1mdW5jdGlvbihhKXtyZXR1cm4gdGcoYSwib3ZlcmZsb3dZIil9LGpFPWZ1bmN0aW9uKGEpe3JldHVybiB0ZyhhLCJvdmVyZmxvd1giKX0sbmc9ZnVuY3Rpb24oYSxvKXt2YXIgdT1vLm93bmVyRG9jdW1lbnQsaT1vO2Rve3R5cGVvZiBTaGFkb3dSb290PCJ1IiYmaSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QmJihpPWkuaG9zdCk7dmFyIHM9bGcoYSxpKTtpZihzKXt2YXIgZj1hZyhhLGkpLGQ9ZlsxXSxwPWZbMl07aWYoZD5wKXJldHVybiEwfWk9aS5wYXJlbnROb2RlfXdoaWxlKGkmJmkhPT11LmJvZHkpO3JldHVybiExfSxNRT1mdW5jdGlvbihhKXt2YXIgbz1hLnNjcm9sbFRvcCx1PWEuc2Nyb2xsSGVpZ2h0LGk9YS5jbGllbnRIZWlnaHQ7cmV0dXJuW28sdSxpXX0sekU9ZnVuY3Rpb24oYSl7dmFyIG89YS5zY3JvbGxMZWZ0LHU9YS5zY3JvbGxXaWR0aCxpPWEuY2xpZW50V2lkdGg7cmV0dXJuW28sdSxpXX0sbGc9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYT09PSJ2Ij9ERShvKTpqRShvKX0sYWc9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYT09PSJ2Ij9NRShvKTp6RShvKX0sa0U9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYT09PSJoIiYmbz09PSJydGwiPy0xOjF9LExFPWZ1bmN0aW9uKGEsbyx1LGkscyl7dmFyIGY9a0UoYSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvKS5kaXJlY3Rpb24pLGQ9ZippLHA9dS50YXJnZXQseT1vLmNvbnRhaW5zKHApLGI9ITEseD1kPjAsZz0wLEM9MDtkb3tpZighcClicmVhazt2YXIgdz1hZyhhLHApLFI9d1swXSxFPXdbMV0sVD13WzJdLE89RS1ULWYqUjsoUnx8TykmJmxnKGEscCkmJihnKz1PLEMrPVIpO3ZhciBBPXAucGFyZW50Tm9kZTtwPUEmJkEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QS5ob3N0OkF9d2hpbGUoIXkmJnAhPT1kb2N1bWVudC5ib2R5fHx5JiYoby5jb250YWlucyhwKXx8bz09PXApKTtyZXR1cm4oeCYmTWF0aC5hYnMoZyk8MXx8IXgmJk1hdGguYWJzKEMpPDEpJiYoYj0hMCksYn0sUGk9ZnVuY3Rpb24oYSl7cmV0dXJuImNoYW5nZWRUb3VjaGVzImluIGE/W2EuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCxhLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldOlswLDBdfSxvZz1mdW5jdGlvbihhKXtyZXR1cm5bYS5kZWx0YVgsYS5kZWx0YVldfSxyZz1mdW5jdGlvbihhKXtyZXR1cm4gYSYmImN1cnJlbnQiaW4gYT9hLmN1cnJlbnQ6YX0sVUU9ZnVuY3Rpb24oYSxvKXtyZXR1cm4gYVswXT09PW9bMF0mJmFbMV09PT1vWzFdfSxIRT1mdW5jdGlvbihhKXtyZXR1cm5gCiAgLmJsb2NrLWludGVyYWN0aXZpdHktYC5jb25jYXQoYSxgIHtwb2ludGVyLWV2ZW50czogbm9uZTt9CiAgLmFsbG93LWludGVyYWN0aXZpdHktYCkuY29uY2F0KGEsYCB7cG9pbnRlci1ldmVudHM6IGFsbDt9CmApfSxCRT0wLHJvPVtdO2Z1bmN0aW9uIElFKGEpe3ZhciBvPXYudXNlUmVmKFtdKSx1PXYudXNlUmVmKFswLDBdKSxpPXYudXNlUmVmKCkscz12LnVzZVN0YXRlKEJFKyspWzBdLGY9di51c2VTdGF0ZShXdilbMF0sZD12LnVzZVJlZihhKTt2LnVzZUVmZmVjdChmdW5jdGlvbigpe2QuY3VycmVudD1hfSxbYV0pLHYudXNlRWZmZWN0KGZ1bmN0aW9uKCl7aWYoYS5pbmVydCl7ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJibG9jay1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KHMpKTt2YXIgRT1pRShbYS5sb2NrUmVmLmN1cnJlbnRdLChhLnNoYXJkc3x8W10pLm1hcChyZyksITApLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBULmNsYXNzTGlzdC5hZGQoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQocykpfSksZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQocykpLEUuZm9yRWFjaChmdW5jdGlvbihUKXtyZXR1cm4gVC5jbGFzc0xpc3QucmVtb3ZlKCJhbGxvdy1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KHMpKX0pfX19LFthLmluZXJ0LGEubG9ja1JlZi5jdXJyZW50LGEuc2hhcmRzXSk7dmFyIHA9di51c2VDYWxsYmFjayhmdW5jdGlvbihFLFQpe2lmKCJ0b3VjaGVzImluIEUmJkUudG91Y2hlcy5sZW5ndGg9PT0yfHxFLnR5cGU9PT0id2hlZWwiJiZFLmN0cmxLZXkpcmV0dXJuIWQuY3VycmVudC5hbGxvd1BpbmNoWm9vbTt2YXIgTz1QaShFKSxBPXUuY3VycmVudCxOPSJkZWx0YVgiaW4gRT9FLmRlbHRhWDpBWzBdLU9bMF0sTT0iZGVsdGFZImluIEU/RS5kZWx0YVk6QVsxXS1PWzFdLFksSD1FLnRhcmdldCxVPU1hdGguYWJzKE4pPk1hdGguYWJzKE0pPyJoIjoidiI7aWYoInRvdWNoZXMiaW4gRSYmVT09PSJoIiYmSC50eXBlPT09InJhbmdlIilyZXR1cm4hMTt2YXIgQj13aW5kb3cuZ2V0U2VsZWN0aW9uKCksSj1CJiZCLmFuY2hvck5vZGUsVz1KP0o9PT1IfHxKLmNvbnRhaW5zKEgpOiExO2lmKFcpcmV0dXJuITE7dmFyIG5lPW5nKFUsSCk7aWYoIW5lKXJldHVybiEwO2lmKG5lP1k9VTooWT1VPT09InYiPyJoIjoidiIsbmU9bmcoVSxIKSksIW5lKXJldHVybiExO2lmKCFpLmN1cnJlbnQmJiJjaGFuZ2VkVG91Y2hlcyJpbiBFJiYoTnx8TSkmJihpLmN1cnJlbnQ9WSksIVkpcmV0dXJuITA7dmFyIGVlPWkuY3VycmVudHx8WTtyZXR1cm4gTEUoZWUsVCxFLGVlPT09ImgiP046TSl9LFtdKSx5PXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7dmFyIFQ9RTtpZighKCFyby5sZW5ndGh8fHJvW3JvLmxlbmd0aC0xXSE9PWYpKXt2YXIgTz0iZGVsdGFZImluIFQ/b2coVCk6UGkoVCksQT1vLmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZLm5hbWU9PT1ULnR5cGUmJihZLnRhcmdldD09PVQudGFyZ2V0fHxULnRhcmdldD09PVkuc2hhZG93UGFyZW50KSYmVUUoWS5kZWx0YSxPKX0pWzBdO2lmKEEmJkEuc2hvdWxkKXtULmNhbmNlbGFibGUmJlQucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoIUEpe3ZhciBOPShkLmN1cnJlbnQuc2hhcmRzfHxbXSkubWFwKHJnKS5maWx0ZXIoQm9vbGVhbikuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZLmNvbnRhaW5zKFQudGFyZ2V0KX0pLE09Ti5sZW5ndGg+MD9wKFQsTlswXSk6IWQuY3VycmVudC5ub0lzb2xhdGlvbjtNJiZULmNhbmNlbGFibGUmJlQucHJldmVudERlZmF1bHQoKX19fSxbXSksYj12LnVzZUNhbGxiYWNrKGZ1bmN0aW9uKEUsVCxPLEEpe3ZhciBOPXtuYW1lOkUsZGVsdGE6VCx0YXJnZXQ6TyxzaG91bGQ6QSxzaGFkb3dQYXJlbnQ6UEUoTyl9O28uY3VycmVudC5wdXNoKE4pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmN1cnJlbnQ9by5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihNKXtyZXR1cm4gTSE9PU59KX0sMSl9LFtdKSx4PXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7dS5jdXJyZW50PVBpKEUpLGkuY3VycmVudD12b2lkIDB9LFtdKSxnPXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7YihFLnR5cGUsb2coRSksRS50YXJnZXQscChFLGEubG9ja1JlZi5jdXJyZW50KSl9LFtdKSxDPXYudXNlQ2FsbGJhY2soZnVuY3Rpb24oRSl7YihFLnR5cGUsUGkoRSksRS50YXJnZXQscChFLGEubG9ja1JlZi5jdXJyZW50KSl9LFtdKTt2LnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiByby5wdXNoKGYpLGEuc2V0Q2FsbGJhY2tzKHtvblNjcm9sbENhcHR1cmU6ZyxvbldoZWVsQ2FwdHVyZTpnLG9uVG91Y2hNb3ZlQ2FwdHVyZTpDfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHksb28pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseSxvbyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIseCxvbyksZnVuY3Rpb24oKXtybz1yby5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUhPT1mfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHksb28pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseSxvbyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIseCxvbyl9fSxbXSk7dmFyIHc9YS5yZW1vdmVTY3JvbGxCYXIsUj1hLmluZXJ0O3JldHVybiB2LmNyZWF0ZUVsZW1lbnQodi5GcmFnbWVudCxudWxsLFI/di5jcmVhdGVFbGVtZW50KGYse3N0eWxlczpIRShzKX0pOm51bGwsdz92LmNyZWF0ZUVsZW1lbnQoQUUse25vUmVsYXRpdmU6YS5ub1JlbGF0aXZlLGdhcE1vZGU6YS5nYXBNb2RlfSk6bnVsbCl9ZnVuY3Rpb24gUEUoYSl7Zm9yKHZhciBvPW51bGw7YSE9PW51bGw7KWEgaW5zdGFuY2VvZiBTaGFkb3dSb290JiYobz1hLmhvc3QsYT1hLmhvc3QpLGE9YS5wYXJlbnROb2RlO3JldHVybiBvfWNvbnN0IEdFPXZFKEp2LElFKTt2YXIgR2k9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKGEsbyl7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChCaSxJbih7fSxhLHtyZWY6byxzaWRlQ2FyOkdFfSkpfSk7R2kuY2xhc3NOYW1lcz1CaS5jbGFzc05hbWVzO3ZhciBWRT1PYmplY3QuZGVmaW5lUHJvcGVydHksWmU9KGEsbyk9PlZFKGEsIm5hbWUiLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMH0pLFlFPVsiRW50ZXIiLCIgIl0scUU9WyJBcnJvd0Rvd24iLCJQYWdlVXAiLCJIb21lIl0saWc9WyJBcnJvd1VwIiwiUGFnZURvd24iLCJFbmQiXSxYRT1bLi4ucUUsLi4uaWddLFZpPSJNZW51IixbUHMsS0UsUUVdPWFyKFZpKSxbeGEsUURdPU10KFZpLFtRRSxlbyxub10pLEdzPWVvKCksY2c9bm8oKSxbWkUsZHJdPXhhKFZpKSxbRkUsVnNdPXhhKFZpKSwkRT1aZShhPT57Y29uc3R7X19zY29wZU1lbnU6byxvcGVuOnU9ITEsY2hpbGRyZW46aSxkaXI6cyxvbk9wZW5DaGFuZ2U6Zixtb2RhbDpkPSEwfT1hLHA9R3MobyksW3ksYl09di51c2VTdGF0ZShudWxsKSx4PXYudXNlUmVmKCExKSxnPXp0KGYpLEM9UWEocyk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3Qgdz1aZSgoKT0+e3guY3VycmVudD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsUix7Y2FwdHVyZTohMCxvbmNlOiEwfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFIse2NhcHR1cmU6ITAsb25jZTohMH0pfSwiaGFuZGxlS2V5RG93biIpLFI9WmUoKCk9PnguY3VycmVudD0hMSwiaGFuZGxlUG9pbnRlciIpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix3LHtjYXB0dXJlOiEwfSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix3LHtjYXB0dXJlOiEwfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIse2NhcHR1cmU6ITB9KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsUix7Y2FwdHVyZTohMH0pfX0sW10pLHYudXNlRWZmZWN0KCgpPT57aWYoIXUpcmV0dXJuO2NvbnN0IHc9WmUoKCk9PmcoITEpLCJoYW5kbGVCbHVyIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix3KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHcpfSxbdSxnXSksbS5qc3god3Msey4uLnAsY2hpbGRyZW46bS5qc3goWkUse3Njb3BlOm8sb3Blbjp1LG9uT3BlbkNoYW5nZTpnLGNvbnRlbnQ6eSxvbkNvbnRlbnRDaGFuZ2U6YixjaGlsZHJlbjptLmpzeChGRSx7c2NvcGU6byxvbkNsb3NlOnYudXNlQ2FsbGJhY2soKCk9PmcoITEpLFtnXSksaXNVc2luZ0tleWJvYXJkUmVmOngsZGlyOkMsbW9kYWw6ZCxjaGlsZHJlbjppfSl9KX0pfSwiTWVudSIpLEpFPXYuZm9yd2FyZFJlZihaZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVNZW51OmksLi4uc309byxmPUdzKGkpO3JldHVybiBtLmpzeChFcyx7Li4uZiwuLi5zLHJlZjp1fSl9LCJNZW51QW5jaG9yIikpLHVnPSJNZW51UG9ydGFsIixbV0UsZTJdPXhhKHVnLHtmb3JjZU1vdW50OnZvaWQgMH0pLHQyPVplKGE9Pntjb25zdHtfX3Njb3BlTWVudTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjppLGNvbnRhaW5lcjpzfT1hLGY9ZHIodWcsbyk7cmV0dXJuIG0uanN4KFdFLHtzY29wZTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjptLmpzeChtbix7cHJlc2VudDp1fHxmLm9wZW4sY2hpbGRyZW46bS5qc3goc3Ise2FzQ2hpbGQ6ITAsY29udGFpbmVyOnMsY2hpbGRyZW46aX0pfSl9KX0sIk1lbnVQb3J0YWwiKSxrbD0iTWVudUNvbnRlbnQiLFtuMixzZ109eGEoa2wpLGwyPXYuZm9yd2FyZFJlZihaZShmdW5jdGlvbihvLHUpe2NvbnN0IGk9ZTIoa2wsby5fX3Njb3BlTWVudSkse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsLi4uZn09byxkPWRyKGtsLG8uX19zY29wZU1lbnUpLHA9VnMoa2wsby5fX3Njb3BlTWVudSk7cmV0dXJuIG0uanN4KFBzLlByb3ZpZGVyLHtzY29wZTpvLl9fc2NvcGVNZW51LGNoaWxkcmVuOm0uanN4KG1uLHtwcmVzZW50OnN8fGQub3BlbixjaGlsZHJlbjptLmpzeChQcy5TbG90LHtzY29wZTpvLl9fc2NvcGVNZW51LGNoaWxkcmVuOnAubW9kYWw/bS5qc3goYTIsey4uLmYscmVmOnV9KTptLmpzeChvMix7Li4uZixyZWY6dX0pfSl9KX0pfSwiTWVudUNvbnRlbnQiKSksYTI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3QgaT1kcihrbCxvLl9fc2NvcGVNZW51KSxzPXYudXNlUmVmKG51bGwpLGY9RWUodSxzKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBkPXMuY3VycmVudDtpZihkKXJldHVybiBMcyhkKX0sW10pLG0uanN4KGZnLHsuLi5vLHJlZjpmLHRyYXBGb2N1czppLm9wZW4sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOmkub3BlbixkaXNhYmxlT3V0c2lkZVNjcm9sbDohMCxvbkZvY3VzT3V0c2lkZTp1ZShvLm9uRm9jdXNPdXRzaWRlLGQ9PmQucHJldmVudERlZmF1bHQoKSx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOiExfSksb25EaXNtaXNzOigpPT5pLm9uT3BlbkNoYW5nZSghMSl9KX0sIk1lbnVSb290Q29udGVudE1vZGFsIikpLG8yPXYuZm9yd2FyZFJlZihaZShmdW5jdGlvbihvLHUpe2NvbnN0IGk9ZHIoa2wsby5fX3Njb3BlTWVudSk7cmV0dXJuIG0uanN4KGZnLHsuLi5vLHJlZjp1LHRyYXBGb2N1czohMSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITEsZGlzYWJsZU91dHNpZGVTY3JvbGw6ITEsb25EaXNtaXNzOigpPT5pLm9uT3BlbkNoYW5nZSghMSl9KX0sIk1lbnVSb290Q29udGVudE5vbk1vZGFsIikpLHIyPUxuKCJNZW51Q29udGVudC5TY3JvbGxMb2NrIiksZmc9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZU1lbnU6aSxsb29wOnM9ITEsdHJhcEZvY3VzOmYsb25PcGVuQXV0b0ZvY3VzOmQsb25DbG9zZUF1dG9Gb2N1czpwLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp5LG9uRW50cnlGb2N1czpiLG9uRXNjYXBlS2V5RG93bjp4LG9uUG9pbnRlckRvd25PdXRzaWRlOmcsb25Gb2N1c091dHNpZGU6QyxvbkludGVyYWN0T3V0c2lkZTp3LG9uRGlzbWlzczpSLGRpc2FibGVPdXRzaWRlU2Nyb2xsOkUsLi4uVH09byxPPWRyKGtsLGkpLEE9VnMoa2wsaSksTj1HcyhpKSxNPWNnKGkpLFk9S0UoaSksW0gsVV09di51c2VTdGF0ZShudWxsKSxCPXYudXNlUmVmKG51bGwpLFtKLFddPXYudXNlU3RhdGUobnVsbCk7dXMoSik7Y29uc3R7bm9kZXM6bmUscmVnaXN0cnk6ZWV9PWNzKCksY2U9ISEoZnx8RSksbWU9RWUodSxCLE8ub25Db250ZW50Q2hhbmdlLFcpLGhlPXYudXNlUmVmKDApLFA9di51c2VSZWYoIiIpLCQ9di51c2VSZWYoMCksRj12LnVzZVJlZihudWxsKSxyZT12LnVzZVJlZigicmlnaHQiKSxxPXYudXNlUmVmKDApLHhlPXYudXNlTWVtbygoKT0+RT9bQiwuLi5uZS5tYXAoSz0+KHtjdXJyZW50Okt9KSldOltdLFtCLG5lLEVdKSxqZT1FP0dpOnYuRnJhZ21lbnQsWWU9RT97YXM6cjIsYWxsb3dQaW5jaFpvb206ITAsc2hhcmRzOnhlfTp2b2lkIDAsRD1aZShLPT57Y29uc3QgYWU9UC5jdXJyZW50K0sseWU9WSgpLmZpbHRlcihSZT0+IVJlLmRpc2FibGVkKSxzZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50LGxlPXllLmZpbmQoUmU9PlJlLnJlZi5jdXJyZW50PT09c2UpPy50ZXh0VmFsdWUsdGU9eWUubWFwKFJlPT5SZS50ZXh0VmFsdWUpLGllPXlnKHRlLGFlLGxlKSxiZT15ZS5maW5kKFJlPT5SZS50ZXh0VmFsdWU9PT1pZSk/LnJlZi5jdXJyZW50O2Z1bmN0aW9uIHdlKFJlKXtQLmN1cnJlbnQ9UmUsd2luZG93LmNsZWFyVGltZW91dChoZS5jdXJyZW50KSxSZSE9PSIiJiYoaGUuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+d2UoIiIpLDFlMykpfVplKHdlLCJ1cGRhdGVTZWFyY2giKSx3ZShhZSksYmUmJnNldFRpbWVvdXQoKCk9PmJlLmZvY3VzKCkpfSwiaGFuZGxlVHlwZWFoZWFkU2VhcmNoIik7di51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KGhlLmN1cnJlbnQpLFtdKSxycigpO2NvbnN0IFg9di51c2VDYWxsYmFjayhLPT5yZS5jdXJyZW50PT09Ri5jdXJyZW50Py5zaWRlJiZ4ZyhLLEYuY3VycmVudD8uYXJlYSksW10pO3JldHVybiBtLmpzeChuMix7c2NvcGU6aSxzZWFyY2hSZWY6UCxvbkl0ZW1FbnRlcjp2LnVzZUNhbGxiYWNrKEs9PntYKEspJiZLLnByZXZlbnREZWZhdWx0KCl9LFtYXSksb25JdGVtTGVhdmU6di51c2VDYWxsYmFjayhLPT57WChLKXx8KEIuY3VycmVudD8uZm9jdXMoKSxVKG51bGwpKX0sW1hdKSxvblRyaWdnZXJMZWF2ZTp2LnVzZUNhbGxiYWNrKEs9PntYKEspJiZLLnByZXZlbnREZWZhdWx0KCl9LFtYXSkscG9pbnRlckdyYWNlVGltZXJSZWY6JCxvblBvaW50ZXJHcmFjZUludGVudENoYW5nZTp2LnVzZUNhbGxiYWNrKEs9PntGLmN1cnJlbnQ9S30sW10pLGNoaWxkcmVuOm0uanN4KGlzLHtyZWdpc3RyeTpjZT9lZTpudWxsLGNoaWxkcmVuOm0uanN4KGplLHsuLi5ZZSxjaGlsZHJlbjptLmpzeChycyx7YXNDaGlsZDohMCx0cmFwcGVkOmYsYnJhbmNoZXM6bmUsb25Nb3VudEF1dG9Gb2N1czp1ZShkLEs9PntLLnByZXZlbnREZWZhdWx0KCksQi5jdXJyZW50Py5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSksb25Vbm1vdW50QXV0b0ZvY3VzOnAsY2hpbGRyZW46bS5qc3gob3Ise2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnksb25Fc2NhcGVLZXlEb3duOngsb25Qb2ludGVyRG93bk91dHNpZGU6ZyxvbkZvY3VzT3V0c2lkZTpDLG9uSW50ZXJhY3RPdXRzaWRlOncsb25EaXNtaXNzOlIsY2hpbGRyZW46bS5qc3goanMse2FzQ2hpbGQ6ITAsLi4uTSxkaXI6QS5kaXIsb3JpZW50YXRpb246InZlcnRpY2FsIixsb29wOnMsY3VycmVudFRhYlN0b3BJZDpILG9uQ3VycmVudFRhYlN0b3BJZENoYW5nZTpVLG9uRW50cnlGb2N1czp1ZShiLEs9PntBLmlzVXNpbmdLZXlib2FyZFJlZi5jdXJyZW50fHxLLnByZXZlbnREZWZhdWx0KCl9KSxwcmV2ZW50U2Nyb2xsT25FbnRyeUZvY3VzOiEwLGNoaWxkcmVuOm0uanN4KFJzLHtyb2xlOiJtZW51IiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiZGF0YS1zdGF0ZSI6aGcoTy5vcGVuKSwiZGF0YS1yYWRpeC1tZW51LWNvbnRlbnQiOiIiLGRpcjpBLmRpciwuLi5OLC4uLlQscmVmOm1lLHN0eWxlOntvdXRsaW5lOiJub25lIiwuLi5ULnN0eWxlfSxvbktleURvd246dWUoVC5vbktleURvd24sSz0+e2NvbnN0IHllPUsudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXJhZGl4LW1lbnUtY29udGVudF0iKT09PUsuY3VycmVudFRhcmdldCxzZT1LLmN0cmxLZXl8fEsuYWx0S2V5fHxLLm1ldGFLZXksbGU9Sy5rZXkubGVuZ3RoPT09MTt5ZSYmKEsua2V5PT09IlRhYiImJksucHJldmVudERlZmF1bHQoKSwhc2UmJmxlJiZEKEsua2V5KSk7Y29uc3QgdGU9Qi5jdXJyZW50O2lmKEsudGFyZ2V0IT09dGV8fCFYRS5pbmNsdWRlcyhLLmtleSkpcmV0dXJuO0sucHJldmVudERlZmF1bHQoKTtjb25zdCBiZT1ZKCkuZmlsdGVyKHdlPT4hd2UuZGlzYWJsZWQpLm1hcCh3ZT0+d2UucmVmLmN1cnJlbnQpO2lnLmluY2x1ZGVzKEsua2V5KSYmYmUucmV2ZXJzZSgpLHZnKGJlKX0pLG9uQmx1cjp1ZShvLm9uQmx1cixLPT57Sy5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKEsudGFyZ2V0KXx8KHdpbmRvdy5jbGVhclRpbWVvdXQoaGUuY3VycmVudCksUC5jdXJyZW50PSIiKX0pLG9uUG9pbnRlck1vdmU6dWUoby5vblBvaW50ZXJNb3ZlLFlpKEs9Pntjb25zdCBhZT1LLnRhcmdldCx5ZT1xLmN1cnJlbnQhPT1LLmNsaWVudFg7aWYoSy5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGFlKSYmeWUpe2NvbnN0IHNlPUsuY2xpZW50WD5xLmN1cnJlbnQ/InJpZ2h0IjoibGVmdCI7cmUuY3VycmVudD1zZSxxLmN1cnJlbnQ9Sy5jbGllbnRYfX0pKX0pfSl9KX0pfSl9KX0pfSwiTWVudUNvbnRlbnRJbXBsIikpLFlzPSJNZW51SXRlbSIsZGc9Im1lbnUuaXRlbVNlbGVjdCIsaTI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7ZGlzYWJsZWQ6aT0hMSxvblNlbGVjdDpzLC4uLmZ9PW8sZD12LnVzZVJlZihudWxsKSxwPVZzKFlzLG8uX19zY29wZU1lbnUpLHk9c2coWXMsby5fX3Njb3BlTWVudSksYj1FZSh1LGQpLHg9di51c2VSZWYoITEpLGc9WmUoKCk9Pntjb25zdCBDPWQuY3VycmVudDtpZighaSYmQyl7Y29uc3Qgdz1uZXcgQ3VzdG9tRXZlbnQoZGcse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO0MuYWRkRXZlbnRMaXN0ZW5lcihkZyxSPT5zPy4oUikse29uY2U6ITB9KSx4aShDLHcpLHcuZGVmYXVsdFByZXZlbnRlZD94LmN1cnJlbnQ9ITE6cC5vbkNsb3NlKCl9fSwiaGFuZGxlU2VsZWN0Iik7cmV0dXJuIG0uanN4KGMyLHsuLi5mLHJlZjpiLGRpc2FibGVkOmksb25DbGljazp1ZShvLm9uQ2xpY2ssZyksb25Qb2ludGVyRG93bjpDPT57by5vblBvaW50ZXJEb3duPy4oQykseC5jdXJyZW50PSEwfSxvblBvaW50ZXJVcDp1ZShvLm9uUG9pbnRlclVwLEM9Pnt4LmN1cnJlbnR8fEMuY3VycmVudFRhcmdldD8uY2xpY2soKX0pLG9uS2V5RG93bjp1ZShvLm9uS2V5RG93bixDPT57aXx8Qy50YXJnZXQhPT1DLmN1cnJlbnRUYXJnZXR8fHkuc2VhcmNoUmVmLmN1cnJlbnQhPT0iIiYmQy5rZXk9PT0iICJ8fFlFLmluY2x1ZGVzKEMua2V5KSYmKEMuY3VycmVudFRhcmdldC5jbGljaygpLEMucHJldmVudERlZmF1bHQoKSl9KX0pfSwiTWVudUl0ZW0iKSksYzI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZU1lbnU6aSxkaXNhYmxlZDpzPSExLHRleHRWYWx1ZTpmLC4uLmR9PW8scD1zZyhZcyxpKSx5PWNnKGkpLGI9di51c2VSZWYobnVsbCkseD1FZSh1LGIpLFtnLENdPXYudXNlU3RhdGUoITEpLFt3LFJdPXYudXNlU3RhdGUoIiIpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IEU9Yi5jdXJyZW50O0UmJlIoKEUudGV4dENvbnRlbnQ/PyIiKS50cmltKCkpfSxbZC5jaGlsZHJlbl0pLG0uanN4KFBzLkl0ZW1TbG90LHtzY29wZTppLGRpc2FibGVkOnMsdGV4dFZhbHVlOmY/P3csY2hpbGRyZW46bS5qc3goTXMse2FzQ2hpbGQ6ITAsLi4ueSxmb2N1c2FibGU6IXMsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtyb2xlOiJtZW51aXRlbSIsImRhdGEtaGlnaGxpZ2h0ZWQiOmc/IiI6dm9pZCAwLCJhcmlhLWRpc2FibGVkIjpzfHx2b2lkIDAsImRhdGEtZGlzYWJsZWQiOnM/IiI6dm9pZCAwLC4uLmQscmVmOngsb25Qb2ludGVyTW92ZTp1ZShvLm9uUG9pbnRlck1vdmUsWWkoRT0+e3M/cC5vbkl0ZW1MZWF2ZShFKToocC5vbkl0ZW1FbnRlcihFKSxFLmRlZmF1bHRQcmV2ZW50ZWR8fEUuY3VycmVudFRhcmdldC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pKX0pKSxvblBvaW50ZXJMZWF2ZTp1ZShvLm9uUG9pbnRlckxlYXZlLFlpKEU9PnAub25JdGVtTGVhdmUoRSkpKSxvbkZvY3VzOnVlKG8ub25Gb2N1cywoKT0+QyghMCkpLG9uQmx1cjp1ZShvLm9uQmx1ciwoKT0+QyghMSkpfSl9KX0pfSwiTWVudUl0ZW1JbXBsIikpLHUyPSJNZW51UmFkaW9Hcm91cCIsW1pELEZEXT14YSh1Mix7dmFsdWU6dm9pZCAwLG9uVmFsdWVDaGFuZ2U6WmUoKCk9Pnt9LCJvblZhbHVlQ2hhbmdlIil9KSxtZz0iTWVudUl0ZW1JbmRpY2F0b3IiLFskRCxzMl09eGEobWcse2NoZWNrZWQ6ITF9KSxmMj12LmZvcndhcmRSZWYoWmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlTWVudTppLGZvcmNlTW91bnQ6cywuLi5mfT1vLGQ9czIobWcsaSk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50OnN8fHFzKGQuY2hlY2tlZCl8fGQuY2hlY2tlZD09PSEwLGNoaWxkcmVuOm0uanN4KENlLnNwYW4sey4uLmYscmVmOnUsImRhdGEtc3RhdGUiOnBnKGQuY2hlY2tlZCl9KX0pfSwiTWVudUl0ZW1JbmRpY2F0b3IiKSksZDI9di5mb3J3YXJkUmVmKFplKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZU1lbnU6aSwuLi5zfT1vO3JldHVybiBtLmpzeChDZS5kaXYse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJob3Jpem9udGFsIiwuLi5zLHJlZjp1fSl9LCJNZW51U2VwYXJhdG9yIikpLG0yPSJNZW51U3ViIixbSkQsV0RdPXhhKG0yKTtmdW5jdGlvbiBoZyhhKXtyZXR1cm4gYT8ib3BlbiI6ImNsb3NlZCJ9WmUoaGcsImdldE9wZW5TdGF0ZSIpO2Z1bmN0aW9uIHFzKGEpe3JldHVybiBhPT09ImluZGV0ZXJtaW5hdGUifVplKHFzLCJpc0luZGV0ZXJtaW5hdGUiKTtmdW5jdGlvbiBwZyhhKXtyZXR1cm4gcXMoYSk/ImluZGV0ZXJtaW5hdGUiOmE/ImNoZWNrZWQiOiJ1bmNoZWNrZWQifVplKHBnLCJnZXRDaGVja2VkU3RhdGUiKTtmdW5jdGlvbiB2ZyhhKXtjb25zdCBvPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IHUgb2YgYSlpZih1PT09b3x8KHUuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bykpcmV0dXJufVplKHZnLCJmb2N1c0ZpcnN0Iik7ZnVuY3Rpb24gZ2coYSxvKXtyZXR1cm4gYS5tYXAoKHUsaSk9PmFbKG8raSklYS5sZW5ndGhdKX1aZShnZywid3JhcEFycmF5Iik7ZnVuY3Rpb24geWcoYSxvLHUpe2NvbnN0IHM9by5sZW5ndGg+MSYmQXJyYXkuZnJvbShvKS5ldmVyeShiPT5iPT09b1swXSk/b1swXTpvLGY9dT9hLmluZGV4T2YodSk6LTE7bGV0IGQ9Z2coYSxNYXRoLm1heChmLDApKTtzLmxlbmd0aD09PTEmJihkPWQuZmlsdGVyKGI9PmIhPT11KSk7Y29uc3QgeT1kLmZpbmQoYj0+Yi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIHkhPT11P3k6dm9pZCAwfVplKHlnLCJnZXROZXh0TWF0Y2giKTtmdW5jdGlvbiBiZyhhLG8pe2NvbnN0e3g6dSx5Oml9PWE7bGV0IHM9ITE7Zm9yKGxldCBmPTAsZD1vLmxlbmd0aC0xO2Y8by5sZW5ndGg7ZD1mKyspe2NvbnN0IHA9b1tmXSx5PW9bZF0sYj1wLngseD1wLnksZz15LngsQz15Lnk7eD5pIT1DPmkmJnU8KGctYikqKGkteCkvKEMteCkrYiYmKHM9IXMpfXJldHVybiBzfVplKGJnLCJpc1BvaW50SW5Qb2x5Z29uIik7ZnVuY3Rpb24geGcoYSxvKXtpZighbylyZXR1cm4hMTtjb25zdCB1PXt4OmEuY2xpZW50WCx5OmEuY2xpZW50WX07cmV0dXJuIGJnKHUsbyl9WmUoeGcsImlzUG9pbnRlckluR3JhY2VBcmVhIik7ZnVuY3Rpb24gWWkoYSl7cmV0dXJuIG89Pm8ucG9pbnRlclR5cGU9PT0ibW91c2UiP2Eobyk6dm9pZCAwfVplKFlpLCJ3aGVuTW91c2UiKTtmdW5jdGlvbiBoMih7dHJpZ2dlcjphLGFsaWduOm89InN0YXJ0IixjaGlsZHJlbjp1LGNsYXNzTmFtZTppfSxzKXtjb25zdFtmLGRdPXYudXNlU3RhdGUoITEpLHA9eyJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOmYsImRhdGEtc3RhdGUiOmY/Im9wZW4iOiJjbG9zZWQiLG9uQ2xpY2s6Yj0+e2IuZGVmYXVsdFByZXZlbnRlZHx8ZCh4PT4heCl9LG9uS2V5RG93bjpiPT57KGIua2V5PT09IkFycm93RG93biJ8fGIua2V5PT09IkFycm93VXAiKSYmKGIucHJldmVudERlZmF1bHQoKSxkKCEwKSl9fSx5PXYuaXNWYWxpZEVsZW1lbnQoYSk/di5jbG9uZUVsZW1lbnQoYSx7Li4ucCxvbkNsaWNrOmI9PnthLnByb3BzLm9uQ2xpY2s/LihiKSxwLm9uQ2xpY2soYil9LG9uS2V5RG93bjpiPT57YS5wcm9wcy5vbktleURvd24/LihiKSxwLm9uS2V5RG93bihiKX19KTptLmpzeCgic3BhbiIsey4uLnAsY2hpbGRyZW46YX0pO3JldHVybiBtLmpzeHMoJEUse29wZW46Zixvbk9wZW5DaGFuZ2U6ZCxtb2RhbDohMSxjaGlsZHJlbjpbbS5qc3goSkUse2FzQ2hpbGQ6ITAsY2hpbGRyZW46eX0pLG0uanN4KHQyLHtjaGlsZHJlbjptLmpzeChsMix7cmVmOnMsYWxpZ246byxjbGFzc05hbWU6a2UoIm1pbi13LVsyMDBweF0gcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWxhcmstbjIwMCBiZy1icmFuZC1wcmltYXJ5IHAtMSBzaGFkb3ctW3ZhcigtLXNoYWRvdy1vdmVybGF5KV0gZGF0YS1bc3RhdGU9b3Blbl06YW5pbS1vdmVybGF5LWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbS1vdmVybGF5LW91dCIsaSksY2hpbGRyZW46dX0pfSldfSl9Y29uc3QgU2c9di5mb3J3YXJkUmVmKGgyKTtTZy5kaXNwbGF5TmFtZT0iTGFya0Ryb3Bkb3duTWVudSI7ZnVuY3Rpb24gcDIoe3ZhbHVlOmEsb25TZWxlY3Q6byxkYW5nZXI6dSxkaXNhYmxlZDppLGNoZWNrZWQ6cyxjaGlsZHJlbjpmfSl7cmV0dXJuIG0uanN4cyhpMix7ZGlzYWJsZWQ6aSxvblNlbGVjdDooKT0+bz8uKGEpLCJkYXRhLWNoZWNrZWQiOnM/InRydWUiOnZvaWQgMCxjbGFzc05hbWU6a2UoImZsZXggaC04IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTMgdGV4dC1zbSBvdXRsaW5lLW5vbmUgZGF0YS1baGlnaGxpZ2h0ZWRdOmJnLWxhcmstbjEwMCIscyYmImZvbnQtbWVkaXVtIHRleHQtYnJhbmQtbGluayIsdSYmInRleHQtbGFyay1kYW5nZXIiKSxjaGlsZHJlbjpbcz9tLmpzeChHdSx7Y2xhc3NOYW1lOiJzaXplLTQgc2hyaW5rLTAifSk6bS5qc3goInNwYW4iLHtjbGFzc05hbWU6InNpemUtNCBzaHJpbmstMCIsImFyaWEtaGlkZGVuIjohMH0pLGZdfSl9Y29uc3QgdjI9KHtjaGlsZHJlbjphfSk9Pm0uanN4KGYyLHtjaGlsZHJlbjphfSksZzI9KHtjbGFzc05hbWU6YX0sbyk9Pm0uanN4KGQyLHtyZWY6byxjbGFzc05hbWU6a2UoImgtcHggYmctbGFyay1uMjAwIixhKX0pLENnPXYuZm9yd2FyZFJlZihnMik7Q2cuZGlzcGxheU5hbWU9IkxhcmtEcm9wZG93bk1lbnUuU2VwYXJhdG9yIjtjb25zdCBTYT1PYmplY3QuYXNzaWduKFNnLHtJdGVtOnAyLEl0ZW1JbmRpY2F0b3I6djIsU2VwYXJhdG9yOkNnfSk7dmFyIHkyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpbz0oYSxvKT0+eTIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksVGc9e0F1dG9tYXRpYzoiYXV0b21hdGljIixNYW51YWw6Im1hbnVhbCJ9LFhzPSJUYWJzIixbYjIsZWpdPU10KFhzLFtub10pLHdnPW5vKCksW3gyLEtzXT1iMihYcyksUzI9di5mb3J3YXJkUmVmKGlvKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRhYnM6aSx2YWx1ZTpzLG9uVmFsdWVDaGFuZ2U6ZixkZWZhdWx0VmFsdWU6ZCxvcmllbnRhdGlvbjpwPSJob3Jpem9udGFsIixkaXI6eSxhY3RpdmF0aW9uTW9kZTpiPVRnLkF1dG9tYXRpYywuLi54fT1vLGc9UWEoeSksW0Msd109RW4oe3Byb3A6cyxvbkNoYW5nZTpmLGRlZmF1bHRQcm9wOmQ/PyIiLGNhbGxlcjpYc30pO3JldHVybiBtLmpzeCh4Mix7c2NvcGU6aSxiYXNlSWQ6dGwoKSx2YWx1ZTpDLG9uVmFsdWVDaGFuZ2U6dyxvcmllbnRhdGlvbjpwLGRpcjpnLGFjdGl2YXRpb25Nb2RlOmIsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtkaXI6ZywiZGF0YS1vcmllbnRhdGlvbiI6cCwuLi54LHJlZjp1fSl9KX0sIlRhYnMiKSksQzI9IlRhYnNMaXN0IixUMj12LmZvcndhcmRSZWYoaW8oZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVGFiczppLGxvb3A6cz0hMCwuLi5mfT1vLGQ9S3MoQzIsaSkscD13ZyhpKTtyZXR1cm4gbS5qc3goanMse2FzQ2hpbGQ6ITAsLi4ucCxvcmllbnRhdGlvbjpkLm9yaWVudGF0aW9uLGRpcjpkLmRpcixsb29wOnMsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtyb2xlOiJ0YWJsaXN0IiwiYXJpYS1vcmllbnRhdGlvbiI6ZC5vcmllbnRhdGlvbiwuLi5mLHJlZjp1fSl9KX0sIlRhYnNMaXN0IikpLHcyPSJUYWJzVHJpZ2dlciIsRTI9di5mb3J3YXJkUmVmKGlvKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRhYnM6aSx2YWx1ZTpzLGRpc2FibGVkOmY9ITEsLi4uZH09byxwPUtzKHcyLGkpLHk9d2coaSksYj1RcyhwLmJhc2VJZCxzKSx4PVpzKHAuYmFzZUlkLHMpLGc9cz09PXAudmFsdWU7cmV0dXJuIG0uanN4KE1zLHthc0NoaWxkOiEwLC4uLnksZm9jdXNhYmxlOiFmLGFjdGl2ZTpnLGNoaWxkcmVuOm0uanN4KENlLmJ1dHRvbix7dHlwZToiYnV0dG9uIixyb2xlOiJ0YWIiLCJhcmlhLXNlbGVjdGVkIjpnLCJhcmlhLWNvbnRyb2xzIjp4LCJkYXRhLXN0YXRlIjpnPyJhY3RpdmUiOiJpbmFjdGl2ZSIsImRhdGEtZGlzYWJsZWQiOmY/IiI6dm9pZCAwLGRpc2FibGVkOmYsaWQ6YiwuLi5kLHJlZjp1LG9uTW91c2VEb3duOnVlKG8ub25Nb3VzZURvd24sQz0+eyFmJiZDLmJ1dHRvbj09PTAmJkMuY3RybEtleT09PSExPyhDLmN1cnJlbnRUYXJnZXQuZm9jdXMoKSxwLm9uVmFsdWVDaGFuZ2UocykpOkMucHJldmVudERlZmF1bHQoKX0pLG9uS2V5RG93bjp1ZShvLm9uS2V5RG93bixDPT57Znx8Qy50YXJnZXQhPT1DLmN1cnJlbnRUYXJnZXR8fFsiICIsIkVudGVyIl0uaW5jbHVkZXMoQy5rZXkpJiZwLm9uVmFsdWVDaGFuZ2Uocyl9KSxvbkZvY3VzOnVlKG8ub25Gb2N1cywoKT0+e2NvbnN0IEM9cC5hY3RpdmF0aW9uTW9kZSE9PVRnLk1hbnVhbDshZyYmIWYmJkMmJnAub25WYWx1ZUNoYW5nZShzKX0pfSl9KX0sIlRhYnNUcmlnZ2VyIikpLFIyPSJUYWJzQ29udGVudCIsXzI9di5mb3J3YXJkUmVmKGlvKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRhYnM6aSx2YWx1ZTpzLGZvcmNlTW91bnQ6ZixjaGlsZHJlbjpkLC4uLnB9PW8seT1LcyhSMixpKSxiPVFzKHkuYmFzZUlkLHMpLHg9WnMoeS5iYXNlSWQscyksZz1zPT09eS52YWx1ZSxDPXYudXNlUmVmKGcpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IHc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5DLmN1cnJlbnQ9ITEpO3JldHVybigpPT5jYW5jZWxBbmltYXRpb25GcmFtZSh3KX0sW10pLG0uanN4KG1uLHtwcmVzZW50OmZ8fGcsY2hpbGRyZW46KHtwcmVzZW50Ond9KT0+bS5qc3goQ2UuZGl2LHsiZGF0YS1zdGF0ZSI6Zz8iYWN0aXZlIjoiaW5hY3RpdmUiLCJkYXRhLW9yaWVudGF0aW9uIjp5Lm9yaWVudGF0aW9uLHJvbGU6InRhYnBhbmVsIiwiYXJpYS1sYWJlbGxlZGJ5IjpiLGhpZGRlbjohdyxpZDp4LHRhYkluZGV4OjAsLi4ucCxyZWY6dSxzdHlsZTp7Li4uby5zdHlsZSxhbmltYXRpb25EdXJhdGlvbjpDLmN1cnJlbnQ/IjBzIjp2b2lkIDB9LGNoaWxkcmVuOncmJmR9KX0pfSwiVGFic0NvbnRlbnQiKSk7ZnVuY3Rpb24gUXMoYSxvKXtyZXR1cm5gJHthfS10cmlnZ2VyLSR7b31gfWlvKFFzLCJtYWtlVHJpZ2dlcklkIik7ZnVuY3Rpb24gWnMoYSxvKXtyZXR1cm5gJHthfS1jb250ZW50LSR7b31gfWlvKFpzLCJtYWtlQ29udGVudElkIik7ZnVuY3Rpb24gTzIoe2RlZmF1bHRWYWx1ZTphLHZhbHVlOm8sb25WYWx1ZUNoYW5nZTp1LGNoaWxkcmVuOmksY2xhc3NOYW1lOnN9LGYpe3JldHVybiBtLmpzeChTMix7cmVmOmYsZGVmYXVsdFZhbHVlOmEsdmFsdWU6byxvblZhbHVlQ2hhbmdlOnUsY2xhc3NOYW1lOnMsY2hpbGRyZW46aX0pfWNvbnN0IEVnPXYuZm9yd2FyZFJlZihPMik7RWcuZGlzcGxheU5hbWU9IkxhcmtUYWJzIjtmdW5jdGlvbiBBMih7Y2hpbGRyZW46YSxjbGFzc05hbWU6bywuLi51fSxpKXtyZXR1cm4gbS5qc3goVDIse3JlZjppLGNsYXNzTmFtZTprZSgiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0wLjUiLG8pLC4uLnUsY2hpbGRyZW46YX0pfWNvbnN0IFJnPXYuZm9yd2FyZFJlZihBMik7UmcuZGlzcGxheU5hbWU9IkxhcmtUYWJzLkxpc3QiO2Z1bmN0aW9uIE4yKHt2YWx1ZTphLGRpc2FibGVkOm8sY2hpbGRyZW46dSxjbGFzc05hbWU6aX0scyl7cmV0dXJuIG0uanN4KEUyLHtyZWY6cyx2YWx1ZTphLGRpc2FibGVkOm8sY2xhc3NOYW1lOmtlKCJyZWxhdGl2ZSBmbGV4IGgtWzM0cHhdIGl0ZW1zLWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLWxnIHB4LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjcwMCBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgZGF0YS1bc3RhdGU9YWN0aXZlXTpiZy1sYXJrLWFjY2VudC1zb2Z0IGRhdGEtW3N0YXRlPWFjdGl2ZV06Zm9udC1zZW1pYm9sZCBkYXRhLVtzdGF0ZT1hY3RpdmVdOnRleHQtYnJhbmQtbGluayBhZnRlcjphYnNvbHV0ZSBhZnRlcjppbnNldC14LTIgYWZ0ZXI6Ym90dG9tLTAgYWZ0ZXI6aC1bM3B4XSBhZnRlcjpyb3VuZGVkLWZ1bGwgYWZ0ZXI6YmctYnJhbmQtc2Vjb25kYXJ5IGRhdGEtW3N0YXRlPWluYWN0aXZlXTphZnRlcjpoaWRkZW4gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOnRleHQtbGFyay1uNDAwIixpKSxjaGlsZHJlbjp1fSl9Y29uc3QgX2c9di5mb3J3YXJkUmVmKE4yKTtfZy5kaXNwbGF5TmFtZT0iTGFya1RhYnMuVGFiIjtmdW5jdGlvbiBEMih7dmFsdWU6YSxjaGlsZHJlbjpvLGNsYXNzTmFtZTp1fSxpKXtyZXR1cm4gbS5qc3goXzIse3JlZjppLHZhbHVlOmEsY2xhc3NOYW1lOmtlKCJtdC0zIHRleHQtc20gdGV4dC1sYXJrLW45MDAgb3V0bGluZS1ub25lIix1KSxjaGlsZHJlbjpvfSl9Y29uc3QgT2c9di5mb3J3YXJkUmVmKEQyKTtPZy5kaXNwbGF5TmFtZT0iTGFya1RhYnMuUGFuZWwiO2NvbnN0IEV0PU9iamVjdC5hc3NpZ24oRWcse0xpc3Q6UmcsVGFiOl9nLFBhbmVsOk9nfSk7dmFyIGoyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxNMj0oYSxvKT0+ajIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksQWc9T2JqZWN0LmZyZWV6ZSh7cG9zaXRpb246ImFic29sdXRlIixib3JkZXI6MCx3aWR0aDoxLGhlaWdodDoxLHBhZGRpbmc6MCxtYXJnaW46LTEsb3ZlcmZsb3c6ImhpZGRlbiIsY2xpcDoicmVjdCgwLCAwLCAwLCAwKSIsd2hpdGVTcGFjZToibm93cmFwIix3b3JkV3JhcDoibm9ybWFsIn0pLEZzPXYuZm9yd2FyZFJlZihNMihmdW5jdGlvbihvLHUpe3JldHVybiBtLmpzeChDZS5zcGFuLHsuLi5vLHJlZjp1LHN0eWxlOnsuLi5BZywuLi5vLnN0eWxlfX0pfSwiVmlzdWFsbHlIaWRkZW4iKSksejI9T2JqZWN0LmRlZmluZVByb3BlcnR5LHN0PShhLG8pPT56MihhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxbJHMsdGpdPU10KCJUb29sdGlwIixbZW9dKSxxaT1lbygpLGsyPSJUb29sdGlwUHJvdmlkZXIiLEwyPTcwMCxKcz0idG9vbHRpcC5vcGVuIixbVTIsV3NdPSRzKGsyKSxOZz1zdChhPT57Y29uc3R7X19zY29wZVRvb2x0aXA6byxkZWxheUR1cmF0aW9uOnU9TDIsc2tpcERlbGF5RHVyYXRpb246aT0zMDAsZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ6cz0hMSxjaGlsZHJlbjpmfT1hLGQ9di51c2VSZWYoITApLHA9di51c2VSZWYoITEpLHk9di51c2VSZWYoMCk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgYj15LmN1cnJlbnQ7cmV0dXJuKCk9PndpbmRvdy5jbGVhclRpbWVvdXQoYil9LFtdKSxtLmpzeChVMix7c2NvcGU6byxpc09wZW5EZWxheWVkUmVmOmQsZGVsYXlEdXJhdGlvbjp1LG9uT3Blbjp2LnVzZUNhbGxiYWNrKCgpPT57aTw9MHx8KHdpbmRvdy5jbGVhclRpbWVvdXQoeS5jdXJyZW50KSxkLmN1cnJlbnQ9ITEpfSxbaV0pLG9uQ2xvc2U6di51c2VDYWxsYmFjaygoKT0+e2k8PTB8fCh3aW5kb3cuY2xlYXJUaW1lb3V0KHkuY3VycmVudCkseS5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5kLmN1cnJlbnQ9ITAsaSkpfSxbaV0pLGlzUG9pbnRlckluVHJhbnNpdFJlZjpwLG9uUG9pbnRlckluVHJhbnNpdENoYW5nZTp2LnVzZUNhbGxiYWNrKGI9PntwLmN1cnJlbnQ9Yn0sW10pLGRpc2FibGVIb3ZlcmFibGVDb250ZW50OnMsY2hpbGRyZW46Zn0pfSwiVG9vbHRpcFByb3ZpZGVyIiksZWY9IlRvb2x0aXAiLFtIMixtcl09JHMoZWYpLEIyPXN0KGE9Pntjb25zdHtfX3Njb3BlVG9vbHRpcDpvLGNoaWxkcmVuOnUsb3BlbjppLGRlZmF1bHRPcGVuOnMsb25PcGVuQ2hhbmdlOmYsZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ6ZCxkZWxheUR1cmF0aW9uOnB9PWEseT1XcyhlZixhLl9fc2NvcGVUb29sdGlwKSxiPXFpKG8pLFt4LGddPXYudXNlU3RhdGUobnVsbCksW0Msd109di51c2VTdGF0ZSh2b2lkIDApLFI9dGwoKSxFPXYudXNlUmVmKDApLFQ9ZD8/eS5kaXNhYmxlSG92ZXJhYmxlQ29udGVudCxPPXA/P3kuZGVsYXlEdXJhdGlvbixBPXYudXNlUmVmKCExKSxbTixNXT1Fbih7cHJvcDppLGRlZmF1bHRQcm9wOnM/PyExLG9uQ2hhbmdlOnN0KFc9PntXPyh5Lm9uT3BlbigpLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KEpzKSkpOnkub25DbG9zZSgpLGY/LihXKX0sIm9uQ2hhbmdlIiksY2FsbGVyOmVmfSksWT12LnVzZU1lbW8oKCk9Pk4/QS5jdXJyZW50PyJkZWxheWVkLW9wZW4iOiJpbnN0YW50LW9wZW4iOiJjbG9zZWQiLFtOXSksSD12LnVzZUNhbGxiYWNrKCgpPT57d2luZG93LmNsZWFyVGltZW91dChFLmN1cnJlbnQpLEUuY3VycmVudD0wLEEuY3VycmVudD0hMSxNKCEwKX0sW01dKSxVPXYudXNlQ2FsbGJhY2soKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PTAsTSghMSl9LFtNXSksQj12LnVzZUNhbGxiYWNrKCgpPT57d2luZG93LmNsZWFyVGltZW91dChFLmN1cnJlbnQpLEUuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e0EuY3VycmVudD0hMCxNKCEwKSxFLmN1cnJlbnQ9MH0sTyl9LFtPLE1dKTt2LnVzZUVmZmVjdCgoKT0+KCk9PntFLmN1cnJlbnQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PTApfSxbXSk7Y29uc3QgSj1DPz9SO3JldHVybiBtLmpzeCh3cyx7Li4uYixjaGlsZHJlbjptLmpzeChIMix7c2NvcGU6byxjb250ZW50SWQ6SixzZXRDb250ZW50SWQ6dyxvcGVuOk4sc3RhdGVBdHRyaWJ1dGU6WSx0cmlnZ2VyOngsb25UcmlnZ2VyQ2hhbmdlOmcsb25UcmlnZ2VyRW50ZXI6di51c2VDYWxsYmFjaygoKT0+e3kuaXNPcGVuRGVsYXllZFJlZi5jdXJyZW50P0IoKTpIKCl9LFt5LmlzT3BlbkRlbGF5ZWRSZWYsQixIXSksb25UcmlnZ2VyTGVhdmU6di51c2VDYWxsYmFjaygoKT0+e1Q/VSgpOih3aW5kb3cuY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PTApfSxbVSxUXSksb25PcGVuOkgsb25DbG9zZTpVLGRpc2FibGVIb3ZlcmFibGVDb250ZW50OlQsY2hpbGRyZW46dX0pfSl9LCJUb29sdGlwIiksRGc9IlRvb2x0aXBUcmlnZ2VyIixJMj12LmZvcndhcmRSZWYoc3QoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9vbHRpcDppLCJhcmlhLWRlc2NyaWJlZGJ5IjpzLC4uLmZ9PW8sZD1tcihEZyxpKSxwPVdzKERnLGkpLHk9cWkoaSksYj12LnVzZVJlZihudWxsKSx4PUVlKHUsYixkLm9uVHJpZ2dlckNoYW5nZSksZz12LnVzZVJlZighMSksQz12LnVzZVJlZighMSksdz12LnVzZUNhbGxiYWNrKCgpPT5nLmN1cnJlbnQ9ITEsW10pO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+KCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdyksW3ddKSxtLmpzeChFcyx7YXNDaGlsZDohMCwuLi55LGNoaWxkcmVuOm0uanN4KENlLmJ1dHRvbix7ImFyaWEtZGVzY3JpYmVkYnkiOmQub3Blbj9JZyhzLGQuY29udGVudElkKTpzLCJkYXRhLXN0YXRlIjpkLnN0YXRlQXR0cmlidXRlLC4uLmYscmVmOngsb25Qb2ludGVyTW92ZTp1ZShvLm9uUG9pbnRlck1vdmUsUj0+e1IucG9pbnRlclR5cGUhPT0idG91Y2giJiYhQy5jdXJyZW50JiYhcC5pc1BvaW50ZXJJblRyYW5zaXRSZWYuY3VycmVudCYmKGQub25UcmlnZ2VyRW50ZXIoKSxDLmN1cnJlbnQ9ITApfSksb25Qb2ludGVyTGVhdmU6dWUoby5vblBvaW50ZXJMZWF2ZSwoKT0+e2Qub25UcmlnZ2VyTGVhdmUoKSxDLmN1cnJlbnQ9ITF9KSxvblBvaW50ZXJEb3duOnVlKG8ub25Qb2ludGVyRG93biwoKT0+e2Qub3BlbiYmZC5vbkNsb3NlKCksZy5jdXJyZW50PSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdyx7b25jZTohMH0pfSksb25Gb2N1czp1ZShvLm9uRm9jdXMsKCk9PntnLmN1cnJlbnR8fGQub25PcGVuKCl9KSxvbkJsdXI6dWUoby5vbkJsdXIsZC5vbkNsb3NlKSxvbkNsaWNrOnVlKG8ub25DbGljayxkLm9uQ2xvc2UpfSl9KX0sIlRvb2x0aXBUcmlnZ2VyIikpLGpnPSJUb29sdGlwUG9ydGFsIixbUDIsRzJdPSRzKGpnLHtmb3JjZU1vdW50OnZvaWQgMH0pLFYyPXN0KGE9Pntjb25zdHtfX3Njb3BlVG9vbHRpcDpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjppLGNvbnRhaW5lcjpzfT1hLGY9bXIoamcsbyk7cmV0dXJuIG0uanN4KFAyLHtzY29wZTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjptLmpzeChtbix7cHJlc2VudDp1fHxmLm9wZW4sY2hpbGRyZW46bS5qc3goc3Ise2FzQ2hpbGQ6ITAsY29udGFpbmVyOnMsY2hpbGRyZW46aX0pfSl9KX0sIlRvb2x0aXBQb3J0YWwiKSxocj0iVG9vbHRpcENvbnRlbnQiLFkyPXYuZm9yd2FyZFJlZihzdChmdW5jdGlvbihvLHUpe2NvbnN0IGk9RzIoaHIsby5fX3Njb3BlVG9vbHRpcCkse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsc2lkZTpmPSJ0b3AiLC4uLmR9PW8scD1tcihocixvLl9fc2NvcGVUb29sdGlwKTtyZXR1cm4gbS5qc3gobW4se3ByZXNlbnQ6c3x8cC5vcGVuLGNoaWxkcmVuOnAuZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ/bS5qc3goTWcse3NpZGU6ZiwuLi5kLHJlZjp1fSk6bS5qc3gocTIse3NpZGU6ZiwuLi5kLHJlZjp1fSl9KX0sIlRvb2x0aXBDb250ZW50IikpLHEyPXYuZm9yd2FyZFJlZihzdChmdW5jdGlvbihvLHUpe2NvbnN0IGk9bXIoaHIsby5fX3Njb3BlVG9vbHRpcCkscz1XcyhocixvLl9fc2NvcGVUb29sdGlwKSxmPXYudXNlUmVmKG51bGwpLGQ9RWUodSxmKSxbcCx5XT12LnVzZVN0YXRlKG51bGwpLHt0cmlnZ2VyOmIsb25DbG9zZTp4fT1pLGc9Zi5jdXJyZW50LHtvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2U6Q309cyx3PXYudXNlQ2FsbGJhY2soKCk9Pnt5KG51bGwpLEMoITEpfSxbQ10pLFI9di51c2VDYWxsYmFjaygoRSxUKT0+e2NvbnN0IE89RS5jdXJyZW50VGFyZ2V0LEE9e3g6RS5jbGllbnRYLHk6RS5jbGllbnRZfSxOPXpnKEEsTy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksTT1rZyhBLE4pLFk9TGcoVC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksSD1IZyhbLi4uTSwuLi5ZXSk7eShIKSxDKCEwKX0sW0NdKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PigpPT53KCksW3ddKSx2LnVzZUVmZmVjdCgoKT0+e2lmKGImJmcpe2NvbnN0IEU9c3QoTz0+UihPLGcpLCJoYW5kbGVUcmlnZ2VyTGVhdmUiKSxUPXN0KE89PlIoTyxiKSwiaGFuZGxlQ29udGVudExlYXZlIik7cmV0dXJuIGIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixFKSxnLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsVCksKCk9PntiLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsRSksZy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFQpfX19LFtiLGcsUix3XSksdi51c2VFZmZlY3QoKCk9PntpZihwKXtjb25zdCBFPXN0KFQ9Pntjb25zdCBPPVQudGFyZ2V0LEE9e3g6VC5jbGllbnRYLHk6VC5jbGllbnRZfSxOPWI/LmNvbnRhaW5zKE8pfHxnPy5jb250YWlucyhPKSxNPSFVZyhBLHApO04/dygpOk0mJih3KCkseCgpKX0sImhhbmRsZVRyYWNrUG9pbnRlckdyYWNlIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixFKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEUpfX0sW2IsZyxwLHgsd10pLG0uanN4KE1nLHsuLi5vLHJlZjpkfSl9LCJUb29sdGlwQ29udGVudEhvdmVyYWJsZSIpKSxYMj1TcCgiVG9vbHRpcENvbnRlbnQiKSxNZz12LmZvcndhcmRSZWYoc3QoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9vbHRpcDppLGNoaWxkcmVuOnMsImFyaWEtbGFiZWwiOmYsaWQ6ZCxvbkVzY2FwZUtleURvd246cCxvblBvaW50ZXJEb3duT3V0c2lkZTp5LC4uLmJ9PW8seD1tcihocixpKSxnPXFpKGkpLHtvbkNsb3NlOkN9PXgsW3csUl09di51c2VTdGF0ZShudWxsKSxFPUVlKHUsUik7dXModyksdi51c2VFZmZlY3QoKCk9Pihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKEpzLEMpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEpzLEMpKSxbQ10pLHYudXNlRWZmZWN0KCgpPT57aWYoeC50cmlnZ2VyKXtjb25zdCBPPXN0KEE9PntBLnRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJkEudGFyZ2V0LmNvbnRhaW5zKHgudHJpZ2dlcikmJkMoKX0sImhhbmRsZVNjcm9sbCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixPLHtjYXB0dXJlOiEwfSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLE8se2NhcHR1cmU6ITB9KX19LFt4LnRyaWdnZXIsQ10pO2NvbnN0e3NldENvbnRlbnRJZDpUfT14O3JldHVybiBudCgoKT0+KFQoZCksKCk9PntUKHZvaWQgMCl9KSxbZCxUXSksbS5qc3gob3Ise2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiExLG9uRXNjYXBlS2V5RG93bjpwLG9uUG9pbnRlckRvd25PdXRzaWRlOnksb25Gb2N1c091dHNpZGU6Tz0+Ty5wcmV2ZW50RGVmYXVsdCgpLG9uRGlzbWlzczpDLGNoaWxkcmVuOm0uanN4cyhScyx7ImRhdGEtc3RhdGUiOnguc3RhdGVBdHRyaWJ1dGUscm9sZTpmP3ZvaWQgMDoidG9vbHRpcCIsaWQ6Zj92b2lkIDA6eC5jb250ZW50SWQsLi4uZywuLi5iLHJlZjpFLHN0eWxlOnsuLi5iLnN0eWxlLCItLXJhZGl4LXRvb2x0aXAtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjoidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pIiwiLS1yYWRpeC10b29sdGlwLWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCkiLCItLXJhZGl4LXRvb2x0aXAtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpIiwiLS1yYWRpeC10b29sdGlwLXRyaWdnZXItd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKSIsIi0tcmFkaXgtdG9vbHRpcC10cmlnZ2VyLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0KSJ9LGNoaWxkcmVuOlttLmpzeChYMix7Y2hpbGRyZW46c30pLGY/bS5qc3goRnMse2lkOnguY29udGVudElkLHJvbGU6InRvb2x0aXAiLGNoaWxkcmVuOmZ9KTpudWxsXX0pfSl9LCJUb29sdGlwQ29udGVudEltcGwiKSksSzI9di5mb3J3YXJkUmVmKHN0KGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRvb2x0aXA6aSwuLi5zfT1vLGY9cWkoaSk7cmV0dXJuIG0uanN4KEx3LHsuLi5mLC4uLnMscmVmOnV9KX0sIlRvb2x0aXBBcnJvdyIpKTtmdW5jdGlvbiB6ZyhhLG8pe2NvbnN0IHU9TWF0aC5hYnMoby50b3AtYS55KSxpPU1hdGguYWJzKG8uYm90dG9tLWEueSkscz1NYXRoLmFicyhvLnJpZ2h0LWEueCksZj1NYXRoLmFicyhvLmxlZnQtYS54KTtzd2l0Y2goTWF0aC5taW4odSxpLHMsZikpe2Nhc2UgZjpyZXR1cm4ibGVmdCI7Y2FzZSBzOnJldHVybiJyaWdodCI7Y2FzZSB1OnJldHVybiJ0b3AiO2Nhc2UgaTpyZXR1cm4iYm90dG9tIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19c3QoemcsImdldEV4aXRTaWRlRnJvbVJlY3QiKTtmdW5jdGlvbiBrZyhhLG8sdT01KXtjb25zdCBpPVtdO3N3aXRjaChvKXtjYXNlInRvcCI6aS5wdXNoKHt4OmEueC11LHk6YS55K3V9LHt4OmEueCt1LHk6YS55K3V9KTticmVhaztjYXNlImJvdHRvbSI6aS5wdXNoKHt4OmEueC11LHk6YS55LXV9LHt4OmEueCt1LHk6YS55LXV9KTticmVhaztjYXNlImxlZnQiOmkucHVzaCh7eDphLngrdSx5OmEueS11fSx7eDphLngrdSx5OmEueSt1fSk7YnJlYWs7Y2FzZSJyaWdodCI6aS5wdXNoKHt4OmEueC11LHk6YS55LXV9LHt4OmEueC11LHk6YS55K3V9KTticmVha31yZXR1cm4gaX1zdChrZywiZ2V0UGFkZGVkRXhpdFBvaW50cyIpO2Z1bmN0aW9uIExnKGEpe2NvbnN0e3RvcDpvLHJpZ2h0OnUsYm90dG9tOmksbGVmdDpzfT1hO3JldHVyblt7eDpzLHk6b30se3g6dSx5Om99LHt4OnUseTppfSx7eDpzLHk6aX1dfXN0KExnLCJnZXRQb2ludHNGcm9tUmVjdCIpO2Z1bmN0aW9uIFVnKGEsbyl7Y29uc3R7eDp1LHk6aX09YTtsZXQgcz0hMTtmb3IobGV0IGY9MCxkPW8ubGVuZ3RoLTE7ZjxvLmxlbmd0aDtkPWYrKyl7Y29uc3QgcD1vW2ZdLHk9b1tkXSxiPXAueCx4PXAueSxnPXkueCxDPXkueTt4PmkhPUM+aSYmdTwoZy1iKSooaS14KS8oQy14KStiJiYocz0hcyl9cmV0dXJuIHN9c3QoVWcsImlzUG9pbnRJblBvbHlnb24iKTtmdW5jdGlvbiBIZyhhKXtjb25zdCBvPWEuc2xpY2UoKTtyZXR1cm4gby5zb3J0KCh1LGkpPT51Lng8aS54Py0xOnUueD5pLng/MTp1Lnk8aS55Py0xOnUueT5pLnk/MTowKSxCZyhvKX1zdChIZywiZ2V0SHVsbCIpO2Z1bmN0aW9uIEJnKGEpe2lmKGEubGVuZ3RoPD0xKXJldHVybiBhLnNsaWNlKCk7Y29uc3Qgbz1bXTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl7Y29uc3Qgcz1hW2ldO2Zvcig7by5sZW5ndGg+PTI7KXtjb25zdCBmPW9bby5sZW5ndGgtMV0sZD1vW28ubGVuZ3RoLTJdO2lmKChmLngtZC54KSoocy55LWQueSk+PShmLnktZC55KSoocy54LWQueCkpby5wb3AoKTtlbHNlIGJyZWFrfW8ucHVzaChzKX1vLnBvcCgpO2NvbnN0IHU9W107Zm9yKGxldCBpPWEubGVuZ3RoLTE7aT49MDtpLS0pe2NvbnN0IHM9YVtpXTtmb3IoO3UubGVuZ3RoPj0yOyl7Y29uc3QgZj11W3UubGVuZ3RoLTFdLGQ9dVt1Lmxlbmd0aC0yXTtpZigoZi54LWQueCkqKHMueS1kLnkpPj0oZi55LWQueSkqKHMueC1kLngpKXUucG9wKCk7ZWxzZSBicmVha311LnB1c2gocyl9cmV0dXJuIHUucG9wKCksby5sZW5ndGg9PT0xJiZ1Lmxlbmd0aD09PTEmJm9bMF0ueD09PXVbMF0ueCYmb1swXS55PT09dVswXS55P286by5jb25jYXQodSl9c3QoQmcsImdldEh1bGxQcmVzb3J0ZWQiKTtmdW5jdGlvbiBJZyguLi5hKXtjb25zdCBvPW5ldyBTZXQ7Zm9yKGNvbnN0IHUgb2YgYSlpZih0eXBlb2YgdT09InN0cmluZyIpZm9yKGNvbnN0IGkgb2YgU3RyaW5nKHUpLnRyaW0oKS5zcGxpdCgvXHMrLykpaSYmby5hZGQoaSk7cmV0dXJuIG8uc2l6ZT4wP0FycmF5LmZyb20obykuam9pbigiICIpOnZvaWQgMH1zdChJZywiY29uY2F0QXJpYURlc2NyaWJlZGJ5Iik7Y29uc3QgUGc9di5jcmVhdGVDb250ZXh0KCExKSxRMj0oe2NoaWxkcmVuOmEsZGVsYXlEdXJhdGlvbjpvPTMwMCxza2lwRGVsYXlEdXJhdGlvbjp1fSk9Pm0uanN4KFBnLlByb3ZpZGVyLHt2YWx1ZTohMCxjaGlsZHJlbjptLmpzeChOZyx7ZGVsYXlEdXJhdGlvbjpvLHNraXBEZWxheUR1cmF0aW9uOnUsY2hpbGRyZW46YX0pfSksWGk9di5mb3J3YXJkUmVmKGZ1bmN0aW9uKHtjb250ZW50Om8sY2hpbGRyZW46dSxzaWRlOmk9InRvcCIsZGVsYXlEdXJhdGlvbjpzLGNsYXNzTmFtZTpmfSxkKXtjb25zdCBwPXYudXNlQ29udGV4dChQZykseT1tLmpzeHMoQjIse2RlbGF5RHVyYXRpb246cyxjaGlsZHJlbjpbbS5qc3goSTIse2FzQ2hpbGQ6ITAsY2hpbGRyZW46dX0pLG0uanN4KFYyLHtjaGlsZHJlbjptLmpzeHMoWTIse3JlZjpkLHNpZGU6aSxzaWRlT2Zmc2V0OjYsY2xhc3NOYW1lOmtlKCJyb3VuZGVkLXhsIGJnLWxhcmstbjkwMCBweC0yIHB5LTEgdGV4dC14cyB0ZXh0LXdoaXRlIGRhdGEtW3N0YXRlPWRlbGF5ZWQtb3Blbl06YW5pbS1vdmVybGF5LWluIixmKSxjaGlsZHJlbjpbbyxtLmpzeChLMix7Y2xhc3NOYW1lOiJmaWxsLWxhcmstbjkwMCJ9KV19KX0pXX0pO3JldHVybiBwP3k6bS5qc3goTmcse2RlbGF5RHVyYXRpb246MzAwLGNoaWxkcmVuOnl9KX0pO1hpLmRpc3BsYXlOYW1lPSJMYXJrVG9vbHRpcCI7dmFyIFoyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxGMj0oYSxvKT0+WjIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gdGYoYSxbbyx1XSl7cmV0dXJuIE1hdGgubWluKHUsTWF0aC5tYXgobyxhKSl9RjIodGYsImNsYW1wIik7dmFyICQyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWZT0oYSxvKT0+JDIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksR2c9e0l0ZW1BbGlnbmVkOiJpdGVtLWFsaWduZWQiLFBvcHBlcjoicG9wcGVyIn0sSjI9e1JUTDoicnRsIn0sVzI9WyIgIiwiRW50ZXIiLCJBcnJvd1VwIiwiQXJyb3dEb3duIl0sZVI9WyIgIiwiRW50ZXIiXSxjbz0iU2VsZWN0IixbS2ksbmYsdFJdPWFyKGNvKSxbQ2EsbmpdPU10KGNvLFt0Uixlb10pLGxmPWVvKCksW25SLExsXT1DYShjbyksW2xSLGFSXT1DYShjbyk7ZnVuY3Rpb24gVmcoYSl7Y29uc3R7X19zY29wZVNlbGVjdDpvLGNoaWxkcmVuOnUsb3BlbjppLGRlZmF1bHRPcGVuOnMsb25PcGVuQ2hhbmdlOmYsdmFsdWU6ZCxkZWZhdWx0VmFsdWU6cCxvblZhbHVlQ2hhbmdlOnksZGlyOmIsbmFtZTp4LGF1dG9Db21wbGV0ZTpnLGRpc2FibGVkOkMscmVxdWlyZWQ6dyxmb3JtOlIsaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6RX09YSxUPWxmKG8pLFtPLEFdPXYudXNlU3RhdGUobnVsbCksW04sTV09di51c2VTdGF0ZShudWxsKSxbWSxIXT12LnVzZVN0YXRlKCExKSxVPVFhKGIpLFtCLEpdPUVuKHtwcm9wOmksZGVmYXVsdFByb3A6cz8/ITEsb25DaGFuZ2U6ZixjYWxsZXI6Y299KSxbVyxuZV09RW4oe3Byb3A6ZCxkZWZhdWx0UHJvcDpwLG9uQ2hhbmdlOnksY2FsbGVyOmNvfSksZWU9di51c2VSZWYobnVsbCksY2U9di51c2VSZWYoITEpLFttZSxoZV09di51c2VTdGF0ZShudWxsKSxQPVZlKEs9PntoZSh7dmFsdWU6SyxoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjpjZS5jdXJyZW50fSksbmUoSyl9LCJoYW5kbGVVc2VyU2VsZWN0IiksJD12LnVzZVJlZihXKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IEs9Uj9PPy5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFIpOk8/LmZvcm07aWYoSyBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCl7Y29uc3QgYWU9VmUoKCk9Pm5lKCQuY3VycmVudCksInJlc2V0Iik7cmV0dXJuIEsuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXQiLGFlKSwoKT0+Sy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNldCIsYWUpfX0sW1IsTyxuZV0pO2NvbnN0IEY9Tz8hIVJ8fCEhTy5jbG9zZXN0KCJmb3JtIik6ITAsW3JlLHFdPXYudXNlU3RhdGUobmV3IFNldCkseGU9dGwoKSxqZT1BcnJheS5mcm9tKHJlKS5tYXAoSz0+Sy5wcm9wcy52YWx1ZSkuam9pbigiOyIpLFllPXYudXNlQ2FsbGJhY2soSz0+e3EoYWU9Pm5ldyBTZXQoYWUpLmFkZChLKSl9LFtdKSxEPXYudXNlQ2FsbGJhY2soSz0+e3EoYWU9Pntjb25zdCB5ZT1uZXcgU2V0KGFlKTtyZXR1cm4geWUuZGVsZXRlKEspLHllfSl9LFtdKSxYPXtyZXF1aXJlZDp3LHRyaWdnZXI6TyxvblRyaWdnZXJDaGFuZ2U6QSx2YWx1ZU5vZGU6TixvblZhbHVlTm9kZUNoYW5nZTpNLHZhbHVlTm9kZUhhc0NoaWxkcmVuOlksb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTpILGNvbnRlbnRJZDp4ZSx2YWx1ZTpXLG9uVmFsdWVDaGFuZ2U6bmUsaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb25SZWY6Y2UsdXNlclNlbGVjdGlvbjptZSxvblVzZXJTZWxlY3Q6UCxvcGVuOkIsb25PcGVuQ2hhbmdlOkosZGlyOlUsdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOmVlLGRpc2FibGVkOkMsbmFtZTp4LGF1dG9Db21wbGV0ZTpnLGZvcm06UixuYXRpdmVPcHRpb25zOnJlLG5hdGl2ZVNlbGVjdEtleTpqZSxpc0Zvcm1Db250cm9sOkZ9O3JldHVybiBtLmpzeCh3cyx7Li4uVCxjaGlsZHJlbjptLmpzeChuUix7c2NvcGU6bywuLi5YLGNoaWxkcmVuOm0uanN4KEtpLlByb3ZpZGVyLHtzY29wZTpvLGNoaWxkcmVuOm0uanN4KGxSLHtzY29wZTpvLG9uTmF0aXZlT3B0aW9uQWRkOlllLG9uTmF0aXZlT3B0aW9uUmVtb3ZlOkQsY2hpbGRyZW46UWcoRSk/RShYKTp1fSl9KX0pfSl9VmUoVmcsIlNlbGVjdFByb3ZpZGVyIik7dmFyIG9SPVZlKGE9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om8sY2hpbGRyZW46dSwuLi5pfT1hO3JldHVybiBtLmpzeChWZyx7X19zY29wZVNlbGVjdDpvLC4uLmksaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6KHtpc0Zvcm1Db250cm9sOnN9KT0+bS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOlt1LHM/bS5qc3goTlIse19fc2NvcGVTZWxlY3Q6b30pOm51bGxdfSl9KX0sIlNlbGVjdCIpLHJSPSJTZWxlY3RUcmlnZ2VyIixpUj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksZGlzYWJsZWQ6cz0hMSwuLi5mfT1vLGQ9bGYoaSkscD1MbChyUixpKSx5PXAuZGlzYWJsZWR8fHMsYj1FZSh1LHAub25UcmlnZ2VyQ2hhbmdlKSx4PW5mKGkpLGc9di51c2VSZWYoInRvdWNoIiksW0MsdyxSXT1vZihUPT57Y29uc3QgTz14KCkuZmlsdGVyKE09PiFNLmRpc2FibGVkKSxBPU8uZmluZChNPT5NLnZhbHVlPT09cC52YWx1ZSksTj1yZihPLFQsQSk7TiE9PXZvaWQgMCYmcC5vblVzZXJTZWxlY3QoTi52YWx1ZSl9KSxFPVZlKFQ9Pnt5fHwocC5vbk9wZW5DaGFuZ2UoITApLFIoKSksVCYmKHAudHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ9e3g6TWF0aC5yb3VuZChULnBhZ2VYKSx5Ok1hdGgucm91bmQoVC5wYWdlWSl9KX0sImhhbmRsZU9wZW4iKTtyZXR1cm4gbS5qc3goRXMse2FzQ2hpbGQ6ITAsLi4uZCxjaGlsZHJlbjptLmpzeChDZS5idXR0b24se3R5cGU6ImJ1dHRvbiIscm9sZToiY29tYm9ib3giLCJhcmlhLWNvbnRyb2xzIjpwLm9wZW4/cC5jb250ZW50SWQ6dm9pZCAwLCJhcmlhLWV4cGFuZGVkIjpwLm9wZW4sImFyaWEtcmVxdWlyZWQiOnAucmVxdWlyZWQsImFyaWEtYXV0b2NvbXBsZXRlIjoibm9uZSIsZGlyOnAuZGlyLCJkYXRhLXN0YXRlIjpwLm9wZW4/Im9wZW4iOiJjbG9zZWQiLGRpc2FibGVkOnksImRhdGEtZGlzYWJsZWQiOnk/IiI6dm9pZCAwLCJkYXRhLXBsYWNlaG9sZGVyIjpwcihwLnZhbHVlKT8iIjp2b2lkIDAsLi4uZixyZWY6YixvbkNsaWNrOnVlKGYub25DbGljayxUPT57VC5jdXJyZW50VGFyZ2V0LmZvY3VzKCksZy5jdXJyZW50IT09Im1vdXNlIiYmRShUKX0pLG9uUG9pbnRlckRvd246dWUoZi5vblBvaW50ZXJEb3duLFQ9PntnLmN1cnJlbnQ9VC5wb2ludGVyVHlwZTtjb25zdCBPPVQudGFyZ2V0O08uaGFzUG9pbnRlckNhcHR1cmUoVC5wb2ludGVySWQpJiZPLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShULnBvaW50ZXJJZCksVC5idXR0b249PT0wJiZULmN0cmxLZXk9PT0hMSYmVC5wb2ludGVyVHlwZT09PSJtb3VzZSImJihFKFQpLFQucHJldmVudERlZmF1bHQoKSl9KSxvbktleURvd246dWUoZi5vbktleURvd24sVD0+e2NvbnN0IE89Qy5jdXJyZW50IT09IiI7IShULmN0cmxLZXl8fFQuYWx0S2V5fHxULm1ldGFLZXkpJiZULmtleS5sZW5ndGg9PT0xJiYocC5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZi5jdXJyZW50PVQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSx3KFQua2V5KSksIShPJiZULmtleT09PSIgIikmJlcyLmluY2x1ZGVzKFQua2V5KSYmKEUoKSxULnByZXZlbnREZWZhdWx0KCkpfSl9KX0pfSwiU2VsZWN0VHJpZ2dlciIpKSxjUj0iU2VsZWN0VmFsdWUiLHVSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVTZWxlY3Q6aSxjbGFzc05hbWU6cyxzdHlsZTpmLGNoaWxkcmVuOmQscGxhY2Vob2xkZXI6cD0iIiwuLi55fT1vLGI9TGwoY1IsaSkse29uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2U6eH09YixnPWQhPT12b2lkIDAsQz1FZSh1LGIub25WYWx1ZU5vZGVDaGFuZ2UpO250KCgpPT57eChnKX0sW3gsZ10pO2NvbnN0IHc9cHIoYi52YWx1ZSk7cmV0dXJuIG0uanN4KENlLnNwYW4sey4uLnksYXNDaGlsZDp3PyExOnkuYXNDaGlsZCxyZWY6QyxzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOm0uanN4KHYuRnJhZ21lbnQse2NoaWxkcmVuOnc/cDpkfSx3PyJwbGFjZWhvbGRlciI6InZhbHVlIil9KX0sIlNlbGVjdFZhbHVlIikpLHNSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVTZWxlY3Q6aSxjaGlsZHJlbjpzLC4uLmZ9PW87cmV0dXJuIG0uanN4KENlLnNwYW4seyJhcmlhLWhpZGRlbiI6ITAsLi4uZixyZWY6dSxjaGlsZHJlbjpzfHwi4pa8In0pfSwiU2VsZWN0SWNvbiIpKSxmUj0iU2VsZWN0UG9ydGFsIixbZFIsbVJdPUNhKGZSLHtmb3JjZU1vdW50OnZvaWQgMH0pLGhSPVZlKGE9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om8sZm9yY2VNb3VudDp1LC4uLml9PWE7cmV0dXJuIG0uanN4KGRSLHtzY29wZTphLl9fc2NvcGVTZWxlY3QsZm9yY2VNb3VudDp1LGNoaWxkcmVuOm0uanN4KHNyLHthc0NoaWxkOiEwLC4uLml9KX0pfSwiU2VsZWN0UG9ydGFsIiksVGE9IlNlbGVjdENvbnRlbnQiLHBSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0IGk9bVIoVGEsby5fX3Njb3BlU2VsZWN0KSx7Zm9yY2VNb3VudDpzPWkuZm9yY2VNb3VudCwuLi5mfT1vLGQ9TGwoVGEsby5fX3Njb3BlU2VsZWN0KSxbcCx5XT12LnVzZVN0YXRlKCk7cmV0dXJuIG50KCgpPT57eShuZXcgRG9jdW1lbnRGcmFnbWVudCl9LFtdKSxtLmpzeChtbix7cHJlc2VudDpzfHxkLm9wZW4sY2hpbGRyZW46KHtwcmVzZW50OmJ9KT0+Yj9tLmpzeCh5Uix7Li4uZixyZWY6dX0pOm0uanN4KHZSLHsuLi5mLGZyYWdtZW50OnB9KX0pfSwiU2VsZWN0Q29udGVudCIpKSx2Uj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksY2hpbGRyZW46cyxmcmFnbWVudDpmfT1vO3JldHVybiBmP1phLmNyZWF0ZVBvcnRhbChtLmpzeChZZyx7c2NvcGU6aSxjaGlsZHJlbjptLmpzeChLaS5TbG90LHtzY29wZTppLGNoaWxkcmVuOm0uanN4KCJkaXYiLHtyZWY6dSxjaGlsZHJlbjpzfSl9KX0pLGYpOm51bGx9LCJTZWxlY3RDb250ZW50RnJhZ21lbnQiKSksUm49MTAsW1lnLFFpXT1DYShUYSksZ1I9TG4oIlNlbGVjdENvbnRlbnQuUmVtb3ZlU2Nyb2xsIikseVI9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppfT1vLHtwb3NpdGlvbjpzPUdnLkl0ZW1BbGlnbmVkLG9uQ2xvc2VBdXRvRm9jdXM6ZixvbkVzY2FwZUtleURvd246ZCxvblBvaW50ZXJEb3duT3V0c2lkZTpwLHNpZGU6eSxzaWRlT2Zmc2V0OmIsYWxpZ246eCxhbGlnbk9mZnNldDpnLGFycm93UGFkZGluZzpDLGNvbGxpc2lvbkJvdW5kYXJ5OncsY29sbGlzaW9uUGFkZGluZzpSLHN0aWNreTpFLGhpZGVXaGVuRGV0YWNoZWQ6VCxhdm9pZENvbGxpc2lvbnM6TywuLi5BfT1vLE49TGwoVGEsaSksW00sWV09di51c2VTdGF0ZShudWxsKSxbSCxVXT12LnVzZVN0YXRlKG51bGwpLEI9RWUodSxZKSxbSixXXT12LnVzZVN0YXRlKG51bGwpLFtuZSxlZV09di51c2VTdGF0ZShudWxsKSxjZT1uZihpKSxbbWUsaGVdPXYudXNlU3RhdGUoITEpLFA9di51c2VSZWYoITEpLCQ9di51c2VSZWYoITEpLEY9di51c2VSZWYoITEpO3YudXNlRWZmZWN0KCgpPT57aWYoTSlyZXR1cm4gTHMoTSl9LFtNXSkscnIoKTtjb25zdCByZT12LnVzZUNhbGxiYWNrKGxlPT57Y29uc3RbdGUsLi4uaWVdPWNlKCkubWFwKFJlPT5SZS5yZWYuY3VycmVudCksW2JlXT1pZS5zbGljZSgtMSksd2U9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgUmUgb2YgbGUpaWYoUmU9PT13ZXx8KFJlPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QifSksUmU9PT10ZSYmSCYmKEguc2Nyb2xsVG9wPTApLFJlPT09YmUmJkgmJihILnNjcm9sbFRvcD1ILnNjcm9sbEhlaWdodCksUmU/LmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXdlKSlyZXR1cm59LFtjZSxIXSkscT12LnVzZUNhbGxiYWNrKCgpPT5yZShbSixNXSksW3JlLEosTV0pO3YudXNlRWZmZWN0KCgpPT57bWUmJnEoKX0sW21lLHFdKTtjb25zdHtvbk9wZW5DaGFuZ2U6eGUsdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOmplfT1OO3YudXNlRWZmZWN0KCgpPT57aWYoTSl7bGV0IGxlPXt4OjAseTowfTtjb25zdCB0ZT1WZShiZT0+e2xlPXt4Ok1hdGguYWJzKE1hdGgucm91bmQoYmUucGFnZVgpLShqZS5jdXJyZW50Py54Pz8wKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKGJlLnBhZ2VZKS0oamUuY3VycmVudD8ueT8/MCkpfX0sImhhbmRsZVBvaW50ZXJNb3ZlIiksaWU9VmUoYmU9PntsZS54PD0xMCYmbGUueTw9MTA/YmUucHJldmVudERlZmF1bHQoKTpiZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyhNKXx8eGUoITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0ZSksamUuY3VycmVudD1udWxsfSwiaGFuZGxlUG9pbnRlclVwIik7cmV0dXJuIGplLmN1cnJlbnQhPT1udWxsJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGllLHtjYXB0dXJlOiEwLG9uY2U6ITB9KSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsdGUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsaWUse2NhcHR1cmU6ITB9KX19fSxbTSx4ZSxqZV0pLHYudXNlRWZmZWN0KCgpPT57Y29uc3QgbGU9VmUoKCk9PnhlKCExKSwiY2xvc2UiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGxlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixsZSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsbGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGxlKX19LFt4ZV0pO2NvbnN0W1llLERdPW9mKGxlPT57Y29uc3QgdGU9Y2UoKS5maWx0ZXIod2U9PiF3ZS5kaXNhYmxlZCksaWU9dGUuZmluZCh3ZT0+d2UucmVmLmN1cnJlbnQ9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSxiZT1yZih0ZSxsZSxpZSk7YmUmJnNldFRpbWVvdXQoKCk9PmJlLnJlZi5jdXJyZW50Py5mb2N1cygpKX0pLFg9di51c2VDYWxsYmFjaygobGUsdGUsaWUpPT57Y29uc3QgYmU9ISQuY3VycmVudDtiZSYmKCQuY3VycmVudD0hMCk7Y29uc3Qgd2U9IVAuY3VycmVudCYmIWllO04udmFsdWUhPT12b2lkIDAmJk4udmFsdWU9PT10ZXx8d2U/KFcobGUpLHdlJiYoUC5jdXJyZW50PSEwKSk6YmUmJlcobGUpfSxbTi52YWx1ZV0pLEs9di51c2VDYWxsYmFjaygoKT0+TT8uZm9jdXMoKSxbTV0pLGFlPXYudXNlQ2FsbGJhY2soKGxlLHRlLGllKT0+e2lmKCFsZSlyZXR1cm47Y29uc3QgYmU9IUYuY3VycmVudDtiZSYmKEYuY3VycmVudD0hMCk7Y29uc3Qgd2U9IVAuY3VycmVudCYmIWllOyhOLnZhbHVlIT09dm9pZCAwJiZOLnZhbHVlPT09dGV8fHdlfHxiZSkmJmVlKGxlKX0sW04udmFsdWVdKSx5ZT1zPT09R2cuUG9wcGVyP3FnOmJSLHNlPXllPT09cWc/e3NpZGU6eSxzaWRlT2Zmc2V0OmIsYWxpZ246eCxhbGlnbk9mZnNldDpnLGFycm93UGFkZGluZzpDLGNvbGxpc2lvbkJvdW5kYXJ5OncsY29sbGlzaW9uUGFkZGluZzpSLHN0aWNreTpFLGhpZGVXaGVuRGV0YWNoZWQ6VCxhdm9pZENvbGxpc2lvbnM6T306e307cmV0dXJuIG0uanN4KFlnLHtzY29wZTppLGNvbnRlbnQ6TSx2aWV3cG9ydDpILG9uVmlld3BvcnRDaGFuZ2U6VSxpdGVtUmVmQ2FsbGJhY2s6WCxzZWxlY3RlZEl0ZW06Sixvbkl0ZW1MZWF2ZTpLLGl0ZW1UZXh0UmVmQ2FsbGJhY2s6YWUsZm9jdXNTZWxlY3RlZEl0ZW06cSxzZWxlY3RlZEl0ZW1UZXh0Om5lLHBvc2l0aW9uOnMsaXNQb3NpdGlvbmVkOm1lLHNlYXJjaFJlZjpZZSxjaGlsZHJlbjptLmpzeChHaSx7YXM6Z1IsYWxsb3dQaW5jaFpvb206ITAsY2hpbGRyZW46bS5qc3gocnMse2FzQ2hpbGQ6ITAsdHJhcHBlZDpOLm9wZW4sb25Nb3VudEF1dG9Gb2N1czpsZT0+e2xlLnByZXZlbnREZWZhdWx0KCl9LG9uVW5tb3VudEF1dG9Gb2N1czp1ZShmLGxlPT57Ti50cmlnZ2VyPy5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGxlLnByZXZlbnREZWZhdWx0KCl9KSxjaGlsZHJlbjptLmpzeChvcix7YXNDaGlsZDohMCxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITAsb25Fc2NhcGVLZXlEb3duOmQsb25Qb2ludGVyRG93bk91dHNpZGU6cCxvbkZvY3VzT3V0c2lkZTpsZT0+bGUucHJldmVudERlZmF1bHQoKSxvbkRpc21pc3M6KCk9Pk4ub25PcGVuQ2hhbmdlKCExKSxjaGlsZHJlbjptLmpzeCh5ZSx7cm9sZToibGlzdGJveCIsaWQ6Ti5jb250ZW50SWQsImRhdGEtc3RhdGUiOk4ub3Blbj8ib3BlbiI6ImNsb3NlZCIsZGlyOk4uZGlyLG9uQ29udGV4dE1lbnU6bGU9PmxlLnByZXZlbnREZWZhdWx0KCksLi4uQSwuLi5zZSxvblBsYWNlZDooKT0+aGUoITApLHJlZjpCLHN0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG91dGxpbmU6Im5vbmUiLC4uLkEuc3R5bGV9LG9uS2V5RG93bjp1ZShBLm9uS2V5RG93bixsZT0+e2NvbnN0IHRlPWxlLmN0cmxLZXl8fGxlLmFsdEtleXx8bGUubWV0YUtleTtpZihsZS5rZXk9PT0iVGFiIiYmbGUucHJldmVudERlZmF1bHQoKSwhdGUmJmxlLmtleS5sZW5ndGg9PT0xJiZEKGxlLmtleSksWyJBcnJvd1VwIiwiQXJyb3dEb3duIiwiSG9tZSIsIkVuZCJdLmluY2x1ZGVzKGxlLmtleSkpe2xldCBiZT1jZSgpLmZpbHRlcih3ZT0+IXdlLmRpc2FibGVkKS5tYXAod2U9PndlLnJlZi5jdXJyZW50KTtpZihbIkFycm93VXAiLCJFbmQiXS5pbmNsdWRlcyhsZS5rZXkpJiYoYmU9YmUuc2xpY2UoKS5yZXZlcnNlKCkpLFsiQXJyb3dVcCIsIkFycm93RG93biJdLmluY2x1ZGVzKGxlLmtleSkpe2NvbnN0IHdlPWxlLnRhcmdldCxSZT1iZS5pbmRleE9mKHdlKTtiZT1iZS5zbGljZShSZSsxKX1zZXRUaW1lb3V0KCgpPT5yZShiZSkpLGxlLnByZXZlbnREZWZhdWx0KCl9fSl9KX0pfSl9KX0pfSwiU2VsZWN0Q29udGVudEltcGwiKSksYlI9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppLG9uUGxhY2VkOnMsLi4uZn09byxkPUxsKFRhLGkpLHA9UWkoVGEsaSksW3ksYl09di51c2VTdGF0ZShudWxsKSxbeCxnXT12LnVzZVN0YXRlKG51bGwpLEM9RWUodSxnKSx3PW5mKGkpLFI9di51c2VSZWYoITEpLEU9di51c2VSZWYoITApLHt2aWV3cG9ydDpULHNlbGVjdGVkSXRlbTpPLHNlbGVjdGVkSXRlbVRleHQ6QSxmb2N1c1NlbGVjdGVkSXRlbTpOfT1wLE09di51c2VDYWxsYmFjaygoKT0+e2lmKGQudHJpZ2dlciYmZC52YWx1ZU5vZGUmJnkmJngmJlQmJk8mJkEpe2NvbnN0IEI9ZC50cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEo9eC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxXPWQudmFsdWVOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG5lPUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZC5kaXIhPT1KMi5SVEwpe2NvbnN0IGllPW5lLmxlZnQtSi5sZWZ0LGJlPVcubGVmdC1pZSx3ZT1CLmxlZnQtYmUsUmU9Qi53aWR0aCt3ZSxxdD1NYXRoLm1heChSZSxKLndpZHRoKSxpdD13aW5kb3cuaW5uZXJXaWR0aC1SbixQZT10ZihiZSxbUm4sTWF0aC5tYXgoUm4saXQtcXQpXSk7eS5zdHlsZS5taW5XaWR0aD1SZSsicHgiLHkuc3R5bGUubGVmdD1QZSsicHgifWVsc2V7Y29uc3QgaWU9Si5yaWdodC1uZS5yaWdodCxiZT13aW5kb3cuaW5uZXJXaWR0aC1XLnJpZ2h0LWllLHdlPXdpbmRvdy5pbm5lcldpZHRoLUIucmlnaHQtYmUsUmU9Qi53aWR0aCt3ZSxxdD1NYXRoLm1heChSZSxKLndpZHRoKSxpdD13aW5kb3cuaW5uZXJXaWR0aC1SbixQZT10ZihiZSxbUm4sTWF0aC5tYXgoUm4saXQtcXQpXSk7eS5zdHlsZS5taW5XaWR0aD1SZSsicHgiLHkuc3R5bGUucmlnaHQ9UGUrInB4In1jb25zdCBlZT13KCksY2U9d2luZG93LmlubmVySGVpZ2h0LVJuKjIsbWU9VC5zY3JvbGxIZWlnaHQsaGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCksUD1wYXJzZUludChoZS5ib3JkZXJUb3BXaWR0aCwxMCksJD1wYXJzZUludChoZS5wYWRkaW5nVG9wLDEwKSxGPXBhcnNlSW50KGhlLmJvcmRlckJvdHRvbVdpZHRoLDEwKSxyZT1wYXJzZUludChoZS5wYWRkaW5nQm90dG9tLDEwKSxxPVArJCttZStyZStGLHhlPU1hdGgubWluKE8ub2Zmc2V0SGVpZ2h0KjUscSksamU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoVCksWWU9cGFyc2VJbnQoamUucGFkZGluZ1RvcCwxMCksRD1wYXJzZUludChqZS5wYWRkaW5nQm90dG9tLDEwKSxYPUIudG9wK0IuaGVpZ2h0LzItUm4sSz1jZS1YLGFlPU8ub2Zmc2V0SGVpZ2h0LzIseWU9Ty5vZmZzZXRUb3ArYWUsc2U9UCskK3llLGxlPXEtc2U7aWYoc2U8PVgpe2NvbnN0IGllPWVlLmxlbmd0aD4wJiZPPT09ZWVbZWUubGVuZ3RoLTFdLnJlZi5jdXJyZW50O3kuc3R5bGUuYm90dG9tPSIwcHgiO2NvbnN0IGJlPXguY2xpZW50SGVpZ2h0LVQub2Zmc2V0VG9wLVQub2Zmc2V0SGVpZ2h0LHdlPU1hdGgubWF4KEssYWUrKGllP0Q6MCkrYmUrRiksUmU9c2Urd2U7eS5zdHlsZS5oZWlnaHQ9UmUrInB4In1lbHNle2NvbnN0IGllPWVlLmxlbmd0aD4wJiZPPT09ZWVbMF0ucmVmLmN1cnJlbnQ7eS5zdHlsZS50b3A9IjBweCI7Y29uc3Qgd2U9TWF0aC5tYXgoWCxQK1Qub2Zmc2V0VG9wKyhpZT9ZZTowKSthZSkrbGU7eS5zdHlsZS5oZWlnaHQ9d2UrInB4IixULnNjcm9sbFRvcD1zZS1YK1Qub2Zmc2V0VG9wfXkuc3R5bGUubWFyZ2luPWAke1JufXB4IDBgLHkuc3R5bGUubWluSGVpZ2h0PXhlKyJweCIseS5zdHlsZS5tYXhIZWlnaHQ9Y2UrInB4IixzPy4oKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PlIuY3VycmVudD0hMCl9fSxbdyxkLnRyaWdnZXIsZC52YWx1ZU5vZGUseSx4LFQsTyxBLGQuZGlyLHNdKTtudCgoKT0+TSgpLFtNXSk7Y29uc3RbWSxIXT12LnVzZVN0YXRlKCk7bnQoKCk9Pnt4JiZIKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLnpJbmRleCl9LFt4XSk7Y29uc3QgVT12LnVzZUNhbGxiYWNrKEI9PntCJiZFLmN1cnJlbnQ9PT0hMCYmKE0oKSxOPy4oKSxFLmN1cnJlbnQ9ITEpfSxbTSxOXSk7cmV0dXJuIG0uanN4KHhSLHtzY29wZTppLGNvbnRlbnRXcmFwcGVyOnksc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6UixvblNjcm9sbEJ1dHRvbkNoYW5nZTpVLGNoaWxkcmVuOm0uanN4KCJkaXYiLHtyZWY6YixzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixwb3NpdGlvbjoiZml4ZWQiLHpJbmRleDpZfSxjaGlsZHJlbjptLmpzeChDZS5kaXYsey4uLmYscmVmOkMsc3R5bGU6e2JveFNpemluZzoiYm9yZGVyLWJveCIsbWF4SGVpZ2h0OiIxMDAlIiwuLi5mLnN0eWxlfX0pfSl9KX0sIlNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb24iKSkscWc9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppLGFsaWduOnM9InN0YXJ0Iixjb2xsaXNpb25QYWRkaW5nOmY9Um4sLi4uZH09byxwPWxmKGkpO3JldHVybiBtLmpzeChScyx7Li4ucCwuLi5kLHJlZjp1LGFsaWduOnMsY29sbGlzaW9uUGFkZGluZzpmLHN0eWxlOntib3hTaXppbmc6ImJvcmRlci1ib3giLC4uLmQuc3R5bGUsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbiI6InZhcigtLXJhZGl4LXBvcHBlci10cmFuc2Zvcm0tb3JpZ2luKSIsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCkiLCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCkiLCItLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCkiLCItLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0KSJ9fSl9LCJTZWxlY3RQb3BwZXJQb3NpdGlvbiIpKSxbeFIsU1JdPUNhKFRhLHt9KSxYZz0iU2VsZWN0Vmlld3BvcnQiLENSPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVTZWxlY3Q6aSxub25jZTpzLC4uLmZ9PW8sZD1RaShYZyxpKSxwPVNSKFhnLGkpLHk9RWUodSxkLm9uVmlld3BvcnRDaGFuZ2UpLGI9di51c2VSZWYoMCk7cmV0dXJuIG0uanN4cyhtLkZyYWdtZW50LHtjaGlsZHJlbjpbbS5qc3goInN0eWxlIix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDoiW2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XXtzY3JvbGxiYXItd2lkdGg6bm9uZTstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt9W2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfSJ9LG5vbmNlOnN9KSxtLmpzeChLaS5TbG90LHtzY29wZTppLGNoaWxkcmVuOm0uanN4KENlLmRpdix7ImRhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0IjoiIixyb2xlOiJwcmVzZW50YXRpb24iLC4uLmYscmVmOnksc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG92ZXJmbG93OiJoaWRkZW4gYXV0byIsLi4uZi5zdHlsZX0sb25TY3JvbGw6dWUoZi5vblNjcm9sbCx4PT57Y29uc3QgZz14LmN1cnJlbnRUYXJnZXQse2NvbnRlbnRXcmFwcGVyOkMsc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6d309cDtpZih3Py5jdXJyZW50JiZDKXtjb25zdCBSPU1hdGguYWJzKGIuY3VycmVudC1nLnNjcm9sbFRvcCk7aWYoUj4wKXtjb25zdCBFPXdpbmRvdy5pbm5lckhlaWdodC1SbioyLFQ9cGFyc2VGbG9hdChDLnN0eWxlLm1pbkhlaWdodCksTz1wYXJzZUZsb2F0KEMuc3R5bGUuaGVpZ2h0KSxBPU1hdGgubWF4KFQsTyk7aWYoQTxFKXtjb25zdCBOPUErUixNPU1hdGgubWluKEUsTiksWT1OLU07Qy5zdHlsZS5oZWlnaHQ9TSsicHgiLEMuc3R5bGUuYm90dG9tPT09IjBweCImJihnLnNjcm9sbFRvcD1ZPjA/WTowLEMuc3R5bGUuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIil9fX1iLmN1cnJlbnQ9Zy5zY3JvbGxUb3B9KX0pfSldfSl9LCJTZWxlY3RWaWV3cG9ydCIpKSxUUj0iU2VsZWN0R3JvdXAiLFtsaixhal09Q2EoVFIpLGFmPSJTZWxlY3RJdGVtIixbd1IsS2ddPUNhKGFmKSxFUj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksdmFsdWU6cyxkaXNhYmxlZDpmPSExLHRleHRWYWx1ZTpkLC4uLnB9PW8seT1MbChhZixpKSxiPVFpKGFmLGkpLHg9eS52YWx1ZT09PXMsW2csQ109di51c2VTdGF0ZShkPz8iIiksW3csUl09di51c2VTdGF0ZSghMSksRT16dChNPT5iLml0ZW1SZWZDYWxsYmFjaz8uKE0scyxmKSksVD1FZSh1LEUpLE89dGwoKSxBPXYudXNlUmVmKCJ0b3VjaCIpO2Z1bmN0aW9uIE4oTSl7eS5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZi5jdXJyZW50PU0uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSx5Lm9uVXNlclNlbGVjdChzKSx5Lm9uT3BlbkNoYW5nZSghMSl9cmV0dXJuIFZlKE4sImhhbmRsZVNlbGVjdCIpLG0uanN4KHdSLHtzY29wZTppLHZhbHVlOnMsZGlzYWJsZWQ6Zix0ZXh0SWQ6Tyxpc1NlbGVjdGVkOngsb25JdGVtVGV4dENoYW5nZTp2LnVzZUNhbGxiYWNrKE09PntDKFk9Pll8fChNPy50ZXh0Q29udGVudD8/IiIpLnRyaW0oKSl9LFtdKSxjaGlsZHJlbjptLmpzeChLaS5JdGVtU2xvdCx7c2NvcGU6aSx2YWx1ZTpzLGRpc2FibGVkOmYsdGV4dFZhbHVlOmcsY2hpbGRyZW46bS5qc3goQ2UuZGl2LHtyb2xlOiJvcHRpb24iLCJhcmlhLWxhYmVsbGVkYnkiOk8sImRhdGEtaGlnaGxpZ2h0ZWQiOnc/IiI6dm9pZCAwLCJhcmlhLXNlbGVjdGVkIjp4JiZ3LCJkYXRhLXN0YXRlIjp4PyJjaGVja2VkIjoidW5jaGVja2VkIiwiYXJpYS1kaXNhYmxlZCI6Znx8dm9pZCAwLCJkYXRhLWRpc2FibGVkIjpmPyIiOnZvaWQgMCx0YWJJbmRleDpmP3ZvaWQgMDotMSwuLi5wLHJlZjpULG9uRm9jdXM6dWUocC5vbkZvY3VzLCgpPT5SKCEwKSksb25CbHVyOnVlKHAub25CbHVyLCgpPT5SKCExKSksb25DbGljazp1ZShwLm9uQ2xpY2ssTT0+e2Z8fEEuY3VycmVudCE9PSJtb3VzZSImJk4oTSl9KSxvblBvaW50ZXJVcDp1ZShwLm9uUG9pbnRlclVwLE09PntmfHxBLmN1cnJlbnQ9PT0ibW91c2UiJiZOKE0pfSksb25Qb2ludGVyRG93bjp1ZShwLm9uUG9pbnRlckRvd24sTT0+e0EuY3VycmVudD1NLnBvaW50ZXJUeXBlfSksb25Qb2ludGVyTW92ZTp1ZShwLm9uUG9pbnRlck1vdmUsTT0+e0EuY3VycmVudD1NLnBvaW50ZXJUeXBlLGY/Yi5vbkl0ZW1MZWF2ZT8uKCk6QS5jdXJyZW50PT09Im1vdXNlIiYmTS5jdXJyZW50VGFyZ2V0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9KSxvblBvaW50ZXJMZWF2ZTp1ZShwLm9uUG9pbnRlckxlYXZlLE09PntNLmN1cnJlbnRUYXJnZXQ9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50JiZiLm9uSXRlbUxlYXZlPy4oKX0pLG9uS2V5RG93bjp1ZShwLm9uS2V5RG93bixNPT57Znx8TS50YXJnZXQhPT1NLmN1cnJlbnRUYXJnZXR8fGIuc2VhcmNoUmVmPy5jdXJyZW50IT09IiImJk0ua2V5PT09IiAifHwoZVIuaW5jbHVkZXMoTS5rZXkpJiZOKE0pLE0ua2V5PT09IiAiJiZNLnByZXZlbnREZWZhdWx0KCkpfSl9KX0pfSl9LCJTZWxlY3RJdGVtIikpLFppPSJTZWxlY3RJdGVtVGV4dCIsUlI9di5mb3J3YXJkUmVmKFZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVNlbGVjdDppLGNsYXNzTmFtZTpzLHN0eWxlOmYsLi4uZH09byxwPUxsKFppLGkpLHk9UWkoWmksaSksYj1LZyhaaSxpKSx4PWFSKFppLGkpLFtnLENdPXYudXNlU3RhdGUobnVsbCksdz16dChOPT55Lml0ZW1UZXh0UmVmQ2FsbGJhY2s/LihOLGIudmFsdWUsYi5kaXNhYmxlZCkpLFI9RWUodSxDLGIub25JdGVtVGV4dENoYW5nZSx3KSxFPWc/LnRleHRDb250ZW50LFQ9di51c2VNZW1vKCgpPT5tLmpzeCgib3B0aW9uIix7dmFsdWU6Yi52YWx1ZSxkaXNhYmxlZDpiLmRpc2FibGVkLGNoaWxkcmVuOkV9LGIudmFsdWUpLFtiLmRpc2FibGVkLGIudmFsdWUsRV0pLHtvbk5hdGl2ZU9wdGlvbkFkZDpPLG9uTmF0aXZlT3B0aW9uUmVtb3ZlOkF9PXg7cmV0dXJuIG50KCgpPT4oTyhUKSwoKT0+QShUKSksW08sQSxUXSksbS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOlttLmpzeChDZS5zcGFuLHtpZDpiLnRleHRJZCwuLi5kLHJlZjpSfSksYi5pc1NlbGVjdGVkJiZwLnZhbHVlTm9kZSYmIXAudmFsdWVOb2RlSGFzQ2hpbGRyZW4mJiFwcihwLnZhbHVlKT9aYS5jcmVhdGVQb3J0YWwoZC5jaGlsZHJlbixwLnZhbHVlTm9kZSk6bnVsbF19KX0sIlNlbGVjdEl0ZW1UZXh0IikpLF9SPSJTZWxlY3RJdGVtSW5kaWNhdG9yIixPUj12LmZvcndhcmRSZWYoVmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU2VsZWN0OmksLi4uc309bztyZXR1cm4gS2coX1IsaSkuaXNTZWxlY3RlZD9tLmpzeChDZS5zcGFuLHsiYXJpYS1oaWRkZW4iOiEwLC4uLnMscmVmOnV9KTpudWxsfSwiU2VsZWN0SXRlbUluZGljYXRvciIpKSxBUj0iU2VsZWN0QnViYmxlSW5wdXQiLE5SPXYuZm9yd2FyZFJlZihWZShmdW5jdGlvbih7X19zY29wZVNlbGVjdDpvLC4uLnV9LGkpe2NvbnN0IHM9TGwoQVIsbykse3ZhbHVlOmYsb25WYWx1ZUNoYW5nZTpkLHJlcXVpcmVkOnAsZGlzYWJsZWQ6eSxuYW1lOmIsYXV0b0NvbXBsZXRlOngsZm9ybTpnLHVzZXJTZWxlY3Rpb246Q309cyx7bmF0aXZlT3B0aW9uczp3LG5hdGl2ZVNlbGVjdEtleTpSfT1zLEU9di51c2VSZWYobnVsbCksVD1FZShpLEUpLE89Zj8/IiIsQT12LnVzZVJlZihPKSxOPXYudXNlUmVmKEMpLE09di51c2VSZWYoITEpLFk9QXJyYXkuZnJvbSh3KS5zb21lKEg9PihILnByb3BzLnZhbHVlPz8iIik9PT0iIik7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgSD1FLmN1cnJlbnQ7aWYoIUgpcmV0dXJuO2NvbnN0IFU9d2luZG93LkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSxKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVSwidmFsdWUiKS5zZXQsVz1DIT09bnVsbCYmQyE9PU4uY3VycmVudDtOLmN1cnJlbnQ9Qztjb25zdCBuZT1BLmN1cnJlbnQhPT1PO0EuY3VycmVudD1PO2NvbnN0IGVlPVcmJm5lO2lmKFcmJiFuZSYmQy52YWx1ZSE9PU8mJiFDLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uJiZKKXtNLmN1cnJlbnQ9ITA7dHJ5e0ouY2FsbChILEMudmFsdWUpLEguZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImNoYW5nZSIse2J1YmJsZXM6ITB9KSl9ZmluYWxseXtNLmN1cnJlbnQ9ITEsSi5jYWxsKEgsTyl9cmV0dXJufWNvbnN0IGNlPWVlJiYhQy5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjtpZihuZSYmSil7Y29uc3QgbWU9bmV3IEV2ZW50KCJjaGFuZ2UiLHtidWJibGVzOmNlfSk7Si5jYWxsKEgsTyksSC5kaXNwYXRjaEV2ZW50KG1lKX19LFtPLENdKSxtLmpzeHMoQ2Uuc2VsZWN0LHsiYXJpYS1oaWRkZW4iOiEwLHJlcXVpcmVkOnAsdGFiSW5kZXg6LTEsbmFtZTpiLGF1dG9Db21wbGV0ZTp4LGRpc2FibGVkOnksZm9ybTpnLG9uQ2hhbmdlOkg9PntNLmN1cnJlbnR8fGQoSC50YXJnZXQudmFsdWUpfSwuLi51LHN0eWxlOnsuLi5BZywuLi51LnN0eWxlfSxyZWY6VCxkZWZhdWx0VmFsdWU6TyxjaGlsZHJlbjpbcHIoZikmJiFZP20uanN4KCJvcHRpb24iLHt2YWx1ZToiIn0pOm51bGwsQXJyYXkuZnJvbSh3KV19LFIpfSwiU2VsZWN0QnViYmxlSW5wdXQiKSk7ZnVuY3Rpb24gUWcoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifVZlKFFnLCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24gcHIoYSl7cmV0dXJuIGE9PT0iInx8YT09PXZvaWQgMH1WZShwciwic2hvdWxkU2hvd1BsYWNlaG9sZGVyIik7ZnVuY3Rpb24gb2YoYSl7Y29uc3Qgbz16dChhKSx1PXYudXNlUmVmKCIiKSxpPXYudXNlUmVmKDApLHM9di51c2VDYWxsYmFjayhkPT57Y29uc3QgcD11LmN1cnJlbnQrZDtvKHApO2Z1bmN0aW9uIHkoYil7dS5jdXJyZW50PWIsd2luZG93LmNsZWFyVGltZW91dChpLmN1cnJlbnQpLGIhPT0iIiYmKGkuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+eSgiIiksMWUzKSl9VmUoeSwidXBkYXRlU2VhcmNoIikseShwKX0sW29dKSxmPXYudXNlQ2FsbGJhY2soKCk9Pnt1LmN1cnJlbnQ9IiIsd2luZG93LmNsZWFyVGltZW91dChpLmN1cnJlbnQpfSxbXSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT4oKT0+d2luZG93LmNsZWFyVGltZW91dChpLmN1cnJlbnQpLFtdKSxbdSxzLGZdfVZlKG9mLCJ1c2VUeXBlYWhlYWRTZWFyY2giKTtmdW5jdGlvbiByZihhLG8sdSl7Y29uc3Qgcz1vLmxlbmd0aD4xJiZBcnJheS5mcm9tKG8pLmV2ZXJ5KGI9PmI9PT1vWzBdKT9vWzBdOm8sZj11P2EuaW5kZXhPZih1KTotMTtsZXQgZD1aZyhhLE1hdGgubWF4KGYsMCkpO3MubGVuZ3RoPT09MSYmKGQ9ZC5maWx0ZXIoYj0+YiE9PXUpKTtjb25zdCB5PWQuZmluZChiPT5iLnRleHRWYWx1ZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIHkhPT11P3k6dm9pZCAwfVZlKHJmLCJmaW5kTmV4dEl0ZW0iKTtmdW5jdGlvbiBaZyhhLG8pe3JldHVybiBhLm1hcCgodSxpKT0+YVsobytpKSVhLmxlbmd0aF0pfVZlKFpnLCJ3cmFwQXJyYXkiKTtmdW5jdGlvbiBEUih7bGFiZWw6YSxvcHRpb25zOm8sdmFsdWU6dSxvblZhbHVlQ2hhbmdlOmkscGxhY2Vob2xkZXI6cyxkaXNhYmxlZDpmLGlzSW52YWxpZDpkLGNsYXNzTmFtZTpwLGFyaWFMYWJlbDp5fSxiKXtjb25zdCB4PXYudXNlSWQoKTtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOlthP20uanN4KCJsYWJlbCIse2h0bWxGb3I6eCxjbGFzc05hbWU6InRleHQtc20gdGV4dC1sYXJrLW43MDAiLGNoaWxkcmVuOmF9KTpudWxsLG0uanN4cyhvUix7dmFsdWU6dSxvblZhbHVlQ2hhbmdlOmksZGlzYWJsZWQ6ZixjaGlsZHJlbjpbbS5qc3hzKGlSLHtyZWY6YixpZDp4LCJhcmlhLWxhYmVsIjp5LCJhcmlhLWludmFsaWQiOmR8fHZvaWQgMCxjbGFzc05hbWU6a2UoImZsZXggaC04IG1pbi1oLTggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWxhcmstbjMwMCBiZy1icmFuZC1wcmltYXJ5IHB4LTMgdGV4dC1zbSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgaG92ZXI6Ym9yZGVyLWJyYW5kLXNlY29uZGFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1bdmFyKC0tZmllbGQtYm9yZGVyLWZvY3VzKV0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJnLWxhcmstbjUwIGRpc2FibGVkOnRleHQtbGFyay1uNDAwIixkJiYiYm9yZGVyLWxhcmstZGFuZ2VyIixwKSxjaGlsZHJlbjpbbS5qc3godVIse3BsYWNlaG9sZGVyOnMsY2xhc3NOYW1lOiJkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1sYXJrLW42MDAifSksbS5qc3goc1Ise2FzQ2hpbGQ6ITAsY2hpbGRyZW46bS5qc3goX2gse2NsYXNzTmFtZToic2l6ZS00IHRleHQtbGFyay1uNTAwIn0pfSldfSksbS5qc3goaFIse2NoaWxkcmVuOm0uanN4KHBSLHtwb3NpdGlvbjoicG9wcGVyIixjbGFzc05hbWU6Im1heC1oLVttaW4oMjByZW0sNjB2aCldIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIG92ZXJmbG93LXktYXV0byByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItbGFyay1uMjAwIGJnLWJyYW5kLXByaW1hcnkgcC0xIHNoYWRvdy1bdmFyKC0tc2hhZG93LW92ZXJsYXkpXSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0IixjaGlsZHJlbjptLmpzeChDUix7Y2hpbGRyZW46by5tYXAoZz0+bS5qc3hzKEVSLHt2YWx1ZTpnLnZhbHVlLGRpc2FibGVkOmcuZGlzYWJsZWQsY2xhc3NOYW1lOiJmbGV4IGgtOCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbGcgcHgtMyB0ZXh0LXNtIGZvY3VzLXZpc2libGU6Zm9jdXMtcmluZyBkYXRhLVtkaXNhYmxlZF06Y3Vyc29yLW5vdC1hbGxvd2VkIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIGRhdGEtW2hpZ2hsaWdodGVkXTpiZy1sYXJrLW4xMDAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Zm9udC1tZWRpdW0gZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1icmFuZC1saW5rIixjaGlsZHJlbjpbbS5qc3goUlIse2NoaWxkcmVuOmcubGFiZWx9KSxtLmpzeChPUix7Y2hpbGRyZW46bS5qc3goR3Use2NsYXNzTmFtZToic2l6ZS00In0pfSldfSxnLnZhbHVlKSl9KX0pfSldfSldfSl9Y29uc3QgdW89di5mb3J3YXJkUmVmKERSKTt1by5kaXNwbGF5TmFtZT0iTGFya1NlbGVjdCI7dmFyIGpSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjbD0oYSxvKT0+alIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksY2Y9IkNoZWNrYm94IixbTVIsb2pdPU10KGNmKSxbelIsdWZdPU1SKGNmKTtmdW5jdGlvbiBGZyhhKXtjb25zdHtfX3Njb3BlQ2hlY2tib3g6byxjaGVja2VkOnUsY2hpbGRyZW46aSxkZWZhdWx0Q2hlY2tlZDpzLGRpc2FibGVkOmYsZm9ybTpkLG5hbWU6cCxvbkNoZWNrZWRDaGFuZ2U6eSxyZXF1aXJlZDpiLHZhbHVlOng9Im9uIixpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjpnfT1hLFtDLHddPUVuKHtwcm9wOnUsZGVmYXVsdFByb3A6cz8/ITEsb25DaGFuZ2U6eSxjYWxsZXI6Y2Z9KSxbUixFXT12LnVzZVN0YXRlKG51bGwpLFtULE9dPXYudXNlU3RhdGUobnVsbCksW0EsTl09di51c2VTdGF0ZShudWxsKSxNPVI/ISFkfHwhIVIuY2xvc2VzdCgiZm9ybSIpOiEwLFk9e2NoZWNrZWQ6QyxkaXNhYmxlZDpmLHNldENoZWNrZWQ6dyxjb250cm9sOlIsc2V0Q29udHJvbDpFLG5hbWU6cCxmb3JtOmQsdmFsdWU6eCx1c2VyQ2xpY2s6QSxvblVzZXJDbGljazpOLHJlcXVpcmVkOmIsZGVmYXVsdENoZWNrZWQ6aG4ocyk/ITE6cyxpc0Zvcm1Db250cm9sOk0sYnViYmxlSW5wdXQ6VCxzZXRCdWJibGVJbnB1dDpPfTtyZXR1cm4gbS5qc3goelIse3Njb3BlOm8sLi4uWSxjaGlsZHJlbjokZyhnKT9nKFkpOml9KX1jbChGZywiQ2hlY2tib3hQcm92aWRlciIpO3ZhciBrUj0iQ2hlY2tib3hUcmlnZ2VyIixMUj12LmZvcndhcmRSZWYoY2woZnVuY3Rpb24oe19fc2NvcGVDaGVja2JveDpvLG9uS2V5RG93bjp1LG9uQ2xpY2s6aSwuLi5zfSxmKXtjb25zdHtjb250cm9sOmQsdmFsdWU6cCxkaXNhYmxlZDp5LGNoZWNrZWQ6YixyZXF1aXJlZDp4LHNldENvbnRyb2w6ZyxzZXRDaGVja2VkOkMsb25Vc2VyQ2xpY2s6dyxpc0Zvcm1Db250cm9sOlIsYnViYmxlSW5wdXQ6RX09dWYoa1IsbyksVD1FZShmLGcpLE89di51c2VSZWYoYik7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgQT1kPy5mb3JtO2lmKEEpe2NvbnN0IE49Y2woKCk9PkMoTy5jdXJyZW50KSwicmVzZXQiKTtyZXR1cm4gQS5hZGRFdmVudExpc3RlbmVyKCJyZXNldCIsTiksKCk9PkEucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzZXQiLE4pfX0sW2QsQ10pLG0uanN4KENlLmJ1dHRvbix7dHlwZToiYnV0dG9uIixyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6aG4oYik/Im1peGVkIjpiLCJhcmlhLXJlcXVpcmVkIjp4LCJkYXRhLXN0YXRlIjpzZihiKSwiZGF0YS1kaXNhYmxlZCI6eT8iIjp2b2lkIDAsZGlzYWJsZWQ6eSx2YWx1ZTpwLC4uLnMscmVmOlQsb25LZXlEb3duOnVlKHUsQT0+e0Eua2V5PT09IkVudGVyIiYmQS5wcmV2ZW50RGVmYXVsdCgpfSksb25DbGljazp1ZShpLEE9Pntjb25zdCBOPUEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTt3KHtyZXF1ZXN0ZWRDaGVja2VkOmhuKGIpPyEwOiFiLGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uOk59KSxDKE09PmhuKE0pPyEwOiFNKSxFJiZSJiYoTnx8QS5zdG9wUHJvcGFnYXRpb24oKSl9KX0pfSwiQ2hlY2tib3hUcmlnZ2VyIikpLFVSPXYuZm9yd2FyZFJlZihjbChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVDaGVja2JveDppLG5hbWU6cyxjaGVja2VkOmYsZGVmYXVsdENoZWNrZWQ6ZCxyZXF1aXJlZDpwLGRpc2FibGVkOnksdmFsdWU6YixvbkNoZWNrZWRDaGFuZ2U6eCxmb3JtOmcsLi4uQ309bztyZXR1cm4gbS5qc3goRmcse19fc2NvcGVDaGVja2JveDppLGNoZWNrZWQ6ZixkZWZhdWx0Q2hlY2tlZDpkLGRpc2FibGVkOnkscmVxdWlyZWQ6cCxvbkNoZWNrZWRDaGFuZ2U6eCxuYW1lOnMsZm9ybTpnLHZhbHVlOmIsaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6KHtpc0Zvcm1Db250cm9sOnd9KT0+bS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOlttLmpzeChMUix7Li4uQyxyZWY6dSxfX3Njb3BlQ2hlY2tib3g6aX0pLHcmJm0uanN4KFBSLHtfX3Njb3BlQ2hlY2tib3g6aX0pXX0pfSl9LCJDaGVja2JveCIpKSxIUj0iQ2hlY2tib3hJbmRpY2F0b3IiLEJSPXYuZm9yd2FyZFJlZihjbChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVDaGVja2JveDppLGZvcmNlTW91bnQ6cywuLi5mfT1vLGQ9dWYoSFIsaSk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50OnN8fGhuKGQuY2hlY2tlZCl8fGQuY2hlY2tlZD09PSEwLGNoaWxkcmVuOm0uanN4KENlLnNwYW4seyJkYXRhLXN0YXRlIjpzZihkLmNoZWNrZWQpLCJkYXRhLWRpc2FibGVkIjpkLmRpc2FibGVkPyIiOnZvaWQgMCwuLi5mLHJlZjp1LHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIiwuLi5vLnN0eWxlfX0pfSl9LCJDaGVja2JveEluZGljYXRvciIpKSxJUj0iQ2hlY2tib3hCdWJibGVJbnB1dCIsUFI9di5mb3J3YXJkUmVmKGNsKGZ1bmN0aW9uKHtfX3Njb3BlQ2hlY2tib3g6byxvbkNsaWNrOnUsLi4uaX0scyl7Y29uc3R7Y29udHJvbDpmLHVzZXJDbGljazpkLGNoZWNrZWQ6cCxkZWZhdWx0Q2hlY2tlZDp5LHJlcXVpcmVkOmIsZGlzYWJsZWQ6eCxuYW1lOmcsdmFsdWU6Qyxmb3JtOncsYnViYmxlSW5wdXQ6UixzZXRCdWJibGVJbnB1dDpFfT11ZihJUixvKSxUPUVlKHMsRSksTz11cihmKSxBPXYudXNlUmVmKCExKSxOPXYudXNlUmVmKHApLE09di51c2VSZWYoZCksWT12LnVzZVJlZihudWxsKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IFU9UjtpZighVSlyZXR1cm47Y29uc3QgQj13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsVz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsImNoZWNrZWQiKS5zZXQ7aWYoIVcpcmV0dXJuO2NvbnN0IG5lPU4uY3VycmVudCE9PXA7Ti5jdXJyZW50PXA7Y29uc3QgZWU9ZCE9PW51bGwmJmQhPT1NLmN1cnJlbnQ7aWYoTS5jdXJyZW50PWQsZWUpWS5jdXJyZW50PW5lP251bGw6ZCxuZSYmKFUuaW5kZXRlcm1pbmF0ZT1obihwKSxXLmNhbGwoVSxobihwKT8hMTpwKSksVS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiFkLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9ufSkpO2Vsc2UgaWYobmUpe2NvbnN0IGNlPVkuY3VycmVudDtZLmN1cnJlbnQ9bnVsbDtjb25zdCBtZT1jZT8ucmVxdWVzdGVkQ2hlY2tlZD09PXA7QS5jdXJyZW50PSEwLFUuaW5kZXRlcm1pbmF0ZT1obihwKSxXLmNhbGwoVSxobihwKT8hMTpwKSxVLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJjbGljayIse2J1YmJsZXM6IShtZSYmY2UuaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb24pfSkpLEEuY3VycmVudD0hMX19LFtSLHAsZF0pO2NvbnN0IEg9di51c2VSZWYoaG4ocCk/ITE6cCk7cmV0dXJuIG0uanN4KENlLmlucHV0LHt0eXBlOiJjaGVja2JveCIsImFyaWEtaGlkZGVuIjohMCxkZWZhdWx0Q2hlY2tlZDp5Pz9ILmN1cnJlbnQscmVxdWlyZWQ6YixkaXNhYmxlZDp4LG5hbWU6Zyx2YWx1ZTpDLGZvcm06dywuLi5pLHRhYkluZGV4Oi0xLHJlZjpULG9uQ2xpY2s6dWUodSxVPT57QS5jdXJyZW50JiZVLnN0b3BQcm9wYWdhdGlvbigpfSksc3R5bGU6ey4uLmkuc3R5bGUsLi4uTyxwb3NpdGlvbjoiYWJzb2x1dGUiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG9wYWNpdHk6MCxtYXJnaW46MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTEwMCUpIn19KX0sIkNoZWNrYm94QnViYmxlSW5wdXQiKSk7ZnVuY3Rpb24gJGcoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifWNsKCRnLCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24gaG4oYSl7cmV0dXJuIGE9PT0iaW5kZXRlcm1pbmF0ZSJ9Y2woaG4sImlzSW5kZXRlcm1pbmF0ZSIpO2Z1bmN0aW9uIHNmKGEpe3JldHVybiBobihhKT8iaW5kZXRlcm1pbmF0ZSI6YT8iY2hlY2tlZCI6InVuY2hlY2tlZCJ9Y2woc2YsImdldFN0YXRlIik7dmFyIEdSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWUj0oYSxvKT0+R1IoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksZmY9di5mb3J3YXJkUmVmKFZSKGZ1bmN0aW9uKG8sdSl7cmV0dXJuIG0uanN4KENlLmxhYmVsLHsuLi5vLHJlZjp1LG9uTW91c2VEb3duOmk9PntpLnRhcmdldC5jbG9zZXN0KCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhIil8fChvLm9uTW91c2VEb3duPy4oaSksIWkuZGVmYXVsdFByZXZlbnRlZCYmaS5kZXRhaWw+MSYmaS5wcmV2ZW50RGVmYXVsdCgpKX19KX0sIkxhYmVsIikpO2Z1bmN0aW9uIFlSKHtsYWJlbDphLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZTpzfSxmKXtjb25zdCBkPXYudXNlSWQoKSxwPW89PT0iaW5kZXRlcm1pbmF0ZSI7cmV0dXJuIG0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOmtlKCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIscyksY2hpbGRyZW46W20uanN4KFVSLHtyZWY6ZixpZDpkLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZToic2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIGJvcmRlci1sYXJrLW41MDAgYmctYnJhbmQtcHJpbWFyeSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLWJyYW5kLXNlY29uZGFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1icmFuZC1zZWNvbmRhcnkgZGF0YS1bc3RhdGU9aW5kZXRlcm1pbmF0ZV06Ym9yZGVyLWJyYW5kLXNlY29uZGFyeSBkYXRhLVtzdGF0ZT1pbmRldGVybWluYXRlXTpiZy1icmFuZC1zZWNvbmRhcnkgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAiLGNoaWxkcmVuOm0uanN4KEJSLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpwP20uanN4KEIxLHtjbGFzc05hbWU6InNpemUtMyB0ZXh0LXdoaXRlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pOm0uanN4KEd1LHtjbGFzc05hbWU6InNpemUtMyB0ZXh0LXdoaXRlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfSl9KSxtLmpzeChmZix7aHRtbEZvcjpkLGNsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWxhcmstbjkwMCIsY2hpbGRyZW46YX0pXX0pfWNvbnN0IEZpPXYuZm9yd2FyZFJlZihZUik7RmkuZGlzcGxheU5hbWU9IkxhcmtDaGVja2JveCI7dmFyIHFSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWdD0oYSxvKT0+cVIoYSwibmFtZSIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwfSksSmc9IlJhZGlvIixbWFIsV2ddPU10KEpnKSxbS1IsZGZdPVhSKEpnKTtmdW5jdGlvbiBleShhKXtjb25zdHtfX3Njb3BlUmFkaW86byxjaGVja2VkOnU9ITEsY2hpbGRyZW46aSxkaXNhYmxlZDpzLGZvcm06ZixuYW1lOmQsb25DaGVjazpwLHJlcXVpcmVkOnksdmFsdWU6Yj0ib24iLGludGVybmFsX2RvX25vdF91c2VfcmVuZGVyOnh9PWEsW2csQ109di51c2VTdGF0ZShudWxsKSxbdyxSXT12LnVzZVN0YXRlKG51bGwpLFtFLFRdPXYudXNlU3RhdGUobnVsbCksTz1nPyEhZnx8ISFnLmNsb3Nlc3QoImZvcm0iKTohMCxBPXtjaGVja2VkOnUsZGlzYWJsZWQ6cyxyZXF1aXJlZDp5LG5hbWU6ZCxmb3JtOmYsdmFsdWU6Yixjb250cm9sOmcsc2V0Q29udHJvbDpDLHVzZXJDbGljazpFLG9uVXNlckNsaWNrOlQsaXNGb3JtQ29udHJvbDpPLGJ1YmJsZUlucHV0Oncsc2V0QnViYmxlSW5wdXQ6UixvbkNoZWNrOlZ0KCgpPT5wPy4oKSwib25DaGVjayIpfTtyZXR1cm4gbS5qc3goS1Ise3Njb3BlOm8sLi4uQSxjaGlsZHJlbjp0eSh4KT94KEEpOml9KX1WdChleSwiUmFkaW9Qcm92aWRlciIpO3ZhciBRUj0iUmFkaW9UcmlnZ2VyIixaUj12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24oe19fc2NvcGVSYWRpbzpvLG9uQ2xpY2s6dSwuLi5pfSxzKXtjb25zdHtjaGVja2VkOmYsZGlzYWJsZWQ6ZCx2YWx1ZTpwLHNldENvbnRyb2w6eSxvbkNoZWNrOmIsb25Vc2VyQ2xpY2s6eCxpc0Zvcm1Db250cm9sOmcsYnViYmxlSW5wdXQ6Q309ZGYoUVIsbyksdz1FZShzLHkpO3JldHVybiBtLmpzeChDZS5idXR0b24se3R5cGU6ImJ1dHRvbiIscm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOmYsImRhdGEtc3RhdGUiOm55KGYpLCJkYXRhLWRpc2FibGVkIjpkPyIiOnZvaWQgMCxkaXNhYmxlZDpkLHZhbHVlOnAsLi4uaSxyZWY6dyxvbkNsaWNrOnVlKHUsUj0+e2NvbnN0IEU9Ui5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2Z8fCh4KHtoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjpFfSksYigpKSxDJiZnJiYoRXx8Ui5zdG9wUHJvcGFnYXRpb24oKSl9KX0pfSwiUmFkaW9UcmlnZ2VyIikpLEZSPSJSYWRpb0J1YmJsZUlucHV0IiwkUj12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24oe19fc2NvcGVSYWRpbzpvLG9uQ2xpY2s6dSwuLi5pfSxzKXtjb25zdHtjb250cm9sOmYsY2hlY2tlZDpkLHJlcXVpcmVkOnAsZGlzYWJsZWQ6eSxuYW1lOmIsdmFsdWU6eCxmb3JtOmcsYnViYmxlSW5wdXQ6QyxzZXRCdWJibGVJbnB1dDp3LHVzZXJDbGljazpSfT1kZihGUixvKSxFPUVlKHMsdyksVD11cihmKSxPPXYudXNlUmVmKCExKSxBPXYudXNlUmVmKGQpLE49di51c2VSZWYoUiksTT12LnVzZVJlZihudWxsKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IEg9QztpZighSClyZXR1cm47Y29uc3QgVT13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsSj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFUsImNoZWNrZWQiKS5zZXQ7aWYoIUopcmV0dXJuO2NvbnN0IFc9QS5jdXJyZW50IT09ZDtBLmN1cnJlbnQ9ZDtjb25zdCBuZT1SIT09bnVsbCYmUiE9PU4uY3VycmVudDtpZihOLmN1cnJlbnQ9UixuZSlNLmN1cnJlbnQ9Vz9udWxsOlIsVyYmSi5jYWxsKEgsZCksSC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiFSLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9ufSkpO2Vsc2UgaWYoVyl7Y29uc3QgZWU9TS5jdXJyZW50O00uY3VycmVudD1udWxsO2NvbnN0IGNlPWQmJmVlIT09bnVsbDtPLmN1cnJlbnQ9ITAsSi5jYWxsKEgsZCksSC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiEoY2UmJmVlLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uKX0pKSxPLmN1cnJlbnQ9ITF9fSxbQyxkLFJdKTtjb25zdCBZPXYudXNlUmVmKGQpO3JldHVybiBtLmpzeChDZS5pbnB1dCx7dHlwZToicmFkaW8iLCJhcmlhLWhpZGRlbiI6ITAsZGVmYXVsdENoZWNrZWQ6WS5jdXJyZW50LHJlcXVpcmVkOnAsZGlzYWJsZWQ6eSxuYW1lOmIsdmFsdWU6eCxmb3JtOmcsLi4uaSx0YWJJbmRleDotMSxyZWY6RSxvbkNsaWNrOnVlKHUsSD0+e08uY3VycmVudCYmSC5zdG9wUHJvcGFnYXRpb24oKX0pLHN0eWxlOnsuLi5pLnN0eWxlLC4uLlQscG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJub25lIixvcGFjaXR5OjAsbWFyZ2luOjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0xMDAlKSJ9fSl9LCJSYWRpb0J1YmJsZUlucHV0IikpO2Z1bmN0aW9uIHR5KGEpe3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIn1WdCh0eSwiaXNGdW5jdGlvbiIpO2Z1bmN0aW9uIG55KGEpe3JldHVybiBhPyJjaGVja2VkIjoidW5jaGVja2VkIn1WdChueSwiZ2V0U3RhdGUiKTt2YXIgSlI9WyJBcnJvd1VwIiwiQXJyb3dEb3duIiwiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCJdLG1mPSJSYWRpb0dyb3VwIixbV1IscmpdPU10KG1mLFtubyxXZ10pLGx5PW5vKCksaGY9V2coKSxbZV8sdF9dPVdSKG1mKSxuXz12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUmFkaW9Hcm91cDppLG5hbWU6cyxmb3JtOmYsZGVmYXVsdFZhbHVlOmQsdmFsdWU6cCxyZXF1aXJlZDp5PSExLGRpc2FibGVkOmI9ITEsb3JpZW50YXRpb246eCxkaXI6Zyxsb29wOkM9ITAsb25WYWx1ZUNoYW5nZTp3LC4uLlJ9PW8sRT1seShpKSxUPVFhKGcpLFtPLEFdPUVuKHtwcm9wOnAsZGVmYXVsdFByb3A6ZD8/bnVsbCxvbkNoYW5nZTp3LGNhbGxlcjptZn0pLFtOLE1dPXYudXNlU3RhdGUobnVsbCksWT1FZSh1LE0pLEg9di51c2VSZWYoTyk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgVT1mP04/Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik6Tj8uY2xvc2VzdCgiZm9ybSIpO2lmKFUgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpe2NvbnN0IEI9VnQoKCk9PkEoSC5jdXJyZW50KSwicmVzZXQiKTtyZXR1cm4gVS5hZGRFdmVudExpc3RlbmVyKCJyZXNldCIsQiksKCk9PlUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzZXQiLEIpfX0sW04sZixBXSksbS5qc3goZV8se3Njb3BlOmksbmFtZTpzLGZvcm06ZixyZXF1aXJlZDp5LGRpc2FibGVkOmIsdmFsdWU6TyxvblZhbHVlQ2hhbmdlOkEsY2hpbGRyZW46bS5qc3goanMse2FzQ2hpbGQ6ITAsLi4uRSxvcmllbnRhdGlvbjp4LGRpcjpULGxvb3A6QyxjaGlsZHJlbjptLmpzeChDZS5kaXYse3JvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLXJlcXVpcmVkIjp5LCJhcmlhLW9yaWVudGF0aW9uIjp4LCJkYXRhLWRpc2FibGVkIjpiPyIiOnZvaWQgMCxkaXI6VCwuLi5SLHJlZjpZfSl9KX0pfSwiUmFkaW9Hcm91cCIpKSxsXz0iUmFkaW9Hcm91cEl0ZW1Qcm92aWRlciIsYV89IlJhZGlvR3JvdXBJdGVtVHJpZ2dlciI7ZnVuY3Rpb24gYXkoYSl7Y29uc3R7X19zY29wZVJhZGlvR3JvdXA6byx2YWx1ZTp1LGRpc2FibGVkOmksY2hpbGRyZW46cyxpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjpmfT1hLGQ9dF8obF8sbykscD1oZihvKSx5PWQuZGlzYWJsZWR8fGk7cmV0dXJuIG0uanN4KGV5LHsuLi5wLGNoZWNrZWQ6ZC52YWx1ZT09PXUsZGlzYWJsZWQ6eSxyZXF1aXJlZDpkLnJlcXVpcmVkLG5hbWU6ZC5uYW1lLGZvcm06ZC5mb3JtLHZhbHVlOnUsb25DaGVjazooKT0+ZC5vblZhbHVlQ2hhbmdlKHUpLGludGVybmFsX2RvX25vdF91c2VfcmVuZGVyOmYsY2hpbGRyZW46c30pfVZ0KGF5LCJSYWRpb0dyb3VwSXRlbVByb3ZpZGVyIik7dmFyIG9fPXYuZm9yd2FyZFJlZihWdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVSYWRpb0dyb3VwOmksLi4uc309byxmPWx5KGkpLGQ9aGYoaSkse2NoZWNrZWQ6cCxkaXNhYmxlZDp5fT1kZihhXyxkLl9fc2NvcGVSYWRpbyksYj12LnVzZVJlZihudWxsKSx4PUVlKHUsYiksZz12LnVzZVJlZighMSk7cmV0dXJuIHYudXNlRWZmZWN0KCgpPT57Y29uc3QgQz1WdChSPT57SlIuaW5jbHVkZXMoUi5rZXkpJiYoZy5jdXJyZW50PSEwKX0sImhhbmRsZUtleURvd24iKSx3PVZ0KCgpPT5nLmN1cnJlbnQ9ITEsImhhbmRsZUtleVVwIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix3KSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEMpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix3KX19LFtdKSxtLmpzeChNcyx7YXNDaGlsZDohMCwuLi5mLGZvY3VzYWJsZToheSxhY3RpdmU6cCxjaGlsZHJlbjptLmpzeChaUix7Li4uZCwuLi5zLHJlZjp4LG9uS2V5RG93bjp1ZShzLm9uS2V5RG93bixDPT57Qy5rZXk9PT0iRW50ZXIiJiZDLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzOnVlKHMub25Gb2N1cywoKT0+e2cuY3VycmVudCYmYi5jdXJyZW50Py5jbGljaygpfSl9KX0pfSwiUmFkaW9Hcm91cEl0ZW1UcmlnZ2VyIikpLHJfPXYuZm9yd2FyZFJlZihWdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVSYWRpb0dyb3VwOmksdmFsdWU6cyxkaXNhYmxlZDpmLC4uLmR9PW87cmV0dXJuIG0uanN4KGF5LHtfX3Njb3BlUmFkaW9Hcm91cDppLHZhbHVlOnMsZGlzYWJsZWQ6ZixpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjooe2lzRm9ybUNvbnRyb2w6cH0pPT5tLmpzeHMobS5GcmFnbWVudCx7Y2hpbGRyZW46W20uanN4KG9fLHsuLi5kLHJlZjp1LF9fc2NvcGVSYWRpb0dyb3VwOml9KSxwJiZtLmpzeChpXyx7X19zY29wZVJhZGlvR3JvdXA6aX0pXX0pfSl9LCJSYWRpb0dyb3VwSXRlbSIpKSxpXz12LmZvcndhcmRSZWYoVnQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlUmFkaW9Hcm91cDppLC4uLnN9PW8sZj1oZihpKTtyZXR1cm4gbS5qc3goJFIsey4uLmYsLi4ucyxyZWY6dX0pfSwiUmFkaW9Hcm91cEl0ZW1CdWJibGVJbnB1dCIpKTtmdW5jdGlvbiBjXyh7dmFsdWU6YSxsYWJlbDpvLGRpc2FibGVkOnUsaWQ6aSxjbGFzc05hbWU6c30sZil7Y29uc3QgZD12LnVzZUlkKCkscD1pPz9gJHtkfS0ke2F9YDtyZXR1cm4gbS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOmtlKCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIscyksY2hpbGRyZW46W20uanN4KHJfLHtyZWY6ZixpZDpwLHZhbHVlOmEsZGlzYWJsZWQ6dSxjbGFzc05hbWU6InNpemUtNCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1sYXJrLW41MDAgYmctYnJhbmQtcHJpbWFyeSBmb2N1cy12aXNpYmxlOmZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tZmFzdCBlYXNlLWJhc2UgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLVs1cHhdIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJvcmRlci1icmFuZC1zZWNvbmRhcnkgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAifSksbS5qc3goZmYse2h0bWxGb3I6cCxjbGFzc05hbWU6InRleHQtc20gdGV4dC1sYXJrLW45MDAiLGNoaWxkcmVuOm99KV19KX1jb25zdCBwZj12LmZvcndhcmRSZWYoY18pO3BmLmRpc3BsYXlOYW1lPSJMYXJrUmFkaW9Hcm91cC5JdGVtIjtmdW5jdGlvbiB1Xyh7bGFiZWw6YSxvcHRpb25zOm8sdmFsdWU6dSxvblZhbHVlQ2hhbmdlOmksY2xhc3NOYW1lOnN9LGYpe2NvbnN0IGQ9di51c2VJZCgpLHA9YT9gJHtkfS1sYWJlbGA6dm9pZCAwO3JldHVybiBtLmpzeHMoImRpdiIse2NsYXNzTmFtZTprZSgiZmxleCBmbGV4LWNvbCIscyksY2hpbGRyZW46W2E/bS5qc3goInNwYW4iLHtpZDpwLGNsYXNzTmFtZToibWItMSB0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphfSk6bnVsbCxtLmpzeChuXyx7cmVmOmYsdmFsdWU6dSxvblZhbHVlQ2hhbmdlOmksImFyaWEtbGFiZWxsZWRieSI6cCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOm8ubWFwKHk9Pm0uanN4KHBmLHt2YWx1ZTp5LnZhbHVlLGxhYmVsOnkubGFiZWwsZGlzYWJsZWQ6eS5kaXNhYmxlZCxpZDpgJHtkfS0ke3kudmFsdWV9YH0seS52YWx1ZSkpfSldfSl9Y29uc3Qgb3k9di5mb3J3YXJkUmVmKHVfKTtveS5kaXNwbGF5TmFtZT0iTGFya1JhZGlvR3JvdXAiO2NvbnN0IHNfPU9iamVjdC5hc3NpZ24ob3kse0l0ZW06cGZ9KTt2YXIgZl89T2JqZWN0LmRlZmluZVByb3BlcnR5LFVsPShhLG8pPT5mXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSx2Zj0iU3dpdGNoIixbZF8saWpdPU10KHZmKSxbbV8sZ2ZdPWRfKHZmKTtmdW5jdGlvbiByeShhKXtjb25zdHtfX3Njb3BlU3dpdGNoOm8sY2hlY2tlZDp1LGNoaWxkcmVuOmksZGVmYXVsdENoZWNrZWQ6cyxkaXNhYmxlZDpmLGZvcm06ZCxuYW1lOnAsb25DaGVja2VkQ2hhbmdlOnkscmVxdWlyZWQ6Yix2YWx1ZTp4PSJvbiIsaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXI6Z309YSxbQyx3XT1Fbih7cHJvcDp1LGRlZmF1bHRQcm9wOnM/PyExLG9uQ2hhbmdlOnksY2FsbGVyOnZmfSksW1IsRV09di51c2VTdGF0ZShudWxsKSxbVCxPXT12LnVzZVN0YXRlKG51bGwpLFtBLE5dPXYudXNlU3RhdGUobnVsbCksTT1SPyEhZHx8ISFSLmNsb3Nlc3QoImZvcm0iKTohMCxZPXtjaGVja2VkOkMsc2V0Q2hlY2tlZDp3LGRpc2FibGVkOmYsY29udHJvbDpSLHNldENvbnRyb2w6RSxuYW1lOnAsZm9ybTpkLHZhbHVlOngsdXNlckNsaWNrOkEsb25Vc2VyQ2xpY2s6TixyZXF1aXJlZDpiLGRlZmF1bHRDaGVja2VkOnMsaXNGb3JtQ29udHJvbDpNLGJ1YmJsZUlucHV0OlQsc2V0QnViYmxlSW5wdXQ6T307cmV0dXJuIG0uanN4KG1fLHtzY29wZTpvLC4uLlksY2hpbGRyZW46aXkoZyk/ZyhZKTppfSl9VWwocnksIlN3aXRjaFByb3ZpZGVyIik7dmFyIGhfPSJTd2l0Y2hUcmlnZ2VyIixwXz12LmZvcndhcmRSZWYoVWwoZnVuY3Rpb24oe19fc2NvcGVTd2l0Y2g6byxvbkNsaWNrOnUsLi4uaX0scyl7Y29uc3R7Y29udHJvbDpmLGZvcm06ZCx2YWx1ZTpwLGRpc2FibGVkOnksY2hlY2tlZDpiLHJlcXVpcmVkOngsc2V0Q29udHJvbDpnLHNldENoZWNrZWQ6QyxvblVzZXJDbGljazp3LGlzRm9ybUNvbnRyb2w6UixidWJibGVJbnB1dDpFfT1nZihoXyxvKSxUPUVlKHMsZyksTz12LnVzZVJlZihiKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBBPWQ/Zj8ub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKTpmPy5mb3JtO2lmKEEgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpe2NvbnN0IE49VWwoKCk9PkMoTy5jdXJyZW50KSwicmVzZXQiKTtyZXR1cm4gQS5hZGRFdmVudExpc3RlbmVyKCJyZXNldCIsTiksKCk9PkEucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzZXQiLE4pfX0sW2YsZCxDXSksbS5qc3goQ2UuYnV0dG9uLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6YiwiYXJpYS1yZXF1aXJlZCI6eCwiZGF0YS1zdGF0ZSI6eWYoYiksImRhdGEtZGlzYWJsZWQiOnk/IiI6dm9pZCAwLGRpc2FibGVkOnksdmFsdWU6cCwuLi5pLHJlZjpULG9uQ2xpY2s6dWUodSxBPT57Y29uc3QgTj1BLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7dyh7cmVxdWVzdGVkQ2hlY2tlZDohYixoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbjpOfSksQyhNPT4hTSksRSYmUiYmKE58fEEuc3RvcFByb3BhZ2F0aW9uKCkpfSl9KX0sIlN3aXRjaFRyaWdnZXIiKSksdl89di5mb3J3YXJkUmVmKFVsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVN3aXRjaDppLG5hbWU6cyxjaGVja2VkOmYsZGVmYXVsdENoZWNrZWQ6ZCxyZXF1aXJlZDpwLGRpc2FibGVkOnksdmFsdWU6YixvbkNoZWNrZWRDaGFuZ2U6eCxmb3JtOmcsLi4uQ309bztyZXR1cm4gbS5qc3gocnkse19fc2NvcGVTd2l0Y2g6aSxjaGVja2VkOmYsZGVmYXVsdENoZWNrZWQ6ZCxkaXNhYmxlZDp5LHJlcXVpcmVkOnAsb25DaGVja2VkQ2hhbmdlOngsbmFtZTpzLGZvcm06Zyx2YWx1ZTpiLGludGVybmFsX2RvX25vdF91c2VfcmVuZGVyOih7aXNGb3JtQ29udHJvbDp3fSk9Pm0uanN4cyhtLkZyYWdtZW50LHtjaGlsZHJlbjpbbS5qc3gocF8sey4uLkMscmVmOnUsX19zY29wZVN3aXRjaDppfSksdyYmbS5qc3goeF8se19fc2NvcGVTd2l0Y2g6aX0pXX0pfSl9LCJTd2l0Y2giKSksZ189IlN3aXRjaFRodW1iIix5Xz12LmZvcndhcmRSZWYoVWwoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlU3dpdGNoOmksLi4uc309byxmPWdmKGdfLGkpO3JldHVybiBtLmpzeChDZS5zcGFuLHsiZGF0YS1zdGF0ZSI6eWYoZi5jaGVja2VkKSwiZGF0YS1kaXNhYmxlZCI6Zi5kaXNhYmxlZD8iIjp2b2lkIDAsLi4ucyxyZWY6dX0pfSwiU3dpdGNoVGh1bWIiKSksYl89IlN3aXRjaEJ1YmJsZUlucHV0Iix4Xz12LmZvcndhcmRSZWYoVWwoZnVuY3Rpb24oe19fc2NvcGVTd2l0Y2g6byxvbkNsaWNrOnUsLi4uaX0scyl7Y29uc3R7Y29udHJvbDpmLHVzZXJDbGljazpkLGNoZWNrZWQ6cCxkZWZhdWx0Q2hlY2tlZDp5LHJlcXVpcmVkOmIsZGlzYWJsZWQ6eCxuYW1lOmcsdmFsdWU6Qyxmb3JtOncsYnViYmxlSW5wdXQ6UixzZXRCdWJibGVJbnB1dDpFfT1nZihiXyxvKSxUPUVlKHMsRSksTz11cihmKSxBPXYudXNlUmVmKCExKSxOPXYudXNlUmVmKHApLE09di51c2VSZWYoZCksWT12LnVzZVJlZihudWxsKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IFU9UjtpZighVSlyZXR1cm47Y29uc3QgQj13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsVz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsImNoZWNrZWQiKS5zZXQ7aWYoIVcpcmV0dXJuO2NvbnN0IG5lPU4uY3VycmVudCE9PXA7Ti5jdXJyZW50PXA7Y29uc3QgZWU9ZCE9PW51bGwmJmQhPT1NLmN1cnJlbnQ7aWYoTS5jdXJyZW50PWQsZWUpWS5jdXJyZW50PW5lP251bGw6ZCxuZSYmVy5jYWxsKFUscCksVS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOiFkLmhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9ufSkpO2Vsc2UgaWYobmUpe2NvbnN0IGNlPVkuY3VycmVudDtZLmN1cnJlbnQ9bnVsbDtjb25zdCBtZT1jZT8ucmVxdWVzdGVkQ2hlY2tlZD09PXA7QS5jdXJyZW50PSEwLFcuY2FsbChVLHApLFUuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImNsaWNrIix7YnViYmxlczohKG1lJiZjZS5oYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvbil9KSksQS5jdXJyZW50PSExfX0sW1IscCxkXSk7Y29uc3QgSD12LnVzZVJlZihwKTtyZXR1cm4gbS5qc3goQ2UuaW5wdXQse3R5cGU6ImNoZWNrYm94IiwiYXJpYS1oaWRkZW4iOiEwLGRlZmF1bHRDaGVja2VkOnk/P0guY3VycmVudCxyZXF1aXJlZDpiLGRpc2FibGVkOngsbmFtZTpnLHZhbHVlOkMsZm9ybTp3LC4uLmksdGFiSW5kZXg6LTEscmVmOlQsb25DbGljazp1ZSh1LFU9PntBLmN1cnJlbnQmJlUuc3RvcFByb3BhZ2F0aW9uKCl9KSxzdHlsZTp7Li4uaS5zdHlsZSwuLi5PLHBvc2l0aW9uOiJhYnNvbHV0ZSIscG9pbnRlckV2ZW50czoibm9uZSIsb3BhY2l0eTowLG1hcmdpbjowLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtMTAwJSkifX0pfSwiU3dpdGNoQnViYmxlSW5wdXQiKSk7ZnVuY3Rpb24gaXkoYSl7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24ifVVsKGl5LCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24geWYoYSl7cmV0dXJuIGE/ImNoZWNrZWQiOiJ1bmNoZWNrZWQifVVsKHlmLCJnZXRTdGF0ZSIpO2Z1bmN0aW9uIFNfKHtsYWJlbDphLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZTpzfSxmKXtjb25zdCBkPXYudXNlSWQoKSxwPW0uanN4KHZfLHtyZWY6ZixpZDpkLGNoZWNrZWQ6byxvbkNoZWNrZWRDaGFuZ2U6dSxkaXNhYmxlZDppLGNsYXNzTmFtZToiaC01IHctOSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYmctbGFyay1uMzAwIGZvY3VzLXZpc2libGU6Zm9jdXMtcmluZyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi1mYXN0IGVhc2UtYmFzZSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1icmFuZC1zZWNvbmRhcnkgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAiLGNoaWxkcmVuOm0uanN4KHlfLHtjbGFzc05hbWU6ImJsb2NrIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUgc2hhZG93LXNtIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLWZhc3QgZWFzZS1iYXNlIGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRyYW5zbGF0ZS14LTQgZGF0YS1bc3RhdGU9dW5jaGVja2VkXTp0cmFuc2xhdGUteC0wLjUifSl9KTtyZXR1cm4gYT9tLmpzeHMoImRpdiIse2NsYXNzTmFtZTprZSgiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLHMpLGNoaWxkcmVuOltwLG0uanN4KGZmLHtodG1sRm9yOmQsY2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphfSldfSk6bS5qc3goImRpdiIse2NsYXNzTmFtZTpzLGNoaWxkcmVuOnB9KX1jb25zdCAkaT12LmZvcndhcmRSZWYoU18pOyRpLmRpc3BsYXlOYW1lPSJMYXJrU3dpdGNoIjt2YXIgQ189T2JqZWN0LmRlZmluZVByb3BlcnR5LFl0PShhLG8pPT5DXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxiZj0iRGlhbG9nIixbY3ksdXldPU10KGJmKSxbVF8sX25dPWN5KGJmKSxzeT1ZdChhPT57Y29uc3R7X19zY29wZURpYWxvZzpvLGNoaWxkcmVuOnUsb3BlbjppLGRlZmF1bHRPcGVuOnMsb25PcGVuQ2hhbmdlOmYsbW9kYWw6ZD0hMH09YSxwPXYudXNlUmVmKG51bGwpLHk9di51c2VSZWYobnVsbCkse25vZGVzOmIscmVnaXN0cnk6eH09Y3MoKSxbZyxDXT1Fbih7cHJvcDppLGRlZmF1bHRQcm9wOnM/PyExLG9uQ2hhbmdlOmYsY2FsbGVyOmJmfSksW3csUl09di51c2VTdGF0ZSgwKSxbRSxUXT12LnVzZVN0YXRlKDApO3JldHVybiBtLmpzeChUXyx7c2NvcGU6byx0cmlnZ2VyUmVmOnAsY29udGVudFJlZjp5LGNvbnRlbnRJZDp0bCgpLHRpdGxlSWQ6dGwoKSxkZXNjcmlwdGlvbklkOnRsKCksdGl0bGVQcmVzZW50Onc+MCxkZXNjcmlwdGlvblByZXNlbnQ6RT4wLHNldFRpdGxlQ291bnQ6UixzZXREZXNjcmlwdGlvbkNvdW50OlQsb3BlbjpnLG9uT3BlbkNoYW5nZTpDLG9uT3BlblRvZ2dsZTp2LnVzZUNhbGxiYWNrKCgpPT5DKE89PiFPKSxbQ10pLG1vZGFsOmQsYnJhbmNoTm9kZXM6YixicmFuY2hSZWdpc3RyeTp4LGNoaWxkcmVuOnV9KX0sIkRpYWxvZyIpLHdfPSJEaWFsb2dUcmlnZ2VyIixFXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlRGlhbG9nOmksLi4uc309byxmPV9uKHdfLGkpLGQ9RWUodSxmLnRyaWdnZXJSZWYpO3JldHVybiBtLmpzeChDZS5idXR0b24se3R5cGU6ImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiOiJkaWFsb2ciLCJhcmlhLWV4cGFuZGVkIjpmLm9wZW4sImFyaWEtY29udHJvbHMiOmYub3Blbj9mLmNvbnRlbnRJZDp2b2lkIDAsImRhdGEtc3RhdGUiOkppKGYub3BlbiksLi4ucyxyZWY6ZCxvbkNsaWNrOnVlKG8ub25DbGljayxmLm9uT3BlblRvZ2dsZSl9KX0sIkRpYWxvZ1RyaWdnZXIiKSksZnk9IkRpYWxvZ1BvcnRhbCIsW1JfLGR5XT1jeShmeSx7Zm9yY2VNb3VudDp2b2lkIDB9KSxteT1ZdChhPT57Y29uc3R7X19zY29wZURpYWxvZzpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjppLGNvbnRhaW5lcjpzfT1hLGY9X24oZnksbyk7cmV0dXJuIG0uanN4KFJfLHtzY29wZTpvLGZvcmNlTW91bnQ6dSxjaGlsZHJlbjp2LkNoaWxkcmVuLm1hcChpLGQ9Pm0uanN4KG1uLHtwcmVzZW50OnV8fGYub3BlbixjaGlsZHJlbjptLmpzeChzcix7YXNDaGlsZDohMCxjb250YWluZXI6cyxjaGlsZHJlbjpkfSl9KSl9KX0sIkRpYWxvZ1BvcnRhbCIpLHhmPSJEaWFsb2dPdmVybGF5IixoeT12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPWR5KHhmLG8uX19zY29wZURpYWxvZykse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsLi4uZn09byxkPV9uKHhmLG8uX19zY29wZURpYWxvZyk7cmV0dXJuIGQubW9kYWw/bS5qc3gobW4se3ByZXNlbnQ6c3x8ZC5vcGVuLGNoaWxkcmVuOm0uanN4KE9fLHsuLi5mLHJlZjp1fSl9KTpudWxsfSwiRGlhbG9nT3ZlcmxheSIpKSxfXz1MbigiRGlhbG9nT3ZlcmxheS5SZW1vdmVTY3JvbGwiKSxPXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlRGlhbG9nOmksLi4uc309byxmPV9uKHhmLGkpLGQ9VnAoKSxwPUVlKHUsZCk7cmV0dXJuIG0uanN4KEdpLHthczpfXyxhbGxvd1BpbmNoWm9vbTohMCxzaGFyZHM6di51c2VNZW1vKCgpPT5bZi5jb250ZW50UmVmLC4uLmYuYnJhbmNoTm9kZXMubWFwKHk9Pih7Y3VycmVudDp5fSkpXSxbZi5jb250ZW50UmVmLGYuYnJhbmNoTm9kZXNdKSxjaGlsZHJlbjptLmpzeChDZS5kaXYseyJkYXRhLXN0YXRlIjpKaShmLm9wZW4pLC4uLnMscmVmOnAsc3R5bGU6e3BvaW50ZXJFdmVudHM6ImF1dG8iLC4uLnMuc3R5bGV9fSl9KX0sIkRpYWxvZ092ZXJsYXlJbXBsIikpLHZyPSJEaWFsb2dDb250ZW50IixweT12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPWR5KHZyLG8uX19zY29wZURpYWxvZykse2ZvcmNlTW91bnQ6cz1pLmZvcmNlTW91bnQsLi4uZn09byxkPV9uKHZyLG8uX19zY29wZURpYWxvZyk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50OnN8fGQub3BlbixjaGlsZHJlbjpkLm1vZGFsP20uanN4KEFfLHsuLi5mLHJlZjp1fSk6bS5qc3goTl8sey4uLmYscmVmOnV9KX0pfSwiRGlhbG9nQ29udGVudCIpKSxBXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPV9uKHZyLG8uX19zY29wZURpYWxvZykscz12LnVzZVJlZihudWxsKSxmPUVlKHUsaS5jb250ZW50UmVmLHMpO3JldHVybiB2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IGQ9cy5jdXJyZW50O2lmKGQpcmV0dXJuIExzKGQpfSxbXSksbS5qc3godnksey4uLm8scmVmOmYsdHJhcEZvY3VzOmkub3BlbixkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6aS5vcGVuLG9uQ2xvc2VBdXRvRm9jdXM6dWUoby5vbkNsb3NlQXV0b0ZvY3VzLGQ9PntkLnByZXZlbnREZWZhdWx0KCksaS50cmlnZ2VyUmVmLmN1cnJlbnQ/LmZvY3VzKCl9KSxvblBvaW50ZXJEb3duT3V0c2lkZTp1ZShvLm9uUG9pbnRlckRvd25PdXRzaWRlLGQ9Pntjb25zdCBwPWQuZGV0YWlsLm9yaWdpbmFsRXZlbnQseT1wLmJ1dHRvbj09PTAmJnAuY3RybEtleT09PSEwOyhwLmJ1dHRvbj09PTJ8fHkpJiZkLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzT3V0c2lkZTp1ZShvLm9uRm9jdXNPdXRzaWRlLGQ9PmQucHJldmVudERlZmF1bHQoKSl9KX0sIkRpYWxvZ0NvbnRlbnRNb2RhbCIpKSxOXz12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdCBpPV9uKHZyLG8uX19zY29wZURpYWxvZykscz12LnVzZVJlZighMSksZj12LnVzZVJlZighMSk7cmV0dXJuIG0uanN4KHZ5LHsuLi5vLHJlZjp1LHRyYXBGb2N1czohMSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITEsb25DbG9zZUF1dG9Gb2N1czpkPT57by5vbkNsb3NlQXV0b0ZvY3VzPy4oZCksZC5kZWZhdWx0UHJldmVudGVkfHwocy5jdXJyZW50fHxpLnRyaWdnZXJSZWYuY3VycmVudD8uZm9jdXMoKSxkLnByZXZlbnREZWZhdWx0KCkpLHMuY3VycmVudD0hMSxmLmN1cnJlbnQ9ITF9LG9uSW50ZXJhY3RPdXRzaWRlOmQ9PntvLm9uSW50ZXJhY3RPdXRzaWRlPy4oZCksZC5kZWZhdWx0UHJldmVudGVkfHwocy5jdXJyZW50PSEwLGQuZGV0YWlsLm9yaWdpbmFsRXZlbnQudHlwZT09PSJwb2ludGVyZG93biImJihmLmN1cnJlbnQ9ITApKTtjb25zdCBwPWQudGFyZ2V0O2kudHJpZ2dlclJlZi5jdXJyZW50Py5jb250YWlucyhwKSYmZC5wcmV2ZW50RGVmYXVsdCgpLGQuZGV0YWlsLm9yaWdpbmFsRXZlbnQudHlwZT09PSJmb2N1c2luIiYmZi5jdXJyZW50JiZkLnByZXZlbnREZWZhdWx0KCl9fSl9LCJEaWFsb2dDb250ZW50Tm9uTW9kYWwiKSksdnk9di5mb3J3YXJkUmVmKFl0KGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZURpYWxvZzppLHRyYXBGb2N1czpzLG9uT3BlbkF1dG9Gb2N1czpmLG9uQ2xvc2VBdXRvRm9jdXM6ZCwiYXJpYS1kZXNjcmliZWRieSI6cCxjaGlsZHJlbjp5LC4uLmJ9PW8seD1fbih2cixpKTtyZXR1cm4gcnIoKSxtLmpzeChpcyx7cmVnaXN0cnk6eC5icmFuY2hSZWdpc3RyeSxjaGlsZHJlbjptLmpzeChycyx7YXNDaGlsZDohMCxsb29wOiEwLHRyYXBwZWQ6cyxicmFuY2hlczp4LmJyYW5jaE5vZGVzLG9uTW91bnRBdXRvRm9jdXM6ZixvblVubW91bnRBdXRvRm9jdXM6ZCxjaGlsZHJlbjptLmpzeChvcix7cm9sZToiZGlhbG9nIixpZDp4LmNvbnRlbnRJZCwiYXJpYS1sYWJlbGxlZGJ5Ijp4LnRpdGxlUHJlc2VudD94LnRpdGxlSWQ6dm9pZCAwLCJhcmlhLWRlc2NyaWJlZGJ5Ijp4LmRlc2NyaXB0aW9uUHJlc2VudD94eShwLHguZGVzY3JpcHRpb25JZCk6cCwiZGF0YS1zdGF0ZSI6SmkoeC5vcGVuKSwuLi5iLHJlZjp1LGRlZmVyUG9pbnRlckRvd25PdXRzaWRlOiEwLG9uRGlzbWlzczooKT0+eC5vbk9wZW5DaGFuZ2UoITEpLGNoaWxkcmVuOnl9KX0pfSl9LCJEaWFsb2dDb250ZW50SW1wbCIpKSxneT12LmZvcndhcmRSZWYoWXQoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlRGlhbG9nOmksLi4uc309byxmPV9uKCJEaWFsb2dUaXRsZSIsaSkse3NldFRpdGxlQ291bnQ6ZH09ZjtyZXR1cm4gbnQoKCk9PihkKHA9PnArMSksKCk9PmQocD0+cC0xKSksW2RdKSxtLmpzeChDZS5oMix7aWQ6Zi50aXRsZUlkLC4uLnMscmVmOnV9KX0sIkRpYWxvZ1RpdGxlIikpLHl5PXYuZm9yd2FyZFJlZihZdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVEaWFsb2c6aSwuLi5zfT1vLGY9X24oIkRpYWxvZ0Rlc2NyaXB0aW9uIixpKSx7c2V0RGVzY3JpcHRpb25Db3VudDpkfT1mO3JldHVybiBudCgoKT0+KGQocD0+cCsxKSwoKT0+ZChwPT5wLTEpKSxbZF0pLG0uanN4KENlLnAse2lkOmYuZGVzY3JpcHRpb25JZCwuLi5zLHJlZjp1fSl9LCJEaWFsb2dEZXNjcmlwdGlvbiIpKSxEXz0iRGlhbG9nQ2xvc2UiLGJ5PXYuZm9yd2FyZFJlZihZdChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVEaWFsb2c6aSwuLi5zfT1vLGY9X24oRF8saSk7cmV0dXJuIG0uanN4KENlLmJ1dHRvbix7dHlwZToiYnV0dG9uIiwuLi5zLHJlZjp1LG9uQ2xpY2s6dWUoby5vbkNsaWNrLCgpPT5mLm9uT3BlbkNoYW5nZSghMSkpfSl9LCJEaWFsb2dDbG9zZSIpKTtmdW5jdGlvbiB4eSguLi5hKXtjb25zdCBvPW5ldyBTZXQ7Zm9yKGNvbnN0IHUgb2YgYSlpZih0eXBlb2YgdT09InN0cmluZyIpZm9yKGNvbnN0IGkgb2YgU3RyaW5nKHUpLnRyaW0oKS5zcGxpdCgvXHMrLykpaSYmby5hZGQoaSk7cmV0dXJuIG8uc2l6ZT4wP0FycmF5LmZyb20obykuam9pbigiICIpOnZvaWQgMH1ZdCh4eSwiY29uY2F0QXJpYURlc2NyaWJlZGJ5Iik7ZnVuY3Rpb24gSmkoYSl7cmV0dXJuIGE/Im9wZW4iOiJjbG9zZWQifVl0KEppLCJnZXRTdGF0ZSIpO2Z1bmN0aW9uIGpfKHtvcGVuOmEsb25PcGVuQ2hhbmdlOm8sY2hpbGRyZW46dX0pe3JldHVybiBtLmpzeChzeSx7b3BlbjphLG9uT3BlbkNoYW5nZTpvLGNoaWxkcmVuOnV9KX1mdW5jdGlvbiBNXyh7dGl0bGU6YSxkZXNjcmlwdGlvbjpvLGNsYXNzTmFtZTp1LGNoaWxkcmVuOml9LHMpe3JldHVybiBtLmpzeHMobXkse2NoaWxkcmVuOlttLmpzeChoeSx7Y2xhc3NOYW1lOiJmaXhlZCBpbnNldC0wIGJnLVt2YXIoLS1vdmVybGF5LW1hc2spXSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0In0pLG0uanN4cyhweSx7cmVmOnMsLi4ubz97fTp7ImFyaWEtZGVzY3JpYmVkYnkiOnZvaWQgMH0sY2xhc3NOYW1lOmtlKCJmaXhlZCBsZWZ0LTEvMiB0b3AtMS8yIHctW2NhbGMoMTAwdnctMi41cmVtKV0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHJvdW5kZWQteGwgYmctYnJhbmQtcHJpbWFyeSBwLTUgc2hhZG93LVt2YXIoLS1zaGFkb3ctb3ZlcmxheSldIG91dGxpbmUtbm9uZSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0IG1kOnctZnVsbCBtZDptYXgtdy1tZCBtZDpwLTYiLHUpLGNoaWxkcmVuOlttLmpzeChneSx7Y2xhc3NOYW1lOiJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1sYXJrLW45MDAgbWQ6dGV4dC1bMTdweF0iLGNoaWxkcmVuOmF9KSxvP20uanN4KHl5LHtjbGFzc05hbWU6Im10LTMgdGV4dC1zbSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46b30pOm51bGwsaV19KV19KX1jb25zdCBTeT12LmZvcndhcmRSZWYoTV8pO1N5LmRpc3BsYXlOYW1lPSJMYXJrRGlhbG9nLkNvbnRlbnQiO2Z1bmN0aW9uIHpfKHtjaGlsZHJlbjphLGNsYXNzTmFtZTpvfSl7cmV0dXJuIG0uanN4KCJkaXYiLHtjbGFzc05hbWU6a2UoImZsZXgganVzdGlmeS1lbmQgZ2FwLTMgYm9yZGVyLXQgYm9yZGVyLVtjb2xvci1taXgoaW5fc3JnYix2YXIoLS1jb2xvci1sYXJrLW45MDApXzE1JSx0cmFuc3BhcmVudCldIHB4LTUgcHktNCBtZDpweC02IC1teC01IC1tYi01IG1kOi1teC02IG1kOi1tYi02IixvKSxjaGlsZHJlbjphfSl9Y29uc3QgU2Y9T2JqZWN0LmFzc2lnbihqXyx7Q29udGVudDpTeSxGb290ZXI6el99KTt2YXIga189T2JqZWN0LmRlZmluZVByb3BlcnR5LHVsPShhLG8pPT5rXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxMXz0iQWxlcnREaWFsb2ciLFtVXyxjal09TXQoTF8sW3V5XSksc2w9dXkoKSxIXz11bChhPT57Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOm8sLi4udX09YSxpPXNsKG8pO3JldHVybiBtLmpzeChzeSx7Li4uaSwuLi51LG1vZGFsOiEwfSl9LCJBbGVydERpYWxvZyIpO3YuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLC4uLnN9PW8sZj1zbChpKTtyZXR1cm4gbS5qc3goRV8sey4uLmYsLi4ucyxyZWY6dX0pfSwiQWxlcnREaWFsb2dUcmlnZ2VyIikpO3ZhciBCXz11bChhPT57Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOm8sLi4udX09YSxpPXNsKG8pO3JldHVybiBtLmpzeChteSx7Li4uaSwuLi51fSl9LCJBbGVydERpYWxvZ1BvcnRhbCIpLElfPXYuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLC4uLnN9PW8sZj1zbChpKTtyZXR1cm4gbS5qc3goaHksey4uLmYsLi4ucyxyZWY6dX0pfSwiQWxlcnREaWFsb2dPdmVybGF5IikpLFBfPSJBbGVydERpYWxvZ0NvbnRlbnQiLFtHXyxWX109VV8oUF8pLFlfPXYuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLGNoaWxkcmVuOnMsLi4uZn09byxkPXNsKGkpLHA9di51c2VSZWYobnVsbCkseT1FZSh1LHApLGI9di51c2VSZWYobnVsbCk7cmV0dXJuIG0uanN4KEdfLHtzY29wZTppLGNhbmNlbFJlZjpiLGNoaWxkcmVuOm0uanN4KHB5LHtyb2xlOiJhbGVydGRpYWxvZyIsLi4uZCwuLi5mLHJlZjp5LG9uT3BlbkF1dG9Gb2N1czp1ZShmLm9uT3BlbkF1dG9Gb2N1cyx4PT57eC5wcmV2ZW50RGVmYXVsdCgpLGIuY3VycmVudD8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0pLG9uUG9pbnRlckRvd25PdXRzaWRlOng9PngucHJldmVudERlZmF1bHQoKSxvbkludGVyYWN0T3V0c2lkZTp4PT54LnByZXZlbnREZWZhdWx0KCksY2hpbGRyZW46c30pfSl9LCJBbGVydERpYWxvZ0NvbnRlbnQiKSkscV89di5mb3J3YXJkUmVmKHVsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOmksLi4uc309byxmPXNsKGkpO3JldHVybiBtLmpzeChneSx7Li4uZiwuLi5zLHJlZjp1fSl9LCJBbGVydERpYWxvZ1RpdGxlIikpLFhfPXYuZm9yd2FyZFJlZih1bChmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVBbGVydERpYWxvZzppLC4uLnN9PW8sZj1zbChpKTtyZXR1cm4gbS5qc3goeXksey4uLmYsLi4ucyxyZWY6dX0pfSwiQWxlcnREaWFsb2dEZXNjcmlwdGlvbiIpKSxLXz12LmZvcndhcmRSZWYodWwoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlQWxlcnREaWFsb2c6aSwuLi5zfT1vLGY9c2woaSk7cmV0dXJuIG0uanN4KGJ5LHsuLi5mLC4uLnMscmVmOnV9KX0sIkFsZXJ0RGlhbG9nQWN0aW9uIikpLFFfPSJBbGVydERpYWxvZ0NhbmNlbCIsWl89di5mb3J3YXJkUmVmKHVsKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZUFsZXJ0RGlhbG9nOmksLi4uc309byx7Y2FuY2VsUmVmOmZ9PVZfKFFfLGkpLGQ9c2woaSkscD1FZSh1LGYpO3JldHVybiBtLmpzeChieSx7Li4uZCwuLi5zLHJlZjpwfSl9LCJBbGVydERpYWxvZ0NhbmNlbCIpKTtmdW5jdGlvbiBGXyh7b3BlbjphLG9uT3BlbkNoYW5nZTpvLHRpdGxlOnUsZGVzY3JpcHRpb246aSxjb25maXJtTGFiZWw6cyxjYW5jZWxMYWJlbDpmPSJI4buneSIsb25Db25maXJtOmQsaXNQZW5kaW5nOnAsY2hpbGRyZW46eSxjbGFzc05hbWU6Yn0seCl7cmV0dXJuIG0uanN4KEhfLHtvcGVuOmEsb25PcGVuQ2hhbmdlOm8sY2hpbGRyZW46bS5qc3hzKEJfLHtjaGlsZHJlbjpbbS5qc3goSV8se2NsYXNzTmFtZToiZml4ZWQgaW5zZXQtMCBiZy1bdmFyKC0tb3ZlcmxheS1tYXNrKV0gZGF0YS1bc3RhdGU9b3Blbl06YW5pbS1vdmVybGF5LWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbS1vdmVybGF5LW91dCJ9KSxtLmpzeHMoWV8se3JlZjp4LC4uLmk/e306eyJhcmlhLWRlc2NyaWJlZGJ5Ijp2b2lkIDB9LG9uRXNjYXBlS2V5RG93bjpwP2c9PmcucHJldmVudERlZmF1bHQoKTp2b2lkIDAsY2xhc3NOYW1lOmtlKCJmaXhlZCBsZWZ0LTEvMiB0b3AtMS8yIHctW2NhbGMoMTAwdnctMi41cmVtKV0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHJvdW5kZWQteGwgYmctYnJhbmQtcHJpbWFyeSBwLTUgc2hhZG93LVt2YXIoLS1zaGFkb3ctb3ZlcmxheSldIG91dGxpbmUtbm9uZSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltLW92ZXJsYXktaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltLW92ZXJsYXktb3V0IG1kOnctZnVsbCBtZDptYXgtdy1tZCBtZDpwLTYiLGIpLGNoaWxkcmVuOlttLmpzeChxXyx7Y2xhc3NOYW1lOiJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1sYXJrLW45MDAgbWQ6dGV4dC1bMTdweF0iLGNoaWxkcmVuOnV9KSxpP20uanN4KFhfLHtjbGFzc05hbWU6Im10LTMgdGV4dC1zbSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46aX0pOm51bGwseT9tLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0zIixjaGlsZHJlbjp5fSk6bnVsbCxtLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtMyBmbGV4IGp1c3RpZnktZW5kIGdhcC0zIGJvcmRlci10IGJvcmRlci1bY29sb3ItbWl4KGluX3NyZ2IsdmFyKC0tY29sb3ItbGFyay1uOTAwKV8xNSUsdHJhbnNwYXJlbnQpXSBweC01IHB5LTQgbWQ6cHgtNiAtbXgtNSAtbWItNSBtZDotbXgtNiBtZDotbWItNiIsY2hpbGRyZW46W20uanN4KFpfLHthc0NoaWxkOiEwLGNoaWxkcmVuOm0uanN4KERlLHt0eXBlOiJidXR0b24iLGRpc2FibGVkOnAsY2hpbGRyZW46Zn0pfSksbS5qc3goS18se2FzQ2hpbGQ6ITAsY2hpbGRyZW46bS5qc3goRGUse3R5cGU6ImJ1dHRvbiIsdmFyaWFudDoicHJpbWFyeSIsaXNQZW5kaW5nOnAsb25DbGljazpkLGNoaWxkcmVuOnN9KX0pXX0pXX0pXX0pfSl9Y29uc3QgQ3k9di5mb3J3YXJkUmVmKEZfKTtDeS5kaXNwbGF5TmFtZT0iTGFya0FsZXJ0RGlhbG9nIjt2YXIgJF89T2JqZWN0LmRlZmluZVByb3BlcnR5LEZlPShhLG8pPT4kXyhhLCJuYW1lIix7dmFsdWU6byxjb25maWd1cmFibGU6ITB9KSxUeT1BbFsiIHN0YXJ0VHJhbnNpdGlvbiAiLnRyaW0oKS50b1N0cmluZygpXXx8KCgpPT57fSksd3k9IlRvYXN0UHJvdmlkZXIiLFtDZixFeSxKX109YXIoIlRvYXN0IiksVGY9e0xlZnQ6ImxlZnQiLFJpZ2h0OiJyaWdodCJ9LFJ5PXtGb3JlZ3JvdW5kOiJmb3JlZ3JvdW5kIn0sW195LHVqXT1NdCgiVG9hc3QiLFtKX10pLFtXXyxXaV09X3kod3kpO2Z1bmN0aW9uIGVjKGEpe3R5cGVvZiBUeT09ImZ1bmN0aW9uIj9UeShhKTphKCl9RmUoZWMsInNjaGVkdWxlVXBkYXRlIik7dmFyIGVPPUZlKGE9Pntjb25zdHtfX3Njb3BlVG9hc3Q6byxsYWJlbDp1PSJOb3RpZmljYXRpb24iLGR1cmF0aW9uOmk9NWUzLHN3aXBlRGlyZWN0aW9uOnM9VGYuUmlnaHQsc3dpcGVUaHJlc2hvbGQ6Zj01MCxhbm5vdW5jZXJDb250YWluZXI6ZCxjaGlsZHJlbjpwfT1hLFt5LGJdPXYudXNlU3RhdGUobnVsbCksW3gsZ109di51c2VTdGF0ZSgwKSxDPXYudXNlUmVmKCExKSx3PXYudXNlQ2FsbGJhY2soVD0+e2VjKCgpPT5iKFQpKX0sW10pLFI9di51c2VDYWxsYmFjaygoKT0+e2VjKCgpPT5nKFQ9PlQrMSkpfSxbXSksRT12LnVzZUNhbGxiYWNrKCgpPT57ZWMoKCk9PmcoVD0+VC0xKSl9LFtdKTtyZXR1cm4gdS50cmltKCl8fGNvbnNvbGUuZXJyb3IoYEludmFsaWQgcHJvcCBcYGxhYmVsXGAgc3VwcGxpZWQgdG8gXGAke3d5fVxgLiBFeHBlY3RlZCBub24tZW1wdHkgXGBzdHJpbmdcYC5gKSxtLmpzeChDZi5Qcm92aWRlcix7c2NvcGU6byxjaGlsZHJlbjptLmpzeChXXyx7c2NvcGU6byxsYWJlbDp1LGR1cmF0aW9uOmksc3dpcGVEaXJlY3Rpb246cyxzd2lwZVRocmVzaG9sZDpmLHRvYXN0Q291bnQ6eCx2aWV3cG9ydDp5LG9uVmlld3BvcnRDaGFuZ2U6dyxvblRvYXN0QWRkOlIsb25Ub2FzdFJlbW92ZTpFLGlzQ2xvc2VQYXVzZWRSZWY6Qyxhbm5vdW5jZXJDb250YWluZXI6ZCxjaGlsZHJlbjpwfSl9KX0sIlRvYXN0UHJvdmlkZXIiKSx0Tz0iVG9hc3RWaWV3cG9ydCIsbk89WyJGOCJdLHdmPSJ0b2FzdC52aWV3cG9ydFBhdXNlIixFZj0idG9hc3Qudmlld3BvcnRSZXN1bWUiLGxPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLGhvdGtleTpzPW5PLGxhYmVsOmY9Ik5vdGlmaWNhdGlvbnMgKHtob3RrZXl9KSIsLi4uZH09byxwPVdpKHRPLGkpLHk9RXkoaSksYj12LnVzZVJlZihudWxsKSx4PXYudXNlUmVmKG51bGwpLGc9di51c2VSZWYobnVsbCksQz12LnVzZVJlZihudWxsKSx3PUVlKHUsQyxwLm9uVmlld3BvcnRDaGFuZ2UpLFI9cy5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLEU9cC50b2FzdENvdW50PjA7di51c2VFZmZlY3QoKCk9Pntjb25zdCBPPUZlKEE9PntzLmxlbmd0aCE9PTAmJnMuZXZlcnkoTT0+QVtNXXx8QS5jb2RlPT09TSkmJkMuY3VycmVudD8uZm9jdXMoKX0sImhhbmRsZUtleURvd24iKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE8pfSxbc10pLHYudXNlRWZmZWN0KCgpPT57Y29uc3QgTz1iLmN1cnJlbnQsQT1DLmN1cnJlbnQ7aWYoRSYmTyYmQSl7Y29uc3QgTj1GZSgoKT0+e2lmKCFwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudCl7Y29uc3QgVT1uZXcgQ3VzdG9tRXZlbnQod2YpO0EuZGlzcGF0Y2hFdmVudChVKSxwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudD0hMH19LCJoYW5kbGVQYXVzZSIpLE09RmUoKCk9PntpZihwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudCl7Y29uc3QgVT1uZXcgQ3VzdG9tRXZlbnQoRWYpO0EuZGlzcGF0Y2hFdmVudChVKSxwLmlzQ2xvc2VQYXVzZWRSZWYuY3VycmVudD0hMX19LCJoYW5kbGVSZXN1bWUiKSxZPUZlKFU9PnshTy5jb250YWlucyhVLnJlbGF0ZWRUYXJnZXQpJiZNKCl9LCJoYW5kbGVGb2N1c091dFJlc3VtZSIpLEg9RmUoKCk9PntPLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxNKCl9LCJoYW5kbGVQb2ludGVyTGVhdmVSZXN1bWUiKTtyZXR1cm4gTy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixOKSxPLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixZKSxPLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixOKSxPLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsSCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLE4pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsTSksKCk9PntPLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLE4pLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLFkpLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE4pLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixIKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsTiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixNKX19fSxbRSxwLmlzQ2xvc2VQYXVzZWRSZWZdKTtjb25zdCBUPXYudXNlQ2FsbGJhY2soKHt0YWJiaW5nRGlyZWN0aW9uOk99KT0+e2NvbnN0IE49eSgpLm1hcChNPT57Y29uc3QgWT1NLnJlZi5jdXJyZW50LEg9W1ksLi4uankoWSldO3JldHVybiBPPT09ImZvcndhcmRzIj9IOkgucmV2ZXJzZSgpfSk7cmV0dXJuKE89PT0iZm9yd2FyZHMiP04ucmV2ZXJzZSgpOk4pLmZsYXQoKX0sW3ldKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9Pntjb25zdCBPPUMuY3VycmVudDtpZihPKXtjb25zdCBBPUZlKE49Pntjb25zdCBNPU4uYWx0S2V5fHxOLmN0cmxLZXl8fE4ubWV0YUtleTtpZihOLmtleT09PSJUYWIiJiYhTSl7Y29uc3QgSD1kb2N1bWVudC5hY3RpdmVFbGVtZW50LFU9Ti5zaGlmdEtleTtpZihOLnRhcmdldD09PU8mJlUpe3guY3VycmVudD8uZm9jdXMoKTtyZXR1cm59Y29uc3QgVz1UKHt0YWJiaW5nRGlyZWN0aW9uOlU/ImJhY2t3YXJkcyI6ImZvcndhcmRzIn0pLG5lPVcuZmluZEluZGV4KGVlPT5lZT09PUgpO25jKFcuc2xpY2UobmUrMSkpP04ucHJldmVudERlZmF1bHQoKTpVP3guY3VycmVudD8uZm9jdXMoKTpnLmN1cnJlbnQ/LmZvY3VzKCl9fSwiaGFuZGxlS2V5RG93biIpO3JldHVybiBPLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEEpLCgpPT5PLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEEpfX0sW3ksVF0pLG0uanN4cyhzVCx7cmVmOmIscm9sZToicmVnaW9uIiwiYXJpYS1sYWJlbCI6Zi5yZXBsYWNlKCJ7aG90a2V5fSIsUiksdGFiSW5kZXg6LTEsc3R5bGU6e3BvaW50ZXJFdmVudHM6RT92b2lkIDA6Im5vbmUifSxjaGlsZHJlbjpbRSYmbS5qc3goT3kse3JlZjp4LG9uRm9jdXNGcm9tT3V0c2lkZVZpZXdwb3J0OigpPT57Y29uc3QgTz1UKHt0YWJiaW5nRGlyZWN0aW9uOiJmb3J3YXJkcyJ9KTtuYyhPKX19KSxtLmpzeChDZi5TbG90LHtzY29wZTppLGNoaWxkcmVuOm0uanN4KENlLm9sLHt0YWJJbmRleDotMSwuLi5kLHJlZjp3fSl9KSxFJiZtLmpzeChPeSx7cmVmOmcsb25Gb2N1c0Zyb21PdXRzaWRlVmlld3BvcnQ6KCk9Pntjb25zdCBPPVQoe3RhYmJpbmdEaXJlY3Rpb246ImJhY2t3YXJkcyJ9KTtuYyhPKX19KV19KX0sIlRvYXN0Vmlld3BvcnQiKSksYU89IlRvYXN0Rm9jdXNQcm94eSIsT3k9di5mb3J3YXJkUmVmKEZlKGZ1bmN0aW9uKG8sdSl7Y29uc3R7X19zY29wZVRvYXN0Omksb25Gb2N1c0Zyb21PdXRzaWRlVmlld3BvcnQ6cywuLi5mfT1vLGQ9V2koYU8saSk7cmV0dXJuIG0uanN4KEZzLHt0YWJJbmRleDowLC4uLmYscmVmOnUsc3R5bGU6e3Bvc2l0aW9uOiJmaXhlZCJ9LG9uRm9jdXM6cD0+e2NvbnN0IHk9cC5yZWxhdGVkVGFyZ2V0OyFkLnZpZXdwb3J0Py5jb250YWlucyh5KSYmcygpfX0pfSwiVG9hc3RGb2N1c1Byb3h5IikpLHRjPSJUb2FzdCIsb089InRvYXN0LnN3aXBlU3RhcnQiLHJPPSJ0b2FzdC5zd2lwZU1vdmUiLGlPPSJ0b2FzdC5zd2lwZUNhbmNlbCIsY089InRvYXN0LnN3aXBlRW5kIix1Tz12LmZvcndhcmRSZWYoRmUoZnVuY3Rpb24obyx1KXtjb25zdHtmb3JjZU1vdW50Omksb3BlbjpzLGRlZmF1bHRPcGVuOmYsb25PcGVuQ2hhbmdlOmQsLi4ucH09byxbeSxiXT1Fbih7cHJvcDpzLGRlZmF1bHRQcm9wOmY/PyEwLG9uQ2hhbmdlOmQsY2FsbGVyOnRjfSk7cmV0dXJuIG0uanN4KG1uLHtwcmVzZW50Oml8fHksY2hpbGRyZW46bS5qc3goZE8se29wZW46eSwuLi5wLHJlZjp1LG9uQ2xvc2U6KCk9PmIoITEpLG9uUGF1c2U6enQoby5vblBhdXNlKSxvblJlc3VtZTp6dChvLm9uUmVzdW1lKSxvblN3aXBlU3RhcnQ6dWUoby5vblN3aXBlU3RhcnQseD0+e3guY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJzdGFydCIpfSksb25Td2lwZU1vdmU6dWUoby5vblN3aXBlTW92ZSx4PT57Y29uc3R7eDpnLHk6Q309eC5kZXRhaWwuZGVsdGE7eC5jdXJyZW50VGFyZ2V0LnNldEF0dHJpYnV0ZSgiZGF0YS1zd2lwZSIsIm1vdmUiKSx4LmN1cnJlbnRUYXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14IixgJHtnfXB4YCkseC5jdXJyZW50VGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteSIsYCR7Q31weGApfSksb25Td2lwZUNhbmNlbDp1ZShvLm9uU3dpcGVDYW5jZWwseD0+e3guY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJjYW5jZWwiKSx4LmN1cnJlbnRUYXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14IikseC5jdXJyZW50VGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteSIpLHguY3VycmVudFRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteCIpLHguY3VycmVudFRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteSIpfSksb25Td2lwZUVuZDp1ZShvLm9uU3dpcGVFbmQseD0+e2NvbnN0e3g6Zyx5OkN9PXguZGV0YWlsLmRlbHRhO3guY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJlbmQiKSx4LmN1cnJlbnRUYXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14IikseC5jdXJyZW50VGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteSIpLHguY3VycmVudFRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteCIsYCR7Z31weGApLHguY3VycmVudFRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteSIsYCR7Q31weGApLGIoITEpfSl9KX0pfSwiVG9hc3QiKSksW3NPLGZPXT1feSh0Yyx7b25DbG9zZSgpe319KSxkTz12LmZvcndhcmRSZWYoRmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9hc3Q6aSx0eXBlOnM9UnkuRm9yZWdyb3VuZCxkdXJhdGlvbjpmLG9wZW46ZCxvbkNsb3NlOnAsb25Fc2NhcGVLZXlEb3duOnksb25QYXVzZTpiLG9uUmVzdW1lOngsb25Td2lwZVN0YXJ0Omcsb25Td2lwZU1vdmU6QyxvblN3aXBlQ2FuY2VsOncsb25Td2lwZUVuZDpSLC4uLkV9PW8sVD1XaSh0YyxpKSxPPUV5KGkpLFtBLE5dPXYudXNlU3RhdGUobnVsbCksTT1FZSh1LE4pLFk9di51c2VSZWYobnVsbCksSD12LnVzZVJlZihudWxsKSxVPWZ8fFQuZHVyYXRpb24sQj12LnVzZVJlZigwKSxKPXYudXNlUmVmKFUpLFc9di51c2VSZWYoMCkse29uVG9hc3RBZGQ6bmUsb25Ub2FzdFJlbW92ZTplZX09VCxjZT16dCgoKT0+e0E/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZULnZpZXdwb3J0Py5mb2N1cygpLHAoKX0pLG1lPXYudXNlQ2FsbGJhY2soUD0+eyFQfHxQPT09MS8wfHwod2luZG93LmNsZWFyVGltZW91dChXLmN1cnJlbnQpLEIuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSxXLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoY2UsUCkpfSxbY2VdKTt2LnVzZUVmZmVjdCgoKT0+e2NvbnN0IFA9VC52aWV3cG9ydDtpZihQKXtjb25zdCAkPUZlKCgpPT57bWUoSi5jdXJyZW50KSx4Py4oKX0sImhhbmRsZVJlc3VtZSIpLEY9RmUoKCk9Pntjb25zdCByZT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1CLmN1cnJlbnQ7Si5jdXJyZW50PUouY3VycmVudC1yZSx3aW5kb3cuY2xlYXJUaW1lb3V0KFcuY3VycmVudCksYj8uKCl9LCJoYW5kbGVQYXVzZSIpO3JldHVybiBQLmFkZEV2ZW50TGlzdGVuZXIod2YsRiksUC5hZGRFdmVudExpc3RlbmVyKEVmLCQpLCgpPT57UC5yZW1vdmVFdmVudExpc3RlbmVyKHdmLEYpLFAucmVtb3ZlRXZlbnRMaXN0ZW5lcihFZiwkKX19fSxbVC52aWV3cG9ydCxVLGIseCxtZV0pLHYudXNlRWZmZWN0KCgpPT57Si5jdXJyZW50PVUsZCYmIVQuaXNDbG9zZVBhdXNlZFJlZi5jdXJyZW50JiZtZShVKX0sW2QsVSxULmlzQ2xvc2VQYXVzZWRSZWYsbWVdKSx2LnVzZUVmZmVjdCgoKT0+KCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KFcuY3VycmVudCl9LFtdKSx2LnVzZUVmZmVjdCgoKT0+KG5lKCksKCk9PmVlKCkpLFtuZSxlZV0pO2NvbnN0IGhlPXYudXNlTWVtbygoKT0+QT9SZihBKTpudWxsLFtBXSk7cmV0dXJuIFQudmlld3BvcnQ/bS5qc3hzKG0uRnJhZ21lbnQse2NoaWxkcmVuOltoZSYmbS5qc3gobU8se19fc2NvcGVUb2FzdDppLHJvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6cz09PVJ5LkZvcmVncm91bmQ/ImFzc2VydGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46aGV9KSxtLmpzeChzTyx7c2NvcGU6aSxvbkNsb3NlOmNlLGNoaWxkcmVuOlphLmNyZWF0ZVBvcnRhbChtLmpzeChDZi5JdGVtU2xvdCx7c2NvcGU6aSxjaGlsZHJlbjptLmpzeChvcix7YXNDaGlsZDohMCxvbkVzY2FwZUtleURvd246dWUoeSxQPT57TygpLnNvbWUoRj0+Ri5yZWYuY3VycmVudD8uY29udGFpbnMoUC50YXJnZXQpKXx8Y2UoKX0pLGNoaWxkcmVuOm0uanN4KENlLmxpLHt0YWJJbmRleDowLCJkYXRhLXN0YXRlIjpkPyJvcGVuIjoiY2xvc2VkIiwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOlQuc3dpcGVEaXJlY3Rpb24sLi4uRSxyZWY6TSxzdHlsZTp7dXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLm8uc3R5bGV9LG9uS2V5RG93bjp1ZShvLm9uS2V5RG93bixQPT57UC5rZXk9PT0iRXNjYXBlIiYmKHk/LihQLm5hdGl2ZUV2ZW50KSxQLm5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fGNlKCkpfSksb25Qb2ludGVyRG93bjp1ZShvLm9uUG9pbnRlckRvd24sUD0+e1AuYnV0dG9uPT09MCYmKFkuY3VycmVudD17eDpQLmNsaWVudFgseTpQLmNsaWVudFl9KX0pLG9uUG9pbnRlck1vdmU6dWUoby5vblBvaW50ZXJNb3ZlLFA9PntpZighWS5jdXJyZW50KXJldHVybjtjb25zdCAkPVAuY2xpZW50WC1ZLmN1cnJlbnQueCxGPVAuY2xpZW50WS1ZLmN1cnJlbnQueSxyZT0hIUguY3VycmVudCxxPVsibGVmdCIsInJpZ2h0Il0uaW5jbHVkZXMoVC5zd2lwZURpcmVjdGlvbikseGU9WyJsZWZ0IiwidXAiXS5pbmNsdWRlcyhULnN3aXBlRGlyZWN0aW9uKT9NYXRoLm1pbjpNYXRoLm1heCxqZT1xP3hlKDAsJCk6MCxZZT1xPzA6eGUoMCxGKSxEPVAucG9pbnRlclR5cGU9PT0idG91Y2giPzEwOjIsWD17eDpqZSx5OlllfSxLPXtvcmlnaW5hbEV2ZW50OlAsZGVsdGE6WH07cmU/KEguY3VycmVudD1YLGdyKHJPLEMsSyx7ZGlzY3JldGU6ITF9KSk6QXkoWCxULnN3aXBlRGlyZWN0aW9uLEQpPyhILmN1cnJlbnQ9WCxncihvTyxnLEsse2Rpc2NyZXRlOiExfSksUC50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpKTooTWF0aC5hYnMoJCk+RHx8TWF0aC5hYnMoRik+RCkmJihZLmN1cnJlbnQ9bnVsbCl9KSxvblBvaW50ZXJVcDp1ZShvLm9uUG9pbnRlclVwLFA9Pntjb25zdCAkPUguY3VycmVudCxGPVAudGFyZ2V0O2lmKEYuaGFzUG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpJiZGLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShQLnBvaW50ZXJJZCksSC5jdXJyZW50PW51bGwsWS5jdXJyZW50PW51bGwsJCl7Y29uc3QgcmU9UC5jdXJyZW50VGFyZ2V0LHE9e29yaWdpbmFsRXZlbnQ6UCxkZWx0YTokfTtBeSgkLFQuc3dpcGVEaXJlY3Rpb24sVC5zd2lwZVRocmVzaG9sZCk/Z3IoY08sUixxLHtkaXNjcmV0ZTohMH0pOmdyKGlPLHcscSx7ZGlzY3JldGU6ITB9KSxyZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseGU9PnhlLnByZXZlbnREZWZhdWx0KCkse29uY2U6ITB9KX19KX0pfSl9KSxULnZpZXdwb3J0KX0pXX0pOm51bGx9LCJUb2FzdEltcGwiKSksbU89RmUoYT0+e2NvbnN0e19fc2NvcGVUb2FzdDpvLGNoaWxkcmVuOnUsLi4uaX09YSxzPVdpKHRjLG8pLFtmLGRdPXYudXNlU3RhdGUoITEpLFtwLHldPXYudXNlU3RhdGUoITEpO3JldHVybiBOeSgoKT0+ZCghMCkpLHYudXNlRWZmZWN0KCgpPT57Y29uc3QgYj13aW5kb3cuc2V0VGltZW91dCgoKT0+eSghMCksMWUzKTtyZXR1cm4oKT0+d2luZG93LmNsZWFyVGltZW91dChiKX0sW10pLHA/bnVsbDptLmpzeChzcix7YXNDaGlsZDohMCxjb250YWluZXI6cy5hbm5vdW5jZXJDb250YWluZXJ8fHZvaWQgMCxjaGlsZHJlbjptLmpzeChGcyx7Li4uaSxjaGlsZHJlbjpmJiZtLmpzeHMobS5GcmFnbWVudCx7Y2hpbGRyZW46W3MubGFiZWwsIiAiLHVdfSl9KX0pfSwiVG9hc3RBbm5vdW5jZSIpLGhPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLC4uLnN9PW87cmV0dXJuIG0uanN4KENlLmRpdix7Li4ucyxyZWY6dX0pfSwiVG9hc3RUaXRsZSIpKSxwTz12LmZvcndhcmRSZWYoRmUoZnVuY3Rpb24obyx1KXtjb25zdHtfX3Njb3BlVG9hc3Q6aSwuLi5zfT1vO3JldHVybiBtLmpzeChDZS5kaXYsey4uLnMscmVmOnV9KX0sIlRvYXN0RGVzY3JpcHRpb24iKSksdk89IlRvYXN0Q2xvc2UiLGdPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLC4uLnN9PW8sZj1mTyh2TyxpKTtyZXR1cm4gbS5qc3goeU8se2FzQ2hpbGQ6ITAsY2hpbGRyZW46bS5qc3goQ2UuYnV0dG9uLHt0eXBlOiJidXR0b24iLC4uLnMscmVmOnUsb25DbGljazp1ZShvLm9uQ2xpY2ssZi5vbkNsb3NlKX0pfSl9LCJUb2FzdENsb3NlIikpLHlPPXYuZm9yd2FyZFJlZihGZShmdW5jdGlvbihvLHUpe2NvbnN0e19fc2NvcGVUb2FzdDppLGFsdFRleHQ6cywuLi5mfT1vO3JldHVybiBtLmpzeChDZS5kaXYseyJkYXRhLXJhZGl4LXRvYXN0LWFubm91bmNlLWV4Y2x1ZGUiOiIiLCJkYXRhLXJhZGl4LXRvYXN0LWFubm91bmNlLWFsdCI6c3x8dm9pZCAwLC4uLmYscmVmOnV9KX0sIlRvYXN0QW5ub3VuY2VFeGNsdWRlIikpO2Z1bmN0aW9uIFJmKGEpe2NvbnN0IG89W107cmV0dXJuIEFycmF5LmZyb20oYS5jaGlsZE5vZGVzKS5mb3JFYWNoKGk9PntpZihpLm5vZGVUeXBlPT09aS5URVhUX05PREUmJmkudGV4dENvbnRlbnQmJm8ucHVzaChpLnRleHRDb250ZW50KSxEeShpKSl7Y29uc3Qgcz1pLmFyaWFIaWRkZW58fGkuaGlkZGVufHxpLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSIsZj1pLmRhdGFzZXQucmFkaXhUb2FzdEFubm91bmNlRXhjbHVkZT09PSIiO2lmKCFzKWlmKGYpe2NvbnN0IGQ9aS5kYXRhc2V0LnJhZGl4VG9hc3RBbm5vdW5jZUFsdDtkJiZvLnB1c2goZCl9ZWxzZSBvLnB1c2goLi4uUmYoaSkpfX0pLG99RmUoUmYsImdldEFubm91bmNlVGV4dENvbnRlbnQiKTtmdW5jdGlvbiBncihhLG8sdSx7ZGlzY3JldGU6aX0pe2NvbnN0IHM9dS5vcmlnaW5hbEV2ZW50LmN1cnJlbnRUYXJnZXQsZj1uZXcgQ3VzdG9tRXZlbnQoYSx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGRldGFpbDp1fSk7byYmcy5hZGRFdmVudExpc3RlbmVyKGEsbyx7b25jZTohMH0pLGk/eGkocyxmKTpzLmRpc3BhdGNoRXZlbnQoZil9RmUoZ3IsImhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQiKTt2YXIgQXk9RmUoKGEsbyx1PTApPT57Y29uc3QgaT1NYXRoLmFicyhhLngpLHM9TWF0aC5hYnMoYS55KSxmPWk+cztyZXR1cm4gbz09PVRmLkxlZnR8fG89PT1UZi5SaWdodD9mJiZpPnU6IWYmJnM+dX0sImlzRGVsdGFJbkRpcmVjdGlvbiIpO2Z1bmN0aW9uIE55KGE9KCk9Pnt9KXtjb25zdCBvPXp0KGEpO250KCgpPT57bGV0IHU9MCxpPTA7cmV0dXJuIHU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+aT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pKSwoKT0+e3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh1KSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaSl9fSxbb10pfUZlKE55LCJ1c2VOZXh0RnJhbWUiKTtmdW5jdGlvbiBEeShhKXtyZXR1cm4gYS5ub2RlVHlwZT09PWEuRUxFTUVOVF9OT0RFfUZlKER5LCJpc0hUTUxFbGVtZW50Iik7ZnVuY3Rpb24gankoYSl7Y29uc3Qgbz1bXSx1PWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoYSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTpGZShpPT57Y29uc3Qgcz1pLnRhZ05hbWU9PT0iSU5QVVQiJiZpLnR5cGU9PT0iaGlkZGVuIjtyZXR1cm4gaS5kaXNhYmxlZHx8aS5oaWRkZW58fHM/Tm9kZUZpbHRlci5GSUxURVJfU0tJUDppLnRhYkluZGV4Pj0wP05vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDpOb2RlRmlsdGVyLkZJTFRFUl9TS0lQfSwiYWNjZXB0Tm9kZSIpfSk7Zm9yKDt1Lm5leHROb2RlKCk7KW8ucHVzaCh1LmN1cnJlbnROb2RlKTtyZXR1cm4gb31GZShqeSwiZ2V0VGFiYmFibGVDYW5kaWRhdGVzIik7ZnVuY3Rpb24gbmMoYSl7Y29uc3Qgbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiBhLnNvbWUodT0+dT09PW8/ITA6KHUuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bykpfUZlKG5jLCJmb2N1c0ZpcnN0Iik7Y29uc3QgTXk9di5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIGJPKCl7Y29uc3QgYT12LnVzZUNvbnRleHQoTXkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigidXNlTGFya1RvYXN0IHBoYWkgZHVuZyB0cm9uZyBMYXJrVG9hc3RQcm92aWRlciIpO3JldHVybiBhfWZ1bmN0aW9uIHhPKHtjbGFzc05hbWU6YSwuLi5vfSx1KXtyZXR1cm4gbS5qc3gobE8se3JlZjp1LGNsYXNzTmFtZTprZSgiZml4ZWQgYm90dG9tLTQgZW5kLTQgei01MCBmbGV4IHctYXV0byBmbGV4LWNvbCBnYXAtMiBtYXgtc206Ym90dG9tLTQgbWF4LXNtOmxlZnQtNCBtYXgtc206cmlnaHQtNCIsYSksLi4ub30pfWNvbnN0IHp5PXYuZm9yd2FyZFJlZih4Tyk7enkuZGlzcGxheU5hbWU9IkxhcmtUb2FzdFZpZXdwb3J0Ijtjb25zdCBreT0oe2NoaWxkcmVuOmF9KT0+e2NvbnN0W28sdV09di51c2VTdGF0ZShbXSksaT12LnVzZVJlZigwKSxzPXYudXNlQ2FsbGJhY2socD0+e2kuY3VycmVudCs9MTtjb25zdCB5PXtpZDppLmN1cnJlbnQsdGl0bGU6cC50aXRsZSxkZXNjcmlwdGlvbjpwLmRlc2NyaXB0aW9uLHZhcmlhbnQ6cC52YXJpYW50Pz8iZGVmYXVsdCJ9O3UoYj0+Wy4uLmIseV0pfSxbXSksZj12LnVzZUNhbGxiYWNrKHA9Pnt1KHk9PnkuZmlsdGVyKGI9PmIuaWQhPT1wKSl9LFtdKSxkPXYudXNlTWVtbygoKT0+KHt0b2FzdDpzfSksW3NdKTtyZXR1cm4gbS5qc3goTXkuUHJvdmlkZXIse3ZhbHVlOmQsY2hpbGRyZW46bS5qc3hzKGVPLHtkdXJhdGlvbjo0ZTMsc3dpcGVEaXJlY3Rpb246InJpZ2h0IixjaGlsZHJlbjpbYSxvLm1hcChwPT5tLmpzeHModU8se29uT3BlbkNoYW5nZTp5PT57eXx8ZihwLmlkKX0sY2xhc3NOYW1lOmtlKCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLWxhcmstbjkwMCBweC00IHB5LTIuNSB0ZXh0LXNtIHRleHQtd2hpdGUgc2hhZG93LVt2YXIoLS1zaGFkb3ctb3ZlcmxheSldIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW0tc2xpZGUtdXAgbWF4LXNtOnJvdW5kZWQtZnVsbCIpLGNoaWxkcmVuOltwLnZhcmlhbnQ9PT0ic3VjY2VzcyImJm0uanN4KHoxLHtjbGFzc05hbWU6InNpemUtNCBzaHJpbmstMCB0ZXh0LWxhcmstc3VjY2VzcyIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxwLnZhcmlhbnQ9PT0iZGFuZ2VyIiYmbS5qc3goTDEse2NsYXNzTmFtZToic2l6ZS00IHNocmluay0wIHRleHQtbGFyay1kYW5nZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W20uanN4KGhPLHtjbGFzc05hbWU6InRydW5jYXRlIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpwLnRpdGxlfSkscC5kZXNjcmlwdGlvbiYmbS5qc3gocE8se2NsYXNzTmFtZToidGV4dC13aGl0ZS84MCIsY2hpbGRyZW46cC5kZXNjcmlwdGlvbn0pXX0pLG0uanN4KGdPLHsiYXJpYS1sYWJlbCI6IkRvbmcgdGhvbmcgYmFvIixjbGFzc05hbWU6Im1zLWF1dG8gc2hyaW5rLTAgcm91bmRlZCB0ZXh0LXdoaXRlLzcwIGhvdmVyOnRleHQtd2hpdGUiLGNoaWxkcmVuOm0uanN4KFYxLHtjbGFzc05hbWU6InNpemUtNCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX0pXX0scC5pZCkpLG0uanN4KHp5LHt9KV19KX0pfTtreS5kaXNwbGF5TmFtZT0iTGFya1RvYXN0UHJvdmlkZXIiO2NvbnN0IFNPPXtzbToic2l6ZS00IixtZDoic2l6ZS02In07ZnVuY3Rpb24gX2Yoe3NpemU6YT0ibWQiLGxhYmVsOm8sY2xhc3NOYW1lOnV9KXtyZXR1cm4gbS5qc3goSGgse3JvbGU6InN0YXR1cyIsImFyaWEtbGFiZWwiOm8sY2xhc3NOYW1lOmtlKCJhbmltYXRlLXNwaW4gdGV4dC1sYXJrLW41MDAiLFNPW2FdLHUpfSl9ZnVuY3Rpb24gTHkoe2ljb246YSx0aXRsZTpvLGRlc2NyaXB0aW9uOnUsYWN0aW9uOmksY2xhc3NOYW1lOnN9KXtyZXR1cm4gbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6a2UoImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0yIHB5LTEwIHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLHMpLGNoaWxkcmVuOlthJiZtLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1sYXJrLW40MDAgWyZfc3ZnXTpzaXplLTYiLGNoaWxkcmVuOmF9KSxtLmpzeCgicCIse2NsYXNzTmFtZToiZm9udC1tZWRpdW0gdGV4dC1sYXJrLW43MDAiLGNoaWxkcmVuOm99KSx1JiZtLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOnV9KSxpJiZtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0yIixjaGlsZHJlbjppfSldfSl9ZnVuY3Rpb24gQ08oe2NoaWxkcmVuOmEsY2xhc3NOYW1lOm99KXtyZXR1cm4gbS5qc3goImRpdiIse2NsYXNzTmFtZTprZSgibWluLWgtMCBmbGV4LTEgb3ZlcmZsb3cteC1hdXRvIixvKSxjaGlsZHJlbjphfSl9ZnVuY3Rpb24gVE8oe2NoaWxkcmVuOmEsY2xhc3NOYW1lOm99KXtyZXR1cm4gbS5qc3goImRpdiIse2NsYXNzTmFtZTprZSgiZmxleCB3LWZ1bGwgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWxhcmstbjIwMCBiZy1icmFuZC1wcmltYXJ5IHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtbGFyay1uNjAwIHNtOmp1c3RpZnktZW5kIixvKSxjaGlsZHJlbjphfSl9Y29uc3QgT2Y9e2xlZnQ6InRleHQtbGVmdCIsY2VudGVyOiJ0ZXh0LWNlbnRlciIscmlnaHQ6InRleHQtcmlnaHQifTtmdW5jdGlvbiB3TyhhLG8pe2NvbnN0IHU9YVtvXTtyZXR1cm4gdT09bnVsbHx8dHlwZW9mIHU9PSJib29sZWFuIj9udWxsOnV9ZnVuY3Rpb24gRU8oe2NvbHVtbnM6YSxyb3dzOm8scm93S2V5OnUsaXNMb2FkaW5nOmksZW1wdHlTdGF0ZTpzLGNsYXNzTmFtZTpmfSl7Y29uc3QgZD0haSYmby5sZW5ndGg9PT0wO3JldHVybiBtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4taC0wIGZsZXgtMSBvdmVyZmxvdy14LWF1dG8iLGNoaWxkcmVuOm0uanN4cygidGFibGUiLHtjbGFzc05hbWU6a2UoInctZnVsbCBtaW4tdy1tYXggYm9yZGVyLWNvbGxhcHNlIixmKSwiYXJpYS1idXN5IjppPyJ0cnVlIjp2b2lkIDAsY2hpbGRyZW46W2kmJm0uanN4KCJjYXB0aW9uIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjoixJBhbmcgdOG6o2kifSksbS5qc3goInRoZWFkIix7Y2hpbGRyZW46bS5qc3goInRyIix7Y2xhc3NOYW1lOiJib3JkZXItYiBib3JkZXItbGFyay1uMzAwIixjaGlsZHJlbjphLm1hcChwPT5tLmpzeCgidGgiLHtzY29wZToiY29sIixzdHlsZTpwLndpZHRoP3t3aWR0aDpwLndpZHRofTp2b2lkIDAsY2xhc3NOYW1lOmtlKCJzdGlja3kgdG9wLTAgei0xMCBoLTEyIGJnLWJyYW5kLXByaW1hcnkgcHgtMyBhbGlnbi1taWRkbGUgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjYwMCIsT2ZbcC5hbGlnbj8/ImxlZnQiXSxwLnBpbj09PSJyaWdodCImJiJzdGlja3kgcmlnaHQtMCB6LTIwIG1pbi13LXB4IHdoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1zIGJvcmRlci1sYXJrLW4yMDAiKSxjaGlsZHJlbjpwLmhlYWRlcn0scC5rZXkpKX0pfSksbS5qc3hzKCJ0Ym9keSIse2NoaWxkcmVuOltpJiZbMCwxLDJdLm1hcChwPT5tLmpzeCgidHIiLHtjbGFzc05hbWU6ImFuaW1hdGUtcHVsc2UgYm9yZGVyLWIgYm9yZGVyLWxhcmstbjIwMCBiZy1sYXJrLW41MCIsY2hpbGRyZW46YS5tYXAoeT0+bS5qc3goInRkIix7Y2xhc3NOYW1lOmtlKCJoLVs0N3B4XSBweC0zIGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixPZlt5LmFsaWduPz8ibGVmdCJdLHkucGluPT09InJpZ2h0IiYmInN0aWNreSByaWdodC0wIHotMTAgbWluLXctcHggYmctYnJhbmQtcHJpbWFyeSB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItcyBib3JkZXItbGFyay1uMjAwIiksY2hpbGRyZW46bS5qc3goImRpdiIse2NsYXNzTmFtZToiaC0zIHctMi8zIHJvdW5kZWQgYmctbGFyay1uMjAwIn0pfSx5LmtleSkpfSxgc2tlbGV0b24tJHtwfWApKSxkJiZtLmpzeCgidHIiLHtjbGFzc05hbWU6ImJvcmRlci1iIGJvcmRlci1sYXJrLW4yMDAiLGNoaWxkcmVuOm0uanN4KCJ0ZCIse2NvbFNwYW46YS5sZW5ndGgsY2xhc3NOYW1lOiJweC0zIHB5LTggdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46cz8/Iktow7RuZyBjw7MgZOG7ryBsaeG7h3UifSl9KSwhaSYmIWQmJm8ubWFwKHA9Pm0uanN4KCJ0ciIse2NsYXNzTmFtZToiYm9yZGVyLWIgYm9yZGVyLWxhcmstbjIwMCIsY2hpbGRyZW46YS5tYXAoeT0+bS5qc3goInRkIix7Y2xhc3NOYW1lOmtlKCJoLVs0N3B4XSBweC0zIGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtbGFyay1uOTAwIixPZlt5LmFsaWduPz8ibGVmdCJdLHkucGluPT09InJpZ2h0IiYmInN0aWNreSByaWdodC0wIHotMTAgbWluLXctcHggYmctYnJhbmQtcHJpbWFyeSB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItcyBib3JkZXItbGFyay1uMjAwIiksY2hpbGRyZW46eS5jZWxsP3kuY2VsbChwKTp3TyhwLHkua2V5KX0seS5rZXkpKX0sdShwKSkpXX0pXX0pfSl9ZnVuY3Rpb24gUk8oe2NoaWxkcmVuOmEsY2xhc3NOYW1lOm8sdGl0bGU6dX0pe3JldHVybiBtLmpzeCgiZGl2Iix7dGl0bGU6dSxjbGFzc05hbWU6a2UoImxpbmUtY2xhbXAtMiBtYXgtdy02NCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vcm1hbCB0ZXh0LXN0YXJ0IixvKSxjaGlsZHJlbjphfSl9Y29uc3QgbGM9T2JqZWN0LmFzc2lnbihFTyx7V3JhcHBlcjpDTyxGb290ZXI6VE99KSxfTz1bNTAsMTAwLDIwMF07ZnVuY3Rpb24gT08oYSxvKXtyZXR1cm4gbzw9Nz9BcnJheS5mcm9tKHtsZW5ndGg6b30sKHUsaSk9PmkrMSk6YTw9ND9bMSwyLDMsNCw1LCJlbGxpcHNpcyIsb106YT49by0zP1sxLCJlbGxpcHNpcyIsby00LG8tMyxvLTIsby0xLG9dOlsxLCJlbGxpcHNpcyIsYS0xLGEsYSsxLCJlbGxpcHNpcyIsb119Y29uc3QgQU89ImlubGluZS1mbGV4IHNpemUtNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtYnJhbmQtbGluayBob3ZlcjpiZy1sYXJrLW41MCI7ZnVuY3Rpb24gTk8oe3BhZ2U6YSx0b3RhbDpvLHBhZ2VTaXplOnUsb25QYWdlQ2hhbmdlOmkscGFnZVNpemVzOnM9X08sb25QYWdlU2l6ZUNoYW5nZTpmLGlzTG9hZGluZzpkLGNsYXNzTmFtZTpwfSx5KXtjb25zdCBiPU1hdGgubWF4KDEsTWF0aC5jZWlsKG8vdSkpLHg9T08oYSxiKTtyZXR1cm4gbS5qc3hzKCJkaXYiLHtyZWY6eSxjbGFzc05hbWU6a2UoImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtNCIscCksY2hpbGRyZW46W2Q/bS5qc3goX2Yse3NpemU6InNtIixsYWJlbDoixJBhbmcgdOG6o2kgZOG7ryBsaeG7h3UifSk6bnVsbCxtLmpzeHMoIm5hdiIseyJhcmlhLWxhYmVsIjoiUGjDom4gdHJhbmciLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEiLGNoaWxkcmVuOlttLmpzeChEZSx7aXNJY29uT25seTohMCx2YXJpYW50OiJnaG9zdCIsc2l6ZToic20iLCJhcmlhLWxhYmVsIjoiVHJhbmcgdHLGsOG7m2MiLGRpc2FibGVkOmE8PTEsb25DbGljazooKT0+aShhLTEpLGNoaWxkcmVuOm0uanN4KGoxLHtjbGFzc05hbWU6InNpemUtNCIsc3Ryb2tlV2lkdGg6Mi40fSl9KSx4Lm1hcCgoZyxDKT0+Zz09PSJlbGxpcHNpcyI/bS5qc3goInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InB4LTEgdGV4dC1sYXJrLW40MDAiLGNoaWxkcmVuOiLigKYifSxgZ2FwLSR7Q31gKTptLmpzeCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6YFRyYW5nICR7Z31gLCJhcmlhLWN1cnJlbnQiOmc9PT1hPyJwYWdlIjp2b2lkIDAsb25DbGljazooKT0+aShnKSxjbGFzc05hbWU6a2UoQU8sZz09PWEmJiJiZy1icmFuZC1zZWNvbmRhcnkgZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIiksY2hpbGRyZW46Z30sZykpLG0uanN4KERlLHtpc0ljb25Pbmx5OiEwLHZhcmlhbnQ6Imdob3N0IixzaXplOiJzbSIsImFyaWEtbGFiZWwiOiJUcmFuZyBzYXUiLGRpc2FibGVkOmE+PWIsb25DbGljazooKT0+aShhKzEpLGNoaWxkcmVuOm0uanN4KE0xLHtjbGFzc05hbWU6InNpemUtNCIsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KSxtLmpzeCh1byx7YXJpYUxhYmVsOiJT4buRIGTDsm5nIG3hu5dpIHRyYW5nIixvcHRpb25zOnMubWFwKGc9Pih7dmFsdWU6U3RyaW5nKGcpLGxhYmVsOlN0cmluZyhnKX0pKSx2YWx1ZTpTdHJpbmcodSksb25WYWx1ZUNoYW5nZTpnPT5mPy4oTnVtYmVyKGcpKSxjbGFzc05hbWU6InctMjAifSldfSl9Y29uc3QgVXk9di5mb3J3YXJkUmVmKE5PKTtVeS5kaXNwbGF5TmFtZT0iTGFya1BhZ2luYXRpb24iO2NvbnN0IERPPXtibHVlOiJiZy1sYXJrLWFjY2VudC1zb2Z0IHRleHQtYnJhbmQtbGluayIsZ3JheToiYmctbGFyay1uOTAwLzEwIHRleHQtbGFyay1uNjAwIixzdWNjZXNzOiJiZy1sYXJrLXN1Y2Nlc3MvMTUgdGV4dC1sYXJrLXN1Y2Nlc3MiLGRhbmdlcjoiYmctbGFyay1kYW5nZXIvMTUgdGV4dC1sYXJrLWRhbmdlciIsd2FybmluZzoiYmctYnJhbmQtc3VwcG9ydC8xNSB0ZXh0LWJyYW5kLXN1cHBvcnQifSxqTz17c206ImgtNCBweC0xIHRleHQtWzEwcHhdIixtZDoiaC02IHB4LTIgdGV4dC14cyJ9O2Z1bmN0aW9uIE1PKHtjb2xvcjphPSJibHVlIixzaXplOm89Im1kIixjbGFzc05hbWU6dSxjaGlsZHJlbjppLC4uLnN9LGYpe3JldHVybiBtLmpzeCgic3BhbiIse3JlZjpmLGNsYXNzTmFtZTprZSgiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtc20gZm9udC1tZWRpdW0gd2hpdGVzcGFjZS1ub3dyYXAiLERPW2FdLGpPW29dLHUpLC4uLnMsY2hpbGRyZW46aX0pfWNvbnN0IE9uPXYuZm9yd2FyZFJlZihNTyk7T24uZGlzcGxheU5hbWU9IkxhcmtUYWciO2Z1bmN0aW9uIHpPKHtjb3VudDphLG1heDpvPTk5LGRvdDp1LGNsYXNzTmFtZTppLC4uLnN9LGYpe2lmKHUpcmV0dXJuIG0uanN4KCJzcGFuIix7cmVmOmYsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOmtlKCJpbmxpbmUtYmxvY2sgc2l6ZS0yIHJvdW5kZWQtZnVsbCBiZy1sYXJrLWRhbmdlciIsaSksLi4uc30pO2lmKGE9PT12b2lkIDApcmV0dXJuIG51bGw7Y29uc3QgZD1hPm8/YCR7b30rYDpgJHthfWA7cmV0dXJuIG0uanN4KCJzcGFuIix7cmVmOmYsY2xhc3NOYW1lOmtlKCJpbmxpbmUtZmxleCBoLVsxNHB4XSBtaW4tdy1bMTRweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1sYXJrLWRhbmdlciBweC0xIHRleHQtWzEwcHhdIGxlYWRpbmctWzEzcHhdIGZvbnQtbWVkaXVtIHRleHQtW3ZhcigtLWRhbmdlci1mb3JlZ3JvdW5kKV0iLGkpLC4uLnMsY2hpbGRyZW46ZH0pfWNvbnN0IHlyPXYuZm9yd2FyZFJlZih6Tyk7eXIuZGlzcGxheU5hbWU9IkxhcmtCYWRnZSI7Y29uc3QgSHk9e3NtOiJzaXplLTUgdGV4dC1bMTBweF0iLG1kOiJzaXplLTggdGV4dC14cyIsbGc6InNpemUtOSB0ZXh0LXhzIn07ZnVuY3Rpb24ga08oYSl7aWYoIWEpcmV0dXJuIlUiO2NvbnN0IG89YS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gby5sZW5ndGg9PT0wPyJVIjpvLmxlbmd0aD09PTE/KG9bMF1bMF0/PyJVIikudG9VcHBlckNhc2UoKTpgJHtvWzBdWzBdPz8iIn0ke29bby5sZW5ndGgtMV1bMF0/PyIifWAudG9VcHBlckNhc2UoKXx8IlUifWZ1bmN0aW9uIExPKHtuYW1lOmEsc3JjOm8sdGVhbTp1LHNpemU6aSxjbGFzc05hbWU6cyxjaGlsZHJlbjpmLC4uLmR9LHApe2NvbnN0IHk9aT8/KHU/ImxnIjoibWQiKSxiPSJyb3VuZGVkLWZ1bGwiO3JldHVybiBvP20uanN4KCJzcGFuIix7cmVmOnAsY2xhc3NOYW1lOmtlKCJncmlkIHNocmluay0wIHBsYWNlLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gYmctYnJhbmQtc2Vjb25kYXJ5IGZvbnQtYm9sZCB0ZXh0LXdoaXRlIixiLEh5W3ldLHMpLC4uLmQsY2hpbGRyZW46Zj8/bS5qc3goImltZyIse3NyYzpvLGFsdDphPz8iIixjbGFzc05hbWU6InNpemUtZnVsbCByb3VuZGVkLVtpbmhlcml0XSBvYmplY3QtY292ZXIifSl9KTptLmpzeCgic3BhbiIse3JlZjpwLHJvbGU6ImltZyIsImFyaWEtbGFiZWwiOmE/PyJOZ8aw4budaSBkw7luZyIsY2xhc3NOYW1lOmtlKCJncmlkIHNocmluay0wIHBsYWNlLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gYmctYnJhbmQtc2Vjb25kYXJ5IGZvbnQtYm9sZCB0ZXh0LXdoaXRlIixiLEh5W3ldLHMpLC4uLmQsY2hpbGRyZW46Zj8/a08oYSl9KX1jb25zdCBmbD12LmZvcndhcmRSZWYoTE8pO2ZsLmRpc3BsYXlOYW1lPSJMYXJrQXZhdGFyIjtjb25zdCBVTz1be2lkOiJQRC0xMDQyIixraGFjaDoiTmd1eeG7hW4gxJDhu6ljIFRy4buNbmcgQW5oIixjdWFIYW5nOiJMaWx5IFF14bqtbiAxIixuZ2F5OiIwNC8xMS8yMDI2Iixkb2FuaFRodToiMTIuNDUwLjAwMCIsdHJhbmdUaGFpOiJob2FuIixnaGlDaHU6IsSQxqFuIGvDrW5oIGPhuq1uLCBj4bqvdCB0csOybmcgxJHhu5VpIG3DoHUsIGdpYW8gdHJvbmcgbmfDoHkuIEtow6FjaCBo4bq5biBs4bqleSBsw7pjIDE3aC4ifSx7aWQ6IlBELTEwNDEiLGtoYWNoOiJUcuG6p24gTWluaCBUw7luZyIsY3VhSGFuZzoiTGlseSBUaOG7pyDEkOG7qWMiLG5nYXk6IjA0LzExLzIwMjYiLGRvYW5oVGh1OiI4LjkwMC4wMDAiLHRyYW5nVGhhaToiY2hvIixnaGlDaHU6IkNo4budIGtow6FjaCB4w6FjIG5o4bqtbiBn4buNbmcgdGl0YW4sIMSRw6MgYsOhbyBnacOhIDIgbOG7sWEgY2jhu41uLiJ9LHtpZDoiUEQtMTA0MCIsa2hhY2g6IkzDqiBUaHUgSMOgIixjdWFIYW5nOiJMaWx5IFF14bqtbiA3IixuZ2F5OiIwMy8xMS8yMDI2Iixkb2FuaFRodToiNS4yMDAuMDAwIix0cmFuZ1RoYWk6ImhvYW4iLGdoaUNodToixJDGoW4ga8OtbmggcsOibSwga2jDtG5nIGPhuq90IHRyw7JuZy4ifSx7aWQ6IlBELTEwMzkiLGtoYWNoOiJQaOG6oW0gUXXhu5FjIELhuqNvIixjdWFIYW5nOiJMaWx5IFF14bqtbiAxIixuZ2F5OiIwMy8xMS8yMDI2Iixkb2FuaFRodToiMCIsdHJhbmdUaGFpOiJodXkiLGdoaUNodToiS2jDoWNoIGh14bu3IGRvIGtow7RuZyDEkcO6bmcgxJHhu5ksIMSRw6MgaG/DoG4gY+G7jWMuIn1dLEhPPXtob2FuOntjb2xvcjoic3VjY2VzcyIsdGV4dDoiSG/DoG4gdOG6pXQifSxjaG86e2NvbG9yOiJ3YXJuaW5nIix0ZXh0OiJDaOG7nSB4w6FjIG5o4bqtbiJ9LGh1eTp7Y29sb3I6ImRhbmdlciIsdGV4dDoixJDDoyBodeG7tyJ9fTtmdW5jdGlvbiBkbCh7dGl0bGU6YSxoaW50Om8sY2hpbGRyZW46dSxjbGFzc05hbWU6aT0iIn0pe3JldHVybiBtLmpzeHMoInNlY3Rpb24iLHtjbGFzc05hbWU6YG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1sYXJrLW4yMDAgYmctYnJhbmQtcHJpbWFyeSBwLTQgJHtpfWAsY2hpbGRyZW46W20uanN4cygiaGVhZGVyIix7Y2xhc3NOYW1lOiJtYi0zIGZsZXggZmxleC13cmFwIGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiBnYXAtMSIsY2hpbGRyZW46W20uanN4KCJoMyIse2NsYXNzTmFtZToidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphfSksbyYmbS5qc3goInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOm99KV19KSx1XX0pfWZ1bmN0aW9uIHBuKHtjaGlsZHJlbjphLGNsYXNzTmFtZTpvPSIifSl7cmV0dXJuIG0uanN4KCJkaXYiLHtjbGFzc05hbWU6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMiAke299YCxjaGlsZHJlbjphfSl9ZnVuY3Rpb24gQk8oKXtyZXR1cm4gbS5qc3hzKGRsLHt0aXRsZToiQnV0dG9uIixoaW50OiI3IHZhcmlhbnQgw5cgNCBzaXplLCAzMiBt4bq3YyDEkeG7i25oLCA0MCBmb3JtIixjaGlsZHJlbjpbbS5qc3hzKHBuLHtjaGlsZHJlbjpbbS5qc3goRGUse3ZhcmlhbnQ6InByaW1hcnkiLGNoaWxkcmVuOiJMxrB1IHBoaeG6v3UifSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsY2hpbGRyZW46Ikh14bu3In0pLG0uanN4KERlLHt2YXJpYW50OiJzZWNvbmRhcnlCbHVlIixjaGlsZHJlbjoiWGVtIGNoaSB0aeG6v3QifSksbS5qc3goRGUse3ZhcmlhbnQ6Imdob3N0IixjaGlsZHJlbjoiQuG7jyBs4buNYyJ9KSxtLmpzeChEZSx7dmFyaWFudDoidGV4dCIsY2hpbGRyZW46IlhlbSB04bqldCBj4bqjIn0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0yIixjaGlsZHJlbjpbbS5qc3goRGUse3ZhcmlhbnQ6InByaW1hcnlFcnJvciIsY2hpbGRyZW46Ilhvw6EifSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeUVycm9yIixjaGlsZHJlbjoiWG/DoSBwaGnhur91In0pLG0uanN4KERlLHt2YXJpYW50OiJwcmltYXJ5Iixpc1BlbmRpbmc6ITAsY2hpbGRyZW46IsSQYW5nIGzGsHUifSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsZGlzYWJsZWQ6ITAsY2hpbGRyZW46Iktow7RuZyBkw7luZyDEkcaw4bujYyJ9KV19KSxtLmpzeHMocG4se2NsYXNzTmFtZToibXQtMiIsY2hpbGRyZW46W20uanN4KERlLHtzaXplOiJ4cyIsY2hpbGRyZW46InhzIDI0In0pLG0uanN4KERlLHtzaXplOiJzbSIsY2hpbGRyZW46InNtIDI4In0pLG0uanN4KERlLHtzaXplOiJtZCIsdmFyaWFudDoicHJpbWFyeSIsY2hpbGRyZW46Im1kIDMyIn0pLG0uanN4KERlLHtzaXplOiJsZyIsdmFyaWFudDoicHJpbWFyeSIsY2hpbGRyZW46ImxnIDQwIn0pLG0uanN4KFhpLHtjb250ZW50OiJUaMOqbSBwaGnhur91IG3hu5tpIixjaGlsZHJlbjptLmpzeChEZSx7c2l6ZToibWQiLGlzSWNvbk9ubHk6ITAsImFyaWEtbGFiZWwiOiJUaMOqbSBwaGnhur91IixjaGlsZHJlbjptLmpzeChZaCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KX0pLG0uanN4KFhpLHtjb250ZW50OiJDaOG7iW5oIHPhu61hIixjaGlsZHJlbjptLmpzeChEZSx7c2l6ZToic20iLGlzSWNvbk9ubHk6ITAsImFyaWEtbGFiZWwiOiJDaOG7iW5oIHPhu61hIixjaGlsZHJlbjptLmpzeChHaCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KX0pXX0pXX0pfWZ1bmN0aW9uIElPKCl7cmV0dXJuIG0uanN4cyhkbCx7dGl0bGU6IsOUIG5o4bqtcCIsaGludDoiSW5wdXQgNDIgbW9iaWxlIC8gMzYgZGVza3RvcCDCtyBUZXh0YXJlYSA3MiIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdhcC0zIHNtOmdyaWQtY29scy0yIixjaGlsZHJlbjpbbS5qc3gobHIse2xhYmVsOiJUw6puIGtow6FjaCBow6BuZyIscGxhY2Vob2xkZXI6Ik5o4bqtcCB0w6puIixpc1JlcXVpcmVkOiEwfSksbS5qc3gobHIse2xhYmVsOiJT4buRIMSRaeG7h24gdGhv4bqhaSIscGxhY2Vob2xkZXI6IjA5MDkgMDAwIDAwMCIsZGVzY3JpcHRpb246IkTDuW5nIMSR4buDIGxpw6puIGjhu4cga2hpIHBoaeG6v3UgeG9uZyJ9KSxtLmpzeChscix7bGFiZWw6Ik3DoyBwaGnhur91IixkZWZhdWx0VmFsdWU6IlBELTEwNDIiLGRpc2FibGVkOiEwfSksbS5qc3gobHIse2xhYmVsOiJFbWFpbCIsZGVmYXVsdFZhbHVlOiJzYWktZW1haWwiLGVycm9yOiJFbWFpbCBraMO0bmcgaOG7o3AgbOG7hyJ9KSxtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJzbTpjb2wtc3Bhbi0yIixjaGlsZHJlbjptLmpzeChxQyx7bGFiZWw6IkdoaSBjaMO6IGNobyBr4bu5IHRodeG6rXQiLHBsYWNlaG9sZGVyOiJWw60gZOG7pTogxJFvIGzhuqFpIGtob+G6o25nIGPDoWNoIMSR4buTbmcgdOG7rSBt4bqvdCBwaOG6o2kiLGlzUmVxdWlyZWQ6ITB9KX0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0zIixjaGlsZHJlbjpbbS5qc3godW8se2xhYmVsOiJD4butYSBow6BuZyIsYXJpYUxhYmVsOiJDaOG7jW4gY+G7rWEgaMOgbmciLG9wdGlvbnM6W3t2YWx1ZToicTEiLGxhYmVsOiJMaWx5IFF14bqtbiAxIn0se3ZhbHVlOiJxNyIsbGFiZWw6IkxpbHkgUXXhuq1uIDcifSx7dmFsdWU6InRkIixsYWJlbDoiTGlseSBUaOG7pyDEkOG7qWMifSx7dmFsdWU6Im9mZiIsbGFiZWw6IkPhu61hIGjDoG5nIMSRw6MgxJHDs25nIixkaXNhYmxlZDohMH1dLHBsYWNlaG9sZGVyOiJDaOG7jW4gY+G7rWEgaMOgbmciLGNsYXNzTmFtZToidy1mdWxsIHNtOnctNTYifSksbS5qc3godW8se2xhYmVsOiJUcuG6oW5nIHRow6FpIixhcmlhTGFiZWw6IkNo4buNbiB0cuG6oW5nIHRow6FpIixvcHRpb25zOlt7dmFsdWU6ImhvYW4iLGxhYmVsOiJIb8OgbiB04bqldCJ9LHt2YWx1ZToiY2hvIixsYWJlbDoiQ2jhu50geMOhYyBuaOG6rW4ifV0sdmFsdWU6ImhvYW4iLGNsYXNzTmFtZToidy1mdWxsIHNtOnctNTYifSksbS5qc3godW8se2xhYmVsOiJC4buLIGtob8OhIixhcmlhTGFiZWw6IkNo4buNbiBi4buLIGtob8OhIixvcHRpb25zOlt7dmFsdWU6ImEiLGxhYmVsOiJLaMO0bmcgY2jhu41uIMSRxrDhu6NjIn1dLGRpc2FibGVkOiEwLGNsYXNzTmFtZToidy1mdWxsIHNtOnctNTYifSldfSldfSl9ZnVuY3Rpb24gUE8oKXtjb25zdFthLG9dPXYudXNlU3RhdGUoITApLFt1LGldPXYudXNlU3RhdGUoInRyb24iKSxbcyxmXT12LnVzZVN0YXRlKCEwKTtyZXR1cm4gbS5qc3goZGwse3RpdGxlOiJDaOG7jW4gZ2nDoSB0cuG7iyIsaGludDoiQ2hlY2tib3ggMTYgwrcgUmFkaW8gMTYgwrcgU3dpdGNoIDM2w5cyMCIsY2hpbGRyZW46bS5qc3hzKHBuLHtjbGFzc05hbWU6Iml0ZW1zLXN0YXJ0IGdhcC02IixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOlttLmpzeChGaSx7bGFiZWw6IsSQw6MgZ+G7jWkgeMOhYyBuaOG6rW4iLGNoZWNrZWQ6YSxvbkNoZWNrZWRDaGFuZ2U6b30pLG0uanN4KEZpLHtsYWJlbDoiS2jDtG5nIHjDoWMgxJHhu4tuaCIsY2hlY2tlZDoiaW5kZXRlcm1pbmF0ZSJ9KSxtLmpzeChGaSx7bGFiZWw6IsSQYW5nIGtob8OhIixjaGVja2VkOiEwLGRpc2FibGVkOiEwfSldfSksbS5qc3goc18se2xhYmVsOiJLaeG7g3UgdHLDsm5nIix2YWx1ZTp1LG9uVmFsdWVDaGFuZ2U6aSxvcHRpb25zOlt7dmFsdWU6InRyb24iLGxhYmVsOiJUcsOybmcgdHLDsm4ifSx7dmFsdWU6ImRhIixsYWJlbDoiVHLDsm5nIMSRYSB0csOybmcifSx7dmFsdWU6Im1hdSIsbGFiZWw6IlRyw7JuZyDEkeG7lWkgbcOgdSIsZGlzYWJsZWQ6ITB9XX0pLG0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbbS5qc3goJGkse2xhYmVsOiJC4bqtdCB0aMO0bmcgYsOhbyBaYWxvIixjaGVja2VkOnMsb25DaGVja2VkQ2hhbmdlOmZ9KSxtLmpzeCgkaSx7bGFiZWw6IsSQw6MgdOG6r3QiLGNoZWNrZWQ6ITF9KSxtLmpzeCgkaSx7bGFiZWw6IsSQYW5nIGtob8OhIixjaGVja2VkOiEwLGRpc2FibGVkOiEwfSldfSldfSl9KX1mdW5jdGlvbiBHTygpe3JldHVybiBtLmpzeHMoZGwse3RpdGxlOiJUYWcgwrcgQmFkZ2UgwrcgQXZhdGFyIixoaW50OiJUYWcgMjQvMTYgwrcgQmFkZ2UgMTQgwrcgQXZhdGFyIDIwLzMyLzM2IixjaGlsZHJlbjpbbS5qc3hzKHBuLHtjaGlsZHJlbjpbbS5qc3goT24se2NvbG9yOiJibHVlIixjaGlsZHJlbjoiQuG6o28gaMOgbmgifSksbS5qc3goT24se2NvbG9yOiJncmF5IixjaGlsZHJlbjoiTMawdSBuaMOhcCJ9KSxtLmpzeChPbix7Y29sb3I6InN1Y2Nlc3MiLGNoaWxkcmVuOiJIb8OgbiB04bqldCJ9KSxtLmpzeChPbix7Y29sb3I6Indhcm5pbmciLGNoaWxkcmVuOiJDaOG7nSB4w6FjIG5o4bqtbiJ9KSxtLmpzeChPbix7Y29sb3I6ImRhbmdlciIsY2hpbGRyZW46IsSQw6MgaHXhu7cifSksbS5qc3goT24se2NvbG9yOiJibHVlIixzaXplOiJzbSIsY2hpbGRyZW46InNtIn0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0zIGdhcC00IixjaGlsZHJlbjpbbS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46W20uanN4KENoLHtjbGFzc05hbWU6InNpemUtNCJ9KSwiIFRow7RuZyBiw6FvICIsbS5qc3goeXIse2NvdW50OjN9KV19KSxtLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIHRleHQtbGFyay1uNzAwIixjaGlsZHJlbjpbIlBoaeG6v3UgY2jhu50gIixtLmpzeCh5cix7Y291bnQ6MTI4fSldfSksbS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSB0ZXh0LWxhcmstbjcwMCIsY2hpbGRyZW46WyJDw7MgY+G6rXAgbmjhuq10ICIsbS5qc3goeXIse2RvdDohMH0pXX0pXX0pLG0uanN4cyhwbix7Y2xhc3NOYW1lOiJtdC0zIGdhcC0zIixjaGlsZHJlbjpbbS5qc3goZmwse25hbWU6Ik5ndXnhu4VuIMSQ4bupYyBUcuG7jW5nIEFuaCJ9KSxtLmpzeChmbCx7bmFtZToiVHLhuqduIE1pbmggVMO5bmcifSksbS5qc3goZmwse25hbWU6IkzDqiBUaHUgSMOgIixzaXplOiJzbSJ9KSxtLmpzeChmbCx7bmFtZToiTGlseSBRdeG6rW4gMSIsdGVhbTohMH0pLG0uanN4KGZsLHtzcmM6Imh0dHBzOi8vaS5wcmF2YXRhci5jYy82ND9pbWc9MTIiLG5hbWU6IuG6om5oIHRo4bqtdCJ9KV19KV19KX1mdW5jdGlvbiBWTygpe3JldHVybiBtLmpzeChkbCx7dGl0bGU6IlRhYnMiLGhpbnQ6IkNhbyAzNCwgaW5kaWNhdG9yIDNweCwgYWN0aXZlICMxNDU2RjAiLGNoaWxkcmVuOm0uanN4cyhFdCx7ZGVmYXVsdFZhbHVlOiJhbGwiLGNoaWxkcmVuOlttLmpzeHMoRXQuTGlzdCx7ImFyaWEtbGFiZWwiOiJM4buNYyBwaGnhur91IixjaGlsZHJlbjpbbS5qc3goRXQuVGFiLHt2YWx1ZToiYWxsIixjaGlsZHJlbjoiVOG6pXQgY+G6oyJ9KSxtLmpzeChFdC5UYWIse3ZhbHVlOiJ3YWl0IixjaGlsZHJlbjoiQ2jhu50geMOhYyBuaOG6rW4ifSksbS5qc3goRXQuVGFiLHt2YWx1ZToiZG9uZSIsY2hpbGRyZW46Ikhvw6BuIHThuqV0In0pLG0uanN4KEV0LlRhYix7dmFsdWU6ImNhbmNlbCIsZGlzYWJsZWQ6ITAsY2hpbGRyZW46IsSQw6MgaHXhu7cifSldfSksbS5qc3goRXQuUGFuZWwse3ZhbHVlOiJhbGwiLGNoaWxkcmVuOm0uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiNCBwaGnhur91IHRyb25nIDIgbmfDoHkgZ+G6p24gbmjhuqV0LiJ9KX0pLG0uanN4KEV0LlBhbmVsLHt2YWx1ZToid2FpdCIsY2hpbGRyZW46bS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiIxIHBoaeG6v3UgxJFhbmcgY2jhu50ga2jDoWNoIHjDoWMgbmjhuq1uIGfhu41uZy4ifSl9KSxtLmpzeChFdC5QYW5lbCx7dmFsdWU6ImRvbmUiLGNoaWxkcmVuOm0uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiMiBwaGnhur91IMSRw6MgaG/DoG4gdOG6pXQgdsOgIGdpYW8ga2jDoWNoLiJ9KX0pXX0pfSl9ZnVuY3Rpb24gWU8oKXtyZXR1cm4gbS5qc3goZGwse3RpdGxlOiJEcm9wZG93biBtZW51IixoaW50OiJJdGVtIDMyLCBt4bulYyDEkWFuZyBjaOG7jW4gbuG7gW4gdHLhuq9uZyArIGljb24iLGNoaWxkcmVuOm0uanN4cyhwbix7Y2hpbGRyZW46W20uanN4cyhTYSx7dHJpZ2dlcjptLmpzeHMoRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsY2hpbGRyZW46WyJUaGFvIHTDoWMgIixtLmpzeChfaCx7Y2xhc3NOYW1lOiJzaXplLTQifSldfSksY2hpbGRyZW46W20uanN4KFNhLkl0ZW0se3ZhbHVlOiJ2aWV3IixjaGVja2VkOiEwLGNoaWxkcmVuOiJYZW0gY2hpIHRp4bq/dCJ9KSxtLmpzeChTYS5JdGVtLHt2YWx1ZToiZWRpdCIsY2hpbGRyZW46IkNo4buJbmggc+G7rWEifSksbS5qc3goU2EuSXRlbSx7dmFsdWU6ImNvcHkiLGNoaWxkcmVuOiJOaMOibiBi4bqjbiJ9KSxtLmpzeChTYS5TZXBhcmF0b3Ise2NsYXNzTmFtZToibXktMSBib3JkZXItMCBoLXB4IGJnLWxhcmstbjIwMCJ9KSxtLmpzeChTYS5JdGVtLHt2YWx1ZToiZGVsZXRlIixkYW5nZXI6ITAsY2hpbGRyZW46Ilhvw6EgcGhp4bq/dSJ9KSxtLmpzeChTYS5JdGVtLHt2YWx1ZToibG9ja2VkIixkaXNhYmxlZDohMCxjaGlsZHJlbjoiQ2jhu4kgYWRtaW4ifSldfSksbS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiJDbGljayDEkeG7gyBt4bufLCBFc2NhcGUgxJHhu4MgxJHDs25nIChmb2N1cyB24buBIG7DunQpIn0pXX0pfSl9ZnVuY3Rpb24gcU8oKXtjb25zdFthLG9dPXYudXNlU3RhdGUoITEpLFt1LGldPXYudXNlU3RhdGUoITEpLHt0b2FzdDpzfT1iTygpO3JldHVybiBtLmpzeChkbCx7dGl0bGU6IkRpYWxvZyDCtyBBbGVydERpYWxvZyDCtyBUb2FzdCIsaGludDoiTuG7gW4gbeG7nSA0MCUsIG1vdGlvbiAzMDBtcyB2w6BvIC8gMjAwbXMgcmEiLGNoaWxkcmVuOm0uanN4cyhwbix7Y2hpbGRyZW46W20uanN4cyhTZix7b3BlbjphLG9uT3BlbkNoYW5nZTpvLGNoaWxkcmVuOlttLmpzeChEZSx7dmFyaWFudDoic2Vjb25kYXJ5IixvbkNsaWNrOigpPT5vKCEwKSxjaGlsZHJlbjoiTeG7nyBkaWFsb2cifSksbS5qc3hzKFNmLkNvbnRlbnQse3RpdGxlOiJU4bqhbyBwaGnhur91IG3hu5tpIixkZXNjcmlwdGlvbjoiUGhp4bq/dSBz4bq9IMSRxrDhu6NjIGfhuq9uIHbhu5tpIGPhu61hIGjDoG5nIMSRYW5nIGNo4buNbiB2w6AgZ+G7rWkgY2hvIGvhu7kgdGh14bqtdCB2acOqbi4iLGNoaWxkcmVuOlttLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtMyBmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbbS5qc3gobHIse2xhYmVsOiJUw6puIGtow6FjaCIscGxhY2Vob2xkZXI6Ik5o4bqtcCB0w6puIn0pLG0uanN4KHVvLHtsYWJlbDoiQ+G7rWEgaMOgbmciLGFyaWFMYWJlbDoiQ2jhu41uIGPhu61hIGjDoG5nIixvcHRpb25zOlt7dmFsdWU6InExIixsYWJlbDoiTGlseSBRdeG6rW4gMSJ9LHt2YWx1ZToicTciLGxhYmVsOiJMaWx5IFF14bqtbiA3In1dLHBsYWNlaG9sZGVyOiJDaOG7jW4gY+G7rWEgaMOgbmcifSldfSksbS5qc3hzKFNmLkZvb3Rlcix7Y2hpbGRyZW46W20uanN4KERlLHt2YXJpYW50OiJzZWNvbmRhcnkiLG9uQ2xpY2s6KCk9Pm8oITEpLGNoaWxkcmVuOiJIdeG7tyJ9KSxtLmpzeChEZSx7dmFyaWFudDoicHJpbWFyeSIsb25DbGljazooKT0+byghMSksY2hpbGRyZW46IlThuqFvIHBoaeG6v3UifSldfSldfSldfSksbS5qc3goRGUse3ZhcmlhbnQ6InByaW1hcnlFcnJvciIsb25DbGljazooKT0+aSghMCksY2hpbGRyZW46Ilhvw6EgcGhp4bq/dSJ9KSxtLmpzeChDeSx7b3Blbjp1LG9uT3BlbkNoYW5nZTppLHRpdGxlOiJYb8OhIHBoaeG6v3UgbsOgeT8iLGRlc2NyaXB0aW9uOiJQaGnhur91IFBELTEwNDEgc+G6vSBi4buLIHhvw6Ega2jhu49pIGRhbmggc8OhY2guIFRoYW8gdMOhYyBraMO0bmcgaG/DoG4gdMOhYyDEkcaw4bujYy4iLGNvbmZpcm1MYWJlbDoiWG/DoSIsY2FuY2VsTGFiZWw6Ikh14bu3IixvbkNvbmZpcm06KCk9PmkoITEpfSksbS5qc3goRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsb25DbGljazooKT0+cyh7dGl0bGU6IsSQw6MgbMawdSBwaGnhur91IixkZXNjcmlwdGlvbjoiUEQtMTA0MiBj4bqtcCBuaOG6rXQgbMO6YyAwOTo0MSIsdmFyaWFudDoic3VjY2VzcyJ9KSxjaGlsZHJlbjoiVG9hc3QgdGjDoG5oIGPDtG5nIn0pLG0uanN4KERlLHt2YXJpYW50OiJzZWNvbmRhcnkiLG9uQ2xpY2s6KCk9PnMoe3RpdGxlOiJLaMO0bmcgZ+G7rWkgxJHGsOG7o2MiLGRlc2NyaXB0aW9uOiJLaeG7g20gdHJhIGvhur90IG7hu5FpIHLhu5NpIHRo4butIGzhuqFpIix2YXJpYW50OiJkYW5nZXIifSksY2hpbGRyZW46IlRvYXN0IGzhu5dpIn0pLG0uanN4KERlLHt2YXJpYW50OiJnaG9zdCIsb25DbGljazooKT0+cyh7dGl0bGU6IsSQYW5nIMSR4buTbmcgYuG7mSBk4buvIGxp4buHdSJ9KSxjaGlsZHJlbjoiVG9hc3QgbeG6t2MgxJHhu4tuaCJ9KV19KX0pfWZ1bmN0aW9uIEJ5KCl7Y29uc3RbYSxvXT12LnVzZVN0YXRlKDEpLFt1LGldPXYudXNlU3RhdGUoNTApLHM9W3trZXk6ImlkIixoZWFkZXI6Ik3DoyBwaGnhur91Iix3aWR0aDoiOTJweCJ9LHtrZXk6ImtoYWNoIixoZWFkZXI6Iktow6FjaCBow6BuZyIsY2VsbDpmPT5tLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOlttLmpzeChmbCx7bmFtZTpmLmtoYWNoLHNpemU6InNtIn0pLG0uanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSIsY2hpbGRyZW46Zi5raGFjaH0pXX0pfSx7a2V5OiJjdWFIYW5nIixoZWFkZXI6IkPhu61hIGjDoG5nIn0se2tleToibmdheSIsaGVhZGVyOiJOZ8OgeSIsd2lkdGg6IjEwOHB4In0se2tleToiZG9hbmhUaHUiLGhlYWRlcjoiRG9hbmggdGh1IixhbGlnbjoicmlnaHQiLGNlbGw6Zj0+bS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMiLGNoaWxkcmVuOltmLmRvYW5oVGh1LCIgxJEiXX0pfSx7a2V5OiJ0cmFuZ1RoYWkiLGhlYWRlcjoiVHLhuqFuZyB0aMOhaSIsY2VsbDpmPT57Y29uc3QgZD1IT1tmLnRyYW5nVGhhaV07cmV0dXJuIG0uanN4KE9uLHtjb2xvcjpkLmNvbG9yLGNoaWxkcmVuOmQudGV4dH0pfX0se2tleToiZ2hpQ2h1IixoZWFkZXI6IkdoaSBjaMO6IixjZWxsOmY9Pm0uanN4KFJPLHt0aXRsZTpmLmdoaUNodSxjaGlsZHJlbjpmLmdoaUNodX0pfSx7a2V5OiJhY3Rpb25zIixoZWFkZXI6IkjDoG5oIMSR4buZbmciLGFsaWduOiJyaWdodCIscGluOiJyaWdodCIsY2VsbDooKT0+bS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEiLGNoaWxkcmVuOlttLmpzeChEZSx7c2l6ZToic20iLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiWGVtIixjaGlsZHJlbjptLmpzeChYaCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KSxtLmpzeChEZSx7c2l6ZToic20iLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiU+G7rWEiLGNoaWxkcmVuOm0uanN4KEdoLHtjbGFzc05hbWU6InNpemUtNCJ9KX0pLG0uanN4KERlLHtzaXplOiJzbSIsaXNJY29uT25seTohMCx2YXJpYW50OiJnaG9zdCIsImFyaWEtbGFiZWwiOiJYb8OhIixjaGlsZHJlbjptLmpzeChHMSx7Y2xhc3NOYW1lOiJzaXplLTQgdGV4dC1sYXJrLWRhbmdlciJ9KX0pXX0pfV07cmV0dXJuIG0uanN4cyhkbCx7dGl0bGU6IlRhYmxlICsgUGFnaW5hdGlvbiIsaGludDoiSGVhZCA0OCDCtyBCb2R5IDQ3IMK3IGPhu5l0IEjDoG5oIMSR4buZbmcgZ2hpbSBwaOG6o2kiLGNoaWxkcmVuOlttLmpzeHMoImRpdiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4yMDAiLGNoaWxkcmVuOlttLmpzeChsYyx7Y29sdW1uczpzLHJvd3M6VU8scm93S2V5OmY9PmYuaWR9KSxtLmpzeChsYy5Gb290ZXIse2NoaWxkcmVuOm0uanN4KFV5LHtwYWdlOmEsdG90YWw6MTI4NCxwYWdlU2l6ZTp1LG9uUGFnZUNoYW5nZTpvLHBhZ2VTaXplczpbNTAsMTAwLDIwMF0sb25QYWdlU2l6ZUNoYW5nZTppfSl9KV19KSxtLmpzeCgicCIse2NsYXNzTmFtZToibXQtMiB0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiS8OpbyBuZ2FuZyB0csOqbiBraHVuZyBo4bq5cCDEkeG7gyB0aOG6pXkgY+G7mXQgSMOgbmggxJHhu5luZyBkw61uaCBiw6puIHBo4bqjaS4ifSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTQgZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCBtZDpncmlkLWNvbHMtMiIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1sYXJrLW4yMDAgcC0zIixjaGlsZHJlbjpbbS5qc3goInAiLHtjbGFzc05hbWU6Im1iLTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46IsSQYW5nIHThuqNpIChza2VsZXRvbikifSksbS5qc3gobGMse2NvbHVtbnM6W3trZXk6ImlkIixoZWFkZXI6Ik3DoyBwaGnhur91In0se2tleToia2hhY2giLGhlYWRlcjoiS2jDoWNoIGjDoG5nIn1dLHJvd3M6W10scm93S2V5OmY9PmYuaWQsaXNMb2FkaW5nOiEwfSldfSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWxhcmstbjIwMCBwLTMiLGNoaWxkcmVuOlttLmpzeCgicCIse2NsYXNzTmFtZToibWItMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiUuG7l25nIChFbXB0eVN0YXRlKSJ9KSxtLmpzeChsYyx7Y29sdW1uczpbe2tleToiaWQiLGhlYWRlcjoiTcOjIHBoaeG6v3UifSx7a2V5OiJraGFjaCIsaGVhZGVyOiJLaMOhY2ggaMOgbmcifV0scm93czpbXSxyb3dLZXk6Zj0+Zi5pZCxlbXB0eVN0YXRlOm0uanN4KEx5LHtpY29uOm0uanN4KEgxLHt9KSx0aXRsZToiQ2jGsGEgY8OzIHBoaeG6v3UgbsOgbyIsZGVzY3JpcHRpb246IlThuqFvIHBoaeG6v3UgxJHhuqd1IHRpw6puIMSR4buDIGLhuq90IMSR4bqndSB0aGVvIGTDtWkgZG9hbmggdGh1LiIsYWN0aW9uOm0uanN4KERlLHt2YXJpYW50OiJwcmltYXJ5IixjaGlsZHJlbjoiVOG6oW8gcGhp4bq/dSJ9KX0pfSldfSldfSldfSl9ZnVuY3Rpb24gWE8oKXtyZXR1cm4gbS5qc3hzKGRsLHt0aXRsZToiU3Bpbm5lciDCtyBFbXB0eVN0YXRlIixoaW50OiJTcGlubmVyIDE2LzI0IMK3IEVtcHR5U3RhdGUgaWNvbiAyNCIsY2hpbGRyZW46W20uanN4cyhwbix7Y2xhc3NOYW1lOiJnYXAtNiIsY2hpbGRyZW46W20uanN4cygic3BhbiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOlttLmpzeChfZix7c2l6ZToic20iLGxhYmVsOiLEkGFuZyB04bqjaSJ9KSwiIHNtIDE2Il19KSxtLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjpbbS5qc3goX2Yse3NpemU6Im1kIixsYWJlbDoixJBhbmcgdOG6o2kifSksIiBtZCAyNCJdfSldfSksbS5qc3goImRpdiIse2NsYXNzTmFtZToibXQtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci1sYXJrLW4zMDAiLGNoaWxkcmVuOm0uanN4KEx5LHtpY29uOm0uanN4KGtoLHt9KSx0aXRsZToiQ2jGsGEgY8OzIGThu68gbGnhu4d1IHRyb25nIGvhu7MgbsOgeSIsZGVzY3JpcHRpb246IlRo4butIMSR4buVaSBraG/huqNuZyB0aOG7nWkgZ2lhbiBob+G6t2MgY2jhu41uIGPhu61hIGjDoG5nIGtow6FjLiIsYWN0aW9uOm0uanN4KERlLHtzaXplOiJzbSIsdmFyaWFudDoic2Vjb25kYXJ5Qmx1ZSIsY2hpbGRyZW46IsSQ4buVaSBi4buZIGzhu41jIn0pfSl9KV19KX1mdW5jdGlvbiBLTygpe3JldHVybiBtLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBtaW4taC1bNTYwcHhdIG1pbi13LTAgZmxleC1jb2wgYmctbGFyay1uNTAiLGNoaWxkcmVuOlttLmpzeHMoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJvcmRlci1iIGJvcmRlci1sYXJrLW4yMDAgYmctYnJhbmQtcHJpbWFyeSBweC0zIHB5LTIuNSBzbTpweC00IixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOlttLmpzeCgic3BhbiIse2NsYXNzTmFtZToiZ3JpZCBzaXplLTcgc2hyaW5rLTAgcGxhY2UtaXRlbXMtY2VudGVyIHJvdW5kZWQtbGcgYmctYnJhbmQtc2Vjb25kYXJ5IHRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiJMIn0pLG0uanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1sYXJrLW45MDAiLGNoaWxkcmVuOiJQaGnhur91IMSRbyDCtyBMaWx5In0pXX0pLG0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMS41IHNtOmdhcC0yIixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImhpZGRlbiBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLWxnIGJnLWxhcmstbjUwIHB4LTIgcHktMS41IHRleHQteHMgdGV4dC1sYXJrLW42MDAgbGc6ZmxleCIsY2hpbGRyZW46W20uanN4KFhoLHtjbGFzc05hbWU6InNpemUtMy41In0pLCIgVMOsbSBwaGnhur914oCmIl19KSxtLmpzeChYaSx7Y29udGVudDoiTOG7i2NoIGjhurluIixjaGlsZHJlbjptLmpzeChEZSx7c2l6ZToibWQiLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiTOG7i2NoIGjhurluIixjaGlsZHJlbjptLmpzeCh3aCx7Y2xhc3NOYW1lOiJzaXplLTQifSl9KX0pLG0uanN4cygic3BhbiIse2NsYXNzTmFtZToicmVsYXRpdmUgaW5saW5lLWZsZXgiLGNoaWxkcmVuOlttLmpzeChEZSx7c2l6ZToibWQiLGlzSWNvbk9ubHk6ITAsdmFyaWFudDoiZ2hvc3QiLCJhcmlhLWxhYmVsIjoiVGjDtG5nIGLDoW8iLGNoaWxkcmVuOm0uanN4KENoLHtjbGFzc05hbWU6InNpemUtNCJ9KX0pLG0uanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIC1lbmQtMSAtdG9wLTEiLGNoaWxkcmVuOm0uanN4KHlyLHtjb3VudDo1fSl9KV19KSxtLmpzeChmbCx7bmFtZToiTmd1eeG7hW4gxJDhu6ljIFRy4buNbmcgQW5oIixzaXplOiJtZCJ9KV19KV19KSxtLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGZsZXgtMSBmbGV4LWNvbCBnYXAtMyBwLTMgc206cC00IixjaGlsZHJlbjpbbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOlttLmpzeHMoImRpdiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46W20uanN4KCJoMiIse2NsYXNzTmFtZToidGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdGV4dC1sYXJrLW45MDAiLGNoaWxkcmVuOiJEYW5oIHPDoWNoIHBoaeG6v3UifSksbS5qc3goInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiIxLjI4NCBwaGnhur91IMK3IGPhuq1wIG5o4bqtdCAwOTo0MSJ9KV19KSxtLmpzeHMocG4se2NoaWxkcmVuOlttLmpzeHMoRGUse3ZhcmlhbnQ6InNlY29uZGFyeSIsY2hpbGRyZW46W20uanN4KFUxLHtjbGFzc05hbWU6InNpemUtNCJ9KSwiIFh14bqldCJdfSksbS5qc3hzKERlLHt2YXJpYW50OiJwcmltYXJ5IixzaXplOiJsZyIsY2hpbGRyZW46W20uanN4KFloLHtjbGFzc05hbWU6InNpemUtNCJ9KSwiIFThuqFvIHBoaeG6v3UiXX0pXX0pXX0pLG0uanN4KCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWxhcmstbjIwMCBiZy1icmFuZC1wcmltYXJ5IHAtMyIsY2hpbGRyZW46bS5qc3hzKEV0LHtkZWZhdWx0VmFsdWU6ImFsbCIsY2hpbGRyZW46W20uanN4cyhFdC5MaXN0LHsiYXJpYS1sYWJlbCI6Ikzhu41jIHBoaeG6v3UiLGNoaWxkcmVuOlttLmpzeChFdC5UYWIse3ZhbHVlOiJhbGwiLGNoaWxkcmVuOiJU4bqldCBj4bqjIn0pLG0uanN4KEV0LlRhYix7dmFsdWU6IndhaXQiLGNoaWxkcmVuOiJDaOG7nSJ9KSxtLmpzeChFdC5UYWIse3ZhbHVlOiJkb25lIixjaGlsZHJlbjoiSG/DoG4gdOG6pXQifSldfSksbS5qc3goRXQuUGFuZWwse3ZhbHVlOiJhbGwiLGNoaWxkcmVuOm0uanN4KCJkaXYiLHtjbGFzc05hbWU6Im10LTIgZ3JpZCBnYXAtMiBzbTpncmlkLWNvbHMtMyIsY2hpbGRyZW46W3trOiJEb2FuaCB0aHUgaMO0bSBuYXkiLHY6IjI2LjU1MC4wMDAiLGQ6IisxMiUifSx7azoiUGhp4bq/dSBjaOG7nSB4w6FjIG5o4bqtbiIsdjoiNyIsZDoiMiBxdcOhIGjhuqFuIn0se2s6IlThu4kgbOG7hyBj4bqvdCB0csOybmciLHY6IjY4JSIsZDoi4oiSMyUifV0ubWFwKGE9Pm0uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLWxnIGJnLWxhcmstbjUwIHB4LTMgcHktMiIsY2hpbGRyZW46W20uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjphLmt9KSxtLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjphLnZ9KSxtLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC14cyB0ZXh0LWxhcmstbjYwMCIsY2hpbGRyZW46YS5kfSldfSxhLmspKX0pfSksbS5qc3goRXQuUGFuZWwse3ZhbHVlOiJ3YWl0IixjaGlsZHJlbjptLmpzeCgicCIse2NsYXNzTmFtZToibXQtMiB0ZXh0LXNtIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiNyBwaGnhur91IMSRYW5nIGNo4budIGtow6FjaCB4w6FjIG5o4bqtbi4ifSl9KSxtLmpzeChFdC5QYW5lbCx7dmFsdWU6ImRvbmUiLGNoaWxkcmVuOm0uanN4KCJwIix7Y2xhc3NOYW1lOiJtdC0yIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOiIyMSBwaGnhur91IGhvw6BuIHThuqV0IHRyb25nIGjDtG0gbmF5LiJ9KX0pXX0pfSksbS5qc3goQnkse30pXX0pLG0uanN4KCJuYXYiLHsiYXJpYS1sYWJlbCI6IsSQaeG7gXUgaMaw4bubbmcgY2jDrW5oIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYXJvdW5kIGJvcmRlci10IGJvcmRlci1sYXJrLW4yMDAgYmctYnJhbmQtcHJpbWFyeSBweC0yIHB5LTIgdGV4dC14cyB0ZXh0LWxhcmstbjYwMCBtZDpoaWRkZW4iLGNoaWxkcmVuOlt7aWNvbjptLmpzeChraCx7Y2xhc3NOYW1lOiJzaXplLTUifSksbGFiZWw6IlBoaeG6v3UifSx7aWNvbjptLmpzeCh3aCx7Y2xhc3NOYW1lOiJzaXplLTUifSksbGFiZWw6Ikzhu4tjaCJ9LHtpY29uOm0uanN4KGsxLHtjbGFzc05hbWU6InNpemUtNSJ9KSxsYWJlbDoiSOG7lyB0cuG7oyJ9LHtpY29uOm0uanN4KGZsLHtuYW1lOiJOZ3V54buFbiDEkOG7qWMgVHLhu41uZyBBbmgiLHNpemU6InNtIn0pLGxhYmVsOiJUw7RpIn1dLm1hcChhPT5tLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0wLjUiLGNoaWxkcmVuOlthLmljb24sYS5sYWJlbF19LGEubGFiZWwpKX0pLG0uanN4KCJmb290ZXIiLHtjbGFzc05hbWU6ImhpZGRlbiBib3JkZXItdCBib3JkZXItbGFyay1uMjAwIGJnLWJyYW5kLXByaW1hcnkgcHgtNCBweS0yIHRleHQteHMgdGV4dC1sYXJrLW42MDAgbWQ6YmxvY2siLGNoaWxkcmVuOiJMaWx5IFN0b3JlIERpdmlzaW9uIMK3IGThu68gbGnhu4d1IG1pbmggaG/huqEifSldfSl9ZnVuY3Rpb24gUU8oKXtyZXR1cm4gbS5qc3hzKCJtYWluIix7Y2xhc3NOYW1lOiJteC1hdXRvIGZsZXggdy1mdWxsIG1heC13LVsxNTYwcHhdIGZsZXgtY29sIGdhcC02IHAtNCBtZDpwLTYiLGNoaWxkcmVuOlttLmpzeHMoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBmbGV4LXdyYXAgaXRlbXMtZW5kIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2hpbGRyZW46W20uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtYnJhbmQtbGluayIsY2hpbGRyZW46ImxpbHktbGFyay11aSDCtyB2MC4yLjEifSksbS5qc3goImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtbGFyay1uOTAwIixjaGlsZHJlbjoiQuG7mSBjb21wb25lbnQgTGFyayJ9KSxtLmpzeHMoInAiLHtjbGFzc05hbWU6Im10LTEgbWF4LXctMnhsIHRleHQtc20gdGV4dC1sYXJrLW42MDAiLGNoaWxkcmVuOlsiMjAgY29tcG9uZW50IHJlbmRlciB0aOG6rXQgduG7m2kgdG9rZW4gTGFyay4gU+G7kSDEkW8gbOG6pXkgdOG7qyIsIiAiLG0uanN4KCJjb2RlIix7Y2xhc3NOYW1lOiJyb3VuZGVkIGJnLWxhcmstbjEwMCBweC0xIHRleHQteHMiLGNoaWxkcmVuOiJsYXJrLWRlc2lnbi1ndWlkZS9maWdtYSJ9KSwiLiBUcmFuZyB04buxIGNvIGdpw6NuOiBrw6lvIGPhu61hIHPhu5UgduG7gSAzNzUsIDc2OCBoYXkgMTI4MCDEkeG7gXUgZMO5bmcgY8O5bmcgbeG7mXQgbGF5b3V0LiJdfSldfSksbS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjpbbS5qc3goT24se2NvbG9yOiJibHVlIixjaGlsZHJlbjoiVGFpbHdpbmQgdjQifSksbS5qc3goT24se2NvbG9yOiJzdWNjZXNzIixjaGlsZHJlbjoiMjAgY29tcG9uZW50In0pLG0uanN4KE9uLHtjb2xvcjoiZ3JheSIsY2hpbGRyZW46IjE4NyB0ZXN0In0pLG0uanN4KHExLHt9KV19KV19KSxtLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtMiIsY2hpbGRyZW46W20uanN4KEJPLHt9KSxtLmpzeChJTyx7fSksbS5qc3goUE8se30pLG0uanN4KEdPLHt9KSxtLmpzeChWTyx7fSksbS5qc3goWU8se30pLG0uanN4KHFPLHt9KSxtLmpzeChYTyx7fSldfSksbS5qc3goQnkse30pLG0uanN4cygic2VjdGlvbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W20uanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtd3JhcCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOlttLmpzeCgiaDIiLHtjbGFzc05hbWU6InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWxhcmstbjkwMCIsY2hpbGRyZW46Ik3DoG4gdsOtIGThu6UgKHJlc3BvbnNpdmUpIn0pLG0uanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbGFyay1uNjAwIixjaGlsZHJlbjoiQ8O5bmcgbeG7mXQgbcOgbiwga8OpbyBi4buBIHLhu5luZyBj4butYSBz4buVOiAzNzUgLyA3NjggLyAxMjgwIMSR4buBdSBkw7luZyBsYXlvdXQgbsOgeSJ9KV19KSxtLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWxhcmstbjMwMCBzaGFkb3ctc20iLGNoaWxkcmVuOm0uanN4KEtPLHt9KX0pXX0pXX0pfVMxLmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKG0uanN4KHYuU3RyaWN0TW9kZSx7Y2hpbGRyZW46bS5qc3goUTIse2RlbGF5RHVyYXRpb246MzAwLGNoaWxkcmVuOm0uanN4KGt5LHtjaGlsZHJlbjptLmpzeChRTyx7fSl9KX0pfSkpfSkoKTsK"), c => c.charCodeAt(0))))</script>
|
|
16
16
|
</body>
|
|
17
17
|
</html>
|