mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-21 09:38:01 +02:00
24d02c5fc3
Co-authored-by: Laurent Cozic <laurent22@users.noreply.github.com>
1 line
3.3 MiB
1 line
3.3 MiB
module.exports = `InVzZSBzdHJpY3QiO3ZhciBfX2VzYnVpbGRfZXNtX21lcm1haWQ9KCgpPT57dmFyIGl4ZT1PYmplY3QuY3JlYXRlO3ZhciBaMT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGF4ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBzeGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIG94ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbHhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIG89KHQsZSk9PloxKHQsIm5hbWUiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBNPSh0LGUpPT4oKT0+KHQmJihlPXQodD0wKSksZSk7dmFyIEVpPSh0LGUpPT4oKT0+KGV8fHQoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyksdnI9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSlaMSh0LHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX0sJGI9KHQsZSxyLG4pPT57aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIilmb3IobGV0IGkgb2Ygc3hlKGUpKSFseGUuY2FsbCh0LGkpJiZpIT09ciYmWjEodCxpLHtnZXQ6KCk9PmVbaV0sZW51bWVyYWJsZTohKG49YXhlKGUsaSkpfHxuLmVudW1lcmFibGV9KTtyZXR1cm4gdH0sU3I9KHQsZSxyKT0+KCRiKHQsZSwiZGVmYXVsdCIpLHImJiRiKHIsZSwiZGVmYXVsdCIpKSxKaT0odCxlLHIpPT4ocj10IT1udWxsP2l4ZShveGUodCkpOnt9LCRiKGV8fCF0fHwhdC5fX2VzTW9kdWxlP1oxKHIsImRlZmF1bHQiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITB9KTpyLHQpKSxjeGU9dD0+JGIoWjEoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQpO3ZhciBWYj1FaSgoX1MsTFMpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBfUz09Im9iamVjdCImJnR5cGVvZiBMUzwidSI/TFMuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSkoX1MsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LHI9MzZlNSxuPSJtaWxsaXNlY29uZCIsaT0ic2Vjb25kIixhPSJtaW51dGUiLHM9ImhvdXIiLGw9ImRheSIsdT0id2VlayIsaD0ibW9udGgiLGY9InF1YXJ0ZXIiLGQ9InllYXIiLHA9ImRhdGUiLG09IkludmFsaWQgRGF0ZSIsZz0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx5PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csdj17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpvKGZ1bmN0aW9uKGspe3ZhciBSPVsidGgiLCJzdCIsIm5kIiwicmQiXSxDPWslMTAwO3JldHVybiJbIitrKyhSWyhDLTIwKSUxMF18fFJbQ118fFJbMF0pKyJdIn0sIm9yZGluYWwiKX0seD1vKGZ1bmN0aW9uKGssUixDKXt2YXIgTz1TdHJpbmcoayk7cmV0dXJuIU98fE8ubGVuZ3RoPj1SP2s6IiIrQXJyYXkoUisxLU8ubGVuZ3RoKS5qb2luKEMpK2t9LCJtIiksYj17czp4LHo6byhmdW5jdGlvbihrKXt2YXIgUj0tay51dGNPZmZzZXQoKSxDPU1hdGguYWJzKFIpLE89TWF0aC5mbG9vcihDLzYwKSxOPUMlNjA7cmV0dXJuKFI8PTA/IisiOiItIikreChPLDIsIjAiKSsiOiIreChOLDIsIjAiKX0sInoiKSxtOm8oZnVuY3Rpb24gayhSLEMpe2lmKFIuZGF0ZSgpPEMuZGF0ZSgpKXJldHVybi1rKEMsUik7dmFyIE89MTIqKEMueWVhcigpLVIueWVhcigpKSsoQy5tb250aCgpLVIubW9udGgoKSksTj1SLmNsb25lKCkuYWRkKE8saCksUD1DLU48MCxGPVIuY2xvbmUoKS5hZGQoTysoUD8tMToxKSxoKTtyZXR1cm4rKC0oTysoQy1OKS8oUD9OLUY6Ri1OKSl8fDApfSwidCIpLGE6byhmdW5jdGlvbihrKXtyZXR1cm4gazwwP01hdGguY2VpbChrKXx8MDpNYXRoLmZsb29yKGspfSwiYSIpLHA6byhmdW5jdGlvbihrKXtyZXR1cm57TTpoLHk6ZCx3OnUsZDpsLEQ6cCxoOnMsbTphLHM6aSxtczpuLFE6Zn1ba118fFN0cmluZyhrfHwiIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sIiIpfSwicCIpLHU6byhmdW5jdGlvbihrKXtyZXR1cm4gaz09PXZvaWQgMH0sInUiKX0sdz0iZW4iLF89e307X1t3XT12O3ZhciBUPSIkaXNEYXlqc09iamVjdCIsRT1vKGZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgSXx8ISgha3x8IWtbVF0pfSwiUyIpLEw9byhmdW5jdGlvbiBrKFIsQyxPKXt2YXIgTjtpZighUilyZXR1cm4gdztpZih0eXBlb2YgUj09InN0cmluZyIpe3ZhciBQPVIudG9Mb3dlckNhc2UoKTtfW1BdJiYoTj1QKSxDJiYoX1tQXT1DLE49UCk7dmFyIEY9Ui5zcGxpdCgiLSIpO2lmKCFOJiZGLmxlbmd0aD4xKXJldHVybiBrKEZbMF0pfWVsc2V7dmFyIEI9Ui5uYW1lO19bQl09UixOPUJ9cmV0dXJuIU8mJk4mJih3PU4pLE58fCFPJiZ3fSwidCIpLFM9byhmdW5jdGlvbihrLFIpe2lmKEUoaykpcmV0dXJuIGsuY2xvbmUoKTt2YXIgQz10eXBlb2YgUj09Im9iamVjdCI/Ujp7fTtyZXR1cm4gQy5kYXRlPWssQy5hcmdzPWFyZ3VtZW50cyxuZXcgSShDKX0sIk8iKSxBPWI7QS5sPUwsQS5pPUUsQS53PWZ1bmN0aW9uKGssUil7cmV0dXJuIFMoayx7bG9jYWxlOlIuJEwsdXRjOlIuJHUseDpSLiR4LCRvZmZzZXQ6Ui4kb2Zmc2V0fSl9O3ZhciBJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhDKXt0aGlzLiRMPUwoQy5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShDKSx0aGlzLiR4PXRoaXMuJHh8fEMueHx8e30sdGhpc1tUXT0hMH1vKGssIk0iKTt2YXIgUj1rLnByb3RvdHlwZTtyZXR1cm4gUi5wYXJzZT1mdW5jdGlvbihDKXt0aGlzLiRkPWZ1bmN0aW9uKE8pe3ZhciBOPU8uZGF0ZSxQPU8udXRjO2lmKE49PT1udWxsKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKEEudShOKSlyZXR1cm4gbmV3IERhdGU7aWYoTiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKE4pO2lmKHR5cGVvZiBOPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoTikpe3ZhciBGPU4ubWF0Y2goZyk7aWYoRil7dmFyIEI9RlsyXS0xfHwwLEc9KEZbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFA/bmV3IERhdGUoRGF0ZS5VVEMoRlsxXSxCLEZbM118fDEsRls0XXx8MCxGWzVdfHwwLEZbNl18fDAsRykpOm5ldyBEYXRlKEZbMV0sQixGWzNdfHwxLEZbNF18fDAsRls1XXx8MCxGWzZdfHwwLEcpfX1yZXR1cm4gbmV3IERhdGUoTil9KEMpLHRoaXMuaW5pdCgpfSxSLmluaXQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLiRkO3RoaXMuJHk9Qy5nZXRGdWxsWWVhcigpLHRoaXMuJE09Qy5nZXRNb250aCgpLHRoaXMuJEQ9Qy5nZXREYXRlKCksdGhpcy4kVz1DLmdldERheSgpLHRoaXMuJEg9Qy5nZXRIb3VycygpLHRoaXMuJG09Qy5nZXRNaW51dGVzKCksdGhpcy4kcz1DLmdldFNlY29uZHMoKSx0aGlzLiRtcz1DLmdldE1pbGxpc2Vjb25kcygpfSxSLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBBfSxSLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1N0cmluZygpIT09bX0sUi5pc1NhbWU9ZnVuY3Rpb24oQyxPKXt2YXIgTj1TKEMpO3JldHVybiB0aGlzLnN0YXJ0T2YoTyk8PU4mJk48PXRoaXMuZW5kT2YoTyl9LFIuaXNBZnRlcj1mdW5jdGlvbihDLE8pe3JldHVybiBTKEMpPHRoaXMuc3RhcnRPZihPKX0sUi5pc0JlZm9yZT1mdW5jdGlvbihDLE8pe3JldHVybiB0aGlzLmVuZE9mKE8pPFMoQyl9LFIuJGc9ZnVuY3Rpb24oQyxPLE4pe3JldHVybiBBLnUoQyk/dGhpc1tPXTp0aGlzLnNldChOLEMpfSxSLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxSLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LFIuc3RhcnRPZj1mdW5jdGlvbihDLE8pe3ZhciBOPXRoaXMsUD0hIUEudShPKXx8TyxGPUEucChDKSxCPW8oZnVuY3Rpb24oZWUsSil7dmFyIEg9QS53KE4uJHU/RGF0ZS5VVEMoTi4keSxKLGVlKTpuZXcgRGF0ZShOLiR5LEosZWUpLE4pO3JldHVybiBQP0g6SC5lbmRPZihsKX0sImwiKSxHPW8oZnVuY3Rpb24oZWUsSil7cmV0dXJuIEEudyhOLnRvRGF0ZSgpW2VlXS5hcHBseShOLnRvRGF0ZSgicyIpLChQP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoSikpLE4pfSwiJCIpLHo9dGhpcy4kVyxXPXRoaXMuJE0sWj10aGlzLiRELGo9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpO3N3aXRjaChGKXtjYXNlIGQ6cmV0dXJuIFA/QigxLDApOkIoMzEsMTEpO2Nhc2UgaDpyZXR1cm4gUD9CKDEsVyk6QigwLFcrMSk7Y2FzZSB1OnZhciBvZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsSz0oejxvZT96Kzc6eiktb2U7cmV0dXJuIEIoUD9aLUs6WisoNi1LKSxXKTtjYXNlIGw6Y2FzZSBwOnJldHVybiBHKGorIkhvdXJzIiwwKTtjYXNlIHM6cmV0dXJuIEcoaisiTWludXRlcyIsMSk7Y2FzZSBhOnJldHVybiBHKGorIlNlY29uZHMiLDIpO2Nhc2UgaTpyZXR1cm4gRyhqKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LFIuZW5kT2Y9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuc3RhcnRPZihDLCExKX0sUi4kc2V0PWZ1bmN0aW9uKEMsTyl7dmFyIE4sUD1BLnAoQyksRj0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksQj0oTj17fSxOW2xdPUYrIkRhdGUiLE5bcF09RisiRGF0ZSIsTltoXT1GKyJNb250aCIsTltkXT1GKyJGdWxsWWVhciIsTltzXT1GKyJIb3VycyIsTlthXT1GKyJNaW51dGVzIixOW2ldPUYrIlNlY29uZHMiLE5bbl09RisiTWlsbGlzZWNvbmRzIixOKVtQXSxHPVA9PT1sP3RoaXMuJEQrKE8tdGhpcy4kVyk6TztpZihQPT09aHx8UD09PWQpe3ZhciB6PXRoaXMuY2xvbmUoKS5zZXQocCwxKTt6LiRkW0JdKEcpLHouaW5pdCgpLHRoaXMuJGQ9ei5zZXQocCxNYXRoLm1pbih0aGlzLiRELHouZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgQiYmdGhpcy4kZFtCXShHKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sUi5zZXQ9ZnVuY3Rpb24oQyxPKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoQyxPKX0sUi5nZXQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXNbQS5wKEMpXSgpfSxSLmFkZD1mdW5jdGlvbihDLE8pe3ZhciBOLFA9dGhpcztDPU51bWJlcihDKTt2YXIgRj1BLnAoTyksQj1vKGZ1bmN0aW9uKFcpe3ZhciBaPVMoUCk7cmV0dXJuIEEudyhaLmRhdGUoWi5kYXRlKCkrTWF0aC5yb3VuZChXKkMpKSxQKX0sInkiKTtpZihGPT09aClyZXR1cm4gdGhpcy5zZXQoaCx0aGlzLiRNK0MpO2lmKEY9PT1kKXJldHVybiB0aGlzLnNldChkLHRoaXMuJHkrQyk7aWYoRj09PWwpcmV0dXJuIEIoMSk7aWYoRj09PXUpcmV0dXJuIEIoNyk7dmFyIEc9KE49e30sTlthXT1lLE5bc109cixOW2ldPXQsTilbRl18fDEsej10aGlzLiRkLmdldFRpbWUoKStDKkc7cmV0dXJuIEEudyh6LHRoaXMpfSxSLnN1YnRyYWN0PWZ1bmN0aW9uKEMsTyl7cmV0dXJuIHRoaXMuYWRkKC0xKkMsTyl9LFIuZm9ybWF0PWZ1bmN0aW9uKEMpe3ZhciBPPXRoaXMsTj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE4uaW52YWxpZERhdGV8fG07dmFyIFA9Q3x8IllZWVktTU0tRERUSEg6bW06c3NaIixGPUEueih0aGlzKSxCPXRoaXMuJEgsRz10aGlzLiRtLHo9dGhpcy4kTSxXPU4ud2Vla2RheXMsWj1OLm1vbnRocyxqPU4ubWVyaWRpZW0sb2U9byhmdW5jdGlvbihKLEgscSxRKXtyZXR1cm4gSiYmKEpbSF18fEooTyxQKSl8fHFbSF0uc2xpY2UoMCxRKX0sImgiKSxLPW8oZnVuY3Rpb24oSil7cmV0dXJuIEEucyhCJTEyfHwxMixKLCIwIil9LCJkIiksZWU9anx8ZnVuY3Rpb24oSixILHEpe3ZhciBRPUo8MTI/IkFNIjoiUE0iO3JldHVybiBxP1EudG9Mb3dlckNhc2UoKTpRfTtyZXR1cm4gUC5yZXBsYWNlKHksZnVuY3Rpb24oSixIKXtyZXR1cm4gSHx8ZnVuY3Rpb24ocSl7c3dpdGNoKHEpe2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoTy4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIEEucyhPLiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiB6KzE7Y2FzZSJNTSI6cmV0dXJuIEEucyh6KzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gb2UoTi5tb250aHNTaG9ydCx6LFosMyk7Y2FzZSJNTU1NIjpyZXR1cm4gb2UoWix6KTtjYXNlIkQiOnJldHVybiBPLiREO2Nhc2UiREQiOnJldHVybiBBLnMoTy4kRCwyLCIwIik7Y2FzZSJkIjpyZXR1cm4gU3RyaW5nKE8uJFcpO2Nhc2UiZGQiOnJldHVybiBvZShOLndlZWtkYXlzTWluLE8uJFcsVywyKTtjYXNlImRkZCI6cmV0dXJuIG9lKE4ud2Vla2RheXNTaG9ydCxPLiRXLFcsMyk7Y2FzZSJkZGRkIjpyZXR1cm4gV1tPLiRXXTtjYXNlIkgiOnJldHVybiBTdHJpbmcoQik7Y2FzZSJISCI6cmV0dXJuIEEucyhCLDIsIjAiKTtjYXNlImgiOnJldHVybiBLKDEpO2Nhc2UiaGgiOnJldHVybiBLKDIpO2Nhc2UiYSI6cmV0dXJuIGVlKEIsRywhMCk7Y2FzZSJBIjpyZXR1cm4gZWUoQixHLCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoRyk7Y2FzZSJtbSI6cmV0dXJuIEEucyhHLDIsIjAiKTtjYXNlInMiOnJldHVybiBTdHJpbmcoTy4kcyk7Y2FzZSJzcyI6cmV0dXJuIEEucyhPLiRzLDIsIjAiKTtjYXNlIlNTUyI6cmV0dXJuIEEucyhPLiRtcywzLCIwIik7Y2FzZSJaIjpyZXR1cm4gRn1yZXR1cm4gbnVsbH0oSil8fEYucmVwbGFjZSgiOiIsIiIpfSl9LFIudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LFIuZGlmZj1mdW5jdGlvbihDLE8sTil7dmFyIFAsRj10aGlzLEI9QS5wKE8pLEc9UyhDKSx6PShHLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsVz10aGlzLUcsWj1vKGZ1bmN0aW9uKCl7cmV0dXJuIEEubShGLEcpfSwiRCIpO3N3aXRjaChCKXtjYXNlIGQ6UD1aKCkvMTI7YnJlYWs7Y2FzZSBoOlA9WigpO2JyZWFrO2Nhc2UgZjpQPVooKS8zO2JyZWFrO2Nhc2UgdTpQPShXLXopLzYwNDhlNTticmVhaztjYXNlIGw6UD0oVy16KS84NjRlNTticmVhaztjYXNlIHM6UD1XL3I7YnJlYWs7Y2FzZSBhOlA9Vy9lO2JyZWFrO2Nhc2UgaTpQPVcvdDticmVhaztkZWZhdWx0OlA9V31yZXR1cm4gTj9QOkEuYShQKX0sUi5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGgpLiREfSxSLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gX1t0aGlzLiRMXX0sUi5sb2NhbGU9ZnVuY3Rpb24oQyxPKXtpZighQylyZXR1cm4gdGhpcy4kTDt2YXIgTj10aGlzLmNsb25lKCksUD1MKEMsTywhMCk7cmV0dXJuIFAmJihOLiRMPVApLE59LFIuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gQS53KHRoaXMuJGQsdGhpcyl9LFIudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sUi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LFIudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxSLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sa30oKSxEPUkucHJvdG90eXBlO3JldHVybiBTLnByb3RvdHlwZT1ELFtbIiRtcyIsbl0sWyIkcyIsaV0sWyIkbSIsYV0sWyIkSCIsc10sWyIkVyIsbF0sWyIkTSIsaF0sWyIkeSIsZF0sWyIkRCIscF1dLmZvckVhY2goZnVuY3Rpb24oayl7RFtrWzFdXT1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy4kZyhSLGtbMF0sa1sxXSl9fSksUy5leHRlbmQ9ZnVuY3Rpb24oayxSKXtyZXR1cm4gay4kaXx8KGsoUixJLFMpLGsuJGk9ITApLFN9LFMubG9jYWxlPUwsUy5pc0RheWpzPUUsUy51bml4PWZ1bmN0aW9uKGspe3JldHVybiBTKDFlMyprKX0sUy5lbj1fW3ddLFMuTHM9XyxTLnA9e30sU30pfSk7dmFyIElGLGF1LFksSjEsQW8sdXQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJRj1KaShWYigpLDEpLGF1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFk9e3RyYWNlOm8oKC4uLnQpPT57fSwidHJhY2UiKSxkZWJ1ZzpvKCguLi50KT0+e30sImRlYnVnIiksaW5mbzpvKCguLi50KT0+e30sImluZm8iKSx3YXJuOm8oKC4uLnQpPT57fSwid2FybiIpLGVycm9yOm8oKC4uLnQpPT57fSwiZXJyb3IiKSxmYXRhbDpvKCguLi50KT0+e30sImZhdGFsIil9LEoxPW8oZnVuY3Rpb24odD0iZmF0YWwiKXtsZXQgZT1hdS5mYXRhbDt0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpaW4gYXUmJihlPWF1W3RdKTp0eXBlb2YgdD09Im51bWJlciImJihlPXQpLFkudHJhY2U9KCk9Pnt9LFkuZGVidWc9KCk9Pnt9LFkuaW5mbz0oKT0+e30sWS53YXJuPSgpPT57fSxZLmVycm9yPSgpPT57fSxZLmZhdGFsPSgpPT57fSxlPD1hdS5mYXRhbCYmKFkuZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxBbygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNW0iLEFvKCJGQVRBTCIpKSksZTw9YXUuZXJyb3ImJihZLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsQW8oIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzFtIixBbygiRVJST1IiKSkpLGU8PWF1Lndhcm4mJihZLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsQW8oIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLEFvKCJXQVJOIikpKSxlPD1hdS5pbmZvJiYoWS5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLEFvKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzRtIixBbygiSU5GTyIpKSksZTw9YXUuZGVidWcmJihZLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsQW8oIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsQW8oIkRFQlVHIikpKSxlPD1hdS50cmFjZSYmKFkudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxBbygiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixBbygiVFJBQ0UiKSkpfSwic2V0TG9nTGV2ZWwiKSxBbz1vKHQ9PmAlYyR7KDAsSUYuZGVmYXVsdCkoKS5mb3JtYXQoInNzLlNTUyIpfSA6ICR7dH0gOiBgLCJmb3JtYXQiKX0pO3ZhciB1eGUsdXAsRFMsT0YsVWI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1eGU9T2JqZWN0LmZyZWV6ZSh7bGVmdDowLHRvcDowLHdpZHRoOjE2LGhlaWdodDoxNn0pLHVwPU9iamVjdC5mcmVlemUoe3JvdGF0ZTowLHZGbGlwOiExLGhGbGlwOiExfSksRFM9T2JqZWN0LmZyZWV6ZSh7Li4udXhlLC4uLnVwfSksT0Y9T2JqZWN0LmZyZWV6ZSh7Li4uRFMsYm9keToiIixoaWRkZW46ITF9KX0pO3ZhciBoeGUsUEYsQkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVYigpO2h4ZT1PYmplY3QuZnJlZXplKHt3aWR0aDpudWxsLGhlaWdodDpudWxsfSksUEY9T2JqZWN0LmZyZWV6ZSh7Li4uaHhlLC4uLnVwfSl9KTt2YXIgSGIsTlMsV2IsRkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIYj0vXlthLXowLTldKygtW2EtejAtOV0rKSokLyxOUz1vKCh0LGUscixuPSIiKT0+e2xldCBpPXQuc3BsaXQoIjoiKTtpZih0LnNsaWNlKDAsMSk9PT0iQCIpe2lmKGkubGVuZ3RoPDJ8fGkubGVuZ3RoPjMpcmV0dXJuIG51bGw7bj1pLnNoaWZ0KCkuc2xpY2UoMSl9aWYoaS5sZW5ndGg+M3x8IWkubGVuZ3RoKXJldHVybiBudWxsO2lmKGkubGVuZ3RoPjEpe2xldCBsPWkucG9wKCksdT1pLnBvcCgpLGg9e3Byb3ZpZGVyOmkubGVuZ3RoPjA/aVswXTpuLHByZWZpeDp1LG5hbWU6bH07cmV0dXJuIGUmJiFXYihoKT9udWxsOmh9bGV0IGE9aVswXSxzPWEuc3BsaXQoIi0iKTtpZihzLmxlbmd0aD4xKXtsZXQgbD17cHJvdmlkZXI6bixwcmVmaXg6cy5zaGlmdCgpLG5hbWU6cy5qb2luKCItIil9O3JldHVybiBlJiYhV2IobCk/bnVsbDpsfWlmKHImJm49PT0iIil7bGV0IGw9e3Byb3ZpZGVyOm4scHJlZml4OiIiLG5hbWU6YX07cmV0dXJuIGUmJiFXYihsLHIpP251bGw6bH1yZXR1cm4gbnVsbH0sInN0cmluZ1RvSWNvbiIpLFdiPW8oKHQsZSk9PnQ/ISEoKHQucHJvdmlkZXI9PT0iInx8dC5wcm92aWRlci5tYXRjaChIYikpJiYoZSYmdC5wcmVmaXg9PT0iInx8dC5wcmVmaXgubWF0Y2goSGIpKSYmdC5uYW1lLm1hdGNoKEhiKSk6ITEsInZhbGlkYXRlSWNvbk5hbWUiKX0pO2Z1bmN0aW9uIHpGKHQsZSl7bGV0IHI9e307IXQuaEZsaXAhPSFlLmhGbGlwJiYoci5oRmxpcD0hMCksIXQudkZsaXAhPSFlLnZGbGlwJiYoci52RmxpcD0hMCk7bGV0IG49KCh0LnJvdGF0ZXx8MCkrKGUucm90YXRlfHwwKSklNDtyZXR1cm4gbiYmKHIucm90YXRlPW4pLHJ9dmFyIEdGPU0oKCk9PnsidXNlIHN0cmljdCI7byh6RiwibWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zIil9KTtmdW5jdGlvbiBSUyh0LGUpe2xldCByPXpGKHQsZSk7Zm9yKGxldCBuIGluIE9GKW4gaW4gdXA/biBpbiB0JiYhKG4gaW4gcikmJihyW25dPXVwW25dKTpuIGluIGU/cltuXT1lW25dOm4gaW4gdCYmKHJbbl09dFtuXSk7cmV0dXJuIHJ9dmFyICRGPU0oKCk9PnsidXNlIHN0cmljdCI7VWIoKTtHRigpO28oUlMsIm1lcmdlSWNvbkRhdGEiKX0pO2Z1bmN0aW9uIFZGKHQsZSl7bGV0IHI9dC5pY29ucyxuPXQuYWxpYXNlc3x8T2JqZWN0LmNyZWF0ZShudWxsKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gYShzKXtpZihyW3NdKXJldHVybiBpW3NdPVtdO2lmKCEocyBpbiBpKSl7aVtzXT1udWxsO2xldCBsPW5bc10mJm5bc10ucGFyZW50LHU9bCYmYShsKTt1JiYoaVtzXT1bbF0uY29uY2F0KHUpKX1yZXR1cm4gaVtzXX1yZXR1cm4gbyhhLCJyZXNvbHZlIiksKGV8fE9iamVjdC5rZXlzKHIpLmNvbmNhdChPYmplY3Qua2V5cyhuKSkpLmZvckVhY2goYSksaX12YXIgVUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFZGLCJnZXRJY29uc1RyZWUiKX0pO2Z1bmN0aW9uIEhGKHQsZSxyKXtsZXQgbj10Lmljb25zLGk9dC5hbGlhc2VzfHxPYmplY3QuY3JlYXRlKG51bGwpLGE9e307ZnVuY3Rpb24gcyhsKXthPVJTKG5bbF18fGlbbF0sYSl9cmV0dXJuIG8ocywicGFyc2UiKSxzKGUpLHIuZm9yRWFjaChzKSxSUyh0LGEpfWZ1bmN0aW9uIE1TKHQsZSl7aWYodC5pY29uc1tlXSlyZXR1cm4gSEYodCxlLFtdKTtsZXQgcj1WRih0LFtlXSlbZV07cmV0dXJuIHI/SEYodCxlLHIpOm51bGx9dmFyIFdGPU0oKCk9PnsidXNlIHN0cmljdCI7JEYoKTtVRigpO28oSEYsImludGVybmFsR2V0SWNvbkRhdGEiKTtvKE1TLCJnZXRJY29uRGF0YSIpfSk7ZnVuY3Rpb24gSVModCxlLHIpe2lmKGU9PT0xKXJldHVybiB0O2lmKHI9cnx8MTAwLHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gTWF0aC5jZWlsKHQqZSpyKS9yO2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdDtsZXQgbj10LnNwbGl0KGZ4ZSk7aWYobj09PW51bGx8fCFuLmxlbmd0aClyZXR1cm4gdDtsZXQgaT1bXSxhPW4uc2hpZnQoKSxzPWR4ZS50ZXN0KGEpO2Zvcig7Oyl7aWYocyl7bGV0IGw9cGFyc2VGbG9hdChhKTtpc05hTihsKT9pLnB1c2goYSk6aS5wdXNoKE1hdGguY2VpbChsKmUqcikvcil9ZWxzZSBpLnB1c2goYSk7aWYoYT1uLnNoaWZ0KCksYT09PXZvaWQgMClyZXR1cm4gaS5qb2luKCIiKTtzPSFzfX12YXIgZnhlLGR4ZSxZRj1NKCgpPT57InVzZSBzdHJpY3QiO2Z4ZT0vKC0/WzAtOS5dKlswLTldK1swLTkuXSopL2csZHhlPS9eLT9bMC05Ll0qWzAtOV0rWzAtOS5dKiQvZztvKElTLCJjYWxjdWxhdGVTaXplIil9KTtmdW5jdGlvbiBweGUodCxlPSJkZWZzIil7bGV0IHI9IiIsbj10LmluZGV4T2YoIjwiK2UpO2Zvcig7bj49MDspe2xldCBpPXQuaW5kZXhPZigiPiIsbiksYT10LmluZGV4T2YoIjwvIitlKTtpZihpPT09LTF8fGE9PT0tMSlicmVhaztsZXQgcz10LmluZGV4T2YoIj4iLGEpO2lmKHM9PT0tMSlicmVhaztyKz10LnNsaWNlKGkrMSxhKS50cmltKCksdD10LnNsaWNlKDAsbikudHJpbSgpK3Quc2xpY2UocysxKX1yZXR1cm57ZGVmczpyLGNvbnRlbnQ6dH19ZnVuY3Rpb24gbXhlKHQsZSl7cmV0dXJuIHQ/IjxkZWZzPiIrdCsiPC9kZWZzPiIrZTplfWZ1bmN0aW9uIHFGKHQsZSxyKXtsZXQgbj1weGUodCk7cmV0dXJuIG14ZShuLmRlZnMsZStuLmNvbnRlbnQrcil9dmFyIFhGPU0oKCk9PnsidXNlIHN0cmljdCI7byhweGUsInNwbGl0U1ZHRGVmcyIpO28obXhlLCJtZXJnZURlZnNBbmRDb250ZW50Iik7byhxRiwid3JhcFNWR0NvbnRlbnQiKX0pO2Z1bmN0aW9uIE9TKHQsZSl7bGV0IHI9ey4uLkRTLC4uLnR9LG49ey4uLlBGLC4uLmV9LGk9e2xlZnQ6ci5sZWZ0LHRvcDpyLnRvcCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0sYT1yLmJvZHk7W3Isbl0uZm9yRWFjaCh5PT57bGV0IHY9W10seD15LmhGbGlwLGI9eS52RmxpcCx3PXkucm90YXRlO3g/Yj93Kz0yOih2LnB1c2goInRyYW5zbGF0ZSgiKyhpLndpZHRoK2kubGVmdCkudG9TdHJpbmcoKSsiICIrKDAtaS50b3ApLnRvU3RyaW5nKCkrIikiKSx2LnB1c2goInNjYWxlKC0xIDEpIiksaS50b3A9aS5sZWZ0PTApOmImJih2LnB1c2goInRyYW5zbGF0ZSgiKygwLWkubGVmdCkudG9TdHJpbmcoKSsiICIrKGkuaGVpZ2h0K2kudG9wKS50b1N0cmluZygpKyIpIiksdi5wdXNoKCJzY2FsZSgxIC0xKSIpLGkudG9wPWkubGVmdD0wKTtsZXQgXztzd2l0Y2godzwwJiYody09TWF0aC5mbG9vcih3LzQpKjQpLHc9dyU0LHcpe2Nhc2UgMTpfPWkuaGVpZ2h0LzIraS50b3Asdi51bnNoaWZ0KCJyb3RhdGUoOTAgIitfLnRvU3RyaW5nKCkrIiAiK18udG9TdHJpbmcoKSsiKSIpO2JyZWFrO2Nhc2UgMjp2LnVuc2hpZnQoInJvdGF0ZSgxODAgIisoaS53aWR0aC8yK2kubGVmdCkudG9TdHJpbmcoKSsiICIrKGkuaGVpZ2h0LzIraS50b3ApLnRvU3RyaW5nKCkrIikiKTticmVhaztjYXNlIDM6Xz1pLndpZHRoLzIraS5sZWZ0LHYudW5zaGlmdCgicm90YXRlKC05MCAiK18udG9TdHJpbmcoKSsiICIrXy50b1N0cmluZygpKyIpIik7YnJlYWt9dyUyPT09MSYmKGkubGVmdCE9PWkudG9wJiYoXz1pLmxlZnQsaS5sZWZ0PWkudG9wLGkudG9wPV8pLGkud2lkdGghPT1pLmhlaWdodCYmKF89aS53aWR0aCxpLndpZHRoPWkuaGVpZ2h0LGkuaGVpZ2h0PV8pKSx2Lmxlbmd0aCYmKGE9cUYoYSwnPGcgdHJhbnNmb3JtPSInK3Yuam9pbigiICIpKyciPicsIjwvZz4iKSl9KTtsZXQgcz1uLndpZHRoLGw9bi5oZWlnaHQsdT1pLndpZHRoLGg9aS5oZWlnaHQsZixkO3M9PT1udWxsPyhkPWw9PT1udWxsPyIxZW0iOmw9PT0iYXV0byI/aDpsLGY9SVMoZCx1L2gpKTooZj1zPT09ImF1dG8iP3U6cyxkPWw9PT1udWxsP0lTKGYsaC91KTpsPT09ImF1dG8iP2g6bCk7bGV0IHA9e30sbT1vKCh5LHYpPT57Z3hlKHYpfHwocFt5XT12LnRvU3RyaW5nKCkpfSwic2V0QXR0ciIpO20oIndpZHRoIixmKSxtKCJoZWlnaHQiLGQpO2xldCBnPVtpLmxlZnQsaS50b3AsdSxoXTtyZXR1cm4gcC52aWV3Qm94PWcuam9pbigiICIpLHthdHRyaWJ1dGVzOnAsdmlld0JveDpnLGJvZHk6YX19dmFyIGd4ZSxqRj1NKCgpPT57InVzZSBzdHJpY3QiO1ViKCk7QkYoKTtZRigpO1hGKCk7Z3hlPW8odD0+dD09PSJ1bnNldCJ8fHQ9PT0idW5kZWZpbmVkInx8dD09PSJub25lIiwiaXNVbnNldEtleXdvcmQiKTtvKE9TLCJpY29uVG9TVkciKX0pO2Z1bmN0aW9uIFBTKHQsZT12eGUpe2xldCByPVtdLG47Zm9yKDtuPXl4ZS5leGVjKHQpOylyLnB1c2goblsxXSk7aWYoIXIubGVuZ3RoKXJldHVybiB0O2xldCBpPSJzdWZmaXgiKyhNYXRoLnJhbmRvbSgpKjE2Nzc3MjE2fERhdGUubm93KCkpLnRvU3RyaW5nKDE2KTtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKGEpOmUrKHh4ZSsrKS50b1N0cmluZygpLGw9YS5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpO3Q9dC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbIzsiXSkoJytsKycpKFsiKV18XFwuW2Etel0pJywiZyIpLCIkMSIrcytpKyIkMyIpfSksdD10LnJlcGxhY2UobmV3IFJlZ0V4cChpLCJnIiksIiIpLHR9dmFyIHl4ZSx2eGUseHhlLEtGPU0oKCk9PnsidXNlIHN0cmljdCI7eXhlPS9cc2lkPSIoXFMrKSIvZyx2eGU9Ikljb25pZnlJZCIrRGF0ZS5ub3coKS50b1N0cmluZygxNikrKE1hdGgucmFuZG9tKCkqMTY3NzcyMTZ8MCkudG9TdHJpbmcoMTYpLHh4ZT0wO28oUFMsInJlcGxhY2VJRHMiKX0pO2Z1bmN0aW9uIEJTKHQsZSl7bGV0IHI9dC5pbmRleE9mKCJ4bGluazoiKT09PS0xPyIiOicgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiJztmb3IobGV0IG4gaW4gZSlyKz0iICIrbisnPSInK2Vbbl0rJyInO3JldHVybic8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInK3IrIj4iK3QrIjwvc3ZnPiJ9dmFyIFFGPU0oKCk9PnsidXNlIHN0cmljdCI7byhCUywiaWNvblRvSFRNTCIpfSk7dmFyIEpGPUVpKChQYXQsWkYpPT57InVzZSBzdHJpY3QiO3ZhciBocD0xZTMsZnA9aHAqNjAsZHA9ZnAqNjAsamY9ZHAqMjQsYnhlPWpmKjcsd3hlPWpmKjM2NS4yNTtaRi5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10eXBlb2YgdDtpZihyPT09InN0cmluZyImJnQubGVuZ3RoPjApcmV0dXJuIFR4ZSh0KTtpZihyPT09Im51bWJlciImJmlzRmluaXRlKHQpKXJldHVybiBlLmxvbmc/RXhlKHQpOmt4ZSh0KTt0aHJvdyBuZXcgRXJyb3IoInZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9IitKU09OLnN0cmluZ2lmeSh0KSl9O2Z1bmN0aW9uIFR4ZSh0KXtpZih0PVN0cmluZyh0KSwhKHQubGVuZ3RoPjEwMCkpe3ZhciBlPS9eKC0/KD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyh0KTtpZihlKXt2YXIgcj1wYXJzZUZsb2F0KGVbMV0pLG49KGVbMl18fCJtcyIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKG4pe2Nhc2UieWVhcnMiOmNhc2UieWVhciI6Y2FzZSJ5cnMiOmNhc2UieXIiOmNhc2UieSI6cmV0dXJuIHIqd3hlO2Nhc2Uid2Vla3MiOmNhc2Uid2VlayI6Y2FzZSJ3IjpyZXR1cm4gcipieGU7Y2FzZSJkYXlzIjpjYXNlImRheSI6Y2FzZSJkIjpyZXR1cm4gcipqZjtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKmRwO2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqZnA7Y2FzZSJzZWNvbmRzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNzIjpjYXNlInNlYyI6Y2FzZSJzIjpyZXR1cm4gcipocDtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1vKFR4ZSwicGFyc2UiKTtmdW5jdGlvbiBreGUodCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PWpmP01hdGgucm91bmQodC9qZikrImQiOmU+PWRwP01hdGgucm91bmQodC9kcCkrImgiOmU+PWZwP01hdGgucm91bmQodC9mcCkrIm0iOmU+PWhwP01hdGgucm91bmQodC9ocCkrInMiOnQrIm1zIn1vKGt4ZSwiZm10U2hvcnQiKTtmdW5jdGlvbiBFeGUodCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PWpmP1liKHQsZSxqZiwiZGF5Iik6ZT49ZHA/WWIodCxlLGRwLCJob3VyIik6ZT49ZnA/WWIodCxlLGZwLCJtaW51dGUiKTplPj1ocD9ZYih0LGUsaHAsInNlY29uZCIpOnQrIiBtcyJ9byhFeGUsImZtdExvbmciKTtmdW5jdGlvbiBZYih0LGUscixuKXt2YXIgaT1lPj1yKjEuNTtyZXR1cm4gTWF0aC5yb3VuZCh0L3IpKyIgIituKyhpPyJzIjoiIil9byhZYiwicGx1cmFsIil9KTt2YXIgdHo9RWkoKEZhdCxleik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gU3hlKHQpe3IuZGVidWc9cixyLmRlZmF1bHQ9cixyLmNvZXJjZT11LHIuZGlzYWJsZT1hLHIuZW5hYmxlPWksci5lbmFibGVkPXMsci5odW1hbml6ZT1KRigpLHIuZGVzdHJveT1oLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZj0+e3JbZl09dFtmXX0pLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e307ZnVuY3Rpb24gZShmKXtsZXQgZD0wO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWQ9KGQ8PDUpLWQrZi5jaGFyQ29kZUF0KHApLGR8PTA7cmV0dXJuIHIuY29sb3JzW01hdGguYWJzKGQpJXIuY29sb3JzLmxlbmd0aF19byhlLCJzZWxlY3RDb2xvciIpLHIuc2VsZWN0Q29sb3I9ZTtmdW5jdGlvbiByKGYpe2xldCBkLHA9bnVsbCxtLGc7ZnVuY3Rpb24geSguLi52KXtpZigheS5lbmFibGVkKXJldHVybjtsZXQgeD15LGI9TnVtYmVyKG5ldyBEYXRlKSx3PWItKGR8fGIpO3guZGlmZj13LHgucHJldj1kLHguY3Vycj1iLGQ9Yix2WzBdPXIuY29lcmNlKHZbMF0pLHR5cGVvZiB2WzBdIT0ic3RyaW5nIiYmdi51bnNoaWZ0KCIlTyIpO2xldCBfPTA7dlswXT12WzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLChFLEwpPT57aWYoRT09PSIlJSIpcmV0dXJuIiUiO18rKztsZXQgUz1yLmZvcm1hdHRlcnNbTF07aWYodHlwZW9mIFM9PSJmdW5jdGlvbiIpe2xldCBBPXZbX107RT1TLmNhbGwoeCxBKSx2LnNwbGljZShfLDEpLF8tLX1yZXR1cm4gRX0pLHIuZm9ybWF0QXJncy5jYWxsKHgsdiksKHgubG9nfHxyLmxvZykuYXBwbHkoeCx2KX1yZXR1cm4gbyh5LCJkZWJ1ZyIpLHkubmFtZXNwYWNlPWYseS51c2VDb2xvcnM9ci51c2VDb2xvcnMoKSx5LmNvbG9yPXIuc2VsZWN0Q29sb3IoZikseS5leHRlbmQ9bix5LmRlc3Ryb3k9ci5kZXN0cm95LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJlbmFibGVkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0Om8oKCk9PnAhPT1udWxsP3A6KG0hPT1yLm5hbWVzcGFjZXMmJihtPXIubmFtZXNwYWNlcyxnPXIuZW5hYmxlZChmKSksZyksImdldCIpLHNldDpvKHY9PntwPXZ9LCJzZXQiKX0pLHR5cGVvZiByLmluaXQ9PSJmdW5jdGlvbiImJnIuaW5pdCh5KSx5fW8ociwiY3JlYXRlRGVidWciKTtmdW5jdGlvbiBuKGYsZCl7bGV0IHA9cih0aGlzLm5hbWVzcGFjZSsodHlwZW9mIGQ+InUiPyI6IjpkKStmKTtyZXR1cm4gcC5sb2c9dGhpcy5sb2cscH1vKG4sImV4dGVuZCIpO2Z1bmN0aW9uIGkoZil7ci5zYXZlKGYpLHIubmFtZXNwYWNlcz1mLHIubmFtZXM9W10sci5za2lwcz1bXTtsZXQgZCxwPSh0eXBlb2YgZj09InN0cmluZyI/ZjoiIikuc3BsaXQoL1tccyxdKy8pLG09cC5sZW5ndGg7Zm9yKGQ9MDtkPG07ZCsrKXBbZF0mJihmPXBbZF0ucmVwbGFjZSgvXCovZywiLio/IiksZlswXT09PSItIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZi5zbGljZSgxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZisiJCIpKSl9byhpLCJlbmFibGUiKTtmdW5jdGlvbiBhKCl7bGV0IGY9Wy4uLnIubmFtZXMubWFwKGwpLC4uLnIuc2tpcHMubWFwKGwpLm1hcChkPT4iLSIrZCldLmpvaW4oIiwiKTtyZXR1cm4gci5lbmFibGUoIiIpLGZ9byhhLCJkaXNhYmxlIik7ZnVuY3Rpb24gcyhmKXtpZihmW2YubGVuZ3RoLTFdPT09IioiKXJldHVybiEwO2xldCBkLHA7Zm9yKGQ9MCxwPXIuc2tpcHMubGVuZ3RoO2Q8cDtkKyspaWYoci5za2lwc1tkXS50ZXN0KGYpKXJldHVybiExO2ZvcihkPTAscD1yLm5hbWVzLmxlbmd0aDtkPHA7ZCsrKWlmKHIubmFtZXNbZF0udGVzdChmKSlyZXR1cm4hMDtyZXR1cm4hMX1vKHMsImVuYWJsZWQiKTtmdW5jdGlvbiBsKGYpe3JldHVybiBmLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsZi50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cLlwqXD8kLywiKiIpfW8obCwidG9OYW1lc3BhY2UiKTtmdW5jdGlvbiB1KGYpe3JldHVybiBmIGluc3RhbmNlb2YgRXJyb3I/Zi5zdGFja3x8Zi5tZXNzYWdlOmZ9byh1LCJjb2VyY2UiKTtmdW5jdGlvbiBoKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIG8oaCwiZGVzdHJveSIpLHIuZW5hYmxlKHIubG9hZCgpKSxyfW8oU3hlLCJzZXR1cCIpO2V6LmV4cG9ydHM9U3hlfSk7dmFyIHJ6PUVpKChRcyxxYik9PnsidXNlIHN0cmljdCI7UXMuZm9ybWF0QXJncz1BeGU7UXMuc2F2ZT1feGU7UXMubG9hZD1MeGU7UXMudXNlQ29sb3JzPUN4ZTtRcy5zdG9yYWdlPUR4ZSgpO1FzLmRlc3Ryb3k9KCgpPT57bGV0IHQ9ITE7cmV0dXJuKCk9Pnt0fHwodD0hMCxjb25zb2xlLndhcm4oIkluc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4iKSl9fSkoKTtRcy5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gQ3hlKCl7aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5wcm9jZXNzJiYod2luZG93LnByb2Nlc3MudHlwZT09PSJyZW5kZXJlciJ8fHdpbmRvdy5wcm9jZXNzLl9fbndqcykpcmV0dXJuITA7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcLyhcZCspLykpcmV0dXJuITE7bGV0IHQ7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlJiYod2luZG93LmNvbnNvbGUuZmlyZWJ1Z3x8d2luZG93LmNvbnNvbGUuZXhjZXB0aW9uJiZ3aW5kb3cuY29uc29sZS50YWJsZSl8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiYodD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcLyhcZCspLykpJiZwYXJzZUludCh0WzFdLDEwKT49MzF8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XC8oXGQrKS8pfW8oQ3hlLCJ1c2VDb2xvcnMiKTtmdW5jdGlvbiBBeGUodCl7aWYodFswXT0odGhpcy51c2VDb2xvcnM/IiVjIjoiIikrdGhpcy5uYW1lc3BhY2UrKHRoaXMudXNlQ29sb3JzPyIgJWMiOiIgIikrdFswXSsodGhpcy51c2VDb2xvcnM/IiVjICI6IiAiKSsiKyIrcWIuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpLCF0aGlzLnVzZUNvbG9ycylyZXR1cm47bGV0IGU9ImNvbG9yOiAiK3RoaXMuY29sb3I7dC5zcGxpY2UoMSwwLGUsImNvbG9yOiBpbmhlcml0Iik7bGV0IHI9MCxuPTA7dFswXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csaT0+e2khPT0iJSUiJiYocisrLGk9PT0iJWMiJiYobj1yKSl9KSx0LnNwbGljZShuLDAsZSl9byhBeGUsImZvcm1hdEFyZ3MiKTtRcy5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIF94ZSh0KXt0cnl7dD9Rcy5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIix0KTpRcy5zdG9yYWdlLnJlbW92ZUl0ZW0oImRlYnVnIil9Y2F0Y2h7fX1vKF94ZSwic2F2ZSIpO2Z1bmN0aW9uIEx4ZSgpe2xldCB0O3RyeXt0PVFzLnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIXQmJnR5cGVvZiBwcm9jZXNzPCJ1IiYmImVudiJpbiBwcm9jZXNzJiYodD1wcm9jZXNzLmVudi5ERUJVRyksdH1vKEx4ZSwibG9hZCIpO2Z1bmN0aW9uIER4ZSgpe3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlfWNhdGNoe319byhEeGUsImxvY2Fsc3RvcmFnZSIpO3FiLmV4cG9ydHM9dHooKShRcyk7dmFye2Zvcm1hdHRlcnM6TnhlfT1xYi5leHBvcnRzO054ZS5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK2UubWVzc2FnZX19fSk7dmFyICRhdCxuej1NKCgpPT57InVzZSBzdHJpY3QiO0ZGKCk7V0YoKTtqRigpO0tGKCk7UUYoKTskYXQ9SmkocnooKSwxKX0pO3ZhciB6UyxGUyxpeixYYixSeGUsX28sc3U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO256KCk7elM9e2JvZHk6JzxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjE2IDY0LjY3KSIgc3R5bGU9ImZpbGw6ICNmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbE1ULCBBcmlhbDsgZm9udC1zaXplOiA2Ny43NXB4OyI+PHRzcGFuIHg9IjAiIHk9IjAiPj88L3RzcGFuPjwvdGV4dD48L2c+JyxoZWlnaHQ6ODAsd2lkdGg6ODB9LEZTPW5ldyBNYXAsaXo9bmV3IE1hcCxYYj1vKHQ9Pntmb3IobGV0IGUgb2YgdCl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBhICJuYW1lIiBwcm9wZXJ0eSB3aXRoIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuJyk7aWYoWS5kZWJ1ZygiUmVnaXN0ZXJpbmcgaWNvbiBwYWNrOiIsZS5uYW1lKSwibG9hZGVyImluIGUpaXouc2V0KGUubmFtZSxlLmxvYWRlcik7ZWxzZSBpZigiaWNvbnMiaW4gZSlGUy5zZXQoZS5uYW1lLGUuaWNvbnMpO2Vsc2UgdGhyb3cgWS5lcnJvcigiSW52YWxpZCBpY29uIGxvYWRlcjoiLGUpLG5ldyBFcnJvcignSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGVpdGhlciAiaWNvbnMiIG9yICJsb2FkZXIiIHByb3BlcnR5LicpfX0sInJlZ2lzdGVySWNvblBhY2tzIiksUnhlPW8oYXN5bmModCxlKT0+e2xldCByPU5TKHQsITAsZSE9PXZvaWQgMCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogJHt0fWApO2xldCBuPXIucHJlZml4fHxlO2lmKCFuKXRocm93IG5ldyBFcnJvcihgSWNvbiBuYW1lIG11c3QgY29udGFpbiBhIHByZWZpeDogJHt0fWApO2xldCBpPUZTLmdldChuKTtpZighaSl7bGV0IHM9aXouZ2V0KG4pO2lmKCFzKXRocm93IG5ldyBFcnJvcihgSWNvbiBzZXQgbm90IGZvdW5kOiAke3IucHJlZml4fWApO3RyeXtpPXsuLi5hd2FpdCBzKCkscHJlZml4Om59LEZTLnNldChuLGkpfWNhdGNoKGwpe3Rocm93IFkuZXJyb3IobCksbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBpY29uIHNldDogJHtyLnByZWZpeH1gKX19bGV0IGE9TVMoaSxyLm5hbWUpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSWNvbiBub3QgZm91bmQ6ICR7dH1gKTtyZXR1cm4gYX0sImdldFJlZ2lzdGVyZWRJY29uRGF0YSIpLF9vPW8oYXN5bmModCxlKT0+e2xldCByO3RyeXtyPWF3YWl0IFJ4ZSh0LGU/LmZhbGxiYWNrUHJlZml4KX1jYXRjaChhKXtZLmVycm9yKGEpLHI9elN9bGV0IG49T1MocixlKTtyZXR1cm4gQlMoUFMobi5ib2R5KSxuLmF0dHJpYnV0ZXMpfSwiZ2V0SWNvblNWRyIpfSk7ZnVuY3Rpb24gamIodCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dmFyIG49QXJyYXkuZnJvbSh0eXBlb2YgdD09InN0cmluZyI/W3RdOnQpO25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5yZXBsYWNlKC9ccj9cbihbXHQgXSopJC8sIiIpO3ZhciBpPW4ucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGg9dS5tYXRjaCgvXG4oW1x0IF0rfCg/IVxzKS4pL2cpO3JldHVybiBoP2wuY29uY2F0KGgubWFwKGZ1bmN0aW9uKGYpe3ZhciBkLHA7cmV0dXJuKHA9KGQ9Zi5tYXRjaCgvW1x0IF0vZykpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgpIT09bnVsbCYmcCE9PXZvaWQgMD9wOjB9KSk6bH0sW10pO2lmKGkubGVuZ3RoKXt2YXIgYT1uZXcgUmVnRXhwKGAKWwkgXXtgK01hdGgubWluLmFwcGx5KE1hdGgsaSkrIn0iLCJnIik7bj1uLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKGEsYApgKX0pfW5bMF09blswXS5yZXBsYWNlKC9eXHI/XG4vLCIiKTt2YXIgcz1uWzBdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obCx1KXt2YXIgaD1zLm1hdGNoKC8oPzpefFxuKSggKikkLyksZj1oP2hbMV06IiIsZD1sO3R5cGVvZiBsPT0ic3RyaW5nIiYmbC5pbmNsdWRlcyhgCmApJiYoZD1TdHJpbmcobCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24ocCxtKXtyZXR1cm4gbT09PTA/cDoiIitmK3B9KS5qb2luKGAKYCkpLHMrPWQrblt1KzFdfSksc312YXIgR1M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpiLCJkZWRlbnQiKX0pO3ZhciBLYixLZixheixRYj1NKCgpPT57InVzZSBzdHJpY3QiO0tiPS9eLXszfVxzKltcblxyXSguKj8pW1xuXHJdLXszfVxzKltcblxyXSsvcyxLZj0vJXsyfXtccyooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksYXo9L1xzKiUlLipcbi9nbX0pO3ZhciBwcCwkUz1NKCgpPT57InVzZSBzdHJpY3QiO3BwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVW5rbm93bkRpYWdyYW1FcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fX0pO3ZhciBRZixtcCxaYixWUyxzeixaZj1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7UWIoKTskUygpO1FmPXt9LG1wPW8oZnVuY3Rpb24odCxlKXt0PXQucmVwbGFjZShLYiwiIikucmVwbGFjZShLZiwiIikucmVwbGFjZShheixgCmApO2ZvcihsZXRbcix7ZGV0ZWN0b3I6bn1db2YgT2JqZWN0LmVudHJpZXMoUWYpKWlmKG4odCxlKSlyZXR1cm4gcjt0aHJvdyBuZXcgcHAoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3R9YCl9LCJkZXRlY3RUeXBlIiksWmI9bygoLi4udCk9Pntmb3IobGV0e2lkOmUsZGV0ZWN0b3I6cixsb2FkZXI6bn1vZiB0KVZTKGUscixuKX0sInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zIiksVlM9bygodCxlLHIpPT57UWZbdF0mJlkud2FybihgRGV0ZWN0b3Igd2l0aCBrZXkgJHt0fSBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRpbmcuYCksUWZbdF09e2RldGVjdG9yOmUsbG9hZGVyOnJ9LFkuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7dH0gYWRkZWQke3I/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LCJhZGREZXRlY3RvciIpLHN6PW8odD0+UWZbdF0ubG9hZGVyLCJnZXREaWFncmFtTG9hZGVyIil9KTt2YXIgZXksb3osVVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtleT1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oJGUseWUsWCxmZSl7Zm9yKFg9WHx8e30sZmU9JGUubGVuZ3RoO2ZlLS07WFskZVtmZV1dPXllKTtyZXR1cm4gWH0sIm8iKSxlPVsxLDI0XSxyPVsxLDI1XSxuPVsxLDI2XSxpPVsxLDI3XSxhPVsxLDI4XSxzPVsxLDYzXSxsPVsxLDY0XSx1PVsxLDY1XSxoPVsxLDY2XSxmPVsxLDY3XSxkPVsxLDY4XSxwPVsxLDY5XSxtPVsxLDI5XSxnPVsxLDMwXSx5PVsxLDMxXSx2PVsxLDMyXSx4PVsxLDMzXSxiPVsxLDM0XSx3PVsxLDM1XSxfPVsxLDM2XSxUPVsxLDM3XSxFPVsxLDM4XSxMPVsxLDM5XSxTPVsxLDQwXSxBPVsxLDQxXSxJPVsxLDQyXSxEPVsxLDQzXSxrPVsxLDQ0XSxSPVsxLDQ1XSxDPVsxLDQ2XSxPPVsxLDQ3XSxOPVsxLDQ4XSxQPVsxLDUwXSxGPVsxLDUxXSxCPVsxLDUyXSxHPVsxLDUzXSx6PVsxLDU0XSxXPVsxLDU1XSxaPVsxLDU2XSxqPVsxLDU3XSxvZT1bMSw1OF0sSz1bMSw1OV0sZWU9WzEsNjBdLEo9WzE0LDQyXSxIPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0scT1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFE9WzEsODJdLGFlPVsxLDgzXSx1ZT1bMSw4NF0sY2U9WzEsODVdLHRlPVsxMiwxNCw0Ml0sTmU9WzEyLDE0LDMzLDQyXSxzZT1bMTIsMTQsMzMsNDIsNzYsNzcsNzksODBdLGtlPVsxMiwzM10sUmU9WzM0LDM2LDM3LDM4LDM5LDQwLDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxDZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHllLFgsZmUsaGUsZ2UsbmUsdmUpe3ZhciBVPW5lLmxlbmd0aC0xO3N3aXRjaChnZSl7Y2FzZSAzOmhlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDQ6aGUuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTpoZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OmhlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmhlLnNldEM0VHlwZShuZVtVLTNdKTticmVhaztjYXNlIDE5OmhlLnNldFRpdGxlKG5lW1VdLnN1YnN0cmluZyg2KSksdGhpcy4kPW5lW1VdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOmhlLnNldEFjY0Rlc2NyaXB0aW9uKG5lW1VdLnN1YnN0cmluZygxNSkpLHRoaXMuJD1uZVtVXS5zdWJzdHJpbmcoMTUpO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPW5lW1VdLnRyaW0oKSxoZS5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp0aGlzLiQ9bmVbVV0udHJpbSgpLGhlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpuZVtVXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksaGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMjk6bmVbVV0uc3BsaWNlKDIsMCwiU1lTVEVNIiksaGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzA6aGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzE6bmVbVV0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksaGUuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDMyOmhlLmFkZERlcGxveW1lbnROb2RlKCJub2RlIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzM6aGUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzQ6aGUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzU6aGUucG9wQm91bmRhcnlQYXJzZVN0YWNrKCk7YnJlYWs7Y2FzZSAzOTpoZS5hZGRQZXJzb25PclN5c3RlbSgicGVyc29uIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDA6aGUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQxOmhlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW0iLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0MjpoZS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX2RiIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDM6aGUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQ0OmhlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW0iLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0NTpoZS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX2RiIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDY6aGUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQ3OmhlLmFkZENvbnRhaW5lcigiY29udGFpbmVyIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDg6aGUuYWRkQ29udGFpbmVyKCJjb250YWluZXJfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0OTpoZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDUwOmhlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTE6aGUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1MjpoZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDUzOmhlLmFkZENvbXBvbmVudCgiY29tcG9uZW50IiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTQ6aGUuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1NTpoZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDU2OmhlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50IiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTc6aGUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1ODpoZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDYwOmhlLmFkZFJlbCgicmVsIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjE6aGUuYWRkUmVsKCJiaXJlbCIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDYyOmhlLmFkZFJlbCgicmVsX3UiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2MzpoZS5hZGRSZWwoInJlbF9kIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjQ6aGUuYWRkUmVsKCJyZWxfbCIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDY1OmhlLmFkZFJlbCgicmVsX3IiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2NjpoZS5hZGRSZWwoInJlbF9iIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjc6bmVbVV0uc3BsaWNlKDAsMSksaGUuYWRkUmVsKCJyZWwiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2ODpoZS51cGRhdGVFbFN0eWxlKCJ1cGRhdGVfZWxfc3R5bGUiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2OTpoZS51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDcwOmhlLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9W25lW1VdXTticmVhaztjYXNlIDcyOm5lW1VdLnVuc2hpZnQobmVbVS0xXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9bmVbVV0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IFRlPXt9O1RlW25lW1UtMV0udHJpbSgpXT1uZVtVXS50cmltKCksdGhpcy4kPVRlO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw3OlsxLDZdLDg6WzEsN10sOTpbMSw4XSwxMDo0LDExOlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMV0sMTc6WzEsMTJdLDE4OlsxLDEzXX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDddfSx7MTpbMiwzXX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezEyOlsxLDE0XX0sezEyOlsxLDE1XX0sezEyOlsxLDE2XX0sezEyOlsxLDE3XX0sezEyOlsxLDE4XX0sezEzOjE5LDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjcyLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezE0OlsxLDc0XX0sdChKLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOl8sNTI6VCw1MzpFLDU0OkwsNTU6Uyw1NjpBLDU3OkksNTg6RCw1OTprLDYwOlIsNjE6Qyw2MjpPLDYzOk4sNjQ6UCw2NTpGLDY2OkIsNjc6Ryw2ODp6LDY5OlcsNzA6Wiw3MTpqLDcyOm9lLDczOkssNzQ6ZWV9KSx0KEosWzIsMTRdKSx0KEgsWzIsMTZdLHsxMjpbMSw3Nl19KSx0KEosWzIsMzZdLHsxMjpbMSw3N119KSx0KHEsWzIsMTldKSx0KHEsWzIsMjBdKSx7MjU6WzEsNzhdfSx7Mjc6WzEsNzldfSx0KHEsWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojg2LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo4Nyw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6ODgsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojg5LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5MCw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTEsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjkyLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5Myw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTQsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojk1LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5Niw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTcsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojk4LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5OSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTAwLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDEsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwMiw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTAzLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDQsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sdCh0ZSxbMiw1OV0pLHszNToxMDUsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwNiw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTA3LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDgsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwOSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTEwLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMTEsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjExMiw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTEzLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMTQsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjExNSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDM6MjMsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6dyw1MTpfLDUyOlQsNTM6RSw1NDpMLDU1OlMsNTY6QSw1NzpJLDU4OkQsNTk6ayw2MDpSLDYxOkMsNjI6Tyw2MzpOLDY0OlAsNjU6Riw2NjpCLDY3OkcsNjg6eiw2OTpXLDcwOlosNzE6aiw3MjpvZSw3MzpLLDc0OmVlfSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMjAsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEyMSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTIyLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMjMsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEyNCw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTI1LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0sdChKLFsyLDE1XSksdChILFsyLDE3XSx7MjE6MjIsMTk6MTMwLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YX0pLHQoSixbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOl8sNTI6VCw1MzpFLDU0OkwsNTU6Uyw1NjpBLDU3OkksNTg6RCw1OTprLDYwOlIsNjE6Qyw2MjpPLDYzOk4sNjQ6UCw2NTpGLDY2OkIsNjc6Ryw2ODp6LDY5OlcsNzA6Wiw3MTpqLDcyOm9lLDczOkssNzQ6ZWV9KSx0KHEsWzIsMjFdKSx0KHEsWzIsMjJdKSx0KHRlLFsyLDM5XSksdChOZSxbMiw3MV0sezc1OjgxLDM1OjEzMiw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSksdChzZSxbMiw3M10pLHs3ODpbMSwxMzNdfSx0KHNlLFsyLDc1XSksdChzZSxbMiw3Nl0pLHQodGUsWzIsNDBdKSx0KHRlLFsyLDQxXSksdCh0ZSxbMiw0Ml0pLHQodGUsWzIsNDNdKSx0KHRlLFsyLDQ0XSksdCh0ZSxbMiw0NV0pLHQodGUsWzIsNDZdKSx0KHRlLFsyLDQ3XSksdCh0ZSxbMiw0OF0pLHQodGUsWzIsNDldKSx0KHRlLFsyLDUwXSksdCh0ZSxbMiw1MV0pLHQodGUsWzIsNTJdKSx0KHRlLFsyLDUzXSksdCh0ZSxbMiw1NF0pLHQodGUsWzIsNTVdKSx0KHRlLFsyLDU2XSksdCh0ZSxbMiw1N10pLHQodGUsWzIsNThdKSx0KHRlLFsyLDYwXSksdCh0ZSxbMiw2MV0pLHQodGUsWzIsNjJdKSx0KHRlLFsyLDYzXSksdCh0ZSxbMiw2NF0pLHQodGUsWzIsNjVdKSx0KHRlLFsyLDY2XSksdCh0ZSxbMiw2N10pLHQodGUsWzIsNjhdKSx0KHRlLFsyLDY5XSksdCh0ZSxbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSx0KGtlLFsyLDI4XSksdChrZSxbMiwyOV0pLHQoa2UsWzIsMzBdKSx0KGtlLFsyLDMxXSksdChrZSxbMiwzMl0pLHQoa2UsWzIsMzNdKSx0KGtlLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LHQoSCxbMiwxOF0pLHQoSixbMiwzOF0pLHQoTmUsWzIsNzJdKSx0KHNlLFsyLDc0XSksdCh0ZSxbMiwyNF0pLHQodGUsWzIsMzVdKSx0KFJlLFsyLDI1XSksdChSZSxbMiwyNl0sezEyOlsxLDEzOF19KSx0KFJlLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiw3XSw1OlsyLDNdLDY6WzIsNF0sNzpbMiw1XSw4OlsyLDZdLDc0OlsyLDhdLDEyNjpbMiw5XSwxMjc6WzIsMTBdLDEyODpbMiwxMV0sMTI5OlsyLDEyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHllLFgpe2lmKFgucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh5ZSk7ZWxzZXt2YXIgZmU9bmV3IEVycm9yKHllKTt0aHJvdyBmZS5oYXNoPVgsZmV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeWUpe3ZhciBYPXRoaXMsZmU9WzBdLGhlPVtdLGdlPVtudWxsXSxuZT1bXSx2ZT10aGlzLnRhYmxlLFU9IiIsVGU9MCxpZT0wLEVlPTAsQWU9MixHZT0xLEJlPW5lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG1lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSGU9e3l5Ont9fTtmb3IodmFyIE9lIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksT2UpJiYoSGUueXlbT2VdPXRoaXMueXlbT2VdKTttZS5zZXRJbnB1dCh5ZSxIZS55eSksSGUueXkubGV4ZXI9bWUsSGUueXkucGFyc2VyPXRoaXMsdHlwZW9mIG1lLnl5bGxvYz4idSImJihtZS55eWxsb2M9e30pO3ZhciBldD1tZS55eWxsb2M7bmUucHVzaChldCk7dmFyIGJ0PW1lLm9wdGlvbnMmJm1lLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBIZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1IZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrdChCdCl7ZmUubGVuZ3RoPWZlLmxlbmd0aC0yKkJ0LGdlLmxlbmd0aD1nZS5sZW5ndGgtQnQsbmUubGVuZ3RoPW5lLmxlbmd0aC1CdH1vKGt0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHZ0KCl7dmFyIEJ0O3JldHVybiBCdD1oZS5wb3AoKXx8bWUubGV4KCl8fEdlLHR5cGVvZiBCdCE9Im51bWJlciImJihCdCBpbnN0YW5jZW9mIEFycmF5JiYoaGU9QnQsQnQ9aGUucG9wKCkpLEJ0PVguc3ltYm9sc19bQnRdfHxCdCksQnR9byh2dCwibGV4Iik7Zm9yKHZhciBydCx5dCxVZSx0dCxodCxFdCxlcj17fSxkdCxKZSxjdCxDdDs7KXtpZihVZT1mZVtmZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tVZV0/dHQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tVZV06KChydD09PW51bGx8fHR5cGVvZiBydD4idSIpJiYocnQ9dnQoKSksdHQ9dmVbVWVdJiZ2ZVtVZV1bcnRdKSx0eXBlb2YgdHQ+InUifHwhdHQubGVuZ3RofHwhdHRbMF0pe3ZhciBwdD0iIjtDdD1bXTtmb3IoZHQgaW4gdmVbVWVdKXRoaXMudGVybWluYWxzX1tkdF0mJmR0PkFlJiZDdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZHRdKyInIik7bWUuc2hvd1Bvc2l0aW9uP3B0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFRlKzEpK2A6CmArbWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtDdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3J0XXx8cnQpKyInIjpwdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhUZSsxKSsiOiBVbmV4cGVjdGVkICIrKHJ0PT1HZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tydF18fHJ0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihwdCx7dGV4dDptZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bcnRdfHxydCxsaW5lOm1lLnl5bGluZW5vLGxvYzpldCxleHBlY3RlZDpDdH0pfWlmKHR0WzBdaW5zdGFuY2VvZiBBcnJheSYmdHQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitVZSsiLCB0b2tlbjogIitydCk7c3dpdGNoKHR0WzBdKXtjYXNlIDE6ZmUucHVzaChydCksZ2UucHVzaChtZS55eXRleHQpLG5lLnB1c2gobWUueXlsbG9jKSxmZS5wdXNoKHR0WzFdKSxydD1udWxsLHl0PyhydD15dCx5dD1udWxsKTooaWU9bWUueXlsZW5nLFU9bWUueXl0ZXh0LFRlPW1lLnl5bGluZW5vLGV0PW1lLnl5bGxvYyxFZT4wJiZFZS0tKTticmVhaztjYXNlIDI6aWYoSmU9dGhpcy5wcm9kdWN0aW9uc19bdHRbMV1dWzFdLGVyLiQ9Z2VbZ2UubGVuZ3RoLUplXSxlci5fJD17Zmlyc3RfbGluZTpuZVtuZS5sZW5ndGgtKEplfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bmVbbmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bmVbbmUubGVuZ3RoLShKZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuZVtuZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGJ0JiYoZXIuXyQucmFuZ2U9W25lW25lLmxlbmd0aC0oSmV8fDEpXS5yYW5nZVswXSxuZVtuZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxFdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoZXIsW1UsaWUsVGUsSGUueXksdHRbMV0sZ2UsbmVdLmNvbmNhdChCZSkpLHR5cGVvZiBFdDwidSIpcmV0dXJuIEV0O0plJiYoZmU9ZmUuc2xpY2UoMCwtMSpKZSoyKSxnZT1nZS5zbGljZSgwLC0xKkplKSxuZT1uZS5zbGljZSgwLC0xKkplKSksZmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t0dFsxXV1bMF0pLGdlLnB1c2goZXIuJCksbmUucHVzaChlci5fJCksY3Q9dmVbZmVbZmUubGVuZ3RoLTJdXVtmZVtmZS5sZW5ndGgtMV1dLGZlLnB1c2goY3QpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxQZT1mdW5jdGlvbigpe3ZhciAkZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFgsZmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoWCxmZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoWCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih5ZSxYKXtyZXR1cm4gdGhpcy55eT1YfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD15ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciB5ZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXllLHRoaXMubWF0Y2hlZCs9eWU7dmFyIFg9eWUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBYPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx5ZX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbih5ZSl7dmFyIFg9eWUubGVuZ3RoLGZlPXllLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eWUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVgpLHRoaXMub2Zmc2V0LT1YO3ZhciBoZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxmZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWZlLmxlbmd0aC0xKTt2YXIgZ2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmZlPyhmZS5sZW5ndGg9PT1oZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK2hlW2hlLmxlbmd0aC1mZS5sZW5ndGhdLmxlbmd0aC1mZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZ2VbMF0sZ2VbMF0rdGhpcy55eWxlbmctWF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHllKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeWUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciB5ZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHllLmxlbmd0aD4yMD8iLi4uIjoiIikreWUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgeWU9dGhpcy5tYXRjaDtyZXR1cm4geWUubGVuZ3RoPDIwJiYoeWUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXllLmxlbmd0aCkpLCh5ZS5zdWJzdHIoMCwyMCkrKHllLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHllPXRoaXMucGFzdElucHV0KCksWD1uZXcgQXJyYXkoeWUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geWUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1grIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHllLFgpe3ZhciBmZSxoZSxnZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZ2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZ2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaGU9eWVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGhlJiYodGhpcy55eWxpbmVubys9aGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46aGU/aGVbaGUubGVuZ3RoLTFdLmxlbmd0aC1oZVtoZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit5ZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz15ZVswXSx0aGlzLm1hdGNoKz15ZVswXSx0aGlzLm1hdGNoZXM9eWUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoeWVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXllWzBdLGZlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFgsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksZmUpcmV0dXJuIGZlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBuZSBpbiBnZSl0aGlzW25lXT1nZVtuZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHllLFgsZmUsaGU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZ2U9dGhpcy5fY3VycmVudFJ1bGVzKCksbmU9MDtuZTxnZS5sZW5ndGg7bmUrKylpZihmZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2dlW25lXV0pLGZlJiYoIVh8fGZlWzBdLmxlbmd0aD5YWzBdLmxlbmd0aCkpe2lmKFg9ZmUsaGU9bmUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeWU9dGhpcy50ZXN0X21hdGNoKGZlLGdlW25lXSkseWUhPT0hMSlyZXR1cm4geWU7aWYodGhpcy5fYmFja3RyYWNrKXtYPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFg/KHllPXRoaXMudGVzdF9tYXRjaChYLGdlW2hlXSkseWUhPT0hMT95ZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBYPXRoaXMubmV4dCgpO3JldHVybiBYfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihYKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goWCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgWD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBYPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oWCl7cmV0dXJuIFg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhYfHwwKSxYPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbWF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihYKXt0aGlzLmJlZ2luKFgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7dmFyIG5lPWdlO3N3aXRjaChoZSl7Y2FzZSAwOnJldHVybiA2O2Nhc2UgMTpyZXR1cm4gNztjYXNlIDI6cmV0dXJuIDg7Y2FzZSAzOnJldHVybiA5O2Nhc2UgNDpyZXR1cm4gMjI7Y2FzZSA1OnJldHVybiAyMztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI0O2JyZWFrO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjY7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmM7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gMTI7Y2FzZSAxNjpicmVhaztjYXNlIDE3OnJldHVybiAxMTtjYXNlIDE4OnJldHVybiAxNTtjYXNlIDE5OnJldHVybiAxNjtjYXNlIDIwOnJldHVybiAxNztjYXNlIDIxOnJldHVybiAxODtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb25fZXh0IiksNDU7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uIiksNDQ7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9xdWV1ZSIpLDUxO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfZGIiKSw1MDticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0IiksNDk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX3F1ZXVlIiksNDg7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2RiIiksNDc7YnJlYWs7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtIiksNDY7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigiYm91bmRhcnkiKSwzNzticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLmJlZ2luKCJlbnRlcnByaXNlX2JvdW5kYXJ5IiksMzQ7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2JvdW5kYXJ5IiksMzY7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9xdWV1ZSIpLDU3O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfZGIiKSw1NjticmVhaztjYXNlIDM1OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0IiksNTU7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX3F1ZXVlIiksNTQ7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2RiIiksNTM7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyIiksNTI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2JvdW5kYXJ5IiksMzg7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9xdWV1ZSIpLDYzO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfZGIiKSw2MjticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0IiksNjE7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X3F1ZXVlIiksNjA7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2RiIiksNTk7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50IiksNTg7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDM5O2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX2wiKSw0MDticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX3IiKSw0MTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLmJlZ2luKCJyZWwiKSw2NDticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLmJlZ2luKCJiaXJlbCIpLDY1O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw2NjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNjc7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODticmVhaztjYXNlIDU3OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDY4O2JyZWFrO2Nhc2UgNTg6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw2OTticmVhaztjYXNlIDYwOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfYiIpLDcwO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9pbmRleCIpLDcxO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9lbF9zdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjM6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9yZWxfc3R5bGUiKSw3MzticmVhaztjYXNlIDY0OnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIpLDc0O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNjY6cmV0dXJuIHRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpLCJBVFRSSUJVVEVfRU1QVFkiO2JyZWFrO2Nhc2UgNjc6dGhpcy5iZWdpbigiYXR0cmlidXRlIik7YnJlYWs7Y2FzZSA2ODp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjk6cmV0dXJuIDgwO2Nhc2UgNzA6YnJlYWs7Y2FzZSA3MTpyZXR1cm4gODA7Y2FzZSA3Mjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDczOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc0OnJldHVybiJTVFIiO2Nhc2UgNzU6dGhpcy5iZWdpbigic3RyaW5nX2t2Iik7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gdGhpcy5iZWdpbigic3RyaW5nX2t2X2tleSIpLCJTVFJfS0VZIjticmVhaztjYXNlIDc3OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJzdHJpbmdfa3ZfdmFsdWUiKTticmVhaztjYXNlIDc4OnJldHVybiJTVFJfVkFMVUUiO2Nhc2UgNzk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgwOnJldHVybiJTVFIiO2Nhc2UgODE6cmV0dXJuIkxCUkFDRSI7Y2FzZSA4MjpyZXR1cm4iUkJSQUNFIjtjYXNlIDgzOnJldHVybiJTUEFDRSI7Y2FzZSA4NDpyZXR1cm4iRU9MIjtjYXNlIDg1OnJldHVybiAxNH19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gJGV9KCk7Q2UubGV4ZXI9UGU7ZnVuY3Rpb24gSWUoKXt0aGlzLnl5PXt9fXJldHVybiBvKEllLCJQYXJzZXIiKSxJZS5wcm90b3R5cGU9Q2UsQ2UuUGFyc2VyPUllLG5ldyBJZX0oKTtleS5wYXJzZXI9ZXk7b3o9ZXl9KTt2YXIgSFMsVm4sZ3A9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIUz1vKCh0LGUse2RlcHRoOnI9MixjbG9iYmVyOm49ITF9PXt9KT0+e2xldCBpPXtkZXB0aDpyLGNsb2JiZXI6bn07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJiFBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+SFModCxhLGkpKSx0KTpBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+e3QuaW5jbHVkZXMoYSl8fHQucHVzaChhKX0pLHQpOnQ9PT12b2lkIDB8fHI8PTA/dCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgZT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbih0LGUpOmU6KGUhPT12b2lkIDAmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIGU9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGE9Pnt0eXBlb2YgZVthXT09Im9iamVjdCImJih0W2FdPT09dm9pZCAwfHx0eXBlb2YgdFthXT09Im9iamVjdCIpPyh0W2FdPT09dm9pZCAwJiYodFthXT1BcnJheS5pc0FycmF5KGVbYV0pP1tdOnt9KSx0W2FdPUhTKHRbYV0sZVthXSx7ZGVwdGg6ci0xLGNsb2JiZXI6bn0pKToobnx8dHlwZW9mIHRbYV0hPSJvYmplY3QiJiZ0eXBlb2YgZVthXSE9Im9iamVjdCIpJiYodFthXT1lW2FdKX0pLHQpfSwiYXNzaWduV2l0aERlcHRoIiksVm49SFN9KTt2YXIgSmIsbHosY3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtKYj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOm8odD0+dD49MjU1PzI1NTp0PDA/MDp0LCJyIiksZzpvKHQ9PnQ+PTI1NT8yNTU6dDwwPzA6dCwiZyIpLGI6byh0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsImIiKSxoOm8odD0+dCUzNjAsImgiKSxzOm8odD0+dD49MTAwPzEwMDp0PDA/MDp0LCJzIiksbDpvKHQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCwibCIpLGE6byh0PT50Pj0xPzE6dDwwPzA6dCwiYSIpfSx0b0xpbmVhcjpvKHQ9PntsZXQgZT10LzI1NTtyZXR1cm4gdD4uMDM5Mjg/TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KTplLzEyLjkyfSwidG9MaW5lYXIiKSxodWUycmdiOm8oKHQsZSxyKT0+KHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8LjE2NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqNipyOnI8LjU/ZTpyPC42NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqKC42NjY2NjY2NjY2NjY2NjY2LXIpKjY6dCksImh1ZTJyZ2IiKSxoc2wycmdiOm8oKHtoOnQsczplLGw6cn0sbik9PntpZighZSlyZXR1cm4gcioyLjU1O3QvPTM2MCxlLz0xMDAsci89MTAwO2xldCBpPXI8LjU/ciooMStlKTpyK2UtciplLGE9MipyLWk7c3dpdGNoKG4pe2Nhc2UiciI6cmV0dXJuIEpiLmh1ZTJyZ2IoYSxpLHQrLjMzMzMzMzMzMzMzMzMzMzMpKjI1NTtjYXNlImciOnJldHVybiBKYi5odWUycmdiKGEsaSx0KSoyNTU7Y2FzZSJiIjpyZXR1cm4gSmIuaHVlMnJnYihhLGksdC0uMzMzMzMzMzMzMzMzMzMzMykqMjU1fX0sImhzbDJyZ2IiKSxyZ2IyaHNsOm8oKHtyOnQsZzplLGI6cn0sbik9Pnt0Lz0yNTUsZS89MjU1LHIvPTI1NTtsZXQgaT1NYXRoLm1heCh0LGUsciksYT1NYXRoLm1pbih0LGUscikscz0oaSthKS8yO2lmKG49PT0ibCIpcmV0dXJuIHMqMTAwO2lmKGk9PT1hKXJldHVybiAwO2xldCBsPWktYSx1PXM+LjU/bC8oMi1pLWEpOmwvKGkrYSk7aWYobj09PSJzIilyZXR1cm4gdSoxMDA7c3dpdGNoKGkpe2Nhc2UgdDpyZXR1cm4oKGUtcikvbCsoZTxyPzY6MCkpKjYwO2Nhc2UgZTpyZXR1cm4oKHItdCkvbCsyKSo2MDtjYXNlIHI6cmV0dXJuKCh0LWUpL2wrNCkqNjA7ZGVmYXVsdDpyZXR1cm4tMX19LCJyZ2IyaHNsIil9LGx6PUpifSk7dmFyIE14ZSx1eixoej1NKCgpPT57InVzZSBzdHJpY3QiO014ZT17Y2xhbXA6bygodCxlLHIpPT5lPnI/TWF0aC5taW4oZSxNYXRoLm1heChyLHQpKTpNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpLCJjbGFtcCIpLHJvdW5kOm8odD0+TWF0aC5yb3VuZCh0KjFlMTApLzFlMTAsInJvdW5kIil9LHV6PU14ZX0pO3ZhciBJeGUsZnosZHo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJeGU9e2RlYzJoZXg6byh0PT57bGV0IGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZTpgMCR7ZX1gfSwiZGVjMmhleCIpfSxmej1JeGV9KTt2YXIgT3hlLFl0LGFjPU0oKCk9PnsidXNlIHN0cmljdCI7Y3ooKTtoeigpO2R6KCk7T3hlPXtjaGFubmVsOmx6LGxhbmc6dXosdW5pdDpmen0sWXQ9T3hlfSk7dmFyIG91LFBpLHR5PU0oKCk9PnsidXNlIHN0cmljdCI7YWMoKTtvdT17fTtmb3IobGV0IHQ9MDt0PD0yNTU7dCsrKW91W3RdPVl0LnVuaXQuZGVjMmhleCh0KTtQaT17QUxMOjAsUkdCOjEsSFNMOjJ9fSk7dmFyIFdTLHB6LG16PU0oKCk9PnsidXNlIHN0cmljdCI7dHkoKTtXUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlIil9Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9UGkuQUxMfWdldCgpe3JldHVybiB0aGlzLnR5cGV9c2V0KGUpe2lmKHRoaXMudHlwZSYmdGhpcy50eXBlIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lIik7dGhpcy50eXBlPWV9cmVzZXQoKXt0aGlzLnR5cGU9UGkuQUxMfWlzKGUpe3JldHVybiB0aGlzLnR5cGU9PT1lfX0scHo9V1N9KTt2YXIgWVMsZ3oseXo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYygpO216KCk7dHkoKTtZUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJDaGFubmVscyIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5jb2xvcj1yLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9ZSx0aGlzLnR5cGU9bmV3IHB6fXNldChlLHIpe3JldHVybiB0aGlzLmNvbG9yPXIsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1lLHRoaXMudHlwZS50eXBlPVBpLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtsZXQgZT10aGlzLmRhdGEse2g6cixzOm4sbDppfT1lO3I9PT12b2lkIDAmJihlLmg9WXQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSksbj09PXZvaWQgMCYmKGUucz1ZdC5jaGFubmVsLnJnYjJoc2woZSwicyIpKSxpPT09dm9pZCAwJiYoZS5sPVl0LmNoYW5uZWwucmdiMmhzbChlLCJsIikpfV9lbnN1cmVSR0IoKXtsZXQgZT10aGlzLmRhdGEse3IsZzpuLGI6aX09ZTtyPT09dm9pZCAwJiYoZS5yPVl0LmNoYW5uZWwuaHNsMnJnYihlLCJyIikpLG49PT12b2lkIDAmJihlLmc9WXQuY2hhbm5lbC5oc2wycmdiKGUsImciKSksaT09PXZvaWQgMCYmKGUuYj1ZdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgcigpe2xldCBlPXRoaXMuZGF0YSxyPWUucjtyZXR1cm4hdGhpcy50eXBlLmlzKFBpLkhTTCkmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlSFNMKCksWXQuY2hhbm5lbC5oc2wycmdiKGUsInIiKSl9Z2V0IGcoKXtsZXQgZT10aGlzLmRhdGEscj1lLmc7cmV0dXJuIXRoaXMudHlwZS5pcyhQaS5IU0wpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZUhTTCgpLFl0LmNoYW5uZWwuaHNsMnJnYihlLCJnIikpfWdldCBiKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5iO3JldHVybiF0aGlzLnR5cGUuaXMoUGkuSFNMKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVIU0woKSxZdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgaCgpe2xldCBlPXRoaXMuZGF0YSxyPWUuaDtyZXR1cm4hdGhpcy50eXBlLmlzKFBpLlJHQikmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlUkdCKCksWXQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSl9Z2V0IHMoKXtsZXQgZT10aGlzLmRhdGEscj1lLnM7cmV0dXJuIXRoaXMudHlwZS5pcyhQaS5SR0IpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZVJHQigpLFl0LmNoYW5uZWwucmdiMmhzbChlLCJzIikpfWdldCBsKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5sO3JldHVybiF0aGlzLnR5cGUuaXMoUGkuUkdCKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVSR0IoKSxZdC5jaGFubmVsLnJnYjJoc2woZSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihlKXt0aGlzLnR5cGUuc2V0KFBpLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWV9c2V0IGcoZSl7dGhpcy50eXBlLnNldChQaS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1lfXNldCBiKGUpe3RoaXMudHlwZS5zZXQoUGkuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9ZX1zZXQgaChlKXt0aGlzLnR5cGUuc2V0KFBpLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWV9c2V0IHMoZSl7dGhpcy50eXBlLnNldChQaS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1lfXNldCBsKGUpe3RoaXMudHlwZS5zZXQoUGkuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9ZX1zZXQgYShlKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9ZX19LGd6PVlTfSk7dmFyIFB4ZSxoaCxyeT1NKCgpPT57InVzZSBzdHJpY3QiO3l6KCk7UHhlPW5ldyBneih7cjowLGc6MCxiOjAsYTowfSwidHJhbnNwYXJlbnQiKSxoaD1QeGV9KTt2YXIgdnosSmYscVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtyeSgpO3R5KCk7dno9e3JlOi9eIygoPzpbYS1mMC05XXsyfSl7Miw0fXxbYS1mMC05XXszfSkkL2kscGFyc2U6byh0PT57aWYodC5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2xldCBlPXQubWF0Y2godnoucmUpO2lmKCFlKXJldHVybjtsZXQgcj1lWzFdLG49cGFyc2VJbnQociwxNiksaT1yLmxlbmd0aCxhPWklND09PTAscz1pPjQsbD1zPzE6MTcsdT1zPzg6NCxoPWE/MDotMSxmPXM/MjU1OjE1O3JldHVybiBoaC5zZXQoe3I6KG4+PnUqKGgrMykmZikqbCxnOihuPj51KihoKzIpJmYpKmwsYjoobj4+dSooaCsxKSZmKSpsLGE6YT8obiZmKSpsLzI1NToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gIyR7b3VbTWF0aC5yb3VuZChlKV19JHtvdVtNYXRoLnJvdW5kKHIpXX0ke291W01hdGgucm91bmQobildfSR7b3VbTWF0aC5yb3VuZChpKjI1NSldfWA6YCMke291W01hdGgucm91bmQoZSldfSR7b3VbTWF0aC5yb3VuZChyKV19JHtvdVtNYXRoLnJvdW5kKG4pXX1gfSwic3RyaW5naWZ5Iil9LEpmPXZ6fSk7dmFyIGU0LG55LHh6PU0oKCk9PnsidXNlIHN0cmljdCI7YWMoKTtyeSgpO2U0PXtyZTovXmhzbGE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oJSk/KSk/XHMqP1wpJC9pLGh1ZVJlOi9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLF9odWUyZGVnOm8odD0+e2xldCBlPXQubWF0Y2goZTQuaHVlUmUpO2lmKGUpe2xldFsscixuXT1lO3N3aXRjaChuKXtjYXNlImdyYWQiOnJldHVybiBZdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSouOSk7Y2FzZSJyYWQiOnJldHVybiBZdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSoxODAvTWF0aC5QSSk7Y2FzZSJ0dXJuIjpyZXR1cm4gWXQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqMzYwKX19cmV0dXJuIFl0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0sIl9odWUyZGVnIikscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMDQmJmUhPT03MilyZXR1cm47bGV0IHI9dC5tYXRjaChlNC5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsXT1yO3JldHVybiBoaC5zZXQoe2g6ZTQuX2h1ZTJkZWcobiksczpZdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChpKSksbDpZdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChhKSksYTpzP1l0LmNoYW5uZWwuY2xhbXAuYShsP3BhcnNlRmxvYXQocykvMTAwOnBhcnNlRmxvYXQocykpOjF9LHQpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0e2g6ZSxzOnIsbDpuLGE6aX09dDtyZXR1cm4gaTwxP2Boc2xhKCR7WXQubGFuZy5yb3VuZChlKX0sICR7WXQubGFuZy5yb3VuZChyKX0lLCAke1l0Lmxhbmcucm91bmQobil9JSwgJHtpfSlgOmBoc2woJHtZdC5sYW5nLnJvdW5kKGUpfSwgJHtZdC5sYW5nLnJvdW5kKHIpfSUsICR7WXQubGFuZy5yb3VuZChuKX0lKWB9LCJzdHJpbmdpZnkiKX0sbnk9ZTR9KTt2YXIgdDQsWFMsYno9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxUygpO3Q0PXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6byh0PT57dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9dDQuY29sb3JzW3RdO2lmKGUpcmV0dXJuIEpmLnBhcnNlKGUpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0IGU9SmYuc3RyaW5naWZ5KHQpO2ZvcihsZXQgciBpbiB0NC5jb2xvcnMpaWYodDQuY29sb3JzW3JdPT09ZSlyZXR1cm4gcn0sInN0cmluZ2lmeSIpfSxYUz10NH0pO3ZhciB3eixpeSxUej1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7cnkoKTt3ej17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMTQmJmUhPT04MilyZXR1cm47bGV0IHI9dC5tYXRjaCh3ei5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsLHUsaCxmXT1yO3JldHVybiBoaC5zZXQoe3I6WXQuY2hhbm5lbC5jbGFtcC5yKGk/cGFyc2VGbG9hdChuKSoyLjU1OnBhcnNlRmxvYXQobikpLGc6WXQuY2hhbm5lbC5jbGFtcC5nKHM/cGFyc2VGbG9hdChhKSoyLjU1OnBhcnNlRmxvYXQoYSkpLGI6WXQuY2hhbm5lbC5jbGFtcC5iKHU/cGFyc2VGbG9hdChsKSoyLjU1OnBhcnNlRmxvYXQobCkpLGE6aD9ZdC5jaGFubmVsLmNsYW1wLmEoZj9wYXJzZUZsb2F0KGgpLzEwMDpwYXJzZUZsb2F0KGgpKToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gcmdiYSgke1l0Lmxhbmcucm91bmQoZSl9LCAke1l0Lmxhbmcucm91bmQocil9LCAke1l0Lmxhbmcucm91bmQobil9LCAke1l0Lmxhbmcucm91bmQoaSl9KWA6YHJnYigke1l0Lmxhbmcucm91bmQoZSl9LCAke1l0Lmxhbmcucm91bmQocil9LCAke1l0Lmxhbmcucm91bmQobil9KWB9LCJzdHJpbmdpZnkiKX0saXk9d3p9KTt2YXIgQnhlLEJpLGx1PU0oKCk9PnsidXNlIHN0cmljdCI7cVMoKTt4eigpO2J6KCk7VHooKTt0eSgpO0J4ZT17Zm9ybWF0OntrZXl3b3JkOlhTLGhleDpKZixyZ2I6aXkscmdiYTppeSxoc2w6bnksaHNsYTpueX0scGFyc2U6byh0PT57aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0O2xldCBlPUpmLnBhcnNlKHQpfHxpeS5wYXJzZSh0KXx8bnkucGFyc2UodCl8fFhTLnBhcnNlKHQpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQ6ICIke3R9ImApfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKFBpLkhTTCl8fHQuZGF0YS5yPT09dm9pZCAwP255LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9peS5zdHJpbmdpZnkodCk6SmYuc3RyaW5naWZ5KHQpLCJzdHJpbmdpZnkiKX0sQmk9QnhlfSk7dmFyIEZ4ZSxyNCxqUz1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7bHUoKTtGeGU9bygodCxlKT0+e2xldCByPUJpLnBhcnNlKHQpO2ZvcihsZXQgbiBpbiBlKXJbbl09WXQuY2hhbm5lbC5jbGFtcFtuXShlW25dKTtyZXR1cm4gQmkuc3RyaW5naWZ5KHIpfSwiY2hhbmdlIikscjQ9RnhlfSk7dmFyIHp4ZSxacyxLUz1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7cnkoKTtsdSgpO2pTKCk7enhlPW8oKHQsZSxyPTAsbj0xKT0+e2lmKHR5cGVvZiB0IT0ibnVtYmVyIilyZXR1cm4gcjQodCx7YTplfSk7bGV0IGk9aGguc2V0KHtyOll0LmNoYW5uZWwuY2xhbXAucih0KSxnOll0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOll0LmNoYW5uZWwuY2xhbXAuYihyKSxhOll0LmNoYW5uZWwuY2xhbXAuYShuKX0pO3JldHVybiBCaS5zdHJpbmdpZnkoaSl9LCJyZ2JhIiksWnM9enhlfSk7dmFyIEd4ZSxheSxrej1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7bHUoKTtHeGU9bygodCxlKT0+WXQubGFuZy5yb3VuZChCaS5wYXJzZSh0KVtlXSksImNoYW5uZWwiKSxheT1HeGV9KTt2YXIgJHhlLEV6LFN6PU0oKCk9PnsidXNlIHN0cmljdCI7YWMoKTtsdSgpOyR4ZT1vKHQ9PntsZXR7cjplLGc6cixiOm59PUJpLnBhcnNlKHQpLGk9LjIxMjYqWXQuY2hhbm5lbC50b0xpbmVhcihlKSsuNzE1MipZdC5jaGFubmVsLnRvTGluZWFyKHIpKy4wNzIyKll0LmNoYW5uZWwudG9MaW5lYXIobik7cmV0dXJuIFl0Lmxhbmcucm91bmQoaSl9LCJsdW1pbmFuY2UiKSxFej0keGV9KTt2YXIgVnhlLEN6LEF6PU0oKCk9PnsidXNlIHN0cmljdCI7U3ooKTtWeGU9byh0PT5Feih0KT49LjUsImlzTGlnaHQiKSxDej1WeGV9KTt2YXIgVXhlLGZhLF96PU0oKCk9PnsidXNlIHN0cmljdCI7QXooKTtVeGU9byh0PT4hQ3oodCksImlzRGFyayIpLGZhPVV4ZX0pO3ZhciBIeGUsbjQsUVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYygpO2x1KCk7SHhlPW8oKHQsZSxyKT0+e2xldCBuPUJpLnBhcnNlKHQpLGk9bltlXSxhPVl0LmNoYW5uZWwuY2xhbXBbZV0oaStyKTtyZXR1cm4gaSE9PWEmJihuW2VdPWEpLEJpLnN0cmluZ2lmeShuKX0sImFkanVzdENoYW5uZWwiKSxuND1IeGV9KTt2YXIgV3hlLF90LEx6PU0oKCk9PnsidXNlIHN0cmljdCI7UVMoKTtXeGU9bygodCxlKT0+bjQodCwibCIsZSksImxpZ2h0ZW4iKSxfdD1XeGV9KTt2YXIgWXhlLEl0LER6PU0oKCk9PnsidXNlIHN0cmljdCI7UVMoKTtZeGU9bygodCxlKT0+bjQodCwibCIsLWUpLCJkYXJrZW4iKSxJdD1ZeGV9KTt2YXIgcXhlLE1lLE56PU0oKCk9PnsidXNlIHN0cmljdCI7bHUoKTtqUygpO3F4ZT1vKCh0LGUpPT57bGV0IHI9QmkucGFyc2UodCksbj17fTtmb3IobGV0IGkgaW4gZSllW2ldJiYobltpXT1yW2ldK2VbaV0pO3JldHVybiByNCh0LG4pfSwiYWRqdXN0IiksTWU9cXhlfSk7dmFyIFh4ZSxSeixNej1NKCgpPT57InVzZSBzdHJpY3QiO2x1KCk7S1MoKTtYeGU9bygodCxlLHI9NTApPT57bGV0e3I6bixnOmksYjphLGE6c309QmkucGFyc2UodCkse3I6bCxnOnUsYjpoLGE6Zn09QmkucGFyc2UoZSksZD1yLzEwMCxwPWQqMi0xLG09cy1mLHk9KChwKm09PT0tMT9wOihwK20pLygxK3AqbSkpKzEpLzIsdj0xLXkseD1uKnkrbCp2LGI9aSp5K3Uqdix3PWEqeStoKnYsXz1zKmQrZiooMS1kKTtyZXR1cm4gWnMoeCxiLHcsXyl9LCJtaXgiKSxSej1YeGV9KTt2YXIganhlLG10LEl6PU0oKCk9PnsidXNlIHN0cmljdCI7bHUoKTtNeigpO2p4ZT1vKCh0LGU9MTAwKT0+e2xldCByPUJpLnBhcnNlKHQpO3JldHVybiByLnI9MjU1LXIucixyLmc9MjU1LXIuZyxyLmI9MjU1LXIuYixSeihyLHQsZSl9LCJpbnZlcnQiKSxtdD1qeGV9KTt2YXIgT3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLUygpO2t6KCk7X3ooKTtMeigpO0R6KCk7TnooKTtJeigpfSk7dmFyIExvPU0oKCk9PnsidXNlIHN0cmljdCI7T3ooKX0pO3ZhciBmaCxkaCxzeT1NKCgpPT57InVzZSBzdHJpY3QiO2ZoPSIjZmZmZmZmIixkaD0iI2YyZjJmMiJ9KTt2YXIgU2kseXA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO1NpPW8oKHQsZSk9PmU/TWUodCx7czotNDAsbDoxMH0pOk1lKHQse3M6LTQwLGw6LTEwfSksIm1rQm9yZGVyIil9KTt2YXIgWlMsQnosRno9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO3N5KCk7eXAoKTtaUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dXBkYXRlQ29sb3JzKCl7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxTaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fFNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxTaSh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8bXQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxtdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxtdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/SXQodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8SXQodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8bXQodGhpcy5saW5lQ29sb3IpLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5hbHRTZWN0aW9uQmtnQ29sb3J8fCJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPXRoaXMuc2VjdGlvbkJrZ0NvbG9yMnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5leGNsdWRlQmtnQ29sb3I9dGhpcy5leGNsdWRlQmtnQ29sb3J8fCIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8X3QodGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wZXJzb25Cb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMucGVyc29uQmtnfHx0aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTAsbDoxNTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpcy5kYXJrTW9kZSlmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09SXQodGhpc1siY1NjYWxlIityXSw3NSk7ZWxzZSBmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09SXQodGhpc1siY1NjYWxlIityXSwyNSk7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzWyJjU2NhbGVJbnYiK3JdPXRoaXNbImNTY2FsZUludiIrcl18fG10KHRoaXNbImNTY2FsZSIrcl0pO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIityXT10aGlzWyJjU2NhbGVQZWVyIityXXx8X3QodGhpc1siY1NjYWxlIityXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrcl09dGhpc1siY1NjYWxlUGVlciIrcl18fEl0KHRoaXNbImNTY2FsZSIrcl0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlTGFiZWwiK3JdPXRoaXNbImNTY2FsZUxhYmVsIityXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7bGV0IGU9dGhpcy5kYXJrTW9kZT8tNDotMTtmb3IobGV0IHI9MDtyPDU7cisrKXRoaXNbInN1cmZhY2UiK3JdPXRoaXNbInN1cmZhY2UiK3JdfHxNZSh0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6ZSooNStyKjMpfSksdGhpc1sic3VyZmFjZVBlZXIiK3JdPXRoaXNbInN1cmZhY2VQZWVyIityXXx8TWUodGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmUqKDgrciozKX0pO3RoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9dGhpcy5maWxsVHlwZTN8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9dGhpcy5maWxsVHlwZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHxNZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMuYXJjaEVkZ2VDb2xvcnx8IiM3NzciLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yfHwiIzc3NyIsdGhpcy5hcmNoRWRnZVdpZHRoPXRoaXMuYXJjaEVkZ2VXaWR0aHx8IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcnx8IiMwMDAiLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9dGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aHx8IjJweCIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxmYSh0aGlzLnF1YWRyYW50MUZpbGwpP190KHRoaXMucXVhZHJhbnQxRmlsbCk6SXQodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNGRkY0REQsI0ZGRDhCMSwjRkZBMDdBLCNFQ0VGRjEsI0Q2REJERiwjQzNFMEE4LCNGRkI2QTQsI0ZGRDc0RCwjNzM4RkE3LCNGRkZGRjAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP0l0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPV90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPV90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPV90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPV90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PV90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PV90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PV90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PV90KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9SXQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9SXQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9SXQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9SXQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9SXQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9SXQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9SXQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9SXQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8bXQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxtdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fG10KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8bXQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxtdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fG10KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8bXQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxtdCh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8ZmgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8ZGh9Y2FsY3VsYXRlKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxCej1vKHQ9PntsZXQgZT1uZXcgWlM7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIEpTLHp6LEd6PU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTt5cCgpO0pTPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPV90KHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPW10KHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPW10KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1tdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPW10KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1tdCh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPV90KG10KCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiNjY2MiLHRoaXMuYm9yZGVyMj1acygyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9SXQoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1JdCh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9WnMoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPVpzKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFyY2hFZGdlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlV2lkdGg9IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD0iMnB4Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5zZWNvbmRCa2c9X3QodGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1fdCh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1fdCh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjNTU1Iix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiIzBiMDAwMCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM0ZDEwMzciLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjM2Y1MjU4Iix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzRmMmYxYiIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM2ZTBhMGEiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjM2IwMDQ4Iix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiIzk5NWEwMSIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiMxNTQ3MDYiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjMTYxNzIyIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjMDAyOTZmIix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjMDE2MjljIix0aGlzLmNTY2FsZTEyPXRoaXMuY1NjYWxlMTJ8fCIjMDEwMDI5Iix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fG10KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fF90KHRoaXNbImNTY2FsZSIrZV0sMTApO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTEwK2UqNCl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC03K2UqNCl9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1sicGllIitlXT10aGlzWyJjU2NhbGUiK2VdO3RoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8ZmEodGhpcy5xdWFkcmFudDFGaWxsKT9fdCh0aGlzLnF1YWRyYW50MUZpbGwpOkl0KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjMzQ5OGRiLCMyZWNjNzEsI2U3NGMzYywjZjFjNDBmLCNiZGMzYzcsI2ZmZmZmZiwjMzQ0OTVlLCM5YjU5YjYsIzFhYmM5YywjZTY3ZTIyIn0sdGhpcy5wYWNrZXQ9e3N0YXJ0Qnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixlbmRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGxhYmVsQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRpdGxlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrU3Ryb2tlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrRmlsbENvbG9yOnRoaXMuYmFja2dyb3VuZH0sdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/SXQodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPV90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1fdCh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1fdCh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPV90KHRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1fdCh0aGlzLnBpZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9X3QodGhpcy5waWU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PV90KHRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PV90KHRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fG10KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8bXQodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxtdCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fG10KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8bXQodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxtdCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fG10KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8bXQodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8bXQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fG10KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8X3QodGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxfdCh0aGlzLmJhY2tncm91bmQsMiksdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8IiM5OTkifWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0seno9byh0PT57bGV0IGU9bmV3IEpTO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBlQyx2cCxpND1NKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7eXAoKTtzeSgpO2VDPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPW10KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1tdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPW10KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1tdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSJyZ2JhKDIzMiwyMzIsMjMyLCAwLjgpIix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9WnMoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fEl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8SXQodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09SXQodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEl0KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNStlKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2VdPXRoaXNbInN1cmZhY2VQZWVyIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K2UqNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8bXQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fG10KHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1fdCh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFyY2hFZGdlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8ZmEodGhpcy5xdWFkcmFudDFGaWxsKT9fdCh0aGlzLnF1YWRyYW50MUZpbGwpOkl0KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjRUNFQ0ZGLCM4NDkzQTYsI0ZGQzNBMCwjRENEREUxLCNCOEU5OTQsI0QxQTM2RiwjQzNDREU2LCNGRkI2QzEsIzQ5NjA3OCwjRjhGM0UzIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1fdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1fdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1fdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1fdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1fdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1fdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1fdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1fdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPUl0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUl0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUl0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUl0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUl0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUl0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUl0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUl0KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fEl0KG10KHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fG10KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8bXQodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxtdCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fG10KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8bXQodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxtdCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fG10KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fG10KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxtdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGZoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGRofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sdnA9byh0PT57bGV0IGU9bmV3IGVDO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciB0QywkeixWej1NKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7c3koKTt5cCgpO3RDPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1fdCgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVNpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9bXQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1tdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VXaWR0aD0iMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoPSIycHgiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5hY3RvckJvcmRlcj1JdCh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fEl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8SXQodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09SXQodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEl0KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGZhKHRoaXMucXVhZHJhbnQxRmlsbCk/X3QodGhpcy5xdWFkcmFudDFGaWxsKTpJdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnBhY2tldD17c3RhcnRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGVuZEJ5dGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsbGFiZWxDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGl0bGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tTdHJva2VDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tGaWxsQ29sb3I6dGhpcy5tYWluQmtnfSx0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0NERTQ5OCwjRkY2QjZCLCNBMEQyREIsI0Q3QkRFMiwjRjBGMEYwLCNGRkMzQTAsIzdGRDhCRSwjRkY5QThCLCNGQUYzRTAsI0ZGRjE3NiJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPV90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPV90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPV90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPV90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PV90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PV90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PV90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PV90KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9SXQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9SXQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9SXQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9SXQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9SXQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9SXQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9SXQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9SXQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8bXQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxtdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fG10KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8bXQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxtdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fG10KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8bXQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxtdCh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxtdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8bXQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxmaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxkaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LCR6PW8odD0+e2xldCBlPW5ldyB0QztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgckMsVXosSHo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO3lwKCk7c3koKTtyQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9X3QodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVNpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9bXQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1tdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPW10KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1fdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPV90KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHwiIzU1NSIsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiNGNEY0RjQiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNTU1Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiI0JCQiIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM3NzciLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjOTk5Iix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiI0RERCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiNGRkYiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjREREIix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiI0JCQiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzk5OSIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzc3NyI7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fG10KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8X3QodGhpc1siY1NjYWxlIitlXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEl0KHRoaXNbImNTY2FsZSIrZV0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx0aGlzLmNTY2FsZTEsdGhpcy5jU2NhbGVMYWJlbDI9dGhpcy5jU2NhbGVMYWJlbDJ8fHRoaXMuY1NjYWxlMTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLnNlY3Rpb25Ca2dDb2xvcj1fdCh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9X3QodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9SXQodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1fdCh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9SXQodGhpcy5jcml0QmtnQ29sb3IsMTApLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy5jcml0QmtnQ29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbInBpZSIrZV09dGhpc1siY1NjYWxlIitlXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGZhKHRoaXMucXVhZHJhbnQxRmlsbCk/X3QodGhpcy5xdWFkcmFudDFGaWxsKTpJdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0VFRSwjNkJCOEU0LCM4QUNCODgsI0M3QUNENiwjRThEQ0MyLCNGRkIyQTgsI0ZGRjM4MCwjN0U4RDkxLCNGRkQ4QjEsI0ZBRjNFMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD1JdCh0aGlzLnBpZTEsMjUpfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5waWU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5waWU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5waWU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5waWU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLnBpZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fG10KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8bXQodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxtdCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fG10KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8bXQodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxtdCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fG10KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8bXQodGhpcy5naXQ3KSx0aGlzLmJyYW5jaExhYmVsQ29sb3I9dGhpcy5icmFuY2hMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGZoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGRofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sVXo9byh0PT57bGV0IGU9bmV3IHJDO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBEbyxhND1NKCgpPT57InVzZSBzdHJpY3QiO0Z6KCk7R3ooKTtpNCgpO1Z6KCk7SHooKTtEbz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6Qnp9LGRhcms6e2dldFRoZW1lVmFyaWFibGVzOnp6fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczp2cH0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczoken0sbmV1dHJhbDp7Z2V0VGhlbWVWYXJpYWJsZXM6VXp9fX0pO3ZhciBjdSxXej1NKCgpPT57InVzZSBzdHJpY3QiO2N1PXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LHN1YkdyYXBoVGl0bGVNYXJnaW46e3RvcDowLGJvdHRvbTowfSxkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciIsd3JhcHBpbmdXaWR0aDoyMDB9LHNlcXVlbmNlOnt1c2VNYXhXaWR0aDohMCxoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMH0sZ2FudHQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix0b3BBeGlzOiExLGRpc3BsYXlNb2RlOiIiLHdlZWtkYXk6InN1bmRheSJ9LGpvdXJuZXk6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxhcnJvd01hcmtlckFic29sdXRlOiExLGRpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIixodG1sTGFiZWxzOiExLGhpZGVFbXB0eU1lbWJlcnNCb3g6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSxrYW5iYW46e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6OCxzZWN0aW9uV2lkdGg6MjAwLHRpY2tldEJhc2VVcmw6IiJ9LHRpbWVsaW5lOnt1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdLGRpc2FibGVNdWx0aWNvbG9yOiExfSxnaXRHcmFwaDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6OCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfSxtYWluQnJhbmNoTmFtZToibWFpbiIsbWFpbkJyYW5jaE9yZGVyOjAsc2hvd0NvbW1pdExhYmVsOiEwLHNob3dCcmFuY2hlczohMCxyb3RhdGVDb21taXRMYWJlbDohMCxwYXJhbGxlbENvbW1pdHM6ITEsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sYmxvY2s6e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6OH0scGFja2V0Ont1c2VNYXhXaWR0aDohMCxyb3dIZWlnaHQ6MzIsYml0V2lkdGg6MzIsYml0c1BlclJvdzozMixzaG93Qml0czohMCxwYWRkaW5nWDo1LHBhZGRpbmdZOjV9LGFyY2hpdGVjdHVyZTp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo0MCxpY29uU2l6ZTo4MCxmb250U2l6ZToxNn0sdGhlbWU6ImRlZmF1bHQiLGxvb2s6ImNsYXNzaWMiLGhhbmREcmF3blNlZWQ6MCxsYXlvdXQ6ImRhZ3JlIixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwic3VwcHJlc3NFcnJvclJlbmRlcmluZyIsIm1heEVkZ2VzIl0sbGVnYWN5TWF0aE1MOiExLGZvcmNlTGVnYWN5TWF0aE1MOiExLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTYsbWFya2Rvd25BdXRvV3JhcDohMCxzdXBwcmVzc0Vycm9yUmVuZGVyaW5nOiExfX0pO3ZhciBZeixxeixYeix1cixicz1NKCgpPT57InVzZSBzdHJpY3QiO2E0KCk7V3ooKTtZej17Li4uY3UsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZWxrOnttZXJnZUVkZ2VzOiExLG5vZGVQbGFjZW1lbnRTdHJhdGVneToiQlJBTkRFU19LT0VQRiJ9LHRoZW1lQ1NTOnZvaWQgMCx0aGVtZVZhcmlhYmxlczpEby5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksc2VxdWVuY2U6ey4uLmN1LnNlcXVlbmNlLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpLG5vdGVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LCJub3RlRm9udCIpLGFjdG9yRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fSwiYWN0b3JGb250Iil9LGNsYXNzOntoaWRlRW1wdHlNZW1iZXJzQm94OiExfSxnYW50dDp7Li4uY3UuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi5jdS5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSwicGVyc29uRm9udCIpLGV4dGVybmFsX3BlcnNvbkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sImV4dGVybmFsX3BlcnNvbkZvbnQiKSxzeXN0ZW1Gb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtRm9udFdlaWdodH19LCJzeXN0ZW1Gb250IiksZXh0ZXJuYWxfc3lzdGVtRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfc3lzdGVtRm9udCIpLHN5c3RlbV9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sInN5c3RlbV9kYkZvbnQiKSxleHRlcm5hbF9zeXN0ZW1fZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9zeXN0ZW1fZGJGb250Iiksc3lzdGVtX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSwic3lzdGVtX3F1ZXVlRm9udCIpLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQiKSxjb250YWluZXJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyRm9udFdlaWdodH19LCJjb250YWluZXJGb250IiksZXh0ZXJuYWxfY29udGFpbmVyRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29udGFpbmVyRm9udCIpLGNvbnRhaW5lcl9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sImNvbnRhaW5lcl9kYkZvbnQiKSxleHRlcm5hbF9jb250YWluZXJfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb250YWluZXJfZGJGb250IiksY29udGFpbmVyX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSwiY29udGFpbmVyX3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQiKSxjb21wb25lbnRGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50Rm9udFdlaWdodH19LCJjb21wb25lbnRGb250IiksZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udCIpLGNvbXBvbmVudF9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sImNvbXBvbmVudF9kYkZvbnQiKSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb21wb25lbnRfZGJGb250IiksY29tcG9uZW50X3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSwiY29tcG9uZW50X3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQiKSxib3VuZGFyeUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYm91bmRhcnlGb250V2VpZ2h0fX0sImJvdW5kYXJ5Rm9udCIpLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpfSxwaWU6ey4uLmN1LnBpZSx1c2VXaWR0aDo5ODR9LHh5Q2hhcnQ6ey4uLmN1Lnh5Q2hhcnQsdXNlV2lkdGg6dm9pZCAwfSxyZXF1aXJlbWVudDp7Li4uY3UucmVxdWlyZW1lbnQsdXNlV2lkdGg6dm9pZCAwfSxwYWNrZXQ6ey4uLmN1LnBhY2tldH19LHF6PW8oKHQsZT0iIik9Pk9iamVjdC5rZXlzKHQpLnJlZHVjZSgocixuKT0+QXJyYXkuaXNBcnJheSh0W25dKT9yOnR5cGVvZiB0W25dPT0ib2JqZWN0IiYmdFtuXSE9PW51bGw/Wy4uLnIsZStuLC4uLnF6KHRbbl0sIiIpXTpbLi4ucixlK25dLFtdKSwia2V5aWZ5IiksWHo9bmV3IFNldChxeihZeiwiIikpLHVyPVl6fSk7dmFyIHhwLEt4ZSxuQz1NKCgpPT57InVzZSBzdHJpY3QiO2JzKCk7dXQoKTt4cD1vKHQ9PntpZihZLmRlYnVnKCJzYW5pdGl6ZURpcmVjdGl2ZSBjYWxsZWQgd2l0aCIsdCksISh0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PW51bGwpKXtpZihBcnJheS5pc0FycmF5KHQpKXt0LmZvckVhY2goZT0+eHAoZSkpO3JldHVybn1mb3IobGV0IGUgb2YgT2JqZWN0LmtleXModCkpe2lmKFkuZGVidWcoIkNoZWNraW5nIGtleSIsZSksZS5zdGFydHNXaXRoKCJfXyIpfHxlLmluY2x1ZGVzKCJwcm90byIpfHxlLmluY2x1ZGVzKCJjb25zdHIiKXx8IVh6LmhhcyhlKXx8dFtlXT09bnVsbCl7WS5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGUpLGRlbGV0ZSB0W2VdO2NvbnRpbnVlfWlmKHR5cGVvZiB0W2VdPT0ib2JqZWN0Iil7WS5kZWJ1Zygic2FuaXRpemluZyBvYmplY3QiLGUpLHhwKHRbZV0pO2NvbnRpbnVlfWxldCByPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2ZvcihsZXQgbiBvZiByKWUuaW5jbHVkZXMobikmJihZLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGUpLHRbZV09S3hlKHRbZV0pKX1pZih0LnRoZW1lVmFyaWFibGVzKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0LnRoZW1lVmFyaWFibGVzKSl7bGV0IHI9dC50aGVtZVZhcmlhYmxlc1tlXTtyPy5tYXRjaCYmIXIubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKHQudGhlbWVWYXJpYWJsZXNbZV09IiIpfVkuZGVidWcoIkFmdGVyIHNhbml0aXphdGlvbiIsdCl9fSwic2FuaXRpemVEaXJlY3RpdmUiKSxLeGU9byh0PT57bGV0IGU9MCxyPTA7Zm9yKGxldCBuIG9mIHQpe2lmKGU8cilyZXR1cm4ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI7bj09PSJ7Ij9lKys6bj09PSJ9IiYmcisrfXJldHVybiBlIT09cj8ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI6dH0sInNhbml0aXplQ3NzIil9KTt2YXIgcGgsd3MsS3osYnAsb3ksczQsaUMsUXosWnosYUMsbzQsQ3IsSnosZUcsbHksUXhlLGp6LFp4ZSx0RyxaYT1NKCgpPT57InVzZSBzdHJpY3QiO2dwKCk7dXQoKTthNCgpO2JzKCk7bkMoKTtwaD1PYmplY3QuZnJlZXplKHVyKSx3cz1Wbih7fSxwaCksYnA9W10sb3k9Vm4oe30scGgpLHM0PW8oKHQsZSk9PntsZXQgcj1Wbih7fSx0KSxuPXt9O2ZvcihsZXQgaSBvZiBlKUp6KGkpLG49Vm4obixpKTtpZihyPVZuKHIsbiksbi50aGVtZSYmbi50aGVtZSBpbiBEbyl7bGV0IGk9Vm4oe30sS3opLGE9Vm4oaS50aGVtZVZhcmlhYmxlc3x8e30sbi50aGVtZVZhcmlhYmxlcyk7ci50aGVtZSYmci50aGVtZSBpbiBEbyYmKHIudGhlbWVWYXJpYWJsZXM9RG9bci50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoYSkpfXJldHVybiBveT1yLHRHKG95KSxveX0sInVwZGF0ZUN1cnJlbnRDb25maWciKSxpQz1vKHQ9Pih3cz1Wbih7fSxwaCksd3M9Vm4od3MsdCksdC50aGVtZSYmRG9bdC50aGVtZV0mJih3cy50aGVtZVZhcmlhYmxlcz1Eb1t0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksczQod3MsYnApLHdzKSwic2V0U2l0ZUNvbmZpZyIpLFF6PW8odD0+e0t6PVZuKHt9LHQpfSwic2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplIiksWno9byh0PT4od3M9Vm4od3MsdCksczQod3MsYnApLHdzKSwidXBkYXRlU2l0ZUNvbmZpZyIpLGFDPW8oKCk9PlZuKHt9LHdzKSwiZ2V0U2l0ZUNvbmZpZyIpLG80PW8odD0+KHRHKHQpLFZuKG95LHQpLENyKCkpLCJzZXRDb25maWciKSxDcj1vKCgpPT5Wbih7fSxveSksImdldENvbmZpZyIpLEp6PW8odD0+e3QmJihbInNlY3VyZSIsLi4ud3Muc2VjdXJlPz9bXV0uZm9yRWFjaChlPT57T2JqZWN0Lmhhc093bih0LGUpJiYoWS5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke2V9YCx0W2VdKSxkZWxldGUgdFtlXSl9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntlLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSB0W2VdfSksT2JqZWN0LmtleXModCkuZm9yRWFjaChlPT57dHlwZW9mIHRbZV09PSJzdHJpbmciJiYodFtlXS5pbmNsdWRlcygiPCIpfHx0W2VdLmluY2x1ZGVzKCI+Iil8fHRbZV0uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIHRbZV0sdHlwZW9mIHRbZV09PSJvYmplY3QiJiZKeih0W2VdKX0pKX0sInNhbml0aXplIiksZUc9byh0PT57eHAodCksdC5mb250RmFtaWx5JiYhdC50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXM9ey4uLnQudGhlbWVWYXJpYWJsZXMsZm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSxicC5wdXNoKHQpLHM0KHdzLGJwKX0sImFkZERpcmVjdGl2ZSIpLGx5PW8oKHQ9d3MpPT57YnA9W10sczQodCxicCl9LCJyZXNldCIpLFF4ZT17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxqej17fSxaeGU9byh0PT57anpbdF18fChZLndhcm4oUXhlW3RdKSxqelt0XT0hMCl9LCJpc3N1ZVdhcm5pbmciKSx0Rz1vKHQ9Pnt0JiYodC5sYXp5TG9hZGVkRGlhZ3JhbXN8fHQubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZaeGUoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LCJjaGVja0NvbmZpZyIpfSk7dmFyIGxDPUVpKChzQyxvQyk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIHNDPT0ib2JqZWN0IiYmdHlwZW9mIG9DPCJ1Ij9vQy5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmLHQuRE9NUHVyaWZ5PWUoKSl9KShzQyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtsZXR7ZW50cmllczp0LHNldFByb3RvdHlwZU9mOmUsaXNGcm96ZW46cixnZXRQcm90b3R5cGVPZjpuLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjppfT1PYmplY3Qse2ZyZWV6ZTphLHNlYWw6cyxjcmVhdGU6bH09T2JqZWN0LHthcHBseTp1LGNvbnN0cnVjdDpofT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7YXx8KGE9byhmdW5jdGlvbihDZSl7cmV0dXJuIENlfSwiZnJlZXplIikpLHN8fChzPW8oZnVuY3Rpb24oQ2Upe3JldHVybiBDZX0sInNlYWwiKSksdXx8KHU9byhmdW5jdGlvbihDZSxQZSxJZSl7cmV0dXJuIENlLmFwcGx5KFBlLEllKX0sImFwcGx5IikpLGh8fChoPW8oZnVuY3Rpb24oQ2UsUGUpe3JldHVybiBuZXcgQ2UoLi4uUGUpfSwiY29uc3RydWN0IikpO2xldCBmPUUoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLGQ9RShBcnJheS5wcm90b3R5cGUucG9wKSxwPUUoQXJyYXkucHJvdG90eXBlLnB1c2gpLG09RShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxnPUUoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZykseT1FKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLHY9RShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHg9RShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGI9RShTdHJpbmcucHJvdG90eXBlLnRyaW0pLHc9RShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxfPUUoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxUPUwoVHlwZUVycm9yKTtmdW5jdGlvbiBFKFJlKXtyZXR1cm4gZnVuY3Rpb24oQ2Upe2Zvcih2YXIgUGU9YXJndW1lbnRzLmxlbmd0aCxJZT1uZXcgQXJyYXkoUGU+MT9QZS0xOjApLCRlPTE7JGU8UGU7JGUrKylJZVskZS0xXT1hcmd1bWVudHNbJGVdO3JldHVybiB1KFJlLENlLEllKX19byhFLCJ1bmFwcGx5Iik7ZnVuY3Rpb24gTChSZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBDZT1hcmd1bWVudHMubGVuZ3RoLFBlPW5ldyBBcnJheShDZSksSWU9MDtJZTxDZTtJZSsrKVBlW0llXT1hcmd1bWVudHNbSWVdO3JldHVybiBoKFJlLFBlKX19byhMLCJ1bmNvbnN0cnVjdCIpO2Z1bmN0aW9uIFMoUmUsQ2Upe2xldCBQZT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bTtlJiZlKFJlLG51bGwpO2xldCBJZT1DZS5sZW5ndGg7Zm9yKDtJZS0tOyl7bGV0ICRlPUNlW0llXTtpZih0eXBlb2YgJGU9PSJzdHJpbmciKXtsZXQgeWU9UGUoJGUpO3llIT09JGUmJihyKENlKXx8KENlW0llXT15ZSksJGU9eWUpfVJlWyRlXT0hMH1yZXR1cm4gUmV9byhTLCJhZGRUb1NldCIpO2Z1bmN0aW9uIEEoUmUpe2ZvcihsZXQgQ2U9MDtDZTxSZS5sZW5ndGg7Q2UrKyl3KFJlLENlKXx8KFJlW0NlXT1udWxsKTtyZXR1cm4gUmV9byhBLCJjbGVhbkFycmF5Iik7ZnVuY3Rpb24gSShSZSl7bGV0IENlPWwobnVsbCk7Zm9yKGxldFtQZSxJZV1vZiB0KFJlKSl3KFJlLFBlKSYmKEFycmF5LmlzQXJyYXkoSWUpP0NlW1BlXT1BKEllKTpJZSYmdHlwZW9mIEllPT0ib2JqZWN0IiYmSWUuY29uc3RydWN0b3I9PT1PYmplY3Q/Q2VbUGVdPUkoSWUpOkNlW1BlXT1JZSk7cmV0dXJuIENlfW8oSSwiY2xvbmUiKTtmdW5jdGlvbiBEKFJlLENlKXtmb3IoO1JlIT09bnVsbDspe2xldCBJZT1pKFJlLENlKTtpZihJZSl7aWYoSWUuZ2V0KXJldHVybiBFKEllLmdldCk7aWYodHlwZW9mIEllLnZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiBFKEllLnZhbHVlKX1SZT1uKFJlKX1mdW5jdGlvbiBQZSgpe3JldHVybiBudWxsfXJldHVybiBvKFBlLCJmYWxsYmFja1ZhbHVlIiksUGV9byhELCJsb29rdXBHZXR0ZXIiKTtsZXQgaz1hKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxSPWEoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEM9YShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxPPWEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLE49YShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksUD1hKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxGPWEoWyIjdGV4dCJdKSxCPWEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxHPWEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSx6PWEoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksVz1hKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksWj1zKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksaj1zKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxvZT1zKC9cJHtbXHdcV10qfS9nbSksSz1zKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLGVlPXMoL15hcmlhLVtcLVx3XSskLyksSj1zKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLEg9cygvXig/Olx3K3NjcmlwdHxkYXRhKTovaSkscT1zKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFE9cygvXmh0bWwkL2kpLGFlPXMoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpO3ZhciB1ZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNVVNUQUNIRV9FWFBSOlosRVJCX0VYUFI6aixUTVBMSVRfRVhQUjpvZSxEQVRBX0FUVFI6SyxBUklBX0FUVFI6ZWUsSVNfQUxMT1dFRF9VUkk6SixJU19TQ1JJUFRfT1JfREFUQTpILEFUVFJfV0hJVEVTUEFDRTpxLERPQ1RZUEVfTkFNRTpRLENVU1RPTV9FTEVNRU5UOmFlfSk7bGV0IGNlPXtlbGVtZW50OjEsYXR0cmlidXRlOjIsdGV4dDozLGNkYXRhU2VjdGlvbjo0LGVudGl0eVJlZmVyZW5jZTo1LGVudGl0eU5vZGU6Nixwcm9ncmVzc2luZ0luc3RydWN0aW9uOjcsY29tbWVudDo4LGRvY3VtZW50OjksZG9jdW1lbnRUeXBlOjEwLGRvY3VtZW50RnJhZ21lbnQ6MTEsbm90YXRpb246MTJ9LHRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3d9LCJnZXRHbG9iYWwiKSxOZT1vKGZ1bmN0aW9uKENlLFBlKXtpZih0eXBlb2YgQ2UhPSJvYmplY3QifHx0eXBlb2YgQ2UuY3JlYXRlUG9saWN5IT0iZnVuY3Rpb24iKXJldHVybiBudWxsO2xldCBJZT1udWxsLCRlPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO1BlJiZQZS5oYXNBdHRyaWJ1dGUoJGUpJiYoSWU9UGUuZ2V0QXR0cmlidXRlKCRlKSk7bGV0IHllPSJkb21wdXJpZnkiKyhJZT8iIyIrSWU6IiIpO3RyeXtyZXR1cm4gQ2UuY3JlYXRlUG9saWN5KHllLHtjcmVhdGVIVE1MKFgpe3JldHVybiBYfSxjcmVhdGVTY3JpcHRVUkwoWCl7cmV0dXJuIFh9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3llKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19LCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5Iik7ZnVuY3Rpb24gc2UoKXtsZXQgUmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnRlKCksQ2U9byhLdD0+c2UoS3QpLCJET01QdXJpZnkiKTtpZihDZS52ZXJzaW9uPSIzLjEuNiIsQ2UucmVtb3ZlZD1bXSwhUmV8fCFSZS5kb2N1bWVudHx8UmUuZG9jdW1lbnQubm9kZVR5cGUhPT1jZS5kb2N1bWVudClyZXR1cm4gQ2UuaXNTdXBwb3J0ZWQ9ITEsQ2U7bGV0e2RvY3VtZW50OlBlfT1SZSxJZT1QZSwkZT1JZS5jdXJyZW50U2NyaXB0LHtEb2N1bWVudEZyYWdtZW50OnllLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6WCxOb2RlOmZlLEVsZW1lbnQ6aGUsTm9kZUZpbHRlcjpnZSxOYW1lZE5vZGVNYXA6bmU9UmUuTmFtZWROb2RlTWFwfHxSZS5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50OnZlLERPTVBhcnNlcjpVLHRydXN0ZWRUeXBlczpUZX09UmUsaWU9aGUucHJvdG90eXBlLEVlPUQoaWUsImNsb25lTm9kZSIpLEFlPUQoaWUsInJlbW92ZSIpLEdlPUQoaWUsIm5leHRTaWJsaW5nIiksQmU9RChpZSwiY2hpbGROb2RlcyIpLG1lPUQoaWUsInBhcmVudE5vZGUiKTtpZih0eXBlb2YgWD09ImZ1bmN0aW9uIil7bGV0IEt0PVBlLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7S3QuY29udGVudCYmS3QuY29udGVudC5vd25lckRvY3VtZW50JiYoUGU9S3QuY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgSGUsT2U9IiIse2ltcGxlbWVudGF0aW9uOmV0LGNyZWF0ZU5vZGVJdGVyYXRvcjpidCxjcmVhdGVEb2N1bWVudEZyYWdtZW50Omt0LGdldEVsZW1lbnRzQnlUYWdOYW1lOnZ0fT1QZSx7aW1wb3J0Tm9kZTpydH09SWUseXQ9e307Q2UuaXNTdXBwb3J0ZWQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnR5cGVvZiBtZT09ImZ1bmN0aW9uIiYmZXQmJmV0LmNyZWF0ZUhUTUxEb2N1bWVudCE9PXZvaWQgMDtsZXR7TVVTVEFDSEVfRVhQUjpVZSxFUkJfRVhQUjp0dCxUTVBMSVRfRVhQUjpodCxEQVRBX0FUVFI6RXQsQVJJQV9BVFRSOmVyLElTX1NDUklQVF9PUl9EQVRBOmR0LEFUVFJfV0hJVEVTUEFDRTpKZSxDVVNUT01fRUxFTUVOVDpjdH09dWUse0lTX0FMTE9XRURfVVJJOkN0fT11ZSxwdD1udWxsLEJ0PVMoe30sWy4uLmssLi4uUiwuLi5DLC4uLk4sLi4uRl0pLFRyPW51bGwseXI9Uyh7fSxbLi4uQiwuLi5HLC4uLnosLi4uV10pLG9yPU9iamVjdC5zZWFsKGwobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGxuPW51bGwsT3I9bnVsbCxpaT0hMCxtbj0hMCxPbj0hMSxfcj0hMCxtaT0hMSx2cz0hMCxQbj0hMSxTbz0hMSxnbD0hMSxCbj0hMSxraT0hMSxBdD0hMSxQdD0hMCx3dD0hMSxXZT0idXNlci1jb250ZW50LSIsRnQ9ITAsZGU9ITEsZ249e30seGU9bnVsbCxqYT1TKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSksVzE9bnVsbCxZMT1TKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSkscTE9bnVsbCxYMT1TKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksb3A9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLEtuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHRjPWNhLFdmPSExLGoxPW51bGwsVEY9Uyh7fSxbb3AsS24sY2FdLGcpLFlmPW51bGwsdWE9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSxLMT0idGV4dC9odG1sIixFbj1udWxsLE9pPW51bGwsa0Y9UGUuY3JlYXRlRWxlbWVudCgiZm9ybSIpLGxwPW8oZnVuY3Rpb24oTGUpe3JldHVybiBMZSBpbnN0YW5jZW9mIFJlZ0V4cHx8TGUgaW5zdGFuY2VvZiBGdW5jdGlvbn0sImlzUmVnZXhPckZ1bmN0aW9uIikscmM9byhmdW5jdGlvbigpe2xldCBMZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307aWYoIShPaSYmT2k9PT1MZSkpe2lmKCghTGV8fHR5cGVvZiBMZSE9Im9iamVjdCIpJiYoTGU9e30pLExlPUkoTGUpLFlmPXVhLmluZGV4T2YoTGUuUEFSU0VSX01FRElBX1RZUEUpPT09LTE/SzE6TGUuUEFSU0VSX01FRElBX1RZUEUsRW49WWY9PT0iYXBwbGljYXRpb24veGh0bWwreG1sIj9nOm0scHQ9dyhMZSwiQUxMT1dFRF9UQUdTIik/Uyh7fSxMZS5BTExPV0VEX1RBR1MsRW4pOkJ0LFRyPXcoTGUsIkFMTE9XRURfQVRUUiIpP1Moe30sTGUuQUxMT1dFRF9BVFRSLEVuKTp5cixqMT13KExlLCJBTExPV0VEX05BTUVTUEFDRVMiKT9TKHt9LExlLkFMTE9XRURfTkFNRVNQQUNFUyxnKTpURixxMT13KExlLCJBRERfVVJJX1NBRkVfQVRUUiIpP1MoSShYMSksTGUuQUREX1VSSV9TQUZFX0FUVFIsRW4pOlgxLFcxPXcoTGUsIkFERF9EQVRBX1VSSV9UQUdTIik/UyhJKFkxKSxMZS5BRERfREFUQV9VUklfVEFHUyxFbik6WTEseGU9dyhMZSwiRk9SQklEX0NPTlRFTlRTIik/Uyh7fSxMZS5GT1JCSURfQ09OVEVOVFMsRW4pOmphLGxuPXcoTGUsIkZPUkJJRF9UQUdTIik/Uyh7fSxMZS5GT1JCSURfVEFHUyxFbik6e30sT3I9dyhMZSwiRk9SQklEX0FUVFIiKT9TKHt9LExlLkZPUkJJRF9BVFRSLEVuKTp7fSxnbj13KExlLCJVU0VfUFJPRklMRVMiKT9MZS5VU0VfUFJPRklMRVM6ITEsaWk9TGUuQUxMT1dfQVJJQV9BVFRSIT09ITEsbW49TGUuQUxMT1dfREFUQV9BVFRSIT09ITEsT249TGUuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLF9yPUxlLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiE9PSExLG1pPUxlLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsdnM9TGUuU0FGRV9GT1JfWE1MIT09ITEsUG49TGUuV0hPTEVfRE9DVU1FTlR8fCExLEJuPUxlLlJFVFVSTl9ET018fCExLGtpPUxlLlJFVFVSTl9ET01fRlJBR01FTlR8fCExLEF0PUxlLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLGdsPUxlLkZPUkNFX0JPRFl8fCExLFB0PUxlLlNBTklUSVpFX0RPTSE9PSExLHd0PUxlLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxGdD1MZS5LRUVQX0NPTlRFTlQhPT0hMSxkZT1MZS5JTl9QTEFDRXx8ITEsQ3Q9TGUuQUxMT1dFRF9VUklfUkVHRVhQfHxKLHRjPUxlLk5BTUVTUEFDRXx8Y2Esb3I9TGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LExlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZscChMZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYob3IudGFnTmFtZUNoZWNrPUxlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksTGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJmxwKExlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihvci5hdHRyaWJ1dGVOYW1lQ2hlY2s9TGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxMZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIExlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYob3IuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPUxlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksbWkmJihtbj0hMSksa2kmJihCbj0hMCksZ24mJihwdD1TKHt9LEYpLFRyPVtdLGduLmh0bWw9PT0hMCYmKFMocHQsayksUyhUcixCKSksZ24uc3ZnPT09ITAmJihTKHB0LFIpLFMoVHIsRyksUyhUcixXKSksZ24uc3ZnRmlsdGVycz09PSEwJiYoUyhwdCxDKSxTKFRyLEcpLFMoVHIsVykpLGduLm1hdGhNbD09PSEwJiYoUyhwdCxOKSxTKFRyLHopLFMoVHIsVykpKSxMZS5BRERfVEFHUyYmKHB0PT09QnQmJihwdD1JKHB0KSksUyhwdCxMZS5BRERfVEFHUyxFbikpLExlLkFERF9BVFRSJiYoVHI9PT15ciYmKFRyPUkoVHIpKSxTKFRyLExlLkFERF9BVFRSLEVuKSksTGUuQUREX1VSSV9TQUZFX0FUVFImJlMocTEsTGUuQUREX1VSSV9TQUZFX0FUVFIsRW4pLExlLkZPUkJJRF9DT05URU5UUyYmKHhlPT09amEmJih4ZT1JKHhlKSksUyh4ZSxMZS5GT1JCSURfQ09OVEVOVFMsRW4pKSxGdCYmKHB0WyIjdGV4dCJdPSEwKSxQbiYmUyhwdCxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxwdC50YWJsZSYmKFMocHQsWyJ0Ym9keSJdKSxkZWxldGUgbG4udGJvZHkpLExlLlRSVVNURURfVFlQRVNfUE9MSUNZKXtpZih0eXBlb2YgTGUuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCE9ImZ1bmN0aW9uIil0aHJvdyBUKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgTGUuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IFQoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7SGU9TGUuVFJVU1RFRF9UWVBFU19QT0xJQ1ksT2U9SGUuY3JlYXRlSFRNTCgiIil9ZWxzZSBIZT09PXZvaWQgMCYmKEhlPU5lKFRlLCRlKSksSGUhPT1udWxsJiZ0eXBlb2YgT2U9PSJzdHJpbmciJiYoT2U9SGUuY3JlYXRlSFRNTCgiIikpO2EmJmEoTGUpLE9pPUxlfX0sIl9wYXJzZUNvbmZpZyIpLHFmPVMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLENvPVMoe30sWyJmb3JlaWdub2JqZWN0IiwiYW5ub3RhdGlvbi14bWwiXSksemI9Uyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxYZj1TKHt9LFsuLi5SLC4uLkMsLi4uT10pLGNwPVMoe30sWy4uLk4sLi4uUF0pLEthPW8oZnVuY3Rpb24oTGUpe2xldCBmdD1tZShMZSk7KCFmdHx8IWZ0LnRhZ05hbWUpJiYoZnQ9e25hbWVzcGFjZVVSSTp0Yyx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTtsZXQgenQ9bShMZS50YWdOYW1lKSxTbj1tKGZ0LnRhZ05hbWUpO3JldHVybiBqMVtMZS5uYW1lc3BhY2VVUkldP0xlLm5hbWVzcGFjZVVSST09PUtuP2Z0Lm5hbWVzcGFjZVVSST09PWNhP3p0PT09InN2ZyI6ZnQubmFtZXNwYWNlVVJJPT09b3A/enQ9PT0ic3ZnIiYmKFNuPT09ImFubm90YXRpb24teG1sInx8cWZbU25dKTohIVhmW3p0XTpMZS5uYW1lc3BhY2VVUkk9PT1vcD9mdC5uYW1lc3BhY2VVUkk9PT1jYT96dD09PSJtYXRoIjpmdC5uYW1lc3BhY2VVUkk9PT1Lbj96dD09PSJtYXRoIiYmQ29bU25dOiEhY3BbenRdOkxlLm5hbWVzcGFjZVVSST09PWNhP2Z0Lm5hbWVzcGFjZVVSST09PUtuJiYhQ29bU25dfHxmdC5uYW1lc3BhY2VVUkk9PT1vcCYmIXFmW1NuXT8hMTohY3BbenRdJiYoemJbenRdfHwhWGZbenRdKTohIShZZj09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZqMVtMZS5uYW1lc3BhY2VVUkldKTohMX0sIl9jaGVja1ZhbGlkTmFtZXNwYWNlIiksbmM9byhmdW5jdGlvbihMZSl7cChDZS5yZW1vdmVkLHtlbGVtZW50OkxlfSk7dHJ5e21lKExlKS5yZW1vdmVDaGlsZChMZSl9Y2F0Y2h7QWUoTGUpfX0sIl9mb3JjZVJlbW92ZSIpLEdiPW8oZnVuY3Rpb24oTGUsZnQpe3RyeXtwKENlLnJlbW92ZWQse2F0dHJpYnV0ZTpmdC5nZXRBdHRyaWJ1dGVOb2RlKExlKSxmcm9tOmZ0fSl9Y2F0Y2h7cChDZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmZ0fSl9aWYoZnQucmVtb3ZlQXR0cmlidXRlKExlKSxMZT09PSJpcyImJiFUcltMZV0paWYoQm58fGtpKXRyeXtuYyhmdCl9Y2F0Y2h7fWVsc2UgdHJ5e2Z0LnNldEF0dHJpYnV0ZShMZSwiIil9Y2F0Y2h7fX0sIl9yZW1vdmVBdHRyaWJ1dGUiKSxFRj1vKGZ1bmN0aW9uKExlKXtsZXQgZnQ9bnVsbCx6dD1udWxsO2lmKGdsKUxlPSI8cmVtb3ZlPjwvcmVtb3ZlPiIrTGU7ZWxzZXtsZXQgaGE9eShMZSwvXltcclxuXHQgXSsvKTt6dD1oYSYmaGFbMF19WWY9PT0iYXBwbGljYXRpb24veGh0bWwreG1sIiYmdGM9PT1jYSYmKExlPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrTGUrIjwvYm9keT48L2h0bWw+Iik7bGV0IFNuPUhlP0hlLmNyZWF0ZUhUTUwoTGUpOkxlO2lmKHRjPT09Y2EpdHJ5e2Z0PW5ldyBVKCkucGFyc2VGcm9tU3RyaW5nKFNuLFlmKX1jYXRjaHt9aWYoIWZ0fHwhZnQuZG9jdW1lbnRFbGVtZW50KXtmdD1ldC5jcmVhdGVEb2N1bWVudCh0YywidGVtcGxhdGUiLG51bGwpO3RyeXtmdC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPVdmP09lOlNufWNhdGNoe319bGV0IERhPWZ0LmJvZHl8fGZ0LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gTGUmJnp0JiZEYS5pbnNlcnRCZWZvcmUoUGUuY3JlYXRlVGV4dE5vZGUoenQpLERhLmNoaWxkTm9kZXNbMF18fG51bGwpLHRjPT09Y2E/dnQuY2FsbChmdCxQbj8iaHRtbCI6ImJvZHkiKVswXTpQbj9mdC5kb2N1bWVudEVsZW1lbnQ6RGF9LCJfaW5pdERvY3VtZW50IiksU0Y9byhmdW5jdGlvbihMZSl7cmV0dXJuIGJ0LmNhbGwoTGUub3duZXJEb2N1bWVudHx8TGUsTGUsZ2UuU0hPV19FTEVNRU5UfGdlLlNIT1dfQ09NTUVOVHxnZS5TSE9XX1RFWFR8Z2UuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfGdlLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sIl9jcmVhdGVOb2RlSXRlcmF0b3IiKSxDRj1vKGZ1bmN0aW9uKExlKXtyZXR1cm4gTGUgaW5zdGFuY2VvZiB2ZSYmKHR5cGVvZiBMZS5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBMZS50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBMZS5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShMZS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgbmUpfHx0eXBlb2YgTGUucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgTGUuc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgTGUubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIExlLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIExlLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSwiX2lzQ2xvYmJlcmVkIiksQUY9byhmdW5jdGlvbihMZSl7cmV0dXJuIHR5cGVvZiBmZT09ImZ1bmN0aW9uIiYmTGUgaW5zdGFuY2VvZiBmZX0sIl9pc05vZGUiKSxpdT1vKGZ1bmN0aW9uKExlLGZ0LHp0KXt5dFtMZV0mJmYoeXRbTGVdLFNuPT57U24uY2FsbChDZSxmdCx6dCxPaSl9KX0sIl9leGVjdXRlSG9vayIpLF9GPW8oZnVuY3Rpb24oTGUpe2xldCBmdD1udWxsO2lmKGl1KCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIixMZSxudWxsKSxDRihMZSkpcmV0dXJuIG5jKExlKSwhMDtsZXQgenQ9RW4oTGUubm9kZU5hbWUpO2lmKGl1KCJ1cG9uU2FuaXRpemVFbGVtZW50IixMZSx7dGFnTmFtZTp6dCxhbGxvd2VkVGFnczpwdH0pLExlLmhhc0NoaWxkTm9kZXMoKSYmIUFGKExlLmZpcnN0RWxlbWVudENoaWxkKSYmXygvPFsvXHddL2csTGUuaW5uZXJIVE1MKSYmXygvPFsvXHddL2csTGUudGV4dENvbnRlbnQpfHxMZS5ub2RlVHlwZT09PWNlLnByb2dyZXNzaW5nSW5zdHJ1Y3Rpb258fHZzJiZMZS5ub2RlVHlwZT09PWNlLmNvbW1lbnQmJl8oLzxbL1x3XS9nLExlLmRhdGEpKXJldHVybiBuYyhMZSksITA7aWYoIXB0W3p0XXx8bG5benRdKXtpZighbG5benRdJiZERih6dCkmJihvci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJl8ob3IudGFnTmFtZUNoZWNrLHp0KXx8b3IudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJm9yLnRhZ05hbWVDaGVjayh6dCkpKXJldHVybiExO2lmKEZ0JiYheGVbenRdKXtsZXQgU249bWUoTGUpfHxMZS5wYXJlbnROb2RlLERhPUJlKExlKXx8TGUuY2hpbGROb2RlcztpZihEYSYmU24pe2xldCBoYT1EYS5sZW5ndGg7Zm9yKGxldCB4cz1oYS0xO3hzPj0wOy0teHMpe2xldCBpYz1FZShEYVt4c10sITApO2ljLl9fcmVtb3ZhbENvdW50PShMZS5fX3JlbW92YWxDb3VudHx8MCkrMSxTbi5pbnNlcnRCZWZvcmUoaWMsR2UoTGUpKX19fXJldHVybiBuYyhMZSksITB9cmV0dXJuIExlIGluc3RhbmNlb2YgaGUmJiFLYShMZSl8fCh6dD09PSJub3NjcmlwdCJ8fHp0PT09Im5vZW1iZWQifHx6dD09PSJub2ZyYW1lcyIpJiZfKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLExlLmlubmVySFRNTCk/KG5jKExlKSwhMCk6KG1pJiZMZS5ub2RlVHlwZT09PWNlLnRleHQmJihmdD1MZS50ZXh0Q29udGVudCxmKFtVZSx0dCxodF0sU249PntmdD12KGZ0LFNuLCIgIil9KSxMZS50ZXh0Q29udGVudCE9PWZ0JiYocChDZS5yZW1vdmVkLHtlbGVtZW50OkxlLmNsb25lTm9kZSgpfSksTGUudGV4dENvbnRlbnQ9ZnQpKSxpdSgiYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzIixMZSxudWxsKSwhMSl9LCJfc2FuaXRpemVFbGVtZW50cyIpLExGPW8oZnVuY3Rpb24oTGUsZnQsenQpe2lmKFB0JiYoZnQ9PT0iaWQifHxmdD09PSJuYW1lIikmJih6dCBpbiBQZXx8enQgaW4ga0YpKXJldHVybiExO2lmKCEobW4mJiFPcltmdF0mJl8oRXQsZnQpKSl7aWYoIShpaSYmXyhlcixmdCkpKXtpZighVHJbZnRdfHxPcltmdF0pe2lmKCEoREYoTGUpJiYob3IudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZfKG9yLnRhZ05hbWVDaGVjayxMZSl8fG9yLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZvci50YWdOYW1lQ2hlY2soTGUpKSYmKG9yLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmXyhvci5hdHRyaWJ1dGVOYW1lQ2hlY2ssZnQpfHxvci5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmb3IuYXR0cmlidXRlTmFtZUNoZWNrKGZ0KSl8fGZ0PT09ImlzIiYmb3IuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYob3IudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZfKG9yLnRhZ05hbWVDaGVjayx6dCl8fG9yLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZvci50YWdOYW1lQ2hlY2soenQpKSkpcmV0dXJuITF9ZWxzZSBpZighcTFbZnRdKXtpZighXyhDdCx2KHp0LEplLCIiKSkpe2lmKCEoKGZ0PT09InNyYyJ8fGZ0PT09InhsaW5rOmhyZWYifHxmdD09PSJocmVmIikmJkxlIT09InNjcmlwdCImJngoenQsImRhdGE6Iik9PT0wJiZXMVtMZV0pKXtpZighKE9uJiYhXyhkdCx2KHp0LEplLCIiKSkpKXtpZih6dClyZXR1cm4hMX19fX19fXJldHVybiEwfSwiX2lzVmFsaWRBdHRyaWJ1dGUiKSxERj1vKGZ1bmN0aW9uKExlKXtyZXR1cm4gTGUhPT0iYW5ub3RhdGlvbi14bWwiJiZ5KExlLGN0KX0sIl9pc0Jhc2ljQ3VzdG9tRWxlbWVudCIpLE5GPW8oZnVuY3Rpb24oTGUpe2l1KCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLExlLG51bGwpO2xldHthdHRyaWJ1dGVzOmZ0fT1MZTtpZighZnQpcmV0dXJuO2xldCB6dD17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOlRyfSxTbj1mdC5sZW5ndGg7Zm9yKDtTbi0tOyl7bGV0IERhPWZ0W1NuXSx7bmFtZTpoYSxuYW1lc3BhY2VVUkk6eHMsdmFsdWU6aWN9PURhLFExPUVuKGhhKSxRYT1oYT09PSJ2YWx1ZSI/aWM6YihpYyk7aWYoenQuYXR0ck5hbWU9UTEsenQuYXR0clZhbHVlPVFhLHp0LmtlZXBBdHRyPSEwLHp0LmZvcmNlS2VlcEF0dHI9dm9pZCAwLGl1KCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLExlLHp0KSxRYT16dC5hdHRyVmFsdWUsdnMmJl8oLygoLS0hP3xdKT4pfDxcLyhzdHlsZXx0aXRsZSkvaSxRYSkpe0diKGhhLExlKTtjb250aW51ZX1pZih6dC5mb3JjZUtlZXBBdHRyfHwoR2IoaGEsTGUpLCF6dC5rZWVwQXR0cikpY29udGludWU7aWYoIV9yJiZfKC9cLz4vaSxRYSkpe0diKGhhLExlKTtjb250aW51ZX1taSYmZihbVWUsdHQsaHRdLE1GPT57UWE9dihRYSxNRiwiICIpfSk7bGV0IFJGPUVuKExlLm5vZGVOYW1lKTtpZihMRihSRixRMSxRYSkpe2lmKHd0JiYoUTE9PT0iaWQifHxRMT09PSJuYW1lIikmJihHYihoYSxMZSksUWE9V2UrUWEpLEhlJiZ0eXBlb2YgVGU9PSJvYmplY3QiJiZ0eXBlb2YgVGUuZ2V0QXR0cmlidXRlVHlwZT09ImZ1bmN0aW9uIiYmIXhzKXN3aXRjaChUZS5nZXRBdHRyaWJ1dGVUeXBlKFJGLFExKSl7Y2FzZSJUcnVzdGVkSFRNTCI6e1FhPUhlLmNyZWF0ZUhUTUwoUWEpO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1FhPUhlLmNyZWF0ZVNjcmlwdFVSTChRYSk7YnJlYWt9fXRyeXt4cz9MZS5zZXRBdHRyaWJ1dGVOUyh4cyxoYSxRYSk6TGUuc2V0QXR0cmlidXRlKGhhLFFhKSxDRihMZSk/bmMoTGUpOmQoQ2UucmVtb3ZlZCl9Y2F0Y2h7fX19aXUoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixMZSxudWxsKX0sIl9zYW5pdGl6ZUF0dHJpYnV0ZXMiKSxueGU9byhmdW5jdGlvbiBLdChMZSl7bGV0IGZ0PW51bGwsenQ9U0YoTGUpO2ZvcihpdSgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLExlLG51bGwpO2Z0PXp0Lm5leHROb2RlKCk7KWl1KCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixmdCxudWxsKSwhX0YoZnQpJiYoZnQuY29udGVudCBpbnN0YW5jZW9mIHllJiZLdChmdC5jb250ZW50KSxORihmdCkpO2l1KCJhZnRlclNhbml0aXplU2hhZG93RE9NIixMZSxudWxsKX0sIl9zYW5pdGl6ZVNoYWRvd0RPTSIpO3JldHVybiBDZS5zYW5pdGl6ZT1mdW5jdGlvbihLdCl7bGV0IExlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxmdD1udWxsLHp0PW51bGwsU249bnVsbCxEYT1udWxsO2lmKFdmPSFLdCxXZiYmKEt0PSI8IS0tPiIpLHR5cGVvZiBLdCE9InN0cmluZyImJiFBRihLdCkpaWYodHlwZW9mIEt0LnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihLdD1LdC50b1N0cmluZygpLHR5cGVvZiBLdCE9InN0cmluZyIpdGhyb3cgVCgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWVsc2UgdGhyb3cgVCgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighQ2UuaXNTdXBwb3J0ZWQpcmV0dXJuIEt0O2lmKFNvfHxyYyhMZSksQ2UucmVtb3ZlZD1bXSx0eXBlb2YgS3Q9PSJzdHJpbmciJiYoZGU9ITEpLGRlKXtpZihLdC5ub2RlTmFtZSl7bGV0IGljPUVuKEt0Lm5vZGVOYW1lKTtpZighcHRbaWNdfHxsbltpY10pdGhyb3cgVCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEt0IGluc3RhbmNlb2YgZmUpZnQ9RUYoIjwhLS0tLT4iKSx6dD1mdC5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoS3QsITApLHp0Lm5vZGVUeXBlPT09Y2UuZWxlbWVudCYmenQubm9kZU5hbWU9PT0iQk9EWSJ8fHp0Lm5vZGVOYW1lPT09IkhUTUwiP2Z0PXp0OmZ0LmFwcGVuZENoaWxkKHp0KTtlbHNle2lmKCFCbiYmIW1pJiYhUG4mJkt0LmluZGV4T2YoIjwiKT09PS0xKXJldHVybiBIZSYmQXQ/SGUuY3JlYXRlSFRNTChLdCk6S3Q7aWYoZnQ9RUYoS3QpLCFmdClyZXR1cm4gQm4/bnVsbDpBdD9PZToiIn1mdCYmZ2wmJm5jKGZ0LmZpcnN0Q2hpbGQpO2xldCBoYT1TRihkZT9LdDpmdCk7Zm9yKDtTbj1oYS5uZXh0Tm9kZSgpOylfRihTbil8fChTbi5jb250ZW50IGluc3RhbmNlb2YgeWUmJm54ZShTbi5jb250ZW50KSxORihTbikpO2lmKGRlKXJldHVybiBLdDtpZihCbil7aWYoa2kpZm9yKERhPWt0LmNhbGwoZnQub3duZXJEb2N1bWVudCk7ZnQuZmlyc3RDaGlsZDspRGEuYXBwZW5kQ2hpbGQoZnQuZmlyc3RDaGlsZCk7ZWxzZSBEYT1mdDtyZXR1cm4oVHIuc2hhZG93cm9vdHx8VHIuc2hhZG93cm9vdG1vZGUpJiYoRGE9cnQuY2FsbChJZSxEYSwhMCkpLERhfWxldCB4cz1Qbj9mdC5vdXRlckhUTUw6ZnQuaW5uZXJIVE1MO3JldHVybiBQbiYmcHRbIiFkb2N0eXBlIl0mJmZ0Lm93bmVyRG9jdW1lbnQmJmZ0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmZnQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJl8oUSxmdC5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJih4cz0iPCFET0NUWVBFICIrZnQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCt4cyksbWkmJmYoW1VlLHR0LGh0XSxpYz0+e3hzPXYoeHMsaWMsIiAiKX0pLEhlJiZBdD9IZS5jcmVhdGVIVE1MKHhzKTp4c30sQ2Uuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7bGV0IEt0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTtyYyhLdCksU289ITB9LENlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7T2k9bnVsbCxTbz0hMX0sQ2UuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihLdCxMZSxmdCl7T2l8fHJjKHt9KTtsZXQgenQ9RW4oS3QpLFNuPUVuKExlKTtyZXR1cm4gTEYoenQsU24sZnQpfSxDZS5hZGRIb29rPWZ1bmN0aW9uKEt0LExlKXt0eXBlb2YgTGU9PSJmdW5jdGlvbiImJih5dFtLdF09eXRbS3RdfHxbXSxwKHl0W0t0XSxMZSkpfSxDZS5yZW1vdmVIb29rPWZ1bmN0aW9uKEt0KXtpZih5dFtLdF0pcmV0dXJuIGQoeXRbS3RdKX0sQ2UucmVtb3ZlSG9va3M9ZnVuY3Rpb24oS3Qpe3l0W0t0XSYmKHl0W0t0XT1bXSl9LENlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7eXQ9e319LENlfW8oc2UsImNyZWF0ZURPTVB1cmlmeSIpO3ZhciBrZT1zZSgpO3JldHVybiBrZX0pfSk7dmFyIF8kPXt9O3ZyKF8kLHtkZWZhdWx0OigpPT5ZNGV9KTtmdW5jdGlvbiBhYmUodCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGliZSxlPT5uYmVbZV0pfWZ1bmN0aW9uIGNiZSh0KXtpZih0LmRlZmF1bHQpcmV0dXJuIHQuZGVmYXVsdDt2YXIgZT10LnR5cGUscj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZTtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIHIuZW51bVswXTtzd2l0Y2gocil7Y2FzZSJib29sZWFuIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6cmV0dXJuIiI7Y2FzZSJudW1iZXIiOnJldHVybiAwO2Nhc2Uib2JqZWN0IjpyZXR1cm57fX19ZnVuY3Rpb24gZ2JlKHQpe2Zvcih2YXIgZT0wO2U8d0MubGVuZ3RoO2UrKylmb3IodmFyIHI9d0NbZV0sbj0wO248ci5ibG9ja3MubGVuZ3RoO24rKyl7dmFyIGk9ci5ibG9ja3Nbbl07aWYodD49aVswXSYmdDw9aVsxXSlyZXR1cm4gci5uYW1lfXJldHVybiBudWxsfWZ1bmN0aW9uIElHKHQpe2Zvcih2YXIgZT0wO2U8YjQubGVuZ3RoO2UrPTIpaWYodD49YjRbZV0mJnQ8PWI0W2UrMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQWJlKHQsZSl7bGNbdF09ZX1mdW5jdGlvbiBJQyh0LGUscil7aWYoIWxjW2VdKXRocm93IG5ldyBFcnJvcigiRm9udCBtZXRyaWNzIG5vdCBmb3VuZCBmb3IgZm9udDogIitlKyIuIik7dmFyIG49dC5jaGFyQ29kZUF0KDApLGk9bGNbZV1bbl07aWYoIWkmJnRbMF1pbiBuRyYmKG49bkdbdFswXV0uY2hhckNvZGVBdCgwKSxpPWxjW2VdW25dKSwhaSYmcj09PSJ0ZXh0IiYmSUcobikmJihpPWxjW2VdWzc3XSksaSlyZXR1cm57ZGVwdGg6aVswXSxoZWlnaHQ6aVsxXSxpdGFsaWM6aVsyXSxza2V3OmlbM10sd2lkdGg6aVs0XX19ZnVuY3Rpb24gX2JlKHQpe3ZhciBlO2lmKHQ+PTU/ZT0wOnQ+PTM/ZT0xOmU9MiwhY0NbZV0pe3ZhciByPWNDW2VdPXtjc3NFbVBlck11Omw0LnF1YWRbZV0vMTh9O2Zvcih2YXIgbiBpbiBsNClsNC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09bDRbbl1bZV0pfXJldHVybiBjQ1tlXX1mdW5jdGlvbiBzRyh0KXtpZih0IGluc3RhbmNlb2YgRXMpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgIitTdHJpbmcodCkrIi4iKX1mdW5jdGlvbiBSYmUodCl7aWYodCBpbnN0YW5jZW9mIG5kKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCAiK1N0cmluZyh0KSsiLiIpfWZ1bmN0aW9uICQodCxlLHIsbixpLGEpe0NuW3RdW2ldPXtmb250OmUsZ3JvdXA6cixyZXBsYWNlOm59LGEmJm4mJihDblt0XVtuXT1Dblt0XVtpXSl9ZnVuY3Rpb24gU3QodCl7Zm9yKHZhcnt0eXBlOmUsbmFtZXM6cixwcm9wczpuLGhhbmRsZXI6aSxodG1sQnVpbGRlcjphLG1hdGhtbEJ1aWxkZXI6c309dCxsPXt0eXBlOmUsbnVtQXJnczpuLm51bUFyZ3MsYXJnVHlwZXM6bi5hcmdUeXBlcyxhbGxvd2VkSW5Bcmd1bWVudDohIW4uYWxsb3dlZEluQXJndW1lbnQsYWxsb3dlZEluVGV4dDohIW4uYWxsb3dlZEluVGV4dCxhbGxvd2VkSW5NYXRoOm4uYWxsb3dlZEluTWF0aD09PXZvaWQgMD8hMDpuLmFsbG93ZWRJbk1hdGgsbnVtT3B0aW9uYWxBcmdzOm4ubnVtT3B0aW9uYWxBcmdzfHwwLGluZml4OiEhbi5pbmZpeCxwcmltaXRpdmU6ISFuLnByaW1pdGl2ZSxoYW5kbGVyOml9LHU9MDt1PHIubGVuZ3RoOysrdSlIR1tyW3VdXT1sO2UmJihhJiYoRTRbZV09YSkscyYmKFM0W2VdPXMpKX1mdW5jdGlvbiBpZCh0KXt2YXJ7dHlwZTplLGh0bWxCdWlsZGVyOnIsbWF0aG1sQnVpbGRlcjpufT10O1N0KHt0eXBlOmUsbmFtZXM6W10scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcigpe3Rocm93IG5ldyBFcnJvcigiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4iKX0saHRtbEJ1aWxkZXI6cixtYXRobWxCdWlsZGVyOm59KX1mdW5jdGlvbiBtNCh0LGUpe3ZhciByPXB1KFsiYmFzZSJdLHQsZSksbj1wdShbInN0cnV0Il0pO3JldHVybiBuLnN0eWxlLmhlaWdodD1ndChyLmhlaWdodCtyLmRlcHRoKSxyLmRlcHRoJiYobi5zdHlsZS52ZXJ0aWNhbEFsaWduPWd0KC1yLmRlcHRoKSksci5jaGlsZHJlbi51bnNoaWZ0KG4pLHJ9ZnVuY3Rpb24gQ0ModCxlKXt2YXIgcj1udWxsO3QubGVuZ3RoPT09MSYmdFswXS50eXBlPT09InRhZyImJihyPXRbMF0udGFnLHQ9dFswXS5ib2R5KTt2YXIgbj1GaSh0LGUsInJvb3QiKSxpO24ubGVuZ3RoPT09MiYmblsxXS5oYXNDbGFzcygidGFnIikmJihpPW4ucG9wKCkpO2Zvcih2YXIgYT1bXSxzPVtdLGw9MDtsPG4ubGVuZ3RoO2wrKylpZihzLnB1c2gobltsXSksbltsXS5oYXNDbGFzcygibWJpbiIpfHxuW2xdLmhhc0NsYXNzKCJtcmVsIil8fG5bbF0uaGFzQ2xhc3MoImFsbG93YnJlYWsiKSl7Zm9yKHZhciB1PSExO2w8bi5sZW5ndGgtMSYmbltsKzFdLmhhc0NsYXNzKCJtc3BhY2UiKSYmIW5bbCsxXS5oYXNDbGFzcygibmV3bGluZSIpOylsKysscy5wdXNoKG5bbF0pLG5bbF0uaGFzQ2xhc3MoIm5vYnJlYWsiKSYmKHU9ITApO3V8fChhLnB1c2gobTQocyxlKSkscz1bXSl9ZWxzZSBuW2xdLmhhc0NsYXNzKCJuZXdsaW5lIikmJihzLnBvcCgpLHMubGVuZ3RoPjAmJihhLnB1c2gobTQocyxlKSkscz1bXSksYS5wdXNoKG5bbF0pKTtzLmxlbmd0aD4wJiZhLnB1c2gobTQocyxlKSk7dmFyIGg7cj8oaD1tNChGaShyLGUsITApKSxoLmNsYXNzZXM9WyJ0YWciXSxhLnB1c2goaCkpOmkmJmEucHVzaChpKTt2YXIgZj1wdShbImthdGV4LWh0bWwiXSxhKTtpZihmLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaCl7dmFyIGQ9aC5jaGlsZHJlblswXTtkLnN0eWxlLmhlaWdodD1ndChmLmhlaWdodCtmLmRlcHRoKSxmLmRlcHRoJiYoZC5zdHlsZS52ZXJ0aWNhbEFsaWduPWd0KC1mLmRlcHRoKSl9cmV0dXJuIGZ9ZnVuY3Rpb24gWUcodCl7cmV0dXJuIG5ldyByZCh0KX1mdW5jdGlvbiBoRyh0LGUscixuLGkpe3ZhciBhPVNzKHQsciksczthLmxlbmd0aD09PTEmJmFbMF1pbnN0YW5jZW9mIGtzJiZKdC5jb250YWlucyhbIm1yb3ciLCJtdGFibGUiXSxhWzBdLnR5cGUpP3M9YVswXTpzPW5ldyBhdC5NYXRoTm9kZSgibXJvdyIsYSk7dmFyIGw9bmV3IGF0Lk1hdGhOb2RlKCJhbm5vdGF0aW9uIixbbmV3IGF0LlRleHROb2RlKGUpXSk7bC5zZXRBdHRyaWJ1dGUoImVuY29kaW5nIiwiYXBwbGljYXRpb24veC10ZXgiKTt2YXIgdT1uZXcgYXQuTWF0aE5vZGUoInNlbWFudGljcyIsW3MsbF0pLGg9bmV3IGF0Lk1hdGhOb2RlKCJtYXRoIixbdV0pO2guc2V0QXR0cmlidXRlKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiKSxuJiZoLnNldEF0dHJpYnV0ZSgiZGlzcGxheSIsImJsb2NrIik7dmFyIGY9aT8ia2F0ZXgiOiJrYXRleC1tYXRobWwiO3JldHVybiBGZS5tYWtlU3BhbihbZl0sW2hdKX1mdW5jdGlvbiBncih0LGUpe2lmKCF0fHx0LnR5cGUhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlICIrZSsiLCBidXQgZ290ICIrKHQ/Im5vZGUgb2YgdHlwZSAiK3QudHlwZTpTdHJpbmcodCkpKTtyZXR1cm4gdH1mdW5jdGlvbiBGQyh0KXt2YXIgZT1ONCh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgIisodD8ibm9kZSBvZiB0eXBlICIrdC50eXBlOlN0cmluZyh0KSkpO3JldHVybiBlfWZ1bmN0aW9uIE40KHQpe3JldHVybiB0JiYodC50eXBlPT09ImF0b20ifHxJYmUuaGFzT3duUHJvcGVydHkodC50eXBlKSk/dDpudWxsfWZ1bmN0aW9uIEtHKHQsZSl7dmFyIHI9RmkodC5ib2R5LGUsITApO3JldHVybiB1NGUoW3QubWNsYXNzXSxyLGUpfWZ1bmN0aW9uIFFHKHQsZSl7dmFyIHIsbj1Tcyh0LmJvZHksZSk7cmV0dXJuIHQubWNsYXNzPT09Im1pbm5lciI/cj1uZXcgYXQuTWF0aE5vZGUoIm1wYWRkZWQiLG4pOnQubWNsYXNzPT09Im1vcmQiP3QuaXNDaGFyYWN0ZXJCb3g/KHI9blswXSxyLnR5cGU9Im1pIik6cj1uZXcgYXQuTWF0aE5vZGUoIm1pIixuKToodC5pc0NoYXJhY3RlckJveD8ocj1uWzBdLHIudHlwZT0ibW8iKTpyPW5ldyBhdC5NYXRoTm9kZSgibW8iLG4pLHQubWNsYXNzPT09Im1iaW4iPyhyLmF0dHJpYnV0ZXMubHNwYWNlPSIwLjIyZW0iLHIuYXR0cmlidXRlcy5yc3BhY2U9IjAuMjJlbSIpOnQubWNsYXNzPT09Im1wdW5jdCI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4xN2VtIik6dC5tY2xhc3M9PT0ibW9wZW4ifHx0Lm1jbGFzcz09PSJtY2xvc2UiPyhyLmF0dHJpYnV0ZXMubHNwYWNlPSIwZW0iLHIuYXR0cmlidXRlcy5yc3BhY2U9IjBlbSIpOnQubWNsYXNzPT09Im1pbm5lciImJihyLmF0dHJpYnV0ZXMubHNwYWNlPSIwLjA1NTZlbSIsci5hdHRyaWJ1dGVzLndpZHRoPSIrMC4xMTExZW0iKSkscn1mdW5jdGlvbiBkNGUodCxlLHIpe3ZhciBuPWg0ZVt0XTtzd2l0Y2gobil7Y2FzZSJcXFxcY2RyaWdodGFycm93IjpjYXNlIlxcXFxjZGxlZnRhcnJvdyI6cmV0dXJuIHIuY2FsbEZ1bmN0aW9uKG4sW2VbMF1dLFtlWzFdXSk7Y2FzZSJcXHVwYXJyb3ciOmNhc2UiXFxkb3duYXJyb3ciOnt2YXIgaT1yLmNhbGxGdW5jdGlvbigiXFxcXGNkbGVmdCIsW2VbMF1dLFtdKSxhPXt0eXBlOiJhdG9tIix0ZXh0Om4sbW9kZToibWF0aCIsZmFtaWx5OiJyZWwifSxzPXIuY2FsbEZ1bmN0aW9uKCJcXEJpZyIsW2FdLFtdKSxsPXIuY2FsbEZ1bmN0aW9uKCJcXFxcY2RyaWdodCIsW2VbMV1dLFtdKSx1PXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbaSxzLGxdfTtyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcXFxjZHBhcmVudCIsW3VdLFtdKX1jYXNlIlxcXFxjZGxvbmdlcXVhbCI6cmV0dXJuIHIuY2FsbEZ1bmN0aW9uKCJcXFxcY2Rsb25nZXF1YWwiLFtdLFtdKTtjYXNlIlxcVmVydCI6e3ZhciBoPXt0eXBlOiJ0ZXh0b3JkIix0ZXh0OiJcXFZlcnQiLG1vZGU6Im1hdGgifTtyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcQmlnIixbaF0sW10pfWRlZmF1bHQ6cmV0dXJue3R5cGU6InRleHRvcmQiLHRleHQ6IiAiLG1vZGU6Im1hdGgifX19ZnVuY3Rpb24gcDRlKHQpe3ZhciBlPVtdO2Zvcih0Lmd1bGxldC5iZWdpbkdyb3VwKCksdC5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksdC5ndWxsZXQuYmVnaW5Hcm91cCgpOzspe2UucHVzaCh0LnBhcnNlRXhwcmVzc2lvbighMSwiXFxcXCIpKSx0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgcj10LmZldGNoKCkudGV4dDtpZihyPT09IiYifHxyPT09IlxcXFwiKXQuY29uc3VtZSgpO2Vsc2UgaWYocj09PSJcXGVuZCIpe2VbZS5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmZS5wb3AoKTticmVha31lbHNlIHRocm93IG5ldyBsdCgiRXhwZWN0ZWQgXFxcXCBvciBcXGNyIG9yIFxcZW5kIix0Lm5leHRUb2tlbil9Zm9yKHZhciBuPVtdLGk9W25dLGE9MDthPGUubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPWVbYV0sbD1mRygpLHU9MDt1PHMubGVuZ3RoO3UrKylpZighZEcoc1t1XSkpbC5ib2R5LnB1c2goc1t1XSk7ZWxzZXtuLnB1c2gobCksdSs9MTt2YXIgaD1GQyhzW3VdKS50ZXh0LGY9bmV3IEFycmF5KDIpO2lmKGZbMF09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSxmWzFdPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbXX0sISgiPXwuIi5pbmRleE9mKGgpPi0xKSlpZigiPD5BViIuaW5kZXhPZihoKT4tMSlmb3IodmFyIGQ9MDtkPDI7ZCsrKXtmb3IodmFyIHA9ITAsbT11KzE7bTxzLmxlbmd0aDttKyspe2lmKGY0ZShzW21dLGgpKXtwPSExLHU9bTticmVha31pZihkRyhzW21dKSl0aHJvdyBuZXcgbHQoIk1pc3NpbmcgYSAiK2grIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy4iLHNbbV0pO2ZbZF0uYm9keS5wdXNoKHNbbV0pfWlmKHApdGhyb3cgbmV3IGx0KCJNaXNzaW5nIGEgIitoKyIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuIixzW3VdKX1lbHNlIHRocm93IG5ldyBsdCgnRXhwZWN0ZWQgb25lIG9mICI8PkFWPXwuIiBhZnRlciBAJyxzW3VdKTt2YXIgZz1kNGUoaCxmLHQpLHk9e3R5cGU6InN0eWxpbmciLGJvZHk6W2ddLG1vZGU6Im1hdGgiLHN0eWxlOiJkaXNwbGF5In07bi5wdXNoKHkpLGw9ZkcoKX1hJTI9PT0wP24ucHVzaChsKTpuLnNoaWZ0KCksbj1bXSxpLnB1c2gobil9dC5ndWxsZXQuZW5kR3JvdXAoKSx0Lmd1bGxldC5lbmRHcm91cCgpO3ZhciB2PW5ldyBBcnJheShpWzBdLmxlbmd0aCkuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOiJjIixwcmVnYXA6LjI1LHBvc3RnYXA6LjI1fSk7cmV0dXJue3R5cGU6ImFycmF5Iixtb2RlOiJtYXRoIixib2R5OmksYXJyYXlzdHJldGNoOjEsYWRkSm90OiEwLHJvd0dhcHM6W251bGxdLGNvbHM6dixjb2xTZXBhcmF0aW9uVHlwZToiQ0QiLGhMaW5lc0JlZm9yZVJvdzpuZXcgQXJyYXkoaS5sZW5ndGgrMSkuZmlsbChbXSl9fWZ1bmN0aW9uIE00KHQsZSl7dmFyIHI9TjQodCk7aWYociYmSnQuY29udGFpbnMoQTRlLHIudGV4dCkpcmV0dXJuIHI7dGhyb3cgcj9uZXcgbHQoIkludmFsaWQgZGVsaW1pdGVyICciK3IudGV4dCsiJyBhZnRlciAnIitlLmZ1bmNOYW1lKyInIix0KTpuZXcgbHQoIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJyIrdC50eXBlKyInIix0KX1mdW5jdGlvbiBtRyh0KXtpZighdC5ib2R5KXRocm93IG5ldyBFcnJvcigiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLiIpfWZ1bmN0aW9uIHVjKHQpe2Zvcih2YXJ7dHlwZTplLG5hbWVzOnIscHJvcHM6bixoYW5kbGVyOmksaHRtbEJ1aWxkZXI6YSxtYXRobWxCdWlsZGVyOnN9PXQsbD17dHlwZTplLG51bUFyZ3M6bi5udW1BcmdzfHwwLGFsbG93ZWRJblRleHQ6ITEsbnVtT3B0aW9uYWxBcmdzOjAsaGFuZGxlcjppfSx1PTA7dTxyLmxlbmd0aDsrK3UpdSRbclt1XV09bDthJiYoRTRbZV09YSkscyYmKFM0W2VdPXMpfWZ1bmN0aW9uIGxlKHQsZSl7aCRbdF09ZX1mdW5jdGlvbiBnRyh0KXt2YXIgZT1bXTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZldGNoKCkudGV4dDtmb3Iocj09PSJcXHJlbGF4IiYmKHQuY29uc3VtZSgpLHQuY29uc3VtZVNwYWNlcygpLHI9dC5mZXRjaCgpLnRleHQpO3I9PT0iXFxobGluZSJ8fHI9PT0iXFxoZGFzaGxpbmUiOyl0LmNvbnN1bWUoKSxlLnB1c2gocj09PSJcXGhkYXNobGluZSIpLHQuY29uc3VtZVNwYWNlcygpLHI9dC5mZXRjaCgpLnRleHQ7cmV0dXJuIGV9ZnVuY3Rpb24gVUModCl7aWYodC5pbmRleE9mKCJlZCIpPT09LTEpcmV0dXJuIHQuaW5kZXhPZigiKiIpPT09LTF9ZnVuY3Rpb24geGgodCxlLHIpe3Zhcntoc2tpcEJlZm9yZUFuZEFmdGVyOm4sYWRkSm90OmksY29sczphLGFycmF5c3RyZXRjaDpzLGNvbFNlcGFyYXRpb25UeXBlOmwsYXV0b1RhZzp1LHNpbmdsZVJvdzpoLGVtcHR5U2luZ2xlUm93OmYsbWF4TnVtQ29sczpkLGxlcW5vOnB9PWU7aWYodC5ndWxsZXQuYmVnaW5Hcm91cCgpLGh8fHQuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3IiLCJcXFxcXFxyZWxheCIpLCFzKXt2YXIgbT10Lmd1bGxldC5leHBhbmRNYWNyb0FzVGV4dCgiXFxhcnJheXN0cmV0Y2giKTtpZihtPT1udWxsKXM9MTtlbHNlIGlmKHM9cGFyc2VGbG9hdChtKSwhc3x8czwwKXRocm93IG5ldyBsdCgiSW52YWxpZCBcXGFycmF5c3RyZXRjaDogIittKX10Lmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGc9W10seT1bZ10sdj1bXSx4PVtdLGI9dSE9bnVsbD9bXTp2b2lkIDA7ZnVuY3Rpb24gdygpe3UmJnQuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcQGVxbnN3IiwiMSIsITApfW8odywiYmVnaW5Sb3ciKTtmdW5jdGlvbiBfKCl7YiYmKHQuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIik/KGIucHVzaCh0LnN1YnBhcnNlKFtuZXcgUm8oIlxcZGZAdGFnIildKSksdC5ndWxsZXQubWFjcm9zLnNldCgiXFxkZkB0YWciLHZvaWQgMCwhMCkpOmIucHVzaCghIXUmJnQuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcQGVxbnN3Iik9PT0iMSIpKX1mb3IobyhfLCJlbmRSb3ciKSx3KCkseC5wdXNoKGdHKHQpKTs7KXt2YXIgVD10LnBhcnNlRXhwcmVzc2lvbighMSxoPyJcXGVuZCI6IlxcXFwiKTt0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmJlZ2luR3JvdXAoKSxUPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0Lm1vZGUsYm9keTpUfSxyJiYoVD17dHlwZToic3R5bGluZyIsbW9kZTp0Lm1vZGUsc3R5bGU6cixib2R5OltUXX0pLGcucHVzaChUKTt2YXIgRT10LmZldGNoKCkudGV4dDtpZihFPT09IiYiKXtpZihkJiZnLmxlbmd0aD09PWQpe2lmKGh8fGwpdGhyb3cgbmV3IGx0KCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJiIsdC5uZXh0VG9rZW4pO3Quc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ0ZXh0RW52IiwiVG9vIGZldyBjb2x1bW5zIHNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuIil9dC5jb25zdW1lKCl9ZWxzZSBpZihFPT09IlxcZW5kIil7XygpLGcubGVuZ3RoPT09MSYmVC50eXBlPT09InN0eWxpbmciJiZULmJvZHlbMF0uYm9keS5sZW5ndGg9PT0wJiYoeS5sZW5ndGg+MXx8IWYpJiZ5LnBvcCgpLHgubGVuZ3RoPHkubGVuZ3RoKzEmJngucHVzaChbXSk7YnJlYWt9ZWxzZSBpZihFPT09IlxcXFwiKXt0LmNvbnN1bWUoKTt2YXIgTD12b2lkIDA7dC5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSIgIiYmKEw9dC5wYXJzZVNpemVHcm91cCghMCkpLHYucHVzaChMP0wudmFsdWU6bnVsbCksXygpLHgucHVzaChnRyh0KSksZz1bXSx5LnB1c2goZyksdygpfWVsc2UgdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCAmIG9yIFxcXFwgb3IgXFxjciBvciBcXGVuZCIsdC5uZXh0VG9rZW4pfXJldHVybiB0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmVuZEdyb3VwKCkse3R5cGU6ImFycmF5Iixtb2RlOnQubW9kZSxhZGRKb3Q6aSxhcnJheXN0cmV0Y2g6cyxib2R5OnksY29sczphLHJvd0dhcHM6dixoc2tpcEJlZm9yZUFuZEFmdGVyOm4saExpbmVzQmVmb3JlUm93OngsY29sU2VwYXJhdGlvblR5cGU6bCx0YWdzOmIsbGVxbm86cH19ZnVuY3Rpb24gSEModCl7cmV0dXJuIHQuc2xpY2UoMCwxKT09PSJkIj8iZGlzcGxheSI6InRleHQifWZ1bmN0aW9uIGIkKHQsZSxyKXtmb3IodmFyIG49RmkodCxlLCExKSxpPWUuc2l6ZU11bHRpcGxpZXIvci5zaXplTXVsdGlwbGllcixhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0uY2xhc3Nlcy5pbmRleE9mKCJzaXppbmciKTtzPDA/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoblthXS5jbGFzc2VzLGUuc2l6aW5nQ2xhc3NlcyhyKSk6blthXS5jbGFzc2VzW3MrMV09PT0icmVzZXQtc2l6ZSIrZS5zaXplJiYoblthXS5jbGFzc2VzW3MrMV09InJlc2V0LXNpemUiK3Iuc2l6ZSksblthXS5oZWlnaHQqPWksblthXS5kZXB0aCo9aX1yZXR1cm4gRmUubWFrZUZyYWdtZW50KG4pfXZhciBKcyxSbyxsdCxKeGUsZWJlLHRiZSxyYmUsbmJlLGliZSxNRyxzYmUsb2JlLGxiZSxKdCx4NCxkeSxzYyxNQyx3NCxrcCxmdSxweSxObyxFcCxKYSxvYyx1YmUsaGJlLGZiZSxkYmUscGJlLG1iZSxycix3QyxiNCxUcCx5YmUsdmJlLHhiZSxiYmUsd2JlLFRiZSxrYmUsRWJlLFNiZSxyRyxDYmUscmQsbGMsbDQsbkcsY0MsTGJlLGlHLGFHLFQ0LFRDLERiZSxPRyxKbixndCx5aCxQRyxCRyxGRyxuZCxteSxrQyxOYmUsRXMsdmwsY2MsZ3ksTWJlLEliZSxDbixWLGl0LHJlLGJlLFVuLEx0LGVzLFNwLHRyLENpLGVvLEw0LHdlLGd1LF9lLHpHLG9HLHVDLGM0LGxHLGhDLHU0LGs0LGN5LGg0LHNyLFFuLE5hLHV1LG1oLEVDLHV5LGY0LGQ0LGNHLE9iZSxENCx5bCxQYmUsQmJlLEZiZSx6YmUsR2JlLE9DLFRzLEdHLCRiZSxWYmUsJEcsVWJlLEhiZSxXYmUsWWJlLHA0LFZHLFVHLHFiZSxGZSxabixlZCxodSxYYmUsamJlLEhHLEU0LFM0LEM0LGdpLHB1LEtiZSxRYmUsWmJlLEpiZSxGaSx1RyxXRyxlNGUsU0MseXksUHIsa3MsdGQsQUMsYXQsTW8sUEMsQkMsU3MsdmgseW4scUcsWEcsdDRlLHI0ZSxuNGUsaTRlLGE0ZSxzNGUsbzRlLGw0ZSxtdSx6QyxqRyxjNGUsZzQsdTRlLFI0LGg0ZSxmRyxkRyxmNGUsWkcsSkcsX0MsZSQsbTRlLHQkLGh5LEdDLHIkLGc0ZSx5NGUsbiQsZkMsZEMsTEMseTQsdjRlLHg0ZSxpJCxwQyxtQyxnQyxiNGUsYSQsdzRlLHMkLGZ5LFQ0ZSxrNGUsRTRlLG8kLFM0ZSxsJCxjJCxDNGUsZHUscEcsQTRlLCRDLFZDLHUkLGgkLEk0LGhjLF80ZSxmYyxmJCx5RyxkJCxwJCx2RyxtJCxXQyxZQyx4RyxiRyxnJCxMNGUseUMsd0cseSQsdiQsQ3AsdnksRDRlLE40ZSx4JCxSNGUsVEcsTTRlLGtHLEk0ZSx3JCx2Qyx4QyxFRyxTRyxDRyxPNGUsQUcsX0csZ2gsVCQsUDRlLEI0ZSxGNGUsejRlLERDLEc0ZSwkNGUsQTQsTkMsVjRlLExHLHFDLERHLFhDLGskLEUkLFMkLFJDLE5HLHY0LGJDLFJHLF80LGpDLEMkLFU0ZSxINGUsQSQsS0MsVzRlLFk0ZSxMJD1NKCgpPT57InVzZSBzdHJpY3QiO0pzPWNsYXNzIHR7c3RhdGlje28odGhpcywiU291cmNlTG9jYXRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5lbmQ9bn1zdGF0aWMgcmFuZ2UoZSxyKXtyZXR1cm4gcj8hZXx8IWUubG9jfHwhci5sb2N8fGUubG9jLmxleGVyIT09ci5sb2MubGV4ZXI/bnVsbDpuZXcgdChlLmxvYy5sZXhlcixlLmxvYy5zdGFydCxyLmxvYy5lbmQpOmUmJmUubG9jfX0sUm89Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUb2tlbiIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmxvYz12b2lkIDAsdGhpcy5ub2V4cGFuZD12b2lkIDAsdGhpcy50cmVhdEFzUmVsYXg9dm9pZCAwLHRoaXMudGV4dD1lLHRoaXMubG9jPXJ9cmFuZ2UoZSxyKXtyZXR1cm4gbmV3IHQocixKcy5yYW5nZSh0aGlzLGUpKX19LGx0PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5uYW1lPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLmxlbmd0aD12b2lkIDAsdGhpcy5yYXdNZXNzYWdlPXZvaWQgMDt2YXIgbj0iS2FUZVggcGFyc2UgZXJyb3I6ICIrZSxpLGEscz1yJiZyLmxvYztpZihzJiZzLnN0YXJ0PD1zLmVuZCl7dmFyIGw9cy5sZXhlci5pbnB1dDtpPXMuc3RhcnQsYT1zLmVuZCxpPT09bC5sZW5ndGg/bis9IiBhdCBlbmQgb2YgaW5wdXQ6ICI6bis9IiBhdCBwb3NpdGlvbiAiKyhpKzEpKyI6ICI7dmFyIHU9bC5zbGljZShpLGEpLnJlcGxhY2UoL1teXS9nLCIkJlx1MDMzMiIpLGg7aT4xNT9oPSJcdTIwMjYiK2wuc2xpY2UoaS0xNSxpKTpoPWwuc2xpY2UoMCxpKTt2YXIgZjthKzE1PGwubGVuZ3RoP2Y9bC5zbGljZShhLGErMTUpKyJcdTIwMjYiOmY9bC5zbGljZShhKSxuKz1oK3UrZn12YXIgZD1uZXcgRXJyb3Iobik7cmV0dXJuIGQubmFtZT0iUGFyc2VFcnJvciIsZC5fX3Byb3RvX189dC5wcm90b3R5cGUsZC5wb3NpdGlvbj1pLGkhPW51bGwmJmEhPW51bGwmJihkLmxlbmd0aD1hLWkpLGQucmF3TWVzc2FnZT1lLGR9fTtsdC5wcm90b3R5cGUuX19wcm90b19fPUVycm9yLnByb3RvdHlwZTtKeGU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmluZGV4T2YocikhPT0tMX0sImNvbnRhaW5zIiksZWJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXZvaWQgMD9yOmV9LCJkZWZsdCIpLHRiZT0vKFtBLVpdKS9nLHJiZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodGJlLCItJDEiKS50b0xvd2VyQ2FzZSgpfSwiaHlwaGVuYXRlIiksbmJlPXsiJiI6IiZhbXA7IiwiPiI6IiZndDsiLCI8IjoiJmx0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7In0saWJlPS9bJj48IiddL2c7byhhYmUsImVzY2FwZSIpO01HPW8oZnVuY3Rpb24gdChlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwInx8ZS50eXBlPT09ImNvbG9yIj9lLmJvZHkubGVuZ3RoPT09MT90KGUuYm9keVswXSk6ZTplLnR5cGU9PT0iZm9udCI/dChlLmJvZHkpOmV9LCJnZXRCYXNlRWxlbSIpLHNiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPU1HKGUpO3JldHVybiByLnR5cGU9PT0ibWF0aG9yZCJ8fHIudHlwZT09PSJ0ZXh0b3JkInx8ci50eXBlPT09ImF0b20ifSwiaXNDaGFyYWN0ZXJCb3giKSxvYmU9byhmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICIrU3RyaW5nKGUpKTtyZXR1cm4gZX0sImFzc2VydCIpLGxiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPS9eW1x4MDAtXHgyMF0qKFteXFwvIz9dKj8pKDp8JiMwKjU4fCYjeDAqM2F8JmNvbG9uKS9pLmV4ZWMoZSk7cmV0dXJuIHI/clsyXSE9PSI6Inx8IS9eW2EtekEtWl1bYS16QS1aMC05K1wtLl0qJC8udGVzdChyWzFdKT9udWxsOnJbMV0udG9Mb3dlckNhc2UoKToiX3JlbGF0aXZlIn0sInByb3RvY29sRnJvbVVybCIpLEp0PXtjb250YWluczpKeGUsZGVmbHQ6ZWJlLGVzY2FwZTphYmUsaHlwaGVuYXRlOnJiZSxnZXRCYXNlRWxlbTpNRyxpc0NoYXJhY3RlckJveDpzYmUscHJvdG9jb2xGcm9tVXJsOmxiZX0seDQ9e2Rpc3BsYXlNb2RlOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIGRpc3BsYXkgc3R5bGUgKHNvIFxcaW50IGFuZCBcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIGNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLiIsY2xpOiItZCwgLS1kaXNwbGF5LW1vZGUifSxvdXRwdXQ6e3R5cGU6e2VudW06WyJodG1sQW5kTWF0aG1sIiwiaHRtbCIsIm1hdGhtbCJdfSxkZXNjcmlwdGlvbjoiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuIixjbGk6Ii1GLCAtLWZvcm1hdCA8dHlwZT4ifSxsZXFubzp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246IlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLiJ9LGZsZXFuOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LiJ9LHRocm93T25FcnJvcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxjbGk6Ii10LCAtLW5vLXRocm93LW9uLWVycm9yIixjbGlEZXNjcmlwdGlvbjoiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBQYXJzZUVycm9yIGV4Y2VwdGlvbiB3aGVuIGVuY291bnRlcmluZyBhbiBlcnJvci4ifSxlcnJvckNvbG9yOnt0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiNjYzAwMDAiLGNsaToiLWMsIC0tZXJyb3ItY29sb3IgPGNvbG9yPiIsY2xpRGVzY3JpcHRpb246IkEgY29sb3Igc3RyaW5nIGdpdmVuIGluIHRoZSBmb3JtYXQgJ3JnYicgb3IgJ3JyZ2diYicgKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIC10IG9wdGlvbi4iLGNsaVByb2Nlc3NvcjpvKHQ9PiIjIit0LCJjbGlQcm9jZXNzb3IiKX0sbWFjcm9zOnt0eXBlOiJvYmplY3QiLGNsaToiLW0sIC0tbWFjcm8gPGRlZj4iLGNsaURlc2NyaXB0aW9uOiJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXGZvbzpleHBhbnNpb24nICh1c2UgbXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLiIsY2xpRGVmYXVsdDpbXSxjbGlQcm9jZXNzb3I6bygodCxlKT0+KGUucHVzaCh0KSxlKSwiY2xpUHJvY2Vzc29yIil9LG1pblJ1bGVUaGlja25lc3M6e3R5cGU6Im51bWJlciIsZGVzY3JpcHRpb246IlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcywgYFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXGhsaW5lYCwgYFxcaGRhc2hsaW5lYCwgYFxcdW5kZXJsaW5lYCwgYFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgYFxcZmJveGAsIGBcXGJveGVkYCwgYW5kIGBcXGZjb2xvcmJveGAuIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPiIsY2xpUHJvY2Vzc29yOnBhcnNlRmxvYXR9LGNvbG9ySXNUZXh0Q29sb3I6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJNYWtlcyBcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXHRleHRjb2xvciwgaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXGNvbG9yIG1vZGUgY2hhbmdlLiIsY2xpOiItYiwgLS1jb2xvci1pcy10ZXh0LWNvbG9yIn0sc3RyaWN0Ont0eXBlOlt7ZW51bTpbIndhcm4iLCJpZ25vcmUiLCJlcnJvciJdfSwiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlR1cm4gb24gc3RyaWN0IC8gTGFUZVggZmFpdGhmdWxuZXNzIG1vZGUsIHdoaWNoIHRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLiIsY2xpOiItUywgLS1zdHJpY3QiLGNsaURlZmF1bHQ6ITF9LHRydXN0Ont0eXBlOlsiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXHVybC4iLGNsaToiLVQsIC0tdHJ1c3QifSxtYXhTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS8wLGRlc2NyaXB0aW9uOiJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZSIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItcywgLS1tYXgtc2l6ZSA8bj4iLGNsaVByb2Nlc3NvcjpwYXJzZUludH0sbWF4RXhwYW5kOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MWUzLGRlc2NyaXB0aW9uOiJMaW1pdCB0aGUgbnVtYmVyIG9mIG1hY3JvIGV4cGFuc2lvbnMgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCB0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLiIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItZSwgLS1tYXgtZXhwYW5kIDxuPiIsY2xpUHJvY2Vzc29yOm8odD0+dD09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KHQpLCJjbGlQcm9jZXNzb3IiKX0sZ2xvYmFsR3JvdXA6e3R5cGU6ImJvb2xlYW4iLGNsaTohMX19O28oY2JlLCJnZXREZWZhdWx0VmFsdWUiKTtkeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJTZXR0aW5ncyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGlzcGxheU1vZGU9dm9pZCAwLHRoaXMub3V0cHV0PXZvaWQgMCx0aGlzLmxlcW5vPXZvaWQgMCx0aGlzLmZsZXFuPXZvaWQgMCx0aGlzLnRocm93T25FcnJvcj12b2lkIDAsdGhpcy5lcnJvckNvbG9yPXZvaWQgMCx0aGlzLm1hY3Jvcz12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLmNvbG9ySXNUZXh0Q29sb3I9dm9pZCAwLHRoaXMuc3RyaWN0PXZvaWQgMCx0aGlzLnRydXN0PXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWF4RXhwYW5kPXZvaWQgMCx0aGlzLmdsb2JhbEdyb3VwPXZvaWQgMCxlPWV8fHt9O2Zvcih2YXIgciBpbiB4NClpZih4NC5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG49eDRbcl07dGhpc1tyXT1lW3JdIT09dm9pZCAwP24ucHJvY2Vzc29yP24ucHJvY2Vzc29yKGVbcl0pOmVbcl06Y2JlKG4pfX1yZXBvcnROb25zdHJpY3QoZSxyLG4pe3ZhciBpPXRoaXMuc3RyaWN0O2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoaT1pKGUscixuKSksISghaXx8aT09PSJpZ25vcmUiKSl7aWYoaT09PSEwfHxpPT09ImVycm9yIil0aHJvdyBuZXcgbHQoIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6ICIrKHIrIiBbIitlKyJdIiksbik7aT09PSJ3YXJuIj90eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKTp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gIisoInVucmVjb2duaXplZCAnIitpKyInOiAiK3IrIiBbIitlKyJdIikpfX11c2VTdHJpY3RCZWhhdmlvcihlLHIsbil7dmFyIGk9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdHJ5e2k9aShlLHIsbil9Y2F0Y2h7aT0iZXJyb3IifXJldHVybiFpfHxpPT09Imlnbm9yZSI/ITE6aT09PSEwfHxpPT09ImVycm9yIj8hMDppPT09Indhcm4iPyh0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKSwhMSk6KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK2krIic6ICIrcisiIFsiK2UrIl0iKSksITEpfWlzVHJ1c3RlZChlKXtpZihlLnVybCYmIWUucHJvdG9jb2wpe3ZhciByPUp0LnByb3RvY29sRnJvbVVybChlLnVybCk7aWYocj09bnVsbClyZXR1cm4hMTtlLnByb3RvY29sPXJ9dmFyIG49dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChlKTp0aGlzLnRydXN0O3JldHVybiEhbn19LHNjPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0eWxlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPWUsdGhpcy5zaXplPXIsdGhpcy5jcmFtcGVkPW59c3VwKCl7cmV0dXJuIG9jW3ViZVt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIG9jW2hiZVt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBvY1tmYmVbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gb2NbZGJlW3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBvY1twYmVbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gb2NbbWJlW3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19LE1DPTAsdzQ9MSxrcD0yLGZ1PTMscHk9NCxObz01LEVwPTYsSmE9NyxvYz1bbmV3IHNjKE1DLDAsITEpLG5ldyBzYyh3NCwwLCEwKSxuZXcgc2Moa3AsMSwhMSksbmV3IHNjKGZ1LDEsITApLG5ldyBzYyhweSwyLCExKSxuZXcgc2MoTm8sMiwhMCksbmV3IHNjKEVwLDMsITEpLG5ldyBzYyhKYSwzLCEwKV0sdWJlPVtweSxObyxweSxObyxFcCxKYSxFcCxKYV0saGJlPVtObyxObyxObyxObyxKYSxKYSxKYSxKYV0sZmJlPVtrcCxmdSxweSxObyxFcCxKYSxFcCxKYV0sZGJlPVtmdSxmdSxObyxObyxKYSxKYSxKYSxKYV0scGJlPVt3NCx3NCxmdSxmdSxObyxObyxKYSxKYV0sbWJlPVtNQyx3NCxrcCxmdSxrcCxmdSxrcCxmdV0scnI9e0RJU1BMQVk6b2NbTUNdLFRFWFQ6b2Nba3BdLFNDUklQVDpvY1tweV0sU0NSSVBUU0NSSVBUOm9jW0VwXX0sd0M9W3tuYW1lOiJsYXRpbiIsYmxvY2tzOltbMjU2LDU5MV0sWzc2OCw4NzldXX0se25hbWU6ImN5cmlsbGljIixibG9ja3M6W1sxMDI0LDEyNzldXX0se25hbWU6ImFybWVuaWFuIixibG9ja3M6W1sxMzI4LDE0MjNdXX0se25hbWU6ImJyYWhtaWMiLGJsb2NrczpbWzIzMDQsNDI1NV1dfSx7bmFtZToiZ2VvcmdpYW4iLGJsb2NrczpbWzQyNTYsNDM1MV1dfSx7bmFtZToiY2prIixibG9ja3M6W1sxMjI4OCwxMjU0M10sWzE5OTY4LDQwODc5XSxbNjUyODAsNjUzNzZdXX0se25hbWU6Imhhbmd1bCIsYmxvY2tzOltbNDQwMzIsNTUyMTVdXX1dO28oZ2JlLCJzY3JpcHRGcm9tQ29kZXBvaW50Iik7YjQ9W107d0MuZm9yRWFjaCh0PT50LmJsb2Nrcy5mb3JFYWNoKGU9PmI0LnB1c2goLi4uZSkpKTtvKElHLCJzdXBwb3J0ZWRDb2RlcG9pbnQiKTtUcD04MCx5YmU9byhmdW5jdGlvbihlLHIpe3JldHVybiJNOTUsIisoNjIyK2UrcikrYApjLTIuNywwLC03LjE3LC0yLjcsLTEzLjUsLThjLTUuOCwtNS4zLC05LjUsLTEwLC05LjUsLTE0CmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTQKYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMApzMTczLDM3OCwxNzMsMzc4YzAuNywwLDM1LjMsLTcxLDEwNCwtMjEzYzY4LjcsLTE0MiwxMzcuNSwtMjg1LDIwNi41LC00MjkKYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjEKbGArZS8yLjA3NSsiIC0iK2UrYApjNS4zLC05LjMsMTIsLTE0LDIwLC0xNApINDAwMDAwdmArKDQwK2UpK2BIODQ1LjI3MjQKcy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksNwpjLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3oKTWArKDgzNCtlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRNYWluIiksdmJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTI2MywiKyg2MDErZStyKStgYzAuNywwLDE4LDM5LjcsNTIsMTE5CmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjAKYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjcKbGArZS8yLjA4NCsiIC0iK2UrYApjNC43LC03LjMsMTEsLTExLDE5LC0xMQpINDAwMDB2YCsoNDArZSkrYEgxMDEyLjMKcy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzIKYy0yMi4zLDQ2LjcsLTMzLjgsNzAuMywtMzQuNSw3MWMtNC43LDQuNywtMTIuMyw3LC0yMyw3cy0xMiwtMSwtMTIsLTEKcy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjYKYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwegpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMSIpLHhiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk05ODMgIisoMTArZStyKStgCmxgK2UvMy4xMysiIC0iK2UrYApjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZgKyg0MCtlKStgCkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDcKcy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDQKYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMApjMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyCmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjUKYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41egpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMiIpLGJiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00MjQsIisoMjM5OCtlK3IpK2AKYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTQKYzAsLTIsLTEwLjcsMTQuMywtMzIsNDljLTQuNyw3LjMsLTkuOCwxNS43LC0xNS41LDI1Yy01LjcsOS4zLC05LjgsMTYsLTEyLjUsMjAKcy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxCnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxCmxgK2UvNC4yMjMrIiAtIitlK2BjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMAp2YCsoNDArZSkrYEgxMDE0LjYKcy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NQpjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJ6IE1gKygxMDAxK2UpKyIgIityK2AKaDQwMDAwMHZgKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMyIpLHdiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00NzMsIisoMjcxMytlK3IpK2AKYzMzOS4zLC0xNzk5LjMsNTA5LjMsLTI3MDAsNTEwLC0yNzAyIGxgK2UvNS4yOTgrIiAtIitlK2AKYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2YCsoNDArZSkrYEgxMDE3LjcKcy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDkKYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDAKYzAsLTEuMywtNS4zLDguNywtMTYsMzBjLTEwLjcsMjEuMywtMjEuMyw0Mi43LC0zMiw2NHMtMTYsMzMsLTE2LDMzcy0yNiwtMjYsLTI2LC0yNgpzNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LAo2MDZ6TWArKDEwMDErZSkrIiAiK3IrImg0MDAwMDB2IisoNDArZSkrIkgxMDE3Ljd6In0sInNxcnRTaXplNCIpLFRiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUvMjtyZXR1cm4iTTQwMDAwMCAiK2UrIiBIMCBMIityKyIgMCBsNjUgNDUgTDE0NSAiKyhlLTgwKSsiIEg0MDAwMDB6In0sInBoYXNlUGF0aCIpLGtiZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1uLTU0LXItZTtyZXR1cm4iTTcwMiAiKyhlK3IpKyJINDAwMDAwIisoNDArZSkrYApINzQydmAraStgbC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxCmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzAKYy00LTMuMzMzLTguMzMzLTcuNjY3LTEzIC0xM2wtMTMtMTNsNzctMTU1IDc3LTE1NmM2NiAxOTkuMzMzIDEzOSA0MTkuNjY3CjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBgK3IrIkg0MDAwMDB2IisoNDArZSkrIkg3NDJ6In0sInNxcnRUYWxsIiksRWJlPW8oZnVuY3Rpb24oZSxyLG4pe3I9MWUzKnI7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2Uic3FydE1haW4iOmk9eWJlKHIsVHApO2JyZWFrO2Nhc2Uic3FydFNpemUxIjppPXZiZShyLFRwKTticmVhaztjYXNlInNxcnRTaXplMiI6aT14YmUocixUcCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOmk9YmJlKHIsVHApO2JyZWFrO2Nhc2Uic3FydFNpemU0IjppPXdiZShyLFRwKTticmVhaztjYXNlInNxcnRUYWxsIjppPWtiZShyLFRwLG4pfXJldHVybiBpfSwic3FydFBhdGgiKSxTYmU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlIlx1MjM5QyI6cmV0dXJuIk0yOTEgMCBINDE3IFYiK3IrIiBIMjkxeiBNMjkxIDAgSDQxNyBWIityKyIgSDI5MXoiO2Nhc2UiXHUyMjIzIjpyZXR1cm4iTTE0NSAwIEgxODggViIrcisiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3IrIiBIMTQ1eiI7Y2FzZSJcdTIyMjUiOnJldHVybiJNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXogTTE0NSAwIEgxODggViIrcisiIEgxNDV6IisoIk0zNjcgMCBINDEwIFYiK3IrIiBIMzY3eiBNMzY3IDAgSDQxMCBWIityKyIgSDM2N3oiKTtjYXNlIlx1MjM5RiI6cmV0dXJuIk00NTcgMCBINTgzIFYiK3IrIiBINDU3eiBNNDU3IDAgSDU4MyBWIityKyIgSDQ1N3oiO2Nhc2UiXHUyM0EyIjpyZXR1cm4iTTMxOSAwIEg0MDMgViIrcisiIEgzMTl6IE0zMTkgMCBINDAzIFYiK3IrIiBIMzE5eiI7Y2FzZSJcdTIzQTUiOnJldHVybiJNMjYzIDAgSDM0NyBWIityKyIgSDI2M3ogTTI2MyAwIEgzNDcgViIrcisiIEgyNjN6IjtjYXNlIlx1MjNBQSI6cmV0dXJuIk0zODQgMCBINTA0IFYiK3IrIiBIMzg0eiBNMzg0IDAgSDUwNCBWIityKyIgSDM4NHoiO2Nhc2UiXHUyM0QwIjpyZXR1cm4iTTMxMiAwIEgzNTUgViIrcisiIEgzMTJ6IE0zMTIgMCBIMzU1IFYiK3IrIiBIMzEyeiI7Y2FzZSJcdTIwMTYiOnJldHVybiJNMjU3IDAgSDMwMCBWIityKyIgSDI1N3ogTTI1NyAwIEgzMDAgViIrcisiIEgyNTd6IisoIk00NzggMCBINTIxIFYiK3IrIiBINDc4eiBNNDc4IDAgSDUyMSBWIityKyIgSDQ3OHoiKTtkZWZhdWx0OnJldHVybiIifX0sImlubmVyUGF0aCIpLHJHPXtkb3VibGVsZWZ0YXJyb3c6YE0yNjIgMTU3CmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuMwogMC0xMi4yLjUtMTQuNSAxLjUtMi4zIDEtNC44IDQuNS03LjUgMTAuNS00OS4zIDk3LjMtMTIxLjcgMTY5LjMtMjE3IDIxNi0yOAogMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41CmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41CiAxNTcuNSA5LjMgOCAxNS4zIDEyLjMgMTggMTNoNmMxMi0uNyAxOC00IDE4LTEwIDAtMi0xLjctNy01LTE1LTIzLjMtNDYtNTItODcKLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjcKLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwegptOCAwdjQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxkb3VibGVyaWdodGFycm93OmBNMzk5NzM4IDM5MmwKLTEwIDEwYy0zNCAzNi02Mi43IDc3LTg2IDEyMy0zLjMgOC01IDEzLjMtNSAxNiAwIDUuMyA2LjcgOCAyMCA4IDcuMyAwIDEyLjItLjUKIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OAotMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4Ci0xNy4zLTEyOC4yLTQ3LjgtMTgwLjUtOTEuNS01Mi4zLTQzLjctOTMuOC05Ni4yLTEyNC41LTE1Ny41LTkuMy04LTE1LjMtMTIuMy0xOAotMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODIKYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zCi0xMDcgNjRsLTEwIDhIMHY0MHpNMCAxNTd2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpgLGxlZnRhcnJvdzpgTTQwMDAwMCAyNDFIMTEwbDMtM2M2OC43LTUyLjcgMTEzLjctMTIwCiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOAotNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0NwpjLTEwIDQtMTYgNy43LTE4IDExIDAgOC43IDYgMTQuMyAxOCAxNyA0Ny4zIDE4LjcgODcuOCA0NyAxMjEuNSA4NVMxOTYgNDQxLjMgMjA4CiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMKIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyCiBsLTMtM2gzOTk4OTB6TTEwMCAyNDF2NDBoMzk5OTAwdi00MHpgLGxlZnRicmFjZTpgTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExNwotNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43CiA1LTYgOS0xMCAxMy0uNyAxLTcuMyAxLTIwIDFINnpgLGxlZnRicmFjZXVuZGVyOmBNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTMKIDM1LjMxMyA1MS4zIDgwLjgxMyA5My44IDEzNi41IDEyNy41IDU1LjY4OCAzMy43IDExNy4xODggNTUuOCAxODQuNSA2Ni41LjY4OAogMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjcKLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2emAsbGVmdGdyb3VwOmBNNDAwMDAwIDgwCkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDAKIDQzNSAwaDM5OTU2NXpgLGxlZnRncm91cHVuZGVyOmBNNDAwMDAwIDI2MgpINDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTkKIDQzNSAyMTloMzk5NTY1emAsbGVmdGhhcnBvb246YE0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zCi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1Ci0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43Ci0xOTYgMjI4LTYuNyA0LjctMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwemAsbGVmdGhhcnBvb25wbHVzOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjUKIDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNS0xOC4zIDMtMjEtMS4zCi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjcKLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHoKbTAgMHY0MGg0MDAwMDB2LTQwemAsbGVmdGhhcnBvb25kb3duOmBNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzMwogNS4zMzMgMTIgMTBjOTAuNjY3IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMzMyAxMC42NjcgNi4zMzMgMTYuMzMzIDkgMTcgMiAuNjY3IDUKIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjcKLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxemAsbGVmdGhhcnBvb25kb3ducGx1czpgTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTIKIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjcKLTIgMTgtNiAyLTIuNyAxLTkuNy0zLTIxLTMyLTg3LjMtODIuNy0xNTcuNy0xNTItMjExbC0zLTNoMzk5OTA3di00MEg3em05MyAwCnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpgLGxlZnRob29rOmBNNDAwMDAwIDI4MSBIMTAzcy0zMy0xMS4yLTYxLTMzLjVTMCAxOTcuMyAwIDE2NHMxNC4yLTYxLjIgNDIuNQotODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuMwotNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjEKIDcxLjUgMjNoMzk5ODU5ek0xMDMgMjgxdi00MGgzOTk4OTd2NDB6YCxsZWZ0bGluZXNlZ21lbnQ6YE00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6Ck00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6YCxsZWZ0bWFwc3RvOmBNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwegpNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwemAsbGVmdFRvRnJvbTpgTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzCi0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OS03MC0xMDFsLTctOGgzOTk5MDV2LTQwSDk1bDctOApjMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zCiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpgLGxvbmdlcXVhbDpgTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6Ck0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwemAsbWlkYnJhY2U6YE0yMDA0MjggMzM0CmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTQKLTUzLjMgODYuNy0xMjMuNyAxNTMtMjExIDE5OS02Ni43IDM2LTEzNy4zIDU2LjMtMjEyIDYySDBWMjE0aDE5OTU2OGMxNzguMy0xMS43CiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMQogMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpgLG1pZGJyYWNldW5kZXI6YE0xOTk1NzIgMjE0CmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTQKIDUzLjMtODYuNyAxMjMuNy0xNTMgMjExLTE5OSA2Ni43LTM2IDEzNy4zLTU2LjMgMjEyLTYyaDE5OTU2OHYxMjBIMjAwNDMyYy0xNzguMwogMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDAKLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6YCxvaWludFNpemUxOmBNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42Ci0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnoKbTM2OC4xIDE3OC4yYzAtODYuNC02MC45LTIxNS40LTM2OC4xLTIxNS40LTMwNi40IDAtMzY3LjMgMTI5LTM2Ny4zIDIxNS40IDAgODUuOAo2MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44emAsb2lpbnRTaXplMjpgTTc1Ny44IDEwMC4xYzM4NC43IDAgNDUxLjEgMTM3LjYgNDUxLjEgMjMwIDAgOTEuMy02Ni40IDIyOC44Ci00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6Cm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMgpjMCAxMTAgODQgMjc2IDUwNCAyNzZzNTAyLjQtMTY2IDUwMi40LTI3NnpgLG9paWludFNpemUxOmBNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42Ci00ODAuNSAxNzcuNlMyMDIuMSAzMjAuNiAyMDIuMSAyNDkuOGMwLTcxLjQgNzAuNS0xNzguMiA0NzkuMy0xNzguMnoKbTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDAKODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44emAsb2lpaW50U2l6ZTI6YE0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOAotNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3oKbTc3MC40IDI3Ny4xYzAtMTMxLjItMTI2LjQtMzI3LjYtNzcwLjUtMzI3LjZTMjQ4LjQgMTk4LjkgMjQ4LjQgMzMwLjEKYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40emAscmlnaHRhcnJvdzpgTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgKLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAKIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNwogMzktODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUKLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CiAxNTEuNyAxMzkgMjA1em0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0YnJhY2U6YE00MDAwMDAgNTQybAotNiA2aC0xN2MtMTIuNyAwLTE5LjMtLjMtMjAtMS00LTQtNy4zLTguMy0xMC0xMy0zNS4zLTUxLjMtODAuOC05My44LTEzNi41LTEyNy41CnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxCmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpgLHJpZ2h0YnJhY2V1bmRlcjpgTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuMwogMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzNwotMTc0IDIuNy01IDYtOSAxMC0xMyAuNy0xIDcuMy0xIDIwLTFoMTd6YCxyaWdodGdyb3VwOmBNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDAKIDMtMSAzLTN2LTM4Yy03Ni0xNTgtMjU3LTIxOS00MzUtMjE5SDB6YCxyaWdodGdyb3VwdW5kZXI6YE0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMTgKIDAgMiAwIDMgMSAzIDN2MzhjLTc2IDE1OC0yNTcgMjE5LTQzNSAyMTlIMHpgLHJpZ2h0aGFycG9vbjpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMKLTMuNy0xNS4zLTExLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yCi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTgKIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25wbHVzOmBNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMQotMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjcKIDItMTggNi0yIDIuNy0xIDkuNyAzIDIxIDE1LjMgNDIgMzYuNyA4MS44IDY0IDExOS41IDI3LjMgMzcuNyA1OCA2OS4yIDkyIDk0LjV6Cm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25kb3duOmBNMzk5NzQ3IDUxMWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44IDE1LTIuNXM0LjctNi44CiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNQotNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NQotMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bnBsdXM6YE0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjgKIDE1LTIuNXM0LjctNi44IDgtMTUuNWM0MC05NCA5OS4zLTE2Ni4zIDE3OC0yMTcgMTMuMy04IDIwLjMtMTIuMyAyMS0xMyA1LjMtMy4zCiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMwotNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6Cm0wLTE5NHY0MGg0MDAwMDB2LTQwem0wIDB2NDBoNDAwMDAwdi00MHpgLHJpZ2h0aG9vazpgTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zCiAxNS00MCAwLTIyLjctOS44LTQwLjctMjkuNS01NC0xOS43LTEzLjMtNDMuNS0yMS03MS41LTIzLTE3LjMtMS4zLTI2LTgtMjYtMjAgMAotMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxCiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpgLHJpZ2h0bGluZXNlZ21lbnQ6YE0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHoKTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwemAscmlnaHRUb0Zyb206YE00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjMKIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMgotNTIgNjUuNy03MCAxMDEtMTAuNyAyMy4zLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIzYzI0LTY5LjMgNzEuMy0xMjUgMTQyCi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6YCx0d29oZWFkbGVmdGFycm93OmBNMCAxNjdjNjggNDAKIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjMtLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjkKLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuMwotNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTkKLTM3LjMzMyAxOS00MmgtNDZjLTE4IDU0LTUyLjMgMTAwLjctMTAzIDE0MGwtOSA3SDk1bDctOGMyOC43LTMyIDUyLTY1LjcgNzAtMTAxCiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6YCx0d29oZWFkcmlnaHRhcnJvdzpgTTQwMDAwMCAxNjcKYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zCiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDIKIDE4IDM1LjMgNDAgNjcuMyA2NiA5Nmw5IDlIMHY0MGgzOTk3MTZsLTkgOWMtMjYgMjguNy00OCA2MC43LTY2IDk2LTEyLjcgMjMuMzMzCi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwCiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3emAsdGlsZGUxOmBNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTcKLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDAKIDExNCA2OCAxOTEgNjggNzggMCAxNjgtNjggMTc3LTY4IDQgMCA3IDIgOSA1bDEyIDE5YzEgMi4xNzUgMiA0LjM1IDIgNi41MjUgMAogNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOAotNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6YCx0aWxkZTI6YE0zNDQgNTUuMjY2Yy0xNDIgMC0zMDAuNjM4IDgxLjMxNi0zMTEuNSA4Ni40MTgKLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45CiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNApjMSAyLjE0IDEgMy4yMSAxIDQuMjggMCA1LjM0Ny0zIDkuNjI2LTcgMTAuNjk2bC0yMi4zIDEyLjYyMkM4NTIuNiAxNTguMzcyIDc1MQogMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxemAsdGlsZGUzOmBNNzg2IDU5QzQ1NyA1OSAzMiAxNzUuMjQyIDEzIDE3NS4yNDJjLTYgMC0xMC0zLjQ1NwotMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDAKIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3CiAxNi41OTUtNi42OTcgMTcuNDkybC0yMS4wNTIgNy4zMWMtMzY3LjkgOTguMTQ2LTYwOS4xNSAxMjIuNjk2LTc3OC4xNSAxMjIuNjk2CiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6YCx0aWxkZTQ6YE03ODYgNThDNDU3IDU4IDMyIDE3Ny40ODcgMTMgMTc3LjQ4N2MtNiAwLTEwLTMuMzQ1Ci0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOQogMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTkKIDE0LjQ5NWwtMjAuNyA1LjU3NGMtMzY2Ljg1IDk5Ljc5LTYwNy4zIDEzOS4zNzItNzc2LjMgMTM5LjM3Mi0zMzggMC00MDkKIC0xNzUuMjM2LTc0NC0xNzUuMjM2emAsdmVjOmBNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNQozLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExCjEwLjY2NyAxMSAxOCAwIDYtMSAxMC0zIDEycy02LjY2NyA1LTE0IDljLTI4LjY2NyAxNC42NjctNTMuNjY3IDM1LjY2Ny03NSA2MwotMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDEKLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OQpIMjEzbC0xNzEtMWMtOC42NjctNi0xMy0xMi4zMzMtMTMtMTkgMC00LjY2NyA0LjMzMy0xMS4zMzMgMTMtMjBoMzU5CmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5emAsd2lkZWhhdDE6YE01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyCmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pgLHdpZGVoYXQyOmBNMTE4MSAwaDJsMTE3MSAxNzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDM6YE0xMTgxIDBoMmwxMTcxIDIzNmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlaGF0NDpgTTExODEgMGgybDExNzEgMjk2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVjaGVjazE6YE01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLAotNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6YCx3aWRlY2hlY2syOmBNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazM6YE0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsd2lkZWNoZWNrNDpgTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCxiYXJhYm92ZWxlZnRhcnJvdzpgTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMgpjNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41CmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMApzLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3CjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNgpzMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMQpjMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHoKTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6YCxyaWdodGFycm93YWJvdmViYXI6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzIKLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMAoxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOQotODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNQotMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwemAsYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOmBNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxNwpjMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMQpjLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwCmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHoKTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwemAscmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjpgTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwCmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LAotMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2CmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXoKTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpgLHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjpgTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMQpjMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LAoxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsCi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6Ck05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpgLHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6YE01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6YH0sQ2JlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2goZSl7Y2FzZSJsYnJhY2siOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjE3NTkgaDM0NyB2LTg0Ckg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInJicmFjayI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2IityK2AgdjE3NTkgSDAgdjg0IEgzNDd6Ck0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInZlcnQiOnJldHVybiJNMTQ1IDE1IHY1ODUgdiIrcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UiZG91YmxldmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2IityK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArcitgIHY1ODUgaDQzegpNMzY3IDE1IHY1ODUgdmArcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE00MTAgMTUgSDM2NyB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UibGZsb29yIjpyZXR1cm4iTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHYiK3IrYCB2MTcxNSBoMjYzIHY4NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3IrIiB2MTcxNSBIMzE5eiI7Y2FzZSJyZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrcitgIHYxNzk5IEgwIHYtODQgSDMxOXoKTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2YCtyKyIgdjE3MTUgSDMxOXoiO2Nhc2UibGNlaWwiOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjYwMiBoODR6Ck00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2NjAyIGg4NHoiO2Nhc2UicmNlaWwiOnJldHVybiJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdiIrcitgIHY2MDIgaDg0egpNMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2YCtyKyIgdjYwMiBoODR6IjtjYXNlImxwYXJlbiI6cmV0dXJuYE04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMQpjLTUuMyw1LjMsLTEwLjMsMTEsLTE1LDE3Yy0yNDIuNywyOTQuNywtMzk1LjMsNjgyLC00NTgsMTE2MmMtMjEuMywxNjMuMywtMzMuMywzNDksCi0zNiw1NTcgbDAsYCsocis4NCkrYGMwLjIsNiwwLDI2LDAsNjBjMiwxNTkuMywxMCwzMTAuNywyNCw0NTRjNTMuMyw1MjgsMjEwLAo5NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTkKYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsCi01NDQuNywtMTEyLjUsLTg4MmMtMiwtMTA0LC0zLC0xNjcsLTMsLTE4OQpsMCwtYCsocis5MikrYGMwLC0xNjIuNyw1LjcsLTMxNCwxNywtNDU0YzIwLjcsLTI3Miw2My43LC01MTMsMTI5LC03MjNjNjUuMywKLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4emA7Y2FzZSJycGFyZW4iOnJldHVybmBNNzYsMGMtMTYuNywwLC0yNSwzLC0yNSw5YzAsMiwyLDYuMyw2LDEzYzIxLjMsMjguNyw0Mi4zLDYwLjMsCjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNQpjMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsYCsocis5KStgCmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NApjLTU1LjcsMTk0LjcsLTEzMS44LDM3MC4zLC0yMjguNSw1MjdjLTIwLjcsMzQuNywtNDEuNyw2Ni4zLC02Myw5NWMtMiwzLjMsLTQsNywtNiwxMQpjMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xNwpjMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OApsMCwtYCsocisxNDQpK2BjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNywKLTQ3MCwtMTI2NWMtNC43LC02LC05LjcsLTExLjcsLTE1LC0xN2MtMC43LC0wLjcsLTYuNywtMSwtMTgsLTF6YDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBzdHJldGNoeSBkZWxpbWl0ZXIuIil9fSwidGFsbERlbGltIikscmQ9Y2xhc3N7c3RhdGlje28odGhpcywiRG9jdW1lbnRGcmFnbWVudCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49ZSx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXtmb3IodmFyIGU9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcl0udG9Ob2RlKCkpO3JldHVybiBlfXRvTWFya3VwKCl7Zm9yKHZhciBlPSIiLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllKz10aGlzLmNoaWxkcmVuW3JdLnRvTWFya3VwKCk7cmV0dXJuIGV9dG9UZXh0KCl7dmFyIGU9byhyPT5yLnRvVGV4dCgpLCJ0b1RleHQiKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZSkuam9pbigiIil9fSxsYz17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sbDQ9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sbkc9e1x1MDBDNToiQSIsXHUwMEQwOiJEIixcdTAwREU6Im8iLFx1MDBFNToiYSIsXHUwMEYwOiJkIixcdTAwRkU6Im8iLFx1MDQxMDoiQSIsXHUwNDExOiJCIixcdTA0MTI6IkIiLFx1MDQxMzoiRiIsXHUwNDE0OiJBIixcdTA0MTU6IkUiLFx1MDQxNjoiSyIsXHUwNDE3OiIzIixcdTA0MTg6Ik4iLFx1MDQxOToiTiIsXHUwNDFBOiJLIixcdTA0MUI6Ik4iLFx1MDQxQzoiTSIsXHUwNDFEOiJIIixcdTA0MUU6Ik8iLFx1MDQxRjoiTiIsXHUwNDIwOiJQIixcdTA0MjE6IkMiLFx1MDQyMjoiVCIsXHUwNDIzOiJ5IixcdTA0MjQ6Ik8iLFx1MDQyNToiWCIsXHUwNDI2OiJVIixcdTA0Mjc6ImgiLFx1MDQyODoiVyIsXHUwNDI5OiJXIixcdTA0MkE6IkIiLFx1MDQyQjoiWCIsXHUwNDJDOiJCIixcdTA0MkQ6IjMiLFx1MDQyRToiWCIsXHUwNDJGOiJSIixcdTA0MzA6ImEiLFx1MDQzMToiYiIsXHUwNDMyOiJhIixcdTA0MzM6InIiLFx1MDQzNDoieSIsXHUwNDM1OiJlIixcdTA0MzY6Im0iLFx1MDQzNzoiZSIsXHUwNDM4OiJuIixcdTA0Mzk6Im4iLFx1MDQzQToibiIsXHUwNDNCOiJuIixcdTA0M0M6Im0iLFx1MDQzRDoibiIsXHUwNDNFOiJvIixcdTA0M0Y6Im4iLFx1MDQ0MDoicCIsXHUwNDQxOiJjIixcdTA0NDI6Im8iLFx1MDQ0MzoieSIsXHUwNDQ0OiJiIixcdTA0NDU6IngiLFx1MDQ0NjoibiIsXHUwNDQ3OiJuIixcdTA0NDg6InciLFx1MDQ0OToidyIsXHUwNDRBOiJhIixcdTA0NEI6Im0iLFx1MDQ0QzoiYSIsXHUwNDREOiJlIixcdTA0NEU6Im0iLFx1MDQ0RjoiciJ9O28oQWJlLCJzZXRGb250TWV0cmljcyIpO28oSUMsImdldENoYXJhY3Rlck1ldHJpY3MiKTtjQz17fTtvKF9iZSwiZ2V0R2xvYmFsTWV0cmljcyIpO0xiZT1bWzEsMSwxXSxbMiwxLDFdLFszLDEsMV0sWzQsMiwxXSxbNSwyLDFdLFs2LDMsMV0sWzcsNCwyXSxbOCw2LDNdLFs5LDcsNl0sWzEwLDgsN10sWzExLDEwLDldXSxpRz1bLjUsLjYsLjcsLjgsLjksMSwxLjIsMS40NCwxLjcyOCwyLjA3NCwyLjQ4OF0sYUc9byhmdW5jdGlvbihlLHIpe3JldHVybiByLnNpemU8Mj9lOkxiZVtlLTFdW3Iuc2l6ZS0xXX0sInNpemVBdFN0eWxlIiksVDQ9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJPcHRpb25zIil9Y29uc3RydWN0b3IoZSl7dGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jb2xvcj12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLnRleHRTaXplPXZvaWQgMCx0aGlzLnBoYW50b209dm9pZCAwLHRoaXMuZm9udD12b2lkIDAsdGhpcy5mb250RmFtaWx5PXZvaWQgMCx0aGlzLmZvbnRXZWlnaHQ9dm9pZCAwLHRoaXMuZm9udFNoYXBlPXZvaWQgMCx0aGlzLnNpemVNdWx0aXBsaWVyPXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWluUnVsZVRoaWNrbmVzcz12b2lkIDAsdGhpcy5fZm9udE1ldHJpY3M9dm9pZCAwLHRoaXMuc3R5bGU9ZS5zdHlsZSx0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy5zaXplPWUuc2l6ZXx8dC5CQVNFU0laRSx0aGlzLnRleHRTaXplPWUudGV4dFNpemV8fHRoaXMuc2l6ZSx0aGlzLnBoYW50b209ISFlLnBoYW50b20sdGhpcy5mb250PWUuZm9udHx8IiIsdGhpcy5mb250RmFtaWx5PWUuZm9udEZhbWlseXx8IiIsdGhpcy5mb250V2VpZ2h0PWUuZm9udFdlaWdodHx8IiIsdGhpcy5mb250U2hhcGU9ZS5mb250U2hhcGV8fCIiLHRoaXMuc2l6ZU11bHRpcGxpZXI9aUdbdGhpcy5zaXplLTFdLHRoaXMubWF4U2l6ZT1lLm1heFNpemUsdGhpcy5taW5SdWxlVGhpY2tuZXNzPWUubWluUnVsZVRoaWNrbmVzcyx0aGlzLl9mb250TWV0cmljcz12b2lkIDB9ZXh0ZW5kKGUpe3ZhciByPXtzdHlsZTp0aGlzLnN0eWxlLHNpemU6dGhpcy5zaXplLHRleHRTaXplOnRoaXMudGV4dFNpemUsY29sb3I6dGhpcy5jb2xvcixwaGFudG9tOnRoaXMucGhhbnRvbSxmb250OnRoaXMuZm9udCxmb250RmFtaWx5OnRoaXMuZm9udEZhbWlseSxmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCxmb250U2hhcGU6dGhpcy5mb250U2hhcGUsbWF4U2l6ZTp0aGlzLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczp0aGlzLm1pblJ1bGVUaGlja25lc3N9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJihyW25dPWVbbl0pO3JldHVybiBuZXcgdChyKX1oYXZpbmdTdHlsZShlKXtyZXR1cm4gdGhpcy5zdHlsZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6ZSxzaXplOmFHKHRoaXMudGV4dFNpemUsZSl9KX1oYXZpbmdDcmFtcGVkU3R5bGUoKXtyZXR1cm4gdGhpcy5oYXZpbmdTdHlsZSh0aGlzLnN0eWxlLmNyYW1wKCkpfWhhdmluZ1NpemUoZSl7cmV0dXJuIHRoaXMuc2l6ZT09PWUmJnRoaXMudGV4dFNpemU9PT1lP3RoaXM6dGhpcy5leHRlbmQoe3N0eWxlOnRoaXMuc3R5bGUudGV4dCgpLHNpemU6ZSx0ZXh0U2l6ZTplLHNpemVNdWx0aXBsaWVyOmlHW2UtMV19KX1oYXZpbmdCYXNlU3R5bGUoZSl7ZT1lfHx0aGlzLnN0eWxlLnRleHQoKTt2YXIgcj1hRyh0LkJBU0VTSVpFLGUpO3JldHVybiB0aGlzLnNpemU9PT1yJiZ0aGlzLnRleHRTaXplPT09dC5CQVNFU0laRSYmdGhpcy5zdHlsZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6ZSxzaXplOnJ9KX1oYXZpbmdCYXNlU2l6aW5nKCl7dmFyIGU7c3dpdGNoKHRoaXMuc3R5bGUuaWQpe2Nhc2UgNDpjYXNlIDU6ZT0zO2JyZWFrO2Nhc2UgNjpjYXNlIDc6ZT0xO2JyZWFrO2RlZmF1bHQ6ZT02fXJldHVybiB0aGlzLmV4dGVuZCh7c3R5bGU6dGhpcy5zdHlsZS50ZXh0KCksc2l6ZTplfSl9d2l0aENvbG9yKGUpe3JldHVybiB0aGlzLmV4dGVuZCh7Y29sb3I6ZX0pfXdpdGhQaGFudG9tKCl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtwaGFudG9tOiEwfSl9d2l0aEZvbnQoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250OmV9KX13aXRoVGV4dEZvbnRGYW1pbHkoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250RmFtaWx5OmUsZm9udDoiIn0pfXdpdGhUZXh0Rm9udFdlaWdodChlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRXZWlnaHQ6ZSxmb250OiIifSl9d2l0aFRleHRGb250U2hhcGUoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250U2hhcGU6ZSxmb250OiIifSl9c2l6aW5nQ2xhc3NlcyhlKXtyZXR1cm4gZS5zaXplIT09dGhpcy5zaXplP1sic2l6aW5nIiwicmVzZXQtc2l6ZSIrZS5zaXplLCJzaXplIit0aGlzLnNpemVdOltdfWJhc2VTaXppbmdDbGFzc2VzKCl7cmV0dXJuIHRoaXMuc2l6ZSE9PXQuQkFTRVNJWkU/WyJzaXppbmciLCJyZXNldC1zaXplIit0aGlzLnNpemUsInNpemUiK3QuQkFTRVNJWkVdOltdfWZvbnRNZXRyaWNzKCl7cmV0dXJuIHRoaXMuX2ZvbnRNZXRyaWNzfHwodGhpcy5fZm9udE1ldHJpY3M9X2JlKHRoaXMuc2l6ZSkpLHRoaXMuX2ZvbnRNZXRyaWNzfWdldENvbG9yKCl7cmV0dXJuIHRoaXMucGhhbnRvbT8idHJhbnNwYXJlbnQiOnRoaXMuY29sb3J9fTtUNC5CQVNFU0laRT02O1RDPXtwdDoxLG1tOjcyMjcvMjU0MCxjbTo3MjI3LzI1NCxpbjo3Mi4yNyxicDo4MDMvODAwLHBjOjEyLGRkOjEyMzgvMTE1NyxjYzoxNDg1Ni8xMTU3LG5kOjY4NS82NDIsbmM6MTM3MC8xMDcsc3A6MS82NTUzNixweDo4MDMvODAwfSxEYmU9e2V4OiEwLGVtOiEwLG11OiEwfSxPRz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihlPWUudW5pdCksZSBpbiBUQ3x8ZSBpbiBEYmV8fGU9PT0iZXgifSwidmFsaWRVbml0IiksSm49byhmdW5jdGlvbihlLHIpe3ZhciBuO2lmKGUudW5pdCBpbiBUQyluPVRDW2UudW5pdF0vci5mb250TWV0cmljcygpLnB0UGVyRW0vci5zaXplTXVsdGlwbGllcjtlbHNlIGlmKGUudW5pdD09PSJtdSIpbj1yLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtlbHNle3ZhciBpO2lmKHIuc3R5bGUuaXNUaWdodCgpP2k9ci5oYXZpbmdTdHlsZShyLnN0eWxlLnRleHQoKSk6aT1yLGUudW5pdD09PSJleCIpbj1pLmZvbnRNZXRyaWNzKCkueEhlaWdodDtlbHNlIGlmKGUudW5pdD09PSJlbSIpbj1pLmZvbnRNZXRyaWNzKCkucXVhZDtlbHNlIHRocm93IG5ldyBsdCgiSW52YWxpZCB1bml0OiAnIitlLnVuaXQrIiciKTtpIT09ciYmKG4qPWkuc2l6ZU11bHRpcGxpZXIvci5zaXplTXVsdGlwbGllcil9cmV0dXJuIE1hdGgubWluKGUubnVtYmVyKm4sci5tYXhTaXplKX0sImNhbGN1bGF0ZVNpemUiKSxndD1vKGZ1bmN0aW9uKGUpe3JldHVybitlLnRvRml4ZWQoNCkrImVtIn0sIm1ha2VFbSIpLHloPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKHI9PnIpLmpvaW4oIiAiKX0sImNyZWF0ZUNsYXNzIiksUEc9byhmdW5jdGlvbihlLHIsbil7aWYodGhpcy5jbGFzc2VzPWV8fFtdLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmhlaWdodD0wLHRoaXMuZGVwdGg9MCx0aGlzLm1heEZvbnRTaXplPTAsdGhpcy5zdHlsZT1ufHx7fSxyKXtyLnN0eWxlLmlzVGlnaHQoKSYmdGhpcy5jbGFzc2VzLnB1c2goIm10aWdodCIpO3ZhciBpPXIuZ2V0Q29sb3IoKTtpJiYodGhpcy5zdHlsZS5jb2xvcj1pKX19LCJpbml0Tm9kZSIpLEJHPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyLmNsYXNzTmFtZT15aCh0aGlzLmNsYXNzZXMpO2Zvcih2YXIgbiBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJihyLnN0eWxlW25dPXRoaXMuc3R5bGVbbl0pO2Zvcih2YXIgaSBpbiB0aGlzLmF0dHJpYnV0ZXMpdGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGkpJiZyLnNldEF0dHJpYnV0ZShpLHRoaXMuYXR0cmlidXRlc1tpXSk7Zm9yKHZhciBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2FdLnRvTm9kZSgpKTtyZXR1cm4gcn0sInRvTm9kZSIpLEZHPW8oZnVuY3Rpb24oZSl7dmFyIHI9IjwiK2U7dGhpcy5jbGFzc2VzLmxlbmd0aCYmKHIrPScgY2xhc3M9IicrSnQuZXNjYXBlKHloKHRoaXMuY2xhc3NlcykpKyciJyk7dmFyIG49IiI7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG4rPUp0Lmh5cGhlbmF0ZShpKSsiOiIrdGhpcy5zdHlsZVtpXSsiOyIpO24mJihyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJpYnV0ZXMpdGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGEpJiYocis9IiAiK2ErJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2FdKSsnIicpO3IrPSI+Ijtmb3IodmFyIHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylyKz10aGlzLmNoaWxkcmVuW3NdLnRvTWFya3VwKCk7cmV0dXJuIHIrPSI8LyIrZSsiPiIscn0sInRvTWFya3VwIiksbmQ9Y2xhc3N7c3RhdGlje28odGhpcywiU3BhbiIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsUEcuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmNoaWxkcmVuPXJ8fFtdfXNldEF0dHJpYnV0ZShlLHIpe3RoaXMuYXR0cmlidXRlc1tlXT1yfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7cmV0dXJuIEJHLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIEZHLmNhbGwodGhpcywic3BhbiIpfX0sbXk9Y2xhc3N7c3RhdGlje28odGhpcywiQW5jaG9yIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCxQRy5jYWxsKHRoaXMscixpKSx0aGlzLmNoaWxkcmVuPW58fFtdLHRoaXMuc2V0QXR0cmlidXRlKCJocmVmIixlKX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3JldHVybiBCRy5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiBGRy5jYWxsKHRoaXMsImEiKX19LGtDPWNsYXNze3N0YXRpY3tvKHRoaXMsIkltZyIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnNyYz12b2lkIDAsdGhpcy5hbHQ9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuYWx0PXIsdGhpcy5zcmM9ZSx0aGlzLmNsYXNzZXM9WyJtb3JkIl0sdGhpcy5zdHlsZT1ufWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7ZS5zcmM9dGhpcy5zcmMsZS5hbHQ9dGhpcy5hbHQsZS5jbGFzc05hbWU9Im1vcmQiO2Zvcih2YXIgciBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkocikmJihlLnN0eWxlW3JdPXRoaXMuc3R5bGVbcl0pO3JldHVybiBlfXRvTWFya3VwKCl7dmFyIGU9JzxpbWcgc3JjPSInK0p0LmVzY2FwZSh0aGlzLnNyYykrJyInKygnIGFsdD0iJytKdC5lc2NhcGUodGhpcy5hbHQpKyciJykscj0iIjtmb3IodmFyIG4gaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KG4pJiYocis9SnQuaHlwaGVuYXRlKG4pKyI6Iit0aGlzLnN0eWxlW25dKyI7Iik7cmV0dXJuIHImJihlKz0nIHN0eWxlPSInK0p0LmVzY2FwZShyKSsnIicpLGUrPSInLz4iLGV9fSxOYmU9e1x1MDBFRToiXHUwMTMxXHUwMzAyIixcdTAwRUY6Ilx1MDEzMVx1MDMwOCIsXHUwMEVEOiJcdTAxMzFcdTAzMDEiLFx1MDBFQzoiXHUwMTMxXHUwMzAwIn0sRXM9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuLGksYSxzLGwsdSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5pdGFsaWM9dm9pZCAwLHRoaXMuc2tldz12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLnRleHQ9ZSx0aGlzLmhlaWdodD1yfHwwLHRoaXMuZGVwdGg9bnx8MCx0aGlzLml0YWxpYz1pfHwwLHRoaXMuc2tldz1hfHwwLHRoaXMud2lkdGg9c3x8MCx0aGlzLmNsYXNzZXM9bHx8W10sdGhpcy5zdHlsZT11fHx7fSx0aGlzLm1heEZvbnRTaXplPTA7dmFyIGg9Z2JlKHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtoJiZ0aGlzLmNsYXNzZXMucHVzaChoKyJfZmFsbGJhY2siKSwvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpJiYodGhpcy50ZXh0PU5iZVt0aGlzLnRleHRdKX1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCkscj1udWxsO3RoaXMuaXRhbGljPjAmJihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxyLnN0eWxlLm1hcmdpblJpZ2h0PWd0KHRoaXMuaXRhbGljKSksdGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksci5jbGFzc05hbWU9eWgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7cmV0dXJuIHI/KHIuYXBwZW5kQ2hpbGQoZSkscik6ZX10b01hcmt1cCgpe3ZhciBlPSExLHI9IjxzcGFuIjt0aGlzLmNsYXNzZXMubGVuZ3RoJiYoZT0hMCxyKz0nIGNsYXNzPSInLHIrPUp0LmVzY2FwZSh5aCh0aGlzLmNsYXNzZXMpKSxyKz0nIicpO3ZhciBuPSIiO3RoaXMuaXRhbGljPjAmJihuKz0ibWFyZ2luLXJpZ2h0OiIrdGhpcy5pdGFsaWMrImVtOyIpO2Zvcih2YXIgaSBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJihuKz1KdC5oeXBoZW5hdGUoaSkrIjoiK3RoaXMuc3R5bGVbaV0rIjsiKTtuJiYoZT0hMCxyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO3ZhciBhPUp0LmVzY2FwZSh0aGlzLnRleHQpO3JldHVybiBlPyhyKz0iPiIscis9YSxyKz0iPC9zcGFuPiIscik6YX19LHZsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN2Z05vZGUiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1lfHxbXSx0aGlzLmF0dHJpYnV0ZXM9cnx8e319dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJzdmciKTtmb3IodmFyIG4gaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsbikmJnIuc2V0QXR0cmlidXRlKG4sdGhpcy5hdHRyaWJ1dGVzW25dKTtmb3IodmFyIGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2krKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSsnIicpO2UrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8L3N2Zz4iLGV9fSxjYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5wYXRoTmFtZT12b2lkIDAsdGhpcy5hbHRlcm5hdGU9dm9pZCAwLHRoaXMucGF0aE5hbWU9ZSx0aGlzLmFsdGVybmF0ZT1yfXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwicGF0aCIpO3JldHVybiB0aGlzLmFsdGVybmF0ZT9yLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5hbHRlcm5hdGUpOnIuc2V0QXR0cmlidXRlKCJkIixyR1t0aGlzLnBhdGhOYW1lXSkscn10b01hcmt1cCgpe3JldHVybiB0aGlzLmFsdGVybmF0ZT8nPHBhdGggZD0iJytKdC5lc2NhcGUodGhpcy5hbHRlcm5hdGUpKyciLz4nOic8cGF0aCBkPSInK0p0LmVzY2FwZShyR1t0aGlzLnBhdGhOYW1lXSkrJyIvPid9fSxneT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW5lTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPWV8fHt9fXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwibGluZSIpO2Zvcih2YXIgbiBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxuKSYmci5zZXRBdHRyaWJ1dGUobix0aGlzLmF0dHJpYnV0ZXNbbl0pO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9IjxsaW5lIjtmb3IodmFyIHIgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMscikmJihlKz0iICIrcisnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbcl0pKyciJyk7cmV0dXJuIGUrPSIvPiIsZX19O28oc0csImFzc2VydFN5bWJvbERvbU5vZGUiKTtvKFJiZSwiYXNzZXJ0U3BhbiIpO01iZT17YmluOjEsY2xvc2U6MSxpbm5lcjoxLG9wZW46MSxwdW5jdDoxLHJlbDoxfSxJYmU9eyJhY2NlbnQtdG9rZW4iOjEsbWF0aG9yZDoxLCJvcC10b2tlbiI6MSxzcGFjaW5nOjEsdGV4dG9yZDoxfSxDbj17bWF0aDp7fSx0ZXh0Ont9fTtvKCQsImRlZmluZVN5bWJvbCIpO1Y9Im1hdGgiLGl0PSJ0ZXh0IixyZT0ibWFpbiIsYmU9ImFtcyIsVW49ImFjY2VudC10b2tlbiIsTHQ9ImJpbiIsZXM9ImNsb3NlIixTcD0iaW5uZXIiLHRyPSJtYXRob3JkIixDaT0ib3AtdG9rZW4iLGVvPSJvcGVuIixMND0icHVuY3QiLHdlPSJyZWwiLGd1PSJzcGFjaW5nIixfZT0idGV4dG9yZCI7JChWLHJlLHdlLCJcdTIyNjEiLCJcXGVxdWl2IiwhMCk7JChWLHJlLHdlLCJcdTIyN0EiLCJcXHByZWMiLCEwKTskKFYscmUsd2UsIlx1MjI3QiIsIlxcc3VjYyIsITApOyQoVixyZSx3ZSwiXHUyMjNDIiwiXFxzaW0iLCEwKTskKFYscmUsd2UsIlx1MjJBNSIsIlxccGVycCIpOyQoVixyZSx3ZSwiXHUyQUFGIiwiXFxwcmVjZXEiLCEwKTskKFYscmUsd2UsIlx1MkFCMCIsIlxcc3VjY2VxIiwhMCk7JChWLHJlLHdlLCJcdTIyNDMiLCJcXHNpbWVxIiwhMCk7JChWLHJlLHdlLCJcdTIyMjMiLCJcXG1pZCIsITApOyQoVixyZSx3ZSwiXHUyMjZBIiwiXFxsbCIsITApOyQoVixyZSx3ZSwiXHUyMjZCIiwiXFxnZyIsITApOyQoVixyZSx3ZSwiXHUyMjREIiwiXFxhc3ltcCIsITApOyQoVixyZSx3ZSwiXHUyMjI1IiwiXFxwYXJhbGxlbCIpOyQoVixyZSx3ZSwiXHUyMkM4IiwiXFxib3d0aWUiLCEwKTskKFYscmUsd2UsIlx1MjMyMyIsIlxcc21pbGUiLCEwKTskKFYscmUsd2UsIlx1MjI5MSIsIlxcc3FzdWJzZXRlcSIsITApOyQoVixyZSx3ZSwiXHUyMjkyIiwiXFxzcXN1cHNldGVxIiwhMCk7JChWLHJlLHdlLCJcdTIyNTAiLCJcXGRvdGVxIiwhMCk7JChWLHJlLHdlLCJcdTIzMjIiLCJcXGZyb3duIiwhMCk7JChWLHJlLHdlLCJcdTIyMEIiLCJcXG5pIiwhMCk7JChWLHJlLHdlLCJcdTIyMUQiLCJcXHByb3B0byIsITApOyQoVixyZSx3ZSwiXHUyMkEyIiwiXFx2ZGFzaCIsITApOyQoVixyZSx3ZSwiXHUyMkEzIiwiXFxkYXNodiIsITApOyQoVixyZSx3ZSwiXHUyMjBCIiwiXFxvd25zIik7JChWLHJlLEw0LCIuIiwiXFxsZG90cCIpOyQoVixyZSxMNCwiXHUyMkM1IiwiXFxjZG90cCIpOyQoVixyZSxfZSwiIyIsIlxcIyIpOyQoaXQscmUsX2UsIiMiLCJcXCMiKTskKFYscmUsX2UsIiYiLCJcXCYiKTskKGl0LHJlLF9lLCImIiwiXFwmIik7JChWLHJlLF9lLCJcdTIxMzUiLCJcXGFsZXBoIiwhMCk7JChWLHJlLF9lLCJcdTIyMDAiLCJcXGZvcmFsbCIsITApOyQoVixyZSxfZSwiXHUyMTBGIiwiXFxoYmFyIiwhMCk7JChWLHJlLF9lLCJcdTIyMDMiLCJcXGV4aXN0cyIsITApOyQoVixyZSxfZSwiXHUyMjA3IiwiXFxuYWJsYSIsITApOyQoVixyZSxfZSwiXHUyNjZEIiwiXFxmbGF0IiwhMCk7JChWLHJlLF9lLCJcdTIxMTMiLCJcXGVsbCIsITApOyQoVixyZSxfZSwiXHUyNjZFIiwiXFxuYXR1cmFsIiwhMCk7JChWLHJlLF9lLCJcdTI2NjMiLCJcXGNsdWJzdWl0IiwhMCk7JChWLHJlLF9lLCJcdTIxMTgiLCJcXHdwIiwhMCk7JChWLHJlLF9lLCJcdTI2NkYiLCJcXHNoYXJwIiwhMCk7JChWLHJlLF9lLCJcdTI2NjIiLCJcXGRpYW1vbmRzdWl0IiwhMCk7JChWLHJlLF9lLCJcdTIxMUMiLCJcXFJlIiwhMCk7JChWLHJlLF9lLCJcdTI2NjEiLCJcXGhlYXJ0c3VpdCIsITApOyQoVixyZSxfZSwiXHUyMTExIiwiXFxJbSIsITApOyQoVixyZSxfZSwiXHUyNjYwIiwiXFxzcGFkZXN1aXQiLCEwKTskKFYscmUsX2UsIlx4QTciLCJcXFMiLCEwKTskKGl0LHJlLF9lLCJceEE3IiwiXFxTIik7JChWLHJlLF9lLCJceEI2IiwiXFxQIiwhMCk7JChpdCxyZSxfZSwiXHhCNiIsIlxcUCIpOyQoVixyZSxfZSwiXHUyMDIwIiwiXFxkYWciKTskKGl0LHJlLF9lLCJcdTIwMjAiLCJcXGRhZyIpOyQoaXQscmUsX2UsIlx1MjAyMCIsIlxcdGV4dGRhZ2dlciIpOyQoVixyZSxfZSwiXHUyMDIxIiwiXFxkZGFnIik7JChpdCxyZSxfZSwiXHUyMDIxIiwiXFxkZGFnIik7JChpdCxyZSxfZSwiXHUyMDIxIiwiXFx0ZXh0ZGFnZ2VyZGJsIik7JChWLHJlLGVzLCJcdTIzQjEiLCJcXHJtb3VzdGFjaGUiLCEwKTskKFYscmUsZW8sIlx1MjNCMCIsIlxcbG1vdXN0YWNoZSIsITApOyQoVixyZSxlcywiXHUyN0VGIiwiXFxyZ3JvdXAiLCEwKTskKFYscmUsZW8sIlx1MjdFRSIsIlxcbGdyb3VwIiwhMCk7JChWLHJlLEx0LCJcdTIyMTMiLCJcXG1wIiwhMCk7JChWLHJlLEx0LCJcdTIyOTYiLCJcXG9taW51cyIsITApOyQoVixyZSxMdCwiXHUyMjhFIiwiXFx1cGx1cyIsITApOyQoVixyZSxMdCwiXHUyMjkzIiwiXFxzcWNhcCIsITApOyQoVixyZSxMdCwiXHUyMjE3IiwiXFxhc3QiKTskKFYscmUsTHQsIlx1MjI5NCIsIlxcc3FjdXAiLCEwKTskKFYscmUsTHQsIlx1MjVFRiIsIlxcYmlnY2lyYyIsITApOyQoVixyZSxMdCwiXHUyMjE5IiwiXFxidWxsZXQiLCEwKTskKFYscmUsTHQsIlx1MjAyMSIsIlxcZGRhZ2dlciIpOyQoVixyZSxMdCwiXHUyMjQwIiwiXFx3ciIsITApOyQoVixyZSxMdCwiXHUyQTNGIiwiXFxhbWFsZyIpOyQoVixyZSxMdCwiJiIsIlxcQW5kIik7JChWLHJlLHdlLCJcdTI3RjUiLCJcXGxvbmdsZWZ0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFEMCIsIlxcTGVmdGFycm93IiwhMCk7JChWLHJlLHdlLCJcdTI3RjgiLCJcXExvbmdsZWZ0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjdGNiIsIlxcbG9uZ3JpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFEMiIsIlxcUmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyN0Y5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMTk0IiwiXFxsZWZ0cmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyN0Y3IiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFENCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjdGQSIsIlxcTG9uZ2xlZnRyaWdodGFycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxQTYiLCJcXG1hcHN0byIsITApOyQoVixyZSx3ZSwiXHUyN0ZDIiwiXFxsb25nbWFwc3RvIiwhMCk7JChWLHJlLHdlLCJcdTIxOTciLCJcXG5lYXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFBOSIsIlxcaG9va2xlZnRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUFBIiwiXFxob29rcmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMTk4IiwiXFxzZWFycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxQkMiLCJcXGxlZnRoYXJwb29udXAiLCEwKTskKFYscmUsd2UsIlx1MjFDMCIsIlxccmlnaHRoYXJwb29udXAiLCEwKTskKFYscmUsd2UsIlx1MjE5OSIsIlxcc3dhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUJEIiwiXFxsZWZ0aGFycG9vbmRvd24iLCEwKTskKFYscmUsd2UsIlx1MjFDMSIsIlxccmlnaHRoYXJwb29uZG93biIsITApOyQoVixyZSx3ZSwiXHUyMTk2IiwiXFxud2Fycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxQ0MiLCJcXHJpZ2h0bGVmdGhhcnBvb25zIiwhMCk7JChWLGJlLHdlLCJcdTIyNkUiLCJcXG5sZXNzIiwhMCk7JChWLGJlLHdlLCJcdUUwMTAiLCJcXEBubGVxc2xhbnQiKTskKFYsYmUsd2UsIlx1RTAxMSIsIlxcQG5sZXFxIik7JChWLGJlLHdlLCJcdTJBODciLCJcXGxuZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI2OCIsIlxcbG5lcXEiLCEwKTskKFYsYmUsd2UsIlx1RTAwQyIsIlxcQGx2ZXJ0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMkU2IiwiXFxsbnNpbSIsITApOyQoVixiZSx3ZSwiXHUyQTg5IiwiXFxsbmFwcHJveCIsITApOyQoVixiZSx3ZSwiXHUyMjgwIiwiXFxucHJlYyIsITApOyQoVixiZSx3ZSwiXHUyMkUwIiwiXFxucHJlY2VxIiwhMCk7JChWLGJlLHdlLCJcdTIyRTgiLCJcXHByZWNuc2ltIiwhMCk7JChWLGJlLHdlLCJcdTJBQjkiLCJcXHByZWNuYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyNDEiLCJcXG5zaW0iLCEwKTskKFYsYmUsd2UsIlx1RTAwNiIsIlxcQG5zaG9ydG1pZCIpOyQoVixiZSx3ZSwiXHUyMjI0IiwiXFxubWlkIiwhMCk7JChWLGJlLHdlLCJcdTIyQUMiLCJcXG52ZGFzaCIsITApOyQoVixiZSx3ZSwiXHUyMkFEIiwiXFxudkRhc2giLCEwKTskKFYsYmUsd2UsIlx1MjJFQSIsIlxcbnRyaWFuZ2xlbGVmdCIpOyQoVixiZSx3ZSwiXHUyMkVDIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI4QSIsIlxcc3Vic2V0bmVxIiwhMCk7JChWLGJlLHdlLCJcdUUwMUEiLCJcXEB2YXJzdWJzZXRuZXEiKTskKFYsYmUsd2UsIlx1MkFDQiIsIlxcc3Vic2V0bmVxcSIsITApOyQoVixiZSx3ZSwiXHVFMDE3IiwiXFxAdmFyc3Vic2V0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMjZGIiwiXFxuZ3RyIiwhMCk7JChWLGJlLHdlLCJcdUUwMEYiLCJcXEBuZ2Vxc2xhbnQiKTskKFYsYmUsd2UsIlx1RTAwRSIsIlxcQG5nZXFxIik7JChWLGJlLHdlLCJcdTJBODgiLCJcXGduZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI2OSIsIlxcZ25lcXEiLCEwKTskKFYsYmUsd2UsIlx1RTAwRCIsIlxcQGd2ZXJ0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMkU3IiwiXFxnbnNpbSIsITApOyQoVixiZSx3ZSwiXHUyQThBIiwiXFxnbmFwcHJveCIsITApOyQoVixiZSx3ZSwiXHUyMjgxIiwiXFxuc3VjYyIsITApOyQoVixiZSx3ZSwiXHUyMkUxIiwiXFxuc3VjY2VxIiwhMCk7JChWLGJlLHdlLCJcdTIyRTkiLCJcXHN1Y2Nuc2ltIiwhMCk7JChWLGJlLHdlLCJcdTJBQkEiLCJcXHN1Y2NuYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyNDYiLCJcXG5jb25nIiwhMCk7JChWLGJlLHdlLCJcdUUwMDciLCJcXEBuc2hvcnRwYXJhbGxlbCIpOyQoVixiZSx3ZSwiXHUyMjI2IiwiXFxucGFyYWxsZWwiLCEwKTskKFYsYmUsd2UsIlx1MjJBRiIsIlxcblZEYXNoIiwhMCk7JChWLGJlLHdlLCJcdTIyRUIiLCJcXG50cmlhbmdsZXJpZ2h0Iik7JChWLGJlLHdlLCJcdTIyRUQiLCJcXG50cmlhbmdsZXJpZ2h0ZXEiLCEwKTskKFYsYmUsd2UsIlx1RTAxOCIsIlxcQG5zdXBzZXRlcXEiKTskKFYsYmUsd2UsIlx1MjI4QiIsIlxcc3Vwc2V0bmVxIiwhMCk7JChWLGJlLHdlLCJcdUUwMUIiLCJcXEB2YXJzdXBzZXRuZXEiKTskKFYsYmUsd2UsIlx1MkFDQyIsIlxcc3Vwc2V0bmVxcSIsITApOyQoVixiZSx3ZSwiXHVFMDE5IiwiXFxAdmFyc3Vwc2V0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMkFFIiwiXFxuVmRhc2giLCEwKTskKFYsYmUsd2UsIlx1MkFCNSIsIlxccHJlY25lcXEiLCEwKTskKFYsYmUsd2UsIlx1MkFCNiIsIlxcc3VjY25lcXEiLCEwKTskKFYsYmUsd2UsIlx1RTAxNiIsIlxcQG5zdWJzZXRlcXEiKTskKFYsYmUsTHQsIlx1MjJCNCIsIlxcdW5saGQiKTskKFYsYmUsTHQsIlx1MjJCNSIsIlxcdW5yaGQiKTskKFYsYmUsd2UsIlx1MjE5QSIsIlxcbmxlZnRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMTlCIiwiXFxucmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUNEIiwiXFxuTGVmdGFycm93IiwhMCk7JChWLGJlLHdlLCJcdTIxQ0YiLCJcXG5SaWdodGFycm93IiwhMCk7JChWLGJlLHdlLCJcdTIxQUUiLCJcXG5sZWZ0cmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUNFIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKTskKFYsYmUsd2UsIlx1MjVCMyIsIlxcdmFydHJpYW5nbGUiKTskKFYsYmUsX2UsIlx1MjEwRiIsIlxcaHNsYXNoIik7JChWLGJlLF9lLCJcdTI1QkQiLCJcXHRyaWFuZ2xlZG93biIpOyQoVixiZSxfZSwiXHUyNUNBIiwiXFxsb3plbmdlIik7JChWLGJlLF9lLCJcdTI0QzgiLCJcXGNpcmNsZWRTIik7JChWLGJlLF9lLCJceEFFIiwiXFxjaXJjbGVkUiIpOyQoaXQsYmUsX2UsIlx4QUUiLCJcXGNpcmNsZWRSIik7JChWLGJlLF9lLCJcdTIyMjEiLCJcXG1lYXN1cmVkYW5nbGUiLCEwKTskKFYsYmUsX2UsIlx1MjIwNCIsIlxcbmV4aXN0cyIpOyQoVixiZSxfZSwiXHUyMTI3IiwiXFxtaG8iKTskKFYsYmUsX2UsIlx1MjEzMiIsIlxcRmludiIsITApOyQoVixiZSxfZSwiXHUyMTQxIiwiXFxHYW1lIiwhMCk7JChWLGJlLF9lLCJcdTIwMzUiLCJcXGJhY2twcmltZSIpOyQoVixiZSxfZSwiXHUyNUIyIiwiXFxibGFja3RyaWFuZ2xlIik7JChWLGJlLF9lLCJcdTI1QkMiLCJcXGJsYWNrdHJpYW5nbGVkb3duIik7JChWLGJlLF9lLCJcdTI1QTAiLCJcXGJsYWNrc3F1YXJlIik7JChWLGJlLF9lLCJcdTI5RUIiLCJcXGJsYWNrbG96ZW5nZSIpOyQoVixiZSxfZSwiXHUyNjA1IiwiXFxiaWdzdGFyIik7JChWLGJlLF9lLCJcdTIyMjIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCk7JChWLGJlLF9lLCJcdTIyMDEiLCJcXGNvbXBsZW1lbnQiLCEwKTskKFYsYmUsX2UsIlx4RjAiLCJcXGV0aCIsITApOyQoaXQscmUsX2UsIlx4RjAiLCJceEYwIik7JChWLGJlLF9lLCJcdTI1NzEiLCJcXGRpYWd1cCIpOyQoVixiZSxfZSwiXHUyNTcyIiwiXFxkaWFnZG93biIpOyQoVixiZSxfZSwiXHUyNUExIiwiXFxzcXVhcmUiKTskKFYsYmUsX2UsIlx1MjVBMSIsIlxcQm94Iik7JChWLGJlLF9lLCJcdTI1Q0EiLCJcXERpYW1vbmQiKTskKFYsYmUsX2UsIlx4QTUiLCJcXHllbiIsITApOyQoaXQsYmUsX2UsIlx4QTUiLCJcXHllbiIsITApOyQoVixiZSxfZSwiXHUyNzEzIiwiXFxjaGVja21hcmsiLCEwKTskKGl0LGJlLF9lLCJcdTI3MTMiLCJcXGNoZWNrbWFyayIpOyQoVixiZSxfZSwiXHUyMTM2IiwiXFxiZXRoIiwhMCk7JChWLGJlLF9lLCJcdTIxMzgiLCJcXGRhbGV0aCIsITApOyQoVixiZSxfZSwiXHUyMTM3IiwiXFxnaW1lbCIsITApOyQoVixiZSxfZSwiXHUwM0REIiwiXFxkaWdhbW1hIiwhMCk7JChWLGJlLF9lLCJcdTAzRjAiLCJcXHZhcmthcHBhIik7JChWLGJlLGVvLCJcdTI1MEMiLCJcXEB1bGNvcm5lciIsITApOyQoVixiZSxlcywiXHUyNTEwIiwiXFxAdXJjb3JuZXIiLCEwKTskKFYsYmUsZW8sIlx1MjUxNCIsIlxcQGxsY29ybmVyIiwhMCk7JChWLGJlLGVzLCJcdTI1MTgiLCJcXEBscmNvcm5lciIsITApOyQoVixiZSx3ZSwiXHUyMjY2IiwiXFxsZXFxIiwhMCk7JChWLGJlLHdlLCJcdTJBN0QiLCJcXGxlcXNsYW50IiwhMCk7JChWLGJlLHdlLCJcdTJBOTUiLCJcXGVxc2xhbnRsZXNzIiwhMCk7JChWLGJlLHdlLCJcdTIyNzIiLCJcXGxlc3NzaW0iLCEwKTskKFYsYmUsd2UsIlx1MkE4NSIsIlxcbGVzc2FwcHJveCIsITApOyQoVixiZSx3ZSwiXHUyMjRBIiwiXFxhcHByb3hlcSIsITApOyQoVixiZSxMdCwiXHUyMkQ2IiwiXFxsZXNzZG90Iik7JChWLGJlLHdlLCJcdTIyRDgiLCJcXGxsbCIsITApOyQoVixiZSx3ZSwiXHUyMjc2IiwiXFxsZXNzZ3RyIiwhMCk7JChWLGJlLHdlLCJcdTIyREEiLCJcXGxlc3NlcWd0ciIsITApOyQoVixiZSx3ZSwiXHUyQThCIiwiXFxsZXNzZXFxZ3RyIiwhMCk7JChWLGJlLHdlLCJcdTIyNTEiLCJcXGRvdGVxZG90Iik7JChWLGJlLHdlLCJcdTIyNTMiLCJcXHJpc2luZ2RvdHNlcSIsITApOyQoVixiZSx3ZSwiXHUyMjUyIiwiXFxmYWxsaW5nZG90c2VxIiwhMCk7JChWLGJlLHdlLCJcdTIyM0QiLCJcXGJhY2tzaW0iLCEwKTskKFYsYmUsd2UsIlx1MjJDRCIsIlxcYmFja3NpbWVxIiwhMCk7JChWLGJlLHdlLCJcdTJBQzUiLCJcXHN1YnNldGVxcSIsITApOyQoVixiZSx3ZSwiXHUyMkQwIiwiXFxTdWJzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI4RiIsIlxcc3FzdWJzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI3QyIsIlxccHJlY2N1cmx5ZXEiLCEwKTskKFYsYmUsd2UsIlx1MjJERSIsIlxcY3VybHllcXByZWMiLCEwKTskKFYsYmUsd2UsIlx1MjI3RSIsIlxccHJlY3NpbSIsITApOyQoVixiZSx3ZSwiXHUyQUI3IiwiXFxwcmVjYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyQjIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpOyQoVixiZSx3ZSwiXHUyMkI0IiwiXFx0cmlhbmdsZWxlZnRlcSIpOyQoVixiZSx3ZSwiXHUyMkE4IiwiXFx2RGFzaCIsITApOyQoVixiZSx3ZSwiXHUyMkFBIiwiXFxWdmRhc2giLCEwKTskKFYsYmUsd2UsIlx1MjMyMyIsIlxcc21hbGxzbWlsZSIpOyQoVixiZSx3ZSwiXHUyMzIyIiwiXFxzbWFsbGZyb3duIik7JChWLGJlLHdlLCJcdTIyNEYiLCJcXGJ1bXBlcSIsITApOyQoVixiZSx3ZSwiXHUyMjRFIiwiXFxCdW1wZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI2NyIsIlxcZ2VxcSIsITApOyQoVixiZSx3ZSwiXHUyQTdFIiwiXFxnZXFzbGFudCIsITApOyQoVixiZSx3ZSwiXHUyQTk2IiwiXFxlcXNsYW50Z3RyIiwhMCk7JChWLGJlLHdlLCJcdTIyNzMiLCJcXGd0cnNpbSIsITApOyQoVixiZSx3ZSwiXHUyQTg2IiwiXFxndHJhcHByb3giLCEwKTskKFYsYmUsTHQsIlx1MjJENyIsIlxcZ3RyZG90Iik7JChWLGJlLHdlLCJcdTIyRDkiLCJcXGdnZyIsITApOyQoVixiZSx3ZSwiXHUyMjc3IiwiXFxndHJsZXNzIiwhMCk7JChWLGJlLHdlLCJcdTIyREIiLCJcXGd0cmVxbGVzcyIsITApOyQoVixiZSx3ZSwiXHUyQThDIiwiXFxndHJlcXFsZXNzIiwhMCk7JChWLGJlLHdlLCJcdTIyNTYiLCJcXGVxY2lyYyIsITApOyQoVixiZSx3ZSwiXHUyMjU3IiwiXFxjaXJjZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI1QyIsIlxcdHJpYW5nbGVxIiwhMCk7JChWLGJlLHdlLCJcdTIyM0MiLCJcXHRoaWNrc2ltIik7JChWLGJlLHdlLCJcdTIyNDgiLCJcXHRoaWNrYXBwcm94Iik7JChWLGJlLHdlLCJcdTJBQzYiLCJcXHN1cHNldGVxcSIsITApOyQoVixiZSx3ZSwiXHUyMkQxIiwiXFxTdXBzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI5MCIsIlxcc3FzdXBzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI3RCIsIlxcc3VjY2N1cmx5ZXEiLCEwKTskKFYsYmUsd2UsIlx1MjJERiIsIlxcY3VybHllcXN1Y2MiLCEwKTskKFYsYmUsd2UsIlx1MjI3RiIsIlxcc3VjY3NpbSIsITApOyQoVixiZSx3ZSwiXHUyQUI4IiwiXFxzdWNjYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyQjMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKTskKFYsYmUsd2UsIlx1MjJCNSIsIlxcdHJpYW5nbGVyaWdodGVxIik7JChWLGJlLHdlLCJcdTIyQTkiLCJcXFZkYXNoIiwhMCk7JChWLGJlLHdlLCJcdTIyMjMiLCJcXHNob3J0bWlkIik7JChWLGJlLHdlLCJcdTIyMjUiLCJcXHNob3J0cGFyYWxsZWwiKTskKFYsYmUsd2UsIlx1MjI2QyIsIlxcYmV0d2VlbiIsITApOyQoVixiZSx3ZSwiXHUyMkQ0IiwiXFxwaXRjaGZvcmsiLCEwKTskKFYsYmUsd2UsIlx1MjIxRCIsIlxcdmFycHJvcHRvIik7JChWLGJlLHdlLCJcdTI1QzAiLCJcXGJsYWNrdHJpYW5nbGVsZWZ0Iik7JChWLGJlLHdlLCJcdTIyMzQiLCJcXHRoZXJlZm9yZSIsITApOyQoVixiZSx3ZSwiXHUyMjBEIiwiXFxiYWNrZXBzaWxvbiIpOyQoVixiZSx3ZSwiXHUyNUI2IiwiXFxibGFja3RyaWFuZ2xlcmlnaHQiKTskKFYsYmUsd2UsIlx1MjIzNSIsIlxcYmVjYXVzZSIsITApOyQoVixiZSx3ZSwiXHUyMkQ4IiwiXFxsbGxlc3MiKTskKFYsYmUsd2UsIlx1MjJEOSIsIlxcZ2dndHIiKTskKFYsYmUsTHQsIlx1MjJCMiIsIlxcbGhkIik7JChWLGJlLEx0LCJcdTIyQjMiLCJcXHJoZCIpOyQoVixiZSx3ZSwiXHUyMjQyIiwiXFxlcXNpbSIsITApOyQoVixyZSx3ZSwiXHUyMkM4IiwiXFxKb2luIik7JChWLGJlLHdlLCJcdTIyNTEiLCJcXERvdGVxIiwhMCk7JChWLGJlLEx0LCJcdTIyMTQiLCJcXGRvdHBsdXMiLCEwKTskKFYsYmUsTHQsIlx1MjIxNiIsIlxcc21hbGxzZXRtaW51cyIpOyQoVixiZSxMdCwiXHUyMkQyIiwiXFxDYXAiLCEwKTskKFYsYmUsTHQsIlx1MjJEMyIsIlxcQ3VwIiwhMCk7JChWLGJlLEx0LCJcdTJBNUUiLCJcXGRvdWJsZWJhcndlZGdlIiwhMCk7JChWLGJlLEx0LCJcdTIyOUYiLCJcXGJveG1pbnVzIiwhMCk7JChWLGJlLEx0LCJcdTIyOUUiLCJcXGJveHBsdXMiLCEwKTskKFYsYmUsTHQsIlx1MjJDNyIsIlxcZGl2aWRlb250aW1lcyIsITApOyQoVixiZSxMdCwiXHUyMkM5IiwiXFxsdGltZXMiLCEwKTskKFYsYmUsTHQsIlx1MjJDQSIsIlxccnRpbWVzIiwhMCk7JChWLGJlLEx0LCJcdTIyQ0IiLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCk7JChWLGJlLEx0LCJcdTIyQ0MiLCJcXHJpZ2h0dGhyZWV0aW1lcyIsITApOyQoVixiZSxMdCwiXHUyMkNGIiwiXFxjdXJseXdlZGdlIiwhMCk7JChWLGJlLEx0LCJcdTIyQ0UiLCJcXGN1cmx5dmVlIiwhMCk7JChWLGJlLEx0LCJcdTIyOUQiLCJcXGNpcmNsZWRkYXNoIiwhMCk7JChWLGJlLEx0LCJcdTIyOUIiLCJcXGNpcmNsZWRhc3QiLCEwKTskKFYsYmUsTHQsIlx1MjJDNSIsIlxcY2VudGVyZG90Iik7JChWLGJlLEx0LCJcdTIyQkEiLCJcXGludGVyY2FsIiwhMCk7JChWLGJlLEx0LCJcdTIyRDIiLCJcXGRvdWJsZWNhcCIpOyQoVixiZSxMdCwiXHUyMkQzIiwiXFxkb3VibGVjdXAiKTskKFYsYmUsTHQsIlx1MjJBMCIsIlxcYm94dGltZXMiLCEwKTskKFYsYmUsd2UsIlx1MjFFMiIsIlxcZGFzaHJpZ2h0YXJyb3ciLCEwKTskKFYsYmUsd2UsIlx1MjFFMCIsIlxcZGFzaGxlZnRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUM3IiwiXFxsZWZ0bGVmdGFycm93cyIsITApOyQoVixiZSx3ZSwiXHUyMUM2IiwiXFxsZWZ0cmlnaHRhcnJvd3MiLCEwKTskKFYsYmUsd2UsIlx1MjFEQSIsIlxcTGxlZnRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMTlFIiwiXFx0d29oZWFkbGVmdGFycm93IiwhMCk7JChWLGJlLHdlLCJcdTIxQTIiLCJcXGxlZnRhcnJvd3RhaWwiLCEwKTskKFYsYmUsd2UsIlx1MjFBQiIsIlxcbG9vcGFycm93bGVmdCIsITApOyQoVixiZSx3ZSwiXHUyMUNCIiwiXFxsZWZ0cmlnaHRoYXJwb29ucyIsITApOyQoVixiZSx3ZSwiXHUyMUI2IiwiXFxjdXJ2ZWFycm93bGVmdCIsITApOyQoVixiZSx3ZSwiXHUyMUJBIiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKTskKFYsYmUsd2UsIlx1MjFCMCIsIlxcTHNoIiwhMCk7JChWLGJlLHdlLCJcdTIxQzgiLCJcXHVwdXBhcnJvd3MiLCEwKTskKFYsYmUsd2UsIlx1MjFCRiIsIlxcdXBoYXJwb29ubGVmdCIsITApOyQoVixiZSx3ZSwiXHUyMUMzIiwiXFxkb3duaGFycG9vbmxlZnQiLCEwKTskKFYscmUsd2UsIlx1MjJCNiIsIlxcb3JpZ29mIiwhMCk7JChWLHJlLHdlLCJcdTIyQjciLCJcXGltYWdlb2YiLCEwKTskKFYsYmUsd2UsIlx1MjJCOCIsIlxcbXVsdGltYXAiLCEwKTskKFYsYmUsd2UsIlx1MjFBRCIsIlxcbGVmdHJpZ2h0c3F1aWdhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUM5IiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCk7JChWLGJlLHdlLCJcdTIxQzQiLCJcXHJpZ2h0bGVmdGFycm93cyIsITApOyQoVixiZSx3ZSwiXHUyMUEwIiwiXFx0d29oZWFkcmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUEzIiwiXFxyaWdodGFycm93dGFpbCIsITApOyQoVixiZSx3ZSwiXHUyMUFDIiwiXFxsb29wYXJyb3dyaWdodCIsITApOyQoVixiZSx3ZSwiXHUyMUI3IiwiXFxjdXJ2ZWFycm93cmlnaHQiLCEwKTskKFYsYmUsd2UsIlx1MjFCQiIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApOyQoVixiZSx3ZSwiXHUyMUIxIiwiXFxSc2giLCEwKTskKFYsYmUsd2UsIlx1MjFDQSIsIlxcZG93bmRvd25hcnJvd3MiLCEwKTskKFYsYmUsd2UsIlx1MjFCRSIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKTskKFYsYmUsd2UsIlx1MjFDMiIsIlxcZG93bmhhcnBvb25yaWdodCIsITApOyQoVixiZSx3ZSwiXHUyMUREIiwiXFxyaWdodHNxdWlnYXJyb3ciLCEwKTskKFYsYmUsd2UsIlx1MjFERCIsIlxcbGVhZHN0byIpOyQoVixiZSx3ZSwiXHUyMURCIiwiXFxScmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUJFIiwiXFxyZXN0cmljdGlvbiIpOyQoVixyZSxfZSwiXHUyMDE4IiwiYCIpOyQoVixyZSxfZSwiJCIsIlxcJCIpOyQoaXQscmUsX2UsIiQiLCJcXCQiKTskKGl0LHJlLF9lLCIkIiwiXFx0ZXh0ZG9sbGFyIik7JChWLHJlLF9lLCIlIiwiXFwlIik7JChpdCxyZSxfZSwiJSIsIlxcJSIpOyQoVixyZSxfZSwiXyIsIlxcXyIpOyQoaXQscmUsX2UsIl8iLCJcXF8iKTskKGl0LHJlLF9lLCJfIiwiXFx0ZXh0dW5kZXJzY29yZSIpOyQoVixyZSxfZSwiXHUyMjIwIiwiXFxhbmdsZSIsITApOyQoVixyZSxfZSwiXHUyMjFFIiwiXFxpbmZ0eSIsITApOyQoVixyZSxfZSwiXHUyMDMyIiwiXFxwcmltZSIpOyQoVixyZSxfZSwiXHUyNUIzIiwiXFx0cmlhbmdsZSIpOyQoVixyZSxfZSwiXHUwMzkzIiwiXFxHYW1tYSIsITApOyQoVixyZSxfZSwiXHUwMzk0IiwiXFxEZWx0YSIsITApOyQoVixyZSxfZSwiXHUwMzk4IiwiXFxUaGV0YSIsITApOyQoVixyZSxfZSwiXHUwMzlCIiwiXFxMYW1iZGEiLCEwKTskKFYscmUsX2UsIlx1MDM5RSIsIlxcWGkiLCEwKTskKFYscmUsX2UsIlx1MDNBMCIsIlxcUGkiLCEwKTskKFYscmUsX2UsIlx1MDNBMyIsIlxcU2lnbWEiLCEwKTskKFYscmUsX2UsIlx1MDNBNSIsIlxcVXBzaWxvbiIsITApOyQoVixyZSxfZSwiXHUwM0E2IiwiXFxQaGkiLCEwKTskKFYscmUsX2UsIlx1MDNBOCIsIlxcUHNpIiwhMCk7JChWLHJlLF9lLCJcdTAzQTkiLCJcXE9tZWdhIiwhMCk7JChWLHJlLF9lLCJBIiwiXHUwMzkxIik7JChWLHJlLF9lLCJCIiwiXHUwMzkyIik7JChWLHJlLF9lLCJFIiwiXHUwMzk1Iik7JChWLHJlLF9lLCJaIiwiXHUwMzk2Iik7JChWLHJlLF9lLCJIIiwiXHUwMzk3Iik7JChWLHJlLF9lLCJJIiwiXHUwMzk5Iik7JChWLHJlLF9lLCJLIiwiXHUwMzlBIik7JChWLHJlLF9lLCJNIiwiXHUwMzlDIik7JChWLHJlLF9lLCJOIiwiXHUwMzlEIik7JChWLHJlLF9lLCJPIiwiXHUwMzlGIik7JChWLHJlLF9lLCJQIiwiXHUwM0ExIik7JChWLHJlLF9lLCJUIiwiXHUwM0E0Iik7JChWLHJlLF9lLCJYIiwiXHUwM0E3Iik7JChWLHJlLF9lLCJceEFDIiwiXFxuZWciLCEwKTskKFYscmUsX2UsIlx4QUMiLCJcXGxub3QiKTskKFYscmUsX2UsIlx1MjJBNCIsIlxcdG9wIik7JChWLHJlLF9lLCJcdTIyQTUiLCJcXGJvdCIpOyQoVixyZSxfZSwiXHUyMjA1IiwiXFxlbXB0eXNldCIpOyQoVixiZSxfZSwiXHUyMjA1IiwiXFx2YXJub3RoaW5nIik7JChWLHJlLHRyLCJcdTAzQjEiLCJcXGFscGhhIiwhMCk7JChWLHJlLHRyLCJcdTAzQjIiLCJcXGJldGEiLCEwKTskKFYscmUsdHIsIlx1MDNCMyIsIlxcZ2FtbWEiLCEwKTskKFYscmUsdHIsIlx1MDNCNCIsIlxcZGVsdGEiLCEwKTskKFYscmUsdHIsIlx1MDNGNSIsIlxcZXBzaWxvbiIsITApOyQoVixyZSx0ciwiXHUwM0I2IiwiXFx6ZXRhIiwhMCk7JChWLHJlLHRyLCJcdTAzQjciLCJcXGV0YSIsITApOyQoVixyZSx0ciwiXHUwM0I4IiwiXFx0aGV0YSIsITApOyQoVixyZSx0ciwiXHUwM0I5IiwiXFxpb3RhIiwhMCk7JChWLHJlLHRyLCJcdTAzQkEiLCJcXGthcHBhIiwhMCk7JChWLHJlLHRyLCJcdTAzQkIiLCJcXGxhbWJkYSIsITApOyQoVixyZSx0ciwiXHUwM0JDIiwiXFxtdSIsITApOyQoVixyZSx0ciwiXHUwM0JEIiwiXFxudSIsITApOyQoVixyZSx0ciwiXHUwM0JFIiwiXFx4aSIsITApOyQoVixyZSx0ciwiXHUwM0JGIiwiXFxvbWljcm9uIiwhMCk7JChWLHJlLHRyLCJcdTAzQzAiLCJcXHBpIiwhMCk7JChWLHJlLHRyLCJcdTAzQzEiLCJcXHJobyIsITApOyQoVixyZSx0ciwiXHUwM0MzIiwiXFxzaWdtYSIsITApOyQoVixyZSx0ciwiXHUwM0M0IiwiXFx0YXUiLCEwKTskKFYscmUsdHIsIlx1MDNDNSIsIlxcdXBzaWxvbiIsITApOyQoVixyZSx0ciwiXHUwM0Q1IiwiXFxwaGkiLCEwKTskKFYscmUsdHIsIlx1MDNDNyIsIlxcY2hpIiwhMCk7JChWLHJlLHRyLCJcdTAzQzgiLCJcXHBzaSIsITApOyQoVixyZSx0ciwiXHUwM0M5IiwiXFxvbWVnYSIsITApOyQoVixyZSx0ciwiXHUwM0I1IiwiXFx2YXJlcHNpbG9uIiwhMCk7JChWLHJlLHRyLCJcdTAzRDEiLCJcXHZhcnRoZXRhIiwhMCk7JChWLHJlLHRyLCJcdTAzRDYiLCJcXHZhcnBpIiwhMCk7JChWLHJlLHRyLCJcdTAzRjEiLCJcXHZhcnJobyIsITApOyQoVixyZSx0ciwiXHUwM0MyIiwiXFx2YXJzaWdtYSIsITApOyQoVixyZSx0ciwiXHUwM0M2IiwiXFx2YXJwaGkiLCEwKTskKFYscmUsTHQsIlx1MjIxNyIsIioiLCEwKTskKFYscmUsTHQsIisiLCIrIik7JChWLHJlLEx0LCJcdTIyMTIiLCItIiwhMCk7JChWLHJlLEx0LCJcdTIyQzUiLCJcXGNkb3QiLCEwKTskKFYscmUsTHQsIlx1MjIxOCIsIlxcY2lyYyIsITApOyQoVixyZSxMdCwiXHhGNyIsIlxcZGl2IiwhMCk7JChWLHJlLEx0LCJceEIxIiwiXFxwbSIsITApOyQoVixyZSxMdCwiXHhENyIsIlxcdGltZXMiLCEwKTskKFYscmUsTHQsIlx1MjIyOSIsIlxcY2FwIiwhMCk7JChWLHJlLEx0LCJcdTIyMkEiLCJcXGN1cCIsITApOyQoVixyZSxMdCwiXHUyMjE2IiwiXFxzZXRtaW51cyIsITApOyQoVixyZSxMdCwiXHUyMjI3IiwiXFxsYW5kIik7JChWLHJlLEx0LCJcdTIyMjgiLCJcXGxvciIpOyQoVixyZSxMdCwiXHUyMjI3IiwiXFx3ZWRnZSIsITApOyQoVixyZSxMdCwiXHUyMjI4IiwiXFx2ZWUiLCEwKTskKFYscmUsX2UsIlx1MjIxQSIsIlxcc3VyZCIpOyQoVixyZSxlbywiXHUyN0U4IiwiXFxsYW5nbGUiLCEwKTskKFYscmUsZW8sIlx1MjIyMyIsIlxcbHZlcnQiKTskKFYscmUsZW8sIlx1MjIyNSIsIlxcbFZlcnQiKTskKFYscmUsZXMsIj8iLCI/Iik7JChWLHJlLGVzLCIhIiwiISIpOyQoVixyZSxlcywiXHUyN0U5IiwiXFxyYW5nbGUiLCEwKTskKFYscmUsZXMsIlx1MjIyMyIsIlxccnZlcnQiKTskKFYscmUsZXMsIlx1MjIyNSIsIlxcclZlcnQiKTskKFYscmUsd2UsIj0iLCI9Iik7JChWLHJlLHdlLCI6IiwiOiIpOyQoVixyZSx3ZSwiXHUyMjQ4IiwiXFxhcHByb3giLCEwKTskKFYscmUsd2UsIlx1MjI0NSIsIlxcY29uZyIsITApOyQoVixyZSx3ZSwiXHUyMjY1IiwiXFxnZSIpOyQoVixyZSx3ZSwiXHUyMjY1IiwiXFxnZXEiLCEwKTskKFYscmUsd2UsIlx1MjE5MCIsIlxcZ2V0cyIpOyQoVixyZSx3ZSwiPiIsIlxcZ3QiLCEwKTskKFYscmUsd2UsIlx1MjIwOCIsIlxcaW4iLCEwKTskKFYscmUsd2UsIlx1RTAyMCIsIlxcQG5vdCIpOyQoVixyZSx3ZSwiXHUyMjgyIiwiXFxzdWJzZXQiLCEwKTskKFYscmUsd2UsIlx1MjI4MyIsIlxcc3Vwc2V0IiwhMCk7JChWLHJlLHdlLCJcdTIyODYiLCJcXHN1YnNldGVxIiwhMCk7JChWLHJlLHdlLCJcdTIyODciLCJcXHN1cHNldGVxIiwhMCk7JChWLGJlLHdlLCJcdTIyODgiLCJcXG5zdWJzZXRlcSIsITApOyQoVixiZSx3ZSwiXHUyMjg5IiwiXFxuc3Vwc2V0ZXEiLCEwKTskKFYscmUsd2UsIlx1MjJBOCIsIlxcbW9kZWxzIik7JChWLHJlLHdlLCJcdTIxOTAiLCJcXGxlZnRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMjY0IiwiXFxsZSIpOyQoVixyZSx3ZSwiXHUyMjY0IiwiXFxsZXEiLCEwKTskKFYscmUsd2UsIjwiLCJcXGx0IiwhMCk7JChWLHJlLHdlLCJcdTIxOTIiLCJcXHJpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjE5MiIsIlxcdG8iKTskKFYsYmUsd2UsIlx1MjI3MSIsIlxcbmdlcSIsITApOyQoVixiZSx3ZSwiXHUyMjcwIiwiXFxubGVxIiwhMCk7JChWLHJlLGd1LCJceEEwIiwiXFwgIik7JChWLHJlLGd1LCJceEEwIiwiXFxzcGFjZSIpOyQoVixyZSxndSwiXHhBMCIsIlxcbm9icmVha3NwYWNlIik7JChpdCxyZSxndSwiXHhBMCIsIlxcICIpOyQoaXQscmUsZ3UsIlx4QTAiLCIgIik7JChpdCxyZSxndSwiXHhBMCIsIlxcc3BhY2UiKTskKGl0LHJlLGd1LCJceEEwIiwiXFxub2JyZWFrc3BhY2UiKTskKFYscmUsZ3UsbnVsbCwiXFxub2JyZWFrIik7JChWLHJlLGd1LG51bGwsIlxcYWxsb3dicmVhayIpOyQoVixyZSxMNCwiLCIsIiwiKTskKFYscmUsTDQsIjsiLCI7Iik7JChWLGJlLEx0LCJcdTIyQkMiLCJcXGJhcndlZGdlIiwhMCk7JChWLGJlLEx0LCJcdTIyQkIiLCJcXHZlZWJhciIsITApOyQoVixyZSxMdCwiXHUyMjk5IiwiXFxvZG90IiwhMCk7JChWLHJlLEx0LCJcdTIyOTUiLCJcXG9wbHVzIiwhMCk7JChWLHJlLEx0LCJcdTIyOTciLCJcXG90aW1lcyIsITApOyQoVixyZSxfZSwiXHUyMjAyIiwiXFxwYXJ0aWFsIiwhMCk7JChWLHJlLEx0LCJcdTIyOTgiLCJcXG9zbGFzaCIsITApOyQoVixiZSxMdCwiXHUyMjlBIiwiXFxjaXJjbGVkY2lyYyIsITApOyQoVixiZSxMdCwiXHUyMkExIiwiXFxib3hkb3QiLCEwKTskKFYscmUsTHQsIlx1MjVCMyIsIlxcYmlndHJpYW5nbGV1cCIpOyQoVixyZSxMdCwiXHUyNUJEIiwiXFxiaWd0cmlhbmdsZWRvd24iKTskKFYscmUsTHQsIlx1MjAyMCIsIlxcZGFnZ2VyIik7JChWLHJlLEx0LCJcdTIyQzQiLCJcXGRpYW1vbmQiKTskKFYscmUsTHQsIlx1MjJDNiIsIlxcc3RhciIpOyQoVixyZSxMdCwiXHUyNUMzIiwiXFx0cmlhbmdsZWxlZnQiKTskKFYscmUsTHQsIlx1MjVCOSIsIlxcdHJpYW5nbGVyaWdodCIpOyQoVixyZSxlbywieyIsIlxceyIpOyQoaXQscmUsX2UsInsiLCJcXHsiKTskKGl0LHJlLF9lLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iik7JChWLHJlLGVzLCJ9IiwiXFx9Iik7JChpdCxyZSxfZSwifSIsIlxcfSIpOyQoaXQscmUsX2UsIn0iLCJcXHRleHRicmFjZXJpZ2h0Iik7JChWLHJlLGVvLCJ7IiwiXFxsYnJhY2UiKTskKFYscmUsZXMsIn0iLCJcXHJicmFjZSIpOyQoVixyZSxlbywiWyIsIlxcbGJyYWNrIiwhMCk7JChpdCxyZSxfZSwiWyIsIlxcbGJyYWNrIiwhMCk7JChWLHJlLGVzLCJdIiwiXFxyYnJhY2siLCEwKTskKGl0LHJlLF9lLCJdIiwiXFxyYnJhY2siLCEwKTskKFYscmUsZW8sIigiLCJcXGxwYXJlbiIsITApOyQoVixyZSxlcywiKSIsIlxccnBhcmVuIiwhMCk7JChpdCxyZSxfZSwiPCIsIlxcdGV4dGxlc3MiLCEwKTskKGl0LHJlLF9lLCI+IiwiXFx0ZXh0Z3JlYXRlciIsITApOyQoVixyZSxlbywiXHUyMzBBIiwiXFxsZmxvb3IiLCEwKTskKFYscmUsZXMsIlx1MjMwQiIsIlxccmZsb29yIiwhMCk7JChWLHJlLGVvLCJcdTIzMDgiLCJcXGxjZWlsIiwhMCk7JChWLHJlLGVzLCJcdTIzMDkiLCJcXHJjZWlsIiwhMCk7JChWLHJlLF9lLCJcXCIsIlxcYmFja3NsYXNoIik7JChWLHJlLF9lLCJcdTIyMjMiLCJ8Iik7JChWLHJlLF9lLCJcdTIyMjMiLCJcXHZlcnQiKTskKGl0LHJlLF9lLCJ8IiwiXFx0ZXh0YmFyIiwhMCk7JChWLHJlLF9lLCJcdTIyMjUiLCJcXHwiKTskKFYscmUsX2UsIlx1MjIyNSIsIlxcVmVydCIpOyQoaXQscmUsX2UsIlx1MjIyNSIsIlxcdGV4dGJhcmRibCIpOyQoaXQscmUsX2UsIn4iLCJcXHRleHRhc2NpaXRpbGRlIik7JChpdCxyZSxfZSwiXFwiLCJcXHRleHRiYWNrc2xhc2giKTskKGl0LHJlLF9lLCJeIiwiXFx0ZXh0YXNjaWljaXJjdW0iKTskKFYscmUsd2UsIlx1MjE5MSIsIlxcdXBhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUQxIiwiXFxVcGFycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxOTMiLCJcXGRvd25hcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUQzIiwiXFxEb3duYXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjE5NSIsIlxcdXBkb3duYXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFENSIsIlxcVXBkb3duYXJyb3ciLCEwKTskKFYscmUsQ2ksIlx1MjIxMCIsIlxcY29wcm9kIik7JChWLHJlLENpLCJcdTIyQzEiLCJcXGJpZ3ZlZSIpOyQoVixyZSxDaSwiXHUyMkMwIiwiXFxiaWd3ZWRnZSIpOyQoVixyZSxDaSwiXHUyQTA0IiwiXFxiaWd1cGx1cyIpOyQoVixyZSxDaSwiXHUyMkMyIiwiXFxiaWdjYXAiKTskKFYscmUsQ2ksIlx1MjJDMyIsIlxcYmlnY3VwIik7JChWLHJlLENpLCJcdTIyMkIiLCJcXGludCIpOyQoVixyZSxDaSwiXHUyMjJCIiwiXFxpbnRvcCIpOyQoVixyZSxDaSwiXHUyMjJDIiwiXFxpaW50Iik7JChWLHJlLENpLCJcdTIyMkQiLCJcXGlpaW50Iik7JChWLHJlLENpLCJcdTIyMEYiLCJcXHByb2QiKTskKFYscmUsQ2ksIlx1MjIxMSIsIlxcc3VtIik7JChWLHJlLENpLCJcdTJBMDIiLCJcXGJpZ290aW1lcyIpOyQoVixyZSxDaSwiXHUyQTAxIiwiXFxiaWdvcGx1cyIpOyQoVixyZSxDaSwiXHUyQTAwIiwiXFxiaWdvZG90Iik7JChWLHJlLENpLCJcdTIyMkUiLCJcXG9pbnQiKTskKFYscmUsQ2ksIlx1MjIyRiIsIlxcb2lpbnQiKTskKFYscmUsQ2ksIlx1MjIzMCIsIlxcb2lpaW50Iik7JChWLHJlLENpLCJcdTJBMDYiLCJcXGJpZ3NxY3VwIik7JChWLHJlLENpLCJcdTIyMkIiLCJcXHNtYWxsaW50Iik7JChpdCxyZSxTcCwiXHUyMDI2IiwiXFx0ZXh0ZWxsaXBzaXMiKTskKFYscmUsU3AsIlx1MjAyNiIsIlxcbWF0aGVsbGlwc2lzIik7JChpdCxyZSxTcCwiXHUyMDI2IiwiXFxsZG90cyIsITApOyQoVixyZSxTcCwiXHUyMDI2IiwiXFxsZG90cyIsITApOyQoVixyZSxTcCwiXHUyMkVGIiwiXFxAY2RvdHMiLCEwKTskKFYscmUsU3AsIlx1MjJGMSIsIlxcZGRvdHMiLCEwKTskKFYscmUsX2UsIlx1MjJFRSIsIlxcdmFydmRvdHMiKTskKFYscmUsVW4sIlx1MDJDQSIsIlxcYWN1dGUiKTskKFYscmUsVW4sIlx1MDJDQiIsIlxcZ3JhdmUiKTskKFYscmUsVW4sIlx4QTgiLCJcXGRkb3QiKTskKFYscmUsVW4sIn4iLCJcXHRpbGRlIik7JChWLHJlLFVuLCJcdTAyQzkiLCJcXGJhciIpOyQoVixyZSxVbiwiXHUwMkQ4IiwiXFxicmV2ZSIpOyQoVixyZSxVbiwiXHUwMkM3IiwiXFxjaGVjayIpOyQoVixyZSxVbiwiXiIsIlxcaGF0Iik7JChWLHJlLFVuLCJcdTIwRDciLCJcXHZlYyIpOyQoVixyZSxVbiwiXHUwMkQ5IiwiXFxkb3QiKTskKFYscmUsVW4sIlx1MDJEQSIsIlxcbWF0aHJpbmciKTskKFYscmUsdHIsIlx1RTEzMSIsIlxcQGltYXRoIik7JChWLHJlLHRyLCJcdUUyMzciLCJcXEBqbWF0aCIpOyQoVixyZSxfZSwiXHUwMTMxIiwiXHUwMTMxIik7JChWLHJlLF9lLCJcdTAyMzciLCJcdTAyMzciKTskKGl0LHJlLF9lLCJcdTAxMzEiLCJcXGkiLCEwKTskKGl0LHJlLF9lLCJcdTAyMzciLCJcXGoiLCEwKTskKGl0LHJlLF9lLCJceERGIiwiXFxzcyIsITApOyQoaXQscmUsX2UsIlx4RTYiLCJcXGFlIiwhMCk7JChpdCxyZSxfZSwiXHUwMTUzIiwiXFxvZSIsITApOyQoaXQscmUsX2UsIlx4RjgiLCJcXG8iLCEwKTskKGl0LHJlLF9lLCJceEM2IiwiXFxBRSIsITApOyQoaXQscmUsX2UsIlx1MDE1MiIsIlxcT0UiLCEwKTskKGl0LHJlLF9lLCJceEQ4IiwiXFxPIiwhMCk7JChpdCxyZSxVbiwiXHUwMkNBIiwiXFwnIik7JChpdCxyZSxVbiwiXHUwMkNCIiwiXFxgIik7JChpdCxyZSxVbiwiXHUwMkM2IiwiXFxeIik7JChpdCxyZSxVbiwiXHUwMkRDIiwiXFx+Iik7JChpdCxyZSxVbiwiXHUwMkM5IiwiXFw9Iik7JChpdCxyZSxVbiwiXHUwMkQ4IiwiXFx1Iik7JChpdCxyZSxVbiwiXHUwMkQ5IiwiXFwuIik7JChpdCxyZSxVbiwiXHhCOCIsIlxcYyIpOyQoaXQscmUsVW4sIlx1MDJEQSIsIlxcciIpOyQoaXQscmUsVW4sIlx1MDJDNyIsIlxcdiIpOyQoaXQscmUsVW4sIlx4QTgiLCdcXCInKTskKGl0LHJlLFVuLCJcdTAyREQiLCJcXEgiKTskKGl0LHJlLFVuLCJcdTI1RUYiLCJcXHRleHRjaXJjbGVkIik7ekc9eyItLSI6ITAsIi0tLSI6ITAsImBgIjohMCwiJyciOiEwfTskKGl0LHJlLF9lLCJcdTIwMTMiLCItLSIsITApOyQoaXQscmUsX2UsIlx1MjAxMyIsIlxcdGV4dGVuZGFzaCIpOyQoaXQscmUsX2UsIlx1MjAxNCIsIi0tLSIsITApOyQoaXQscmUsX2UsIlx1MjAxNCIsIlxcdGV4dGVtZGFzaCIpOyQoaXQscmUsX2UsIlx1MjAxOCIsImAiLCEwKTskKGl0LHJlLF9lLCJcdTIwMTgiLCJcXHRleHRxdW90ZWxlZnQiKTskKGl0LHJlLF9lLCJcdTIwMTkiLCInIiwhMCk7JChpdCxyZSxfZSwiXHUyMDE5IiwiXFx0ZXh0cXVvdGVyaWdodCIpOyQoaXQscmUsX2UsIlx1MjAxQyIsImBgIiwhMCk7JChpdCxyZSxfZSwiXHUyMDFDIiwiXFx0ZXh0cXVvdGVkYmxsZWZ0Iik7JChpdCxyZSxfZSwiXHUyMDFEIiwiJyciLCEwKTskKGl0LHJlLF9lLCJcdTIwMUQiLCJcXHRleHRxdW90ZWRibHJpZ2h0Iik7JChWLHJlLF9lLCJceEIwIiwiXFxkZWdyZWUiLCEwKTskKGl0LHJlLF9lLCJceEIwIiwiXFxkZWdyZWUiKTskKGl0LHJlLF9lLCJceEIwIiwiXFx0ZXh0ZGVncmVlIiwhMCk7JChWLHJlLF9lLCJceEEzIiwiXFxwb3VuZHMiKTskKFYscmUsX2UsIlx4QTMiLCJcXG1hdGhzdGVybGluZyIsITApOyQoaXQscmUsX2UsIlx4QTMiLCJcXHBvdW5kcyIpOyQoaXQscmUsX2UsIlx4QTMiLCJcXHRleHRzdGVybGluZyIsITApOyQoVixiZSxfZSwiXHUyNzIwIiwiXFxtYWx0ZXNlIik7JChpdCxiZSxfZSwiXHUyNzIwIiwiXFxtYWx0ZXNlIik7b0c9JzAxMjM0NTY3ODkvQC4iJztmb3IoYzQ9MDtjNDxvRy5sZW5ndGg7YzQrKyl1Qz1vRy5jaGFyQXQoYzQpLCQoVixyZSxfZSx1Qyx1Qyk7bEc9JzAxMjM0NTY3ODkhQCooKS09KyI7Oj8vLiwnO2Zvcih1ND0wO3U0PGxHLmxlbmd0aDt1NCsrKWhDPWxHLmNoYXJBdCh1NCksJChpdCxyZSxfZSxoQyxoQyk7azQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiO2ZvcihoND0wO2g0PGs0Lmxlbmd0aDtoNCsrKWN5PWs0LmNoYXJBdChoNCksJChWLHJlLHRyLGN5LGN5KSwkKGl0LHJlLF9lLGN5LGN5KTskKFYsYmUsX2UsIkMiLCJcdTIxMDIiKTskKGl0LGJlLF9lLCJDIiwiXHUyMTAyIik7JChWLGJlLF9lLCJIIiwiXHUyMTBEIik7JChpdCxiZSxfZSwiSCIsIlx1MjEwRCIpOyQoVixiZSxfZSwiTiIsIlx1MjExNSIpOyQoaXQsYmUsX2UsIk4iLCJcdTIxMTUiKTskKFYsYmUsX2UsIlAiLCJcdTIxMTkiKTskKGl0LGJlLF9lLCJQIiwiXHUyMTE5Iik7JChWLGJlLF9lLCJRIiwiXHUyMTFBIik7JChpdCxiZSxfZSwiUSIsIlx1MjExQSIpOyQoVixiZSxfZSwiUiIsIlx1MjExRCIpOyQoaXQsYmUsX2UsIlIiLCJcdTIxMUQiKTskKFYsYmUsX2UsIloiLCJcdTIxMjQiKTskKGl0LGJlLF9lLCJaIiwiXHUyMTI0Iik7JChWLHJlLHRyLCJoIiwiXHUyMTBFIik7JChpdCxyZSx0ciwiaCIsIlx1MjEwRSIpO3NyPSIiO2ZvcihOYT0wO05hPGs0Lmxlbmd0aDtOYSsrKVFuPWs0LmNoYXJBdChOYSksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjMyMCtOYSksJChWLHJlLHRyLFFuLHNyKSwkKGl0LHJlLF9lLFFuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzcyK05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY0MjQrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjU4MCtOYSksJChWLHJlLHRyLFFuLHNyKSwkKGl0LHJlLF9lLFFuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Njg0K05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY3MzYrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njc4OCtOYSksJChWLHJlLHRyLFFuLHNyKSwkKGl0LHJlLF9lLFFuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2ODQwK05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY5NDQrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzciksTmE8MjYmJihzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NjMyK05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY0NzYrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzcikpO3NyPSJcdXsxRDU1Q30iOyQoVixyZSx0ciwiayIsc3IpOyQoaXQscmUsX2UsImsiLHNyKTtmb3IobWg9MDttaDwxMDttaCsrKXV1PW1oLnRvU3RyaW5nKCksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzI5NCttaCksJChWLHJlLHRyLHV1LHNyKSwkKGl0LHJlLF9lLHV1LHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzE0K21oKSwkKFYscmUsdHIsdXUsc3IpLCQoaXQscmUsX2UsdXUsc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMjQrbWgpLCQoVixyZSx0cix1dSxzciksJChpdCxyZSxfZSx1dSxzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMzNCttaCksJChWLHJlLHRyLHV1LHNyKSwkKGl0LHJlLF9lLHV1LHNyKTtFQz0iXHhEMFx4REVceEZFIjtmb3IoZjQ9MDtmNDxFQy5sZW5ndGg7ZjQrKyl1eT1FQy5jaGFyQXQoZjQpLCQoVixyZSx0cix1eSx1eSksJChpdCxyZSxfZSx1eSx1eSk7ZDQ9W1sibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsibWF0aG5vcm1hbCIsInRleHRpdCIsIk1hdGgtSXRhbGljIl0sWyJib2xkc3ltYm9sIiwiYm9sZHN5bWJvbCIsIk1haW4tQm9sZEl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbIm1hdGhzY3IiLCJ0ZXh0c2NyIiwiU2NyaXB0LVJlZ3VsYXIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGhmcmFrIiwidGV4dGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhmcmFrIiwidGV4dGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhiYiIsInRleHRiYiIsIkFNUy1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYm9sZGZyYWsiLCJ0ZXh0Ym9sZGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aGl0c2YiLCJ0ZXh0aXRzZiIsIlNhbnNTZXJpZi1JdGFsaWMiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXV0sY0c9W1sibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyIiLCIiLCIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoYm9sZHNmIiwidGV4dGJvbGRzZiIsIlNhbnNTZXJpZi1Cb2xkIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXV0sT2JlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCksaT1lLmNoYXJDb2RlQXQoMSksYT0obi01NTI5NikqMTAyNCsoaS01NjMyMCkrNjU1MzYscz1yPT09Im1hdGgiPzA6MTtpZigxMTk4MDg8PWEmJmE8MTIwNDg0KXt2YXIgbD1NYXRoLmZsb29yKChhLTExOTgwOCkvMjYpO3JldHVybltkNFtsXVsyXSxkNFtsXVtzXV19ZWxzZSBpZigxMjA3ODI8PWEmJmE8PTEyMDgzMSl7dmFyIHU9TWF0aC5mbG9vcigoYS0xMjA3ODIpLzEwKTtyZXR1cm5bY0dbdV1bMl0sY0dbdV1bc11dfWVsc2V7aWYoYT09PTEyMDQ4NXx8YT09PTEyMDQ4NilyZXR1cm5bZDRbMF1bMl0sZDRbMF1bc11dO2lmKDEyMDQ4NjxhJiZhPDEyMDc4MilyZXR1cm5bIiIsIiJdO3Rocm93IG5ldyBsdCgiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiAiK2UpfX0sIndpZGVDaGFyYWN0ZXJGb250IiksRDQ9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIENuW25dW2VdJiZDbltuXVtlXS5yZXBsYWNlJiYoZT1DbltuXVtlXS5yZXBsYWNlKSx7dmFsdWU6ZSxtZXRyaWNzOklDKGUscixuKX19LCJsb29rdXBTeW1ib2wiKSx5bD1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9RDQoZSxyLG4pLGw9cy5tZXRyaWNzO2U9cy52YWx1ZTt2YXIgdTtpZihsKXt2YXIgaD1sLml0YWxpYzsobj09PSJ0ZXh0Inx8aSYmaS5mb250PT09Im1hdGhpdCIpJiYoaD0wKSx1PW5ldyBFcyhlLGwuaGVpZ2h0LGwuZGVwdGgsaCxsLnNrZXcsbC53aWR0aCxhKX1lbHNlIHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJObyBjaGFyYWN0ZXIgbWV0cmljcyAiKygiZm9yICciK2UrIicgaW4gc3R5bGUgJyIrcisiJyBhbmQgbW9kZSAnIituKyInIikpLHU9bmV3IEVzKGUsMCwwLDAsMCwwLGEpO2lmKGkpe3UubWF4Rm9udFNpemU9aS5zaXplTXVsdGlwbGllcixpLnN0eWxlLmlzVGlnaHQoKSYmdS5jbGFzc2VzLnB1c2goIm10aWdodCIpO3ZhciBmPWkuZ2V0Q29sb3IoKTtmJiYodS5zdHlsZS5jb2xvcj1mKX1yZXR1cm4gdX0sIm1ha2VTeW1ib2wiKSxQYmU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9W10pLG4uZm9udD09PSJib2xkc3ltYm9sIiYmRDQoZSwiTWFpbi1Cb2xkIixyKS5tZXRyaWNzP3lsKGUsIk1haW4tQm9sZCIscixuLGkuY29uY2F0KFsibWF0aGJmIl0pKTplPT09IlxcInx8Q25bcl1bZV0uZm9udD09PSJtYWluIj95bChlLCJNYWluLVJlZ3VsYXIiLHIsbixpKTp5bChlLCJBTVMtUmVndWxhciIscixuLGkuY29uY2F0KFsiYW1zcm0iXSkpfSwibWF0aHN5bSIpLEJiZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIGEhPT0idGV4dG9yZCImJkQ0KGUsIk1hdGgtQm9sZEl0YWxpYyIscikubWV0cmljcz97Zm9udE5hbWU6Ik1hdGgtQm9sZEl0YWxpYyIsZm9udENsYXNzOiJib2xkc3ltYm9sIn06e2ZvbnROYW1lOiJNYWluLUJvbGQiLGZvbnRDbGFzczoibWF0aGJmIn19LCJib2xkc3ltYm9sIiksRmJlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUubW9kZSxhPWUudGV4dCxzPVsibW9yZCJdLGw9aT09PSJtYXRoInx8aT09PSJ0ZXh0IiYmci5mb250LHU9bD9yLmZvbnQ6ci5mb250RmFtaWx5LGg9IiIsZj0iIjtpZihhLmNoYXJDb2RlQXQoMCk9PT01NTM0OSYmKFtoLGZdPU9iZShhLGkpKSxoLmxlbmd0aD4wKXJldHVybiB5bChhLGgsaSxyLHMuY29uY2F0KGYpKTtpZih1KXt2YXIgZCxwO2lmKHU9PT0iYm9sZHN5bWJvbCIpe3ZhciBtPUJiZShhLGkscixzLG4pO2Q9bS5mb250TmFtZSxwPVttLmZvbnRDbGFzc119ZWxzZSBsPyhkPVZHW3VdLmZvbnROYW1lLHA9W3VdKTooZD1wNCh1LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkscD1bdSxyLmZvbnRXZWlnaHQsci5mb250U2hhcGVdKTtpZihENChhLGQsaSkubWV0cmljcylyZXR1cm4geWwoYSxkLGkscixzLmNvbmNhdChwKSk7aWYoekcuaGFzT3duUHJvcGVydHkoYSkmJmQuc2xpY2UoMCwxMCk9PT0iVHlwZXdyaXRlciIpe2Zvcih2YXIgZz1bXSx5PTA7eTxhLmxlbmd0aDt5KyspZy5wdXNoKHlsKGFbeV0sZCxpLHIscy5jb25jYXQocCkpKTtyZXR1cm4gJEcoZyl9fWlmKG49PT0ibWF0aG9yZCIpcmV0dXJuIHlsKGEsIk1hdGgtSXRhbGljIixpLHIscy5jb25jYXQoWyJtYXRobm9ybWFsIl0pKTtpZihuPT09InRleHRvcmQiKXt2YXIgdj1DbltpXVthXSYmQ25baV1bYV0uZm9udDtpZih2PT09ImFtcyIpe3ZhciB4PXA0KCJhbXNybSIsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKTtyZXR1cm4geWwoYSx4LGkscixzLmNvbmNhdCgiYW1zcm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkpfWVsc2UgaWYodj09PSJtYWluInx8IXYpe3ZhciBiPXA0KCJ0ZXh0cm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIHlsKGEsYixpLHIscy5jb25jYXQoci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSl9ZWxzZXt2YXIgdz1wNCh2LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIHlsKGEsdyxpLHIscy5jb25jYXQodyxyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpKX19ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdHlwZTogIituKyIgaW4gbWFrZU9yZCIpfSwibWFrZU9yZCIpLHpiZT1vKCh0LGUpPT57aWYoeWgodC5jbGFzc2VzKSE9PXloKGUuY2xhc3Nlcyl8fHQuc2tldyE9PWUuc2tld3x8dC5tYXhGb250U2l6ZSE9PWUubWF4Rm9udFNpemUpcmV0dXJuITE7aWYodC5jbGFzc2VzLmxlbmd0aD09PTEpe3ZhciByPXQuY2xhc3Nlc1swXTtpZihyPT09Im1iaW4ifHxyPT09Im1vcmQiKXJldHVybiExfWZvcih2YXIgbiBpbiB0LnN0eWxlKWlmKHQuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJnQuc3R5bGVbbl0hPT1lLnN0eWxlW25dKXJldHVybiExO2Zvcih2YXIgaSBpbiBlLnN0eWxlKWlmKGUuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJnQuc3R5bGVbaV0hPT1lLnN0eWxlW2ldKXJldHVybiExO3JldHVybiEwfSwiY2FuQ29tYmluZSIpLEdiZT1vKHQ9Pntmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKXt2YXIgcj10W2VdLG49dFtlKzFdO3IgaW5zdGFuY2VvZiBFcyYmbiBpbnN0YW5jZW9mIEVzJiZ6YmUocixuKSYmKHIudGV4dCs9bi50ZXh0LHIuaGVpZ2h0PU1hdGgubWF4KHIuaGVpZ2h0LG4uaGVpZ2h0KSxyLmRlcHRoPU1hdGgubWF4KHIuZGVwdGgsbi5kZXB0aCksci5pdGFsaWM9bi5pdGFsaWMsdC5zcGxpY2UoZSsxLDEpLGUtLSl9cmV0dXJuIHR9LCJ0cnlDb21iaW5lQ2hhcnMiKSxPQz1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49MCxpPTAsYT0wO2E8ZS5jaGlsZHJlbi5sZW5ndGg7YSsrKXt2YXIgcz1lLmNoaWxkcmVuW2FdO3MuaGVpZ2h0PnImJihyPXMuaGVpZ2h0KSxzLmRlcHRoPm4mJihuPXMuZGVwdGgpLHMubWF4Rm9udFNpemU+aSYmKGk9cy5tYXhGb250U2l6ZSl9ZS5oZWlnaHQ9cixlLmRlcHRoPW4sZS5tYXhGb250U2l6ZT1pfSwic2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4iKSxUcz1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBuZChlLHIsbixpKTtyZXR1cm4gT0MoYSksYX0sIm1ha2VTcGFuIiksR0c9bygodCxlLHIsbik9Pm5ldyBuZCh0LGUscixuKSwibWFrZVN2Z1NwYW4iKSwkYmU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9VHMoW2VdLFtdLHIpO3JldHVybiBpLmhlaWdodD1NYXRoLm1heChufHxyLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3Msci5taW5SdWxlVGhpY2tuZXNzKSxpLnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPWd0KGkuaGVpZ2h0KSxpLm1heEZvbnRTaXplPTEsaX0sIm1ha2VMaW5lU3BhbiIpLFZiZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBteShlLHIsbixpKTtyZXR1cm4gT0MoYSksYX0sIm1ha2VBbmNob3IiKSwkRz1vKGZ1bmN0aW9uKGUpe3ZhciByPW5ldyByZChlKTtyZXR1cm4gT0Mocikscn0sIm1ha2VGcmFnbWVudCIpLFViZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiByZD9UcyhbXSxbZV0scik6ZX0sIndyYXBGcmFnbWVudCIpLEhiZT1vKGZ1bmN0aW9uKGUpe2lmKGUucG9zaXRpb25UeXBlPT09ImluZGl2aWR1YWxTaGlmdCIpe2Zvcih2YXIgcj1lLmNoaWxkcmVuLG49W3JbMF1dLGk9LXJbMF0uc2hpZnQtclswXS5lbGVtLmRlcHRoLGE9aSxzPTE7czxyLmxlbmd0aDtzKyspe3ZhciBsPS1yW3NdLnNoaWZ0LWEtcltzXS5lbGVtLmRlcHRoLHU9bC0ocltzLTFdLmVsZW0uaGVpZ2h0K3Jbcy0xXS5lbGVtLmRlcHRoKTthPWErbCxuLnB1c2goe3R5cGU6Imtlcm4iLHNpemU6dX0pLG4ucHVzaChyW3NdKX1yZXR1cm57Y2hpbGRyZW46bixkZXB0aDppfX12YXIgaDtpZihlLnBvc2l0aW9uVHlwZT09PSJ0b3AiKXtmb3IodmFyIGY9ZS5wb3NpdGlvbkRhdGEsZD0wO2Q8ZS5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgcD1lLmNoaWxkcmVuW2RdO2YtPXAudHlwZT09PSJrZXJuIj9wLnNpemU6cC5lbGVtLmhlaWdodCtwLmVsZW0uZGVwdGh9aD1mfWVsc2UgaWYoZS5wb3NpdGlvblR5cGU9PT0iYm90dG9tIiloPS1lLnBvc2l0aW9uRGF0YTtlbHNle3ZhciBtPWUuY2hpbGRyZW5bMF07aWYobS50eXBlIT09ImVsZW0iKXRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgImVsZW0iLicpO2lmKGUucG9zaXRpb25UeXBlPT09InNoaWZ0IiloPS1tLmVsZW0uZGVwdGgtZS5wb3NpdGlvbkRhdGE7ZWxzZSBpZihlLnBvc2l0aW9uVHlwZT09PSJmaXJzdEJhc2VsaW5lIiloPS1tLmVsZW0uZGVwdGg7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcG9zaXRpb25UeXBlICIrZS5wb3NpdGlvblR5cGUrIi4iKX1yZXR1cm57Y2hpbGRyZW46ZS5jaGlsZHJlbixkZXB0aDpofX0sImdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCIpLFdiZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhcntjaGlsZHJlbjpuLGRlcHRoOml9PUhiZShlKSxhPTAscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdO2lmKGwudHlwZT09PSJlbGVtIil7dmFyIHU9bC5lbGVtO2E9TWF0aC5tYXgoYSx1Lm1heEZvbnRTaXplLHUuaGVpZ2h0KX19YSs9Mjt2YXIgaD1UcyhbInBzdHJ1dCJdLFtdKTtoLnN0eWxlLmhlaWdodD1ndChhKTtmb3IodmFyIGY9W10sZD1pLHA9aSxtPWksZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddO2lmKHkudHlwZT09PSJrZXJuIiltKz15LnNpemU7ZWxzZXt2YXIgdj15LmVsZW0seD15LndyYXBwZXJDbGFzc2VzfHxbXSxiPXkud3JhcHBlclN0eWxlfHx7fSx3PVRzKHgsW2gsdl0sdm9pZCAwLGIpO3cuc3R5bGUudG9wPWd0KC1hLW0tdi5kZXB0aCkseS5tYXJnaW5MZWZ0JiYody5zdHlsZS5tYXJnaW5MZWZ0PXkubWFyZ2luTGVmdCkseS5tYXJnaW5SaWdodCYmKHcuc3R5bGUubWFyZ2luUmlnaHQ9eS5tYXJnaW5SaWdodCksZi5wdXNoKHcpLG0rPXYuaGVpZ2h0K3YuZGVwdGh9ZD1NYXRoLm1pbihkLG0pLHA9TWF0aC5tYXgocCxtKX12YXIgXz1UcyhbInZsaXN0Il0sZik7Xy5zdHlsZS5oZWlnaHQ9Z3QocCk7dmFyIFQ7aWYoZDwwKXt2YXIgRT1UcyhbXSxbXSksTD1UcyhbInZsaXN0Il0sW0VdKTtMLnN0eWxlLmhlaWdodD1ndCgtZCk7dmFyIFM9VHMoWyJ2bGlzdC1zIl0sW25ldyBFcygiXHUyMDBCIildKTtUPVtUcyhbInZsaXN0LXIiXSxbXyxTXSksVHMoWyJ2bGlzdC1yIl0sW0xdKV19ZWxzZSBUPVtUcyhbInZsaXN0LXIiXSxbX10pXTt2YXIgQT1UcyhbInZsaXN0LXQiXSxUKTtyZXR1cm4gVC5sZW5ndGg9PT0yJiZBLmNsYXNzZXMucHVzaCgidmxpc3QtdDIiKSxBLmhlaWdodD1wLEEuZGVwdGg9LWQsQX0sIm1ha2VWTGlzdCIpLFliZT1vKCh0LGUpPT57dmFyIHI9VHMoWyJtc3BhY2UiXSxbXSxlKSxuPUpuKHQsZSk7cmV0dXJuIHIuc3R5bGUubWFyZ2luUmlnaHQ9Z3Qobikscn0sIm1ha2VHbHVlIikscDQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2UiYW1zcm0iOmk9IkFNUyI7YnJlYWs7Y2FzZSJ0ZXh0cm0iOmk9Ik1haW4iO2JyZWFrO2Nhc2UidGV4dHNmIjppPSJTYW5zU2VyaWYiO2JyZWFrO2Nhc2UidGV4dHR0IjppPSJUeXBld3JpdGVyIjticmVhaztkZWZhdWx0Omk9ZX12YXIgYTtyZXR1cm4gcj09PSJ0ZXh0YmYiJiZuPT09InRleHRpdCI/YT0iQm9sZEl0YWxpYyI6cj09PSJ0ZXh0YmYiP2E9IkJvbGQiOnI9PT0idGV4dGl0Ij9hPSJJdGFsaWMiOmE9IlJlZ3VsYXIiLGkrIi0iK2F9LCJyZXRyaWV2ZVRleHRGb250TmFtZSIpLFZHPXttYXRoYmY6e3ZhcmlhbnQ6ImJvbGQiLGZvbnROYW1lOiJNYWluLUJvbGQifSxtYXRocm06e3ZhcmlhbnQ6Im5vcm1hbCIsZm9udE5hbWU6Ik1haW4tUmVndWxhciJ9LHRleHRpdDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWFpbi1JdGFsaWMifSxtYXRoaXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aG5vcm1hbDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWF0aC1JdGFsaWMifSxtYXRoYmI6e3ZhcmlhbnQ6ImRvdWJsZS1zdHJ1Y2siLGZvbnROYW1lOiJBTVMtUmVndWxhciJ9LG1hdGhjYWw6e3ZhcmlhbnQ6InNjcmlwdCIsZm9udE5hbWU6IkNhbGlncmFwaGljLVJlZ3VsYXIifSxtYXRoZnJhazp7dmFyaWFudDoiZnJha3R1ciIsZm9udE5hbWU6IkZyYWt0dXItUmVndWxhciJ9LG1hdGhzY3I6e3ZhcmlhbnQ6InNjcmlwdCIsZm9udE5hbWU6IlNjcmlwdC1SZWd1bGFyIn0sbWF0aHNmOnt2YXJpYW50OiJzYW5zLXNlcmlmIixmb250TmFtZToiU2Fuc1NlcmlmLVJlZ3VsYXIifSxtYXRodHQ6e3ZhcmlhbnQ6Im1vbm9zcGFjZSIsZm9udE5hbWU6IlR5cGV3cml0ZXItUmVndWxhciJ9fSxVRz17dmVjOlsidmVjIiwuNDcxLC43MTRdLG9paW50U2l6ZTE6WyJvaWludFNpemUxIiwuOTU3LC40OTldLG9paW50U2l6ZTI6WyJvaWludFNpemUyIiwxLjQ3MiwuNjU5XSxvaWlpbnRTaXplMTpbIm9paWludFNpemUxIiwxLjMwNCwuNDk5XSxvaWlpbnRTaXplMjpbIm9paWludFNpemUyIiwxLjk4LC42NTldfSxxYmU9byhmdW5jdGlvbihlLHIpe3ZhcltuLGksYV09VUdbZV0scz1uZXcgY2MobiksbD1uZXcgdmwoW3NdLHt3aWR0aDpndChpKSxoZWlnaHQ6Z3QoYSksc3R5bGU6IndpZHRoOiIrZ3QoaSksdmlld0JveDoiMCAwICIrMWUzKmkrIiAiKzFlMyphLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIn0pLHU9R0coWyJvdmVybGF5Il0sW2xdLHIpO3JldHVybiB1LmhlaWdodD1hLHUuc3R5bGUuaGVpZ2h0PWd0KGEpLHUuc3R5bGUud2lkdGg9Z3QoaSksdX0sInN0YXRpY1N2ZyIpLEZlPXtmb250TWFwOlZHLG1ha2VTeW1ib2w6eWwsbWF0aHN5bTpQYmUsbWFrZVNwYW46VHMsbWFrZVN2Z1NwYW46R0csbWFrZUxpbmVTcGFuOiRiZSxtYWtlQW5jaG9yOlZiZSxtYWtlRnJhZ21lbnQ6JEcsd3JhcEZyYWdtZW50OlViZSxtYWtlVkxpc3Q6V2JlLG1ha2VPcmQ6RmJlLG1ha2VHbHVlOlliZSxzdGF0aWNTdmc6cWJlLHN2Z0RhdGE6VUcsdHJ5Q29tYmluZUNoYXJzOkdiZX0sWm49e251bWJlcjozLHVuaXQ6Im11In0sZWQ9e251bWJlcjo0LHVuaXQ6Im11In0saHU9e251bWJlcjo1LHVuaXQ6Im11In0sWGJlPXttb3JkOnttb3A6Wm4sbWJpbjplZCxtcmVsOmh1LG1pbm5lcjpabn0sbW9wOnttb3JkOlpuLG1vcDpabixtcmVsOmh1LG1pbm5lcjpabn0sbWJpbjp7bW9yZDplZCxtb3A6ZWQsbW9wZW46ZWQsbWlubmVyOmVkfSxtcmVsOnttb3JkOmh1LG1vcDpodSxtb3BlbjpodSxtaW5uZXI6aHV9LG1vcGVuOnt9LG1jbG9zZTp7bW9wOlpuLG1iaW46ZWQsbXJlbDpodSxtaW5uZXI6Wm59LG1wdW5jdDp7bW9yZDpabixtb3A6Wm4sbXJlbDpodSxtb3BlbjpabixtY2xvc2U6Wm4sbXB1bmN0OlpuLG1pbm5lcjpabn0sbWlubmVyOnttb3JkOlpuLG1vcDpabixtYmluOmVkLG1yZWw6aHUsbW9wZW46Wm4sbXB1bmN0OlpuLG1pbm5lcjpabn19LGpiZT17bW9yZDp7bW9wOlpufSxtb3A6e21vcmQ6Wm4sbW9wOlpufSxtYmluOnt9LG1yZWw6e30sbW9wZW46e30sbWNsb3NlOnttb3A6Wm59LG1wdW5jdDp7fSxtaW5uZXI6e21vcDpabn19LEhHPXt9LEU0PXt9LFM0PXt9O28oU3QsImRlZmluZUZ1bmN0aW9uIik7byhpZCwiZGVmaW5lRnVuY3Rpb25CdWlsZGVycyIpO0M0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCImJmUuYm9keS5sZW5ndGg9PT0xP2UuYm9keVswXTplfSwibm9ybWFsaXplQXJndW1lbnQiKSxnaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ib3JkZ3JvdXAiP2UuYm9keTpbZV19LCJvcmRhcmd1bWVudCIpLHB1PUZlLm1ha2VTcGFuLEtiZT1bImxlZnRtb3N0IiwibWJpbiIsIm1vcGVuIiwibXJlbCIsIm1vcCIsIm1wdW5jdCJdLFFiZT1bInJpZ2h0bW9zdCIsIm1yZWwiLCJtY2xvc2UiLCJtcHVuY3QiXSxaYmU9e2Rpc3BsYXk6cnIuRElTUExBWSx0ZXh0OnJyLlRFWFQsc2NyaXB0OnJyLlNDUklQVCxzY3JpcHRzY3JpcHQ6cnIuU0NSSVBUU0NSSVBUfSxKYmU9e21vcmQ6Im1vcmQiLG1vcDoibW9wIixtYmluOiJtYmluIixtcmVsOiJtcmVsIixtb3BlbjoibW9wZW4iLG1jbG9zZToibWNsb3NlIixtcHVuY3Q6Im1wdW5jdCIsbWlubmVyOiJtaW5uZXIifSxGaT1vKGZ1bmN0aW9uKGUscixuLGkpe2k9PT12b2lkIDAmJihpPVtudWxsLG51bGxdKTtmb3IodmFyIGE9W10scz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1QcihlW3NdLHIpO2lmKGwgaW5zdGFuY2VvZiByZCl7dmFyIHU9bC5jaGlsZHJlbjthLnB1c2goLi4udSl9ZWxzZSBhLnB1c2gobCl9aWYoRmUudHJ5Q29tYmluZUNoYXJzKGEpLCFuKXJldHVybiBhO3ZhciBoPXI7aWYoZS5sZW5ndGg9PT0xKXt2YXIgZj1lWzBdO2YudHlwZT09PSJzaXppbmciP2g9ci5oYXZpbmdTaXplKGYuc2l6ZSk6Zi50eXBlPT09InN0eWxpbmciJiYoaD1yLmhhdmluZ1N0eWxlKFpiZVtmLnN0eWxlXSkpfXZhciBkPXB1KFtpWzBdfHwibGVmdG1vc3QiXSxbXSxyKSxwPXB1KFtpWzFdfHwicmlnaHRtb3N0Il0sW10sciksbT1uPT09InJvb3QiO3JldHVybiB1RyhhLChnLHkpPT57dmFyIHY9eS5jbGFzc2VzWzBdLHg9Zy5jbGFzc2VzWzBdO3Y9PT0ibWJpbiImJkp0LmNvbnRhaW5zKFFiZSx4KT95LmNsYXNzZXNbMF09Im1vcmQiOng9PT0ibWJpbiImJkp0LmNvbnRhaW5zKEtiZSx2KSYmKGcuY2xhc3Nlc1swXT0ibW9yZCIpfSx7bm9kZTpkfSxwLG0pLHVHKGEsKGcseSk9Pnt2YXIgdj1TQyh5KSx4PVNDKGcpLGI9diYmeD9nLmhhc0NsYXNzKCJtdGlnaHQiKT9qYmVbdl1beF06WGJlW3ZdW3hdOm51bGw7aWYoYilyZXR1cm4gRmUubWFrZUdsdWUoYixoKX0se25vZGU6ZH0scCxtKSxhfSwiYnVpbGRFeHByZXNzaW9uIiksdUc9byhmdW5jdGlvbiB0KGUscixuLGksYSl7aSYmZS5wdXNoKGkpO2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9V0cobCk7aWYodSl7dCh1LmNoaWxkcmVuLHIsbixudWxsLGEpO2NvbnRpbnVlfXZhciBoPSFsLmhhc0NsYXNzKCJtc3BhY2UiKTtpZihoKXt2YXIgZj1yKGwsbi5ub2RlKTtmJiYobi5pbnNlcnRBZnRlcj9uLmluc2VydEFmdGVyKGYpOihlLnVuc2hpZnQoZikscysrKSl9aD9uLm5vZGU9bDphJiZsLmhhc0NsYXNzKCJuZXdsaW5lIikmJihuLm5vZGU9cHUoWyJsZWZ0bW9zdCJdKSksbi5pbnNlcnRBZnRlcj0oZD0+cD0+e2Uuc3BsaWNlKGQrMSwwLHApLHMrK30pKHMpfWkmJmUucG9wKCl9LCJ0cmF2ZXJzZU5vblNwYWNlTm9kZXMiKSxXRz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgcmR8fGUgaW5zdGFuY2VvZiBteXx8ZSBpbnN0YW5jZW9mIG5kJiZlLmhhc0NsYXNzKCJlbmNsb3NpbmciKT9lOm51bGx9LCJjaGVja1BhcnRpYWxHcm91cCIpLGU0ZT1vKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbj1XRyhlKTtpZihuKXt2YXIgaT1uLmNoaWxkcmVuO2lmKGkubGVuZ3RoKXtpZihyPT09InJpZ2h0IilyZXR1cm4gdChpW2kubGVuZ3RoLTFdLCJyaWdodCIpO2lmKHI9PT0ibGVmdCIpcmV0dXJuIHQoaVswXSwibGVmdCIpfX1yZXR1cm4gZX0sImdldE91dGVybW9zdE5vZGUiKSxTQz1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU/KHImJihlPWU0ZShlLHIpKSxKYmVbZS5jbGFzc2VzWzBdXXx8bnVsbCk6bnVsbH0sImdldFR5cGVPZkRvbVRyZWUiKSx5eT1vKGZ1bmN0aW9uKGUscil7dmFyIG49WyJudWxsZGVsaW1pdGVyIl0uY29uY2F0KGUuYmFzZVNpemluZ0NsYXNzZXMoKSk7cmV0dXJuIHB1KHIuY29uY2F0KG4pKX0sIm1ha2VOdWxsRGVsaW1pdGVyIiksUHI9byhmdW5jdGlvbihlLHIsbil7aWYoIWUpcmV0dXJuIHB1KCk7aWYoRTRbZS50eXBlXSl7dmFyIGk9RTRbZS50eXBlXShlLHIpO2lmKG4mJnIuc2l6ZSE9PW4uc2l6ZSl7aT1wdShyLnNpemluZ0NsYXNzZXMobiksW2ldLHIpO3ZhciBhPXIuc2l6ZU11bHRpcGxpZXIvbi5zaXplTXVsdGlwbGllcjtpLmhlaWdodCo9YSxpLmRlcHRoKj1hfXJldHVybiBpfWVsc2UgdGhyb3cgbmV3IGx0KCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitlLnR5cGUrIiciKX0sImJ1aWxkR3JvdXAiKTtvKG00LCJidWlsZEhUTUxVbmJyZWFrYWJsZSIpO28oQ0MsImJ1aWxkSFRNTCIpO28oWUcsIm5ld0RvY3VtZW50RnJhZ21lbnQiKTtrcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnR5cGU9dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnR5cGU9ZSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1yfHxbXSx0aGlzLmNsYXNzZXM9bnx8W119c2V0QXR0cmlidXRlKGUscil7dGhpcy5hdHRyaWJ1dGVzW2VdPXJ9Z2V0QXR0cmlidXRlKGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbZV19dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIix0aGlzLnR5cGUpO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmZS5zZXRBdHRyaWJ1dGUocix0aGlzLmF0dHJpYnV0ZXNbcl0pO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKGUuY2xhc3NOYW1lPXloKHRoaXMuY2xhc3NlcykpO2Zvcih2YXIgbj0wO248dGhpcy5jaGlsZHJlbi5sZW5ndGg7bisrKWUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltuXS50b05vZGUoKSk7cmV0dXJuIGV9dG9NYXJrdXAoKXt2YXIgZT0iPCIrdGhpcy50eXBlO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmKGUrPSIgIityKyc9IicsZSs9SnQuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1tyXSksZSs9JyInKTt0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJihlKz0nIGNsYXNzID0iJytKdC5lc2NhcGUoeWgodGhpcy5jbGFzc2VzKSkrJyInKSxlKz0iPiI7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspZSs9dGhpcy5jaGlsZHJlbltuXS50b01hcmt1cCgpO3JldHVybiBlKz0iPC8iK3RoaXMudHlwZSsiPiIsZX10b1RleHQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZT0+ZS50b1RleHQoKSkuam9pbigiIil9fSx0ZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXh0Tm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGV4dD12b2lkIDAsdGhpcy50ZXh0PWV9dG9Ob2RlKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCl9dG9NYXJrdXAoKXtyZXR1cm4gSnQuZXNjYXBlKHRoaXMudG9UZXh0KCkpfXRvVGV4dCgpe3JldHVybiB0aGlzLnRleHR9fSxBQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTcGFjZU5vZGUiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmNoYXJhY3Rlcj12b2lkIDAsdGhpcy53aWR0aD1lLGU+PS4wNTU1NSYmZTw9LjA1NTU2P3RoaXMuY2hhcmFjdGVyPSJcdTIwMEEiOmU+PS4xNjY2JiZlPD0uMTY2Nz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA5IjplPj0uMjIyMiYmZTw9LjIyMjM/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNSI6ZT49LjI3NzcmJmU8PS4yNzc4P3RoaXMuY2hhcmFjdGVyPSJcdTIwMDVcdTIwMEEiOmU+PS0uMDU1NTYmJmU8PS0uMDU1NTU/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwQVx1MjA2MyI6ZT49LS4xNjY3JiZlPD0tLjE2NjY/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwOVx1MjA2MyI6ZT49LS4yMjIzJiZlPD0tLjIyMjI/dGhpcy5jaGFyYWN0ZXI9Ilx1MjA1Rlx1MjA2MyI6ZT49LS4yNzc4JiZlPD0tLjI3Nzc/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNVx1MjA2MyI6dGhpcy5jaGFyYWN0ZXI9bnVsbH10b05vZGUoKXtpZih0aGlzLmNoYXJhY3RlcilyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5jaGFyYWN0ZXIpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsIm1zcGFjZSIpO3JldHVybiBlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGd0KHRoaXMud2lkdGgpKSxlfXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyPyI8bXRleHQ+Iit0aGlzLmNoYXJhY3RlcisiPC9tdGV4dD4iOic8bXNwYWNlIHdpZHRoPSInK2d0KHRoaXMud2lkdGgpKyciLz4nfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoYXJhY3Rlcj90aGlzLmNoYXJhY3RlcjoiICJ9fSxhdD17TWF0aE5vZGU6a3MsVGV4dE5vZGU6dGQsU3BhY2VOb2RlOkFDLG5ld0RvY3VtZW50RnJhZ21lbnQ6WUd9LE1vPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBDbltyXVtlXSYmQ25bcl1bZV0ucmVwbGFjZSYmZS5jaGFyQ29kZUF0KDApIT09NTUzNDkmJiEoekcuaGFzT3duUHJvcGVydHkoZSkmJm4mJihuLmZvbnRGYW1pbHkmJm4uZm9udEZhbWlseS5zbGljZSg0LDYpPT09InR0Inx8bi5mb250JiZuLmZvbnQuc2xpY2UoNCw2KT09PSJ0dCIpKSYmKGU9Q25bcl1bZV0ucmVwbGFjZSksbmV3IGF0LlRleHROb2RlKGUpfSwibWFrZVRleHQiKSxQQz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD09PTE/ZVswXTpuZXcgYXQuTWF0aE5vZGUoIm1yb3ciLGUpfSwibWFrZVJvdyIpLEJDPW8oZnVuY3Rpb24oZSxyKXtpZihyLmZvbnRGYW1pbHk9PT0idGV4dHR0IilyZXR1cm4ibW9ub3NwYWNlIjtpZihyLmZvbnRGYW1pbHk9PT0idGV4dHNmIilyZXR1cm4gci5mb250U2hhcGU9PT0idGV4dGl0IiYmci5mb250V2VpZ2h0PT09InRleHRiZiI/InNhbnMtc2VyaWYtYm9sZC1pdGFsaWMiOnIuZm9udFNoYXBlPT09InRleHRpdCI/InNhbnMtc2VyaWYtaXRhbGljIjpyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8iYm9sZC1zYW5zLXNlcmlmIjoic2Fucy1zZXJpZiI7aWYoci5mb250U2hhcGU9PT0idGV4dGl0IiYmci5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQtaXRhbGljIjtpZihyLmZvbnRTaGFwZT09PSJ0ZXh0aXQiKXJldHVybiJpdGFsaWMiO2lmKHIuZm9udFdlaWdodD09PSJ0ZXh0YmYiKXJldHVybiJib2xkIjt2YXIgbj1yLmZvbnQ7aWYoIW58fG49PT0ibWF0aG5vcm1hbCIpcmV0dXJuIG51bGw7dmFyIGk9ZS5tb2RlO2lmKG49PT0ibWF0aGl0IilyZXR1cm4iaXRhbGljIjtpZihuPT09ImJvbGRzeW1ib2wiKXJldHVybiBlLnR5cGU9PT0idGV4dG9yZCI/ImJvbGQiOiJib2xkLWl0YWxpYyI7aWYobj09PSJtYXRoYmYiKXJldHVybiJib2xkIjtpZihuPT09Im1hdGhiYiIpcmV0dXJuImRvdWJsZS1zdHJ1Y2siO2lmKG49PT0ibWF0aGZyYWsiKXJldHVybiJmcmFrdHVyIjtpZihuPT09Im1hdGhzY3IifHxuPT09Im1hdGhjYWwiKXJldHVybiJzY3JpcHQiO2lmKG49PT0ibWF0aHNmIilyZXR1cm4ic2Fucy1zZXJpZiI7aWYobj09PSJtYXRodHQiKXJldHVybiJtb25vc3BhY2UiO3ZhciBhPWUudGV4dDtpZihKdC5jb250YWlucyhbIlxcaW1hdGgiLCJcXGptYXRoIl0sYSkpcmV0dXJuIG51bGw7Q25baV1bYV0mJkNuW2ldW2FdLnJlcGxhY2UmJihhPUNuW2ldW2FdLnJlcGxhY2UpO3ZhciBzPUZlLmZvbnRNYXBbbl0uZm9udE5hbWU7cmV0dXJuIElDKGEscyxpKT9GZS5mb250TWFwW25dLnZhcmlhbnQ6bnVsbH0sImdldFZhcmlhbnQiKSxTcz1vKGZ1bmN0aW9uKGUscixuKXtpZihlLmxlbmd0aD09PTEpe3ZhciBpPXluKGVbMF0scik7cmV0dXJuIG4mJmkgaW5zdGFuY2VvZiBrcyYmaS50eXBlPT09Im1vIiYmKGkuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwZW0iKSxpLnNldEF0dHJpYnV0ZSgicnNwYWNlIiwiMGVtIikpLFtpXX1mb3IodmFyIGE9W10scyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciB1PXluKGVbbF0scik7aWYodSBpbnN0YW5jZW9mIGtzJiZzIGluc3RhbmNlb2Yga3Mpe2lmKHUudHlwZT09PSJtdGV4dCImJnMudHlwZT09PSJtdGV4dCImJnUuZ2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIpPT09cy5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iikpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtbiImJnMudHlwZT09PSJtbiIpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtaSImJnUuY2hpbGRyZW4ubGVuZ3RoPT09MSYmcy50eXBlPT09Im1uIil7dmFyIGg9dS5jaGlsZHJlblswXTtpZihoIGluc3RhbmNlb2YgdGQmJmgudGV4dD09PSIuIil7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfX1lbHNlIGlmKHMudHlwZT09PSJtaSImJnMuY2hpbGRyZW4ubGVuZ3RoPT09MSl7dmFyIGY9cy5jaGlsZHJlblswXTtpZihmIGluc3RhbmNlb2YgdGQmJmYudGV4dD09PSJcdTAzMzgiJiYodS50eXBlPT09Im1vInx8dS50eXBlPT09Im1pInx8dS50eXBlPT09Im1uIikpe3ZhciBkPXUuY2hpbGRyZW5bMF07ZCBpbnN0YW5jZW9mIHRkJiZkLnRleHQubGVuZ3RoPjAmJihkLnRleHQ9ZC50ZXh0LnNsaWNlKDAsMSkrIlx1MDMzOCIrZC50ZXh0LnNsaWNlKDEpLGEucG9wKCkpfX19YS5wdXNoKHUpLHM9dX1yZXR1cm4gYX0sImJ1aWxkRXhwcmVzc2lvbiIpLHZoPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBQQyhTcyhlLHIsbikpfSwiYnVpbGRFeHByZXNzaW9uUm93IikseW49byhmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybiBuZXcgYXQuTWF0aE5vZGUoIm1yb3ciKTtpZihTNFtlLnR5cGVdKXt2YXIgbj1TNFtlLnR5cGVdKGUscik7cmV0dXJuIG59ZWxzZSB0aHJvdyBuZXcgbHQoIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICciK2UudHlwZSsiJyIpfSwiYnVpbGRHcm91cCIpO28oaEcsImJ1aWxkTWF0aE1MIik7cUc9byhmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQ0KHtzdHlsZTplLmRpc3BsYXlNb2RlP3JyLkRJU1BMQVk6cnIuVEVYVCxtYXhTaXplOmUubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOmUubWluUnVsZVRoaWNrbmVzc30pfSwib3B0aW9uc0Zyb21TZXR0aW5ncyIpLFhHPW8oZnVuY3Rpb24oZSxyKXtpZihyLmRpc3BsYXlNb2RlKXt2YXIgbj1bImthdGV4LWRpc3BsYXkiXTtyLmxlcW5vJiZuLnB1c2goImxlcW5vIiksci5mbGVxbiYmbi5wdXNoKCJmbGVxbiIpLGU9RmUubWFrZVNwYW4obixbZV0pfXJldHVybiBlfSwiZGlzcGxheVdyYXAiKSx0NGU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9cUcobiksYTtpZihuLm91dHB1dD09PSJtYXRobWwiKXJldHVybiBoRyhlLHIsaSxuLmRpc3BsYXlNb2RlLCEwKTtpZihuLm91dHB1dD09PSJodG1sIil7dmFyIHM9Q0MoZSxpKTthPUZlLm1ha2VTcGFuKFsia2F0ZXgiXSxbc10pfWVsc2V7dmFyIGw9aEcoZSxyLGksbi5kaXNwbGF5TW9kZSwhMSksdT1DQyhlLGkpO2E9RmUubWFrZVNwYW4oWyJrYXRleCJdLFtsLHVdKX1yZXR1cm4gWEcoYSxuKX0sImJ1aWxkVHJlZSIpLHI0ZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1xRyhuKSxhPUNDKGUsaSkscz1GZS5tYWtlU3BhbihbImthdGV4Il0sW2FdKTtyZXR1cm4gWEcocyxuKX0sImJ1aWxkSFRNTFRyZWUiKSxuNGU9e3dpZGVoYXQ6Il4iLHdpZGVjaGVjazoiXHUwMkM3Iix3aWRldGlsZGU6In4iLHV0aWxkZToifiIsb3ZlcmxlZnRhcnJvdzoiXHUyMTkwIix1bmRlcmxlZnRhcnJvdzoiXHUyMTkwIix4bGVmdGFycm93OiJcdTIxOTAiLG92ZXJyaWdodGFycm93OiJcdTIxOTIiLHVuZGVycmlnaHRhcnJvdzoiXHUyMTkyIix4cmlnaHRhcnJvdzoiXHUyMTkyIix1bmRlcmJyYWNlOiJcdTIzREYiLG92ZXJicmFjZToiXHUyM0RFIixvdmVyZ3JvdXA6Ilx1MjNFMCIsdW5kZXJncm91cDoiXHUyM0UxIixvdmVybGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsdW5kZXJsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0Iix4bGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsT3ZlcnJpZ2h0YXJyb3c6Ilx1MjFEMiIseFJpZ2h0YXJyb3c6Ilx1MjFEMiIsb3ZlcmxlZnRoYXJwb29uOiJcdTIxQkMiLHhsZWZ0aGFycG9vbnVwOiJcdTIxQkMiLG92ZXJyaWdodGhhcnBvb246Ilx1MjFDMCIseHJpZ2h0aGFycG9vbnVwOiJcdTIxQzAiLHhMZWZ0YXJyb3c6Ilx1MjFEMCIseExlZnRyaWdodGFycm93OiJcdTIxRDQiLHhob29rbGVmdGFycm93OiJcdTIxQTkiLHhob29rcmlnaHRhcnJvdzoiXHUyMUFBIix4bWFwc3RvOiJcdTIxQTYiLHhyaWdodGhhcnBvb25kb3duOiJcdTIxQzEiLHhsZWZ0aGFycG9vbmRvd246Ilx1MjFCRCIseHJpZ2h0bGVmdGhhcnBvb25zOiJcdTIxQ0MiLHhsZWZ0cmlnaHRoYXJwb29uczoiXHUyMUNCIix4dHdvaGVhZGxlZnRhcnJvdzoiXHUyMTlFIix4dHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFBMCIseGxvbmdlcXVhbDoiPSIseHRvZnJvbToiXHUyMUM0Iix4cmlnaHRsZWZ0YXJyb3dzOiJcdTIxQzQiLHhyaWdodGVxdWlsaWJyaXVtOiJcdTIxQ0MiLHhsZWZ0ZXF1aWxpYnJpdW06Ilx1MjFDQiIsIlxcY2RyaWdodGFycm93IjoiXHUyMTkyIiwiXFxjZGxlZnRhcnJvdyI6Ilx1MjE5MCIsIlxcY2Rsb25nZXF1YWwiOiI9In0saTRlPW8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW25ldyBhdC5UZXh0Tm9kZShuNGVbZS5yZXBsYWNlKC9eXFwvLCIiKV0pXSk7cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKSxyfSwibWF0aE1Mbm9kZSIpLGE0ZT17b3ZlcnJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLG92ZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0sdW5kZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSx1bmRlcmxlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciXSwuODg4LDUyMiwieE1pbllNaW4iXSx4cmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sMS40NjksNTIyLCJ4TWF4WU1pbiJdLCJcXGNkcmlnaHRhcnJvdyI6W1sicmlnaHRhcnJvdyJdLDMsNTIyLCJ4TWF4WU1pbiJdLHhsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sMS40NjksNTIyLCJ4TWluWU1pbiJdLCJcXGNkbGVmdGFycm93IjpbWyJsZWZ0YXJyb3ciXSwzLDUyMiwieE1pbllNaW4iXSxPdmVycmlnaHRhcnJvdzpbWyJkb3VibGVyaWdodGFycm93Il0sLjg4OCw1NjAsInhNYXhZTWluIl0seFJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLDEuNTI2LDU2MCwieE1heFlNaW4iXSx4TGVmdGFycm93OltbImRvdWJsZWxlZnRhcnJvdyJdLDEuNTI2LDU2MCwieE1pbllNaW4iXSxvdmVybGVmdGhhcnBvb246W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb251cDpbWyJsZWZ0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHhsZWZ0aGFycG9vbmRvd246W1sibGVmdGhhcnBvb25kb3duIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0sb3ZlcnJpZ2h0aGFycG9vbjpbWyJyaWdodGhhcnBvb24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4cmlnaHRoYXJwb29udXA6W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbmRvd246W1sicmlnaHRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhsb25nZXF1YWw6W1sibG9uZ2VxdWFsIl0sLjg4OCwzMzQsInhNaW5ZTWluIl0sIlxcY2Rsb25nZXF1YWwiOltbImxvbmdlcXVhbCJdLDMsMzM0LCJ4TWluWU1pbiJdLHh0d29oZWFkbGVmdGFycm93OltbInR3b2hlYWRsZWZ0YXJyb3ciXSwuODg4LDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZHJpZ2h0YXJyb3c6W1sidHdvaGVhZHJpZ2h0YXJyb3ciXSwuODg4LDMzNCwieE1heFlNaW4iXSxvdmVybGVmdHJpZ2h0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRhcnJvdyJdLC44ODgsNTIyXSxvdmVyYnJhY2U6W1sibGVmdGJyYWNlIiwibWlkYnJhY2UiLCJyaWdodGJyYWNlIl0sMS42LDU0OF0sdW5kZXJicmFjZTpbWyJsZWZ0YnJhY2V1bmRlciIsIm1pZGJyYWNldW5kZXIiLCJyaWdodGJyYWNldW5kZXIiXSwxLjYsNTQ4XSx1bmRlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0seGxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwxLjc1LDUyMl0seExlZnRyaWdodGFycm93OltbImRvdWJsZWxlZnRhcnJvdyIsImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjc1LDU2MF0seHJpZ2h0bGVmdGhhcnBvb25zOltbImxlZnRoYXJwb29uZG93bnBsdXMiLCJyaWdodGhhcnBvb25wbHVzIl0sMS43NSw3MTZdLHhsZWZ0cmlnaHRoYXJwb29uczpbWyJsZWZ0aGFycG9vbnBsdXMiLCJyaWdodGhhcnBvb25kb3ducGx1cyJdLDEuNzUsNzE2XSx4aG9va2xlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGhvb2siXSwxLjA4LDUyMl0seGhvb2tyaWdodGFycm93OltbImxlZnRob29rIiwicmlnaHRhcnJvdyJdLDEuMDgsNTIyXSxvdmVybGluZXNlZ21lbnQ6W1sibGVmdGxpbmVzZWdtZW50IiwicmlnaHRsaW5lc2VnbWVudCJdLC44ODgsNTIyXSx1bmRlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sb3Zlcmdyb3VwOltbImxlZnRncm91cCIsInJpZ2h0Z3JvdXAiXSwuODg4LDM0Ml0sdW5kZXJncm91cDpbWyJsZWZ0Z3JvdXB1bmRlciIsInJpZ2h0Z3JvdXB1bmRlciJdLC44ODgsMzQyXSx4bWFwc3RvOltbImxlZnRtYXBzdG8iLCJyaWdodGFycm93Il0sMS41LDUyMl0seHRvZnJvbTpbWyJsZWZ0VG9Gcm9tIiwicmlnaHRUb0Zyb20iXSwxLjc1LDUyOF0seHJpZ2h0bGVmdGFycm93czpbWyJiYXJhYm92ZWxlZnRhcnJvdyIsInJpZ2h0YXJyb3dhYm92ZWJhciJdLDEuNzUsOTAxXSx4cmlnaHRlcXVpbGlicml1bTpbWyJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb24iLCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyIl0sMS43NSw3MTZdLHhsZWZ0ZXF1aWxpYnJpdW06W1sic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uIiwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhciJdLDEuNzUsNzE2XX0sczRlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCI/ZS5ib2R5Lmxlbmd0aDoxfSwiZ3JvdXBMZW5ndGgiKSxvNGU9byhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgbD00ZTUsdT1lLmxhYmVsLnNsaWNlKDEpO2lmKEp0LmNvbnRhaW5zKFsid2lkZWhhdCIsIndpZGVjaGVjayIsIndpZGV0aWxkZSIsInV0aWxkZSJdLHUpKXt2YXIgaD1lLGY9czRlKGguYmFzZSksZCxwLG07aWYoZj41KXU9PT0id2lkZWhhdCJ8fHU9PT0id2lkZWNoZWNrIj8oZD00MjAsbD0yMzY0LG09LjQyLHA9dSsiNCIpOihkPTMxMixsPTIzNDAsbT0uMzQscD0idGlsZGU0Iik7ZWxzZXt2YXIgZz1bMSwxLDIsMiwzLDNdW2ZdO3U9PT0id2lkZWhhdCJ8fHU9PT0id2lkZWNoZWNrIj8obD1bMCwxMDYyLDIzNjQsMjM2NCwyMzY0XVtnXSxkPVswLDIzOSwzMDAsMzYwLDQyMF1bZ10sbT1bMCwuMjQsLjMsLjMsLjM2LC40Ml1bZ10scD11K2cpOihsPVswLDYwMCwxMDMzLDIzMzksMjM0MF1bZ10sZD1bMCwyNjAsMjg2LDMwNiwzMTJdW2ddLG09WzAsLjI2LC4yODYsLjMsLjMwNiwuMzRdW2ddLHA9InRpbGRlIitnKX12YXIgeT1uZXcgY2MocCksdj1uZXcgdmwoW3ldLHt3aWR0aDoiMTAwJSIsaGVpZ2h0Omd0KG0pLHZpZXdCb3g6IjAgMCAiK2wrIiAiK2QscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KTtyZXR1cm57c3BhbjpGZS5tYWtlU3ZnU3BhbihbXSxbdl0sciksbWluV2lkdGg6MCxoZWlnaHQ6bX19ZWxzZXt2YXIgeD1bXSxiPWE0ZVt1XSxbdyxfLFRdPWIsRT1ULzFlMyxMPXcubGVuZ3RoLFMsQTtpZihMPT09MSl7dmFyIEk9YlszXTtTPVsiaGlkZS10YWlsIl0sQT1bSV19ZWxzZSBpZihMPT09MilTPVsiaGFsZmFycm93LWxlZnQiLCJoYWxmYXJyb3ctcmlnaHQiXSxBPVsieE1pbllNaW4iLCJ4TWF4WU1pbiJdO2Vsc2UgaWYoTD09PTMpUz1bImJyYWNlLWxlZnQiLCJicmFjZS1jZW50ZXIiLCJicmFjZS1yaWdodCJdLEE9WyJ4TWluWU1pbiIsInhNaWRZTWluIiwieE1heFlNaW4iXTtlbHNlIHRocm93IG5ldyBFcnJvcihgQ29ycmVjdCBrYXRleEltYWdlc0RhdGEgb3IgdXBkYXRlIGNvZGUgaGVyZSB0byBzdXBwb3J0CiAgICAgICAgICAgICAgICAgICAgYCtMKyIgY2hpbGRyZW4uIik7Zm9yKHZhciBEPTA7RDxMO0QrKyl7dmFyIGs9bmV3IGNjKHdbRF0pLFI9bmV3IHZsKFtrXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6Z3QoRSksdmlld0JveDoiMCAwICIrbCsiICIrVCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOkFbRF0rIiBzbGljZSJ9KSxDPUZlLm1ha2VTdmdTcGFuKFtTW0RdXSxbUl0scik7aWYoTD09PTEpcmV0dXJue3NwYW46QyxtaW5XaWR0aDpfLGhlaWdodDpFfTtDLnN0eWxlLmhlaWdodD1ndChFKSx4LnB1c2goQyl9cmV0dXJue3NwYW46RmUubWFrZVNwYW4oWyJzdHJldGNoeSJdLHgsciksbWluV2lkdGg6XyxoZWlnaHQ6RX19fW8obiwiYnVpbGRTdmdTcGFuXyIpO3ZhcntzcGFuOmksbWluV2lkdGg6YSxoZWlnaHQ6c309bigpO3JldHVybiBpLmhlaWdodD1zLGkuc3R5bGUuaGVpZ2h0PWd0KHMpLGE+MCYmKGkuc3R5bGUubWluV2lkdGg9Z3QoYSkpLGl9LCJzdmdTcGFuIiksbDRlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcyxsPWUuaGVpZ2h0K2UuZGVwdGgrbitpO2lmKC9mYm94fGNvbG9yfGFuZ2wvLnRlc3Qocikpe2lmKHM9RmUubWFrZVNwYW4oWyJzdHJldGNoeSIscl0sW10sYSkscj09PSJmYm94Iil7dmFyIHU9YS5jb2xvciYmYS5nZXRDb2xvcigpO3UmJihzLnN0eWxlLmJvcmRlckNvbG9yPXUpfX1lbHNle3ZhciBoPVtdOy9eW2J4XWNhbmNlbCQvLnRlc3QocikmJmgucHVzaChuZXcgZ3koe3gxOiIwIix5MToiMCIseDI6IjEwMCUiLHkyOiIxMDAlIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSksL154P2NhbmNlbCQvLnRlc3QocikmJmgucHVzaChuZXcgZ3koe3gxOiIwIix5MToiMTAwJSIseDI6IjEwMCUiLHkyOiIwIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSk7dmFyIGY9bmV3IHZsKGgse3dpZHRoOiIxMDAlIixoZWlnaHQ6Z3QobCl9KTtzPUZlLm1ha2VTdmdTcGFuKFtdLFtmXSxhKX1yZXR1cm4gcy5oZWlnaHQ9bCxzLnN0eWxlLmhlaWdodD1ndChsKSxzfSwiZW5jbG9zZVNwYW4iKSxtdT17ZW5jbG9zZVNwYW46bDRlLG1hdGhNTG5vZGU6aTRlLHN2Z1NwYW46bzRlfTtvKGdyLCJhc3NlcnROb2RlVHlwZSIpO28oRkMsImFzc2VydFN5bWJvbE5vZGVUeXBlIik7byhONCwiY2hlY2tTeW1ib2xOb2RlVHlwZSIpO3pDPW8oKHQsZSk9Pnt2YXIgcixuLGk7dCYmdC50eXBlPT09InN1cHN1YiI/KG49Z3IodC5iYXNlLCJhY2NlbnQiKSxyPW4uYmFzZSx0LmJhc2U9cixpPVJiZShQcih0LGUpKSx0LmJhc2U9bik6KG49Z3IodCwiYWNjZW50Iikscj1uLmJhc2UpO3ZhciBhPVByKHIsZS5oYXZpbmdDcmFtcGVkU3R5bGUoKSkscz1uLmlzU2hpZnR5JiZKdC5pc0NoYXJhY3RlckJveChyKSxsPTA7aWYocyl7dmFyIHU9SnQuZ2V0QmFzZUVsZW0ociksaD1Qcih1LGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO2w9c0coaCkuc2tld312YXIgZj1uLmxhYmVsPT09IlxcYyIsZD1mP2EuaGVpZ2h0K2EuZGVwdGg6TWF0aC5taW4oYS5oZWlnaHQsZS5mb250TWV0cmljcygpLnhIZWlnaHQpLHA7aWYobi5pc1N0cmV0Y2h5KXA9bXUuc3ZnU3BhbihuLGUpLHA9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToiZWxlbSIsZWxlbTpwLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl0sd3JhcHBlclN0eWxlOmw+MD97d2lkdGg6ImNhbGMoMTAwJSAtICIrZ3QoMipsKSsiKSIsbWFyZ2luTGVmdDpndCgyKmwpfTp2b2lkIDB9XX0sZSk7ZWxzZXt2YXIgbSxnO24ubGFiZWw9PT0iXFx2ZWMiPyhtPUZlLnN0YXRpY1N2ZygidmVjIixlKSxnPUZlLnN2Z0RhdGEudmVjWzFdKToobT1GZS5tYWtlT3JkKHttb2RlOm4ubW9kZSx0ZXh0Om4ubGFiZWx9LGUsInRleHRvcmQiKSxtPXNHKG0pLG0uaXRhbGljPTAsZz1tLndpZHRoLGYmJihkKz1tLmRlcHRoKSkscD1GZS5tYWtlU3BhbihbImFjY2VudC1ib2R5Il0sW21dKTt2YXIgeT1uLmxhYmVsPT09IlxcdGV4dGNpcmNsZWQiO3kmJihwLmNsYXNzZXMucHVzaCgiYWNjZW50LWZ1bGwiKSxkPWEuaGVpZ2h0KTt2YXIgdj1sO3l8fCh2LT1nLzIpLHAuc3R5bGUubGVmdD1ndCh2KSxuLmxhYmVsPT09IlxcdGV4dGNpcmNsZWQiJiYocC5zdHlsZS50b3A9Ii4yZW0iKSxwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6Imtlcm4iLHNpemU6LWR9LHt0eXBlOiJlbGVtIixlbGVtOnB9XX0sZSl9dmFyIHg9RmUubWFrZVNwYW4oWyJtb3JkIiwiYWNjZW50Il0sW3BdLGUpO3JldHVybiBpPyhpLmNoaWxkcmVuWzBdPXgsaS5oZWlnaHQ9TWF0aC5tYXgoeC5oZWlnaHQsaS5oZWlnaHQpLGkuY2xhc3Nlc1swXT0ibW9yZCIsaSk6eH0sImh0bWxCdWlsZGVyJGEiKSxqRz1vKCh0LGUpPT57dmFyIHI9dC5pc1N0cmV0Y2h5P211Lm1hdGhNTG5vZGUodC5sYWJlbCk6bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW01vKHQubGFiZWwsdC5tb2RlKV0pLG49bmV3IGF0Lk1hdGhOb2RlKCJtb3ZlciIsW3luKHQuYmFzZSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnQiLCJ0cnVlIiksbn0sIm1hdGhtbEJ1aWxkZXIkOSIpLGM0ZT1uZXcgUmVnRXhwKFsiXFxhY3V0ZSIsIlxcZ3JhdmUiLCJcXGRkb3QiLCJcXHRpbGRlIiwiXFxiYXIiLCJcXGJyZXZlIiwiXFxjaGVjayIsIlxcaGF0IiwiXFx2ZWMiLCJcXGRvdCIsIlxcbWF0aHJpbmciXS5tYXAodD0+IlxcIit0KS5qb2luKCJ8IikpO1N0KHt0eXBlOiJhY2NlbnQiLG5hbWVzOlsiXFxhY3V0ZSIsIlxcZ3JhdmUiLCJcXGRkb3QiLCJcXHRpbGRlIiwiXFxiYXIiLCJcXGJyZXZlIiwiXFxjaGVjayIsIlxcaGF0IiwiXFx2ZWMiLCJcXGRvdCIsIlxcbWF0aHJpbmciLCJcXHdpZGVjaGVjayIsIlxcd2lkZWhhdCIsIlxcd2lkZXRpbGRlIiwiXFxvdmVycmlnaHRhcnJvdyIsIlxcb3ZlcmxlZnRhcnJvdyIsIlxcT3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0cmlnaHRhcnJvdyIsIlxcb3Zlcmdyb3VwIiwiXFxvdmVybGluZXNlZ21lbnQiLCJcXG92ZXJsZWZ0aGFycG9vbiIsIlxcb3ZlcnJpZ2h0aGFycG9vbiJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPUM0KGVbMF0pLG49IWM0ZS50ZXN0KHQuZnVuY05hbWUpLGk9IW58fHQuZnVuY05hbWU9PT0iXFx3aWRlaGF0Inx8dC5mdW5jTmFtZT09PSJcXHdpZGV0aWxkZSJ8fHQuZnVuY05hbWU9PT0iXFx3aWRlY2hlY2siO3JldHVybnt0eXBlOiJhY2NlbnQiLG1vZGU6dC5wYXJzZXIubW9kZSxsYWJlbDp0LmZ1bmNOYW1lLGlzU3RyZXRjaHk6bixpc1NoaWZ0eTppLGJhc2U6cn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ekMsbWF0aG1sQnVpbGRlcjpqR30pO1N0KHt0eXBlOiJhY2NlbnQiLG5hbWVzOlsiXFwnIiwiXFxgIiwiXFxeIiwiXFx+IiwiXFw9IiwiXFx1IiwiXFwuIiwnXFwiJywiXFxjIiwiXFxyIiwiXFxIIiwiXFx2IiwiXFx0ZXh0Y2lyY2xlZCJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPWVbMF0sbj10LnBhcnNlci5tb2RlO3JldHVybiBuPT09Im1hdGgiJiYodC5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJtYXRoVnNUZXh0QWNjZW50cyIsIkxhVGVYJ3MgYWNjZW50ICIrdC5mdW5jTmFtZSsiIHdvcmtzIG9ubHkgaW4gdGV4dCBtb2RlIiksbj0idGV4dCIpLHt0eXBlOiJhY2NlbnQiLG1vZGU6bixsYWJlbDp0LmZ1bmNOYW1lLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpyfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjp6QyxtYXRobWxCdWlsZGVyOmpHfSk7U3Qoe3R5cGU6ImFjY2VudFVuZGVyIixuYW1lczpbIlxcdW5kZXJsZWZ0YXJyb3ciLCJcXHVuZGVycmlnaHRhcnJvdyIsIlxcdW5kZXJsZWZ0cmlnaHRhcnJvdyIsIlxcdW5kZXJncm91cCIsIlxcdW5kZXJsaW5lc2VnbWVudCIsIlxcdXRpbGRlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJhY2NlbnRVbmRlciIsbW9kZTpyLm1vZGUsbGFiZWw6bixiYXNlOml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1Qcih0LmJhc2UsZSksbj1tdS5zdmdTcGFuKHQsZSksaT10LmxhYmVsPT09IlxcdXRpbGRlIj8uMTI6MCxhPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06bix3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnR1bmRlciJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bXUubWF0aE1Mbm9kZSh0LmxhYmVsKSxuPW5ldyBhdC5NYXRoTm9kZSgibXVuZGVyIixbeW4odC5iYXNlLGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTtnND1vKHQ9Pnt2YXIgZT1uZXcgYXQuTWF0aE5vZGUoIm1wYWRkZWQiLHQ/W3RdOltdKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKzAuNmVtIiksZS5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjAuM2VtIiksZX0sInBhZGRlZE5vZGUiKTtTdCh7dHlwZToieEFycm93IixuYW1lczpbIlxceGxlZnRhcnJvdyIsIlxceHJpZ2h0YXJyb3ciLCJcXHhMZWZ0YXJyb3ciLCJcXHhSaWdodGFycm93IiwiXFx4bGVmdHJpZ2h0YXJyb3ciLCJcXHhMZWZ0cmlnaHRhcnJvdyIsIlxceGhvb2tsZWZ0YXJyb3ciLCJcXHhob29rcmlnaHRhcnJvdyIsIlxceG1hcHN0byIsIlxceHJpZ2h0aGFycG9vbmRvd24iLCJcXHhyaWdodGhhcnBvb251cCIsIlxceGxlZnRoYXJwb29uZG93biIsIlxceGxlZnRoYXJwb29udXAiLCJcXHhyaWdodGxlZnRoYXJwb29ucyIsIlxceGxlZnRyaWdodGhhcnBvb25zIiwiXFx4bG9uZ2VxdWFsIiwiXFx4dHdvaGVhZHJpZ2h0YXJyb3ciLCJcXHh0d29oZWFkbGVmdGFycm93IiwiXFx4dG9mcm9tIiwiXFx4cmlnaHRsZWZ0YXJyb3dzIiwiXFx4cmlnaHRlcXVpbGlicml1bSIsIlxceGxlZnRlcXVpbGlicml1bSIsIlxcXFxjZHJpZ2h0YXJyb3ciLCJcXFxcY2RsZWZ0YXJyb3ciLCJcXFxcY2Rsb25nZXF1YWwiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm4sZnVuY05hbWU6aX09dDtyZXR1cm57dHlwZToieEFycm93Iixtb2RlOm4ubW9kZSxsYWJlbDppLGJvZHk6ZVswXSxiZWxvdzpyWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1lLnN0eWxlLG49ZS5oYXZpbmdTdHlsZShyLnN1cCgpKSxpPUZlLndyYXBGcmFnbWVudChQcih0LmJvZHksbixlKSxlKSxhPXQubGFiZWwuc2xpY2UoMCwyKT09PSJcXHgiPyJ4IjoiY2QiO2kuY2xhc3Nlcy5wdXNoKGErIi1hcnJvdy1wYWQiKTt2YXIgczt0LmJlbG93JiYobj1lLmhhdmluZ1N0eWxlKHIuc3ViKCkpLHM9RmUud3JhcEZyYWdtZW50KFByKHQuYmVsb3csbixlKSxlKSxzLmNsYXNzZXMucHVzaChhKyItYXJyb3ctcGFkIikpO3ZhciBsPW11LnN2Z1NwYW4odCxlKSx1PS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCsuNSpsLmhlaWdodCxoPS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodC0uNSpsLmhlaWdodC0uMTExOyhpLmRlcHRoPi4yNXx8dC5sYWJlbD09PSJcXHhsZWZ0ZXF1aWxpYnJpdW0iKSYmKGgtPWkuZGVwdGgpO3ZhciBmO2lmKHMpe3ZhciBkPS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCtzLmhlaWdodCsuNSpsLmhlaWdodCsuMTExO2Y9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmksc2hpZnQ6aH0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDp1fSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0OmR9XX0sZSl9ZWxzZSBmPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTppLHNoaWZ0Omh9LHt0eXBlOiJlbGVtIixlbGVtOmwsc2hpZnQ6dX1dfSxlKTtyZXR1cm4gZi5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpLEZlLm1ha2VTcGFuKFsibXJlbCIsIngtYXJyb3ciXSxbZl0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1tdS5tYXRoTUxub2RlKHQubGFiZWwpO3Iuc2V0QXR0cmlidXRlKCJtaW5zaXplIix0LmxhYmVsLmNoYXJBdCgwKT09PSJ4Ij8iMS43NWVtIjoiMy4wZW0iKTt2YXIgbjtpZih0LmJvZHkpe3ZhciBpPWc0KHluKHQuYm9keSxlKSk7aWYodC5iZWxvdyl7dmFyIGE9ZzQoeW4odC5iZWxvdyxlKSk7bj1uZXcgYXQuTWF0aE5vZGUoIm11bmRlcm92ZXIiLFtyLGEsaV0pfWVsc2Ugbj1uZXcgYXQuTWF0aE5vZGUoIm1vdmVyIixbcixpXSl9ZWxzZSBpZih0LmJlbG93KXt2YXIgcz1nNCh5bih0LmJlbG93LGUpKTtuPW5ldyBhdC5NYXRoTm9kZSgibXVuZGVyIixbcixzXSl9ZWxzZSBuPWc0KCksbj1uZXcgYXQuTWF0aE5vZGUoIm1vdmVyIixbcixuXSk7cmV0dXJuIG59fSk7dTRlPUZlLm1ha2VTcGFuO28oS0csImh0bWxCdWlsZGVyJDkiKTtvKFFHLCJtYXRobWxCdWlsZGVyJDgiKTtTdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcbWF0aG9yZCIsIlxcbWF0aGJpbiIsIlxcbWF0aHJlbCIsIlxcbWF0aG9wZW4iLCJcXG1hdGhjbG9zZSIsIlxcbWF0aHB1bmN0IiwiXFxtYXRoaW5uZXIiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnIubW9kZSxtY2xhc3M6Im0iK24uc2xpY2UoNSksYm9keTpnaShpKSxpc0NoYXJhY3RlckJveDpKdC5pc0NoYXJhY3RlckJveChpKX19LGh0bWxCdWlsZGVyOktHLG1hdGhtbEJ1aWxkZXI6UUd9KTtSND1vKHQ9Pnt2YXIgZT10LnR5cGU9PT0ib3JkZ3JvdXAiJiZ0LmJvZHkubGVuZ3RoP3QuYm9keVswXTp0O3JldHVybiBlLnR5cGU9PT0iYXRvbSImJihlLmZhbWlseT09PSJiaW4ifHxlLmZhbWlseT09PSJyZWwiKT8ibSIrZS5mYW1pbHk6Im1vcmQifSwiYmlucmVsQ2xhc3MiKTtTdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcQGJpbnJlbCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOlI0KGVbMF0pLGJvZHk6Z2koZVsxXSksaXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3goZVsxXSl9fX0pO1N0KHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxzdGFja3JlbCIsIlxcb3ZlcnNldCIsIlxcdW5kZXJzZXQiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzFdLGE9ZVswXSxzO24hPT0iXFxzdGFja3JlbCI/cz1SNChpKTpzPSJtcmVsIjt2YXIgbD17dHlwZToib3AiLG1vZGU6aS5tb2RlLGxpbWl0czohMCxhbHdheXNIYW5kbGVTdXBTdWI6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLHN1cHByZXNzQmFzZVNoaWZ0Om4hPT0iXFxzdGFja3JlbCIsYm9keTpnaShpKX0sdT17dHlwZToic3Vwc3ViIixtb2RlOmEubW9kZSxiYXNlOmwsc3VwOm49PT0iXFx1bmRlcnNldCI/bnVsbDphLHN1YjpuPT09IlxcdW5kZXJzZXQiP2E6bnVsbH07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOnMsYm9keTpbdV0saXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3godSl9fSxodG1sQnVpbGRlcjpLRyxtYXRobWxCdWlsZGVyOlFHfSk7U3Qoe3R5cGU6InBtYiIsbmFtZXM6WyJcXHBtYiJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToicG1iIixtb2RlOnIubW9kZSxtY2xhc3M6UjQoZVswXSksYm9keTpnaShlWzBdKX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RmkodC5ib2R5LGUsITApLG49RmUubWFrZVNwYW4oW3QubWNsYXNzXSxyLGUpO3JldHVybiBuLnN0eWxlLnRleHRTaGFkb3c9IjAuMDJlbSAwLjAxZW0gMC4wNHB4IixufSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9U3ModC5ib2R5LGUpLG49bmV3IGF0Lk1hdGhOb2RlKCJtc3R5bGUiLHIpO3JldHVybiBuLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ0ZXh0LXNoYWRvdzogMC4wMmVtIDAuMDFlbSAwLjA0cHgiKSxufX0pO2g0ZT17Ij4iOiJcXFxcY2RyaWdodGFycm93IiwiPCI6IlxcXFxjZGxlZnRhcnJvdyIsIj0iOiJcXFxcY2Rsb25nZXF1YWwiLEE6IlxcdXBhcnJvdyIsVjoiXFxkb3duYXJyb3ciLCJ8IjoiXFxWZXJ0IiwiLiI6Im5vIGFycm93In0sZkc9bygoKT0+KHt0eXBlOiJzdHlsaW5nIixib2R5OltdLG1vZGU6Im1hdGgiLHN0eWxlOiJkaXNwbGF5In0pLCJuZXdDZWxsIiksZEc9byh0PT50LnR5cGU9PT0idGV4dG9yZCImJnQudGV4dD09PSJAIiwiaXNTdGFydE9mQXJyb3ciKSxmNGU9bygodCxlKT0+KHQudHlwZT09PSJtYXRob3JkInx8dC50eXBlPT09ImF0b20iKSYmdC50ZXh0PT09ZSwiaXNMYWJlbEVuZCIpO28oZDRlLCJjZEFycm93Iik7byhwNGUsInBhcnNlQ0QiKTtTdCh7dHlwZToiY2RsYWJlbCIsbmFtZXM6WyJcXFxcY2RsZWZ0IiwiXFxcXGNkcmlnaHQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6ImNkbGFiZWwiLG1vZGU6ci5tb2RlLHNpZGU6bi5zbGljZSg0KSxsYWJlbDplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpLG49RmUud3JhcEZyYWdtZW50KFByKHQubGFiZWwscixlKSxlKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2goImNkLWxhYmVsLSIrdC5zaWRlKSxuLnN0eWxlLmJvdHRvbT1ndCguOC1uLmRlcHRoKSxuLmhlaWdodD0wLG4uZGVwdGg9MCxufSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtcm93IixbeW4odC5sYWJlbCxlKV0pO3JldHVybiByPW5ldyBhdC5NYXRoTm9kZSgibXBhZGRlZCIsW3JdKSxyLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwIiksdC5zaWRlPT09ImxlZnQiJiZyLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiLTF3aWR0aCIpLHIuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IiwiMC43ZW0iKSxyPW5ldyBhdC5NYXRoTm9kZSgibXN0eWxlIixbcl0pLHIuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSxyfX0pO1N0KHt0eXBlOiJjZGxhYmVscGFyZW50IixuYW1lczpbIlxcXFxjZHBhcmVudCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6ImNkbGFiZWxwYXJlbnQiLG1vZGU6ci5tb2RlLGZyYWdtZW50OmVbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZlLndyYXBGcmFnbWVudChQcih0LmZyYWdtZW50LGUpLGUpO3JldHVybiByLmNsYXNzZXMucHVzaCgiY2QtdmVydC1hcnJvdyIpLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtcm93IixbeW4odC5mcmFnbWVudCxlKV0pfX0pO1N0KHt0eXBlOiJ0ZXh0b3JkIixuYW1lczpbIlxcQGNoYXIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXtmb3IodmFye3BhcnNlcjpyfT10LG49Z3IoZVswXSwib3JkZ3JvdXAiKSxpPW4uYm9keSxhPSIiLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9Z3IoaVtzXSwidGV4dG9yZCIpO2ErPWwudGV4dH12YXIgdT1wYXJzZUludChhKSxoO2lmKGlzTmFOKHUpKXRocm93IG5ldyBsdCgiXFxAY2hhciBoYXMgbm9uLW51bWVyaWMgYXJndW1lbnQgIithKTtpZih1PDB8fHU+PTExMTQxMTEpdGhyb3cgbmV3IGx0KCJcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50ICIrYSk7cmV0dXJuIHU8PTY1NTM1P2g9U3RyaW5nLmZyb21DaGFyQ29kZSh1KToodS09NjU1MzYsaD1TdHJpbmcuZnJvbUNoYXJDb2RlKCh1Pj4xMCkrNTUyOTYsKHUmMTAyMykrNTYzMjApKSx7dHlwZToidGV4dG9yZCIsbW9kZTpyLm1vZGUsdGV4dDpofX19KTtaRz1vKCh0LGUpPT57dmFyIHI9RmkodC5ib2R5LGUud2l0aENvbG9yKHQuY29sb3IpLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIkOCIpLEpHPW8oKHQsZSk9Pnt2YXIgcj1Tcyh0LmJvZHksZS53aXRoQ29sb3IodC5jb2xvcikpLG49bmV3IGF0Lk1hdGhOb2RlKCJtc3R5bGUiLHIpO3JldHVybiBuLnNldEF0dHJpYnV0ZSgibWF0aGNvbG9yIix0LmNvbG9yKSxufSwibWF0aG1sQnVpbGRlciQ3Iik7U3Qoe3R5cGU6ImNvbG9yIixuYW1lczpbIlxcdGV4dGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJvcmlnaW5hbCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49Z3IoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixpPWVbMV07cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnIubW9kZSxjb2xvcjpuLGJvZHk6Z2koaSl9fSxodG1sQnVpbGRlcjpaRyxtYXRobWxCdWlsZGVyOkpHfSk7U3Qoe3R5cGU6ImNvbG9yIixuYW1lczpbIlxcY29sb3IiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGJyZWFrT25Ub2tlblRleHQ6bn09dCxpPWdyKGVbMF0sImNvbG9yLXRva2VuIikuY29sb3I7ci5ndWxsZXQubWFjcm9zLnNldCgiXFxjdXJyZW50QGNvbG9yIixpKTt2YXIgYT1yLnBhcnNlRXhwcmVzc2lvbighMCxuKTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6ci5tb2RlLGNvbG9yOmksYm9keTphfX0saHRtbEJ1aWxkZXI6WkcsbWF0aG1sQnVpbGRlcjpKR30pO1N0KHt0eXBlOiJjciIsbmFtZXM6WyJcXFxcIl0scHJvcHM6e251bUFyZ3M6MCxudW1PcHRpb25hbEFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1uLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09IlsiP24ucGFyc2VTaXplR3JvdXAoITApOm51bGwsYT0hbi5zZXR0aW5ncy5kaXNwbGF5TW9kZXx8IW4uc2V0dGluZ3MudXNlU3RyaWN0QmVoYXZpb3IoIm5ld0xpbmVJbkRpc3BsYXlNb2RlIiwiSW4gTGFUZVgsIFxcXFwgb3IgXFxuZXdsaW5lIGRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGUiKTtyZXR1cm57dHlwZToiY3IiLG1vZGU6bi5tb2RlLG5ld0xpbmU6YSxzaXplOmkmJmdyKGksInNpemUiKS52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RmUubWFrZVNwYW4oWyJtc3BhY2UiXSxbXSxlKTtyZXR1cm4gdC5uZXdMaW5lJiYoci5jbGFzc2VzLnB1c2goIm5ld2xpbmUiKSx0LnNpemUmJihyLnN0eWxlLm1hcmdpblRvcD1ndChKbih0LnNpemUsZSkpKSkscn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBhdC5NYXRoTm9kZSgibXNwYWNlIik7cmV0dXJuIHQubmV3TGluZSYmKHIuc2V0QXR0cmlidXRlKCJsaW5lYnJlYWsiLCJuZXdsaW5lIiksdC5zaXplJiZyLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixndChKbih0LnNpemUsZSkpKSkscn19KTtfQz17IlxcZ2xvYmFsIjoiXFxnbG9iYWwiLCJcXGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcXFxnbG9iYWxsb25nIjoiXFxcXGdsb2JhbGxvbmciLCJcXGRlZiI6IlxcZ2RlZiIsIlxcZ2RlZiI6IlxcZ2RlZiIsIlxcZWRlZiI6IlxceGRlZiIsIlxceGRlZiI6IlxceGRlZiIsIlxcbGV0IjoiXFxcXGdsb2JhbGxldCIsIlxcZnV0dXJlbGV0IjoiXFxcXGdsb2JhbGZ1dHVyZSJ9LGUkPW8odD0+e3ZhciBlPXQudGV4dDtpZigvXig/OltcXHt9JCYjXl9dfEVPRikkLy50ZXN0KGUpKXRocm93IG5ldyBsdCgiRXhwZWN0ZWQgYSBjb250cm9sIHNlcXVlbmNlIix0KTtyZXR1cm4gZX0sImNoZWNrQ29udHJvbFNlcXVlbmNlIiksbTRlPW8odD0+e3ZhciBlPXQuZ3VsbGV0LnBvcFRva2VuKCk7cmV0dXJuIGUudGV4dD09PSI9IiYmKGU9dC5ndWxsZXQucG9wVG9rZW4oKSxlLnRleHQ9PT0iICImJihlPXQuZ3VsbGV0LnBvcFRva2VuKCkpKSxlfSwiZ2V0UkhTIiksdCQ9bygodCxlLHIsbik9Pnt2YXIgaT10Lmd1bGxldC5tYWNyb3MuZ2V0KHIudGV4dCk7aT09bnVsbCYmKHIubm9leHBhbmQ9ITAsaT17dG9rZW5zOltyXSxudW1BcmdzOjAsdW5leHBhbmRhYmxlOiF0Lmd1bGxldC5pc0V4cGFuZGFibGUoci50ZXh0KX0pLHQuZ3VsbGV0Lm1hY3Jvcy5zZXQoZSxpLG4pfSwibGV0Q29tbWFuZCIpO1N0KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGdsb2JhbCIsIlxcbG9uZyIsIlxcXFxnbG9iYWxsb25nIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O2UuY29uc3VtZVNwYWNlcygpO3ZhciBuPWUuZmV0Y2goKTtpZihfQ1tuLnRleHRdKXJldHVybihyPT09IlxcZ2xvYmFsInx8cj09PSJcXFxcZ2xvYmFsbG9uZyIpJiYobi50ZXh0PV9DW24udGV4dF0pLGdyKGUucGFyc2VGdW5jdGlvbigpLCJpbnRlcm5hbCIpO3Rocm93IG5ldyBsdCgiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXgiLG4pfX0pO1N0KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGRlZiIsIlxcZ2RlZiIsIlxcZWRlZiIsIlxceGRlZiJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1lLmd1bGxldC5wb3BUb2tlbigpLGk9bi50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QoaSkpdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLG4pO2Zvcih2YXIgYT0wLHMsbD1bW11dO2UuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI7KWlmKG49ZS5ndWxsZXQucG9wVG9rZW4oKSxuLnRleHQ9PT0iIyIpe2lmKGUuZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0ieyIpe3M9ZS5ndWxsZXQuZnV0dXJlKCksbFthXS5wdXNoKCJ7Iik7YnJlYWt9aWYobj1lLmd1bGxldC5wb3BUb2tlbigpLCEvXlsxLTldJC8udGVzdChuLnRleHQpKXRocm93IG5ldyBsdCgnSW52YWxpZCBhcmd1bWVudCBudW1iZXIgIicrbi50ZXh0KyciJyk7aWYocGFyc2VJbnQobi50ZXh0KSE9PWErMSl0aHJvdyBuZXcgbHQoJ0FyZ3VtZW50IG51bWJlciAiJytuLnRleHQrJyIgb3V0IG9mIG9yZGVyJyk7YSsrLGwucHVzaChbXSl9ZWxzZXtpZihuLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgbHQoIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvbiIpO2xbYV0ucHVzaChuLnRleHQpfXZhcnt0b2tlbnM6dX09ZS5ndWxsZXQuY29uc3VtZUFyZygpO3JldHVybiBzJiZ1LnVuc2hpZnQocyksKHI9PT0iXFxlZGVmInx8cj09PSJcXHhkZWYiKSYmKHU9ZS5ndWxsZXQuZXhwYW5kVG9rZW5zKHUpLHUucmV2ZXJzZSgpKSxlLmd1bGxldC5tYWNyb3Muc2V0KGkse3Rva2Vuczp1LG51bUFyZ3M6YSxkZWxpbWl0ZXJzOmx9LHI9PT1fQ1tyXSkse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7U3Qoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcbGV0IiwiXFxcXGdsb2JhbGxldCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1lJChlLmd1bGxldC5wb3BUb2tlbigpKTtlLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7dmFyIGk9bTRlKGUpO3JldHVybiB0JChlLG4saSxyPT09IlxcXFxnbG9iYWxsZXQiKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6ZS5tb2RlfX19KTtTdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxmdXR1cmVsZXQiLCJcXFxcZ2xvYmFsZnV0dXJlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPWUkKGUuZ3VsbGV0LnBvcFRva2VuKCkpLGk9ZS5ndWxsZXQucG9wVG9rZW4oKSxhPWUuZ3VsbGV0LnBvcFRva2VuKCk7cmV0dXJuIHQkKGUsbixhLHI9PT0iXFxcXGdsb2JhbGZ1dHVyZSIpLGUuZ3VsbGV0LnB1c2hUb2tlbihhKSxlLmd1bGxldC5wdXNoVG9rZW4oaSkse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7aHk9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9Q24ubWF0aFtlXSYmQ24ubWF0aFtlXS5yZXBsYWNlLGE9SUMoaXx8ZSxyLG4pO2lmKCFhKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3ltYm9sICIrZSsiIGFuZCBmb250IHNpemUgIityKyIuIik7cmV0dXJuIGF9LCJnZXRNZXRyaWNzIiksR0M9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLmhhdmluZ0Jhc2VTdHlsZShyKSxzPUZlLm1ha2VTcGFuKGkuY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhuKSksW2VdLG4pLGw9YS5zaXplTXVsdGlwbGllci9uLnNpemVNdWx0aXBsaWVyO3JldHVybiBzLmhlaWdodCo9bCxzLmRlcHRoKj1sLHMubWF4Rm9udFNpemU9YS5zaXplTXVsdGlwbGllcixzfSwic3R5bGVXcmFwIiksciQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5oYXZpbmdCYXNlU3R5bGUobiksYT0oMS1yLnNpemVNdWx0aXBsaWVyL2kuc2l6ZU11bHRpcGxpZXIpKnIuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O2UuY2xhc3Nlcy5wdXNoKCJkZWxpbWNlbnRlciIpLGUuc3R5bGUudG9wPWd0KGEpLGUuaGVpZ2h0LT1hLGUuZGVwdGgrPWF9LCJjZW50ZXJTcGFuIiksZzRlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPUZlLm1ha2VTeW1ib2woZSwiTWFpbi1SZWd1bGFyIixhLGkpLHU9R0MobCxyLGkscyk7cmV0dXJuIG4mJnIkKHUsaSxyKSx1fSwibWFrZVNtYWxsRGVsaW0iKSx5NGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gRmUubWFrZVN5bWJvbChlLCJTaXplIityKyItUmVndWxhciIsbixpKX0sIm1hdGhybVNpemUiKSxuJD1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD15NGUoZSxyLGEsaSksdT1HQyhGZS5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwic2l6ZSIrcl0sW2xdLGkpLHJyLlRFWFQsaSxzKTtyZXR1cm4gbiYmciQodSxpLHJyLlRFWFQpLHV9LCJtYWtlTGFyZ2VEZWxpbSIpLGZDPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpO3I9PT0iU2l6ZTEtUmVndWxhciI/aT0iZGVsaW0tc2l6ZTEiOmk9ImRlbGltLXNpemU0Ijt2YXIgYT1GZS5tYWtlU3BhbihbImRlbGltc2l6aW5naW5uZXIiLGldLFtGZS5tYWtlU3BhbihbXSxbRmUubWFrZVN5bWJvbChlLHIsbildKV0pO3JldHVybnt0eXBlOiJlbGVtIixlbGVtOmF9fSwibWFrZUdseXBoU3BhbiIpLGRDPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWxjWyJTaXplNC1SZWd1bGFyIl1bZS5jaGFyQ29kZUF0KDApXT9sY1siU2l6ZTQtUmVndWxhciJdW2UuY2hhckNvZGVBdCgwKV1bNF06bGNbIlNpemUxLVJlZ3VsYXIiXVtlLmNoYXJDb2RlQXQoMCldWzRdLGE9bmV3IGNjKCJpbm5lciIsU2JlKGUsTWF0aC5yb3VuZCgxZTMqcikpKSxzPW5ldyB2bChbYV0se3dpZHRoOmd0KGkpLGhlaWdodDpndChyKSxzdHlsZToid2lkdGg6IitndChpKSx2aWV3Qm94OiIwIDAgIisxZTMqaSsiICIrTWF0aC5yb3VuZCgxZTMqcikscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSksbD1GZS5tYWtlU3ZnU3BhbihbXSxbc10sbik7cmV0dXJuIGwuaGVpZ2h0PXIsbC5zdHlsZS5oZWlnaHQ9Z3QociksbC5zdHlsZS53aWR0aD1ndChpKSx7dHlwZToiZWxlbSIsZWxlbTpsfX0sIm1ha2VJbm5lciIpLExDPS4wMDgseTQ9e3R5cGU6Imtlcm4iLHNpemU6LTEqTEN9LHY0ZT1bInwiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcdmVydCJdLHg0ZT1bIlxcfCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxWZXJ0Il0saSQ9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGwsdSxoLGYsZD0iIixwPTA7bD1oPWY9ZSx1PW51bGw7dmFyIG09IlNpemUxLVJlZ3VsYXIiO2U9PT0iXFx1cGFycm93Ij9oPWY9Ilx1MjNEMCI6ZT09PSJcXFVwYXJyb3ciP2g9Zj0iXHUyMDE2IjplPT09IlxcZG93bmFycm93Ij9sPWg9Ilx1MjNEMCI6ZT09PSJcXERvd25hcnJvdyI/bD1oPSJcdTIwMTYiOmU9PT0iXFx1cGRvd25hcnJvdyI/KGw9IlxcdXBhcnJvdyIsaD0iXHUyM0QwIixmPSJcXGRvd25hcnJvdyIpOmU9PT0iXFxVcGRvd25hcnJvdyI/KGw9IlxcVXBhcnJvdyIsaD0iXHUyMDE2IixmPSJcXERvd25hcnJvdyIpOkp0LmNvbnRhaW5zKHY0ZSxlKT8oaD0iXHUyMjIzIixkPSJ2ZXJ0IixwPTMzMyk6SnQuY29udGFpbnMoeDRlLGUpPyhoPSJcdTIyMjUiLGQ9ImRvdWJsZXZlcnQiLHA9NTU2KTplPT09IlsifHxlPT09IlxcbGJyYWNrIj8obD0iXHUyM0ExIixoPSJcdTIzQTIiLGY9Ilx1MjNBMyIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGJyYWNrIixwPTY2Nyk6ZT09PSJdInx8ZT09PSJcXHJicmFjayI/KGw9Ilx1MjNBNCIsaD0iXHUyM0E1IixmPSJcdTIzQTYiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJicmFjayIscD02NjcpOmU9PT0iXFxsZmxvb3IifHxlPT09Ilx1MjMwQSI/KGg9bD0iXHUyM0EyIixmPSJcdTIzQTMiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxmbG9vciIscD02NjcpOmU9PT0iXFxsY2VpbCJ8fGU9PT0iXHUyMzA4Ij8obD0iXHUyM0ExIixoPWY9Ilx1MjNBMiIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGNlaWwiLHA9NjY3KTplPT09IlxccmZsb29yInx8ZT09PSJcdTIzMEIiPyhoPWw9Ilx1MjNBNSIsZj0iXHUyM0E2IixtPSJTaXplNC1SZWd1bGFyIixkPSJyZmxvb3IiLHA9NjY3KTplPT09IlxccmNlaWwifHxlPT09Ilx1MjMwOSI/KGw9Ilx1MjNBNCIsaD1mPSJcdTIzQTUiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJjZWlsIixwPTY2Nyk6ZT09PSIoInx8ZT09PSJcXGxwYXJlbiI/KGw9Ilx1MjM5QiIsaD0iXHUyMzlDIixmPSJcdTIzOUQiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxwYXJlbiIscD04NzUpOmU9PT0iKSJ8fGU9PT0iXFxycGFyZW4iPyhsPSJcdTIzOUUiLGg9Ilx1MjM5RiIsZj0iXHUyM0EwIixtPSJTaXplNC1SZWd1bGFyIixkPSJycGFyZW4iLHA9ODc1KTplPT09IlxceyJ8fGU9PT0iXFxsYnJhY2UiPyhsPSJcdTIzQTciLHU9Ilx1MjNBOCIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcfSJ8fGU9PT0iXFxyYnJhY2UiPyhsPSJcdTIzQUIiLHU9Ilx1MjNBQyIsZj0iXHUyM0FEIixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcbGdyb3VwInx8ZT09PSJcdTI3RUUiPyhsPSJcdTIzQTciLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXHJncm91cCJ8fGU9PT0iXHUyN0VGIj8obD0iXHUyM0FCIixmPSJcdTIzQUQiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFxsbW91c3RhY2hlInx8ZT09PSJcdTIzQjAiPyhsPSJcdTIzQTciLGY9Ilx1MjNBRCIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6KGU9PT0iXFxybW91c3RhY2hlInx8ZT09PSJcdTIzQjEiKSYmKGw9Ilx1MjNBQiIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTt2YXIgZz1oeShsLG0sYSkseT1nLmhlaWdodCtnLmRlcHRoLHY9aHkoaCxtLGEpLHg9di5oZWlnaHQrdi5kZXB0aCxiPWh5KGYsbSxhKSx3PWIuaGVpZ2h0K2IuZGVwdGgsXz0wLFQ9MTtpZih1IT09bnVsbCl7dmFyIEU9aHkodSxtLGEpO189RS5oZWlnaHQrRS5kZXB0aCxUPTJ9dmFyIEw9eSt3K18sUz1NYXRoLm1heCgwLE1hdGguY2VpbCgoci1MKS8oVCp4KSkpLEE9TCtTKlQqeCxJPWkuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O24mJihJKj1pLnNpemVNdWx0aXBsaWVyKTt2YXIgRD1BLzItSSxrPVtdO2lmKGQubGVuZ3RoPjApe3ZhciBSPUEteS13LEM9TWF0aC5yb3VuZChBKjFlMyksTz1DYmUoZCxNYXRoLnJvdW5kKFIqMWUzKSksTj1uZXcgY2MoZCxPKSxQPShwLzFlMykudG9GaXhlZCgzKSsiZW0iLEY9KEMvMWUzKS50b0ZpeGVkKDMpKyJlbSIsQj1uZXcgdmwoW05dLHt3aWR0aDpQLGhlaWdodDpGLHZpZXdCb3g6IjAgMCAiK3ArIiAiK0N9KSxHPUZlLm1ha2VTdmdTcGFuKFtdLFtCXSxpKTtHLmhlaWdodD1DLzFlMyxHLnN0eWxlLndpZHRoPVAsRy5zdHlsZS5oZWlnaHQ9RixrLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06R30pfWVsc2V7aWYoay5wdXNoKGZDKGYsbSxhKSksay5wdXNoKHk0KSx1PT09bnVsbCl7dmFyIHo9QS15LXcrMipMQztrLnB1c2goZEMoaCx6LGkpKX1lbHNle3ZhciBXPShBLXktdy1fKS8yKzIqTEM7ay5wdXNoKGRDKGgsVyxpKSksay5wdXNoKHk0KSxrLnB1c2goZkModSxtLGEpKSxrLnB1c2goeTQpLGsucHVzaChkQyhoLFcsaSkpfWsucHVzaCh5NCksay5wdXNoKGZDKGwsbSxhKSl9dmFyIFo9aS5oYXZpbmdCYXNlU3R5bGUocnIuVEVYVCksaj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6RCxjaGlsZHJlbjprfSxaKTtyZXR1cm4gR0MoRmUubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsIm11bHQiXSxbal0sWikscnIuVEVYVCxpLHMpfSwibWFrZVN0YWNrZWREZWxpbSIpLHBDPTgwLG1DPS4wOCxnQz1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9RWJlKGUsaSxuKSxsPW5ldyBjYyhlLHMpLHU9bmV3IHZsKFtsXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6Z3Qociksdmlld0JveDoiMCAwIDQwMDAwMCAiK24scHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gc2xpY2UifSk7cmV0dXJuIEZlLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW3VdLGEpfSwic3FydFN2ZyIpLGI0ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci5oYXZpbmdCYXNlU2l6aW5nKCksaT1sJCgiXFxzdXJkIixlKm4uc2l6ZU11bHRpcGxpZXIsbyQsbiksYT1uLnNpemVNdWx0aXBsaWVyLHM9TWF0aC5tYXgoMCxyLm1pblJ1bGVUaGlja25lc3Mtci5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKSxsLHU9MCxoPTAsZj0wLGQ7cmV0dXJuIGkudHlwZT09PSJzbWFsbCI/KGY9MWUzKzFlMypzK3BDLGU8MT9hPTE6ZTwxLjQmJihhPS43KSx1PSgxK3MrbUMpL2EsaD0oMStzKS9hLGw9Z0MoInNxcnRNYWluIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjg1M2VtIixkPS44MzMvYSk6aS50eXBlPT09ImxhcmdlIj8oZj0oMWUzK3BDKSpmeVtpLnNpemVdLGg9KGZ5W2kuc2l6ZV0rcykvYSx1PShmeVtpLnNpemVdK3MrbUMpL2EsbD1nQygic3FydFNpemUiK2kuc2l6ZSx1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIxLjAyZW0iLGQ9MS9hKToodT1lK3MrbUMsaD1lK3MsZj1NYXRoLmZsb29yKDFlMyplK3MpK3BDLGw9Z0MoInNxcnRUYWxsIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjc0MmVtIixkPTEuMDU2KSxsLmhlaWdodD1oLGwuc3R5bGUuaGVpZ2h0PWd0KHUpLHtzcGFuOmwsYWR2YW5jZVdpZHRoOmQscnVsZVdpZHRoOihyLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MrcykqYX19LCJtYWtlU3FydEltYWdlIiksYSQ9WyIoIiwiXFxscGFyZW4iLCIpIiwiXFxycGFyZW4iLCJbIiwiXFxsYnJhY2siLCJdIiwiXFxyYnJhY2siLCJcXHsiLCJcXGxicmFjZSIsIlxcfSIsIlxccmJyYWNlIiwiXFxsZmxvb3IiLCJcXHJmbG9vciIsIlx1MjMwQSIsIlx1MjMwQiIsIlxcbGNlaWwiLCJcXHJjZWlsIiwiXHUyMzA4IiwiXHUyMzA5IiwiXFxzdXJkIl0sdzRlPVsiXFx1cGFycm93IiwiXFxkb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGFycm93IiwiXFxEb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwifCIsIlxcfCIsIlxcdmVydCIsIlxcVmVydCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwiXHUyN0VFIiwiXHUyN0VGIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwiXHUyM0IwIiwiXHUyM0IxIl0scyQ9WyI8IiwiPiIsIlxcbGFuZ2xlIiwiXFxyYW5nbGUiLCIvIiwiXFxiYWNrc2xhc2giLCJcXGx0IiwiXFxndCJdLGZ5PVswLDEuMiwxLjgsMi40LDNdLFQ0ZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZT09PSI8Inx8ZT09PSJcXGx0Inx8ZT09PSJcdTI3RTgiP2U9IlxcbGFuZ2xlIjooZT09PSI+Inx8ZT09PSJcXGd0Inx8ZT09PSJcdTI3RTkiKSYmKGU9IlxccmFuZ2xlIiksSnQuY29udGFpbnMoYSQsZSl8fEp0LmNvbnRhaW5zKHMkLGUpKXJldHVybiBuJChlLHIsITEsbixpLGEpO2lmKEp0LmNvbnRhaW5zKHc0ZSxlKSlyZXR1cm4gaSQoZSxmeVtyXSwhMSxuLGksYSk7dGhyb3cgbmV3IGx0KCJJbGxlZ2FsIGRlbGltaXRlcjogJyIrZSsiJyIpfSwibWFrZVNpemVkRGVsaW0iKSxrNGU9W3t0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpyci5URVhUfSx7dHlwZToibGFyZ2UiLHNpemU6MX0se3R5cGU6ImxhcmdlIixzaXplOjJ9LHt0eXBlOiJsYXJnZSIsc2l6ZTozfSx7dHlwZToibGFyZ2UiLHNpemU6NH1dLEU0ZT1be3R5cGU6InNtYWxsIixzdHlsZTpyci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlRFWFR9LHt0eXBlOiJzdGFjayJ9XSxvJD1be3R5cGU6InNtYWxsIixzdHlsZTpyci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlRFWFR9LHt0eXBlOiJsYXJnZSIsc2l6ZToxfSx7dHlwZToibGFyZ2UiLHNpemU6Mn0se3R5cGU6ImxhcmdlIixzaXplOjN9LHt0eXBlOiJsYXJnZSIsc2l6ZTo0fSx7dHlwZToic3RhY2sifV0sUzRlPW8oZnVuY3Rpb24oZSl7aWYoZS50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitlLnNpemUrIi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK2UudHlwZSsiJyBoZXJlLiIpfSwiZGVsaW1UeXBlVG9Gb250IiksbCQ9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9TWF0aC5taW4oMiwzLWkuc3R5bGUuc2l6ZSkscz1hO3M8bi5sZW5ndGgmJm5bc10udHlwZSE9PSJzdGFjayI7cysrKXt2YXIgbD1oeShlLFM0ZShuW3NdKSwibWF0aCIpLHU9bC5oZWlnaHQrbC5kZXB0aDtpZihuW3NdLnR5cGU9PT0ic21hbGwiKXt2YXIgaD1pLmhhdmluZ0Jhc2VTdHlsZShuW3NdLnN0eWxlKTt1Kj1oLnNpemVNdWx0aXBsaWVyfWlmKHU+cilyZXR1cm4gbltzXX1yZXR1cm4gbltuLmxlbmd0aC0xXX0sInRyYXZlcnNlU2VxdWVuY2UiKSxjJD1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXtlPT09IjwifHxlPT09IlxcbHQifHxlPT09Ilx1MjdFOCI/ZT0iXFxsYW5nbGUiOihlPT09Ij4ifHxlPT09IlxcZ3QifHxlPT09Ilx1MjdFOSIpJiYoZT0iXFxyYW5nbGUiKTt2YXIgbDtKdC5jb250YWlucyhzJCxlKT9sPWs0ZTpKdC5jb250YWlucyhhJCxlKT9sPW8kOmw9RTRlO3ZhciB1PWwkKGUscixsLGkpO3JldHVybiB1LnR5cGU9PT0ic21hbGwiP2c0ZShlLHUuc3R5bGUsbixpLGEscyk6dS50eXBlPT09ImxhcmdlIj9uJChlLHUuc2l6ZSxuLGksYSxzKTppJChlLHIsbixpLGEscyl9LCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIpLEM0ZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCppLnNpemVNdWx0aXBsaWVyLHU9OTAxLGg9NS9pLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxmPU1hdGgubWF4KHItbCxuK2wpLGQ9TWF0aC5tYXgoZi81MDAqdSwyKmYtaCk7cmV0dXJuIGMkKGUsZCwhMCxpLGEscyl9LCJtYWtlTGVmdFJpZ2h0RGVsaW0iKSxkdT17c3FydEltYWdlOmI0ZSxzaXplZERlbGltOlQ0ZSxzaXplVG9NYXhIZWlnaHQ6ZnksY3VzdG9tU2l6ZWREZWxpbTpjJCxsZWZ0UmlnaHREZWxpbTpDNGV9LHBHPXsiXFxiaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToxfSwiXFxCaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToyfSwiXFxiaWdnbCI6e21jbGFzczoibW9wZW4iLHNpemU6M30sIlxcQmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjR9LCJcXGJpZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZToxfSwiXFxCaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6Mn0sIlxcYmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTozfSwiXFxCaWdnciI6e21jbGFzczoibWNsb3NlIixzaXplOjR9LCJcXGJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6MX0sIlxcQmlnbSI6e21jbGFzczoibXJlbCIsc2l6ZToyfSwiXFxiaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTozfSwiXFxCaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTo0fSwiXFxiaWciOnttY2xhc3M6Im1vcmQiLHNpemU6MX0sIlxcQmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjJ9LCJcXGJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6M30sIlxcQmlnZyI6e21jbGFzczoibW9yZCIsc2l6ZTo0fX0sQTRlPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCJcdTIzMEEiLCJcdTIzMEIiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIlx1MjMwOCIsIlx1MjMwOSIsIjwiLCI+IiwiXFxsYW5nbGUiLCJcdTI3RTgiLCJcXHJhbmdsZSIsIlx1MjdFOSIsIlxcbHQiLCJcXGd0IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcbGdyb3VwIiwiXFxyZ3JvdXAiLCJcdTI3RUUiLCJcdTI3RUYiLCJcXGxtb3VzdGFjaGUiLCJcXHJtb3VzdGFjaGUiLCJcdTIzQjAiLCJcdTIzQjEiLCIvIiwiXFxiYWNrc2xhc2giLCJ8IiwiXFx2ZXJ0IiwiXFx8IiwiXFxWZXJ0IiwiXFx1cGFycm93IiwiXFxVcGFycm93IiwiXFxkb3duYXJyb3ciLCJcXERvd25hcnJvdyIsIlxcdXBkb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwiLiJdO28oTTQsImNoZWNrRGVsaW1pdGVyIik7U3Qoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPU00KGVbMF0sdCk7cmV0dXJue3R5cGU6ImRlbGltc2l6aW5nIixtb2RlOnQucGFyc2VyLm1vZGUsc2l6ZTpwR1t0LmZ1bmNOYW1lXS5zaXplLG1jbGFzczpwR1t0LmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06ci50ZXh0fX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT50LmRlbGltPT09Ii4iP0ZlLm1ha2VTcGFuKFt0Lm1jbGFzc10pOmR1LnNpemVkRGVsaW0odC5kZWxpbSx0LnNpemUsZSx0Lm1vZGUsW3QubWNsYXNzXSksImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKHQ9Pnt2YXIgZT1bXTt0LmRlbGltIT09Ii4iJiZlLnB1c2goTW8odC5kZWxpbSx0Lm1vZGUpKTt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixlKTt0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/ci5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnIuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPWd0KGR1LnNpemVUb01heEhlaWdodFt0LnNpemVdKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLG4pLHIuc2V0QXR0cmlidXRlKCJtYXhzaXplIixuKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7byhtRywiYXNzZXJ0UGFyc2VkIik7U3Qoe3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbmFtZXM6WyJcXHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXQucGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGN1cnJlbnRAY29sb3IiKTtpZihyJiZ0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IGx0KCJcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxyaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpNNChlWzBdLHQpLnRleHQsY29sb3I6cn19LCJoYW5kbGVyIil9KTtTdCh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1NNChlWzBdLHQpLG49dC5wYXJzZXI7KytuLmxlZnRyaWdodERlcHRoO3ZhciBpPW4ucGFyc2VFeHByZXNzaW9uKCExKTstLW4ubGVmdHJpZ2h0RGVwdGgsbi5leHBlY3QoIlxccmlnaHQiLCExKTt2YXIgYT1ncihuLnBhcnNlRnVuY3Rpb24oKSwibGVmdHJpZ2h0LXJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTpuLm1vZGUsYm9keTppLGxlZnQ6ci50ZXh0LHJpZ2h0OmEuZGVsaW0scmlnaHRDb2xvcjphLmNvbG9yfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57bUcodCk7Zm9yKHZhciByPUZpKHQuYm9keSxlLCEwLFsibW9wZW4iLCJtY2xvc2UiXSksbj0wLGk9MCxhPSExLHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdLmlzTWlkZGxlP2E9ITA6KG49TWF0aC5tYXgocltzXS5oZWlnaHQsbiksaT1NYXRoLm1heChyW3NdLmRlcHRoLGkpKTtuKj1lLnNpemVNdWx0aXBsaWVyLGkqPWUuc2l6ZU11bHRpcGxpZXI7dmFyIGw7aWYodC5sZWZ0PT09Ii4iP2w9eXkoZSxbIm1vcGVuIl0pOmw9ZHUubGVmdFJpZ2h0RGVsaW0odC5sZWZ0LG4saSxlLHQubW9kZSxbIm1vcGVuIl0pLHIudW5zaGlmdChsKSxhKWZvcih2YXIgdT0xO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9aC5pc01pZGRsZTtmJiYoclt1XT1kdS5sZWZ0UmlnaHREZWxpbShmLmRlbGltLG4saSxmLm9wdGlvbnMsdC5tb2RlLFtdKSl9dmFyIGQ7aWYodC5yaWdodD09PSIuIilkPXl5KGUsWyJtY2xvc2UiXSk7ZWxzZXt2YXIgcD10LnJpZ2h0Q29sb3I/ZS53aXRoQ29sb3IodC5yaWdodENvbG9yKTplO2Q9ZHUubGVmdFJpZ2h0RGVsaW0odC5yaWdodCxuLGkscCx0Lm1vZGUsWyJtY2xvc2UiXSl9cmV0dXJuIHIucHVzaChkKSxGZS5tYWtlU3BhbihbIm1pbm5lciJdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e21HKHQpO3ZhciByPVNzKHQuYm9keSxlKTtpZih0LmxlZnQhPT0iLiIpe3ZhciBuPW5ldyBhdC5NYXRoTm9kZSgibW8iLFtNbyh0LmxlZnQsdC5tb2RlKV0pO24uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxyLnVuc2hpZnQobil9aWYodC5yaWdodCE9PSIuIil7dmFyIGk9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW01vKHQucmlnaHQsdC5tb2RlKV0pO2kuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx0LnJpZ2h0Q29sb3ImJmkuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLHQucmlnaHRDb2xvciksci5wdXNoKGkpfXJldHVybiBQQyhyKX0sIm1hdGhtbEJ1aWxkZXIiKX0pO1N0KHt0eXBlOiJtaWRkbGUiLG5hbWVzOlsiXFxtaWRkbGUiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9TTQoZVswXSx0KTtpZighdC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IGx0KCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHIpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpyLnRleHR9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcjtpZih0LmRlbGltPT09Ii4iKXI9eXkoZSxbXSk7ZWxzZXtyPWR1LnNpemVkRGVsaW0odC5kZWxpbSwxLGUsdC5tb2RlLFtdKTt2YXIgbj17ZGVsaW06dC5kZWxpbSxvcHRpb25zOmV9O3IuaXNNaWRkbGU9bn1yZXR1cm4gcn0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9dC5kZWxpbT09PSJcXHZlcnQifHx0LmRlbGltPT09InwiP01vKCJ8IiwidGV4dCIpOk1vKHQuZGVsaW0sdC5tb2RlKSxuPW5ldyBhdC5NYXRoTm9kZSgibW8iLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxuLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksbi5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTskQz1vKCh0LGUpPT57dmFyIHI9RmUud3JhcEZyYWdtZW50KFByKHQuYm9keSxlKSxlKSxuPXQubGFiZWwuc2xpY2UoMSksaT1lLnNpemVNdWx0aXBsaWVyLGEscz0wLGw9SnQuaXNDaGFyYWN0ZXJCb3godC5ib2R5KTtpZihuPT09InNvdXQiKWE9RmUubWFrZVNwYW4oWyJzdHJldGNoeSIsInNvdXQiXSksYS5oZWlnaHQ9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzL2kscz0tLjUqZS5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihuPT09InBoYXNlIil7dmFyIHU9Sm4oe251bWJlcjouNix1bml0OiJwdCJ9LGUpLGg9Sm4oe251bWJlcjouMzUsdW5pdDoiZXgifSxlKSxmPWUuaGF2aW5nQmFzZVNpemluZygpO2k9aS9mLnNpemVNdWx0aXBsaWVyO3ZhciBkPXIuaGVpZ2h0K3IuZGVwdGgrdStoO3Iuc3R5bGUucGFkZGluZ0xlZnQ9Z3QoZC8yK3UpO3ZhciBwPU1hdGguZmxvb3IoMWUzKmQqaSksbT1UYmUocCksZz1uZXcgdmwoW25ldyBjYygicGhhc2UiLG0pXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6Z3QocC8xZTMpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitwLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO2E9RmUubWFrZVN2Z1NwYW4oWyJoaWRlLXRhaWwiXSxbZ10sZSksYS5zdHlsZS5oZWlnaHQ9Z3QoZCkscz1yLmRlcHRoK3UraH1lbHNley9jYW5jZWwvLnRlc3Qobik/bHx8ci5jbGFzc2VzLnB1c2goImNhbmNlbC1wYWQiKTpuPT09ImFuZ2wiP3IuY2xhc3Nlcy5wdXNoKCJhbmdscGFkIik6ci5jbGFzc2VzLnB1c2goImJveHBhZCIpO3ZhciB5PTAsdj0wLHg9MDsvYm94Ly50ZXN0KG4pPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxlLm1pblJ1bGVUaGlja25lc3MpLHk9ZS5mb250TWV0cmljcygpLmZib3hzZXArKG49PT0iY29sb3Jib3giPzA6eCksdj15KTpuPT09ImFuZ2wiPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxlLm1pblJ1bGVUaGlja25lc3MpLHk9NCp4LHY9TWF0aC5tYXgoMCwuMjUtci5kZXB0aCkpOih5PWw/LjI6MCx2PXkpLGE9bXUuZW5jbG9zZVNwYW4ocixuLHksdixlKSwvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3Qobik/KGEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIixhLnN0eWxlLmJvcmRlcldpZHRoPWd0KHgpKTpuPT09ImFuZ2wiJiZ4IT09LjA0OSYmKGEuc3R5bGUuYm9yZGVyVG9wV2lkdGg9Z3QoeCksYS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPWd0KHgpKSxzPXIuZGVwdGgrdix0LmJhY2tncm91bmRDb2xvciYmKGEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yLHQuYm9yZGVyQ29sb3ImJihhLnN0eWxlLmJvcmRlckNvbG9yPXQuYm9yZGVyQ29sb3IpKX12YXIgYjtpZih0LmJhY2tncm91bmRDb2xvciliPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphLHNoaWZ0OnN9LHt0eXBlOiJlbGVtIixlbGVtOnIsc2hpZnQ6MH1dfSxlKTtlbHNle3ZhciB3PS9jYW5jZWx8cGhhc2UvLnRlc3Qobik/WyJzdmctYWxpZ24iXTpbXTtiPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyLHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOmEsc2hpZnQ6cyx3cmFwcGVyQ2xhc3Nlczp3fV19LGUpfXJldHVybi9jYW5jZWwvLnRlc3QobikmJihiLmhlaWdodD1yLmhlaWdodCxiLmRlcHRoPXIuZGVwdGgpLC9jYW5jZWwvLnRlc3QobikmJiFsP0ZlLm1ha2VTcGFuKFsibW9yZCIsImNhbmNlbC1sYXAiXSxbYl0sZSk6RmUubWFrZVNwYW4oWyJtb3JkIl0sW2JdLGUpfSwiaHRtbEJ1aWxkZXIkNyIpLFZDPW8oKHQsZSk9Pnt2YXIgcj0wLG49bmV3IGF0Lk1hdGhOb2RlKHQubGFiZWwuaW5kZXhPZigiY29sb3Jib3giKT4tMT8ibXBhZGRlZCI6Im1lbmNsb3NlIixbeW4odC5ib2R5LGUpXSk7c3dpdGNoKHQubGFiZWwpe2Nhc2UiXFxjYW5jZWwiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UiKTticmVhaztjYXNlIlxcYmNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXHBoYXNlIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJwaGFzb3JhbmdsZSIpO2JyZWFrO2Nhc2UiXFxzb3V0IjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJob3Jpem9udGFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGZib3giOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImJveCIpO2JyZWFrO2Nhc2UiXFxhbmdsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJhY3R1YXJpYWwiKTticmVhaztjYXNlIlxcZmNvbG9yYm94IjpjYXNlIlxcY29sb3Jib3giOmlmKHI9ZS5mb250TWV0cmljcygpLmZib3hzZXAqZS5mb250TWV0cmljcygpLnB0UGVyRW0sbi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKyIrMipyKyJwdCIpLG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIrIisyKnIrInB0Iiksbi5zZXRBdHRyaWJ1dGUoImxzcGFjZSIscisicHQiKSxuLnNldEF0dHJpYnV0ZSgidm9mZnNldCIscisicHQiKSx0LmxhYmVsPT09IlxcZmNvbG9yYm94Iil7dmFyIGk9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmZib3hydWxlLGUubWluUnVsZVRoaWNrbmVzcyk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAiK2krImVtIHNvbGlkICIrU3RyaW5nKHQuYm9yZGVyQ29sb3IpKX1icmVhaztjYXNlIlxceGNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2UiKTticmVha31yZXR1cm4gdC5iYWNrZ3JvdW5kQ29sb3ImJm4uc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsdC5iYWNrZ3JvdW5kQ29sb3IpLG59LCJtYXRobWxCdWlsZGVyJDYiKTtTdCh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bixmdW5jTmFtZTppfT10LGE9Z3IoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixzPWVbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOmEsYm9keTpzfX0saHRtbEJ1aWxkZXI6JEMsbWF0aG1sQnVpbGRlcjpWQ30pO1N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MyxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJjb2xvciIsInRleHQiXX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQsYT1ncihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHM9Z3IoZVsxXSwiY29sb3ItdG9rZW4iKS5jb2xvcixsPWVbMl07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOnMsYm9yZGVyQ29sb3I6YSxib2R5Omx9fSxodG1sQnVpbGRlcjokQyxtYXRobWxCdWlsZGVyOlZDfSk7U3Qoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmYm94Il0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnIubW9kZSxsYWJlbDoiXFxmYm94Iixib2R5OmVbMF19fX0pO1N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcY2FuY2VsIiwiXFxiY2FuY2VsIiwiXFx4Y2FuY2VsIiwiXFxzb3V0IiwiXFxwaGFzZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYm9keTppfX0saHRtbEJ1aWxkZXI6JEMsbWF0aG1sQnVpbGRlcjpWQ30pO1N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpyLm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTplWzBdfX19KTt1JD17fTtvKHVjLCJkZWZpbmVFbnZpcm9ubWVudCIpO2gkPXt9O28obGUsImRlZmluZU1hY3JvIik7byhnRywiZ2V0SExpbmVzIik7STQ9byh0PT57dmFyIGU9dC5wYXJzZXIuc2V0dGluZ3M7aWYoIWUuZGlzcGxheU1vZGUpdGhyb3cgbmV3IGx0KCJ7Iit0LmVudk5hbWUrIn0gY2FuIGJlIHVzZWQgb25seSBpbiBkaXNwbGF5IG1vZGUuIil9LCJ2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCIpO28oVUMsImdldEF1dG9UYWciKTtvKHhoLCJwYXJzZUFycmF5Iik7byhIQywiZENlbGxTdHlsZSIpO2hjPW8oZnVuY3Rpb24oZSxyKXt2YXIgbixpLGE9ZS5ib2R5Lmxlbmd0aCxzPWUuaExpbmVzQmVmb3JlUm93LGw9MCx1PW5ldyBBcnJheShhKSxoPVtdLGY9TWF0aC5tYXgoci5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLHIubWluUnVsZVRoaWNrbmVzcyksZD0xL3IuZm9udE1ldHJpY3MoKS5wdFBlckVtLHA9NSpkO2lmKGUuY29sU2VwYXJhdGlvblR5cGUmJmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiKXt2YXIgbT1yLmhhdmluZ1N0eWxlKHJyLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7cD0uMjc3OCoobS9yLnNpemVNdWx0aXBsaWVyKX12YXIgZz1lLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9Kbih7bnVtYmVyOjMsdW5pdDoiZXgifSxyKToxMipkLHk9MypkLHY9ZS5hcnJheXN0cmV0Y2gqZyx4PS43KnYsYj0uMyp2LHc9MDtmdW5jdGlvbiBfKGtlKXtmb3IodmFyIFJlPTA7UmU8a2UubGVuZ3RoOysrUmUpUmU+MCYmKHcrPS4yNSksaC5wdXNoKHtwb3M6dyxpc0Rhc2hlZDprZVtSZV19KX1mb3IobyhfLCJzZXRITGluZVBvcyIpLF8oc1swXSksbj0wO248ZS5ib2R5Lmxlbmd0aDsrK24pe3ZhciBUPWUuYm9keVtuXSxFPXgsTD1iO2w8VC5sZW5ndGgmJihsPVQubGVuZ3RoKTt2YXIgUz1uZXcgQXJyYXkoVC5sZW5ndGgpO2ZvcihpPTA7aTxULmxlbmd0aDsrK2kpe3ZhciBBPVByKFRbaV0scik7TDxBLmRlcHRoJiYoTD1BLmRlcHRoKSxFPEEuaGVpZ2h0JiYoRT1BLmhlaWdodCksU1tpXT1BfXZhciBJPWUucm93R2Fwc1tuXSxEPTA7SSYmKEQ9Sm4oSSxyKSxEPjAmJihEKz1iLEw8RCYmKEw9RCksRD0wKSksZS5hZGRKb3QmJihMKz15KSxTLmhlaWdodD1FLFMuZGVwdGg9TCx3Kz1FLFMucG9zPXcsdys9TCtELHVbbl09UyxfKHNbbisxXSl9dmFyIGs9dy8yK3IuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LFI9ZS5jb2xzfHxbXSxDPVtdLE8sTixQPVtdO2lmKGUudGFncyYmZS50YWdzLnNvbWUoa2U9PmtlKSlmb3Iobj0wO248YTsrK24pe3ZhciBGPXVbbl0sQj1GLnBvcy1rLEc9ZS50YWdzW25dLHo9dm9pZCAwO0c9PT0hMD96PUZlLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHIpOkc9PT0hMT96PUZlLm1ha2VTcGFuKFtdLFtdLHIpOno9RmUubWFrZVNwYW4oW10sRmkoRyxyLCEwKSxyKSx6LmRlcHRoPUYuZGVwdGgsei5oZWlnaHQ9Ri5oZWlnaHQsUC5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOnosc2hpZnQ6Qn0pfWZvcihpPTAsTj0wO2k8bHx8TjxSLmxlbmd0aDsrK2ksKytOKXtmb3IodmFyIFc9UltOXXx8e30sWj0hMDtXLnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKFp8fChPPUZlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1ndChyLmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksQy5wdXNoKE8pKSxXLnNlcGFyYXRvcj09PSJ8Inx8Vy5zZXBhcmF0b3I9PT0iOiIpe3ZhciBqPVcuc2VwYXJhdG9yPT09InwiPyJzb2xpZCI6ImRhc2hlZCIsb2U9RmUubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSxyKTtvZS5zdHlsZS5oZWlnaHQ9Z3Qodyksb2Uuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1ndChmKSxvZS5zdHlsZS5ib3JkZXJSaWdodFN0eWxlPWosb2Uuc3R5bGUubWFyZ2luPSIwICIrZ3QoLWYvMik7dmFyIEs9dy1rO0smJihvZS5zdHlsZS52ZXJ0aWNhbEFsaWduPWd0KC1LKSksQy5wdXNoKG9lKX1lbHNlIHRocm93IG5ldyBsdCgiSW52YWxpZCBzZXBhcmF0b3IgdHlwZTogIitXLnNlcGFyYXRvcik7TisrLFc9UltOXXx8e30sWj0hMX1pZighKGk+PWwpKXt2YXIgZWU9dm9pZCAwOyhpPjB8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihlZT1KdC5kZWZsdChXLnByZWdhcCxwKSxlZSE9PTAmJihPPUZlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1ndChlZSksQy5wdXNoKE8pKSk7dmFyIEo9W107Zm9yKG49MDtuPGE7KytuKXt2YXIgSD11W25dLHE9SFtpXTtpZihxKXt2YXIgUT1ILnBvcy1rO3EuZGVwdGg9SC5kZXB0aCxxLmhlaWdodD1ILmhlaWdodCxKLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06cSxzaGlmdDpRfSl9fUo9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46Sn0sciksSj1GZS5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhXLmFsaWdufHwiYyIpXSxbSl0pLEMucHVzaChKKSwoaTxsLTF8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihlZT1KdC5kZWZsdChXLnBvc3RnYXAscCksZWUhPT0wJiYoTz1GZS5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLE8uc3R5bGUud2lkdGg9Z3QoZWUpLEMucHVzaChPKSkpfX1pZih1PUZlLm1ha2VTcGFuKFsibXRhYmxlIl0sQyksaC5sZW5ndGg+MCl7Zm9yKHZhciBhZT1GZS5tYWtlTGluZVNwYW4oImhsaW5lIixyLGYpLHVlPUZlLm1ha2VMaW5lU3BhbigiaGRhc2hsaW5lIixyLGYpLGNlPVt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9XTtoLmxlbmd0aD4wOyl7dmFyIHRlPWgucG9wKCksTmU9dGUucG9zLWs7dGUuaXNEYXNoZWQ/Y2UucHVzaCh7dHlwZToiZWxlbSIsZWxlbTp1ZSxzaGlmdDpOZX0pOmNlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06YWUsc2hpZnQ6TmV9KX11PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmNlfSxyKX1pZihQLmxlbmd0aD09PTApcmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCJdLFt1XSxyKTt2YXIgc2U9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46UH0scik7cmV0dXJuIHNlPUZlLm1ha2VTcGFuKFsidGFnIl0sW3NlXSxyKSxGZS5tYWtlRnJhZ21lbnQoW3Usc2VdKX0sImh0bWxCdWlsZGVyIiksXzRlPXtjOiJjZW50ZXIgIixsOiJsZWZ0ICIscjoicmlnaHQgIn0sZmM9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPW5ldyBhdC5NYXRoTm9kZSgibXRkIixbXSxbIm10ci1nbHVlIl0pLGE9bmV3IGF0Lk1hdGhOb2RlKCJtdGQiLFtdLFsibW1sLWVxbi1udW0iXSkscz0wO3M8ZS5ib2R5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1lLmJvZHlbc10sdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKG5ldyBhdC5NYXRoTm9kZSgibXRkIixbeW4obFtoXSxyKV0pKTtlLnRhZ3MmJmUudGFnc1tzXSYmKHUudW5zaGlmdChpKSx1LnB1c2goaSksZS5sZXFubz91LnVuc2hpZnQoYSk6dS5wdXNoKGEpKSxuLnB1c2gobmV3IGF0Lk1hdGhOb2RlKCJtdHIiLHUpKX12YXIgZj1uZXcgYXQuTWF0aE5vZGUoIm10YWJsZSIsbiksZD1lLmFycmF5c3RyZXRjaD09PS41Py4xOi4xNitlLmFycmF5c3RyZXRjaC0xKyhlLmFkZEpvdD8uMDk6MCk7Zi5zZXRBdHRyaWJ1dGUoInJvd3NwYWNpbmciLGd0KGQpKTt2YXIgcD0iIixtPSIiO2lmKGUuY29scyYmZS5jb2xzLmxlbmd0aD4wKXt2YXIgZz1lLmNvbHMseT0iIix2PSExLHg9MCxiPWcubGVuZ3RoO2dbMF0udHlwZT09PSJzZXBhcmF0b3IiJiYocCs9InRvcCAiLHg9MSksZ1tnLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihwKz0iYm90dG9tICIsYi09MSk7Zm9yKHZhciB3PXg7dzxiO3crKylnW3ddLnR5cGU9PT0iYWxpZ24iPyhtKz1fNGVbZ1t3XS5hbGlnbl0sdiYmKHkrPSJub25lICIpLHY9ITApOmdbd10udHlwZT09PSJzZXBhcmF0b3IiJiZ2JiYoeSs9Z1t3XS5zZXBhcmF0b3I9PT0ifCI/InNvbGlkICI6ImRhc2hlZCAiLHY9ITEpO2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5hbGlnbiIsbS50cmltKCkpLC9bc2RdLy50ZXN0KHkpJiZmLnNldEF0dHJpYnV0ZSgiY29sdW1ubGluZXMiLHkudHJpbSgpKX1pZihlLmNvbFNlcGFyYXRpb25UeXBlPT09ImFsaWduIil7Zm9yKHZhciBfPWUuY29sc3x8W10sVD0iIixFPTE7RTxfLmxlbmd0aDtFKyspVCs9RSUyPyIwZW0gIjoiMWVtICI7Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLFQudHJpbSgpKX1lbHNlIGUuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ25hdCJ8fGUuY29sU2VwYXJhdGlvblR5cGU9PT0iZ2F0aGVyIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjBlbSIpOmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiP2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4yNzc4ZW0iKTplLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuNWVtIik6Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIxZW0iKTt2YXIgTD0iIixTPWUuaExpbmVzQmVmb3JlUm93O3ArPVNbMF0ubGVuZ3RoPjA/ImxlZnQgIjoiIixwKz1TW1MubGVuZ3RoLTFdLmxlbmd0aD4wPyJyaWdodCAiOiIiO2Zvcih2YXIgQT0xO0E8Uy5sZW5ndGgtMTtBKyspTCs9U1tBXS5sZW5ndGg9PT0wPyJub25lICI6U1tBXVswXT8iZGFzaGVkICI6InNvbGlkICI7cmV0dXJuL1tzZF0vLnRlc3QoTCkmJmYuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsTC50cmltKCkpLHAhPT0iIiYmKGY9bmV3IGF0Lk1hdGhOb2RlKCJtZW5jbG9zZSIsW2ZdKSxmLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLHAudHJpbSgpKSksZS5hcnJheXN0cmV0Y2gmJmUuYXJyYXlzdHJldGNoPDEmJihmPW5ldyBhdC5NYXRoTm9kZSgibXN0eWxlIixbZl0pLGYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSksZn0sIm1hdGhtbEJ1aWxkZXIiKSxmJD1vKGZ1bmN0aW9uKGUscil7ZS5lbnZOYW1lLmluZGV4T2YoImVkIik9PT0tMSYmSTQoZSk7dmFyIG49W10saT1lLmVudk5hbWUuaW5kZXhPZigiYXQiKT4tMT8iYWxpZ25hdCI6ImFsaWduIixhPWUuZW52TmFtZT09PSJzcGxpdCIscz14aChlLnBhcnNlcix7Y29sczpuLGFkZEpvdDohMCxhdXRvVGFnOmE/dm9pZCAwOlVDKGUuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsY29sU2VwYXJhdGlvblR5cGU6aSxtYXhOdW1Db2xzOmE/Mjp2b2lkIDAsbGVxbm86ZS5wYXJzZXIuc2V0dGluZ3MubGVxbm99LCJkaXNwbGF5IiksbCx1PTAsaD17dHlwZToib3JkZ3JvdXAiLG1vZGU6ZS5tb2RlLGJvZHk6W119O2lmKHJbMF0mJnJbMF0udHlwZT09PSJvcmRncm91cCIpe2Zvcih2YXIgZj0iIixkPTA7ZDxyWzBdLmJvZHkubGVuZ3RoO2QrKyl7dmFyIHA9Z3IoclswXS5ib2R5W2RdLCJ0ZXh0b3JkIik7Zis9cC50ZXh0fWw9TnVtYmVyKGYpLHU9bCoyfXZhciBtPSF1O3MuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2Zvcih2YXIgYj0xO2I8eC5sZW5ndGg7Yis9Mil7dmFyIHc9Z3IoeFtiXSwic3R5bGluZyIpLF89Z3Iody5ib2R5WzBdLCJvcmRncm91cCIpO18uYm9keS51bnNoaWZ0KGgpfWlmKG0pdTx4Lmxlbmd0aCYmKHU9eC5sZW5ndGgpO2Vsc2V7dmFyIFQ9eC5sZW5ndGgvMjtpZihsPFQpdGhyb3cgbmV3IGx0KCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIitsKyIsIGJ1dCBnb3QgIitUKSx4WzBdKX19KTtmb3IodmFyIGc9MDtnPHU7KytnKXt2YXIgeT0iciIsdj0wO2clMj09PTE/eT0ibCI6Zz4wJiZtJiYodj0xKSxuW2ddPXt0eXBlOiJhbGlnbiIsYWxpZ246eSxwcmVnYXA6dixwb3N0Z2FwOjB9fXJldHVybiBzLmNvbFNlcGFyYXRpb25UeXBlPW0/ImFsaWduIjoiYWxpZ25hdCIsc30sImFsaWduZWRIYW5kbGVyIik7dWMoe3R5cGU6ImFycmF5IixuYW1lczpbImFycmF5IiwiZGFycmF5Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhciByPU40KGVbMF0pLG49cj9bZVswXV06Z3IoZVswXSwib3JkZ3JvdXAiKS5ib2R5LGk9bi5tYXAoZnVuY3Rpb24ocyl7dmFyIGw9RkMocyksdT1sLnRleHQ7aWYoImxjciIuaW5kZXhPZih1KSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246dX07aWYodT09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZih1PT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBsdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KSxhPXtjb2xzOmksaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOmkubGVuZ3RofTtyZXR1cm4geGgodC5wYXJzZXIsYSxIQyh0LmVudk5hbWUpKX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJtYXRyaXgiLCJwbWF0cml4IiwiYm1hdHJpeCIsIkJtYXRyaXgiLCJ2bWF0cml4IiwiVm1hdHJpeCIsIm1hdHJpeCoiLCJwbWF0cml4KiIsImJtYXRyaXgqIiwiQm1hdHJpeCoiLCJ2bWF0cml4KiIsIlZtYXRyaXgqIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXIgZT17bWF0cml4Om51bGwscG1hdHJpeDpbIigiLCIpIl0sYm1hdHJpeDpbIlsiLCJdIl0sQm1hdHJpeDpbIlxceyIsIlxcfSJdLHZtYXRyaXg6WyJ8IiwifCJdLFZtYXRyaXg6WyJcXFZlcnQiLCJcXFZlcnQiXX1bdC5lbnZOYW1lLnJlcGxhY2UoIioiLCIiKV0scj0iYyIsbj17aHNraXBCZWZvcmVBbmRBZnRlcjohMSxjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX07aWYodC5lbnZOYW1lLmNoYXJBdCh0LmVudk5hbWUubGVuZ3RoLTEpPT09IioiKXt2YXIgaT10LnBhcnNlcjtpZihpLmNvbnN1bWVTcGFjZXMoKSxpLmZldGNoKCkudGV4dD09PSJbIil7aWYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCkscj1pLmZldGNoKCkudGV4dCwibGNyIi5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCBsIG9yIGMgb3IgciIsaS5uZXh0VG9rZW4pO2kuY29uc3VtZSgpLGkuY29uc3VtZVNwYWNlcygpLGkuZXhwZWN0KCJdIiksaS5jb25zdW1lKCksbi5jb2xzPVt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX19dmFyIGE9eGgodC5wYXJzZXIsbixIQyh0LmVudk5hbWUpKSxzPU1hdGgubWF4KDAsLi4uYS5ib2R5Lm1hcChsPT5sLmxlbmd0aCkpO3JldHVybiBhLmNvbHM9bmV3IEFycmF5KHMpLmZpbGwoe3R5cGU6ImFsaWduIixhbGlnbjpyfSksZT97dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OlthXSxsZWZ0OmVbMF0scmlnaHQ6ZVsxXSxyaWdodENvbG9yOnZvaWQgMH06YX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzbWFsbG1hdHJpeCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFyIGU9e2FycmF5c3RyZXRjaDouNX0scj14aCh0LnBhcnNlcixlLCJzY3JpcHQiKTtyZXR1cm4gci5jb2xTZXBhcmF0aW9uVHlwZT0ic21hbGwiLHJ9LGh0bWxCdWlsZGVyOmhjLG1hdGhtbEJ1aWxkZXI6ZmN9KTt1Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsic3ViYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFyIHI9TjQoZVswXSksbj1yP1tlWzBdXTpncihlWzBdLCJvcmRncm91cCIpLmJvZHksaT1uLm1hcChmdW5jdGlvbihzKXt2YXIgbD1GQyhzKSx1PWwudGV4dDtpZigibGMiLmluZGV4T2YodSkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOnV9O3Rocm93IG5ldyBsdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KTtpZihpLmxlbmd0aD4xKXRocm93IG5ldyBsdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgYT17Y29sczppLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZihhPXhoKHQucGFyc2VyLGEsInNjcmlwdCIpLGEuYm9keS5sZW5ndGg+MCYmYS5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBsdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gYX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhciBlPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHI9eGgodC5wYXJzZXIsZSxIQyh0LmVudk5hbWUpKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OltyXSxsZWZ0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/Ii4iOiJcXHsiLHJpZ2h0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/IlxcfSI6Ii4iLHJpZ2h0Q29sb3I6dm9pZCAwfX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJhbGlnbiIsImFsaWduKiIsImFsaWduZWQiLCJzcGxpdCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6ZiQsaHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJnYXRoZXJlZCIsImdhdGhlciIsImdhdGhlcioiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe0p0LmNvbnRhaW5zKFsiZ2F0aGVyIiwiZ2F0aGVyKiJdLHQuZW52TmFtZSkmJkk0KHQpO3ZhciBlPXtjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOiJjIn1dLGFkZEpvdDohMCxjb2xTZXBhcmF0aW9uVHlwZToiZ2F0aGVyIixhdXRvVGFnOlVDKHQuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiB4aCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOmhjLG1hdGhtbEJ1aWxkZXI6ZmN9KTt1Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpmJCxodG1sQnVpbGRlcjpoYyxtYXRobWxCdWlsZGVyOmZjfSk7dWMoe3R5cGU6ImFycmF5IixuYW1lczpbImVxdWF0aW9uIiwiZXF1YXRpb24qIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXtJNCh0KTt2YXIgZT17YXV0b1RhZzpVQyh0LmVudk5hbWUpLGVtcHR5U2luZ2xlUm93OiEwLHNpbmdsZVJvdzohMCxtYXhOdW1Db2xzOjEsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiB4aCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOmhjLG1hdGhtbEJ1aWxkZXI6ZmN9KTt1Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiQ0QiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3JldHVybiBJNCh0KSxwNGUodC5wYXJzZXIpfSxodG1sQnVpbGRlcjpoYyxtYXRobWxCdWlsZGVyOmZjfSk7bGUoIlxcbm9udW1iZXIiLCJcXGdkZWZcXEBlcW5zd3swfSIpO2xlKCJcXG5vdGFnIiwiXFxub251bWJlciIpO1N0KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcaGxpbmUiLCJcXGhkYXNobGluZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IGx0KHQuZnVuY05hbWUrIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudCIpfX0pO3lHPXUkO1N0KHt0eXBlOiJlbnZpcm9ubWVudCIsbmFtZXM6WyJcXGJlZ2luIiwiXFxlbmQiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO2lmKGkudHlwZSE9PSJvcmRncm91cCIpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWUiLGkpO2Zvcih2YXIgYT0iIixzPTA7czxpLmJvZHkubGVuZ3RoOysrcylhKz1ncihpLmJvZHlbc10sInRleHRvcmQiKS50ZXh0O2lmKG49PT0iXFxiZWdpbiIpe2lmKCF5Ry5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgbHQoIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrYSxpKTt2YXIgbD15R1thXSx7YXJnczp1LG9wdEFyZ3M6aH09ci5wYXJzZUFyZ3VtZW50cygiXFxiZWdpbnsiK2ErIn0iLGwpLGY9e21vZGU6ci5tb2RlLGVudk5hbWU6YSxwYXJzZXI6cn0sZD1sLmhhbmRsZXIoZix1LGgpO3IuZXhwZWN0KCJcXGVuZCIsITEpO3ZhciBwPXIubmV4dFRva2VuLG09Z3Ioci5wYXJzZUZ1bmN0aW9uKCksImVudmlyb25tZW50Iik7aWYobS5uYW1lIT09YSl0aHJvdyBuZXcgbHQoIk1pc21hdGNoOiBcXGJlZ2lueyIrYSsifSBtYXRjaGVkIGJ5IFxcZW5keyIrbS5uYW1lKyJ9IixwKTtyZXR1cm4gZH1yZXR1cm57dHlwZToiZW52aXJvbm1lbnQiLG1vZGU6ci5tb2RlLG5hbWU6YSxuYW1lR3JvdXA6aX19fSk7ZCQ9bygodCxlKT0+e3ZhciByPXQuZm9udCxuPWUud2l0aEZvbnQocik7cmV0dXJuIFByKHQuYm9keSxuKX0sImh0bWxCdWlsZGVyJDUiKSxwJD1vKCh0LGUpPT57dmFyIHI9dC5mb250LG49ZS53aXRoRm9udChyKTtyZXR1cm4geW4odC5ib2R5LG4pfSwibWF0aG1sQnVpbGRlciQ0Iiksdkc9eyJcXEJiYiI6IlxcbWF0aGJiIiwiXFxib2xkIjoiXFxtYXRoYmYiLCJcXGZyYWsiOiJcXG1hdGhmcmFrIiwiXFxibSI6IlxcYm9sZHN5bWJvbCJ9O1N0KHt0eXBlOiJmb250IixuYW1lczpbIlxcbWF0aHJtIiwiXFxtYXRoaXQiLCJcXG1hdGhiZiIsIlxcbWF0aG5vcm1hbCIsIlxcbWF0aGJiIiwiXFxtYXRoY2FsIiwiXFxtYXRoZnJhayIsIlxcbWF0aHNjciIsIlxcbWF0aHNmIiwiXFxtYXRodHQiLCJcXEJiYiIsIlxcYm9sZCIsIlxcZnJhayJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9QzQoZVswXSksYT1uO3JldHVybiBhIGluIHZHJiYoYT12R1thXSkse3R5cGU6ImZvbnQiLG1vZGU6ci5tb2RlLGZvbnQ6YS5zbGljZSgxKSxib2R5Oml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmQkLG1hdGhtbEJ1aWxkZXI6cCR9KTtTdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcYm9sZHN5bWJvbCIsIlxcYm0iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdLGk9SnQuaXNDaGFyYWN0ZXJCb3gobik7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOlI0KG4pLGJvZHk6W3t0eXBlOiJmb250Iixtb2RlOnIubW9kZSxmb250OiJib2xkc3ltYm9sIixib2R5Om59XSxpc0NoYXJhY3RlckJveDppfX0sImhhbmRsZXIiKX0pO1N0KHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLGJyZWFrT25Ub2tlblRleHQ6aX09dCx7bW9kZTphfT1yLHM9ci5wYXJzZUV4cHJlc3Npb24oITAsaSksbD0ibWF0aCIrbi5zbGljZSgxKTtyZXR1cm57dHlwZToiZm9udCIsbW9kZTphLGZvbnQ6bCxib2R5Ont0eXBlOiJvcmRncm91cCIsbW9kZTpyLm1vZGUsYm9keTpzfX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ZCQsbWF0aG1sQnVpbGRlcjpwJH0pO20kPW8oKHQsZSk9Pnt2YXIgcj1lO3JldHVybiB0PT09ImRpc3BsYXkiP3I9ci5pZD49cnIuU0NSSVBULmlkP3IudGV4dCgpOnJyLkRJU1BMQVk6dD09PSJ0ZXh0IiYmci5zaXplPT09cnIuRElTUExBWS5zaXplP3I9cnIuVEVYVDp0PT09InNjcmlwdCI/cj1yci5TQ1JJUFQ6dD09PSJzY3JpcHRzY3JpcHQiJiYocj1yci5TQ1JJUFRTQ1JJUFQpLHJ9LCJhZGp1c3RTdHlsZSIpLFdDPW8oKHQsZSk9Pnt2YXIgcj1tJCh0LnNpemUsZS5zdHlsZSksbj1yLmZyYWNOdW0oKSxpPXIuZnJhY0RlbigpLGE7YT1lLmhhdmluZ1N0eWxlKG4pO3ZhciBzPVByKHQubnVtZXIsYSxlKTtpZih0LmNvbnRpbnVlZCl7dmFyIGw9OC41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtLHU9My41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtO3MuaGVpZ2h0PXMuaGVpZ2h0PGw/bDpzLmhlaWdodCxzLmRlcHRoPXMuZGVwdGg8dT91OnMuZGVwdGh9YT1lLmhhdmluZ1N0eWxlKGkpO3ZhciBoPVByKHQuZGVub20sYSxlKSxmLGQscDt0Lmhhc0JhckxpbmU/KHQuYmFyU2l6ZT8oZD1Kbih0LmJhclNpemUsZSksZj1GZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSxkKSk6Zj1GZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSksZD1mLmhlaWdodCxwPWYuaGVpZ2h0KTooZj1udWxsLGQ9MCxwPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyk7dmFyIG0sZyx5O3Iuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZXx8dC5zaXplPT09ImRpc3BsYXkiPyhtPWUuZm9udE1ldHJpY3MoKS5udW0xLGQ+MD9nPTMqcDpnPTcqcCx5PWUuZm9udE1ldHJpY3MoKS5kZW5vbTEpOihkPjA/KG09ZS5mb250TWV0cmljcygpLm51bTIsZz1wKToobT1lLmZvbnRNZXRyaWNzKCkubnVtMyxnPTMqcCkseT1lLmZvbnRNZXRyaWNzKCkuZGVub20yKTt2YXIgdjtpZihmKXt2YXIgYj1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDttLXMuZGVwdGgtKGIrLjUqZCk8ZyYmKG0rPWctKG0tcy5kZXB0aC0oYisuNSpkKSkpLGItLjUqZC0oaC5oZWlnaHQteSk8ZyYmKHkrPWctKGItLjUqZC0oaC5oZWlnaHQteSkpKTt2YXIgdz0tKGItLjUqZCk7dj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aCxzaGlmdDp5fSx7dHlwZToiZWxlbSIsZWxlbTpmLHNoaWZ0Ond9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9ZWxzZXt2YXIgeD1tLXMuZGVwdGgtKGguaGVpZ2h0LXkpO3g8ZyYmKG0rPS41KihnLXgpLHkrPS41KihnLXgpKSx2PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpoLHNoaWZ0Onl9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9YT1lLmhhdmluZ1N0eWxlKHIpLHYuaGVpZ2h0Kj1hLnNpemVNdWx0aXBsaWVyL2Uuc2l6ZU11bHRpcGxpZXIsdi5kZXB0aCo9YS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyO3ZhciBfO3Iuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZT9fPWUuZm9udE1ldHJpY3MoKS5kZWxpbTE6ci5zaXplPT09cnIuU0NSSVBUU0NSSVBULnNpemU/Xz1lLmhhdmluZ1N0eWxlKHJyLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6Xz1lLmZvbnRNZXRyaWNzKCkuZGVsaW0yO3ZhciBULEU7cmV0dXJuIHQubGVmdERlbGltPT1udWxsP1Q9eXkoZSxbIm1vcGVuIl0pOlQ9ZHUuY3VzdG9tU2l6ZWREZWxpbSh0LmxlZnREZWxpbSxfLCEwLGUuaGF2aW5nU3R5bGUociksdC5tb2RlLFsibW9wZW4iXSksdC5jb250aW51ZWQ/RT1GZS5tYWtlU3BhbihbXSk6dC5yaWdodERlbGltPT1udWxsP0U9eXkoZSxbIm1jbG9zZSJdKTpFPWR1LmN1c3RvbVNpemVkRGVsaW0odC5yaWdodERlbGltLF8sITAsZS5oYXZpbmdTdHlsZShyKSx0Lm1vZGUsWyJtY2xvc2UiXSksRmUubWFrZVNwYW4oWyJtb3JkIl0uY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhlKSksW1QsRmUubWFrZVNwYW4oWyJtZnJhYyJdLFt2XSksRV0sZSl9LCJodG1sQnVpbGRlciQ0IiksWUM9bygodCxlKT0+e3ZhciByPW5ldyBhdC5NYXRoTm9kZSgibWZyYWMiLFt5bih0Lm51bWVyLGUpLHluKHQuZGVub20sZSldKTtpZighdC5oYXNCYXJMaW5lKXIuc2V0QXR0cmlidXRlKCJsaW5ldGhpY2tuZXNzIiwiMHB4Iik7ZWxzZSBpZih0LmJhclNpemUpe3ZhciBuPUpuKHQuYmFyU2l6ZSxlKTtyLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsZ3QobikpfXZhciBpPW0kKHQuc2l6ZSxlLnN0eWxlKTtpZihpLnNpemUhPT1lLnN0eWxlLnNpemUpe3I9bmV3IGF0Lk1hdGhOb2RlKCJtc3R5bGUiLFtyXSk7dmFyIGE9aS5zaXplPT09cnIuRElTUExBWS5zaXplPyJ0cnVlIjoiZmFsc2UiO3Iuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLGEpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjAiKX1pZih0LmxlZnREZWxpbSE9bnVsbHx8dC5yaWdodERlbGltIT1udWxsKXt2YXIgcz1bXTtpZih0LmxlZnREZWxpbSE9bnVsbCl7dmFyIGw9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW25ldyBhdC5UZXh0Tm9kZSh0LmxlZnREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO2wuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxzLnB1c2gobCl9aWYocy5wdXNoKHIpLHQucmlnaHREZWxpbSE9bnVsbCl7dmFyIHU9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW25ldyBhdC5UZXh0Tm9kZSh0LnJpZ2h0RGVsaW0ucmVwbGFjZSgiXFwiLCIiKSldKTt1LnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIikscy5wdXNoKHUpfXJldHVybiBQQyhzKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMyIpO1N0KHt0eXBlOiJnZW5mcmFjIixuYW1lczpbIlxcZGZyYWMiLCJcXGZyYWMiLCJcXHRmcmFjIiwiXFxkYmlub20iLCJcXGJpbm9tIiwiXFx0Ymlub20iLCJcXFxcYXRvcGZyYWMiLCJcXFxcYnJhY2VmcmFjIiwiXFxcXGJyYWNrZnJhYyJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXSxhPWVbMV0scyxsPW51bGwsdT1udWxsLGg9ImF1dG8iO3N3aXRjaChuKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOnM9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOnM9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpzPSExLGw9IigiLHU9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6cz0hMSxsPSJcXHsiLHU9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpzPSExLGw9IlsiLHU9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKG4pe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6aD0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpoPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiExLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOnMsbGVmdERlbGltOmwscmlnaHREZWxpbTp1LHNpemU6aCxiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOldDLG1hdGhtbEJ1aWxkZXI6WUN9KTtTdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdLGE9ZVsxXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiEwLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOiEwLGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJkaXNwbGF5IixiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpfSk7U3Qoe3R5cGU6ImluZml4IixuYW1lczpbIlxcb3ZlciIsIlxcY2hvb3NlIiwiXFxhdG9wIiwiXFxicmFjZSIsIlxcYnJhY2siXSxwcm9wczp7bnVtQXJnczowLGluZml4OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyLHRva2VuOm59PXQsaTtzd2l0Y2gocil7Y2FzZSJcXG92ZXIiOmk9IlxcZnJhYyI7YnJlYWs7Y2FzZSJcXGNob29zZSI6aT0iXFxiaW5vbSI7YnJlYWs7Y2FzZSJcXGF0b3AiOmk9IlxcXFxhdG9wZnJhYyI7YnJlYWs7Y2FzZSJcXGJyYWNlIjppPSJcXFxcYnJhY2VmcmFjIjticmVhaztjYXNlIlxcYnJhY2siOmk9IlxcXFxicmFja2ZyYWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kIil9cmV0dXJue3R5cGU6ImluZml4Iixtb2RlOmUubW9kZSxyZXBsYWNlV2l0aDppLHRva2VuOm59fX0pO3hHPVsiZGlzcGxheSIsInRleHQiLCJzY3JpcHQiLCJzY3JpcHRzY3JpcHQiXSxiRz1vKGZ1bmN0aW9uKGUpe3ZhciByPW51bGw7cmV0dXJuIGUubGVuZ3RoPjAmJihyPWUscj1yPT09Ii4iP251bGw6cikscn0sImRlbGltRnJvbVZhbHVlIik7U3Qoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49ZVs0XSxpPWVbNV0sYT1DNChlWzBdKSxzPWEudHlwZT09PSJhdG9tIiYmYS5mYW1pbHk9PT0ib3BlbiI/YkcoYS50ZXh0KTpudWxsLGw9QzQoZVsxXSksdT1sLnR5cGU9PT0iYXRvbSImJmwuZmFtaWx5PT09ImNsb3NlIj9iRyhsLnRleHQpOm51bGwsaD1ncihlWzJdLCJzaXplIiksZixkPW51bGw7aC5pc0JsYW5rP2Y9ITA6KGQ9aC52YWx1ZSxmPWQubnVtYmVyPjApO3ZhciBwPSJhdXRvIixtPWVbM107aWYobS50eXBlPT09Im9yZGdyb3VwIil7aWYobS5ib2R5Lmxlbmd0aD4wKXt2YXIgZz1ncihtLmJvZHlbMF0sInRleHRvcmQiKTtwPXhHW051bWJlcihnLnRleHQpXX19ZWxzZSBtPWdyKG0sInRleHRvcmQiKSxwPXhHW051bWJlcihtLnRleHQpXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsbnVtZXI6bixkZW5vbTppLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOmYsYmFyU2l6ZTpkLGxlZnREZWxpbTpzLHJpZ2h0RGVsaW06dSxzaXplOnB9fSxodG1sQnVpbGRlcjpXQyxtYXRobWxCdWlsZGVyOllDfSk7U3Qoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dDtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6ci5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOmdyKGVbMF0sInNpemUiKS52YWx1ZSx0b2tlbjppfX19KTtTdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF0sYT1vYmUoZ3IoZVsxXSwiaW5maXgiKS5zaXplKSxzPWVbMl0sbD1hLm51bWJlcj4wO3JldHVybnt0eXBlOiJnZW5mcmFjIixtb2RlOnIubW9kZSxudW1lcjppLGRlbm9tOnMsY29udGludWVkOiExLGhhc0JhckxpbmU6bCxiYXJTaXplOmEsbGVmdERlbGltOm51bGwscmlnaHREZWxpbTpudWxsLHNpemU6ImF1dG8ifX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpXQyxtYXRobWxCdWlsZGVyOllDfSk7ZyQ9bygodCxlKT0+e3ZhciByPWUuc3R5bGUsbixpO3QudHlwZT09PSJzdXBzdWIiPyhuPXQuc3VwP1ByKHQuc3VwLGUuaGF2aW5nU3R5bGUoci5zdXAoKSksZSk6UHIodC5zdWIsZS5oYXZpbmdTdHlsZShyLnN1YigpKSxlKSxpPWdyKHQuYmFzZSwiaG9yaXpCcmFjZSIpKTppPWdyKHQsImhvcml6QnJhY2UiKTt2YXIgYT1QcihpLmJhc2UsZS5oYXZpbmdCYXNlU3R5bGUocnIuRElTUExBWSkpLHM9bXUuc3ZnU3BhbihpLGUpLGw7aWYoaS5pc092ZXI/KGw9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06c31dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpOihsPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTphLmRlcHRoKy4xK3MuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpzfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06YX1dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpLG4pe3ZhciB1PUZlLm1ha2VTcGFuKFsibW9yZCIsaS5pc092ZXI/Im1vdmVyIjoibXVuZGVyIl0sW2xdLGUpO2kuaXNPdmVyP2w9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06bn1dfSxlKTpsPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp1LmRlcHRoKy4yK24uaGVpZ2h0K24uZGVwdGgsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOm59LHt0eXBlOiJrZXJuIixzaXplOi4yfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LGUpfXJldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLGkuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFtsXSxlKX0sImh0bWxCdWlsZGVyJDMiKSxMNGU9bygodCxlKT0+e3ZhciByPW11Lm1hdGhNTG5vZGUodC5sYWJlbCk7cmV0dXJuIG5ldyBhdC5NYXRoTm9kZSh0LmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFt5bih0LmJhc2UsZSkscl0pfSwibWF0aG1sQnVpbGRlciQyIik7U3Qoe3R5cGU6Imhvcml6QnJhY2UiLG5hbWVzOlsiXFxvdmVyYnJhY2UiLCJcXHVuZGVyYnJhY2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6Imhvcml6QnJhY2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4saXNPdmVyOi9eXFxvdmVyLy50ZXN0KG4pLGJhc2U6ZVswXX19LGh0bWxCdWlsZGVyOmckLG1hdGhtbEJ1aWxkZXI6TDRlfSk7U3Qoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVsxXSxpPWdyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gci5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaHJlZiIsdXJsOml9KT97dHlwZToiaHJlZiIsbW9kZTpyLm1vZGUsaHJlZjppLGJvZHk6Z2kobil9OnIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoIlxcaHJlZiIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1GaSh0LmJvZHksZSwhMSk7cmV0dXJuIEZlLm1ha2VBbmNob3IodC5ocmVmLFtdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPXZoKHQuYm9keSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIGtzfHwocj1uZXcga3MoIm1yb3ciLFtyXSkpLHIuc2V0QXR0cmlidXRlKCJocmVmIix0LmhyZWYpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToiaHJlZiIsbmFtZXM6WyJcXHVybCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ1cmwiXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1ncihlWzBdLCJ1cmwiKS51cmw7aWYoIXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOm59KSlyZXR1cm4gci5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksaS5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OnN9KX12YXIgbD17dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6aX07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6ci5tb2RlLGhyZWY6bixib2R5OmdpKGwpfX0sImhhbmRsZXIiKX0pO1N0KHt0eXBlOiJoYm94IixuYW1lczpbIlxcaGJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Imhib3giLG1vZGU6ci5tb2RlLGJvZHk6Z2koZVswXSl9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZpKHQuYm9keSxlLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIG5ldyBhdC5NYXRoTm9kZSgibXJvdyIsU3ModC5ib2R5LGUpKX19KTtTdCh7dHlwZToiaHRtbCIsbmFtZXM6WyJcXGh0bWxDbGFzcyIsIlxcaHRtbElkIiwiXFxodG1sU3R5bGUiLCJcXGh0bWxEYXRhIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInJhdyIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dCxhPWdyKGVbMF0sInJhdyIpLnN0cmluZyxzPWVbMV07ci5zZXR0aW5ncy5zdHJpY3QmJnIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJodG1sRXh0ZW5zaW9uIiwiSFRNTCBleHRlbnNpb24gaXMgZGlzYWJsZWQgb24gc3RyaWN0IG1vZGUiKTt2YXIgbCx1PXt9O3N3aXRjaChuKXtjYXNlIlxcaHRtbENsYXNzIjp1LmNsYXNzPWEsbD17Y29tbWFuZDoiXFxodG1sQ2xhc3MiLGNsYXNzOmF9O2JyZWFrO2Nhc2UiXFxodG1sSWQiOnUuaWQ9YSxsPXtjb21tYW5kOiJcXGh0bWxJZCIsaWQ6YX07YnJlYWs7Y2FzZSJcXGh0bWxTdHlsZSI6dS5zdHlsZT1hLGw9e2NvbW1hbmQ6IlxcaHRtbFN0eWxlIixzdHlsZTphfTticmVhaztjYXNlIlxcaHRtbERhdGEiOntmb3IodmFyIGg9YS5zcGxpdCgiLCIpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXS5zcGxpdCgiPSIpO2lmKGQubGVuZ3RoIT09Mil0aHJvdyBuZXcgbHQoIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXGh0bWxEYXRhIik7dVsiZGF0YS0iK2RbMF0udHJpbSgpXT1kWzFdLnRyaW0oKX1sPXtjb21tYW5kOiJcXGh0bWxEYXRhIixhdHRyaWJ1dGVzOnV9O2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kIil9cmV0dXJuIHIuc2V0dGluZ3MuaXNUcnVzdGVkKGwpP3t0eXBlOiJodG1sIixtb2RlOnIubW9kZSxhdHRyaWJ1dGVzOnUsYm9keTpnaShzKX06ci5mb3JtYXRVbnN1cHBvcnRlZENtZChuKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9RmkodC5ib2R5LGUsITEpLG49WyJlbmNsb3NpbmciXTt0LmF0dHJpYnV0ZXMuY2xhc3MmJm4ucHVzaCguLi50LmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9ccysvKSk7dmFyIGk9RmUubWFrZVNwYW4obixyLGUpO2Zvcih2YXIgYSBpbiB0LmF0dHJpYnV0ZXMpYSE9PSJjbGFzcyImJnQuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhKSYmaS5zZXRBdHRyaWJ1dGUoYSx0LmF0dHJpYnV0ZXNbYV0pO3JldHVybiBpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PnZoKHQuYm9keSxlKSwibWF0aG1sQnVpbGRlciIpfSk7U3Qoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJodG1sbWF0aG1sIixtb2RlOnIubW9kZSxodG1sOmdpKGVbMF0pLG1hdGhtbDpnaShlWzFdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZpKHQuaHRtbCxlLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PnZoKHQubWF0aG1sLGUpLCJtYXRobWxCdWlsZGVyIil9KTt5Qz1vKGZ1bmN0aW9uKGUpe2lmKC9eWy0rXT8gKihcZCsoXC5cZCopP3xcLlxkKykkLy50ZXN0KGUpKXJldHVybntudW1iZXI6K2UsdW5pdDoiYnAifTt2YXIgcj0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKGUpO2lmKCFyKXRocm93IG5ldyBsdCgiSW52YWxpZCBzaXplOiAnIitlKyInIGluIFxcaW5jbHVkZWdyYXBoaWNzIik7dmFyIG49e251bWJlcjorKHJbMV0rclsyXSksdW5pdDpyWzNdfTtpZighT0cobikpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIHVuaXQ6ICciK24udW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gbn0sInNpemVEYXRhIik7U3Qoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPXtudW1iZXI6MCx1bml0OiJlbSJ9LGE9e251bWJlcjouOSx1bml0OiJlbSJ9LHM9e251bWJlcjowLHVuaXQ6ImVtIn0sbD0iIjtpZihyWzBdKWZvcih2YXIgdT1ncihyWzBdLCJyYXciKS5zdHJpbmcsaD11LnNwbGl0KCIsIiksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdLnNwbGl0KCI9Iik7aWYoZC5sZW5ndGg9PT0yKXt2YXIgcD1kWzFdLnRyaW0oKTtzd2l0Y2goZFswXS50cmltKCkpe2Nhc2UiYWx0IjpsPXA7YnJlYWs7Y2FzZSJ3aWR0aCI6aT15QyhwKTticmVhaztjYXNlImhlaWdodCI6YT15QyhwKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpzPXlDKHApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGx0KCJJbnZhbGlkIGtleTogJyIrZFswXSsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKX19fXZhciBtPWdyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gbD09PSIiJiYobD1tLGw9bC5yZXBsYWNlKC9eLipbXFwvXS8sIiIpLGw9bC5zdWJzdHJpbmcoMCxsLmxhc3RJbmRleE9mKCIuIikpKSxuLnNldHRpbmdzLmlzVHJ1c3RlZCh7Y29tbWFuZDoiXFxpbmNsdWRlZ3JhcGhpY3MiLHVybDptfSk/e3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbW9kZTpuLm1vZGUsYWx0Omwsd2lkdGg6aSxoZWlnaHQ6YSx0b3RhbGhlaWdodDpzLHNyYzptfTpuLmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGluY2x1ZGVncmFwaGljcyIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1Kbih0LmhlaWdodCxlKSxuPTA7dC50b3RhbGhlaWdodC5udW1iZXI+MCYmKG49Sm4odC50b3RhbGhlaWdodCxlKS1yKTt2YXIgaT0wO3Qud2lkdGgubnVtYmVyPjAmJihpPUpuKHQud2lkdGgsZSkpO3ZhciBhPXtoZWlnaHQ6Z3QocituKX07aT4wJiYoYS53aWR0aD1ndChpKSksbj4wJiYoYS52ZXJ0aWNhbEFsaWduPWd0KC1uKSk7dmFyIHM9bmV3IGtDKHQuc3JjLHQuYWx0LGEpO3JldHVybiBzLmhlaWdodD1yLHMuZGVwdGg9bixzfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1nbHlwaCIsW10pO3Iuc2V0QXR0cmlidXRlKCJhbHQiLHQuYWx0KTt2YXIgbj1Kbih0LmhlaWdodCxlKSxpPTA7aWYodC50b3RhbGhlaWdodC5udW1iZXI+MCYmKGk9Sm4odC50b3RhbGhlaWdodCxlKS1uLHIuc2V0QXR0cmlidXRlKCJ2YWxpZ24iLGd0KC1pKSkpLHIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGd0KG4raSkpLHQud2lkdGgubnVtYmVyPjApe3ZhciBhPUpuKHQud2lkdGgsZSk7ci5zZXRBdHRyaWJ1dGUoIndpZHRoIixndChhKSl9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzcmMiLHQuc3JjKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7U3Qoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9Z3IoZVswXSwic2l6ZSIpO2lmKHIuc2V0dGluZ3Muc3RyaWN0KXt2YXIgYT1uWzFdPT09Im0iLHM9aS52YWx1ZS51bml0PT09Im11IjthPyhzfHxyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIraS52YWx1ZS51bml0KyIgdW5pdHMiKSksci5tb2RlIT09Im1hdGgiJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpzJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTpyLm1vZGUsZGltZW5zaW9uOmkudmFsdWV9fSxodG1sQnVpbGRlcih0LGUpe3JldHVybiBGZS5tYWtlR2x1ZSh0LmRpbWVuc2lvbixlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPUpuKHQuZGltZW5zaW9uLGUpO3JldHVybiBuZXcgYXQuU3BhY2VOb2RlKHIpfX0pO1N0KHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImxhcCIsbW9kZTpyLm1vZGUsYWxpZ25tZW50Om4uc2xpY2UoNSksYm9keTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI7dC5hbGlnbm1lbnQ9PT0iY2xhcCI/KHI9RmUubWFrZVNwYW4oW10sW1ByKHQuYm9keSxlKV0pLHI9RmUubWFrZVNwYW4oWyJpbm5lciJdLFtyXSxlKSk6cj1GZS5tYWtlU3BhbihbImlubmVyIl0sW1ByKHQuYm9keSxlKV0pO3ZhciBuPUZlLm1ha2VTcGFuKFsiZml4Il0sW10pLGk9RmUubWFrZVNwYW4oW3QuYWxpZ25tZW50XSxbcixuXSxlKSxhPUZlLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIGEuc3R5bGUuaGVpZ2h0PWd0KGkuaGVpZ2h0K2kuZGVwdGgpLGkuZGVwdGgmJihhLnN0eWxlLnZlcnRpY2FsQWxpZ249Z3QoLWkuZGVwdGgpKSxpLmNoaWxkcmVuLnVuc2hpZnQoYSksaT1GZS5tYWtlU3BhbihbInRoaW5ib3giXSxbaV0sZSksRmUubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtpXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSk7aWYodC5hbGlnbm1lbnQhPT0icmxhcCIpe3ZhciBuPXQuYWxpZ25tZW50PT09ImxsYXAiPyItMSI6Ii0wLjUiO3Iuc2V0QXR0cmlidXRlKCJsc3BhY2UiLG4rIndpZHRoIil9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToic3R5bGluZyIsbmFtZXM6WyJcXCgiLCIkIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt2YXJ7ZnVuY05hbWU6cixwYXJzZXI6bn09dCxpPW4ubW9kZTtuLnN3aXRjaE1vZGUoIm1hdGgiKTt2YXIgYT1yPT09IlxcKCI/IlxcKSI6IiQiLHM9bi5wYXJzZUV4cHJlc3Npb24oITEsYSk7cmV0dXJuIG4uZXhwZWN0KGEpLG4uc3dpdGNoTW9kZShpKSx7dHlwZToic3R5bGluZyIsbW9kZTpuLm1vZGUsc3R5bGU6InRleHQiLGJvZHk6c319fSk7U3Qoe3R5cGU6InRleHQiLG5hbWVzOlsiXFwpIiwiXFxdIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt0aHJvdyBuZXcgbHQoIk1pc21hdGNoZWQgIit0LmZ1bmNOYW1lKX19KTt3Rz1vKCh0LGUpPT57c3dpdGNoKGUuc3R5bGUuc2l6ZSl7Y2FzZSByci5ESVNQTEFZLnNpemU6cmV0dXJuIHQuZGlzcGxheTtjYXNlIHJyLlRFWFQuc2l6ZTpyZXR1cm4gdC50ZXh0O2Nhc2UgcnIuU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0O2Nhc2UgcnIuU0NSSVBUU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0c2NyaXB0O2RlZmF1bHQ6cmV0dXJuIHQudGV4dH19LCJjaG9vc2VNYXRoU3R5bGUiKTtTdCh7dHlwZToibWF0aGNob2ljZSIsbmFtZXM6WyJcXG1hdGhjaG9pY2UiXSxwcm9wczp7bnVtQXJnczo0LHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJtYXRoY2hvaWNlIixtb2RlOnIubW9kZSxkaXNwbGF5OmdpKGVbMF0pLHRleHQ6Z2koZVsxXSksc2NyaXB0OmdpKGVbMl0pLHNjcmlwdHNjcmlwdDpnaShlWzNdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPXdHKHQsZSksbj1GaShyLGUsITEpO3JldHVybiBGZS5tYWtlRnJhZ21lbnQobil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPXdHKHQsZSk7cmV0dXJuIHZoKHIsZSl9LCJtYXRobWxCdWlsZGVyIil9KTt5JD1vKCh0LGUscixuLGksYSxzKT0+e3Q9RmUubWFrZVNwYW4oW10sW3RdKTt2YXIgbD1yJiZKdC5pc0NoYXJhY3RlckJveChyKSx1LGg7aWYoZSl7dmFyIGY9UHIoZSxuLmhhdmluZ1N0eWxlKGkuc3VwKCkpLG4pO2g9e2VsZW06ZixrZXJuOk1hdGgubWF4KG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczLWYuZGVwdGgpfX1pZihyKXt2YXIgZD1QcihyLG4uaGF2aW5nU3R5bGUoaS5zdWIoKSksbik7dT17ZWxlbTpkLGtlcm46TWF0aC5tYXgobi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzIsbi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzQtZC5oZWlnaHQpfX12YXIgcDtpZihoJiZ1KXt2YXIgbT1uLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNSt1LmVsZW0uaGVpZ2h0K3UuZWxlbS5kZXB0aCt1Lmtlcm4rdC5kZXB0aCtzO3A9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOm0sY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDpndCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH0se3R5cGU6Imtlcm4iLHNpemU6aC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTpoLmVsZW0sbWFyZ2luTGVmdDpndChhKX0se3R5cGU6Imtlcm4iLHNpemU6bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9XX0sbil9ZWxzZSBpZih1KXt2YXIgZz10LmhlaWdodC1zO3A9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOmcsY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDpndCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH1dfSxuKX1lbHNlIGlmKGgpe3ZhciB5PXQuZGVwdGgrcztwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp5LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp0fSx7dHlwZToia2VybiIsc2l6ZTpoLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOmguZWxlbSxtYXJnaW5MZWZ0Omd0KGEpfSx7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxuKX1lbHNlIHJldHVybiB0O3ZhciB2PVtwXTtpZih1JiZhIT09MCYmIWwpe3ZhciB4PUZlLm1ha2VTcGFuKFsibXNwYWNlIl0sW10sbik7eC5zdHlsZS5tYXJnaW5SaWdodD1ndChhKSx2LnVuc2hpZnQoeCl9cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9wIiwib3AtbGltaXRzIl0sdixuKX0sImFzc2VtYmxlU3VwU3ViIiksdiQ9WyJcXHNtYWxsaW50Il0sQ3A9bygodCxlKT0+e3ZhciByLG4saT0hMSxhO3QudHlwZT09PSJzdXBzdWIiPyhyPXQuc3VwLG49dC5zdWIsYT1ncih0LmJhc2UsIm9wIiksaT0hMCk6YT1ncih0LCJvcCIpO3ZhciBzPWUuc3R5bGUsbD0hMTtzLnNpemU9PT1yci5ESVNQTEFZLnNpemUmJmEuc3ltYm9sJiYhSnQuY29udGFpbnModiQsYS5uYW1lKSYmKGw9ITApO3ZhciB1O2lmKGEuc3ltYm9sKXt2YXIgaD1sPyJTaXplMi1SZWd1bGFyIjoiU2l6ZTEtUmVndWxhciIsZj0iIjtpZigoYS5uYW1lPT09Ilxcb2lpbnQifHxhLm5hbWU9PT0iXFxvaWlpbnQiKSYmKGY9YS5uYW1lLnNsaWNlKDEpLGEubmFtZT1mPT09Im9paW50Ij8iXFxpaW50IjoiXFxpaWludCIpLHU9RmUubWFrZVN5bWJvbChhLm5hbWUsaCwibWF0aCIsZSxbIm1vcCIsIm9wLXN5bWJvbCIsbD8ibGFyZ2Utb3AiOiJzbWFsbC1vcCJdKSxmLmxlbmd0aD4wKXt2YXIgZD11Lml0YWxpYyxwPUZlLnN0YXRpY1N2ZyhmKyJTaXplIisobD8iMiI6IjEiKSxlKTt1PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6bD8uMDg6MH1dfSxlKSxhLm5hbWU9IlxcIitmLHUuY2xhc3Nlcy51bnNoaWZ0KCJtb3AiKSx1Lml0YWxpYz1kfX1lbHNlIGlmKGEuYm9keSl7dmFyIG09RmkoYS5ib2R5LGUsITApO20ubGVuZ3RoPT09MSYmbVswXWluc3RhbmNlb2YgRXM/KHU9bVswXSx1LmNsYXNzZXNbMF09Im1vcCIpOnU9RmUubWFrZVNwYW4oWyJtb3AiXSxtLGUpfWVsc2V7Zm9yKHZhciBnPVtdLHk9MTt5PGEubmFtZS5sZW5ndGg7eSsrKWcucHVzaChGZS5tYXRoc3ltKGEubmFtZVt5XSxhLm1vZGUsZSkpO3U9RmUubWFrZVNwYW4oWyJtb3AiXSxnLGUpfXZhciB2PTAseD0wO3JldHVybih1IGluc3RhbmNlb2YgRXN8fGEubmFtZT09PSJcXG9paW50Inx8YS5uYW1lPT09Ilxcb2lpaW50IikmJiFhLnN1cHByZXNzQmFzZVNoaWZ0JiYodj0odS5oZWlnaHQtdS5kZXB0aCkvMi1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCx4PXUuaXRhbGljKSxpP3kkKHUscixuLGUscyx4LHYpOih2JiYodS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHUuc3R5bGUudG9wPWd0KHYpKSx1KX0sImh0bWxCdWlsZGVyJDIiKSx2eT1vKCh0LGUpPT57dmFyIHI7aWYodC5zeW1ib2wpcj1uZXcga3MoIm1vIixbTW8odC5uYW1lLHQubW9kZSldKSxKdC5jb250YWlucyh2JCx0Lm5hbWUpJiZyLnNldEF0dHJpYnV0ZSgibGFyZ2VvcCIsImZhbHNlIik7ZWxzZSBpZih0LmJvZHkpcj1uZXcga3MoIm1vIixTcyh0LmJvZHksZSkpO2Vsc2V7cj1uZXcga3MoIm1pIixbbmV3IHRkKHQubmFtZS5zbGljZSgxKSldKTt2YXIgbj1uZXcga3MoIm1vIixbTW8oIlx1MjA2MSIsInRleHQiKV0pO3QucGFyZW50SXNTdXBTdWI/cj1uZXcga3MoIm1yb3ciLFtyLG5dKTpyPVlHKFtyLG5dKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMSIpLEQ0ZT17Ilx1MjIwRiI6IlxccHJvZCIsIlx1MjIxMCI6IlxcY29wcm9kIiwiXHUyMjExIjoiXFxzdW0iLCJcdTIyQzAiOiJcXGJpZ3dlZGdlIiwiXHUyMkMxIjoiXFxiaWd2ZWUiLCJcdTIyQzIiOiJcXGJpZ2NhcCIsIlx1MjJDMyI6IlxcYmlnY3VwIiwiXHUyQTAwIjoiXFxiaWdvZG90IiwiXHUyQTAxIjoiXFxiaWdvcGx1cyIsIlx1MkEwMiI6IlxcYmlnb3RpbWVzIiwiXHUyQTA0IjoiXFxiaWd1cGx1cyIsIlx1MkEwNiI6IlxcYmlnc3FjdXAifTtTdCh7dHlwZToib3AiLG5hbWVzOlsiXFxjb3Byb2QiLCJcXGJpZ3ZlZSIsIlxcYmlnd2VkZ2UiLCJcXGJpZ3VwbHVzIiwiXFxiaWdjYXAiLCJcXGJpZ2N1cCIsIlxcaW50b3AiLCJcXHByb2QiLCJcXHN1bSIsIlxcYmlnb3RpbWVzIiwiXFxiaWdvcGx1cyIsIlxcYmlnb2RvdCIsIlxcYmlnc3FjdXAiLCJcXHNtYWxsaW50IiwiXHUyMjBGIiwiXHUyMjEwIiwiXHUyMjExIiwiXHUyMkMwIiwiXHUyMkMxIiwiXHUyMkMyIiwiXHUyMkMzIiwiXHUyQTAwIiwiXHUyQTAxIiwiXHUyQTAyIiwiXHUyQTA0IiwiXHUyQTA2Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1uO3JldHVybiBpLmxlbmd0aD09PTEmJihpPUQ0ZVtpXSkse3R5cGU6Im9wIixtb2RlOnIubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6Q3AsbWF0aG1sQnVpbGRlcjp2eX0pO1N0KHt0eXBlOiJvcCIsbmFtZXM6WyJcXG1hdGhvcCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJvcCIsbW9kZTpyLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxib2R5OmdpKG4pfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpDcCxtYXRobWxCdWlsZGVyOnZ5fSk7TjRlPXsiXHUyMjJCIjoiXFxpbnQiLCJcdTIyMkMiOiJcXGlpbnQiLCJcdTIyMkQiOiJcXGlpaW50IiwiXHUyMjJFIjoiXFxvaW50IiwiXHUyMjJGIjoiXFxvaWludCIsIlx1MjIzMCI6Ilxcb2lpaW50In07U3Qoe3R5cGU6Im9wIixuYW1lczpbIlxcYXJjc2luIiwiXFxhcmNjb3MiLCJcXGFyY3RhbiIsIlxcYXJjdGciLCJcXGFyY2N0ZyIsIlxcYXJnIiwiXFxjaCIsIlxcY29zIiwiXFxjb3NlYyIsIlxcY29zaCIsIlxcY290IiwiXFxjb3RnIiwiXFxjb3RoIiwiXFxjc2MiLCJcXGN0ZyIsIlxcY3RoIiwiXFxkZWciLCJcXGRpbSIsIlxcZXhwIiwiXFxob20iLCJcXGtlciIsIlxcbGciLCJcXGxuIiwiXFxsb2ciLCJcXHNlYyIsIlxcc2luIiwiXFxzaW5oIiwiXFxzaCIsIlxcdGFuIiwiXFx0YW5oIiwiXFx0ZyIsIlxcdGgiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O3JldHVybnt0eXBlOiJvcCIsbW9kZTplLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnJ9fSxodG1sQnVpbGRlcjpDcCxtYXRobWxCdWlsZGVyOnZ5fSk7U3Qoe3R5cGU6Im9wIixuYW1lczpbIlxcZGV0IiwiXFxnY2QiLCJcXGluZiIsIlxcbGltIiwiXFxtYXgiLCJcXG1pbiIsIlxcUHIiLCJcXHN1cCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQ7cmV0dXJue3R5cGU6Im9wIixtb2RlOmUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLG5hbWU6cn19LGh0bWxCdWlsZGVyOkNwLG1hdGhtbEJ1aWxkZXI6dnl9KTtTdCh7dHlwZToib3AiLG5hbWVzOlsiXFxpbnQiLCJcXGlpbnQiLCJcXGlpaW50IiwiXFxvaW50IiwiXFxvaWludCIsIlxcb2lpaW50IiwiXHUyMjJCIiwiXHUyMjJDIiwiXHUyMjJEIiwiXHUyMjJFIiwiXHUyMjJGIiwiXHUyMjMwIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPXI7cmV0dXJuIG4ubGVuZ3RoPT09MSYmKG49TjRlW25dKSx7dHlwZToib3AiLG1vZGU6ZS5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITAsbmFtZTpufX0saHRtbEJ1aWxkZXI6Q3AsbWF0aG1sQnVpbGRlcjp2eX0pO3gkPW8oKHQsZSk9Pnt2YXIgcixuLGk9ITEsYTt0LnR5cGU9PT0ic3Vwc3ViIj8ocj10LnN1cCxuPXQuc3ViLGE9Z3IodC5iYXNlLCJvcGVyYXRvcm5hbWUiKSxpPSEwKTphPWdyKHQsIm9wZXJhdG9ybmFtZSIpO3ZhciBzO2lmKGEuYm9keS5sZW5ndGg+MCl7Zm9yKHZhciBsPWEuYm9keS5tYXAoZD0+e3ZhciBwPWQudGV4dDtyZXR1cm4gdHlwZW9mIHA9PSJzdHJpbmciP3t0eXBlOiJ0ZXh0b3JkIixtb2RlOmQubW9kZSx0ZXh0OnB9OmR9KSx1PUZpKGwsZS53aXRoRm9udCgibWF0aHJtIiksITApLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtmIGluc3RhbmNlb2YgRXMmJihmLnRleHQ9Zi50ZXh0LnJlcGxhY2UoL1x1MjIxMi8sIi0iKS5yZXBsYWNlKC9cdTIyMTcvLCIqIikpfXM9RmUubWFrZVNwYW4oWyJtb3AiXSx1LGUpfWVsc2Ugcz1GZS5tYWtlU3BhbihbIm1vcCJdLFtdLGUpO3JldHVybiBpP3kkKHMscixuLGUsZS5zdHlsZSwwLDApOnN9LCJodG1sQnVpbGRlciQxIiksUjRlPW8oKHQsZSk9Pntmb3IodmFyIHI9U3ModC5ib2R5LGUud2l0aEZvbnQoIm1hdGhybSIpKSxuPSEwLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtpZighKGEgaW5zdGFuY2VvZiBhdC5TcGFjZU5vZGUpKWlmKGEgaW5zdGFuY2VvZiBhdC5NYXRoTm9kZSlzd2l0Y2goYS50eXBlKXtjYXNlIm1pIjpjYXNlIm1uIjpjYXNlIm1zIjpjYXNlIm1zcGFjZSI6Y2FzZSJtdGV4dCI6YnJlYWs7Y2FzZSJtbyI6e3ZhciBzPWEuY2hpbGRyZW5bMF07YS5jaGlsZHJlbi5sZW5ndGg9PT0xJiZzIGluc3RhbmNlb2YgYXQuVGV4dE5vZGU/cy50ZXh0PXMudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpOm49ITE7YnJlYWt9ZGVmYXVsdDpuPSExfWVsc2Ugbj0hMX1pZihuKXt2YXIgbD1yLm1hcChmPT5mLnRvVGV4dCgpKS5qb2luKCIiKTtyPVtuZXcgYXQuVGV4dE5vZGUobCldfXZhciB1PW5ldyBhdC5NYXRoTm9kZSgibWkiLHIpO3Uuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm5vcm1hbCIpO3ZhciBoPW5ldyBhdC5NYXRoTm9kZSgibW8iLFtNbygiXHUyMDYxIiwidGV4dCIpXSk7cmV0dXJuIHQucGFyZW50SXNTdXBTdWI/bmV3IGF0Lk1hdGhOb2RlKCJtcm93IixbdSxoXSk6YXQubmV3RG9jdW1lbnRGcmFnbWVudChbdSxoXSl9LCJtYXRobWxCdWlsZGVyIik7U3Qoe3R5cGU6Im9wZXJhdG9ybmFtZSIsbmFtZXM6WyJcXG9wZXJhdG9ybmFtZUAiLCJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTpyLm1vZGUsYm9keTpnaShpKSxhbHdheXNIYW5kbGVTdXBTdWI6bj09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6eCQsbWF0aG1sQnVpbGRlcjpSNGV9KTtsZSgiXFxvcGVyYXRvcm5hbWUiLCJcXEBpZnN0YXJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcXG9wZXJhdG9ybmFtZUAiKTtpZCh7dHlwZToib3JkZ3JvdXAiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIHQuc2VtaXNpbXBsZT9GZS5tYWtlRnJhZ21lbnQoRmkodC5ib2R5LGUsITEpKTpGZS5tYWtlU3BhbihbIm1vcmQiXSxGaSh0LmJvZHksZSwhMCksZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gdmgodC5ib2R5LGUsITApfX0pO1N0KHt0eXBlOiJvdmVybGluZSIsbmFtZXM6WyJcXG92ZXJsaW5lIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6Im92ZXJsaW5lIixtb2RlOnIubW9kZSxib2R5Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPVByKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxuPUZlLm1ha2VMaW5lU3Bhbigib3ZlcmxpbmUtbGluZSIsZSksaT1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsYT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9LHt0eXBlOiJrZXJuIixzaXplOjMqaX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6aX1dfSxlKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwib3ZlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixbbmV3IGF0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgYXQuTWF0aE5vZGUoIm1vdmVyIixbeW4odC5ib2R5LGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxufX0pO1N0KHt0eXBlOiJwaGFudG9tIixuYW1lczpbIlxccGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpnaShuKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZpKHQuYm9keSxlLndpdGhQaGFudG9tKCksITEpO3JldHVybiBGZS5tYWtlRnJhZ21lbnQocil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPVNzKHQuYm9keSxlKTtyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtcGhhbnRvbSIscil9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToiaHBoYW50b20iLG5hbWVzOlsiXFxocGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToiaHBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6bn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZlLm1ha2VTcGFuKFtdLFtQcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pO2lmKHIuaGVpZ2h0PTAsci5kZXB0aD0wLHIuY2hpbGRyZW4pZm9yKHZhciBuPTA7bjxyLmNoaWxkcmVuLmxlbmd0aDtuKyspci5jaGlsZHJlbltuXS5oZWlnaHQ9MCxyLmNoaWxkcmVuW25dLmRlcHRoPTA7cmV0dXJuIHI9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpLEZlLm1ha2VTcGFuKFsibW9yZCJdLFtyXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9U3MoZ2kodC5ib2R5KSxlKSxuPW5ldyBhdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMHB4IiksaS5zZXRBdHRyaWJ1dGUoImRlcHRoIiwiMHB4IiksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO1N0KHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJ2cGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpufX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9RmUubWFrZVNwYW4oWyJpbm5lciJdLFtQcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pLG49RmUubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbcixuXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9U3MoZ2kodC5ib2R5KSxlKSxuPW5ldyBhdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSxpfSwibWF0aG1sQnVpbGRlciIpfSk7U3Qoe3R5cGU6InJhaXNlYm94IixuYW1lczpbIlxccmFpc2Vib3giXSxwcm9wczp7bnVtQXJnczoyLGFyZ1R5cGVzOlsic2l6ZSIsImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49Z3IoZVswXSwic2l6ZSIpLnZhbHVlLGk9ZVsxXTtyZXR1cm57dHlwZToicmFpc2Vib3giLG1vZGU6ci5tb2RlLGR5Om4sYm9keTppfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Qcih0LmJvZHksZSksbj1Kbih0LmR5LGUpO3JldHVybiBGZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotbixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBhdC5NYXRoTm9kZSgibXBhZGRlZCIsW3luKHQuYm9keSxlKV0pLG49dC5keS5udW1iZXIrdC5keS51bml0O3JldHVybiByLnNldEF0dHJpYnV0ZSgidm9mZnNldCIsbikscn19KTtTdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxyZWxheCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmV9PXQ7cmV0dXJue3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7U3Qoe3R5cGU6InJ1bGUiLG5hbWVzOlsiXFxydWxlIl0scHJvcHM6e251bUFyZ3M6MixudW1PcHRpb25hbEFyZ3M6MSxhcmdUeXBlczpbInNpemUiLCJzaXplIiwic2l6ZSJdfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9Z3IoZVswXSwic2l6ZSIpLHM9Z3IoZVsxXSwic2l6ZSIpO3JldHVybnt0eXBlOiJydWxlIixtb2RlOm4ubW9kZSxzaGlmdDppJiZncihpLCJzaXplIikudmFsdWUsd2lkdGg6YS52YWx1ZSxoZWlnaHQ6cy52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RmUubWFrZVNwYW4oWyJtb3JkIiwicnVsZSJdLFtdLGUpLG49Sm4odC53aWR0aCxlKSxpPUpuKHQuaGVpZ2h0LGUpLGE9dC5zaGlmdD9Kbih0LnNoaWZ0LGUpOjA7cmV0dXJuIHIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1ndChuKSxyLnN0eWxlLmJvcmRlclRvcFdpZHRoPWd0KGkpLHIuc3R5bGUuYm90dG9tPWd0KGEpLHIud2lkdGg9bixyLmhlaWdodD1pK2Esci5kZXB0aD0tYSxyLm1heEZvbnRTaXplPWkqMS4xMjUqZS5zaXplTXVsdGlwbGllcixyfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9Sm4odC53aWR0aCxlKSxuPUpuKHQuaGVpZ2h0LGUpLGk9dC5zaGlmdD9Kbih0LnNoaWZ0LGUpOjAsYT1lLmNvbG9yJiZlLmdldENvbG9yKCl8fCJibGFjayIscz1uZXcgYXQuTWF0aE5vZGUoIm1zcGFjZSIpO3Muc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsYSkscy5zZXRBdHRyaWJ1dGUoIndpZHRoIixndChyKSkscy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsZ3QobikpO3ZhciBsPW5ldyBhdC5NYXRoTm9kZSgibXBhZGRlZCIsW3NdKTtyZXR1cm4gaT49MD9sLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixndChpKSk6KGwuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGd0KGkpKSxsLnNldEF0dHJpYnV0ZSgiZGVwdGgiLGd0KC1pKSkpLGwuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixndChpKSksbH19KTtvKGIkLCJzaXppbmdHcm91cCIpO1RHPVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxNNGU9bygodCxlKT0+e3ZhciByPWUuaGF2aW5nU2l6ZSh0LnNpemUpO3JldHVybiBiJCh0LmJvZHkscixlKX0sImh0bWxCdWlsZGVyIik7U3Qoe3R5cGU6InNpemluZyIsbmFtZXM6VEcscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7YnJlYWtPblRva2VuVGV4dDpyLGZ1bmNOYW1lOm4scGFyc2VyOml9PXQsYT1pLnBhcnNlRXhwcmVzc2lvbighMSxyKTtyZXR1cm57dHlwZToic2l6aW5nIixtb2RlOmkubW9kZSxzaXplOlRHLmluZGV4T2YobikrMSxib2R5OmF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOk00ZSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1lLmhhdmluZ1NpemUodC5zaXplKSxuPVNzKHQuYm9keSxyKSxpPW5ldyBhdC5NYXRoTm9kZSgibXN0eWxlIixuKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoIm1hdGhzaXplIixndChyLnNpemVNdWx0aXBsaWVyKSksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO1N0KHt0eXBlOiJzbWFzaCIsbmFtZXM6WyJcXHNtYXNoIl0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPSExLGE9ITEscz1yWzBdJiZncihyWzBdLCJvcmRncm91cCIpO2lmKHMpZm9yKHZhciBsPSIiLHU9MDt1PHMuYm9keS5sZW5ndGg7Kyt1KXt2YXIgaD1zLmJvZHlbdV07aWYobD1oLnRleHQsbD09PSJ0IilpPSEwO2Vsc2UgaWYobD09PSJiIilhPSEwO2Vsc2V7aT0hMSxhPSExO2JyZWFrfX1lbHNlIGk9ITAsYT0hMDt2YXIgZj1lWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpuLm1vZGUsYm9keTpmLHNtYXNoSGVpZ2h0Omksc21hc2hEZXB0aDphfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9RmUubWFrZVNwYW4oW10sW1ByKHQuYm9keSxlKV0pO2lmKCF0LnNtYXNoSGVpZ2h0JiYhdC5zbWFzaERlcHRoKXJldHVybiByO2lmKHQuc21hc2hIZWlnaHQmJihyLmhlaWdodD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgbj0wO248ci5jaGlsZHJlbi5sZW5ndGg7bisrKXIuY2hpbGRyZW5bbl0uaGVpZ2h0PTA7aWYodC5zbWFzaERlcHRoJiYoci5kZXB0aD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgaT0wO2k8ci5jaGlsZHJlbi5sZW5ndGg7aSsrKXIuY2hpbGRyZW5baV0uZGVwdGg9MDt2YXIgYT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSk7cmV0dXJuIHQuc21hc2hIZWlnaHQmJnIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSx0LnNtYXNoRGVwdGgmJnIuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToic3FydCIsbmFtZXM6WyJcXHNxcnQiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9ZVswXTtyZXR1cm57dHlwZToic3FydCIsbW9kZTpuLm1vZGUsYm9keTphLGluZGV4Oml9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPVByKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTtyLmhlaWdodD09PTAmJihyLmhlaWdodD1lLmZvbnRNZXRyaWNzKCkueEhlaWdodCkscj1GZS53cmFwRnJhZ21lbnQocixlKTt2YXIgbj1lLmZvbnRNZXRyaWNzKCksaT1uLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9aTtlLnN0eWxlLmlkPHJyLlRFWFQuaWQmJihhPWUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTt2YXIgcz1pK2EvNCxsPXIuaGVpZ2h0K3IuZGVwdGgrcytpLHtzcGFuOnUscnVsZVdpZHRoOmgsYWR2YW5jZVdpZHRoOmZ9PWR1LnNxcnRJbWFnZShsLGUpLGQ9dS5oZWlnaHQtaDtkPnIuaGVpZ2h0K3IuZGVwdGgrcyYmKHM9KHMrZC1yLmhlaWdodC1yLmRlcHRoKS8yKTt2YXIgcD11LmhlaWdodC1yLmhlaWdodC1zLWg7ci5zdHlsZS5wYWRkaW5nTGVmdD1ndChmKTt2YXIgbT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnIsd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXX0se3R5cGU6Imtlcm4iLHNpemU6LShyLmhlaWdodCtwKX0se3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6aH1dfSxlKTtpZih0LmluZGV4KXt2YXIgZz1lLmhhdmluZ1N0eWxlKHJyLlNDUklQVFNDUklQVCkseT1Qcih0LmluZGV4LGcsZSksdj0uNioobS5oZWlnaHQtbS5kZXB0aCkseD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotdixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06eX1dfSxlKSxiPUZlLm1ha2VTcGFuKFsicm9vdCJdLFt4XSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbYixtXSxlKX1lbHNlIHJldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJzcXJ0Il0sW21dLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFye2JvZHk6cixpbmRleDpufT10O3JldHVybiBuP25ldyBhdC5NYXRoTm9kZSgibXJvb3QiLFt5bihyLGUpLHluKG4sZSldKTpuZXcgYXQuTWF0aE5vZGUoIm1zcXJ0IixbeW4ocixlKV0pfX0pO2tHPXtkaXNwbGF5OnJyLkRJU1BMQVksdGV4dDpyci5URVhULHNjcmlwdDpyci5TQ1JJUFQsc2NyaXB0c2NyaXB0OnJyLlNDUklQVFNDUklQVH07U3Qoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcnticmVha09uVG9rZW5UZXh0OnIsZnVuY05hbWU6bixwYXJzZXI6aX09dCxhPWkucGFyc2VFeHByZXNzaW9uKCEwLHIpLHM9bi5zbGljZSgxLG4ubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOmkubW9kZSxzdHlsZTpzLGJvZHk6YX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9a0dbdC5zdHlsZV0sbj1lLmhhdmluZ1N0eWxlKHIpLndpdGhGb250KCIiKTtyZXR1cm4gYiQodC5ib2R5LG4sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1rR1t0LnN0eWxlXSxuPWUuaGF2aW5nU3R5bGUociksaT1Tcyh0LmJvZHksbiksYT1uZXcgYXQuTWF0aE5vZGUoIm1zdHlsZSIsaSkscz17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSxsPXNbdC5zdHlsZV07cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsbFswXSksYS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsbFsxXSksYX19KTtJNGU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuYmFzZTtpZihuKWlmKG4udHlwZT09PSJvcCIpe3ZhciBpPW4ubGltaXRzJiYoci5zdHlsZS5zaXplPT09cnIuRElTUExBWS5zaXplfHxuLmFsd2F5c0hhbmRsZVN1cFN1Yik7cmV0dXJuIGk/Q3A6bnVsbH1lbHNlIGlmKG4udHlwZT09PSJvcGVyYXRvcm5hbWUiKXt2YXIgYT1uLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHIuc3R5bGUuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZXx8bi5saW1pdHMpO3JldHVybiBhP3gkOm51bGx9ZWxzZXtpZihuLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gSnQuaXNDaGFyYWN0ZXJCb3gobi5iYXNlKT96QzpudWxsO2lmKG4udHlwZT09PSJob3JpekJyYWNlIil7dmFyIHM9IWUuc3ViO3JldHVybiBzPT09bi5pc092ZXI/ZyQ6bnVsbH1lbHNlIHJldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LCJodG1sQnVpbGRlckRlbGVnYXRlIik7aWQoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1JNGUodCxlKTtpZihyKXJldHVybiByKHQsZSk7dmFye2Jhc2U6bixzdXA6aSxzdWI6YX09dCxzPVByKG4sZSksbCx1LGg9ZS5mb250TWV0cmljcygpLGY9MCxkPTAscD1uJiZKdC5pc0NoYXJhY3RlckJveChuKTtpZihpKXt2YXIgbT1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpO2w9UHIoaSxtLGUpLHB8fChmPXMuaGVpZ2h0LW0uZm9udE1ldHJpY3MoKS5zdXBEcm9wKm0uc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9aWYoYSl7dmFyIGc9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnN1YigpKTt1PVByKGEsZyxlKSxwfHwoZD1zLmRlcHRoK2cuZm9udE1ldHJpY3MoKS5zdWJEcm9wKmcuc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9dmFyIHk7ZS5zdHlsZT09PXJyLkRJU1BMQVk/eT1oLnN1cDE6ZS5zdHlsZS5jcmFtcGVkP3k9aC5zdXAzOnk9aC5zdXAyO3ZhciB2PWUuc2l6ZU11bHRpcGxpZXIseD1ndCguNS9oLnB0UGVyRW0vdiksYj1udWxsO2lmKHUpe3ZhciB3PXQuYmFzZSYmdC5iYXNlLnR5cGU9PT0ib3AiJiZ0LmJhc2UubmFtZSYmKHQuYmFzZS5uYW1lPT09Ilxcb2lpbnQifHx0LmJhc2UubmFtZT09PSJcXG9paWludCIpOyhzIGluc3RhbmNlb2YgRXN8fHcpJiYoYj1ndCgtcy5pdGFsaWMpKX12YXIgXztpZihsJiZ1KXtmPU1hdGgubWF4KGYseSxsLmRlcHRoKy4yNSpoLnhIZWlnaHQpLGQ9TWF0aC5tYXgoZCxoLnN1YjIpO3ZhciBUPWguZGVmYXVsdFJ1bGVUaGlja25lc3MsRT00KlQ7aWYoZi1sLmRlcHRoLSh1LmhlaWdodC1kKTxFKXtkPUUtKGYtbC5kZXB0aCkrdS5oZWlnaHQ7dmFyIEw9LjgqaC54SGVpZ2h0LShmLWwuZGVwdGgpO0w+MCYmKGYrPUwsZC09TCl9dmFyIFM9W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6ZCxtYXJnaW5SaWdodDp4LG1hcmdpbkxlZnQ6Yn0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDotZixtYXJnaW5SaWdodDp4fV07Xz1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpTfSxlKX1lbHNlIGlmKHUpe2Q9TWF0aC5tYXgoZCxoLnN1YjEsdS5oZWlnaHQtLjgqaC54SGVpZ2h0KTt2YXIgQT1be3R5cGU6ImVsZW0iLGVsZW06dSxtYXJnaW5MZWZ0OmIsbWFyZ2luUmlnaHQ6eH1dO189RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6ZCxjaGlsZHJlbjpBfSxlKX1lbHNlIGlmKGwpZj1NYXRoLm1heChmLHksbC5kZXB0aCsuMjUqaC54SGVpZ2h0KSxfPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1mLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpsLG1hcmdpblJpZ2h0Onh9XX0sZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInN1cHN1YiBtdXN0IGhhdmUgZWl0aGVyIHN1cCBvciBzdWIuIik7dmFyIEk9U0MocywicmlnaHQiKXx8Im1vcmQiO3JldHVybiBGZS5tYWtlU3BhbihbSV0sW3MsRmUubWFrZVNwYW4oWyJtc3Vwc3ViIl0sW19dKV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj0hMSxuLGk7dC5iYXNlJiZ0LmJhc2UudHlwZT09PSJob3JpekJyYWNlIiYmKGk9ISF0LnN1cCxpPT09dC5iYXNlLmlzT3ZlciYmKHI9ITAsbj10LmJhc2UuaXNPdmVyKSksdC5iYXNlJiYodC5iYXNlLnR5cGU9PT0ib3AifHx0LmJhc2UudHlwZT09PSJvcGVyYXRvcm5hbWUiKSYmKHQuYmFzZS5wYXJlbnRJc1N1cFN1Yj0hMCk7dmFyIGE9W3luKHQuYmFzZSxlKV07dC5zdWImJmEucHVzaCh5bih0LnN1YixlKSksdC5zdXAmJmEucHVzaCh5bih0LnN1cCxlKSk7dmFyIHM7aWYocilzPW4/Im1vdmVyIjoibXVuZGVyIjtlbHNlIGlmKHQuc3ViKWlmKHQuc3VwKXt2YXIgaD10LmJhc2U7aCYmaC50eXBlPT09Im9wIiYmaC5saW1pdHMmJmUuc3R5bGU9PT1yci5ESVNQTEFZfHxoJiZoLnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmaC5hbHdheXNIYW5kbGVTdXBTdWImJihlLnN0eWxlPT09cnIuRElTUExBWXx8aC5saW1pdHMpP3M9Im11bmRlcm92ZXIiOnM9Im1zdWJzdXAifWVsc2V7dmFyIHU9dC5iYXNlO3UmJnUudHlwZT09PSJvcCImJnUubGltaXRzJiYoZS5zdHlsZT09PXJyLkRJU1BMQVl8fHUuYWx3YXlzSGFuZGxlU3VwU3ViKXx8dSYmdS50eXBlPT09Im9wZXJhdG9ybmFtZSImJnUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHN8fGUuc3R5bGU9PT1yci5ESVNQTEFZKT9zPSJtdW5kZXIiOnM9Im1zdWIifWVsc2V7dmFyIGw9dC5iYXNlO2wmJmwudHlwZT09PSJvcCImJmwubGltaXRzJiYoZS5zdHlsZT09PXJyLkRJU1BMQVl8fGwuYWx3YXlzSGFuZGxlU3VwU3ViKXx8bCYmbC50eXBlPT09Im9wZXJhdG9ybmFtZSImJmwuYWx3YXlzSGFuZGxlU3VwU3ViJiYobC5saW1pdHN8fGUuc3R5bGU9PT1yci5ESVNQTEFZKT9zPSJtb3ZlciI6cz0ibXN1cCJ9cmV0dXJuIG5ldyBhdC5NYXRoTm9kZShzLGEpfX0pO2lkKHt0eXBlOiJhdG9tIixodG1sQnVpbGRlcih0LGUpe3JldHVybiBGZS5tYXRoc3ltKHQudGV4dCx0Lm1vZGUsZSxbIm0iK3QuZmFtaWx5XSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixbTW8odC50ZXh0LHQubW9kZSldKTtpZih0LmZhbWlseT09PSJiaW4iKXt2YXIgbj1CQyh0LGUpO249PT0iYm9sZC1pdGFsaWMiJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pfWVsc2UgdC5mYW1pbHk9PT0icHVuY3QiP3Iuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KHQuZmFtaWx5PT09Im9wZW4ifHx0LmZhbWlseT09PSJjbG9zZSIpJiZyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiByfX0pO3ckPXttaToiaXRhbGljIixtbjoibm9ybWFsIixtdGV4dDoibm9ybWFsIn07aWQoe3R5cGU6Im1hdGhvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEZlLm1ha2VPcmQodCxlLCJtYXRob3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1pIixbTW8odC50ZXh0LHQubW9kZSxlKV0pLG49QkModCxlKXx8Iml0YWxpYyI7cmV0dXJuIG4hPT13JFtyLnR5cGVdJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pLHJ9fSk7aWQoe3R5cGU6InRleHRvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEZlLm1ha2VPcmQodCxlLCJ0ZXh0b3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1Nbyh0LnRleHQsdC5tb2RlLGUpLG49QkModCxlKXx8Im5vcm1hbCIsaTtyZXR1cm4gdC5tb2RlPT09InRleHQiP2k9bmV3IGF0Lk1hdGhOb2RlKCJtdGV4dCIsW3JdKTovWzAtOV0vLnRlc3QodC50ZXh0KT9pPW5ldyBhdC5NYXRoTm9kZSgibW4iLFtyXSk6dC50ZXh0PT09IlxccHJpbWUiP2k9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW3JdKTppPW5ldyBhdC5NYXRoTm9kZSgibWkiLFtyXSksbiE9PXckW2kudHlwZV0mJmkuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbiksaX19KTt2Qz17Ilxcbm9icmVhayI6Im5vYnJlYWsiLCJcXGFsbG93YnJlYWsiOiJhbGxvd2JyZWFrIn0seEM9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07aWQoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKHQsZSl7aWYoeEMuaGFzT3duUHJvcGVydHkodC50ZXh0KSl7dmFyIHI9eENbdC50ZXh0XS5jbGFzc05hbWV8fCIiO2lmKHQubW9kZT09PSJ0ZXh0Iil7dmFyIG49RmUubWFrZU9yZCh0LGUsInRleHRvcmQiKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2gociksbn1lbHNlIHJldHVybiBGZS5tYWtlU3BhbihbIm1zcGFjZSIscl0sW0ZlLm1hdGhzeW0odC50ZXh0LHQubW9kZSxlKV0sZSl9ZWxzZXtpZih2Qy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXJldHVybiBGZS5tYWtlU3BhbihbIm1zcGFjZSIsdkNbdC50ZXh0XV0sW10sZSk7dGhyb3cgbmV3IGx0KCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicrdC50ZXh0KyciJyl9fSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI7aWYoeEMuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyPW5ldyBhdC5NYXRoTm9kZSgibXRleHQiLFtuZXcgYXQuVGV4dE5vZGUoIlx4QTAiKV0pO2Vsc2V7aWYodkMuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtc3BhY2UiKTt0aHJvdyBuZXcgbHQoJ1Vua25vd24gdHlwZSBvZiBzcGFjZSAiJyt0LnRleHQrJyInKX1yZXR1cm4gcn19KTtFRz1vKCgpPT57dmFyIHQ9bmV3IGF0Lk1hdGhOb2RlKCJtdGQiLFtdKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiNTAlIiksdH0sInBhZCIpO2lkKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm10YWJsZSIsW25ldyBhdC5NYXRoTm9kZSgibXRyIixbRUcoKSxuZXcgYXQuTWF0aE5vZGUoIm10ZCIsW3ZoKHQuYm9keSxlKV0pLEVHKCksbmV3IGF0Lk1hdGhOb2RlKCJtdGQiLFt2aCh0LnRhZyxlKV0pXSldKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHJ9fSk7U0c9eyJcXHRleHQiOnZvaWQgMCwiXFx0ZXh0cm0iOiJ0ZXh0cm0iLCJcXHRleHRzZiI6InRleHRzZiIsIlxcdGV4dHR0IjoidGV4dHR0IiwiXFx0ZXh0bm9ybWFsIjoidGV4dHJtIn0sQ0c9eyJcXHRleHRiZiI6InRleHRiZiIsIlxcdGV4dG1kIjoidGV4dG1kIn0sTzRlPXsiXFx0ZXh0aXQiOiJ0ZXh0aXQiLCJcXHRleHR1cCI6InRleHR1cCJ9LEFHPW8oKHQsZSk9Pnt2YXIgcj10LmZvbnQ7aWYocil7aWYoU0dbcl0pcmV0dXJuIGUud2l0aFRleHRGb250RmFtaWx5KFNHW3JdKTtpZihDR1tyXSlyZXR1cm4gZS53aXRoVGV4dEZvbnRXZWlnaHQoQ0dbcl0pO2lmKHI9PT0iXFxlbXBoIilyZXR1cm4gZS5mb250U2hhcGU9PT0idGV4dGl0Ij9lLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0dXAiKTplLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0aXQiKX1lbHNlIHJldHVybiBlO3JldHVybiBlLndpdGhUZXh0Rm9udFNoYXBlKE80ZVtyXSl9LCJvcHRpb25zV2l0aEZvbnQiKTtTdCh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCIsIlxcZW1waCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsYm9keTpnaShpKSxmb250Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUFHKHQsZSksbj1GaSh0LmJvZHksciwhMCk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInRleHQiXSxuLHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9QUcodCxlKTtyZXR1cm4gdmgodC5ib2R5LHIpfX0pO1N0KHt0eXBlOiJ1bmRlcmxpbmUiLG5hbWVzOlsiXFx1bmRlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InVuZGVybGluZSIsbW9kZTpyLm1vZGUsYm9keTplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Qcih0LmJvZHksZSksbj1GZS5tYWtlTGluZVNwYW4oInVuZGVybGluZS1saW5lIixlKSxpPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxhPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6aX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6MyppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJ1bmRlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixbbmV3IGF0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgYXQuTWF0aE5vZGUoIm11bmRlciIsW3luKHQuYm9keSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxufX0pO1N0KHt0eXBlOiJ2Y2VudGVyIixuYW1lczpbIlxcdmNlbnRlciJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InZjZW50ZXIiLG1vZGU6ci5tb2RlLGJvZHk6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9UHIodC5ib2R5LGUpLG49ZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQsaT0uNSooci5oZWlnaHQtbi0oci5kZXB0aCtuKSk7cmV0dXJuIEZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOmksY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSxbInZjZW50ZXIiXSl9fSk7U3Qoe3R5cGU6InZlcmIiLG5hbWVzOlsiXFx2ZXJiIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt0aHJvdyBuZXcgbHQoIlxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlciIpfSxodG1sQnVpbGRlcih0LGUpe2Zvcih2YXIgcj1fRyh0KSxuPVtdLGk9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnRleHQoKSksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksbi5wdXNoKEZlLm1ha2VTeW1ib2wocywiVHlwZXdyaXRlci1SZWd1bGFyIix0Lm1vZGUsaSxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KGkuc2l6aW5nQ2xhc3NlcyhlKSksRmUudHJ5Q29tYmluZUNoYXJzKG4pLGkpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGF0LlRleHROb2RlKF9HKHQpKSxuPW5ldyBhdC5NYXRoTm9kZSgibXRleHQiLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm1vbm9zcGFjZSIpLG59fSk7X0c9byh0PT50LmJvZHkucmVwbGFjZSgvIC9nLHQuc3Rhcj8iXHUyNDIzIjoiXHhBMCIpLCJtYWtlVmVyYiIpLGdoPUhHLFQkPWBbIFxyCgldYCxQNGU9IlxcXFxbYS16QS1aQF0rIixCNGU9IlxcXFxbXlx1RDgwMC1cdURGRkZdIixGNGU9IigiK1A0ZSsiKSIrVCQrIioiLHo0ZT1gXFxcXCgKfFsgXHIJXSsKPylbIFxyCV0qYCxEQz0iW1x1MDMwMC1cdTAzNkZdIixHNGU9bmV3IFJlZ0V4cChEQysiKyQiKSwkNGU9IigiK1QkKyIrKXwiKyh6NGUrInwiKSsiKFshLVxcW1xcXS1cdTIwMjdcdTIwMkEtXHVEN0ZGXHVGOTAwLVx1RkZGRl0iKyhEQysiKiIpKyJ8W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdIisoREMrIioiKSsifFxcXFx2ZXJiXFwqKFteXSkuKj9cXDR8XFxcXHZlcmIoW14qYS16QS1aXSkuKj9cXDUiKygifCIrRjRlKSsoInwiK0I0ZSsiKSIpLEE0PWNsYXNze3N0YXRpY3tvKHRoaXMsIkxleGVyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlucHV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLnRva2VuUmVnZXg9dm9pZCAwLHRoaXMuY2F0Y29kZXM9dm9pZCAwLHRoaXMuaW5wdXQ9ZSx0aGlzLnNldHRpbmdzPXIsdGhpcy50b2tlblJlZ2V4PW5ldyBSZWdFeHAoJDRlLCJnIiksdGhpcy5jYXRjb2Rlcz17IiUiOjE0LCJ+IjoxM319c2V0Q2F0Y29kZShlLHIpe3RoaXMuY2F0Y29kZXNbZV09cn1sZXgoKXt2YXIgZT10aGlzLmlucHV0LHI9dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleDtpZihyPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBSbygiRU9GIixuZXcgSnModGhpcyxyLHIpKTt2YXIgbj10aGlzLnRva2VuUmVnZXguZXhlYyhlKTtpZihuPT09bnVsbHx8bi5pbmRleCE9PXIpdGhyb3cgbmV3IGx0KCJVbmV4cGVjdGVkIGNoYXJhY3RlcjogJyIrZVtyXSsiJyIsbmV3IFJvKGVbcl0sbmV3IEpzKHRoaXMscixyKzEpKSk7dmFyIGk9bls2XXx8blszXXx8KG5bMl0/IlxcICI6IiAiKTtpZih0aGlzLmNhdGNvZGVzW2ldPT09MTQpe3ZhciBhPWUuaW5kZXhPZihgCmAsdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7cmV0dXJuIGE9PT0tMT8odGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD1lLmxlbmd0aCx0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgiY29tbWVudEF0RW5kIiwiJSBjb21tZW50IGhhcyBubyB0ZXJtaW5hdGluZyBuZXdsaW5lOyBMYVRlWCB3b3VsZCBmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKSIpKTp0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4PWErMSx0aGlzLmxleCgpfXJldHVybiBuZXcgUm8oaSxuZXcgSnModGhpcyxyLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKX19LE5DPWNsYXNze3N0YXRpY3tvKHRoaXMsIk5hbWVzcGFjZSIpfWNvbnN0cnVjdG9yKGUscil7ZT09PXZvaWQgMCYmKGU9e30pLHI9PT12b2lkIDAmJihyPXt9KSx0aGlzLmN1cnJlbnQ9dm9pZCAwLHRoaXMuYnVpbHRpbnM9dm9pZCAwLHRoaXMudW5kZWZTdGFjaz12b2lkIDAsdGhpcy5jdXJyZW50PXIsdGhpcy5idWlsdGlucz1lLHRoaXMudW5kZWZTdGFjaz1bXX1iZWdpbkdyb3VwKCl7dGhpcy51bmRlZlN0YWNrLnB1c2goe30pfWVuZEdyb3VwKCl7aWYodGhpcy51bmRlZlN0YWNrLmxlbmd0aD09PTApdGhyb3cgbmV3IGx0KCJVbmJhbGFuY2VkIG5hbWVzcGFjZSBkZXN0cnVjdGlvbjogYXR0ZW1wdCB0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIik7dmFyIGU9dGhpcy51bmRlZlN0YWNrLnBvcCgpO2Zvcih2YXIgciBpbiBlKWUuaGFzT3duUHJvcGVydHkocikmJihlW3JdPT1udWxsP2RlbGV0ZSB0aGlzLmN1cnJlbnRbcl06dGhpcy5jdXJyZW50W3JdPWVbcl0pfWVuZEdyb3Vwcygpe2Zvcig7dGhpcy51bmRlZlN0YWNrLmxlbmd0aD4wOyl0aGlzLmVuZEdyb3VwKCl9aGFzKGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSl8fHRoaXMuYnVpbHRpbnMuaGFzT3duUHJvcGVydHkoZSl9Z2V0KGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSk/dGhpcy5jdXJyZW50W2VdOnRoaXMuYnVpbHRpbnNbZV19c2V0KGUscixuKXtpZihuPT09dm9pZCAwJiYobj0hMSksbil7Zm9yKHZhciBpPTA7aTx0aGlzLnVuZGVmU3RhY2subGVuZ3RoO2krKylkZWxldGUgdGhpcy51bmRlZlN0YWNrW2ldW2VdO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MCYmKHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdW2VdPXIpfWVsc2V7dmFyIGE9dGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGgtMV07YSYmIWEuaGFzT3duUHJvcGVydHkoZSkmJihhW2VdPXRoaXMuY3VycmVudFtlXSl9cj09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W2VdOnRoaXMuY3VycmVudFtlXT1yfX0sVjRlPWgkO2xlKCJcXG5vZXhwYW5kIixmdW5jdGlvbih0KXt2YXIgZT10LnBvcFRva2VuKCk7cmV0dXJuIHQuaXNFeHBhbmRhYmxlKGUudGV4dCkmJihlLm5vZXhwYW5kPSEwLGUudHJlYXRBc1JlbGF4PSEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7bGUoIlxcZXhwYW5kYWZ0ZXIiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9wVG9rZW4oKTtyZXR1cm4gdC5leHBhbmRPbmNlKCEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7bGUoIlxcQGZpcnN0b2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzBdLG51bUFyZ3M6MH19KTtsZSgiXFxAc2Vjb25kb2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzFdLG51bUFyZ3M6MH19KTtsZSgiXFxAaWZuZXh0Y2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygzKTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZ1dHVyZSgpO3JldHVybiBlWzBdLmxlbmd0aD09PTEmJmVbMF1bMF0udGV4dD09PXIudGV4dD97dG9rZW5zOmVbMV0sbnVtQXJnczowfTp7dG9rZW5zOmVbMl0sbnVtQXJnczowfX0pO2xlKCJcXEBpZnN0YXIiLCJcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19Iik7bGUoIlxcVGV4dE9yTWF0aCIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm4gdC5tb2RlPT09InRleHQiP3t0b2tlbnM6ZVswXSxudW1BcmdzOjB9Ont0b2tlbnM6ZVsxXSxudW1BcmdzOjB9fSk7TEc9ezA6MCwxOjEsMjoyLDM6Myw0OjQsNTo1LDY6Niw3OjcsODo4LDk6OSxhOjEwLEE6MTAsYjoxMSxCOjExLGM6MTIsQzoxMixkOjEzLEQ6MTMsZToxNCxFOjE0LGY6MTUsRjoxNX07bGUoIlxcY2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5wb3BUb2tlbigpLHIsbj0iIjtpZihlLnRleHQ9PT0iJyIpcj04LGU9dC5wb3BUb2tlbigpO2Vsc2UgaWYoZS50ZXh0PT09JyInKXI9MTYsZT10LnBvcFRva2VuKCk7ZWxzZSBpZihlLnRleHQ9PT0iYCIpaWYoZT10LnBvcFRva2VuKCksZS50ZXh0WzBdPT09IlxcIiluPWUudGV4dC5jaGFyQ29kZUF0KDEpO2Vsc2V7aWYoZS50ZXh0PT09IkVPRiIpdGhyb3cgbmV3IGx0KCJcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnQiKTtuPWUudGV4dC5jaGFyQ29kZUF0KDApfWVsc2Ugcj0xMDtpZihyKXtpZihuPUxHW2UudGV4dF0sbj09bnVsbHx8bj49cil0aHJvdyBuZXcgbHQoIkludmFsaWQgYmFzZS0iK3IrIiBkaWdpdCAiK2UudGV4dCk7Zm9yKHZhciBpOyhpPUxHW3QuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZpPHI7KW4qPXIsbis9aSx0LnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IituKyJ9In0pO3FDPW8oKHQsZSxyKT0+e3ZhciBuPXQuY29uc3VtZUFyZygpLnRva2VucztpZihuLmxlbmd0aCE9PTEpdGhyb3cgbmV3IGx0KCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBpPW5bMF0udGV4dCxhPXQuaXNEZWZpbmVkKGkpO2lmKGEmJiFlKXRocm93IG5ldyBsdCgiXFxuZXdjb21tYW5keyIraSsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKGkrIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCFhJiYhcil0aHJvdyBuZXcgbHQoIlxccmVuZXdjb21tYW5keyIraSsifSB3aGVuIGNvbW1hbmQgIitpKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIHM9MDtpZihuPXQuY29uc3VtZUFyZygpLnRva2VucyxuLmxlbmd0aD09PTEmJm5bMF0udGV4dD09PSJbIil7Zm9yKHZhciBsPSIiLHU9dC5leHBhbmROZXh0VG9rZW4oKTt1LnRleHQhPT0iXSImJnUudGV4dCE9PSJFT0YiOylsKz11LnRleHQsdT10LmV4cGFuZE5leHRUb2tlbigpO2lmKCFsLm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyBsdCgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK2wpO3M9cGFyc2VJbnQobCksbj10LmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIHQubWFjcm9zLnNldChpLHt0b2tlbnM6bixudW1BcmdzOnN9KSwiIn0sIm5ld2NvbW1hbmQiKTtsZSgiXFxuZXdjb21tYW5kIix0PT5xQyh0LCExLCEwKSk7bGUoIlxccmVuZXdjb21tYW5kIix0PT5xQyh0LCEwLCExKSk7bGUoIlxccHJvdmlkZWNvbW1hbmQiLHQ9PnFDKHQsITAsITApKTtsZSgiXFxtZXNzYWdlIix0PT57dmFyIGU9dC5jb25zdW1lQXJncygxKVswXTtyZXR1cm4gY29uc29sZS5sb2coZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7bGUoIlxcZXJybWVzc2FnZSIsdD0+e3ZhciBlPXQuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUuZXJyb3IoZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7bGUoIlxcc2hvdyIsdD0+e3ZhciBlPXQucG9wVG9rZW4oKSxyPWUudGV4dDtyZXR1cm4gY29uc29sZS5sb2coZSx0Lm1hY3Jvcy5nZXQociksZ2hbcl0sQ24ubWF0aFtyXSxDbi50ZXh0W3JdKSwiIn0pO2xlKCJcXGJncm91cCIsInsiKTtsZSgiXFxlZ3JvdXAiLCJ9Iik7bGUoIn4iLCJcXG5vYnJlYWtzcGFjZSIpO2xlKCJcXGxxIiwiYCIpO2xlKCJcXHJxIiwiJyIpO2xlKCJcXGFhIiwiXFxyIGEiKTtsZSgiXFxBQSIsIlxcciBBIik7bGUoIlxcdGV4dGNvcHlyaWdodCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtjfX17XFxjaGFyYFx4QTl9Iik7bGUoIlxcY29weXJpZ2h0IiwiXFxUZXh0T3JNYXRoe1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0e1xcdGV4dGNvcHlyaWdodH19Iik7bGUoIlxcdGV4dHJlZ2lzdGVyZWQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7XFxzY3JpcHRzaXplIFJ9fXtcXGNoYXJgXHhBRX0iKTtsZSgiXHUyMTJDIiwiXFxtYXRoc2Nye0J9Iik7bGUoIlx1MjEzMCIsIlxcbWF0aHNjcntFfSIpO2xlKCJcdTIxMzEiLCJcXG1hdGhzY3J7Rn0iKTtsZSgiXHUyMTBCIiwiXFxtYXRoc2Nye0h9Iik7bGUoIlx1MjExMCIsIlxcbWF0aHNjcntJfSIpO2xlKCJcdTIxMTIiLCJcXG1hdGhzY3J7TH0iKTtsZSgiXHUyMTMzIiwiXFxtYXRoc2Nye019Iik7bGUoIlx1MjExQiIsIlxcbWF0aHNjcntSfSIpO2xlKCJcdTIxMkQiLCJcXG1hdGhmcmFre0N9Iik7bGUoIlx1MjEwQyIsIlxcbWF0aGZyYWt7SH0iKTtsZSgiXHUyMTI4IiwiXFxtYXRoZnJha3tafSIpO2xlKCJcXEJiYmsiLCJcXEJiYntrfSIpO2xlKCJceEI3IiwiXFxjZG90cCIpO2xlKCJcXGxsYXAiLCJcXG1hdGhsbGFwe1xcdGV4dHJteyMxfX0iKTtsZSgiXFxybGFwIiwiXFxtYXRocmxhcHtcXHRleHRybXsjMX19Iik7bGUoIlxcY2xhcCIsIlxcbWF0aGNsYXB7XFx0ZXh0cm17IzF9fSIpO2xlKCJcXG1hdGhzdHJ1dCIsIlxcdnBoYW50b217KH0iKTtsZSgiXFx1bmRlcmJhciIsIlxcdW5kZXJsaW5le1xcdGV4dHsjMX19Iik7bGUoIlxcbm90IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmxhcFxcQG5vdH19e1xcY2hhciIzMzh9Jyk7bGUoIlxcbmVxIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxub3Q9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNjB9fSIpO2xlKCJcXG5lIiwiXFxuZXEiKTtsZSgiXHUyMjYwIiwiXFxuZXEiKTtsZSgiXFxub3RpbiIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse3tcXGlufVxcbWF0aGxsYXB7L1xcbXNraXAxbXV9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyMDl9fSIpO2xlKCJcdTIyMDkiLCJcXG5vdGluIik7bGUoIlx1MjI1OCIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXGtlcm57LTFlbX1cXHJhaXNlYm94ezAuNGVtfXskXFxzY3JpcHRzaXplXFxmcm93biR9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNTh9fSIpO2xlKCJcdTIyNTkiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFx3ZWRnZX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjU4fX0iKTtsZSgiXHUyMjVBIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcdmVlfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUF9fSIpO2xlKCJcdTIyNUIiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFxzY3JpcHRzaXplXFxzdGFyfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUJ9fSIpO2xlKCJcdTIyNUQiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFxtYXRocm17ZGVmfX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVEfX0iKTtsZSgiXHUyMjVFIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte219fXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUV9fSIpO2xlKCJcdTIyNUYiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55P317PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVGfX0iKTtsZSgiXHUyN0MyIiwiXFxwZXJwIik7bGUoIlx1MjAzQyIsIlxcbWF0aGNsb3NleyFcXG1rZXJuLTAuOG11IX0iKTtsZSgiXHUyMjBDIiwiXFxub3RuaSIpO2xlKCJcdTIzMUMiLCJcXHVsY29ybmVyIik7bGUoIlx1MjMxRCIsIlxcdXJjb3JuZXIiKTtsZSgiXHUyMzFFIiwiXFxsbGNvcm5lciIpO2xlKCJcdTIzMUYiLCJcXGxyY29ybmVyIik7bGUoIlx4QTkiLCJcXGNvcHlyaWdodCIpO2xlKCJceEFFIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpO2xlKCJcdUZFMEYiLCJcXHRleHRyZWdpc3RlcmVkIik7bGUoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319Jyk7bGUoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19Jyk7bGUoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19Jyk7bGUoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19Jyk7bGUoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpO2xlKCJcdTIyRUUiLCJcXHZkb3RzIik7bGUoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpO2xlKCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKTtsZSgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9Iik7bGUoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9Iik7bGUoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpO2xlKCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKTtsZSgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9Iik7bGUoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKTtsZSgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKTtsZSgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKTtsZSgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9Iik7bGUoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9Iik7bGUoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4Iik7bGUoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9Iik7bGUoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7Iik7bGUoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7Iik7bGUoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO0RHPXsiLCI6IlxcZG90c2MiLCJcXG5vdCI6IlxcZG90c2IiLCIrIjoiXFxkb3RzYiIsIj0iOiJcXGRvdHNiIiwiPCI6IlxcZG90c2IiLCI+IjoiXFxkb3RzYiIsIi0iOiJcXGRvdHNiIiwiKiI6IlxcZG90c2IiLCI6IjoiXFxkb3RzYiIsIlxcRE9UU0IiOiJcXGRvdHNiIiwiXFxjb3Byb2QiOiJcXGRvdHNiIiwiXFxiaWd2ZWUiOiJcXGRvdHNiIiwiXFxiaWd3ZWRnZSI6IlxcZG90c2IiLCJcXGJpZ3VwbHVzIjoiXFxkb3RzYiIsIlxcYmlnY2FwIjoiXFxkb3RzYiIsIlxcYmlnY3VwIjoiXFxkb3RzYiIsIlxccHJvZCI6IlxcZG90c2IiLCJcXHN1bSI6IlxcZG90c2IiLCJcXGJpZ290aW1lcyI6IlxcZG90c2IiLCJcXGJpZ29wbHVzIjoiXFxkb3RzYiIsIlxcYmlnb2RvdCI6IlxcZG90c2IiLCJcXGJpZ3NxY3VwIjoiXFxkb3RzYiIsIlxcQW5kIjoiXFxkb3RzYiIsIlxcbG9uZ3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXGxvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcTG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbWFwc3RvIjoiXFxkb3RzYiIsIlxcbG9uZ21hcHN0byI6IlxcZG90c2IiLCJcXGhvb2tyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcZG90ZXEiOiJcXGRvdHNiIiwiXFxtYXRoYmluIjoiXFxkb3RzYiIsIlxcbWF0aHJlbCI6IlxcZG90c2IiLCJcXHJlbGJhciI6IlxcZG90c2IiLCJcXFJlbGJhciI6IlxcZG90c2IiLCJcXHhyaWdodGFycm93IjoiXFxkb3RzYiIsIlxceGxlZnRhcnJvdyI6IlxcZG90c2IiLCJcXERPVFNJIjoiXFxkb3RzaSIsIlxcaW50IjoiXFxkb3RzaSIsIlxcb2ludCI6IlxcZG90c2kiLCJcXGlpbnQiOiJcXGRvdHNpIiwiXFxpaWludCI6IlxcZG90c2kiLCJcXGlpaWludCI6IlxcZG90c2kiLCJcXGlkb3RzaW50IjoiXFxkb3RzaSIsIlxcRE9UU1giOiJcXGRvdHN4In07bGUoIlxcZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9IlxcZG90c28iLHI9dC5leHBhbmRBZnRlckZ1dHVyZSgpLnRleHQ7cmV0dXJuIHIgaW4gREc/ZT1ER1tyXTooci5zbGljZSgwLDQpPT09Ilxcbm90Inx8ciBpbiBDbi5tYXRoJiZKdC5jb250YWlucyhbImJpbiIsInJlbCJdLENuLm1hdGhbcl0uZ3JvdXApKSYmKGU9IlxcZG90c2IiKSxlfSk7WEM9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtsZSgiXFxkb3RzbyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFhDPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtsZSgiXFxkb3RzYyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFhDJiZlIT09IiwiPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtsZSgiXFxjZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFhDPyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pO2xlKCJcXGRvdHNiIiwiXFxjZG90cyIpO2xlKCJcXGRvdHNtIiwiXFxjZG90cyIpO2xlKCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpO2xlKCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpO2xlKCJcXERPVFNJIiwiXFxyZWxheCIpO2xlKCJcXERPVFNCIiwiXFxyZWxheCIpO2xlKCJcXERPVFNYIiwiXFxyZWxheCIpO2xlKCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpO2xlKCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKTtsZSgiXFx0aGluc3BhY2UiLCJcXCwiKTtsZSgiXFw+IiwiXFxtc2tpcHs0bXV9Iik7bGUoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpO2xlKCJcXG1lZHNwYWNlIiwiXFw6Iik7bGUoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpO2xlKCJcXHRoaWNrc3BhY2UiLCJcXDsiKTtsZSgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19Iik7bGUoIlxcbmVndGhpbnNwYWNlIiwiXFwhIik7bGUoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKTtsZSgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKTtsZSgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKTtsZSgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKTtsZSgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKTtsZSgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4Iik7bGUoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIik7bGUoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9Iik7bGUoIlxcdGFnQGxpdGVyYWwiLHQ9PntpZih0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IGx0KCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KTtsZSgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpO2xlKCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIik7bGUoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9Iik7bGUoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpO2xlKCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpO2xlKCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTtrJD1ndChsY1siTWFpbi1SZWd1bGFyIl1bODRdWzFdLS43KmxjWyJNYWluLVJlZ3VsYXIiXVs2NV1bMV0pO2xlKCJcXExhVGVYIiwiXFx0ZXh0cm17XFxodG1sQG1hdGhtbHsiKygiTFxca2Vybi0uMzZlbVxccmFpc2Vib3h7IitrJCsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19Iik7bGUoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK2skKyJ9e1xcc2NyaXB0c3R5bGUgQX0iKSsiXFxrZXJuLS4xNWVtXFxUZVh9e0thVGVYfX0iKTtsZSgiXFxoc3BhY2UiLCJcXEBpZnN0YXJcXEBoc3BhY2VyXFxAaHNwYWNlIik7bGUoIlxcQGhzcGFjZSIsIlxcaHNraXAgIzFcXHJlbGF4Iik7bGUoIlxcQGhzcGFjZXIiLCJcXHJ1bGV7MHB0fXswcHR9XFxoc2tpcCAjMVxccmVsYXgiKTtsZSgiXFxvcmRpbmFyeWNvbG9uIiwiOiIpO2xlKCJcXHZjZW50Y29sb24iLCJcXG1hdGhyZWx7XFxtYXRob3BcXG9yZGluYXJ5Y29sb259Iik7bGUoIlxcZGJsY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0uOW11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM3fX0nKTtsZSgiXFxjb2xvbmVxcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjI1NH19Jyk7bGUoIlxcQ29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjNkfX0nKTtsZSgiXFxjb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyMTJ9fScpO2xlKCJcXENvbG9uZXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIxMn19Jyk7bGUoIlxcZXFxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyNTV9fScpO2xlKCJcXEVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiM2RcXGNoYXIiMjIzN319Jyk7bGUoIlxcZXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM5fX0nKTtsZSgiXFxFcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjEyXFxjaGFyIjIyMzd9fScpO2xlKCJcXGNvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjI0OH19Jyk7bGUoIlxcQ29sb25hcHByb3giLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjQ4fX0nKTtsZSgiXFxjb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyM2N9fScpO2xlKCJcXENvbG9uc2ltIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIzY319Jyk7bGUoIlx1MjIzNyIsIlxcZGJsY29sb24iKTtsZSgiXHUyMjM5IiwiXFxlcWNvbG9uIik7bGUoIlx1MjI1NCIsIlxcY29sb25lcXEiKTtsZSgiXHUyMjU1IiwiXFxlcXFjb2xvbiIpO2xlKCJcdTJBNzQiLCJcXENvbG9uZXFxIik7bGUoIlxccmF0aW8iLCJcXHZjZW50Y29sb24iKTtsZSgiXFxjb2xvbmNvbG9uIiwiXFxkYmxjb2xvbiIpO2xlKCJcXGNvbG9uZXF1YWxzIiwiXFxjb2xvbmVxcSIpO2xlKCJcXGNvbG9uY29sb25lcXVhbHMiLCJcXENvbG9uZXFxIik7bGUoIlxcZXF1YWxzY29sb24iLCJcXGVxcWNvbG9uIik7bGUoIlxcZXF1YWxzY29sb25jb2xvbiIsIlxcRXFxY29sb24iKTtsZSgiXFxjb2xvbm1pbnVzIiwiXFxjb2xvbmVxIik7bGUoIlxcY29sb25jb2xvbm1pbnVzIiwiXFxDb2xvbmVxIik7bGUoIlxcbWludXNjb2xvbiIsIlxcZXFjb2xvbiIpO2xlKCJcXG1pbnVzY29sb25jb2xvbiIsIlxcRXFjb2xvbiIpO2xlKCJcXGNvbG9uY29sb25hcHByb3giLCJcXENvbG9uYXBwcm94Iik7bGUoIlxcY29sb25jb2xvbnNpbSIsIlxcQ29sb25zaW0iKTtsZSgiXFxzaW1jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtsZSgiXFxzaW1jb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcc2ltXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtsZSgiXFxhcHByb3hjb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtsZSgiXFxhcHByb3hjb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcYXBwcm94XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtsZSgiXFxub3RuaSIsIlxcaHRtbEBtYXRobWx7XFxub3RcXG5pfXtcXG1hdGhyZWx7XFxjaGFyYFx1MjIwQ319Iik7bGUoIlxcbGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxzdXB9Iik7bGUoIlxcbGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxpbmZ9Iik7bGUoIlxcaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntpbmpcXCxsaW19Iik7bGUoIlxccHJvamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7cHJvalxcLGxpbX0iKTtsZSgiXFx2YXJsaW1zdXAiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcb3ZlcmxpbmV7bGltfX0iKTtsZSgiXFx2YXJsaW1pbmYiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsaW5le2xpbX19Iik7bGUoIlxcdmFyaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVycmlnaHRhcnJvd3tsaW19fSIpO2xlKCJcXHZhcnByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsZWZ0YXJyb3d7bGltfX0iKTtsZSgiXFxndmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGd2ZXJ0bmVxcX17XHUyMjY5fSIpO2xlKCJcXGx2ZXJ0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbHZlcnRuZXFxfXtcdTIyNjh9Iik7bGUoIlxcbmdlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5nZXFxfXtcdTIyNzF9Iik7bGUoIlxcbmdlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBuZ2Vxc2xhbnR9e1x1MjI3MX0iKTtsZSgiXFxubGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbmxlcXF9e1x1MjI3MH0iKTtsZSgiXFxubGVxc2xhbnQiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFzbGFudH17XHUyMjcwfSIpO2xlKCJcXG5zaG9ydG1pZCIsIlxcaHRtbEBtYXRobWx7XFxAbnNob3J0bWlkfXtcdTIyMjR9Iik7bGUoIlxcbnNob3J0cGFyYWxsZWwiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydHBhcmFsbGVsfXtcdTIyMjZ9Iik7bGUoIlxcbnN1YnNldGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbnN1YnNldGVxcX17XHUyMjg4fSIpO2xlKCJcXG5zdXBzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdXBzZXRlcXF9e1x1MjI4OX0iKTtsZSgiXFx2YXJzdWJzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcX17XHUyMjhBfSIpO2xlKCJcXHZhcnN1YnNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcXF9e1x1MkFDQn0iKTtsZSgiXFx2YXJzdXBzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcX17XHUyMjhCfSIpO2xlKCJcXHZhcnN1cHNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcXF9e1x1MkFDQ30iKTtsZSgiXFxpbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAaW1hdGh9e1x1MDEzMX0iKTtsZSgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e1x1MDIzN30iKTtsZSgiXFxsbGJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aG9wZW57W1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJgXHUyN0U2fX0iKTtsZSgiXFxycmJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI3RTd9fSIpO2xlKCJcdTI3RTYiLCJcXGxsYnJhY2tldCIpO2xlKCJcdTI3RTciLCJcXHJyYnJhY2tldCIpO2xlKCJcXGxCcmFjZSIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntcXHtcXG1rZXJuLTMuMm11W319e1xcbWF0aG9wZW57XFxjaGFyYFx1Mjk4M319Iik7bGUoIlxcckJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhjbG9zZXtdXFxta2Vybi0zLjJtdVxcfX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI5ODR9fSIpO2xlKCJcdTI5ODMiLCJcXGxCcmFjZSIpO2xlKCJcdTI5ODQiLCJcXHJCcmFjZSIpO2xlKCJcXG1pbnVzbyIsIlxcbWF0aGJpbntcXGh0bWxAbWF0aG1se3tcXG1hdGhybGFwe1xcbWF0aGNob2ljZXtcXGtlcm57MC4xNDVlbX19e1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTAxNWVtfX17XFxrZXJuezAuMDcyNWVtfX1cXGNpcmN9ey19fX17XFxjaGFyYFx1MjlCNX19Iik7bGUoIlx1MjlCNSIsIlxcbWludXNvIik7bGUoIlxcZGFyciIsIlxcZG93bmFycm93Iik7bGUoIlxcZEFyciIsIlxcRG93bmFycm93Iik7bGUoIlxcRGFyciIsIlxcRG93bmFycm93Iik7bGUoIlxcbGFuZyIsIlxcbGFuZ2xlIik7bGUoIlxccmFuZyIsIlxccmFuZ2xlIik7bGUoIlxcdWFyciIsIlxcdXBhcnJvdyIpO2xlKCJcXHVBcnIiLCJcXFVwYXJyb3ciKTtsZSgiXFxVYXJyIiwiXFxVcGFycm93Iik7bGUoIlxcTiIsIlxcbWF0aGJie059Iik7bGUoIlxcUiIsIlxcbWF0aGJie1J9Iik7bGUoIlxcWiIsIlxcbWF0aGJie1p9Iik7bGUoIlxcYWxlZiIsIlxcYWxlcGgiKTtsZSgiXFxhbGVmc3ltIiwiXFxhbGVwaCIpO2xlKCJcXEFscGhhIiwiXFxtYXRocm17QX0iKTtsZSgiXFxCZXRhIiwiXFxtYXRocm17Qn0iKTtsZSgiXFxidWxsIiwiXFxidWxsZXQiKTtsZSgiXFxDaGkiLCJcXG1hdGhybXtYfSIpO2xlKCJcXGNsdWJzIiwiXFxjbHVic3VpdCIpO2xlKCJcXGNudW1zIiwiXFxtYXRoYmJ7Q30iKTtsZSgiXFxDb21wbGV4IiwiXFxtYXRoYmJ7Q30iKTtsZSgiXFxEYWdnZXIiLCJcXGRkYWdnZXIiKTtsZSgiXFxkaWFtb25kcyIsIlxcZGlhbW9uZHN1aXQiKTtsZSgiXFxlbXB0eSIsIlxcZW1wdHlzZXQiKTtsZSgiXFxFcHNpbG9uIiwiXFxtYXRocm17RX0iKTtsZSgiXFxFdGEiLCJcXG1hdGhybXtIfSIpO2xlKCJcXGV4aXN0IiwiXFxleGlzdHMiKTtsZSgiXFxoYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXGhBcnIiLCJcXExlZnRyaWdodGFycm93Iik7bGUoIlxcSGFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKTtsZSgiXFxoZWFydHMiLCJcXGhlYXJ0c3VpdCIpO2xlKCJcXGltYWdlIiwiXFxJbSIpO2xlKCJcXGluZmluIiwiXFxpbmZ0eSIpO2xlKCJcXElvdGEiLCJcXG1hdGhybXtJfSIpO2xlKCJcXGlzaW4iLCJcXGluIik7bGUoIlxcS2FwcGEiLCJcXG1hdGhybXtLfSIpO2xlKCJcXGxhcnIiLCJcXGxlZnRhcnJvdyIpO2xlKCJcXGxBcnIiLCJcXExlZnRhcnJvdyIpO2xlKCJcXExhcnIiLCJcXExlZnRhcnJvdyIpO2xlKCJcXGxyYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXGxyQXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXExyYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXE11IiwiXFxtYXRocm17TX0iKTtsZSgiXFxuYXRudW1zIiwiXFxtYXRoYmJ7Tn0iKTtsZSgiXFxOdSIsIlxcbWF0aHJte059Iik7bGUoIlxcT21pY3JvbiIsIlxcbWF0aHJte099Iik7bGUoIlxccGx1c21uIiwiXFxwbSIpO2xlKCJcXHJhcnIiLCJcXHJpZ2h0YXJyb3ciKTtsZSgiXFxyQXJyIiwiXFxSaWdodGFycm93Iik7bGUoIlxcUmFyciIsIlxcUmlnaHRhcnJvdyIpO2xlKCJcXHJlYWwiLCJcXFJlIik7bGUoIlxccmVhbHMiLCJcXG1hdGhiYntSfSIpO2xlKCJcXFJlYWxzIiwiXFxtYXRoYmJ7Un0iKTtsZSgiXFxSaG8iLCJcXG1hdGhybXtQfSIpO2xlKCJcXHNkb3QiLCJcXGNkb3QiKTtsZSgiXFxzZWN0IiwiXFxTIik7bGUoIlxcc3BhZGVzIiwiXFxzcGFkZXN1aXQiKTtsZSgiXFxzdWIiLCJcXHN1YnNldCIpO2xlKCJcXHN1YmUiLCJcXHN1YnNldGVxIik7bGUoIlxcc3VwZSIsIlxcc3Vwc2V0ZXEiKTtsZSgiXFxUYXUiLCJcXG1hdGhybXtUfSIpO2xlKCJcXHRoZXRhc3ltIiwiXFx2YXJ0aGV0YSIpO2xlKCJcXHdlaWVycCIsIlxcd3AiKTtsZSgiXFxaZXRhIiwiXFxtYXRocm17Wn0iKTtsZSgiXFxhcmdtaW4iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1pbn0iKTtsZSgiXFxhcmdtYXgiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1heH0iKTtsZSgiXFxwbGltIiwiXFxET1RTQlxcbWF0aG9we1xcb3BlcmF0b3JuYW1le3BsaW19fVxcbGltaXRzIik7bGUoIlxcYnJhIiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9fH0iKTtsZSgiXFxrZXQiLCJcXG1hdGhpbm5lcnt8eyMxfVxccmFuZ2xlfSIpO2xlKCJcXGJyYWtldCIsIlxcbWF0aGlubmVye1xcbGFuZ2xleyMxfVxccmFuZ2xlfSIpO2xlKCJcXEJyYSIsIlxcbGVmdFxcbGFuZ2xlIzFcXHJpZ2h0fCIpO2xlKCJcXEtldCIsIlxcbGVmdHwjMVxccmlnaHRcXHJhbmdsZSIpO0UkPW8odD0+ZT0+e3ZhciByPWUuY29uc3VtZUFyZygpLnRva2VucyxuPWUuY29uc3VtZUFyZygpLnRva2VucyxpPWUuY29uc3VtZUFyZygpLnRva2VucyxhPWUuY29uc3VtZUFyZygpLnRva2VucyxzPWUubWFjcm9zLmdldCgifCIpLGw9ZS5tYWNyb3MuZ2V0KCJcXHwiKTtlLm1hY3Jvcy5iZWdpbkdyb3VwKCk7dmFyIHU9byhkPT5wPT57dCYmKHAubWFjcm9zLnNldCgifCIscyksaS5sZW5ndGgmJnAubWFjcm9zLnNldCgiXFx8IixsKSk7dmFyIG09ZDtpZighZCYmaS5sZW5ndGgpe3ZhciBnPXAuZnV0dXJlKCk7Zy50ZXh0PT09InwiJiYocC5wb3BUb2tlbigpLG09ITApfXJldHVybnt0b2tlbnM6bT9pOm4sbnVtQXJnczowfX0sIm1pZE1hY3JvIik7ZS5tYWNyb3Muc2V0KCJ8Iix1KCExKSksaS5sZW5ndGgmJmUubWFjcm9zLnNldCgiXFx8Iix1KCEwKSk7dmFyIGg9ZS5jb25zdW1lQXJnKCkudG9rZW5zLGY9ZS5leHBhbmRUb2tlbnMoWy4uLmEsLi4uaCwuLi5yXSk7cmV0dXJuIGUubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpmLnJldmVyc2UoKSxudW1BcmdzOjB9fSwiYnJha2V0SGVscGVyIik7bGUoIlxcYnJhQGtldCIsRSQoITEpKTtsZSgiXFxicmFAc2V0IixFJCghMCkpO2xlKCJcXEJyYWtldCIsIlxcYnJhQGtldHtcXGxlZnRcXGxhbmdsZX17XFwsXFxtaWRkbGVcXHZlcnRcXCx9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXHJpZ2h0XFxyYW5nbGV9Iik7bGUoIlxcU2V0IiwiXFxicmFAc2V0e1xcbGVmdFxce1xcOn17XFw7XFxtaWRkbGVcXHZlcnRcXDt9e1xcO1xcbWlkZGxlXFxWZXJ0XFw7fXtcXDpcXHJpZ2h0XFx9fSIpO2xlKCJcXHNldCIsIlxcYnJhQHNldHtcXHtcXCx9e1xcbWlkfXt9e1xcLFxcfX0iKTtsZSgiXFxhbmdsbiIsIntcXGFuZ2wgbn0iKTtsZSgiXFxibHVlIiwiXFx0ZXh0Y29sb3J7IyM2NDk1ZWR9eyMxfSIpO2xlKCJcXG9yYW5nZSIsIlxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX0iKTtsZSgiXFxwaW5rIiwiXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfSIpO2xlKCJcXHJlZCIsIlxcdGV4dGNvbG9yeyMjZGYwMDMwfXsjMX0iKTtsZSgiXFxncmVlbiIsIlxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX0iKTtsZSgiXFxncmF5IiwiXFx0ZXh0Y29sb3J7Z3JheX17IzF9Iik7bGUoIlxccHVycGxlIiwiXFx0ZXh0Y29sb3J7IyM5ZDM4YmR9eyMxfSIpO2xlKCJcXGJsdWVBIiwiXFx0ZXh0Y29sb3J7IyNjY2ZhZmZ9eyMxfSIpO2xlKCJcXGJsdWVCIiwiXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfSIpO2xlKCJcXGJsdWVDIiwiXFx0ZXh0Y29sb3J7IyM2M2Q5ZWF9eyMxfSIpO2xlKCJcXGJsdWVEIiwiXFx0ZXh0Y29sb3J7IyMxMWFjY2R9eyMxfSIpO2xlKCJcXGJsdWVFIiwiXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfSIpO2xlKCJcXHRlYWxBIiwiXFx0ZXh0Y29sb3J7IyM5NGZmZjV9eyMxfSIpO2xlKCJcXHRlYWxCIiwiXFx0ZXh0Y29sb3J7IyMyNmVkZDV9eyMxfSIpO2xlKCJcXHRlYWxDIiwiXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfSIpO2xlKCJcXHRlYWxEIiwiXFx0ZXh0Y29sb3J7IyMwMWE5OTV9eyMxfSIpO2xlKCJcXHRlYWxFIiwiXFx0ZXh0Y29sb3J7IyMyMDgxNzB9eyMxfSIpO2xlKCJcXGdyZWVuQSIsIlxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX0iKTtsZSgiXFxncmVlbkIiLCJcXHRleHRjb2xvcnsjIzhhZjI4MX17IzF9Iik7bGUoIlxcZ3JlZW5DIiwiXFx0ZXh0Y29sb3J7IyM3NGNmNzB9eyMxfSIpO2xlKCJcXGdyZWVuRCIsIlxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX0iKTtsZSgiXFxncmVlbkUiLCJcXHRleHRjb2xvcnsjIzBkOTIzZn17IzF9Iik7bGUoIlxcZ29sZEEiLCJcXHRleHRjb2xvcnsjI2ZmZDBhOX17IzF9Iik7bGUoIlxcZ29sZEIiLCJcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9Iik7bGUoIlxcZ29sZEMiLCJcXHRleHRjb2xvcnsjI2ZmOWMzOX17IzF9Iik7bGUoIlxcZ29sZEQiLCJcXHRleHRjb2xvcnsjI2UwN2QxMH17IzF9Iik7bGUoIlxcZ29sZEUiLCJcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9Iik7bGUoIlxccmVkQSIsIlxcdGV4dGNvbG9yeyMjZmNhOWE5fXsjMX0iKTtsZSgiXFxyZWRCIiwiXFx0ZXh0Y29sb3J7IyNmZjg0ODJ9eyMxfSIpO2xlKCJcXHJlZEMiLCJcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9Iik7bGUoIlxccmVkRCIsIlxcdGV4dGNvbG9yeyMjZTg0ZDM5fXsjMX0iKTtsZSgiXFxyZWRFIiwiXFx0ZXh0Y29sb3J7IyNiYzI2MTJ9eyMxfSIpO2xlKCJcXG1hcm9vbkEiLCJcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9Iik7bGUoIlxcbWFyb29uQiIsIlxcdGV4dGNvbG9yeyMjZmY5MmM2fXsjMX0iKTtsZSgiXFxtYXJvb25DIiwiXFx0ZXh0Y29sb3J7IyNlZDVmYTZ9eyMxfSIpO2xlKCJcXG1hcm9vbkQiLCJcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9Iik7bGUoIlxcbWFyb29uRSIsIlxcdGV4dGNvbG9yeyMjOWUwMzRlfXsjMX0iKTtsZSgiXFxwdXJwbGVBIiwiXFx0ZXh0Y29sb3J7IyNkZGQ3ZmZ9eyMxfSIpO2xlKCJcXHB1cnBsZUIiLCJcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9Iik7bGUoIlxccHVycGxlQyIsIlxcdGV4dGNvbG9yeyMjYWE4N2ZmfXsjMX0iKTtsZSgiXFxwdXJwbGVEIiwiXFx0ZXh0Y29sb3J7IyM3ODU0YWJ9eyMxfSIpO2xlKCJcXHB1cnBsZUUiLCJcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9Iik7bGUoIlxcbWludEEiLCJcXHRleHRjb2xvcnsjI2Y1ZjllOH17IzF9Iik7bGUoIlxcbWludEIiLCJcXHRleHRjb2xvcnsjI2VkZjJkZn17IzF9Iik7bGUoIlxcbWludEMiLCJcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9Iik7bGUoIlxcZ3JheUEiLCJcXHRleHRjb2xvcnsjI2Y2ZjdmN317IzF9Iik7bGUoIlxcZ3JheUIiLCJcXHRleHRjb2xvcnsjI2YwZjFmMn17IzF9Iik7bGUoIlxcZ3JheUMiLCJcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9Iik7bGUoIlxcZ3JheUQiLCJcXHRleHRjb2xvcnsjI2Q2ZDhkYX17IzF9Iik7bGUoIlxcZ3JheUUiLCJcXHRleHRjb2xvcnsjI2JhYmVjMn17IzF9Iik7bGUoIlxcZ3JheUYiLCJcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9Iik7bGUoIlxcZ3JheUciLCJcXHRleHRjb2xvcnsjIzYyNjU2OX17IzF9Iik7bGUoIlxcZ3JheUgiLCJcXHRleHRjb2xvcnsjIzNiM2U0MH17IzF9Iik7bGUoIlxcZ3JheUkiLCJcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9Iik7bGUoIlxca2FCbHVlIiwiXFx0ZXh0Y29sb3J7IyMzMTQ0NTN9eyMxfSIpO2xlKCJcXGthR3JlZW4iLCJcXHRleHRjb2xvcnsjIzcxQjMwN317IzF9Iik7UyQ9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfSxSQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYWNyb0V4cGFuZGVyIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9cix0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKGUpLHRoaXMubWFjcm9zPW5ldyBOQyhWNGUsci5tYWNyb3MpLHRoaXMubW9kZT1uLHRoaXMuc3RhY2s9W119ZmVlZChlKXt0aGlzLmxleGVyPW5ldyBBNChlLHRoaXMuc2V0dGluZ3MpfXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWV9YmVnaW5Hcm91cCgpe3RoaXMubWFjcm9zLmJlZ2luR3JvdXAoKX1lbmRHcm91cCgpe3RoaXMubWFjcm9zLmVuZEdyb3VwKCl9ZW5kR3JvdXBzKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXBzKCl9ZnV0dXJlKCl7cmV0dXJuIHRoaXMuc3RhY2subGVuZ3RoPT09MCYmdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSksdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1wb3BUb2tlbigpe3JldHVybiB0aGlzLmZ1dHVyZSgpLHRoaXMuc3RhY2sucG9wKCl9cHVzaFRva2VuKGUpe3RoaXMuc3RhY2sucHVzaChlKX1wdXNoVG9rZW5zKGUpe3RoaXMuc3RhY2sucHVzaCguLi5lKX1zY2FuQXJndW1lbnQoZSl7dmFyIHIsbixpO2lmKGUpe2lmKHRoaXMuY29uc3VtZVNwYWNlcygpLHRoaXMuZnV0dXJlKCkudGV4dCE9PSJbIilyZXR1cm4gbnVsbDtyPXRoaXMucG9wVG9rZW4oKSx7dG9rZW5zOmksZW5kOm59PXRoaXMuY29uc3VtZUFyZyhbIl0iXSl9ZWxzZSh7dG9rZW5zOmksc3RhcnQ6cixlbmQ6bn09dGhpcy5jb25zdW1lQXJnKCkpO3JldHVybiB0aGlzLnB1c2hUb2tlbihuZXcgUm8oIkVPRiIsbi5sb2MpKSx0aGlzLnB1c2hUb2tlbnMoaSksci5yYW5nZShuLCIiKX1jb25zdW1lU3BhY2VzKCl7Zm9yKDs7KXt2YXIgZT10aGlzLmZ1dHVyZSgpO2lmKGUudGV4dD09PSIgIil0aGlzLnN0YWNrLnBvcCgpO2Vsc2UgYnJlYWt9fWNvbnN1bWVBcmcoZSl7dmFyIHI9W10sbj1lJiZlLmxlbmd0aD4wO258fHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMuZnV0dXJlKCksYSxzPTAsbD0wO2Rve2lmKGE9dGhpcy5wb3BUb2tlbigpLHIucHVzaChhKSxhLnRleHQ9PT0ieyIpKytzO2Vsc2UgaWYoYS50ZXh0PT09In0iKXtpZigtLXMscz09PS0xKXRocm93IG5ldyBsdCgiRXh0cmEgfSIsYSl9ZWxzZSBpZihhLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgbHQoIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluIGEgbWFjcm8gYXJndW1lbnQsIGV4cGVjdGVkICciKyhlJiZuP2VbbF06In0iKSsiJyIsYSk7aWYoZSYmbilpZigocz09PTB8fHM9PT0xJiZlW2xdPT09InsiKSYmYS50ZXh0PT09ZVtsXSl7aWYoKytsLGw9PT1lLmxlbmd0aCl7ci5zcGxpY2UoLWwsbCk7YnJlYWt9fWVsc2UgbD0wfXdoaWxlKHMhPT0wfHxuKTtyZXR1cm4gaS50ZXh0PT09InsiJiZyW3IubGVuZ3RoLTFdLnRleHQ9PT0ifSImJihyLnBvcCgpLHIuc2hpZnQoKSksci5yZXZlcnNlKCkse3Rva2VuczpyLHN0YXJ0OmksZW5kOmF9fWNvbnN1bWVBcmdzKGUscil7aWYocil7aWYoci5sZW5ndGghPT1lKzEpdGhyb3cgbmV3IGx0KCJUaGUgbGVuZ3RoIG9mIGRlbGltaXRlcnMgZG9lc24ndCBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3MhIik7Zm9yKHZhciBuPXJbMF0saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLnBvcFRva2VuKCk7aWYobltpXSE9PWEudGV4dCl0aHJvdyBuZXcgbHQoIlVzZSBvZiB0aGUgbWFjcm8gZG9lc24ndCBtYXRjaCBpdHMgZGVmaW5pdGlvbiIsYSl9fWZvcih2YXIgcz1bXSxsPTA7bDxlO2wrKylzLnB1c2godGhpcy5jb25zdW1lQXJnKHImJnJbbCsxXSkudG9rZW5zKTtyZXR1cm4gc31jb3VudEV4cGFuc2lvbihlKXtpZih0aGlzLmV4cGFuc2lvbkNvdW50Kz1lLHRoaXMuZXhwYW5zaW9uQ291bnQ+dGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpdGhyb3cgbmV3IGx0KCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIG5lZWQgdG8gaW5jcmVhc2UgbWF4RXhwYW5kIHNldHRpbmciKX1leHBhbmRPbmNlKGUpe3ZhciByPXRoaXMucG9wVG9rZW4oKSxuPXIudGV4dCxpPXIubm9leHBhbmQ/bnVsbDp0aGlzLl9nZXRFeHBhbnNpb24obik7aWYoaT09bnVsbHx8ZSYmaS51bmV4cGFuZGFibGUpe2lmKGUmJmk9PW51bGwmJm5bMF09PT0iXFwiJiYhdGhpcy5pc0RlZmluZWQobikpdGhyb3cgbmV3IGx0KCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogIituKTtyZXR1cm4gdGhpcy5wdXNoVG9rZW4ociksITF9dGhpcy5jb3VudEV4cGFuc2lvbigxKTt2YXIgYT1pLnRva2VucyxzPXRoaXMuY29uc3VtZUFyZ3MoaS5udW1BcmdzLGkuZGVsaW1pdGVycyk7aWYoaS5udW1BcmdzKXthPWEuc2xpY2UoKTtmb3IodmFyIGw9YS5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHU9YVtsXTtpZih1LnRleHQ9PT0iIyIpe2lmKGw9PT0wKXRocm93IG5ldyBsdCgiSW5jb21wbGV0ZSBwbGFjZWhvbGRlciBhdCBlbmQgb2YgbWFjcm8gYm9keSIsdSk7aWYodT1hWy0tbF0sdS50ZXh0PT09IiMiKWEuc3BsaWNlKGwrMSwxKTtlbHNlIGlmKC9eWzEtOV0kLy50ZXN0KHUudGV4dCkpYS5zcGxpY2UobCwyLC4uLnNbK3UudGV4dC0xXSk7ZWxzZSB0aHJvdyBuZXcgbHQoIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlciIsdSl9fX1yZXR1cm4gdGhpcy5wdXNoVG9rZW5zKGEpLGEubGVuZ3RofWV4cGFuZEFmdGVyRnV0dXJlKCl7cmV0dXJuIHRoaXMuZXhwYW5kT25jZSgpLHRoaXMuZnV0dXJlKCl9ZXhwYW5kTmV4dFRva2VuKCl7Zm9yKDs7KWlmKHRoaXMuZXhwYW5kT25jZSgpPT09ITEpe3ZhciBlPXRoaXMuc3RhY2sucG9wKCk7cmV0dXJuIGUudHJlYXRBc1JlbGF4JiYoZS50ZXh0PSJcXHJlbGF4IiksZX10aHJvdyBuZXcgRXJyb3J9ZXhwYW5kTWFjcm8oZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKT90aGlzLmV4cGFuZFRva2VucyhbbmV3IFJvKGUpXSk6dm9pZCAwfWV4cGFuZFRva2VucyhlKXt2YXIgcj1bXSxuPXRoaXMuc3RhY2subGVuZ3RoO2Zvcih0aGlzLnB1c2hUb2tlbnMoZSk7dGhpcy5zdGFjay5sZW5ndGg+bjspaWYodGhpcy5leHBhbmRPbmNlKCEwKT09PSExKXt2YXIgaT10aGlzLnN0YWNrLnBvcCgpO2kudHJlYXRBc1JlbGF4JiYoaS5ub2V4cGFuZD0hMSxpLnRyZWF0QXNSZWxheD0hMSksci5wdXNoKGkpfXJldHVybiB0aGlzLmNvdW50RXhwYW5zaW9uKHIubGVuZ3RoKSxyfWV4cGFuZE1hY3JvQXNUZXh0KGUpe3ZhciByPXRoaXMuZXhwYW5kTWFjcm8oZSk7cmV0dXJuIHImJnIubWFwKG49Pm4udGV4dCkuam9pbigiIil9X2dldEV4cGFuc2lvbihlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7aWYocj09bnVsbClyZXR1cm4gcjtpZihlLmxlbmd0aD09PTEpe3ZhciBuPXRoaXMubGV4ZXIuY2F0Y29kZXNbZV07aWYobiE9bnVsbCYmbiE9PTEzKXJldHVybn12YXIgaT10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yKHRoaXMpOnI7aWYodHlwZW9mIGk9PSJzdHJpbmciKXt2YXIgYT0wO2lmKGkuaW5kZXhPZigiIyIpIT09LTEpZm9yKHZhciBzPWkucmVwbGFjZSgvIyMvZywiIik7cy5pbmRleE9mKCIjIisoYSsxKSkhPT0tMTspKythO2Zvcih2YXIgbD1uZXcgQTQoaSx0aGlzLnNldHRpbmdzKSx1PVtdLGg9bC5sZXgoKTtoLnRleHQhPT0iRU9GIjspdS5wdXNoKGgpLGg9bC5sZXgoKTt1LnJldmVyc2UoKTt2YXIgZj17dG9rZW5zOnUsbnVtQXJnczphfTtyZXR1cm4gZn1yZXR1cm4gaX1pc0RlZmluZWQoZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKXx8Z2guaGFzT3duUHJvcGVydHkoZSl8fENuLm1hdGguaGFzT3duUHJvcGVydHkoZSl8fENuLnRleHQuaGFzT3duUHJvcGVydHkoZSl8fFMkLmhhc093blByb3BlcnR5KGUpfWlzRXhwYW5kYWJsZShlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7cmV0dXJuIHIhPW51bGw/dHlwZW9mIHI9PSJzdHJpbmcifHx0eXBlb2Ygcj09ImZ1bmN0aW9uInx8IXIudW5leHBhbmRhYmxlOmdoLmhhc093blByb3BlcnR5KGUpJiYhZ2hbZV0ucHJpbWl0aXZlfX0sTkc9L15b4oKK4oKL4oKM4oKN4oKO4oKA4oKB4oKC4oKD4oKE4oKF4oKG4oKH4oKI4oKJ4oKQ4oKR4oKV4bWi4rG84oKW4oKX4oKY4oKZ4oKS4oKa4bWj4oKb4oKc4bWk4bWl4oKT4bWm4bWn4bWo4bWp4bWqXS8sdjQ9T2JqZWN0LmZyZWV6ZSh7Ilx1MjA4QSI6IisiLCJcdTIwOEIiOiItIiwiXHUyMDhDIjoiPSIsIlx1MjA4RCI6IigiLCJcdTIwOEUiOiIpIiwiXHUyMDgwIjoiMCIsIlx1MjA4MSI6IjEiLCJcdTIwODIiOiIyIiwiXHUyMDgzIjoiMyIsIlx1MjA4NCI6IjQiLCJcdTIwODUiOiI1IiwiXHUyMDg2IjoiNiIsIlx1MjA4NyI6IjciLCJcdTIwODgiOiI4IiwiXHUyMDg5IjoiOSIsIlx1MjA5MCI6ImEiLCJcdTIwOTEiOiJlIiwiXHUyMDk1IjoiaCIsIlx1MUQ2MiI6ImkiLCJcdTJDN0MiOiJqIiwiXHUyMDk2IjoiayIsIlx1MjA5NyI6ImwiLCJcdTIwOTgiOiJtIiwiXHUyMDk5IjoibiIsIlx1MjA5MiI6Im8iLCJcdTIwOUEiOiJwIiwiXHUxRDYzIjoiciIsIlx1MjA5QiI6InMiLCJcdTIwOUMiOiJ0IiwiXHUxRDY0IjoidSIsIlx1MUQ2NSI6InYiLCJcdTIwOTMiOiJ4IiwiXHUxRDY2IjoiXHUwM0IyIiwiXHUxRDY3IjoiXHUwM0IzIiwiXHUxRDY4IjoiXHUwM0MxIiwiXHUxRDY5IjoiXHUwM0Q1IiwiXHUxRDZBIjoiXHUwM0M3IiwiXHUyMDdBIjoiKyIsIlx1MjA3QiI6Ii0iLCJcdTIwN0MiOiI9IiwiXHUyMDdEIjoiKCIsIlx1MjA3RSI6IikiLCJcdTIwNzAiOiIwIiwiXHhCOSI6IjEiLCJceEIyIjoiMiIsIlx4QjMiOiIzIiwiXHUyMDc0IjoiNCIsIlx1MjA3NSI6IjUiLCJcdTIwNzYiOiI2IiwiXHUyMDc3IjoiNyIsIlx1MjA3OCI6IjgiLCJcdTIwNzkiOiI5IiwiXHUxRDJDIjoiQSIsIlx1MUQyRSI6IkIiLCJcdTFEMzAiOiJEIiwiXHUxRDMxIjoiRSIsIlx1MUQzMyI6IkciLCJcdTFEMzQiOiJIIiwiXHUxRDM1IjoiSSIsIlx1MUQzNiI6IkoiLCJcdTFEMzciOiJLIiwiXHUxRDM4IjoiTCIsIlx1MUQzOSI6Ik0iLCJcdTFEM0EiOiJOIiwiXHUxRDNDIjoiTyIsIlx1MUQzRSI6IlAiLCJcdTFEM0YiOiJSIiwiXHUxRDQwIjoiVCIsIlx1MUQ0MSI6IlUiLCJcdTJDN0QiOiJWIiwiXHUxRDQyIjoiVyIsIlx1MUQ0MyI6ImEiLCJcdTFENDciOiJiIiwiXHUxRDlDIjoiYyIsIlx1MUQ0OCI6ImQiLCJcdTFENDkiOiJlIiwiXHUxREEwIjoiZiIsIlx1MUQ0RCI6ImciLFx1MDJCMDoiaCIsIlx1MjA3MSI6ImkiLFx1MDJCMjoiaiIsIlx1MUQ0RiI6ImsiLFx1MDJFMToibCIsIlx1MUQ1MCI6Im0iLFx1MjA3RjoibiIsIlx1MUQ1MiI6Im8iLCJcdTFENTYiOiJwIixcdTAyQjM6InIiLFx1MDJFMjoicyIsIlx1MUQ1NyI6InQiLCJcdTFENTgiOiJ1IiwiXHUxRDVCIjoidiIsXHUwMkI3OiJ3IixcdTAyRTM6IngiLFx1MDJCODoieSIsIlx1MURCQiI6InoiLCJcdTFENUQiOiJcdTAzQjIiLCJcdTFENUUiOiJcdTAzQjMiLCJcdTFENUYiOiJcdTAzQjQiLCJcdTFENjAiOiJcdTAzRDUiLCJcdTFENjEiOiJcdTAzQzciLCJcdTFEQkYiOiJcdTAzQjgifSksYkM9eyJcdTAzMDEiOnt0ZXh0OiJcXCciLG1hdGg6IlxcYWN1dGUifSwiXHUwMzAwIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIlx1MDMwOCI6e3RleHQ6J1xcIicsbWF0aDoiXFxkZG90In0sIlx1MDMwMyI6e3RleHQ6IlxcfiIsbWF0aDoiXFx0aWxkZSJ9LCJcdTAzMDQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIlx1MDMwNiI6e3RleHQ6IlxcdSIsbWF0aDoiXFxicmV2ZSJ9LCJcdTAzMEMiOnt0ZXh0OiJcXHYiLG1hdGg6IlxcY2hlY2sifSwiXHUwMzAyIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCJcdTAzMDciOnt0ZXh0OiJcXC4iLG1hdGg6IlxcZG90In0sIlx1MDMwQSI6e3RleHQ6IlxcciIsbWF0aDoiXFxtYXRocmluZyJ9LCJcdTAzMEIiOnt0ZXh0OiJcXEgifSwiXHUwMzI3Ijp7dGV4dDoiXFxjIn19LFJHPXtcdTAwRTE6ImFcdTAzMDEiLFx1MDBFMDoiYVx1MDMwMCIsXHUwMEU0OiJhXHUwMzA4IixcdTAxREY6ImFcdTAzMDhcdTAzMDQiLFx1MDBFMzoiYVx1MDMwMyIsXHUwMTAxOiJhXHUwMzA0IixcdTAxMDM6ImFcdTAzMDYiLFx1MUVBRjoiYVx1MDMwNlx1MDMwMSIsXHUxRUIxOiJhXHUwMzA2XHUwMzAwIixcdTFFQjU6ImFcdTAzMDZcdTAzMDMiLFx1MDFDRToiYVx1MDMwQyIsXHUwMEUyOiJhXHUwMzAyIixcdTFFQTU6ImFcdTAzMDJcdTAzMDEiLFx1MUVBNzoiYVx1MDMwMlx1MDMwMCIsXHUxRUFCOiJhXHUwMzAyXHUwMzAzIixcdTAyMjc6ImFcdTAzMDciLFx1MDFFMToiYVx1MDMwN1x1MDMwNCIsXHUwMEU1OiJhXHUwMzBBIixcdTAxRkI6ImFcdTAzMEFcdTAzMDEiLFx1MUUwMzoiYlx1MDMwNyIsXHUwMTA3OiJjXHUwMzAxIixcdTFFMDk6ImNcdTAzMjdcdTAzMDEiLFx1MDEwRDoiY1x1MDMwQyIsXHUwMTA5OiJjXHUwMzAyIixcdTAxMEI6ImNcdTAzMDciLFx1MDBFNzoiY1x1MDMyNyIsXHUwMTBGOiJkXHUwMzBDIixcdTFFMEI6ImRcdTAzMDciLFx1MUUxMToiZFx1MDMyNyIsXHUwMEU5OiJlXHUwMzAxIixcdTAwRTg6ImVcdTAzMDAiLFx1MDBFQjoiZVx1MDMwOCIsXHUxRUJEOiJlXHUwMzAzIixcdTAxMTM6ImVcdTAzMDQiLFx1MUUxNzoiZVx1MDMwNFx1MDMwMSIsXHUxRTE1OiJlXHUwMzA0XHUwMzAwIixcdTAxMTU6ImVcdTAzMDYiLFx1MUUxRDoiZVx1MDMyN1x1MDMwNiIsXHUwMTFCOiJlXHUwMzBDIixcdTAwRUE6ImVcdTAzMDIiLFx1MUVCRjoiZVx1MDMwMlx1MDMwMSIsXHUxRUMxOiJlXHUwMzAyXHUwMzAwIixcdTFFQzU6ImVcdTAzMDJcdTAzMDMiLFx1MDExNzoiZVx1MDMwNyIsXHUwMjI5OiJlXHUwMzI3IixcdTFFMUY6ImZcdTAzMDciLFx1MDFGNToiZ1x1MDMwMSIsXHUxRTIxOiJnXHUwMzA0IixcdTAxMUY6ImdcdTAzMDYiLFx1MDFFNzoiZ1x1MDMwQyIsXHUwMTFEOiJnXHUwMzAyIixcdTAxMjE6ImdcdTAzMDciLFx1MDEyMzoiZ1x1MDMyNyIsXHUxRTI3OiJoXHUwMzA4IixcdTAyMUY6ImhcdTAzMEMiLFx1MDEyNToiaFx1MDMwMiIsXHUxRTIzOiJoXHUwMzA3IixcdTFFMjk6ImhcdTAzMjciLFx1MDBFRDoiaVx1MDMwMSIsXHUwMEVDOiJpXHUwMzAwIixcdTAwRUY6ImlcdTAzMDgiLFx1MUUyRjoiaVx1MDMwOFx1MDMwMSIsXHUwMTI5OiJpXHUwMzAzIixcdTAxMkI6ImlcdTAzMDQiLFx1MDEyRDoiaVx1MDMwNiIsXHUwMUQwOiJpXHUwMzBDIixcdTAwRUU6ImlcdTAzMDIiLFx1MDFGMDoialx1MDMwQyIsXHUwMTM1OiJqXHUwMzAyIixcdTFFMzE6ImtcdTAzMDEiLFx1MDFFOToia1x1MDMwQyIsXHUwMTM3OiJrXHUwMzI3IixcdTAxM0E6ImxcdTAzMDEiLFx1MDEzRToibFx1MDMwQyIsXHUwMTNDOiJsXHUwMzI3IixcdTFFM0Y6Im1cdTAzMDEiLFx1MUU0MToibVx1MDMwNyIsXHUwMTQ0OiJuXHUwMzAxIixcdTAxRjk6Im5cdTAzMDAiLFx1MDBGMToiblx1MDMwMyIsXHUwMTQ4OiJuXHUwMzBDIixcdTFFNDU6Im5cdTAzMDciLFx1MDE0Njoiblx1MDMyNyIsXHUwMEYzOiJvXHUwMzAxIixcdTAwRjI6Im9cdTAzMDAiLFx1MDBGNjoib1x1MDMwOCIsXHUwMjJCOiJvXHUwMzA4XHUwMzA0IixcdTAwRjU6Im9cdTAzMDMiLFx1MUU0RDoib1x1MDMwM1x1MDMwMSIsXHUxRTRGOiJvXHUwMzAzXHUwMzA4IixcdTAyMkQ6Im9cdTAzMDNcdTAzMDQiLFx1MDE0RDoib1x1MDMwNCIsXHUxRTUzOiJvXHUwMzA0XHUwMzAxIixcdTFFNTE6Im9cdTAzMDRcdTAzMDAiLFx1MDE0Rjoib1x1MDMwNiIsXHUwMUQyOiJvXHUwMzBDIixcdTAwRjQ6Im9cdTAzMDIiLFx1MUVEMToib1x1MDMwMlx1MDMwMSIsXHUxRUQzOiJvXHUwMzAyXHUwMzAwIixcdTFFRDc6Im9cdTAzMDJcdTAzMDMiLFx1MDIyRjoib1x1MDMwNyIsXHUwMjMxOiJvXHUwMzA3XHUwMzA0IixcdTAxNTE6Im9cdTAzMEIiLFx1MUU1NToicFx1MDMwMSIsXHUxRTU3OiJwXHUwMzA3IixcdTAxNTU6InJcdTAzMDEiLFx1MDE1OToiclx1MDMwQyIsXHUxRTU5OiJyXHUwMzA3IixcdTAxNTc6InJcdTAzMjciLFx1MDE1Qjoic1x1MDMwMSIsXHUxRTY1OiJzXHUwMzAxXHUwMzA3IixcdTAxNjE6InNcdTAzMEMiLFx1MUU2Nzoic1x1MDMwQ1x1MDMwNyIsXHUwMTVEOiJzXHUwMzAyIixcdTFFNjE6InNcdTAzMDciLFx1MDE1Rjoic1x1MDMyNyIsXHUxRTk3OiJ0XHUwMzA4IixcdTAxNjU6InRcdTAzMEMiLFx1MUU2QjoidFx1MDMwNyIsXHUwMTYzOiJ0XHUwMzI3IixcdTAwRkE6InVcdTAzMDEiLFx1MDBGOToidVx1MDMwMCIsXHUwMEZDOiJ1XHUwMzA4IixcdTAxRDg6InVcdTAzMDhcdTAzMDEiLFx1MDFEQzoidVx1MDMwOFx1MDMwMCIsXHUwMUQ2OiJ1XHUwMzA4XHUwMzA0IixcdTAxREE6InVcdTAzMDhcdTAzMEMiLFx1MDE2OToidVx1MDMwMyIsXHUxRTc5OiJ1XHUwMzAzXHUwMzAxIixcdTAxNkI6InVcdTAzMDQiLFx1MUU3QjoidVx1MDMwNFx1MDMwOCIsXHUwMTZEOiJ1XHUwMzA2IixcdTAxRDQ6InVcdTAzMEMiLFx1MDBGQjoidVx1MDMwMiIsXHUwMTZGOiJ1XHUwMzBBIixcdTAxNzE6InVcdTAzMEIiLFx1MUU3RDoidlx1MDMwMyIsXHUxRTgzOiJ3XHUwMzAxIixcdTFFODE6IndcdTAzMDAiLFx1MUU4NToid1x1MDMwOCIsXHUwMTc1OiJ3XHUwMzAyIixcdTFFODc6IndcdTAzMDciLFx1MUU5ODoid1x1MDMwQSIsXHUxRThEOiJ4XHUwMzA4IixcdTFFOEI6InhcdTAzMDciLFx1MDBGRDoieVx1MDMwMSIsXHUxRUYzOiJ5XHUwMzAwIixcdTAwRkY6InlcdTAzMDgiLFx1MUVGOToieVx1MDMwMyIsXHUwMjMzOiJ5XHUwMzA0IixcdTAxNzc6InlcdTAzMDIiLFx1MUU4RjoieVx1MDMwNyIsXHUxRTk5OiJ5XHUwMzBBIixcdTAxN0E6InpcdTAzMDEiLFx1MDE3RToielx1MDMwQyIsXHUxRTkxOiJ6XHUwMzAyIixcdTAxN0M6InpcdTAzMDciLFx1MDBDMToiQVx1MDMwMSIsXHUwMEMwOiJBXHUwMzAwIixcdTAwQzQ6IkFcdTAzMDgiLFx1MDFERToiQVx1MDMwOFx1MDMwNCIsXHUwMEMzOiJBXHUwMzAzIixcdTAxMDA6IkFcdTAzMDQiLFx1MDEwMjoiQVx1MDMwNiIsXHUxRUFFOiJBXHUwMzA2XHUwMzAxIixcdTFFQjA6IkFcdTAzMDZcdTAzMDAiLFx1MUVCNDoiQVx1MDMwNlx1MDMwMyIsXHUwMUNEOiJBXHUwMzBDIixcdTAwQzI6IkFcdTAzMDIiLFx1MUVBNDoiQVx1MDMwMlx1MDMwMSIsXHUxRUE2OiJBXHUwMzAyXHUwMzAwIixcdTFFQUE6IkFcdTAzMDJcdTAzMDMiLFx1MDIyNjoiQVx1MDMwNyIsXHUwMUUwOiJBXHUwMzA3XHUwMzA0IixcdTAwQzU6IkFcdTAzMEEiLFx1MDFGQToiQVx1MDMwQVx1MDMwMSIsXHUxRTAyOiJCXHUwMzA3IixcdTAxMDY6IkNcdTAzMDEiLFx1MUUwODoiQ1x1MDMyN1x1MDMwMSIsXHUwMTBDOiJDXHUwMzBDIixcdTAxMDg6IkNcdTAzMDIiLFx1MDEwQToiQ1x1MDMwNyIsXHUwMEM3OiJDXHUwMzI3IixcdTAxMEU6IkRcdTAzMEMiLFx1MUUwQToiRFx1MDMwNyIsXHUxRTEwOiJEXHUwMzI3IixcdTAwQzk6IkVcdTAzMDEiLFx1MDBDODoiRVx1MDMwMCIsXHUwMENCOiJFXHUwMzA4IixcdTFFQkM6IkVcdTAzMDMiLFx1MDExMjoiRVx1MDMwNCIsXHUxRTE2OiJFXHUwMzA0XHUwMzAxIixcdTFFMTQ6IkVcdTAzMDRcdTAzMDAiLFx1MDExNDoiRVx1MDMwNiIsXHUxRTFDOiJFXHUwMzI3XHUwMzA2IixcdTAxMUE6IkVcdTAzMEMiLFx1MDBDQToiRVx1MDMwMiIsXHUxRUJFOiJFXHUwMzAyXHUwMzAxIixcdTFFQzA6IkVcdTAzMDJcdTAzMDAiLFx1MUVDNDoiRVx1MDMwMlx1MDMwMyIsXHUwMTE2OiJFXHUwMzA3IixcdTAyMjg6IkVcdTAzMjciLFx1MUUxRToiRlx1MDMwNyIsXHUwMUY0OiJHXHUwMzAxIixcdTFFMjA6IkdcdTAzMDQiLFx1MDExRToiR1x1MDMwNiIsXHUwMUU2OiJHXHUwMzBDIixcdTAxMUM6IkdcdTAzMDIiLFx1MDEyMDoiR1x1MDMwNyIsXHUwMTIyOiJHXHUwMzI3IixcdTFFMjY6IkhcdTAzMDgiLFx1MDIxRToiSFx1MDMwQyIsXHUwMTI0OiJIXHUwMzAyIixcdTFFMjI6IkhcdTAzMDciLFx1MUUyODoiSFx1MDMyNyIsXHUwMENEOiJJXHUwMzAxIixcdTAwQ0M6IklcdTAzMDAiLFx1MDBDRjoiSVx1MDMwOCIsXHUxRTJFOiJJXHUwMzA4XHUwMzAxIixcdTAxMjg6IklcdTAzMDMiLFx1MDEyQToiSVx1MDMwNCIsXHUwMTJDOiJJXHUwMzA2IixcdTAxQ0Y6IklcdTAzMEMiLFx1MDBDRToiSVx1MDMwMiIsXHUwMTMwOiJJXHUwMzA3IixcdTAxMzQ6IkpcdTAzMDIiLFx1MUUzMDoiS1x1MDMwMSIsXHUwMUU4OiJLXHUwMzBDIixcdTAxMzY6IktcdTAzMjciLFx1MDEzOToiTFx1MDMwMSIsXHUwMTNEOiJMXHUwMzBDIixcdTAxM0I6IkxcdTAzMjciLFx1MUUzRToiTVx1MDMwMSIsXHUxRTQwOiJNXHUwMzA3IixcdTAxNDM6Ik5cdTAzMDEiLFx1MDFGODoiTlx1MDMwMCIsXHUwMEQxOiJOXHUwMzAzIixcdTAxNDc6Ik5cdTAzMEMiLFx1MUU0NDoiTlx1MDMwNyIsXHUwMTQ1OiJOXHUwMzI3IixcdTAwRDM6Ik9cdTAzMDEiLFx1MDBEMjoiT1x1MDMwMCIsXHUwMEQ2OiJPXHUwMzA4IixcdTAyMkE6Ik9cdTAzMDhcdTAzMDQiLFx1MDBENToiT1x1MDMwMyIsXHUxRTRDOiJPXHUwMzAzXHUwMzAxIixcdTFFNEU6Ik9cdTAzMDNcdTAzMDgiLFx1MDIyQzoiT1x1MDMwM1x1MDMwNCIsXHUwMTRDOiJPXHUwMzA0IixcdTFFNTI6Ik9cdTAzMDRcdTAzMDEiLFx1MUU1MDoiT1x1MDMwNFx1MDMwMCIsXHUwMTRFOiJPXHUwMzA2IixcdTAxRDE6Ik9cdTAzMEMiLFx1MDBENDoiT1x1MDMwMiIsXHUxRUQwOiJPXHUwMzAyXHUwMzAxIixcdTFFRDI6Ik9cdTAzMDJcdTAzMDAiLFx1MUVENjoiT1x1MDMwMlx1MDMwMyIsXHUwMjJFOiJPXHUwMzA3IixcdTAyMzA6Ik9cdTAzMDdcdTAzMDQiLFx1MDE1MDoiT1x1MDMwQiIsXHUxRTU0OiJQXHUwMzAxIixcdTFFNTY6IlBcdTAzMDciLFx1MDE1NDoiUlx1MDMwMSIsXHUwMTU4OiJSXHUwMzBDIixcdTFFNTg6IlJcdTAzMDciLFx1MDE1NjoiUlx1MDMyNyIsXHUwMTVBOiJTXHUwMzAxIixcdTFFNjQ6IlNcdTAzMDFcdTAzMDciLFx1MDE2MDoiU1x1MDMwQyIsXHUxRTY2OiJTXHUwMzBDXHUwMzA3IixcdTAxNUM6IlNcdTAzMDIiLFx1MUU2MDoiU1x1MDMwNyIsXHUwMTVFOiJTXHUwMzI3IixcdTAxNjQ6IlRcdTAzMEMiLFx1MUU2QToiVFx1MDMwNyIsXHUwMTYyOiJUXHUwMzI3IixcdTAwREE6IlVcdTAzMDEiLFx1MDBEOToiVVx1MDMwMCIsXHUwMERDOiJVXHUwMzA4IixcdTAxRDc6IlVcdTAzMDhcdTAzMDEiLFx1MDFEQjoiVVx1MDMwOFx1MDMwMCIsXHUwMUQ1OiJVXHUwMzA4XHUwMzA0IixcdTAxRDk6IlVcdTAzMDhcdTAzMEMiLFx1MDE2ODoiVVx1MDMwMyIsXHUxRTc4OiJVXHUwMzAzXHUwMzAxIixcdTAxNkE6IlVcdTAzMDQiLFx1MUU3QToiVVx1MDMwNFx1MDMwOCIsXHUwMTZDOiJVXHUwMzA2IixcdTAxRDM6IlVcdTAzMEMiLFx1MDBEQjoiVVx1MDMwMiIsXHUwMTZFOiJVXHUwMzBBIixcdTAxNzA6IlVcdTAzMEIiLFx1MUU3QzoiVlx1MDMwMyIsXHUxRTgyOiJXXHUwMzAxIixcdTFFODA6IldcdTAzMDAiLFx1MUU4NDoiV1x1MDMwOCIsXHUwMTc0OiJXXHUwMzAyIixcdTFFODY6IldcdTAzMDciLFx1MUU4QzoiWFx1MDMwOCIsXHUxRThBOiJYXHUwMzA3IixcdTAwREQ6IllcdTAzMDEiLFx1MUVGMjoiWVx1MDMwMCIsXHUwMTc4OiJZXHUwMzA4IixcdTFFRjg6IllcdTAzMDMiLFx1MDIzMjoiWVx1MDMwNCIsXHUwMTc2OiJZXHUwMzAyIixcdTFFOEU6IllcdTAzMDciLFx1MDE3OToiWlx1MDMwMSIsXHUwMTdEOiJaXHUwMzBDIixcdTFFOTA6IlpcdTAzMDIiLFx1MDE3QjoiWlx1MDMwNyIsXHUwM0FDOiJcdTAzQjFcdTAzMDEiLFx1MUY3MDoiXHUwM0IxXHUwMzAwIixcdTFGQjE6Ilx1MDNCMVx1MDMwNCIsXHUxRkIwOiJcdTAzQjFcdTAzMDYiLFx1MDNBRDoiXHUwM0I1XHUwMzAxIixcdTFGNzI6Ilx1MDNCNVx1MDMwMCIsXHUwM0FFOiJcdTAzQjdcdTAzMDEiLFx1MUY3NDoiXHUwM0I3XHUwMzAwIixcdTAzQUY6Ilx1MDNCOVx1MDMwMSIsXHUxRjc2OiJcdTAzQjlcdTAzMDAiLFx1MDNDQToiXHUwM0I5XHUwMzA4IixcdTAzOTA6Ilx1MDNCOVx1MDMwOFx1MDMwMSIsXHUxRkQyOiJcdTAzQjlcdTAzMDhcdTAzMDAiLFx1MUZEMToiXHUwM0I5XHUwMzA0IixcdTFGRDA6Ilx1MDNCOVx1MDMwNiIsXHUwM0NDOiJcdTAzQkZcdTAzMDEiLFx1MUY3ODoiXHUwM0JGXHUwMzAwIixcdTAzQ0Q6Ilx1MDNDNVx1MDMwMSIsXHUxRjdBOiJcdTAzQzVcdTAzMDAiLFx1MDNDQjoiXHUwM0M1XHUwMzA4IixcdTAzQjA6Ilx1MDNDNVx1MDMwOFx1MDMwMSIsXHUxRkUyOiJcdTAzQzVcdTAzMDhcdTAzMDAiLFx1MUZFMToiXHUwM0M1XHUwMzA0IixcdTFGRTA6Ilx1MDNDNVx1MDMwNiIsXHUwM0NFOiJcdTAzQzlcdTAzMDEiLFx1MUY3QzoiXHUwM0M5XHUwMzAwIixcdTAzOEU6Ilx1MDNBNVx1MDMwMSIsXHUxRkVBOiJcdTAzQTVcdTAzMDAiLFx1MDNBQjoiXHUwM0E1XHUwMzA4IixcdTFGRTk6Ilx1MDNBNVx1MDMwNCIsXHUxRkU4OiJcdTAzQTVcdTAzMDYiLFx1MDM4RjoiXHUwM0E5XHUwMzAxIixcdTFGRkE6Ilx1MDNBOVx1MDMwMCJ9LF80PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1vZGU9dm9pZCAwLHRoaXMuZ3VsbGV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLmxlZnRyaWdodERlcHRoPXZvaWQgMCx0aGlzLm5leHRUb2tlbj12b2lkIDAsdGhpcy5tb2RlPSJtYXRoIix0aGlzLmd1bGxldD1uZXcgUkMoZSxyLHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz1yLHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3QoZSxyKXtpZihyPT09dm9pZCAwJiYocj0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1lKXRocm93IG5ldyBsdCgiRXhwZWN0ZWQgJyIrZSsiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3ImJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWUsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShlKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgZT10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLGV9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2UoZSl7dmFyIHI9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBSbygifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKGUpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj1yLG59cGFyc2VFeHByZXNzaW9uKGUscil7Zm9yKHZhciBuPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk9dGhpcy5mZXRjaCgpO2lmKHQuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YoaS50ZXh0KSE9PS0xfHxyJiZpLnRleHQ9PT1yfHxlJiZnaFtpLnRleHRdJiZnaFtpLnRleHRdLmluZml4KWJyZWFrO3ZhciBhPXRoaXMucGFyc2VBdG9tKHIpO2lmKGEpe2lmKGEudHlwZT09PSJpbnRlcm5hbCIpY29udGludWV9ZWxzZSBicmVhaztuLnB1c2goYSl9cmV0dXJuIHRoaXMubW9kZT09PSJ0ZXh0IiYmdGhpcy5mb3JtTGlnYXR1cmVzKG4pLHRoaXMuaGFuZGxlSW5maXhOb2RlcyhuKX1oYW5kbGVJbmZpeE5vZGVzKGUpe2Zvcih2YXIgcj0tMSxuLGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLnR5cGU9PT0iaW5maXgiKXtpZihyIT09LTEpdGhyb3cgbmV3IGx0KCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXAiLGVbaV0udG9rZW4pO3I9aSxuPWVbaV0ucmVwbGFjZVdpdGh9aWYociE9PS0xJiZuKXt2YXIgYSxzLGw9ZS5zbGljZSgwLHIpLHU9ZS5zbGljZShyKzEpO2wubGVuZ3RoPT09MSYmbFswXS50eXBlPT09Im9yZGdyb3VwIj9hPWxbMF06YT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6bH0sdS5sZW5ndGg9PT0xJiZ1WzBdLnR5cGU9PT0ib3JkZ3JvdXAiP3M9dVswXTpzPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTp1fTt2YXIgaDtyZXR1cm4gbj09PSJcXFxcYWJvdmVmcmFjIj9oPXRoaXMuY2FsbEZ1bmN0aW9uKG4sW2EsZVtyXSxzXSxbXSk6aD10aGlzLmNhbGxGdW5jdGlvbihuLFthLHNdLFtdKSxbaF19ZWxzZSByZXR1cm4gZX1oYW5kbGVTdXBTdWJzY3JpcHQoZSl7dmFyIHI9dGhpcy5mZXRjaCgpLG49ci50ZXh0O3RoaXMuY29uc3VtZSgpLHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMucGFyc2VHcm91cChlKTtpZighaSl0aHJvdyBuZXcgbHQoIkV4cGVjdGVkIGdyb3VwIGFmdGVyICciK24rIiciLHIpO3JldHVybiBpfWZvcm1hdFVuc3VwcG9ydGVkQ21kKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspci5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmVbbl19KTt2YXIgaT17dHlwZToidGV4dCIsbW9kZTp0aGlzLm1vZGUsYm9keTpyfSxhPXt0eXBlOiJjb2xvciIsbW9kZTp0aGlzLm1vZGUsY29sb3I6dGhpcy5zZXR0aW5ncy5lcnJvckNvbG9yLGJvZHk6W2ldfTtyZXR1cm4gYX1wYXJzZUF0b20oZSl7dmFyIHI9dGhpcy5wYXJzZUdyb3VwKCJhdG9tIixlKTtpZih0aGlzLm1vZGU9PT0idGV4dCIpcmV0dXJuIHI7Zm9yKHZhciBuLGk7Oyl7dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGE9dGhpcy5mZXRjaCgpO2lmKGEudGV4dD09PSJcXGxpbWl0cyJ8fGEudGV4dD09PSJcXG5vbGltaXRzIil7aWYociYmci50eXBlPT09Im9wIil7dmFyIHM9YS50ZXh0PT09IlxcbGltaXRzIjtyLmxpbWl0cz1zLHIuYWx3YXlzSGFuZGxlU3VwU3ViPSEwfWVsc2UgaWYociYmci50eXBlPT09Im9wZXJhdG9ybmFtZSIpci5hbHdheXNIYW5kbGVTdXBTdWImJihyLmxpbWl0cz1hLnRleHQ9PT0iXFxsaW1pdHMiKTtlbHNlIHRocm93IG5ldyBsdCgiTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yIixhKTt0aGlzLmNvbnN1bWUoKX1lbHNlIGlmKGEudGV4dD09PSJeIil7aWYobil0aHJvdyBuZXcgbHQoIkRvdWJsZSBzdXBlcnNjcmlwdCIsYSk7bj10aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3VwZXJzY3JpcHQiKX1lbHNlIGlmKGEudGV4dD09PSJfIil7aWYoaSl0aHJvdyBuZXcgbHQoIkRvdWJsZSBzdWJzY3JpcHQiLGEpO2k9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1YnNjcmlwdCIpfWVsc2UgaWYoYS50ZXh0PT09IiciKXtpZihuKXRocm93IG5ldyBsdCgiRG91YmxlIHN1cGVyc2NyaXB0IixhKTt2YXIgbD17dHlwZToidGV4dG9yZCIsbW9kZTp0aGlzLm1vZGUsdGV4dDoiXFxwcmltZSJ9LHU9W2xdO2Zvcih0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSInIjspdS5wdXNoKGwpLHRoaXMuY29uc3VtZSgpO3RoaXMuZmV0Y2goKS50ZXh0PT09Il4iJiZ1LnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0IikpLG49e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5OnV9fWVsc2UgaWYodjRbYS50ZXh0XSl7dmFyIGg9TkcudGVzdChhLnRleHQpLGY9W107Zm9yKGYucHVzaChuZXcgUm8odjRbYS50ZXh0XSkpLHRoaXMuY29uc3VtZSgpOzspe3ZhciBkPXRoaXMuZmV0Y2goKS50ZXh0O2lmKCF2NFtkXXx8TkcudGVzdChkKSE9PWgpYnJlYWs7Zi51bnNoaWZ0KG5ldyBSbyh2NFtkXSkpLHRoaXMuY29uc3VtZSgpfXZhciBwPXRoaXMuc3VicGFyc2UoZik7aD9pPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfTpuPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfX1lbHNlIGJyZWFrfXJldHVybiBufHxpP3t0eXBlOiJzdXBzdWIiLG1vZGU6dGhpcy5tb2RlLGJhc2U6cixzdXA6bixzdWI6aX06cn1wYXJzZUZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE9Z2hbaV07aWYoIWEpcmV0dXJuIG51bGw7aWYodGhpcy5jb25zdW1lKCksciYmciE9PSJhdG9tIiYmIWEuYWxsb3dlZEluQXJndW1lbnQpdGhyb3cgbmV3IGx0KCJHb3QgZnVuY3Rpb24gJyIraSsiJyB3aXRoIG5vIGFyZ3VtZW50cyIrKHI/IiBhcyAiK3I6IiIpLG4pO2lmKHRoaXMubW9kZT09PSJ0ZXh0IiYmIWEuYWxsb3dlZEluVGV4dCl0aHJvdyBuZXcgbHQoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIHRleHQgbW9kZSIsbik7aWYodGhpcy5tb2RlPT09Im1hdGgiJiZhLmFsbG93ZWRJbk1hdGg9PT0hMSl0aHJvdyBuZXcgbHQoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIG1hdGggbW9kZSIsbik7dmFye2FyZ3M6cyxvcHRBcmdzOmx9PXRoaXMucGFyc2VBcmd1bWVudHMoaSxhKTtyZXR1cm4gdGhpcy5jYWxsRnVuY3Rpb24oaSxzLGwsbixlKX1jYWxsRnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz17ZnVuY05hbWU6ZSxwYXJzZXI6dGhpcyx0b2tlbjppLGJyZWFrT25Ub2tlblRleHQ6YX0sbD1naFtlXTtpZihsJiZsLmhhbmRsZXIpcmV0dXJuIGwuaGFuZGxlcihzLHIsbik7dGhyb3cgbmV3IGx0KCJObyBmdW5jdGlvbiBoYW5kbGVyIGZvciAiK2UpfXBhcnNlQXJndW1lbnRzKGUscil7dmFyIG49ci5udW1BcmdzK3IubnVtT3B0aW9uYWxBcmdzO2lmKG49PT0wKXJldHVybnthcmdzOltdLG9wdEFyZ3M6W119O2Zvcih2YXIgaT1bXSxhPVtdLHM9MDtzPG47cysrKXt2YXIgbD1yLmFyZ1R5cGVzJiZyLmFyZ1R5cGVzW3NdLHU9czxyLm51bU9wdGlvbmFsQXJnczsoci5wcmltaXRpdmUmJmw9PW51bGx8fHIudHlwZT09PSJzcXJ0IiYmcz09PTEmJmFbMF09PW51bGwpJiYobD0icHJpbWl0aXZlIik7dmFyIGg9dGhpcy5wYXJzZUdyb3VwT2ZUeXBlKCJhcmd1bWVudCB0byAnIitlKyInIixsLHUpO2lmKHUpYS5wdXNoKGgpO2Vsc2UgaWYoaCE9bnVsbClpLnB1c2goaCk7ZWxzZSB0aHJvdyBuZXcgbHQoIk51bGwgYXJndW1lbnQsIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpfXJldHVybnthcmdzOmksb3B0QXJnczphfX1wYXJzZUdyb3VwT2ZUeXBlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG4pO2Nhc2Uic2l6ZSI6cmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAobik7Y2FzZSJ1cmwiOnJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAobik7Y2FzZSJtYXRoIjpjYXNlInRleHQiOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChuLHIpO2Nhc2UiaGJveCI6e3ZhciBpPXRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4sInRleHQiKTtyZXR1cm4gaSE9bnVsbD97dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsYm9keTpbaV0sc3R5bGU6InRleHQifTpudWxsfWNhc2UicmF3Ijp7dmFyIGE9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJyYXciLG4pO3JldHVybiBhIT1udWxsP3t0eXBlOiJyYXciLG1vZGU6InRleHQiLHN0cmluZzphLnRleHR9Om51bGx9Y2FzZSJwcmltaXRpdmUiOntpZihuKXRocm93IG5ldyBsdCgiQSBwcmltaXRpdmUgYXJndW1lbnQgY2Fubm90IGJlIG9wdGlvbmFsIik7dmFyIHM9dGhpcy5wYXJzZUdyb3VwKGUpO2lmKHM9PW51bGwpdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCBncm91cCBhcyAiK2UsdGhpcy5mZXRjaCgpKTtyZXR1cm4gc31jYXNlIm9yaWdpbmFsIjpjYXNlIG51bGw6Y2FzZSB2b2lkIDA6cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4pO2RlZmF1bHQ6dGhyb3cgbmV3IGx0KCJVbmtub3duIGdyb3VwIHR5cGUgYXMgIitlLHRoaXMuZmV0Y2goKSl9fWNvbnN1bWVTcGFjZXMoKXtmb3IoO3RoaXMuZmV0Y2goKS50ZXh0PT09IiAiOyl0aGlzLmNvbnN1bWUoKX1wYXJzZVN0cmluZ0dyb3VwKGUscil7dmFyIG49dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHIpO2lmKG49PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBpPSIiLGE7KGE9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiI7KWkrPWEudGV4dCx0aGlzLmNvbnN1bWUoKTtyZXR1cm4gdGhpcy5jb25zdW1lKCksbi50ZXh0PWksbn1wYXJzZVJlZ2V4R3JvdXAoZSxyKXtmb3IodmFyIG49dGhpcy5mZXRjaCgpLGk9bixhPSIiLHM7KHM9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiImJmUudGVzdChhK3MudGV4dCk7KWk9cyxhKz1pLnRleHQsdGhpcy5jb25zdW1lKCk7aWYoYT09PSIiKXRocm93IG5ldyBsdCgiSW52YWxpZCAiK3IrIjogJyIrbi50ZXh0KyInIixuKTtyZXR1cm4gbi5yYW5nZShpLGEpfXBhcnNlQ29sb3JHcm91cChlKXt2YXIgcj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoImNvbG9yIixlKTtpZihyPT1udWxsKXJldHVybiBudWxsO3ZhciBuPS9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyLnRleHQpO2lmKCFuKXRocm93IG5ldyBsdCgiSW52YWxpZCBjb2xvcjogJyIrci50ZXh0KyInIixyKTt2YXIgaT1uWzBdO3JldHVybi9eWzAtOWEtZl17Nn0kL2kudGVzdChpKSYmKGk9IiMiK2kpLHt0eXBlOiJjb2xvci10b2tlbiIsbW9kZTp0aGlzLm1vZGUsY29sb3I6aX19cGFyc2VTaXplR3JvdXAoZSl7dmFyIHIsbj0hMTtpZih0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCksIWUmJnRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI/cj10aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxkK3xcZCtcLlxkKnxcLlxkKikgKlthLXpdezAsMn0gKiQvLCJzaXplIik6cj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInNpemUiLGUpLCFyKXJldHVybiBudWxsOyFlJiZyLnRleHQubGVuZ3RoPT09MCYmKHIudGV4dD0iMHB0IixuPSEwKTt2YXIgaT0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKHIudGV4dCk7aWYoIWkpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIHNpemU6ICciK3IudGV4dCsiJyIscik7dmFyIGE9e251bWJlcjorKGlbMV0raVsyXSksdW5pdDppWzNdfTtpZighT0coYSkpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIHVuaXQ6ICciK2EudW5pdCsiJyIscik7cmV0dXJue3R5cGU6InNpemUiLG1vZGU6dGhpcy5tb2RlLHZhbHVlOmEsaXNCbGFuazpufX1wYXJzZVVybEdyb3VwKGUpe3RoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDEzKSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMik7dmFyIHI9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJ1cmwiLGUpO2lmKHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDE0KSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMykscj09bnVsbClyZXR1cm4gbnVsbDt2YXIgbj1yLnRleHQucmVwbGFjZSgvXFwoWyMkJSZ+X157fV0pL2csIiQxIik7cmV0dXJue3R5cGU6InVybCIsbW9kZTp0aGlzLm1vZGUsdXJsOm59fXBhcnNlQXJndW1lbnRHcm91cChlLHIpe3ZhciBuPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChlKTtpZihuPT1udWxsKXJldHVybiBudWxsO3ZhciBpPXRoaXMubW9kZTtyJiZ0aGlzLnN3aXRjaE1vZGUociksdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBhPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLCJFT0YiKTt0aGlzLmV4cGVjdCgiRU9GIiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTt2YXIgcz17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpuLmxvYyxib2R5OmF9O3JldHVybiByJiZ0aGlzLnN3aXRjaE1vZGUoaSksc31wYXJzZUdyb3VwKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE7aWYoaT09PSJ7Inx8aT09PSJcXGJlZ2luZ3JvdXAiKXt0aGlzLmNvbnN1bWUoKTt2YXIgcz1pPT09InsiPyJ9IjoiXFxlbmRncm91cCI7dGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBsPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLHMpLHU9dGhpcy5mZXRjaCgpO3RoaXMuZXhwZWN0KHMpLHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCksYT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpKcy5yYW5nZShuLHUpLGJvZHk6bCxzZW1pc2ltcGxlOmk9PT0iXFxiZWdpbmdyb3VwInx8dm9pZCAwfX1lbHNlIGlmKGE9dGhpcy5wYXJzZUZ1bmN0aW9uKHIsZSl8fHRoaXMucGFyc2VTeW1ib2woKSxhPT1udWxsJiZpWzBdPT09IlxcIiYmIVMkLmhhc093blByb3BlcnR5KGkpKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgbHQoIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2ksbik7YT10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGkpLHRoaXMuY29uc3VtZSgpfXJldHVybiBhfWZvcm1MaWdhdHVyZXMoZSl7Zm9yKHZhciByPWUubGVuZ3RoLTEsbj0wO248cjsrK24pe3ZhciBpPWVbbl0sYT1pLnRleHQ7YT09PSItIiYmZVtuKzFdLnRleHQ9PT0iLSImJihuKzE8ciYmZVtuKzJdLnRleHQ9PT0iLSI/KGUuc3BsaWNlKG4sMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOkpzLnJhbmdlKGksZVtuKzJdKSx0ZXh0OiItLS0ifSksci09Mik6KGUuc3BsaWNlKG4sMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOkpzLnJhbmdlKGksZVtuKzFdKSx0ZXh0OiItLSJ9KSxyLT0xKSksKGE9PT0iJyJ8fGE9PT0iYCIpJiZlW24rMV0udGV4dD09PWEmJihlLnNwbGljZShuLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpKcy5yYW5nZShpLGVbbisxXSksdGV4dDphK2F9KSxyLT0xKX19cGFyc2VTeW1ib2woKXt2YXIgZT10aGlzLmZldGNoKCkscj1lLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3Qocikpe3RoaXMuY29uc3VtZSgpO3ZhciBuPXIuc2xpY2UoNSksaT1uLmNoYXJBdCgwKT09PSIqIjtpZihpJiYobj1uLnNsaWNlKDEpKSxuLmxlbmd0aDwyfHxuLmNoYXJBdCgwKSE9PW4uc2xpY2UoLTEpKXRocm93IG5ldyBsdChgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIG49bi5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpuLHN0YXI6aX19UkcuaGFzT3duUHJvcGVydHkoclswXSkmJiFDblt0aGlzLm1vZGVdW3JbMF1dJiYodGhpcy5zZXR0aW5ncy5zdHJpY3QmJnRoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInVuaWNvZGVUZXh0SW5NYXRoTW9kZSIsJ0FjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSkscj1SR1tyWzBdXStyLnNsaWNlKDEpKTt2YXIgYT1HNGUuZXhlYyhyKTthJiYocj1yLnN1YnN0cmluZygwLGEuaW5kZXgpLHI9PT0iaSI/cj0iXHUwMTMxIjpyPT09ImoiJiYocj0iXHUwMjM3IikpO3ZhciBzO2lmKENuW3RoaXMubW9kZV1bcl0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJkVDLmluZGV4T2Yocik+PTAmJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSk7dmFyIGw9Q25bdGhpcy5tb2RlXVtyXS5ncm91cCx1PUpzLnJhbmdlKGUpLGg7aWYoTWJlLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj1sO2g9e3R5cGU6ImF0b20iLG1vZGU6dGhpcy5tb2RlLGZhbWlseTpmLGxvYzp1LHRleHQ6cn19ZWxzZSBoPXt0eXBlOmwsbW9kZTp0aGlzLm1vZGUsbG9jOnUsdGV4dDpyfTtzPWh9ZWxzZSBpZihyLmNoYXJDb2RlQXQoMCk+PTEyOCl0aGlzLnNldHRpbmdzLnN0cmljdCYmKElHKHIuY2hhckNvZGVBdCgwKSk/dGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKTp0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5rbm93blN5bWJvbCIsJ1VucmVjb2duaXplZCBVbmljb2RlIGNoYXJhY3RlciAiJytyWzBdKyciJysoIiAoIityLmNoYXJDb2RlQXQoMCkrIikiKSxlKSkscz17dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOkpzLnJhbmdlKGUpLHRleHQ6cn07ZWxzZSByZXR1cm4gbnVsbDtpZih0aGlzLmNvbnN1bWUoKSxhKWZvcih2YXIgZD0wO2Q8YVswXS5sZW5ndGg7ZCsrKXt2YXIgcD1hWzBdW2RdO2lmKCFiQ1twXSl0aHJvdyBuZXcgbHQoIlVua25vd24gYWNjZW50ICcgIitwKyInIixlKTt2YXIgbT1iQ1twXVt0aGlzLm1vZGVdfHxiQ1twXS50ZXh0O2lmKCFtKXRocm93IG5ldyBsdCgiQWNjZW50ICIrcCsiIHVuc3VwcG9ydGVkIGluICIrdGhpcy5tb2RlKyIgbW9kZSIsZSk7cz17dHlwZToiYWNjZW50Iixtb2RlOnRoaXMubW9kZSxsb2M6SnMucmFuZ2UoZSksbGFiZWw6bSxpc1N0cmV0Y2h5OiExLGlzU2hpZnR5OiEwLGJhc2U6c319cmV0dXJuIHN9fTtfNC5lbmRPZkV4cHJlc3Npb249WyJ9IiwiXFxlbmRncm91cCIsIlxcZW5kIiwiXFxyaWdodCIsIiYiXTtqQz1vKGZ1bmN0aW9uKGUscil7aWYoISh0eXBlb2YgZT09InN0cmluZyJ8fGUgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkthVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uIik7dmFyIG49bmV3IF80KGUscik7ZGVsZXRlIG4uZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGRmQHRhZyJdO3ZhciBpPW4ucGFyc2UoKTtpZihkZWxldGUgbi5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY3VycmVudEBjb2xvciJdLGRlbGV0ZSBuLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxjb2xvciJdLG4uZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpe2lmKCFyLmRpc3BsYXlNb2RlKXRocm93IG5ldyBsdCgiXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9ucyIpO2k9W3t0eXBlOiJ0YWciLG1vZGU6InRleHQiLGJvZHk6aSx0YWc6bi5zdWJwYXJzZShbbmV3IFJvKCJcXGRmQHRhZyIpXSl9XX1yZXR1cm4gaX0sInBhcnNlVHJlZSIpLEMkPW8oZnVuY3Rpb24oZSxyLG4pe3IudGV4dENvbnRlbnQ9IiI7dmFyIGk9S0MoZSxuKS50b05vZGUoKTtyLmFwcGVuZENoaWxkKGkpfSwicmVuZGVyIik7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY29tcGF0TW9kZSE9PSJDU1MxQ29tcGF0IiYmKHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIE1ha2Ugc3VyZSB5b3VyIHdlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS4iKSxDJD1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IGx0KCJLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIil9LCJyZW5kZXIiKSk7VTRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1LQyhlLHIpLnRvTWFya3VwKCk7cmV0dXJuIG59LCJyZW5kZXJUb1N0cmluZyIpLEg0ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IGR5KHIpO3JldHVybiBqQyhlLG4pfSwiZ2VuZXJhdGVQYXJzZVRyZWUiKSxBJD1vKGZ1bmN0aW9uKGUscixuKXtpZihuLnRocm93T25FcnJvcnx8IShlIGluc3RhbmNlb2YgbHQpKXRocm93IGU7dmFyIGk9RmUubWFrZVNwYW4oWyJrYXRleC1lcnJvciJdLFtuZXcgRXMocildKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInRpdGxlIixlLnRvU3RyaW5nKCkpLGkuc2V0QXR0cmlidXRlKCJzdHlsZSIsImNvbG9yOiIrbi5lcnJvckNvbG9yKSxpfSwicmVuZGVyRXJyb3IiKSxLQz1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IGR5KHIpO3RyeXt2YXIgaT1qQyhlLG4pO3JldHVybiB0NGUoaSxlLG4pfWNhdGNoKGEpe3JldHVybiBBJChhLGUsbil9fSwicmVuZGVyVG9Eb21UcmVlIiksVzRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1uZXcgZHkocik7dHJ5e3ZhciBpPWpDKGUsbik7cmV0dXJuIHI0ZShpLGUsbil9Y2F0Y2goYSl7cmV0dXJuIEEkKGEsZSxuKX19LCJyZW5kZXJUb0hUTUxUcmVlIiksWTRlPXt2ZXJzaW9uOiIwLjE2LjExIixyZW5kZXI6QyQscmVuZGVyVG9TdHJpbmc6VTRlLFBhcnNlRXJyb3I6bHQsU0VUVElOR1NfU0NIRU1BOng0LF9fcGFyc2U6SDRlLF9fcmVuZGVyVG9Eb21UcmVlOktDLF9fcmVuZGVyVG9IVE1MVHJlZTpXNGUsX19zZXRGb250TWV0cmljczpBYmUsX19kZWZpbmVTeW1ib2w6JCxfX2RlZmluZUZ1bmN0aW9uOlN0LF9fZGVmaW5lTWFjcm86bGUsX19kb21UcmVlOntTcGFuOm5kLEFuY2hvcjpteSxTeW1ib2xOb2RlOkVzLFN2Z05vZGU6dmwsUGF0aE5vZGU6Y2MsTGluZU5vZGU6Z3l9fX0pO2Z1bmN0aW9uIGo0ZSgpe2xldCB0PSJkYXRhLXRlbXAtaHJlZi10YXJnZXQiO0FwLmRlZmF1bHQuYWRkSG9vaygiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIixlPT57ZS50YWdOYW1lPT09IkEiJiZlLmhhc0F0dHJpYnV0ZSgidGFyZ2V0IikmJmUuc2V0QXR0cmlidXRlKHQsZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPz8iIil9KSxBcC5kZWZhdWx0LmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixlPT57ZS50YWdOYW1lPT09IkEiJiZlLmhhc0F0dHJpYnV0ZSh0KSYmKGUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGUuZ2V0QXR0cmlidXRlKHQpPz8iIiksZS5yZW1vdmVBdHRyaWJ1dGUodCksZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPT09Il9ibGFuayImJmUuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciIpKX0pfXZhciBBcCxhZCxxNGUsWDRlLFIkLEQkLGtyLEs0ZSxRNGUsWjRlLEo0ZSxNJCxlM2UseHIsdDNlLHIzZSx5dSxRQyxuM2UsaTNlLE4kLFpDLHlpLHNkLGJoLHFlLGZyPU0oKCk9PnsidXNlIHN0cmljdCI7QXA9SmkobEMoKSwxKSxhZD0vPGJyXHMqXC8/Pi9naSxxNGU9byh0PT50P00kKHQpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLCJnZXRSb3dzIiksWDRlPSgoKT0+e2xldCB0PSExO3JldHVybigpPT57dHx8KGo0ZSgpLHQ9ITApfX0pKCk7byhqNGUsInNldHVwRG9tcHVyaWZ5SG9va3MiKTtSJD1vKHQ9PihYNGUoKSxBcC5kZWZhdWx0LnNhbml0aXplKHQpKSwicmVtb3ZlU2NyaXB0IiksRCQ9bygodCxlKT0+e2lmKGUuZmxvd2NoYXJ0Py5odG1sTGFiZWxzIT09ITEpe2xldCByPWUuc2VjdXJpdHlMZXZlbDtyPT09ImFudGlzY3JpcHQifHxyPT09InN0cmljdCI/dD1SJCh0KTpyIT09Imxvb3NlIiYmKHQ9TSQodCksdD10LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLHQ9dC5yZXBsYWNlKC89L2csIiZlcXVhbHM7IiksdD1KNGUodCkpfXJldHVybiB0fSwic2FuaXRpemVNb3JlIiksa3I9bygodCxlKT0+dCYmKGUuZG9tcHVyaWZ5Q29uZmlnP3Q9QXAuZGVmYXVsdC5zYW5pdGl6ZShEJCh0LGUpLGUuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOnQ9QXAuZGVmYXVsdC5zYW5pdGl6ZShEJCh0LGUpLHtGT1JCSURfVEFHUzpbInN0eWxlIl19KS50b1N0cmluZygpLHQpLCJzYW5pdGl6ZVRleHQiKSxLNGU9bygodCxlKT0+dHlwZW9mIHQ9PSJzdHJpbmciP2tyKHQsZSk6dC5mbGF0KCkubWFwKHI9PmtyKHIsZSkpLCJzYW5pdGl6ZVRleHRPckFycmF5IiksUTRlPW8odD0+YWQudGVzdCh0KSwiaGFzQnJlYWtzIiksWjRlPW8odD0+dC5zcGxpdChhZCksInNwbGl0QnJlYWtzIiksSjRlPW8odD0+dC5yZXBsYWNlKC8jYnIjL2csIjxici8+IiksInBsYWNlaG9sZGVyVG9CcmVhayIpLE0kPW8odD0+dC5yZXBsYWNlKGFkLCIjYnIjIiksImJyZWFrVG9QbGFjZWhvbGRlciIpLGUzZT1vKHQ9PntsZXQgZT0iIjtyZXR1cm4gdCYmKGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsZT1lLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGU9ZS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksZX0sImdldFVybCIpLHhyPW8odD0+ISh0PT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyh0KS50cmltKCkudG9Mb3dlckNhc2UoKSkpLCJldmFsdWF0ZSIpLHQzZT1vKGZ1bmN0aW9uKC4uLnQpe2xldCBlPXQuZmlsdGVyKHI9PiFpc05hTihyKSk7cmV0dXJuIE1hdGgubWF4KC4uLmUpfSwiZ2V0TWF4IikscjNlPW8oZnVuY3Rpb24oLi4udCl7bGV0IGU9dC5maWx0ZXIocj0+IWlzTmFOKHIpKTtyZXR1cm4gTWF0aC5taW4oLi4uZSl9LCJnZXRNaW4iKSx5dT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuc3BsaXQoLygsKS8pLHI9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07aWYoaT09PSIsIiYmbj4wJiZuKzE8ZS5sZW5ndGgpe2xldCBhPWVbbi0xXSxzPWVbbisxXTtuM2UoYSxzKSYmKGk9YSsiLCIrcyxuKyssci5wb3AoKSl9ci5wdXNoKGkzZShpKSl9cmV0dXJuIHIuam9pbigiIil9LCJwYXJzZUdlbmVyaWNUeXBlcyIpLFFDPW8oKHQsZSk9Pk1hdGgubWF4KDAsdC5zcGxpdChlKS5sZW5ndGgtMSksImNvdW50T2NjdXJyZW5jZSIpLG4zZT1vKCh0LGUpPT57bGV0IHI9UUModCwifiIpLG49UUMoZSwifiIpO3JldHVybiByPT09MSYmbj09PTF9LCJzaG91bGRDb21iaW5lU2V0cyIpLGkzZT1vKHQ9PntsZXQgZT1RQyh0LCJ+Iikscj0hMTtpZihlPD0xKXJldHVybiB0O2UlMiE9PTAmJnQuc3RhcnRzV2l0aCgifiIpJiYodD10LnN1YnN0cmluZygxKSxyPSEwKTtsZXQgbj1bLi4udF0saT1uLmluZGV4T2YoIn4iKSxhPW4ubGFzdEluZGV4T2YoIn4iKTtmb3IoO2khPT0tMSYmYSE9PS0xJiZpIT09YTspbltpXT0iPCIsblthXT0iPiIsaT1uLmluZGV4T2YoIn4iKSxhPW4ubGFzdEluZGV4T2YoIn4iKTtyZXR1cm4gciYmbi51bnNoaWZ0KCJ+Iiksbi5qb2luKCIiKX0sInByb2Nlc3NTZXQiKSxOJD1vKCgpPT53aW5kb3cuTWF0aE1MRWxlbWVudCE9PXZvaWQgMCwiaXNNYXRoTUxTdXBwb3J0ZWQiKSxaQz0vXCRcJCguKilcJFwkL2cseWk9byh0PT4odC5tYXRjaChaQyk/Lmxlbmd0aD8/MCk+MCwiaGFzS2F0ZXgiKSxzZD1vKGFzeW5jKHQsZSk9Pnt0PWF3YWl0IGJoKHQsZSk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5pbm5lckhUTUw9dCxyLmlkPSJrYXRleC10ZW1wIixyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPSIwIixkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/Lmluc2VydEFkamFjZW50RWxlbWVudCgiYmVmb3JlZW5kIixyKTtsZXQgaT17d2lkdGg6ci5jbGllbnRXaWR0aCxoZWlnaHQ6ci5jbGllbnRIZWlnaHR9O3JldHVybiByLnJlbW92ZSgpLGl9LCJjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zIiksYmg9byhhc3luYyh0LGUpPT57aWYoIXlpKHQpKXJldHVybiB0O2lmKCEoTiQoKXx8ZS5sZWdhY3lNYXRoTUx8fGUuZm9yY2VMZWdhY3lNYXRoTUwpKXJldHVybiB0LnJlcGxhY2UoWkMsIk1hdGhNTCBpcyB1bnN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiIpO2xldHtkZWZhdWx0OnJ9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihMJCgpLF8kKSksbj1lLmZvcmNlTGVnYWN5TWF0aE1MfHwhTiQoKSYmZS5sZWdhY3lNYXRoTUw/Imh0bWxBbmRNYXRobWwiOiJtYXRobWwiO3JldHVybiB0LnNwbGl0KGFkKS5tYXAoaT0+eWkoaSk/YDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+JHtpfTwvZGl2PmA6YDxkaXY+JHtpfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoWkMsKGksYSk9PnIucmVuZGVyVG9TdHJpbmcoYSx7dGhyb3dPbkVycm9yOiEwLGRpc3BsYXlNb2RlOiEwLG91dHB1dDpufSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9LCJyZW5kZXJLYXRleCIpLHFlPXtnZXRSb3dzOnE0ZSxzYW5pdGl6ZVRleHQ6a3Isc2FuaXRpemVUZXh0T3JBcnJheTpLNGUsaGFzQnJlYWtzOlE0ZSxzcGxpdEJyZWFrczpaNGUsbGluZUJyZWFrUmVnZXg6YWQscmVtb3ZlU2NyaXB0OlIkLGdldFVybDplM2UsZXZhbHVhdGU6eHIsZ2V0TWF4OnQzZSxnZXRNaW46cjNlfX0pO3ZhciBhM2UsczNlLFpyLElvLGFpPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTthM2U9byhmdW5jdGlvbih0LGUpe2ZvcihsZXQgciBvZiBlKXQuYXR0cihyWzBdLHJbMV0pfSwiZDNBdHRycyIpLHMzZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1uZXcgTWFwO3JldHVybiByPyhuLnNldCgid2lkdGgiLCIxMDAlIiksbi5zZXQoInN0eWxlIixgbWF4LXdpZHRoOiAke2V9cHg7YCkpOihuLnNldCgiaGVpZ2h0Iix0KSxuLnNldCgid2lkdGgiLGUpKSxufSwiY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzIiksWnI9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1zM2UoZSxyLG4pO2EzZSh0LGkpfSwiY29uZmlndXJlU3ZnU2l6ZSIpLElvPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ZS5ub2RlKCkuZ2V0QkJveCgpLGE9aS53aWR0aCxzPWkuaGVpZ2h0O1kuaW5mbyhgU1ZHIGJvdW5kczogJHthfXgke3N9YCxpKTtsZXQgbD0wLHU9MDtZLmluZm8oYEdyYXBoIGJvdW5kczogJHtsfXgke3V9YCx0KSxsPWErcioyLHU9cytyKjIsWS5pbmZvKGBDYWxjdWxhdGVkIGJvdW5kczogJHtsfXgke3V9YCksWnIoZSx1LGwsbik7bGV0IGg9YCR7aS54LXJ9ICR7aS55LXJ9ICR7aS53aWR0aCsyKnJ9ICR7aS5oZWlnaHQrMipyfWA7ZS5hdHRyKCJ2aWV3Qm94IixoKX0sInNldHVwR3JhcGhWaWV3Ym94Iil9KTt2YXIgTzQsbzNlLEkkLE8kLEpDPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPND17fSxvM2U9bygodCxlLHIpPT57bGV0IG49IiI7cmV0dXJuIHQgaW4gTzQmJk80W3RdP249TzRbdF0ocik6WS53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHt0fWApLGAgJiB7CiAgICBmb250LWZhbWlseTogJHtyLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke3IuZm9udFNpemV9OwogICAgZmlsbDogJHtyLnRleHRDb2xvcn0KICB9CgogIC8qIENsYXNzZXMgY29tbW9uIGZvciBtdWx0aXBsZSBkaWFncmFtcyAqLwoKICAmIC5lcnJvci1pY29uIHsKICAgIGZpbGw6ICR7ci5lcnJvckJrZ0NvbG9yfTsKICB9CiAgJiAuZXJyb3ItdGV4dCB7CiAgICBmaWxsOiAke3IuZXJyb3JUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiAke3IuZXJyb3JUZXh0Q29sb3J9OwogIH0KCiAgJiAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy10aGljayB7CiAgICBzdHJva2Utd2lkdGg6IDMuNXB4CiAgfQogICYgLmVkZ2UtcGF0dGVybi1zb2xpZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiAwOwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy1pbnZpc2libGUgewogICAgc3Ryb2tlLXdpZHRoOiAwOwogICAgZmlsbDogbm9uZTsKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDM7CiAgfQogIC5lZGdlLXBhdHRlcm4tZG90dGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQoKICAmIC5tYXJrZXIgewogICAgZmlsbDogJHtyLmxpbmVDb2xvcn07CiAgICBzdHJva2U6ICR7ci5saW5lQ29sb3J9OwogIH0KICAmIC5tYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke3IubGluZUNvbG9yfTsKICB9CgogICYgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke3IuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7ci5mb250U2l6ZX07CiAgfQogICAmIHAgewogICAgbWFyZ2luOiAwCiAgIH0KCiAgJHtufQoKICAke2V9CmB9LCJnZXRTdHlsZXMiKSxJJD1vKCh0LGUpPT57ZSE9PXZvaWQgMCYmKE80W3RdPWUpfSwiYWRkU3R5bGVzRm9yRGlhZ3JhbSIpLE8kPW8zZX0pO3ZhciB4eT17fTt2cih4eSx7Y2xlYXI6KCk9PkxyLGdldEFjY0Rlc2NyaXB0aW9uOigpPT56cixnZXRBY2NUaXRsZTooKT0+QnIsZ2V0RGlhZ3JhbVRpdGxlOigpPT5KcixzZXRBY2NEZXNjcmlwdGlvbjooKT0+RnIsc2V0QWNjVGl0bGU6KCk9Pk1yLHNldERpYWdyYW1UaXRsZTooKT0+Y259KTt2YXIgZTcsdDcscjcsbjcsTHIsTXIsQnIsRnIsenIsY24sSnIsQWk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO1phKCk7ZTc9IiIsdDc9IiIscjc9IiIsbjc9byh0PT5rcih0LENyKCkpLCJzYW5pdGl6ZVRleHQiKSxMcj1vKCgpPT57ZTc9IiIscjc9IiIsdDc9IiJ9LCJjbGVhciIpLE1yPW8odD0+e2U3PW43KHQpLnJlcGxhY2UoL15ccysvZywiIil9LCJzZXRBY2NUaXRsZSIpLEJyPW8oKCk9PmU3LCJnZXRBY2NUaXRsZSIpLEZyPW8odD0+e3I3PW43KHQpLnJlcGxhY2UoL1xuXHMrL2csYApgKX0sInNldEFjY0Rlc2NyaXB0aW9uIiksenI9bygoKT0+cjcsImdldEFjY0Rlc2NyaXB0aW9uIiksY249byh0PT57dDc9bjcodCl9LCJzZXREaWFncmFtVGl0bGUiKSxKcj1vKCgpPT50NywiZ2V0RGlhZ3JhbVRpdGxlIil9KTt2YXIgUCQsbDNlLHBlLGE3LEI0LHM3LG83LGMzZSxQNCxvZCxieSxpNyxWdD1NKCgpPT57InVzZSBzdHJpY3QiO1pmKCk7dXQoKTtaYSgpO2ZyKCk7YWkoKTtKQygpO0FpKCk7UCQ9WSxsM2U9SjEscGU9Q3IsYTc9bzQsQjQ9cGgsczc9byh0PT5rcih0LHBlKCkpLCJzYW5pdGl6ZVRleHQiKSxvNz1JbyxjM2U9bygoKT0+eHksImdldENvbW1vbkRiIiksUDQ9e30sb2Q9bygodCxlLHIpPT57UDRbdF0mJlAkLndhcm4oYERpYWdyYW0gd2l0aCBpZCAke3R9IGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCksUDRbdF09ZSxyJiZWUyh0LHIpLEkkKHQsZS5zdHlsZXMpLGUuaW5qZWN0VXRpbHM/LihQJCxsM2UscGUsczcsbzcsYzNlKCksKCk9Pnt9KX0sInJlZ2lzdGVyRGlhZ3JhbSIpLGJ5PW8odD0+e2lmKHQgaW4gUDQpcmV0dXJuIFA0W3RdO3Rocm93IG5ldyBpNyh0KX0sImdldERpYWdyYW0iKSxpNz1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkRpYWdyYW1Ob3RGb3VuZEVycm9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoYERpYWdyYW0gJHtlfSBub3QgZm91bmQuYCl9fX0pO3ZhciBibCx3aCx0cyx4bCxkYyx3eSxsNyxjNyxGNCx6NCxCJCx1M2UsaDNlLGYzZSxkM2UscDNlLG0zZSxnM2UseTNlLHYzZSx4M2UsYjNlLHczZSxUM2UsazNlLEUzZSxTM2UsQzNlLEYkLEEzZSxfM2UseiQsTDNlLEQzZSxOM2UsUjNlLFRoLE0zZSxJM2UsTzNlLFAzZSxCM2UsVHksdTc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7QWkoKTtibD1bXSx3aD1bIiJdLHRzPSJnbG9iYWwiLHhsPSIiLGRjPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSx3eT1bXSxsNz0iIixjNz0hMSxGND00LHo0PTIsdTNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQiR9LCJnZXRDNFR5cGUiKSxoM2U9byhmdW5jdGlvbih0KXtCJD1rcih0LHBlKCkpfSwic2V0QzRUeXBlIiksZjNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUpe2lmKHQ9PW51bGx8fGU9PT12b2lkIDB8fGU9PT1udWxsfHxyPT09dm9pZCAwfHxyPT09bnVsbHx8bj09PXZvaWQgMHx8bj09PW51bGwpcmV0dXJuO2xldCBoPXt9LGY9d3kuZmluZChkPT5kLmZyb209PT1lJiZkLnRvPT09cik7aWYoZj9oPWY6d3kucHVzaChoKSxoLnR5cGU9dCxoLmZyb209ZSxoLnRvPXIsaC5sYWJlbD17dGV4dDpufSxpPT1udWxsKWgudGVjaG49e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhpKVswXTtoW2RdPXt0ZXh0OnB9fWVsc2UgaC50ZWNobj17dGV4dDppfTtpZihhPT1udWxsKWguZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhhKVswXTtoW2RdPXt0ZXh0OnB9fWVsc2UgaC5kZXNjcj17dGV4dDphfTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKHMpWzBdO2hbZF09cH1lbHNlIGguc3ByaXRlPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhsKVswXTtoW2RdPXB9ZWxzZSBoLnRhZ3M9bDtpZih0eXBlb2YgdT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKHUpWzBdO2hbZF09cH1lbHNlIGgubGluaz11O2gud3JhcD1UaCgpfSwiYWRkUmVsIiksZDNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7aWYoZT09PW51bGx8fHI9PT1udWxsKXJldHVybjtsZXQgbD17fSx1PWJsLmZpbmQoaD0+aC5hbGlhcz09PWUpO2lmKHUmJmU9PT11LmFsaWFzP2w9dToobC5hbGlhcz1lLGJsLnB1c2gobCkpLHI9PW51bGw/bC5sYWJlbD17dGV4dDoiIn06bC5sYWJlbD17dGV4dDpyfSxuPT1udWxsKWwuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbaCxmXT1PYmplY3QuZW50cmllcyhuKVswXTtsW2hdPXt0ZXh0OmZ9fWVsc2UgbC5kZXNjcj17dGV4dDpufTtpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2xbaF09Zn1lbHNlIGwuc3ByaXRlPWk7aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbaCxmXT1PYmplY3QuZW50cmllcyhhKVswXTtsW2hdPWZ9ZWxzZSBsLnRhZ3M9YTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKHMpWzBdO2xbaF09Zn1lbHNlIGwubGluaz1zO2wudHlwZUM0U2hhcGU9e3RleHQ6dH0sbC5wYXJlbnRCb3VuZGFyeT10cyxsLndyYXA9VGgoKX0sImFkZFBlcnNvbk9yU3lzdGVtIikscDNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCB1PXt9LGg9YmwuZmluZChmPT5mLmFsaWFzPT09ZSk7aWYoaCYmZT09PWguYWxpYXM/dT1oOih1LmFsaWFzPWUsYmwucHVzaCh1KSkscj09bnVsbD91LmxhYmVsPXt0ZXh0OiIifTp1LmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpdS50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKG4pWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LnRlY2huPXt0ZXh0Om59O2lmKGk9PW51bGwpdS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGkpWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LmRlc2NyPXt0ZXh0Oml9O2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoYSlbMF07dVtmXT1kfWVsc2UgdS5zcHJpdGU9YTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS53cmFwPVRoKCksdS50eXBlQzRTaGFwZT17dGV4dDp0fSx1LnBhcmVudEJvdW5kYXJ5PXRzfSwiYWRkQ29udGFpbmVyIiksbTNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCB1PXt9LGg9YmwuZmluZChmPT5mLmFsaWFzPT09ZSk7aWYoaCYmZT09PWguYWxpYXM/dT1oOih1LmFsaWFzPWUsYmwucHVzaCh1KSkscj09bnVsbD91LmxhYmVsPXt0ZXh0OiIifTp1LmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpdS50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKG4pWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LnRlY2huPXt0ZXh0Om59O2lmKGk9PW51bGwpdS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGkpWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LmRlc2NyPXt0ZXh0Oml9O2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoYSlbMF07dVtmXT1kfWVsc2UgdS5zcHJpdGU9YTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS53cmFwPVRoKCksdS50eXBlQzRTaGFwZT17dGV4dDp0fSx1LnBhcmVudEJvdW5kYXJ5PXRzfSwiYWRkQ29tcG9uZW50IiksZzNlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZih0PT09bnVsbHx8ZT09PW51bGwpcmV0dXJuO2xldCBhPXt9LHM9ZGMuZmluZChsPT5sLmFsaWFzPT09dCk7aWYocyYmdD09PXMuYWxpYXM/YT1zOihhLmFsaWFzPXQsZGMucHVzaChhKSksZT09bnVsbD9hLmxhYmVsPXt0ZXh0OiIifTphLmxhYmVsPXt0ZXh0OmV9LHI9PW51bGwpYS50eXBlPXt0ZXh0OiJzeXN0ZW0ifTtlbHNlIGlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMocilbMF07YVtsXT17dGV4dDp1fX1lbHNlIGEudHlwZT17dGV4dDpyfTtpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2FbbF09dX1lbHNlIGEudGFncz1uO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMoaSlbMF07YVtsXT11fWVsc2UgYS5saW5rPWk7YS5wYXJlbnRCb3VuZGFyeT10cyxhLndyYXA9VGgoKSx4bD10cyx0cz10LHdoLnB1c2goeGwpfSwiYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSIpLHkzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodD09PW51bGx8fGU9PT1udWxsKXJldHVybjtsZXQgYT17fSxzPWRjLmZpbmQobD0+bC5hbGlhcz09PXQpO2lmKHMmJnQ9PT1zLmFsaWFzP2E9czooYS5hbGlhcz10LGRjLnB1c2goYSkpLGU9PW51bGw/YS5sYWJlbD17dGV4dDoiIn06YS5sYWJlbD17dGV4dDplfSxyPT1udWxsKWEudHlwZT17dGV4dDoiY29udGFpbmVyIn07ZWxzZSBpZih0eXBlb2Ygcj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKHIpWzBdO2FbbF09e3RleHQ6dX19ZWxzZSBhLnR5cGU9e3RleHQ6cn07aWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhuKVswXTthW2xdPXV9ZWxzZSBhLnRhZ3M9bjtpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2FbbF09dX1lbHNlIGEubGluaz1pO2EucGFyZW50Qm91bmRhcnk9dHMsYS53cmFwPVRoKCkseGw9dHMsdHM9dCx3aC5wdXNoKHhsKX0sImFkZENvbnRhaW5lckJvdW5kYXJ5IiksdjNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCB1PXt9LGg9ZGMuZmluZChmPT5mLmFsaWFzPT09ZSk7aWYoaCYmZT09PWguYWxpYXM/dT1oOih1LmFsaWFzPWUsZGMucHVzaCh1KSkscj09bnVsbD91LmxhYmVsPXt0ZXh0OiIifTp1LmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpdS50eXBlPXt0ZXh0OiJub2RlIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKG4pWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LnR5cGU9e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhzKVswXTt1W2ZdPWR9ZWxzZSB1LnRhZ3M9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGwpWzBdO3VbZl09ZH1lbHNlIHUubGluaz1sO3Uubm9kZVR5cGU9dCx1LnBhcmVudEJvdW5kYXJ5PXRzLHUud3JhcD1UaCgpLHhsPXRzLHRzPWUsd2gucHVzaCh4bCl9LCJhZGREZXBsb3ltZW50Tm9kZSIpLHgzZT1vKGZ1bmN0aW9uKCl7dHM9eGwsd2gucG9wKCkseGw9d2gucG9wKCksd2gucHVzaCh4bCl9LCJwb3BCb3VuZGFyeVBhcnNlU3RhY2siKSxiM2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSxoLGYpe2xldCBkPWJsLmZpbmQocD0+cC5hbGlhcz09PWUpO2lmKCEoZD09PXZvaWQgMCYmKGQ9ZGMuZmluZChwPT5wLmFsaWFzPT09ZSksZD09PXZvaWQgMCkpKXtpZihyIT1udWxsKWlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMocilbMF07ZFtwXT1tfWVsc2UgZC5iZ0NvbG9yPXI7aWYobiE9bnVsbClpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKG4pWzBdO2RbcF09bX1lbHNlIGQuZm9udENvbG9yPW47aWYoaSE9bnVsbClpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGkpWzBdO2RbcF09bX1lbHNlIGQuYm9yZGVyQ29sb3I9aTtpZihhIT1udWxsKWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoYSlbMF07ZFtwXT1tfWVsc2UgZC5zaGFkb3dpbmc9YTtpZihzIT1udWxsKWlmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMocylbMF07ZFtwXT1tfWVsc2UgZC5zaGFwZT1zO2lmKGwhPW51bGwpaWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhsKVswXTtkW3BdPW19ZWxzZSBkLnNwcml0ZT1sO2lmKHUhPW51bGwpaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyh1KVswXTtkW3BdPW19ZWxzZSBkLnRlY2huPXU7aWYoaCE9bnVsbClpZih0eXBlb2YgaD09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGgpWzBdO2RbcF09bX1lbHNlIGQubGVnZW5kVGV4dD1oO2lmKGYhPW51bGwpaWYodHlwZW9mIGY9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhmKVswXTtkW3BdPW19ZWxzZSBkLmxlZ2VuZFNwcml0ZT1mfX0sInVwZGF0ZUVsU3R5bGUiKSx3M2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD13eS5maW5kKHU9PnUuZnJvbT09PWUmJnUudG89PT1yKTtpZihsIT09dm9pZCAwKXtpZihuIT1udWxsKWlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMobilbMF07bFt1XT1ofWVsc2UgbC50ZXh0Q29sb3I9bjtpZihpIT1udWxsKWlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMoaSlbMF07bFt1XT1ofWVsc2UgbC5saW5lQ29sb3I9aTtpZihhIT1udWxsKWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMoYSlbMF07bFt1XT1wYXJzZUludChoKX1lbHNlIGwub2Zmc2V0WD1wYXJzZUludChhKTtpZihzIT1udWxsKWlmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMocylbMF07bFt1XT1wYXJzZUludChoKX1lbHNlIGwub2Zmc2V0WT1wYXJzZUludChzKX19LCJ1cGRhdGVSZWxTdHlsZSIpLFQzZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1GNCxpPXo0O2lmKHR5cGVvZiBlPT0ib2JqZWN0Iil7bGV0IGE9T2JqZWN0LnZhbHVlcyhlKVswXTtuPXBhcnNlSW50KGEpfWVsc2Ugbj1wYXJzZUludChlKTtpZih0eXBlb2Ygcj09Im9iamVjdCIpe2xldCBhPU9iamVjdC52YWx1ZXMocilbMF07aT1wYXJzZUludChhKX1lbHNlIGk9cGFyc2VJbnQocik7bj49MSYmKEY0PW4pLGk+PTEmJih6ND1pKX0sInVwZGF0ZUxheW91dENvbmZpZyIpLGszZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEY0fSwiZ2V0QzRTaGFwZUluUm93IiksRTNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gejR9LCJnZXRDNEJvdW5kYXJ5SW5Sb3ciKSxTM2U9byhmdW5jdGlvbigpe3JldHVybiB0c30sImdldEN1cnJlbnRCb3VuZGFyeVBhcnNlIiksQzNlPW8oZnVuY3Rpb24oKXtyZXR1cm4geGx9LCJnZXRQYXJlbnRCb3VuZGFyeVBhcnNlIiksRiQ9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9ibDpibC5maWx0ZXIoZT0+ZS5wYXJlbnRCb3VuZGFyeT09PXQpfSwiZ2V0QzRTaGFwZUFycmF5IiksQTNlPW8oZnVuY3Rpb24odCl7cmV0dXJuIGJsLmZpbmQoZT0+ZS5hbGlhcz09PXQpfSwiZ2V0QzRTaGFwZSIpLF8zZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyhGJCh0KSl9LCJnZXRDNFNoYXBlS2V5cyIpLHokPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/ZGM6ZGMuZmlsdGVyKGU9PmUucGFyZW50Qm91bmRhcnk9PT10KX0sImdldEJvdW5kYXJpZXMiKSxMM2U9eiQsRDNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gd3l9LCJnZXRSZWxzIiksTjNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gbDd9LCJnZXRUaXRsZSIpLFIzZT1vKGZ1bmN0aW9uKHQpe2M3PXR9LCJzZXRXcmFwIiksVGg9byhmdW5jdGlvbigpe3JldHVybiBjN30sImF1dG9XcmFwIiksTTNlPW8oZnVuY3Rpb24oKXtibD1bXSxkYz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0seGw9IiIsdHM9Imdsb2JhbCIsd2g9WyIiXSx3eT1bXSx3aD1bIiJdLGw3PSIiLGM3PSExLEY0PTQsejQ9Mn0sImNsZWFyIiksSTNlPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sTzNlPXtGSUxMRUQ6MCxPUEVOOjF9LFAzZT17TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sQjNlPW8oZnVuY3Rpb24odCl7bDc9a3IodCxwZSgpKX0sInNldFRpdGxlIiksVHk9e2FkZFBlcnNvbk9yU3lzdGVtOmQzZSxhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5OmczZSxhZGRDb250YWluZXI6cDNlLGFkZENvbnRhaW5lckJvdW5kYXJ5OnkzZSxhZGRDb21wb25lbnQ6bTNlLGFkZERlcGxveW1lbnROb2RlOnYzZSxwb3BCb3VuZGFyeVBhcnNlU3RhY2s6eDNlLGFkZFJlbDpmM2UsdXBkYXRlRWxTdHlsZTpiM2UsdXBkYXRlUmVsU3R5bGU6dzNlLHVwZGF0ZUxheW91dENvbmZpZzpUM2UsYXV0b1dyYXA6VGgsc2V0V3JhcDpSM2UsZ2V0QzRTaGFwZUFycmF5OkYkLGdldEM0U2hhcGU6QTNlLGdldEM0U2hhcGVLZXlzOl8zZSxnZXRCb3VuZGFyaWVzOnokLGdldEJvdW5kYXJ5czpMM2UsZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2U6UzNlLGdldFBhcmVudEJvdW5kYXJ5UGFyc2U6QzNlLGdldFJlbHM6RDNlLGdldFRpdGxlOk4zZSxnZXRDNFR5cGU6dTNlLGdldEM0U2hhcGVJblJvdzprM2UsZ2V0QzRCb3VuZGFyeUluUm93OkUzZSxzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcixnZXRDb25maWc6bygoKT0+cGUoKS5jNCwiZ2V0Q29uZmlnIiksY2xlYXI6TTNlLExJTkVUWVBFOkkzZSxBUlJPV1RZUEU6TzNlLFBMQUNFTUVOVDpQM2Usc2V0VGl0bGU6QjNlLHNldEM0VHlwZTpoM2V9fSk7ZnVuY3Rpb24gbGQodCxlKXtyZXR1cm4gdD09bnVsbHx8ZT09bnVsbD9OYU46dDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGg3PU0oKCk9PnsidXNlIHN0cmljdCI7byhsZCwiYXNjZW5kaW5nIil9KTtmdW5jdGlvbiBmNyh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsP05hTjplPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgRyQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGY3LCJkZXNjZW5kaW5nIil9KTtmdW5jdGlvbiBjZCh0KXtsZXQgZSxyLG47dC5sZW5ndGghPT0yPyhlPWxkLHI9bygobCx1KT0+bGQodChsKSx1KSwiY29tcGFyZTIiKSxuPW8oKGwsdSk9PnQobCktdSwiZGVsdGEiKSk6KGU9dD09PWxkfHx0PT09Zjc/dDpGM2Uscj10LG49dCk7ZnVuY3Rpb24gaShsLHUsaD0wLGY9bC5sZW5ndGgpe2lmKGg8Zil7aWYoZSh1LHUpIT09MClyZXR1cm4gZjtkb3tsZXQgZD1oK2Y+Pj4xO3IobFtkXSx1KTwwP2g9ZCsxOmY9ZH13aGlsZShoPGYpfXJldHVybiBofW8oaSwibGVmdCIpO2Z1bmN0aW9uIGEobCx1LGg9MCxmPWwubGVuZ3RoKXtpZihoPGYpe2lmKGUodSx1KSE9PTApcmV0dXJuIGY7ZG97bGV0IGQ9aCtmPj4+MTtyKGxbZF0sdSk8PTA/aD1kKzE6Zj1kfXdoaWxlKGg8Zil9cmV0dXJuIGh9byhhLCJyaWdodCIpO2Z1bmN0aW9uIHMobCx1LGg9MCxmPWwubGVuZ3RoKXtsZXQgZD1pKGwsdSxoLGYtMSk7cmV0dXJuIGQ+aCYmbihsW2QtMV0sdSk+LW4obFtkXSx1KT9kLTE6ZH1yZXR1cm4gbyhzLCJjZW50ZXIiKSx7bGVmdDppLGNlbnRlcjpzLHJpZ2h0OmF9fWZ1bmN0aW9uIEYzZSgpe3JldHVybiAwfXZhciBkNz1NKCgpPT57InVzZSBzdHJpY3QiO2g3KCk7RyQoKTtvKGNkLCJiaXNlY3RvciIpO28oRjNlLCJ6ZXJvIil9KTtmdW5jdGlvbiBwNyh0KXtyZXR1cm4gdD09PW51bGw/TmFOOit0fXZhciAkJD1NKCgpPT57InVzZSBzdHJpY3QiO28ocDcsIm51bWJlciIpfSk7dmFyIFYkLFUkLHozZSxHM2UsbTcsSCQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtoNygpO2Q3KCk7JCQoKTtWJD1jZChsZCksVSQ9ViQucmlnaHQsejNlPVYkLmxlZnQsRzNlPWNkKHA3KS5jZW50ZXIsbTc9VSR9KTtmdW5jdGlvbiBXJCh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobik/dC5nZXQobik6cn1mdW5jdGlvbiAkM2Uoe19pbnRlcm46dCxfa2V5OmV9LHIpe2xldCBuPWUocik7cmV0dXJuIHQuaGFzKG4pP3QuZ2V0KG4pOih0LnNldChuLHIpLHIpfWZ1bmN0aW9uIFYzZSh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobikmJihyPXQuZ2V0KG4pLHQuZGVsZXRlKG4pKSxyfWZ1bmN0aW9uIFUzZSh0KXtyZXR1cm4gdCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0Ij90LnZhbHVlT2YoKTp0fXZhciBfcCxZJD1NKCgpPT57InVzZSBzdHJpY3QiO19wPWNsYXNzIGV4dGVuZHMgTWFwe3N0YXRpY3tvKHRoaXMsIkludGVybk1hcCIpfWNvbnN0cnVjdG9yKGUscj1VM2Upe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6cn19KSxlIT1udWxsKWZvcihsZXRbbixpXW9mIGUpdGhpcy5zZXQobixpKX1nZXQoZSl7cmV0dXJuIHN1cGVyLmdldChXJCh0aGlzLGUpKX1oYXMoZSl7cmV0dXJuIHN1cGVyLmhhcyhXJCh0aGlzLGUpKX1zZXQoZSxyKXtyZXR1cm4gc3VwZXIuc2V0KCQzZSh0aGlzLGUpLHIpfWRlbGV0ZShlKXtyZXR1cm4gc3VwZXIuZGVsZXRlKFYzZSh0aGlzLGUpKX19O28oVyQsImludGVybl9nZXQiKTtvKCQzZSwiaW50ZXJuX3NldCIpO28oVjNlLCJpbnRlcm5fZGVsZXRlIik7byhVM2UsImtleW9mIil9KTtmdW5jdGlvbiBHNCh0LGUscil7bGV0IG49KGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cxMChuKSksYT1uL01hdGgucG93KDEwLGkpLHM9YT49SDNlPzEwOmE+PVczZT81OmE+PVkzZT8yOjEsbCx1LGg7cmV0dXJuIGk8MD8oaD1NYXRoLnBvdygxMCwtaSkvcyxsPU1hdGgucm91bmQodCpoKSx1PU1hdGgucm91bmQoZSpoKSxsL2g8dCYmKytsLHUvaD5lJiYtLXUsaD0taCk6KGg9TWF0aC5wb3coMTAsaSkqcyxsPU1hdGgucm91bmQodC9oKSx1PU1hdGgucm91bmQoZS9oKSxsKmg8dCYmKytsLHUqaD5lJiYtLXUpLHU8bCYmLjU8PXImJnI8Mj9HNCh0LGUscioyKTpbbCx1LGhdfWZ1bmN0aW9uICQ0KHQsZSxyKXtpZihlPStlLHQ9K3Qscj0rciwhKHI+MCkpcmV0dXJuW107aWYodD09PWUpcmV0dXJuW3RdO2xldCBuPWU8dCxbaSxhLHNdPW4/RzQoZSx0LHIpOkc0KHQsZSxyKTtpZighKGE+PWkpKXJldHVybltdO2xldCBsPWEtaSsxLHU9bmV3IEFycmF5KGwpO2lmKG4paWYoczwwKWZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oYS1oKS8tcztlbHNlIGZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oYS1oKSpzO2Vsc2UgaWYoczwwKWZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oaStoKS8tcztlbHNlIGZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oaStoKSpzO3JldHVybiB1fWZ1bmN0aW9uIGt5KHQsZSxyKXtyZXR1cm4gZT0rZSx0PSt0LHI9K3IsRzQodCxlLHIpWzJdfWZ1bmN0aW9uIExwKHQsZSxyKXtlPStlLHQ9K3Qscj0rcjtsZXQgbj1lPHQsaT1uP2t5KGUsdCxyKTpreSh0LGUscik7cmV0dXJuKG4/LTE6MSkqKGk8MD8xLy1pOmkpfXZhciBIM2UsVzNlLFkzZSxxJD1NKCgpPT57InVzZSBzdHJpY3QiO0gzZT1NYXRoLnNxcnQoNTApLFczZT1NYXRoLnNxcnQoMTApLFkzZT1NYXRoLnNxcnQoMik7byhHNCwidGlja1NwZWMiKTtvKCQ0LCJ0aWNrcyIpO28oa3ksInRpY2tJbmNyZW1lbnQiKTtvKExwLCJ0aWNrU3RlcCIpfSk7ZnVuY3Rpb24gVjQodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocjxpfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIFgkPU0oKCk9PnsidXNlIHN0cmljdCI7byhWNCwibWF4Iil9KTtmdW5jdGlvbiBVNCh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPml8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgaiQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU0LCJtaW4iKX0pO2Z1bmN0aW9uIEg0KHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPU1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL3IpKXwwLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciBLJD1NKCgpPT57InVzZSBzdHJpY3QiO28oSDQsInJhbmdlIil9KTt2YXIga2g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIJCgpO2Q3KCk7WCQoKTtqJCgpO0skKCk7cSQoKTtZJCgpfSk7ZnVuY3Rpb24gZzcodCl7cmV0dXJuIHR9dmFyIFEkPU0oKCk9PnsidXNlIHN0cmljdCI7byhnNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTNlKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0KyIsMCkifWZ1bmN0aW9uIFgzZSh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KyIpIn1mdW5jdGlvbiBqM2UodCl7cmV0dXJuIGU9Pit0KGUpfWZ1bmN0aW9uIEszZSh0LGUpe3JldHVybiBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS1lKjIpLzIsdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxyPT4rdChyKStlfWZ1bmN0aW9uIFEzZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBKJCh0LGUpe3ZhciByPVtdLG49bnVsbCxpPW51bGwsYT02LHM9NixsPTMsdT10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LGg9dD09PVk0fHx0PT09VzQ/LTE6MSxmPXQ9PT1XNHx8dD09PXk3PyJ4IjoieSIsZD10PT09WTR8fHQ9PT12Nz9xM2U6WDNlO2Z1bmN0aW9uIHAobSl7dmFyIGc9bj8/KGUudGlja3M/ZS50aWNrcy5hcHBseShlLHIpOmUuZG9tYWluKCkpLHk9aT8/KGUudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxyKTpnNyksdj1NYXRoLm1heChhLDApK2wseD1lLnJhbmdlKCksYj0reFswXSt1LHc9K3hbeC5sZW5ndGgtMV0rdSxfPShlLmJhbmR3aWR0aD9LM2U6ajNlKShlLmNvcHkoKSx1KSxUPW0uc2VsZWN0aW9uP20uc2VsZWN0aW9uKCk6bSxFPVQuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLEw9VC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShnLGUpLm9yZGVyKCksUz1MLmV4aXQoKSxBPUwuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxJPUwuc2VsZWN0KCJsaW5lIiksRD1MLnNlbGVjdCgidGV4dCIpO0U9RS5tZXJnZShFLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxMPUwubWVyZ2UoQSksST1JLm1lcmdlKEEuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihmKyIyIixoKmEpKSxEPUQubWVyZ2UoQS5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihmLGgqdikuYXR0cigiZHkiLHQ9PT1ZND8iMGVtIjp0PT09djc/IjAuNzFlbSI6IjAuMzJlbSIpKSxtIT09VCYmKEU9RS50cmFuc2l0aW9uKG0pLEw9TC50cmFuc2l0aW9uKG0pLEk9SS50cmFuc2l0aW9uKG0pLEQ9RC50cmFuc2l0aW9uKG0pLFM9Uy50cmFuc2l0aW9uKG0pLmF0dHIoIm9wYWNpdHkiLFokKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3JldHVybiBpc0Zpbml0ZShrPV8oaykpP2Qoayt1KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxBLmF0dHIoIm9wYWNpdHkiLFokKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3ZhciBSPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGQoKFImJmlzRmluaXRlKFI9UihrKSk/UjpfKGspKSt1KX0pKSxTLnJlbW92ZSgpLEUuYXR0cigiZCIsdD09PVc0fHx0PT09eTc/cz8iTSIraCpzKyIsIitiKyJIIit1KyJWIit3KyJIIitoKnM6Ik0iK3UrIiwiK2IrIlYiK3c6cz8iTSIrYisiLCIraCpzKyJWIit1KyJIIit3KyJWIitoKnM6Ik0iK2IrIiwiK3UrIkgiK3cpLEwuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihrKXtyZXR1cm4gZChfKGspK3UpfSksSS5hdHRyKGYrIjIiLGgqYSksRC5hdHRyKGYsaCp2KS50ZXh0KHkpLFQuZmlsdGVyKFEzZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PXk3PyJzdGFydCI6dD09PVc0PyJlbmQiOiJtaWRkbGUiKSxULmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ffSl9cmV0dXJuIG8ocCwiYXhpcyIpLHAuc2NhbGU9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bSxwKTplfSxwLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9QXJyYXkuZnJvbShhcmd1bWVudHMpLHB9LHAudGlja0FyZ3VtZW50cz1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1tPT1udWxsP1tdOkFycmF5LmZyb20obSkscCk6ci5zbGljZSgpfSxwLnRpY2tWYWx1ZXM9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bT09bnVsbD9udWxsOkFycmF5LmZyb20obSkscCk6biYmbi5zbGljZSgpfSxwLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bSxwKTppfSxwLnRpY2tTaXplPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXM9K20scCk6YX0scC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSttLHApOmF9LHAudGlja1NpemVPdXRlcj1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rbSxwKTpzfSxwLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSttLHApOmx9LHAub2Zmc2V0PWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSttLHApOnV9LHB9ZnVuY3Rpb24geDcodCl7cmV0dXJuIEokKFk0LHQpfWZ1bmN0aW9uIGI3KHQpe3JldHVybiBKJCh2Nyx0KX12YXIgWTQseTcsdjcsVzQsWiQsZVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRJCgpO1k0PTEseTc9Mix2Nz0zLFc0PTQsWiQ9MWUtNjtvKHEzZSwidHJhbnNsYXRlWCIpO28oWDNlLCJ0cmFuc2xhdGVZIik7byhqM2UsIm51bWJlciIpO28oSzNlLCJjZW50ZXIiKTtvKFEzZSwiZW50ZXJpbmciKTtvKEokLCJheGlzIik7byh4NywiYXhpc1RvcCIpO28oYjcsImF4aXNCb3R0b20iKX0pO3ZhciB0Vj1NKCgpPT57InVzZSBzdHJpY3QiO2VWKCl9KTtmdW5jdGlvbiBuVigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47dDxlOysrdCl7aWYoIShuPWFyZ3VtZW50c1t0XSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBxNChyKX1mdW5jdGlvbiBxNCh0KXt0aGlzLl89dH1mdW5jdGlvbiBKM2UodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhZS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBlNWUodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk7cjxuOysrcilpZigoaT10W3JdKS5uYW1lPT09ZSlyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiByVih0LGUscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKHRbbl0ubmFtZT09PWUpe3Rbbl09WjNlLHQ9dC5zbGljZSgwLG4pLmNvbmNhdCh0LnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpyfSksdH12YXIgWjNlLHc3LGlWPU0oKCk9PnsidXNlIHN0cmljdCI7WjNlPXt2YWx1ZTpvKCgpPT57fSwidmFsdWUiKX07byhuViwiZGlzcGF0Y2giKTtvKHE0LCJEaXNwYXRjaCIpO28oSjNlLCJwYXJzZVR5cGVuYW1lcyIpO3E0LnByb3RvdHlwZT1uVi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnE0LG9uOm8oZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl8sbj1KM2UodCsiIixyKSxpLGE9LTEscz1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KythPHM7KWlmKChpPSh0PW5bYV0pLnR5cGUpJiYoaT1lNWUocltpXSx0Lm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYoZSE9bnVsbCYmdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHM7KWlmKGk9KHQ9blthXSkudHlwZSlyW2ldPXJWKHJbaV0sdC5uYW1lLGUpO2Vsc2UgaWYoZT09bnVsbClmb3IoaSBpbiByKXJbaV09clYocltpXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LCJvbiIpLGNvcHk6byhmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXS5zbGljZSgpO3JldHVybiBuZXcgcTQodCl9LCJjb3B5IiksY2FsbDpvKGZ1bmN0aW9uKHQsZSl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksYTtuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT10aGlzLl9bdF0sbj0wLGk9YS5sZW5ndGg7bjxpOysrbilhW25dLnZhbHVlLmFwcGx5KGUscil9LCJjYWxsIiksYXBwbHk6byhmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIG49dGhpcy5fW3RdLGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbltpXS52YWx1ZS5hcHBseShlLHIpfSwiYXBwbHkiKX07byhlNWUsImdldCIpO28oclYsInNldCIpO3c3PW5WfSk7dmFyIFQ3PU0oKCk9PnsidXNlIHN0cmljdCI7aVYoKX0pO3ZhciBYNCxrNyxFNz1NKCgpPT57InVzZSBzdHJpY3QiO1g0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixrNz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6WDQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIHBjKHQpe3ZhciBlPXQrPSIiLHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJihlPXQuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYodD10LnNsaWNlKHIrMSkpLGs3Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTprN1tlXSxsb2NhbDp0fTp0fXZhciBqND1NKCgpPT57InVzZSBzdHJpY3QiO0U3KCk7byhwYywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdDVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09WDQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVg0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhyLHQpfX1mdW5jdGlvbiByNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gRXkodCl7dmFyIGU9cGModCk7cmV0dXJuKGUubG9jYWw/cjVlOnQ1ZSkoZSl9dmFyIFM3PU0oKCk9PnsidXNlIHN0cmljdCI7ajQoKTtFNygpO28odDVlLCJjcmVhdG9ySW5oZXJpdCIpO28ocjVlLCJjcmVhdG9yRml4ZWQiKTtvKEV5LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBuNWUoKXt9ZnVuY3Rpb24gRWgodCl7cmV0dXJuIHQ9PW51bGw/bjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19dmFyIEs0PU0oKCk9PnsidXNlIHN0cmljdCI7byhuNWUsIm5vbmUiKTtvKEVoLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBDNyh0KXt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9RWgodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIGE9ZVtpXSxzPWEubGVuZ3RoLGw9bltpXT1uZXcgQXJyYXkocyksdSxoLGY9MDtmPHM7KytmKSh1PWFbZl0pJiYoaD10LmNhbGwodSx1Ll9fZGF0YV9fLGYsYSkpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGxbZl09aCk7cmV0dXJuIG5ldyBzaShuLHRoaXMuX3BhcmVudHMpfXZhciBhVj1NKCgpPT57InVzZSBzdHJpY3QiO3dsKCk7SzQoKTtvKEM3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBBNyh0KXtyZXR1cm4gdD09bnVsbD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX12YXIgc1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEE3LCJhcnJheSIpfSk7ZnVuY3Rpb24gaTVlKCl7cmV0dXJuW119ZnVuY3Rpb24gRHAodCl7cmV0dXJuIHQ9PW51bGw/aTVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19dmFyIF83PU0oKCk9PnsidXNlIHN0cmljdCI7byhpNWUsImVtcHR5Iik7byhEcCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gYTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBNyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEw3KHQpe3R5cGVvZiB0PT0iZnVuY3Rpb24iP3Q9YTVlKHQpOnQ9RHAodCk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49W10saT1bXSxhPTA7YTxyOysrYSlmb3IodmFyIHM9ZVthXSxsPXMubGVuZ3RoLHUsaD0wO2g8bDsrK2gpKHU9c1toXSkmJihuLnB1c2godC5jYWxsKHUsdS5fX2RhdGFfXyxoLHMpKSxpLnB1c2godSkpO3JldHVybiBuZXcgc2kobixpKX12YXIgb1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3bCgpO3NWKCk7XzcoKTtvKGE1ZSwiYXJyYXlBbGwiKTtvKEw3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBOcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBRNCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19dmFyIFN5PU0oKCk9PnsidXNlIHN0cmljdCI7byhOcCwiZGVmYXVsdCIpO28oUTQsImNoaWxkTWF0Y2hlciIpfSk7ZnVuY3Rpb24gbzVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzNWUuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX1mdW5jdGlvbiBsNWUoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH1mdW5jdGlvbiBENyh0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD09bnVsbD9sNWU6bzVlKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6UTQodCkpKX12YXIgczVlLGxWPU0oKCk9PnsidXNlIHN0cmljdCI7U3koKTtzNWU9QXJyYXkucHJvdG90eXBlLmZpbmQ7byhvNWUsImNoaWxkRmluZCIpO28obDVlLCJjaGlsZEZpcnN0Iik7byhENywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdTVlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gaDVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjNWUuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX1mdW5jdGlvbiBONyh0KXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwodD09bnVsbD91NWU6aDVlKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6UTQodCkpKX12YXIgYzVlLGNWPU0oKCk9PnsidXNlIHN0cmljdCI7U3koKTtjNWU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtvKHU1ZSwiY2hpbGRyZW4iKTtvKGg1ZSwiY2hpbGRyZW5GaWx0ZXIiKTtvKE43LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSNyh0KXt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9TnAodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIGE9ZVtpXSxzPWEubGVuZ3RoLGw9bltpXT1bXSx1LGg9MDtoPHM7KytoKSh1PWFbaF0pJiZ0LmNhbGwodSx1Ll9fZGF0YV9fLGgsYSkmJmwucHVzaCh1KTtyZXR1cm4gbmV3IHNpKG4sdGhpcy5fcGFyZW50cyl9dmFyIHVWPU0oKCk9PnsidXNlIHN0cmljdCI7d2woKTtTeSgpO28oUjcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEN5KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfXZhciBNNz1NKCgpPT57InVzZSBzdHJpY3QiO28oQ3ksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEk3KCl7cmV0dXJuIG5ldyBzaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChDeSksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gQXkodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9dmFyIE83PU0oKCk9PnsidXNlIHN0cmljdCI7TTcoKTt3bCgpO28oSTcsImRlZmF1bHQiKTtvKEF5LCJFbnRlck5vZGUiKTtBeS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkF5LGFwcGVuZENoaWxkOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0sImFwcGVuZENoaWxkIiksaW5zZXJ0QmVmb3JlOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSwiaW5zZXJ0QmVmb3JlIikscXVlcnlTZWxlY3RvcjpvKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0sInF1ZXJ5U2VsZWN0b3IiKSxxdWVyeVNlbGVjdG9yQWxsOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfSwicXVlcnlTZWxlY3RvckFsbCIpfX0pO2Z1bmN0aW9uIFA3KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgaFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFA3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBmNWUodCxlLHIsbixpLGEpe2Zvcih2YXIgcz0wLGwsdT1lLmxlbmd0aCxoPWEubGVuZ3RoO3M8aDsrK3MpKGw9ZVtzXSk/KGwuX19kYXRhX189YVtzXSxuW3NdPWwpOnJbc109bmV3IEF5KHQsYVtzXSk7Zm9yKDtzPHU7KytzKShsPWVbc10pJiYoaVtzXT1sKX1mdW5jdGlvbiBkNWUodCxlLHIsbixpLGEscyl7dmFyIGwsdSxoPW5ldyBNYXAsZj1lLmxlbmd0aCxkPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLG07Zm9yKGw9MDtsPGY7KytsKSh1PWVbbF0pJiYocFtsXT1tPXMuY2FsbCh1LHUuX19kYXRhX18sbCxlKSsiIixoLmhhcyhtKT9pW2xdPXU6aC5zZXQobSx1KSk7Zm9yKGw9MDtsPGQ7KytsKW09cy5jYWxsKHQsYVtsXSxsLGEpKyIiLCh1PWguZ2V0KG0pKT8obltsXT11LHUuX19kYXRhX189YVtsXSxoLmRlbGV0ZShtKSk6cltsXT1uZXcgQXkodCxhW2xdKTtmb3IobD0wO2w8ZjsrK2wpKHU9ZVtsXSkmJmguZ2V0KHBbbF0pPT09dSYmKGlbbF09dSl9ZnVuY3Rpb24gcDVlKHQpe3JldHVybiB0Ll9fZGF0YV9ffWZ1bmN0aW9uIEI3KHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxwNWUpO3ZhciByPWU/ZDVlOmY1ZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PVA3KHQpKTtmb3IodmFyIGE9aS5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpe3ZhciBmPW5baF0sZD1pW2hdLHA9ZC5sZW5ndGgsbT1tNWUodC5jYWxsKGYsZiYmZi5fX2RhdGFfXyxoLG4pKSxnPW0ubGVuZ3RoLHk9bFtoXT1uZXcgQXJyYXkoZyksdj1zW2hdPW5ldyBBcnJheShnKSx4PXVbaF09bmV3IEFycmF5KHApO3IoZixkLHksdix4LG0sZSk7Zm9yKHZhciBiPTAsdz0wLF8sVDtiPGc7KytiKWlmKF89eVtiXSl7Zm9yKGI+PXcmJih3PWIrMSk7IShUPXZbd10pJiYrK3c8ZzspO18uX25leHQ9VHx8bnVsbH19cmV0dXJuIHM9bmV3IHNpKHMsbikscy5fZW50ZXI9bCxzLl9leGl0PXUsc31mdW5jdGlvbiBtNWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX12YXIgZlY9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3bCgpO083KCk7aFYoKTtvKGY1ZSwiYmluZEluZGV4Iik7byhkNWUsImJpbmRLZXkiKTtvKHA1ZSwiZGF0dW0iKTtvKEI3LCJkZWZhdWx0Iik7byhtNWUsImFycmF5bGlrZSIpfSk7ZnVuY3Rpb24gRjcoKXtyZXR1cm4gbmV3IHNpKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoQ3kpLHRoaXMuX3BhcmVudHMpfXZhciBkVj1NKCgpPT57InVzZSBzdHJpY3QiO003KCk7d2woKTtvKEY3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB6Nyh0LGUscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxhPXRoaXMuZXhpdCgpO3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj8obj10KG4pLG4mJihuPW4uc2VsZWN0aW9uKCkpKTpuPW4uYXBwZW5kKHQrIiIpLGUhPW51bGwmJihpPWUoaSksaSYmKGk9aS5zZWxlY3Rpb24oKSkpLHI9PW51bGw/YS5yZW1vdmUoKTpyKGEpLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHBWPU0oKCk9PnsidXNlIHN0cmljdCI7byh6NywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRzcodCl7Zm9yKHZhciBlPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxyPXRoaXMuX2dyb3VwcyxuPWUuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bi5sZW5ndGgscz1NYXRoLm1pbihpLGEpLGw9bmV3IEFycmF5KGkpLHU9MDt1PHM7Kyt1KWZvcih2YXIgaD1yW3VdLGY9blt1XSxkPWgubGVuZ3RoLHA9bFt1XT1uZXcgQXJyYXkoZCksbSxnPTA7ZzxkOysrZykobT1oW2ddfHxmW2ddKSYmKHBbZ109bSk7Zm9yKDt1PGk7Kyt1KWxbdV09clt1XTtyZXR1cm4gbmV3IHNpKGwsdGhpcy5fcGFyZW50cyl9dmFyIG1WPU0oKCk9PnsidXNlIHN0cmljdCI7d2woKTtvKEc3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkNygpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxyPXQubGVuZ3RoOysrZTxyOylmb3IodmFyIG49dFtlXSxpPW4ubGVuZ3RoLTEsYT1uW2ldLHM7LS1pPj0wOykocz1uW2ldKSYmKGEmJnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSleNCYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLGEpLGE9cyk7cmV0dXJuIHRoaXN9dmFyIGdWPU0oKCk9PnsidXNlIHN0cmljdCI7bygkNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVjcodCl7dHx8KHQ9ZzVlKTtmdW5jdGlvbiBlKGQscCl7cmV0dXJuIGQmJnA/dChkLl9fZGF0YV9fLHAuX19kYXRhX18pOiFkLSFwfW8oZSwiY29tcGFyZU5vZGUiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2Epe2Zvcih2YXIgcz1yW2FdLGw9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShsKSxoLGY9MDtmPGw7KytmKShoPXNbZl0pJiYodVtmXT1oKTt1LnNvcnQoZSl9cmV0dXJuIG5ldyBzaShpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gZzVlKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciB5Vj1NKCgpPT57InVzZSBzdHJpY3QiO3dsKCk7byhWNywiZGVmYXVsdCIpO28oZzVlLCJhc2NlbmRpbmciKX0pO2Z1bmN0aW9uIFU3KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB2Vj1NKCgpPT57InVzZSBzdHJpY3QiO28oVTcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEg3KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9dmFyIHhWPU0oKCk9PnsidXNlIHN0cmljdCI7byhINywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVzcoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBuPXRbZV0saT0wLGE9bi5sZW5ndGg7aTxhOysraSl7dmFyIHM9bltpXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfXZhciBiVj1NKCgpPT57InVzZSBzdHJpY3QiO28oVzcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFk3KCl7bGV0IHQ9MDtmb3IobGV0IGUgb2YgdGhpcykrK3Q7cmV0dXJuIHR9dmFyIHdWPU0oKCk9PnsidXNlIHN0cmljdCI7byhZNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTcoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIFRWPU0oKCk9PnsidXNlIHN0cmljdCI7byhxNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gWDcodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPTAsbj1lLmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT1lW3JdLGE9MCxzPWkubGVuZ3RoLGw7YTxzOysrYSkobD1pW2FdKSYmdC5jYWxsKGwsbC5fX2RhdGFfXyxhLGkpO3JldHVybiB0aGlzfXZhciBrVj1NKCgpPT57InVzZSBzdHJpY3QiO28oWDcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHk1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gdjVlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24geDVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gYjVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIHc1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxyKX19ZnVuY3Rpb24gVDVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscil9fWZ1bmN0aW9uIGo3KHQsZSl7dmFyIHI9cGModCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgoZT09bnVsbD9yLmxvY2FsP3Y1ZTp5NWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/ci5sb2NhbD9UNWU6dzVlOnIubG9jYWw/YjVlOng1ZSkocixlKSl9dmFyIEVWPU0oKCk9PnsidXNlIHN0cmljdCI7ajQoKTtvKHk1ZSwiYXR0clJlbW92ZSIpO28odjVlLCJhdHRyUmVtb3ZlTlMiKTtvKHg1ZSwiYXR0ckNvbnN0YW50Iik7byhiNWUsImF0dHJDb25zdGFudE5TIik7byh3NWUsImF0dHJGdW5jdGlvbiIpO28oVDVlLCJhdHRyRnVuY3Rpb25OUyIpO28oajcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIF95KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld312YXIgSzc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKF95LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBrNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gRTVlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX19ZnVuY3Rpb24gUzVlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9fWZ1bmN0aW9uIFE3KHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoZT09bnVsbD9rNWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/UzVlOkU1ZSkodCxlLHI/PyIiKSk6U2godGhpcy5ub2RlKCksdCl9ZnVuY3Rpb24gU2godCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxfeSh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX12YXIgWjc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLNygpO28oazVlLCJzdHlsZVJlbW92ZSIpO28oRTVlLCJzdHlsZUNvbnN0YW50Iik7byhTNWUsInN0eWxlRnVuY3Rpb24iKTtvKFE3LCJkZWZhdWx0Iik7byhTaCwic3R5bGVWYWx1ZSIpfSk7ZnVuY3Rpb24gQzVlKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBBNWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIF81ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1yfX1mdW5jdGlvbiBKNyh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChlPT1udWxsP0M1ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9fNWU6QTVlKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX12YXIgU1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEM1ZSwicHJvcGVydHlSZW1vdmUiKTtvKEE1ZSwicHJvcGVydHlDb25zdGFudCIpO28oXzVlLCJwcm9wZXJ0eUZ1bmN0aW9uIik7byhKNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gQ1YodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGVBKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEFWKHQpfWZ1bmN0aW9uIEFWKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1DVih0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIF9WKHQsZSl7Zm9yKHZhciByPWVBKHQpLG49LTEsaT1lLmxlbmd0aDsrK248aTspci5hZGQoZVtuXSl9ZnVuY3Rpb24gTFYodCxlKXtmb3IodmFyIHI9ZUEodCksbj0tMSxpPWUubGVuZ3RoOysrbjxpOylyLnJlbW92ZShlW25dKX1mdW5jdGlvbiBMNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7X1YodGhpcyx0KX19ZnVuY3Rpb24gRDVlKHQpe3JldHVybiBmdW5jdGlvbigpe0xWKHRoaXMsdCl9fWZ1bmN0aW9uIE41ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9fVjpMVikodGhpcyx0KX19ZnVuY3Rpb24gdEEodCxlKXt2YXIgcj1DVih0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1lQSh0aGlzLm5vZGUoKSksaT0tMSxhPXIubGVuZ3RoOysraTxhOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9ONWU6ZT9MNWU6RDVlKShyLGUpKX12YXIgRFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKENWLCJjbGFzc0FycmF5Iik7byhlQSwiY2xhc3NMaXN0Iik7byhBViwiQ2xhc3NMaXN0Iik7QVYucHJvdG90eXBlPXthZGQ6byhmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sImFkZCIpLHJlbW92ZTpvKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LCJyZW1vdmUiKSxjb250YWluczpvKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfSwiY29udGFpbnMiKX07byhfViwiY2xhc3NlZEFkZCIpO28oTFYsImNsYXNzZWRSZW1vdmUiKTtvKEw1ZSwiY2xhc3NlZFRydWUiKTtvKEQ1ZSwiY2xhc3NlZEZhbHNlIik7byhONWUsImNsYXNzZWRGdW5jdGlvbiIpO28odEEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFI1ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gTTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gSTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9ZT8/IiJ9fWZ1bmN0aW9uIHJBKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh0PT1udWxsP1I1ZToodHlwZW9mIHQ9PSJmdW5jdGlvbiI/STVlOk01ZSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBOVj1NKCgpPT57InVzZSBzdHJpY3QiO28oUjVlLCJ0ZXh0UmVtb3ZlIik7byhNNWUsInRleHRDb25zdGFudCIpO28oSTVlLCJ0ZXh0RnVuY3Rpb24iKTtvKHJBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBPNWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBQNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gQjVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWU/PyIifX1mdW5jdGlvbiBuQSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godD09bnVsbD9PNWU6KHR5cGVvZiB0PT0iZnVuY3Rpb24iP0I1ZTpQNWUpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIFJWPU0oKCk9PnsidXNlIHN0cmljdCI7byhPNWUsImh0bWxSZW1vdmUiKTtvKFA1ZSwiaHRtbENvbnN0YW50Iik7byhCNWUsImh0bWxGdW5jdGlvbiIpO28obkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEY1ZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBpQSgpe3JldHVybiB0aGlzLmVhY2goRjVlKX12YXIgTVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEY1ZSwicmFpc2UiKTtvKGlBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB6NWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBhQSgpe3JldHVybiB0aGlzLmVhY2goejVlKX12YXIgSVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHo1ZSwibG93ZXIiKTtvKGFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzQSh0KXt2YXIgZT10eXBlb2YgdD09ImZ1bmN0aW9uIj90OkV5KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBPVj1NKCgpPT57InVzZSBzdHJpY3QiO1M3KCk7byhzQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRzVlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gb0EodCxlKXt2YXIgcj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OkV5KHQpLG49ZT09bnVsbD9HNWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpFaChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIFBWPU0oKCk9PnsidXNlIHN0cmljdCI7UzcoKTtLNCgpO28oRzVlLCJjb25zdGFudE51bGwiKTtvKG9BLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkNWUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsQSgpe3JldHVybiB0aGlzLmVhY2goJDVlKX12YXIgQlY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKCQ1ZSwicmVtb3ZlIik7byhsQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVjVlKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBVNWUoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGNBKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P1U1ZTpWNWUpfXZhciBGVj1NKCgpPT57InVzZSBzdHJpY3QiO28oVjVlLCJzZWxlY3Rpb25fY2xvbmVTaGFsbG93Iik7byhVNWUsInNlbGVjdGlvbl9jbG9uZURlZXAiKTtvKGNBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1QSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIHpWPU0oKCk9PnsidXNlIHN0cmljdCI7byh1QSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSDVlKHQpe3JldHVybiBmdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlLHRoaXMuX19kYXRhX18pfX1mdW5jdGlvbiBXNWUodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihlKXt2YXIgcj0iIixuPWUuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj1lLnNsaWNlKG4rMSksZT1lLnNsaWNlKDAsbikpLHt0eXBlOmUsbmFtZTpyfX0pfWZ1bmN0aW9uIFk1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciByPTAsbj0tMSxpPWUubGVuZ3RoLGE7cjxpOysrcilhPWVbcl0sKCF0LnR5cGV8fGEudHlwZT09PXQudHlwZSkmJmEubmFtZT09PXQubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYS50eXBlLGEubGlzdGVuZXIsYS5vcHRpb25zKTplWysrbl09YTsrK24/ZS5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gcTVlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb24saSxhPUg1ZShlKTtpZihuKXtmb3IodmFyIHM9MCxsPW4ubGVuZ3RoO3M8bDsrK3MpaWYoKGk9bltzXSkudHlwZT09PXQudHlwZSYmaS5uYW1lPT09dC5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaS50eXBlLGkubGlzdGVuZXIsaS5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaS50eXBlLGkubGlzdGVuZXI9YSxpLm9wdGlvbnM9ciksaS52YWx1ZT1lO3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLHIpLGk9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOnJ9LG4/bi5wdXNoKGkpOnRoaXMuX19vbj1baV19fWZ1bmN0aW9uIGhBKHQsZSxyKXt2YXIgbj1XNWUodCsiIiksaSxhPW4ubGVuZ3RoLHM7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbD10aGlzLm5vZGUoKS5fX29uO2lmKGwpe2Zvcih2YXIgdT0wLGg9bC5sZW5ndGgsZjt1PGg7Kyt1KWZvcihpPTAsZj1sW3VdO2k8YTsrK2kpaWYoKHM9bltpXSkudHlwZT09PWYudHlwZSYmcy5uYW1lPT09Zi5uYW1lKXJldHVybiBmLnZhbHVlfXJldHVybn1mb3IobD1lP3E1ZTpZNWUsaT0wO2k8YTsrK2kpdGhpcy5lYWNoKGwobltpXSxlLHIpKTtyZXR1cm4gdGhpc312YXIgR1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEg1ZSwiY29udGV4dExpc3RlbmVyIik7byhXNWUsInBhcnNlVHlwZW5hbWVzIik7byhZNWUsIm9uUmVtb3ZlIik7byhxNWUsIm9uQWRkIik7byhoQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gJFYodCxlLHIpe3ZhciBuPV95KHQpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKGUscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudChlLHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIFg1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkVih0aGlzLHQsZSl9fWZ1bmN0aW9uIGo1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkVih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBmQSh0LGUpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP2o1ZTpYNWUpKHQsZSkpfXZhciBWVj1NKCgpPT57InVzZSBzdHJpY3QiO0s3KCk7bygkViwiZGlzcGF0Y2hFdmVudCIpO28oWDVlLCJkaXNwYXRjaENvbnN0YW50Iik7byhqNWUsImRpc3BhdGNoRnVuY3Rpb24iKTtvKGZBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbipkQSgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIG49dFtlXSxpPTAsYT1uLmxlbmd0aCxzO2k8YTsrK2kpKHM9bltpXSkmJih5aWVsZCBzKX12YXIgVVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGRBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzaSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBIVigpe3JldHVybiBuZXcgc2koW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxwQSl9ZnVuY3Rpb24gSzVlKCl7cmV0dXJuIHRoaXN9dmFyIHBBLHZ1LHdsPU0oKCk9PnsidXNlIHN0cmljdCI7YVYoKTtvVigpO2xWKCk7Y1YoKTt1VigpO2ZWKCk7TzcoKTtkVigpO3BWKCk7bVYoKTtnVigpO3lWKCk7dlYoKTt4VigpO2JWKCk7d1YoKTtUVigpO2tWKCk7RVYoKTtaNygpO1NWKCk7RFYoKTtOVigpO1JWKCk7TVYoKTtJVigpO09WKCk7UFYoKTtCVigpO0ZWKCk7elYoKTtHVigpO1ZWKCk7VVYoKTtwQT1bbnVsbF07byhzaSwiU2VsZWN0aW9uIik7byhIViwic2VsZWN0aW9uIik7byhLNWUsInNlbGVjdGlvbl9zZWxlY3Rpb24iKTtzaS5wcm90b3R5cGU9SFYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzaSxzZWxlY3Q6Qzcsc2VsZWN0QWxsOkw3LHNlbGVjdENoaWxkOkQ3LHNlbGVjdENoaWxkcmVuOk43LGZpbHRlcjpSNyxkYXRhOkI3LGVudGVyOkk3LGV4aXQ6Rjcsam9pbjp6NyxtZXJnZTpHNyxzZWxlY3Rpb246SzVlLG9yZGVyOiQ3LHNvcnQ6VjcsY2FsbDpVNyxub2RlczpINyxub2RlOlc3LHNpemU6WTcsZW1wdHk6cTcsZWFjaDpYNyxhdHRyOmo3LHN0eWxlOlE3LHByb3BlcnR5Oko3LGNsYXNzZWQ6dEEsdGV4dDpyQSxodG1sOm5BLHJhaXNlOmlBLGxvd2VyOmFBLGFwcGVuZDpzQSxpbnNlcnQ6b0EscmVtb3ZlOmxBLGNsb25lOmNBLGRhdHVtOnVBLG9uOmhBLGRpc3BhdGNoOmZBLFtTeW1ib2wuaXRlcmF0b3JdOmRBfTt2dT1IVn0pO2Z1bmN0aW9uIFZlKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/bmV3IHNpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgc2koW1t0XV0scEEpfXZhciBXVj1NKCgpPT57InVzZSBzdHJpY3QiO3dsKCk7byhWZSwiZGVmYXVsdCIpfSk7dmFyIFRsPU0oKCk9PnsidXNlIHN0cmljdCI7U3koKTtqNCgpO1dWKCk7d2woKTtLNCgpO183KCk7WjcoKX0pO3ZhciBZVj1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gQ2godCxlLHIpe3QucHJvdG90eXBlPWUucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIFJwKHQsZSl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByfXZhciBtQT1NKCgpPT57InVzZSBzdHJpY3QiO28oQ2gsImRlZmF1bHQiKTtvKFJwLCJleHRlbmQiKX0pO2Z1bmN0aW9uIEFoKCl7fWZ1bmN0aW9uIFhWKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gaXdlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfWZ1bmN0aW9uIGF3ZSgpe3JldHVybiB0VSh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBqVigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEVsKHQpe3ZhciBlLHI7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPVE1ZS5leGVjKHQpKT8ocj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLHI9PT02P0tWKGUpOnI9PT0zP25ldyBkYShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8ZSYyNDAsKGUmMTUpPDw0fGUmMTUsMSk6cj09PTg/WjQoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoZSYyNTUpLzI1NSk6cj09PTQ/WjQoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fGUmMjQwLCgoZSYxNSk8PDR8ZSYxNSkvMjU1KTpudWxsKTooZT1aNWUuZXhlYyh0KSk/bmV3IGRhKGVbMV0sZVsyXSxlWzNdLDEpOihlPUo1ZS5leGVjKHQpKT9uZXcgZGEoZVsxXSoyNTUvMTAwLGVbMl0qMjU1LzEwMCxlWzNdKjI1NS8xMDAsMSk6KGU9ZXdlLmV4ZWModCkpP1o0KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPXR3ZS5leGVjKHQpKT9aNChlWzFdKjI1NS8xMDAsZVsyXSoyNTUvMTAwLGVbM10qMjU1LzEwMCxlWzRdKTooZT1yd2UuZXhlYyh0KSk/SlYoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1ud2UuZXhlYyh0KSk/SlYoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpxVi5oYXNPd25Qcm9wZXJ0eSh0KT9LVihxVlt0XSk6dD09PSJ0cmFuc3BhcmVudCI/bmV3IGRhKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gS1YodCl7cmV0dXJuIG5ldyBkYSh0Pj4xNiYyNTUsdD4+OCYyNTUsdCYyNTUsMSl9ZnVuY3Rpb24gWjQodCxlLHIsbil7cmV0dXJuIG48PTAmJih0PWU9cj1OYU4pLG5ldyBkYSh0LGUscixuKX1mdW5jdGlvbiB5QSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFofHwodD1FbCh0KSksdD8odD10LnJnYigpLG5ldyBkYSh0LnIsdC5nLHQuYix0Lm9wYWNpdHkpKTpuZXcgZGF9ZnVuY3Rpb24gSXAodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3lBKHQpOm5ldyBkYSh0LGUscixuPz8xKX1mdW5jdGlvbiBkYSh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gUVYoKXtyZXR1cm5gIyR7dWQodGhpcy5yKX0ke3VkKHRoaXMuZyl9JHt1ZCh0aGlzLmIpfWB9ZnVuY3Rpb24gc3dlKCl7cmV0dXJuYCMke3VkKHRoaXMucil9JHt1ZCh0aGlzLmcpfSR7dWQodGhpcy5iKX0ke3VkKChpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSoyNTUpfWB9ZnVuY3Rpb24gWlYoKXtsZXQgdD10Myh0aGlzLm9wYWNpdHkpO3JldHVybmAke3Q9PT0xPyJyZ2IoIjoicmdiYSgifSR7aGQodGhpcy5yKX0sICR7aGQodGhpcy5nKX0sICR7aGQodGhpcy5iKX0ke3Q9PT0xPyIpIjpgLCAke3R9KWB9YH1mdW5jdGlvbiB0Myh0KXtyZXR1cm4gaXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpfWZ1bmN0aW9uIGhkKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSl9ZnVuY3Rpb24gdWQodCl7cmV0dXJuIHQ9aGQodCksKHQ8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBKVih0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGtsKHQsZSxyLG4pfWZ1bmN0aW9uIHRVKHQpe2lmKHQgaW5zdGFuY2VvZiBrbClyZXR1cm4gbmV3IGtsKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEFofHwodD1FbCh0KSksIXQpcmV0dXJuIG5ldyBrbDtpZih0IGluc3RhbmNlb2Yga2wpcmV0dXJuIHQ7dD10LnJnYigpO3ZhciBlPXQuci8yNTUscj10LmcvMjU1LG49dC5iLzI1NSxpPU1hdGgubWluKGUscixuKSxhPU1hdGgubWF4KGUscixuKSxzPU5hTixsPWEtaSx1PShhK2kpLzI7cmV0dXJuIGw/KGU9PT1hP3M9KHItbikvbCsocjxuKSo2OnI9PT1hP3M9KG4tZSkvbCsyOnM9KGUtcikvbCs0LGwvPXU8LjU/YStpOjItYS1pLHMqPTYwKTpsPXU+MCYmdTwxPzA6cyxuZXcga2wocyxsLHUsdC5vcGFjaXR5KX1mdW5jdGlvbiByVSh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dFUodCk6bmV3IGtsKHQsZSxyLG4/PzEpfWZ1bmN0aW9uIGtsKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBlVSh0KXtyZXR1cm4gdD0odHx8MCklMzYwLHQ8MD90KzM2MDp0fWZ1bmN0aW9uIEo0KHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsdHx8MCkpfWZ1bmN0aW9uIGdBKHQsZSxyKXtyZXR1cm4odDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSkqMjU1fXZhciBMeSxlMyxNcCxEeSxtYyxRNWUsWjVlLEo1ZSxld2UsdHdlLHJ3ZSxud2UscVYsdkE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttQSgpO28oQWgsIkNvbG9yIik7THk9LjcsZTM9MS9MeSxNcD0iXFxzKihbKy1dP1xcZCspXFxzKiIsRHk9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG1jPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsUTVlPS9eIyhbMC05YS1mXXszLDh9KSQvLFo1ZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtNcH0sJHtNcH0sJHtNcH1cXCkkYCksSjVlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke21jfSwke21jfSwke21jfVxcKSRgKSxld2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke01wfSwke01wfSwke01wfSwke0R5fVxcKSRgKSx0d2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke21jfSwke21jfSwke21jfSwke0R5fVxcKSRgKSxyd2U9bmV3IFJlZ0V4cChgXmhzbFxcKCR7RHl9LCR7bWN9LCR7bWN9XFwpJGApLG53ZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7RHl9LCR7bWN9LCR7bWN9LCR7RHl9XFwpJGApLHFWPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NoKEFoLEVsLHtjb3B5KHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlhWLGZvcm1hdEhleDpYVixmb3JtYXRIZXg4Oml3ZSxmb3JtYXRIc2w6YXdlLGZvcm1hdFJnYjpqVix0b1N0cmluZzpqVn0pO28oWFYsImNvbG9yX2Zvcm1hdEhleCIpO28oaXdlLCJjb2xvcl9mb3JtYXRIZXg4Iik7byhhd2UsImNvbG9yX2Zvcm1hdEhzbCIpO28oalYsImNvbG9yX2Zvcm1hdFJnYiIpO28oRWwsImNvbG9yIik7byhLViwicmdibiIpO28oWjQsInJnYmEiKTtvKHlBLCJyZ2JDb252ZXJ0Iik7byhJcCwicmdiIik7byhkYSwiUmdiIik7Q2goZGEsSXAsUnAoQWgse2JyaWdodGVyKHQpe3JldHVybiB0PXQ9PW51bGw/ZTM6TWF0aC5wb3coZTMsdCksbmV3IGRhKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gdD10PT1udWxsP0x5Ok1hdGgucG93KEx5LHQpLG5ldyBkYSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IGRhKGhkKHRoaXMuciksaGQodGhpcy5nKSxoZCh0aGlzLmIpLHQzKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6UVYsZm9ybWF0SGV4OlFWLGZvcm1hdEhleDg6c3dlLGZvcm1hdFJnYjpaVix0b1N0cmluZzpaVn0pKTtvKFFWLCJyZ2JfZm9ybWF0SGV4Iik7byhzd2UsInJnYl9mb3JtYXRIZXg4Iik7byhaViwicmdiX2Zvcm1hdFJnYiIpO28odDMsImNsYW1wYSIpO28oaGQsImNsYW1waSIpO28odWQsImhleCIpO28oSlYsImhzbGEiKTtvKHRVLCJoc2xDb252ZXJ0Iik7byhyVSwiaHNsIik7byhrbCwiSHNsIik7Q2goa2wsclUsUnAoQWgse2JyaWdodGVyKHQpe3JldHVybiB0PXQ9PW51bGw/ZTM6TWF0aC5wb3coZTMsdCksbmV3IGtsKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiB0PXQ9PW51bGw/THk6TWF0aC5wb3coTHksdCksbmV3IGtsKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIHQ9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxpPTIqci1uO3JldHVybiBuZXcgZGEoZ0EodD49MjQwP3QtMjQwOnQrMTIwLGksbiksZ0EodCxpLG4pLGdBKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IGtsKGVVKHRoaXMuaCksSjQodGhpcy5zKSxKNCh0aGlzLmwpLHQzKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7bGV0IHQ9dDModGhpcy5vcGFjaXR5KTtyZXR1cm5gJHt0PT09MT8iaHNsKCI6ImhzbGEoIn0ke2VVKHRoaXMuaCl9LCAke0o0KHRoaXMucykqMTAwfSUsICR7SjQodGhpcy5sKSoxMDB9JSR7dD09PTE/IikiOmAsICR7dH0pYH1gfX0pKTtvKGVVLCJjbGFtcGgiKTtvKEo0LCJjbGFtcHQiKTtvKGdBLCJoc2wycmdiIil9KTt2YXIgblUsaVUsYVU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuVT1NYXRoLlBJLzE4MCxpVT0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGhVKHQpe2lmKHQgaW5zdGFuY2VvZiBnYylyZXR1cm4gbmV3IGdjKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHh1KXJldHVybiBmVSh0KTt0IGluc3RhbmNlb2YgZGF8fCh0PXlBKHQpKTt2YXIgZT1UQSh0LnIpLHI9VEEodC5nKSxuPVRBKHQuYiksaT14QSgoLjIyMjUwNDUqZSsuNzE2ODc4NipyKy4wNjA2MTY5Km4pL29VKSxhLHM7cmV0dXJuIGU9PT1yJiZyPT09bj9hPXM9aTooYT14QSgoLjQzNjA3NDcqZSsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL3NVKSxzPXhBKCguMDEzOTMyMiplKy4wOTcxMDQ1KnIrLjcxNDE3MzMqbikvbFUpKSxuZXcgZ2MoMTE2KmktMTYsNTAwKihhLWkpLDIwMCooaS1zKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGtBKHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9oVSh0KTpuZXcgZ2ModCxlLHIsbj8/MSl9ZnVuY3Rpb24gZ2ModCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHhBKHQpe3JldHVybiB0Pm93ZT9NYXRoLnBvdyh0LDEvMyk6dC91VStjVX1mdW5jdGlvbiBiQSh0KXtyZXR1cm4gdD5PcD90KnQqdDp1VSoodC1jVSl9ZnVuY3Rpb24gd0EodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBUQSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBsd2UodCl7aWYodCBpbnN0YW5jZW9mIHh1KXJldHVybiBuZXcgeHUodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZ2N8fCh0PWhVKHQpKSx0LmE9PT0wJiZ0LmI9PT0wKXJldHVybiBuZXcgeHUoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqaVU7cmV0dXJuIG5ldyB4dShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBOeSh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bHdlKHQpOm5ldyB4dSh0LGUscixuPz8xKX1mdW5jdGlvbiB4dSh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZlUodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IGdjKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqblU7cmV0dXJuIG5ldyBnYyh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXZhciByMyxzVSxvVSxsVSxjVSxPcCx1VSxvd2UsZFU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttQSgpO3ZBKCk7YVUoKTtyMz0xOCxzVT0uOTY0MjIsb1U9MSxsVT0uODI1MjEsY1U9NC8yOSxPcD02LzI5LHVVPTMqT3AqT3Asb3dlPU9wKk9wKk9wO28oaFUsImxhYkNvbnZlcnQiKTtvKGtBLCJsYWIiKTtvKGdjLCJMYWIiKTtDaChnYyxrQSxScChBaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIG5ldyBnYyh0aGlzLmwrcjMqKHQ/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiBuZXcgZ2ModGhpcy5sLXIzKih0Pz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBlPXNVKmJBKGUpLHQ9b1UqYkEodCkscj1sVSpiQShyKSxuZXcgZGEod0EoMy4xMzM4NTYxKmUtMS42MTY4NjY3KnQtLjQ5MDYxNDYqciksd0EoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpyKSx3QSguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpO28oeEEsInh5ejJsYWIiKTtvKGJBLCJsYWIyeHl6Iik7byh3QSwibHJnYjJyZ2IiKTtvKFRBLCJyZ2IybHJnYiIpO28obHdlLCJoY2xDb252ZXJ0Iik7byhOeSwiaGNsIik7byh4dSwiSGNsIik7byhmVSwiaGNsMmxhYiIpO0NoKHh1LE55LFJwKEFoLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IHh1KHRoaXMuaCx0aGlzLmMsdGhpcy5sK3IzKih0Pz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIG5ldyB4dSh0aGlzLmgsdGhpcy5jLHRoaXMubC1yMyoodD8/MSksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIGZVKHRoaXMpLnJnYigpfX0pKX0pO3ZhciBQcD1NKCgpPT57InVzZSBzdHJpY3QiO3ZBKCk7ZFUoKX0pO2Z1bmN0aW9uIEVBKHQsZSxyLG4saSl7dmFyIGE9dCp0LHM9YSp0O3JldHVybigoMS0zKnQrMyphLXMpKmUrKDQtNiphKzMqcykqcisoMSszKnQrMyphLTMqcykqbitzKmkpLzZ9ZnVuY3Rpb24gU0EodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLGUtMSk6TWF0aC5mbG9vcihyKmUpLGk9dFtuXSxhPXRbbisxXSxzPW4+MD90W24tMV06MippLWEsbD1uPGUtMT90W24rMl06MiphLWk7cmV0dXJuIEVBKChyLW4vZSkqZSxzLGksYSxsKX19dmFyIENBPU0oKCk9PnsidXNlIHN0cmljdCI7byhFQSwiYmFzaXMiKTtvKFNBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBBQSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49TWF0aC5mbG9vcigoKHIlPTEpPDA/KytyOnIpKmUpLGk9dFsobitlLTEpJWVdLGE9dFtuJWVdLHM9dFsobisxKSVlXSxsPXRbKG4rMiklZV07cmV0dXJuIEVBKChyLW4vZSkqZSxpLGEscyxsKX19dmFyIHBVPU0oKCk9PnsidXNlIHN0cmljdCI7Q0EoKTtvKEFBLCJkZWZhdWx0Iil9KTt2YXIgQnAsX0E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCcD1vKHQ9PigpPT50LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBtVSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIGN3ZSh0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fWZ1bmN0aW9uIGdVKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP21VKHQscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpCcChpc05hTih0KT9lOnQpfWZ1bmN0aW9uIHlVKHQpe3JldHVybih0PSt0KT09MT9idTpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/Y3dlKGUscix0KTpCcChpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBidSh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9tVSh0LHIpOkJwKGlzTmFOKHQpP2U6dCl9dmFyIExBPU0oKCk9PnsidXNlIHN0cmljdCI7X0EoKTtvKG1VLCJsaW5lYXIiKTtvKGN3ZSwiZXhwb25lbnRpYWwiKTtvKGdVLCJodWUiKTtvKHlVLCJnYW1tYSIpO28oYnUsIm5vZ2FtbWEiKX0pO2Z1bmN0aW9uIHZVKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzLGw7Zm9yKHM9MDtzPHI7KytzKWw9SXAoZVtzXSksbltzXT1sLnJ8fDAsaVtzXT1sLmd8fDAsYVtzXT1sLmJ8fDA7cmV0dXJuIG49dChuKSxpPXQoaSksYT10KGEpLGwub3BhY2l0eT0xLGZ1bmN0aW9uKHUpe3JldHVybiBsLnI9bih1KSxsLmc9aSh1KSxsLmI9YSh1KSxsKyIifX19dmFyIGZkLHV3ZSxod2UsREE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQcCgpO0NBKCk7cFUoKTtMQSgpO2ZkPW8oZnVuY3Rpb24gdChlKXt2YXIgcj15VShlKTtmdW5jdGlvbiBuKGksYSl7dmFyIHM9cigoaT1JcChpKSkuciwoYT1JcChhKSkuciksbD1yKGkuZyxhLmcpLHU9cihpLmIsYS5iKSxoPWJ1KGkub3BhY2l0eSxhLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaS5yPXMoZiksaS5nPWwoZiksaS5iPXUoZiksaS5vcGFjaXR5PWgoZiksaSsiIn19cmV0dXJuIG8obiwicmdiIiksbi5nYW1tYT10LG59LCJyZ2JHYW1tYSIpKDEpO28odlUsInJnYlNwbGluZSIpO3V3ZT12VShTQSksaHdlPXZVKEFBKX0pO2Z1bmN0aW9uIE5BKHQsZSl7ZXx8KGU9W10pO3ZhciByPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAsbj1lLnNsaWNlKCksaTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKGk9MDtpPHI7KytpKW5baV09dFtpXSooMS1hKStlW2ldKmE7cmV0dXJuIG59fWZ1bmN0aW9uIHhVKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgYlU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE5BLCJkZWZhdWx0Iik7byh4VSwiaXNOdW1iZXJBcnJheSIpfSk7ZnVuY3Rpb24gd1UodCxlKXt2YXIgcj1lP2UubGVuZ3RoOjAsbj10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkocikscztmb3Iocz0wO3M8bjsrK3MpaVtzXT1faCh0W3NdLGVbc10pO2Zvcig7czxyOysrcylhW3NdPWVbc107cmV0dXJuIGZ1bmN0aW9uKGwpe2ZvcihzPTA7czxuOysrcylhW3NdPWlbc10obCk7cmV0dXJuIGF9fXZhciBUVT1NKCgpPT57InVzZSBzdHJpY3QiO24zKCk7byh3VSwiZ2VuZXJpY0FycmF5Iil9KTtmdW5jdGlvbiBSQSh0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0KigxLW4pK2Uqbikscn19dmFyIGtVPU0oKCk9PnsidXNlIHN0cmljdCI7byhSQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZWEodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19dmFyIFJ5PU0oKCk9PnsidXNlIHN0cmljdCI7byhlYSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTUEodCxlKXt2YXIgcj17fSxuPXt9LGk7KHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSksKGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSk7Zm9yKGkgaW4gZSlpIGluIHQ/cltpXT1faCh0W2ldLGVbaV0pOm5baV09ZVtpXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKGkgaW4gciluW2ldPXJbaV0oYSk7cmV0dXJuIG59fXZhciBFVT1NKCgpPT57InVzZSBzdHJpY3QiO24zKCk7byhNQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZndlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBkd2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX1mdW5jdGlvbiBGcCh0LGUpe3ZhciByPU9BLmxhc3RJbmRleD1JQS5sYXN0SW5kZXg9MCxuLGksYSxzPS0xLGw9W10sdT1bXTtmb3IodD10KyIiLGU9ZSsiIjsobj1PQS5leGVjKHQpKSYmKGk9SUEuZXhlYyhlKSk7KShhPWkuaW5kZXgpPnImJihhPWUuc2xpY2UocixhKSxsW3NdP2xbc10rPWE6bFsrK3NdPWEpLChuPW5bMF0pPT09KGk9aVswXSk/bFtzXT9sW3NdKz1pOmxbKytzXT1pOihsWysrc109bnVsbCx1LnB1c2goe2k6cyx4OmVhKG4saSl9KSkscj1JQS5sYXN0SW5kZXg7cmV0dXJuIHI8ZS5sZW5ndGgmJihhPWUuc2xpY2UociksbFtzXT9sW3NdKz1hOmxbKytzXT1hKSxsLmxlbmd0aDwyP3VbMF0/ZHdlKHVbMF0ueCk6ZndlKGUpOihlPXUubGVuZ3RoLGZ1bmN0aW9uKGgpe2Zvcih2YXIgZj0wLGQ7ZjxlOysrZilsWyhkPXVbZl0pLmldPWQueChoKTtyZXR1cm4gbC5qb2luKCIiKX0pfXZhciBPQSxJQSxQQT1NKCgpPT57InVzZSBzdHJpY3QiO1J5KCk7T0E9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLElBPW5ldyBSZWdFeHAoT0Euc291cmNlLCJnIik7byhmd2UsInplcm8iKTtvKGR3ZSwib25lIik7byhGcCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gX2godCxlKXt2YXIgcj10eXBlb2YgZSxuO3JldHVybiBlPT1udWxsfHxyPT09ImJvb2xlYW4iP0JwKGUpOihyPT09Im51bWJlciI/ZWE6cj09PSJzdHJpbmciPyhuPUVsKGUpKT8oZT1uLGZkKTpGcDplIGluc3RhbmNlb2YgRWw/ZmQ6ZSBpbnN0YW5jZW9mIERhdGU/UkE6eFUoZSk/TkE6QXJyYXkuaXNBcnJheShlKT93VTp0eXBlb2YgZS52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4oZSk/TUE6ZWEpKHQsZSl9dmFyIG4zPU0oKCk9PnsidXNlIHN0cmljdCI7UHAoKTtEQSgpO1RVKCk7a1UoKTtSeSgpO0VVKCk7UEEoKTtfQSgpO2JVKCk7byhfaCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaTModCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtcikrZSpyKX19dmFyIFNVPU0oKCk9PnsidXNlIHN0cmljdCI7byhpMywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gczModCxlLHIsbixpLGEpe3ZhciBzLGwsdTtyZXR1cm4ocz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89cyxlLz1zKSwodT10KnIrZSpuKSYmKHItPXQqdSxuLT1lKnUpLChsPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1sLG4vPWwsdS89bCksdCpuPGUqciYmKHQ9LXQsZT0tZSx1PS11LHM9LXMpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqQ1Usc2tld1g6TWF0aC5hdGFuKHUpKkNVLHNjYWxlWDpzLHNjYWxlWTpsfX12YXIgQ1UsYTMsQVU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDVT0xODAvTWF0aC5QSSxhMz17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtvKHMzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBfVSh0KXtsZXQgZT1uZXcodHlwZW9mIERPTU1hdHJpeD09ImZ1bmN0aW9uIj9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P2EzOnMzKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKX1mdW5jdGlvbiBMVSh0KXtyZXR1cm4gdD09bnVsbD9hMzoobzN8fChvMz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxvMy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9bzMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsczModC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTphMyl9dmFyIG8zLERVPU0oKCk9PnsidXNlIHN0cmljdCI7QVUoKTtvKF9VLCJwYXJzZUNzcyIpO28oTFUsInBhcnNlU3ZnIil9KTtmdW5jdGlvbiBOVSh0LGUscixuKXtmdW5jdGlvbiBpKGgpe3JldHVybiBoLmxlbmd0aD9oLnBvcCgpKyIgIjoiIn1vKGksInBvcCIpO2Z1bmN0aW9uIGEoaCxmLGQscCxtLGcpe2lmKGghPT1kfHxmIT09cCl7dmFyIHk9bS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxyKTtnLnB1c2goe2k6eS00LHg6ZWEoaCxkKX0se2k6eS0yLHg6ZWEoZixwKX0pfWVsc2UoZHx8cCkmJm0ucHVzaCgidHJhbnNsYXRlKCIrZCtlK3Arcil9byhhLCJ0cmFuc2xhdGUiKTtmdW5jdGlvbiBzKGgsZixkLHApe2ghPT1mPyhoLWY+MTgwP2YrPTM2MDpmLWg+MTgwJiYoaCs9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKGkoZCkrInJvdGF0ZSgiLG51bGwsbiktMix4OmVhKGgsZil9KSk6ZiYmZC5wdXNoKGkoZCkrInJvdGF0ZSgiK2Yrbil9byhzLCJyb3RhdGUiKTtmdW5jdGlvbiBsKGgsZixkLHApe2ghPT1mP3AucHVzaCh7aTpkLnB1c2goaShkKSsic2tld1goIixudWxsLG4pLTIseDplYShoLGYpfSk6ZiYmZC5wdXNoKGkoZCkrInNrZXdYKCIrZituKX1vKGwsInNrZXdYIik7ZnVuY3Rpb24gdShoLGYsZCxwLG0sZyl7aWYoaCE9PWR8fGYhPT1wKXt2YXIgeT1tLnB1c2goaShtKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOnktNCx4OmVhKGgsZCl9LHtpOnktMix4OmVhKGYscCl9KX1lbHNlKGQhPT0xfHxwIT09MSkmJm0ucHVzaChpKG0pKyJzY2FsZSgiK2QrIiwiK3ArIikiKX1yZXR1cm4gbyh1LCJzY2FsZSIpLGZ1bmN0aW9uKGgsZil7dmFyIGQ9W10scD1bXTtyZXR1cm4gaD10KGgpLGY9dChmKSxhKGgudHJhbnNsYXRlWCxoLnRyYW5zbGF0ZVksZi50cmFuc2xhdGVYLGYudHJhbnNsYXRlWSxkLHApLHMoaC5yb3RhdGUsZi5yb3RhdGUsZCxwKSxsKGguc2tld1gsZi5za2V3WCxkLHApLHUoaC5zY2FsZVgsaC5zY2FsZVksZi5zY2FsZVgsZi5zY2FsZVksZCxwKSxoPWY9bnVsbCxmdW5jdGlvbihtKXtmb3IodmFyIGc9LTEseT1wLmxlbmd0aCx2OysrZzx5OylkWyh2PXBbZ10pLmldPXYueChtKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBCQSxGQSxSVT1NKCgpPT57InVzZSBzdHJpY3QiO1J5KCk7RFUoKTtvKE5VLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIpO0JBPU5VKF9VLCJweCwgIiwicHgpIiwiZGVnKSIpLEZBPU5VKExVLCIsICIsIikiLCIpIil9KTtmdW5jdGlvbiBNVSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10KChlPU55KGUpKS5oLChyPU55KHIpKS5oKSxpPWJ1KGUuYyxyLmMpLGE9YnUoZS5sLHIubCkscz1idShlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGUuaD1uKGwpLGUuYz1pKGwpLGUubD1hKGwpLGUub3BhY2l0eT1zKGwpLGUrIiJ9fX12YXIgekEscHdlLElVPU0oKCk9PnsidXNlIHN0cmljdCI7UHAoKTtMQSgpO28oTVUsImhjbCIpO3pBPU1VKGdVKSxwd2U9TVUoYnUpfSk7dmFyIHpwPU0oKCk9PnsidXNlIHN0cmljdCI7bjMoKTtSeSgpO1NVKCk7UEEoKTtSVSgpO0RBKCk7SVUoKX0pO2Z1bmN0aW9uIEZ5KCl7cmV0dXJuIGRkfHwoQlUobXdlKSxkZD1QeS5ub3coKSt1Myl9ZnVuY3Rpb24gbXdlKCl7ZGQ9MH1mdW5jdGlvbiBCeSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gaDModCxlLHIpe3ZhciBuPW5ldyBCeTtyZXR1cm4gbi5yZXN0YXJ0KHQsZSxyKSxufWZ1bmN0aW9uIEZVKCl7RnkoKSwrK0dwO2Zvcih2YXIgdD1sMyxlO3Q7KShlPWRkLXQuX3RpbWUpPj0wJiZ0Ll9jYWxsLmNhbGwodm9pZCAwLGUpLHQ9dC5fbmV4dDstLUdwfWZ1bmN0aW9uIE9VKCl7ZGQ9KGMzPVB5Lm5vdygpKSt1MyxHcD1JeT0wO3RyeXtGVSgpfWZpbmFsbHl7R3A9MCx5d2UoKSxkZD0wfX1mdW5jdGlvbiBnd2UoKXt2YXIgdD1QeS5ub3coKSxlPXQtYzM7ZT5QVSYmKHUzLT1lLGMzPXQpfWZ1bmN0aW9uIHl3ZSgpe2Zvcih2YXIgdCxlPWwzLHIsbj0xLzA7ZTspZS5fY2FsbD8obj5lLl90aW1lJiYobj1lLl90aW1lKSx0PWUsZT1lLl9uZXh0KToocj1lLl9uZXh0LGUuX25leHQ9bnVsbCxlPXQ/dC5fbmV4dD1yOmwzPXIpO095PXQsR0Eobil9ZnVuY3Rpb24gR0EodCl7aWYoIUdwKXtJeSYmKEl5PWNsZWFyVGltZW91dChJeSkpO3ZhciBlPXQtZGQ7ZT4yND8odDwxLzAmJihJeT1zZXRUaW1lb3V0KE9VLHQtUHkubm93KCktdTMpKSxNeSYmKE15PWNsZWFySW50ZXJ2YWwoTXkpKSk6KE15fHwoYzM9UHkubm93KCksTXk9c2V0SW50ZXJ2YWwoZ3dlLFBVKSksR3A9MSxCVShPVSkpfX12YXIgR3AsSXksTXksUFUsbDMsT3ksYzMsZGQsdTMsUHksQlUsJEE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHcD0wLEl5PTAsTXk9MCxQVT0xZTMsYzM9MCxkZD0wLHUzPTAsUHk9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQlU9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07byhGeSwibm93Iik7byhtd2UsImNsZWFyTm93Iik7byhCeSwiVGltZXIiKTtCeS5wcm90b3R5cGU9aDMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCeSxyZXN0YXJ0Om8oZnVuY3Rpb24odCxlLHIpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9GeSgpOityKSsoZT09bnVsbD8wOitlKSwhdGhpcy5fbmV4dCYmT3khPT10aGlzJiYoT3k/T3kuX25leHQ9dGhpczpsMz10aGlzLE95PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPXIsR0EoKX0sInJlc3RhcnQiKSxzdG9wOm8oZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEdBKCkpfSwic3RvcCIpfTtvKGgzLCJ0aW1lciIpO28oRlUsInRpbWVyRmx1c2giKTtvKE9VLCJ3YWtlIik7byhnd2UsInBva2UiKTtvKHl3ZSwibmFwIik7byhHQSwic2xlZXAiKX0pO2Z1bmN0aW9uIHp5KHQsZSxyKXt2YXIgbj1uZXcgQnk7cmV0dXJuIGU9ZT09bnVsbD8wOitlLG4ucmVzdGFydChpPT57bi5zdG9wKCksdChpK2UpfSxlLHIpLG59dmFyIHpVPU0oKCk9PnsidXNlIHN0cmljdCI7JEEoKTtvKHp5LCJkZWZhdWx0Iil9KTt2YXIgZjM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskQSgpO3pVKCl9KTtmdW5jdGlvbiB3dSh0LGUscixuLGksYSl7dmFyIHM9dC5fX3RyYW5zaXRpb247aWYoIXMpdC5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIHMpcmV0dXJuO2J3ZSh0LHIse25hbWU6ZSxpbmRleDpuLGdyb3VwOmksb246dndlLHR3ZWVuOnh3ZSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpWVX0pfWZ1bmN0aW9uICR5KHQsZSl7dmFyIHI9emkodCxlKTtpZihyLnN0YXRlPlZVKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcGEodCxlKXt2YXIgcj16aSh0LGUpO2lmKHIuc3RhdGU+ZDMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHJ9ZnVuY3Rpb24gemkodCxlKXt2YXIgcj10Ll9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBid2UodCxlLHIpe3ZhciBuPXQuX190cmFuc2l0aW9uLGk7bltlXT1yLHIudGltZXI9aDMoYSwwLHIudGltZSk7ZnVuY3Rpb24gYShoKXtyLnN0YXRlPUdVLHIudGltZXIucmVzdGFydChzLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1oJiZzKGgtci5kZWxheSl9byhhLCJzY2hlZHVsZSIpO2Z1bmN0aW9uIHMoaCl7dmFyIGYsZCxwLG07aWYoci5zdGF0ZSE9PUdVKXJldHVybiB1KCk7Zm9yKGYgaW4gbilpZihtPW5bZl0sbS5uYW1lPT09ci5uYW1lKXtpZihtLnN0YXRlPT09ZDMpcmV0dXJuIHp5KHMpO20uc3RhdGU9PT0kVT8obS5zdGF0ZT1HeSxtLnRpbWVyLnN0b3AoKSxtLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG0uaW5kZXgsbS5ncm91cCksZGVsZXRlIG5bZl0pOitmPGUmJihtLnN0YXRlPUd5LG0udGltZXIuc3RvcCgpLG0ub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sbS5pbmRleCxtLmdyb3VwKSxkZWxldGUgbltmXSl9aWYoenkoZnVuY3Rpb24oKXtyLnN0YXRlPT09ZDMmJihyLnN0YXRlPSRVLHIudGltZXIucmVzdGFydChsLHIuZGVsYXksci50aW1lKSxsKGgpKX0pLHIuc3RhdGU9cDMsci5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksci5zdGF0ZT09PXAzKXtmb3Ioci5zdGF0ZT1kMyxpPW5ldyBBcnJheShwPXIudHdlZW4ubGVuZ3RoKSxmPTAsZD0tMTtmPHA7KytmKShtPXIudHdlZW5bZl0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysrZF09bSk7aS5sZW5ndGg9ZCsxfX1vKHMsInN0YXJ0Iik7ZnVuY3Rpb24gbChoKXtmb3IodmFyIGY9aDxyLmR1cmF0aW9uP3IuZWFzZS5jYWxsKG51bGwsaC9yLmR1cmF0aW9uKTooci50aW1lci5yZXN0YXJ0KHUpLHIuc3RhdGU9bTMsMSksZD0tMSxwPWkubGVuZ3RoOysrZDxwOylpW2RdLmNhbGwodCxmKTtyLnN0YXRlPT09bTMmJihyLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksdSgpKX1vKGwsInRpY2siKTtmdW5jdGlvbiB1KCl7ci5zdGF0ZT1HeSxyLnRpbWVyLnN0b3AoKSxkZWxldGUgbltlXTtmb3IodmFyIGggaW4gbilyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufW8odSwic3RvcCIpfXZhciB2d2UseHdlLFZVLEdVLHAzLGQzLCRVLG0zLEd5LENzPU0oKCk9PnsidXNlIHN0cmljdCI7VDcoKTtmMygpO3Z3ZT13Nygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx4d2U9W10sVlU9MCxHVT0xLHAzPTIsZDM9MywkVT00LG0zPTUsR3k9NjtvKHd1LCJkZWZhdWx0Iik7bygkeSwiaW5pdCIpO28ocGEsInNldCIpO28oemksImdldCIpO28oYndlLCJjcmVhdGUiKX0pO2Z1bmN0aW9uIFZ5KHQsZSl7dmFyIHI9dC5fX3RyYW5zaXRpb24sbixpLGE9ITAscztpZihyKXtlPWU9PW51bGw/bnVsbDplKyIiO2ZvcihzIGluIHIpe2lmKChuPXJbc10pLm5hbWUhPT1lKXthPSExO2NvbnRpbnVlfWk9bi5zdGF0ZT5wMyYmbi5zdGF0ZTxtMyxuLnN0YXRlPUd5LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChpPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW3NdfWEmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19dmFyIFVVPU0oKCk9PnsidXNlIHN0cmljdCI7Q3MoKTtvKFZ5LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWQSh0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7VnkodGhpcyx0KX0pfXZhciBIVT1NKCgpPT57InVzZSBzdHJpY3QiO1VVKCk7byhWQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gd3dlKHQsZSl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1wYSh0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09cil7bj1yPWE7Zm9yKHZhciBzPTAsbD1uLmxlbmd0aDtzPGw7KytzKWlmKG5bc10ubmFtZT09PWUpe249bi5zbGljZSgpLG4uc3BsaWNlKHMsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gVHdlKHQsZSxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1wYSh0aGlzLHQpLHM9YS50d2VlbjtpZihzIT09bil7aT0obj1zKS5zbGljZSgpO2Zvcih2YXIgbD17bmFtZTplLHZhbHVlOnJ9LHU9MCxoPWkubGVuZ3RoO3U8aDsrK3UpaWYoaVt1XS5uYW1lPT09ZSl7aVt1XT1sO2JyZWFrfXU9PT1oJiZpLnB1c2gobCl9YS50d2Vlbj1pfX1mdW5jdGlvbiBVQSh0LGUpe3ZhciByPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXppKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxhPW4ubGVuZ3RoLHM7aTxhOysraSlpZigocz1uW2ldKS5uYW1lPT09dClyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChlPT1udWxsP3d3ZTpUd2UpKHIsdCxlKSl9ZnVuY3Rpb24gJHAodCxlLHIpe3ZhciBuPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgaT1wYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW2VdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIHppKGksbikudmFsdWVbZV19fXZhciBVeT1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byh3d2UsInR3ZWVuUmVtb3ZlIik7byhUd2UsInR3ZWVuRnVuY3Rpb24iKTtvKFVBLCJkZWZhdWx0Iik7bygkcCwidHdlZW5WYWx1ZSIpfSk7ZnVuY3Rpb24gSHkodCxlKXt2YXIgcjtyZXR1cm4odHlwZW9mIGU9PSJudW1iZXIiP2VhOmUgaW5zdGFuY2VvZiBFbD9mZDoocj1FbChlKSk/KGU9cixmZCk6RnApKHQsZSl9dmFyIEhBPU0oKCk9PnsidXNlIHN0cmljdCI7UHAoKTt6cCgpO28oSHksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGt3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gRXdlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gU3dlKHQsZSxyKXt2YXIgbixpPXIrIiIsYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gcz09PWk/bnVsbDpzPT09bj9hOmE9ZShuPXMscil9fWZ1bmN0aW9uIEN3ZSh0LGUscil7dmFyIG4saT1yKyIiLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBzPT09aT9udWxsOnM9PT1uP2E6YT1lKG49cyxyKX19ZnVuY3Rpb24gQXdlKHQsZSxyKXt2YXIgbixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbD1yKHRoaXMpLHU7cmV0dXJuIGw9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KToocz10aGlzLmdldEF0dHJpYnV0ZSh0KSx1PWwrIiIscz09PXU/bnVsbDpzPT09biYmdT09PWk/YTooaT11LGE9ZShuPXMsbCkpKX19ZnVuY3Rpb24gX3dlKHQsZSxyKXt2YXIgbixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbD1yKHRoaXMpLHU7cmV0dXJuIGw9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6KHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpLHU9bCsiIixzPT09dT9udWxsOnM9PT1uJiZ1PT09aT9hOihpPXUsYT1lKG49cyxsKSkpfX1mdW5jdGlvbiBXQSh0LGUpe3ZhciByPXBjKHQpLG49cj09PSJ0cmFuc2Zvcm0iP0ZBOkh5O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LHR5cGVvZiBlPT0iZnVuY3Rpb24iPyhyLmxvY2FsP193ZTpBd2UpKHIsbiwkcCh0aGlzLCJhdHRyLiIrdCxlKSk6ZT09bnVsbD8oci5sb2NhbD9Fd2U6a3dlKShyKTooci5sb2NhbD9Dd2U6U3dlKShyLG4sZSkpfXZhciBXVT1NKCgpPT57InVzZSBzdHJpY3QiO3pwKCk7VGwoKTtVeSgpO0hBKCk7byhrd2UsImF0dHJSZW1vdmUiKTtvKEV3ZSwiYXR0clJlbW92ZU5TIik7byhTd2UsImF0dHJDb25zdGFudCIpO28oQ3dlLCJhdHRyQ29uc3RhbnROUyIpO28oQXdlLCJhdHRyRnVuY3Rpb24iKTtvKF93ZSwiYXR0ckZ1bmN0aW9uTlMiKTtvKFdBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBMd2UodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIER3ZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIE53ZSh0LGUpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09biYmKHI9KG49YSkmJkR3ZSh0LGEpKSxyfXJldHVybiBvKGksInR3ZWVuIiksaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFJ3ZSh0LGUpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09biYmKHI9KG49YSkmJkx3ZSh0LGEpKSxyfXJldHVybiBvKGksInR3ZWVuIiksaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFlBKHQsZSl7dmFyIHI9ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgbj1wYyh0KTtyZXR1cm4gdGhpcy50d2VlbihyLChuLmxvY2FsP053ZTpSd2UpKG4sZSkpfXZhciBZVT1NKCgpPT57InVzZSBzdHJpY3QiO1RsKCk7byhMd2UsImF0dHJJbnRlcnBvbGF0ZSIpO28oRHdlLCJhdHRySW50ZXJwb2xhdGVOUyIpO28oTndlLCJhdHRyVHdlZW5OUyIpO28oUndlLCJhdHRyVHdlZW4iKTtvKFlBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBNd2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXskeSh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSXdlKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXskeSh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIHFBKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/TXdlOkl3ZSkoZSx0KSk6emkodGhpcy5ub2RlKCksZSkuZGVsYXl9dmFyIHFVPU0oKCk9PnsidXNlIHN0cmljdCI7Q3MoKTtvKE13ZSwiZGVsYXlGdW5jdGlvbiIpO28oSXdlLCJkZWxheUNvbnN0YW50Iik7byhxQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gT3dlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cGEodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFB3ZSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7cGEodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBYQSh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP093ZTpQd2UpKGUsdCkpOnppKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufXZhciBYVT1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byhPd2UsImR1cmF0aW9uRnVuY3Rpb24iKTtvKFB3ZSwiZHVyYXRpb25Db25zdGFudCIpO28oWEEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEJ3ZSh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtwYSh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gakEodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKEJ3ZShlLHQpKTp6aSh0aGlzLm5vZGUoKSxlKS5lYXNlfXZhciBqVT1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byhCd2UsImVhc2VDb25zdGFudCIpO28oakEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEZ3ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtwYSh0aGlzLHQpLmVhc2U9cn19ZnVuY3Rpb24gS0EodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goRndlKHRoaXMuX2lkLHQpKX12YXIgS1U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDcygpO28oRndlLCJlYXNlVmFyeWluZyIpO28oS0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFFBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1OcCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPVtdLHUsaD0wO2g8czsrK2gpKHU9YVtoXSkmJnQuY2FsbCh1LHUuX19kYXRhX18saCxhKSYmbC5wdXNoKHUpO3JldHVybiBuZXcgcnMobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBRVT1NKCgpPT57InVzZSBzdHJpY3QiO1RsKCk7cGQoKTtvKFFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBaQSh0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9dC5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1yLmxlbmd0aCxhPU1hdGgubWluKG4saSkscz1uZXcgQXJyYXkobiksbD0wO2w8YTsrK2wpZm9yKHZhciB1PWVbbF0saD1yW2xdLGY9dS5sZW5ndGgsZD1zW2xdPW5ldyBBcnJheShmKSxwLG09MDttPGY7KyttKShwPXVbbV18fGhbbV0pJiYoZFttXT1wKTtmb3IoO2w8bjsrK2wpc1tsXT1lW2xdO3JldHVybiBuZXcgcnMocyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBaVT1NKCgpPT57InVzZSBzdHJpY3QiO3BkKCk7byhaQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gendlKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oZSl7dmFyIHI9ZS5pbmRleE9mKCIuIik7cmV0dXJuIHI+PTAmJihlPWUuc2xpY2UoMCxyKSksIWV8fGU9PT0ic3RhcnQifSl9ZnVuY3Rpb24gR3dlKHQsZSxyKXt2YXIgbixpLGE9endlKGUpPyR5OnBhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWEodGhpcyx0KSxsPXMub247bCE9PW4mJihpPShuPWwpLmNvcHkoKSkub24oZSxyKSxzLm9uPWl9fWZ1bmN0aW9uIEpBKHQsZSl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj96aSh0aGlzLm5vZGUoKSxyKS5vbi5vbih0KTp0aGlzLmVhY2goR3dlKHIsdCxlKSl9dmFyIEpVPU0oKCk9PnsidXNlIHN0cmljdCI7Q3MoKTtvKHp3ZSwic3RhcnQiKTtvKEd3ZSwib25GdW5jdGlvbiIpO28oSkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uICR3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gZTgoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsJHdlKHRoaXMuX2lkKSl9dmFyIGVIPU0oKCk9PnsidXNlIHN0cmljdCI7bygkd2UsInJlbW92ZUZ1bmN0aW9uIik7byhlOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdDgodCl7dmFyIGU9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1FaCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKWZvcih2YXIgbD1uW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLGQscD0wO3A8dTsrK3ApKGY9bFtwXSkmJihkPXQuY2FsbChmLGYuX19kYXRhX18scCxsKSkmJigiX19kYXRhX18iaW4gZiYmKGQuX19kYXRhX189Zi5fX2RhdGFfXyksaFtwXT1kLHd1KGhbcF0sZSxyLHAsaCx6aShmLHIpKSk7cmV0dXJuIG5ldyBycyhhLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgdEg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbCgpO3BkKCk7Q3MoKTtvKHQ4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiByOCh0KXt2YXIgZT10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PURwKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1bXSxzPVtdLGw9MDtsPGk7KytsKWZvcih2YXIgdT1uW2xdLGg9dS5sZW5ndGgsZixkPTA7ZDxoOysrZClpZihmPXVbZF0pe2Zvcih2YXIgcD10LmNhbGwoZixmLl9fZGF0YV9fLGQsdSksbSxnPXppKGYscikseT0wLHY9cC5sZW5ndGg7eTx2OysreSkobT1wW3ldKSYmd3UobSxlLHIseSxwLGcpO2EucHVzaChwKSxzLnB1c2goZil9cmV0dXJuIG5ldyBycyhhLHMsZSxyKX12YXIgckg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbCgpO3BkKCk7Q3MoKTtvKHI4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBuOCgpe3JldHVybiBuZXcgVndlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX12YXIgVndlLG5IPU0oKCk9PnsidXNlIHN0cmljdCI7VGwoKTtWd2U9dnUucHJvdG90eXBlLmNvbnN0cnVjdG9yO28objgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFV3ZSh0LGUpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1TaCh0aGlzLHQpLHM9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksU2godGhpcyx0KSk7cmV0dXJuIGE9PT1zP251bGw6YT09PXImJnM9PT1uP2k6aT1lKHI9YSxuPXMpfX1mdW5jdGlvbiBpSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBId2UodCxlLHIpe3ZhciBuLGk9cisiIixhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVNoKHRoaXMsdCk7cmV0dXJuIHM9PT1pP251bGw6cz09PW4/YTphPWUobj1zLHIpfX1mdW5jdGlvbiBXd2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1TaCh0aGlzLHQpLGw9cih0aGlzKSx1PWwrIiI7cmV0dXJuIGw9PW51bGwmJih1PWw9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksU2godGhpcyx0KSkpLHM9PT11P251bGw6cz09PW4mJnU9PT1pP2E6KGk9dSxhPWUobj1zLGwpKX19ZnVuY3Rpb24gWXdlKHQsZSl7dmFyIHIsbixpLGE9InN0eWxlLiIrZSxzPSJlbmQuIithLGw7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cGEodGhpcyx0KSxoPXUub24sZj11LnZhbHVlW2FdPT1udWxsP2x8fChsPWlIKGUpKTp2b2lkIDA7KGghPT1yfHxpIT09ZikmJihuPShyPWgpLmNvcHkoKSkub24ocyxpPWYpLHUub249bn19ZnVuY3Rpb24gaTgodCxlLHIpe3ZhciBuPSh0Kz0iIik9PSJ0cmFuc2Zvcm0iP0JBOkh5O3JldHVybiBlPT1udWxsP3RoaXMuc3R5bGVUd2Vlbih0LFV3ZSh0LG4pKS5vbigiZW5kLnN0eWxlLiIrdCxpSCh0KSk6dHlwZW9mIGU9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKHQsV3dlKHQsbiwkcCh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKFl3ZSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsSHdlKHQsbixlKSxyKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX12YXIgYUg9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6cCgpO1RsKCk7Q3MoKTtVeSgpO0hBKCk7byhVd2UsInN0eWxlTnVsbCIpO28oaUgsInN0eWxlUmVtb3ZlIik7byhId2UsInN0eWxlQ29uc3RhbnQiKTtvKFd3ZSwic3R5bGVGdW5jdGlvbiIpO28oWXdlLCJzdHlsZU1heWJlUmVtb3ZlIik7byhpOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcXdlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLG4pLHIpfX1mdW5jdGlvbiBYd2UodCxlLHIpe3ZhciBuLGk7ZnVuY3Rpb24gYSgpe3ZhciBzPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBzIT09aSYmKG49KGk9cykmJnF3ZSh0LHMscikpLG59cmV0dXJuIG8oYSwidHdlZW4iKSxhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gYTgodCxlLHIpe3ZhciBuPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sWHdlKHQsZSxyPz8iIikpfXZhciBzSD1NKCgpPT57InVzZSBzdHJpY3QiO28ocXdlLCJzdHlsZUludGVycG9sYXRlIik7byhYd2UsInN0eWxlVHdlZW4iKTtvKGE4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBqd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBLd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PWU/PyIifX1mdW5jdGlvbiBzOCh0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/S3dlKCRwKHRoaXMsInRleHQiLHQpKTpqd2UodD09bnVsbD8iIjp0KyIiKSl9dmFyIG9IPU0oKCk9PnsidXNlIHN0cmljdCI7VXkoKTtvKGp3ZSwidGV4dENvbnN0YW50Iik7byhLd2UsInRleHRGdW5jdGlvbiIpO28oczgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFF3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gWndlKHQpe3ZhciBlLHI7ZnVuY3Rpb24gbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKGU9KHI9aSkmJlF3ZShpKSksZX1yZXR1cm4gbyhuLCJ0d2VlbiIpLG4uX3ZhbHVlPXQsbn1mdW5jdGlvbiBvOCh0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsWndlKHQpKX12YXIgbEg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFF3ZSwidGV4dEludGVycG9sYXRlIik7byhad2UsInRleHRUd2VlbiIpO28obzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGw4KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxyPWczKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLHUsaD0wO2g8bDsrK2gpaWYodT1zW2hdKXt2YXIgZj16aSh1LGUpO3d1KHUsdCxyLGgscyx7dGltZTpmLnRpbWUrZi5kZWxheStmLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Zi5kdXJhdGlvbixlYXNlOmYuZWFzZX0pfXJldHVybiBuZXcgcnMobix0aGlzLl9wYXJlbnRzLHQscil9dmFyIGNIPU0oKCk9PnsidXNlIHN0cmljdCI7cGQoKTtDcygpO28obDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGM4KCl7dmFyIHQsZSxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLHMpe3ZhciBsPXt2YWx1ZTpzfSx1PXt2YWx1ZTpvKGZ1bmN0aW9uKCl7LS1pPT09MCYmYSgpfSwidmFsdWUiKX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9cGEodGhpcyxuKSxmPWgub247ZiE9PXQmJihlPSh0PWYpLmNvcHkoKSxlLl8uY2FuY2VsLnB1c2gobCksZS5fLmludGVycnVwdC5wdXNoKGwpLGUuXy5lbmQucHVzaCh1KSksaC5vbj1lfSksaT09PTAmJmEoKX0pfXZhciB1SD1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byhjOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcnModCxlLHIsbil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIGhIKHQpe3JldHVybiB2dSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gZzMoKXtyZXR1cm4rK0p3ZX12YXIgSndlLFR1LHBkPU0oKCk9PnsidXNlIHN0cmljdCI7VGwoKTtXVSgpO1lVKCk7cVUoKTtYVSgpO2pVKCk7S1UoKTtRVSgpO1pVKCk7SlUoKTtlSCgpO3RIKCk7ckgoKTtuSCgpO2FIKCk7c0goKTtvSCgpO2xIKCk7Y0goKTtVeSgpO3VIKCk7SndlPTA7byhycywiVHJhbnNpdGlvbiIpO28oaEgsInRyYW5zaXRpb24iKTtvKGczLCJuZXdJZCIpO1R1PXZ1LnByb3RvdHlwZTtycy5wcm90b3R5cGU9aEgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpycyxzZWxlY3Q6dDgsc2VsZWN0QWxsOnI4LHNlbGVjdENoaWxkOlR1LnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOlR1LnNlbGVjdENoaWxkcmVuLGZpbHRlcjpRQSxtZXJnZTpaQSxzZWxlY3Rpb246bjgsdHJhbnNpdGlvbjpsOCxjYWxsOlR1LmNhbGwsbm9kZXM6VHUubm9kZXMsbm9kZTpUdS5ub2RlLHNpemU6VHUuc2l6ZSxlbXB0eTpUdS5lbXB0eSxlYWNoOlR1LmVhY2gsb246SkEsYXR0cjpXQSxhdHRyVHdlZW46WUEsc3R5bGU6aTgsc3R5bGVUd2VlbjphOCx0ZXh0OnM4LHRleHRUd2VlbjpvOCxyZW1vdmU6ZTgsdHdlZW46VUEsZGVsYXk6cUEsZHVyYXRpb246WEEsZWFzZTpqQSxlYXNlVmFyeWluZzpLQSxlbmQ6YzgsW1N5bWJvbC5pdGVyYXRvcl06VHVbU3ltYm9sLml0ZXJhdG9yXX19KTtmdW5jdGlvbiB5Myh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn12YXIgZkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHkzLCJjdWJpY0luT3V0Iil9KTt2YXIgdTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmSCgpfSk7ZnVuY3Rpb24gdFRlKHQsZSl7Zm9yKHZhciByOyEocj10Ll9fdHJhbnNpdGlvbil8fCEocj1yW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7ZX0gbm90IGZvdW5kYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaDgodCl7dmFyIGUscjt0IGluc3RhbmNlb2YgcnM/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1nMygpLChyPWVUZSkudGltZT1GeSgpLHQ9dD09bnVsbD9udWxsOnQrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLHUsaD0wO2g8bDsrK2gpKHU9c1toXSkmJnd1KHUsdCxlLGgscyxyfHx0VGUodSxlKSk7cmV0dXJuIG5ldyBycyhuLHRoaXMuX3BhcmVudHMsdCxlKX12YXIgZVRlLGRIPU0oKCk9PnsidXNlIHN0cmljdCI7cGQoKTtDcygpO3U4KCk7ZjMoKTtlVGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnkzfTtvKHRUZSwiaW5oZXJpdCIpO28oaDgsImRlZmF1bHQiKX0pO3ZhciBwSD1NKCgpPT57InVzZSBzdHJpY3QiO1RsKCk7SFUoKTtkSCgpO3Z1LnByb3RvdHlwZS5pbnRlcnJ1cHQ9VkE7dnUucHJvdG90eXBlLnRyYW5zaXRpb249aDh9KTt2YXIgdjM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwSCgpfSk7dmFyIG1IPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgZ0g9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciB5SD1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gdkgodCl7cmV0dXJuWyt0WzBdLCt0WzFdXX1mdW5jdGlvbiByVGUodCl7cmV0dXJuW3ZIKHRbMF0pLHZIKHRbMV0pXX1mdW5jdGlvbiBmOCh0KXtyZXR1cm57dHlwZTp0fX12YXIgQWd0LF9ndCxMZ3QsRGd0LE5ndCxSZ3QseEg9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2MygpO21IKCk7Z0goKTt5SCgpOyh7YWJzOkFndCxtYXg6X2d0LG1pbjpMZ3R9PU1hdGgpO28odkgsIm51bWJlcjEiKTtvKHJUZSwibnVtYmVyMiIpO0RndD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGY4KSxpbnB1dDpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/bnVsbDpbWyt0WzBdLGVbMF1bMV1dLFsrdFsxXSxlWzFdWzFdXV19LCJpbnB1dCIpLG91dHB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX0sIm91dHB1dCIpfSxOZ3Q9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmOCksaW5wdXQ6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSwiaW5wdXQiKSxvdXRwdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19LCJvdXRwdXQiKX0sUmd0PXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChmOCksaW5wdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9udWxsOnJUZSh0KX0sImlucHV0Iiksb3V0cHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHR9LCJvdXRwdXQiKX07byhmOCwidHlwZSIpfSk7dmFyIGJIPU0oKCk9PnsidXNlIHN0cmljdCI7eEgoKX0pO2Z1bmN0aW9uIHdIKHQpe3RoaXMuXys9dFswXTtmb3IobGV0IGU9MSxyPXQubGVuZ3RoO2U8cjsrK2UpdGhpcy5fKz1hcmd1bWVudHNbZV0rdFtlXX1mdW5jdGlvbiBpVGUodCl7bGV0IGU9TWF0aC5mbG9vcih0KTtpZighKGU+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7dH1gKTtpZihlPjE1KXJldHVybiB3SDtsZXQgcj0xMCoqZTtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5fKz1uWzBdO2ZvcihsZXQgaT0xLGE9bi5sZW5ndGg7aTxhOysraSl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2ldKnIpL3IrbltpXX19ZnVuY3Rpb24gVEgoKXtyZXR1cm4gbmV3IGdkfXZhciBkOCxwOCxtZCxuVGUsZ2Qsa0g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkOD1NYXRoLlBJLHA4PTIqZDgsbWQ9MWUtNixuVGU9cDgtbWQ7byh3SCwiYXBwZW5kIik7byhpVGUsImFwcGVuZFJvdW5kIik7Z2Q9Y2xhc3N7c3RhdGlje28odGhpcywiUGF0aCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1lPT1udWxsP3dIOmlUZShlKX1tb3ZlVG8oZSxyKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2V9LCR7dGhpcy5feTA9dGhpcy5feTE9K3J9YH1jbG9zZVBhdGgoKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhlLHIpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rZX0sJHt0aGlzLl95MT0rcn1gfXF1YWRyYXRpY0N1cnZlVG8oZSxyLG4saSl7dGhpcy5fYXBwZW5kYFEkeytlfSwkeytyfSwke3RoaXMuX3gxPStufSwke3RoaXMuX3kxPStpfWB9YmV6aWVyQ3VydmVUbyhlLHIsbixpLGEscyl7dGhpcy5fYXBwZW5kYEMkeytlfSwkeytyfSwkeytufSwkeytpfSwke3RoaXMuX3gxPSthfSwke3RoaXMuX3kxPStzfWB9YXJjVG8oZSxyLG4saSxhKXtpZihlPStlLHI9K3Isbj0rbixpPStpLGE9K2EsYTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2F9YCk7bGV0IHM9dGhpcy5feDEsbD10aGlzLl95MSx1PW4tZSxoPWktcixmPXMtZSxkPWwtcixwPWYqZitkKmQ7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1lfSwke3RoaXMuX3kxPXJ9YDtlbHNlIGlmKHA+bWQpaWYoIShNYXRoLmFicyhkKnUtaCpmKT5tZCl8fCFhKXRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1lfSwke3RoaXMuX3kxPXJ9YDtlbHNle2xldCBtPW4tcyxnPWktbCx5PXUqdStoKmgsdj1tKm0rZypnLHg9TWF0aC5zcXJ0KHkpLGI9TWF0aC5zcXJ0KHApLHc9YSpNYXRoLnRhbigoZDgtTWF0aC5hY29zKCh5K3AtdikvKDIqeCpiKSkpLzIpLF89dy9iLFQ9dy94O01hdGguYWJzKF8tMSk+bWQmJnRoaXMuX2FwcGVuZGBMJHtlK18qZn0sJHtyK18qZH1gLHRoaXMuX2FwcGVuZGBBJHthfSwke2F9LDAsMCwkeysoZCptPmYqZyl9LCR7dGhpcy5feDE9ZStUKnV9LCR7dGhpcy5feTE9citUKmh9YH19YXJjKGUscixuLGksYSxzKXtpZihlPStlLHI9K3Isbj0rbixzPSEhcyxuPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7bn1gKTtsZXQgbD1uKk1hdGguY29zKGkpLHU9bipNYXRoLnNpbihpKSxoPWUrbCxmPXIrdSxkPTFecyxwPXM/aS1hOmEtaTt0aGlzLl94MT09PW51bGw/dGhpcy5fYXBwZW5kYE0ke2h9LCR7Zn1gOihNYXRoLmFicyh0aGlzLl94MS1oKT5tZHx8TWF0aC5hYnModGhpcy5feTEtZik+bWQpJiZ0aGlzLl9hcHBlbmRgTCR7aH0sJHtmfWAsbiYmKHA8MCYmKHA9cCVwOCtwOCkscD5uVGU/dGhpcy5fYXBwZW5kYEEke259LCR7bn0sMCwxLCR7ZH0sJHtlLWx9LCR7ci11fUEke259LCR7bn0sMCwxLCR7ZH0sJHt0aGlzLl94MT1ofSwke3RoaXMuX3kxPWZ9YDpwPm1kJiZ0aGlzLl9hcHBlbmRgQSR7bn0sJHtufSwwLCR7KyhwPj1kOCl9LCR7ZH0sJHt0aGlzLl94MT1lK24qTWF0aC5jb3MoYSl9LCR7dGhpcy5feTE9cituKk1hdGguc2luKGEpfWApfXJlY3QoZSxyLG4saSl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStlfSwke3RoaXMuX3kwPXRoaXMuX3kxPStyfWgke249K259diR7K2l9aCR7LW59WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX07byhUSCwicGF0aCIpO1RILnByb3RvdHlwZT1nZC5wcm90b3R5cGV9KTt2YXIgbTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrSCgpfSk7dmFyIEVIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgU0g9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBDSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEFIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgX0g9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBMSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIERIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBnOCh0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9ZnVuY3Rpb24geWQodCxlKXtpZigocj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj10LnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK3Quc2xpY2UocisxKV19dmFyIFd5PU0oKCk9PnsidXNlIHN0cmljdCI7byhnOCwiZGVmYXVsdCIpO28oeWQsImZvcm1hdERlY2ltYWxQYXJ0cyIpfSk7ZnVuY3Rpb24gU2wodCl7cmV0dXJuIHQ9eWQoTWF0aC5hYnModCkpLHQ/dFsxXTpOYU59dmFyIFl5PU0oKCk9PnsidXNlIHN0cmljdCI7V3koKTtvKFNsLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB5OCh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxhPVtdLHM9MCxsPXRbMF0sdT0wO2k+MCYmbD4wJiYodStsKzE+biYmKGw9TWF0aC5tYXgoMSxuLXUpKSxhLnB1c2goci5zdWJzdHJpbmcoaS09bCxpK2wpKSwhKCh1Kz1sKzEpPm4pKTspbD10W3M9KHMrMSkldC5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKGUpfX12YXIgTkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHk4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB2OCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gdFsrcl19KX19dmFyIFJIPU0oKCk9PnsidXNlIHN0cmljdCI7byh2OCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTGgodCl7aWYoIShlPWFUZS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgeDMoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24geDModCl7dGhpcy5maWxsPXQuZmlsbD09PXZvaWQgMD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dC5hbGlnbj09PXZvaWQgMD8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dC5zaWduPT09dm9pZCAwPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dC5zeW1ib2w9PT12b2lkIDA/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dC53aWR0aD09PXZvaWQgMD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb249PT12b2lkIDA/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXQudHlwZT09PXZvaWQgMD8iIjp0LnR5cGUrIiJ9dmFyIGFUZSx4OD1NKCgpPT57InVzZSBzdHJpY3QiO2FUZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtvKExoLCJmb3JtYXRTcGVjaWZpZXIiKTtMaC5wcm90b3R5cGU9eDMucHJvdG90eXBlO28oeDMsIkZvcm1hdFNwZWNpZmllciIpO3gzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh0aGlzLndpZHRoPT09dm9pZCAwPyIiOk1hdGgubWF4KDEsdGhpcy53aWR0aHwwKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodGhpcy5wcmVjaXNpb249PT12b2lkIDA/IiI6Ii4iK01hdGgubWF4KDAsdGhpcy5wcmVjaXNpb258MCkpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9fSk7ZnVuY3Rpb24gYjgodCl7ZTpmb3IodmFyIGU9dC5sZW5ndGgscj0xLG49LTEsaTtyPGU7KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayBlO24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD90LnNsaWNlKDAsbikrdC5zbGljZShpKzEpOnR9dmFyIE1IPU0oKCk9PnsidXNlIHN0cmljdCI7byhiOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVDgodCxlKXt2YXIgcj15ZCh0LGUpO2lmKCFyKXJldHVybiB0KyIiO3ZhciBuPXJbMF0saT1yWzFdLGE9aS0odzg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLHM9bi5sZW5ndGg7cmV0dXJuIGE9PT1zP246YT5zP24rbmV3IEFycmF5KGEtcysxKS5qb2luKCIwIik6YT4wP24uc2xpY2UoMCxhKSsiLiIrbi5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKSt5ZCh0LE1hdGgubWF4KDAsZSthLTEpKVswXX12YXIgdzgsazg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXeSgpO28oVDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGIzKHQsZSl7dmFyIHI9eWQodCxlKTtpZighcilyZXR1cm4gdCsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgSUg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXeSgpO28oYjMsImRlZmF1bHQiKX0pO3ZhciBFOCxPSD1NKCgpPT57InVzZSBzdHJpY3QiO1d5KCk7azgoKTtJSCgpO0U4PXsiJSI6bygodCxlKT0+KHQqMTAwKS50b0ZpeGVkKGUpLCIlIiksYjpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMiksImIiKSxjOm8odD0+dCsiIiwiYyIpLGQ6ZzgsZTpvKCh0LGUpPT50LnRvRXhwb25lbnRpYWwoZSksImUiKSxmOm8oKHQsZSk9PnQudG9GaXhlZChlKSwiZiIpLGc6bygodCxlKT0+dC50b1ByZWNpc2lvbihlKSwiZyIpLG86byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpLCJvIikscDpvKCh0LGUpPT5iMyh0KjEwMCxlKSwicCIpLHI6YjMsczpUOCxYOm8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiWCIpLHg6byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSwieCIpfX0pO2Z1bmN0aW9uIHczKHQpe3JldHVybiB0fXZhciBQSD1NKCgpPT57InVzZSBzdHJpY3QiO28odzMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFM4KHQpe3ZhciBlPXQuZ3JvdXBpbmc9PT12b2lkIDB8fHQudGhvdXNhbmRzPT09dm9pZCAwP3czOnk4KEJILmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxyPXQuY3VycmVuY3k9PT12b2lkIDA/IiI6dC5jdXJyZW5jeVswXSsiIixuPXQuY3VycmVuY3k9PT12b2lkIDA/IiI6dC5jdXJyZW5jeVsxXSsiIixpPXQuZGVjaW1hbD09PXZvaWQgMD8iLiI6dC5kZWNpbWFsKyIiLGE9dC5udW1lcmFscz09PXZvaWQgMD93Mzp2OChCSC5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSkscz10LnBlcmNlbnQ9PT12b2lkIDA/IiUiOnQucGVyY2VudCsiIixsPXQubWludXM9PT12b2lkIDA/Ilx1MjIxMiI6dC5taW51cysiIix1PXQubmFuPT09dm9pZCAwPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgoZCl7ZD1MaChkKTt2YXIgcD1kLmZpbGwsbT1kLmFsaWduLGc9ZC5zaWduLHk9ZC5zeW1ib2wsdj1kLnplcm8seD1kLndpZHRoLGI9ZC5jb21tYSx3PWQucHJlY2lzaW9uLF89ZC50cmltLFQ9ZC50eXBlO1Q9PT0ibiI/KGI9ITAsVD0iZyIpOkU4W1RdfHwodz09PXZvaWQgMCYmKHc9MTIpLF89ITAsVD0iZyIpLCh2fHxwPT09IjAiJiZtPT09Ij0iKSYmKHY9ITAscD0iMCIsbT0iPSIpO3ZhciBFPXk9PT0iJCI/cjp5PT09IiMiJiYvW2JveFhdLy50ZXN0KFQpPyIwIitULnRvTG93ZXJDYXNlKCk6IiIsTD15PT09IiQiP246L1slcF0vLnRlc3QoVCk/czoiIixTPUU4W1RdLEE9L1tkZWZncHJzJV0vLnRlc3QoVCk7dz13PT09dm9pZCAwPzY6L1tncHJzXS8udGVzdChUKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLHcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLHcpKTtmdW5jdGlvbiBJKEQpe3ZhciBrPUUsUj1MLEMsTyxOO2lmKFQ9PT0iYyIpUj1TKEQpK1IsRD0iIjtlbHNle0Q9K0Q7dmFyIFA9RDwwfHwxL0Q8MDtpZihEPWlzTmFOKEQpP3U6UyhNYXRoLmFicyhEKSx3KSxfJiYoRD1iOChEKSksUCYmK0Q9PTAmJmchPT0iKyImJihQPSExKSxrPShQP2c9PT0iKCI/ZzpsOmc9PT0iLSJ8fGc9PT0iKCI/IiI6ZykrayxSPShUPT09InMiP0ZIWzgrdzgvM106IiIpK1IrKFAmJmc9PT0iKCI/IikiOiIiKSxBKXtmb3IoQz0tMSxPPUQubGVuZ3RoOysrQzxPOylpZihOPUQuY2hhckNvZGVBdChDKSw0OD5OfHxOPjU3KXtSPShOPT09NDY/aStELnNsaWNlKEMrMSk6RC5zbGljZShDKSkrUixEPUQuc2xpY2UoMCxDKTticmVha319fWImJiF2JiYoRD1lKEQsMS8wKSk7dmFyIEY9ay5sZW5ndGgrRC5sZW5ndGgrUi5sZW5ndGgsQj1GPHg/bmV3IEFycmF5KHgtRisxKS5qb2luKHApOiIiO3N3aXRjaChiJiZ2JiYoRD1lKEIrRCxCLmxlbmd0aD94LVIubGVuZ3RoOjEvMCksQj0iIiksbSl7Y2FzZSI8IjpEPWsrRCtSK0I7YnJlYWs7Y2FzZSI9IjpEPWsrQitEK1I7YnJlYWs7Y2FzZSJeIjpEPUIuc2xpY2UoMCxGPUIubGVuZ3RoPj4xKStrK0QrUitCLnNsaWNlKEYpO2JyZWFrO2RlZmF1bHQ6RD1CK2srRCtSO2JyZWFrfXJldHVybiBhKEQpfXJldHVybiBvKEksImZvcm1hdCIpLEkudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZCsiIn0sSX1vKGgsIm5ld0Zvcm1hdCIpO2Z1bmN0aW9uIGYoZCxwKXt2YXIgbT1oKChkPUxoKGQpLGQudHlwZT0iZiIsZCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFNsKHApLzMpKSkqMyx5PU1hdGgucG93KDEwLC1nKSx2PUZIWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIG0oeSp4KSt2fX1yZXR1cm4gbyhmLCJmb3JtYXRQcmVmaXgiKSx7Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ9fXZhciBCSCxGSCx6SD1NKCgpPT57InVzZSBzdHJpY3QiO1l5KCk7TkgoKTtSSCgpO3g4KCk7TUgoKTtPSCgpO2s4KCk7UEgoKTtCSD1BcnJheS5wcm90b3R5cGUubWFwLEZIPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO28oUzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEM4KHQpe3JldHVybiBUMz1TOCh0KSxrMz1UMy5mb3JtYXQsRTM9VDMuZm9ybWF0UHJlZml4LFQzfXZhciBUMyxrMyxFMyxHSD1NKCgpPT57InVzZSBzdHJpY3QiO3pIKCk7Qzgoe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7byhDOCwiZGVmYXVsdExvY2FsZSIpfSk7ZnVuY3Rpb24gUzModCl7cmV0dXJuIE1hdGgubWF4KDAsLVNsKE1hdGguYWJzKHQpKSl9dmFyICRIPU0oKCk9PnsidXNlIHN0cmljdCI7WXkoKTtvKFMzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBDMyh0LGUpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihTbChlKS8zKSkpKjMtU2woTWF0aC5hYnModCkpKX12YXIgVkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZeSgpO28oQzMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEEzKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsU2woZSktU2wodCkpKzF9dmFyIFVIPU0oKCk9PnsidXNlIHN0cmljdCI7WXkoKTtvKEEzLCJkZWZhdWx0Iil9KTt2YXIgQTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHSCgpO3g4KCk7JEgoKTtWSCgpO1VIKCl9KTt2YXIgSEg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBXSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIFlIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgcUg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIERoKHQsZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UoZSkuZG9tYWluKHQpO2JyZWFrfXJldHVybiB0aGlzfXZhciBxeT1NKCgpPT57InVzZSBzdHJpY3QiO28oRGgsImluaXRSYW5nZSIpfSk7ZnVuY3Rpb24ga3UoKXt2YXIgdD1uZXcgX3AsZT1bXSxyPVtdLG49Xzg7ZnVuY3Rpb24gaShhKXtsZXQgcz10LmdldChhKTtpZihzPT09dm9pZCAwKXtpZihuIT09XzgpcmV0dXJuIG47dC5zZXQoYSxzPWUucHVzaChhKS0xKX1yZXR1cm4gcltzJXIubGVuZ3RoXX1yZXR1cm4gbyhpLCJzY2FsZSIpLGkuZG9tYWluPWZ1bmN0aW9uKGEpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PW5ldyBfcDtmb3IobGV0IHMgb2YgYSl0LmhhcyhzKXx8dC5zZXQocyxlLnB1c2gocyktMSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9QXJyYXkuZnJvbShhKSxpKTpyLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hLGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBrdShlLHIpLnVua25vd24obil9LERoLmFwcGx5KGksYXJndW1lbnRzKSxpfXZhciBfOCxMOD1NKCgpPT57InVzZSBzdHJpY3QiO2toKCk7cXkoKTtfOD1TeW1ib2woImltcGxpY2l0Iik7byhrdSwib3JkaW5hbCIpfSk7ZnVuY3Rpb24gVnAoKXt2YXIgdD1rdSgpLnVua25vd24odm9pZCAwKSxlPXQuZG9tYWluLHI9dC5yYW5nZSxuPTAsaT0xLGEscyxsPSExLHU9MCxoPTAsZj0uNTtkZWxldGUgdC51bmtub3duO2Z1bmN0aW9uIGQoKXt2YXIgcD1lKCkubGVuZ3RoLG09aTxuLGc9bT9pOm4seT1tP246aTthPSh5LWcpL01hdGgubWF4KDEscC11K2gqMiksbCYmKGE9TWF0aC5mbG9vcihhKSksZys9KHktZy1hKihwLXUpKSpmLHM9YSooMS11KSxsJiYoZz1NYXRoLnJvdW5kKGcpLHM9TWF0aC5yb3VuZChzKSk7dmFyIHY9SDQocCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBnK2EqeH0pO3JldHVybiByKG0/di5yZXZlcnNlKCk6dil9cmV0dXJuIG8oZCwicmVzY2FsZSIpLHQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlKHApLGQoKSk6ZSgpfSx0LnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbbixpXT1wLG49K24saT0raSxkKCkpOltuLGldfSx0LnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuW24saV09cCxuPStuLGk9K2ksbD0hMCxkKCl9LHQuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LHQuc3RlcD1mdW5jdGlvbigpe3JldHVybiBhfSx0LnJvdW5kPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhcCxkKCkpOmx9LHQucGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1pbigxLGg9K3ApLGQoKSk6dX0sdC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5taW4oMSxwKSxkKCkpOnV9LHQucGFkZGluZ091dGVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStwLGQoKSk6aH0sdC5hbGlnbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEscCkpLGQoKSk6Zn0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZwKGUoKSxbbixpXSkucm91bmQobCkucGFkZGluZ0lubmVyKHUpLnBhZGRpbmdPdXRlcihoKS5hbGlnbihmKX0sRGguYXBwbHkoZCgpLGFyZ3VtZW50cyl9dmFyIFhIPU0oKCk9PnsidXNlIHN0cmljdCI7a2goKTtxeSgpO0w4KCk7byhWcCwiYmFuZCIpfSk7ZnVuY3Rpb24gRDgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBqSD1NKCgpPT57InVzZSBzdHJpY3QiO28oRDgsImNvbnN0YW50cyIpfSk7ZnVuY3Rpb24gTjgodCl7cmV0dXJuK3R9dmFyIEtIPU0oKCk9PnsidXNlIHN0cmljdCI7byhOOCwibnVtYmVyIil9KTtmdW5jdGlvbiBVcCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBSOCh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfTpEOChpc05hTihlKT9OYU46LjUpfWZ1bmN0aW9uIHNUZSh0LGUpe3ZhciByO3JldHVybiB0PmUmJihyPXQsdD1lLGU9ciksZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9fWZ1bmN0aW9uIG9UZSh0LGUscil7dmFyIG49dFswXSxpPXRbMV0sYT1lWzBdLHM9ZVsxXTtyZXR1cm4gaTxuPyhuPVI4KGksbiksYT1yKHMsYSkpOihuPVI4KG4saSksYT1yKGEscykpLGZ1bmN0aW9uKGwpe3JldHVybiBhKG4obCkpfX1mdW5jdGlvbiBsVGUodCxlLHIpe3ZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLHM9LTE7Zm9yKHRbbl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxuOylpW3NdPVI4KHRbc10sdFtzKzFdKSxhW3NdPXIoZVtzXSxlW3MrMV0pO3JldHVybiBmdW5jdGlvbihsKXt2YXIgdT1tNyh0LGwsMSxuKS0xO3JldHVybiBhW3VdKGlbdV0obCkpfX1mdW5jdGlvbiBfMyh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBjVGUoKXt2YXIgdD1RSCxlPVFILHI9X2gsbixpLGEscz1VcCxsLHUsaDtmdW5jdGlvbiBmKCl7dmFyIHA9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO3JldHVybiBzIT09VXAmJihzPXNUZSh0WzBdLHRbcC0xXSkpLGw9cD4yP2xUZTpvVGUsdT1oPW51bGwsZH1vKGYsInJlc2NhbGUiKTtmdW5jdGlvbiBkKHApe3JldHVybiBwPT1udWxsfHxpc05hTihwPStwKT9hOih1fHwodT1sKHQubWFwKG4pLGUscikpKShuKHMocCkpKX1yZXR1cm4gbyhkLCJzY2FsZSIpLGQuaW52ZXJ0PWZ1bmN0aW9uKHApe3JldHVybiBzKGkoKGh8fChoPWwoZSx0Lm1hcChuKSxlYSkpKShwKSkpfSxkLmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BcnJheS5mcm9tKHAsTjgpLGYoKSk6dC5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUFycmF5LmZyb20ocCksZigpKTplLnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gZT1BcnJheS5mcm9tKHApLHI9aTMsZigpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/ITA6VXAsZigpKTpzIT09VXB9LGQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cCxmKCkpOnJ9LGQudW5rbm93bj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1wLGQpOmF9LGZ1bmN0aW9uKHAsbSl7cmV0dXJuIG49cCxpPW0sZigpfX1mdW5jdGlvbiBYeSgpe3JldHVybiBjVGUoKShVcCxVcCl9dmFyIFFILE04PU0oKCk9PnsidXNlIHN0cmljdCI7a2goKTt6cCgpO2pIKCk7S0goKTtRSD1bMCwxXTtvKFVwLCJpZGVudGl0eSIpO28oUjgsIm5vcm1hbGl6ZSIpO28oc1RlLCJjbGFtcGVyIik7byhvVGUsImJpbWFwIik7byhsVGUsInBvbHltYXAiKTtvKF8zLCJjb3B5Iik7byhjVGUsInRyYW5zZm9ybWVyIik7byhYeSwiY29udGludW91cyIpfSk7ZnVuY3Rpb24gSTgodCxlLHIsbil7dmFyIGk9THAodCxlLHIpLGE7c3dpdGNoKG49TGgobj8/IixmIiksbi50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSk7cmV0dXJuIG4ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1DMyhpLHMpKSYmKG4ucHJlY2lzaW9uPWEpLEUzKG4scyl9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e24ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1BMyhpLE1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKSkpJiYobi5wcmVjaXNpb249YS0obi50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9UzMoaSkpJiYobi5wcmVjaXNpb249YS0obi50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGszKG4pfXZhciBaSD1NKCgpPT57InVzZSBzdHJpY3QiO2toKCk7QTgoKTtvKEk4LCJ0aWNrRm9ybWF0Iil9KTtmdW5jdGlvbiB1VGUodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24ocil7dmFyIG49ZSgpO3JldHVybiAkNChuWzBdLG5bbi5sZW5ndGgtMV0scj8/MTApfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1lKCk7cmV0dXJuIEk4KGlbMF0saVtpLmxlbmd0aC0xXSxyPz8xMCxuKX0sdC5uaWNlPWZ1bmN0aW9uKHIpe3I9PW51bGwmJihyPTEwKTt2YXIgbj1lKCksaT0wLGE9bi5sZW5ndGgtMSxzPW5baV0sbD1uW2FdLHUsaCxmPTEwO2ZvcihsPHMmJihoPXMscz1sLGw9aCxoPWksaT1hLGE9aCk7Zi0tID4wOyl7aWYoaD1reShzLGwsciksaD09PXUpcmV0dXJuIG5baV09cyxuW2FdPWwsZShuKTtpZihoPjApcz1NYXRoLmZsb29yKHMvaCkqaCxsPU1hdGguY2VpbChsL2gpKmg7ZWxzZSBpZihoPDApcz1NYXRoLmNlaWwocypoKS9oLGw9TWF0aC5mbG9vcihsKmgpL2g7ZWxzZSBicmVhazt1PWh9cmV0dXJuIHR9LHR9ZnVuY3Rpb24gQ2woKXt2YXIgdD1YeSgpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gXzModCxDbCgpKX0sRGguYXBwbHkodCxhcmd1bWVudHMpLHVUZSh0KX12YXIgSkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtraCgpO004KCk7cXkoKTtaSCgpO28odVRlLCJsaW5lYXJpc2giKTtvKENsLCJsaW5lYXIiKX0pO2Z1bmN0aW9uIE84KHQsZSl7dD10LnNsaWNlKCk7dmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10W3JdLGE9dFtuXSxzO3JldHVybiBhPGkmJihzPXIscj1uLG49cyxzPWksaT1hLGE9cyksdFtyXT1lLmZsb29yKGkpLHRbbl09ZS5jZWlsKGEpLHR9dmFyIGVXPU0oKCk9PnsidXNlIHN0cmljdCI7byhPOCwibmljZSIpfSk7ZnVuY3Rpb24gdm4odCxlLHIsbil7ZnVuY3Rpb24gaShhKXtyZXR1cm4gdChhPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCthKSksYX1yZXR1cm4gbyhpLCJpbnRlcnZhbCIpLGkuZmxvb3I9YT0+KHQoYT1uZXcgRGF0ZSgrYSkpLGEpLGkuY2VpbD1hPT4odChhPW5ldyBEYXRlKGEtMSkpLGUoYSwxKSx0KGEpLGEpLGkucm91bmQ9YT0+e2xldCBzPWkoYSksbD1pLmNlaWwoYSk7cmV0dXJuIGEtczxsLWE/czpsfSxpLm9mZnNldD0oYSxzKT0+KGUoYT1uZXcgRGF0ZSgrYSkscz09bnVsbD8xOk1hdGguZmxvb3IocykpLGEpLGkucmFuZ2U9KGEscyxsKT0+e2xldCB1PVtdO2lmKGE9aS5jZWlsKGEpLGw9bD09bnVsbD8xOk1hdGguZmxvb3IobCksIShhPHMpfHwhKGw+MCkpcmV0dXJuIHU7bGV0IGg7ZG8gdS5wdXNoKGg9bmV3IERhdGUoK2EpKSxlKGEsbCksdChhKTt3aGlsZShoPGEmJmE8cyk7cmV0dXJuIHV9LGkuZmlsdGVyPWE9PnZuKHM9PntpZihzPj1zKWZvcig7dChzKSwhYShzKTspcy5zZXRUaW1lKHMtMSl9LChzLGwpPT57aWYocz49cylpZihsPDApZm9yKDsrK2w8PTA7KWZvcig7ZShzLC0xKSwhYShzKTspO2Vsc2UgZm9yKDstLWw+PTA7KWZvcig7ZShzLDEpLCFhKHMpOyk7fSksciYmKGkuY291bnQ9KGEscyk9PihQOC5zZXRUaW1lKCthKSxCOC5zZXRUaW1lKCtzKSx0KFA4KSx0KEI4KSxNYXRoLmZsb29yKHIoUDgsQjgpKSksaS5ldmVyeT1hPT4oYT1NYXRoLmZsb29yKGEpLCFpc0Zpbml0ZShhKXx8IShhPjApP251bGw6YT4xP2kuZmlsdGVyKG4/cz0+bihzKSVhPT09MDpzPT5pLmNvdW50KDAscyklYT09PTApOmkpKSxpfXZhciBQOCxCOCxFdT1NKCgpPT57InVzZSBzdHJpY3QiO1A4PW5ldyBEYXRlLEI4PW5ldyBEYXRlO28odm4sInRpbWVJbnRlcnZhbCIpfSk7dmFyIHljLHRXLEY4PU0oKCk9PnsidXNlIHN0cmljdCI7RXUoKTt5Yz12bigoKT0+e30sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSl9LCh0LGUpPT5lLXQpO3ljLmV2ZXJ5PXQ9Pih0PU1hdGguZmxvb3IodCksIWlzRmluaXRlKHQpfHwhKHQ+MCk/bnVsbDp0PjE/dm4oZT0+e2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9LChlLHIpPT57ZS5zZXRUaW1lKCtlK3IqdCl9LChlLHIpPT4oci1lKS90KTp5Yyk7dFc9eWMucmFuZ2V9KTt2YXIgdG8sclcsejg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdSgpO3RvPXZuKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSoxZTMpfSwodCxlKT0+KGUtdCkvMWUzLHQ9PnQuZ2V0VVRDU2Vjb25kcygpKSxyVz10by5yYW5nZX0pO3ZhciBTdSxoVGUsTDMsZlRlLEc4PU0oKCk9PnsidXNlIHN0cmljdCI7RXUoKTtTdT12bih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSoxZTMpfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjZlNCl9LCh0LGUpPT4oZS10KS82ZTQsdD0+dC5nZXRNaW51dGVzKCkpLGhUZT1TdS5yYW5nZSxMMz12bih0PT57dC5zZXRVVENTZWNvbmRzKDAsMCl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqNmU0KX0sKHQsZSk9PihlLXQpLzZlNCx0PT50LmdldFVUQ01pbnV0ZXMoKSksZlRlPUwzLnJhbmdlfSk7dmFyIEN1LGRUZSxEMyxwVGUsJDg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdSgpO0N1PXZuKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKjFlMy10LmdldE1pbnV0ZXMoKSo2ZTQpfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjM2ZTUpfSwodCxlKT0+KGUtdCkvMzZlNSx0PT50LmdldEhvdXJzKCkpLGRUZT1DdS5yYW5nZSxEMz12bih0PT57dC5zZXRVVENNaW51dGVzKDAsMCwwKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSozNmU1KX0sKHQsZSk9PihlLXQpLzM2ZTUsdD0+dC5nZXRVVENIb3VycygpKSxwVGU9RDMucmFuZ2V9KTt2YXIgT28sbVRlLEt5LGdUZSxOMyx5VGUsVjg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdSgpO09vPXZuKHQ9PnQuc2V0SG91cnMoMCwwLDAsMCksKHQsZSk9PnQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSwodCxlKT0+KGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqNmU0KS84NjRlNSx0PT50LmdldERhdGUoKS0xKSxtVGU9T28ucmFuZ2UsS3k9dm4odD0+e3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSwodCxlKT0+KGUtdCkvODY0ZTUsdD0+dC5nZXRVVENEYXRlKCktMSksZ1RlPUt5LnJhbmdlLE4zPXZuKHQ9Pnt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sKHQsZSk9PihlLXQpLzg2NGU1LHQ9Pk1hdGguZmxvb3IodC84NjRlNSkpLHlUZT1OMy5yYW5nZX0pO2Z1bmN0aW9uIGJkKHQpe3JldHVybiB2bihlPT57ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0sKGUscik9PntlLnNldERhdGUoZS5nZXREYXRlKCkrcio3KX0sKGUscik9PihyLWUtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKjZlNCkvNjA0OGU1KX1mdW5jdGlvbiB3ZCh0KXtyZXR1cm4gdm4oZT0+e2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3IqNyl9LChlLHIpPT4oci1lKS82MDQ4ZTUpfXZhciBBbCxOaCxSMyxNMyx4YyxJMyxPMyxpVyx2VGUseFRlLGJUZSx3VGUsVFRlLGtUZSxUZCxIcCxhVyxzVyxSaCxvVyxsVyxjVyxFVGUsU1RlLENUZSxBVGUsX1RlLExUZSxVOD1NKCgpPT57InVzZSBzdHJpY3QiO0V1KCk7byhiZCwidGltZVdlZWtkYXkiKTtBbD1iZCgwKSxOaD1iZCgxKSxSMz1iZCgyKSxNMz1iZCgzKSx4Yz1iZCg0KSxJMz1iZCg1KSxPMz1iZCg2KSxpVz1BbC5yYW5nZSx2VGU9TmgucmFuZ2UseFRlPVIzLnJhbmdlLGJUZT1NMy5yYW5nZSx3VGU9eGMucmFuZ2UsVFRlPUkzLnJhbmdlLGtUZT1PMy5yYW5nZTtvKHdkLCJ1dGNXZWVrZGF5Iik7VGQ9d2QoMCksSHA9d2QoMSksYVc9d2QoMiksc1c9d2QoMyksUmg9d2QoNCksb1c9d2QoNSksbFc9d2QoNiksY1c9VGQucmFuZ2UsRVRlPUhwLnJhbmdlLFNUZT1hVy5yYW5nZSxDVGU9c1cucmFuZ2UsQVRlPVJoLnJhbmdlLF9UZT1vVy5yYW5nZSxMVGU9bFcucmFuZ2V9KTt2YXIgQXUsRFRlLFAzLE5UZSxIOD1NKCgpPT57InVzZSBzdHJpY3QiO0V1KCk7QXU9dm4odD0+e3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSwodCxlKT0+ZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsoZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSkqMTIsdD0+dC5nZXRNb250aCgpKSxEVGU9QXUucmFuZ2UsUDM9dm4odD0+e3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSwodCxlKT0+ZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsoZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSkqMTIsdD0+dC5nZXRVVENNb250aCgpKSxOVGU9UDMucmFuZ2V9KTt2YXIgcm8sUlRlLF9sLE1UZSxXOD1NKCgpPT57InVzZSBzdHJpY3QiO0V1KCk7cm89dm4odD0+e3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSwodCxlKT0+ZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSx0PT50LmdldEZ1bGxZZWFyKCkpO3JvLmV2ZXJ5PXQ9PiFpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpfHwhKHQ+MCk/bnVsbDp2bihlPT57ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sKGUscik9PntlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStyKnQpfSk7UlRlPXJvLnJhbmdlLF9sPXZuKHQ9Pnt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0sKHQsZSk9PmUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCksdD0+dC5nZXRVVENGdWxsWWVhcigpKTtfbC5ldmVyeT10PT4haXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKXx8ISh0PjApP251bGw6dm4oZT0+e2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrcip0KX0pO01UZT1fbC5yYW5nZX0pO2Z1bmN0aW9uIGhXKHQsZSxyLG4saSxhKXtsZXQgcz1bW3RvLDEsMWUzXSxbdG8sNSw1KjFlM10sW3RvLDE1LDE1KjFlM10sW3RvLDMwLDMwKjFlM10sW2EsMSw2ZTRdLFthLDUsNSo2ZTRdLFthLDE1LDE1KjZlNF0sW2EsMzAsMzAqNmU0XSxbaSwxLDM2ZTVdLFtpLDMsMyozNmU1XSxbaSw2LDYqMzZlNV0sW2ksMTIsMTIqMzZlNV0sW24sMSw4NjRlNV0sW24sMiwyKjg2NGU1XSxbciwxLDYwNDhlNV0sW2UsMSwyNTkyZTZdLFtlLDMsMyoyNTkyZTZdLFt0LDEsMzE1MzZlNl1dO2Z1bmN0aW9uIGwoaCxmLGQpe2xldCBwPWY8aDtwJiYoW2gsZl09W2YsaF0pO2xldCBtPWQmJnR5cGVvZiBkLnJhbmdlPT0iZnVuY3Rpb24iP2Q6dShoLGYsZCksZz1tP20ucmFuZ2UoaCwrZisxKTpbXTtyZXR1cm4gcD9nLnJldmVyc2UoKTpnfW8obCwidGlja3MiKTtmdW5jdGlvbiB1KGgsZixkKXtsZXQgcD1NYXRoLmFicyhmLWgpL2QsbT1jZCgoWywsdl0pPT52KS5yaWdodChzLHApO2lmKG09PT1zLmxlbmd0aClyZXR1cm4gdC5ldmVyeShMcChoLzMxNTM2ZTYsZi8zMTUzNmU2LGQpKTtpZihtPT09MClyZXR1cm4geWMuZXZlcnkoTWF0aC5tYXgoTHAoaCxmLGQpLDEpKTtsZXRbZyx5XT1zW3Avc1ttLTFdWzJdPHNbbV1bMl0vcD9tLTE6bV07cmV0dXJuIGcuZXZlcnkoeSl9cmV0dXJuIG8odSwidGlja0ludGVydmFsIiksW2wsdV19dmFyIE9UZSxQVGUsWTgscTgsZlc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtraCgpO0Y4KCk7ejgoKTtHOCgpOyQ4KCk7VjgoKTtVOCgpO0g4KCk7VzgoKTtvKGhXLCJ0aWNrZXIiKTtbT1RlLFBUZV09aFcoX2wsUDMsVGQsTjMsRDMsTDMpLFtZOCxxOF09aFcocm8sQXUsQWwsT28sQ3UsU3UpfSk7dmFyIEIzPU0oKCk9PnsidXNlIHN0cmljdCI7RjgoKTt6OCgpO0c4KCk7JDgoKTtWOCgpO1U4KCk7SDgoKTtXOCgpO2ZXKCl9KTtmdW5jdGlvbiBYOCh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gajgodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gUXkodCxlLHIpe3JldHVybnt5OnQsbTplLGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIEs4KHQpe3ZhciBlPXQuZGF0ZVRpbWUscj10LmRhdGUsbj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMscz10LnNob3J0RGF5cyxsPXQubW9udGhzLHU9dC5zaG9ydE1vbnRocyxoPVp5KGkpLGY9SnkoaSksZD1aeShhKSxwPUp5KGEpLG09WnkocyksZz1KeShzKSx5PVp5KGwpLHY9SnkobCkseD1aeSh1KSxiPUp5KHUpLHc9e2E6UCxBOkYsYjpCLEI6RyxjOm51bGwsZDp2VyxlOnZXLGY6YWtlLGc6bWtlLEc6eWtlLEg6cmtlLEk6bmtlLGo6aWtlLEw6a1csbTpza2UsTTpva2UscDp6LHE6VyxROndXLHM6VFcsUzpsa2UsdTpja2UsVTp1a2UsVjpoa2Usdzpma2UsVzpka2UseDpudWxsLFg6bnVsbCx5OnBrZSxZOmdrZSxaOnZrZSwiJSI6Yld9LF89e2E6WixBOmosYjpvZSxCOkssYzpudWxsLGQ6eFcsZTp4VyxmOlRrZSxnOlJrZSxHOklrZSxIOnhrZSxJOmJrZSxqOndrZSxMOlNXLG06a2tlLE06RWtlLHA6ZWUscTpKLFE6d1csczpUVyxTOlNrZSx1OkNrZSxVOkFrZSxWOl9rZSx3OkxrZSxXOkRrZSx4Om51bGwsWDpudWxsLHk6TmtlLFk6TWtlLFo6T2tlLCIlIjpiV30sVD17YTpJLEE6RCxiOmssQjpSLGM6QyxkOmdXLGU6Z1csZjpaVGUsZzptVyxHOnBXLEg6eVcsSTp5VyxqOlhUZSxMOlFUZSxtOnFUZSxNOmpUZSxwOkEscTpZVGUsUTpla2Usczp0a2UsUzpLVGUsdTokVGUsVTpWVGUsVjpVVGUsdzpHVGUsVzpIVGUseDpPLFg6Tix5Om1XLFk6cFcsWjpXVGUsIiUiOkpUZX07dy54PUUocix3KSx3Llg9RShuLHcpLHcuYz1FKGUsdyksXy54PUUocixfKSxfLlg9RShuLF8pLF8uYz1FKGUsXyk7ZnVuY3Rpb24gRShILHEpe3JldHVybiBmdW5jdGlvbihRKXt2YXIgYWU9W10sdWU9LTEsY2U9MCx0ZT1ILmxlbmd0aCxOZSxzZSxrZTtmb3IoUSBpbnN0YW5jZW9mIERhdGV8fChRPW5ldyBEYXRlKCtRKSk7Kyt1ZTx0ZTspSC5jaGFyQ29kZUF0KHVlKT09PTM3JiYoYWUucHVzaChILnNsaWNlKGNlLHVlKSksKHNlPWRXW05lPUguY2hhckF0KCsrdWUpXSkhPW51bGw/TmU9SC5jaGFyQXQoKyt1ZSk6c2U9TmU9PT0iZSI/IiAiOiIwIiwoa2U9cVtOZV0pJiYoTmU9a2UoUSxzZSkpLGFlLnB1c2goTmUpLGNlPXVlKzEpO3JldHVybiBhZS5wdXNoKEguc2xpY2UoY2UsdWUpKSxhZS5qb2luKCIiKX19byhFLCJuZXdGb3JtYXQiKTtmdW5jdGlvbiBMKEgscSl7cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciBhZT1ReSgxOTAwLHZvaWQgMCwxKSx1ZT1TKGFlLEgsUSs9IiIsMCksY2UsdGU7aWYodWUhPVEubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGFlKXJldHVybiBuZXcgRGF0ZShhZS5RKTtpZigicyJpbiBhZSlyZXR1cm4gbmV3IERhdGUoYWUucyoxZTMrKCJMImluIGFlP2FlLkw6MCkpO2lmKHEmJiEoIloiaW4gYWUpJiYoYWUuWj0wKSwicCJpbiBhZSYmKGFlLkg9YWUuSCUxMithZS5wKjEyKSxhZS5tPT09dm9pZCAwJiYoYWUubT0icSJpbiBhZT9hZS5xOjApLCJWImluIGFlKXtpZihhZS5WPDF8fGFlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYWV8fChhZS53PTEpLCJaImluIGFlPyhjZT1qOChReShhZS55LDAsMSkpLHRlPWNlLmdldFVUQ0RheSgpLGNlPXRlPjR8fHRlPT09MD9IcC5jZWlsKGNlKTpIcChjZSksY2U9S3kub2Zmc2V0KGNlLChhZS5WLTEpKjcpLGFlLnk9Y2UuZ2V0VVRDRnVsbFllYXIoKSxhZS5tPWNlLmdldFVUQ01vbnRoKCksYWUuZD1jZS5nZXRVVENEYXRlKCkrKGFlLncrNiklNyk6KGNlPVg4KFF5KGFlLnksMCwxKSksdGU9Y2UuZ2V0RGF5KCksY2U9dGU+NHx8dGU9PT0wP05oLmNlaWwoY2UpOk5oKGNlKSxjZT1Pby5vZmZzZXQoY2UsKGFlLlYtMSkqNyksYWUueT1jZS5nZXRGdWxsWWVhcigpLGFlLm09Y2UuZ2V0TW9udGgoKSxhZS5kPWNlLmdldERhdGUoKSsoYWUudys2KSU3KX1lbHNlKCJXImluIGFlfHwiVSJpbiBhZSkmJigidyJpbiBhZXx8KGFlLnc9InUiaW4gYWU/YWUudSU3OiJXImluIGFlPzE6MCksdGU9IloiaW4gYWU/ajgoUXkoYWUueSwwLDEpKS5nZXRVVENEYXkoKTpYOChReShhZS55LDAsMSkpLmdldERheSgpLGFlLm09MCxhZS5kPSJXImluIGFlPyhhZS53KzYpJTcrYWUuVyo3LSh0ZSs1KSU3OmFlLncrYWUuVSo3LSh0ZSs2KSU3KTtyZXR1cm4iWiJpbiBhZT8oYWUuSCs9YWUuWi8xMDB8MCxhZS5NKz1hZS5aJTEwMCxqOChhZSkpOlg4KGFlKX19byhMLCJuZXdQYXJzZSIpO2Z1bmN0aW9uIFMoSCxxLFEsYWUpe2Zvcih2YXIgdWU9MCxjZT1xLmxlbmd0aCx0ZT1RLmxlbmd0aCxOZSxzZTt1ZTxjZTspe2lmKGFlPj10ZSlyZXR1cm4tMTtpZihOZT1xLmNoYXJDb2RlQXQodWUrKyksTmU9PT0zNyl7aWYoTmU9cS5jaGFyQXQodWUrKyksc2U9VFtOZSBpbiBkVz9xLmNoYXJBdCh1ZSsrKTpOZV0sIXNlfHwoYWU9c2UoSCxRLGFlKSk8MClyZXR1cm4tMX1lbHNlIGlmKE5lIT1RLmNoYXJDb2RlQXQoYWUrKykpcmV0dXJuLTF9cmV0dXJuIGFlfW8oUywicGFyc2VTcGVjaWZpZXIiKTtmdW5jdGlvbiBBKEgscSxRKXt2YXIgYWU9aC5leGVjKHEuc2xpY2UoUSkpO3JldHVybiBhZT8oSC5wPWYuZ2V0KGFlWzBdLnRvTG93ZXJDYXNlKCkpLFErYWVbMF0ubGVuZ3RoKTotMX1vKEEsInBhcnNlUGVyaW9kIik7ZnVuY3Rpb24gSShILHEsUSl7dmFyIGFlPW0uZXhlYyhxLnNsaWNlKFEpKTtyZXR1cm4gYWU/KEgudz1nLmdldChhZVswXS50b0xvd2VyQ2FzZSgpKSxRK2FlWzBdLmxlbmd0aCk6LTF9byhJLCJwYXJzZVNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIEQoSCxxLFEpe3ZhciBhZT1kLmV4ZWMocS5zbGljZShRKSk7cmV0dXJuIGFlPyhILnc9cC5nZXQoYWVbMF0udG9Mb3dlckNhc2UoKSksUSthZVswXS5sZW5ndGgpOi0xfW8oRCwicGFyc2VXZWVrZGF5Iik7ZnVuY3Rpb24gayhILHEsUSl7dmFyIGFlPXguZXhlYyhxLnNsaWNlKFEpKTtyZXR1cm4gYWU/KEgubT1iLmdldChhZVswXS50b0xvd2VyQ2FzZSgpKSxRK2FlWzBdLmxlbmd0aCk6LTF9byhrLCJwYXJzZVNob3J0TW9udGgiKTtmdW5jdGlvbiBSKEgscSxRKXt2YXIgYWU9eS5leGVjKHEuc2xpY2UoUSkpO3JldHVybiBhZT8oSC5tPXYuZ2V0KGFlWzBdLnRvTG93ZXJDYXNlKCkpLFErYWVbMF0ubGVuZ3RoKTotMX1vKFIsInBhcnNlTW9udGgiKTtmdW5jdGlvbiBDKEgscSxRKXtyZXR1cm4gUyhILGUscSxRKX1vKEMsInBhcnNlTG9jYWxlRGF0ZVRpbWUiKTtmdW5jdGlvbiBPKEgscSxRKXtyZXR1cm4gUyhILHIscSxRKX1vKE8sInBhcnNlTG9jYWxlRGF0ZSIpO2Z1bmN0aW9uIE4oSCxxLFEpe3JldHVybiBTKEgsbixxLFEpfW8oTiwicGFyc2VMb2NhbGVUaW1lIik7ZnVuY3Rpb24gUChIKXtyZXR1cm4gc1tILmdldERheSgpXX1vKFAsImZvcm1hdFNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIEYoSCl7cmV0dXJuIGFbSC5nZXREYXkoKV19byhGLCJmb3JtYXRXZWVrZGF5Iik7ZnVuY3Rpb24gQihIKXtyZXR1cm4gdVtILmdldE1vbnRoKCldfW8oQiwiZm9ybWF0U2hvcnRNb250aCIpO2Z1bmN0aW9uIEcoSCl7cmV0dXJuIGxbSC5nZXRNb250aCgpXX1vKEcsImZvcm1hdE1vbnRoIik7ZnVuY3Rpb24geihIKXtyZXR1cm4gaVsrKEguZ2V0SG91cnMoKT49MTIpXX1vKHosImZvcm1hdFBlcmlvZCIpO2Z1bmN0aW9uIFcoSCl7cmV0dXJuIDErfn4oSC5nZXRNb250aCgpLzMpfW8oVywiZm9ybWF0UXVhcnRlciIpO2Z1bmN0aW9uIFooSCl7cmV0dXJuIHNbSC5nZXRVVENEYXkoKV19byhaLCJmb3JtYXRVVENTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBqKEgpe3JldHVybiBhW0guZ2V0VVRDRGF5KCldfW8oaiwiZm9ybWF0VVRDV2Vla2RheSIpO2Z1bmN0aW9uIG9lKEgpe3JldHVybiB1W0guZ2V0VVRDTW9udGgoKV19byhvZSwiZm9ybWF0VVRDU2hvcnRNb250aCIpO2Z1bmN0aW9uIEsoSCl7cmV0dXJuIGxbSC5nZXRVVENNb250aCgpXX1vKEssImZvcm1hdFVUQ01vbnRoIik7ZnVuY3Rpb24gZWUoSCl7cmV0dXJuIGlbKyhILmdldFVUQ0hvdXJzKCk+PTEyKV19byhlZSwiZm9ybWF0VVRDUGVyaW9kIik7ZnVuY3Rpb24gSihIKXtyZXR1cm4gMSt+fihILmdldFVUQ01vbnRoKCkvMyl9cmV0dXJuIG8oSiwiZm9ybWF0VVRDUXVhcnRlciIpLHtmb3JtYXQ6byhmdW5jdGlvbihIKXt2YXIgcT1FKEgrPSIiLHcpO3JldHVybiBxLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEh9LHF9LCJmb3JtYXQiKSxwYXJzZTpvKGZ1bmN0aW9uKEgpe3ZhciBxPUwoSCs9IiIsITEpO3JldHVybiBxLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEh9LHF9LCJwYXJzZSIpLHV0Y0Zvcm1hdDpvKGZ1bmN0aW9uKEgpe3ZhciBxPUUoSCs9IiIsXyk7cmV0dXJuIHEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSH0scX0sInV0Y0Zvcm1hdCIpLHV0Y1BhcnNlOm8oZnVuY3Rpb24oSCl7dmFyIHE9TChIKz0iIiwhMCk7cmV0dXJuIHEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSH0scX0sInV0Y1BhcnNlIil9fWZ1bmN0aW9uIEhyKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHpUZSh0KXtyZXR1cm4gdC5yZXBsYWNlKEZUZSwiXFwkJiIpfWZ1bmN0aW9uIFp5KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcCh6VGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBKeSh0KXtyZXR1cm4gbmV3IE1hcCh0Lm1hcCgoZSxyKT0+W2UudG9Mb3dlckNhc2UoKSxyXSkpfWZ1bmN0aW9uIEdUZSh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0LnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVlRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVUZSh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Llc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcFcodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbVcodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXVGUodCxlLHIpe3ZhciBuPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5aPW5bMV0/MDotKG5bMl0rKG5bM118fCIwMCIpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0LnE9blswXSozLTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcVRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBnVyh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lm09MCx0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geVcodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24galRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtUZSh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWlRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEpUZSh0LGUscil7dmFyIG49QlRlLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gZWtlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdGtlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdlcodCxlKXtyZXR1cm4gSHIodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBya2UodCxlKXtyZXR1cm4gSHIodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gbmtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBpa2UodCxlKXtyZXR1cm4gSHIoMStPby5jb3VudChybyh0KSx0KSxlLDMpfWZ1bmN0aW9uIGtXKHQsZSl7cmV0dXJuIEhyKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBha2UodCxlKXtyZXR1cm4ga1codCxlKSsiMDAwIn1mdW5jdGlvbiBza2UodCxlKXtyZXR1cm4gSHIodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBva2UodCxlKXtyZXR1cm4gSHIodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBsa2UodCxlKXtyZXR1cm4gSHIodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBja2UodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT09PTA/NzplfWZ1bmN0aW9uIHVrZSh0LGUpe3JldHVybiBIcihBbC5jb3VudChybyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gRVcodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8ZT09PTA/eGModCk6eGMuY2VpbCh0KX1mdW5jdGlvbiBoa2UodCxlKXtyZXR1cm4gdD1FVyh0KSxIcih4Yy5jb3VudChybyh0KSx0KSsocm8odCkuZ2V0RGF5KCk9PT00KSxlLDIpfWZ1bmN0aW9uIGZrZSh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBka2UodCxlKXtyZXR1cm4gSHIoTmguY291bnQocm8odCktMSx0KSxlLDIpfWZ1bmN0aW9uIHBrZSh0LGUpe3JldHVybiBIcih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbWtlKHQsZSl7cmV0dXJuIHQ9RVcodCksSHIodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGdrZSh0LGUpe3JldHVybiBIcih0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24geWtlKHQsZSl7dmFyIHI9dC5nZXREYXkoKTtyZXR1cm4gdD1yPj00fHxyPT09MD94Yyh0KTp4Yy5jZWlsKHQpLEhyKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB2a2UodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStIcihlLzYwfDAsIjAiLDIpK0hyKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIHhXKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24geGtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIGJrZSh0LGUpe3JldHVybiBIcih0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gd2tlKHQsZSl7cmV0dXJuIEhyKDErS3kuY291bnQoX2wodCksdCksZSwzKX1mdW5jdGlvbiBTVyh0LGUpe3JldHVybiBIcih0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gVGtlKHQsZSl7cmV0dXJuIFNXKHQsZSkrIjAwMCJ9ZnVuY3Rpb24ga2tlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gRWtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gU2tlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gQ2tlKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9PT0wPzc6ZX1mdW5jdGlvbiBBa2UodCxlKXtyZXR1cm4gSHIoVGQuY291bnQoX2wodCktMSx0KSxlLDIpfWZ1bmN0aW9uIENXKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fGU9PT0wP1JoKHQpOlJoLmNlaWwodCl9ZnVuY3Rpb24gX2tlKHQsZSl7cmV0dXJuIHQ9Q1codCksSHIoUmguY291bnQoX2wodCksdCkrKF9sKHQpLmdldFVUQ0RheSgpPT09NCksZSwyKX1mdW5jdGlvbiBMa2UodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gRGtlKHQsZSl7cmV0dXJuIEhyKEhwLmNvdW50KF9sKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBOa2UodCxlKXtyZXR1cm4gSHIodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFJrZSh0LGUpe3JldHVybiB0PUNXKHQpLEhyKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBNa2UodCxlKXtyZXR1cm4gSHIodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIElrZSh0LGUpe3ZhciByPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9cj49NHx8cj09PTA/UmgodCk6UmguY2VpbCh0KSxIcih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gT2tlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBiVygpe3JldHVybiIlIn1mdW5jdGlvbiB3Vyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBUVyh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfXZhciBkVyx0YSxCVGUsRlRlLEFXPU0oKCk9PnsidXNlIHN0cmljdCI7QjMoKTtvKFg4LCJsb2NhbERhdGUiKTtvKGo4LCJ1dGNEYXRlIik7byhReSwibmV3RGF0ZSIpO28oSzgsImZvcm1hdExvY2FsZSIpO2RXPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHRhPS9eXHMqXGQrLyxCVGU9L14lLyxGVGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nO28oSHIsInBhZCIpO28oelRlLCJyZXF1b3RlIik7byhaeSwiZm9ybWF0UmUiKTtvKEp5LCJmb3JtYXRMb29rdXAiKTtvKEdUZSwicGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5Iik7bygkVGUsInBhcnNlV2Vla2RheU51bWJlck1vbmRheSIpO28oVlRlLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiKTtvKFVUZSwicGFyc2VXZWVrTnVtYmVySVNPIik7byhIVGUsInBhcnNlV2Vla051bWJlck1vbmRheSIpO28ocFcsInBhcnNlRnVsbFllYXIiKTtvKG1XLCJwYXJzZVllYXIiKTtvKFdUZSwicGFyc2Vab25lIik7byhZVGUsInBhcnNlUXVhcnRlciIpO28ocVRlLCJwYXJzZU1vbnRoTnVtYmVyIik7byhnVywicGFyc2VEYXlPZk1vbnRoIik7byhYVGUsInBhcnNlRGF5T2ZZZWFyIik7byh5VywicGFyc2VIb3VyMjQiKTtvKGpUZSwicGFyc2VNaW51dGVzIik7byhLVGUsInBhcnNlU2Vjb25kcyIpO28oUVRlLCJwYXJzZU1pbGxpc2Vjb25kcyIpO28oWlRlLCJwYXJzZU1pY3Jvc2Vjb25kcyIpO28oSlRlLCJwYXJzZUxpdGVyYWxQZXJjZW50Iik7byhla2UsInBhcnNlVW5peFRpbWVzdGFtcCIpO28odGtlLCJwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzIik7byh2VywiZm9ybWF0RGF5T2ZNb250aCIpO28ocmtlLCJmb3JtYXRIb3VyMjQiKTtvKG5rZSwiZm9ybWF0SG91cjEyIik7byhpa2UsImZvcm1hdERheU9mWWVhciIpO28oa1csImZvcm1hdE1pbGxpc2Vjb25kcyIpO28oYWtlLCJmb3JtYXRNaWNyb3NlY29uZHMiKTtvKHNrZSwiZm9ybWF0TW9udGhOdW1iZXIiKTtvKG9rZSwiZm9ybWF0TWludXRlcyIpO28obGtlLCJmb3JtYXRTZWNvbmRzIik7byhja2UsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiKTtvKHVrZSwiZm9ybWF0V2Vla051bWJlclN1bmRheSIpO28oRVcsImRJU08iKTtvKGhrZSwiZm9ybWF0V2Vla051bWJlcklTTyIpO28oZmtlLCJmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5Iik7byhka2UsImZvcm1hdFdlZWtOdW1iZXJNb25kYXkiKTtvKHBrZSwiZm9ybWF0WWVhciIpO28obWtlLCJmb3JtYXRZZWFySVNPIik7byhna2UsImZvcm1hdEZ1bGxZZWFyIik7byh5a2UsImZvcm1hdEZ1bGxZZWFySVNPIik7byh2a2UsImZvcm1hdFpvbmUiKTtvKHhXLCJmb3JtYXRVVENEYXlPZk1vbnRoIik7byh4a2UsImZvcm1hdFVUQ0hvdXIyNCIpO28oYmtlLCJmb3JtYXRVVENIb3VyMTIiKTtvKHdrZSwiZm9ybWF0VVRDRGF5T2ZZZWFyIik7byhTVywiZm9ybWF0VVRDTWlsbGlzZWNvbmRzIik7byhUa2UsImZvcm1hdFVUQ01pY3Jvc2Vjb25kcyIpO28oa2tlLCJmb3JtYXRVVENNb250aE51bWJlciIpO28oRWtlLCJmb3JtYXRVVENNaW51dGVzIik7byhTa2UsImZvcm1hdFVUQ1NlY29uZHMiKTtvKENrZSwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIpO28oQWtlLCJmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5Iik7byhDVywiVVRDZElTTyIpO28oX2tlLCJmb3JtYXRVVENXZWVrTnVtYmVySVNPIik7byhMa2UsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKERrZSwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIpO28oTmtlLCJmb3JtYXRVVENZZWFyIik7byhSa2UsImZvcm1hdFVUQ1llYXJJU08iKTtvKE1rZSwiZm9ybWF0VVRDRnVsbFllYXIiKTtvKElrZSwiZm9ybWF0VVRDRnVsbFllYXJJU08iKTtvKE9rZSwiZm9ybWF0VVRDWm9uZSIpO28oYlcsImZvcm1hdExpdGVyYWxQZXJjZW50Iik7byh3VywiZm9ybWF0VW5peFRpbWVzdGFtcCIpO28oVFcsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIil9KTtmdW5jdGlvbiBROCh0KXtyZXR1cm4gV3A9SzgodCksa2Q9V3AuZm9ybWF0LF9XPVdwLnBhcnNlLExXPVdwLnV0Y0Zvcm1hdCxEVz1XcC51dGNQYXJzZSxXcH12YXIgV3Asa2QsX1csTFcsRFcsTlc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtBVygpO1E4KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7byhROCwiZGVmYXVsdExvY2FsZSIpfSk7dmFyIFo4PU0oKCk9PnsidXNlIHN0cmljdCI7TlcoKX0pO2Z1bmN0aW9uIFBrZSh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gQmtlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZT8rdDorbmV3IERhdGUoK3QpfWZ1bmN0aW9uIFJXKHQsZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPVh5KCksZD1mLmludmVydCxwPWYuZG9tYWluLG09aCgiLiVMIiksZz1oKCI6JVMiKSx5PWgoIiVJOiVNIiksdj1oKCIlSSAlcCIpLHg9aCgiJWEgJWQiKSxiPWgoIiViICVkIiksdz1oKCIlQiIpLF89aCgiJVkiKTtmdW5jdGlvbiBUKEUpe3JldHVybih1KEUpPEU/bTpsKEUpPEU/ZzpzKEUpPEU/eTphKEUpPEU/djpuKEUpPEU/aShFKTxFP3g6YjpyKEUpPEU/dzpfKShFKX1yZXR1cm4gbyhULCJ0aWNrRm9ybWF0IiksZi5pbnZlcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBEYXRlKGQoRSkpfSxmLmRvbWFpbj1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9wKEFycmF5LmZyb20oRSxCa2UpKTpwKCkubWFwKFBrZSl9LGYudGlja3M9ZnVuY3Rpb24oRSl7dmFyIEw9cCgpO3JldHVybiB0KExbMF0sTFtMLmxlbmd0aC0xXSxFPz8xMCl9LGYudGlja0Zvcm1hdD1mdW5jdGlvbihFLEwpe3JldHVybiBMPT1udWxsP1Q6aChMKX0sZi5uaWNlPWZ1bmN0aW9uKEUpe3ZhciBMPXAoKTtyZXR1cm4oIUV8fHR5cGVvZiBFLnJhbmdlIT0iZnVuY3Rpb24iKSYmKEU9ZShMWzBdLExbTC5sZW5ndGgtMV0sRT8/MTApKSxFP3AoTzgoTCxFKSk6Zn0sZi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF8zKGYsUlcodCxlLHIsbixpLGEscyxsLHUsaCkpfSxmfWZ1bmN0aW9uIEYzKCl7cmV0dXJuIERoLmFwcGx5KFJXKFk4LHE4LHJvLEF1LEFsLE9vLEN1LFN1LHRvLGtkKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX12YXIgTVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCMygpO1o4KCk7TTgoKTtxeSgpO2VXKCk7byhQa2UsImRhdGUiKTtvKEJrZSwibnVtYmVyIik7byhSVywiY2FsZW5kYXIiKTtvKEYzLCJ0aW1lIil9KTt2YXIgSVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYSCgpO0pIKCk7TDgoKTtNVygpfSk7ZnVuY3Rpb24gSjgodCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOylyW25dPSIjIit0LnNsaWNlKG4qNiwrK24qNik7cmV0dXJuIHJ9dmFyIE9XPU0oKCk9PnsidXNlIHN0cmljdCI7byhKOCwiZGVmYXVsdCIpfSk7dmFyIGVfLFBXPU0oKCk9PnsidXNlIHN0cmljdCI7T1coKTtlXz1KOCgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIil9KTt2YXIgQlc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQVygpfSk7ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIHozPU0oKCk9PnsidXNlIHN0cmljdCI7byhGbiwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gelcodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/WXA6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIHJfKHQpe3JldHVybiB0Pj0xP2V2OnQ8PS0xPy1ldjpNYXRoLmFzaW4odCl9dmFyIHRfLG1hLE1oLEZXLEczLExsLEVkLHJhLFlwLGV2LHFwLCQzPU0oKCk9PnsidXNlIHN0cmljdCI7dF89TWF0aC5hYnMsbWE9TWF0aC5hdGFuMixNaD1NYXRoLmNvcyxGVz1NYXRoLm1heCxHMz1NYXRoLm1pbixMbD1NYXRoLnNpbixFZD1NYXRoLnNxcnQscmE9MWUtMTIsWXA9TWF0aC5QSSxldj1ZcC8yLHFwPTIqWXA7byh6VywiYWNvcyIpO28ocl8sImFzaW4iKX0pO2Z1bmN0aW9uIFYzKHQpe2xldCBlPTM7cmV0dXJuIHQuZGlnaXRzPWZ1bmN0aW9uKHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlO2lmKHI9PW51bGwpZT1udWxsO2Vsc2V7bGV0IG49TWF0aC5mbG9vcihyKTtpZighKG4+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtyfWApO2U9bn1yZXR1cm4gdH0sKCk9Pm5ldyBnZChlKX12YXIgbl89TSgoKT0+eyJ1c2Ugc3RyaWN0IjttOCgpO28oVjMsIndpdGhQYXRoIil9KTtmdW5jdGlvbiBGa2UodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gemtlKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEdrZSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uICRrZSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBWa2UodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gVWtlKHQsZSxyLG4saSxhLHMsbCl7dmFyIHU9ci10LGg9bi1lLGY9cy1pLGQ9bC1hLHA9ZCp1LWYqaDtpZighKHAqcDxyYSkpcmV0dXJuIHA9KGYqKGUtYSktZCoodC1pKSkvcCxbdCtwKnUsZStwKmhdfWZ1bmN0aW9uIFUzKHQsZSxyLG4saSxhLHMpe3ZhciBsPXQtcix1PWUtbixoPShzP2E6LWEpL0VkKGwqbCt1KnUpLGY9aCp1LGQ9LWgqbCxwPXQrZixtPWUrZCxnPXIrZix5PW4rZCx2PShwK2cpLzIseD0obSt5KS8yLGI9Zy1wLHc9eS1tLF89YipiK3cqdyxUPWktYSxFPXAqeS1nKm0sTD0odzwwPy0xOjEpKkVkKEZXKDAsVCpUKl8tRSpFKSksUz0oRSp3LWIqTCkvXyxBPSgtRSpiLXcqTCkvXyxJPShFKncrYipMKS9fLEQ9KC1FKmIrdypMKS9fLGs9Uy12LFI9QS14LEM9SS12LE89RC14O3JldHVybiBrKmsrUipSPkMqQytPKk8mJihTPUksQT1EKSx7Y3g6UyxjeTpBLHgwMTotZix5MDE6LWQseDExOlMqKGkvVC0xKSx5MTE6QSooaS9ULTEpfX1mdW5jdGlvbiBEbCgpe3ZhciB0PUZrZSxlPXprZSxyPUZuKDApLG49bnVsbCxpPUdrZSxhPSRrZSxzPVZrZSxsPW51bGwsdT1WMyhoKTtmdW5jdGlvbiBoKCl7dmFyIGYsZCxwPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxtPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWV2LHk9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZXYsdj10Xyh5LWcpLHg9eT5nO2lmKGx8fChsPWY9dSgpKSxtPHAmJihkPW0sbT1wLHA9ZCksIShtPnJhKSlsLm1vdmVUbygwLDApO2Vsc2UgaWYodj5xcC1yYSlsLm1vdmVUbyhtKk1oKGcpLG0qTGwoZykpLGwuYXJjKDAsMCxtLGcseSwheCkscD5yYSYmKGwubW92ZVRvKHAqTWgoeSkscCpMbCh5KSksbC5hcmMoMCwwLHAseSxnLHgpKTtlbHNle3ZhciBiPWcsdz15LF89ZyxUPXksRT12LEw9dixTPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsQT1TPnJhJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RWQocCpwK20qbSkpLEk9RzModF8obS1wKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksRD1JLGs9SSxSLEM7aWYoQT5yYSl7dmFyIE89cl8oQS9wKkxsKFMpKSxOPXJfKEEvbSpMbChTKSk7KEUtPU8qMik+cmE/KE8qPXg/MTotMSxfKz1PLFQtPU8pOihFPTAsXz1UPShnK3kpLzIpLChMLT1OKjIpPnJhPyhOKj14PzE6LTEsYis9Tix3LT1OKTooTD0wLGI9dz0oZyt5KS8yKX12YXIgUD1tKk1oKGIpLEY9bSpMbChiKSxCPXAqTWgoVCksRz1wKkxsKFQpO2lmKEk+cmEpe3ZhciB6PW0qTWgodyksVz1tKkxsKHcpLFo9cCpNaChfKSxqPXAqTGwoXyksb2U7aWYodjxZcClpZihvZT1Va2UoUCxGLFosaix6LFcsQixHKSl7dmFyIEs9UC1vZVswXSxlZT1GLW9lWzFdLEo9ei1vZVswXSxIPVctb2VbMV0scT0xL0xsKHpXKChLKkorZWUqSCkvKEVkKEsqSytlZSplZSkqRWQoSipKK0gqSCkpKS8yKSxRPUVkKG9lWzBdKm9lWzBdK29lWzFdKm9lWzFdKTtEPUczKEksKHAtUSkvKHEtMSkpLGs9RzMoSSwobS1RKS8ocSsxKSl9ZWxzZSBEPWs9MH1MPnJhP2s+cmE/KFI9VTMoWixqLFAsRixtLGsseCksQz1VMyh6LFcsQixHLG0sayx4KSxsLm1vdmVUbyhSLmN4K1IueDAxLFIuY3krUi55MDEpLGs8ST9sLmFyYyhSLmN4LFIuY3ksayxtYShSLnkwMSxSLngwMSksbWEoQy55MDEsQy54MDEpLCF4KToobC5hcmMoUi5jeCxSLmN5LGssbWEoUi55MDEsUi54MDEpLG1hKFIueTExLFIueDExKSwheCksbC5hcmMoMCwwLG0sbWEoUi5jeStSLnkxMSxSLmN4K1IueDExKSxtYShDLmN5K0MueTExLEMuY3grQy54MTEpLCF4KSxsLmFyYyhDLmN4LEMuY3ksayxtYShDLnkxMSxDLngxMSksbWEoQy55MDEsQy54MDEpLCF4KSkpOihsLm1vdmVUbyhQLEYpLGwuYXJjKDAsMCxtLGIsdywheCkpOmwubW92ZVRvKFAsRiksIShwPnJhKXx8IShFPnJhKT9sLmxpbmVUbyhCLEcpOkQ+cmE/KFI9VTMoQixHLHosVyxwLC1ELHgpLEM9VTMoUCxGLFosaixwLC1ELHgpLGwubGluZVRvKFIuY3grUi54MDEsUi5jeStSLnkwMSksRDxJP2wuYXJjKFIuY3gsUi5jeSxELG1hKFIueTAxLFIueDAxKSxtYShDLnkwMSxDLngwMSksIXgpOihsLmFyYyhSLmN4LFIuY3ksRCxtYShSLnkwMSxSLngwMSksbWEoUi55MTEsUi54MTEpLCF4KSxsLmFyYygwLDAscCxtYShSLmN5K1IueTExLFIuY3grUi54MTEpLG1hKEMuY3krQy55MTEsQy5jeCtDLngxMSkseCksbC5hcmMoQy5jeCxDLmN5LEQsbWEoQy55MTEsQy54MTEpLG1hKEMueTAxLEMueDAxKSwheCkpKTpsLmFyYygwLDAscCxULF8seCl9aWYobC5jbG9zZVBhdGgoKSxmKXJldHVybiBsPW51bGwsZisiInx8bnVsbH1yZXR1cm4gbyhoLCJhcmMiKSxoLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGY9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGQ9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVlwLzI7cmV0dXJuW01oKGQpKmYsTGwoZCkqZl19LGguaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpGbigrZiksaCk6dH0saC5vdXRlclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxoKTplfSxoLmNvcm5lclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxoKTpyfSxoLnBhZFJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpGbigrZiksaCk6bn0saC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Rm4oK2YpLGgpOml9LGguZW5kQW5nbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpGbigrZiksaCk6YX0saC5wYWRBbmdsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxoKTpzfSxoLmNvbnRleHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Zj8/bnVsbCxoKTpsfSxofXZhciBHVz1NKCgpPT57InVzZSBzdHJpY3QiO3ozKCk7JDMoKTtuXygpO28oRmtlLCJhcmNJbm5lclJhZGl1cyIpO28oemtlLCJhcmNPdXRlclJhZGl1cyIpO28oR2tlLCJhcmNTdGFydEFuZ2xlIik7bygka2UsImFyY0VuZEFuZ2xlIik7byhWa2UsImFyY1BhZEFuZ2xlIik7byhVa2UsImludGVyc2VjdCIpO28oVTMsImNvcm5lclRhbmdlbnRzIik7byhEbCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdHYodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX12YXIgbzJ0LGlfPU0oKCk9PnsidXNlIHN0cmljdCI7bzJ0PUFycmF5LnByb3RvdHlwZS5zbGljZTtvKHR2LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkVyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWHAodCl7cmV0dXJuIG5ldyAkVyh0KX12YXIgYV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKCRXLCJMaW5lYXIiKTskVy5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWt9fSwicG9pbnQiKX07byhYcCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVlcodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gVVcodCl7cmV0dXJuIHRbMV19dmFyIEhXPU0oKCk9PnsidXNlIHN0cmljdCI7byhWVywieCIpO28oVVcsInkiKX0pO2Z1bmN0aW9uIG5zKHQsZSl7dmFyIHI9Rm4oITApLG49bnVsbCxpPVhwLGE9bnVsbCxzPVYzKGwpO3Q9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0PT09dm9pZCAwP1ZXOkZuKHQpLGU9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT09dm9pZCAwP1VXOkZuKGUpO2Z1bmN0aW9uIGwodSl7dmFyIGgsZj0odT10dih1KSkubGVuZ3RoLGQscD0hMSxtO2ZvcihuPT1udWxsJiYoYT1pKG09cygpKSksaD0wO2g8PWY7KytoKSEoaDxmJiZyKGQ9dVtoXSxoLHUpKT09PXAmJigocD0hcCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSkscCYmYS5wb2ludCgrdChkLGgsdSksK2UoZCxoLHUpKTtpZihtKXJldHVybiBhPW51bGwsbSsiInx8bnVsbH1yZXR1cm4gbyhsLCJsaW5lIiksbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6Rm4oK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkZuKCt1KSxsKTplfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpGbighIXUpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dSxuIT1udWxsJiYoYT1pKG4pKSxsKTppfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bj1hPW51bGw6YT1pKG49dSksbCk6bn0sbH12YXIgV1c9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpXygpO3ozKCk7YV8oKTtuXygpO0hXKCk7byhucywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gc18odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFlXPU0oKCk9PnsidXNlIHN0cmljdCI7byhzXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gb18odCl7cmV0dXJuIHR9dmFyIHFXPU0oKCk9PnsidXNlIHN0cmljdCI7byhvXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSDMoKXt2YXIgdD1vXyxlPXNfLHI9bnVsbCxuPUZuKDApLGk9Rm4ocXApLGE9Rm4oMCk7ZnVuY3Rpb24gcyhsKXt2YXIgdSxoPShsPXR2KGwpKS5sZW5ndGgsZixkLHA9MCxtPW5ldyBBcnJheShoKSxnPW5ldyBBcnJheShoKSx5PStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKHFwLE1hdGgubWF4KC1xcCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSkseCxiPU1hdGgubWluKE1hdGguYWJzKHYpL2gsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHc9YioodjwwPy0xOjEpLF87Zm9yKHU9MDt1PGg7Kyt1KShfPWdbbVt1XT11XT0rdChsW3VdLHUsbCkpPjAmJihwKz1fKTtmb3IoZSE9bnVsbD9tLnNvcnQoZnVuY3Rpb24oVCxFKXtyZXR1cm4gZShnW1RdLGdbRV0pfSk6ciE9bnVsbCYmbS5zb3J0KGZ1bmN0aW9uKFQsRSl7cmV0dXJuIHIobFtUXSxsW0VdKX0pLHU9MCxkPXA/KHYtaCp3KS9wOjA7dTxoOysrdSx5PXgpZj1tW3VdLF89Z1tmXSx4PXkrKF8+MD9fKmQ6MCkrdyxnW2ZdPXtkYXRhOmxbZl0saW5kZXg6dSx2YWx1ZTpfLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTp4LHBhZEFuZ2xlOmJ9O3JldHVybiBnfXJldHVybiBvKHMsInBpZSIpLHMudmFsdWU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpGbigrbCkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWwscj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sLGU9bnVsbCxzKTpyfSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpGbigrbCkscyk6bn0scy5lbmRBbmdsZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkZuKCtsKSxzKTppfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Rm4oK2wpLHMpOmF9LHN9dmFyIFhXPU0oKCk9PnsidXNlIHN0cmljdCI7aV8oKTt6MygpO1lXKCk7cVcoKTskMygpO28oSDMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGxfKHQpe3JldHVybiBuZXcgVzModCwhMCl9ZnVuY3Rpb24gY18odCl7cmV0dXJuIG5ldyBXMyh0LCExKX12YXIgVzMsalc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXMz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCdW1wIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9jb250ZXh0PWUsdGhpcy5feD1yfWFyZWFTdGFydCgpe3RoaXMuX2xpbmU9MH1hcmVhRW5kKCl7dGhpcy5fbGluZT1OYU59bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfXBvaW50KGUscil7c3dpdGNoKGU9K2Uscj0rcix0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrfWNhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e3RoaXMuX3g/dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwPSh0aGlzLl94MCtlKS8yLHRoaXMuX3kwLHRoaXMuX3gwLHIsZSxyKTp0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsdGhpcy5feTA9KHRoaXMuX3kwK3IpLzIsZSx0aGlzLl95MCxlLHIpO2JyZWFrfX10aGlzLl94MD1lLHRoaXMuX3kwPXJ9fTtvKGxfLCJidW1wWCIpO28oY18sImJ1bXBZIil9KTtmdW5jdGlvbiBubygpe312YXIgcnY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG5vLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBqcCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gbnYodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFBvKHQpe3JldHVybiBuZXcgbnYodCl9dmFyIGl2PU0oKCk9PnsidXNlIHN0cmljdCI7byhqcCwicG9pbnQiKTtvKG52LCJCYXNpcyIpO252LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6anAodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OmpwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKFBvLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLVyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWTModCl7cmV0dXJuIG5ldyBLVyh0KX12YXIgUVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtydigpO2l2KCk7byhLVywiQmFzaXNDbG9zZWQiKTtLVy5wcm90b3R5cGU9e2FyZWFTdGFydDpubyxhcmVhRW5kOm5vLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6anAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28oWTMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpXKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBxMyh0KXtyZXR1cm4gbmV3IFpXKHQpfXZhciBKVz1NKCgpPT57InVzZSBzdHJpY3QiO2l2KCk7byhaVywiQmFzaXNPcGVuIik7WlcucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6anAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28ocTMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGVZKHQsZSl7dGhpcy5fYmFzaXM9bmV3IG52KHQpLHRoaXMuX2JldGE9ZX12YXIgdV8sdFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpdigpO28oZVksIkJ1bmRsZSIpO2VZLnByb3RvdHlwZT17bGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj10WzBdLGk9ZVswXSxhPXRbcl0tbixzPWVbcl0taSxsPS0xLHU7KytsPD1yOyl1PWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKG4rdSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGkrdSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9LCJwb2ludCIpfTt1Xz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT09PTE/bmV3IG52KG4pOm5ldyBlWShuLGUpfXJldHVybiBvKHIsImJ1bmRsZSIpLHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguODUpfSk7ZnVuY3Rpb24gS3AodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBYMyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIGhfLGF2PU0oKCk9PnsidXNlIHN0cmljdCI7byhLcCwicG9pbnQiKTtvKFgzLCJDYXJkaW5hbCIpO1gzLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpLcCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OktwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtoXz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFgzKG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBqMyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIGZfLGRfPU0oKCk9PnsidXNlIHN0cmljdCI7cnYoKTthdigpO28oajMsIkNhcmRpbmFsQ2xvc2VkIik7ajMucHJvdG90eXBlPXthcmVhU3RhcnQ6bm8sYXJlYUVuZDpubyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpLcCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Zl89byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBqMyhuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gSzModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBwXyxtXz1NKCgpPT57InVzZSBzdHJpY3QiO2F2KCk7byhLMywiQ2FyZGluYWxPcGVuIik7SzMucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OktwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtwXz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IEszKG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBzdih0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLHM9dC5feTI7aWYodC5fbDAxX2E+cmEpe3ZhciBsPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qbC10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS91LGk9KGkqbC10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS91fWlmKHQuX2wyM19hPnJhKXt2YXIgaD0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxmPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmgrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9mLHM9KHMqaCt0Ll95MSp0Ll9sMjNfMmEtcip0Ll9sMTJfMmEpL2Z9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxhLHMsdC5feDIsdC5feTIpfWZ1bmN0aW9uIHJZKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9dmFyIGdfLFEzPU0oKCk9PnsidXNlIHN0cmljdCI7JDMoKTthdigpO28oc3YsInBvaW50Iik7byhyWSwiQ2F0bXVsbFJvbSIpO3JZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OnN2KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Z189byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IHJZKG4sZSk6bmV3IFgzKG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gblkodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX12YXIgeV8saVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkXygpO3J2KCk7UTMoKTtvKG5ZLCJDYXRtdWxsUm9tQ2xvc2VkIik7blkucHJvdG90eXBlPXthcmVhU3RhcnQ6bm8sYXJlYUVuZDpubyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6c3YodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTt5Xz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgblkobixlKTpuZXcgajMobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBhWSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXZhciB2XyxzWT1NKCgpPT57InVzZSBzdHJpY3QiO21fKCk7UTMoKTtvKGFZLCJDYXRtdWxsUm9tT3BlbiIpO2FZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6c3YodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTt2Xz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgYVkobixlKTpuZXcgSzMobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBvWSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWjModCl7cmV0dXJuIG5ldyBvWSh0KX12YXIgbFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtydigpO28ob1ksIkxpbmVhckNsb3NlZCIpO29ZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om5vLGFyZWFFbmQ6bm8sbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfSwicG9pbnQiKX07byhaMywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY1kodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIHVZKHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxzPShyLXQuX3kxKS8oaXx8bjwwJiYtMCksbD0oYSppK3MqbikvKG4raSk7cmV0dXJuKGNZKGEpK2NZKHMpKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhzKSwuNSpNYXRoLmFicyhsKSl8fDB9ZnVuY3Rpb24gaFkodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIHhfKHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEscz10Ll95MSxsPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rbCxpK2wqZSxhLWwscy1sKnIsYSxzKX1mdW5jdGlvbiBKMyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZlkodCl7dGhpcy5fY29udGV4dD1uZXcgZFkodCl9ZnVuY3Rpb24gZFkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGJfKHQpe3JldHVybiBuZXcgSjModCl9ZnVuY3Rpb24gd18odCl7cmV0dXJuIG5ldyBmWSh0KX12YXIgcFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGNZLCJzaWduIik7byh1WSwic2xvcGUzIik7byhoWSwic2xvcGUyIik7byh4XywicG9pbnQiKTtvKEozLCJNb25vdG9uZVgiKTtKMy5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6eF8odGhpcyx0aGlzLl90MCxoWSh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYodD0rdCxlPStlLCEodD09PXRoaXMuX3gxJiZlPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHhfKHRoaXMsaFkodGhpcyxyPXVZKHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDp4Xyh0aGlzLHRoaXMuX3QwLHI9dVkodGhpcyx0LGUpKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19LCJwb2ludCIpfTtvKGZZLCJNb25vdG9uZVkiKTsoZlkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSjMucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtKMy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9O28oZFksIlJlZmxlY3RDb250ZXh0Iik7ZFkucHJvdG90eXBlPXttb3ZlVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LCJtb3ZlVG8iKSxjbG9zZVBhdGg6byhmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJjbG9zZVBhdGgiKSxsaW5lVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LCJsaW5lVG8iKSxiZXppZXJDdXJ2ZVRvOm8oZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9LCJiZXppZXJDdXJ2ZVRvIil9O28oYl8sIm1vbm90b25lWCIpO28od18sIm1vbm90b25lWSIpfSk7ZnVuY3Rpb24gZ1kodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG1ZKHQpe3ZhciBlLHI9dC5sZW5ndGgtMSxuLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsYVswXT0yLHNbMF09dFswXSsyKnRbMV0sZT0xO2U8ci0xOysrZSlpW2VdPTEsYVtlXT00LHNbZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW3ItMV09MixhW3ItMV09NyxzW3ItMV09OCp0W3ItMV0rdFtyXSxlPTE7ZTxyOysrZSluPWlbZV0vYVtlLTFdLGFbZV0tPW4sc1tlXS09bipzW2UtMV07Zm9yKGlbci0xXT1zW3ItMV0vYVtyLTFdLGU9ci0yO2U+PTA7LS1lKWlbZV09KHNbZV0taVtlKzFdKS9hW2VdO2ZvcihhW3ItMV09KHRbcl0raVtyLTFdKS8yLGU9MDtlPHItMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gZTUodCl7cmV0dXJuIG5ldyBnWSh0KX12YXIgeVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGdZLCJOYXR1cmFsIik7Z1kucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49bVkodCksaT1tWShlKSxhPTAscz0xO3M8cjsrK2EsKytzKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbc10sZVtzXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX0sInBvaW50Iil9O28obVksImNvbnRyb2xQb2ludHMiKTtvKGU1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB0NSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9ZnVuY3Rpb24gcjUodCl7cmV0dXJuIG5ldyB0NSh0LC41KX1mdW5jdGlvbiBUXyh0KXtyZXR1cm4gbmV3IHQ1KHQsMCl9ZnVuY3Rpb24ga18odCl7cmV0dXJuIG5ldyB0NSh0LDEpfXZhciB2WT1NKCgpPT57InVzZSBzdHJpY3QiO28odDUsIlN0ZXAiKTt0NS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OntpZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX1icmVha319dGhpcy5feD10LHRoaXMuX3k9ZX0sInBvaW50Iil9O28ocjUsImRlZmF1bHQiKTtvKFRfLCJzdGVwQmVmb3JlIik7byhrXywic3RlcEFmdGVyIil9KTt2YXIgeFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHVygpO1dXKCk7WFcoKTtRVygpO0pXKCk7aXYoKTtqVygpO3RZKCk7ZF8oKTttXygpO2F2KCk7aVkoKTtzWSgpO1EzKCk7bFkoKTthXygpO3BZKCk7eVkoKTt2WSgpfSk7dmFyIGJZPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgd1k9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIEloKHQsZSxyKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9cn1mdW5jdGlvbiBTXyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEVfO3JldHVybiB0Ll9fem9vbX12YXIgRV8sQ189TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEloLCJUcmFuc2Zvcm0iKTtJaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkloLHNjYWxlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0xP3RoaXM6bmV3IEloKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSwic2NhbGUiKSx0cmFuc2xhdGU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT09MCZlPT09MD90aGlzOm5ldyBJaCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LCJ0cmFuc2xhdGUiKSxhcHBseTpvKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sImFwcGx5IiksYXBwbHlYOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sImFwcGx5WCIpLGFwcGx5WTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LCJhcHBseVkiKSxpbnZlcnQ6byhmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSwiaW52ZXJ0IiksaW52ZXJ0WDpvKGZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSwiaW52ZXJ0WCIpLGludmVydFk6byhmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30sImludmVydFkiKSxyZXNjYWxlWDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sInJlc2NhbGVYIikscmVzY2FsZVk6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LCJyZXNjYWxlWSIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifSwidG9TdHJpbmciKX07RV89bmV3IEloKDEsMCwwKTtTXy5wcm90b3R5cGU9SWgucHJvdG90eXBlO28oU18sInRyYW5zZm9ybSIpfSk7dmFyIFRZPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIga1k9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2MygpO2JZKCk7d1koKTtDXygpO1RZKCl9KTt2YXIgRVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrWSgpO0NfKCl9KTt2YXIgcHI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtraCgpO3RWKCk7YkgoKTtFSCgpO1BwKCk7U0goKTtDSCgpO1Q3KCk7WVYoKTtBSCgpO3U4KCk7X0goKTtESCgpO0E4KCk7SEgoKTtXSCgpO3pwKCk7bTgoKTtZSCgpO0xIKCk7cUgoKTtJVygpO0JXKCk7VGwoKTt4WSgpO0IzKCk7WjgoKTtmMygpO3YzKCk7RVkoKX0pO3ZhciBTWT1FaShuYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobmEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO25hLkJMQU5LX1VSTD1uYS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycz1uYS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleD1uYS51cmxTY2hlbWVSZWdleD1uYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4PW5hLmh0bWxDdHJsRW50aXR5UmVnZXg9bmEuaHRtbEVudGl0aWVzUmVnZXg9bmEuaW52YWxpZFByb3RvY29sUmVnZXg9dm9pZCAwO25hLmludmFsaWRQcm90b2NvbFJlZ2V4PS9eKFteXHddKikoamF2YXNjcmlwdHxkYXRhfHZic2NyaXB0KS9pbTtuYS5odG1sRW50aXRpZXNSZWdleD0vJiMoXHcrKSheXHd8Oyk/L2c7bmEuaHRtbEN0cmxFbnRpdHlSZWdleD0vJihuZXdsaW5lfHRhYik7L2dpO25hLmN0cmxDaGFyYWN0ZXJzUmVnZXg9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbTtuYS51cmxTY2hlbWVSZWdleD0vXi4rKDp8JmNvbG9uOykvZ2ltO25hLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4PS8oXFx8JTVbY0NdKSgoJSg2W2VFXXw3Mnw3NCkpfFtucnRdKS9nO25hLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzPVsiLiIsIi8iXTtuYS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIn0pO3ZhciBRcD1FaShuNT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobjUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO241LnNhbml0aXplVXJsPXZvaWQgMDt2YXIgUmE9U1koKTtmdW5jdGlvbiBIa2UodCl7cmV0dXJuIFJhLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzLmluZGV4T2YodFswXSk+LTF9byhIa2UsImlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2wiKTtmdW5jdGlvbiBXa2UodCl7dmFyIGU9dC5yZXBsYWNlKFJhLmN0cmxDaGFyYWN0ZXJzUmVnZXgsIiIpO3JldHVybiBlLnJlcGxhY2UoUmEuaHRtbEVudGl0aWVzUmVnZXgsZnVuY3Rpb24ocixuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0pfW8oV2tlLCJkZWNvZGVIdG1sQ2hhcmFjdGVycyIpO2Z1bmN0aW9uIFlrZSh0KXtyZXR1cm4gVVJMLmNhblBhcnNlKHQpfW8oWWtlLCJpc1ZhbGlkVXJsIik7ZnVuY3Rpb24gQ1kodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2h7cmV0dXJuIHR9fW8oQ1ksImRlY29kZVVSSSIpO2Z1bmN0aW9uIHFrZSh0KXtpZighdClyZXR1cm4gUmEuQkxBTktfVVJMO3ZhciBlLHI9Q1kodC50cmltKCkpO2RvIHI9V2tlKHIpLnJlcGxhY2UoUmEuaHRtbEN0cmxFbnRpdHlSZWdleCwiIikucmVwbGFjZShSYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCIiKS5yZXBsYWNlKFJhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4LCIiKS50cmltKCkscj1DWShyKSxlPXIubWF0Y2goUmEuY3RybENoYXJhY3RlcnNSZWdleCl8fHIubWF0Y2goUmEuaHRtbEVudGl0aWVzUmVnZXgpfHxyLm1hdGNoKFJhLmh0bWxDdHJsRW50aXR5UmVnZXgpfHxyLm1hdGNoKFJhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4KTt3aGlsZShlJiZlLmxlbmd0aD4wKTt2YXIgbj1yO2lmKCFuKXJldHVybiBSYS5CTEFOS19VUkw7aWYoSGtlKG4pKXJldHVybiBuO3ZhciBpPW4udHJpbVN0YXJ0KCksYT1pLm1hdGNoKFJhLnVybFNjaGVtZVJlZ2V4KTtpZighYSlyZXR1cm4gbjt2YXIgcz1hWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2lmKFJhLmludmFsaWRQcm90b2NvbFJlZ2V4LnRlc3QocykpcmV0dXJuIFJhLkJMQU5LX1VSTDt2YXIgbD1pLnJlcGxhY2UoL1xcL2csIi8iKTtpZihzPT09Im1haWx0bzoifHxzLmluY2x1ZGVzKCI6Ly8iKSlyZXR1cm4gbDtpZihzPT09Imh0dHA6Inx8cz09PSJodHRwczoiKXtpZighWWtlKGwpKXJldHVybiBSYS5CTEFOS19VUkw7dmFyIHU9bmV3IFVSTChsKTtyZXR1cm4gdS5wcm90b2NvbD11LnByb3RvY29sLnRvTG93ZXJDYXNlKCksdS5ob3N0bmFtZT11Lmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdS50b1N0cmluZygpfXJldHVybiBsfW8ocWtlLCJzYW5pdGl6ZVVybCIpO241LnNhbml0aXplVXJsPXFrZX0pO3ZhciBBXyxTZCxpNSxBWSxfWSxMWSxObCxvdixsdj1NKCgpPT57InVzZSBzdHJpY3QiO0FfPUppKFFwKCksMSk7ZnIoKTtTZD1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoInJlY3QiKTtpZihyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksZS5uYW1lJiZyLmF0dHIoIm5hbWUiLGUubmFtZSksZS5yeCYmci5hdHRyKCJyeCIsZS5yeCksZS5yeSYmci5hdHRyKCJyeSIsZS5yeSksZS5hdHRycyE9PXZvaWQgMClmb3IobGV0IG4gaW4gZS5hdHRycylyLmF0dHIobixlLmF0dHJzW25dKTtyZXR1cm4gZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksaTU9bygodCxlKT0+e2xldCByPXt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxzdHJva2U6ZS5zdHJva2UsY2xhc3M6InJlY3QifTtTZCh0LHIpLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxBWT1vKCh0LGUpPT57bGV0IHI9ZS50ZXh0LnJlcGxhY2UoYWQsIiAiKSxuPXQuYXBwZW5kKCJ0ZXh0Iik7bi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImNsYXNzIiwibGVnZW5kIiksbi5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxlLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKTtsZXQgaT1uLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrZS50ZXh0TWFyZ2luKjIpLGkudGV4dChyKSxufSwiZHJhd1RleHQiKSxfWT1vKCh0LGUscixuKT0+e2xldCBpPXQuYXBwZW5kKCJpbWFnZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCxBXy5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixhKX0sImRyYXdJbWFnZSIpLExZPW8oKHQsZSxyLG4pPT57bGV0IGk9dC5hcHBlbmQoInVzZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCxBXy5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixgIyR7YX1gKX0sImRyYXdFbWJlZGRlZEltYWdlIiksTmw9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsYW5jaG9yOiJzdGFydCIscng6MCxyeTowfSksImdldE5vdGVSZWN0Iiksb3Y9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IixzdHlsZToiIzY2NiIsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMH0pLCJnZXRUZXh0T2JqIil9KTt2YXIgRFksX18sTlksWGtlLGprZSxLa2UsUWtlLFprZSxKa2UsZUVlLHRFZSxyRWUsbkVlLGlFZSxhRWUsX3UsUmwsUlk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO2x2KCk7RFk9SmkoUXAoKSwxKSxfXz1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNkKHQsZSl9LCJkcmF3UmVjdCIpLE5ZPW8oZnVuY3Rpb24odCxlLHIsbixpLGEpe2xldCBzPXQuYXBwZW5kKCJpbWFnZSIpO3MuYXR0cigid2lkdGgiLGUpLHMuYXR0cigiaGVpZ2h0IixyKSxzLmF0dHIoIngiLG4pLHMuYXR0cigieSIsaSk7bGV0IGw9YS5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT9hOigwLERZLnNhbml0aXplVXJsKShhKTtzLmF0dHIoInhsaW5rOmhyZWYiLGwpfSwiZHJhd0ltYWdlIiksWGtlPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJnIiksaT0wO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz1hLnRleHRDb2xvcj9hLnRleHRDb2xvcjoiIzQ0NDQ0NCIsbD1hLmxpbmVDb2xvcj9hLmxpbmVDb2xvcjoiIzQ0NDQ0NCIsdT1hLm9mZnNldFg/cGFyc2VJbnQoYS5vZmZzZXRYKTowLGg9YS5vZmZzZXRZP3BhcnNlSW50KGEub2Zmc2V0WSk6MCxmPSIiO2lmKGk9PT0wKXtsZXQgcD1uLmFwcGVuZCgibGluZSIpO3AuYXR0cigieDEiLGEuc3RhcnRQb2ludC54KSxwLmF0dHIoInkxIixhLnN0YXJ0UG9pbnQueSkscC5hdHRyKCJ4MiIsYS5lbmRQb2ludC54KSxwLmF0dHIoInkyIixhLmVuZFBvaW50LnkpLHAuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLHAuYXR0cigic3Ryb2tlIixsKSxwLnN0eWxlKCJmaWxsIiwibm9uZSIpLGEudHlwZSE9PSJyZWxfYiImJnAuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiNhcnJvd2hlYWQpIiksKGEudHlwZT09PSJiaXJlbCJ8fGEudHlwZT09PSJyZWxfYiIpJiZwLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiNhcnJvd2VuZCkiKSxpPS0xfWVsc2V7bGV0IHA9bi5hcHBlbmQoInBhdGgiKTtwLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLmF0dHIoInN0cm9rZSIsbCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS5zdGFydFBvaW50LnkpLnJlcGxhY2VBbGwoImNvbnRyb2x4IixhLnN0YXJ0UG9pbnQueCsoYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS8yLShhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzQpLnJlcGxhY2VBbGwoImNvbnRyb2x5IixhLnN0YXJ0UG9pbnQueSsoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yKS5yZXBsYWNlQWxsKCJzdG9weCIsYS5lbmRQb2ludC54KS5yZXBsYWNlQWxsKCJzdG9weSIsYS5lbmRQb2ludC55KSksYS50eXBlIT09InJlbF9iIiYmcC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZisiI2Fycm93aGVhZCkiKSwoYS50eXBlPT09ImJpcmVsInx8YS50eXBlPT09InJlbF9iIikmJnAuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZisiI2Fycm93ZW5kKSIpfWxldCBkPXIubWVzc2FnZUZvbnQoKTtfdShyKShhLmxhYmVsLnRleHQsbixNYXRoLm1pbihhLnN0YXJ0UG9pbnQueCxhLmVuZFBvaW50LngpK01hdGguYWJzKGEuZW5kUG9pbnQueC1hLnN0YXJ0UG9pbnQueCkvMit1LE1hdGgubWluKGEuc3RhcnRQb2ludC55LGEuZW5kUG9pbnQueSkrTWF0aC5hYnMoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yK2gsYS5sYWJlbC53aWR0aCxhLmxhYmVsLmhlaWdodCx7ZmlsbDpzfSxkKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGQ9ci5tZXNzYWdlRm9udCgpLF91KHIpKCJbIithLnRlY2huLnRleHQrIl0iLG4sTWF0aC5taW4oYS5zdGFydFBvaW50LngsYS5lbmRQb2ludC54KStNYXRoLmFicyhhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzIrdSxNYXRoLm1pbihhLnN0YXJ0UG9pbnQueSxhLmVuZFBvaW50LnkpK01hdGguYWJzKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMityLm1lc3NhZ2VGb250U2l6ZSs1K2gsTWF0aC5tYXgoYS5sYWJlbC53aWR0aCxhLnRlY2huLndpZHRoKSxhLnRlY2huLmhlaWdodCx7ZmlsbDpzLCJmb250LXN0eWxlIjoiaXRhbGljIn0sZCkpfX0sImRyYXdSZWxzIiksamtlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuYXBwZW5kKCJnIiksaT1lLmJnQ29sb3I/ZS5iZ0NvbG9yOiJub25lIixhPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIscz1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiYmxhY2siLGw9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07ZS5ub2RlVHlwZSYmKGw9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgdT17eDplLngseTplLnksZmlsbDppLHN0cm9rZTphLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6bH07X18obix1KTtsZXQgaD1yLmJvdW5kYXJ5Rm9udCgpO2guZm9udFdlaWdodD0iYm9sZCIsaC5mb250U2l6ZT1oLmZvbnRTaXplKzIsaC5mb250Q29sb3I9cyxfdShyKShlLmxhYmVsLnRleHQsbixlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCksZS50eXBlJiZlLnR5cGUudGV4dCE9PSIiJiYoaD1yLmJvdW5kYXJ5Rm9udCgpLGguZm9udENvbG9yPXMsX3UocikoZS50eXBlLnRleHQsbixlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxoKSksZS5kZXNjciYmZS5kZXNjci50ZXh0IT09IiImJihoPXIuYm91bmRhcnlGb250KCksaC5mb250U2l6ZT1oLmZvbnRTaXplLTIsaC5mb250Q29sb3I9cyxfdShyKShlLmRlc2NyLnRleHQsbixlLngsZS55K2UuZGVzY3IuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCkpfSwiZHJhd0JvdW5kYXJ5IiksS2tlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUuYmdDb2xvcj9lLmJnQ29sb3I6cltlLnR5cGVDNFNoYXBlLnRleHQrIl9iZ19jb2xvciJdLGk9ZS5ib3JkZXJDb2xvcj9lLmJvcmRlckNvbG9yOnJbZS50eXBlQzRTaGFwZS50ZXh0KyJfYm9yZGVyX2NvbG9yIl0sYT1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiI0ZGRkZGRiIscz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7c3dpdGNoKGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOnM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrO2Nhc2UiZXh0ZXJuYWxfcGVyc29uIjpzPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFCNkVsRVFWUjRYdTJZTFkrRU1CQ0c5K2RXcjBhajBXZzBHbzFHbzArajhYZHYydVRDdnYxZ3B0MGViSEtQdWhEYWVXNDYwNVo5bUp2eDRBZFhVeVRVZGQwOHordTZmbG1XWlJuSHNXa2FmazlEcHRBd0RQdStmMGVBWXR1MlBFYUdXdWo1ZkNJWnJCQUMyZUxCQW5SQ3NFa2t4bWVhSnA3aURKMlFNRGRIc0xnOFN4S0ZFSmFBbzhsQVhubXVPRkloVE1weHhLQVRlYm80VWlGa251Tm80T25pU0lYUXlSeEVBM1lzbmpHQ1ZFalZYRDd5TFVBcXhCR1V5UHYvWTRXMmJlTWdHdVM3a1ZRSUJ5Y0gwZkQrb2k1cGV6UUVUeGRIS21RS0drMWVRRVlsZEsranc1R3hQZlo5ejdNazBRbmhmMVcxbTN3Ly9FVW41QkRtU1pzYlI0NFFRTEJFcXJCSHFPcm1TS2FRQXhkbkxBckNyeFpjTTdBN1pLczRpb1JxOExGQytOcEMzV0NCSnN2cFZ3NWVkbTlpRVhGdXlOZnhYQWdTd2ZyRlExYzBpTmRhOEFkZWp2VWdua3RPdEpRUXhtY2ZGekdnbGM1V1ZDajdvRGdGcVUxOGJvZUZTczUyQ1VoOExFOEJJVlFEVDFBQnJCMEh0Z1NFWWxYNWRvSm5Dd3Y5VFhvY0tDYUtibndoZERLUHE0bGYzU3dVM0hMcTRWLytXWWhIVk1hLzNiNElsZnlpa0FkdUNrY0JjN21RMy96L1FxL2NUdWlraGt6QjEyQWUvbWNKQzlVK1ZvOEVqMWdXQXRnYmVHZ0ZzQU1IcjUwQklXT0xDYmV6dmhwQkZVZFk2RUp1Si9RRFcwWG9NWDYwelowQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrfWxldCBsPXQuYXBwZW5kKCJnIik7bC5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtsZXQgdT1ObCgpO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6dS54PWUueCx1Lnk9ZS55LHUuZmlsbD1uLHUud2lkdGg9ZS53aWR0aCx1LmhlaWdodD1lLmhlaWdodCx1LnN0cm9rZT1pLHUucng9Mi41LHUucnk9Mi41LHUuYXR0cnM9eyJzdHJva2Utd2lkdGgiOi41fSxfXyhsLHUpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOmwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsbikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIsZS5oZWlnaHQpKSxsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjpsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLG4pLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJ3aWR0aCIsZS53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIsZS5oZWlnaHQvMikpLGwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngrZS53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoImhhbGYiLGUuaGVpZ2h0LzIpKTticmVha31sZXQgaD1hRWUocixlLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLGEpLmF0dHIoImZvbnQtZmFtaWx5IixoLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsaC5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLGUudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLGUueCtlLndpZHRoLzItZS50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixlLnkrZS50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrZS50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpOWShsLDQ4LDQ4LGUueCtlLndpZHRoLzItMjQsZS55K2UuaW1hZ2UuWSxzKTticmVha31sZXQgZj1yW2UudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCk7cmV0dXJuIGYuZm9udFdlaWdodD0iYm9sZCIsZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250Q29sb3I9YSxfdShyKShlLmxhYmVsLnRleHQsbCxlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmF9LGYpLGY9cltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpLGYuZm9udENvbG9yPWEsZS50ZWNobiYmZS50ZWNobj8udGV4dCE9PSIiP191KHIpKGUudGVjaG4udGV4dCxsLGUueCxlLnkrZS50ZWNobi5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpOmUudHlwZSYmZS50eXBlLnRleHQhPT0iIiYmX3UocikoZS50eXBlLnRleHQsbCxlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpLGUuZGVzY3ImJmUuZGVzY3IudGV4dCE9PSIiJiYoZj1yLnBlcnNvbkZvbnQoKSxmLmZvbnRDb2xvcj1hLF91KHIpKGUuZGVzY3IudGV4dCxsLGUueCxlLnkrZS5kZXNjci5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YX0sZikpLGUuaGVpZ2h0fSwiZHJhd0M0U2hhcGUiKSxRa2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0sImluc2VydERhdGFiYXNlSWNvbiIpLFprZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LCJpbnNlcnRDb21wdXRlckljb24iKSxKa2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSwiaW5zZXJ0Q2xvY2tJY29uIiksZUVlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sImluc2VydEFycm93SGVhZCIpLHRFZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93ZW5kIikuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0VuZCIpLHJFZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxuRWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnREeW5hbWljTnVtYmVyIiksaUVlPW8oZnVuY3Rpb24odCl7bGV0IHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksYUVlPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJnZXRDNFNoYXBlRm9udCIpLF91PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmKXtsZXQgZD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7Zm9udFNpemU6cCxmb250RmFtaWx5Om0sZm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChxZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixwKS5zdHlsZSgiZm9udC13ZWlnaHQiLGcpLnN0eWxlKCJmb250LWZhbWlseSIsbSk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksUmw9e2RyYXdSZWN0Ol9fLGRyYXdCb3VuZGFyeTpqa2UsZHJhd0M0U2hhcGU6S2tlLGRyYXdSZWxzOlhrZSxkcmF3SW1hZ2U6TlksaW5zZXJ0QXJyb3dIZWFkOmVFZSxpbnNlcnRBcnJvd0VuZDp0RWUsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOnJFZSxpbnNlcnREeW5hbWljTnVtYmVyOm5FZSxpbnNlcnRBcnJvd0Nyb3NzSGVhZDppRWUsaW5zZXJ0RGF0YWJhc2VJY29uOlFrZSxpbnNlcnRDb21wdXRlckljb246WmtlLGluc2VydENsb2NrSWNvbjpKa2V9fSk7dmFyIHNFZSxzNSxMXz1NKCgpPT57InVzZSBzdHJpY3QiO3NFZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsczU9c0VlfSk7dmFyIG9FZSxsRWUsb2ksQm89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMXygpO29FZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGxFZT1zNXx8b0VlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLG9pPWxFZX0pO3ZhciBjRWUsaWEsQ2Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbygpO2NFZT1vaS5TeW1ib2wsaWE9Y0VlfSk7ZnVuY3Rpb24gZkVlKHQpe3ZhciBlPXVFZS5jYWxsKHQsY3YpLHI9dFtjdl07dHJ5e3RbY3ZdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaHt9dmFyIGk9aEVlLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbY3ZdPXI6ZGVsZXRlIHRbY3ZdKSxpfXZhciBNWSx1RWUsaEVlLGN2LElZLE9ZPU0oKCk9PnsidXNlIHN0cmljdCI7Q2QoKTtNWT1PYmplY3QucHJvdG90eXBlLHVFZT1NWS5oYXNPd25Qcm9wZXJ0eSxoRWU9TVkudG9TdHJpbmcsY3Y9aWE/aWEudG9TdHJpbmdUYWc6dm9pZCAwO28oZkVlLCJnZXRSYXdUYWciKTtJWT1mRWV9KTtmdW5jdGlvbiBtRWUodCl7cmV0dXJuIHBFZS5jYWxsKHQpfXZhciBkRWUscEVlLFBZLEJZPU0oKCk9PnsidXNlIHN0cmljdCI7ZEVlPU9iamVjdC5wcm90b3R5cGUscEVlPWRFZS50b1N0cmluZztvKG1FZSwib2JqZWN0VG9TdHJpbmciKTtQWT1tRWV9KTtmdW5jdGlvbiB2RWUodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD95RWU6Z0VlOkZZJiZGWSBpbiBPYmplY3QodCk/SVkodCk6UFkodCl9dmFyIGdFZSx5RWUsRlksZ2EsTHU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDZCgpO09ZKCk7QlkoKTtnRWU9IltvYmplY3QgTnVsbF0iLHlFZT0iW29iamVjdCBVbmRlZmluZWRdIixGWT1pYT9pYS50b1N0cmluZ1RhZzp2b2lkIDA7byh2RWUsImJhc2VHZXRUYWciKTtnYT12RWV9KTtmdW5jdGlvbiB4RWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9dmFyIHhuLGlvPU0oKCk9PnsidXNlIHN0cmljdCI7byh4RWUsImlzT2JqZWN0Iik7eG49eEVlfSk7ZnVuY3Rpb24gRUVlKHQpe2lmKCF4bih0KSlyZXR1cm4hMTt2YXIgZT1nYSh0KTtyZXR1cm4gZT09d0VlfHxlPT1URWV8fGU9PWJFZXx8ZT09a0VlfXZhciBiRWUsd0VlLFRFZSxrRWUsX2ksdXY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO2lvKCk7YkVlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIix3RWU9IltvYmplY3QgRnVuY3Rpb25dIixURWU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixrRWU9IltvYmplY3QgUHJveHldIjtvKEVFZSwiaXNGdW5jdGlvbiIpO19pPUVFZX0pO3ZhciBTRWUsbzUselk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbygpO1NFZT1vaVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sbzU9U0VlfSk7ZnVuY3Rpb24gQ0VlKHQpe3JldHVybiEhR1kmJkdZIGluIHR9dmFyIEdZLCRZLFZZPU0oKCk9PnsidXNlIHN0cmljdCI7elkoKTtHWT1mdW5jdGlvbigpe3ZhciB0PS9bXi5dKyQvLmV4ZWMobzUmJm81LmtleXMmJm81LmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gdD8iU3ltYm9sKHNyYylfMS4iK3Q6IiJ9KCk7byhDRWUsImlzTWFza2VkIik7JFk9Q0VlfSk7ZnVuY3Rpb24gTEVlKHQpe2lmKHQhPW51bGwpe3RyeXtyZXR1cm4gX0VlLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaHt9fXJldHVybiIifXZhciBBRWUsX0VlLER1LERfPU0oKCk9PnsidXNlIHN0cmljdCI7QUVlPUZ1bmN0aW9uLnByb3RvdHlwZSxfRWU9QUVlLnRvU3RyaW5nO28oTEVlLCJ0b1NvdXJjZSIpO0R1PUxFZX0pO2Z1bmN0aW9uIEJFZSh0KXtpZigheG4odCl8fCRZKHQpKXJldHVybiExO3ZhciBlPV9pKHQpP1BFZTpORWU7cmV0dXJuIGUudGVzdChEdSh0KSl9dmFyIERFZSxORWUsUkVlLE1FZSxJRWUsT0VlLFBFZSxVWSxIWT1NKCgpPT57InVzZSBzdHJpY3QiO3V2KCk7VlkoKTtpbygpO0RfKCk7REVlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxORWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sUkVlPUZ1bmN0aW9uLnByb3RvdHlwZSxNRWU9T2JqZWN0LnByb3RvdHlwZSxJRWU9UkVlLnRvU3RyaW5nLE9FZT1NRWUuaGFzT3duUHJvcGVydHksUEVlPVJlZ0V4cCgiXiIrSUVlLmNhbGwoT0VlKS5yZXBsYWNlKERFZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtvKEJFZSwiYmFzZUlzTmF0aXZlIik7VVk9QkVlfSk7ZnVuY3Rpb24gRkVlKHQsZSl7cmV0dXJuIHQ/LltlXX12YXIgV1ksWVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEZFZSwiZ2V0VmFsdWUiKTtXWT1GRWV9KTtmdW5jdGlvbiB6RWUodCxlKXt2YXIgcj1XWSh0LGUpO3JldHVybiBVWShyKT9yOnZvaWQgMH12YXIgQXMsT2g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIWSgpO1lZKCk7byh6RWUsImdldE5hdGl2ZSIpO0FzPXpFZX0pO3ZhciBHRWUsTnUsaHY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPaCgpO0dFZT1BcyhPYmplY3QsImNyZWF0ZSIpLE51PUdFZX0pO2Z1bmN0aW9uICRFZSgpe3RoaXMuX19kYXRhX189TnU/TnUobnVsbCk6e30sdGhpcy5zaXplPTB9dmFyIHFZLFhZPU0oKCk9PnsidXNlIHN0cmljdCI7aHYoKTtvKCRFZSwiaGFzaENsZWFyIik7cVk9JEVlfSk7ZnVuY3Rpb24gVkVlKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciBqWSxLWT1NKCgpPT57InVzZSBzdHJpY3QiO28oVkVlLCJoYXNoRGVsZXRlIik7alk9VkVlfSk7ZnVuY3Rpb24gWUVlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoTnUpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1VRWU/dm9pZCAwOnJ9cmV0dXJuIFdFZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9dmFyIFVFZSxIRWUsV0VlLFFZLFpZPU0oKCk9PnsidXNlIHN0cmljdCI7aHYoKTtVRWU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLEhFZT1PYmplY3QucHJvdG90eXBlLFdFZT1IRWUuaGFzT3duUHJvcGVydHk7byhZRWUsImhhc2hHZXQiKTtRWT1ZRWV9KTtmdW5jdGlvbiBqRWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gTnU/ZVt0XSE9PXZvaWQgMDpYRWUuY2FsbChlLHQpfXZhciBxRWUsWEVlLEpZLGVxPU0oKCk9PnsidXNlIHN0cmljdCI7aHYoKTtxRWU9T2JqZWN0LnByb3RvdHlwZSxYRWU9cUVlLmhhc093blByb3BlcnR5O28oakVlLCJoYXNoSGFzIik7Slk9akVlfSk7ZnVuY3Rpb24gUUVlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1OdSYmZT09PXZvaWQgMD9LRWU6ZSx0aGlzfXZhciBLRWUsdHEscnE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodigpO0tFZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhRRWUsImhhc2hTZXQiKTt0cT1RRWV9KTtmdW5jdGlvbiBacCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX12YXIgTl8sbnE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYWSgpO0tZKCk7WlkoKTtlcSgpO3JxKCk7byhacCwiSGFzaCIpO1pwLnByb3RvdHlwZS5jbGVhcj1xWTtacC5wcm90b3R5cGUuZGVsZXRlPWpZO1pwLnByb3RvdHlwZS5nZXQ9UVk7WnAucHJvdG90eXBlLmhhcz1KWTtacC5wcm90b3R5cGUuc2V0PXRxO05fPVpwfSk7ZnVuY3Rpb24gWkVlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgaXEsYXE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFpFZSwibGlzdENhY2hlQ2xlYXIiKTtpcT1aRWV9KTtmdW5jdGlvbiBKRWUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX12YXIgRm8sQWQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpFZSwiZXEiKTtGbz1KRWV9KTtmdW5jdGlvbiBlNmUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihGbyh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciBQaCxmdj1NKCgpPT57InVzZSBzdHJpY3QiO0FkKCk7byhlNmUsImFzc29jSW5kZXhPZiIpO1BoPWU2ZX0pO2Z1bmN0aW9uIG42ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9UGgoZSx0KTtpZihyPDApcmV0dXJuITE7dmFyIG49ZS5sZW5ndGgtMTtyZXR1cm4gcj09bj9lLnBvcCgpOnI2ZS5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgdDZlLHI2ZSxzcSxvcT1NKCgpPT57InVzZSBzdHJpY3QiO2Z2KCk7dDZlPUFycmF5LnByb3RvdHlwZSxyNmU9dDZlLnNwbGljZTtvKG42ZSwibGlzdENhY2hlRGVsZXRlIik7c3E9bjZlfSk7ZnVuY3Rpb24gaTZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1QaChlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19dmFyIGxxLGNxPU0oKCk9PnsidXNlIHN0cmljdCI7ZnYoKTtvKGk2ZSwibGlzdENhY2hlR2V0Iik7bHE9aTZlfSk7ZnVuY3Rpb24gYTZlKHQpe3JldHVybiBQaCh0aGlzLl9fZGF0YV9fLHQpPi0xfXZhciB1cSxocT1NKCgpPT57InVzZSBzdHJpY3QiO2Z2KCk7byhhNmUsImxpc3RDYWNoZUhhcyIpO3VxPWE2ZX0pO2Z1bmN0aW9uIHM2ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1QaChyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfXZhciBmcSxkcT1NKCgpPT57InVzZSBzdHJpY3QiO2Z2KCk7byhzNmUsImxpc3RDYWNoZVNldCIpO2ZxPXM2ZX0pO2Z1bmN0aW9uIEpwKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fXZhciBCaCxkdj1NKCgpPT57InVzZSBzdHJpY3QiO2FxKCk7b3EoKTtjcSgpO2hxKCk7ZHEoKTtvKEpwLCJMaXN0Q2FjaGUiKTtKcC5wcm90b3R5cGUuY2xlYXI9aXE7SnAucHJvdG90eXBlLmRlbGV0ZT1zcTtKcC5wcm90b3R5cGUuZ2V0PWxxO0pwLnByb3RvdHlwZS5oYXM9dXE7SnAucHJvdG90eXBlLnNldD1mcTtCaD1KcH0pO3ZhciBvNmUsRmgsbDU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPaCgpO0JvKCk7bzZlPUFzKG9pLCJNYXAiKSxGaD1vNmV9KTtmdW5jdGlvbiBsNmUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBOXyxtYXA6bmV3KEZofHxCaCksc3RyaW5nOm5ldyBOX319dmFyIHBxLG1xPU0oKCk9PnsidXNlIHN0cmljdCI7bnEoKTtkdigpO2w1KCk7byhsNmUsIm1hcENhY2hlQ2xlYXIiKTtwcT1sNmV9KTtmdW5jdGlvbiBjNmUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIGU9PSJzdHJpbmcifHxlPT0ibnVtYmVyInx8ZT09InN5bWJvbCJ8fGU9PSJib29sZWFuIj90IT09Il9fcHJvdG9fXyI6dD09PW51bGx9dmFyIGdxLHlxPU0oKCk9PnsidXNlIHN0cmljdCI7byhjNmUsImlzS2V5YWJsZSIpO2dxPWM2ZX0pO2Z1bmN0aW9uIHU2ZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIGdxKGUpP3JbdHlwZW9mIGU9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9dmFyIHpoLHB2PU0oKCk9PnsidXNlIHN0cmljdCI7eXEoKTtvKHU2ZSwiZ2V0TWFwRGF0YSIpO3poPXU2ZX0pO2Z1bmN0aW9uIGg2ZSh0KXt2YXIgZT16aCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciB2cSx4cT1NKCgpPT57InVzZSBzdHJpY3QiO3B2KCk7byhoNmUsIm1hcENhY2hlRGVsZXRlIik7dnE9aDZlfSk7ZnVuY3Rpb24gZjZlKHQpe3JldHVybiB6aCh0aGlzLHQpLmdldCh0KX12YXIgYnEsd3E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwdigpO28oZjZlLCJtYXBDYWNoZUdldCIpO2JxPWY2ZX0pO2Z1bmN0aW9uIGQ2ZSh0KXtyZXR1cm4gemgodGhpcyx0KS5oYXModCl9dmFyIFRxLGtxPU0oKCk9PnsidXNlIHN0cmljdCI7cHYoKTtvKGQ2ZSwibWFwQ2FjaGVIYXMiKTtUcT1kNmV9KTtmdW5jdGlvbiBwNmUodCxlKXt2YXIgcj16aCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfXZhciBFcSxTcT1NKCgpPT57InVzZSBzdHJpY3QiO3B2KCk7byhwNmUsIm1hcENhY2hlU2V0Iik7RXE9cDZlfSk7ZnVuY3Rpb24gZW0odCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19dmFyIF9kLGM1PU0oKCk9PnsidXNlIHN0cmljdCI7bXEoKTt4cSgpO3dxKCk7a3EoKTtTcSgpO28oZW0sIk1hcENhY2hlIik7ZW0ucHJvdG90eXBlLmNsZWFyPXBxO2VtLnByb3RvdHlwZS5kZWxldGU9dnE7ZW0ucHJvdG90eXBlLmdldD1icTtlbS5wcm90b3R5cGUuaGFzPVRxO2VtLnByb3RvdHlwZS5zZXQ9RXE7X2Q9ZW19KTtmdW5jdGlvbiBSXyh0LGUpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24ifHxlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKG02ZSk7dmFyIHI9byhmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sYT1yLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgcz10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9YS5zZXQoaSxzKXx8YSxzfSwibWVtb2l6ZWQiKTtyZXR1cm4gci5jYWNoZT1uZXcoUl8uQ2FjaGV8fF9kKSxyfXZhciBtNmUsdG0sTV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjNSgpO202ZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhSXywibWVtb2l6ZSIpO1JfLkNhY2hlPV9kO3RtPVJffSk7ZnVuY3Rpb24gZzZlKCl7dGhpcy5fX2RhdGFfXz1uZXcgQmgsdGhpcy5zaXplPTB9dmFyIENxLEFxPU0oKCk9PnsidXNlIHN0cmljdCI7ZHYoKTtvKGc2ZSwic3RhY2tDbGVhciIpO0NxPWc2ZX0pO2Z1bmN0aW9uIHk2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn12YXIgX3EsTHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHk2ZSwic3RhY2tEZWxldGUiKTtfcT15NmV9KTtmdW5jdGlvbiB2NmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfXZhciBEcSxOcT1NKCgpPT57InVzZSBzdHJpY3QiO28odjZlLCJzdGFja0dldCIpO0RxPXY2ZX0pO2Z1bmN0aW9uIHg2ZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIFJxLE1xPU0oKCk9PnsidXNlIHN0cmljdCI7byh4NmUsInN0YWNrSGFzIik7UnE9eDZlfSk7ZnVuY3Rpb24gdzZlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgQmgpe3ZhciBuPXIuX19kYXRhX187aWYoIUZofHxuLmxlbmd0aDxiNmUtMSlyZXR1cm4gbi5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IF9kKG4pfXJldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZT1yLnNpemUsdGhpc312YXIgYjZlLElxLE9xPU0oKCk9PnsidXNlIHN0cmljdCI7ZHYoKTtsNSgpO2M1KCk7YjZlPTIwMDtvKHc2ZSwic3RhY2tTZXQiKTtJcT13NmV9KTtmdW5jdGlvbiBybSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBCaCh0KTt0aGlzLnNpemU9ZS5zaXplfXZhciBiYyxtdj1NKCgpPT57InVzZSBzdHJpY3QiO2R2KCk7QXEoKTtMcSgpO05xKCk7TXEoKTtPcSgpO28ocm0sIlN0YWNrIik7cm0ucHJvdG90eXBlLmNsZWFyPUNxO3JtLnByb3RvdHlwZS5kZWxldGU9X3E7cm0ucHJvdG90eXBlLmdldD1EcTtybS5wcm90b3R5cGUuaGFzPVJxO3JtLnByb3RvdHlwZS5zZXQ9SXE7YmM9cm19KTt2YXIgVDZlLG5tLElfPU0oKCk9PnsidXNlIHN0cmljdCI7T2goKTtUNmU9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9QXMoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoe319KCksbm09VDZlfSk7ZnVuY3Rpb24gazZlKHQsZSxyKXtlPT0iX19wcm90b19fIiYmbm0/bm0odCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6dFtlXT1yfXZhciB3YyxpbT1NKCgpPT57InVzZSBzdHJpY3QiO0lfKCk7byhrNmUsImJhc2VBc3NpZ25WYWx1ZSIpO3djPWs2ZX0pO2Z1bmN0aW9uIEU2ZSh0LGUscil7KHIhPT12b2lkIDAmJiFGbyh0W2VdLHIpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZ3Yyh0LGUscil9dmFyIGd2LE9fPU0oKCk9PnsidXNlIHN0cmljdCI7aW0oKTtBZCgpO28oRTZlLCJhc3NpZ25NZXJnZVZhbHVlIik7Z3Y9RTZlfSk7ZnVuY3Rpb24gUzZlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLHM9bihlKSxsPXMubGVuZ3RoO2wtLTspe3ZhciB1PXNbdD9sOisraV07aWYocihhW3VdLHUsYSk9PT0hMSlicmVha31yZXR1cm4gZX19dmFyIFBxLEJxPU0oKCk9PnsidXNlIHN0cmljdCI7byhTNmUsImNyZWF0ZUJhc2VGb3IiKTtQcT1TNmV9KTt2YXIgQzZlLGFtLHU1PU0oKCk9PnsidXNlIHN0cmljdCI7QnEoKTtDNmU9UHEoKSxhbT1DNmV9KTtmdW5jdGlvbiBfNmUodCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIHI9dC5sZW5ndGgsbj1HcT9HcShyKTpuZXcgdC5jb25zdHJ1Y3RvcihyKTtyZXR1cm4gdC5jb3B5KG4pLG59dmFyICRxLEZxLEE2ZSx6cSxHcSxoNSxQXz1NKCgpPT57InVzZSBzdHJpY3QiO0JvKCk7JHE9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxGcT0kcSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEE2ZT1GcSYmRnEuZXhwb3J0cz09PSRxLHpxPUE2ZT9vaS5CdWZmZXI6dm9pZCAwLEdxPXpxP3pxLmFsbG9jVW5zYWZlOnZvaWQgMDtvKF82ZSwiY2xvbmVCdWZmZXIiKTtoNT1fNmV9KTt2YXIgTDZlLHNtLEJfPU0oKCk9PnsidXNlIHN0cmljdCI7Qm8oKTtMNmU9b2kuVWludDhBcnJheSxzbT1MNmV9KTtmdW5jdGlvbiBENmUodCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHNtKGUpLnNldChuZXcgc20odCkpLGV9dmFyIG9tLGY1PU0oKCk9PnsidXNlIHN0cmljdCI7Ql8oKTtvKEQ2ZSwiY2xvbmVBcnJheUJ1ZmZlciIpO29tPUQ2ZX0pO2Z1bmN0aW9uIE42ZSh0LGUpe3ZhciByPWU/b20odC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihyLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9dmFyIGQ1LEZfPU0oKCk9PnsidXNlIHN0cmljdCI7ZjUoKTtvKE42ZSwiY2xvbmVUeXBlZEFycmF5Iik7ZDU9TjZlfSk7ZnVuY3Rpb24gUjZlKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkobikpOysrcjxuOyllW3JdPXRbcl07cmV0dXJuIGV9dmFyIHA1LHpfPU0oKCk9PnsidXNlIHN0cmljdCI7byhSNmUsImNvcHlBcnJheSIpO3A1PVI2ZX0pO3ZhciBWcSxNNmUsVXEsSHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpbygpO1ZxPU9iamVjdC5jcmVhdGUsTTZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gbyh0LCJvYmplY3QiKSxmdW5jdGlvbihlKXtpZigheG4oZSkpcmV0dXJue307aWYoVnEpcmV0dXJuIFZxKGUpO3QucHJvdG90eXBlPWU7dmFyIHI9bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxyfX0oKSxVcT1NNmV9KTtmdW5jdGlvbiBJNmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fXZhciBtNSxHXz1NKCgpPT57InVzZSBzdHJpY3QiO28oSTZlLCJvdmVyQXJnIik7bTU9STZlfSk7dmFyIE82ZSxsbSxnNT1NKCgpPT57InVzZSBzdHJpY3QiO0dfKCk7TzZlPW01KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLGxtPU82ZX0pO2Z1bmN0aW9uIEI2ZSh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yLHI9dHlwZW9mIGU9PSJmdW5jdGlvbiImJmUucHJvdG90eXBlfHxQNmU7cmV0dXJuIHQ9PT1yfXZhciBQNmUsVGMsY209TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQNmU9T2JqZWN0LnByb3RvdHlwZTtvKEI2ZSwiaXNQcm90b3R5cGUiKTtUYz1CNmV9KTtmdW5jdGlvbiBGNmUodCl7cmV0dXJuIHR5cGVvZiB0LmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhVGModCk/VXEobG0odCkpOnt9fXZhciB5NSwkXz1NKCgpPT57InVzZSBzdHJpY3QiO0hxKCk7ZzUoKTtjbSgpO28oRjZlLCJpbml0Q2xvbmVPYmplY3QiKTt5NT1GNmV9KTtmdW5jdGlvbiB6NmUodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0In12YXIgZWksem89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHo2ZSwiaXNPYmplY3RMaWtlIik7ZWk9ejZlfSk7ZnVuY3Rpb24gJDZlKHQpe3JldHVybiBlaSh0KSYmZ2EodCk9PUc2ZX12YXIgRzZlLFZfLFdxPU0oKCk9PnsidXNlIHN0cmljdCI7THUoKTt6bygpO0c2ZT0iW29iamVjdCBBcmd1bWVudHNdIjtvKCQ2ZSwiYmFzZUlzQXJndW1lbnRzIik7Vl89JDZlfSk7dmFyIFlxLFY2ZSxVNmUsSDZlLE1sLHVtPU0oKCk9PnsidXNlIHN0cmljdCI7V3EoKTt6bygpO1lxPU9iamVjdC5wcm90b3R5cGUsVjZlPVlxLmhhc093blByb3BlcnR5LFU2ZT1ZcS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxINmU9Vl8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9WXzpmdW5jdGlvbih0KXtyZXR1cm4gZWkodCkmJlY2ZS5jYWxsKHQsImNhbGxlZSIpJiYhVTZlLmNhbGwodCwiY2FsbGVlIil9LE1sPUg2ZX0pO3ZhciBXNmUsRHQsSG49TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXNmU9QXJyYXkuaXNBcnJheSxEdD1XNmV9KTtmdW5jdGlvbiBxNmUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIiYmdD4tMSYmdCUxPT0wJiZ0PD1ZNmV9dmFyIFk2ZSxobSx2NT1NKCgpPT57InVzZSBzdHJpY3QiO1k2ZT05MDA3MTk5MjU0NzQwOTkxO28ocTZlLCJpc0xlbmd0aCIpO2htPXE2ZX0pO2Z1bmN0aW9uIFg2ZSh0KXtyZXR1cm4gdCE9bnVsbCYmaG0odC5sZW5ndGgpJiYhX2kodCl9dmFyIGxpLEdvPU0oKCk9PnsidXNlIHN0cmljdCI7dXYoKTt2NSgpO28oWDZlLCJpc0FycmF5TGlrZSIpO2xpPVg2ZX0pO2Z1bmN0aW9uIGo2ZSh0KXtyZXR1cm4gZWkodCkmJmxpKHQpfXZhciBMZCx4NT1NKCgpPT57InVzZSBzdHJpY3QiO0dvKCk7em8oKTtvKGo2ZSwiaXNBcnJheUxpa2VPYmplY3QiKTtMZD1qNmV9KTtmdW5jdGlvbiBLNmUoKXtyZXR1cm4hMX12YXIgcXEsWHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEs2ZSwic3R1YkZhbHNlIik7cXE9SzZlfSk7dmFyIFFxLGpxLFE2ZSxLcSxaNmUsSjZlLElsLGZtPU0oKCk9PnsidXNlIHN0cmljdCI7Qm8oKTtYcSgpO1FxPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsanE9UXEmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxRNmU9anEmJmpxLmV4cG9ydHM9PT1RcSxLcT1RNmU/b2kuQnVmZmVyOnZvaWQgMCxaNmU9S3E/S3EuaXNCdWZmZXI6dm9pZCAwLEo2ZT1aNmV8fHFxLElsPUo2ZX0pO2Z1bmN0aW9uIGFTZSh0KXtpZighZWkodCl8fGdhKHQpIT1lU2UpcmV0dXJuITE7dmFyIGU9bG0odCk7aWYoZT09PW51bGwpcmV0dXJuITA7dmFyIHI9blNlLmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiImJnIgaW5zdGFuY2VvZiByJiZacS5jYWxsKHIpPT1pU2V9dmFyIGVTZSx0U2UsclNlLFpxLG5TZSxpU2UsSnEsZVg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO2c1KCk7em8oKTtlU2U9IltvYmplY3QgT2JqZWN0XSIsdFNlPUZ1bmN0aW9uLnByb3RvdHlwZSxyU2U9T2JqZWN0LnByb3RvdHlwZSxacT10U2UudG9TdHJpbmcsblNlPXJTZS5oYXNPd25Qcm9wZXJ0eSxpU2U9WnEuY2FsbChPYmplY3QpO28oYVNlLCJpc1BsYWluT2JqZWN0Iik7SnE9YVNlfSk7ZnVuY3Rpb24gRFNlKHQpe3JldHVybiBlaSh0KSYmaG0odC5sZW5ndGgpJiYhIXpuW2dhKHQpXX12YXIgc1NlLG9TZSxsU2UsY1NlLHVTZSxoU2UsZlNlLGRTZSxwU2UsbVNlLGdTZSx5U2UsdlNlLHhTZSxiU2Usd1NlLFRTZSxrU2UsRVNlLFNTZSxDU2UsQVNlLF9TZSxMU2Usem4sdFgsclg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO3Y1KCk7em8oKTtzU2U9IltvYmplY3QgQXJndW1lbnRzXSIsb1NlPSJbb2JqZWN0IEFycmF5XSIsbFNlPSJbb2JqZWN0IEJvb2xlYW5dIixjU2U9IltvYmplY3QgRGF0ZV0iLHVTZT0iW29iamVjdCBFcnJvcl0iLGhTZT0iW29iamVjdCBGdW5jdGlvbl0iLGZTZT0iW29iamVjdCBNYXBdIixkU2U9IltvYmplY3QgTnVtYmVyXSIscFNlPSJbb2JqZWN0IE9iamVjdF0iLG1TZT0iW29iamVjdCBSZWdFeHBdIixnU2U9IltvYmplY3QgU2V0XSIseVNlPSJbb2JqZWN0IFN0cmluZ10iLHZTZT0iW29iamVjdCBXZWFrTWFwXSIseFNlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsYlNlPSJbb2JqZWN0IERhdGFWaWV3XSIsd1NlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFRTZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixrU2U9IltvYmplY3QgSW50OEFycmF5XSIsRVNlPSJbb2JqZWN0IEludDE2QXJyYXldIixTU2U9IltvYmplY3QgSW50MzJBcnJheV0iLENTZT0iW29iamVjdCBVaW50OEFycmF5XSIsQVNlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsX1NlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsTFNlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsem49e307em5bd1NlXT16bltUU2VdPXpuW2tTZV09em5bRVNlXT16bltTU2VdPXpuW0NTZV09em5bQVNlXT16bltfU2VdPXpuW0xTZV09ITA7em5bc1NlXT16bltvU2VdPXpuW3hTZV09em5bbFNlXT16bltiU2VdPXpuW2NTZV09em5bdVNlXT16bltoU2VdPXpuW2ZTZV09em5bZFNlXT16bltwU2VdPXpuW21TZV09em5bZ1NlXT16blt5U2VdPXpuW3ZTZV09ITE7byhEU2UsImJhc2VJc1R5cGVkQXJyYXkiKTt0WD1EU2V9KTtmdW5jdGlvbiBOU2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX12YXIgJG8sRGQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE5TZSwiYmFzZVVuYXJ5Iik7JG89TlNlfSk7dmFyIG5YLHl2LFJTZSxVXyxNU2UsVm8sdnY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMXygpO25YPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMseXY9blgmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxSU2U9eXYmJnl2LmV4cG9ydHM9PT1uWCxVXz1SU2UmJnM1LnByb2Nlc3MsTVNlPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXl2JiZ5di5yZXF1aXJlJiZ5di5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fFVfJiZVXy5iaW5kaW5nJiZVXy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxWbz1NU2V9KTt2YXIgaVgsSVNlLEdoLHh2PU0oKCk9PnsidXNlIHN0cmljdCI7clgoKTtEZCgpO3Z2KCk7aVg9Vm8mJlZvLmlzVHlwZWRBcnJheSxJU2U9aVg/JG8oaVgpOnRYLEdoPUlTZX0pO2Z1bmN0aW9uIE9TZSh0LGUpe2lmKCEoZT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiB0W2VdPT0iZnVuY3Rpb24iKSYmZSE9Il9fcHJvdG9fXyIpcmV0dXJuIHRbZV19dmFyIGJ2LEhfPU0oKCk9PnsidXNlIHN0cmljdCI7byhPU2UsInNhZmVHZXQiKTtidj1PU2V9KTtmdW5jdGlvbiBGU2UodCxlLHIpe3ZhciBuPXRbZV07KCEoQlNlLmNhbGwodCxlKSYmRm8obixyKSl8fHI9PT12b2lkIDAmJiEoZSBpbiB0KSkmJndjKHQsZSxyKX12YXIgUFNlLEJTZSxrYyxkbT1NKCgpPT57InVzZSBzdHJpY3QiO2ltKCk7QWQoKTtQU2U9T2JqZWN0LnByb3RvdHlwZSxCU2U9UFNlLmhhc093blByb3BlcnR5O28oRlNlLCJhc3NpZ25WYWx1ZSIpO2tjPUZTZX0pO2Z1bmN0aW9uIHpTZSh0LGUscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBhPS0xLHM9ZS5sZW5ndGg7KythPHM7KXt2YXIgbD1lW2FdLHU9bj9uKHJbbF0sdFtsXSxsLHIsdCk6dm9pZCAwO3U9PT12b2lkIDAmJih1PXRbbF0pLGk/d2MocixsLHUpOmtjKHIsbCx1KX1yZXR1cm4gcn12YXIgVW8sTmQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkbSgpO2ltKCk7byh6U2UsImNvcHlPYmplY3QiKTtVbz16U2V9KTtmdW5jdGlvbiBHU2UodCxlKXtmb3IodmFyIHI9LTEsbj1BcnJheSh0KTsrK3I8dDspbltyXT1lKHIpO3JldHVybiBufXZhciBhWCxzWD1NKCgpPT57InVzZSBzdHJpY3QiO28oR1NlLCJiYXNlVGltZXMiKTthWD1HU2V9KTtmdW5jdGlvbiBVU2UodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz8kU2UsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZWU2UudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfXZhciAkU2UsVlNlLCRoLHd2PU0oKCk9PnsidXNlIHN0cmljdCI7JFNlPTkwMDcxOTkyNTQ3NDA5OTEsVlNlPS9eKD86MHxbMS05XVxkKikkLztvKFVTZSwiaXNJbmRleCIpOyRoPVVTZX0pO2Z1bmN0aW9uIFlTZSh0LGUpe3ZhciByPUR0KHQpLG49IXImJk1sKHQpLGk9IXImJiFuJiZJbCh0KSxhPSFyJiYhbiYmIWkmJkdoKHQpLHM9cnx8bnx8aXx8YSxsPXM/YVgodC5sZW5ndGgsU3RyaW5nKTpbXSx1PWwubGVuZ3RoO2Zvcih2YXIgaCBpbiB0KShlfHxXU2UuY2FsbCh0LGgpKSYmIShzJiYoaD09Imxlbmd0aCJ8fGkmJihoPT0ib2Zmc2V0Inx8aD09InBhcmVudCIpfHxhJiYoaD09ImJ1ZmZlciJ8fGg9PSJieXRlTGVuZ3RoInx8aD09ImJ5dGVPZmZzZXQiKXx8JGgoaCx1KSkpJiZsLnB1c2goaCk7cmV0dXJuIGx9dmFyIEhTZSxXU2UsYjUsV189TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzWCgpO3VtKCk7SG4oKTtmbSgpO3d2KCk7eHYoKTtIU2U9T2JqZWN0LnByb3RvdHlwZSxXU2U9SFNlLmhhc093blByb3BlcnR5O28oWVNlLCJhcnJheUxpa2VLZXlzIik7YjU9WVNlfSk7ZnVuY3Rpb24gcVNlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpZm9yKHZhciByIGluIE9iamVjdCh0KSllLnB1c2gocik7cmV0dXJuIGV9dmFyIG9YLGxYPU0oKCk9PnsidXNlIHN0cmljdCI7byhxU2UsIm5hdGl2ZUtleXNJbiIpO29YPXFTZX0pO2Z1bmN0aW9uIEtTZSh0KXtpZigheG4odCkpcmV0dXJuIG9YKHQpO3ZhciBlPVRjKHQpLHI9W107Zm9yKHZhciBuIGluIHQpbj09ImNvbnN0cnVjdG9yIiYmKGV8fCFqU2UuY2FsbCh0LG4pKXx8ci5wdXNoKG4pO3JldHVybiByfXZhciBYU2UsalNlLGNYLHVYPU0oKCk9PnsidXNlIHN0cmljdCI7aW8oKTtjbSgpO2xYKCk7WFNlPU9iamVjdC5wcm90b3R5cGUsalNlPVhTZS5oYXNPd25Qcm9wZXJ0eTtvKEtTZSwiYmFzZUtleXNJbiIpO2NYPUtTZX0pO2Z1bmN0aW9uIFFTZSh0KXtyZXR1cm4gbGkodCk/YjUodCwhMCk6Y1godCl9dmFyIF9zLFZoPU0oKCk9PnsidXNlIHN0cmljdCI7V18oKTt1WCgpO0dvKCk7byhRU2UsImtleXNJbiIpO19zPVFTZX0pO2Z1bmN0aW9uIFpTZSh0KXtyZXR1cm4gVW8odCxfcyh0KSl9dmFyIGhYLGZYPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTtWaCgpO28oWlNlLCJ0b1BsYWluT2JqZWN0Iik7aFg9WlNlfSk7ZnVuY3Rpb24gSlNlKHQsZSxyLG4saSxhLHMpe3ZhciBsPWJ2KHQsciksdT1idihlLHIpLGg9cy5nZXQodSk7aWYoaCl7Z3YodCxyLGgpO3JldHVybn12YXIgZj1hP2EobCx1LHIrIiIsdCxlLHMpOnZvaWQgMCxkPWY9PT12b2lkIDA7aWYoZCl7dmFyIHA9RHQodSksbT0hcCYmSWwodSksZz0hcCYmIW0mJkdoKHUpO2Y9dSxwfHxtfHxnP0R0KGwpP2Y9bDpMZChsKT9mPXA1KGwpOm0/KGQ9ITEsZj1oNSh1LCEwKSk6Zz8oZD0hMSxmPWQ1KHUsITApKTpmPVtdOkpxKHUpfHxNbCh1KT8oZj1sLE1sKGwpP2Y9aFgobCk6KCF4bihsKXx8X2kobCkpJiYoZj15NSh1KSkpOmQ9ITF9ZCYmKHMuc2V0KHUsZiksaShmLHUsbixhLHMpLHMuZGVsZXRlKHUpKSxndih0LHIsZil9dmFyIGRYLHBYPU0oKCk9PnsidXNlIHN0cmljdCI7T18oKTtQXygpO0ZfKCk7el8oKTskXygpO3VtKCk7SG4oKTt4NSgpO2ZtKCk7dXYoKTtpbygpO2VYKCk7eHYoKTtIXygpO2ZYKCk7byhKU2UsImJhc2VNZXJnZURlZXAiKTtkWD1KU2V9KTtmdW5jdGlvbiBtWCh0LGUscixuLGkpe3QhPT1lJiZhbShlLGZ1bmN0aW9uKGEscyl7aWYoaXx8KGk9bmV3IGJjKSx4bihhKSlkWCh0LGUscyxyLG1YLG4saSk7ZWxzZXt2YXIgbD1uP24oYnYodCxzKSxhLHMrIiIsdCxlLGkpOnZvaWQgMDtsPT09dm9pZCAwJiYobD1hKSxndih0LHMsbCl9fSxfcyl9dmFyIGdYLHlYPU0oKCk9PnsidXNlIHN0cmljdCI7bXYoKTtPXygpO3U1KCk7cFgoKTtpbygpO1ZoKCk7SF8oKTtvKG1YLCJiYXNlTWVyZ2UiKTtnWD1tWH0pO2Z1bmN0aW9uIGVDZSh0KXtyZXR1cm4gdH12YXIgYWEsUnU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGVDZSwiaWRlbnRpdHkiKTthYT1lQ2V9KTtmdW5jdGlvbiB0Q2UodCxlLHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxyWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIHQuYXBwbHkoZSxyKX12YXIgdlgseFg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHRDZSwiYXBwbHkiKTt2WD10Q2V9KTtmdW5jdGlvbiByQ2UodCxlLHIpe3JldHVybiBlPWJYKGU9PT12b2lkIDA/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cyxpPS0xLGE9Ylgobi5sZW5ndGgtZSwwKSxzPUFycmF5KGEpOysraTxhOylzW2ldPW5bZStpXTtpPS0xO2Zvcih2YXIgbD1BcnJheShlKzEpOysraTxlOylsW2ldPW5baV07cmV0dXJuIGxbZV09cihzKSx2WCh0LHRoaXMsbCl9fXZhciBiWCx3NSxZXz1NKCgpPT57InVzZSBzdHJpY3QiO3hYKCk7Ylg9TWF0aC5tYXg7byhyQ2UsIm92ZXJSZXN0Iik7dzU9ckNlfSk7ZnVuY3Rpb24gbkNlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgTHMscV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG5DZSwiY29uc3RhbnQiKTtMcz1uQ2V9KTt2YXIgaUNlLHdYLFRYPU0oKCk9PnsidXNlIHN0cmljdCI7cV8oKTtJXygpO1J1KCk7aUNlPW5tP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG5tKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6THMoZSksd3JpdGFibGU6ITB9KX06YWEsd1g9aUNlfSk7ZnVuY3Rpb24gbENlKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPW9DZSgpLGk9c0NlLShuLXIpO2lmKHI9bixpPjApe2lmKCsrZT49YUNlKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBhQ2Usc0NlLG9DZSxrWCxFWD1NKCgpPT57InVzZSBzdHJpY3QiO2FDZT04MDAsc0NlPTE2LG9DZT1EYXRlLm5vdztvKGxDZSwic2hvcnRPdXQiKTtrWD1sQ2V9KTt2YXIgY0NlLFQ1LFhfPU0oKCk9PnsidXNlIHN0cmljdCI7VFgoKTtFWCgpO2NDZT1rWCh3WCksVDU9Y0NlfSk7ZnVuY3Rpb24gdUNlKHQsZSl7cmV0dXJuIFQ1KHc1KHQsZSxhYSksdCsiIil9dmFyIEVjLHBtPU0oKCk9PnsidXNlIHN0cmljdCI7UnUoKTtZXygpO1hfKCk7byh1Q2UsImJhc2VSZXN0Iik7RWM9dUNlfSk7ZnVuY3Rpb24gaENlKHQsZSxyKXtpZigheG4ocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuKG49PSJudW1iZXIiP2xpKHIpJiYkaChlLHIubGVuZ3RoKTpuPT0ic3RyaW5nIiYmZSBpbiByKT9GbyhyW2VdLHQpOiExfXZhciBhbyxSZD1NKCgpPT57InVzZSBzdHJpY3QiO0FkKCk7R28oKTt3digpO2lvKCk7byhoQ2UsImlzSXRlcmF0ZWVDYWxsIik7YW89aENlfSk7ZnVuY3Rpb24gZkNlKHQpe3JldHVybiBFYyhmdW5jdGlvbihlLHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsYT1pPjE/cltpLTFdOnZvaWQgMCxzPWk+Mj9yWzJdOnZvaWQgMDtmb3IoYT10Lmxlbmd0aD4zJiZ0eXBlb2YgYT09ImZ1bmN0aW9uIj8oaS0tLGEpOnZvaWQgMCxzJiZhbyhyWzBdLHJbMV0scykmJihhPWk8Mz92b2lkIDA6YSxpPTEpLGU9T2JqZWN0KGUpOysrbjxpOyl7dmFyIGw9cltuXTtsJiZ0KGUsbCxuLGEpfXJldHVybiBlfSl9dmFyIGs1LGpfPU0oKCk9PnsidXNlIHN0cmljdCI7cG0oKTtSZCgpO28oZkNlLCJjcmVhdGVBc3NpZ25lciIpO2s1PWZDZX0pO3ZhciBkQ2UsVWgsS189TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5WCgpO2pfKCk7ZENlPWs1KGZ1bmN0aW9uKHQsZSxyKXtnWCh0LGUscil9KSxVaD1kQ2V9KTtmdW5jdGlvbiBKXyh0LGUpe2lmKCF0KXJldHVybiBlO2xldCByPWBjdXJ2ZSR7dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7cmV0dXJuIHBDZVtyXT8/ZX1mdW5jdGlvbiB2Q2UodCxlKXtsZXQgcj10LnRyaW0oKTtpZihyKXJldHVybiBlLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiPygwLEFYLnNhbml0aXplVXJsKShyKTpyfWZ1bmN0aW9uIERYKHQsZSl7cmV0dXJuIXR8fCFlPzA6TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSl9ZnVuY3Rpb24gYkNlKHQpe2xldCBlLHI9MDt0LmZvckVhY2goaT0+e3IrPURYKGksZSksZT1pfSk7bGV0IG49ci8yO3JldHVybiBlOSh0LG4pfWZ1bmN0aW9uIHdDZSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06YkNlKHQpfWZ1bmN0aW9uIGtDZSh0LGUscil7bGV0IG49c3RydWN0dXJlZENsb25lKHIpO1kuaW5mbygib3VyIHBvaW50cyIsbiksZSE9PSJzdGFydF9sZWZ0IiYmZSE9PSJzdGFydF9yaWdodCImJm4ucmV2ZXJzZSgpO2xldCBpPTI1K3QsYT1lOShuLGkpLHM9MTArdCouNSxsPU1hdGguYXRhbjIoblswXS55LWEueSxuWzBdLngtYS54KSx1PXt4OjAseTowfTtyZXR1cm4gZT09PSJzdGFydF9sZWZ0Ij8odS54PU1hdGguc2luKGwrTWF0aC5QSSkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwrTWF0aC5QSSkqcysoblswXS55K2EueSkvMik6ZT09PSJlbmRfcmlnaHQiPyh1Lng9TWF0aC5zaW4obC1NYXRoLlBJKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsLU1hdGguUEkpKnMrKG5bMF0ueSthLnkpLzItNSk6ZT09PSJlbmRfbGVmdCI/KHUueD1NYXRoLnNpbihsKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsKSpzKyhuWzBdLnkrYS55KS8yLTUpOih1Lng9TWF0aC5zaW4obCkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwpKnMrKG5bMF0ueSthLnkpLzIpLHV9ZnVuY3Rpb24gdDkodCl7bGV0IGU9IiIscj0iIjtmb3IobGV0IG4gb2YgdCluIT09dm9pZCAwJiYobi5zdGFydHNXaXRoKCJjb2xvcjoiKXx8bi5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP3I9cituKyI7IjplPWUrbisiOyIpO3JldHVybntzdHlsZTplLGxhYmVsU3R5bGU6cn19ZnVuY3Rpb24gRUNlKHQpe2xldCBlPSIiLHI9IjAxMjM0NTY3ODlhYmNkZWYiLG49ci5sZW5ndGg7Zm9yKGxldCBpPTA7aTx0O2krKyllKz1yLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikpO3JldHVybiBlfWZ1bmN0aW9uIFM1KHQsZSl7cmV0dXJuIGE5KHQsZSkuaGVpZ2h0fWZ1bmN0aW9uIHNvKHQsZSl7cmV0dXJuIGE5KHQsZSkud2lkdGh9ZnVuY3Rpb24gczkodCl7cmV0dXJuInN0ciJpbiB0fWZ1bmN0aW9uIERzKHQsZSl7cmV0dXJuIFVoKHt9LHQsZSl9ZnVuY3Rpb24gR24odCl7cmV0dXJuIHQ/P251bGx9dmFyIEFYLFpfLHBDZSxtQ2UsZ0NlLF9YLExYLHlDZSx4Q2UsU1gsZTksVENlLENYLHI5LG45LFNDZSxDQ2UsaTksQUNlLGE5LFFfLEU1LF9DZSxMQ2UsSG8sVXQsTlgsTWEsQzUsaHI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtBWD1KaShRcCgpLDEpO3ByKCk7ZnIoKTtuQygpO3V0KCk7WmYoKTtncCgpO01fKCk7S18oKTtRYigpO1pfPSJcdTIwMEIiLHBDZT17Y3VydmVCYXNpczpQbyxjdXJ2ZUJhc2lzQ2xvc2VkOlkzLGN1cnZlQmFzaXNPcGVuOnEzLGN1cnZlQnVtcFg6bF8sY3VydmVCdW1wWTpjXyxjdXJ2ZUJ1bmRsZTp1XyxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOmZfLGN1cnZlQ2FyZGluYWxPcGVuOnBfLGN1cnZlQ2FyZGluYWw6aF8sY3VydmVDYXRtdWxsUm9tQ2xvc2VkOnlfLGN1cnZlQ2F0bXVsbFJvbU9wZW46dl8sY3VydmVDYXRtdWxsUm9tOmdfLGN1cnZlTGluZWFyOlhwLGN1cnZlTGluZWFyQ2xvc2VkOlozLGN1cnZlTW9ub3RvbmVYOmJfLGN1cnZlTW9ub3RvbmVZOndfLGN1cnZlTmF0dXJhbDplNSxjdXJ2ZVN0ZXA6cjUsY3VydmVTdGVwQWZ0ZXI6a18sY3VydmVTdGVwQmVmb3JlOlRffSxtQ2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGdDZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9X1godCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyksbj17fTtpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1yLm1hcChsPT5sLmFyZ3MpO3hwKHMpLG49Vm4obixbLi4uc10pfWVsc2Ugbj1yLmFyZ3M7aWYoIW4pcmV0dXJuO2xldCBpPW1wKHQsZSksYT0iY29uZmlnIjtyZXR1cm4gblthXSE9PXZvaWQgMCYmKGk9PT0iZmxvd2NoYXJ0LXYyIiYmKGk9ImZsb3djaGFydCIpLG5baV09blthXSxkZWxldGUgblthXSksbn0sImRldGVjdEluaXQiKSxfWD1vKGZ1bmN0aW9uKHQsZT1udWxsKXt0cnl7bGV0IHI9bmV3IFJlZ0V4cChgWyVdezJ9KD8hW3tdJHttQ2Uuc291cmNlfSkoPz1bfV1bJV17Mn0pLioKYCwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UociwiIikucmVwbGFjZSgvJy9nbSwnIicpLFkuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7ZSE9PW51bGw/IiB0eXBlOiIrZToiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHt0fWApO2xldCBuLGk9W107Zm9yKDsobj1LZi5leGVjKHQpKSE9PW51bGw7KWlmKG4uaW5kZXg9PT1LZi5sYXN0SW5kZXgmJktmLmxhc3RJbmRleCsrLG4mJiFlfHxlJiZuWzFdPy5tYXRjaChlKXx8ZSYmblsyXT8ubWF0Y2goZSkpe2xldCBhPW5bMV0/blsxXTpuWzJdLHM9blszXT9uWzNdLnRyaW0oKTpuWzRdP0pTT04ucGFyc2Uobls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIGkubGVuZ3RoPT09MD97dHlwZTp0LGFyZ3M6bnVsbH06aS5sZW5ndGg9PT0xP2lbMF06aX1jYXRjaChyKXtyZXR1cm4gWS5lcnJvcihgRVJST1I6ICR7ci5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUgdHlwZTogJyR7ZX0nIGJhc2VkIG9uIHRoZSB0ZXh0OiAnJHt0fSdgKSx7dHlwZTp2b2lkIDAsYXJnczpudWxsfX19LCJkZXRlY3REaXJlY3RpdmUiKSxMWD1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoS2YsIiIpfSwicmVtb3ZlRGlyZWN0aXZlcyIpLHlDZT1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldFtyLG5db2YgZS5lbnRyaWVzKCkpaWYobi5tYXRjaCh0KSlyZXR1cm4gcjtyZXR1cm4tMX0sImlzU3Vic3RyaW5nSW5BcnJheSIpO28oSl8sImludGVycG9sYXRlVG9DdXJ2ZSIpO28odkNlLCJmb3JtYXRVcmwiKTt4Q2U9bygodCwuLi5lKT0+e2xldCByPXQuc3BsaXQoIi4iKSxuPXIubGVuZ3RoLTEsaT1yW25dLGE9d2luZG93O2ZvcihsZXQgcz0wO3M8bjtzKyspaWYoYT1hW3Jbc11dLCFhKXtZLmVycm9yKGBGdW5jdGlvbiBuYW1lOiAke3R9IG5vdCBmb3VuZCBpbiB3aW5kb3dgKTtyZXR1cm59YVtpXSguLi5lKX0sInJ1bkZ1bmMiKTtvKERYLCJkaXN0YW5jZSIpO28oYkNlLCJ0cmF2ZXJzZUVkZ2UiKTtvKHdDZSwiY2FsY0xhYmVsUG9zaXRpb24iKTtTWD1vKCh0LGU9Mik9PntsZXQgcj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KnIpL3J9LCJyb3VuZE51bWJlciIpLGU5PW8oKHQsZSk9PntsZXQgcixuPWU7Zm9yKGxldCBpIG9mIHQpe2lmKHIpe2xldCBhPURYKGkscik7aWYoYTxuKW4tPWE7ZWxzZXtsZXQgcz1uL2E7aWYoczw9MClyZXR1cm4gcjtpZihzPj0xKXJldHVybnt4OmkueCx5OmkueX07aWYocz4wJiZzPDEpcmV0dXJue3g6U1goKDEtcykqci54K3MqaS54LDUpLHk6U1goKDEtcykqci55K3MqaS55LDUpfX19cj1pfXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBwb2ludCBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlIil9LCJjYWxjdWxhdGVQb2ludCIpLFRDZT1vKCh0LGUscik9PntZLmluZm8oYG91ciBwb2ludHMgJHtKU09OLnN0cmluZ2lmeShlKX1gKSxlWzBdIT09ciYmKGU9ZS5yZXZlcnNlKCkpO2xldCBpPWU5KGUsMjUpLGE9dD8xMDo1LHM9TWF0aC5hdGFuMihlWzBdLnktaS55LGVbMF0ueC1pLngpLGw9e3g6MCx5OjB9O3JldHVybiBsLng9TWF0aC5zaW4ocykqYSsoZVswXS54K2kueCkvMixsLnk9LU1hdGguY29zKHMpKmErKGVbMF0ueStpLnkpLzIsbH0sImNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uIik7byhrQ2UsImNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24iKTtvKHQ5LCJnZXRTdHlsZXNGcm9tQXJyYXkiKTtDWD0wLHI5PW8oKCk9PihDWCsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrQ1gpLCJnZW5lcmF0ZUlkIik7byhFQ2UsIm1ha2VSYW5kb21IZXgiKTtuOT1vKHQ9PkVDZSh0Lmxlbmd0aCksInJhbmRvbSIpLFNDZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMCx0ZXh0OiIifX0sImdldFRleHRPYmoiKSxDQ2U9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKHFlLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxuXT1IbyhlLmZvbnRTaXplKSxpPXQuYXBwZW5kKCJ0ZXh0Iik7aS5hdHRyKCJ4IixlLngpLGkuYXR0cigieSIsZS55KSxpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLGkuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLGkuc3R5bGUoImZvbnQtc2l6ZSIsbiksaS5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksaS5hdHRyKCJmaWxsIixlLmZpbGwpLGUuY2xhc3MhPT12b2lkIDAmJmkuYXR0cigiY2xhc3MiLGUuY2xhc3MpO2xldCBhPWkuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBhLmF0dHIoIngiLGUueCtlLnRleHRNYXJnaW4qMiksYS5hdHRyKCJmaWxsIixlLmZpbGwpLGEudGV4dChyKSxpfSwiZHJhd1NpbXBsZVRleHQiKSxpOT10bSgodCxlLHIpPT57aWYoIXR8fChyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxyKSxxZS5saW5lQnJlYWtSZWdleC50ZXN0KHQpKSlyZXR1cm4gdDtsZXQgbj10LnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pLGk9W10sYT0iIjtyZXR1cm4gbi5mb3JFYWNoKChzLGwpPT57bGV0IHU9c28oYCR7c30gYCxyKSxoPXNvKGEscik7aWYodT5lKXtsZXR7aHlwaGVuYXRlZFN0cmluZ3M6cCxyZW1haW5pbmdXb3JkOm19PUFDZShzLGUsIi0iLHIpO2kucHVzaChhLC4uLnApLGE9bX1lbHNlIGgrdT49ZT8oaS5wdXNoKGEpLGE9cyk6YT1bYSxzXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO2wrMT09PW4ubGVuZ3RoJiZpLnB1c2goYSl9KSxpLmZpbHRlcihzPT5zIT09IiIpLmpvaW4oci5qb2luV2l0aCl9LCh0LGUscik9PmAke3R9JHtlfSR7ci5mb250U2l6ZX0ke3IuZm9udFdlaWdodH0ke3IuZm9udEZhbWlseX0ke3Iuam9pbldpdGh9YCksQUNlPXRtKCh0LGUscj0iLSIsbik9PntuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sbik7bGV0IGk9Wy4uLnRdLGE9W10scz0iIjtyZXR1cm4gaS5mb3JFYWNoKChsLHUpPT57bGV0IGg9YCR7c30ke2x9YDtpZihzbyhoLG4pPj1lKXtsZXQgZD11KzEscD1pLmxlbmd0aD09PWQsbT1gJHtofSR7cn1gO2EucHVzaChwP2g6bSkscz0iIn1lbHNlIHM9aH0pLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6c319LCh0LGUscj0iLSIsbik9PmAke3R9JHtlfSR7cn0ke24uZm9udFNpemV9JHtuLmZvbnRXZWlnaHR9JHtuLmZvbnRGYW1pbHl9YCk7byhTNSwiY2FsY3VsYXRlVGV4dEhlaWdodCIpO28oc28sImNhbGN1bGF0ZVRleHRXaWR0aCIpO2E5PXRtKCh0LGUpPT57bGV0e2ZvbnRTaXplOnI9MTIsZm9udEZhbWlseTpuPSJBcmlhbCIsZm9udFdlaWdodDppPTQwMH09ZTtpZighdClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07bGV0WyxhXT1IbyhyKSxzPVsic2Fucy1zZXJpZiIsbl0sbD10LnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KSx1PVtdLGg9VmUoImJvZHkiKTtpZighaC5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtsZXQgZj1oLmFwcGVuZCgic3ZnIik7Zm9yKGxldCBwIG9mIHMpe2xldCBtPTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2ZvcihsZXQgeSBvZiBsKXtsZXQgdj1TQ2UoKTt2LnRleHQ9eXx8Wl87bGV0IHg9Q0NlKGYsdikuc3R5bGUoImZvbnQtc2l6ZSIsYSkuc3R5bGUoImZvbnQtd2VpZ2h0IixpKS5zdHlsZSgiZm9udC1mYW1pbHkiLHApLGI9KHguX2dyb3Vwc3x8eClbMF1bMF0uZ2V0QkJveCgpO2lmKGIud2lkdGg9PT0wJiZiLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtnLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoZy53aWR0aCxiLndpZHRoKSksbT1NYXRoLnJvdW5kKGIuaGVpZ2h0KSxnLmhlaWdodCs9bSxnLmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heChnLmxpbmVIZWlnaHQsbSkpfXUucHVzaChnKX1mLnJlbW92ZSgpO2xldCBkPWlzTmFOKHVbMV0uaGVpZ2h0KXx8aXNOYU4odVsxXS53aWR0aCl8fGlzTmFOKHVbMV0ubGluZUhlaWdodCl8fHVbMF0uaGVpZ2h0PnVbMV0uaGVpZ2h0JiZ1WzBdLndpZHRoPnVbMV0ud2lkdGgmJnVbMF0ubGluZUhlaWdodD51WzFdLmxpbmVIZWlnaHQ/MDoxO3JldHVybiB1W2RdfSwodCxlKT0+YCR7dH0ke2UuZm9udFNpemV9JHtlLmZvbnRXZWlnaHR9JHtlLmZvbnRGYW1pbHl9YCksUV89Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSxyKXt0aGlzLmNvdW50PTA7dGhpcy5jb3VudD1yP3IubGVuZ3RoOjAsdGhpcy5uZXh0PWU/KCk9PnRoaXMuY291bnQrKzooKT0+RGF0ZS5ub3coKX1zdGF0aWN7byh0aGlzLCJJbml0SURHZW5lcmF0b3IiKX19LF9DZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBFNT1FNXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksRTUuaW5uZXJIVE1MPXQsdW5lc2NhcGUoRTUudGV4dENvbnRlbnQpfSwiZW50aXR5RGVjb2RlIik7byhzOSwiaXNEZXRhaWxlZEVycm9yIik7TENlPW8oKHQsZSxyLG4pPT57aWYoIW4pcmV0dXJuO2xldCBpPXQubm9kZSgpPy5nZXRCQm94KCk7aSYmdC5hcHBlbmQoInRleHQiKS50ZXh0KG4pLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsaS54K2kud2lkdGgvMikuYXR0cigieSIsLXIpLmF0dHIoImNsYXNzIixlKX0sImluc2VydFRpdGxlIiksSG89byh0PT57aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVyblt0LHQrInB4Il07bGV0IGU9cGFyc2VJbnQodD8/IiIsMTApO3JldHVybiBOdW1iZXIuaXNOYU4oZSk/W3ZvaWQgMCx2b2lkIDBdOnQ9PT1TdHJpbmcoZSk/W2UsdCsicHgiXTpbZSx0XX0sInBhcnNlRm9udFNpemUiKTtvKERzLCJjbGVhbkFuZE1lcmdlIik7VXQ9e2Fzc2lnbldpdGhEZXB0aDpWbix3cmFwTGFiZWw6aTksY2FsY3VsYXRlVGV4dEhlaWdodDpTNSxjYWxjdWxhdGVUZXh0V2lkdGg6c28sY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6YTksY2xlYW5BbmRNZXJnZTpEcyxkZXRlY3RJbml0OmdDZSxkZXRlY3REaXJlY3RpdmU6X1gsaXNTdWJzdHJpbmdJbkFycmF5OnlDZSxpbnRlcnBvbGF0ZVRvQ3VydmU6Sl8sY2FsY0xhYmVsUG9zaXRpb246d0NlLGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOlRDZSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmtDZSxmb3JtYXRVcmw6dkNlLGdldFN0eWxlc0Zyb21BcnJheTp0OSxnZW5lcmF0ZUlkOnI5LHJhbmRvbTpuOSxydW5GdW5jOnhDZSxlbnRpdHlEZWNvZGU6X0NlLGluc2VydFRpdGxlOkxDZSxwYXJzZUZvbnRTaXplOkhvLEluaXRJREdlbmVyYXRvcjpRX30sTlg9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvI1x3KzsvZyxmdW5jdGlvbihyKXtsZXQgbj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChuKT8iXHVGQjAyXHhCMFx4QjAiK24rIlx4QjZceERGIjoiXHVGQjAyXHhCMCIrbisiXHhCNlx4REYifSksZX0sImVuY29kZUVudGl0aWVzIiksTWE9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSwiZGVjb2RlRW50aXRpZXMiKSxDNT1vKCh0LGUse2NvdW50ZXI6cj0wLHByZWZpeDpuLHN1ZmZpeDppfSk9PmAke24/YCR7bn1fYDoiIn0ke3R9XyR7ZX1fJHtyfSR7aT9gXyR7aX1gOiIifWAsImdldEVkZ2VJZCIpO28oR24sImhhbmRsZVVuZGVmaW5lZEF0dHIiKX0pO2Z1bmN0aW9uIE9sKHQsZSxyLG4saSl7aWYoIWVbdF0ud2lkdGgpaWYocillW3RdLnRleHQ9aTkoZVt0XS50ZXh0LGksbiksZVt0XS50ZXh0TGluZXM9ZVt0XS50ZXh0LnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KS5sZW5ndGgsZVt0XS53aWR0aD1pLGVbdF0uaGVpZ2h0PVM1KGVbdF0udGV4dCxuKTtlbHNle2xldCBhPWVbdF0udGV4dC5zcGxpdChxZS5saW5lQnJlYWtSZWdleCk7ZVt0XS50ZXh0TGluZXM9YS5sZW5ndGg7bGV0IHM9MDtlW3RdLmhlaWdodD0wLGVbdF0ud2lkdGg9MDtmb3IobGV0IGwgb2YgYSllW3RdLndpZHRoPU1hdGgubWF4KHNvKGwsbiksZVt0XS53aWR0aCkscz1TNShsLG4pLGVbdF0uaGVpZ2h0PWVbdF0uaGVpZ2h0K3N9fWZ1bmN0aW9uIFBYKHQsZSxyLG4saSl7bGV0IGE9bmV3IEQ1KGkpO2EuZGF0YS53aWR0aExpbWl0PXIuZGF0YS53aWR0aExpbWl0L01hdGgubWluKG85LG4ubGVuZ3RoKTtmb3IobGV0W3MsbF1vZiBuLmVudHJpZXMoKSl7bGV0IHU9MDtsLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sbC5zcHJpdGUmJihsLmltYWdlLndpZHRoPTQ4LGwuaW1hZ2UuaGVpZ2h0PTQ4LGwuaW1hZ2UuWT11LHU9bC5pbWFnZS5ZK2wuaW1hZ2UuaGVpZ2h0KTtsZXQgaD1sLndyYXAmJkd0LndyYXAsZj1BNShHdCk7aWYoZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250V2VpZ2h0PSJib2xkIixPbCgibGFiZWwiLGwsaCxmLGEuZGF0YS53aWR0aExpbWl0KSxsLmxhYmVsLlk9dSs4LHU9bC5sYWJlbC5ZK2wubGFiZWwuaGVpZ2h0LGwudHlwZSYmbC50eXBlLnRleHQhPT0iIil7bC50eXBlLnRleHQ9IlsiK2wudHlwZS50ZXh0KyJdIjtsZXQgZz1BNShHdCk7T2woInR5cGUiLGwsaCxnLGEuZGF0YS53aWR0aExpbWl0KSxsLnR5cGUuWT11KzUsdT1sLnR5cGUuWStsLnR5cGUuaGVpZ2h0fWlmKGwuZGVzY3ImJmwuZGVzY3IudGV4dCE9PSIiKXtsZXQgZz1BNShHdCk7Zy5mb250U2l6ZT1nLmZvbnRTaXplLTIsT2woImRlc2NyIixsLGgsZyxhLmRhdGEud2lkdGhMaW1pdCksbC5kZXNjci5ZPXUrMjAsdT1sLmRlc2NyLlkrbC5kZXNjci5oZWlnaHR9aWYocz09MHx8cyVvOT09PTApe2xldCBnPXIuZGF0YS5zdGFydHgrR3QuZGlhZ3JhbU1hcmdpblgseT1yLmRhdGEuc3RvcHkrR3QuZGlhZ3JhbU1hcmdpblkrdTthLnNldERhdGEoZyxnLHkseSl9ZWxzZXtsZXQgZz1hLmRhdGEuc3RvcHghPT1hLmRhdGEuc3RhcnR4P2EuZGF0YS5zdG9weCtHdC5kaWFncmFtTWFyZ2luWDphLmRhdGEuc3RhcnR4LHk9YS5kYXRhLnN0YXJ0eTthLnNldERhdGEoZyxnLHkseSl9YS5uYW1lPWwuYWxpYXM7bGV0IGQ9aS5kYi5nZXRDNFNoYXBlQXJyYXkobC5hbGlhcykscD1pLmRiLmdldEM0U2hhcGVLZXlzKGwuYWxpYXMpO3AubGVuZ3RoPjAmJk9YKGEsdCxkLHApLGU9bC5hbGlhcztsZXQgbT1pLmRiLmdldEJvdW5kYXJ5cyhlKTttLmxlbmd0aD4wJiZQWCh0LGUsYSxtLGkpLGwuYWxpYXMhPT0iZ2xvYmFsIiYmSVgodCxsLGEpLHIuZGF0YS5zdG9weT1NYXRoLm1heChhLmRhdGEuc3RvcHkrR3QuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHkpLHIuZGF0YS5zdG9weD1NYXRoLm1heChhLmRhdGEuc3RvcHgrR3QuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHgpLF81PU1hdGgubWF4KF81LHIuZGF0YS5zdG9weCksTDU9TWF0aC5tYXgoTDUsci5kYXRhLnN0b3B5KX19dmFyIF81LEw1LE1YLG85LEd0LEQ1LGw5LFR2LEE1LERDZSxJWCxPWCxOcyxSWCxOQ2UsUkNlLE1DZSxjOSxCWD1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7UlkoKTt1dCgpO1VTKCk7ZnIoKTt1NygpO1Z0KCk7Z3AoKTtocigpO2FpKCk7XzU9MCxMNT0wLE1YPTQsbzk9MjtleS55eT1UeTtHdD17fSxENT1jbGFzc3tzdGF0aWN7byh0aGlzLCJCb3VuZHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsbDkoZS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShlLHIsbixpKXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWUsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9cix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PW4sdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9aX11cGRhdGVWYWwoZSxyLG4saSl7ZVtyXT09PXZvaWQgMD9lW3JdPW46ZVtyXT1pKG4sZVtyXSl9aW5zZXJ0KGUpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IHI9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrZS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCtlLm1hcmdpbioyLG49citlLndpZHRoLGk9dGhpcy5uZXh0RGF0YS5zdGFydHkrZS5tYXJnaW4qMixhPWkrZS5oZWlnaHQ7KHI+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxuPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+TVgpJiYocj10aGlzLm5leHREYXRhLnN0YXJ0eCtlLm1hcmdpbitHdC5uZXh0TGluZVBhZGRpbmdYLGk9dGhpcy5uZXh0RGF0YS5zdG9weStlLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9bj1yK2Uud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PWE9aStlLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxlLng9cixlLnk9aSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsbixNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpfWluaXQoZSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxsOShlLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihlKXt0aGlzLmRhdGEuc3RvcHgrPWUsdGhpcy5kYXRhLnN0b3B5Kz1lfX0sbDk9byhmdW5jdGlvbih0KXtWbihHdCx0KSx0LmZvbnRGYW1pbHkmJihHdC5wZXJzb25Gb250RmFtaWx5PUd0LnN5c3RlbUZvbnRGYW1pbHk9R3QubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoR3QucGVyc29uRm9udFNpemU9R3Quc3lzdGVtRm9udFNpemU9R3QubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKEd0LnBlcnNvbkZvbnRXZWlnaHQ9R3Quc3lzdGVtRm9udFdlaWdodD1HdC5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLFR2PW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJjNFNoYXBlRm9udCIpLEE1PW8odD0+KHtmb250RmFtaWx5OnQuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnQuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnQuYm91bmRhcnlGb250V2VpZ2h0fSksImJvdW5kYXJ5Rm9udCIpLERDZT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnQubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5tZXNzYWdlRm9udFdlaWdodH0pLCJtZXNzYWdlRm9udCIpO28oT2wsImNhbGNDNFNoYXBlVGV4dFdIIik7SVg9byhmdW5jdGlvbih0LGUscil7ZS54PXIuZGF0YS5zdGFydHgsZS55PXIuZGF0YS5zdGFydHksZS53aWR0aD1yLmRhdGEuc3RvcHgtci5kYXRhLnN0YXJ0eCxlLmhlaWdodD1yLmRhdGEuc3RvcHktci5kYXRhLnN0YXJ0eSxlLmxhYmVsLnk9R3QuYzRTaGFwZU1hcmdpbi0zNTtsZXQgbj1lLndyYXAmJkd0LndyYXAsaT1BNShHdCk7aS5mb250U2l6ZT1pLmZvbnRTaXplKzIsaS5mb250V2VpZ2h0PSJib2xkIjtsZXQgYT1zbyhlLmxhYmVsLnRleHQsaSk7T2woImxhYmVsIixlLG4saSxhKSxSbC5kcmF3Qm91bmRhcnkodCxlLEd0KX0sImRyYXdCb3VuZGFyeSIpLE9YPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MDtmb3IobGV0IGEgb2Ygbil7aT0wO2xldCBzPXJbYV0sbD1UdihHdCxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmZvbnRTaXplPWwuZm9udFNpemUtMixzLnR5cGVDNFNoYXBlLndpZHRoPXNvKCJceEFCIitzLnR5cGVDNFNoYXBlLnRleHQrIlx4QkIiLGwpLHMudHlwZUM0U2hhcGUuaGVpZ2h0PWwuZm9udFNpemUrMixzLnR5cGVDNFNoYXBlLlk9R3QuYzRTaGFwZVBhZGRpbmcsaT1zLnR5cGVDNFNoYXBlLlkrcy50eXBlQzRTaGFwZS5oZWlnaHQtNCxzLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0scy50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnMuaW1hZ2Uud2lkdGg9NDgscy5pbWFnZS5oZWlnaHQ9NDgscy5pbWFnZS5ZPWksaT1zLmltYWdlLlkrcy5pbWFnZS5oZWlnaHQ7YnJlYWt9cy5zcHJpdGUmJihzLmltYWdlLndpZHRoPTQ4LHMuaW1hZ2UuaGVpZ2h0PTQ4LHMuaW1hZ2UuWT1pLGk9cy5pbWFnZS5ZK3MuaW1hZ2UuaGVpZ2h0KTtsZXQgdT1zLndyYXAmJkd0LndyYXAsaD1HdC53aWR0aC1HdC5jNFNoYXBlUGFkZGluZyoyLGY9VHYoR3Qscy50eXBlQzRTaGFwZS50ZXh0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLE9sKCJsYWJlbCIscyx1LGYsaCkscy5sYWJlbC5ZPWkrOCxpPXMubGFiZWwuWStzLmxhYmVsLmhlaWdodCxzLnR5cGUmJnMudHlwZS50ZXh0IT09IiIpe3MudHlwZS50ZXh0PSJbIitzLnR5cGUudGV4dCsiXSI7bGV0IG09VHYoR3Qscy50eXBlQzRTaGFwZS50ZXh0KTtPbCgidHlwZSIscyx1LG0saCkscy50eXBlLlk9aSs1LGk9cy50eXBlLlkrcy50eXBlLmhlaWdodH1lbHNlIGlmKHMudGVjaG4mJnMudGVjaG4udGV4dCE9PSIiKXtzLnRlY2huLnRleHQ9IlsiK3MudGVjaG4udGV4dCsiXSI7bGV0IG09VHYoR3Qscy50ZWNobi50ZXh0KTtPbCgidGVjaG4iLHMsdSxtLGgpLHMudGVjaG4uWT1pKzUsaT1zLnRlY2huLlkrcy50ZWNobi5oZWlnaHR9bGV0IGQ9aSxwPXMubGFiZWwud2lkdGg7aWYocy5kZXNjciYmcy5kZXNjci50ZXh0IT09IiIpe2xldCBtPVR2KEd0LHMudHlwZUM0U2hhcGUudGV4dCk7T2woImRlc2NyIixzLHUsbSxoKSxzLmRlc2NyLlk9aSsyMCxpPXMuZGVzY3IuWStzLmRlc2NyLmhlaWdodCxwPU1hdGgubWF4KHMubGFiZWwud2lkdGgscy5kZXNjci53aWR0aCksZD1pLXMuZGVzY3IudGV4dExpbmVzKjV9cD1wK0d0LmM0U2hhcGVQYWRkaW5nLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aHx8R3Qud2lkdGgscCxHdC53aWR0aCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHR8fEd0LmhlaWdodCxkLEd0LmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fEd0LmM0U2hhcGVNYXJnaW4sdC5pbnNlcnQocyksUmwuZHJhd0M0U2hhcGUoZSxzLEd0KX10LmJ1bXBMYXN0TWFyZ2luKEd0LmM0U2hhcGVNYXJnaW4pfSwiZHJhd0M0U2hhcGVBcnJheSIpLE5zPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBvaW50Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLng9ZSx0aGlzLnk9cn19LFJYPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10Lngsbj10LnksaT1lLngsYT1lLnkscz1yK3Qud2lkdGgvMixsPW4rdC5oZWlnaHQvMix1PU1hdGguYWJzKHItaSksaD1NYXRoLmFicyhuLWEpLGY9aC91LGQ9dC5oZWlnaHQvdC53aWR0aCxwPW51bGw7cmV0dXJuIG49PWEmJnI8aT9wPW5ldyBOcyhyK3Qud2lkdGgsbCk6bj09YSYmcj5pP3A9bmV3IE5zKHIsbCk6cj09aSYmbjxhP3A9bmV3IE5zKHMsbit0LmhlaWdodCk6cj09aSYmbj5hJiYocD1uZXcgTnMocyxuKSkscj5pJiZuPGE/ZD49Zj9wPW5ldyBOcyhyLGwrZip0LndpZHRoLzIpOnA9bmV3IE5zKHMtdS9oKnQuaGVpZ2h0LzIsbit0LmhlaWdodCk6cjxpJiZuPGE/ZD49Zj9wPW5ldyBOcyhyK3Qud2lkdGgsbCtmKnQud2lkdGgvMik6cD1uZXcgTnMocyt1L2gqdC5oZWlnaHQvMixuK3QuaGVpZ2h0KTpyPGkmJm4+YT9kPj1mP3A9bmV3IE5zKHIrdC53aWR0aCxsLWYqdC53aWR0aC8yKTpwPW5ldyBOcyhzK3QuaGVpZ2h0LzIqdS9oLG4pOnI+aSYmbj5hJiYoZD49Zj9wPW5ldyBOcyhyLGwtdC53aWR0aC8yKmYpOnA9bmV3IE5zKHMtdC5oZWlnaHQvMip1L2gsbikpLHB9LCJnZXRJbnRlcnNlY3RQb2ludCIpLE5DZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3g6MCx5OjB9O3IueD1lLngrZS53aWR0aC8yLHIueT1lLnkrZS5oZWlnaHQvMjtsZXQgbj1SWCh0LHIpO3IueD10LngrdC53aWR0aC8yLHIueT10LnkrdC5oZWlnaHQvMjtsZXQgaT1SWChlLHIpO3JldHVybntzdGFydFBvaW50Om4sZW5kUG9pbnQ6aX19LCJnZXRJbnRlcnNlY3RQb2ludHMiKSxSQ2U9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wO2ZvcihsZXQgYSBvZiBlKXtpPWkrMTtsZXQgcz1hLndyYXAmJkd0LndyYXAsbD1EQ2UoR3QpO24uZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKGEubGFiZWwudGV4dD1pKyI6ICIrYS5sYWJlbC50ZXh0KTtsZXQgaD1zbyhhLmxhYmVsLnRleHQsbCk7T2woImxhYmVsIixhLHMsbCxoKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGg9c28oYS50ZWNobi50ZXh0LGwpLE9sKCJ0ZWNobiIsYSxzLGwsaCkpLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoaD1zbyhhLmRlc2NyLnRleHQsbCksT2woImRlc2NyIixhLHMsbCxoKSk7bGV0IGY9cihhLmZyb20pLGQ9cihhLnRvKSxwPU5DZShmLGQpO2Euc3RhcnRQb2ludD1wLnN0YXJ0UG9pbnQsYS5lbmRQb2ludD1wLmVuZFBvaW50fVJsLmRyYXdSZWxzKHQsZSxHdCl9LCJkcmF3UmVscyIpO28oUFgsImRyYXdJbnNpZGVCb3VuZGFyeSIpO01DZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe0d0PXBlKCkuYzQ7bGV0IGk9cGUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9VmUoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9WZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksbD1uLmRiO24uZGIuc2V0V3JhcChHdC53cmFwKSxNWD1sLmdldEM0U2hhcGVJblJvdygpLG85PWwuZ2V0QzRCb3VuZGFyeUluUm93KCksWS5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KEd0LG51bGwsMil9YCk7bGV0IHU9aT09PSJzYW5kYm94Ij9zLnNlbGVjdChgW2lkPSIke2V9Il1gKTpWZShgW2lkPSIke2V9Il1gKTtSbC5pbnNlcnRDb21wdXRlckljb24odSksUmwuaW5zZXJ0RGF0YWJhc2VJY29uKHUpLFJsLmluc2VydENsb2NrSWNvbih1KTtsZXQgaD1uZXcgRDUobik7aC5zZXREYXRhKEd0LmRpYWdyYW1NYXJnaW5YLEd0LmRpYWdyYW1NYXJnaW5YLEd0LmRpYWdyYW1NYXJnaW5ZLEd0LmRpYWdyYW1NYXJnaW5ZKSxoLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCxfNT1HdC5kaWFncmFtTWFyZ2luWCxMNT1HdC5kaWFncmFtTWFyZ2luWTtsZXQgZj1uLmRiLmdldFRpdGxlKCksZD1uLmRiLmdldEJvdW5kYXJ5cygiIik7UFgodSwiIixoLGQsbiksUmwuaW5zZXJ0QXJyb3dIZWFkKHUpLFJsLmluc2VydEFycm93RW5kKHUpLFJsLmluc2VydEFycm93Q3Jvc3NIZWFkKHUpLFJsLmluc2VydEFycm93RmlsbGVkSGVhZCh1KSxSQ2UodSxuLmRiLmdldFJlbHMoKSxuLmRiLmdldEM0U2hhcGUsbiksaC5kYXRhLnN0b3B4PV81LGguZGF0YS5zdG9weT1MNTtsZXQgcD1oLmRhdGEsZz1wLnN0b3B5LXAuc3RhcnR5KzIqR3QuZGlhZ3JhbU1hcmdpblksdj1wLnN0b3B4LXAuc3RhcnR4KzIqR3QuZGlhZ3JhbU1hcmdpblg7ZiYmdS5hcHBlbmQoInRleHQiKS50ZXh0KGYpLmF0dHIoIngiLChwLnN0b3B4LXAuc3RhcnR4KS8yLTQqR3QuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLHAuc3RhcnR5K0d0LmRpYWdyYW1NYXJnaW5ZKSxacih1LGcsdixHdC51c2VNYXhXaWR0aCk7bGV0IHg9Zj82MDowO3UuYXR0cigidmlld0JveCIscC5zdGFydHgtR3QuZGlhZ3JhbU1hcmdpblgrIiAtIisoR3QuZGlhZ3JhbU1hcmdpblkreCkrIiAiK3YrIiAiKyhnK3gpKSxZLmRlYnVnKCJtb2RlbHM6IixwKX0sImRyYXciKSxjOT17ZHJhd1BlcnNvbk9yU3lzdGVtQXJyYXk6T1gsZHJhd0JvdW5kYXJ5OklYLHNldENvbmY6bDksZHJhdzpNQ2V9fSk7dmFyIElDZSxGWCx6WD1NKCgpPT57InVzZSBzdHJpY3QiO0lDZT1vKHQ9PmAucGVyc29uIHsKICAgIHN0cm9rZTogJHt0LnBlcnNvbkJvcmRlcn07CiAgICBmaWxsOiAke3QucGVyc29uQmtnfTsKICB9CmAsImdldFN0eWxlcyIpLEZYPUlDZX0pO3ZhciBHWD17fTt2cihHWCx7ZGlhZ3JhbTooKT0+T0NlfSk7dmFyIE9DZSwkWD1NKCgpPT57InVzZSBzdHJpY3QiO1VTKCk7dTcoKTtCWCgpO3pYKCk7T0NlPXtwYXJzZXI6b3osZGI6VHkscmVuZGVyZXI6Yzksc3R5bGVzOkZYLGluaXQ6bygoe2M0OnQsd3JhcDplfSk9PntjOS5zZXRDb25mKHQpLFR5LnNldFdyYXAoZSl9LCJpbml0Iil9fSk7ZnVuY3Rpb24gZjkoKXtyZXR1cm57YXN5bmM6ITEsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaG9va3M6bnVsbCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNpbGVudDohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGx9fWZ1bmN0aW9uIGpYKHQpe0lkPXR9ZnVuY3Rpb24gb28odCxlKXtpZihlKXtpZihLWC50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2UoekNlLEhYKX1lbHNlIGlmKFFYLnRlc3QodCkpcmV0dXJuIHQucmVwbGFjZShHQ2UsSFgpO3JldHVybiB0fWZ1bmN0aW9uIFVDZSh0KXtyZXR1cm4gdC5yZXBsYWNlKFZDZSwoZSxyKT0+KHI9ci50b0xvd2VyQ2FzZSgpLHI9PT0iY29sb24iPyI6IjpyLmNoYXJBdCgwKT09PSIjIj9yLmNoYXJBdCgxKT09PSJ4Ij9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrci5zdWJzdHJpbmcoMSkpOiIiKSl9ZnVuY3Rpb24gZm4odCxlKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/dDp0LnNvdXJjZTtlPWV8fCIiO2xldCBuPXtyZXBsYWNlOm8oKGksYSk9PntsZXQgcz10eXBlb2YgYT09InN0cmluZyI/YTphLnNvdXJjZTtyZXR1cm4gcz1zLnJlcGxhY2UoSENlLCIkMSIpLHI9ci5yZXBsYWNlKGkscyksbn0sInJlcGxhY2UiKSxnZXRSZWdleDpvKCgpPT5uZXcgUmVnRXhwKHIsZSksImdldFJlZ2V4Iil9O3JldHVybiBufWZ1bmN0aW9uIFdYKHQpe3RyeXt0PWVuY29kZVVSSSh0KS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB0fWZ1bmN0aW9uIFlYKHQsZSl7bGV0IHI9dC5yZXBsYWNlKC9cfC9nLChhLHMsbCk9PntsZXQgdT0hMSxoPXM7Zm9yKDstLWg+PTAmJmxbaF09PT0iXFwiOyl1PSF1O3JldHVybiB1PyJ8IjoiIHwifSksbj1yLnNwbGl0KC8gXHwvKSxpPTA7aWYoblswXS50cmltKCl8fG4uc2hpZnQoKSxuLmxlbmd0aD4wJiYhbltuLmxlbmd0aC0xXS50cmltKCkmJm4ucG9wKCksZSlpZihuLmxlbmd0aD5lKW4uc3BsaWNlKGUpO2Vsc2UgZm9yKDtuLmxlbmd0aDxlOyluLnB1c2goIiIpO2Zvcig7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gbn1mdW5jdGlvbiBrdih0LGUscil7bGV0IG49dC5sZW5ndGg7aWYobj09PTApcmV0dXJuIiI7bGV0IGk9MDtmb3IoO2k8bjspe2xldCBhPXQuY2hhckF0KG4taS0xKTtpZihhPT09ZSYmIXIpaSsrO2Vsc2UgaWYoYSE9PWUmJnIpaSsrO2Vsc2UgYnJlYWt9cmV0dXJuIHQuc2xpY2UoMCxuLWkpfWZ1bmN0aW9uIFdDZSh0LGUpe2lmKHQuaW5kZXhPZihlWzFdKT09PS0xKXJldHVybi0xO2xldCByPTA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXT09PSJcXCIpbisrO2Vsc2UgaWYodFtuXT09PWVbMF0pcisrO2Vsc2UgaWYodFtuXT09PWVbMV0mJihyLS0scjwwKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBxWCh0LGUscixuKXtsZXQgaT1lLmhyZWYsYT1lLnRpdGxlP29vKGUudGl0bGUpOm51bGwscz10WzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZih0WzBdLmNoYXJBdCgwKSE9PSIhIil7bi5zdGF0ZS5pbkxpbms9ITA7bGV0IGw9e3R5cGU6ImxpbmsiLHJhdzpyLGhyZWY6aSx0aXRsZTphLHRleHQ6cyx0b2tlbnM6bi5pbmxpbmVUb2tlbnMocyl9O3JldHVybiBuLnN0YXRlLmluTGluaz0hMSxsfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OnIsaHJlZjppLHRpdGxlOmEsdGV4dDpvbyhzKX19ZnVuY3Rpb24gWUNlKHQsZSl7bGV0IHI9dC5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKHI9PT1udWxsKXJldHVybiBlO2xldCBuPXJbMV07cmV0dXJuIGUuc3BsaXQoYApgKS5tYXAoaT0+e2xldCBhPWkubWF0Y2goL15ccysvKTtpZihhPT09bnVsbClyZXR1cm4gaTtsZXRbc109YTtyZXR1cm4gcy5sZW5ndGg+PW4ubGVuZ3RoP2kuc2xpY2Uobi5sZW5ndGgpOml9KS5qb2luKGAKYCl9ZnVuY3Rpb24gZW4odCxlKXtyZXR1cm4gTWQucGFyc2UodCxlKX12YXIgSWQsS1gsekNlLFFYLEdDZSwkQ2UsSFgsVkNlLEhDZSxTdixnbSxxQ2UsWENlLGpDZSxBdixLQ2UsWlgsSlgsZDksUUNlLHA5LFpDZSxKQ2UsTTUsbTksZTdlLGVqLHQ3ZSxnOSxYWCxyN2UsbjdlLHRqLGk3ZSxyaixhN2UsX3YsczdlLG83ZSxsN2UsYzdlLHU3ZSxoN2UsZjdlLGQ3ZSxwN2UsUjUsbTdlLG5qLGlqLGc3ZSx5OSx5N2UsdTksdjdlLE41LEV2LE11LHltLEN2LEl1LG1tLGg5LE1kLFBFdCxCRXQsRkV0LHpFdCxHRXQsJEV0LFZFdCxhaj1NKCgpPT57InVzZSBzdHJpY3QiO28oZjksIl9nZXREZWZhdWx0cyIpO0lkPWY5KCk7byhqWCwiY2hhbmdlRGVmYXVsdHMiKTtLWD0vWyY8PiInXS8sekNlPW5ldyBSZWdFeHAoS1guc291cmNlLCJnIiksUVg9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLEdDZT1uZXcgUmVnRXhwKFFYLnNvdXJjZSwiZyIpLCRDZT17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sSFg9byh0PT4kQ2VbdF0sImdldEVzY2FwZVJlcGxhY2VtZW50Iik7byhvbywiZXNjYXBlJDEiKTtWQ2U9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWc7byhVQ2UsInVuZXNjYXBlIik7SENlPS8oXnxbXlxbXSlcXi9nO28oZm4sImVkaXQiKTtvKFdYLCJjbGVhblVybCIpO1N2PXtleGVjOm8oKCk9Pm51bGwsImV4ZWMiKX07byhZWCwic3BsaXRDZWxscyIpO28oa3YsInJ0cmltIik7byhXQ2UsImZpbmRDbG9zaW5nQnJhY2tldCIpO28ocVgsIm91dHB1dExpbmsiKTtvKFlDZSwiaW5kZW50Q29kZUNvbXBlbnNhdGlvbiIpO2dtPWNsYXNze3N0YXRpY3tvKHRoaXMsIl9Ub2tlbml6ZXIiKX1vcHRpb25zO3J1bGVzO2xleGVyO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxJZH1zcGFjZShlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhlKTtpZihyJiZyWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OnJbMF19fWNvZGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMoZSk7aWYocil7bGV0IG49clswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnJbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9uOmt2KG4sYApgKX19fWZlbmNlcyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGUpO2lmKHIpe2xldCBuPXJbMF0saT1ZQ2UobixyWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpuLGxhbmc6clsyXT9yWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOnJbMl0sdGV4dDppfX19aGVhZGluZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzJdLnRyaW0oKTtpZigvIyQvLnRlc3Qobikpe2xldCBpPWt2KG4sIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaXx8LyAkLy50ZXN0KGkpKSYmKG49aS50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxkZXB0aDpyWzFdLmxlbmd0aCx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19aHIoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6ImhyIixyYXc6a3YoclswXSxgCmApfX1ibG9ja3F1b3RlKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGUpO2lmKHIpe2xldCBuPWt2KHJbMF0sYApgKS5zcGxpdChgCmApLGk9IiIsYT0iIixzPVtdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBsPSExLHU9W10saDtmb3IoaD0wO2g8bi5sZW5ndGg7aCsrKWlmKC9eIHswLDN9Pi8udGVzdChuW2hdKSl1LnB1c2gobltoXSksbD0hMDtlbHNlIGlmKCFsKXUucHVzaChuW2hdKTtlbHNlIGJyZWFrO249bi5zbGljZShoKTtsZXQgZj11LmpvaW4oYApgKSxkPWYucmVwbGFjZSgvXG4gezAsM30oKD86PSt8LSspICopKD89XG58JCkvZyxgCiAgICAkMWApLnJlcGxhY2UoL14gezAsM30+WyBcdF0/L2dtLCIiKTtpPWk/YCR7aX0KJHtmfWA6ZixhPWE/YCR7YX0KJHtkfWA6ZDtsZXQgcD10aGlzLmxleGVyLnN0YXRlLnRvcDtpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCx0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQscywhMCksdGhpcy5sZXhlci5zdGF0ZS50b3A9cCxuLmxlbmd0aD09PTApYnJlYWs7bGV0IG09c1tzLmxlbmd0aC0xXTtpZihtPy50eXBlPT09ImNvZGUiKWJyZWFrO2lmKG0/LnR5cGU9PT0iYmxvY2txdW90ZSIpe2xldCBnPW0seT1nLnJhdytgCmArbi5qb2luKGAKYCksdj10aGlzLmJsb2NrcXVvdGUoeSk7c1tzLmxlbmd0aC0xXT12LGk9aS5zdWJzdHJpbmcoMCxpLmxlbmd0aC1nLnJhdy5sZW5ndGgpK3YucmF3LGE9YS5zdWJzdHJpbmcoMCxhLmxlbmd0aC1nLnRleHQubGVuZ3RoKSt2LnRleHQ7YnJlYWt9ZWxzZSBpZihtPy50eXBlPT09Imxpc3QiKXtsZXQgZz1tLHk9Zy5yYXcrYApgK24uam9pbihgCmApLHY9dGhpcy5saXN0KHkpO3Nbcy5sZW5ndGgtMV09dixpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtbS5yYXcubGVuZ3RoKSt2LnJhdyxhPWEuc3Vic3RyaW5nKDAsYS5sZW5ndGgtZy5yYXcubGVuZ3RoKSt2LnJhdyxuPXkuc3Vic3RyaW5nKHNbcy5sZW5ndGgtMV0ucmF3Lmxlbmd0aCkuc3BsaXQoYApgKTtjb250aW51ZX19cmV0dXJue3R5cGU6ImJsb2NrcXVvdGUiLHJhdzppLHRva2VuczpzLHRleHQ6YX19fWxpc3QoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS50cmltKCksaT1uLmxlbmd0aD4xLGE9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmksc3RhcnQ6aT8rbi5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07bj1pP2BcXGR7MSw5fVxcJHtuLnNsaWNlKC0xKX1gOmBcXCR7bn1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKG49aT9uOiJbKistXSIpO2xldCBzPW5ldyBSZWdFeHAoYF4oIHswLDN9JHtufSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKSxsPSExO2Zvcig7ZTspe2xldCB1PSExLGg9IiIsZj0iIjtpZighKHI9cy5leGVjKGUpKXx8dGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGUpKWJyZWFrO2g9clswXSxlPWUuc3Vic3RyaW5nKGgubGVuZ3RoKTtsZXQgZD1yWzJdLnNwbGl0KGAKYCwxKVswXS5yZXBsYWNlKC9eXHQrLyx4PT4iICIucmVwZWF0KDMqeC5sZW5ndGgpKSxwPWUuc3BsaXQoYApgLDEpWzBdLG09IWQudHJpbSgpLGc9MDtpZih0aGlzLm9wdGlvbnMucGVkYW50aWM/KGc9MixmPWQudHJpbVN0YXJ0KCkpOm0/Zz1yWzFdLmxlbmd0aCsxOihnPXJbMl0uc2VhcmNoKC9bXiBdLyksZz1nPjQ/MTpnLGY9ZC5zbGljZShnKSxnKz1yWzFdLmxlbmd0aCksbSYmL14gKiQvLnRlc3QocCkmJihoKz1wK2AKYCxlPWUuc3Vic3RyaW5nKHAubGVuZ3RoKzEpLHU9ITApLCF1KXtsZXQgeD1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxnLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgCV1bXlxcbl0qKT8oPzpcXG58JCkpYCksYj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxnLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksdz1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxnLTEpfX0oPzpcYFxgXGB8fn5+KWApLF89bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZy0xKX19I2ApO2Zvcig7ZTspe2xldCBUPWUuc3BsaXQoYApgLDEpWzBdO2lmKHA9VCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihwPXAucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSx3LnRlc3QocCl8fF8udGVzdChwKXx8eC50ZXN0KHApfHxiLnRlc3QoZSkpYnJlYWs7aWYocC5zZWFyY2goL1teIF0vKT49Z3x8IXAudHJpbSgpKWYrPWAKYCtwLnNsaWNlKGcpO2Vsc2V7aWYobXx8ZC5zZWFyY2goL1teIF0vKT49NHx8dy50ZXN0KGQpfHxfLnRlc3QoZCl8fGIudGVzdChkKSlicmVhaztmKz1gCmArcH0hbSYmIXAudHJpbSgpJiYobT0hMCksaCs9VCtgCmAsZT1lLnN1YnN0cmluZyhULmxlbmd0aCsxKSxkPXAuc2xpY2UoZyl9fWEubG9vc2V8fChsP2EubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChoKSYmKGw9ITApKTtsZXQgeT1udWxsLHY7dGhpcy5vcHRpb25zLmdmbSYmKHk9L15cW1sgeFhdXF0gLy5leGVjKGYpLHkmJih2PXlbMF0hPT0iWyBdICIsZj1mLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSksYS5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpoLHRhc2s6ISF5LGNoZWNrZWQ6dixsb29zZTohMSx0ZXh0OmYsdG9rZW5zOltdfSksYS5yYXcrPWh9YS5pdGVtc1thLml0ZW1zLmxlbmd0aC0xXS5yYXc9YS5pdGVtc1thLml0ZW1zLmxlbmd0aC0xXS5yYXcudHJpbUVuZCgpLGEuaXRlbXNbYS5pdGVtcy5sZW5ndGgtMV0udGV4dD1hLml0ZW1zW2EuaXRlbXMubGVuZ3RoLTFdLnRleHQudHJpbUVuZCgpLGEucmF3PWEucmF3LnRyaW1FbmQoKTtmb3IobGV0IHU9MDt1PGEuaXRlbXMubGVuZ3RoO3UrKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxhLml0ZW1zW3VdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGEuaXRlbXNbdV0udGV4dCxbXSksIWEubG9vc2Upe2xldCBoPWEuaXRlbXNbdV0udG9rZW5zLmZpbHRlcihkPT5kLnR5cGU9PT0ic3BhY2UiKSxmPWgubGVuZ3RoPjAmJmguc29tZShkPT4vXG4uKlxuLy50ZXN0KGQucmF3KSk7YS5sb29zZT1mfWlmKGEubG9vc2UpZm9yKGxldCB1PTA7dTxhLml0ZW1zLmxlbmd0aDt1KyspYS5pdGVtc1t1XS5sb29zZT0hMDtyZXR1cm4gYX19aHRtbChlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJodG1sIixibG9jazohMCxyYXc6clswXSxwcmU6clsxXT09PSJwcmUifHxyWzFdPT09InNjcmlwdCJ8fHJbMV09PT0ic3R5bGUiLHRleHQ6clswXX19ZGVmKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksaT1yWzJdP3JbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6IiIsYT1yWzNdP3JbM10uc3Vic3RyaW5nKDEsclszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTpyWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpuLHJhdzpyWzBdLGhyZWY6aSx0aXRsZTphfX19dGFibGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKCFyfHwhL1s6fF0vLnRlc3QoclsyXSkpcmV0dXJuO2xldCBuPVlYKHJbMV0pLGk9clsyXS5yZXBsYWNlKC9eXHx8XHwgKiQvZywiIikuc3BsaXQoInwiKSxhPXJbM10mJnJbM10udHJpbSgpP3JbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoYApgKTpbXSxzPXt0eXBlOiJ0YWJsZSIscmF3OnJbMF0saGVhZGVyOltdLGFsaWduOltdLHJvd3M6W119O2lmKG4ubGVuZ3RoPT09aS5sZW5ndGgpe2ZvcihsZXQgbCBvZiBpKS9eICotKzogKiQvLnRlc3QobCk/cy5hbGlnbi5wdXNoKCJyaWdodCIpOi9eICo6LSs6ICokLy50ZXN0KGwpP3MuYWxpZ24ucHVzaCgiY2VudGVyIik6L14gKjotKyAqJC8udGVzdChsKT9zLmFsaWduLnB1c2goImxlZnQiKTpzLmFsaWduLnB1c2gobnVsbCk7Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDtsKyspcy5oZWFkZXIucHVzaCh7dGV4dDpuW2xdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuW2xdKSxoZWFkZXI6ITAsYWxpZ246cy5hbGlnbltsXX0pO2ZvcihsZXQgbCBvZiBhKXMucm93cy5wdXNoKFlYKGwscy5oZWFkZXIubGVuZ3RoKS5tYXAoKHUsaCk9Pih7dGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KSxoZWFkZXI6ITEsYWxpZ246cy5hbGlnbltoXX0pKSk7cmV0dXJuIHN9fWxoZWFkaW5nKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxkZXB0aDpyWzJdLmNoYXJBdCgwKT09PSI9Ij8xOjIsdGV4dDpyWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyWzFdKX19cGFyYWdyYXBoKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS5jaGFyQXQoclsxXS5sZW5ndGgtMSk9PT1gCmA/clsxXS5zbGljZSgwLC0xKTpyWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzpyWzBdLHRleHQ6bix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUobil9fX10ZXh0KGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6InRleHQiLHJhdzpyWzBdLHRleHQ6clswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoclswXSl9fWVzY2FwZShlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzpyWzBdLHRleHQ6b28oclsxXSl9fXRhZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhlKTtpZihyKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KHJbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChyWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHJbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChyWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6Imh0bWwiLHJhdzpyWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnJbMF19fWxpbmsoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGUpO2lmKHIpe2xldCBuPXJbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChuKSl7aWYoIS8+JC8udGVzdChuKSlyZXR1cm47bGV0IHM9a3Yobi5zbGljZSgwLC0xKSwiXFwiKTtpZigobi5sZW5ndGgtcy5sZW5ndGgpJTI9PT0wKXJldHVybn1lbHNle2xldCBzPVdDZShyWzJdLCIoKSIpO2lmKHM+LTEpe2xldCB1PShyWzBdLmluZGV4T2YoIiEiKT09PTA/NTo0KStyWzFdLmxlbmd0aCtzO3JbMl09clsyXS5zdWJzdHJpbmcoMCxzKSxyWzBdPXJbMF0uc3Vic3RyaW5nKDAsdSkudHJpbSgpLHJbM109IiJ9fWxldCBpPXJbMl0sYT0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2xldCBzPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhpKTtzJiYoaT1zWzFdLGE9c1szXSl9ZWxzZSBhPXJbM10/clszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaT1pLnRyaW0oKSwvXjwvLnRlc3QoaSkmJih0aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3Qobik/aT1pLnNsaWNlKDEpOmk9aS5zbGljZSgxLC0xKSkscVgocix7aHJlZjppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIiksdGl0bGU6YSYmYS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpfSxyWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGUscil7bGV0IG47aWYoKG49dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGUpKXx8KG49dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMoZSkpKXtsZXQgaT0oblsyXXx8blsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSxhPXJbaS50b0xvd2VyQ2FzZSgpXTtpZighYSl7bGV0IHM9blswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzpzLHRleHQ6c319cmV0dXJuIHFYKG4sYSxuWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhlLHIsbj0iIil7bGV0IGk9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhlKTtpZighaXx8aVszXSYmbi5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKXJldHVybjtpZighKGlbMV18fGlbMl18fCIiKXx8IW58fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMobikpe2xldCBzPVsuLi5pWzBdXS5sZW5ndGgtMSxsLHUsaD1zLGY9MCxkPWlbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKGQubGFzdEluZGV4PTAscj1yLnNsaWNlKC0xKmUubGVuZ3RoK3MpOyhpPWQuZXhlYyhyKSkhPW51bGw7KXtpZihsPWlbMV18fGlbMl18fGlbM118fGlbNF18fGlbNV18fGlbNl0sIWwpY29udGludWU7aWYodT1bLi4ubF0ubGVuZ3RoLGlbM118fGlbNF0pe2grPXU7Y29udGludWV9ZWxzZSBpZigoaVs1XXx8aVs2XSkmJnMlMyYmISgocyt1KSUzKSl7Zis9dTtjb250aW51ZX1pZihoLT11LGg+MCljb250aW51ZTt1PU1hdGgubWluKHUsdStoK2YpO2xldCBwPVsuLi5pWzBdXVswXS5sZW5ndGgsbT1lLnNsaWNlKDAscytpLmluZGV4K3ArdSk7aWYoTWF0aC5taW4ocyx1KSUyKXtsZXQgeT1tLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3Om0sdGV4dDp5LHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh5KX19bGV0IGc9bS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6bSx0ZXh0OmcsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGcpfX19fWNvZGVzcGFuKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzJdLnJlcGxhY2UoL1xuL2csIiAiKSxpPS9bXiBdLy50ZXN0KG4pLGE9L14gLy50ZXN0KG4pJiYvICQvLnRlc3Qobik7cmV0dXJuIGkmJmEmJihuPW4uc3Vic3RyaW5nKDEsbi5sZW5ndGgtMSkpLG49b28obiwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6clswXSx0ZXh0Om59fX1icihlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6ImJyIixyYXc6clswXX19ZGVsKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6ImRlbCIscmF3OnJbMF0sdGV4dDpyWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhyWzJdKX19YXV0b2xpbmsoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhlKTtpZihyKXtsZXQgbixpO3JldHVybiByWzJdPT09IkAiPyhuPW9vKHJbMV0pLGk9Im1haWx0bzoiK24pOihuPW9vKHJbMV0pLGk9bikse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6bixocmVmOmksdG9rZW5zOlt7dHlwZToidGV4dCIscmF3Om4sdGV4dDpufV19fX11cmwoZSl7bGV0IHI7aWYocj10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhlKSl7bGV0IG4saTtpZihyWzJdPT09IkAiKW49b28oclswXSksaT0ibWFpbHRvOiIrbjtlbHNle2xldCBhO2RvIGE9clswXSxyWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhyWzBdKT8uWzBdPz8iIjt3aGlsZShhIT09clswXSk7bj1vbyhyWzBdKSxyWzFdPT09Ind3dy4iP2k9Imh0dHA6Ly8iK3JbMF06aT1yWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0Om4saHJlZjppLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19aW5saW5lVGV4dChlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMoZSk7aWYocil7bGV0IG47cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz9uPXJbMF06bj1vbyhyWzBdKSx7dHlwZToidGV4dCIscmF3OnJbMF0sdGV4dDpufX19fSxxQ2U9L14oPzogKig/OlxufCQpKSsvLFhDZT0vXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxqQ2U9L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxBdj0vXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxLQ2U9L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sWlg9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sSlg9Zm4oL14oPyFidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sKSgoPzoufFxuKD8hXHMqP1xufGJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWwpKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLykucmVwbGFjZSgvYnVsbC9nLFpYKS5yZXBsYWNlKC9ibG9ja0NvZGUvZywvIHs0fS8pLnJlcGxhY2UoL2ZlbmNlcy9nLC8gezAsM30oPzpgezMsfXx+ezMsfSkvKS5yZXBsYWNlKC9ibG9ja3F1b3RlL2csLyB7MCwzfT4vKS5yZXBsYWNlKC9oZWFkaW5nL2csLyB7MCwzfSN7MSw2fS8pLnJlcGxhY2UoL2h0bWwvZywvIHswLDN9PFteXG4+XSs+XG4vKS5nZXRSZWdleCgpLGQ5PS9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSspKikvLFFDZT0vXlteXG5dKy8scDk9Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sWkNlPWZuKC9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8pLnJlcGxhY2UoImxhYmVsIixwOSkucmVwbGFjZSgidGl0bGUiLC8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvKS5nZXRSZWdleCgpLEpDZT1mbigvXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLykucmVwbGFjZSgvYnVsbC9nLFpYKS5nZXRSZWdleCgpLE01PSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWFyY2h8c2VjdGlvbnxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixtOT0vPCEtLSg/Oi0/PnxbXHNcU10qPyg/Oi0tPnwkKSkvLGU3ZT1mbigiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLCJpIikucmVwbGFjZSgiY29tbWVudCIsbTkpLnJlcGxhY2UoInRhZyIsTTUpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksZWo9Zm4oZDkpLnJlcGxhY2UoImhyIixBdikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixNNSkuZ2V0UmVnZXgoKSx0N2U9Zm4oL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8pLnJlcGxhY2UoInBhcmFncmFwaCIsZWopLmdldFJlZ2V4KCksZzk9e2Jsb2NrcXVvdGU6dDdlLGNvZGU6WENlLGRlZjpaQ2UsZmVuY2VzOmpDZSxoZWFkaW5nOktDZSxocjpBdixodG1sOmU3ZSxsaGVhZGluZzpKWCxsaXN0OkpDZSxuZXdsaW5lOnFDZSxwYXJhZ3JhcGg6ZWosdGFibGU6U3YsdGV4dDpRQ2V9LFhYPWZuKCJeICooW15cXG4gXS4qKVxcbiB7MCwzfSgoPzpcXHwgKik/Oj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSooPzpcXHwgKik/KSg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSIpLnJlcGxhY2UoImhyIixBdikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLE01KS5nZXRSZWdleCgpLHI3ZT17Li4uZzksdGFibGU6WFgscGFyYWdyYXBoOmZuKGQ5KS5yZXBsYWNlKCJociIsQXYpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsWFgpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixNNSkuZ2V0UmVnZXgoKX0sbjdlPXsuLi5nOSxodG1sOmZuKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLG05KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpTdixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpmbihkOSkucmVwbGFjZSgiaHIiLEF2KS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsSlgpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5yZXBsYWNlKCJ8dGFnIiwiIikuZ2V0UmVnZXgoKX0sdGo9L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGk3ZT0vXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLHJqPS9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGE3ZT0vXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxfdj0iXFxwe1B9XFxwe1N9IixzN2U9Zm4oL14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pLywidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csX3YpLmdldFJlZ2V4KCksbzdlPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nLGw3ZT1mbigvXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxfdikuZ2V0UmVnZXgoKSxjN2U9Zm4oIl5bXl8qXSo/X19bXl8qXSo/XFwqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVxcKilbcHVuY3RdKFxcKispKD89W1xcc118JCl8W15wdW5jdFxcc10oXFwqKykoPyFcXCopKD89W3B1bmN0XFxzXXwkKXwoPyFcXCopW3B1bmN0XFxzXShcXCorKSg/PVtecHVuY3RcXHNdKXxbXFxzXShcXCorKSg/IVxcKikoPz1bcHVuY3RdKXwoPyFcXCopW3B1bmN0XShcXCorKSg/IVxcKikoPz1bcHVuY3RdKXxbXnB1bmN0XFxzXShcXCorKSg/PVtecHVuY3RcXHNdKSIsImd1IikucmVwbGFjZSgvcHVuY3QvZyxfdikuZ2V0UmVnZXgoKSx1N2U9Zm4oIl5bXl8qXSo/XFwqXFwqW15fKl0qP19bXl8qXSo/KD89XFwqXFwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXFxzXXwkKXxbXnB1bmN0XFxzXShfKykoPyFfKSg/PVtwdW5jdFxcc118JCl8KD8hXylbcHVuY3RcXHNdKF8rKSg/PVtecHVuY3RcXHNdKXxbXFxzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pIiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLF92KS5nZXRSZWdleCgpLGg3ZT1mbigvXFwoW3B1bmN0XSkvLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csX3YpLmdldFJlZ2V4KCksZjdlPWZuKC9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8pLnJlcGxhY2UoInNjaGVtZSIsL1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vKS5yZXBsYWNlKCJlbWFpbCIsL1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxkN2U9Zm4obTkpLnJlcGxhY2UoIig/Oi0tPnwkKSIsIi0tPiIpLmdldFJlZ2V4KCkscDdlPWZuKCJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIpLnJlcGxhY2UoImNvbW1lbnQiLGQ3ZSkucmVwbGFjZSgiYXR0cmlidXRlIiwvXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxSNT0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/LyxtN2U9Zm4oL14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8pLnJlcGxhY2UoImxhYmVsIixSNSkucmVwbGFjZSgiaHJlZiIsLzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8pLnJlcGxhY2UoInRpdGxlIiwvIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvKS5nZXRSZWdleCgpLG5qPWZuKC9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8pLnJlcGxhY2UoImxhYmVsIixSNSkucmVwbGFjZSgicmVmIixwOSkuZ2V0UmVnZXgoKSxpaj1mbigvXiE/XFsocmVmKVxdKD86XFtcXSk/LykucmVwbGFjZSgicmVmIixwOSkuZ2V0UmVnZXgoKSxnN2U9Zm4oInJlZmxpbmt8bm9saW5rKD8hXFwoKSIsImciKS5yZXBsYWNlKCJyZWZsaW5rIixuaikucmVwbGFjZSgibm9saW5rIixpaikuZ2V0UmVnZXgoKSx5OT17X2JhY2twZWRhbDpTdixhbnlQdW5jdHVhdGlvbjpoN2UsYXV0b2xpbms6ZjdlLGJsb2NrU2tpcDpvN2UsYnI6cmosY29kZTppN2UsZGVsOlN2LGVtU3Ryb25nTERlbGltOmw3ZSxlbVN0cm9uZ1JEZWxpbUFzdDpjN2UsZW1TdHJvbmdSRGVsaW1VbmQ6dTdlLGVzY2FwZTp0aixsaW5rOm03ZSxub2xpbms6aWoscHVuY3R1YXRpb246czdlLHJlZmxpbms6bmoscmVmbGlua1NlYXJjaDpnN2UsdGFnOnA3ZSx0ZXh0OmE3ZSx1cmw6U3Z9LHk3ZT17Li4ueTksbGluazpmbigvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsUjUpLmdldFJlZ2V4KCkscmVmbGluazpmbigvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsUjUpLmdldFJlZ2V4KCl9LHU5PXsuLi55OSxlc2NhcGU6Zm4odGopLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksdXJsOmZuKC9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLywiaSIpLnJlcGxhY2UoImVtYWlsIiwvW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sdjdlPXsuLi51OSxicjpmbihyaikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6Zm4odTkudGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9LE41PXtub3JtYWw6ZzksZ2ZtOnI3ZSxwZWRhbnRpYzpuN2V9LEV2PXtub3JtYWw6eTksZ2ZtOnU5LGJyZWFrczp2N2UscGVkYW50aWM6eTdlfSxNdT1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIl9MZXhlciIpfXRva2VucztvcHRpb25zO3N0YXRlO3Rva2VuaXplcjtpbmxpbmVRdWV1ZTtjb25zdHJ1Y3RvcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1lfHxJZCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBnbSx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2xldCByPXtibG9jazpONS5ub3JtYWwsaW5saW5lOkV2Lm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhyLmJsb2NrPU41LnBlZGFudGljLHIuaW5saW5lPUV2LnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoci5ibG9jaz1ONS5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9yLmlubGluZT1Fdi5icmVha3M6ci5pbmxpbmU9RXYuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1yfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6TjUsaW5saW5lOkV2fX1zdGF0aWMgbGV4KGUscil7cmV0dXJuIG5ldyB0KHIpLmxleChlKX1zdGF0aWMgbGV4SW5saW5lKGUscil7cmV0dXJuIG5ldyB0KHIpLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2UoL1xyXG58XHIvZyxgCmApLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7Zm9yKGxldCByPTA7cjx0aGlzLmlubGluZVF1ZXVlLmxlbmd0aDtyKyspe2xldCBuPXRoaXMuaW5saW5lUXVldWVbcl07dGhpcy5pbmxpbmVUb2tlbnMobi5zcmMsbi50b2tlbnMpfXJldHVybiB0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGUscj1bXSxuPSExKXt0aGlzLm9wdGlvbnMucGVkYW50aWM/ZT1lLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTplPWUucmVwbGFjZSgvXiggKikoXHQrKS9nbSwobCx1LGgpPT51KyIgICAgIi5yZXBlYXQoaC5sZW5ndGgpKTtsZXQgaSxhLHM7Zm9yKDtlOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShsPT4oaT1sLmNhbGwoe2xleGVyOnRoaXN9LGUscikpPyhlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpLCEwKTohMSkpKXtpZihpPXRoaXMudG9rZW5pemVyLnNwYWNlKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksaS5yYXcubGVuZ3RoPT09MSYmci5sZW5ndGg+MD9yW3IubGVuZ3RoLTFdLnJhdys9YApgOnIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmNvZGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxhPXJbci5sZW5ndGgtMV0sYSYmKGEudHlwZT09PSJwYXJhZ3JhcGgifHxhLnR5cGU9PT0idGV4dCIpPyhhLnJhdys9YApgK2kucmF3LGEudGV4dCs9YApgK2kudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1hLnRleHQpOnIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmZlbmNlcyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmhlYWRpbmcoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5ocihlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5saXN0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuaHRtbChlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmRlZihlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLGE9cltyLmxlbmd0aC0xXSxhJiYoYS50eXBlPT09InBhcmFncmFwaCJ8fGEudHlwZT09PSJ0ZXh0Iik/KGEucmF3Kz1gCmAraS5yYXcsYS50ZXh0Kz1gCmAraS5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9YS50ZXh0KTp0aGlzLnRva2Vucy5saW5rc1tpLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tpLnRhZ109e2hyZWY6aS5ocmVmLHRpdGxlOmkudGl0bGV9KTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLnRhYmxlKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYocz1lLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgbD0xLzAsdT1lLnNsaWNlKDEpLGg7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGY9PntoPWYuY2FsbCh7bGV4ZXI6dGhpc30sdSksdHlwZW9mIGg9PSJudW1iZXIiJiZoPj0wJiYobD1NYXRoLm1pbihsLGgpKX0pLGw8MS8wJiZsPj0wJiYocz1lLnN1YnN0cmluZygwLGwrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoaT10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgocykpKXthPXJbci5sZW5ndGgtMV0sbiYmYT8udHlwZT09PSJwYXJhZ3JhcGgiPyhhLnJhdys9YApgK2kucmF3LGEudGV4dCs9YApgK2kudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWEudGV4dCk6ci5wdXNoKGkpLG49cy5sZW5ndGghPT1lLmxlbmd0aCxlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci50ZXh0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksYT1yW3IubGVuZ3RoLTFdLGEmJmEudHlwZT09PSJ0ZXh0Ij8oYS5yYXcrPWAKYCtpLnJhdyxhLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1hLnRleHQpOnIucHVzaChpKTtjb250aW51ZX1pZihlKXtsZXQgbD0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGwpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGwpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAscn1pbmxpbmUoZSxyPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6cn0pLHJ9aW5saW5lVG9rZW5zKGUscj1bXSl7bGV0IG4saSxhLHM9ZSxsLHUsaDtpZih0aGlzLnRva2Vucy5saW5rcyl7bGV0IGY9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKGYubGVuZ3RoPjApZm9yKDsobD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHMpKSE9bnVsbDspZi5pbmNsdWRlcyhsWzBdLnNsaWNlKGxbMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJihzPXMuc2xpY2UoMCxsLmluZGV4KSsiWyIrImEiLnJlcGVhdChsWzBdLmxlbmd0aC0yKSsiXSIrcy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoOyhsPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhzKSkhPW51bGw7KXM9cy5zbGljZSgwLGwuaW5kZXgpKyJbIisiYSIucmVwZWF0KGxbMF0ubGVuZ3RoLTIpKyJdIitzLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoOyhsPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKHMpKSE9bnVsbDspcz1zLnNsaWNlKDAsbC5pbmRleCkrIisrIitzLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7ZTspaWYodXx8KGg9IiIpLHU9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShmPT4obj1mLmNhbGwoe2xleGVyOnRoaXN9LGUscikpPyhlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKTohMSkpKXtpZihuPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLGk9cltyLmxlbmd0aC0xXSxpJiZuLnR5cGU9PT0idGV4dCImJmkudHlwZT09PSJ0ZXh0Ij8oaS5yYXcrPW4ucmF3LGkudGV4dCs9bi50ZXh0KTpyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5saW5rKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIucmVmbGluayhlLHRoaXMudG9rZW5zLmxpbmtzKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLGk9cltyLmxlbmd0aC0xXSxpJiZuLnR5cGU9PT0idGV4dCImJmkudHlwZT09PSJ0ZXh0Ij8oaS5yYXcrPW4ucmF3LGkudGV4dCs9bi50ZXh0KTpyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5lbVN0cm9uZyhlLHMsaCkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5jb2Rlc3BhbihlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLmJyKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIuZGVsKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsoZSkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobik7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYobj10aGlzLnRva2VuaXplci51cmwoZSkpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKGE9ZSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBmPTEvMCxkPWUuc2xpY2UoMSkscDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKG09PntwPW0uY2FsbCh7bGV4ZXI6dGhpc30sZCksdHlwZW9mIHA9PSJudW1iZXIiJiZwPj0wJiYoZj1NYXRoLm1pbihmLHApKX0pLGY8MS8wJiZmPj0wJiYoYT1lLnN1YnN0cmluZygwLGYrMSkpfWlmKG49dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChhKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLG4ucmF3LnNsaWNlKC0xKSE9PSJfIiYmKGg9bi5yYXcuc2xpY2UoLTEpKSx1PSEwLGk9cltyLmxlbmd0aC0xXSxpJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1uLnJhdyxpLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pO2NvbnRpbnVlfWlmKGUpe2xldCBmPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoZik7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZil9fXJldHVybiByfX0seW09Y2xhc3N7c3RhdGlje28odGhpcywiX1JlbmRlcmVyIil9b3B0aW9ucztwYXJzZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fElkfXNwYWNlKGUpe3JldHVybiIifWNvZGUoe3RleHQ6ZSxsYW5nOnIsZXNjYXBlZDpufSl7bGV0IGk9KHJ8fCIiKS5tYXRjaCgvXlxTKi8pPy5bMF0sYT1lLnJlcGxhY2UoL1xuJC8sIiIpK2AKYDtyZXR1cm4gaT8nPHByZT48Y29kZSBjbGFzcz0ibGFuZ3VhZ2UtJytvbyhpKSsnIj4nKyhuP2E6b28oYSwhMCkpK2A8L2NvZGU+PC9wcmU+CmA6IjxwcmU+PGNvZGU+Iisobj9hOm9vKGEsITApKStgPC9jb2RlPjwvcHJlPgpgfWJsb2NrcXVvdGUoe3Rva2VuczplfSl7cmV0dXJuYDxibG9ja3F1b3RlPgoke3RoaXMucGFyc2VyLnBhcnNlKGUpfTwvYmxvY2txdW90ZT4KYH1odG1sKHt0ZXh0OmV9KXtyZXR1cm4gZX1oZWFkaW5nKHt0b2tlbnM6ZSxkZXB0aDpyfSl7cmV0dXJuYDxoJHtyfT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvaCR7cn0+CmB9aHIoZSl7cmV0dXJuYDxocj4KYH1saXN0KGUpe2xldCByPWUub3JkZXJlZCxuPWUuc3RhcnQsaT0iIjtmb3IobGV0IGw9MDtsPGUuaXRlbXMubGVuZ3RoO2wrKyl7bGV0IHU9ZS5pdGVtc1tsXTtpKz10aGlzLmxpc3RpdGVtKHUpfWxldCBhPXI/Im9sIjoidWwiLHM9ciYmbiE9PTE/JyBzdGFydD0iJytuKyciJzoiIjtyZXR1cm4iPCIrYStzK2A+CmAraSsiPC8iK2ErYD4KYH1saXN0aXRlbShlKXtsZXQgcj0iIjtpZihlLnRhc2spe2xldCBuPXRoaXMuY2hlY2tib3goe2NoZWNrZWQ6ISFlLmNoZWNrZWR9KTtlLmxvb3NlP2UudG9rZW5zLmxlbmd0aD4wJiZlLnRva2Vuc1swXS50eXBlPT09InBhcmFncmFwaCI/KGUudG9rZW5zWzBdLnRleHQ9bisiICIrZS50b2tlbnNbMF0udGV4dCxlLnRva2Vuc1swXS50b2tlbnMmJmUudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZS50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihlLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1uKyIgIitlLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmUudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHJhdzpuKyIgIix0ZXh0Om4rIiAifSk6cis9bisiICJ9cmV0dXJuIHIrPXRoaXMucGFyc2VyLnBhcnNlKGUudG9rZW5zLCEhZS5sb29zZSksYDxsaT4ke3J9PC9saT4KYH1jaGVja2JveCh7Y2hlY2tlZDplfSl7cmV0dXJuIjxpbnB1dCAiKyhlPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCI+J31wYXJhZ3JhcGgoe3Rva2VuczplfSl7cmV0dXJuYDxwPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9wPgpgfXRhYmxlKGUpe2xldCByPSIiLG49IiI7Zm9yKGxldCBhPTA7YTxlLmhlYWRlci5sZW5ndGg7YSsrKW4rPXRoaXMudGFibGVjZWxsKGUuaGVhZGVyW2FdKTtyKz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KTtsZXQgaT0iIjtmb3IobGV0IGE9MDthPGUucm93cy5sZW5ndGg7YSsrKXtsZXQgcz1lLnJvd3NbYV07bj0iIjtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyluKz10aGlzLnRhYmxlY2VsbChzW2xdKTtpKz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KX1yZXR1cm4gaSYmKGk9YDx0Ym9keT4ke2l9PC90Ym9keT5gKSxgPHRhYmxlPgo8dGhlYWQ+CmArcitgPC90aGVhZD4KYCtpK2A8L3RhYmxlPgpgfXRhYmxlcm93KHt0ZXh0OmV9KXtyZXR1cm5gPHRyPgoke2V9PC90cj4KYH10YWJsZWNlbGwoZSl7bGV0IHI9dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZS50b2tlbnMpLG49ZS5oZWFkZXI/InRoIjoidGQiO3JldHVybihlLmFsaWduP2A8JHtufSBhbGlnbj0iJHtlLmFsaWdufSI+YDpgPCR7bn0+YCkrcitgPC8ke259PgpgfXN0cm9uZyh7dG9rZW5zOmV9KXtyZXR1cm5gPHN0cm9uZz4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvc3Ryb25nPmB9ZW0oe3Rva2VuczplfSl7cmV0dXJuYDxlbT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvZW0+YH1jb2Rlc3Bhbih7dGV4dDplfSl7cmV0dXJuYDxjb2RlPiR7ZX08L2NvZGU+YH1icihlKXtyZXR1cm4iPGJyPiJ9ZGVsKHt0b2tlbnM6ZX0pe3JldHVybmA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9kZWw+YH1saW5rKHtocmVmOmUsdGl0bGU6cix0b2tlbnM6bn0pe2xldCBpPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4pLGE9V1goZSk7aWYoYT09PW51bGwpcmV0dXJuIGk7ZT1hO2xldCBzPSc8YSBocmVmPSInK2UrJyInO3JldHVybiByJiYocys9JyB0aXRsZT0iJytyKyciJykscys9Ij4iK2krIjwvYT4iLHN9aW1hZ2Uoe2hyZWY6ZSx0aXRsZTpyLHRleHQ6bn0pe2xldCBpPVdYKGUpO2lmKGk9PT1udWxsKXJldHVybiBuO2U9aTtsZXQgYT1gPGltZyBzcmM9IiR7ZX0iIGFsdD0iJHtufSJgO3JldHVybiByJiYoYSs9YCB0aXRsZT0iJHtyfSJgKSxhKz0iPiIsYX10ZXh0KGUpe3JldHVybiJ0b2tlbnMiaW4gZSYmZS50b2tlbnM/dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZS50b2tlbnMpOmUudGV4dH19LEN2PWNsYXNze3N0YXRpY3tvKHRoaXMsIl9UZXh0UmVuZGVyZXIiKX1zdHJvbmcoe3RleHQ6ZX0pe3JldHVybiBlfWVtKHt0ZXh0OmV9KXtyZXR1cm4gZX1jb2Rlc3Bhbih7dGV4dDplfSl7cmV0dXJuIGV9ZGVsKHt0ZXh0OmV9KXtyZXR1cm4gZX1odG1sKHt0ZXh0OmV9KXtyZXR1cm4gZX10ZXh0KHt0ZXh0OmV9KXtyZXR1cm4gZX1saW5rKHt0ZXh0OmV9KXtyZXR1cm4iIitlfWltYWdlKHt0ZXh0OmV9KXtyZXR1cm4iIitlfWJyKCl7cmV0dXJuIiJ9fSxJdT1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIl9QYXJzZXIiKX1vcHRpb25zO3JlbmRlcmVyO3RleHRSZW5kZXJlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8SWQsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IHltLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlci5wYXJzZXI9dGhpcyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgQ3Z9c3RhdGljIHBhcnNlKGUscil7cmV0dXJuIG5ldyB0KHIpLnBhcnNlKGUpfXN0YXRpYyBwYXJzZUlubGluZShlLHIpe3JldHVybiBuZXcgdChyKS5wYXJzZUlubGluZShlKX1wYXJzZShlLHI9ITApe2xldCBuPSIiO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdKXtsZXQgbD1hLHU9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2wudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGwpO2lmKHUhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMobC50eXBlKSl7bis9dXx8IiI7Y29udGludWV9fWxldCBzPWE7c3dpdGNoKHMudHlwZSl7Y2FzZSJzcGFjZSI6e24rPXRoaXMucmVuZGVyZXIuc3BhY2Uocyk7Y29udGludWV9Y2FzZSJociI6e24rPXRoaXMucmVuZGVyZXIuaHIocyk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7bis9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHMpO2NvbnRpbnVlfWNhc2UiY29kZSI6e24rPXRoaXMucmVuZGVyZXIuY29kZShzKTtjb250aW51ZX1jYXNlInRhYmxlIjp7bis9dGhpcy5yZW5kZXJlci50YWJsZShzKTtjb250aW51ZX1jYXNlImJsb2NrcXVvdGUiOntuKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUocyk7Y29udGludWV9Y2FzZSJsaXN0Ijp7bis9dGhpcy5yZW5kZXJlci5saXN0KHMpO2NvbnRpbnVlfWNhc2UiaHRtbCI6e24rPXRoaXMucmVuZGVyZXIuaHRtbChzKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e24rPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHMpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBsPXMsdT10aGlzLnJlbmRlcmVyLnRleHQobCk7Zm9yKDtpKzE8ZS5sZW5ndGgmJmVbaSsxXS50eXBlPT09InRleHQiOylsPWVbKytpXSx1Kz1gCmArdGhpcy5yZW5kZXJlci50ZXh0KGwpO3I/bis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoe3R5cGU6InBhcmFncmFwaCIscmF3OnUsdGV4dDp1LHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzp1LHRleHQ6dX1dfSk6bis9dTtjb250aW51ZX1kZWZhdWx0OntsZXQgbD0nVG9rZW4gd2l0aCAiJytzLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gbn1wYXJzZUlubGluZShlLHIpe3I9cnx8dGhpcy5yZW5kZXJlcjtsZXQgbj0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYS50eXBlXSl7bGV0IGw9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGEpO2lmKGwhPT0hMXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhhLnR5cGUpKXtuKz1sfHwiIjtjb250aW51ZX19bGV0IHM9YTtzd2l0Y2gocy50eXBlKXtjYXNlImVzY2FwZSI6e24rPXIudGV4dChzKTticmVha31jYXNlImh0bWwiOntuKz1yLmh0bWwocyk7YnJlYWt9Y2FzZSJsaW5rIjp7bis9ci5saW5rKHMpO2JyZWFrfWNhc2UiaW1hZ2UiOntuKz1yLmltYWdlKHMpO2JyZWFrfWNhc2Uic3Ryb25nIjp7bis9ci5zdHJvbmcocyk7YnJlYWt9Y2FzZSJlbSI6e24rPXIuZW0ocyk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e24rPXIuY29kZXNwYW4ocyk7YnJlYWt9Y2FzZSJiciI6e24rPXIuYnIocyk7YnJlYWt9Y2FzZSJkZWwiOntuKz1yLmRlbChzKTticmVha31jYXNlInRleHQiOntuKz1yLnRleHQocyk7YnJlYWt9ZGVmYXVsdDp7bGV0IGw9J1Rva2VuIHdpdGggIicrcy50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IobCksIiI7dGhyb3cgbmV3IEVycm9yKGwpfX19cmV0dXJuIG59fSxtbT1jbGFzc3tzdGF0aWN7byh0aGlzLCJfSG9va3MiKX1vcHRpb25zO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxJZH1zdGF0aWMgcGFzc1Rocm91Z2hIb29rcz1uZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIiwicHJvY2Vzc0FsbFRva2VucyJdKTtwcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfXByb2Nlc3NBbGxUb2tlbnMoZSl7cmV0dXJuIGV9fSxoOT1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXJrZWQiKX1kZWZhdWx0cz1mOSgpO29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoTXUubGV4LEl1LnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKE11LmxleElubGluZSxJdS5wYXJzZUlubGluZSk7UGFyc2VyPUl1O1JlbmRlcmVyPXltO1RleHRSZW5kZXJlcj1DdjtMZXhlcj1NdTtUb2tlbml6ZXI9Z207SG9va3M9bW07Y29uc3RydWN0b3IoLi4uZSl7dGhpcy51c2UoLi4uZSl9d2Fsa1Rva2VucyhlLHIpe2xldCBuPVtdO2ZvcihsZXQgaSBvZiBlKXN3aXRjaChuPW4uY29uY2F0KHIuY2FsbCh0aGlzLGkpKSxpLnR5cGUpe2Nhc2UidGFibGUiOntsZXQgYT1pO2ZvcihsZXQgcyBvZiBhLmhlYWRlciluPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLnRva2VucyxyKSk7Zm9yKGxldCBzIG9mIGEucm93cylmb3IobGV0IGwgb2YgcyluPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhsLnRva2VucyxyKSk7YnJlYWt9Y2FzZSJsaXN0Ijp7bGV0IGE9aTtuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLml0ZW1zLHIpKTticmVha31kZWZhdWx0OntsZXQgYT1pO3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucz8uY2hpbGRUb2tlbnM/LlthLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1thLnR5cGVdLmZvckVhY2gocz0+e2xldCBsPWFbc10uZmxhdCgxLzApO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGwscikpfSk6YS50b2tlbnMmJihuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLnRva2VucyxyKSkpfX1yZXR1cm4gbn11c2UoLi4uZSl7bGV0IHI9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gZS5mb3JFYWNoKG49PntsZXQgaT17Li4ubn07aWYoaS5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxpLmFzeW5jfHwhMSxuLmV4dGVuc2lvbnMmJihuLmV4dGVuc2lvbnMuZm9yRWFjaChhPT57aWYoIWEubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIGEpe2xldCBzPXIucmVuZGVyZXJzW2EubmFtZV07cz9yLnJlbmRlcmVyc1thLm5hbWVdPWZ1bmN0aW9uKC4uLmwpe2xldCB1PWEucmVuZGVyZXIuYXBwbHkodGhpcyxsKTtyZXR1cm4gdT09PSExJiYodT1zLmFwcGx5KHRoaXMsbCkpLHV9OnIucmVuZGVyZXJzW2EubmFtZV09YS5yZW5kZXJlcn1pZigidG9rZW5pemVyImluIGEpe2lmKCFhLmxldmVsfHxhLmxldmVsIT09ImJsb2NrIiYmYS5sZXZlbCE9PSJpbmxpbmUiKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2xldCBzPXJbYS5sZXZlbF07cz9zLnVuc2hpZnQoYS50b2tlbml6ZXIpOnJbYS5sZXZlbF09W2EudG9rZW5pemVyXSxhLnN0YXJ0JiYoYS5sZXZlbD09PSJibG9jayI/ci5zdGFydEJsb2NrP3Iuc3RhcnRCbG9jay5wdXNoKGEuc3RhcnQpOnIuc3RhcnRCbG9jaz1bYS5zdGFydF06YS5sZXZlbD09PSJpbmxpbmUiJiYoci5zdGFydElubGluZT9yLnN0YXJ0SW5saW5lLnB1c2goYS5zdGFydCk6ci5zdGFydElubGluZT1bYS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gYSYmYS5jaGlsZFRva2VucyYmKHIuY2hpbGRUb2tlbnNbYS5uYW1lXT1hLmNoaWxkVG9rZW5zKX0pLGkuZXh0ZW5zaW9ucz1yKSxuLnJlbmRlcmVyKXtsZXQgYT10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgeW0odGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBzIGluIG4ucmVuZGVyZXIpe2lmKCEocyBpbiBhKSl0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3N9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsInBhcnNlciJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBsPXMsdT1uLnJlbmRlcmVyW2xdO24udXNlTmV3UmVuZGVyZXJ8fCh1PXRoaXMuI3QodSxsLGEpKTtsZXQgaD1hW2xdO2FbbF09KC4uLmYpPT57bGV0IGQ9dS5hcHBseShhLGYpO3JldHVybiBkPT09ITEmJihkPWguYXBwbHkoYSxmKSksZHx8IiJ9fWkucmVuZGVyZXI9YX1pZihuLnRva2VuaXplcil7bGV0IGE9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBnbSh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IHMgaW4gbi50b2tlbml6ZXIpe2lmKCEocyBpbiBhKSl0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHtzfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJydWxlcyIsImxleGVyIl0uaW5jbHVkZXMocykpY29udGludWU7bGV0IGw9cyx1PW4udG9rZW5pemVyW2xdLGg9YVtsXTthW2xdPSguLi5mKT0+e2xldCBkPXUuYXBwbHkoYSxmKTtyZXR1cm4gZD09PSExJiYoZD1oLmFwcGx5KGEsZikpLGR9fWkudG9rZW5pemVyPWF9aWYobi5ob29rcyl7bGV0IGE9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IG1tO2ZvcihsZXQgcyBpbiBuLmhvb2tzKXtpZighKHMgaW4gYSkpdGhyb3cgbmV3IEVycm9yKGBob29rICcke3N9JyBkb2VzIG5vdCBleGlzdGApO2lmKHM9PT0ib3B0aW9ucyIpY29udGludWU7bGV0IGw9cyx1PW4uaG9va3NbbF0saD1hW2xdO21tLnBhc3NUaHJvdWdoSG9va3MuaGFzKHMpP2FbbF09Zj0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1LmNhbGwoYSxmKSkudGhlbihwPT5oLmNhbGwoYSxwKSk7bGV0IGQ9dS5jYWxsKGEsZik7cmV0dXJuIGguY2FsbChhLGQpfTphW2xdPSguLi5mKT0+e2xldCBkPXUuYXBwbHkoYSxmKTtyZXR1cm4gZD09PSExJiYoZD1oLmFwcGx5KGEsZikpLGR9fWkuaG9va3M9YX1pZihuLndhbGtUb2tlbnMpe2xldCBhPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxzPW4ud2Fsa1Rva2VucztpLndhbGtUb2tlbnM9ZnVuY3Rpb24obCl7bGV0IHU9W107cmV0dXJuIHUucHVzaChzLmNhbGwodGhpcyxsKSksYSYmKHU9dS5jb25jYXQoYS5jYWxsKHRoaXMsbCkpKSx1fX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLml9fSksdGhpc30jdChlLHIsbil7c3dpdGNoKHIpe2Nhc2UiaGVhZGluZyI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsbi5wYXJzZXIucGFyc2VJbmxpbmUoaS50b2tlbnMpLGkuZGVwdGgsVUNlKG4ucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zLG4ucGFyc2VyLnRleHRSZW5kZXJlcikpKX07Y2FzZSJjb2RlIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQsaS5sYW5nLCEhaS5lc2NhcGVkKX07Y2FzZSJ0YWJsZSI6cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKCFpLnR5cGV8fGkudHlwZSE9PXIpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2xldCBhPSIiLHM9IiI7Zm9yKGxldCB1PTA7dTxpLmhlYWRlci5sZW5ndGg7dSsrKXMrPXRoaXMudGFibGVjZWxsKHt0ZXh0OmkuaGVhZGVyW3VdLnRleHQsdG9rZW5zOmkuaGVhZGVyW3VdLnRva2VucyxoZWFkZXI6ITAsYWxpZ246aS5hbGlnblt1XX0pO2ErPXRoaXMudGFibGVyb3coe3RleHQ6c30pO2xldCBsPSIiO2ZvcihsZXQgdT0wO3U8aS5yb3dzLmxlbmd0aDt1Kyspe2xldCBoPWkucm93c1t1XTtzPSIiO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXMrPXRoaXMudGFibGVjZWxsKHt0ZXh0OmhbZl0udGV4dCx0b2tlbnM6aFtmXS50b2tlbnMsaGVhZGVyOiExLGFsaWduOmkuYWxpZ25bZl19KTtsKz10aGlzLnRhYmxlcm93KHt0ZXh0OnN9KX1yZXR1cm4gZS5jYWxsKHRoaXMsYSxsKX07Y2FzZSJibG9ja3F1b3RlIjpyZXR1cm4gZnVuY3Rpb24oaSl7aWYoIWkudHlwZXx8aS50eXBlIT09cilyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGV0IGE9dGhpcy5wYXJzZXIucGFyc2UoaS50b2tlbnMpO3JldHVybiBlLmNhbGwodGhpcyxhKX07Y2FzZSJsaXN0IjpyZXR1cm4gZnVuY3Rpb24oaSl7aWYoIWkudHlwZXx8aS50eXBlIT09cilyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGV0IGE9aS5vcmRlcmVkLHM9aS5zdGFydCxsPWkubG9vc2UsdT0iIjtmb3IobGV0IGg9MDtoPGkuaXRlbXMubGVuZ3RoO2grKyl7bGV0IGY9aS5pdGVtc1toXSxkPWYuY2hlY2tlZCxwPWYudGFzayxtPSIiO2lmKGYudGFzayl7bGV0IGc9dGhpcy5jaGVja2JveCh7Y2hlY2tlZDohIWR9KTtsP2YudG9rZW5zLmxlbmd0aD4wJiZmLnRva2Vuc1swXS50eXBlPT09InBhcmFncmFwaCI/KGYudG9rZW5zWzBdLnRleHQ9ZysiICIrZi50b2tlbnNbMF0udGV4dCxmLnRva2Vuc1swXS50b2tlbnMmJmYudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1nKyIgIitmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmYudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6ZysiICJ9KTptKz1nKyIgIn1tKz10aGlzLnBhcnNlci5wYXJzZShmLnRva2VucyxsKSx1Kz10aGlzLmxpc3RpdGVtKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzptLHRleHQ6bSx0YXNrOnAsY2hlY2tlZDohIWQsbG9vc2U6bCx0b2tlbnM6Zi50b2tlbnN9KX1yZXR1cm4gZS5jYWxsKHRoaXMsdSxhLHMpfTtjYXNlImh0bWwiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLGkudGV4dCxpLmJsb2NrKX07Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zKSl9O2Nhc2UiZXNjYXBlIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQpfTtjYXNlImxpbmsiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLGkuaHJlZixpLnRpdGxlLHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zKSl9O2Nhc2UiaW1hZ2UiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLGkuaHJlZixpLnRpdGxlLGkudGV4dCl9O2Nhc2Uic3Ryb25nIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyx0aGlzLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucykpfTtjYXNlImVtIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyx0aGlzLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucykpfTtjYXNlImNvZGVzcGFuIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQpfTtjYXNlImRlbCI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoaS50b2tlbnMpKX07Y2FzZSJ0ZXh0IjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQpfX1yZXR1cm4gZX1zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSxyKXtyZXR1cm4gTXUubGV4KGUscj8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUscil7cmV0dXJuIEl1LnBhcnNlKGUscj8/dGhpcy5kZWZhdWx0cyl9I2UoZSxyKXtyZXR1cm4obixpKT0+e2xldCBhPXsuLi5pfSxzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmF9O3RoaXMuZGVmYXVsdHMuYXN5bmM9PT0hMCYmYS5hc3luYz09PSExJiYocy5zaWxlbnR8fGNvbnNvbGUud2FybigibWFya2VkKCk6IFRoZSBhc3luYyBvcHRpb24gd2FzIHNldCB0byB0cnVlIGJ5IGFuIGV4dGVuc2lvbi4gVGhlIGFzeW5jOiBmYWxzZSBvcHRpb24gc2VudCB0byBwYXJzZSB3aWxsIGJlIGlnbm9yZWQuIikscy5hc3luYz0hMCk7bGV0IGw9dGhpcy4jcighIXMuc2lsZW50LCEhcy5hc3luYyk7aWYodHlwZW9mIG4+InUifHxuPT09bnVsbClyZXR1cm4gbChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIG4hPSJzdHJpbmciKXJldHVybiBsKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzLmhvb2tzJiYocy5ob29rcy5vcHRpb25zPXMpLHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmhvb2tzP3MuaG9va3MucHJlcHJvY2VzcyhuKTpuKS50aGVuKHU9PmUodSxzKSkudGhlbih1PT5zLmhvb2tzP3MuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh1KTp1KS50aGVuKHU9PnMud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnModSxzLndhbGtUb2tlbnMpKS50aGVuKCgpPT51KTp1KS50aGVuKHU9PnIodSxzKSkudGhlbih1PT5zLmhvb2tzP3MuaG9va3MucG9zdHByb2Nlc3ModSk6dSkuY2F0Y2gobCk7dHJ5e3MuaG9va3MmJihuPXMuaG9va3MucHJlcHJvY2VzcyhuKSk7bGV0IHU9ZShuLHMpO3MuaG9va3MmJih1PXMuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh1KSkscy53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnModSxzLndhbGtUb2tlbnMpO2xldCBoPXIodSxzKTtyZXR1cm4gcy5ob29rcyYmKGg9cy5ob29rcy5wb3N0cHJvY2VzcyhoKSksaH1jYXRjaCh1KXtyZXR1cm4gbCh1KX19fSNyKGUscil7cmV0dXJuIG49PntpZihuLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCxlKXtsZXQgaT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitvbyhuLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiByP1Byb21pc2UucmVzb2x2ZShpKTppfWlmKHIpcmV0dXJuIFByb21pc2UucmVqZWN0KG4pO3Rocm93IG59fX0sTWQ9bmV3IGg5O28oZW4sIm1hcmtlZCIpO2VuLm9wdGlvbnM9ZW4uc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gTWQuc2V0T3B0aW9ucyh0KSxlbi5kZWZhdWx0cz1NZC5kZWZhdWx0cyxqWChlbi5kZWZhdWx0cyksZW59O2VuLmdldERlZmF1bHRzPWY5O2VuLmRlZmF1bHRzPUlkO2VuLnVzZT1mdW5jdGlvbiguLi50KXtyZXR1cm4gTWQudXNlKC4uLnQpLGVuLmRlZmF1bHRzPU1kLmRlZmF1bHRzLGpYKGVuLmRlZmF1bHRzKSxlbn07ZW4ud2Fsa1Rva2Vucz1mdW5jdGlvbih0LGUpe3JldHVybiBNZC53YWxrVG9rZW5zKHQsZSl9O2VuLnBhcnNlSW5saW5lPU1kLnBhcnNlSW5saW5lO2VuLlBhcnNlcj1JdTtlbi5wYXJzZXI9SXUucGFyc2U7ZW4uUmVuZGVyZXI9eW07ZW4uVGV4dFJlbmRlcmVyPUN2O2VuLkxleGVyPU11O2VuLmxleGVyPU11LmxleDtlbi5Ub2tlbml6ZXI9Z207ZW4uSG9va3M9bW07ZW4ucGFyc2U9ZW47UEV0PWVuLm9wdGlvbnMsQkV0PWVuLnNldE9wdGlvbnMsRkV0PWVuLnVzZSx6RXQ9ZW4ud2Fsa1Rva2VucyxHRXQ9ZW4ucGFyc2VJbmxpbmUsJEV0PUl1LnBhcnNlLFZFdD1NdS5sZXh9KTtmdW5jdGlvbiB4N2UodCx7bWFya2Rvd25BdXRvV3JhcDplfSl7bGV0IG49dC5yZXBsYWNlKC88YnJcLz4vZyxgCmApLnJlcGxhY2UoL1xuezIsfS9nLGAKYCksaT1qYihuKTtyZXR1cm4gZT09PSExP2kucmVwbGFjZSgvIC9nLCImbmJzcDsiKTppfWZ1bmN0aW9uIHNqKHQsZT17fSl7bGV0IHI9eDdlKHQsZSksbj1lbi5sZXhlcihyKSxpPVtbXV0sYT0wO2Z1bmN0aW9uIHMobCx1PSJub3JtYWwiKXtsLnR5cGU9PT0idGV4dCI/bC50ZXh0LnNwbGl0KGAKYCkuZm9yRWFjaCgoZixkKT0+e2QhPT0wJiYoYSsrLGkucHVzaChbXSkpLGYuc3BsaXQoIiAiKS5mb3JFYWNoKHA9PntwPXAucmVwbGFjZSgvJiMzOTsvZywiJyIpLHAmJmlbYV0ucHVzaCh7Y29udGVudDpwLHR5cGU6dX0pfSl9KTpsLnR5cGU9PT0ic3Ryb25nInx8bC50eXBlPT09ImVtIj9sLnRva2Vucy5mb3JFYWNoKGg9PntzKGgsbC50eXBlKX0pOmwudHlwZT09PSJodG1sIiYmaVthXS5wdXNoKHtjb250ZW50OmwudGV4dCx0eXBlOiJub3JtYWwifSl9cmV0dXJuIG8ocywicHJvY2Vzc05vZGUiKSxuLmZvckVhY2gobD0+e2wudHlwZT09PSJwYXJhZ3JhcGgiP2wudG9rZW5zPy5mb3JFYWNoKHU9PntzKHUpfSk6bC50eXBlPT09Imh0bWwiJiZpW2FdLnB1c2goe2NvbnRlbnQ6bC50ZXh0LHR5cGU6Im5vcm1hbCJ9KX0pLGl9ZnVuY3Rpb24gb2oodCx7bWFya2Rvd25BdXRvV3JhcDplfT17fSl7bGV0IHI9ZW4ubGV4ZXIodCk7ZnVuY3Rpb24gbihpKXtyZXR1cm4gaS50eXBlPT09InRleHQiP2U9PT0hMT9pLnRleHQucmVwbGFjZSgvXG4gKi9nLCI8YnIvPiIpLnJlcGxhY2UoLyAvZywiJm5ic3A7Iik6aS50ZXh0LnJlcGxhY2UoL1xuICovZywiPGJyLz4iKTppLnR5cGU9PT0ic3Ryb25nIj9gPHN0cm9uZz4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9zdHJvbmc+YDppLnR5cGU9PT0iZW0iP2A8ZW0+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvZW0+YDppLnR5cGU9PT0icGFyYWdyYXBoIj9gPHA+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvcD5gOmkudHlwZT09PSJzcGFjZSI/IiI6aS50eXBlPT09Imh0bWwiP2Ake2kudGV4dH1gOmkudHlwZT09PSJlc2NhcGUiP2kudGV4dDpgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7aS50eXBlfWB9cmV0dXJuIG8obiwib3V0cHV0Iiksci5tYXAobikuam9pbigiIil9dmFyIGxqPU0oKCk9PnsidXNlIHN0cmljdCI7YWooKTtHUygpO28oeDdlLCJwcmVwcm9jZXNzTWFya2Rvd24iKTtvKHNqLCJtYXJrZG93blRvTGluZXMiKTtvKG9qLCJtYXJrZG93blRvSFRNTCIpfSk7ZnVuY3Rpb24gYjdlKHQpe3JldHVybiBJbnRsLlNlZ21lbnRlcj9bLi4ubmV3IEludGwuU2VnbWVudGVyKCkuc2VnbWVudCh0KV0ubWFwKGU9PmUuc2VnbWVudCk6Wy4uLnRdfWZ1bmN0aW9uIHc3ZSh0LGUpe2xldCByPWI3ZShlLmNvbnRlbnQpO3JldHVybiBjaih0LFtdLHIsZS50eXBlKX1mdW5jdGlvbiBjaih0LGUscixuKXtpZihyLmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OmUuam9pbigiIiksdHlwZTpufSx7Y29udGVudDoiIix0eXBlOm59XTtsZXRbaSwuLi5hXT1yLHM9Wy4uLmUsaV07cmV0dXJuIHQoW3tjb250ZW50OnMuam9pbigiIiksdHlwZTpufV0pP2NqKHQscyxhLG4pOihlLmxlbmd0aD09PTAmJmkmJihlLnB1c2goaSksci5zaGlmdCgpKSxbe2NvbnRlbnQ6ZS5qb2luKCIiKSx0eXBlOm59LHtjb250ZW50OnIuam9pbigiIiksdHlwZTpufV0pfWZ1bmN0aW9uIHVqKHQsZSl7aWYodC5zb21lKCh7Y29udGVudDpyfSk9PnIuaW5jbHVkZXMoYApgKSkpdGhyb3cgbmV3IEVycm9yKCJzcGxpdExpbmVUb0ZpdFdpZHRoIGRvZXMgbm90IHN1cHBvcnQgbmV3bGluZXMgaW4gdGhlIGxpbmUiKTtyZXR1cm4gdjkodCxlKX1mdW5jdGlvbiB2OSh0LGUscj1bXSxuPVtdKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIG4ubGVuZ3RoPjAmJnIucHVzaChuKSxyLmxlbmd0aD4wP3I6W107bGV0IGk9IiI7dFswXS5jb250ZW50PT09IiAiJiYoaT0iICIsdC5zaGlmdCgpKTtsZXQgYT10LnNoaWZ0KCk/P3tjb250ZW50OiIgIix0eXBlOiJub3JtYWwifSxzPVsuLi5uXTtpZihpIT09IiImJnMucHVzaCh7Y29udGVudDppLHR5cGU6Im5vcm1hbCJ9KSxzLnB1c2goYSksZShzKSlyZXR1cm4gdjkodCxlLHIscyk7aWYobi5sZW5ndGg+MClyLnB1c2gobiksdC51bnNoaWZ0KGEpO2Vsc2UgaWYoYS5jb250ZW50KXtsZXRbbCx1XT13N2UoZSxhKTtyLnB1c2goW2xdKSx1LmNvbnRlbnQmJnQudW5zaGlmdCh1KX1yZXR1cm4gdjkodCxlLHIpfXZhciBoaj1NKCgpPT57InVzZSBzdHJpY3QiO28oYjdlLCJzcGxpdFRleHRUb0NoYXJzIik7byh3N2UsInNwbGl0V29yZFRvRml0V2lkdGgiKTtvKGNqLCJzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uIik7byh1aiwic3BsaXRMaW5lVG9GaXRXaWR0aCIpO28odjksInNwbGl0TGluZVRvRml0V2lkdGhSZWN1cnNpb24iKX0pO2Z1bmN0aW9uIGZqKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9YXN5bmMgZnVuY3Rpb24gVDdlKHQsZSxyLG4saT0hMSl7bGV0IGE9dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKTthLmF0dHIoIndpZHRoIixgJHsxMCpyfXB4YCksYS5hdHRyKCJoZWlnaHQiLGAkezEwKnJ9cHhgKTtsZXQgcz1hLmFwcGVuZCgieGh0bWw6ZGl2IiksbD1lLmxhYmVsO2UubGFiZWwmJnlpKGUubGFiZWwpJiYobD1hd2FpdCBiaChlLmxhYmVsLnJlcGxhY2UocWUubGluZUJyZWFrUmVnZXgsYApgKSxwZSgpKSk7bGV0IHU9ZS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsaD1zLmFwcGVuZCgic3BhbiIpO2guaHRtbChsKSxmaihoLGUubGFiZWxTdHlsZSksaC5hdHRyKCJjbGFzcyIsYCR7dX0gJHtufWApLGZqKHMsZS5sYWJlbFN0eWxlKSxzLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLHMuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIikscy5zdHlsZSgibGluZS1oZWlnaHQiLCIxLjUiKSxzLnN0eWxlKCJtYXgtd2lkdGgiLHIrInB4Iikscy5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLHMuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksaSYmcy5hdHRyKCJjbGFzcyIsImxhYmVsQmtnIik7bGV0IGY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGYud2lkdGg9PT1yJiYocy5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikscy5zdHlsZSgid2hpdGUtc3BhY2UiLCJicmVhay1zcGFjZXMiKSxzLnN0eWxlKCJ3aWR0aCIscisicHgiKSxmPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLm5vZGUoKX1mdW5jdGlvbiB4OSh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGUqci0uMSsiZW0iKS5hdHRyKCJkeSIscisiZW0iKX1mdW5jdGlvbiBrN2UodCxlLHIpe2xldCBuPXQuYXBwZW5kKCJ0ZXh0IiksaT14OShuLDEsZSk7YjkoaSxyKTtsZXQgYT1pLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gbi5yZW1vdmUoKSxhfWZ1bmN0aW9uIGRqKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgidGV4dCIpLGk9eDkobiwxLGUpO2I5KGksW3tjb250ZW50OnIsdHlwZToibm9ybWFsIn1dKTtsZXQgYT1pLm5vZGUoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEmJm4ucmVtb3ZlKCksYX1mdW5jdGlvbiBFN2UodCxlLHIsbj0hMSl7bGV0IGE9ZS5hcHBlbmQoImciKSxzPWEuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuYXR0cigic3R5bGUiLCJzdHJva2U6IG5vbmUiKSxsPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsIi0xMC4xIiksdT0wO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1vKHA9Pms3ZShhLDEuMSxwKTw9dCwiY2hlY2tXaWR0aCIpLGQ9ZihoKT9baF06dWooaCxmKTtmb3IobGV0IHAgb2YgZCl7bGV0IG09eDkobCx1LDEuMSk7YjkobSxwKSx1Kyt9fWlmKG4pe2xldCBoPWwubm9kZSgpLmdldEJCb3goKSxmPTI7cmV0dXJuIHMuYXR0cigieCIsaC54LWYpLmF0dHIoInkiLGgueS1mKS5hdHRyKCJ3aWR0aCIsaC53aWR0aCsyKmYpLmF0dHIoImhlaWdodCIsaC5oZWlnaHQrMipmKSxhLm5vZGUoKX1lbHNlIHJldHVybiBsLm5vZGUoKX1mdW5jdGlvbiBiOSh0LGUpe3QudGV4dCgiIiksZS5mb3JFYWNoKChyLG4pPT57bGV0IGk9dC5hcHBlbmQoInRzcGFuIikuYXR0cigiZm9udC1zdHlsZSIsci50eXBlPT09ImVtIj8iaXRhbGljIjoibm9ybWFsIikuYXR0cigiY2xhc3MiLCJ0ZXh0LWlubmVyLXRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLHIudHlwZT09PSJzdHJvbmciPyJib2xkIjoibm9ybWFsIik7bj09PTA/aS50ZXh0KHIuY29udGVudCk6aS50ZXh0KCIgIityLmNvbnRlbnQpfSl9ZnVuY3Rpb24gdzkodCl7cmV0dXJuIHQucmVwbGFjZSgvZmFbYmtscnNdPzpmYS1bXHctXSsvZyxlPT5gPGkgY2xhc3M9JyR7ZS5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfXZhciBMaSxQbD1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTtwcigpO3V0KCk7bGooKTtocigpO2hqKCk7byhmaiwiYXBwbHlTdHlsZSIpO28oVDdlLCJhZGRIdG1sU3BhbiIpO28oeDksImNyZWF0ZVRzcGFuIik7byhrN2UsImNvbXB1dGVXaWR0aE9mVGV4dCIpO28oZGosImNvbXB1dGVEaW1lbnNpb25PZlRleHQiKTtvKEU3ZSwiY3JlYXRlRm9ybWF0dGVkVGV4dCIpO28oYjksInVwZGF0ZVRleHRDb250ZW50QW5kU3R5bGVzIik7byh3OSwicmVwbGFjZUljb25TdWJzdHJpbmciKTtMaT1vKGFzeW5jKHQsZT0iIix7c3R5bGU6cj0iIixpc1RpdGxlOm49ITEsY2xhc3NlczppPSIiLHVzZUh0bWxMYWJlbHM6YT0hMCxpc05vZGU6cz0hMCx3aWR0aDpsPTIwMCxhZGRTdmdCYWNrZ3JvdW5kOnU9ITF9PXt9LGgpPT57aWYoWS5kZWJ1ZygiWFlaIGNyZWF0ZVRleHQiLGUscixuLGksYSxzLCJhZGRTdmdCYWNrZ3JvdW5kOiAiLHUpLGEpe2xldCBmPW9qKGUsaCksZD13OShNYShmKSkscD1lLnJlcGxhY2UoL1xcXFwvZywiXFwiKSxtPXtpc05vZGU6cyxsYWJlbDp5aShlKT9wOmQsbGFiZWxTdHlsZTpyLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBhd2FpdCBUN2UodCxtLGwsaSx1KX1lbHNle2xldCBmPWUucmVwbGFjZSgvPGJyXHMqXC8/Pi9nLCI8YnIvPiIpLGQ9c2ooZi5yZXBsYWNlKCI8YnI+IiwiPGJyLz4iKSxoKSxwPUU3ZShsLHQsZCxlP3U6ITEpO2lmKHMpey9zdHJva2U6Ly5leGVjKHIpJiYocj1yLnJlcGxhY2UoInN0cm9rZToiLCJsaW5lQ29sb3I6IikpO2xldCBtPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2NvbG9yOi9nLCJmaWxsOiIpO1ZlKHApLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCBtPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2JhY2tncm91bmQ6L2csImZpbGw6Iik7VmUocCkuc2VsZWN0KCJyZWN0IikuYXR0cigic3R5bGUiLG0ucmVwbGFjZSgvYmFja2dyb3VuZDovZywiZmlsbDoiKSk7bGV0IGc9ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvY29sb3I6L2csImZpbGw6Iik7VmUocCkuc2VsZWN0KCJ0ZXh0IikuYXR0cigic3R5bGUiLGcpfXJldHVybiBwfX0sImNyZWF0ZVRleHQiKX0pO2Z1bmN0aW9uIFd0KHQpe2xldCBlPXQubWFwKChyLG4pPT5gJHtuPT09MD8iTSI6IkwifSR7ci54fSwke3IueX1gKTtyZXR1cm4gZS5wdXNoKCJaIiksZS5qb2luKCIgIil9ZnVuY3Rpb24gV28odCxlLHIsbixpLGEpe2xldCBzPVtdLHU9ci10LGg9bi1lLGY9dS9hLGQ9MipNYXRoLlBJL2YscD1lK2gvMjtmb3IobGV0IG09MDttPD01MDttKyspe2xldCBnPW0vNTAseT10K2cqdSx2PXAraSpNYXRoLnNpbihkKih5LXQpKTtzLnB1c2goe3g6eSx5OnZ9KX1yZXR1cm4gc31mdW5jdGlvbiBPNSh0LGUscixuLGksYSl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc312YXIgc3QsSTUsamUsb3QsT3Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQbCgpO1Z0KCk7cHIoKTticygpO2ZyKCk7aHIoKTtzdD1vKGFzeW5jKHQsZSxyKT0+e2xldCBuLGk9ZS51c2VIdG1sTGFiZWxzfHx4cihwZSgpPy5odG1sTGFiZWxzKTtyP249cjpuPSJub2RlIGRlZmF1bHQiO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixHbihlLmxhYmVsU3R5bGUpKSxsO2UubGFiZWw9PT12b2lkIDA/bD0iIjpsPXR5cGVvZiBlLmxhYmVsPT0ic3RyaW5nIj9lLmxhYmVsOmUubGFiZWxbMF07bGV0IHU9YXdhaXQgTGkocyxrcihNYShsKSxwZSgpKSx7dXNlSHRtbExhYmVsczppLHdpZHRoOmUud2lkdGh8fHBlKCkuZmxvd2NoYXJ0Py53cmFwcGluZ1dpZHRoLGNzc0NsYXNzZXM6Im1hcmtkb3duLW5vZGUtbGFiZWwiLHN0eWxlOmUubGFiZWxTdHlsZSxhZGRTdmdCYWNrZ3JvdW5kOiEhZS5pY29ufHwhIWUuaW1nfSksaD11LmdldEJCb3goKSxmPShlPy5wYWRkaW5nPz8wKS8yO2lmKGkpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1WZSh1KSxtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9cGUoKS5mb250U2l6ZT9wZSgpLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLHc9NSxbXz11ci5mb250U2l6ZV09SG8oYiksVD1fKncrInB4Ijt5LnN0eWxlLm1pbldpZHRoPVQseS5zdHlsZS5tYXhXaWR0aD1UfWVsc2UgeS5zdHlsZS53aWR0aD0iMTAwJSI7dih5KX1vKHgsInNldHVwSW1hZ2UiKSxzZXRUaW1lb3V0KCgpPT57eS5jb21wbGV0ZSYmeCgpfSkseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIseCkseS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KX0pKSl9aD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHAuYXR0cigid2lkdGgiLGgud2lkdGgpLHAuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9cmV0dXJuIGk/cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrLWguaGVpZ2h0LzIrIikiKTpzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiKy1oLmhlaWdodC8yKyIpIiksZS5jZW50ZXJMYWJlbCYmcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrLWguaGVpZ2h0LzIrIikiKSxzLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHtzaGFwZVN2ZzphLGJib3g6aCxoYWxmUGFkZGluZzpmLGxhYmVsOnN9fSwibGFiZWxIZWxwZXIiKSxJNT1vKGFzeW5jKHQsZSxyKT0+e2xldCBuPXIudXNlSHRtbExhYmVsc3x8eHIocGUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSxpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixyLmxhYmVsU3R5bGV8fCIiKSxhPWF3YWl0IExpKGksa3IoTWEoZSkscGUoKSkse3VzZUh0bWxMYWJlbHM6bix3aWR0aDpyLndpZHRofHxwZSgpPy5mbG93Y2hhcnQ/LndyYXBwaW5nV2lkdGgsc3R5bGU6ci5sYWJlbFN0eWxlLGFkZFN2Z0JhY2tncm91bmQ6ISFyLmljb258fCEhci5pbWd9KSxzPWEuZ2V0QkJveCgpLGw9ci5wYWRkaW5nLzI7aWYoeHIocGUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSl7bGV0IHU9YS5jaGlsZHJlblswXSxoPVZlKGEpO3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIixzLndpZHRoKSxoLmF0dHIoImhlaWdodCIscy5oZWlnaHQpfXJldHVybiBuP2kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIik6aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistcy5oZWlnaHQvMisiKSIpLHIuY2VudGVyTGFiZWwmJmkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIiksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6dCxiYm94OnMsaGFsZlBhZGRpbmc6bCxsYWJlbDppfX0sImluc2VydExhYmVsIiksamU9bygodCxlKT0+e2xldCByPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9LCJ1cGRhdGVOb2RlQm91bmRzIiksb3Q9bygodCxlKT0+KHQubG9vaz09PSJoYW5kRHJhd24iPyJyb3VnaC1ub2RlIjoibm9kZSIpKyIgIit0LmNzc0NsYXNzZXMrIiAiKyhlfHwiIiksImdldE5vZGVDbGFzc2VzIik7byhXdCwiY3JlYXRlUGF0aEZyb21Qb2ludHMiKTtvKFdvLCJnZW5lcmF0ZUZ1bGxTaW5lV2F2ZVBvaW50cyIpO28oTzUsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIil9KTtmdW5jdGlvbiBTN2UodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9dmFyIHBqLG1qPU0oKCk9PnsidXNlIHN0cmljdCI7byhTN2UsImludGVyc2VjdE5vZGUiKTtwaj1TN2V9KTtmdW5jdGlvbiBDN2UodCxlLHIsbil7dmFyIGk9dC54LGE9dC55LHM9aS1uLngsbD1hLW4ueSx1PU1hdGguc3FydChlKmUqbCpsK3IqcipzKnMpLGg9TWF0aC5hYnMoZSpyKnMvdSk7bi54PGkmJihoPS1oKTt2YXIgZj1NYXRoLmFicyhlKnIqbC91KTtyZXR1cm4gbi55PGEmJihmPS1mKSx7eDppK2gseTphK2Z9fXZhciBQNSxUOT1NKCgpPT57InVzZSBzdHJpY3QiO28oQzdlLCJpbnRlcnNlY3RFbGxpcHNlIik7UDU9QzdlfSk7ZnVuY3Rpb24gQTdlKHQsZSxyKXtyZXR1cm4gUDUodCxlLGUscil9dmFyIGdqLHlqPU0oKCk9PnsidXNlIHN0cmljdCI7VDkoKTtvKEE3ZSwiaW50ZXJzZWN0Q2lyY2xlIik7Z2o9QTdlfSk7ZnVuY3Rpb24gXzdlKHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2LHgsYjtpZihpPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LHA9aSpyLngrcypyLnkrdSxtPWkqbi54K3Mqbi55K3UsIShwIT09MCYmbSE9PTAmJnZqKHAsbSkpJiYoYT1uLnktci55LGw9ci54LW4ueCxoPW4ueCpyLnktci54Km4ueSxmPWEqdC54K2wqdC55K2gsZD1hKmUueCtsKmUueStoLCEoZiE9PTAmJmQhPT0wJiZ2aihmLGQpKSYmKGc9aSpsLWEqcyxnIT09MCkpKXJldHVybiB5PU1hdGguYWJzKGcvMiksdj1zKmgtbCp1LHg9djwwPyh2LXkpL2c6KHYreSkvZyx2PWEqdS1pKmgsYj12PDA/KHYteSkvZzoodit5KS9nLHt4LHk6Yn19ZnVuY3Rpb24gdmoodCxlKXtyZXR1cm4gdCplPjB9dmFyIHhqLGJqPU0oKCk9PnsidXNlIHN0cmljdCI7byhfN2UsImludGVyc2VjdExpbmUiKTtvKHZqLCJzYW1lU2lnbiIpO3hqPV83ZX0pO2Z1bmN0aW9uIEw3ZSh0LGUscil7bGV0IG49dC54LGk9dC55LGE9W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIGUuZm9yRWFjaD09ImZ1bmN0aW9uIj9lLmZvckVhY2goZnVuY3Rpb24oZil7cz1NYXRoLm1pbihzLGYueCksbD1NYXRoLm1pbihsLGYueSl9KToocz1NYXRoLm1pbihzLGUueCksbD1NYXRoLm1pbihsLGUueSkpO2xldCB1PW4tdC53aWR0aC8yLXMsaD1pLXQuaGVpZ2h0LzItbDtmb3IobGV0IGY9MDtmPGUubGVuZ3RoO2YrKyl7bGV0IGQ9ZVtmXSxwPWVbZjxlLmxlbmd0aC0xP2YrMTowXSxtPXhqKHQscix7eDp1K2QueCx5OmgrZC55fSx7eDp1K3AueCx5OmgrcC55fSk7bSYmYS5wdXNoKG0pfXJldHVybiBhLmxlbmd0aD8oYS5sZW5ndGg+MSYmYS5zb3J0KGZ1bmN0aW9uKGYsZCl7bGV0IHA9Zi54LXIueCxtPWYueS1yLnksZz1NYXRoLnNxcnQocCpwK20qbSkseT1kLngtci54LHY9ZC55LXIueSx4PU1hdGguc3FydCh5Knkrdip2KTtyZXR1cm4gZzx4Py0xOmc9PT14PzA6MX0pLGFbMF0pOnR9dmFyIHdqLFRqPU0oKCk9PnsidXNlIHN0cmljdCI7YmooKTtvKEw3ZSwiaW50ZXJzZWN0UG9seWdvbiIpO3dqPUw3ZX0pO3ZhciBEN2UsSGgsazk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEN2U9bygodCxlKT0+e3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yLHUsaDtyZXR1cm4gTWF0aC5hYnMoYSkqcz5NYXRoLmFicyhpKSpsPyhhPDAmJihsPS1sKSx1PWE9PT0wPzA6bCppL2EsaD1sKTooaTwwJiYocz0tcyksdT1zLGg9aT09PTA/MDpzKmEvaSkse3g6cit1LHk6bitofX0sImludGVyc2VjdFJlY3QiKSxIaD1EN2V9KTt2YXIgWWUscXQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttaigpO3lqKCk7VDkoKTtUaigpO2s5KCk7WWU9e25vZGU6cGosY2lyY2xlOmdqLGVsbGlwc2U6UDUscG9seWdvbjp3aixyZWN0OkhofX0pO3ZhciBraixTYyxON2UsWmUsS2UsWHQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2tqPW8odD0+e2xldHtoYW5kRHJhd25TZWVkOmV9PXBlKCk7cmV0dXJue2ZpbGw6dCxoYWNodXJlQW5nbGU6MTIwLGhhY2h1cmVHYXA6NCxmaWxsV2VpZ2h0OjIscm91Z2huZXNzOi43LHN0cm9rZTp0LHNlZWQ6ZX19LCJzb2xpZFN0YXRlRmlsbCIpLFNjPW8odD0+e2xldCBlPU43ZShbLi4udC5jc3NDb21waWxlZFN0eWxlc3x8W10sLi4udC5jc3NTdHlsZXN8fFtdXSk7cmV0dXJue3N0eWxlc01hcDplLHN0eWxlc0FycmF5OlsuLi5lXX19LCJjb21waWxlU3R5bGVzIiksTjdlPW8odD0+e2xldCBlPW5ldyBNYXA7cmV0dXJuIHQuZm9yRWFjaChyPT57bGV0W24saV09ci5zcGxpdCgiOiIpO2Uuc2V0KG4udHJpbSgpLGk/LnRyaW0oKSl9KSxlfSwic3R5bGVzMk1hcCIpLFplPW8odD0+e2xldHtzdHlsZXNBcnJheTplfT1TYyh0KSxyPVtdLG49W10saT1bXSxhPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBsPXNbMF07bD09PSJjb2xvciJ8fGw9PT0iZm9udC1zaXplInx8bD09PSJmb250LWZhbWlseSJ8fGw9PT0iZm9udC13ZWlnaHQifHxsPT09ImZvbnQtc3R5bGUifHxsPT09InRleHQtZGVjb3JhdGlvbiJ8fGw9PT0idGV4dC1hbGlnbiJ8fGw9PT0idGV4dC10cmFuc2Zvcm0ifHxsPT09ImxpbmUtaGVpZ2h0Inx8bD09PSJsZXR0ZXItc3BhY2luZyJ8fGw9PT0id29yZC1zcGFjaW5nInx8bD09PSJ0ZXh0LXNoYWRvdyJ8fGw9PT0idGV4dC1vdmVyZmxvdyJ8fGw9PT0id2hpdGUtc3BhY2UifHxsPT09IndvcmQtd3JhcCJ8fGw9PT0id29yZC1icmVhayJ8fGw9PT0ib3ZlcmZsb3ctd3JhcCJ8fGw9PT0iaHlwaGVucyI/ci5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpOihuLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IiksbC5pbmNsdWRlcygic3Ryb2tlIikmJmkucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSxsPT09ImZpbGwiJiZhLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IikpfSkse2xhYmVsU3R5bGVzOnIuam9pbigiOyIpLG5vZGVTdHlsZXM6bi5qb2luKCI7Iiksc3R5bGVzQXJyYXk6ZSxib3JkZXJTdHlsZXM6aSxiYWNrZ3JvdW5kU3R5bGVzOmF9fSwic3R5bGVzMlN0cmluZyIpLEtlPW8oKHQsZSk9PntsZXR7dGhlbWVWYXJpYWJsZXM6cixoYW5kRHJhd25TZWVkOm59PXBlKCkse25vZGVCb3JkZXI6aSxtYWluQmtnOmF9PXIse3N0eWxlc01hcDpzfT1TYyh0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7cm91Z2huZXNzOi43LGZpbGw6cy5nZXQoImZpbGwiKXx8YSxmaWxsU3R5bGU6ImhhY2h1cmUiLGZpbGxXZWlnaHQ6NCxoYWNodXJlR2FwOjUuMixzdHJva2U6cy5nZXQoInN0cm9rZSIpfHxpLHNlZWQ6bixzdHJva2VXaWR0aDpzLmdldCgic3Ryb2tlLXdpZHRoIik/LnJlcGxhY2UoInB4IiwiIil8fDEuMyxmaWxsTGluZURhc2g6WzAsMF19LGUpfSwidXNlck5vZGVPdmVycmlkZXMiKX0pO2Z1bmN0aW9uIEU5KHQsZSxyKXtpZih0JiZ0Lmxlbmd0aCl7bGV0W24saV09ZSxhPU1hdGguUEkvMTgwKnIscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2ZvcihsZXQgdSBvZiB0KXtsZXRbaCxmXT11O3VbMF09KGgtbikqcy0oZi1pKSpsK24sdVsxXT0oaC1uKSpsKyhmLWkpKnMraX19fWZ1bmN0aW9uIFI3ZSh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV19ZnVuY3Rpb24gTTdlKHQsZSxyLG49MSl7bGV0IGk9cixhPU1hdGgubWF4KGUsLjEpLHM9dFswXSYmdFswXVswXSYmdHlwZW9mIHRbMF1bMF09PSJudW1iZXIiP1t0XTp0LGw9WzAsMF07aWYoaSlmb3IobGV0IGggb2YgcylFOShoLGwsaSk7bGV0IHU9ZnVuY3Rpb24oaCxmLGQpe2xldCBwPVtdO2ZvcihsZXQgYiBvZiBoKXtsZXQgdz1bLi4uYl07UjdlKHdbMF0sd1t3Lmxlbmd0aC0xXSl8fHcucHVzaChbd1swXVswXSx3WzBdWzFdXSksdy5sZW5ndGg+MiYmcC5wdXNoKHcpfWxldCBtPVtdO2Y9TWF0aC5tYXgoZiwuMSk7bGV0IGc9W107Zm9yKGxldCBiIG9mIHApZm9yKGxldCB3PTA7dzxiLmxlbmd0aC0xO3crKyl7bGV0IF89Ylt3XSxUPWJbdysxXTtpZihfWzFdIT09VFsxXSl7bGV0IEU9TWF0aC5taW4oX1sxXSxUWzFdKTtnLnB1c2goe3ltaW46RSx5bWF4Ok1hdGgubWF4KF9bMV0sVFsxXSkseDpFPT09X1sxXT9fWzBdOlRbMF0saXNsb3BlOihUWzBdLV9bMF0pLyhUWzFdLV9bMV0pfSl9fWlmKGcuc29ydCgoYix3KT0+Yi55bWluPHcueW1pbj8tMTpiLnltaW4+dy55bWluPzE6Yi54PHcueD8tMTpiLng+dy54PzE6Yi55bWF4PT09dy55bWF4PzA6KGIueW1heC13LnltYXgpL01hdGguYWJzKGIueW1heC13LnltYXgpKSwhZy5sZW5ndGgpcmV0dXJuIG07bGV0IHk9W10sdj1nWzBdLnltaW4seD0wO2Zvcig7eS5sZW5ndGh8fGcubGVuZ3RoOyl7aWYoZy5sZW5ndGgpe2xldCBiPS0xO2ZvcihsZXQgdz0wO3c8Zy5sZW5ndGgmJiEoZ1t3XS55bWluPnYpO3crKyliPXc7Zy5zcGxpY2UoMCxiKzEpLmZvckVhY2godz0+e3kucHVzaCh7czp2LGVkZ2U6d30pfSl9aWYoeT15LmZpbHRlcihiPT4hKGIuZWRnZS55bWF4PD12KSkseS5zb3J0KChiLHcpPT5iLmVkZ2UueD09PXcuZWRnZS54PzA6KGIuZWRnZS54LXcuZWRnZS54KS9NYXRoLmFicyhiLmVkZ2UueC13LmVkZ2UueCkpLChkIT09MXx8eCVmPT0wKSYmeS5sZW5ndGg+MSlmb3IobGV0IGI9MDtiPHkubGVuZ3RoO2IrPTIpe2xldCB3PWIrMTtpZih3Pj15Lmxlbmd0aClicmVhaztsZXQgXz15W2JdLmVkZ2UsVD15W3ddLmVkZ2U7bS5wdXNoKFtbTWF0aC5yb3VuZChfLngpLHZdLFtNYXRoLnJvdW5kKFQueCksdl1dKX12Kz1kLHkuZm9yRWFjaChiPT57Yi5lZGdlLng9Yi5lZGdlLngrZCpiLmVkZ2UuaXNsb3BlfSkseCsrfXJldHVybiBtfShzLGEsbik7aWYoaSl7Zm9yKGxldCBoIG9mIHMpRTkoaCxsLC1pKTsoZnVuY3Rpb24oaCxmLGQpe2xldCBwPVtdO2guZm9yRWFjaChtPT5wLnB1c2goLi4ubSkpLEU5KHAsZixkKX0pKHUsbCwtaSl9cmV0dXJuIHV9ZnVuY3Rpb24gUnYodCxlKXt2YXIgcjtsZXQgbj1lLmhhY2h1cmVBbmdsZSs5MCxpPWUuaGFjaHVyZUdhcDtpPDAmJihpPTQqZS5zdHJva2VXaWR0aCksaT1NYXRoLnJvdW5kKE1hdGgubWF4KGksLjEpKTtsZXQgYT0xO3JldHVybiBlLnJvdWdobmVzcz49MSYmKCgocj1lLnJhbmRvbWl6ZXIpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5uZXh0KCkpfHxNYXRoLnJhbmRvbSgpKT4uNyYmKGE9aSksTTdlKHQsaSxuLGF8fDEpfWZ1bmN0aW9uIFc1KHQpe2xldCBlPXRbMF0scj10WzFdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZVswXS1yWzBdLDIpK01hdGgucG93KGVbMV0tclsxXSwyKSl9ZnVuY3Rpb24gQzkodCxlKXtyZXR1cm4gdC50eXBlPT09ZX1mdW5jdGlvbiBHOSh0KXtsZXQgZT1bXSxyPWZ1bmN0aW9uKHMpe2xldCBsPW5ldyBBcnJheTtmb3IoO3MhPT0iIjspaWYocy5tYXRjaCgvXihbIFx0XHJcbixdKykvKSlzPXMuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2UgaWYocy5tYXRjaCgvXihbYUFjQ2hIbExtTXFRc1N0VHZWelpdKS8pKWxbbC5sZW5ndGhdPXt0eXBlOkk3ZSx0ZXh0OlJlZ0V4cC4kMX0scz1zLnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKTtlbHNle2lmKCFzLm1hdGNoKC9eKChbLStdP1swLTldKyhcLlswLTldKik/fFstK10/XC5bMC05XSspKFtlRV1bLStdP1swLTldKyk/KS8pKXJldHVybltdO2xbbC5sZW5ndGhdPXt0eXBlOlM5LHRleHQ6YCR7cGFyc2VGbG9hdChSZWdFeHAuJDEpfWB9LHM9cy5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCl9cmV0dXJuIGxbbC5sZW5ndGhdPXt0eXBlOkVqLHRleHQ6IiJ9LGx9KHQpLG49IkJPRCIsaT0wLGE9cltpXTtmb3IoOyFDOShhLEVqKTspe2xldCBzPTAsbD1bXTtpZihuPT09IkJPRCIpe2lmKGEudGV4dCE9PSJNIiYmYS50ZXh0IT09Im0iKXJldHVybiBHOSgiTTAsMCIrdCk7aSsrLHM9QjVbYS50ZXh0XSxuPWEudGV4dH1lbHNlIEM5KGEsUzkpP3M9QjVbbl06KGkrKyxzPUI1W2EudGV4dF0sbj1hLnRleHQpO2lmKCEoaStzPHIubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggZGF0YSBlbmRlZCBzaG9ydCIpO2ZvcihsZXQgdT1pO3U8aStzO3UrKyl7bGV0IGg9clt1XTtpZighQzkoaCxTOSkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbSBub3QgYSBudW1iZXI6ICIrbisiLCIraC50ZXh0KTtsW2wubGVuZ3RoXT0raC50ZXh0fWlmKHR5cGVvZiBCNVtuXSE9Im51bWJlciIpdGhyb3cgbmV3IEVycm9yKCJCYWQgc2VnbWVudDogIituKTt7bGV0IHU9e2tleTpuLGRhdGE6bH07ZS5wdXNoKHUpLGkrPXMsYT1yW2ldLG49PT0iTSImJihuPSJMIiksbj09PSJtIiYmKG49ImwiKX19cmV0dXJuIGV9ZnVuY3Rpb24gUmoodCl7bGV0IGU9MCxyPTAsbj0wLGk9MCxhPVtdO2ZvcihsZXR7a2V5OnMsZGF0YTpsfW9mIHQpc3dpdGNoKHMpe2Nhc2UiTSI6YS5wdXNoKHtrZXk6Ik0iLGRhdGE6Wy4uLmxdfSksW2Uscl09bCxbbixpXT1sO2JyZWFrO2Nhc2UibSI6ZSs9bFswXSxyKz1sWzFdLGEucHVzaCh7a2V5OiJNIixkYXRhOltlLHJdfSksbj1lLGk9cjticmVhaztjYXNlIkwiOmEucHVzaCh7a2V5OiJMIixkYXRhOlsuLi5sXX0pLFtlLHJdPWw7YnJlYWs7Y2FzZSJsIjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6IkwiLGRhdGE6W2Uscl19KTticmVhaztjYXNlIkMiOmEucHVzaCh7a2V5OiJDIixkYXRhOlsuLi5sXX0pLGU9bFs0XSxyPWxbNV07YnJlYWs7Y2FzZSJjIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiQyIsZGF0YTp1fSksZT11WzRdLHI9dVs1XTticmVha31jYXNlIlEiOmEucHVzaCh7a2V5OiJRIixkYXRhOlsuLi5sXX0pLGU9bFsyXSxyPWxbM107YnJlYWs7Y2FzZSJxIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiUSIsZGF0YTp1fSksZT11WzJdLHI9dVszXTticmVha31jYXNlIkEiOmEucHVzaCh7a2V5OiJBIixkYXRhOlsuLi5sXX0pLGU9bFs1XSxyPWxbNl07YnJlYWs7Y2FzZSJhIjplKz1sWzVdLHIrPWxbNl0sYS5wdXNoKHtrZXk6IkEiLGRhdGE6W2xbMF0sbFsxXSxsWzJdLGxbM10sbFs0XSxlLHJdfSk7YnJlYWs7Y2FzZSJIIjphLnB1c2goe2tleToiSCIsZGF0YTpbLi4ubF19KSxlPWxbMF07YnJlYWs7Y2FzZSJoIjplKz1sWzBdLGEucHVzaCh7a2V5OiJIIixkYXRhOltlXX0pO2JyZWFrO2Nhc2UiViI6YS5wdXNoKHtrZXk6IlYiLGRhdGE6Wy4uLmxdfSkscj1sWzBdO2JyZWFrO2Nhc2UidiI6cis9bFswXSxhLnB1c2goe2tleToiViIsZGF0YTpbcl19KTticmVhaztjYXNlIlMiOmEucHVzaCh7a2V5OiJTIixkYXRhOlsuLi5sXX0pLGU9bFsyXSxyPWxbM107YnJlYWs7Y2FzZSJzIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiUyIsZGF0YTp1fSksZT11WzJdLHI9dVszXTticmVha31jYXNlIlQiOmEucHVzaCh7a2V5OiJUIixkYXRhOlsuLi5sXX0pLGU9bFswXSxyPWxbMV07YnJlYWs7Y2FzZSJ0IjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6IlQiLGRhdGE6W2Uscl19KTticmVhaztjYXNlIloiOmNhc2UieiI6YS5wdXNoKHtrZXk6IloiLGRhdGE6W119KSxlPW4scj1pfXJldHVybiBhfWZ1bmN0aW9uIE1qKHQpe2xldCBlPVtdLHI9IiIsbj0wLGk9MCxhPTAscz0wLGw9MCx1PTA7Zm9yKGxldHtrZXk6aCxkYXRhOmZ9b2YgdCl7c3dpdGNoKGgpe2Nhc2UiTSI6ZS5wdXNoKHtrZXk6Ik0iLGRhdGE6Wy4uLmZdfSksW24saV09ZixbYSxzXT1mO2JyZWFrO2Nhc2UiQyI6ZS5wdXNoKHtrZXk6IkMiLGRhdGE6Wy4uLmZdfSksbj1mWzRdLGk9Zls1XSxsPWZbMl0sdT1mWzNdO2JyZWFrO2Nhc2UiTCI6ZS5wdXNoKHtrZXk6IkwiLGRhdGE6Wy4uLmZdfSksW24saV09ZjticmVhaztjYXNlIkgiOm49ZlswXSxlLnB1c2goe2tleToiTCIsZGF0YTpbbixpXX0pO2JyZWFrO2Nhc2UiViI6aT1mWzBdLGUucHVzaCh7a2V5OiJMIixkYXRhOltuLGldfSk7YnJlYWs7Y2FzZSJTIjp7bGV0IGQ9MCxwPTA7cj09PSJDInx8cj09PSJTIj8oZD1uKyhuLWwpLHA9aSsoaS11KSk6KGQ9bixwPWkpLGUucHVzaCh7a2V5OiJDIixkYXRhOltkLHAsLi4uZl19KSxsPWZbMF0sdT1mWzFdLG49ZlsyXSxpPWZbM107YnJlYWt9Y2FzZSJUIjp7bGV0W2QscF09ZixtPTAsZz0wO3I9PT0iUSJ8fHI9PT0iVCI/KG09bisobi1sKSxnPWkrKGktdSkpOihtPW4sZz1pKTtsZXQgeT1uKzIqKG0tbikvMyx2PWkrMiooZy1pKS8zLHg9ZCsyKihtLWQpLzMsYj1wKzIqKGctcCkvMztlLnB1c2goe2tleToiQyIsZGF0YTpbeSx2LHgsYixkLHBdfSksbD1tLHU9ZyxuPWQsaT1wO2JyZWFrfWNhc2UiUSI6e2xldFtkLHAsbSxnXT1mLHk9bisyKihkLW4pLzMsdj1pKzIqKHAtaSkvMyx4PW0rMiooZC1tKS8zLGI9ZysyKihwLWcpLzM7ZS5wdXNoKHtrZXk6IkMiLGRhdGE6W3ksdix4LGIsbSxnXX0pLGw9ZCx1PXAsbj1tLGk9ZzticmVha31jYXNlIkEiOntsZXQgZD1NYXRoLmFicyhmWzBdKSxwPU1hdGguYWJzKGZbMV0pLG09ZlsyXSxnPWZbM10seT1mWzRdLHY9Zls1XSx4PWZbNl07ZD09PTB8fHA9PT0wPyhlLnB1c2goe2tleToiQyIsZGF0YTpbbixpLHYseCx2LHhdfSksbj12LGk9eCk6KG4hPT12fHxpIT09eCkmJihJaihuLGksdix4LGQscCxtLGcseSkuZm9yRWFjaChmdW5jdGlvbihiKXtlLnB1c2goe2tleToiQyIsZGF0YTpifSl9KSxuPXYsaT14KTticmVha31jYXNlIloiOmUucHVzaCh7a2V5OiJaIixkYXRhOltdfSksbj1hLGk9c31yPWh9cmV0dXJuIGV9ZnVuY3Rpb24gTHYodCxlLHIpe3JldHVyblt0Kk1hdGguY29zKHIpLWUqTWF0aC5zaW4ociksdCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpXX1mdW5jdGlvbiBJaih0LGUscixuLGksYSxzLGwsdSxoKXtsZXQgZj0oZD1zLE1hdGguUEkqZC8xODApO3ZhciBkO2xldCBwPVtdLG09MCxnPTAseT0wLHY9MDtpZihoKVttLGcseSx2XT1oO2Vsc2V7W3QsZV09THYodCxlLC1mKSxbcixuXT1MdihyLG4sLWYpO2xldCBSPSh0LXIpLzIsQz0oZS1uKS8yLE89UipSLyhpKmkpK0MqQy8oYSphKTtPPjEmJihPPU1hdGguc3FydChPKSxpKj1PLGEqPU8pO2xldCBOPWkqaSxQPWEqYSxGPU4qUC1OKkMqQy1QKlIqUixCPU4qQypDK1AqUipSLEc9KGw9PT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicyhGL0IpKTt5PUcqaSpDL2ErKHQrcikvMix2PUcqLWEqUi9pKyhlK24pLzIsbT1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKGUtdikvYSkudG9GaXhlZCg5KSkpLGc9TWF0aC5hc2luKHBhcnNlRmxvYXQoKChuLXYpL2EpLnRvRml4ZWQoOSkpKSx0PHkmJihtPU1hdGguUEktbSkscjx5JiYoZz1NYXRoLlBJLWcpLG08MCYmKG09MipNYXRoLlBJK20pLGc8MCYmKGc9MipNYXRoLlBJK2cpLHUmJm0+ZyYmKG0tPTIqTWF0aC5QSSksIXUmJmc+bSYmKGctPTIqTWF0aC5QSSl9bGV0IHg9Zy1tO2lmKE1hdGguYWJzKHgpPjEyMCpNYXRoLlBJLzE4MCl7bGV0IFI9ZyxDPXIsTz1uO2c9dSYmZz5tP20rMTIwKk1hdGguUEkvMTgwKjE6bSsxMjAqTWF0aC5QSS8xODAqLTEscD1JaihyPXkraSpNYXRoLmNvcyhnKSxuPXYrYSpNYXRoLnNpbihnKSxDLE8saSxhLHMsMCx1LFtnLFIseSx2XSl9eD1nLW07bGV0IGI9TWF0aC5jb3MobSksdz1NYXRoLnNpbihtKSxfPU1hdGguY29zKGcpLFQ9TWF0aC5zaW4oZyksRT1NYXRoLnRhbih4LzQpLEw9NC8zKmkqRSxTPTQvMyphKkUsQT1bdCxlXSxJPVt0K0wqdyxlLVMqYl0sRD1bcitMKlQsbi1TKl9dLGs9W3Isbl07aWYoSVswXT0yKkFbMF0tSVswXSxJWzFdPTIqQVsxXS1JWzFdLGgpcmV0dXJuW0ksRCxrXS5jb25jYXQocCk7e3A9W0ksRCxrXS5jb25jYXQocCk7bGV0IFI9W107Zm9yKGxldCBDPTA7QzxwLmxlbmd0aDtDKz0zKXtsZXQgTz1MdihwW0NdWzBdLHBbQ11bMV0sZiksTj1MdihwW0MrMV1bMF0scFtDKzFdWzFdLGYpLFA9THYocFtDKzJdWzBdLHBbQysyXVsxXSxmKTtSLnB1c2goW09bMF0sT1sxXSxOWzBdLE5bMV0sUFswXSxQWzFdXSl9cmV0dXJuIFJ9fWZ1bmN0aW9uIE9qKHQsZSxyLG4saSl7cmV0dXJue3R5cGU6InBhdGgiLG9wczpXaCh0LGUscixuLGkpfX1mdW5jdGlvbiBHNSh0LGUscil7bGV0IG49KHR8fFtdKS5sZW5ndGg7aWYobj4yKXtsZXQgaT1bXTtmb3IobGV0IGE9MDthPG4tMTthKyspaS5wdXNoKC4uLldoKHRbYV1bMF0sdFthXVsxXSx0W2ErMV1bMF0sdFthKzFdWzFdLHIpKTtyZXR1cm4gZSYmaS5wdXNoKC4uLldoKHRbbi0xXVswXSx0W24tMV1bMV0sdFswXVswXSx0WzBdWzFdLHIpKSx7dHlwZToicGF0aCIsb3BzOml9fXJldHVybiBuPT09Mj9Paih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHIpOnt0eXBlOiJwYXRoIixvcHM6W119fWZ1bmN0aW9uIFA3ZSh0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLHMpe3JldHVybiBHNShhLCEwLHMpfShbW3QsZV0sW3QrcixlXSxbdCtyLGUrbl0sW3QsZStuXV0saSl9ZnVuY3Rpb24gU2oodCxlKXtpZih0Lmxlbmd0aCl7bGV0IHI9dHlwZW9mIHRbMF1bMF09PSJudW1iZXIiP1t0XTp0LG49RjUoclswXSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxpPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOkY1KHJbMF0sMS41KigxKy4yMiplLnJvdWdobmVzcyksX2ooZSkpO2ZvcihsZXQgYT0xO2E8ci5sZW5ndGg7YSsrKXtsZXQgcz1yW2FdO2lmKHMubGVuZ3RoKXtsZXQgbD1GNShzLDEqKDErLjIqZS5yb3VnaG5lc3MpLGUpLHU9ZS5kaXNhYmxlTXVsdGlTdHJva2U/W106RjUocywxLjUqKDErLjIyKmUucm91Z2huZXNzKSxfaihlKSk7Zm9yKGxldCBoIG9mIGwpaC5vcCE9PSJtb3ZlIiYmbi5wdXNoKGgpO2ZvcihsZXQgaCBvZiB1KWgub3AhPT0ibW92ZSImJmkucHVzaChoKX19cmV0dXJue3R5cGU6InBhdGgiLG9wczpuLmNvbmNhdChpKX19cmV0dXJue3R5cGU6InBhdGgiLG9wczpbXX19ZnVuY3Rpb24gUGoodCxlLHIpe2xldCBuPU1hdGguc3FydCgyKk1hdGguUEkqTWF0aC5zcXJ0KChNYXRoLnBvdyh0LzIsMikrTWF0aC5wb3coZS8yLDIpKS8yKSksaT1NYXRoLmNlaWwoTWF0aC5tYXgoci5jdXJ2ZVN0ZXBDb3VudCxyLmN1cnZlU3RlcENvdW50L01hdGguc3FydCgyMDApKm4pKSxhPTIqTWF0aC5QSS9pLHM9TWF0aC5hYnModC8yKSxsPU1hdGguYWJzKGUvMiksdT0xLXIuY3VydmVGaXR0aW5nO3JldHVybiBzKz1ucihzKnUsciksbCs9bnIobCp1LHIpLHtpbmNyZW1lbnQ6YSxyeDpzLHJ5Omx9fWZ1bmN0aW9uIE85KHQsZSxyLG4pe2xldFtpLGFdPUxqKG4uaW5jcmVtZW50LHQsZSxuLnJ4LG4ucnksMSxuLmluY3JlbWVudCpWNSguMSxWNSguNCwxLHIpLHIpLHIpLHM9VTUoaSxudWxsLHIpO2lmKCFyLmRpc2FibGVNdWx0aVN0cm9rZSYmci5yb3VnaG5lc3MhPT0wKXtsZXRbbF09TGoobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLjUsMCxyKSx1PVU1KGwsbnVsbCxyKTtzPXMuY29uY2F0KHUpfXJldHVybntlc3RpbWF0ZWRQb2ludHM6YSxvcHNldDp7dHlwZToicGF0aCIsb3BzOnN9fX1mdW5jdGlvbiBDaih0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9dCxmPWUsZD1NYXRoLmFicyhyLzIpLHA9TWF0aC5hYnMobi8yKTtkKz1uciguMDEqZCx1KSxwKz1uciguMDEqcCx1KTtsZXQgbT1pLGc9YTtmb3IoO208MDspbSs9MipNYXRoLlBJLGcrPTIqTWF0aC5QSTtnLW0+MipNYXRoLlBJJiYobT0wLGc9MipNYXRoLlBJKTtsZXQgeT0yKk1hdGguUEkvdS5jdXJ2ZVN0ZXBDb3VudCx2PU1hdGgubWluKHkvMiwoZy1tKS8yKSx4PURqKHYsaCxmLGQscCxtLGcsMSx1KTtpZighdS5kaXNhYmxlTXVsdGlTdHJva2Upe2xldCBiPURqKHYsaCxmLGQscCxtLGcsMS41LHUpO3gucHVzaCguLi5iKX1yZXR1cm4gcyYmKGw/eC5wdXNoKC4uLldoKGgsZixoK2QqTWF0aC5jb3MobSksZitwKk1hdGguc2luKG0pLHUpLC4uLldoKGgsZixoK2QqTWF0aC5jb3MoZyksZitwKk1hdGguc2luKGcpLHUpKTp4LnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W2gsZl19LHtvcDoibGluZVRvIixkYXRhOltoK2QqTWF0aC5jb3MobSksZitwKk1hdGguc2luKG0pXX0pKSx7dHlwZToicGF0aCIsb3BzOnh9fWZ1bmN0aW9uIEFqKHQsZSl7bGV0IHI9TWooUmooRzkodCkpKSxuPVtdLGk9WzAsMF0sYT1bMCwwXTtmb3IobGV0e2tleTpzLGRhdGE6bH1vZiByKXN3aXRjaChzKXtjYXNlIk0iOmE9W2xbMF0sbFsxXV0saT1bbFswXSxsWzFdXTticmVhaztjYXNlIkwiOm4ucHVzaCguLi5XaChhWzBdLGFbMV0sbFswXSxsWzFdLGUpKSxhPVtsWzBdLGxbMV1dO2JyZWFrO2Nhc2UiQyI6e2xldFt1LGgsZixkLHAsbV09bDtuLnB1c2goLi4uQjdlKHUsaCxmLGQscCxtLGEsZSkpLGE9W3AsbV07YnJlYWt9Y2FzZSJaIjpuLnB1c2goLi4uV2goYVswXSxhWzFdLGlbMF0saVsxXSxlKSksYT1baVswXSxpWzFdXX1yZXR1cm57dHlwZToicGF0aCIsb3BzOm59fWZ1bmN0aW9uIEE5KHQsZSl7bGV0IHI9W107Zm9yKGxldCBuIG9mIHQpaWYobi5sZW5ndGgpe2xldCBpPWUubWF4UmFuZG9tbmVzc09mZnNldHx8MCxhPW4ubGVuZ3RoO2lmKGE+Mil7ci5wdXNoKHtvcDoibW92ZSIsZGF0YTpbblswXVswXStucihpLGUpLG5bMF1bMV0rbnIoaSxlKV19KTtmb3IobGV0IHM9MTtzPGE7cysrKXIucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbbltzXVswXStucihpLGUpLG5bc11bMV0rbnIoaSxlKV19KX19cmV0dXJue3R5cGU6ImZpbGxQYXRoIixvcHM6cn19ZnVuY3Rpb24gdm0odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtsZXQgaT1yLmZpbGxTdHlsZXx8ImhhY2h1cmUiO2lmKCFSc1tpXSlzd2l0Y2goaSl7Y2FzZSJ6aWd6YWciOlJzW2ldfHwoUnNbaV09bmV3IEw5KG4pKTticmVhaztjYXNlImNyb3NzLWhhdGNoIjpSc1tpXXx8KFJzW2ldPW5ldyBEOShuKSk7YnJlYWs7Y2FzZSJkb3RzIjpSc1tpXXx8KFJzW2ldPW5ldyBOOShuKSk7YnJlYWs7Y2FzZSJkYXNoZWQiOlJzW2ldfHwoUnNbaV09bmV3IFI5KG4pKTticmVhaztjYXNlInppZ3phZy1saW5lIjpSc1tpXXx8KFJzW2ldPW5ldyBNOShuKSk7YnJlYWs7ZGVmYXVsdDppPSJoYWNodXJlIixSc1tpXXx8KFJzW2ldPW5ldyBOdihuKSl9cmV0dXJuIFJzW2ldfShlLE83ZSkuZmlsbFBvbHlnb25zKHQsZSl9ZnVuY3Rpb24gX2oodCl7bGV0IGU9T2JqZWN0LmFzc2lnbih7fSx0KTtyZXR1cm4gZS5yYW5kb21pemVyPXZvaWQgMCx0LnNlZWQmJihlLnNlZWQ9dC5zZWVkKzEpLGV9ZnVuY3Rpb24gQmoodCl7cmV0dXJuIHQucmFuZG9taXplcnx8KHQucmFuZG9taXplcj1uZXcgSTkodC5zZWVkfHwwKSksdC5yYW5kb21pemVyLm5leHQoKX1mdW5jdGlvbiBWNSh0LGUscixuPTEpe3JldHVybiByLnJvdWdobmVzcypuKihCaihyKSooZS10KSt0KX1mdW5jdGlvbiBucih0LGUscj0xKXtyZXR1cm4gVjUoLXQsdCxlLHIpfWZ1bmN0aW9uIFdoKHQsZSxyLG4saSxhPSExKXtsZXQgcz1hP2kuZGlzYWJsZU11bHRpU3Ryb2tlRmlsbDppLmRpc2FibGVNdWx0aVN0cm9rZSxsPVA5KHQsZSxyLG4saSwhMCwhMSk7aWYocylyZXR1cm4gbDtsZXQgdT1QOSh0LGUscixuLGksITAsITApO3JldHVybiBsLmNvbmNhdCh1KX1mdW5jdGlvbiBQOSh0LGUscixuLGksYSxzKXtsZXQgbD1NYXRoLnBvdyh0LXIsMikrTWF0aC5wb3coZS1uLDIpLHU9TWF0aC5zcXJ0KGwpLGg9MTtoPXU8MjAwPzE6dT41MDA/LjQ6LS4wMDE2NjY4KnUrMS4yMzMzMzQ7bGV0IGY9aS5tYXhSYW5kb21uZXNzT2Zmc2V0fHwwO2YqZioxMDA+bCYmKGY9dS8xMCk7bGV0IGQ9Zi8yLHA9LjIrLjIqQmooaSksbT1pLmJvd2luZyppLm1heFJhbmRvbW5lc3NPZmZzZXQqKG4tZSkvMjAwLGc9aS5ib3dpbmcqaS5tYXhSYW5kb21uZXNzT2Zmc2V0Kih0LXIpLzIwMDttPW5yKG0saSxoKSxnPW5yKGcsaSxoKTtsZXQgeT1bXSx2PW8oKCk9Pm5yKGQsaSxoKSwiTSIpLHg9bygoKT0+bnIoZixpLGgpLCJrIiksYj1pLnByZXNlcnZlVmVydGljZXM7cmV0dXJuIGEmJihzP3kucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3QrKGI/MDp2KCkpLGUrKGI/MDp2KCkpXX0pOnkucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3QrKGI/MDpucihmLGksaCkpLGUrKGI/MDpucihmLGksaCkpXX0pKSxzP3kucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlttK3QrKHItdCkqcCt2KCksZytlKyhuLWUpKnArdigpLG0rdCsyKihyLXQpKnArdigpLGcrZSsyKihuLWUpKnArdigpLHIrKGI/MDp2KCkpLG4rKGI/MDp2KCkpXX0pOnkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlttK3QrKHItdCkqcCt4KCksZytlKyhuLWUpKnAreCgpLG0rdCsyKihyLXQpKnAreCgpLGcrZSsyKihuLWUpKnAreCgpLHIrKGI/MDp4KCkpLG4rKGI/MDp4KCkpXX0pLHl9ZnVuY3Rpb24gRjUodCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm5bXTtsZXQgbj1bXTtuLnB1c2goW3RbMF1bMF0rbnIoZSxyKSx0WzBdWzFdK25yKGUscildKSxuLnB1c2goW3RbMF1bMF0rbnIoZSxyKSx0WzBdWzFdK25yKGUscildKTtmb3IobGV0IGk9MTtpPHQubGVuZ3RoO2krKyluLnB1c2goW3RbaV1bMF0rbnIoZSxyKSx0W2ldWzFdK25yKGUscildKSxpPT09dC5sZW5ndGgtMSYmbi5wdXNoKFt0W2ldWzBdK25yKGUsciksdFtpXVsxXStucihlLHIpXSk7cmV0dXJuIFU1KG4sbnVsbCxyKX1mdW5jdGlvbiBVNSh0LGUscil7bGV0IG49dC5sZW5ndGgsaT1bXTtpZihuPjMpe2xldCBhPVtdLHM9MS1yLmN1cnZlVGlnaHRuZXNzO2kucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3RbMV1bMF0sdFsxXVsxXV19KTtmb3IobGV0IGw9MTtsKzI8bjtsKyspe2xldCB1PXRbbF07YVswXT1bdVswXSx1WzFdXSxhWzFdPVt1WzBdKyhzKnRbbCsxXVswXS1zKnRbbC0xXVswXSkvNix1WzFdKyhzKnRbbCsxXVsxXS1zKnRbbC0xXVsxXSkvNl0sYVsyXT1bdFtsKzFdWzBdKyhzKnRbbF1bMF0tcyp0W2wrMl1bMF0pLzYsdFtsKzFdWzFdKyhzKnRbbF1bMV0tcyp0W2wrMl1bMV0pLzZdLGFbM109W3RbbCsxXVswXSx0W2wrMV1bMV1dLGkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlthWzFdWzBdLGFbMV1bMV0sYVsyXVswXSxhWzJdWzFdLGFbM11bMF0sYVszXVsxXV19KX1pZihlJiZlLmxlbmd0aD09PTIpe2xldCBsPXIubWF4UmFuZG9tbmVzc09mZnNldDtpLnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W2VbMF0rbnIobCxyKSxlWzFdK25yKGwscildfSl9fWVsc2Ugbj09PTM/KGkucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3RbMV1bMF0sdFsxXVsxXV19KSxpLnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbdFsxXVswXSx0WzFdWzFdLHRbMl1bMF0sdFsyXVsxXSx0WzJdWzBdLHRbMl1bMV1dfSkpOm49PT0yJiZpLnB1c2goLi4uUDkodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSxyLCEwLCEwKSk7cmV0dXJuIGl9ZnVuY3Rpb24gTGoodCxlLHIsbixpLGEscyxsKXtsZXQgdT1bXSxoPVtdO2lmKGwucm91Z2huZXNzPT09MCl7dC89NCxoLnB1c2goW2UrbipNYXRoLmNvcygtdCkscitpKk1hdGguc2luKC10KV0pO2ZvcihsZXQgZj0wO2Y8PTIqTWF0aC5QSTtmKz10KXtsZXQgZD1bZStuKk1hdGguY29zKGYpLHIraSpNYXRoLnNpbihmKV07dS5wdXNoKGQpLGgucHVzaChkKX1oLnB1c2goW2UrbipNYXRoLmNvcygwKSxyK2kqTWF0aC5zaW4oMCldKSxoLnB1c2goW2UrbipNYXRoLmNvcyh0KSxyK2kqTWF0aC5zaW4odCldKX1lbHNle2xldCBmPW5yKC41LGwpLU1hdGguUEkvMjtoLnB1c2goW25yKGEsbCkrZSsuOSpuKk1hdGguY29zKGYtdCksbnIoYSxsKStyKy45KmkqTWF0aC5zaW4oZi10KV0pO2xldCBkPTIqTWF0aC5QSStmLS4wMTtmb3IobGV0IHA9ZjtwPGQ7cCs9dCl7bGV0IG09W25yKGEsbCkrZStuKk1hdGguY29zKHApLG5yKGEsbCkrcitpKk1hdGguc2luKHApXTt1LnB1c2gobSksaC5wdXNoKG0pfWgucHVzaChbbnIoYSxsKStlK24qTWF0aC5jb3MoZisyKk1hdGguUEkrLjUqcyksbnIoYSxsKStyK2kqTWF0aC5zaW4oZisyKk1hdGguUEkrLjUqcyldKSxoLnB1c2goW25yKGEsbCkrZSsuOTgqbipNYXRoLmNvcyhmK3MpLG5yKGEsbCkrcisuOTgqaSpNYXRoLnNpbihmK3MpXSksaC5wdXNoKFtucihhLGwpK2UrLjkqbipNYXRoLmNvcyhmKy41KnMpLG5yKGEsbCkrcisuOSppKk1hdGguc2luKGYrLjUqcyldKX1yZXR1cm5baCx1XX1mdW5jdGlvbiBEaih0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9YStuciguMSx1KSxmPVtdO2YucHVzaChbbnIobCx1KStlKy45Km4qTWF0aC5jb3MoaC10KSxucihsLHUpK3IrLjkqaSpNYXRoLnNpbihoLXQpXSk7Zm9yKGxldCBkPWg7ZDw9cztkKz10KWYucHVzaChbbnIobCx1KStlK24qTWF0aC5jb3MoZCksbnIobCx1KStyK2kqTWF0aC5zaW4oZCldKTtyZXR1cm4gZi5wdXNoKFtlK24qTWF0aC5jb3MocykscitpKk1hdGguc2luKHMpXSksZi5wdXNoKFtlK24qTWF0aC5jb3MocykscitpKk1hdGguc2luKHMpXSksVTUoZixudWxsLHUpfWZ1bmN0aW9uIEI3ZSh0LGUscixuLGksYSxzLGwpe2xldCB1PVtdLGg9W2wubWF4UmFuZG9tbmVzc09mZnNldHx8MSwobC5tYXhSYW5kb21uZXNzT2Zmc2V0fHwxKSsuM10sZj1bMCwwXSxkPWwuZGlzYWJsZU11bHRpU3Ryb2tlPzE6MixwPWwucHJlc2VydmVWZXJ0aWNlcztmb3IobGV0IG09MDttPGQ7bSsrKW09PT0wP3UucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3NbMF0sc1sxXV19KTp1LnB1c2goe29wOiJtb3ZlIixkYXRhOltzWzBdKyhwPzA6bnIoaFswXSxsKSksc1sxXSsocD8wOm5yKGhbMF0sbCkpXX0pLGY9cD9baSxhXTpbaStucihoW21dLGwpLGErbnIoaFttXSxsKV0sdS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W3QrbnIoaFttXSxsKSxlK25yKGhbbV0sbCkscitucihoW21dLGwpLG4rbnIoaFttXSxsKSxmWzBdLGZbMV1dfSk7cmV0dXJuIHV9ZnVuY3Rpb24gRHYodCl7cmV0dXJuWy4uLnRdfWZ1bmN0aW9uIE5qKHQsZT0wKXtsZXQgcj10Lmxlbmd0aDtpZihyPDMpdGhyb3cgbmV3IEVycm9yKCJBIGN1cnZlIG11c3QgaGF2ZSBhdCBsZWFzdCB0aHJlZSBwb2ludHMuIik7bGV0IG49W107aWYocj09PTMpbi5wdXNoKER2KHRbMF0pLER2KHRbMV0pLER2KHRbMl0pLER2KHRbMl0pKTtlbHNle2xldCBpPVtdO2kucHVzaCh0WzBdLHRbMF0pO2ZvcihsZXQgbD0xO2w8dC5sZW5ndGg7bCsrKWkucHVzaCh0W2xdKSxsPT09dC5sZW5ndGgtMSYmaS5wdXNoKHRbbF0pO2xldCBhPVtdLHM9MS1lO24ucHVzaChEdihpWzBdKSk7Zm9yKGxldCBsPTE7bCsyPGkubGVuZ3RoO2wrKyl7bGV0IHU9aVtsXTthWzBdPVt1WzBdLHVbMV1dLGFbMV09W3VbMF0rKHMqaVtsKzFdWzBdLXMqaVtsLTFdWzBdKS82LHVbMV0rKHMqaVtsKzFdWzFdLXMqaVtsLTFdWzFdKS82XSxhWzJdPVtpW2wrMV1bMF0rKHMqaVtsXVswXS1zKmlbbCsyXVswXSkvNixpW2wrMV1bMV0rKHMqaVtsXVsxXS1zKmlbbCsyXVsxXSkvNl0sYVszXT1baVtsKzFdWzBdLGlbbCsxXVsxXV0sbi5wdXNoKGFbMV0sYVsyXSxhWzNdKX19cmV0dXJuIG59ZnVuY3Rpb24gJDUodCxlKXtyZXR1cm4gTWF0aC5wb3codFswXS1lWzBdLDIpK01hdGgucG93KHRbMV0tZVsxXSwyKX1mdW5jdGlvbiBGN2UodCxlLHIpe2xldCBuPSQ1KGUscik7aWYobj09PTApcmV0dXJuICQ1KHQsZSk7bGV0IGk9KCh0WzBdLWVbMF0pKihyWzBdLWVbMF0pKyh0WzFdLWVbMV0pKihyWzFdLWVbMV0pKS9uO3JldHVybiBpPU1hdGgubWF4KDAsTWF0aC5taW4oMSxpKSksJDUodCxPZChlLHIsaSkpfWZ1bmN0aW9uIE9kKHQsZSxyKXtyZXR1cm5bdFswXSsoZVswXS10WzBdKSpyLHRbMV0rKGVbMV0tdFsxXSkqcl19ZnVuY3Rpb24gQjkodCxlLHIsbil7bGV0IGk9bnx8W107aWYoZnVuY3Rpb24obCx1KXtsZXQgaD1sW3UrMF0sZj1sW3UrMV0sZD1sW3UrMl0scD1sW3UrM10sbT0zKmZbMF0tMipoWzBdLXBbMF07bSo9bTtsZXQgZz0zKmZbMV0tMipoWzFdLXBbMV07Zyo9ZztsZXQgeT0zKmRbMF0tMipwWzBdLWhbMF07eSo9eTtsZXQgdj0zKmRbMV0tMipwWzFdLWhbMV07cmV0dXJuIHYqPXYsbTx5JiYobT15KSxnPHYmJihnPXYpLG0rZ30odCxlKTxyKXtsZXQgbD10W2UrMF07aS5sZW5ndGg/KGE9aVtpLmxlbmd0aC0xXSxzPWwsTWF0aC5zcXJ0KCQ1KGEscykpPjEmJmkucHVzaChsKSk6aS5wdXNoKGwpLGkucHVzaCh0W2UrM10pfWVsc2V7bGV0IHU9dFtlKzBdLGg9dFtlKzFdLGY9dFtlKzJdLGQ9dFtlKzNdLHA9T2QodSxoLC41KSxtPU9kKGgsZiwuNSksZz1PZChmLGQsLjUpLHk9T2QocCxtLC41KSx2PU9kKG0sZywuNSkseD1PZCh5LHYsLjUpO0I5KFt1LHAseSx4XSwwLHIsaSksQjkoW3gsdixnLGRdLDAscixpKX12YXIgYSxzO3JldHVybiBpfWZ1bmN0aW9uIHo3ZSh0LGUpe3JldHVybiBINSh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gSDUodCxlLHIsbixpKXtsZXQgYT1pfHxbXSxzPXRbZV0sbD10W3ItMV0sdT0wLGg9MTtmb3IobGV0IGY9ZSsxO2Y8ci0xOysrZil7bGV0IGQ9RjdlKHRbZl0scyxsKTtkPnUmJih1PWQsaD1mKX1yZXR1cm4gTWF0aC5zcXJ0KHUpPm4/KEg1KHQsZSxoKzEsbixhKSxINSh0LGgscixuLGEpKTooYS5sZW5ndGh8fGEucHVzaChzKSxhLnB1c2gobCkpLGF9ZnVuY3Rpb24gXzkodCxlPS4xNSxyKXtsZXQgbj1bXSxpPSh0Lmxlbmd0aC0xKS8zO2ZvcihsZXQgYT0wO2E8aTthKyspQjkodCwzKmEsZSxuKTtyZXR1cm4gciYmcj4wP0g1KG4sMCxuLmxlbmd0aCxyKTpufXZhciBOdixMOSxEOSxOOSxSOSxNOSxScyxJOSxJN2UsUzksRWosQjUsTzdlLGxvLHhtLEY5LHo1LHo5LFhlLGp0PU0oKCk9PnsidXNlIHN0cmljdCI7byhFOSwidCIpO28oUjdlLCJlIik7byhNN2UsInMiKTtvKFJ2LCJuIik7TnY9Y2xhc3N7c3RhdGlje28odGhpcywibyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7cmV0dXJuIHRoaXMuX2ZpbGxQb2x5Z29ucyhlLHIpfV9maWxsUG9seWdvbnMoZSxyKXtsZXQgbj1SdihlLHIpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy5yZW5kZXJMaW5lcyhuLHIpfX1yZW5kZXJMaW5lcyhlLHIpe2xldCBuPVtdO2ZvcihsZXQgaSBvZiBlKW4ucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKGlbMF1bMF0saVswXVsxXSxpWzFdWzBdLGlbMV1bMV0scikpO3JldHVybiBufX07byhXNSwiYSIpO0w5PWNsYXNzIGV4dGVuZHMgTnZ7c3RhdGlje28odGhpcywiaCIpfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXIuaGFjaHVyZUdhcDtuPDAmJihuPTQqci5zdHJva2VXaWR0aCksbj1NYXRoLm1heChuLC4xKTtsZXQgaT1SdihlLE9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUdhcDpufSkpLGE9TWF0aC5QSS8xODAqci5oYWNodXJlQW5nbGUscz1bXSxsPS41Km4qTWF0aC5jb3MoYSksdT0uNSpuKk1hdGguc2luKGEpO2ZvcihsZXRbaCxmXW9mIGkpVzUoW2gsZl0pJiZzLnB1c2goW1toWzBdLWwsaFsxXSt1XSxbLi4uZl1dLFtbaFswXStsLGhbMV0tdV0sWy4uLmZdXSk7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnJlbmRlckxpbmVzKHMscil9fX0sRDk9Y2xhc3MgZXh0ZW5kcyBOdntzdGF0aWN7byh0aGlzLCJyIil9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49dGhpcy5fZmlsbFBvbHlnb25zKGUsciksaT1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVBbmdsZTpyLmhhY2h1cmVBbmdsZSs5MH0pLGE9dGhpcy5fZmlsbFBvbHlnb25zKGUsaSk7cmV0dXJuIG4ub3BzPW4ub3BzLmNvbmNhdChhLm9wcyksbn19LE45PWNsYXNze3N0YXRpY3tvKHRoaXMsImkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPVJ2KGUscj1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVBbmdsZTowfSkpO3JldHVybiB0aGlzLmRvdHNPbkxpbmVzKG4scil9ZG90c09uTGluZXMoZSxyKXtsZXQgbj1bXSxpPXIuaGFjaHVyZUdhcDtpPDAmJihpPTQqci5zdHJva2VXaWR0aCksaT1NYXRoLm1heChpLC4xKTtsZXQgYT1yLmZpbGxXZWlnaHQ7YTwwJiYoYT1yLnN0cm9rZVdpZHRoLzIpO2xldCBzPWkvNDtmb3IobGV0IGwgb2YgZSl7bGV0IHU9VzUobCksaD11L2ksZj1NYXRoLmNlaWwoaCktMSxkPXUtZippLHA9KGxbMF1bMF0rbFsxXVswXSkvMi1pLzQsbT1NYXRoLm1pbihsWzBdWzFdLGxbMV1bMV0pO2ZvcihsZXQgZz0wO2c8ZjtnKyspe2xldCB5PW0rZCtnKmksdj1wLXMrMipNYXRoLnJhbmRvbSgpKnMseD15LXMrMipNYXRoLnJhbmRvbSgpKnMsYj10aGlzLmhlbHBlci5lbGxpcHNlKHYseCxhLGEscik7bi5wdXNoKC4uLmIub3BzKX19cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczpufX19LFI5PWNsYXNze3N0YXRpY3tvKHRoaXMsImMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPVJ2KGUscik7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLmRhc2hlZExpbmUobixyKX19ZGFzaGVkTGluZShlLHIpe2xldCBuPXIuZGFzaE9mZnNldDwwP3IuaGFjaHVyZUdhcDwwPzQqci5zdHJva2VXaWR0aDpyLmhhY2h1cmVHYXA6ci5kYXNoT2Zmc2V0LGk9ci5kYXNoR2FwPDA/ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcDpyLmRhc2hHYXAsYT1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgbD1XNShzKSx1PU1hdGguZmxvb3IobC8obitpKSksaD0obCtpLXUqKG4raSkpLzIsZj1zWzBdLGQ9c1sxXTtmWzBdPmRbMF0mJihmPXNbMV0sZD1zWzBdKTtsZXQgcD1NYXRoLmF0YW4oKGRbMV0tZlsxXSkvKGRbMF0tZlswXSkpO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBnPW0qKG4raSkseT1nK24sdj1bZlswXStnKk1hdGguY29zKHApK2gqTWF0aC5jb3MocCksZlsxXStnKk1hdGguc2luKHApK2gqTWF0aC5zaW4ocCldLHg9W2ZbMF0reSpNYXRoLmNvcyhwKStoKk1hdGguY29zKHApLGZbMV0reSpNYXRoLnNpbihwKStoKk1hdGguc2luKHApXTthLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh2WzBdLHZbMV0seFswXSx4WzFdLHIpKX19KSxhfX0sTTk9Y2xhc3N7c3RhdGlje28odGhpcywibCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcCxpPXIuemlnemFnT2Zmc2V0PDA/bjpyLnppZ3phZ09mZnNldCxhPVJ2KGUscj1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVHYXA6bitpfSkpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy56aWd6YWdMaW5lcyhhLGkscil9fXppZ3phZ0xpbmVzKGUscixuKXtsZXQgaT1bXTtyZXR1cm4gZS5mb3JFYWNoKGE9PntsZXQgcz1XNShhKSxsPU1hdGgucm91bmQocy8oMipyKSksdT1hWzBdLGg9YVsxXTt1WzBdPmhbMF0mJih1PWFbMV0saD1hWzBdKTtsZXQgZj1NYXRoLmF0YW4oKGhbMV0tdVsxXSkvKGhbMF0tdVswXSkpO2ZvcihsZXQgZD0wO2Q8bDtkKyspe2xldCBwPTIqZCpyLG09MiooZCsxKSpyLGc9TWF0aC5zcXJ0KDIqTWF0aC5wb3cociwyKSkseT1bdVswXStwKk1hdGguY29zKGYpLHVbMV0rcCpNYXRoLnNpbihmKV0sdj1bdVswXSttKk1hdGguY29zKGYpLHVbMV0rbSpNYXRoLnNpbihmKV0seD1beVswXStnKk1hdGguY29zKGYrTWF0aC5QSS80KSx5WzFdK2cqTWF0aC5zaW4oZitNYXRoLlBJLzQpXTtpLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh5WzBdLHlbMV0seFswXSx4WzFdLG4pLC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHMoeFswXSx4WzFdLHZbMF0sdlsxXSxuKSl9fSksaX19LFJzPXt9LEk5PWNsYXNze3N0YXRpY3tvKHRoaXMsInAiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnNlZWQ9ZX1uZXh0KCl7cmV0dXJuIHRoaXMuc2VlZD8oMioqMzEtMSYodGhpcy5zZWVkPU1hdGguaW11bCg0ODI3MSx0aGlzLnNlZWQpKSkvMioqMzE6TWF0aC5yYW5kb20oKX19LEk3ZT0wLFM5PTEsRWo9MixCNT17QTo3LGE6NyxDOjYsYzo2LEg6MSxoOjEsTDoyLGw6MixNOjIsbToyLFE6NCxxOjQsUzo0LHM6NCxUOjIsdDoyLFY6MSx2OjEsWjowLHo6MH07byhDOSwiayIpO28oRzksImIiKTtvKFJqLCJ5Iik7byhNaiwibSIpO28oTHYsInciKTtvKElqLCJ4Iik7TzdlPXtyYW5kT2Zmc2V0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gbnIodCxlKX0sInJhbmRPZmZzZXQiKSxyYW5kT2Zmc2V0V2l0aFJhbmdlOm8oZnVuY3Rpb24odCxlLHIpe3JldHVybiBWNSh0LGUscil9LCJyYW5kT2Zmc2V0V2l0aFJhbmdlIiksZWxsaXBzZTpvKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9UGoocixuLGkpO3JldHVybiBPOSh0LGUsaSxhKS5vcHNldH0sImVsbGlwc2UiKSxkb3VibGVMaW5lT3BzOm8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gV2godCxlLHIsbixpLCEwKX0sImRvdWJsZUxpbmVPcHMiKX07byhPaiwidiIpO28oRzUsIlMiKTtvKFA3ZSwiTyIpO28oU2osIkwiKTtvKFBqLCJUIik7byhPOSwiRCIpO28oQ2osIkEiKTtvKEFqLCJfIik7byhBOSwiSSIpO28odm0sIkMiKTtvKF9qLCJ6Iik7byhCaiwiVyIpO28oVjUsIkUiKTtvKG5yLCJHIik7byhXaCwiJCIpO28oUDksIlIiKTtvKEY1LCJqIik7byhVNSwicSIpO28oTGosIkYiKTtvKERqLCJWIik7byhCN2UsIloiKTtvKER2LCJRIik7byhOaiwiSCIpO28oJDUsIk4iKTtvKEY3ZSwiQiIpO28oT2QsIkoiKTtvKEI5LCJLIik7byh6N2UsIlUiKTtvKEg1LCJYIik7byhfOSwiWSIpO2xvPSJub25lIix4bT1jbGFzc3tzdGF0aWN7byh0aGlzLCJldCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdE9wdGlvbnM9e21heFJhbmRvbW5lc3NPZmZzZXQ6Mixyb3VnaG5lc3M6MSxib3dpbmc6MSxzdHJva2U6IiMwMDAiLHN0cm9rZVdpZHRoOjEsY3VydmVUaWdodG5lc3M6MCxjdXJ2ZUZpdHRpbmc6Ljk1LGN1cnZlU3RlcENvdW50OjksZmlsbFN0eWxlOiJoYWNodXJlIixmaWxsV2VpZ2h0Oi0xLGhhY2h1cmVBbmdsZTotNDEsaGFjaHVyZUdhcDotMSxkYXNoT2Zmc2V0Oi0xLGRhc2hHYXA6LTEsemlnemFnT2Zmc2V0Oi0xLHNlZWQ6MCxkaXNhYmxlTXVsdGlTdHJva2U6ITEsZGlzYWJsZU11bHRpU3Ryb2tlRmlsbDohMSxwcmVzZXJ2ZVZlcnRpY2VzOiExLGZpbGxTaGFwZVJvdWdobmVzc0dhaW46Ljh9LHRoaXMuY29uZmlnPWV8fHt9LHRoaXMuY29uZmlnLm9wdGlvbnMmJih0aGlzLmRlZmF1bHRPcHRpb25zPXRoaXMuX28odGhpcy5jb25maWcub3B0aW9ucykpfXN0YXRpYyBuZXdTZWVkKCl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKiozMSl9X28oZSl7cmV0dXJuIGU/T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRlZmF1bHRPcHRpb25zLGUpOnRoaXMuZGVmYXVsdE9wdGlvbnN9X2QoZSxyLG4pe3JldHVybntzaGFwZTplLHNldHM6cnx8W10sb3B0aW9uczpufHx0aGlzLmRlZmF1bHRPcHRpb25zfX1saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKTtyZXR1cm4gdGhpcy5fZCgibGluZSIsW09qKGUscixuLGkscyldLHMpfXJlY3RhbmdsZShlLHIsbixpLGEpe2xldCBzPXRoaXMuX28oYSksbD1bXSx1PVA3ZShlLHIsbixpLHMpO2lmKHMuZmlsbCl7bGV0IGg9W1tlLHJdLFtlK24scl0sW2UrbixyK2ldLFtlLHIraV1dO3MuZmlsbFN0eWxlPT09InNvbGlkIj9sLnB1c2goQTkoW2hdLHMpKTpsLnB1c2godm0oW2hdLHMpKX1yZXR1cm4gcy5zdHJva2UhPT1sbyYmbC5wdXNoKHUpLHRoaXMuX2QoInJlY3RhbmdsZSIsbCxzKX1lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKSxsPVtdLHU9UGoobixpLHMpLGg9TzkoZSxyLHMsdSk7aWYocy5maWxsKWlmKHMuZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IGY9TzkoZSxyLHMsdSkub3BzZXQ7Zi50eXBlPSJmaWxsUGF0aCIsbC5wdXNoKGYpfWVsc2UgbC5wdXNoKHZtKFtoLmVzdGltYXRlZFBvaW50c10scykpO3JldHVybiBzLnN0cm9rZSE9PWxvJiZsLnB1c2goaC5vcHNldCksdGhpcy5fZCgiZWxsaXBzZSIsbCxzKX1jaXJjbGUoZSxyLG4saSl7bGV0IGE9dGhpcy5lbGxpcHNlKGUscixuLG4saSk7cmV0dXJuIGEuc2hhcGU9ImNpcmNsZSIsYX1saW5lYXJQYXRoKGUscil7bGV0IG49dGhpcy5fbyhyKTtyZXR1cm4gdGhpcy5fZCgibGluZWFyUGF0aCIsW0c1KGUsITEsbildLG4pfWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuX28odSksZj1bXSxkPUNqKGUscixuLGksYSxzLGwsITAsaCk7aWYobCYmaC5maWxsKWlmKGguZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IHA9T2JqZWN0LmFzc2lnbih7fSxoKTtwLmRpc2FibGVNdWx0aVN0cm9rZT0hMDtsZXQgbT1DaihlLHIsbixpLGEscywhMCwhMSxwKTttLnR5cGU9ImZpbGxQYXRoIixmLnB1c2gobSl9ZWxzZSBmLnB1c2goZnVuY3Rpb24ocCxtLGcseSx2LHgsYil7bGV0IHc9cCxfPW0sVD1NYXRoLmFicyhnLzIpLEU9TWF0aC5hYnMoeS8yKTtUKz1uciguMDEqVCxiKSxFKz1uciguMDEqRSxiKTtsZXQgTD12LFM9eDtmb3IoO0w8MDspTCs9MipNYXRoLlBJLFMrPTIqTWF0aC5QSTtTLUw+MipNYXRoLlBJJiYoTD0wLFM9MipNYXRoLlBJKTtsZXQgQT0oUy1MKS9iLmN1cnZlU3RlcENvdW50LEk9W107Zm9yKGxldCBEPUw7RDw9UztEKz1BKUkucHVzaChbdytUKk1hdGguY29zKEQpLF8rRSpNYXRoLnNpbihEKV0pO3JldHVybiBJLnB1c2goW3crVCpNYXRoLmNvcyhTKSxfK0UqTWF0aC5zaW4oUyldKSxJLnB1c2goW3csX10pLHZtKFtJXSxiKX0oZSxyLG4saSxhLHMsaCkpO3JldHVybiBoLnN0cm9rZSE9PWxvJiZmLnB1c2goZCksdGhpcy5fZCgiYXJjIixmLGgpfWN1cnZlKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdLGE9U2ooZSxuKTtpZihuLmZpbGwmJm4uZmlsbCE9PWxvKWlmKG4uZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IHM9U2ooZSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2Rpc2FibGVNdWx0aVN0cm9rZTohMCxyb3VnaG5lc3M6bi5yb3VnaG5lc3M/bi5yb3VnaG5lc3Mrbi5maWxsU2hhcGVSb3VnaG5lc3NHYWluOjB9KSk7aS5wdXNoKHt0eXBlOiJmaWxsUGF0aCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKHMub3BzKX0pfWVsc2V7bGV0IHM9W10sbD1lO2lmKGwubGVuZ3RoKXtsZXQgdT10eXBlb2YgbFswXVswXT09Im51bWJlciI/W2xdOmw7Zm9yKGxldCBoIG9mIHUpaC5sZW5ndGg8Mz9zLnB1c2goLi4uaCk6aC5sZW5ndGg9PT0zP3MucHVzaCguLi5fOShOaihbaFswXSxoWzBdLGhbMV0saFsyXV0pLDEwLCgxK24ucm91Z2huZXNzKS8yKSk6cy5wdXNoKC4uLl85KE5qKGgpLDEwLCgxK24ucm91Z2huZXNzKS8yKSl9cy5sZW5ndGgmJmkucHVzaCh2bShbc10sbikpfXJldHVybiBuLnN0cm9rZSE9PWxvJiZpLnB1c2goYSksdGhpcy5fZCgiY3VydmUiLGksbil9cG9seWdvbihlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXSxhPUc1KGUsITAsbik7cmV0dXJuIG4uZmlsbCYmKG4uZmlsbFN0eWxlPT09InNvbGlkIj9pLnB1c2goQTkoW2VdLG4pKTppLnB1c2godm0oW2VdLG4pKSksbi5zdHJva2UhPT1sbyYmaS5wdXNoKGEpLHRoaXMuX2QoInBvbHlnb24iLGksbil9cGF0aChlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXTtpZighZSlyZXR1cm4gdGhpcy5fZCgicGF0aCIsaSxuKTtlPShlfHwiIikucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLygtXHMpL2csIi0iKS5yZXBsYWNlKCIvKHNzKS9nIiwiICIpO2xldCBhPW4uZmlsbCYmbi5maWxsIT09InRyYW5zcGFyZW50IiYmbi5maWxsIT09bG8scz1uLnN0cm9rZSE9PWxvLGw9ISEobi5zaW1wbGlmaWNhdGlvbiYmbi5zaW1wbGlmaWNhdGlvbjwxKSx1PWZ1bmN0aW9uKGYsZCxwKXtsZXQgbT1NaihSaihHOShmKSkpLGc9W10seT1bXSx2PVswLDBdLHg9W10sYj1vKCgpPT57eC5sZW5ndGg+PTQmJnkucHVzaCguLi5fOSh4LGQpKSx4PVtdfSwiaSIpLHc9bygoKT0+e2IoKSx5Lmxlbmd0aCYmKGcucHVzaCh5KSx5PVtdKX0sImMiKTtmb3IobGV0e2tleTpULGRhdGE6RX1vZiBtKXN3aXRjaChUKXtjYXNlIk0iOncoKSx2PVtFWzBdLEVbMV1dLHkucHVzaCh2KTticmVhaztjYXNlIkwiOmIoKSx5LnB1c2goW0VbMF0sRVsxXV0pO2JyZWFrO2Nhc2UiQyI6aWYoIXgubGVuZ3RoKXtsZXQgTD15Lmxlbmd0aD95W3kubGVuZ3RoLTFdOnY7eC5wdXNoKFtMWzBdLExbMV1dKX14LnB1c2goW0VbMF0sRVsxXV0pLHgucHVzaChbRVsyXSxFWzNdXSkseC5wdXNoKFtFWzRdLEVbNV1dKTticmVhaztjYXNlIloiOmIoKSx5LnB1c2goW3ZbMF0sdlsxXV0pfWlmKHcoKSwhcClyZXR1cm4gZztsZXQgXz1bXTtmb3IobGV0IFQgb2YgZyl7bGV0IEU9ejdlKFQscCk7RS5sZW5ndGgmJl8ucHVzaChFKX1yZXR1cm4gX30oZSwxLGw/NC00KihuLnNpbXBsaWZpY2F0aW9ufHwxKTooMStuLnJvdWdobmVzcykvMiksaD1BaihlLG4pO2lmKGEpaWYobi5maWxsU3R5bGU9PT0ic29saWQiKWlmKHUubGVuZ3RoPT09MSl7bGV0IGY9QWooZSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2Rpc2FibGVNdWx0aVN0cm9rZTohMCxyb3VnaG5lc3M6bi5yb3VnaG5lc3M/bi5yb3VnaG5lc3Mrbi5maWxsU2hhcGVSb3VnaG5lc3NHYWluOjB9KSk7aS5wdXNoKHt0eXBlOiJmaWxsUGF0aCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGYub3BzKX0pfWVsc2UgaS5wdXNoKEE5KHUsbikpO2Vsc2UgaS5wdXNoKHZtKHUsbikpO3JldHVybiBzJiYobD91LmZvckVhY2goZj0+e2kucHVzaChHNShmLCExLG4pKX0pOmkucHVzaChoKSksdGhpcy5fZCgicGF0aCIsaSxuKX1vcHNUb1BhdGgoZSxyKXtsZXQgbj0iIjtmb3IobGV0IGkgb2YgZS5vcHMpe2xldCBhPXR5cGVvZiByPT0ibnVtYmVyIiYmcj49MD9pLmRhdGEubWFwKHM9PitzLnRvRml4ZWQocikpOmkuZGF0YTtzd2l0Y2goaS5vcCl7Y2FzZSJtb3ZlIjpuKz1gTSR7YVswXX0gJHthWzFdfSBgO2JyZWFrO2Nhc2UiYmN1cnZlVG8iOm4rPWBDJHthWzBdfSAke2FbMV19LCAke2FbMl19ICR7YVszXX0sICR7YVs0XX0gJHthWzVdfSBgO2JyZWFrO2Nhc2UibGluZVRvIjpuKz1gTCR7YVswXX0gJHthWzFdfSBgfX1yZXR1cm4gbi50cmltKCl9dG9QYXRocyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmRlZmF1bHRPcHRpb25zLGk9W107Zm9yKGxldCBhIG9mIHIpe2xldCBzPW51bGw7c3dpdGNoKGEudHlwZSl7Y2FzZSJwYXRoIjpzPXtkOnRoaXMub3BzVG9QYXRoKGEpLHN0cm9rZTpuLnN0cm9rZSxzdHJva2VXaWR0aDpuLnN0cm9rZVdpZHRoLGZpbGw6bG99O2JyZWFrO2Nhc2UiZmlsbFBhdGgiOnM9e2Q6dGhpcy5vcHNUb1BhdGgoYSksc3Ryb2tlOmxvLHN0cm9rZVdpZHRoOjAsZmlsbDpuLmZpbGx8fGxvfTticmVhaztjYXNlImZpbGxTa2V0Y2giOnM9dGhpcy5maWxsU2tldGNoKGEsbil9cyYmaS5wdXNoKHMpfXJldHVybiBpfWZpbGxTa2V0Y2goZSxyKXtsZXQgbj1yLmZpbGxXZWlnaHQ7cmV0dXJuIG48MCYmKG49ci5zdHJva2VXaWR0aC8yKSx7ZDp0aGlzLm9wc1RvUGF0aChlKSxzdHJva2U6ci5maWxsfHxsbyxzdHJva2VXaWR0aDpuLGZpbGw6bG99fV9tZXJnZWRTaGFwZShlKXtyZXR1cm4gZS5maWx0ZXIoKHIsbik9Pm49PT0wfHxyLm9wIT09Im1vdmUiKX19LEY5PWNsYXNze3N0YXRpY3tvKHRoaXMsInN0Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmNhbnZhcz1lLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5nZW49bmV3IHhtKHIpfWRyYXcoZSl7bGV0IHI9ZS5zZXRzfHxbXSxuPWUub3B0aW9uc3x8dGhpcy5nZXREZWZhdWx0T3B0aW9ucygpLGk9dGhpcy5jdHgsYT1lLm9wdGlvbnMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHM7Zm9yKGxldCBzIG9mIHIpc3dpdGNoKHMudHlwZSl7Y2FzZSJwYXRoIjppLnNhdmUoKSxpLnN0cm9rZVN0eWxlPW4uc3Ryb2tlPT09Im5vbmUiPyJ0cmFuc3BhcmVudCI6bi5zdHJva2UsaS5saW5lV2lkdGg9bi5zdHJva2VXaWR0aCxuLnN0cm9rZUxpbmVEYXNoJiZpLnNldExpbmVEYXNoKG4uc3Ryb2tlTGluZURhc2gpLG4uc3Ryb2tlTGluZURhc2hPZmZzZXQmJihpLmxpbmVEYXNoT2Zmc2V0PW4uc3Ryb2tlTGluZURhc2hPZmZzZXQpLHRoaXMuX2RyYXdUb0NvbnRleHQoaSxzLGEpLGkucmVzdG9yZSgpO2JyZWFrO2Nhc2UiZmlsbFBhdGgiOntpLnNhdmUoKSxpLmZpbGxTdHlsZT1uLmZpbGx8fCIiO2xldCBsPWUuc2hhcGU9PT0iY3VydmUifHxlLnNoYXBlPT09InBvbHlnb24ifHxlLnNoYXBlPT09InBhdGgiPyJldmVub2RkIjoibm9uemVybyI7dGhpcy5fZHJhd1RvQ29udGV4dChpLHMsYSxsKSxpLnJlc3RvcmUoKTticmVha31jYXNlImZpbGxTa2V0Y2giOnRoaXMuZmlsbFNrZXRjaChpLHMsbil9fWZpbGxTa2V0Y2goZSxyLG4pe2xldCBpPW4uZmlsbFdlaWdodDtpPDAmJihpPW4uc3Ryb2tlV2lkdGgvMiksZS5zYXZlKCksbi5maWxsTGluZURhc2gmJmUuc2V0TGluZURhc2gobi5maWxsTGluZURhc2gpLG4uZmlsbExpbmVEYXNoT2Zmc2V0JiYoZS5saW5lRGFzaE9mZnNldD1uLmZpbGxMaW5lRGFzaE9mZnNldCksZS5zdHJva2VTdHlsZT1uLmZpbGx8fCIiLGUubGluZVdpZHRoPWksdGhpcy5fZHJhd1RvQ29udGV4dChlLHIsbi5maXhlZERlY2ltYWxQbGFjZURpZ2l0cyksZS5yZXN0b3JlKCl9X2RyYXdUb0NvbnRleHQoZSxyLG4saT0ibm9uemVybyIpe2UuYmVnaW5QYXRoKCk7Zm9yKGxldCBhIG9mIHIub3BzKXtsZXQgcz10eXBlb2Ygbj09Im51bWJlciImJm4+PTA/YS5kYXRhLm1hcChsPT4rbC50b0ZpeGVkKG4pKTphLmRhdGE7c3dpdGNoKGEub3Ape2Nhc2UibW92ZSI6ZS5tb3ZlVG8oc1swXSxzWzFdKTticmVhaztjYXNlImJjdXJ2ZVRvIjplLmJlemllckN1cnZlVG8oc1swXSxzWzFdLHNbMl0sc1szXSxzWzRdLHNbNV0pO2JyZWFrO2Nhc2UibGluZVRvIjplLmxpbmVUbyhzWzBdLHNbMV0pfX1yLnR5cGU9PT0iZmlsbFBhdGgiP2UuZmlsbChpKTplLnN0cm9rZSgpfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9bGluZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmxpbmUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ucmVjdGFuZ2xlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5lbGxpcHNlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWNpcmNsZShlLHIsbixpKXtsZXQgYT10aGlzLmdlbi5jaXJjbGUoZSxyLG4saSk7cmV0dXJuIHRoaXMuZHJhdyhhKSxhfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5saW5lYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufXBvbHlnb24oZSxyKXtsZXQgbj10aGlzLmdlbi5wb2x5Z29uKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuZ2VuLmFyYyhlLHIsbixpLGEscyxsLHUpO3JldHVybiB0aGlzLmRyYXcoaCksaH1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuZ2VuLmN1cnZlKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufXBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5wYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufX0sejU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix6OT1jbGFzc3tzdGF0aWN7byh0aGlzLCJvdCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5zdmc9ZSx0aGlzLmdlbj1uZXcgeG0ocil9ZHJhdyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksaT10aGlzLnN2Zy5vd25lckRvY3VtZW50fHx3aW5kb3cuZG9jdW1lbnQsYT1pLmNyZWF0ZUVsZW1lbnROUyh6NSwiZyIpLHM9ZS5vcHRpb25zLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzO2ZvcihsZXQgbCBvZiByKXtsZXQgdT1udWxsO3N3aXRjaChsLnR5cGUpe2Nhc2UicGF0aCI6dT1pLmNyZWF0ZUVsZW1lbnROUyh6NSwicGF0aCIpLHUuc2V0QXR0cmlidXRlKCJkIix0aGlzLm9wc1RvUGF0aChsLHMpKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlIixuLnN0cm9rZSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsbi5zdHJva2VXaWR0aCsiIiksdS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksbi5zdHJva2VMaW5lRGFzaCYmdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLG4uc3Ryb2tlTGluZURhc2guam9pbigiICIpLnRyaW0oKSksbi5zdHJva2VMaW5lRGFzaE9mZnNldCYmdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixgJHtuLnN0cm9rZUxpbmVEYXNoT2Zmc2V0fWApO2JyZWFrO2Nhc2UiZmlsbFBhdGgiOnU9aS5jcmVhdGVFbGVtZW50TlMoejUsInBhdGgiKSx1LnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5vcHNUb1BhdGgobCxzKSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwiMCIpLHUuc2V0QXR0cmlidXRlKCJmaWxsIixuLmZpbGx8fCIiKSxlLnNoYXBlIT09ImN1cnZlIiYmZS5zaGFwZSE9PSJwb2x5Z29uInx8dS5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKTticmVhaztjYXNlImZpbGxTa2V0Y2giOnU9dGhpcy5maWxsU2tldGNoKGksbCxuKX11JiZhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfWZpbGxTa2V0Y2goZSxyLG4pe2xldCBpPW4uZmlsbFdlaWdodDtpPDAmJihpPW4uc3Ryb2tlV2lkdGgvMik7bGV0IGE9ZS5jcmVhdGVFbGVtZW50TlMoejUsInBhdGgiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMub3BzVG9QYXRoKHIsbi5maXhlZERlY2ltYWxQbGFjZURpZ2l0cykpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLG4uZmlsbHx8IiIpLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGkrIiIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uZmlsbExpbmVEYXNoJiZhLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsbi5maWxsTGluZURhc2guam9pbigiICIpLnRyaW0oKSksbi5maWxsTGluZURhc2hPZmZzZXQmJmEuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIsYCR7bi5maWxsTGluZURhc2hPZmZzZXR9YCksYX1nZXQgZ2VuZXJhdG9yKCl7cmV0dXJuIHRoaXMuZ2VufWdldERlZmF1bHRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZ2VuLmRlZmF1bHRPcHRpb25zfW9wc1RvUGF0aChlLHIpe3JldHVybiB0aGlzLmdlbi5vcHNUb1BhdGgoZSxyKX1saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ubGluZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ucmVjdGFuZ2xlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4uZWxsaXBzZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9Y2lyY2xlKGUscixuLGkpe2xldCBhPXRoaXMuZ2VuLmNpcmNsZShlLHIsbixpKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5saW5lYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1wb2x5Z29uKGUscil7bGV0IG49dGhpcy5nZW4ucG9seWdvbihlLHIpO3JldHVybiB0aGlzLmRyYXcobil9YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5nZW4uYXJjKGUscixuLGksYSxzLGwsdSk7cmV0dXJuIHRoaXMuZHJhdyhoKX1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuZ2VuLmN1cnZlKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1wYXRoKGUscil7bGV0IG49dGhpcy5nZW4ucGF0aChlLHIpO3JldHVybiB0aGlzLmRyYXcobil9fSxYZT17Y2FudmFzOm8oKHQsZSk9Pm5ldyBGOSh0LGUpLCJjYW52YXMiKSxzdmc6bygodCxlKT0+bmV3IHo5KHQsZSksInN2ZyIpLGdlbmVyYXRvcjpvKHQ9Pm5ldyB4bSh0KSwiZ2VuZXJhdG9yIiksbmV3U2VlZDpvKCgpPT54bS5uZXdTZWVkKCksIm5ld1NlZWQiKX19KTtmdW5jdGlvbiBGaih0LGUpe2xldHtsYWJlbFN0eWxlczpyfT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXQgbj1vdChlKSxpPW47bnx8KGk9ImFuY2hvciIpO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPTEse2Nzc1N0eWxlczpsfT1lLHU9WGUuc3ZnKGEpLGg9S2UoZSx7ZmlsbDoiYmxhY2siLHN0cm9rZToibm9uZSIsZmlsbFN0eWxlOiJzb2xpZCJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGgucm91Z2huZXNzPTApO2xldCBmPXUuY2lyY2xlKDAsMCxzKjIsaCksZD1hLmluc2VydCgoKT0+ZiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGQuYXR0cigiY2xhc3MiLCJhbmNob3IiKS5hdHRyKCJzdHlsZSIsR24obCkpLGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxzLHApLFllLmNpcmNsZShlLHMscCl9LGF9dmFyIHpqPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7byhGaiwiYW5jaG9yIil9KTtmdW5jdGlvbiBHaih0LGUscixuLGksYSxzKXtsZXQgdT0odCtyKS8yLGg9KGUrbikvMixmPU1hdGguYXRhbjIobi1lLHItdCksZD0oci10KS8yLHA9KG4tZSkvMixtPWQvaSxnPXAvYSx5PU1hdGguc3FydChtKioyK2cqKjIpO2lmKHk+MSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBnaXZlbiByYWRpaSBhcmUgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhbiBhcmMgYmV0d2VlbiB0aGUgcG9pbnRzLiIpO2xldCB2PU1hdGguc3FydCgxLXkqKjIpLHg9dSt2KmEqTWF0aC5zaW4oZikqKHM/LTE6MSksYj1oLXYqaSpNYXRoLmNvcyhmKSoocz8tMToxKSx3PU1hdGguYXRhbjIoKGUtYikvYSwodC14KS9pKSxUPU1hdGguYXRhbjIoKG4tYikvYSwoci14KS9pKS13O3MmJlQ8MCYmKFQrPTIqTWF0aC5QSSksIXMmJlQ+MCYmKFQtPTIqTWF0aC5QSSk7bGV0IEU9W107Zm9yKGxldCBMPTA7TDwyMDtMKyspe2xldCBTPUwvMTksQT13K1MqVCxJPXgraSpNYXRoLmNvcyhBKSxEPWIrYSpNYXRoLnNpbihBKTtFLnB1c2goe3g6SSx5OkR9KX1yZXR1cm4gRX1hc3luYyBmdW5jdGlvbiAkaih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9YS53aWR0aCtlLnBhZGRpbmcrMjAsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1sLzIsaD11LygyLjUrbC81MCkse2Nzc1N0eWxlczpmfT1lLGQ9W3t4OnMvMix5Oi1sLzJ9LHt4Oi1zLzIseTotbC8yfSwuLi5Haigtcy8yLC1sLzIsLXMvMixsLzIsaCx1LCExKSx7eDpzLzIseTpsLzJ9LC4uLkdqKHMvMixsLzIscy8yLC1sLzIsaCx1LCEwKV0scD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9V3QoZCkseT1wLnBhdGgoZyxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtoLzJ9LCAwKWApLGplKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFllLnBvbHlnb24oZSxkLHgpfSxpfXZhciBWaj1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7byhHaiwiZ2VuZXJhdGVBcmNQb2ludHMiKTtvKCRqLCJib3dUaWVSZWN0Iil9KTtmdW5jdGlvbiBJYSh0LGUscixuKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLngrIiwiK2kueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIityLzIrIikiKX12YXIgT3U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKElhLCJpbnNlcnRQb2x5Z29uU2hhcGUiKX0pO2FzeW5jIGZ1bmN0aW9uIFVqKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IHN0KHQsZSxvdChlKSkscz1hLmhlaWdodCtlLnBhZGRpbmcsbD0xMix1PWEud2lkdGgrZS5wYWRkaW5nK2wsaD0wLGY9dSxkPS1zLHA9MCxtPVt7eDpoK2wseTpkfSx7eDpmLHk6ZH0se3g6Zix5OnB9LHt4OmgseTpwfSx7eDpoLHk6ZCtsfSx7eDpoK2wseTpkfV0sZyx7Y3NzU3R5bGVzOnl9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB2PVhlLnN2ZyhpKSx4PUtlKGUse30pLGI9V3QobSksdz12LnBhdGgoYix4KTtnPWkuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHtzLzJ9KWApLHkmJmcuYXR0cigic3R5bGUiLHkpfWVsc2UgZz1JYShpLHUscyxtKTtyZXR1cm4gbiYmZy5hdHRyKCJzdHlsZSIsbiksamUoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gWWUucG9seWdvbihlLG0sdil9LGl9dmFyIEhqPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO090KCk7byhVaiwiY2FyZCIpfSk7ZnVuY3Rpb24gV2oodCxlKXtsZXR7bm9kZVN0eWxlczpyfT1aZShlKTtlLmxhYmVsPSIiO2xldCBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG90KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkse2Nzc1N0eWxlczppfT1lLGE9TWF0aC5tYXgoMjgsZS53aWR0aD8/MCkscz1be3g6MCx5OmEvMn0se3g6YS8yLHk6MH0se3g6MCx5Oi1hLzJ9LHt4Oi1hLzIseTowfV0sbD1YZS5zdmcobiksdT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHUucm91Z2huZXNzPTAsdS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGg9V3QocyksZj1sLnBhdGgoaCx1KSxkPW4uaW5zZXJ0KCgpPT5mLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaSYmZS5sb29rIT09ImhhbmREcmF3biImJmQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLHImJmUubG9vayE9PSJoYW5kRHJhd24iJiZkLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixyKSxlLndpZHRoPTI4LGUuaGVpZ2h0PTI4LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZZS5wb2x5Z29uKGUscyxwKX0sbn12YXIgWWo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO2p0KCk7WHQoKTtPdCgpO28oV2osImNob2ljZSIpfSk7YXN5bmMgZnVuY3Rpb24gcWoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxoYWxmUGFkZGluZzpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9YS53aWR0aC8yK3MsdSx7Y3NzU3R5bGVzOmh9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBmPVhlLnN2ZyhpKSxkPUtlKGUse30pLHA9Zi5jaXJjbGUoMCwwLGwqMixkKTt1PWkuaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEduKGgpKX1lbHNlIHU9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLGwpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCk7cmV0dXJuIGplKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxsLGYpLFllLmNpcmNsZShlLGwsZil9LGl9dmFyIFhqPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7byhxaiwiY2lyY2xlIil9KTtmdW5jdGlvbiBHN2UodCl7bGV0IGU9TWF0aC5jb3MoTWF0aC5QSS80KSxyPU1hdGguc2luKE1hdGguUEkvNCksbj10KjIsaT17eDpuLzIqZSx5Om4vMipyfSxhPXt4Oi0obi8yKSplLHk6bi8yKnJ9LHM9e3g6LShuLzIpKmUseTotKG4vMikqcn0sbD17eDpuLzIqZSx5Oi0obi8yKSpyfTtyZXR1cm5gTSAke2EueH0sJHthLnl9IEwgJHtsLnh9LCR7bC55fQogICAgICAgICAgICAgICAgICAgTSAke2kueH0sJHtpLnl9IEwgJHtzLnh9LCR7cy55fWB9ZnVuY3Rpb24gamoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yLGUubGFiZWw9IiI7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSxhPU1hdGgubWF4KDMwLGU/LndpZHRoPz8wKSx7Y3NzU3R5bGVzOnN9PWUsbD1YZS5zdmcoaSksdT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHUucm91Z2huZXNzPTAsdS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGg9bC5jaXJjbGUoMCwwLGEqMix1KSxmPUc3ZShhKSxkPWwucGF0aChmLHUpLHA9aS5pbnNlcnQoKCk9PmgsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmluc2VydCgoKT0+ZCkscyYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHMpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLHApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBZLmluZm8oImNyb3NzZWRDaXJjbGUgaW50ZXJzZWN0IixlLHtyYWRpdXM6YSxwb2ludDptfSksWWUuY2lyY2xlKGUsYSxtKX0saX12YXIgS2o9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO090KCk7WHQoKTtqdCgpO3F0KCk7byhHN2UsImNyZWF0ZUxpbmUiKTtvKGpqLCJjcm9zc2VkQ2lyY2xlIil9KTtmdW5jdGlvbiBZaCh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gUWoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uWWgobC8yLC11LzIsaCwzMCwtOTAsMCkse3g6LWwvMi1oLHk6aH0sLi4uWWgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uWWgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5Oi11LzJ9LC4uLlloKGwvMix1LzIsaCwyMCwwLDkwKV0scD1be3g6bC8yLHk6LXUvMi1ofSx7eDotbC8yLHk6LXUvMi1ofSwuLi5ZaChsLzIsLXUvMixoLDIwLC05MCwwKSx7eDotbC8yLWgseTotaH0sLi4uWWgobC8yK2wqLjEsLWgsaCwyMCwtMTgwLC0yNzApLC4uLlloKGwvMitsKi4xLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6dS8yfSwuLi5ZaChsLzIsdS8yLGgsMjAsMCw5MCkse3g6LWwvMix5OnUvMitofSx7eDpsLzIseTp1LzIraH1dLG09WGUuc3ZnKGkpLGc9S2UoZSx7ZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9V3QoZCkucmVwbGFjZSgiWiIsIiIpLHg9bS5wYXRoKHYsZyksYj1XdChwKSx3PW0ucGF0aChiLHsuLi5nfSksXz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBfLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLF8uaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxfLmF0dHIoImNsYXNzIiwidGV4dCIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZfLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksXy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtofSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIraC0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxfKSxlLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4gWWUucG9seWdvbihlLHAsVCl9LGl9dmFyIFpqPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtvKFloLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28oUWosImN1cmx5QnJhY2VMZWZ0Iil9KTtmdW5jdGlvbiBxaCh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDptLHk6Z30pfXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIEpqKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1hLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxoPU1hdGgubWF4KDUsdSouMSkse2Nzc1N0eWxlczpmfT1lLGQ9Wy4uLnFoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4OmwvMitoLHk6LWh9LC4uLnFoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLnFoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDpsLzIraCx5OnUvMn0sLi4ucWgobC8yLHUvMixoLDIwLDAsOTApXSxwPVt7eDotbC8yLHk6LXUvMi1ofSx7eDpsLzIseTotdS8yLWh9LC4uLnFoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4OmwvMitoLHk6LWh9LC4uLnFoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLnFoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDpsLzIraCx5OnUvMn0sLi4ucWgobC8yLHUvMixoLDIwLDAsOTApLHt4OmwvMix5OnUvMitofSx7eDotbC8yLHk6dS8yK2h9XSxtPVhlLnN2ZyhpKSxnPUtlKGUse2ZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB2PVd0KGQpLnJlcGxhY2UoIloiLCIiKSx4PW0ucGF0aCh2LGcpLGI9V3QocCksdz1tLnBhdGgoYix7Li4uZ30pLF89aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gXy5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxfLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksXy5hdHRyKCJjbGFzcyIsInRleHQiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLF8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWh9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLF8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBZZS5wb2x5Z29uKGUscCxUKX0saX12YXIgZUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28ocWgsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byhKaiwiY3VybHlCcmFjZVJpZ2h0Iil9KTtmdW5jdGlvbiBPYSh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gdEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uT2EobC8yLC11LzIsaCwzMCwtOTAsMCkse3g6LWwvMi1oLHk6aH0sLi4uT2EobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uT2EobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5Oi11LzJ9LC4uLk9hKGwvMix1LzIsaCwyMCwwLDkwKV0scD1bLi4uT2EoLWwvMitoK2gvMiwtdS8yLGgsMjAsLTkwLC0xODApLHt4OmwvMi1oLzIseTpofSwuLi5PYSgtbC8yLWgvMiwtaCxoLDIwLDAsOTApLC4uLk9hKC1sLzItaC8yLGgsaCwyMCwtOTAsMCkse3g6bC8yLWgvMix5Oi1ofSwuLi5PYSgtbC8yK2graC8yLHUvMixoLDMwLC0xODAsLTI3MCldLG09W3t4OmwvMix5Oi11LzItaH0se3g6LWwvMix5Oi11LzItaH0sLi4uT2EobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6LWwvMi1oLHk6LWh9LC4uLk9hKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLk9hKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTp1LzJ9LC4uLk9hKGwvMix1LzIsaCwyMCwwLDkwKSx7eDotbC8yLHk6dS8yK2h9LHt4OmwvMi1oLWgvMix5OnUvMitofSwuLi5PYSgtbC8yK2graC8yLC11LzIsaCwyMCwtOTAsLTE4MCkse3g6bC8yLWgvMix5Omh9LC4uLk9hKC1sLzItaC8yLC1oLGgsMjAsMCw5MCksLi4uT2EoLWwvMi1oLzIsaCxoLDIwLC05MCwwKSx7eDpsLzItaC8yLHk6LWh9LC4uLk9hKC1sLzIraCtoLzIsdS8yLGgsMzAsLTE4MCwtMjcwKV0sZz1YZS5zdmcoaSkseT1LZShlLHtmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1XdChkKS5yZXBsYWNlKCJaIiwiIiksYj1nLnBhdGgoeCx5KSxfPVd0KHApLnJlcGxhY2UoIloiLCIiKSxUPWcucGF0aChfLHkpLEU9V3QobSksTD1nLnBhdGgoRSx7Li4ueX0pLFM9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gUy5pbnNlcnQoKCk9PkwsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxTLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksUy5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJ0ZXh0IiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gtaC80fSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCkvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxTKSxlLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4gWWUucG9seWdvbihlLG0sQSl9LGl9dmFyIHJLPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtvKE9hLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28odEssImN1cmx5QnJhY2VzIil9KTthc3luYyBmdW5jdGlvbiBuSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9ODAsbD0yMCx1PU1hdGgubWF4KHMsKGEud2lkdGgrKGUucGFkZGluZz8/MCkqMikqMS4yNSxlPy53aWR0aD8/MCksaD1NYXRoLm1heChsLGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPWgvMix7Y3NzU3R5bGVzOmR9PWUscD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9dSx5PWgsdj1nLWYseD15LzQsYj1be3g6dix5OjB9LHt4LHk6MH0se3g6MCx5OnkvMn0se3gseX0se3g6dix5fSwuLi5PNSgtdiwteS8yLGYsNTAsMjcwLDkwKV0sdz1XdChiKSxfPXAucGF0aCh3LG0pLFQ9aS5pbnNlcnQoKCk9Pl8sIjpmaXJzdC1jaGlsZCIpO3JldHVybiBULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksVC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHstaC8yfSlgKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUsYixFKX0saX12YXIgaUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28obkssImN1cnZlZFRyYXBlem9pZCIpfSk7YXN5bmMgZnVuY3Rpb24gYUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCtlLnBhZGRpbmcsZS53aWR0aD8/MCksdT1sLzIsaD11LygyLjUrbC81MCksZj1NYXRoLm1heChhLmhlaWdodCtoK2UucGFkZGluZyxlLmhlaWdodD8/MCksZCx7Y3NzU3R5bGVzOnB9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBtPVhlLnN2ZyhpKSxnPVY3ZSgwLDAsbCxmLHUsaCkseT1VN2UoMCxoLGwsZix1LGgpLHY9bS5wYXRoKGcsS2UoZSx7fSkpLHg9bS5wYXRoKHksS2UoZSx7ZmlsbDoibm9uZSJ9KSk7ZD1pLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksZD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmQuYXR0cigic3R5bGUiLHApfWVsc2V7bGV0IG09JDdlKDAsMCxsLGYsdSxoKTtkPWkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIsbSkuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsR24ocCkpLmF0dHIoInN0eWxlIixuKX1yZXR1cm4gZC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsaCksZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yfSwgJHstKGYvMitoKX0pYCksamUoZSxkKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKSsoZS5wYWRkaW5nPz8wKS8xLjUtKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7bGV0IGc9WWUucmVjdChlLG0pLHk9Zy54LShlLng/PzApO2lmKHUhPTAmJihNYXRoLmFicyh5KTwoZS53aWR0aD8/MCkvMnx8TWF0aC5hYnMoeSk9PShlLndpZHRoPz8wKS8yJiZNYXRoLmFicyhnLnktKGUueT8/MCkpPihlLmhlaWdodD8/MCkvMi1oKSl7bGV0IHY9aCpoKigxLXkqeS8odSp1KSk7dj4wJiYodj1NYXRoLnNxcnQodikpLHY9aC12LG0ueS0oZS55Pz8wKT4wJiYodj0tdiksZy55Kz12fXJldHVybiBnfSxpfXZhciAkN2UsVjdlLFU3ZSxzSz1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7aHIoKTskN2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gXS5qb2luKCIgIiksImNyZWF0ZUN5bGluZGVyUGF0aEQiKSxWN2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZSthfWAsYE0ke3Qrcn0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLFU3ZT1vKCh0LGUscixuLGksYSk9PltgTSR7dC1yLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhhSywiY3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIG9LKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWEud2lkdGgrZS5wYWRkaW5nLHU9YS5oZWlnaHQrZS5wYWRkaW5nLGg9dSouMixmPS1sLzIsZD0tdS8yLWgvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9W3t4OmYseTpkK2h9LHt4Oi1mLHk6ZCtofSx7eDotZix5Oi1kfSx7eDpmLHk6LWR9LHt4OmYseTpkfSx7eDotZix5OmR9LHt4Oi1mLHk6ZCtofV0sdj1tLnBvbHlnb24oeS5tYXAoYj0+W2IueCxiLnldKSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtmKyhlLnBhZGRpbmc/PzApLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2QraCsoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnJlY3QoZSxiKX0saX12YXIgbEs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28ob0ssImRpdmlkZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIGNLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsaGFsZlBhZGRpbmc6c309YXdhaXQgc3QodCxlLG90KGUpKSx1PWEud2lkdGgvMitzKzUsaD1hLndpZHRoLzIrcyxmLHtjc3NTdHlsZXM6ZH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7cm91Z2huZXNzOi4yLHN0cm9rZVdpZHRoOjIuNX0pLGc9S2UoZSx7cm91Z2huZXNzOi4yLHN0cm9rZVdpZHRoOjEuNX0pLHk9cC5jaXJjbGUoMCwwLHUqMixtKSx2PXAuY2lyY2xlKDAsMCxoKjIsZyk7Zj1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLGYuYXR0cigiY2xhc3MiLEduKGUuY3NzQ2xhc3NlcykpLmF0dHIoInN0eWxlIixHbihkKSksZi5ub2RlKCk/LmFwcGVuZENoaWxkKHkpLGYubm9kZSgpPy5hcHBlbmRDaGlsZCh2KX1lbHNle2Y9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtsZXQgcD1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksbT1mLmluc2VydCgiY2lyY2xlIik7Zi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKSxwLmF0dHIoImNsYXNzIiwib3V0ZXItY2lyY2xlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLHUpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksbS5hdHRyKCJjbGFzcyIsImlubmVyLWNpcmNsZSIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyIixoKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApfXJldHVybiBqZShlLGYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLGUsdSxwKSxZZS5jaXJjbGUoZSx1LHApfSxpfXZhciB1Sz1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7T3QoKTtxdCgpO1h0KCk7anQoKTtocigpO28oY0ssImRvdWJsZWNpcmNsZSIpfSk7ZnVuY3Rpb24gaEsodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1aZShlKTtlLmxhYmVsPSIiLGUubGFiZWxTdHlsZT1uO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG90KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkscz03LHtjc3NTdHlsZXM6bH09ZSx1PVhlLnN2ZyhhKSx7bm9kZUJvcmRlcjpofT1yLGY9S2UoZSx7ZmlsbFN0eWxlOiJzb2xpZCJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGYucm91Z2huZXNzPTApO2xldCBkPXUuY2lyY2xlKDAsMCxzKjIsZikscD1hLmluc2VydCgoKT0+ZCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGBmaWxsOiAke2h9ICFpbXBvcnRhbnQ7YCksbCYmbC5sZW5ndGg+MCYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxqZShlLHApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBZLmluZm8oImZpbGxlZENpcmNsZSBpbnRlcnNlY3QiLGUse3JhZGl1czpzLHBvaW50Om19KSxZZS5jaXJjbGUoZSxzLG0pfSxhfXZhciBmSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7dXQoKTtxdCgpO1h0KCk7T3QoKTtvKGhLLCJmaWxsZWRDaXJjbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIGRLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1sK2EuaGVpZ2h0LGg9bCthLmhlaWdodCxmPVt7eDowLHk6LXV9LHt4OmgseTotdX0se3g6aC8yLHk6MH1dLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhpKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1XdChmKSx5PXAucGF0aChnLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAke3UvMn0pYCk7cmV0dXJuIGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9bCxlLmhlaWdodD11LGplKGUsdikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYS53aWR0aC8yLShhLngtKGEubGVmdD8/MCkpfSwgJHstdS8yKyhlLnBhZGRpbmc/PzApLzIrKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFkuaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGYseCksWWUucG9seWdvbihlLGYseCl9LGl9dmFyIHBLPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO090KCk7byhkSywiZmxpcHBlZFRyaWFuZ2xlIil9KTtmdW5jdGlvbiBtSyh0LGUse2RpcjpyLGNvbmZpZzp7c3RhdGU6bix0aGVtZVZhcmlhYmxlczppfX0pe2xldHtub2RlU3R5bGVzOmF9PVplKGUpO2UubGFiZWw9IiI7bGV0IHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOmx9PWUsdT1NYXRoLm1heCg3MCxlPy53aWR0aD8/MCksaD1NYXRoLm1heCgxMCxlPy5oZWlnaHQ/PzApO3I9PT0iTFIiJiYodT1NYXRoLm1heCgxMCxlPy53aWR0aD8/MCksaD1NYXRoLm1heCg3MCxlPy5oZWlnaHQ/PzApKTtsZXQgZj0tMSp1LzIsZD0tMSpoLzIscD1YZS5zdmcocyksbT1LZShlLHtzdHJva2U6aS5saW5lQ29sb3IsZmlsbDppLmxpbmVDb2xvcn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1wLnJlY3RhbmdsZShmLGQsdSxoLG0pLHk9cy5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpO2wmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixsKSxhJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYSksamUoZSx5KTtsZXQgdj1uPy5wYWRkaW5nPz8wO3JldHVybiBlLndpZHRoJiZlLmhlaWdodCYmKGUud2lkdGgrPXYvMnx8MCxlLmhlaWdodCs9di8yfHwwKSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWWUucmVjdChlLHgpfSxzfXZhciBnSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7cXQoKTtYdCgpO090KCk7byhtSywiZm9ya0pvaW4iKX0pO2FzeW5jIGZ1bmN0aW9uIHlLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXQgaT04MCxhPTUwLHtzaGFwZVN2ZzpzLGJib3g6bH09YXdhaXQgc3QodCxlLG90KGUpKSx1PU1hdGgubWF4KGksbC53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEsbC5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9aC8yLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhzKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6LXUvMix5Oi1oLzJ9LHt4OnUvMi1mLHk6LWgvMn0sLi4uTzUoLXUvMitmLDAsZiw1MCw5MCwyNzApLHt4OnUvMi1mLHk6aC8yfSx7eDotdS8yLHk6aC8yfV0seT1XdChnKSx2PXAucGF0aCh5LG0pLHg9cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksamUoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWS5pbmZvKCJQaWxsIGludGVyc2VjdCIsZSx7cmFkaXVzOmYscG9pbnQ6Yn0pLFllLnBvbHlnb24oZSxnLGIpfSxzfXZhciB2Sz1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7T3QoKTtxdCgpO1h0KCk7anQoKTtvKHlLLCJoYWxmUm91bmRlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24geEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPTQsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1sL3MsaD1hLndpZHRoKzIqdStlLnBhZGRpbmcsZj1be3g6dSx5OjB9LHt4OmgtdSx5OjB9LHt4OmgseTotbC8yfSx7eDpoLXUseTotbH0se3g6dSx5Oi1sfSx7eDowLHk6LWwvMn1dLGQse2Nzc1N0eWxlczpwfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PUg3ZSgwLDAsaCxsLHUpLHY9bS5wYXRoKHksZyk7ZD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7bC8yfSlgKSxwJiZkLmF0dHIoInN0eWxlIixwKX1lbHNlIGQ9SWEoaSxoLGwsZik7cmV0dXJuIG4mJmQuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9aCxlLmhlaWdodD1sLGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFllLnBvbHlnb24oZSxmLG0pfSxpfXZhciBIN2UsYks9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO091KCk7SDdlPW8oKHQsZSxyLG4saSk9PltgTSR7dCtpfSwke2V9YCxgTCR7dCtyLWl9LCR7ZX1gLGBMJHt0K3J9LCR7ZS1uLzJ9YCxgTCR7dCtyLWl9LCR7ZS1ufWAsYEwke3QraX0sJHtlLW59YCxgTCR7dH0sJHtlLW4vMn1gLCJaIl0uam9pbigiICIpLCJjcmVhdGVIZXhhZ29uUGF0aEQiKTtvKHhLLCJoZXhhZ29uIil9KTthc3luYyBmdW5jdGlvbiB3Syh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbD0iIixlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aX09YXdhaXQgc3QodCxlLG90KGUpKSxhPU1hdGgubWF4KDMwLGU/LndpZHRoPz8wKSxzPU1hdGgubWF4KDMwLGU/LmhlaWdodD8/MCkse2Nzc1N0eWxlczpsfT1lLHU9WGUuc3ZnKGkpLGg9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihoLnJvdWdobmVzcz0wLGguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBmPVt7eDowLHk6MH0se3g6YSx5OjB9LHt4OjAseTpzfSx7eDphLHk6c31dLGQ9V3QoZikscD11LnBhdGgoZCxoKSxtPWkuaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGwmJmUubG9vayE9PSJoYW5kRHJhd24iJiZtLnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZtLnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWEvMn0sICR7LXMvMn0pYCksamUoZSxtKSxlLmludGVyc2VjdD1mdW5jdGlvbihnKXtyZXR1cm4gWS5pbmZvKCJQaWxsIGludGVyc2VjdCIsZSx7cG9pbnRzOmZ9KSxZZS5wb2x5Z29uKGUsZixnKX0saX12YXIgVEs9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO090KCk7cXQoKTtYdCgpO2p0KCk7byh3SywiaG91cmdsYXNzIil9KTthc3luYyBmdW5jdGlvbiBrSyh0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09WmUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixsYWJlbDpkfT1hd2FpdCBzdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLHA9ZS5wb3M9PT0idCIsbT1sLGc9bCx7bm9kZUJvcmRlcjp5fT1yLHtzdHlsZXNNYXA6dn09U2MoZSkseD0tZy8yLGI9LW0vMix3PWUubGFiZWw/ODowLF89WGUuc3ZnKGgpLFQ9S2UoZSx7c3Ryb2tlOiJub25lIixmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoVC5yb3VnaG5lc3M9MCxULmZpbGxTdHlsZT0ic29saWQiKTtsZXQgRT1fLnJlY3RhbmdsZSh4LGIsZyxtLFQpLEw9TWF0aC5tYXgoZyxmLndpZHRoKSxTPW0rZi5oZWlnaHQrdyxBPV8ucmVjdGFuZ2xlKC1MLzIsLVMvMixMLFMsey4uLlQsZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToibm9uZSJ9KSxJPWguaW5zZXJ0KCgpPT5FLCI6Zmlyc3QtY2hpbGQiKSxEPWguaW5zZXJ0KCgpPT5BKTtpZihlLmljb24pe2xldCBrPWguYXBwZW5kKCJnIik7ay5odG1sKGA8Zz4ke2F3YWl0IF9vKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgUj1rLm5vZGUoKS5nZXRCQm94KCksQz1SLndpZHRoLE89Ui5oZWlnaHQsTj1SLngsUD1SLnk7ay5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstQy8yLU59LCR7cD9mLmhlaWdodC8yK3cvMi1PLzItUDotZi5oZWlnaHQvMi13LzItTy8yLVB9KWApLGsuYXR0cigic3R5bGUiLGBjb2xvcjogJHt2LmdldCgic3Ryb2tlIik/P3l9O2ApfXJldHVybiBkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7cD8tUy8yOlMvMi1mLmhlaWdodH0pYCksSS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke3A/Zi5oZWlnaHQvMit3LzI6LWYuaGVpZ2h0LzItdy8yfSlgKSxqZShlLEQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGspe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsayksIWUubGFiZWwpcmV0dXJuIFllLnJlY3QoZSxrKTtsZXQgUj1lLng/PzAsQz1lLnk/PzAsTz1lLmhlaWdodD8/MCxOPVtdO3JldHVybiBwP049W3t4OlItZi53aWR0aC8yLHk6Qy1PLzJ9LHt4OlIrZi53aWR0aC8yLHk6Qy1PLzJ9LHt4OlIrZi53aWR0aC8yLHk6Qy1PLzIrZi5oZWlnaHQrd30se3g6UitnLzIseTpDLU8vMitmLmhlaWdodCt3fSx7eDpSK2cvMix5OkMrTy8yfSx7eDpSLWcvMix5OkMrTy8yfSx7eDpSLWcvMix5OkMtTy8yK2YuaGVpZ2h0K3d9LHt4OlItZi53aWR0aC8yLHk6Qy1PLzIrZi5oZWlnaHQrd31dOk49W3t4OlItZy8yLHk6Qy1PLzJ9LHt4OlIrZy8yLHk6Qy1PLzJ9LHt4OlIrZy8yLHk6Qy1PLzIrbX0se3g6UitmLndpZHRoLzIseTpDLU8vMittfSx7eDpSK2Yud2lkdGgvMi8yLHk6QytPLzJ9LHt4OlItZi53aWR0aC8yLHk6QytPLzJ9LHt4OlItZi53aWR0aC8yLHk6Qy1PLzIrbX0se3g6Ui1nLzIseTpDLU8vMittfV0sWWUucG9seWdvbihlLE4sayl9LGh9dmFyIEVLPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTt1dCgpO3N1KCk7cXQoKTtYdCgpO090KCk7byhrSywiaWNvbiIpfSk7YXN5bmMgZnVuY3Rpb24gU0sodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVplKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsbGFiZWw6ZH09YXdhaXQgc3QodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxwPTIwLG09ZS5sYWJlbD84OjAsZz1lLnBvcz09PSJ0Iix7bm9kZUJvcmRlcjp5LG1haW5Ca2c6dn09cix7c3R5bGVzTWFwOnh9PVNjKGUpLGI9WGUuc3ZnKGgpLHc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih3LnJvdWdobmVzcz0wLHcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBfPXguZ2V0KCJmaWxsIik7dy5zdHJva2U9Xz8/djtsZXQgVD1oLmFwcGVuZCgiZyIpO2UuaWNvbiYmVC5odG1sKGA8Zz4ke2F3YWl0IF9vKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgRT1ULm5vZGUoKS5nZXRCQm94KCksTD1FLndpZHRoLFM9RS5oZWlnaHQsQT1FLngsST1FLnksRD1NYXRoLm1heChMLFMpKk1hdGguU1FSVDIrcCoyLGs9Yi5jaXJjbGUoMCwwLEQsdyksUj1NYXRoLm1heChELGYud2lkdGgpLEM9RCtmLmhlaWdodCttLE89Yi5yZWN0YW5nbGUoLVIvMiwtQy8yLFIsQyx7Li4udyxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLE49aC5pbnNlcnQoKCk9PmssIjpmaXJzdC1jaGlsZCIpLFA9aC5pbnNlcnQoKCk9Pk8pO3JldHVybiBULmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1MLzItQX0sJHtnP2YuaGVpZ2h0LzIrbS8yLVMvMi1JOi1mLmhlaWdodC8yLW0vMi1TLzItSX0pYCksVC5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke3guZ2V0KCJzdHJva2UiKT8/eX07YCksZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke2c/LUMvMjpDLzItZi5oZWlnaHR9KWApLE4uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtnP2YuaGVpZ2h0LzIrbS8yOi1mLmhlaWdodC8yLW0vMn0pYCksamUoZSxQKSxlLmludGVyc2VjdD1mdW5jdGlvbihGKXtyZXR1cm4gWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxGKSxZZS5yZWN0KGUsRil9LGh9dmFyIENLPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTt1dCgpO3N1KCk7cXQoKTtYdCgpO090KCk7byhTSywiaWNvbkNpcmNsZSIpfSk7dmFyIFBhLFhoPU0oKCk9PnsidXNlIHN0cmljdCI7UGE9bygodCxlLHIsbixpKT0+WyJNIix0K2ksZSwiSCIsdCtyLWksIkEiLGksaSwwLDAsMSx0K3IsZStpLCJWIixlK24taSwiQSIsaSxpLDAsMCwxLHQrci1pLGUrbiwiSCIsdCtpLCJBIixpLGksMCwwLDEsdCxlK24taSwiViIsZStpLCJBIixpLGksMCwwLDEsdCtpLGUsIloiXS5qb2luKCIgIiksImNyZWF0ZVJvdW5kZWRSZWN0UGF0aEQiKX0pO2FzeW5jIGZ1bmN0aW9uIEFLKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1aZShlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGhhbGZQYWRkaW5nOmQsbGFiZWw6cH09YXdhaXQgc3QodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxtPWUucG9zPT09InQiLGc9bCtkKjIseT1sK2QqMix7bm9kZUJvcmRlcjp2LG1haW5Ca2c6eH09cix7c3R5bGVzTWFwOmJ9PVNjKGUpLHc9LXkvMixfPS1nLzIsVD1lLmxhYmVsPzg6MCxFPVhlLnN2ZyhoKSxMPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoTC5yb3VnaG5lc3M9MCxMLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgUz1iLmdldCgiZmlsbCIpO0wuc3Ryb2tlPVM/P3g7bGV0IEE9RS5wYXRoKFBhKHcsXyx5LGcsNSksTCksST1NYXRoLm1heCh5LGYud2lkdGgpLEQ9ZytmLmhlaWdodCtULGs9RS5yZWN0YW5nbGUoLUkvMiwtRC8yLEksRCx7Li4uTCxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLFI9aC5pbnNlcnQoKCk9PkEsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiaWNvbi1zaGFwZTIiKSxDPWguaW5zZXJ0KCgpPT5rKTtpZihlLmljb24pe2xldCBPPWguYXBwZW5kKCJnIik7Ty5odG1sKGA8Zz4ke2F3YWl0IF9vKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgTj1PLm5vZGUoKS5nZXRCQm94KCksUD1OLndpZHRoLEY9Ti5oZWlnaHQsQj1OLngsRz1OLnk7Ty5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstUC8yLUJ9LCR7bT9mLmhlaWdodC8yK1QvMi1GLzItRzotZi5oZWlnaHQvMi1ULzItRi8yLUd9KWApLE8uYXR0cigic3R5bGUiLGBjb2xvcjogJHtiLmdldCgic3Ryb2tlIik/P3Z9O2ApfXJldHVybiBwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7bT8tRC8yOkQvMi1mLmhlaWdodH0pYCksUi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke20/Zi5oZWlnaHQvMitULzI6LWYuaGVpZ2h0LzItVC8yfSlgKSxqZShlLEMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKE8pe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsTyksIWUubGFiZWwpcmV0dXJuIFllLnJlY3QoZSxPKTtsZXQgTj1lLng/PzAsUD1lLnk/PzAsRj1lLmhlaWdodD8/MCxCPVtdO3JldHVybiBtP0I9W3t4Ok4tZi53aWR0aC8yLHk6UC1GLzJ9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzJ9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzIrZi5oZWlnaHQrVH0se3g6Tit5LzIseTpQLUYvMitmLmhlaWdodCtUfSx7eDpOK3kvMix5OlArRi8yfSx7eDpOLXkvMix5OlArRi8yfSx7eDpOLXkvMix5OlAtRi8yK2YuaGVpZ2h0K1R9LHt4Ok4tZi53aWR0aC8yLHk6UC1GLzIrZi5oZWlnaHQrVH1dOkI9W3t4Ok4teS8yLHk6UC1GLzJ9LHt4Ok4reS8yLHk6UC1GLzJ9LHt4Ok4reS8yLHk6UC1GLzIrZ30se3g6TitmLndpZHRoLzIseTpQLUYvMitnfSx7eDpOK2Yud2lkdGgvMi8yLHk6UCtGLzJ9LHt4Ok4tZi53aWR0aC8yLHk6UCtGLzJ9LHt4Ok4tZi53aWR0aC8yLHk6UC1GLzIrZ30se3g6Ti15LzIseTpQLUYvMitnfV0sWWUucG9seWdvbihlLEIsTyl9LGh9dmFyIF9LPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTt1dCgpO3N1KCk7cXQoKTtYdCgpO1hoKCk7T3QoKTtvKEFLLCJpY29uUm91bmRlZCIpfSk7YXN5bmMgZnVuY3Rpb24gTEsodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVplKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsaGFsZlBhZGRpbmc6ZCxsYWJlbDpwfT1hd2FpdCBzdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLG09ZS5wb3M9PT0idCIsZz1sK2QqMix5PWwrZCoyLHtub2RlQm9yZGVyOnYsbWFpbkJrZzp4fT1yLHtzdHlsZXNNYXA6Yn09U2MoZSksdz0teS8yLF89LWcvMixUPWUubGFiZWw/ODowLEU9WGUuc3ZnKGgpLEw9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihMLnJvdWdobmVzcz0wLEwuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBTPWIuZ2V0KCJmaWxsIik7TC5zdHJva2U9Uz8/eDtsZXQgQT1FLnBhdGgoUGEodyxfLHksZywuMSksTCksST1NYXRoLm1heCh5LGYud2lkdGgpLEQ9ZytmLmhlaWdodCtULGs9RS5yZWN0YW5nbGUoLUkvMiwtRC8yLEksRCx7Li4uTCxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLFI9aC5pbnNlcnQoKCk9PkEsIjpmaXJzdC1jaGlsZCIpLEM9aC5pbnNlcnQoKCk9PmspO2lmKGUuaWNvbil7bGV0IE89aC5hcHBlbmQoImciKTtPLmh0bWwoYDxnPiR7YXdhaXQgX28oZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBOPU8ubm9kZSgpLmdldEJCb3goKSxQPU4ud2lkdGgsRj1OLmhlaWdodCxCPU4ueCxHPU4ueTtPLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1QLzItQn0sJHttP2YuaGVpZ2h0LzIrVC8yLUYvMi1HOi1mLmhlaWdodC8yLVQvMi1GLzItR30pYCksTy5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke2IuZ2V0KCJzdHJva2UiKT8/dn07YCl9cmV0dXJuIHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHttPy1ELzI6RC8yLWYuaGVpZ2h0fSlgKSxSLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7bT9mLmhlaWdodC8yK1QvMjotZi5oZWlnaHQvMi1ULzJ9KWApLGplKGUsQyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTyl7aWYoWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxPKSwhZS5sYWJlbClyZXR1cm4gWWUucmVjdChlLE8pO2xldCBOPWUueD8/MCxQPWUueT8/MCxGPWUuaGVpZ2h0Pz8wLEI9W107cmV0dXJuIG0/Qj1be3g6Ti1mLndpZHRoLzIseTpQLUYvMn0se3g6TitmLndpZHRoLzIseTpQLUYvMn0se3g6TitmLndpZHRoLzIseTpQLUYvMitmLmhlaWdodCtUfSx7eDpOK3kvMix5OlAtRi8yK2YuaGVpZ2h0K1R9LHt4Ok4reS8yLHk6UCtGLzJ9LHt4Ok4teS8yLHk6UCtGLzJ9LHt4Ok4teS8yLHk6UC1GLzIrZi5oZWlnaHQrVH0se3g6Ti1mLndpZHRoLzIseTpQLUYvMitmLmhlaWdodCtUfV06Qj1be3g6Ti15LzIseTpQLUYvMn0se3g6Tit5LzIseTpQLUYvMn0se3g6Tit5LzIseTpQLUYvMitnfSx7eDpOK2Yud2lkdGgvMix5OlAtRi8yK2d9LHt4Ok4rZi53aWR0aC8yLzIseTpQK0YvMn0se3g6Ti1mLndpZHRoLzIseTpQK0YvMn0se3g6Ti1mLndpZHRoLzIseTpQLUYvMitnfSx7eDpOLXkvMix5OlAtRi8yK2d9XSxZZS5wb2x5Z29uKGUsQixPKX0saH12YXIgREs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3V0KCk7c3UoKTtxdCgpO1hoKCk7WHQoKTtPdCgpO28oTEssImljb25TcXVhcmUiKX0pO2FzeW5jIGZ1bmN0aW9uIE5LKHQsZSx7Y29uZmlnOntmbG93Y2hhcnQ6cn19KXtsZXQgbj1uZXcgSW1hZ2U7bi5zcmM9ZT8uaW1nPz8iIixhd2FpdCBuLmRlY29kZSgpO2xldCBpPU51bWJlcihuLm5hdHVyYWxXaWR0aC50b1N0cmluZygpLnJlcGxhY2UoInB4IiwiIikpLGE9TnVtYmVyKG4ubmF0dXJhbEhlaWdodC50b1N0cmluZygpLnJlcGxhY2UoInB4IiwiIikpO2UuaW1hZ2VBc3BlY3RSYXRpbz1pL2E7bGV0e2xhYmVsU3R5bGVzOnN9PVplKGUpO2UubGFiZWxTdHlsZT1zO2xldCBsPXI/LndyYXBwaW5nV2lkdGg7ZS5kZWZhdWx0V2lkdGg9cj8ud3JhcHBpbmdXaWR0aDtsZXQgdT1NYXRoLm1heChlLmxhYmVsP2w/PzA6MCxlPy5hc3NldFdpZHRoPz9pKSxoPWUuY29uc3RyYWludD09PSJvbiImJmU/LmFzc2V0SGVpZ2h0P2UuYXNzZXRIZWlnaHQqZS5pbWFnZUFzcGVjdFJhdGlvOnUsZj1lLmNvbnN0cmFpbnQ9PT0ib24iP2gvZS5pbWFnZUFzcGVjdFJhdGlvOmU/LmFzc2V0SGVpZ2h0Pz9hO2Uud2lkdGg9TWF0aC5tYXgoaCxsPz8wKTtsZXR7c2hhcGVTdmc6ZCxiYm94OnAsbGFiZWw6bX09YXdhaXQgc3QodCxlLCJpbWFnZS1zaGFwZSBkZWZhdWx0IiksZz1lLnBvcz09PSJ0Iix5PS1oLzIsdj0tZi8yLHg9ZS5sYWJlbD84OjAsYj1YZS5zdmcoZCksdz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHcucm91Z2huZXNzPTAsdy5maWxsU3R5bGU9InNvbGlkIik7bGV0IF89Yi5yZWN0YW5nbGUoeSx2LGgsZix3KSxUPU1hdGgubWF4KGgscC53aWR0aCksRT1mK3AuaGVpZ2h0K3gsTD1iLnJlY3RhbmdsZSgtVC8yLC1FLzIsVCxFLHsuLi53LGZpbGw6Im5vbmUiLHN0cm9rZToibm9uZSJ9KSxTPWQuaW5zZXJ0KCgpPT5fLCI6Zmlyc3QtY2hpbGQiKSxBPWQuaW5zZXJ0KCgpPT5MKTtpZihlLmltZyl7bGV0IEk9ZC5hcHBlbmQoImltYWdlIik7SS5hdHRyKCJocmVmIixlLmltZyksSS5hdHRyKCJ3aWR0aCIsaCksSS5hdHRyKCJoZWlnaHQiLGYpLEkuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxJLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1oLzJ9LCR7Zz9FLzItZjotRS8yfSlgKX1yZXR1cm4gbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcC53aWR0aC8yLShwLngtKHAubGVmdD8/MCkpfSwke2c/LWYvMi1wLmhlaWdodC8yLXgvMjpmLzItcC5oZWlnaHQvMit4LzJ9KWApLFMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtnP3AuaGVpZ2h0LzIreC8yOi1wLmhlaWdodC8yLXgvMn0pYCksamUoZSxBKSxlLmludGVyc2VjdD1mdW5jdGlvbihJKXtpZihZLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEkpLCFlLmxhYmVsKXJldHVybiBZZS5yZWN0KGUsSSk7bGV0IEQ9ZS54Pz8wLGs9ZS55Pz8wLFI9ZS5oZWlnaHQ/PzAsQz1bXTtyZXR1cm4gZz9DPVt7eDpELXAud2lkdGgvMix5OmstUi8yfSx7eDpEK3Aud2lkdGgvMix5OmstUi8yfSx7eDpEK3Aud2lkdGgvMix5OmstUi8yK3AuaGVpZ2h0K3h9LHt4OkQraC8yLHk6ay1SLzIrcC5oZWlnaHQreH0se3g6RCtoLzIseTprK1IvMn0se3g6RC1oLzIseTprK1IvMn0se3g6RC1oLzIseTprLVIvMitwLmhlaWdodCt4fSx7eDpELXAud2lkdGgvMix5OmstUi8yK3AuaGVpZ2h0K3h9XTpDPVt7eDpELWgvMix5OmstUi8yfSx7eDpEK2gvMix5OmstUi8yfSx7eDpEK2gvMix5OmstUi8yK2Z9LHt4OkQrcC53aWR0aC8yLHk6ay1SLzIrZn0se3g6RCtwLndpZHRoLzIvMix5OmsrUi8yfSx7eDpELXAud2lkdGgvMix5OmsrUi8yfSx7eDpELXAud2lkdGgvMix5OmstUi8yK2Z9LHt4OkQtaC8yLHk6ay1SLzIrZn1dLFllLnBvbHlnb24oZSxDLEkpfSxkfXZhciBSSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7dXQoKTtxdCgpO1h0KCk7T3QoKTtvKE5LLCJpbWFnZVNxdWFyZSIpfSk7YXN5bmMgZnVuY3Rpb24gTUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksdT1be3g6MCx5OjB9LHt4OnMseTowfSx7eDpzKzMqbC82LHk6LWx9LHt4Oi0zKmwvNix5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09V3QodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1JYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIElLPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO28oTUssImludl90cmFwZXpvaWQiKX0pO2FzeW5jIGZ1bmN0aW9uIFBkKHQsZSxyKXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVplKGUpO2UubGFiZWxTdHlsZT1uO2xldHtzaGFwZVN2ZzphLGJib3g6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPU1hdGgubWF4KHMud2lkdGgrci5sYWJlbFBhZGRpbmdYKjIsZT8ud2lkdGh8fDApLHU9TWF0aC5tYXgocy5oZWlnaHQrci5sYWJlbFBhZGRpbmdZKjIsZT8uaGVpZ2h0fHwwKSxoPS1sLzIsZj0tdS8yLGQse3J4OnAscnk6bX09ZSx7Y3NzU3R5bGVzOmd9PWU7aWYocj8ucngmJnIucnkmJihwPXIucngsbT1yLnJ5KSxlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHk9WGUuc3ZnKGEpLHY9S2UoZSx7fSkseD1wfHxtP3kucGF0aChQYShoLGYsbCx1LHB8fDApLHYpOnkucmVjdGFuZ2xlKGgsZixsLHUsdik7ZD1hLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixHbihnKSl9ZWxzZSBkPWEuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixpKS5hdHRyKCJyeCIsR24ocCkpLmF0dHIoInJ5IixHbihtKSkuYXR0cigieCIsaCkuYXR0cigieSIsZikuYXR0cigid2lkdGgiLGwpLmF0dHIoImhlaWdodCIsdSk7cmV0dXJuIGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFllLnJlY3QoZSx5KX0sYX12YXIgTXY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WGgoKTtYdCgpO2p0KCk7aHIoKTtvKFBkLCJkcmF3UmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gT0sodCxlKXtsZXR7c2hhcGVTdmc6cixiYm94Om4sbGFiZWw6aX09YXdhaXQgc3QodCxlLCJsYWJlbCIpLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYS5hdHRyKCJ3aWR0aCIsLjEpLmF0dHIoImhlaWdodCIsLjEpLHIuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0obi53aWR0aC8yKS0obi54LShuLmxlZnQ/PzApKX0sICR7LShuLmhlaWdodC8yKS0obi55LShuLnRvcD8/MCkpfSlgKSxqZShlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBZZS5yZWN0KGUsdSl9LHJ9dmFyIFBLPU0oKCk9PnsidXNlIHN0cmljdCI7TXYoKTtPdCgpO3F0KCk7byhPSywibGFiZWxSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBCSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLHU9W3t4OjAseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDotKDMqbCkvNix5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09V3QodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1JYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIEZLPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO28oQkssImxlYW5fbGVmdCIpfSk7YXN5bmMgZnVuY3Rpb24geksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCksZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCksZT8uaGVpZ2h0Pz8wKSx1PVt7eDotMypsLzYseTowfSx7eDpzLHk6MH0se3g6cyszKmwvNix5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9WGUuc3ZnKGkpLHA9S2UoZSx7fSksbT1XdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPUlhKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxqZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBZZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgR0s9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO091KCk7byh6SywibGVhbl9yaWdodCIpfSk7ZnVuY3Rpb24gJEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWw9IiIsZS5sYWJlbFN0eWxlPXI7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOmF9PWUscz1NYXRoLm1heCgzNSxlPy53aWR0aD8/MCksbD1NYXRoLm1heCgzNSxlPy5oZWlnaHQ/PzApLHU9NyxoPVt7eDpzLHk6MH0se3g6MCx5OmwrdS8yfSx7eDpzLTIqdSx5OmwrdS8yfSx7eDowLHk6MipsfSx7eDpzLHk6bC11LzJ9LHt4OjIqdSx5OmwtdS8yfV0sZj1YZS5zdmcoaSksZD1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGQucm91Z2huZXNzPTAsZC5maWxsU3R5bGU9InNvbGlkIik7bGV0IHA9V3QoaCksbT1mLnBhdGgocCxkKSxnPWkuaW5zZXJ0KCgpPT5tLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYSYmZS5sb29rIT09ImhhbmREcmF3biImJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGEpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZnLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxnLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgtJHtzLzJ9LCR7LWx9KWApLGplKGUsZyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFkuaW5mbygibGlnaHRuaW5nQm9sdCBpbnRlcnNlY3QiLGUseSksWWUucG9seWdvbihlLGgseSl9LGl9dmFyIFZLPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO1h0KCk7anQoKTtxdCgpO090KCk7bygkSywibGlnaHRuaW5nQm9sdCIpfSk7YXN5bmMgZnVuY3Rpb24gVUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlLndpZHRoPz8wKSx1PWwvMixoPXUvKDIuNStsLzUwKSxmPU1hdGgubWF4KGEuaGVpZ2h0K2grKGUucGFkZGluZz8/MCksZS5oZWlnaHQ/PzApLGQ9ZiouMSxwLHtjc3NTdHlsZXM6bX09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGc9WGUuc3ZnKGkpLHk9WTdlKDAsMCxsLGYsdSxoLGQpLHY9cTdlKDAsaCxsLGYsdSxoKSx4PUtlKGUse30pLGI9Zy5wYXRoKHkseCksdz1nLnBhdGgodix4KTtpLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJsaW5lIikscD1pLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIikscC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJnAuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IGc9VzdlKDAsMCxsLGYsdSxoLGQpO3A9aS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixnKS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixHbihtKSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBwLmF0dHIoImxhYmVsLW9mZnNldC15IixoKSxwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzJ9LCAkey0oZi8yK2gpfSlgKSxqZShlLHApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK2gtKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZyl7bGV0IHk9WWUucmVjdChlLGcpLHY9eS54LShlLng/PzApO2lmKHUhPTAmJihNYXRoLmFicyh2KTwoZS53aWR0aD8/MCkvMnx8TWF0aC5hYnModik9PShlLndpZHRoPz8wKS8yJiZNYXRoLmFicyh5LnktKGUueT8/MCkpPihlLmhlaWdodD8/MCkvMi1oKSl7bGV0IHg9aCpoKigxLXYqdi8odSp1KSk7eD4wJiYoeD1NYXRoLnNxcnQoeCkpLHg9aC14LGcueS0oZS55Pz8wKT4wJiYoeD0teCkseS55Kz14fXJldHVybiB5fSxpfXZhciBXN2UsWTdlLHE3ZSxISz1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7aHIoKTtXN2U9bygodCxlLHIsbixpLGEscyk9PltgTSR7dH0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWAsYE0ke3R9LCR7ZSthK3N9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZUN5bGluZGVyUGF0aEQiKSxZN2U9bygodCxlLHIsbixpLGEscyk9PltgTSR7dH0sJHtlK2F9YCxgTSR7dCtyfSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWAsYE0ke3R9LCR7ZSthK3N9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLHE3ZT1vKCh0LGUscixuLGksYSk9PltgTSR7dC1yLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhVSywibGluZWRDeWxpbmRlciIpfSk7YXN5bmMgZnVuY3Rpb24gV0sodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPXUraCx7Y3NzU3R5bGVzOmR9PWUscD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9W3t4Oi1sLzItbC8yKi4xLHk6LWYvMn0se3g6LWwvMi1sLzIqLjEseTpmLzJ9LC4uLldvKC1sLzItbC8yKi4xLGYvMixsLzIrbC8yKi4xLGYvMixoLC44KSx7eDpsLzIrbC8yKi4xLHk6LWYvMn0se3g6LWwvMi1sLzIqLjEseTotZi8yfSx7eDotbC8yLHk6LWYvMn0se3g6LWwvMix5OmYvMioxLjF9LHt4Oi1sLzIseTotZi8yfV0seT1wLnBvbHlnb24oZy5tYXAoeD0+W3gueCx4LnldKSxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKStsLzIqLjEvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBZZS5wb2x5Z29uKGUsZyx4KX0saX12YXIgWUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7anQoKTtYdCgpO28oV0ssImxpbmVkV2F2ZUVkZ2VkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gcUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PVt7eDpmLWgseTpkK2h9LHt4OmYtaCx5OmQrdStofSx7eDpmK2wtaCx5OmQrdStofSx7eDpmK2wtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkK3UtaH0se3g6ZitsK2gseTpkK3UtaH0se3g6ZitsK2gseTpkLWh9LHt4OmYraCx5OmQtaH0se3g6ZitoLHk6ZH0se3g6Zix5OmR9LHt4OmYseTpkK2h9XSx2PVt7eDpmLHk6ZCtofSx7eDpmK2wtaCx5OmQraH0se3g6ZitsLWgseTpkK3V9LHt4OmYrbCx5OmQrdX0se3g6ZitsLHk6ZH0se3g6Zix5OmR9XTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9V3QoeSksYj1tLnBhdGgoeCxnKSx3PVd0KHYpLF89bS5wYXRoKHcsey4uLmcsZmlsbDoibm9uZSJ9KSxUPWkuaW5zZXJ0KCgpPT5fLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gVC5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLFQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLWgtKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUseSxFKX0saX12YXIgWEs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO1h0KCk7anQoKTtxdCgpO28ocUssIm11bHRpUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gaksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPXUraCxkPS1sLzIscD0tZi8yLG09NSx7Y3NzU3R5bGVzOmd9PWUseT1XbyhkLW0scCtmK20sZCtsLW0scCtmK20saCwuOCksdj15Py5beS5sZW5ndGgtMV0seD1be3g6ZC1tLHk6cCttfSx7eDpkLW0seTpwK2YrbX0sLi4ueSx7eDpkK2wtbSx5OnYueS1tfSx7eDpkK2wseTp2LnktbX0se3g6ZCtsLHk6di55LTIqbX0se3g6ZCtsK20seTp2LnktMiptfSx7eDpkK2wrbSx5OnAtbX0se3g6ZCttLHk6cC1tfSx7eDpkK20seTpwfSx7eDpkLHk6cH0se3g6ZCx5OnArbX1dLGI9W3t4OmQseTpwK219LHt4OmQrbC1tLHk6cCttfSx7eDpkK2wtbSx5OnYueS1tfSx7eDpkK2wseTp2LnktbX0se3g6ZCtsLHk6cH0se3g6ZCx5OnB9XSx3PVhlLnN2ZyhpKSxfPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoXy5yb3VnaG5lc3M9MCxfLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgVD1XdCh4KSxFPXcucGF0aChULF8pLEw9V3QoYiksUz13LnBhdGgoTCxfKSxBPWkuaW5zZXJ0KCgpPT5FLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gQS5pbnNlcnQoKCk9PlMpLEEuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxnJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZyksbiYmZS5sb29rIT09ImhhbmREcmF3biImJkEuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHstaC8yfSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS1tLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK20taC8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUsQSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7cmV0dXJuIFllLnBvbHlnb24oZSx4LEkpfSxpfXZhciBLSz1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtqdCgpO1h0KCk7byhqSywibXVsdGlXYXZlRWRnZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIFFLKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09WmUoZSk7ZS5sYWJlbFN0eWxlPW4sZS51c2VIdG1sTGFiZWxzfHxDcigpLmZsb3djaGFydD8uaHRtbExhYmVscyE9PSExfHwoZS5jZW50ZXJMYWJlbD0hMCk7bGV0e3NoYXBlU3ZnOnMsYmJveDpsfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHU9TWF0aC5tYXgobC53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPS11LzIsZD0taC8yLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhzKSxnPUtlKGUse2ZpbGw6ci5ub3RlQmtnQ29sb3Isc3Ryb2tlOnIubm90ZUJvcmRlckNvbG9yfSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PW0ucmVjdGFuZ2xlKGYsZCx1LGgsZyksdj1zLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksaSYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLGplKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFllLnJlY3QoZSx4KX0sc312YXIgWks9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3F0KCk7WHQoKTtPdCgpO1phKCk7byhRSywibm90ZSIpfSk7YXN5bmMgZnVuY3Rpb24gSksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPWEud2lkdGgrZS5wYWRkaW5nLGw9YS5oZWlnaHQrZS5wYWRkaW5nLHU9cytsLGg9W3t4OnUvMix5OjB9LHt4OnUseTotdS8yfSx7eDp1LzIseTotdX0se3g6MCx5Oi11LzJ9XSxmLHtjc3NTdHlsZXM6ZH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7fSksZz1YN2UoMCwwLHUpLHk9cC5wYXRoKGcsbSk7Zj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7dS8yfSlgKSxkJiZmLmF0dHIoInN0eWxlIixkKX1lbHNlIGY9SWEoaSx1LHUsaCk7cmV0dXJuIG4mJmYuYXR0cigic3R5bGUiLG4pLGplKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFkuZGVidWcoYEFQQTEyIEludGVyc2VjdCBjYWxsZWQgU1BMSVQKcG9pbnQ6YCxwLGAKbm9kZToKYCxlLGAKcmVzOmAsWWUucG9seWdvbihlLGgscCkpLFllLnBvbHlnb24oZSxoLHApfSxpfXZhciBYN2UsZVE9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO090KCk7cXQoKTtYdCgpO2p0KCk7T3UoKTtYN2U9bygodCxlLHIpPT5bYE0ke3Qrci8yfSwke2V9YCxgTCR7dCtyfSwke2Utci8yfWAsYEwke3Qrci8yfSwke2Utcn1gLGBMJHt0fSwke2Utci8yfWAsIloiXS5qb2luKCIgIiksImNyZWF0ZURlY2lzaW9uQm94UGF0aEQiKTtvKEpLLCJxdWVzdGlvbiIpfSk7YXN5bmMgZnVuY3Rpb24gdFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLGg9LWwvMixmPS11LzIsZD1mLzIscD1be3g6aCtkLHk6Zn0se3g6aCx5OjB9LHt4OmgrZCx5Oi1mfSx7eDotaCx5Oi1mfSx7eDotaCx5OmZ9XSx7Y3NzU3R5bGVzOm19PWUsZz1YZS5zdmcoaSkseT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9V3QocCkseD1nLnBhdGgodix5KSxiPWkuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmYi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksYi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZC8yfSwwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWQvMi1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMiktKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxiKSxlLmludGVyc2VjdD1mdW5jdGlvbih3KXtyZXR1cm4gWWUucG9seWdvbihlLHAsdyl9LGl9dmFyIHJRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtvKHRRLCJyZWN0X2xlZnRfaW52X2Fycm93Iil9KTtmdW5jdGlvbiBqN2UodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1hc3luYyBmdW5jdGlvbiBLN2UodCl7bGV0IGU9VmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSkscj1lLmFwcGVuZCgieGh0bWw6ZGl2Iiksbj10LmxhYmVsO3QubGFiZWwmJnlpKHQubGFiZWwpJiYobj1hd2FpdCBiaCh0LmxhYmVsLnJlcGxhY2UocWUubGluZUJyZWFrUmVnZXgsYApgKSxwZSgpKSk7bGV0IGk9dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIHIuaHRtbCgnPHNwYW4gY2xhc3M9IicraSsnIiAnKyh0LmxhYmVsU3R5bGU/J3N0eWxlPSInK3QubGFiZWxTdHlsZSsnIic6IiIpKyI+IituKyI8L3NwYW4+IiksajdlKHIsdC5sYWJlbFN0eWxlKSxyLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksci5zdHlsZSgicGFkZGluZy1yaWdodCIsIjFweCIpLHIuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksci5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxlLm5vZGUoKX12YXIgUTdlLENjLFk1PU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTt1dCgpO1Z0KCk7ZnIoKTtocigpO28oajdlLCJhcHBseVN0eWxlIik7byhLN2UsImFkZEh0bWxMYWJlbCIpO1E3ZT1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9dHx8IiI7aWYodHlwZW9mIGk9PSJvYmplY3QiJiYoaT1pWzBdKSx4cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7aT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxZLmluZm8oInZlcnRleFRleHQiK2kpO2xldCBhPXtpc05vZGU6bixsYWJlbDpNYShpKS5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csbD0+YDxpIGNsYXNzPScke2wucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKSxsYWJlbFN0eWxlOmUmJmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGF3YWl0IEs3ZShhKX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBzPVtdO3R5cGVvZiBpPT0ic3RyaW5nIj9zPWkuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP3M9aTpzPVtdO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHI/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1sLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfX0sImNyZWF0ZUxhYmVsIiksQ2M9UTdlfSk7YXN5bmMgZnVuY3Rpb24gblEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldCBpO2UuY3NzQ2xhc3Nlcz9pPSJub2RlICIrZS5jc3NDbGFzc2VzOmk9Im5vZGUgZGVmYXVsdCI7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9YS5pbnNlcnQoImciKSxsPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixuKSx1PWUuZGVzY3JpcHRpb24saD1lLmxhYmVsLGY9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgQ2MoaCxlLmxhYmVsU3R5bGUsITAsITApKSxkPXt3aWR0aDowLGhlaWdodDowfTtpZih4cihwZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKXtsZXQgUz1mLmNoaWxkcmVuWzBdLEE9VmUoZik7ZD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLGQud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixkLmhlaWdodCl9WS5pbmZvKCJUZXh0IDIiLHUpO2xldCBwPXV8fFtdLG09Zi5nZXRCQm94KCksZz1sLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBDYyhwLmpvaW4/cC5qb2luKCI8YnIvPiIpOnAsZS5sYWJlbFN0eWxlLCEwLCEwKSkseT1nLmNoaWxkcmVuWzBdLHY9VmUoZyk7ZD15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGQud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixkLmhlaWdodCk7bGV0IHg9KGUucGFkZGluZ3x8MCkvMjtWZShnKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGQud2lkdGg+bS53aWR0aD8wOihtLndpZHRoLWQud2lkdGgpLzIpKyIsICIrKG0uaGVpZ2h0K3grNSkrIikiKSxWZShmKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGQud2lkdGg8bS53aWR0aD8wOi0obS53aWR0aC1kLndpZHRoKS8yKSsiLCAwKSIpLGQ9bC5ub2RlKCkuZ2V0QkJveCgpLGwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKygtZC5oZWlnaHQvMi14KzMpKyIpIik7bGV0IGI9ZC53aWR0aCsoZS5wYWRkaW5nfHwwKSx3PWQuaGVpZ2h0KyhlLnBhZGRpbmd8fDApLF89LWQud2lkdGgvMi14LFQ9LWQuaGVpZ2h0LzIteCxFLEw7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBTPVhlLnN2ZyhhKSxBPUtlKGUse30pLEk9Uy5wYXRoKFBhKF8sVCxiLHcsZS5yeHx8MCksQSksRD1TLmxpbmUoLWQud2lkdGgvMi14LC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCxkLndpZHRoLzIreCwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gsQSk7TD1hLmluc2VydCgoKT0+KFkuZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsSSksRCksIjpmaXJzdC1jaGlsZCIpLEU9YS5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEkpLEkpLCI6Zmlyc3QtY2hpbGQiKX1lbHNlIEU9cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxMPXMuaW5zZXJ0KCJsaW5lIiksRS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoIngiLC1kLndpZHRoLzIteCkuYXR0cigieSIsLWQuaGVpZ2h0LzIteCkuYXR0cigid2lkdGgiLGQud2lkdGgrKGUucGFkZGluZ3x8MCkpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQrKGUucGFkZGluZ3x8MCkpLEwuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1kLndpZHRoLzIteCkuYXR0cigieDIiLGQud2lkdGgvMit4KS5hdHRyKCJ5MSIsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4KS5hdHRyKCJ5MiIsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4KTtyZXR1cm4gamUoZSxFKSxlLmludGVyc2VjdD1mdW5jdGlvbihTKXtyZXR1cm4gWWUucmVjdChlLFMpfSxhfXZhciBpUT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7ZnIoKTtPdCgpO1k1KCk7cXQoKTtYdCgpO2p0KCk7VnQoKTtYaCgpO3V0KCk7byhuUSwicmVjdFdpdGhUaXRsZSIpfSk7YXN5bmMgZnVuY3Rpb24gYVEodCxlKXtsZXQgcj17cng6NSxyeTo1LGNsYXNzZXM6IiIsbGFiZWxQYWRkaW5nWDooZT8ucGFkZGluZ3x8MCkqMSxsYWJlbFBhZGRpbmdZOihlPy5wYWRkaW5nfHwwKSoxfTtyZXR1cm4gUGQodCxlLHIpfXZhciBzUT1NKCgpPT57InVzZSBzdHJpY3QiO012KCk7byhhUSwicm91bmRlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIG9RKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWU/LnBhZGRpbmc/PzAsdT1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9LWEud2lkdGgvMi1sLGQ9LWEuaGVpZ2h0LzItbCx7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9W3t4OmYseTpkfSx7eDpmK3UrOCx5OmR9LHt4OmYrdSs4LHk6ZCtofSx7eDpmLTgseTpkK2h9LHt4OmYtOCx5OmR9LHt4OmYseTpkfSx7eDpmLHk6ZCtofV0sdj1tLnBvbHlnb24oeS5tYXAoYj0+W2IueCxiLnldKSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixHbihwKSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzIrNCsoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstaC8yKyhlLnBhZGRpbmc/PzApLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnJlY3QoZSxiKX0saX12YXIgbFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7byhvUSwic2hhZGVkUHJvY2VzcyIpfSk7YXN5bmMgZnVuY3Rpb24gY1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPS1sLzIsZj0tdS8yLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhpKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6aCx5OmZ9LHt4OmgseTpmK3V9LHt4OmgrbCx5OmYrdX0se3g6aCtsLHk6Zi11LzJ9XSx5PVd0KGcpLHY9cC5wYXRoKHksbSkseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSx4LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke3UvNH0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwgJHstdS80KyhlLnBhZGRpbmc/PzApLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnBvbHlnb24oZSxnLGIpfSxpfXZhciB1UT1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7byhjUSwic2xvcGVkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gaFEodCxlKXtsZXQgcj17cng6MCxyeTowLGNsYXNzZXM6IiIsbGFiZWxQYWRkaW5nWDooZT8ucGFkZGluZ3x8MCkqMixsYWJlbFBhZGRpbmdZOihlPy5wYWRkaW5nfHwwKSoxfTtyZXR1cm4gUGQodCxlLHIpfXZhciBmUT1NKCgpPT57InVzZSBzdHJpY3QiO012KCk7byhoUSwic3F1YXJlUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gZFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPWEuaGVpZ2h0K2UucGFkZGluZyxsPWEud2lkdGgrcy80K2UucGFkZGluZyx1LHtjc3NTdHlsZXM6aH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGY9WGUuc3ZnKGkpLGQ9S2UoZSx7fSkscD1QYSgtbC8yLC1zLzIsbCxzLHMvMiksbT1mLnBhdGgocCxkKTt1PWkuaW5zZXJ0KCgpPT5tLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEduKGgpKX1lbHNlIHU9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInJ4IixzLzIpLmF0dHIoInJ5IixzLzIpLmF0dHIoIngiLC1sLzIpLmF0dHIoInkiLC1zLzIpLmF0dHIoIndpZHRoIixsKS5hdHRyKCJoZWlnaHQiLHMpO3JldHVybiBqZShlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBZZS5yZWN0KGUsZil9LGl9dmFyIHBRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtYaCgpO2hyKCk7byhkUSwic3RhZGl1bSIpfSk7YXN5bmMgZnVuY3Rpb24gbVEodCxlKXtyZXR1cm4gUGQodCxlLHtyeDo1LHJ5OjUsY2xhc3NlczoiZmxvd2NoYXJ0LW5vZGUifSl9dmFyIGdRPU0oKCk9PnsidXNlIHN0cmljdCI7TXYoKTtvKG1RLCJzdGF0ZSIpfSk7ZnVuY3Rpb24geVEodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1aZShlKTtlLmxhYmVsU3R5bGU9bjtsZXR7Y3NzU3R5bGVzOmF9PWUse2xpbmVDb2xvcjpzLHN0YXRlQm9yZGVyOmwsbm9kZUJvcmRlcjp1fT1yLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxmPVhlLnN2ZyhoKSxkPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZC5yb3VnaG5lc3M9MCxkLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgcD1mLmNpcmNsZSgwLDAsMTQsey4uLmQsc3Ryb2tlOnMsc3Ryb2tlV2lkdGg6Mn0pLG09bD8/dSxnPWYuY2lyY2xlKDAsMCw1LHsuLi5kLGZpbGw6bSxzdHJva2U6bSxzdHJva2VXaWR0aDoyLGZpbGxTdHlsZToic29saWQifSkseT1oLmluc2VydCgoKT0+cCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHkuaW5zZXJ0KCgpPT5nKSxhJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixhKSxpJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxqZShlLHkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiBZZS5jaXJjbGUoZSw3LHYpfSxofXZhciB2UT1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7cXQoKTtYdCgpO090KCk7byh5USwic3RhdGVFbmQiKX0pO2Z1bmN0aW9uIHhRKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsaW5lQ29sb3I6bn09cixpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksYTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGw9WGUuc3ZnKGkpLmNpcmNsZSgwLDAsMTQsa2oobikpO2E9aS5pbnNlcnQoKCk9PmwpLGEuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCl9ZWxzZSBhPWkuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxhLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpO3JldHVybiBqZShlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBZZS5jaXJjbGUoZSw3LHMpfSxpfXZhciBiUT1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7cXQoKTtYdCgpO090KCk7byh4USwic3RhdGVTdGFydCIpfSk7YXN5bmMgZnVuY3Rpb24gd1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPShlPy5wYWRkaW5nfHwwKS8yLGw9YS53aWR0aCtlLnBhZGRpbmcsdT1hLmhlaWdodCtlLnBhZGRpbmcsaD0tYS53aWR0aC8yLXMsZj0tYS5oZWlnaHQvMi1zLGQ9W3t4OjAseTowfSx7eDpsLHk6MH0se3g6bCx5Oi11fSx7eDowLHk6LXV9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmwrOCx5OjB9LHt4OmwrOCx5Oi11fSx7eDotOCx5Oi11fSx7eDotOCx5OjB9XTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7fSksZz1wLnJlY3RhbmdsZShoLTgsZixsKzE2LHUsbSkseT1wLmxpbmUoaCxmLGgsZit1LG0pLHY9cC5saW5lKGgrbCxmLGgrbCxmK3UsbSk7aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLGkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtsZXQgeD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikse2Nzc1N0eWxlczpifT1lO3guYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsR24oYikpLGplKGUseCl9ZWxzZXtsZXQgcD1JYShpLGwsdSxkKTtuJiZwLmF0dHIoInN0eWxlIixuKSxqZShlLHApfXJldHVybiBlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWWUucG9seWdvbihlLGQscCl9LGl9dmFyIFRRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO2hyKCk7byh3USwic3Vicm91dGluZSIpfSk7YXN5bmMgZnVuY3Rpb24ga1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksdT0tcy8yLGg9LWwvMixmPS4yKmwsZD0uMipsLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhpKSxnPUtlKGUse30pLHk9W3t4OnUtZi8yLHk6aH0se3g6dStzK2YvMix5Omh9LHt4OnUrcytmLzIseTpoK2x9LHt4OnUtZi8yLHk6aCtsfV0sdj1be3g6dStzLWYvMix5OmgrbH0se3g6dStzK2YvMix5OmgrbH0se3g6dStzK2YvMix5OmgrbC1kfV07ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVd0KHkpLGI9bS5wYXRoKHgsZyksdz1XdCh2KSxfPW0ucGF0aCh3LHsuLi5nLGZpbGxTdHlsZToic29saWQifSksVD1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFQuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUseSxFKX0saX12YXIgRVE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO1h0KCk7anQoKTtxdCgpO28oa1EsInRhZ2dlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIFNRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD11LzQsZj0uMipsLGQ9LjIqdSxwPXUraCx7Y3NzU3R5bGVzOm19PWUsZz1YZS5zdmcoaSkseT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9W3t4Oi1sLzItbC8yKi4xLHk6cC8yfSwuLi5XbygtbC8yLWwvMiouMSxwLzIsbC8yK2wvMiouMSxwLzIsaCwuOCkse3g6bC8yK2wvMiouMSx5Oi1wLzJ9LHt4Oi1sLzItbC8yKi4xLHk6LXAvMn1dLHg9LWwvMitsLzIqLjEsYj0tcC8yLWQqLjQsdz1be3g6eCtsLWYseTooYit1KSoxLjR9LHt4OngrbCx5OmIrdS1kfSx7eDp4K2wseTooYit1KSouOX0sLi4uV28oeCtsLChiK3UpKjEuMyx4K2wtZiwoYit1KSoxLjUsLXUqLjAzLC41KV0sXz1XdCh2KSxUPWcucGF0aChfLHkpLEU9V3QodyksTD1nLnBhdGgoRSx7Li4ueSxmaWxsU3R5bGU6InNvbGlkIn0pLFM9aS5pbnNlcnQoKCk9PkwsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmUy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBZZS5wb2x5Z29uKGUsdixBKX0saX12YXIgQ1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7anQoKTtYdCgpO28oU1EsInRhZ2dlZFdhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gQVEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrZS5wYWRkaW5nLGU/LndpZHRofHwwKSxsPU1hdGgubWF4KGEuaGVpZ2h0K2UucGFkZGluZyxlPy5oZWlnaHR8fDApLHU9LXMvMixoPS1sLzIsZj1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBmLmF0dHIoImNsYXNzIiwidGV4dCIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyeCIsMCkuYXR0cigicnkiLDApLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGplKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIFllLnJlY3QoZSxkKX0saX12YXIgX1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtvKEFRLCJ0ZXh0Iil9KTthc3luYyBmdW5jdGlvbiBMUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnMsaGFsZlBhZGRpbmc6bH09YXdhaXQgc3QodCxlLG90KGUpKSx1PWUubG9vaz09PSJuZW8iP2wqMjpsLGg9YS5oZWlnaHQrdSxmPWgvMixkPWYvKDIuNStoLzUwKSxwPWEud2lkdGgrZCt1LHtjc3NTdHlsZXM6bX09ZSxnO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgeT1YZS5zdmcoaSksdj1KN2UoMCwwLHAsaCxkLGYpLHg9ZUFlKDAsMCxwLGgsZCxmKSxiPXkucGF0aCh2LEtlKGUse30pKSx3PXkucGF0aCh4LEtlKGUse2ZpbGw6Im5vbmUifSkpO2c9aS5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLGc9aS5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLGcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZnLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCB5PVo3ZSgwLDAscCxoLGQsZik7Zz1pLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHkpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEduKG0pKS5hdHRyKCJzdHlsZSIsbiksZy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pfXJldHVybiBnLmF0dHIoImxhYmVsLW9mZnNldC14IixkKSxnLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1wLzJ9LCAke2gvMn0gKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLWQtKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMiktKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtsZXQgdj1ZZS5yZWN0KGUseSkseD12LnktKGUueT8/MCk7aWYoZiE9MCYmKE1hdGguYWJzKHgpPChlLmhlaWdodD8/MCkvMnx8TWF0aC5hYnMoeCk9PShlLmhlaWdodD8/MCkvMiYmTWF0aC5hYnModi54LShlLng/PzApKT4oZS53aWR0aD8/MCkvMi1kKSl7bGV0IGI9ZCpkKigxLXgqeC8oZipmKSk7YiE9MCYmKGI9TWF0aC5zcXJ0KGIpKSxiPWQtYix5LngtKGUueD8/MCk+MCYmKGI9LWIpLHYueCs9Yn1yZXR1cm4gdn0saX12YXIgWjdlLEo3ZSxlQWUsRFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO1h0KCk7anQoKTtxdCgpO2hyKCk7WjdlPW8oKHQsZSxyLG4saSxhKT0+YE0ke3R9LCR7ZX0KICAgIGEke2l9LCR7YX0gMCwwLDEgMCwkey1ufQogICAgbCR7cn0sMAogICAgYSR7aX0sJHthfSAwLDAsMSAwLCR7bn0KICAgIE0ke3J9LCR7LW59CiAgICBhJHtpfSwke2F9IDAsMCwwIDAsJHtufQogICAgbCR7LXJ9LDBgLCJjcmVhdGVDeWxpbmRlclBhdGhEIiksSjdlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0fSwke2V9YCxgTSR7dCtyfSwke2V9YCxgYSR7aX0sJHthfSAwLDAsMCAwLCR7LW59YCxgbCR7LXJ9LDBgLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWAsYGwke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLGVBZT1vKCh0LGUscixuLGksYSk9PltgTSR7dCtyLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhMUSwidGlsdGVkQ3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIE5RKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IHN0KHQsZSxvdChlKSkscz1hLndpZHRoK2UucGFkZGluZyxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PVt7eDotMypsLzYseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9WGUuc3ZnKGkpLHA9S2UoZSx7fSksbT1XdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPUlhKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxqZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBZZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgUlE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO091KCk7byhOUSwidHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBNUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9NjAsbD0yMCx1PU1hdGgubWF4KHMsYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwsYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLHtjc3NTdHlsZXM6Zn09ZSxkPVhlLnN2ZyhpKSxwPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYocC5yb3VnaG5lc3M9MCxwLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgbT1be3g6LXUvMiouOCx5Oi1oLzJ9LHt4OnUvMiouOCx5Oi1oLzJ9LHt4OnUvMix5Oi1oLzIqLjZ9LHt4OnUvMix5OmgvMn0se3g6LXUvMix5OmgvMn0se3g6LXUvMix5Oi1oLzIqLjZ9XSxnPVd0KG0pLHk9ZC5wYXRoKGcscCksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBZZS5wb2x5Z29uKGUsbSx4KX0saX12YXIgSVE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28oTVEsInRyYXBlem9pZGFsUGVudGFnb24iKX0pO2FzeW5jIGZ1bmN0aW9uIE9RKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPXhyKHBlKCkuZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSx1PWEud2lkdGgrKGUucGFkZGluZz8/MCksaD11K2EuaGVpZ2h0LGY9dSthLmhlaWdodCxkPVt7eDowLHk6MH0se3g6Zix5OjB9LHt4OmYvMix5Oi1ofV0se2Nzc1N0eWxlczpwfT1lLG09WGUuc3ZnKGkpLGc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PVd0KGQpLHY9bS5wYXRoKHksZykseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7aC8yfSlgKTtyZXR1cm4gcCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD11LGUuaGVpZ2h0PWgsamUoZSx4KSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2gvMi0oYS5oZWlnaHQrKGUucGFkZGluZz8/MCkvKGw/MjoxKS0oYS55LShhLnRvcD8/MCkpKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFkuaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGQsYiksWWUucG9seWdvbihlLGQsYil9LGl9dmFyIFBRPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO090KCk7ZnIoKTtWdCgpO28oT1EsInRyaWFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBCUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IHN0KHQsZSxvdChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS84LGY9dStoLHtjc3NTdHlsZXM6ZH09ZSxtPTcwLWwsZz1tPjA/bS8yOjAseT1YZS5zdmcoaSksdj1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHYucm91Z2huZXNzPTAsdi5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9W3t4Oi1sLzItZyx5OmYvMn0sLi4uV28oLWwvMi1nLGYvMixsLzIrZyxmLzIsaCwuOCkse3g6bC8yK2cseTotZi8yfSx7eDotbC8yLWcseTotZi8yfV0sYj1XdCh4KSx3PXkucGF0aChiLHYpLF89aS5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBfLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZfLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxfLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLF8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBZZS5wb2x5Z29uKGUseCxUKX0saX12YXIgRlE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7anQoKTtYdCgpO28oQlEsIndhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gelEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPTEwMCxsPTUwLHU9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPXUvaCxkPXUscD1oO2Q+cCpmP3A9ZC9mOmQ9cCpmLGQ9TWF0aC5tYXgoZCxzKSxwPU1hdGgubWF4KHAsbCk7bGV0IG09TWF0aC5taW4ocCouMixwLzQpLGc9cCttKjIse2Nzc1N0eWxlczp5fT1lLHY9WGUuc3ZnKGkpLHg9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih4LnJvdWdobmVzcz0wLHguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBiPVt7eDotZC8yLHk6Zy8yfSwuLi5XbygtZC8yLGcvMixkLzIsZy8yLG0sMSkse3g6ZC8yLHk6LWcvMn0sLi4uV28oZC8yLC1nLzIsLWQvMiwtZy8yLG0sLTEpXSx3PVd0KGIpLF89di5wYXRoKHcseCksVD1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSx5JiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIseSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGplKGUsVCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFllLnBvbHlnb24oZSxiLEUpfSxpfXZhciBHUT1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7byh6USwid2F2ZVJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gJFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PVt7eDpmLWgseTpkLWh9LHt4OmYtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkLWh9XSx2PWBNJHtmLWh9LCR7ZC1ofSBMJHtmK2x9LCR7ZC1ofSBMJHtmK2x9LCR7ZCt1fSBMJHtmLWh9LCR7ZCt1fSBMJHtmLWh9LCR7ZC1ofQogICAgICAgICAgICAgICAgTSR7Zi1ofSwke2R9IEwke2YrbH0sJHtkfQogICAgICAgICAgICAgICAgTSR7Zn0sJHtkLWh9IEwke2Z9LCR7ZCt1fWA7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PW0ucGF0aCh2LGcpLGI9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gvMn0sICR7aC8yfSlgKSxiLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKStoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUsYiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIFllLnBvbHlnb24oZSx5LHcpfSxpfXZhciBWUT1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7WHQoKTtqdCgpO3F0KCk7bygkUSwid2luZG93UGFuZSIpfSk7YXN5bmMgZnVuY3Rpb24gVVEodCxlLHIsbixpPXIuY2xhc3MucGFkZGluZz8/MTIpe2xldCBhPW4/MDozLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxsPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwsZD0wLHA9MCxtPTA7aWYobD1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYW5ub3RhdGlvbi1ncm91cCB0ZXh0IiksZS5hbm5vdGF0aW9ucy5sZW5ndGg+MCl7bGV0IGI9ZS5hbm5vdGF0aW9uc1swXTthd2FpdCBxNShsLHt0ZXh0OmBceEFCJHtifVx4QkJgfSwwKSxkPWwubm9kZSgpLmdldEJCb3goKS5oZWlnaHR9dT1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwtZ3JvdXAgdGV4dCIpLGF3YWl0IHE1KHUsZSwwLFsiZm9udC13ZWlnaHQ6IGJvbGRlciJdKTtsZXQgZz11Lm5vZGUoKS5nZXRCQm94KCk7cD1nLmhlaWdodCxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJtZW1iZXJzLWdyb3VwIHRleHQiKTtsZXQgeT0wO2ZvcihsZXQgYiBvZiBlLm1lbWJlcnMpe2xldCB3PWF3YWl0IHE1KGgsYix5LFtiLnBhcnNlQ2xhc3NpZmllcigpXSk7eSs9dythfW09aC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxtPD0wJiYobT1pLzIpLGY9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm1ldGhvZHMtZ3JvdXAgdGV4dCIpO2xldCB2PTA7Zm9yKGxldCBiIG9mIGUubWV0aG9kcyl7bGV0IHc9YXdhaXQgcTUoZixiLHYsW2IucGFyc2VDbGFzc2lmaWVyKCldKTt2Kz13K2F9bGV0IHg9cy5ub2RlKCkuZ2V0QkJveCgpO2lmKGwhPT1udWxsKXtsZXQgYj1sLm5vZGUoKS5nZXRCQm94KCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYi53aWR0aC8yfSlgKX1yZXR1cm4gdS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZy53aWR0aC8yfSwgJHtkfSlgKSx4PXMubm9kZSgpLmdldEJCb3goKSxoLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke2QrcCtpKjJ9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLGYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7ZCtwKyhtP20raSo0OmkqMil9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLHtzaGFwZVN2ZzpzLGJib3g6eH19YXN5bmMgZnVuY3Rpb24gcTUodCxlLHIsbj1bXSl7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLG4uam9pbigiOyAiKSksYT1DcigpLHM9InVzZUh0bWxMYWJlbHMiaW4gZT9lLnVzZUh0bWxMYWJlbHM6eHIoYS5odG1sTGFiZWxzKT8/ITAsbD0iIjsidGV4dCJpbiBlP2w9ZS50ZXh0Omw9ZS5sYWJlbCwhcyYmbC5zdGFydHNXaXRoKCJcXCIpJiYobD1sLnN1YnN0cmluZygxKSkseWkobCkmJihzPSEwKTtsZXQgdT1hd2FpdCBMaShpLHM3KE1hKGwpKSx7d2lkdGg6c28obCxhKSs1MCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIix1c2VIdG1sTGFiZWxzOnN9LGEpLGgsZj0xO2lmKHMpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1WZSh1KTtmPWQuaW5uZXJIVE1MLnNwbGl0KCI8YnI+IikubGVuZ3RoLGQuaW5uZXJIVE1MLmluY2x1ZGVzKCI8L21hdGg+IikmJihmKz1kLmlubmVySFRNTC5zcGxpdCgiPG1yb3c+IikubGVuZ3RoLTEpO2xldCBtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9YS5mb250U2l6ZT8udG9TdHJpbmcoKT8/d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsXz1wYXJzZUludChiLDEwKSo1KyJweCI7eS5zdHlsZS5taW5XaWR0aD1fLHkuc3R5bGUubWF4V2lkdGg9X31lbHNlIHkuc3R5bGUud2lkdGg9IjEwMCUiO3YoeSl9byh4LCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e3kuY29tcGxldGUmJngoKX0pLHkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCl9KSkpfWg9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwLmF0dHIoIndpZHRoIixoLndpZHRoKSxwLmF0dHIoImhlaWdodCIsaC5oZWlnaHQpfWVsc2V7bi5pbmNsdWRlcygiZm9udC13ZWlnaHQ6IGJvbGRlciIpJiZWZSh1KS5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLCIiKSxmPXUuY2hpbGRyZW4ubGVuZ3RoO2xldCBkPXUuY2hpbGRyZW5bMF07KHUudGV4dENvbnRlbnQ9PT0iInx8dS50ZXh0Q29udGVudC5pbmNsdWRlcygiJmd0IikpJiYoZC50ZXh0Q29udGVudD1sWzBdK2wuc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoIiZndDsiLCI+IikucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS50cmltKCksbFsxXT09PSIgIiYmKGQudGV4dENvbnRlbnQ9ZC50ZXh0Q29udGVudFswXSsiICIrZC50ZXh0Q29udGVudC5zdWJzdHJpbmcoMSkpKSxkLnRleHRDb250ZW50PT09InVuZGVmaW5lZCImJihkLnRleHRDb250ZW50PSIiKSxoPXUuZ2V0QkJveCgpfXJldHVybiBpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKC1oLmhlaWdodC8oMipmKStyKSsiKSIpLGguaGVpZ2h0fXZhciBIUT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7WmEoKTtPdCgpO2hyKCk7VnQoKTtQbCgpO2ZyKCk7byhVUSwidGV4dEhlbHBlciIpO28ocTUsImFkZFRleHQiKX0pO2FzeW5jIGZ1bmN0aW9uIFdRKHQsZSl7bGV0IHI9cGUoKSxuPXIuY2xhc3MucGFkZGluZz8/MTIsaT1uLGE9ZS51c2VIdG1sTGFiZWxzPz94cihyLmh0bWxMYWJlbHMpPz8hMCxzPWU7cy5hbm5vdGF0aW9ucz1zLmFubm90YXRpb25zPz9bXSxzLm1lbWJlcnM9cy5tZW1iZXJzPz9bXSxzLm1ldGhvZHM9cy5tZXRob2RzPz9bXTtsZXR7c2hhcGVTdmc6bCxiYm94OnV9PWF3YWl0IFVRKHQsZSxyLGEsaSkse2xhYmVsU3R5bGVzOmgsbm9kZVN0eWxlczpmfT1aZShlKTtlLmxhYmVsU3R5bGU9aCxlLmNzc1N0eWxlcz1zLnN0eWxlc3x8IiI7bGV0IGQ9cy5zdHlsZXM/LmpvaW4oIjsiKXx8Znx8IiI7ZS5jc3NTdHlsZXN8fChlLmNzc1N0eWxlcz1kLnJlcGxhY2VBbGwoIiFpbXBvcnRhbnQiLCIiKS5zcGxpdCgiOyIpKTtsZXQgcD1zLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTAmJiFyLmNsYXNzPy5oaWRlRW1wdHlNZW1iZXJzQm94LG09WGUuc3ZnKGwpLGc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PXUud2lkdGgsdj11LmhlaWdodDtzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/dis9aTpzLm1lbWJlcnMubGVuZ3RoPjAmJnMubWV0aG9kcy5sZW5ndGg9PT0wJiYodis9aSoyKTtsZXQgeD0teS8yLGI9LXYvMix3PW0ucmVjdGFuZ2xlKHgtbixiLW4tKHA/bjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW4vMjowKSx5KzIqbix2KzIqbisocD9uKjI6cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wPy1uOjApLGcpLF89bC5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpO18uYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKTtsZXQgVD1fLm5vZGUoKS5nZXRCQm94KCk7bC5zZWxlY3RBbGwoIi50ZXh0IikuZWFjaCgoQSxJLEQpPT57bGV0IGs9VmUoRFtJXSksUj1rLmF0dHIoInRyYW5zZm9ybSIpLEM9MDtpZihSKXtsZXQgRj1SZWdFeHAoL3RyYW5zbGF0ZVwoKFteLF0rKSwoW14pXSspXCkvKS5leGVjKFIpO0YmJihDPXBhcnNlRmxvYXQoRlsyXSkpfWxldCBPPUMrYituLShwP246cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wPy1uLzI6MCk7YXx8KE8tPTQpO2xldCBOPXg7KGsuYXR0cigiY2xhc3MiKS5pbmNsdWRlcygibGFiZWwtZ3JvdXAiKXx8ay5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJhbm5vdGF0aW9uLWdyb3VwIikpJiYoTj0tay5ub2RlKCk/LmdldEJCb3goKS53aWR0aC8yfHwwLGwuc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaChmdW5jdGlvbihQLEYsQil7d2luZG93LmdldENvbXB1dGVkU3R5bGUoQltGXSkudGV4dEFuY2hvcj09PSJtaWRkbGUiJiYoTj0wKX0pKSxrLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke059LCAke099KWApfSk7bGV0IEU9bC5zZWxlY3QoIi5hbm5vdGF0aW9uLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwLEw9bC5zZWxlY3QoIi5sYWJlbC1ncm91cCIpLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LShwP24vMjowKXx8MCxTPWwuc2VsZWN0KCIubWVtYmVycy1ncm91cCIpLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LShwP24vMjowKXx8MDtpZihzLm1lbWJlcnMubGVuZ3RoPjB8fHMubWV0aG9kcy5sZW5ndGg+MHx8cCl7bGV0IEE9bS5saW5lKFQueCxFK0wrYituLFQueCtULndpZHRoLEUrTCtiK24sZyk7bC5pbnNlcnQoKCk9PkEpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoInN0eWxlIixkKX1pZihwfHxzLm1lbWJlcnMubGVuZ3RoPjB8fHMubWV0aG9kcy5sZW5ndGg+MCl7bGV0IEE9bS5saW5lKFQueCxFK0wrUytiK2kqMituLFQueCtULndpZHRoLEUrTCtTK2IrbitpKjIsZyk7bC5pbnNlcnQoKCk9PkEpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoInN0eWxlIixkKX1pZihzLmxvb2shPT0iaGFuZERyYXduIiYmbC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksXy5zZWxlY3QoIjpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsZCksbC5zZWxlY3RBbGwoIi5kaXZpZGVyIikuc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGQpLGUubGFiZWxTdHlsZT9sLnNlbGVjdEFsbCgic3BhbiIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpOmwuc2VsZWN0QWxsKCJzcGFuIikuYXR0cigic3R5bGUiLGQpLCFhKXtsZXQgQT1SZWdFeHAoL2NvbG9yXHMqOlxzKihbXjtdKikvKSxJPUEuZXhlYyhkKTtpZihJKXtsZXQgRD1JWzBdLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO2wuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoInN0eWxlIixEKX1lbHNlIGlmKGgpe2xldCBEPUEuZXhlYyhoKTtpZihEKXtsZXQgaz1EWzBdLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO2wuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoInN0eWxlIixrKX19fXJldHVybiBqZShlLF8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBZZS5yZWN0KGUsQSl9LGx9dmFyIFlRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtWdCgpO3ByKCk7anQoKTtYdCgpO3F0KCk7SFEoKTtmcigpO28oV1EsImNsYXNzQm94Iil9KTthc3luYyBmdW5jdGlvbiBxUSh0LGUse2NvbmZpZzpyfSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1aZShlKTtlLmxhYmVsU3R5bGU9bnx8IiI7bGV0IGE9MTAscz1lLndpZHRoO2Uud2lkdGg9KGUud2lkdGg/PzIwMCktMTA7bGV0e3NoYXBlU3ZnOmwsYmJveDp1LGxhYmVsOmh9PWF3YWl0IHN0KHQsZSxvdChlKSksZj1lLnBhZGRpbmd8fDEwLGQ9IiIscDsidGlja2V0ImluIGUmJmUudGlja2V0JiZyPy5rYW5iYW4/LnRpY2tldEJhc2VVcmwmJihkPXI/LmthbmJhbj8udGlja2V0QmFzZVVybC5yZXBsYWNlKCIjVElDS0VUIyIsZS50aWNrZXQpLHA9bC5pbnNlcnQoInN2ZzphIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJrYW5iYW4tdGlja2V0LWxpbmsiKS5hdHRyKCJ4bGluazpocmVmIixkKS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSk7bGV0IG09e3VzZUh0bWxMYWJlbHM6ZS51c2VIdG1sTGFiZWxzLGxhYmVsU3R5bGU6ZS5sYWJlbFN0eWxlfHwiIix3aWR0aDplLndpZHRoLGltZzplLmltZyxwYWRkaW5nOmUucGFkZGluZ3x8OCxjZW50ZXJMYWJlbDohMX0sZyx5O3A/e2xhYmVsOmcsYmJveDp5fT1hd2FpdCBJNShwLCJ0aWNrZXQiaW4gZSYmZS50aWNrZXR8fCIiLG0pOntsYWJlbDpnLGJib3g6eX09YXdhaXQgSTUobCwidGlja2V0ImluIGUmJmUudGlja2V0fHwiIixtKTtsZXR7bGFiZWw6dixiYm94Onh9PWF3YWl0IEk1KGwsImFzc2lnbmVkImluIGUmJmUuYXNzaWduZWR8fCIiLG0pO2Uud2lkdGg9cztsZXQgYj0xMCx3PWU/LndpZHRofHwwLF89TWF0aC5tYXgoeS5oZWlnaHQseC5oZWlnaHQpLzIsVD1NYXRoLm1heCh1LmhlaWdodCtiKjIsZT8uaGVpZ2h0fHwwKStfLEU9LXcvMixMPS1ULzI7aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZi13LzIpKyIsICIrKC1fLXUuaGVpZ2h0LzIpKyIpIiksZy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZi13LzIpKyIsICIrKC1fK3UuaGVpZ2h0LzIpKyIpIiksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZit3LzIteC53aWR0aC0yKmEpKyIsICIrKC1fK3UuaGVpZ2h0LzIpKyIpIik7bGV0IFMse3J4OkEscnk6SX09ZSx7Y3NzU3R5bGVzOkR9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBrPVhlLnN2ZyhsKSxSPUtlKGUse30pLEM9QXx8ST9rLnBhdGgoUGEoRSxMLHcsVCxBfHwwKSxSKTprLnJlY3RhbmdsZShFLEwsdyxULFIpO1M9bC5pbnNlcnQoKCk9PkMsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsRHx8bnVsbCl9ZWxzZXtTPWwuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciBfX0FQQV9fIikuYXR0cigic3R5bGUiLGkpLmF0dHIoInJ4IixBPz81KS5hdHRyKCJyeSIsST8/NSkuYXR0cigieCIsRSkuYXR0cigieSIsTCkuYXR0cigid2lkdGgiLHcpLmF0dHIoImhlaWdodCIsVCk7bGV0IGs9InByaW9yaXR5ImluIGUmJmUucHJpb3JpdHk7aWYoayl7bGV0IFI9bC5hcHBlbmQoImxpbmUiKSxDPUUrMixPPUwrTWF0aC5mbG9vcigoQT8/MCkvMiksTj1MK1QtTWF0aC5mbG9vcigoQT8/MCkvMik7Ui5hdHRyKCJ4MSIsQykuYXR0cigieTEiLE8pLmF0dHIoIngyIixDKS5hdHRyKCJ5MiIsTikuYXR0cigic3Ryb2tlLXdpZHRoIiwiNCIpLmF0dHIoInN0cm9rZSIsdEFlKGspKX19cmV0dXJuIGplKGUsUyksZS5oZWlnaHQ9VCxlLmludGVyc2VjdD1mdW5jdGlvbihrKXtyZXR1cm4gWWUucmVjdChlLGspfSxsfXZhciB0QWUsWFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WGgoKTtYdCgpO2p0KCk7dEFlPW8odD0+e3N3aXRjaCh0KXtjYXNlIlZlcnkgSGlnaCI6cmV0dXJuInJlZCI7Y2FzZSJIaWdoIjpyZXR1cm4ib3JhbmdlIjtjYXNlIk1lZGl1bSI6cmV0dXJuIG51bGw7Y2FzZSJMb3ciOnJldHVybiJibHVlIjtjYXNlIlZlcnkgTG93IjpyZXR1cm4ibGlnaHRibHVlIn19LCJjb2xvckZyb21Qcmlvcml0eSIpO28ocVEsImthbmJhbkl0ZW0iKX0pO2Z1bmN0aW9uIGpRKHQpe3JldHVybiB0IGluICQ5fXZhciByQWUsbkFlLCQ5LFY5PU0oKCk9PnsidXNlIHN0cmljdCI7emooKTtWaigpO0hqKCk7WWooKTtYaigpO0tqKCk7WmooKTtlSygpO3JLKCk7aUsoKTtzSygpO2xLKCk7dUsoKTtmSygpO3BLKCk7Z0soKTt2SygpO2JLKCk7VEsoKTtFSygpO0NLKCk7X0soKTtESygpO1JLKCk7SUsoKTtQSygpO0ZLKCk7R0soKTtWSygpO0hLKCk7WUsoKTtYSygpO0tLKCk7WksoKTtlUSgpO3JRKCk7aVEoKTtzUSgpO2xRKCk7dVEoKTtmUSgpO3BRKCk7Z1EoKTt2USgpO2JRKCk7VFEoKTtFUSgpO0NRKCk7X1EoKTtEUSgpO1JRKCk7SVEoKTtQUSgpO0ZRKCk7R1EoKTtWUSgpO1lRKCk7WFEoKTtyQWU9W3tzZW1hbnRpY05hbWU6IlByb2Nlc3MiLG5hbWU6IlJlY3RhbmdsZSIsc2hvcnROYW1lOiJyZWN0IixkZXNjcmlwdGlvbjoiU3RhbmRhcmQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbInByb2MiLCJwcm9jZXNzIiwicmVjdGFuZ2xlIl0saW50ZXJuYWxBbGlhc2VzOlsic3F1YXJlUmVjdCJdLGhhbmRsZXI6aFF9LHtzZW1hbnRpY05hbWU6IkV2ZW50IixuYW1lOiJSb3VuZGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJyb3VuZGVkIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhbiBldmVudCIsYWxpYXNlczpbImV2ZW50Il0saW50ZXJuYWxBbGlhc2VzOlsicm91bmRlZFJlY3QiXSxoYW5kbGVyOmFRfSx7c2VtYW50aWNOYW1lOiJUZXJtaW5hbCBQb2ludCIsbmFtZToiU3RhZGl1bSIsc2hvcnROYW1lOiJzdGFkaXVtIixkZXNjcmlwdGlvbjoiVGVybWluYWwgcG9pbnQiLGFsaWFzZXM6WyJ0ZXJtaW5hbCIsInBpbGwiXSxoYW5kbGVyOmRRfSx7c2VtYW50aWNOYW1lOiJTdWJwcm9jZXNzIixuYW1lOiJGcmFtZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImZyLXJlY3QiLGRlc2NyaXB0aW9uOiJTdWJwcm9jZXNzIixhbGlhc2VzOlsic3VicHJvY2VzcyIsInN1YnByb2MiLCJmcmFtZWQtcmVjdGFuZ2xlIiwic3Vicm91dGluZSJdLGhhbmRsZXI6d1F9LHtzZW1hbnRpY05hbWU6IkRhdGFiYXNlIixuYW1lOiJDeWxpbmRlciIsc2hvcnROYW1lOiJjeWwiLGRlc2NyaXB0aW9uOiJEYXRhYmFzZSBzdG9yYWdlIixhbGlhc2VzOlsiZGIiLCJkYXRhYmFzZSIsImN5bGluZGVyIl0saGFuZGxlcjphS30se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IkNpcmNsZSIsc2hvcnROYW1lOiJjaXJjbGUiLGRlc2NyaXB0aW9uOiJTdGFydGluZyBwb2ludCIsYWxpYXNlczpbImNpcmMiXSxoYW5kbGVyOnFqfSx7c2VtYW50aWNOYW1lOiJEZWNpc2lvbiIsbmFtZToiRGlhbW9uZCIsc2hvcnROYW1lOiJkaWFtIixkZXNjcmlwdGlvbjoiRGVjaXNpb24tbWFraW5nIHN0ZXAiLGFsaWFzZXM6WyJkZWNpc2lvbiIsImRpYW1vbmQiLCJxdWVzdGlvbiJdLGhhbmRsZXI6Skt9LHtzZW1hbnRpY05hbWU6IlByZXBhcmUgQ29uZGl0aW9uYWwiLG5hbWU6IkhleGFnb24iLHNob3J0TmFtZToiaGV4IixkZXNjcmlwdGlvbjoiUHJlcGFyYXRpb24gb3IgY29uZGl0aW9uIHN0ZXAiLGFsaWFzZXM6WyJoZXhhZ29uIiwicHJlcGFyZSJdLGhhbmRsZXI6eEt9LHtzZW1hbnRpY05hbWU6IkRhdGEgSW5wdXQvT3V0cHV0IixuYW1lOiJMZWFuIFJpZ2h0IixzaG9ydE5hbWU6ImxlYW4tciIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgaW5wdXQgb3Igb3V0cHV0IixhbGlhc2VzOlsibGVhbi1yaWdodCIsImluLW91dCJdLGludGVybmFsQWxpYXNlczpbImxlYW5fcmlnaHQiXSxoYW5kbGVyOnpLfSx7c2VtYW50aWNOYW1lOiJEYXRhIElucHV0L091dHB1dCIsbmFtZToiTGVhbiBMZWZ0IixzaG9ydE5hbWU6ImxlYW4tbCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgb3V0cHV0IG9yIGlucHV0IixhbGlhc2VzOlsibGVhbi1sZWZ0Iiwib3V0LWluIl0saW50ZXJuYWxBbGlhc2VzOlsibGVhbl9sZWZ0Il0saGFuZGxlcjpCS30se3NlbWFudGljTmFtZToiUHJpb3JpdHkgQWN0aW9uIixuYW1lOiJUcmFwZXpvaWQgQmFzZSBCb3R0b20iLHNob3J0TmFtZToidHJhcC1iIixkZXNjcmlwdGlvbjoiUHJpb3JpdHkgYWN0aW9uIixhbGlhc2VzOlsicHJpb3JpdHkiLCJ0cmFwZXpvaWQtYm90dG9tIiwidHJhcGV6b2lkIl0saGFuZGxlcjpOUX0se3NlbWFudGljTmFtZToiTWFudWFsIE9wZXJhdGlvbiIsbmFtZToiVHJhcGV6b2lkIEJhc2UgVG9wIixzaG9ydE5hbWU6InRyYXAtdCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBtYW51YWwgdGFzayIsYWxpYXNlczpbIm1hbnVhbCIsInRyYXBlem9pZC10b3AiLCJpbnYtdHJhcGV6b2lkIl0saW50ZXJuYWxBbGlhc2VzOlsiaW52X3RyYXBlem9pZCJdLGhhbmRsZXI6TUt9LHtzZW1hbnRpY05hbWU6IlN0b3AiLG5hbWU6IkRvdWJsZSBDaXJjbGUiLHNob3J0TmFtZToiZGJsLWNpcmMiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgc3RvcCBwb2ludCIsYWxpYXNlczpbImRvdWJsZS1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJkb3VibGVjaXJjbGUiXSxoYW5kbGVyOmNLfSx7c2VtYW50aWNOYW1lOiJUZXh0IEJsb2NrIixuYW1lOiJUZXh0IEJsb2NrIixzaG9ydE5hbWU6InRleHQiLGRlc2NyaXB0aW9uOiJUZXh0IGJsb2NrIixoYW5kbGVyOkFRfSx7c2VtYW50aWNOYW1lOiJDYXJkIixuYW1lOiJOb3RjaGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJub3RjaC1yZWN0IixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGNhcmQiLGFsaWFzZXM6WyJjYXJkIiwibm90Y2hlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOlVqfSx7c2VtYW50aWNOYW1lOiJMaW5lZC9TaGFkZWQgUHJvY2VzcyIsbmFtZToiTGluZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6Imxpbi1yZWN0IixkZXNjcmlwdGlvbjoiTGluZWQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbImxpbmVkLXJlY3RhbmdsZSIsImxpbmVkLXByb2Nlc3MiLCJsaW4tcHJvYyIsInNoYWRlZC1wcm9jZXNzIl0saGFuZGxlcjpvUX0se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IlNtYWxsIENpcmNsZSIsc2hvcnROYW1lOiJzbS1jaXJjIixkZXNjcmlwdGlvbjoiU21hbGwgc3RhcnRpbmcgcG9pbnQiLGFsaWFzZXM6WyJzdGFydCIsInNtYWxsLWNpcmNsZSJdLGludGVybmFsQWxpYXNlczpbInN0YXRlU3RhcnQiXSxoYW5kbGVyOnhRfSx7c2VtYW50aWNOYW1lOiJTdG9wIixuYW1lOiJGcmFtZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImZyLWNpcmMiLGRlc2NyaXB0aW9uOiJTdG9wIHBvaW50IixhbGlhc2VzOlsic3RvcCIsImZyYW1lZC1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJzdGF0ZUVuZCJdLGhhbmRsZXI6eVF9LHtzZW1hbnRpY05hbWU6IkZvcmsvSm9pbiIsbmFtZToiRmlsbGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJmb3JrIixkZXNjcmlwdGlvbjoiRm9yayBvciBqb2luIGluIHByb2Nlc3MgZmxvdyIsYWxpYXNlczpbImpvaW4iXSxpbnRlcm5hbEFsaWFzZXM6WyJmb3JrSm9pbiJdLGhhbmRsZXI6bUt9LHtzZW1hbnRpY05hbWU6IkNvbGxhdGUiLG5hbWU6IkhvdXJnbGFzcyIsc2hvcnROYW1lOiJob3VyZ2xhc3MiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgY29sbGF0ZSBvcGVyYXRpb24iLGFsaWFzZXM6WyJob3VyZ2xhc3MiLCJjb2xsYXRlIl0saGFuZGxlcjp3S30se3NlbWFudGljTmFtZToiQ29tbWVudCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsYWxpYXNlczpbImNvbW1lbnQiLCJicmFjZS1sIl0saGFuZGxlcjpRan0se3NlbWFudGljTmFtZToiQ29tbWVudCBSaWdodCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UtciIsZGVzY3JpcHRpb246IkFkZHMgYSBjb21tZW50IixoYW5kbGVyOkpqfSx7c2VtYW50aWNOYW1lOiJDb21tZW50IHdpdGggYnJhY2VzIG9uIGJvdGggc2lkZXMiLG5hbWU6IkN1cmx5IEJyYWNlcyIsc2hvcnROYW1lOiJicmFjZXMiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsaGFuZGxlcjp0S30se3NlbWFudGljTmFtZToiQ29tIExpbmsiLG5hbWU6IkxpZ2h0bmluZyBCb2x0IixzaG9ydE5hbWU6ImJvbHQiLGRlc2NyaXB0aW9uOiJDb21tdW5pY2F0aW9uIGxpbmsiLGFsaWFzZXM6WyJjb20tbGluayIsImxpZ2h0bmluZy1ib2x0Il0saGFuZGxlcjokS30se3NlbWFudGljTmFtZToiRG9jdW1lbnQiLG5hbWU6IkRvY3VtZW50IixzaG9ydE5hbWU6ImRvYyIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBkb2N1bWVudCIsYWxpYXNlczpbImRvYyIsImRvY3VtZW50Il0saGFuZGxlcjpCUX0se3NlbWFudGljTmFtZToiRGVsYXkiLG5hbWU6IkhhbGYtUm91bmRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGVsYXkiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgZGVsYXkiLGFsaWFzZXM6WyJoYWxmLXJvdW5kZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjp5S30se3NlbWFudGljTmFtZToiRGlyZWN0IEFjY2VzcyBTdG9yYWdlIixuYW1lOiJIb3Jpem9udGFsIEN5bGluZGVyIixzaG9ydE5hbWU6ImgtY3lsIixkZXNjcmlwdGlvbjoiRGlyZWN0IGFjY2VzcyBzdG9yYWdlIixhbGlhc2VzOlsiZGFzIiwiaG9yaXpvbnRhbC1jeWxpbmRlciJdLGhhbmRsZXI6TFF9LHtzZW1hbnRpY05hbWU6IkRpc2sgU3RvcmFnZSIsbmFtZToiTGluZWQgQ3lsaW5kZXIiLHNob3J0TmFtZToibGluLWN5bCIsZGVzY3JpcHRpb246IkRpc2sgc3RvcmFnZSIsYWxpYXNlczpbImRpc2siLCJsaW5lZC1jeWxpbmRlciJdLGhhbmRsZXI6VUt9LHtzZW1hbnRpY05hbWU6IkRpc3BsYXkiLG5hbWU6IkN1cnZlZCBUcmFwZXpvaWQiLHNob3J0TmFtZToiY3Vydi10cmFwIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGRpc3BsYXkiLGFsaWFzZXM6WyJjdXJ2ZWQtdHJhcGV6b2lkIiwiZGlzcGxheSJdLGhhbmRsZXI6bkt9LHtzZW1hbnRpY05hbWU6IkRpdmlkZWQgUHJvY2VzcyIsbmFtZToiRGl2aWRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGl2LXJlY3QiLGRlc2NyaXB0aW9uOiJEaXZpZGVkIHByb2Nlc3Mgc2hhcGUiLGFsaWFzZXM6WyJkaXYtcHJvYyIsImRpdmlkZWQtcmVjdGFuZ2xlIiwiZGl2aWRlZC1wcm9jZXNzIl0saGFuZGxlcjpvS30se3NlbWFudGljTmFtZToiRXh0cmFjdCIsbmFtZToiVHJpYW5nbGUiLHNob3J0TmFtZToidHJpIixkZXNjcmlwdGlvbjoiRXh0cmFjdGlvbiBwcm9jZXNzIixhbGlhc2VzOlsiZXh0cmFjdCIsInRyaWFuZ2xlIl0saGFuZGxlcjpPUX0se3NlbWFudGljTmFtZToiSW50ZXJuYWwgU3RvcmFnZSIsbmFtZToiV2luZG93IFBhbmUiLHNob3J0TmFtZToid2luLXBhbmUiLGRlc2NyaXB0aW9uOiJJbnRlcm5hbCBzdG9yYWdlIixhbGlhc2VzOlsiaW50ZXJuYWwtc3RvcmFnZSIsIndpbmRvdy1wYW5lIl0saGFuZGxlcjokUX0se3NlbWFudGljTmFtZToiSnVuY3Rpb24iLG5hbWU6IkZpbGxlZCBDaXJjbGUiLHNob3J0TmFtZToiZi1jaXJjIixkZXNjcmlwdGlvbjoiSnVuY3Rpb24gcG9pbnQiLGFsaWFzZXM6WyJqdW5jdGlvbiIsImZpbGxlZC1jaXJjbGUiXSxoYW5kbGVyOmhLfSx7c2VtYW50aWNOYW1lOiJMb29wIExpbWl0IixuYW1lOiJUcmFwZXpvaWRhbCBQZW50YWdvbiIsc2hvcnROYW1lOiJub3RjaC1wZW50IixkZXNjcmlwdGlvbjoiTG9vcCBsaW1pdCBzdGVwIixhbGlhc2VzOlsibG9vcC1saW1pdCIsIm5vdGNoZWQtcGVudGFnb24iXSxoYW5kbGVyOk1RfSx7c2VtYW50aWNOYW1lOiJNYW51YWwgRmlsZSIsbmFtZToiRmxpcHBlZCBUcmlhbmdsZSIsc2hvcnROYW1lOiJmbGlwLXRyaSIsZGVzY3JpcHRpb246Ik1hbnVhbCBmaWxlIG9wZXJhdGlvbiIsYWxpYXNlczpbIm1hbnVhbC1maWxlIiwiZmxpcHBlZC10cmlhbmdsZSJdLGhhbmRsZXI6ZEt9LHtzZW1hbnRpY05hbWU6Ik1hbnVhbCBJbnB1dCIsbmFtZToiU2xvcGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzbC1yZWN0IixkZXNjcmlwdGlvbjoiTWFudWFsIGlucHV0IHN0ZXAiLGFsaWFzZXM6WyJtYW51YWwtaW5wdXQiLCJzbG9wZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjpjUX0se3NlbWFudGljTmFtZToiTXVsdGktRG9jdW1lbnQiLG5hbWU6IlN0YWNrZWQgRG9jdW1lbnQiLHNob3J0TmFtZToiZG9jcyIsZGVzY3JpcHRpb246Ik11bHRpcGxlIGRvY3VtZW50cyIsYWxpYXNlczpbImRvY3VtZW50cyIsInN0LWRvYyIsInN0YWNrZWQtZG9jdW1lbnQiXSxoYW5kbGVyOmpLfSx7c2VtYW50aWNOYW1lOiJNdWx0aS1Qcm9jZXNzIixuYW1lOiJTdGFja2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzdC1yZWN0IixkZXNjcmlwdGlvbjoiTXVsdGlwbGUgcHJvY2Vzc2VzIixhbGlhc2VzOlsicHJvY3MiLCJwcm9jZXNzZXMiLCJzdGFja2VkLXJlY3RhbmdsZSJdLGhhbmRsZXI6cUt9LHtzZW1hbnRpY05hbWU6IlN0b3JlZCBEYXRhIixuYW1lOiJCb3cgVGllIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJib3ctcmVjdCIsZGVzY3JpcHRpb246IlN0b3JlZCBkYXRhIixhbGlhc2VzOlsic3RvcmVkLWRhdGEiLCJib3ctdGllLXJlY3RhbmdsZSJdLGhhbmRsZXI6JGp9LHtzZW1hbnRpY05hbWU6IlN1bW1hcnkiLG5hbWU6IkNyb3NzZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImNyb3NzLWNpcmMiLGRlc2NyaXB0aW9uOiJTdW1tYXJ5IixhbGlhc2VzOlsic3VtbWFyeSIsImNyb3NzZWQtY2lyY2xlIl0saGFuZGxlcjpqan0se3NlbWFudGljTmFtZToiVGFnZ2VkIERvY3VtZW50IixuYW1lOiJUYWdnZWQgRG9jdW1lbnQiLHNob3J0TmFtZToidGFnLWRvYyIsZGVzY3JpcHRpb246IlRhZ2dlZCBkb2N1bWVudCIsYWxpYXNlczpbInRhZy1kb2MiLCJ0YWdnZWQtZG9jdW1lbnQiXSxoYW5kbGVyOlNRfSx7c2VtYW50aWNOYW1lOiJUYWdnZWQgUHJvY2VzcyIsbmFtZToiVGFnZ2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJ0YWctcmVjdCIsZGVzY3JpcHRpb246IlRhZ2dlZCBwcm9jZXNzIixhbGlhc2VzOlsidGFnZ2VkLXJlY3RhbmdsZSIsInRhZy1wcm9jIiwidGFnZ2VkLXByb2Nlc3MiXSxoYW5kbGVyOmtRfSx7c2VtYW50aWNOYW1lOiJQYXBlciBUYXBlIixuYW1lOiJGbGFnIixzaG9ydE5hbWU6ImZsYWciLGRlc2NyaXB0aW9uOiJQYXBlciB0YXBlIixhbGlhc2VzOlsicGFwZXItdGFwZSJdLGhhbmRsZXI6elF9LHtzZW1hbnRpY05hbWU6Ik9kZCIsbmFtZToiT2RkIixzaG9ydE5hbWU6Im9kZCIsZGVzY3JpcHRpb246Ik9kZCBzaGFwZSIsaW50ZXJuYWxBbGlhc2VzOlsicmVjdF9sZWZ0X2ludl9hcnJvdyJdLGhhbmRsZXI6dFF9LHtzZW1hbnRpY05hbWU6IkxpbmVkIERvY3VtZW50IixuYW1lOiJMaW5lZCBEb2N1bWVudCIsc2hvcnROYW1lOiJsaW4tZG9jIixkZXNjcmlwdGlvbjoiTGluZWQgZG9jdW1lbnQiLGFsaWFzZXM6WyJsaW5lZC1kb2N1bWVudCJdLGhhbmRsZXI6V0t9XSxuQWU9bygoKT0+e2xldCBlPVsuLi5PYmplY3QuZW50cmllcyh7c3RhdGU6bVEsY2hvaWNlOldqLG5vdGU6UUsscmVjdFdpdGhUaXRsZTpuUSxsYWJlbFJlY3Q6T0ssaWNvblNxdWFyZTpMSyxpY29uQ2lyY2xlOlNLLGljb246a0ssaWNvblJvdW5kZWQ6QUssaW1hZ2VTcXVhcmU6TkssYW5jaG9yOkZqLGthbmJhbkl0ZW06cVEsY2xhc3NCb3g6V1F9KSwuLi5yQWUuZmxhdE1hcChyPT5bci5zaG9ydE5hbWUsLi4uImFsaWFzZXMiaW4gcj9yLmFsaWFzZXM6W10sLi4uImludGVybmFsQWxpYXNlcyJpbiByP3IuaW50ZXJuYWxBbGlhc2VzOltdXS5tYXAoaT0+W2ksci5oYW5kbGVyXSkpXTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGUpfSwiZ2VuZXJhdGVTaGFwZU1hcCIpLCQ5PW5BZSgpO28oalEsImlzVmFsaWRTaGFwZSIpfSk7ZnVuY3Rpb24gaFoodCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8dD09PW51bGx9ZnVuY3Rpb24gaUFlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfWZ1bmN0aW9uIGFBZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OmhaKHQpP1tdOlt0XX1mdW5jdGlvbiBzQWUodCxlKXt2YXIgcixuLGksYTtpZihlKWZvcihhPU9iamVjdC5rZXlzKGUpLHI9MCxuPWEubGVuZ3RoO3I8bjtyKz0xKWk9YVtyXSx0W2ldPWVbaV07cmV0dXJuIHR9ZnVuY3Rpb24gb0FlKHQsZSl7dmFyIHI9IiIsbjtmb3Iobj0wO248ZTtuKz0xKXIrPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbEFlKHQpe3JldHVybiB0PT09MCYmTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09MS90fWZ1bmN0aW9uIGZaKHQsZSl7dmFyIHI9IiIsbj10LnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiO3JldHVybiB0Lm1hcms/KHQubWFyay5uYW1lJiYocis9J2luICInK3QubWFyay5uYW1lKyciICcpLHIrPSIoIisodC5tYXJrLmxpbmUrMSkrIjoiKyh0Lm1hcmsuY29sdW1uKzEpKyIpIiwhZSYmdC5tYXJrLnNuaXBwZXQmJihyKz1gCgpgK3QubWFyay5zbmlwcGV0KSxuKyIgIityKTpufWZ1bmN0aW9uIE92KHQsZSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm5hbWU9IllBTUxFeGNlcHRpb24iLHRoaXMucmVhc29uPXQsdGhpcy5tYXJrPWUsdGhpcy5tZXNzYWdlPWZaKHRoaXMsITEpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFja3x8IiJ9ZnVuY3Rpb24gVTkodCxlLHIsbixpKXt2YXIgYT0iIixzPSIiLGw9TWF0aC5mbG9vcihpLzIpLTE7cmV0dXJuIG4tZT5sJiYoYT0iIC4uLiAiLGU9bi1sK2EubGVuZ3RoKSxyLW4+bCYmKHM9IiAuLi4iLHI9bitsLXMubGVuZ3RoKSx7c3RyOmErdC5zbGljZShlLHIpLnJlcGxhY2UoL1x0L2csIlx1MjE5MiIpK3MscG9zOm4tZSthLmxlbmd0aH19ZnVuY3Rpb24gSDkodCxlKXtyZXR1cm4gR2kucmVwZWF0KCIgIixlLXQubGVuZ3RoKSt0fWZ1bmN0aW9uIG1BZSh0LGUpe2lmKGU9T2JqZWN0LmNyZWF0ZShlfHxudWxsKSwhdC5idWZmZXIpcmV0dXJuIG51bGw7ZS5tYXhMZW5ndGh8fChlLm1heExlbmd0aD03OSksdHlwZW9mIGUuaW5kZW50IT0ibnVtYmVyIiYmKGUuaW5kZW50PTEpLHR5cGVvZiBlLmxpbmVzQmVmb3JlIT0ibnVtYmVyIiYmKGUubGluZXNCZWZvcmU9MyksdHlwZW9mIGUubGluZXNBZnRlciE9Im51bWJlciImJihlLmxpbmVzQWZ0ZXI9Mik7Zm9yKHZhciByPS9ccj9cbnxccnxcMC9nLG49WzBdLGk9W10sYSxzPS0xO2E9ci5leGVjKHQuYnVmZmVyKTspaS5wdXNoKGEuaW5kZXgpLG4ucHVzaChhLmluZGV4K2FbMF0ubGVuZ3RoKSx0LnBvc2l0aW9uPD1hLmluZGV4JiZzPDAmJihzPW4ubGVuZ3RoLTIpO3M8MCYmKHM9bi5sZW5ndGgtMSk7dmFyIGw9IiIsdSxoLGY9TWF0aC5taW4odC5saW5lK2UubGluZXNBZnRlcixpLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGgsZD1lLm1heExlbmd0aC0oZS5pbmRlbnQrZiszKTtmb3IodT0xO3U8PWUubGluZXNCZWZvcmUmJiEocy11PDApO3UrKyloPVU5KHQuYnVmZmVyLG5bcy11XSxpW3MtdV0sdC5wb3NpdGlvbi0obltzXS1uW3MtdV0pLGQpLGw9R2kucmVwZWF0KCIgIixlLmluZGVudCkrSDkoKHQubGluZS11KzEpLnRvU3RyaW5nKCksZikrIiB8ICIraC5zdHIrYApgK2w7Zm9yKGg9VTkodC5idWZmZXIsbltzXSxpW3NdLHQucG9zaXRpb24sZCksbCs9R2kucmVwZWF0KCIgIixlLmluZGVudCkrSDkoKHQubGluZSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYCxsKz1HaS5yZXBlYXQoIi0iLGUuaW5kZW50K2YrMytoLnBvcykrYF4KYCx1PTE7dTw9ZS5saW5lc0FmdGVyJiYhKHMrdT49aS5sZW5ndGgpO3UrKyloPVU5KHQuYnVmZmVyLG5bcyt1XSxpW3MrdV0sdC5wb3NpdGlvbi0obltzXS1uW3MrdV0pLGQpLGwrPUdpLnJlcGVhdCgiICIsZS5pbmRlbnQpK0g5KCh0LmxpbmUrdSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYDtyZXR1cm4gbC5yZXBsYWNlKC9cbiQvLCIiKX1mdW5jdGlvbiB4QWUodCl7dmFyIGU9e307cmV0dXJuIHQhPT1udWxsJiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl0uZm9yRWFjaChmdW5jdGlvbihuKXtlW1N0cmluZyhuKV09cn0pfSksZX1mdW5jdGlvbiBiQWUodCxlKXtpZihlPWV8fHt9LE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7aWYoeUFlLmluZGV4T2Yocik9PT0tMSl0aHJvdyBuZXcgTXMoJ1Vua25vd24gb3B0aW9uICInK3IrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicrdCsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLm9wdGlvbnM9ZSx0aGlzLnRhZz10LHRoaXMua2luZD1lLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPWUucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3R8fGZ1bmN0aW9uKHIpe3JldHVybiByfSx0aGlzLmluc3RhbmNlT2Y9ZS5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPWUucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PWUucmVwcmVzZW50fHxudWxsLHRoaXMucmVwcmVzZW50TmFtZT1lLnJlcHJlc2VudE5hbWV8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9ZS5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5tdWx0aT1lLm11bHRpfHwhMSx0aGlzLnN0eWxlQWxpYXNlcz14QWUoZS5zdHlsZUFsaWFzZXN8fG51bGwpLHZBZS5pbmRleE9mKHRoaXMua2luZCk9PT0tMSl0aHJvdyBuZXcgTXMoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJyt0KyciIFlBTUwgdHlwZS4nKX1mdW5jdGlvbiBLUSh0LGUpe3ZhciByPVtdO3JldHVybiB0W2VdLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ci5sZW5ndGg7ci5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YS50YWc9PT1uLnRhZyYmYS5raW5kPT09bi5raW5kJiZhLm11bHRpPT09bi5tdWx0aSYmKGk9cyl9KSxyW2ldPW59KSxyfWZ1bmN0aW9uIHdBZSgpe3ZhciB0PXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fSxtdWx0aTp7c2NhbGFyOltdLHNlcXVlbmNlOltdLG1hcHBpbmc6W10sZmFsbGJhY2s6W119fSxlLHI7ZnVuY3Rpb24gbihpKXtpLm11bHRpPyh0Lm11bHRpW2kua2luZF0ucHVzaChpKSx0Lm11bHRpLmZhbGxiYWNrLnB1c2goaSkpOnRbaS5raW5kXVtpLnRhZ109dC5mYWxsYmFja1tpLnRhZ109aX1mb3IobyhuLCJjb2xsZWN0VHlwZSIpLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrPTEpYXJndW1lbnRzW2VdLmZvckVhY2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gWTkodCl7cmV0dXJuIHRoaXMuZXh0ZW5kKHQpfWZ1bmN0aW9uIEFBZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT09PTEmJnQ9PT0ifiJ8fGU9PT00JiYodD09PSJudWxsInx8dD09PSJOdWxsInx8dD09PSJOVUxMIil9ZnVuY3Rpb24gX0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTEFlKHQpe3JldHVybiB0PT09bnVsbH1mdW5jdGlvbiBOQWUodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT00JiYodD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIil8fGU9PT01JiYodD09PSJmYWxzZSJ8fHQ9PT0iRmFsc2UifHx0PT09IkZBTFNFIil9ZnVuY3Rpb24gUkFlKHQpe3JldHVybiB0PT09InRydWUifHx0PT09IlRydWUifHx0PT09IlRSVUUifWZ1bmN0aW9uIE1BZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgQm9vbGVhbl0ifWZ1bmN0aW9uIE9BZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3fHw2NTw9dCYmdDw9NzB8fDk3PD10JiZ0PD0xMDJ9ZnVuY3Rpb24gUEFlKHQpe3JldHVybiA0ODw9dCYmdDw9NTV9ZnVuY3Rpb24gQkFlKHQpe3JldHVybiA0ODw9dCYmdDw9NTd9ZnVuY3Rpb24gRkFlKHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlPXQubGVuZ3RoLHI9MCxuPSExLGk7aWYoIWUpcmV0dXJuITE7aWYoaT10W3JdLChpPT09Ii0ifHxpPT09IisiKSYmKGk9dFsrK3JdKSxpPT09IjAiKXtpZihyKzE9PT1lKXJldHVybiEwO2lmKGk9dFsrK3JdLGk9PT0iYiIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoaSE9PSIwIiYmaSE9PSIxIilyZXR1cm4hMTtuPSEwfXJldHVybiBuJiZpIT09Il8ifWlmKGk9PT0ieCIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoIU9BZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiExO249ITB9cmV0dXJuIG4mJmkhPT0iXyJ9aWYoaT09PSJvIil7Zm9yKHIrKztyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZighUEFlKHQuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7bj0hMH1yZXR1cm4gbiYmaSE9PSJfIn19aWYoaT09PSJfIilyZXR1cm4hMTtmb3IoO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKCFCQWUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4hMTtuPSEwfXJldHVybiEoIW58fGk9PT0iXyIpfWZ1bmN0aW9uIHpBZSh0KXt2YXIgZT10LHI9MSxuO2lmKGUuaW5kZXhPZigiXyIpIT09LTEmJihlPWUucmVwbGFjZSgvXy9nLCIiKSksbj1lWzBdLChuPT09Ii0ifHxuPT09IisiKSYmKG49PT0iLSImJihyPS0xKSxlPWUuc2xpY2UoMSksbj1lWzBdKSxlPT09IjAiKXJldHVybiAwO2lmKG49PT0iMCIpe2lmKGVbMV09PT0iYiIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSwyKTtpZihlWzFdPT09IngiKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksMTYpO2lmKGVbMV09PT0ibyIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSw4KX1yZXR1cm4gcipwYXJzZUludChlLDEwKX1mdW5jdGlvbiBHQWUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiZ0JTE9PT0wJiYhR2kuaXNOZWdhdGl2ZVplcm8odCl9ZnVuY3Rpb24gVUFlKHQpe3JldHVybiEodD09PW51bGx8fCFWQWUudGVzdCh0KXx8dFt0Lmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gSEFlKHQpe3ZhciBlLHI7cmV0dXJuIGU9dC5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCkscj1lWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGVbMF0pPj0wJiYoZT1lLnNsaWNlKDEpKSxlPT09Ii5pbmYiP3I9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6ZT09PSIubmFuIj9OYU46cipwYXJzZUZsb2F0KGUsMTApfWZ1bmN0aW9uIFlBZSh0LGUpe3ZhciByO2lmKGlzTmFOKHQpKXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PXQpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09dClzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihHaS5pc05lZ2F0aXZlWmVybyh0KSlyZXR1cm4iLTAuMCI7cmV0dXJuIHI9dC50b1N0cmluZygxMCksV0FlLnRlc3Qocik/ci5yZXBsYWNlKCJlIiwiLmUiKTpyfWZ1bmN0aW9uIHFBZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgTnVtYmVyXSImJih0JTEhPT0wfHxHaS5pc05lZ2F0aXZlWmVybyh0KSl9ZnVuY3Rpb24gS0FlKHQpe3JldHVybiB0PT09bnVsbD8hMTpwWi5leGVjKHQpIT09bnVsbHx8bVouZXhlYyh0KSE9PW51bGx9ZnVuY3Rpb24gUUFlKHQpe3ZhciBlLHIsbixpLGEscyxsLHU9MCxoPW51bGwsZixkLHA7aWYoZT1wWi5leGVjKHQpLGU9PT1udWxsJiYoZT1tWi5leGVjKHQpKSxlPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKHI9K2VbMV0sbj0rZVsyXS0xLGk9K2VbM10sIWVbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHIsbixpKSk7aWYoYT0rZVs0XSxzPStlWzVdLGw9K2VbNl0sZVs3XSl7Zm9yKHU9ZVs3XS5zbGljZSgwLDMpO3UubGVuZ3RoPDM7KXUrPSIwIjt1PSt1fXJldHVybiBlWzldJiYoZj0rZVsxMF0sZD0rKGVbMTFdfHwwKSxoPShmKjYwK2QpKjZlNCxlWzldPT09Ii0iJiYoaD0taCkpLHA9bmV3IERhdGUoRGF0ZS5VVEMocixuLGksYSxzLGwsdSkpLGgmJnAuc2V0VGltZShwLmdldFRpbWUoKS1oKSxwfWZ1bmN0aW9uIFpBZSh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIGU4ZSh0KXtyZXR1cm4gdD09PSI8PCJ8fHQ9PT1udWxsfWZ1bmN0aW9uIHI4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZSxyLG49MCxpPXQubGVuZ3RoLGE9UTk7Zm9yKHI9MDtyPGk7cisrKWlmKGU9YS5pbmRleE9mKHQuY2hhckF0KHIpKSwhKGU+NjQpKXtpZihlPDApcmV0dXJuITE7bis9Nn1yZXR1cm4gbiU4PT09MH1mdW5jdGlvbiBuOGUodCl7dmFyIGUscixuPXQucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxpPW4ubGVuZ3RoLGE9UTkscz0wLGw9W107Zm9yKGU9MDtlPGk7ZSsrKWUlND09PTAmJmUmJihsLnB1c2gocz4+MTYmMjU1KSxsLnB1c2gocz4+OCYyNTUpLGwucHVzaChzJjI1NSkpLHM9czw8NnxhLmluZGV4T2Yobi5jaGFyQXQoZSkpO3JldHVybiByPWklNCo2LHI9PT0wPyhsLnB1c2gocz4+MTYmMjU1KSxsLnB1c2gocz4+OCYyNTUpLGwucHVzaChzJjI1NSkpOnI9PT0xOD8obC5wdXNoKHM+PjEwJjI1NSksbC5wdXNoKHM+PjImMjU1KSk6cj09PTEyJiZsLnB1c2gocz4+NCYyNTUpLG5ldyBVaW50OEFycmF5KGwpfWZ1bmN0aW9uIGk4ZSh0KXt2YXIgZT0iIixyPTAsbixpLGE9dC5sZW5ndGgscz1ROTtmb3Iobj0wO248YTtuKyspbiUzPT09MCYmbiYmKGUrPXNbcj4+MTgmNjNdLGUrPXNbcj4+MTImNjNdLGUrPXNbcj4+NiY2M10sZSs9c1tyJjYzXSkscj0ocjw8OCkrdFtuXTtyZXR1cm4gaT1hJTMsaT09PTA/KGUrPXNbcj4+MTgmNjNdLGUrPXNbcj4+MTImNjNdLGUrPXNbcj4+NiY2M10sZSs9c1tyJjYzXSk6aT09PTI/KGUrPXNbcj4+MTAmNjNdLGUrPXNbcj4+NCY2M10sZSs9c1tyPDwyJjYzXSxlKz1zWzY0XSk6aT09PTEmJihlKz1zW3I+PjImNjNdLGUrPXNbcjw8NCY2M10sZSs9c1s2NF0sZSs9c1s2NF0pLGV9ZnVuY3Rpb24gYThlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBVaW50OEFycmF5XSJ9ZnVuY3Rpb24gYzhlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlPVtdLHIsbixpLGEscyxsPXQ7Zm9yKHI9MCxuPWwubGVuZ3RoO3I8bjtyKz0xKXtpZihpPWxbcl0scz0hMSxsOGUuY2FsbChpKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihhIGluIGkpaWYobzhlLmNhbGwoaSxhKSlpZighcylzPSEwO2Vsc2UgcmV0dXJuITE7aWYoIXMpcmV0dXJuITE7aWYoZS5pbmRleE9mKGEpPT09LTEpZS5wdXNoKGEpO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdThlKHQpe3JldHVybiB0IT09bnVsbD90OltdfWZ1bmN0aW9uIGQ4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxyLG4saSxhLHM9dDtmb3IoYT1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxyPXMubGVuZ3RoO2U8cjtlKz0xKXtpZihuPXNbZV0sZjhlLmNhbGwobikhPT0iW29iamVjdCBPYmplY3RdInx8KGk9T2JqZWN0LmtleXMobiksaS5sZW5ndGghPT0xKSlyZXR1cm4hMTthW2VdPVtpWzBdLG5baVswXV1dfXJldHVybiEwfWZ1bmN0aW9uIHA4ZSh0KXtpZih0PT09bnVsbClyZXR1cm5bXTt2YXIgZSxyLG4saSxhLHM9dDtmb3IoYT1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxyPXMubGVuZ3RoO2U8cjtlKz0xKW49c1tlXSxpPU9iamVjdC5rZXlzKG4pLGFbZV09W2lbMF0sbltpWzBdXV07cmV0dXJuIGF9ZnVuY3Rpb24geThlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlLHI9dDtmb3IoZSBpbiByKWlmKGc4ZS5jYWxsKHIsZSkmJnJbZV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHY4ZSh0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX1mdW5jdGlvbiBaUSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEFjKHQpe3JldHVybiB0PT09MTB8fHQ9PT0xM31mdW5jdGlvbiBGZCh0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMn1mdW5jdGlvbiBJcyh0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMnx8dD09PTEwfHx0PT09MTN9ZnVuY3Rpb24gd20odCl7cmV0dXJuIHQ9PT00NHx8dD09PTkxfHx0PT09OTN8fHQ9PT0xMjN8fHQ9PT0xMjV9ZnVuY3Rpb24gRThlKHQpe3ZhciBlO3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODooZT10fDMyLDk3PD1lJiZlPD0xMDI/ZS05NysxMDotMSl9ZnVuY3Rpb24gUzhlKHQpe3JldHVybiB0PT09MTIwPzI6dD09PTExNz80OnQ9PT04NT84OjB9ZnVuY3Rpb24gQzhlKHQpe3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODotMX1mdW5jdGlvbiBKUSh0KXtyZXR1cm4gdD09PTQ4PyJcMCI6dD09PTk3PyJceDA3Ijp0PT09OTg/IlxiIjp0PT09MTE2fHx0PT09OT8iCSI6dD09PTExMD9gCmA6dD09PTExOD8iXHYiOnQ9PT0xMDI/IlxmIjp0PT09MTE0PyJcciI6dD09PTEwMT8iXHgxQiI6dD09PTMyPyIgIjp0PT09MzQ/JyInOnQ9PT00Nz8iLyI6dD09PTkyPyJcXCI6dD09PTc4PyJceDg1Ijp0PT09OTU/Ilx4QTAiOnQ9PT03Nj8iXHUyMDI4Ijp0PT09ODA/Ilx1MjAyOSI6IiJ9ZnVuY3Rpb24gQThlKHQpe3JldHVybiB0PD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOlN0cmluZy5mcm9tQ2hhckNvZGUoKHQtNjU1MzY+PjEwKSs1NTI5NiwodC02NTUzNiYxMDIzKSs1NjMyMCl9ZnVuY3Rpb24gXzhlKHQsZSl7dGhpcy5pbnB1dD10LHRoaXMuZmlsZW5hbWU9ZS5maWxlbmFtZXx8bnVsbCx0aGlzLnNjaGVtYT1lLnNjaGVtYXx8Z1osdGhpcy5vbldhcm5pbmc9ZS5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9ZS5sZWdhY3l8fCExLHRoaXMuanNvbj1lLmpzb258fCExLHRoaXMubGlzdGVuZXI9ZS5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZmlyc3RUYWJJbkxpbmU9LTEsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24ga1oodCxlKXt2YXIgcj17bmFtZTp0LmZpbGVuYW1lLGJ1ZmZlcjp0LmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOnQucG9zaXRpb24sbGluZTp0LmxpbmUsY29sdW1uOnQucG9zaXRpb24tdC5saW5lU3RhcnR9O3JldHVybiByLnNuaXBwZXQ9Z0FlKHIpLG5ldyBNcyhlLHIpfWZ1bmN0aW9uIFF0KHQsZSl7dGhyb3cga1oodCxlKX1mdW5jdGlvbiBLNSh0LGUpe3Qub25XYXJuaW5nJiZ0Lm9uV2FybmluZy5jYWxsKG51bGwsa1oodCxlKSl9ZnVuY3Rpb24gamgodCxlLHIsbil7dmFyIGksYSxzLGw7aWYoZTxyKXtpZihsPXQuaW5wdXQuc2xpY2UoZSxyKSxuKWZvcihpPTAsYT1sLmxlbmd0aDtpPGE7aSs9MSlzPWwuY2hhckNvZGVBdChpKSxzPT09OXx8MzI8PXMmJnM8PTExMTQxMTF8fFF0KHQsImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSB3OGUudGVzdChsKSYmUXQodCwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTt0LnJlc3VsdCs9bH19ZnVuY3Rpb24gdFoodCxlLHIsbil7dmFyIGksYSxzLGw7Zm9yKEdpLmlzT2JqZWN0KHIpfHxRdCh0LCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpLGk9T2JqZWN0LmtleXMocikscz0wLGw9aS5sZW5ndGg7czxsO3MrPTEpYT1pW3NdLEtoLmNhbGwoZSxhKXx8KGVbYV09clthXSxuW2FdPSEwKX1mdW5jdGlvbiBUbSh0LGUscixuLGksYSxzLGwsdSl7dmFyIGgsZjtpZihBcnJheS5pc0FycmF5KGkpKWZvcihpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpLGg9MCxmPWkubGVuZ3RoO2g8ZjtoKz0xKUFycmF5LmlzQXJyYXkoaVtoXSkmJlF0KHQsIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKSx0eXBlb2YgaT09Im9iamVjdCImJlpRKGlbaF0pPT09IltvYmplY3QgT2JqZWN0XSImJihpW2hdPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2YgaT09Im9iamVjdCImJlpRKGkpPT09IltvYmplY3QgT2JqZWN0XSImJihpPSJbb2JqZWN0IE9iamVjdF0iKSxpPVN0cmluZyhpKSxlPT09bnVsbCYmKGU9e30pLG49PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGg9MCxmPWEubGVuZ3RoO2g8ZjtoKz0xKXRaKHQsZSxhW2hdLHIpO2Vsc2UgdFoodCxlLGEscik7ZWxzZSF0Lmpzb24mJiFLaC5jYWxsKHIsaSkmJktoLmNhbGwoZSxpKSYmKHQubGluZT1zfHx0LmxpbmUsdC5saW5lU3RhcnQ9bHx8dC5saW5lU3RhcnQsdC5wb3NpdGlvbj11fHx0LnBvc2l0aW9uLFF0KHQsImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSksaT09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmF9KTplW2ldPWEsZGVsZXRlIHJbaV07cmV0dXJuIGV9ZnVuY3Rpb24gWjkodCl7dmFyIGU7ZT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZT09PTEwP3QucG9zaXRpb24rKzplPT09MTM/KHQucG9zaXRpb24rKyx0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT0xMCYmdC5wb3NpdGlvbisrKTpRdCh0LCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSx0LmxpbmUrPTEsdC5saW5lU3RhcnQ9dC5wb3NpdGlvbix0LmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIERpKHQsZSxyKXtmb3IodmFyIG49MCxpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtpIT09MDspe2Zvcig7RmQoaSk7KWk9PT05JiZ0LmZpcnN0VGFiSW5MaW5lPT09LTEmJih0LmZpcnN0VGFiSW5MaW5lPXQucG9zaXRpb24pLGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoZSYmaT09PTM1KWRvIGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoaSE9PTEwJiZpIT09MTMmJmkhPT0wKTtpZihBYyhpKSlmb3IoWjkodCksaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbisrLHQubGluZUluZGVudD0wO2k9PT0zMjspdC5saW5lSW5kZW50KyssaT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtlbHNlIGJyZWFrfXJldHVybiByIT09LTEmJm4hPT0wJiZ0LmxpbmVJbmRlbnQ8ciYmSzUodCwiZGVmaWNpZW50IGluZGVudGF0aW9uIiksbn1mdW5jdGlvbiBKNSh0KXt2YXIgZT10LnBvc2l0aW9uLHI7cmV0dXJuIHI9dC5pbnB1dC5jaGFyQ29kZUF0KGUpLCEhKChyPT09NDV8fHI9PT00NikmJnI9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsxKSYmcj09PXQuaW5wdXQuY2hhckNvZGVBdChlKzIpJiYoZSs9MyxyPXQuaW5wdXQuY2hhckNvZGVBdChlKSxyPT09MHx8SXMocikpKX1mdW5jdGlvbiBKOSh0LGUpe2U9PT0xP3QucmVzdWx0Kz0iICI6ZT4xJiYodC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsZS0xKSl9ZnVuY3Rpb24gTDhlKHQsZSxyKXt2YXIgbixpLGEscyxsLHUsaCxmLGQ9dC5raW5kLHA9dC5yZXN1bHQsbTtpZihtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxJcyhtKXx8d20obSl8fG09PT0zNXx8bT09PTM4fHxtPT09NDJ8fG09PT0zM3x8bT09PTEyNHx8bT09PTYyfHxtPT09Mzl8fG09PT0zNHx8bT09PTM3fHxtPT09NjR8fG09PT05Nnx8KG09PT02M3x8bT09PTQ1KSYmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksSXMoaSl8fHImJndtKGkpKSlyZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiLGE9cz10LnBvc2l0aW9uLGw9ITE7bSE9PTA7KXtpZihtPT09NTgpe2lmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksSXMoaSl8fHImJndtKGkpKWJyZWFrfWVsc2UgaWYobT09PTM1KXtpZihuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uLTEpLElzKG4pKWJyZWFrfWVsc2V7aWYodC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZKNSh0KXx8ciYmd20obSkpYnJlYWs7aWYoQWMobSkpaWYodT10LmxpbmUsaD10LmxpbmVTdGFydCxmPXQubGluZUluZGVudCxEaSh0LCExLC0xKSx0LmxpbmVJbmRlbnQ+PWUpe2w9ITAsbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9ZWxzZXt0LnBvc2l0aW9uPXMsdC5saW5lPXUsdC5saW5lU3RhcnQ9aCx0LmxpbmVJbmRlbnQ9ZjticmVha319bCYmKGpoKHQsYSxzLCExKSxKOSh0LHQubGluZS11KSxhPXM9dC5wb3NpdGlvbixsPSExKSxGZChtKXx8KHM9dC5wb3NpdGlvbisxKSxtPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pfXJldHVybiBqaCh0LGEscywhMSksdC5yZXN1bHQ/ITA6KHQua2luZD1kLHQucmVzdWx0PXAsITEpfWZ1bmN0aW9uIEQ4ZSh0LGUpe3ZhciByLG4saTtpZihyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxyIT09MzkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKyssbj1pPXQucG9zaXRpb247KHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KWlmKHI9PT0zOSlpZihqaCh0LG4sdC5wb3NpdGlvbiwhMCkscj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxyPT09Mzkpbj10LnBvc2l0aW9uLHQucG9zaXRpb24rKyxpPXQucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIEFjKHIpPyhqaCh0LG4saSwhMCksSjkodCxEaSh0LCExLGUpKSxuPWk9dC5wb3NpdGlvbik6dC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZKNSh0KT9RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKToodC5wb3NpdGlvbisrLGk9dC5wb3NpdGlvbik7UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIE44ZSh0LGUpe3ZhciByLG4saSxhLHMsbDtpZihsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxsIT09MzQpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKysscj1uPXQucG9zaXRpb247KGw9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KXtpZihsPT09MzQpcmV0dXJuIGpoKHQscix0LnBvc2l0aW9uLCEwKSx0LnBvc2l0aW9uKyssITA7aWYobD09PTkyKXtpZihqaCh0LHIsdC5wb3NpdGlvbiwhMCksbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxBYyhsKSlEaSh0LCExLGUpO2Vsc2UgaWYobDwyNTYmJndaW2xdKXQucmVzdWx0Kz1UWltsXSx0LnBvc2l0aW9uKys7ZWxzZSBpZigocz1TOGUobCkpPjApe2ZvcihpPXMsYT0wO2k+MDtpLS0pbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSwocz1FOGUobCkpPj0wP2E9KGE8PDQpK3M6UXQodCwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7dC5yZXN1bHQrPUE4ZShhKSx0LnBvc2l0aW9uKyt9ZWxzZSBRdCh0LCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO3I9bj10LnBvc2l0aW9ufWVsc2UgQWMobCk/KGpoKHQscixuLCEwKSxKOSh0LERpKHQsITEsZSkpLHI9bj10LnBvc2l0aW9uKTp0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJko1KHQpP1F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOih0LnBvc2l0aW9uKyssbj10LnBvc2l0aW9uKX1RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gUjhlKHQsZSl7dmFyIHI9ITAsbixpLGEscz10LnRhZyxsLHU9dC5hbmNob3IsaCxmLGQscCxtLGc9T2JqZWN0LmNyZWF0ZShudWxsKSx5LHYseCxiO2lmKGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGI9PT05MSlmPTkzLG09ITEsbD1bXTtlbHNlIGlmKGI9PT0xMjMpZj0xMjUsbT0hMCxsPXt9O2Vsc2UgcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1sKSxiPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2IhPT0wOyl7aWYoRGkodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09ZilyZXR1cm4gdC5wb3NpdGlvbisrLHQudGFnPXMsdC5hbmNob3I9dSx0LmtpbmQ9bT8ibWFwcGluZyI6InNlcXVlbmNlIix0LnJlc3VsdD1sLCEwO3I/Yj09PTQ0JiZRdCh0LCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6UXQodCwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSx2PXk9eD1udWxsLGQ9cD0hMSxiPT09NjMmJihoPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLElzKGgpJiYoZD1wPSEwLHQucG9zaXRpb24rKyxEaSh0LCEwLGUpKSksbj10LmxpbmUsaT10LmxpbmVTdGFydCxhPXQucG9zaXRpb24sa20odCxlLFg1LCExLCEwKSx2PXQudGFnLHk9dC5yZXN1bHQsRGkodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwocHx8dC5saW5lPT09bikmJmI9PT01OCYmKGQ9ITAsYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxEaSh0LCEwLGUpLGttKHQsZSxYNSwhMSwhMCkseD10LnJlc3VsdCksbT9UbSh0LGwsZyx2LHkseCxuLGksYSk6ZD9sLnB1c2goVG0odCxudWxsLGcsdix5LHgsbixpLGEpKTpsLnB1c2goeSksRGkodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09NDQ/KHI9ITAsYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6cj0hMX1RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIE04ZSh0LGUpe3ZhciByLG4saT1XOSxhPSExLHM9ITEsbD1lLHU9MCxoPSExLGYsZDtpZihkPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxkPT09MTI0KW49ITE7ZWxzZSBpZihkPT09NjIpbj0hMDtlbHNlIHJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiI7ZCE9PTA7KWlmKGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZD09PTQzfHxkPT09NDUpVzk9PT1pP2k9ZD09PTQzP1FROmI4ZTpRdCh0LCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChmPUM4ZShkKSk+PTApZj09PTA/UXQodCwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOnM/UXQodCwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKToobD1lK2YtMSxzPSEwKTtlbHNlIGJyZWFrO2lmKEZkKGQpKXtkbyBkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKEZkKGQpKTtpZihkPT09MzUpZG8gZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZSghQWMoZCkmJmQhPT0wKX1mb3IoO2QhPT0wOyl7Zm9yKFo5KHQpLHQubGluZUluZGVudD0wLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pOyghc3x8dC5saW5lSW5kZW50PGwpJiZkPT09MzI7KXQubGluZUluZGVudCsrLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoIXMmJnQubGluZUluZGVudD5sJiYobD10LmxpbmVJbmRlbnQpLEFjKGQpKXt1Kys7Y29udGludWV9aWYodC5saW5lSW5kZW50PGwpe2k9PT1RUT90LnJlc3VsdCs9R2kucmVwZWF0KGAKYCxhPzErdTp1KTppPT09VzkmJmEmJih0LnJlc3VsdCs9YApgKTticmVha31mb3Iobj9GZChkKT8oaD0hMCx0LnJlc3VsdCs9R2kucmVwZWF0KGAKYCxhPzErdTp1KSk6aD8oaD0hMSx0LnJlc3VsdCs9R2kucmVwZWF0KGAKYCx1KzEpKTp1PT09MD9hJiYodC5yZXN1bHQrPSIgIik6dC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsdSk6dC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsYT8xK3U6dSksYT0hMCxzPSEwLHU9MCxyPXQucG9zaXRpb247IUFjKGQpJiZkIT09MDspZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtqaCh0LHIsdC5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gcloodCxlKXt2YXIgcixuPXQudGFnLGk9dC5hbmNob3IsYT1bXSxzLGw9ITEsdTtpZih0LmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1hKSx1PXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTt1IT09MCYmKHQuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKHQucG9zaXRpb249dC5maXJzdFRhYkluTGluZSxRdCh0LCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLCEodSE9PTQ1fHwocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSwhSXMocykpKSk7KXtpZihsPSEwLHQucG9zaXRpb24rKyxEaSh0LCEwLC0xKSYmdC5saW5lSW5kZW50PD1lKXthLnB1c2gobnVsbCksdT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9aWYocj10LmxpbmUsa20odCxlLHZaLCExLCEwKSxhLnB1c2godC5yZXN1bHQpLERpKHQsITAsLTEpLHU9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLCh0LmxpbmU9PT1yfHx0LmxpbmVJbmRlbnQ+ZSkmJnUhPT0wKVF0KHQsImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gbD8odC50YWc9bix0LmFuY2hvcj1pLHQua2luZD0ic2VxdWVuY2UiLHQucmVzdWx0PWEsITApOiExfWZ1bmN0aW9uIEk4ZSh0LGUscil7dmFyIG4saSxhLHMsbCx1LGg9dC50YWcsZj10LmFuY2hvcixkPXt9LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxtPW51bGwsZz1udWxsLHk9bnVsbCx2PSExLHg9ITEsYjtpZih0LmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1kKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtiIT09MDspe2lmKCF2JiZ0LmZpcnN0VGFiSW5MaW5lIT09LTEmJih0LnBvc2l0aW9uPXQuZmlyc3RUYWJJbkxpbmUsUXQodCwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSxuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLGE9dC5saW5lLChiPT09NjN8fGI9PT01OCkmJklzKG4pKWI9PT02Mz8odiYmKFRtKHQsZCxwLG0sZyxudWxsLHMsbCx1KSxtPWc9eT1udWxsKSx4PSEwLHY9ITAsaT0hMCk6dj8odj0hMSxpPSEwKTpRdCh0LCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIiksdC5wb3NpdGlvbis9MSxiPW47ZWxzZXtpZihzPXQubGluZSxsPXQubGluZVN0YXJ0LHU9dC5wb3NpdGlvbiwha20odCxyLHlaLCExLCEwKSlicmVhaztpZih0LmxpbmU9PT1hKXtmb3IoYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7RmQoYik7KWI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoYj09PTU4KWI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksSXMoYil8fFF0KHQsImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLHYmJihUbSh0LGQscCxtLGcsbnVsbCxzLGwsdSksbT1nPXk9bnVsbCkseD0hMCx2PSExLGk9ITEsbT10LnRhZyxnPXQucmVzdWx0O2Vsc2UgaWYoeClRdCh0LCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCIpO2Vsc2UgcmV0dXJuIHQudGFnPWgsdC5hbmNob3I9ZiwhMH1lbHNlIGlmKHgpUXQodCwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gdC50YWc9aCx0LmFuY2hvcj1mLCEwfWlmKCh0LmxpbmU9PT1hfHx0LmxpbmVJbmRlbnQ+ZSkmJih2JiYocz10LmxpbmUsbD10LmxpbmVTdGFydCx1PXQucG9zaXRpb24pLGttKHQsZSxqNSwhMCxpKSYmKHY/Zz10LnJlc3VsdDp5PXQucmVzdWx0KSx2fHwoVG0odCxkLHAsbSxnLHkscyxsLHUpLG09Zz15PW51bGwpLERpKHQsITAsLTEpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSwodC5saW5lPT09YXx8dC5saW5lSW5kZW50PmUpJiZiIT09MClRdCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gdiYmVG0odCxkLHAsbSxnLG51bGwscyxsLHUpLHgmJih0LnRhZz1oLHQuYW5jaG9yPWYsdC5raW5kPSJtYXBwaW5nIix0LnJlc3VsdD1kKSx4fWZ1bmN0aW9uIE84ZSh0KXt2YXIgZSxyPSExLG49ITEsaSxhLHM7aWYocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikscyE9PTMzKXJldHVybiExO2lmKHQudGFnIT09bnVsbCYmUXQodCwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHM9PT02MD8ocj0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpzPT09MzM/KG49ITAsaT0iISEiLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOmk9IiEiLGU9dC5wb3NpdGlvbixyKXtkbyBzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKHMhPT0wJiZzIT09NjIpO3QucG9zaXRpb248dC5sZW5ndGg/KGE9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOlF0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoO3MhPT0wJiYhSXMocyk7KXM9PT0zMyYmKG4/UXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOihpPXQuaW5wdXQuc2xpY2UoZS0xLHQucG9zaXRpb24rMSkseFoudGVzdChpKXx8UXQodCwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxuPSEwLGU9dC5wb3NpdGlvbisxKSkscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTthPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxrOGUudGVzdChhKSYmUXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9YSYmIWJaLnRlc3QoYSkmJlF0KHQsInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIithKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2h7UXQodCwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK2EpfXJldHVybiByP3QudGFnPWE6S2guY2FsbCh0LnRhZ01hcCxpKT90LnRhZz10LnRhZ01hcFtpXSthOmk9PT0iISI/dC50YWc9IiEiK2E6aT09PSIhISI/dC50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrYTpRdCh0LCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicraSsnIicpLCEwfWZ1bmN0aW9uIFA4ZSh0KXt2YXIgZSxyO2lmKHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHIhPT0zOClyZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiZRdCh0LCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtyIT09MCYmIUlzKHIpJiYhd20ocik7KXI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZRdCh0LCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdC5hbmNob3I9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLCEwfWZ1bmN0aW9uIEI4ZSh0KXt2YXIgZSxyLG47aWYobj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbiE9PTQyKXJldHVybiExO2ZvcihuPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtuIT09MCYmIUlzKG4pJiYhd20obik7KW49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZRdCh0LCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxyPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxLaC5jYWxsKHQuYW5jaG9yTWFwLHIpfHxRdCh0LCd1bmlkZW50aWZpZWQgYWxpYXMgIicrcisnIicpLHQucmVzdWx0PXQuYW5jaG9yTWFwW3JdLERpKHQsITAsLTEpLCEwfWZ1bmN0aW9uIGttKHQsZSxyLG4saSl7dmFyIGEscyxsLHU9MSxoPSExLGY9ITEsZCxwLG0sZyx5LHY7aWYodC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoIm9wZW4iLHQpLHQudGFnPW51bGwsdC5hbmNob3I9bnVsbCx0LmtpbmQ9bnVsbCx0LnJlc3VsdD1udWxsLGE9cz1sPWo1PT09cnx8dlo9PT1yLG4mJkRpKHQsITAsLTEpJiYoaD0hMCx0LmxpbmVJbmRlbnQ+ZT91PTE6dC5saW5lSW5kZW50PT09ZT91PTA6dC5saW5lSW5kZW50PGUmJih1PS0xKSksdT09PTEpZm9yKDtPOGUodCl8fFA4ZSh0KTspRGkodCwhMCwtMSk/KGg9ITAsbD1hLHQubGluZUluZGVudD5lP3U9MTp0LmxpbmVJbmRlbnQ9PT1lP3U9MDp0LmxpbmVJbmRlbnQ8ZSYmKHU9LTEpKTpsPSExO2lmKGwmJihsPWh8fGkpLCh1PT09MXx8ajU9PT1yKSYmKFg1PT09cnx8eVo9PT1yP3k9ZTp5PWUrMSx2PXQucG9zaXRpb24tdC5saW5lU3RhcnQsdT09PTE/bCYmKHJaKHQsdil8fEk4ZSh0LHYseSkpfHxSOGUodCx5KT9mPSEwOihzJiZNOGUodCx5KXx8RDhlKHQseSl8fE44ZSh0LHkpP2Y9ITA6QjhlKHQpPyhmPSEwLCh0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbCkmJlF0KHQsImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOkw4ZSh0LHksWDU9PT1yKSYmKGY9ITAsdC50YWc9PT1udWxsJiYodC50YWc9Ij8iKSksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6dT09PTAmJihmPWwmJnJaKHQsdikpKSx0LnRhZz09PW51bGwpdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KTtlbHNlIGlmKHQudGFnPT09Ij8iKXtmb3IodC5yZXN1bHQhPT1udWxsJiZ0LmtpbmQhPT0ic2NhbGFyIiYmUXQodCwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK3Qua2luZCsnIicpLGQ9MCxwPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7ZDxwO2QrPTEpaWYoZz10LmltcGxpY2l0VHlwZXNbZF0sZy5yZXNvbHZlKHQucmVzdWx0KSl7dC5yZXN1bHQ9Zy5jb25zdHJ1Y3QodC5yZXN1bHQpLHQudGFnPWcudGFnLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYodC50YWchPT0iISIpe2lmKEtoLmNhbGwodC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl0sdC50YWcpKWc9dC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl1bdC50YWddO2Vsc2UgZm9yKGc9bnVsbCxtPXQudHlwZU1hcC5tdWx0aVt0LmtpbmR8fCJmYWxsYmFjayJdLGQ9MCxwPW0ubGVuZ3RoO2Q8cDtkKz0xKWlmKHQudGFnLnNsaWNlKDAsbVtkXS50YWcubGVuZ3RoKT09PW1bZF0udGFnKXtnPW1bZF07YnJlYWt9Z3x8UXQodCwidW5rbm93biB0YWcgITwiK3QudGFnKyI+IiksdC5yZXN1bHQhPT1udWxsJiZnLmtpbmQhPT10LmtpbmQmJlF0KHQsInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Iit0LnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJytnLmtpbmQrJyIsIG5vdCAiJyt0LmtpbmQrJyInKSxnLnJlc29sdmUodC5yZXN1bHQsdC50YWcpPyh0LnJlc3VsdD1nLmNvbnN0cnVjdCh0LnJlc3VsdCx0LnRhZyksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6UXQodCwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK3QudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiB0Lmxpc3RlbmVyIT09bnVsbCYmdC5saXN0ZW5lcigiY2xvc2UiLHQpLHQudGFnIT09bnVsbHx8dC5hbmNob3IhPT1udWxsfHxmfWZ1bmN0aW9uIEY4ZSh0KXt2YXIgZT10LnBvc2l0aW9uLHIsbixpLGE9ITEscztmb3IodC52ZXJzaW9uPW51bGwsdC5jaGVja0xpbmVCcmVha3M9dC5sZWdhY3ksdC50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0LmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wJiYoRGkodCwhMCwtMSkscz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksISh0LmxpbmVJbmRlbnQ+MHx8cyE9PTM3KSk7KXtmb3IoYT0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHI9dC5wb3NpdGlvbjtzIT09MCYmIUlzKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2ZvcihuPXQuaW5wdXQuc2xpY2Uocix0LnBvc2l0aW9uKSxpPVtdLG4ubGVuZ3RoPDEmJlF0KHQsImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO3MhPT0wOyl7Zm9yKDtGZChzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZihzPT09MzUpe2RvIHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUocyE9PTAmJiFBYyhzKSk7YnJlYWt9aWYoQWMocykpYnJlYWs7Zm9yKHI9dC5wb3NpdGlvbjtzIT09MCYmIUlzKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2kucHVzaCh0LmlucHV0LnNsaWNlKHIsdC5wb3NpdGlvbikpfXMhPT0wJiZaOSh0KSxLaC5jYWxsKGVaLG4pP2VaW25dKHQsbixpKTpLNSh0LCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytuKyciJyl9aWYoRGkodCwhMCwtMSksdC5saW5lSW5kZW50PT09MCYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09NDUmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpPT09NDUmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzIpPT09NDU/KHQucG9zaXRpb24rPTMsRGkodCwhMCwtMSkpOmEmJlF0KHQsImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSxrbSh0LHQubGluZUluZGVudC0xLGo1LCExLCEwKSxEaSh0LCEwLC0xKSx0LmNoZWNrTGluZUJyZWFrcyYmVDhlLnRlc3QodC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pKSYmSzUodCwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksdC5kb2N1bWVudHMucHVzaCh0LnJlc3VsdCksdC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZKNSh0KSl7dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09NDYmJih0LnBvc2l0aW9uKz0zLERpKHQsITAsLTEpKTtyZXR1cm59aWYodC5wb3NpdGlvbjx0Lmxlbmd0aC0xKVF0KHQsImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24gRVoodCxlKXt0PVN0cmluZyh0KSxlPWV8fHt9LHQubGVuZ3RoIT09MCYmKHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSE9PTEwJiZ0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkhPT0xMyYmKHQrPWAKYCksdC5jaGFyQ29kZUF0KDApPT09NjUyNzkmJih0PXQuc2xpY2UoMSkpKTt2YXIgcj1uZXcgXzhlKHQsZSksbj10LmluZGV4T2YoIlwwIik7Zm9yKG4hPT0tMSYmKHIucG9zaXRpb249bixRdChyLCJudWxsIGJ5dGUgaXMgbm90IGFsbG93ZWQgaW4gaW5wdXQiKSksci5pbnB1dCs9IlwwIjtyLmlucHV0LmNoYXJDb2RlQXQoci5wb3NpdGlvbik9PT0zMjspci5saW5lSW5kZW50Kz0xLHIucG9zaXRpb24rPTE7Zm9yKDtyLnBvc2l0aW9uPHIubGVuZ3RoLTE7KUY4ZShyKTtyZXR1cm4gci5kb2N1bWVudHN9ZnVuY3Rpb24gejhlKHQsZSxyKXtlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2Ygcj4idSImJihyPWUsZT1udWxsKTt2YXIgbj1FWih0LHIpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybiBuO2Zvcih2YXIgaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpZShuW2ldKX1mdW5jdGlvbiBHOGUodCxlKXt2YXIgcj1FWih0LGUpO2lmKHIubGVuZ3RoIT09MCl7aWYoci5sZW5ndGg9PT0xKXJldHVybiByWzBdO3Rocm93IG5ldyBNcygiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19ZnVuY3Rpb24gb19lKHQsZSl7dmFyIHIsbixpLGEscyxsLHU7aWYoZT09PW51bGwpcmV0dXJue307Zm9yKHI9e30sbj1PYmplY3Qua2V5cyhlKSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSlzPW5baV0sbD1TdHJpbmcoZVtzXSkscy5zbGljZSgwLDIpPT09IiEhIiYmKHM9InRhZzp5YW1sLm9yZywyMDAyOiIrcy5zbGljZSgyKSksdT10LmNvbXBpbGVkVHlwZU1hcC5mYWxsYmFja1tzXSx1JiZBWi5jYWxsKHUuc3R5bGVBbGlhc2VzLGwpJiYobD11LnN0eWxlQWxpYXNlc1tsXSkscltzXT1sO3JldHVybiByfWZ1bmN0aW9uIGxfZSh0KXt2YXIgZSxyLG47aWYoZT10LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHQ8PTI1NSlyPSJ4IixuPTI7ZWxzZSBpZih0PD02NTUzNSlyPSJ1IixuPTQ7ZWxzZSBpZih0PD00Mjk0OTY3Mjk1KXI9IlUiLG49ODtlbHNlIHRocm93IG5ldyBNcygiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpO3JldHVybiJcXCIrcitHaS5yZXBlYXQoIjAiLG4tZS5sZW5ndGgpK2V9ZnVuY3Rpb24gdV9lKHQpe3RoaXMuc2NoZW1hPXQuc2NoZW1hfHxnWix0aGlzLmluZGVudD1NYXRoLm1heCgxLHQuaW5kZW50fHwyKSx0aGlzLm5vQXJyYXlJbmRlbnQ9dC5ub0FycmF5SW5kZW50fHwhMSx0aGlzLnNraXBJbnZhbGlkPXQuc2tpcEludmFsaWR8fCExLHRoaXMuZmxvd0xldmVsPUdpLmlzTm90aGluZyh0LmZsb3dMZXZlbCk/LTE6dC5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1vX2UodGhpcy5zY2hlbWEsdC5zdHlsZXN8fG51bGwpLHRoaXMuc29ydEtleXM9dC5zb3J0S2V5c3x8ITEsdGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGh8fDgwLHRoaXMubm9SZWZzPXQubm9SZWZzfHwhMSx0aGlzLm5vQ29tcGF0TW9kZT10Lm5vQ29tcGF0TW9kZXx8ITEsdGhpcy5jb25kZW5zZUZsb3c9dC5jb25kZW5zZUZsb3d8fCExLHRoaXMucXVvdGluZ1R5cGU9dC5xdW90aW5nVHlwZT09PSciJz9CdjpjX2UsdGhpcy5mb3JjZVF1b3Rlcz10LmZvcmNlUXVvdGVzfHwhMSx0aGlzLnJlcGxhY2VyPXR5cGVvZiB0LnJlcGxhY2VyPT0iZnVuY3Rpb24iP3QucmVwbGFjZXI6bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gbloodCxlKXtmb3IodmFyIHI9R2kucmVwZWF0KCIgIixlKSxuPTAsaT0tMSxhPSIiLHMsbD10Lmxlbmd0aDtuPGw7KWk9dC5pbmRleE9mKGAKYCxuKSxpPT09LTE/KHM9dC5zbGljZShuKSxuPWwpOihzPXQuc2xpY2UobixpKzEpLG49aSsxKSxzLmxlbmd0aCYmcyE9PWAKYCYmKGErPXIpLGErPXM7cmV0dXJuIGF9ZnVuY3Rpb24gWDkodCxlKXtyZXR1cm5gCmArR2kucmVwZWF0KCIgIix0LmluZGVudCplKX1mdW5jdGlvbiBoX2UodCxlKXt2YXIgcixuLGk7Zm9yKHI9MCxuPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7cjxuO3IrPTEpaWYoaT10LmltcGxpY2l0VHlwZXNbcl0saS5yZXNvbHZlKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFo1KHQpe3JldHVybiB0PT09VzhlfHx0PT09VThlfWZ1bmN0aW9uIEZ2KHQpe3JldHVybiAzMjw9dCYmdDw9MTI2fHwxNjE8PXQmJnQ8PTU1Mjk1JiZ0IT09ODIzMiYmdCE9PTgyMzN8fDU3MzQ0PD10JiZ0PD02NTUzMyYmdCE9PWVMfHw2NTUzNjw9dCYmdDw9MTExNDExMX1mdW5jdGlvbiBpWih0KXtyZXR1cm4gRnYodCkmJnQhPT1lTCYmdCE9PUg4ZSYmdCE9PVB2fWZ1bmN0aW9uIGFaKHQsZSxyKXt2YXIgbj1pWih0KSxpPW4mJiFaNSh0KTtyZXR1cm4ocj9uOm4mJnQhPT1fWiYmdCE9PUxaJiZ0IT09RFomJnQhPT1OWiYmdCE9PVJaKSYmdCE9PXE5JiYhKGU9PT1RNSYmIWkpfHxpWihlKSYmIVo1KGUpJiZ0PT09cTl8fGU9PT1RNSYmaX1mdW5jdGlvbiBmX2UodCl7cmV0dXJuIEZ2KHQpJiZ0IT09ZUwmJiFaNSh0KSYmdCE9PVo4ZSYmdCE9PXRfZSYmdCE9PVE1JiZ0IT09X1omJnQhPT1MWiYmdCE9PURaJiZ0IT09TlomJnQhPT1SWiYmdCE9PXE5JiZ0IT09ajhlJiZ0IT09UThlJiZ0IT09WThlJiZ0IT09aV9lJiZ0IT09SjhlJiZ0IT09ZV9lJiZ0IT09SzhlJiZ0IT09cThlJiZ0IT09WDhlJiZ0IT09cl9lJiZ0IT09bl9lfWZ1bmN0aW9uIGRfZSh0KXtyZXR1cm4hWjUodCkmJnQhPT1RNX1mdW5jdGlvbiBJdih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlKSxuO3JldHVybiByPj01NTI5NiYmcjw9NTYzMTkmJmUrMTx0Lmxlbmd0aCYmKG49dC5jaGFyQ29kZUF0KGUrMSksbj49NTYzMjAmJm48PTU3MzQzKT8oci01NTI5NikqMTAyNCtuLTU2MzIwKzY1NTM2OnJ9ZnVuY3Rpb24gTVoodCl7dmFyIGU9L15cbiogLztyZXR1cm4gZS50ZXN0KHQpfWZ1bmN0aW9uIHBfZSh0LGUscixuLGksYSxzLGwpe3ZhciB1LGg9MCxmPW51bGwsZD0hMSxwPSExLG09biE9PS0xLGc9LTEseT1mX2UoSXYodCwwKSkmJmRfZShJdih0LHQubGVuZ3RoLTEpKTtpZihlfHxzKWZvcih1PTA7dTx0Lmxlbmd0aDtoPj02NTUzNj91Kz0yOnUrKyl7aWYoaD1Jdih0LHUpLCFGdihoKSlyZXR1cm4gYm07eT15JiZhWihoLGYsbCksZj1ofWVsc2V7Zm9yKHU9MDt1PHQubGVuZ3RoO2g+PTY1NTM2P3UrPTI6dSsrKXtpZihoPUl2KHQsdSksaD09PVB2KWQ9ITAsbSYmKHA9cHx8dS1nLTE+biYmdFtnKzFdIT09IiAiLGc9dSk7ZWxzZSBpZighRnYoaCkpcmV0dXJuIGJtO3k9eSYmYVooaCxmLGwpLGY9aH1wPXB8fG0mJnUtZy0xPm4mJnRbZysxXSE9PSIgIn1yZXR1cm4hZCYmIXA/eSYmIXMmJiFpKHQpP0laOmE9PT1Cdj9ibTpqOTpyPjkmJk1aKHQpP2JtOnM/YT09PUJ2P2JtOmo5OnA/UFo6T1p9ZnVuY3Rpb24gbV9lKHQsZSxyLG4saSl7dC5kdW1wPWZ1bmN0aW9uKCl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0LnF1b3RpbmdUeXBlPT09QnY/JyIiJzoiJyciO2lmKCF0Lm5vQ29tcGF0TW9kZSYmKGFfZS5pbmRleE9mKGUpIT09LTF8fHNfZS50ZXN0KGUpKSlyZXR1cm4gdC5xdW90aW5nVHlwZT09PUJ2PyciJytlKyciJzoiJyIrZSsiJyI7dmFyIGE9dC5pbmRlbnQqTWF0aC5tYXgoMSxyKSxzPXQubGluZVdpZHRoPT09LTE/LTE6TWF0aC5tYXgoTWF0aC5taW4odC5saW5lV2lkdGgsNDApLHQubGluZVdpZHRoLWEpLGw9bnx8dC5mbG93TGV2ZWw+LTEmJnI+PXQuZmxvd0xldmVsO2Z1bmN0aW9uIHUoaCl7cmV0dXJuIGhfZSh0LGgpfXN3aXRjaChvKHUsInRlc3RBbWJpZ3VpdHkiKSxwX2UoZSxsLHQuaW5kZW50LHMsdSx0LnF1b3RpbmdUeXBlLHQuZm9yY2VRdW90ZXMmJiFuLGkpKXtjYXNlIElaOnJldHVybiBlO2Nhc2Ugajk6cmV0dXJuIiciK2UucmVwbGFjZSgvJy9nLCInJyIpKyInIjtjYXNlIE9aOnJldHVybiJ8IitzWihlLHQuaW5kZW50KStvWihuWihlLGEpKTtjYXNlIFBaOnJldHVybiI+IitzWihlLHQuaW5kZW50KStvWihuWihnX2UoZSxzKSxhKSk7Y2FzZSBibTpyZXR1cm4nIicreV9lKGUpKyciJztkZWZhdWx0OnRocm93IG5ldyBNcygiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGUiKX19KCl9ZnVuY3Rpb24gc1oodCxlKXt2YXIgcj1NWih0KT9TdHJpbmcoZSk6IiIsbj10W3QubGVuZ3RoLTFdPT09YApgLGk9biYmKHRbdC5sZW5ndGgtMl09PT1gCmB8fHQ9PT1gCmApLGE9aT8iKyI6bj8iIjoiLSI7cmV0dXJuIHIrYStgCmB9ZnVuY3Rpb24gb1oodCl7cmV0dXJuIHRbdC5sZW5ndGgtMV09PT1gCmA/dC5zbGljZSgwLC0xKTp0fWZ1bmN0aW9uIGdfZSh0LGUpe2Zvcih2YXIgcj0vKFxuKykoW15cbl0qKS9nLG49ZnVuY3Rpb24oKXt2YXIgaD10LmluZGV4T2YoYApgKTtyZXR1cm4gaD1oIT09LTE/aDp0Lmxlbmd0aCxyLmxhc3RJbmRleD1oLGxaKHQuc2xpY2UoMCxoKSxlKX0oKSxpPXRbMF09PT1gCmB8fHRbMF09PT0iICIsYSxzO3M9ci5leGVjKHQpOyl7dmFyIGw9c1sxXSx1PXNbMl07YT11WzBdPT09IiAiLG4rPWwrKCFpJiYhYSYmdSE9PSIiP2AKYDoiIikrbFoodSxlKSxpPWF9cmV0dXJuIG59ZnVuY3Rpb24gbFoodCxlKXtpZih0PT09IiJ8fHRbMF09PT0iICIpcmV0dXJuIHQ7Zm9yKHZhciByPS8gW14gXS9nLG4saT0wLGEscz0wLGw9MCx1PSIiO249ci5leGVjKHQpOylsPW4uaW5kZXgsbC1pPmUmJihhPXM+aT9zOmwsdSs9YApgK3Quc2xpY2UoaSxhKSxpPWErMSkscz1sO3JldHVybiB1Kz1gCmAsdC5sZW5ndGgtaT5lJiZzPmk/dSs9dC5zbGljZShpLHMpK2AKYCt0LnNsaWNlKHMrMSk6dSs9dC5zbGljZShpKSx1LnNsaWNlKDEpfWZ1bmN0aW9uIHlfZSh0KXtmb3IodmFyIGU9IiIscj0wLG4saT0wO2k8dC5sZW5ndGg7cj49NjU1MzY/aSs9MjppKyspcj1Jdih0LGkpLG49RmFbcl0sIW4mJkZ2KHIpPyhlKz10W2ldLHI+PTY1NTM2JiYoZSs9dFtpKzFdKSk6ZSs9bnx8bF9lKHIpO3JldHVybiBlfWZ1bmN0aW9uIHZfZSh0LGUscil7dmFyIG49IiIsaT10LnRhZyxhLHMsbDtmb3IoYT0wLHM9ci5sZW5ndGg7YTxzO2ErPTEpbD1yW2FdLHQucmVwbGFjZXImJihsPXQucmVwbGFjZXIuY2FsbChyLFN0cmluZyhhKSxsKSksKFB1KHQsZSxsLCExLCExKXx8dHlwZW9mIGw+InUiJiZQdSh0LGUsbnVsbCwhMSwhMSkpJiYobiE9PSIiJiYobis9IiwiKyh0LmNvbmRlbnNlRmxvdz8iIjoiICIpKSxuKz10LmR1bXApO3QudGFnPWksdC5kdW1wPSJbIituKyJdIn1mdW5jdGlvbiBjWih0LGUscixuKXt2YXIgaT0iIixhPXQudGFnLHMsbCx1O2ZvcihzPTAsbD1yLmxlbmd0aDtzPGw7cys9MSl1PXJbc10sdC5yZXBsYWNlciYmKHU9dC5yZXBsYWNlci5jYWxsKHIsU3RyaW5nKHMpLHUpKSwoUHUodCxlKzEsdSwhMCwhMCwhMSwhMCl8fHR5cGVvZiB1PiJ1IiYmUHUodCxlKzEsbnVsbCwhMCwhMCwhMSwhMCkpJiYoKCFufHxpIT09IiIpJiYoaSs9WDkodCxlKSksdC5kdW1wJiZQdj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP2krPSItIjppKz0iLSAiLGkrPXQuZHVtcCk7dC50YWc9YSx0LmR1bXA9aXx8IltdIn1mdW5jdGlvbiB4X2UodCxlLHIpe3ZhciBuPSIiLGk9dC50YWcsYT1PYmplY3Qua2V5cyhyKSxzLGwsdSxoLGY7Zm9yKHM9MCxsPWEubGVuZ3RoO3M8bDtzKz0xKWY9IiIsbiE9PSIiJiYoZis9IiwgIiksdC5jb25kZW5zZUZsb3cmJihmKz0nIicpLHU9YVtzXSxoPXJbdV0sdC5yZXBsYWNlciYmKGg9dC5yZXBsYWNlci5jYWxsKHIsdSxoKSksUHUodCxlLHUsITEsITEpJiYodC5kdW1wLmxlbmd0aD4xMDI0JiYoZis9Ij8gIiksZis9dC5kdW1wKyh0LmNvbmRlbnNlRmxvdz8nIic6IiIpKyI6IisodC5jb25kZW5zZUZsb3c/IiI6IiAiKSxQdSh0LGUsaCwhMSwhMSkmJihmKz10LmR1bXAsbis9ZikpO3QudGFnPWksdC5kdW1wPSJ7IituKyJ9In1mdW5jdGlvbiBiX2UodCxlLHIsbil7dmFyIGk9IiIsYT10LnRhZyxzPU9iamVjdC5rZXlzKHIpLGwsdSxoLGYsZCxwO2lmKHQuc29ydEtleXM9PT0hMClzLnNvcnQoKTtlbHNlIGlmKHR5cGVvZiB0LnNvcnRLZXlzPT0iZnVuY3Rpb24iKXMuc29ydCh0LnNvcnRLZXlzKTtlbHNlIGlmKHQuc29ydEtleXMpdGhyb3cgbmV3IE1zKCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7Zm9yKGw9MCx1PXMubGVuZ3RoO2w8dTtsKz0xKXA9IiIsKCFufHxpIT09IiIpJiYocCs9WDkodCxlKSksaD1zW2xdLGY9cltoXSx0LnJlcGxhY2VyJiYoZj10LnJlcGxhY2VyLmNhbGwocixoLGYpKSxQdSh0LGUrMSxoLCEwLCEwLCEwKSYmKGQ9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8dC5kdW1wJiZ0LmR1bXAubGVuZ3RoPjEwMjQsZCYmKHQuZHVtcCYmUHY9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9wKz0iPyI6cCs9Ij8gIikscCs9dC5kdW1wLGQmJihwKz1YOSh0LGUpKSxQdSh0LGUrMSxmLCEwLGQpJiYodC5kdW1wJiZQdj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP3ArPSI6IjpwKz0iOiAiLHArPXQuZHVtcCxpKz1wKSk7dC50YWc9YSx0LmR1bXA9aXx8Int9In1mdW5jdGlvbiB1Wih0LGUscil7dmFyIG4saSxhLHMsbCx1O2ZvcihpPXI/dC5leHBsaWNpdFR5cGVzOnQuaW1wbGljaXRUeXBlcyxhPTAscz1pLmxlbmd0aDthPHM7YSs9MSlpZihsPWlbYV0sKGwuaW5zdGFuY2VPZnx8bC5wcmVkaWNhdGUpJiYoIWwuaW5zdGFuY2VPZnx8dHlwZW9mIGU9PSJvYmplY3QiJiZlIGluc3RhbmNlb2YgbC5pbnN0YW5jZU9mKSYmKCFsLnByZWRpY2F0ZXx8bC5wcmVkaWNhdGUoZSkpKXtpZihyP2wubXVsdGkmJmwucmVwcmVzZW50TmFtZT90LnRhZz1sLnJlcHJlc2VudE5hbWUoZSk6dC50YWc9bC50YWc6dC50YWc9Ij8iLGwucmVwcmVzZW50KXtpZih1PXQuc3R5bGVNYXBbbC50YWddfHxsLmRlZmF1bHRTdHlsZSxDWi5jYWxsKGwucmVwcmVzZW50KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSIpbj1sLnJlcHJlc2VudChlLHUpO2Vsc2UgaWYoQVouY2FsbChsLnJlcHJlc2VudCx1KSluPWwucmVwcmVzZW50W3VdKGUsdSk7ZWxzZSB0aHJvdyBuZXcgTXMoIiE8IitsLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrdSsnIiBzdHlsZScpO3QuZHVtcD1ufXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFB1KHQsZSxyLG4saSxhLHMpe3QudGFnPW51bGwsdC5kdW1wPXIsdVoodCxyLCExKXx8dVoodCxyLCEwKTt2YXIgbD1DWi5jYWxsKHQuZHVtcCksdT1uLGg7biYmKG49dC5mbG93TGV2ZWw8MHx8dC5mbG93TGV2ZWw+ZSk7dmFyIGY9bD09PSJbb2JqZWN0IE9iamVjdF0ifHxsPT09IltvYmplY3QgQXJyYXldIixkLHA7aWYoZiYmKGQ9dC5kdXBsaWNhdGVzLmluZGV4T2YocikscD1kIT09LTEpLCh0LnRhZyE9PW51bGwmJnQudGFnIT09Ij8ifHxwfHx0LmluZGVudCE9PTImJmU+MCkmJihpPSExKSxwJiZ0LnVzZWREdXBsaWNhdGVzW2RdKXQuZHVtcD0iKnJlZl8iK2Q7ZWxzZXtpZihmJiZwJiYhdC51c2VkRHVwbGljYXRlc1tkXSYmKHQudXNlZER1cGxpY2F0ZXNbZF09ITApLGw9PT0iW29iamVjdCBPYmplY3RdIiluJiZPYmplY3Qua2V5cyh0LmR1bXApLmxlbmd0aCE9PTA/KGJfZSh0LGUsdC5kdW1wLGkpLHAmJih0LmR1bXA9IiZyZWZfIitkK3QuZHVtcCkpOih4X2UodCxlLHQuZHVtcCkscCYmKHQuZHVtcD0iJnJlZl8iK2QrIiAiK3QuZHVtcCkpO2Vsc2UgaWYobD09PSJbb2JqZWN0IEFycmF5XSIpbiYmdC5kdW1wLmxlbmd0aCE9PTA/KHQubm9BcnJheUluZGVudCYmIXMmJmU+MD9jWih0LGUtMSx0LmR1bXAsaSk6Y1oodCxlLHQuZHVtcCxpKSxwJiYodC5kdW1wPSImcmVmXyIrZCt0LmR1bXApKToodl9lKHQsZSx0LmR1bXApLHAmJih0LmR1bXA9IiZyZWZfIitkKyIgIit0LmR1bXApKTtlbHNlIGlmKGw9PT0iW29iamVjdCBTdHJpbmddIil0LnRhZyE9PSI/IiYmbV9lKHQsdC5kdW1wLGUsYSx1KTtlbHNle2lmKGw9PT0iW29iamVjdCBVbmRlZmluZWRdIilyZXR1cm4hMTtpZih0LnNraXBJbnZhbGlkKXJldHVybiExO3Rocm93IG5ldyBNcygidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgIitsKX10LnRhZyE9PW51bGwmJnQudGFnIT09Ij8iJiYoaD1lbmNvZGVVUkkodC50YWdbMF09PT0iISI/dC50YWcuc2xpY2UoMSk6dC50YWcpLnJlcGxhY2UoLyEvZywiJTIxIiksdC50YWdbMF09PT0iISI/aD0iISIraDpoLnNsaWNlKDAsMTgpPT09InRhZzp5YW1sLm9yZywyMDAyOiI/aD0iISEiK2guc2xpY2UoMTgpOmg9IiE8IitoKyI+Iix0LmR1bXA9aCsiICIrdC5kdW1wKX1yZXR1cm4hMH1mdW5jdGlvbiB3X2UodCxlKXt2YXIgcj1bXSxuPVtdLGksYTtmb3IoSzkodCxyLG4pLGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKWUuZHVwbGljYXRlcy5wdXNoKHJbbltpXV0pO2UudXNlZER1cGxpY2F0ZXM9bmV3IEFycmF5KGEpfWZ1bmN0aW9uIEs5KHQsZSxyKXt2YXIgbixpLGE7aWYodCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IilpZihpPWUuaW5kZXhPZih0KSxpIT09LTEpci5pbmRleE9mKGkpPT09LTEmJnIucHVzaChpKTtlbHNlIGlmKGUucHVzaCh0KSxBcnJheS5pc0FycmF5KHQpKWZvcihpPTAsYT10Lmxlbmd0aDtpPGE7aSs9MSlLOSh0W2ldLGUscik7ZWxzZSBmb3Iobj1PYmplY3Qua2V5cyh0KSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSlLOSh0W25baV1dLGUscil9ZnVuY3Rpb24gVF9lKHQsZSl7ZT1lfHx7fTt2YXIgcj1uZXcgdV9lKGUpO3Iubm9SZWZzfHx3X2UodCxyKTt2YXIgbj10O3JldHVybiByLnJlcGxhY2VyJiYobj1yLnJlcGxhY2VyLmNhbGwoeyIiOm59LCIiLG4pKSxQdShyLDAsbiwhMCwhMCk/ci5kdW1wK2AKYDoiIn1mdW5jdGlvbiB0TCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24geWFtbC4iK3QrIiBpcyByZW1vdmVkIGluIGpzLXlhbWwgNC4gVXNlIHlhbWwuIitlKyIgaW5zdGVhZCwgd2hpY2ggaXMgbm93IHNhZmUgYnkgZGVmYXVsdC4iKX19dmFyIGNBZSx1QWUsaEFlLGZBZSxkQWUscEFlLEdpLE1zLGdBZSx5QWUsdkFlLEJhLFRBZSxrQWUsRUFlLFNBZSxDQWUsREFlLElBZSwkQWUsVkFlLFdBZSxYQWUsZFosakFlLHBaLG1aLEpBZSx0OGUsUTksczhlLG84ZSxsOGUsaDhlLGY4ZSxtOGUsZzhlLHg4ZSxnWixLaCxYNSx5Wix2WixqNSxXOSxiOGUsUVEsdzhlLFQ4ZSxrOGUseFosYlosd1osVFosQmQsZVosJDhlLFY4ZSxTWixDWixBWixlTCxVOGUsUHYsSDhlLFc4ZSxZOGUscThlLHE5LFg4ZSxqOGUsSzhlLFE4ZSxfWixaOGUsUTUsSjhlLGVfZSx0X2Uscl9lLExaLERaLG5fZSxOWixpX2UsUlosRmEsYV9lLHNfZSxjX2UsQnYsSVosajksT1osUFosYm0sa19lLEVfZSxFbSxTbSxQRHQsQkR0LEZEdCx6RHQsR0R0LGV3PU0oKCk9PnsidXNlIHN0cmljdCI7byhoWiwiaXNOb3RoaW5nIik7byhpQWUsImlzT2JqZWN0Iik7byhhQWUsInRvQXJyYXkiKTtvKHNBZSwiZXh0ZW5kIik7byhvQWUsInJlcGVhdCIpO28obEFlLCJpc05lZ2F0aXZlWmVybyIpO2NBZT1oWix1QWU9aUFlLGhBZT1hQWUsZkFlPW9BZSxkQWU9bEFlLHBBZT1zQWUsR2k9e2lzTm90aGluZzpjQWUsaXNPYmplY3Q6dUFlLHRvQXJyYXk6aEFlLHJlcGVhdDpmQWUsaXNOZWdhdGl2ZVplcm86ZEFlLGV4dGVuZDpwQWV9O28oZlosImZvcm1hdEVycm9yIik7byhPdiwiWUFNTEV4Y2VwdGlvbiQxIik7T3YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtPdi5wcm90b3R5cGUuY29uc3RydWN0b3I9T3Y7T3YucHJvdG90eXBlLnRvU3RyaW5nPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK2ZaKHRoaXMsZSl9LCJ0b1N0cmluZyIpO01zPU92O28oVTksImdldExpbmUiKTtvKEg5LCJwYWRTdGFydCIpO28obUFlLCJtYWtlU25pcHBldCIpO2dBZT1tQWUseUFlPVsia2luZCIsIm11bHRpIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJyZXByZXNlbnROYW1lIiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sdkFlPVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07byh4QWUsImNvbXBpbGVTdHlsZUFsaWFzZXMiKTtvKGJBZSwiVHlwZSQxIik7QmE9YkFlO28oS1EsImNvbXBpbGVMaXN0Iik7byh3QWUsImNvbXBpbGVNYXAiKTtvKFk5LCJTY2hlbWEkMSIpO1k5LnByb3RvdHlwZS5leHRlbmQ9byhmdW5jdGlvbihlKXt2YXIgcj1bXSxuPVtdO2lmKGUgaW5zdGFuY2VvZiBCYSluLnB1c2goZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKW49bi5jb25jYXQoZSk7ZWxzZSBpZihlJiYoQXJyYXkuaXNBcnJheShlLmltcGxpY2l0KXx8QXJyYXkuaXNBcnJheShlLmV4cGxpY2l0KSkpZS5pbXBsaWNpdCYmKHI9ci5jb25jYXQoZS5pbXBsaWNpdCkpLGUuZXhwbGljaXQmJihuPW4uY29uY2F0KGUuZXhwbGljaXQpKTtlbHNlIHRocm93IG5ldyBNcygiU2NoZW1hLmV4dGVuZCBhcmd1bWVudCBzaG91bGQgYmUgYSBUeXBlLCBbIFR5cGUgXSwgb3IgYSBzY2hlbWEgZGVmaW5pdGlvbiAoeyBpbXBsaWNpdDogWy4uLl0sIGV4cGxpY2l0OiBbLi4uXSB9KSIpO3IuZm9yRWFjaChmdW5jdGlvbihhKXtpZighKGEgaW5zdGFuY2VvZiBCYSkpdGhyb3cgbmV3IE1zKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7aWYoYS5sb2FkS2luZCYmYS5sb2FkS2luZCE9PSJzY2FsYXIiKXRocm93IG5ldyBNcygiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7aWYoYS5tdWx0aSl0aHJvdyBuZXcgTXMoIlRoZXJlIGlzIGEgbXVsdGkgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gTXVsdGkgdGFncyBjYW4gb25seSBiZSBsaXN0ZWQgYXMgZXhwbGljaXQuIil9KSxuLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgQmEpKXRocm93IG5ldyBNcygiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpfSk7dmFyIGk9T2JqZWN0LmNyZWF0ZShZOS5wcm90b3R5cGUpO3JldHVybiBpLmltcGxpY2l0PSh0aGlzLmltcGxpY2l0fHxbXSkuY29uY2F0KHIpLGkuZXhwbGljaXQ9KHRoaXMuZXhwbGljaXR8fFtdKS5jb25jYXQobiksaS5jb21waWxlZEltcGxpY2l0PUtRKGksImltcGxpY2l0IiksaS5jb21waWxlZEV4cGxpY2l0PUtRKGksImV4cGxpY2l0IiksaS5jb21waWxlZFR5cGVNYXA9d0FlKGkuY29tcGlsZWRJbXBsaWNpdCxpLmNvbXBpbGVkRXhwbGljaXQpLGl9LCJleHRlbmQiKTtUQWU9WTksa0FlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6c3RyIix7a2luZDoic2NhbGFyIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDoiIn0sImNvbnN0cnVjdCIpfSksRUFlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90OltdfSwiY29uc3RydWN0Iil9KSxTQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLHtraW5kOiJtYXBwaW5nIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX0sImNvbnN0cnVjdCIpfSksQ0FlPW5ldyBUQWUoe2V4cGxpY2l0OltrQWUsRUFlLFNBZV19KTtvKEFBZSwicmVzb2x2ZVlhbWxOdWxsIik7byhfQWUsImNvbnN0cnVjdFlhbWxOdWxsIik7byhMQWUsImlzTnVsbCIpO0RBZT1uZXcgQmEoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6QUFlLGNvbnN0cnVjdDpfQWUscHJlZGljYXRlOkxBZSxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpvKGZ1bmN0aW9uKCl7cmV0dXJuIn4ifSwiY2Fub25pY2FsIiksbG93ZXJjYXNlOm8oZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LCJsb3dlcmNhc2UiKSx1cHBlcmNhc2U6byhmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sInVwcGVyY2FzZSIpLGNhbWVsY2FzZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSwiY2FtZWxjYXNlIiksZW1wdHk6byhmdW5jdGlvbigpe3JldHVybiIifSwiZW1wdHkiKX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7byhOQWUsInJlc29sdmVZYW1sQm9vbGVhbiIpO28oUkFlLCJjb25zdHJ1Y3RZYW1sQm9vbGVhbiIpO28oTUFlLCJpc0Jvb2xlYW4iKTtJQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIix7a2luZDoic2NhbGFyIixyZXNvbHZlOk5BZSxjb25zdHJ1Y3Q6UkFlLHByZWRpY2F0ZTpNQWUscmVwcmVzZW50Ontsb3dlcmNhc2U6byhmdW5jdGlvbih0KXtyZXR1cm4gdD8idHJ1ZSI6ImZhbHNlIn0sImxvd2VyY2FzZSIpLHVwcGVyY2FzZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PyJUUlVFIjoiRkFMU0UifSwidXBwZXJjYXNlIiksY2FtZWxjYXNlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ/IlRydWUiOiJGYWxzZSJ9LCJjYW1lbGNhc2UiKX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7byhPQWUsImlzSGV4Q29kZSIpO28oUEFlLCJpc09jdENvZGUiKTtvKEJBZSwiaXNEZWNDb2RlIik7byhGQWUsInJlc29sdmVZYW1sSW50ZWdlciIpO28oekFlLCJjb25zdHJ1Y3RZYW1sSW50ZWdlciIpO28oR0FlLCJpc0ludGVnZXIiKTskQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6RkFlLGNvbnN0cnVjdDp6QWUscHJlZGljYXRlOkdBZSxyZXByZXNlbnQ6e2JpbmFyeTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIwYiIrdC50b1N0cmluZygyKToiLTBiIit0LnRvU3RyaW5nKDIpLnNsaWNlKDEpfSwiYmluYXJ5Iiksb2N0YWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMG8iK3QudG9TdHJpbmcoOCk6Ii0wbyIrdC50b1N0cmluZyg4KS5zbGljZSgxKX0sIm9jdGFsIiksZGVjaW1hbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDEwKX0sImRlY2ltYWwiKSxoZXhhZGVjaW1hbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIweCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfSwiaGV4YWRlY2ltYWwiKX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLFZBZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7byhVQWUsInJlc29sdmVZYW1sRmxvYXQiKTtvKEhBZSwiY29uc3RydWN0WWFtbEZsb2F0Iik7V0FlPS9eWy0rXT9bMC05XStlLztvKFlBZSwicmVwcmVzZW50WWFtbEZsb2F0Iik7byhxQWUsImlzRmxvYXQiKTtYQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpVQWUsY29uc3RydWN0OkhBZSxwcmVkaWNhdGU6cUFlLHJlcHJlc2VudDpZQWUsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSksZFo9Q0FlLmV4dGVuZCh7aW1wbGljaXQ6W0RBZSxJQWUsJEFlLFhBZV19KSxqQWU9ZFoscFo9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSxtWj1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO28oS0FlLCJyZXNvbHZlWWFtbFRpbWVzdGFtcCIpO28oUUFlLCJjb25zdHJ1Y3RZYW1sVGltZXN0YW1wIik7byhaQWUsInJlcHJlc2VudFlhbWxUaW1lc3RhbXAiKTtKQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6S0FlLGNvbnN0cnVjdDpRQWUsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDpaQWV9KTtvKGU4ZSwicmVzb2x2ZVlhbWxNZXJnZSIpO3Q4ZT1uZXcgQmEoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmU4ZX0pLFE5PWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7byhyOGUsInJlc29sdmVZYW1sQmluYXJ5Iik7byhuOGUsImNvbnN0cnVjdFlhbWxCaW5hcnkiKTtvKGk4ZSwicmVwcmVzZW50WWFtbEJpbmFyeSIpO28oYThlLCJpc0JpbmFyeSIpO3M4ZT1uZXcgQmEoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyOGUsY29uc3RydWN0Om44ZSxwcmVkaWNhdGU6YThlLHJlcHJlc2VudDppOGV9KSxvOGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsOGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztvKGM4ZSwicmVzb2x2ZVlhbWxPbWFwIik7byh1OGUsImNvbnN0cnVjdFlhbWxPbWFwIik7aDhlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOmM4ZSxjb25zdHJ1Y3Q6dThlfSksZjhlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7byhkOGUsInJlc29sdmVZYW1sUGFpcnMiKTtvKHA4ZSwiY29uc3RydWN0WWFtbFBhaXJzIik7bThlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpkOGUsY29uc3RydWN0OnA4ZX0pLGc4ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O28oeThlLCJyZXNvbHZlWWFtbFNldCIpO28odjhlLCJjb25zdHJ1Y3RZYW1sU2V0Iik7eDhlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTp5OGUsY29uc3RydWN0OnY4ZX0pLGdaPWpBZS5leHRlbmQoe2ltcGxpY2l0OltKQWUsdDhlXSxleHBsaWNpdDpbczhlLGg4ZSxtOGUseDhlXX0pLEtoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksWDU9MSx5Wj0yLHZaPTMsajU9NCxXOT0xLGI4ZT0yLFFRPTMsdzhlPS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sVDhlPS9bXHg4NVx1MjAyOFx1MjAyOV0vLGs4ZT0vWyxcW1xdXHtcfV0vLHhaPS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxiWj0vXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pO28oWlEsIl9jbGFzcyIpO28oQWMsImlzX0VPTCIpO28oRmQsImlzX1dISVRFX1NQQUNFIik7byhJcywiaXNfV1NfT1JfRU9MIik7byh3bSwiaXNfRkxPV19JTkRJQ0FUT1IiKTtvKEU4ZSwiZnJvbUhleENvZGUiKTtvKFM4ZSwiZXNjYXBlZEhleExlbiIpO28oQzhlLCJmcm9tRGVjaW1hbENvZGUiKTtvKEpRLCJzaW1wbGVFc2NhcGVTZXF1ZW5jZSIpO28oQThlLCJjaGFyRnJvbUNvZGVwb2ludCIpO3daPW5ldyBBcnJheSgyNTYpLFRaPW5ldyBBcnJheSgyNTYpO2ZvcihCZD0wO0JkPDI1NjtCZCsrKXdaW0JkXT1KUShCZCk/MTowLFRaW0JkXT1KUShCZCk7byhfOGUsIlN0YXRlJDEiKTtvKGtaLCJnZW5lcmF0ZUVycm9yIik7byhRdCwidGhyb3dFcnJvciIpO28oSzUsInRocm93V2FybmluZyIpO2VaPXtZQU1MOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEscztlLnZlcnNpb24hPT1udWxsJiZRdChlLCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKSxuLmxlbmd0aCE9PTEmJlF0KGUsIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSxpPS9eKFswLTldKylcLihbMC05XSspJC8uZXhlYyhuWzBdKSxpPT09bnVsbCYmUXQoZSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxhPXBhcnNlSW50KGlbMV0sMTApLHM9cGFyc2VJbnQoaVsyXSwxMCksYSE9PTEmJlF0KGUsInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IiksZS52ZXJzaW9uPW5bMF0sZS5jaGVja0xpbmVCcmVha3M9czwyLHMhPT0xJiZzIT09MiYmSzUoZSwidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpfSwiaGFuZGxlWWFtbERpcmVjdGl2ZSIpLFRBRzpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhO24ubGVuZ3RoIT09MiYmUXQoZSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLGk9blswXSxhPW5bMV0seFoudGVzdChpKXx8UXQoZSwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKSxLaC5jYWxsKGUudGFnTWFwLGkpJiZRdChlLCd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJytpKyciIHRhZyBoYW5kbGUnKSxiWi50ZXN0KGEpfHxRdChlLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2h7UXQoZSwidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICIrYSl9ZS50YWdNYXBbaV09YX0sImhhbmRsZVRhZ0RpcmVjdGl2ZSIpfTtvKGpoLCJjYXB0dXJlU2VnbWVudCIpO28odFosIm1lcmdlTWFwcGluZ3MiKTtvKFRtLCJzdG9yZU1hcHBpbmdQYWlyIik7byhaOSwicmVhZExpbmVCcmVhayIpO28oRGksInNraXBTZXBhcmF0aW9uU3BhY2UiKTtvKEo1LCJ0ZXN0RG9jdW1lbnRTZXBhcmF0b3IiKTtvKEo5LCJ3cml0ZUZvbGRlZExpbmVzIik7byhMOGUsInJlYWRQbGFpblNjYWxhciIpO28oRDhlLCJyZWFkU2luZ2xlUXVvdGVkU2NhbGFyIik7byhOOGUsInJlYWREb3VibGVRdW90ZWRTY2FsYXIiKTtvKFI4ZSwicmVhZEZsb3dDb2xsZWN0aW9uIik7byhNOGUsInJlYWRCbG9ja1NjYWxhciIpO28oclosInJlYWRCbG9ja1NlcXVlbmNlIik7byhJOGUsInJlYWRCbG9ja01hcHBpbmciKTtvKE84ZSwicmVhZFRhZ1Byb3BlcnR5Iik7byhQOGUsInJlYWRBbmNob3JQcm9wZXJ0eSIpO28oQjhlLCJyZWFkQWxpYXMiKTtvKGttLCJjb21wb3NlTm9kZSIpO28oRjhlLCJyZWFkRG9jdW1lbnQiKTtvKEVaLCJsb2FkRG9jdW1lbnRzIik7byh6OGUsImxvYWRBbGwkMSIpO28oRzhlLCJsb2FkJDEiKTskOGU9ejhlLFY4ZT1HOGUsU1o9e2xvYWRBbGw6JDhlLGxvYWQ6VjhlfSxDWj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEFaPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZUw9NjUyNzksVThlPTksUHY9MTAsSDhlPTEzLFc4ZT0zMixZOGU9MzMscThlPTM0LHE5PTM1LFg4ZT0zNyxqOGU9MzgsSzhlPTM5LFE4ZT00MixfWj00NCxaOGU9NDUsUTU9NTgsSjhlPTYxLGVfZT02Mix0X2U9NjMscl9lPTY0LExaPTkxLERaPTkzLG5fZT05NixOWj0xMjMsaV9lPTEyNCxSWj0xMjUsRmE9e307RmFbMF09IlxcMCI7RmFbN109IlxcYSI7RmFbOF09IlxcYiI7RmFbOV09IlxcdCI7RmFbMTBdPSJcXG4iO0ZhWzExXT0iXFx2IjtGYVsxMl09IlxcZiI7RmFbMTNdPSJcXHIiO0ZhWzI3XT0iXFxlIjtGYVszNF09J1xcIic7RmFbOTJdPSJcXFxcIjtGYVsxMzNdPSJcXE4iO0ZhWzE2MF09IlxcXyI7RmFbODIzMl09IlxcTCI7RmFbODIzM109IlxcUCI7YV9lPVsieSIsIlkiLCJ5ZXMiLCJZZXMiLCJZRVMiLCJvbiIsIk9uIiwiT04iLCJuIiwiTiIsIm5vIiwiTm8iLCJOTyIsIm9mZiIsIk9mZiIsIk9GRiJdLHNfZT0vXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcLlswLTlfXSopPyQvO28ob19lLCJjb21waWxlU3R5bGVNYXAiKTtvKGxfZSwiZW5jb2RlSGV4Iik7Y19lPTEsQnY9MjtvKHVfZSwiU3RhdGUiKTtvKG5aLCJpbmRlbnRTdHJpbmciKTtvKFg5LCJnZW5lcmF0ZU5leHRMaW5lIik7byhoX2UsInRlc3RJbXBsaWNpdFJlc29sdmluZyIpO28oWjUsImlzV2hpdGVzcGFjZSIpO28oRnYsImlzUHJpbnRhYmxlIik7byhpWiwiaXNOc0NoYXJPcldoaXRlc3BhY2UiKTtvKGFaLCJpc1BsYWluU2FmZSIpO28oZl9lLCJpc1BsYWluU2FmZUZpcnN0Iik7byhkX2UsImlzUGxhaW5TYWZlTGFzdCIpO28oSXYsImNvZGVQb2ludEF0Iik7byhNWiwibmVlZEluZGVudEluZGljYXRvciIpO0laPTEsajk9MixPWj0zLFBaPTQsYm09NTtvKHBfZSwiY2hvb3NlU2NhbGFyU3R5bGUiKTtvKG1fZSwid3JpdGVTY2FsYXIiKTtvKHNaLCJibG9ja0hlYWRlciIpO28ob1osImRyb3BFbmRpbmdOZXdsaW5lIik7byhnX2UsImZvbGRTdHJpbmciKTtvKGxaLCJmb2xkTGluZSIpO28oeV9lLCJlc2NhcGVTdHJpbmciKTtvKHZfZSwid3JpdGVGbG93U2VxdWVuY2UiKTtvKGNaLCJ3cml0ZUJsb2NrU2VxdWVuY2UiKTtvKHhfZSwid3JpdGVGbG93TWFwcGluZyIpO28oYl9lLCJ3cml0ZUJsb2NrTWFwcGluZyIpO28odVosImRldGVjdFR5cGUiKTtvKFB1LCJ3cml0ZU5vZGUiKTtvKHdfZSwiZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyIpO28oSzksImluc3BlY3ROb2RlIik7byhUX2UsImR1bXAkMSIpO2tfZT1UX2UsRV9lPXtkdW1wOmtfZX07byh0TCwicmVuYW1lZCIpO0VtPWRaLFNtPVNaLmxvYWQsUER0PVNaLmxvYWRBbGwsQkR0PUVfZS5kdW1wLEZEdD10TCgic2FmZUxvYWQiLCJsb2FkIiksekR0PXRMKCJzYWZlTG9hZEFsbCIsImxvYWRBbGwiKSxHRHQ9dEwoInNhZmVEdW1wIiwiZHVtcCIpfSk7ZnVuY3Rpb24gaUwodCl7bGV0IGU9W107Zm9yKGxldCByIG9mIHQpe2xldCBuPUd2LmdldChyKTtuPy5zdHlsZXMmJihlPVsuLi5lLC4uLm4uc3R5bGVzPz9bXV0ubWFwKGk9PmkudHJpbSgpKSksbj8udGV4dFN0eWxlcyYmKGU9Wy4uLmUsLi4ubi50ZXh0U3R5bGVzPz9bXV0ubWFwKGk9PmkudHJpbSgpKSl9cmV0dXJuIGV9dmFyIFNfZSxCWixDbSxRaCxPcyxHdixCdSxhTCxzTCx0dyxuTCxZbyxydyxudyxpdyxhdyxDX2UsQV9lLF9fZSxMX2UsRF9lLE5fZSxSX2Usb0wsTV9lLElfZSxPX2UsRlosUF9lLEJfZSxsTCx6WixHWixGX2UsJFosel9lLEdfZSwkX2UsVl9lLFVfZSx6dixWWixVWixIX2UsV19lLEhaLFlfZSxxX2UsWF9lLGpfZSxLX2UsV1osWVosUV9lLFpfZSxKX2UsZTllLHQ5ZSxyOWUsc3csY0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO2hyKCk7VnQoKTtmcigpO1Y5KCk7dXQoKTtldygpO0FpKCk7U19lPSJmbG93Y2hhcnQtIixCWj0wLENtPXBlKCksUWg9bmV3IE1hcCxPcz1bXSxHdj1uZXcgTWFwLEJ1PVtdLGFMPW5ldyBNYXAsc0w9bmV3IE1hcCx0dz0wLG5MPSEwLG53PVtdLGl3PW8odD0+cWUuc2FuaXRpemVUZXh0KHQsQ20pLCJzYW5pdGl6ZVRleHQiKSxhdz1vKGZ1bmN0aW9uKHQpe2ZvcihsZXQgZSBvZiBRaC52YWx1ZXMoKSlpZihlLmlkPT09dClyZXR1cm4gZS5kb21JZDtyZXR1cm4gdH0sImxvb2tVcERvbUlkIiksQ19lPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscz17fSxsKXtpZighdHx8dC50cmltKCkubGVuZ3RoPT09MClyZXR1cm47bGV0IHUsaD1RaC5nZXQodCk7aWYoaD09PXZvaWQgMCYmKGg9e2lkOnQsbGFiZWxUeXBlOiJ0ZXh0Iixkb21JZDpTX2UrdCsiLSIrQlosc3R5bGVzOltdLGNsYXNzZXM6W119LFFoLnNldCh0LGgpKSxCWisrLGUhPT12b2lkIDA/KENtPXBlKCksdT1pdyhlLnRleHQudHJpbSgpKSxoLmxhYmVsVHlwZT1lLnR5cGUsdS5zdGFydHNXaXRoKCciJykmJnUuZW5kc1dpdGgoJyInKSYmKHU9dS5zdWJzdHJpbmcoMSx1Lmxlbmd0aC0xKSksaC50ZXh0PXUpOmgudGV4dD09PXZvaWQgMCYmKGgudGV4dD10KSxyIT09dm9pZCAwJiYoaC50eXBlPXIpLG4/LmZvckVhY2goZnVuY3Rpb24oZil7aC5zdHlsZXMucHVzaChmKX0pLGk/LmZvckVhY2goZnVuY3Rpb24oZil7aC5jbGFzc2VzLnB1c2goZil9KSxhIT09dm9pZCAwJiYoaC5kaXI9YSksaC5wcm9wcz09PXZvaWQgMD9oLnByb3BzPXM6cyE9PXZvaWQgMCYmT2JqZWN0LmFzc2lnbihoLnByb3BzLHMpLGwhPT12b2lkIDApe2xldCBmO2wuaW5jbHVkZXMoYApgKT9mPWwrYApgOmY9YHsKYCtsK2AKfWA7bGV0IGQ9U20oZix7c2NoZW1hOkVtfSk7aWYoZC5zaGFwZSl7aWYoZC5zaGFwZSE9PWQuc2hhcGUudG9Mb3dlckNhc2UoKXx8ZC5zaGFwZS5pbmNsdWRlcygiXyIpKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtkLnNoYXBlfS4gU2hhcGUgbmFtZXMgc2hvdWxkIGJlIGxvd2VyY2FzZS5gKTtpZighalEoZC5zaGFwZSkpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Quc2hhcGV9LmApO2gudHlwZT1kPy5zaGFwZX1kPy5sYWJlbCYmKGgudGV4dD1kPy5sYWJlbCksZD8uaWNvbiYmKGguaWNvbj1kPy5pY29uLCFkLmxhYmVsPy50cmltKCkmJmgudGV4dD09PXQmJihoLnRleHQ9IiIpKSxkPy5mb3JtJiYoaC5mb3JtPWQ/LmZvcm0pLGQ/LnBvcyYmKGgucG9zPWQ/LnBvcyksZD8uaW1nJiYoaC5pbWc9ZD8uaW1nLCFkLmxhYmVsPy50cmltKCkmJmgudGV4dD09PXQmJihoLnRleHQ9IiIpKSxkPy5jb25zdHJhaW50JiYoaC5jb25zdHJhaW50PWQuY29uc3RyYWludCksZC53JiYoaC5hc3NldFdpZHRoPU51bWJlcihkLncpKSxkLmgmJihoLmFzc2V0SGVpZ2h0PU51bWJlcihkLmgpKX19LCJhZGRWZXJ0ZXgiKSxBX2U9byhmdW5jdGlvbih0LGUscil7bGV0IGE9e3N0YXJ0OnQsZW5kOmUsdHlwZTp2b2lkIDAsdGV4dDoiIixsYWJlbFR5cGU6InRleHQifTtZLmluZm8oImFiYzc4IEdvdCBlZGdlLi4uIixhKTtsZXQgcz1yLnRleHQ7aWYocyE9PXZvaWQgMCYmKGEudGV4dD1pdyhzLnRleHQudHJpbSgpKSxhLnRleHQuc3RhcnRzV2l0aCgnIicpJiZhLnRleHQuZW5kc1dpdGgoJyInKSYmKGEudGV4dD1hLnRleHQuc3Vic3RyaW5nKDEsYS50ZXh0Lmxlbmd0aC0xKSksYS5sYWJlbFR5cGU9cy50eXBlKSxyIT09dm9pZCAwJiYoYS50eXBlPXIudHlwZSxhLnN0cm9rZT1yLnN0cm9rZSxhLmxlbmd0aD1yLmxlbmd0aD4xMD8xMDpyLmxlbmd0aCksT3MubGVuZ3RoPChDbS5tYXhFZGdlcz8/NTAwKSlZLmluZm8oIlB1c2hpbmcgZWRnZS4uLiIpLE9zLnB1c2goYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7T3MubGVuZ3RofSBlZGdlcyBmb3VuZCwgYnV0IHRoZSBsaW1pdCBpcyAke0NtLm1heEVkZ2VzfS4KCkluaXRpYWxpemUgbWVybWFpZCB3aXRoIG1heEVkZ2VzIHNldCB0byBhIGhpZ2hlciBudW1iZXIgdG8gYWxsb3cgbW9yZSBlZGdlcy4KWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy4KWW91IGhhdmUgdG8gY2FsbCBtZXJtYWlkLmluaXRpYWxpemUuYCl9LCJhZGRTaW5nbGVMaW5rIiksX19lPW8oZnVuY3Rpb24odCxlLHIpe1kuaW5mbygiYWRkTGluayIsdCxlLHIpO2ZvcihsZXQgbiBvZiB0KWZvcihsZXQgaSBvZiBlKUFfZShuLGkscil9LCJhZGRMaW5rIiksTF9lPW8oZnVuY3Rpb24odCxlKXt0LmZvckVhY2goZnVuY3Rpb24ocil7cj09PSJkZWZhdWx0Ij9Pcy5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpPc1tyXS5pbnRlcnBvbGF0ZT1lfSl9LCJ1cGRhdGVMaW5rSW50ZXJwb2xhdGUiKSxEX2U9byhmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbihyKXtpZih0eXBlb2Ygcj09Im51bWJlciImJnI+PU9zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBpbmRleCAke3J9IGZvciBsaW5rU3R5bGUgaXMgb3V0IG9mIGJvdW5kcy4gVmFsaWQgaW5kaWNlcyBmb3IgbGlua1N0eWxlIGFyZSBiZXR3ZWVuIDAgYW5kICR7T3MubGVuZ3RoLTF9LiAoSGVscDogRW5zdXJlIHRoYXQgdGhlIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgZWRnZXMuKWApO3I9PT0iZGVmYXVsdCI/T3MuZGVmYXVsdFN0eWxlPWU6KE9zW3JdLnN0eWxlPWUsKE9zW3JdPy5zdHlsZT8ubGVuZ3RoPz8wKT4wJiYhT3Nbcl0/LnN0eWxlPy5zb21lKG49Pm4/LnN0YXJ0c1dpdGgoImZpbGwiKSkmJk9zW3JdPy5zdHlsZT8ucHVzaCgiZmlsbDpub25lIikpfSl9LCJ1cGRhdGVMaW5rIiksTl9lPW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1Hdi5nZXQocik7bj09PXZvaWQgMCYmKG49e2lkOnIsc3R5bGVzOltdLHRleHRTdHlsZXM6W119LEd2LnNldChyLG4pKSxlPy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKC9jb2xvci8uZXhlYyhpKSl7bGV0IGE9aS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIik7bi50ZXh0U3R5bGVzLnB1c2goYSl9bi5zdHlsZXMucHVzaChpKX0pfSl9LCJhZGRDbGFzcyIpLFJfZT1vKGZ1bmN0aW9uKHQpe1lvPXQsLy4qPC8uZXhlYyhZbykmJihZbz0iUkwiKSwvLipcXi8uZXhlYyhZbykmJihZbz0iQlQiKSwvLio+Ly5leGVjKFlvKSYmKFlvPSJMUiIpLC8uKnYvLmV4ZWMoWW8pJiYoWW89IlRCIiksWW89PT0iVEQiJiYoWW89IlRCIil9LCJzZXREaXJlY3Rpb24iKSxvTD1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldCByIG9mIHQuc3BsaXQoIiwiKSl7bGV0IG49UWguZ2V0KHIpO24mJm4uY2xhc3Nlcy5wdXNoKGUpO2xldCBpPWFMLmdldChyKTtpJiZpLmNsYXNzZXMucHVzaChlKX19LCJzZXRDbGFzcyIpLE1fZT1vKGZ1bmN0aW9uKHQsZSl7aWYoZSE9PXZvaWQgMCl7ZT1pdyhlKTtmb3IobGV0IHIgb2YgdC5zcGxpdCgiLCIpKXNMLnNldChydz09PSJnZW4tMSI/YXcocik6cixlKX19LCJzZXRUb29sdGlwIiksSV9lPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWF3KHQpO2lmKHBlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGU9PT12b2lkIDApcmV0dXJuO2xldCBpPVtdO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7aT1yLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdLnRyaW0oKTtsLnN0YXJ0c1dpdGgoJyInKSYmbC5lbmRzV2l0aCgnIicpJiYobD1sLnN1YnN0cigxLGwubGVuZ3RoLTIpKSxpW3NdPWx9fWkubGVuZ3RoPT09MCYmaS5wdXNoKHQpO2xldCBhPVFoLmdldCh0KTthJiYoYS5oYXZlQ2FsbGJhY2s9ITAsbncucHVzaChmdW5jdGlvbigpe2xldCBzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtufSJdYCk7cyE9PW51bGwmJnMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7VXQucnVuRnVuYyhlLC4uLmkpfSwhMSl9KSl9LCJzZXRDbGlja0Z1biIpLE9fZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtsZXQgaT1RaC5nZXQobik7aSE9PXZvaWQgMCYmKGkubGluaz1VdC5mb3JtYXRVcmwoZSxDbSksaS5saW5rVGFyZ2V0PXIpfSksb0wodCwiY2xpY2thYmxlIil9LCJzZXRMaW5rIiksRlo9byhmdW5jdGlvbih0KXtyZXR1cm4gc0wuZ2V0KHQpfSwiZ2V0VG9vbHRpcCIpLFBfZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtJX2UobixlLHIpfSksb0wodCwiY2xpY2thYmxlIil9LCJzZXRDbGlja0V2ZW50IiksQl9lPW8oZnVuY3Rpb24odCl7bncuZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LCJiaW5kRnVuY3Rpb25zIiksbEw9byhmdW5jdGlvbigpe3JldHVybiBZby50cmltKCl9LCJnZXREaXJlY3Rpb24iKSx6Wj1vKGZ1bmN0aW9uKCl7cmV0dXJuIFFofSwiZ2V0VmVydGljZXMiKSxHWj1vKGZ1bmN0aW9uKCl7cmV0dXJuIE9zfSwiZ2V0RWRnZXMiKSxGX2U9byhmdW5jdGlvbigpe3JldHVybiBHdn0sImdldENsYXNzZXMiKSwkWj1vKGZ1bmN0aW9uKHQpe2xldCBlPVZlKCIubWVybWFpZFRvb2x0aXAiKTsoZS5fZ3JvdXBzfHxlKVswXVswXT09PW51bGwmJihlPVZlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxWZSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtsZXQgaT1WZSh0aGlzKTtpZihpLmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtsZXQgcz10aGlzPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLnRleHQoaS5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrcy5sZWZ0KyhzLnJpZ2h0LXMubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStzLmJvdHRvbSsicHgiKSxlLmh0bWwoZS5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLGkuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxWZSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9LCJzZXR1cFRvb2xUaXBzIik7bncucHVzaCgkWik7el9lPW8oZnVuY3Rpb24odD0iZ2VuLTEiKXtRaD1uZXcgTWFwLEd2PW5ldyBNYXAsT3M9W10sbnc9WyRaXSxCdT1bXSxhTD1uZXcgTWFwLHR3PTAsc0w9bmV3IE1hcCxuTD0hMCxydz10LENtPXBlKCksTHIoKX0sImNsZWFyIiksR19lPW8odD0+e3J3PXR8fCJnZW4tMiJ9LCJzZXRHZW4iKSwkX2U9byhmdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LCJkZWZhdWx0U3R5bGUiKSxWX2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC50ZXh0LnRyaW0oKSxpPXIudGV4dDt0PT09ciYmL1xzLy5leGVjKHIudGV4dCkmJihuPXZvaWQgMCk7ZnVuY3Rpb24gYShoKXtsZXQgZj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxkPVtdLHA7cmV0dXJue25vZGVMaXN0OmguZmlsdGVyKGZ1bmN0aW9uKGcpe2xldCB5PXR5cGVvZiBnO3JldHVybiBnLnN0bXQmJmcuc3RtdD09PSJkaXIiPyhwPWcudmFsdWUsITEpOmcudHJpbSgpPT09IiI/ITE6eSBpbiBmP2ZbeV0uaGFzT3duUHJvcGVydHkoZyk/ITE6Zlt5XVtnXT0hMDpkLmluY2x1ZGVzKGcpPyExOmQucHVzaChnKX0pLGRpcjpwfX1vKGEsInVuaXEiKTtsZXR7bm9kZUxpc3Q6cyxkaXI6bH09YShlLmZsYXQoKSk7aWYocnc9PT0iZ2VuLTEiKWZvcihsZXQgaD0wO2g8cy5sZW5ndGg7aCsrKXNbaF09YXcoc1toXSk7bj1uPz8ic3ViR3JhcGgiK3R3LGk9aXx8IiIsaT1pdyhpKSx0dz10dysxO2xldCB1PXtpZDpuLG5vZGVzOnMsdGl0bGU6aS50cmltKCksY2xhc3NlczpbXSxkaXI6bCxsYWJlbFR5cGU6ci50eXBlfTtyZXR1cm4gWS5pbmZvKCJBZGRpbmciLHUuaWQsdS5ub2Rlcyx1LmRpciksdS5ub2Rlcz1ZWih1LEJ1KS5ub2RlcyxCdS5wdXNoKHUpLGFMLnNldChuLHUpLG59LCJhZGRTdWJHcmFwaCIpLFVfZT1vKGZ1bmN0aW9uKHQpe2ZvcihsZXRbZSxyXW9mIEJ1LmVudHJpZXMoKSlpZihyLmlkPT09dClyZXR1cm4gZTtyZXR1cm4tMX0sImdldFBvc0ZvcklkIiksenY9LTEsVlo9W10sVVo9byhmdW5jdGlvbih0LGUpe2xldCByPUJ1W2VdLm5vZGVzO2lmKHp2PXp2KzEsenY+MmUzKXJldHVybntyZXN1bHQ6ITEsY291bnQ6MH07aWYoVlpbenZdPWUsQnVbZV0uaWQ9PT10KXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IG49MCxpPTE7Zm9yKDtuPHIubGVuZ3RoOyl7bGV0IGE9VV9lKHJbbl0pO2lmKGE+PTApe2xldCBzPVVaKHQsYSk7aWYocy5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDppK3MuY291bnR9O2k9aStzLmNvdW50fW49bisxfXJldHVybntyZXN1bHQ6ITEsY291bnQ6aX19LCJpbmRleE5vZGVzMiIpLEhfZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBWWlt0XX0sImdldERlcHRoRmlyc3RQb3MiKSxXX2U9byhmdW5jdGlvbigpe3p2PS0xLEJ1Lmxlbmd0aD4wJiZVWigibm9uZSIsQnUubGVuZ3RoLTEpfSwiaW5kZXhOb2RlcyIpLEhaPW8oZnVuY3Rpb24oKXtyZXR1cm4gQnV9LCJnZXRTdWJHcmFwaHMiKSxZX2U9bygoKT0+bkw/KG5MPSExLCEwKTohMSwiZmlyc3RHcmFwaCIpLHFfZT1vKHQ9PntsZXQgZT10LnRyaW0oKSxyPSJhcnJvd19vcGVuIjtzd2l0Y2goZVswXSl7Y2FzZSI8IjpyPSJhcnJvd19wb2ludCIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UieCI6cj0iYXJyb3dfY3Jvc3MiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIm8iOnI9ImFycm93X2NpcmNsZSIsZT1lLnNsaWNlKDEpO2JyZWFrfWxldCBuPSJub3JtYWwiO3JldHVybiBlLmluY2x1ZGVzKCI9IikmJihuPSJ0aGljayIpLGUuaW5jbHVkZXMoIi4iKSYmKG49ImRvdHRlZCIpLHt0eXBlOnIsc3Ryb2tlOm59fSwiZGVzdHJ1Y3RTdGFydExpbmsiKSxYX2U9bygodCxlKT0+e2xldCByPWUubGVuZ3RoLG49MDtmb3IobGV0IGk9MDtpPHI7KytpKWVbaV09PT10JiYrK247cmV0dXJuIG59LCJjb3VudENoYXIiKSxqX2U9byh0PT57bGV0IGU9dC50cmltKCkscj1lLnNsaWNlKDAsLTEpLG49ImFycm93X29wZW4iO3N3aXRjaChlLnNsaWNlKC0xKSl7Y2FzZSJ4IjpuPSJhcnJvd19jcm9zcyIsZS5zdGFydHNXaXRoKCJ4IikmJihuPSJkb3VibGVfIituLHI9ci5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjpuPSJhcnJvd19wb2ludCIsZS5zdGFydHNXaXRoKCI8IikmJihuPSJkb3VibGVfIituLHI9ci5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGUuc3RhcnRzV2l0aCgibyIpJiYobj0iZG91YmxlXyIrbixyPXIuc2xpY2UoMSkpO2JyZWFrfWxldCBpPSJub3JtYWwiLGE9ci5sZW5ndGgtMTtyLnN0YXJ0c1dpdGgoIj0iKSYmKGk9InRoaWNrIiksci5zdGFydHNXaXRoKCJ+IikmJihpPSJpbnZpc2libGUiKTtsZXQgcz1YX2UoIi4iLHIpO3JldHVybiBzJiYoaT0iZG90dGVkIixhPXMpLHt0eXBlOm4sc3Ryb2tlOmksbGVuZ3RoOmF9fSwiZGVzdHJ1Y3RFbmRMaW5rIiksS19lPW8oKHQsZSk9PntsZXQgcj1qX2UodCksbjtpZihlKXtpZihuPXFfZShlKSxuLnN0cm9rZSE9PXIuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihuLnR5cGU9PT0iYXJyb3dfb3BlbiIpbi50eXBlPXIudHlwZTtlbHNle2lmKG4udHlwZSE9PXIudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07bi50eXBlPSJkb3VibGVfIituLnR5cGV9cmV0dXJuIG4udHlwZT09PSJkb3VibGVfYXJyb3ciJiYobi50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxuLmxlbmd0aD1yLmxlbmd0aCxufXJldHVybiByfSwiZGVzdHJ1Y3RMaW5rIiksV1o9bygodCxlKT0+e2ZvcihsZXQgciBvZiB0KWlmKHIubm9kZXMuaW5jbHVkZXMoZSkpcmV0dXJuITA7cmV0dXJuITF9LCJleGlzdHMiKSxZWj1vKCh0LGUpPT57bGV0IHI9W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgobixpKT0+e1daKGUsbil8fHIucHVzaCh0Lm5vZGVzW2ldKX0pLHtub2RlczpyfX0sIm1ha2VVbmlxIiksUV9lPXtmaXJzdEdyYXBoOllfZX0sWl9lPW8odD0+e2lmKHQuaW1nKXJldHVybiJpbWFnZVNxdWFyZSI7aWYodC5pY29uKXJldHVybiB0LmZvcm09PT0iY2lyY2xlIj8iaWNvbkNpcmNsZSI6dC5mb3JtPT09InNxdWFyZSI/Imljb25TcXVhcmUiOnQuZm9ybT09PSJyb3VuZGVkIj8iaWNvblJvdW5kZWQiOiJpY29uIjtzd2l0Y2godC50eXBlKXtjYXNlInNxdWFyZSI6Y2FzZSB2b2lkIDA6cmV0dXJuInNxdWFyZVJlY3QiO2Nhc2Uicm91bmQiOnJldHVybiJyb3VuZGVkUmVjdCI7Y2FzZSJlbGxpcHNlIjpyZXR1cm4iZWxsaXBzZSI7ZGVmYXVsdDpyZXR1cm4gdC50eXBlfX0sImdldFR5cGVGcm9tVmVydGV4IiksSl9lPW8oKHQsZSk9PnQuZmluZChyPT5yLmlkPT09ZSksImZpbmROb2RlIiksZTllPW8odD0+e2xldCBlPSJub25lIixyPSJhcnJvd19wb2ludCI7c3dpdGNoKHQpe2Nhc2UiYXJyb3dfcG9pbnQiOmNhc2UiYXJyb3dfY2lyY2xlIjpjYXNlImFycm93X2Nyb3NzIjpyPXQ7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmNhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmU9dC5yZXBsYWNlKCJkb3VibGVfIiwiIikscj1lO2JyZWFrfXJldHVybnthcnJvd1R5cGVTdGFydDplLGFycm93VHlwZUVuZDpyfX0sImRlc3RydWN0RWRnZVR5cGUiKSx0OWU9bygodCxlLHIsbixpLGEpPT57bGV0IHM9ci5nZXQodC5pZCksbD1uLmdldCh0LmlkKT8/ITEsdT1KX2UoZSx0LmlkKTtpZih1KXUuY3NzU3R5bGVzPXQuc3R5bGVzLHUuY3NzQ29tcGlsZWRTdHlsZXM9aUwodC5jbGFzc2VzKSx1LmNzc0NsYXNzZXM9dC5jbGFzc2VzLmpvaW4oIiAiKTtlbHNle2xldCBoPXtpZDp0LmlkLGxhYmVsOnQudGV4dCxsYWJlbFN0eWxlOiIiLHBhcmVudElkOnMscGFkZGluZzppLmZsb3djaGFydD8ucGFkZGluZ3x8OCxjc3NTdHlsZXM6dC5zdHlsZXMsY3NzQ29tcGlsZWRTdHlsZXM6aUwoWyJkZWZhdWx0Iiwibm9kZSIsLi4udC5jbGFzc2VzXSksY3NzQ2xhc3NlczoiZGVmYXVsdCAiK3QuY2xhc3Nlcy5qb2luKCIgIiksZGlyOnQuZGlyLGRvbUlkOnQuZG9tSWQsbG9vazphLGxpbms6dC5saW5rLGxpbmtUYXJnZXQ6dC5saW5rVGFyZ2V0LHRvb2x0aXA6RloodC5pZCksaWNvbjp0Lmljb24scG9zOnQucG9zLGltZzp0LmltZyxhc3NldFdpZHRoOnQuYXNzZXRXaWR0aCxhc3NldEhlaWdodDp0LmFzc2V0SGVpZ2h0LGNvbnN0cmFpbnQ6dC5jb25zdHJhaW50fTtsP2UucHVzaCh7Li4uaCxpc0dyb3VwOiEwLHNoYXBlOiJyZWN0In0pOmUucHVzaCh7Li4uaCxpc0dyb3VwOiExLHNoYXBlOlpfZSh0KX0pfX0sImFkZE5vZGVGcm9tVmVydGV4Iik7byhpTCwiZ2V0Q29tcGlsZWRTdHlsZXMiKTtyOWU9bygoKT0+e2xldCB0PXBlKCksZT1bXSxyPVtdLG49SFooKSxpPW5ldyBNYXAsYT1uZXcgTWFwO2ZvcihsZXQgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKXtsZXQgaD1uW3VdO2gubm9kZXMubGVuZ3RoPjAmJmEuc2V0KGguaWQsITApO2ZvcihsZXQgZiBvZiBoLm5vZGVzKWkuc2V0KGYsaC5pZCl9Zm9yKGxldCB1PW4ubGVuZ3RoLTE7dT49MDt1LS0pe2xldCBoPW5bdV07ZS5wdXNoKHtpZDpoLmlkLGxhYmVsOmgudGl0bGUsbGFiZWxTdHlsZToiIixwYXJlbnRJZDppLmdldChoLmlkKSxwYWRkaW5nOjgsY3NzQ29tcGlsZWRTdHlsZXM6aUwoaC5jbGFzc2VzKSxjc3NDbGFzc2VzOmguY2xhc3Nlcy5qb2luKCIgIiksc2hhcGU6InJlY3QiLGRpcjpoLmRpcixpc0dyb3VwOiEwLGxvb2s6dC5sb29rfSl9elooKS5mb3JFYWNoKHU9Pnt0OWUodSxlLGksYSx0LHQubG9va3x8ImNsYXNzaWMiKX0pO2xldCBsPUdaKCk7cmV0dXJuIGwuZm9yRWFjaCgodSxoKT0+e2xldHthcnJvd1R5cGVTdGFydDpmLGFycm93VHlwZUVuZDpkfT1lOWUodS50eXBlKSxwPVsuLi5sLmRlZmF1bHRTdHlsZT8/W11dO3Uuc3R5bGUmJnAucHVzaCguLi51LnN0eWxlKTtsZXQgbT17aWQ6QzUodS5zdGFydCx1LmVuZCx7Y291bnRlcjpoLHByZWZpeDoiTCJ9KSxzdGFydDp1LnN0YXJ0LGVuZDp1LmVuZCx0eXBlOnUudHlwZT8/Im5vcm1hbCIsbGFiZWw6dS50ZXh0LGxhYmVscG9zOiJjIix0aGlja25lc3M6dS5zdHJva2UsbWlubGVuOnUubGVuZ3RoLGNsYXNzZXM6dT8uc3Ryb2tlPT09ImludmlzaWJsZSI/IiI6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsiLGFycm93VHlwZVN0YXJ0OnU/LnN0cm9rZT09PSJpbnZpc2libGUiPyJub25lIjpmLGFycm93VHlwZUVuZDp1Py5zdHJva2U9PT0iaW52aXNpYmxlIj8ibm9uZSI6ZCxhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxTdHlsZTpwLHN0eWxlOnAscGF0dGVybjp1LnN0cm9rZSxsb29rOnQubG9va307ci5wdXNoKG0pfSkse25vZGVzOmUsZWRnZXM6cixvdGhlcjp7fSxjb25maWc6dH19LCJnZXREYXRhIiksc3c9e2RlZmF1bHRDb25maWc6bygoKT0+QjQuZmxvd2NoYXJ0LCJkZWZhdWx0Q29uZmlnIiksc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsZ2V0QWNjRGVzY3JpcHRpb246enIsZ2V0RGF0YTpyOWUsc2V0QWNjRGVzY3JpcHRpb246RnIsYWRkVmVydGV4OkNfZSxsb29rVXBEb21JZDphdyxhZGRMaW5rOl9fZSx1cGRhdGVMaW5rSW50ZXJwb2xhdGU6TF9lLHVwZGF0ZUxpbms6RF9lLGFkZENsYXNzOk5fZSxzZXREaXJlY3Rpb246Ul9lLHNldENsYXNzOm9MLHNldFRvb2x0aXA6TV9lLGdldFRvb2x0aXA6Rlosc2V0Q2xpY2tFdmVudDpQX2Usc2V0TGluazpPX2UsYmluZEZ1bmN0aW9uczpCX2UsZ2V0RGlyZWN0aW9uOmxMLGdldFZlcnRpY2VzOnpaLGdldEVkZ2VzOkdaLGdldENsYXNzZXM6Rl9lLGNsZWFyOnpfZSxzZXRHZW46R19lLGRlZmF1bHRTdHlsZTokX2UsYWRkU3ViR3JhcGg6Vl9lLGdldERlcHRoRmlyc3RQb3M6SF9lLGluZGV4Tm9kZXM6V19lLGdldFN1YkdyYXBoczpIWixkZXN0cnVjdExpbms6S19lLGxleDpRX2UsZXhpc3RzOldaLG1ha2VVbmlxOllaLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnJ9fSk7dmFyIEFtLG93PU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtBbT1vKCh0LGUpPT57bGV0IHI7cmV0dXJuIGU9PT0ic2FuZGJveCImJihyPVZlKCIjaSIrdCkpLChlPT09InNhbmRib3giP1ZlKHIubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6VmUoImJvZHkiKSkuc2VsZWN0KGBbaWQ9IiR7dH0iXWApfSwiZ2V0RGlhZ3JhbUVsZW1lbnQiKX0pO3ZhciBGdSwkdj1NKCgpPT57InVzZSBzdHJpY3QiO0Z1PW8oKHtmbG93Y2hhcnQ6dH0pPT57bGV0IGU9dD8uc3ViR3JhcGhUaXRsZU1hcmdpbj8udG9wPz8wLHI9dD8uc3ViR3JhcGhUaXRsZU1hcmdpbj8uYm90dG9tPz8wLG49ZStyO3JldHVybntzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOmUsc3ViR3JhcGhUaXRsZUJvdHRvbU1hcmdpbjpyLHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpufX0sImdldFN1YkdyYXBoVGl0bGVNYXJnaW5zIil9KTt2YXIgcVosbjllLGk5ZSxhOWUsczllLG85ZSxsOWUsWFosX20salosbHc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7dXQoKTskdigpO3ByKCk7anQoKTtQbCgpO2s5KCk7WTUoKTtYaCgpO1h0KCk7cVo9byhhc3luYyh0LGUpPT57WS5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGUuaWQsZSk7bGV0IHI9cGUoKSx7dGhlbWVWYXJpYWJsZXM6bixoYW5kRHJhd25TZWVkOml9PXIse2NsdXN0ZXJCa2c6YSxjbHVzdGVyQm9yZGVyOnN9PW4se2xhYmVsU3R5bGVzOmwsbm9kZVN0eWxlczp1LGJvcmRlclN0eWxlczpoLGJhY2tncm91bmRTdHlsZXM6Zn09WmUoZSksZD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciAiK2UuY3NzQ2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxwPXhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLG09ZC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwgIiksZz1hd2FpdCBMaShtLGUubGFiZWwse3N0eWxlOmUubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnAsaXNOb2RlOiEwfSkseT1nLmdldEJCb3goKTtpZih4cihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEw9Zy5jaGlsZHJlblswXSxTPVZlKGcpO3k9TC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxTLmF0dHIoIndpZHRoIix5LndpZHRoKSxTLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWxldCB2PWUud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP3kud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh2LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCB4PWUuaGVpZ2h0LGI9ZS54LXYvMix3PWUueS14LzI7WS50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpO2xldCBfO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgTD1YZS5zdmcoZCksUz1LZShlLHtyb3VnaG5lc3M6LjcsZmlsbDphLHN0cm9rZTpzLGZpbGxXZWlnaHQ6MyxzZWVkOml9KSxBPUwucGF0aChQYShiLHcsdix4LDApLFMpO189ZC5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEEpLEEpLCI6Zmlyc3QtY2hpbGQiKSxfLnNlbGVjdCgicGF0aDpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsaC5qb2luKCI7IikpLF8uc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGYuam9pbigiOyIpLnJlcGxhY2UoImZpbGwiLCJzdHJva2UiKSl9ZWxzZSBfPWQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXy5hdHRyKCJzdHlsZSIsdSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix3KS5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0Iix4KTtsZXR7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpUfT1GdShyKTtpZihtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC15LndpZHRoLzJ9LCAke2UueS1lLmhlaWdodC8yK1R9KWApLGwpe2xldCBMPW0uc2VsZWN0KCJzcGFuIik7TCYmTC5hdHRyKCJzdHlsZSIsbCl9bGV0IEU9Xy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLm9mZnNldFg9MCxlLndpZHRoPUUud2lkdGgsZS5oZWlnaHQ9RS5oZWlnaHQsZS5vZmZzZXRZPXkuaGVpZ2h0LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBIaChlLEwpfSx7Y2x1c3RlcjpkLGxhYmVsQkJveDp5fX0sInJlY3QiKSxuOWU9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCksbj1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7bi5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2xldCBzPW4ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1zLndpZHRoLGUuaGVpZ2h0PXMuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBIaChlLGwpfSx7Y2x1c3RlcjpyLGxhYmVsQkJveDp7d2lkdGg6MCxoZWlnaHQ6MH19fSwibm90ZUdyb3VwIiksaTllPW8oYXN5bmModCxlKT0+e2xldCByPXBlKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHthbHRCYWNrZ3JvdW5kOmEsY29tcG9zaXRlQmFja2dyb3VuZDpzLGNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZDpsLG5vZGVCb3JkZXI6dX09bixoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY3NzQ2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImRhdGEtaWQiLGUuaWQpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxmPWguaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksZD1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLHA9aC5hcHBlbmQoInJlY3QiKSxtPWQubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IENjKGUubGFiZWwsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLGc9bS5nZXRCQm94KCk7aWYoeHIoci5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBBPW0uY2hpbGRyZW5bMF0sST1WZShtKTtnPUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSS5hdHRyKCJ3aWR0aCIsZy53aWR0aCksSS5hdHRyKCJoZWlnaHQiLGcuaGVpZ2h0KX1sZXQgeT0wKmUucGFkZGluZyx2PXkvMix4PShlLndpZHRoPD1nLndpZHRoK2UucGFkZGluZz9nLndpZHRoK2UucGFkZGluZzplLndpZHRoKSt5O2Uud2lkdGg8PWcud2lkdGgrZS5wYWRkaW5nP2UuZGlmZj0oeC1lLndpZHRoKS8yLWUucGFkZGluZzplLmRpZmY9LWUucGFkZGluZztsZXQgYj1lLmhlaWdodCt5LHc9ZS5oZWlnaHQreS1nLmhlaWdodC02LF89ZS54LXgvMixUPWUueS1iLzI7ZS53aWR0aD14O2xldCBFPWUueS1lLmhlaWdodC8yLXYrZy5oZWlnaHQrMixMO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgQT1lLmNzc0NsYXNzZXMuaW5jbHVkZXMoInN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCIpLEk9WGUuc3ZnKGgpLEQ9ZS5yeHx8ZS5yeT9JLnBhdGgoUGEoXyxULHgsYiwxMCkse3JvdWdobmVzczouNyxmaWxsOmwsZmlsbFN0eWxlOiJzb2xpZCIsc3Ryb2tlOnUsc2VlZDppfSk6SS5yZWN0YW5nbGUoXyxULHgsYix7c2VlZDppfSk7TD1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIik7bGV0IGs9SS5yZWN0YW5nbGUoXyxFLHgsdyx7ZmlsbDpBP2E6cyxmaWxsU3R5bGU6QT8iaGFjaHVyZSI6InNvbGlkIixzdHJva2U6dSxzZWVkOml9KTtMPWguaW5zZXJ0KCgpPT5ELCI6Zmlyc3QtY2hpbGQiKSxwPWguaW5zZXJ0KCgpPT5rKX1lbHNlIEw9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxMLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixfKS5hdHRyKCJ5IixUKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixiKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vaykscC5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsXykuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLHgpLmF0dHIoImhlaWdodCIsdyk7ZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtlLngtZy53aWR0aC8yfSwgJHtUKzEtKHhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpPzA6Myl9KWApO2xldCBTPUwubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9Uy5oZWlnaHQsZS5vZmZzZXRYPTAsZS5vZmZzZXRZPWcuaGVpZ2h0LWUucGFkZGluZy8yLGUubGFiZWxCQm94PWcsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIEhoKGUsQSl9LHtjbHVzdGVyOmgsbGFiZWxCQm94Omd9fSwicm91bmRlZFdpdGhUaXRsZSIpLGE5ZT1vKGFzeW5jKHQsZSk9PntZLmluZm8oIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTtsZXQgcj1wZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7Y2x1c3RlckJrZzphLGNsdXN0ZXJCb3JkZXI6c309bix7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnUsYm9yZGVyU3R5bGVzOmgsYmFja2dyb3VuZFN0eWxlczpmfT1aZShlKSxkPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyICIrZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLHA9eHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1kLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCAiKSxnPWF3YWl0IExpKG0sZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6cCxpc05vZGU6ITAsd2lkdGg6ZS53aWR0aH0pLHk9Zy5nZXRCQm94KCk7aWYoeHIoci5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBMPWcuY2hpbGRyZW5bMF0sUz1WZShnKTt5PUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUy5hdHRyKCJ3aWR0aCIseS53aWR0aCksUy5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1sZXQgdj1lLndpZHRoPD15LndpZHRoK2UucGFkZGluZz95LndpZHRoK2UucGFkZGluZzplLndpZHRoO2Uud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP2UuZGlmZj0odi1lLndpZHRoKS8yLWUucGFkZGluZzplLmRpZmY9LWUucGFkZGluZztsZXQgeD1lLmhlaWdodCxiPWUueC12LzIsdz1lLnkteC8yO1kudHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKTtsZXQgXztpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IEw9WGUuc3ZnKGQpLFM9S2UoZSx7cm91Z2huZXNzOi43LGZpbGw6YSxzdHJva2U6cyxmaWxsV2VpZ2h0OjQsc2VlZDppfSksQT1MLnBhdGgoUGEoYix3LHYseCxlLnJ4KSxTKTtfPWQuaW5zZXJ0KCgpPT4oWS5kZWJ1ZygiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDIixBKSxBKSwiOmZpcnN0LWNoaWxkIiksXy5zZWxlY3QoInBhdGg6bnRoLWNoaWxkKDIpIikuYXR0cigic3R5bGUiLGguam9pbigiOyIpKSxfLnNlbGVjdCgicGF0aCIpLmF0dHIoInN0eWxlIixmLmpvaW4oIjsiKS5yZXBsYWNlKCJmaWxsIiwic3Ryb2tlIikpfWVsc2UgXz1kLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLF8uYXR0cigic3R5bGUiLHUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsYikuYXR0cigieSIsdykuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIseCk7bGV0e3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46VH09RnUocik7aWYobS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtlLngteS53aWR0aC8yfSwgJHtlLnktZS5oZWlnaHQvMitUfSlgKSxsKXtsZXQgTD1tLnNlbGVjdCgic3BhbiIpO0wmJkwuYXR0cigic3R5bGUiLGwpfWxldCBFPV8ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5vZmZzZXRYPTAsZS53aWR0aD1FLndpZHRoLGUuaGVpZ2h0PUUuaGVpZ2h0LGUub2Zmc2V0WT15LmhlaWdodC1lLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbihMKXtyZXR1cm4gSGgoZSxMKX0se2NsdXN0ZXI6ZCxsYWJlbEJCb3g6eX19LCJrYW5iYW5TZWN0aW9uIiksczllPW8oKHQsZSk9PntsZXQgcj1wZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7bm9kZUJvcmRlcjphfT1uLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLGw9cy5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSx1PTAqZS5wYWRkaW5nLGg9ZS53aWR0aCt1O2UuZGlmZj0tZS5wYWRkaW5nO2xldCBmPWUuaGVpZ2h0K3UsZD1lLngtaC8yLHA9ZS55LWYvMjtlLndpZHRoPWg7bGV0IG07aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB2PVhlLnN2ZyhzKS5yZWN0YW5nbGUoZCxwLGgsZix7ZmlsbDoibGlnaHRncmV5Iixyb3VnaG5lc3M6LjUsc3Ryb2tlTGluZURhc2g6WzVdLHN0cm9rZTphLHNlZWQ6aX0pO209cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpfWVsc2UgbT1sLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLG0uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieCIsZCkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXR0cigiZGF0YS1sb29rIixlLmxvb2spO2xldCBnPW0ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9Zy5oZWlnaHQsZS5vZmZzZXRYPTAsZS5vZmZzZXRZPTAsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIEhoKGUseSl9LHtjbHVzdGVyOnMsbGFiZWxCQm94Ont9fX0sImRpdmlkZXIiKSxvOWU9cVosbDllPXtyZWN0OnFaLHNxdWFyZVJlY3Q6bzllLHJvdW5kZWRXaXRoVGl0bGU6aTllLG5vdGVHcm91cDpuOWUsZGl2aWRlcjpzOWUsa2FuYmFuU2VjdGlvbjphOWV9LFhaPW5ldyBNYXAsX209byhhc3luYyh0LGUpPT57bGV0IHI9ZS5zaGFwZXx8InJlY3QiLG49YXdhaXQgbDllW3JdKHQsZSk7cmV0dXJuIFhaLnNldChlLmlkLG4pLG59LCJpbnNlcnRDbHVzdGVyIiksalo9bygoKT0+e1haPW5ldyBNYXB9LCJjbGVhciIpfSk7ZnVuY3Rpb24gY3codCxlKXtpZih0PT09dm9pZCAwfHxlPT09dm9pZCAwKXJldHVybnthbmdsZTowLGRlbHRhWDowLGRlbHRhWTowfTt0PVduKHQpLGU9V24oZSk7bGV0W3Isbl09W3QueCx0LnldLFtpLGFdPVtlLngsZS55XSxzPWktcixsPWEtbjtyZXR1cm57YW5nbGU6TWF0aC5hdGFuKGwvcyksZGVsdGFYOnMsZGVsdGFZOmx9fXZhciBxbyxXbix1dyx1TD1NKCgpPT57InVzZSBzdHJpY3QiO3FvPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NH07byhjdywiY2FsY3VsYXRlRGVsdGFBbmRBbmdsZSIpO1duPW8odD0+QXJyYXkuaXNBcnJheSh0KT97eDp0WzBdLHk6dFsxXX06dCwicG9pbnRUcmFuc2Zvcm1lciIpLHV3PW8odD0+KHt4Om8oZnVuY3Rpb24oZSxyLG4pe2xldCBpPTAsYT1XbihuWzBdKS54PFduKG5bbi5sZW5ndGgtMV0pLng/ImxlZnQiOiJyaWdodCI7aWYocj09PTAmJk9iamVjdC5oYXNPd24ocW8sdC5hcnJvd1R5cGVTdGFydCkpe2xldHthbmdsZTptLGRlbHRhWDpnfT1jdyhuWzBdLG5bMV0pO2k9cW9bdC5hcnJvd1R5cGVTdGFydF0qTWF0aC5jb3MobSkqKGc+PTA/MTotMSl9ZWxzZSBpZihyPT09bi5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihxbyx0LmFycm93VHlwZUVuZCkpe2xldHthbmdsZTptLGRlbHRhWDpnfT1jdyhuW24ubGVuZ3RoLTFdLG5bbi5sZW5ndGgtMl0pO2k9cW9bdC5hcnJvd1R5cGVFbmRdKk1hdGguY29zKG0pKihnPj0wPzE6LTEpfWxldCBzPU1hdGguYWJzKFduKGUpLngtV24obltuLmxlbmd0aC0xXSkueCksbD1NYXRoLmFicyhXbihlKS55LVduKG5bbi5sZW5ndGgtMV0pLnkpLHU9TWF0aC5hYnMoV24oZSkueC1XbihuWzBdKS54KSxoPU1hdGguYWJzKFduKGUpLnktV24oblswXSkueSksZj1xb1t0LmFycm93VHlwZVN0YXJ0XSxkPXFvW3QuYXJyb3dUeXBlRW5kXSxwPTE7aWYoczxkJiZzPjAmJmw8ZCl7bGV0IG09ZCtwLXM7bSo9YT09PSJyaWdodCI/LTE6MSxpLT1tfWlmKHU8ZiYmdT4wJiZoPGYpe2xldCBtPWYrcC11O20qPWE9PT0icmlnaHQiPy0xOjEsaSs9bX1yZXR1cm4gV24oZSkueCtpfSwieCIpLHk6byhmdW5jdGlvbihlLHIsbil7bGV0IGk9MCxhPVduKG5bMF0pLnk8V24obltuLmxlbmd0aC0xXSkueT8iZG93biI6InVwIjtpZihyPT09MCYmT2JqZWN0Lmhhc093bihxbyx0LmFycm93VHlwZVN0YXJ0KSl7bGV0e2FuZ2xlOm0sZGVsdGFZOmd9PWN3KG5bMF0sblsxXSk7aT1xb1t0LmFycm93VHlwZVN0YXJ0XSpNYXRoLmFicyhNYXRoLnNpbihtKSkqKGc+PTA/MTotMSl9ZWxzZSBpZihyPT09bi5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihxbyx0LmFycm93VHlwZUVuZCkpe2xldHthbmdsZTptLGRlbHRhWTpnfT1jdyhuW24ubGVuZ3RoLTFdLG5bbi5sZW5ndGgtMl0pO2k9cW9bdC5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooZz49MD8xOi0xKX1sZXQgcz1NYXRoLmFicyhXbihlKS55LVduKG5bbi5sZW5ndGgtMV0pLnkpLGw9TWF0aC5hYnMoV24oZSkueC1XbihuW24ubGVuZ3RoLTFdKS54KSx1PU1hdGguYWJzKFduKGUpLnktV24oblswXSkueSksaD1NYXRoLmFicyhXbihlKS54LVduKG5bMF0pLngpLGY9cW9bdC5hcnJvd1R5cGVTdGFydF0sZD1xb1t0LmFycm93VHlwZUVuZF0scD0xO2lmKHM8ZCYmcz4wJiZsPGQpe2xldCBtPWQrcC1zO20qPWE9PT0idXAiPy0xOjEsaS09bX1pZih1PGYmJnU+MCYmaDxmKXtsZXQgbT1mK3AtdTttKj1hPT09InVwIj8tMToxLGkrPW19cmV0dXJuIFduKGUpLnkraX0sInkiKX0pLCJnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldCIpfSk7dmFyIFFaLGM5ZSxLWixaWj1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7UVo9bygodCxlLHIsbixpKT0+e2UuYXJyb3dUeXBlU3RhcnQmJktaKHQsInN0YXJ0IixlLmFycm93VHlwZVN0YXJ0LHIsbixpKSxlLmFycm93VHlwZUVuZCYmS1oodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSl9LCJhZGRFZGdlTWFya2VycyIpLGM5ZT17YXJyb3dfY3Jvc3M6ImNyb3NzIixhcnJvd19wb2ludDoicG9pbnQiLGFycm93X2JhcmI6ImJhcmIiLGFycm93X2NpcmNsZToiY2lyY2xlIixhZ2dyZWdhdGlvbjoiYWdncmVnYXRpb24iLGV4dGVuc2lvbjoiZXh0ZW5zaW9uIixjb21wb3NpdGlvbjoiY29tcG9zaXRpb24iLGRlcGVuZGVuY3k6ImRlcGVuZGVuY3kiLGxvbGxpcG9wOiJsb2xsaXBvcCJ9LEtaPW8oKHQsZSxyLG4saSxhKT0+e2xldCBzPWM5ZVtyXTtpZighcyl7WS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7cn1gKTtyZXR1cm59bGV0IGw9ZT09PSJzdGFydCI/IlN0YXJ0IjoiRW5kIjt0LmF0dHIoYG1hcmtlci0ke2V9YCxgdXJsKCR7bn0jJHtpfV8ke2F9LSR7c30ke2x9KWApfSwiYWRkRWRnZU1hcmtlciIpfSk7ZnVuY3Rpb24gaHcodCxlKXtwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZ0JiYodC5zdHlsZS53aWR0aD1lLmxlbmd0aCo5KyJweCIsdC5zdHlsZS5oZWlnaHQ9IjEycHgiKX1mdW5jdGlvbiBmOWUodCl7bGV0IGU9W10scj1bXTtmb3IobGV0IG49MTtuPHQubGVuZ3RoLTE7bisrKXtsZXQgaT10W24tMV0sYT10W25dLHM9dFtuKzFdOyhpLng9PT1hLngmJmEueT09PXMueSYmTWF0aC5hYnMoYS54LXMueCk+NSYmTWF0aC5hYnMoYS55LWkueSk+NXx8aS55PT09YS55JiZhLng9PT1zLngmJk1hdGguYWJzKGEueC1pLngpPjUmJk1hdGguYWJzKGEueS1zLnkpPjUpJiYoZS5wdXNoKGEpLHIucHVzaChuKSl9cmV0dXJue2Nvcm5lclBvaW50czplLGNvcm5lclBvaW50UG9zaXRpb25zOnJ9fXZhciBmdyx5YSx0SixWdixkdyxwdyx1OWUsaDllLEpaLGVKLGQ5ZSxtdyxoTD1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTt1dCgpO1BsKCk7aHIoKTt1TCgpOyR2KCk7cHIoKTtqdCgpO1k1KCk7WlooKTtmdz1uZXcgTWFwLHlhPW5ldyBNYXAsdEo9bygoKT0+e2Z3LmNsZWFyKCkseWEuY2xlYXIoKX0sImNsZWFyIiksVnY9byh0PT50P3QucmVkdWNlKChyLG4pPT5yKyI7IituLCIiKToiIiwiZ2V0TGFiZWxTdHlsZXMiKSxkdz1vKGFzeW5jKHQsZSk9PntsZXQgcj14cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxuPWF3YWl0IExpKHQsZS5sYWJlbCx7c3R5bGU6VnYoZS5sYWJlbFN0eWxlKSx1c2VIdG1sTGFiZWxzOnIsYWRkU3ZnQmFja2dyb3VuZDohMCxpc05vZGU6ITF9KTtZLmluZm8oImFiYzgyIixlLGUubGFiZWxUeXBlKTtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksYT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthLm5vZGUoKS5hcHBlbmRDaGlsZChuKTtsZXQgcz1uLmdldEJCb3goKTtpZihyKXtsZXQgdT1uLmNoaWxkcmVuWzBdLGg9VmUobik7cz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGguYXR0cigid2lkdGgiLHMud2lkdGgpLGguYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKSxmdy5zZXQoZS5pZCxpKSxlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQ7bGV0IGw7aWYoZS5zdGFydExhYmVsTGVmdCl7bGV0IHU9YXdhaXQgQ2MoZS5zdGFydExhYmVsTGVmdCxWdihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIikseWEuZ2V0KGUuaWQpfHx5YS5zZXQoZS5pZCx7fSkseWEuZ2V0KGUuaWQpLnN0YXJ0TGVmdD1oLGh3KGwsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IENjKGUuc3RhcnRMYWJlbFJpZ2h0LFZ2KGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9aC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSx5YS5nZXQoZS5pZCl8fHlhLnNldChlLmlkLHt9KSx5YS5nZXQoZS5pZCkuc3RhcnRSaWdodD1oLGh3KGwsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXtsZXQgdT1hd2FpdCBDYyhlLmVuZExhYmVsTGVmdCxWdihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSkseWEuZ2V0KGUuaWQpfHx5YS5zZXQoZS5pZCx7fSkseWEuZ2V0KGUuaWQpLmVuZExlZnQ9aCxodyhsLGUuZW5kTGFiZWxMZWZ0KX1pZihlLmVuZExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IENjKGUuZW5kTGFiZWxSaWdodCxWdihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSkseWEuZ2V0KGUuaWQpfHx5YS5zZXQoZS5pZCx7fSkseWEuZ2V0KGUuaWQpLmVuZFJpZ2h0PWgsaHcobCxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBufSwiaW5zZXJ0RWRnZUxhYmVsIik7byhodywic2V0VGVybWluYWxXaWR0aCIpO3B3PW8oKHQsZSk9PntZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgYWJjODggIix0LmlkLHQubGFiZWwsZncuZ2V0KHQuaWQpLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPXBlKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1GdShuKTtpZih0LmxhYmVsKXtsZXQgYT1mdy5nZXQodC5pZCkscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY0xhYmVsUG9zaXRpb24ocik7WS5kZWJ1ZygiTW92aW5nIGxhYmVsICIrdC5sYWJlbCsiIGZyb20gKCIscywiLCIsbCwiKSB0byAoIix1LngsIiwiLHUueSwiKSBhYmM4OCIpLGUudXBkYXRlZFBhdGgmJihzPXUueCxsPXUueSl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsK2kvMn0pYCl9aWYodC5zdGFydExhYmVsTGVmdCl7bGV0IGE9eWEuZ2V0KHQuaWQpLnN0YXJ0TGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7bGV0IGE9eWEuZ2V0KHQuaWQpLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT15YS5nZXQodC5pZCkuZW5kTGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxSaWdodCl7bGV0IGE9eWEuZ2V0KHQuaWQpLmVuZFJpZ2h0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfX0sInBvc2l0aW9uRWRnZUxhYmVsIiksdTllPW8oKHQsZSk9PntsZXQgcj10Lngsbj10LnksaT1NYXRoLmFicyhlLngtciksYT1NYXRoLmFicyhlLnktbikscz10LndpZHRoLzIsbD10LmhlaWdodC8yO3JldHVybiBpPj1zfHxhPj1sfSwib3V0c2lkZU5vZGUiKSxoOWU9bygodCxlLHIpPT57WS5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KGUpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShyKX0KICBub2RlICAgICAgICA6IHg6JHt0Lnh9IHk6JHt0Lnl9IHc6JHt0LndpZHRofSBoOiR7dC5oZWlnaHR9YCk7bGV0IG49dC54LGk9dC55LGE9TWF0aC5hYnMobi1yLngpLHM9dC53aWR0aC8yLGw9ci54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixoPU1hdGguYWJzKGUueS1yLnkpLGY9TWF0aC5hYnMoZS54LXIueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMobi1lLngpKnUpe2xldCBkPXIueTxlLnk/ZS55LXUtaTppLXUtZS55O2w9ZipkL2g7bGV0IHA9e3g6ci54PGUueD9yLngrbDpyLngtZitsLHk6ci55PGUueT9yLnkraC1kOnIueS1oK2R9O3JldHVybiBsPT09MCYmKHAueD1lLngscC55PWUueSksZj09PTAmJihwLng9ZS54KSxoPT09MCYmKHAueT1lLnkpLFkuZGVidWcoYGFiYzg5IHRvcC9ib3R0b20gY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBZLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksSlo9bygodCxlKT0+e1kud2FybigiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0Iix0LGUpO2xldCByPVtdLG49dFswXSxpPSExO3JldHVybiB0LmZvckVhY2goYT0+e2lmKFkuaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLGEsZSksIXU5ZShlLGEpJiYhaSl7bGV0IHM9aDllKGUsbixhKTtZLmRlYnVnKCJhYmM4OCBpbnNpZGUiLGEsbixzKSxZLmRlYnVnKCJhYmM4OCBpbnRlcnNlY3Rpb24iLHMsZSk7bGV0IGw9ITE7ci5mb3JFYWNoKHU9PntsPWx8fHUueD09PXMueCYmdS55PT09cy55fSksci5zb21lKHU9PnUueD09PXMueCYmdS55PT09cy55KT9ZLndhcm4oImFiYzg4IG5vIGludGVyc2VjdCIscyxyKTpyLnB1c2gocyksaT0hMH1lbHNlIFkud2FybigiYWJjODggb3V0c2lkZSIsYSxuKSxuPWEsaXx8ci5wdXNoKGEpfSksWS5kZWJ1ZygicmV0dXJuaW5nIHBvaW50cyIscikscn0sImN1dFBhdGhBdEludGVyc2VjdCIpO28oZjllLCJleHRyYWN0Q29ybmVyUG9pbnRzIik7ZUo9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZS54LXQueCxpPWUueS10LnksYT1NYXRoLnNxcnQobipuK2kqaSkscz1yL2E7cmV0dXJue3g6ZS54LXMqbix5OmUueS1zKml9fSwiZmluZEFkamFjZW50UG9pbnQiKSxkOWU9byhmdW5jdGlvbih0KXtsZXR7Y29ybmVyUG9pbnRQb3NpdGlvbnM6ZX09ZjllKHQpLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZS5pbmNsdWRlcyhuKSl7bGV0IGk9dFtuLTFdLGE9dFtuKzFdLHM9dFtuXSxsPWVKKGkscyw1KSx1PWVKKGEscyw1KSxoPXUueC1sLngsZj11LnktbC55O3IucHVzaChsKTtsZXQgZD1NYXRoLnNxcnQoMikqMixwPXt4OnMueCx5OnMueX07aWYoTWF0aC5hYnMoYS54LWkueCk+MTAmJk1hdGguYWJzKGEueS1pLnkpPj0xMCl7WS5kZWJ1ZygiQ29ybmVyIHBvaW50IGZpeGluZyIsTWF0aC5hYnMoYS54LWkueCksTWF0aC5hYnMoYS55LWkueSkpO2xldCBtPTU7cy54PT09bC54P3A9e3g6aDwwP2wueC1tK2Q6bC54K20tZCx5OmY8MD9sLnktZDpsLnkrZH06cD17eDpoPDA/bC54LWQ6bC54K2QseTpmPDA/bC55LW0rZDpsLnkrbS1kfX1lbHNlIFkuZGVidWcoIkNvcm5lciBwb2ludCBza2lwcGluZyBmaXhpbmciLE1hdGguYWJzKGEueC1pLngpLE1hdGguYWJzKGEueS1pLnkpKTtyLnB1c2gocCx1KX1lbHNlIHIucHVzaCh0W25dKTtyZXR1cm4gcn0sImZpeENvcm5lcnMiKSxtdz1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldHtoYW5kRHJhd25TZWVkOmx9PXBlKCksdT1lLnBvaW50cyxoPSExLGY9aTt2YXIgZD1hO2QuaW50ZXJzZWN0JiZmLmludGVyc2VjdCYmKHU9dS5zbGljZSgxLGUucG9pbnRzLmxlbmd0aC0xKSx1LnVuc2hpZnQoZi5pbnRlcnNlY3QodVswXSkpLFkuZGVidWcoIkxhc3QgcG9pbnQgQVBBMTIiLGUuc3RhcnQsIi0tPiIsZS5lbmQsdVt1Lmxlbmd0aC0xXSxkLGQuaW50ZXJzZWN0KHVbdS5sZW5ndGgtMV0pKSx1LnB1c2goZC5pbnRlcnNlY3QodVt1Lmxlbmd0aC0xXSkpKSxlLnRvQ2x1c3RlciYmKFkuaW5mbygidG8gY2x1c3RlciBhYmM4OCIsci5nZXQoZS50b0NsdXN0ZXIpKSx1PUpaKGUucG9pbnRzLHIuZ2V0KGUudG9DbHVzdGVyKS5ub2RlKSxoPSEwKSxlLmZyb21DbHVzdGVyJiYoWS5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixyLmdldChlLmZyb21DbHVzdGVyKSxKU09OLnN0cmluZ2lmeSh1LG51bGwsMikpLHU9SloodS5yZXZlcnNlKCksci5nZXQoZS5mcm9tQ2x1c3Rlcikubm9kZSkucmV2ZXJzZSgpLGg9ITApO2xldCBwPXUuZmlsdGVyKEw9PiFOdW1iZXIuaXNOYU4oTC55KSk7cD1kOWUocCk7bGV0IG09UG87ZS5jdXJ2ZSYmKG09ZS5jdXJ2ZSk7bGV0e3g6Zyx5fT11dyhlKSx2PW5zKCkueChnKS55KHkpLmN1cnZlKG0pLHg7c3dpdGNoKGUudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6eD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjp4PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOng9ImVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSI7YnJlYWs7ZGVmYXVsdDp4PSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwifXN3aXRjaChlLnBhdHRlcm4pe2Nhc2Uic29saWQiOngrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6eCs9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6eCs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVhaztkZWZhdWx0OngrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIn1sZXQgYix3PXYocCksXz1BcnJheS5pc0FycmF5KGUuc3R5bGUpP2Uuc3R5bGU6W2Uuc3R5bGVdO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgTD1YZS5zdmcodCk7T2JqZWN0LmFzc2lnbihbXSxwKTtsZXQgUz1MLnBhdGgodyx7cm91Z2huZXNzOi4zLHNlZWQ6bH0pO3grPSIgdHJhbnNpdGlvbiIsYj1WZShTKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiY2xhc3MiLCIgIit4KyhlLmNsYXNzZXM/IiAiK2UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIixfP18ucmVkdWNlKChJLEQpPT5JKyI7IitELCIiKToiIik7bGV0IEE9Yi5hdHRyKCJkIik7Yi5hdHRyKCJkIixBKSx0Lm5vZGUoKS5hcHBlbmRDaGlsZChiLm5vZGUoKSl9ZWxzZSBiPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImNsYXNzIiwiICIreCsoZS5jbGFzc2VzPyIgIitlLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsXz9fLnJlZHVjZSgoTCxTKT0+TCsiOyIrUywiIik6IiIpO2xldCBUPSIiOyhwZSgpLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlfHxwZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUpJiYoVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxUPVQucmVwbGFjZSgvXCgvZywiXFwoIikucmVwbGFjZSgvXCkvZywiXFwpIikpLFkuaW5mbygiYXJyb3dUeXBlU3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQpLFkuaW5mbygiYXJyb3dUeXBlRW5kIixlLmFycm93VHlwZUVuZCksUVooYixlLFQscyxuKTtsZXQgRT17fTtyZXR1cm4gaCYmKEUudXBkYXRlZFBhdGg9dSksRS5vcmlnaW5hbFBhdGg9ZS5wb2ludHMsRX0sImluc2VydEVkZ2UiKX0pO3ZhciBwOWUsbTllLGc5ZSx5OWUsdjllLHg5ZSxiOWUsdzllLFQ5ZSxrOWUsRTllLGd3LGZMPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtwOWU9bygodCxlLHIsbik9PntlLmZvckVhY2goaT0+e0U5ZVtpXSh0LHIsbil9KX0sImluc2VydE1hcmtlcnMiKSxtOWU9bygodCxlLHIpPT57WS50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsciksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSwiZXh0ZW5zaW9uIiksZzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSwiY29tcG9zaXRpb24iKSx5OWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJhZ2dyZWdhdGlvbiIpLHY5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiZGVwZW5kZW5jeSIpLHg5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0sImxvbGxpcG9wIiksYjllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw0LjUpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJwb2ludCIpLHc5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjaXJjbGUiKSxUOWU9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNyb3NzIiksazllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJiYXJiIiksRTllPXtleHRlbnNpb246bTllLGNvbXBvc2l0aW9uOmc5ZSxhZ2dyZWdhdGlvbjp5OWUsZGVwZW5kZW5jeTp2OWUsbG9sbGlwb3A6eDllLHBvaW50OmI5ZSxjaXJjbGU6dzllLGNyb3NzOlQ5ZSxiYXJiOms5ZX0sZ3c9cDllfSk7YXN5bmMgZnVuY3Rpb24gTG0odCxlLHIpe2xldCBuLGk7ZS5zaGFwZT09PSJyZWN0IiYmKGUucngmJmUucnk/ZS5zaGFwZT0icm91bmRlZFJlY3QiOmUuc2hhcGU9InNxdWFyZVJlY3QiKTtsZXQgYT1lLnNoYXBlPyQ5W2Uuc2hhcGVdOnZvaWQgMDtpZighYSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7ZS5zaGFwZX0uIFBsZWFzZSBjaGVjayB5b3VyIHN5bnRheC5gKTtpZihlLmxpbmspe2xldCBzO3IuY29uZmlnLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/cz0iX3RvcCI6ZS5saW5rVGFyZ2V0JiYocz1lLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxuPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixzPz9udWxsKSxpPWF3YWl0IGEobixlLHIpfWVsc2UgaT1hd2FpdCBhKHQsZSxyKSxuPWk7cmV0dXJuIGUudG9vbHRpcCYmaS5hdHRyKCJ0aXRsZSIsZS50b29sdGlwKSx5dy5zZXQoZS5pZCxuKSxlLmhhdmVDYWxsYmFjayYmbi5hdHRyKCJjbGFzcyIsbi5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIiksbn12YXIgeXcsckosbkosVXYsdnc9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO1Y5KCk7eXc9bmV3IE1hcDtvKExtLCJpbnNlcnROb2RlIik7cko9bygodCxlKT0+e3l3LnNldChlLmlkLHQpfSwic2V0Tm9kZUVsZW0iKSxuSj1vKCgpPT57eXcuY2xlYXIoKX0sImNsZWFyIiksVXY9byh0PT57bGV0IGU9eXcuZ2V0KHQuaWQpO1kudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO3ZhciBpSixhSj1NKCgpPT57InVzZSBzdHJpY3QiO1phKCk7ZnIoKTt1dCgpO2x3KCk7aEwoKTtmTCgpO3Z3KCk7T3QoKTtocigpO2lKPXtjb21tb246cWUsZ2V0Q29uZmlnOkNyLGluc2VydENsdXN0ZXI6X20saW5zZXJ0RWRnZTptdyxpbnNlcnRFZGdlTGFiZWw6ZHcsaW5zZXJ0TWFya2VyczpndyxpbnNlcnROb2RlOkxtLGludGVycG9sYXRlVG9DdXJ2ZTpKXyxsYWJlbEhlbHBlcjpzdCxsb2c6WSxwb3NpdGlvbkVkZ2VMYWJlbDpwd319KTtmdW5jdGlvbiBDOWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3ltYm9sInx8ZWkodCkmJmdhKHQpPT1TOWV9dmFyIFM5ZSxjbyx6ZD1NKCgpPT57InVzZSBzdHJpY3QiO0x1KCk7em8oKTtTOWU9IltvYmplY3QgU3ltYm9sXSI7byhDOWUsImlzU3ltYm9sIik7Y289QzllfSk7ZnVuY3Rpb24gQTllKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09ZSh0W3JdLHIsdCk7cmV0dXJuIGl9dmFyIFBzLEdkPU0oKCk9PnsidXNlIHN0cmljdCI7byhBOWUsImFycmF5TWFwIik7UHM9QTllfSk7ZnVuY3Rpb24gbEoodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKER0KHQpKXJldHVybiBQcyh0LGxKKSsiIjtpZihjbyh0KSlyZXR1cm4gb0o/b0ouY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiBlPT0iMCImJjEvdD09LV85ZT8iLTAiOmV9dmFyIF85ZSxzSixvSixjSix1Sj1NKCgpPT57InVzZSBzdHJpY3QiO0NkKCk7R2QoKTtIbigpO3pkKCk7XzllPTEvMCxzSj1pYT9pYS5wcm90b3R5cGU6dm9pZCAwLG9KPXNKP3NKLnRvU3RyaW5nOnZvaWQgMDtvKGxKLCJiYXNlVG9TdHJpbmciKTtjSj1sSn0pO2Z1bmN0aW9uIEQ5ZSh0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZMOWUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX12YXIgTDllLGhKLGZKPU0oKCk9PnsidXNlIHN0cmljdCI7TDllPS9ccy87byhEOWUsInRyaW1tZWRFbmRJbmRleCIpO2hKPUQ5ZX0pO2Z1bmN0aW9uIFI5ZSh0KXtyZXR1cm4gdCYmdC5zbGljZSgwLGhKKHQpKzEpLnJlcGxhY2UoTjllLCIiKX12YXIgTjllLGRKLHBKPU0oKCk9PnsidXNlIHN0cmljdCI7ZkooKTtOOWU9L15ccysvO28oUjllLCJiYXNlVHJpbSIpO2RKPVI5ZX0pO2Z1bmN0aW9uIEI5ZSh0KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIHQ7aWYoY28odCkpcmV0dXJuIG1KO2lmKHhuKHQpKXt2YXIgZT10eXBlb2YgdC52YWx1ZU9mPT0iZnVuY3Rpb24iP3QudmFsdWVPZigpOnQ7dD14bihlKT9lKyIiOmV9aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0PT09MD90Oit0O3Q9ZEoodCk7dmFyIHI9STllLnRlc3QodCk7cmV0dXJuIHJ8fE85ZS50ZXN0KHQpP1A5ZSh0LnNsaWNlKDIpLHI/Mjo4KTpNOWUudGVzdCh0KT9tSjordH12YXIgbUosTTllLEk5ZSxPOWUsUDllLGdKLHlKPU0oKCk9PnsidXNlIHN0cmljdCI7cEooKTtpbygpO3pkKCk7bUo9TmFOLE05ZT0vXlstK10weFswLTlhLWZdKyQvaSxJOWU9L14wYlswMV0rJC9pLE85ZT0vXjBvWzAtN10rJC9pLFA5ZT1wYXJzZUludDtvKEI5ZSwidG9OdW1iZXIiKTtnSj1COWV9KTtmdW5jdGlvbiB6OWUodCl7aWYoIXQpcmV0dXJuIHQ9PT0wP3Q6MDtpZih0PWdKKHQpLHQ9PT12Snx8dD09PS12Sil7dmFyIGU9dDwwPy0xOjE7cmV0dXJuIGUqRjllfXJldHVybiB0PT09dD90OjB9dmFyIHZKLEY5ZSxEbSxkTD1NKCgpPT57InVzZSBzdHJpY3QiO3lKKCk7dko9MS8wLEY5ZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7byh6OWUsInRvRmluaXRlIik7RG09ejllfSk7ZnVuY3Rpb24gRzllKHQpe3ZhciBlPURtKHQpLHI9ZSUxO3JldHVybiBlPT09ZT9yP2UtcjplOjB9dmFyIF9jLE5tPU0oKCk9PnsidXNlIHN0cmljdCI7ZEwoKTtvKEc5ZSwidG9JbnRlZ2VyIik7X2M9RzllfSk7dmFyICQ5ZSx4dyx4Sj1NKCgpPT57InVzZSBzdHJpY3QiO09oKCk7Qm8oKTskOWU9QXMob2ksIldlYWtNYXAiKSx4dz0kOWV9KTtmdW5jdGlvbiBWOWUoKXt9dmFyIHRpLHBMPU0oKCk9PnsidXNlIHN0cmljdCI7byhWOWUsIm5vb3AiKTt0aT1WOWV9KTtmdW5jdGlvbiBVOWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG4mJmUodFtyXSxyLHQpIT09ITE7KTtyZXR1cm4gdH12YXIgYncsbUw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU5ZSwiYXJyYXlFYWNoIik7Ync9VTllfSk7ZnVuY3Rpb24gSDllKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPXIrKG4/MTotMSk7bj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfXZhciB3dyxnTD1NKCgpPT57InVzZSBzdHJpY3QiO28oSDllLCJiYXNlRmluZEluZGV4Iik7d3c9SDllfSk7ZnVuY3Rpb24gVzllKHQpe3JldHVybiB0IT09dH12YXIgYkosd0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFc5ZSwiYmFzZUlzTmFOIik7Yko9VzllfSk7ZnVuY3Rpb24gWTllKHQsZSxyKXtmb3IodmFyIG49ci0xLGk9dC5sZW5ndGg7KytuPGk7KWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfXZhciBUSixrSj1NKCgpPT57InVzZSBzdHJpY3QiO28oWTllLCJzdHJpY3RJbmRleE9mIik7VEo9WTllfSk7ZnVuY3Rpb24gcTllKHQsZSxyKXtyZXR1cm4gZT09PWU/VEoodCxlLHIpOnd3KHQsYkoscil9dmFyIFJtLFR3PU0oKCk9PnsidXNlIHN0cmljdCI7Z0woKTt3SigpO2tKKCk7byhxOWUsImJhc2VJbmRleE9mIik7Um09cTllfSk7ZnVuY3Rpb24gWDllKHQsZSl7dmFyIHI9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiEhciYmUm0odCxlLDApPi0xfXZhciBrdyx5TD1NKCgpPT57InVzZSBzdHJpY3QiO1R3KCk7byhYOWUsImFycmF5SW5jbHVkZXMiKTtrdz1YOWV9KTt2YXIgajllLEVKLFNKPU0oKCk9PnsidXNlIHN0cmljdCI7R18oKTtqOWU9bTUoT2JqZWN0LmtleXMsT2JqZWN0KSxFSj1qOWV9KTtmdW5jdGlvbiBaOWUodCl7aWYoIVRjKHQpKXJldHVybiBFSih0KTt2YXIgZT1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KHQpKVE5ZS5jYWxsKHQscikmJnIhPSJjb25zdHJ1Y3RvciImJmUucHVzaChyKTtyZXR1cm4gZX12YXIgSzllLFE5ZSxNbSxFdz1NKCgpPT57InVzZSBzdHJpY3QiO2NtKCk7U0ooKTtLOWU9T2JqZWN0LnByb3RvdHlwZSxROWU9SzllLmhhc093blByb3BlcnR5O28oWjllLCJiYXNlS2V5cyIpO01tPVo5ZX0pO2Z1bmN0aW9uIEo5ZSh0KXtyZXR1cm4gbGkodCk/YjUodCk6TW0odCl9dmFyIEdyLExjPU0oKCk9PnsidXNlIHN0cmljdCI7V18oKTtFdygpO0dvKCk7byhKOWUsImtleXMiKTtHcj1KOWV9KTt2YXIgZUxlLHRMZSxyTGUsdmEsQ0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkbSgpO05kKCk7al8oKTtHbygpO2NtKCk7TGMoKTtlTGU9T2JqZWN0LnByb3RvdHlwZSx0TGU9ZUxlLmhhc093blByb3BlcnR5LHJMZT1rNShmdW5jdGlvbih0LGUpe2lmKFRjKGUpfHxsaShlKSl7VW8oZSxHcihlKSx0KTtyZXR1cm59Zm9yKHZhciByIGluIGUpdExlLmNhbGwoZSxyKSYma2ModCxyLGVbcl0pfSksdmE9ckxlfSk7ZnVuY3Rpb24gYUxlKHQsZSl7aWYoRHQodCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIHI9PSJudW1iZXIifHxyPT0ic3ltYm9sInx8cj09ImJvb2xlYW4ifHx0PT1udWxsfHxjbyh0KT8hMDppTGUudGVzdCh0KXx8IW5MZS50ZXN0KHQpfHxlIT1udWxsJiZ0IGluIE9iamVjdChlKX12YXIgbkxlLGlMZSxJbSxTdz1NKCgpPT57InVzZSBzdHJpY3QiO0huKCk7emQoKTtuTGU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8saUxlPS9eXHcqJC87byhhTGUsImlzS2V5Iik7SW09YUxlfSk7ZnVuY3Rpb24gb0xlKHQpe3ZhciBlPXRtKHQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2l6ZT09PXNMZSYmci5jbGVhcigpLG59KSxyPWUuY2FjaGU7cmV0dXJuIGV9dmFyIHNMZSxBSixfSj1NKCgpPT57InVzZSBzdHJpY3QiO01fKCk7c0xlPTUwMDtvKG9MZSwibWVtb2l6ZUNhcHBlZCIpO0FKPW9MZX0pO3ZhciBsTGUsY0xlLHVMZSxMSixESj1NKCgpPT57InVzZSBzdHJpY3QiO19KKCk7bExlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGNMZT0vXFwoXFwpPy9nLHVMZT1BSihmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5jaGFyQ29kZUF0KDApPT09NDYmJmUucHVzaCgiIiksdC5yZXBsYWNlKGxMZSxmdW5jdGlvbihyLG4saSxhKXtlLnB1c2goaT9hLnJlcGxhY2UoY0xlLCIkMSIpOm58fHIpfSksZX0pLExKPXVMZX0pO2Z1bmN0aW9uIGhMZSh0KXtyZXR1cm4gdD09bnVsbD8iIjpjSih0KX12YXIgQ3csdkw9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1SigpO28oaExlLCJ0b1N0cmluZyIpO0N3PWhMZX0pO2Z1bmN0aW9uIGZMZSh0LGUpe3JldHVybiBEdCh0KT90OkltKHQsZSk/W3RdOkxKKEN3KHQpKX12YXIgWmgsSHY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIbigpO1N3KCk7REooKTt2TCgpO28oZkxlLCJjYXN0UGF0aCIpO1poPWZMZX0pO2Z1bmN0aW9uIHBMZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fGNvKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tZExlPyItMCI6ZX12YXIgZExlLERjLE9tPU0oKCk9PnsidXNlIHN0cmljdCI7emQoKTtkTGU9MS8wO28ocExlLCJ0b0tleSIpO0RjPXBMZX0pO2Z1bmN0aW9uIG1MZSh0LGUpe2U9WmgoZSx0KTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3QhPW51bGwmJnI8bjspdD10W0RjKGVbcisrXSldO3JldHVybiByJiZyPT1uP3Q6dm9pZCAwfXZhciBKaCxXdj1NKCgpPT57InVzZSBzdHJpY3QiO0h2KCk7T20oKTtvKG1MZSwiYmFzZUdldCIpO0poPW1MZX0pO2Z1bmN0aW9uIGdMZSh0LGUscil7dmFyIG49dD09bnVsbD92b2lkIDA6SmgodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59dmFyIE5KLFJKPU0oKCk9PnsidXNlIHN0cmljdCI7V3YoKTtvKGdMZSwiZ2V0Iik7Tko9Z0xlfSk7ZnVuY3Rpb24geUxlKHQsZSl7Zm9yKHZhciByPS0xLG49ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK3I8bjspdFtpK3JdPWVbcl07cmV0dXJuIHR9dmFyIFBtLEF3PU0oKCk9PnsidXNlIHN0cmljdCI7byh5TGUsImFycmF5UHVzaCIpO1BtPXlMZX0pO2Z1bmN0aW9uIHZMZSh0KXtyZXR1cm4gRHQodCl8fE1sKHQpfHwhIShNSiYmdCYmdFtNSl0pfXZhciBNSixJSixPSj1NKCgpPT57InVzZSBzdHJpY3QiO0NkKCk7dW0oKTtIbigpO01KPWlhP2lhLmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDA7byh2TGUsImlzRmxhdHRlbmFibGUiKTtJSj12TGV9KTtmdW5jdGlvbiBQSih0LGUscixuLGkpe3ZhciBhPS0xLHM9dC5sZW5ndGg7Zm9yKHJ8fChyPUlKKSxpfHwoaT1bXSk7KythPHM7KXt2YXIgbD10W2FdO2U+MCYmcihsKT9lPjE/UEoobCxlLTEscixuLGkpOlBtKGksbCk6bnx8KGlbaS5sZW5ndGhdPWwpfXJldHVybiBpfXZhciBOYyxCbT1NKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7T0ooKTtvKFBKLCJiYXNlRmxhdHRlbiIpO05jPVBKfSk7ZnVuY3Rpb24geExlKHQpe3ZhciBlPXQ9PW51bGw/MDp0Lmxlbmd0aDtyZXR1cm4gZT9OYyh0LDEpOltdfXZhciBXcixfdz1NKCgpPT57InVzZSBzdHJpY3QiO0JtKCk7byh4TGUsImZsYXR0ZW4iKTtXcj14TGV9KTtmdW5jdGlvbiBiTGUodCl7cmV0dXJuIFQ1KHc1KHQsdm9pZCAwLFdyKSx0KyIiKX12YXIgQkosRko9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtfdygpO1lfKCk7WF8oKTtvKGJMZSwiZmxhdFJlc3QiKTtCSj1iTGV9KTtmdW5jdGlvbiB3TGUodCxlLHIpe3ZhciBuPS0xLGk9dC5sZW5ndGg7ZTwwJiYoZT0tZT5pPzA6aStlKSxyPXI+aT9pOnIscjwwJiYocis9aSksaT1lPnI/MDpyLWU+Pj4wLGU+Pj49MDtmb3IodmFyIGE9QXJyYXkoaSk7KytuPGk7KWFbbl09dFtuK2VdO3JldHVybiBhfXZhciBMdyx4TD1NKCgpPT57InVzZSBzdHJpY3QiO28od0xlLCJiYXNlU2xpY2UiKTtMdz13TGV9KTtmdW5jdGlvbiBETGUodCl7cmV0dXJuIExMZS50ZXN0KHQpfXZhciBUTGUsa0xlLEVMZSxTTGUsQ0xlLEFMZSxfTGUsTExlLHpKLEdKPU0oKCk9PnsidXNlIHN0cmljdCI7VExlPSJcXHVkODAwLVxcdWRmZmYiLGtMZT0iXFx1MDMwMC1cXHUwMzZmIixFTGU9IlxcdWZlMjAtXFx1ZmUyZiIsU0xlPSJcXHUyMGQwLVxcdTIwZmYiLENMZT1rTGUrRUxlK1NMZSxBTGU9IlxcdWZlMGVcXHVmZTBmIixfTGU9IlxcdTIwMGQiLExMZT1SZWdFeHAoIlsiK19MZStUTGUrQ0xlK0FMZSsiXSIpO28oRExlLCJoYXNVbmljb2RlIik7eko9RExlfSk7ZnVuY3Rpb24gTkxlKHQsZSxyLG4pe3ZhciBpPS0xLGE9dD09bnVsbD8wOnQubGVuZ3RoO2ZvcihuJiZhJiYocj10WysraV0pOysraTxhOylyPWUocix0W2ldLGksdCk7cmV0dXJuIHJ9dmFyICRKLFZKPU0oKCk9PnsidXNlIHN0cmljdCI7byhOTGUsImFycmF5UmVkdWNlIik7JEo9TkxlfSk7ZnVuY3Rpb24gUkxlKHQsZSl7cmV0dXJuIHQmJlVvKGUsR3IoZSksdCl9dmFyIFVKLEhKPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTtMYygpO28oUkxlLCJiYXNlQXNzaWduIik7VUo9UkxlfSk7ZnVuY3Rpb24gTUxlKHQsZSl7cmV0dXJuIHQmJlVvKGUsX3MoZSksdCl9dmFyIFdKLFlKPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTtWaCgpO28oTUxlLCJiYXNlQXNzaWduSW4iKTtXSj1NTGV9KTtmdW5jdGlvbiBJTGUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT0wLGE9W107KytyPG47KXt2YXIgcz10W3JdO2UocyxyLHQpJiYoYVtpKytdPXMpfXJldHVybiBhfXZhciBGbSxEdz1NKCgpPT57InVzZSBzdHJpY3QiO28oSUxlLCJhcnJheUZpbHRlciIpO0ZtPUlMZX0pO2Z1bmN0aW9uIE9MZSgpe3JldHVybltdfXZhciBOdyxiTD1NKCgpPT57InVzZSBzdHJpY3QiO28oT0xlLCJzdHViQXJyYXkiKTtOdz1PTGV9KTt2YXIgUExlLEJMZSxxSixGTGUsem0sUnc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdygpO2JMKCk7UExlPU9iamVjdC5wcm90b3R5cGUsQkxlPVBMZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxxSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEZMZT1xSj9mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9bXToodD1PYmplY3QodCksRm0ocUoodCksZnVuY3Rpb24oZSl7cmV0dXJuIEJMZS5jYWxsKHQsZSl9KSl9Ok53LHptPUZMZX0pO2Z1bmN0aW9uIHpMZSh0LGUpe3JldHVybiBVbyh0LHptKHQpLGUpfXZhciBYSixqSj1NKCgpPT57InVzZSBzdHJpY3QiO05kKCk7UncoKTtvKHpMZSwiY29weVN5bWJvbHMiKTtYSj16TGV9KTt2YXIgR0xlLCRMZSxNdyx3TD1NKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7ZzUoKTtSdygpO2JMKCk7R0xlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsJExlPUdMZT9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspUG0oZSx6bSh0KSksdD1sbSh0KTtyZXR1cm4gZX06TncsTXc9JExlfSk7ZnVuY3Rpb24gVkxlKHQsZSl7cmV0dXJuIFVvKHQsTXcodCksZSl9dmFyIEtKLFFKPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTt3TCgpO28oVkxlLCJjb3B5U3ltYm9sc0luIik7S0o9VkxlfSk7ZnVuY3Rpb24gVUxlKHQsZSxyKXt2YXIgbj1lKHQpO3JldHVybiBEdCh0KT9uOlBtKG4scih0KSl9dmFyIEl3LFRMPU0oKCk9PnsidXNlIHN0cmljdCI7QXcoKTtIbigpO28oVUxlLCJiYXNlR2V0QWxsS2V5cyIpO0l3PVVMZX0pO2Z1bmN0aW9uIEhMZSh0KXtyZXR1cm4gSXcodCxHcix6bSl9dmFyIFl2LGtMPU0oKCk9PnsidXNlIHN0cmljdCI7VEwoKTtSdygpO0xjKCk7byhITGUsImdldEFsbEtleXMiKTtZdj1ITGV9KTtmdW5jdGlvbiBXTGUodCl7cmV0dXJuIEl3KHQsX3MsTXcpfXZhciBPdyxFTD1NKCgpPT57InVzZSBzdHJpY3QiO1RMKCk7d0woKTtWaCgpO28oV0xlLCJnZXRBbGxLZXlzSW4iKTtPdz1XTGV9KTt2YXIgWUxlLFB3LFpKPU0oKCk9PnsidXNlIHN0cmljdCI7T2goKTtCbygpO1lMZT1BcyhvaSwiRGF0YVZpZXciKSxQdz1ZTGV9KTt2YXIgcUxlLEJ3LEpKPU0oKCk9PnsidXNlIHN0cmljdCI7T2goKTtCbygpO3FMZT1BcyhvaSwiUHJvbWlzZSIpLEJ3PXFMZX0pO3ZhciBYTGUsZWYsU0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPaCgpO0JvKCk7WExlPUFzKG9pLCJTZXQiKSxlZj1YTGV9KTt2YXIgZWVlLGpMZSx0ZWUscmVlLG5lZSxpZWUsS0xlLFFMZSxaTGUsSkxlLGVEZSwkZCx1byxWZD1NKCgpPT57InVzZSBzdHJpY3QiO1pKKCk7bDUoKTtKSigpO1NMKCk7eEooKTtMdSgpO0RfKCk7ZWVlPSJbb2JqZWN0IE1hcF0iLGpMZT0iW29iamVjdCBPYmplY3RdIix0ZWU9IltvYmplY3QgUHJvbWlzZV0iLHJlZT0iW29iamVjdCBTZXRdIixuZWU9IltvYmplY3QgV2Vha01hcF0iLGllZT0iW29iamVjdCBEYXRhVmlld10iLEtMZT1EdShQdyksUUxlPUR1KEZoKSxaTGU9RHUoQncpLEpMZT1EdShlZiksZURlPUR1KHh3KSwkZD1nYTsoUHcmJiRkKG5ldyBQdyhuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aWVlfHxGaCYmJGQobmV3IEZoKSE9ZWVlfHxCdyYmJGQoQncucmVzb2x2ZSgpKSE9dGVlfHxlZiYmJGQobmV3IGVmKSE9cmVlfHx4dyYmJGQobmV3IHh3KSE9bmVlKSYmKCRkPW8oZnVuY3Rpb24odCl7dmFyIGU9Z2EodCkscj1lPT1qTGU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0R1KHIpOiIiO2lmKG4pc3dpdGNoKG4pe2Nhc2UgS0xlOnJldHVybiBpZWU7Y2FzZSBRTGU6cmV0dXJuIGVlZTtjYXNlIFpMZTpyZXR1cm4gdGVlO2Nhc2UgSkxlOnJldHVybiByZWU7Y2FzZSBlRGU6cmV0dXJuIG5lZX1yZXR1cm4gZX0sImdldFRhZyIpKTt1bz0kZH0pO2Z1bmN0aW9uIG5EZSh0KXt2YXIgZT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGUpO3JldHVybiBlJiZ0eXBlb2YgdFswXT09InN0cmluZyImJnJEZS5jYWxsKHQsImluZGV4IikmJihyLmluZGV4PXQuaW5kZXgsci5pbnB1dD10LmlucHV0KSxyfXZhciB0RGUsckRlLGFlZSxzZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0RGU9T2JqZWN0LnByb3RvdHlwZSxyRGU9dERlLmhhc093blByb3BlcnR5O28obkRlLCJpbml0Q2xvbmVBcnJheSIpO2FlZT1uRGV9KTtmdW5jdGlvbiBpRGUodCxlKXt2YXIgcj1lP29tKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iocix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX12YXIgb2VlLGxlZT1NKCgpPT57InVzZSBzdHJpY3QiO2Y1KCk7byhpRGUsImNsb25lRGF0YVZpZXciKTtvZWU9aURlfSk7ZnVuY3Rpb24gc0RlKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLGFEZS5leGVjKHQpKTtyZXR1cm4gZS5sYXN0SW5kZXg9dC5sYXN0SW5kZXgsZX12YXIgYURlLGNlZSx1ZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthRGU9L1x3KiQvO28oc0RlLCJjbG9uZVJlZ0V4cCIpO2NlZT1zRGV9KTtmdW5jdGlvbiBvRGUodCl7cmV0dXJuIGZlZT9PYmplY3QoZmVlLmNhbGwodCkpOnt9fXZhciBoZWUsZmVlLGRlZSxwZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDZCgpO2hlZT1pYT9pYS5wcm90b3R5cGU6dm9pZCAwLGZlZT1oZWU/aGVlLnZhbHVlT2Y6dm9pZCAwO28ob0RlLCJjbG9uZVN5bWJvbCIpO2RlZT1vRGV9KTtmdW5jdGlvbiBBRGUodCxlLHIpe3ZhciBuPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UgZ0RlOnJldHVybiBvbSh0KTtjYXNlIGxEZTpjYXNlIGNEZTpyZXR1cm4gbmV3IG4oK3QpO2Nhc2UgeURlOnJldHVybiBvZWUodCxyKTtjYXNlIHZEZTpjYXNlIHhEZTpjYXNlIGJEZTpjYXNlIHdEZTpjYXNlIFREZTpjYXNlIGtEZTpjYXNlIEVEZTpjYXNlIFNEZTpjYXNlIENEZTpyZXR1cm4gZDUodCxyKTtjYXNlIHVEZTpyZXR1cm4gbmV3IG47Y2FzZSBoRGU6Y2FzZSBwRGU6cmV0dXJuIG5ldyBuKHQpO2Nhc2UgZkRlOnJldHVybiBjZWUodCk7Y2FzZSBkRGU6cmV0dXJuIG5ldyBuO2Nhc2UgbURlOnJldHVybiBkZWUodCl9fXZhciBsRGUsY0RlLHVEZSxoRGUsZkRlLGREZSxwRGUsbURlLGdEZSx5RGUsdkRlLHhEZSxiRGUsd0RlLFREZSxrRGUsRURlLFNEZSxDRGUsbWVlLGdlZT1NKCgpPT57InVzZSBzdHJpY3QiO2Y1KCk7bGVlKCk7dWVlKCk7cGVlKCk7Rl8oKTtsRGU9IltvYmplY3QgQm9vbGVhbl0iLGNEZT0iW29iamVjdCBEYXRlXSIsdURlPSJbb2JqZWN0IE1hcF0iLGhEZT0iW29iamVjdCBOdW1iZXJdIixmRGU9IltvYmplY3QgUmVnRXhwXSIsZERlPSJbb2JqZWN0IFNldF0iLHBEZT0iW29iamVjdCBTdHJpbmddIixtRGU9IltvYmplY3QgU3ltYm9sXSIsZ0RlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIseURlPSJbb2JqZWN0IERhdGFWaWV3XSIsdkRlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLHhEZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixiRGU9IltvYmplY3QgSW50OEFycmF5XSIsd0RlPSJbb2JqZWN0IEludDE2QXJyYXldIixURGU9IltvYmplY3QgSW50MzJBcnJheV0iLGtEZT0iW29iamVjdCBVaW50OEFycmF5XSIsRURlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsU0RlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsQ0RlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSI7byhBRGUsImluaXRDbG9uZUJ5VGFnIik7bWVlPUFEZX0pO2Z1bmN0aW9uIExEZSh0KXtyZXR1cm4gZWkodCkmJnVvKHQpPT1fRGV9dmFyIF9EZSx5ZWUsdmVlPU0oKCk9PnsidXNlIHN0cmljdCI7VmQoKTt6bygpO19EZT0iW29iamVjdCBNYXBdIjtvKExEZSwiYmFzZUlzTWFwIik7eWVlPUxEZX0pO3ZhciB4ZWUsRERlLGJlZSx3ZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2ZWUoKTtEZCgpO3Z2KCk7eGVlPVZvJiZWby5pc01hcCxERGU9eGVlPyRvKHhlZSk6eWVlLGJlZT1ERGV9KTtmdW5jdGlvbiBSRGUodCl7cmV0dXJuIGVpKHQpJiZ1byh0KT09TkRlfXZhciBORGUsVGVlLGtlZT1NKCgpPT57InVzZSBzdHJpY3QiO1ZkKCk7em8oKTtORGU9IltvYmplY3QgU2V0XSI7byhSRGUsImJhc2VJc1NldCIpO1RlZT1SRGV9KTt2YXIgRWVlLE1EZSxTZWUsQ2VlPU0oKCk9PnsidXNlIHN0cmljdCI7a2VlKCk7RGQoKTt2digpO0VlZT1WbyYmVm8uaXNTZXQsTURlPUVlZT8kbyhFZWUpOlRlZSxTZWU9TURlfSk7ZnVuY3Rpb24gRncodCxlLHIsbixpLGEpe3ZhciBzLGw9ZSZJRGUsdT1lJk9EZSxoPWUmUERlO2lmKHImJihzPWk/cih0LG4saSxhKTpyKHQpKSxzIT09dm9pZCAwKXJldHVybiBzO2lmKCF4bih0KSlyZXR1cm4gdDt2YXIgZj1EdCh0KTtpZihmKXtpZihzPWFlZSh0KSwhbClyZXR1cm4gcDUodCxzKX1lbHNle3ZhciBkPXVvKHQpLHA9ZD09X2VlfHxkPT0kRGU7aWYoSWwodCkpcmV0dXJuIGg1KHQsbCk7aWYoZD09TGVlfHxkPT1BZWV8fHAmJiFpKXtpZihzPXV8fHA/e306eTUodCksIWwpcmV0dXJuIHU/S0oodCxXSihzLHQpKTpYSih0LFVKKHMsdCkpfWVsc2V7aWYoIUFuW2RdKXJldHVybiBpP3Q6e307cz1tZWUodCxkLGwpfX1hfHwoYT1uZXcgYmMpO3ZhciBtPWEuZ2V0KHQpO2lmKG0pcmV0dXJuIG07YS5zZXQodCxzKSxTZWUodCk/dC5mb3JFYWNoKGZ1bmN0aW9uKHYpe3MuYWRkKEZ3KHYsZSxyLHYsdCxhKSl9KTpiZWUodCkmJnQuZm9yRWFjaChmdW5jdGlvbih2LHgpe3Muc2V0KHgsRncodixlLHIseCx0LGEpKX0pO3ZhciBnPWg/dT9PdzpZdjp1P19zOkdyLHk9Zj92b2lkIDA6Zyh0KTtyZXR1cm4gYncoeXx8dCxmdW5jdGlvbih2LHgpe3kmJih4PXYsdj10W3hdKSxrYyhzLHgsRncodixlLHIseCx0LGEpKX0pLHN9dmFyIElEZSxPRGUsUERlLEFlZSxCRGUsRkRlLHpEZSxHRGUsX2VlLCREZSxWRGUsVURlLExlZSxIRGUsV0RlLFlEZSxxRGUsWERlLGpEZSxLRGUsUURlLFpEZSxKRGUsZU5lLHROZSxyTmUsbk5lLGlOZSxhTmUsQW4sencsQ0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttdigpO21MKCk7ZG0oKTtISigpO1lKKCk7UF8oKTt6XygpO2pKKCk7UUooKTtrTCgpO0VMKCk7VmQoKTtzZWUoKTtnZWUoKTskXygpO0huKCk7Zm0oKTt3ZWUoKTtpbygpO0NlZSgpO0xjKCk7VmgoKTtJRGU9MSxPRGU9MixQRGU9NCxBZWU9IltvYmplY3QgQXJndW1lbnRzXSIsQkRlPSJbb2JqZWN0IEFycmF5XSIsRkRlPSJbb2JqZWN0IEJvb2xlYW5dIix6RGU9IltvYmplY3QgRGF0ZV0iLEdEZT0iW29iamVjdCBFcnJvcl0iLF9lZT0iW29iamVjdCBGdW5jdGlvbl0iLCREZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFZEZT0iW29iamVjdCBNYXBdIixVRGU9IltvYmplY3QgTnVtYmVyXSIsTGVlPSJbb2JqZWN0IE9iamVjdF0iLEhEZT0iW29iamVjdCBSZWdFeHBdIixXRGU9IltvYmplY3QgU2V0XSIsWURlPSJbb2JqZWN0IFN0cmluZ10iLHFEZT0iW29iamVjdCBTeW1ib2xdIixYRGU9IltvYmplY3QgV2Vha01hcF0iLGpEZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEtEZT0iW29iamVjdCBEYXRhVmlld10iLFFEZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixaRGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsSkRlPSJbb2JqZWN0IEludDhBcnJheV0iLGVOZT0iW29iamVjdCBJbnQxNkFycmF5XSIsdE5lPSJbb2JqZWN0IEludDMyQXJyYXldIixyTmU9IltvYmplY3QgVWludDhBcnJheV0iLG5OZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGlOZT0iW29iamVjdCBVaW50MTZBcnJheV0iLGFOZT0iW29iamVjdCBVaW50MzJBcnJheV0iLEFuPXt9O0FuW0FlZV09QW5bQkRlXT1BbltqRGVdPUFuW0tEZV09QW5bRkRlXT1Bblt6RGVdPUFuW1FEZV09QW5bWkRlXT1BbltKRGVdPUFuW2VOZV09QW5bdE5lXT1BbltWRGVdPUFuW1VEZV09QW5bTGVlXT1BbltIRGVdPUFuW1dEZV09QW5bWURlXT1BbltxRGVdPUFuW3JOZV09QW5bbk5lXT1BbltpTmVdPUFuW2FOZV09ITA7QW5bR0RlXT1BbltfZWVdPUFuW1hEZV09ITE7byhGdywiYmFzZUNsb25lIik7enc9Rnd9KTtmdW5jdGlvbiBvTmUodCl7cmV0dXJuIHp3KHQsc05lKX12YXIgc05lLHJuLEFMPU0oKCk9PnsidXNlIHN0cmljdCI7Q0woKTtzTmU9NDtvKG9OZSwiY2xvbmUiKTtybj1vTmV9KTtmdW5jdGlvbiB1TmUodCl7cmV0dXJuIHp3KHQsbE5lfGNOZSl9dmFyIGxOZSxjTmUsX0wsRGVlPU0oKCk9PnsidXNlIHN0cmljdCI7Q0woKTtsTmU9MSxjTmU9NDtvKHVOZSwiY2xvbmVEZWVwIik7X0w9dU5lfSk7ZnVuY3Rpb24gaE5lKHQpe2Zvcih2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPTAsaT1bXTsrK2U8cjspe3ZhciBhPXRbZV07YSYmKGlbbisrXT1hKX1yZXR1cm4gaX12YXIgUmMsTmVlPU0oKCk9PnsidXNlIHN0cmljdCI7byhoTmUsImNvbXBhY3QiKTtSYz1oTmV9KTtmdW5jdGlvbiBkTmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsZk5lKSx0aGlzfXZhciBmTmUsUmVlLE1lZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZOZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhkTmUsInNldENhY2hlQWRkIik7UmVlPWROZX0pO2Z1bmN0aW9uIHBOZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIEllZSxPZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHBOZSwic2V0Q2FjaGVIYXMiKTtJZWU9cE5lfSk7ZnVuY3Rpb24gR3codCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IF9kOysrZTxyOyl0aGlzLmFkZCh0W2VdKX12YXIgR20sJHc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjNSgpO01lZSgpO09lZSgpO28oR3csIlNldENhY2hlIik7R3cucHJvdG90eXBlLmFkZD1Hdy5wcm90b3R5cGUucHVzaD1SZWU7R3cucHJvdG90eXBlLmhhcz1JZWU7R209R3d9KTtmdW5jdGlvbiBtTmUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZhciBWdyxMTD1NKCgpPT57InVzZSBzdHJpY3QiO28obU5lLCJhcnJheVNvbWUiKTtWdz1tTmV9KTtmdW5jdGlvbiBnTmUodCxlKXtyZXR1cm4gdC5oYXMoZSl9dmFyICRtLFV3PU0oKCk9PnsidXNlIHN0cmljdCI7byhnTmUsImNhY2hlSGFzIik7JG09Z05lfSk7ZnVuY3Rpb24geE5lKHQsZSxyLG4saSxhKXt2YXIgcz1yJnlOZSxsPXQubGVuZ3RoLHU9ZS5sZW5ndGg7aWYobCE9dSYmIShzJiZ1PmwpKXJldHVybiExO3ZhciBoPWEuZ2V0KHQpLGY9YS5nZXQoZSk7aWYoaCYmZilyZXR1cm4gaD09ZSYmZj09dDt2YXIgZD0tMSxwPSEwLG09ciZ2TmU/bmV3IEdtOnZvaWQgMDtmb3IoYS5zZXQodCxlKSxhLnNldChlLHQpOysrZDxsOyl7dmFyIGc9dFtkXSx5PWVbZF07aWYobil2YXIgdj1zP24oeSxnLGQsZSx0LGEpOm4oZyx5LGQsdCxlLGEpO2lmKHYhPT12b2lkIDApe2lmKHYpY29udGludWU7cD0hMTticmVha31pZihtKXtpZighVncoZSxmdW5jdGlvbih4LGIpe2lmKCEkbShtLGIpJiYoZz09PXh8fGkoZyx4LHIsbixhKSkpcmV0dXJuIG0ucHVzaChiKX0pKXtwPSExO2JyZWFrfX1lbHNlIGlmKCEoZz09PXl8fGkoZyx5LHIsbixhKSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZSh0KSxhLmRlbGV0ZShlKSxwfXZhciB5TmUsdk5lLEh3LERMPU0oKCk9PnsidXNlIHN0cmljdCI7JHcoKTtMTCgpO1V3KCk7eU5lPTEsdk5lPTI7byh4TmUsImVxdWFsQXJyYXlzIik7SHc9eE5lfSk7ZnVuY3Rpb24gYk5lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7clsrK2VdPVtpLG5dfSkscn12YXIgUGVlLEJlZT1NKCgpPT57InVzZSBzdHJpY3QiO28oYk5lLCJtYXBUb0FycmF5Iik7UGVlPWJOZX0pO2Z1bmN0aW9uIHdOZSh0KXt2YXIgZT0tMSxyPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrZV09bn0pLHJ9dmFyIFZtLFd3PU0oKCk9PnsidXNlIHN0cmljdCI7byh3TmUsInNldFRvQXJyYXkiKTtWbT13TmV9KTtmdW5jdGlvbiBPTmUodCxlLHIsbixpLGEscyl7c3dpdGNoKHIpe2Nhc2UgSU5lOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSBNTmU6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWEobmV3IHNtKHQpLG5ldyBzbShlKSkpO2Nhc2UgRU5lOmNhc2UgU05lOmNhc2UgX05lOnJldHVybiBGbygrdCwrZSk7Y2FzZSBDTmU6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIExOZTpjYXNlIE5OZTpyZXR1cm4gdD09ZSsiIjtjYXNlIEFOZTp2YXIgbD1QZWU7Y2FzZSBETmU6dmFyIHU9biZUTmU7aWYobHx8KGw9Vm0pLHQuc2l6ZSE9ZS5zaXplJiYhdSlyZXR1cm4hMTt2YXIgaD1zLmdldCh0KTtpZihoKXJldHVybiBoPT1lO258PWtOZSxzLnNldCh0LGUpO3ZhciBmPUh3KGwodCksbChlKSxuLGksYSxzKTtyZXR1cm4gcy5kZWxldGUodCksZjtjYXNlIFJOZTppZihOTClyZXR1cm4gTkwuY2FsbCh0KT09TkwuY2FsbChlKX1yZXR1cm4hMX12YXIgVE5lLGtOZSxFTmUsU05lLENOZSxBTmUsX05lLExOZSxETmUsTk5lLFJOZSxNTmUsSU5lLEZlZSxOTCx6ZWUsR2VlPU0oKCk9PnsidXNlIHN0cmljdCI7Q2QoKTtCXygpO0FkKCk7REwoKTtCZWUoKTtXdygpO1ROZT0xLGtOZT0yLEVOZT0iW29iamVjdCBCb29sZWFuXSIsU05lPSJbb2JqZWN0IERhdGVdIixDTmU9IltvYmplY3QgRXJyb3JdIixBTmU9IltvYmplY3QgTWFwXSIsX05lPSJbb2JqZWN0IE51bWJlcl0iLExOZT0iW29iamVjdCBSZWdFeHBdIixETmU9IltvYmplY3QgU2V0XSIsTk5lPSJbb2JqZWN0IFN0cmluZ10iLFJOZT0iW29iamVjdCBTeW1ib2xdIixNTmU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixJTmU9IltvYmplY3QgRGF0YVZpZXddIixGZWU9aWE/aWEucHJvdG90eXBlOnZvaWQgMCxOTD1GZWU/RmVlLnZhbHVlT2Y6dm9pZCAwO28oT05lLCJlcXVhbEJ5VGFnIik7emVlPU9OZX0pO2Z1bmN0aW9uIHpOZSh0LGUscixuLGksYSl7dmFyIHM9ciZQTmUsbD1Zdih0KSx1PWwubGVuZ3RoLGg9WXYoZSksZj1oLmxlbmd0aDtpZih1IT1mJiYhcylyZXR1cm4hMTtmb3IodmFyIGQ9dTtkLS07KXt2YXIgcD1sW2RdO2lmKCEocz9wIGluIGU6Rk5lLmNhbGwoZSxwKSkpcmV0dXJuITF9dmFyIG09YS5nZXQodCksZz1hLmdldChlKTtpZihtJiZnKXJldHVybiBtPT1lJiZnPT10O3ZhciB5PSEwO2Euc2V0KHQsZSksYS5zZXQoZSx0KTtmb3IodmFyIHY9czsrK2Q8dTspe3A9bFtkXTt2YXIgeD10W3BdLGI9ZVtwXTtpZihuKXZhciB3PXM/bihiLHgscCxlLHQsYSk6bih4LGIscCx0LGUsYSk7aWYoISh3PT09dm9pZCAwP3g9PT1ifHxpKHgsYixyLG4sYSk6dykpe3k9ITE7YnJlYWt9dnx8KHY9cD09ImNvbnN0cnVjdG9yIil9aWYoeSYmIXYpe3ZhciBfPXQuY29uc3RydWN0b3IsVD1lLmNvbnN0cnVjdG9yO18hPVQmJiJjb25zdHJ1Y3RvciJpbiB0JiYiY29uc3RydWN0b3IiaW4gZSYmISh0eXBlb2YgXz09ImZ1bmN0aW9uIiYmXyBpbnN0YW5jZW9mIF8mJnR5cGVvZiBUPT0iZnVuY3Rpb24iJiZUIGluc3RhbmNlb2YgVCkmJih5PSExKX1yZXR1cm4gYS5kZWxldGUodCksYS5kZWxldGUoZSkseX12YXIgUE5lLEJOZSxGTmUsJGVlLFZlZT1NKCgpPT57InVzZSBzdHJpY3QiO2tMKCk7UE5lPTEsQk5lPU9iamVjdC5wcm90b3R5cGUsRk5lPUJOZS5oYXNPd25Qcm9wZXJ0eTtvKHpOZSwiZXF1YWxPYmplY3RzIik7JGVlPXpOZX0pO2Z1bmN0aW9uIFZOZSh0LGUscixuLGksYSl7dmFyIHM9RHQodCksbD1EdChlKSx1PXM/SGVlOnVvKHQpLGg9bD9IZWU6dW8oZSk7dT11PT1VZWU/WXc6dSxoPWg9PVVlZT9ZdzpoO3ZhciBmPXU9PVl3LGQ9aD09WXcscD11PT1oO2lmKHAmJklsKHQpKXtpZighSWwoZSkpcmV0dXJuITE7cz0hMCxmPSExfWlmKHAmJiFmKXJldHVybiBhfHwoYT1uZXcgYmMpLHN8fEdoKHQpP0h3KHQsZSxyLG4saSxhKTp6ZWUodCxlLHUscixuLGksYSk7aWYoIShyJkdOZSkpe3ZhciBtPWYmJldlZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksZz1kJiZXZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKG18fGcpe3ZhciB5PW0/dC52YWx1ZSgpOnQsdj1nP2UudmFsdWUoKTplO3JldHVybiBhfHwoYT1uZXcgYmMpLGkoeSx2LHIsbixhKX19cmV0dXJuIHA/KGF8fChhPW5ldyBiYyksJGVlKHQsZSxyLG4saSxhKSk6ITF9dmFyIEdOZSxVZWUsSGVlLFl3LCROZSxXZWUsWWVlLHFlZT1NKCgpPT57InVzZSBzdHJpY3QiO212KCk7REwoKTtHZWUoKTtWZWUoKTtWZCgpO0huKCk7Zm0oKTt4digpO0dOZT0xLFVlZT0iW29iamVjdCBBcmd1bWVudHNdIixIZWU9IltvYmplY3QgQXJyYXldIixZdz0iW29iamVjdCBPYmplY3RdIiwkTmU9T2JqZWN0LnByb3RvdHlwZSxXZWU9JE5lLmhhc093blByb3BlcnR5O28oVk5lLCJiYXNlSXNFcXVhbERlZXAiKTtZZWU9Vk5lfSk7ZnVuY3Rpb24gWGVlKHQsZSxyLG4saSl7cmV0dXJuIHQ9PT1lPyEwOnQ9PW51bGx8fGU9PW51bGx8fCFlaSh0KSYmIWVpKGUpP3QhPT10JiZlIT09ZTpZZWUodCxlLHIsbixYZWUsaSl9dmFyIHF3LFJMPU0oKCk9PnsidXNlIHN0cmljdCI7cWVlKCk7em8oKTtvKFhlZSwiYmFzZUlzRXF1YWwiKTtxdz1YZWV9KTtmdW5jdGlvbiBXTmUodCxlLHIsbil7dmFyIGk9ci5sZW5ndGgsYT1pLHM9IW47aWYodD09bnVsbClyZXR1cm4hYTtmb3IodD1PYmplY3QodCk7aS0tOyl7dmFyIGw9cltpXTtpZihzJiZsWzJdP2xbMV0hPT10W2xbMF1dOiEobFswXWluIHQpKXJldHVybiExfWZvcig7KytpPGE7KXtsPXJbaV07dmFyIHU9bFswXSxoPXRbdV0sZj1sWzFdO2lmKHMmJmxbMl0pe2lmKGg9PT12b2lkIDAmJiEodSBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBiYztpZihuKXZhciBwPW4oaCxmLHUsdCxlLGQpO2lmKCEocD09PXZvaWQgMD9xdyhmLGgsVU5lfEhOZSxuLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH12YXIgVU5lLEhOZSxqZWUsS2VlPU0oKCk9PnsidXNlIHN0cmljdCI7bXYoKTtSTCgpO1VOZT0xLEhOZT0yO28oV05lLCJiYXNlSXNNYXRjaCIpO2plZT1XTmV9KTtmdW5jdGlvbiBZTmUodCl7cmV0dXJuIHQ9PT10JiYheG4odCl9dmFyIFh3LE1MPU0oKCk9PnsidXNlIHN0cmljdCI7aW8oKTtvKFlOZSwiaXNTdHJpY3RDb21wYXJhYmxlIik7WHc9WU5lfSk7ZnVuY3Rpb24gcU5lKHQpe2Zvcih2YXIgZT1Hcih0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0saT10W25dO2Vbcl09W24saSxYdyhpKV19cmV0dXJuIGV9dmFyIFFlZSxaZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNTCgpO0xjKCk7byhxTmUsImdldE1hdGNoRGF0YSIpO1FlZT1xTmV9KTtmdW5jdGlvbiBYTmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6clt0XT09PWUmJihlIT09dm9pZCAwfHx0IGluIE9iamVjdChyKSl9fXZhciBqdyxJTD1NKCgpPT57InVzZSBzdHJpY3QiO28oWE5lLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIpO2p3PVhOZX0pO2Z1bmN0aW9uIGpOZSh0KXt2YXIgZT1RZWUodCk7cmV0dXJuIGUubGVuZ3RoPT0xJiZlWzBdWzJdP2p3KGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT10fHxqZWUocix0LGUpfX12YXIgSmVlLGV0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0tlZSgpO1plZSgpO0lMKCk7byhqTmUsImJhc2VNYXRjaGVzIik7SmVlPWpOZX0pO2Z1bmN0aW9uIEtOZSh0LGUpe3JldHVybiB0IT1udWxsJiZlIGluIE9iamVjdCh0KX12YXIgdHRlLHJ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oS05lLCJiYXNlSGFzSW4iKTt0dGU9S05lfSk7ZnVuY3Rpb24gUU5lKHQsZSxyKXtlPVpoKGUsdCk7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT0hMTsrK248aTspe3ZhciBzPURjKGVbbl0pO2lmKCEoYT10IT1udWxsJiZyKHQscykpKWJyZWFrO3Q9dFtzXX1yZXR1cm4gYXx8KytuIT1pP2E6KGk9dD09bnVsbD8wOnQubGVuZ3RoLCEhaSYmaG0oaSkmJiRoKHMsaSkmJihEdCh0KXx8TWwodCkpKX12YXIgS3csT0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdigpO3VtKCk7SG4oKTt3digpO3Y1KCk7T20oKTtvKFFOZSwiaGFzUGF0aCIpO0t3PVFOZX0pO2Z1bmN0aW9uIFpOZSh0LGUpe3JldHVybiB0IT1udWxsJiZLdyh0LGUsdHRlKX12YXIgUXcsUEw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtydGUoKTtPTCgpO28oWk5lLCJoYXNJbiIpO1F3PVpOZX0pO2Z1bmN0aW9uIHRSZSh0LGUpe3JldHVybiBJbSh0KSYmWHcoZSk/ancoRGModCksZSk6ZnVuY3Rpb24ocil7dmFyIG49Tkoocix0KTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PWU/UXcocix0KTpxdyhlLG4sSk5lfGVSZSl9fXZhciBKTmUsZVJlLG50ZSxpdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSTCgpO1JKKCk7UEwoKTtTdygpO01MKCk7SUwoKTtPbSgpO0pOZT0xLGVSZT0yO28odFJlLCJiYXNlTWF0Y2hlc1Byb3BlcnR5Iik7bnRlPXRSZX0pO2Z1bmN0aW9uIHJSZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU/Llt0XX19dmFyIFp3LEJMPU0oKCk9PnsidXNlIHN0cmljdCI7byhyUmUsImJhc2VQcm9wZXJ0eSIpO1p3PXJSZX0pO2Z1bmN0aW9uIG5SZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEpoKGUsdCl9fXZhciBhdGUsc3RlPU0oKCk9PnsidXNlIHN0cmljdCI7V3YoKTtvKG5SZSwiYmFzZVByb3BlcnR5RGVlcCIpO2F0ZT1uUmV9KTtmdW5jdGlvbiBpUmUodCl7cmV0dXJuIEltKHQpP1p3KERjKHQpKTphdGUodCl9dmFyIG90ZSxsdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCTCgpO3N0ZSgpO1N3KCk7T20oKTtvKGlSZSwicHJvcGVydHkiKTtvdGU9aVJlfSk7ZnVuY3Rpb24gYVJlKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90OnQ9PW51bGw/YWE6dHlwZW9mIHQ9PSJvYmplY3QiP0R0KHQpP250ZSh0WzBdLHRbMV0pOkplZSh0KTpvdGUodCl9dmFyIGRuLGlzPU0oKCk9PnsidXNlIHN0cmljdCI7ZXRlKCk7aXRlKCk7UnUoKTtIbigpO2x0ZSgpO28oYVJlLCJiYXNlSXRlcmF0ZWUiKTtkbj1hUmV9KTtmdW5jdGlvbiBzUmUodCxlLHIsbil7Zm9yKHZhciBpPS0xLGE9dD09bnVsbD8wOnQubGVuZ3RoOysraTxhOyl7dmFyIHM9dFtpXTtlKG4scyxyKHMpLHQpfXJldHVybiBufXZhciBjdGUsdXRlPU0oKCk9PnsidXNlIHN0cmljdCI7byhzUmUsImFycmF5QWdncmVnYXRvciIpO2N0ZT1zUmV9KTtmdW5jdGlvbiBvUmUodCxlKXtyZXR1cm4gdCYmYW0odCxlLEdyKX12YXIgVW0sSnc9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1NSgpO0xjKCk7byhvUmUsImJhc2VGb3JPd24iKTtVbT1vUmV9KTtmdW5jdGlvbiBsUmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiByO2lmKCFsaShyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxhPWU/aTotMSxzPU9iamVjdChyKTsoZT9hLS06KythPGkpJiZuKHNbYV0sYSxzKSE9PSExOyk7cmV0dXJuIHJ9fXZhciBodGUsZnRlPU0oKCk9PnsidXNlIHN0cmljdCI7R28oKTtvKGxSZSwiY3JlYXRlQmFzZUVhY2giKTtodGU9bFJlfSk7dmFyIGNSZSxCcyx0Zj1NKCgpPT57InVzZSBzdHJpY3QiO0p3KCk7ZnRlKCk7Y1JlPWh0ZShVbSksQnM9Y1JlfSk7ZnVuY3Rpb24gdVJlKHQsZSxyLG4pe3JldHVybiBCcyh0LGZ1bmN0aW9uKGksYSxzKXtlKG4saSxyKGkpLHMpfSksbn12YXIgZHRlLHB0ZT1NKCgpPT57InVzZSBzdHJpY3QiO3RmKCk7byh1UmUsImJhc2VBZ2dyZWdhdG9yIik7ZHRlPXVSZX0pO2Z1bmN0aW9uIGhSZSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUR0KHIpP2N0ZTpkdGUsYT1lP2UoKTp7fTtyZXR1cm4gaShyLHQsZG4obiwyKSxhKX19dmFyIG10ZSxndGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dGUoKTtwdGUoKTtpcygpO0huKCk7byhoUmUsImNyZWF0ZUFnZ3JlZ2F0b3IiKTttdGU9aFJlfSk7dmFyIGZSZSxlVCx5dGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbygpO2ZSZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIG9pLkRhdGUubm93KCl9LCJub3ciKSxlVD1mUmV9KTt2YXIgdnRlLGRSZSxwUmUscmYseHRlPU0oKCk9PnsidXNlIHN0cmljdCI7cG0oKTtBZCgpO1JkKCk7VmgoKTt2dGU9T2JqZWN0LnByb3RvdHlwZSxkUmU9dnRlLmhhc093blByb3BlcnR5LHBSZT1FYyhmdW5jdGlvbih0LGUpe3Q9T2JqZWN0KHQpO3ZhciByPS0xLG49ZS5sZW5ndGgsaT1uPjI/ZVsyXTp2b2lkIDA7Zm9yKGkmJmFvKGVbMF0sZVsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgYT1lW3JdLHM9X3MoYSksbD0tMSx1PXMubGVuZ3RoOysrbDx1Oyl7dmFyIGg9c1tsXSxmPXRbaF07KGY9PT12b2lkIDB8fEZvKGYsdnRlW2hdKSYmIWRSZS5jYWxsKHQsaCkpJiYodFtoXT1hW2hdKX1yZXR1cm4gdH0pLHJmPXBSZX0pO2Z1bmN0aW9uIG1SZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dD09bnVsbD8wOnQubGVuZ3RoOysrbjxpOylpZihyKGUsdFtuXSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIHRULEZMPU0oKCk9PnsidXNlIHN0cmljdCI7byhtUmUsImFycmF5SW5jbHVkZXNXaXRoIik7dFQ9bVJlfSk7ZnVuY3Rpb24geVJlKHQsZSxyLG4pe3ZhciBpPS0xLGE9a3cscz0hMCxsPXQubGVuZ3RoLHU9W10saD1lLmxlbmd0aDtpZighbClyZXR1cm4gdTtyJiYoZT1QcyhlLCRvKHIpKSksbj8oYT10VCxzPSExKTplLmxlbmd0aD49Z1JlJiYoYT0kbSxzPSExLGU9bmV3IEdtKGUpKTtlOmZvcig7KytpPGw7KXt2YXIgZj10W2ldLGQ9cj09bnVsbD9mOnIoZik7aWYoZj1ufHxmIT09MD9mOjAscyYmZD09PWQpe2Zvcih2YXIgcD1oO3AtLTspaWYoZVtwXT09PWQpY29udGludWUgZTt1LnB1c2goZil9ZWxzZSBhKGUsZCxuKXx8dS5wdXNoKGYpfXJldHVybiB1fXZhciBnUmUsYnRlLHd0ZT1NKCgpPT57InVzZSBzdHJpY3QiOyR3KCk7eUwoKTtGTCgpO0dkKCk7RGQoKTtVdygpO2dSZT0yMDA7byh5UmUsImJhc2VEaWZmZXJlbmNlIik7YnRlPXlSZX0pO3ZhciB2UmUsbmYsVHRlPU0oKCk9PnsidXNlIHN0cmljdCI7d3RlKCk7Qm0oKTtwbSgpO3g1KCk7dlJlPUVjKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIExkKHQpP2J0ZSh0LE5jKGUsMSxMZCwhMCkpOltdfSksbmY9dlJlfSk7ZnVuY3Rpb24geFJlKHQpe3ZhciBlPXQ9PW51bGw/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06dm9pZCAwfXZhciB4YSxrdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHhSZSwibGFzdCIpO3hhPXhSZX0pO2Z1bmN0aW9uIGJSZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBuPyhlPXJ8fGU9PT12b2lkIDA/MTpfYyhlKSxMdyh0LGU8MD8wOmUsbikpOltdfXZhciB4aSxFdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt4TCgpO05tKCk7byhiUmUsImRyb3AiKTt4aT1iUmV9KTtmdW5jdGlvbiB3UmUodCxlLHIpe3ZhciBuPXQ9PW51bGw/MDp0Lmxlbmd0aDtyZXR1cm4gbj8oZT1yfHxlPT09dm9pZCAwPzE6X2MoZSksZT1uLWUsTHcodCwwLGU8MD8wOmUpKTpbXX12YXIgenUsU3RlPU0oKCk9PnsidXNlIHN0cmljdCI7eEwoKTtObSgpO28od1JlLCJkcm9wUmlnaHQiKTt6dT13UmV9KTtmdW5jdGlvbiBUUmUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6YWF9dmFyIEhtLHJUPU0oKCk9PnsidXNlIHN0cmljdCI7UnUoKTtvKFRSZSwiY2FzdEZ1bmN0aW9uIik7SG09VFJlfSk7ZnVuY3Rpb24ga1JlKHQsZSl7dmFyIHI9RHQodCk/Ync6QnM7cmV0dXJuIHIodCxIbShlKSl9dmFyIFNlLG5UPU0oKCk9PnsidXNlIHN0cmljdCI7bUwoKTt0ZigpO3JUKCk7SG4oKTtvKGtSZSwiZm9yRWFjaCIpO1NlPWtSZX0pO3ZhciBDdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuVCgpfSk7ZnVuY3Rpb24gRVJlKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoOysrcjxuOylpZighZSh0W3JdLHIsdCkpcmV0dXJuITE7cmV0dXJuITB9dmFyIEF0ZSxfdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEVSZSwiYXJyYXlFdmVyeSIpO0F0ZT1FUmV9KTtmdW5jdGlvbiBTUmUodCxlKXt2YXIgcj0hMDtyZXR1cm4gQnModCxmdW5jdGlvbihuLGksYSl7cmV0dXJuIHI9ISFlKG4saSxhKSxyfSkscn12YXIgTHRlLER0ZT1NKCgpPT57InVzZSBzdHJpY3QiO3RmKCk7byhTUmUsImJhc2VFdmVyeSIpO0x0ZT1TUmV9KTtmdW5jdGlvbiBDUmUodCxlLHIpe3ZhciBuPUR0KHQpP0F0ZTpMdGU7cmV0dXJuIHImJmFvKHQsZSxyKSYmKGU9dm9pZCAwKSxuKHQsZG4oZSwzKSl9dmFyIHphLE50ZT1NKCgpPT57InVzZSBzdHJpY3QiO190ZSgpO0R0ZSgpO2lzKCk7SG4oKTtSZCgpO28oQ1JlLCJldmVyeSIpO3phPUNSZX0pO2Z1bmN0aW9uIEFSZSh0LGUpe3ZhciByPVtdO3JldHVybiBCcyh0LGZ1bmN0aW9uKG4saSxhKXtlKG4saSxhKSYmci5wdXNoKG4pfSkscn12YXIgaVQsekw9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0ZigpO28oQVJlLCJiYXNlRmlsdGVyIik7aVQ9QVJlfSk7ZnVuY3Rpb24gX1JlKHQsZSl7dmFyIHI9RHQodCk/Rm06aVQ7cmV0dXJuIHIodCxkbihlLDMpKX12YXIgWXIsR0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdygpO3pMKCk7aXMoKTtIbigpO28oX1JlLCJmaWx0ZXIiKTtZcj1fUmV9KTtmdW5jdGlvbiBMUmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgaT1PYmplY3QoZSk7aWYoIWxpKGUpKXt2YXIgYT1kbihyLDMpO2U9R3IoZSkscj1vKGZ1bmN0aW9uKGwpe3JldHVybiBhKGlbbF0sbCxpKX0sInByZWRpY2F0ZSIpfXZhciBzPXQoZSxyLG4pO3JldHVybiBzPi0xP2lbYT9lW3NdOnNdOnZvaWQgMH19dmFyIFJ0ZSxNdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpcygpO0dvKCk7TGMoKTtvKExSZSwiY3JlYXRlRmluZCIpO1J0ZT1MUmV9KTtmdW5jdGlvbiBOUmUodCxlLHIpe3ZhciBuPXQ9PW51bGw/MDp0Lmxlbmd0aDtpZighbilyZXR1cm4tMTt2YXIgaT1yPT1udWxsPzA6X2Mocik7cmV0dXJuIGk8MCYmKGk9RFJlKG4raSwwKSksd3codCxkbihlLDMpLGkpfXZhciBEUmUsSXRlLE90ZT1NKCgpPT57InVzZSBzdHJpY3QiO2dMKCk7aXMoKTtObSgpO0RSZT1NYXRoLm1heDtvKE5SZSwiZmluZEluZGV4Iik7SXRlPU5SZX0pO3ZhciBSUmUsYXMsUHRlPU0oKCk9PnsidXNlIHN0cmljdCI7TXRlKCk7T3RlKCk7UlJlPVJ0ZShJdGUpLGFzPVJSZX0pO2Z1bmN0aW9uIE1SZSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dFswXTp2b2lkIDB9dmFyIHNhLEJ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oTVJlLCJoZWFkIik7c2E9TVJlfSk7dmFyIEZ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0J0ZSgpfSk7ZnVuY3Rpb24gSVJlKHQsZSl7dmFyIHI9LTEsbj1saSh0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIEJzKHQsZnVuY3Rpb24oaSxhLHMpe25bKytyXT1lKGksYSxzKX0pLG59dmFyIGFULCRMPU0oKCk9PnsidXNlIHN0cmljdCI7dGYoKTtHbygpO28oSVJlLCJiYXNlTWFwIik7YVQ9SVJlfSk7ZnVuY3Rpb24gT1JlKHQsZSl7dmFyIHI9RHQodCk/UHM6YVQ7cmV0dXJuIHIodCxkbihlLDMpKX12YXIgUWUsV209TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHZCgpO2lzKCk7JEwoKTtIbigpO28oT1JlLCJtYXAiKTtRZT1PUmV9KTtmdW5jdGlvbiBQUmUodCxlKXtyZXR1cm4gTmMoUWUodCxlKSwxKX12YXIgYmEsVkw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbSgpO1dtKCk7byhQUmUsImZsYXRNYXAiKTtiYT1QUmV9KTtmdW5jdGlvbiBCUmUodCxlKXtyZXR1cm4gdD09bnVsbD90OmFtKHQsSG0oZSksX3MpfXZhciBVTCx6dGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1NSgpO3JUKCk7VmgoKTtvKEJSZSwiZm9ySW4iKTtVTD1CUmV9KTtmdW5jdGlvbiBGUmUodCxlKXtyZXR1cm4gdCYmVW0odCxIbShlKSl9dmFyIEhMLEd0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0p3KCk7clQoKTtvKEZSZSwiZm9yT3duIik7SEw9RlJlfSk7dmFyIHpSZSxHUmUsJFJlLFdMLCR0ZT1NKCgpPT57InVzZSBzdHJpY3QiO2ltKCk7Z3RlKCk7elJlPU9iamVjdC5wcm90b3R5cGUsR1JlPXpSZS5oYXNPd25Qcm9wZXJ0eSwkUmU9bXRlKGZ1bmN0aW9uKHQsZSxyKXtHUmUuY2FsbCh0LHIpP3Rbcl0ucHVzaChlKTp3Yyh0LHIsW2VdKX0pLFdMPSRSZX0pO2Z1bmN0aW9uIFZSZSh0LGUpe3JldHVybiB0PmV9dmFyIFZ0ZSxVdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFZSZSwiYmFzZUd0Iik7VnRlPVZSZX0pO2Z1bmN0aW9uIFdSZSh0LGUpe3JldHVybiB0IT1udWxsJiZIUmUuY2FsbCh0LGUpfXZhciBVUmUsSFJlLEh0ZSxXdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVUmU9T2JqZWN0LnByb3RvdHlwZSxIUmU9VVJlLmhhc093blByb3BlcnR5O28oV1JlLCJiYXNlSGFzIik7SHRlPVdSZX0pO2Z1bmN0aW9uIFlSZSh0LGUpe3JldHVybiB0IT1udWxsJiZLdyh0LGUsSHRlKX12YXIgTnQsWXRlPU0oKCk9PnsidXNlIHN0cmljdCI7V3RlKCk7T0woKTtvKFlSZSwiaGFzIik7TnQ9WVJlfSk7ZnVuY3Rpb24gWFJlKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ8fCFEdCh0KSYmZWkodCkmJmdhKHQpPT1xUmV9dmFyIHFSZSxiaSxzVD1NKCgpPT57InVzZSBzdHJpY3QiO0x1KCk7SG4oKTt6bygpO3FSZT0iW29iamVjdCBTdHJpbmddIjtvKFhSZSwiaXNTdHJpbmciKTtiaT1YUmV9KTtmdW5jdGlvbiBqUmUodCxlKXtyZXR1cm4gUHMoZSxmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pfXZhciBxdGUsWHRlPU0oKCk9PnsidXNlIHN0cmljdCI7R2QoKTtvKGpSZSwiYmFzZVZhbHVlcyIpO3F0ZT1qUmV9KTtmdW5jdGlvbiBLUmUodCl7cmV0dXJuIHQ9PW51bGw/W106cXRlKHQsR3IodCkpfXZhciBicixZTD1NKCgpPT57InVzZSBzdHJpY3QiO1h0ZSgpO0xjKCk7byhLUmUsInZhbHVlcyIpO2JyPUtSZX0pO2Z1bmN0aW9uIFpSZSh0LGUscixuKXt0PWxpKHQpP3Q6YnIodCkscj1yJiYhbj9fYyhyKTowO3ZhciBpPXQubGVuZ3RoO3JldHVybiByPDAmJihyPVFSZShpK3IsMCkpLGJpKHQpP3I8PWkmJnQuaW5kZXhPZihlLHIpPi0xOiEhaSYmUm0odCxlLHIpPi0xfXZhciBRUmUsWW4sanRlPU0oKCk9PnsidXNlIHN0cmljdCI7VHcoKTtHbygpO3NUKCk7Tm0oKTtZTCgpO1FSZT1NYXRoLm1heDtvKFpSZSwiaW5jbHVkZXMiKTtZbj1aUmV9KTtmdW5jdGlvbiBlTWUodCxlLHIpe3ZhciBuPXQ9PW51bGw/MDp0Lmxlbmd0aDtpZighbilyZXR1cm4tMTt2YXIgaT1yPT1udWxsPzA6X2Mocik7cmV0dXJuIGk8MCYmKGk9SlJlKG4raSwwKSksUm0odCxlLGkpfXZhciBKUmUsb1QsS3RlPU0oKCk9PnsidXNlIHN0cmljdCI7VHcoKTtObSgpO0pSZT1NYXRoLm1heDtvKGVNZSwiaW5kZXhPZiIpO29UPWVNZX0pO2Z1bmN0aW9uIGFNZSh0KXtpZih0PT1udWxsKXJldHVybiEwO2lmKGxpKHQpJiYoRHQodCl8fHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQuc3BsaWNlPT0iZnVuY3Rpb24ifHxJbCh0KXx8R2godCl8fE1sKHQpKSlyZXR1cm4hdC5sZW5ndGg7dmFyIGU9dW8odCk7aWYoZT09dE1lfHxlPT1yTWUpcmV0dXJuIXQuc2l6ZTtpZihUYyh0KSlyZXR1cm4hTW0odCkubGVuZ3RoO2Zvcih2YXIgciBpbiB0KWlmKGlNZS5jYWxsKHQscikpcmV0dXJuITE7cmV0dXJuITB9dmFyIHRNZSxyTWUsbk1lLGlNZSxjcixsVD1NKCgpPT57InVzZSBzdHJpY3QiO0V3KCk7VmQoKTt1bSgpO0huKCk7R28oKTtmbSgpO2NtKCk7eHYoKTt0TWU9IltvYmplY3QgTWFwXSIsck1lPSJbb2JqZWN0IFNldF0iLG5NZT1PYmplY3QucHJvdG90eXBlLGlNZT1uTWUuaGFzT3duUHJvcGVydHk7byhhTWUsImlzRW1wdHkiKTtjcj1hTWV9KTtmdW5jdGlvbiBvTWUodCl7cmV0dXJuIGVpKHQpJiZnYSh0KT09c01lfXZhciBzTWUsUXRlLFp0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0x1KCk7em8oKTtzTWU9IltvYmplY3QgUmVnRXhwXSI7byhvTWUsImJhc2VJc1JlZ0V4cCIpO1F0ZT1vTWV9KTt2YXIgSnRlLGxNZSxYbyxlcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtadGUoKTtEZCgpO3Z2KCk7SnRlPVZvJiZWby5pc1JlZ0V4cCxsTWU9SnRlPyRvKEp0ZSk6UXRlLFhvPWxNZX0pO2Z1bmN0aW9uIGNNZSh0KXtyZXR1cm4gdD09PXZvaWQgMH12YXIgZHIsdHJlPU0oKCk9PnsidXNlIHN0cmljdCI7byhjTWUsImlzVW5kZWZpbmVkIik7ZHI9Y01lfSk7ZnVuY3Rpb24gdU1lKHQsZSl7cmV0dXJuIHQ8ZX12YXIgY1QscUw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHVNZSwiYmFzZUx0Iik7Y1Q9dU1lfSk7ZnVuY3Rpb24gaE1lKHQsZSl7dmFyIHI9e307cmV0dXJuIGU9ZG4oZSwzKSxVbSh0LGZ1bmN0aW9uKG4saSxhKXt3YyhyLGksZShuLGksYSkpfSkscn12YXIgVWQscnJlPU0oKCk9PnsidXNlIHN0cmljdCI7aW0oKTtKdygpO2lzKCk7byhoTWUsIm1hcFZhbHVlcyIpO1VkPWhNZX0pO2Z1bmN0aW9uIGZNZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXt2YXIgYT10W25dLHM9ZShhKTtpZihzIT1udWxsJiYobD09PXZvaWQgMD9zPT09cyYmIWNvKHMpOnIocyxsKSkpdmFyIGw9cyx1PWF9cmV0dXJuIHV9dmFyIFltLHVUPU0oKCk9PnsidXNlIHN0cmljdCI7emQoKTtvKGZNZSwiYmFzZUV4dHJlbXVtIik7WW09Zk1lfSk7ZnVuY3Rpb24gZE1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9ZbSh0LGFhLFZ0ZSk6dm9pZCAwfXZhciBGcyxucmU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1VCgpO1V0ZSgpO1J1KCk7byhkTWUsIm1heCIpO0ZzPWRNZX0pO2Z1bmN0aW9uIHBNZSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/WW0odCxhYSxjVCk6dm9pZCAwfXZhciBCbCxYTD1NKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7cUwoKTtSdSgpO28ocE1lLCJtaW4iKTtCbD1wTWV9KTtmdW5jdGlvbiBtTWUodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/WW0odCxkbihlLDIpLGNUKTp2b2lkIDB9dmFyIEhkLGlyZT1NKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7aXMoKTtxTCgpO28obU1lLCJtaW5CeSIpO0hkPW1NZX0pO2Z1bmN0aW9uIHlNZSh0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKGdNZSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiF0LmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiF0LmNhbGwodGhpcyxlWzBdKTtjYXNlIDI6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiF0LmNhbGwodGhpcyxlWzBdLGVbMV0sZVsyXSl9cmV0dXJuIXQuYXBwbHkodGhpcyxlKX19dmFyIGdNZSxhcmUsc3JlPU0oKCk9PnsidXNlIHN0cmljdCI7Z01lPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtvKHlNZSwibmVnYXRlIik7YXJlPXlNZX0pO2Z1bmN0aW9uIHZNZSh0LGUscixuKXtpZigheG4odCkpcmV0dXJuIHQ7ZT1aaChlLHQpO2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLHM9YS0xLGw9dDtsIT1udWxsJiYrK2k8YTspe3ZhciB1PURjKGVbaV0pLGg9cjtpZih1PT09Il9fcHJvdG9fXyJ8fHU9PT0iY29uc3RydWN0b3IifHx1PT09InByb3RvdHlwZSIpcmV0dXJuIHQ7aWYoaSE9cyl7dmFyIGY9bFt1XTtoPW4/bihmLHUsbCk6dm9pZCAwLGg9PT12b2lkIDAmJihoPXhuKGYpP2Y6JGgoZVtpKzFdKT9bXTp7fSl9a2MobCx1LGgpLGw9bFt1XX1yZXR1cm4gdH12YXIgb3JlLGxyZT1NKCgpPT57InVzZSBzdHJpY3QiO2RtKCk7SHYoKTt3digpO2lvKCk7T20oKTtvKHZNZSwiYmFzZVNldCIpO29yZT12TWV9KTtmdW5jdGlvbiB4TWUodCxlLHIpe2Zvcih2YXIgbj0tMSxpPWUubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1lW25dLGw9SmgodCxzKTtyKGwscykmJm9yZShhLFpoKHMsdCksbCl9cmV0dXJuIGF9dmFyIGhULGpMPU0oKCk9PnsidXNlIHN0cmljdCI7V3YoKTtscmUoKTtIdigpO28oeE1lLCJiYXNlUGlja0J5Iik7aFQ9eE1lfSk7ZnVuY3Rpb24gYk1lKHQsZSl7aWYodD09bnVsbClyZXR1cm57fTt2YXIgcj1QcyhPdyh0KSxmdW5jdGlvbihuKXtyZXR1cm5bbl19KTtyZXR1cm4gZT1kbihlKSxoVCh0LHIsZnVuY3Rpb24obixpKXtyZXR1cm4gZShuLGlbMF0pfSl9dmFyIHpzLGNyZT1NKCgpPT57InVzZSBzdHJpY3QiO0dkKCk7aXMoKTtqTCgpO0VMKCk7byhiTWUsInBpY2tCeSIpO3pzPWJNZX0pO2Z1bmN0aW9uIHdNZSh0LGUpe3ZhciByPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7ci0tOyl0W3JdPXRbcl0udmFsdWU7cmV0dXJuIHR9dmFyIHVyZSxocmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHdNZSwiYmFzZVNvcnRCeSIpO3VyZT13TWV9KTtmdW5jdGlvbiBUTWUodCxlKXtpZih0IT09ZSl7dmFyIHI9dCE9PXZvaWQgMCxuPXQ9PT1udWxsLGk9dD09PXQsYT1jbyh0KSxzPWUhPT12b2lkIDAsbD1lPT09bnVsbCx1PWU9PT1lLGg9Y28oZSk7aWYoIWwmJiFoJiYhYSYmdD5lfHxhJiZzJiZ1JiYhbCYmIWh8fG4mJnMmJnV8fCFyJiZ1fHwhaSlyZXR1cm4gMTtpZighbiYmIWEmJiFoJiZ0PGV8fGgmJnImJmkmJiFuJiYhYXx8bCYmciYmaXx8IXMmJml8fCF1KXJldHVybi0xfXJldHVybiAwfXZhciBmcmUsZHJlPU0oKCk9PnsidXNlIHN0cmljdCI7emQoKTtvKFRNZSwiY29tcGFyZUFzY2VuZGluZyIpO2ZyZT1UTWV9KTtmdW5jdGlvbiBrTWUodCxlLHIpe2Zvcih2YXIgbj0tMSxpPXQuY3JpdGVyaWEsYT1lLmNyaXRlcmlhLHM9aS5sZW5ndGgsbD1yLmxlbmd0aDsrK248czspe3ZhciB1PWZyZShpW25dLGFbbl0pO2lmKHUpe2lmKG4+PWwpcmV0dXJuIHU7dmFyIGg9cltuXTtyZXR1cm4gdSooaD09ImRlc2MiPy0xOjEpfX1yZXR1cm4gdC5pbmRleC1lLmluZGV4fXZhciBwcmUsbXJlPU0oKCk9PnsidXNlIHN0cmljdCI7ZHJlKCk7byhrTWUsImNvbXBhcmVNdWx0aXBsZSIpO3ByZT1rTWV9KTtmdW5jdGlvbiBFTWUodCxlLHIpe2UubGVuZ3RoP2U9UHMoZSxmdW5jdGlvbihhKXtyZXR1cm4gRHQoYSk/ZnVuY3Rpb24ocyl7cmV0dXJuIEpoKHMsYS5sZW5ndGg9PT0xP2FbMF06YSl9OmF9KTplPVthYV07dmFyIG49LTE7ZT1QcyhlLCRvKGRuKSk7dmFyIGk9YVQodCxmdW5jdGlvbihhLHMsbCl7dmFyIHU9UHMoZSxmdW5jdGlvbihoKXtyZXR1cm4gaChhKX0pO3JldHVybntjcml0ZXJpYTp1LGluZGV4Oisrbix2YWx1ZTphfX0pO3JldHVybiB1cmUoaSxmdW5jdGlvbihhLHMpe3JldHVybiBwcmUoYSxzLHIpfSl9dmFyIGdyZSx5cmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHZCgpO1d2KCk7aXMoKTskTCgpO2hyZSgpO0RkKCk7bXJlKCk7UnUoKTtIbigpO28oRU1lLCJiYXNlT3JkZXJCeSIpO2dyZT1FTWV9KTt2YXIgU01lLHZyZSx4cmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCTCgpO1NNZT1adygibGVuZ3RoIiksdnJlPVNNZX0pO2Z1bmN0aW9uIEJNZSh0KXtmb3IodmFyIGU9YnJlLmxhc3RJbmRleD0wO2JyZS50ZXN0KHQpOykrK2U7cmV0dXJuIGV9dmFyIHdyZSxDTWUsQU1lLF9NZSxMTWUsRE1lLE5NZSxLTCxRTCxSTWUsVHJlLGtyZSxFcmUsTU1lLFNyZSxDcmUsSU1lLE9NZSxQTWUsYnJlLEFyZSxfcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3cmU9IlxcdWQ4MDAtXFx1ZGZmZiIsQ01lPSJcXHUwMzAwLVxcdTAzNmYiLEFNZT0iXFx1ZmUyMC1cXHVmZTJmIixfTWU9IlxcdTIwZDAtXFx1MjBmZiIsTE1lPUNNZStBTWUrX01lLERNZT0iXFx1ZmUwZVxcdWZlMGYiLE5NZT0iWyIrd3JlKyJdIixLTD0iWyIrTE1lKyJdIixRTD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixSTWU9Iig/OiIrS0wrInwiK1FMKyIpIixUcmU9IlteIit3cmUrIl0iLGtyZT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsRXJlPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixNTWU9IlxcdTIwMGQiLFNyZT1STWUrIj8iLENyZT0iWyIrRE1lKyJdPyIsSU1lPSIoPzoiK01NZSsiKD86IitbVHJlLGtyZSxFcmVdLmpvaW4oInwiKSsiKSIrQ3JlK1NyZSsiKSoiLE9NZT1DcmUrU3JlK0lNZSxQTWU9Iig/OiIrW1RyZStLTCsiPyIsS0wsa3JlLEVyZSxOTWVdLmpvaW4oInwiKSsiKSIsYnJlPVJlZ0V4cChRTCsiKD89IitRTCsiKXwiK1BNZStPTWUsImciKTtvKEJNZSwidW5pY29kZVNpemUiKTtBcmU9Qk1lfSk7ZnVuY3Rpb24gRk1lKHQpe3JldHVybiB6Sih0KT9BcmUodCk6dnJlKHQpfXZhciBMcmUsRHJlPU0oKCk9PnsidXNlIHN0cmljdCI7eHJlKCk7R0ooKTtfcmUoKTtvKEZNZSwic3RyaW5nU2l6ZSIpO0xyZT1GTWV9KTtmdW5jdGlvbiB6TWUodCxlKXtyZXR1cm4gaFQodCxlLGZ1bmN0aW9uKHIsbil7cmV0dXJuIFF3KHQsbil9KX12YXIgTnJlLFJyZT1NKCgpPT57InVzZSBzdHJpY3QiO2pMKCk7UEwoKTtvKHpNZSwiYmFzZVBpY2siKTtOcmU9ek1lfSk7dmFyIEdNZSxXZCxNcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtScmUoKTtGSigpO0dNZT1CSihmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP3t9Ok5yZSh0LGUpfSksV2Q9R01lfSk7ZnVuY3Rpb24gVU1lKHQsZSxyLG4pe2Zvcih2YXIgaT0tMSxhPVZNZSgkTWUoKGUtdCkvKHJ8fDEpKSwwKSxzPUFycmF5KGEpO2EtLTspc1tuP2E6KytpXT10LHQrPXI7cmV0dXJuIHN9dmFyICRNZSxWTWUsSXJlLE9yZT1NKCgpPT57InVzZSBzdHJpY3QiOyRNZT1NYXRoLmNlaWwsVk1lPU1hdGgubWF4O28oVU1lLCJiYXNlUmFuZ2UiKTtJcmU9VU1lfSk7ZnVuY3Rpb24gSE1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIG4mJnR5cGVvZiBuIT0ibnVtYmVyIiYmYW8oZSxyLG4pJiYocj1uPXZvaWQgMCksZT1EbShlKSxyPT09dm9pZCAwPyhyPWUsZT0wKTpyPURtKHIpLG49bj09PXZvaWQgMD9lPHI/MTotMTpEbShuKSxJcmUoZSxyLG4sdCl9fXZhciBQcmUsQnJlPU0oKCk9PnsidXNlIHN0cmljdCI7T3JlKCk7UmQoKTtkTCgpO28oSE1lLCJjcmVhdGVSYW5nZSIpO1ByZT1ITWV9KTt2YXIgV01lLGpvLEZyZT1NKCgpPT57InVzZSBzdHJpY3QiO0JyZSgpO1dNZT1QcmUoKSxqbz1XTWV9KTtmdW5jdGlvbiBZTWUodCxlLHIsbixpKXtyZXR1cm4gaSh0LGZ1bmN0aW9uKGEscyxsKXtyPW4/KG49ITEsYSk6ZShyLGEscyxsKX0pLHJ9dmFyIHpyZSxHcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFlNZSwiYmFzZVJlZHVjZSIpO3pyZT1ZTWV9KTtmdW5jdGlvbiBxTWUodCxlLHIpe3ZhciBuPUR0KHQpPyRKOnpyZSxpPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gbih0LGRuKGUsNCkscixpLEJzKX12YXIgcXIsWkw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWSigpO3RmKCk7aXMoKTtHcmUoKTtIbigpO28ocU1lLCJyZWR1Y2UiKTtxcj1xTWV9KTtmdW5jdGlvbiBYTWUodCxlKXt2YXIgcj1EdCh0KT9GbTppVDtyZXR1cm4gcih0LGFyZShkbihlLDMpKSl9dmFyIGFmLCRyZT1NKCgpPT57InVzZSBzdHJpY3QiO0R3KCk7ekwoKTtpcygpO0huKCk7c3JlKCk7byhYTWUsInJlamVjdCIpO2FmPVhNZX0pO2Z1bmN0aW9uIFFNZSh0KXtpZih0PT1udWxsKXJldHVybiAwO2lmKGxpKHQpKXJldHVybiBiaSh0KT9McmUodCk6dC5sZW5ndGg7dmFyIGU9dW8odCk7cmV0dXJuIGU9PWpNZXx8ZT09S01lP3Quc2l6ZTpNbSh0KS5sZW5ndGh9dmFyIGpNZSxLTWUsSkwsVnJlPU0oKCk9PnsidXNlIHN0cmljdCI7RXcoKTtWZCgpO0dvKCk7c1QoKTtEcmUoKTtqTWU9IltvYmplY3QgTWFwXSIsS01lPSJbb2JqZWN0IFNldF0iO28oUU1lLCJzaXplIik7Skw9UU1lfSk7ZnVuY3Rpb24gWk1lKHQsZSl7dmFyIHI7cmV0dXJuIEJzKHQsZnVuY3Rpb24obixpLGEpe3JldHVybiByPWUobixpLGEpLCFyfSksISFyfXZhciBVcmUsSHJlPU0oKCk9PnsidXNlIHN0cmljdCI7dGYoKTtvKFpNZSwiYmFzZVNvbWUiKTtVcmU9Wk1lfSk7ZnVuY3Rpb24gSk1lKHQsZSxyKXt2YXIgbj1EdCh0KT9WdzpVcmU7cmV0dXJuIHImJmFvKHQsZSxyKSYmKGU9dm9pZCAwKSxuKHQsZG4oZSwzKSl9dmFyIHF2LFdyZT1NKCgpPT57InVzZSBzdHJpY3QiO0xMKCk7aXMoKTtIcmUoKTtIbigpO1JkKCk7byhKTWUsInNvbWUiKTtxdj1KTWV9KTt2YXIgZUllLE1jLFlyZT1NKCgpPT57InVzZSBzdHJpY3QiO0JtKCk7eXJlKCk7cG0oKTtSZCgpO2VJZT1FYyhmdW5jdGlvbih0LGUpe2lmKHQ9PW51bGwpcmV0dXJuW107dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIHI+MSYmYW8odCxlWzBdLGVbMV0pP2U9W106cj4yJiZhbyhlWzBdLGVbMV0sZVsyXSkmJihlPVtlWzBdXSksZ3JlKHQsTmMoZSwxKSxbXSl9KSxNYz1lSWV9KTt2YXIgdEllLHJJZSxxcmUsWHJlPU0oKCk9PnsidXNlIHN0cmljdCI7U0woKTtwTCgpO1d3KCk7dEllPTEvMCxySWU9ZWYmJjEvVm0obmV3IGVmKFssLTBdKSlbMV09PXRJZT9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVmKHQpfTp0aSxxcmU9ckllfSk7ZnVuY3Rpb24gaUllKHQsZSxyKXt2YXIgbj0tMSxpPWt3LGE9dC5sZW5ndGgscz0hMCxsPVtdLHU9bDtpZihyKXM9ITEsaT10VDtlbHNlIGlmKGE+PW5JZSl7dmFyIGg9ZT9udWxsOnFyZSh0KTtpZihoKXJldHVybiBWbShoKTtzPSExLGk9JG0sdT1uZXcgR219ZWxzZSB1PWU/W106bDtlOmZvcig7KytuPGE7KXt2YXIgZj10W25dLGQ9ZT9lKGYpOmY7aWYoZj1yfHxmIT09MD9mOjAscyYmZD09PWQpe2Zvcih2YXIgcD11Lmxlbmd0aDtwLS07KWlmKHVbcF09PT1kKWNvbnRpbnVlIGU7ZSYmdS5wdXNoKGQpLGwucHVzaChmKX1lbHNlIGkodSxkLHIpfHwodSE9PWwmJnUucHVzaChkKSxsLnB1c2goZikpfXJldHVybiBsfXZhciBuSWUscW0sZlQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskdygpO3lMKCk7RkwoKTtVdygpO1hyZSgpO1d3KCk7bkllPTIwMDtvKGlJZSwiYmFzZVVuaXEiKTtxbT1pSWV9KTt2YXIgYUllLGVELGpyZT1NKCgpPT57InVzZSBzdHJpY3QiO0JtKCk7cG0oKTtmVCgpO3g1KCk7YUllPUVjKGZ1bmN0aW9uKHQpe3JldHVybiBxbShOYyh0LDEsTGQsITApKX0pLGVEPWFJZX0pO2Z1bmN0aW9uIHNJZSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cW0odCk6W119dmFyIFhtLEtyZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZUKCk7byhzSWUsInVuaXEiKTtYbT1zSWV9KTtmdW5jdGlvbiBvSWUodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/cW0odCxkbihlLDIpKTpbXX12YXIgUXJlLFpyZT1NKCgpPT57InVzZSBzdHJpY3QiO2lzKCk7ZlQoKTtvKG9JZSwidW5pcUJ5Iik7UXJlPW9JZX0pO2Z1bmN0aW9uIGNJZSh0KXt2YXIgZT0rK2xJZTtyZXR1cm4gQ3codCkrZX12YXIgbEllLFlkLEpyZT1NKCgpPT57InVzZSBzdHJpY3QiO3ZMKCk7bEllPTA7byhjSWUsInVuaXF1ZUlkIik7WWQ9Y0llfSk7ZnVuY3Rpb24gdUllKHQsZSxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxhPWUubGVuZ3RoLHM9e307KytuPGk7KXt2YXIgbD1uPGE/ZVtuXTp2b2lkIDA7cihzLHRbbl0sbCl9cmV0dXJuIHN9dmFyIGVuZSx0bmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHVJZSwiYmFzZVppcE9iamVjdCIpO2VuZT11SWV9KTtmdW5jdGlvbiBoSWUodCxlKXtyZXR1cm4gZW5lKHR8fFtdLGV8fFtdLGtjKX12YXIgZFQscm5lPU0oKCk9PnsidXNlIHN0cmljdCI7ZG0oKTt0bmUoKTtvKGhJZSwiemlwT2JqZWN0Iik7ZFQ9aEllfSk7dmFyIEh0PU0oKCk9PnsidXNlIHN0cmljdCI7Q0ooKTtBTCgpO0RlZSgpO05lZSgpO3FfKCk7eHRlKCk7VHRlKCk7RXRlKCk7U3RlKCk7Q3RlKCk7TnRlKCk7R0woKTtQdGUoKTtGdGUoKTtWTCgpO193KCk7blQoKTt6dGUoKTtHdGUoKTskdGUoKTtZdGUoKTtSdSgpO2p0ZSgpO0t0ZSgpO0huKCk7bFQoKTt1digpO2lvKCk7ZXJlKCk7c1QoKTt0cmUoKTtMYygpO2t0ZSgpO1dtKCk7cnJlKCk7bnJlKCk7S18oKTtYTCgpO2lyZSgpO3BMKCk7eXRlKCk7TXJlKCk7Y3JlKCk7RnJlKCk7WkwoKTskcmUoKTtWcmUoKTtXcmUoKTtZcmUoKTtqcmUoKTtLcmUoKTtKcmUoKTtZTCgpO3JuZSgpO30pO2Z1bmN0aW9uIGluZSh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBhbmUodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIFh2KHQsZSxyLG4pe3ZhciBpPSIiK2UsYT0iIityO2lmKCF0JiZpPmEpe3ZhciBzPWk7aT1hLGE9c31yZXR1cm4gaStubmUrYStubmUrKGRyKG4pP2ZJZTpuKX1mdW5jdGlvbiBkSWUodCxlLHIsbil7dmFyIGk9IiIrZSxhPSIiK3I7aWYoIXQmJmk+YSl7dmFyIHM9aTtpPWEsYT1zfXZhciBsPXt2OmksdzphfTtyZXR1cm4gbiYmKGwubmFtZT1uKSxsfWZ1bmN0aW9uIHREKHQsZSl7cmV0dXJuIFh2KHQsZS52LGUudyxlLm5hbWUpfXZhciBmSWUscWQsbm5lLElyLHBUPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtmSWU9IlwwIixxZD0iXDAiLG5uZT0iASIsSXI9Y2xhc3N7c3RhdGlje28odGhpcywiR3JhcGgiKX1jb25zdHJ1Y3RvcihlPXt9KXt0aGlzLl9pc0RpcmVjdGVkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkaXJlY3RlZCIpP2UuZGlyZWN0ZWQ6ITAsdGhpcy5faXNNdWx0aWdyYXBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJtdWx0aWdyYXBoIik/ZS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImNvbXBvdW5kIik/ZS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPUxzKHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPUxzKHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlbltxZF09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319aXNEaXJlY3RlZCgpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfWlzTXVsdGlncmFwaCgpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9aXNDb21wb3VuZCgpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfXNldEdyYXBoKGUpe3JldHVybiB0aGlzLl9sYWJlbD1lLHRoaXN9Z3JhcGgoKXtyZXR1cm4gdGhpcy5fbGFiZWx9c2V0RGVmYXVsdE5vZGVMYWJlbChlKXtyZXR1cm4gX2koZSl8fChlPUxzKGUpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ZSx0aGlzfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9bm9kZXMoKXtyZXR1cm4gR3IodGhpcy5fbm9kZXMpfXNvdXJjZXMoKXt2YXIgZT10aGlzO3JldHVybiBZcih0aGlzLm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIGNyKGUuX2luW3JdKX0pfXNpbmtzKCl7dmFyIGU9dGhpcztyZXR1cm4gWXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBjcihlLl9vdXRbcl0pfSl9c2V0Tm9kZXMoZSxyKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiBTZShlLGZ1bmN0aW9uKGEpe24ubGVuZ3RoPjE/aS5zZXROb2RlKGEscik6aS5zZXROb2RlKGEpfSksdGhpc31zZXROb2RlKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9ub2RlcyxlKT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbZV09ciksdGhpcyk6KHRoaXMuX25vZGVzW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9yOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbihlKSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W2VdPXFkLHRoaXMuX2NoaWxkcmVuW2VdPXt9LHRoaXMuX2NoaWxkcmVuW3FkXVtlXT0hMCksdGhpcy5faW5bZV09e30sdGhpcy5fcHJlZHNbZV09e30sdGhpcy5fb3V0W2VdPXt9LHRoaXMuX3N1Y3NbZV09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9bm9kZShlKXtyZXR1cm4gdGhpcy5fbm9kZXNbZV19aGFzTm9kZShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpfXJlbW92ZU5vZGUoZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpKXt2YXIgcj1vKG49PnRoaXMucmVtb3ZlRWRnZSh0aGlzLl9lZGdlT2Jqc1tuXSksInJlbW92ZUVkZ2UiKTtkZWxldGUgdGhpcy5fbm9kZXNbZV0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbZV0sU2UodGhpcy5jaGlsZHJlbihlKSxuPT57dGhpcy5zZXRQYXJlbnQobil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bZV0pLFNlKEdyKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLFNlKEdyKHRoaXMuX291dFtlXSksciksZGVsZXRlIHRoaXMuX291dFtlXSxkZWxldGUgdGhpcy5fc3Vjc1tlXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoZSxyKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoZHIocikpcj1xZDtlbHNle3IrPSIiO2Zvcih2YXIgbj1yOyFkcihuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3IrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUocil9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09cix0aGlzLl9jaGlsZHJlbltyXVtlXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2VdXVtlXX1wYXJlbnQoZSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHI9dGhpcy5fcGFyZW50W2VdO2lmKHIhPT1xZClyZXR1cm4gcn19Y2hpbGRyZW4oZSl7aWYoZHIoZSkmJihlPXFkKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcj10aGlzLl9jaGlsZHJlbltlXTtpZihyKXJldHVybiBHcihyKX1lbHNle2lmKGU9PT1xZClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShlKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGUpe3ZhciByPXRoaXMuX3ByZWRzW2VdO2lmKHIpcmV0dXJuIEdyKHIpfXN1Y2Nlc3NvcnMoZSl7dmFyIHI9dGhpcy5fc3Vjc1tlXTtpZihyKXJldHVybiBHcihyKX1uZWlnaGJvcnMoZSl7dmFyIHI9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYocilyZXR1cm4gZUQocix0aGlzLnN1Y2Nlc3NvcnMoZSkpfWlzTGVhZihlKXt2YXIgcjtyZXR1cm4gdGhpcy5pc0RpcmVjdGVkKCk/cj10aGlzLnN1Y2Nlc3NvcnMoZSk6cj10aGlzLm5laWdoYm9ycyhlKSxyLmxlbmd0aD09PTB9ZmlsdGVyTm9kZXMoZSl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO3Iuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO1NlKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHMsbCl7ZShsKSYmci5zZXROb2RlKGwscyl9KSxTZSh0aGlzLl9lZGdlT2JqcyxmdW5jdGlvbihzKXtyLmhhc05vZGUocy52KSYmci5oYXNOb2RlKHMudykmJnIuc2V0RWRnZShzLG4uZWRnZShzKSl9KTt2YXIgaT17fTtmdW5jdGlvbiBhKHMpe3ZhciBsPW4ucGFyZW50KHMpO3JldHVybiBsPT09dm9pZCAwfHxyLmhhc05vZGUobCk/KGlbc109bCxsKTpsIGluIGk/aVtsXTphKGwpfXJldHVybiBvKGEsImZpbmRQYXJlbnQiKSx0aGlzLl9pc0NvbXBvdW5kJiZTZShyLm5vZGVzKCksZnVuY3Rpb24ocyl7ci5zZXRQYXJlbnQocyxhKHMpKX0pLHJ9c2V0RGVmYXVsdEVkZ2VMYWJlbChlKXtyZXR1cm4gX2koZSl8fChlPUxzKGUpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ZSx0aGlzfWVkZ2VDb3VudCgpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9ZWRnZXMoKXtyZXR1cm4gYnIodGhpcy5fZWRnZU9ianMpfXNldFBhdGgoZSxyKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBxcihlLGZ1bmN0aW9uKGEscyl7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKGEscyxyKTpuLnNldEVkZ2UoYSxzKSxzfSksdGhpc31zZXRFZGdlKCl7dmFyIGUscixuLGksYT0hMSxzPWFyZ3VtZW50c1swXTt0eXBlb2Ygcz09Im9iamVjdCImJnMhPT1udWxsJiYidiJpbiBzPyhlPXMudixyPXMudyxuPXMubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKGk9YXJndW1lbnRzWzFdLGE9ITApKTooZT1zLHI9YXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKGk9YXJndW1lbnRzWzJdLGE9ITApKSxlPSIiK2Uscj0iIityLGRyKG4pfHwobj0iIituKTt2YXIgbD1Ydih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZWRnZUxhYmVscyxsKSlyZXR1cm4gYSYmKHRoaXMuX2VkZ2VMYWJlbHNbbF09aSksdGhpcztpZighZHIobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZShyKSx0aGlzLl9lZGdlTGFiZWxzW2xdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSxyLG4pO3ZhciB1PWRJZSh0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gZT11LnYscj11LncsT2JqZWN0LmZyZWV6ZSh1KSx0aGlzLl9lZGdlT2Jqc1tsXT11LGluZSh0aGlzLl9wcmVkc1tyXSxlKSxpbmUodGhpcy5fc3Vjc1tlXSxyKSx0aGlzLl9pbltyXVtsXT11LHRoaXMuX291dFtlXVtsXT11LHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/dEQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlh2KHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW2ldfWhhc0VkZ2UoZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg9PT0xP3REKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpYdih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2VkZ2VMYWJlbHMsaSl9cmVtb3ZlRWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/dEQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlh2KHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pLGE9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIGEmJihlPWEudixyPWEudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sYW5lKHRoaXMuX3ByZWRzW3JdLGUpLGFuZSh0aGlzLl9zdWNzW2VdLHIpLGRlbGV0ZSB0aGlzLl9pbltyXVtpXSxkZWxldGUgdGhpcy5fb3V0W2VdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfWluRWRnZXMoZSxyKXt2YXIgbj10aGlzLl9pbltlXTtpZihuKXt2YXIgaT1icihuKTtyZXR1cm4gcj9ZcihpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnY9PT1yfSk6aX19b3V0RWRnZXMoZSxyKXt2YXIgbj10aGlzLl9vdXRbZV07aWYobil7dmFyIGk9YnIobik7cmV0dXJuIHI/WXIoaSxmdW5jdGlvbihhKXtyZXR1cm4gYS53PT09cn0pOml9fW5vZGVFZGdlcyhlLHIpe3ZhciBuPXRoaXMuaW5FZGdlcyhlLHIpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXMoZSxyKSl9fTtJci5wcm90b3R5cGUuX25vZGVDb3VudD0wO0lyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7byhpbmUsImluY3JlbWVudE9ySW5pdEVudHJ5Iik7byhhbmUsImRlY3JlbWVudE9yUmVtb3ZlRW50cnkiKTtvKFh2LCJlZGdlQXJnc1RvSWQiKTtvKGRJZSwiZWRnZUFyZ3NUb09iaiIpO28odEQsImVkZ2VPYmpUb0lkIil9KTt2YXIgR3M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwVCgpfSk7ZnVuY3Rpb24gc25lKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gcEllKHQsZSl7aWYodCE9PSJfbmV4dCImJnQhPT0iX3ByZXYiKXJldHVybiBlfXZhciBtVCxvbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttVD1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaXN0Iil9Y29uc3RydWN0b3IoKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWRlcXVldWUoKXt2YXIgZT10aGlzLl9zZW50aW5lbCxyPWUuX3ByZXY7aWYociE9PWUpcmV0dXJuIHNuZShyKSxyfWVucXVldWUoZSl7dmFyIHI9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmc25lKGUpLGUuX25leHQ9ci5fbmV4dCxyLl9uZXh0Ll9wcmV2PWUsci5fbmV4dD1lLGUuX3ByZXY9cn10b1N0cmluZygpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX3NlbnRpbmVsLG49ci5fcHJldjtuIT09cjspZS5wdXNoKEpTT04uc3RyaW5naWZ5KG4scEllKSksbj1uLl9wcmV2O3JldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifX07byhzbmUsInVubGluayIpO28ocEllLCJmaWx0ZXJPdXRMaW5rcyIpfSk7ZnVuY3Rpb24gbG5lKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgcj15SWUodCxlfHxtSWUpLG49Z0llKHIuZ3JhcGgsci5idWNrZXRzLHIuemVyb0lkeCk7cmV0dXJuIFdyKFFlKG4sZnVuY3Rpb24oaSl7cmV0dXJuIHQub3V0RWRnZXMoaS52LGkudyl9KSl9ZnVuY3Rpb24gZ0llKHQsZSxyKXtmb3IodmFyIG49W10saT1lW2UubGVuZ3RoLTFdLGE9ZVswXSxzO3Qubm9kZUNvdW50KCk7KXtmb3IoO3M9YS5kZXF1ZXVlKCk7KXJEKHQsZSxyLHMpO2Zvcig7cz1pLmRlcXVldWUoKTspckQodCxlLHIscyk7aWYodC5ub2RlQ291bnQoKSl7Zm9yKHZhciBsPWUubGVuZ3RoLTI7bD4wOy0tbClpZihzPWVbbF0uZGVxdWV1ZSgpLHMpe249bi5jb25jYXQockQodCxlLHIscywhMCkpO2JyZWFrfX19cmV0dXJuIG59ZnVuY3Rpb24gckQodCxlLHIsbixpKXt2YXIgYT1pP1tdOnZvaWQgMDtyZXR1cm4gU2UodC5pbkVkZ2VzKG4udiksZnVuY3Rpb24ocyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7aSYmYS5wdXNoKHt2OnMudix3OnMud30pLHUub3V0LT1sLG5EKGUscix1KX0pLFNlKHQub3V0RWRnZXMobi52KSxmdW5jdGlvbihzKXt2YXIgbD10LmVkZ2UocyksdT1zLncsaD10Lm5vZGUodSk7aC5pbi09bCxuRChlLHIsaCl9KSx0LnJlbW92ZU5vZGUobi52KSxhfWZ1bmN0aW9uIHlJZSh0LGUpe3ZhciByPW5ldyBJcixuPTAsaT0wO1NlKHQubm9kZXMoKSxmdW5jdGlvbihsKXtyLnNldE5vZGUobCx7djpsLGluOjAsb3V0OjB9KX0pLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihsKXt2YXIgdT1yLmVkZ2UobC52LGwudyl8fDAsaD1lKGwpLGY9dStoO3Iuc2V0RWRnZShsLnYsbC53LGYpLGk9TWF0aC5tYXgoaSxyLm5vZGUobC52KS5vdXQrPWgpLG49TWF0aC5tYXgobixyLm5vZGUobC53KS5pbis9aCl9KTt2YXIgYT1qbyhpK24rMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtVH0pLHM9bisxO3JldHVybiBTZShyLm5vZGVzKCksZnVuY3Rpb24obCl7bkQoYSxzLHIubm9kZShsKSl9KSx7Z3JhcGg6cixidWNrZXRzOmEsemVyb0lkeDpzfX1mdW5jdGlvbiBuRCh0LGUscil7ci5vdXQ/ci5pbj90W3Iub3V0LXIuaW4rZV0uZW5xdWV1ZShyKTp0W3QubGVuZ3RoLTFdLmVucXVldWUocik6dFswXS5lbnF1ZXVlKHIpfXZhciBtSWUsY25lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtHcygpO29uZSgpO21JZT1McygxKTtvKGxuZSwiZ3JlZWR5RkFTIik7byhnSWUsImRvR3JlZWR5RkFTIik7byhyRCwicmVtb3ZlTm9kZSIpO28oeUllLCJidWlsZFN0YXRlIik7byhuRCwiYXNzaWduQnVja2V0Iil9KTtmdW5jdGlvbiB1bmUodCl7dmFyIGU9dC5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP2xuZSh0LHIodCkpOnZJZSh0KTtTZShlLGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKTt0LnJlbW92ZUVkZ2UobiksaS5mb3J3YXJkTmFtZT1uLm5hbWUsaS5yZXZlcnNlZD0hMCx0LnNldEVkZ2Uobi53LG4udixpLFlkKCJyZXYiKSl9KTtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5lZGdlKGkpLndlaWdodH19byhyLCJ3ZWlnaHRGbiIpfWZ1bmN0aW9uIHZJZSh0KXt2YXIgZT1bXSxyPXt9LG49e307ZnVuY3Rpb24gaShhKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKXx8KG5bYV09ITAsclthXT0hMCxTZSh0Lm91dEVkZ2VzKGEpLGZ1bmN0aW9uKHMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMudyk/ZS5wdXNoKHMpOmkocy53KX0pLGRlbGV0ZSByW2FdKX1yZXR1cm4gbyhpLCJkZnMiKSxTZSh0Lm5vZGVzKCksaSksZX1mdW5jdGlvbiBobmUodCl7U2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihyLnJldmVyc2VkKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSx0LnNldEVkZ2UoZS53LGUudixyLG4pfX0pfXZhciBpRD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7Y25lKCk7byh1bmUsInJ1biIpO28odkllLCJkZnNGQVMiKTtvKGhuZSwidW5kbyIpfSk7ZnVuY3Rpb24gSWModCxlLHIsbil7dmFyIGk7ZG8gaT1ZZChuKTt3aGlsZSh0Lmhhc05vZGUoaSkpO3JldHVybiByLmR1bW15PWUsdC5zZXROb2RlKGksciksaX1mdW5jdGlvbiBkbmUodCl7dmFyIGU9bmV3IElyKCkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gU2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe2Uuc2V0Tm9kZShyLHQubm9kZShyKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIudixyLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LGk9dC5lZGdlKHIpO2Uuc2V0RWRnZShyLnYsci53LHt3ZWlnaHQ6bi53ZWlnaHQraS53ZWlnaHQsbWlubGVuOk1hdGgubWF4KG4ubWlubGVuLGkubWlubGVuKX0pfSksZX1mdW5jdGlvbiBnVCh0KXt2YXIgZT1uZXcgSXIoe211bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIFNlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt0LmNoaWxkcmVuKHIpLmxlbmd0aHx8ZS5zZXROb2RlKHIsdC5ub2RlKHIpKX0pLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXtlLnNldEVkZ2Uocix0LmVkZ2UocikpfSksZX1mdW5jdGlvbiBhRCh0LGUpe3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yO2lmKCFpJiYhYSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciB1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1sKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1zKmEvaSkse3g6cit1LHk6bitofX1mdW5jdGlvbiBzZih0KXt2YXIgZT1RZShqbyhvRCh0KSsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJuIFNlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUociksaT1uLnJhbms7ZHIoaSl8fChlW2ldW24ub3JkZXJdPXIpfSksZX1mdW5jdGlvbiBwbmUodCl7dmFyIGU9QmwoUWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiB0Lm5vZGUocikucmFua30pKTtTZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49dC5ub2RlKHIpO050KG4sInJhbmsiKSYmKG4ucmFuay09ZSl9KX1mdW5jdGlvbiBtbmUodCl7dmFyIGU9QmwoUWUodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3JldHVybiB0Lm5vZGUoYSkucmFua30pKSxyPVtdO1NlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSkucmFuay1lO3Jbc118fChyW3NdPVtdKSxyW3NdLnB1c2goYSl9KTt2YXIgbj0wLGk9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO1NlKHIsZnVuY3Rpb24oYSxzKXtkcihhKSYmcyVpIT09MD8tLW46biYmU2UoYSxmdW5jdGlvbihsKXt0Lm5vZGUobCkucmFuays9bn0pfSl9ZnVuY3Rpb24gc0QodCxlLHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSxJYyh0LCJib3JkZXIiLGksZSl9ZnVuY3Rpb24gb0QodCl7cmV0dXJuIEZzKFFlKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSkucmFuaztpZighZHIocikpcmV0dXJuIHJ9KSl9ZnVuY3Rpb24gZ25lKHQsZSl7dmFyIHI9e2xoczpbXSxyaHM6W119O3JldHVybiBTZSh0LGZ1bmN0aW9uKG4pe2Uobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiB5bmUodCxlKXt2YXIgcj1lVCgpO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7Y29uc29sZS5sb2codCsiIHRpbWU6ICIrKGVUKCktcikrIm1zIil9fWZ1bmN0aW9uIHZuZSh0LGUpe3JldHVybiBlKCl9dmFyIE9jPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtHcygpO28oSWMsImFkZER1bW15Tm9kZSIpO28oZG5lLCJzaW1wbGlmeSIpO28oZ1QsImFzTm9uQ29tcG91bmRHcmFwaCIpO28oYUQsImludGVyc2VjdFJlY3QiKTtvKHNmLCJidWlsZExheWVyTWF0cml4Iik7byhwbmUsIm5vcm1hbGl6ZVJhbmtzIik7byhtbmUsInJlbW92ZUVtcHR5UmFua3MiKTtvKHNELCJhZGRCb3JkZXJOb2RlIik7byhvRCwibWF4UmFuayIpO28oZ25lLCJwYXJ0aXRpb24iKTtvKHluZSwidGltZSIpO28odm5lLCJub3RpbWUiKX0pO2Z1bmN0aW9uIGJuZSh0KXtmdW5jdGlvbiBlKHIpe3ZhciBuPXQuY2hpbGRyZW4ociksaT10Lm5vZGUocik7aWYobi5sZW5ndGgmJlNlKG4sZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBhPWkubWluUmFuayxzPWkubWF4UmFuaysxO2E8czsrK2EpeG5lKHQsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxhKSx4bmUodCwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxhKX19byhlLCJkZnMiKSxTZSh0LmNoaWxkcmVuKCksZSl9ZnVuY3Rpb24geG5lKHQsZSxyLG4saSxhKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOmEsYm9yZGVyVHlwZTplfSxsPWlbZV1bYS0xXSx1PUljKHQsImJvcmRlciIscyxyKTtpW2VdW2FdPXUsdC5zZXRQYXJlbnQodSxuKSxsJiZ0LnNldEVkZ2UobCx1LHt3ZWlnaHQ6MX0pfXZhciB3bmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO09jKCk7byhibmUsImFkZEJvcmRlclNlZ21lbnRzIik7byh4bmUsImFkZEJvcmRlck5vZGUiKX0pO2Z1bmN0aW9uIGtuZSh0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhlPT09ImxyInx8ZT09PSJybCIpJiZTbmUodCl9ZnVuY3Rpb24gRW5lKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGU9PT0iYnQifHxlPT09InJsIikmJnhJZSh0KSwoZT09PSJsciJ8fGU9PT0icmwiKSYmKGJJZSh0KSxTbmUodCkpfWZ1bmN0aW9uIFNuZSh0KXtTZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7VG5lKHQubm9kZShlKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7VG5lKHQuZWRnZShlKSl9KX1mdW5jdGlvbiBUbmUodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24geEllKHQpe1NlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtsRCh0Lm5vZGUoZSkpfSksU2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtTZShyLnBvaW50cyxsRCksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsInkiKSYmbEQocil9KX1mdW5jdGlvbiBsRCh0KXt0Lnk9LXQueX1mdW5jdGlvbiBiSWUodCl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe2NEKHQubm9kZShlKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO1NlKHIucG9pbnRzLGNEKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpJiZjRChyKX0pfWZ1bmN0aW9uIGNEKHQpe3ZhciBlPXQueDt0Lng9dC55LHQueT1lfXZhciBDbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oa25lLCJhZGp1c3QiKTtvKEVuZSwidW5kbyIpO28oU25lLCJzd2FwV2lkdGhIZWlnaHQiKTtvKFRuZSwic3dhcFdpZHRoSGVpZ2h0T25lIik7byh4SWUsInJldmVyc2VZIik7byhsRCwicmV2ZXJzZVlPbmUiKTtvKGJJZSwic3dhcFhZIik7byhjRCwic3dhcFhZT25lIil9KTtmdW5jdGlvbiBBbmUodCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtUSWUodCxlKX0pfWZ1bmN0aW9uIFRJZSh0LGUpe3ZhciByPWUudixuPXQubm9kZShyKS5yYW5rLGk9ZS53LGE9dC5ub2RlKGkpLnJhbmsscz1lLm5hbWUsbD10LmVkZ2UoZSksdT1sLmxhYmVsUmFuaztpZihhIT09bisxKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIGg9dm9pZCAwLGYsZDtmb3IoZD0wLCsrbjtuPGE7KytkLCsrbilsLnBvaW50cz1bXSxoPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpsLGVkZ2VPYmo6ZSxyYW5rOm59LGY9SWModCwiZWRnZSIsaCwiX2QiKSxuPT09dSYmKGgud2lkdGg9bC53aWR0aCxoLmhlaWdodD1sLmhlaWdodCxoLmR1bW15PSJlZGdlLWxhYmVsIixoLmxhYmVscG9zPWwubGFiZWxwb3MpLHQuc2V0RWRnZShyLGYse3dlaWdodDpsLndlaWdodH0scyksZD09PTAmJnQuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGYpLHI9Zjt0LnNldEVkZ2UocixpLHt3ZWlnaHQ6bC53ZWlnaHR9LHMpfX1mdW5jdGlvbiBfbmUodCl7U2UodC5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKSxuPXIuZWRnZUxhYmVsLGk7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosbik7ci5kdW1teTspaT10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLG4ucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksci5kdW1teT09PSJlZGdlLWxhYmVsIiYmKG4ueD1yLngsbi55PXIueSxuLndpZHRoPXIud2lkdGgsbi5oZWlnaHQ9ci5oZWlnaHQpLGU9aSxyPXQubm9kZShlKX0pfXZhciB1RD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7T2MoKTtvKEFuZSwicnVuIik7byhUSWUsIm5vcm1hbGl6ZUVkZ2UiKTtvKF9uZSwidW5kbyIpfSk7ZnVuY3Rpb24ganYodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT10Lm5vZGUobik7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikpcmV0dXJuIGkucmFuaztlW25dPSEwO3ZhciBhPUJsKFFlKHQub3V0RWRnZXMobiksZnVuY3Rpb24ocyl7cmV0dXJuIHIocy53KS10LmVkZ2UocykubWlubGVufSkpO3JldHVybihhPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHxhPT09dm9pZCAwfHxhPT09bnVsbCkmJihhPTApLGkucmFuaz1hfW8ociwiZGZzIiksU2UodC5zb3VyY2VzKCkscil9ZnVuY3Rpb24gWGQodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59dmFyIHlUPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKGp2LCJsb25nZXN0UGF0aCIpO28oWGQsInNsYWNrIil9KTtmdW5jdGlvbiB2VCh0KXt2YXIgZT1uZXcgSXIoe2RpcmVjdGVkOiExfSkscj10Lm5vZGVzKClbMF0sbj10Lm5vZGVDb3VudCgpO2Uuc2V0Tm9kZShyLHt9KTtmb3IodmFyIGksYTtrSWUoZSx0KTxuOylpPUVJZShlLHQpLGE9ZS5oYXNOb2RlKGkudik/WGQodCxpKTotWGQodCxpKSxTSWUoZSx0LGEpO3JldHVybiBlfWZ1bmN0aW9uIGtJZSh0LGUpe2Z1bmN0aW9uIHIobil7U2UoZS5ub2RlRWRnZXMobiksZnVuY3Rpb24oaSl7dmFyIGE9aS52LHM9bj09PWE/aS53OmE7IXQuaGFzTm9kZShzKSYmIVhkKGUsaSkmJih0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKG4scyx7fSkscihzKSl9KX1yZXR1cm4gbyhyLCJkZnMiKSxTZSh0Lm5vZGVzKCksciksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBFSWUodCxlKXtyZXR1cm4gSGQoZS5lZGdlcygpLGZ1bmN0aW9uKHIpe2lmKHQuaGFzTm9kZShyLnYpIT09dC5oYXNOb2RlKHIudykpcmV0dXJuIFhkKGUscil9KX1mdW5jdGlvbiBTSWUodCxlLHIpe1NlKHQubm9kZXMoKSxmdW5jdGlvbihuKXtlLm5vZGUobikucmFuays9cn0pfXZhciBoRD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7R3MoKTt5VCgpO28odlQsImZlYXNpYmxlVHJlZSIpO28oa0llLCJ0aWdodFRyZWUiKTtvKEVJZSwiZmluZE1pblNsYWNrRWRnZSIpO28oU0llLCJzaGlmdFJhbmtzIil9KTt2YXIgRG5lPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgZkQ9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBkWXQsZEQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO2ZEKCk7ZFl0PUxzKDEpfSk7dmFyIE5uZT1NKCgpPT57InVzZSBzdHJpY3QiO2REKCl9KTt2YXIgcEQ9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBSbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwRCgpfSk7dmFyIEVZdCxNbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO0VZdD1McygxKX0pO2Z1bmN0aW9uIG1EKHQpe3ZhciBlPXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKGEpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpKXRocm93IG5ldyBLdjtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKXx8KHJbYV09ITAsZVthXT0hMCxTZSh0LnByZWRlY2Vzc29ycyhhKSxpKSxkZWxldGUgclthXSxuLnB1c2goYSkpfWlmKG8oaSwidmlzaXQiKSxTZSh0LnNpbmtzKCksaSksSkwoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBLdjtyZXR1cm4gbn1mdW5jdGlvbiBLdigpe312YXIgZ0Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO21ELkN5Y2xlRXhjZXB0aW9uPUt2O28obUQsInRvcHNvcnQiKTtvKEt2LCJDeWNsZUV4Y2VwdGlvbiIpO0t2LnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgSW5lPU0oKCk9PnsidXNlIHN0cmljdCI7Z0QoKX0pO2Z1bmN0aW9uIHhUKHQsZSxyKXtEdChlKXx8KGU9W2VdKTt2YXIgbj0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLGk9W10sYT17fTtyZXR1cm4gU2UoZSxmdW5jdGlvbihzKXtpZighdC5oYXNOb2RlKHMpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK3MpO09uZSh0LHMscj09PSJwb3N0IixhLG4saSl9KSxpfWZ1bmN0aW9uIE9uZSh0LGUscixuLGksYSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSl8fChuW2VdPSEwLHJ8fGEucHVzaChlKSxTZShpKGUpLGZ1bmN0aW9uKHMpe09uZSh0LHMscixuLGksYSl9KSxyJiZhLnB1c2goZSkpfXZhciB5RD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byh4VCwiZGZzIik7byhPbmUsImRvRGZzIil9KTtmdW5jdGlvbiB2RCh0LGUpe3JldHVybiB4VCh0LGUsInBvc3QiKX12YXIgUG5lPU0oKCk9PnsidXNlIHN0cmljdCI7eUQoKTtvKHZELCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIHhEKHQsZSl7cmV0dXJuIHhUKHQsZSwicHJlIil9dmFyIEJuZT1NKCgpPT57InVzZSBzdHJpY3QiO3lEKCk7byh4RCwicHJlb3JkZXIiKX0pO3ZhciBGbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmRCgpO3BUKCl9KTt2YXIgem5lPU0oKCk9PnsidXNlIHN0cmljdCI7RG5lKCk7ZEQoKTtObmUoKTtSbmUoKTtNbmUoKTtJbmUoKTtQbmUoKTtCbmUoKTtGbmUoKTtwRCgpO2dEKCl9KTtmdW5jdGlvbiBsZih0KXt0PWRuZSh0KSxqdih0KTt2YXIgZT12VCh0KTt3RChlKSxiRChlLHQpO2Zvcih2YXIgcixuO3I9VW5lKGUpOyluPUhuZShlLHQsciksV25lKGUsdCxyLG4pfWZ1bmN0aW9uIGJEKHQsZSl7dmFyIHI9dkQodCx0Lm5vZGVzKCkpO3I9ci5zbGljZSgwLHIubGVuZ3RoLTEpLFNlKHIsZnVuY3Rpb24obil7REllKHQsZSxuKX0pfWZ1bmN0aW9uIERJZSh0LGUscil7dmFyIG49dC5ub2RlKHIpLGk9bi5wYXJlbnQ7dC5lZGdlKHIsaSkuY3V0dmFsdWU9JG5lKHQsZSxyKX1mdW5jdGlvbiAkbmUodCxlLHIpe3ZhciBuPXQubm9kZShyKSxpPW4ucGFyZW50LGE9ITAscz1lLmVkZ2UocixpKSxsPTA7cmV0dXJuIHN8fChhPSExLHM9ZS5lZGdlKGkscikpLGw9cy53ZWlnaHQsU2UoZS5ub2RlRWRnZXMociksZnVuY3Rpb24odSl7dmFyIGg9dS52PT09cixmPWg/dS53OnUudjtpZihmIT09aSl7dmFyIGQ9aD09PWEscD1lLmVkZ2UodSkud2VpZ2h0O2lmKGwrPWQ/cDotcCxSSWUodCxyLGYpKXt2YXIgbT10LmVkZ2UocixmKS5jdXR2YWx1ZTtsKz1kPy1tOm19fX0pLGx9ZnVuY3Rpb24gd0QodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksVm5lKHQse30sMSxlKX1mdW5jdGlvbiBWbmUodCxlLHIsbixpKXt2YXIgYT1yLHM9dC5ub2RlKG4pO3JldHVybiBlW25dPSEwLFNlKHQubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKGwpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpfHwocj1WbmUodCxlLHIsbCxuKSl9KSxzLmxvdz1hLHMubGltPXIrKyxpP3MucGFyZW50PWk6ZGVsZXRlIHMucGFyZW50LHJ9ZnVuY3Rpb24gVW5lKHQpe3JldHVybiBhcyh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gSG5lKHQsZSxyKXt2YXIgbj1yLnYsaT1yLnc7ZS5oYXNFZGdlKG4saSl8fChuPXIudyxpPXIudik7dmFyIGE9dC5ub2RlKG4pLHM9dC5ub2RlKGkpLGw9YSx1PSExO2EubGltPnMubGltJiYobD1zLHU9ITApO3ZhciBoPVlyKGUuZWRnZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gdT09PUduZSh0LHQubm9kZShmLnYpLGwpJiZ1IT09R25lKHQsdC5ub2RlKGYudyksbCl9KTtyZXR1cm4gSGQoaCxmdW5jdGlvbihmKXtyZXR1cm4gWGQoZSxmKX0pfWZ1bmN0aW9uIFduZSh0LGUscixuKXt2YXIgaT1yLnYsYT1yLnc7dC5yZW1vdmVFZGdlKGksYSksdC5zZXRFZGdlKG4udixuLncse30pLHdEKHQpLGJEKHQsZSksTkllKHQsZSl9ZnVuY3Rpb24gTkllKHQsZSl7dmFyIHI9YXModC5ub2RlcygpLGZ1bmN0aW9uKGkpe3JldHVybiFlLm5vZGUoaSkucGFyZW50fSksbj14RCh0LHIpO249bi5zbGljZSgxKSxTZShuLGZ1bmN0aW9uKGkpe3ZhciBhPXQubm9kZShpKS5wYXJlbnQscz1lLmVkZ2UoaSxhKSxsPSExO3N8fChzPWUuZWRnZShhLGkpLGw9ITApLGUubm9kZShpKS5yYW5rPWUubm9kZShhKS5yYW5rKyhsP3MubWlubGVuOi1zLm1pbmxlbil9KX1mdW5jdGlvbiBSSWUodCxlLHIpe3JldHVybiB0Lmhhc0VkZ2UoZSxyKX1mdW5jdGlvbiBHbmUodCxlLHIpe3JldHVybiByLmxvdzw9ZS5saW0mJmUubGltPD1yLmxpbX12YXIgWW5lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTt6bmUoKTtPYygpO2hEKCk7eVQoKTtsZi5pbml0TG93TGltVmFsdWVzPXdEO2xmLmluaXRDdXRWYWx1ZXM9YkQ7bGYuY2FsY0N1dFZhbHVlPSRuZTtsZi5sZWF2ZUVkZ2U9VW5lO2xmLmVudGVyRWRnZT1IbmU7bGYuZXhjaGFuZ2VFZGdlcz1XbmU7byhsZiwibmV0d29ya1NpbXBsZXgiKTtvKGJELCJpbml0Q3V0VmFsdWVzIik7byhESWUsImFzc2lnbkN1dFZhbHVlIik7bygkbmUsImNhbGNDdXRWYWx1ZSIpO28od0QsImluaXRMb3dMaW1WYWx1ZXMiKTtvKFZuZSwiZGZzQXNzaWduTG93TGltIik7byhVbmUsImxlYXZlRWRnZSIpO28oSG5lLCJlbnRlckVkZ2UiKTtvKFduZSwiZXhjaGFuZ2VFZGdlcyIpO28oTkllLCJ1cGRhdGVSYW5rcyIpO28oUkllLCJpc1RyZWVFZGdlIik7byhHbmUsImlzRGVzY2VuZGFudCIpfSk7ZnVuY3Rpb24gVEQodCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpxbmUodCk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpJSWUodCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOk1JZSh0KTticmVhaztkZWZhdWx0OnFuZSh0KX19ZnVuY3Rpb24gSUllKHQpe2p2KHQpLHZUKHQpfWZ1bmN0aW9uIHFuZSh0KXtsZih0KX12YXIgTUllLGtEPU0oKCk9PnsidXNlIHN0cmljdCI7aEQoKTtZbmUoKTt5VCgpO28oVEQsInJhbmsiKTtNSWU9anY7byhJSWUsInRpZ2h0VHJlZVJhbmtlciIpO28ocW5lLCJuZXR3b3JrU2ltcGxleFJhbmtlciIpfSk7ZnVuY3Rpb24gWG5lKHQpe3ZhciBlPUljKHQsInJvb3QiLHt9LCJfcm9vdCIpLHI9T0llKHQpLG49RnMoYnIocikpLTEsaT0yKm4rMTt0LmdyYXBoKCkubmVzdGluZ1Jvb3Q9ZSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocyl7dC5lZGdlKHMpLm1pbmxlbio9aX0pO3ZhciBhPVBJZSh0KSsxO1NlKHQuY2hpbGRyZW4oKSxmdW5jdGlvbihzKXtqbmUodCxlLGksYSxuLHIscyl9KSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9aX1mdW5jdGlvbiBqbmUodCxlLHIsbixpLGEscyl7dmFyIGw9dC5jaGlsZHJlbihzKTtpZighbC5sZW5ndGgpe3MhPT1lJiZ0LnNldEVkZ2UoZSxzLHt3ZWlnaHQ6MCxtaW5sZW46cn0pO3JldHVybn12YXIgdT1zRCh0LCJfYnQiKSxoPXNEKHQsIl9iYiIpLGY9dC5ub2RlKHMpO3Quc2V0UGFyZW50KHUscyksZi5ib3JkZXJUb3A9dSx0LnNldFBhcmVudChoLHMpLGYuYm9yZGVyQm90dG9tPWgsU2UobCxmdW5jdGlvbihkKXtqbmUodCxlLHIsbixpLGEsZCk7dmFyIHA9dC5ub2RlKGQpLG09cC5ib3JkZXJUb3A/cC5ib3JkZXJUb3A6ZCxnPXAuYm9yZGVyQm90dG9tP3AuYm9yZGVyQm90dG9tOmQseT1wLmJvcmRlclRvcD9uOjIqbix2PW0hPT1nPzE6aS1hW3NdKzE7dC5zZXRFZGdlKHUsbSx7d2VpZ2h0OnksbWlubGVuOnYsbmVzdGluZ0VkZ2U6ITB9KSx0LnNldEVkZ2UoZyxoLHt3ZWlnaHQ6eSxtaW5sZW46dixuZXN0aW5nRWRnZTohMH0pfSksdC5wYXJlbnQocyl8fHQuc2V0RWRnZShlLHUse3dlaWdodDowLG1pbmxlbjppK2Fbc119KX1mdW5jdGlvbiBPSWUodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXQuY2hpbGRyZW4obik7YSYmYS5sZW5ndGgmJlNlKGEsZnVuY3Rpb24ocyl7cihzLGkrMSl9KSxlW25dPWl9cmV0dXJuIG8ociwiZGZzIiksU2UodC5jaGlsZHJlbigpLGZ1bmN0aW9uKG4pe3IobiwxKX0pLGV9ZnVuY3Rpb24gUEllKHQpe3JldHVybiBxcih0LmVkZ2VzKCksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSt0LmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBLbmUodCl7dmFyIGU9dC5ncmFwaCgpO3QucmVtb3ZlTm9kZShlLm5lc3RpbmdSb290KSxkZWxldGUgZS5uZXN0aW5nUm9vdCxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpO24ubmVzdGluZ0VkZ2UmJnQucmVtb3ZlRWRnZShyKX0pfXZhciBRbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO09jKCk7byhYbmUsInJ1biIpO28oam5lLCJkZnMiKTtvKE9JZSwidHJlZURlcHRocyIpO28oUEllLCJzdW1XZWlnaHRzIik7byhLbmUsImNsZWFudXAiKX0pO2Z1bmN0aW9uIFpuZSh0LGUscil7dmFyIG49e30saTtTZShyLGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz10LnBhcmVudChhKSxsLHU7czspe2lmKGw9dC5wYXJlbnQocyksbD8odT1uW2xdLG5bbF09cyk6KHU9aSxpPXMpLHUmJnUhPT1zKXtlLnNldEVkZ2UodSxzKTtyZXR1cm59cz1sfX0pfXZhciBKbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oWm5lLCJhZGRTdWJncmFwaENvbnN0cmFpbnRzIil9KTtmdW5jdGlvbiBlaWUodCxlLHIpe3ZhciBuPUZJZSh0KSxpPW5ldyBJcih7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpufSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihhKXtyZXR1cm4gdC5ub2RlKGEpfSk7cmV0dXJuIFNlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSksbD10LnBhcmVudChhKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoaS5zZXROb2RlKGEpLGkuc2V0UGFyZW50KGEsbHx8biksU2UodFtyXShhKSxmdW5jdGlvbih1KXt2YXIgaD11LnY9PT1hP3Uudzp1LnYsZj1pLmVkZ2UoaCxhKSxkPWRyKGYpPzA6Zi53ZWlnaHQ7aS5zZXRFZGdlKGgsYSx7d2VpZ2h0OnQuZWRnZSh1KS53ZWlnaHQrZH0pfSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIm1pblJhbmsiKSYmaS5zZXROb2RlKGEse2JvcmRlckxlZnQ6cy5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OnMuYm9yZGVyUmlnaHRbZV19KSl9KSxpfWZ1bmN0aW9uIEZJZSh0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9WWQoIl9yb290IikpOyk7cmV0dXJuIGV9dmFyIHRpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7R3MoKTtvKGVpZSwiYnVpbGRMYXllckdyYXBoIik7byhGSWUsImNyZWF0ZVJvb3ROb2RlIil9KTtmdW5jdGlvbiByaWUodCxlKXtmb3IodmFyIHI9MCxuPTE7bjxlLmxlbmd0aDsrK24pcis9ekllKHQsZVtuLTFdLGVbbl0pO3JldHVybiByfWZ1bmN0aW9uIHpJZSh0LGUscil7Zm9yKHZhciBuPWRUKHIsUWUocixmdW5jdGlvbihoLGYpe3JldHVybiBmfSkpLGk9V3IoUWUoZSxmdW5jdGlvbihoKXtyZXR1cm4gTWMoUWUodC5vdXRFZGdlcyhoKSxmdW5jdGlvbihmKXtyZXR1cm57cG9zOm5bZi53XSx3ZWlnaHQ6dC5lZGdlKGYpLndlaWdodH19KSwicG9zIil9KSksYT0xO2E8ci5sZW5ndGg7KWE8PD0xO3ZhciBzPTIqYS0xO2EtPTE7dmFyIGw9UWUobmV3IEFycmF5KHMpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSx1PTA7cmV0dXJuIFNlKGkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1oLnBvcythO2xbZl0rPWgud2VpZ2h0O2Zvcih2YXIgZD0wO2Y+MDspZiUyJiYoZCs9bFtmKzFdKSxmPWYtMT4+MSxsW2ZdKz1oLndlaWdodDt1Kz1oLndlaWdodCpkfSkpLHV9dmFyIG5pZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhyaWUsImNyb3NzQ291bnQiKTtvKHpJZSwidHdvTGF5ZXJDcm9zc0NvdW50Iil9KTtmdW5jdGlvbiBpaWUodCl7dmFyIGU9e30scj1Zcih0Lm5vZGVzKCksZnVuY3Rpb24obCl7cmV0dXJuIXQuY2hpbGRyZW4obCkubGVuZ3RofSksbj1GcyhRZShyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pKSxpPVFlKGpvKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIGEobCl7aWYoIU50KGUsbCkpe2VbbF09ITA7dmFyIHU9dC5ub2RlKGwpO2lbdS5yYW5rXS5wdXNoKGwpLFNlKHQuc3VjY2Vzc29ycyhsKSxhKX19byhhLCJkZnMiKTt2YXIgcz1NYyhyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pO3JldHVybiBTZShzLGEpLGl9dmFyIGFpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhpaWUsImluaXRPcmRlciIpfSk7ZnVuY3Rpb24gc2llKHQsZSl7cmV0dXJuIFFlKGUsZnVuY3Rpb24ocil7dmFyIG49dC5pbkVkZ2VzKHIpO2lmKG4ubGVuZ3RoKXt2YXIgaT1xcihuLGZ1bmN0aW9uKGEscyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7cmV0dXJue3N1bTphLnN1bStsLndlaWdodCp1Lm9yZGVyLHdlaWdodDphLndlaWdodCtsLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OnIsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6cn19KX12YXIgb2llPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKHNpZSwiYmFyeWNlbnRlciIpfSk7ZnVuY3Rpb24gbGllKHQsZSl7dmFyIHI9e307U2UodCxmdW5jdGlvbihpLGEpe3ZhciBzPXJbaS52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W2kudl0saTphfTtkcihpLmJhcnljZW50ZXIpfHwocy5iYXJ5Y2VudGVyPWkuYmFyeWNlbnRlcixzLndlaWdodD1pLndlaWdodCl9KSxTZShlLmVkZ2VzKCksZnVuY3Rpb24oaSl7dmFyIGE9cltpLnZdLHM9cltpLnddOyFkcihhKSYmIWRyKHMpJiYocy5pbmRlZ3JlZSsrLGEub3V0LnB1c2gocltpLnddKSl9KTt2YXIgbj1ZcihyLGZ1bmN0aW9uKGkpe3JldHVybiFpLmluZGVncmVlfSk7cmV0dXJuIEdJZShuKX1mdW5jdGlvbiBHSWUodCl7dmFyIGU9W107ZnVuY3Rpb24gcihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5tZXJnZWR8fChkcihzLmJhcnljZW50ZXIpfHxkcihhLmJhcnljZW50ZXIpfHxzLmJhcnljZW50ZXI+PWEuYmFyeWNlbnRlcikmJiRJZShhLHMpfX1vKHIsImhhbmRsZUluIik7ZnVuY3Rpb24gbihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5pbi5wdXNoKGEpLC0tcy5pbmRlZ3JlZT09PTAmJnQucHVzaChzKX19Zm9yKG8obiwiaGFuZGxlT3V0Iik7dC5sZW5ndGg7KXt2YXIgaT10LnBvcCgpO2UucHVzaChpKSxTZShpLmluLnJldmVyc2UoKSxyKGkpKSxTZShpLm91dCxuKGkpKX1yZXR1cm4gUWUoWXIoZSxmdW5jdGlvbihhKXtyZXR1cm4hYS5tZXJnZWR9KSxmdW5jdGlvbihhKXtyZXR1cm4gV2QoYSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiAkSWUodCxlKXt2YXIgcj0wLG49MDt0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS53ZWlnaHQmJihyKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsbis9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPXIvbix0LndlaWdodD1uLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH12YXIgY2llPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKGxpZSwicmVzb2x2ZUNvbmZsaWN0cyIpO28oR0llLCJkb1Jlc29sdmVDb25mbGljdHMiKTtvKCRJZSwibWVyZ2VFbnRyaWVzIil9KTtmdW5jdGlvbiBoaWUodCxlKXt2YXIgcj1nbmUodCxmdW5jdGlvbihmKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsImJhcnljZW50ZXIiKX0pLG49ci5saHMsaT1NYyhyLnJocyxmdW5jdGlvbihmKXtyZXR1cm4tZi5pfSksYT1bXSxzPTAsbD0wLHU9MDtuLnNvcnQoVkllKCEhZSkpLHU9dWllKGEsaSx1KSxTZShuLGZ1bmN0aW9uKGYpe3UrPWYudnMubGVuZ3RoLGEucHVzaChmLnZzKSxzKz1mLmJhcnljZW50ZXIqZi53ZWlnaHQsbCs9Zi53ZWlnaHQsdT11aWUoYSxpLHUpfSk7dmFyIGg9e3ZzOldyKGEpfTtyZXR1cm4gbCYmKGguYmFyeWNlbnRlcj1zL2wsaC53ZWlnaHQ9bCksaH1mdW5jdGlvbiB1aWUodCxlLHIpe2Zvcih2YXIgbjtlLmxlbmd0aCYmKG49eGEoZSkpLmk8PXI7KWUucG9wKCksdC5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBWSWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6ZS5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOnQ/ci5pLWUuaTplLmktci5pfX12YXIgZmllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtPYygpO28oaGllLCJzb3J0Iik7byh1aWUsImNvbnN1bWVVbnNvcnRhYmxlIik7byhWSWUsImNvbXBhcmVXaXRoQmlhcyIpfSk7ZnVuY3Rpb24gRUQodCxlLHIsbil7dmFyIGk9dC5jaGlsZHJlbihlKSxhPXQubm9kZShlKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsdT17fTtzJiYoaT1ZcihpLGZ1bmN0aW9uKGcpe3JldHVybiBnIT09cyYmZyE9PWx9KSk7dmFyIGg9c2llKHQsaSk7U2UoaCxmdW5jdGlvbihnKXtpZih0LmNoaWxkcmVuKGcudikubGVuZ3RoKXt2YXIgeT1FRCh0LGcudixyLG4pO3VbZy52XT15LE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LCJiYXJ5Y2VudGVyIikmJkhJZShnLHkpfX0pO3ZhciBmPWxpZShoLHIpO1VJZShmLHUpO3ZhciBkPWhpZShmLG4pO2lmKHMmJihkLnZzPVdyKFtzLGQudnMsbF0pLHQucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBwPXQubm9kZSh0LnByZWRlY2Vzc29ycyhzKVswXSksbT10Lm5vZGUodC5wcmVkZWNlc3NvcnMobClbMF0pO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLCJiYXJ5Y2VudGVyIil8fChkLmJhcnljZW50ZXI9MCxkLndlaWdodD0wKSxkLmJhcnljZW50ZXI9KGQuYmFyeWNlbnRlcipkLndlaWdodCtwLm9yZGVyK20ub3JkZXIpLyhkLndlaWdodCsyKSxkLndlaWdodCs9Mn1yZXR1cm4gZH1mdW5jdGlvbiBVSWUodCxlKXtTZSh0LGZ1bmN0aW9uKHIpe3IudnM9V3Ioci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGVbbl0/ZVtuXS52czpufSkpfSl9ZnVuY3Rpb24gSEllKHQsZSl7ZHIodC5iYXJ5Y2VudGVyKT8odC5iYXJ5Y2VudGVyPWUuYmFyeWNlbnRlcix0LndlaWdodD1lLndlaWdodCk6KHQuYmFyeWNlbnRlcj0odC5iYXJ5Y2VudGVyKnQud2VpZ2h0K2UuYmFyeWNlbnRlciplLndlaWdodCkvKHQud2VpZ2h0K2Uud2VpZ2h0KSx0LndlaWdodCs9ZS53ZWlnaHQpfXZhciBkaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO29pZSgpO2NpZSgpO2ZpZSgpO28oRUQsInNvcnRTdWJncmFwaCIpO28oVUllLCJleHBhbmRTdWJncmFwaHMiKTtvKEhJZSwibWVyZ2VCYXJ5Y2VudGVycyIpfSk7ZnVuY3Rpb24gZ2llKHQpe3ZhciBlPW9EKHQpLHI9cGllKHQsam8oMSxlKzEpLCJpbkVkZ2VzIiksbj1waWUodCxqbyhlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLGk9aWllKHQpO21pZSh0LGkpO2Zvcih2YXIgYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscyxsPTAsdT0wO3U8NDsrK2wsKyt1KXtXSWUobCUyP3I6bixsJTQ+PTIpLGk9c2YodCk7dmFyIGg9cmllKHQsaSk7aDxhJiYodT0wLHM9X0woaSksYT1oKX1taWUodCxzKX1mdW5jdGlvbiBwaWUodCxlLHIpe3JldHVybiBRZShlLGZ1bmN0aW9uKG4pe3JldHVybiBlaWUodCxuLHIpfSl9ZnVuY3Rpb24gV0llKHQsZSl7dmFyIHI9bmV3IElyO1NlKHQsZnVuY3Rpb24obil7dmFyIGk9bi5ncmFwaCgpLnJvb3QsYT1FRChuLGkscixlKTtTZShhLnZzLGZ1bmN0aW9uKHMsbCl7bi5ub2RlKHMpLm9yZGVyPWx9KSxabmUobixyLGEudnMpfSl9ZnVuY3Rpb24gbWllKHQsZSl7U2UoZSxmdW5jdGlvbihyKXtTZShyLGZ1bmN0aW9uKG4saSl7dC5ub2RlKG4pLm9yZGVyPWl9KX0pfXZhciB5aWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO0dzKCk7T2MoKTtKbmUoKTt0aWUoKTtuaWUoKTthaWUoKTtkaWUoKTtvKGdpZSwib3JkZXIiKTtvKHBpZSwiYnVpbGRMYXllckdyYXBocyIpO28oV0llLCJzd2VlcExheWVyR3JhcGhzIik7byhtaWUsImFzc2lnbk9yZGVyIil9KTtmdW5jdGlvbiB2aWUodCl7dmFyIGU9cUllKHQpO1NlKHQuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbihyKXtmb3IodmFyIG49dC5ub2RlKHIpLGk9bi5lZGdlT2JqLGE9WUllKHQsZSxpLnYsaS53KSxzPWEucGF0aCxsPWEubGNhLHU9MCxoPXNbdV0sZj0hMDtyIT09aS53Oyl7aWYobj10Lm5vZGUociksZil7Zm9yKDsoaD1zW3VdKSE9PWwmJnQubm9kZShoKS5tYXhSYW5rPG4ucmFuazspdSsrO2g9PT1sJiYoZj0hMSl9aWYoIWYpe2Zvcig7dTxzLmxlbmd0aC0xJiZ0Lm5vZGUoaD1zW3UrMV0pLm1pblJhbms8PW4ucmFuazspdSsrO2g9c1t1XX10LnNldFBhcmVudChyLGgpLHI9dC5zdWNjZXNzb3JzKHIpWzBdfX0pfWZ1bmN0aW9uIFlJZSh0LGUscixuKXt2YXIgaT1bXSxhPVtdLHM9TWF0aC5taW4oZVtyXS5sb3csZVtuXS5sb3cpLGw9TWF0aC5tYXgoZVtyXS5saW0sZVtuXS5saW0pLHUsaDt1PXI7ZG8gdT10LnBhcmVudCh1KSxpLnB1c2godSk7d2hpbGUodSYmKGVbdV0ubG93PnN8fGw+ZVt1XS5saW0pKTtmb3IoaD11LHU9bjsodT10LnBhcmVudCh1KSkhPT1oOylhLnB1c2godSk7cmV0dXJue3BhdGg6aS5jb25jYXQoYS5yZXZlcnNlKCkpLGxjYTpofX1mdW5jdGlvbiBxSWUodCl7dmFyIGU9e30scj0wO2Z1bmN0aW9uIG4oaSl7dmFyIGE9cjtTZSh0LmNoaWxkcmVuKGkpLG4pLGVbaV09e2xvdzphLGxpbTpyKyt9fXJldHVybiBvKG4sImRmcyIpLFNlKHQuY2hpbGRyZW4oKSxuKSxlfXZhciB4aWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28odmllLCJwYXJlbnREdW1teUNoYWlucyIpO28oWUllLCJmaW5kUGF0aCIpO28ocUllLCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIFhJZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz0wLGw9MCx1PWkubGVuZ3RoLGg9eGEoYSk7cmV0dXJuIFNlKGEsZnVuY3Rpb24oZixkKXt2YXIgcD1LSWUodCxmKSxtPXA/dC5ub2RlKHApLm9yZGVyOnU7KHB8fGY9PT1oKSYmKFNlKGEuc2xpY2UobCxkKzEpLGZ1bmN0aW9uKGcpe1NlKHQucHJlZGVjZXNzb3JzKGcpLGZ1bmN0aW9uKHkpe3ZhciB2PXQubm9kZSh5KSx4PXYub3JkZXI7KHg8c3x8bTx4KSYmISh2LmR1bW15JiZ0Lm5vZGUoZykuZHVtbXkpJiZiaWUocix5LGcpfSl9KSxsPWQrMSxzPW0pfSksYX1yZXR1cm4gbyhuLCJ2aXNpdExheWVyIikscXIoZSxuKSxyfWZ1bmN0aW9uIGpJZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oYSxzLGwsdSxoKXt2YXIgZjtTZShqbyhzLGwpLGZ1bmN0aW9uKGQpe2Y9YVtkXSx0Lm5vZGUoZikuZHVtbXkmJlNlKHQucHJlZGVjZXNzb3JzKGYpLGZ1bmN0aW9uKHApe3ZhciBtPXQubm9kZShwKTttLmR1bW15JiYobS5vcmRlcjx1fHxtLm9yZGVyPmgpJiZiaWUocixwLGYpfSl9KX1vKG4sInNjYW4iKTtmdW5jdGlvbiBpKGEscyl7dmFyIGw9LTEsdSxoPTA7cmV0dXJuIFNlKHMsZnVuY3Rpb24oZixkKXtpZih0Lm5vZGUoZikuZHVtbXk9PT0iYm9yZGVyIil7dmFyIHA9dC5wcmVkZWNlc3NvcnMoZik7cC5sZW5ndGgmJih1PXQubm9kZShwWzBdKS5vcmRlcixuKHMsaCxkLGwsdSksaD1kLGw9dSl9bihzLGgscy5sZW5ndGgsdSxhLmxlbmd0aCl9KSxzfXJldHVybiBvKGksInZpc2l0TGF5ZXIiKSxxcihlLGkpLHJ9ZnVuY3Rpb24gS0llKHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiBhcyh0LnByZWRlY2Vzc29ycyhlKSxmdW5jdGlvbihyKXtyZXR1cm4gdC5ub2RlKHIpLmR1bW15fSl9ZnVuY3Rpb24gYmllKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbcl09ITB9ZnVuY3Rpb24gUUllKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn1yZXR1cm4hIXRbZV0mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0W2VdLHIpfWZ1bmN0aW9uIFpJZSh0LGUscixuKXt2YXIgaT17fSxhPXt9LHM9e307cmV0dXJuIFNlKGUsZnVuY3Rpb24obCl7U2UobCxmdW5jdGlvbih1LGgpe2lbdV09dSxhW3VdPXUsc1t1XT1ofSl9KSxTZShlLGZ1bmN0aW9uKGwpe3ZhciB1PS0xO1NlKGwsZnVuY3Rpb24oaCl7dmFyIGY9bihoKTtpZihmLmxlbmd0aCl7Zj1NYyhmLGZ1bmN0aW9uKHkpe3JldHVybiBzW3ldfSk7Zm9yKHZhciBkPShmLmxlbmd0aC0xKS8yLHA9TWF0aC5mbG9vcihkKSxtPU1hdGguY2VpbChkKTtwPD1tOysrcCl7dmFyIGc9ZltwXTthW2hdPT09aCYmdTxzW2ddJiYhUUllKHIsaCxnKSYmKGFbZ109aCxhW2hdPWlbaF09aVtnXSx1PXNbZ10pfX19KX0pLHtyb290OmksYWxpZ246YX19ZnVuY3Rpb24gSkllKHQsZSxyLG4saSl7dmFyIGE9e30scz1lT2UodCxlLHIsaSksbD1pPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIHUoZCxwKXtmb3IodmFyIG09cy5ub2RlcygpLGc9bS5wb3AoKSx5PXt9O2c7KXlbZ10/ZChnKTooeVtnXT0hMCxtLnB1c2goZyksbT1tLmNvbmNhdChwKGcpKSksZz1tLnBvcCgpfW8odSwiaXRlcmF0ZSIpO2Z1bmN0aW9uIGgoZCl7YVtkXT1zLmluRWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKHAsbSl7cmV0dXJuIE1hdGgubWF4KHAsYVttLnZdK3MuZWRnZShtKSl9LDApfW8oaCwicGFzczEiKTtmdW5jdGlvbiBmKGQpe3ZhciBwPXMub3V0RWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKGcseSl7cmV0dXJuIE1hdGgubWluKGcsYVt5LnddLXMuZWRnZSh5KSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksbT10Lm5vZGUoZCk7cCE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbS5ib3JkZXJUeXBlIT09bCYmKGFbZF09TWF0aC5tYXgoYVtkXSxwKSl9cmV0dXJuIG8oZiwicGFzczIiKSx1KGgscy5wcmVkZWNlc3NvcnMuYmluZChzKSksdShmLHMuc3VjY2Vzc29ycy5iaW5kKHMpKSxTZShuLGZ1bmN0aW9uKGQpe2FbZF09YVtyW2RdXX0pLGF9ZnVuY3Rpb24gZU9lKHQsZSxyLG4pe3ZhciBpPW5ldyBJcixhPXQuZ3JhcGgoKSxzPWlPZShhLm5vZGVzZXAsYS5lZGdlc2VwLG4pO3JldHVybiBTZShlLGZ1bmN0aW9uKGwpe3ZhciB1O1NlKGwsZnVuY3Rpb24oaCl7dmFyIGY9cltoXTtpZihpLnNldE5vZGUoZiksdSl7dmFyIGQ9clt1XSxwPWkuZWRnZShkLGYpO2kuc2V0RWRnZShkLGYsTWF0aC5tYXgocyh0LGgsdSkscHx8MCkpfXU9aH0pfSksaX1mdW5jdGlvbiB0T2UodCxlKXtyZXR1cm4gSGQoYnIoZSksZnVuY3Rpb24ocil7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBVTChyLGZ1bmN0aW9uKGEscyl7dmFyIGw9YU9lKHQscykvMjtuPU1hdGgubWF4KGErbCxuKSxpPU1hdGgubWluKGEtbCxpKX0pLG4taX0pfWZ1bmN0aW9uIHJPZSh0LGUpe3ZhciByPWJyKGUpLG49QmwociksaT1GcyhyKTtTZShbInUiLCJkIl0sZnVuY3Rpb24oYSl7U2UoWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3ZhciBsPWErcyx1PXRbbF0saDtpZih1IT09ZSl7dmFyIGY9YnIodSk7aD1zPT09ImwiP24tQmwoZik6aS1GcyhmKSxoJiYodFtsXT1VZCh1LGZ1bmN0aW9uKGQpe3JldHVybiBkK2h9KSl9fSl9KX1mdW5jdGlvbiBuT2UodCxlKXtyZXR1cm4gVWQodC51bCxmdW5jdGlvbihyLG4pe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtuXTt2YXIgaT1NYyhRZSh0LG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gd2llKHQpe3ZhciBlPXNmKHQpLHI9VWgoWEllKHQsZSksakllKHQsZSkpLG49e30saTtTZShbInUiLCJkIl0sZnVuY3Rpb24ocyl7aT1zPT09InUiP2U6YnIoZSkucmV2ZXJzZSgpLFNlKFsibCIsInIiXSxmdW5jdGlvbihsKXtsPT09InIiJiYoaT1RZShpLGZ1bmN0aW9uKGQpe3JldHVybiBicihkKS5yZXZlcnNlKCl9KSk7dmFyIHU9KHM9PT0idSI/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLGg9WkllKHQsaSxyLHUpLGY9SkllKHQsaSxoLnJvb3QsaC5hbGlnbixsPT09InIiKTtsPT09InIiJiYoZj1VZChmLGZ1bmN0aW9uKGQpe3JldHVybi1kfSkpLG5bcytsXT1mfSl9KTt2YXIgYT10T2UodCxuKTtyZXR1cm4gck9lKG4sYSksbk9lKG4sdC5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiBpT2UodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIHM9bi5ub2RlKGkpLGw9bi5ub2RlKGEpLHU9MCxoO2lmKHUrPXMud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9LXMud2lkdGgvMjticmVhaztjYXNlInIiOmg9cy53aWR0aC8yO2JyZWFrfWlmKGgmJih1Kz1yP2g6LWgpLGg9MCx1Kz0ocy5kdW1teT9lOnQpLzIsdSs9KGwuZHVtbXk/ZTp0KS8yLHUrPWwud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCwibGFiZWxwb3MiKSlzd2l0Y2gobC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9bC53aWR0aC8yO2JyZWFrO2Nhc2UiciI6aD0tbC53aWR0aC8yO2JyZWFrfXJldHVybiBoJiYodSs9cj9oOi1oKSxoPTAsdX19ZnVuY3Rpb24gYU9lKHQsZSl7cmV0dXJuIHQubm9kZShlKS53aWR0aH12YXIgVGllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtHcygpO09jKCk7byhYSWUsImZpbmRUeXBlMUNvbmZsaWN0cyIpO28oakllLCJmaW5kVHlwZTJDb25mbGljdHMiKTtvKEtJZSwiZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZSIpO28oYmllLCJhZGRDb25mbGljdCIpO28oUUllLCJoYXNDb25mbGljdCIpO28oWkllLCJ2ZXJ0aWNhbEFsaWdubWVudCIpO28oSkllLCJob3Jpem9udGFsQ29tcGFjdGlvbiIpO28oZU9lLCJidWlsZEJsb2NrR3JhcGgiKTtvKHRPZSwiZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQiKTtvKHJPZSwiYWxpZ25Db29yZGluYXRlcyIpO28obk9lLCJiYWxhbmNlIik7byh3aWUsInBvc2l0aW9uWCIpO28oaU9lLCJzZXAiKTtvKGFPZSwid2lkdGgiKX0pO2Z1bmN0aW9uIGtpZSh0KXt0PWdUKHQpLHNPZSh0KSxITCh3aWUodCksZnVuY3Rpb24oZSxyKXt0Lm5vZGUocikueD1lfSl9ZnVuY3Rpb24gc09lKHQpe3ZhciBlPXNmKHQpLHI9dC5ncmFwaCgpLnJhbmtzZXAsbj0wO1NlKGUsZnVuY3Rpb24oaSl7dmFyIGE9RnMoUWUoaSxmdW5jdGlvbihzKXtyZXR1cm4gdC5ub2RlKHMpLmhlaWdodH0pKTtTZShpLGZ1bmN0aW9uKHMpe3Qubm9kZShzKS55PW4rYS8yfSksbis9YStyfSl9dmFyIEVpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7T2MoKTtUaWUoKTtvKGtpZSwicG9zaXRpb24iKTtvKHNPZSwicG9zaXRpb25ZIil9KTtmdW5jdGlvbiBHdSh0LGUpe3ZhciByPWUmJmUuZGVidWdUaW1pbmc/eW5lOnZuZTtyKCJsYXlvdXQiLCgpPT57dmFyIG49cigiICBidWlsZExheW91dEdyYXBoIiwoKT0+eU9lKHQpKTtyKCIgIHJ1bkxheW91dCIsKCk9Pm9PZShuLHIpKSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLCgpPT5sT2UodCxuKSl9KX1mdW5jdGlvbiBvT2UodCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKCk9PnZPZSh0KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKCk9PkFPZSh0KSksZSgiICAgIGFjeWNsaWMiLCgpPT51bmUodCkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoKT0+WG5lKHQpKSxlKCIgICAgcmFuayIsKCk9PlREKGdUKHQpKSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLCgpPT54T2UodCkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoKT0+bW5lKHQpKSxlKCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLCgpPT5LbmUodCkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKCk9PnBuZSh0KSksZSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLCgpPT5iT2UodCkpLGUoIiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzIiwoKT0+d09lKHQpKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKCk9PkFuZSh0KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoKT0+dmllKHQpKSxlKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLCgpPT5ibmUodCkpLGUoIiAgICBvcmRlciIsKCk9PmdpZSh0KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKCk9Pl9PZSh0KSksZSgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLCgpPT5rbmUodCkpLGUoIiAgICBwb3NpdGlvbiIsKCk9PmtpZSh0KSksZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIiwoKT0+TE9lKHQpKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLCgpPT5DT2UodCkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKCk9Pl9uZSh0KSksZSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIiwoKT0+RU9lKHQpKSxlKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLCgpPT5FbmUodCkpLGUoIiAgICB0cmFuc2xhdGVHcmFwaCIsKCk9PlRPZSh0KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoKT0+a09lKHQpKSxlKCIgICAgcmV2ZXJzZVBvaW50cyIsKCk9PlNPZSh0KSksZSgiICAgIGFjeWNsaWMudW5kbyIsKCk9PmhuZSh0KSl9ZnVuY3Rpb24gbE9lKHQsZSl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKSxpPWUubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LGUuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpLGk9ZS5lZGdlKHIpO24ucG9pbnRzPWkucG9pbnRzLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJ4IikmJihuLng9aS54LG4ueT1pLnkpfSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9ZnVuY3Rpb24geU9lKHQpe3ZhciBlPW5ldyBJcih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHI9Q0QodC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChVaCh7fSx1T2UsU0QocixjT2UpLFdkKHIsaE9lKSkpLFNlKHQubm9kZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1DRCh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHJmKFNEKGksZk9lKSxkT2UpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1DRCh0LmVkZ2UobikpO2Uuc2V0RWRnZShuLFVoKHt9LG1PZSxTRChpLHBPZSksV2QoaSxnT2UpKSl9KSxlfWZ1bmN0aW9uIHZPZSh0KXt2YXIgZT10LmdyYXBoKCk7ZS5yYW5rc2VwLz0yLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYoZS5yYW5rZGlyPT09IlRCInx8ZS5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIHhPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXt2YXIgbj10Lm5vZGUoZS52KSxpPXQubm9kZShlLncpLGE9e3Jhbms6KGkucmFuay1uLnJhbmspLzIrbi5yYW5rLGV9O0ljKHQsImVkZ2UtcHJveHkiLGEsIl9lcCIpfX0pfWZ1bmN0aW9uIGJPZSh0KXt2YXIgZT0wO1NlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUocik7bi5ib3JkZXJUb3AmJihuLm1pblJhbms9dC5ub2RlKG4uYm9yZGVyVG9wKS5yYW5rLG4ubWF4UmFuaz10Lm5vZGUobi5ib3JkZXJCb3R0b20pLnJhbmssZT1GcyhlLG4ubWF4UmFuaykpfSksdC5ncmFwaCgpLm1heFJhbms9ZX1mdW5jdGlvbiB3T2UodCl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15PT09ImVkZ2UtcHJveHkiJiYodC5lZGdlKHIuZSkubGFiZWxSYW5rPXIucmFuayx0LnJlbW92ZU5vZGUoZSkpfSl9ZnVuY3Rpb24gVE9lKHQpe3ZhciBlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPTAsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLGE9dC5ncmFwaCgpLHM9YS5tYXJnaW54fHwwLGw9YS5tYXJnaW55fHwwO2Z1bmN0aW9uIHUoaCl7dmFyIGY9aC54LGQ9aC55LHA9aC53aWR0aCxtPWguaGVpZ2h0O2U9TWF0aC5taW4oZSxmLXAvMikscj1NYXRoLm1heChyLGYrcC8yKSxuPU1hdGgubWluKG4sZC1tLzIpLGk9TWF0aC5tYXgoaSxkK20vMil9byh1LCJnZXRFeHRyZW1lcyIpLFNlKHQubm9kZXMoKSxmdW5jdGlvbihoKXt1KHQubm9kZShoKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5lZGdlKGgpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJ4IikmJnUoZil9KSxlLT1zLG4tPWwsU2UodC5ub2RlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQubm9kZShoKTtmLngtPWUsZi55LT1ufSksU2UodC5lZGdlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQuZWRnZShoKTtTZShmLnBvaW50cyxmdW5jdGlvbihkKXtkLngtPWUsZC55LT1ufSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIngiKSYmKGYueC09ZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsInkiKSYmKGYueS09bil9KSxhLndpZHRoPXItZStzLGEuaGVpZ2h0PWktbitsfWZ1bmN0aW9uIGtPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49dC5ub2RlKGUudiksaT10Lm5vZGUoZS53KSxhLHM7ci5wb2ludHM/KGE9ci5wb2ludHNbMF0scz1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxhPWkscz1uKSxyLnBvaW50cy51bnNoaWZ0KGFEKG4sYSkpLHIucG9pbnRzLnB1c2goYUQoaSxzKSl9KX1mdW5jdGlvbiBFT2UodCl7U2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFNPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO3IucmV2ZXJzZWQmJnIucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIENPZSh0KXtTZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7aWYodC5jaGlsZHJlbihlKS5sZW5ndGgpe3ZhciByPXQubm9kZShlKSxuPXQubm9kZShyLmJvcmRlclRvcCksaT10Lm5vZGUoci5ib3JkZXJCb3R0b20pLGE9dC5ub2RlKHhhKHIuYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHhhKHIuYm9yZGVyUmlnaHQpKTtyLndpZHRoPU1hdGguYWJzKHMueC1hLngpLHIuaGVpZ2h0PU1hdGguYWJzKGkueS1uLnkpLHIueD1hLngrci53aWR0aC8yLHIueT1uLnkrci5oZWlnaHQvMn19KSxTZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dC5ub2RlKGUpLmR1bW15PT09ImJvcmRlciImJnQucmVtb3ZlTm9kZShlKX0pfWZ1bmN0aW9uIEFPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgcj10Lm5vZGUoZS52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBfT2UodCl7dmFyIGU9c2YodCk7U2UoZSxmdW5jdGlvbihyKXt2YXIgbj0wO1NlKHIsZnVuY3Rpb24oaSxhKXt2YXIgcz10Lm5vZGUoaSk7cy5vcmRlcj1hK24sU2Uocy5zZWxmRWRnZXMsZnVuY3Rpb24obCl7SWModCwic2VsZmVkZ2UiLHt3aWR0aDpsLmxhYmVsLndpZHRoLGhlaWdodDpsLmxhYmVsLmhlaWdodCxyYW5rOnMucmFuayxvcmRlcjphKyArK24sZTpsLmUsbGFiZWw6bC5sYWJlbH0sIl9zZSIpfSksZGVsZXRlIHMuc2VsZkVkZ2VzfSl9KX1mdW5jdGlvbiBMT2UodCl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtpZihyLmR1bW15PT09InNlbGZlZGdlIil7dmFyIG49dC5ub2RlKHIuZS52KSxpPW4ueCtuLndpZHRoLzIsYT1uLnkscz1yLngtaSxsPW4uaGVpZ2h0LzI7dC5zZXRFZGdlKHIuZSxyLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksci5sYWJlbC5wb2ludHM9W3t4OmkrMipzLzMseTphLWx9LHt4OmkrNSpzLzYseTphLWx9LHt4Omkrcyx5OmF9LHt4OmkrNSpzLzYseTphK2x9LHt4OmkrMipzLzMseTphK2x9XSxyLmxhYmVsLng9ci54LHIubGFiZWwueT1yLnl9fSl9ZnVuY3Rpb24gU0QodCxlKXtyZXR1cm4gVWQoV2QodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIENEKHQpe3ZhciBlPXt9O3JldHVybiBTZSh0LGZ1bmN0aW9uKHIsbil7ZVtuLnRvTG93ZXJDYXNlKCldPXJ9KSxlfXZhciBjT2UsdU9lLGhPZSxmT2UsZE9lLHBPZSxtT2UsZ09lLFNpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7R3MoKTt3bmUoKTtDbmUoKTtpRCgpO3VEKCk7a0QoKTtRbmUoKTt5aWUoKTt4aWUoKTtFaWUoKTtPYygpO28oR3UsImxheW91dCIpO28ob09lLCJydW5MYXlvdXQiKTtvKGxPZSwidXBkYXRlSW5wdXRHcmFwaCIpO2NPZT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdU9lPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LGhPZT1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLGZPZT1bIndpZHRoIiwiaGVpZ2h0Il0sZE9lPXt3aWR0aDowLGhlaWdodDowfSxwT2U9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sbU9lPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sZ09lPVsibGFiZWxwb3MiXTtvKHlPZSwiYnVpbGRMYXlvdXRHcmFwaCIpO28odk9lLCJtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIik7byh4T2UsImluamVjdEVkZ2VMYWJlbFByb3hpZXMiKTtvKGJPZSwiYXNzaWduUmFua01pbk1heCIpO28od09lLCJyZW1vdmVFZGdlTGFiZWxQcm94aWVzIik7byhUT2UsInRyYW5zbGF0ZUdyYXBoIik7byhrT2UsImFzc2lnbk5vZGVJbnRlcnNlY3RzIik7byhFT2UsImZpeHVwRWRnZUxhYmVsQ29vcmRzIik7byhTT2UsInJldmVyc2VQb2ludHNGb3JSZXZlcnNlZEVkZ2VzIik7byhDT2UsInJlbW92ZUJvcmRlck5vZGVzIik7byhBT2UsInJlbW92ZVNlbGZFZGdlcyIpO28oX09lLCJpbnNlcnRTZWxmRWRnZXMiKTtvKExPZSwicG9zaXRpb25TZWxmRWRnZXMiKTtvKFNELCJzZWxlY3ROdW1iZXJBdHRycyIpO28oQ0QsImNhbm9uaWNhbGl6ZSIpfSk7dmFyIFF2PU0oKCk9PnsidXNlIHN0cmljdCI7aUQoKTtTaWUoKTt1RCgpO2tEKCl9KTtmdW5jdGlvbiBLbyh0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczpET2UodCksZWRnZXM6Tk9lKHQpfTtyZXR1cm4gZHIodC5ncmFwaCgpKXx8KGUudmFsdWU9cm4odC5ncmFwaCgpKSksZX1mdW5jdGlvbiBET2UodCl7cmV0dXJuIFFlKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSksbj10LnBhcmVudChlKSxpPXt2OmV9O3JldHVybiBkcihyKXx8KGkudmFsdWU9ciksZHIobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gTk9lKHQpe3JldHVybiBRZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49e3Y6ZS52LHc6ZS53fTtyZXR1cm4gZHIoZS5uYW1lKXx8KG4ubmFtZT1lLm5hbWUpLGRyKHIpfHwobi52YWx1ZT1yKSxufSl9dmFyIEFEPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtwVCgpO28oS28sIndyaXRlIik7byhET2UsIndyaXRlTm9kZXMiKTtvKE5PZSwid3JpdGVFZGdlcyIpfSk7dmFyIHdyLGpkLF9pZSxMaWUsYlQsUk9lLERpZSxOaWUsTU9lLEttLEFpZSxSaWUsTWllLElpZSxPaWUsUGllPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtHcygpO0FEKCk7d3I9bmV3IE1hcCxqZD1uZXcgTWFwLF9pZT1uZXcgTWFwLExpZT1vKCgpPT57amQuY2xlYXIoKSxfaWUuY2xlYXIoKSx3ci5jbGVhcigpfSwiY2xlYXIiKSxiVD1vKCh0LGUpPT57bGV0IHI9amQuZ2V0KGUpfHxbXTtyZXR1cm4gWS50cmFjZSgiSW4gaXNEZXNjZW5kYW50IixlLCIgIix0LCIgPSAiLHIuaW5jbHVkZXModCkpLHIuaW5jbHVkZXModCl9LCJpc0Rlc2NlbmRhbnQiKSxST2U9bygodCxlKT0+e2xldCByPWpkLmdldChlKXx8W107cmV0dXJuIFkuaW5mbygiRGVzY2VuZGFudHMgb2YgIixlLCIgaXMgIixyKSxZLmluZm8oIkVkZ2UgaXMgIix0KSx0LnY9PT1lfHx0Lnc9PT1lPyExOnI/ci5pbmNsdWRlcyh0LnYpfHxiVCh0LnYsZSl8fGJUKHQudyxlKXx8ci5pbmNsdWRlcyh0LncpOihZLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVzY2VuZGFudHMiKSwhMSl9LCJlZGdlSW5DbHVzdGVyIiksRGllPW8oKHQsZSxyLG4pPT57WS53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsdCwicm9vdCIsbiwiZGF0YSIsZS5ub2RlKHQpLG4pO2xldCBpPWUuY2hpbGRyZW4odCl8fFtdO3QhPT1uJiZpLnB1c2godCksWS53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIix0LCJub2RlcyIsaSksaS5mb3JFYWNoKGE9PntpZihlLmNoaWxkcmVuKGEpLmxlbmd0aD4wKURpZShhLGUscixuKTtlbHNle2xldCBzPWUubm9kZShhKTtZLmluZm8oImNwICIsYSwiIHRvICIsbiwiIHdpdGggcGFyZW50ICIsdCksci5zZXROb2RlKGEscyksbiE9PWUucGFyZW50KGEpJiYoWS53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxlLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxlLnBhcmVudChhKSkpLHQhPT1uJiZhIT09dD8oWS5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsdCksci5zZXRQYXJlbnQoYSx0KSk6KFkuaW5mbygiSW4gY29weSAiLHQsInJvb3QiLG4sImRhdGEiLGUubm9kZSh0KSxuKSxZLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIix0IT09biwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PXQpKTtsZXQgbD1lLmVkZ2VzKGEpO1kuZGVidWcoIkNvcHlpbmcgRWRnZXMiLGwpLGwuZm9yRWFjaCh1PT57WS5pbmZvKCJFZGdlIix1KTtsZXQgaD1lLmVkZ2UodS52LHUudyx1Lm5hbWUpO1kuaW5mbygiRWRnZSBkYXRhIixoLG4pO3RyeXtST2UodSxuKT8oWS5pbmZvKCJDb3B5aW5nIGFzICIsdS52LHUudyxoLHUubmFtZSksci5zZXRFZGdlKHUudix1LncsaCx1Lm5hbWUpLFkuaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKTpZLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLHUudiwiLS0+Iix1LncsIiByb290SWQ6ICIsbiwiIGNsdXN0ZXJJZDoiLHQpfWNhdGNoKGYpe1kuZXJyb3IoZil9fSl9WS5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksZS5yZW1vdmVOb2RlKGEpfSl9LCJjb3B5IiksTmllPW8oKHQsZSk9PntsZXQgcj1lLmNoaWxkcmVuKHQpLG49Wy4uLnJdO2ZvcihsZXQgaSBvZiByKV9pZS5zZXQoaSx0KSxuPVsuLi5uLC4uLk5pZShpLGUpXTtyZXR1cm4gbn0sImV4dHJhY3REZXNjZW5kYW50cyIpLE1PZT1vKCh0LGUscik9PntsZXQgbj10LmVkZ2VzKCkuZmlsdGVyKHU9PnUudj09PWV8fHUudz09PWUpLGk9dC5lZGdlcygpLmZpbHRlcih1PT51LnY9PT1yfHx1Lnc9PT1yKSxhPW4ubWFwKHU9Pih7djp1LnY9PT1lP3I6dS52LHc6dS53PT09ZT9lOnUud30pKSxzPWkubWFwKHU9Pih7djp1LnYsdzp1Lnd9KSk7cmV0dXJuIGEuZmlsdGVyKHU9PnMuc29tZShoPT51LnY9PT1oLnYmJnUudz09PWgudykpfSwiZmluZENvbW1vbkVkZ2VzIiksS209bygodCxlLHIpPT57bGV0IG49ZS5jaGlsZHJlbih0KTtpZihZLnRyYWNlKCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgIix0LG4pLG4ubGVuZ3RoPDEpcmV0dXJuIHQ7bGV0IGk7Zm9yKGxldCBhIG9mIG4pe2xldCBzPUttKGEsZSxyKSxsPU1PZShlLHIscyk7aWYocylpZihsLmxlbmd0aD4wKWk9cztlbHNlIHJldHVybiBzfXJldHVybiBpfSwiZmluZE5vbkNsdXN0ZXJDaGlsZCIpLEFpZT1vKHQ9PiF3ci5oYXModCl8fCF3ci5nZXQodCkuZXh0ZXJuYWxDb25uZWN0aW9ucz90OndyLmhhcyh0KT93ci5nZXQodCkuaWQ6dCwiZ2V0QW5jaG9ySWQiKSxSaWU9bygodCxlKT0+e2lmKCF0fHxlPjEwKXtZLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTtyZXR1cm59ZWxzZSBZLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO3Qubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3QuY2hpbGRyZW4ocikubGVuZ3RoPjAmJihZLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsciwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLEttKHIsdCxyKSksamQuc2V0KHIsTmllKHIsdCkpLHdyLnNldChyLHtpZDpLbShyLHQsciksY2x1c3RlckRhdGE6dC5ub2RlKHIpfSkpfSksdC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5jaGlsZHJlbihyKSxpPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhZLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLHIsamQpLGkuZm9yRWFjaChhPT57bGV0IHM9YlQoYS52LHIpLGw9YlQoYS53LHIpO3NebCYmKFkud2FybigiRWRnZTogIixhLCIgbGVhdmVzIGNsdXN0ZXIgIixyKSxZLndhcm4oIkRlc2NlbmRhbnRzIG9mIFhYWCAiLHIsIjogIixqZC5nZXQocikpLHdyLmdldChyKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX0pKTpZLmRlYnVnKCJOb3QgYSBjbHVzdGVyICIscixqZCl9KTtmb3IobGV0IHIgb2Ygd3Iua2V5cygpKXtsZXQgbj13ci5nZXQocikuaWQsaT10LnBhcmVudChuKTtpIT09ciYmd3IuaGFzKGkpJiYhd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJih3ci5nZXQocikuaWQ9aSl9dC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5lZGdlKHIpO1kud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkocikpLFkud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKHIpKSk7bGV0IGk9ci52LGE9ci53O2lmKFkud2FybigiRml4IFhYWCIsd3IsImlkczoiLHIudixyLncsIlRyYW5zbGF0aW5nOiAiLHdyLmdldChyLnYpLCIgLS0tICIsd3IuZ2V0KHIudykpLHdyLmdldChyLnYpfHx3ci5nZXQoci53KSl7aWYoWS53YXJuKCJGaXhpbmcgYW5kIHRyeWluZyAtIHJlbW92aW5nIFhYWCIsci52LHIudyxyLm5hbWUpLGk9QWllKHIudiksYT1BaWUoci53KSx0LnJlbW92ZUVkZ2Uoci52LHIudyxyLm5hbWUpLGkhPT1yLnYpe2xldCBzPXQucGFyZW50KGkpO3dyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4uZnJvbUNsdXN0ZXI9ci52fWlmKGEhPT1yLncpe2xldCBzPXQucGFyZW50KGEpO3dyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4udG9DbHVzdGVyPXIud31ZLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLGksYSxyLm5hbWUpLHQuc2V0RWRnZShpLGEsbixyLm5hbWUpfX0pLFkud2FybigiQWRqdXN0ZWQgR3JhcGgiLEtvKHQpKSxNaWUodCwwKSxZLnRyYWNlKHdyKX0sImFkanVzdENsdXN0ZXJzQW5kRWRnZXMiKSxNaWU9bygodCxlKT0+e2lmKFkud2FybigiZXh0cmFjdG9yIC0gIixlLEtvKHQpLHQuY2hpbGRyZW4oIkQiKSksZT4xMCl7WS5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IHI9dC5ub2RlcygpLG49ITE7Zm9yKGxldCBpIG9mIHIpe2xldCBhPXQuY2hpbGRyZW4oaSk7bj1ufHxhLmxlbmd0aD4wfWlmKCFuKXtZLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsdC5ub2RlcygpKTtyZXR1cm59WS5kZWJ1ZygiTm9kZXMgPSAiLHIsZSk7Zm9yKGxldCBpIG9mIHIpaWYoWS5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIixpLHdyLHdyLmhhcyhpKSYmIXdyLmdldChpKS5leHRlcm5hbENvbm5lY3Rpb25zLCF0LnBhcmVudChpKSx0Lm5vZGUoaSksdC5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixlKSwhd3IuaGFzKGkpKVkuZGVidWcoIk5vdCBhIGNsdXN0ZXIiLGksZSk7ZWxzZSBpZighd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJnQuY2hpbGRyZW4oaSkmJnQuY2hpbGRyZW4oaSkubGVuZ3RoPjApe1kud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixpLGUpO2xldCBzPXQuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7d3IuZ2V0KGkpPy5jbHVzdGVyRGF0YT8uZGlyJiYocz13ci5nZXQoaSkuY2x1c3RlckRhdGEuZGlyLFkud2FybigiRml4aW5nIGRpciIsd3IuZ2V0KGkpLmNsdXN0ZXJEYXRhLmRpcixzKSk7bGV0IGw9bmV3IElyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cyxub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1kud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5IixLbyh0KSksRGllKGksdCxsLGkpLHQuc2V0Tm9kZShpLHtjbHVzdGVyTm9kZTohMCxpZDppLGNsdXN0ZXJEYXRhOndyLmdldChpKS5jbHVzdGVyRGF0YSxsYWJlbDp3ci5nZXQoaSkubGFiZWwsZ3JhcGg6bH0pLFkud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsaSwiKSIsS28obCkpLFkuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixLbyh0KSl9ZWxzZSBZLndhcm4oIkNsdXN0ZXIgKiogIixpLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6Iiwhd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIXQucGFyZW50KGkpLCIgY2hpbGRyZW4gIix0LmNoaWxkcmVuKGkpJiZ0LmNoaWxkcmVuKGkpLmxlbmd0aD4wLHQuY2hpbGRyZW4oIkQiKSxlKSxZLmRlYnVnKHdyKTtyPXQubm9kZXMoKSxZLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dC5ub2RlKGkpO1kud2FybigiIE5vdyBuZXh0IGxldmVsIixpLGEpLGE/LmNsdXN0ZXJOb2RlJiZNaWUoYS5ncmFwaCxlKzEpfX0sImV4dHJhY3RvciIpLElpZT1vKCh0LGUpPT57aWYoZS5sZW5ndGg9PT0wKXJldHVybltdO2xldCByPU9iamVjdC5hc3NpZ24oW10sZSk7cmV0dXJuIGUuZm9yRWFjaChuPT57bGV0IGk9dC5jaGlsZHJlbihuKSxhPUlpZSh0LGkpO3I9Wy4uLnIsLi4uYV19KSxyfSwic29ydGVyIiksT2llPW8odD0+SWllKHQsdC5jaGlsZHJlbigpKSwic29ydE5vZGVzQnlIaWVyYXJjaHkiKX0pO3ZhciBGaWU9e307dnIoRmllLHtyZW5kZXI6KCk9PklPZX0pO3ZhciBCaWUsSU9lLHppZT1NKCgpPT57InVzZSBzdHJpY3QiO1F2KCk7QUQoKTtHcygpO2ZMKCk7T3QoKTtQaWUoKTt2dygpO2x3KCk7aEwoKTt1dCgpOyR2KCk7VnQoKTtCaWU9byhhc3luYyh0LGUscixuLGksYSk9PntZLndhcm4oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6WEFYIixLbyhlKSxpKTtsZXQgcz1lLmdyYXBoKCkucmFua2RpcjtZLnRyYWNlKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLHMpO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7ZS5ub2RlcygpP1kuaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLGUubm9kZXMoKSk6WS5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLGUpLGUuZWRnZXMoKS5sZW5ndGg+MCYmWS5pbmZvKCJSZWN1cnNpdmUgZWRnZXMiLGUuZWRnZShlLmVkZ2VzKClbMF0pKTtsZXQgdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxoPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxmPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtpZihpIT09dm9pZCAwKXtsZXQgeD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkuY2x1c3RlckRhdGEpKTtZLnRyYWNlKGBTZXR0aW5nIGRhdGEgZm9yIHBhcmVudCBjbHVzdGVyIFhYWAogTm9kZS5pZCA9IGAseSxgCiBkYXRhPWAseC5oZWlnaHQsYApQYXJlbnQgY2x1c3RlcmAsaS5oZWlnaHQpLGUuc2V0Tm9kZShpLmlkLHgpLGUucGFyZW50KHkpfHwoWS50cmFjZSgiU2V0dGluZyBwYXJlbnQiLHksaS5pZCksZS5zZXRQYXJlbnQoeSxpLmlkLHgpKX1pZihZLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIit5KyI6ICIrSlNPTi5zdHJpbmdpZnkoZS5ub2RlKHkpKSksdj8uY2x1c3Rlck5vZGUpe1kuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIFhCWCIseSx2LndpZHRoLGUubm9kZSh5KSk7bGV0e3JhbmtzZXA6eCxub2Rlc2VwOmJ9PWUuZ3JhcGgoKTt2LmdyYXBoLnNldEdyYXBoKHsuLi52LmdyYXBoLmdyYXBoKCkscmFua3NlcDp4KzI1LG5vZGVzZXA6Yn0pO2xldCB3PWF3YWl0IEJpZShkLHYuZ3JhcGgscixuLGUubm9kZSh5KSxhKSxfPXcuZWxlbTtqZSh2LF8pLHYuZGlmZj13LmRpZmZ8fDAsWS5pbmZvKCJOZXcgY29tcG91bmQgbm9kZSBhZnRlciByZWN1cnNpdmUgcmVuZGVyIFhBWCIseSwid2lkdGgiLHYud2lkdGgsImhlaWdodCIsdi5oZWlnaHQpLHJKKF8sdil9ZWxzZSBlLmNoaWxkcmVuKHkpLmxlbmd0aD4wPyhZLnRyYWNlKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYQlgiLHksdi5pZCx2LHYud2lkdGgsIkdyYXBoOiIsZSksWS50cmFjZShLbSh2LmlkLGUpKSx3ci5zZXQodi5pZCx7aWQ6S20odi5pZCxlKSxub2RlOnZ9KSk6KFkudHJhY2UoIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhBWCIseSxkLGUubm9kZSh5KSxzKSxhd2FpdCBMbShkLGUubm9kZSh5KSx7Y29uZmlnOmEsZGlyOnN9KSl9KSksYXdhaXQgbyhhc3luYygpPT57bGV0IHk9ZS5lZGdlcygpLm1hcChhc3luYyBmdW5jdGlvbih2KXtsZXQgeD1lLmVkZ2Uodi52LHYudyx2Lm5hbWUpO1kuaW5mbygiRWRnZSAiK3YudisiIC0+ICIrdi53KyI6ICIrSlNPTi5zdHJpbmdpZnkodikpLFkuaW5mbygiRWRnZSAiK3YudisiIC0+ICIrdi53KyI6ICIsdiwiICIsSlNPTi5zdHJpbmdpZnkoZS5lZGdlKHYpKSksWS5pbmZvKCJGaXgiLHdyLCJpZHM6Iix2LnYsdi53LCJUcmFuc2xhdGluZzogIix3ci5nZXQodi52KSx3ci5nZXQodi53KSksYXdhaXQgZHcoZix4KX0pO2F3YWl0IFByb21pc2UuYWxsKHkpfSwicHJvY2Vzc0VkZ2VzIikoKSxZLmluZm8oIkdyYXBoIGJlZm9yZSBsYXlvdXQ6IixKU09OLnN0cmluZ2lmeShLbyhlKSkpLFkuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFhYWCIpLFkuaW5mbygiIyMjICAgICAgICAgICAgICAgIExheW91dCAgICAgICAgICAgICAgICAgIyMjIFhYWCIpLFkuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFhYWCIpLEd1KGUpLFkuaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsSlNPTi5zdHJpbmdpZnkoS28oZSkpKTtsZXQgbT0wLHtzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46Z309RnUoYSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKE9pZShlKS5tYXAoYXN5bmMgZnVuY3Rpb24oeSl7bGV0IHY9ZS5ub2RlKHkpO2lmKFkuaW5mbygiUG9zaXRpb24gWEJYID0+ICIreSsiOiAoIit2LngsIiwiK3YueSwiKSB3aWR0aDogIix2LndpZHRoLCIgaGVpZ2h0OiAiLHYuaGVpZ2h0KSx2Py5jbHVzdGVyTm9kZSl2LnkrPWcsWS5pbmZvKCJBIHRhaW50ZWQgY2x1c3RlciBub2RlIFhCWDEiLHksdi5pZCx2LndpZHRoLHYuaGVpZ2h0LHYueCx2LnksZS5wYXJlbnQoeSkpLHdyLmdldCh2LmlkKS5ub2RlPXYsVXYodik7ZWxzZSBpZihlLmNoaWxkcmVuKHkpLmxlbmd0aD4wKXtZLmluZm8oIkEgcHVyZSBjbHVzdGVyIG5vZGUgWEJYMSIseSx2LmlkLHYueCx2Lnksdi53aWR0aCx2LmhlaWdodCxlLnBhcmVudCh5KSksdi5oZWlnaHQrPWcsZS5ub2RlKHYucGFyZW50SWQpO2xldCB4PXY/LnBhZGRpbmcvMnx8MCxiPXY/LmxhYmVsQkJveD8uaGVpZ2h0fHwwLHc9Yi14fHwwO1kuZGVidWcoIk9mZnNldFkiLHcsImxhYmVsSGVpZ2h0IixiLCJoYWxmUGFkZGluZyIseCksYXdhaXQgX20odSx2KSx3ci5nZXQodi5pZCkubm9kZT12fWVsc2V7bGV0IHg9ZS5ub2RlKHYucGFyZW50SWQpO3YueSs9Zy8yLFkuaW5mbygiQSByZWd1bGFyIG5vZGUgWEJYMSAtIHVzaW5nIHRoZSBwYWRkaW5nIix2LmlkLCJwYXJlbnQiLHYucGFyZW50SWQsdi53aWR0aCx2LmhlaWdodCx2Lngsdi55LCJvZmZzZXRZIix2Lm9mZnNldFksInBhcmVudCIseCx4Py5vZmZzZXRZLHYpLFV2KHYpfX0pKSxlLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbih5KXtsZXQgdj1lLmVkZ2UoeSk7WS5pbmZvKCJFZGdlICIreS52KyIgLT4gIit5LncrIjogIitKU09OLnN0cmluZ2lmeSh2KSx2KSx2LnBvaW50cy5mb3JFYWNoKF89Pl8ueSs9Zy8yKTtsZXQgeD1lLm5vZGUoeS52KTt2YXIgYj1lLm5vZGUoeS53KTtsZXQgdz1tdyhoLHYsd3Iscix4LGIsbik7cHcodix3KX0pLGUubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtZLmluZm8oeSx2LnR5cGUsdi5kaWZmKSx2LmlzR3JvdXAmJihtPXYuZGlmZil9KSxZLndhcm4oIlJldHVybmluZyBmcm9tIHJlY3Vyc2l2ZSByZW5kZXIgWEFYIixsLG0pLHtlbGVtOmwsZGlmZjptfX0sInJlY3Vyc2l2ZVJlbmRlciIpLElPZT1vKGFzeW5jKHQsZSk9PntsZXQgcj1uZXcgSXIoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp0LmRpcmVjdGlvbixub2Rlc2VwOnQuY29uZmlnPy5ub2RlU3BhY2luZ3x8dC5jb25maWc/LmZsb3djaGFydD8ubm9kZVNwYWNpbmd8fHQubm9kZVNwYWNpbmcscmFua3NlcDp0LmNvbmZpZz8ucmFua1NwYWNpbmd8fHQuY29uZmlnPy5mbG93Y2hhcnQ/LnJhbmtTcGFjaW5nfHx0LnJhbmtTcGFjaW5nLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxuPWUuc2VsZWN0KCJnIik7Z3cobix0Lm1hcmtlcnMsdC50eXBlLHQuZGlhZ3JhbUlkKSxuSigpLHRKKCksalooKSxMaWUoKSx0Lm5vZGVzLmZvckVhY2goYT0+e3Iuc2V0Tm9kZShhLmlkLHsuLi5hfSksYS5wYXJlbnRJZCYmci5zZXRQYXJlbnQoYS5pZCxhLnBhcmVudElkKX0pLFkuZGVidWcoIkVkZ2VzOiIsdC5lZGdlcyksdC5lZGdlcy5mb3JFYWNoKGE9PntpZihhLnN0YXJ0PT09YS5lbmQpe2xldCBzPWEuc3RhcnQsbD1zKyItLS0iK3MrIi0tLTEiLHU9cysiLS0tIitzKyItLS0yIixoPXIubm9kZShzKTtyLnNldE5vZGUobCx7ZG9tSWQ6bCxpZDpsLHBhcmVudElkOmgucGFyZW50SWQsbGFiZWxTdHlsZToiIixsYWJlbDoiIixwYWRkaW5nOjAsc2hhcGU6ImxhYmVsUmVjdCIsc3R5bGU6IiIsd2lkdGg6MTAsaGVpZ2h0OjEwfSksci5zZXRQYXJlbnQobCxoLnBhcmVudElkKSxyLnNldE5vZGUodSx7ZG9tSWQ6dSxpZDp1LHBhcmVudElkOmgucGFyZW50SWQsbGFiZWxTdHlsZToiIixwYWRkaW5nOjAsc2hhcGU6ImxhYmVsUmVjdCIsbGFiZWw6IiIsc3R5bGU6IiIsd2lkdGg6MTAsaGVpZ2h0OjEwfSksci5zZXRQYXJlbnQodSxoLnBhcmVudElkKTtsZXQgZj1zdHJ1Y3R1cmVkQ2xvbmUoYSksZD1zdHJ1Y3R1cmVkQ2xvbmUoYSkscD1zdHJ1Y3R1cmVkQ2xvbmUoYSk7Zi5sYWJlbD0iIixmLmFycm93VHlwZUVuZD0ibm9uZSIsZi5pZD1zKyItY3ljbGljLXNwZWNpYWwtMSIsZC5hcnJvd1R5cGVFbmQ9Im5vbmUiLGQuaWQ9cysiLWN5Y2xpYy1zcGVjaWFsLW1pZCIscC5sYWJlbD0iIixoLmlzR3JvdXAmJihmLmZyb21DbHVzdGVyPXMscC50b0NsdXN0ZXI9cykscC5pZD1zKyItY3ljbGljLXNwZWNpYWwtMiIsci5zZXRFZGdlKHMsbCxmLHMrIi1jeWNsaWMtc3BlY2lhbC0wIiksci5zZXRFZGdlKGwsdSxkLHMrIi1jeWNsaWMtc3BlY2lhbC0xIiksci5zZXRFZGdlKHUscyxwLHMrIi1jeWM8bGljLXNwZWNpYWwtMiIpfWVsc2Ugci5zZXRFZGdlKGEuc3RhcnQsYS5lbmQsey4uLmF9LGEuaWQpfSksWS53YXJuKCJHcmFwaCBhdCBmaXJzdDoiLEpTT04uc3RyaW5naWZ5KEtvKHIpKSksUmllKHIpLFkud2FybigiR3JhcGggYWZ0ZXIgWEFYOiIsSlNPTi5zdHJpbmdpZnkoS28ocikpKTtsZXQgaT1wZSgpO2F3YWl0IEJpZShuLHIsdC50eXBlLHQuZGlhZ3JhbUlkLHZvaWQgMCxpKX0sInJlbmRlciIpfSk7dmFyIFp2LF9ELE9PZSxRbSx3VCxKdj1NKCgpPT57InVzZSBzdHJpY3QiO2FKKCk7dXQoKTtadj17fSxfRD1vKHQ9Pntmb3IobGV0IGUgb2YgdCladltlLm5hbWVdPWV9LCJyZWdpc3RlckxheW91dExvYWRlcnMiKSxPT2U9bygoKT0+e19EKFt7bmFtZToiZGFncmUiLGxvYWRlcjpvKGFzeW5jKCk9PmF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih6aWUoKSxGaWUpKSwibG9hZGVyIil9XSl9LCJyZWdpc3RlckRlZmF1bHRMYXlvdXRMb2FkZXJzIik7T09lKCk7UW09byhhc3luYyh0LGUpPT57aWYoISh0LmxheW91dEFsZ29yaXRobSBpbiBadikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxheW91dCBhbGdvcml0aG06ICR7dC5sYXlvdXRBbGdvcml0aG19YCk7bGV0IHI9WnZbdC5sYXlvdXRBbGdvcml0aG1dO3JldHVybihhd2FpdCByLmxvYWRlcigpKS5yZW5kZXIodCxlLGlKLHthbGdvcml0aG06ci5hbGdvcml0aG19KX0sInJlbmRlciIpLHdUPW8oKHQ9IiIse2ZhbGxiYWNrOmU9ImRhZ3JlIn09e30pPT57aWYodCBpbiBadilyZXR1cm4gdDtpZihlIGluIFp2KXJldHVybiBZLndhcm4oYExheW91dCBhbGdvcml0aG0gJHt0fSBpcyBub3QgcmVnaXN0ZXJlZC4gVXNpbmcgJHtlfSBhcyBmYWxsYmFjay5gKSxlO3Rocm93IG5ldyBFcnJvcihgQm90aCBsYXlvdXQgYWxnb3JpdGhtcyAke3R9IGFuZCAke2V9IGFyZSBub3QgcmVnaXN0ZXJlZC5gKX0sImdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG0iKX0pO3ZhciBabSxQT2UsQk9lLFRUPU0oKCk9PnsidXNlIHN0cmljdCI7YWkoKTt1dCgpO1ptPW8oKHQsZSxyLG4pPT57dC5hdHRyKCJjbGFzcyIscik7bGV0e3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6bH09UE9lKHQsZSk7WnIodCxhLGksbik7bGV0IHU9Qk9lKHMsbCxpLGEsZSk7dC5hdHRyKCJ2aWV3Qm94Iix1KSxZLmRlYnVnKGB2aWV3Qm94IGNvbmZpZ3VyZWQ6ICR7dX0gd2l0aCBwYWRkaW5nOiAke2V9YCl9LCJzZXR1cFZpZXdQb3J0Rm9yU1ZHIiksUE9lPW8oKHQsZSk9PntsZXQgcj10Lm5vZGUoKT8uZ2V0QkJveCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtyZXR1cm57d2lkdGg6ci53aWR0aCtlKjIsaGVpZ2h0OnIuaGVpZ2h0K2UqMix4OnIueCx5OnIueX19LCJjYWxjdWxhdGVEaW1lbnNpb25zV2l0aFBhZGRpbmciKSxCT2U9bygodCxlLHIsbixpKT0+YCR7dC1pfSAke2UtaX0gJHtyfSAke259YCwiY3JlYXRlVmlld0JveCIpfSk7dmFyIEZPZSx6T2UsR2llLCRpZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7VnQoKTt1dCgpO293KCk7SnYoKTtUVCgpO2hyKCk7Y0woKTtGT2U9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSx6T2U9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtZLmluZm8oIlJFRjA6IiksWS5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxmbG93Y2hhcnQ6YSxsYXlvdXQ6c309cGUoKSxsO2k9PT0ic2FuZGJveCImJihsPVZlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/bC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtZLmRlYnVnKCJCZWZvcmUgZ2V0RGF0YTogIik7bGV0IGg9bi5kYi5nZXREYXRhKCk7WS5kZWJ1ZygiRGF0YTogIixoKTtsZXQgZj1BbShlLGkpLGQ9bEwoKTtoLnR5cGU9bi50eXBlLGgubGF5b3V0QWxnb3JpdGhtPXdUKHMpLGgubGF5b3V0QWxnb3JpdGhtPT09ImRhZ3JlIiYmcz09PSJlbGsiJiZZLndhcm4oImZsb3djaGFydC1lbGsgd2FzIG1vdmVkIHRvIGFuIGV4dGVybmFsIHBhY2thZ2UgaW4gTWVybWFpZCB2MTEuIFBsZWFzZSByZWZlciBbcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9yZWxlYXNlcy90YWcvdjExLjAuMCkgZm9yIG1vcmUgZGV0YWlscy4gVGhpcyBkaWFncmFtIHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgYGRhZ3JlYCBsYXlvdXQgYXMgYSBmYWxsYmFjay4iKSxoLmRpcmVjdGlvbj1kLGgubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGgucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGgubWFya2Vycz1bInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxoLmRpYWdyYW1JZD1lLFkuZGVidWcoIlJFRjE6IixoKSxhd2FpdCBRbShoLGYpO2xldCBwPWguY29uZmlnLmZsb3djaGFydD8uZGlhZ3JhbVBhZGRpbmc/Pzg7VXQuaW5zZXJ0VGl0bGUoZiwiZmxvd2NoYXJ0VGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbnx8MCxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxabShmLHAsImZsb3djaGFydCIsYT8udXNlTWF4V2lkdGh8fCExKTtmb3IobGV0IG0gb2YgaC5ub2Rlcyl7bGV0IGc9VmUoYCMke2V9IFtpZD0iJHttLmlkfSJdYCk7aWYoIWd8fCFtLmxpbmspY29udGludWU7bGV0IHk9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG0uY3NzQ2xhc3NlcykseS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLGk9PT0ic2FuZGJveCI/eS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6bS5saW5rVGFyZ2V0JiZ5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbS5saW5rVGFyZ2V0KTtsZXQgdj1nLmluc2VydChmdW5jdGlvbigpe3JldHVybiB5fSwiOmZpcnN0LWNoaWxkIikseD1nLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO3gmJnYuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZSgpfSk7bGV0IGI9Zy5zZWxlY3QoIi5sYWJlbCIpO2ImJnYuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGIubm9kZSgpfSl9fSwiZHJhdyIpLEdpZT17Z2V0Q2xhc3NlczpGT2UsZHJhdzp6T2V9fSk7dmFyIExELFZpZSxVaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMRD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oa2ksQXQsUHQsd3Qpe2ZvcihQdD1QdHx8e30sd3Q9a2kubGVuZ3RoO3d0LS07UHRba2lbd3RdXT1BdCk7cmV0dXJuIFB0fSwibyIpLGU9WzEsNF0scj1bMSwzXSxuPVsxLDVdLGk9WzEsOCw5LDEwLDExLDI3LDM0LDM2LDM4LDQ0LDYwLDgzLDg0LDg1LDg2LDg3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTUsMTIwLDEyMSwxMjIsMTIzXSxhPVsyLDJdLHM9WzEsMTNdLGw9WzEsMTRdLHU9WzEsMTVdLGg9WzEsMTZdLGY9WzEsMjNdLGQ9WzEsMjVdLHA9WzEsMjZdLG09WzEsMjddLGc9WzEsNDldLHk9WzEsNDhdLHY9WzEsMjldLHg9WzEsMzBdLGI9WzEsMzFdLHc9WzEsMzJdLF89WzEsMzNdLFQ9WzEsNDRdLEU9WzEsNDZdLEw9WzEsNDJdLFM9WzEsNDddLEE9WzEsNDNdLEk9WzEsNTBdLEQ9WzEsNDVdLGs9WzEsNTFdLFI9WzEsNTJdLEM9WzEsMzRdLE89WzEsMzVdLE49WzEsMzZdLFA9WzEsMzddLEY9WzEsNTddLEI9WzEsOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQ0LDYwLDgzLDg0LDg1LDg2LDg3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTUsMTIwLDEyMSwxMjIsMTIzXSxHPVsxLDYxXSx6PVsxLDYwXSxXPVsxLDYyXSxaPVs4LDksMTEsNzUsNzddLGo9WzEsNzddLG9lPVsxLDkwXSxLPVsxLDk1XSxlZT1bMSw5NF0sSj1bMSw5MV0sSD1bMSw4N10scT1bMSw5M10sUT1bMSw4OV0sYWU9WzEsOTZdLHVlPVsxLDkyXSxjZT1bMSw5N10sdGU9WzEsODhdLE5lPVs4LDksMTAsMTEsNDAsNzUsNzddLHNlPVs4LDksMTAsMTEsNDAsNDYsNzUsNzddLGtlPVs4LDksMTAsMTEsMjksNDAsNDQsNDYsNDgsNTAsNTIsNTQsNTYsNTgsNjAsNjMsNjUsNjcsNjgsNzAsNzUsNzcsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sUmU9WzgsOSwxMSw0NCw2MCw3NSw3Nyw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxDZT1bNDQsNjAsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sUGU9WzEsMTIzXSxJZT1bMSwxMjJdLCRlPVsxLDEzMF0seWU9WzEsMTQ0XSxYPVsxLDE0NV0sZmU9WzEsMTQ2XSxoZT1bMSwxNDddLGdlPVsxLDEzMl0sbmU9WzEsMTM0XSx2ZT1bMSwxMzhdLFU9WzEsMTM5XSxUZT1bMSwxNDBdLGllPVsxLDE0MV0sRWU9WzEsMTQyXSxBZT1bMSwxNDNdLEdlPVsxLDE0OF0sQmU9WzEsMTQ5XSxtZT1bMSwxMjhdLEhlPVsxLDEyOV0sT2U9WzEsMTM2XSxldD1bMSwxMzFdLGJ0PVsxLDEzNV0sa3Q9WzEsMTMzXSx2dD1bOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQ0LDYwLDgzLDg0LDg1LDg2LDg3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTUsMTIwLDEyMSwxMjIsMTIzXSxydD1bMSwxNTFdLHl0PVsxLDE1M10sVWU9WzgsOSwxMV0sdHQ9WzgsOSwxMCwxMSwxNCw0NCw2MCw4OCwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTVdLGh0PVsxLDE3M10sRXQ9WzEsMTY5XSxlcj1bMSwxNzBdLGR0PVsxLDE3NF0sSmU9WzEsMTcxXSxjdD1bMSwxNzJdLEN0PVs3NywxMTUsMTE4XSxwdD1bOCw5LDEwLDExLDEyLDE0LDI3LDI5LDMyLDQ0LDYwLDc1LDgzLDg0LDg1LDg2LDg3LDg4LDg5LDEwNCwxMDgsMTEwLDExMywxMTQsMTE1XSxCdD1bMTAsMTA1XSxUcj1bMzEsNDksNTEsNTMsNTUsNTcsNjIsNjQsNjYsNjcsNjksNzEsMTE1LDExNiwxMTddLHlyPVsxLDI0Ml0sb3I9WzEsMjQwXSxsbj1bMSwyNDRdLE9yPVsxLDIzOF0saWk9WzEsMjM5XSxtbj1bMSwyNDFdLE9uPVsxLDI0M10sX3I9WzEsMjQ1XSxtaT1bMSwyNjNdLHZzPVs4LDksMTEsMTA1XSxQbj1bOCw5LDEwLDExLDYwLDgzLDEwNCwxMDUsMTA4LDEwOSwxMTAsMTExXSxTbz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxncmFwaENvbmZpZzo0LGRvY3VtZW50OjUsbGluZTo2LHN0YXRlbWVudDo3LFNFTUk6OCxORVdMSU5FOjksU1BBQ0U6MTAsRU9GOjExLEdSQVBIOjEyLE5PRElSOjEzLERJUjoxNCxGaXJzdFN0bXRTZXBhcmF0b3I6MTUsZW5kaW5nOjE2LGVuZFRva2VuOjE3LHNwYWNlTGlzdDoxOCxzcGFjZUxpc3ROZXdsaW5lOjE5LHZlcnRleFN0YXRlbWVudDoyMCxzZXBhcmF0b3I6MjEsc3R5bGVTdGF0ZW1lbnQ6MjIsbGlua1N0eWxlU3RhdGVtZW50OjIzLGNsYXNzRGVmU3RhdGVtZW50OjI0LGNsYXNzU3RhdGVtZW50OjI1LGNsaWNrU3RhdGVtZW50OjI2LHN1YmdyYXBoOjI3LHRleHROb1RhZ3M6MjgsU1FTOjI5LHRleHQ6MzAsU1FFOjMxLGVuZDozMixkaXJlY3Rpb246MzMsYWNjX3RpdGxlOjM0LGFjY190aXRsZV92YWx1ZTozNSxhY2NfZGVzY3I6MzYsYWNjX2Rlc2NyX3ZhbHVlOjM3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6Mzgsc2hhcGVEYXRhOjM5LFNIQVBFX0RBVEE6NDAsbGluazo0MSxub2RlOjQyLHN0eWxlZFZlcnRleDo0MyxBTVA6NDQsdmVydGV4OjQ1LFNUWUxFX1NFUEFSQVRPUjo0NixpZFN0cmluZzo0NyxET1VCTEVDSVJDTEVTVEFSVDo0OCxET1VCTEVDSVJDTEVFTkQ6NDksUFM6NTAsUEU6NTEsIigtIjo1MiwiLSkiOjUzLFNUQURJVU1TVEFSVDo1NCxTVEFESVVNRU5EOjU1LFNVQlJPVVRJTkVTVEFSVDo1NixTVUJST1VUSU5FRU5EOjU3LFZFUlRFWF9XSVRIX1BST1BTX1NUQVJUOjU4LCJOT0RFX1NUUklOR1tmaWVsZF0iOjU5LENPTE9OOjYwLCJOT0RFX1NUUklOR1t2YWx1ZV0iOjYxLFBJUEU6NjIsQ1lMSU5ERVJTVEFSVDo2MyxDWUxJTkRFUkVORDo2NCxESUFNT05EX1NUQVJUOjY1LERJQU1PTkRfU1RPUDo2NixUQUdFTkQ6NjcsVFJBUFNUQVJUOjY4LFRSQVBFTkQ6NjksSU5WVFJBUFNUQVJUOjcwLElOVlRSQVBFTkQ6NzEsbGlua1N0YXRlbWVudDo3MixhcnJvd1RleHQ6NzMsVEVTVFNUUjo3NCxTVEFSVF9MSU5LOjc1LGVkZ2VUZXh0Ojc2LExJTks6NzcsZWRnZVRleHRUb2tlbjo3OCxTVFI6NzksTURfU1RSOjgwLHRleHRUb2tlbjo4MSxrZXl3b3Jkczo4MixTVFlMRTo4MyxMSU5LU1RZTEU6ODQsQ0xBU1NERUY6ODUsQ0xBU1M6ODYsQ0xJQ0s6ODcsRE9XTjo4OCxVUDo4OSx0ZXh0Tm9UYWdzVG9rZW46OTAsc3R5bGVzT3B0OjkxLCJpZFN0cmluZ1t2ZXJ0ZXhdIjo5MiwiaWRTdHJpbmdbY2xhc3NdIjo5MyxDQUxMQkFDS05BTUU6OTQsQ0FMTEJBQ0tBUkdTOjk1LEhSRUY6OTYsTElOS19UQVJHRVQ6OTcsIlNUUltsaW5rXSI6OTgsIlNUUlt0b29sdGlwXSI6OTksYWxwaGFOdW06MTAwLERFRkFVTFQ6MTAxLG51bUxpc3Q6MTAyLElOVEVSUE9MQVRFOjEwMyxOVU06MTA0LENPTU1BOjEwNSxzdHlsZToxMDYsc3R5bGVDb21wb25lbnQ6MTA3LE5PREVfU1RSSU5HOjEwOCxVTklUOjEwOSxCUktUOjExMCxQQ1Q6MTExLGlkU3RyaW5nVG9rZW46MTEyLE1JTlVTOjExMyxNVUxUOjExNCxVTklDT0RFX1RFWFQ6MTE1LFRFWFQ6MTE2LFRBR1NUQVJUOjExNyxFREdFX1RFWFQ6MTE4LGFscGhhTnVtVG9rZW46MTE5LGRpcmVjdGlvbl90YjoxMjAsZGlyZWN0aW9uX2J0OjEyMSxkaXJlY3Rpb25fcmw6MTIyLGRpcmVjdGlvbl9scjoxMjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDg6IlNFTUkiLDk6Ik5FV0xJTkUiLDEwOiJTUEFDRSIsMTE6IkVPRiIsMTI6IkdSQVBIIiwxMzoiTk9ESVIiLDE0OiJESVIiLDI3OiJzdWJncmFwaCIsMjk6IlNRUyIsMzE6IlNRRSIsMzI6ImVuZCIsMzQ6ImFjY190aXRsZSIsMzU6ImFjY190aXRsZV92YWx1ZSIsMzY6ImFjY19kZXNjciIsMzc6ImFjY19kZXNjcl92YWx1ZSIsMzg6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDQwOiJTSEFQRV9EQVRBIiw0NDoiQU1QIiw0NjoiU1RZTEVfU0VQQVJBVE9SIiw0ODoiRE9VQkxFQ0lSQ0xFU1RBUlQiLDQ5OiJET1VCTEVDSVJDTEVFTkQiLDUwOiJQUyIsNTE6IlBFIiw1MjoiKC0iLDUzOiItKSIsNTQ6IlNUQURJVU1TVEFSVCIsNTU6IlNUQURJVU1FTkQiLDU2OiJTVUJST1VUSU5FU1RBUlQiLDU3OiJTVUJST1VUSU5FRU5EIiw1ODoiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDU5OiJOT0RFX1NUUklOR1tmaWVsZF0iLDYwOiJDT0xPTiIsNjE6Ik5PREVfU1RSSU5HW3ZhbHVlXSIsNjI6IlBJUEUiLDYzOiJDWUxJTkRFUlNUQVJUIiw2NDoiQ1lMSU5ERVJFTkQiLDY1OiJESUFNT05EX1NUQVJUIiw2NjoiRElBTU9ORF9TVE9QIiw2NzoiVEFHRU5EIiw2ODoiVFJBUFNUQVJUIiw2OToiVFJBUEVORCIsNzA6IklOVlRSQVBTVEFSVCIsNzE6IklOVlRSQVBFTkQiLDc0OiJURVNUU1RSIiw3NToiU1RBUlRfTElOSyIsNzc6IkxJTksiLDc5OiJTVFIiLDgwOiJNRF9TVFIiLDgzOiJTVFlMRSIsODQ6IkxJTktTVFlMRSIsODU6IkNMQVNTREVGIiw4NjoiQ0xBU1MiLDg3OiJDTElDSyIsODg6IkRPV04iLDg5OiJVUCIsOTI6ImlkU3RyaW5nW3ZlcnRleF0iLDkzOiJpZFN0cmluZ1tjbGFzc10iLDk0OiJDQUxMQkFDS05BTUUiLDk1OiJDQUxMQkFDS0FSR1MiLDk2OiJIUkVGIiw5NzoiTElOS19UQVJHRVQiLDk4OiJTVFJbbGlua10iLDk5OiJTVFJbdG9vbHRpcF0iLDEwMToiREVGQVVMVCIsMTAzOiJJTlRFUlBPTEFURSIsMTA0OiJOVU0iLDEwNToiQ09NTUEiLDEwODoiTk9ERV9TVFJJTkciLDEwOToiVU5JVCIsMTEwOiJCUktUIiwxMTE6IlBDVCIsMTEzOiJNSU5VUyIsMTE0OiJNVUxUIiwxMTU6IlVOSUNPREVfVEVYVCIsMTE2OiJURVhUIiwxMTc6IlRBR1NUQVJUIiwxMTg6IkVER0VfVEVYVCIsMTIwOiJkaXJlY3Rpb25fdGIiLDEyMToiZGlyZWN0aW9uX2J0IiwxMjI6ImRpcmVjdGlvbl9ybCIsMTIzOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMzksMl0sWzM5LDFdLFsyMCw0XSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMl0sWzIwLDFdLFs0MiwxXSxbNDIsNl0sWzQyLDVdLFs0MywxXSxbNDMsM10sWzQ1LDRdLFs0NSw0XSxbNDUsNl0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDhdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw2XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSwxXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsMV0sWzQxLDNdLFs3NiwxXSxbNzYsMl0sWzc2LDFdLFs3NiwxXSxbNzIsMV0sWzczLDNdLFszMCwxXSxbMzAsMl0sWzMwLDFdLFszMCwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFsyOCwxXSxbMjgsMl0sWzI4LDFdLFsyOCwxXSxbMjQsNV0sWzI1LDVdLFsyNiwyXSxbMjYsNF0sWzI2LDNdLFsyNiw1XSxbMjYsM10sWzI2LDVdLFsyNiw1XSxbMjYsN10sWzI2LDJdLFsyNiw0XSxbMjYsMl0sWzI2LDRdLFsyNiw0XSxbMjYsNl0sWzIyLDVdLFsyMyw1XSxbMjMsNV0sWzIzLDldLFsyMyw5XSxbMjMsN10sWzIzLDddLFsxMDIsMV0sWzEwMiwzXSxbOTEsMV0sWzkxLDNdLFsxMDYsMV0sWzEwNiwyXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFs4MSwxXSxbODEsMV0sWzgxLDFdLFs4MSwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs3OCwxXSxbNzgsMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFs0NywxXSxbNDcsMl0sWzEwMCwxXSxbMTAwLDJdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEF0LFB0LHd0LFdlLEZ0LGRlLGduKXt2YXIgeGU9ZGUubGVuZ3RoLTE7c3dpdGNoKEZ0KXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoZGVbeGVdKXx8ZGVbeGVdLmxlbmd0aD4wKSYmZGVbeGUtMV0ucHVzaChkZVt4ZV0pLHRoaXMuJD1kZVt4ZS0xXTticmVhaztjYXNlIDQ6Y2FzZSAxODE6dGhpcy4kPWRlW3hlXTticmVhaztjYXNlIDExOldlLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOldlLnNldERpcmVjdGlvbihkZVt4ZS0xXSksdGhpcy4kPWRlW3hlLTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWRlW3hlLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9V2UuYWRkU3ViR3JhcGgoZGVbeGUtNl0sZGVbeGUtMV0sZGVbeGUtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVdlLmFkZFN1YkdyYXBoKGRlW3hlLTNdLGRlW3hlLTFdLGRlW3hlLTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1XZS5hZGRTdWJHcmFwaCh2b2lkIDAsZGVbeGUtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1kZVt4ZV0udHJpbSgpLFdlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1kZVt4ZV0udHJpbSgpLFdlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ZGVbeGUtMV0rZGVbeGVdO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPWRlW3hlXTticmVhaztjYXNlIDQ1OldlLmFkZFZlcnRleChkZVt4ZS0xXVswXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxkZVt4ZV0pLFdlLmFkZExpbmsoZGVbeGUtM10uc3RtdCxkZVt4ZS0xXSxkZVt4ZS0yXSksdGhpcy4kPXtzdG10OmRlW3hlLTFdLG5vZGVzOmRlW3hlLTFdLmNvbmNhdChkZVt4ZS0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDY6V2UuYWRkTGluayhkZVt4ZS0yXS5zdG10LGRlW3hlXSxkZVt4ZS0xXSksdGhpcy4kPXtzdG10OmRlW3hlXSxub2RlczpkZVt4ZV0uY29uY2F0KGRlW3hlLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0NzpXZS5hZGRMaW5rKGRlW3hlLTNdLnN0bXQsZGVbeGUtMV0sZGVbeGUtMl0pLHRoaXMuJD17c3RtdDpkZVt4ZS0xXSxub2RlczpkZVt4ZS0xXS5jb25jYXQoZGVbeGUtM10ubm9kZXMpfTticmVhaztjYXNlIDQ4OnRoaXMuJD17c3RtdDpkZVt4ZS0xXSxub2RlczpkZVt4ZS0xXX07YnJlYWs7Y2FzZSA0OTpXZS5hZGRWZXJ0ZXgoZGVbeGUtMV1bMF0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZGVbeGVdKSx0aGlzLiQ9e3N0bXQ6ZGVbeGUtMV0sbm9kZXM6ZGVbeGUtMV0sc2hhcGVEYXRhOmRlW3hlXX07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e3N0bXQ6ZGVbeGVdLG5vZGVzOmRlW3hlXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9W2RlW3hlXV07YnJlYWs7Y2FzZSA1MjpXZS5hZGRWZXJ0ZXgoZGVbeGUtNV1bMF0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZGVbeGUtNF0pLHRoaXMuJD1kZVt4ZS01XS5jb25jYXQoZGVbeGVdKTticmVhaztjYXNlIDUzOnRoaXMuJD1kZVt4ZS00XS5jb25jYXQoZGVbeGVdKTticmVhaztjYXNlIDU0OnRoaXMuJD1kZVt4ZV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9ZGVbeGUtMl0sV2Uuc2V0Q2xhc3MoZGVbeGUtMl0sZGVbeGVdKTticmVhaztjYXNlIDU2OnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPWRlW3hlLTNdLFdlLmFkZFZlcnRleChkZVt4ZS0zXSxkZVt4ZS0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9ZGVbeGUtNV0sV2UuYWRkVmVydGV4KGRlW3hlLTVdLGRlW3hlLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU5OnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDYwOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDYxOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYyOnRoaXMuJD1kZVt4ZS03XSxXZS5hZGRWZXJ0ZXgoZGVbeGUtN10sZGVbeGUtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW2RlW3hlLTVdLGRlW3hlLTNdXV0pKTticmVhaztjYXNlIDYzOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9ZGVbeGUtM10sV2UuYWRkVmVydGV4KGRlW3hlLTNdLGRlW3hlLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWRlW3hlLTNdLFdlLmFkZFZlcnRleChkZVt4ZS0zXSxkZVt4ZS0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPWRlW3hlLTVdLFdlLmFkZFZlcnRleChkZVt4ZS01XSxkZVt4ZS0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWRlW3hlLTNdLFdlLmFkZFZlcnRleChkZVt4ZS0zXSxkZVt4ZS0xXSwib2RkIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9ZGVbeGUtM10sV2UuYWRkVmVydGV4KGRlW3hlLTNdLGRlW3hlLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY5OnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDcwOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDcxOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWRlW3hlXSxXZS5hZGRWZXJ0ZXgoZGVbeGVdKTticmVhaztjYXNlIDczOmRlW3hlLTFdLnRleHQ9ZGVbeGVdLHRoaXMuJD1kZVt4ZS0xXTticmVhaztjYXNlIDc0OmNhc2UgNzU6ZGVbeGUtMl0udGV4dD1kZVt4ZS0xXSx0aGlzLiQ9ZGVbeGUtMl07YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9ZGVbeGVdO2JyZWFrO2Nhc2UgNzc6dmFyIGphPVdlLmRlc3RydWN0TGluayhkZVt4ZV0sZGVbeGUtMl0pO3RoaXMuJD17dHlwZTpqYS50eXBlLHN0cm9rZTpqYS5zdHJva2UsbGVuZ3RoOmphLmxlbmd0aCx0ZXh0OmRlW3hlLTFdfTticmVhaztjYXNlIDc4OnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzk6dGhpcy4kPXt0ZXh0OmRlW3hlLTFdLnRleHQrIiIrZGVbeGVdLHR5cGU6ZGVbeGUtMV0udHlwZX07YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9e3RleHQ6ZGVbeGVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0OmRlW3hlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgODI6dmFyIGphPVdlLmRlc3RydWN0TGluayhkZVt4ZV0pO3RoaXMuJD17dHlwZTpqYS50eXBlLHN0cm9rZTpqYS5zdHJva2UsbGVuZ3RoOmphLmxlbmd0aH07YnJlYWs7Y2FzZSA4Mzp0aGlzLiQ9ZGVbeGUtMV07YnJlYWs7Y2FzZSA4NDp0aGlzLiQ9e3RleHQ6ZGVbeGVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDg1OnRoaXMuJD17dGV4dDpkZVt4ZS0xXS50ZXh0KyIiK2RlW3hlXSx0eXBlOmRlW3hlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODY6dGhpcy4kPXt0ZXh0OmRlW3hlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDg3OmNhc2UgMTAyOnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDk5OnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTAwOnRoaXMuJD17dGV4dDpkZVt4ZS0xXS50ZXh0KyIiK2RlW3hlXSx0eXBlOmRlW3hlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMTAxOnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD1kZVt4ZS00XSxXZS5hZGRDbGFzcyhkZVt4ZS0yXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1kZVt4ZS00XSxXZS5zZXRDbGFzcyhkZVt4ZS0yXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTA1OmNhc2UgMTEzOnRoaXMuJD1kZVt4ZS0xXSxXZS5zZXRDbGlja0V2ZW50KGRlW3hlLTFdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMDY6Y2FzZSAxMTQ6dGhpcy4kPWRlW3hlLTNdLFdlLnNldENsaWNrRXZlbnQoZGVbeGUtM10sZGVbeGUtMl0pLFdlLnNldFRvb2x0aXAoZGVbeGUtM10sZGVbeGVdKTticmVhaztjYXNlIDEwNzp0aGlzLiQ9ZGVbeGUtMl0sV2Uuc2V0Q2xpY2tFdmVudChkZVt4ZS0yXSxkZVt4ZS0xXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTA4OnRoaXMuJD1kZVt4ZS00XSxXZS5zZXRDbGlja0V2ZW50KGRlW3hlLTRdLGRlW3hlLTNdLGRlW3hlLTJdKSxXZS5zZXRUb29sdGlwKGRlW3hlLTRdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMDk6dGhpcy4kPWRlW3hlLTJdLFdlLnNldExpbmsoZGVbeGUtMl0sZGVbeGVdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9ZGVbeGUtNF0sV2Uuc2V0TGluayhkZVt4ZS00XSxkZVt4ZS0yXSksV2Uuc2V0VG9vbHRpcChkZVt4ZS00XSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1kZVt4ZS00XSxXZS5zZXRMaW5rKGRlW3hlLTRdLGRlW3hlLTJdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWRlW3hlLTZdLFdlLnNldExpbmsoZGVbeGUtNl0sZGVbeGUtNF0sZGVbeGVdKSxXZS5zZXRUb29sdGlwKGRlW3hlLTZdLGRlW3hlLTJdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9ZGVbeGUtMV0sV2Uuc2V0TGluayhkZVt4ZS0xXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTE2OnRoaXMuJD1kZVt4ZS0zXSxXZS5zZXRMaW5rKGRlW3hlLTNdLGRlW3hlLTJdKSxXZS5zZXRUb29sdGlwKGRlW3hlLTNdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWRlW3hlLTNdLFdlLnNldExpbmsoZGVbeGUtM10sZGVbeGUtMl0sZGVbeGVdKTticmVhaztjYXNlIDExODp0aGlzLiQ9ZGVbeGUtNV0sV2Uuc2V0TGluayhkZVt4ZS01XSxkZVt4ZS00XSxkZVt4ZV0pLFdlLnNldFRvb2x0aXAoZGVbeGUtNV0sZGVbeGUtMl0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1kZVt4ZS00XSxXZS5hZGRWZXJ0ZXgoZGVbeGUtMl0sdm9pZCAwLHZvaWQgMCxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1kZVt4ZS00XSxXZS51cGRhdGVMaW5rKFtkZVt4ZS0yXV0sZGVbeGVdKTticmVhaztjYXNlIDEyMTp0aGlzLiQ9ZGVbeGUtNF0sV2UudXBkYXRlTGluayhkZVt4ZS0yXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTIyOnRoaXMuJD1kZVt4ZS04XSxXZS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW2RlW3hlLTZdXSxkZVt4ZS0yXSksV2UudXBkYXRlTGluayhbZGVbeGUtNl1dLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWRlW3hlLThdLFdlLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShkZVt4ZS02XSxkZVt4ZS0yXSksV2UudXBkYXRlTGluayhkZVt4ZS02XSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTI0OnRoaXMuJD1kZVt4ZS02XSxXZS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW2RlW3hlLTRdXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTI1OnRoaXMuJD1kZVt4ZS02XSxXZS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoZGVbeGUtNF0sZGVbeGVdKTticmVhaztjYXNlIDEyNjpjYXNlIDEyODp0aGlzLiQ9W2RlW3hlXV07YnJlYWs7Y2FzZSAxMjc6Y2FzZSAxMjk6ZGVbeGUtMl0ucHVzaChkZVt4ZV0pLHRoaXMuJD1kZVt4ZS0yXTticmVhaztjYXNlIDEzMTp0aGlzLiQ9ZGVbeGUtMV0rZGVbeGVdO2JyZWFrO2Nhc2UgMTc5OnRoaXMuJD1kZVt4ZV07YnJlYWs7Y2FzZSAxODA6dGhpcy4kPWRlW3hlLTFdKyIiK2RlW3hlXTticmVhaztjYXNlIDE4Mjp0aGlzLiQ9ZGVbeGUtMV0rIiIrZGVbeGVdO2JyZWFrO2Nhc2UgMTgzOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDE4NDp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAxODU6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMTg2OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsOTplLDEwOnIsMTI6bn0sezE6WzNdfSx0KGksYSx7NTo2fSksezQ6Nyw5OmUsMTA6ciwxMjpufSx7NDo4LDk6ZSwxMDpyLDEyOm59LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMzOjI0LDM0OmQsMzY6cCwzODptLDQyOjI4LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4Mzp2LDg0OngsODU6Yiw4Njp3LDg3Ol8sODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlIsMTIwOkMsMTIxOk8sMTIyOk4sMTIzOlB9LHQoaSxbMiw5XSksdChpLFsyLDEwXSksdChpLFsyLDExXSksezg6WzEsNTRdLDk6WzEsNTVdLDEwOkYsMTU6NTMsMTg6NTZ9LHQoQixbMiwzXSksdChCLFsyLDRdKSx0KEIsWzIsNV0pLHQoQixbMiw2XSksdChCLFsyLDddKSx0KEIsWzIsOF0pLHs4OkcsOTp6LDExOlcsMjE6NTgsNDE6NTksNzI6NjMsNzU6WzEsNjRdLDc3OlsxLDY1XX0sezg6Ryw5OnosMTE6VywyMTo2Nn0sezg6Ryw5OnosMTE6VywyMTo2N30sezg6Ryw5OnosMTE6VywyMTo2OH0sezg6Ryw5OnosMTE6VywyMTo2OX0sezg6Ryw5OnosMTE6VywyMTo3MH0sezg6Ryw5OnosMTA6WzEsNzFdLDExOlcsMjE6NzJ9LHQoQixbMiwzNl0pLHszNTpbMSw3M119LHszNzpbMSw3NF19LHQoQixbMiwzOV0pLHQoWixbMiw1MF0sezE4Ojc1LDM5Ojc2LDEwOkYsNDA6an0pLHsxMDpbMSw3OF19LHsxMDpbMSw3OV19LHsxMDpbMSw4MF19LHsxMDpbMSw4MV19LHsxNDpvZSw0NDpLLDYwOmVlLDc5OlsxLDg1XSw4ODpKLDk0OlsxLDgyXSw5NjpbMSw4M10sMTAwOjg0LDEwNDpILDEwNTpxLDEwODpRLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZSwxMTk6ODZ9LHQoQixbMiwxODNdKSx0KEIsWzIsMTg0XSksdChCLFsyLDE4NV0pLHQoQixbMiwxODZdKSx0KE5lLFsyLDUxXSksdChOZSxbMiw1NF0sezQ2OlsxLDk4XX0pLHQoc2UsWzIsNzJdLHsxMTI6MTExLDI5OlsxLDk5XSw0NDpnLDQ4OlsxLDEwMF0sNTA6WzEsMTAxXSw1MjpbMSwxMDJdLDU0OlsxLDEwM10sNTY6WzEsMTA0XSw1ODpbMSwxMDVdLDYwOnksNjM6WzEsMTA2XSw2NTpbMSwxMDddLDY3OlsxLDEwOF0sNjg6WzEsMTA5XSw3MDpbMSwxMTBdLDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEzOkQsMTE0OmssMTE1OlJ9KSx0KGtlLFsyLDE3OV0pLHQoa2UsWzIsMTQwXSksdChrZSxbMiwxNDFdKSx0KGtlLFsyLDE0Ml0pLHQoa2UsWzIsMTQzXSksdChrZSxbMiwxNDRdKSx0KGtlLFsyLDE0NV0pLHQoa2UsWzIsMTQ2XSksdChrZSxbMiwxNDddKSx0KGtlLFsyLDE0OF0pLHQoa2UsWzIsMTQ5XSksdChrZSxbMiwxNTBdKSx0KGksWzIsMTJdKSx0KGksWzIsMThdKSx0KGksWzIsMTldKSx7OTpbMSwxMTJdfSx0KFJlLFsyLDI2XSx7MTg6MTEzLDEwOkZ9KSx0KEIsWzIsMjddKSx7NDI6MTE0LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sdChCLFsyLDQwXSksdChCLFsyLDQxXSksdChCLFsyLDQyXSksdChDZSxbMiw3Nl0sezczOjExNSw2MjpbMSwxMTddLDc0OlsxLDExNl19KSx7NzY6MTE4LDc4OjExOSw3OTpbMSwxMjBdLDgwOlsxLDEyMV0sMTE1OlBlLDExODpJZX0sdChbNDQsNjAsNjIsNzQsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sWzIsODJdKSx0KEIsWzIsMjhdKSx0KEIsWzIsMjldKSx0KEIsWzIsMzBdKSx0KEIsWzIsMzFdKSx0KEIsWzIsMzJdKSx7MTA6JGUsMTI6eWUsMTQ6WCwyNzpmZSwyODoxMjQsMzI6aGUsNDQ6Z2UsNjA6bmUsNzU6dmUsNzk6WzEsMTI2XSw4MDpbMSwxMjddLDgyOjEzNyw4MzpVLDg0OlRlLDg1OmllLDg2OkVlLDg3OkFlLDg4OkdlLDg5OkJlLDkwOjEyNSwxMDQ6bWUsMTA4OkhlLDExMDpPZSwxMTM6ZXQsMTE0OmJ0LDExNTprdH0sdCh2dCxhLHs1OjE1MH0pLHQoQixbMiwzN10pLHQoQixbMiwzOF0pLHQoWixbMiw0OF0sezQ0OnJ0fSksdChaLFsyLDQ5XSx7MTg6MTUyLDEwOkYsNDA6eXR9KSx0KE5lLFsyLDQ0XSksezQ0OmcsNDc6MTU0LDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlJ9LHsxMDE6WzEsMTU1XSwxMDI6MTU2LDEwNDpbMSwxNTddfSx7NDQ6Zyw0NzoxNTgsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezQ0OmcsNDc6MTU5LDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlJ9LHQoVWUsWzIsMTA1XSx7MTA6WzEsMTYwXSw5NTpbMSwxNjFdfSksezc5OlsxLDE2Ml19LHQoVWUsWzIsMTEzXSx7MTE5OjE2NCwxMDpbMSwxNjNdLDE0Om9lLDQ0OkssNjA6ZWUsODg6SiwxMDQ6SCwxMDU6cSwxMDg6USwxMTA6YWUsMTEzOnVlLDExNDpjZSwxMTU6dGV9KSx0KFVlLFsyLDExNV0sezEwOlsxLDE2NV19KSx0KHR0LFsyLDE4MV0pLHQodHQsWzIsMTY4XSksdCh0dCxbMiwxNjldKSx0KHR0LFsyLDE3MF0pLHQodHQsWzIsMTcxXSksdCh0dCxbMiwxNzJdKSx0KHR0LFsyLDE3M10pLHQodHQsWzIsMTc0XSksdCh0dCxbMiwxNzVdKSx0KHR0LFsyLDE3Nl0pLHQodHQsWzIsMTc3XSksdCh0dCxbMiwxNzhdKSx7NDQ6Zyw0NzoxNjYsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezMwOjE2Nyw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoxNzUsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTc3LDUwOlsxLDE3Nl0sNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTc4LDY3Omh0LDc5OkV0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezMwOjE3OSw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoxODAsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MTA4OlsxLDE4MV19LHszMDoxODIsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTgzLDY1OlsxLDE4NF0sNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTg1LDY3Omh0LDc5OkV0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezMwOjE4Niw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoxODcsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KGtlLFsyLDE4MF0pLHQoaSxbMiwyMF0pLHQoUmUsWzIsMjVdKSx0KFosWzIsNDZdLHszOToxODgsMTg6MTg5LDEwOkYsNDA6an0pLHQoQ2UsWzIsNzNdLHsxMDpbMSwxOTBdfSksezEwOlsxLDE5MV19LHszMDoxOTIsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7Nzc6WzEsMTkzXSw3ODoxOTQsMTE1OlBlLDExODpJZX0sdChDdCxbMiw3OF0pLHQoQ3QsWzIsODBdKSx0KEN0LFsyLDgxXSksdChDdCxbMiwxNjZdKSx0KEN0LFsyLDE2N10pLHs4OkcsOTp6LDEwOiRlLDExOlcsMTI6eWUsMTQ6WCwyMToxOTYsMjc6ZmUsMjk6WzEsMTk1XSwzMjpoZSw0NDpnZSw2MDpuZSw3NTp2ZSw4MjoxMzcsODM6VSw4NDpUZSw4NTppZSw4NjpFZSw4NzpBZSw4ODpHZSw4OTpCZSw5MDoxOTcsMTA0Om1lLDEwODpIZSwxMTA6T2UsMTEzOmV0LDExNDpidCwxMTU6a3R9LHQocHQsWzIsOTldKSx0KHB0LFsyLDEwMV0pLHQocHQsWzIsMTAyXSksdChwdCxbMiwxNTVdKSx0KHB0LFsyLDE1Nl0pLHQocHQsWzIsMTU3XSksdChwdCxbMiwxNThdKSx0KHB0LFsyLDE1OV0pLHQocHQsWzIsMTYwXSksdChwdCxbMiwxNjFdKSx0KHB0LFsyLDE2Ml0pLHQocHQsWzIsMTYzXSksdChwdCxbMiwxNjRdKSx0KHB0LFsyLDE2NV0pLHQocHQsWzIsODhdKSx0KHB0LFsyLDg5XSksdChwdCxbMiw5MF0pLHQocHQsWzIsOTFdKSx0KHB0LFsyLDkyXSksdChwdCxbMiw5M10pLHQocHQsWzIsOTRdKSx0KHB0LFsyLDk1XSksdChwdCxbMiw5Nl0pLHQocHQsWzIsOTddKSx0KHB0LFsyLDk4XSksezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDE5OF0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDgzOnYsODQ6eCw4NTpiLDg2OncsODc6Xyw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6UiwxMjA6QywxMjE6TywxMjI6TiwxMjM6UH0sezEwOkYsMTg6MTk5fSx7NDQ6WzEsMjAwXX0sdChOZSxbMiw0M10pLHsxMDpbMSwyMDFdLDQ0OmcsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjoxMTEsMTEzOkQsMTE0OmssMTE1OlJ9LHsxMDpbMSwyMDJdfSx7MTA6WzEsMjAzXSwxMDU6WzEsMjA0XX0sdChCdCxbMiwxMjZdKSx7MTA6WzEsMjA1XSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6MTExLDExMzpELDExNDprLDExNTpSfSx7MTA6WzEsMjA2XSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6MTExLDExMzpELDExNDprLDExNTpSfSx7Nzk6WzEsMjA3XX0sdChVZSxbMiwxMDddLHsxMDpbMSwyMDhdfSksdChVZSxbMiwxMDldLHsxMDpbMSwyMDldfSksezc5OlsxLDIxMF19LHQodHQsWzIsMTgyXSksezc5OlsxLDIxMV0sOTc6WzEsMjEyXX0sdChOZSxbMiw1NV0sezExMjoxMTEsNDQ6Zyw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEzOkQsMTE0OmssMTE1OlJ9KSx7MzE6WzEsMjEzXSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHQoVHIsWzIsODRdKSx0KFRyLFsyLDg2XSksdChUcixbMiw4N10pLHQoVHIsWzIsMTUxXSksdChUcixbMiwxNTJdKSx0KFRyLFsyLDE1M10pLHQoVHIsWzIsMTU0XSksezQ5OlsxLDIxNV0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MjE2LDY3Omh0LDc5OkV0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezUxOlsxLDIxN10sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NTM6WzEsMjE4XSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHs1NTpbMSwyMTldLDY3Omh0LDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezU3OlsxLDIyMF0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NjA6WzEsMjIxXX0sezY0OlsxLDIyMl0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NjY6WzEsMjIzXSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoyMjQsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzE6WzEsMjI1XSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHs2NzpodCw2OTpbMSwyMjZdLDcxOlsxLDIyN10sODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7Njc6aHQsNjk6WzEsMjI5XSw3MTpbMSwyMjhdLDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sdChaLFsyLDQ1XSx7MTg6MTUyLDEwOkYsNDA6eXR9KSx0KFosWzIsNDddLHs0NDpydH0pLHQoQ2UsWzIsNzVdKSx0KENlLFsyLDc0XSksezYyOlsxLDIzMF0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KENlLFsyLDc3XSksdChDdCxbMiw3OV0pLHszMDoyMzEsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KHZ0LGEsezU6MjMyfSksdChwdCxbMiwxMDBdKSx0KEIsWzIsMzVdKSx7NDM6MjMzLDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezEwOkYsMTg6MjM0fSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjM1LDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjQ2LDEwMzpbMSwyNDddLDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjQ4LDEwMzpbMSwyNDldLDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA0OlsxLDI1MF19LHsxMDp5ciw2MDpvciw4Mzpsbiw5MToyNTEsMTA0Ok9yLDEwNjoyMzYsMTA3OjIzNywxMDg6aWksMTA5Om1uLDExMDpPbiwxMTE6X3J9LHs0NDpnLDQ3OjI1Miw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx0KFVlLFsyLDEwNl0pLHs3OTpbMSwyNTNdfSx7Nzk6WzEsMjU0XSw5NzpbMSwyNTVdfSx0KFVlLFsyLDExNF0pLHQoVWUsWzIsMTE2XSx7MTA6WzEsMjU2XX0pLHQoVWUsWzIsMTE3XSksdChzZSxbMiw1Nl0pLHQoVHIsWzIsODVdKSx0KHNlLFsyLDU3XSksezUxOlsxLDI1N10sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KHNlLFsyLDY0XSksdChzZSxbMiw1OV0pLHQoc2UsWzIsNjBdKSx0KHNlLFsyLDYxXSksezEwODpbMSwyNThdfSx0KHNlLFsyLDYzXSksdChzZSxbMiw2NV0pLHs2NjpbMSwyNTldLDY3Omh0LDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sdChzZSxbMiw2N10pLHQoc2UsWzIsNjhdKSx0KHNlLFsyLDcwXSksdChzZSxbMiw2OV0pLHQoc2UsWzIsNzFdKSx0KFsxMCw0NCw2MCw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxbMiw4M10pLHszMTpbMSwyNjBdLDY3Omh0LDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDI2MV0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDgzOnYsODQ6eCw4NTpiLDg2OncsODc6Xyw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6UiwxMjA6QywxMjE6TywxMjI6TiwxMjM6UH0sdChOZSxbMiw1M10pLHs0MzoyNjIsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx0KFVlLFsyLDExOV0sezEwNTptaX0pLHQodnMsWzIsMTI4XSx7MTA3OjI2NCwxMDp5ciw2MDpvciw4MzpsbiwxMDQ6T3IsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSksdChQbixbMiwxMzBdKSx0KFBuLFsyLDEzMl0pLHQoUG4sWzIsMTMzXSksdChQbixbMiwxMzRdKSx0KFBuLFsyLDEzNV0pLHQoUG4sWzIsMTM2XSksdChQbixbMiwxMzddKSx0KFBuLFsyLDEzOF0pLHQoUG4sWzIsMTM5XSksdChVZSxbMiwxMjBdLHsxMDU6bWl9KSx7MTA6WzEsMjY1XX0sdChVZSxbMiwxMjFdLHsxMDU6bWl9KSx7MTA6WzEsMjY2XX0sdChCdCxbMiwxMjddKSx0KFVlLFsyLDEwM10sezEwNTptaX0pLHQoVWUsWzIsMTA0XSx7MTEyOjExMSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTM6RCwxMTQ6aywxMTU6Un0pLHQoVWUsWzIsMTA4XSksdChVZSxbMiwxMTBdLHsxMDpbMSwyNjddfSksdChVZSxbMiwxMTFdKSx7OTc6WzEsMjY4XX0sezUxOlsxLDI2OV19LHs2MjpbMSwyNzBdfSx7NjY6WzEsMjcxXX0sezg6Ryw5OnosMTE6VywyMToyNzJ9LHQoQixbMiwzNF0pLHQoTmUsWzIsNTJdKSx7MTA6eXIsNjA6b3IsODM6bG4sMTA0Ok9yLDEwNjoyNzMsMTA3OjIzNywxMDg6aWksMTA5Om1uLDExMDpPbiwxMTE6X3J9LHQoUG4sWzIsMTMxXSksezE0Om9lLDQ0OkssNjA6ZWUsODg6SiwxMDA6Mjc0LDEwNDpILDEwNTpxLDEwODpRLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZSwxMTk6ODZ9LHsxNDpvZSw0NDpLLDYwOmVlLDg4OkosMTAwOjI3NSwxMDQ6SCwxMDU6cSwxMDg6USwxMTA6YWUsMTEzOnVlLDExNDpjZSwxMTU6dGUsMTE5Ojg2fSx7OTc6WzEsMjc2XX0sdChVZSxbMiwxMThdKSx0KHNlLFsyLDU4XSksezMwOjI3Nyw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHQoc2UsWzIsNjZdKSx0KHZ0LGEsezU6Mjc4fSksdCh2cyxbMiwxMjldLHsxMDc6MjY0LDEwOnlyLDYwOm9yLDgzOmxuLDEwNDpPciwxMDg6aWksMTA5Om1uLDExMDpPbiwxMTE6X3J9KSx0KFVlLFsyLDEyNF0sezExOToxNjQsMTA6WzEsMjc5XSwxNDpvZSw0NDpLLDYwOmVlLDg4OkosMTA0OkgsMTA1OnEsMTA4OlEsMTEwOmFlLDExMzp1ZSwxMTQ6Y2UsMTE1OnRlfSksdChVZSxbMiwxMjVdLHsxMTk6MTY0LDEwOlsxLDI4MF0sMTQ6b2UsNDQ6Syw2MDplZSw4ODpKLDEwNDpILDEwNTpxLDEwODpRLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZX0pLHQoVWUsWzIsMTEyXSksezMxOlsxLDI4MV0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjgyXSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODM6diw4NDp4LDg1OmIsODY6dyw4NzpfLDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSLDEyMDpDLDEyMTpPLDEyMjpOLDEyMzpQfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjgzLDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6Mjg0LDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx0KHNlLFsyLDYyXSksdChCLFsyLDMzXSksdChVZSxbMiwxMjJdLHsxMDU6bWl9KSx0KFVlLFsyLDEyM10sezEwNTptaX0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oQXQsUHQpe2lmKFB0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQXQpO2Vsc2V7dmFyIHd0PW5ldyBFcnJvcihBdCk7dGhyb3cgd3QuaGFzaD1QdCx3dH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihBdCl7dmFyIFB0PXRoaXMsd3Q9WzBdLFdlPVtdLEZ0PVtudWxsXSxkZT1bXSxnbj10aGlzLnRhYmxlLHhlPSIiLGphPTAsVzE9MCxZMT0wLHExPTIsWDE9MSxvcD1kZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxLbj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGNhPXt5eTp7fX07Zm9yKHZhciB0YyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHRjKSYmKGNhLnl5W3RjXT10aGlzLnl5W3RjXSk7S24uc2V0SW5wdXQoQXQsY2EueXkpLGNhLnl5LmxleGVyPUtuLGNhLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBLbi55eWxsb2M+InUiJiYoS24ueXlsbG9jPXt9KTt2YXIgV2Y9S24ueXlsbG9jO2RlLnB1c2goV2YpO3ZhciBqMT1Lbi5vcHRpb25zJiZLbi5vcHRpb25zLnJhbmdlczt0eXBlb2YgY2EueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Y2EueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gVEYoS2Epe3d0Lmxlbmd0aD13dC5sZW5ndGgtMipLYSxGdC5sZW5ndGg9RnQubGVuZ3RoLUthLGRlLmxlbmd0aD1kZS5sZW5ndGgtS2F9byhURiwicG9wU3RhY2siKTtmdW5jdGlvbiBZZigpe3ZhciBLYTtyZXR1cm4gS2E9V2UucG9wKCl8fEtuLmxleCgpfHxYMSx0eXBlb2YgS2EhPSJudW1iZXIiJiYoS2EgaW5zdGFuY2VvZiBBcnJheSYmKFdlPUthLEthPVdlLnBvcCgpKSxLYT1QdC5zeW1ib2xzX1tLYV18fEthKSxLYX1vKFlmLCJsZXgiKTtmb3IodmFyIHVhLEsxLEVuLE9pLGtGLGxwLHJjPXt9LHFmLENvLHpiLFhmOzspe2lmKEVuPXd0W3d0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0VuXT9PaT10aGlzLmRlZmF1bHRBY3Rpb25zW0VuXTooKHVhPT09bnVsbHx8dHlwZW9mIHVhPiJ1IikmJih1YT1ZZigpKSxPaT1nbltFbl0mJmduW0VuXVt1YV0pLHR5cGVvZiBPaT4idSJ8fCFPaS5sZW5ndGh8fCFPaVswXSl7dmFyIGNwPSIiO1hmPVtdO2ZvcihxZiBpbiBnbltFbl0pdGhpcy50ZXJtaW5hbHNfW3FmXSYmcWY+cTEmJlhmLnB1c2goIiciK3RoaXMudGVybWluYWxzX1txZl0rIiciKTtLbi5zaG93UG9zaXRpb24/Y3A9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoamErMSkrYDoKYCtLbi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1hmLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bdWFdfHx1YSkrIiciOmNwPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGphKzEpKyI6IFVuZXhwZWN0ZWQgIisodWE9PVgxPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3VhXXx8dWEpKyInIiksdGhpcy5wYXJzZUVycm9yKGNwLHt0ZXh0OktuLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t1YV18fHVhLGxpbmU6S24ueXlsaW5lbm8sbG9jOldmLGV4cGVjdGVkOlhmfSl9aWYoT2lbMF1pbnN0YW5jZW9mIEFycmF5JiZPaS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0VuKyIsIHRva2VuOiAiK3VhKTtzd2l0Y2goT2lbMF0pe2Nhc2UgMTp3dC5wdXNoKHVhKSxGdC5wdXNoKEtuLnl5dGV4dCksZGUucHVzaChLbi55eWxsb2MpLHd0LnB1c2goT2lbMV0pLHVhPW51bGwsSzE/KHVhPUsxLEsxPW51bGwpOihXMT1Lbi55eWxlbmcseGU9S24ueXl0ZXh0LGphPUtuLnl5bGluZW5vLFdmPUtuLnl5bGxvYyxZMT4wJiZZMS0tKTticmVhaztjYXNlIDI6aWYoQ289dGhpcy5wcm9kdWN0aW9uc19bT2lbMV1dWzFdLHJjLiQ9RnRbRnQubGVuZ3RoLUNvXSxyYy5fJD17Zmlyc3RfbGluZTpkZVtkZS5sZW5ndGgtKENvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6ZGVbZGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46ZGVbZGUubGVuZ3RoLShDb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkZVtkZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGoxJiYocmMuXyQucmFuZ2U9W2RlW2RlLmxlbmd0aC0oQ298fDEpXS5yYW5nZVswXSxkZVtkZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxscD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkocmMsW3hlLFcxLGphLGNhLnl5LE9pWzFdLEZ0LGRlXS5jb25jYXQob3ApKSx0eXBlb2YgbHA8InUiKXJldHVybiBscDtDbyYmKHd0PXd0LnNsaWNlKDAsLTEqQ28qMiksRnQ9RnQuc2xpY2UoMCwtMSpDbyksZGU9ZGUuc2xpY2UoMCwtMSpDbykpLHd0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bT2lbMV1dWzBdKSxGdC5wdXNoKHJjLiQpLGRlLnB1c2gocmMuXyQpLHpiPWduW3d0W3d0Lmxlbmd0aC0yXV1bd3Rbd3QubGVuZ3RoLTFdXSx3dC5wdXNoKHpiKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZ2w9ZnVuY3Rpb24oKXt2YXIga2k9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihQdCx3dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihQdCx3dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoUHQpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQXQsUHQpe3JldHVybiB0aGlzLnl5PVB0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1BdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9QXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUF0LHRoaXMubWF0Y2hlZCs9QXQ7dmFyIFB0PUF0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEF0fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEF0KXt2YXIgUHQ9QXQubGVuZ3RoLHd0PUF0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9QXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVB0KSx0aGlzLm9mZnNldC09UHQ7dmFyIFdlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHd0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09d3QubGVuZ3RoLTEpO3ZhciBGdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46d3Q/KHd0Lmxlbmd0aD09PVdlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrV2VbV2UubGVuZ3RoLXd0Lmxlbmd0aF0ubGVuZ3RoLXd0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRnRbMF0sRnRbMF0rdGhpcy55eWxlbmctUHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihBdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEF0KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgQXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihBdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK0F0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEF0PXRoaXMubWF0Y2g7cmV0dXJuIEF0Lmxlbmd0aDwyMCYmKEF0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1BdC5sZW5ndGgpKSwoQXQuc3Vic3RyKDAsMjApKyhBdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBBdD10aGlzLnBhc3RJbnB1dCgpLFB0PW5ldyBBcnJheShBdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBBdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArUHQrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEF0LFB0KXt2YXIgd3QsV2UsRnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEZ0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEZ0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFdlPUF0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxXZSYmKHRoaXMueXlsaW5lbm8rPVdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOldlP1dlW1dlLmxlbmd0aC0xXS5sZW5ndGgtV2VbV2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rQXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9QXRbMF0sdGhpcy5tYXRjaCs9QXRbMF0sdGhpcy5tYXRjaGVzPUF0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEF0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1BdFswXSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxQdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx3dClyZXR1cm4gd3Q7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGRlIGluIEZ0KXRoaXNbZGVdPUZ0W2RlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgQXQsUHQsd3QsV2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksZGU9MDtkZTxGdC5sZW5ndGg7ZGUrKylpZih3dD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W2RlXV0pLHd0JiYoIVB0fHx3dFswXS5sZW5ndGg+UHRbMF0ubGVuZ3RoKSl7aWYoUHQ9d3QsV2U9ZGUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQXQ9dGhpcy50ZXN0X21hdGNoKHd0LEZ0W2RlXSksQXQhPT0hMSlyZXR1cm4gQXQ7aWYodGhpcy5fYmFja3RyYWNrKXtQdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBQdD8oQXQ9dGhpcy50ZXN0X21hdGNoKFB0LEZ0W1dlXSksQXQhPT0hMT9BdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBQdD10aGlzLm5leHQoKTtyZXR1cm4gUHR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFB0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUHQpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIFB0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFB0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oUHQpe3JldHVybiBQdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFB0fHwwKSxQdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1B0XToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFB0KXt0aGlzLmJlZ2luKFB0KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFB0LHd0LFdlLEZ0KXt2YXIgZGU9RnQ7c3dpdGNoKFdlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzY7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksd3QueXl0ZXh0PSIiLDQwO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDQwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQwO2JyZWFrO2Nhc2UgMTA6bGV0IGduPS9cblxzKi9nO3JldHVybiB3dC55eXRleHQ9d3QueXl0ZXh0LnJlcGxhY2UoZ24sIjxici8+IiksNDA7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNDA7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDE2OnJldHVybiA5NDtjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5NTtjYXNlIDE5OnJldHVybiJNRF9TVFIiO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnJldHVybiA4MztjYXNlIDI2OnJldHVybiAxMDE7Y2FzZSAyNzpyZXR1cm4gODQ7Y2FzZSAyODpyZXR1cm4gMTAzO2Nhc2UgMjk6cmV0dXJuIDg1O2Nhc2UgMzA6cmV0dXJuIDg2O2Nhc2UgMzE6cmV0dXJuIDk2O2Nhc2UgMzI6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiA4NztjYXNlIDM1OnJldHVybiBQdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM2OnJldHVybiBQdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM3OnJldHVybiBQdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM4OnJldHVybiAyNztjYXNlIDM5OnJldHVybiAzMjtjYXNlIDQwOnJldHVybiA5NztjYXNlIDQxOnJldHVybiA5NztjYXNlIDQyOnJldHVybiA5NztjYXNlIDQzOnJldHVybiA5NztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIDEyMDtjYXNlIDU2OnJldHVybiAxMjE7Y2FzZSA1NzpyZXR1cm4gMTIyO2Nhc2UgNTg6cmV0dXJuIDEyMztjYXNlIDU5OnJldHVybiAxMDQ7Y2FzZSA2MDpyZXR1cm4gMTEwO2Nhc2UgNjE6cmV0dXJuIDQ2O2Nhc2UgNjI6cmV0dXJuIDYwO2Nhc2UgNjM6cmV0dXJuIDQ0O2Nhc2UgNjQ6cmV0dXJuIDg7Y2FzZSA2NTpyZXR1cm4gMTA1O2Nhc2UgNjY6cmV0dXJuIDExNDtjYXNlIDY3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gMTE4O2Nhc2UgNzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDc1O2JyZWFrO2Nhc2UgNzI6cmV0dXJuIDExODtjYXNlIDczOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3NTpyZXR1cm4gMTE4O2Nhc2UgNzY6cmV0dXJuIDc3O2Nhc2UgNzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MzticmVhaztjYXNlIDc4OnJldHVybiJURVhUIjtjYXNlIDc5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MjticmVhaztjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7YnJlYWs7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDticmVhaztjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTc7YnJlYWs7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NjticmVhaztjYXNlIDg0OnJldHVybiA1ODtjYXNlIDg1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY3O2JyZWFrO2Nhc2UgODY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDticmVhaztjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYzO2JyZWFrO2Nhc2UgODg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDg5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2JyZWFrO2Nhc2UgOTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2OTticmVhaztjYXNlIDkxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzE7YnJlYWs7Y2FzZSA5MjpyZXR1cm4gMTE2O2Nhc2UgOTM6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2JyZWFrO2Nhc2UgOTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDcwO2JyZWFrO2Nhc2UgOTU6cmV0dXJuIDExNztjYXNlIDk2OnJldHVybiA2NztjYXNlIDk3OnJldHVybiA4OTtjYXNlIDk4OnJldHVybiJTRVAiO2Nhc2UgOTk6cmV0dXJuIDg4O2Nhc2UgMTAwOnJldHVybiAxMTQ7Y2FzZSAxMDE6cmV0dXJuIDExMDtjYXNlIDEwMjpyZXR1cm4gNDQ7Y2FzZSAxMDM6cmV0dXJuIDEwODtjYXNlIDEwNDpyZXR1cm4gMTEzO2Nhc2UgMTA1OnJldHVybiAxMTU7Y2FzZSAxMDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2MjticmVhaztjYXNlIDEwNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MjticmVhaztjYXNlIDEwODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUxO2JyZWFrO2Nhc2UgMTA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDUwO2JyZWFrO2Nhc2UgMTEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzE7YnJlYWs7Y2FzZSAxMTE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksMjk7YnJlYWs7Y2FzZSAxMTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NjticmVhaztjYXNlIDExMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTticmVhaztjYXNlIDExNDpyZXR1cm4iVEVYVCI7Y2FzZSAxMTU6cmV0dXJuIlFVT1RFIjtjYXNlIDExNjpyZXR1cm4gOTtjYXNlIDExNzpyZXR1cm4gMTA7Y2FzZSAxMTg6cmV0dXJuIDExfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpAXHspLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXlwiXSspLywvXig/OltefV4iXSspLywvXig/Olx9KS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18IVwpKykvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7c2hhcGVEYXRhRW5kQnJhY2tldDp7cnVsZXM6WzIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxzaGFwZURhdGFTdHI6e3J1bGVzOls5LDEwLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxzaGFwZURhdGE6e3J1bGVzOls4LDExLDEyLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxNywxOCwyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTQsMTUsMTYsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMSwyNCwzMywzNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sZG90dGVkRWRnZVRleHQ6e3J1bGVzOlsyMSwyNCw3Myw3NSw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sdGhpY2tFZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDcwLDcyLDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxlZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDY3LDY5LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSx0cmFwVGV4dDp7cnVsZXM6WzIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkwLDkxLDkyLDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxlbGxpcHNlVGV4dDp7cnVsZXM6WzIxLDI0LDc2LDc3LDc4LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSx0ZXh0OntydWxlczpbMjEsMjQsNzYsNzksODAsODEsODIsODMsODYsODcsODgsODksOTMsOTQsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTRdLGluY2x1c2l2ZTohMX0sdmVydGV4OntydWxlczpbMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGRpcjp7cnVsZXM6WzIxLDI0LDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2LDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxtZF9zdHJpbmc6e3J1bGVzOlsxOSwyMCwyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjEsMjIsMjMsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDIsNCw3LDEzLDIxLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDcwLDcxLDczLDc0LDc2LDc5LDgxLDgzLDg0LDg1LDg3LDg5LDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNywxMDksMTExLDExMywxMTUsMTE2LDExNywxMThdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4ga2l9KCk7U28ubGV4ZXI9Z2w7ZnVuY3Rpb24gQm4oKXt0aGlzLnl5PXt9fXJldHVybiBvKEJuLCJQYXJzZXIiKSxCbi5wcm90b3R5cGU9U28sU28uUGFyc2VyPUJuLG5ldyBCbn0oKTtMRC5wYXJzZXI9TEQ7VmllPUxEfSk7dmFyIEdPZSwkT2UsSGllLFdpZT1NKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7R09lPW8oKHQsZSk9PntsZXQgcj1heSxuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gWnMobixpLGEsZSl9LCJmYWRlIiksJE9lPW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gcCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLnJvdWdoLW5vZGUgLmxhYmVsIHRleHQgLCAubm9kZSAubGFiZWwgdGV4dCwgLmltYWdlLXNoYXBlIC5sYWJlbCwgLmljb24tc2hhcGUgLmxhYmVsIHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAua2F0ZXggcGF0aCB7CiAgICBmaWxsOiAjMDAwOwogICAgc3Ryb2tlOiAjMDAwOwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAucm91Z2gtbm9kZSAubGFiZWwsLm5vZGUgLmxhYmVsLCAuaW1hZ2Utc2hhcGUgLmxhYmVsLCAuaWNvbi1zaGFwZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCgogIC5yb290IC5hbmNob3IgcGF0aCB7CiAgICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogICAgc3Ryb2tlLXdpZHRoOiAwOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMi4wcHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHAgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIEZvciBodG1sIGxhYmVscyBvbmx5ICovCiAgLmxhYmVsQmtnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7R09lKHQuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjoKICB9CgogIC5jbHVzdGVyIHJlY3QgewogICAgZmlsbDogJHt0LmNsdXN0ZXJCa2d9OwogICAgc3Ryb2tlOiAke3QuY2x1c3RlckJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLmNsdXN0ZXIgc3BhbiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAvKiAuY2x1c3RlciBkaXYgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9ICovCgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLmZsb3djaGFydFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQoKICByZWN0LnRleHQgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZS13aWR0aDogMDsKICB9CgogIC5pY29uLXNoYXBlLCAuaW1hZ2Utc2hhcGUgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgcGFkZGluZzogMnB4OwogICAgfQogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQpgLCJnZXRTdHlsZXMiKSxIaWU9JE9lfSk7dmFyIGtUPXt9O3ZyKGtULHtkaWFncmFtOigpPT5WT2V9KTt2YXIgVk9lLEVUPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtjTCgpOyRpZSgpO1VpZSgpO1dpZSgpO1ZPZT17cGFyc2VyOlZpZSxkYjpzdyxyZW5kZXJlcjpHaWUsc3R5bGVzOkhpZSxpbml0Om8odD0+e3QuZmxvd2NoYXJ0fHwodC5mbG93Y2hhcnQ9e30pLHQubGF5b3V0JiZhNyh7bGF5b3V0OnQubGF5b3V0fSksdC5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsYTcoe2Zsb3djaGFydDp7YXJyb3dNYXJrZXJBYnNvbHV0ZTp0LmFycm93TWFya2VyQWJzb2x1dGV9fSksc3cuY2xlYXIoKSxzdy5zZXRHZW4oImdlbi0yIil9LCJpbml0Iil9fSk7dmFyIERELEtpZSxRaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtERD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUyxBLEksRCl7Zm9yKEk9SXx8e30sRD1TLmxlbmd0aDtELS07SVtTW0RdXT1BKTtyZXR1cm4gSX0sIm8iKSxlPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLHI9WzEsMTBdLG49WzEsMTFdLGk9WzEsMTJdLGE9WzEsMTNdLHM9WzEsMTRdLGw9WzEsMTVdLHU9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjNdLGQ9WzEsMjRdLHA9WzEsMjVdLG09WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0sZz1bMSwzNF0seT1bMjcsMjgsNDYsNDddLHY9WzQxLDQyLDQzLDQ0LDQ1XSx4PVsxNywzNF0sYj1bMSw1NF0sdz1bMSw1M10sXz1bMTcsMzQsMzYsMzhdLFQ9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsRVJfRElBR1JBTTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCxlbnRpdHlOYW1lOjExLHJlbFNwZWM6MTIsIjoiOjEzLHJvbGU6MTQsQkxPQ0tfU1RBUlQ6MTUsYXR0cmlidXRlczoxNixCTE9DS19TVE9QOjE3LFNRUzoxOCxTUUU6MTksdGl0bGU6MjAsdGl0bGVfdmFsdWU6MjEsYWNjX3RpdGxlOjIyLGFjY190aXRsZV92YWx1ZToyMyxhY2NfZGVzY3I6MjQsYWNjX2Rlc2NyX3ZhbHVlOjI1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjYsQUxQSEFOVU06MjcsRU5USVRZX05BTUU6MjgsYXR0cmlidXRlOjI5LGF0dHJpYnV0ZVR5cGU6MzAsYXR0cmlidXRlTmFtZTozMSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDozMixhdHRyaWJ1dGVDb21tZW50OjMzLEFUVFJJQlVURV9XT1JEOjM0LGF0dHJpYnV0ZUtleVR5cGU6MzUsQ09NTUE6MzYsQVRUUklCVVRFX0tFWTozNyxDT01NRU5UOjM4LGNhcmRpbmFsaXR5OjM5LHJlbFR5cGU6NDAsWkVST19PUl9PTkU6NDEsWkVST19PUl9NT1JFOjQyLE9ORV9PUl9NT1JFOjQzLE9OTFlfT05FOjQ0LE1EX1BBUkVOVDo0NSxOT05fSURFTlRJRllJTkc6NDYsSURFTlRJRllJTkc6NDcsV09SRDo0OCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDEzOiI6IiwxNToiQkxPQ0tfU1RBUlQiLDE3OiJCTE9DS19TVE9QIiwxODoiU1FTIiwxOToiU1FFIiwyMDoidGl0bGUiLDIxOiJ0aXRsZV92YWx1ZSIsMjI6ImFjY190aXRsZSIsMjM6ImFjY190aXRsZV92YWx1ZSIsMjQ6ImFjY19kZXNjciIsMjU6ImFjY19kZXNjcl92YWx1ZSIsMjY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI3OiJBTFBIQU5VTSIsMjg6IkVOVElUWV9OQU1FIiwzNDoiQVRUUklCVVRFX1dPUkQiLDM2OiJDT01NQSIsMzc6IkFUVFJJQlVURV9LRVkiLDM4OiJDT01NRU5UIiw0MToiWkVST19PUl9PTkUiLDQyOiJaRVJPX09SX01PUkUiLDQzOiJPTkVfT1JfTU9SRSIsNDQ6Ik9OTFlfT05FIiw0NToiTURfUEFSRU5UIiw0NjoiTk9OX0lERU5USUZZSU5HIiw0NzoiSURFTlRJRllJTkciLDQ4OiJXT1JEIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDVdLFs5LDRdLFs5LDNdLFs5LDFdLFs5LDddLFs5LDZdLFs5LDRdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFsxMSwxXSxbMTEsMV0sWzE2LDFdLFsxNiwyXSxbMjksMl0sWzI5LDNdLFsyOSwzXSxbMjksNF0sWzMwLDFdLFszMSwxXSxbMzIsMV0sWzMyLDNdLFszNSwxXSxbMzMsMV0sWzEyLDNdLFszOSwxXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzQwLDFdLFs0MCwxXSxbMTQsMV0sWzE0LDFdLFsxNCwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEEsSSxELGssUixDLE8pe3ZhciBOPUMubGVuZ3RoLTE7c3dpdGNoKFIpe2Nhc2UgMTpicmVhaztjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpDW04tMV0ucHVzaChDW05dKSx0aGlzLiQ9Q1tOLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUNbTl07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OmsuYWRkRW50aXR5KENbTi00XSksay5hZGRFbnRpdHkoQ1tOLTJdKSxrLmFkZFJlbGF0aW9uc2hpcChDW04tNF0sQ1tOXSxDW04tMl0sQ1tOLTNdKTticmVhaztjYXNlIDk6ay5hZGRFbnRpdHkoQ1tOLTNdKSxrLmFkZEF0dHJpYnV0ZXMoQ1tOLTNdLENbTi0xXSk7YnJlYWs7Y2FzZSAxMDprLmFkZEVudGl0eShDW04tMl0pO2JyZWFrO2Nhc2UgMTE6ay5hZGRFbnRpdHkoQ1tOXSk7YnJlYWs7Y2FzZSAxMjprLmFkZEVudGl0eShDW04tNl0sQ1tOLTRdKSxrLmFkZEF0dHJpYnV0ZXMoQ1tOLTZdLENbTi0xXSk7YnJlYWs7Y2FzZSAxMzprLmFkZEVudGl0eShDW04tNV0sQ1tOLTNdKTticmVhaztjYXNlIDE0OmsuYWRkRW50aXR5KENbTi0zXSxDW04tMV0pO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNjp0aGlzLiQ9Q1tOXS50cmltKCksay5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6Y2FzZSAxODp0aGlzLiQ9Q1tOXS50cmltKCksay5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTk6Y2FzZSA0Mzp0aGlzLiQ9Q1tOXTticmVhaztjYXNlIDIwOmNhc2UgNDE6Y2FzZSA0Mjp0aGlzLiQ9Q1tOXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMjE6Y2FzZSAyOTp0aGlzLiQ9W0NbTl1dO2JyZWFrO2Nhc2UgMjI6Q1tOXS5wdXNoKENbTi0xXSksdGhpcy4kPUNbTl07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6Q1tOLTFdLGF0dHJpYnV0ZU5hbWU6Q1tOXX07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6Q1tOLTJdLGF0dHJpYnV0ZU5hbWU6Q1tOLTFdLGF0dHJpYnV0ZUtleVR5cGVMaXN0OkNbTl19O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkNbTi0yXSxhdHRyaWJ1dGVOYW1lOkNbTi0xXSxhdHRyaWJ1dGVDb21tZW50OkNbTl19O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkNbTi0zXSxhdHRyaWJ1dGVOYW1lOkNbTi0yXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpDW04tMV0sYXR0cmlidXRlQ29tbWVudDpDW05dfTticmVhaztjYXNlIDI3OmNhc2UgMjg6Y2FzZSAzMTp0aGlzLiQ9Q1tOXTticmVhaztjYXNlIDMwOkNbTi0yXS5wdXNoKENbTl0pLHRoaXMuJD1DW04tMl07YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9Q1tOXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtjYXJkQTpDW05dLHJlbFR5cGU6Q1tOLTFdLGNhcmRCOkNbTi0yXX07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9ay5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM1OnRoaXMuJD1rLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTticmVhaztjYXNlIDM2OnRoaXMuJD1rLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPWsuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9ay5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9ay5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9ay5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjA6ciwyMjpuLDI0OmksMjY6YSwyNzpzLDI4Omx9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTYsMTE6OSwyMDpyLDIyOm4sMjQ6aSwyNjphLDI3OnMsMjg6bH0sdChlLFsyLDVdKSx0KGUsWzIsNl0pLHQoZSxbMiwxMV0sezEyOjE3LDM5OjIwLDE1OlsxLDE4XSwxODpbMSwxOV0sNDE6dSw0MjpoLDQzOmYsNDQ6ZCw0NTpwfSksezIxOlsxLDI2XX0sezIzOlsxLDI3XX0sezI1OlsxLDI4XX0sdChlLFsyLDE4XSksdChtLFsyLDE5XSksdChtLFsyLDIwXSksdChlLFsyLDRdKSx7MTE6MjksMjc6cywyODpsfSx7MTY6MzAsMTc6WzEsMzFdLDI5OjMyLDMwOjMzLDM0Omd9LHsxMTozNSwyNzpzLDI4Omx9LHs0MDozNiw0NjpbMSwzN10sNDc6WzEsMzhdfSx0KHksWzIsMzRdKSx0KHksWzIsMzVdKSx0KHksWzIsMzZdKSx0KHksWzIsMzddKSx0KHksWzIsMzhdKSx0KGUsWzIsMTVdKSx0KGUsWzIsMTZdKSx0KGUsWzIsMTddKSx7MTM6WzEsMzldfSx7MTc6WzEsNDBdfSx0KGUsWzIsMTBdKSx7MTY6NDEsMTc6WzIsMjFdLDI5OjMyLDMwOjMzLDM0Omd9LHszMTo0MiwzNDpbMSw0M119LHszNDpbMiwyN119LHsxOTpbMSw0NF19LHszOTo0NSw0MTp1LDQyOmgsNDM6Ziw0NDpkLDQ1OnB9LHQodixbMiwzOV0pLHQodixbMiw0MF0pLHsxNDo0NiwyNzpbMSw0OV0sMjg6WzEsNDhdLDQ4OlsxLDQ3XX0sdChlLFsyLDldKSx7MTc6WzIsMjJdfSx0KHgsWzIsMjNdLHszMjo1MCwzMzo1MSwzNTo1MiwzNzpiLDM4Ond9KSx0KFsxNywzNCwzNywzOF0sWzIsMjhdKSx0KGUsWzIsMTRdLHsxNTpbMSw1NV19KSx0KFsyNywyOF0sWzIsMzNdKSx0KGUsWzIsOF0pLHQoZSxbMiw0MV0pLHQoZSxbMiw0Ml0pLHQoZSxbMiw0M10pLHQoeCxbMiwyNF0sezMzOjU2LDM2OlsxLDU3XSwzODp3fSksdCh4LFsyLDI1XSksdChfLFsyLDI5XSksdCh4LFsyLDMyXSksdChfLFsyLDMxXSksezE2OjU4LDE3OlsxLDU5XSwyOTozMiwzMDozMywzNDpnfSx0KHgsWzIsMjZdKSx7MzU6NjAsMzc6Yn0sezE3OlsxLDYxXX0sdChlLFsyLDEzXSksdChfLFsyLDMwXSksdChlLFsyLDEyXSldLGRlZmF1bHRBY3Rpb25zOnszNDpbMiwyN10sNDE6WzIsMjJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oQSxJKXtpZihJLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQSk7ZWxzZXt2YXIgRD1uZXcgRXJyb3IoQSk7dGhyb3cgRC5oYXNoPUksRH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihBKXt2YXIgST10aGlzLEQ9WzBdLGs9W10sUj1bbnVsbF0sQz1bXSxPPXRoaXMudGFibGUsTj0iIixQPTAsRj0wLEI9MCxHPTIsej0xLFc9Qy5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxaPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksaj17eXk6e319O2Zvcih2YXIgb2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxvZSkmJihqLnl5W29lXT10aGlzLnl5W29lXSk7Wi5zZXRJbnB1dChBLGoueXkpLGoueXkubGV4ZXI9WixqLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBaLnl5bGxvYz4idSImJihaLnl5bGxvYz17fSk7dmFyIEs9Wi55eWxsb2M7Qy5wdXNoKEspO3ZhciBlZT1aLm9wdGlvbnMmJloub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9ai55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBKKEllKXtELmxlbmd0aD1ELmxlbmd0aC0yKkllLFIubGVuZ3RoPVIubGVuZ3RoLUllLEMubGVuZ3RoPUMubGVuZ3RoLUllfW8oSiwicG9wU3RhY2siKTtmdW5jdGlvbiBIKCl7dmFyIEllO3JldHVybiBJZT1rLnBvcCgpfHxaLmxleCgpfHx6LHR5cGVvZiBJZSE9Im51bWJlciImJihJZSBpbnN0YW5jZW9mIEFycmF5JiYoaz1JZSxJZT1rLnBvcCgpKSxJZT1JLnN5bWJvbHNfW0llXXx8SWUpLEllfW8oSCwibGV4Iik7Zm9yKHZhciBxLFEsYWUsdWUsY2UsdGUsTmU9e30sc2Usa2UsUmUsQ2U7Oyl7aWYoYWU9RFtELmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2FlXT91ZT10aGlzLmRlZmF1bHRBY3Rpb25zW2FlXTooKHE9PT1udWxsfHx0eXBlb2YgcT4idSIpJiYocT1IKCkpLHVlPU9bYWVdJiZPW2FlXVtxXSksdHlwZW9mIHVlPiJ1Inx8IXVlLmxlbmd0aHx8IXVlWzBdKXt2YXIgUGU9IiI7Q2U9W107Zm9yKHNlIGluIE9bYWVdKXRoaXMudGVybWluYWxzX1tzZV0mJnNlPkcmJkNlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tzZV0rIiciKTtaLnNob3dQb3NpdGlvbj9QZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQKzEpK2A6CmArWi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0NlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcV18fHEpKyInIjpQZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQKzEpKyI6IFVuZXhwZWN0ZWQgIisocT09ej8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1txXXx8cSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoUGUse3RleHQ6Wi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bcV18fHEsbGluZTpaLnl5bGluZW5vLGxvYzpLLGV4cGVjdGVkOkNlfSl9aWYodWVbMF1pbnN0YW5jZW9mIEFycmF5JiZ1ZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2FlKyIsIHRva2VuOiAiK3EpO3N3aXRjaCh1ZVswXSl7Y2FzZSAxOkQucHVzaChxKSxSLnB1c2goWi55eXRleHQpLEMucHVzaChaLnl5bGxvYyksRC5wdXNoKHVlWzFdKSxxPW51bGwsUT8ocT1RLFE9bnVsbCk6KEY9Wi55eWxlbmcsTj1aLnl5dGV4dCxQPVoueXlsaW5lbm8sSz1aLnl5bGxvYyxCPjAmJkItLSk7YnJlYWs7Y2FzZSAyOmlmKGtlPXRoaXMucHJvZHVjdGlvbnNfW3VlWzFdXVsxXSxOZS4kPVJbUi5sZW5ndGgta2VdLE5lLl8kPXtmaXJzdF9saW5lOkNbQy5sZW5ndGgtKGtlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6Q1tDLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkNbQy5sZW5ndGgtKGtlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkNbQy5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGVlJiYoTmUuXyQucmFuZ2U9W0NbQy5sZW5ndGgtKGtlfHwxKV0ucmFuZ2VbMF0sQ1tDLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHRlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShOZSxbTixGLFAsai55eSx1ZVsxXSxSLENdLmNvbmNhdChXKSksdHlwZW9mIHRlPCJ1IilyZXR1cm4gdGU7a2UmJihEPUQuc2xpY2UoMCwtMSprZSoyKSxSPVIuc2xpY2UoMCwtMSprZSksQz1DLnNsaWNlKDAsLTEqa2UpKSxELnB1c2godGhpcy5wcm9kdWN0aW9uc19bdWVbMV1dWzBdKSxSLnB1c2goTmUuJCksQy5wdXNoKE5lLl8kKSxSZT1PW0RbRC5sZW5ndGgtMl1dW0RbRC5sZW5ndGgtMV1dLEQucHVzaChSZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LEU9ZnVuY3Rpb24oKXt2YXIgUz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEksRCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihJLEQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEkpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy55eT1JfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1BLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUEsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUEsdGhpcy5tYXRjaGVkKz1BO3ZhciBJPUEubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxBfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEEpe3ZhciBJPUEubGVuZ3RoLEQ9QS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUErdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUkpLHRoaXMub2Zmc2V0LT1JO3ZhciBrPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1ELmxlbmd0aC0xKTt2YXIgUj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RD8oRC5sZW5ndGg9PT1rLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkra1trLmxlbmd0aC1ELmxlbmd0aF0ubGVuZ3RoLURbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1JfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1JbMF0sUlswXSt0aGlzLnl5bGVuZy1JXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQS5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLm1hdGNoO3JldHVybiBBLmxlbmd0aDwyMCYmKEErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUEubGVuZ3RoKSksKEEuc3Vic3RyKDAsMjApKyhBLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5wYXN0SW5wdXQoKSxJPW5ldyBBcnJheShBLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEErdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0krIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEEsSSl7dmFyIEQsayxSO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihSPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaz1BWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxrJiYodGhpcy55eWxpbmVubys9ay5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjprP2tbay5sZW5ndGgtMV0ubGVuZ3RoLWtbay5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitBWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUFbMF0sdGhpcy5tYXRjaCs9QVswXSx0aGlzLm1hdGNoZXM9QSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShBWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1BWzBdLEQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxEKXJldHVybiBEO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBDIGluIFIpdGhpc1tDXT1SW0NdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBBLEksRCxrO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIFI9dGhpcy5fY3VycmVudFJ1bGVzKCksQz0wO0M8Ui5sZW5ndGg7QysrKWlmKEQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tSW0NdXSksRCYmKCFJfHxEWzBdLmxlbmd0aD5JWzBdLmxlbmd0aCkpe2lmKEk9RCxrPUMsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQT10aGlzLnRlc3RfbWF0Y2goRCxSW0NdKSxBIT09ITEpcmV0dXJuIEE7aWYodGhpcy5fYmFja3RyYWNrKXtJPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEk/KEE9dGhpcy50ZXN0X21hdGNoKEksUltrXSksQSE9PSExP0E6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgST10aGlzLm5leHQoKTtyZXR1cm4gSXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oSSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEkpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gST4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEkpe3JldHVybiBJPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoSXx8MCksST49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ldOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oSSl7dGhpcy5iZWdpbihJKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEksRCxrLFIpe3ZhciBDPVI7c3dpdGNoKGspe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjI7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNDticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDEwO2Nhc2UgODpicmVhaztjYXNlIDk6cmV0dXJuIDg7Y2FzZSAxMDpyZXR1cm4gMjg7Y2FzZSAxMTpyZXR1cm4gNDg7Y2FzZSAxMjpyZXR1cm4gNDtjYXNlIDEzOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDE1O2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDM2O2Nhc2UgMTU6YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMzc7Y2FzZSAxNzpyZXR1cm4gMzQ7Y2FzZSAxODpyZXR1cm4gMzQ7Y2FzZSAxOTpyZXR1cm4gMzg7Y2FzZSAyMDpicmVhaztjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTc7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gRC55eXRleHRbMF07Y2FzZSAyMzpyZXR1cm4gMTg7Y2FzZSAyNDpyZXR1cm4gMTk7Y2FzZSAyNTpyZXR1cm4gNDE7Y2FzZSAyNjpyZXR1cm4gNDM7Y2FzZSAyNzpyZXR1cm4gNDM7Y2FzZSAyODpyZXR1cm4gNDM7Y2FzZSAyOTpyZXR1cm4gNDE7Y2FzZSAzMDpyZXR1cm4gNDE7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDI7Y2FzZSAzNDpyZXR1cm4gNDI7Y2FzZSAzNTpyZXR1cm4gNDI7Y2FzZSAzNjpyZXR1cm4gNDM7Y2FzZSAzNzpyZXR1cm4gNDI7Y2FzZSAzODpyZXR1cm4gNDM7Y2FzZSAzOTpyZXR1cm4gNDQ7Y2FzZSA0MDpyZXR1cm4gNDQ7Y2FzZSA0MTpyZXR1cm4gNDQ7Y2FzZSA0MjpyZXR1cm4gNDQ7Y2FzZSA0MzpyZXR1cm4gNDE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNDM7Y2FzZSA0NjpyZXR1cm4gNDU7Y2FzZSA0NzpyZXR1cm4gNDY7Y2FzZSA0ODpyZXR1cm4gNDc7Y2FzZSA0OTpyZXR1cm4gNDc7Y2FzZSA1MDpyZXR1cm4gNDY7Y2FzZSA1MTpyZXR1cm4gNDY7Y2FzZSA1MjpyZXR1cm4gNDY7Y2FzZSA1MzpyZXR1cm4gMjc7Y2FzZSA1NDpyZXR1cm4gRC55eXRleHRbMF07Y2FzZSA1NTpyZXR1cm4gNn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFN9KCk7VC5sZXhlcj1FO2Z1bmN0aW9uIEwoKXt0aGlzLnl5PXt9fXJldHVybiBvKEwsIlBhcnNlciIpLEwucHJvdG90eXBlPVQsVC5QYXJzZXI9TCxuZXcgTH0oKTtERC5wYXJzZXI9REQ7S2llPUREfSk7dmFyIEtkLE5ELGpPZSxLT2UsWmllLFFPZSxaT2UsSk9lLGVQZSx0UGUsSmllLGVhZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7VnQoKTtBaSgpO0tkPW5ldyBNYXAsTkQ9W10sak9lPXtaRVJPX09SX09ORToiWkVST19PUl9PTkUiLFpFUk9fT1JfTU9SRToiWkVST19PUl9NT1JFIixPTkVfT1JfTU9SRToiT05FX09SX01PUkUiLE9OTFlfT05FOiJPTkxZX09ORSIsTURfUEFSRU5UOiJNRF9QQVJFTlQifSxLT2U9e05PTl9JREVOVElGWUlORzoiTk9OX0lERU5USUZZSU5HIixJREVOVElGWUlORzoiSURFTlRJRllJTkcifSxaaWU9byhmdW5jdGlvbih0LGU9dm9pZCAwKXtyZXR1cm4gS2QuaGFzKHQpPyFLZC5nZXQodCkuYWxpYXMmJmUmJihLZC5nZXQodCkuYWxpYXM9ZSxZLmluZm8oYEFkZCBhbGlhcyAnJHtlfScgdG8gZW50aXR5ICcke3R9J2ApKTooS2Quc2V0KHQse2F0dHJpYnV0ZXM6W10sYWxpYXM6ZX0pLFkuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6Iix0KSksS2QuZ2V0KHQpfSwiYWRkRW50aXR5IiksUU9lPW8oKCk9PktkLCJnZXRFbnRpdGllcyIpLFpPZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9WmllKHQpLG47Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlyLmF0dHJpYnV0ZXMucHVzaChlW25dKSxZLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixlW25dLmF0dHJpYnV0ZU5hbWUpfSwiYWRkQXR0cmlidXRlcyIpLEpPZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXtlbnRpdHlBOnQscm9sZUE6ZSxlbnRpdHlCOnIscmVsU3BlYzpufTtORC5wdXNoKGkpLFkuZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsaSl9LCJhZGRSZWxhdGlvbnNoaXAiKSxlUGU9bygoKT0+TkQsImdldFJlbGF0aW9uc2hpcHMiKSx0UGU9byhmdW5jdGlvbigpe0tkPW5ldyBNYXAsTkQ9W10sTHIoKX0sImNsZWFyIiksSmllPXtDYXJkaW5hbGl0eTpqT2UsSWRlbnRpZmljYXRpb246S09lLGdldENvbmZpZzpvKCgpPT5wZSgpLmVyLCJnZXRDb25maWciKSxhZGRFbnRpdHk6WmllLGFkZEF0dHJpYnV0ZXM6Wk9lLGdldEVudGl0aWVzOlFPZSxhZGRSZWxhdGlvbnNoaXA6Sk9lLGdldFJlbGF0aW9uc2hpcHM6ZVBlLGNsZWFyOnRQZSxzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixzZXRBY2NEZXNjcmlwdGlvbjpGcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyfX0pO3ZhciBGbCxyUGUsUW8sdGFlPU0oKCk9PnsidXNlIHN0cmljdCI7Rmw9e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LHJQZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixGbC5NRF9QQVJFTlRfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuTURfUEFSRU5UX0VORCkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEZsLk9OTFlfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuT05MWV9PTkVfRU5EKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsMCBMMywxOCBNOSwwIEw5LDE4Iikscj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEZsLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDIxKS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4Iikscj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEZsLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixGbC5PTkVfT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyNyIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuT05FX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwyNykuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMTgiKSxyPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNDgpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpLHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixGbC5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMTgiKX0sImluc2VydE1hcmtlcnMiKSxRbz17RVJNYXJrZXJzOkZsLGluc2VydE1hcmtlcnM6clBlfX0pO3ZhciByYWUsbmFlPU0oKCk9PnsidXNlIHN0cmljdCI7cmFlPS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaX0pO2Z1bmN0aW9uIG5QZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiZyYWUudGVzdCh0KX12YXIgaWFlLGFhZT1NKCgpPT57InVzZSBzdHJpY3QiO25hZSgpO28oblBlLCJ2YWxpZGF0ZSIpO2lhZT1uUGV9KTtmdW5jdGlvbiBzYWUodCxlPTApe3JldHVybiB3YVt0W2UrMF1dK3dhW3RbZSsxXV0rd2FbdFtlKzJdXSt3YVt0W2UrM11dKyItIit3YVt0W2UrNF1dK3dhW3RbZSs1XV0rIi0iK3dhW3RbZSs2XV0rd2FbdFtlKzddXSsiLSIrd2FbdFtlKzhdXSt3YVt0W2UrOV1dKyItIit3YVt0W2UrMTBdXSt3YVt0W2UrMTFdXSt3YVt0W2UrMTJdXSt3YVt0W2UrMTNdXSt3YVt0W2UrMTRdXSt3YVt0W2UrMTVdXX12YXIgd2Esb2FlPU0oKCk9PnsidXNlIHN0cmljdCI7d2E9W107Zm9yKGxldCB0PTA7dDwyNTY7Kyt0KXdhLnB1c2goKHQrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO28oc2FlLCJ1bnNhZmVTdHJpbmdpZnkiKX0pO2Z1bmN0aW9uIGlQZSh0KXtpZighaWFlKHQpKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCBVVUlEIik7bGV0IGUscj1uZXcgVWludDhBcnJheSgxNik7cmV0dXJuIHJbMF09KGU9cGFyc2VJbnQodC5zbGljZSgwLDgpLDE2KSk+Pj4yNCxyWzFdPWU+Pj4xNiYyNTUsclsyXT1lPj4+OCYyNTUsclszXT1lJjI1NSxyWzRdPShlPXBhcnNlSW50KHQuc2xpY2UoOSwxMyksMTYpKT4+Pjgscls1XT1lJjI1NSxyWzZdPShlPXBhcnNlSW50KHQuc2xpY2UoMTQsMTgpLDE2KSk+Pj44LHJbN109ZSYyNTUscls4XT0oZT1wYXJzZUludCh0LnNsaWNlKDE5LDIzKSwxNikpPj4+OCxyWzldPWUmMjU1LHJbMTBdPShlPXBhcnNlSW50KHQuc2xpY2UoMjQsMzYpLDE2KSkvMTA5OTUxMTYyNzc3NiYyNTUsclsxMV09ZS80Mjk0OTY3Mjk2JjI1NSxyWzEyXT1lPj4+MjQmMjU1LHJbMTNdPWU+Pj4xNiYyNTUsclsxNF09ZT4+PjgmMjU1LHJbMTVdPWUmMjU1LHJ9dmFyIGxhZSxjYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYWUoKTtvKGlQZSwicGFyc2UiKTtsYWU9aVBlfSk7ZnVuY3Rpb24gYVBlKHQpe3Q9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHQpKTtsZXQgZT1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2godC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBSRCh0LGUscil7ZnVuY3Rpb24gbihpLGEscyxsKXt2YXIgdTtpZih0eXBlb2YgaT09InN0cmluZyImJihpPWFQZShpKSksdHlwZW9mIGE9PSJzdHJpbmciJiYoYT1sYWUoYSkpLCgodT1hKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUubGVuZ3RoKSE9PTE2KXRocm93IFR5cGVFcnJvcigiTmFtZXNwYWNlIG11c3QgYmUgYXJyYXktbGlrZSAoMTYgaXRlcmFibGUgaW50ZWdlciB2YWx1ZXMsIDAtMjU1KSIpO2xldCBoPW5ldyBVaW50OEFycmF5KDE2K2kubGVuZ3RoKTtpZihoLnNldChhKSxoLnNldChpLGEubGVuZ3RoKSxoPXIoaCksaFs2XT1oWzZdJjE1fGUsaFs4XT1oWzhdJjYzfDEyOCxzKXtsPWx8fDA7Zm9yKGxldCBmPTA7ZjwxNjsrK2Ypc1tsK2ZdPWhbZl07cmV0dXJuIHN9cmV0dXJuIHNhZShoKX1vKG4sImdlbmVyYXRlVVVJRCIpO3RyeXtuLm5hbWU9dH1jYXRjaHt9cmV0dXJuIG4uRE5TPXNQZSxuLlVSTD1vUGUsbn12YXIgc1BlLG9QZSx1YWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvYWUoKTtjYWUoKTtvKGFQZSwic3RyaW5nVG9CeXRlcyIpO3NQZT0iNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IixvUGU9IjZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCI7byhSRCwidjM1Iil9KTtmdW5jdGlvbiBsUGUodCxlLHIsbil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gZSZyXn5lJm47Y2FzZSAxOnJldHVybiBlXnJebjtjYXNlIDI6cmV0dXJuIGUmcl5lJm5eciZuO2Nhc2UgMzpyZXR1cm4gZV5yXm59fWZ1bmN0aW9uIE1EKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gY1BlKHQpe2xldCBlPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXSxyPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF07aWYodHlwZW9mIHQ9PSJzdHJpbmciKXtsZXQgcz11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpO3Q9W107Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDsrK2wpdC5wdXNoKHMuY2hhckNvZGVBdChsKSl9ZWxzZSBBcnJheS5pc0FycmF5KHQpfHwodD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7dC5wdXNoKDEyOCk7bGV0IG49dC5sZW5ndGgvNCsyLGk9TWF0aC5jZWlsKG4vMTYpLGE9bmV3IEFycmF5KGkpO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe2xldCBsPW5ldyBVaW50MzJBcnJheSgxNik7Zm9yKGxldCB1PTA7dTwxNjsrK3UpbFt1XT10W3MqNjQrdSo0XTw8MjR8dFtzKjY0K3UqNCsxXTw8MTZ8dFtzKjY0K3UqNCsyXTw8OHx0W3MqNjQrdSo0KzNdO2Fbc109bH1hW2ktMV1bMTRdPSh0Lmxlbmd0aC0xKSo4L01hdGgucG93KDIsMzIpLGFbaS0xXVsxNF09TWF0aC5mbG9vcihhW2ktMV1bMTRdKSxhW2ktMV1bMTVdPSh0Lmxlbmd0aC0xKSo4JjQyOTQ5NjcyOTU7Zm9yKGxldCBzPTA7czxpOysrcyl7bGV0IGw9bmV3IFVpbnQzMkFycmF5KDgwKTtmb3IobGV0IG09MDttPDE2OysrbSlsW21dPWFbc11bbV07Zm9yKGxldCBtPTE2O208ODA7KyttKWxbbV09TUQobFttLTNdXmxbbS04XV5sW20tMTRdXmxbbS0xNl0sMSk7bGV0IHU9clswXSxoPXJbMV0sZj1yWzJdLGQ9clszXSxwPXJbNF07Zm9yKGxldCBtPTA7bTw4MDsrK20pe2xldCBnPU1hdGguZmxvb3IobS8yMCkseT1NRCh1LDUpK2xQZShnLGgsZixkKStwK2VbZ10rbFttXT4+PjA7cD1kLGQ9ZixmPU1EKGgsMzApPj4+MCxoPXUsdT15fXJbMF09clswXSt1Pj4+MCxyWzFdPXJbMV0raD4+PjAsclsyXT1yWzJdK2Y+Pj4wLHJbM109clszXStkPj4+MCxyWzRdPXJbNF0rcD4+PjB9cmV0dXJuW3JbMF0+PjI0JjI1NSxyWzBdPj4xNiYyNTUsclswXT4+OCYyNTUsclswXSYyNTUsclsxXT4+MjQmMjU1LHJbMV0+PjE2JjI1NSxyWzFdPj44JjI1NSxyWzFdJjI1NSxyWzJdPj4yNCYyNTUsclsyXT4+MTYmMjU1LHJbMl0+PjgmMjU1LHJbMl0mMjU1LHJbM10+PjI0JjI1NSxyWzNdPj4xNiYyNTUsclszXT4+OCYyNTUsclszXSYyNTUscls0XT4+MjQmMjU1LHJbNF0+PjE2JjI1NSxyWzRdPj44JjI1NSxyWzRdJjI1NV19dmFyIGhhZSxmYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGxQZSwiZiIpO28oTUQsIlJPVEwiKTtvKGNQZSwic2hhMSIpO2hhZT1jUGV9KTt2YXIgdVBlLElELGRhZT1NKCgpPT57InVzZSBzdHJpY3QiO3VhZSgpO2ZhZSgpO3VQZT1SRCgidjUiLDgwLGhhZSksSUQ9dVBlfSk7dmFyIHBhZT1NKCgpPT57InVzZSBzdHJpY3QiO2RhZSgpfSk7ZnVuY3Rpb24gYlBlKHQ9IiIsZT0iIil7bGV0IHI9dC5yZXBsYWNlKGhQZSwiIik7cmV0dXJuYCR7Z2FlKGUpfSR7Z2FlKHIpfSR7SUQodCx4UGUpfWB9ZnVuY3Rpb24gZ2FlKHQ9IiIpe3JldHVybiB0Lmxlbmd0aD4wP2Ake3R9LWA6IiJ9dmFyIGhQZSwkaSxlMixmUGUsZFBlLHBQZSxtUGUseWFlLGdQZSxtYWUseVBlLHZQZSx4UGUsdmFlLHhhZT1NKCgpPT57InVzZSBzdHJpY3QiO0dzKCk7cHIoKTtRdigpO1Z0KCk7dXQoKTtocigpO3RhZSgpO2FpKCk7ZnIoKTtwYWUoKTtoUGU9L1teXGRBLVphLXpdKFxXKSovZywkaT17fSxlMj1uZXcgTWFwLGZQZT1vKGZ1bmN0aW9uKHQpe2xldCBlPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgciBvZiBlKSRpW3JdPXRbcl19LCJzZXRDb25mIiksZFBlPW8oKHQsZSxyKT0+e2xldCBuPSRpLmVudGl0eVBhZGRpbmcvMyxpPSRpLmVudGl0eVBhZGRpbmcvMyxhPSRpLmZvbnRTaXplKi44NSxzPWUubm9kZSgpLmdldEJCb3goKSxsPVtdLHU9ITEsaD0hMSxmPTAsZD0wLHA9MCxtPTAsZz1zLmhlaWdodCtuKjIseT0xO3IuZm9yRWFjaCh3PT57dy5hdHRyaWJ1dGVLZXlUeXBlTGlzdCE9PXZvaWQgMCYmdy5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKHU9ITApLHcuYXR0cmlidXRlQ29tbWVudCE9PXZvaWQgMCYmKGg9ITApfSksci5mb3JFYWNoKHc9PntsZXQgXz1gJHtlLm5vZGUoKS5pZH0tYXR0ci0ke3l9YCxUPTAsRT15dSh3LmF0dHJpYnV0ZVR5cGUpLEw9dC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtffS10eXBlYCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIscGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIixhKyJweCIpLnRleHQoRSksUz10LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLGAke199LW5hbWVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixwZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLGErInB4IikudGV4dCh3LmF0dHJpYnV0ZU5hbWUpLEE9e307QS50bj1MLEEubm49UztsZXQgST1MLm5vZGUoKS5nZXRCQm94KCksRD1TLm5vZGUoKS5nZXRCQm94KCk7aWYoZj1NYXRoLm1heChmLEkud2lkdGgpLGQ9TWF0aC5tYXgoZCxELndpZHRoKSxUPU1hdGgubWF4KEkuaGVpZ2h0LEQuaGVpZ2h0KSx1KXtsZXQgaz13LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwP3cuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLFI9dC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtffS1rZXlgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixwZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLGErInB4IikudGV4dChrKTtBLmtuPVI7bGV0IEM9Ui5ub2RlKCkuZ2V0QkJveCgpO3A9TWF0aC5tYXgocCxDLndpZHRoKSxUPU1hdGgubWF4KFQsQy5oZWlnaHQpfWlmKGgpe2xldCBrPXQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7X30tY29tbWVudGApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHBlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsYSsicHgiKS50ZXh0KHcuYXR0cmlidXRlQ29tbWVudHx8IiIpO0EuY249aztsZXQgUj1rLm5vZGUoKS5nZXRCQm94KCk7bT1NYXRoLm1heChtLFIud2lkdGgpLFQ9TWF0aC5tYXgoVCxSLmhlaWdodCl9QS5oZWlnaHQ9VCxsLnB1c2goQSksZys9VCtuKjIseSs9MX0pO2xldCB2PTQ7dSYmKHYrPTIpLGgmJih2Kz0yKTtsZXQgeD1mK2QrcCttLGI9e3dpZHRoOk1hdGgubWF4KCRpLm1pbkVudGl0eVdpZHRoLE1hdGgubWF4KHMud2lkdGgrJGkuZW50aXR5UGFkZGluZyoyLHgraSp2KSksaGVpZ2h0OnIubGVuZ3RoPjA/ZzpNYXRoLm1heCgkaS5taW5FbnRpdHlIZWlnaHQscy5oZWlnaHQrJGkuZW50aXR5UGFkZGluZyoyKX07aWYoci5sZW5ndGg+MCl7bGV0IHc9TWF0aC5tYXgoMCwoYi53aWR0aC14LWkqdikvKHYvMikpO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYi53aWR0aC8yKyIsIisobitzLmhlaWdodC8yKSsiKSIpO2xldCBfPXMuaGVpZ2h0K24qMixUPSJhdHRyaWJ1dGVCb3hPZGQiO2wuZm9yRWFjaChFPT57bGV0IEw9XytuK0UuaGVpZ2h0LzI7RS50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIitMKyIpIik7bGV0IFM9dC5pbnNlcnQoInJlY3QiLCIjIitFLnRuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHtUfWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixmK2kqMit3KS5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0K24qMiksQT1wYXJzZUZsb2F0KFMuYXR0cigieCIpKStwYXJzZUZsb2F0KFMuYXR0cigid2lkdGgiKSk7RS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoQStpKSsiLCIrTCsiKSIpO2xldCBJPXQuaW5zZXJ0KCJyZWN0IiwiIyIrRS5ubi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7VH1gLCEwKS5hdHRyKCJ4IixBKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsZCtpKjIrdykuYXR0cigiaGVpZ2h0IixFLmhlaWdodCtuKjIpLEQ9cGFyc2VGbG9hdChJLmF0dHIoIngiKSkrcGFyc2VGbG9hdChJLmF0dHIoIndpZHRoIikpO2lmKHUpe0Uua24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEQraSkrIiwiK0wrIikiKTtsZXQgaz10Lmluc2VydCgicmVjdCIsIiMiK0Uua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke1R9YCwhMCkuYXR0cigieCIsRCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLHAraSoyK3cpLmF0dHIoImhlaWdodCIsRS5oZWlnaHQrbioyKTtEPXBhcnNlRmxvYXQoay5hdHRyKCJ4IikpK3BhcnNlRmxvYXQoay5hdHRyKCJ3aWR0aCIpKX1oJiYoRS5jbi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRCtpKSsiLCIrTCsiKSIpLHQuaW5zZXJ0KCJyZWN0IiwiIyIrRS5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7VH1gLCJ0cnVlIikuYXR0cigieCIsRCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLG0raSoyK3cpLmF0dHIoImhlaWdodCIsRS5oZWlnaHQrbioyKSksXys9RS5oZWlnaHQrbioyLFQ9VD09PSJhdHRyaWJ1dGVCb3hPZGQiPyJhdHRyaWJ1dGVCb3hFdmVuIjoiYXR0cmlidXRlQm94T2RkIn0pfWVsc2UgYi5oZWlnaHQ9TWF0aC5tYXgoJGkubWluRW50aXR5SGVpZ2h0LGcpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYi53aWR0aC8yKyIsIitiLmhlaWdodC8yKyIpIik7cmV0dXJuIGJ9LCJkcmF3QXR0cmlidXRlcyIpLHBQZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1bLi4uZS5rZXlzKCldLGk7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihhKXtsZXQgcz1iUGUoYSwiZW50aXR5Iik7ZTIuc2V0KGEscyk7bGV0IGw9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIscyk7aT1pPT09dm9pZCAwP3M6aTtsZXQgdT0idGV4dC0iK3MsaD1sLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLHUpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LWZhbWlseSIscGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIiwkaS5mb250U2l6ZSsicHgiKS50ZXh0KGUuZ2V0KGEpLmFsaWFzPz9hKSx7d2lkdGg6ZixoZWlnaHQ6ZH09ZFBlKGwsaCxlLmdldChhKS5hdHRyaWJ1dGVzKSxtPWwuaW5zZXJ0KCJyZWN0IiwiIyIrdSkuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIsZCkubm9kZSgpLmdldEJCb3goKTtyLnNldE5vZGUocyx7d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnN9KX0pLGl9LCJkcmF3RW50aXRpZXMiKSxtUGU9byhmdW5jdGlvbih0LGUpe2Uubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPT12b2lkIDAmJmUubm9kZShyKSE9PXZvaWQgMCYmdC5zZWxlY3QoIiMiK3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLm5vZGUocikueC1lLm5vZGUocikud2lkdGgvMikrIiwiKyhlLm5vZGUocikueS1lLm5vZGUocikuaGVpZ2h0LzIpKyIgKSIpfSl9LCJhZGp1c3RFbnRpdGllcyIpLHlhZT1vKGZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSwiZ2V0RWRnZU5hbWUiKSxnUGU9byhmdW5jdGlvbih0LGUpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocil7ZS5zZXRFZGdlKGUyLmdldChyLmVudGl0eUEpLGUyLmdldChyLmVudGl0eUIpLHtyZWxhdGlvbnNoaXA6cn0seWFlKHIpKX0pLHR9LCJhZGRSZWxhdGlvbnNoaXBzIiksbWFlPTAseVBlPW8oZnVuY3Rpb24odCxlLHIsbixpKXttYWUrKztsZXQgYT1yLmVkZ2UoZTIuZ2V0KGUuZW50aXR5QSksZTIuZ2V0KGUuZW50aXR5QikseWFlKGUpKSxzPW5zKCkueChmdW5jdGlvbih5KXtyZXR1cm4geS54fSkueShmdW5jdGlvbih5KXtyZXR1cm4geS55fSkuY3VydmUoUG8pLGw9dC5pbnNlcnQoInBhdGgiLCIjIituKS5jbGFzc2VkKCJlciByZWxhdGlvbnNoaXBMaW5lIiwhMCkuYXR0cigiZCIscyhhLnBvaW50cykpLnN0eWxlKCJzdHJva2UiLCRpLnN0cm9rZSkuc3R5bGUoImZpbGwiLCJub25lIik7ZS5yZWxTcGVjLnJlbFR5cGU9PT1pLmRiLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmbC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7bGV0IHU9IiI7c3dpdGNoKCRpLmFycm93TWFya2VyQWJzb2x1dGUmJih1PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHU9dS5yZXBsYWNlKC9cKC9nLCJcXCgiKSx1PXUucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5aRVJPX09SX09ORV9FTkQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrUW8uRVJNYXJrZXJzLk9OTFlfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrUW8uRVJNYXJrZXJzLk1EX1BBUkVOVF9FTkQrIikiKTticmVha31zd2l0Y2goZS5yZWxTcGVjLmNhcmRCKXtjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1KyIjIitRby5FUk1hcmtlcnMuWkVST19PUl9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOmwuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdSsiIyIrUW8uRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5PTkVfT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5PTkxZX09ORTpsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5PTkxZX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1KyIjIitRby5FUk1hcmtlcnMuTURfUEFSRU5UX1NUQVJUKyIpIik7YnJlYWt9bGV0IGg9bC5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxmPWwubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoaCouNSksZD0icmVsIittYWUscD1lLnJvbGVBLnNwbGl0KC88YnIgP1wvPi9nKSxtPXQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWwiLCEwKS5hdHRyKCJpZCIsZCkuYXR0cigieCIsZi54KS5hdHRyKCJ5IixmLnkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJmb250LWZhbWlseSIscGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIiwkaS5mb250U2l6ZSsicHgiKTtpZihwLmxlbmd0aD09MSltLnRleHQoZS5yb2xlQSk7ZWxzZXtsZXQgeT0tKHAubGVuZ3RoLTEpKi41O3AuZm9yRWFjaCgodix4KT0+e20uYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGYueCkuYXR0cigiZHkiLGAke3g9PT0wP3k6MX1lbWApLnRleHQodil9KX1sZXQgZz1tLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitkKS5jbGFzc2VkKCJlciByZWxhdGlvbnNoaXBMYWJlbEJveCIsITApLmF0dHIoIngiLGYueC1nLndpZHRoLzIpLmF0dHIoInkiLGYueS1nLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZy53aWR0aCkuYXR0cigiaGVpZ2h0IixnLmhlaWdodCl9LCJkcmF3UmVsYXRpb25zaGlwRnJvbUxheW91dCIpLHZQZT1vKGZ1bmN0aW9uKHQsZSxyLG4peyRpPXBlKCkuZXIsWS5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtsZXQgaT1wZSgpLnNlY3VyaXR5TGV2ZWwsYTtpPT09InNhbmRib3giJiYoYT1WZSgiI2kiK2UpKTtsZXQgbD0oaT09PSJzYW5kYm94Ij9WZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IikpLnNlbGVjdChgW2lkPScke2V9J11gKTtRby5pbnNlcnRNYXJrZXJzKGwsJGkpO2xldCB1O3U9bmV3IElyKHttdWx0aWdyYXBoOiEwLGRpcmVjdGVkOiEwLGNvbXBvdW5kOiExfSkuc2V0R3JhcGgoe3JhbmtkaXI6JGkubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBoPXBQZShsLG4uZGIuZ2V0RW50aXRpZXMoKSx1KSxmPWdQZShuLmRiLmdldFJlbGF0aW9uc2hpcHMoKSx1KTtHdSh1KSxtUGUobCx1KSxmLmZvckVhY2goZnVuY3Rpb24oeSl7eVBlKGwseSx1LGgsbil9KTtsZXQgZD0kaS5kaWFncmFtUGFkZGluZztVdC5pbnNlcnRUaXRsZShsLCJlbnRpdHlUaXRsZVRleHQiLCRpLnRpdGxlVG9wTWFyZ2luLG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2xldCBwPWwubm9kZSgpLmdldEJCb3goKSxtPXAud2lkdGgrZCoyLGc9cC5oZWlnaHQrZCoyO1pyKGwsZyxtLCRpLnVzZU1heFdpZHRoKSxsLmF0dHIoInZpZXdCb3giLGAke3AueC1kfSAke3AueS1kfSAke219ICR7Z31gKX0sImRyYXciKSx4UGU9IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7byhiUGUsImdlbmVyYXRlSWQiKTtvKGdhZSwic3RyV2l0aEh5cGhlbiIpO3ZhZT17c2V0Q29uZjpmUGUsZHJhdzp2UGV9fSk7dmFyIHdQZSxiYWUsd2FlPU0oKCk9PnsidXNlIHN0cmljdCI7d1BlPW8odD0+YAogIC5lbnRpdHlCb3ggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAuYXR0cmlidXRlQm94T2RkIHsKICAgIGZpbGw6ICR7dC5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAuYXR0cmlidXRlQm94RXZlbiB7CiAgICBmaWxsOiAgJHt0LmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW59OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAucmVsYXRpb25zaGlwTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgb3BhY2l0eTogMC43OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgICByZWN0IHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICB9CgogICAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgfQoKICAuZW50aXR5VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9ICAgIAogICNNRF9QQVJFTlRfU1RBUlQgewogICAgZmlsbDogI2Y1ZjVmNSAhaW1wb3J0YW50OwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KICAjTURfUEFSRU5UX0VORCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIApgLCJnZXRTdHlsZXMiKSxiYWU9d1BlfSk7dmFyIFRhZT17fTt2cihUYWUse2RpYWdyYW06KCk9PlRQZX0pO3ZhciBUUGUsa2FlPU0oKCk9PnsidXNlIHN0cmljdCI7UWllKCk7ZWFlKCk7eGFlKCk7d2FlKCk7VFBlPXtwYXJzZXI6S2llLGRiOkppZSxyZW5kZXJlcjp2YWUsc3R5bGVzOmJhZX19KTtmdW5jdGlvbiByaSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQuJHR5cGU9PSJzdHJpbmcifWZ1bmN0aW9uIFRhKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC4kcmVmVGV4dD09InN0cmluZyJ9ZnVuY3Rpb24gT0QodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0Lm5hbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC50eXBlPT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyJ9ZnVuY3Rpb24gWmQodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnJpKHQuY29udGFpbmVyKSYmVGEodC5yZWZlcmVuY2UpJiZ0eXBlb2YgdC5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBobyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmQXJyYXkuaXNBcnJheSh0LmNvbnRlbnQpfWZ1bmN0aW9uIGNmKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC50b2tlblR5cGU9PSJvYmplY3QifWZ1bmN0aW9uIHQyKHQpe3JldHVybiBobyh0KSYmdHlwZW9mIHQuZnVsbFRleHQ9PSJzdHJpbmcifXZhciBRZCxabz1NKCgpPT57InVzZSBzdHJpY3QiO28ocmksImlzQXN0Tm9kZSIpO28oVGEsImlzUmVmZXJlbmNlIik7byhPRCwiaXNBc3ROb2RlRGVzY3JpcHRpb24iKTtvKFpkLCJpc0xpbmtpbmdFcnJvciIpO1FkPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0QXN0UmVmbGVjdGlvbiIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zdWJ0eXBlcz17fSx0aGlzLmFsbFN1YnR5cGVzPXt9fWlzSW5zdGFuY2UoZSxyKXtyZXR1cm4gcmkoZSkmJnRoaXMuaXNTdWJ0eXBlKGUuJHR5cGUscil9aXNTdWJ0eXBlKGUscil7aWYoZT09PXIpcmV0dXJuITA7bGV0IG49dGhpcy5zdWJ0eXBlc1tlXTtufHwobj10aGlzLnN1YnR5cGVzW2VdPXt9KTtsZXQgaT1uW3JdO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7e2xldCBhPXRoaXMuY29tcHV0ZUlzU3VidHlwZShlLHIpO3JldHVybiBuW3JdPWEsYX19Z2V0QWxsU3ViVHlwZXMoZSl7bGV0IHI9dGhpcy5hbGxTdWJ0eXBlc1tlXTtpZihyKXJldHVybiByO3tsZXQgbj10aGlzLmdldEFsbFR5cGVzKCksaT1bXTtmb3IobGV0IGEgb2Ygbil0aGlzLmlzU3VidHlwZShhLGUpJiZpLnB1c2goYSk7cmV0dXJuIHRoaXMuYWxsU3VidHlwZXNbZV09aSxpfX19O28oaG8sImlzQ29tcG9zaXRlQ3N0Tm9kZSIpO28oY2YsImlzTGVhZkNzdE5vZGUiKTtvKHQyLCJpc1Jvb3RDc3ROb2RlIil9KTtmdW5jdGlvbiBDUGUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnR5cGVvZiB0PiJ1Ij8idW5kZWZpbmVkIjp0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIj90LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIFNUKHQpe3JldHVybiEhdCYmdHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1mdW5jdGlvbiB0biguLi50KXtpZih0Lmxlbmd0aD09PTEpe2xldCBlPXRbMF07aWYoZSBpbnN0YW5jZW9mIGZvKXJldHVybiBlO2lmKFNUKGUpKXJldHVybiBuZXcgZm8oKCk9PmVbU3ltYm9sLml0ZXJhdG9yXSgpLHI9PnIubmV4dCgpKTtpZih0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXJldHVybiBuZXcgZm8oKCk9Pih7aW5kZXg6MH0pLHI9PnIuaW5kZXg8ZS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6ZVtyLmluZGV4KytdfTpzcyl9cmV0dXJuIHQubGVuZ3RoPjE/bmV3IGZvKCgpPT4oe2NvbGxJbmRleDowLGFyckluZGV4OjB9KSxlPT57ZG97aWYoZS5pdGVyYXRvcil7bGV0IHI9ZS5pdGVyYXRvci5uZXh0KCk7aWYoIXIuZG9uZSlyZXR1cm4gcjtlLml0ZXJhdG9yPXZvaWQgMH1pZihlLmFycmF5KXtpZihlLmFyckluZGV4PGUuYXJyYXkubGVuZ3RoKXJldHVybntkb25lOiExLHZhbHVlOmUuYXJyYXlbZS5hcnJJbmRleCsrXX07ZS5hcnJheT12b2lkIDAsZS5hcnJJbmRleD0wfWlmKGUuY29sbEluZGV4PHQubGVuZ3RoKXtsZXQgcj10W2UuY29sbEluZGV4KytdO1NUKHIpP2UuaXRlcmF0b3I9cltTeW1ib2wuaXRlcmF0b3JdKCk6ciYmdHlwZW9mIHIubGVuZ3RoPT0ibnVtYmVyIiYmKGUuYXJyYXk9cil9fXdoaWxlKGUuaXRlcmF0b3J8fGUuYXJyYXl8fGUuY29sbEluZGV4PHQubGVuZ3RoKTtyZXR1cm4gc3N9KTpyMn12YXIgZm8scjIsc3MsUGMsSm0sJHM9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijtmbz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlN0cmVhbUltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc3RhcnRGbj1lLHRoaXMubmV4dEZuPXJ9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLFtTeW1ib2wuaXRlcmF0b3JdOigpPT5lfTtyZXR1cm4gZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLml0ZXJhdG9yKCl9aXNFbXB0eSgpe3JldHVybiEhdGhpcy5pdGVyYXRvcigpLm5leHQoKS5kb25lfWNvdW50KCl7bGV0IGU9dGhpcy5pdGVyYXRvcigpLHI9MCxuPWUubmV4dCgpO2Zvcig7IW4uZG9uZTspcisrLG49ZS5uZXh0KCk7cmV0dXJuIHJ9dG9BcnJheSgpe2xldCBlPVtdLHI9dGhpcy5pdGVyYXRvcigpLG47ZG8gbj1yLm5leHQoKSxuLnZhbHVlIT09dm9pZCAwJiZlLnB1c2gobi52YWx1ZSk7d2hpbGUoIW4uZG9uZSk7cmV0dXJuIGV9dG9TZXQoKXtyZXR1cm4gbmV3IFNldCh0aGlzKX10b01hcChlLHIpe2xldCBuPXRoaXMubWFwKGk9PltlP2UoaSk6aSxyP3IoaSk6aV0pO3JldHVybiBuZXcgTWFwKG4pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuam9pbigpfWNvbmNhdChlKXtsZXQgcj1lW1N5bWJvbC5pdGVyYXRvcl0oKTtyZXR1cm4gbmV3IHQoKCk9Pih7Zmlyc3Q6dGhpcy5zdGFydEZuKCksZmlyc3REb25lOiExfSksbj0+e2xldCBpO2lmKCFuLmZpcnN0RG9uZSl7ZG8gaWYoaT10aGlzLm5leHRGbihuLmZpcnN0KSwhaS5kb25lKXJldHVybiBpO3doaWxlKCFpLmRvbmUpO24uZmlyc3REb25lPSEwfWRvIGlmKGk9ci5uZXh0KCksIWkuZG9uZSlyZXR1cm4gaTt3aGlsZSghaS5kb25lKTtyZXR1cm4gc3N9KX1qb2luKGU9IiwiKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj0iIixpLGE9ITE7ZG8gaT1yLm5leHQoKSxpLmRvbmV8fChhJiYobis9ZSksbis9Q1BlKGkudmFsdWUpKSxhPSEwO3doaWxlKCFpLmRvbmUpO3JldHVybiBufWluZGV4T2YoZSxyPTApe2xldCBuPXRoaXMuaXRlcmF0b3IoKSxpPTAsYT1uLm5leHQoKTtmb3IoOyFhLmRvbmU7KXtpZihpPj1yJiZhLnZhbHVlPT09ZSlyZXR1cm4gaTthPW4ubmV4dCgpLGkrK31yZXR1cm4tMX1ldmVyeShlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj1yLm5leHQoKTtmb3IoOyFuLmRvbmU7KXtpZighZShuLnZhbHVlKSlyZXR1cm4hMTtuPXIubmV4dCgpfXJldHVybiEwfXNvbWUoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYoZShuLnZhbHVlKSlyZXR1cm4hMDtuPXIubmV4dCgpfXJldHVybiExfWZvckVhY2goZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49MCxpPXIubmV4dCgpO2Zvcig7IWkuZG9uZTspZShpLnZhbHVlLG4pLGk9ci5uZXh0KCksbisrfW1hcChlKXtyZXR1cm4gbmV3IHQodGhpcy5zdGFydEZuLHI9PntsZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIpO3JldHVybiBuP3NzOntkb25lOiExLHZhbHVlOmUoaSl9fSl9ZmlsdGVyKGUpe3JldHVybiBuZXcgdCh0aGlzLnN0YXJ0Rm4scj0+e2xldCBuO2RvIGlmKG49dGhpcy5uZXh0Rm4ociksIW4uZG9uZSYmZShuLnZhbHVlKSlyZXR1cm4gbjt3aGlsZSghbi5kb25lKTtyZXR1cm4gc3N9KX1ub25OdWxsYWJsZSgpe3JldHVybiB0aGlzLmZpbHRlcihlPT5lIT1udWxsKX1yZWR1Y2UoZSxyKXtsZXQgbj10aGlzLml0ZXJhdG9yKCksaT1yLGE9bi5uZXh0KCk7Zm9yKDshYS5kb25lOylpPT09dm9pZCAwP2k9YS52YWx1ZTppPWUoaSxhLnZhbHVlKSxhPW4ubmV4dCgpO3JldHVybiBpfXJlZHVjZVJpZ2h0KGUscil7cmV0dXJuIHRoaXMucmVjdXJzaXZlUmVkdWNlKHRoaXMuaXRlcmF0b3IoKSxlLHIpfXJlY3Vyc2l2ZVJlZHVjZShlLHIsbil7bGV0IGk9ZS5uZXh0KCk7aWYoaS5kb25lKXJldHVybiBuO2xldCBhPXRoaXMucmVjdXJzaXZlUmVkdWNlKGUscixuKTtyZXR1cm4gYT09PXZvaWQgMD9pLnZhbHVlOnIoYSxpLnZhbHVlKX1maW5kKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKGUobi52YWx1ZSkpcmV0dXJuIG4udmFsdWU7bj1yLm5leHQoKX19ZmluZEluZGV4KGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPTAsaT1yLm5leHQoKTtmb3IoOyFpLmRvbmU7KXtpZihlKGkudmFsdWUpKXJldHVybiBuO2k9ci5uZXh0KCksbisrfXJldHVybi0xfWluY2x1ZGVzKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKG4udmFsdWU9PT1lKXJldHVybiEwO249ci5uZXh0KCl9cmV0dXJuITF9ZmxhdE1hcChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7dGhpczp0aGlzLnN0YXJ0Rm4oKX0pLHI9Pntkb3tpZihyLml0ZXJhdG9yKXtsZXQgYT1yLml0ZXJhdG9yLm5leHQoKTtpZihhLmRvbmUpci5pdGVyYXRvcj12b2lkIDA7ZWxzZSByZXR1cm4gYX1sZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIudGhpcyk7aWYoIW4pe2xldCBhPWUoaSk7aWYoU1QoYSkpci5pdGVyYXRvcj1hW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHJldHVybntkb25lOiExLHZhbHVlOmF9fX13aGlsZShyLml0ZXJhdG9yKTtyZXR1cm4gc3N9KX1mbGF0KGUpe2lmKGU9PT12b2lkIDAmJihlPTEpLGU8PTApcmV0dXJuIHRoaXM7bGV0IHI9ZT4xP3RoaXMuZmxhdChlLTEpOnRoaXM7cmV0dXJuIG5ldyB0KCgpPT4oe3RoaXM6ci5zdGFydEZuKCl9KSxuPT57ZG97aWYobi5pdGVyYXRvcil7bGV0IHM9bi5pdGVyYXRvci5uZXh0KCk7aWYocy5kb25lKW4uaXRlcmF0b3I9dm9pZCAwO2Vsc2UgcmV0dXJuIHN9bGV0e2RvbmU6aSx2YWx1ZTphfT1yLm5leHRGbihuLnRoaXMpO2lmKCFpKWlmKFNUKGEpKW4uaXRlcmF0b3I9YVtTeW1ib2wuaXRlcmF0b3JdKCk7ZWxzZSByZXR1cm57ZG9uZTohMSx2YWx1ZTphfX13aGlsZShuLml0ZXJhdG9yKTtyZXR1cm4gc3N9KX1oZWFkKCl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLm5leHQoKTtpZighci5kb25lKXJldHVybiByLnZhbHVlfXRhaWwoZT0xKXtyZXR1cm4gbmV3IHQoKCk9PntsZXQgcj10aGlzLnN0YXJ0Rm4oKTtmb3IobGV0IG49MDtuPGU7bisrKWlmKHRoaXMubmV4dEZuKHIpLmRvbmUpcmV0dXJuIHI7cmV0dXJuIHJ9LHRoaXMubmV4dEZuKX1saW1pdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7c2l6ZTowLHN0YXRlOnRoaXMuc3RhcnRGbigpfSkscj0+KHIuc2l6ZSsrLHIuc2l6ZT5lP3NzOnRoaXMubmV4dEZuKHIuc3RhdGUpKSl9ZGlzdGluY3QoZSl7bGV0IHI9bmV3IFNldDtyZXR1cm4gdGhpcy5maWx0ZXIobj0+e2xldCBpPWU/ZShuKTpuO3JldHVybiByLmhhcyhpKT8hMTooci5hZGQoaSksITApfSl9ZXhjbHVkZShlLHIpe2xldCBuPW5ldyBTZXQ7Zm9yKGxldCBpIG9mIGUpe2xldCBhPXI/cihpKTppO24uYWRkKGEpfXJldHVybiB0aGlzLmZpbHRlcihpPT57bGV0IGE9cj9yKGkpOmk7cmV0dXJuIW4uaGFzKGEpfSl9fTtvKENQZSwidG9TdHJpbmciKTtvKFNULCJpc0l0ZXJhYmxlIik7cjI9bmV3IGZvKCgpPT57fSwoKT0+c3MpLHNzPU9iamVjdC5mcmVlemUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7byh0biwic3RyZWFtIik7UGM9Y2xhc3MgZXh0ZW5kcyBmb3tzdGF0aWN7byh0aGlzLCJUcmVlU3RyZWFtSW1wbCIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcigoKT0+KHtpdGVyYXRvcnM6bj8uaW5jbHVkZVJvb3Q/W1tlXVtTeW1ib2wuaXRlcmF0b3JdKCldOltyKGUpW1N5bWJvbC5pdGVyYXRvcl0oKV0scHJ1bmVkOiExfSksaT0+e2ZvcihpLnBydW5lZCYmKGkuaXRlcmF0b3JzLnBvcCgpLGkucHJ1bmVkPSExKTtpLml0ZXJhdG9ycy5sZW5ndGg+MDspe2xldCBzPWkuaXRlcmF0b3JzW2kuaXRlcmF0b3JzLmxlbmd0aC0xXS5uZXh0KCk7aWYocy5kb25lKWkuaXRlcmF0b3JzLnBvcCgpO2Vsc2UgcmV0dXJuIGkuaXRlcmF0b3JzLnB1c2gocihzLnZhbHVlKVtTeW1ib2wuaXRlcmF0b3JdKCkpLHN9cmV0dXJuIHNzfSl9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLHBydW5lOm8oKCk9PntlLnN0YXRlLnBydW5lZD0hMH0sInBydW5lIiksW1N5bWJvbC5pdGVyYXRvcl06KCk9PmV9O3JldHVybiBlfX07KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5zK2wsMCl9byhlLCJzdW0iKSx0LnN1bT1lO2Z1bmN0aW9uIHIoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5zKmwsMCl9byhyLCJwcm9kdWN0IiksdC5wcm9kdWN0PXI7ZnVuY3Rpb24gbihhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9Pk1hdGgubWluKHMsbCkpfW8obiwibWluIiksdC5taW49bjtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+TWF0aC5tYXgocyxsKSl9byhpLCJtYXgiKSx0Lm1heD1pfSkoSm18fChKbT17fSkpfSk7dmFyIEFUPXt9O3ZyKEFULHtEZWZhdWx0TmFtZVJlZ2V4cDooKT0+Q1QsUmFuZ2VDb21wYXJpc29uOigpPT4kdSxjb21wYXJlUmFuZ2U6KCk9PkFhZSxmaW5kQ29tbWVudE5vZGU6KCk9PnpELGZpbmREZWNsYXJhdGlvbk5vZGVBdE9mZnNldDooKT0+X1BlLGZpbmRMZWFmTm9kZUF0T2Zmc2V0OigpPT5HRCxmaW5kTGVhZk5vZGVCZWZvcmVPZmZzZXQ6KCk9Pl9hZSxmbGF0dGVuQ3N0OigpPT5BUGUsZ2V0SW50ZXJpb3JOb2RlczooKT0+TlBlLGdldE5leHROb2RlOigpPT5MUGUsZ2V0UHJldmlvdXNOb2RlOigpPT5EYWUsZ2V0U3RhcnRsaW5lTm9kZTooKT0+RFBlLGluUmFuZ2U6KCk9PkZELGlzQ2hpbGROb2RlOigpPT5CRCxpc0NvbW1lbnROb2RlOigpPT5QRCxzdHJlYW1Dc3Q6KCk9PkpkLHRvRG9jdW1lbnRTZWdtZW50OigpPT5lMCx0b2tlblRvUmFuZ2U6KCk9PmVnfSk7ZnVuY3Rpb24gSmQodCl7cmV0dXJuIG5ldyBQYyh0LGU9PmhvKGUpP2UuY29udGVudDpbXSx7aW5jbHVkZVJvb3Q6ITB9KX1mdW5jdGlvbiBBUGUodCl7cmV0dXJuIEpkKHQpLmZpbHRlcihjZil9ZnVuY3Rpb24gQkQodCxlKXtmb3IoO3QuY29udGFpbmVyOylpZih0PXQuY29udGFpbmVyLHQ9PT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGVnKHQpe3JldHVybntzdGFydDp7Y2hhcmFjdGVyOnQuc3RhcnRDb2x1bW4tMSxsaW5lOnQuc3RhcnRMaW5lLTF9LGVuZDp7Y2hhcmFjdGVyOnQuZW5kQ29sdW1uLGxpbmU6dC5lbmRMaW5lLTF9fX1mdW5jdGlvbiBlMCh0KXtpZighdClyZXR1cm47bGV0e29mZnNldDplLGVuZDpyLHJhbmdlOm59PXQ7cmV0dXJue3JhbmdlOm4sb2Zmc2V0OmUsZW5kOnIsbGVuZ3RoOnItZX19ZnVuY3Rpb24gQWFlKHQsZSl7aWYodC5lbmQubGluZTxlLnN0YXJ0LmxpbmV8fHQuZW5kLmxpbmU9PT1lLnN0YXJ0LmxpbmUmJnQuZW5kLmNoYXJhY3Rlcjx0LnN0YXJ0LmNoYXJhY3RlcilyZXR1cm4gJHUuQmVmb3JlO2lmKHQuc3RhcnQubGluZT5lLmVuZC5saW5lfHx0LnN0YXJ0LmxpbmU9PT1lLmVuZC5saW5lJiZ0LnN0YXJ0LmNoYXJhY3Rlcj5lLmVuZC5jaGFyYWN0ZXIpcmV0dXJuICR1LkFmdGVyO2xldCByPXQuc3RhcnQubGluZT5lLnN0YXJ0LmxpbmV8fHQuc3RhcnQubGluZT09PWUuc3RhcnQubGluZSYmdC5zdGFydC5jaGFyYWN0ZXI+PWUuc3RhcnQuY2hhcmFjdGVyLG49dC5lbmQubGluZTxlLmVuZC5saW5lfHx0LmVuZC5saW5lPT09ZS5lbmQubGluZSYmdC5lbmQuY2hhcmFjdGVyPD1lLmVuZC5jaGFyYWN0ZXI7cmV0dXJuIHImJm4/JHUuSW5zaWRlOnI/JHUuT3ZlcmxhcEJhY2s6JHUuT3ZlcmxhcEZyb250fWZ1bmN0aW9uIEZEKHQsZSl7cmV0dXJuIEFhZSh0LGUpPiR1LkFmdGVyfWZ1bmN0aW9uIF9QZSh0LGUscj1DVCl7aWYodCl7aWYoZT4wKXtsZXQgbj1lLXQub2Zmc2V0LGk9dC50ZXh0LmNoYXJBdChuKTtyLnRlc3QoaSl8fGUtLX1yZXR1cm4gR0QodCxlKX19ZnVuY3Rpb24gekQodCxlKXtpZih0KXtsZXQgcj1EYWUodCwhMCk7aWYociYmUEQocixlKSlyZXR1cm4gcjtpZih0Mih0KSl7bGV0IG49dC5jb250ZW50LmZpbmRJbmRleChpPT4haS5oaWRkZW4pO2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pe2xldCBhPXQuY29udGVudFtpXTtpZihQRChhLGUpKXJldHVybiBhfX19fWZ1bmN0aW9uIFBEKHQsZSl7cmV0dXJuIGNmKHQpJiZlLmluY2x1ZGVzKHQudG9rZW5UeXBlLm5hbWUpfWZ1bmN0aW9uIEdEKHQsZSl7aWYoY2YodCkpcmV0dXJuIHQ7aWYoaG8odCkpe2xldCByPUxhZSh0LGUsITEpO2lmKHIpcmV0dXJuIEdEKHIsZSl9fWZ1bmN0aW9uIF9hZSh0LGUpe2lmKGNmKHQpKXJldHVybiB0O2lmKGhvKHQpKXtsZXQgcj1MYWUodCxlLCEwKTtpZihyKXJldHVybiBfYWUocixlKX19ZnVuY3Rpb24gTGFlKHQsZSxyKXtsZXQgbj0wLGk9dC5jb250ZW50Lmxlbmd0aC0xLGE7Zm9yKDtuPD1pOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKSxsPXQuY29udGVudFtzXTtpZihsLm9mZnNldDw9ZSYmbC5lbmQ+ZSlyZXR1cm4gbDtsLmVuZDw9ZT8oYT1yP2w6dm9pZCAwLG49cysxKTppPXMtMX1yZXR1cm4gYX1mdW5jdGlvbiBEYWUodCxlPSEwKXtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KTtmb3IoO24+MDspe24tLTtsZXQgaT1yLmNvbnRlbnRbbl07aWYoZXx8IWkuaGlkZGVuKXJldHVybiBpfXQ9cn19ZnVuY3Rpb24gTFBlKHQsZT0hMCl7Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCksaT1yLmNvbnRlbnQubGVuZ3RoLTE7Zm9yKDtuPGk7KXtuKys7bGV0IGE9ci5jb250ZW50W25dO2lmKGV8fCFhLmhpZGRlbilyZXR1cm4gYX10PXJ9fWZ1bmN0aW9uIERQZSh0KXtpZih0LnJhbmdlLnN0YXJ0LmNoYXJhY3Rlcj09PTApcmV0dXJuIHQ7bGV0IGU9dC5yYW5nZS5zdGFydC5saW5lLHI9dCxuO2Zvcig7dC5jb250YWluZXI7KXtsZXQgaT10LmNvbnRhaW5lcixhPW4/P2kuY29udGVudC5pbmRleE9mKHQpO2lmKGE9PT0wPyh0PWksbj12b2lkIDApOihuPWEtMSx0PWkuY29udGVudFtuXSksdC5yYW5nZS5zdGFydC5saW5lIT09ZSlicmVhaztyPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gTlBlKHQsZSl7bGV0IHI9UlBlKHQsZSk7cmV0dXJuIHI/ci5wYXJlbnQuY29udGVudC5zbGljZShyLmErMSxyLmIpOltdfWZ1bmN0aW9uIFJQZSh0LGUpe2xldCByPUNhZSh0KSxuPUNhZShlKSxpO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGgmJmE8bi5sZW5ndGg7YSsrKXtsZXQgcz1yW2FdLGw9blthXTtpZihzLnBhcmVudD09PWwucGFyZW50KWk9e3BhcmVudDpzLnBhcmVudCxhOnMuaW5kZXgsYjpsLmluZGV4fTtlbHNlIGJyZWFrfXJldHVybiBpfWZ1bmN0aW9uIENhZSh0KXtsZXQgZT1bXTtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KTtlLnB1c2goe3BhcmVudDpyLGluZGV4Om59KSx0PXJ9cmV0dXJuIGUucmV2ZXJzZSgpfXZhciAkdSxDVCx6bD1NKCgpPT57InVzZSBzdHJpY3QiO1pvKCk7JHMoKTtvKEpkLCJzdHJlYW1Dc3QiKTtvKEFQZSwiZmxhdHRlbkNzdCIpO28oQkQsImlzQ2hpbGROb2RlIik7byhlZywidG9rZW5Ub1JhbmdlIik7byhlMCwidG9Eb2N1bWVudFNlZ21lbnQiKTsoZnVuY3Rpb24odCl7dFt0LkJlZm9yZT0wXT0iQmVmb3JlIix0W3QuQWZ0ZXI9MV09IkFmdGVyIix0W3QuT3ZlcmxhcEZyb250PTJdPSJPdmVybGFwRnJvbnQiLHRbdC5PdmVybGFwQmFjaz0zXT0iT3ZlcmxhcEJhY2siLHRbdC5JbnNpZGU9NF09Ikluc2lkZSJ9KSgkdXx8KCR1PXt9KSk7byhBYWUsImNvbXBhcmVSYW5nZSIpO28oRkQsImluUmFuZ2UiKTtDVD0vXltcd1xwe0x9XSQvdTtvKF9QZSwiZmluZERlY2xhcmF0aW9uTm9kZUF0T2Zmc2V0Iik7byh6RCwiZmluZENvbW1lbnROb2RlIik7byhQRCwiaXNDb21tZW50Tm9kZSIpO28oR0QsImZpbmRMZWFmTm9kZUF0T2Zmc2V0Iik7byhfYWUsImZpbmRMZWFmTm9kZUJlZm9yZU9mZnNldCIpO28oTGFlLCJiaW5hcnlTZWFyY2giKTtvKERhZSwiZ2V0UHJldmlvdXNOb2RlIik7byhMUGUsImdldE5leHROb2RlIik7byhEUGUsImdldFN0YXJ0bGluZU5vZGUiKTtvKE5QZSwiZ2V0SW50ZXJpb3JOb2RlcyIpO28oUlBlLCJnZXRDb21tb25QYXJlbnQiKTtvKENhZSwiZ2V0UGFyZW50Q2hhaW4iKX0pO2Z1bmN0aW9uIHVmKHQpe3Rocm93IG5ldyBFcnJvcigiRXJyb3IhIFRoZSBpbnB1dCB2YWx1ZSB3YXMgbm90IGhhbmRsZWQuIil9dmFyIHQwLF9UPU0oKCk9PnsidXNlIHN0cmljdCI7dDA9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJFcnJvcldpdGhMb2NhdGlvbiIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoZT9gJHtyfSBhdCAke2UucmFuZ2Uuc3RhcnQubGluZX06JHtlLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlcn1gOnIpfX07byh1ZiwiYXNzZXJ0VW5yZWFjaGFibGUiKX0pO3ZhciBvMj17fTt2cihvMix7QWJzdHJhY3RFbGVtZW50OigpPT5WRCxBYnN0cmFjdFJ1bGU6KCk9Pm4yLEFic3RyYWN0VHlwZTooKT0+aTIsQWN0aW9uOigpPT5nTixBbHRlcm5hdGl2ZXM6KCk9PnlOLEFycmF5TGl0ZXJhbDooKT0+VUQsQXJyYXlUeXBlOigpPT5IRCxBc3NpZ25tZW50OigpPT52TixCb29sZWFuTGl0ZXJhbDooKT0+WUQsQ2hhcmFjdGVyUmFuZ2U6KCk9PnhOLENvbmRpdGlvbjooKT0+TFQsQ29uanVuY3Rpb246KCk9PlhELENyb3NzUmVmZXJlbmNlOigpPT53TixEaXNqdW5jdGlvbjooKT0+S0QsRW5kT2ZGaWxlOigpPT5UTixHcmFtbWFyOigpPT5aRCxHcmFtbWFySW1wb3J0OigpPT5SYWUsR3JvdXA6KCk9PkVOLEluZmVycmVkVHlwZTooKT0+SkQsSW50ZXJmYWNlOigpPT5lTixLZXl3b3JkOigpPT5TTixMYW5naXVtR3JhbW1hckFzdFJlZmxlY3Rpb246KCk9PnRnLExhbmdpdW1HcmFtbWFyVGVybWluYWxzOigpPT5NUGUsTmFtZWRBcmd1bWVudDooKT0+TWFlLE5lZ2F0ZWRUb2tlbjooKT0+Q04sTmVnYXRpb246KCk9PnROLE51bWJlckxpdGVyYWw6KCk9Pm5OLFBhcmFtZXRlcjooKT0+aU4sUGFyYW1ldGVyUmVmZXJlbmNlOigpPT5hTixQYXJzZXJSdWxlOigpPT5vTixSZWZlcmVuY2VUeXBlOigpPT5sTixSZWdleFRva2VuOigpPT5fTixSZXR1cm5UeXBlOigpPT5JYWUsUnVsZUNhbGw6KCk9PkROLFNpbXBsZVR5cGU6KCk9PmhOLFN0cmluZ0xpdGVyYWw6KCk9PmZOLFRlcm1pbmFsQWx0ZXJuYXRpdmVzOigpPT5OTixUZXJtaW5hbEdyb3VwOigpPT5NTixUZXJtaW5hbFJ1bGU6KCk9Pk5ULFRlcm1pbmFsUnVsZUNhbGw6KCk9Pk9OLFR5cGU6KCk9PmROLFR5cGVBdHRyaWJ1dGU6KCk9Pk9hZSxUeXBlRGVmaW5pdGlvbjooKT0+JEQsVW5pb25UeXBlOigpPT5wTixVbm9yZGVyZWRHcm91cDooKT0+UE4sVW50aWxUb2tlbjooKT0+Qk4sVmFsdWVMaXRlcmFsOigpPT5EVCxXaWxkY2FyZDooKT0+ek4saXNBYnN0cmFjdEVsZW1lbnQ6KCk9PmEyLGlzQWJzdHJhY3RSdWxlOigpPT5JUGUsaXNBYnN0cmFjdFR5cGU6KCk9Pk9QZSxpc0FjdGlvbjooKT0+VnUsaXNBbHRlcm5hdGl2ZXM6KCk9Pk9ULGlzQXJyYXlMaXRlcmFsOigpPT5HUGUsaXNBcnJheVR5cGU6KCk9PldELGlzQXNzaWdubWVudDooKT0+R2wsaXNCb29sZWFuTGl0ZXJhbDooKT0+cUQsaXNDaGFyYWN0ZXJSYW5nZTooKT0+Yk4saXNDb25kaXRpb246KCk9PlBQZSxpc0Nvbmp1bmN0aW9uOigpPT5qRCxpc0Nyb3NzUmVmZXJlbmNlOigpPT5yMCxpc0Rpc2p1bmN0aW9uOigpPT5RRCxpc0VuZE9mRmlsZTooKT0+a04saXNGZWF0dXJlTmFtZTooKT0+QlBlLGlzR3JhbW1hcjooKT0+JFBlLGlzR3JhbW1hckltcG9ydDooKT0+VlBlLGlzR3JvdXA6KCk9PmhmLGlzSW5mZXJyZWRUeXBlOigpPT5SVCxpc0ludGVyZmFjZTooKT0+TVQsaXNLZXl3b3JkOigpPT5lbCxpc05hbWVkQXJndW1lbnQ6KCk9PlVQZSxpc05lZ2F0ZWRUb2tlbjooKT0+QU4saXNOZWdhdGlvbjooKT0+ck4saXNOdW1iZXJMaXRlcmFsOigpPT5IUGUsaXNQYXJhbWV0ZXI6KCk9PldQZSxpc1BhcmFtZXRlclJlZmVyZW5jZTooKT0+c04saXNQYXJzZXJSdWxlOigpPT5HYSxpc1ByaW1pdGl2ZVR5cGU6KCk9Pk5hZSxpc1JlZmVyZW5jZVR5cGU6KCk9PmNOLGlzUmVnZXhUb2tlbjooKT0+TE4saXNSZXR1cm5UeXBlOigpPT51Tixpc1J1bGVDYWxsOigpPT4kbCxpc1NpbXBsZVR5cGU6KCk9PklULGlzU3RyaW5nTGl0ZXJhbDooKT0+WVBlLGlzVGVybWluYWxBbHRlcm5hdGl2ZXM6KCk9PlJOLGlzVGVybWluYWxHcm91cDooKT0+SU4saXNUZXJtaW5hbFJ1bGU6KCk9PkpvLGlzVGVybWluYWxSdWxlQ2FsbDooKT0+UFQsaXNUeXBlOigpPT5zMixpc1R5cGVBdHRyaWJ1dGU6KCk9PnFQZSxpc1R5cGVEZWZpbml0aW9uOigpPT5GUGUsaXNVbmlvblR5cGU6KCk9Pm1OLGlzVW5vcmRlcmVkR3JvdXA6KCk9PkJULGlzVW50aWxUb2tlbjooKT0+Rk4saXNWYWx1ZUxpdGVyYWw6KCk9PnpQZSxpc1dpbGRjYXJkOigpPT5HTixyZWZsZWN0aW9uOigpPT5scn0pO2Z1bmN0aW9uIElQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LG4yKX1mdW5jdGlvbiBPUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxpMil9ZnVuY3Rpb24gUFBlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTFQpfWZ1bmN0aW9uIEJQZSh0KXtyZXR1cm4gTmFlKHQpfHx0PT09ImN1cnJlbnQifHx0PT09ImVudHJ5Inx8dD09PSJleHRlbmRzInx8dD09PSJmYWxzZSJ8fHQ9PT0iZnJhZ21lbnQifHx0PT09ImdyYW1tYXIifHx0PT09ImhpZGRlbiJ8fHQ9PT0iaW1wb3J0Inx8dD09PSJpbnRlcmZhY2UifHx0PT09InJldHVybnMifHx0PT09InRlcm1pbmFsInx8dD09PSJ0cnVlInx8dD09PSJ0eXBlInx8dD09PSJpbmZlciJ8fHQ9PT0iaW5mZXJzInx8dD09PSJ3aXRoInx8dHlwZW9mIHQ9PSJzdHJpbmciJiYvXF4/W19hLXpBLVpdW1x3X10qLy50ZXN0KHQpfWZ1bmN0aW9uIE5hZSh0KXtyZXR1cm4gdD09PSJzdHJpbmcifHx0PT09Im51bWJlciJ8fHQ9PT0iYm9vbGVhbiJ8fHQ9PT0iRGF0ZSJ8fHQ9PT0iYmlnaW50In1mdW5jdGlvbiBGUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCwkRCl9ZnVuY3Rpb24gelBlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsRFQpfWZ1bmN0aW9uIGEyKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsVkQpfWZ1bmN0aW9uIEdQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFVEKX1mdW5jdGlvbiBXRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEhEKX1mdW5jdGlvbiBxRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFlEKX1mdW5jdGlvbiBqRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFhEKX1mdW5jdGlvbiBRRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEtEKX1mdW5jdGlvbiAkUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxaRCl9ZnVuY3Rpb24gVlBlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUmFlKX1mdW5jdGlvbiBSVCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEpEKX1mdW5jdGlvbiBNVCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGVOKX1mdW5jdGlvbiBVUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxNYWUpfWZ1bmN0aW9uIHJOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdE4pfWZ1bmN0aW9uIEhQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LG5OKX1mdW5jdGlvbiBXUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxpTil9ZnVuY3Rpb24gc04odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxhTil9ZnVuY3Rpb24gR2EodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxvTil9ZnVuY3Rpb24gY04odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxsTil9ZnVuY3Rpb24gdU4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxJYWUpfWZ1bmN0aW9uIElUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsaE4pfWZ1bmN0aW9uIFlQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGZOKX1mdW5jdGlvbiBKbyh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LE5UKX1mdW5jdGlvbiBzMih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGROKX1mdW5jdGlvbiBxUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxPYWUpfWZ1bmN0aW9uIG1OKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQscE4pfWZ1bmN0aW9uIFZ1KHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsZ04pfWZ1bmN0aW9uIE9UKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQseU4pfWZ1bmN0aW9uIEdsKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdk4pfWZ1bmN0aW9uIGJOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQseE4pfWZ1bmN0aW9uIHIwKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsd04pfWZ1bmN0aW9uIGtOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsVE4pfWZ1bmN0aW9uIGhmKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsRU4pfWZ1bmN0aW9uIGVsKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsU04pfWZ1bmN0aW9uIEFOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsQ04pfWZ1bmN0aW9uIExOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsX04pfWZ1bmN0aW9uICRsKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsRE4pfWZ1bmN0aW9uIFJOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTk4pfWZ1bmN0aW9uIElOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTU4pfWZ1bmN0aW9uIFBUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsT04pfWZ1bmN0aW9uIEJUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUE4pfWZ1bmN0aW9uIEZOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsQk4pfWZ1bmN0aW9uIEdOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsek4pfXZhciBNUGUsbjIsaTIsTFQsJEQsRFQsVkQsVUQsSEQsWUQsWEQsS0QsWkQsUmFlLEpELGVOLE1hZSx0TixuTixpTixhTixvTixsTixJYWUsaE4sZk4sTlQsZE4sT2FlLHBOLGdOLHlOLHZOLHhOLHdOLFROLEVOLFNOLENOLF9OLEROLE5OLE1OLE9OLFBOLEJOLHpOLHRnLGxyLEJjPU0oKCk9PnsidXNlIHN0cmljdCI7Wm8oKTtNUGU9e0lEOi9cXj9bX2EtekEtWl1bXHdfXSovLFNUUklORzovIihcXC58W14iXFxdKSoifCcoXFwufFteJ1xcXSkqJy8sTlVNQkVSOi9OYU58LT8oKFxkKlwuXGQrfFxkKykoW0VlXVsrLV0/XGQrKT98SW5maW5pdHkpLyxSZWdleExpdGVyYWw6L1wvKD8hWyorP10pKD86W15cclxuXFsvXFxdfFxcLnxcWyg/OlteXHJcblxdXFxdfFxcLikqXF0pK1wvW2Etel0qLyxXUzovXHMrLyxNTF9DT01NRU5UOi9cL1wqW1xzXFNdKj9cKlwvLyxTTF9DT01NRU5UOi9cL1wvW15cblxyXSovfSxuMj0iQWJzdHJhY3RSdWxlIjtvKElQZSwiaXNBYnN0cmFjdFJ1bGUiKTtpMj0iQWJzdHJhY3RUeXBlIjtvKE9QZSwiaXNBYnN0cmFjdFR5cGUiKTtMVD0iQ29uZGl0aW9uIjtvKFBQZSwiaXNDb25kaXRpb24iKTtvKEJQZSwiaXNGZWF0dXJlTmFtZSIpO28oTmFlLCJpc1ByaW1pdGl2ZVR5cGUiKTskRD0iVHlwZURlZmluaXRpb24iO28oRlBlLCJpc1R5cGVEZWZpbml0aW9uIik7RFQ9IlZhbHVlTGl0ZXJhbCI7byh6UGUsImlzVmFsdWVMaXRlcmFsIik7VkQ9IkFic3RyYWN0RWxlbWVudCI7byhhMiwiaXNBYnN0cmFjdEVsZW1lbnQiKTtVRD0iQXJyYXlMaXRlcmFsIjtvKEdQZSwiaXNBcnJheUxpdGVyYWwiKTtIRD0iQXJyYXlUeXBlIjtvKFdELCJpc0FycmF5VHlwZSIpO1lEPSJCb29sZWFuTGl0ZXJhbCI7byhxRCwiaXNCb29sZWFuTGl0ZXJhbCIpO1hEPSJDb25qdW5jdGlvbiI7byhqRCwiaXNDb25qdW5jdGlvbiIpO0tEPSJEaXNqdW5jdGlvbiI7byhRRCwiaXNEaXNqdW5jdGlvbiIpO1pEPSJHcmFtbWFyIjtvKCRQZSwiaXNHcmFtbWFyIik7UmFlPSJHcmFtbWFySW1wb3J0IjtvKFZQZSwiaXNHcmFtbWFySW1wb3J0Iik7SkQ9IkluZmVycmVkVHlwZSI7byhSVCwiaXNJbmZlcnJlZFR5cGUiKTtlTj0iSW50ZXJmYWNlIjtvKE1ULCJpc0ludGVyZmFjZSIpO01hZT0iTmFtZWRBcmd1bWVudCI7byhVUGUsImlzTmFtZWRBcmd1bWVudCIpO3ROPSJOZWdhdGlvbiI7byhyTiwiaXNOZWdhdGlvbiIpO25OPSJOdW1iZXJMaXRlcmFsIjtvKEhQZSwiaXNOdW1iZXJMaXRlcmFsIik7aU49IlBhcmFtZXRlciI7byhXUGUsImlzUGFyYW1ldGVyIik7YU49IlBhcmFtZXRlclJlZmVyZW5jZSI7byhzTiwiaXNQYXJhbWV0ZXJSZWZlcmVuY2UiKTtvTj0iUGFyc2VyUnVsZSI7byhHYSwiaXNQYXJzZXJSdWxlIik7bE49IlJlZmVyZW5jZVR5cGUiO28oY04sImlzUmVmZXJlbmNlVHlwZSIpO0lhZT0iUmV0dXJuVHlwZSI7byh1TiwiaXNSZXR1cm5UeXBlIik7aE49IlNpbXBsZVR5cGUiO28oSVQsImlzU2ltcGxlVHlwZSIpO2ZOPSJTdHJpbmdMaXRlcmFsIjtvKFlQZSwiaXNTdHJpbmdMaXRlcmFsIik7TlQ9IlRlcm1pbmFsUnVsZSI7byhKbywiaXNUZXJtaW5hbFJ1bGUiKTtkTj0iVHlwZSI7byhzMiwiaXNUeXBlIik7T2FlPSJUeXBlQXR0cmlidXRlIjtvKHFQZSwiaXNUeXBlQXR0cmlidXRlIik7cE49IlVuaW9uVHlwZSI7byhtTiwiaXNVbmlvblR5cGUiKTtnTj0iQWN0aW9uIjtvKFZ1LCJpc0FjdGlvbiIpO3lOPSJBbHRlcm5hdGl2ZXMiO28oT1QsImlzQWx0ZXJuYXRpdmVzIik7dk49IkFzc2lnbm1lbnQiO28oR2wsImlzQXNzaWdubWVudCIpO3hOPSJDaGFyYWN0ZXJSYW5nZSI7byhiTiwiaXNDaGFyYWN0ZXJSYW5nZSIpO3dOPSJDcm9zc1JlZmVyZW5jZSI7byhyMCwiaXNDcm9zc1JlZmVyZW5jZSIpO1ROPSJFbmRPZkZpbGUiO28oa04sImlzRW5kT2ZGaWxlIik7RU49Ikdyb3VwIjtvKGhmLCJpc0dyb3VwIik7U049IktleXdvcmQiO28oZWwsImlzS2V5d29yZCIpO0NOPSJOZWdhdGVkVG9rZW4iO28oQU4sImlzTmVnYXRlZFRva2VuIik7X049IlJlZ2V4VG9rZW4iO28oTE4sImlzUmVnZXhUb2tlbiIpO0ROPSJSdWxlQ2FsbCI7bygkbCwiaXNSdWxlQ2FsbCIpO05OPSJUZXJtaW5hbEFsdGVybmF0aXZlcyI7byhSTiwiaXNUZXJtaW5hbEFsdGVybmF0aXZlcyIpO01OPSJUZXJtaW5hbEdyb3VwIjtvKElOLCJpc1Rlcm1pbmFsR3JvdXAiKTtPTj0iVGVybWluYWxSdWxlQ2FsbCI7byhQVCwiaXNUZXJtaW5hbFJ1bGVDYWxsIik7UE49IlVub3JkZXJlZEdyb3VwIjtvKEJULCJpc1Vub3JkZXJlZEdyb3VwIik7Qk49IlVudGlsVG9rZW4iO28oRk4sImlzVW50aWxUb2tlbiIpO3pOPSJXaWxkY2FyZCI7byhHTiwiaXNXaWxkY2FyZCIpO3RnPWNsYXNzIGV4dGVuZHMgUWR7c3RhdGlje28odGhpcywiTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5bIkFic3RyYWN0RWxlbWVudCIsIkFic3RyYWN0UnVsZSIsIkFic3RyYWN0VHlwZSIsIkFjdGlvbiIsIkFsdGVybmF0aXZlcyIsIkFycmF5TGl0ZXJhbCIsIkFycmF5VHlwZSIsIkFzc2lnbm1lbnQiLCJCb29sZWFuTGl0ZXJhbCIsIkNoYXJhY3RlclJhbmdlIiwiQ29uZGl0aW9uIiwiQ29uanVuY3Rpb24iLCJDcm9zc1JlZmVyZW5jZSIsIkRpc2p1bmN0aW9uIiwiRW5kT2ZGaWxlIiwiR3JhbW1hciIsIkdyYW1tYXJJbXBvcnQiLCJHcm91cCIsIkluZmVycmVkVHlwZSIsIkludGVyZmFjZSIsIktleXdvcmQiLCJOYW1lZEFyZ3VtZW50IiwiTmVnYXRlZFRva2VuIiwiTmVnYXRpb24iLCJOdW1iZXJMaXRlcmFsIiwiUGFyYW1ldGVyIiwiUGFyYW1ldGVyUmVmZXJlbmNlIiwiUGFyc2VyUnVsZSIsIlJlZmVyZW5jZVR5cGUiLCJSZWdleFRva2VuIiwiUmV0dXJuVHlwZSIsIlJ1bGVDYWxsIiwiU2ltcGxlVHlwZSIsIlN0cmluZ0xpdGVyYWwiLCJUZXJtaW5hbEFsdGVybmF0aXZlcyIsIlRlcm1pbmFsR3JvdXAiLCJUZXJtaW5hbFJ1bGUiLCJUZXJtaW5hbFJ1bGVDYWxsIiwiVHlwZSIsIlR5cGVBdHRyaWJ1dGUiLCJUeXBlRGVmaW5pdGlvbiIsIlVuaW9uVHlwZSIsIlVub3JkZXJlZEdyb3VwIiwiVW50aWxUb2tlbiIsIlZhbHVlTGl0ZXJhbCIsIldpbGRjYXJkIl19Y29tcHV0ZUlzU3VidHlwZShlLHIpe3N3aXRjaChlKXtjYXNlIGdOOmNhc2UgeU46Y2FzZSB2TjpjYXNlIHhOOmNhc2Ugd046Y2FzZSBUTjpjYXNlIEVOOmNhc2UgU046Y2FzZSBDTjpjYXNlIF9OOmNhc2UgRE46Y2FzZSBOTjpjYXNlIE1OOmNhc2UgT046Y2FzZSBQTjpjYXNlIEJOOmNhc2Ugek46cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFZELHIpO2Nhc2UgVUQ6Y2FzZSBuTjpjYXNlIGZOOnJldHVybiB0aGlzLmlzU3VidHlwZShEVCxyKTtjYXNlIEhEOmNhc2UgbE46Y2FzZSBoTjpjYXNlIHBOOnJldHVybiB0aGlzLmlzU3VidHlwZSgkRCxyKTtjYXNlIFlEOnJldHVybiB0aGlzLmlzU3VidHlwZShMVCxyKXx8dGhpcy5pc1N1YnR5cGUoRFQscik7Y2FzZSBYRDpjYXNlIEtEOmNhc2UgdE46Y2FzZSBhTjpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoTFQscik7Y2FzZSBKRDpjYXNlIGVOOmNhc2UgZE46cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKGkyLHIpO2Nhc2Ugb046cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKG4yLHIpfHx0aGlzLmlzU3VidHlwZShpMixyKTtjYXNlIE5UOnJldHVybiB0aGlzLmlzU3VidHlwZShuMixyKTtkZWZhdWx0OnJldHVybiExfX1nZXRSZWZlcmVuY2VUeXBlKGUpe2xldCByPWAke2UuY29udGFpbmVyLiR0eXBlfToke2UucHJvcGVydHl9YDtzd2l0Y2gocil7Y2FzZSJBY3Rpb246dHlwZSI6Y2FzZSJDcm9zc1JlZmVyZW5jZTp0eXBlIjpjYXNlIkludGVyZmFjZTpzdXBlclR5cGVzIjpjYXNlIlBhcnNlclJ1bGU6cmV0dXJuVHlwZSI6Y2FzZSJTaW1wbGVUeXBlOnR5cGVSZWYiOnJldHVybiBpMjtjYXNlIkdyYW1tYXI6aGlkZGVuVG9rZW5zIjpjYXNlIlBhcnNlclJ1bGU6aGlkZGVuVG9rZW5zIjpjYXNlIlJ1bGVDYWxsOnJ1bGUiOnJldHVybiBuMjtjYXNlIkdyYW1tYXI6dXNlZEdyYW1tYXJzIjpyZXR1cm4gWkQ7Y2FzZSJOYW1lZEFyZ3VtZW50OnBhcmFtZXRlciI6Y2FzZSJQYXJhbWV0ZXJSZWZlcmVuY2U6cGFyYW1ldGVyIjpyZXR1cm4gaU47Y2FzZSJUZXJtaW5hbFJ1bGVDYWxsOnJ1bGUiOnJldHVybiBOVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgJHtyfSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UgaWQuYCl9fWdldFR5cGVNZXRhRGF0YShlKXtzd2l0Y2goZSl7Y2FzZSJBYnN0cmFjdEVsZW1lbnQiOnJldHVybntuYW1lOiJBYnN0cmFjdEVsZW1lbnQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiQXJyYXlMaXRlcmFsIjpyZXR1cm57bmFtZToiQXJyYXlMaXRlcmFsIixwcm9wZXJ0aWVzOlt7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIkFycmF5VHlwZSI6cmV0dXJue25hbWU6IkFycmF5VHlwZSIscHJvcGVydGllczpbe25hbWU6ImVsZW1lbnRUeXBlIn1dfTtjYXNlIkJvb2xlYW5MaXRlcmFsIjpyZXR1cm57bmFtZToiQm9vbGVhbkxpdGVyYWwiLHByb3BlcnRpZXM6W3tuYW1lOiJ0cnVlIixkZWZhdWx0VmFsdWU6ITF9XX07Y2FzZSJDb25qdW5jdGlvbiI6cmV0dXJue25hbWU6IkNvbmp1bmN0aW9uIixwcm9wZXJ0aWVzOlt7bmFtZToibGVmdCJ9LHtuYW1lOiJyaWdodCJ9XX07Y2FzZSJEaXNqdW5jdGlvbiI6cmV0dXJue25hbWU6IkRpc2p1bmN0aW9uIixwcm9wZXJ0aWVzOlt7bmFtZToibGVmdCJ9LHtuYW1lOiJyaWdodCJ9XX07Y2FzZSJHcmFtbWFyIjpyZXR1cm57bmFtZToiR3JhbW1hciIscHJvcGVydGllczpbe25hbWU6ImRlZmluZXNIaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW1wb3J0cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW50ZXJmYWNlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaXNEZWNsYXJlZCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJydWxlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InVzZWRHcmFtbWFycyIsZGVmYXVsdFZhbHVlOltdfV19O2Nhc2UiR3JhbW1hckltcG9ydCI6cmV0dXJue25hbWU6IkdyYW1tYXJJbXBvcnQiLHByb3BlcnRpZXM6W3tuYW1lOiJwYXRoIn1dfTtjYXNlIkluZmVycmVkVHlwZSI6cmV0dXJue25hbWU6IkluZmVycmVkVHlwZSIscHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2UiSW50ZXJmYWNlIjpyZXR1cm57bmFtZToiSW50ZXJmYWNlIixwcm9wZXJ0aWVzOlt7bmFtZToiYXR0cmlidXRlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJzdXBlclR5cGVzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJOYW1lZEFyZ3VtZW50IjpyZXR1cm57bmFtZToiTmFtZWRBcmd1bWVudCIscHJvcGVydGllczpbe25hbWU6ImNhbGxlZEJ5TmFtZSIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicGFyYW1ldGVyIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIk5lZ2F0aW9uIjpyZXR1cm57bmFtZToiTmVnYXRpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSJOdW1iZXJMaXRlcmFsIjpyZXR1cm57bmFtZToiTnVtYmVyTGl0ZXJhbCIscHJvcGVydGllczpbe25hbWU6InZhbHVlIn1dfTtjYXNlIlBhcmFtZXRlciI6cmV0dXJue25hbWU6IlBhcmFtZXRlciIscHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2UiUGFyYW1ldGVyUmVmZXJlbmNlIjpyZXR1cm57bmFtZToiUGFyYW1ldGVyUmVmZXJlbmNlIixwcm9wZXJ0aWVzOlt7bmFtZToicGFyYW1ldGVyIn1dfTtjYXNlIlBhcnNlclJ1bGUiOnJldHVybntuYW1lOiJQYXJzZXJSdWxlIixwcm9wZXJ0aWVzOlt7bmFtZToiZGF0YVR5cGUifSx7bmFtZToiZGVmaW5lc0hpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJlbnRyeSIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiZnJhZ21lbnQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW5mZXJyZWRUeXBlIn0se25hbWU6Im5hbWUifSx7bmFtZToicGFyYW1ldGVycyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToicmV0dXJuVHlwZSJ9LHtuYW1lOiJ3aWxkY2FyZCIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UiUmVmZXJlbmNlVHlwZSI6cmV0dXJue25hbWU6IlJlZmVyZW5jZVR5cGUiLHByb3BlcnRpZXM6W3tuYW1lOiJyZWZlcmVuY2VUeXBlIn1dfTtjYXNlIlJldHVyblR5cGUiOnJldHVybntuYW1lOiJSZXR1cm5UeXBlIixwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9XX07Y2FzZSJTaW1wbGVUeXBlIjpyZXR1cm57bmFtZToiU2ltcGxlVHlwZSIscHJvcGVydGllczpbe25hbWU6InByaW1pdGl2ZVR5cGUifSx7bmFtZToic3RyaW5nVHlwZSJ9LHtuYW1lOiJ0eXBlUmVmIn1dfTtjYXNlIlN0cmluZ0xpdGVyYWwiOnJldHVybntuYW1lOiJTdHJpbmdMaXRlcmFsIixwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UiVGVybWluYWxSdWxlIjpyZXR1cm57bmFtZToiVGVybWluYWxSdWxlIixwcm9wZXJ0aWVzOlt7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJmcmFnbWVudCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiaGlkZGVuIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UiVHlwZSI6cmV0dXJue25hbWU6IlR5cGUiLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UiVHlwZUF0dHJpYnV0ZSI6cmV0dXJue25hbWU6IlR5cGVBdHRyaWJ1dGUiLHByb3BlcnRpZXM6W3tuYW1lOiJkZWZhdWx0VmFsdWUifSx7bmFtZToiaXNPcHRpb25hbCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIlVuaW9uVHlwZSI6cmV0dXJue25hbWU6IlVuaW9uVHlwZSIscHJvcGVydGllczpbe25hbWU6InR5cGVzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJBY3Rpb24iOnJldHVybntuYW1lOiJBY3Rpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJmZWF0dXJlIn0se25hbWU6ImluZmVycmVkVHlwZSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToib3BlcmF0b3IifSx7bmFtZToidHlwZSJ9XX07Y2FzZSJBbHRlcm5hdGl2ZXMiOnJldHVybntuYW1lOiJBbHRlcm5hdGl2ZXMiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIkFzc2lnbm1lbnQiOnJldHVybntuYW1lOiJBc3NpZ25tZW50Iixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZmVhdHVyZSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToib3BlcmF0b3IifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UiQ2hhcmFjdGVyUmFuZ2UiOnJldHVybntuYW1lOiJDaGFyYWN0ZXJSYW5nZSIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImxlZnQifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJpZ2h0In1dfTtjYXNlIkNyb3NzUmVmZXJlbmNlIjpyZXR1cm57bmFtZToiQ3Jvc3NSZWZlcmVuY2UiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJkZXByZWNhdGVkU3ludGF4IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifSx7bmFtZToidHlwZSJ9XX07Y2FzZSJFbmRPZkZpbGUiOnJldHVybntuYW1lOiJFbmRPZkZpbGUiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiR3JvdXAiOnJldHVybntuYW1lOiJHcm91cCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJndWFyZENvbmRpdGlvbiJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiS2V5d29yZCI6cmV0dXJue25hbWU6IktleXdvcmQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidmFsdWUifV19O2Nhc2UiTmVnYXRlZFRva2VuIjpyZXR1cm57bmFtZToiTmVnYXRlZFRva2VuIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIlJlZ2V4VG9rZW4iOnJldHVybntuYW1lOiJSZWdleFRva2VuIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJlZ2V4In1dfTtjYXNlIlJ1bGVDYWxsIjpyZXR1cm57bmFtZToiUnVsZUNhbGwiLHByb3BlcnRpZXM6W3tuYW1lOiJhcmd1bWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJydWxlIn1dfTtjYXNlIlRlcm1pbmFsQWx0ZXJuYXRpdmVzIjpyZXR1cm57bmFtZToiVGVybWluYWxBbHRlcm5hdGl2ZXMiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIlRlcm1pbmFsR3JvdXAiOnJldHVybntuYW1lOiJUZXJtaW5hbEdyb3VwIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSJUZXJtaW5hbFJ1bGVDYWxsIjpyZXR1cm57bmFtZToiVGVybWluYWxSdWxlQ2FsbCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJydWxlIn1dfTtjYXNlIlVub3JkZXJlZEdyb3VwIjpyZXR1cm57bmFtZToiVW5vcmRlcmVkR3JvdXAiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIlVudGlsVG9rZW4iOnJldHVybntuYW1lOiJVbnRpbFRva2VuIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIldpbGRjYXJkIjpyZXR1cm57bmFtZToiV2lsZGNhcmQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2RlZmF1bHQ6cmV0dXJue25hbWU6ZSxwcm9wZXJ0aWVzOltdfX19fSxscj1uZXcgdGd9KTt2YXIgelQ9e307dnIoelQse2Fzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXM6KCk9PlVOLGNvcHlBc3ROb2RlOigpPT5WTixmaW5kTG9jYWxSZWZlcmVuY2VzOigpPT5qUGUsZmluZFJvb3ROb2RlOigpPT5QYWUsZ2V0Q29udGFpbmVyT2ZUeXBlOigpPT5uMCxnZXREb2N1bWVudDooKT0+VmksaGFzQ29udGFpbmVyT2ZUeXBlOigpPT5YUGUsbGlua0NvbnRlbnRUb0NvbnRhaW5lcjooKT0+RlQsc3RyZWFtQWxsQ29udGVudHM6KCk9PkZjLHN0cmVhbUFzdDooKT0+dGwsc3RyZWFtQ29udGVudHM6KCk9PmwyLHN0cmVhbVJlZmVyZW5jZXM6KCk9PnJnfSk7ZnVuY3Rpb24gRlQodCl7Zm9yKGxldFtlLHJdb2YgT2JqZWN0LmVudHJpZXModCkpZS5zdGFydHNXaXRoKCIkIil8fChBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaCgobixpKT0+e3JpKG4pJiYobi4kY29udGFpbmVyPXQsbi4kY29udGFpbmVyUHJvcGVydHk9ZSxuLiRjb250YWluZXJJbmRleD1pKX0pOnJpKHIpJiYoci4kY29udGFpbmVyPXQsci4kY29udGFpbmVyUHJvcGVydHk9ZSkpfWZ1bmN0aW9uIG4wKHQsZSl7bGV0IHI9dDtmb3IoO3I7KXtpZihlKHIpKXJldHVybiByO3I9ci4kY29udGFpbmVyfX1mdW5jdGlvbiBYUGUodCxlKXtsZXQgcj10O2Zvcig7cjspe2lmKGUocikpcmV0dXJuITA7cj1yLiRjb250YWluZXJ9cmV0dXJuITF9ZnVuY3Rpb24gVmkodCl7bGV0IHI9UGFlKHQpLiRkb2N1bWVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkFTVCBub2RlIGhhcyBubyBkb2N1bWVudC4iKTtyZXR1cm4gcn1mdW5jdGlvbiBQYWUodCl7Zm9yKDt0LiRjb250YWluZXI7KXQ9dC4kY29udGFpbmVyO3JldHVybiB0fWZ1bmN0aW9uIGwyKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJOb2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4iKTtsZXQgcj1lPy5yYW5nZTtyZXR1cm4gbmV3IGZvKCgpPT4oe2tleXM6T2JqZWN0LmtleXModCksa2V5SW5kZXg6MCxhcnJheUluZGV4OjB9KSxuPT57Zm9yKDtuLmtleUluZGV4PG4ua2V5cy5sZW5ndGg7KXtsZXQgaT1uLmtleXNbbi5rZXlJbmRleF07aWYoIWkuc3RhcnRzV2l0aCgiJCIpKXtsZXQgYT10W2ldO2lmKHJpKGEpKXtpZihuLmtleUluZGV4KyssJE4oYSxyKSlyZXR1cm57ZG9uZTohMSx2YWx1ZTphfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcig7bi5hcnJheUluZGV4PGEubGVuZ3RoOyl7bGV0IHM9bi5hcnJheUluZGV4KyssbD1hW3NdO2lmKHJpKGwpJiYkTihsLHIpKXJldHVybntkb25lOiExLHZhbHVlOmx9fW4uYXJyYXlJbmRleD0wfX1uLmtleUluZGV4Kyt9cmV0dXJuIHNzfSl9ZnVuY3Rpb24gRmModCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgbm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuIik7cmV0dXJuIG5ldyBQYyh0LHI9PmwyKHIsZSkpfWZ1bmN0aW9uIHRsKHQsZSl7aWYodCl7aWYoZT8ucmFuZ2UmJiEkTih0LGUucmFuZ2UpKXJldHVybiBuZXcgUGModCwoKT0+W10pfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJSb290IG5vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLiIpO3JldHVybiBuZXcgUGModCxyPT5sMihyLGUpLHtpbmNsdWRlUm9vdDohMH0pfWZ1bmN0aW9uICROKHQsZSl7dmFyIHI7aWYoIWUpcmV0dXJuITA7bGV0IG49KHI9dC4kY3N0Tm9kZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJhbmdlO3JldHVybiBuP0ZEKG4sZSk6ITF9ZnVuY3Rpb24gcmcodCl7cmV0dXJuIG5ldyBmbygoKT0+KHtrZXlzOk9iamVjdC5rZXlzKHQpLGtleUluZGV4OjAsYXJyYXlJbmRleDowfSksZT0+e2Zvcig7ZS5rZXlJbmRleDxlLmtleXMubGVuZ3RoOyl7bGV0IHI9ZS5rZXlzW2Uua2V5SW5kZXhdO2lmKCFyLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IG49dFtyXTtpZihUYShuKSlyZXR1cm4gZS5rZXlJbmRleCsrLHtkb25lOiExLHZhbHVlOntyZWZlcmVuY2U6bixjb250YWluZXI6dCxwcm9wZXJ0eTpyfX07aWYoQXJyYXkuaXNBcnJheShuKSl7Zm9yKDtlLmFycmF5SW5kZXg8bi5sZW5ndGg7KXtsZXQgaT1lLmFycmF5SW5kZXgrKyxhPW5baV07aWYoVGEoYSkpcmV0dXJue2RvbmU6ITEsdmFsdWU6e3JlZmVyZW5jZTphLGNvbnRhaW5lcjp0LHByb3BlcnR5OnIsaW5kZXg6aX19fWUuYXJyYXlJbmRleD0wfX1lLmtleUluZGV4Kyt9cmV0dXJuIHNzfSl9ZnVuY3Rpb24galBlKHQsZT1WaSh0KS5wYXJzZVJlc3VsdC52YWx1ZSl7bGV0IHI9W107cmV0dXJuIHRsKGUpLmZvckVhY2gobj0+e3JnKG4pLmZvckVhY2goaT0+e2kucmVmZXJlbmNlLnJlZj09PXQmJnIucHVzaChpLnJlZmVyZW5jZSl9KX0pLHRuKHIpfWZ1bmN0aW9uIFVOKHQsZSl7bGV0IHI9dC5nZXRUeXBlTWV0YURhdGEoZS4kdHlwZSksbj1lO2ZvcihsZXQgaSBvZiByLnByb3BlcnRpZXMpaS5kZWZhdWx0VmFsdWUhPT12b2lkIDAmJm5baS5uYW1lXT09PXZvaWQgMCYmKG5baS5uYW1lXT1CYWUoaS5kZWZhdWx0VmFsdWUpKX1mdW5jdGlvbiBCYWUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Wy4uLnQubWFwKEJhZSldOnR9ZnVuY3Rpb24gVk4odCxlKXtsZXQgcj17JHR5cGU6dC4kdHlwZX07Zm9yKGxldFtuLGldb2YgT2JqZWN0LmVudHJpZXModCkpaWYoIW4uc3RhcnRzV2l0aCgiJCIpKWlmKHJpKGkpKXJbbl09Vk4oaSxlKTtlbHNlIGlmKFRhKGkpKXJbbl09ZShyLG4saS4kcmVmTm9kZSxpLiRyZWZUZXh0KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe2xldCBhPVtdO2ZvcihsZXQgcyBvZiBpKXJpKHMpP2EucHVzaChWTihzLGUpKTpUYShzKT9hLnB1c2goZShyLG4scy4kcmVmTm9kZSxzLiRyZWZUZXh0KSk6YS5wdXNoKHMpO3Jbbl09YX1lbHNlIHJbbl09aTtyZXR1cm4gRlQocikscn12YXIgb3M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtabygpOyRzKCk7emwoKTtvKEZULCJsaW5rQ29udGVudFRvQ29udGFpbmVyIik7byhuMCwiZ2V0Q29udGFpbmVyT2ZUeXBlIik7byhYUGUsImhhc0NvbnRhaW5lck9mVHlwZSIpO28oVmksImdldERvY3VtZW50Iik7byhQYWUsImZpbmRSb290Tm9kZSIpO28obDIsInN0cmVhbUNvbnRlbnRzIik7byhGYywic3RyZWFtQWxsQ29udGVudHMiKTtvKHRsLCJzdHJlYW1Bc3QiKTtvKCROLCJpc0FzdE5vZGVJblJhbmdlIik7byhyZywic3RyZWFtUmVmZXJlbmNlcyIpO28oalBlLCJmaW5kTG9jYWxSZWZlcmVuY2VzIik7byhVTiwiYXNzaWduTWFuZGF0b3J5UHJvcGVydGllcyIpO28oQmFlLCJjb3B5RGVmYXVsdFZhbHVlIik7byhWTiwiY29weUFzdE5vZGUiKX0pO2Z1bmN0aW9uIGFyKHQpe3JldHVybiB0LmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gR1QodCxlKXtBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihyKXtlLnB1c2gocil9KTplLnB1c2godCl9ZnVuY3Rpb24gbmcodCxlKXtpZih0W2VdPT09ITApdGhyb3ciZHVwbGljYXRlIGZsYWcgIitlO2xldCByPXRbZV07dFtlXT0hMH1mdW5jdGlvbiBpMCh0KXtpZih0PT09dm9pZCAwKXRocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKTtyZXR1cm4hMH1mdW5jdGlvbiBjMigpe3Rocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKX1mdW5jdGlvbiBITih0KXtyZXR1cm4gdC50eXBlPT09IkNoYXJhY3RlciJ9dmFyIFdOPU0oKCk9PnsidXNlIHN0cmljdCI7byhhciwiY2MiKTtvKEdULCJpbnNlcnRUb1NldCIpO28obmcsImFkZEZsYWciKTtvKGkwLCJBU1NFUlRfRVhJU1RTIik7byhjMiwiQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUiKTtvKEhOLCJpc0NoYXJhY3RlciIpfSk7dmFyIHUyLGgyLFlOLEZhZT1NKCgpPT57InVzZSBzdHJpY3QiO1dOKCk7dTI9W107Zm9yKGxldCB0PWFyKCIwIik7dDw9YXIoIjkiKTt0KyspdTIucHVzaCh0KTtoMj1bYXIoIl8iKV0uY29uY2F0KHUyKTtmb3IobGV0IHQ9YXIoImEiKTt0PD1hcigieiIpO3QrKyloMi5wdXNoKHQpO2ZvcihsZXQgdD1hcigiQSIpO3Q8PWFyKCJaIik7dCsrKWgyLnB1c2godCk7WU49W2FyKCIgIiksYXIoIlxmIiksYXIoYApgKSxhcigiXHIiKSxhcigiCSIpLGFyKCJcdiIpLGFyKCIJIiksYXIoIlx4QTAiKSxhcigiXHUxNjgwIiksYXIoIlx1MjAwMCIpLGFyKCJcdTIwMDEiKSxhcigiXHUyMDAyIiksYXIoIlx1MjAwMyIpLGFyKCJcdTIwMDQiKSxhcigiXHUyMDA1IiksYXIoIlx1MjAwNiIpLGFyKCJcdTIwMDciKSxhcigiXHUyMDA4IiksYXIoIlx1MjAwOSIpLGFyKCJcdTIwMEEiKSxhcigiXHUyMDI4IiksYXIoIlx1MjAyOSIpLGFyKCJcdTIwMkYiKSxhcigiXHUyMDVGIiksYXIoIlx1MzAwMCIpLGFyKCJcdUZFRkYiKV19KTt2YXIgS1BlLCRULFFQZSxhMCx6YWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXTigpO0ZhZSgpO0tQZT0vWzAtOWEtZkEtRl0vLCRUPS9bMC05XS8sUVBlPS9bMS05XS8sYTA9Y2xhc3N7c3RhdGlje28odGhpcywiUmVnRXhwUGFyc2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLmlkeD0wLHRoaXMuaW5wdXQ9IiIsdGhpcy5ncm91cElkeD0wfXNhdmVTdGF0ZSgpe3JldHVybntpZHg6dGhpcy5pZHgsaW5wdXQ6dGhpcy5pbnB1dCxncm91cElkeDp0aGlzLmdyb3VwSWR4fX1yZXN0b3JlU3RhdGUoZSl7dGhpcy5pZHg9ZS5pZHgsdGhpcy5pbnB1dD1lLmlucHV0LHRoaXMuZ3JvdXBJZHg9ZS5ncm91cElkeH1wYXR0ZXJuKGUpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD1lLHRoaXMuZ3JvdXBJZHg9MCx0aGlzLmNvbnN1bWVDaGFyKCIvIik7bGV0IHI9dGhpcy5kaXNqdW5jdGlvbigpO3RoaXMuY29uc3VtZUNoYXIoIi8iKTtsZXQgbj17dHlwZToiRmxhZ3MiLGxvYzp7YmVnaW46dGhpcy5pZHgsZW5kOmUubGVuZ3RofSxnbG9iYWw6ITEsaWdub3JlQ2FzZTohMSxtdWx0aUxpbmU6ITEsdW5pY29kZTohMSxzdGlja3k6ITF9O2Zvcig7dGhpcy5pc1JlZ0V4cEZsYWcoKTspc3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImciOm5nKG4sImdsb2JhbCIpO2JyZWFrO2Nhc2UiaSI6bmcobiwiaWdub3JlQ2FzZSIpO2JyZWFrO2Nhc2UibSI6bmcobiwibXVsdGlMaW5lIik7YnJlYWs7Y2FzZSJ1IjpuZyhuLCJ1bmljb2RlIik7YnJlYWs7Y2FzZSJ5IjpuZyhuLCJzdGlja3kiKTticmVha31pZih0aGlzLmlkeCE9PXRoaXMuaW5wdXQubGVuZ3RoKXRocm93IEVycm9yKCJSZWR1bmRhbnQgaW5wdXQ6ICIrdGhpcy5pbnB1dC5zdWJzdHJpbmcodGhpcy5pZHgpKTtyZXR1cm57dHlwZToiUGF0dGVybiIsZmxhZ3M6bix2YWx1ZTpyLGxvYzp0aGlzLmxvYygwKX19ZGlzanVuY3Rpb24oKXtsZXQgZT1bXSxyPXRoaXMuaWR4O2ZvcihlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTt0aGlzLnBlZWtDaGFyKCk9PT0ifCI7KXRoaXMuY29uc3VtZUNoYXIoInwiKSxlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtyZXR1cm57dHlwZToiRGlzanVuY3Rpb24iLHZhbHVlOmUsbG9jOnRoaXMubG9jKHIpfX1hbHRlcm5hdGl2ZSgpe2xldCBlPVtdLHI9dGhpcy5pZHg7Zm9yKDt0aGlzLmlzVGVybSgpOyllLnB1c2godGhpcy50ZXJtKCkpO3JldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsdmFsdWU6ZSxsb2M6dGhpcy5sb2Mocil9fXRlcm0oKXtyZXR1cm4gdGhpcy5pc0Fzc2VydGlvbigpP3RoaXMuYXNzZXJ0aW9uKCk6dGhpcy5hdG9tKCl9YXNzZXJ0aW9uKCl7bGV0IGU9dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIl4iOnJldHVybnt0eXBlOiJTdGFydEFuY2hvciIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIiQiOnJldHVybnt0eXBlOiJFbmRBbmNob3IiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJcXCI6c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImIiOnJldHVybnt0eXBlOiJXb3JkQm91bmRhcnkiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJCIjpyZXR1cm57dHlwZToiTm9uV29yZEJvdW5kYXJ5Iixsb2M6dGhpcy5sb2MoZSl9fXRocm93IEVycm9yKCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGUiKTtjYXNlIigiOnRoaXMuY29uc3VtZUNoYXIoIj8iKTtsZXQgcjtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiPSI6cj0iTG9va2FoZWFkIjticmVhaztjYXNlIiEiOnI9Ik5lZ2F0aXZlTG9va2FoZWFkIjticmVha31pMChyKTtsZXQgbj10aGlzLmRpc2p1bmN0aW9uKCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIikiKSx7dHlwZTpyLHZhbHVlOm4sbG9jOnRoaXMubG9jKGUpfX1yZXR1cm4gYzIoKX1xdWFudGlmaWVyKGU9ITEpe2xldCByLG49dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIioiOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MS8wfTticmVhaztjYXNlIisiOnI9e2F0TGVhc3Q6MSxhdE1vc3Q6MS8wfTticmVhaztjYXNlIj8iOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MX07YnJlYWs7Y2FzZSJ7IjpsZXQgaT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIn0iOnI9e2F0TGVhc3Q6aSxhdE1vc3Q6aX07YnJlYWs7Y2FzZSIsIjpsZXQgYTt0aGlzLmlzRGlnaXQoKT8oYT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCkscj17YXRMZWFzdDppLGF0TW9zdDphfSk6cj17YXRMZWFzdDppLGF0TW9zdDoxLzB9LHRoaXMuY29uc3VtZUNoYXIoIn0iKTticmVha31pZihlPT09ITAmJnI9PT12b2lkIDApcmV0dXJuO2kwKHIpO2JyZWFrfWlmKCEoZT09PSEwJiZyPT09dm9pZCAwKSYmaTAocikpcmV0dXJuIHRoaXMucGVla0NoYXIoMCk9PT0iPyI/KHRoaXMuY29uc3VtZUNoYXIoIj8iKSxyLmdyZWVkeT0hMSk6ci5ncmVlZHk9ITAsci50eXBlPSJRdWFudGlmaWVyIixyLmxvYz10aGlzLmxvYyhuKSxyfWF0b20oKXtsZXQgZSxyPXRoaXMuaWR4O3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiLiI6ZT10aGlzLmRvdEFsbCgpO2JyZWFrO2Nhc2UiXFwiOmU9dGhpcy5hdG9tRXNjYXBlKCk7YnJlYWs7Y2FzZSJbIjplPXRoaXMuY2hhcmFjdGVyQ2xhc3MoKTticmVhaztjYXNlIigiOmU9dGhpcy5ncm91cCgpO2JyZWFrfXJldHVybiBlPT09dm9pZCAwJiZ0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpJiYoZT10aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKSksaTAoZSk/KGUubG9jPXRoaXMubG9jKHIpLHRoaXMuaXNRdWFudGlmaWVyKCkmJihlLnF1YW50aWZpZXI9dGhpcy5xdWFudGlmaWVyKCkpLGUpOmMyKCl9ZG90QWxsKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIi4iKSx7dHlwZToiU2V0Iixjb21wbGVtZW50OiEwLHZhbHVlOlthcihgCmApLGFyKCJcciIpLGFyKCJcdTIwMjgiKSxhcigiXHUyMDI5IildfX1hdG9tRXNjYXBlKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5IjpyZXR1cm4gdGhpcy5kZWNpbWFsRXNjYXBlQXRvbSgpO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19ZGVjaW1hbEVzY2FwZUF0b20oKXtyZXR1cm57dHlwZToiR3JvdXBCYWNrUmVmZXJlbmNlIix2YWx1ZTp0aGlzLnBvc2l0aXZlSW50ZWdlcigpfX1jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpe2xldCBlLHI9ITE7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImQiOmU9dTI7YnJlYWs7Y2FzZSJEIjplPXUyLHI9ITA7YnJlYWs7Y2FzZSJzIjplPVlOO2JyZWFrO2Nhc2UiUyI6ZT1ZTixyPSEwO2JyZWFrO2Nhc2UidyI6ZT1oMjticmVhaztjYXNlIlciOmU9aDIscj0hMDticmVha31yZXR1cm4gaTAoZSk/e3R5cGU6IlNldCIsdmFsdWU6ZSxjb21wbGVtZW50OnJ9OmMyKCl9Y29udHJvbEVzY2FwZUF0b20oKXtsZXQgZTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZiI6ZT1hcigiXGYiKTticmVhaztjYXNlIm4iOmU9YXIoYApgKTticmVhaztjYXNlInIiOmU9YXIoIlxyIik7YnJlYWs7Y2FzZSJ0IjplPWFyKCIJIik7YnJlYWs7Y2FzZSJ2IjplPWFyKCJcdiIpO2JyZWFrfXJldHVybiBpMChlKT97dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTplfTpjMigpfWNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCl7dGhpcy5jb25zdW1lQ2hhcigiYyIpO2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKC9bYS16QS1aXS8udGVzdChlKT09PSExKXRocm93IEVycm9yKCJJbnZhbGlkICIpO3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmUudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApLTY0fX1udWxDaGFyYWN0ZXJBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIjAiKSx7dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTphcigiXDAiKX19aGV4RXNjYXBlU2VxdWVuY2VBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIngiKSx0aGlzLnBhcnNlSGV4RGlnaXRzKDIpfXJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigidSIpLHRoaXMucGFyc2VIZXhEaWdpdHMoNCl9aWRlbnRpdHlFc2NhcGVBdG9tKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6YXIoZSl9fWNsYXNzUGF0dGVybkNoYXJhY3RlckF0b20oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigpKXtjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6Y2FzZSJcXCI6Y2FzZSJdIjp0aHJvdyBFcnJvcigiVEJEIik7ZGVmYXVsdDpsZXQgZT10aGlzLnBvcENoYXIoKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTphcihlKX19fWNoYXJhY3RlckNsYXNzKCl7bGV0IGU9W10scj0hMTtmb3IodGhpcy5jb25zdW1lQ2hhcigiWyIpLHRoaXMucGVla0NoYXIoMCk9PT0iXiImJih0aGlzLmNvbnN1bWVDaGFyKCJeIikscj0hMCk7dGhpcy5pc0NsYXNzQXRvbSgpOyl7bGV0IG49dGhpcy5jbGFzc0F0b20oKSxpPW4udHlwZT09PSJDaGFyYWN0ZXIiO2lmKEhOKG4pJiZ0aGlzLmlzUmFuZ2VEYXNoKCkpe3RoaXMuY29uc3VtZUNoYXIoIi0iKTtsZXQgYT10aGlzLmNsYXNzQXRvbSgpLHM9YS50eXBlPT09IkNoYXJhY3RlciI7aWYoSE4oYSkpe2lmKGEudmFsdWU8bi52YWx1ZSl0aHJvdyBFcnJvcigiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcyIpO2UucHVzaCh7ZnJvbTpuLnZhbHVlLHRvOmEudmFsdWV9KX1lbHNlIEdUKG4udmFsdWUsZSksZS5wdXNoKGFyKCItIikpLEdUKGEudmFsdWUsZSl9ZWxzZSBHVChuLnZhbHVlLGUpfXJldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJdIikse3R5cGU6IlNldCIsY29tcGxlbWVudDpyLHZhbHVlOmV9fWNsYXNzQXRvbSgpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnRocm93IEVycm9yKCJUQkQiKTtjYXNlIlxcIjpyZXR1cm4gdGhpcy5jbGFzc0VzY2FwZSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpfX1jbGFzc0VzY2FwZSgpe3N3aXRjaCh0aGlzLmNvbnN1bWVDaGFyKCJcXCIpLHRoaXMucGVla0NoYXIoKSl7Y2FzZSJiIjpyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiYiIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKCJcYiIpfTtjYXNlImQiOmNhc2UiRCI6Y2FzZSJzIjpjYXNlIlMiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdGhpcy5jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpO2Nhc2UiZiI6Y2FzZSJuIjpjYXNlInIiOmNhc2UidCI6Y2FzZSJ2IjpyZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO2Nhc2UiYyI6cmV0dXJuIHRoaXMuY29udHJvbExldHRlckVzY2FwZUF0b20oKTtjYXNlIjAiOnJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtjYXNlIngiOnJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO2Nhc2UidSI6cmV0dXJuIHRoaXMucmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCl9fWdyb3VwKCl7bGV0IGU9ITA7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIigiKSx0aGlzLnBlZWtDaGFyKDApKXtjYXNlIj8iOnRoaXMuY29uc3VtZUNoYXIoIj8iKSx0aGlzLmNvbnN1bWVDaGFyKCI6IiksZT0hMTticmVhaztkZWZhdWx0OnRoaXMuZ3JvdXBJZHgrKzticmVha31sZXQgcj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiKSIpO2xldCBuPXt0eXBlOiJHcm91cCIsY2FwdHVyaW5nOmUsdmFsdWU6cn07cmV0dXJuIGUmJihuLmlkeD10aGlzLmdyb3VwSWR4KSxufXBvc2l0aXZlSW50ZWdlcigpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKFFQZS50ZXN0KGUpPT09ITEpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IoOyRULnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1pbnRlZ2VySW5jbHVkaW5nWmVybygpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKCRULnRlc3QoZSk9PT0hMSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGFuIGludGVnZXIiKTtmb3IoOyRULnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1wYXR0ZXJuQ2hhcmFjdGVyKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7c3dpdGNoKGUpe2Nhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpjYXNlIl4iOmNhc2UiJCI6Y2FzZSJcXCI6Y2FzZSIuIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpjYXNlIigiOmNhc2UiKSI6Y2FzZSJbIjpjYXNlInwiOnRocm93IEVycm9yKCJUQkQiKTtkZWZhdWx0OnJldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKGUpfX19aXNSZWdFeHBGbGFnKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiZyI6Y2FzZSJpIjpjYXNlIm0iOmNhc2UidSI6Y2FzZSJ5IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1pc1JhbmdlRGFzaCgpe3JldHVybiB0aGlzLnBlZWtDaGFyKCk9PT0iLSImJnRoaXMuaXNDbGFzc0F0b20oMSl9aXNEaWdpdCgpe3JldHVybiAkVC50ZXN0KHRoaXMucGVla0NoYXIoMCkpfWlzQ2xhc3NBdG9tKGU9MCl7c3dpdGNoKHRoaXMucGVla0NoYXIoZSkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWlzVGVybSgpe3JldHVybiB0aGlzLmlzQXRvbSgpfHx0aGlzLmlzQXNzZXJ0aW9uKCl9aXNBdG9tKCl7aWYodGhpcy5pc1BhdHRlcm5DaGFyYWN0ZXIoKSlyZXR1cm4hMDtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSIuIjpjYXNlIlxcIjpjYXNlIlsiOmNhc2UiKCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19aXNBc3NlcnRpb24oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJeIjpjYXNlIiQiOnJldHVybiEwO2Nhc2UiXFwiOnN3aXRjaCh0aGlzLnBlZWtDaGFyKDEpKXtjYXNlImIiOmNhc2UiQiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIigiOnJldHVybiB0aGlzLnBlZWtDaGFyKDEpPT09Ij8iJiYodGhpcy5wZWVrQ2hhcigyKT09PSI9Inx8dGhpcy5wZWVrQ2hhcigyKT09PSIhIik7ZGVmYXVsdDpyZXR1cm4hMX19aXNRdWFudGlmaWVyKCl7bGV0IGU9dGhpcy5zYXZlU3RhdGUoKTt0cnl7cmV0dXJuIHRoaXMucXVhbnRpZmllcighMCkhPT12b2lkIDB9Y2F0Y2h7cmV0dXJuITF9ZmluYWxseXt0aGlzLnJlc3RvcmVTdGF0ZShlKX19aXNQYXR0ZXJuQ2hhcmFjdGVyKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJeIjpjYXNlIiQiOmNhc2UiXFwiOmNhc2UiLiI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiPyI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiWyI6Y2FzZSJ8IjpjYXNlIi8iOmNhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1wYXJzZUhleERpZ2l0cyhlKXtsZXQgcj0iIjtmb3IobGV0IGk9MDtpPGU7aSsrKXtsZXQgYT10aGlzLnBvcENoYXIoKTtpZihLUGUudGVzdChhKT09PSExKXRocm93IEVycm9yKCJFeHBlY3RpbmcgYSBIZXhEZWNpbWFsIGRpZ2l0cyIpO3IrPWF9cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6cGFyc2VJbnQociwxNil9fXBlZWtDaGFyKGU9MCl7cmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5pZHgrZV19cG9wQ2hhcigpe2xldCBlPXRoaXMucGVla0NoYXIoMCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIodm9pZCAwKSxlfWNvbnN1bWVDaGFyKGUpe2lmKGUhPT12b2lkIDAmJnRoaXMuaW5wdXRbdGhpcy5pZHhdIT09ZSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQ6ICciK2UrIicgYnV0IGZvdW5kOiAnIit0aGlzLmlucHV0W3RoaXMuaWR4XSsiJyBhdCBvZmZzZXQ6ICIrdGhpcy5pZHgpO2lmKHRoaXMuaWR4Pj10aGlzLmlucHV0Lmxlbmd0aCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKTt0aGlzLmlkeCsrfWxvYyhlKXtyZXR1cm57YmVnaW46ZSxlbmQ6dGhpcy5pZHh9fX19KTt2YXIgemMsR2FlPU0oKCk9PnsidXNlIHN0cmljdCI7emM9Y2xhc3N7c3RhdGlje28odGhpcywiQmFzZVJlZ0V4cFZpc2l0b3IiKX12aXNpdENoaWxkcmVuKGUpe2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO2UuaGFzT3duUHJvcGVydHkocikmJihuLnR5cGUhPT12b2lkIDA/dGhpcy52aXNpdChuKTpBcnJheS5pc0FycmF5KG4pJiZuLmZvckVhY2goaT0+e3RoaXMudmlzaXQoaSl9LHRoaXMpKX19dmlzaXQoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJQYXR0ZXJuIjp0aGlzLnZpc2l0UGF0dGVybihlKTticmVhaztjYXNlIkZsYWdzIjp0aGlzLnZpc2l0RmxhZ3MoZSk7YnJlYWs7Y2FzZSJEaXNqdW5jdGlvbiI6dGhpcy52aXNpdERpc2p1bmN0aW9uKGUpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUiOnRoaXMudmlzaXRBbHRlcm5hdGl2ZShlKTticmVhaztjYXNlIlN0YXJ0QW5jaG9yIjp0aGlzLnZpc2l0U3RhcnRBbmNob3IoZSk7YnJlYWs7Y2FzZSJFbmRBbmNob3IiOnRoaXMudmlzaXRFbmRBbmNob3IoZSk7YnJlYWs7Y2FzZSJXb3JkQm91bmRhcnkiOnRoaXMudmlzaXRXb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJOb25Xb3JkQm91bmRhcnkiOnRoaXMudmlzaXROb25Xb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJMb29rYWhlYWQiOnRoaXMudmlzaXRMb29rYWhlYWQoZSk7YnJlYWs7Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6dGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpO2JyZWFrO2Nhc2UiQ2hhcmFjdGVyIjp0aGlzLnZpc2l0Q2hhcmFjdGVyKGUpO2JyZWFrO2Nhc2UiU2V0Ijp0aGlzLnZpc2l0U2V0KGUpO2JyZWFrO2Nhc2UiR3JvdXAiOnRoaXMudmlzaXRHcm91cChlKTticmVhaztjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6dGhpcy52aXNpdEdyb3VwQmFja1JlZmVyZW5jZShlKTticmVhaztjYXNlIlF1YW50aWZpZXIiOnRoaXMudmlzaXRRdWFudGlmaWVyKGUpO2JyZWFrfXRoaXMudmlzaXRDaGlsZHJlbihlKX12aXNpdFBhdHRlcm4oZSl7fXZpc2l0RmxhZ3MoZSl7fXZpc2l0RGlzanVuY3Rpb24oZSl7fXZpc2l0QWx0ZXJuYXRpdmUoZSl7fXZpc2l0U3RhcnRBbmNob3IoZSl7fXZpc2l0RW5kQW5jaG9yKGUpe312aXNpdFdvcmRCb3VuZGFyeShlKXt9dmlzaXROb25Xb3JkQm91bmRhcnkoZSl7fXZpc2l0TG9va2FoZWFkKGUpe312aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpe312aXNpdENoYXJhY3RlcihlKXt9dmlzaXRTZXQoZSl7fXZpc2l0R3JvdXAoZSl7fXZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlKGUpe312aXNpdFF1YW50aWZpZXIoZSl7fX19KTt2YXIgZjI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6YWUoKTtHYWUoKX0pO3ZhciBVVD17fTt2cihVVCx7TkVXTElORV9SRUdFWFA6KCk9PlhOLGVzY2FwZVJlZ0V4cDooKT0+bzAsZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybjooKT0+S04sZ2V0VGVybWluYWxQYXJ0czooKT0+WlBlLGlzTXVsdGlsaW5lQ29tbWVudDooKT0+ak4saXNXaGl0ZXNwYWNlOigpPT5WVCxwYXJ0aWFsTWF0Y2hlczooKT0+UU4scGFydGlhbFJlZ0V4cDooKT0+VmFlfSk7ZnVuY3Rpb24gWlBlKHQpe3RyeXt0eXBlb2YgdCE9InN0cmluZyImJih0PXQuc291cmNlKSx0PWAvJHt0fS9gO2xldCBlPSRhZS5wYXR0ZXJuKHQpLHI9W107Zm9yKGxldCBuIG9mIGUudmFsdWUudmFsdWUpczAucmVzZXQodCksczAudmlzaXQobiksci5wdXNoKHtzdGFydDpzMC5zdGFydFJlZ2V4cCxlbmQ6czAuZW5kUmVnZXh9KTtyZXR1cm4gcn1jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gak4odCl7dHJ5e3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJih0PW5ldyBSZWdFeHAodCkpLHQ9dC50b1N0cmluZygpLHMwLnJlc2V0KHQpLHMwLnZpc2l0KCRhZS5wYXR0ZXJuKHQpKSxzMC5tdWx0aWxpbmV9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIFZUKHQpe3JldHVybih0eXBlb2YgdD09InN0cmluZyI/bmV3IFJlZ0V4cCh0KTp0KS50ZXN0KCIgIil9ZnVuY3Rpb24gbzAodCl7cmV0dXJuIHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBLTih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHQsZT0+L1x3Ly50ZXN0KGUpP2BbJHtlLnRvTG93ZXJDYXNlKCl9JHtlLnRvVXBwZXJDYXNlKCl9XWA6bzAoZSkpLmpvaW4oIiIpfWZ1bmN0aW9uIFFOKHQsZSl7bGV0IHI9VmFlKHQpLG49ZS5tYXRjaChyKTtyZXR1cm4hIW4mJm5bMF0ubGVuZ3RoPjB9ZnVuY3Rpb24gVmFlKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9bmV3IFJlZ0V4cCh0KSk7bGV0IGU9dCxyPXQuc291cmNlLG49MDtmdW5jdGlvbiBpKCl7bGV0IGE9IiIscztmdW5jdGlvbiBsKGgpe2ErPXIuc3Vic3RyKG4saCksbis9aH1vKGwsImFwcGVuZFJhdyIpO2Z1bmN0aW9uIHUoaCl7YSs9Iig/OiIrci5zdWJzdHIobixoKSsifCQpIixuKz1ofWZvcihvKHUsImFwcGVuZE9wdGlvbmFsIik7bjxyLmxlbmd0aDspc3dpdGNoKHJbbl0pe2Nhc2UiXFwiOnN3aXRjaChyW24rMV0pe2Nhc2UiYyI6dSgzKTticmVhaztjYXNlIngiOnUoNCk7YnJlYWs7Y2FzZSJ1IjplLnVuaWNvZGU/cltuKzJdPT09InsiP3Uoci5pbmRleE9mKCJ9IixuKS1uKzEpOnUoNik6dSgyKTticmVhaztjYXNlInAiOmNhc2UiUCI6ZS51bmljb2RlP3Uoci5pbmRleE9mKCJ9IixuKS1uKzEpOnUoMik7YnJlYWs7Y2FzZSJrIjp1KHIuaW5kZXhPZigiPiIsbiktbisxKTticmVhaztkZWZhdWx0OnUoMik7YnJlYWt9YnJlYWs7Y2FzZSJbIjpzPS9cWyg/OlxcLnwuKSo/XF0vZyxzLmxhc3RJbmRleD1uLHM9cy5leGVjKHIpfHxbXSx1KHNbMF0ubGVuZ3RoKTticmVhaztjYXNlInwiOmNhc2UiXiI6Y2FzZSIkIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpsKDEpO2JyZWFrO2Nhc2UieyI6cz0vXHtcZCssP1xkKlx9L2cscy5sYXN0SW5kZXg9bixzPXMuZXhlYyhyKSxzP2woc1swXS5sZW5ndGgpOnUoMSk7YnJlYWs7Y2FzZSIoIjppZihyW24rMV09PT0iPyIpc3dpdGNoKHJbbisyXSl7Y2FzZSI6IjphKz0iKD86IixuKz0zLGErPWkoKSsifCQpIjticmVhaztjYXNlIj0iOmErPSIoPz0iLG4rPTMsYSs9aSgpKyIpIjticmVhaztjYXNlIiEiOnM9bixuKz0zLGkoKSxhKz1yLnN1YnN0cihzLG4tcyk7YnJlYWs7Y2FzZSI8Ijpzd2l0Y2gocltuKzNdKXtjYXNlIj0iOmNhc2UiISI6cz1uLG4rPTQsaSgpLGErPXIuc3Vic3RyKHMsbi1zKTticmVhaztkZWZhdWx0Omwoci5pbmRleE9mKCI+IixuKS1uKzEpLGErPWkoKSsifCQpIjticmVha31icmVha31lbHNlIGwoMSksYSs9aSgpKyJ8JCkiO2JyZWFrO2Nhc2UiKSI6cmV0dXJuKytuLGE7ZGVmYXVsdDp1KDEpO2JyZWFrfXJldHVybiBhfXJldHVybiBvKGksInByb2Nlc3MiKSxuZXcgUmVnRXhwKGkoKSx0LmZsYWdzKX12YXIgWE4sJGFlLHFOLHMwLGlnPU0oKCk9PnsidXNlIHN0cmljdCI7ZjIoKTtYTj0vXHI/XG4vZ20sJGFlPW5ldyBhMCxxTj1jbGFzcyBleHRlbmRzIHpje3N0YXRpY3tvKHRoaXMsIlRlcm1pbmFsUmVnRXhwVmlzaXRvciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXSx0aGlzLm11bHRpbGluZT0hMX1nZXQgZW5kUmVnZXgoKXtyZXR1cm4gdGhpcy5lbmRSZWdleHBTdGFjay5qb2luKCIiKX1yZXNldChlKXt0aGlzLm11bHRpbGluZT0hMSx0aGlzLnJlZ2V4PWUsdGhpcy5zdGFydFJlZ2V4cD0iIix0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXX12aXNpdEdyb3VwKGUpe2UucXVhbnRpZmllciYmKHRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdKX12aXNpdENoYXJhY3RlcihlKXtsZXQgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUudmFsdWUpO2lmKCF0aGlzLm11bHRpbGluZSYmcj09PWAKYCYmKHRoaXMubXVsdGlsaW5lPSEwKSxlLnF1YW50aWZpZXIpdGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W107ZWxzZXtsZXQgbj1vMChyKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gobiksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9bil9fXZpc2l0U2V0KGUpe2lmKCF0aGlzLm11bHRpbGluZSl7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKSxuPW5ldyBSZWdFeHAocik7dGhpcy5tdWx0aWxpbmU9ISFgCmAubWF0Y2gobil9aWYoZS5xdWFudGlmaWVyKXRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdO2Vsc2V7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gociksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9cil9fXZpc2l0Q2hpbGRyZW4oZSl7ZS50eXBlPT09Ikdyb3VwIiYmZS5xdWFudGlmaWVyfHxzdXBlci52aXNpdENoaWxkcmVuKGUpfX0sczA9bmV3IHFOO28oWlBlLCJnZXRUZXJtaW5hbFBhcnRzIik7byhqTiwiaXNNdWx0aWxpbmVDb21tZW50Iik7byhWVCwiaXNXaGl0ZXNwYWNlIik7byhvMCwiZXNjYXBlUmVnRXhwIik7byhLTiwiZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybiIpO28oUU4sInBhcnRpYWxNYXRjaGVzIik7byhWYWUsInBhcnRpYWxSZWdFeHAiKX0pO3ZhciBXVD17fTt2cihXVCx7ZmluZEFzc2lnbm1lbnQ6KCk9PnNSLGZpbmROYW1lQXNzaWdubWVudDooKT0+SFQsZmluZE5vZGVGb3JLZXl3b3JkOigpPT5pUixmaW5kTm9kZUZvclByb3BlcnR5OigpPT5wMixmaW5kTm9kZXNGb3JLZXl3b3JkOigpPT5KUGUsZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsOigpPT5hUixmaW5kTm9kZXNGb3JQcm9wZXJ0eTooKT0+clIsZ2V0QWN0aW9uQXRFbGVtZW50OigpPT5xYWUsZ2V0QWN0aW9uVHlwZTooKT0+amFlLGdldEFsbFJlYWNoYWJsZVJ1bGVzOigpPT5kMixnZXRDcm9zc1JlZmVyZW5jZVRlcm1pbmFsOigpPT5lUixnZXRFbnRyeVJ1bGU6KCk9PlVhZSxnZXRFeHBsaWNpdFJ1bGVUeXBlOigpPT5vUixnZXRIaWRkZW5SdWxlczooKT0+SGFlLGdldFJ1bGVUeXBlOigpPT5sUixnZXRUeXBlTmFtZTooKT0+bDAsaXNBcnJheUNhcmRpbmFsaXR5OigpPT50QmUsaXNBcnJheU9wZXJhdG9yOigpPT5yQmUsaXNDb21tZW50VGVybWluYWw6KCk9PnRSLGlzRGF0YVR5cGU6KCk9Pm5CZSxpc0RhdGFUeXBlUnVsZTooKT0+bTIsaXNPcHRpb25hbENhcmRpbmFsaXR5OigpPT5lQmUsdGVybWluYWxSZWdleDooKT0+YWd9KTtmdW5jdGlvbiBVYWUodCl7cmV0dXJuIHQucnVsZXMuZmluZChlPT5HYShlKSYmZS5lbnRyeSl9ZnVuY3Rpb24gSGFlKHQpe3JldHVybiB0LnJ1bGVzLmZpbHRlcihlPT5KbyhlKSYmZS5oaWRkZW4pfWZ1bmN0aW9uIGQyKHQsZSl7bGV0IHI9bmV3IFNldCxuPVVhZSh0KTtpZighbilyZXR1cm4gbmV3IFNldCh0LnJ1bGVzKTtsZXQgaT1bbl0uY29uY2F0KEhhZSh0KSk7Zm9yKGxldCBzIG9mIGkpV2FlKHMscixlKTtsZXQgYT1uZXcgU2V0O2ZvcihsZXQgcyBvZiB0LnJ1bGVzKShyLmhhcyhzLm5hbWUpfHxKbyhzKSYmcy5oaWRkZW4pJiZhLmFkZChzKTtyZXR1cm4gYX1mdW5jdGlvbiBXYWUodCxlLHIpe2UuYWRkKHQubmFtZSksRmModCkuZm9yRWFjaChuPT57aWYoJGwobil8fHImJlBUKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2kmJiFlLmhhcyhpLm5hbWUpJiZXYWUoaSxlLHIpfX0pfWZ1bmN0aW9uIGVSKHQpe2lmKHQudGVybWluYWwpcmV0dXJuIHQudGVybWluYWw7aWYodC50eXBlLnJlZil7bGV0IGU9SFQodC50eXBlLnJlZik7cmV0dXJuIGU/LnRlcm1pbmFsfX1mdW5jdGlvbiB0Uih0KXtyZXR1cm4gdC5oaWRkZW4mJiFhZyh0KS50ZXN0KCIgIil9ZnVuY3Rpb24gclIodCxlKXtyZXR1cm4hdHx8IWU/W106blIodCxlLHQuYXN0Tm9kZSwhMCl9ZnVuY3Rpb24gcDIodCxlLHIpe2lmKCF0fHwhZSlyZXR1cm47bGV0IG49blIodCxlLHQuYXN0Tm9kZSwhMCk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBuUih0LGUscixuKXtpZighbil7bGV0IGk9bjAodC5ncmFtbWFyU291cmNlLEdsKTtpZihpJiZpLmZlYXR1cmU9PT1lKXJldHVyblt0XX1yZXR1cm4gaG8odCkmJnQuYXN0Tm9kZT09PXI/dC5jb250ZW50LmZsYXRNYXAoaT0+blIoaSxlLHIsITEpKTpbXX1mdW5jdGlvbiBKUGUodCxlKXtyZXR1cm4gdD9hUih0LGUsdD8uYXN0Tm9kZSk6W119ZnVuY3Rpb24gaVIodCxlLHIpe2lmKCF0KXJldHVybjtsZXQgbj1hUih0LGUsdD8uYXN0Tm9kZSk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBhUih0LGUscil7aWYodC5hc3ROb2RlIT09cilyZXR1cm5bXTtpZihlbCh0LmdyYW1tYXJTb3VyY2UpJiZ0LmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lKXJldHVyblt0XTtsZXQgbj1KZCh0KS5pdGVyYXRvcigpLGksYT1bXTtkbyBpZihpPW4ubmV4dCgpLCFpLmRvbmUpe2xldCBzPWkudmFsdWU7cy5hc3ROb2RlPT09cj9lbChzLmdyYW1tYXJTb3VyY2UpJiZzLmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lJiZhLnB1c2gocyk6bi5wcnVuZSgpfXdoaWxlKCFpLmRvbmUpO3JldHVybiBhfWZ1bmN0aW9uIHNSKHQpe3ZhciBlO2xldCByPXQuYXN0Tm9kZTtmb3IoO3I9PT0oKGU9dC5jb250YWluZXIpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5hc3ROb2RlKTspe2xldCBuPW4wKHQuZ3JhbW1hclNvdXJjZSxHbCk7aWYobilyZXR1cm4gbjt0PXQuY29udGFpbmVyfX1mdW5jdGlvbiBIVCh0KXtsZXQgZT10O3JldHVybiBSVChlKSYmKFZ1KGUuJGNvbnRhaW5lcik/ZT1lLiRjb250YWluZXIuJGNvbnRhaW5lcjpHYShlLiRjb250YWluZXIpP2U9ZS4kY29udGFpbmVyOnVmKGUuJGNvbnRhaW5lcikpLFlhZSh0LGUsbmV3IE1hcCl9ZnVuY3Rpb24gWWFlKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKGEscyl7bGV0IGw7cmV0dXJuIG4wKGEsR2wpfHwobD1ZYWUocyxzLHIpKSxyLnNldCh0LGwpLGx9aWYobyhpLCJnbyIpLHIuaGFzKHQpKXJldHVybiByLmdldCh0KTtyLnNldCh0LHZvaWQgMCk7Zm9yKGxldCBhIG9mIEZjKGUpKXtpZihHbChhKSYmYS5mZWF0dXJlLnRvTG93ZXJDYXNlKCk9PT0ibmFtZSIpcmV0dXJuIHIuc2V0KHQsYSksYTtpZigkbChhKSYmR2EoYS5ydWxlLnJlZikpcmV0dXJuIGkoYSxhLnJ1bGUucmVmKTtpZihJVChhKSYmKCEoKG49YS50eXBlUmVmKT09PW51bGx8fG49PT12b2lkIDApJiZuLnJlZikpcmV0dXJuIGkoYSxhLnR5cGVSZWYucmVmKX19ZnVuY3Rpb24gcWFlKHQpe2xldCBlPXQuJGNvbnRhaW5lcjtpZihoZihlKSl7bGV0IHI9ZS5lbGVtZW50cyxuPXIuaW5kZXhPZih0KTtmb3IobGV0IGk9bi0xO2k+PTA7aS0tKXtsZXQgYT1yW2ldO2lmKFZ1KGEpKXJldHVybiBhO3tsZXQgcz1GYyhyW2ldKS5maW5kKFZ1KTtpZihzKXJldHVybiBzfX19aWYoYTIoZSkpcmV0dXJuIHFhZShlKX1mdW5jdGlvbiBlQmUodCxlKXtyZXR1cm4gdD09PSI/Inx8dD09PSIqInx8aGYoZSkmJiEhZS5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiB0QmUodCl7cmV0dXJuIHQ9PT0iKiJ8fHQ9PT0iKyJ9ZnVuY3Rpb24gckJlKHQpe3JldHVybiB0PT09Iis9In1mdW5jdGlvbiBtMih0KXtyZXR1cm4gWGFlKHQsbmV3IFNldCl9ZnVuY3Rpb24gWGFlKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7ZS5hZGQodCk7Zm9yKGxldCByIG9mIEZjKHQpKWlmKCRsKHIpKXtpZighci5ydWxlLnJlZnx8R2Eoci5ydWxlLnJlZikmJiFYYWUoci5ydWxlLnJlZixlKSlyZXR1cm4hMX1lbHNle2lmKEdsKHIpKXJldHVybiExO2lmKFZ1KHIpKXJldHVybiExfXJldHVybiEhdC5kZWZpbml0aW9ufWZ1bmN0aW9uIG5CZSh0KXtyZXR1cm4gSk4odC50eXBlLG5ldyBTZXQpfWZ1bmN0aW9uIEpOKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7aWYoZS5hZGQodCksV0QodCkpcmV0dXJuITE7aWYoY04odCkpcmV0dXJuITE7aWYobU4odCkpcmV0dXJuIHQudHlwZXMuZXZlcnkocj0+Sk4ocixlKSk7aWYoSVQodCkpe2lmKHQucHJpbWl0aXZlVHlwZSE9PXZvaWQgMClyZXR1cm4hMDtpZih0LnN0cmluZ1R5cGUhPT12b2lkIDApcmV0dXJuITA7aWYodC50eXBlUmVmIT09dm9pZCAwKXtsZXQgcj10LnR5cGVSZWYucmVmO3JldHVybiBzMihyKT9KTihyLnR5cGUsZSk6ITF9ZWxzZSByZXR1cm4hMX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIG9SKHQpe2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKHQuZGF0YVR5cGUpcmV0dXJuIHQuZGF0YVR5cGU7aWYodC5yZXR1cm5UeXBlKXtsZXQgZT10LnJldHVyblR5cGUucmVmO2lmKGUpe2lmKEdhKGUpKXJldHVybiBlLm5hbWU7aWYoTVQoZSl8fHMyKGUpKXJldHVybiBlLm5hbWV9fX1mdW5jdGlvbiBsMCh0KXt2YXIgZTtpZihHYSh0KSlyZXR1cm4gbTIodCk/dC5uYW1lOihlPW9SKHQpKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0Lm5hbWU7aWYoTVQodCl8fHMyKHQpfHx1Tih0KSlyZXR1cm4gdC5uYW1lO2lmKFZ1KHQpKXtsZXQgcj1qYWUodCk7aWYocilyZXR1cm4gcn1lbHNlIGlmKFJUKHQpKXJldHVybiB0Lm5hbWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IG5hbWUgb2YgVW5rbm93biBUeXBlIil9ZnVuY3Rpb24gamFlKHQpe3ZhciBlO2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKCEoKGU9dC50eXBlKT09PW51bGx8fGU9PT12b2lkIDApJiZlLnJlZilyZXR1cm4gbDAodC50eXBlLnJlZil9ZnVuY3Rpb24gbFIodCl7dmFyIGUscixuO3JldHVybiBKbyh0KT8ocj0oZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5uYW1lKSE9PW51bGwmJnIhPT12b2lkIDA/cjoic3RyaW5nIjptMih0KT90Lm5hbWU6KG49b1IodCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnQubmFtZX1mdW5jdGlvbiBhZyh0KXtsZXQgZT17czohMSxpOiExLHU6ITF9LHI9c2codC5kZWZpbml0aW9uLGUpLG49T2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbLGldKT0+aSkubWFwKChbaV0pPT5pKS5qb2luKCIiKTtyZXR1cm4gbmV3IFJlZ0V4cChyLG4pfWZ1bmN0aW9uIHNnKHQsZSl7aWYoUk4odCkpcmV0dXJuIGlCZSh0KTtpZihJTih0KSlyZXR1cm4gYUJlKHQpO2lmKGJOKHQpKXJldHVybiBsQmUodCk7aWYoUFQodCkpe2xldCByPXQucnVsZS5yZWY7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJ1bGUgcmVmZXJlbmNlLiIpO3JldHVybiBVdShzZyhyLmRlZmluaXRpb24pLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWVsc2V7aWYoQU4odCkpcmV0dXJuIG9CZSh0KTtpZihGTih0KSlyZXR1cm4gc0JlKHQpO2lmKExOKHQpKXtsZXQgcj10LnJlZ2V4Lmxhc3RJbmRleE9mKCIvIiksbj10LnJlZ2V4LnN1YnN0cmluZygxLHIpLGk9dC5yZWdleC5zdWJzdHJpbmcocisxKTtyZXR1cm4gZSYmKGUuaT1pLmluY2x1ZGVzKCJpIiksZS5zPWkuaW5jbHVkZXMoInMiKSxlLnU9aS5pbmNsdWRlcygidSIpKSxVdShuLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZCx3cmFwOiExfSl9ZWxzZXtpZihHTih0KSlyZXR1cm4gVXUoY1Ise2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSk7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlcm1pbmFsIGVsZW1lbnQ6ICR7dD8uJHR5cGV9YCl9fX1mdW5jdGlvbiBpQmUodCl7cmV0dXJuIFV1KHQuZWxlbWVudHMubWFwKGU9PnNnKGUpKS5qb2luKCJ8Iikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZnVuY3Rpb24gYUJlKHQpe3JldHVybiBVdSh0LmVsZW1lbnRzLm1hcChlPT5zZyhlKSkuam9pbigiIikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZnVuY3Rpb24gc0JlKHQpe3JldHVybiBVdShgJHtjUn0qPyR7c2codC50ZXJtaW5hbCl9YCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiBvQmUodCl7cmV0dXJuIFV1KGAoPyEke3NnKHQudGVybWluYWwpfSkke2NSfSo/YCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiBsQmUodCl7cmV0dXJuIHQucmlnaHQ/VXUoYFske1pOKHQubGVmdCl9LSR7Wk4odC5yaWdodCl9XWAse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KTpVdShaTih0LmxlZnQpLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZCx3cmFwOiExfSl9ZnVuY3Rpb24gWk4odCl7cmV0dXJuIG8wKHQudmFsdWUpfWZ1bmN0aW9uIFV1KHQsZSl7dmFyIHI7cmV0dXJuKGUud3JhcCE9PSExfHxlLmxvb2thaGVhZCkmJih0PWAoJHsocj1lLmxvb2thaGVhZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6IiJ9JHt0fSlgKSxlLmNhcmRpbmFsaXR5P2Ake3R9JHtlLmNhcmRpbmFsaXR5fWA6dH12YXIgY1IsVmw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtfVCgpO0JjKCk7Wm8oKTtvcygpO3psKCk7aWcoKTtvKFVhZSwiZ2V0RW50cnlSdWxlIik7byhIYWUsImdldEhpZGRlblJ1bGVzIik7byhkMiwiZ2V0QWxsUmVhY2hhYmxlUnVsZXMiKTtvKFdhZSwicnVsZURmcyIpO28oZVIsImdldENyb3NzUmVmZXJlbmNlVGVybWluYWwiKTtvKHRSLCJpc0NvbW1lbnRUZXJtaW5hbCIpO28oclIsImZpbmROb2Rlc0ZvclByb3BlcnR5Iik7byhwMiwiZmluZE5vZGVGb3JQcm9wZXJ0eSIpO28oblIsImZpbmROb2Rlc0ZvclByb3BlcnR5SW50ZXJuYWwiKTtvKEpQZSwiZmluZE5vZGVzRm9yS2V5d29yZCIpO28oaVIsImZpbmROb2RlRm9yS2V5d29yZCIpO28oYVIsImZpbmROb2Rlc0ZvcktleXdvcmRJbnRlcm5hbCIpO28oc1IsImZpbmRBc3NpZ25tZW50Iik7byhIVCwiZmluZE5hbWVBc3NpZ25tZW50Iik7byhZYWUsImZpbmROYW1lQXNzaWdubWVudEludGVybmFsIik7byhxYWUsImdldEFjdGlvbkF0RWxlbWVudCIpO28oZUJlLCJpc09wdGlvbmFsQ2FyZGluYWxpdHkiKTtvKHRCZSwiaXNBcnJheUNhcmRpbmFsaXR5Iik7byhyQmUsImlzQXJyYXlPcGVyYXRvciIpO28obTIsImlzRGF0YVR5cGVSdWxlIik7byhYYWUsImlzRGF0YVR5cGVSdWxlSW50ZXJuYWwiKTtvKG5CZSwiaXNEYXRhVHlwZSIpO28oSk4sImlzRGF0YVR5cGVJbnRlcm5hbCIpO28ob1IsImdldEV4cGxpY2l0UnVsZVR5cGUiKTtvKGwwLCJnZXRUeXBlTmFtZSIpO28oamFlLCJnZXRBY3Rpb25UeXBlIik7byhsUiwiZ2V0UnVsZVR5cGUiKTtvKGFnLCJ0ZXJtaW5hbFJlZ2V4Iik7Y1I9L1tcc1xTXS8uc291cmNlO28oc2csImFic3RyYWN0RWxlbWVudFRvUmVnZXgiKTtvKGlCZSwidGVybWluYWxBbHRlcm5hdGl2ZXNUb1JlZ2V4Iik7byhhQmUsInRlcm1pbmFsR3JvdXBUb1JlZ2V4Iik7byhzQmUsInVudGlsVG9rZW5Ub1JlZ2V4Iik7byhvQmUsIm5lZ2F0ZVRva2VuVG9SZWdleCIpO28obEJlLCJjaGFyYWN0ZXJSYW5nZVRvUmVnZXgiKTtvKFpOLCJrZXl3b3JkVG9SZWdleCIpO28oVXUsIndpdGhDYXJkaW5hbGl0eSIpfSk7ZnVuY3Rpb24gdVIodCl7bGV0IGU9W10scj10LkdyYW1tYXI7Zm9yKGxldCBuIG9mIHIucnVsZXMpSm8obikmJnRSKG4pJiZqTihhZyhuKSkmJmUucHVzaChuLm5hbWUpO3JldHVybnttdWx0aWxpbmVDb21tZW50UnVsZXM6ZSxuYW1lUmVnZXhwOkNUfX12YXIgaFI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6bCgpO1ZsKCk7aWcoKTtCYygpO28odVIsImNyZWF0ZUdyYW1tYXJDb25maWciKX0pO3ZhciBmUj1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gb2codCl7Y29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihgRXJyb3I6ICR7dH1gKX1mdW5jdGlvbiBnMih0KXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihgV2FybmluZzogJHt0fWApfXZhciBLYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG9nLCJQUklOVF9FUlJPUiIpO28oZzIsIlBSSU5UX1dBUk5JTkciKX0pO2Z1bmN0aW9uIHkyKHQpe2xldCBlPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHI9dCgpO3JldHVybnt0aW1lOm5ldyBEYXRlKCkuZ2V0VGltZSgpLWUsdmFsdWU6cn19dmFyIFFhZT1NKCgpPT57InVzZSBzdHJpY3QiO28oeTIsInRpbWVyIil9KTtmdW5jdGlvbiB2Mih0KXtmdW5jdGlvbiBlKCl7fW8oZSwiRmFrZUNvbnN0cnVjdG9yIiksZS5wcm90b3R5cGU9dDtsZXQgcj1uZXcgZTtmdW5jdGlvbiBuKCl7cmV0dXJuIHR5cGVvZiByLmJhcn1yZXR1cm4gbyhuLCJmYWtlQWNjZXNzIiksbigpLG4oKSx0OygwLGV2YWwpKHQpfXZhciBaYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHYyLCJ0b0Zhc3RQcm9wZXJ0aWVzIil9KTt2YXIgbGc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLYWUoKTtRYWUoKTtaYWUoKX0pO2Z1bmN0aW9uIGNCZSh0KXtyZXR1cm4gdUJlKHQpP3QuTEFCRUw6dC5uYW1lfWZ1bmN0aW9uIHVCZSh0KXtyZXR1cm4gYmkodC5MQUJFTCkmJnQuTEFCRUwhPT0iIn1mdW5jdGlvbiBZVCh0KXtyZXR1cm4gUWUodCxjZyl9ZnVuY3Rpb24gY2codCl7ZnVuY3Rpb24gZShyKXtyZXR1cm4gUWUocixjZyl9aWYobyhlLCJjb252ZXJ0RGVmaW5pdGlvbiIpLHQgaW5zdGFuY2VvZiBubil7bGV0IHI9e3R5cGU6Ik5vblRlcm1pbmFsIixuYW1lOnQubm9uVGVybWluYWxOYW1lLGlkeDp0LmlkeH07cmV0dXJuIGJpKHQubGFiZWwpJiYoci5sYWJlbD10LmxhYmVsKSxyfWVsc2V7aWYodCBpbnN0YW5jZW9mIF9uKXJldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBhbilyZXR1cm57dHlwZToiT3B0aW9uIixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBMbilyZXR1cm57dHlwZToiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRG4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOmNnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgYm4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOmNnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRHIpcmV0dXJue3R5cGU6IlJlcGV0aXRpb24iLGlkeDp0LmlkeCxkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIHduKXJldHVybnt0eXBlOiJBbHRlcm5hdGlvbiIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRXIpe2xldCByPXt0eXBlOiJUZXJtaW5hbCIsbmFtZTp0LnRlcm1pbmFsVHlwZS5uYW1lLGxhYmVsOmNCZSh0LnRlcm1pbmFsVHlwZSksaWR4OnQuaWR4fTtiaSh0LmxhYmVsKSYmKHIudGVybWluYWxMYWJlbD10LmxhYmVsKTtsZXQgbj10LnRlcm1pbmFsVHlwZS5QQVRURVJOO3JldHVybiB0LnRlcm1pbmFsVHlwZS5QQVRURVJOJiYoci5wYXR0ZXJuPVhvKG4pP24uc291cmNlOm4pLHJ9ZWxzZXtpZih0IGluc3RhbmNlb2YgbHMpcmV0dXJue3R5cGU6IlJ1bGUiLG5hbWU6dC5uYW1lLG9yZ1RleHQ6dC5vcmdUZXh0LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19fXZhciBwbyxubixscyxfbixhbixMbixEbixEcixibix3bixFcixxVD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhjQmUsInRva2VuTGFiZWwiKTtvKHVCZSwiaGFzVG9rZW5MYWJlbCIpO3BvPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UHJvZHVjdGlvbiIpfWdldCBkZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmluaXRpb259c2V0IGRlZmluaXRpb24oZSl7dGhpcy5fZGVmaW5pdGlvbj1lfWNvbnN0cnVjdG9yKGUpe3RoaXMuX2RlZmluaXRpb249ZX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKSxTZSh0aGlzLmRlZmluaXRpb24scj0+e3IuYWNjZXB0KGUpfSl9fSxubj1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIk5vblRlcm1pbmFsIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoW10pLHRoaXMuaWR4PTEsdmEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1zZXQgZGVmaW5pdGlvbihlKXt9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2VkUnVsZSE9PXZvaWQgMD90aGlzLnJlZmVyZW5jZWRSdWxlLmRlZmluaXRpb246W119YWNjZXB0KGUpe2UudmlzaXQodGhpcyl9fSxscz1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIlJ1bGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMub3JnVGV4dD0iIix2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sX249Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJBbHRlcm5hdGl2ZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZ25vcmVBbWJpZ3VpdGllcz0hMSx2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sYW49Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJPcHRpb24iKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsdmEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX19LExuPWNsYXNzIGV4dGVuZHMgcG97c3RhdGlje28odGhpcywiUmVwZXRpdGlvbk1hbmRhdG9yeSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSx2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sRG49Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSx2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sRHI9Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHZhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxibj1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHZhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSx3bj1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIkFsdGVybmF0aW9uIil9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5fZGVmaW5pdGlvbn1zZXQgZGVmaW5pdGlvbihlKXt0aGlzLl9kZWZpbml0aW9uPWV9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHRoaXMuaWdub3JlQW1iaWd1aXRpZXM9ITEsdGhpcy5oYXNQcmVkaWNhdGVzPSExLHZhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxFcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXJtaW5hbCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWR4PTEsdmEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKX19O28oWVQsInNlcmlhbGl6ZUdyYW1tYXIiKTtvKGNnLCJzZXJpYWxpemVQcm9kdWN0aW9uIil9KTt2YXIgY3MsSmFlPU0oKCk9PnsidXNlIHN0cmljdCI7cVQoKTtjcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJHQXN0VmlzaXRvciIpfXZpc2l0KGUpe2xldCByPWU7c3dpdGNoKHIuY29uc3RydWN0b3Ipe2Nhc2Ugbm46cmV0dXJuIHRoaXMudmlzaXROb25UZXJtaW5hbChyKTtjYXNlIF9uOnJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpdmUocik7Y2FzZSBhbjpyZXR1cm4gdGhpcy52aXNpdE9wdGlvbihyKTtjYXNlIExuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShyKTtjYXNlIERuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iocik7Y2FzZSBibjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKHIpO2Nhc2UgRHI6cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKHIpO2Nhc2Ugd246cmV0dXJuIHRoaXMudmlzaXRBbHRlcm5hdGlvbihyKTtjYXNlIEVyOnJldHVybiB0aGlzLnZpc2l0VGVybWluYWwocik7Y2FzZSBsczpyZXR1cm4gdGhpcy52aXNpdFJ1bGUocik7ZGVmYXVsdDp0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19dmlzaXROb25UZXJtaW5hbChlKXt9dmlzaXRBbHRlcm5hdGl2ZShlKXt9dmlzaXRPcHRpb24oZSl7fXZpc2l0UmVwZXRpdGlvbihlKXt9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe312aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe312aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe312aXNpdEFsdGVybmF0aW9uKGUpe312aXNpdFRlcm1pbmFsKGUpe312aXNpdFJ1bGUoZSl7fX19KTtmdW5jdGlvbiBkUih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF9ufHx0IGluc3RhbmNlb2YgYW58fHQgaW5zdGFuY2VvZiBEcnx8dCBpbnN0YW5jZW9mIExufHx0IGluc3RhbmNlb2YgRG58fHQgaW5zdGFuY2VvZiBibnx8dCBpbnN0YW5jZW9mIEVyfHx0IGluc3RhbmNlb2YgbHN9ZnVuY3Rpb24gYzAodCxlPVtdKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGFufHx0IGluc3RhbmNlb2YgRHJ8fHQgaW5zdGFuY2VvZiBibj8hMDp0IGluc3RhbmNlb2Ygd24/cXYodC5kZWZpbml0aW9uLG49PmMwKG4sZSkpOnQgaW5zdGFuY2VvZiBubiYmWW4oZSx0KT8hMTp0IGluc3RhbmNlb2YgcG8/KHQgaW5zdGFuY2VvZiBubiYmZS5wdXNoKHQpLHphKHQuZGVmaW5pdGlvbixuPT5jMChuLGUpKSk6ITF9ZnVuY3Rpb24gcFIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB3bn1mdW5jdGlvbiBWcyh0KXtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIlNVQlJVTEUiO2lmKHQgaW5zdGFuY2VvZiBhbilyZXR1cm4iT1BUSU9OIjtpZih0IGluc3RhbmNlb2Ygd24pcmV0dXJuIk9SIjtpZih0IGluc3RhbmNlb2YgTG4pcmV0dXJuIkFUX0xFQVNUX09ORSI7aWYodCBpbnN0YW5jZW9mIERuKXJldHVybiJBVF9MRUFTVF9PTkVfU0VQIjtpZih0IGluc3RhbmNlb2YgYm4pcmV0dXJuIk1BTllfU0VQIjtpZih0IGluc3RhbmNlb2YgRHIpcmV0dXJuIk1BTlkiO2lmKHQgaW5zdGFuY2VvZiBFcilyZXR1cm4iQ09OU1VNRSI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9dmFyIGVzZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7cVQoKTtvKGRSLCJpc1NlcXVlbmNlUHJvZCIpO28oYzAsImlzT3B0aW9uYWxQcm9kIik7byhwUiwiaXNCcmFuY2hpbmdQcm9kIik7byhWcywiZ2V0UHJvZHVjdGlvbkRzbE5hbWUiKX0pO3ZhciB1cz1NKCgpPT57InVzZSBzdHJpY3QiO3FUKCk7SmFlKCk7ZXNlKCl9KTtmdW5jdGlvbiB0c2UodCxlLHIpe3JldHVybltuZXcgYW4oe2RlZmluaXRpb246W25ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSldLmNvbmNhdCh0LmRlZmluaXRpb24pfSldLmNvbmNhdChlLHIpfXZhciBIdSxYVD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dXMoKTtIdT1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZXN0V2Fsa2VyIil9d2FsayhlLHI9W10pe1NlKGUuZGVmaW5pdGlvbiwobixpKT0+e2xldCBhPXhpKGUuZGVmaW5pdGlvbixpKzEpO2lmKG4gaW5zdGFuY2VvZiBubil0aGlzLndhbGtQcm9kUmVmKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBFcil0aGlzLndhbGtUZXJtaW5hbChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgX24pdGhpcy53YWxrRmxhdChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgYW4pdGhpcy53YWxrT3B0aW9uKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBMbil0aGlzLndhbGtBdExlYXN0T25lKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBEbil0aGlzLndhbGtBdExlYXN0T25lU2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBibil0aGlzLndhbGtNYW55U2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBEcil0aGlzLndhbGtNYW55KG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiB3bil0aGlzLndhbGtPcihuLGEscik7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pfXdhbGtUZXJtaW5hbChlLHIsbil7fXdhbGtQcm9kUmVmKGUscixuKXt9d2Fsa0ZsYXQoZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtPcHRpb24oZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtBdExlYXN0T25lKGUscixuKXtsZXQgaT1bbmV3IGFuKHtkZWZpbml0aW9uOmUuZGVmaW5pdGlvbn0pXS5jb25jYXQocixuKTt0aGlzLndhbGsoZSxpKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7bGV0IGk9dHNlKGUscixuKTt0aGlzLndhbGsoZSxpKX13YWxrTWFueShlLHIsbil7bGV0IGk9W25ldyBhbih7ZGVmaW5pdGlvbjplLmRlZmluaXRpb259KV0uY29uY2F0KHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa01hbnlTZXAoZSxyLG4pe2xldCBpPXRzZShlLHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa09yKGUscixuKXtsZXQgaT1yLmNvbmNhdChuKTtTZShlLmRlZmluaXRpb24sYT0+e2xldCBzPW5ldyBfbih7ZGVmaW5pdGlvbjpbYV19KTt0aGlzLndhbGsocyxpKX0pfX07byh0c2UsInJlc3RGb3JSZXBldGl0aW9uV2l0aFNlcGFyYXRvciIpfSk7ZnVuY3Rpb24gdTAodCl7aWYodCBpbnN0YW5jZW9mIG5uKXJldHVybiB1MCh0LnJlZmVyZW5jZWRSdWxlKTtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIGRCZSh0KTtpZihkUih0KSlyZXR1cm4gaEJlKHQpO2lmKHBSKHQpKXJldHVybiBmQmUodCk7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gaEJlKHQpe2xldCBlPVtdLHI9dC5kZWZpbml0aW9uLG49MCxpPXIubGVuZ3RoPm4sYSxzPSEwO2Zvcig7aSYmczspYT1yW25dLHM9YzAoYSksZT1lLmNvbmNhdCh1MChhKSksbj1uKzEsaT1yLmxlbmd0aD5uO3JldHVybiBYbShlKX1mdW5jdGlvbiBmQmUodCl7bGV0IGU9UWUodC5kZWZpbml0aW9uLHI9PnUwKHIpKTtyZXR1cm4gWG0oV3IoZSkpfWZ1bmN0aW9uIGRCZSh0KXtyZXR1cm5bdC50ZXJtaW5hbFR5cGVdfXZhciBtUj1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dXMoKTtvKHUwLCJmaXJzdCIpO28oaEJlLCJmaXJzdEZvclNlcXVlbmNlIik7byhmQmUsImZpcnN0Rm9yQnJhbmNoaW5nIik7byhkQmUsImZpcnN0Rm9yVGVybWluYWwiKX0pO3ZhciBqVCxnUj1NKCgpPT57InVzZSBzdHJpY3QiO2pUPSJffklOfl8ifSk7ZnVuY3Rpb24gcnNlKHQpe2xldCBlPXt9O3JldHVybiBTZSh0LHI9PntsZXQgbj1uZXcgeVIocikuc3RhcnRXYWxraW5nKCk7dmEoZSxuKX0pLGV9ZnVuY3Rpb24gcEJlKHQsZSl7cmV0dXJuIHQubmFtZStlK2pUfXZhciB5Uixuc2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYVCgpO21SKCk7SHQoKTtnUigpO3VzKCk7eVI9Y2xhc3MgZXh0ZW5kcyBIdXtzdGF0aWN7byh0aGlzLCJSZXN5bmNGb2xsb3dzV2Fsa2VyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLmZvbGxvd3M9e319c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMuZm9sbG93c313YWxrVGVybWluYWwoZSxyLG4pe313YWxrUHJvZFJlZihlLHIsbil7bGV0IGk9cEJlKGUucmVmZXJlbmNlZFJ1bGUsZS5pZHgpK3RoaXMudG9wUHJvZC5uYW1lLGE9ci5jb25jYXQobikscz1uZXcgX24oe2RlZmluaXRpb246YX0pLGw9dTAocyk7dGhpcy5mb2xsb3dzW2ldPWx9fTtvKHJzZSwiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIpO28ocEJlLCJidWlsZEJldHdlZW5Qcm9kc0ZvbGxvd1ByZWZpeCIpfSk7ZnVuY3Rpb24gdWcodCl7bGV0IGU9dC50b1N0cmluZygpO2lmKEtULmhhc093blByb3BlcnR5KGUpKXJldHVybiBLVFtlXTt7bGV0IHI9bUJlLnBhdHRlcm4oZSk7cmV0dXJuIEtUW2VdPXIscn19ZnVuY3Rpb24gaXNlKCl7S1Q9e319dmFyIEtULG1CZSxRVD1NKCgpPT57InVzZSBzdHJpY3QiO2YyKCk7S1Q9e30sbUJlPW5ldyBhMDtvKHVnLCJnZXRSZWdFeHBBc3QiKTtvKGlzZSwiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIpfSk7ZnVuY3Rpb24gb3NlKHQsZT0hMSl7dHJ5e2xldCByPXVnKHQpO3JldHVybiB2UihyLnZhbHVlLHt9LHIuZmxhZ3MuaWdub3JlQ2FzZSl9Y2F0Y2gocil7aWYoci5tZXNzYWdlPT09c3NlKWUmJmcyKGAke3gyfQlVbmFibGUgdG8gb3B0aW1pemU6IDwgJHt0LnRvU3RyaW5nKCl9ID4KCUNvbXBsZW1lbnQgU2V0cyBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBvcHRpbWl6ZWQuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDT01QTEVNRU5UIGZvciBkZXRhaWxzLmApO2Vsc2V7bGV0IG49IiI7ZSYmKG49YAoJVGhpcyB3aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjUkVHRVhQX1BBUlNJTkcgZm9yIGRldGFpbHMuYCksb2coYCR7eDJ9CglGYWlsZWQgcGFyc2luZzogPCAke3QudG9TdHJpbmcoKX0gPgoJVXNpbmcgdGhlIEBjaGV2cm90YWluL3JlZ2V4cC10by1hc3QgbGlicmFyeQoJUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzYCtuKX19cmV0dXJuW119ZnVuY3Rpb24gdlIodCxlLHIpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlzanVuY3Rpb24iOmZvcihsZXQgaT0wO2k8dC52YWx1ZS5sZW5ndGg7aSsrKXZSKHQudmFsdWVbaV0sZSxyKTticmVhaztjYXNlIkFsdGVybmF0aXZlIjpsZXQgbj10LnZhbHVlO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1uW2ldO3N3aXRjaChhLnR5cGUpe2Nhc2UiRW5kQW5jaG9yIjpjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6Y2FzZSJMb29rYWhlYWQiOmNhc2UiTmVnYXRpdmVMb29rYWhlYWQiOmNhc2UiU3RhcnRBbmNob3IiOmNhc2UiV29yZEJvdW5kYXJ5IjpjYXNlIk5vbldvcmRCb3VuZGFyeSI6Y29udGludWV9bGV0IHM9YTtzd2l0Y2gocy50eXBlKXtjYXNlIkNoYXJhY3RlciI6WlQocy52YWx1ZSxlLHIpO2JyZWFrO2Nhc2UiU2V0IjppZihzLmNvbXBsZW1lbnQ9PT0hMCl0aHJvdyBFcnJvcihzc2UpO1NlKHMudmFsdWUsdT0+e2lmKHR5cGVvZiB1PT0ibnVtYmVyIilaVCh1LGUscik7ZWxzZXtsZXQgaD11O2lmKHI9PT0hMClmb3IobGV0IGY9aC5mcm9tO2Y8PWgudG87ZisrKVpUKGYsZSxyKTtlbHNle2ZvcihsZXQgZj1oLmZyb207Zjw9aC50byYmZjxoZztmKyspWlQoZixlLHIpO2lmKGgudG8+PWhnKXtsZXQgZj1oLmZyb20+PWhnP2guZnJvbTpoZyxkPWgudG8scD1HYyhmKSxtPUdjKGQpO2ZvcihsZXQgZz1wO2c8PW07ZysrKWVbZ109Z319fX0pO2JyZWFrO2Nhc2UiR3JvdXAiOnZSKHMudmFsdWUsZSxyKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJOb24gRXhoYXVzdGl2ZSBNYXRjaCIpfWxldCBsPXMucXVhbnRpZmllciE9PXZvaWQgMCYmcy5xdWFudGlmaWVyLmF0TGVhc3Q9PT0wO2lmKHMudHlwZT09PSJHcm91cCImJnhSKHMpPT09ITF8fHMudHlwZSE9PSJHcm91cCImJmw9PT0hMSlicmVha31icmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCEiKX1yZXR1cm4gYnIoZSl9ZnVuY3Rpb24gWlQodCxlLHIpe2xldCBuPUdjKHQpO2Vbbl09bixyPT09ITAmJmdCZSh0LGUpfWZ1bmN0aW9uIGdCZSh0LGUpe2xldCByPVN0cmluZy5mcm9tQ2hhckNvZGUodCksbj1yLnRvVXBwZXJDYXNlKCk7aWYobiE9PXIpe2xldCBpPUdjKG4uY2hhckNvZGVBdCgwKSk7ZVtpXT1pfWVsc2V7bGV0IGk9ci50b0xvd2VyQ2FzZSgpO2lmKGkhPT1yKXtsZXQgYT1HYyhpLmNoYXJDb2RlQXQoMCkpO2VbYV09YX19fWZ1bmN0aW9uIGFzZSh0LGUpe3JldHVybiBhcyh0LnZhbHVlLHI9PntpZih0eXBlb2Ygcj09Im51bWJlciIpcmV0dXJuIFluKGUscik7e2xldCBuPXI7cmV0dXJuIGFzKGUsaT0+bi5mcm9tPD1pJiZpPD1uLnRvKSE9PXZvaWQgMH19KX1mdW5jdGlvbiB4Uih0KXtsZXQgZT10LnF1YW50aWZpZXI7cmV0dXJuIGUmJmUuYXRMZWFzdD09PTA/ITA6dC52YWx1ZT9EdCh0LnZhbHVlKT96YSh0LnZhbHVlLHhSKTp4Uih0LnZhbHVlKTohMX1mdW5jdGlvbiBKVCh0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2xldCByPXVnKGUpLG49bmV3IGJSKHQpO3JldHVybiBuLnZpc2l0KHIpLG4uZm91bmR9ZWxzZSByZXR1cm4gYXMoZSxyPT5Zbih0LHIuY2hhckNvZGVBdCgwKSkpIT09dm9pZCAwfXZhciBzc2UseDIsYlIsbHNlPU0oKCk9PnsidXNlIHN0cmljdCI7ZjIoKTtIdCgpO2xnKCk7UVQoKTt3UigpO3NzZT0iQ29tcGxlbWVudCBTZXRzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBmaXJzdCBjaGFyIG9wdGltaXphdGlvbiIseDI9YFVuYWJsZSB0byB1c2UgImZpcnN0IGNoYXIiIGxleGVyIG9wdGltaXphdGlvbnM6CmA7byhvc2UsImdldE9wdGltaXplZFN0YXJ0Q29kZXNJbmRpY2VzIik7byh2UiwiZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyIpO28oWlQsImFkZE9wdGltaXplZElkeFRvUmVzdWx0Iik7byhnQmUsImhhbmRsZUlnbm9yZUNhc2UiKTtvKGFzZSwiZmluZENvZGUiKTtvKHhSLCJpc1dob2xlT3B0aW9uYWwiKTtiUj1jbGFzcyBleHRlbmRzIHpje3N0YXRpY3tvKHRoaXMsIkNoYXJDb2RlRmluZGVyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRhcmdldENoYXJDb2Rlcz1lLHRoaXMuZm91bmQ9ITF9dmlzaXRDaGlsZHJlbihlKXtpZih0aGlzLmZvdW5kIT09ITApe3N3aXRjaChlLnR5cGUpe2Nhc2UiTG9va2FoZWFkIjp0aGlzLnZpc2l0TG9va2FoZWFkKGUpO3JldHVybjtjYXNlIk5lZ2F0aXZlTG9va2FoZWFkIjp0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSk7cmV0dXJufXN1cGVyLnZpc2l0Q2hpbGRyZW4oZSl9fXZpc2l0Q2hhcmFjdGVyKGUpe1luKHRoaXMudGFyZ2V0Q2hhckNvZGVzLGUudmFsdWUpJiYodGhpcy5mb3VuZD0hMCl9dmlzaXRTZXQoZSl7ZS5jb21wbGVtZW50P2FzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKT09PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApOmFzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKSE9PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApfX07byhKVCwiY2FuTWF0Y2hDaGFyQ29kZSIpfSk7ZnVuY3Rpb24gaHNlKHQsZSl7ZT1yZihlLHt1c2VTdGlja3k6a1IsZGVidWc6ITEsc2FmZU1vZGU6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOlsiXHIiLGAKYF0sdHJhY2VyOm8oKGIsdyk9PncoKSwidHJhY2VyIil9KTtsZXQgcj1lLnRyYWNlcjtyKCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIiwoKT0+e0lCZSgpfSk7bGV0IG47cigiUmVqZWN0IExleGVyLk5BIiwoKT0+e249YWYodCxiPT5iW2gwXT09PWNpLk5BKX0pO2xldCBpPSExLGE7cigiVHJhbnNmb3JtIFBhdHRlcm5zIiwoKT0+e2k9ITEsYT1RZShuLGI9PntsZXQgdz1iW2gwXTtpZihYbyh3KSl7bGV0IF89dy5zb3VyY2U7cmV0dXJuIF8ubGVuZ3RoPT09MSYmXyE9PSJeIiYmXyE9PSIkIiYmXyE9PSIuIiYmIXcuaWdub3JlQ2FzZT9fOl8ubGVuZ3RoPT09MiYmX1swXT09PSJcXCImJiFZbihbImQiLCJEIiwicyIsIlMiLCJ0IiwiciIsIm4iLCJ0IiwiMCIsImMiLCJiIiwiQiIsImYiLCJ2IiwidyIsIlciXSxfWzFdKT9fWzFdOmUudXNlU3RpY2t5P3VzZSh3KTpjc2Uodyl9ZWxzZXtpZihfaSh3KSlyZXR1cm4gaT0hMCx7ZXhlYzp3fTtpZih0eXBlb2Ygdz09Im9iamVjdCIpcmV0dXJuIGk9ITAsdztpZih0eXBlb2Ygdz09InN0cmluZyIpe2lmKHcubGVuZ3RoPT09MSlyZXR1cm4gdzt7bGV0IF89dy5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLFQ9bmV3IFJlZ0V4cChfKTtyZXR1cm4gZS51c2VTdGlja3k/dXNlKFQpOmNzZShUKX19ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KX0pO2xldCBzLGwsdSxoLGY7cigibWlzYyBtYXBwaW5nIiwoKT0+e3M9UWUobixiPT5iLnRva2VuVHlwZUlkeCksbD1RZShuLGI9PntsZXQgdz1iLkdST1VQO2lmKHchPT1jaS5TS0lQUEVEKXtpZihiaSh3KSlyZXR1cm4gdztpZihkcih3KSlyZXR1cm4hMTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KSx1PVFlKG4sYj0+e2xldCB3PWIuTE9OR0VSX0FMVDtpZih3KXJldHVybiBEdCh3KT9RZSh3LFQ9Pm9UKG4sVCkpOltvVChuLHcpXX0pLGg9UWUobixiPT5iLlBVU0hfTU9ERSksZj1RZShuLGI9Pk50KGIsIlBPUF9NT0RFIikpfSk7bGV0IGQ7cigiTGluZSBUZXJtaW5hdG9yIEhhbmRsaW5nIiwoKT0+e2xldCBiPXhzZShlLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyk7ZD1RZShuLHc9PiExKSxlLnBvc2l0aW9uVHJhY2tpbmchPT0ib25seU9mZnNldCImJihkPVFlKG4sdz0+TnQodywiTElORV9CUkVBS1MiKT8hIXcuTElORV9CUkVBS1M6dnNlKHcsYik9PT0hMSYmSlQoYix3LlBBVFRFUk4pKSl9KTtsZXQgcCxtLGcseTtyKCJNaXNjIE1hcHBpbmcgIzIiLCgpPT57cD1RZShuLGdzZSksbT1RZShhLFJCZSksZz1xcihuLChiLHcpPT57bGV0IF89dy5HUk9VUDtyZXR1cm4gYmkoXykmJl8hPT1jaS5TS0lQUEVEJiYoYltfXT1bXSksYn0se30pLHk9UWUoYSwoYix3KT0+KHtwYXR0ZXJuOmFbd10sbG9uZ2VyQWx0OnVbd10sY2FuTGluZVRlcm1pbmF0b3I6ZFt3XSxpc0N1c3RvbTpwW3ddLHNob3J0Om1bd10sZ3JvdXA6bFt3XSxwdXNoOmhbd10scG9wOmZbd10sdG9rZW5UeXBlSWR4OnNbd10sdG9rZW5UeXBlOm5bd119KSl9KTtsZXQgdj0hMCx4PVtdO3JldHVybiBlLnNhZmVNb2RlfHxyKCJGaXJzdCBDaGFyIE9wdGltaXphdGlvbiIsKCk9Pnt4PXFyKG4sKGIsdyxfKT0+e2lmKHR5cGVvZiB3LlBBVFRFUk49PSJzdHJpbmciKXtsZXQgVD13LlBBVFRFUk4uY2hhckNvZGVBdCgwKSxFPUdjKFQpO1RSKGIsRSx5W19dKX1lbHNlIGlmKER0KHcuU1RBUlRfQ0hBUlNfSElOVCkpe2xldCBUO1NlKHcuU1RBUlRfQ0hBUlNfSElOVCxFPT57bGV0IEw9dHlwZW9mIEU9PSJzdHJpbmciP0UuY2hhckNvZGVBdCgwKTpFLFM9R2MoTCk7VCE9PVMmJihUPVMsVFIoYixTLHlbX10pKX0pfWVsc2UgaWYoWG8ody5QQVRURVJOKSlpZih3LlBBVFRFUk4udW5pY29kZSl2PSExLGUuZW5zdXJlT3B0aW1pemF0aW9ucyYmb2coYCR7eDJ9CVVuYWJsZSB0byBhbmFseXplIDwgJHt3LlBBVFRFUk4udG9TdHJpbmcoKX0gPiBwYXR0ZXJuLgoJVGhlIHJlZ2V4cCB1bmljb2RlIGZsYWcgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIHJlZ2V4cC10by1hc3QgbGlicmFyeS4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1VOSUNPREVfT1BUSU1JWkVgKTtlbHNle2xldCBUPW9zZSh3LlBBVFRFUk4sZS5lbnN1cmVPcHRpbWl6YXRpb25zKTtjcihUKSYmKHY9ITEpLFNlKFQsRT0+e1RSKGIsRSx5W19dKX0pfWVsc2UgZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZvZyhgJHt4Mn0JVG9rZW5UeXBlOiA8JHt3Lm5hbWV9PiBpcyB1c2luZyBhIGN1c3RvbSB0b2tlbiBwYXR0ZXJuIHdpdGhvdXQgcHJvdmlkaW5nIDxzdGFydF9jaGFyc19oaW50PiBwYXJhbWV0ZXIuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fT1BUSU1JWkVgKSx2PSExO3JldHVybiBifSxbXSl9KSx7ZW1wdHlHcm91cHM6ZyxwYXR0ZXJuSWR4VG9Db25maWc6eSxjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnOngsaGFzQ3VzdG9tOmksY2FuQmVPcHRpbWl6ZWQ6dn19ZnVuY3Rpb24gZnNlKHQsZSl7bGV0IHI9W10sbj12QmUodCk7cj1yLmNvbmNhdChuLmVycm9ycyk7bGV0IGk9eEJlKG4udmFsaWQpLGE9aS52YWxpZDtyZXR1cm4gcj1yLmNvbmNhdChpLmVycm9ycykscj1yLmNvbmNhdCh5QmUoYSkpLHI9ci5jb25jYXQoQUJlKGEpKSxyPXIuY29uY2F0KF9CZShhLGUpKSxyPXIuY29uY2F0KExCZShhKSkscn1mdW5jdGlvbiB5QmUodCl7bGV0IGU9W10scj1Zcih0LG49PlhvKG5baDBdKSk7cmV0dXJuIGU9ZS5jb25jYXQod0JlKHIpKSxlPWUuY29uY2F0KEVCZShyKSksZT1lLmNvbmNhdChTQmUocikpLGU9ZS5jb25jYXQoQ0JlKHIpKSxlPWUuY29uY2F0KFRCZShyKSksZX1mdW5jdGlvbiB2QmUodCl7bGV0IGU9WXIodCxpPT4hTnQoaSxoMCkpLHI9UWUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIG1pc3Npbmcgc3RhdGljICdQQVRURVJOJyBwcm9wZXJ0eSIsdHlwZTpxbi5NSVNTSU5HX1BBVFRFUk4sdG9rZW5UeXBlczpbaV19KSksbj1uZih0LGUpO3JldHVybntlcnJvcnM6cix2YWxpZDpufX1mdW5jdGlvbiB4QmUodCl7bGV0IGU9WXIodCxpPT57bGV0IGE9aVtoMF07cmV0dXJuIVhvKGEpJiYhX2koYSkmJiFOdChhLCJleGVjIikmJiFiaShhKX0pLHI9UWUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIHN0YXRpYyAnUEFUVEVSTicgY2FuIG9ubHkgYmUgYSBSZWdFeHAsIGEgRnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHtDdXN0b21QYXR0ZXJuTWF0Y2hlckZ1bmN9IHR5cGUgb3IgYW4gT2JqZWN0IG1hdGNoaW5nIHRoZSB7SUN1c3RvbVBhdHRlcm59IGludGVyZmFjZS4iLHR5cGU6cW4uSU5WQUxJRF9QQVRURVJOLHRva2VuVHlwZXM6W2ldfSkpLG49bmYodCxlKTtyZXR1cm57ZXJyb3JzOnIsdmFsaWQ6bn19ZnVuY3Rpb24gd0JlKHQpe2NsYXNzIGUgZXh0ZW5kcyB6Y3tzdGF0aWN7byh0aGlzLCJFbmRBbmNob3JGaW5kZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5mb3VuZD0hMX12aXNpdEVuZEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXVnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4gYkJlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBRZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJwoJU2VlIGNoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQU5DSE9SUwlmb3IgZGV0YWlscy5gLHR5cGU6cW4uRU9JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOltpXX0pKX1mdW5jdGlvbiBUQmUodCl7bGV0IGU9WXIodCxuPT5uLlBBVFRFUk4udGVzdCgiIikpO3JldHVybiBRZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtdXN0IG5vdCBtYXRjaCBhbiBlbXB0eSBzdHJpbmciLHR5cGU6cW4uRU1QVFlfTUFUQ0hfUEFUVEVSTix0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBFQmUodCl7Y2xhc3MgZSBleHRlbmRzIHpje3N0YXRpY3tvKHRoaXMsIlN0YXJ0QW5jaG9yRmluZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZm91bmQ9ITF9dmlzaXRTdGFydEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXVnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4ga0JlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBRZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nCglTZWUgaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlMJZm9yIGRldGFpbHMuYCx0eXBlOnFuLlNPSV9BTkNIT1JfRk9VTkQsdG9rZW5UeXBlczpbaV19KSl9ZnVuY3Rpb24gU0JlKHQpe2xldCBlPVlyKHQsbj0+e2xldCBpPW5baDBdO3JldHVybiBpIGluc3RhbmNlb2YgUmVnRXhwJiYoaS5tdWx0aWxpbmV8fGkuZ2xvYmFsKX0pO3JldHVybiBRZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtYXkgTk9UIGNvbnRhaW4gZ2xvYmFsKCdnJykgb3IgbXVsdGlsaW5lKCdtJykiLHR5cGU6cW4uVU5TVVBQT1JURURfRkxBR1NfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gQ0JlKHQpe2xldCBlPVtdLHI9UWUodCxhPT5xcih0LChzLGwpPT4oYS5QQVRURVJOLnNvdXJjZT09PWwuUEFUVEVSTi5zb3VyY2UmJiFZbihlLGwpJiZsLlBBVFRFUk4hPT1jaS5OQSYmKGUucHVzaChsKSxzLnB1c2gobCkpLHMpLFtdKSk7cj1SYyhyKTtsZXQgbj1ZcihyLGE9PmEubGVuZ3RoPjEpO3JldHVybiBRZShuLGE9PntsZXQgcz1RZShhLHU9PnUubmFtZSk7cmV0dXJue21lc3NhZ2U6YFRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+JHtzYShhKS5QQVRURVJOfTwtaGFzIGJlZW4gdXNlZCBpbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBUb2tlbiBUeXBlczogJHtzLmpvaW4oIiwgIil9IDwtYCx0eXBlOnFuLkRVUExJQ0FURV9QQVRURVJOU19GT1VORCx0b2tlblR5cGVzOmF9fSl9ZnVuY3Rpb24gQUJlKHQpe2xldCBlPVlyKHQsbj0+e2lmKCFOdChuLCJHUk9VUCIpKXJldHVybiExO2xldCBpPW4uR1JPVVA7cmV0dXJuIGkhPT1jaS5TS0lQUEVEJiZpIT09Y2kuTkEmJiFiaShpKX0pO3JldHVybiBRZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdHUk9VUCcgY2FuIG9ubHkgYmUgTGV4ZXIuU0tJUFBFRC9MZXhlci5OQS9BIFN0cmluZyIsdHlwZTpxbi5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gX0JlKHQsZSl7bGV0IHI9WXIodCxpPT5pLlBVU0hfTU9ERSE9PXZvaWQgMCYmIVluKGUsaS5QVVNIX01PREUpKTtyZXR1cm4gUWUocixpPT4oe21lc3NhZ2U6YFRva2VuIFR5cGU6IC0+JHtpLm5hbWV9PC0gc3RhdGljICdQVVNIX01PREUnIHZhbHVlIGNhbm5vdCByZWZlciB0byBhIExleGVyIE1vZGUgLT4ke2kuUFVTSF9NT0RFfTwtd2hpY2ggZG9lcyBub3QgZXhpc3RgLHR5cGU6cW4uUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNULHRva2VuVHlwZXM6W2ldfSkpfWZ1bmN0aW9uIExCZSh0KXtsZXQgZT1bXSxyPXFyKHQsKG4saSxhKT0+e2xldCBzPWkuUEFUVEVSTjtyZXR1cm4gcz09PWNpLk5BfHwoYmkocyk/bi5wdXNoKHtzdHI6cyxpZHg6YSx0b2tlblR5cGU6aX0pOlhvKHMpJiZOQmUocykmJm4ucHVzaCh7c3RyOnMuc291cmNlLGlkeDphLHRva2VuVHlwZTppfSkpLG59LFtdKTtyZXR1cm4gU2UodCwobixpKT0+e1NlKHIsKHtzdHI6YSxpZHg6cyx0b2tlblR5cGU6bH0pPT57aWYoaTxzJiZEQmUoYSxuLlBBVFRFUk4pKXtsZXQgdT1gVG9rZW46IC0+JHtsLm5hbWV9PC0gY2FuIG5ldmVyIGJlIG1hdGNoZWQuCkJlY2F1c2UgaXQgYXBwZWFycyBBRlRFUiB0aGUgVG9rZW4gVHlwZSAtPiR7bi5uYW1lfTwtaW4gdGhlIGxleGVyJ3MgZGVmaW5pdGlvbi4KU2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNVTlJFQUNIQUJMRWA7ZS5wdXNoKHttZXNzYWdlOnUsdHlwZTpxbi5VTlJFQUNIQUJMRV9QQVRURVJOLHRva2VuVHlwZXM6W24sbF19KX19KX0pLGV9ZnVuY3Rpb24gREJlKHQsZSl7aWYoWG8oZSkpe2xldCByPWUuZXhlYyh0KTtyZXR1cm4gciE9PW51bGwmJnIuaW5kZXg9PT0wfWVsc2V7aWYoX2koZSkpcmV0dXJuIGUodCwwLFtdLHt9KTtpZihOdChlLCJleGVjIikpcmV0dXJuIGUuZXhlYyh0LDAsW10se30pO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZT09PXQ7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fWZ1bmN0aW9uIE5CZSh0KXtyZXR1cm4gYXMoWyIuIiwiXFwiLCJbIiwiXSIsInwiLCJeIiwiJCIsIigiLCIpIiwiPyIsIioiLCIrIiwieyJdLHI9PnQuc291cmNlLmluZGV4T2YocikhPT0tMSk9PT12b2lkIDB9ZnVuY3Rpb24gY3NlKHQpe2xldCBlPXQuaWdub3JlQ2FzZT8iaSI6IiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke3Quc291cmNlfSlgLGUpfWZ1bmN0aW9uIHVzZSh0KXtsZXQgZT10Lmlnbm9yZUNhc2U/Iml5IjoieSI7cmV0dXJuIG5ldyBSZWdFeHAoYCR7dC5zb3VyY2V9YCxlKX1mdW5jdGlvbiBkc2UodCxlLHIpe2xldCBuPVtdO3JldHVybiBOdCh0LGZnKXx8bi5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIDwiK2ZnK2A+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uCmAsdHlwZTpxbi5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFfSksTnQodCxlayl8fG4ucHVzaCh7bWVzc2FnZToiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8IitlaytgPiBwcm9wZXJ0eSBpbiBpdHMgZGVmaW5pdGlvbgpgLHR5cGU6cW4uTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZfSksTnQodCxlaykmJk50KHQsZmcpJiYhTnQodC5tb2Rlcyx0LmRlZmF1bHRNb2RlKSYmbi5wdXNoKHttZXNzYWdlOmBBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhICR7Zmd9OiA8JHt0LmRlZmF1bHRNb2RlfT53aGljaCBkb2VzIG5vdCBleGlzdApgLHR5cGU6cW4uTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1R9KSxOdCh0LGVrKSYmU2UodC5tb2RlcywoaSxhKT0+e1NlKGksKHMsbCk9PntpZihkcihzKSluLnB1c2goe21lc3NhZ2U6YEEgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHVzaW5nIGFuIHVuZGVmaW5lZCBUb2tlbiBUeXBlLiBNb2RlOjwke2F9PiBhdCBpbmRleDogPCR7bH0+CmAsdHlwZTpxbi5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRH0pO2Vsc2UgaWYoTnQocywiTE9OR0VSX0FMVCIpKXtsZXQgdT1EdChzLkxPTkdFUl9BTFQpP3MuTE9OR0VSX0FMVDpbcy5MT05HRVJfQUxUXTtTZSh1LGg9PnshZHIoaCkmJiFZbihpLGgpJiZuLnB1c2goe21lc3NhZ2U6YEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgbG9uZ2VyX2FsdCA8JHtoLm5hbWV9PiBvbiB0b2tlbiA8JHtzLm5hbWV9PiBvdXRzaWRlIG9mIG1vZGUgPCR7YX0+CmAsdHlwZTpxbi5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERX0pfSl9fSl9KSxufWZ1bmN0aW9uIHBzZSh0LGUscil7bGV0IG49W10saT0hMSxhPVJjKFdyKGJyKHQubW9kZXMpKSkscz1hZihhLHU9PnVbaDBdPT09Y2kuTkEpLGw9eHNlKHIpO3JldHVybiBlJiZTZShzLHU9PntsZXQgaD12c2UodSxsKTtpZihoIT09ITEpe2xldCBkPXttZXNzYWdlOk1CZSh1LGgpLHR5cGU6aC5pc3N1ZSx0b2tlblR5cGU6dX07bi5wdXNoKGQpfWVsc2UgTnQodSwiTElORV9CUkVBS1MiKT91LkxJTkVfQlJFQUtTPT09ITAmJihpPSEwKTpKVChsLHUuUEFUVEVSTikmJihpPSEwKX0pLGUmJiFpJiZuLnB1c2goe21lc3NhZ2U6YFdhcm5pbmc6IE5vIExJTkVfQlJFQUtTIEZvdW5kLgoJVGhpcyBMZXhlciBoYXMgYmVlbiBkZWZpbmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiwKCUJ1dCBub25lIG9mIHRoZSBUb2tlbiBUeXBlcyBjYW4gYmUgaWRlbnRpZmllZCBhcyBtYXRjaGluZyBhIGxpbmUgdGVybWluYXRvci4KCVNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTElORV9CUkVBS1MgCglmb3IgZGV0YWlscy5gLHR5cGU6cW4uTk9fTElORV9CUkVBS1NfRkxBR1N9KSxufWZ1bmN0aW9uIG1zZSh0KXtsZXQgZT17fSxyPUdyKHQpO3JldHVybiBTZShyLG49PntsZXQgaT10W25dO2lmKER0KGkpKWVbbl09W107ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pLGV9ZnVuY3Rpb24gZ3NlKHQpe2xldCBlPXQuUEFUVEVSTjtpZihYbyhlKSlyZXR1cm4hMTtpZihfaShlKSlyZXR1cm4hMDtpZihOdChlLCJleGVjIikpcmV0dXJuITA7aWYoYmkoZSkpcmV0dXJuITE7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gUkJlKHQpe3JldHVybiBiaSh0KSYmdC5sZW5ndGg9PT0xP3QuY2hhckNvZGVBdCgwKTohMX1mdW5jdGlvbiB2c2UodCxlKXtpZihOdCh0LCJMSU5FX0JSRUFLUyIpKXJldHVybiExO2lmKFhvKHQuUEFUVEVSTikpe3RyeXtKVChlLHQuUEFUVEVSTil9Y2F0Y2gocil7cmV0dXJue2lzc3VlOnFuLklERU5USUZZX1RFUk1JTkFUT1IsZXJyTXNnOnIubWVzc2FnZX19cmV0dXJuITF9ZWxzZXtpZihiaSh0LlBBVFRFUk4pKXJldHVybiExO2lmKGdzZSh0KSlyZXR1cm57aXNzdWU6cW4uQ1VTVE9NX0xJTkVfQlJFQUt9O3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX1mdW5jdGlvbiBNQmUodCxlKXtpZihlLmlzc3VlPT09cW4uSURFTlRJRllfVEVSTUlOQVRPUilyZXR1cm5gV2FybmluZzogdW5hYmxlIHRvIGlkZW50aWZ5IGxpbmUgdGVybWluYXRvciB1c2FnZSBpbiBwYXR0ZXJuLgoJVGhlIHByb2JsZW0gaXMgaW4gdGhlIDwke3QubmFtZX0+IFRva2VuIFR5cGUKCSBSb290IGNhdXNlOiAke2UuZXJyTXNnfS4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0lERU5USUZZX1RFUk1JTkFUT1JgO2lmKGUuaXNzdWU9PT1xbi5DVVNUT01fTElORV9CUkVBSylyZXR1cm5gV2FybmluZzogQSBDdXN0b20gVG9rZW4gUGF0dGVybiBzaG91bGQgc3BlY2lmeSB0aGUgPGxpbmVfYnJlYWtzPiBvcHRpb24uCglUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dC5uYW1lfT4gVG9rZW4gVHlwZQoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ1VTVE9NX0xJTkVfQlJFQUtgO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIHhzZSh0KXtyZXR1cm4gUWUodCxyPT5iaShyKT9yLmNoYXJDb2RlQXQoMCk6cil9ZnVuY3Rpb24gVFIodCxlLHIpe3RbZV09PT12b2lkIDA/dFtlXT1bcl06dFtlXS5wdXNoKHIpfWZ1bmN0aW9uIEdjKHQpe3JldHVybiB0PGhnP3Q6dGtbdF19ZnVuY3Rpb24gSUJlKCl7aWYoY3IodGspKXt0az1uZXcgQXJyYXkoNjU1MzYpO2ZvcihsZXQgdD0wO3Q8NjU1MzY7dCsrKXRrW3RdPXQ+MjU1PzI1NSt+fih0LzI1NSk6dH19dmFyIGgwLGZnLGVrLGtSLGJCZSxrQmUseXNlLGhnLHRrLHdSPU0oKCk9PnsidXNlIHN0cmljdCI7ZjIoKTtiMigpO0h0KCk7bGcoKTtsc2UoKTtRVCgpO2gwPSJQQVRURVJOIixmZz0iZGVmYXVsdE1vZGUiLGVrPSJtb2RlcyIsa1I9dHlwZW9mIG5ldyBSZWdFeHAoIig/OikiKS5zdGlja3k9PSJib29sZWFuIjtvKGhzZSwiYW5hbHl6ZVRva2VuVHlwZXMiKTtvKGZzZSwidmFsaWRhdGVQYXR0ZXJucyIpO28oeUJlLCJ2YWxpZGF0ZVJlZ0V4cFBhdHRlcm4iKTtvKHZCZSwiZmluZE1pc3NpbmdQYXR0ZXJucyIpO28oeEJlLCJmaW5kSW52YWxpZFBhdHRlcm5zIik7YkJlPS9bXlxcXVskXS87byh3QmUsImZpbmRFbmRPZklucHV0QW5jaG9yIik7byhUQmUsImZpbmRFbXB0eU1hdGNoUmVnRXhwcyIpO2tCZT0vW15cXFtdW1xeXXxeXF4vO28oRUJlLCJmaW5kU3RhcnRPZklucHV0QW5jaG9yIik7byhTQmUsImZpbmRVbnN1cHBvcnRlZEZsYWdzIik7byhDQmUsImZpbmREdXBsaWNhdGVQYXR0ZXJucyIpO28oQUJlLCJmaW5kSW52YWxpZEdyb3VwVHlwZSIpO28oX0JlLCJmaW5kTW9kZXNUaGF0RG9Ob3RFeGlzdCIpO28oTEJlLCJmaW5kVW5yZWFjaGFibGVQYXR0ZXJucyIpO28oREJlLCJ0ZXN0VG9rZW5UeXBlIik7byhOQmUsIm5vTWV0YUNoYXIiKTtvKGNzZSwiYWRkU3RhcnRPZklucHV0Iik7byh1c2UsImFkZFN0aWNreUZsYWciKTtvKGRzZSwicGVyZm9ybVJ1bnRpbWVDaGVja3MiKTtvKHBzZSwicGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzIik7byhtc2UsImNsb25lRW1wdHlHcm91cHMiKTtvKGdzZSwiaXNDdXN0b21QYXR0ZXJuIik7byhSQmUsImlzU2hvcnRQYXR0ZXJuIik7eXNlPXt0ZXN0Om8oZnVuY3Rpb24odCl7bGV0IGU9dC5sZW5ndGg7Zm9yKGxldCByPXRoaXMubGFzdEluZGV4O3I8ZTtyKyspe2xldCBuPXQuY2hhckNvZGVBdChyKTtpZihuPT09MTApcmV0dXJuIHRoaXMubGFzdEluZGV4PXIrMSwhMDtpZihuPT09MTMpcmV0dXJuIHQuY2hhckNvZGVBdChyKzEpPT09MTA/dGhpcy5sYXN0SW5kZXg9cisyOnRoaXMubGFzdEluZGV4PXIrMSwhMH1yZXR1cm4hMX0sInRlc3QiKSxsYXN0SW5kZXg6MH07byh2c2UsImNoZWNrTGluZUJyZWFrc0lzc3VlcyIpO28oTUJlLCJidWlsZExpbmVCcmVha0lzc3VlTWVzc2FnZSIpO28oeHNlLCJnZXRDaGFyQ29kZXMiKTtvKFRSLCJhZGRUb01hcE9mQXJyYXlzIik7aGc9MjU2LHRrPVtdO28oR2MsImNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleCIpO28oSUJlLCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIil9KTtmdW5jdGlvbiBXdSh0LGUpe2xldCByPXQudG9rZW5UeXBlSWR4O3JldHVybiByPT09ZS50b2tlblR5cGVJZHg/ITA6ZS5pc1BhcmVudD09PSEwJiZlLmNhdGVnb3J5TWF0Y2hlc01hcFtyXT09PSEwfWZ1bmN0aW9uIGRnKHQsZSl7cmV0dXJuIHQudG9rZW5UeXBlSWR4PT09ZS50b2tlblR5cGVJZHh9ZnVuY3Rpb24gWXUodCl7bGV0IGU9T0JlKHQpO1BCZShlKSxGQmUoZSksQkJlKGUpLFNlKGUscj0+e3IuaXNQYXJlbnQ9ci5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoPjB9KX1mdW5jdGlvbiBPQmUodCl7bGV0IGU9cm4odCkscj10LG49ITA7Zm9yKDtuOyl7cj1SYyhXcihRZShyLGE9PmEuQ0FURUdPUklFUykpKTtsZXQgaT1uZihyLGUpO2U9ZS5jb25jYXQoaSksY3IoaSk/bj0hMTpyPWl9cmV0dXJuIGV9ZnVuY3Rpb24gUEJlKHQpe1NlKHQsZT0+e0VSKGUpfHwoVHNlW2JzZV09ZSxlLnRva2VuVHlwZUlkeD1ic2UrKyksd3NlKGUpJiYhRHQoZS5DQVRFR09SSUVTKSYmKGUuQ0FURUdPUklFUz1bZS5DQVRFR09SSUVTXSksd3NlKGUpfHwoZS5DQVRFR09SSUVTPVtdKSx6QmUoZSl8fChlLmNhdGVnb3J5TWF0Y2hlcz1bXSksR0JlKGUpfHwoZS5jYXRlZ29yeU1hdGNoZXNNYXA9e30pfSl9ZnVuY3Rpb24gQkJlKHQpe1NlKHQsZT0+e2UuY2F0ZWdvcnlNYXRjaGVzPVtdLFNlKGUuY2F0ZWdvcnlNYXRjaGVzTWFwLChyLG4pPT57ZS5jYXRlZ29yeU1hdGNoZXMucHVzaChUc2Vbbl0udG9rZW5UeXBlSWR4KX0pfSl9ZnVuY3Rpb24gRkJlKHQpe1NlKHQsZT0+e2tzZShbXSxlKX0pfWZ1bmN0aW9uIGtzZSh0LGUpe1NlKHQscj0+e2UuY2F0ZWdvcnlNYXRjaGVzTWFwW3IudG9rZW5UeXBlSWR4XT0hMH0pLFNlKGUuQ0FURUdPUklFUyxyPT57bGV0IG49dC5jb25jYXQoZSk7WW4obixyKXx8a3NlKG4scil9KX1mdW5jdGlvbiBFUih0KXtyZXR1cm4gTnQodCwidG9rZW5UeXBlSWR4Iil9ZnVuY3Rpb24gd3NlKHQpe3JldHVybiBOdCh0LCJDQVRFR09SSUVTIil9ZnVuY3Rpb24gekJlKHQpe3JldHVybiBOdCh0LCJjYXRlZ29yeU1hdGNoZXMiKX1mdW5jdGlvbiBHQmUodCl7cmV0dXJuIE50KHQsImNhdGVnb3J5TWF0Y2hlc01hcCIpfWZ1bmN0aW9uIEVzZSh0KXtyZXR1cm4gTnQodCwidG9rZW5UeXBlSWR4Iil9dmFyIGJzZSxUc2UsZjA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oV3UsInRva2VuU3RydWN0dXJlZE1hdGNoZXIiKTtvKGRnLCJ0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzIik7YnNlPTEsVHNlPXt9O28oWXUsImF1Z21lbnRUb2tlblR5cGVzIik7byhPQmUsImV4cGFuZENhdGVnb3JpZXMiKTtvKFBCZSwiYXNzaWduVG9rZW5EZWZhdWx0UHJvcHMiKTtvKEJCZSwiYXNzaWduQ2F0ZWdvcmllc1Rva2Vuc1Byb3AiKTtvKEZCZSwiYXNzaWduQ2F0ZWdvcmllc01hcFByb3AiKTtvKGtzZSwic2luZ2xlQXNzaWduQ2F0ZWdvcmllc1Rva3NNYXAiKTtvKEVSLCJoYXNTaG9ydEtleVByb3BlcnR5Iik7byh3c2UsImhhc0NhdGVnb3JpZXNQcm9wZXJ0eSIpO28oekJlLCJoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc1Byb3BlcnR5Iik7byhHQmUsImhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzTWFwUHJvcGVydHkiKTtvKEVzZSwiaXNUb2tlblR5cGUiKX0pO3ZhciBTUixDUj1NKCgpPT57InVzZSBzdHJpY3QiO1NSPXtidWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZSh0KXtyZXR1cm5gVW5hYmxlIHRvIHBvcCBMZXhlciBNb2RlIGFmdGVyIGVuY291bnRlcmluZyBUb2tlbiAtPiR7dC5pbWFnZX08LSBUaGUgTW9kZSBTdGFjayBpcyBlbXB0eWB9LGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKHQsZSxyLG4saSl7cmV0dXJuYHVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAtPiR7dC5jaGFyQXQoZSl9PC0gYXQgb2Zmc2V0OiAke2V9LCBza2lwcGVkICR7cn0gY2hhcmFjdGVycy5gfX19KTt2YXIgcW4sdzIsY2ksYjI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3UigpO0h0KCk7bGcoKTtmMCgpO0NSKCk7UVQoKTsoZnVuY3Rpb24odCl7dFt0Lk1JU1NJTkdfUEFUVEVSTj0wXT0iTUlTU0lOR19QQVRURVJOIix0W3QuSU5WQUxJRF9QQVRURVJOPTFdPSJJTlZBTElEX1BBVFRFUk4iLHRbdC5FT0lfQU5DSE9SX0ZPVU5EPTJdPSJFT0lfQU5DSE9SX0ZPVU5EIix0W3QuVU5TVVBQT1JURURfRkxBR1NfRk9VTkQ9M109IlVOU1VQUE9SVEVEX0ZMQUdTX0ZPVU5EIix0W3QuRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EPTRdPSJEVVBMSUNBVEVfUEFUVEVSTlNfRk9VTkQiLHRbdC5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQ9NV09IklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCIsdFt0LlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVD02XT0iUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUIix0W3QuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERT03XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERSIsdFt0Lk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWT04XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZIix0W3QuTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1Q9OV09Ik1VTFRJX01PREVfTEVYRVJfREVGQVVMVF9NT0RFX1ZBTFVFX0RPRVNfTk9UX0VYSVNUIix0W3QuTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORUQ9MTBdPSJMRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRCIsdFt0LlNPSV9BTkNIT1JfRk9VTkQ9MTFdPSJTT0lfQU5DSE9SX0ZPVU5EIix0W3QuRU1QVFlfTUFUQ0hfUEFUVEVSTj0xMl09IkVNUFRZX01BVENIX1BBVFRFUk4iLHRbdC5OT19MSU5FX0JSRUFLU19GTEFHUz0xM109Ik5PX0xJTkVfQlJFQUtTX0ZMQUdTIix0W3QuVU5SRUFDSEFCTEVfUEFUVEVSTj0xNF09IlVOUkVBQ0hBQkxFX1BBVFRFUk4iLHRbdC5JREVOVElGWV9URVJNSU5BVE9SPTE1XT0iSURFTlRJRllfVEVSTUlOQVRPUiIsdFt0LkNVU1RPTV9MSU5FX0JSRUFLPTE2XT0iQ1VTVE9NX0xJTkVfQlJFQUsiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERT0xN109Ik1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFIn0pKHFufHwocW49e30pKTt3Mj17ZGVmZXJEZWZpbml0aW9uRXJyb3JzSGFuZGxpbmc6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JzUGF0dGVybjovXG58XHJcbj8vZyxsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6W2AKYCwiXHIiXSxlbnN1cmVPcHRpbWl6YXRpb25zOiExLHNhZmVNb2RlOiExLGVycm9yTWVzc2FnZVByb3ZpZGVyOlNSLHRyYWNlSW5pdFBlcmY6ITEsc2tpcFZhbGlkYXRpb25zOiExLHJlY292ZXJ5RW5hYmxlZDohMH07T2JqZWN0LmZyZWV6ZSh3Mik7Y2k9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3RvcihlLHI9dzIpe2lmKHRoaXMubGV4ZXJEZWZpbml0aW9uPWUsdGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nPVtdLHRoaXMucGF0dGVybklkeFRvQ29uZmlnPXt9LHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZz17fSx0aGlzLm1vZGVzPVtdLHRoaXMuZW1wdHlHcm91cHM9e30sdGhpcy50cmFja1N0YXJ0TGluZXM9ITAsdGhpcy50cmFja0VuZExpbmVzPSEwLHRoaXMuaGFzQ3VzdG9tPSExLHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkPXt9LHRoaXMuVFJBQ0VfSU5JVD0oaSxhKT0+e2lmKHRoaXMudHJhY2VJbml0UGVyZj09PSEwKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO2xldCBzPW5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCsxKS5qb2luKCIJIik7dGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmY29uc29sZS5sb2coYCR7c30tLT4gPCR7aX0+YCk7bGV0e3RpbWU6bCx2YWx1ZTp1fT15MihhKSxoPWw+MTA/Y29uc29sZS53YXJuOmNvbnNvbGUubG9nO3JldHVybiB0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZoKGAke3N9PC0tIDwke2l9PiB0aW1lOiAke2x9bXNgKSx0aGlzLnRyYWNlSW5pdEluZGVudC0tLHV9ZWxzZSByZXR1cm4gYSgpfSx0eXBlb2Ygcj09ImJvb2xlYW4iKXRocm93IEVycm9yKGBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMZXhlciBjb25zdHJ1Y3RvciBpcyBub3cgYW4gSUxleGVyQ29uZmlnIE9iamVjdC4KYSBib29sZWFuIDJuZCBhcmd1bWVudCBpcyBubyBsb25nZXIgc3VwcG9ydGVkYCk7dGhpcy5jb25maWc9dmEoe30sdzIscik7bGV0IG49dGhpcy5jb25maWcudHJhY2VJbml0UGVyZjtuPT09ITA/KHRoaXMudHJhY2VJbml0TWF4SWRlbnQ9MS8wLHRoaXMudHJhY2VJbml0UGVyZj0hMCk6dHlwZW9mIG49PSJudW1iZXIiJiYodGhpcy50cmFjZUluaXRNYXhJZGVudD1uLHRoaXMudHJhY2VJbml0UGVyZj0hMCksdGhpcy50cmFjZUluaXRJbmRlbnQ9LTEsdGhpcy5UUkFDRV9JTklUKCJMZXhlciBDb25zdHJ1Y3RvciIsKCk9PntsZXQgaSxhPSEwO3RoaXMuVFJBQ0VfSU5JVCgiTGV4ZXIgQ29uZmlnIGhhbmRsaW5nIiwoKT0+e2lmKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49PT13Mi5saW5lVGVybWluYXRvcnNQYXR0ZXJuKXRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49eXNlO2Vsc2UgaWYodGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPT09dzIubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKXRocm93IEVycm9yKGBFcnJvcjogTWlzc2luZyA8bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPiBwcm9wZXJ0eSBvbiB0aGUgTGV4ZXIgY29uZmlnLgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTUlTU0lOR19MSU5FX1RFUk1fQ0hBUlNgKTtpZihyLnNhZmVNb2RlJiZyLmVuc3VyZU9wdGltaXphdGlvbnMpdGhyb3cgRXJyb3IoJyJzYWZlTW9kZSIgYW5kICJlbnN1cmVPcHRpbWl6YXRpb25zIiBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLicpO3RoaXMudHJhY2tTdGFydExpbmVzPS9mdWxsfG9ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZyksdGhpcy50cmFja0VuZExpbmVzPS9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSxEdChlKT9pPXttb2Rlczp7ZGVmYXVsdE1vZGU6cm4oZSl9LGRlZmF1bHRNb2RlOmZnfTooYT0hMSxpPXJuKGUpKX0pLHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucz09PSExJiYodGhpcy5UUkFDRV9JTklUKCJwZXJmb3JtUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycz10aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycy5jb25jYXQoZHNlKGksdGhpcy50cmFja1N0YXJ0TGluZXMsdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSl9KSx0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmc9dGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLmNvbmNhdChwc2UoaSx0aGlzLnRyYWNrU3RhcnRMaW5lcyx0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKX0pKSxpLm1vZGVzPWkubW9kZXM/aS5tb2Rlczp7fSxTZShpLm1vZGVzLChsLHUpPT57aS5tb2Rlc1t1XT1hZihsLGg9PmRyKGgpKX0pO2xldCBzPUdyKGkubW9kZXMpO2lmKFNlKGkubW9kZXMsKGwsdSk9Pnt0aGlzLlRSQUNFX0lOSVQoYE1vZGU6IDwke3V9PiBwcm9jZXNzaW5nYCwoKT0+e2lmKHRoaXMubW9kZXMucHVzaCh1KSx0aGlzLmNvbmZpZy5za2lwVmFsaWRhdGlvbnM9PT0hMSYmdGhpcy5UUkFDRV9JTklUKCJ2YWxpZGF0ZVBhdHRlcm5zIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPXRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdChmc2UobCxzKSl9KSxjcih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe1l1KGwpO2xldCBoO3RoaXMuVFJBQ0VfSU5JVCgiYW5hbHl6ZVRva2VuVHlwZXMiLCgpPT57aD1oc2UobCx7bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOnRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyxwb3NpdGlvblRyYWNraW5nOnIucG9zaXRpb25UcmFja2luZyxlbnN1cmVPcHRpbWl6YXRpb25zOnIuZW5zdXJlT3B0aW1pemF0aW9ucyxzYWZlTW9kZTpyLnNhZmVNb2RlLHRyYWNlcjp0aGlzLlRSQUNFX0lOSVR9KX0pLHRoaXMucGF0dGVybklkeFRvQ29uZmlnW3VdPWgucGF0dGVybklkeFRvQ29uZmlnLHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1t1XT1oLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcsdGhpcy5lbXB0eUdyb3Vwcz12YSh7fSx0aGlzLmVtcHR5R3JvdXBzLGguZW1wdHlHcm91cHMpLHRoaXMuaGFzQ3VzdG9tPWguaGFzQ3VzdG9tfHx0aGlzLmhhc0N1c3RvbSx0aGlzLmNhbk1vZGVCZU9wdGltaXplZFt1XT1oLmNhbkJlT3B0aW1pemVkfX0pfSksdGhpcy5kZWZhdWx0TW9kZT1pLmRlZmF1bHRNb2RlLCFjcih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykmJiF0aGlzLmNvbmZpZy5kZWZlckRlZmluaXRpb25FcnJvcnNIYW5kbGluZyl7bGV0IHU9UWUodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsaD0+aC5tZXNzYWdlKS5qb2luKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkZXRlY3RlZCBpbiBkZWZpbml0aW9uIG9mIExleGVyOgpgK3UpfVNlKHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZyxsPT57ZzIobC5tZXNzYWdlKX0pLHRoaXMuVFJBQ0VfSU5JVCgiQ2hvb3Npbmcgc3ViLW1ldGhvZHMgaW1wbGVtZW50YXRpb25zIiwoKT0+e2lmKGtSPyh0aGlzLmNob3BJbnB1dD1hYSx0aGlzLm1hdGNoPXRoaXMubWF0Y2hXaXRoVGVzdCk6KHRoaXMudXBkYXRlTGFzdEluZGV4PXRpLHRoaXMubWF0Y2g9dGhpcy5tYXRjaFdpdGhFeGVjKSxhJiYodGhpcy5oYW5kbGVNb2Rlcz10aSksdGhpcy50cmFja1N0YXJ0TGluZXM9PT0hMSYmKHRoaXMuY29tcHV0ZU5ld0NvbHVtbj1hYSksdGhpcy50cmFja0VuZExpbmVzPT09ITEmJih0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uPXRpKSwvZnVsbC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlRnVsbFRva2VuO2Vsc2UgaWYoL29ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlU3RhcnRPbmx5VG9rZW47ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlT2Zmc2V0T25seVRva2VuO2Vsc2UgdGhyb3cgRXJyb3IoYEludmFsaWQgPHBvc2l0aW9uVHJhY2tpbmc+IGNvbmZpZyBvcHRpb246ICIke3RoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmd9ImApO3RoaXMuaGFzQ3VzdG9tPyh0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ1B1c2gsdGhpcy5oYW5kbGVQYXlsb2FkPXRoaXMuaGFuZGxlUGF5bG9hZFdpdGhDdXN0b20pOih0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcyx0aGlzLmhhbmRsZVBheWxvYWQ9dGhpcy5oYW5kbGVQYXlsb2FkTm9DdXN0b20pfSksdGhpcy5UUkFDRV9JTklUKCJGYWlsZWQgT3B0aW1pemF0aW9uIFdhcm5pbmdzIiwoKT0+e2xldCBsPXFyKHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkLCh1LGgsZik9PihoPT09ITEmJnUucHVzaChmKSx1KSxbXSk7aWYoci5lbnN1cmVPcHRpbWl6YXRpb25zJiYhY3IobCkpdGhyb3cgRXJyb3IoYExleGVyIE1vZGVzOiA8ICR7bC5qb2luKCIsICIpfSA+IGNhbm5vdCBiZSBvcHRpbWl6ZWQuCgkgRGlzYWJsZSB0aGUgImVuc3VyZU9wdGltaXphdGlvbnMiIGxleGVyIGNvbmZpZyBmbGFnIHRvIHNpbGVudGx5IGlnbm9yZSB0aGlzIGFuZCBydW4gdGhlIGxleGVyIGluIGFuIHVuLW9wdGltaXplZCBtb2RlLgoJIE9yIGluc3BlY3QgdGhlIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzIG9uIGhvdyB0byByZXNvbHZlIHRoZXNlIGlzc3Vlcy5gKX0pLHRoaXMuVFJBQ0VfSU5JVCgiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIsKCk9Pntpc2UoKX0pLHRoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcGVydGllcyIsKCk9Pnt2Mih0aGlzKX0pfSl9dG9rZW5pemUoZSxyPXRoaXMuZGVmYXVsdE1vZGUpe2lmKCFjcih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe2xldCBpPVFlKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLGE9PmEubWVzc2FnZSkuam9pbihgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYCk7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gVG9rZW5pemUgYmVjYXVzZSBFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjoKYCtpKX1yZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKGUscil9dG9rZW5pemVJbnRlcm5hbChlLHIpe2xldCBuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHYseCxiLHc9ZSxfPXcubGVuZ3RoLFQ9MCxFPTAsTD10aGlzLmhhc0N1c3RvbT8wOk1hdGguZmxvb3IoZS5sZW5ndGgvMTApLFM9bmV3IEFycmF5KEwpLEE9W10sST10aGlzLnRyYWNrU3RhcnRMaW5lcz8xOnZvaWQgMCxEPXRoaXMudHJhY2tTdGFydExpbmVzPzE6dm9pZCAwLGs9bXNlKHRoaXMuZW1wdHlHcm91cHMpLFI9dGhpcy50cmFja1N0YXJ0TGluZXMsQz10aGlzLmNvbmZpZy5saW5lVGVybWluYXRvcnNQYXR0ZXJuLE89MCxOPVtdLFA9W10sRj1bXSxCPVtdO09iamVjdC5mcmVlemUoQik7bGV0IEc7ZnVuY3Rpb24geigpe3JldHVybiBOfW8oeiwiZ2V0UG9zc2libGVQYXR0ZXJuc1Nsb3ciKTtmdW5jdGlvbiBXKGVlKXtsZXQgSj1HYyhlZSksSD1QW0pdO3JldHVybiBIPT09dm9pZCAwP0I6SH1vKFcsImdldFBvc3NpYmxlUGF0dGVybnNPcHRpbWl6ZWQiKTtsZXQgWj1vKGVlPT57aWYoRi5sZW5ndGg9PT0xJiZlZS50b2tlblR5cGUuUFVTSF9NT0RFPT09dm9pZCAwKXtsZXQgSj10aGlzLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZShlZSk7QS5wdXNoKHtvZmZzZXQ6ZWUuc3RhcnRPZmZzZXQsbGluZTplZS5zdGFydExpbmUsY29sdW1uOmVlLnN0YXJ0Q29sdW1uLGxlbmd0aDplZS5pbWFnZS5sZW5ndGgsbWVzc2FnZTpKfSl9ZWxzZXtGLnBvcCgpO2xldCBKPXhhKEYpO049dGhpcy5wYXR0ZXJuSWR4VG9Db25maWdbSl0sUD10aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbSl0sTz1OLmxlbmd0aDtsZXQgSD10aGlzLmNhbk1vZGVCZU9wdGltaXplZFtKXSYmdGhpcy5jb25maWcuc2FmZU1vZGU9PT0hMTtQJiZIP0c9VzpHPXp9fSwicG9wX21vZGUiKTtmdW5jdGlvbiBqKGVlKXtGLnB1c2goZWUpLFA9dGhpcy5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnW2VlXSxOPXRoaXMucGF0dGVybklkeFRvQ29uZmlnW2VlXSxPPU4ubGVuZ3RoLE89Ti5sZW5ndGg7bGV0IEo9dGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWRbZWVdJiZ0aGlzLmNvbmZpZy5zYWZlTW9kZT09PSExO1AmJko/Rz1XOkc9en1vKGosInB1c2hfbW9kZSIpLGouY2FsbCh0aGlzLHIpO2xldCBvZSxLPXRoaXMuY29uZmlnLnJlY292ZXJ5RW5hYmxlZDtmb3IoO1Q8Xzspe3U9bnVsbDtsZXQgZWU9dy5jaGFyQ29kZUF0KFQpLEo9RyhlZSksSD1KLmxlbmd0aDtmb3Iobj0wO248SDtuKyspe29lPUpbbl07bGV0IHE9b2UucGF0dGVybjtoPW51bGw7bGV0IFE9b2Uuc2hvcnQ7aWYoUSE9PSExP2VlPT09USYmKHU9cSk6b2UuaXNDdXN0b209PT0hMD8oYj1xLmV4ZWModyxULFMsayksYiE9PW51bGw/KHU9YlswXSxiLnBheWxvYWQhPT12b2lkIDAmJihoPWIucGF5bG9hZCkpOnU9bnVsbCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KHEsVCksdT10aGlzLm1hdGNoKHEsZSxUKSksdSE9PW51bGwpe2lmKGw9b2UubG9uZ2VyQWx0LGwhPT12b2lkIDApe2xldCBhZT1sLmxlbmd0aDtmb3IoYT0wO2E8YWU7YSsrKXtsZXQgdWU9TltsW2FdXSxjZT11ZS5wYXR0ZXJuO2lmKGY9bnVsbCx1ZS5pc0N1c3RvbT09PSEwPyhiPWNlLmV4ZWModyxULFMsayksYiE9PW51bGw/KHM9YlswXSxiLnBheWxvYWQhPT12b2lkIDAmJihmPWIucGF5bG9hZCkpOnM9bnVsbCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KGNlLFQpLHM9dGhpcy5tYXRjaChjZSxlLFQpKSxzJiZzLmxlbmd0aD51Lmxlbmd0aCl7dT1zLGg9ZixvZT11ZTticmVha319fWJyZWFrfX1pZih1IT09bnVsbCl7aWYoZD11Lmxlbmd0aCxwPW9lLmdyb3VwLHAhPT12b2lkIDAmJihtPW9lLnRva2VuVHlwZUlkeCxnPXRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZSh1LFQsbSxvZS50b2tlblR5cGUsSSxELGQpLHRoaXMuaGFuZGxlUGF5bG9hZChnLGgpLHA9PT0hMT9FPXRoaXMuYWRkVG9rZW4oUyxFLGcpOmtbcF0ucHVzaChnKSksZT10aGlzLmNob3BJbnB1dChlLGQpLFQ9VCtkLEQ9dGhpcy5jb21wdXRlTmV3Q29sdW1uKEQsZCksUj09PSEwJiZvZS5jYW5MaW5lVGVybWluYXRvcj09PSEwKXtsZXQgcT0wLFEsYWU7Qy5sYXN0SW5kZXg9MDtkbyBRPUMudGVzdCh1KSxRPT09ITAmJihhZT1DLmxhc3RJbmRleC0xLHErKyk7d2hpbGUoUT09PSEwKTtxIT09MCYmKEk9SStxLEQ9ZC1hZSx0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uKGcscCxhZSxxLEksRCxkKSl9dGhpcy5oYW5kbGVNb2RlcyhvZSxaLGosZyl9ZWxzZXtsZXQgcT1ULFE9SSxhZT1ELHVlPUs9PT0hMTtmb3IoO3VlPT09ITEmJlQ8XzspZm9yKGU9dGhpcy5jaG9wSW5wdXQoZSwxKSxUKyssaT0wO2k8TztpKyspe2xldCBjZT1OW2ldLHRlPWNlLnBhdHRlcm4sTmU9Y2Uuc2hvcnQ7aWYoTmUhPT0hMT93LmNoYXJDb2RlQXQoVCk9PT1OZSYmKHVlPSEwKTpjZS5pc0N1c3RvbT09PSEwP3VlPXRlLmV4ZWModyxULFMsaykhPT1udWxsOih0aGlzLnVwZGF0ZUxhc3RJbmRleCh0ZSxUKSx1ZT10ZS5leGVjKGUpIT09bnVsbCksdWU9PT0hMClicmVha31pZih5PVQtcSxEPXRoaXMuY29tcHV0ZU5ld0NvbHVtbihELHkpLHg9dGhpcy5jb25maWcuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UodyxxLHksUSxhZSksQS5wdXNoKHtvZmZzZXQ6cSxsaW5lOlEsY29sdW1uOmFlLGxlbmd0aDp5LG1lc3NhZ2U6eH0pLEs9PT0hMSlicmVha319cmV0dXJuIHRoaXMuaGFzQ3VzdG9tfHwoUy5sZW5ndGg9RSkse3Rva2VuczpTLGdyb3VwczprLGVycm9yczpBfX1oYW5kbGVNb2RlcyhlLHIsbixpKXtpZihlLnBvcD09PSEwKXtsZXQgYT1lLnB1c2g7cihpKSxhIT09dm9pZCAwJiZuLmNhbGwodGhpcyxhKX1lbHNlIGUucHVzaCE9PXZvaWQgMCYmbi5jYWxsKHRoaXMsZS5wdXNoKX1jaG9wSW5wdXQoZSxyKXtyZXR1cm4gZS5zdWJzdHJpbmcocil9dXBkYXRlTGFzdEluZGV4KGUscil7ZS5sYXN0SW5kZXg9cn11cGRhdGVUb2tlbkVuZExpbmVDb2x1bW5Mb2NhdGlvbihlLHIsbixpLGEscyxsKXtsZXQgdSxoO3IhPT12b2lkIDAmJih1PW49PT1sLTEsaD11Py0xOjAsaT09PTEmJnU9PT0hMHx8KGUuZW5kTGluZT1hK2gsZS5lbmRDb2x1bW49cy0xKy1oKSl9Y29tcHV0ZU5ld0NvbHVtbihlLHIpe3JldHVybiBlK3J9Y3JlYXRlT2Zmc2V0T25seVRva2VuKGUscixuLGkpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZVN0YXJ0T25seVRva2VuKGUscixuLGksYSxzKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLHN0YXJ0TGluZTphLHN0YXJ0Q29sdW1uOnMsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZUZ1bGxUb2tlbihlLHIsbixpLGEscyxsKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLGVuZE9mZnNldDpyK2wtMSxzdGFydExpbmU6YSxlbmRMaW5lOmEsc3RhcnRDb2x1bW46cyxlbmRDb2x1bW46cytsLTEsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWFkZFRva2VuVXNpbmdQdXNoKGUscixuKXtyZXR1cm4gZS5wdXNoKG4pLHJ9YWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcyhlLHIsbil7cmV0dXJuIGVbcl09bixyKysscn1oYW5kbGVQYXlsb2FkTm9DdXN0b20oZSxyKXt9aGFuZGxlUGF5bG9hZFdpdGhDdXN0b20oZSxyKXtyIT09bnVsbCYmKGUucGF5bG9hZD1yKX1tYXRjaFdpdGhUZXN0KGUscixuKXtyZXR1cm4gZS50ZXN0KHIpPT09ITA/ci5zdWJzdHJpbmcobixlLmxhc3RJbmRleCk6bnVsbH1tYXRjaFdpdGhFeGVjKGUscil7bGV0IG49ZS5leGVjKHIpO3JldHVybiBuIT09bnVsbD9uWzBdOm51bGx9fTtjaS5TS0lQUEVEPSJUaGlzIG1hcmtzIGEgc2tpcHBlZCBUb2tlbiBwYXR0ZXJuLCB0aGlzIG1lYW5zIGVhY2ggdG9rZW4gaWRlbnRpZmllZCBieSBpdCB3aWxsYmUgY29uc3VtZWQgYW5kIHRoZW4gdGhyb3duIGludG8gb2JsaXZpb24sIHRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgdG8gY29tcGxldGVseSBpZ25vcmUgd2hpdGVzcGFjZS4iO2NpLk5BPS9OT1RfQVBQTElDQUJMRS99KTtmdW5jdGlvbiBxdSh0KXtyZXR1cm4gQVIodCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24gQVIodCl7cmV0dXJuIGJpKHQuTEFCRUwpJiZ0LkxBQkVMIT09IiJ9ZnVuY3Rpb24gcmsodCl7cmV0dXJuIFZCZSh0KX1mdW5jdGlvbiBWQmUodCl7bGV0IGU9dC5wYXR0ZXJuLHI9e307aWYoci5uYW1lPXQubmFtZSxkcihlKXx8KHIuUEFUVEVSTj1lKSxOdCh0LCRCZSkpdGhyb3dgVGhlIHBhcmVudCBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgpTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzLzU2NCNpc3N1ZWNvbW1lbnQtMzQ5MDYyMzQ2IGZvciBkZXRhaWxzLmA7cmV0dXJuIE50KHQsU3NlKSYmKHIuQ0FURUdPUklFUz10W1NzZV0pLFl1KFtyXSksTnQodCxDc2UpJiYoci5MQUJFTD10W0NzZV0pLE50KHQsQXNlKSYmKHIuR1JPVVA9dFtBc2VdKSxOdCh0LExzZSkmJihyLlBPUF9NT0RFPXRbTHNlXSksTnQodCxfc2UpJiYoci5QVVNIX01PREU9dFtfc2VdKSxOdCh0LERzZSkmJihyLkxPTkdFUl9BTFQ9dFtEc2VdKSxOdCh0LE5zZSkmJihyLkxJTkVfQlJFQUtTPXRbTnNlXSksTnQodCxSc2UpJiYoci5TVEFSVF9DSEFSU19ISU5UPXRbUnNlXSkscn1mdW5jdGlvbiBkMCh0LGUscixuLGksYSxzLGwpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsZW5kT2Zmc2V0Om4sc3RhcnRMaW5lOmksZW5kTGluZTphLHN0YXJ0Q29sdW1uOnMsZW5kQ29sdW1uOmwsdG9rZW5UeXBlSWR4OnQudG9rZW5UeXBlSWR4LHRva2VuVHlwZTp0fX1mdW5jdGlvbiBUMih0LGUpe3JldHVybiBXdSh0LGUpfXZhciAkQmUsU3NlLENzZSxBc2UsX3NlLExzZSxEc2UsTnNlLFJzZSxtbyxwMD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7YjIoKTtmMCgpO28ocXUsInRva2VuTGFiZWwiKTtvKEFSLCJoYXNUb2tlbkxhYmVsIik7JEJlPSJwYXJlbnQiLFNzZT0iY2F0ZWdvcmllcyIsQ3NlPSJsYWJlbCIsQXNlPSJncm91cCIsX3NlPSJwdXNoX21vZGUiLExzZT0icG9wX21vZGUiLERzZT0ibG9uZ2VyX2FsdCIsTnNlPSJsaW5lX2JyZWFrcyIsUnNlPSJzdGFydF9jaGFyc19oaW50IjtvKHJrLCJjcmVhdGVUb2tlbiIpO28oVkJlLCJjcmVhdGVUb2tlbkludGVybmFsIik7bW89cmsoe25hbWU6IkVPRiIscGF0dGVybjpjaS5OQX0pO1l1KFttb10pO28oZDAsImNyZWF0ZVRva2VuSW5zdGFuY2UiKTtvKFQyLCJ0b2tlbk1hdGNoZXIiKX0pO3ZhciBYdSxNc2UsVWwscGc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwMCgpO0h0KCk7dXMoKTtYdT17YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6dCxhY3R1YWw6ZSxwcmV2aW91czpyLHJ1bGVOYW1lOm59KXtyZXR1cm5gRXhwZWN0aW5nICR7QVIodCk/YC0tPiAke3F1KHQpfSA8LS1gOmB0b2tlbiBvZiB0eXBlIC0tPiAke3QubmFtZX0gPC0tYH0gYnV0IGZvdW5kIC0tPiAnJHtlLmltYWdlfScgPC0tYH0sYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OnQscnVsZU5hbWU6ZX0pe3JldHVybiJSZWR1bmRhbnQgaW5wdXQsIGV4cGVjdGluZyBFT0YgYnV0IGZvdW5kOiAiK3QuaW1hZ2V9LGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHtleHBlY3RlZFBhdGhzUGVyQWx0OnQsYWN0dWFsOmUscHJldmlvdXM6cixjdXN0b21Vc2VyRGVzY3JpcHRpb246bixydWxlTmFtZTppfSl7bGV0IGE9IkV4cGVjdGluZzogIixsPWAKYnV0IGZvdW5kOiAnYCtzYShlKS5pbWFnZSsiJyI7aWYobilyZXR1cm4gYStuK2w7e2xldCB1PXFyKHQsKHAsbSk9PnAuY29uY2F0KG0pLFtdKSxoPVFlKHUscD0+YFske1FlKHAsbT0+cXUobSkpLmpvaW4oIiwgIil9XWApLGQ9YG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6CiR7UWUoaCwocCxtKT0+YCAgJHttKzF9LiAke3B9YCkuam9pbihgCmApfWA7cmV0dXJuIGErZCtsfX0sYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtleHBlY3RlZEl0ZXJhdGlvblBhdGhzOnQsYWN0dWFsOmUsY3VzdG9tVXNlckRlc2NyaXB0aW9uOnIscnVsZU5hbWU6bn0pe2xldCBpPSJFeHBlY3Rpbmc6ICIscz1gCmJ1dCBmb3VuZDogJ2Arc2EoZSkuaW1hZ2UrIiciO2lmKHIpcmV0dXJuIGkrcitzO3tsZXQgdT1gZXhwZWN0aW5nIGF0IGxlYXN0IG9uZSBpdGVyYXRpb24gd2hpY2ggc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlIHBvc3NpYmxlIFRva2VuIHNlcXVlbmNlczo6CiAgPCR7UWUodCxoPT5gWyR7UWUoaCxmPT5xdShmKSkuam9pbigiLCIpfV1gKS5qb2luKCIgLCIpfT5gO3JldHVybiBpK3Urc319fTtPYmplY3QuZnJlZXplKFh1KTtNc2U9e2J1aWxkUnVsZU5vdEZvdW5kRXJyb3IodCxlKXtyZXR1cm4iSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPiIrZS5ub25UZXJtaW5hbE5hbWUrYDwtCmluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5gK3QubmFtZSsiPC0ifX0sVWw9e2J1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0LGUpe2Z1bmN0aW9uIHIoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBFcj9mLnRlcm1pbmFsVHlwZS5uYW1lOmYgaW5zdGFuY2VvZiBubj9mLm5vblRlcm1pbmFsTmFtZToiIn1vKHIsImdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50Iik7bGV0IG49dC5uYW1lLGk9c2EoZSksYT1pLmlkeCxzPVZzKGkpLGw9cihpKSx1PWE+MCxoPWAtPiR7c30ke3U/YToiIn08LSAke2w/YHdpdGggYXJndW1lbnQ6IC0+JHtsfTwtYDoiIn0KICAgICAgICAgICAgICAgICAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSAoJHtlLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke259PC0uICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgCiAgICAgICAgICAgICAgICAgIGA7cmV0dXJuIGg9aC5yZXBsYWNlKC9bIFx0XSsvZywiICIpLGg9aC5yZXBsYWNlKC9cc1xzKy9nLGAKYCksaH0sYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKHQpe3JldHVybmBOYW1lc3BhY2UgY29uZmxpY3QgZm91bmQgaW4gZ3JhbW1hci4KVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHt0Lm5hbWV9Pi4KVG8gcmVzb2x2ZSB0aGlzIG1ha2Ugc3VyZSBlYWNoIFRlcm1pbmFsIGFuZCBOb24tVGVybWluYWwgbmFtZXMgYXJlIHVuaXF1ZQpUaGlzIGlzIGVhc3kgdG8gYWNjb21wbGlzaCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IFRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlcgphbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gfSxidWlsZEFsdGVybmF0aW9uUHJlZml4QW1iaWd1aXR5RXJyb3IodCl7bGV0IGU9UWUodC5wcmVmaXhQYXRoLGk9PnF1KGkpKS5qb2luKCIsICIpLHI9dC5hbHRlcm5hdGlvbi5pZHg9PT0wPyIiOnQuYWx0ZXJuYXRpb24uaWR4O3JldHVybmBBbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzOiA8JHt0LmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKX0+IGR1ZSB0byBjb21tb24gbG9va2FoZWFkIHByZWZpeAppbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuClNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQ09NTU9OX1BSRUZJWApGb3IgRnVydGhlciBkZXRhaWxzLmB9LGJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih0KXtsZXQgZT1RZSh0LnByZWZpeFBhdGgsaT0+cXUoaSkpLmpvaW4oIiwgIikscj10LmFsdGVybmF0aW9uLmlkeD09PTA/IiI6dC5hbHRlcm5hdGlvbi5pZHgsbj1gQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7dC5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiAsIil9PiBpbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuCmA7cmV0dXJuIG49bitgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTCkZvciBGdXJ0aGVyIGRldGFpbHMuYCxufSxidWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHQpe2xldCBlPVZzKHQucmVwZXRpdGlvbik7cmV0dXJuIHQucmVwZXRpdGlvbi5pZHghPT0wJiYoZSs9dC5yZXBldGl0aW9uLmlkeCksYFRoZSByZXBldGl0aW9uIDwke2V9PiB3aXRoaW4gUnVsZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gY2FuIG5ldmVyIGNvbnN1bWUgYW55IHRva2Vucy4KVGhpcyBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuYH0sYnVpbGRUb2tlbk5hbWVFcnJvcih0KXtyZXR1cm4iZGVwcmVjYXRlZCJ9LGJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHQpe3JldHVybmBBbWJpZ3VvdXMgZW1wdHkgYWx0ZXJuYXRpdmU6IDwke3QuZW1wdHlDaG9pY2VJZHgrMX0+IGluIDxPUiR7dC5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuCk9ubHkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgbWF5IGJlIGFuIGVtcHR5IGFsdGVybmF0aXZlLmB9LGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHQpe3JldHVybmBBbiBBbHRlcm5hdGlvbiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMjU2IGFsdGVybmF0aXZlczoKPE9SJHt0LmFsdGVybmF0aW9uLmlkeH0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZS4KIGhhcyAke3QuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGgrMX0gYWx0ZXJuYXRpdmVzLmB9LGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKHQpe2xldCBlPXQudG9wTGV2ZWxSdWxlLm5hbWUscj1RZSh0LmxlZnRSZWN1cnNpb25QYXRoLGE9PmEubmFtZSksbj1gJHtlfSAtLT4gJHtyLmNvbmNhdChbZV0pLmpvaW4oIiAtLT4gIil9YDtyZXR1cm5gTGVmdCBSZWN1cnNpb24gZm91bmQgaW4gZ3JhbW1hci4KcnVsZTogPCR7ZX0+IGNhbiBiZSBpbnZva2VkIGZyb20gaXRzZWxmIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQp3aXRob3V0IGNvbnN1bWluZyBhbnkgVG9rZW5zLiBUaGUgZ3JhbW1hciBwYXRoIHRoYXQgY2F1c2VzIHRoaXMgaXM6IAogJHtufQogVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uCnNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTExfcGFyc2VyI0xlZnRfZmFjdG9yaW5nLmB9LGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3IodCl7cmV0dXJuImRlcHJlY2F0ZWQifSxidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3IodCl7bGV0IGU7cmV0dXJuIHQudG9wTGV2ZWxSdWxlIGluc3RhbmNlb2YgbHM/ZT10LnRvcExldmVsUnVsZS5uYW1lOmU9dC50b3BMZXZlbFJ1bGUsYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7ZX08LSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGdyYW1tYXI6IC0+JHt0LmdyYW1tYXJOYW1lfTwtYH19fSk7ZnVuY3Rpb24gSXNlKHQsZSl7bGV0IHI9bmV3IF9SKHQsZSk7cmV0dXJuIHIucmVzb2x2ZVJlZnMoKSxyLmVycm9yc312YXIgX1IsT3NlPU0oKCk9PnsidXNlIHN0cmljdCI7VXMoKTtIdCgpO3VzKCk7byhJc2UsInJlc29sdmVHcmFtbWFyIik7X1I9Y2xhc3MgZXh0ZW5kcyBjc3tzdGF0aWN7byh0aGlzLCJHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMubmFtZVRvVG9wUnVsZT1lLHRoaXMuZXJyTXNnUHJvdmlkZXI9cix0aGlzLmVycm9ycz1bXX1yZXNvbHZlUmVmcygpe1NlKGJyKHRoaXMubmFtZVRvVG9wUnVsZSksZT0+e3RoaXMuY3VyclRvcExldmVsPWUsZS5hY2NlcHQodGhpcyl9KX12aXNpdE5vblRlcm1pbmFsKGUpe2xldCByPXRoaXMubmFtZVRvVG9wUnVsZVtlLm5vblRlcm1pbmFsTmFtZV07aWYocillLnJlZmVyZW5jZWRSdWxlPXI7ZWxzZXtsZXQgbj10aGlzLmVyck1zZ1Byb3ZpZGVyLmJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodGhpcy5jdXJyVG9wTGV2ZWwsZSk7dGhpcy5lcnJvcnMucHVzaCh7bWVzc2FnZTpuLHR5cGU6VWkuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRixydWxlTmFtZTp0aGlzLmN1cnJUb3BMZXZlbC5uYW1lLHVucmVzb2x2ZWRSZWZOYW1lOmUubm9uVGVybWluYWxOYW1lfSl9fX19KTtmdW5jdGlvbiBzayh0LGUscj1bXSl7cj1ybihyKTtsZXQgbj1bXSxpPTA7ZnVuY3Rpb24gYShsKXtyZXR1cm4gbC5jb25jYXQoeGkodCxpKzEpKX1vKGEsInJlbWFpbmluZ1BhdGhXaXRoIik7ZnVuY3Rpb24gcyhsKXtsZXQgdT1zayhhKGwpLGUscik7cmV0dXJuIG4uY29uY2F0KHUpfWZvcihvKHMsImdldEFsdGVybmF0aXZlc0ZvclByb2QiKTtyLmxlbmd0aDxlJiZpPHQubGVuZ3RoOyl7bGV0IGw9dFtpXTtpZihsIGluc3RhbmNlb2YgX24pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2Ygbm4pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2YgYW4pbj1zKGwuZGVmaW5pdGlvbik7ZWxzZSBpZihsIGluc3RhbmNlb2YgTG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBEcih7ZGVmaW5pdGlvbjpsLmRlZmluaXRpb259KV0pO3JldHVybiBzKHUpfWVsc2UgaWYobCBpbnN0YW5jZW9mIERuKXtsZXQgdT1bbmV3IF9uKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pLG5ldyBEcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV07cmV0dXJuIHModSl9ZWxzZSBpZihsIGluc3RhbmNlb2YgYm4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBEcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV0pO249cyh1KX1lbHNlIGlmKGwgaW5zdGFuY2VvZiBEcil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IERyKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pXSk7bj1zKHUpfWVsc2V7aWYobCBpbnN0YW5jZW9mIHduKXJldHVybiBTZShsLmRlZmluaXRpb24sdT0+e2NyKHUuZGVmaW5pdGlvbik9PT0hMSYmKG49cyh1LmRlZmluaXRpb24pKX0pLG47aWYobCBpbnN0YW5jZW9mIEVyKXIucHVzaChsLnRlcm1pbmFsVHlwZSk7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1pKyt9cmV0dXJuIG4ucHVzaCh7cGFydGlhbFBhdGg6cixzdWZmaXhEZWY6eGkodCxpKX0pLG59ZnVuY3Rpb24gb2sodCxlLHIsbil7bGV0IGk9IkVYSVRfTk9ORV9URVJNSU5BTCIsYT1baV0scz0iRVhJVF9BTFRFUk5BVElWRSIsbD0hMSx1PWUubGVuZ3RoLGg9dS1uLTEsZj1bXSxkPVtdO2ZvcihkLnB1c2goe2lkeDotMSxkZWY6dCxydWxlU3RhY2s6W10sb2NjdXJyZW5jZVN0YWNrOltdfSk7IWNyKGQpOyl7bGV0IHA9ZC5wb3AoKTtpZihwPT09cyl7bCYmeGEoZCkuaWR4PD1oJiZkLnBvcCgpO2NvbnRpbnVlfWxldCBtPXAuZGVmLGc9cC5pZHgseT1wLnJ1bGVTdGFjayx2PXAub2NjdXJyZW5jZVN0YWNrO2lmKGNyKG0pKWNvbnRpbnVlO2xldCB4PW1bMF07aWYoeD09PWkpe2xldCBiPXtpZHg6ZyxkZWY6eGkobSkscnVsZVN0YWNrOnp1KHkpLG9jY3VycmVuY2VTdGFjazp6dSh2KX07ZC5wdXNoKGIpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIEVyKWlmKGc8dS0xKXtsZXQgYj1nKzEsdz1lW2JdO2lmKHIodyx4LnRlcm1pbmFsVHlwZSkpe2xldCBfPXtpZHg6YixkZWY6eGkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChfKX19ZWxzZSBpZihnPT09dS0xKWYucHVzaCh7bmV4dFRva2VuVHlwZTp4LnRlcm1pbmFsVHlwZSxuZXh0VG9rZW5PY2N1cnJlbmNlOnguaWR4LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fSksbD0hMDtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIG5uKXtsZXQgYj1ybih5KTtiLnB1c2goeC5ub25UZXJtaW5hbE5hbWUpO2xldCB3PXJuKHYpO3cucHVzaCh4LmlkeCk7bGV0IF89e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGEseGkobSkpLHJ1bGVTdGFjazpiLG9jY3VycmVuY2VTdGFjazp3fTtkLnB1c2goXyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgYW4pe2xldCBiPXtpZHg6ZyxkZWY6eGkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IHc9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KHhpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKHcpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIExuKXtsZXQgYj1uZXcgRHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLHc9eC5kZWZpbml0aW9uLmNvbmNhdChbYl0seGkobSkpLF89e2lkeDpnLGRlZjp3LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goXyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgRG4pe2xldCBiPW5ldyBFcih7dGVybWluYWxUeXBlOnguc2VwYXJhdG9yfSksdz1uZXcgRHIoe2RlZmluaXRpb246W2JdLmNvbmNhdCh4LmRlZmluaXRpb24pLGlkeDp4LmlkeH0pLF89eC5kZWZpbml0aW9uLmNvbmNhdChbd10seGkobSkpLFQ9e2lkeDpnLGRlZjpfLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goVCl9ZWxzZSBpZih4IGluc3RhbmNlb2YgYm4pe2xldCBiPXtpZHg6ZyxkZWY6eGkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IHc9bmV3IEVyKHt0ZXJtaW5hbFR5cGU6eC5zZXBhcmF0b3J9KSxfPW5ldyBEcih7ZGVmaW5pdGlvbjpbd10uY29uY2F0KHguZGVmaW5pdGlvbiksaWR4OnguaWR4fSksVD14LmRlZmluaXRpb24uY29uY2F0KFtfXSx4aShtKSksRT17aWR4OmcsZGVmOlQscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChFKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBEcil7bGV0IGI9e2lkeDpnLGRlZjp4aShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgdz1uZXcgRHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLF89eC5kZWZpbml0aW9uLmNvbmNhdChbd10seGkobSkpLFQ9e2lkeDpnLGRlZjpfLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goVCl9ZWxzZSBpZih4IGluc3RhbmNlb2Ygd24pZm9yKGxldCBiPXguZGVmaW5pdGlvbi5sZW5ndGgtMTtiPj0wO2ItLSl7bGV0IHc9eC5kZWZpbml0aW9uW2JdLF89e2lkeDpnLGRlZjp3LmRlZmluaXRpb24uY29uY2F0KHhpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKF8pLGQucHVzaChzKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBfbilkLnB1c2goe2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KHhpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn0pO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIGxzKWQucHVzaChVQmUoeCxnLHksdikpO2Vsc2UgdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9cmV0dXJuIGZ9ZnVuY3Rpb24gVUJlKHQsZSxyLG4pe2xldCBpPXJuKHIpO2kucHVzaCh0Lm5hbWUpO2xldCBhPXJuKG4pO3JldHVybiBhLnB1c2goMSkse2lkeDplLGRlZjp0LmRlZmluaXRpb24scnVsZVN0YWNrOmksb2NjdXJyZW5jZVN0YWNrOmF9fXZhciBMUixuayxtZyxpayxrMixhayxFMixTMj1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7bVIoKTtYVCgpO3VzKCk7TFI9Y2xhc3MgZXh0ZW5kcyBIdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE5leHRQb3NzaWJsZVRva2Vuc1dhbGtlciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnBhdGg9cix0aGlzLnBvc3NpYmxlVG9rVHlwZXM9W10sdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmZvdW5kPSExLHRoaXMuaXNBdEVuZE9mUGF0aD0hMX1zdGFydFdhbGtpbmcoKXtpZih0aGlzLmZvdW5kPSExLHRoaXMucGF0aC5ydWxlU3RhY2tbMF0hPT10aGlzLnRvcFByb2QubmFtZSl0aHJvdyBFcnJvcigiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhIik7cmV0dXJuIHRoaXMucnVsZVN0YWNrPXJuKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKSx0aGlzLm9jY3VycmVuY2VTdGFjaz1ybih0aGlzLnBhdGgub2NjdXJyZW5jZVN0YWNrKS5yZXZlcnNlKCksdGhpcy5ydWxlU3RhY2sucG9wKCksdGhpcy5vY2N1cnJlbmNlU3RhY2sucG9wKCksdGhpcy51cGRhdGVFeHBlY3RlZE5leHQoKSx0aGlzLndhbGsodGhpcy50b3BQcm9kKSx0aGlzLnBvc3NpYmxlVG9rVHlwZXN9d2FsayhlLHI9W10pe3RoaXMuZm91bmR8fHN1cGVyLndhbGsoZSxyKX13YWxrUHJvZFJlZihlLHIsbil7aWYoZS5yZWZlcmVuY2VkUnVsZS5uYW1lPT09dGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUmJmUuaWR4PT09dGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2Upe2xldCBpPXIuY29uY2F0KG4pO3RoaXMudXBkYXRlRXhwZWN0ZWROZXh0KCksdGhpcy53YWxrKGUucmVmZXJlbmNlZFJ1bGUsaSl9fXVwZGF0ZUV4cGVjdGVkTmV4dCgpe2NyKHRoaXMucnVsZVN0YWNrKT8odGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmlzQXRFbmRPZlBhdGg9ITApOih0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT10aGlzLnJ1bGVTdGFjay5wb3AoKSx0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT10aGlzLm9jY3VycmVuY2VTdGFjay5wb3AoKSl9fSxuaz1jbGFzcyBleHRlbmRzIExSe3N0YXRpY3tvKHRoaXMsIk5leHRBZnRlclRva2VuV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMucGF0aD1yLHRoaXMubmV4dFRlcm1pbmFsTmFtZT0iIix0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9MCx0aGlzLm5leHRUZXJtaW5hbE5hbWU9dGhpcy5wYXRoLmxhc3RUb2submFtZSx0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9dGhpcy5wYXRoLmxhc3RUb2tPY2N1cnJlbmNlfXdhbGtUZXJtaW5hbChlLHIsbil7aWYodGhpcy5pc0F0RW5kT2ZQYXRoJiZlLnRlcm1pbmFsVHlwZS5uYW1lPT09dGhpcy5uZXh0VGVybWluYWxOYW1lJiZlLmlkeD09PXRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSYmIXRoaXMuZm91bmQpe2xldCBpPXIuY29uY2F0KG4pLGE9bmV3IF9uKHtkZWZpbml0aW9uOml9KTt0aGlzLnBvc3NpYmxlVG9rVHlwZXM9dTAoYSksdGhpcy5mb3VuZD0hMH19fSxtZz1jbGFzcyBleHRlbmRzIEh1e3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMudG9wUnVsZT1lLHRoaXMub2NjdXJyZW5jZT1yLHRoaXMucmVzdWx0PXt0b2tlbjp2b2lkIDAsb2NjdXJyZW5jZTp2b2lkIDAsaXNFbmRPZlJ1bGU6dm9pZCAwfX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUnVsZSksdGhpcy5yZXN1bHR9fSxpaz1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciIpfXdhbGtNYW55KGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueShlLHIsbil9fSxrMj1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciIpfXdhbGtNYW55U2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueVNlcChlLHIsbil9fSxhaz1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVdhbGtlciIpfXdhbGtBdExlYXN0T25lKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZShlLHIsbil9fSxFMj1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciIpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZVNlcChlLHIsbil9fTtvKHNrLCJwb3NzaWJsZVBhdGhzRnJvbSIpO28ob2ssIm5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIik7byhVQmUsImV4cGFuZFRvcExldmVsUnVsZSIpfSk7ZnVuY3Rpb24gQzIodCl7aWYodCBpbnN0YW5jZW9mIGFufHx0PT09Ik9wdGlvbiIpcmV0dXJuIFhuLk9QVElPTjtpZih0IGluc3RhbmNlb2YgRHJ8fHQ9PT0iUmVwZXRpdGlvbiIpcmV0dXJuIFhuLlJFUEVUSVRJT047aWYodCBpbnN0YW5jZW9mIExufHx0PT09IlJlcGV0aXRpb25NYW5kYXRvcnkiKXJldHVybiBYbi5SRVBFVElUSU9OX01BTkRBVE9SWTtpZih0IGluc3RhbmNlb2YgRG58fHQ9PT0iUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiKXJldHVybiBYbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtpZih0IGluc3RhbmNlb2YgYm58fHQ9PT0iUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKXJldHVybiBYbi5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SO2lmKHQgaW5zdGFuY2VvZiB3bnx8dD09PSJBbHRlcm5hdGlvbiIpcmV0dXJuIFhuLkFMVEVSTkFUSU9OO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGNrKHQpe2xldHtvY2N1cnJlbmNlOmUscnVsZTpyLHByb2RUeXBlOm4sbWF4TG9va2FoZWFkOml9PXQsYT1DMihuKTtyZXR1cm4gYT09PVhuLkFMVEVSTkFUSU9OP2dnKGUscixpKTp5ZyhlLHIsYSxpKX1mdW5jdGlvbiBCc2UodCxlLHIsbixpLGEpe2xldCBzPWdnKHQsZSxyKSxsPVVzZShzKT9kZzpXdTtyZXR1cm4gYShzLG4sbCxpKX1mdW5jdGlvbiBGc2UodCxlLHIsbixpLGEpe2xldCBzPXlnKHQsZSxpLHIpLGw9VXNlKHMpP2RnOld1O3JldHVybiBhKHNbMF0sbCxuKX1mdW5jdGlvbiB6c2UodCxlLHIsbil7bGV0IGk9dC5sZW5ndGgsYT16YSh0LHM9PnphKHMsbD0+bC5sZW5ndGg9PT0xKSk7aWYoZSlyZXR1cm4gZnVuY3Rpb24ocyl7bGV0IGw9UWUocyx1PT51LkdBVEUpO2ZvcihsZXQgdT0wO3U8aTt1Kyspe2xldCBoPXRbdV0sZj1oLmxlbmd0aCxkPWxbdV07aWYoIShkIT09dm9pZCAwJiZkLmNhbGwodGhpcyk9PT0hMSkpZTpmb3IobGV0IHA9MDtwPGY7cCsrKXtsZXQgbT1oW3BdLGc9bS5sZW5ndGg7Zm9yKGxldCB5PTA7eTxnO3krKyl7bGV0IHY9dGhpcy5MQSh5KzEpO2lmKHIodixtW3ldKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHV9fX07aWYoYSYmIW4pe2xldCBzPVFlKHQsdT0+V3IodSkpLGw9cXIocywodSxoLGYpPT4oU2UoaCxkPT57TnQodSxkLnRva2VuVHlwZUlkeCl8fCh1W2QudG9rZW5UeXBlSWR4XT1mKSxTZShkLmNhdGVnb3J5TWF0Y2hlcyxwPT57TnQodSxwKXx8KHVbcF09Zil9KX0pLHUpLHt9KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgdT10aGlzLkxBKDEpO3JldHVybiBsW3UudG9rZW5UeXBlSWR4XX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtmb3IobGV0IHM9MDtzPGk7cysrKXtsZXQgbD10W3NdLHU9bC5sZW5ndGg7ZTpmb3IobGV0IGg9MDtoPHU7aCsrKXtsZXQgZj1sW2hdLGQ9Zi5sZW5ndGg7Zm9yKGxldCBwPTA7cDxkO3ArKyl7bGV0IG09dGhpcy5MQShwKzEpO2lmKHIobSxmW3BdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHN9fX19ZnVuY3Rpb24gR3NlKHQsZSxyKXtsZXQgbj16YSh0LGE9PmEubGVuZ3RoPT09MSksaT10Lmxlbmd0aDtpZihuJiYhcil7bGV0IGE9V3IodCk7aWYoYS5sZW5ndGg9PT0xJiZjcihhWzBdLmNhdGVnb3J5TWF0Y2hlcykpe2xldCBsPWFbMF0udG9rZW5UeXBlSWR4O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeD09PWx9fWVsc2V7bGV0IHM9cXIoYSwobCx1LGgpPT4obFt1LnRva2VuVHlwZUlkeF09ITAsU2UodS5jYXRlZ29yeU1hdGNoZXMsZj0+e2xbZl09ITB9KSxsKSxbXSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGw9dGhpcy5MQSgxKTtyZXR1cm4gc1tsLnRva2VuVHlwZUlkeF09PT0hMH19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7ZTpmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9dGhpcy5MQSh1KzEpO2lmKGUoaCxzW3VdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIFBzZSh0KXtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfWZ1bmN0aW9uIERSKHQpe2xldCBlPVsiIl07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl0saT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpLnB1c2gocysiXyIrbi50b2tlblR5cGVJZHgpO2ZvcihsZXQgbD0wO2w8bi5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoO2wrKyl7bGV0IHU9Il8iK24uY2F0ZWdvcnlNYXRjaGVzW2xdO2kucHVzaChzK3UpfX1lPWl9cmV0dXJuIGV9ZnVuY3Rpb24gSEJlKHQsZSxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7aWYobj09PXIpY29udGludWU7bGV0IGk9dFtuXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpZihpW3NdPT09ITApcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uICRzZSh0LGUpe2xldCByPVFlKHQscz0+c2soW3NdLDEpKSxuPVBzZShyLmxlbmd0aCksaT1RZShyLHM9PntsZXQgbD17fTtyZXR1cm4gU2Uocyx1PT57bGV0IGg9RFIodS5wYXJ0aWFsUGF0aCk7U2UoaCxmPT57bFtmXT0hMH0pfSksbH0pLGE9cjtmb3IobGV0IHM9MTtzPD1lO3MrKyl7bGV0IGw9YTthPVBzZShsLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBoPWxbdV07Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2xldCBkPWhbZl0ucGFydGlhbFBhdGgscD1oW2ZdLnN1ZmZpeERlZixtPURSKGQpO2lmKEhCZShpLG0sdSl8fGNyKHApfHxkLmxlbmd0aD09PWUpe2xldCB5PW5bdV07aWYodWsoeSxkKT09PSExKXt5LnB1c2goZCk7Zm9yKGxldCB2PTA7djxtLmxlbmd0aDt2Kyspe2xldCB4PW1bdl07aVt1XVt4XT0hMH19fWVsc2V7bGV0IHk9c2socCxzKzEsZCk7YVt1XT1hW3VdLmNvbmNhdCh5KSxTZSh5LHY9PntsZXQgeD1EUih2LnBhcnRpYWxQYXRoKTtTZSh4LGI9PntpW3VdW2JdPSEwfSl9KX19fX1yZXR1cm4gbn1mdW5jdGlvbiBnZyh0LGUscixuKXtsZXQgaT1uZXcgbGsodCxYbi5BTFRFUk5BVElPTixuKTtyZXR1cm4gZS5hY2NlcHQoaSksJHNlKGkucmVzdWx0LHIpfWZ1bmN0aW9uIHlnKHQsZSxyLG4pe2xldCBpPW5ldyBsayh0LHIpO2UuYWNjZXB0KGkpO2xldCBhPWkucmVzdWx0LGw9bmV3IE5SKGUsdCxyKS5zdGFydFdhbGtpbmcoKSx1PW5ldyBfbih7ZGVmaW5pdGlvbjphfSksaD1uZXcgX24oe2RlZmluaXRpb246bH0pO3JldHVybiAkc2UoW3UsaF0sbil9ZnVuY3Rpb24gdWsodCxlKXtlOmZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldLHM9bltpXTtpZigoYT09PXN8fHMuY2F0ZWdvcnlNYXRjaGVzTWFwW2EudG9rZW5UeXBlSWR4XSE9PXZvaWQgMCk9PT0hMSljb250aW51ZSBlfXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBWc2UodCxlKXtyZXR1cm4gdC5sZW5ndGg8ZS5sZW5ndGgmJnphKHQsKHIsbik9PntsZXQgaT1lW25dO3JldHVybiByPT09aXx8aS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdfSl9ZnVuY3Rpb24gVXNlKHQpe3JldHVybiB6YSh0LGU9PnphKGUscj0+emEocixuPT5jcihuLmNhdGVnb3J5TWF0Y2hlcykpKSl9dmFyIFhuLE5SLGxrLHZnPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtTMigpO1hUKCk7ZjAoKTt1cygpOyhmdW5jdGlvbih0KXt0W3QuT1BUSU9OPTBdPSJPUFRJT04iLHRbdC5SRVBFVElUSU9OPTFdPSJSRVBFVElUSU9OIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUlk9Ml09IlJFUEVUSVRJT05fTUFOREFUT1JZIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I9M109IlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SIix0W3QuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUj00XT0iUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUiIsdFt0LkFMVEVSTkFUSU9OPTVdPSJBTFRFUk5BVElPTiJ9KShYbnx8KFhuPXt9KSk7byhDMiwiZ2V0UHJvZFR5cGUiKTtvKGNrLCJnZXRMb29rYWhlYWRQYXRocyIpO28oQnNlLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPciIpO28oRnNlLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPcHRpb25hbFByb2QiKTtvKHpzZSwiYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jIik7byhHc2UsImJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiIpO05SPWNsYXNzIGV4dGVuZHMgSHV7c3RhdGlje28odGhpcywiUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnRhcmdldE9jY3VycmVuY2U9cix0aGlzLnRhcmdldFByb2RUeXBlPW59c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMucmVzdERlZn1jaGVja0lzVGFyZ2V0KGUscixuLGkpe3JldHVybiBlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5jZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PXI/KHRoaXMucmVzdERlZj1uLmNvbmNhdChpKSwhMCk6ITF9d2Fsa09wdGlvbihlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uT1BUSU9OLHIsbil8fHN1cGVyLndhbGtPcHRpb24oZSxyLG4pfXdhbGtBdExlYXN0T25lKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5SRVBFVElUSU9OX01BTkRBVE9SWSxyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnkoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFhuLlJFUEVUSVRJT04scixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnlTZXAoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFhuLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9fSxsaz1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIkluc2lkZURlZmluaXRpb25GaW5kZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKCksdGhpcy50YXJnZXRPY2N1cnJlbmNlPWUsdGhpcy50YXJnZXRQcm9kVHlwZT1yLHRoaXMudGFyZ2V0UmVmPW4sdGhpcy5yZXN1bHQ9W119Y2hlY2tJc1RhcmdldChlLHIpe2UuaWR4PT09dGhpcy50YXJnZXRPY2N1cnJlbmNlJiZ0aGlzLnRhcmdldFByb2RUeXBlPT09ciYmKHRoaXMudGFyZ2V0UmVmPT09dm9pZCAwfHxlPT09dGhpcy50YXJnZXRSZWYpJiYodGhpcy5yZXN1bHQ9ZS5kZWZpbml0aW9uKX12aXNpdE9wdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5PUFRJT04pfXZpc2l0UmVwZXRpdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5SRVBFVElUSU9OKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUlkpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUil9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5BTFRFUk5BVElPTil9fTtvKFBzZSwiaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMiKTtvKERSLCJwYXRoVG9IYXNoS2V5cyIpO28oSEJlLCJpc1VuaXF1ZVByZWZpeEhhc2giKTtvKCRzZSwibG9va0FoZWFkU2VxdWVuY2VGcm9tQWx0ZXJuYXRpdmVzIik7byhnZywiZ2V0TG9va2FoZWFkUGF0aHNGb3JPciIpO28oeWcsImdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kIik7byh1aywiY29udGFpbnNQYXRoIik7byhWc2UsImlzU3RyaWN0UHJlZml4T2ZQYXRoIik7byhVc2UsImFyZVRva2VuQ2F0ZWdvcmllc05vdFVzZWQiKX0pO2Z1bmN0aW9uIEhzZSh0KXtsZXQgZT10Lmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtydWxlczp0LnJ1bGVzLHRva2VuVHlwZXM6dC50b2tlblR5cGVzLGdyYW1tYXJOYW1lOnQuZ3JhbW1hck5hbWV9KTtyZXR1cm4gUWUoZSxyPT5PYmplY3QuYXNzaWduKHt0eXBlOlVpLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTn0scikpfWZ1bmN0aW9uIFdzZSh0LGUscixuKXtsZXQgaT1iYSh0LHU9PldCZSh1LHIpKSxhPVFCZSh0LGUscikscz1iYSh0LHU9PlhCZSh1LHIpKSxsPWJhKHQsdT0+cUJlKHUsdCxuLHIpKTtyZXR1cm4gaS5jb25jYXQoYSxzLGwpfWZ1bmN0aW9uIFdCZSh0LGUpe2xldCByPW5ldyBSUjt0LmFjY2VwdChyKTtsZXQgbj1yLmFsbFByb2R1Y3Rpb25zLGk9V0wobixZQmUpLGE9enMoaSxsPT5sLmxlbmd0aD4xKTtyZXR1cm4gUWUoYnIoYSksbD0+e2xldCB1PXNhKGwpLGg9ZS5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodCxsKSxmPVZzKHUpLGQ9e21lc3NhZ2U6aCx0eXBlOlVpLkRVUExJQ0FURV9QUk9EVUNUSU9OUyxydWxlTmFtZTp0Lm5hbWUsZHNsTmFtZTpmLG9jY3VycmVuY2U6dS5pZHh9LHA9WXNlKHUpO3JldHVybiBwJiYoZC5wYXJhbWV0ZXI9cCksZH0pfWZ1bmN0aW9uIFlCZSh0KXtyZXR1cm5gJHtWcyh0KX1fI18ke3QuaWR4fV8jXyR7WXNlKHQpfWB9ZnVuY3Rpb24gWXNlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXI/dC50ZXJtaW5hbFR5cGUubmFtZTp0IGluc3RhbmNlb2Ygbm4/dC5ub25UZXJtaW5hbE5hbWU6IiJ9ZnVuY3Rpb24gcUJlKHQsZSxyLG4pe2xldCBpPVtdO2lmKHFyKGUsKHMsbCk9PmwubmFtZT09PXQubmFtZT9zKzE6cywwKT4xKXtsZXQgcz1uLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOnQsZ3JhbW1hck5hbWU6cn0pO2kucHVzaCh7bWVzc2FnZTpzLHR5cGU6VWkuRFVQTElDQVRFX1JVTEVfTkFNRSxydWxlTmFtZTp0Lm5hbWV9KX1yZXR1cm4gaX1mdW5jdGlvbiBxc2UodCxlLHIpe2xldCBuPVtdLGk7cmV0dXJuIFluKGUsdCl8fChpPWBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHt0fTwtIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBncmFtbWFyOiAtPiR7cn08LWFzIGl0IGlzIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgc3VwZXIgZ3JhbW1hcnMgYCxuLnB1c2goe21lc3NhZ2U6aSx0eXBlOlVpLklOVkFMSURfUlVMRV9PVkVSUklERSxydWxlTmFtZTp0fSkpLG59ZnVuY3Rpb24gSVIodCxlLHIsbj1bXSl7bGV0IGk9W10sYT1oayhlLmRlZmluaXRpb24pO2lmKGNyKGEpKXJldHVybltdO3tsZXQgcz10Lm5hbWU7WW4oYSx0KSYmaS5wdXNoKHttZXNzYWdlOnIuYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3Ioe3RvcExldmVsUnVsZTp0LGxlZnRSZWN1cnNpb25QYXRoOm59KSx0eXBlOlVpLkxFRlRfUkVDVVJTSU9OLHJ1bGVOYW1lOnN9KTtsZXQgdT1uZihhLG4uY29uY2F0KFt0XSkpLGg9YmEodSxmPT57bGV0IGQ9cm4obik7cmV0dXJuIGQucHVzaChmKSxJUih0LGYscixkKX0pO3JldHVybiBpLmNvbmNhdChoKX19ZnVuY3Rpb24gaGsodCl7bGV0IGU9W107aWYoY3IodCkpcmV0dXJuIGU7bGV0IHI9c2EodCk7aWYociBpbnN0YW5jZW9mIG5uKWUucHVzaChyLnJlZmVyZW5jZWRSdWxlKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBfbnx8ciBpbnN0YW5jZW9mIGFufHxyIGluc3RhbmNlb2YgTG58fHIgaW5zdGFuY2VvZiBEbnx8ciBpbnN0YW5jZW9mIGJufHxyIGluc3RhbmNlb2YgRHIpZT1lLmNvbmNhdChoayhyLmRlZmluaXRpb24pKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiB3billPVdyKFFlKHIuZGVmaW5pdGlvbixhPT5oayhhLmRlZmluaXRpb24pKSk7ZWxzZSBpZighKHIgaW5zdGFuY2VvZiBFcikpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7bGV0IG49YzAociksaT10Lmxlbmd0aD4xO2lmKG4mJmkpe2xldCBhPXhpKHQpO3JldHVybiBlLmNvbmNhdChoayhhKSl9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBYc2UodCxlKXtsZXQgcj1uZXcgQTI7dC5hY2NlcHQocik7bGV0IG49ci5hbHRlcm5hdGlvbnM7cmV0dXJuIGJhKG4sYT0+e2xldCBzPXp1KGEuZGVmaW5pdGlvbik7cmV0dXJuIGJhKHMsKGwsdSk9PntsZXQgaD1vayhbbF0sW10sV3UsMSk7cmV0dXJuIGNyKGgpP1t7bWVzc2FnZTplLmJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphLGVtcHR5Q2hvaWNlSWR4OnV9KSx0eXBlOlVpLk5PTkVfTEFTVF9FTVBUWV9BTFQscnVsZU5hbWU6dC5uYW1lLG9jY3VycmVuY2U6YS5pZHgsYWx0ZXJuYXRpdmU6dSsxfV06W119KX0pfWZ1bmN0aW9uIGpzZSh0LGUscil7bGV0IG49bmV3IEEyO3QuYWNjZXB0KG4pO2xldCBpPW4uYWx0ZXJuYXRpb25zO3JldHVybiBpPWFmKGkscz0+cy5pZ25vcmVBbWJpZ3VpdGllcz09PSEwKSxiYShpLHM9PntsZXQgbD1zLmlkeCx1PXMubWF4TG9va2FoZWFkfHxlLGg9Z2cobCx0LHUscyksZj1qQmUoaCxzLHQsciksZD1LQmUoaCxzLHQscik7cmV0dXJuIGYuY29uY2F0KGQpfSl9ZnVuY3Rpb24gWEJlKHQsZSl7bGV0IHI9bmV3IEEyO3QuYWNjZXB0KHIpO2xldCBuPXIuYWx0ZXJuYXRpb25zO3JldHVybiBiYShuLGE9PmEuZGVmaW5pdGlvbi5sZW5ndGg+MjU1P1t7bWVzc2FnZTplLmJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphfSksdHlwZTpVaS5UT09fTUFOWV9BTFRTLHJ1bGVOYW1lOnQubmFtZSxvY2N1cnJlbmNlOmEuaWR4fV06W10pfWZ1bmN0aW9uIEtzZSh0LGUscil7bGV0IG49W107cmV0dXJuIFNlKHQsaT0+e2xldCBhPW5ldyBNUjtpLmFjY2VwdChhKTtsZXQgcz1hLmFsbFByb2R1Y3Rpb25zO1NlKHMsbD0+e2xldCB1PUMyKGwpLGg9bC5tYXhMb29rYWhlYWR8fGUsZj1sLmlkeCxwPXlnKGYsaSx1LGgpWzBdO2lmKGNyKFdyKHApKSl7bGV0IG09ci5idWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6aSxyZXBldGl0aW9uOmx9KTtuLnB1c2goe21lc3NhZ2U6bSx0eXBlOlVpLk5PX05PTl9FTVBUWV9MT09LQUhFQUQscnVsZU5hbWU6aS5uYW1lfSl9fSl9KSxufWZ1bmN0aW9uIGpCZSh0LGUscixuKXtsZXQgaT1bXSxhPXFyKHQsKGwsdSxoKT0+KGUuZGVmaW5pdGlvbltoXS5pZ25vcmVBbWJpZ3VpdGllcz09PSEwfHxTZSh1LGY9PntsZXQgZD1baF07U2UodCwocCxtKT0+e2ghPT1tJiZ1ayhwLGYpJiZlLmRlZmluaXRpb25bbV0uaWdub3JlQW1iaWd1aXRpZXMhPT0hMCYmZC5wdXNoKG0pfSksZC5sZW5ndGg+MSYmIXVrKGksZikmJihpLnB1c2goZiksbC5wdXNoKHthbHRzOmQscGF0aDpmfSkpfSksbCksW10pO3JldHVybiBRZShhLGw9PntsZXQgdT1RZShsLmFsdHMsZj0+ZisxKTtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOnUscHJlZml4UGF0aDpsLnBhdGh9KSx0eXBlOlVpLkFNQklHVU9VU19BTFRTLHJ1bGVOYW1lOnIubmFtZSxvY2N1cnJlbmNlOmUuaWR4LGFsdGVybmF0aXZlczpsLmFsdHN9fSl9ZnVuY3Rpb24gS0JlKHQsZSxyLG4pe2xldCBpPXFyKHQsKHMsbCx1KT0+e2xldCBoPVFlKGwsZj0+KHtpZHg6dSxwYXRoOmZ9KSk7cmV0dXJuIHMuY29uY2F0KGgpfSxbXSk7cmV0dXJuIFJjKGJhKGkscz0+e2lmKGUuZGVmaW5pdGlvbltzLmlkeF0uaWdub3JlQW1iaWd1aXRpZXM9PT0hMClyZXR1cm5bXTtsZXQgdT1zLmlkeCxoPXMucGF0aCxmPVlyKGkscD0+ZS5kZWZpbml0aW9uW3AuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcyE9PSEwJiZwLmlkeDx1JiZWc2UocC5wYXRoLGgpKTtyZXR1cm4gUWUoZixwPT57bGV0IG09W3AuaWR4KzEsdSsxXSxnPWUuaWR4PT09MD8iIjplLmlkeDtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOm0scHJlZml4UGF0aDpwLnBhdGh9KSx0eXBlOlVpLkFNQklHVU9VU19QUkVGSVhfQUxUUyxydWxlTmFtZTpyLm5hbWUsb2NjdXJyZW5jZTpnLGFsdGVybmF0aXZlczptfX0pfSkpfWZ1bmN0aW9uIFFCZSh0LGUscil7bGV0IG49W10saT1RZShlLGE9PmEubmFtZSk7cmV0dXJuIFNlKHQsYT0+e2xldCBzPWEubmFtZTtpZihZbihpLHMpKXtsZXQgbD1yLmJ1aWxkTmFtZXNwYWNlQ29uZmxpY3RFcnJvcihhKTtuLnB1c2goe21lc3NhZ2U6bCx0eXBlOlVpLkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0UscnVsZU5hbWU6c30pfX0pLG59dmFyIFJSLEEyLE1SLF8yPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtVcygpO3VzKCk7dmcoKTtTMigpO2YwKCk7byhIc2UsInZhbGlkYXRlTG9va2FoZWFkIik7byhXc2UsInZhbGlkYXRlR3JhbW1hciIpO28oV0JlLCJ2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zIik7byhZQmUsImlkZW50aWZ5UHJvZHVjdGlvbkZvckR1cGxpY2F0ZXMiKTtvKFlzZSwiZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQiKTtSUj1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIk9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXROb25UZXJtaW5hbChlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRPcHRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFRlcm1pbmFsKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX19O28ocUJlLCJ2YWxpZGF0ZVJ1bGVEb2VzTm90QWxyZWFkeUV4aXN0Iik7byhxc2UsInZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiIpO28oSVIsInZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uIik7byhoaywiZ2V0Rmlyc3ROb25lVGVybWluYWwiKTtBMj1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIk9yQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWx0ZXJuYXRpb25zPVtdfXZpc2l0QWx0ZXJuYXRpb24oZSl7dGhpcy5hbHRlcm5hdGlvbnMucHVzaChlKX19O28oWHNlLCJ2YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZSIpO28oanNlLCJ2YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzIik7TVI9Y2xhc3MgZXh0ZW5kcyBjc3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfX07byhYQmUsInZhbGlkYXRlVG9vTWFueUFsdHMiKTtvKEtzZSwidmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoIik7byhqQmUsImNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMiKTtvKEtCZSwiY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyIpO28oUUJlLCJjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSIpfSk7ZnVuY3Rpb24gUXNlKHQpe2xldCBlPXJmKHQse2Vyck1zZ1Byb3ZpZGVyOk1zZX0pLHI9e307cmV0dXJuIFNlKHQucnVsZXMsbj0+e3Jbbi5uYW1lXT1ufSksSXNlKHIsZS5lcnJNc2dQcm92aWRlcil9ZnVuY3Rpb24gWnNlKHQpe3JldHVybiB0PXJmKHQse2Vyck1zZ1Byb3ZpZGVyOlVsfSksV3NlKHQucnVsZXMsdC50b2tlblR5cGVzLHQuZXJyTXNnUHJvdmlkZXIsdC5ncmFtbWFyTmFtZSl9dmFyIEpzZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7T3NlKCk7XzIoKTtwZygpO28oUXNlLCJyZXNvbHZlR3JhbW1hciIpO28oWnNlLCJ2YWxpZGF0ZUdyYW1tYXIiKX0pO2Z1bmN0aW9uIGZmKHQpe3JldHVybiBZbihpb2UsdC5uYW1lKX12YXIgZW9lLHRvZSxyb2Usbm9lLGlvZSx4ZyxtMCxMMixEMixOMixiZz1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7ZW9lPSJNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24iLHRvZT0iTm9WaWFibGVBbHRFeGNlcHRpb24iLHJvZT0iRWFybHlFeGl0RXhjZXB0aW9uIixub2U9Ik5vdEFsbElucHV0UGFyc2VkRXhjZXB0aW9uIixpb2U9W2VvZSx0b2Uscm9lLG5vZV07T2JqZWN0LmZyZWV6ZShpb2UpO28oZmYsImlzUmVjb2duaXRpb25FeGNlcHRpb24iKTt4Zz1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlJlY29nbml0aW9uRXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuPXIsdGhpcy5yZXN5bmNlZFRva2Vucz1bXSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fSxtMD1jbGFzcyBleHRlbmRzIHhne3N0YXRpY3tvKHRoaXMsIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlLHIpLHRoaXMucHJldmlvdXNUb2tlbj1uLHRoaXMubmFtZT1lb2V9fSxMMj1jbGFzcyBleHRlbmRzIHhne3N0YXRpY3tvKHRoaXMsIk5vVmlhYmxlQWx0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPXRvZX19LEQyPWNsYXNzIGV4dGVuZHMgeGd7c3RhdGlje28odGhpcywiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5uYW1lPW5vZX19LE4yPWNsYXNzIGV4dGVuZHMgeGd7c3RhdGlje28odGhpcywiRWFybHlFeGl0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPXJvZX19fSk7ZnVuY3Rpb24gWkJlKHQsZSxyLG4saSxhLHMpe2xldCBsPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKG4saSksdT10aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF07aWYodT09PXZvaWQgMCl7bGV0IHA9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksbT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3BdO3U9bmV3IGEobSxpKS5zdGFydFdhbGtpbmcoKSx0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF09dX1sZXQgaD11LnRva2VuLGY9dS5vY2N1cnJlbmNlLGQ9dS5pc0VuZE9mUnVsZTt0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSYmZCYmaD09PXZvaWQgMCYmKGg9bW8sZj0xKSwhKGg9PT12b2lkIDB8fGY9PT12b2lkIDApJiZ0aGlzLnNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChoLGYscykmJnRoaXMudHJ5SW5SZXBldGl0aW9uUmVjb3ZlcnkodCxlLHIsaCl9dmFyIE9SLEJSLFBSLGZrLEZSPU0oKCk9PnsidXNlIHN0cmljdCI7cDAoKTtIdCgpO2JnKCk7Z1IoKTtVcygpO09SPXt9LEJSPSJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIsUFI9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT1CUn19LGZrPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlY292ZXJhYmxlIil9aW5pdFJlY292ZXJhYmxlKGUpe3RoaXMuZmlyc3RBZnRlclJlcE1hcD17fSx0aGlzLnJlc3luY0ZvbGxvd3M9e30sdGhpcy5yZWNvdmVyeUVuYWJsZWQ9TnQoZSwicmVjb3ZlcnlFbmFibGVkIik/ZS5yZWNvdmVyeUVuYWJsZWQ6aHMucmVjb3ZlcnlFbmFibGVkLHRoaXMucmVjb3ZlcnlFbmFibGVkJiYodGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3Zlcnk9WkJlKX1nZXRUb2tlblRvSW5zZXJ0KGUpe2xldCByPWQwKGUsIiIsTmFOLE5hTixOYU4sTmFOLE5hTixOYU4pO3JldHVybiByLmlzSW5zZXJ0ZWRJblJlY292ZXJ5PSEwLHJ9Y2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3ZlcnkoZSl7cmV0dXJuITB9Y2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShlKXtyZXR1cm4hMH10cnlJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpKXtsZXQgYT10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKSxzPXRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpLGw9W10sdT0hMSxoPXRoaXMuTEEoMSksZj10aGlzLkxBKDEpLGQ9bygoKT0+e2xldCBwPXRoaXMuTEEoMCksbT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmksYWN0dWFsOmgscHJldmlvdXM6cCxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pLGc9bmV3IG0wKG0saCx0aGlzLkxBKDApKTtnLnJlc3luY2VkVG9rZW5zPXp1KGwpLHRoaXMuU0FWRV9FUlJPUihnKX0sImdlbmVyYXRlRXJyb3JNZXNzYWdlIik7Zm9yKDshdTspaWYodGhpcy50b2tlbk1hdGNoZXIoZixpKSl7ZCgpO3JldHVybn1lbHNlIGlmKG4uY2FsbCh0aGlzKSl7ZCgpLGUuYXBwbHkodGhpcyxyKTtyZXR1cm59ZWxzZSB0aGlzLnRva2VuTWF0Y2hlcihmLGEpP3U9ITA6KGY9dGhpcy5TS0lQX1RPS0VOKCksdGhpcy5hZGRUb1Jlc3luY1Rva2VucyhmLGwpKTt0aGlzLmltcG9ydExleGVyU3RhdGUocyl9c2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkKGUscixuKXtyZXR1cm4hKG49PT0hMXx8dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxlKXx8dGhpcy5pc0JhY2tUcmFja2luZygpfHx0aGlzLmNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHRoaXMuZ2V0Rm9sbG93c0ZvckluUnVsZVJlY292ZXJ5KGUscikpKX1nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKXtsZXQgbj10aGlzLmdldEN1cnJlbnRHcmFtbWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMobil9dHJ5SW5SdWxlUmVjb3ZlcnkoZSxyKXtpZih0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKSlyZXR1cm4gdGhpcy5nZXRUb2tlblRvSW5zZXJ0KGUpO2lmKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGUpKXtsZXQgbj10aGlzLlNLSVBfVE9LRU4oKTtyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKSxufXRocm93IG5ldyBQUigic2FkIHNhZCBwYW5kYSIpfWNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHIpe3JldHVybiB0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKXx8dGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuRGVsZXRpb24oZSl9Y2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpe2lmKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGUpfHxjcihyKSlyZXR1cm4hMTtsZXQgbj10aGlzLkxBKDEpO3JldHVybiBhcyhyLGE9PnRoaXMudG9rZW5NYXRjaGVyKG4sYSkpIT09dm9pZCAwfWNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihlKXtyZXR1cm4gdGhpcy5jYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KGUpP3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksZSk6ITF9aXNJbkN1cnJlbnRSdWxlUmVTeW5jU2V0KGUpe2xldCByPXRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpLG49dGhpcy5nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KHIpO3JldHVybiBZbihuLGUpfWZpbmRSZVN5bmNUb2tlblR5cGUoKXtsZXQgZT10aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKSxyPXRoaXMuTEEoMSksbj0yO2Zvcig7Oyl7bGV0IGk9YXMoZSxhPT5UMihyLGEpKTtpZihpIT09dm9pZCAwKXJldHVybiBpO3I9dGhpcy5MQShuKSxuKyt9fWdldEN1cnJGb2xsb3dLZXkoKXtpZih0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSlyZXR1cm4gT1I7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkscj10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKSxuPXRoaXMuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm57cnVsZU5hbWU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKSxpZHhJbkNhbGxpbmdSdWxlOnIsaW5SdWxlOnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUobil9fWJ1aWxkRnVsbEZvbGxvd0tleVN0YWNrKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLLHI9dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7cmV0dXJuIFFlKGUsKG4saSk9Pmk9PT0wP09SOntydWxlTmFtZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKG4pLGlkeEluQ2FsbGluZ1J1bGU6cltpXSxpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlW2ktMV0pfSl9ZmxhdHRlbkZvbGxvd1NldCgpe2xldCBlPVFlKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSxyPT50aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkocikpO3JldHVybiBXcihlKX1nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KGUpe2lmKGU9PT1PUilyZXR1cm5bbW9dO2xldCByPWUucnVsZU5hbWUrZS5pZHhJbkNhbGxpbmdSdWxlK2pUK2UuaW5SdWxlO3JldHVybiB0aGlzLnJlc3luY0ZvbGxvd3Nbcl19YWRkVG9SZXN5bmNUb2tlbnMoZSxyKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIoZSxtbyl8fHIucHVzaChlKSxyfXJlU3luY1RvKGUpe2xldCByPVtdLG49dGhpcy5MQSgxKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKG4sZSk9PT0hMTspbj10aGlzLlNLSVBfVE9LRU4oKSx0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKG4scik7cmV0dXJuIHp1KHIpfWF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpLGEscyxsKXt9Z2V0Q3VycmVudEdyYW1tYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCksaT1ybih0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7cmV0dXJue3J1bGVTdGFjazpuLG9jY3VycmVuY2VTdGFjazppLGxhc3RUb2s6ZSxsYXN0VG9rT2NjdXJyZW5jZTpyfX1nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCl7cmV0dXJuIFFlKHRoaXMuUlVMRV9TVEFDSyxlPT50aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpKX19O28oWkJlLCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkiKX0pO2Z1bmN0aW9uIGRrKHQsZSxyKXtyZXR1cm4gcnxlfHR9dmFyIHBrPU0oKCk9PnsidXNlIHN0cmljdCI7byhkaywiZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkIil9KTt2YXIganUselI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO3BnKCk7VXMoKTtfMigpO3ZnKCk7anU9Y2xhc3N7c3RhdGlje28odGhpcywiTExrTG9va2FoZWFkU3RyYXRlZ3kiKX1jb25zdHJ1Y3RvcihlKXt2YXIgcjt0aGlzLm1heExvb2thaGVhZD0ocj1lPy5tYXhMb29rYWhlYWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmhzLm1heExvb2thaGVhZH12YWxpZGF0ZShlKXtsZXQgcj10aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKGUucnVsZXMpO2lmKGNyKHIpKXtsZXQgbj10aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhlLnJ1bGVzKSxpPXRoaXMudmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhlLnJ1bGVzLHRoaXMubWF4TG9va2FoZWFkKSxhPXRoaXMudmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKGUucnVsZXMsdGhpcy5tYXhMb29rYWhlYWQpO3JldHVyblsuLi5yLC4uLm4sLi4uaSwuLi5hXX1yZXR1cm4gcn12YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbihlKXtyZXR1cm4gYmEoZSxyPT5JUihyLHIsVWwpKX12YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZXMoZSl7cmV0dXJuIGJhKGUscj0+WHNlKHIsVWwpKX12YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKGUscil7cmV0dXJuIGJhKGUsbj0+anNlKG4scixVbCkpfXZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChlLHIpe3JldHVybiBLc2UoZSxyLFVsKX1idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKGUpe3JldHVybiBCc2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5oYXNQcmVkaWNhdGVzLGUuZHluYW1pY1Rva2Vuc0VuYWJsZWQsenNlKX1idWlsZExvb2thaGVhZEZvck9wdGlvbmFsKGUpe3JldHVybiBGc2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5keW5hbWljVG9rZW5zRW5hYmxlZCxDMihlLnByb2RUeXBlKSxHc2UpfX19KTtmdW5jdGlvbiBKQmUodCl7bWsucmVzZXQoKSx0LmFjY2VwdChtayk7bGV0IGU9bWsuZHNsTWV0aG9kcztyZXR1cm4gbWsucmVzZXQoKSxlfXZhciBnayxHUixtayxhb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO1VzKCk7cGsoKTt1cygpO3pSKCk7Z2s9Y2xhc3N7c3RhdGlje28odGhpcywiTG9va3NBaGVhZCIpfWluaXRMb29rc0FoZWFkKGUpe3RoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQ9TnQoZSwiZHluYW1pY1Rva2Vuc0VuYWJsZWQiKT9lLmR5bmFtaWNUb2tlbnNFbmFibGVkOmhzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHRoaXMubWF4TG9va2FoZWFkPU50KGUsIm1heExvb2thaGVhZCIpP2UubWF4TG9va2FoZWFkOmhzLm1heExvb2thaGVhZCx0aGlzLmxvb2thaGVhZFN0cmF0ZWd5PU50KGUsImxvb2thaGVhZFN0cmF0ZWd5Iik/ZS5sb29rYWhlYWRTdHJhdGVneTpuZXcganUoe21heExvb2thaGVhZDp0aGlzLm1heExvb2thaGVhZH0pLHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZT1uZXcgTWFwfXByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoZSl7U2UoZSxyPT57dGhpcy5UUkFDRV9JTklUKGAke3IubmFtZX0gUnVsZSBMb29rYWhlYWRgLCgpPT57bGV0e2FsdGVybmF0aW9uOm4scmVwZXRpdGlvbjppLG9wdGlvbjphLHJlcGV0aXRpb25NYW5kYXRvcnk6cyxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpsLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOnV9PUpCZShyKTtTZShuLGg9PntsZXQgZj1oLmlkeD09PTA/IiI6aC5pZHg7dGhpcy5UUkFDRV9JTklUKGAke1ZzKGgpfSR7Zn1gLCgpPT57bGV0IGQ9dGhpcy5sb29rYWhlYWRTdHJhdGVneS5idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKHtwcm9kT2NjdXJyZW5jZTpoLmlkeCxydWxlOnIsbWF4TG9va2FoZWFkOmgubWF4TG9va2FoZWFkfHx0aGlzLm1heExvb2thaGVhZCxoYXNQcmVkaWNhdGVzOmguaGFzUHJlZGljYXRlcyxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkfSkscD1kayh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbci5uYW1lXSwyNTYsaC5pZHgpO3RoaXMuc2V0TGFGdW5jQ2FjaGUocCxkKX0pfSksU2UoaSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDc2OCwiUmVwZXRpdGlvbiIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksU2UoYSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDUxMiwiT3B0aW9uIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxTZShzLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTAyNCwiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksU2UobCxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDE1MzYsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxTZSh1LGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTI4MCwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGgubWF4TG9va2FoZWFkLFZzKGgpKX0pfSl9KX1jb21wdXRlTG9va2FoZWFkRnVuYyhlLHIsbixpLGEscyl7dGhpcy5UUkFDRV9JTklUKGAke3N9JHtyPT09MD8iIjpyfWAsKCk9PntsZXQgbD10aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwoe3Byb2RPY2N1cnJlbmNlOnIscnVsZTplLG1heExvb2thaGVhZDphfHx0aGlzLm1heExvb2thaGVhZCxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHByb2RUeXBlOml9KSx1PWRrKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlLm5hbWVdLG4scik7dGhpcy5zZXRMYUZ1bmNDYWNoZSh1LGwpfSl9Z2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKGUscil7bGV0IG49dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIGRrKG4sZSxyKX1nZXRMYUZ1bmNGcm9tQ2FjaGUoZSl7cmV0dXJuIHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZS5nZXQoZSl9c2V0TGFGdW5jQ2FjaGUoZSxyKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUuc2V0KGUscil9fSxHUj1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIkRzbE1ldGhvZHNDb2xsZWN0b3JWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19cmVzZXQoKXt0aGlzLmRzbE1ldGhvZHM9e29wdGlvbjpbXSxhbHRlcm5hdGlvbjpbXSxyZXBldGl0aW9uOltdLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOltdLHJlcGV0aXRpb25NYW5kYXRvcnk6W10scmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I6W119fXZpc2l0T3B0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChlKX12aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uV2l0aFNlcGFyYXRvci5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeS5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uLnB1c2goZSl9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChlKX19LG1rPW5ldyBHUjtvKEpCZSwiY29sbGVjdE1ldGhvZHMiKX0pO2Z1bmN0aW9uIFVSKHQsZSl7aXNOYU4odC5zdGFydE9mZnNldCk9PT0hMD8odC5zdGFydE9mZnNldD1lLnN0YXJ0T2Zmc2V0LHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KTp0LmVuZE9mZnNldDxlLmVuZE9mZnNldCYmKHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KX1mdW5jdGlvbiBIUih0LGUpe2lzTmFOKHQuc3RhcnRPZmZzZXQpPT09ITA/KHQuc3RhcnRPZmZzZXQ9ZS5zdGFydE9mZnNldCx0LnN0YXJ0Q29sdW1uPWUuc3RhcnRDb2x1bW4sdC5zdGFydExpbmU9ZS5zdGFydExpbmUsdC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQsdC5lbmRDb2x1bW49ZS5lbmRDb2x1bW4sdC5lbmRMaW5lPWUuZW5kTGluZSk6dC5lbmRPZmZzZXQ8ZS5lbmRPZmZzZXQmJih0LmVuZE9mZnNldD1lLmVuZE9mZnNldCx0LmVuZENvbHVtbj1lLmVuZENvbHVtbix0LmVuZExpbmU9ZS5lbmRMaW5lKX1mdW5jdGlvbiBzb2UodCxlLHIpe3QuY2hpbGRyZW5bcl09PT12b2lkIDA/dC5jaGlsZHJlbltyXT1bZV06dC5jaGlsZHJlbltyXS5wdXNoKGUpfWZ1bmN0aW9uIG9vZSh0LGUscil7dC5jaGlsZHJlbltlXT09PXZvaWQgMD90LmNoaWxkcmVuW2VdPVtyXTp0LmNoaWxkcmVuW2VdLnB1c2gocil9dmFyIGxvZT1NKCgpPT57InVzZSBzdHJpY3QiO28oVVIsInNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQiKTtvKEhSLCJzZXROb2RlTG9jYXRpb25GdWxsIik7byhzb2UsImFkZFRlcm1pbmFsVG9Dc3QiKTtvKG9vZSwiYWRkTm9uZVRlcm1pbmFsVG9Dc3QiKX0pO2Z1bmN0aW9uIFdSKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZUZlLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTplfSl9dmFyIGVGZSxjb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlRmU9Im5hbWUiO28oV1IsImRlZmluZU5hbWVQcm9wIil9KTtmdW5jdGlvbiB0RmUodCxlKXtsZXQgcj1Hcih0KSxuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBhPXJbaV0scz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9c1t1XTtoLnRva2VuVHlwZUlkeD09PXZvaWQgMCYmdGhpc1toLm5hbWVdKGguY2hpbGRyZW4sZSl9fX1mdW5jdGlvbiB1b2UodCxlKXtsZXQgcj1vKGZ1bmN0aW9uKCl7fSwiZGVyaXZlZENvbnN0cnVjdG9yIik7V1Iocix0KyJCYXNlU2VtYW50aWNzIik7bGV0IG49e3Zpc2l0Om8oZnVuY3Rpb24oaSxhKXtpZihEdChpKSYmKGk9aVswXSksIWRyKGkpKXJldHVybiB0aGlzW2kubmFtZV0oaS5jaGlsZHJlbixhKX0sInZpc2l0IiksdmFsaWRhdGVWaXNpdG9yOm8oZnVuY3Rpb24oKXtsZXQgaT1yRmUodGhpcyxlKTtpZighY3IoaSkpe2xldCBhPVFlKGkscz0+cy5tc2cpO3Rocm93IEVycm9yKGBFcnJvcnMgRGV0ZWN0ZWQgaW4gQ1NUIFZpc2l0b3IgPCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfT46Cgkke2Euam9pbihgCgpgKS5yZXBsYWNlKC9cbi9nLGAKCWApfWApfX0sInZhbGlkYXRlVmlzaXRvciIpfTtyZXR1cm4gci5wcm90b3R5cGU9bixyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIuX1JVTEVfTkFNRVM9ZSxyfWZ1bmN0aW9uIGhvZSh0LGUscil7bGV0IG49byhmdW5jdGlvbigpe30sImRlcml2ZWRDb25zdHJ1Y3RvciIpO1dSKG4sdCsiQmFzZVNlbWFudGljc1dpdGhEZWZhdWx0cyIpO2xldCBpPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpO3JldHVybiBTZShlLGE9PntpW2FdPXRGZX0pLG4ucHJvdG90eXBlPWksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixufWZ1bmN0aW9uIHJGZSh0LGUpe3JldHVybiBuRmUodCxlKX1mdW5jdGlvbiBuRmUodCxlKXtsZXQgcj1ZcihlLGk9Pl9pKHRbaV0pPT09ITEpLG49UWUocixpPT4oe21zZzpgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7aX0+IG9uICR7dC5jb25zdHJ1Y3Rvci5uYW1lfSBDU1QgVmlzaXRvci5gLHR5cGU6WVIuTUlTU0lOR19NRVRIT0QsbWV0aG9kTmFtZTppfSkpO3JldHVybiBSYyhuKX12YXIgWVIsZm9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtjb2UoKTtvKHRGZSwiZGVmYXVsdFZpc2l0Iik7byh1b2UsImNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciIpO28oaG9lLCJjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzIik7KGZ1bmN0aW9uKHQpe3RbdC5SRURVTkRBTlRfTUVUSE9EPTBdPSJSRURVTkRBTlRfTUVUSE9EIix0W3QuTUlTU0lOR19NRVRIT0Q9MV09Ik1JU1NJTkdfTUVUSE9EIn0pKFlSfHwoWVI9e30pKTtvKHJGZSwidmFsaWRhdGVWaXNpdG9yIik7byhuRmUsInZhbGlkYXRlTWlzc2luZ0NzdE1ldGhvZHMiKX0pO3ZhciBiayxkb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijtsb2UoKTtIdCgpO2ZvZSgpO1VzKCk7Yms9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZUJ1aWxkZXIiKX1pbml0VHJlZUJ1aWxkZXIoZSl7aWYodGhpcy5DU1RfU1RBQ0s9W10sdGhpcy5vdXRwdXRDc3Q9ZS5vdXRwdXRDc3QsdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZz1OdChlLCJub2RlTG9jYXRpb25UcmFja2luZyIpP2Uubm9kZUxvY2F0aW9uVHJhY2tpbmc6aHMubm9kZUxvY2F0aW9uVHJhY2tpbmcsIXRoaXMub3V0cHV0Q3N0KXRoaXMuY3N0SW52b2NhdGlvblN0YXRlVXBkYXRlPXRpLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlPXRpLHRoaXMuY3N0UG9zdFRlcm1pbmFsPXRpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsPXRpLHRoaXMuY3N0UG9zdFJ1bGU9dGk7ZWxzZSBpZigvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPUhSLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9SFIsdGhpcy5jc3RQb3N0UnVsZT10aSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49dGksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT10aSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVGdWxsLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcik7ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPVVSLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9VVIsdGhpcy5jc3RQb3N0UnVsZT10aSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49dGksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT10aSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0LHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5T2Zmc2V0UmVndWxhcik7ZWxzZSBpZigvbm9uZS9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49dGksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT10aSx0aGlzLmNzdFBvc3RSdWxlPXRpLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aTtlbHNlIHRocm93IEVycm9yKGBJbnZhbGlkIDxub2RlTG9jYXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7ZS5ub2RlTG9jYXRpb25UcmFja2luZ30iYCl9c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0OnRoaXMuTEEoMSkuc3RhcnRPZmZzZXQsZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sc3RhcnRMaW5lOk5hTixzdGFydENvbHVtbjpOYU4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXIoZSl7bGV0IHI9dGhpcy5MQSgxKTtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpyLnN0YXJ0T2Zmc2V0LHN0YXJ0TGluZTpyLnN0YXJ0TGluZSxzdGFydENvbHVtbjpyLnN0YXJ0Q29sdW1uLGVuZE9mZnNldDpOYU4sZW5kTGluZTpOYU4sZW5kQ29sdW1uOk5hTn19Y3N0SW52b2NhdGlvblN0YXRlVXBkYXRlKGUpe2xldCByPXtuYW1lOmUsY2hpbGRyZW46T2JqZWN0LmNyZWF0ZShudWxsKX07dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uKHIpLHRoaXMuQ1NUX1NUQUNLLnB1c2gocil9Y3N0RmluYWxseVN0YXRlVXBkYXRlKCl7dGhpcy5DU1RfU1RBQ0sucG9wKCl9Y3N0UG9zdFJ1bGVGdWxsKGUpe2xldCByPXRoaXMuTEEoMCksbj1lLmxvY2F0aW9uO24uc3RhcnRPZmZzZXQ8PXIuc3RhcnRPZmZzZXQ/KG4uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0LG4uZW5kTGluZT1yLmVuZExpbmUsbi5lbmRDb2x1bW49ci5lbmRDb2x1bW4pOihuLnN0YXJ0T2Zmc2V0PU5hTixuLnN0YXJ0TGluZT1OYU4sbi5zdGFydENvbHVtbj1OYU4pfWNzdFBvc3RSdWxlT25seU9mZnNldChlKXtsZXQgcj10aGlzLkxBKDApLG49ZS5sb2NhdGlvbjtuLnN0YXJ0T2Zmc2V0PD1yLnN0YXJ0T2Zmc2V0P24uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0Om4uc3RhcnRPZmZzZXQ9TmFOfWNzdFBvc3RUZXJtaW5hbChlLHIpe2xldCBuPXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtzb2UobixyLGUpLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKG4ubG9jYXRpb24scil9Y3N0UG9zdE5vblRlcm1pbmFsKGUscil7bGV0IG49dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO29vZShuLHIsZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZShuLmxvY2F0aW9uLGUubG9jYXRpb24pfWdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKXtpZihkcih0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKXtsZXQgZT11b2UodGhpcy5jbGFzc05hbWUsR3IodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3JldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I9ZSxlfXJldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3J9Z2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cygpe2lmKGRyKHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcikpe2xldCBlPWhvZSh0aGlzLmNsYXNzTmFtZSxHcih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcj1lLGV9cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcn1nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTFdfWdldFByZXZpb3VzRXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTJdfWdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKXtsZXQgZT10aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSztyZXR1cm4gZVtlLmxlbmd0aC0xXX19fSk7dmFyIHdrLHBvZT1NKCgpPT57InVzZSBzdHJpY3QiO1VzKCk7d2s9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXJBZGFwdGVyIil9aW5pdExleGVyQWRhcHRlcigpe3RoaXMudG9rVmVjdG9yPVtdLHRoaXMudG9rVmVjdG9yTGVuZ3RoPTAsdGhpcy5jdXJySWR4PS0xfXNldCBpbnB1dChlKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUhPT0hMCl0aHJvdyBFcnJvcigiTWlzc2luZyA8cGVyZm9ybVNlbGZBbmFseXNpcz4gaW52b2NhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBQYXJzZXIncyBjb25zdHJ1Y3Rvci4iKTt0aGlzLnJlc2V0KCksdGhpcy50b2tWZWN0b3I9ZSx0aGlzLnRva1ZlY3Rvckxlbmd0aD1lLmxlbmd0aH1nZXQgaW5wdXQoKXtyZXR1cm4gdGhpcy50b2tWZWN0b3J9U0tJUF9UT0tFTigpe3JldHVybiB0aGlzLmN1cnJJZHg8PXRoaXMudG9rVmVjdG9yLmxlbmd0aC0yPyh0aGlzLmNvbnN1bWVUb2tlbigpLHRoaXMuTEEoMSkpOndnfUxBKGUpe2xldCByPXRoaXMuY3VycklkeCtlO3JldHVybiByPDB8fHRoaXMudG9rVmVjdG9yTGVuZ3RoPD1yP3dnOnRoaXMudG9rVmVjdG9yW3JdfWNvbnN1bWVUb2tlbigpe3RoaXMuY3VycklkeCsrfWV4cG9ydExleGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJySWR4fWltcG9ydExleGVyU3RhdGUoZSl7dGhpcy5jdXJySWR4PWV9cmVzZXRMZXhlclN0YXRlKCl7dGhpcy5jdXJySWR4PS0xfW1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpe3RoaXMuY3VycklkeD10aGlzLnRva1ZlY3Rvci5sZW5ndGgtMX1nZXRMZXhlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpfX19KTt2YXIgVGssbW9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtiZygpO1VzKCk7cGcoKTtfMigpO3VzKCk7VGs9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckFwaSIpfUFDVElPTihlKXtyZXR1cm4gZS5jYWxsKHRoaXMpfWNvbnN1bWUoZSxyLG4pe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChyLGUsbil9c3VicnVsZShlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHIsZSxuKX1vcHRpb24oZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChyLGUpfW9yKGUscil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChyLGUpfW1hbnkoZSxyKXtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWwoZSxyKX1hdExlYXN0T25lKGUscil7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKGUscil9Q09OU1VNRShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDAscil9Q09OU1VNRTEoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSwxLHIpfUNPTlNVTUUyKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMixyKX1DT05TVU1FMyhlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDMscil9Q09OU1VNRTQoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw0LHIpfUNPTlNVTUU1KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsNSxyKX1DT05TVU1FNihlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDYscil9Q09OU1VNRTcoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw3LHIpfUNPTlNVTUU4KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsOCxyKX1DT05TVU1FOShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDkscil9U1VCUlVMRShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDAscil9U1VCUlVMRTEoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSwxLHIpfVNVQlJVTEUyKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMixyKX1TVUJSVUxFMyhlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDMscil9U1VCUlVMRTQoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw0LHIpfVNVQlJVTEU1KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsNSxyKX1TVUJSVUxFNihlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDYscil9U1VCUlVMRTcoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw3LHIpfVNVQlJVTEU4KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsOCxyKX1TVUJSVUxFOShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDkscil9T1BUSU9OKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMCl9T1BUSU9OMShlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDEpfU9QVElPTjIoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwyKX1PUFRJT04zKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMyl9T1BUSU9ONChlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDQpfU9QVElPTjUoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw1KX1PUFRJT042KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNil9T1BUSU9ONyhlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDcpfU9QVElPTjgoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw4KX1PUFRJT045KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsOSl9T1IoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDApfU9SMShlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMSl9T1IyKGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSwyKX1PUjMoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDMpfU9SNChlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNCl9T1I1KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw1KX1PUjYoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDYpfU9SNyhlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNyl9T1I4KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw4KX1PUjkoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDkpfU1BTlkoZSl7dGhpcy5tYW55SW50ZXJuYWwoMCxlKX1NQU5ZMShlKXt0aGlzLm1hbnlJbnRlcm5hbCgxLGUpfU1BTlkyKGUpe3RoaXMubWFueUludGVybmFsKDIsZSl9TUFOWTMoZSl7dGhpcy5tYW55SW50ZXJuYWwoMyxlKX1NQU5ZNChlKXt0aGlzLm1hbnlJbnRlcm5hbCg0LGUpfU1BTlk1KGUpe3RoaXMubWFueUludGVybmFsKDUsZSl9TUFOWTYoZSl7dGhpcy5tYW55SW50ZXJuYWwoNixlKX1NQU5ZNyhlKXt0aGlzLm1hbnlJbnRlcm5hbCg3LGUpfU1BTlk4KGUpe3RoaXMubWFueUludGVybmFsKDgsZSl9TUFOWTkoZSl7dGhpcy5tYW55SW50ZXJuYWwoOSxlKX1NQU5ZX1NFUChlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsZSl9TUFOWV9TRVAxKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1NQU5ZX1NFUDIoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgyLGUpfU1BTllfU0VQMyhlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsZSl9TUFOWV9TRVA0KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1NQU5ZX1NFUDUoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg1LGUpfU1BTllfU0VQNihlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsZSl9TUFOWV9TRVA3KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1NQU5ZX1NFUDgoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg4LGUpfU1BTllfU0VQOShlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksZSl9QVRfTEVBU1RfT05FKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDAsZSl9QVRfTEVBU1RfT05FMShlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkUyKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FMyhlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORTQoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkU1KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FNihlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORTcoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkU4KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FOShlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg5LGUpfUFUX0xFQVNUX09ORV9TRVAoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgwLGUpfUFUX0xFQVNUX09ORV9TRVAxKGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkVfU0VQMihlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FX1NFUDMoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORV9TRVA0KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkVfU0VQNShlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FX1NFUDYoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORV9TRVA3KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkVfU0VQOChlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FX1NFUDkoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg5LGUpfVJVTEUoZSxyLG49VGcpe2lmKFluKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsZSkpe2xldCBzPXttZXNzYWdlOlVsLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOmUsZ3JhbW1hck5hbWU6dGhpcy5jbGFzc05hbWV9KSx0eXBlOlVpLkRVUExJQ0FURV9SVUxFX05BTUUscnVsZU5hbWU6ZX07dGhpcy5kZWZpbml0aW9uRXJyb3JzLnB1c2gocyl9dGhpcy5kZWZpbmVkUnVsZXNOYW1lcy5wdXNoKGUpO2xldCBpPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09aSxpfU9WRVJSSURFX1JVTEUoZSxyLG49VGcpe2xldCBpPXFzZShlLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsdGhpcy5jbGFzc05hbWUpO3RoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KGkpO2xldCBhPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09YSxhfUJBQ0tUUkFDSyhlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wdXNoKDEpO2xldCBuPXRoaXMuc2F2ZVJlY29nU3RhdGUoKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxyKSwhMH1jYXRjaChpKXtpZihmZihpKSlyZXR1cm4hMTt0aHJvdyBpfWZpbmFsbHl7dGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG4pLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wb3AoKX19fWdldEdBc3RQcm9kdWN0aW9ucygpe3JldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlfWdldFNlcmlhbGl6ZWRHYXN0UHJvZHVjdGlvbnMoKXtyZXR1cm4gWVQoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfX19KTt2YXIga2ssZ29lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtwaygpO2JnKCk7dmcoKTtTMigpO1VzKCk7RlIoKTtwMCgpO2YwKCk7a2s9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckVuZ2luZSIpfWluaXRSZWNvZ25pemVyRW5naW5lKGUscil7aWYodGhpcy5jbGFzc05hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbD17fSx0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnQ9e30sdGhpcy5ydWxlU2hvcnROYW1lSWR4PTI1Nix0aGlzLnRva2VuTWF0Y2hlcj1kZyx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmRlZmluZWRSdWxlc05hbWVzPVtdLHRoaXMudG9rZW5zTWFwPXt9LHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjaz1bXSx0aGlzLlJVTEVfU1RBQ0s9W10sdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s9W10sdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZT17fSxOdChyLCJzZXJpYWxpemVkR3JhbW1hciIpKXRocm93IEVycm9yKGBUaGUgUGFyc2VyJ3MgY29uZmlndXJhdGlvbiBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gYSA8c2VyaWFsaXplZEdyYW1tYXI+IHByb3BlcnR5LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNi0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCk7aWYoRHQoZSkpe2lmKGNyKGUpKXRocm93IEVycm9yKGBBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LgoJTm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBmb3IgdGhlIHBhcnNlciBjb25zdHJ1Y3RvcgoJaXMgbm8gbG9uZ2VyIGEgVG9rZW4gdmVjdG9yIChzaW5jZSB2NC4wKS5gKTtpZih0eXBlb2YgZVswXS5zdGFydE9mZnNldD09Im51bWJlciIpdGhyb3cgRXJyb3IoYFRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNC0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCl9aWYoRHQoZSkpdGhpcy50b2tlbnNNYXA9cXIoZSwoYSxzKT0+KGFbcy5uYW1lXT1zLGEpLHt9KTtlbHNlIGlmKE50KGUsIm1vZGVzIikmJnphKFdyKGJyKGUubW9kZXMpKSxFc2UpKXtsZXQgYT1XcihicihlLm1vZGVzKSkscz1YbShhKTt0aGlzLnRva2Vuc01hcD1xcihzLChsLHUpPT4obFt1Lm5hbWVdPXUsbCkse30pfWVsc2UgaWYoeG4oZSkpdGhpcy50b2tlbnNNYXA9cm4oZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIjx0b2tlbnNEaWN0aW9uYXJ5PiBhcmd1bWVudCBtdXN0IGJlIEFuIEFycmF5IG9mIFRva2VuIGNvbnN0cnVjdG9ycywgQSBkaWN0aW9uYXJ5IG9mIFRva2VuIGNvbnN0cnVjdG9ycyBvciBhbiBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uIik7dGhpcy50b2tlbnNNYXAuRU9GPW1vO2xldCBuPU50KGUsIm1vZGVzIik/V3IoYnIoZS5tb2RlcykpOmJyKGUpLGk9emEobixhPT5jcihhLmNhdGVnb3J5TWF0Y2hlcykpO3RoaXMudG9rZW5NYXRjaGVyPWk/ZGc6V3UsWXUoYnIodGhpcy50b2tlbnNNYXApKX1kZWZpbmVSdWxlKGUscixuKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUpdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtlfT4gbWF5IG5vdCBiZSBkZWZpbmVkIGFmdGVyIHRoZSAncGVyZm9ybVNlbGZBbmFseXNpcycgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCcKTWFrZSBzdXJlIHRoYXQgYWxsIGdyYW1tYXIgcnVsZSBkZWZpbml0aW9ucyBhcmUgZG9uZSBiZWZvcmUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIGlzIGNhbGxlZC5gKTtsZXQgaT1OdChuLCJyZXN5bmNFbmFibGVkIik/bi5yZXN5bmNFbmFibGVkOlRnLnJlc3luY0VuYWJsZWQsYT1OdChuLCJyZWNvdmVyeVZhbHVlRnVuYyIpP24ucmVjb3ZlcnlWYWx1ZUZ1bmM6VGcucmVjb3ZlcnlWYWx1ZUZ1bmMscz10aGlzLnJ1bGVTaG9ydE5hbWVJZHg8PDEyO3RoaXMucnVsZVNob3J0TmFtZUlkeCsrLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzXT1lLHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlXT1zO2xldCBsO3JldHVybiB0aGlzLm91dHB1dENzdD09PSEwP2w9byhmdW5jdGlvbiguLi5mKXt0cnl7dGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHMsZSx0aGlzLnN1YnJ1bGVJZHgpLHIuYXBwbHkodGhpcyxmKTtsZXQgZD10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY3N0UG9zdFJ1bGUoZCksZH1jYXRjaChkKXtyZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZCxpLGEpfWZpbmFsbHl7dGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCl9fSwiaW52b2tlUnVsZVdpdGhUcnkiKTpsPW8oZnVuY3Rpb24oLi4uZil7dHJ5e3JldHVybiB0aGlzLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGUocyxlLHRoaXMuc3VicnVsZUlkeCksci5hcHBseSh0aGlzLGYpfWNhdGNoKGQpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChkLGksYSl9ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19LCJpbnZva2VSdWxlV2l0aFRyeUNzdCIpLE9iamVjdC5hc3NpZ24obCx7cnVsZU5hbWU6ZSxvcmlnaW5hbEdyYW1tYXJBY3Rpb246cn0pfWludm9rZVJ1bGVDYXRjaChlLHIsbil7bGV0IGk9dGhpcy5SVUxFX1NUQUNLLmxlbmd0aD09PTEsYT1yJiYhdGhpcy5pc0JhY2tUcmFja2luZygpJiZ0aGlzLnJlY292ZXJ5RW5hYmxlZDtpZihmZihlKSl7bGV0IHM9ZTtpZihhKXtsZXQgbD10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtpZih0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChsKSlpZihzLnJlc3luY2VkVG9rZW5zPXRoaXMucmVTeW5jVG8obCksdGhpcy5vdXRwdXRDc3Qpe2xldCB1PXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtyZXR1cm4gdS5yZWNvdmVyZWROb2RlPSEwLHV9ZWxzZSByZXR1cm4gbihlKTtlbHNle2lmKHRoaXMub3V0cHV0Q3N0KXtsZXQgdT10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07dS5yZWNvdmVyZWROb2RlPSEwLHMucGFydGlhbENzdFJlc3VsdD11fXRocm93IHN9fWVsc2V7aWYoaSlyZXR1cm4gdGhpcy5tb3ZlVG9UZXJtaW5hdGVkU3RhdGUoKSxuKGUpO3Rocm93IHN9fWVsc2UgdGhyb3cgZX1vcHRpb25JbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUxMixyKTtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKX1vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT10aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKSxhO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXthPWUuREVGO2xldCBzPWUuR0FURTtpZihzIT09dm9pZCAwKXtsZXQgbD1pO2k9bygoKT0+cy5jYWxsKHRoaXMpJiZsLmNhbGwodGhpcyksImxvb2tBaGVhZEZ1bmMiKX19ZWxzZSBhPWU7aWYoaS5jYWxsKHRoaXMpPT09ITApcmV0dXJuIGEuY2FsbCh0aGlzKX1hdExlYXN0T25lSW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMDI0LGUpO3JldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbExvZ2ljKGUscixuKX1hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobiksYTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil7YT1yLkRFRjtsZXQgcz1yLkdBVEU7aWYocyE9PXZvaWQgMCl7bGV0IGw9aTtpPW8oKCk9PnMuY2FsbCh0aGlzKSYmbC5jYWxsKHRoaXMpLCJsb29rQWhlYWRGdW5jIil9fWVsc2UgYT1yO2lmKGkuY2FsbCh0aGlzKT09PSEwKXtsZXQgcz10aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhKTtmb3IoO2kuY2FsbCh0aGlzKT09PSEwJiZzPT09ITA7KXM9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oYSl9ZWxzZSB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUlksci5FUlJfTVNHKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCxbZSxyXSxpLDEwMjQsZSxhayl9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxNTM2LGUpO3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksRTJdLGwsMTUzNixlLEUyKX1lbHNlIHRocm93IHRoaXMucmFpc2VFYXJseUV4aXRFeGNlcHRpb24oZSxYbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUixyLkVSUl9NU0cpfW1hbnlJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDc2OCxlKTtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueUludGVybmFsTG9naWMoZSxyLG4pe2xldCBpPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLGE7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpe2E9ci5ERUY7bGV0IGw9ci5HQVRFO2lmKGwhPT12b2lkIDApe2xldCB1PWk7aT1vKCgpPT5sLmNhbGwodGhpcykmJnUuY2FsbCh0aGlzKSwibG9va2FoZWFkRnVuY3Rpb24iKX19ZWxzZSBhPXI7bGV0IHM9ITA7Zm9yKDtpLmNhbGwodGhpcyk9PT0hMCYmcz09PSEwOylzPXRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGEpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLFtlLHJdLGksNzY4LGUsaWsscyl9bWFueVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMjgwLGUpO3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksazJdLGwsMTI4MCxlLGsyKX19cmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsKGUscixuLGksYSl7Zm9yKDtuKCk7KXRoaXMuQ09OU1VNRShyKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UscixuLGksYV0sbiwxNTM2LGUsYSl9ZG9TaW5nbGVSZXBldGl0aW9uKGUpe2xldCByPXRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO3JldHVybiBlLmNhbGwodGhpcyksdGhpcy5nZXRMZXhlclBvc2l0aW9uKCk+cn1vckludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoMjU2LHIpLGk9RHQoZSk/ZTplLkRFRixzPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyxpKTtpZihzIT09dm9pZCAwKXJldHVybiBpW3NdLkFMVC5jYWxsKHRoaXMpO3RoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihyLGUuRVJSX01TRyl9cnVsZUZpbmFsbHlTdGF0ZVVwZGF0ZSgpe2lmKHRoaXMuUlVMRV9TVEFDSy5wb3AoKSx0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wb3AoKSx0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpLHRoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0wJiZ0aGlzLmlzQXRFbmRPZklucHV0KCk9PT0hMSl7bGV0IGU9dGhpcy5MQSgxKSxyPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmUscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KTt0aGlzLlNBVkVfRVJST1IobmV3IEQyKHIsZSkpfX1zdWJydWxlSW50ZXJuYWwoZSxyLG4pe2xldCBpO3RyeXtsZXQgYT1uIT09dm9pZCAwP24uQVJHUzp2b2lkIDA7cmV0dXJuIHRoaXMuc3VicnVsZUlkeD1yLGk9ZS5hcHBseSh0aGlzLGEpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsKGksbiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUucnVsZU5hbWUpLGl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5zdWJydWxlSW50ZXJuYWxFcnJvcihhLG4sZS5ydWxlTmFtZSl9fXN1YnJ1bGVJbnRlcm5hbEVycm9yKGUscixuKXt0aHJvdyBmZihlKSYmZS5wYXJ0aWFsQ3N0UmVzdWx0IT09dm9pZCAwJiYodGhpcy5jc3RQb3N0Tm9uVGVybWluYWwoZS5wYXJ0aWFsQ3N0UmVzdWx0LHIhPT12b2lkIDAmJnIuTEFCRUwhPT12b2lkIDA/ci5MQUJFTDpuKSxkZWxldGUgZS5wYXJ0aWFsQ3N0UmVzdWx0KSxlfWNvbnN1bWVJbnRlcm5hbChlLHIsbil7bGV0IGk7dHJ5e2xldCBhPXRoaXMuTEEoMSk7dGhpcy50b2tlbk1hdGNoZXIoYSxlKT09PSEwPyh0aGlzLmNvbnN1bWVUb2tlbigpLGk9YSk6dGhpcy5jb25zdW1lSW50ZXJuYWxFcnJvcihlLGEsbil9Y2F0Y2goYSl7aT10aGlzLmNvbnN1bWVJbnRlcm5hbFJlY292ZXJ5KGUscixhKX1yZXR1cm4gdGhpcy5jc3RQb3N0VGVybWluYWwobiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUubmFtZSxpKSxpfWNvbnN1bWVJbnRlcm5hbEVycm9yKGUscixuKXtsZXQgaSxhPXRoaXMuTEEoMCk7dGhyb3cgbiE9PXZvaWQgMCYmbi5FUlJfTVNHP2k9bi5FUlJfTVNHOmk9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDplLGFjdHVhbDpyLHByZXZpb3VzOmEscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSx0aGlzLlNBVkVfRVJST1IobmV3IG0wKGkscixhKSl9Y29uc3VtZUludGVybmFsUmVjb3ZlcnkoZSxyLG4pe2lmKHRoaXMucmVjb3ZlcnlFbmFibGVkJiZuLm5hbWU9PT0iTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIiYmIXRoaXMuaXNCYWNrVHJhY2tpbmcoKSl7bGV0IGk9dGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKTt0cnl7cmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkoZSxpKX1jYXRjaChhKXt0aHJvdyBhLm5hbWU9PT1CUj9uOmF9fWVsc2UgdGhyb3cgbn1zYXZlUmVjb2dTdGF0ZSgpe2xldCBlPXRoaXMuZXJyb3JzLHI9cm4odGhpcy5SVUxFX1NUQUNLKTtyZXR1cm57ZXJyb3JzOmUsbGV4ZXJTdGF0ZTp0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxSVUxFX1NUQUNLOnIsQ1NUX1NUQUNLOnRoaXMuQ1NUX1NUQUNLfX1yZWxvYWRSZWNvZ1N0YXRlKGUpe3RoaXMuZXJyb3JzPWUuZXJyb3JzLHRoaXMuaW1wb3J0TGV4ZXJTdGF0ZShlLmxleGVyU3RhdGUpLHRoaXMuUlVMRV9TVEFDSz1lLlJVTEVfU1RBQ0t9cnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShlLHIsbil7dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChuKSx0aGlzLlJVTEVfU1RBQ0sucHVzaChlKSx0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShyKX1pc0JhY2tUcmFja2luZygpe3JldHVybiB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2subGVuZ3RoIT09MH1nZXRDdXJyUnVsZUZ1bGxOYW1lKCl7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtlXX1zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKXtyZXR1cm4gdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW2VdfWlzQXRFbmRPZklucHV0KCl7cmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksbW8pfXJlc2V0KCl7dGhpcy5yZXNldExleGVyU3RhdGUoKSx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuQ1NUX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdfX19KTt2YXIgRWsseW9lPU0oKCk9PnsidXNlIHN0cmljdCI7YmcoKTtIdCgpO3ZnKCk7VXMoKTtFaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJFcnJvckhhbmRsZXIiKX1pbml0RXJyb3JIYW5kbGVyKGUpe3RoaXMuX2Vycm9ycz1bXSx0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPU50KGUsImVycm9yTWVzc2FnZVByb3ZpZGVyIik/ZS5lcnJvck1lc3NhZ2VQcm92aWRlcjpocy5lcnJvck1lc3NhZ2VQcm92aWRlcn1TQVZFX0VSUk9SKGUpe2lmKGZmKGUpKXJldHVybiBlLmNvbnRleHQ9e3J1bGVTdGFjazp0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxydWxlT2NjdXJyZW5jZVN0YWNrOnJuKHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLKX0sdGhpcy5fZXJyb3JzLnB1c2goZSksZTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIHNhdmUgYW4gRXJyb3Igd2hpY2ggaXMgbm90IGEgUmVjb2duaXRpb25FeGNlcHRpb24iKX1nZXQgZXJyb3JzKCl7cmV0dXJuIHJuKHRoaXMuX2Vycm9ycyl9c2V0IGVycm9ycyhlKXt0aGlzLl9lcnJvcnM9ZX1yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihlLHIsbil7bGV0IGk9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksYT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2ldLGw9eWcoZSxhLHIsdGhpcy5tYXhMb29rYWhlYWQpWzBdLHU9W107Zm9yKGxldCBmPTE7Zjw9dGhpcy5tYXhMb29rYWhlYWQ7ZisrKXUucHVzaCh0aGlzLkxBKGYpKTtsZXQgaD10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7ZXhwZWN0ZWRJdGVyYXRpb25QYXRoczpsLGFjdHVhbDp1LHByZXZpb3VzOnRoaXMuTEEoMCksY3VzdG9tVXNlckRlc2NyaXB0aW9uOm4scnVsZU5hbWU6aX0pO3Rocm93IHRoaXMuU0FWRV9FUlJPUihuZXcgTjIoaCx0aGlzLkxBKDEpLHRoaXMuTEEoMCkpKX1yYWlzZU5vQWx0RXhjZXB0aW9uKGUscil7bGV0IG49dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW25dLGE9Z2coZSxpLHRoaXMubWF4TG9va2FoZWFkKSxzPVtdO2ZvcihsZXQgaD0xO2g8PXRoaXMubWF4TG9va2FoZWFkO2grKylzLnB1c2godGhpcy5MQShoKSk7bGV0IGw9dGhpcy5MQSgwKSx1PXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe2V4cGVjdGVkUGF0aHNQZXJBbHQ6YSxhY3R1YWw6cyxwcmV2aW91czpsLGN1c3RvbVVzZXJEZXNjcmlwdGlvbjpyLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBMMih1LHRoaXMuTEEoMSksbCkpfX19KTt2YXIgU2ssdm9lPU0oKCk9PnsidXNlIHN0cmljdCI7UzIoKTtIdCgpO1NrPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNvbnRlbnRBc3Npc3QiKX1pbml0Q29udGVudEFzc2lzdCgpe31jb21wdXRlQ29udGVudEFzc2lzdChlLHIpe2xldCBuPXRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbZV07aWYoZHIobikpdGhyb3cgRXJyb3IoYFJ1bGUgLT4ke2V9PC0gZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBncmFtbWFyLmApO3JldHVybiBvayhbbl0scix0aGlzLnRva2VuTWF0Y2hlcix0aGlzLm1heExvb2thaGVhZCl9Z2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhlKXtsZXQgcj1zYShlLnJ1bGVTdGFjayksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3JdO3JldHVybiBuZXcgbmsoaSxlKS5zdGFydFdhbGtpbmcoKX19fSk7ZnVuY3Rpb24gTTIodCxlLHIsbj0hMSl7QWsocik7bGV0IGk9eGEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9X2koZSk/ZTplLkRFRixzPW5ldyB0KHtkZWZpbml0aW9uOltdLGlkeDpyfSk7cmV0dXJuIG4mJihzLnNlcGFyYXRvcj1lLlNFUCksTnQoZSwiTUFYX0xPT0tBSEVBRCIpJiYocy5tYXhMb29rYWhlYWQ9ZS5NQVhfTE9PS0FIRUFEKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHMpLGEuY2FsbCh0aGlzKSxpLmRlZmluaXRpb24ucHVzaChzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxfa31mdW5jdGlvbiBzRmUodCxlKXtBayhlKTtsZXQgcj14YSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksbj1EdCh0KT09PSExLGk9bj09PSExP3Q6dC5ERUYsYT1uZXcgd24oe2RlZmluaXRpb246W10saWR4OmUsaWdub3JlQW1iaWd1aXRpZXM6biYmdC5JR05PUkVfQU1CSUdVSVRJRVM9PT0hMH0pO050KHQsIk1BWF9MT09LQUhFQUQiKSYmKGEubWF4TG9va2FoZWFkPXQuTUFYX0xPT0tBSEVBRCk7bGV0IHM9cXYoaSxsPT5faShsLkdBVEUpKTtyZXR1cm4gYS5oYXNQcmVkaWNhdGVzPXMsci5kZWZpbml0aW9uLnB1c2goYSksU2UoaSxsPT57bGV0IHU9bmV3IF9uKHtkZWZpbml0aW9uOltdfSk7YS5kZWZpbml0aW9uLnB1c2godSksTnQobCwiSUdOT1JFX0FNQklHVUlUSUVTIik/dS5pZ25vcmVBbWJpZ3VpdGllcz1sLklHTk9SRV9BTUJJR1VJVElFUzpOdChsLCJHQVRFIikmJih1Lmlnbm9yZUFtYmlndWl0aWVzPSEwKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHUpLGwuQUxULmNhbGwodGhpcyksdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCl9KSxfa31mdW5jdGlvbiB3b2UodCl7cmV0dXJuIHQ9PT0wPyIiOmAke3R9YH1mdW5jdGlvbiBBayh0KXtpZih0PDB8fHQ+Ym9lKXtsZXQgZT1uZXcgRXJyb3IoYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke3R9PgoJSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke2JvZSsxfWApO3Rocm93IGUuS05PV05fUkVDT1JERVJfRVJST1I9ITAsZX19dmFyIF9rLHhvZSxib2UsVG9lLGtvZSxhRmUsQ2ssRW9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTt1cygpO2IyKCk7ZjAoKTtwMCgpO1VzKCk7cGsoKTtfaz17ZGVzY3JpcHRpb246IlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2UifTtPYmplY3QuZnJlZXplKF9rKTt4b2U9ITAsYm9lPU1hdGgucG93KDIsOCktMSxUb2U9cmsoe25hbWU6IlJFQ09SRElOR19QSEFTRV9UT0tFTiIscGF0dGVybjpjaS5OQX0pO1l1KFtUb2VdKTtrb2U9ZDAoVG9lLGBUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2UKCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmcgZm9yIGRldGFpbHNgLC0xLC0xLC0xLC0xLC0xLC0xKTtPYmplY3QuZnJlZXplKGtvZSk7YUZlPXtuYW1lOmBUaGlzIENTVE5vZGUgaW5kaWNhdGVzIHRoZSBQYXJzZXIgaXMgaW4gUmVjb3JkaW5nIFBoYXNlCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzYCxjaGlsZHJlbjp7fX0sQ2s9Y2xhc3N7c3RhdGlje28odGhpcywiR2FzdFJlY29yZGVyIil9aW5pdEdhc3RSZWNvcmRlcihlKXt0aGlzLnJlY29yZGluZ1Byb2RTdGFjaz1bXSx0aGlzLlJFQ09SRElOR19QSEFTRT0hMX1lbmFibGVSZWNvcmRpbmcoKXt0aGlzLlJFQ09SRElOR19QSEFTRT0hMCx0aGlzLlRSQUNFX0lOSVQoIkVuYWJsZSBSZWNvcmRpbmciLCgpPT57Zm9yKGxldCBlPTA7ZTwxMDtlKyspe2xldCByPWU+MD9lOiIiO3RoaXNbYENPTlNVTUUke3J9YF09ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQobixlLGkpfSx0aGlzW2BTVUJSVUxFJHtyfWBdPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKG4sZSxpKX0sdGhpc1tgT1BUSU9OJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVjb3JkKG4sZSl9LHRoaXNbYE9SJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQobixlKX0sdGhpc1tgTUFOWSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BNQU5ZX1NFUCR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYEFUX0xFQVNUX09ORSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BBVF9MRUFTVF9PTkVfU0VQJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxuKX19dGhpcy5jb25zdW1lPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQocixlLG4pfSx0aGlzLnN1YnJ1bGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChyLGUsbil9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5vcj1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5tYW55PWZ1bmN0aW9uKGUscil7dGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5hdExlYXN0T25lPWZ1bmN0aW9uKGUscil7dGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5BQ1RJT049dGhpcy5BQ1RJT05fUkVDT1JELHRoaXMuQkFDS1RSQUNLPXRoaXMuQkFDS1RSQUNLX1JFQ09SRCx0aGlzLkxBPXRoaXMuTEFfUkVDT1JEfSl9ZGlzYWJsZVJlY29yZGluZygpe3RoaXMuUkVDT1JESU5HX1BIQVNFPSExLHRoaXMuVFJBQ0VfSU5JVCgiRGVsZXRpbmcgUmVjb3JkaW5nIG1ldGhvZHMiLCgpPT57bGV0IGU9dGhpcztmb3IobGV0IHI9MDtyPDEwO3IrKyl7bGV0IG49cj4wP3I6IiI7ZGVsZXRlIGVbYENPTlNVTUUke259YF0sZGVsZXRlIGVbYFNVQlJVTEUke259YF0sZGVsZXRlIGVbYE9QVElPTiR7bn1gXSxkZWxldGUgZVtgT1Ike259YF0sZGVsZXRlIGVbYE1BTlkke259YF0sZGVsZXRlIGVbYE1BTllfU0VQJHtufWBdLGRlbGV0ZSBlW2BBVF9MRUFTVF9PTkUke259YF0sZGVsZXRlIGVbYEFUX0xFQVNUX09ORV9TRVAke259YF19ZGVsZXRlIGUuY29uc3VtZSxkZWxldGUgZS5zdWJydWxlLGRlbGV0ZSBlLm9wdGlvbixkZWxldGUgZS5vcixkZWxldGUgZS5tYW55LGRlbGV0ZSBlLmF0TGVhc3RPbmUsZGVsZXRlIGUuQUNUSU9OLGRlbGV0ZSBlLkJBQ0tUUkFDSyxkZWxldGUgZS5MQX0pfUFDVElPTl9SRUNPUkQoZSl7fUJBQ0tUUkFDS19SRUNPUkQoZSxyKXtyZXR1cm4oKT0+ITB9TEFfUkVDT1JEKGUpe3JldHVybiB3Z310b3BMZXZlbFJ1bGVSZWNvcmQoZSxyKXt0cnl7bGV0IG49bmV3IGxzKHtkZWZpbml0aW9uOltdLG5hbWU6ZX0pO3JldHVybiBuLm5hbWU9ZSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG4pLHIuY2FsbCh0aGlzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxufWNhdGNoKG4pe2lmKG4uS05PV05fUkVDT1JERVJfRVJST1IhPT0hMCl0cnl7bi5tZXNzYWdlPW4ubWVzc2FnZStgCgkgVGhpcyBlcnJvciB3YXMgdGhyb3duIGR1cmluZyB0aGUgImdyYW1tYXIgcmVjb3JkaW5nIHBoYXNlIiBGb3IgbW9yZSBpbmZvIHNlZToKCWh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nYH1jYXRjaHt0aHJvdyBufXRocm93IG59fW9wdGlvbkludGVybmFsUmVjb3JkKGUscil7cmV0dXJuIE0yLmNhbGwodGhpcyxhbixlLHIpfWF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLHIpe00yLmNhbGwodGhpcyxMbixyLGUpfWF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7TTIuY2FsbCh0aGlzLERuLHIsZSx4b2UpfW1hbnlJbnRlcm5hbFJlY29yZChlLHIpe00yLmNhbGwodGhpcyxEcixyLGUpfW1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7TTIuY2FsbCh0aGlzLGJuLHIsZSx4b2UpfW9ySW50ZXJuYWxSZWNvcmQoZSxyKXtyZXR1cm4gc0ZlLmNhbGwodGhpcyxlLHIpfXN1YnJ1bGVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoQWsociksIWV8fE50KGUsInJ1bGVOYW1lIik9PT0hMSl7bGV0IGw9bmV3IEVycm9yKGA8U1VCUlVMRSR7d29lKHIpfT4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBlY3RpbmcgYSBQYXJzZXIgbWV0aG9kIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeShlKX0+CiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO3Rocm93IGwuS05PV05fUkVDT1JERVJfRVJST1I9ITAsbH1sZXQgaT14YSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1lLnJ1bGVOYW1lLHM9bmV3IG5uKHtpZHg6cixub25UZXJtaW5hbE5hbWU6YSxsYWJlbDpuPy5MQUJFTCxyZWZlcmVuY2VkUnVsZTp2b2lkIDB9KTtyZXR1cm4gaS5kZWZpbml0aW9uLnB1c2gocyksdGhpcy5vdXRwdXRDc3Q/YUZlOl9rfWNvbnN1bWVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoQWsociksIUVSKGUpKXtsZXQgcz1uZXcgRXJyb3IoYDxDT05TVU1FJHt3b2Uocil9PiBhcmd1bWVudCBpcyBpbnZhbGlkIGV4cGVjdGluZyBhIFRva2VuVHlwZSByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkoZSl9PgogaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTt0aHJvdyBzLktOT1dOX1JFQ09SREVSX0VSUk9SPSEwLHN9bGV0IGk9eGEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9bmV3IEVyKHtpZHg6cix0ZXJtaW5hbFR5cGU6ZSxsYWJlbDpuPy5MQUJFTH0pO3JldHVybiBpLmRlZmluaXRpb24ucHVzaChhKSxrb2V9fTtvKE0yLCJyZWNvcmRQcm9kIik7byhzRmUsInJlY29yZE9yUHJvZCIpO28od29lLCJnZXRJZHhTdWZmaXgiKTtvKEFrLCJhc3NlcnRNZXRob2RJZHhJc1ZhbGlkIil9KTt2YXIgTGssU29lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtsZygpO1VzKCk7TGs9Y2xhc3N7c3RhdGlje28odGhpcywiUGVyZm9ybWFuY2VUcmFjZXIiKX1pbml0UGVyZm9ybWFuY2VUcmFjZXIoZSl7aWYoTnQoZSwidHJhY2VJbml0UGVyZiIpKXtsZXQgcj1lLnRyYWNlSW5pdFBlcmYsbj10eXBlb2Ygcj09Im51bWJlciI7dGhpcy50cmFjZUluaXRNYXhJZGVudD1uP3I6MS8wLHRoaXMudHJhY2VJbml0UGVyZj1uP3I+MDpyfWVsc2UgdGhpcy50cmFjZUluaXRNYXhJZGVudD0wLHRoaXMudHJhY2VJbml0UGVyZj1ocy50cmFjZUluaXRQZXJmO3RoaXMudHJhY2VJbml0SW5kZW50PS0xfVRSQUNFX0lOSVQoZSxyKXtpZih0aGlzLnRyYWNlSW5pdFBlcmY9PT0hMCl7dGhpcy50cmFjZUluaXRJbmRlbnQrKztsZXQgbj1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9pbigiCSIpO3RoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmNvbnNvbGUubG9nKGAke259LS0+IDwke2V9PmApO2xldHt0aW1lOmksdmFsdWU6YX09eTIocikscz1pPjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4gdGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmcyhgJHtufTwtLSA8JHtlfT4gdGltZTogJHtpfW1zYCksdGhpcy50cmFjZUluaXRJbmRlbnQtLSxhfWVsc2UgcmV0dXJuIHIoKX19fSk7ZnVuY3Rpb24gQ29lKHQsZSl7ZS5mb3JFYWNoKHI9PntsZXQgbj1yLnByb3RvdHlwZTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGk9PntpZihpPT09ImNvbnN0cnVjdG9yIilyZXR1cm47bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxpLGEpOnQucHJvdG90eXBlW2ldPXIucHJvdG90eXBlW2ldfSl9KX12YXIgQW9lPU0oKCk9PnsidXNlIHN0cmljdCI7byhDb2UsImFwcGx5TWl4aW5zIil9KTtmdW5jdGlvbiBEayh0PXZvaWQgMCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciB3ZyxocyxUZyxVaSxJMixPMixVcz1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7bGcoKTtuc2UoKTtwMCgpO3BnKCk7SnNlKCk7RlIoKTthb2UoKTtkb2UoKTtwb2UoKTttb2UoKTtnb2UoKTt5b2UoKTt2b2UoKTtFb2UoKTtTb2UoKTtBb2UoKTtfMigpO3dnPWQwKG1vLCIiLE5hTixOYU4sTmFOLE5hTixOYU4sTmFOKTtPYmplY3QuZnJlZXplKHdnKTtocz1PYmplY3QuZnJlZXplKHtyZWNvdmVyeUVuYWJsZWQ6ITEsbWF4TG9va2FoZWFkOjMsZHluYW1pY1Rva2Vuc0VuYWJsZWQ6ITEsb3V0cHV0Q3N0OiEwLGVycm9yTWVzc2FnZVByb3ZpZGVyOlh1LG5vZGVMb2NhdGlvblRyYWNraW5nOiJub25lIix0cmFjZUluaXRQZXJmOiExLHNraXBWYWxpZGF0aW9uczohMX0pLFRnPU9iamVjdC5mcmVlemUoe3JlY292ZXJ5VmFsdWVGdW5jOm8oKCk9Pnt9LCJyZWNvdmVyeVZhbHVlRnVuYyIpLHJlc3luY0VuYWJsZWQ6ITB9KTsoZnVuY3Rpb24odCl7dFt0LklOVkFMSURfUlVMRV9OQU1FPTBdPSJJTlZBTElEX1JVTEVfTkFNRSIsdFt0LkRVUExJQ0FURV9SVUxFX05BTUU9MV09IkRVUExJQ0FURV9SVUxFX05BTUUiLHRbdC5JTlZBTElEX1JVTEVfT1ZFUlJJREU9Ml09IklOVkFMSURfUlVMRV9PVkVSUklERSIsdFt0LkRVUExJQ0FURV9QUk9EVUNUSU9OUz0zXT0iRFVQTElDQVRFX1BST0RVQ1RJT05TIix0W3QuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRj00XT0iVU5SRVNPTFZFRF9TVUJSVUxFX1JFRiIsdFt0LkxFRlRfUkVDVVJTSU9OPTVdPSJMRUZUX1JFQ1VSU0lPTiIsdFt0Lk5PTkVfTEFTVF9FTVBUWV9BTFQ9Nl09Ik5PTkVfTEFTVF9FTVBUWV9BTFQiLHRbdC5BTUJJR1VPVVNfQUxUUz03XT0iQU1CSUdVT1VTX0FMVFMiLHRbdC5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFPThdPSJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFIix0W3QuSU5WQUxJRF9UT0tFTl9OQU1FPTldPSJJTlZBTElEX1RPS0VOX05BTUUiLHRbdC5OT19OT05fRU1QVFlfTE9PS0FIRUFEPTEwXT0iTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCIsdFt0LkFNQklHVU9VU19QUkVGSVhfQUxUUz0xMV09IkFNQklHVU9VU19QUkVGSVhfQUxUUyIsdFt0LlRPT19NQU5ZX0FMVFM9MTJdPSJUT09fTUFOWV9BTFRTIix0W3QuQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OPTEzXT0iQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OIn0pKFVpfHwoVWk9e30pKTtvKERrLCJFTVBUWV9BTFQiKTtJMj1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlBhcnNlciIpfXN0YXRpYyBwZXJmb3JtU2VsZkFuYWx5c2lzKGUpe3Rocm93IEVycm9yKCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCVxuVXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkLiIpfXBlcmZvcm1TZWxmQW5hbHlzaXMoKXt0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1TZWxmQW5hbHlzaXMiLCgpPT57bGV0IGU7dGhpcy5zZWxmQW5hbHlzaXNEb25lPSEwO2xldCByPXRoaXMuY2xhc3NOYW1lO3RoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcHMiLCgpPT57djIodGhpcyl9KSx0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVjb3JkaW5nIiwoKT0+e3RyeXt0aGlzLmVuYWJsZVJlY29yZGluZygpLFNlKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsaT0+e2xldCBzPXRoaXNbaV0ub3JpZ2luYWxHcmFtbWFyQWN0aW9uLGw7dGhpcy5UUkFDRV9JTklUKGAke2l9IFJ1bGVgLCgpPT57bD10aGlzLnRvcExldmVsUnVsZVJlY29yZChpLHMpfSksdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtpXT1sfSl9ZmluYWxseXt0aGlzLmRpc2FibGVSZWNvcmRpbmcoKX19KTtsZXQgbj1bXTtpZih0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVzb2x2aW5nIiwoKT0+e249UXNlKHtydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLHRoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KG4pfSksdGhpcy5UUkFDRV9JTklUKCJHcmFtbWFyIFZhbGlkYXRpb25zIiwoKT0+e2lmKGNyKG4pJiZ0aGlzLnNraXBWYWxpZGF0aW9ucz09PSExKXtsZXQgaT1ac2Uoe3J1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRva2VuVHlwZXM6YnIodGhpcy50b2tlbnNNYXApLGVyck1zZ1Byb3ZpZGVyOlVsLGdyYW1tYXJOYW1lOnJ9KSxhPUhzZSh7bG9va2FoZWFkU3RyYXRlZ3k6dGhpcy5sb29rYWhlYWRTdHJhdGVneSxydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0b2tlblR5cGVzOmJyKHRoaXMudG9rZW5zTWFwKSxncmFtbWFyTmFtZTpyfSk7dGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQoaSxhKX19KSxjcih0aGlzLmRlZmluaXRpb25FcnJvcnMpJiYodGhpcy5yZWNvdmVyeUVuYWJsZWQmJnRoaXMuVFJBQ0VfSU5JVCgiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIsKCk9PntsZXQgaT1yc2UoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3RoaXMucmVzeW5jRm9sbG93cz1pfSksdGhpcy5UUkFDRV9JTklUKCJDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zIiwoKT0+e3ZhciBpLGE7KGE9KGk9dGhpcy5sb29rYWhlYWRTdHJhdGVneSkuaW5pdGlhbGl6ZSk9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwoaSx7cnVsZXM6YnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSl9KSx0aGlzLnByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfSkpLCF0LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HJiYhY3IodGhpcy5kZWZpbml0aW9uRXJyb3JzKSl0aHJvdyBlPVFlKHRoaXMuZGVmaW5pdGlvbkVycm9ycyxpPT5pLm1lc3NhZ2UpLG5ldyBFcnJvcihgUGFyc2VyIERlZmluaXRpb24gRXJyb3JzIGRldGVjdGVkOgogJHtlLmpvaW4oYAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApfWApfSl9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5zZWxmQW5hbHlzaXNEb25lPSExO2xldCBuPXRoaXM7aWYobi5pbml0RXJyb3JIYW5kbGVyKHIpLG4uaW5pdExleGVyQWRhcHRlcigpLG4uaW5pdExvb2tzQWhlYWQociksbi5pbml0UmVjb2duaXplckVuZ2luZShlLHIpLG4uaW5pdFJlY292ZXJhYmxlKHIpLG4uaW5pdFRyZWVCdWlsZGVyKHIpLG4uaW5pdENvbnRlbnRBc3Npc3QoKSxuLmluaXRHYXN0UmVjb3JkZXIociksbi5pbml0UGVyZm9ybWFuY2VUcmFjZXIociksTnQociwiaWdub3JlZElzc3VlcyIpKXRocm93IG5ldyBFcnJvcihgVGhlIDxpZ25vcmVkSXNzdWVzPiBJUGFyc2VyQ29uZmlnIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuCglQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0lHTk9SSU5HX0FNQklHVUlUSUVTCglGb3IgZnVydGhlciBkZXRhaWxzLmApO3RoaXMuc2tpcFZhbGlkYXRpb25zPU50KHIsInNraXBWYWxpZGF0aW9ucyIpP3Iuc2tpcFZhbGlkYXRpb25zOmhzLnNraXBWYWxpZGF0aW9uc319O0kyLkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HPSExO0NvZShJMixbZmssZ2ssYmssd2ssa2ssVGssRWssU2ssQ2ssTGtdKTtPMj1jbGFzcyBleHRlbmRzIEkye3N0YXRpY3tvKHRoaXMsIkVtYmVkZGVkQWN0aW9uc1BhcnNlciIpfWNvbnN0cnVjdG9yKGUscj1ocyl7bGV0IG49cm4ocik7bi5vdXRwdXRDc3Q9ITEsc3VwZXIoZSxuKX19fSk7dmFyIF9vZT1NKCgpPT57InVzZSBzdHJpY3QiO3VzKCl9KTt2YXIgTG9lPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgRG9lPU0oKCk9PnsidXNlIHN0cmljdCI7X29lKCk7TG9lKCl9KTt2YXIgTm9lPU0oKCk9PnsidXNlIHN0cmljdCI7ZlIoKX0pO3ZhciBnMD1NKCgpPT57InVzZSBzdHJpY3QiO2ZSKCk7VXMoKTtiMigpO3AwKCk7dmcoKTt6UigpO3BnKCk7YmcoKTtDUigpO3VzKCk7dXMoKTtEb2UoKTtOb2UoKX0pO2Z1bmN0aW9uIHkwKHQsZSxyKXtyZXR1cm5gJHt0Lm5hbWV9XyR7ZX1fJHtyfWB9ZnVuY3Rpb24gT29lKHQpe2xldCBlPXtkZWNpc2lvbk1hcDp7fSxkZWNpc2lvblN0YXRlczpbXSxydWxlVG9TdGFydFN0YXRlOm5ldyBNYXAscnVsZVRvU3RvcFN0YXRlOm5ldyBNYXAsc3RhdGVzOltdfTtkRmUoZSx0KTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgaT10W25dLGE9djAoZSxpLGkpO2EhPT12b2lkIDAmJkVGZShlLGksYSl9cmV0dXJuIGV9ZnVuY3Rpb24gZEZlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGk9ZVtuXSxhPW9hKHQsaSx2b2lkIDAse3R5cGU6bEZlfSkscz1vYSh0LGksdm9pZCAwLHt0eXBlOlNnfSk7YS5zdG9wPXMsdC5ydWxlVG9TdGFydFN0YXRlLnNldChpLGEpLHQucnVsZVRvU3RvcFN0YXRlLnNldChpLHMpfX1mdW5jdGlvbiBQb2UodCxlLHIpe3JldHVybiByIGluc3RhbmNlb2YgRXI/WFIodCxlLHIudGVybWluYWxUeXBlLHIpOnIgaW5zdGFuY2VvZiBubj9rRmUodCxlLHIpOnIgaW5zdGFuY2VvZiB3bj92RmUodCxlLHIpOnIgaW5zdGFuY2VvZiBhbj94RmUodCxlLHIpOnIgaW5zdGFuY2VvZiBEcj9wRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBibj9tRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBMbj9nRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBEbj95RmUodCxlLHIpOnYwKHQsZSxyKX1mdW5jdGlvbiBwRmUodCxlLHIpe2xldCBuPW9hKHQsZSxyLHt0eXBlOk1vZX0pO3BmKHQsbik7bGV0IGk9Q2codCxlLG4scix2MCh0LGUscikpO3JldHVybiBGb2UodCxlLHIsaSl9ZnVuY3Rpb24gbUZlKHQsZSxyKXtsZXQgbj1vYSh0LGUscix7dHlwZTpNb2V9KTtwZih0LG4pO2xldCBpPUNnKHQsZSxuLHIsdjAodCxlLHIpKSxhPVhSKHQsZSxyLnNlcGFyYXRvcixyKTtyZXR1cm4gRm9lKHQsZSxyLGksYSl9ZnVuY3Rpb24gZ0ZlKHQsZSxyKXtsZXQgbj1vYSh0LGUscix7dHlwZTpSb2V9KTtwZih0LG4pO2xldCBpPUNnKHQsZSxuLHIsdjAodCxlLHIpKTtyZXR1cm4gQm9lKHQsZSxyLGkpfWZ1bmN0aW9uIHlGZSh0LGUscil7bGV0IG49b2EodCxlLHIse3R5cGU6Um9lfSk7cGYodCxuKTtsZXQgaT1DZyh0LGUsbixyLHYwKHQsZSxyKSksYT1YUih0LGUsci5zZXBhcmF0b3Iscik7cmV0dXJuIEJvZSh0LGUscixpLGEpfWZ1bmN0aW9uIHZGZSh0LGUscil7bGV0IG49b2EodCxlLHIse3R5cGU6ZGZ9KTtwZih0LG4pO2xldCBpPVFlKHIuZGVmaW5pdGlvbixzPT5Qb2UodCxlLHMpKTtyZXR1cm4gQ2codCxlLG4sciwuLi5pKX1mdW5jdGlvbiB4RmUodCxlLHIpe2xldCBuPW9hKHQsZSxyLHt0eXBlOmRmfSk7cGYodCxuKTtsZXQgaT1DZyh0LGUsbixyLHYwKHQsZSxyKSk7cmV0dXJuIGJGZSh0LGUscixpKX1mdW5jdGlvbiB2MCh0LGUscil7bGV0IG49WXIoUWUoci5kZWZpbml0aW9uLGk9PlBvZSh0LGUsaSkpLGk9PmkhPT12b2lkIDApO3JldHVybiBuLmxlbmd0aD09PTE/blswXTpuLmxlbmd0aD09PTA/dm9pZCAwOlRGZSh0LG4pfWZ1bmN0aW9uIEJvZSh0LGUscixuLGkpe2xldCBhPW4ubGVmdCxzPW4ucmlnaHQsbD1vYSh0LGUscix7dHlwZTpmRmV9KTtwZih0LGwpO2xldCB1PW9hKHQsZSxyLHt0eXBlOklvZX0pO3JldHVybiBhLmxvb3BiYWNrPWwsdS5sb29wYmFjaz1sLHQuZGVjaXNpb25NYXBbeTAoZSxpPyJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb25NYW5kYXRvcnkiLHIuaWR4KV09bCxOaShzLGwpLGk9PT12b2lkIDA/KE5pKGwsYSksTmkobCx1KSk6KE5pKGwsdSksTmkobCxpLmxlZnQpLE5pKGkucmlnaHQsYSkpLHtsZWZ0OmEscmlnaHQ6dX19ZnVuY3Rpb24gRm9lKHQsZSxyLG4saSl7bGV0IGE9bi5sZWZ0LHM9bi5yaWdodCxsPW9hKHQsZSxyLHt0eXBlOmhGZX0pO3BmKHQsbCk7bGV0IHU9b2EodCxlLHIse3R5cGU6SW9lfSksaD1vYSh0LGUscix7dHlwZTp1RmV9KTtyZXR1cm4gbC5sb29wYmFjaz1oLHUubG9vcGJhY2s9aCxOaShsLGEpLE5pKGwsdSksTmkocyxoKSxpIT09dm9pZCAwPyhOaShoLHUpLE5pKGgsaS5sZWZ0KSxOaShpLnJpZ2h0LGEpKTpOaShoLGwpLHQuZGVjaXNpb25NYXBbeTAoZSxpPyJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb24iLHIuaWR4KV09bCx7bGVmdDpsLHJpZ2h0OnV9fWZ1bmN0aW9uIGJGZSh0LGUscixuKXtsZXQgaT1uLmxlZnQsYT1uLnJpZ2h0O3JldHVybiBOaShpLGEpLHQuZGVjaXNpb25NYXBbeTAoZSwiT3B0aW9uIixyLmlkeCldPWksbn1mdW5jdGlvbiBwZih0LGUpe3JldHVybiB0LmRlY2lzaW9uU3RhdGVzLnB1c2goZSksZS5kZWNpc2lvbj10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aC0xLGUuZGVjaXNpb259ZnVuY3Rpb24gQ2codCxlLHIsbiwuLi5pKXtsZXQgYT1vYSh0LGUsbix7dHlwZTpjRmUsc3RhcnQ6cn0pO3IuZW5kPWE7Zm9yKGxldCBsIG9mIGkpbCE9PXZvaWQgMD8oTmkocixsLmxlZnQpLE5pKGwucmlnaHQsYSkpOk5pKHIsYSk7bGV0IHM9e2xlZnQ6cixyaWdodDphfTtyZXR1cm4gdC5kZWNpc2lvbk1hcFt5MChlLHdGZShuKSxuLmlkeCldPXIsc31mdW5jdGlvbiB3RmUodCl7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJBbHRlcm5hdGlvbiI7aWYodCBpbnN0YW5jZW9mIGFuKXJldHVybiJPcHRpb24iO2lmKHQgaW5zdGFuY2VvZiBEcilyZXR1cm4iUmVwZXRpdGlvbiI7aWYodCBpbnN0YW5jZW9mIGJuKXJldHVybiJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJSZXBldGl0aW9uTWFuZGF0b3J5IjtpZih0IGluc3RhbmNlb2YgRG4pcmV0dXJuIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIjt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkIil9ZnVuY3Rpb24gVEZlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxyLTE7YSsrKXtsZXQgcz1lW2FdLGw7cy5sZWZ0LnRyYW5zaXRpb25zLmxlbmd0aD09PTEmJihsPXMubGVmdC50cmFuc2l0aW9uc1swXSk7bGV0IHU9bCBpbnN0YW5jZW9mIEVnLGg9bCxmPWVbYSsxXS5sZWZ0O3MubGVmdC50eXBlPT09ZGYmJnMucmlnaHQudHlwZT09PWRmJiZsIT09dm9pZCAwJiYodSYmaC5mb2xsb3dTdGF0ZT09PXMucmlnaHR8fGwudGFyZ2V0PT09cy5yaWdodCk/KHU/aC5mb2xsb3dTdGF0ZT1mOmwudGFyZ2V0PWYsU0ZlKHQscy5yaWdodCkpOk5pKHMucmlnaHQsZil9bGV0IG49ZVswXSxpPWVbci0xXTtyZXR1cm57bGVmdDpuLmxlZnQscmlnaHQ6aS5yaWdodH19ZnVuY3Rpb24gWFIodCxlLHIsbil7bGV0IGk9b2EodCxlLG4se3R5cGU6ZGZ9KSxhPW9hKHQsZSxuLHt0eXBlOmRmfSk7cmV0dXJuIGpSKGksbmV3IGtnKGEscikpLHtsZWZ0OmkscmlnaHQ6YX19ZnVuY3Rpb24ga0ZlKHQsZSxyKXtsZXQgbj1yLnJlZmVyZW5jZWRSdWxlLGk9dC5ydWxlVG9TdGFydFN0YXRlLmdldChuKSxhPW9hKHQsZSxyLHt0eXBlOmRmfSkscz1vYSh0LGUscix7dHlwZTpkZn0pLGw9bmV3IEVnKGksbixzKTtyZXR1cm4galIoYSxsKSx7bGVmdDphLHJpZ2h0OnN9fWZ1bmN0aW9uIEVGZSh0LGUscil7bGV0IG49dC5ydWxlVG9TdGFydFN0YXRlLmdldChlKTtOaShuLHIubGVmdCk7bGV0IGk9dC5ydWxlVG9TdG9wU3RhdGUuZ2V0KGUpO3JldHVybiBOaShyLnJpZ2h0LGkpLHtsZWZ0Om4scmlnaHQ6aX19ZnVuY3Rpb24gTmkodCxlKXtsZXQgcj1uZXcgQjIoZSk7alIodCxyKX1mdW5jdGlvbiBvYSh0LGUscixuKXtsZXQgaT1PYmplY3QuYXNzaWduKHthdG46dCxwcm9kdWN0aW9uOnIsZXBzaWxvbk9ubHlUcmFuc2l0aW9uczohMSxydWxlOmUsdHJhbnNpdGlvbnM6W10sbmV4dFRva2VuV2l0aGluUnVsZTpbXSxzdGF0ZU51bWJlcjp0LnN0YXRlcy5sZW5ndGh9LG4pO3JldHVybiB0LnN0YXRlcy5wdXNoKGkpLGl9ZnVuY3Rpb24galIodCxlKXt0LnRyYW5zaXRpb25zLmxlbmd0aD09PTAmJih0LmVwc2lsb25Pbmx5VHJhbnNpdGlvbnM9ZS5pc0Vwc2lsb24oKSksdC50cmFuc2l0aW9ucy5wdXNoKGUpfWZ1bmN0aW9uIFNGZSh0LGUpe3Quc3RhdGVzLnNwbGljZSh0LnN0YXRlcy5pbmRleE9mKGUpLDEpfXZhciBkZixsRmUsUm9lLE1vZSxTZyxjRmUsdUZlLGhGZSxmRmUsSW9lLFAyLGtnLEIyLEVnLHpvZT1NKCgpPT57InVzZSBzdHJpY3QiO1dtKCk7R0woKTtnMCgpO28oeTAsImJ1aWxkQVROS2V5Iik7ZGY9MSxsRmU9MixSb2U9NCxNb2U9NSxTZz03LGNGZT04LHVGZT05LGhGZT0xMCxmRmU9MTEsSW9lPTEyLFAyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGFyZ2V0PWV9aXNFcHNpbG9uKCl7cmV0dXJuITF9fSxrZz1jbGFzcyBleHRlbmRzIFAye3N0YXRpY3tvKHRoaXMsIkF0b21UcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuVHlwZT1yfX0sQjI9Y2xhc3MgZXh0ZW5kcyBQMntzdGF0aWN7byh0aGlzLCJFcHNpbG9uVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWlzRXBzaWxvbigpe3JldHVybiEwfX0sRWc9Y2xhc3MgZXh0ZW5kcyBQMntzdGF0aWN7byh0aGlzLCJSdWxlVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlKSx0aGlzLnJ1bGU9cix0aGlzLmZvbGxvd1N0YXRlPW59aXNFcHNpbG9uKCl7cmV0dXJuITB9fTtvKE9vZSwiY3JlYXRlQVROIik7byhkRmUsImNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMiKTtvKFBvZSwiYXRvbSIpO28ocEZlLCJyZXBldGl0aW9uIik7byhtRmUsInJlcGV0aXRpb25TZXAiKTtvKGdGZSwicmVwZXRpdGlvbk1hbmRhdG9yeSIpO28oeUZlLCJyZXBldGl0aW9uTWFuZGF0b3J5U2VwIik7byh2RmUsImFsdGVybmF0aW9uIik7byh4RmUsIm9wdGlvbiIpO28odjAsImJsb2NrIik7byhCb2UsInBsdXMiKTtvKEZvZSwic3RhciIpO28oYkZlLCJvcHRpb25hbCIpO28ocGYsImRlZmluZURlY2lzaW9uU3RhdGUiKTtvKENnLCJtYWtlQWx0cyIpO28od0ZlLCJnZXRQcm9kVHlwZSIpO28oVEZlLCJtYWtlQmxvY2siKTtvKFhSLCJ0b2tlblJlZiIpO28oa0ZlLCJydWxlUmVmIik7byhFRmUsImJ1aWxkUnVsZUhhbmRsZSIpO28oTmksImVwc2lsb24iKTtvKG9hLCJuZXdTdGF0ZSIpO28oalIsImFkZFRyYW5zaXRpb24iKTtvKFNGZSwicmVtb3ZlU3RhdGUiKX0pO2Z1bmN0aW9uIEtSKHQsZT0hMCl7cmV0dXJuYCR7ZT9gYSR7dC5hbHR9YDoiIn1zJHt0LnN0YXRlLnN0YXRlTnVtYmVyfToke3Quc3RhY2subWFwKHI9PnIuc3RhdGVOdW1iZXIudG9TdHJpbmcoKSkuam9pbigiXyIpfWB9dmFyIEYyLEFnLEdvZT1NKCgpPT57InVzZSBzdHJpY3QiO1dtKCk7RjI9e30sQWc9Y2xhc3N7c3RhdGlje28odGhpcywiQVROQ29uZmlnU2V0Iil9Y29uc3RydWN0b3IoKXt0aGlzLm1hcD17fSx0aGlzLmNvbmZpZ3M9W119Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aH1maW5hbGl6ZSgpe3RoaXMubWFwPXt9fWFkZChlKXtsZXQgcj1LUihlKTtyIGluIHRoaXMubWFwfHwodGhpcy5tYXBbcl09dGhpcy5jb25maWdzLmxlbmd0aCx0aGlzLmNvbmZpZ3MucHVzaChlKSl9Z2V0IGVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuY29uZmlnc31nZXQgYWx0cygpe3JldHVybiBRZSh0aGlzLmNvbmZpZ3MsZT0+ZS5hbHQpfWdldCBrZXkoKXtsZXQgZT0iIjtmb3IobGV0IHIgaW4gdGhpcy5tYXApZSs9cisiOiI7cmV0dXJuIGV9fTtvKEtSLCJnZXRBVE5Db25maWdLZXkiKX0pO2Z1bmN0aW9uIENGZSh0LGUpe2xldCByPXt9O3JldHVybiBuPT57bGV0IGk9bi50b1N0cmluZygpLGE9cltpXTtyZXR1cm4gYSE9PXZvaWQgMHx8KGE9e2F0blN0YXJ0U3RhdGU6dCxkZWNpc2lvbjplLHN0YXRlczp7fX0scltpXT1hKSxhfX1mdW5jdGlvbiBWb2UodCxlPSEwKXtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgbiBvZiB0KXtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgYSBvZiBuKXtpZihhPT09dm9pZCAwKXtpZihlKWJyZWFrO3JldHVybiExfWxldCBzPVthLnRva2VuVHlwZUlkeF0uY29uY2F0KGEuY2F0ZWdvcnlNYXRjaGVzKTtmb3IobGV0IGwgb2YgcylpZihyLmhhcyhsKSl7aWYoIWkuaGFzKGwpKXJldHVybiExfWVsc2Ugci5hZGQobCksaS5hZGQobCl9fXJldHVybiEwfWZ1bmN0aW9uIEFGZSh0KXtsZXQgZT10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aCxyPUFycmF5KGUpO2ZvcihsZXQgbj0wO248ZTtuKyspcltuXT1DRmUodC5kZWNpc2lvblN0YXRlc1tuXSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBRUih0LGUscixuKXtsZXQgaT10W2VdKHIpLGE9aS5zdGFydDtpZihhPT09dm9pZCAwKXtsZXQgbD1GRmUoaS5hdG5TdGFydFN0YXRlKTthPVdvZShpLEhvZShsKSksaS5zdGFydD1hfXJldHVybiBfRmUuYXBwbHkodGhpcyxbaSxhLHIsbl0pfWZ1bmN0aW9uIF9GZSh0LGUscixuKXtsZXQgaT1lLGE9MSxzPVtdLGw9dGhpcy5MQShhKyspO2Zvcig7Oyl7bGV0IHU9SUZlKGksbCk7aWYodT09PXZvaWQgMCYmKHU9TEZlLmFwcGx5KHRoaXMsW3QsaSxsLGEscixuXSkpLHU9PT1GMilyZXR1cm4gTUZlKHMsaSxsKTtpZih1LmlzQWNjZXB0U3RhdGU9PT0hMClyZXR1cm4gdS5wcmVkaWN0aW9uO2k9dSxzLnB1c2gobCksbD10aGlzLkxBKGErKyl9fWZ1bmN0aW9uIExGZSh0LGUscixuLGksYSl7bGV0IHM9T0ZlKGUuY29uZmlncyxyLGkpO2lmKHMuc2l6ZT09PTApcmV0dXJuIFVvZSh0LGUscixGMiksRjI7bGV0IGw9SG9lKHMpLHU9QkZlKHMsaSk7aWYodSE9PXZvaWQgMClsLmlzQWNjZXB0U3RhdGU9ITAsbC5wcmVkaWN0aW9uPXUsbC5jb25maWdzLnVuaXF1ZUFsdD11O2Vsc2UgaWYoVkZlKHMpKXtsZXQgaD1CbChzLmFsdHMpO2wuaXNBY2NlcHRTdGF0ZT0hMCxsLnByZWRpY3Rpb249aCxsLmNvbmZpZ3MudW5pcXVlQWx0PWgsREZlLmFwcGx5KHRoaXMsW3QsbixzLmFsdHMsYV0pfXJldHVybiBsPVVvZSh0LGUscixsKSxsfWZ1bmN0aW9uIERGZSh0LGUscixuKXtsZXQgaT1bXTtmb3IobGV0IGg9MTtoPD1lO2grKylpLnB1c2godGhpcy5MQShoKS50b2tlblR5cGUpO2xldCBhPXQuYXRuU3RhcnRTdGF0ZSxzPWEucnVsZSxsPWEucHJvZHVjdGlvbix1PU5GZSh7dG9wTGV2ZWxSdWxlOnMsYW1iaWd1aXR5SW5kaWNlczpyLHByb2R1Y3Rpb246bCxwcmVmaXhQYXRoOml9KTtuKHUpfWZ1bmN0aW9uIE5GZSh0KXtsZXQgZT1RZSh0LnByZWZpeFBhdGgsaT0+cXUoaSkpLmpvaW4oIiwgIikscj10LnByb2R1Y3Rpb24uaWR4PT09MD8iIjp0LnByb2R1Y3Rpb24uaWR4LG49YEFtYmlndW91cyBBbHRlcm5hdGl2ZXMgRGV0ZWN0ZWQ6IDwke3QuYW1iaWd1aXR5SW5kaWNlcy5qb2luKCIsICIpfT4gaW4gPCR7UkZlKHQucHJvZHVjdGlvbil9JHtyfT4gaW5zaWRlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBSdWxlLAo8JHtlfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLgpgO3JldHVybiBuPW4rYFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQU1CSUdVT1VTX0FMVEVSTkFUSVZFUwpGb3IgRnVydGhlciBkZXRhaWxzLmAsbn1mdW5jdGlvbiBSRmUodCl7aWYodCBpbnN0YW5jZW9mIG5uKXJldHVybiJTVUJSVUxFIjtpZih0IGluc3RhbmNlb2YgYW4pcmV0dXJuIk9QVElPTiI7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJPUiI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJBVF9MRUFTVF9PTkUiO2lmKHQgaW5zdGFuY2VvZiBEbilyZXR1cm4iQVRfTEVBU1RfT05FX1NFUCI7aWYodCBpbnN0YW5jZW9mIGJuKXJldHVybiJNQU5ZX1NFUCI7aWYodCBpbnN0YW5jZW9mIERyKXJldHVybiJNQU5ZIjtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIkNPTlNVTUUiO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIE1GZSh0LGUscil7bGV0IG49YmEoZS5jb25maWdzLmVsZW1lbnRzLGE9PmEuc3RhdGUudHJhbnNpdGlvbnMpLGk9UXJlKG4uZmlsdGVyKGE9PmEgaW5zdGFuY2VvZiBrZykubWFwKGE9PmEudG9rZW5UeXBlKSxhPT5hLnRva2VuVHlwZUlkeCk7cmV0dXJue2FjdHVhbFRva2VuOnIscG9zc2libGVUb2tlblR5cGVzOmksdG9rZW5QYXRoOnR9fWZ1bmN0aW9uIElGZSh0LGUpe3JldHVybiB0LmVkZ2VzW2UudG9rZW5UeXBlSWR4XX1mdW5jdGlvbiBPRmUodCxlLHIpe2xldCBuPW5ldyBBZyxpPVtdO2ZvcihsZXQgcyBvZiB0LmVsZW1lbnRzKXtpZihyLmlzKHMuYWx0KT09PSExKWNvbnRpbnVlO2lmKHMuc3RhdGUudHlwZT09PVNnKXtpLnB1c2gocyk7Y29udGludWV9bGV0IGw9cy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9cy5zdGF0ZS50cmFuc2l0aW9uc1t1XSxmPVBGZShoLGUpO2YhPT12b2lkIDAmJm4uYWRkKHtzdGF0ZTpmLGFsdDpzLmFsdCxzdGFjazpzLnN0YWNrfSl9fWxldCBhO2lmKGkubGVuZ3RoPT09MCYmbi5zaXplPT09MSYmKGE9biksYT09PXZvaWQgMCl7YT1uZXcgQWc7Zm9yKGxldCBzIG9mIG4uZWxlbWVudHMpUmsocyxhKX1pZihpLmxlbmd0aD4wJiYhR0ZlKGEpKWZvcihsZXQgcyBvZiBpKWEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIFBGZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBrZyYmVDIoZSx0LnRva2VuVHlwZSkpcmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIEJGZSh0LGUpe2xldCByO2ZvcihsZXQgbiBvZiB0LmVsZW1lbnRzKWlmKGUuaXMobi5hbHQpPT09ITApe2lmKHI9PT12b2lkIDApcj1uLmFsdDtlbHNlIGlmKHIhPT1uLmFsdClyZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gSG9lKHQpe3JldHVybntjb25maWdzOnQsZWRnZXM6e30saXNBY2NlcHRTdGF0ZTohMSxwcmVkaWN0aW9uOi0xfX1mdW5jdGlvbiBVb2UodCxlLHIsbil7cmV0dXJuIG49V29lKHQsbiksZS5lZGdlc1tyLnRva2VuVHlwZUlkeF09bixufWZ1bmN0aW9uIFdvZSh0LGUpe2lmKGU9PT1GMilyZXR1cm4gZTtsZXQgcj1lLmNvbmZpZ3Mua2V5LG49dC5zdGF0ZXNbcl07cmV0dXJuIG4hPT12b2lkIDA/bjooZS5jb25maWdzLmZpbmFsaXplKCksdC5zdGF0ZXNbcl09ZSxlKX1mdW5jdGlvbiBGRmUodCl7bGV0IGU9bmV3IEFnLHI9dC50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGE9e3N0YXRlOnQudHJhbnNpdGlvbnNbbl0udGFyZ2V0LGFsdDpuLHN0YWNrOltdfTtSayhhLGUpfXJldHVybiBlfWZ1bmN0aW9uIFJrKHQsZSl7bGV0IHI9dC5zdGF0ZTtpZihyLnR5cGU9PT1TZyl7aWYodC5zdGFjay5sZW5ndGg+MCl7bGV0IGk9Wy4uLnQuc3RhY2tdLHM9e3N0YXRlOmkucG9wKCksYWx0OnQuYWx0LHN0YWNrOml9O1JrKHMsZSl9ZWxzZSBlLmFkZCh0KTtyZXR1cm59ci5lcHNpbG9uT25seVRyYW5zaXRpb25zfHxlLmFkZCh0KTtsZXQgbj1yLnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgYT1yLnRyYW5zaXRpb25zW2ldLHM9ekZlKHQsYSk7cyE9PXZvaWQgMCYmUmsocyxlKX19ZnVuY3Rpb24gekZlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIEIyKXJldHVybntzdGF0ZTplLnRhcmdldCxhbHQ6dC5hbHQsc3RhY2s6dC5zdGFja307aWYoZSBpbnN0YW5jZW9mIEVnKXtsZXQgcj1bLi4udC5zdGFjayxlLmZvbGxvd1N0YXRlXTtyZXR1cm57c3RhdGU6ZS50YXJnZXQsYWx0OnQuYWx0LHN0YWNrOnJ9fX1mdW5jdGlvbiBHRmUodCl7Zm9yKGxldCBlIG9mIHQuZWxlbWVudHMpaWYoZS5zdGF0ZS50eXBlPT09U2cpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJEZlKHQpe2ZvcihsZXQgZSBvZiB0LmVsZW1lbnRzKWlmKGUuc3RhdGUudHlwZSE9PVNnKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFZGZSh0KXtpZigkRmUodCkpcmV0dXJuITA7bGV0IGU9VUZlKHQuZWxlbWVudHMpO3JldHVybiBIRmUoZSkmJiFXRmUoZSl9ZnVuY3Rpb24gVUZlKHQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBuPUtSKHIsITEpLGk9ZS5nZXQobik7aT09PXZvaWQgMCYmKGk9e30sZS5zZXQobixpKSksaVtyLmFsdF09ITB9cmV0dXJuIGV9ZnVuY3Rpb24gSEZlKHQpe2ZvcihsZXQgZSBvZiBBcnJheS5mcm9tKHQudmFsdWVzKCkpKWlmKE9iamVjdC5rZXlzKGUpLmxlbmd0aD4xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFdGZSh0KXtmb3IobGV0IGUgb2YgQXJyYXkuZnJvbSh0LnZhbHVlcygpKSlpZihPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0xKXJldHVybiEwO3JldHVybiExfXZhciBOaywkb2UsejIsWW9lPU0oKCk9PnsidXNlIHN0cmljdCI7ZzAoKTt6b2UoKTtHb2UoKTtYTCgpO1ZMKCk7WnJlKCk7V20oKTtfdygpO25UKCk7bFQoKTtaTCgpO28oQ0ZlLCJjcmVhdGVERkFDYWNoZSIpO05rPWNsYXNze3N0YXRpY3tvKHRoaXMsIlByZWRpY2F0ZVNldCIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmVkaWNhdGVzPVtdfWlzKGUpe3JldHVybiBlPj10aGlzLnByZWRpY2F0ZXMubGVuZ3RofHx0aGlzLnByZWRpY2F0ZXNbZV19c2V0KGUscil7dGhpcy5wcmVkaWNhdGVzW2VdPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIixyPXRoaXMucHJlZGljYXRlcy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyllKz10aGlzLnByZWRpY2F0ZXNbbl09PT0hMD8iMSI6IjAiO3JldHVybiBlfX0sJG9lPW5ldyBOayx6Mj1jbGFzcyBleHRlbmRzIGp1e3N0YXRpY3tvKHRoaXMsIkxMU3Rhckxvb2thaGVhZFN0cmF0ZWd5Iil9Y29uc3RydWN0b3IoZSl7dmFyIHI7c3VwZXIoKSx0aGlzLmxvZ2dpbmc9KHI9ZT8ubG9nZ2luZykhPT1udWxsJiZyIT09dm9pZCAwP3I6bj0+Y29uc29sZS5sb2cobil9aW5pdGlhbGl6ZShlKXt0aGlzLmF0bj1Pb2UoZS5ydWxlcyksdGhpcy5kZmFzPUFGZSh0aGlzLmF0bil9dmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcygpe3JldHVybltdfXZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcygpe3JldHVybltdfWJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oZSl7bGV0e3Byb2RPY2N1cnJlbmNlOnIscnVsZTpuLGhhc1ByZWRpY2F0ZXM6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9eTAobiwiQWx0ZXJuYXRpb24iLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1RZShjayh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOiJBbHRlcm5hdGlvbiIscnVsZTpufSkscD0+UWUocCxtPT5tWzBdKSk7aWYoVm9lKGQsITEpJiYhYSl7bGV0IHA9cXIoZCwobSxnLHkpPT4oU2UoZyx2PT57diYmKG1bdi50b2tlblR5cGVJZHhdPXksU2Uodi5jYXRlZ29yeU1hdGNoZXMseD0+e21beF09eX0pKX0pLG0pLHt9KTtyZXR1cm4gaT9mdW5jdGlvbihtKXt2YXIgZztsZXQgeT10aGlzLkxBKDEpLHY9cFt5LnRva2VuVHlwZUlkeF07aWYobSE9PXZvaWQgMCYmdiE9PXZvaWQgMCl7bGV0IHg9KGc9bVt2XSk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLkdBVEU7aWYoeCE9PXZvaWQgMCYmeC5jYWxsKHRoaXMpPT09ITEpcmV0dXJufXJldHVybiB2fTpmdW5jdGlvbigpe2xldCBtPXRoaXMuTEEoMSk7cmV0dXJuIHBbbS50b2tlblR5cGVJZHhdfX1lbHNlIHJldHVybiBpP2Z1bmN0aW9uKHApe2xldCBtPW5ldyBOayxnPXA9PT12b2lkIDA/MDpwLmxlbmd0aDtmb3IobGV0IHY9MDt2PGc7disrKXtsZXQgeD1wPy5bdl0uR0FURTttLnNldCh2LHg9PT12b2lkIDB8fHguY2FsbCh0aGlzKSl9bGV0IHk9UVIuY2FsbCh0aGlzLHMsZixtLGwpO3JldHVybiB0eXBlb2YgeT09Im51bWJlciI/eTp2b2lkIDB9OmZ1bmN0aW9uKCl7bGV0IHA9UVIuY2FsbCh0aGlzLHMsZiwkb2UsbCk7cmV0dXJuIHR5cGVvZiBwPT0ibnVtYmVyIj9wOnZvaWQgMH19YnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbChlKXtsZXR7cHJvZE9jY3VycmVuY2U6cixydWxlOm4scHJvZFR5cGU6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9eTAobixpLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1RZShjayh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOmkscnVsZTpufSkscD0+UWUocCxtPT5tWzBdKSk7aWYoVm9lKGQpJiZkWzBdWzBdJiYhYSl7bGV0IHA9ZFswXSxtPVdyKHApO2lmKG0ubGVuZ3RoPT09MSYmY3IobVswXS5jYXRlZ29yeU1hdGNoZXMpKXtsZXQgeT1tWzBdLnRva2VuVHlwZUlkeDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKS50b2tlblR5cGVJZHg9PT15fX1lbHNle2xldCBnPXFyKG0sKHksdik9Pih2IT09dm9pZCAwJiYoeVt2LnRva2VuVHlwZUlkeF09ITAsU2Uodi5jYXRlZ29yeU1hdGNoZXMseD0+e3lbeF09ITB9KSkseSkse30pO3JldHVybiBmdW5jdGlvbigpe2xldCB5PXRoaXMuTEEoMSk7cmV0dXJuIGdbeS50b2tlblR5cGVJZHhdPT09ITB9fX1yZXR1cm4gZnVuY3Rpb24oKXtsZXQgcD1RUi5jYWxsKHRoaXMscyxmLCRvZSxsKTtyZXR1cm4gdHlwZW9mIHA9PSJvYmplY3QiPyExOnA9PT0wfX19O28oVm9lLCJpc0xMMVNlcXVlbmNlIik7byhBRmUsImluaXRBVE5TaW11bGF0b3IiKTtvKFFSLCJhZGFwdGl2ZVByZWRpY3QiKTtvKF9GZSwicGVyZm9ybUxvb2thaGVhZCIpO28oTEZlLCJjb21wdXRlTG9va2FoZWFkVGFyZ2V0Iik7byhERmUsInJlcG9ydExvb2thaGVhZEFtYmlndWl0eSIpO28oTkZlLCJidWlsZEFtYmlndWl0eUVycm9yIik7byhSRmUsImdldFByb2R1Y3Rpb25Ec2xOYW1lIik7byhNRmUsImJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IiKTtvKElGZSwiZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZSIpO28oT0ZlLCJjb21wdXRlUmVhY2hTZXQiKTtvKFBGZSwiZ2V0UmVhY2hhYmxlVGFyZ2V0Iik7byhCRmUsImdldFVuaXF1ZUFsdCIpO28oSG9lLCJuZXdERkFTdGF0ZSIpO28oVW9lLCJhZGRERkFFZGdlIik7byhXb2UsImFkZERGQVN0YXRlIik7byhGRmUsImNvbXB1dGVTdGFydFN0YXRlIik7byhSaywiY2xvc3VyZSIpO28oekZlLCJnZXRFcHNpbG9uVGFyZ2V0Iik7byhHRmUsImhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZSIpO28oJEZlLCJhbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyIpO28oVkZlLCJoYXNDb25mbGljdFRlcm1pbmF0aW5nUHJlZGljdGlvbiIpO28oVUZlLCJnZXRDb25mbGljdGluZ0FsdFNldHMiKTtvKEhGZSwiaGFzQ29uZmxpY3RpbmdBbHRTZXQiKTtvKFdGZSwiaGFzU3RhdGVBc3NvY2lhdGVkV2l0aE9uZUFsdCIpfSk7dmFyIHFvZT1NKCgpPT57InVzZSBzdHJpY3QiO1lvZSgpfSk7dmFyIFhvZSxaUixqb2UsTWssWHIsTnIsSWssS29lLEpSLFFvZSxab2UsSm9lLGVsZSxlTSx0bGUscmxlLG5sZSxPayxfZyxMZyx0TSxEZyxpbGUsck0sbk0saU0sYU0sc00sYWxlLHNsZSxvTSxvbGUsbE0sRzIsbGxlLGNsZSx1bGUsaGxlLGZsZSxkbGUscGxlLG1sZSxQayxnbGUseWxlLHZsZSx4bGUsYmxlLHdsZSxUbGUsa2xlLEVsZSxTbGUsQ2xlLEJrLEFsZSxfbGUsTGxlLERsZSxObGUsUmxlLE1sZSxJbGUsT2xlLFBsZSxCbGUsRmxlLHpsZSxjTSx1TSxHbGUsJGxlLFZsZSxVbGUsSGxlLFdsZSxZbGUscWxlLFhsZSxoTSx6ZSxmTT1NKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKFhvZXx8KFhvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKFpSfHwoWlI9e30pKTsoZnVuY3Rpb24odCl7dC5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoam9lfHwoam9lPXt9KSk7KGZ1bmN0aW9uKHQpe3QuTUlOX1ZBTFVFPTAsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoTWt8fChNaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJuIG49PT1OdW1iZXIuTUFYX1ZBTFVFJiYobj1Nay5NQVhfVkFMVUUpLGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1Nay5NQVhfVkFMVUUpLHtsaW5lOm4sY2hhcmFjdGVyOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLm9iamVjdExpdGVyYWwoaSkmJnplLnVpbnRlZ2VyKGkubGluZSkmJnplLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1vKHIsImlzIiksdC5pcz1yfSkoWHJ8fChYcj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe2lmKHplLnVpbnRlZ2VyKG4pJiZ6ZS51aW50ZWdlcihpKSYmemUudWludGVnZXIoYSkmJnplLnVpbnRlZ2VyKHMpKXJldHVybntzdGFydDpYci5jcmVhdGUobixpKSxlbmQ6WHIuY3JlYXRlKGEscyl9O2lmKFhyLmlzKG4pJiZYci5pcyhpKSlyZXR1cm57c3RhcnQ6bixlbmQ6aX07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtufSwgJHtpfSwgJHthfSwgJHtzfV1gKX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZYci5pcyhpLnN0YXJ0KSYmWHIuaXMoaS5lbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShOcnx8KE5yPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4scmFuZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmTnIuaXMoaS5yYW5nZSkmJih6ZS5zdHJpbmcoaS51cmkpfHx6ZS51bmRlZmluZWQoaS51cmkpKX1vKHIsImlzIiksdC5pcz1yfSkoSWt8fChJaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt0YXJnZXRVcmk6bix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOmEsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmTnIuaXMoaS50YXJnZXRSYW5nZSkmJnplLnN0cmluZyhpLnRhcmdldFVyaSkmJk5yLmlzKGkudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpJiYoTnIuaXMoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fHplLnVuZGVmaW5lZChpLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9byhyLCJpcyIpLHQuaXM9cn0pKEtvZXx8KEtvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybntyZWQ6bixncmVlbjppLGJsdWU6YSxhbHBoYTpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZ6ZS5udW1iZXJSYW5nZShpLnJlZCwwLDEpJiZ6ZS5udW1iZXJSYW5nZShpLmdyZWVuLDAsMSkmJnplLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiZ6ZS5udW1iZXJSYW5nZShpLmFscGhhLDAsMSl9byhyLCJpcyIpLHQuaXM9cn0pKEpSfHwoSlI9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLGNvbG9yOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLm9iamVjdExpdGVyYWwoaSkmJk5yLmlzKGkucmFuZ2UpJiZKUi5pcyhpLmNvbG9yKX1vKHIsImlzIiksdC5pcz1yfSkoUW9lfHwoUW9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntsYWJlbDpuLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZ6ZS5zdHJpbmcoaS5sYWJlbCkmJih6ZS51bmRlZmluZWQoaS50ZXh0RWRpdCl8fExnLmlzKGkpKSYmKHplLnVuZGVmaW5lZChpLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHx6ZS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxMZy5pcykpfW8ociwiaXMiKSx0LmlzPXJ9KShab2V8fChab2U9e30pKTsoZnVuY3Rpb24odCl7dC5Db21tZW50PSJjb21tZW50Iix0LkltcG9ydHM9ImltcG9ydHMiLHQuUmVnaW9uPSJyZWdpb24ifSkoSm9lfHwoSm9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyxsLHUpe2xldCBoPXtzdGFydExpbmU6bixlbmRMaW5lOml9O3JldHVybiB6ZS5kZWZpbmVkKGEpJiYoaC5zdGFydENoYXJhY3Rlcj1hKSx6ZS5kZWZpbmVkKHMpJiYoaC5lbmRDaGFyYWN0ZXI9cyksemUuZGVmaW5lZChsKSYmKGgua2luZD1sKSx6ZS5kZWZpbmVkKHUpJiYoaC5jb2xsYXBzZWRUZXh0PXUpLGh9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmemUudWludGVnZXIoaS5zdGFydExpbmUpJiZ6ZS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJih6ZS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fHplLnVpbnRlZ2VyKGkuc3RhcnRDaGFyYWN0ZXIpKSYmKHplLnVuZGVmaW5lZChpLmVuZENoYXJhY3Rlcil8fHplLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJih6ZS51bmRlZmluZWQoaS5raW5kKXx8emUuc3RyaW5nKGkua2luZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShlbGV8fChlbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntsb2NhdGlvbjpuLG1lc3NhZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmSWsuaXMoaS5sb2NhdGlvbikmJnplLnN0cmluZyhpLm1lc3NhZ2UpfW8ociwiaXMiKSx0LmlzPXJ9KShlTXx8KGVNPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRXJyb3I9MSx0Lldhcm5pbmc9Mix0LkluZm9ybWF0aW9uPTMsdC5IaW50PTR9KSh0bGV8fCh0bGU9e30pKTsoZnVuY3Rpb24odCl7dC5Vbm5lY2Vzc2FyeT0xLHQuRGVwcmVjYXRlZD0yfSkocmxlfHwocmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChuKSYmemUuc3RyaW5nKG4uaHJlZil9byhlLCJpcyIpLHQuaXM9ZX0pKG5sZXx8KG5sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMsbCx1KXtsZXQgaD17cmFuZ2U6bixtZXNzYWdlOml9O3JldHVybiB6ZS5kZWZpbmVkKGEpJiYoaC5zZXZlcml0eT1hKSx6ZS5kZWZpbmVkKHMpJiYoaC5jb2RlPXMpLHplLmRlZmluZWQobCkmJihoLnNvdXJjZT1sKSx6ZS5kZWZpbmVkKHUpJiYoaC5yZWxhdGVkSW5mb3JtYXRpb249dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXt2YXIgaTtsZXQgYT1uO3JldHVybiB6ZS5kZWZpbmVkKGEpJiZOci5pcyhhLnJhbmdlKSYmemUuc3RyaW5nKGEubWVzc2FnZSkmJih6ZS5udW1iZXIoYS5zZXZlcml0eSl8fHplLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJih6ZS5pbnRlZ2VyKGEuY29kZSl8fHplLnN0cmluZyhhLmNvZGUpfHx6ZS51bmRlZmluZWQoYS5jb2RlKSkmJih6ZS51bmRlZmluZWQoYS5jb2RlRGVzY3JpcHRpb24pfHx6ZS5zdHJpbmcoKGk9YS5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJih6ZS5zdHJpbmcoYS5zb3VyY2UpfHx6ZS51bmRlZmluZWQoYS5zb3VyY2UpKSYmKHplLnVuZGVmaW5lZChhLnJlbGF0ZWRJbmZvcm1hdGlvbil8fHplLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sZU0uaXMpKX1vKHIsImlzIiksdC5pcz1yfSkoT2t8fChPaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSwuLi5hKXtsZXQgcz17dGl0bGU6bixjb21tYW5kOml9O3JldHVybiB6ZS5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYocy5hcmd1bWVudHM9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZ6ZS5zdHJpbmcoaS50aXRsZSkmJnplLnN0cmluZyhpLmNvbW1hbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShfZ3x8KF9nPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OnN9fW8oZSwicmVwbGFjZSIpLHQucmVwbGFjZT1lO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6c319byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIn19byhuLCJkZWwiKSx0LmRlbD1uO2Z1bmN0aW9uIGkoYSl7bGV0IHM9YTtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChzKSYmemUuc3RyaW5nKHMubmV3VGV4dCkmJk5yLmlzKHMucmFuZ2UpfW8oaSwiaXMiKSx0LmlzPWl9KShMZ3x8KExnPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtsYWJlbDpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249aSksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZ6ZS5zdHJpbmcoaS5sYWJlbCkmJih6ZS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKHplLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKHRNfHwodE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiB6ZS5zdHJpbmcobil9byhlLCJpcyIpLHQuaXM9ZX0pKERnfHwoRGc9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpsfX1vKGUsInJlcGxhY2UiKSx0LnJlcGxhY2U9ZTtmdW5jdGlvbiByKGEscyxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6bH19byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDpzfX1vKG4sImRlbCIpLHQuZGVsPW47ZnVuY3Rpb24gaShhKXtsZXQgcz1hO3JldHVybiBMZy5pcyhzKSYmKHRNLmlzKHMuYW5ub3RhdGlvbklkKXx8RGcuaXMocy5hbm5vdGF0aW9uSWQpKX1vKGksImlzIiksdC5pcz1pfSkoaWxlfHwoaWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dGV4dERvY3VtZW50Om4sZWRpdHM6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmb00uaXMoaS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGkuZWRpdHMpfW8ociwiaXMiKSx0LmlzPXJ9KShyTXx8KHJNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtraW5kOiJjcmVhdGUiLHVyaTpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkub3ZlcndyaXRlIT09dm9pZCAwfHxpLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1pKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmemUuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fHplLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHx6ZS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxEZy5pcyhpLmFubm90YXRpb25JZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShuTXx8KG5NPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOm4sbmV3VXJpOml9O3JldHVybiBhIT09dm9pZCAwJiYoYS5vdmVyd3JpdGUhPT12b2lkIDB8fGEuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPWEpLHMhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1zKSxsfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJyZW5hbWUiJiZ6ZS5zdHJpbmcoaS5vbGRVcmkpJiZ6ZS5zdHJpbmcoaS5uZXdVcmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8emUuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fHplLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fERnLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKGlNfHwoaU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2tpbmQ6ImRlbGV0ZSIsdXJpOm59O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYocy5vcHRpb25zPWkpLGEhPT12b2lkIDAmJihzLmFubm90YXRpb25JZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJkZWxldGUiJiZ6ZS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8emUuYm9vbGVhbihpLm9wdGlvbnMucmVjdXJzaXZlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fHplLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fERnLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKGFNfHwoYU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobi5jaGFuZ2VzIT09dm9pZCAwfHxuLmRvY3VtZW50Q2hhbmdlcyE9PXZvaWQgMCkmJihuLmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMHx8bi5kb2N1bWVudENoYW5nZXMuZXZlcnkoaT0+emUuc3RyaW5nKGkua2luZCk/bk0uaXMoaSl8fGlNLmlzKGkpfHxhTS5pcyhpKTpyTS5pcyhpKSkpfW8oZSwiaXMiKSx0LmlzPWV9KShzTXx8KHNNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJue3VyaTpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZ6ZS5zdHJpbmcoaS51cmkpfW8ociwiaXMiKSx0LmlzPXJ9KShhbGV8fChhbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bix2ZXJzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJnplLnN0cmluZyhpLnVyaSkmJnplLmludGVnZXIoaS52ZXJzaW9uKX1vKHIsImlzIiksdC5pcz1yfSkoc2xlfHwoc2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4sdmVyc2lvbjppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZ6ZS5zdHJpbmcoaS51cmkpJiYoaS52ZXJzaW9uPT09bnVsbHx8emUuaW50ZWdlcihpLnZlcnNpb24pKX1vKHIsImlzIiksdC5pcz1yfSkob018fChvTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt1cmk6bixsYW5ndWFnZUlkOmksdmVyc2lvbjphLHRleHQ6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmemUuc3RyaW5nKGkudXJpKSYmemUuc3RyaW5nKGkubGFuZ3VhZ2VJZCkmJnplLmludGVnZXIoaS52ZXJzaW9uKSYmemUuc3RyaW5nKGkudGV4dCl9byhyLCJpcyIpLHQuaXM9cn0pKG9sZXx8KG9sZT17fSkpOyhmdW5jdGlvbih0KXt0LlBsYWluVGV4dD0icGxhaW50ZXh0Iix0Lk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuPT09dC5QbGFpblRleHR8fG49PT10Lk1hcmtkb3dufW8oZSwiaXMiKSx0LmlzPWV9KShsTXx8KGxNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChyKSYmbE0uaXMobi5raW5kKSYmemUuc3RyaW5nKG4udmFsdWUpfW8oZSwiaXMiKSx0LmlzPWV9KShHMnx8KEcyPXt9KSk7KGZ1bmN0aW9uKHQpe3QuVGV4dD0xLHQuTWV0aG9kPTIsdC5GdW5jdGlvbj0zLHQuQ29uc3RydWN0b3I9NCx0LkZpZWxkPTUsdC5WYXJpYWJsZT02LHQuQ2xhc3M9Nyx0LkludGVyZmFjZT04LHQuTW9kdWxlPTksdC5Qcm9wZXJ0eT0xMCx0LlVuaXQ9MTEsdC5WYWx1ZT0xMix0LkVudW09MTMsdC5LZXl3b3JkPTE0LHQuU25pcHBldD0xNSx0LkNvbG9yPTE2LHQuRmlsZT0xNyx0LlJlZmVyZW5jZT0xOCx0LkZvbGRlcj0xOSx0LkVudW1NZW1iZXI9MjAsdC5Db25zdGFudD0yMSx0LlN0cnVjdD0yMix0LkV2ZW50PTIzLHQuT3BlcmF0b3I9MjQsdC5UeXBlUGFyYW1ldGVyPTI1fSkobGxlfHwobGxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuUGxhaW5UZXh0PTEsdC5TbmlwcGV0PTJ9KShjbGV8fChjbGU9e30pKTsoZnVuY3Rpb24odCl7dC5EZXByZWNhdGVkPTF9KSh1bGV8fCh1bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue25ld1RleHQ6bixpbnNlcnQ6aSxyZXBsYWNlOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJnplLnN0cmluZyhpLm5ld1RleHQpJiZOci5pcyhpLmluc2VydCkmJk5yLmlzKGkucmVwbGFjZSl9byhyLCJpcyIpLHQuaXM9cn0pKGhsZXx8KGhsZT17fSkpOyhmdW5jdGlvbih0KXt0LmFzSXM9MSx0LmFkanVzdEluZGVudGF0aW9uPTJ9KShmbGV8fChmbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYoemUuc3RyaW5nKG4uZGV0YWlsKXx8bi5kZXRhaWw9PT12b2lkIDApJiYoemUuc3RyaW5nKG4uZGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1vKGUsImlzIiksdC5pcz1lfSkoZGxlfHwoZGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2xhYmVsOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKHBsZXx8KHBsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue2l0ZW1zOnJ8fFtdLGlzSW5jb21wbGV0ZTohIW59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKG1sZXx8KG1sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1vKGUsImZyb21QbGFpblRleHQiKSx0LmZyb21QbGFpblRleHQ9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLnN0cmluZyhpKXx8emUub2JqZWN0TGl0ZXJhbChpKSYmemUuc3RyaW5nKGkubGFuZ3VhZ2UpJiZ6ZS5zdHJpbmcoaS52YWx1ZSl9byhyLCJpcyIpLHQuaXM9cn0pKFBrfHwoUGs9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiEhbiYmemUub2JqZWN0TGl0ZXJhbChuKSYmKEcyLmlzKG4uY29udGVudHMpfHxQay5pcyhuLmNvbnRlbnRzKXx8emUudHlwZWRBcnJheShuLmNvbnRlbnRzLFBrLmlzKSkmJihyLnJhbmdlPT09dm9pZCAwfHxOci5pcyhyLnJhbmdlKSl9byhlLCJpcyIpLHQuaXM9ZX0pKGdsZXx8KGdsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJuIG4/e2xhYmVsOnIsZG9jdW1lbnRhdGlvbjpufTp7bGFiZWw6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoeWxlfHwoeWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLC4uLmkpe2xldCBhPXtsYWJlbDpyfTtyZXR1cm4gemUuZGVmaW5lZChuKSYmKGEuZG9jdW1lbnRhdGlvbj1uKSx6ZS5kZWZpbmVkKGkpP2EucGFyYW1ldGVycz1pOmEucGFyYW1ldGVycz1bXSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKHZsZXx8KHZsZT17fSkpOyhmdW5jdGlvbih0KXt0LlRleHQ9MSx0LlJlYWQ9Mix0LldyaXRlPTN9KSh4bGV8fCh4bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4pe2xldCBpPXtyYW5nZTpyfTtyZXR1cm4gemUubnVtYmVyKG4pJiYoaS5raW5kPW4pLGl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoYmxlfHwoYmxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRmlsZT0xLHQuTW9kdWxlPTIsdC5OYW1lc3BhY2U9Myx0LlBhY2thZ2U9NCx0LkNsYXNzPTUsdC5NZXRob2Q9Nix0LlByb3BlcnR5PTcsdC5GaWVsZD04LHQuQ29uc3RydWN0b3I9OSx0LkVudW09MTAsdC5JbnRlcmZhY2U9MTEsdC5GdW5jdGlvbj0xMix0LlZhcmlhYmxlPTEzLHQuQ29uc3RhbnQ9MTQsdC5TdHJpbmc9MTUsdC5OdW1iZXI9MTYsdC5Cb29sZWFuPTE3LHQuQXJyYXk9MTgsdC5PYmplY3Q9MTksdC5LZXk9MjAsdC5OdWxsPTIxLHQuRW51bU1lbWJlcj0yMix0LlN0cnVjdD0yMyx0LkV2ZW50PTI0LHQuT3BlcmF0b3I9MjUsdC5UeXBlUGFyYW1ldGVyPTI2fSkod2xlfHwod2xlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRGVwcmVjYXRlZD0xfSkoVGxlfHwoVGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSxzKXtsZXQgbD17bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOmEscmFuZ2U6aX19O3JldHVybiBzJiYobC5jb250YWluZXJOYW1lPXMpLGx9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoa2xlfHwoa2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSl7cmV0dXJuIGEhPT12b2lkIDA/e25hbWU6cixraW5kOm4sbG9jYXRpb246e3VyaTppLHJhbmdlOmF9fTp7bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOml9fX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShFbGV8fChFbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzLGwsdSl7bGV0IGg9e25hbWU6bixkZXRhaWw6aSxraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpsfTtyZXR1cm4gdSE9PXZvaWQgMCYmKGguY2hpbGRyZW49dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZ6ZS5zdHJpbmcoaS5uYW1lKSYmemUubnVtYmVyKGkua2luZCkmJk5yLmlzKGkucmFuZ2UpJiZOci5pcyhpLnNlbGVjdGlvblJhbmdlKSYmKGkuZGV0YWlsPT09dm9pZCAwfHx6ZS5zdHJpbmcoaS5kZXRhaWwpKSYmKGkuZGVwcmVjYXRlZD09PXZvaWQgMHx8emUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfW8ociwiaXMiKSx0LmlzPXJ9KShTbGV8fChTbGU9e30pKTsoZnVuY3Rpb24odCl7dC5FbXB0eT0iIix0LlF1aWNrRml4PSJxdWlja2ZpeCIsdC5SZWZhY3Rvcj0icmVmYWN0b3IiLHQuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0Iix0LlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLHQuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIix0LlNvdXJjZT0ic291cmNlIix0LlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsdC5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwifSkoQ2xlfHwoQ2xlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuSW52b2tlZD0xLHQuQXV0b21hdGljPTJ9KShCa3x8KEJrPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtkaWFnbm9zdGljczpufTtyZXR1cm4gaSE9bnVsbCYmKHMub25seT1pKSxhIT1udWxsJiYocy50cmlnZ2VyS2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJnplLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxPay5pcykmJihpLm9ubHk9PT12b2lkIDB8fHplLnR5cGVkQXJyYXkoaS5vbmx5LHplLnN0cmluZykpJiYoaS50cmlnZ2VyS2luZD09PXZvaWQgMHx8aS50cmlnZ2VyS2luZD09PUJrLkludm9rZWR8fGkudHJpZ2dlcktpbmQ9PT1Cay5BdXRvbWF0aWMpfW8ociwiaXMiKSx0LmlzPXJ9KShBbGV8fChBbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e3RpdGxlOm59LGw9ITA7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj8obD0hMSxzLmtpbmQ9aSk6X2cuaXMoaSk/cy5jb21tYW5kPWk6cy5lZGl0PWksbCYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJnplLnN0cmluZyhpLnRpdGxlKSYmKGkuZGlhZ25vc3RpY3M9PT12b2lkIDB8fHplLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxPay5pcykpJiYoaS5raW5kPT09dm9pZCAwfHx6ZS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fF9nLmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8emUuYm9vbGVhbihpLmlzUHJlZmVycmVkKSkmJihpLmVkaXQ9PT12b2lkIDB8fHNNLmlzKGkuZWRpdCkpfW8ociwiaXMiKSx0LmlzPXJ9KShfbGV8fChfbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe2xldCBhPXtyYW5nZTpufTtyZXR1cm4gemUuZGVmaW5lZChpKSYmKGEuZGF0YT1pKSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJk5yLmlzKGkucmFuZ2UpJiYoemUudW5kZWZpbmVkKGkuY29tbWFuZCl8fF9nLmlzKGkuY29tbWFuZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShMbGV8fChMbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt0YWJTaXplOm4saW5zZXJ0U3BhY2VzOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJnplLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJnplLmJvb2xlYW4oaS5pbnNlcnRTcGFjZXMpfW8ociwiaXMiKSx0LmlzPXJ9KShEbGV8fChEbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue3JhbmdlOm4sdGFyZ2V0OmksZGF0YTphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZOci5pcyhpLnJhbmdlKSYmKHplLnVuZGVmaW5lZChpLnRhcmdldCl8fHplLnN0cmluZyhpLnRhcmdldCkpfW8ociwiaXMiKSx0LmlzPXJ9KShObGV8fChObGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLHBhcmVudDppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZOci5pcyhpLnJhbmdlKSYmKGkucGFyZW50PT09dm9pZCAwfHx0LmlzKGkucGFyZW50KSl9byhyLCJpcyIpLHQuaXM9cn0pKFJsZXx8KFJsZT17fSkpOyhmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZT0ibmFtZXNwYWNlIix0LnR5cGU9InR5cGUiLHQuY2xhc3M9ImNsYXNzIix0LmVudW09ImVudW0iLHQuaW50ZXJmYWNlPSJpbnRlcmZhY2UiLHQuc3RydWN0PSJzdHJ1Y3QiLHQudHlwZVBhcmFtZXRlcj0idHlwZVBhcmFtZXRlciIsdC5wYXJhbWV0ZXI9InBhcmFtZXRlciIsdC52YXJpYWJsZT0idmFyaWFibGUiLHQucHJvcGVydHk9InByb3BlcnR5Iix0LmVudW1NZW1iZXI9ImVudW1NZW1iZXIiLHQuZXZlbnQ9ImV2ZW50Iix0LmZ1bmN0aW9uPSJmdW5jdGlvbiIsdC5tZXRob2Q9Im1ldGhvZCIsdC5tYWNybz0ibWFjcm8iLHQua2V5d29yZD0ia2V5d29yZCIsdC5tb2RpZmllcj0ibW9kaWZpZXIiLHQuY29tbWVudD0iY29tbWVudCIsdC5zdHJpbmc9InN0cmluZyIsdC5udW1iZXI9Im51bWJlciIsdC5yZWdleHA9InJlZ2V4cCIsdC5vcGVyYXRvcj0ib3BlcmF0b3IiLHQuZGVjb3JhdG9yPSJkZWNvcmF0b3IifSkoTWxlfHwoTWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIix0LmRlZmluaXRpb249ImRlZmluaXRpb24iLHQucmVhZG9ubHk9InJlYWRvbmx5Iix0LnN0YXRpYz0ic3RhdGljIix0LmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLHQuYWJzdHJhY3Q9ImFic3RyYWN0Iix0LmFzeW5jPSJhc3luYyIsdC5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsdC5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIix0LmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShJbGV8fChJbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKG4pJiYobi5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIG4ucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShuLmRhdGEpJiYobi5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiBuLmRhdGFbMF09PSJudW1iZXIiKX1vKGUsImlzIiksdC5pcz1lfSkoT2xlfHwoT2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bix0ZXh0Oml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJk5yLmlzKGkucmFuZ2UpJiZ6ZS5zdHJpbmcoaS50ZXh0KX1vKHIsImlzIiksdC5pcz1yfSkoUGxlfHwoUGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntyYW5nZTpuLHZhcmlhYmxlTmFtZTppLGNhc2VTZW5zaXRpdmVMb29rdXA6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmTnIuaXMoaS5yYW5nZSkmJnplLmJvb2xlYW4oaS5jYXNlU2Vuc2l0aXZlTG9va3VwKSYmKHplLnN0cmluZyhpLnZhcmlhYmxlTmFtZSl8fGkudmFyaWFibGVOYW1lPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkoQmxlfHwoQmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bixleHByZXNzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJk5yLmlzKGkucmFuZ2UpJiYoemUuc3RyaW5nKGkuZXhwcmVzc2lvbil8fGkuZXhwcmVzc2lvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKEZsZXx8KEZsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue2ZyYW1lSWQ6bixzdG9wcGVkTG9jYXRpb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmTnIuaXMobi5zdG9wcGVkTG9jYXRpb24pfW8ociwiaXMiKSx0LmlzPXJ9KSh6bGV8fCh6bGU9e30pKTsoZnVuY3Rpb24odCl7dC5UeXBlPTEsdC5QYXJhbWV0ZXI9MjtmdW5jdGlvbiBlKHIpe3JldHVybiByPT09MXx8cj09PTJ9byhlLCJpcyIpLHQuaXM9ZX0pKGNNfHwoY009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm57dmFsdWU6bn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8emUuc3RyaW5nKGkudG9vbHRpcCl8fEcyLmlzKGkudG9vbHRpcCkpJiYoaS5sb2NhdGlvbj09PXZvaWQgMHx8SWsuaXMoaS5sb2NhdGlvbikpJiYoaS5jb21tYW5kPT09dm9pZCAwfHxfZy5pcyhpLmNvbW1hbmQpKX1vKHIsImlzIiksdC5pcz1yfSkodU18fCh1TT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17cG9zaXRpb246bixsYWJlbDppfTtyZXR1cm4gYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLm9iamVjdExpdGVyYWwoaSkmJlhyLmlzKGkucG9zaXRpb24pJiYoemUuc3RyaW5nKGkubGFiZWwpfHx6ZS50eXBlZEFycmF5KGkubGFiZWwsdU0uaXMpKSYmKGkua2luZD09PXZvaWQgMHx8Y00uaXMoaS5raW5kKSkmJmkudGV4dEVkaXRzPT09dm9pZCAwfHx6ZS50eXBlZEFycmF5KGkudGV4dEVkaXRzLExnLmlzKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8emUuc3RyaW5nKGkudG9vbHRpcCl8fEcyLmlzKGkudG9vbHRpcCkpJiYoaS5wYWRkaW5nTGVmdD09PXZvaWQgMHx8emUuYm9vbGVhbihpLnBhZGRpbmdMZWZ0KSkmJihpLnBhZGRpbmdSaWdodD09PXZvaWQgMHx8emUuYm9vbGVhbihpLnBhZGRpbmdSaWdodCkpfW8ociwiaXMiKSx0LmlzPXJ9KShHbGV8fChHbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57a2luZDoic25pcHBldCIsdmFsdWU6cn19byhlLCJjcmVhdGVTbmlwcGV0IiksdC5jcmVhdGVTbmlwcGV0PWV9KSgkbGV8fCgkbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhKXtyZXR1cm57aW5zZXJ0VGV4dDpyLGZpbHRlclRleHQ6bixyYW5nZTppLGNvbW1hbmQ6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoVmxlfHwoVmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2l0ZW1zOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKFVsZXx8KFVsZT17fSkpOyhmdW5jdGlvbih0KXt0Lkludm9rZWQ9MCx0LkF1dG9tYXRpYz0xfSkoSGxlfHwoSGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57cmFuZ2U6cix0ZXh0Om59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKFdsZXx8KFdsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue3RyaWdnZXJLaW5kOnIsc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShZbGV8fChZbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKG4pJiZaUi5pcyhuLnVyaSkmJnplLnN0cmluZyhuLm5hbWUpfW8oZSwiaXMiKSx0LmlzPWV9KShxbGV8fChxbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCx1KXtyZXR1cm4gbmV3IGhNKGEscyxsLHUpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGEpe2xldCBzPWE7cmV0dXJuISEoemUuZGVmaW5lZChzKSYmemUuc3RyaW5nKHMudXJpKSYmKHplLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHx6ZS5zdHJpbmcocy5sYW5ndWFnZUlkKSkmJnplLnVpbnRlZ2VyKHMubGluZUNvdW50KSYmemUuZnVuYyhzLmdldFRleHQpJiZ6ZS5mdW5jKHMucG9zaXRpb25BdCkmJnplLmZ1bmMocy5vZmZzZXRBdCkpfW8ociwiaXMiKSx0LmlzPXI7ZnVuY3Rpb24gbihhLHMpe2xldCBsPWEuZ2V0VGV4dCgpLHU9aShzLChmLGQpPT57bGV0IHA9Zi5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/Zi5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLGg9bC5sZW5ndGg7Zm9yKGxldCBmPXUubGVuZ3RoLTE7Zj49MDtmLS0pe2xldCBkPXVbZl0scD1hLm9mZnNldEF0KGQucmFuZ2Uuc3RhcnQpLG09YS5vZmZzZXRBdChkLnJhbmdlLmVuZCk7aWYobTw9aClsPWwuc3Vic3RyaW5nKDAscCkrZC5uZXdUZXh0K2wuc3Vic3RyaW5nKG0sbC5sZW5ndGgpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7aD1wfXJldHVybiBsfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1uO2Z1bmN0aW9uIGkoYSxzKXtpZihhLmxlbmd0aDw9MSlyZXR1cm4gYTtsZXQgbD1hLmxlbmd0aC8yfDAsdT1hLnNsaWNlKDAsbCksaD1hLnNsaWNlKGwpO2kodSxzKSxpKGgscyk7bGV0IGY9MCxkPTAscD0wO2Zvcig7Zjx1Lmxlbmd0aCYmZDxoLmxlbmd0aDspcyh1W2ZdLGhbZF0pPD0wP2FbcCsrXT11W2YrK106YVtwKytdPWhbZCsrXTtmb3IoO2Y8dS5sZW5ndGg7KWFbcCsrXT11W2YrK107Zm9yKDtkPGgubGVuZ3RoOylhW3ArK109aFtkKytdO3JldHVybiBhfW8oaSwibWVyZ2VTb3J0Iil9KShYbGV8fChYbGU9e30pKTtoTT1jbGFzc3tzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHI9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtuJiYoZS5wdXNoKGkpLG49ITEpO2xldCBhPXIuY2hhckF0KGkpO249YT09PSJcciJ8fGE9PT1gCmAsYT09PSJcciImJmkrMTxyLmxlbmd0aCYmci5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfW4mJnIubGVuZ3RoPjAmJmUucHVzaChyLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT1yLmxlbmd0aDtpZihpPT09MClyZXR1cm4gWHIuY3JlYXRlKDAsZSk7Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBYci5jcmVhdGUoYSxlLXJbYV0pfW9mZnNldEF0KGUpe2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXIubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj1yW2UubGluZV0saT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9fTsoZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiByKG0pe3JldHVybiB0eXBlb2YgbTwidSJ9byhyLCJkZWZpbmVkIiksdC5kZWZpbmVkPXI7ZnVuY3Rpb24gbihtKXtyZXR1cm4gdHlwZW9mIG0+InUifW8obiwidW5kZWZpbmVkIiksdC51bmRlZmluZWQ9bjtmdW5jdGlvbiBpKG0pe3JldHVybiBtPT09ITB8fG09PT0hMX1vKGksImJvb2xlYW4iKSx0LmJvb2xlYW49aTtmdW5jdGlvbiBhKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBTdHJpbmddIn1vKGEsInN0cmluZyIpLHQuc3RyaW5nPWE7ZnVuY3Rpb24gcyhtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSJ9byhzLCJudW1iZXIiKSx0Lm51bWJlcj1zO2Z1bmN0aW9uIGwobSxnLHkpe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmZzw9bSYmbTw9eX1vKGwsIm51bWJlclJhbmdlIiksdC5udW1iZXJSYW5nZT1sO2Z1bmN0aW9uIHUobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9bSYmbTw9MjE0NzQ4MzY0N31vKHUsImludGVnZXIiKSx0LmludGVnZXI9dTtmdW5jdGlvbiBoKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9bSYmbTw9MjE0NzQ4MzY0N31vKGgsInVpbnRlZ2VyIiksdC51aW50ZWdlcj1oO2Z1bmN0aW9uIGYobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9byhmLCJmdW5jIiksdC5mdW5jPWY7ZnVuY3Rpb24gZChtKXtyZXR1cm4gbSE9PW51bGwmJnR5cGVvZiBtPT0ib2JqZWN0In1vKGQsIm9iamVjdExpdGVyYWwiKSx0Lm9iamVjdExpdGVyYWw9ZDtmdW5jdGlvbiBwKG0sZyl7cmV0dXJuIEFycmF5LmlzQXJyYXkobSkmJm0uZXZlcnkoZyl9byhwLCJ0eXBlZEFycmF5IiksdC50eXBlZEFycmF5PXB9KSh6ZXx8KHplPXt9KSl9KTt2YXIgJDIsVjIseDAsYjAsZE0sTmcsRms9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmTSgpO1pvKCk7emwoKTskMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJDc3ROb2RlQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5ub2RlU3RhY2s9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoLTFdfWJ1aWxkUm9vdE5vZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGU9bmV3IE5nKGUpLHRoaXMucm9vdE5vZGUucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMubm9kZVN0YWNrPVt0aGlzLnJvb3ROb2RlXSx0aGlzLnJvb3ROb2RlfWJ1aWxkQ29tcG9zaXRlTm9kZShlKXtsZXQgcj1uZXcgYjA7cmV0dXJuIHIuZ3JhbW1hclNvdXJjZT1lLHIucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gociksdGhpcy5ub2RlU3RhY2sucHVzaChyKSxyfWJ1aWxkTGVhZk5vZGUoZSxyKXtsZXQgbj1uZXcgeDAoZS5zdGFydE9mZnNldCxlLmltYWdlLmxlbmd0aCxlZyhlKSxlLnRva2VuVHlwZSwhMSk7cmV0dXJuIG4uZ3JhbW1hclNvdXJjZT1yLG4ucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobiksbn1yZW1vdmVOb2RlKGUpe2xldCByPWUuY29udGFpbmVyO2lmKHIpe2xldCBuPXIuY29udGVudC5pbmRleE9mKGUpO24+PTAmJnIuY29udGVudC5zcGxpY2UobiwxKX19Y29uc3RydWN0KGUpe2xldCByPXRoaXMuY3VycmVudDt0eXBlb2YgZS4kdHlwZT09InN0cmluZyImJih0aGlzLmN1cnJlbnQuYXN0Tm9kZT1lKSxlLiRjc3ROb2RlPXI7bGV0IG49dGhpcy5ub2RlU3RhY2sucG9wKCk7bj8uY29udGVudC5sZW5ndGg9PT0wJiZ0aGlzLnJlbW92ZU5vZGUobil9YWRkSGlkZGVuVG9rZW5zKGUpe2ZvcihsZXQgciBvZiBlKXtsZXQgbj1uZXcgeDAoci5zdGFydE9mZnNldCxyLmltYWdlLmxlbmd0aCxlZyhyKSxyLnRva2VuVHlwZSwhMCk7bi5yb290PXRoaXMucm9vdE5vZGUsdGhpcy5hZGRIaWRkZW5Ub2tlbih0aGlzLnJvb3ROb2RlLG4pfX1hZGRIaWRkZW5Ub2tlbihlLHIpe2xldHtvZmZzZXQ6bixlbmQ6aX09cjtmb3IobGV0IGE9MDthPGUuY29udGVudC5sZW5ndGg7YSsrKXtsZXQgcz1lLmNvbnRlbnRbYV0se29mZnNldDpsLGVuZDp1fT1zO2lmKGhvKHMpJiZuPmwmJmk8dSl7dGhpcy5hZGRIaWRkZW5Ub2tlbihzLHIpO3JldHVybn1lbHNlIGlmKGk8PWwpe2UuY29udGVudC5zcGxpY2UoYSwwLHIpO3JldHVybn19ZS5jb250ZW50LnB1c2gocil9fSxWMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdENzdE5vZGUiKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfWdldCBmZWF0dXJlKCl7cmV0dXJuIHRoaXMuZ3JhbW1hclNvdXJjZX1nZXQgaGlkZGVuKCl7cmV0dXJuITF9Z2V0IGFzdE5vZGUoKXt2YXIgZSxyO2xldCBuPXR5cGVvZigoZT10aGlzLl9hc3ROb2RlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuJHR5cGUpPT0ic3RyaW5nIj90aGlzLl9hc3ROb2RlOihyPXRoaXMuY29udGFpbmVyKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuYXN0Tm9kZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBBU1QgZWxlbWVudCIpO3JldHVybiBufXNldCBhc3ROb2RlKGUpe3RoaXMuX2FzdE5vZGU9ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmFzdE5vZGV9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5yb290LmZ1bGxUZXh0LnN1YnN0cmluZyh0aGlzLm9mZnNldCx0aGlzLmVuZCl9fSx4MD1jbGFzcyBleHRlbmRzIFYye3N0YXRpY3tvKHRoaXMsIkxlYWZDc3ROb2RlSW1wbCIpfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofWdldCBlbmQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0K3RoaXMuX2xlbmd0aH1nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1nZXQgdG9rZW5UeXBlKCl7cmV0dXJuIHRoaXMuX3Rva2VuVHlwZX1nZXQgcmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmFuZ2V9Y29uc3RydWN0b3IoZSxyLG4saSxhPSExKXtzdXBlcigpLHRoaXMuX2hpZGRlbj1hLHRoaXMuX29mZnNldD1lLHRoaXMuX3Rva2VuVHlwZT1pLHRoaXMuX2xlbmd0aD1yLHRoaXMuX3JhbmdlPW59fSxiMD1jbGFzcyBleHRlbmRzIFYye3N0YXRpY3tvKHRoaXMsIkNvbXBvc2l0ZUNzdE5vZGVJbXBsIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29udGVudD1uZXcgZE0odGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY29udGVudH1nZXQgb2Zmc2V0KCl7dmFyIGUscjtyZXR1cm4ocj0oZT10aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9mZnNldCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMub2Zmc2V0fWdldCBlbmQoKXt2YXIgZSxyO3JldHVybihyPShlPXRoaXMubGFzdE5vbkhpZGRlbk5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5lbmQpIT09bnVsbCYmciE9PXZvaWQgMD9yOjB9Z2V0IHJhbmdlKCl7bGV0IGU9dGhpcy5maXJzdE5vbkhpZGRlbk5vZGUscj10aGlzLmxhc3ROb25IaWRkZW5Ob2RlO2lmKGUmJnIpe2lmKHRoaXMuX3JhbmdlQ2FjaGU9PT12b2lkIDApe2xldHtyYW5nZTpufT1lLHtyYW5nZTppfT1yO3RoaXMuX3JhbmdlQ2FjaGU9e3N0YXJ0Om4uc3RhcnQsZW5kOmkuZW5kLmxpbmU8bi5zdGFydC5saW5lP24uc3RhcnQ6aS5lbmR9fXJldHVybiB0aGlzLl9yYW5nZUNhY2hlfWVsc2UgcmV0dXJue3N0YXJ0OlhyLmNyZWF0ZSgwLDApLGVuZDpYci5jcmVhdGUoMCwwKX19Z2V0IGZpcnN0Tm9uSGlkZGVuTm9kZSgpe2ZvcihsZXQgZSBvZiB0aGlzLmNvbnRlbnQpaWYoIWUuaGlkZGVuKXJldHVybiBlO3JldHVybiB0aGlzLmNvbnRlbnRbMF19Z2V0IGxhc3ROb25IaWRkZW5Ob2RlKCl7Zm9yKGxldCBlPXRoaXMuY29udGVudC5sZW5ndGgtMTtlPj0wO2UtLSl7bGV0IHI9dGhpcy5jb250ZW50W2VdO2lmKCFyLmhpZGRlbilyZXR1cm4gcn1yZXR1cm4gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV19fSxkTT1jbGFzcyB0IGV4dGVuZHMgQXJyYXl7c3RhdGlje28odGhpcywiQ3N0Tm9kZUNvbnRhaW5lciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0LnByb3RvdHlwZSl9cHVzaCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnB1c2goLi4uZSl9dW5zaGlmdCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnVuc2hpZnQoLi4uZSl9c3BsaWNlKGUsciwuLi5uKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKG4pLHN1cGVyLnNwbGljZShlLHIsLi4ubil9YWRkUGFyZW50cyhlKXtmb3IobGV0IHIgb2YgZSlyLmNvbnRhaW5lcj10aGlzLnBhcmVudH19LE5nPWNsYXNzIGV4dGVuZHMgYjB7c3RhdGlje28odGhpcywiUm9vdENzdE5vZGVJbXBsIil9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsdGhpcy5lbmQpfWdldCBmdWxsVGV4dCgpe3JldHVybiB0aGlzLl90ZXh0fWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fdGV4dD0iIix0aGlzLl90ZXh0PWU/PyIifX19KTtmdW5jdGlvbiBwTSh0KXtyZXR1cm4gdC4kdHlwZT09PXprfXZhciB6ayxqbGUsS2xlLFUyLEgyLEdrLFJnLFcyLFlGZSxtTSxZMj1NKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7cW9lKCk7QmMoKTtWbCgpO29zKCk7RmsoKTt6az1TeW1ib2woIkRhdGF0eXBlIik7byhwTSwiaXNEYXRhVHlwZU5vZGUiKTtqbGU9Ilx1MjAwQiIsS2xlPW8odD0+dC5lbmRzV2l0aChqbGUpP3Q6dCtqbGUsIndpdGhSdWxlU3VmZml4IiksVTI9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RMYW5naXVtUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fdW5vcmRlcmVkR3JvdXBzPW5ldyBNYXAsdGhpcy5sZXhlcj1lLnBhcnNlci5MZXhlcjtsZXQgcj10aGlzLmxleGVyLmRlZmluaXRpb247dGhpcy53cmFwcGVyPW5ldyBtTShyLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnBhcnNlci5QYXJzZXJDb25maWcpLHtlcnJvck1lc3NhZ2VQcm92aWRlcjplLnBhcnNlci5QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcn0pKX1hbHRlcm5hdGl2ZXMoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9yKGUscil9b3B0aW9uYWwoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9wdGlvbihlLHIpfW1hbnkoZSxyKXt0aGlzLndyYXBwZXIud3JhcE1hbnkoZSxyKX1hdExlYXN0T25lKGUscil7dGhpcy53cmFwcGVyLndyYXBBdExlYXN0T25lKGUscil9aXNSZWNvcmRpbmcoKXtyZXR1cm4gdGhpcy53cmFwcGVyLklTX1JFQ09SRElOR31nZXQgdW5vcmRlcmVkR3JvdXBzKCl7cmV0dXJuIHRoaXMuX3Vub3JkZXJlZEdyb3Vwc31nZXRSdWxlU3RhY2soKXtyZXR1cm4gdGhpcy53cmFwcGVyLlJVTEVfU1RBQ0t9ZmluYWxpemUoKXt0aGlzLndyYXBwZXIud3JhcFNlbGZBbmFseXNpcygpfX0sSDI9Y2xhc3MgZXh0ZW5kcyBVMntzdGF0aWN7byh0aGlzLCJMYW5naXVtUGFyc2VyIil9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5vZGVCdWlsZGVyPW5ldyAkMix0aGlzLnN0YWNrPVtdLHRoaXMuYXNzaWdubWVudE1hcD1uZXcgTWFwLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXIsdGhpcy5jb252ZXJ0ZXI9ZS5wYXJzZXIuVmFsdWVDb252ZXJ0ZXIsdGhpcy5hc3RSZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb259cnVsZShlLHIpe2xldCBuPWUuZnJhZ21lbnQ/dm9pZCAwOm0yKGUpP3prOmwwKGUpLGk9dGhpcy53cmFwcGVyLkRFRklORV9SVUxFKEtsZShlLm5hbWUpLHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihuLHIpLmJpbmQodGhpcykpO3JldHVybiBlLmVudHJ5JiYodGhpcy5tYWluUnVsZT1pKSxpfXBhcnNlKGUpe3RoaXMubm9kZUJ1aWxkZXIuYnVpbGRSb290Tm9kZShlKTtsZXQgcj10aGlzLmxleGVyLnRva2VuaXplKGUpO3RoaXMud3JhcHBlci5pbnB1dD1yLnRva2VucztsZXQgbj10aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KTtyZXR1cm4gdGhpcy5ub2RlQnVpbGRlci5hZGRIaWRkZW5Ub2tlbnMoci5oaWRkZW4pLHRoaXMudW5vcmRlcmVkR3JvdXBzLmNsZWFyKCkse3ZhbHVlOm4sbGV4ZXJFcnJvcnM6ci5lcnJvcnMscGFyc2VyRXJyb3JzOnRoaXMud3JhcHBlci5lcnJvcnN9fXN0YXJ0SW1wbGVtZW50YXRpb24oZSxyKXtyZXR1cm4gbj0+e2lmKCF0aGlzLmlzUmVjb3JkaW5nKCkpe2xldCBhPXskdHlwZTplfTt0aGlzLnN0YWNrLnB1c2goYSksZT09PXprJiYoYS52YWx1ZT0iIil9bGV0IGk7dHJ5e2k9cihuKX1jYXRjaHtpPXZvaWQgMH1yZXR1cm4hdGhpcy5pc1JlY29yZGluZygpJiZpPT09dm9pZCAwJiYoaT10aGlzLmNvbnN0cnVjdCgpKSxpfX1jb25zdW1lKGUscixuKXtsZXQgaT10aGlzLndyYXBwZXIud3JhcENvbnN1bWUoZSxyKTtpZighdGhpcy5pc1JlY29yZGluZygpJiZ0aGlzLmlzVmFsaWRUb2tlbihpKSl7bGV0IGE9dGhpcy5ub2RlQnVpbGRlci5idWlsZExlYWZOb2RlKGksbikse2Fzc2lnbm1lbnQ6cyxpc0Nyb3NzUmVmOmx9PXRoaXMuZ2V0QXNzaWdubWVudChuKSx1PXRoaXMuY3VycmVudDtpZihzKXtsZXQgaD1lbChuKT9pLmltYWdlOnRoaXMuY29udmVydGVyLmNvbnZlcnQoaS5pbWFnZSxhKTt0aGlzLmFzc2lnbihzLm9wZXJhdG9yLHMuZmVhdHVyZSxoLGEsbCl9ZWxzZSBpZihwTSh1KSl7bGV0IGg9aS5pbWFnZTtlbChuKXx8KGg9dGhpcy5jb252ZXJ0ZXIuY29udmVydChoLGEpLnRvU3RyaW5nKCkpLHUudmFsdWUrPWh9fX1pc1ZhbGlkVG9rZW4oZSl7cmV0dXJuIWUuaXNJbnNlcnRlZEluUmVjb3ZlcnkmJiFpc05hTihlLnN0YXJ0T2Zmc2V0KSYmdHlwZW9mIGUuZW5kT2Zmc2V0PT0ibnVtYmVyIiYmIWlzTmFOKGUuZW5kT2Zmc2V0KX1zdWJydWxlKGUscixuLGkpe2xldCBhO3RoaXMuaXNSZWNvcmRpbmcoKXx8KGE9dGhpcy5ub2RlQnVpbGRlci5idWlsZENvbXBvc2l0ZU5vZGUobikpO2xldCBzPXRoaXMud3JhcHBlci53cmFwU3VicnVsZShlLHIsaSk7IXRoaXMuaXNSZWNvcmRpbmcoKSYmYSYmYS5sZW5ndGg+MCYmdGhpcy5wZXJmb3JtU3VicnVsZUFzc2lnbm1lbnQocyxuLGEpfXBlcmZvcm1TdWJydWxlQXNzaWdubWVudChlLHIsbil7bGV0e2Fzc2lnbm1lbnQ6aSxpc0Nyb3NzUmVmOmF9PXRoaXMuZ2V0QXNzaWdubWVudChyKTtpZihpKXRoaXMuYXNzaWduKGkub3BlcmF0b3IsaS5mZWF0dXJlLGUsbixhKTtlbHNlIGlmKCFpKXtsZXQgcz10aGlzLmN1cnJlbnQ7aWYocE0ocykpcy52YWx1ZSs9ZS50b1N0cmluZygpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiJiZlKXtsZXQgbD1lLiR0eXBlLHU9dGhpcy5hc3NpZ25XaXRob3V0T3ZlcnJpZGUoZSxzKTtsJiYodS4kdHlwZT1sKTtsZXQgaD11O3RoaXMuc3RhY2sucG9wKCksdGhpcy5zdGFjay5wdXNoKGgpfX19YWN0aW9uKGUscil7aWYoIXRoaXMuaXNSZWNvcmRpbmcoKSl7bGV0IG49dGhpcy5jdXJyZW50O2lmKCFuLiRjc3ROb2RlJiZyLmZlYXR1cmUmJnIub3BlcmF0b3Ipe249dGhpcy5jb25zdHJ1Y3QoITEpO2xldCBhPW4uJGNzdE5vZGUuZmVhdHVyZTt0aGlzLm5vZGVCdWlsZGVyLmJ1aWxkQ29tcG9zaXRlTm9kZShhKX1sZXQgaT17JHR5cGU6ZX07dGhpcy5zdGFjay5wb3AoKSx0aGlzLnN0YWNrLnB1c2goaSksci5mZWF0dXJlJiZyLm9wZXJhdG9yJiZ0aGlzLmFzc2lnbihyLm9wZXJhdG9yLHIuZmVhdHVyZSxuLG4uJGNzdE5vZGUsITEpfX1jb25zdHJ1Y3QoZT0hMCl7aWYodGhpcy5pc1JlY29yZGluZygpKXJldHVybjtsZXQgcj10aGlzLmN1cnJlbnQ7cmV0dXJuIEZUKHIpLHRoaXMubm9kZUJ1aWxkZXIuY29uc3RydWN0KHIpLGUmJnRoaXMuc3RhY2sucG9wKCkscE0ocik/dGhpcy5jb252ZXJ0ZXIuY29udmVydChyLnZhbHVlLHIuJGNzdE5vZGUpOihVTih0aGlzLmFzdFJlZmxlY3Rpb24scikscil9Z2V0QXNzaWdubWVudChlKXtpZighdGhpcy5hc3NpZ25tZW50TWFwLmhhcyhlKSl7bGV0IHI9bjAoZSxHbCk7dGhpcy5hc3NpZ25tZW50TWFwLnNldChlLHthc3NpZ25tZW50OnIsaXNDcm9zc1JlZjpyP3IwKHIudGVybWluYWwpOiExfSl9cmV0dXJuIHRoaXMuYXNzaWdubWVudE1hcC5nZXQoZSl9YXNzaWduKGUscixuLGksYSl7bGV0IHM9dGhpcy5jdXJyZW50LGw7c3dpdGNoKGEmJnR5cGVvZiBuPT0ic3RyaW5nIj9sPXRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKHMscixpLG4pOmw9bixlKXtjYXNlIj0iOntzW3JdPWw7YnJlYWt9Y2FzZSI/PSI6e3Nbcl09ITA7YnJlYWt9Y2FzZSIrPSI6QXJyYXkuaXNBcnJheShzW3JdKXx8KHNbcl09W10pLHNbcl0ucHVzaChsKX19YXNzaWduV2l0aG91dE92ZXJyaWRlKGUscil7Zm9yKGxldFtuLGldb2YgT2JqZWN0LmVudHJpZXMocikpe2xldCBhPWVbbl07YT09PXZvaWQgMD9lW25dPWk6QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShpKSYmKGkucHVzaCguLi5hKSxlW25dPWkpfXJldHVybiBlfWdldCBkZWZpbml0aW9uRXJyb3JzKCl7cmV0dXJuIHRoaXMud3JhcHBlci5kZWZpbml0aW9uRXJyb3JzfX0sR2s9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2UoZSl7cmV0dXJuIFh1LmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2UoZSl9YnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2UoZSl7cmV0dXJuIFh1LmJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKGUpfWJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKGUpe3JldHVybiBYdS5idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShlKX1idWlsZEVhcmx5RXhpdE1lc3NhZ2UoZSl7cmV0dXJuIFh1LmJ1aWxkRWFybHlFeGl0TWVzc2FnZShlKX19LFJnPWNsYXNzIGV4dGVuZHMgR2t7c3RhdGlje28odGhpcywiTGFuZ2l1bVBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIil9YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6ZSxhY3R1YWw6cn0pe3JldHVybmBFeHBlY3RpbmcgJHtlLkxBQkVMPyJgIitlLkxBQkVMKyJgIjplLm5hbWUuZW5kc1dpdGgoIjpLVyIpP2BrZXl3b3JkICcke2UubmFtZS5zdWJzdHJpbmcoMCxlLm5hbWUubGVuZ3RoLTMpfSdgOmB0b2tlbiBvZiB0eXBlICcke2UubmFtZX0nYH0gYnV0IGZvdW5kIFxgJHtyLmltYWdlfVxgLmB9YnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmV9KXtyZXR1cm5gRXhwZWN0aW5nIGVuZCBvZiBmaWxlIGJ1dCBmb3VuZCBcYCR7ZS5pbWFnZX1cYC5gfX0sVzI9Y2xhc3MgZXh0ZW5kcyBVMntzdGF0aWN7byh0aGlzLCJMYW5naXVtQ29tcGxldGlvblBhcnNlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnRva2Vucz1bXSx0aGlzLmVsZW1lbnRTdGFjaz1bXSx0aGlzLmxhc3RFbGVtZW50U3RhY2s9W10sdGhpcy5uZXh0VG9rZW5JbmRleD0wLHRoaXMuc3RhY2tTaXplPTB9YWN0aW9uKCl7fWNvbnN0cnVjdCgpe31wYXJzZShlKXt0aGlzLnJlc2V0U3RhdGUoKTtsZXQgcj10aGlzLmxleGVyLnRva2VuaXplKGUpO3JldHVybiB0aGlzLnRva2Vucz1yLnRva2Vucyx0aGlzLndyYXBwZXIuaW5wdXQ9Wy4uLnRoaXMudG9rZW5zXSx0aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KSx0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpLHt0b2tlbnM6dGhpcy50b2tlbnMsZWxlbWVudFN0YWNrOlsuLi50aGlzLmxhc3RFbGVtZW50U3RhY2tdLHRva2VuSW5kZXg6dGhpcy5uZXh0VG9rZW5JbmRleH19cnVsZShlLHIpe2xldCBuPXRoaXMud3JhcHBlci5ERUZJTkVfUlVMRShLbGUoZS5uYW1lKSx0aGlzLnN0YXJ0SW1wbGVtZW50YXRpb24ocikuYmluZCh0aGlzKSk7cmV0dXJuIGUuZW50cnkmJih0aGlzLm1haW5SdWxlPW4pLG59cmVzZXRTdGF0ZSgpe3RoaXMuZWxlbWVudFN0YWNrPVtdLHRoaXMubGFzdEVsZW1lbnRTdGFjaz1bXSx0aGlzLm5leHRUb2tlbkluZGV4PTAsdGhpcy5zdGFja1NpemU9MH1zdGFydEltcGxlbWVudGF0aW9uKGUpe3JldHVybiByPT57bGV0IG49dGhpcy5rZWVwU3RhY2tTaXplKCk7dHJ5e2Uocil9ZmluYWxseXt0aGlzLnJlc2V0U3RhY2tTaXplKG4pfX19cmVtb3ZlVW5leHBlY3RlZEVsZW1lbnRzKCl7dGhpcy5lbGVtZW50U3RhY2suc3BsaWNlKHRoaXMuc3RhY2tTaXplKX1rZWVwU3RhY2tTaXplKCl7bGV0IGU9dGhpcy5lbGVtZW50U3RhY2subGVuZ3RoO3JldHVybiB0aGlzLnN0YWNrU2l6ZT1lLGV9cmVzZXRTdGFja1NpemUoZSl7dGhpcy5yZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKSx0aGlzLnN0YWNrU2l6ZT1lfWNvbnN1bWUoZSxyLG4pe3RoaXMud3JhcHBlci53cmFwQ29uc3VtZShlLHIpLHRoaXMuaXNSZWNvcmRpbmcoKXx8KHRoaXMubGFzdEVsZW1lbnRTdGFjaz1bLi4udGhpcy5lbGVtZW50U3RhY2ssbl0sdGhpcy5uZXh0VG9rZW5JbmRleD10aGlzLmN1cnJJZHgrMSl9c3VicnVsZShlLHIsbixpKXt0aGlzLmJlZm9yZShuKSx0aGlzLndyYXBwZXIud3JhcFN1YnJ1bGUoZSxyLGkpLHRoaXMuYWZ0ZXIobil9YmVmb3JlKGUpe3RoaXMuaXNSZWNvcmRpbmcoKXx8dGhpcy5lbGVtZW50U3RhY2sucHVzaChlKX1hZnRlcihlKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgcj10aGlzLmVsZW1lbnRTdGFjay5sYXN0SW5kZXhPZihlKTtyPj0wJiZ0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2Uocil9fWdldCBjdXJySWR4KCl7cmV0dXJuIHRoaXMud3JhcHBlci5jdXJySWR4fX0sWUZlPXtyZWNvdmVyeUVuYWJsZWQ6ITAsbm9kZUxvY2F0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczohMCxlcnJvck1lc3NhZ2VQcm92aWRlcjpuZXcgUmd9LG1NPWNsYXNzIGV4dGVuZHMgTzJ7c3RhdGlje28odGhpcywiQ2hldnJvdGFpbldyYXBwZXIiKX1jb25zdHJ1Y3RvcihlLHIpe2xldCBuPXImJiJtYXhMb29rYWhlYWQiaW4gcjtzdXBlcihlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFlGZSkse2xvb2thaGVhZFN0cmF0ZWd5Om4/bmV3IGp1KHttYXhMb29rYWhlYWQ6ci5tYXhMb29rYWhlYWR9KTpuZXcgejJ9KSxyKSl9Z2V0IElTX1JFQ09SRElORygpe3JldHVybiB0aGlzLlJFQ09SRElOR19QSEFTRX1ERUZJTkVfUlVMRShlLHIpe3JldHVybiB0aGlzLlJVTEUoZSxyKX13cmFwU2VsZkFuYWx5c2lzKCl7dGhpcy5wZXJmb3JtU2VsZkFuYWx5c2lzKCl9d3JhcENvbnN1bWUoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lKGUscil9d3JhcFN1YnJ1bGUoZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGUoZSxyLHtBUkdTOltuXX0pfXdyYXBPcihlLHIpe3RoaXMub3IoZSxyKX13cmFwT3B0aW9uKGUscil7dGhpcy5vcHRpb24oZSxyKX13cmFwTWFueShlLHIpe3RoaXMubWFueShlLHIpfXdyYXBBdExlYXN0T25lKGUscil7dGhpcy5hdExlYXN0T25lKGUscil9fX0pO2Z1bmN0aW9uIFZrKHQsZSxyKXtyZXR1cm4gcUZlKHtwYXJzZXI6ZSx0b2tlbnM6cixydWxlczpuZXcgTWFwLHJ1bGVOYW1lczpuZXcgTWFwfSx0KSxlfWZ1bmN0aW9uIHFGZSh0LGUpe2xldCByPWQyKGUsITEpLG49dG4oZS5ydWxlcykuZmlsdGVyKEdhKS5maWx0ZXIoaT0+ci5oYXMoaSkpO2ZvcihsZXQgaSBvZiBuKXtsZXQgYT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvbnN1bWU6MSxvcHRpb25hbDoxLHN1YnJ1bGU6MSxtYW55OjEsb3I6MX0pO2EucnVsZXMuc2V0KGkubmFtZSx0LnBhcnNlci5ydWxlKGksdzAoYSxpLmRlZmluaXRpb24pKSl9fWZ1bmN0aW9uIHcwKHQsZSxyPSExKXtsZXQgbjtpZihlbChlKSluPWV6ZSh0LGUpO2Vsc2UgaWYoVnUoZSkpbj1YRmUodCxlKTtlbHNlIGlmKEdsKGUpKW49dzAodCxlLnRlcm1pbmFsKTtlbHNlIGlmKHIwKGUpKW49UWxlKHQsZSk7ZWxzZSBpZigkbChlKSluPWpGZSh0LGUpO2Vsc2UgaWYoT1QoZSkpbj1RRmUodCxlKTtlbHNlIGlmKEJUKGUpKW49WkZlKHQsZSk7ZWxzZSBpZihoZihlKSluPUpGZSh0LGUpO2Vsc2UgaWYoa04oZSkpe2xldCBpPXQuY29uc3VtZSsrO249bygoKT0+dC5wYXJzZXIuY29uc3VtZShpLG1vLGUpLCJtZXRob2QiKX1lbHNlIHRocm93IG5ldyB0MChlLiRjc3ROb2RlLGBVbmV4cGVjdGVkIGVsZW1lbnQgdHlwZTogJHtlLiR0eXBlfWApO3JldHVybiBabGUodCxyP3ZvaWQgMDokayhlKSxuLGUuY2FyZGluYWxpdHkpfWZ1bmN0aW9uIFhGZSh0LGUpe2xldCByPWwwKGUpO3JldHVybigpPT50LnBhcnNlci5hY3Rpb24ocixlKX1mdW5jdGlvbiBqRmUodCxlKXtsZXQgcj1lLnJ1bGUucmVmO2lmKEdhKHIpKXtsZXQgbj10LnN1YnJ1bGUrKyxpPWUuYXJndW1lbnRzLmxlbmd0aD4wP0tGZShyLGUuYXJndW1lbnRzKTooKT0+KHt9KTtyZXR1cm4gYT0+dC5wYXJzZXIuc3VicnVsZShuLEpsZSh0LHIpLGUsaShhKSl9ZWxzZSBpZihKbyhyKSl7bGV0IG49dC5jb25zdW1lKyssaT1nTSh0LHIubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYocil1ZihyKTtlbHNlIHRocm93IG5ldyB0MChlLiRjc3ROb2RlLGBVbmRlZmluZWQgcnVsZSB0eXBlOiAke2UuJHR5cGV9YCl9ZnVuY3Rpb24gS0ZlKHQsZSl7bGV0IHI9ZS5tYXAobj0+S3Uobi52YWx1ZSkpO3JldHVybiBuPT57bGV0IGk9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCBzPXQucGFyYW1ldGVyc1thXSxsPXJbYV07aVtzLm5hbWVdPWwobil9cmV0dXJuIGl9fWZ1bmN0aW9uIEt1KHQpe2lmKFFEKHQpKXtsZXQgZT1LdSh0LmxlZnQpLHI9S3UodC5yaWdodCk7cmV0dXJuIG49PmUobil8fHIobil9ZWxzZSBpZihqRCh0KSl7bGV0IGU9S3UodC5sZWZ0KSxyPUt1KHQucmlnaHQpO3JldHVybiBuPT5lKG4pJiZyKG4pfWVsc2UgaWYock4odCkpe2xldCBlPUt1KHQudmFsdWUpO3JldHVybiByPT4hZShyKX1lbHNlIGlmKHNOKHQpKXtsZXQgZT10LnBhcmFtZXRlci5yZWYubmFtZTtyZXR1cm4gcj0+ciE9PXZvaWQgMCYmcltlXT09PSEwfWVsc2UgaWYocUQodCkpe2xldCBlPSEhdC50cnVlO3JldHVybigpPT5lfXVmKHQpfWZ1bmN0aW9uIFFGZSh0LGUpe2lmKGUuZWxlbWVudHMubGVuZ3RoPT09MSlyZXR1cm4gdzAodCxlLmVsZW1lbnRzWzBdKTt7bGV0IHI9W107Zm9yKGxldCBpIG9mIGUuZWxlbWVudHMpe2xldCBhPXtBTFQ6dzAodCxpLCEwKX0scz0kayhpKTtzJiYoYS5HQVRFPUt1KHMpKSxyLnB1c2goYSl9bGV0IG49dC5vcisrO3JldHVybiBpPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcChhPT57bGV0IHM9e0FMVDpvKCgpPT5hLkFMVChpKSwiQUxUIil9LGw9YS5HQVRFO3JldHVybiBsJiYocy5HQVRFPSgpPT5sKGkpKSxzfSkpfX1mdW5jdGlvbiBaRmUodCxlKXtpZihlLmVsZW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIHcwKHQsZS5lbGVtZW50c1swXSk7bGV0IHI9W107Zm9yKGxldCBsIG9mIGUuZWxlbWVudHMpe2xldCB1PXtBTFQ6dzAodCxsLCEwKX0saD0kayhsKTtoJiYodS5HQVRFPUt1KGgpKSxyLnB1c2godSl9bGV0IG49dC5vcisrLGk9bygobCx1KT0+e2xldCBoPXUuZ2V0UnVsZVN0YWNrKCkuam9pbigiLSIpO3JldHVybmB1R3JvdXBfJHtsfV8ke2h9YH0sImlkRnVuYyIpLGE9byhsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcCgodSxoKT0+e2xldCBmPXtBTFQ6bygoKT0+ITAsIkFMVCIpfSxkPXQucGFyc2VyO2YuQUxUPSgpPT57aWYodS5BTFQobCksIWQuaXNSZWNvcmRpbmcoKSl7bGV0IG09aShuLGQpO2QudW5vcmRlcmVkR3JvdXBzLmdldChtKXx8ZC51bm9yZGVyZWRHcm91cHMuc2V0KG0sW10pO2xldCBnPWQudW5vcmRlcmVkR3JvdXBzLmdldChtKTt0eXBlb2YgZz8uW2hdPiJ1IiYmKGdbaF09ITApfX07bGV0IHA9dS5HQVRFO3JldHVybiBwP2YuR0FURT0oKT0+cChsKTpmLkdBVEU9KCk9PntsZXQgbT1kLnVub3JkZXJlZEdyb3Vwcy5nZXQoaShuLGQpKTtyZXR1cm4hbT8uW2hdfSxmfSkpLCJhbHRlcm5hdGl2ZXMiKSxzPVpsZSh0LCRrKGUpLGEsIioiKTtyZXR1cm4gbD0+e3MobCksdC5wYXJzZXIuaXNSZWNvcmRpbmcoKXx8dC5wYXJzZXIudW5vcmRlcmVkR3JvdXBzLmRlbGV0ZShpKG4sdC5wYXJzZXIpKX19ZnVuY3Rpb24gSkZlKHQsZSl7bGV0IHI9ZS5lbGVtZW50cy5tYXAobj0+dzAodCxuKSk7cmV0dXJuIG49PnIuZm9yRWFjaChpPT5pKG4pKX1mdW5jdGlvbiAkayh0KXtpZihoZih0KSlyZXR1cm4gdC5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBRbGUodCxlLHI9ZS50ZXJtaW5hbCl7aWYocilpZigkbChyKSYmR2Eoci5ydWxlLnJlZikpe2xldCBuPXQuc3VicnVsZSsrO3JldHVybiBpPT50LnBhcnNlci5zdWJydWxlKG4sSmxlKHQsci5ydWxlLnJlZiksZSxpKX1lbHNlIGlmKCRsKHIpJiZKbyhyLnJ1bGUucmVmKSl7bGV0IG49dC5jb25zdW1lKyssaT1nTSh0LHIucnVsZS5yZWYubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYoZWwocikpe2xldCBuPXQuY29uc3VtZSsrLGk9Z00odCxyLnZhbHVlKTtyZXR1cm4oKT0+dC5wYXJzZXIuY29uc3VtZShuLGksZSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBidWlsZCBjcm9zcyByZWZlcmVuY2UgcGFyc2VyIik7ZWxzZXtpZighZS50eXBlLnJlZil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSB0byB0eXBlOiAiK2UudHlwZS4kcmVmVGV4dCk7bGV0IG49SFQoZS50eXBlLnJlZiksaT1uPy50ZXJtaW5hbDtpZighaSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5hbWUgYXNzaWdubWVudCBmb3IgdHlwZTogIitsMChlLnR5cGUucmVmKSk7cmV0dXJuIFFsZSh0LGUsaSl9fWZ1bmN0aW9uIGV6ZSh0LGUpe2xldCByPXQuY29uc3VtZSsrLG49dC50b2tlbnNbZS52YWx1ZV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0b2tlbiBmb3Iga2V5d29yZDogIitlLnZhbHVlKTtyZXR1cm4oKT0+dC5wYXJzZXIuY29uc3VtZShyLG4sZSl9ZnVuY3Rpb24gWmxlKHQsZSxyLG4pe2xldCBpPWUmJkt1KGUpO2lmKCFuKWlmKGkpe2xldCBhPXQub3IrKztyZXR1cm4gcz0+dC5wYXJzZXIuYWx0ZXJuYXRpdmVzKGEsW3tBTFQ6bygoKT0+cihzKSwiQUxUIiksR0FURTpvKCgpPT5pKHMpLCJHQVRFIil9LHtBTFQ6RGsoKSxHQVRFOm8oKCk9PiFpKHMpLCJHQVRFIil9XSl9ZWxzZSByZXR1cm4gcjtpZihuPT09IioiKXtsZXQgYT10Lm1hbnkrKztyZXR1cm4gcz0+dC5wYXJzZXIubWFueShhLHtERUY6bygoKT0+cihzKSwiREVGIiksR0FURTppPygpPT5pKHMpOnZvaWQgMH0pfWVsc2UgaWYobj09PSIrIil7bGV0IGE9dC5tYW55Kys7aWYoaSl7bGV0IHM9dC5vcisrO3JldHVybiBsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMocyxbe0FMVDpvKCgpPT50LnBhcnNlci5hdExlYXN0T25lKGEse0RFRjpvKCgpPT5yKGwpLCJERUYiKX0pLCJBTFQiKSxHQVRFOm8oKCk9PmkobCksIkdBVEUiKX0se0FMVDpEaygpLEdBVEU6bygoKT0+IWkobCksIkdBVEUiKX1dKX1lbHNlIHJldHVybiBzPT50LnBhcnNlci5hdExlYXN0T25lKGEse0RFRjpvKCgpPT5yKHMpLCJERUYiKX0pfWVsc2UgaWYobj09PSI/Iil7bGV0IGE9dC5vcHRpb25hbCsrO3JldHVybiBzPT50LnBhcnNlci5vcHRpb25hbChhLHtERUY6bygoKT0+cihzKSwiREVGIiksR0FURTppPygpPT5pKHMpOnZvaWQgMH0pfWVsc2UgdWYobil9ZnVuY3Rpb24gSmxlKHQsZSl7bGV0IHI9dHplKHQsZSksbj10LnJ1bGVzLmdldChyKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYFJ1bGUgIiR7cn0iIG5vdCBmb3VuZC4iYCk7cmV0dXJuIG59ZnVuY3Rpb24gdHplKHQsZSl7aWYoR2EoZSkpcmV0dXJuIGUubmFtZTtpZih0LnJ1bGVOYW1lcy5oYXMoZSkpcmV0dXJuIHQucnVsZU5hbWVzLmdldChlKTt7bGV0IHI9ZSxuPXIuJGNvbnRhaW5lcixpPWUuJHR5cGU7Zm9yKDshR2Eobik7KShoZihuKXx8T1Qobil8fEJUKG4pKSYmKGk9bi5lbGVtZW50cy5pbmRleE9mKHIpLnRvU3RyaW5nKCkrIjoiK2kpLHI9bixuPW4uJGNvbnRhaW5lcjtyZXR1cm4gaT1uLm5hbWUrIjoiK2ksdC5ydWxlTmFtZXMuc2V0KGUsaSksaX19ZnVuY3Rpb24gZ00odCxlKXtsZXQgcj10LnRva2Vuc1tlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFRva2VuICIke2V9IiBub3QgZm91bmQuImApO3JldHVybiByfXZhciB5TT1NKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7QmMoKTtfVCgpOyRzKCk7VmwoKTtvKFZrLCJjcmVhdGVQYXJzZXIiKTtvKHFGZSwiYnVpbGRSdWxlcyIpO28odzAsImJ1aWxkRWxlbWVudCIpO28oWEZlLCJidWlsZEFjdGlvbiIpO28oakZlLCJidWlsZFJ1bGVDYWxsIik7byhLRmUsImJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUiKTtvKEt1LCJidWlsZFByZWRpY2F0ZSIpO28oUUZlLCJidWlsZEFsdGVybmF0aXZlcyIpO28oWkZlLCJidWlsZFVub3JkZXJlZEdyb3VwIik7byhKRmUsImJ1aWxkR3JvdXAiKTtvKCRrLCJnZXRHdWFyZENvbmRpdGlvbiIpO28oUWxlLCJidWlsZENyb3NzUmVmZXJlbmNlIik7byhlemUsImJ1aWxkS2V5d29yZCIpO28oWmxlLCJ3cmFwIik7byhKbGUsImdldFJ1bGUiKTtvKHR6ZSwiZ2V0UnVsZU5hbWUiKTtvKGdNLCJnZXRUb2tlbiIpfSk7ZnVuY3Rpb24gdk0odCl7bGV0IGU9dC5HcmFtbWFyLHI9dC5wYXJzZXIuTGV4ZXIsbj1uZXcgVzIodCk7cmV0dXJuIFZrKGUsbixyLmRlZmluaXRpb24pLG4uZmluYWxpemUoKSxufXZhciB4TT1NKCgpPT57InVzZSBzdHJpY3QiO1kyKCk7eU0oKTtvKHZNLCJjcmVhdGVDb21wbGV0aW9uUGFyc2VyIil9KTtmdW5jdGlvbiBiTSh0KXtsZXQgZT1lY2UodCk7cmV0dXJuIGUuZmluYWxpemUoKSxlfWZ1bmN0aW9uIGVjZSh0KXtsZXQgZT10LkdyYW1tYXIscj10LnBhcnNlci5MZXhlcixuPW5ldyBIMih0KTtyZXR1cm4gVmsoZSxuLHIuZGVmaW5pdGlvbil9dmFyIHdNPU0oKCk9PnsidXNlIHN0cmljdCI7WTIoKTt5TSgpO28oYk0sImNyZWF0ZUxhbmdpdW1QYXJzZXIiKTtvKGVjZSwicHJlcGFyZUxhbmdpdW1QYXJzZXIiKX0pO3ZhciBUMCxUTT1NKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7QmMoKTtvcygpO1ZsKCk7aWcoKTskcygpO1QwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRUb2tlbkJ1aWxkZXIiKX1idWlsZFRva2VucyhlLHIpe2xldCBuPXRuKGQyKGUsITEpKSxpPXRoaXMuYnVpbGRUZXJtaW5hbFRva2VucyhuKSxhPXRoaXMuYnVpbGRLZXl3b3JkVG9rZW5zKG4saSxyKTtyZXR1cm4gaS5mb3JFYWNoKHM9PntsZXQgbD1zLlBBVFRFUk47dHlwZW9mIGw9PSJvYmplY3QiJiZsJiYidGVzdCJpbiBsJiZWVChsKT9hLnVuc2hpZnQocyk6YS5wdXNoKHMpfSksYX1idWlsZFRlcm1pbmFsVG9rZW5zKGUpe3JldHVybiBlLmZpbHRlcihKbykuZmlsdGVyKHI9PiFyLmZyYWdtZW50KS5tYXAocj0+dGhpcy5idWlsZFRlcm1pbmFsVG9rZW4ocikpLnRvQXJyYXkoKX1idWlsZFRlcm1pbmFsVG9rZW4oZSl7bGV0IHI9YWcoZSksbj10aGlzLnJlcXVpcmVzQ3VzdG9tUGF0dGVybihyKT90aGlzLnJlZ2V4UGF0dGVybkZ1bmN0aW9uKHIpOnIsaT17bmFtZTplLm5hbWUsUEFUVEVSTjpuLExJTkVfQlJFQUtTOiEwfTtyZXR1cm4gZS5oaWRkZW4mJihpLkdST1VQPVZUKHIpP2NpLlNLSVBQRUQ6ImhpZGRlbiIpLGl9cmVxdWlyZXNDdXN0b21QYXR0ZXJuKGUpe3JldHVybiBlLmZsYWdzLmluY2x1ZGVzKCJ1Iik/ITA6ISEoZS5zb3VyY2UuaW5jbHVkZXMoIj88PSIpfHxlLnNvdXJjZS5pbmNsdWRlcygiPzwhIikpfXJlZ2V4UGF0dGVybkZ1bmN0aW9uKGUpe2xldCByPW5ldyBSZWdFeHAoZSxlLmZsYWdzKyJ5Iik7cmV0dXJuKG4saSk9PihyLmxhc3RJbmRleD1pLHIuZXhlYyhuKSl9YnVpbGRLZXl3b3JkVG9rZW5zKGUscixuKXtyZXR1cm4gZS5maWx0ZXIoR2EpLmZsYXRNYXAoaT0+RmMoaSkuZmlsdGVyKGVsKSkuZGlzdGluY3QoaT0+aS52YWx1ZSkudG9BcnJheSgpLnNvcnQoKGksYSk9PmEudmFsdWUubGVuZ3RoLWkudmFsdWUubGVuZ3RoKS5tYXAoaT0+dGhpcy5idWlsZEtleXdvcmRUb2tlbihpLHIsISFuPy5jYXNlSW5zZW5zaXRpdmUpKX1idWlsZEtleXdvcmRUb2tlbihlLHIsbil7cmV0dXJue25hbWU6ZS52YWx1ZSxQQVRURVJOOnRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihlLG4pLExPTkdFUl9BTFQ6dGhpcy5maW5kTG9uZ2VyQWx0KGUscil9fWJ1aWxkS2V5d29yZFBhdHRlcm4oZSxyKXtyZXR1cm4gcj9uZXcgUmVnRXhwKEtOKGUudmFsdWUpKTplLnZhbHVlfWZpbmRMb25nZXJBbHQoZSxyKXtyZXR1cm4gci5yZWR1Y2UoKG4saSk9PntsZXQgYT1pPy5QQVRURVJOO3JldHVybiBhPy5zb3VyY2UmJlFOKCJeIithLnNvdXJjZSsiJCIsZS52YWx1ZSkmJm4ucHVzaChpKSxufSxbXSl9fX0pO3ZhciBrMCwkYyxrTT1NKCgpPT57InVzZSBzdHJpY3QiO0JjKCk7VmwoKTtrMD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0VmFsdWVDb252ZXJ0ZXIiKX1jb252ZXJ0KGUscil7bGV0IG49ci5ncmFtbWFyU291cmNlO2lmKHIwKG4pJiYobj1lUihuKSksJGwobikpe2xldCBpPW4ucnVsZS5yZWY7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGNzdCBub2RlIHdhcyBub3QgcGFyc2VkIGJ5IGEgcnVsZS4iKTtyZXR1cm4gdGhpcy5ydW5Db252ZXJ0ZXIoaSxlLHIpfXJldHVybiBlfXJ1bkNvbnZlcnRlcihlLHIsbil7dmFyIGk7c3dpdGNoKGUubmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIklOVCI6cmV0dXJuICRjLmNvbnZlcnRJbnQocik7Y2FzZSJTVFJJTkciOnJldHVybiAkYy5jb252ZXJ0U3RyaW5nKHIpO2Nhc2UiSUQiOnJldHVybiAkYy5jb252ZXJ0SUQocil9c3dpdGNoKChpPWxSKGUpKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudG9Mb3dlckNhc2UoKSl7Y2FzZSJudW1iZXIiOnJldHVybiAkYy5jb252ZXJ0TnVtYmVyKHIpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuICRjLmNvbnZlcnRCb29sZWFuKHIpO2Nhc2UiYmlnaW50IjpyZXR1cm4gJGMuY29udmVydEJpZ2ludChyKTtjYXNlImRhdGUiOnJldHVybiAkYy5jb252ZXJ0RGF0ZShyKTtkZWZhdWx0OnJldHVybiByfX19OyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGgpe2xldCBmPSIiO2ZvcihsZXQgZD0xO2Q8aC5sZW5ndGgtMTtkKyspe2xldCBwPWguY2hhckF0KGQpO2lmKHA9PT0iXFwiKXtsZXQgbT1oLmNoYXJBdCgrK2QpO2YrPXIobSl9ZWxzZSBmKz1wfXJldHVybiBmfW8oZSwiY29udmVydFN0cmluZyIpLHQuY29udmVydFN0cmluZz1lO2Z1bmN0aW9uIHIoaCl7c3dpdGNoKGgpe2Nhc2UiYiI6cmV0dXJuIlxiIjtjYXNlImYiOnJldHVybiJcZiI7Y2FzZSJuIjpyZXR1cm5gCmA7Y2FzZSJyIjpyZXR1cm4iXHIiO2Nhc2UidCI6cmV0dXJuIgkiO2Nhc2UidiI6cmV0dXJuIlx2IjtjYXNlIjAiOnJldHVybiJcMCI7ZGVmYXVsdDpyZXR1cm4gaH19byhyLCJjb252ZXJ0RXNjYXBlQ2hhcmFjdGVyIik7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5jaGFyQXQoMCk9PT0iXiI/aC5zdWJzdHJpbmcoMSk6aH1vKG4sImNvbnZlcnRJRCIpLHQuY29udmVydElEPW47ZnVuY3Rpb24gaShoKXtyZXR1cm4gcGFyc2VJbnQoaCl9byhpLCJjb252ZXJ0SW50IiksdC5jb252ZXJ0SW50PWk7ZnVuY3Rpb24gYShoKXtyZXR1cm4gQmlnSW50KGgpfW8oYSwiY29udmVydEJpZ2ludCIpLHQuY29udmVydEJpZ2ludD1hO2Z1bmN0aW9uIHMoaCl7cmV0dXJuIG5ldyBEYXRlKGgpfW8ocywiY29udmVydERhdGUiKSx0LmNvbnZlcnREYXRlPXM7ZnVuY3Rpb24gbChoKXtyZXR1cm4gTnVtYmVyKGgpfW8obCwiY29udmVydE51bWJlciIpLHQuY29udmVydE51bWJlcj1sO2Z1bmN0aW9uIHUoaCl7cmV0dXJuIGgudG9Mb3dlckNhc2UoKT09PSJ0cnVlIn1vKHUsImNvbnZlcnRCb29sZWFuIiksdC5jb252ZXJ0Qm9vbGVhbj11fSkoJGN8fCgkYz17fSkpfSk7dmFyIEFNPUVpKENNPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShDTSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEVNO2Z1bmN0aW9uIFNNKCl7aWYoRU09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyBydW50aW1lIGFic3RyYWN0aW9uIGxheWVyIGluc3RhbGxlZCIpO3JldHVybiBFTX1vKFNNLCJSQUwiKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBwcm92aWRlZCIpO0VNPXJ9byhlLCJpbnN0YWxsIiksdC5pbnN0YWxsPWV9KShTTXx8KFNNPXt9KSk7Q00uZGVmYXVsdD1TTX0pO3ZhciBuY2U9RWkoJGE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTskYS5zdHJpbmdBcnJheT0kYS5hcnJheT0kYS5mdW5jPSRhLmVycm9yPSRhLm51bWJlcj0kYS5zdHJpbmc9JGEuYm9vbGVhbj12b2lkIDA7ZnVuY3Rpb24gcnplKHQpe3JldHVybiB0PT09ITB8fHQ9PT0hMX1vKHJ6ZSwiYm9vbGVhbiIpOyRhLmJvb2xlYW49cnplO2Z1bmN0aW9uIHRjZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmcifHx0IGluc3RhbmNlb2YgU3RyaW5nfW8odGNlLCJzdHJpbmciKTskYS5zdHJpbmc9dGNlO2Z1bmN0aW9uIG56ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIifHx0IGluc3RhbmNlb2YgTnVtYmVyfW8obnplLCJudW1iZXIiKTskYS5udW1iZXI9bnplO2Z1bmN0aW9uIGl6ZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfW8oaXplLCJlcnJvciIpOyRhLmVycm9yPWl6ZTtmdW5jdGlvbiBhemUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24ifW8oYXplLCJmdW5jIik7JGEuZnVuYz1hemU7ZnVuY3Rpb24gcmNlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfW8ocmNlLCJhcnJheSIpOyRhLmFycmF5PXJjZTtmdW5jdGlvbiBzemUodCl7cmV0dXJuIHJjZSh0KSYmdC5ldmVyeShlPT50Y2UoZSkpfW8oc3plLCJzdHJpbmdBcnJheSIpOyRhLnN0cmluZ0FycmF5PXN6ZX0pO3ZhciBMTT1FaShNZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTWcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO01nLkVtaXR0ZXI9TWcuRXZlbnQ9dm9pZCAwO3ZhciBvemU9QU0oKSxpY2U7KGZ1bmN0aW9uKHQpe2xldCBlPXtkaXNwb3NlKCl7fX07dC5Ob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGV9fSkoaWNlfHwoTWcuRXZlbnQ9aWNlPXt9KSk7dmFyIF9NPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhbGxiYWNrTGlzdCIpfWFkZChlLHI9bnVsbCxuKXt0aGlzLl9jYWxsYmFja3N8fCh0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fY29udGV4dHM9W10pLHRoaXMuX2NhbGxiYWNrcy5wdXNoKGUpLHRoaXMuX2NvbnRleHRzLnB1c2gociksQXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKHtkaXNwb3NlOm8oKCk9PnRoaXMucmVtb3ZlKGUsciksImRpc3Bvc2UiKX0pfXJlbW92ZShlLHI9bnVsbCl7aWYoIXRoaXMuX2NhbGxiYWNrcylyZXR1cm47bGV0IG49ITE7Zm9yKGxldCBpPTAsYT10aGlzLl9jYWxsYmFja3MubGVuZ3RoO2k8YTtpKyspaWYodGhpcy5fY2FsbGJhY2tzW2ldPT09ZSlpZih0aGlzLl9jb250ZXh0c1tpXT09PXIpe3RoaXMuX2NhbGxiYWNrcy5zcGxpY2UoaSwxKSx0aGlzLl9jb250ZXh0cy5zcGxpY2UoaSwxKTtyZXR1cm59ZWxzZSBuPSEwO2lmKG4pdGhyb3cgbmV3IEVycm9yKCJXaGVuIGFkZGluZyBhIGxpc3RlbmVyIHdpdGggYSBjb250ZXh0LCB5b3Ugc2hvdWxkIHJlbW92ZSBpdCB3aXRoIHRoZSBzYW1lIGNvbnRleHQiKX1pbnZva2UoLi4uZSl7aWYoIXRoaXMuX2NhbGxiYWNrcylyZXR1cm5bXTtsZXQgcj1bXSxuPXRoaXMuX2NhbGxiYWNrcy5zbGljZSgwKSxpPXRoaXMuX2NvbnRleHRzLnNsaWNlKDApO2ZvcihsZXQgYT0wLHM9bi5sZW5ndGg7YTxzO2ErKyl0cnl7ci5wdXNoKG5bYV0uYXBwbHkoaVthXSxlKSl9Y2F0Y2gobCl7KDAsb3plLmRlZmF1bHQpKCkuY29uc29sZS5lcnJvcihsKX1yZXR1cm4gcn1pc0VtcHR5KCl7cmV0dXJuIXRoaXMuX2NhbGxiYWNrc3x8dGhpcy5fY2FsbGJhY2tzLmxlbmd0aD09PTB9ZGlzcG9zZSgpe3RoaXMuX2NhbGxiYWNrcz12b2lkIDAsdGhpcy5fY29udGV4dHM9dm9pZCAwfX0sVWs9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJFbWl0dGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fb3B0aW9ucz1lfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHIsbik9Pnt0aGlzLl9jYWxsYmFja3N8fCh0aGlzLl9jYWxsYmFja3M9bmV3IF9NKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uRmlyc3RMaXN0ZW5lckFkZCYmdGhpcy5fY2FsbGJhY2tzLmlzRW1wdHkoKSYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQodGhpcyksdGhpcy5fY2FsbGJhY2tzLmFkZChlLHIpO2xldCBpPXtkaXNwb3NlOm8oKCk9Pnt0aGlzLl9jYWxsYmFja3MmJih0aGlzLl9jYWxsYmFja3MucmVtb3ZlKGUsciksaS5kaXNwb3NlPXQuX25vb3AsdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSYmdGhpcy5fY2FsbGJhY2tzLmlzRW1wdHkoKSYmdGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKSl9LCJkaXNwb3NlIil9O3JldHVybiBBcnJheS5pc0FycmF5KG4pJiZuLnB1c2goaSksaX0pLHRoaXMuX2V2ZW50fWZpcmUoZSl7dGhpcy5fY2FsbGJhY2tzJiZ0aGlzLl9jYWxsYmFja3MuaW52b2tlLmNhbGwodGhpcy5fY2FsbGJhY2tzLGUpfWRpc3Bvc2UoKXt0aGlzLl9jYWxsYmFja3MmJih0aGlzLl9jYWxsYmFja3MuZGlzcG9zZSgpLHRoaXMuX2NhbGxiYWNrcz12b2lkIDApfX07TWcuRW1pdHRlcj1VaztVay5fbm9vcD1mdW5jdGlvbigpe319KTt2YXIgYWNlPUVpKElnPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShJZywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7SWcuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U9SWcuQ2FuY2VsbGF0aW9uVG9rZW49dm9pZCAwO3ZhciBsemU9QU0oKSxjemU9bmNlKCksRE09TE0oKSxIazsoZnVuY3Rpb24odCl7dC5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOkRNLkV2ZW50Lk5vbmV9KSx0LkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpETS5FdmVudC5Ob25lfSk7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobj09PXQuTm9uZXx8bj09PXQuQ2FuY2VsbGVkfHxjemUuYm9vbGVhbihuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSYmISFuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKX1vKGUsImlzIiksdC5pcz1lfSkoSGt8fChJZy5DYW5jZWxsYXRpb25Ub2tlbj1Iaz17fSkpO3ZhciB1emU9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbih0LGUpe2xldCByPSgwLGx6ZS5kZWZhdWx0KSgpLnRpbWVyLnNldFRpbWVvdXQodC5iaW5kKGUpLDApO3JldHVybntkaXNwb3NlKCl7ci5kaXNwb3NlKCl9fX0pLFdrPWNsYXNze3N0YXRpY3tvKHRoaXMsIk11dGFibGVUb2tlbiIpfWNvbnN0cnVjdG9yKCl7dGhpcy5faXNDYW5jZWxsZWQ9ITF9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP3V6ZToodGhpcy5fZW1pdHRlcnx8KHRoaXMuX2VtaXR0ZXI9bmV3IERNLkVtaXR0ZXIpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj12b2lkIDApfX0sTk09Y2xhc3N7c3RhdGlje28odGhpcywiQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UiKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgV2spLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUhrLkNhbmNlbGxlZH1kaXNwb3NlKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBXayYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUhrLk5vbmV9fTtJZy5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZT1OTX0pO3ZhciBBcj17fTt2YXIgcmw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtTcihBcixKaShhY2UoKSwxKSl9KTtmdW5jdGlvbiBNTSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57dHlwZW9mIHNldEltbWVkaWF0ZT4idSI/c2V0VGltZW91dCh0LDApOnNldEltbWVkaWF0ZSh0KX0pfWZ1bmN0aW9uIG9jZSgpe3JldHVybiBSTT1EYXRlLm5vdygpLG5ldyBBci5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZX1mdW5jdGlvbiBsY2UodCl7c2NlPXR9ZnVuY3Rpb24gbWYodCl7cmV0dXJuIHQ9PT1WY31hc3luYyBmdW5jdGlvbiBIaSh0KXtpZih0PT09QXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSlyZXR1cm47bGV0IGU9RGF0ZS5ub3coKTtpZihlLVJNPj1zY2UmJihSTT1lLGF3YWl0IE1NKCkpLHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQpdGhyb3cgVmN9dmFyIFJNLHNjZSxWYyxmcyxubD1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7byhNTSwiZGVsYXlOZXh0VGljayIpO1JNPTAsc2NlPTEwO28ob2NlLCJzdGFydENhbmNlbGFibGVPcGVyYXRpb24iKTtvKGxjZSwic2V0SW50ZXJydXB0aW9uUGVyaW9kIik7VmM9U3ltYm9sKCJPcGVyYXRpb25DYW5jZWxsZWQiKTtvKG1mLCJpc09wZXJhdGlvbkNhbmNlbGxlZCIpO28oSGksImludGVycnVwdEFuZENoZWNrIik7ZnM9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmZXJyZWQiKX1jb25zdHJ1Y3Rvcigpe3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZSxyKT0+e3RoaXMucmVzb2x2ZT1uPT4oZShuKSx0aGlzKSx0aGlzLnJlamVjdD1uPT4ocihuKSx0aGlzKX0pfX19KTtmdW5jdGlvbiBJTSh0LGUpe2lmKHQubGVuZ3RoPD0xKXJldHVybiB0O2xldCByPXQubGVuZ3RoLzJ8MCxuPXQuc2xpY2UoMCxyKSxpPXQuc2xpY2Uocik7SU0obixlKSxJTShpLGUpO2xldCBhPTAscz0wLGw9MDtmb3IoO2E8bi5sZW5ndGgmJnM8aS5sZW5ndGg7KWUoblthXSxpW3NdKTw9MD90W2wrK109blthKytdOnRbbCsrXT1pW3MrK107Zm9yKDthPG4ubGVuZ3RoOyl0W2wrK109blthKytdO2Zvcig7czxpLmxlbmd0aDspdFtsKytdPWlbcysrXTtyZXR1cm4gdH1mdW5jdGlvbiBjY2UodCxlLHI9MCl7bGV0IG49ZT9bcl06W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBhPXQuY2hhckNvZGVBdChpKTt1Y2UoYSkmJihhPT09MTMmJmkrMTx0Lmxlbmd0aCYmdC5jaGFyQ29kZUF0KGkrMSk9PT0xMCYmaSsrLG4ucHVzaChyK2krMSkpfXJldHVybiBufWZ1bmN0aW9uIHVjZSh0KXtyZXR1cm4gdD09PTEzfHx0PT09MTB9ZnVuY3Rpb24gaGNlKHQpe2xldCBlPXQuc3RhcnQscj10LmVuZDtyZXR1cm4gZS5saW5lPnIubGluZXx8ZS5saW5lPT09ci5saW5lJiZlLmNoYXJhY3Rlcj5yLmNoYXJhY3Rlcj97c3RhcnQ6cixlbmQ6ZX06dH1mdW5jdGlvbiBoemUodCl7bGV0IGU9aGNlKHQucmFuZ2UpO3JldHVybiBlIT09dC5yYW5nZT97bmV3VGV4dDp0Lm5ld1RleHQscmFuZ2U6ZX06dH12YXIgWWssT2csZmNlPU0oKCk9PnsidXNlIHN0cmljdCI7WWs9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXtmb3IobGV0IG4gb2YgZSlpZih0LmlzSW5jcmVtZW50YWwobikpe2xldCBpPWhjZShuLnJhbmdlKSxhPXRoaXMub2Zmc2V0QXQoaS5zdGFydCkscz10aGlzLm9mZnNldEF0KGkuZW5kKTt0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsYSkrbi50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHMsdGhpcy5fY29udGVudC5sZW5ndGgpO2xldCBsPU1hdGgubWF4KGkuc3RhcnQubGluZSwwKSx1PU1hdGgubWF4KGkuZW5kLmxpbmUsMCksaD10aGlzLl9saW5lT2Zmc2V0cyxmPWNjZShuLnRleHQsITEsYSk7aWYodS1sPT09Zi5sZW5ndGgpZm9yKGxldCBwPTAsbT1mLmxlbmd0aDtwPG07cCsrKWhbcCtsKzFdPWZbcF07ZWxzZSBmLmxlbmd0aDwxZTQ/aC5zcGxpY2UobCsxLHUtbCwuLi5mKTp0aGlzLl9saW5lT2Zmc2V0cz1oPWguc2xpY2UoMCxsKzEpLmNvbmNhdChmLGguc2xpY2UodSsxKSk7bGV0IGQ9bi50ZXh0Lmxlbmd0aC0ocy1hKTtpZihkIT09MClmb3IobGV0IHA9bCsxK2YubGVuZ3RoLG09aC5sZW5ndGg7cDxtO3ArKyloW3BdPWhbcF0rZH1lbHNlIGlmKHQuaXNGdWxsKG4pKXRoaXMuX2NvbnRlbnQ9bi50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMDtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl92ZXJzaW9uPXJ9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDAmJih0aGlzLl9saW5lT2Zmc2V0cz1jY2UodGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgcj10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLGk9ci5sZW5ndGg7aWYoaT09PTApcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6ZX07Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBlPXRoaXMuZW5zdXJlQmVmb3JlRU9MKGUsclthXSkse2xpbmU6YSxjaGFyYWN0ZXI6ZS1yW2FdfX1vZmZzZXRBdChlKXtsZXQgcj10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj1yLmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49cltlLmxpbmVdO2lmKGUuY2hhcmFjdGVyPD0wKXJldHVybiBuO2xldCBpPWUubGluZSsxPHIubGVuZ3RoP3JbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoLGE9TWF0aC5taW4obitlLmNoYXJhY3RlcixpKTtyZXR1cm4gdGhpcy5lbnN1cmVCZWZvcmVFT0woYSxuKX1lbnN1cmVCZWZvcmVFT0woZSxyKXtmb3IoO2U+ciYmdWNlKHRoaXMuX2NvbnRlbnQuY2hhckNvZGVBdChlLTEpKTspZS0tO3JldHVybiBlfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbChlKXtsZXQgcj1lO3JldHVybiByIT1udWxsJiZ0eXBlb2Ygci50ZXh0PT0ic3RyaW5nIiYmci5yYW5nZSE9PXZvaWQgMCYmKHIucmFuZ2VMZW5ndGg9PT12b2lkIDB8fHR5cGVvZiByLnJhbmdlTGVuZ3RoPT0ibnVtYmVyIil9c3RhdGljIGlzRnVsbChlKXtsZXQgcj1lO3JldHVybiByIT1udWxsJiZ0eXBlb2Ygci50ZXh0PT0ic3RyaW5nIiYmci5yYW5nZT09PXZvaWQgMCYmci5yYW5nZUxlbmd0aD09PXZvaWQgMH19OyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGksYSxzLGwpe3JldHVybiBuZXcgWWsoaSxhLHMsbCl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIoaSxhLHMpe2lmKGkgaW5zdGFuY2VvZiBZaylyZXR1cm4gaS51cGRhdGUoYSxzKSxpO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX1vKHIsInVwZGF0ZSIpLHQudXBkYXRlPXI7ZnVuY3Rpb24gbihpLGEpe2xldCBzPWkuZ2V0VGV4dCgpLGw9SU0oYS5tYXAoaHplKSwoZixkKT0+e2xldCBwPWYucmFuZ2Uuc3RhcnQubGluZS1kLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIHA9PT0wP2YucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOnB9KSx1PTAsaD1bXTtmb3IobGV0IGYgb2YgbCl7bGV0IGQ9aS5vZmZzZXRBdChmLnJhbmdlLnN0YXJ0KTtpZihkPHUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7ZD51JiZoLnB1c2gocy5zdWJzdHJpbmcodSxkKSksZi5uZXdUZXh0Lmxlbmd0aCYmaC5wdXNoKGYubmV3VGV4dCksdT1pLm9mZnNldEF0KGYucmFuZ2UuZW5kKX1yZXR1cm4gaC5wdXNoKHMuc3Vic3RyKHUpKSxoLmpvaW4oIiIpfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1ufSkoT2d8fChPZz17fSkpO28oSU0sIm1lcmdlU29ydCIpO28oY2NlLCJjb21wdXRlTGluZU9mZnNldHMiKTtvKHVjZSwiaXNFT0wiKTtvKGhjZSwiZ2V0V2VsbGZvcm1lZFJhbmdlIik7byhoemUsImdldFdlbGxmb3JtZWRFZGl0Iil9KTt2YXIgZGNlLEhzLFBnLE9NPU0oKCk9PnsidXNlIHN0cmljdCI7KCgpPT57InVzZSBzdHJpY3QiO3ZhciB0PXs0NzA6aT0+e2Z1bmN0aW9uIGEodSl7aWYodHlwZW9mIHUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh1KSl9byhhLCJlIik7ZnVuY3Rpb24gcyh1LGgpe2Zvcih2YXIgZixkPSIiLHA9MCxtPS0xLGc9MCx5PTA7eTw9dS5sZW5ndGg7Kyt5KXtpZih5PHUubGVuZ3RoKWY9dS5jaGFyQ29kZUF0KHkpO2Vsc2V7aWYoZj09PTQ3KWJyZWFrO2Y9NDd9aWYoZj09PTQ3KXtpZighKG09PT15LTF8fGc9PT0xKSlpZihtIT09eS0xJiZnPT09Mil7aWYoZC5sZW5ndGg8Mnx8cCE9PTJ8fGQuY2hhckNvZGVBdChkLmxlbmd0aC0xKSE9PTQ2fHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMikhPT00Nil7aWYoZC5sZW5ndGg+Mil7dmFyIHY9ZC5sYXN0SW5kZXhPZigiLyIpO2lmKHYhPT1kLmxlbmd0aC0xKXt2PT09LTE/KGQ9IiIscD0wKTpwPShkPWQuc2xpY2UoMCx2KSkubGVuZ3RoLTEtZC5sYXN0SW5kZXhPZigiLyIpLG09eSxnPTA7Y29udGludWV9fWVsc2UgaWYoZC5sZW5ndGg9PT0yfHxkLmxlbmd0aD09PTEpe2Q9IiIscD0wLG09eSxnPTA7Y29udGludWV9fWgmJihkLmxlbmd0aD4wP2QrPSIvLi4iOmQ9Ii4uIixwPTIpfWVsc2UgZC5sZW5ndGg+MD9kKz0iLyIrdS5zbGljZShtKzEseSk6ZD11LnNsaWNlKG0rMSx5KSxwPXktbS0xO209eSxnPTB9ZWxzZSBmPT09NDYmJmchPT0tMT8rK2c6Zz0tMX1yZXR1cm4gZH1vKHMsInIiKTt2YXIgbD17cmVzb2x2ZTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB1LGg9IiIsZj0hMSxkPWFyZ3VtZW50cy5sZW5ndGgtMTtkPj0tMSYmIWY7ZC0tKXt2YXIgcDtkPj0wP3A9YXJndW1lbnRzW2RdOih1PT09dm9pZCAwJiYodT1wcm9jZXNzLmN3ZCgpKSxwPXUpLGEocCkscC5sZW5ndGghPT0wJiYoaD1wKyIvIitoLGY9cC5jaGFyQ29kZUF0KDApPT09NDcpfXJldHVybiBoPXMoaCwhZiksZj9oLmxlbmd0aD4wPyIvIitoOiIvIjpoLmxlbmd0aD4wP2g6Ii4ifSwicmVzb2x2ZSIpLG5vcm1hbGl6ZTpvKGZ1bmN0aW9uKHUpe2lmKGEodSksdS5sZW5ndGg9PT0wKXJldHVybiIuIjt2YXIgaD11LmNoYXJDb2RlQXQoMCk9PT00NyxmPXUuY2hhckNvZGVBdCh1Lmxlbmd0aC0xKT09PTQ3O3JldHVybih1PXModSwhaCkpLmxlbmd0aCE9PTB8fGh8fCh1PSIuIiksdS5sZW5ndGg+MCYmZiYmKHUrPSIvIiksaD8iLyIrdTp1fSwibm9ybWFsaXplIiksaXNBYnNvbHV0ZTpvKGZ1bmN0aW9uKHUpe3JldHVybiBhKHUpLHUubGVuZ3RoPjAmJnUuY2hhckNvZGVBdCgwKT09PTQ3fSwiaXNBYnNvbHV0ZSIpLGpvaW46byhmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIHUsaD0wO2g8YXJndW1lbnRzLmxlbmd0aDsrK2gpe3ZhciBmPWFyZ3VtZW50c1toXTthKGYpLGYubGVuZ3RoPjAmJih1PT09dm9pZCAwP3U9Zjp1Kz0iLyIrZil9cmV0dXJuIHU9PT12b2lkIDA/Ii4iOmwubm9ybWFsaXplKHUpfSwiam9pbiIpLHJlbGF0aXZlOm8oZnVuY3Rpb24odSxoKXtpZihhKHUpLGEoaCksdT09PWh8fCh1PWwucmVzb2x2ZSh1KSk9PT0oaD1sLnJlc29sdmUoaCkpKXJldHVybiIiO2Zvcih2YXIgZj0xO2Y8dS5sZW5ndGgmJnUuY2hhckNvZGVBdChmKT09PTQ3OysrZik7Zm9yKHZhciBkPXUubGVuZ3RoLHA9ZC1mLG09MTttPGgubGVuZ3RoJiZoLmNoYXJDb2RlQXQobSk9PT00NzsrK20pO2Zvcih2YXIgZz1oLmxlbmd0aC1tLHk9cDxnP3A6Zyx2PS0xLHg9MDt4PD15OysreCl7aWYoeD09PXkpe2lmKGc+eSl7aWYoaC5jaGFyQ29kZUF0KG0reCk9PT00NylyZXR1cm4gaC5zbGljZShtK3grMSk7aWYoeD09PTApcmV0dXJuIGguc2xpY2UobSt4KX1lbHNlIHA+eSYmKHUuY2hhckNvZGVBdChmK3gpPT09NDc/dj14Ong9PT0wJiYodj0wKSk7YnJlYWt9dmFyIGI9dS5jaGFyQ29kZUF0KGYreCk7aWYoYiE9PWguY2hhckNvZGVBdChtK3gpKWJyZWFrO2I9PT00NyYmKHY9eCl9dmFyIHc9IiI7Zm9yKHg9Zit2KzE7eDw9ZDsrK3gpeCE9PWQmJnUuY2hhckNvZGVBdCh4KSE9PTQ3fHwody5sZW5ndGg9PT0wP3crPSIuLiI6dys9Ii8uLiIpO3JldHVybiB3Lmxlbmd0aD4wP3craC5zbGljZShtK3YpOihtKz12LGguY2hhckNvZGVBdChtKT09PTQ3JiYrK20saC5zbGljZShtKSl9LCJyZWxhdGl2ZSIpLF9tYWtlTG9uZzpvKGZ1bmN0aW9uKHUpe3JldHVybiB1fSwiX21ha2VMb25nIiksZGlybmFtZTpvKGZ1bmN0aW9uKHUpe2lmKGEodSksdS5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIGg9dS5jaGFyQ29kZUF0KDApLGY9aD09PTQ3LGQ9LTEscD0hMCxtPXUubGVuZ3RoLTE7bT49MTstLW0paWYoKGg9dS5jaGFyQ29kZUF0KG0pKT09PTQ3KXtpZighcCl7ZD1tO2JyZWFrfX1lbHNlIHA9ITE7cmV0dXJuIGQ9PT0tMT9mPyIvIjoiLiI6ZiYmZD09PTE/Ii8vIjp1LnNsaWNlKDAsZCl9LCJkaXJuYW1lIiksYmFzZW5hbWU6byhmdW5jdGlvbih1LGgpe2lmKGghPT12b2lkIDAmJnR5cGVvZiBoIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7YSh1KTt2YXIgZixkPTAscD0tMSxtPSEwO2lmKGghPT12b2lkIDAmJmgubGVuZ3RoPjAmJmgubGVuZ3RoPD11Lmxlbmd0aCl7aWYoaC5sZW5ndGg9PT11Lmxlbmd0aCYmaD09PXUpcmV0dXJuIiI7dmFyIGc9aC5sZW5ndGgtMSx5PS0xO2ZvcihmPXUubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciB2PXUuY2hhckNvZGVBdChmKTtpZih2PT09NDcpe2lmKCFtKXtkPWYrMTticmVha319ZWxzZSB5PT09LTEmJihtPSExLHk9ZisxKSxnPj0wJiYodj09PWguY2hhckNvZGVBdChnKT8tLWc9PS0xJiYocD1mKTooZz0tMSxwPXkpKX1yZXR1cm4gZD09PXA/cD15OnA9PT0tMSYmKHA9dS5sZW5ndGgpLHUuc2xpY2UoZCxwKX1mb3IoZj11Lmxlbmd0aC0xO2Y+PTA7LS1mKWlmKHUuY2hhckNvZGVBdChmKT09PTQ3KXtpZighbSl7ZD1mKzE7YnJlYWt9fWVsc2UgcD09PS0xJiYobT0hMSxwPWYrMSk7cmV0dXJuIHA9PT0tMT8iIjp1LnNsaWNlKGQscCl9LCJiYXNlbmFtZSIpLGV4dG5hbWU6byhmdW5jdGlvbih1KXthKHUpO2Zvcih2YXIgaD0tMSxmPTAsZD0tMSxwPSEwLG09MCxnPXUubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciB5PXUuY2hhckNvZGVBdChnKTtpZih5IT09NDcpZD09PS0xJiYocD0hMSxkPWcrMSkseT09PTQ2P2g9PT0tMT9oPWc6bSE9PTEmJihtPTEpOmghPT0tMSYmKG09LTEpO2Vsc2UgaWYoIXApe2Y9ZysxO2JyZWFrfX1yZXR1cm4gaD09PS0xfHxkPT09LTF8fG09PT0wfHxtPT09MSYmaD09PWQtMSYmaD09PWYrMT8iIjp1LnNsaWNlKGgsZCl9LCJleHRuYW1lIiksZm9ybWF0Om8oZnVuY3Rpb24odSl7aWYodT09PW51bGx8fHR5cGVvZiB1IT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7dmFyIGQ9Zi5kaXJ8fGYucm9vdCxwPWYuYmFzZXx8KGYubmFtZXx8IiIpKyhmLmV4dHx8IiIpO3JldHVybiBkP2Q9PT1mLnJvb3Q/ZCtwOmQrIi8iK3A6cH0oMCx1KX0sImZvcm1hdCIpLHBhcnNlOm8oZnVuY3Rpb24odSl7YSh1KTt2YXIgaD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYodS5sZW5ndGg9PT0wKXJldHVybiBoO3ZhciBmLGQ9dS5jaGFyQ29kZUF0KDApLHA9ZD09PTQ3O3A/KGgucm9vdD0iLyIsZj0xKTpmPTA7Zm9yKHZhciBtPS0xLGc9MCx5PS0xLHY9ITAseD11Lmxlbmd0aC0xLGI9MDt4Pj1mOy0teClpZigoZD11LmNoYXJDb2RlQXQoeCkpIT09NDcpeT09PS0xJiYodj0hMSx5PXgrMSksZD09PTQ2P209PT0tMT9tPXg6YiE9PTEmJihiPTEpOm0hPT0tMSYmKGI9LTEpO2Vsc2UgaWYoIXYpe2c9eCsxO2JyZWFrfXJldHVybiBtPT09LTF8fHk9PT0tMXx8Yj09PTB8fGI9PT0xJiZtPT09eS0xJiZtPT09ZysxP3khPT0tMSYmKGguYmFzZT1oLm5hbWU9Zz09PTAmJnA/dS5zbGljZSgxLHkpOnUuc2xpY2UoZyx5KSk6KGc9PT0wJiZwPyhoLm5hbWU9dS5zbGljZSgxLG0pLGguYmFzZT11LnNsaWNlKDEseSkpOihoLm5hbWU9dS5zbGljZShnLG0pLGguYmFzZT11LnNsaWNlKGcseSkpLGguZXh0PXUuc2xpY2UobSx5KSksZz4wP2guZGlyPXUuc2xpY2UoMCxnLTEpOnAmJihoLmRpcj0iLyIpLGh9LCJwYXJzZSIpLHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O2wucG9zaXg9bCxpLmV4cG9ydHM9bH19LGU9e307ZnVuY3Rpb24gcihpKXt2YXIgYT1lW2ldO2lmKGEhPT12b2lkIDApcmV0dXJuIGEuZXhwb3J0czt2YXIgcz1lW2ldPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtpXShzLHMuZXhwb3J0cyxyKSxzLmV4cG9ydHN9byhyLCJyIiksci5kPShpLGEpPT57Zm9yKHZhciBzIGluIGEpci5vKGEscykmJiFyLm8oaSxzKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyx7ZW51bWVyYWJsZTohMCxnZXQ6YVtzXX0pfSxyLm89KGksYSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLGEpLHIucj1pPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX07dmFyIG49e307KCgpPT57bGV0IGk7ci5yKG4pLHIuZChuLHtVUkk6bygoKT0+cCwiVVJJIiksVXRpbHM6bygoKT0+SSwiVXRpbHMiKX0pLHR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0Ij9pPXByb2Nlc3MucGxhdGZvcm09PT0id2luMzIiOnR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYoaT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIldpbmRvd3MiKT49MCk7bGV0IGE9L15cd1tcd1xkKy4tXSokLyxzPS9eXC8vLGw9L15cL1wvLztmdW5jdGlvbiB1KEQsayl7aWYoIUQuc2NoZW1lJiZrKXRocm93IG5ldyBFcnJvcihgW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICIke0QuYXV0aG9yaXR5fSIsIHBhdGg6ICIke0QucGF0aH0iLCBxdWVyeTogIiR7RC5xdWVyeX0iLCBmcmFnbWVudDogIiR7RC5mcmFnbWVudH0ifWApO2lmKEQuc2NoZW1lJiYhYS50ZXN0KEQuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoRC5wYXRoKXtpZihELmF1dGhvcml0eSl7aWYoIXMudGVzdChELnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYobC50ZXN0KEQucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9fW8odSwicyIpO2xldCBoPSIiLGY9Ii8iLGQ9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgcHtzdGF0aWN7byh0aGlzLCJmIil9c3RhdGljIGlzVXJpKGspe3JldHVybiBrIGluc3RhbmNlb2YgcHx8ISFrJiZ0eXBlb2Ygay5hdXRob3JpdHk9PSJzdHJpbmciJiZ0eXBlb2Ygay5mcmFnbWVudD09InN0cmluZyImJnR5cGVvZiBrLnBhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay5xdWVyeT09InN0cmluZyImJnR5cGVvZiBrLnNjaGVtZT09InN0cmluZyImJnR5cGVvZiBrLmZzUGF0aD09InN0cmluZyImJnR5cGVvZiBrLndpdGg9PSJmdW5jdGlvbiImJnR5cGVvZiBrLnRvU3RyaW5nPT0iZnVuY3Rpb24ifXNjaGVtZTthdXRob3JpdHk7cGF0aDtxdWVyeTtmcmFnbWVudDtjb25zdHJ1Y3RvcihrLFIsQyxPLE4sUD0hMSl7dHlwZW9mIGs9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT1rLnNjaGVtZXx8aCx0aGlzLmF1dGhvcml0eT1rLmF1dGhvcml0eXx8aCx0aGlzLnBhdGg9ay5wYXRofHxoLHRoaXMucXVlcnk9ay5xdWVyeXx8aCx0aGlzLmZyYWdtZW50PWsuZnJhZ21lbnR8fGgpOih0aGlzLnNjaGVtZT1mdW5jdGlvbihGLEIpe3JldHVybiBGfHxCP0Y6ImZpbGUifShrLFApLHRoaXMuYXV0aG9yaXR5PVJ8fGgsdGhpcy5wYXRoPWZ1bmN0aW9uKEYsQil7c3dpdGNoKEYpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjpCP0JbMF0hPT1mJiYoQj1mK0IpOkI9Zn1yZXR1cm4gQn0odGhpcy5zY2hlbWUsQ3x8aCksdGhpcy5xdWVyeT1PfHxoLHRoaXMuZnJhZ21lbnQ9Tnx8aCx1KHRoaXMsUCkpfWdldCBmc1BhdGgoKXtyZXR1cm4gYih0aGlzLCExKX13aXRoKGspe2lmKCFrKXJldHVybiB0aGlzO2xldHtzY2hlbWU6UixhdXRob3JpdHk6QyxwYXRoOk8scXVlcnk6TixmcmFnbWVudDpQfT1rO3JldHVybiBSPT09dm9pZCAwP1I9dGhpcy5zY2hlbWU6Uj09PW51bGwmJihSPWgpLEM9PT12b2lkIDA/Qz10aGlzLmF1dGhvcml0eTpDPT09bnVsbCYmKEM9aCksTz09PXZvaWQgMD9PPXRoaXMucGF0aDpPPT09bnVsbCYmKE89aCksTj09PXZvaWQgMD9OPXRoaXMucXVlcnk6Tj09PW51bGwmJihOPWgpLFA9PT12b2lkIDA/UD10aGlzLmZyYWdtZW50OlA9PT1udWxsJiYoUD1oKSxSPT09dGhpcy5zY2hlbWUmJkM9PT10aGlzLmF1dGhvcml0eSYmTz09PXRoaXMucGF0aCYmTj09PXRoaXMucXVlcnkmJlA9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGcoUixDLE8sTixQKX1zdGF0aWMgcGFyc2UoayxSPSExKXtsZXQgQz1kLmV4ZWMoayk7cmV0dXJuIEM/bmV3IGcoQ1syXXx8aCxFKENbNF18fGgpLEUoQ1s1XXx8aCksRShDWzddfHxoKSxFKENbOV18fGgpLFIpOm5ldyBnKGgsaCxoLGgsaCl9c3RhdGljIGZpbGUoayl7bGV0IFI9aDtpZihpJiYoaz1rLnJlcGxhY2UoL1xcL2csZikpLGtbMF09PT1mJiZrWzFdPT09Zil7bGV0IEM9ay5pbmRleE9mKGYsMik7Qz09PS0xPyhSPWsuc3Vic3RyaW5nKDIpLGs9Zik6KFI9ay5zdWJzdHJpbmcoMixDKSxrPWsuc3Vic3RyaW5nKEMpfHxmKX1yZXR1cm4gbmV3IGcoImZpbGUiLFIsayxoLGgpfXN0YXRpYyBmcm9tKGspe2xldCBSPW5ldyBnKGsuc2NoZW1lLGsuYXV0aG9yaXR5LGsucGF0aCxrLnF1ZXJ5LGsuZnJhZ21lbnQpO3JldHVybiB1KFIsITApLFJ9dG9TdHJpbmcoaz0hMSl7cmV0dXJuIHcodGhpcyxrKX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKGspe2lmKGspe2lmKGsgaW5zdGFuY2VvZiBwKXJldHVybiBrO3tsZXQgUj1uZXcgZyhrKTtyZXR1cm4gUi5fZm9ybWF0dGVkPWsuZXh0ZXJuYWwsUi5fZnNQYXRoPWsuX3NlcD09PW0/ay5mc1BhdGg6bnVsbCxSfX1yZXR1cm4ga319bGV0IG09aT8xOnZvaWQgMDtjbGFzcyBnIGV4dGVuZHMgcHtzdGF0aWN7byh0aGlzLCJsIil9X2Zvcm1hdHRlZD1udWxsO19mc1BhdGg9bnVsbDtnZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1iKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoaz0hMSl7cmV0dXJuIGs/dyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPXcodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7bGV0IGs9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGsuZnNQYXRoPXRoaXMuX2ZzUGF0aCxrLl9zZXA9bSksdGhpcy5fZm9ybWF0dGVkJiYoay5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGsucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoay5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoay5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihrLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihrLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGt9fWxldCB5PXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gdihELGssUil7bGV0IEMsTz0tMTtmb3IobGV0IE49MDtOPEQubGVuZ3RoO04rKyl7bGV0IFA9RC5jaGFyQ29kZUF0KE4pO2lmKFA+PTk3JiZQPD0xMjJ8fFA+PTY1JiZQPD05MHx8UD49NDgmJlA8PTU3fHxQPT09NDV8fFA9PT00Nnx8UD09PTk1fHxQPT09MTI2fHxrJiZQPT09NDd8fFImJlA9PT05MXx8UiYmUD09PTkzfHxSJiZQPT09NTgpTyE9PS0xJiYoQys9ZW5jb2RlVVJJQ29tcG9uZW50KEQuc3Vic3RyaW5nKE8sTikpLE89LTEpLEMhPT12b2lkIDAmJihDKz1ELmNoYXJBdChOKSk7ZWxzZXtDPT09dm9pZCAwJiYoQz1ELnN1YnN0cigwLE4pKTtsZXQgRj15W1BdO0YhPT12b2lkIDA/KE8hPT0tMSYmKEMrPWVuY29kZVVSSUNvbXBvbmVudChELnN1YnN0cmluZyhPLE4pKSxPPS0xKSxDKz1GKTpPPT09LTEmJihPPU4pfX1yZXR1cm4gTyE9PS0xJiYoQys9ZW5jb2RlVVJJQ29tcG9uZW50KEQuc3Vic3RyaW5nKE8pKSksQyE9PXZvaWQgMD9DOkR9byh2LCJkIik7ZnVuY3Rpb24geChEKXtsZXQgaztmb3IobGV0IFI9MDtSPEQubGVuZ3RoO1IrKyl7bGV0IEM9RC5jaGFyQ29kZUF0KFIpO0M9PT0zNXx8Qz09PTYzPyhrPT09dm9pZCAwJiYoaz1ELnN1YnN0cigwLFIpKSxrKz15W0NdKTprIT09dm9pZCAwJiYoays9RFtSXSl9cmV0dXJuIGshPT12b2lkIDA/azpEfW8oeCwicCIpO2Z1bmN0aW9uIGIoRCxrKXtsZXQgUjtyZXR1cm4gUj1ELmF1dGhvcml0eSYmRC5wYXRoLmxlbmd0aD4xJiZELnNjaGVtZT09PSJmaWxlIj9gLy8ke0QuYXV0aG9yaXR5fSR7RC5wYXRofWA6RC5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKEQucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmRC5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxELnBhdGguY2hhckNvZGVBdCgxKT49OTcmJkQucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZELnBhdGguY2hhckNvZGVBdCgyKT09PTU4P2s/RC5wYXRoLnN1YnN0cigxKTpELnBhdGhbMV0udG9Mb3dlckNhc2UoKStELnBhdGguc3Vic3RyKDIpOkQucGF0aCxpJiYoUj1SLnJlcGxhY2UoL1wvL2csIlxcIikpLFJ9byhiLCJtIik7ZnVuY3Rpb24gdyhELGspe2xldCBSPWs/eDp2LEM9IiIse3NjaGVtZTpPLGF1dGhvcml0eTpOLHBhdGg6UCxxdWVyeTpGLGZyYWdtZW50OkJ9PUQ7aWYoTyYmKEMrPU8sQys9IjoiKSwoTnx8Tz09PSJmaWxlIikmJihDKz1mLEMrPWYpLE4pe2xldCBHPU4uaW5kZXhPZigiQCIpO2lmKEchPT0tMSl7bGV0IHo9Ti5zdWJzdHIoMCxHKTtOPU4uc3Vic3RyKEcrMSksRz16Lmxhc3RJbmRleE9mKCI6IiksRz09PS0xP0MrPVIoeiwhMSwhMSk6KEMrPVIoei5zdWJzdHIoMCxHKSwhMSwhMSksQys9IjoiLEMrPVIoei5zdWJzdHIoRysxKSwhMSwhMCkpLEMrPSJAIn1OPU4udG9Mb3dlckNhc2UoKSxHPU4ubGFzdEluZGV4T2YoIjoiKSxHPT09LTE/Qys9UihOLCExLCEwKTooQys9UihOLnN1YnN0cigwLEcpLCExLCEwKSxDKz1OLnN1YnN0cihHKSl9aWYoUCl7aWYoUC5sZW5ndGg+PTMmJlAuY2hhckNvZGVBdCgwKT09PTQ3JiZQLmNoYXJDb2RlQXQoMik9PT01OCl7bGV0IEc9UC5jaGFyQ29kZUF0KDEpO0c+PTY1JiZHPD05MCYmKFA9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoRyszMil9OiR7UC5zdWJzdHIoMyl9YCl9ZWxzZSBpZihQLmxlbmd0aD49MiYmUC5jaGFyQ29kZUF0KDEpPT09NTgpe2xldCBHPVAuY2hhckNvZGVBdCgwKTtHPj02NSYmRzw9OTAmJihQPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoRyszMil9OiR7UC5zdWJzdHIoMil9YCl9Qys9UihQLCEwLCExKX1yZXR1cm4gRiYmKEMrPSI/IixDKz1SKEYsITEsITEpKSxCJiYoQys9IiMiLEMrPWs/Qjp2KEIsITEsITEpKSxDfW8odywieSIpO2Z1bmN0aW9uIF8oRCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoRCl9Y2F0Y2h7cmV0dXJuIEQubGVuZ3RoPjM/RC5zdWJzdHIoMCwzKStfKEQuc3Vic3RyKDMpKTpEfX1vKF8sInYiKTtsZXQgVD0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBFKEQpe3JldHVybiBELm1hdGNoKFQpP0QucmVwbGFjZShULGs9Pl8oaykpOkR9byhFLCJDIik7dmFyIEw9cig0NzApO2xldCBTPUwucG9zaXh8fEwsQT0iLyI7dmFyIEk7KGZ1bmN0aW9uKEQpe0Quam9pblBhdGg9ZnVuY3Rpb24oaywuLi5SKXtyZXR1cm4gay53aXRoKHtwYXRoOlMuam9pbihrLnBhdGgsLi4uUil9KX0sRC5yZXNvbHZlUGF0aD1mdW5jdGlvbihrLC4uLlIpe2xldCBDPWsucGF0aCxPPSExO0NbMF0hPT1BJiYoQz1BK0MsTz0hMCk7bGV0IE49Uy5yZXNvbHZlKEMsLi4uUik7cmV0dXJuIE8mJk5bMF09PT1BJiYhay5hdXRob3JpdHkmJihOPU4uc3Vic3RyaW5nKDEpKSxrLndpdGgoe3BhdGg6Tn0pfSxELmRpcm5hbWU9ZnVuY3Rpb24oayl7aWYoay5wYXRoLmxlbmd0aD09PTB8fGsucGF0aD09PUEpcmV0dXJuIGs7bGV0IFI9Uy5kaXJuYW1lKGsucGF0aCk7cmV0dXJuIFIubGVuZ3RoPT09MSYmUi5jaGFyQ29kZUF0KDApPT09NDYmJihSPSIiKSxrLndpdGgoe3BhdGg6Un0pfSxELmJhc2VuYW1lPWZ1bmN0aW9uKGspe3JldHVybiBTLmJhc2VuYW1lKGsucGF0aCl9LEQuZXh0bmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gUy5leHRuYW1lKGsucGF0aCl9fSkoSXx8KEk9e30pKX0pKCksZGNlPW59KSgpOyh7VVJJOkhzLFV0aWxzOlBnfT1kY2UpfSk7dmFyIGRzLFVjPU0oKCk9PnsidXNlIHN0cmljdCI7T00oKTsoZnVuY3Rpb24odCl7dC5iYXNlbmFtZT1QZy5iYXNlbmFtZSx0LmRpcm5hbWU9UGcuZGlybmFtZSx0LmV4dG5hbWU9UGcuZXh0bmFtZSx0LmpvaW5QYXRoPVBnLmpvaW5QYXRoLHQucmVzb2x2ZVBhdGg9UGcucmVzb2x2ZVBhdGg7ZnVuY3Rpb24gZShuLGkpe3JldHVybiBuPy50b1N0cmluZygpPT09aT8udG9TdHJpbmcoKX1vKGUsImVxdWFscyIpLHQuZXF1YWxzPWU7ZnVuY3Rpb24gcihuLGkpe2xldCBhPXR5cGVvZiBuPT0ic3RyaW5nIj9uOm4ucGF0aCxzPXR5cGVvZiBpPT0ic3RyaW5nIj9pOmkucGF0aCxsPWEuc3BsaXQoIi8iKS5maWx0ZXIocD0+cC5sZW5ndGg+MCksdT1zLnNwbGl0KCIvIikuZmlsdGVyKHA9PnAubGVuZ3RoPjApLGg9MDtmb3IoO2g8bC5sZW5ndGgmJmxbaF09PT11W2hdO2grKyk7bGV0IGY9Ii4uLyIucmVwZWF0KGwubGVuZ3RoLWgpLGQ9dS5zbGljZShoKS5qb2luKCIvIik7cmV0dXJuIGYrZH1vKHIsInJlbGF0aXZlIiksdC5yZWxhdGl2ZT1yfSkoZHN8fChkcz17fSkpfSk7dmFyIFRuLHEyLFgyLEJnPU0oKCk9PnsidXNlIHN0cmljdCI7ZmNlKCk7QmcoKTtybCgpOyRzKCk7VWMoKTsoZnVuY3Rpb24odCl7dFt0LkNoYW5nZWQ9MF09IkNoYW5nZWQiLHRbdC5QYXJzZWQ9MV09IlBhcnNlZCIsdFt0LkluZGV4ZWRDb250ZW50PTJdPSJJbmRleGVkQ29udGVudCIsdFt0LkNvbXB1dGVkU2NvcGVzPTNdPSJDb21wdXRlZFNjb3BlcyIsdFt0LkxpbmtlZD00XT0iTGlua2VkIix0W3QuSW5kZXhlZFJlZmVyZW5jZXM9NV09IkluZGV4ZWRSZWZlcmVuY2VzIix0W3QuVmFsaWRhdGVkPTZdPSJWYWxpZGF0ZWQifSkoVG58fChUbj17fSkpO3EyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy50ZXh0RG9jdW1lbnRzPWUud29ya3NwYWNlLlRleHREb2N1bWVudHMsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyfWFzeW5jIGZyb21VcmkoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUpO3JldHVybiB0aGlzLmNyZWF0ZUFzeW5jKGUsbixyKX1mcm9tVGV4dERvY3VtZW50KGUscixuKXtyZXR1cm4gcj1yPz9Icy5wYXJzZShlLnVyaSksbj90aGlzLmNyZWF0ZUFzeW5jKHIsZSxuKTp0aGlzLmNyZWF0ZShyLGUpfWZyb21TdHJpbmcoZSxyLG4pe3JldHVybiBuP3RoaXMuY3JlYXRlQXN5bmMocixlLG4pOnRoaXMuY3JlYXRlKHIsZSl9ZnJvbU1vZGVsKGUscil7cmV0dXJuIHRoaXMuY3JlYXRlKHIseyRtb2RlbDplfSl9Y3JlYXRlKGUscil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgbj10aGlzLnBhcnNlKGUscik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KG4sZSx2b2lkIDAscil9ZWxzZSBpZigiJG1vZGVsImluIHIpe2xldCBuPXt2YWx1ZTpyLiRtb2RlbCxwYXJzZXJFcnJvcnM6W10sbGV4ZXJFcnJvcnM6W119O3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChuLGUpfWVsc2V7bGV0IG49dGhpcy5wYXJzZShlLHIuZ2V0VGV4dCgpKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQobixlLHIpfX1hc3luYyBjcmVhdGVBc3luYyhlLHIsbil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgaT1hd2FpdCB0aGlzLnBhcnNlQXN5bmMoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2V7bGV0IGk9YXdhaXQgdGhpcy5wYXJzZUFzeW5jKGUsci5nZXRUZXh0KCksbik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KGksZSxyKX19Y3JlYXRlTGFuZ2l1bURvY3VtZW50KGUscixuLGkpe2xldCBhO2lmKG4pYT17cGFyc2VSZXN1bHQ6ZSx1cmk6cixzdGF0ZTpUbi5QYXJzZWQscmVmZXJlbmNlczpbXSx0ZXh0RG9jdW1lbnQ6bn07ZWxzZXtsZXQgcz10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihyLGkpO2E9e3BhcnNlUmVzdWx0OmUsdXJpOnIsc3RhdGU6VG4uUGFyc2VkLHJlZmVyZW5jZXM6W10sZ2V0IHRleHREb2N1bWVudCgpe3JldHVybiBzKCl9fX1yZXR1cm4gZS52YWx1ZS4kZG9jdW1lbnQ9YSxhfWFzeW5jIHVwZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9KG49ZS5wYXJzZVJlc3VsdC52YWx1ZS4kY3N0Tm9kZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnJvb3QuZnVsbFRleHQscz0oaT10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5nZXQoZS51cmkudG9TdHJpbmcoKSksbD1zP3MuZ2V0VGV4dCgpOmF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUudXJpKTtpZihzKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZXh0RG9jdW1lbnQiLHt2YWx1ZTpzfSk7ZWxzZXtsZXQgdT10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLnVyaSxsKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidGV4dERvY3VtZW50Iix7Z2V0OnV9KX1yZXR1cm4gYSE9PWwmJihlLnBhcnNlUmVzdWx0PWF3YWl0IHRoaXMucGFyc2VBc3luYyhlLnVyaSxsLHIpLGUucGFyc2VSZXN1bHQudmFsdWUuJGRvY3VtZW50PWUpLGUuc3RhdGU9VG4uUGFyc2VkLGV9cGFyc2UoZSxyKXtyZXR1cm4gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZSkucGFyc2VyLkxhbmdpdW1QYXJzZXIucGFyc2Uocil9cGFyc2VBc3luYyhlLHIsbil7cmV0dXJuIHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUpLnBhcnNlci5Bc3luY1BhcnNlci5wYXJzZShyLG4pfWNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLHIpe2xldCBuPXRoaXMuc2VydmljZVJlZ2lzdHJ5LGk7cmV0dXJuKCk9Pmk/PyhpPU9nLmNyZWF0ZShlLnRvU3RyaW5nKCksbi5nZXRTZXJ2aWNlcyhlKS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQsMCxyPz8iIikpfX0sWDI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdExhbmdpdW1Eb2N1bWVudHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmRvY3VtZW50TWFwPW5ldyBNYXAsdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5PWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3Rvcnl9Z2V0IGFsbCgpe3JldHVybiB0bih0aGlzLmRvY3VtZW50TWFwLnZhbHVlcygpKX1hZGREb2N1bWVudChlKXtsZXQgcj1lLnVyaS50b1N0cmluZygpO2lmKHRoaXMuZG9jdW1lbnRNYXAuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQSBkb2N1bWVudCB3aXRoIHRoZSBVUkkgJyR7cn0nIGlzIGFscmVhZHkgcHJlc2VudC5gKTt0aGlzLmRvY3VtZW50TWFwLnNldChyLGUpfWdldERvY3VtZW50KGUpe2xldCByPWUudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5kb2N1bWVudE1hcC5nZXQocil9YXN5bmMgZ2V0T3JDcmVhdGVEb2N1bWVudChlLHIpe2xldCBuPXRoaXMuZ2V0RG9jdW1lbnQoZSk7cmV0dXJuIG58fChuPWF3YWl0IHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tVXJpKGUsciksdGhpcy5hZGREb2N1bWVudChuKSxuKX1jcmVhdGVEb2N1bWVudChlLHIsbil7aWYobilyZXR1cm4gdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcocixlLG4pLnRoZW4oaT0+KHRoaXMuYWRkRG9jdW1lbnQoaSksaSkpO3tsZXQgaT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbVN0cmluZyhyLGUpO3JldHVybiB0aGlzLmFkZERvY3VtZW50KGkpLGl9fWhhc0RvY3VtZW50KGUpe3JldHVybiB0aGlzLmRvY3VtZW50TWFwLmhhcyhlLnRvU3RyaW5nKCkpfWludmFsaWRhdGVEb2N1bWVudChlKXtsZXQgcj1lLnRvU3RyaW5nKCksbj10aGlzLmRvY3VtZW50TWFwLmdldChyKTtyZXR1cm4gbiYmKG4uc3RhdGU9VG4uQ2hhbmdlZCxuLnByZWNvbXB1dGVkU2NvcGVzPXZvaWQgMCxuLnJlZmVyZW5jZXM9W10sbi5kaWFnbm9zdGljcz12b2lkIDApLG59ZGVsZXRlRG9jdW1lbnQoZSl7bGV0IHI9ZS50b1N0cmluZygpLG49dGhpcy5kb2N1bWVudE1hcC5nZXQocik7cmV0dXJuIG4mJihuLnN0YXRlPVRuLkNoYW5nZWQsdGhpcy5kb2N1bWVudE1hcC5kZWxldGUocikpLG59fX0pO3ZhciBqMixQTT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7Wm8oKTtvcygpO25sKCk7QmcoKTtqMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGlua2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5yZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb24sdGhpcy5sYW5naXVtRG9jdW1lbnRzPSgpPT5lLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLnNjb3BlUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLlNjb3BlUHJvdmlkZXIsdGhpcy5hc3ROb2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcn1hc3luYyBsaW5rKGUscj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtmb3IobGV0IG4gb2YgdGwoZS5wYXJzZVJlc3VsdC52YWx1ZSkpYXdhaXQgSGkocikscmcobikuZm9yRWFjaChpPT50aGlzLmRvTGluayhpLGUpKX1kb0xpbmsoZSxyKXtsZXQgbj1lLnJlZmVyZW5jZTtpZihuLl9yZWY9PT12b2lkIDApdHJ5e2xldCBpPXRoaXMuZ2V0Q2FuZGlkYXRlKGUpO2lmKFpkKGkpKW4uX3JlZj1pO2Vsc2UgaWYobi5fbm9kZURlc2NyaXB0aW9uPWksdGhpcy5sYW5naXVtRG9jdW1lbnRzKCkuaGFzRG9jdW1lbnQoaS5kb2N1bWVudFVyaSkpe2xldCBhPXRoaXMubG9hZEFzdE5vZGUoaSk7bi5fcmVmPWE/P3RoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUsaSl9fWNhdGNoKGkpe24uX3JlZj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse21lc3NhZ2U6YEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7bi4kcmVmVGV4dH0nOiAke2l9YH0pfXIucmVmZXJlbmNlcy5wdXNoKG4pfXVubGluayhlKXtmb3IobGV0IHIgb2YgZS5yZWZlcmVuY2VzKWRlbGV0ZSByLl9yZWYsZGVsZXRlIHIuX25vZGVEZXNjcmlwdGlvbjtlLnJlZmVyZW5jZXM9W119Z2V0Q2FuZGlkYXRlKGUpe2xldCBuPXRoaXMuc2NvcGVQcm92aWRlci5nZXRTY29wZShlKS5nZXRFbGVtZW50KGUucmVmZXJlbmNlLiRyZWZUZXh0KTtyZXR1cm4gbj8/dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSl9YnVpbGRSZWZlcmVuY2UoZSxyLG4saSl7bGV0IGE9dGhpcyxzPXskcmVmTm9kZTpuLCRyZWZUZXh0OmksZ2V0IHJlZigpe3ZhciBsO2lmKHJpKHRoaXMuX3JlZikpcmV0dXJuIHRoaXMuX3JlZjtpZihPRCh0aGlzLl9ub2RlRGVzY3JpcHRpb24pKXtsZXQgdT1hLmxvYWRBc3ROb2RlKHRoaXMuX25vZGVEZXNjcmlwdGlvbik7dGhpcy5fcmVmPXU/P2EuY3JlYXRlTGlua2luZ0Vycm9yKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSx0aGlzLl9ub2RlRGVzY3JpcHRpb24pfWVsc2UgaWYodGhpcy5fcmVmPT09dm9pZCAwKXtsZXQgdT1hLmdldExpbmtlZE5vZGUoe3JlZmVyZW5jZTpzLGNvbnRhaW5lcjplLHByb3BlcnR5OnJ9KTtpZih1LmVycm9yJiZWaShlKS5zdGF0ZTxUbi5Db21wdXRlZFNjb3BlcylyZXR1cm47dGhpcy5fcmVmPShsPXUubm9kZSkhPT1udWxsJiZsIT09dm9pZCAwP2w6dS5lcnJvcix0aGlzLl9ub2RlRGVzY3JpcHRpb249dS5kZXNjcn1yZXR1cm4gcmkodGhpcy5fcmVmKT90aGlzLl9yZWY6dm9pZCAwfSxnZXQgJG5vZGVEZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLl9ub2RlRGVzY3JpcHRpb259LGdldCBlcnJvcigpe3JldHVybiBaZCh0aGlzLl9yZWYpP3RoaXMuX3JlZjp2b2lkIDB9fTtyZXR1cm4gc31nZXRMaW5rZWROb2RlKGUpe3RyeXtsZXQgcj10aGlzLmdldENhbmRpZGF0ZShlKTtpZihaZChyKSlyZXR1cm57ZXJyb3I6cn07bGV0IG49dGhpcy5sb2FkQXN0Tm9kZShyKTtyZXR1cm4gbj97bm9kZTpuLGRlc2NyOnJ9OntkZXNjcjpyLGVycm9yOnRoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUscil9fWNhdGNoKHIpe3JldHVybntlcnJvcjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse21lc3NhZ2U6YEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7ZS5yZWZlcmVuY2UuJHJlZlRleHR9JzogJHtyfWB9KX19fWxvYWRBc3ROb2RlKGUpe2lmKGUubm9kZSlyZXR1cm4gZS5ub2RlO2xldCByPXRoaXMubGFuZ2l1bURvY3VtZW50cygpLmdldERvY3VtZW50KGUuZG9jdW1lbnRVcmkpO2lmKHIpcmV0dXJuIHRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZShyLnBhcnNlUmVzdWx0LnZhbHVlLGUucGF0aCl9Y3JlYXRlTGlua2luZ0Vycm9yKGUscil7bGV0IG49VmkoZS5jb250YWluZXIpO24uc3RhdGU8VG4uQ29tcHV0ZWRTY29wZXMmJmNvbnNvbGUud2FybihgQXR0ZW1wdGVkIHJlZmVyZW5jZSByZXNvbHV0aW9uIGJlZm9yZSBkb2N1bWVudCByZWFjaGVkIENvbXB1dGVkU2NvcGVzIHN0YXRlICgke24udXJpfSkuYCk7bGV0IGk9dGhpcy5yZWZsZWN0aW9uLmdldFJlZmVyZW5jZVR5cGUoZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIHRvICR7aX0gbmFtZWQgJyR7ZS5yZWZlcmVuY2UuJHJlZlRleHR9Jy5gLHRhcmdldERlc2NyaXB0aW9uOnJ9KX19fSk7ZnVuY3Rpb24gcGNlKHQpe3JldHVybiB0eXBlb2YgdC5uYW1lPT0ic3RyaW5nIn12YXIgSzIsQk09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWbCgpO28ocGNlLCJpc05hbWVkIik7SzI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdE5hbWVQcm92aWRlciIpfWdldE5hbWUoZSl7aWYocGNlKGUpKXJldHVybiBlLm5hbWV9Z2V0TmFtZU5vZGUoZSl7cmV0dXJuIHAyKGUuJGNzdE5vZGUsIm5hbWUiKX19fSk7dmFyIFEyLEZNPU0oKCk9PnsidXNlIHN0cmljdCI7VmwoKTtabygpO29zKCk7emwoKTskcygpO1VjKCk7UTI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFJlZmVyZW5jZXMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuaW5kZXg9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLm5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWZpbmREZWNsYXJhdGlvbihlKXtpZihlKXtsZXQgcj1zUihlKSxuPWUuYXN0Tm9kZTtpZihyJiZuKXtsZXQgaT1uW3IuZmVhdHVyZV07aWYoVGEoaSkpcmV0dXJuIGkucmVmO2lmKEFycmF5LmlzQXJyYXkoaSkpe2ZvcihsZXQgYSBvZiBpKWlmKFRhKGEpJiZhLiRyZWZOb2RlJiZhLiRyZWZOb2RlLm9mZnNldDw9ZS5vZmZzZXQmJmEuJHJlZk5vZGUuZW5kPj1lLmVuZClyZXR1cm4gYS5yZWZ9fWlmKG4pe2xldCBpPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKG4pO2lmKGkmJihpPT09ZXx8QkQoZSxpKSkpcmV0dXJuIG59fX1maW5kRGVjbGFyYXRpb25Ob2RlKGUpe2xldCByPXRoaXMuZmluZERlY2xhcmF0aW9uKGUpO2lmKHI/LiRjc3ROb2RlKXtsZXQgbj10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShyKTtyZXR1cm4gbj8/ci4kY3N0Tm9kZX19ZmluZFJlZmVyZW5jZXMoZSxyKXtsZXQgbj1bXTtpZihyLmluY2x1ZGVEZWNsYXJhdGlvbil7bGV0IGE9dGhpcy5nZXRSZWZlcmVuY2VUb1NlbGYoZSk7YSYmbi5wdXNoKGEpfWxldCBpPXRoaXMuaW5kZXguZmluZEFsbFJlZmVyZW5jZXMoZSx0aGlzLm5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKGUpKTtyZXR1cm4gci5kb2N1bWVudFVyaSYmKGk9aS5maWx0ZXIoYT0+ZHMuZXF1YWxzKGEuc291cmNlVXJpLHIuZG9jdW1lbnRVcmkpKSksbi5wdXNoKC4uLmkpLHRuKG4pfWdldFJlZmVyZW5jZVRvU2VsZihlKXtsZXQgcj10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShlKTtpZihyKXtsZXQgbj1WaShlKSxpPXRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSk7cmV0dXJue3NvdXJjZVVyaTpuLnVyaSxzb3VyY2VQYXRoOmksdGFyZ2V0VXJpOm4udXJpLHRhcmdldFBhdGg6aSxzZWdtZW50OmUwKHIpLGxvY2FsOiEwfX19fX0pO3ZhciBIYyxFMCxGZz1NKCgpPT57InVzZSBzdHJpY3QiOyRzKCk7SGM9Y2xhc3N7c3RhdGlje28odGhpcywiTXVsdGlNYXAiKX1jb25zdHJ1Y3RvcihlKXtpZih0aGlzLm1hcD1uZXcgTWFwLGUpZm9yKGxldFtyLG5db2YgZSl0aGlzLmFkZChyLG4pfWdldCBzaXplKCl7cmV0dXJuIEptLnN1bSh0bih0aGlzLm1hcC52YWx1ZXMoKSkubWFwKGU9PmUubGVuZ3RoKSl9Y2xlYXIoKXt0aGlzLm1hcC5jbGVhcigpfWRlbGV0ZShlLHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRoaXMubWFwLmRlbGV0ZShlKTt7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO2lmKG4pe2xldCBpPW4uaW5kZXhPZihyKTtpZihpPj0wKXJldHVybiBuLmxlbmd0aD09PTE/dGhpcy5tYXAuZGVsZXRlKGUpOm4uc3BsaWNlKGksMSksITB9cmV0dXJuITF9fWdldChlKXt2YXIgcjtyZXR1cm4ocj10aGlzLm1hcC5nZXQoZSkpIT09bnVsbCYmciE9PXZvaWQgMD9yOltdfWhhcyhlLHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRoaXMubWFwLmhhcyhlKTt7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO3JldHVybiBuP24uaW5kZXhPZihyKT49MDohMX19YWRkKGUscil7cmV0dXJuIHRoaXMubWFwLmhhcyhlKT90aGlzLm1hcC5nZXQoZSkucHVzaChyKTp0aGlzLm1hcC5zZXQoZSxbcl0pLHRoaXN9YWRkQWxsKGUscil7cmV0dXJuIHRoaXMubWFwLmhhcyhlKT90aGlzLm1hcC5nZXQoZSkucHVzaCguLi5yKTp0aGlzLm1hcC5zZXQoZSxBcnJheS5mcm9tKHIpKSx0aGlzfWZvckVhY2goZSl7dGhpcy5tYXAuZm9yRWFjaCgocixuKT0+ci5mb3JFYWNoKGk9PmUoaSxuLHRoaXMpKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCkuaXRlcmF0b3IoKX1lbnRyaWVzKCl7cmV0dXJuIHRuKHRoaXMubWFwLmVudHJpZXMoKSkuZmxhdE1hcCgoW2Uscl0pPT5yLm1hcChuPT5bZSxuXSkpfWtleXMoKXtyZXR1cm4gdG4odGhpcy5tYXAua2V5cygpKX12YWx1ZXMoKXtyZXR1cm4gdG4odGhpcy5tYXAudmFsdWVzKCkpLmZsYXQoKX1lbnRyaWVzR3JvdXBlZEJ5S2V5KCl7cmV0dXJuIHRuKHRoaXMubWFwLmVudHJpZXMoKSl9fSxFMD1jbGFzc3tzdGF0aWN7byh0aGlzLCJCaU1hcCIpfWdldCBzaXplKCl7cmV0dXJuIHRoaXMubWFwLnNpemV9Y29uc3RydWN0b3IoZSl7aWYodGhpcy5tYXA9bmV3IE1hcCx0aGlzLmludmVyc2U9bmV3IE1hcCxlKWZvcihsZXRbcixuXW9mIGUpdGhpcy5zZXQocixuKX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCksdGhpcy5pbnZlcnNlLmNsZWFyKCl9c2V0KGUscil7cmV0dXJuIHRoaXMubWFwLnNldChlLHIpLHRoaXMuaW52ZXJzZS5zZXQocixlKSx0aGlzfWdldChlKXtyZXR1cm4gdGhpcy5tYXAuZ2V0KGUpfWdldEtleShlKXtyZXR1cm4gdGhpcy5pbnZlcnNlLmdldChlKX1kZWxldGUoZSl7bGV0IHI9dGhpcy5tYXAuZ2V0KGUpO3JldHVybiByIT09dm9pZCAwPyh0aGlzLm1hcC5kZWxldGUoZSksdGhpcy5pbnZlcnNlLmRlbGV0ZShyKSwhMCk6ITF9fX0pO3ZhciBaMix6TT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7b3MoKTtGZygpO25sKCk7WjI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFNjb3BlQ29tcHV0YXRpb24iKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuZGVzY3JpcHRpb25zPWUud29ya3NwYWNlLkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyfWFzeW5jIGNvbXB1dGVFeHBvcnRzKGUscj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtyZXR1cm4gdGhpcy5jb21wdXRlRXhwb3J0c0Zvck5vZGUoZS5wYXJzZVJlc3VsdC52YWx1ZSxlLHZvaWQgMCxyKX1hc3luYyBjb21wdXRlRXhwb3J0c0Zvck5vZGUoZSxyLG49bDIsaT1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgYT1bXTt0aGlzLmV4cG9ydE5vZGUoZSxhLHIpO2ZvcihsZXQgcyBvZiBuKGUpKWF3YWl0IEhpKGkpLHRoaXMuZXhwb3J0Tm9kZShzLGEscik7cmV0dXJuIGF9ZXhwb3J0Tm9kZShlLHIsbil7bGV0IGk9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKTtpJiZyLnB1c2godGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSxpLG4pKX1hc3luYyBjb21wdXRlTG9jYWxTY29wZXMoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWUucGFyc2VSZXN1bHQudmFsdWUsaT1uZXcgSGM7Zm9yKGxldCBhIG9mIEZjKG4pKWF3YWl0IEhpKHIpLHRoaXMucHJvY2Vzc05vZGUoYSxlLGkpO3JldHVybiBpfXByb2Nlc3NOb2RlKGUscixuKXtsZXQgaT1lLiRjb250YWluZXI7aWYoaSl7bGV0IGE9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKTthJiZuLmFkZChpLHRoaXMuZGVzY3JpcHRpb25zLmNyZWF0ZURlc2NyaXB0aW9uKGUsYSxyKSl9fX19KTt2YXIgemcsSjIsZnplLEdNPU0oKCk9PnsidXNlIHN0cmljdCI7JHMoKTt6Zz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTdHJlYW1TY29wZSIpfWNvbnN0cnVjdG9yKGUscixuKXt2YXIgaTt0aGlzLmVsZW1lbnRzPWUsdGhpcy5vdXRlclNjb3BlPXIsdGhpcy5jYXNlSW5zZW5zaXRpdmU9KGk9bj8uY2FzZUluc2Vuc2l0aXZlKSE9PW51bGwmJmkhPT12b2lkIDA/aTohMX1nZXRBbGxFbGVtZW50cygpe3JldHVybiB0aGlzLm91dGVyU2NvcGU/dGhpcy5lbGVtZW50cy5jb25jYXQodGhpcy5vdXRlclNjb3BlLmdldEFsbEVsZW1lbnRzKCkpOnRoaXMuZWxlbWVudHN9Z2V0RWxlbWVudChlKXtsZXQgcj10aGlzLmNhc2VJbnNlbnNpdGl2ZT90aGlzLmVsZW1lbnRzLmZpbmQobj0+bi5uYW1lLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpOnRoaXMuZWxlbWVudHMuZmluZChuPT5uLm5hbWU9PT1lKTtpZihyKXJldHVybiByO2lmKHRoaXMub3V0ZXJTY29wZSlyZXR1cm4gdGhpcy5vdXRlclNjb3BlLmdldEVsZW1lbnQoZSl9fSxKMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXBTY29wZSIpfWNvbnN0cnVjdG9yKGUscixuKXt2YXIgaTt0aGlzLmVsZW1lbnRzPW5ldyBNYXAsdGhpcy5jYXNlSW5zZW5zaXRpdmU9KGk9bj8uY2FzZUluc2Vuc2l0aXZlKSE9PW51bGwmJmkhPT12b2lkIDA/aTohMTtmb3IobGV0IGEgb2YgZSl7bGV0IHM9dGhpcy5jYXNlSW5zZW5zaXRpdmU/YS5uYW1lLnRvTG93ZXJDYXNlKCk6YS5uYW1lO3RoaXMuZWxlbWVudHMuc2V0KHMsYSl9dGhpcy5vdXRlclNjb3BlPXJ9Z2V0RWxlbWVudChlKXtsZXQgcj10aGlzLmNhc2VJbnNlbnNpdGl2ZT9lLnRvTG93ZXJDYXNlKCk6ZSxuPXRoaXMuZWxlbWVudHMuZ2V0KHIpO2lmKG4pcmV0dXJuIG47aWYodGhpcy5vdXRlclNjb3BlKXJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChlKX1nZXRBbGxFbGVtZW50cygpe2xldCBlPXRuKHRoaXMuZWxlbWVudHMudmFsdWVzKCkpO3JldHVybiB0aGlzLm91dGVyU2NvcGUmJihlPWUuY29uY2F0KHRoaXMub3V0ZXJTY29wZS5nZXRBbGxFbGVtZW50cygpKSksZX19LGZ6ZT17Z2V0RWxlbWVudCgpe30sZ2V0QWxsRWxlbWVudHMoKXtyZXR1cm4gcjJ9fX0pO3ZhciBHZyxleCxTMCxxaywkZyxYaz1NKCgpPT57InVzZSBzdHJpY3QiO0dnPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRpc3Bvc2FibGVDYWNoZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy50b0Rpc3Bvc2U9W10sdGhpcy5pc0Rpc3Bvc2VkPSExfW9uRGlzcG9zZShlKXt0aGlzLnRvRGlzcG9zZS5wdXNoKGUpfWRpc3Bvc2UoKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2xlYXIoKSx0aGlzLmlzRGlzcG9zZWQ9ITAsdGhpcy50b0Rpc3Bvc2UuZm9yRWFjaChlPT5lLmRpc3Bvc2UoKSl9dGhyb3dJZkRpc3Bvc2VkKCl7aWYodGhpcy5pc0Rpc3Bvc2VkKXRocm93IG5ldyBFcnJvcigiVGhpcyBjYWNoZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9fSxleD1jbGFzcyBleHRlbmRzIEdne3N0YXRpY3tvKHRoaXMsIlNpbXBsZUNhY2hlIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY2FjaGU9bmV3IE1hcH1oYXMoZSl7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZS5oYXMoZSl9c2V0KGUscil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLnNldChlLHIpfWdldChlLHIpe2lmKHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZS5oYXMoZSkpcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpe2xldCBuPXIoKTtyZXR1cm4gdGhpcy5jYWNoZS5zZXQoZSxuKSxufWVsc2UgcmV0dXJufWRlbGV0ZShlKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmRlbGV0ZShlKX1jbGVhcigpe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZS5jbGVhcigpfX0sUzA9Y2xhc3MgZXh0ZW5kcyBHZ3tzdGF0aWN7byh0aGlzLCJDb250ZXh0Q2FjaGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuY2FjaGU9bmV3IE1hcCx0aGlzLmNvbnZlcnRlcj1lPz8ocj0+cil9aGFzKGUscil7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZUZvckNvbnRleHQoZSkuaGFzKHIpfXNldChlLHIsbil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlRm9yQ29udGV4dChlKS5zZXQocixuKX1nZXQoZSxyLG4pe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCk7bGV0IGk9dGhpcy5jYWNoZUZvckNvbnRleHQoZSk7aWYoaS5oYXMocikpcmV0dXJuIGkuZ2V0KHIpO2lmKG4pe2xldCBhPW4oKTtyZXR1cm4gaS5zZXQocixhKSxhfWVsc2UgcmV0dXJufWRlbGV0ZShlLHIpe3JldHVybiB0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGVGb3JDb250ZXh0KGUpLmRlbGV0ZShyKX1jbGVhcihlKXtpZih0aGlzLnRocm93SWZEaXNwb3NlZCgpLGUpe2xldCByPXRoaXMuY29udmVydGVyKGUpO3RoaXMuY2FjaGUuZGVsZXRlKHIpfWVsc2UgdGhpcy5jYWNoZS5jbGVhcigpfWNhY2hlRm9yQ29udGV4dChlKXtsZXQgcj10aGlzLmNvbnZlcnRlcihlKSxuPXRoaXMuY2FjaGUuZ2V0KHIpO3JldHVybiBufHwobj1uZXcgTWFwLHRoaXMuY2FjaGUuc2V0KHIsbikpLG59fSxxaz1jbGFzcyBleHRlbmRzIFMwe3N0YXRpY3tvKHRoaXMsIkRvY3VtZW50Q2FjaGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihyPT5yLnRvU3RyaW5nKCkpLHRoaXMub25EaXNwb3NlKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vblVwZGF0ZSgocixuKT0+e2xldCBpPXIuY29uY2F0KG4pO2ZvcihsZXQgYSBvZiBpKXRoaXMuY2xlYXIoYSl9KSl9fSwkZz1jbGFzcyBleHRlbmRzIGV4e3N0YXRpY3tvKHRoaXMsIldvcmtzcGFjZUNhY2hlIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9uRGlzcG9zZShlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25VcGRhdGUoKCk9Pnt0aGlzLmNsZWFyKCl9KSl9fX0pO3ZhciB0eCwkTT1NKCgpPT57InVzZSBzdHJpY3QiO0dNKCk7b3MoKTskcygpO1hrKCk7dHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFNjb3BlUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbix0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuZGVzY3JpcHRpb25zPWUud29ya3NwYWNlLkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyLHRoaXMuaW5kZXhNYW5hZ2VyPWUuc2hhcmVkLndvcmtzcGFjZS5JbmRleE1hbmFnZXIsdGhpcy5nbG9iYWxTY29wZUNhY2hlPW5ldyAkZyhlLnNoYXJlZCl9Z2V0U2NvcGUoZSl7bGV0IHI9W10sbj10aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShlKSxpPVZpKGUuY29udGFpbmVyKS5wcmVjb21wdXRlZFNjb3BlcztpZihpKXtsZXQgcz1lLmNvbnRhaW5lcjtkb3tsZXQgbD1pLmdldChzKTtsLmxlbmd0aD4wJiZyLnB1c2godG4obCkuZmlsdGVyKHU9PnRoaXMucmVmbGVjdGlvbi5pc1N1YnR5cGUodS50eXBlLG4pKSkscz1zLiRjb250YWluZXJ9d2hpbGUocyl9bGV0IGE9dGhpcy5nZXRHbG9iYWxTY29wZShuLGUpO2ZvcihsZXQgcz1yLmxlbmd0aC0xO3M+PTA7cy0tKWE9dGhpcy5jcmVhdGVTY29wZShyW3NdLGEpO3JldHVybiBhfWNyZWF0ZVNjb3BlKGUscixuKXtyZXR1cm4gbmV3IHpnKHRuKGUpLHIsbil9Y3JlYXRlU2NvcGVGb3JOb2RlcyhlLHIsbil7bGV0IGk9dG4oZSkubWFwKGE9PntsZXQgcz10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGEpO2lmKHMpcmV0dXJuIHRoaXMuZGVzY3JpcHRpb25zLmNyZWF0ZURlc2NyaXB0aW9uKGEscyl9KS5ub25OdWxsYWJsZSgpO3JldHVybiBuZXcgemcoaSxyLG4pfWdldEdsb2JhbFNjb3BlKGUscil7cmV0dXJuIHRoaXMuZ2xvYmFsU2NvcGVDYWNoZS5nZXQoZSwoKT0+bmV3IEoyKHRoaXMuaW5kZXhNYW5hZ2VyLmFsbEVsZW1lbnRzKGUpKSl9fX0pO2Z1bmN0aW9uIFZNKHQpe3JldHVybiB0eXBlb2YgdC4kY29tbWVudD09InN0cmluZyJ9ZnVuY3Rpb24gbWNlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJiEhdCYmKCIkcmVmImluIHR8fCIkZXJyb3IiaW4gdCl9dmFyIHJ4LGprPU0oKCk9PnsidXNlIHN0cmljdCI7T00oKTtabygpO29zKCk7VmwoKTtvKFZNLCJpc0FzdE5vZGVXaXRoQ29tbWVudCIpO28obWNlLCJpc0ludGVybWVkaWF0ZVJlZmVyZW5jZSIpO3J4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRKc29uU2VyaWFsaXplciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWdub3JlUHJvcGVydGllcz1uZXcgU2V0KFsiJGNvbnRhaW5lciIsIiRjb250YWluZXJQcm9wZXJ0eSIsIiRjb250YWluZXJJbmRleCIsIiRkb2N1bWVudCIsIiRjc3ROb2RlIl0pLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLmFzdE5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yLHRoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5jb21tZW50UHJvdmlkZXI9ZS5kb2N1bWVudGF0aW9uLkNvbW1lbnRQcm92aWRlcn1zZXJpYWxpemUoZSxyPXt9KXtsZXQgbj1yPy5yZXBsYWNlcixpPW8oKHMsbCk9PnRoaXMucmVwbGFjZXIocyxsLHIpLCJkZWZhdWx0UmVwbGFjZXIiKSxhPW4/KHMsbCk9Pm4ocyxsLGkpOmk7dHJ5e3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudD1WaShlKSxKU09OLnN0cmluZ2lmeShlLGEscj8uc3BhY2UpfWZpbmFsbHl7dGhpcy5jdXJyZW50RG9jdW1lbnQ9dm9pZCAwfX1kZXNlcmlhbGl6ZShlLHI9e30pe2xldCBuPUpTT04ucGFyc2UoZSk7cmV0dXJuIHRoaXMubGlua05vZGUobixuLHIpLG59cmVwbGFjZXIoZSxyLHtyZWZUZXh0Om4sc291cmNlVGV4dDppLHRleHRSZWdpb25zOmEsY29tbWVudHM6cyx1cmlDb252ZXJ0ZXI6bH0pe3ZhciB1LGgsZixkO2lmKCF0aGlzLmlnbm9yZVByb3BlcnRpZXMuaGFzKGUpKWlmKFRhKHIpKXtsZXQgcD1yLnJlZixtPW4/ci4kcmVmVGV4dDp2b2lkIDA7aWYocCl7bGV0IGc9VmkocCkseT0iIjt0aGlzLmN1cnJlbnREb2N1bWVudCYmdGhpcy5jdXJyZW50RG9jdW1lbnQhPT1nJiYobD95PWwoZy51cmkscik6eT1nLnVyaS50b1N0cmluZygpKTtsZXQgdj10aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKHApO3JldHVybnskcmVmOmAke3l9IyR7dn1gLCRyZWZUZXh0Om19fWVsc2UgcmV0dXJueyRlcnJvcjooaD0odT1yLmVycm9yKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUubWVzc2FnZSkhPT1udWxsJiZoIT09dm9pZCAwP2g6IkNvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSIsJHJlZlRleHQ6bX19ZWxzZSBpZihyaShyKSl7bGV0IHA7aWYoYSYmKHA9dGhpcy5hZGRBc3ROb2RlUmVnaW9uV2l0aEFzc2lnbm1lbnRzVG8oT2JqZWN0LmFzc2lnbih7fSxyKSksKCFlfHxyLiRkb2N1bWVudCkmJnA/LiR0ZXh0UmVnaW9uJiYocC4kdGV4dFJlZ2lvbi5kb2N1bWVudFVSST0oZj10aGlzLmN1cnJlbnREb2N1bWVudCk9PT1udWxsfHxmPT09dm9pZCAwP3ZvaWQgMDpmLnVyaS50b1N0cmluZygpKSksaSYmIWUmJihwPz8ocD1PYmplY3QuYXNzaWduKHt9LHIpKSxwLiRzb3VyY2VUZXh0PShkPXIuJGNzdE5vZGUpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC50ZXh0KSxzKXtwPz8ocD1PYmplY3QuYXNzaWduKHt9LHIpKTtsZXQgbT10aGlzLmNvbW1lbnRQcm92aWRlci5nZXRDb21tZW50KHIpO20mJihwLiRjb21tZW50PW0ucmVwbGFjZSgvXHIvZywiIikpfXJldHVybiBwPz9yfWVsc2UgcmV0dXJuIHJ9YWRkQXN0Tm9kZVJlZ2lvbldpdGhBc3NpZ25tZW50c1RvKGUpe2xldCByPW8obj0+KHtvZmZzZXQ6bi5vZmZzZXQsZW5kOm4uZW5kLGxlbmd0aDpuLmxlbmd0aCxyYW5nZTpuLnJhbmdlfSksImNyZWF0ZURvY3VtZW50U2VnbWVudCIpO2lmKGUuJGNzdE5vZGUpe2xldCBuPWUuJHRleHRSZWdpb249cihlLiRjc3ROb2RlKSxpPW4uYXNzaWdubWVudHM9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcihhPT4hYS5zdGFydHNXaXRoKCIkIikpLmZvckVhY2goYT0+e2xldCBzPXJSKGUuJGNzdE5vZGUsYSkubWFwKHIpO3MubGVuZ3RoIT09MCYmKGlbYV09cyl9KSxlfX1saW5rTm9kZShlLHIsbixpLGEscyl7Zm9yKGxldFt1LGhdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IGQ9aFtmXTttY2UoZCk/aFtmXT10aGlzLnJldml2ZVJlZmVyZW5jZShlLHUscixkLG4pOnJpKGQpJiZ0aGlzLmxpbmtOb2RlKGQscixuLGUsdSxmKX1lbHNlIG1jZShoKT9lW3VdPXRoaXMucmV2aXZlUmVmZXJlbmNlKGUsdSxyLGgsbik6cmkoaCkmJnRoaXMubGlua05vZGUoaCxyLG4sZSx1KTtsZXQgbD1lO2wuJGNvbnRhaW5lcj1pLGwuJGNvbnRhaW5lclByb3BlcnR5PWEsbC4kY29udGFpbmVySW5kZXg9c31yZXZpdmVSZWZlcmVuY2UoZSxyLG4saSxhKXtsZXQgcz1pLiRyZWZUZXh0LGw9aS4kZXJyb3I7aWYoaS4kcmVmKXtsZXQgdT10aGlzLmdldFJlZk5vZGUobixpLiRyZWYsYS51cmlDb252ZXJ0ZXIpO2lmKHJpKHUpKXJldHVybiBzfHwocz10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKHUpKSx7JHJlZlRleHQ6cz8/IiIscmVmOnV9O2w9dX1pZihsKXtsZXQgdT17JHJlZlRleHQ6cz8/IiJ9O3JldHVybiB1LmVycm9yPXtjb250YWluZXI6ZSxwcm9wZXJ0eTpyLG1lc3NhZ2U6bCxyZWZlcmVuY2U6dX0sdX1lbHNlIHJldHVybn1nZXRSZWZOb2RlKGUscixuKXt0cnl7bGV0IGk9ci5pbmRleE9mKCIjIik7aWYoaT09PTApe2xldCB1PXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZShlLHIuc3Vic3RyaW5nKDEpKTtyZXR1cm4gdXx8IkNvdWxkIG5vdCByZXNvbHZlIHBhdGg6ICIrcn1pZihpPDApe2xldCB1PW4/bihyKTpIcy5wYXJzZShyKSxoPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudCh1KTtyZXR1cm4gaD9oLnBhcnNlUmVzdWx0LnZhbHVlOiJDb3VsZCBub3QgZmluZCBkb2N1bWVudCBmb3IgVVJJOiAiK3J9bGV0IGE9bj9uKHIuc3Vic3RyaW5nKDAsaSkpOkhzLnBhcnNlKHIuc3Vic3RyaW5nKDAsaSkpLHM9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KGEpO2lmKCFzKXJldHVybiJDb3VsZCBub3QgZmluZCBkb2N1bWVudCBmb3IgVVJJOiAiK3I7aWYoaT09PXIubGVuZ3RoLTEpcmV0dXJuIHMucGFyc2VSZXN1bHQudmFsdWU7bGV0IGw9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKHMucGFyc2VSZXN1bHQudmFsdWUsci5zdWJzdHJpbmcoaSsxKSk7cmV0dXJuIGx8fCJDb3VsZCBub3QgcmVzb2x2ZSBVUkk6ICIrcn1jYXRjaChpKXtyZXR1cm4gU3RyaW5nKGkpfX19fSk7dmFyIG54LFVNPU0oKCk9PnsidXNlIHN0cmljdCI7VWMoKTtueD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2VydmljZVJlZ2lzdHJ5Iil9cmVnaXN0ZXIoZSl7aWYoIXRoaXMuc2luZ2xldG9uJiYhdGhpcy5tYXApe3RoaXMuc2luZ2xldG9uPWU7cmV0dXJufWlmKCF0aGlzLm1hcCYmKHRoaXMubWFwPXt9LHRoaXMuc2luZ2xldG9uKSl7Zm9yKGxldCByIG9mIHRoaXMuc2luZ2xldG9uLkxhbmd1YWdlTWV0YURhdGEuZmlsZUV4dGVuc2lvbnMpdGhpcy5tYXBbcl09dGhpcy5zaW5nbGV0b247dGhpcy5zaW5nbGV0b249dm9pZCAwfWZvcihsZXQgciBvZiBlLkxhbmd1YWdlTWV0YURhdGEuZmlsZUV4dGVuc2lvbnMpdGhpcy5tYXBbcl0hPT12b2lkIDAmJnRoaXMubWFwW3JdIT09ZSYmY29uc29sZS53YXJuKGBUaGUgZmlsZSBleHRlbnNpb24gJHtyfSBpcyB1c2VkIGJ5IG11bHRpcGxlIGxhbmd1YWdlcy4gSXQgaXMgbm93IGFzc2lnbmVkIHRvICcke2UuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkfScuYCksdGhpcy5tYXBbcl09ZX1nZXRTZXJ2aWNlcyhlKXtpZih0aGlzLnNpbmdsZXRvbiE9PXZvaWQgMClyZXR1cm4gdGhpcy5zaW5nbGV0b247aWYodGhpcy5tYXA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUaGUgc2VydmljZSByZWdpc3RyeSBpcyBlbXB0eS4gVXNlIGByZWdpc3RlcmAgdG8gcmVnaXN0ZXIgdGhlIHNlcnZpY2VzIG9mIGEgbGFuZ3VhZ2UuIik7bGV0IHI9ZHMuZXh0bmFtZShlKSxuPXRoaXMubWFwW3JdO2lmKCFuKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgcmVnaXN0cnkgY29udGFpbnMgbm8gc2VydmljZXMgZm9yIHRoZSBleHRlbnNpb24gJyR7cn0nLmApO3JldHVybiBufWdldCBhbGwoKXtyZXR1cm4gdGhpcy5zaW5nbGV0b24hPT12b2lkIDA/W3RoaXMuc2luZ2xldG9uXTp0aGlzLm1hcCE9PXZvaWQgMD9PYmplY3QudmFsdWVzKHRoaXMubWFwKTpbXX19fSk7ZnVuY3Rpb24gS2sodCl7cmV0dXJue2NvZGU6dH19dmFyIFZnLGl4LGF4PU0oKCk9PnsidXNlIHN0cmljdCI7RmcoKTtubCgpOyRzKCk7byhLaywiZGlhZ25vc3RpY0RhdGEiKTsoZnVuY3Rpb24odCl7dC5hbGw9WyJmYXN0Iiwic2xvdyIsImJ1aWx0LWluIl19KShWZ3x8KFZnPXt9KSk7aXg9Y2xhc3N7c3RhdGlje28odGhpcywiVmFsaWRhdGlvblJlZ2lzdHJ5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5lbnRyaWVzPW5ldyBIYyx0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbn1yZWdpc3RlcihlLHI9dGhpcyxuPSJmYXN0Iil7aWYobj09PSJidWlsdC1pbiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuIik7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBzPWE7aWYoQXJyYXkuaXNBcnJheShzKSlmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24obCxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksdSl9ZWxzZSBpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IGw9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24ocyxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksbCl9fX13cmFwVmFsaWRhdGlvbkV4Y2VwdGlvbihlLHIpe3JldHVybiBhc3luYyhuLGksYSk9Pnt0cnl7YXdhaXQgZS5jYWxsKHIsbixpLGEpfWNhdGNoKHMpe2lmKG1mKHMpKXRocm93IHM7Y29uc29sZS5lcnJvcigiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb246IixzKTtsZXQgbD1zIGluc3RhbmNlb2YgRXJyb3I/cy5tZXNzYWdlOlN0cmluZyhzKTtzIGluc3RhbmNlb2YgRXJyb3ImJnMuc3RhY2smJmNvbnNvbGUuZXJyb3Iocy5zdGFjayksaSgiZXJyb3IiLCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjogIitsLHtub2RlOm59KX19fWFkZEVudHJ5KGUscil7aWYoZT09PSJBc3ROb2RlIil7dGhpcy5lbnRyaWVzLmFkZCgiQXN0Tm9kZSIscik7cmV0dXJufWZvcihsZXQgbiBvZiB0aGlzLnJlZmxlY3Rpb24uZ2V0QWxsU3ViVHlwZXMoZSkpdGhpcy5lbnRyaWVzLmFkZChuLHIpfWdldENoZWNrcyhlLHIpe2xldCBuPXRuKHRoaXMuZW50cmllcy5nZXQoZSkpLmNvbmNhdCh0aGlzLmVudHJpZXMuZ2V0KCJBc3ROb2RlIikpO3JldHVybiByJiYobj1uLmZpbHRlcihpPT5yLmluY2x1ZGVzKGkuY2F0ZWdvcnkpKSksbi5tYXAoaT0+aS5jaGVjayl9fX0pO2Z1bmN0aW9uIGdjZSh0KXtpZih0LnJhbmdlKXJldHVybiB0LnJhbmdlO2xldCBlO3JldHVybiB0eXBlb2YgdC5wcm9wZXJ0eT09InN0cmluZyI/ZT1wMih0Lm5vZGUuJGNzdE5vZGUsdC5wcm9wZXJ0eSx0LmluZGV4KTp0eXBlb2YgdC5rZXl3b3JkPT0ic3RyaW5nIiYmKGU9aVIodC5ub2RlLiRjc3ROb2RlLHQua2V5d29yZCx0LmluZGV4KSksZT8/KGU9dC5ub2RlLiRjc3ROb2RlKSxlP2UucmFuZ2U6e3N0YXJ0OntsaW5lOjAsY2hhcmFjdGVyOjB9LGVuZDp7bGluZTowLGNoYXJhY3RlcjowfX19ZnVuY3Rpb24gUWsodCl7c3dpdGNoKHQpe2Nhc2UiZXJyb3IiOnJldHVybiAxO2Nhc2Uid2FybmluZyI6cmV0dXJuIDI7Y2FzZSJpbmZvIjpyZXR1cm4gMztjYXNlImhpbnQiOnJldHVybiA0O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICIrdCl9fXZhciBzeCxRdSxITT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7VmwoKTtvcygpO3psKCk7bmwoKTtheCgpO3N4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudFZhbGlkYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudmFsaWRhdGlvblJlZ2lzdHJ5PWUudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVnaXN0cnksdGhpcy5tZXRhZGF0YT1lLkxhbmd1YWdlTWV0YURhdGF9YXN5bmMgdmFsaWRhdGVEb2N1bWVudChlLHI9e30sbj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1lLnBhcnNlUmVzdWx0LGE9W107aWYoYXdhaXQgSGkobiksKCFyLmNhdGVnb3JpZXN8fHIuY2F0ZWdvcmllcy5pbmNsdWRlcygiYnVpbHQtaW4iKSkmJih0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMoaSxhLHIpLHIuc3RvcEFmdGVyTGV4aW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVF1LkxleGluZ0Vycm9yfSl8fCh0aGlzLnByb2Nlc3NQYXJzaW5nRXJyb3JzKGksYSxyKSxyLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09UXUuUGFyc2luZ0Vycm9yfSkpfHwodGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhlLGEsciksci5zdG9wQWZ0ZXJMaW5raW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVF1LkxpbmtpbmdFcnJvcn0pKSkpcmV0dXJuIGE7dHJ5e2EucHVzaCguLi5hd2FpdCB0aGlzLnZhbGlkYXRlQXN0KGkudmFsdWUscixuKSl9Y2F0Y2gocyl7aWYobWYocykpdGhyb3cgcztjb25zb2xlLmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjoiLHMpfXJldHVybiBhd2FpdCBIaShuKSxhfXByb2Nlc3NMZXhpbmdFcnJvcnMoZSxyLG4pe2ZvcihsZXQgaSBvZiBlLmxleGVyRXJyb3JzKXtsZXQgYT17c2V2ZXJpdHk6UWsoImVycm9yIikscmFuZ2U6e3N0YXJ0OntsaW5lOmkubGluZS0xLGNoYXJhY3RlcjppLmNvbHVtbi0xfSxlbmQ6e2xpbmU6aS5saW5lLTEsY2hhcmFjdGVyOmkuY29sdW1uK2kubGVuZ3RoLTF9fSxtZXNzYWdlOmkubWVzc2FnZSxkYXRhOktrKFF1LkxleGluZ0Vycm9yKSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX07ci5wdXNoKGEpfX1wcm9jZXNzUGFyc2luZ0Vycm9ycyhlLHIsbil7Zm9yKGxldCBpIG9mIGUucGFyc2VyRXJyb3JzKXtsZXQgYTtpZihpc05hTihpLnRva2VuLnN0YXJ0T2Zmc2V0KSl7aWYoInByZXZpb3VzVG9rZW4iaW4gaSl7bGV0IHM9aS5wcmV2aW91c1Rva2VuO2lmKGlzTmFOKHMuc3RhcnRPZmZzZXQpKXtsZXQgbD17bGluZTowLGNoYXJhY3RlcjowfTthPXtzdGFydDpsLGVuZDpsfX1lbHNle2xldCBsPXtsaW5lOnMuZW5kTGluZS0xLGNoYXJhY3RlcjpzLmVuZENvbHVtbn07YT17c3RhcnQ6bCxlbmQ6bH19fX1lbHNlIGE9ZWcoaS50b2tlbik7aWYoYSl7bGV0IHM9e3NldmVyaXR5OlFrKCJlcnJvciIpLHJhbmdlOmEsbWVzc2FnZTppLm1lc3NhZ2UsZGF0YTpLayhRdS5QYXJzaW5nRXJyb3IpLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfTtyLnB1c2gocyl9fX1wcm9jZXNzTGlua2luZ0Vycm9ycyhlLHIsbil7Zm9yKGxldCBpIG9mIGUucmVmZXJlbmNlcyl7bGV0IGE9aS5lcnJvcjtpZihhKXtsZXQgcz17bm9kZTphLmNvbnRhaW5lcixwcm9wZXJ0eTphLnByb3BlcnR5LGluZGV4OmEuaW5kZXgsZGF0YTp7Y29kZTpRdS5MaW5raW5nRXJyb3IsY29udGFpbmVyVHlwZTphLmNvbnRhaW5lci4kdHlwZSxwcm9wZXJ0eTphLnByb3BlcnR5LHJlZlRleHQ6YS5yZWZlcmVuY2UuJHJlZlRleHR9fTtyLnB1c2godGhpcy50b0RpYWdub3N0aWMoImVycm9yIixhLm1lc3NhZ2UscykpfX19YXN5bmMgdmFsaWRhdGVBc3QoZSxyLG49QXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9W10sYT1vKChzLGwsdSk9PntpLnB1c2godGhpcy50b0RpYWdub3N0aWMocyxsLHUpKX0sImFjY2VwdG9yIik7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHRsKGUpLm1hcChhc3luYyBzPT57YXdhaXQgSGkobik7bGV0IGw9dGhpcy52YWxpZGF0aW9uUmVnaXN0cnkuZ2V0Q2hlY2tzKHMuJHR5cGUsci5jYXRlZ29yaWVzKTtmb3IobGV0IHUgb2YgbClhd2FpdCB1KHMsYSxuKX0pKSxpfXRvRGlhZ25vc3RpYyhlLHIsbil7cmV0dXJue21lc3NhZ2U6cixyYW5nZTpnY2Uobiksc2V2ZXJpdHk6UWsoZSksY29kZTpuLmNvZGUsY29kZURlc2NyaXB0aW9uOm4uY29kZURlc2NyaXB0aW9uLHRhZ3M6bi50YWdzLHJlbGF0ZWRJbmZvcm1hdGlvbjpuLnJlbGF0ZWRJbmZvcm1hdGlvbixkYXRhOm4uZGF0YSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX19Z2V0U291cmNlKCl7cmV0dXJuIHRoaXMubWV0YWRhdGEubGFuZ3VhZ2VJZH19O28oZ2NlLCJnZXREaWFnbm9zdGljUmFuZ2UiKTtvKFFrLCJ0b0RpYWdub3N0aWNTZXZlcml0eSIpOyhmdW5jdGlvbih0KXt0LkxleGluZ0Vycm9yPSJsZXhpbmctZXJyb3IiLHQuUGFyc2luZ0Vycm9yPSJwYXJzaW5nLWVycm9yIix0LkxpbmtpbmdFcnJvcj0ibGlua2luZy1lcnJvciJ9KShRdXx8KFF1PXt9KSl9KTt2YXIgb3gsbHgsV009TSgoKT0+eyJ1c2Ugc3RyaWN0IjtybCgpO1pvKCk7b3MoKTt6bCgpO25sKCk7VWMoKTtveD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmFzdE5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yLHRoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXJ9Y3JlYXRlRGVzY3JpcHRpb24oZSxyLG49VmkoZSkpe3I/PyhyPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUoZSkpO2xldCBpPXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBOb2RlIGF0IHBhdGggJHtpfSBoYXMgbm8gbmFtZS5gKTtsZXQgYSxzPW8oKCk9Pnt2YXIgbDtyZXR1cm4gYT8/KGE9ZTAoKGw9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUoZSkpIT09bnVsbCYmbCE9PXZvaWQgMD9sOmUuJGNzdE5vZGUpKX0sIm5hbWVTZWdtZW50R2V0dGVyIik7cmV0dXJue25vZGU6ZSxuYW1lOnIsZ2V0IG5hbWVTZWdtZW50KCl7cmV0dXJuIHMoKX0sc2VsZWN0aW9uU2VnbWVudDplMChlLiRjc3ROb2RlKSx0eXBlOmUuJHR5cGUsZG9jdW1lbnRVcmk6bi51cmkscGF0aDppfX19LGx4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRSZWZlcmVuY2VEZXNjcmlwdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ub2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcn1hc3luYyBjcmVhdGVEZXNjcmlwdGlvbnMoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPVtdLGk9ZS5wYXJzZVJlc3VsdC52YWx1ZTtmb3IobGV0IGEgb2YgdGwoaSkpYXdhaXQgSGkocikscmcoYSkuZmlsdGVyKHM9PiFaZChzKSkuZm9yRWFjaChzPT57bGV0IGw9dGhpcy5jcmVhdGVEZXNjcmlwdGlvbihzKTtsJiZuLnB1c2gobCl9KTtyZXR1cm4gbn1jcmVhdGVEZXNjcmlwdGlvbihlKXtsZXQgcj1lLnJlZmVyZW5jZS4kbm9kZURlc2NyaXB0aW9uLG49ZS5yZWZlcmVuY2UuJHJlZk5vZGU7aWYoIXJ8fCFuKXJldHVybjtsZXQgaT1WaShlLmNvbnRhaW5lcikudXJpO3JldHVybntzb3VyY2VVcmk6aSxzb3VyY2VQYXRoOnRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZS5jb250YWluZXIpLHRhcmdldFVyaTpyLmRvY3VtZW50VXJpLHRhcmdldFBhdGg6ci5wYXRoLHNlZ21lbnQ6ZTAobiksbG9jYWw6ZHMuZXF1YWxzKHIuZG9jdW1lbnRVcmksaSl9fX19KTt2YXIgY3gsWU09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0QXN0Tm9kZUxvY2F0b3IiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuc2VnbWVudFNlcGFyYXRvcj0iLyIsdGhpcy5pbmRleFNlcGFyYXRvcj0iQCJ9Z2V0QXN0Tm9kZVBhdGgoZSl7aWYoZS4kY29udGFpbmVyKXtsZXQgcj10aGlzLmdldEFzdE5vZGVQYXRoKGUuJGNvbnRhaW5lciksbj10aGlzLmdldFBhdGhTZWdtZW50KGUpO3JldHVybiByK3RoaXMuc2VnbWVudFNlcGFyYXRvcitufXJldHVybiIifWdldFBhdGhTZWdtZW50KHskY29udGFpbmVyUHJvcGVydHk6ZSwkY29udGFpbmVySW5kZXg6cn0pe2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyAnJGNvbnRhaW5lclByb3BlcnR5JyBpbiBBU1Qgbm9kZS4iKTtyZXR1cm4gciE9PXZvaWQgMD9lK3RoaXMuaW5kZXhTZXBhcmF0b3IrcjplfWdldEFzdE5vZGUoZSxyKXtyZXR1cm4gci5zcGxpdCh0aGlzLnNlZ21lbnRTZXBhcmF0b3IpLnJlZHVjZSgoaSxhKT0+e2lmKCFpfHxhLmxlbmd0aD09PTApcmV0dXJuIGk7bGV0IHM9YS5pbmRleE9mKHRoaXMuaW5kZXhTZXBhcmF0b3IpO2lmKHM+MCl7bGV0IGw9YS5zdWJzdHJpbmcoMCxzKSx1PXBhcnNlSW50KGEuc3Vic3RyaW5nKHMrMSkpLGg9aVtsXTtyZXR1cm4gaD8uW3VdfXJldHVybiBpW2FdfSxlKX19fSk7dmFyIHV4LHFNPU0oKCk9PnsidXNlIHN0cmljdCI7bmwoKTt1eD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29uZmlndXJhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fcmVhZHk9bmV3IGZzLHRoaXMuc2V0dGluZ3M9e30sdGhpcy53b3Jrc3BhY2VDb25maWc9ITEsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnl9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2V9aW5pdGlhbGl6ZShlKXt2YXIgcixuO3RoaXMud29ya3NwYWNlQ29uZmlnPShuPShyPWUuY2FwYWJpbGl0aWVzLndvcmtzcGFjZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNvbmZpZ3VyYXRpb24pIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExfWFzeW5jIGluaXRpYWxpemVkKGUpe2lmKHRoaXMud29ya3NwYWNlQ29uZmlnKXtpZihlLnJlZ2lzdGVyKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGw7ZS5yZWdpc3Rlcih7c2VjdGlvbjpyLm1hcChuPT50aGlzLnRvU2VjdGlvbk5hbWUobi5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKX0pfWlmKGUuZmV0Y2hDb25maWd1cmF0aW9uKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGk9Pih7c2VjdGlvbjp0aGlzLnRvU2VjdGlvbk5hbWUoaS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpfSkpLG49YXdhaXQgZS5mZXRjaENvbmZpZ3VyYXRpb24ocik7ci5mb3JFYWNoKChpLGEpPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihpLnNlY3Rpb24sblthXSl9KX19dGhpcy5fcmVhZHkucmVzb2x2ZSgpfXVwZGF0ZUNvbmZpZ3VyYXRpb24oZSl7ZS5zZXR0aW5ncyYmT2JqZWN0LmtleXMoZS5zZXR0aW5ncykuZm9yRWFjaChyPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihyLGUuc2V0dGluZ3Nbcl0pfSl9dXBkYXRlU2VjdGlvbkNvbmZpZ3VyYXRpb24oZSxyKXt0aGlzLnNldHRpbmdzW2VdPXJ9YXN5bmMgZ2V0Q29uZmlndXJhdGlvbihlLHIpe2F3YWl0IHRoaXMucmVhZHk7bGV0IG49dGhpcy50b1NlY3Rpb25OYW1lKGUpO2lmKHRoaXMuc2V0dGluZ3Nbbl0pcmV0dXJuIHRoaXMuc2V0dGluZ3Nbbl1bcl19dG9TZWN0aW9uTmFtZShlKXtyZXR1cm5gJHtlfWB9fX0pO3ZhciBDMCxYTT1NKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybntkaXNwb3NlOm8oYXN5bmMoKT0+YXdhaXQgcigpLCJkaXNwb3NlIil9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKEMwfHwoQzA9e30pKX0pO3ZhciBoeCxqTT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7WE0oKTtGZygpO25sKCk7JHMoKTtheCgpO0JnKCk7aHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdERvY3VtZW50QnVpbGRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudXBkYXRlQnVpbGRPcHRpb25zPXt2YWxpZGF0aW9uOntjYXRlZ29yaWVzOlsiYnVpbHQtaW4iLCJmYXN0Il19fSx0aGlzLnVwZGF0ZUxpc3RlbmVycz1bXSx0aGlzLmJ1aWxkUGhhc2VMaXN0ZW5lcnM9bmV3IEhjLHRoaXMuYnVpbGRTdGF0ZT1uZXcgTWFwLHRoaXMuZG9jdW1lbnRCdWlsZFdhaXRlcnM9bmV3IE1hcCx0aGlzLmN1cnJlbnRTdGF0ZT1Ubi5DaGFuZ2VkLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMuaW5kZXhNYW5hZ2VyPWUud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeX1hc3luYyBidWlsZChlLHI9e30sbj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgaSxhO2ZvcihsZXQgcyBvZiBlKXtsZXQgbD1zLnVyaS50b1N0cmluZygpO2lmKHMuc3RhdGU9PT1Ubi5WYWxpZGF0ZWQpe2lmKHR5cGVvZiByLnZhbGlkYXRpb249PSJib29sZWFuIiYmci52YWxpZGF0aW9uKXMuc3RhdGU9VG4uSW5kZXhlZFJlZmVyZW5jZXMscy5kaWFnbm9zdGljcz12b2lkIDAsdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShsKTtlbHNlIGlmKHR5cGVvZiByLnZhbGlkYXRpb249PSJvYmplY3QiKXtsZXQgdT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGwpLGg9KGk9dT8ucmVzdWx0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudmFsaWRhdGlvbkNoZWNrcztpZihoKXtsZXQgZD0oKGE9ci52YWxpZGF0aW9uLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOlZnLmFsbCkuZmlsdGVyKHA9PiFoLmluY2x1ZGVzKHApKTtkLmxlbmd0aD4wJiYodGhpcy5idWlsZFN0YXRlLnNldChsLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczp7dmFsaWRhdGlvbjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sci52YWxpZGF0aW9uKSx7Y2F0ZWdvcmllczpkfSl9LHJlc3VsdDp1LnJlc3VsdH0pLHMuc3RhdGU9VG4uSW5kZXhlZFJlZmVyZW5jZXMpfX19ZWxzZSB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGwpfXRoaXMuY3VycmVudFN0YXRlPVRuLkNoYW5nZWQsYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUubWFwKHM9PnMudXJpKSxbXSksYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhlLHIsbil9YXN5bmMgdXBkYXRlKGUscixuPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3RoaXMuY3VycmVudFN0YXRlPVRuLkNoYW5nZWQ7Zm9yKGxldCBzIG9mIHIpdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KHMpLHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUocy50b1N0cmluZygpKSx0aGlzLmluZGV4TWFuYWdlci5yZW1vdmUocyk7Zm9yKGxldCBzIG9mIGUpe2lmKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaW52YWxpZGF0ZURvY3VtZW50KHMpKXtsZXQgdT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKHskdHlwZToiSU5WQUxJRCJ9LHMpO3Uuc3RhdGU9VG4uQ2hhbmdlZCx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQodSl9dGhpcy5idWlsZFN0YXRlLmRlbGV0ZShzLnRvU3RyaW5nKCkpfWxldCBpPXRuKGUpLmNvbmNhdChyKS5tYXAocz0+cy50b1N0cmluZygpKS50b1NldCgpO3RoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9PiFpLmhhcyhzLnVyaS50b1N0cmluZygpKSYmdGhpcy5zaG91bGRSZWxpbmsocyxpKSkuZm9yRWFjaChzPT57dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMocy51cmkpLnJlZmVyZW5jZXMuTGlua2VyLnVubGluayhzKSxzLnN0YXRlPU1hdGgubWluKHMuc3RhdGUsVG4uQ29tcHV0ZWRTY29wZXMpLHMuZGlhZ25vc3RpY3M9dm9pZCAwfSksYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUsciksYXdhaXQgSGkobik7bGV0IGE9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbC5maWx0ZXIocz0+e3ZhciBsO3JldHVybiBzLnN0YXRlPFRuLkxpbmtlZHx8ISghKChsPXRoaXMuYnVpbGRTdGF0ZS5nZXQocy51cmkudG9TdHJpbmcoKSkpPT09bnVsbHx8bD09PXZvaWQgMCkmJmwuY29tcGxldGVkKX0pLnRvQXJyYXkoKTthd2FpdCB0aGlzLmJ1aWxkRG9jdW1lbnRzKGEsdGhpcy51cGRhdGVCdWlsZE9wdGlvbnMsbil9YXN5bmMgZW1pdFVwZGF0ZShlLHIpe2F3YWl0IFByb21pc2UuYWxsKHRoaXMudXBkYXRlTGlzdGVuZXJzLm1hcChuPT5uKGUscikpKX1zaG91bGRSZWxpbmsoZSxyKXtyZXR1cm4gZS5yZWZlcmVuY2VzLnNvbWUobj0+bi5lcnJvciE9PXZvaWQgMCk/ITA6dGhpcy5pbmRleE1hbmFnZXIuaXNBZmZlY3RlZChlLHIpfW9uVXBkYXRlKGUpe3JldHVybiB0aGlzLnVwZGF0ZUxpc3RlbmVycy5wdXNoKGUpLEMwLmNyZWF0ZSgoKT0+e2xldCByPXRoaXMudXBkYXRlTGlzdGVuZXJzLmluZGV4T2YoZSk7cj49MCYmdGhpcy51cGRhdGVMaXN0ZW5lcnMuc3BsaWNlKHIsMSl9KX1hc3luYyBidWlsZERvY3VtZW50cyhlLHIsbil7dGhpcy5wcmVwYXJlQnVpbGQoZSxyKSxhd2FpdCB0aGlzLnJ1bkNhbmNlbGFibGUoZSxUbi5QYXJzZWQsbixhPT50aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkudXBkYXRlKGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLFRuLkluZGV4ZWRDb250ZW50LG4sYT0+dGhpcy5pbmRleE1hbmFnZXIudXBkYXRlQ29udGVudChhLG4pKSxhd2FpdCB0aGlzLnJ1bkNhbmNlbGFibGUoZSxUbi5Db21wdXRlZFNjb3BlcyxuLGFzeW5jIGE9PntsZXQgcz10aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhhLnVyaSkucmVmZXJlbmNlcy5TY29wZUNvbXB1dGF0aW9uO2EucHJlY29tcHV0ZWRTY29wZXM9YXdhaXQgcy5jb21wdXRlTG9jYWxTY29wZXMoYSxuKX0pLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLFRuLkxpbmtlZCxuLGE9PnRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGEudXJpKS5yZWZlcmVuY2VzLkxpbmtlci5saW5rKGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLFRuLkluZGV4ZWRSZWZlcmVuY2VzLG4sYT0+dGhpcy5pbmRleE1hbmFnZXIudXBkYXRlUmVmZXJlbmNlcyhhLG4pKTtsZXQgaT1lLmZpbHRlcihhPT50aGlzLnNob3VsZFZhbGlkYXRlKGEpKTthd2FpdCB0aGlzLnJ1bkNhbmNlbGFibGUoaSxUbi5WYWxpZGF0ZWQsbixhPT50aGlzLnZhbGlkYXRlKGEsbikpO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz10aGlzLmJ1aWxkU3RhdGUuZ2V0KGEudXJpLnRvU3RyaW5nKCkpO3MmJihzLmNvbXBsZXRlZD0hMCl9fXByZXBhcmVCdWlsZChlLHIpe2ZvcihsZXQgbiBvZiBlKXtsZXQgaT1uLnVyaS50b1N0cmluZygpLGE9dGhpcy5idWlsZFN0YXRlLmdldChpKTsoIWF8fGEuY29tcGxldGVkKSYmdGhpcy5idWlsZFN0YXRlLnNldChpLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczpyLHJlc3VsdDphPy5yZXN1bHR9KX19YXN5bmMgcnVuQ2FuY2VsYWJsZShlLHIsbixpKXtsZXQgYT1lLmZpbHRlcihzPT5zLnN0YXRlPHIpO2ZvcihsZXQgcyBvZiBhKWF3YWl0IEhpKG4pLGF3YWl0IGkocykscy5zdGF0ZT1yO2F3YWl0IHRoaXMubm90aWZ5QnVpbGRQaGFzZShhLHIsbiksdGhpcy5jdXJyZW50U3RhdGU9cn1vbkJ1aWxkUGhhc2UoZSxyKXtyZXR1cm4gdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmFkZChlLHIpLEMwLmNyZWF0ZSgoKT0+e3RoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5kZWxldGUoZSxyKX0pfXdhaXRVbnRpbChlLHIsbil7bGV0IGk7aWYociYmInBhdGgiaW4gcj9pPXI6bj1yLG4/PyhuPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpLGkpe2xldCBhPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChpKTtpZihhJiZhLnN0YXRlPmUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1yZXR1cm4gdGhpcy5jdXJyZW50U3RhdGU+PWU/UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk6bi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD9Qcm9taXNlLnJlamVjdChWYyk6bmV3IFByb21pc2UoKGEscyk9PntsZXQgbD10aGlzLm9uQnVpbGRQaGFzZShlLCgpPT57aWYobC5kaXNwb3NlKCksdS5kaXNwb3NlKCksaSl7bGV0IGg9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KGkpO2EoaD8udXJpKX1lbHNlIGEodm9pZCAwKX0pLHU9bi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgoKT0+e2wuZGlzcG9zZSgpLHUuZGlzcG9zZSgpLHMoVmMpfSl9KX1hc3luYyBub3RpZnlCdWlsZFBoYXNlKGUscixuKXtpZihlLmxlbmd0aD09PTApcmV0dXJuO2xldCBpPXRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5nZXQocik7Zm9yKGxldCBhIG9mIGkpYXdhaXQgSGkobiksYXdhaXQgYShlLG4pfXNob3VsZFZhbGlkYXRlKGUpe3JldHVybiEhdGhpcy5nZXRCdWlsZE9wdGlvbnMoZSkudmFsaWRhdGlvbn1hc3luYyB2YWxpZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZS51cmkpLnZhbGlkYXRpb24uRG9jdW1lbnRWYWxpZGF0b3Iscz10aGlzLmdldEJ1aWxkT3B0aW9ucyhlKS52YWxpZGF0aW9uLGw9dHlwZW9mIHM9PSJvYmplY3QiP3M6dm9pZCAwLHU9YXdhaXQgYS52YWxpZGF0ZURvY3VtZW50KGUsbCxyKTtlLmRpYWdub3N0aWNzP2UuZGlhZ25vc3RpY3MucHVzaCguLi51KTplLmRpYWdub3N0aWNzPXU7bGV0IGg9dGhpcy5idWlsZFN0YXRlLmdldChlLnVyaS50b1N0cmluZygpKTtpZihoKXsobj1oLnJlc3VsdCkhPT1udWxsJiZuIT09dm9pZCAwfHwoaC5yZXN1bHQ9e30pO2xldCBmPShpPWw/LmNhdGVnb3JpZXMpIT09bnVsbCYmaSE9PXZvaWQgMD9pOlZnLmFsbDtoLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzP2gucmVzdWx0LnZhbGlkYXRpb25DaGVja3MucHVzaCguLi5mKTpoLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzPVsuLi5mXX19Z2V0QnVpbGRPcHRpb25zKGUpe3ZhciByLG47cmV0dXJuKG49KHI9dGhpcy5idWlsZFN0YXRlLmdldChlLnVyaS50b1N0cmluZygpKSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm9wdGlvbnMpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnt9fX19KTt2YXIgZngsS009TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvcygpO1hrKCk7cmwoKTskcygpO1VjKCk7Zng9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdEluZGV4TWFuYWdlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3ltYm9sSW5kZXg9bmV3IE1hcCx0aGlzLnN5bWJvbEJ5VHlwZUluZGV4PW5ldyBTMCx0aGlzLnJlZmVyZW5jZUluZGV4PW5ldyBNYXAsdGhpcy5kb2N1bWVudHM9ZS53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeSx0aGlzLmFzdFJlZmxlY3Rpb249ZS5Bc3RSZWZsZWN0aW9ufWZpbmRBbGxSZWZlcmVuY2VzKGUscil7bGV0IG49VmkoZSkudXJpLGk9W107cmV0dXJuIHRoaXMucmVmZXJlbmNlSW5kZXguZm9yRWFjaChhPT57YS5mb3JFYWNoKHM9Pntkcy5lcXVhbHMocy50YXJnZXRVcmksbikmJnMudGFyZ2V0UGF0aD09PXImJmkucHVzaChzKX0pfSksdG4oaSl9YWxsRWxlbWVudHMoZSxyKXtsZXQgbj10bih0aGlzLnN5bWJvbEluZGV4LmtleXMoKSk7cmV0dXJuIHImJihuPW4uZmlsdGVyKGk9PiFyfHxyLmhhcyhpKSkpLG4ubWFwKGk9PnRoaXMuZ2V0RmlsZURlc2NyaXB0aW9ucyhpLGUpKS5mbGF0KCl9Z2V0RmlsZURlc2NyaXB0aW9ucyhlLHIpe3ZhciBuO3JldHVybiByP3RoaXMuc3ltYm9sQnlUeXBlSW5kZXguZ2V0KGUsciwoKT0+e3ZhciBhO3JldHVybigoYT10aGlzLnN5bWJvbEluZGV4LmdldChlKSkhPT1udWxsJiZhIT09dm9pZCAwP2E6W10pLmZpbHRlcihsPT50aGlzLmFzdFJlZmxlY3Rpb24uaXNTdWJ0eXBlKGwudHlwZSxyKSl9KToobj10aGlzLnN5bWJvbEluZGV4LmdldChlKSkhPT1udWxsJiZuIT09dm9pZCAwP246W119cmVtb3ZlKGUpe2xldCByPWUudG9TdHJpbmcoKTt0aGlzLnN5bWJvbEluZGV4LmRlbGV0ZShyKSx0aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmNsZWFyKHIpLHRoaXMucmVmZXJlbmNlSW5kZXguZGVsZXRlKHIpfWFzeW5jIHVwZGF0ZUNvbnRlbnQoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBpPWF3YWl0IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb24uY29tcHV0ZUV4cG9ydHMoZSxyKSxhPWUudXJpLnRvU3RyaW5nKCk7dGhpcy5zeW1ib2xJbmRleC5zZXQoYSxpKSx0aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmNsZWFyKGEpfWFzeW5jIHVwZGF0ZVJlZmVyZW5jZXMoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBpPWF3YWl0IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS53b3Jrc3BhY2UuUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlci5jcmVhdGVEZXNjcmlwdGlvbnMoZSxyKTt0aGlzLnJlZmVyZW5jZUluZGV4LnNldChlLnVyaS50b1N0cmluZygpLGkpfWlzQWZmZWN0ZWQoZSxyKXtsZXQgbj10aGlzLnJlZmVyZW5jZUluZGV4LmdldChlLnVyaS50b1N0cmluZygpKTtyZXR1cm4gbj9uLnNvbWUoaT0+IWkubG9jYWwmJnIuaGFzKGkudGFyZ2V0VXJpLnRvU3RyaW5nKCkpKTohMX19fSk7dmFyIGR4LFFNPU0oKCk9PnsidXNlIHN0cmljdCI7cmwoKTtubCgpO1VjKCk7ZHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmluaXRpYWxCdWlsZE9wdGlvbnM9e30sdGhpcy5fcmVhZHk9bmV3IGZzLHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5LHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMuZG9jdW1lbnRCdWlsZGVyPWUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlcix0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlcj1lLndvcmtzcGFjZS5GaWxlU3lzdGVtUHJvdmlkZXIsdGhpcy5tdXRleD1lLndvcmtzcGFjZS5Xb3Jrc3BhY2VMb2NrfWdldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZWFkeS5wcm9taXNlfWluaXRpYWxpemUoZSl7dmFyIHI7dGhpcy5mb2xkZXJzPShyPWUud29ya3NwYWNlRm9sZGVycykhPT1udWxsJiZyIT09dm9pZCAwP3I6dm9pZCAwfWluaXRpYWxpemVkKGUpe3JldHVybiB0aGlzLm11dGV4LndyaXRlKHI9Pnt2YXIgbjtyZXR1cm4gdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKChuPXRoaXMuZm9sZGVycykhPT1udWxsJiZuIT09dm9pZCAwP246W10scil9KX1hc3luYyBpbml0aWFsaXplV29ya3NwYWNlKGUscj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgbj1hd2FpdCB0aGlzLnBlcmZvcm1TdGFydHVwKGUpO2F3YWl0IEhpKHIpLGF3YWl0IHRoaXMuZG9jdW1lbnRCdWlsZGVyLmJ1aWxkKG4sdGhpcy5pbml0aWFsQnVpbGRPcHRpb25zLHIpfWFzeW5jIHBlcmZvcm1TdGFydHVwKGUpe2xldCByPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbC5mbGF0TWFwKGE9PmEuTGFuZ3VhZ2VNZXRhRGF0YS5maWxlRXh0ZW5zaW9ucyksbj1bXSxpPW8oYT0+e24ucHVzaChhKSx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaGFzRG9jdW1lbnQoYS51cmkpfHx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQoYSl9LCJjb2xsZWN0b3IiKTtyZXR1cm4gYXdhaXQgdGhpcy5sb2FkQWRkaXRpb25hbERvY3VtZW50cyhlLGkpLGF3YWl0IFByb21pc2UuYWxsKGUubWFwKGE9PlthLHRoaXMuZ2V0Um9vdEZvbGRlcihhKV0pLm1hcChhc3luYyBhPT50aGlzLnRyYXZlcnNlRm9sZGVyKC4uLmEscixpKSkpLHRoaXMuX3JlYWR5LnJlc29sdmUoKSxufWxvYWRBZGRpdGlvbmFsRG9jdW1lbnRzKGUscil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfWdldFJvb3RGb2xkZXIoZSl7cmV0dXJuIEhzLnBhcnNlKGUudXJpKX1hc3luYyB0cmF2ZXJzZUZvbGRlcihlLHIsbixpKXtsZXQgYT1hd2FpdCB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRGlyZWN0b3J5KHIpO2F3YWl0IFByb21pc2UuYWxsKGEubWFwKGFzeW5jIHM9PntpZih0aGlzLmluY2x1ZGVFbnRyeShlLHMsbikpe2lmKHMuaXNEaXJlY3RvcnkpYXdhaXQgdGhpcy50cmF2ZXJzZUZvbGRlcihlLHMudXJpLG4saSk7ZWxzZSBpZihzLmlzRmlsZSl7bGV0IGw9YXdhaXQgdGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldE9yQ3JlYXRlRG9jdW1lbnQocy51cmkpO2kobCl9fX0pKX1pbmNsdWRlRW50cnkoZSxyLG4pe2xldCBpPWRzLmJhc2VuYW1lKHIudXJpKTtpZihpLnN0YXJ0c1dpdGgoIi4iKSlyZXR1cm4hMTtpZihyLmlzRGlyZWN0b3J5KXJldHVybiBpIT09Im5vZGVfbW9kdWxlcyImJmkhPT0ib3V0IjtpZihyLmlzRmlsZSl7bGV0IGE9ZHMuZXh0bmFtZShyLnVyaSk7cmV0dXJuIG4uaW5jbHVkZXMoYSl9cmV0dXJuITF9fX0pO2Z1bmN0aW9uIHljZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKHQubGVuZ3RoPT09MHx8Im5hbWUiaW4gdFswXSl9ZnVuY3Rpb24gSk0odCl7cmV0dXJuIHQmJiJtb2RlcyJpbiB0JiYiZGVmYXVsdE1vZGUiaW4gdH1mdW5jdGlvbiBaTSh0KXtyZXR1cm4heWNlKHQpJiYhSk0odCl9dmFyIHB4LGVJPU0oKCk9PnsidXNlIHN0cmljdCI7ZzAoKTtweD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXIiKX1jb25zdHJ1Y3RvcihlKXtsZXQgcj1lLnBhcnNlci5Ub2tlbkJ1aWxkZXIuYnVpbGRUb2tlbnMoZS5HcmFtbWFyLHtjYXNlSW5zZW5zaXRpdmU6ZS5MYW5ndWFnZU1ldGFEYXRhLmNhc2VJbnNlbnNpdGl2ZX0pO3RoaXMudG9rZW5UeXBlcz10aGlzLnRvVG9rZW5UeXBlRGljdGlvbmFyeShyKTtsZXQgbj1aTShyKT9PYmplY3QudmFsdWVzKHIpOnI7dGhpcy5jaGV2cm90YWluTGV4ZXI9bmV3IGNpKG4se3Bvc2l0aW9uVHJhY2tpbmc6ImZ1bGwifSl9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy50b2tlblR5cGVzfXRva2VuaXplKGUpe3ZhciByO2xldCBuPXRoaXMuY2hldnJvdGFpbkxleGVyLnRva2VuaXplKGUpO3JldHVybnt0b2tlbnM6bi50b2tlbnMsZXJyb3JzOm4uZXJyb3JzLGhpZGRlbjoocj1uLmdyb3Vwcy5oaWRkZW4pIT09bnVsbCYmciE9PXZvaWQgMD9yOltdfX10b1Rva2VuVHlwZURpY3Rpb25hcnkoZSl7aWYoWk0oZSkpcmV0dXJuIGU7bGV0IHI9Sk0oZSk/T2JqZWN0LnZhbHVlcyhlLm1vZGVzKS5mbGF0KCk6ZSxuPXt9O3JldHVybiByLmZvckVhY2goaT0+bltpLm5hbWVdPWkpLG59fTtvKHljZSwiaXNUb2tlblR5cGVBcnJheSIpO28oSk0sImlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbiIpO28oWk0sImlzVG9rZW5UeXBlRGljdGlvbmFyeSIpfSk7ZnVuY3Rpb24gbkkodCxlLHIpe2xldCBuLGk7dHlwZW9mIHQ9PSJzdHJpbmciPyhpPWUsbj1yKTooaT10LnJhbmdlLnN0YXJ0LG49ZSksaXx8KGk9WHIuY3JlYXRlKDAsMCkpO2xldCBhPWJjZSh0KSxzPWFJKG4pLGw9cHplKHtsaW5lczphLHBvc2l0aW9uOmksb3B0aW9uczpzfSk7cmV0dXJuIHh6ZSh7aW5kZXg6MCx0b2tlbnM6bCxwb3NpdGlvbjppfSl9ZnVuY3Rpb24gaUkodCxlKXtsZXQgcj1hSShlKSxuPWJjZSh0KTtpZihuLmxlbmd0aD09PTApcmV0dXJuITE7bGV0IGk9blswXSxhPW5bbi5sZW5ndGgtMV0scz1yLnN0YXJ0LGw9ci5lbmQ7cmV0dXJuISFzPy5leGVjKGkpJiYhIWw/LmV4ZWMoYSl9ZnVuY3Rpb24gYmNlKHQpe2xldCBlPSIiO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/ZT10OmU9dC50ZXh0LGUuc3BsaXQoWE4pfWZ1bmN0aW9uIHB6ZSh0KXt2YXIgZSxyLG47bGV0IGk9W10sYT10LnBvc2l0aW9uLmxpbmUscz10LnBvc2l0aW9uLmNoYXJhY3Rlcjtmb3IobGV0IGw9MDtsPHQubGluZXMubGVuZ3RoO2wrKyl7bGV0IHU9bD09PTAsaD1sPT09dC5saW5lcy5sZW5ndGgtMSxmPXQubGluZXNbbF0sZD0wO2lmKHUmJnQub3B0aW9ucy5zdGFydCl7bGV0IG09KGU9dC5vcHRpb25zLnN0YXJ0KT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1lbHNle2xldCBtPShyPXQub3B0aW9ucy5saW5lKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1pZihoKXtsZXQgbT0obj10Lm9wdGlvbnMuZW5kKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXhlYyhmKTttJiYoZj1mLnN1YnN0cmluZygwLG0uaW5kZXgpKX1pZihmPWYuc3Vic3RyaW5nKDAsdnplKGYpKSxySShmLGQpPj1mLmxlbmd0aCl7aWYoaS5sZW5ndGg+MCl7bGV0IG09WHIuY3JlYXRlKGEscyk7aS5wdXNoKHt0eXBlOiJicmVhayIsY29udGVudDoiIixyYW5nZTpOci5jcmVhdGUobSxtKX0pfX1lbHNle3ZjZS5sYXN0SW5kZXg9ZDtsZXQgbT12Y2UuZXhlYyhmKTtpZihtKXtsZXQgZz1tWzBdLHk9bVsxXSx2PVhyLmNyZWF0ZShhLHMrZCkseD1Yci5jcmVhdGUoYSxzK2QrZy5sZW5ndGgpO2kucHVzaCh7dHlwZToidGFnIixjb250ZW50OnkscmFuZ2U6TnIuY3JlYXRlKHYseCl9KSxkKz1nLmxlbmd0aCxkPXJJKGYsZCl9aWYoZDxmLmxlbmd0aCl7bGV0IGc9Zi5zdWJzdHJpbmcoZCkseT1BcnJheS5mcm9tKGcubWF0Y2hBbGwoZHplKSk7aS5wdXNoKC4uLm16ZSh5LGcsYSxzK2QpKX19YSsrLHM9MH1yZXR1cm4gaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS50eXBlPT09ImJyZWFrIj9pLnNsaWNlKDAsLTEpOml9ZnVuY3Rpb24gbXplKHQsZSxyLG4pe2xldCBpPVtdO2lmKHQubGVuZ3RoPT09MCl7bGV0IGE9WHIuY3JlYXRlKHIsbikscz1Yci5jcmVhdGUocixuK2UubGVuZ3RoKTtpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6ZSxyYW5nZTpOci5jcmVhdGUoYSxzKX0pfWVsc2V7bGV0IGE9MDtmb3IobGV0IGwgb2YgdCl7bGV0IHU9bC5pbmRleCxoPWUuc3Vic3RyaW5nKGEsdSk7aC5sZW5ndGg+MCYmaS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OmUuc3Vic3RyaW5nKGEsdSkscmFuZ2U6TnIuY3JlYXRlKFhyLmNyZWF0ZShyLGErbiksWHIuY3JlYXRlKHIsdStuKSl9KTtsZXQgZj1oLmxlbmd0aCsxLGQ9bFsxXTtpZihpLnB1c2goe3R5cGU6ImlubGluZS10YWciLGNvbnRlbnQ6ZCxyYW5nZTpOci5jcmVhdGUoWHIuY3JlYXRlKHIsYStmK24pLFhyLmNyZWF0ZShyLGErZitkLmxlbmd0aCtuKSl9KSxmKz1kLmxlbmd0aCxsLmxlbmd0aD09PTQpe2YrPWxbMl0ubGVuZ3RoO2xldCBwPWxbM107aS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnAscmFuZ2U6TnIuY3JlYXRlKFhyLmNyZWF0ZShyLGErZituKSxYci5jcmVhdGUocixhK2YrcC5sZW5ndGgrbikpfSl9ZWxzZSBpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6IiIscmFuZ2U6TnIuY3JlYXRlKFhyLmNyZWF0ZShyLGErZituKSxYci5jcmVhdGUocixhK2YrbikpfSk7YT11K2xbMF0ubGVuZ3RofWxldCBzPWUuc3Vic3RyaW5nKGEpO3MubGVuZ3RoPjAmJmkucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpzLHJhbmdlOk5yLmNyZWF0ZShYci5jcmVhdGUocixhK24pLFhyLmNyZWF0ZShyLGErbitzLmxlbmd0aCkpfSl9cmV0dXJuIGl9ZnVuY3Rpb24gckkodCxlKXtsZXQgcj10LnN1YnN0cmluZyhlKS5tYXRjaChnemUpO3JldHVybiByP2Urci5pbmRleDp0Lmxlbmd0aH1mdW5jdGlvbiB2emUodCl7bGV0IGU9dC5tYXRjaCh5emUpO2lmKGUmJnR5cGVvZiBlLmluZGV4PT0ibnVtYmVyIilyZXR1cm4gZS5pbmRleH1mdW5jdGlvbiB4emUodCl7dmFyIGUscixuLGk7bGV0IGE9WHIuY3JlYXRlKHQucG9zaXRpb24ubGluZSx0LnBvc2l0aW9uLmNoYXJhY3Rlcik7aWYodC50b2tlbnMubGVuZ3RoPT09MClyZXR1cm4gbmV3IFprKFtdLE5yLmNyZWF0ZShhLGEpKTtsZXQgcz1bXTtmb3IoO3QuaW5kZXg8dC50b2tlbnMubGVuZ3RoOyl7bGV0IGg9YnplKHQsc1tzLmxlbmd0aC0xXSk7aCYmcy5wdXNoKGgpfWxldCBsPShyPShlPXNbMF0pPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5yYW5nZS5zdGFydCkhPT1udWxsJiZyIT09dm9pZCAwP3I6YSx1PShpPShuPXNbcy5sZW5ndGgtMV0pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5yYW5nZS5lbmQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOmE7cmV0dXJuIG5ldyBaayhzLE5yLmNyZWF0ZShsLHUpKX1mdW5jdGlvbiBiemUodCxlKXtsZXQgcj10LnRva2Vuc1t0LmluZGV4XTtpZihyLnR5cGU9PT0idGFnIilyZXR1cm4gVGNlKHQsITEpO2lmKHIudHlwZT09PSJ0ZXh0Inx8ci50eXBlPT09ImlubGluZS10YWciKXJldHVybiB3Y2UodCk7d3plKHIsZSksdC5pbmRleCsrfWZ1bmN0aW9uIHd6ZSh0LGUpe2lmKGUpe2xldCByPW5ldyBKaygiIix0LnJhbmdlKTsiaW5saW5lcyJpbiBlP2UuaW5saW5lcy5wdXNoKHIpOmUuY29udGVudC5pbmxpbmVzLnB1c2gocil9fWZ1bmN0aW9uIHdjZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4XSxyPWUsbj1lLGk9W107Zm9yKDtlJiZlLnR5cGUhPT0iYnJlYWsiJiZlLnR5cGUhPT0idGFnIjspaS5wdXNoKFR6ZSh0KSksbj1lLGU9dC50b2tlbnNbdC5pbmRleF07cmV0dXJuIG5ldyBneChpLE5yLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LG4ucmFuZ2UuZW5kKSl9ZnVuY3Rpb24gVHplKHQpe3JldHVybiB0LnRva2Vuc1t0LmluZGV4XS50eXBlPT09ImlubGluZS10YWciP1RjZSh0LCEwKTprY2UodCl9ZnVuY3Rpb24gVGNlKHQsZSl7bGV0IHI9dC50b2tlbnNbdC5pbmRleCsrXSxuPXIuY29udGVudC5zdWJzdHJpbmcoMSksaT10LnRva2Vuc1t0LmluZGV4XTtpZihpPy50eXBlPT09InRleHQiKWlmKGUpe2xldCBhPWtjZSh0KTtyZXR1cm4gbmV3IG14KG4sbmV3IGd4KFthXSxhLnJhbmdlKSxlLE5yLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LGEucmFuZ2UuZW5kKSl9ZWxzZXtsZXQgYT13Y2UodCk7cmV0dXJuIG5ldyBteChuLGEsZSxOci5jcmVhdGUoci5yYW5nZS5zdGFydCxhLnJhbmdlLmVuZCkpfWVsc2V7bGV0IGE9ci5yYW5nZTtyZXR1cm4gbmV3IG14KG4sbmV3IGd4KFtdLGEpLGUsYSl9fWZ1bmN0aW9uIGtjZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4KytdO3JldHVybiBuZXcgSmsoZS5jb250ZW50LGUucmFuZ2UpfWZ1bmN0aW9uIGFJKHQpe2lmKCF0KXJldHVybiBhSSh7c3RhcnQ6Ii8qKiIsZW5kOiIqLyIsbGluZToiKiJ9KTtsZXR7c3RhcnQ6ZSxlbmQ6cixsaW5lOm59PXQ7cmV0dXJue3N0YXJ0OnRJKGUsITApLGVuZDp0SShyLCExKSxsaW5lOnRJKG4sITApfX1mdW5jdGlvbiB0SSh0LGUpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJvYmplY3QiKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/bzAodCk6dC5zb3VyY2U7cmV0dXJuIGU/bmV3IFJlZ0V4cChgXlxccyoke3J9YCk6bmV3IFJlZ0V4cChgXFxzKiR7cn1cXHMqJGApfWVsc2UgcmV0dXJuIHR9ZnVuY3Rpb24ga3plKHQsZSxyKXt2YXIgbixpO2lmKHQ9PT0ibGlua3BsYWluInx8dD09PSJsaW5rY29kZSJ8fHQ9PT0ibGluayIpe2xldCBhPWUuaW5kZXhPZigiICIpLHM9ZTtpZihhPjApe2xldCB1PXJJKGUsYSk7cz1lLnN1YnN0cmluZyh1KSxlPWUuc3Vic3RyaW5nKDAsYSl9cmV0dXJuKHQ9PT0ibGlua2NvZGUifHx0PT09ImxpbmsiJiZyLmxpbms9PT0iY29kZSIpJiYocz1gXGAke3N9XGBgKSwoaT0obj1yLnJlbmRlckxpbmspPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jYWxsKHIsZSxzKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6RXplKGUscyl9fWZ1bmN0aW9uIEV6ZSh0LGUpe3RyeXtyZXR1cm4gSHMucGFyc2UodCwhMCksYFske2V9XSgke3R9KWB9Y2F0Y2h7cmV0dXJuIHR9fWZ1bmN0aW9uIHhjZSh0KXtyZXR1cm4gdC5lbmRzV2l0aChgCmApP2AKYDpgCgpgfXZhciB2Y2UsZHplLGd6ZSx5emUsWmssbXgsZ3gsSmssc0k9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmTSgpO2lnKCk7VWMoKTtvKG5JLCJwYXJzZUpTRG9jIik7byhpSSwiaXNKU0RvYyIpO28oYmNlLCJnZXRMaW5lcyIpO3ZjZT0vXHMqKEAoW1xwe0x9XVtccHtMfVxwe059XSopPykvdXksZHplPS9ceyhAW1xwe0x9XVtccHtMfVxwe059XSopKFxzKikoW15cclxufV0rKT9cfS9ndTtvKHB6ZSwidG9rZW5pemUiKTtvKG16ZSwiYnVpbGRJbmxpbmVUb2tlbnMiKTtnemU9L1xTLyx5emU9L1xzKiQvO28ockksInNraXBXaGl0ZXNwYWNlIik7byh2emUsImxhc3RDaGFyYWN0ZXIiKTtvKHh6ZSwicGFyc2VKU0RvY0NvbW1lbnQiKTtvKGJ6ZSwicGFyc2VKU0RvY0VsZW1lbnQiKTtvKHd6ZSwiYXBwZW5kRW1wdHlMaW5lIik7byh3Y2UsInBhcnNlSlNEb2NUZXh0Iik7byhUemUsInBhcnNlSlNEb2NJbmxpbmUiKTtvKFRjZSwicGFyc2VKU0RvY1RhZyIpO28oa2NlLCJwYXJzZUpTRG9jTGluZSIpO28oYUksIm5vcm1hbGl6ZU9wdGlvbnMiKTtvKHRJLCJub3JtYWxpemVPcHRpb24iKTtaaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0NvbW1lbnRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmVsZW1lbnRzPWUsdGhpcy5yYW5nZT1yfWdldFRhZyhlKXtyZXR1cm4gdGhpcy5nZXRBbGxUYWdzKCkuZmluZChyPT5yLm5hbWU9PT1lKX1nZXRUYWdzKGUpe3JldHVybiB0aGlzLmdldEFsbFRhZ3MoKS5maWx0ZXIocj0+ci5uYW1lPT09ZSl9Z2V0QWxsVGFncygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihlPT4ibmFtZSJpbiBlKX10b1N0cmluZygpe2xldCBlPSIiO2ZvcihsZXQgciBvZiB0aGlzLmVsZW1lbnRzKWlmKGUubGVuZ3RoPT09MCllPXIudG9TdHJpbmcoKTtlbHNle2xldCBuPXIudG9TdHJpbmcoKTtlKz14Y2UoZSkrbn1yZXR1cm4gZS50cmltKCl9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG4gb2YgdGhpcy5lbGVtZW50cylpZihyLmxlbmd0aD09PTApcj1uLnRvTWFya2Rvd24oZSk7ZWxzZXtsZXQgaT1uLnRvTWFya2Rvd24oZSk7cis9eGNlKHIpK2l9cmV0dXJuIHIudHJpbSgpfX0sbXg9Y2xhc3N7c3RhdGlje28odGhpcywiSlNEb2NUYWdJbXBsIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5uYW1lPWUsdGhpcy5jb250ZW50PXIsdGhpcy5pbmxpbmU9bix0aGlzLnJhbmdlPWl9dG9TdHJpbmcoKXtsZXQgZT1gQCR7dGhpcy5uYW1lfWAscj10aGlzLmNvbnRlbnQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPT09MT9lPWAke2V9ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoZT1gJHtlfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2V9fWA6ZX10b01hcmtkb3duKGUpe3ZhciByLG47cmV0dXJuKG49KHI9ZT8ucmVuZGVyVGFnKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbChlLHRoaXMpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0aGlzLnRvTWFya2Rvd25EZWZhdWx0KGUpfXRvTWFya2Rvd25EZWZhdWx0KGUpe2xldCByPXRoaXMuY29udGVudC50b01hcmtkb3duKGUpO2lmKHRoaXMuaW5saW5lKXtsZXQgYT1remUodGhpcy5uYW1lLHIsZT8/e30pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYX1sZXQgbj0iIjtlPy50YWc9PT0iaXRhbGljInx8ZT8udGFnPT09dm9pZCAwP249IioiOmU/LnRhZz09PSJib2xkIj9uPSIqKiI6ZT8udGFnPT09ImJvbGQtaXRhbGljIiYmKG49IioqKiIpO2xldCBpPWAke259QCR7dGhpcy5uYW1lfSR7bn1gO3JldHVybiB0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGg9PT0xP2k9YCR7aX0gXHUyMDE0ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoaT1gJHtpfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2l9fWA6aX19O28oa3plLCJyZW5kZXJJbmxpbmVUYWciKTtvKEV6ZSwicmVuZGVyTGlua0RlZmF1bHQiKTtneD1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY1RleHRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlubGluZXM9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHRoaXMuaW5saW5lcy5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZXNbcl0saT10aGlzLmlubGluZXNbcisxXTtlKz1uLnRvU3RyaW5nKCksaSYmaS5yYW5nZS5zdGFydC5saW5lPm4ucmFuZ2Uuc3RhcnQubGluZSYmKGUrPWAKYCl9cmV0dXJuIGV9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG49MDtuPHRoaXMuaW5saW5lcy5sZW5ndGg7bisrKXtsZXQgaT10aGlzLmlubGluZXNbbl0sYT10aGlzLmlubGluZXNbbisxXTtyKz1pLnRvTWFya2Rvd24oZSksYSYmYS5yYW5nZS5zdGFydC5saW5lPmkucmFuZ2Uuc3RhcnQubGluZSYmKHIrPWAKYCl9cmV0dXJuIHJ9fSxKaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0xpbmVJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRleHQ9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50ZXh0fXRvTWFya2Rvd24oKXtyZXR1cm4gdGhpcy50ZXh0fX07byh4Y2UsImZpbGxOZXdsaW5lcyIpfSk7dmFyIHl4LG9JPU0oKCk9PnsidXNlIHN0cmljdCI7b3MoKTtzSSgpO3l4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbmRleE1hbmFnZXI9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLmNvbW1lbnRQcm92aWRlcj1lLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyfWdldERvY3VtZW50YXRpb24oZSl7bGV0IHI9dGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudChlKTtpZihyJiZpSShyKSlyZXR1cm4gbkkocikudG9NYXJrZG93bih7cmVuZGVyTGluazpvKChpLGEpPT50aGlzLmRvY3VtZW50YXRpb25MaW5rUmVuZGVyZXIoZSxpLGEpLCJyZW5kZXJMaW5rIikscmVuZGVyVGFnOm8oaT0+dGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxpKSwicmVuZGVyVGFnIil9KX1kb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKGUscixuKXt2YXIgaTtsZXQgYT0oaT10aGlzLmZpbmROYW1lSW5QcmVjb21wdXRlZFNjb3BlcyhlLHIpKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpO2lmKGEmJmEubmFtZVNlZ21lbnQpe2xldCBzPWEubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSsxLGw9YS5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrMSx1PWEuZG9jdW1lbnRVcmkud2l0aCh7ZnJhZ21lbnQ6YEwke3N9LCR7bH1gfSk7cmV0dXJuYFske259XSgke3UudG9TdHJpbmcoKX0pYH1lbHNlIHJldHVybn1kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxyKXt9ZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKGUscil7bGV0IGk9VmkoZSkucHJlY29tcHV0ZWRTY29wZXM7aWYoIWkpcmV0dXJuO2xldCBhPWU7ZG97bGV0IGw9aS5nZXQoYSkuZmluZCh1PT51Lm5hbWU9PT1yKTtpZihsKXJldHVybiBsO2E9YS4kY29udGFpbmVyfXdoaWxlKGEpfWZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cygpLmZpbmQoaT0+aS5uYW1lPT09cil9fX0pO3ZhciB2eCxsST1NKCgpPT57InVzZSBzdHJpY3QiO2prKCk7emwoKTt2eD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29tbWVudFByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ncmFtbWFyQ29uZmlnPSgpPT5lLnBhcnNlci5HcmFtbWFyQ29uZmlnfWdldENvbW1lbnQoZSl7dmFyIHI7cmV0dXJuIFZNKGUpP2UuJGNvbW1lbnQ6KHI9ekQoZS4kY3N0Tm9kZSx0aGlzLmdyYW1tYXJDb25maWcoKS5tdWx0aWxpbmVDb21tZW50UnVsZXMpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIudGV4dH19fSk7dmFyIHVpPXt9O3ZhciBjST1NKCgpPT57InVzZSBzdHJpY3QiO1NyKHVpLEppKExNKCksMSkpfSk7dmFyIHh4LHVJLGhJLGZJPU0oKCk9PnsidXNlIHN0cmljdCI7bmwoKTtjSSgpO3h4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3luY1BhcnNlcj1lLnBhcnNlci5MYW5naXVtUGFyc2VyfXBhcnNlKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zeW5jUGFyc2VyLnBhcnNlKGUpKX19LHVJPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VGhyZWFkZWRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGhyZWFkQ291bnQ9OCx0aGlzLnRlcm1pbmF0aW9uRGVsYXk9MjAwLHRoaXMud29ya2VyUG9vbD1bXSx0aGlzLnF1ZXVlPVtdLHRoaXMuaHlkcmF0b3I9ZS5zZXJpYWxpemVyLkh5ZHJhdG9yfWluaXRpYWxpemVXb3JrZXJzKCl7Zm9yKDt0aGlzLndvcmtlclBvb2wubGVuZ3RoPHRoaXMudGhyZWFkQ291bnQ7KXtsZXQgZT10aGlzLmNyZWF0ZVdvcmtlcigpO2Uub25SZWFkeSgoKT0+e2lmKHRoaXMucXVldWUubGVuZ3RoPjApe2xldCByPXRoaXMucXVldWUuc2hpZnQoKTtyJiYoZS5sb2NrKCksci5yZXNvbHZlKGUpKX19KSx0aGlzLndvcmtlclBvb2wucHVzaChlKX19YXN5bmMgcGFyc2UoZSxyKXtsZXQgbj1hd2FpdCB0aGlzLmFjcXVpcmVQYXJzZXJXb3JrZXIociksaT1uZXcgZnMsYSxzPXIub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PnthPXNldFRpbWVvdXQoKCk9Pnt0aGlzLnRlcm1pbmF0ZVdvcmtlcihuKX0sdGhpcy50ZXJtaW5hdGlvbkRlbGF5KX0pO3JldHVybiBuLnBhcnNlKGUpLnRoZW4obD0+e2xldCB1PXRoaXMuaHlkcmF0b3IuaHlkcmF0ZShsKTtpLnJlc29sdmUodSl9KS5jYXRjaChsPT57aS5yZWplY3QobCl9KS5maW5hbGx5KCgpPT57cy5kaXNwb3NlKCksY2xlYXJUaW1lb3V0KGEpfSksaS5wcm9taXNlfXRlcm1pbmF0ZVdvcmtlcihlKXtlLnRlcm1pbmF0ZSgpO2xldCByPXRoaXMud29ya2VyUG9vbC5pbmRleE9mKGUpO3I+PTAmJnRoaXMud29ya2VyUG9vbC5zcGxpY2UociwxKX1hc3luYyBhY3F1aXJlUGFyc2VyV29ya2VyKGUpe3RoaXMuaW5pdGlhbGl6ZVdvcmtlcnMoKTtmb3IobGV0IG4gb2YgdGhpcy53b3JrZXJQb29sKWlmKG4ucmVhZHkpcmV0dXJuIG4ubG9jaygpLG47bGV0IHI9bmV3IGZzO3JldHVybiBlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCgpPT57bGV0IG49dGhpcy5xdWV1ZS5pbmRleE9mKHIpO24+PTAmJnRoaXMucXVldWUuc3BsaWNlKG4sMSksci5yZWplY3QoVmMpfSksdGhpcy5xdWV1ZS5wdXNoKHIpLHIucHJvbWlzZX19LGhJPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBhcnNlcldvcmtlciIpfWdldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZWFkeX1nZXQgb25SZWFkeSgpe3JldHVybiB0aGlzLm9uUmVhZHlFbWl0dGVyLmV2ZW50fWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMub25SZWFkeUVtaXR0ZXI9bmV3IHVpLkVtaXR0ZXIsdGhpcy5kZWZlcnJlZD1uZXcgZnMsdGhpcy5fcmVhZHk9ITAsdGhpcy5fcGFyc2luZz0hMSx0aGlzLnNlbmRNZXNzYWdlPWUsdGhpcy5fdGVybWluYXRlPWkscihhPT57bGV0IHM9YTt0aGlzLmRlZmVycmVkLnJlc29sdmUocyksdGhpcy51bmxvY2soKX0pLG4oYT0+e3RoaXMuZGVmZXJyZWQucmVqZWN0KGEpLHRoaXMudW5sb2NrKCl9KX10ZXJtaW5hdGUoKXt0aGlzLmRlZmVycmVkLnJlamVjdChWYyksdGhpcy5fdGVybWluYXRlKCl9bG9jaygpe3RoaXMuX3JlYWR5PSExfXVubG9jaygpe3RoaXMuX3BhcnNpbmc9ITEsdGhpcy5fcmVhZHk9ITAsdGhpcy5vblJlYWR5RW1pdHRlci5maXJlKCl9cGFyc2UoZSl7aWYodGhpcy5fcGFyc2luZyl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlciB3b3JrZXIgaXMgYnVzeSIpO3JldHVybiB0aGlzLl9wYXJzaW5nPSEwLHRoaXMuZGVmZXJyZWQ9bmV3IGZzLHRoaXMuc2VuZE1lc3NhZ2UoZSksdGhpcy5kZWZlcnJlZC5wcm9taXNlfX19KTt2YXIgYngsZEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtybCgpO25sKCk7Yng9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFdvcmtzcGFjZUxvY2siKX1jb25zdHJ1Y3Rvcigpe3RoaXMucHJldmlvdXNUb2tlblNvdXJjZT1uZXcgQXIuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UsdGhpcy53cml0ZVF1ZXVlPVtdLHRoaXMucmVhZFF1ZXVlPVtdLHRoaXMuZG9uZT0hMH13cml0ZShlKXt0aGlzLmNhbmNlbFdyaXRlKCk7bGV0IHI9bmV3IEFyLkNhbmNlbGxhdGlvblRva2VuU291cmNlO3JldHVybiB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2U9cix0aGlzLmVucXVldWUodGhpcy53cml0ZVF1ZXVlLGUsci50b2tlbil9cmVhZChlKXtyZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLGUpfWVucXVldWUoZSxyLG4pe2xldCBpPW5ldyBmcyxhPXthY3Rpb246cixkZWZlcnJlZDppLGNhbmNlbGxhdGlvblRva2VuOm4/P0FyLkNhbmNlbGxhdGlvblRva2VuLk5vbmV9O3JldHVybiBlLnB1c2goYSksdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpLGkucHJvbWlzZX1hc3luYyBwZXJmb3JtTmV4dE9wZXJhdGlvbigpe2lmKCF0aGlzLmRvbmUpcmV0dXJuO2xldCBlPVtdO2lmKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGg+MCllLnB1c2godGhpcy53cml0ZVF1ZXVlLnNoaWZ0KCkpO2Vsc2UgaWYodGhpcy5yZWFkUXVldWUubGVuZ3RoPjApZS5wdXNoKC4uLnRoaXMucmVhZFF1ZXVlLnNwbGljZSgwLHRoaXMucmVhZFF1ZXVlLmxlbmd0aCkpO2Vsc2UgcmV0dXJuO3RoaXMuZG9uZT0hMSxhd2FpdCBQcm9taXNlLmFsbChlLm1hcChhc3luYyh7YWN0aW9uOnIsZGVmZXJyZWQ6bixjYW5jZWxsYXRpb25Ub2tlbjppfSk9Pnt0cnl7bGV0IGE9YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cihpKSk7bi5yZXNvbHZlKGEpfWNhdGNoKGEpe21mKGEpP24ucmVzb2x2ZSh2b2lkIDApOm4ucmVqZWN0KGEpfX0pKSx0aGlzLmRvbmU9ITAsdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpfWNhbmNlbFdyaXRlKCl7dGhpcy5wcmV2aW91c1Rva2VuU291cmNlLmNhbmNlbCgpfX19KTt2YXIgd3gscEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGaygpO0JjKCk7Wm8oKTtvcygpO0ZnKCk7emwoKTt3eD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0SHlkcmF0b3IiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXA9bmV3IEUwLHRoaXMudG9rZW5UeXBlSWRNYXA9bmV3IEUwLHRoaXMuZ3JhbW1hcj1lLkdyYW1tYXIsdGhpcy5sZXhlcj1lLnBhcnNlci5MZXhlcix0aGlzLmxpbmtlcj1lLnJlZmVyZW5jZXMuTGlua2VyfWRlaHlkcmF0ZShlKXtyZXR1cm57bGV4ZXJFcnJvcnM6ZS5sZXhlckVycm9ycy5tYXAocj0+T2JqZWN0LmFzc2lnbih7fSxyKSkscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLm1hcChyPT5PYmplY3QuYXNzaWduKHt9LHIpKSx2YWx1ZTp0aGlzLmRlaHlkcmF0ZUFzdE5vZGUoZS52YWx1ZSx0aGlzLmNyZWF0ZURlaHlyYXRpb25Db250ZXh0KGUudmFsdWUpKX19Y3JlYXRlRGVoeXJhdGlvbkNvbnRleHQoZSl7bGV0IHI9bmV3IE1hcCxuPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHRsKGUpKXIuc2V0KGkse30pO2lmKGUuJGNzdE5vZGUpZm9yKGxldCBpIG9mIEpkKGUuJGNzdE5vZGUpKW4uc2V0KGkse30pO3JldHVybnthc3ROb2RlczpyLGNzdE5vZGVzOm59fWRlaHlkcmF0ZUFzdE5vZGUoZSxyKXtsZXQgbj1yLmFzdE5vZGVzLmdldChlKTtuLiR0eXBlPWUuJHR5cGUsbi4kY29udGFpbmVySW5kZXg9ZS4kY29udGFpbmVySW5kZXgsbi4kY29udGFpbmVyUHJvcGVydHk9ZS4kY29udGFpbmVyUHJvcGVydHksZS4kY3N0Tm9kZSE9PXZvaWQgMCYmKG4uJGNzdE5vZGU9dGhpcy5kZWh5ZHJhdGVDc3ROb2RlKGUuJGNzdE5vZGUscikpO2ZvcihsZXRbaSxhXW9mIE9iamVjdC5lbnRyaWVzKGUpKWlmKCFpLnN0YXJ0c1dpdGgoIiQiKSlpZihBcnJheS5pc0FycmF5KGEpKXtsZXQgcz1bXTtuW2ldPXM7Zm9yKGxldCBsIG9mIGEpcmkobCk/cy5wdXNoKHRoaXMuZGVoeWRyYXRlQXN0Tm9kZShsLHIpKTpUYShsKT9zLnB1c2godGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UobCxyKSk6cy5wdXNoKGwpfWVsc2UgcmkoYSk/bltpXT10aGlzLmRlaHlkcmF0ZUFzdE5vZGUoYSxyKTpUYShhKT9uW2ldPXRoaXMuZGVoeWRyYXRlUmVmZXJlbmNlKGEscik6YSE9PXZvaWQgMCYmKG5baV09YSk7cmV0dXJuIG59ZGVoeWRyYXRlUmVmZXJlbmNlKGUscil7bGV0IG49e307cmV0dXJuIG4uJHJlZlRleHQ9ZS4kcmVmVGV4dCxlLiRyZWZOb2RlJiYobi4kcmVmTm9kZT1yLmNzdE5vZGVzLmdldChlLiRyZWZOb2RlKSksbn1kZWh5ZHJhdGVDc3ROb2RlKGUscil7bGV0IG49ci5jc3ROb2Rlcy5nZXQoZSk7cmV0dXJuIHQyKGUpP24uZnVsbFRleHQ9ZS5mdWxsVGV4dDpuLmdyYW1tYXJTb3VyY2U9dGhpcy5nZXRHcmFtbWFyRWxlbWVudElkKGUuZ3JhbW1hclNvdXJjZSksbi5oaWRkZW49ZS5oaWRkZW4sbi5hc3ROb2RlPXIuYXN0Tm9kZXMuZ2V0KGUuYXN0Tm9kZSksaG8oZSk/bi5jb250ZW50PWUuY29udGVudC5tYXAoaT0+dGhpcy5kZWh5ZHJhdGVDc3ROb2RlKGkscikpOmNmKGUpJiYobi50b2tlblR5cGU9ZS50b2tlblR5cGUubmFtZSxuLm9mZnNldD1lLm9mZnNldCxuLmxlbmd0aD1lLmxlbmd0aCxuLnN0YXJ0TGluZT1lLnJhbmdlLnN0YXJ0LmxpbmUsbi5zdGFydENvbHVtbj1lLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcixuLmVuZExpbmU9ZS5yYW5nZS5lbmQubGluZSxuLmVuZENvbHVtbj1lLnJhbmdlLmVuZC5jaGFyYWN0ZXIpLG59aHlkcmF0ZShlKXtsZXQgcj1lLnZhbHVlLG49dGhpcy5jcmVhdGVIeWRyYXRpb25Db250ZXh0KHIpO3JldHVybiIkY3N0Tm9kZSJpbiByJiZ0aGlzLmh5ZHJhdGVDc3ROb2RlKHIuJGNzdE5vZGUsbikse2xleGVyRXJyb3JzOmUubGV4ZXJFcnJvcnMscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLHZhbHVlOnRoaXMuaHlkcmF0ZUFzdE5vZGUocixuKX19Y3JlYXRlSHlkcmF0aW9uQ29udGV4dChlKXtsZXQgcj1uZXcgTWFwLG49bmV3IE1hcDtmb3IobGV0IGEgb2YgdGwoZSkpci5zZXQoYSx7fSk7bGV0IGk7aWYoZS4kY3N0Tm9kZSlmb3IobGV0IGEgb2YgSmQoZS4kY3N0Tm9kZSkpe2xldCBzOyJmdWxsVGV4dCJpbiBhPyhzPW5ldyBOZyhhLmZ1bGxUZXh0KSxpPXMpOiJjb250ZW50ImluIGE/cz1uZXcgYjA6InRva2VuVHlwZSJpbiBhJiYocz10aGlzLmh5ZHJhdGVDc3RMZWFmTm9kZShhKSkscyYmKG4uc2V0KGEscykscy5yb290PWkpfXJldHVybnthc3ROb2RlczpyLGNzdE5vZGVzOm59fWh5ZHJhdGVBc3ROb2RlKGUscil7bGV0IG49ci5hc3ROb2Rlcy5nZXQoZSk7bi4kdHlwZT1lLiR0eXBlLG4uJGNvbnRhaW5lckluZGV4PWUuJGNvbnRhaW5lckluZGV4LG4uJGNvbnRhaW5lclByb3BlcnR5PWUuJGNvbnRhaW5lclByb3BlcnR5LGUuJGNzdE5vZGUmJihuLiRjc3ROb2RlPXIuY3N0Tm9kZXMuZ2V0KGUuJGNzdE5vZGUpKTtmb3IobGV0W2ksYV1vZiBPYmplY3QuZW50cmllcyhlKSlpZighaS5zdGFydHNXaXRoKCIkIikpaWYoQXJyYXkuaXNBcnJheShhKSl7bGV0IHM9W107bltpXT1zO2ZvcihsZXQgbCBvZiBhKXJpKGwpP3MucHVzaCh0aGlzLnNldFBhcmVudCh0aGlzLmh5ZHJhdGVBc3ROb2RlKGwsciksbikpOlRhKGwpP3MucHVzaCh0aGlzLmh5ZHJhdGVSZWZlcmVuY2UobCxuLGkscikpOnMucHVzaChsKX1lbHNlIHJpKGEpP25baV09dGhpcy5zZXRQYXJlbnQodGhpcy5oeWRyYXRlQXN0Tm9kZShhLHIpLG4pOlRhKGEpP25baV09dGhpcy5oeWRyYXRlUmVmZXJlbmNlKGEsbixpLHIpOmEhPT12b2lkIDAmJihuW2ldPWEpO3JldHVybiBufXNldFBhcmVudChlLHIpe3JldHVybiBlLiRjb250YWluZXI9cixlfWh5ZHJhdGVSZWZlcmVuY2UoZSxyLG4saSl7cmV0dXJuIHRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKHIsbixpLmNzdE5vZGVzLmdldChlLiRyZWZOb2RlKSxlLiRyZWZUZXh0KX1oeWRyYXRlQ3N0Tm9kZShlLHIsbj0wKXtsZXQgaT1yLmNzdE5vZGVzLmdldChlKTtpZih0eXBlb2YgZS5ncmFtbWFyU291cmNlPT0ibnVtYmVyIiYmKGkuZ3JhbW1hclNvdXJjZT10aGlzLmdldEdyYW1tYXJFbGVtZW50KGUuZ3JhbW1hclNvdXJjZSkpLGkuYXN0Tm9kZT1yLmFzdE5vZGVzLmdldChlLmFzdE5vZGUpLGhvKGkpKWZvcihsZXQgYSBvZiBlLmNvbnRlbnQpe2xldCBzPXRoaXMuaHlkcmF0ZUNzdE5vZGUoYSxyLG4rKyk7aS5jb250ZW50LnB1c2gocyl9cmV0dXJuIGl9aHlkcmF0ZUNzdExlYWZOb2RlKGUpe2xldCByPXRoaXMuZ2V0VG9rZW5UeXBlKGUudG9rZW5UeXBlKSxuPWUub2Zmc2V0LGk9ZS5sZW5ndGgsYT1lLnN0YXJ0TGluZSxzPWUuc3RhcnRDb2x1bW4sbD1lLmVuZExpbmUsdT1lLmVuZENvbHVtbixoPWUuaGlkZGVuO3JldHVybiBuZXcgeDAobixpLHtzdGFydDp7bGluZTphLGNoYXJhY3RlcjpzfSxlbmQ6e2xpbmU6bCxjaGFyYWN0ZXI6dX19LHIsaCl9Z2V0VG9rZW5UeXBlKGUpe3JldHVybiB0aGlzLmxleGVyLmRlZmluaXRpb25bZV19Z2V0R3JhbW1hckVsZW1lbnRJZChlKXtyZXR1cm4gdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemU9PT0wJiZ0aGlzLmNyZWF0ZUdyYW1tYXJFbGVtZW50SWRNYXAoKSx0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KGUpfWdldEdyYW1tYXJFbGVtZW50KGUpe3RoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zaXplPT09MCYmdGhpcy5jcmVhdGVHcmFtbWFyRWxlbWVudElkTWFwKCk7bGV0IHI9dGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLmdldEtleShlKTtpZihyKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncmFtbWFyIGVsZW1lbnQgaWQ6ICIrZSl9Y3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpe2xldCBlPTA7Zm9yKGxldCByIG9mIHRsKHRoaXMuZ3JhbW1hcikpYTIocikmJnRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQocixlKyspfX19KTtmdW5jdGlvbiBnbyh0KXtyZXR1cm57ZG9jdW1lbnRhdGlvbjp7Q29tbWVudFByb3ZpZGVyOm8oZT0+bmV3IHZ4KGUpLCJDb21tZW50UHJvdmlkZXIiKSxEb2N1bWVudGF0aW9uUHJvdmlkZXI6byhlPT5uZXcgeXgoZSksIkRvY3VtZW50YXRpb25Qcm92aWRlciIpfSxwYXJzZXI6e0FzeW5jUGFyc2VyOm8oZT0+bmV3IHh4KGUpLCJBc3luY1BhcnNlciIpLEdyYW1tYXJDb25maWc6byhlPT51UihlKSwiR3JhbW1hckNvbmZpZyIpLExhbmdpdW1QYXJzZXI6byhlPT5iTShlKSwiTGFuZ2l1bVBhcnNlciIpLENvbXBsZXRpb25QYXJzZXI6byhlPT52TShlKSwiQ29tcGxldGlvblBhcnNlciIpLFZhbHVlQ29udmVydGVyOm8oKCk9Pm5ldyBrMCwiVmFsdWVDb252ZXJ0ZXIiKSxUb2tlbkJ1aWxkZXI6bygoKT0+bmV3IFQwLCJUb2tlbkJ1aWxkZXIiKSxMZXhlcjpvKGU9Pm5ldyBweChlKSwiTGV4ZXIiKSxQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgUmcsIlBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIil9LHdvcmtzcGFjZTp7QXN0Tm9kZUxvY2F0b3I6bygoKT0+bmV3IGN4LCJBc3ROb2RlTG9jYXRvciIpLEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOm8oZT0+bmV3IG94KGUpLCJBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlciIpLFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXI6byhlPT5uZXcgbHgoZSksIlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIiKX0scmVmZXJlbmNlczp7TGlua2VyOm8oZT0+bmV3IGoyKGUpLCJMaW5rZXIiKSxOYW1lUHJvdmlkZXI6bygoKT0+bmV3IEsyLCJOYW1lUHJvdmlkZXIiKSxTY29wZVByb3ZpZGVyOm8oZT0+bmV3IHR4KGUpLCJTY29wZVByb3ZpZGVyIiksU2NvcGVDb21wdXRhdGlvbjpvKGU9Pm5ldyBaMihlKSwiU2NvcGVDb21wdXRhdGlvbiIpLFJlZmVyZW5jZXM6byhlPT5uZXcgUTIoZSksIlJlZmVyZW5jZXMiKX0sc2VyaWFsaXplcjp7SHlkcmF0b3I6byhlPT5uZXcgd3goZSksIkh5ZHJhdG9yIiksSnNvblNlcmlhbGl6ZXI6byhlPT5uZXcgcngoZSksIkpzb25TZXJpYWxpemVyIil9LHZhbGlkYXRpb246e0RvY3VtZW50VmFsaWRhdG9yOm8oZT0+bmV3IHN4KGUpLCJEb2N1bWVudFZhbGlkYXRvciIpLFZhbGlkYXRpb25SZWdpc3RyeTpvKGU9Pm5ldyBpeChlKSwiVmFsaWRhdGlvblJlZ2lzdHJ5Iil9LHNoYXJlZDpvKCgpPT50LnNoYXJlZCwic2hhcmVkIil9fWZ1bmN0aW9uIHlvKHQpe3JldHVybntTZXJ2aWNlUmVnaXN0cnk6bygoKT0+bmV3IG54LCJTZXJ2aWNlUmVnaXN0cnkiKSx3b3Jrc3BhY2U6e0xhbmdpdW1Eb2N1bWVudHM6byhlPT5uZXcgWDIoZSksIkxhbmdpdW1Eb2N1bWVudHMiKSxMYW5naXVtRG9jdW1lbnRGYWN0b3J5Om8oZT0+bmV3IHEyKGUpLCJMYW5naXVtRG9jdW1lbnRGYWN0b3J5IiksRG9jdW1lbnRCdWlsZGVyOm8oZT0+bmV3IGh4KGUpLCJEb2N1bWVudEJ1aWxkZXIiKSxJbmRleE1hbmFnZXI6byhlPT5uZXcgZngoZSksIkluZGV4TWFuYWdlciIpLFdvcmtzcGFjZU1hbmFnZXI6byhlPT5uZXcgZHgoZSksIldvcmtzcGFjZU1hbmFnZXIiKSxGaWxlU3lzdGVtUHJvdmlkZXI6byhlPT50LmZpbGVTeXN0ZW1Qcm92aWRlcihlKSwiRmlsZVN5c3RlbVByb3ZpZGVyIiksV29ya3NwYWNlTG9jazpvKCgpPT5uZXcgYngsIldvcmtzcGFjZUxvY2siKSxDb25maWd1cmF0aW9uUHJvdmlkZXI6byhlPT5uZXcgdXgoZSksIkNvbmZpZ3VyYXRpb25Qcm92aWRlciIpfX19dmFyIG1JPU0oKCk9PnsidXNlIHN0cmljdCI7aFIoKTt4TSgpO3dNKCk7VE0oKTtrTSgpO1BNKCk7Qk0oKTtGTSgpO3pNKCk7JE0oKTtqaygpO1VNKCk7SE0oKTtheCgpO1dNKCk7WU0oKTtxTSgpO2pNKCk7QmcoKTtLTSgpO1FNKCk7ZUkoKTtvSSgpO2xJKCk7WTIoKTtmSSgpO2RJKCk7cEkoKTtvKGdvLCJjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSIpO28oeW8sImNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlIil9KTtmdW5jdGlvbiBXaSh0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9W3QsZSxyLG4saSxhLHMsbCx1XS5yZWR1Y2UoZUUse30pO3JldHVybiBBY2UoaCl9ZnVuY3Rpb24gQ2NlKHQpe2lmKHQmJnRbeUldKWZvcihsZXQgZSBvZiBPYmplY3QudmFsdWVzKHQpKUNjZShlKTtyZXR1cm4gdH1mdW5jdGlvbiBBY2UodCxlKXtsZXQgcj1uZXcgUHJveHkoe30se2RlbGV0ZVByb3BlcnR5Om8oKCk9PiExLCJkZWxldGVQcm9wZXJ0eSIpLGdldDpvKChuLGkpPT5TY2UobixpLHQsZXx8ciksImdldCIpLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvKChuLGkpPT4oU2NlKG4saSx0LGV8fHIpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixpKSksImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpLGhhczpvKChuLGkpPT5pIGluIHQsImhhcyIpLG93bktleXM6bygoKT0+Wy4uLlJlZmxlY3Qub3duS2V5cyh0KSx5SV0sIm93bktleXMiKX0pO3JldHVybiByW3lJXT0hMCxyfWZ1bmN0aW9uIFNjZSh0LGUscixuKXtpZihlIGluIHQpe2lmKHRbZV1pbnN0YW5jZW9mIEVycm9yKXRocm93IG5ldyBFcnJvcigiQ29uc3RydWN0aW9uIGZhaWx1cmUuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3VyIGRlcGVuZGVuY2llcyBhcmUgY29uc3RydWN0YWJsZS4iLHtjYXVzZTp0W2VdfSk7aWYodFtlXT09PUVjZSl0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlIGRldGVjdGVkLiBQbGVhc2UgbWFrZSAiJytTdHJpbmcoZSkrJyIgbGF6eS4gU2VlIGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXNlcnZpY2VzLyNyZXNvbHZpbmctY3ljbGljLWRlcGVuZGVuY2llcycpO3JldHVybiB0W2VdfWVsc2UgaWYoZSBpbiByKXtsZXQgaT1yW2VdO3RbZV09RWNlO3RyeXt0W2VdPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2kobik6QWNlKGksbil9Y2F0Y2goYSl7dGhyb3cgdFtlXT1hIGluc3RhbmNlb2YgRXJyb3I/YTp2b2lkIDAsYX1yZXR1cm4gdFtlXX1lbHNlIHJldHVybn1mdW5jdGlvbiBlRSh0LGUpe2lmKGUpe2ZvcihsZXRbcixuXW9mIE9iamVjdC5lbnRyaWVzKGUpKWlmKG4hPT12b2lkIDApe2xldCBpPXRbcl07aSE9PW51bGwmJm4hPT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBuPT0ib2JqZWN0Ij90W3JdPWVFKGksbik6dFtyXT1ufX1yZXR1cm4gdH12YXIgZ0kseUksRWNlLHZJPU0oKCk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3QubWVyZ2U9KGUscik9PmVFKGVFKHt9LGUpLHIpfSkoZ0l8fChnST17fSkpO28oV2ksImluamVjdCIpO3lJPVN5bWJvbCgiaXNQcm94eSIpO28oQ2NlLCJlYWdlckxvYWQiKTtvKEFjZSwiX2luamVjdCIpO0VjZT1TeW1ib2woKTtvKFNjZSwiX3Jlc29sdmUiKTtvKGVFLCJfbWVyZ2UiKX0pO3ZhciBfY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBMY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtsSSgpO29JKCk7c0koKX0pO3ZhciBEY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBOY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtoUigpO0RjZSgpfSk7dmFyIFJjZT1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIE1jZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZJKCk7eE0oKTtGaygpO3dNKCk7WTIoKTtlSSgpO1JjZSgpO1RNKCk7a00oKX0pO3ZhciBJY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQTSgpO0JNKCk7Rk0oKTtHTSgpO3pNKCk7JE0oKX0pO3ZhciBPY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwSSgpO2prKCl9KTt2YXIgdEUsdm8seEk9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0RT1jbGFzc3tzdGF0aWN7byh0aGlzLCJFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlciIpfXJlYWRGaWxlKCl7dGhyb3cgbmV3IEVycm9yKCJObyBmaWxlIHN5c3RlbSBpcyBhdmFpbGFibGUuIil9YXN5bmMgcmVhZERpcmVjdG9yeSgpe3JldHVybltdfX0sdm89e2ZpbGVTeXN0ZW1Qcm92aWRlcjpvKCgpPT5uZXcgdEUsImZpbGVTeXN0ZW1Qcm92aWRlciIpfX0pO2Z1bmN0aW9uIEF6ZSgpe2xldCB0PVdpKHlvKHZvKSxDemUpLGU9V2koZ28oe3NoYXJlZDp0fSksU3plKTtyZXR1cm4gdC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoZSksZX1mdW5jdGlvbiBnZih0KXt2YXIgZTtsZXQgcj1BemUoKSxuPXIuc2VyaWFsaXplci5Kc29uU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0KTtyZXR1cm4gci5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKG4sSHMucGFyc2UoYG1lbW9yeTovLyR7KGU9bi5uYW1lKSE9PW51bGwmJmUhPT12b2lkIDA/ZToiZ3JhbW1hciJ9LmxhbmdpdW1gKSksbn12YXIgU3plLEN6ZSxQY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttSSgpO3ZJKCk7QmMoKTt4SSgpO1VjKCk7U3plPXtHcmFtbWFyOm8oKCk9Pnt9LCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpvKCgpPT4oe2Nhc2VJbnNlbnNpdGl2ZTohMSxmaWxlRXh0ZW5zaW9uczpbIi5sYW5naXVtIl0sbGFuZ3VhZ2VJZDoibGFuZ2l1bSJ9KSwiTGFuZ3VhZ2VNZXRhRGF0YSIpfSxDemU9e0FzdFJlZmxlY3Rpb246bygoKT0+bmV3IHRnLCJBc3RSZWZsZWN0aW9uIil9O28oQXplLCJjcmVhdGVNaW5pbWFsR3JhbW1hclNlcnZpY2VzIik7byhnZiwibG9hZEdyYW1tYXJGcm9tSnNvbiIpfSk7dmFyICRyPXt9O3ZyKCRyLHtBc3RVdGlsczooKT0+elQsQmlNYXA6KCk9PkUwLENhbmNlbGxhdGlvbjooKT0+QXIsQ29udGV4dENhY2hlOigpPT5TMCxDc3RVdGlsczooKT0+QVQsRE9ORV9SRVNVTFQ6KCk9PnNzLERlZmVycmVkOigpPT5mcyxEaXNwb3NhYmxlOigpPT5DMCxEaXNwb3NhYmxlQ2FjaGU6KCk9PkdnLERvY3VtZW50Q2FjaGU6KCk9PnFrLEVNUFRZX1NUUkVBTTooKT0+cjIsRXJyb3JXaXRoTG9jYXRpb246KCk9PnQwLEdyYW1tYXJVdGlsczooKT0+V1QsTXVsdGlNYXA6KCk9PkhjLE9wZXJhdGlvbkNhbmNlbGxlZDooKT0+VmMsUmVkdWN0aW9uOigpPT5KbSxSZWdFeHBVdGlsczooKT0+VVQsU2ltcGxlQ2FjaGU6KCk9PmV4LFN0cmVhbUltcGw6KCk9PmZvLFRyZWVTdHJlYW1JbXBsOigpPT5QYyxVUkk6KCk9PkhzLFVyaVV0aWxzOigpPT5kcyxXb3Jrc3BhY2VDYWNoZTooKT0+JGcsYXNzZXJ0VW5yZWFjaGFibGU6KCk9PnVmLGRlbGF5TmV4dFRpY2s6KCk9Pk1NLGludGVycnVwdEFuZENoZWNrOigpPT5IaSxpc09wZXJhdGlvbkNhbmNlbGxlZDooKT0+bWYsbG9hZEdyYW1tYXJGcm9tSnNvbjooKT0+Z2Ysc2V0SW50ZXJydXB0aW9uUGVyaW9kOigpPT5sY2Usc3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uOigpPT5vY2Usc3RyZWFtOigpPT50bn0pO3ZhciBCY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYaygpO2NJKCk7U3IoJHIsdWkpO0ZnKCk7WE0oKTtfVCgpO1BjZSgpO25sKCk7JHMoKTtVYygpO29zKCk7cmwoKTt6bCgpO1ZsKCk7aWcoKX0pO3ZhciBGY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtITSgpO2F4KCl9KTt2YXIgemNlPU0oKCk9PnsidXNlIHN0cmljdCI7V00oKTtZTSgpO3FNKCk7ak0oKTtCZygpO3hJKCk7S00oKTtkSSgpO1FNKCl9KTt2YXIga2E9e307dnIoa2Ese0Fic3RyYWN0QXN0UmVmbGVjdGlvbjooKT0+UWQsQWJzdHJhY3RDc3ROb2RlOigpPT5WMixBYnN0cmFjdExhbmdpdW1QYXJzZXI6KCk9PlUyLEFic3RyYWN0UGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXI6KCk9PkdrLEFic3RyYWN0VGhyZWFkZWRBc3luY1BhcnNlcjooKT0+dUksQXN0VXRpbHM6KCk9PnpULEJpTWFwOigpPT5FMCxDYW5jZWxsYXRpb246KCk9PkFyLENvbXBvc2l0ZUNzdE5vZGVJbXBsOigpPT5iMCxDb250ZXh0Q2FjaGU6KCk9PlMwLENzdE5vZGVCdWlsZGVyOigpPT4kMixDc3RVdGlsczooKT0+QVQsRE9ORV9SRVNVTFQ6KCk9PnNzLERhdGF0eXBlU3ltYm9sOigpPT56ayxEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI6KCk9Pm94LERlZmF1bHRBc3ROb2RlTG9jYXRvcjooKT0+Y3gsRGVmYXVsdEFzeW5jUGFyc2VyOigpPT54eCxEZWZhdWx0Q29tbWVudFByb3ZpZGVyOigpPT52eCxEZWZhdWx0Q29uZmlndXJhdGlvblByb3ZpZGVyOigpPT51eCxEZWZhdWx0RG9jdW1lbnRCdWlsZGVyOigpPT5oeCxEZWZhdWx0RG9jdW1lbnRWYWxpZGF0b3I6KCk9PnN4LERlZmF1bHRIeWRyYXRvcjooKT0+d3gsRGVmYXVsdEluZGV4TWFuYWdlcjooKT0+ZngsRGVmYXVsdEpzb25TZXJpYWxpemVyOigpPT5yeCxEZWZhdWx0TGFuZ2l1bURvY3VtZW50RmFjdG9yeTooKT0+cTIsRGVmYXVsdExhbmdpdW1Eb2N1bWVudHM6KCk9PlgyLERlZmF1bHRMZXhlcjooKT0+cHgsRGVmYXVsdExpbmtlcjooKT0+ajIsRGVmYXVsdE5hbWVQcm92aWRlcjooKT0+SzIsRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXI6KCk9Pmx4LERlZmF1bHRSZWZlcmVuY2VzOigpPT5RMixEZWZhdWx0U2NvcGVDb21wdXRhdGlvbjooKT0+WjIsRGVmYXVsdFNjb3BlUHJvdmlkZXI6KCk9PnR4LERlZmF1bHRTZXJ2aWNlUmVnaXN0cnk6KCk9Pm54LERlZmF1bHRUb2tlbkJ1aWxkZXI6KCk9PlQwLERlZmF1bHRWYWx1ZUNvbnZlcnRlcjooKT0+azAsRGVmYXVsdFdvcmtzcGFjZUxvY2s6KCk9PmJ4LERlZmF1bHRXb3Jrc3BhY2VNYW5hZ2VyOigpPT5keCxEZWZlcnJlZDooKT0+ZnMsRGlzcG9zYWJsZTooKT0+QzAsRGlzcG9zYWJsZUNhY2hlOigpPT5HZyxEb2N1bWVudENhY2hlOigpPT5xayxEb2N1bWVudFN0YXRlOigpPT5UbixEb2N1bWVudFZhbGlkYXRvcjooKT0+UXUsRU1QVFlfU0NPUEU6KCk9PmZ6ZSxFTVBUWV9TVFJFQU06KCk9PnIyLEVtcHR5RmlsZVN5c3RlbTooKT0+dm8sRW1wdHlGaWxlU3lzdGVtUHJvdmlkZXI6KCk9PnRFLEVycm9yV2l0aExvY2F0aW9uOigpPT50MCxHcmFtbWFyQVNUOigpPT5vMixHcmFtbWFyVXRpbHM6KCk9PldULEpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyOigpPT55eCxMYW5naXVtQ29tcGxldGlvblBhcnNlcjooKT0+VzIsTGFuZ2l1bVBhcnNlcjooKT0+SDIsTGFuZ2l1bVBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyOigpPT5SZyxMZWFmQ3N0Tm9kZUltcGw6KCk9PngwLE1hcFNjb3BlOigpPT5KMixNb2R1bGU6KCk9PmdJLE11bHRpTWFwOigpPT5IYyxPcGVyYXRpb25DYW5jZWxsZWQ6KCk9PlZjLFBhcnNlcldvcmtlcjooKT0+aEksUmVkdWN0aW9uOigpPT5KbSxSZWdFeHBVdGlsczooKT0+VVQsUm9vdENzdE5vZGVJbXBsOigpPT5OZyxTaW1wbGVDYWNoZTooKT0+ZXgsU3RyZWFtSW1wbDooKT0+Zm8sU3RyZWFtU2NvcGU6KCk9PnpnLFRleHREb2N1bWVudDooKT0+T2csVHJlZVN0cmVhbUltcGw6KCk9PlBjLFVSSTooKT0+SHMsVXJpVXRpbHM6KCk9PmRzLFZhbGlkYXRpb25DYXRlZ29yeTooKT0+VmcsVmFsaWRhdGlvblJlZ2lzdHJ5OigpPT5peCxWYWx1ZUNvbnZlcnRlcjooKT0+JGMsV29ya3NwYWNlQ2FjaGU6KCk9PiRnLGFzc2VydFVucmVhY2hhYmxlOigpPT51ZixjcmVhdGVDb21wbGV0aW9uUGFyc2VyOigpPT52TSxjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZTooKT0+Z28sY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGU6KCk9PnlvLGNyZWF0ZUdyYW1tYXJDb25maWc6KCk9PnVSLGNyZWF0ZUxhbmdpdW1QYXJzZXI6KCk9PmJNLGRlbGF5TmV4dFRpY2s6KCk9Pk1NLGRpYWdub3N0aWNEYXRhOigpPT5LayxlYWdlckxvYWQ6KCk9PkNjZSxnZXREaWFnbm9zdGljUmFuZ2U6KCk9PmdjZSxpbmplY3Q6KCk9PldpLGludGVycnVwdEFuZENoZWNrOigpPT5IaSxpc0FzdE5vZGU6KCk9PnJpLGlzQXN0Tm9kZURlc2NyaXB0aW9uOigpPT5PRCxpc0FzdE5vZGVXaXRoQ29tbWVudDooKT0+Vk0saXNDb21wb3NpdGVDc3ROb2RlOigpPT5obyxpc0lNdWx0aU1vZGVMZXhlckRlZmluaXRpb246KCk9PkpNLGlzSlNEb2M6KCk9PmlJLGlzTGVhZkNzdE5vZGU6KCk9PmNmLGlzTGlua2luZ0Vycm9yOigpPT5aZCxpc05hbWVkOigpPT5wY2UsaXNPcGVyYXRpb25DYW5jZWxsZWQ6KCk9Pm1mLGlzUmVmZXJlbmNlOigpPT5UYSxpc1Jvb3RDc3ROb2RlOigpPT50Mixpc1Rva2VuVHlwZUFycmF5OigpPT55Y2UsaXNUb2tlblR5cGVEaWN0aW9uYXJ5OigpPT5aTSxsb2FkR3JhbW1hckZyb21Kc29uOigpPT5nZixwYXJzZUpTRG9jOigpPT5uSSxwcmVwYXJlTGFuZ2l1bVBhcnNlcjooKT0+ZWNlLHNldEludGVycnVwdGlvblBlcmlvZDooKT0+bGNlLHN0YXJ0Q2FuY2VsYWJsZU9wZXJhdGlvbjooKT0+b2NlLHN0cmVhbTooKT0+dG4sdG9EaWFnbm9zdGljU2V2ZXJpdHk6KCk9PlFrfSk7dmFyIFdjPU0oKCk9PnsidXNlIHN0cmljdCI7bUkoKTt2SSgpO1VNKCk7X2NlKCk7Wm8oKTtMY2UoKTtOY2UoKTtNY2UoKTtJY2UoKTtPY2UoKTtCY2UoKTtTcihrYSwkcik7RmNlKCk7emNlKCk7QmMoKX0pO2Z1bmN0aW9uIHFjZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LFljZSl9ZnVuY3Rpb24gWGNlKHQpe3JldHVybiBIbC5pc0luc3RhbmNlKHQsYkkpfWZ1bmN0aW9uIGpjZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LHdJKX1mdW5jdGlvbiBLY2UodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCxOemUpfWZ1bmN0aW9uIFFjZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LFRJKX1mdW5jdGlvbiBKY2UodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCxaY2UpfWZ1bmN0aW9uIGV1ZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LGtJKX1mdW5jdGlvbiBydWUodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCx0dWUpfWZ1bmN0aW9uIGl1ZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LG51ZSl9ZnVuY3Rpb24gc3VlKHQpe3JldHVybiBIbC5pc0luc3RhbmNlKHQsYXVlKX1mdW5jdGlvbiBsdWUodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCxvdWUpfXZhciBfemUsUnQsV2NlLFljZSxiSSxMemUsRHplLHdJLE56ZSxUSSxaY2Usa0ksdHVlLG51ZSxhdWUsb3VlLFJ6ZSxjdWUsSGwsR2NlLE16ZSwkY2UsSXplLFZjZSxPemUsVWNlLFB6ZSxIY2UsQnplLEZ6ZSx6emUsR3plLCR6ZSxWemUsV2wsRUksU0ksQ0ksQUksX0ksVXplLEh6ZSxXemUsWXplLFVnLEEwLGlsLHF6ZSxhbD1NKCgpPT57InVzZSBzdHJpY3QiO1djKCk7V2MoKTtXYygpO1djKCk7X3plPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxSdD1vKCh0LGUpPT5femUodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSksIl9fbmFtZSIpLFdjZT0iU3RhdGVtZW50IixZY2U9IkFyY2hpdGVjdHVyZSI7byhxY2UsImlzQXJjaGl0ZWN0dXJlIik7UnQocWNlLCJpc0FyY2hpdGVjdHVyZSIpO2JJPSJCcmFuY2giO28oWGNlLCJpc0JyYW5jaCIpO1J0KFhjZSwiaXNCcmFuY2giKTtMemU9IkNoZWNrb3V0IixEemU9IkNoZXJyeVBpY2tpbmciLHdJPSJDb21taXQiO28oamNlLCJpc0NvbW1pdCIpO1J0KGpjZSwiaXNDb21taXQiKTtOemU9IkNvbW1vbiI7byhLY2UsImlzQ29tbW9uIik7UnQoS2NlLCJpc0NvbW1vbiIpO1RJPSJHaXRHcmFwaCI7byhRY2UsImlzR2l0R3JhcGgiKTtSdChRY2UsImlzR2l0R3JhcGgiKTtaY2U9IkluZm8iO28oSmNlLCJpc0luZm8iKTtSdChKY2UsImlzSW5mbyIpO2tJPSJNZXJnZSI7byhldWUsImlzTWVyZ2UiKTtSdChldWUsImlzTWVyZ2UiKTt0dWU9IlBhY2tldCI7byhydWUsImlzUGFja2V0Iik7UnQocnVlLCJpc1BhY2tldCIpO251ZT0iUGFja2V0QmxvY2siO28oaXVlLCJpc1BhY2tldEJsb2NrIik7UnQoaXVlLCJpc1BhY2tldEJsb2NrIik7YXVlPSJQaWUiO28oc3VlLCJpc1BpZSIpO1J0KHN1ZSwiaXNQaWUiKTtvdWU9IlBpZVNlY3Rpb24iO28obHVlLCJpc1BpZVNlY3Rpb24iKTtSdChsdWUsImlzUGllU2VjdGlvbiIpO1J6ZT0iRGlyZWN0aW9uIixjdWU9Y2xhc3MgZXh0ZW5kcyBRZHtzdGF0aWN7byh0aGlzLCJNZXJtYWlkQXN0UmVmbGVjdGlvbiIpfXN0YXRpY3tSdCh0aGlzLCJNZXJtYWlkQXN0UmVmbGVjdGlvbiIpfWdldEFsbFR5cGVzKCl7cmV0dXJuWyJBcmNoaXRlY3R1cmUiLCJCcmFuY2giLCJDaGVja291dCIsIkNoZXJyeVBpY2tpbmciLCJDb21taXQiLCJDb21tb24iLCJEaXJlY3Rpb24iLCJFZGdlIiwiR2l0R3JhcGgiLCJHcm91cCIsIkluZm8iLCJKdW5jdGlvbiIsIk1lcmdlIiwiUGFja2V0IiwiUGFja2V0QmxvY2siLCJQaWUiLCJQaWVTZWN0aW9uIiwiU2VydmljZSIsIlN0YXRlbWVudCJdfWNvbXB1dGVJc1N1YnR5cGUodCxlKXtzd2l0Y2godCl7Y2FzZSBiSTpjYXNlIEx6ZTpjYXNlIER6ZTpjYXNlIHdJOmNhc2Uga0k6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFdjZSxlKTtjYXNlIFJ6ZTpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoVEksZSk7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0UmVmZXJlbmNlVHlwZSh0KXtsZXQgZT1gJHt0LmNvbnRhaW5lci4kdHlwZX06JHt0LnByb3BlcnR5fWA7c3dpdGNoKGUpe2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke2V9IGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSBpZC5gKX19Z2V0VHlwZU1ldGFEYXRhKHQpe3N3aXRjaCh0KXtjYXNlIkFyY2hpdGVjdHVyZSI6cmV0dXJue25hbWU6IkFyY2hpdGVjdHVyZSIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImVkZ2VzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJncm91cHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imp1bmN0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToic2VydmljZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIkJyYW5jaCI6cmV0dXJue25hbWU6IkJyYW5jaCIscHJvcGVydGllczpbe25hbWU6Im5hbWUifSx7bmFtZToib3JkZXIifV19O2Nhc2UiQ2hlY2tvdXQiOnJldHVybntuYW1lOiJDaGVja291dCIscHJvcGVydGllczpbe25hbWU6ImJyYW5jaCJ9XX07Y2FzZSJDaGVycnlQaWNraW5nIjpyZXR1cm57bmFtZToiQ2hlcnJ5UGlja2luZyIscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6InBhcmVudCJ9LHtuYW1lOiJ0YWdzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJDb21taXQiOnJldHVybntuYW1lOiJDb21taXQiLHByb3BlcnRpZXM6W3tuYW1lOiJpZCJ9LHtuYW1lOiJtZXNzYWdlIn0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InR5cGUifV19O2Nhc2UiQ29tbW9uIjpyZXR1cm57bmFtZToiQ29tbW9uIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifV19O2Nhc2UiRWRnZSI6cmV0dXJue25hbWU6IkVkZ2UiLHByb3BlcnRpZXM6W3tuYW1lOiJsaHNEaXIifSx7bmFtZToibGhzR3JvdXAiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Imxoc0lkIn0se25hbWU6Imxoc0ludG8iLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InJoc0RpciJ9LHtuYW1lOiJyaHNHcm91cCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicmhzSWQifSx7bmFtZToicmhzSW50byIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToidGl0bGUifV19O2Nhc2UiR2l0R3JhcGgiOnJldHVybntuYW1lOiJHaXRHcmFwaCIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6InN0YXRlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIkdyb3VwIjpyZXR1cm57bmFtZToiR3JvdXAiLHByb3BlcnRpZXM6W3tuYW1lOiJpY29uIn0se25hbWU6ImlkIn0se25hbWU6ImluIn0se25hbWU6InRpdGxlIn1dfTtjYXNlIkluZm8iOnJldHVybntuYW1lOiJJbmZvIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifV19O2Nhc2UiSnVuY3Rpb24iOnJldHVybntuYW1lOiJKdW5jdGlvbiIscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6ImluIn1dfTtjYXNlIk1lcmdlIjpyZXR1cm57bmFtZToiTWVyZ2UiLHByb3BlcnRpZXM6W3tuYW1lOiJicmFuY2gifSx7bmFtZToiaWQifSx7bmFtZToidGFncyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZSJ9XX07Y2FzZSJQYWNrZXQiOnJldHVybntuYW1lOiJQYWNrZXQiLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJibG9ja3MiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIlBhY2tldEJsb2NrIjpyZXR1cm57bmFtZToiUGFja2V0QmxvY2siLHByb3BlcnRpZXM6W3tuYW1lOiJlbmQifSx7bmFtZToibGFiZWwifSx7bmFtZToic3RhcnQifV19O2Nhc2UiUGllIjpyZXR1cm57bmFtZToiUGllIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToic2VjdGlvbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InNob3dEYXRhIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJQaWVTZWN0aW9uIjpyZXR1cm57bmFtZToiUGllU2VjdGlvbiIscHJvcGVydGllczpbe25hbWU6ImxhYmVsIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIlNlcnZpY2UiOnJldHVybntuYW1lOiJTZXJ2aWNlIixwcm9wZXJ0aWVzOlt7bmFtZToiaWNvbiJ9LHtuYW1lOiJpY29uVGV4dCJ9LHtuYW1lOiJpZCJ9LHtuYW1lOiJpbiJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJEaXJlY3Rpb24iOnJldHVybntuYW1lOiJEaXJlY3Rpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJkaXIifSx7bmFtZToic3RhdGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2RlZmF1bHQ6cmV0dXJue25hbWU6dCxwcm9wZXJ0aWVzOltdfX19fSxIbD1uZXcgY3VlLE16ZT1SdCgoKT0+R2NlPz8oR2NlPWdmKCd7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJJbmZvIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiSW5mbyIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW5mbyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93SW5mbyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6Ij8ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVPTCIsImZyYWdtZW50Ijp0cnVlLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImludGVyZmFjZXMiOlt7IiR0eXBlIjoiSW50ZXJmYWNlIiwibmFtZSI6IkNvbW1vbiIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NEZXNjciIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NUaXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJ0aXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fV0sInN1cGVyVHlwZXMiOltdfV0sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX0nKSksIkluZm9HcmFtbWFyIiksSXplPVJ0KCgpPT4kY2U/PygkY2U9Z2YoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlBhY2tldCIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBhY2tldCIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGFja2V0LWJldGEifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYmxvY2tzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYmxvY2tzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiKyJ9XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiUGFja2V0QmxvY2siLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InN0YXJ0Iiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVuZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsYWJlbCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFwiW15cXCJdKlxcInwnW14nXSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiRU9MIiwiZnJhZ21lbnQiOnRydWUsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiUGFja2V0R3JhbW1hciIpLE96ZT1SdCgoKT0+VmNlPz8oVmNlPWdmKCd7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJQaWUiLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQaWUiLCJlbnRyeSI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBpZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InNob3dEYXRhIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2hvd0RhdGEifSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InNlY3Rpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VjdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIrIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQaWVTZWN0aW9uIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsYWJlbCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlBJRV9TRUNUSU9OX0xBQkVMIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0rXFwiLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiUElFX1NFQ1RJT05fVkFMVUUiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8oMHxbMS05XVswLTldKikoXFxcXC5bMC05XSspPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVPTCIsImZyYWdtZW50Ijp0cnVlLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImludGVyZmFjZXMiOlt7IiR0eXBlIjoiSW50ZXJmYWNlIiwibmFtZSI6IkNvbW1vbiIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NEZXNjciIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NUaXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJ0aXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fV0sInN1cGVyVHlwZXMiOltdfV0sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX0nKSksIlBpZUdyYW1tYXIiKSxQemU9UnQoKCk9PlVjZT8/KFVjZT1nZigneyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiQXJjaGl0ZWN0dXJlIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXJjaGl0ZWN0dXJlIiwiZW50cnkiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiYXJjaGl0ZWN0dXJlLWJldGEifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNiJ9LCJhcmd1bWVudHMiOltdfV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiU3RhdGVtZW50IiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imdyb3VwcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzZXJ2aWNlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJqdW5jdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZWRnZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTGVmdFBvcnQiLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0RpciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlJpZ2h0UG9ydCIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0RpciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXJyb3ciLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzSW50byIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0tIn0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItIn1dfV19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0ludG8iLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJHcm91cCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Imdyb3VwIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWNvbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImluIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlNlcnZpY2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzZXJ2aWNlIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWNvblRleHQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWNvbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImluIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaW4iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiSnVuY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJqdW5jdGlvbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImluIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaW4iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiRWRnZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzSWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzR3JvdXAiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNJZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNHcm91cCIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNCJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfRElSRUNUSU9OIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkwifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlIifX1dfSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiVCJ9fV19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJCIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUkNIX0lEIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHddKy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfVEVYVF9JQ09OIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcKFxcIlteXFwiXStcXCJcXFxcKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfSUNPTiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXChbXFxcXHctOl0rXFxcXCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUkNIX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcW1tcXFxcdyBdK1xcXFxdLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfR1JPVVAiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFx7Z3JvdXBcXFxcfS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSUk9XX0lOVE8iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzx8Pi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFT0wiLCJmcmFnbWVudCI6dHJ1ZSwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfScpKSwiQXJjaGl0ZWN0dXJlR3JhbW1hciIpLEJ6ZT1SdCgoKT0+SGNlPz8oSGNlPWdmKGB7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImludGVyZmFjZXMiOlt7IiR0eXBlIjoiSW50ZXJmYWNlIiwibmFtZSI6IkNvbW1vbiIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NEZXNjciIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NUaXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJ0aXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fV0sInN1cGVyVHlwZXMiOltdfV0sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFT0wiLCJmcmFnbWVudCI6dHJ1ZSwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJHaXRHcmFwaCIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGg6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDAifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic3RhdGVtZW50cyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTdGF0ZW1lbnQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJEaXJlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJkaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkxSIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlRCIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkJUIn1dfX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQ29tbWl0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY29tbWl0In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtc2c6IiwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibWVzc2FnZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InR5cGU6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidHlwZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTk9STUFMIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlJFVkVSU0UifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiSElHSExJR0hUIn1dfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkJyYW5jaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImJyYW5jaCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119XX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im9yZGVyOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im9yZGVyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTWVyZ2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtZXJnZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImJyYW5jaCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX1dfX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0YWc6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGFncyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0eXBlOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InR5cGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ik5PUk1BTCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJSRVZFUlNFIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkhJR0hMSUdIVCJ9XX19XX1dLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVja291dCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImNoZWNrb3V0In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InN3aXRjaCJ9XX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYnJhbmNoIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfV19fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVycnlQaWNraW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2hlcnJ5LXBpY2sifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBhcmVudDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJwYXJlbnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWzAtOV0rKD89XFxcXHMpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcdyhbLVxcXFwuL1xcXFx3XSpbLVxcXFx3XSk/LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiU1RSSU5HIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0qXFwifCdbXiddKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW1wb3J0cyI6W10sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX1gKSksIkdpdEdyYXBoR3JhbW1hciIpLEZ6ZT17bGFuZ3VhZ2VJZDoiaW5mbyIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITF9LHp6ZT17bGFuZ3VhZ2VJZDoicGFja2V0IixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMX0sR3plPXtsYW5ndWFnZUlkOiJwaWUiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExfSwkemU9e2xhbmd1YWdlSWQ6ImFyY2hpdGVjdHVyZSIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITF9LFZ6ZT17bGFuZ3VhZ2VJZDoiZ2l0R3JhcGgiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExfSxXbD17QXN0UmVmbGVjdGlvbjpSdCgoKT0+bmV3IGN1ZSwiQXN0UmVmbGVjdGlvbiIpfSxFST17R3JhbW1hcjpSdCgoKT0+TXplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOlJ0KCgpPT5GemUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LFNJPXtHcmFtbWFyOlJ0KCgpPT5JemUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6UnQoKCk9Pnp6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sQ0k9e0dyYW1tYXI6UnQoKCk9Pk96ZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpSdCgoKT0+R3plLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxBST17R3JhbW1hcjpSdCgoKT0+UHplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOlJ0KCgpPT4kemUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LF9JPXtHcmFtbWFyOlJ0KCgpPT5CemUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6UnQoKCk9PlZ6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sVXplPS9hY2NEZXNjcig/OltcdCBdKjooW15cblxyXSopfFxzKnsoW159XSopfSkvLEh6ZT0vYWNjVGl0bGVbXHQgXSo6KFteXG5ccl0qKS8sV3plPS90aXRsZShbXHQgXVteXG5ccl0qfCkvLFl6ZT17QUNDX0RFU0NSOlV6ZSxBQ0NfVElUTEU6SHplLFRJVExFOld6ZX0sVWc9Y2xhc3MgZXh0ZW5kcyBrMHtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3tSdCh0aGlzLCJBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlciIpfXJ1bkNvbnZlcnRlcih0LGUscil7bGV0IG49dGhpcy5ydW5Db21tb25Db252ZXJ0ZXIodCxlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLnJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscikpLG49PT12b2lkIDA/c3VwZXIucnVuQ29udmVydGVyKHQsZSxyKTpufXJ1bkNvbW1vbkNvbnZlcnRlcih0LGUscil7bGV0IG49WXplW3QubmFtZV07aWYobj09PXZvaWQgMClyZXR1cm47bGV0IGk9bi5leGVjKGUpO2lmKGkhPT1udWxsKXtpZihpWzFdIT09dm9pZCAwKXJldHVybiBpWzFdLnRyaW0oKS5yZXBsYWNlKC9bXHQgXXsyLH0vZ20sIiAiKTtpZihpWzJdIT09dm9pZCAwKXJldHVybiBpWzJdLnJlcGxhY2UoL15ccyovZ20sIiIpLnJlcGxhY2UoL1xzKyQvZ20sIiIpLnJlcGxhY2UoL1tcdCBdezIsfS9nbSwiICIpLnJlcGxhY2UoL1tcblxyXXsyLH0vZ20sYApgKX19fSxBMD1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIkNvbW1vblZhbHVlQ29udmVydGVyIil9c3RhdGlje1J0KHRoaXMsIkNvbW1vblZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXt9fSxpbD1jbGFzcyBleHRlbmRzIFQwe3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlciIpfXN0YXRpY3tSdCh0aGlzLCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMua2V5d29yZHM9bmV3IFNldCh0KX1idWlsZEtleXdvcmRUb2tlbnModCxlLHIpe2xldCBuPXN1cGVyLmJ1aWxkS2V5d29yZFRva2Vucyh0LGUscik7cmV0dXJuIG4uZm9yRWFjaChpPT57dGhpcy5rZXl3b3Jkcy5oYXMoaS5uYW1lKSYmaS5QQVRURVJOIT09dm9pZCAwJiYoaS5QQVRURVJOPW5ldyBSZWdFeHAoaS5QQVRURVJOLnRvU3RyaW5nKCkrIig/Oig/PSUlKXwoPyFcXFMpKSIpKX0pLG59fSxxemU9Y2xhc3MgZXh0ZW5kcyBpbHtzdGF0aWN7byh0aGlzLCJDb21tb25Ub2tlbkJ1aWxkZXIiKX1zdGF0aWN7UnQodGhpcywiQ29tbW9uVG9rZW5CdWlsZGVyIil9fX0pO2Z1bmN0aW9uIG5FKHQ9dm8pe2xldCBlPVdpKHlvKHQpLFdsKSxyPVdpKGdvKHtzaGFyZWQ6ZX0pLF9JLHJFKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEdpdEdyYXBoOnJ9fXZhciBYemUsckUsTEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7WHplPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiR2l0R3JhcGhUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7UnQodGhpcywiR2l0R3JhcGhUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsiZ2l0R3JhcGgiXSl9fSxyRT17cGFyc2VyOntUb2tlbkJ1aWxkZXI6UnQoKCk9Pm5ldyBYemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOlJ0KCgpPT5uZXcgQTAsIlZhbHVlQ29udmVydGVyIil9fTtvKG5FLCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzIik7UnQobkUsImNyZWF0ZUdpdEdyYXBoU2VydmljZXMiKX0pO2Z1bmN0aW9uIGFFKHQ9dm8pe2xldCBlPVdpKHlvKHQpLFdsKSxyPVdpKGdvKHtzaGFyZWQ6ZX0pLEVJLGlFKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEluZm86cn19dmFyIGp6ZSxpRSxEST1NKCgpPT57InVzZSBzdHJpY3QiO2FsKCk7V2MoKTtqemU9Y2xhc3MgZXh0ZW5kcyBpbHtzdGF0aWN7byh0aGlzLCJJbmZvVG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIkluZm9Ub2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsiaW5mbyIsInNob3dJbmZvIl0pfX0saUU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOlJ0KCgpPT5uZXcganplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpSdCgoKT0+bmV3IEEwLCJWYWx1ZUNvbnZlcnRlciIpfX07byhhRSwiY3JlYXRlSW5mb1NlcnZpY2VzIik7UnQoYUUsImNyZWF0ZUluZm9TZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gb0UodD12byl7bGV0IGU9V2koeW8odCksV2wpLHI9V2koZ28oe3NoYXJlZDplfSksU0ksc0UpO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsUGFja2V0OnJ9fXZhciBLemUsc0UsTkk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7S3plPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiUGFja2V0VG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIlBhY2tldFRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJwYWNrZXQtYmV0YSJdKX19LHNFPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjpSdCgoKT0+bmV3IEt6ZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6UnQoKCk9Pm5ldyBBMCwiVmFsdWVDb252ZXJ0ZXIiKX19O28ob0UsImNyZWF0ZVBhY2tldFNlcnZpY2VzIik7UnQob0UsImNyZWF0ZVBhY2tldFNlcnZpY2VzIil9KTtmdW5jdGlvbiBjRSh0PXZvKXtsZXQgZT1XaSh5byh0KSxXbCkscj1XaShnbyh7c2hhcmVkOmV9KSxDSSxsRSk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxQaWU6cn19dmFyIFF6ZSxaemUsbEUsUkk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7UXplPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiUGllVG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIlBpZVRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJwaWUiLCJzaG93RGF0YSJdKX19LFp6ZT1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIlBpZVZhbHVlQ29udmVydGVyIil9c3RhdGlje1J0KHRoaXMsIlBpZVZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXtpZih0Lm5hbWU9PT0iUElFX1NFQ1RJT05fTEFCRUwiKXJldHVybiBlLnJlcGxhY2UoLyIvZywiIikudHJpbSgpfX0sbEU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOlJ0KCgpPT5uZXcgUXplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpSdCgoKT0+bmV3IFp6ZSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oY0UsImNyZWF0ZVBpZVNlcnZpY2VzIik7UnQoY0UsImNyZWF0ZVBpZVNlcnZpY2VzIil9KTtmdW5jdGlvbiBoRSh0PXZvKXtsZXQgZT1XaSh5byh0KSxXbCkscj1XaShnbyh7c2hhcmVkOmV9KSxBSSx1RSk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxBcmNoaXRlY3R1cmU6cn19dmFyIEp6ZSxlR2UsdUUsTUk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7SnplPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiQXJjaGl0ZWN0dXJlVG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIkFyY2hpdGVjdHVyZVRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJhcmNoaXRlY3R1cmUiXSl9fSxlR2U9Y2xhc3MgZXh0ZW5kcyBVZ3tzdGF0aWN7byh0aGlzLCJBcmNoaXRlY3R1cmVWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3tSdCh0aGlzLCJBcmNoaXRlY3R1cmVWYWx1ZUNvbnZlcnRlciIpfXJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscil7aWYodC5uYW1lPT09IkFSQ0hfSUNPTiIpcmV0dXJuIGUucmVwbGFjZSgvWygpXS9nLCIiKS50cmltKCk7aWYodC5uYW1lPT09IkFSQ0hfVEVYVF9JQ09OIilyZXR1cm4gZS5yZXBsYWNlKC9bIigpXS9nLCIiKTtpZih0Lm5hbWU9PT0iQVJDSF9USVRMRSIpcmV0dXJuIGUucmVwbGFjZSgvW1tcXV0vZywiIikudHJpbSgpfX0sdUU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOlJ0KCgpPT5uZXcgSnplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpSdCgoKT0+bmV3IGVHZSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oaEUsImNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzIik7UnQoaEUsImNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzIil9KTt2YXIgdXVlPXt9O3ZyKHV1ZSx7SW5mb01vZHVsZTooKT0+aUUsY3JlYXRlSW5mb1NlcnZpY2VzOigpPT5hRX0pO3ZhciBodWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtESSgpO2FsKCl9KTt2YXIgZnVlPXt9O3ZyKGZ1ZSx7UGFja2V0TW9kdWxlOigpPT5zRSxjcmVhdGVQYWNrZXRTZXJ2aWNlczooKT0+b0V9KTt2YXIgZHVlPU0oKCk9PnsidXNlIHN0cmljdCI7TkkoKTthbCgpfSk7dmFyIHB1ZT17fTt2cihwdWUse1BpZU1vZHVsZTooKT0+bEUsY3JlYXRlUGllU2VydmljZXM6KCk9PmNFfSk7dmFyIG11ZT1NKCgpPT57InVzZSBzdHJpY3QiO1JJKCk7YWwoKX0pO3ZhciBndWU9e307dnIoZ3VlLHtBcmNoaXRlY3R1cmVNb2R1bGU6KCk9PnVFLGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzOigpPT5oRX0pO3ZhciB5dWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNSSgpO2FsKCl9KTt2YXIgdnVlPXt9O3ZyKHZ1ZSx7R2l0R3JhcGhNb2R1bGU6KCk9PnJFLGNyZWF0ZUdpdEdyYXBoU2VydmljZXM6KCk9Pm5FfSk7dmFyIHh1ZT1NKCgpPT57InVzZSBzdHJpY3QiO0xJKCk7YWwoKX0pO2FzeW5jIGZ1bmN0aW9uIFlsKHQsZSl7bGV0IHI9dEdlW3RdO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBkaWFncmFtIHR5cGU6ICR7dH1gKTtfMFt0XXx8YXdhaXQgcigpO2xldCBpPV8wW3RdLnBhcnNlKGUpO2lmKGkubGV4ZXJFcnJvcnMubGVuZ3RoPjB8fGkucGFyc2VyRXJyb3JzLmxlbmd0aD4wKXRocm93IG5ldyByR2UoaSk7cmV0dXJuIGkudmFsdWV9dmFyIF8wLHRHZSxyR2UsSGc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMSSgpO0RJKCk7TkkoKTtSSSgpO01JKCk7YWwoKTtfMD17fSx0R2U9e2luZm86UnQoYXN5bmMoKT0+e2xldHtjcmVhdGVJbmZvU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGh1ZSgpLHV1ZSkpLGU9dCgpLkluZm8ucGFyc2VyLkxhbmdpdW1QYXJzZXI7XzAuaW5mbz1lfSwiaW5mbyIpLHBhY2tldDpSdChhc3luYygpPT57bGV0e2NyZWF0ZVBhY2tldFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkdWUoKSxmdWUpKSxlPXQoKS5QYWNrZXQucGFyc2VyLkxhbmdpdW1QYXJzZXI7XzAucGFja2V0PWV9LCJwYWNrZXQiKSxwaWU6UnQoYXN5bmMoKT0+e2xldHtjcmVhdGVQaWVTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obXVlKCkscHVlKSksZT10KCkuUGllLnBhcnNlci5MYW5naXVtUGFyc2VyO18wLnBpZT1lfSwicGllIiksYXJjaGl0ZWN0dXJlOlJ0KGFzeW5jKCk9PntsZXR7Y3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHl1ZSgpLGd1ZSkpLGU9dCgpLkFyY2hpdGVjdHVyZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtfMC5hcmNoaXRlY3R1cmU9ZX0sImFyY2hpdGVjdHVyZSIpLGdpdEdyYXBoOlJ0KGFzeW5jKCk9PntsZXR7Y3JlYXRlR2l0R3JhcGhTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeHVlKCksdnVlKSksZT10KCkuR2l0R3JhcGgucGFyc2VyLkxhbmdpdW1QYXJzZXI7XzAuZ2l0R3JhcGg9ZX0sImdpdEdyYXBoIil9O28oWWwsInBhcnNlIik7UnQoWWwsInBhcnNlIik7ckdlPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiTWVybWFpZFBhcnNlRXJyb3IiKX1jb25zdHJ1Y3Rvcih0KXtsZXQgZT10LmxleGVyRXJyb3JzLm1hcChuPT5uLm1lc3NhZ2UpLmpvaW4oYApgKSxyPXQucGFyc2VyRXJyb3JzLm1hcChuPT5uLm1lc3NhZ2UpLmpvaW4oYApgKTtzdXBlcihgUGFyc2luZyBmYWlsZWQ6ICR7ZX0gJHtyfWApLHRoaXMucmVzdWx0PXR9c3RhdGlje1J0KHRoaXMsIk1lcm1haWRQYXJzZUVycm9yIil9fX0pO2Z1bmN0aW9uIHlmKHQsZSl7dC5hY2NEZXNjciYmZS5zZXRBY2NEZXNjcmlwdGlvbj8uKHQuYWNjRGVzY3IpLHQuYWNjVGl0bGUmJmUuc2V0QWNjVGl0bGU/Lih0LmFjY1RpdGxlKSx0LnRpdGxlJiZlLnNldERpYWdyYW1UaXRsZT8uKHQudGl0bGUpfXZhciBUeD1NKCgpPT57InVzZSBzdHJpY3QiO28oeWYsInBvcHVsYXRlQ29tbW9uRGIiKX0pO3ZhciBqcixmRT1NKCgpPT57InVzZSBzdHJpY3QiO2pyPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fX0pO3ZhciB2ZixkRT1NKCgpPT57InVzZSBzdHJpY3QiO3ZmPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5pdD1lO3RoaXMucmVjb3Jkcz10aGlzLmluaXQoKX1zdGF0aWN7byh0aGlzLCJJbXBlcmF0aXZlU3RhdGUiKX1yZXNldCgpe3RoaXMucmVjb3Jkcz10aGlzLmluaXQoKX19fSk7ZnVuY3Rpb24gSUkoKXtyZXR1cm4gbjkoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gaUdlKHQsZSl7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdC5yZWR1Y2UoKG4saSk9PntsZXQgYT1lKGkpO3JldHVybiByW2FdfHwoclthXT0hMCxuLnB1c2goaSkpLG59LFtdKX1mdW5jdGlvbiBidWUodCxlLHIpe2xldCBuPXQuaW5kZXhPZihlKTtuPT09LTE/dC5wdXNoKHIpOnQuc3BsaWNlKG4sMSxyKX1mdW5jdGlvbiBUdWUodCl7bGV0IGU9dC5yZWR1Y2UoKGksYSk9Pmkuc2VxPmEuc2VxP2k6YSx0WzBdKSxyPSIiO3QuZm9yRWFjaChmdW5jdGlvbihpKXtpPT09ZT9yKz0iCSoiOnIrPSIJfCJ9KTtsZXQgbj1bcixlLmlkLGUuc2VxXTtmb3IobGV0IGkgaW4gVHQucmVjb3Jkcy5icmFuY2hlcylUdC5yZWNvcmRzLmJyYW5jaGVzLmdldChpKT09PWUuaWQmJm4ucHVzaChpKTtpZihZLmRlYnVnKG4uam9pbigiICIpKSxlLnBhcmVudHMmJmUucGFyZW50cy5sZW5ndGg9PTImJmUucGFyZW50c1swXSYmZS5wYXJlbnRzWzFdKXtsZXQgaT1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1swXSk7YnVlKHQsZSxpKSxlLnBhcmVudHNbMV0mJnQucHVzaChUdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1sxXSkpfWVsc2V7aWYoZS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47aWYoZS5wYXJlbnRzWzBdKXtsZXQgaT1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1swXSk7YnVlKHQsZSxpKX19dD1pR2UodCxpPT5pLmlkKSxUdWUodCl9dmFyIG5HZSxMMCxUdCxhR2Usc0dlLG9HZSxsR2UsY0dlLHVHZSxoR2Usd3VlLGZHZSxkR2UscEdlLG1HZSxnR2Usa3VlLHlHZSx2R2UseEdlLHBFLE9JPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtocigpO1phKCk7ZnIoKTtBaSgpO2ZFKCk7ZEUoKTticygpO25HZT11ci5naXRHcmFwaCxMMD1vKCgpPT5Ecyh7Li4ubkdlLC4uLkNyKCkuZ2l0R3JhcGh9KSwiZ2V0Q29uZmlnIiksVHQ9bmV3IHZmKCgpPT57bGV0IHQ9TDAoKSxlPXQubWFpbkJyYW5jaE5hbWUscj10Lm1haW5CcmFuY2hPcmRlcjtyZXR1cm57bWFpbkJyYW5jaE5hbWU6ZSxjb21taXRzOm5ldyBNYXAsaGVhZDpudWxsLGJyYW5jaENvbmZpZzpuZXcgTWFwKFtbZSx7bmFtZTplLG9yZGVyOnJ9XV0pLGJyYW5jaGVzOm5ldyBNYXAoW1tlLG51bGxdXSksY3VyckJyYW5jaDplLGRpcmVjdGlvbjoiTFIiLHNlcTowLG9wdGlvbnM6e319fSk7byhJSSwiZ2V0SUQiKTtvKGlHZSwidW5pcUJ5Iik7YUdlPW8oZnVuY3Rpb24odCl7VHQucmVjb3Jkcy5kaXJlY3Rpb249dH0sInNldERpcmVjdGlvbiIpLHNHZT1vKGZ1bmN0aW9uKHQpe1kuZGVidWcoIm9wdGlvbnMgc3RyIix0KSx0PXQ/LnRyaW0oKSx0PXR8fCJ7fSI7dHJ5e1R0LnJlY29yZHMub3B0aW9ucz1KU09OLnBhcnNlKHQpfWNhdGNoKGUpe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsZS5tZXNzYWdlKX19LCJzZXRPcHRpb25zIiksb0dlPW8oZnVuY3Rpb24oKXtyZXR1cm4gVHQucmVjb3Jkcy5vcHRpb25zfSwiZ2V0T3B0aW9ucyIpLGxHZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubXNnLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncztZLmluZm8oImNvbW1pdCIsZSxyLG4saSksWS5kZWJ1ZygiRW50ZXJpbmcgY29tbWl0OiIsZSxyLG4saSk7bGV0IGE9TDAoKTtyPXFlLnNhbml0aXplVGV4dChyLGEpLGU9cWUuc2FuaXRpemVUZXh0KGUsYSksaT1pPy5tYXAobD0+cWUuc2FuaXRpemVUZXh0KGwsYSkpO2xldCBzPXtpZDpyfHxUdC5yZWNvcmRzLnNlcSsiLSIrSUkoKSxtZXNzYWdlOmUsc2VxOlR0LnJlY29yZHMuc2VxKyssdHlwZTpuPz9qci5OT1JNQUwsdGFnczppPz9bXSxwYXJlbnRzOlR0LnJlY29yZHMuaGVhZD09bnVsbD9bXTpbVHQucmVjb3Jkcy5oZWFkLmlkXSxicmFuY2g6VHQucmVjb3Jkcy5jdXJyQnJhbmNofTtUdC5yZWNvcmRzLmhlYWQ9cyxZLmluZm8oIm1haW4gYnJhbmNoIixhLm1haW5CcmFuY2hOYW1lKSxUdC5yZWNvcmRzLmNvbW1pdHMuc2V0KHMuaWQscyksVHQucmVjb3Jkcy5icmFuY2hlcy5zZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoLHMuaWQpLFkuZGVidWcoImluIHB1c2hDb21taXQgIitzLmlkKX0sImNvbW1pdCIpLGNHZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubmFtZSxyPXQub3JkZXI7aWYoZT1xZS5zYW5pdGl6ZVRleHQoZSxMMCgpKSxUdC5yZWNvcmRzLmJyYW5jaGVzLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBjcmVhdGUgYW4gZXhpc3RpbmcgYnJhbmNoLiAoSGVscDogRWl0aGVyIHVzZSBhIG5ldyBuYW1lIGlmIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdHJ5IHVzaW5nICJjaGVja291dCAke2V9IilgKTtUdC5yZWNvcmRzLmJyYW5jaGVzLnNldChlLFR0LnJlY29yZHMuaGVhZCE9bnVsbD9UdC5yZWNvcmRzLmhlYWQuaWQ6bnVsbCksVHQucmVjb3Jkcy5icmFuY2hDb25maWcuc2V0KGUse25hbWU6ZSxvcmRlcjpyfSksd3VlKGUpLFkuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSwiYnJhbmNoIiksdUdlPW8odD0+e2xldCBlPXQuYnJhbmNoLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncyxhPUwwKCk7ZT1xZS5zYW5pdGl6ZVRleHQoZSxhKSxyJiYocj1xZS5zYW5pdGl6ZVRleHQocixhKSk7bGV0IHM9VHQucmVjb3Jkcy5icmFuY2hlcy5nZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoKSxsPVR0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGUpLHU9cz9UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHMpOnZvaWQgMCxoPWw/VHQucmVjb3Jkcy5jb21taXRzLmdldChsKTp2b2lkIDA7aWYodSYmaCYmdS5icmFuY2g9PT1lKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1lcmdlIGJyYW5jaCAnJHtlfScgaW50byBpdHNlbGYuYCk7aWYoVHQucmVjb3Jkcy5jdXJyQnJhbmNoPT09ZSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOlsiYnJhbmNoIGFiYyJdfSxwfWlmKHU9PT12b2lkIDB8fCF1KXtsZXQgcD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDdXJyZW50IGJyYW5jaCAoJHtUdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJjb21taXQiXX0scH1pZighVHQucmVjb3Jkcy5icmFuY2hlcy5oYXMoZSkpe2xldCBwPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcrZSsiKSBkb2VzIG5vdCBleGlzdCIpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOltgYnJhbmNoICR7ZX1gXX0scH1pZihoPT09dm9pZCAwfHwhaCl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytlKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyciY29tbWl0IiddfSxwfWlmKHU9PT1oKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHB9aWYociYmVHQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytyKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLHRva2VuOmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLGV4cGVjdGVkOltgbWVyZ2UgJHtlfSAke3J9X1VOSVFVRSAke259ICR7aT8uam9pbigiICIpfWBdfSxwfWxldCBmPWx8fCIiLGQ9e2lkOnJ8fGAke1R0LnJlY29yZHMuc2VxfS0ke0lJKCl9YCxtZXNzYWdlOmBtZXJnZWQgYnJhbmNoICR7ZX0gaW50byAke1R0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpUdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6VHQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltUdC5yZWNvcmRzLmhlYWQuaWQsZl0sYnJhbmNoOlR0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOmpyLk1FUkdFLGN1c3RvbVR5cGU6bixjdXN0b21JZDohIXIsdGFnczppPz9bXX07VHQucmVjb3Jkcy5oZWFkPWQsVHQucmVjb3Jkcy5jb21taXRzLnNldChkLmlkLGQpLFR0LnJlY29yZHMuYnJhbmNoZXMuc2V0KFR0LnJlY29yZHMuY3VyckJyYW5jaCxkLmlkKSxZLmRlYnVnKFR0LnJlY29yZHMuYnJhbmNoZXMpLFkuZGVidWcoImluIG1lcmdlQnJhbmNoIil9LCJtZXJnZSIpLGhHZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuaWQscj10LnRhcmdldElkLG49dC50YWdzLGk9dC5wYXJlbnQ7WS5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGUscixuKTtsZXQgYT1MMCgpO2lmKGU9cWUuc2FuaXRpemVUZXh0KGUsYSkscj1xZS5zYW5pdGl6ZVRleHQocixhKSxuPW4/Lm1hcCh1PT5xZS5zYW5pdGl6ZVRleHQodSxhKSksaT1xZS5zYW5pdGl6ZVRleHQoaSxhKSwhZXx8IVR0LnJlY29yZHMuY29tbWl0cy5oYXMoZSkpe2xldCB1PW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgdS5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSx1fWxldCBzPVR0LnJlY29yZHMuY29tbWl0cy5nZXQoZSk7aWYocz09PXZvaWQgMHx8IXMpdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtpZihpJiYhKEFycmF5LmlzQXJyYXkocy5wYXJlbnRzKSYmcy5wYXJlbnRzLmluY2x1ZGVzKGkpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2xldCBsPXMuYnJhbmNoO2lmKHMudHlwZT09PWpyLk1FUkdFJiYhaSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFyfHwhVHQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7aWYobD09PVR0LnJlY29yZHMuY3VyckJyYW5jaCl7bGV0IGQ9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBkLmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGR9bGV0IHU9VHQucmVjb3Jkcy5icmFuY2hlcy5nZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoKTtpZih1PT09dm9pZCAwfHwhdSl7bGV0IGQ9bmV3IEVycm9yKGBJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeS1waWNrIi4gQ3VycmVudCBicmFuY2ggKCR7VHQucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2ApO3Rocm93IGQuaGFzaD17dGV4dDpgY2hlcnJ5UGljayAke2V9ICR7cn1gLHRva2VuOmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sZH1sZXQgaD1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHUpO2lmKGg9PT12b2lkIDB8fCFoKXtsZXQgZD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJHtUdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgZC5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxkfWxldCBmPXtpZDpUdC5yZWNvcmRzLnNlcSsiLSIrSUkoKSxtZXNzYWdlOmBjaGVycnktcGlja2VkICR7cz8ubWVzc2FnZX0gaW50byAke1R0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpUdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6VHQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltUdC5yZWNvcmRzLmhlYWQuaWQscy5pZF0sYnJhbmNoOlR0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOmpyLkNIRVJSWV9QSUNLLHRhZ3M6bj9uLmZpbHRlcihCb29sZWFuKTpbYGNoZXJyeS1waWNrOiR7cy5pZH0ke3MudHlwZT09PWpyLk1FUkdFP2B8cGFyZW50OiR7aX1gOiIifWBdfTtUdC5yZWNvcmRzLmhlYWQ9ZixUdC5yZWNvcmRzLmNvbW1pdHMuc2V0KGYuaWQsZiksVHQucmVjb3Jkcy5icmFuY2hlcy5zZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoLGYuaWQpLFkuZGVidWcoVHQucmVjb3Jkcy5icmFuY2hlcyksWS5kZWJ1ZygiaW4gY2hlcnJ5UGljayIpfX0sImNoZXJyeVBpY2siKSx3dWU9byhmdW5jdGlvbih0KXtpZih0PXFlLnNhbml0aXplVGV4dCh0LEwwKCkpLFR0LnJlY29yZHMuYnJhbmNoZXMuaGFzKHQpKXtUdC5yZWNvcmRzLmN1cnJCcmFuY2g9dDtsZXQgZT1UdC5yZWNvcmRzLmJyYW5jaGVzLmdldChUdC5yZWNvcmRzLmN1cnJCcmFuY2gpO2U9PT12b2lkIDB8fCFlP1R0LnJlY29yZHMuaGVhZD1udWxsOlR0LnJlY29yZHMuaGVhZD1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUpPz9udWxsfWVsc2V7bGV0IGU9bmV3IEVycm9yKGBUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJHt0fSIpYCk7dGhyb3cgZS5oYXNoPXt0ZXh0OmBjaGVja291dCAke3R9YCx0b2tlbjpgY2hlY2tvdXQgJHt0fWAsZXhwZWN0ZWQ6W2BicmFuY2ggJHt0fWBdfSxlfX0sImNoZWNrb3V0Iik7byhidWUsInVwc2VydCIpO28oVHVlLCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnkiKTtmR2U9byhmdW5jdGlvbigpe1kuZGVidWcoVHQucmVjb3Jkcy5jb21taXRzKTtsZXQgdD1rdWUoKVswXTtUdWUoW3RdKX0sInByZXR0eVByaW50IiksZEdlPW8oZnVuY3Rpb24oKXtUdC5yZXNldCgpLExyKCl9LCJjbGVhciIpLHBHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuWy4uLlR0LnJlY29yZHMuYnJhbmNoQ29uZmlnLnZhbHVlcygpXS5tYXAoKGUscik9PmUub3JkZXIhPT1udWxsJiZlLm9yZGVyIT09dm9pZCAwP2U6ey4uLmUsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3J9YCl9KS5zb3J0KChlLHIpPT4oZS5vcmRlcj8/MCktKHIub3JkZXI/PzApKS5tYXAoKHtuYW1lOmV9KT0+KHtuYW1lOmV9KSl9LCJnZXRCcmFuY2hlc0FzT2JqQXJyYXkiKSxtR2U9byhmdW5jdGlvbigpe3JldHVybiBUdC5yZWNvcmRzLmJyYW5jaGVzfSwiZ2V0QnJhbmNoZXMiKSxnR2U9byhmdW5jdGlvbigpe3JldHVybiBUdC5yZWNvcmRzLmNvbW1pdHN9LCJnZXRDb21taXRzIiksa3VlPW8oZnVuY3Rpb24oKXtsZXQgdD1bLi4uVHQucmVjb3Jkcy5jb21taXRzLnZhbHVlcygpXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe1kuZGVidWcoZS5pZCl9KSx0LnNvcnQoKGUscik9PmUuc2VxLXIuc2VxKSx0fSwiZ2V0Q29tbWl0c0FycmF5IikseUdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gVHQucmVjb3Jkcy5jdXJyQnJhbmNofSwiZ2V0Q3VycmVudEJyYW5jaCIpLHZHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFR0LnJlY29yZHMuZGlyZWN0aW9ufSwiZ2V0RGlyZWN0aW9uIikseEdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gVHQucmVjb3Jkcy5oZWFkfSwiZ2V0SGVhZCIpLHBFPXtjb21taXRUeXBlOmpyLGdldENvbmZpZzpMMCxzZXREaXJlY3Rpb246YUdlLHNldE9wdGlvbnM6c0dlLGdldE9wdGlvbnM6b0dlLGNvbW1pdDpsR2UsYnJhbmNoOmNHZSxtZXJnZTp1R2UsY2hlcnJ5UGljazpoR2UsY2hlY2tvdXQ6d3VlLHByZXR0eVByaW50OmZHZSxjbGVhcjpkR2UsZ2V0QnJhbmNoZXNBc09iakFycmF5OnBHZSxnZXRCcmFuY2hlczptR2UsZ2V0Q29tbWl0czpnR2UsZ2V0Q29tbWl0c0FycmF5Omt1ZSxnZXRDdXJyZW50QnJhbmNoOnlHZSxnZXREaXJlY3Rpb246dkdlLGdldEhlYWQ6eEdlLHNldEFjY1RpdGxlOk1yLGdldEFjY1RpdGxlOkJyLGdldEFjY0Rlc2NyaXB0aW9uOnpyLHNldEFjY0Rlc2NyaXB0aW9uOkZyLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnJ9fSk7dmFyIGJHZSx3R2UsVEdlLGtHZSxFR2UsU0dlLENHZSxFdWUsU3VlPU0oKCk9PnsidXNlIHN0cmljdCI7SGcoKTt1dCgpO1R4KCk7T0koKTtmRSgpO2JHZT1vKCh0LGUpPT57eWYodCxlKSx0LmRpciYmZS5zZXREaXJlY3Rpb24odC5kaXIpO2ZvcihsZXQgciBvZiB0LnN0YXRlbWVudHMpd0dlKHIsZSl9LCJwb3B1bGF0ZSIpLHdHZT1vKCh0LGUpPT57bGV0IG49e0NvbW1pdDpvKGk9PmUuY29tbWl0KFRHZShpKSksIkNvbW1pdCIpLEJyYW5jaDpvKGk9PmUuYnJhbmNoKGtHZShpKSksIkJyYW5jaCIpLE1lcmdlOm8oaT0+ZS5tZXJnZShFR2UoaSkpLCJNZXJnZSIpLENoZWNrb3V0Om8oaT0+ZS5jaGVja291dChTR2UoaSkpLCJDaGVja291dCIpLENoZXJyeVBpY2tpbmc6byhpPT5lLmNoZXJyeVBpY2soQ0dlKGkpKSwiQ2hlcnJ5UGlja2luZyIpfVt0LiR0eXBlXTtuP24odCk6WS5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHt0LiR0eXBlfWApfSwicGFyc2VTdGF0ZW1lbnQiKSxUR2U9byh0PT4oe2lkOnQuaWQsbXNnOnQubWVzc2FnZT8/IiIsdHlwZTp0LnR5cGUhPT12b2lkIDA/anJbdC50eXBlXTpqci5OT1JNQUwsdGFnczp0LnRhZ3M/P3ZvaWQgMH0pLCJwYXJzZUNvbW1pdCIpLGtHZT1vKHQ9Pih7bmFtZTp0Lm5hbWUsb3JkZXI6dC5vcmRlcj8/MH0pLCJwYXJzZUJyYW5jaCIpLEVHZT1vKHQ9Pih7YnJhbmNoOnQuYnJhbmNoLGlkOnQuaWQ/PyIiLHR5cGU6dC50eXBlIT09dm9pZCAwP2pyW3QudHlwZV06dm9pZCAwLHRhZ3M6dC50YWdzPz92b2lkIDB9KSwicGFyc2VNZXJnZSIpLFNHZT1vKHQ9PnQuYnJhbmNoLCJwYXJzZUNoZWNrb3V0IiksQ0dlPW8odD0+KHtpZDp0LmlkLHRhcmdldElkOiIiLHRhZ3M6dC50YWdzPy5sZW5ndGg9PT0wP3ZvaWQgMDp0LnRhZ3MscGFyZW50OnQucGFyZW50fSksInBhcnNlQ2hlcnJ5UGlja2luZyIpLEV1ZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgWWwoImdpdEdyYXBoIix0KTtZLmRlYnVnKGUpLGJHZShlLHBFKX0sInBhcnNlIil9fSk7dmFyIEFHZSxzbCxiZix3ZixZYyxadSxEMCxXcyxZcyxtRSxreCxnRSx4ZixScixfR2UsQXVlLF91ZSxMR2UsREdlLE5HZSxSR2UsTUdlLElHZSxPR2UsUEdlLEJHZSxGR2UsekdlLEdHZSxDdWUsJEdlLEV4LFZHZSxVR2UsSEdlLFdHZSxZR2UsTHVlLER1ZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7VnQoKTt1dCgpO2hyKCk7ZkUoKTtBR2U9cGUoKSxzbD1BR2U/LmdpdEdyYXBoLGJmPTEwLHdmPTQwLFljPTQsWnU9MixEMD04LFdzPW5ldyBNYXAsWXM9bmV3IE1hcCxtRT0zMCxreD1uZXcgTWFwLGdFPVtdLHhmPTAsUnI9IkxSIixfR2U9bygoKT0+e1dzLmNsZWFyKCksWXMuY2xlYXIoKSxreC5jbGVhcigpLHhmPTAsZ0U9W10sUnI9IkxSIn0sImNsZWFyIiksQXVlPW8odD0+e2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90LnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6dCkuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxpLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxpLnRleHRDb250ZW50PW4udHJpbSgpLGUuYXBwZW5kQ2hpbGQoaSl9KSxlfSwiZHJhd1RleHQiKSxfdWU9byh0PT57bGV0IGUscixuO3JldHVybiBScj09PSJCVCI/KHI9bygoaSxhKT0+aTw9YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTEvMCk6KHI9bygoaSxhKT0+aT49YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTApLHQuZm9yRWFjaChpPT57bGV0IGE9UnI9PT0iVEIifHxScj09IkJUIj9Zcy5nZXQoaSk/Lnk6WXMuZ2V0KGkpPy54O2EhPT12b2lkIDAmJnIoYSxuKSYmKGU9aSxuPWEpfSksZX0sImZpbmRDbG9zZXN0UGFyZW50IiksTEdlPW8odD0+e2xldCBlPSIiLHI9MS8wO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPVlzLmdldChuKS55O2k8PXImJihlPW4scj1pKX0pLGV8fHZvaWQgMH0sImZpbmRDbG9zZXN0UGFyZW50QlQiKSxER2U9bygodCxlLHIpPT57bGV0IG49cixpPXIsYT1bXTt0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKCFsKXRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7c31gKTtsLnBhcmVudHMubGVuZ3RoPyhuPVJHZShsKSxpPU1hdGgubWF4KG4saSkpOmEucHVzaChsKSxNR2UobCxuKX0pLG49aSxhLmZvckVhY2gocz0+e0lHZShzLG4scil9KSx0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKGw/LnBhcmVudHMubGVuZ3RoKXtsZXQgdT1MR2UobC5wYXJlbnRzKTtuPVlzLmdldCh1KS55LXdmLG48PWkmJihpPW4pO2xldCBoPVdzLmdldChsLmJyYW5jaCkucG9zLGY9bi1iZjtZcy5zZXQobC5pZCx7eDpoLHk6Zn0pfX0pfSwic2V0UGFyYWxsZWxCVFBvcyIpLE5HZT1vKHQ9PntsZXQgZT1fdWUodC5wYXJlbnRzLmZpbHRlcihuPT5uIT09bnVsbCkpO2lmKCFlKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO2xldCByPVlzLmdldChlKT8ueTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgcG9zaXRpb24gbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO3JldHVybiByfSwiZmluZENsb3Nlc3RQYXJlbnRQb3MiKSxSR2U9byh0PT5OR2UodCkrd2YsImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uIiksTUdlPW8oKHQsZSk9PntsZXQgcj1Xcy5nZXQodC5icmFuY2gpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgQnJhbmNoIG5vdCBmb3VuZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtsZXQgbj1yLnBvcyxpPWUrYmY7cmV0dXJuIFlzLnNldCh0LmlkLHt4Om4seTppfSkse3g6bix5Oml9fSwic2V0Q29tbWl0UG9zaXRpb24iKSxJR2U9bygodCxlLHIpPT57bGV0IG49V3MuZ2V0KHQuYnJhbmNoKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7bGV0IGk9ZStyLGE9bi5wb3M7WXMuc2V0KHQuaWQse3g6YSx5Oml9KX0sInNldFJvb3RQb3NpdGlvbiIpLE9HZT1vKCh0LGUscixuLGksYSk9PntpZihhPT09anIuSElHSExJR0hUKXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsci54LTEwKS5hdHRyKCJ5IixyLnktMTApLmF0dHIoIndpZHRoIiwyMCkuYXR0cigiaGVpZ2h0IiwyMCkuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQtaGlnaGxpZ2h0JHtpJUQwfSAke259LW91dGVyYCksdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixyLngtNikuYXR0cigieSIsci55LTYpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQke2klRDB9ICR7bn0taW5uZXJgKTtlbHNlIGlmKGE9PT1qci5DSEVSUllfUElDSyl0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCkuYXR0cigiY3kiLHIueSkuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gJHtufWApLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54LTMpLmF0dHIoImN5IixyLnkrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCszKS5hdHRyKCJjeSIsci55KzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54KzMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54LTMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCk7ZWxzZXtsZXQgcz10LmFwcGVuZCgiY2lyY2xlIik7aWYocy5hdHRyKCJjeCIsci54KSxzLmF0dHIoImN5IixyLnkpLHMuYXR0cigiciIsZS50eXBlPT09anIuTUVSR0U/OToxMCkscy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdCR7aSVEMH1gKSxhPT09anIuTUVSR0Upe2xldCBsPXQuYXBwZW5kKCJjaXJjbGUiKTtsLmF0dHIoImN4IixyLngpLGwuYXR0cigiY3kiLHIueSksbC5hdHRyKCJyIiw2KSxsLmF0dHIoImNsYXNzIixgY29tbWl0ICR7bn0gJHtlLmlkfSBjb21taXQke2klRDB9YCl9YT09PWpyLlJFVkVSU0UmJnQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtyLngtNX0sJHtyLnktNX1MJHtyLngrNX0sJHtyLnkrNX1NJHtyLngtNX0sJHtyLnkrNX1MJHtyLngrNX0sJHtyLnktNX1gKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke259ICR7ZS5pZH0gY29tbWl0JHtpJUQwfWApfX0sImRyYXdDb21taXRCdWxsZXQiKSxQR2U9bygodCxlLHIsbik9PntpZihlLnR5cGUhPT1qci5DSEVSUllfUElDSyYmKGUuY3VzdG9tSWQmJmUudHlwZT09PWpyLk1FUkdFfHxlLnR5cGUhPT1qci5NRVJHRSkmJnNsPy5zaG93Q29tbWl0TGFiZWwpe2xldCBpPXQuYXBwZW5kKCJnIiksYT1pLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLHM9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixyLnkrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChlLmlkKSxsPXMubm9kZSgpPy5nZXRCQm94KCk7aWYobCYmKGEuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMi1adSkuYXR0cigieSIsci55KzEzLjUpLmF0dHIoIndpZHRoIixsLndpZHRoKzIqWnUpLmF0dHIoImhlaWdodCIsbC5oZWlnaHQrMipadSksUnI9PT0iVEIifHxScj09PSJCVCI/KGEuYXR0cigieCIsci54LShsLndpZHRoKzQqWWMrNSkpLmF0dHIoInkiLHIueS0xMikscy5hdHRyKCJ4IixyLngtKGwud2lkdGgrNCpZYykpLmF0dHIoInkiLHIueStsLmhlaWdodC0xMikpOnMuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMiksc2wucm90YXRlQ29tbWl0TGFiZWwpKWlmKFJyPT09IlRCInx8UnI9PT0iQlQiKXMuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIityLngrIiwgIityLnkrIikiKSxhLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrci54KyIsICIrci55KyIpIik7ZWxzZXtsZXQgdT0tNy41LShsLndpZHRoKzEwKS8yNSo5LjUsaD0xMCtsLndpZHRoLzI1KjguNTtpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwgIitoKyIpIHJvdGF0ZSgtNDUsICIrbisiLCAiK3IueSsiKSIpfX19LCJkcmF3Q29tbWl0TGFiZWwiKSxCR2U9bygodCxlLHIsbik9PntpZihlLnRhZ3MubGVuZ3RoPjApe2xldCBpPTAsYT0wLHM9MCxsPVtdO2ZvcihsZXQgdSBvZiBlLnRhZ3MucmV2ZXJzZSgpKXtsZXQgaD10Lmluc2VydCgicG9seWdvbiIpLGY9dC5hcHBlbmQoImNpcmNsZSIpLGQ9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixyLnktMTYtaSkuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwiKS50ZXh0KHUpLHA9ZC5ub2RlKCk/LmdldEJCb3goKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIlRhZyBiYm94IG5vdCBmb3VuZCIpO2E9TWF0aC5tYXgoYSxwLndpZHRoKSxzPU1hdGgubWF4KHMscC5oZWlnaHQpLGQuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LXAud2lkdGgvMiksbC5wdXNoKHt0YWc6ZCxob2xlOmYscmVjdDpoLHlPZmZzZXQ6aX0pLGkrPTIwfWZvcihsZXR7dGFnOnUsaG9sZTpoLHJlY3Q6Zix5T2Zmc2V0OmR9b2YgbCl7bGV0IHA9cy8yLG09ci55LTE5LjItZDtpZihmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAke24tYS8yLVljLzJ9LCR7bStadX0gIAogICAgICAke24tYS8yLVljLzJ9LCR7bS1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVljfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1ljfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1ljfSwke20rcCtadX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVljfSwke20rcCtadX1gKSxoLmF0dHIoImN5IixtKS5hdHRyKCJjeCIsbi1hLzIrWWMvMikuYXR0cigiciIsMS41KS5hdHRyKCJjbGFzcyIsInRhZy1ob2xlIiksUnI9PT0iVEIifHxScj09PSJCVCIpe2xldCBnPW4rZDtmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICR7ci54fSwke2crMn0KICAgICAgICAke3IueH0sJHtnLTJ9CiAgICAgICAgJHtyLngrYmZ9LCR7Zy1wLTJ9CiAgICAgICAgJHtyLngrYmYrYSs0fSwke2ctcC0yfQogICAgICAgICR7ci54K2JmK2ErNH0sJHtnK3ArMn0KICAgICAgICAke3IueCtiZn0sJHtnK3ArMn1gKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIityLngrIiwiK24rIikiKSxoLmF0dHIoImN4IixyLngrWWMvMikuYXR0cigiY3kiLGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK3IueCsiLCIrbisiKSIpLHUuYXR0cigieCIsci54KzUpLmF0dHIoInkiLGcrMykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsICIrci54KyIsIituKyIpIil9fX19LCJkcmF3Q29tbWl0VGFncyIpLEZHZT1vKHQ9Pntzd2l0Y2godC5jdXN0b21UeXBlPz90LnR5cGUpe2Nhc2UganIuTk9STUFMOnJldHVybiJjb21taXQtbm9ybWFsIjtjYXNlIGpyLlJFVkVSU0U6cmV0dXJuImNvbW1pdC1yZXZlcnNlIjtjYXNlIGpyLkhJR0hMSUdIVDpyZXR1cm4iY29tbWl0LWhpZ2hsaWdodCI7Y2FzZSBqci5NRVJHRTpyZXR1cm4iY29tbWl0LW1lcmdlIjtjYXNlIGpyLkNIRVJSWV9QSUNLOnJldHVybiJjb21taXQtY2hlcnJ5LXBpY2siO2RlZmF1bHQ6cmV0dXJuImNvbW1pdC1ub3JtYWwifX0sImdldENvbW1pdENsYXNzVHlwZSIpLHpHZT1vKCh0LGUscixuKT0+e2xldCBpPXt4OjAseTowfTtpZih0LnBhcmVudHMubGVuZ3RoPjApe2xldCBhPV91ZSh0LnBhcmVudHMpO2lmKGEpe2xldCBzPW4uZ2V0KGEpPz9pO3JldHVybiBlPT09IlRCIj9zLnkrd2Y6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LXdmOnMueCt3Zn19ZWxzZSByZXR1cm4gZT09PSJUQiI/bUU6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LXdmOjA7cmV0dXJuIDB9LCJjYWxjdWxhdGVQb3NpdGlvbiIpLEdHZT1vKCh0LGUscik9PntsZXQgbj1Scj09PSJCVCImJnI/ZTplK2JmLGk9UnI9PT0iVEIifHxScj09PSJCVCI/bjpXcy5nZXQodC5icmFuY2gpPy5wb3MsYT1Scj09PSJUQiJ8fFJyPT09IkJUIj9Xcy5nZXQodC5icmFuY2gpPy5wb3M6bjtpZihhPT09dm9pZCAwfHxpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgUG9zaXRpb24gd2VyZSB1bmRlZmluZWQgZm9yIGNvbW1pdCAke3QuaWR9YCk7cmV0dXJue3g6YSx5OmkscG9zV2l0aE9mZnNldDpufX0sImdldENvbW1pdFBvc2l0aW9uIiksQ3VlPW8oKHQsZSxyKT0+e2lmKCFzbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgbj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxpPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIiksYT1Scj09PSJUQiJ8fFJyPT09IkJUIj9tRTowLHM9Wy4uLmUua2V5cygpXSxsPXNsPy5wYXJhbGxlbENvbW1pdHM/PyExLHU9bygoZixkKT0+e2xldCBwPWUuZ2V0KGYpPy5zZXEsbT1lLmdldChkKT8uc2VxO3JldHVybiBwIT09dm9pZCAwJiZtIT09dm9pZCAwP3AtbTowfSwic29ydEtleXMiKSxoPXMuc29ydCh1KTtScj09PSJCVCImJihsJiZER2UoaCxlLGEpLGg9aC5yZXZlcnNlKCkpLGguZm9yRWFjaChmPT57bGV0IGQ9ZS5nZXQoZik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtmfWApO2wmJihhPXpHZShkLFJyLGEsWXMpKTtsZXQgcD1HR2UoZCxhLGwpO2lmKHIpe2xldCBtPUZHZShkKSxnPWQuY3VzdG9tVHlwZT8/ZC50eXBlLHk9V3MuZ2V0KGQuYnJhbmNoKT8uaW5kZXg/PzA7T0dlKG4sZCxwLG0seSxnKSxQR2UoaSxkLHAsYSksQkdlKGksZCxwLGEpfVJyPT09IlRCInx8UnI9PT0iQlQiP1lzLnNldChkLmlkLHt4OnAueCx5OnAucG9zV2l0aE9mZnNldH0pOllzLnNldChkLmlkLHt4OnAucG9zV2l0aE9mZnNldCx5OnAueX0pLGE9UnI9PT0iQlQiJiZsP2Erd2Y6YSt3ZitiZixhPnhmJiYoeGY9YSl9KX0sImRyYXdDb21taXRzIiksJEdlPW8oKHQsZSxyLG4saSk9PntsZXQgcz0oUnI9PT0iVEIifHxScj09PSJCVCI/ci54PG4ueDpyLnk8bi55KT9lLmJyYW5jaDp0LmJyYW5jaCxsPW8oaD0+aC5icmFuY2g9PT1zLCJpc09uQnJhbmNoVG9HZXRDdXJ2ZSIpLHU9byhoPT5oLnNlcT50LnNlcSYmaC5zZXE8ZS5zZXEsImlzQmV0d2VlbkNvbW1pdHMiKTtyZXR1cm5bLi4uaS52YWx1ZXMoKV0uc29tZShoPT51KGgpJiZsKGgpKX0sInNob3VsZFJlcm91dGVBcnJvdyIpLEV4PW8oKHQsZSxyPTApPT57bGV0IG49dCtNYXRoLmFicyh0LWUpLzI7aWYocj41KXJldHVybiBuO2lmKGdFLmV2ZXJ5KHM9Pk1hdGguYWJzKHMtbik+PTEwKSlyZXR1cm4gZ0UucHVzaChuKSxuO2xldCBhPU1hdGguYWJzKHQtZSk7cmV0dXJuIEV4KHQsZS1hLzUscisxKX0sImZpbmRMYW5lIiksVkdlPW8oKHQsZSxyLG4pPT57bGV0IGk9WXMuZ2V0KGUuaWQpLGE9WXMuZ2V0KHIuaWQpO2lmKGk9PT12b2lkIDB8fGE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb21taXQgcG9zaXRpb25zIG5vdCBmb3VuZCBmb3IgY29tbWl0cyAke2UuaWR9IGFuZCAke3IuaWR9YCk7bGV0IHM9JEdlKGUscixpLGEsbiksbD0iIix1PSIiLGg9MCxmPTAsZD1Xcy5nZXQoci5icmFuY2gpPy5pbmRleDtyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXSYmKGQ9V3MuZ2V0KGUuYnJhbmNoKT8uaW5kZXgpO2xldCBwO2lmKHMpe2w9IkEgMTAgMTAsIDAsIDAsIDAsIix1PSJBIDEwIDEwLCAwLCAwLCAxLCIsaD0xMCxmPTEwO2xldCBtPWkueTxhLnk/RXgoaS55LGEueSk6RXgoYS55LGkueSksZz1pLng8YS54P0V4KGkueCxhLngpOkV4KGEueCxpLngpO1JyPT09IlRCIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHt1fSAke2d9ICR7aS55K2Z9IEwgJHtnfSAke2EueS1ofSAke2x9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Xcy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7bH0gJHtnfSAke2kueStmfSBMICR7Z30gJHthLnktaH0gJHt1fSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOlJyPT09IkJUIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHtsfSAke2d9ICR7aS55LWZ9IEwgJHtnfSAke2EueStofSAke3V9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Xcy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7dX0gJHtnfSAke2kueS1mfSBMICR7Z30gJHthLnkraH0gJHtsfSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOmkueTxhLnk/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7bS1ofSAke2x9ICR7aS54K2Z9ICR7bX0gTCAke2EueC1ofSAke219ICR7dX0gJHthLnh9ICR7bStmfSBMICR7YS54fSAke2EueX1gOihkPVdzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke20raH0gJHt1fSAke2kueCtmfSAke219IEwgJHthLngtaH0gJHttfSAke2x9ICR7YS54fSAke20tZn0gTCAke2EueH0gJHthLnl9YCl9ZWxzZSBsPSJBIDIwIDIwLCAwLCAwLCAwLCIsdT0iQSAyMCAyMCwgMCwgMCwgMSwiLGg9MjAsZj0yMCxScj09PSJUQiI/KGkueDxhLngmJihyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YCksaS54PmEueCYmKGw9IkEgMjAgMjAsIDAsIDAsIDAsIix1PSJBIDIwIDIwLCAwLCAwLCAxLCIsaD0yMCxmPTIwLHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke3V9ICR7aS54LWZ9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54K2h9ICR7aS55fSAke2x9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gKSxpLng9PT1hLngmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpOlJyPT09IkJUIj8oaS54PGEueCYmKHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gKSxpLng+YS54JiYobD0iQSAyMCAyMCwgMCwgMCwgMCwiLHU9IkEgMjAgMjAsIDAsIDAsIDEsIixoPTIwLGY9MjAsci50eXBlPT09anIuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7bH0gJHtpLngtZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWApLGkueD09PWEueCYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk6KGkueTxhLnkmJihyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YCksaS55PmEueSYmKHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gKSxpLnk9PT1hLnkmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpO2lmKHA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJMaW5lIGRlZmluaXRpb24gbm90IGZvdW5kIik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwKS5hdHRyKCJjbGFzcyIsImFycm93IGFycm93IitkJUQwKX0sImRyYXdBcnJvdyIpLFVHZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtbLi4uZS5rZXlzKCldLmZvckVhY2gobj0+e2xldCBpPWUuZ2V0KG4pO2kucGFyZW50cyYmaS5wYXJlbnRzLmxlbmd0aD4wJiZpLnBhcmVudHMuZm9yRWFjaChhPT57VkdlKHIsZS5nZXQoYSksaSxlKX0pfSl9LCJkcmF3QXJyb3dzIiksSEdlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZyIpO2UuZm9yRWFjaCgobixpKT0+e2xldCBhPWklRDAscz1Xcy5nZXQobi5uYW1lKT8ucG9zO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke24ubmFtZX1gKTtsZXQgbD1yLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLDApLGwuYXR0cigieTEiLHMpLGwuYXR0cigieDIiLHhmKSxsLmF0dHIoInkyIixzKSxsLmF0dHIoImNsYXNzIiwiYnJhbmNoIGJyYW5jaCIrYSksUnI9PT0iVEIiPyhsLmF0dHIoInkxIixtRSksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIseGYpLGwuYXR0cigieDIiLHMpKTpScj09PSJCVCImJihsLmF0dHIoInkxIix4ZiksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsbUUpLGwuYXR0cigieDIiLHMpKSxnRS5wdXNoKHMpO2xldCB1PW4ubmFtZSxoPUF1ZSh1KSxmPXIuaW5zZXJ0KCJyZWN0IikscD1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYSk7cC5ub2RlKCkuYXBwZW5kQ2hpbGQoaCk7bGV0IG09aC5nZXRCQm94KCk7Zi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIithKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC1tLndpZHRoLTQtKHNsPy5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5IiwtbS5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCs0KSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtbS53aWR0aC0xNC0oc2w/LnJvdGF0ZUNvbW1pdExhYmVsPT09ITA/MzA6MCkpKyIsICIrKHMtbS5oZWlnaHQvMi0xKSsiKSIpLFJyPT09IlRCIj8oZi5hdHRyKCJ4IixzLW0ud2lkdGgvMi0xMCkuYXR0cigieSIsMCkscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgMCkiKSk6UnI9PT0iQlQiPyhmLmF0dHIoIngiLHMtbS53aWR0aC8yLTEwKS5hdHRyKCJ5Iix4ZikscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgIit4ZisiKSIpKTpmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKHMtbS5oZWlnaHQvMikrIikiKX0pfSwiZHJhd0JyYW5jaGVzIiksV0dlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gV3Muc2V0KHQse3BvczplLGluZGV4OnJ9KSxlKz01MCsoaT80MDowKSsoUnI9PT0iVEIifHxScj09PSJCVCI/bi53aWR0aC8yOjApLGV9LCJzZXRCcmFuY2hQb3NpdGlvbiIpLFlHZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKF9HZSgpLFkuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0K2AKYCwiaWQ6IixlLHIpLCFzbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgaT1zbC5yb3RhdGVDb21taXRMYWJlbD8/ITEsYT1uLmRiO2t4PWEuZ2V0Q29tbWl0cygpO2xldCBzPWEuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7UnI9YS5nZXREaXJlY3Rpb24oKTtsZXQgbD1WZShgW2lkPSIke2V9Il1gKSx1PTA7cy5mb3JFYWNoKChoLGYpPT57bGV0IGQ9QXVlKGgubmFtZSkscD1sLmFwcGVuZCgiZyIpLG09cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksZz1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7Zy5ub2RlKCk/LmFwcGVuZENoaWxkKGQpO2xldCB5PWQuZ2V0QkJveCgpO3U9V0dlKGgubmFtZSx1LGYseSxpKSxnLnJlbW92ZSgpLG0ucmVtb3ZlKCkscC5yZW1vdmUoKX0pLEN1ZShsLGt4LCExKSxzbC5zaG93QnJhbmNoZXMmJkhHZShsLHMpLFVHZShsLGt4KSxDdWUobCxreCwhMCksVXQuaW5zZXJ0VGl0bGUobCwiZ2l0VGl0bGVUZXh0IixzbC50aXRsZVRvcE1hcmdpbj8/MCxhLmdldERpYWdyYW1UaXRsZSgpKSxvNyh2b2lkIDAsbCxzbC5kaWFncmFtUGFkZGluZyxzbC51c2VNYXhXaWR0aCl9LCJkcmF3IiksTHVlPXtkcmF3OllHZX19KTt2YXIgcUdlLE51ZSxSdWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxR2U9byh0PT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChlPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7ZX0geyBmaWxsOiAke3RbImdpdEJyYW5jaExhYmVsIitlXX07IH0KICAgICAgICAuY29tbWl0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXQiK2VdfTsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXRJbnYiK2VdfTsgZmlsbDogJHt0WyJnaXRJbnYiK2VdfTsgfQogICAgICAgIC5sYWJlbCR7ZX0gIHsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5hcnJvdyR7ZX0geyBzdHJva2U6ICR7dFsiZ2l0IitlXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7dC5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHt0LmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHt0LmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke3QuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHt0LnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke3QudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHt0LnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHt0LnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7dC50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHt0LnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke3QucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KYCwiZ2V0U3R5bGVzIiksTnVlPXFHZX0pO3ZhciBNdWU9e307dnIoTXVlLHtkaWFncmFtOigpPT5YR2V9KTt2YXIgWEdlLEl1ZT1NKCgpPT57InVzZSBzdHJpY3QiO1N1ZSgpO09JKCk7RHVlKCk7UnVlKCk7WEdlPXtwYXJzZXI6RXVlLGRiOnBFLHJlbmRlcmVyOkx1ZSxzdHlsZXM6TnVlfX0pO3ZhciBQSSxCdWUsRnVlPU0oKCk9PnsidXNlIHN0cmljdCI7UEk9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFIsQyxPLE4pe2ZvcihPPU98fHt9LE49Ui5sZW5ndGg7Ti0tO09bUltOXV09Qyk7cmV0dXJuIE99LCJvIiksZT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM4LDQwXSxyPVsxLDI2XSxuPVsxLDI3XSxpPVsxLDI4XSxhPVsxLDI5XSxzPVsxLDMwXSxsPVsxLDMxXSx1PVsxLDMyXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDldLHA9WzEsMTBdLG09WzEsMTFdLGc9WzEsMTJdLHk9WzEsMTNdLHY9WzEsMTRdLHg9WzEsMTVdLGI9WzEsMTZdLHc9WzEsMTldLF89WzEsMjBdLFQ9WzEsMjFdLEU9WzEsMjJdLEw9WzEsMjNdLFM9WzEsMjVdLEE9WzEsMzVdLEk9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ2FudHQ6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5MOjEwLHdlZWtkYXk6MTEsd2Vla2RheV9tb25kYXk6MTIsd2Vla2RheV90dWVzZGF5OjEzLHdlZWtkYXlfd2VkbmVzZGF5OjE0LHdlZWtkYXlfdGh1cnNkYXk6MTUsd2Vla2RheV9mcmlkYXk6MTYsd2Vla2RheV9zYXR1cmRheToxNyx3ZWVrZGF5X3N1bmRheToxOCx3ZWVrZW5kOjE5LHdlZWtlbmRfZnJpZGF5OjIwLHdlZWtlbmRfc2F0dXJkYXk6MjEsZGF0ZUZvcm1hdDoyMixpbmNsdXNpdmVFbmREYXRlczoyMyx0b3BBeGlzOjI0LGF4aXNGb3JtYXQ6MjUsdGlja0ludGVydmFsOjI2LGV4Y2x1ZGVzOjI3LGluY2x1ZGVzOjI4LHRvZGF5TWFya2VyOjI5LHRpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LHNlY3Rpb246MzYsY2xpY2tTdGF0ZW1lbnQ6MzcsdGFza1R4dDozOCx0YXNrRGF0YTozOSxjbGljazo0MCxjYWxsYmFja25hbWU6NDEsY2FsbGJhY2thcmdzOjQyLGhyZWY6NDMsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0NCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDIwOiJ3ZWVrZW5kX2ZyaWRheSIsMjE6IndlZWtlbmRfc2F0dXJkYXkiLDIyOiJkYXRlRm9ybWF0IiwyMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDI0OiJ0b3BBeGlzIiwyNToiYXhpc0Zvcm1hdCIsMjY6InRpY2tJbnRlcnZhbCIsMjc6ImV4Y2x1ZGVzIiwyODoiaW5jbHVkZXMiLDI5OiJ0b2RheU1hcmtlciIsMzA6InRpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6InNlY3Rpb24iLDM4OiJ0YXNrVHh0IiwzOToidGFza0RhdGEiLDQwOiJjbGljayIsNDE6ImNhbGxiYWNrbmFtZSIsNDI6ImNhbGxiYWNrYXJncyIsNDM6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxOSwxXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzM3LDJdLFszNywzXSxbMzcsM10sWzM3LDRdLFszNywzXSxbMzcsNF0sWzM3LDJdLFs0NCwyXSxbNDQsM10sWzQ0LDNdLFs0NCw0XSxbNDQsM10sWzQ0LDRdLFs0NCwyXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEMsTyxOLFAsRixCLEcpe3ZhciB6PUIubGVuZ3RoLTE7c3dpdGNoKEYpe2Nhc2UgMTpyZXR1cm4gQlt6LTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkJbei0xXS5wdXNoKEJbel0pLHRoaXMuJD1CW3otMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9Qlt6XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UC5zZXRXZWVrZGF5KCJtb25kYXkiKTticmVhaztjYXNlIDk6UC5zZXRXZWVrZGF5KCJ0dWVzZGF5Iik7YnJlYWs7Y2FzZSAxMDpQLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UC5zZXRXZWVrZGF5KCJ0aHVyc2RheSIpO2JyZWFrO2Nhc2UgMTI6UC5zZXRXZWVrZGF5KCJmcmlkYXkiKTticmVhaztjYXNlIDEzOlAuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlAuc2V0V2Vla2RheSgic3VuZGF5Iik7YnJlYWs7Y2FzZSAxNTpQLnNldFdlZWtlbmQoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTY6UC5zZXRXZWVrZW5kKCJzYXR1cmRheSIpO2JyZWFrO2Nhc2UgMTc6UC5zZXREYXRlRm9ybWF0KEJbel0uc3Vic3RyKDExKSksdGhpcy4kPUJbel0uc3Vic3RyKDExKTticmVhaztjYXNlIDE4OlAuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTk6UC5Ub3BBeGlzKCksdGhpcy4kPUJbel0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjA6UC5zZXRBeGlzRm9ybWF0KEJbel0uc3Vic3RyKDExKSksdGhpcy4kPUJbel0uc3Vic3RyKDExKTticmVhaztjYXNlIDIxOlAuc2V0VGlja0ludGVydmFsKEJbel0uc3Vic3RyKDEzKSksdGhpcy4kPUJbel0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIyOlAuc2V0RXhjbHVkZXMoQlt6XS5zdWJzdHIoOSkpLHRoaXMuJD1CW3pdLnN1YnN0cig5KTticmVhaztjYXNlIDIzOlAuc2V0SW5jbHVkZXMoQlt6XS5zdWJzdHIoOSkpLHRoaXMuJD1CW3pdLnN1YnN0cig5KTticmVhaztjYXNlIDI0OlAuc2V0VG9kYXlNYXJrZXIoQlt6XS5zdWJzdHIoMTIpKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjc6UC5zZXREaWFncmFtVGl0bGUoQlt6XS5zdWJzdHIoNikpLHRoaXMuJD1CW3pdLnN1YnN0cig2KTticmVhaztjYXNlIDI4OnRoaXMuJD1CW3pdLnRyaW0oKSxQLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1CW3pdLnRyaW0oKSxQLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpQLmFkZFNlY3Rpb24oQlt6XS5zdWJzdHIoOCkpLHRoaXMuJD1CW3pdLnN1YnN0cig4KTticmVhaztjYXNlIDMzOlAuYWRkVGFzayhCW3otMV0sQlt6XSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDM0OnRoaXMuJD1CW3otMV0sUC5zZXRDbGlja0V2ZW50KEJbei0xXSxCW3pdLG51bGwpO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUJbei0yXSxQLnNldENsaWNrRXZlbnQoQlt6LTJdLEJbei0xXSxCW3pdKTticmVhaztjYXNlIDM2OnRoaXMuJD1CW3otMl0sUC5zZXRDbGlja0V2ZW50KEJbei0yXSxCW3otMV0sbnVsbCksUC5zZXRMaW5rKEJbei0yXSxCW3pdKTticmVhaztjYXNlIDM3OnRoaXMuJD1CW3otM10sUC5zZXRDbGlja0V2ZW50KEJbei0zXSxCW3otMl0sQlt6LTFdKSxQLnNldExpbmsoQlt6LTNdLEJbel0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPUJbei0yXSxQLnNldENsaWNrRXZlbnQoQlt6LTJdLEJbel0sbnVsbCksUC5zZXRMaW5rKEJbei0yXSxCW3otMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPUJbei0zXSxQLnNldENsaWNrRXZlbnQoQlt6LTNdLEJbei0xXSxCW3pdKSxQLnNldExpbmsoQlt6LTNdLEJbei0yXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9Qlt6LTFdLFAuc2V0TGluayhCW3otMV0sQlt6XSk7YnJlYWs7Y2FzZSA0MTpjYXNlIDQ3OnRoaXMuJD1CW3otMV0rIiAiK0Jbel07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDU6dGhpcy4kPUJbei0yXSsiICIrQlt6LTFdKyIgIitCW3pdO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0Njp0aGlzLiQ9Qlt6LTNdKyIgIitCW3otMl0rIiAiK0Jbei0xXSsiICIrQlt6XTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDp3LDMxOl8sMzM6VCwzNTpFLDM2OkwsMzc6MjQsMzg6Uyw0MDpBfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjM2LDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDp3LDMxOl8sMzM6VCwzNTpFLDM2OkwsMzc6MjQsMzg6Uyw0MDpBfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDE3XSksdChlLFsyLDE4XSksdChlLFsyLDE5XSksdChlLFsyLDIwXSksdChlLFsyLDIxXSksdChlLFsyLDIyXSksdChlLFsyLDIzXSksdChlLFsyLDI0XSksdChlLFsyLDI1XSksdChlLFsyLDI2XSksdChlLFsyLDI3XSksezMyOlsxLDM3XX0sezM0OlsxLDM4XX0sdChlLFsyLDMwXSksdChlLFsyLDMxXSksdChlLFsyLDMyXSksezM5OlsxLDM5XX0sdChlLFsyLDhdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pLHQoZSxbMiwxMV0pLHQoZSxbMiwxMl0pLHQoZSxbMiwxM10pLHQoZSxbMiwxNF0pLHQoZSxbMiwxNV0pLHQoZSxbMiwxNl0pLHs0MTpbMSw0MF0sNDM6WzEsNDFdfSx0KGUsWzIsNF0pLHQoZSxbMiwyOF0pLHQoZSxbMiwyOV0pLHQoZSxbMiwzM10pLHQoZSxbMiwzNF0sezQyOlsxLDQyXSw0MzpbMSw0M119KSx0KGUsWzIsNDBdLHs0MTpbMSw0NF19KSx0KGUsWzIsMzVdLHs0MzpbMSw0NV19KSx0KGUsWzIsMzZdKSx0KGUsWzIsMzhdLHs0MjpbMSw0Nl19KSx0KGUsWzIsMzddKSx0KGUsWzIsMzldKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEMsTyl7aWYoTy5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEMpO2Vsc2V7dmFyIE49bmV3IEVycm9yKEMpO3Rocm93IE4uaGFzaD1PLE59fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oQyl7dmFyIE89dGhpcyxOPVswXSxQPVtdLEY9W251bGxdLEI9W10sRz10aGlzLnRhYmxlLHo9IiIsVz0wLFo9MCxqPTAsb2U9MixLPTEsZWU9Qi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxKPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSD17eXk6e319O2Zvcih2YXIgcSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHEpJiYoSC55eVtxXT10aGlzLnl5W3FdKTtKLnNldElucHV0KEMsSC55eSksSC55eS5sZXhlcj1KLEgueXkucGFyc2VyPXRoaXMsdHlwZW9mIEoueXlsbG9jPiJ1IiYmKEoueXlsbG9jPXt9KTt2YXIgUT1KLnl5bGxvYztCLnB1c2goUSk7dmFyIGFlPUoub3B0aW9ucyYmSi5vcHRpb25zLnJhbmdlczt0eXBlb2YgSC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1ILnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHVlKGhlKXtOLmxlbmd0aD1OLmxlbmd0aC0yKmhlLEYubGVuZ3RoPUYubGVuZ3RoLWhlLEIubGVuZ3RoPUIubGVuZ3RoLWhlfW8odWUsInBvcFN0YWNrIik7ZnVuY3Rpb24gY2UoKXt2YXIgaGU7cmV0dXJuIGhlPVAucG9wKCl8fEoubGV4KCl8fEssdHlwZW9mIGhlIT0ibnVtYmVyIiYmKGhlIGluc3RhbmNlb2YgQXJyYXkmJihQPWhlLGhlPVAucG9wKCkpLGhlPU8uc3ltYm9sc19baGVdfHxoZSksaGV9byhjZSwibGV4Iik7Zm9yKHZhciB0ZSxOZSxzZSxrZSxSZSxDZSxQZT17fSxJZSwkZSx5ZSxYOzspe2lmKHNlPU5bTi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tzZV0/a2U9dGhpcy5kZWZhdWx0QWN0aW9uc1tzZV06KCh0ZT09PW51bGx8fHR5cGVvZiB0ZT4idSIpJiYodGU9Y2UoKSksa2U9R1tzZV0mJkdbc2VdW3RlXSksdHlwZW9mIGtlPiJ1Inx8IWtlLmxlbmd0aHx8IWtlWzBdKXt2YXIgZmU9IiI7WD1bXTtmb3IoSWUgaW4gR1tzZV0pdGhpcy50ZXJtaW5hbHNfW0llXSYmSWU+b2UmJlgucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0llXSsiJyIpO0ouc2hvd1Bvc2l0aW9uP2ZlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFcrMSkrYDoKYCtKLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3RlXXx8dGUpKyInIjpmZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhXKzEpKyI6IFVuZXhwZWN0ZWQgIisodGU9PUs/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoZmUse3RleHQ6Si5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSxsaW5lOkoueXlsaW5lbm8sbG9jOlEsZXhwZWN0ZWQ6WH0pfWlmKGtlWzBdaW5zdGFuY2VvZiBBcnJheSYma2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitzZSsiLCB0b2tlbjogIit0ZSk7c3dpdGNoKGtlWzBdKXtjYXNlIDE6Ti5wdXNoKHRlKSxGLnB1c2goSi55eXRleHQpLEIucHVzaChKLnl5bGxvYyksTi5wdXNoKGtlWzFdKSx0ZT1udWxsLE5lPyh0ZT1OZSxOZT1udWxsKTooWj1KLnl5bGVuZyx6PUoueXl0ZXh0LFc9Si55eWxpbmVubyxRPUoueXlsbG9jLGo+MCYmai0tKTticmVhaztjYXNlIDI6aWYoJGU9dGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzFdLFBlLiQ9RltGLmxlbmd0aC0kZV0sUGUuXyQ9e2ZpcnN0X2xpbmU6QltCLmxlbmd0aC0oJGV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpCW0IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46QltCLmxlbmd0aC0oJGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QltCLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYWUmJihQZS5fJC5yYW5nZT1bQltCLmxlbmd0aC0oJGV8fDEpXS5yYW5nZVswXSxCW0IubGVuZ3RoLTFdLnJhbmdlWzFdXSksQ2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFBlLFt6LFosVyxILnl5LGtlWzFdLEYsQl0uY29uY2F0KGVlKSksdHlwZW9mIENlPCJ1IilyZXR1cm4gQ2U7JGUmJihOPU4uc2xpY2UoMCwtMSokZSoyKSxGPUYuc2xpY2UoMCwtMSokZSksQj1CLnNsaWNlKDAsLTEqJGUpKSxOLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzBdKSxGLnB1c2goUGUuJCksQi5wdXNoKFBlLl8kKSx5ZT1HW05bTi5sZW5ndGgtMl1dW05bTi5sZW5ndGgtMV1dLE4ucHVzaCh5ZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LEQ9ZnVuY3Rpb24oKXt2YXIgUj17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKE8sTil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihPLE4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKE8pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQyxPKXtyZXR1cm4gdGhpcy55eT1PfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1DLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUMsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUMsdGhpcy5tYXRjaGVkKz1DO3ZhciBPPUMubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBPPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxDfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEMpe3ZhciBPPUMubGVuZ3RoLE49Qy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLU8pLHRoaXMub2Zmc2V0LT1PO3ZhciBQPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLE4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1OLmxlbmd0aC0xKTt2YXIgRj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Tj8oTi5sZW5ndGg9PT1QLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrUFtQLmxlbmd0aC1OLmxlbmd0aF0ubGVuZ3RoLU5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1PfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0ZbMF0sRlswXSt0aGlzLnl5bGVuZy1PXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEMpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBDPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQy5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Muc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLm1hdGNoO3JldHVybiBDLmxlbmd0aDwyMCYmKEMrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUMubGVuZ3RoKSksKEMuc3Vic3RyKDAsMjApKyhDLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5wYXN0SW5wdXQoKSxPPW5ldyBBcnJheShDLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEMrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK08rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEMsTyl7dmFyIE4sUCxGO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihGPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEYueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1DWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitDWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUNbMF0sdGhpcy5tYXRjaCs9Q1swXSx0aGlzLm1hdGNoZXM9Qyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShDWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1DWzBdLE49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsTyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxOKXJldHVybiBOO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBCIGluIEYpdGhpc1tCXT1GW0JdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBDLE8sTixQO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEY9dGhpcy5fY3VycmVudFJ1bGVzKCksQj0wO0I8Ri5sZW5ndGg7QisrKWlmKE49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tGW0JdXSksTiYmKCFPfHxOWzBdLmxlbmd0aD5PWzBdLmxlbmd0aCkpe2lmKE89TixQPUIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQz10aGlzLnRlc3RfbWF0Y2goTixGW0JdKSxDIT09ITEpcmV0dXJuIEM7aWYodGhpcy5fYmFja3RyYWNrKXtPPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIE8/KEM9dGhpcy50ZXN0X21hdGNoKE8sRltQXSksQyE9PSExP0M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgTz10aGlzLm5leHQoKTtyZXR1cm4gT3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oTyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKE8pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIE89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gTz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKE8pe3JldHVybiBPPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoT3x8MCksTz49MD90aGlzLmNvbmRpdGlvblN0YWNrW09dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oTyl7dGhpcy5iZWdpbihPKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKE8sTixQLEYpe3ZhciBCPUY7c3dpdGNoKFApe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwib3Blbl9kaXJlY3RpdmUiO2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMzticmVhaztjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gMTA7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDQzO2Nhc2UgMTc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gNDE7Y2FzZSAyMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gNDI7Y2FzZSAyMzp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDQwO2Nhc2UgMjY6cmV0dXJuIDQ7Y2FzZSAyNzpyZXR1cm4gMjI7Y2FzZSAyODpyZXR1cm4gMjM7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gMjY7Y2FzZSAzMjpyZXR1cm4gMjg7Y2FzZSAzMzpyZXR1cm4gMjc7Y2FzZSAzNDpyZXR1cm4gMjk7Y2FzZSAzNTpyZXR1cm4gMTI7Y2FzZSAzNjpyZXR1cm4gMTM7Y2FzZSAzNzpyZXR1cm4gMTQ7Y2FzZSAzODpyZXR1cm4gMTU7Y2FzZSAzOTpyZXR1cm4gMTY7Y2FzZSA0MDpyZXR1cm4gMTc7Y2FzZSA0MTpyZXR1cm4gMTg7Y2FzZSA0MjpyZXR1cm4gMjA7Y2FzZSA0MzpyZXR1cm4gMjE7Y2FzZSA0NDpyZXR1cm4iZGF0ZSI7Y2FzZSA0NTpyZXR1cm4gMzA7Y2FzZSA0NjpyZXR1cm4iYWNjRGVzY3JpcHRpb24iO2Nhc2UgNDc6cmV0dXJuIDM2O2Nhc2UgNDg6cmV0dXJuIDM4O2Nhc2UgNDk6cmV0dXJuIDM5O2Nhc2UgNTA6cmV0dXJuIjoiO2Nhc2UgNTE6cmV0dXJuIDY7Y2FzZSA1MjpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OndlZWtlbmRccytmcmlkYXlcYikvaSwvXig/OndlZWtlbmRccytzYXR1cmRheVxiKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW15cbl0rKS9pLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW15cbl0rKS9pLC9eKD86W146XG5dKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjEsMjJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTgsMTksMjBdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjQsMjVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIzLDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFJ9KCk7SS5sZXhlcj1EO2Z1bmN0aW9uIGsoKXt0aGlzLnl5PXt9fXJldHVybiBvKGssIlBhcnNlciIpLGsucHJvdG90eXBlPUksSS5QYXJzZXI9ayxuZXcga30oKTtQSS5wYXJzZXI9UEk7QnVlPVBJfSk7dmFyIHp1ZT1FaSgoQkksRkkpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBCST09Im9iamVjdCImJnR5cGVvZiBGSTwidSI/RkkuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9ZSgpfSkoQkksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgaT1vKGZ1bmN0aW9uKGwpe3JldHVybiBsLmFkZCg0LWwuaXNvV2Vla2RheSgpLHQpfSwiYSIpLGE9ci5wcm90b3R5cGU7YS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBpKHRoaXMpLnllYXIoKX0sYS5pc29XZWVrPWZ1bmN0aW9uKGwpe2lmKCF0aGlzLiR1dGlscygpLnUobCkpcmV0dXJuIHRoaXMuYWRkKDcqKGwtdGhpcy5pc29XZWVrKCkpLHQpO3ZhciB1LGgsZixkLHA9aSh0aGlzKSxtPSh1PXRoaXMuaXNvV2Vla1llYXIoKSxoPXRoaXMuJHUsZj0oaD9uLnV0YzpuKSgpLnllYXIodSkuc3RhcnRPZigieWVhciIpLGQ9NC1mLmlzb1dlZWtkYXkoKSxmLmlzb1dlZWtkYXkoKT40JiYoZCs9NyksZi5hZGQoZCx0KSk7cmV0dXJuIHAuZGlmZihtLCJ3ZWVrIikrMX0sYS5pc29XZWVrZGF5PWZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLiR1dGlscygpLnUobCk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/bDpsLTcpfTt2YXIgcz1hLnN0YXJ0T2Y7YS5zdGFydE9mPWZ1bmN0aW9uKGwsdSl7dmFyIGg9dGhpcy4kdXRpbHMoKSxmPSEhaC51KHUpfHx1O3JldHVybiBoLnAobCk9PT0iaXNvd2VlayI/Zj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOnMuYmluZCh0aGlzKShsLHUpfX19KX0pO3ZhciBHdWU9RWkoKHpJLEdJKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2Ygekk9PSJvYmplY3QiJiZ0eXBlb2YgR0k8InUiP0dJLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9jdXN0b21QYXJzZUZvcm1hdD1lKCl9KSh6SSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGU9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscj0vXGQvLG49L1xkXGQvLGk9L1xkXGQ/LyxhPS9cZCpbXi1fOi8sKClcc1xkXSsvLHM9e30sbD1vKGZ1bmN0aW9uKGcpe3JldHVybihnPStnKSsoZz42OD8xOTAwOjJlMyl9LCJhIiksdT1vKGZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih5KXt0aGlzW2ddPSt5fX0sImYiKSxoPVsvWystXVxkXGQ6PyhcZFxkKT98Wi8sZnVuY3Rpb24oZyl7KHRoaXMuem9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbih5KXtpZigheXx8eT09PSJaIilyZXR1cm4gMDt2YXIgdj15Lm1hdGNoKC8oWystXXxcZFxkKS9nKSx4PTYwKnZbMV0rKCt2WzJdfHwwKTtyZXR1cm4geD09PTA/MDp2WzBdPT09IisiPy14Onh9KGcpfV0sZj1vKGZ1bmN0aW9uKGcpe3ZhciB5PXNbZ107cmV0dXJuIHkmJih5LmluZGV4T2Y/eTp5LnMuY29uY2F0KHkuZikpfSwidSIpLGQ9byhmdW5jdGlvbihnLHkpe3ZhciB2LHg9cy5tZXJpZGllbTtpZih4KXtmb3IodmFyIGI9MTtiPD0yNDtiKz0xKWlmKGcuaW5kZXhPZih4KGIsMCx5KSk+LTEpe3Y9Yj4xMjticmVha319ZWxzZSB2PWc9PT0oeT8icG0iOiJQTSIpO3JldHVybiB2fSwiZCIpLHA9e0E6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCExKX1dLGE6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCEwKX1dLFE6W3IsZnVuY3Rpb24oZyl7dGhpcy5tb250aD0zKihnLTEpKzF9XSxTOltyLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZ31dLFNTOltuLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitnfV0sU1NTOlsvXGR7M30vLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPStnfV0sczpbaSx1KCJzZWNvbmRzIildLHNzOltpLHUoInNlY29uZHMiKV0sbTpbaSx1KCJtaW51dGVzIildLG1tOltpLHUoIm1pbnV0ZXMiKV0sSDpbaSx1KCJob3VycyIpXSxoOltpLHUoImhvdXJzIildLEhIOltpLHUoImhvdXJzIildLGhoOltpLHUoImhvdXJzIildLEQ6W2ksdSgiZGF5IildLEREOltuLHUoImRheSIpXSxEbzpbYSxmdW5jdGlvbihnKXt2YXIgeT1zLm9yZGluYWwsdj1nLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT12WzBdLHkpZm9yKHZhciB4PTE7eDw9MzE7eCs9MSl5KHgpLnJlcGxhY2UoL1xbfFxdL2csIiIpPT09ZyYmKHRoaXMuZGF5PXgpfV0sdzpbaSx1KCJ3ZWVrIildLHd3OltuLHUoIndlZWsiKV0sTTpbaSx1KCJtb250aCIpXSxNTTpbbix1KCJtb250aCIpXSxNTU06W2EsZnVuY3Rpb24oZyl7dmFyIHk9ZigibW9udGhzIiksdj0oZigibW9udGhzU2hvcnQiKXx8eS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguc2xpY2UoMCwzKX0pKS5pbmRleE9mKGcpKzE7aWYodjwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPXYlMTJ8fHZ9XSxNTU1NOlthLGZ1bmN0aW9uKGcpe3ZhciB5PWYoIm1vbnRocyIpLmluZGV4T2YoZykrMTtpZih5PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9eSUxMnx8eX1dLFk6Wy9bKy1dP1xkKy8sdSgieWVhciIpXSxZWTpbbixmdW5jdGlvbihnKXt0aGlzLnllYXI9bChnKX1dLFlZWVk6Wy9cZHs0fS8sdSgieWVhciIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbShnKXt2YXIgeSx2O3k9Zyx2PXMmJnMuZm9ybWF0cztmb3IodmFyIHg9KGc9eS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKFMsQSxJKXt2YXIgRD1JJiZJLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEF8fHZbSV18fHRbSV18fHZbRF0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihrLFIsQyl7cmV0dXJuIFJ8fEMuc2xpY2UoMSl9KX0pKS5tYXRjaChlKSxiPXgubGVuZ3RoLHc9MDt3PGI7dys9MSl7dmFyIF89eFt3XSxUPXBbX10sRT1UJiZUWzBdLEw9VCYmVFsxXTt4W3ddPUw/e3JlZ2V4OkUscGFyc2VyOkx9Ol8ucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oUyl7Zm9yKHZhciBBPXt9LEk9MCxEPTA7STxiO0krPTEpe3ZhciBrPXhbSV07aWYodHlwZW9mIGs9PSJzdHJpbmciKUQrPWsubGVuZ3RoO2Vsc2V7dmFyIFI9ay5yZWdleCxDPWsucGFyc2VyLE89Uy5zbGljZShEKSxOPVIuZXhlYyhPKVswXTtDLmNhbGwoQSxOKSxTPVMucmVwbGFjZShOLCIiKX19cmV0dXJuIGZ1bmN0aW9uKFApe3ZhciBGPVAuYWZ0ZXJub29uO2lmKEYhPT12b2lkIDApe3ZhciBCPVAuaG91cnM7Rj9CPDEyJiYoUC5ob3Vycys9MTIpOkI9PT0xMiYmKFAuaG91cnM9MCksZGVsZXRlIFAuYWZ0ZXJub29ufX0oQSksQX19cmV0dXJuIG8obSwibCIpLGZ1bmN0aW9uKGcseSx2KXt2LnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsZyYmZy5wYXJzZVR3b0RpZ2l0WWVhciYmKGw9Zy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIHg9eS5wcm90b3R5cGUsYj14LnBhcnNlO3gucGFyc2U9ZnVuY3Rpb24odyl7dmFyIF89dy5kYXRlLFQ9dy51dGMsRT13LmFyZ3M7dGhpcy4kdT1UO3ZhciBMPUVbMV07aWYodHlwZW9mIEw9PSJzdHJpbmciKXt2YXIgUz1FWzJdPT09ITAsQT1FWzNdPT09ITAsST1TfHxBLEQ9RVsyXTtBJiYoRD1FWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFTJiZEJiYocz12LkxzW0RdKSx0aGlzLiRkPWZ1bmN0aW9uKE8sTixQLEYpe3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihOKT4tMSlyZXR1cm4gbmV3IERhdGUoKE49PT0iWCI/MWUzOjEpKk8pO3ZhciBCPW0oTikoTyksRz1CLnllYXIsej1CLm1vbnRoLFc9Qi5kYXksWj1CLmhvdXJzLGo9Qi5taW51dGVzLG9lPUIuc2Vjb25kcyxLPUIubWlsbGlzZWNvbmRzLGVlPUIuem9uZSxKPUIud2VlayxIPW5ldyBEYXRlLHE9V3x8KEd8fHo/MTpILmdldERhdGUoKSksUT1HfHxILmdldEZ1bGxZZWFyKCksYWU9MDtHJiYhenx8KGFlPXo+MD96LTE6SC5nZXRNb250aCgpKTt2YXIgdWUsY2U9Wnx8MCx0ZT1qfHwwLE5lPW9lfHwwLHNlPUt8fDA7cmV0dXJuIGVlP25ldyBEYXRlKERhdGUuVVRDKFEsYWUscSxjZSx0ZSxOZSxzZSs2MCplZS5vZmZzZXQqMWUzKSk6UD9uZXcgRGF0ZShEYXRlLlVUQyhRLGFlLHEsY2UsdGUsTmUsc2UpKToodWU9bmV3IERhdGUoUSxhZSxxLGNlLHRlLE5lLHNlKSxKJiYodWU9Rih1ZSkud2VlayhKKS50b0RhdGUoKSksdWUpfWNhdGNoe3JldHVybiBuZXcgRGF0ZSgiIil9fShfLEwsVCx2KSx0aGlzLmluaXQoKSxEJiZEIT09ITAmJih0aGlzLiRMPXRoaXMubG9jYWxlKEQpLiRMKSxJJiZfIT10aGlzLmZvcm1hdChMKSYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKSxzPXt9fWVsc2UgaWYoTCBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgaz1MLmxlbmd0aCxSPTE7Ujw9aztSKz0xKXtFWzFdPUxbUi0xXTt2YXIgQz12LmFwcGx5KHRoaXMsRSk7aWYoQy5pc1ZhbGlkKCkpe3RoaXMuJGQ9Qy4kZCx0aGlzLiRMPUMuJEwsdGhpcy5pbml0KCk7YnJlYWt9Uj09PWsmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSl9ZWxzZSBiLmNhbGwodGhpcyx3KX19fSl9KTt2YXIgJHVlPUVpKCgkSSxWSSk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mICRJPT0ib2JqZWN0IiYmdHlwZW9mIFZJPCJ1Ij9WSS5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fYWR2YW5jZWRGb3JtYXQ9ZSgpfSkoJEksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wcm90b3R5cGUsbj1yLmZvcm1hdDtyLmZvcm1hdD1mdW5jdGlvbihpKXt2YXIgYT10aGlzLHM9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBuLmJpbmQodGhpcykoaSk7dmFyIGw9dGhpcy4kdXRpbHMoKSx1PShpfHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oaCl7c3dpdGNoKGgpe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoYS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gcy5vcmRpbmFsKGEuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIGEud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiBhLmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIHMub3JkaW5hbChhLndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIGwucyhhLndlZWsoKSxoPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIGwucyhhLmlzb1dlZWsoKSxoPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIGwucyhTdHJpbmcoYS4kSD09PTA/MjQ6YS4kSCksaD09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKGEuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4gYS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIrYS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIrYS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIGh9fSk7cmV0dXJuIG4uYmluZCh0aGlzKSh1KX19fSl9KTtmdW5jdGlvbiBuaGUodCxlLHIpe2xldCBuPSEwO2Zvcig7bjspbj0hMSxyLmZvckVhY2goZnVuY3Rpb24oaSl7bGV0IGE9Il5cXHMqIitpKyJcXHMqJCIscz1uZXcgUmVnRXhwKGEpO3RbMF0ubWF0Y2gocykmJihlW2ldPSEwLHQuc2hpZnQoMSksbj0hMCl9KX12YXIgSHVlLHhvLFd1ZSxZdWUscXVlLFZ1ZSxxYyxZSSxxSSxYSSxTeCxDeCxqSSxLSSx4RSxZZyxRSSxYdWUsWkksQXgsSkksZU8sYkUsVUksWkdlLEpHZSxlJGUsdCRlLHIkZSxuJGUsaSRlLGEkZSxzJGUsbyRlLGwkZSxjJGUsdSRlLGgkZSxmJGUsZCRlLHAkZSxtJGUsZyRlLHkkZSx2JGUseCRlLGIkZSxqdWUsdyRlLFQkZSxrJGUsS3VlLEUkZSxISSxRdWUsWnVlLHlFLFdnLFMkZSxDJGUsV0ksdkUsWWksSnVlLEEkZSxOMCxfJGUsVXVlLEwkZSxlaGUsRCRlLHRoZSxOJGUsUiRlLHJoZSxpaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdWU9SmkoUXAoKSwxKSx4bz1KaShWYigpLDEpLFd1ZT1KaSh6dWUoKSwxKSxZdWU9SmkoR3VlKCksMSkscXVlPUppKCR1ZSgpLDEpO3V0KCk7VnQoKTtocigpO0FpKCk7eG8uZGVmYXVsdC5leHRlbmQoV3VlLmRlZmF1bHQpO3hvLmRlZmF1bHQuZXh0ZW5kKFl1ZS5kZWZhdWx0KTt4by5kZWZhdWx0LmV4dGVuZChxdWUuZGVmYXVsdCk7VnVlPXtmcmlkYXk6NSxzYXR1cmRheTo2fSxxYz0iIixZST0iIixYST0iIixTeD1bXSxDeD1bXSxqST1uZXcgTWFwLEtJPVtdLHhFPVtdLFlnPSIiLFFJPSIiLFh1ZT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl0sWkk9W10sQXg9ITEsSkk9ITEsZU89InN1bmRheSIsYkU9InNhdHVyZGF5IixVST0wLFpHZT1vKGZ1bmN0aW9uKCl7S0k9W10seEU9W10sWWc9IiIsWkk9W10seUU9MCxXST12b2lkIDAsdkU9dm9pZCAwLFlpPVtdLHFjPSIiLFlJPSIiLFFJPSIiLHFJPXZvaWQgMCxYST0iIixTeD1bXSxDeD1bXSxBeD0hMSxKST0hMSxVST0wLGpJPW5ldyBNYXAsTHIoKSxlTz0ic3VuZGF5IixiRT0ic2F0dXJkYXkifSwiY2xlYXIiKSxKR2U9byhmdW5jdGlvbih0KXtZST10fSwic2V0QXhpc0Zvcm1hdCIpLGUkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFlJfSwiZ2V0QXhpc0Zvcm1hdCIpLHQkZT1vKGZ1bmN0aW9uKHQpe3FJPXR9LCJzZXRUaWNrSW50ZXJ2YWwiKSxyJGU9byhmdW5jdGlvbigpe3JldHVybiBxSX0sImdldFRpY2tJbnRlcnZhbCIpLG4kZT1vKGZ1bmN0aW9uKHQpe1hJPXR9LCJzZXRUb2RheU1hcmtlciIpLGkkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFhJfSwiZ2V0VG9kYXlNYXJrZXIiKSxhJGU9byhmdW5jdGlvbih0KXtxYz10fSwic2V0RGF0ZUZvcm1hdCIpLHMkZT1vKGZ1bmN0aW9uKCl7QXg9ITB9LCJlbmFibGVJbmNsdXNpdmVFbmREYXRlcyIpLG8kZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEF4fSwiZW5kRGF0ZXNBcmVJbmNsdXNpdmUiKSxsJGU9byhmdW5jdGlvbigpe0pJPSEwfSwiZW5hYmxlVG9wQXhpcyIpLGMkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEpJfSwidG9wQXhpc0VuYWJsZWQiKSx1JGU9byhmdW5jdGlvbih0KXtRST10fSwic2V0RGlzcGxheU1vZGUiKSxoJGU9byhmdW5jdGlvbigpe3JldHVybiBRSX0sImdldERpc3BsYXlNb2RlIiksZiRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gcWN9LCJnZXREYXRlRm9ybWF0IiksZCRlPW8oZnVuY3Rpb24odCl7U3g9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sInNldEluY2x1ZGVzIikscCRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gU3h9LCJnZXRJbmNsdWRlcyIpLG0kZT1vKGZ1bmN0aW9uKHQpe0N4PXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LCJzZXRFeGNsdWRlcyIpLGckZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEN4fSwiZ2V0RXhjbHVkZXMiKSx5JGU9byhmdW5jdGlvbigpe3JldHVybiBqSX0sImdldExpbmtzIiksdiRlPW8oZnVuY3Rpb24odCl7WWc9dCxLSS5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHgkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEtJfSwiZ2V0U2VjdGlvbnMiKSxiJGU9byhmdW5jdGlvbigpe2xldCB0PVV1ZSgpLGU9MTAscj0wO2Zvcig7IXQmJnI8ZTspdD1VdWUoKSxyKys7cmV0dXJuIHhFPVlpLHhFfSwiZ2V0VGFza3MiKSxqdWU9byhmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5pbmNsdWRlcyh0LmZvcm1hdChlLnRyaW0oKSkpPyExOnIuaW5jbHVkZXMoIndlZWtlbmRzIikmJih0Lmlzb1dlZWtkYXkoKT09PVZ1ZVtiRV18fHQuaXNvV2Vla2RheSgpPT09VnVlW2JFXSsxKXx8ci5pbmNsdWRlcyh0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnIuaW5jbHVkZXModC5mb3JtYXQoZS50cmltKCkpKX0sImlzSW52YWxpZERhdGUiKSx3JGU9byhmdW5jdGlvbih0KXtlTz10fSwic2V0V2Vla2RheSIpLFQkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGVPfSwiZ2V0V2Vla2RheSIpLGskZT1vKGZ1bmN0aW9uKHQpe2JFPXR9LCJzZXRXZWVrZW5kIiksS3VlPW8oZnVuY3Rpb24odCxlLHIsbil7aWYoIXIubGVuZ3RofHx0Lm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBpO3Quc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9pPSgwLHhvLmRlZmF1bHQpKHQuc3RhcnRUaW1lKTppPSgwLHhvLmRlZmF1bHQpKHQuc3RhcnRUaW1lLGUsITApLGk9aS5hZGQoMSwiZCIpO2xldCBhO3QuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/YT0oMCx4by5kZWZhdWx0KSh0LmVuZFRpbWUpOmE9KDAseG8uZGVmYXVsdCkodC5lbmRUaW1lLGUsITApO2xldFtzLGxdPUUkZShpLGEsZSxyLG4pO3QuZW5kVGltZT1zLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1sfSwiY2hlY2tUYXNrRGF0ZXMiKSxFJGU9byhmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPSExLHM9bnVsbDtmb3IoO3Q8PWU7KWF8fChzPWUudG9EYXRlKCkpLGE9anVlKHQscixuLGkpLGEmJihlPWUuYWRkKDEsImQiKSksdD10LmFkZCgxLCJkIik7cmV0dXJuW2Usc119LCJmaXhUYXNrRGF0ZXMiKSxIST1vKGZ1bmN0aW9uKHQsZSxyKXtyPXIudHJpbSgpO2xldCBpPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyhyKTtpZihpIT09bnVsbCl7bGV0IHM9bnVsbDtmb3IobGV0IHUgb2YgaS5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBoPU4wKHUpO2ghPT12b2lkIDAmJighc3x8aC5lbmRUaW1lPnMuZW5kVGltZSkmJihzPWgpfWlmKHMpcmV0dXJuIHMuZW5kVGltZTtsZXQgbD1uZXcgRGF0ZTtyZXR1cm4gbC5zZXRIb3VycygwLDAsMCwwKSxsfWxldCBhPSgwLHhvLmRlZmF1bHQpKHIsZS50cmltKCksITApO2lmKGEuaXNWYWxpZCgpKXJldHVybiBhLnRvRGF0ZSgpO3tZLmRlYnVnKCJJbnZhbGlkIGRhdGU6IityKSxZLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpO2xldCBzPW5ldyBEYXRlKHIpO2lmKHM9PT12b2lkIDB8fGlzTmFOKHMuZ2V0VGltZSgpKXx8cy5nZXRGdWxsWWVhcigpPC0xZTR8fHMuZ2V0RnVsbFllYXIoKT4xZTQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGU6IityKTtyZXR1cm4gc319LCJnZXRTdGFydERhdGUiKSxRdWU9byhmdW5jdGlvbih0KXtsZXQgZT0vXihcZCsoPzpcLlxkKyk/KShbTWRobXN3eV18bXMpJC8uZXhlYyh0LnRyaW0oKSk7cmV0dXJuIGUhPT1udWxsP1tOdW1iZXIucGFyc2VGbG9hdChlWzFdKSxlWzJdXTpbTmFOLCJtcyJdfSwicGFyc2VEdXJhdGlvbiIpLFp1ZT1vKGZ1bmN0aW9uKHQsZSxyLG49ITEpe3I9ci50cmltKCk7bGV0IGE9L151bnRpbFxzKyg/PGlkcz5bXGRcdy0gXSspLy5leGVjKHIpO2lmKGEhPT1udWxsKXtsZXQgZj1udWxsO2ZvcihsZXQgcCBvZiBhLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IG09TjAocCk7bSE9PXZvaWQgMCYmKCFmfHxtLnN0YXJ0VGltZTxmLnN0YXJ0VGltZSkmJihmPW0pfWlmKGYpcmV0dXJuIGYuc3RhcnRUaW1lO2xldCBkPW5ldyBEYXRlO3JldHVybiBkLnNldEhvdXJzKDAsMCwwLDApLGR9bGV0IHM9KDAseG8uZGVmYXVsdCkocixlLnRyaW0oKSwhMCk7aWYocy5pc1ZhbGlkKCkpcmV0dXJuIG4mJihzPXMuYWRkKDEsImQiKSkscy50b0RhdGUoKTtsZXQgbD0oMCx4by5kZWZhdWx0KSh0KSxbdSxoXT1RdWUocik7aWYoIU51bWJlci5pc05hTih1KSl7bGV0IGY9bC5hZGQodSxoKTtmLmlzVmFsaWQoKSYmKGw9Zil9cmV0dXJuIGwudG9EYXRlKCl9LCJnZXRFbmREYXRlIikseUU9MCxXZz1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwPyh5RT15RSsxLCJ0YXNrIit5RSk6dH0sInBhcnNlSWQiKSxTJGU9byhmdW5jdGlvbih0LGUpe2xldCByO2Uuc3Vic3RyKDAsMSk9PT0iOiI/cj1lLnN1YnN0cigxLGUubGVuZ3RoKTpyPWU7bGV0IG49ci5zcGxpdCgiLCIpLGk9e307bmhlKG4saSxYdWUpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKW5bc109bltzXS50cmltKCk7bGV0IGE9IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aS5pZD1XZygpLGkuc3RhcnRUaW1lPXQuZW5kVGltZSxhPW5bMF07YnJlYWs7Y2FzZSAyOmkuaWQ9V2coKSxpLnN0YXJ0VGltZT1ISSh2b2lkIDAscWMsblswXSksYT1uWzFdO2JyZWFrO2Nhc2UgMzppLmlkPVdnKG5bMF0pLGkuc3RhcnRUaW1lPUhJKHZvaWQgMCxxYyxuWzFdKSxhPW5bMl07YnJlYWs7ZGVmYXVsdDp9cmV0dXJuIGEmJihpLmVuZFRpbWU9WnVlKGkuc3RhcnRUaW1lLHFjLGEsQXgpLGkubWFudWFsRW5kVGltZT0oMCx4by5kZWZhdWx0KShhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLEt1ZShpLHFjLEN4LFN4KSksaX0sImNvbXBpbGVEYXRhIiksQyRlPW8oZnVuY3Rpb24odCxlKXtsZXQgcjtlLnN1YnN0cigwLDEpPT09IjoiP3I9ZS5zdWJzdHIoMSxlLmxlbmd0aCk6cj1lO2xldCBuPXIuc3BsaXQoIiwiKSxpPXt9O25oZShuLGksWHVlKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmkuaWQ9V2coKSxpLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LGkuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6aS5pZD1XZygpLGkuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxpLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOmkuaWQ9V2coblswXSksaS5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LGkuZW5kVGltZT17ZGF0YTpuWzJdfTticmVhaztkZWZhdWx0On1yZXR1cm4gaX0sInBhcnNlRGF0YSIpLFlpPVtdLEp1ZT17fSxBJGU9byhmdW5jdGlvbih0LGUpe2xldCByPXtzZWN0aW9uOllnLHR5cGU6WWcscHJvY2Vzc2VkOiExLG1hbnVhbEVuZFRpbWU6ITEscmVuZGVyRW5kVGltZTpudWxsLHJhdzp7ZGF0YTplfSx0YXNrOnQsY2xhc3NlczpbXX0sbj1DJGUodkUsZSk7ci5yYXcuc3RhcnRUaW1lPW4uc3RhcnRUaW1lLHIucmF3LmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLnByZXZUYXNrSWQ9dkUsci5hY3RpdmU9bi5hY3RpdmUsci5kb25lPW4uZG9uZSxyLmNyaXQ9bi5jcml0LHIubWlsZXN0b25lPW4ubWlsZXN0b25lLHIub3JkZXI9VUksVUkrKztsZXQgaT1ZaS5wdXNoKHIpO3ZFPXIuaWQsSnVlW3IuaWRdPWktMX0sImFkZFRhc2siKSxOMD1vKGZ1bmN0aW9uKHQpe2xldCBlPUp1ZVt0XTtyZXR1cm4gWWlbZV19LCJmaW5kVGFza0J5SWQiKSxfJGU9byhmdW5jdGlvbih0LGUpe2xldCByPXtzZWN0aW9uOllnLHR5cGU6WWcsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX0sbj1TJGUoV0ksZSk7ci5zdGFydFRpbWU9bi5zdGFydFRpbWUsci5lbmRUaW1lPW4uZW5kVGltZSxyLmlkPW4uaWQsci5hY3RpdmU9bi5hY3RpdmUsci5kb25lPW4uZG9uZSxyLmNyaXQ9bi5jcml0LHIubWlsZXN0b25lPW4ubWlsZXN0b25lLFdJPXIseEUucHVzaChyKX0sImFkZFRhc2tPcmciKSxVdWU9byhmdW5jdGlvbigpe2xldCB0PW8oZnVuY3Rpb24ocil7bGV0IG49WWlbcl0saT0iIjtzd2l0Y2goWWlbcl0ucmF3LnN0YXJ0VGltZS50eXBlKXtjYXNlInByZXZUYXNrRW5kIjp7bGV0IGE9TjAobi5wcmV2VGFza0lkKTtuLnN0YXJ0VGltZT1hLmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOmk9SEkodm9pZCAwLHFjLFlpW3JdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSxpJiYoWWlbcl0uc3RhcnRUaW1lPWkpO2JyZWFrfXJldHVybiBZaVtyXS5zdGFydFRpbWUmJihZaVtyXS5lbmRUaW1lPVp1ZShZaVtyXS5zdGFydFRpbWUscWMsWWlbcl0ucmF3LmVuZFRpbWUuZGF0YSxBeCksWWlbcl0uZW5kVGltZSYmKFlpW3JdLnByb2Nlc3NlZD0hMCxZaVtyXS5tYW51YWxFbmRUaW1lPSgwLHhvLmRlZmF1bHQpKFlpW3JdLnJhdy5lbmRUaW1lLmRhdGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksS3VlKFlpW3JdLHFjLEN4LFN4KSkpLFlpW3JdLnByb2Nlc3NlZH0sImNvbXBpbGVUYXNrIiksZT0hMDtmb3IobGV0W3Isbl1vZiBZaS5lbnRyaWVzKCkpdChyKSxlPWUmJm4ucHJvY2Vzc2VkO3JldHVybiBlfSwiY29tcGlsZVRhc2tzIiksTCRlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lO3BlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSImJihyPSgwLEh1ZS5zYW5pdGl6ZVVybCkoZSkpLHQuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe04wKG4pIT09dm9pZCAwJiYodGhlKG4sKCk9Pnt3aW5kb3cub3BlbihyLCJfc2VsZiIpfSksakkuc2V0KG4scikpfSksZWhlKHQsImNsaWNrYWJsZSIpfSwic2V0TGluayIpLGVoZT1vKGZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49TjAocik7biE9PXZvaWQgMCYmbi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENsYXNzIiksRCRlPW8oZnVuY3Rpb24odCxlLHIpe2lmKHBlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGU9PT12b2lkIDApcmV0dXJuO2xldCBuPVtdO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7bj1yLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKXtsZXQgcz1uW2FdLnRyaW0oKTtzLnN0YXJ0c1dpdGgoJyInKSYmcy5lbmRzV2l0aCgnIicpJiYocz1zLnN1YnN0cigxLHMubGVuZ3RoLTIpKSxuW2FdPXN9fW4ubGVuZ3RoPT09MCYmbi5wdXNoKHQpLE4wKHQpIT09dm9pZCAwJiZ0aGUodCwoKT0+e1V0LnJ1bkZ1bmMoZSwuLi5uKX0pfSwic2V0Q2xpY2tGdW4iKSx0aGU9byhmdW5jdGlvbih0LGUpe1pJLnB1c2goZnVuY3Rpb24oKXtsZXQgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7dH0iXWApO3IhPT1udWxsJiZyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2UoKX0pfSxmdW5jdGlvbigpe2xldCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHt0fS10ZXh0Il1gKTtyIT09bnVsbCYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtlKCl9KX0pfSwicHVzaEZ1biIpLE4kZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtEJGUobixlLHIpfSksZWhlKHQsImNsaWNrYWJsZSIpfSwic2V0Q2xpY2tFdmVudCIpLFIkZT1vKGZ1bmN0aW9uKHQpe1pJLmZvckVhY2goZnVuY3Rpb24oZSl7ZSh0KX0pfSwiYmluZEZ1bmN0aW9ucyIpLHJoZT17Z2V0Q29uZmlnOm8oKCk9PnBlKCkuZ2FudHQsImdldENvbmZpZyIpLGNsZWFyOlpHZSxzZXREYXRlRm9ybWF0OmEkZSxnZXREYXRlRm9ybWF0OmYkZSxlbmFibGVJbmNsdXNpdmVFbmREYXRlczpzJGUsZW5kRGF0ZXNBcmVJbmNsdXNpdmU6byRlLGVuYWJsZVRvcEF4aXM6bCRlLHRvcEF4aXNFbmFibGVkOmMkZSxzZXRBeGlzRm9ybWF0OkpHZSxnZXRBeGlzRm9ybWF0OmUkZSxzZXRUaWNrSW50ZXJ2YWw6dCRlLGdldFRpY2tJbnRlcnZhbDpyJGUsc2V0VG9kYXlNYXJrZXI6biRlLGdldFRvZGF5TWFya2VyOmkkZSxzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldERpc3BsYXlNb2RlOnUkZSxnZXREaXNwbGF5TW9kZTpoJGUsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkU2VjdGlvbjp2JGUsZ2V0U2VjdGlvbnM6eCRlLGdldFRhc2tzOmIkZSxhZGRUYXNrOkEkZSxmaW5kVGFza0J5SWQ6TjAsYWRkVGFza09yZzpfJGUsc2V0SW5jbHVkZXM6ZCRlLGdldEluY2x1ZGVzOnAkZSxzZXRFeGNsdWRlczptJGUsZ2V0RXhjbHVkZXM6ZyRlLHNldENsaWNrRXZlbnQ6TiRlLHNldExpbms6TCRlLGdldExpbmtzOnkkZSxiaW5kRnVuY3Rpb25zOlIkZSxwYXJzZUR1cmF0aW9uOlF1ZSxpc0ludmFsaWREYXRlOmp1ZSxzZXRXZWVrZGF5OnckZSxnZXRXZWVrZGF5OlQkZSxzZXRXZWVrZW5kOmskZX07byhuaGUsImdldFRhc2tUYWdzIil9KTt2YXIgd0UsTSRlLGFoZSxJJGUsSnUsTyRlLHNoZSxvaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3RT1KaShWYigpLDEpO3V0KCk7cHIoKTtmcigpO1Z0KCk7YWkoKTtNJGU9byhmdW5jdGlvbigpe1kuZGVidWcoIlNvbWV0aGluZyBpcyBjYWxsaW5nLCBzZXRDb25mLCByZW1vdmUgdGhlIGNhbGwiKX0sInNldENvbmYiKSxhaGU9e21vbmRheTpOaCx0dWVzZGF5OlIzLHdlZG5lc2RheTpNMyx0aHVyc2RheTp4YyxmcmlkYXk6STMsc2F0dXJkYXk6TzMsc3VuZGF5OkFsfSxJJGU9bygodCxlKT0+e2xldCByPVsuLi50XS5tYXAoKCk9Pi0xLzApLG49Wy4uLnRdLnNvcnQoKGEscyk9PmEuc3RhcnRUaW1lLXMuc3RhcnRUaW1lfHxhLm9yZGVyLXMub3JkZXIpLGk9MDtmb3IobGV0IGEgb2Ygbilmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylpZihhLnN0YXJ0VGltZT49cltzXSl7cltzXT1hLmVuZFRpbWUsYS5vcmRlcj1zK2Uscz5pJiYoaT1zKTticmVha31yZXR1cm4gaX0sImdldE1heEludGVyc2VjdGlvbnMiKSxPJGU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1wZSgpLmdhbnR0LGE9cGUoKS5zZWN1cml0eUxldmVsLHM7YT09PSJzYW5kYm94IiYmKHM9VmUoIiNpIitlKSk7bGV0IGw9YT09PSJzYW5kYm94Ij9WZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksdT1hPT09InNhbmRib3giP3Mubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsaD11LmdldEVsZW1lbnRCeUlkKGUpO0p1PWgucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxKdT09PXZvaWQgMCYmKEp1PTEyMDApLGkudXNlV2lkdGghPT12b2lkIDAmJihKdT1pLnVzZVdpZHRoKTtsZXQgZj1uLmRiLmdldFRhc2tzKCksZD1bXTtmb3IobGV0IFMgb2YgZilkLnB1c2goUy50eXBlKTtkPUwoZCk7bGV0IHA9e30sbT0yKmkudG9wUGFkZGluZztpZihuLmRiLmdldERpc3BsYXlNb2RlKCk9PT0iY29tcGFjdCJ8fGkuZGlzcGxheU1vZGU9PT0iY29tcGFjdCIpe2xldCBTPXt9O2ZvcihsZXQgSSBvZiBmKVNbSS5zZWN0aW9uXT09PXZvaWQgMD9TW0kuc2VjdGlvbl09W0ldOlNbSS5zZWN0aW9uXS5wdXNoKEkpO2xldCBBPTA7Zm9yKGxldCBJIG9mIE9iamVjdC5rZXlzKFMpKXtsZXQgRD1JJGUoU1tJXSxBKSsxO0ErPUQsbSs9RCooaS5iYXJIZWlnaHQraS5iYXJHYXApLHBbSV09RH19ZWxzZXttKz1mLmxlbmd0aCooaS5iYXJIZWlnaHQraS5iYXJHYXApO2ZvcihsZXQgUyBvZiBkKXBbU109Zi5maWx0ZXIoQT0+QS50eXBlPT09UykubGVuZ3RofWguc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrSnUrIiAiK20pO2xldCBnPWwuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApLHk9RjMoKS5kb21haW4oW1U0KGYsZnVuY3Rpb24oUyl7cmV0dXJuIFMuc3RhcnRUaW1lfSksVjQoZixmdW5jdGlvbihTKXtyZXR1cm4gUy5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLEp1LWkubGVmdFBhZGRpbmctaS5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiB2KFMsQSl7bGV0IEk9Uy5zdGFydFRpbWUsRD1BLnN0YXJ0VGltZSxrPTA7cmV0dXJuIEk+RD9rPTE6STxEJiYoaz0tMSksa31vKHYsInRhc2tDb21wYXJlIiksZi5zb3J0KHYpLHgoZixKdSxtKSxacihnLG0sSnUsaS51c2VNYXhXaWR0aCksZy5hcHBlbmQoInRleHQiKS50ZXh0KG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLmF0dHIoIngiLEp1LzIpLmF0dHIoInkiLGkudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iik7ZnVuY3Rpb24geChTLEEsSSl7bGV0IEQ9aS5iYXJIZWlnaHQsaz1EK2kuYmFyR2FwLFI9aS50b3BQYWRkaW5nLEM9aS5sZWZ0UGFkZGluZyxPPUNsKCkuZG9tYWluKFswLGQubGVuZ3RoXSkucmFuZ2UoWyIjMDBCOUZBIiwiI0Y5NTAwMiJdKS5pbnRlcnBvbGF0ZSh6QSk7dyhrLFIsQyxBLEksUyxuLmRiLmdldEV4Y2x1ZGVzKCksbi5kYi5nZXRJbmNsdWRlcygpKSxfKEMsUixBLEkpLGIoUyxrLFIsQyxELE8sQSxJKSxUKGssUixDLEQsTyksRShDLFIsQSxJKX1vKHgsIm1ha2VHYW50dCIpO2Z1bmN0aW9uIGIoUyxBLEksRCxrLFIsQyl7bGV0IE49Wy4uLm5ldyBTZXQoUy5tYXAoRz0+Ry5vcmRlcikpXS5tYXAoRz0+Uy5maW5kKHo9Pnoub3JkZXI9PT1HKSk7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKE4pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24oRyx6KXtyZXR1cm4gej1HLm9yZGVyLHoqQStJLTJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gQy1pLnJpZ2h0UGFkZGluZy8yfSkuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oRyl7Zm9yKGxldFt6LFddb2YgZC5lbnRyaWVzKCkpaWYoRy50eXBlPT09VylyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIit6JWkubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KTtsZXQgUD1nLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoUykuZW50ZXIoKSxGPW4uZGIuZ2V0TGlua3MoKTtpZihQLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihHKXtyZXR1cm4gRy5pZH0pLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMykuYXR0cigieCIsZnVuY3Rpb24oRyl7cmV0dXJuIEcubWlsZXN0b25lP3koRy5zdGFydFRpbWUpK0QrLjUqKHkoRy5lbmRUaW1lKS15KEcuc3RhcnRUaW1lKSktLjUqazp5KEcuc3RhcnRUaW1lKStEfSkuYXR0cigieSIsZnVuY3Rpb24oRyx6KXtyZXR1cm4gej1HLm9yZGVyLHoqQStJfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKEcpe3JldHVybiBHLm1pbGVzdG9uZT9rOnkoRy5yZW5kZXJFbmRUaW1lfHxHLmVuZFRpbWUpLXkoRy5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0IixrKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihHLHope3JldHVybiB6PUcub3JkZXIsKHkoRy5zdGFydFRpbWUpK0QrLjUqKHkoRy5lbmRUaW1lKS15KEcuc3RhcnRUaW1lKSkpLnRvU3RyaW5nKCkrInB4ICIrKHoqQStJKy41KmspLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIixmdW5jdGlvbihHKXtsZXQgej0idGFzayIsVz0iIjtHLmNsYXNzZXMubGVuZ3RoPjAmJihXPUcuY2xhc3Nlcy5qb2luKCIgIikpO2xldCBaPTA7Zm9yKGxldFtvZSxLXW9mIGQuZW50cmllcygpKUcudHlwZT09PUsmJihaPW9lJWkubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGo9IiI7cmV0dXJuIEcuYWN0aXZlP0cuY3JpdD9qKz0iIGFjdGl2ZUNyaXQiOmo9IiBhY3RpdmUiOkcuZG9uZT9HLmNyaXQ/aj0iIGRvbmVDcml0IjpqPSIgZG9uZSI6Ry5jcml0JiYoais9IiBjcml0Iiksai5sZW5ndGg9PT0wJiYoaj0iIHRhc2siKSxHLm1pbGVzdG9uZSYmKGo9IiBtaWxlc3RvbmUgIitqKSxqKz1aLGorPSIgIitXLHoran0pLFAuYXBwZW5kKCJ0ZXh0IikuYXR0cigiaWQiLGZ1bmN0aW9uKEcpe3JldHVybiBHLmlkKyItdGV4dCJ9KS50ZXh0KGZ1bmN0aW9uKEcpe3JldHVybiBHLnRhc2t9KS5hdHRyKCJmb250LXNpemUiLGkuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKEcpe2xldCB6PXkoRy5zdGFydFRpbWUpLFc9eShHLnJlbmRlckVuZFRpbWV8fEcuZW5kVGltZSk7Ry5taWxlc3RvbmUmJih6Kz0uNSooeShHLmVuZFRpbWUpLXkoRy5zdGFydFRpbWUpKS0uNSprKSxHLm1pbGVzdG9uZSYmKFc9eitrKTtsZXQgWj10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gWj5XLXo/VytaKzEuNSppLmxlZnRQYWRkaW5nPkM/eitELTU6VytEKzU6KFcteikvMit6K0R9KS5hdHRyKCJ5IixmdW5jdGlvbihHLHope3JldHVybiB6PUcub3JkZXIseipBK2kuYmFySGVpZ2h0LzIrKGkuZm9udFNpemUvMi0yKStJfSkuYXR0cigidGV4dC1oZWlnaHQiLGspLmF0dHIoImNsYXNzIixmdW5jdGlvbihHKXtsZXQgej15KEcuc3RhcnRUaW1lKSxXPXkoRy5lbmRUaW1lKTtHLm1pbGVzdG9uZSYmKFc9eitrKTtsZXQgWj10aGlzLmdldEJCb3goKS53aWR0aCxqPSIiO0cuY2xhc3Nlcy5sZW5ndGg+MCYmKGo9Ry5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IG9lPTA7Zm9yKGxldFtlZSxKXW9mIGQuZW50cmllcygpKUcudHlwZT09PUomJihvZT1lZSVpLm51bWJlclNlY3Rpb25TdHlsZXMpO2xldCBLPSIiO3JldHVybiBHLmFjdGl2ZSYmKEcuY3JpdD9LPSJhY3RpdmVDcml0VGV4dCIrb2U6Sz0iYWN0aXZlVGV4dCIrb2UpLEcuZG9uZT9HLmNyaXQ/Sz1LKyIgZG9uZUNyaXRUZXh0IitvZTpLPUsrIiBkb25lVGV4dCIrb2U6Ry5jcml0JiYoSz1LKyIgY3JpdFRleHQiK29lKSxHLm1pbGVzdG9uZSYmKEsrPSIgbWlsZXN0b25lVGV4dCIpLFo+Vy16P1crWisxLjUqaS5sZWZ0UGFkZGluZz5DP2orIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrb2UrIiAiK0s6aisiIHRhc2tUZXh0T3V0c2lkZVJpZ2h0IHRhc2tUZXh0T3V0c2lkZSIrb2UrIiAiK0srIiB3aWR0aC0iK1o6aisiIHRhc2tUZXh0IHRhc2tUZXh0IitvZSsiICIrSysiIHdpZHRoLSIrWn0pLHBlKCkuc2VjdXJpdHlMZXZlbD09PSJzYW5kYm94Iil7bGV0IEc7Rz1WZSgiI2kiK2UpO2xldCB6PUcubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ7UC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIEYuaGFzKFcuaWQpfSkuZWFjaChmdW5jdGlvbihXKXt2YXIgWj16LnF1ZXJ5U2VsZWN0b3IoIiMiK1cuaWQpLGo9ei5xdWVyeVNlbGVjdG9yKCIjIitXLmlkKyItdGV4dCIpO2xldCBvZT1aLnBhcmVudE5vZGU7dmFyIEs9ei5jcmVhdGVFbGVtZW50KCJhIik7Sy5zZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiLEYuZ2V0KFcuaWQpKSxLLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiX3RvcCIpLG9lLmFwcGVuZENoaWxkKEspLEsuYXBwZW5kQ2hpbGQoWiksSy5hcHBlbmRDaGlsZChqKX0pfX1vKGIsImRyYXdSZWN0cyIpO2Z1bmN0aW9uIHcoUyxBLEksRCxrLFIsQyxPKXtpZihDLmxlbmd0aD09PTAmJk8ubGVuZ3RoPT09MClyZXR1cm47bGV0IE4sUDtmb3IobGV0e3N0YXJ0VGltZTpaLGVuZFRpbWU6an1vZiBSKShOPT09dm9pZCAwfHxaPE4pJiYoTj1aKSwoUD09PXZvaWQgMHx8aj5QKSYmKFA9aik7aWYoIU58fCFQKXJldHVybjtpZigoMCx3RS5kZWZhdWx0KShQKS5kaWZmKCgwLHdFLmRlZmF1bHQpKE4pLCJ5ZWFyIik+NSl7WS53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59bGV0IEY9bi5kYi5nZXREYXRlRm9ybWF0KCksQj1bXSxHPW51bGwsej0oMCx3RS5kZWZhdWx0KShOKTtmb3IoO3oudmFsdWVPZigpPD1QOyluLmRiLmlzSW52YWxpZERhdGUoeixGLEMsTyk/Rz9HLmVuZD16Okc9e3N0YXJ0OnosZW5kOnp9OkcmJihCLnB1c2goRyksRz1udWxsKSx6PXouYWRkKDEsImQiKTtnLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoQikuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsZnVuY3Rpb24oWil7cmV0dXJuImV4Y2x1ZGUtIitaLnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkuYXR0cigieCIsZnVuY3Rpb24oWil7cmV0dXJuIHkoWi5zdGFydCkrSX0pLmF0dHIoInkiLGkuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIixmdW5jdGlvbihaKXtsZXQgaj1aLmVuZC5hZGQoMSwiZGF5Iik7cmV0dXJuIHkoaikteShaLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIsay1BLWkuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKFosail7cmV0dXJuKHkoWi5zdGFydCkrSSsuNSooeShaLmVuZCkteShaLnN0YXJ0KSkpLnRvU3RyaW5nKCkrInB4ICIrKGoqUysuNSprKS50b1N0cmluZygpKyJweCJ9KS5hdHRyKCJjbGFzcyIsImV4Y2x1ZGUtcmFuZ2UiKX1vKHcsImRyYXdFeGNsdWRlRGF5cyIpO2Z1bmN0aW9uIF8oUyxBLEksRCl7bGV0IGs9YjcoeSkudGlja1NpemUoLUQrQStpLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KGtkKG4uZGIuZ2V0QXhpc0Zvcm1hdCgpfHxpLmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKSxDPS9eKFsxLTldXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC8uZXhlYyhuLmRiLmdldFRpY2tJbnRlcnZhbCgpfHxpLnRpY2tJbnRlcnZhbCk7aWYoQyE9PW51bGwpe2xldCBPPUNbMV0sTj1DWzJdLFA9bi5kYi5nZXRXZWVrZGF5KCl8fGkud2Vla2RheTtzd2l0Y2goTil7Y2FzZSJtaWxsaXNlY29uZCI6ay50aWNrcyh5Yy5ldmVyeShPKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOmsudGlja3ModG8uZXZlcnkoTykpO2JyZWFrO2Nhc2UibWludXRlIjprLnRpY2tzKFN1LmV2ZXJ5KE8pKTticmVhaztjYXNlImhvdXIiOmsudGlja3MoQ3UuZXZlcnkoTykpO2JyZWFrO2Nhc2UiZGF5IjprLnRpY2tzKE9vLmV2ZXJ5KE8pKTticmVhaztjYXNlIndlZWsiOmsudGlja3MoYWhlW1BdLmV2ZXJ5KE8pKTticmVhaztjYXNlIm1vbnRoIjprLnRpY2tzKEF1LmV2ZXJ5KE8pKTticmVha319aWYoZy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitTKyIsICIrKEQtNTApKyIpIikuY2FsbChrKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLG4uZGIudG9wQXhpc0VuYWJsZWQoKXx8aS50b3BBeGlzKXtsZXQgTz14Nyh5KS50aWNrU2l6ZSgtRCtBK2kuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoa2Qobi5kYi5nZXRBeGlzRm9ybWF0KCl8fGkuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKEMhPT1udWxsKXtsZXQgTj1DWzFdLFA9Q1syXSxGPW4uZGIuZ2V0V2Vla2RheSgpfHxpLndlZWtkYXk7c3dpdGNoKFApe2Nhc2UibWlsbGlzZWNvbmQiOk8udGlja3MoeWMuZXZlcnkoTikpO2JyZWFrO2Nhc2Uic2Vjb25kIjpPLnRpY2tzKHRvLmV2ZXJ5KE4pKTticmVhaztjYXNlIm1pbnV0ZSI6Ty50aWNrcyhTdS5ldmVyeShOKSk7YnJlYWs7Y2FzZSJob3VyIjpPLnRpY2tzKEN1LmV2ZXJ5KE4pKTticmVhaztjYXNlImRheSI6Ty50aWNrcyhPby5ldmVyeShOKSk7YnJlYWs7Y2FzZSJ3ZWVrIjpPLnRpY2tzKGFoZVtGXS5ldmVyeShOKSk7YnJlYWs7Y2FzZSJtb250aCI6Ty50aWNrcyhBdS5ldmVyeShOKSk7YnJlYWt9fWcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUysiLCAiK0ErIikiKS5jYWxsKE8pLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX1vKF8sIm1ha2VHcmlkIik7ZnVuY3Rpb24gVChTLEEpe2xldCBJPTAsRD1PYmplY3Qua2V5cyhwKS5tYXAoaz0+W2sscFtrXV0pO2cuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShEKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihrKXtsZXQgUj1rWzBdLnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KSxDPS0oUi5sZW5ndGgtMSkvMixPPXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtPLnNldEF0dHJpYnV0ZSgiZHkiLEMrImVtIik7Zm9yKGxldFtOLFBdb2YgUi5lbnRyaWVzKCkpe2xldCBGPXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7Ri5zZXRBdHRyaWJ1dGUoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxGLnNldEF0dHJpYnV0ZSgieCIsIjEwIiksTj4wJiZGLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxGLnRleHRDb250ZW50PVAsTy5hcHBlbmRDaGlsZChGKX1yZXR1cm4gT30pLmF0dHIoIngiLDEwKS5hdHRyKCJ5IixmdW5jdGlvbihrLFIpe2lmKFI+MClmb3IobGV0IEM9MDtDPFI7QysrKXJldHVybiBJKz1EW1ItMV1bMV0sa1sxXSpTLzIrSSpTK0E7ZWxzZSByZXR1cm4ga1sxXSpTLzIrQX0pLmF0dHIoImZvbnQtc2l6ZSIsaS5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihrKXtmb3IobGV0W1IsQ11vZiBkLmVudHJpZXMoKSlpZihrWzBdPT09QylyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrUiVpLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KX1vKFQsInZlcnRMYWJlbHMiKTtmdW5jdGlvbiBFKFMsQSxJLEQpe2xldCBrPW4uZGIuZ2V0VG9kYXlNYXJrZXIoKTtpZihrPT09Im9mZiIpcmV0dXJuO2xldCBSPWcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEM9bmV3IERhdGUsTz1SLmFwcGVuZCgibGluZSIpO08uYXR0cigieDEiLHkoQykrUykuYXR0cigieDIiLHkoQykrUykuYXR0cigieTEiLGkudGl0bGVUb3BNYXJnaW4pLmF0dHIoInkyIixELWkudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSxrIT09IiImJk8uYXR0cigic3R5bGUiLGsucmVwbGFjZSgvLC9nLCI7IikpfW8oRSwiZHJhd1RvZGF5Iik7ZnVuY3Rpb24gTChTKXtsZXQgQT17fSxJPVtdO2ZvcihsZXQgRD0wLGs9Uy5sZW5ndGg7RDxrOysrRClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQSxTW0RdKXx8KEFbU1tEXV09ITAsSS5wdXNoKFNbRF0pKTtyZXR1cm4gSX1vKEwsImNoZWNrVW5pcXVlIil9LCJkcmF3Iiksc2hlPXtzZXRDb25mOk0kZSxkcmF3Ok8kZX19KTt2YXIgUCRlLGxoZSxjaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQJGU9byh0PT5gCiAgLm1lcm1haWQtbWFpbi1mb250IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCiAgLmV4Y2x1ZGUtcmFuZ2UgewogICAgZmlsbDogJHt0LmV4Y2x1ZGVCa2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbiB7CiAgICBzdHJva2U6IG5vbmU7CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvbjAgewogICAgZmlsbDogJHt0LnNlY3Rpb25Ca2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbjIgewogICAgZmlsbDogJHt0LnNlY3Rpb25Ca2dDb2xvcjJ9OwogIH0KCiAgLnNlY3Rpb24xLAogIC5zZWN0aW9uMyB7CiAgICBmaWxsOiAke3QuYWx0U2VjdGlvbkJrZ0NvbG9yfTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uVGl0bGUwIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUxIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUyIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUzIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUgewogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKCiAgLyogR3JpZCBhbmQgYXhpcyAqLwoKICAuZ3JpZCAudGljayB7CiAgICBzdHJva2U6ICR7dC5ncmlkQ29sb3J9OwogICAgb3BhY2l0eTogMC44OwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLmdyaWQgLnRpY2sgdGV4dCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQoKICAuZ3JpZCBwYXRoIHsKICAgIHN0cm9rZS13aWR0aDogMDsKICB9CgoKICAvKiBUb2RheSBsaW5lICovCgogIC50b2RheSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAke3QudG9kYXlMaW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQoKCiAgLyogVGFzayBzdHlsaW5nICovCgogIC8qIERlZmF1bHQgdGFzayAqLwoKICAudGFzayB7CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAudGFza1RleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0IHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0IHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogZW5kOwogIH0KCgogIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi8KCiAgLnRhc2suY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC50YXNrVGV4dC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHt0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCgogIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovCgogIC50YXNrVGV4dDAsCiAgLnRhc2tUZXh0MSwKICAudGFza1RleHQyLAogIC50YXNrVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0Q29sb3J9OwogIH0KCiAgLnRhc2swLAogIC50YXNrMSwKICAudGFzazIsCiAgLnRhc2szIHsKICAgIGZpbGw6ICR7dC50YXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QudGFza0JvcmRlckNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUwLAogIC50YXNrVGV4dE91dHNpZGUyCiAgewogICAgZmlsbDogJHt0LnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUxLAogIC50YXNrVGV4dE91dHNpZGUzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKCiAgLyogQWN0aXZlIHRhc2sgKi8KCiAgLmFjdGl2ZTAsCiAgLmFjdGl2ZTEsCiAgLmFjdGl2ZTIsCiAgLmFjdGl2ZTMgewogICAgZmlsbDogJHt0LmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmVUYXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2ZVRleHQwLAogIC5hY3RpdmVUZXh0MSwKICAuYWN0aXZlVGV4dDIsCiAgLmFjdGl2ZVRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBDb21wbGV0ZWQgdGFzayAqLwoKICAuZG9uZTAsCiAgLmRvbmUxLAogIC5kb25lMiwKICAuZG9uZTMgewogICAgc3Ryb2tlOiAke3QuZG9uZVRhc2tCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZVRleHQwLAogIC5kb25lVGV4dDEsCiAgLmRvbmVUZXh0MiwKICAuZG9uZVRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqLwoKICAuY3JpdDAsCiAgLmNyaXQxLAogIC5jcml0MiwKICAuY3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5jcml0QmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmFjdGl2ZUNyaXQwLAogIC5hY3RpdmVDcml0MSwKICAuYWN0aXZlQ3JpdDIsCiAgLmFjdGl2ZUNyaXQzIHsKICAgIHN0cm9rZTogJHt0LmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lQ3JpdDAsCiAgLmRvbmVDcml0MSwKICAuZG9uZUNyaXQyLAogIC5kb25lQ3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5taWxlc3RvbmUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpOwogIH0KCiAgLm1pbGVzdG9uZVRleHQgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KICAuZG9uZUNyaXRUZXh0MCwKICAuZG9uZUNyaXRUZXh0MSwKICAuZG9uZUNyaXRUZXh0MiwKICAuZG9uZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAuYWN0aXZlQ3JpdFRleHQwLAogIC5hY3RpdmVDcml0VGV4dDEsCiAgLmFjdGl2ZUNyaXRUZXh0MiwKICAuYWN0aXZlQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC50aXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfHx0LnRleHRDb2xvcn07CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CmAsImdldFN0eWxlcyIpLGxoZT1QJGV9KTt2YXIgdWhlPXt9O3ZyKHVoZSx7ZGlhZ3JhbTooKT0+QiRlfSk7dmFyIEIkZSxoaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdWUoKTtpaGUoKTtvaGUoKTtjaGUoKTtCJGU9e3BhcnNlcjpCdWUsZGI6cmhlLHJlbmRlcmVyOnNoZSxzdHlsZXM6bGhlfX0pO3ZhciBwaGUsbWhlPU0oKCk9PnsidXNlIHN0cmljdCI7SGcoKTt1dCgpO3BoZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgWWwoImluZm8iLHQpO1kuZGVidWcoZSl9LCJwYXJzZSIpfX0pO3ZhciBfeCx0Tz1NKCgpPT57X3g9IjExLjQuMCJ9KTt2YXIgViRlLFUkZSxnaGUseWhlPU0oKCk9PnsidXNlIHN0cmljdCI7dE8oKTtWJGU9e3ZlcnNpb246X3h9LFUkZT1vKCgpPT5WJGUudmVyc2lvbiwiZ2V0VmVyc2lvbiIpLGdoZT17Z2V0VmVyc2lvbjpVJGV9fSk7dmFyIFZhLGVoPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtWdCgpO1ZhPW8odD0+e2xldHtzZWN1cml0eUxldmVsOmV9PXBlKCkscj1WZSgiYm9keSIpO2lmKGU9PT0ic2FuZGJveCIpe2xldCBhPVZlKGAjaSR7dH1gKS5ub2RlKCk/LmNvbnRlbnREb2N1bWVudD8/ZG9jdW1lbnQ7cj1WZShhLmJvZHkpfXJldHVybiByLnNlbGVjdChgIyR7dH1gKX0sInNlbGVjdFN2Z0VsZW1lbnQiKX0pO3ZhciBIJGUsdmhlLHhoZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7ZWgoKTthaSgpO0gkZT1vKCh0LGUscik9PntZLmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmArdCk7bGV0IG49VmEoZSk7WnIobiwxMDAsNDAwLCEwKSxuLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDEwMCkuYXR0cigieSIsNDApLmF0dHIoImNsYXNzIiwidmVyc2lvbiIpLmF0dHIoImZvbnQtc2l6ZSIsMzIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYHYke3J9YCl9LCJkcmF3IiksdmhlPXtkcmF3OkgkZX19KTt2YXIgYmhlPXt9O3ZyKGJoZSx7ZGlhZ3JhbTooKT0+VyRlfSk7dmFyIFckZSx3aGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttaGUoKTt5aGUoKTt4aGUoKTtXJGU9e3BhcnNlcjpwaGUsZGI6Z2hlLHJlbmRlcmVyOnZoZX19KTt2YXIgRWhlLHJPLFRFLG5PLFgkZSxqJGUsSyRlLFEkZSxaJGUsSiRlLGVWZSxrRSxpTz1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7QWkoKTticygpO0VoZT11ci5waWUsck89e3NlY3Rpb25zOm5ldyBNYXAsc2hvd0RhdGE6ITEsY29uZmlnOkVoZX0sVEU9ck8uc2VjdGlvbnMsbk89ck8uc2hvd0RhdGEsWCRlPXN0cnVjdHVyZWRDbG9uZShFaGUpLGokZT1vKCgpPT5zdHJ1Y3R1cmVkQ2xvbmUoWCRlKSwiZ2V0Q29uZmlnIiksSyRlPW8oKCk9PntURT1uZXcgTWFwLG5PPXJPLnNob3dEYXRhLExyKCl9LCJjbGVhciIpLFEkZT1vKCh7bGFiZWw6dCx2YWx1ZTplfSk9PntURS5oYXModCl8fChURS5zZXQodCxlKSxZLmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHt0fSwgd2l0aCB2YWx1ZTogJHtlfWApKX0sImFkZFNlY3Rpb24iKSxaJGU9bygoKT0+VEUsImdldFNlY3Rpb25zIiksSiRlPW8odD0+e25PPXR9LCJzZXRTaG93RGF0YSIpLGVWZT1vKCgpPT5uTywiZ2V0U2hvd0RhdGEiKSxrRT17Z2V0Q29uZmlnOmokZSxjbGVhcjpLJGUsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldERpYWdyYW1UaXRsZTpKcixzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixzZXRBY2NEZXNjcmlwdGlvbjpGcixnZXRBY2NEZXNjcmlwdGlvbjp6cixhZGRTZWN0aW9uOlEkZSxnZXRTZWN0aW9uczpaJGUsc2V0U2hvd0RhdGE6SiRlLGdldFNob3dEYXRhOmVWZX19KTt2YXIgdFZlLFNoZSxDaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIZygpO3V0KCk7VHgoKTtpTygpO3RWZT1vKCh0LGUpPT57eWYodCxlKSxlLnNldFNob3dEYXRhKHQuc2hvd0RhdGEpLHQuc2VjdGlvbnMubWFwKGUuYWRkU2VjdGlvbil9LCJwb3B1bGF0ZURiIiksU2hlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCBZbCgicGllIix0KTtZLmRlYnVnKGUpLHRWZShlLGtFKX0sInBhcnNlIil9fSk7dmFyIHJWZSxBaGUsX2hlPU0oKCk9PnsidXNlIHN0cmljdCI7clZlPW8odD0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7dC5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke3QucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7dC5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke3QucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHt0LnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHt0LnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHt0LnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7dC5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke3QucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dC5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLCJnZXRTdHlsZXMiKSxBaGU9clZlfSk7dmFyIG5WZSxpVmUsTGhlLERoZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7VnQoKTt1dCgpO2VoKCk7YWkoKTtocigpO25WZT1vKHQ9PntsZXQgZT1bLi4udC5lbnRyaWVzKCldLm1hcChuPT4oe2xhYmVsOm5bMF0sdmFsdWU6blsxXX0pKS5zb3J0KChuLGkpPT5pLnZhbHVlLW4udmFsdWUpO3JldHVybiBIMygpLnZhbHVlKG49Pm4udmFsdWUpKGUpfSwiY3JlYXRlUGllQXJjcyIpLGlWZT1vKCh0LGUscixuKT0+e1kuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCt0KTtsZXQgaT1uLmRiLGE9cGUoKSxzPURzKGkuZ2V0Q29uZmlnKCksYS5waWUpLGw9NDAsdT0xOCxoPTQsZj00NTAsZD1mLHA9VmEoZSksbT1wLmFwcGVuZCgiZyIpO20uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZC8yKyIsIitmLzIrIikiKTtsZXR7dGhlbWVWYXJpYWJsZXM6Z309YSxbeV09SG8oZy5waWVPdXRlclN0cm9rZVdpZHRoKTt5Pz89MjtsZXQgdj1zLnRleHRQb3NpdGlvbix4PU1hdGgubWluKGQsZikvMi1sLGI9RGwoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyh4KSx3PURsKCkuaW5uZXJSYWRpdXMoeCp2KS5vdXRlclJhZGl1cyh4KnYpO20uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLmF0dHIoInIiLHgreS8yKS5hdHRyKCJjbGFzcyIsInBpZU91dGVyQ2lyY2xlIik7bGV0IF89aS5nZXRTZWN0aW9ucygpLFQ9blZlKF8pLEU9W2cucGllMSxnLnBpZTIsZy5waWUzLGcucGllNCxnLnBpZTUsZy5waWU2LGcucGllNyxnLnBpZTgsZy5waWU5LGcucGllMTAsZy5waWUxMSxnLnBpZTEyXSxMPWt1KEUpO20uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoVCkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixiKS5hdHRyKCJmaWxsIixrPT5MKGsuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IFM9MDtfLmZvckVhY2goaz0+e1MrPWt9KSxtLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKFQpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dChrPT4oay5kYXRhLnZhbHVlL1MqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIixrPT4idHJhbnNsYXRlKCIrdy5jZW50cm9pZChrKSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxtLmFwcGVuZCgidGV4dCIpLnRleHQoaS5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShmLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2xldCBBPW0uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShMLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoayxSKT0+e2xldCBDPXUraCxPPUMqTC5kb21haW4oKS5sZW5ndGgvMixOPTEyKnUsUD1SKkMtTztyZXR1cm4idHJhbnNsYXRlKCIrTisiLCIrUCsiKSJ9KTtBLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLHUpLnN0eWxlKCJmaWxsIixMKS5zdHlsZSgic3Ryb2tlIixMKSxBLmRhdGEoVCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdStoKS5hdHRyKCJ5Iix1LWgpLnRleHQoaz0+e2xldHtsYWJlbDpSLHZhbHVlOkN9PWsuZGF0YTtyZXR1cm4gaS5nZXRTaG93RGF0YSgpP2Ake1J9IFske0N9XWA6Un0pO2xldCBJPU1hdGgubWF4KC4uLkEuc2VsZWN0QWxsKCJ0ZXh0Iikubm9kZXMoKS5tYXAoaz0+az8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/PzApKSxEPWQrbCt1K2grSTtwLmF0dHIoInZpZXdCb3giLGAwIDAgJHtEfSAke2Z9YCksWnIocCxmLEQscy51c2VNYXhXaWR0aCl9LCJkcmF3IiksTGhlPXtkcmF3OmlWZX19KTt2YXIgTmhlPXt9O3ZyKE5oZSx7ZGlhZ3JhbTooKT0+YVZlfSk7dmFyIGFWZSxSaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDaGUoKTtpTygpO19oZSgpO0RoZSgpO2FWZT17cGFyc2VyOlNoZSxkYjprRSxyZW5kZXJlcjpMaGUsc3R5bGVzOkFoZX19KTt2YXIgYU8sT2hlLFBoZT1NKCgpPT57InVzZSBzdHJpY3QiO2FPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihUZSxpZSxFZSxBZSl7Zm9yKEVlPUVlfHx7fSxBZT1UZS5sZW5ndGg7QWUtLTtFZVtUZVtBZV1dPWllKTtyZXR1cm4gRWV9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVsxLDddLHM9WzEsNCw1LDEwLDEyLDEzLDE0LDE4LDI1LDM1LDM3LDM5LDQxLDQyLDQ4LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYzLDY0LDY1LDY2LDY3XSxsPVsxLDQsNSwxMCwxMiwxMywxNCwxOCwyNSwyOCwzNSwzNywzOSw0MSw0Miw0OCw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2MSw2Myw2NCw2NSw2Niw2N10sdT1bNTUsNTYsNTddLGg9WzIsMzZdLGY9WzEsMzddLGQ9WzEsMzZdLHA9WzEsMzhdLG09WzEsMzVdLGc9WzEsNDNdLHk9WzEsNDFdLHY9WzEsMTRdLHg9WzEsMjNdLGI9WzEsMThdLHc9WzEsMTldLF89WzEsMjBdLFQ9WzEsMjFdLEU9WzEsMjJdLEw9WzEsMjRdLFM9WzEsMjVdLEE9WzEsMjZdLEk9WzEsMjddLEQ9WzEsMjhdLGs9WzEsMjldLFI9WzEsMzJdLEM9WzEsMzNdLE89WzEsMzRdLE49WzEsMzldLFA9WzEsNDBdLEY9WzEsNDJdLEI9WzEsNDRdLEc9WzEsNjJdLHo9WzEsNjFdLFc9WzQsNSw4LDEwLDEyLDEzLDE0LDE4LDQ0LDQ3LDQ5LDU1LDU2LDU3LDYzLDY0LDY1LDY2LDY3XSxaPVsxLDY1XSxqPVsxLDY2XSxvZT1bMSw2N10sSz1bMSw2OF0sZWU9WzEsNjldLEo9WzEsNzBdLEg9WzEsNzFdLHE9WzEsNzJdLFE9WzEsNzNdLGFlPVsxLDc0XSx1ZT1bMSw3NV0sY2U9WzEsNzZdLHRlPVs0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxOF0sTmU9WzEsOTBdLHNlPVsxLDkxXSxrZT1bMSw5Ml0sUmU9WzEsOTldLENlPVsxLDkzXSxQZT1bMSw5Nl0sSWU9WzEsOTRdLCRlPVsxLDk1XSx5ZT1bMSw5N10sWD1bMSw5OF0sZmU9WzEsMTAyXSxoZT1bMTAsNTUsNTYsNTddLGdlPVs0LDUsNiw4LDEwLDExLDEzLDE3LDE4LDE5LDIwLDU1LDU2LDU3XSxuZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsaWRTdHJpbmdUb2tlbjozLEFMUEhBOjQsTlVNOjUsTk9ERV9TVFJJTkc6NixET1dOOjcsTUlOVVM6OCxERUZBVUxUOjksQ09NTUE6MTAsQ09MT046MTEsQU1QOjEyLEJSS1Q6MTMsTVVMVDoxNCxVTklDT0RFX1RFWFQ6MTUsc3R5bGVDb21wb25lbnQ6MTYsVU5JVDoxNyxTUEFDRToxOCxTVFlMRToxOSxQQ1Q6MjAsaWRTdHJpbmc6MjEsc3R5bGU6MjIsc3R5bGVzT3B0OjIzLGNsYXNzRGVmU3RhdGVtZW50OjI0LENMQVNTREVGOjI1LHN0YXJ0OjI2LGVvbDoyNyxRVUFEUkFOVDoyOCxkb2N1bWVudDoyOSxsaW5lOjMwLHN0YXRlbWVudDozMSxheGlzRGV0YWlsczozMixxdWFkcmFudERldGFpbHM6MzMscG9pbnRzOjM0LHRpdGxlOjM1LHRpdGxlX3ZhbHVlOjM2LGFjY190aXRsZTozNyxhY2NfdGl0bGVfdmFsdWU6MzgsYWNjX2Rlc2NyOjM5LGFjY19kZXNjcl92YWx1ZTo0MCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjQxLHNlY3Rpb246NDIsdGV4dDo0Myxwb2ludF9zdGFydDo0NCxwb2ludF94OjQ1LHBvaW50X3k6NDYsY2xhc3NfbmFtZTo0NywiWC1BWElTIjo0OCwiQVhJUy1URVhULURFTElNSVRFUiI6NDksIlktQVhJUyI6NTAsUVVBRFJBTlRfMTo1MSxRVUFEUkFOVF8yOjUyLFFVQURSQU5UXzM6NTMsUVVBRFJBTlRfNDo1NCxORVdMSU5FOjU1LFNFTUk6NTYsRU9GOjU3LGFscGhhTnVtVG9rZW46NTgsdGV4dE5vVGFnc1Rva2VuOjU5LFNUUjo2MCxNRF9TVFI6NjEsYWxwaGFOdW06NjIsUFVOQ1RVQVRJT046NjMsUExVUzo2NCxFUVVBTFM6NjUsRE9UOjY2LFVOREVSU0NPUkU6NjcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkFMUEhBIiw1OiJOVU0iLDY6Ik5PREVfU1RSSU5HIiw3OiJET1dOIiw4OiJNSU5VUyIsOToiREVGQVVMVCIsMTA6IkNPTU1BIiwxMToiQ09MT04iLDEyOiJBTVAiLDEzOiJCUktUIiwxNDoiTVVMVCIsMTU6IlVOSUNPREVfVEVYVCIsMTc6IlVOSVQiLDE4OiJTUEFDRSIsMTk6IlNUWUxFIiwyMDoiUENUIiwyNToiQ0xBU1NERUYiLDI4OiJRVUFEUkFOVCIsMzU6InRpdGxlIiwzNjoidGl0bGVfdmFsdWUiLDM3OiJhY2NfdGl0bGUiLDM4OiJhY2NfdGl0bGVfdmFsdWUiLDM5OiJhY2NfZGVzY3IiLDQwOiJhY2NfZGVzY3JfdmFsdWUiLDQxOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw0Mjoic2VjdGlvbiIsNDQ6InBvaW50X3N0YXJ0Iiw0NToicG9pbnRfeCIsNDY6InBvaW50X3kiLDQ3OiJjbGFzc19uYW1lIiw0ODoiWC1BWElTIiw0OToiQVhJUy1URVhULURFTElNSVRFUiIsNTA6IlktQVhJUyIsNTE6IlFVQURSQU5UXzEiLDUyOiJRVUFEUkFOVF8yIiw1MzoiUVVBRFJBTlRfMyIsNTQ6IlFVQURSQU5UXzQiLDU1OiJORVdMSU5FIiw1NjoiU0VNSSIsNTc6IkVPRiIsNjA6IlNUUiIsNjE6Ik1EX1NUUiIsNjM6IlBVTkNUVUFUSU9OIiw2NDoiUExVUyIsNjU6IkVRVUFMUyIsNjY6IkRPVCIsNjc6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsyMSwxXSxbMjEsMl0sWzIyLDFdLFsyMiwyXSxbMjMsMV0sWzIzLDNdLFsyNCw1XSxbMjYsMl0sWzI2LDJdLFsyNiwyXSxbMjksMF0sWzI5LDJdLFszMCwyXSxbMzEsMF0sWzMxLDFdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszNCw0XSxbMzQsNV0sWzM0LDVdLFszNCw2XSxbMzIsNF0sWzMyLDNdLFszMiwyXSxbMzIsNF0sWzMyLDNdLFszMiwyXSxbMzMsMl0sWzMzLDJdLFszMywyXSxbMzMsMl0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzQzLDFdLFs0MywyXSxbNDMsMV0sWzQzLDFdLFs2MiwxXSxbNjIsMl0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTksMV0sWzU5LDFdLFs1OSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGllLEVlLEFlLEdlLEJlLG1lLEhlKXt2YXIgT2U9bWUubGVuZ3RoLTE7c3dpdGNoKEJlKXtjYXNlIDIzOnRoaXMuJD1tZVtPZV07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9bWVbT2UtMV0rIiIrbWVbT2VdO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPW1lW09lLTFdK21lW09lXTticmVhaztjYXNlIDI3OnRoaXMuJD1bbWVbT2VdLnRyaW0oKV07YnJlYWs7Y2FzZSAyODptZVtPZS0yXS5wdXNoKG1lW09lXS50cmltKCkpLHRoaXMuJD1tZVtPZS0yXTticmVhaztjYXNlIDI5OnRoaXMuJD1tZVtPZS00XSxHZS5hZGRDbGFzcyhtZVtPZS0yXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPW1lW09lXS50cmltKCksR2Uuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9bWVbT2VdLnRyaW0oKSxHZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9bWVbT2VdLnRyaW0oKSxHZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNDY6R2UuYWRkU2VjdGlvbihtZVtPZV0uc3Vic3RyKDgpKSx0aGlzLiQ9bWVbT2VdLnN1YnN0cig4KTticmVhaztjYXNlIDQ3OkdlLmFkZFBvaW50KG1lW09lLTNdLCIiLG1lW09lLTFdLG1lW09lXSxbXSk7YnJlYWs7Y2FzZSA0ODpHZS5hZGRQb2ludChtZVtPZS00XSxtZVtPZS0zXSxtZVtPZS0xXSxtZVtPZV0sW10pO2JyZWFrO2Nhc2UgNDk6R2UuYWRkUG9pbnQobWVbT2UtNF0sIiIsbWVbT2UtMl0sbWVbT2UtMV0sbWVbT2VdKTticmVhaztjYXNlIDUwOkdlLmFkZFBvaW50KG1lW09lLTVdLG1lW09lLTRdLG1lW09lLTJdLG1lW09lLTFdLG1lW09lXSk7YnJlYWs7Y2FzZSA1MTpHZS5zZXRYQXhpc0xlZnRUZXh0KG1lW09lLTJdKSxHZS5zZXRYQXhpc1JpZ2h0VGV4dChtZVtPZV0pO2JyZWFrO2Nhc2UgNTI6bWVbT2UtMV0udGV4dCs9IiBcdTI3RjYgIixHZS5zZXRYQXhpc0xlZnRUZXh0KG1lW09lLTFdKTticmVhaztjYXNlIDUzOkdlLnNldFhBeGlzTGVmdFRleHQobWVbT2VdKTticmVhaztjYXNlIDU0OkdlLnNldFlBeGlzQm90dG9tVGV4dChtZVtPZS0yXSksR2Uuc2V0WUF4aXNUb3BUZXh0KG1lW09lXSk7YnJlYWs7Y2FzZSA1NTptZVtPZS0xXS50ZXh0Kz0iIFx1MjdGNiAiLEdlLnNldFlBeGlzQm90dG9tVGV4dChtZVtPZS0xXSk7YnJlYWs7Y2FzZSA1NjpHZS5zZXRZQXhpc0JvdHRvbVRleHQobWVbT2VdKTticmVhaztjYXNlIDU3OkdlLnNldFF1YWRyYW50MVRleHQobWVbT2VdKTticmVhaztjYXNlIDU4OkdlLnNldFF1YWRyYW50MlRleHQobWVbT2VdKTticmVhaztjYXNlIDU5OkdlLnNldFF1YWRyYW50M1RleHQobWVbT2VdKTticmVhaztjYXNlIDYwOkdlLnNldFF1YWRyYW50NFRleHQobWVbT2VdKTticmVhaztjYXNlIDY0OnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNjU6dGhpcy4kPXt0ZXh0Om1lW09lLTFdLnRleHQrIiIrbWVbT2VdLHR5cGU6bWVbT2UtMV0udHlwZX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3RleHQ6bWVbT2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDY3OnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDY4OnRoaXMuJD1tZVtPZV07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9bWVbT2UtMV0rIiIrbWVbT2VdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MTg6ZSwyNjoxLDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE6WzNdfSx7MTg6ZSwyNjo4LDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE4OmUsMjY6OSwyNzoyLDI4OnIsNTU6biw1NjppLDU3OmF9LHQocyxbMiwzM10sezI5OjEwfSksdChsLFsyLDYxXSksdChsLFsyLDYyXSksdChsLFsyLDYzXSksezE6WzIsMzBdfSx7MTpbMiwzMV19LHQodSxoLHszMDoxMSwzMToxMiwyNDoxMywzMjoxNSwzMzoxNiwzNDoxNyw0MzozMCw1ODozMSwxOlsyLDMyXSw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6diwyNTp4LDM1OmIsMzc6dywzOTpfLDQxOlQsNDI6RSw0ODpMLDUwOlMsNTE6QSw1MjpJLDUzOkQsNTQ6ayw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdChzLFsyLDM0XSksezI3OjQ1LDU1Om4sNTY6aSw1NzphfSx0KHUsWzIsMzddKSx0KHUsaCx7MjQ6MTMsMzI6MTUsMzM6MTYsMzQ6MTcsNDM6MzAsNTg6MzEsMzE6NDYsNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnYsMjU6eCwzNTpiLDM3OncsMzk6Xyw0MTpULDQyOkUsNDg6TCw1MDpTLDUxOkEsNTI6SSw1MzpELDU0OmssNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiwzOV0pLHQodSxbMiw0MF0pLHQodSxbMiw0MV0pLHszNjpbMSw0N119LHszODpbMSw0OF19LHs0MDpbMSw0OV19LHQodSxbMiw0NV0pLHQodSxbMiw0Nl0pLHsxODpbMSw1MF19LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTEsNTg6MzEsNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1Miw1ODozMSw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjUzLDU4OjMxLDYwOlIsNjE6Qyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTQsNTg6MzEsNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1NSw1ODozMSw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjU2LDU4OjMxLDYwOlIsNjE6Qyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHs0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNDQ6WzEsNTddLDQ3OlsxLDU4XSw1ODo2MCw1OTo1OSw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHQoVyxbMiw2NF0pLHQoVyxbMiw2Nl0pLHQoVyxbMiw2N10pLHQoVyxbMiw3MF0pLHQoVyxbMiw3MV0pLHQoVyxbMiw3Ml0pLHQoVyxbMiw3M10pLHQoVyxbMiw3NF0pLHQoVyxbMiw3NV0pLHQoVyxbMiw3Nl0pLHQoVyxbMiw3N10pLHQoVyxbMiw3OF0pLHQoVyxbMiw3OV0pLHQoVyxbMiw4MF0pLHQocyxbMiwzNV0pLHQodSxbMiwzOF0pLHQodSxbMiw0Ml0pLHQodSxbMiw0M10pLHQodSxbMiw0NF0pLHszOjY0LDQ6Wiw1OmosNjpvZSw3OkssODplZSw5OkosMTA6SCwxMTpxLDEyOlEsMTM6YWUsMTQ6dWUsMTU6Y2UsMjE6NjN9LHQodSxbMiw1M10sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODpHLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw0OTpbMSw3N10sNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDU2XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OkcsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDQ5OlsxLDc4XSw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNTddLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDU4XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OkcsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw1OV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODpHLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNjBdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksezQ1OlsxLDc5XX0sezQ0OlsxLDgwXX0sdChXLFsyLDY1XSksdChXLFsyLDgxXSksdChXLFsyLDgyXSksdChXLFsyLDgzXSksezM6ODIsNDpaLDU6aiw2Om9lLDc6Syw4OmVlLDk6SiwxMDpILDExOnEsMTI6USwxMzphZSwxNDp1ZSwxNTpjZSwxODpbMSw4MV19LHQodGUsWzIsMjNdKSx0KHRlLFsyLDFdKSx0KHRlLFsyLDJdKSx0KHRlLFsyLDNdKSx0KHRlLFsyLDRdKSx0KHRlLFsyLDVdKSx0KHRlLFsyLDZdKSx0KHRlLFsyLDddKSx0KHRlLFsyLDhdKSx0KHRlLFsyLDldKSx0KHRlLFsyLDEwXSksdCh0ZSxbMiwxMV0pLHQodGUsWzIsMTJdKSx0KHUsWzIsNTJdLHs1ODozMSw0Mzo4Myw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw1NV0sezU4OjMxLDQzOjg0LDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksezQ2OlsxLDg1XX0sezQ1OlsxLDg2XX0sezQ6TmUsNTpzZSw2OmtlLDg6UmUsMTE6Q2UsMTM6UGUsMTY6ODksMTc6SWUsMTg6JGUsMTk6eWUsMjA6WCwyMjo4OCwyMzo4N30sdCh0ZSxbMiwyNF0pLHQodSxbMiw1MV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODpHLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNTRdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDQ3XSx7MjI6ODgsMTY6ODksMjM6MTAwLDQ6TmUsNTpzZSw2OmtlLDg6UmUsMTE6Q2UsMTM6UGUsMTc6SWUsMTg6JGUsMTk6eWUsMjA6WH0pLHs0NjpbMSwxMDFdfSx0KHUsWzIsMjldLHsxMDpmZX0pLHQoaGUsWzIsMjddLHsxNjoxMDMsNDpOZSw1OnNlLDY6a2UsODpSZSwxMTpDZSwxMzpQZSwxNzpJZSwxODokZSwxOTp5ZSwyMDpYfSksdChnZSxbMiwyNV0pLHQoZ2UsWzIsMTNdKSx0KGdlLFsyLDE0XSksdChnZSxbMiwxNV0pLHQoZ2UsWzIsMTZdKSx0KGdlLFsyLDE3XSksdChnZSxbMiwxOF0pLHQoZ2UsWzIsMTldKSx0KGdlLFsyLDIwXSksdChnZSxbMiwyMV0pLHQoZ2UsWzIsMjJdKSx0KHUsWzIsNDldLHsxMDpmZX0pLHQodSxbMiw0OF0sezIyOjg4LDE2Ojg5LDIzOjEwNCw0Ok5lLDU6c2UsNjprZSw4OlJlLDExOkNlLDEzOlBlLDE3OkllLDE4OiRlLDE5OnllLDIwOlh9KSx7NDpOZSw1OnNlLDY6a2UsODpSZSwxMTpDZSwxMzpQZSwxNjo4OSwxNzpJZSwxODokZSwxOTp5ZSwyMDpYLDIyOjEwNX0sdChnZSxbMiwyNl0pLHQodSxbMiw1MF0sezEwOmZlfSksdChoZSxbMiwyOF0sezE2OjEwMyw0Ok5lLDU6c2UsNjprZSw4OlJlLDExOkNlLDEzOlBlLDE3OkllLDE4OiRlLDE5OnllLDIwOlh9KV0sZGVmYXVsdEFjdGlvbnM6ezg6WzIsMzBdLDk6WzIsMzFdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaWUsRWUpe2lmKEVlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoaWUpO2Vsc2V7dmFyIEFlPW5ldyBFcnJvcihpZSk7dGhyb3cgQWUuaGFzaD1FZSxBZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihpZSl7dmFyIEVlPXRoaXMsQWU9WzBdLEdlPVtdLEJlPVtudWxsXSxtZT1bXSxIZT10aGlzLnRhYmxlLE9lPSIiLGV0PTAsYnQ9MCxrdD0wLHZ0PTIscnQ9MSx5dD1tZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxVZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHR0PXt5eTp7fX07Zm9yKHZhciBodCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGh0KSYmKHR0Lnl5W2h0XT10aGlzLnl5W2h0XSk7VWUuc2V0SW5wdXQoaWUsdHQueXkpLHR0Lnl5LmxleGVyPVVlLHR0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBVZS55eWxsb2M+InUiJiYoVWUueXlsbG9jPXt9KTt2YXIgRXQ9VWUueXlsbG9jO21lLnB1c2goRXQpO3ZhciBlcj1VZS5vcHRpb25zJiZVZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgdHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZHQoX3Ipe0FlLmxlbmd0aD1BZS5sZW5ndGgtMipfcixCZS5sZW5ndGg9QmUubGVuZ3RoLV9yLG1lLmxlbmd0aD1tZS5sZW5ndGgtX3J9byhkdCwicG9wU3RhY2siKTtmdW5jdGlvbiBKZSgpe3ZhciBfcjtyZXR1cm4gX3I9R2UucG9wKCl8fFVlLmxleCgpfHxydCx0eXBlb2YgX3IhPSJudW1iZXIiJiYoX3IgaW5zdGFuY2VvZiBBcnJheSYmKEdlPV9yLF9yPUdlLnBvcCgpKSxfcj1FZS5zeW1ib2xzX1tfcl18fF9yKSxfcn1vKEplLCJsZXgiKTtmb3IodmFyIGN0LEN0LHB0LEJ0LFRyLHlyLG9yPXt9LGxuLE9yLGlpLG1uOzspe2lmKHB0PUFlW0FlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3B0XT9CdD10aGlzLmRlZmF1bHRBY3Rpb25zW3B0XTooKGN0PT09bnVsbHx8dHlwZW9mIGN0PiJ1IikmJihjdD1KZSgpKSxCdD1IZVtwdF0mJkhlW3B0XVtjdF0pLHR5cGVvZiBCdD4idSJ8fCFCdC5sZW5ndGh8fCFCdFswXSl7dmFyIE9uPSIiO21uPVtdO2ZvcihsbiBpbiBIZVtwdF0pdGhpcy50ZXJtaW5hbHNfW2xuXSYmbG4+dnQmJm1uLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tsbl0rIiciKTtVZS5zaG93UG9zaXRpb24/T249IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZXQrMSkrYDoKYCtVZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK21uLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bY3RdfHxjdCkrIiciOk9uPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoY3Q9PXJ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2N0XXx8Y3QpKyInIiksdGhpcy5wYXJzZUVycm9yKE9uLHt0ZXh0OlVlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tjdF18fGN0LGxpbmU6VWUueXlsaW5lbm8sbG9jOkV0LGV4cGVjdGVkOm1ufSl9aWYoQnRbMF1pbnN0YW5jZW9mIEFycmF5JiZCdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3B0KyIsIHRva2VuOiAiK2N0KTtzd2l0Y2goQnRbMF0pe2Nhc2UgMTpBZS5wdXNoKGN0KSxCZS5wdXNoKFVlLnl5dGV4dCksbWUucHVzaChVZS55eWxsb2MpLEFlLnB1c2goQnRbMV0pLGN0PW51bGwsQ3Q/KGN0PUN0LEN0PW51bGwpOihidD1VZS55eWxlbmcsT2U9VWUueXl0ZXh0LGV0PVVlLnl5bGluZW5vLEV0PVVlLnl5bGxvYyxrdD4wJiZrdC0tKTticmVhaztjYXNlIDI6aWYoT3I9dGhpcy5wcm9kdWN0aW9uc19bQnRbMV1dWzFdLG9yLiQ9QmVbQmUubGVuZ3RoLU9yXSxvci5fJD17Zmlyc3RfbGluZTptZVttZS5sZW5ndGgtKE9yfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bWVbbWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bWVbbWUubGVuZ3RoLShPcnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptZVttZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGVyJiYob3IuXyQucmFuZ2U9W21lW21lLmxlbmd0aC0oT3J8fDEpXS5yYW5nZVswXSxtZVttZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx5cj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob3IsW09lLGJ0LGV0LHR0Lnl5LEJ0WzFdLEJlLG1lXS5jb25jYXQoeXQpKSx0eXBlb2YgeXI8InUiKXJldHVybiB5cjtPciYmKEFlPUFlLnNsaWNlKDAsLTEqT3IqMiksQmU9QmUuc2xpY2UoMCwtMSpPciksbWU9bWUuc2xpY2UoMCwtMSpPcikpLEFlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQnRbMV1dWzBdKSxCZS5wdXNoKG9yLiQpLG1lLnB1c2gob3IuXyQpLGlpPUhlW0FlW0FlLmxlbmd0aC0yXV1bQWVbQWUubGVuZ3RoLTFdXSxBZS5wdXNoKGlpKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sdmU9ZnVuY3Rpb24oKXt2YXIgVGU9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihFZSxBZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFZSxBZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRWUpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oaWUsRWUpe3JldHVybiB0aGlzLnl5PUVlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1pZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBpZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9aWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWllLHRoaXMubWF0Y2hlZCs9aWU7dmFyIEVlPWllLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGllfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGllKXt2YXIgRWU9aWUubGVuZ3RoLEFlPWllLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9aWUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUVlKSx0aGlzLm9mZnNldC09RWU7dmFyIEdlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEFlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09QWUubGVuZ3RoLTEpO3ZhciBCZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QWU/KEFlLmxlbmd0aD09PUdlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrR2VbR2UubGVuZ3RoLUFlLmxlbmd0aF0ubGVuZ3RoLUFlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQmVbMF0sQmVbMF0rdGhpcy55eWxlbmctRWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihpZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGllKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgaWU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihpZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2llLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGllPXRoaXMubWF0Y2g7cmV0dXJuIGllLmxlbmd0aDwyMCYmKGllKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1pZS5sZW5ndGgpKSwoaWUuc3Vic3RyKDAsMjApKyhpZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBpZT10aGlzLnBhc3RJbnB1dCgpLEVlPW5ldyBBcnJheShpZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBpZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRWUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGllLEVlKXt2YXIgQWUsR2UsQmU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEJlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEJlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEdlPWllWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxHZSYmKHRoaXMueXlsaW5lbm8rPUdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkdlP0dlW0dlLmxlbmd0aC0xXS5sZW5ndGgtR2VbR2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4raWVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9aWVbMF0sdGhpcy5tYXRjaCs9aWVbMF0sdGhpcy5tYXRjaGVzPWllLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGllWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1pZVswXSxBZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxFZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxBZSlyZXR1cm4gQWU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG1lIGluIEJlKXRoaXNbbWVdPUJlW21lXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgaWUsRWUsQWUsR2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQmU9dGhpcy5fY3VycmVudFJ1bGVzKCksbWU9MDttZTxCZS5sZW5ndGg7bWUrKylpZihBZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0JlW21lXV0pLEFlJiYoIUVlfHxBZVswXS5sZW5ndGg+RWVbMF0ubGVuZ3RoKSl7aWYoRWU9QWUsR2U9bWUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoaWU9dGhpcy50ZXN0X21hdGNoKEFlLEJlW21lXSksaWUhPT0hMSlyZXR1cm4gaWU7aWYodGhpcy5fYmFja3RyYWNrKXtFZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFZT8oaWU9dGhpcy50ZXN0X21hdGNoKEVlLEJlW0dlXSksaWUhPT0hMT9pZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBFZT10aGlzLm5leHQoKTtyZXR1cm4gRWV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEVlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRWUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEVlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEVlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oRWUpe3JldHVybiBFZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEVlfHwwKSxFZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0VlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEVlKXt0aGlzLmJlZ2luKEVlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEVlLEFlLEdlLEJlKXt2YXIgbWU9QmU7c3dpdGNoKEdlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gNTU7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwzNTticmVhaztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzc7YnJlYWs7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzOTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA0ODtjYXNlIDE0OnJldHVybiA1MDtjYXNlIDE1OnJldHVybiA0OTtjYXNlIDE2OnJldHVybiA1MTtjYXNlIDE3OnJldHVybiA1MjtjYXNlIDE4OnJldHVybiA1MztjYXNlIDE5OnJldHVybiA1NDtjYXNlIDIwOnJldHVybiAyNTtjYXNlIDIxOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiJTVFIiO2Nhc2UgMjc6dGhpcy5iZWdpbigiY2xhc3NfbmFtZSIpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NzticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJwb2ludF9zdGFydCIpLDQ0O2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3giKSw0NTticmVhaztjYXNlIDMxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMyOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJwb2ludF95Iik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ2O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ7Y2FzZSAzNjpyZXR1cm4gMTE7Y2FzZSAzNzpyZXR1cm4gNjQ7Y2FzZSAzODpyZXR1cm4gMTA7Y2FzZSAzOTpyZXR1cm4gNjU7Y2FzZSA0MDpyZXR1cm4gNjU7Y2FzZSA0MTpyZXR1cm4gMTQ7Y2FzZSA0MjpyZXR1cm4gMTM7Y2FzZSA0MzpyZXR1cm4gNjc7Y2FzZSA0NDpyZXR1cm4gNjY7Y2FzZSA0NTpyZXR1cm4gMTI7Y2FzZSA0NjpyZXR1cm4gODtjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6cmV0dXJuIDU2O2Nhc2UgNTA6cmV0dXJuIDYzO2Nhc2UgNTE6cmV0dXJuIDU3fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OmNsYXNzRGVmXGIpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Ojo6OikvaSwvXig/Ol5cdyspL2ksL14oPzpccyo6XHMqXFtccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OlxzKlxdICopL2ksL14oPzpccyosXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzogKnF1YWRyYW50Q2hhcnQgKikvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86PSkvaSwvXig/OlwqKS9pLC9eKD86IykvaSwvXig/OltcX10pL2ksL14oPzpcLikvaSwvXig/OiYpL2ksL14oPzotKS9pLC9eKD86WzAtOV0rKS9pLC9eKD86XHMpL2ksL14oPzo7KS9pLC9eKD86WyEiIyQlJicqKywtLmA/XFxfL10pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntjbGFzc19uYW1lOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0scG9pbnRfeTp7cnVsZXM6WzMzXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlszMl0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzMwLDMxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI1LDI2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDI0LDI3LDI5LDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFRlfSgpO25lLmxleGVyPXZlO2Z1bmN0aW9uIFUoKXt0aGlzLnl5PXt9fXJldHVybiBvKFUsIlBhcnNlciIpLFUucHJvdG90eXBlPW5lLG5lLlBhcnNlcj1VLG5ldyBVfSgpO2FPLnBhcnNlcj1hTztPaGU9YU99KTt2YXIgcHMsRUUsQmhlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTticygpO3V0KCk7aTQoKTtwcz12cCgpLEVFPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPW5ldyBNYXA7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCl9c3RhdGlje28odGhpcywiUXVhZHJhbnRCdWlsZGVyIil9Z2V0RGVmYXVsdERhdGEoKXtyZXR1cm57dGl0bGVUZXh0OiIiLHF1YWRyYW50MVRleHQ6IiIscXVhZHJhbnQyVGV4dDoiIixxdWFkcmFudDNUZXh0OiIiLHF1YWRyYW50NFRleHQ6IiIseEF4aXNMZWZ0VGV4dDoiIix4QXhpc1JpZ2h0VGV4dDoiIix5QXhpc0JvdHRvbVRleHQ6IiIseUF4aXNUb3BUZXh0OiIiLHBvaW50czpbXX19Z2V0RGVmYXVsdENvbmZpZygpe3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDp1ci5xdWFkcmFudENoYXJ0Py5jaGFydFdpZHRofHw1MDAsY2hhcnRXaWR0aDp1ci5xdWFkcmFudENoYXJ0Py5jaGFydEhlaWdodHx8NTAwLHRpdGxlUGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py50aXRsZVBhZGRpbmd8fDEwLHRpdGxlRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8udGl0bGVGb250U2l6ZXx8MjAscXVhZHJhbnRQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50UGFkZGluZ3x8NSx4QXhpc0xhYmVsUGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsUGFkZGluZ3x8NSx5QXhpc0xhYmVsUGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsUGFkZGluZ3x8NSx4QXhpc0xhYmVsRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8ueEF4aXNMYWJlbEZvbnRTaXplfHwxNix5QXhpc0xhYmVsRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8ueUF4aXNMYWJlbEZvbnRTaXplfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRMYWJlbEZvbnRTaXplfHwxNixxdWFkcmFudFRleHRUb3BQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50VGV4dFRvcFBhZGRpbmd8fDUscG9pbnRUZXh0UGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py5wb2ludFRleHRQYWRkaW5nfHw1LHBvaW50TGFiZWxGb250U2l6ZTp1ci5xdWFkcmFudENoYXJ0Py5wb2ludExhYmVsRm9udFNpemV8fDEyLHBvaW50UmFkaXVzOnVyLnF1YWRyYW50Q2hhcnQ/LnBvaW50UmFkaXVzfHw1LHhBeGlzUG9zaXRpb246dXIucXVhZHJhbnRDaGFydD8ueEF4aXNQb3NpdGlvbnx8InRvcCIseUF4aXNQb3NpdGlvbjp1ci5xdWFkcmFudENoYXJ0Py55QXhpc1Bvc2l0aW9ufHwibGVmdCIscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOnVyLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aHx8MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRofHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpwcy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6cHMucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOnBzLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpwcy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOnBzLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOnBzLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOnBzLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOnBzLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOnBzLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpwcy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOnBzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6cHMucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOnBzLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOnBzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOnBzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLFkuaW5mbygiY2xlYXIgY2FsbGVkIil9c2V0RGF0YShlKXt0aGlzLmRhdGE9ey4uLnRoaXMuZGF0YSwuLi5lfX1hZGRQb2ludHMoZSl7dGhpcy5kYXRhLnBvaW50cz1bLi4uZSwuLi50aGlzLmRhdGEucG9pbnRzXX1hZGRDbGFzcyhlLHIpe3RoaXMuY2xhc3Nlcy5zZXQoZSxyKX1zZXRDb25maWcoZSl7WS50cmFjZSgic2V0Q29uZmlnIGNhbGxlZCB3aXRoOiAiLGUpLHRoaXMuY29uZmlnPXsuLi50aGlzLmNvbmZpZywuLi5lfX1zZXRUaGVtZUNvbmZpZyhlKXtZLnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixlKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmV9fWNhbGN1bGF0ZVNwYWNlKGUscixuLGkpe2xldCBhPXRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHM9e3RvcDplPT09InRvcCImJnI/YTowLGJvdHRvbTplPT09ImJvdHRvbSImJnI/YTowfSxsPXRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHU9e2xlZnQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmbj9sOjAscmlnaHQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJyaWdodCImJm4/bDowfSxoPXRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUrdGhpcy5jb25maWcudGl0bGVQYWRkaW5nKjIsZj17dG9wOmk/aDowfSxkPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyt1LmxlZnQscD10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcrcy50b3ArZi50b3AsbT10aGlzLmNvbmZpZy5jaGFydFdpZHRoLXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyoyLXUubGVmdC11LnJpZ2h0LGc9dGhpcy5jb25maWcuY2hhcnRIZWlnaHQtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItcy50b3Atcy5ib3R0b20tZi50b3AseT1tLzIsdj1nLzI7cmV0dXJue3hBeGlzU3BhY2U6cyx5QXhpc1NwYWNlOnUsdGl0bGVTcGFjZTpmLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpkLHF1YWRyYW50VG9wOnAscXVhZHJhbnRXaWR0aDptLHF1YWRyYW50SGFsZldpZHRoOnkscXVhZHJhbnRIZWlnaHQ6ZyxxdWFkcmFudEhhbGZIZWlnaHQ6dn19fWdldEF4aXNMYWJlbHMoZSxyLG4saSl7bGV0e3F1YWRyYW50U3BhY2U6YSx0aXRsZVNwYWNlOnN9PWkse3F1YWRyYW50SGFsZkhlaWdodDpsLHF1YWRyYW50SGVpZ2h0OnUscXVhZHJhbnRMZWZ0OmgscXVhZHJhbnRIYWxmV2lkdGg6ZixxdWFkcmFudFRvcDpkLHF1YWRyYW50V2lkdGg6cH09YSxtPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGc9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LHk9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZyJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OmgrKG0/Zi8yOjApLHk6ZT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK3MudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2QrdSt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOm0/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmciYmeS5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6aCtmKyhtP2YvMjowKSx5OmU9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytzLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytkK3UrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczptPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZuJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytoK3ArdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6ZCt1LShnP2wvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Zz8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZuJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytoK3ArdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6ZCtsLShnP2wvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Zz8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx5fWdldFF1YWRyYW50cyhlKXtsZXR7cXVhZHJhbnRTcGFjZTpyfT1lLHtxdWFkcmFudEhhbGZIZWlnaHQ6bixxdWFkcmFudExlZnQ6aSxxdWFkcmFudEhhbGZXaWR0aDphLHF1YWRyYW50VG9wOnN9PXIsbD1be3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MVRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppK2EseTpzLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MUZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDJUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6aSx5OnMsd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50M1RleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M1RleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppLHk6cytuLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDRUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6aSthLHk6cytuLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGx9XTtmb3IobGV0IHUgb2YgbCl1LnRleHQueD11LngrdS53aWR0aC8yLHRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPT09MD8odS50ZXh0Lnk9dS55K3UuaGVpZ2h0LzIsdS50ZXh0Lmhvcml6b250YWxQb3M9Im1pZGRsZSIpOih1LnRleHQueT11LnkrdGhpcy5jb25maWcucXVhZHJhbnRUZXh0VG9wUGFkZGluZyx1LnRleHQuaG9yaXpvbnRhbFBvcz0idG9wIik7cmV0dXJuIGx9Z2V0UXVhZHJhbnRQb2ludHMoZSl7bGV0e3F1YWRyYW50U3BhY2U6cn09ZSx7cXVhZHJhbnRIZWlnaHQ6bixxdWFkcmFudExlZnQ6aSxxdWFkcmFudFRvcDphLHF1YWRyYW50V2lkdGg6c309cixsPUNsKCkuZG9tYWluKFswLDFdKS5yYW5nZShbaSxzK2ldKSx1PUNsKCkuZG9tYWluKFswLDFdKS5yYW5nZShbbithLGFdKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoZj0+e2xldCBkPXRoaXMuY2xhc3Nlcy5nZXQoZi5jbGFzc05hbWUpO3JldHVybiBkJiYoZj17Li4uZCwuLi5mfSkse3g6bChmLngpLHk6dShmLnkpLGZpbGw6Zi5jb2xvcj8/dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50RmlsbCxyYWRpdXM6Zi5yYWRpdXM/P3RoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6Zi50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDpsKGYueCkseTp1KGYueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfSxzdHJva2VDb2xvcjpmLnN0cm9rZUNvbG9yPz90aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHN0cm9rZVdpZHRoOmYuc3Ryb2tlV2lkdGg/PyIwcHgifX0pfWdldEJvcmRlcnMoZSl7bGV0IHI9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6bn09ZSx7cXVhZHJhbnRIYWxmSGVpZ2h0OmkscXVhZHJhbnRIZWlnaHQ6YSxxdWFkcmFudExlZnQ6cyxxdWFkcmFudEhhbGZXaWR0aDpsLHF1YWRyYW50VG9wOnUscXVhZHJhbnRXaWR0aDpofT1uO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzLXIseTE6dSx4MjpzK2grcix5Mjp1fSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzK2gseTE6dStyLHgyOnMraCx5Mjp1K2Etcn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cy1yLHkxOnUrYSx4MjpzK2grcix5Mjp1K2F9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMseTE6dStyLHgyOnMseTI6dSthLXJ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMrbCx5MTp1K3IseDI6cytsLHkyOnUrYS1yfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzK3IseTE6dStpLHgyOnMraC1yLHkyOnUraX1dfWdldFRpdGxlKGUpe2lmKGUpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7bGV0IGU9dGhpcy5jb25maWcuc2hvd1hBeGlzJiYhISh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dHx8dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KSxyPXRoaXMuY29uZmlnLnNob3dZQXhpcyYmISEodGhpcy5kYXRhLnlBeGlzVG9wVGV4dHx8dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCksbj10aGlzLmNvbmZpZy5zaG93VGl0bGUmJiEhdGhpcy5kYXRhLnRpdGxlVGV4dCxpPXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPjA/ImJvdHRvbSI6dGhpcy5jb25maWcueEF4aXNQb3NpdGlvbixhPXRoaXMuY2FsY3VsYXRlU3BhY2UoaSxlLHIsbik7cmV0dXJue3BvaW50czp0aGlzLmdldFF1YWRyYW50UG9pbnRzKGEpLHF1YWRyYW50czp0aGlzLmdldFF1YWRyYW50cyhhKSxheGlzTGFiZWxzOnRoaXMuZ2V0QXhpc0xhYmVscyhpLGUscixhKSxib3JkZXJMaW5lczp0aGlzLmdldEJvcmRlcnMoYSksdGl0bGU6dGhpcy5nZXRUaXRsZShuKX19fX0pO2Z1bmN0aW9uIHNPKHQpe3JldHVybiEvXiM/KFtcZEEtRmEtZl17Nn18W1xkQS1GYS1mXXszfSkkLy50ZXN0KHQpfWZ1bmN0aW9uIEZoZSh0KXtyZXR1cm4hL15cZCskLy50ZXN0KHQpfWZ1bmN0aW9uIHpoZSh0KXtyZXR1cm4hL15cZCtweCQvLnRlc3QodCl9dmFyIFIwLEdoZT1NKCgpPT57InVzZSBzdHJpY3QiO1IwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiSW52YWxpZFN0eWxlRXJyb3IiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoYHZhbHVlIGZvciAke2V9ICR7cn0gaXMgaW52YWxpZCwgcGxlYXNlIHVzZSBhIHZhbGlkICR7bn1gKSx0aGlzLm5hbWU9IkludmFsaWRTdHlsZUVycm9yIn19O28oc08sInZhbGlkYXRlSGV4Q29kZSIpO28oRmhlLCJ2YWxpZGF0ZU51bWJlciIpO28oemhlLCJ2YWxpZGF0ZVNpemVJblBpeGVscyIpfSk7ZnVuY3Rpb24gdGgodCl7cmV0dXJuIGtyKHQudHJpbSgpLGxWZSl9ZnVuY3Rpb24gY1ZlKHQpe0VhLnNldERhdGEoe3F1YWRyYW50MVRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIHVWZSh0KXtFYS5zZXREYXRhKHtxdWFkcmFudDJUZXh0OnRoKHQudGV4dCl9KX1mdW5jdGlvbiBoVmUodCl7RWEuc2V0RGF0YSh7cXVhZHJhbnQzVGV4dDp0aCh0LnRleHQpfSl9ZnVuY3Rpb24gZlZlKHQpe0VhLnNldERhdGEoe3F1YWRyYW50NFRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIGRWZSh0KXtFYS5zZXREYXRhKHt4QXhpc0xlZnRUZXh0OnRoKHQudGV4dCl9KX1mdW5jdGlvbiBwVmUodCl7RWEuc2V0RGF0YSh7eEF4aXNSaWdodFRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIG1WZSh0KXtFYS5zZXREYXRhKHt5QXhpc1RvcFRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIGdWZSh0KXtFYS5zZXREYXRhKHt5QXhpc0JvdHRvbVRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIG9PKHQpe2xldCBlPXt9O2ZvcihsZXQgciBvZiB0KXtsZXRbbixpXT1yLnRyaW0oKS5zcGxpdCgvXHMqOlxzKi8pO2lmKG49PT0icmFkaXVzIil7aWYoRmhlKGkpKXRocm93IG5ldyBSMChuLGksIm51bWJlciIpO2UucmFkaXVzPXBhcnNlSW50KGkpfWVsc2UgaWYobj09PSJjb2xvciIpe2lmKHNPKGkpKXRocm93IG5ldyBSMChuLGksImhleCBjb2RlIik7ZS5jb2xvcj1pfWVsc2UgaWYobj09PSJzdHJva2UtY29sb3IiKXtpZihzTyhpKSl0aHJvdyBuZXcgUjAobixpLCJoZXggY29kZSIpO2Uuc3Ryb2tlQ29sb3I9aX1lbHNlIGlmKG49PT0ic3Ryb2tlLXdpZHRoIil7aWYoemhlKGkpKXRocm93IG5ldyBSMChuLGksIm51bWJlciBvZiBwaXhlbHMgKGVnLiAxMHB4KSIpO2Uuc3Ryb2tlV2lkdGg9aX1lbHNlIHRocm93IG5ldyBFcnJvcihgc3R5bGUgbmFtZWQgJHtufSBpcyBub3Qgc3VwcG9ydGVkLmApfXJldHVybiBlfWZ1bmN0aW9uIHlWZSh0LGUscixuLGkpe2xldCBhPW9PKGkpO0VhLmFkZFBvaW50cyhbe3g6cix5Om4sdGV4dDp0aCh0LnRleHQpLGNsYXNzTmFtZTplLC4uLmF9XSl9ZnVuY3Rpb24gdlZlKHQsZSl7RWEuYWRkQ2xhc3ModCxvTyhlKSl9ZnVuY3Rpb24geFZlKHQpe0VhLnNldENvbmZpZyh7Y2hhcnRXaWR0aDp0fSl9ZnVuY3Rpb24gYlZlKHQpe0VhLnNldENvbmZpZyh7Y2hhcnRIZWlnaHQ6dH0pfWZ1bmN0aW9uIHdWZSgpe2xldCB0PXBlKCkse3RoZW1lVmFyaWFibGVzOmUscXVhZHJhbnRDaGFydDpyfT10O3JldHVybiByJiZFYS5zZXRDb25maWcociksRWEuc2V0VGhlbWVDb25maWcoe3F1YWRyYW50MUZpbGw6ZS5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6ZS5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6ZS5xdWFkcmFudDNGaWxsLHF1YWRyYW50NEZpbGw6ZS5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOmUucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6ZS5xdWFkcmFudDJUZXh0RmlsbCxxdWFkcmFudDNUZXh0RmlsbDplLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOmUucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6ZS5xdWFkcmFudFBvaW50RmlsbCxxdWFkcmFudFBvaW50VGV4dEZpbGw6ZS5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOmUucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDplLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbDplLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmUucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRUaXRsZUZpbGw6ZS5xdWFkcmFudFRpdGxlRmlsbH0pLEVhLnNldERhdGEoe3RpdGxlVGV4dDpKcigpfSksRWEuYnVpbGQoKX12YXIgbFZlLEVhLFRWZSwkaGUsVmhlPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtmcigpO0FpKCk7QmhlKCk7R2hlKCk7bFZlPXBlKCk7byh0aCwidGV4dFNhbml0aXplciIpO0VhPW5ldyBFRTtvKGNWZSwic2V0UXVhZHJhbnQxVGV4dCIpO28odVZlLCJzZXRRdWFkcmFudDJUZXh0Iik7byhoVmUsInNldFF1YWRyYW50M1RleHQiKTtvKGZWZSwic2V0UXVhZHJhbnQ0VGV4dCIpO28oZFZlLCJzZXRYQXhpc0xlZnRUZXh0Iik7byhwVmUsInNldFhBeGlzUmlnaHRUZXh0Iik7byhtVmUsInNldFlBeGlzVG9wVGV4dCIpO28oZ1ZlLCJzZXRZQXhpc0JvdHRvbVRleHQiKTtvKG9PLCJwYXJzZVN0eWxlcyIpO28oeVZlLCJhZGRQb2ludCIpO28odlZlLCJhZGRDbGFzcyIpO28oeFZlLCJzZXRXaWR0aCIpO28oYlZlLCJzZXRIZWlnaHQiKTtvKHdWZSwiZ2V0UXVhZHJhbnREYXRhIik7VFZlPW8oZnVuY3Rpb24oKXtFYS5jbGVhcigpLExyKCl9LCJjbGVhciIpLCRoZT17c2V0V2lkdGg6eFZlLHNldEhlaWdodDpiVmUsc2V0UXVhZHJhbnQxVGV4dDpjVmUsc2V0UXVhZHJhbnQyVGV4dDp1VmUsc2V0UXVhZHJhbnQzVGV4dDpoVmUsc2V0UXVhZHJhbnQ0VGV4dDpmVmUsc2V0WEF4aXNMZWZ0VGV4dDpkVmUsc2V0WEF4aXNSaWdodFRleHQ6cFZlLHNldFlBeGlzVG9wVGV4dDptVmUsc2V0WUF4aXNCb3R0b21UZXh0OmdWZSxwYXJzZVN0eWxlczpvTyxhZGRQb2ludDp5VmUsYWRkQ2xhc3M6dlZlLGdldFF1YWRyYW50RGF0YTp3VmUsY2xlYXI6VFZlLHNldEFjY1RpdGxlOk1yLGdldEFjY1RpdGxlOkJyLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnIsZ2V0QWNjRGVzY3JpcHRpb246enIsc2V0QWNjRGVzY3JpcHRpb246RnJ9fSk7dmFyIGtWZSxVaGUsSGhlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtWdCgpO3V0KCk7YWkoKTtrVmU9bygodCxlLHIsbik9PntmdW5jdGlvbiBpKFMpe3JldHVybiBTPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifW8oaSwiZ2V0RG9taW5hbnRCYXNlTGluZSIpO2Z1bmN0aW9uIGEoUyl7cmV0dXJuIFM9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1vKGEsImdldFRleHRBbmNob3IiKTtmdW5jdGlvbiBzKFMpe3JldHVybmB0cmFuc2xhdGUoJHtTLnh9LCAke1MueX0pIHJvdGF0ZSgke1Mucm90YXRpb258fDB9KWB9byhzLCJnZXRUcmFuc2Zvcm1hdGlvbiIpO2xldCBsPXBlKCk7WS5kZWJ1ZyhgUmVuZGVyaW5nIHF1YWRyYW50IGNoYXJ0CmArdCk7bGV0IHU9bC5zZWN1cml0eUxldmVsLGg7dT09PSJzYW5kYm94IiYmKGg9VmUoIiNpIitlKSk7bGV0IGQ9KHU9PT0ic2FuZGJveCI/VmUoaC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpKS5zZWxlY3QoYFtpZD0iJHtlfSJdYCkscD1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLG09bC5xdWFkcmFudENoYXJ0Py5jaGFydFdpZHRoPz81MDAsZz1sLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0Pz81MDA7WnIoZCxnLG0sbC5xdWFkcmFudENoYXJ0Py51c2VNYXhXaWR0aD8/ITApLGQuYXR0cigidmlld0JveCIsIjAgMCAiK20rIiAiK2cpLG4uZGIuc2V0SGVpZ2h0KGcpLG4uZGIuc2V0V2lkdGgobSk7bGV0IHk9bi5kYi5nZXRRdWFkcmFudERhdGEoKSx2PXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudHMiKSx4PXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxiPXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50cyIpLHc9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVscyIpLF89cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7eS50aXRsZSYmXy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIix5LnRpdGxlLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIseS50aXRsZS5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGkoeS50aXRsZS5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLGEoeS50aXRsZS52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIscyh5LnRpdGxlKSkudGV4dCh5LnRpdGxlLnRleHQpLHkuYm9yZGVyTGluZXMmJnguc2VsZWN0QWxsKCJsaW5lIikuZGF0YSh5LmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixTPT5TLngxKS5hdHRyKCJ5MSIsUz0+Uy55MSkuYXR0cigieDIiLFM9PlMueDIpLmF0dHIoInkyIixTPT5TLnkyKS5zdHlsZSgic3Ryb2tlIixTPT5TLnN0cm9rZUZpbGwpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFM9PlMuc3Ryb2tlV2lkdGgpO2xldCBUPXYuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YSh5LnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7VC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixTPT5TLngpLmF0dHIoInkiLFM9PlMueSkuYXR0cigid2lkdGgiLFM9PlMud2lkdGgpLmF0dHIoImhlaWdodCIsUz0+Uy5oZWlnaHQpLmF0dHIoImZpbGwiLFM9PlMuZmlsbCksVC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixTPT5TLnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixTPT5TLnRleHQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixTPT5pKFMudGV4dC5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFM9PmEoUy50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixTPT5zKFMudGV4dCkpLnRleHQoUz0+Uy50ZXh0LnRleHQpLHcuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YSh5LmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoUz0+Uy50ZXh0KS5hdHRyKCJmaWxsIixTPT5TLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsUz0+Uy5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFM9PmkoUy5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFM9PmEoUy52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsUz0+cyhTKSk7bGV0IEw9Yi5zZWxlY3RBbGwoImcuZGF0YS1wb2ludCIpLmRhdGEoeS5wb2ludHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50Iik7TC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixTPT5TLngpLmF0dHIoImN5IixTPT5TLnkpLmF0dHIoInIiLFM9PlMucmFkaXVzKS5hdHRyKCJmaWxsIixTPT5TLmZpbGwpLmF0dHIoInN0cm9rZSIsUz0+Uy5zdHJva2VDb2xvcikuYXR0cigic3Ryb2tlLXdpZHRoIixTPT5TLnN0cm9rZVdpZHRoKSxMLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoUz0+Uy50ZXh0LnRleHQpLmF0dHIoImZpbGwiLFM9PlMudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFM9PlMudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFM9PmkoUy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsUz0+YShTLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFM9PnMoUy50ZXh0KSl9LCJkcmF3IiksVWhlPXtkcmF3OmtWZX19KTt2YXIgV2hlPXt9O3ZyKFdoZSx7ZGlhZ3JhbTooKT0+RVZlfSk7dmFyIEVWZSxZaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQaGUoKTtWaGUoKTtIaGUoKTtFVmU9e3BhcnNlcjpPaGUsZGI6JGhlLHJlbmRlcmVyOlVoZSxzdHlsZXM6bygoKT0+IiIsInN0eWxlcyIpfX0pO3ZhciBsTyxqaGUsS2hlPU0oKCk9PnsidXNlIHN0cmljdCI7bE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKE8sTixQLEYpe2ZvcihQPVB8fHt9LEY9Ty5sZW5ndGg7Ri0tO1BbT1tGXV09Tik7cmV0dXJuIFB9LCJvIiksZT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyM10scj1bMiw2XSxuPVsxLDNdLGk9WzEsNV0sYT1bMSw2XSxzPVsxLDddLGw9WzEsNSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sdT1bMSwyNV0saD1bMSwyNl0sZj1bMSwyOF0sZD1bMSwyOV0scD1bMSwzMF0sbT1bMSwzMV0sZz1bMSwzMl0seT1bMSwzM10sdj1bMSwzNF0seD1bMSwzNV0sYj1bMSwzNl0sdz1bMSwzN10sXz1bMSw0M10sVD1bMSw0Ml0sRT1bMSw0N10sTD1bMSw1MF0sUz1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sQT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNl0sST1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNiw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sRD1bMSw2NF0saz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxYWUNIQVJUOjUsY2hhcnRDb25maWc6Nixkb2N1bWVudDo3LENIQVJUX09SSUVOVEFUSU9OOjgsc3RhdGVtZW50OjksdGl0bGU6MTAsdGV4dDoxMSxYX0FYSVM6MTIscGFyc2VYQXhpczoxMyxZX0FYSVM6MTQscGFyc2VZQXhpczoxNSxMSU5FOjE2LHBsb3REYXRhOjE3LEJBUjoxOCxhY2NfdGl0bGU6MTksYWNjX3RpdGxlX3ZhbHVlOjIwLGFjY19kZXNjcjoyMSxhY2NfZGVzY3JfdmFsdWU6MjIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyMyxTUVVBUkVfQlJBQ0VTX1NUQVJUOjI0LGNvbW1hU2VwYXJhdGVkTnVtYmVyczoyNSxTUVVBUkVfQlJBQ0VTX0VORDoyNixOVU1CRVJfV0lUSF9ERUNJTUFMOjI3LENPTU1BOjI4LHhBeGlzRGF0YToyOSxiYW5kRGF0YTozMCxBUlJPV19ERUxJTUlURVI6MzEsY29tbWFTZXBhcmF0ZWRUZXh0czozMix5QXhpc0RhdGE6MzMsTkVXTElORTozNCxTRU1JOjM1LEVPRjozNixhbHBoYU51bTozNyxTVFI6MzgsTURfU1RSOjM5LGFscGhhTnVtVG9rZW46NDAsQU1QOjQxLE5VTTo0MixBTFBIQTo0MyxQTFVTOjQ0LEVRVUFMUzo0NSxNVUxUOjQ2LERPVDo0NyxCUktUOjQ4LE1JTlVTOjQ5LFVOREVSU0NPUkU6NTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlhZQ0hBUlQiLDg6IkNIQVJUX09SSUVOVEFUSU9OIiwxMDoidGl0bGUiLDEyOiJYX0FYSVMiLDE0OiJZX0FYSVMiLDE2OiJMSU5FIiwxODoiQkFSIiwxOToiYWNjX3RpdGxlIiwyMDoiYWNjX3RpdGxlX3ZhbHVlIiwyMToiYWNjX2Rlc2NyIiwyMjoiYWNjX2Rlc2NyX3ZhbHVlIiwyMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjQ6IlNRVUFSRV9CUkFDRVNfU1RBUlQiLDI2OiJTUVVBUkVfQlJBQ0VTX0VORCIsMjc6Ik5VTUJFUl9XSVRIX0RFQ0lNQUwiLDI4OiJDT01NQSIsMzE6IkFSUk9XX0RFTElNSVRFUiIsMzQ6Ik5FV0xJTkUiLDM1OiJTRU1JIiwzNjoiRU9GIiwzODoiU1RSIiwzOToiTURfU1RSIiw0MToiQU1QIiw0MjoiTlVNIiw0MzoiQUxQSEEiLDQ0OiJQTFVTIiw0NToiRVFVQUxTIiw0NjoiTVVMVCIsNDc6IkRPVCIsNDg6IkJSS1QiLDQ5OiJNSU5VUyIsNTA6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzMsMl0sWzMsMV0sWzYsMV0sWzcsMF0sWzcsMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksM10sWzksMl0sWzksM10sWzksMl0sWzksMl0sWzksMV0sWzE3LDNdLFsyNSwzXSxbMjUsMV0sWzEzLDFdLFsxMywyXSxbMTMsMV0sWzI5LDFdLFsyOSwzXSxbMzAsM10sWzMyLDNdLFszMiwxXSxbMTUsMV0sWzE1LDJdLFsxNSwxXSxbMzMsM10sWzQsMV0sWzQsMV0sWzQsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzM3LDFdLFszNywyXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihOLFAsRixCLEcseixXKXt2YXIgWj16Lmxlbmd0aC0xO3N3aXRjaChHKXtjYXNlIDU6Qi5zZXRPcmllbnRhdGlvbih6W1pdKTticmVhaztjYXNlIDk6Qi5zZXREaWFncmFtVGl0bGUoeltaXS50ZXh0LnRyaW0oKSk7YnJlYWs7Y2FzZSAxMjpCLnNldExpbmVEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSx6W1pdKTticmVhaztjYXNlIDEzOkIuc2V0TGluZURhdGEoeltaLTFdLHpbWl0pO2JyZWFrO2Nhc2UgMTQ6Qi5zZXRCYXJEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSx6W1pdKTticmVhaztjYXNlIDE1OkIuc2V0QmFyRGF0YSh6W1otMV0seltaXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9eltaXS50cmltKCksQi5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6Y2FzZSAxODp0aGlzLiQ9eltaXS50cmltKCksQi5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXpbWi0xXTticmVhaztjYXNlIDIwOnRoaXMuJD1bTnVtYmVyKHpbWi0yXSksLi4ueltaXV07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9W051bWJlcih6W1pdKV07YnJlYWs7Y2FzZSAyMjpCLnNldFhBeGlzVGl0bGUoeltaXSk7YnJlYWs7Y2FzZSAyMzpCLnNldFhBeGlzVGl0bGUoeltaLTFdKTticmVhaztjYXNlIDI0OkIuc2V0WEF4aXNUaXRsZSh7dHlwZToidGV4dCIsdGV4dDoiIn0pO2JyZWFrO2Nhc2UgMjU6Qi5zZXRYQXhpc0JhbmQoeltaXSk7YnJlYWs7Y2FzZSAyNjpCLnNldFhBeGlzUmFuZ2VEYXRhKE51bWJlcih6W1otMl0pLE51bWJlcih6W1pdKSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9eltaLTFdO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPVt6W1otMl0sLi4ueltaXV07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9W3pbWl1dO2JyZWFrO2Nhc2UgMzA6Qi5zZXRZQXhpc1RpdGxlKHpbWl0pO2JyZWFrO2Nhc2UgMzE6Qi5zZXRZQXhpc1RpdGxlKHpbWi0xXSk7YnJlYWs7Y2FzZSAzMjpCLnNldFlBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDMzOkIuc2V0WUF4aXNSYW5nZURhdGEoTnVtYmVyKHpbWi0yXSksTnVtYmVyKHpbWl0pKTticmVhaztjYXNlIDM3OnRoaXMuJD17dGV4dDp6W1pdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM4OnRoaXMuJD17dGV4dDp6W1pdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM5OnRoaXMuJD17dGV4dDp6W1pdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9eltaXTticmVhaztjYXNlIDQxOnRoaXMuJD16W1otMV0rIiIreltaXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbdChlLHIsezM6MSw0OjIsNzo0LDU6biwzNDppLDM1OmEsMzY6c30pLHsxOlszXX0sdChlLHIsezQ6Miw3OjQsMzo4LDU6biwzNDppLDM1OmEsMzY6c30pLHQoZSxyLHs0OjIsNzo0LDY6OSwzOjEwLDU6biw4OlsxLDExXSwzNDppLDM1OmEsMzY6c30pLHsxOlsyLDRdLDk6MTIsMTA6WzEsMTNdLDEyOlsxLDE0XSwxNDpbMSwxNV0sMTY6WzEsMTZdLDE4OlsxLDE3XSwxOTpbMSwxOF0sMjE6WzEsMTldLDIzOlsxLDIwXX0sdChsLFsyLDM0XSksdChsLFsyLDM1XSksdChsLFsyLDM2XSksezE6WzIsMV19LHQoZSxyLHs0OjIsNzo0LDM6MjEsNTpuLDM0OmksMzU6YSwzNjpzfSksezE6WzIsM119LHQobCxbMiw1XSksdChlLFsyLDddLHs0OjIyLDM0OmksMzU6YSwzNjpzfSksezExOjIzLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6MzksMTM6MzgsMjQ6XywyNzpULDI5OjQwLDMwOjQxLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6NDUsMTU6NDQsMjc6RSwzMzo0NiwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sezExOjQ5LDE3OjQ4LDI0OkwsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHsxMTo1MiwxNzo1MSwyNDpMLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MjA6WzEsNTNdfSx7MjI6WzEsNTRdfSx0KFMsWzIsMThdKSx7MTpbMiwyXX0sdChTLFsyLDhdKSx0KFMsWzIsOV0pLHQoQSxbMiwzN10sezQwOjU1LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9KSx0KEEsWzIsMzhdKSx0KEEsWzIsMzldKSx0KEksWzIsNDBdKSx0KEksWzIsNDJdKSx0KEksWzIsNDNdKSx0KEksWzIsNDRdKSx0KEksWzIsNDVdKSx0KEksWzIsNDZdKSx0KEksWzIsNDddKSx0KEksWzIsNDhdKSx0KEksWzIsNDldKSx0KEksWzIsNTBdKSx0KEksWzIsNTFdKSx0KFMsWzIsMTBdKSx0KFMsWzIsMjJdLHszMDo0MSwyOTo1NiwyNDpfLDI3OlR9KSx0KFMsWzIsMjRdKSx0KFMsWzIsMjVdKSx7MzE6WzEsNTddfSx7MTE6NTksMzI6NTgsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHQoUyxbMiwxMV0pLHQoUyxbMiwzMF0sezMzOjYwLDI3OkV9KSx0KFMsWzIsMzJdKSx7MzE6WzEsNjFdfSx0KFMsWzIsMTJdKSx7MTc6NjIsMjQ6TH0sezI1OjYzLDI3OkR9LHQoUyxbMiwxNF0pLHsxNzo2NSwyNDpMfSx0KFMsWzIsMTZdKSx0KFMsWzIsMTddKSx0KEksWzIsNDFdKSx0KFMsWzIsMjNdKSx7Mjc6WzEsNjZdfSx7MjY6WzEsNjddfSx7MjY6WzIsMjldLDI4OlsxLDY4XX0sdChTLFsyLDMxXSksezI3OlsxLDY5XX0sdChTLFsyLDEzXSksezI2OlsxLDcwXX0sezI2OlsyLDIxXSwyODpbMSw3MV19LHQoUyxbMiwxNV0pLHQoUyxbMiwyNl0pLHQoUyxbMiwyN10pLHsxMTo1OSwzMjo3MiwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sdChTLFsyLDMzXSksdChTLFsyLDE5XSksezI1OjczLDI3OkR9LHsyNjpbMiwyOF19LHsyNjpbMiwyMF19XSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSwxMDpbMiwzXSwyMTpbMiwyXSw3MjpbMiwyOF0sNzM6WzIsMjBdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTixQKXtpZihQLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoTik7ZWxzZXt2YXIgRj1uZXcgRXJyb3IoTik7dGhyb3cgRi5oYXNoPVAsRn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihOKXt2YXIgUD10aGlzLEY9WzBdLEI9W10sRz1bbnVsbF0sej1bXSxXPXRoaXMudGFibGUsWj0iIixqPTAsb2U9MCxLPTAsZWU9MixKPTEsSD16LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHE9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxRPXt5eTp7fX07Zm9yKHZhciBhZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGFlKSYmKFEueXlbYWVdPXRoaXMueXlbYWVdKTtxLnNldElucHV0KE4sUS55eSksUS55eS5sZXhlcj1xLFEueXkucGFyc2VyPXRoaXMsdHlwZW9mIHEueXlsbG9jPiJ1IiYmKHEueXlsbG9jPXt9KTt2YXIgdWU9cS55eWxsb2M7ei5wdXNoKHVlKTt2YXIgY2U9cS5vcHRpb25zJiZxLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBRLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVEueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdGUobmUpe0YubGVuZ3RoPUYubGVuZ3RoLTIqbmUsRy5sZW5ndGg9Ry5sZW5ndGgtbmUsei5sZW5ndGg9ei5sZW5ndGgtbmV9byh0ZSwicG9wU3RhY2siKTtmdW5jdGlvbiBOZSgpe3ZhciBuZTtyZXR1cm4gbmU9Qi5wb3AoKXx8cS5sZXgoKXx8Six0eXBlb2YgbmUhPSJudW1iZXIiJiYobmUgaW5zdGFuY2VvZiBBcnJheSYmKEI9bmUsbmU9Qi5wb3AoKSksbmU9UC5zeW1ib2xzX1tuZV18fG5lKSxuZX1vKE5lLCJsZXgiKTtmb3IodmFyIHNlLGtlLFJlLENlLFBlLEllLCRlPXt9LHllLFgsZmUsaGU7Oyl7aWYoUmU9RltGLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1JlXT9DZT10aGlzLmRlZmF1bHRBY3Rpb25zW1JlXTooKHNlPT09bnVsbHx8dHlwZW9mIHNlPiJ1IikmJihzZT1OZSgpKSxDZT1XW1JlXSYmV1tSZV1bc2VdKSx0eXBlb2YgQ2U+InUifHwhQ2UubGVuZ3RofHwhQ2VbMF0pe3ZhciBnZT0iIjtoZT1bXTtmb3IoeWUgaW4gV1tSZV0pdGhpcy50ZXJtaW5hbHNfW3llXSYmeWU+ZWUmJmhlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1t5ZV0rIiciKTtxLnNob3dQb3NpdGlvbj9nZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhqKzEpK2A6CmArcS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2hlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bc2VdfHxzZSkrIiciOmdlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGorMSkrIjogVW5leHBlY3RlZCAiKyhzZT09Sj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tzZV18fHNlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnZSx7dGV4dDpxLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tzZV18fHNlLGxpbmU6cS55eWxpbmVubyxsb2M6dWUsZXhwZWN0ZWQ6aGV9KX1pZihDZVswXWluc3RhbmNlb2YgQXJyYXkmJkNlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUmUrIiwgdG9rZW46ICIrc2UpO3N3aXRjaChDZVswXSl7Y2FzZSAxOkYucHVzaChzZSksRy5wdXNoKHEueXl0ZXh0KSx6LnB1c2gocS55eWxsb2MpLEYucHVzaChDZVsxXSksc2U9bnVsbCxrZT8oc2U9a2Usa2U9bnVsbCk6KG9lPXEueXlsZW5nLFo9cS55eXRleHQsaj1xLnl5bGluZW5vLHVlPXEueXlsbG9jLEs+MCYmSy0tKTticmVhaztjYXNlIDI6aWYoWD10aGlzLnByb2R1Y3Rpb25zX1tDZVsxXV1bMV0sJGUuJD1HW0cubGVuZ3RoLVhdLCRlLl8kPXtmaXJzdF9saW5lOnpbei5sZW5ndGgtKFh8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp6W3oubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46elt6Lmxlbmd0aC0oWHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp6W3oubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxjZSYmKCRlLl8kLnJhbmdlPVt6W3oubGVuZ3RoLShYfHwxKV0ucmFuZ2VbMF0selt6Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEllPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSgkZSxbWixvZSxqLFEueXksQ2VbMV0sRyx6XS5jb25jYXQoSCkpLHR5cGVvZiBJZTwidSIpcmV0dXJuIEllO1gmJihGPUYuc2xpY2UoMCwtMSpYKjIpLEc9Ry5zbGljZSgwLC0xKlgpLHo9ei5zbGljZSgwLC0xKlgpKSxGLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQ2VbMV1dWzBdKSxHLnB1c2goJGUuJCksei5wdXNoKCRlLl8kKSxmZT1XW0ZbRi5sZW5ndGgtMl1dW0ZbRi5sZW5ndGgtMV1dLEYucHVzaChmZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFI9ZnVuY3Rpb24oKXt2YXIgTz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFAsRil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihQLEYpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFApfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oTixQKXtyZXR1cm4gdGhpcy55eT1QfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1OLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPU4sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPU4sdGhpcy5tYXRjaGVkKz1OO3ZhciBQPU4ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBQPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxOfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKE4pe3ZhciBQPU4ubGVuZ3RoLEY9Ti5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PU4rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVApLHRoaXMub2Zmc2V0LT1QO3ZhciBCPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEYubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1GLmxlbmd0aC0xKTt2YXIgRz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Rj8oRi5sZW5ndGg9PT1CLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQltCLmxlbmd0aC1GLmxlbmd0aF0ubGVuZ3RoLUZbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1QfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0dbMF0sR1swXSt0aGlzLnl5bGVuZy1QXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oTil7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKE4pKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBOPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oTi5sZW5ndGg+MjA/Ii4uLiI6IiIpK04uc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgTj10aGlzLm1hdGNoO3JldHVybiBOLmxlbmd0aDwyMCYmKE4rPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLU4ubGVuZ3RoKSksKE4uc3Vic3RyKDAsMjApKyhOLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIE49dGhpcy5wYXN0SW5wdXQoKSxQPW5ldyBBcnJheShOLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIE4rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1ArIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKE4sUCl7dmFyIEYsQixHO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihHPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEcueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQj1OWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxCJiYodGhpcy55eWxpbmVubys9Qi5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpCP0JbQi5sZW5ndGgtMV0ubGVuZ3RoLUJbQi5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitOWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPU5bMF0sdGhpcy5tYXRjaCs9TlswXSx0aGlzLm1hdGNoZXM9Tix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShOWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1OWzBdLEY9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxGKXJldHVybiBGO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB6IGluIEcpdGhpc1t6XT1HW3pdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBOLFAsRixCO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEc9dGhpcy5fY3VycmVudFJ1bGVzKCksej0wO3o8Ry5sZW5ndGg7eisrKWlmKEY9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tHW3pdXSksRiYmKCFQfHxGWzBdLmxlbmd0aD5QWzBdLmxlbmd0aCkpe2lmKFA9RixCPXosdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoTj10aGlzLnRlc3RfbWF0Y2goRixHW3pdKSxOIT09ITEpcmV0dXJuIE47aWYodGhpcy5fYmFja3RyYWNrKXtQPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFA/KE49dGhpcy50ZXN0X21hdGNoKFAsR1tCXSksTiE9PSExP046ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgUD10aGlzLm5leHQoKTtyZXR1cm4gUHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oUCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFApfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gUD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKFApe3JldHVybiBQPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoUHx8MCksUD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1BdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oUCl7dGhpcy5iZWdpbihQKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFAsRixCLEcpe3ZhciB6PUc7c3dpdGNoKEIpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzQ7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzQ7YnJlYWs7Y2FzZSA0OnJldHVybiAzNDtjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxMDtjYXNlIDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfdGl0bGUiKSwxOTticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3IiKSwyMTticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDU7Y2FzZSAxNTpyZXR1cm4gODtjYXNlIDE2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19kYXRhIiksIlhfQVhJUyI7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJZX0FYSVMiO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2JhbmRfZGF0YSIpLDI0O2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDMxO2Nhc2UgMjA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTY7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGEiKSwxODticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YV9pbm5lciIpLDI0O2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI3O2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI4OnJldHVybiJTVFIiO2Nhc2UgMjk6cmV0dXJuIDI0O2Nhc2UgMzA6cmV0dXJuIDI2O2Nhc2UgMzE6cmV0dXJuIDQzO2Nhc2UgMzI6cmV0dXJuIkNPTE9OIjtjYXNlIDMzOnJldHVybiA0NDtjYXNlIDM0OnJldHVybiAyODtjYXNlIDM1OnJldHVybiA0NTtjYXNlIDM2OnJldHVybiA0NjtjYXNlIDM3OnJldHVybiA0ODtjYXNlIDM4OnJldHVybiA1MDtjYXNlIDM5OnJldHVybiA0NztjYXNlIDQwOnJldHVybiA0MTtjYXNlIDQxOnJldHVybiA0OTtjYXNlIDQyOnJldHVybiA0MjtjYXNlIDQzOmJyZWFrO2Nhc2UgNDQ6cmV0dXJuIDM1O2Nhc2UgNDU6cmV0dXJuIDM2fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oihccj9cbikpL2ksL14oPzooXHI/XG4pKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpceykvaSwvXig/OlteXH1dKikvaSwvXig/Onh5Y2hhcnQtYmV0YVxiKS9pLC9eKD86KD86dmVydGljYWx8aG9yaXpvbnRhbCkpL2ksL14oPzp4LWF4aXNcYikvaSwvXig/OnktYXhpc1xiKS9pLC9eKD86XFspL2ksL14oPzotLT4pL2ksL14oPzpsaW5lXGIpL2ksL14oPzpiYXJcYikvaSwvXig/OlxbKS9pLC9eKD86WystXT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSkvaSwvXig/OlxdKS9pLC9eKD86KD86YFwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHsgdGhpc1wucHVzaFN0YXRlXChtZF9zdHJpbmdcKTsgXH1cbjxtZF9zdHJpbmc+XChcPzpcKFw/IWAiXClcLlwpXCsgICAgICAgICAgICAgICAgICBceyByZXR1cm4gTURfU1RSOyBcfVxuPG1kX3N0cmluZz5cKFw/OmApKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKykvaSwvXig/OjspL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntkYXRhX2lubmVyOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMywyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxkYXRhOntydWxlczpbMCwxLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDIyLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGF4aXNfYmFuZF9kYXRhOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2RhdGE6e3J1bGVzOlswLDEsMiw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjMsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE99KCk7ay5sZXhlcj1SO2Z1bmN0aW9uIEMoKXt0aGlzLnl5PXt9fXJldHVybiBvKEMsIlBhcnNlciIpLEMucHJvdG90eXBlPWssay5QYXJzZXI9QyxuZXcgQ30oKTtsTy5wYXJzZXI9bE87amhlPWxPfSk7ZnVuY3Rpb24gY08odCl7cmV0dXJuIHQudHlwZT09PSJiYXIifWZ1bmN0aW9uIFNFKHQpe3JldHVybiB0LnR5cGU9PT0iYmFuZCJ9ZnVuY3Rpb24gcWcodCl7cmV0dXJuIHQudHlwZT09PSJsaW5lYXIifXZhciBDRT1NKCgpPT57InVzZSBzdHJpY3QiO28oY08sImlzQmFyUGxvdCIpO28oU0UsImlzQmFuZEF4aXNEYXRhIik7byhxZywiaXNMaW5lYXJBeGlzRGF0YSIpfSk7dmFyIFhnLHVPPU0oKCk9PnsidXNlIHN0cmljdCI7UGwoKTtYZz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnBhcmVudEdyb3VwPWV9c3RhdGlje28odGhpcywiVGV4dERpbWVuc2lvbkNhbGN1bGF0b3JXaXRoRm9udCIpfWdldE1heERpbWVuc2lvbihlLHIpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDplLnJlZHVjZSgoYSxzKT0+TWF0aC5tYXgocy5sZW5ndGgsYSksMCkqcixoZWlnaHQ6cn07bGV0IG49e3dpZHRoOjAsaGVpZ2h0OjB9LGk9dGhpcy5wYXJlbnRHcm91cC5hcHBlbmQoImciKS5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuYXR0cigiZm9udC1zaXplIixyKTtmb3IobGV0IGEgb2YgZSl7bGV0IHM9ZGooaSwxLGEpLGw9cz9zLndpZHRoOmEubGVuZ3RoKnIsdT1zP3MuaGVpZ2h0OnI7bi53aWR0aD1NYXRoLm1heChuLndpZHRoLGwpLG4uaGVpZ2h0PU1hdGgubWF4KG4uaGVpZ2h0LHUpfXJldHVybiBpLnJlbW92ZSgpLG59fX0pO3ZhciBqZyxoTz1NKCgpPT57InVzZSBzdHJpY3QiO2pnPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuYXhpc0NvbmZpZz1lO3RoaXMudGl0bGU9cjt0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yPW47dGhpcy5heGlzVGhlbWVDb25maWc9aTt0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfTt0aGlzLmF4aXNQb3NpdGlvbj0ibGVmdCI7dGhpcy5zaG93VGl0bGU9ITE7dGhpcy5zaG93TGFiZWw9ITE7dGhpcy5zaG93VGljaz0hMTt0aGlzLnNob3dBeGlzTGluZT0hMTt0aGlzLm91dGVyUGFkZGluZz0wO3RoaXMudGl0bGVUZXh0SGVpZ2h0PTA7dGhpcy5sYWJlbFRleHRIZWlnaHQ9MDt0aGlzLnJhbmdlPVswLDEwXSx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLmF4aXNQb3NpdGlvbj0ibGVmdCJ9c3RhdGlje28odGhpcywiQmFzZUF4aXMiKX1zZXRSYW5nZShlKXt0aGlzLnJhbmdlPWUsdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZVsxXS1lWzBdOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWVbMV0tZVswXSx0aGlzLnJlY2FsY3VsYXRlU2NhbGUoKX1nZXRSYW5nZSgpe3JldHVyblt0aGlzLnJhbmdlWzBdK3RoaXMub3V0ZXJQYWRkaW5nLHRoaXMucmFuZ2VbMV0tdGhpcy5vdXRlclBhZGRpbmddfXNldEF4aXNQb3NpdGlvbihlKXt0aGlzLmF4aXNQb3NpdGlvbj1lLHRoaXMuc2V0UmFuZ2UodGhpcy5yYW5nZSl9Z2V0VGlja0Rpc3RhbmNlKCl7bGV0IGU9dGhpcy5nZXRSYW5nZSgpO3JldHVybiBNYXRoLmFicyhlWzBdLWVbMV0pL3RoaXMuZ2V0VGlja1ZhbHVlcygpLmxlbmd0aH1nZXRBeGlzT3V0ZXJQYWRkaW5nKCl7cmV0dXJuIHRoaXMub3V0ZXJQYWRkaW5nfWdldExhYmVsRGltZW5zaW9uKCl7cmV0dXJuIHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKHRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChlPT5lLnRvU3RyaW5nKCkpLHRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplKX1yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0Jhcigpey43KnRoaXMuZ2V0VGlja0Rpc3RhbmNlKCk+dGhpcy5vdXRlclBhZGRpbmcqMiYmKHRoaXMub3V0ZXJQYWRkaW5nPU1hdGguZmxvb3IoLjcqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGUpe2xldCByPWUuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnI+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJihyLT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7bGV0IG49dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLGk9LjIqZS53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihuLndpZHRoLzIsaSk7bGV0IGE9bi5oZWlnaHQrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyoyO3RoaXMubGFiZWxUZXh0SGVpZ2h0PW4uaGVpZ2h0LGE8PXImJihyLT1hLHRoaXMuc2hvd0xhYmVsPSEwKX1pZih0aGlzLmF4aXNDb25maWcuc2hvd1RpY2smJnI+PXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoJiYodGhpcy5zaG93VGljaz0hMCxyLT10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCksdGhpcy5heGlzQ29uZmlnLnNob3dUaXRsZSYmdGhpcy50aXRsZSl7bGV0IG49dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSxpPW4uaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1uLmhlaWdodCxpPD1yJiYoci09aSx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHQtcn1jYWxjdWxhdGVTcGFjZUlmRHJhd25WZXJ0aWNhbChlKXtsZXQgcj1lLndpZHRoO2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnI+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJihyLT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7bGV0IG49dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLGk9LjIqZS5oZWlnaHQ7dGhpcy5vdXRlclBhZGRpbmc9TWF0aC5taW4obi5oZWlnaHQvMixpKTtsZXQgYT1uLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjthPD1yJiYoci09YSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZyPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsci09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2xldCBuPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksaT1uLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9bi5oZWlnaHQsaTw9ciYmKHItPWksdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWUud2lkdGgtcix0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHR9Y2FsY3VsYXRlU3BhY2UoZSl7cmV0dXJuIHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQifHx0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCI/dGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25WZXJ0aWNhbChlKTp0aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3bkhvcml6b250YWxseShlKSx0aGlzLnJlY2FsY3VsYXRlU2NhbGUoKSx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19c2V0Qm91bmRpbmdCb3hYWShlKXt0aGlzLmJvdW5kaW5nUmVjdC54PWUueCx0aGlzLmJvdW5kaW5nUmVjdC55PWUueX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yTGVmdEF4aXMoKXtsZXQgZT1bXTtpZih0aGlzLnNob3dBeGlzTGluZSl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3J9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3J9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChyPT4oe3RleHQ6ci50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUociksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsibGVmdC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChuPT4oe3BhdGg6YE0gJHtyfSwke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0gTCAke3ItdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MjcwLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGV9Z2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKXtsZXQgZT1bXTtpZih0aGlzLnNob3dBeGlzTGluZSl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke3J9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke3J9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocj0+KHt0ZXh0OnIudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZShyKSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChuPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cn0gTCAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLnJhbmdlWzBdKyh0aGlzLnJhbmdlWzFdLXRoaXMucmFuZ2VbMF0pLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC10aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLXRoaXMudGl0bGVUZXh0SGVpZ2h0LGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGV9Z2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKXtsZXQgZT1bXTtpZih0aGlzLnNob3dBeGlzTGluZSl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtyfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtyfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHI9Pih7dGV4dDpyLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUocikseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueTtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3IrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX0gTCAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHMoKXtpZih0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IilyZXR1cm4gdGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yTGVmdEF4aXMoKTtpZih0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCIpdGhyb3cgRXJyb3IoIkRyYXdpbmcgb2YgcmlnaHQgYXhpcyBpcyBub3QgaW1wbGVtZW50ZWQiKTtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0iYm90dG9tIj90aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JCb3R0b21BeGlzKCk6dGhpcy5heGlzUG9zaXRpb249PT0idG9wIj90aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JUb3BBeGlzKCk6W119fX0pO3ZhciBBRSxRaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3V0KCk7aE8oKTtBRT1jbGFzcyBleHRlbmRzIGpne3N0YXRpY3tvKHRoaXMsIkJhbmRBeGlzIil9Y29uc3RydWN0b3IoZSxyLG4saSxhKXtzdXBlcihlLGksYSxyKSx0aGlzLmNhdGVnb3JpZXM9bix0aGlzLnNjYWxlPVZwKCkuZG9tYWluKHRoaXMuY2F0ZWdvcmllcykucmFuZ2UodGhpcy5nZXRSYW5nZSgpKX1zZXRSYW5nZShlKXtzdXBlci5zZXRSYW5nZShlKX1yZWNhbGN1bGF0ZVNjYWxlKCl7dGhpcy5zY2FsZT1WcCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksWS50cmFjZSgiQmFuZEF4aXMgYXhpcyBmaW5hbCBjYXRlZ29yaWVzLCByYW5nZTogIix0aGlzLmNhdGVnb3JpZXMsdGhpcy5nZXRSYW5nZSgpKX1nZXRUaWNrVmFsdWVzKCl7cmV0dXJuIHRoaXMuY2F0ZWdvcmllc31nZXRTY2FsZVZhbHVlKGUpe3JldHVybiB0aGlzLnNjYWxlKGUpPz90aGlzLmdldFJhbmdlKClbMF19fX0pO3ZhciBfRSxaaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO2hPKCk7X0U9Y2xhc3MgZXh0ZW5kcyBqZ3tzdGF0aWN7byh0aGlzLCJMaW5lYXJBeGlzIil9Y29uc3RydWN0b3IoZSxyLG4saSxhKXtzdXBlcihlLGksYSxyKSx0aGlzLmRvbWFpbj1uLHRoaXMuc2NhbGU9Q2woKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2xldCBlPVsuLi50aGlzLmRvbWFpbl07dGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCImJmUucmV2ZXJzZSgpLHRoaXMuc2NhbGU9Q2woKS5kb21haW4oZSkucmFuZ2UodGhpcy5nZXRSYW5nZSgpKX1nZXRTY2FsZVZhbHVlKGUpe3JldHVybiB0aGlzLnNjYWxlKGUpfX19KTtmdW5jdGlvbiBmTyh0LGUscixuKXtsZXQgaT1uZXcgWGcobik7cmV0dXJuIFNFKHQpP25ldyBBRShlLHIsdC5jYXRlZ29yaWVzLHQudGl0bGUsaSk6bmV3IF9FKGUscixbdC5taW4sdC5tYXhdLHQudGl0bGUsaSl9dmFyIEpoZT1NKCgpPT57InVzZSBzdHJpY3QiO0NFKCk7dU8oKTtRaGUoKTtaaGUoKTtvKGZPLCJnZXRBeGlzIil9KTtmdW5jdGlvbiBlZmUodCxlLHIsbil7bGV0IGk9bmV3IFhnKG4pO3JldHVybiBuZXcgZE8oaSx0LGUscil9dmFyIGRPLHRmZT1NKCgpPT57InVzZSBzdHJpY3QiO3VPKCk7ZE89Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1lO3RoaXMuY2hhcnRDb25maWc9cjt0aGlzLmNoYXJ0RGF0YT1uO3RoaXMuY2hhcnRUaGVtZUNvbmZpZz1pO3RoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuc2hvd0NoYXJ0VGl0bGU9ITF9c3RhdGlje28odGhpcywiQ2hhcnRUaXRsZSIpfXNldEJvdW5kaW5nQm94WFkoZSl7dGhpcy5ib3VuZGluZ1JlY3QueD1lLngsdGhpcy5ib3VuZGluZ1JlY3QueT1lLnl9Y2FsY3VsYXRlU3BhY2UoZSl7bGV0IHI9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMuY2hhcnREYXRhLnRpdGxlXSx0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUpLG49TWF0aC5tYXgoci53aWR0aCxlLndpZHRoKSxpPXIuaGVpZ2h0KzIqdGhpcy5jaGFydENvbmZpZy50aXRsZVBhZGRpbmc7cmV0dXJuIHIud2lkdGg8PW4mJnIuaGVpZ2h0PD1pJiZ0aGlzLmNoYXJ0Q29uZmlnLnNob3dUaXRsZSYmdGhpcy5jaGFydERhdGEudGl0bGUmJih0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1uLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1pLHRoaXMuc2hvd0NoYXJ0VGl0bGU9ITApLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1nZXREcmF3YWJsZUVsZW1lbnRzKCl7bGV0IGU9W107cmV0dXJuIHRoaXMuc2hvd0NoYXJ0VGl0bGUmJmUucHVzaCh7Z3JvdXBUZXh0czpbImNoYXJ0LXRpdGxlIl0sdHlwZToidGV4dCIsZGF0YTpbe2ZvbnRTaXplOnRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSx0ZXh0OnRoaXMuY2hhcnREYXRhLnRpdGxlLHZlcnRpY2FsUG9zOiJtaWRkbGUiLGhvcml6b250YWxQb3M6ImNlbnRlciIseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5jaGFydFRoZW1lQ29uZmlnLnRpdGxlQ29sb3Iscm90YXRpb246MH1dfSksZX19O28oZWZlLCJnZXRDaGFydFRpdGxlQ29tcG9uZW50Iil9KTt2YXIgTEUscmZlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtMRT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpLGEpe3RoaXMucGxvdERhdGE9ZTt0aGlzLnhBeGlzPXI7dGhpcy55QXhpcz1uO3RoaXMub3JpZW50YXRpb249aTt0aGlzLnBsb3RJbmRleD1hfXN0YXRpY3tvKHRoaXMsIkxpbmVQbG90Iil9Z2V0RHJhd2FibGVFbGVtZW50KCl7bGV0IGU9dGhpcy5wbG90RGF0YS5kYXRhLm1hcChuPT5bdGhpcy54QXhpcy5nZXRTY2FsZVZhbHVlKG5bMF0pLHRoaXMueUF4aXMuZ2V0U2NhbGVWYWx1ZShuWzFdKV0pLHI7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/cj1ucygpLnkobj0+blswXSkueChuPT5uWzFdKShlKTpyPW5zKCkueChuPT5uWzBdKS55KG49Pm5bMV0pKGUpLHI/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOnIsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fX0pO3ZhciBERSxuZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtERT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpLGEscyl7dGhpcy5iYXJEYXRhPWU7dGhpcy5ib3VuZGluZ1JlY3Q9cjt0aGlzLnhBeGlzPW47dGhpcy55QXhpcz1pO3RoaXMub3JpZW50YXRpb249YTt0aGlzLnBsb3RJbmRleD1zfXN0YXRpY3tvKHRoaXMsIkJhclBsb3QiKX1nZXREcmF3YWJsZUVsZW1lbnQoKXtsZXQgZT10aGlzLmJhckRhdGEuZGF0YS5tYXAoYT0+W3RoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShhWzBdKSx0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoYVsxXSldKSxuPU1hdGgubWluKHRoaXMueEF4aXMuZ2V0QXhpc091dGVyUGFkZGluZygpKjIsdGhpcy54QXhpcy5nZXRUaWNrRGlzdGFuY2UoKSkqKDEtLjA1KSxpPW4vMjtyZXR1cm4gdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj9be2dyb3VwVGV4dHM6WyJwbG90IixgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJyZWN0IixkYXRhOmUubWFwKGE9Pih7eDp0aGlzLmJvdW5kaW5nUmVjdC54LHk6YVswXS1pLGhlaWdodDpuLHdpZHRoOmFbMV0tdGhpcy5ib3VuZGluZ1JlY3QueCxmaWxsOnRoaXMuYmFyRGF0YS5maWxsLHN0cm9rZVdpZHRoOjAsc3Ryb2tlRmlsbDp0aGlzLmJhckRhdGEuZmlsbH0pKX1dOlt7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6ZS5tYXAoYT0+KHt4OmFbMF0taSx5OmFbMV0sd2lkdGg6bixoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtYVsxXSxmaWxsOnRoaXMuYmFyRGF0YS5maWxsLHN0cm9rZVdpZHRoOjAsc3Ryb2tlRmlsbDp0aGlzLmJhckRhdGEuZmlsbH0pKX1dfX19KTtmdW5jdGlvbiBpZmUodCxlLHIpe3JldHVybiBuZXcgcE8odCxlLHIpfXZhciBwTyxhZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtyZmUoKTtuZmUoKTtwTz1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5jaGFydENvbmZpZz1lO3RoaXMuY2hhcnREYXRhPXI7dGhpcy5jaGFydFRoZW1lQ29uZmlnPW47dGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c3RhdGlje28odGhpcywiQmFzZVBsb3QiKX1zZXRBeGVzKGUscil7dGhpcy54QXhpcz1lLHRoaXMueUF4aXM9cn1zZXRCb3VuZGluZ0JveFhZKGUpe3RoaXMuYm91bmRpbmdSZWN0Lng9ZS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9ZS55fWNhbGN1bGF0ZVNwYWNlKGUpe3JldHVybiB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lLndpZHRoLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1lLmhlaWdodCx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKCEodGhpcy54QXhpcyYmdGhpcy55QXhpcykpdGhyb3cgRXJyb3IoIkF4ZXMgbXVzdCBiZSBwYXNzZWQgdG8gcmVuZGVyIFBsb3RzIik7bGV0IGU9W107Zm9yKGxldFtyLG5db2YgdGhpcy5jaGFydERhdGEucGxvdHMuZW50cmllcygpKXN3aXRjaChuLnR5cGUpe2Nhc2UibGluZSI6e2xldCBpPW5ldyBMRShuLHRoaXMueEF4aXMsdGhpcy55QXhpcyx0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24scik7ZS5wdXNoKC4uLmkuZ2V0RHJhd2FibGVFbGVtZW50KCkpfWJyZWFrO2Nhc2UiYmFyIjp7bGV0IGk9bmV3IERFKG4sdGhpcy5ib3VuZGluZ1JlY3QsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixyKTtlLnB1c2goLi4uaS5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWt9cmV0dXJuIGV9fTtvKGlmZSwiZ2V0UGxvdENvbXBvbmVudCIpfSk7dmFyIE5FLHNmZT1NKCgpPT57InVzZSBzdHJpY3QiO0poZSgpO3RmZSgpO2FmZSgpO0NFKCk7TkU9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGFydENvbmZpZz1lO3RoaXMuY2hhcnREYXRhPXI7dGhpcy5jb21wb25lbnRTdG9yZT17dGl0bGU6ZWZlKGUscixuLGkpLHBsb3Q6aWZlKGUscixuKSx4QXhpczpmTyhyLnhBeGlzLGUueEF4aXMse3RpdGxlQ29sb3I6bi54QXhpc1RpdGxlQ29sb3IsbGFiZWxDb2xvcjpuLnhBeGlzTGFiZWxDb2xvcix0aWNrQ29sb3I6bi54QXhpc1RpY2tDb2xvcixheGlzTGluZUNvbG9yOm4ueEF4aXNMaW5lQ29sb3J9LGkpLHlBeGlzOmZPKHIueUF4aXMsZS55QXhpcyx7dGl0bGVDb2xvcjpuLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOm4ueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpuLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6bi55QXhpc0xpbmVDb2xvcn0saSl9fXN0YXRpY3tvKHRoaXMsIk9yY2hlc3RyYXRvciIpfWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgZT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLHI9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQsbj0wLGk9MCxhPU1hdGguZmxvb3IoZSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLHM9TWF0aC5mbG9vcihyKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksbD10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmEsaGVpZ2h0OnN9KTtlLT1sLndpZHRoLHItPWwuaGVpZ2h0LGw9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6cn0pLGk9bC5oZWlnaHQsci09bC5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLGw9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLHItPWwuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksbD10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksbj1sLndpZHRoLGUtPWwud2lkdGgsZT4wJiYoYSs9ZSxlPTApLHI+MCYmKHMrPXIscj0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmEsaGVpZ2h0OnN9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpuLHk6aX0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW24sbithXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4Om4seTppK3N9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtpLGkrc10pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6aX0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUodT0+Y08odSkpJiZ0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl9Y2FsY3VsYXRlSG9yaXpvbnRhbFNwYWNlKCl7bGV0IGU9dGhpcy5jaGFydENvbmZpZy53aWR0aCxyPXRoaXMuY2hhcnRDb25maWcuaGVpZ2h0LG49MCxpPTAsYT0wLHM9TWF0aC5mbG9vcihlKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksbD1NYXRoLmZsb29yKHIqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSx1PXRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6cyxoZWlnaHQ6bH0pO2UtPXUud2lkdGgsci09dS5oZWlnaHQsdT10aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDp0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGhlaWdodDpyfSksbj11LmhlaWdodCxyLT11LmhlaWdodCx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldEF4aXNQb3NpdGlvbigibGVmdCIpLHU9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLGUtPXUud2lkdGgsaT11LndpZHRoLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJ0b3AiKSx1PXRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxyLT11LmhlaWdodCxhPW4rdS5oZWlnaHQsZT4wJiYocys9ZSxlPTApLHI+MCYmKGwrPXIscj0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0Omx9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDppLHk6YX0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0UmFuZ2UoW2ksaStzXSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OmkseTpufSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRSYW5nZShbYSxhK2xdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6MCx5OmF9KSx0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKGg9PmNPKGgpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZVNwYWNlKCl7dGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3RoaXMuY2FsY3VsYXRlSG9yaXpvbnRhbFNwYWNlKCk6dGhpcy5jYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCl9Z2V0RHJhd2FibGVFbGVtZW50KCl7dGhpcy5jYWxjdWxhdGVTcGFjZSgpO2xldCBlPVtdO3RoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRBeGVzKHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcyk7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRTdG9yZSkpZS5wdXNoKC4uLnIuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtyZXR1cm4gZX19fSk7dmFyIFJFLG9mZT1NKCgpPT57InVzZSBzdHJpY3QiO3NmZSgpO1JFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlhZQ2hhcnRCdWlsZGVyIil9c3RhdGljIGJ1aWxkKGUscixuLGkpe3JldHVybiBuZXcgTkUoZSxyLG4saSkuZ2V0RHJhd2FibGVFbGVtZW50KCl9fX0pO2Z1bmN0aW9uIGNmZSgpe2xldCB0PXZwKCksZT1DcigpO3JldHVybiBEcyh0Lnh5Q2hhcnQsZS50aGVtZVZhcmlhYmxlcy54eUNoYXJ0KX1mdW5jdGlvbiB1ZmUoKXtsZXQgdD1DcigpO3JldHVybiBEcyh1ci54eUNoYXJ0LHQueHlDaGFydCl9ZnVuY3Rpb24gaGZlKCl7cmV0dXJue3lBeGlzOnt0eXBlOiJsaW5lYXIiLHRpdGxlOiIiLG1pbjoxLzAsbWF4Oi0xLzB9LHhBeGlzOnt0eXBlOiJiYW5kIix0aXRsZToiIixjYXRlZ29yaWVzOltdfSx0aXRsZToiIixwbG90czpbXX19ZnVuY3Rpb24geU8odCl7bGV0IGU9Q3IoKTtyZXR1cm4ga3IodC50cmltKCksZSl9ZnVuY3Rpb24gX1ZlKHQpe2xmZT10fWZ1bmN0aW9uIExWZSh0KXt0PT09Imhvcml6b250YWwiP0R4LmNoYXJ0T3JpZW50YXRpb249Imhvcml6b250YWwiOkR4LmNoYXJ0T3JpZW50YXRpb249InZlcnRpY2FsIn1mdW5jdGlvbiBEVmUodCl7aG4ueEF4aXMudGl0bGU9eU8odC50ZXh0KX1mdW5jdGlvbiBmZmUodCxlKXtobi54QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpobi54QXhpcy50aXRsZSxtaW46dCxtYXg6ZX0sTUU9ITB9ZnVuY3Rpb24gTlZlKHQpe2huLnhBeGlzPXt0eXBlOiJiYW5kIix0aXRsZTpobi54QXhpcy50aXRsZSxjYXRlZ29yaWVzOnQubWFwKGU9PnlPKGUudGV4dCkpfSxNRT0hMH1mdW5jdGlvbiBSVmUodCl7aG4ueUF4aXMudGl0bGU9eU8odC50ZXh0KX1mdW5jdGlvbiBNVmUodCxlKXtobi55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpobi55QXhpcy50aXRsZSxtaW46dCxtYXg6ZX0sZ089ITB9ZnVuY3Rpb24gSVZlKHQpe2xldCBlPU1hdGgubWluKC4uLnQpLHI9TWF0aC5tYXgoLi4udCksbj1xZyhobi55QXhpcyk/aG4ueUF4aXMubWluOjEvMCxpPXFnKGhuLnlBeGlzKT9obi55QXhpcy5tYXg6LTEvMDtobi55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpobi55QXhpcy50aXRsZSxtaW46TWF0aC5taW4obixlKSxtYXg6TWF0aC5tYXgoaSxyKX19ZnVuY3Rpb24gZGZlKHQpe2xldCBlPVtdO2lmKHQubGVuZ3RoPT09MClyZXR1cm4gZTtpZighTUUpe2xldCByPXFnKGhuLnhBeGlzKT9obi54QXhpcy5taW46MS8wLG49cWcoaG4ueEF4aXMpP2huLnhBeGlzLm1heDotMS8wO2ZmZShNYXRoLm1pbihyLDEpLE1hdGgubWF4KG4sdC5sZW5ndGgpKX1pZihnT3x8SVZlKHQpLFNFKGhuLnhBeGlzKSYmKGU9aG4ueEF4aXMuY2F0ZWdvcmllcy5tYXAoKHIsbik9PltyLHRbbl1dKSkscWcoaG4ueEF4aXMpKXtsZXQgcj1obi54QXhpcy5taW4sbj1obi54QXhpcy5tYXgsaT0obi1yKS8odC5sZW5ndGgtMSksYT1bXTtmb3IobGV0IHM9cjtzPD1uO3MrPWkpYS5wdXNoKGAke3N9YCk7ZT1hLm1hcCgocyxsKT0+W3MsdFtsXV0pfXJldHVybiBlfWZ1bmN0aW9uIHBmZSh0KXtyZXR1cm4gbU9bdD09PTA/MDp0JW1PLmxlbmd0aF19ZnVuY3Rpb24gT1ZlKHQsZSl7bGV0IHI9ZGZlKGUpO2huLnBsb3RzLnB1c2goe3R5cGU6ImxpbmUiLHN0cm9rZUZpbGw6cGZlKEx4KSxzdHJva2VXaWR0aDoyLGRhdGE6cn0pLEx4Kyt9ZnVuY3Rpb24gUFZlKHQsZSl7bGV0IHI9ZGZlKGUpO2huLnBsb3RzLnB1c2goe3R5cGU6ImJhciIsZmlsbDpwZmUoTHgpLGRhdGE6cn0pLEx4Kyt9ZnVuY3Rpb24gQlZlKCl7aWYoaG4ucGxvdHMubGVuZ3RoPT09MCl0aHJvdyBFcnJvcigiTm8gUGxvdCB0byByZW5kZXIsIHBsZWFzZSBwcm92aWRlIGEgcGxvdCB3aXRoIHNvbWUgZGF0YSIpO3JldHVybiBobi50aXRsZT1KcigpLFJFLmJ1aWxkKER4LGhuLE54LGxmZSl9ZnVuY3Rpb24gRlZlKCl7cmV0dXJuIE54fWZ1bmN0aW9uIHpWZSgpe3JldHVybiBEeH12YXIgTHgsbGZlLER4LE54LGhuLG1PLE1FLGdPLEdWZSxtZmUsZ2ZlPU0oKCk9PnsidXNlIHN0cmljdCI7WmEoKTticygpO2k0KCk7aHIoKTtmcigpO0FpKCk7b2ZlKCk7Q0UoKTtMeD0wLER4PXVmZSgpLE54PWNmZSgpLGhuPWhmZSgpLG1PPU54LnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAodD0+dC50cmltKCkpLE1FPSExLGdPPSExO28oY2ZlLCJnZXRDaGFydERlZmF1bHRUaGVtZUNvbmZpZyIpO28odWZlLCJnZXRDaGFydERlZmF1bHRDb25maWciKTtvKGhmZSwiZ2V0Q2hhcnREZWZhdWx0RGF0YSIpO28oeU8sInRleHRTYW5pdGl6ZXIiKTtvKF9WZSwic2V0VG1wU1ZHRyIpO28oTFZlLCJzZXRPcmllbnRhdGlvbiIpO28oRFZlLCJzZXRYQXhpc1RpdGxlIik7byhmZmUsInNldFhBeGlzUmFuZ2VEYXRhIik7byhOVmUsInNldFhBeGlzQmFuZCIpO28oUlZlLCJzZXRZQXhpc1RpdGxlIik7byhNVmUsInNldFlBeGlzUmFuZ2VEYXRhIik7byhJVmUsInNldFlBeGlzUmFuZ2VGcm9tUGxvdERhdGEiKTtvKGRmZSwidHJhbnNmb3JtRGF0YVdpdGhvdXRDYXRlZ29yeSIpO28ocGZlLCJnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZSIpO28oT1ZlLCJzZXRMaW5lRGF0YSIpO28oUFZlLCJzZXRCYXJEYXRhIik7byhCVmUsImdldERyYXdhYmxlRWxlbSIpO28oRlZlLCJnZXRDaGFydFRoZW1lQ29uZmlnIik7byh6VmUsImdldENoYXJ0Q29uZmlnIik7R1ZlPW8oZnVuY3Rpb24oKXtMcigpLEx4PTAsRHg9dWZlKCksaG49aGZlKCksTng9Y2ZlKCksbU89TngucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSksTUU9ITEsZ089ITF9LCJjbGVhciIpLG1mZT17Z2V0RHJhd2FibGVFbGVtOkJWZSxjbGVhcjpHVmUsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldERpYWdyYW1UaXRsZTpKcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcixzZXRPcmllbnRhdGlvbjpMVmUsc2V0WEF4aXNUaXRsZTpEVmUsc2V0WEF4aXNSYW5nZURhdGE6ZmZlLHNldFhBeGlzQmFuZDpOVmUsc2V0WUF4aXNUaXRsZTpSVmUsc2V0WUF4aXNSYW5nZURhdGE6TVZlLHNldExpbmVEYXRhOk9WZSxzZXRCYXJEYXRhOlBWZSxzZXRUbXBTVkdHOl9WZSxnZXRDaGFydFRoZW1lQ29uZmlnOkZWZSxnZXRDaGFydENvbmZpZzp6VmV9fSk7dmFyICRWZSx5ZmUsdmZlPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtlaCgpO2FpKCk7JFZlPW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLHM9aS5nZXRDaGFydENvbmZpZygpO2Z1bmN0aW9uIGwodil7cmV0dXJuIHY9PT0idG9wIj8idGV4dC1iZWZvcmUtZWRnZSI6Im1pZGRsZSJ9byhsLCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gdSh2KXtyZXR1cm4gdj09PSJsZWZ0Ij8ic3RhcnQiOnY9PT0icmlnaHQiPyJlbmQiOiJtaWRkbGUifW8odSwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIGgodil7cmV0dXJuYHRyYW5zbGF0ZSgke3YueH0sICR7di55fSkgcm90YXRlKCR7di5yb3RhdGlvbnx8MH0pYH1vKGgsImdldFRleHRUcmFuc2Zvcm1hdGlvbiIpLFkuZGVidWcoYFJlbmRlcmluZyB4eWNoYXJ0IGNoYXJ0CmArdCk7bGV0IGY9VmEoZSksZD1mLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLHA9ZC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIscy53aWR0aCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCkuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIik7WnIoZixzLmhlaWdodCxzLndpZHRoLCEwKSxmLmF0dHIoInZpZXdCb3giLGAwIDAgJHtzLndpZHRofSAke3MuaGVpZ2h0fWApLHAuYXR0cigiZmlsbCIsYS5iYWNrZ3JvdW5kQ29sb3IpLGkuc2V0VG1wU1ZHRyhmLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWVybWFpZC10bXAtZ3JvdXAiKSk7bGV0IG09aS5nZXREcmF3YWJsZUVsZW0oKSxnPXt9O2Z1bmN0aW9uIHkodil7bGV0IHg9ZCxiPSIiO2ZvcihsZXRbd11vZiB2LmVudHJpZXMoKSl7bGV0IF89ZDt3PjAmJmdbYl0mJihfPWdbYl0pLGIrPXZbd10seD1nW2JdLHh8fCh4PWdbYl09Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsdlt3XSkpfXJldHVybiB4fW8oeSwiZ2V0R3JvdXAiKTtmb3IobGV0IHYgb2YgbSl7aWYodi5kYXRhLmxlbmd0aD09PTApY29udGludWU7bGV0IHg9eSh2Lmdyb3VwVGV4dHMpO3N3aXRjaCh2LnR5cGUpe2Nhc2UicmVjdCI6eC5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHYuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixiPT5iLngpLmF0dHIoInkiLGI9PmIueSkuYXR0cigid2lkdGgiLGI9PmIud2lkdGgpLmF0dHIoImhlaWdodCIsYj0+Yi5oZWlnaHQpLmF0dHIoImZpbGwiLGI9PmIuZmlsbCkuYXR0cigic3Ryb2tlIixiPT5iLnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsYj0+Yi5zdHJva2VXaWR0aCk7YnJlYWs7Y2FzZSJ0ZXh0Ijp4LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEodi5kYXRhKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLGI9PmIuZmlsbCkuYXR0cigiZm9udC1zaXplIixiPT5iLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsYj0+bChiLnZlcnRpY2FsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLGI9PnUoYi5ob3Jpem9udGFsUG9zKSkuYXR0cigidHJhbnNmb3JtIixiPT5oKGIpKS50ZXh0KGI9PmIudGV4dCk7YnJlYWs7Y2FzZSJwYXRoIjp4LnNlbGVjdEFsbCgicGF0aCIpLmRhdGEodi5kYXRhKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGI9PmIucGF0aCkuYXR0cigiZmlsbCIsYj0+Yi5maWxsP2IuZmlsbDoibm9uZSIpLmF0dHIoInN0cm9rZSIsYj0+Yi5zdHJva2VGaWxsKS5hdHRyKCJzdHJva2Utd2lkdGgiLGI9PmIuc3Ryb2tlV2lkdGgpO2JyZWFrfX19LCJkcmF3IikseWZlPXtkcmF3OiRWZX19KTt2YXIgeGZlPXt9O3ZyKHhmZSx7ZGlhZ3JhbTooKT0+VlZlfSk7dmFyIFZWZSxiZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLaGUoKTtnZmUoKTt2ZmUoKTtWVmU9e3BhcnNlcjpqaGUsZGI6bWZlLHJlbmRlcmVyOnlmZX19KTt2YXIgdk8sa2ZlLEVmZT1NKCgpPT57InVzZSBzdHJpY3QiO3ZPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihvZSxLLGVlLEope2ZvcihlZT1lZXx8e30sSj1vZS5sZW5ndGg7Si0tO2VlW29lW0pdXT1LKTtyZXR1cm4gZWV9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVs1LDYsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxzPVsxLDE4XSxsPVsyLDddLHU9WzEsMjJdLGg9WzEsMjNdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLG09WzEsMjddLGc9WzEsMjBdLHk9WzEsMjhdLHY9WzEsMjldLHg9WzYyLDYzXSxiPVs1LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw1MSw1Myw2Miw2M10sdz1bMSw0N10sXz1bMSw0OF0sVD1bMSw0OV0sRT1bMSw1MF0sTD1bMSw1MV0sUz1bMSw1Ml0sQT1bMSw1M10sST1bNTMsNTRdLEQ9WzEsNjRdLGs9WzEsNjBdLFI9WzEsNjFdLEM9WzEsNjJdLE89WzEsNjNdLE49WzEsNjVdLFA9WzEsNjldLEY9WzEsNzBdLEI9WzEsNjddLEc9WzEsNjhdLHo9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxXPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxhY2NfdGl0bGU6OSxhY2NfdGl0bGVfdmFsdWU6MTAsYWNjX2Rlc2NyOjExLGFjY19kZXNjcl92YWx1ZToxMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjEzLHJlcXVpcmVtZW50RGVmOjE0LGVsZW1lbnREZWY6MTUscmVsYXRpb25zaGlwRGVmOjE2LHJlcXVpcmVtZW50VHlwZToxNyxyZXF1aXJlbWVudE5hbWU6MTgsU1RSVUNUX1NUQVJUOjE5LHJlcXVpcmVtZW50Qm9keToyMCxJRDoyMSxDT0xPTlNFUDoyMixpZDoyMyxURVhUOjI0LHRleHQ6MjUsUklTSzoyNixyaXNrTGV2ZWw6MjcsVkVSSUZZTVRIRDoyOCx2ZXJpZnlUeXBlOjI5LFNUUlVDVF9TVE9QOjMwLFJFUVVJUkVNRU5UOjMxLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjMzLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM0LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM1LERFU0lHTl9DT05TVFJBSU5UOjM2LExPV19SSVNLOjM3LE1FRF9SSVNLOjM4LEhJR0hfUklTSzozOSxWRVJJRllfQU5BTFlTSVM6NDAsVkVSSUZZX0RFTU9OU1RSQVRJT046NDEsVkVSSUZZX0lOU1BFQ1RJT046NDIsVkVSSUZZX1RFU1Q6NDMsRUxFTUVOVDo0NCxlbGVtZW50TmFtZTo0NSxlbGVtZW50Qm9keTo0NixUWVBFOjQ3LHR5cGU6NDgsRE9DUkVGOjQ5LHJlZjo1MCxFTkRfQVJST1dfTDo1MSxyZWxhdGlvbnNoaXA6NTIsTElORTo1MyxFTkRfQVJST1dfUjo1NCxDT05UQUlOUzo1NSxDT1BJRVM6NTYsREVSSVZFUzo1NyxTQVRJU0ZJRVM6NTgsVkVSSUZJRVM6NTksUkVGSU5FUzo2MCxUUkFDRVM6NjEsdW5xU3RyaW5nOjYyLHFTdHJpbmc6NjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDk6ImFjY190aXRsZSIsMTA6ImFjY190aXRsZV92YWx1ZSIsMTE6ImFjY19kZXNjciIsMTI6ImFjY19kZXNjcl92YWx1ZSIsMTM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIxOiJJRCIsMjI6IkNPTE9OU0VQIiwyNDoiVEVYVCIsMjY6IlJJU0siLDI4OiJWRVJJRllNVEhEIiwzMDoiU1RSVUNUX1NUT1AiLDMxOiJSRVFVSVJFTUVOVCIsMzI6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDMzOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM0OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzU6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiwzNjoiREVTSUdOX0NPTlNUUkFJTlQiLDM3OiJMT1dfUklTSyIsMzg6Ik1FRF9SSVNLIiwzOToiSElHSF9SSVNLIiw0MDoiVkVSSUZZX0FOQUxZU0lTIiw0MToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQyOiJWRVJJRllfSU5TUEVDVElPTiIsNDM6IlZFUklGWV9URVNUIiw0NDoiRUxFTUVOVCIsNDc6IlRZUEUiLDQ5OiJET0NSRUYiLDUxOiJFTkRfQVJST1dfTCIsNTM6IkxJTkUiLDU0OiJFTkRfQVJST1dfUiIsNTU6IkNPTlRBSU5TIiw1NjoiQ09QSUVTIiw1NzoiREVSSVZFUyIsNTg6IlNBVElTRklFUyIsNTk6IlZFUklGSUVTIiw2MDoiUkVGSU5FUyIsNjE6IlRSQUNFUyIsNjI6InVucVN0cmluZyIsNjM6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsMl0sWzQsMl0sWzQsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE0LDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsMl0sWzIwLDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsyNywxXSxbMjcsMV0sWzI3LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMTUsNV0sWzQ2LDVdLFs0Niw1XSxbNDYsMl0sWzQ2LDFdLFsxNiw1XSxbMTYsNV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFsxOCwxXSxbMTgsMV0sWzIzLDFdLFsyMywxXSxbMjUsMV0sWzI1LDFdLFs0NSwxXSxbNDUsMV0sWzQ4LDFdLFs0OCwxXSxbNTAsMV0sWzUwLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oSyxlZSxKLEgscSxRLGFlKXt2YXIgdWU9US5sZW5ndGgtMTtzd2l0Y2gocSl7Y2FzZSA0OnRoaXMuJD1RW3VlXS50cmltKCksSC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPVFbdWVdLnRyaW0oKSxILnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDEzOkguYWRkUmVxdWlyZW1lbnQoUVt1ZS0zXSxRW3VlLTRdKTticmVhaztjYXNlIDE0Okguc2V0TmV3UmVxSWQoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAxNTpILnNldE5ld1JlcVRleHQoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAxNjpILnNldE5ld1JlcVJpc2soUVt1ZS0yXSk7YnJlYWs7Y2FzZSAxNzpILnNldE5ld1JlcVZlcmlmeU1ldGhvZChRW3VlLTJdKTticmVhaztjYXNlIDIwOnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDIxOnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIzOnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI0OnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI1OnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI2OnRoaXMuJD1ILlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDI3OnRoaXMuJD1ILlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDI4OnRoaXMuJD1ILlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9SC5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDMwOnRoaXMuJD1ILlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9SC5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPUguVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDMzOkguYWRkRWxlbWVudChRW3VlLTNdKTticmVhaztjYXNlIDM0Okguc2V0TmV3RWxlbWVudFR5cGUoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAzNTpILnNldE5ld0VsZW1lbnREb2NSZWYoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAzODpILmFkZFJlbGF0aW9uc2hpcChRW3VlLTJdLFFbdWVdLFFbdWUtNF0pO2JyZWFrO2Nhc2UgMzk6SC5hZGRSZWxhdGlvbnNoaXAoUVt1ZS0yXSxRW3VlLTRdLFFbdWVdKTticmVhaztjYXNlIDQwOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9SC5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDQyOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQzOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDQ1OnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ2OnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuVFJBQ0VTO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw2OmUsOTpyLDExOm4sMTM6aX0sezE6WzNdfSx7Mzo4LDQ6Miw1OlsxLDddLDY6ZSw5OnIsMTE6biwxMzppfSx7NTpbMSw5XX0sezEwOlsxLDEwXX0sezEyOlsxLDExXX0sdChhLFsyLDZdKSx7MzoxMiw0OjIsNjplLDk6ciwxMTpuLDEzOml9LHsxOlsyLDJdfSx7NDoxNyw1OnMsNzoxMyw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sdChhLFsyLDRdKSx0KGEsWzIsNV0pLHsxOlsyLDFdfSx7ODpbMSwzMF19LHs0OjE3LDU6cyw3OjMxLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx7NDoxNyw1OnMsNzozMiw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sezQ6MTcsNTpzLDc6MzMsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6dSwzMjpoLDMzOmYsMzQ6ZCwzNTpwLDM2Om0sNDQ6Zyw2Mjp5LDYzOnZ9LHs0OjE3LDU6cyw3OjM0LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx7NDoxNyw1OnMsNzozNSw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sezE4OjM2LDYyOlsxLDM3XSw2MzpbMSwzOF19LHs0NTozOSw2MjpbMSw0MF0sNjM6WzEsNDFdfSx7NTE6WzEsNDJdLDUzOlsxLDQzXX0sdCh4LFsyLDIwXSksdCh4LFsyLDIxXSksdCh4LFsyLDIyXSksdCh4LFsyLDIzXSksdCh4LFsyLDI0XSksdCh4LFsyLDI1XSksdChiLFsyLDQ5XSksdChiLFsyLDUwXSksezE6WzIsM119LHs4OlsyLDhdfSx7ODpbMiw5XX0sezg6WzIsMTBdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezE5OlsxLDQ0XX0sezE5OlsyLDQ3XX0sezE5OlsyLDQ4XX0sezE5OlsxLDQ1XX0sezE5OlsyLDUzXX0sezE5OlsyLDU0XX0sezUyOjQ2LDU1OncsNTY6Xyw1NzpULDU4OkUsNTk6TCw2MDpTLDYxOkF9LHs1Mjo1NCw1NTp3LDU2Ol8sNTc6VCw1ODpFLDU5OkwsNjA6Uyw2MTpBfSx7NTpbMSw1NV19LHs1OlsxLDU2XX0sezUzOlsxLDU3XX0sdChJLFsyLDQwXSksdChJLFsyLDQxXSksdChJLFsyLDQyXSksdChJLFsyLDQzXSksdChJLFsyLDQ0XSksdChJLFsyLDQ1XSksdChJLFsyLDQ2XSksezU0OlsxLDU4XX0sezU6RCwyMDo1OSwyMTprLDI0OlIsMjY6QywyODpPLDMwOk59LHs1OlAsMzA6Riw0Njo2Niw0NzpCLDQ5Okd9LHsyMzo3MSw2Mjp5LDYzOnZ9LHsyMzo3Miw2Mjp5LDYzOnZ9LHQoeixbMiwxM10pLHsyMjpbMSw3M119LHsyMjpbMSw3NF19LHsyMjpbMSw3NV19LHsyMjpbMSw3Nl19LHs1OkQsMjA6NzcsMjE6aywyNDpSLDI2OkMsMjg6TywzMDpOfSx0KHosWzIsMTldKSx0KHosWzIsMzNdKSx7MjI6WzEsNzhdfSx7MjI6WzEsNzldfSx7NTpQLDMwOkYsNDY6ODAsNDc6Qiw0OTpHfSx0KHosWzIsMzddKSx0KHosWzIsMzhdKSx0KHosWzIsMzldKSx7MjM6ODEsNjI6eSw2Mzp2fSx7MjU6ODIsNjI6WzEsODNdLDYzOlsxLDg0XX0sezI3Ojg1LDM3OlsxLDg2XSwzODpbMSw4N10sMzk6WzEsODhdfSx7Mjk6ODksNDA6WzEsOTBdLDQxOlsxLDkxXSw0MjpbMSw5Ml0sNDM6WzEsOTNdfSx0KHosWzIsMThdKSx7NDg6OTQsNjI6WzEsOTVdLDYzOlsxLDk2XX0sezUwOjk3LDYyOlsxLDk4XSw2MzpbMSw5OV19LHQoeixbMiwzNl0pLHs1OlsxLDEwMF19LHs1OlsxLDEwMV19LHs1OlsyLDUxXX0sezU6WzIsNTJdfSx7NTpbMSwxMDJdfSx7NTpbMiwyNl19LHs1OlsyLDI3XX0sezU6WzIsMjhdfSx7NTpbMSwxMDNdfSx7NTpbMiwyOV19LHs1OlsyLDMwXX0sezU6WzIsMzFdfSx7NTpbMiwzMl19LHs1OlsxLDEwNF19LHs1OlsyLDU1XX0sezU6WzIsNTZdfSx7NTpbMSwxMDVdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sezU6RCwyMDoxMDYsMjE6aywyNDpSLDI2OkMsMjg6TywzMDpOfSx7NTpELDIwOjEwNywyMTprLDI0OlIsMjY6QywyODpPLDMwOk59LHs1OkQsMjA6MTA4LDIxOmssMjQ6UiwyNjpDLDI4Ok8sMzA6Tn0sezU6RCwyMDoxMDksMjE6aywyNDpSLDI2OkMsMjg6TywzMDpOfSx7NTpQLDMwOkYsNDY6MTEwLDQ3OkIsNDk6R30sezU6UCwzMDpGLDQ2OjExMSw0NzpCLDQ5Okd9LHQoeixbMiwxNF0pLHQoeixbMiwxNV0pLHQoeixbMiwxNl0pLHQoeixbMiwxN10pLHQoeixbMiwzNF0pLHQoeixbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oSyxlZSl7aWYoZWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShLKTtlbHNle3ZhciBKPW5ldyBFcnJvcihLKTt0aHJvdyBKLmhhc2g9ZWUsSn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihLKXt2YXIgZWU9dGhpcyxKPVswXSxIPVtdLHE9W251bGxdLFE9W10sYWU9dGhpcy50YWJsZSx1ZT0iIixjZT0wLHRlPTAsTmU9MCxzZT0yLGtlPTEsUmU9US5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxDZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFBlPXt5eTp7fX07Zm9yKHZhciBJZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEllKSYmKFBlLnl5W0llXT10aGlzLnl5W0llXSk7Q2Uuc2V0SW5wdXQoSyxQZS55eSksUGUueXkubGV4ZXI9Q2UsUGUueXkucGFyc2VyPXRoaXMsdHlwZW9mIENlLnl5bGxvYz4idSImJihDZS55eWxsb2M9e30pO3ZhciAkZT1DZS55eWxsb2M7US5wdXNoKCRlKTt2YXIgeWU9Q2Uub3B0aW9ucyYmQ2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFBlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVBlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFgoSGUpe0oubGVuZ3RoPUoubGVuZ3RoLTIqSGUscS5sZW5ndGg9cS5sZW5ndGgtSGUsUS5sZW5ndGg9US5sZW5ndGgtSGV9byhYLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGZlKCl7dmFyIEhlO3JldHVybiBIZT1ILnBvcCgpfHxDZS5sZXgoKXx8a2UsdHlwZW9mIEhlIT0ibnVtYmVyIiYmKEhlIGluc3RhbmNlb2YgQXJyYXkmJihIPUhlLEhlPUgucG9wKCkpLEhlPWVlLnN5bWJvbHNfW0hlXXx8SGUpLEhlfW8oZmUsImxleCIpO2Zvcih2YXIgaGUsZ2UsbmUsdmUsVSxUZSxpZT17fSxFZSxBZSxHZSxCZTs7KXtpZihuZT1KW0oubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbbmVdP3ZlPXRoaXMuZGVmYXVsdEFjdGlvbnNbbmVdOigoaGU9PT1udWxsfHx0eXBlb2YgaGU+InUiKSYmKGhlPWZlKCkpLHZlPWFlW25lXSYmYWVbbmVdW2hlXSksdHlwZW9mIHZlPiJ1Inx8IXZlLmxlbmd0aHx8IXZlWzBdKXt2YXIgbWU9IiI7QmU9W107Zm9yKEVlIGluIGFlW25lXSl0aGlzLnRlcm1pbmFsc19bRWVdJiZFZT5zZSYmQmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VlXSsiJyIpO0NlLnNob3dQb3NpdGlvbj9tZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjZSsxKStgOgpgK0NlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQmUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1toZV18fGhlKSsiJyI6bWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoY2UrMSkrIjogVW5leHBlY3RlZCAiKyhoZT09a2U/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19baGVdfHxoZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IobWUse3RleHQ6Q2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2hlXXx8aGUsbGluZTpDZS55eWxpbmVubyxsb2M6JGUsZXhwZWN0ZWQ6QmV9KX1pZih2ZVswXWluc3RhbmNlb2YgQXJyYXkmJnZlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrbmUrIiwgdG9rZW46ICIraGUpO3N3aXRjaCh2ZVswXSl7Y2FzZSAxOkoucHVzaChoZSkscS5wdXNoKENlLnl5dGV4dCksUS5wdXNoKENlLnl5bGxvYyksSi5wdXNoKHZlWzFdKSxoZT1udWxsLGdlPyhoZT1nZSxnZT1udWxsKToodGU9Q2UueXlsZW5nLHVlPUNlLnl5dGV4dCxjZT1DZS55eWxpbmVubywkZT1DZS55eWxsb2MsTmU+MCYmTmUtLSk7YnJlYWs7Y2FzZSAyOmlmKEFlPXRoaXMucHJvZHVjdGlvbnNfW3ZlWzFdXVsxXSxpZS4kPXFbcS5sZW5ndGgtQWVdLGllLl8kPXtmaXJzdF9saW5lOlFbUS5sZW5ndGgtKEFlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UVtRLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlFbUS5sZW5ndGgtKEFlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlFbUS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHllJiYoaWUuXyQucmFuZ2U9W1FbUS5sZW5ndGgtKEFlfHwxKV0ucmFuZ2VbMF0sUVtRLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFRlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShpZSxbdWUsdGUsY2UsUGUueXksdmVbMV0scSxRXS5jb25jYXQoUmUpKSx0eXBlb2YgVGU8InUiKXJldHVybiBUZTtBZSYmKEo9Si5zbGljZSgwLC0xKkFlKjIpLHE9cS5zbGljZSgwLC0xKkFlKSxRPVEuc2xpY2UoMCwtMSpBZSkpLEoucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t2ZVsxXV1bMF0pLHEucHVzaChpZS4kKSxRLnB1c2goaWUuXyQpLEdlPWFlW0pbSi5sZW5ndGgtMl1dW0pbSi5sZW5ndGgtMV1dLEoucHVzaChHZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFo9ZnVuY3Rpb24oKXt2YXIgb2U9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihlZSxKKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGVlLEopO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGVlKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKEssZWUpe3JldHVybiB0aGlzLnl5PWVlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1LLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUssdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUssdGhpcy5tYXRjaGVkKz1LO3ZhciBlZT1LLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gZWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEt9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oSyl7dmFyIGVlPUsubGVuZ3RoLEo9Sy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUsrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWVlKSx0aGlzLm9mZnNldC09ZWU7dmFyIEg9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksSi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUoubGVuZ3RoLTEpO3ZhciBxPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpKPyhKLmxlbmd0aD09PUgubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStIW0gubGVuZ3RoLUoubGVuZ3RoXS5sZW5ndGgtSlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWVlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3FbMF0scVswXSt0aGlzLnl5bGVuZy1lZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKEspe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShLKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgSz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKEsubGVuZ3RoPjIwPyIuLi4iOiIiKStLLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5tYXRjaDtyZXR1cm4gSy5sZW5ndGg8MjAmJihLKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1LLmxlbmd0aCkpLChLLnN1YnN0cigwLDIwKSsoSy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBLPXRoaXMucGFzdElucHV0KCksZWU9bmV3IEFycmF5KEsubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gSyt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZWUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEssZWUpe3ZhciBKLEgscTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYocT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihxLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEg9S1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksSCYmKHRoaXMueXlsaW5lbm8rPUgubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46SD9IW0gubGVuZ3RoLTFdLmxlbmd0aC1IW0gubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rS1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1LWzBdLHRoaXMubWF0Y2grPUtbMF0sdGhpcy5tYXRjaGVzPUssdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoS1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9S1swXSxKPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGVlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEopcmV0dXJuIEo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFEgaW4gcSl0aGlzW1FdPXFbUV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEssZWUsSixIO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHE9dGhpcy5fY3VycmVudFJ1bGVzKCksUT0wO1E8cS5sZW5ndGg7USsrKWlmKEo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1txW1FdXSksSiYmKCFlZXx8SlswXS5sZW5ndGg+ZWVbMF0ubGVuZ3RoKSl7aWYoZWU9SixIPVEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoSz10aGlzLnRlc3RfbWF0Y2goSixxW1FdKSxLIT09ITEpcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtlZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlZT8oSz10aGlzLnRlc3RfbWF0Y2goZWUscVtIXSksSyE9PSExP0s6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgZWU9dGhpcy5uZXh0KCk7cmV0dXJuIGVlfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihlZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGVlKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBlZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBlZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhlZXx8MCksZWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tlZV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihlZSl7dGhpcy5iZWdpbihlZSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihlZSxKLEgscSl7dmFyIFE9cTtzd2l0Y2goSCl7Y2FzZSAwOnJldHVybiJ0aXRsZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSw5O2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTE7YnJlYWs7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OnJldHVybiA1O2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gODtjYXNlIDEzOnJldHVybiA2O2Nhc2UgMTQ6cmV0dXJuIDE5O2Nhc2UgMTU6cmV0dXJuIDMwO2Nhc2UgMTY6cmV0dXJuIDIyO2Nhc2UgMTc6cmV0dXJuIDIxO2Nhc2UgMTg6cmV0dXJuIDI0O2Nhc2UgMTk6cmV0dXJuIDI2O2Nhc2UgMjA6cmV0dXJuIDI4O2Nhc2UgMjE6cmV0dXJuIDMxO2Nhc2UgMjI6cmV0dXJuIDMyO2Nhc2UgMjM6cmV0dXJuIDMzO2Nhc2UgMjQ6cmV0dXJuIDM0O2Nhc2UgMjU6cmV0dXJuIDM1O2Nhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjc6cmV0dXJuIDM3O2Nhc2UgMjg6cmV0dXJuIDM4O2Nhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgMzA6cmV0dXJuIDQwO2Nhc2UgMzE6cmV0dXJuIDQxO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQzO2Nhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzU6cmV0dXJuIDU1O2Nhc2UgMzY6cmV0dXJuIDU2O2Nhc2UgMzc6cmV0dXJuIDU3O2Nhc2UgMzg6cmV0dXJuIDU4O2Nhc2UgMzk6cmV0dXJuIDU5O2Nhc2UgNDA6cmV0dXJuIDYwO2Nhc2UgNDE6cmV0dXJuIDYxO2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6cmV0dXJuIDQ5O2Nhc2UgNDQ6cmV0dXJuIDUxO2Nhc2UgNDU6cmV0dXJuIDU0O2Nhc2UgNDY6cmV0dXJuIDUzO2Nhc2UgNDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0ODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0OTpyZXR1cm4icVN0cmluZyI7Y2FzZSA1MDpyZXR1cm4gSi55eXRleHQ9Si55eXRleHQudHJpbSgpLDYyO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG9lfSgpO1cubGV4ZXI9WjtmdW5jdGlvbiBqKCl7dGhpcy55eT17fX1yZXR1cm4gbyhqLCJQYXJzZXIiKSxqLnByb3RvdHlwZT1XLFcuUGFyc2VyPWosbmV3IGp9KCk7dk8ucGFyc2VyPXZPO2tmZT12T30pO3ZhciB4TyxxcyxSeCxUZixNeCxZVmUscVZlLFhWZSxqVmUsS1ZlLFFWZSxaVmUsSlZlLGVVZSx0VWUsclVlLG5VZSxpVWUsYVVlLHNVZSxvVWUsbFVlLFNmZSxDZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7QWkoKTt4Tz1bXSxxcz17fSxSeD1uZXcgTWFwLFRmPXt9LE14PW5ldyBNYXAsWVZlPXtSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0scVZlPXtMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxYVmU9e1ZFUklGWV9BTkFMWVNJUzoiQW5hbHlzaXMiLFZFUklGWV9ERU1PTlNUUkFUSU9OOiJEZW1vbnN0cmF0aW9uIixWRVJJRllfSU5TUEVDVElPTjoiSW5zcGVjdGlvbiIsVkVSSUZZX1RFU1Q6IlRlc3QifSxqVmU9e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0sS1ZlPW8oKHQsZSk9PihSeC5oYXModCl8fFJ4LnNldCh0LHtuYW1lOnQsdHlwZTplLGlkOnFzLmlkLHRleHQ6cXMudGV4dCxyaXNrOnFzLnJpc2ssdmVyaWZ5TWV0aG9kOnFzLnZlcmlmeU1ldGhvZH0pLHFzPXt9LFJ4LmdldCh0KSksImFkZFJlcXVpcmVtZW50IiksUVZlPW8oKCk9PlJ4LCJnZXRSZXF1aXJlbWVudHMiKSxaVmU9byh0PT57cXMhPT12b2lkIDAmJihxcy5pZD10KX0sInNldE5ld1JlcUlkIiksSlZlPW8odD0+e3FzIT09dm9pZCAwJiYocXMudGV4dD10KX0sInNldE5ld1JlcVRleHQiKSxlVWU9byh0PT57cXMhPT12b2lkIDAmJihxcy5yaXNrPXQpfSwic2V0TmV3UmVxUmlzayIpLHRVZT1vKHQ9PntxcyE9PXZvaWQgMCYmKHFzLnZlcmlmeU1ldGhvZD10KX0sInNldE5ld1JlcVZlcmlmeU1ldGhvZCIpLHJVZT1vKHQ9PihNeC5oYXModCl8fChNeC5zZXQodCx7bmFtZTp0LHR5cGU6VGYudHlwZSxkb2NSZWY6VGYuZG9jUmVmfSksWS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsdCkpLFRmPXt9LE14LmdldCh0KSksImFkZEVsZW1lbnQiKSxuVWU9bygoKT0+TXgsImdldEVsZW1lbnRzIiksaVVlPW8odD0+e1RmIT09dm9pZCAwJiYoVGYudHlwZT10KX0sInNldE5ld0VsZW1lbnRUeXBlIiksYVVlPW8odD0+e1RmIT09dm9pZCAwJiYoVGYuZG9jUmVmPXQpfSwic2V0TmV3RWxlbWVudERvY1JlZiIpLHNVZT1vKCh0LGUscik9Pnt4Ty5wdXNoKHt0eXBlOnQsc3JjOmUsZHN0OnJ9KX0sImFkZFJlbGF0aW9uc2hpcCIpLG9VZT1vKCgpPT54TywiZ2V0UmVsYXRpb25zaGlwcyIpLGxVZT1vKCgpPT57eE89W10scXM9e30sUng9bmV3IE1hcCxUZj17fSxNeD1uZXcgTWFwLExyKCl9LCJjbGVhciIpLFNmZT17UmVxdWlyZW1lbnRUeXBlOllWZSxSaXNrTGV2ZWw6cVZlLFZlcmlmeVR5cGU6WFZlLFJlbGF0aW9uc2hpcHM6alZlLGdldENvbmZpZzpvKCgpPT5wZSgpLnJlcSwiZ2V0Q29uZmlnIiksYWRkUmVxdWlyZW1lbnQ6S1ZlLGdldFJlcXVpcmVtZW50czpRVmUsc2V0TmV3UmVxSWQ6WlZlLHNldE5ld1JlcVRleHQ6SlZlLHNldE5ld1JlcVJpc2s6ZVVlLHNldE5ld1JlcVZlcmlmeU1ldGhvZDp0VWUsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkRWxlbWVudDpyVWUsZ2V0RWxlbWVudHM6blVlLHNldE5ld0VsZW1lbnRUeXBlOmlVZSxzZXROZXdFbGVtZW50RG9jUmVmOmFVZSxhZGRSZWxhdGlvbnNoaXA6c1VlLGdldFJlbGF0aW9uc2hpcHM6b1VlLGNsZWFyOmxVZX19KTt2YXIgY1VlLEFmZSxfZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjVWU9byh0PT5gCgogIG1hcmtlciB7CiAgICBmaWxsOiAke3QucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2U6ICR7dC5yZWxhdGlvbkNvbG9yfTsKICB9CgogIG1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIH0KCiAgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dC5mb250U2l6ZX07CiAgfQoKICAucmVxQm94IHsKICAgIGZpbGw6ICR7dC5yZXF1aXJlbWVudEJhY2tncm91bmR9OwogICAgZmlsbC1vcGFjaXR5OiAxLjA7CiAgICBzdHJva2U6ICR7dC5yZXF1aXJlbWVudEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07CiAgfQogIAogIC5yZXFUaXRsZSwgLnJlcUxhYmVsewogICAgZmlsbDogICR7dC5yZXF1aXJlbWVudFRleHRDb2xvcn07CiAgfQogIC5yZXFMYWJlbEJveCB7CiAgICBmaWxsOiAke3QucmVsYXRpb25MYWJlbEJhY2tncm91bmR9OwogICAgZmlsbC1vcGFjaXR5OiAxLjA7CiAgfQoKICAucmVxLXRpdGxlLWxpbmUgewogICAgc3Ryb2tlOiAke3QucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAucmVsYXRpb25zaGlwTGluZSB7CiAgICBzdHJva2U6ICR7dC5yZWxhdGlvbkNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgLnJlbGF0aW9uc2hpcExhYmVsIHsKICAgIGZpbGw6ICR7dC5yZWxhdGlvbkxhYmVsQ29sb3J9OwogIH0KCmAsImdldFN0eWxlcyIpLEFmZT1jVWV9KTt2YXIgYk8sdVVlLHdPLExmZT1NKCgpPT57InVzZSBzdHJpY3QiO2JPPXtDT05UQUlOUzoiY29udGFpbnMiLEFSUk9XOiJhcnJvdyJ9LHVVZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixiTy5DT05UQUlOUysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJtYXJrZXJXaWR0aCIsZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJnIik7ci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImN5IixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInIiLGUubGluZV9oZWlnaHQvMikuYXR0cigiZmlsbCIsIm5vbmUiKSxyLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsZS5saW5lX2hlaWdodCkuYXR0cigieTEiLGUubGluZV9oZWlnaHQvMikuYXR0cigieTIiLGUubGluZV9oZWlnaHQvMikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKSxyLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsZS5saW5lX2hlaWdodCkuYXR0cigieDEiLGUubGluZV9oZWlnaHQvMikuYXR0cigieDIiLGUubGluZV9oZWlnaHQvMikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGJPLkFSUk9XKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJyZWZZIiwuNSplLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJXaWR0aCIsZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0wLDAKICAgICAgTCR7ZS5saW5lX2hlaWdodH0sJHtlLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIE0ke2UubGluZV9oZWlnaHR9LCR7ZS5saW5lX2hlaWdodC8yfQogICAgICBMMCwke2UubGluZV9oZWlnaHR9YCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxKX0sImluc2VydExpbmVFbmRpbmdzIiksd089e1JlcU1hcmtlcnM6Yk8saW5zZXJ0TGluZUVuZGluZ3M6dVVlfX0pO3ZhciBoaSxEZmUsTmZlLFJmZSxNZmUsaFVlLGZVZSxkVWUscFVlLG1VZSxnVWUsS2cseVVlLElmZSxPZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO1F2KCk7R3MoKTtWdCgpO3V0KCk7YWkoKTtmcigpO0xmZSgpO2hpPXt9LERmZT0wLE5mZT1vKCh0LGUpPT50Lmluc2VydCgicmVjdCIsIiMiK2UpLmF0dHIoImNsYXNzIiwicmVxIHJlcUJveCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixoaS5yZWN0X21pbl93aWR0aCsicHgiKS5hdHRyKCJoZWlnaHQiLGhpLnJlY3RfbWluX2hlaWdodCsicHgiKSwibmV3UmVjdE5vZGUiKSxSZmU9bygodCxlLHIpPT57bGV0IG49aGkucmVjdF9taW5fd2lkdGgvMixpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIsbikuYXR0cigieSIsaGkucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTA7ci5mb3JFYWNoKGg9PnthPT0wP2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsaGkucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQoaCk6aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixoaS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsaGkubGluZV9oZWlnaHQqLjc1KS50ZXh0KGgpLGErK30pO2xldCBzPTEuNSpoaS5yZWN0X3BhZGRpbmcsbD1hKmhpLmxpbmVfaGVpZ2h0Ki43NSx1PXMrbDtyZXR1cm4gdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsInJlcS10aXRsZS1saW5lIikuYXR0cigieDEiLCIwIikuYXR0cigieDIiLGhpLnJlY3RfbWluX3dpZHRoKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpLHt0aXRsZU5vZGU6aSx5OnV9fSwibmV3VGl0bGVOb2RlIiksTWZlPW8oKHQsZSxyLG4pPT57bGV0IGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixoaS5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLG4pLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxzPTMwLGw9W107cmV0dXJuIHIuZm9yRWFjaCh1PT57bGV0IGg9dS5sZW5ndGg7Zm9yKDtoPnMmJmE8Mzspe2xldCBmPXUuc3Vic3RyaW5nKDAscyk7dT11LnN1YnN0cmluZyhzLHUubGVuZ3RoKSxoPXUubGVuZ3RoLGxbbC5sZW5ndGhdPWYsYSsrfWlmKGE9PTMpe2xldCBmPWxbbC5sZW5ndGgtMV07bFtsLmxlbmd0aC0xXT1mLnN1YnN0cmluZygwLGYubGVuZ3RoLTQpKyIuLi4ifWVsc2UgbFtsLmxlbmd0aF09dTthPTB9KSxsLmZvckVhY2godT0+e2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGhpLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLGhpLmxpbmVfaGVpZ2h0KS50ZXh0KHUpfSksaX0sIm5ld0JvZHlOb2RlIiksaFVlPW8oKHQsZSxyLG4pPT57bGV0IGk9ZS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxhPWUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoaSouNSkscz0icmVsIitEZmU7RGZlKys7bGV0IHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixzKS5hdHRyKCJ4IixhLngpLmF0dHIoInkiLGEueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQobikubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK3MpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsYS54LXUud2lkdGgvMikuYXR0cigieSIsYS55LXUuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIix1LndpZHRoKS5hdHRyKCJoZWlnaHQiLHUuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0sImFkZEVkZ2VMYWJlbCIpLGZVZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9ci5lZGdlKEtnKGUuc3JjKSxLZyhlLmRzdCkpLHM9bnMoKS54KGZ1bmN0aW9uKHUpe3JldHVybiB1Lnh9KS55KGZ1bmN0aW9uKHUpe3JldHVybiB1Lnl9KSxsPXQuaW5zZXJ0KCJwYXRoIiwiIyIrbikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIscyhhLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1pLmRiLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM/bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitxZS5nZXRVcmwoaGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihsLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3IiksbC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcWUuZ2V0VXJsKGhpLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIit3Ty5SZXFNYXJrZXJzLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLGhVZSh0LGwsaGksYDw8JHtlLnR5cGV9Pj5gKX0sImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0IiksZFVlPW8oKHQsZSxyKT0+e3QuZm9yRWFjaCgobixpKT0+e2k9S2coaSksWS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsaSk7bGV0IGE9ci5hcHBlbmQoImciKS5hdHRyKCJpZCIsaSkscz0icmVxLSIraSxsPU5mZShhLHMpLHU9W10saD1SZmUoYSxpKyJfdGl0bGUiLFtgPDwke24udHlwZX0+PmAsYCR7bi5uYW1lfWBdKTt1LnB1c2goaC50aXRsZU5vZGUpO2xldCBmPU1mZShhLGkrIl9ib2R5IixbYElkOiAke24uaWR9YCxgVGV4dDogJHtuLnRleHR9YCxgUmlzazogJHtuLnJpc2t9YCxgVmVyaWZpY2F0aW9uOiAke24udmVyaWZ5TWV0aG9kfWBdLGgueSk7dS5wdXNoKGYpO2xldCBkPWwubm9kZSgpLmdldEJCb3goKTtlLnNldE5vZGUoaSx7d2lkdGg6ZC53aWR0aCxoZWlnaHQ6ZC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOml9KX0pfSwiZHJhd1JlcXMiKSxwVWU9bygodCxlLHIpPT57dC5mb3JFYWNoKChuLGkpPT57bGV0IGE9S2coaSkscz1yLmFwcGVuZCgiZyIpLmF0dHIoImlkIixhKSxsPSJlbGVtZW50LSIrYSx1PU5mZShzLGwpLGg9W10sZj1SZmUocyxsKyJfdGl0bGUiLFsiPDxFbGVtZW50Pj4iLGAke2l9YF0pO2gucHVzaChmLnRpdGxlTm9kZSk7bGV0IGQ9TWZlKHMsbCsiX2JvZHkiLFtgVHlwZTogJHtuLnR5cGV8fCJOb3QgU3BlY2lmaWVkIn1gLGBEb2MgUmVmOiAke24uZG9jUmVmfHwiTm9uZSJ9YF0sZi55KTtoLnB1c2goZCk7bGV0IHA9dS5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShhLHt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6YX0pfSl9LCJkcmF3RWxlbWVudHMiKSxtVWU9bygodCxlKT0+KHQuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1LZyhyLnNyYyksaT1LZyhyLmRzdCk7ZS5zZXRFZGdlKG4saSx7cmVsYXRpb25zaGlwOnJ9KX0pLHQpLCJhZGRSZWxhdGlvbnNoaXBzIiksZ1VlPW8oZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtyIT09dm9pZCAwJiZlLm5vZGUocikhPT12b2lkIDAmJih0LnNlbGVjdCgiIyIrciksdC5zZWxlY3QoIiMiK3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLm5vZGUocikueC1lLm5vZGUocikud2lkdGgvMikrIiwiKyhlLm5vZGUocikueS1lLm5vZGUocikuaGVpZ2h0LzIpKyIgKSIpKX0pfSwiYWRqdXN0RW50aXRpZXMiKSxLZz1vKHQ9PnQucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLCJlbGVtZW50U3RyaW5nIikseVVlPW8oKHQsZSxyLG4pPT57aGk9cGUoKS5yZXF1aXJlbWVudDtsZXQgaT1oaS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9VmUoIiNpIitlKSk7bGV0IGw9KGk9PT0ic2FuZGJveCI/VmUoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpKS5zZWxlY3QoYFtpZD0nJHtlfSddYCk7d08uaW5zZXJ0TGluZUVuZGluZ3MobCxoaSk7bGV0IHU9bmV3IElyKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6aGkubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLGg9bi5kYi5nZXRSZXF1aXJlbWVudHMoKSxmPW4uZGIuZ2V0RWxlbWVudHMoKSxkPW4uZGIuZ2V0UmVsYXRpb25zaGlwcygpO2RVZShoLHUsbCkscFVlKGYsdSxsKSxtVWUoZCx1KSxHdSh1KSxnVWUobCx1KSxkLmZvckVhY2goZnVuY3Rpb24odil7ZlVlKGwsdix1LGUsbil9KTtsZXQgcD1oaS5yZWN0X3BhZGRpbmcsbT1sLm5vZGUoKS5nZXRCQm94KCksZz1tLndpZHRoK3AqMix5PW0uaGVpZ2h0K3AqMjtacihsLHksZyxoaS51c2VNYXhXaWR0aCksbC5hdHRyKCJ2aWV3Qm94IixgJHttLngtcH0gJHttLnktcH0gJHtnfSAke3l9YCl9LCJkcmF3IiksSWZlPXtkcmF3OnlVZX19KTt2YXIgUGZlPXt9O3ZyKFBmZSx7ZGlhZ3JhbTooKT0+dlVlfSk7dmFyIHZVZSxCZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFZmUoKTtDZmUoKTtfZmUoKTtPZmUoKTt2VWU9e3BhcnNlcjprZmUsZGI6U2ZlLHJlbmRlcmVyOklmZSxzdHlsZXM6QWZlfX0pO3ZhciBUTyxHZmUsJGZlPU0oKCk9PnsidXNlIHN0cmljdCI7VE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEgscSxRLGFlKXtmb3IoUT1RfHx7fSxhZT1ILmxlbmd0aDthZS0tO1FbSFthZV1dPXEpO3JldHVybiBRfSwibyIpLGU9WzEsMl0scj1bMSwzXSxuPVsxLDRdLGk9WzIsNF0sYT1bMSw5XSxzPVsxLDExXSxsPVsxLDEzXSx1PVsxLDE0XSxoPVsxLDE2XSxmPVsxLDE3XSxkPVsxLDE4XSxwPVsxLDI0XSxtPVsxLDI1XSxnPVsxLDI2XSx5PVsxLDI3XSx2PVsxLDI4XSx4PVsxLDI5XSxiPVsxLDMwXSx3PVsxLDMxXSxfPVsxLDMyXSxUPVsxLDMzXSxFPVsxLDM0XSxMPVsxLDM1XSxTPVsxLDM2XSxBPVsxLDM3XSxJPVsxLDM4XSxEPVsxLDM5XSxrPVsxLDQxXSxSPVsxLDQyXSxDPVsxLDQzXSxPPVsxLDQ0XSxOPVsxLDQ1XSxQPVsxLDQ2XSxGPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sQj1bNCw1LDE2LDUwLDUyLDUzXSxHPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHo9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sVz1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ4LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxaPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGo9WzY4LDY5LDcwXSxvZT1bMSwxMjJdLEs9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsU0Q6Nixkb2N1bWVudDo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSxib3hfc2VjdGlvbjoxMCxib3hfbGluZToxMSxwYXJ0aWNpcGFudF9zdGF0ZW1lbnQ6MTIsY3JlYXRlOjEzLGJveDoxNCxyZXN0T2ZMaW5lOjE1LGVuZDoxNixzaWduYWw6MTcsYXV0b251bWJlcjoxOCxOVU06MTksb2ZmOjIwLGFjdGl2YXRlOjIxLGFjdG9yOjIyLGRlYWN0aXZhdGU6MjMsbm90ZV9zdGF0ZW1lbnQ6MjQsbGlua3Nfc3RhdGVtZW50OjI1LGxpbmtfc3RhdGVtZW50OjI2LHByb3BlcnRpZXNfc3RhdGVtZW50OjI3LGRldGFpbHNfc3RhdGVtZW50OjI4LHRpdGxlOjI5LGxlZ2FjeV90aXRsZTozMCxhY2NfdGl0bGU6MzEsYWNjX3RpdGxlX3ZhbHVlOjMyLGFjY19kZXNjcjozMyxhY2NfZGVzY3JfdmFsdWU6MzQsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNSxsb29wOjM2LHJlY3Q6Mzcsb3B0OjM4LGFsdDozOSxlbHNlX3NlY3Rpb25zOjQwLHBhcjo0MSxwYXJfc2VjdGlvbnM6NDIscGFyX292ZXI6NDMsY3JpdGljYWw6NDQsb3B0aW9uX3NlY3Rpb25zOjQ1LGJyZWFrOjQ2LG9wdGlvbjo0NyxhbmQ6NDgsZWxzZTo0OSxwYXJ0aWNpcGFudDo1MCxBUzo1MSxwYXJ0aWNpcGFudF9hY3Rvcjo1MixkZXN0cm95OjUzLG5vdGU6NTQscGxhY2VtZW50OjU1LHRleHQyOjU2LG92ZXI6NTcsYWN0b3JfcGFpcjo1OCxsaW5rczo1OSxsaW5rOjYwLHByb3BlcnRpZXM6NjEsZGV0YWlsczo2MixzcGFjZUxpc3Q6NjMsIiwiOjY0LGxlZnRfb2Y6NjUscmlnaHRfb2Y6NjYsc2lnbmFsdHlwZTo2NywiKyI6NjgsIi0iOjY5LEFDVE9SOjcwLFNPTElEX09QRU5fQVJST1c6NzEsRE9UVEVEX09QRU5fQVJST1c6NzIsU09MSURfQVJST1c6NzMsQklESVJFQ1RJT05BTF9TT0xJRF9BUlJPVzo3NCxET1RURURfQVJST1c6NzUsQklESVJFQ1RJT05BTF9ET1RURURfQVJST1c6NzYsU09MSURfQ1JPU1M6NzcsRE9UVEVEX0NST1NTOjc4LFNPTElEX1BPSU5UOjc5LERPVFRFRF9QT0lOVDo4MCxUWFQ6ODEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiQklESVJFQ1RJT05BTF9TT0xJRF9BUlJPVyIsNzU6IkRPVFRFRF9BUlJPVyIsNzY6IkJJRElSRUNUSU9OQUxfRE9UVEVEX0FSUk9XIiw3NzoiU09MSURfQ1JPU1MiLDc4OiJET1RURURfQ1JPU1MiLDc5OiJTT0xJRF9QT0lOVCIsODA6IkRPVFRFRF9QT0lOVCIsODE6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNTYsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihxLFEsYWUsdWUsY2UsdGUsTmUpe3ZhciBzZT10ZS5sZW5ndGgtMTtzd2l0Y2goY2Upe2Nhc2UgMzpyZXR1cm4gdWUuYXBwbHkodGVbc2VdKSx0ZVtzZV07YnJlYWs7Y2FzZSA0OmNhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1OmNhc2UgMTA6dGVbc2UtMV0ucHVzaCh0ZVtzZV0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDY6Y2FzZSA3OmNhc2UgMTE6Y2FzZSAxMjp0aGlzLiQ9dGVbc2VdO2JyZWFrO2Nhc2UgODpjYXNlIDEzOnRoaXMuJD1bXTticmVhaztjYXNlIDE1OnRlW3NlXS50eXBlPSJjcmVhdGVQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW3NlXTticmVhaztjYXNlIDE2OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImJveFN0YXJ0Iixib3hEYXRhOnVlLnBhcnNlQm94RGF0YSh0ZVtzZS0yXSl9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJib3hFbmQiLGJveFRleHQ6dGVbc2UtMl19KSx0aGlzLiQ9dGVbc2UtMV07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKHRlW3NlLTJdKSxzZXF1ZW5jZUluZGV4U3RlcDpOdW1iZXIodGVbc2UtMV0pLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcih0ZVtzZS0xXSksc2VxdWVuY2VJbmRleFN0ZXA6MSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIwOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiExLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6dGVbc2UtMV0uYWN0b3J9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUNUSVZFX0VORCxhY3Rvcjp0ZVtzZS0xXS5hY3Rvcn07YnJlYWs7Y2FzZSAyOTp1ZS5zZXREaWFncmFtVGl0bGUodGVbc2VdLnN1YnN0cmluZyg2KSksdGhpcy4kPXRlW3NlXS5zdWJzdHJpbmcoNik7YnJlYWs7Y2FzZSAzMDp1ZS5zZXREaWFncmFtVGl0bGUodGVbc2VdLnN1YnN0cmluZyg3KSksdGhpcy4kPXRlW3NlXS5zdWJzdHJpbmcoNyk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9dGVbc2VdLnRyaW0oKSx1ZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzMzp0aGlzLiQ9dGVbc2VdLnRyaW0oKSx1ZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzQ6dGVbc2UtMV0udW5zaGlmdCh7dHlwZToibG9vcFN0YXJ0Iixsb29wVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuTE9PUF9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6Imxvb3BFbmQiLGxvb3BUZXh0OnRlW3NlLTJdLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuTE9PUF9FTkR9KSx0aGlzLiQ9dGVbc2UtMV07YnJlYWs7Y2FzZSAzNTp0ZVtzZS0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5SRUNUX1NUQVJUfSksdGVbc2UtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgMzY6dGVbc2UtMV0udW5zaGlmdCh7dHlwZToib3B0U3RhcnQiLG9wdFRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLk9QVF9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6Im9wdEVuZCIsb3B0VGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDM3OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BTFRfU1RBUlR9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUxUX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDM4OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfU1RBUlR9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDM5OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6InBhckVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgNDA6dGVbc2UtMV0udW5zaGlmdCh7dHlwZToiY3JpdGljYWxTdGFydCIsY3JpdGljYWxUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6ImNyaXRpY2FsRW5kIixzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkNSSVRJQ0FMX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDQxOnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImJyZWFrU3RhcnQiLGJyZWFrVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQlJFQUtfU1RBUlR9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJicmVha0VuZCIsb3B0VGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQlJFQUtfRU5EfSksdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXRlW3NlLTNdLmNvbmNhdChbe3R5cGU6Im9wdGlvbiIsb3B0aW9uVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMV0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OfSx0ZVtzZV1dKTticmVhaztjYXNlIDQ1OnRoaXMuJD10ZVtzZS0zXS5jb25jYXQoW3t0eXBlOiJhbmQiLHBhclRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlBBUl9BTkR9LHRlW3NlXV0pO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXRlW3NlLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFMVF9FTFNFfSx0ZVtzZV1dKTticmVhaztjYXNlIDQ4OnRlW3NlLTNdLmRyYXc9InBhcnRpY2lwYW50Iix0ZVtzZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGVbc2UtM10uZGVzY3JpcHRpb249dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSx0aGlzLiQ9dGVbc2UtM107YnJlYWs7Y2FzZSA0OTp0ZVtzZS0xXS5kcmF3PSJwYXJ0aWNpcGFudCIsdGVbc2UtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDUwOnRlW3NlLTNdLmRyYXc9ImFjdG9yIix0ZVtzZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGVbc2UtM10uZGVzY3JpcHRpb249dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSx0aGlzLiQ9dGVbc2UtM107YnJlYWs7Y2FzZSA1MTp0ZVtzZS0xXS5kcmF3PSJhY3RvciIsdGVbc2UtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDUyOnRlW3NlLTFdLnR5cGU9ImRlc3Ryb3lQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnRlW3NlLTJdLGFjdG9yOnRlW3NlLTFdLmFjdG9yLHRleHQ6dGVbc2VdfV07YnJlYWs7Y2FzZSA1NDp0ZVtzZS0yXT1bXS5jb25jYXQodGVbc2UtMV0sdGVbc2UtMV0pLnNsaWNlKDAsMiksdGVbc2UtMl1bMF09dGVbc2UtMl1bMF0uYWN0b3IsdGVbc2UtMl1bMV09dGVbc2UtMl1bMV0uYWN0b3IsdGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnVlLlBMQUNFTUVOVC5PVkVSLGFjdG9yOnRlW3NlLTJdLnNsaWNlKDAsMiksdGV4dDp0ZVtzZV19XTticmVhaztjYXNlIDU1OnRoaXMuJD1bdGVbc2UtMV0se3R5cGU6ImFkZExpbmtzIixhY3Rvcjp0ZVtzZS0xXS5hY3Rvcix0ZXh0OnRlW3NlXX1dO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkQUxpbmsiLGFjdG9yOnRlW3NlLTFdLmFjdG9yLHRleHQ6dGVbc2VdfV07YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9W3RlW3NlLTFdLHt0eXBlOiJhZGRQcm9wZXJ0aWVzIixhY3Rvcjp0ZVtzZS0xXS5hY3Rvcix0ZXh0OnRlW3NlXX1dO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkRGV0YWlscyIsYWN0b3I6dGVbc2UtMV0uYWN0b3IsdGV4dDp0ZVtzZV19XTticmVhaztjYXNlIDYxOnRoaXMuJD1bdGVbc2UtMl0sdGVbc2VdXTticmVhaztjYXNlIDYyOnRoaXMuJD10ZVtzZV07YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9dWUuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDY0OnRoaXMuJD11ZS5QTEFDRU1FTlQuUklHSFRPRjticmVhaztjYXNlIDY1OnRoaXMuJD1bdGVbc2UtNF0sdGVbc2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbc2UtNF0uYWN0b3IsdG86dGVbc2UtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtzZS0zXSxtc2c6dGVbc2VdLGFjdGl2YXRlOiEwfSx7dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOnRlW3NlLTFdLmFjdG9yfV07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9W3RlW3NlLTRdLHRlW3NlLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOnRlW3NlLTRdLmFjdG9yLHRvOnRlW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6dGVbc2UtM10sbXNnOnRlW3NlXX0se3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOnRlW3NlLTRdLmFjdG9yfV07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9W3RlW3NlLTNdLHRlW3NlLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOnRlW3NlLTNdLmFjdG9yLHRvOnRlW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6dGVbc2UtMl0sbXNnOnRlW3NlXX1dO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXt0eXBlOiJhZGRQYXJ0aWNpcGFudCIsYWN0b3I6dGVbc2VdfTticmVhaztjYXNlIDY5OnRoaXMuJD11ZS5MSU5FVFlQRS5TT0xJRF9PUEVOO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPXVlLkxJTkVUWVBFLkRPVFRFRF9PUEVOO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPXVlLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPXVlLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9dWUuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXVlLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPXVlLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXVlLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDc3OnRoaXMuJD11ZS5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDc4OnRoaXMuJD11ZS5MSU5FVFlQRS5ET1RURURfUE9JTlQ7YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9dWUucGFyc2VNZXNzYWdlKHRlW3NlXS50cmltKCkuc3Vic3RyaW5nKDEpKTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OmUsNTpyLDY6bn0sezE6WzNdfSx7Mzo1LDQ6ZSw1OnIsNjpufSx7Mzo2LDQ6ZSw1OnIsNjpufSx0KFsxLDQsNSwxMywxNCwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0saSx7Nzo3fSksezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXSw0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpDLDYxOk8sNjI6Tiw3MDpQfSx0KEYsWzIsNV0pLHs5OjQ3LDEyOjEyLDEzOmwsMTQ6dSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpDLDYxOk8sNjI6Tiw3MDpQfSx0KEYsWzIsN10pLHQoRixbMiw4XSksdChGLFsyLDE0XSksezEyOjQ4LDUwOkEsNTI6SSw1MzpEfSx7MTU6WzEsNDldfSx7NTpbMSw1MF19LHs1OlsxLDUzXSwxOTpbMSw1MV0sMjA6WzEsNTJdfSx7MjI6NTQsNzA6UH0sezIyOjU1LDcwOlB9LHs1OlsxLDU2XX0sezU6WzEsNTddfSx7NTpbMSw1OF19LHs1OlsxLDU5XX0sezU6WzEsNjBdfSx0KEYsWzIsMjldKSx0KEYsWzIsMzBdKSx7MzI6WzEsNjFdfSx7MzQ6WzEsNjJdfSx0KEYsWzIsMzNdKSx7MTU6WzEsNjNdfSx7MTU6WzEsNjRdfSx7MTU6WzEsNjVdfSx7MTU6WzEsNjZdfSx7MTU6WzEsNjddfSx7MTU6WzEsNjhdfSx7MTU6WzEsNjldfSx7MTU6WzEsNzBdfSx7MjI6NzEsNzA6UH0sezIyOjcyLDcwOlB9LHsyMjo3Myw3MDpQfSx7Njc6NzQsNzE6WzEsNzVdLDcyOlsxLDc2XSw3MzpbMSw3N10sNzQ6WzEsNzhdLDc1OlsxLDc5XSw3NjpbMSw4MF0sNzc6WzEsODFdLDc4OlsxLDgyXSw3OTpbMSw4M10sODA6WzEsODRdfSx7NTU6ODUsNTc6WzEsODZdLDY1OlsxLDg3XSw2NjpbMSw4OF19LHsyMjo4OSw3MDpQfSx7MjI6OTAsNzA6UH0sezIyOjkxLDcwOlB9LHsyMjo5Miw3MDpQfSx0KFs1LDUxLDY0LDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxXSxbMiw2OF0pLHQoRixbMiw2XSksdChGLFsyLDE1XSksdChCLFsyLDldLHsxMDo5M30pLHQoRixbMiwxN10pLHs1OlsxLDk1XSwxOTpbMSw5NF19LHs1OlsxLDk2XX0sdChGLFsyLDIxXSksezU6WzEsOTddfSx7NTpbMSw5OF19LHQoRixbMiwyNF0pLHQoRixbMiwyNV0pLHQoRixbMiwyNl0pLHQoRixbMiwyN10pLHQoRixbMiwyOF0pLHQoRixbMiwzMV0pLHQoRixbMiwzMl0pLHQoRyxpLHs3Ojk5fSksdChHLGksezc6MTAwfSksdChHLGksezc6MTAxfSksdCh6LGksezQwOjEwMiw3OjEwM30pLHQoVyxpLHs0MjoxMDQsNzoxMDV9KSx0KFcsaSx7NzoxMDUsNDI6MTA2fSksdChaLGksezQ1OjEwNyw3OjEwOH0pLHQoRyxpLHs3OjEwOX0pLHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEzXSw1MTpbMSwxMTJdfSx7NTpbMSwxMTRdfSx7MjI6MTE3LDY4OlsxLDExNV0sNjk6WzEsMTE2XSw3MDpQfSx0KGosWzIsNjldKSx0KGosWzIsNzBdKSx0KGosWzIsNzFdKSx0KGosWzIsNzJdKSx0KGosWzIsNzNdKSx0KGosWzIsNzRdKSx0KGosWzIsNzVdKSx0KGosWzIsNzZdKSx0KGosWzIsNzddKSx0KGosWzIsNzhdKSx7MjI6MTE4LDcwOlB9LHsyMjoxMjAsNTg6MTE5LDcwOlB9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMjEsODE6b2V9LHs1NjoxMjMsODE6b2V9LHs1NjoxMjQsODE6b2V9LHs1NjoxMjUsODE6b2V9LHs0OlsxLDEyOF0sNTpbMSwxMzBdLDExOjEyNywxMjoxMjksMTY6WzEsMTI2XSw1MDpBLDUyOkksNTM6RH0sezU6WzEsMTMxXX0sdChGLFsyLDE5XSksdChGLFsyLDIwXSksdChGLFsyLDIyXSksdChGLFsyLDIzXSksezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDEzMl0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Qyw2MTpPLDYyOk4sNzA6UH0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDEzM10sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Qyw2MTpPLDYyOk4sNzA6UH0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDEzNF0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Qyw2MTpPLDYyOk4sNzA6UH0sezE2OlsxLDEzNV19LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMiw0Nl0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw0OTpbMSwxMzZdLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpDLDYxOk8sNjI6Tiw3MDpQfSx7MTY6WzEsMTM3XX0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsyLDQ0XSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDQ4OlsxLDEzOF0sNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOkMsNjE6Tyw2MjpOLDcwOlB9LHsxNjpbMSwxMzldfSx7MTY6WzEsMTQwXX0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsyLDQyXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDQ3OlsxLDE0MV0sNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOkMsNjE6Tyw2MjpOLDcwOlB9LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxNDJdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpfLDQxOlQsNDM6RSw0NDpMLDQ2OlMsNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOkMsNjE6Tyw2MjpOLDcwOlB9LHsxNTpbMSwxNDNdfSx0KEYsWzIsNDldKSx7MTU6WzEsMTQ0XX0sdChGLFsyLDUxXSksdChGLFsyLDUyXSksezIyOjE0NSw3MDpQfSx7MjI6MTQ2LDcwOlB9LHs1NjoxNDcsODE6b2V9LHs1NjoxNDgsODE6b2V9LHs1NjoxNDksODE6b2V9LHs2NDpbMSwxNTBdLDgxOlsyLDYyXX0sezU6WzIsNTVdfSx7NTpbMiw3OV19LHs1OlsyLDU2XX0sezU6WzIsNTddfSx7NTpbMiw1OF19LHQoRixbMiwxNl0pLHQoQixbMiwxMF0pLHsxMjoxNTEsNTA6QSw1MjpJLDUzOkR9LHQoQixbMiwxMl0pLHQoQixbMiwxM10pLHQoRixbMiwxOF0pLHQoRixbMiwzNF0pLHQoRixbMiwzNV0pLHQoRixbMiwzNl0pLHQoRixbMiwzN10pLHsxNTpbMSwxNTJdfSx0KEYsWzIsMzhdKSx7MTU6WzEsMTUzXX0sdChGLFsyLDM5XSksdChGLFsyLDQwXSksezE1OlsxLDE1NF19LHQoRixbMiw0MV0pLHs1OlsxLDE1NV19LHs1OlsxLDE1Nl19LHs1NjoxNTcsODE6b2V9LHs1NjoxNTgsODE6b2V9LHs1OlsyLDY3XX0sezU6WzIsNTNdfSx7NTpbMiw1NF19LHsyMjoxNTksNzA6UH0sdChCLFsyLDExXSksdCh6LGksezc6MTAzLDQwOjE2MH0pLHQoVyxpLHs3OjEwNSw0MjoxNjF9KSx0KFosaSx7NzoxMDgsNDU6MTYyfSksdChGLFsyLDQ4XSksdChGLFsyLDUwXSksezU6WzIsNjVdfSx7NTpbMiw2Nl19LHs4MTpbMiw2MV19LHsxNjpbMiw0N119LHsxNjpbMiw0NV19LHsxNjpbMiw0M119XSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDg3OlsyLDYzXSw4ODpbMiw2NF0sMTIxOlsyLDU1XSwxMjI6WzIsNzldLDEyMzpbMiw1Nl0sMTI0OlsyLDU3XSwxMjU6WzIsNThdLDE0NzpbMiw2N10sMTQ4OlsyLDUzXSwxNDk6WzIsNTRdLDE1NzpbMiw2NV0sMTU4OlsyLDY2XSwxNTk6WzIsNjFdLDE2MDpbMiw0N10sMTYxOlsyLDQ1XSwxNjI6WzIsNDNdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24ocSxRKXtpZihRLnJlY292ZXJhYmxlKXRoaXMudHJhY2UocSk7ZWxzZXt2YXIgYWU9bmV3IEVycm9yKHEpO3Rocm93IGFlLmhhc2g9USxhZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihxKXt2YXIgUT10aGlzLGFlPVswXSx1ZT1bXSxjZT1bbnVsbF0sdGU9W10sTmU9dGhpcy50YWJsZSxzZT0iIixrZT0wLFJlPTAsQ2U9MCxQZT0yLEllPTEsJGU9dGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseWU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxYPXt5eTp7fX07Zm9yKHZhciBmZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGZlKSYmKFgueXlbZmVdPXRoaXMueXlbZmVdKTt5ZS5zZXRJbnB1dChxLFgueXkpLFgueXkubGV4ZXI9eWUsWC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeWUueXlsbG9jPiJ1IiYmKHllLnl5bGxvYz17fSk7dmFyIGhlPXllLnl5bGxvYzt0ZS5wdXNoKGhlKTt2YXIgZ2U9eWUub3B0aW9ucyYmeWUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFgueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9WC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBuZShrdCl7YWUubGVuZ3RoPWFlLmxlbmd0aC0yKmt0LGNlLmxlbmd0aD1jZS5sZW5ndGgta3QsdGUubGVuZ3RoPXRlLmxlbmd0aC1rdH1vKG5lLCJwb3BTdGFjayIpO2Z1bmN0aW9uIHZlKCl7dmFyIGt0O3JldHVybiBrdD11ZS5wb3AoKXx8eWUubGV4KCl8fEllLHR5cGVvZiBrdCE9Im51bWJlciImJihrdCBpbnN0YW5jZW9mIEFycmF5JiYodWU9a3Qsa3Q9dWUucG9wKCkpLGt0PVEuc3ltYm9sc19ba3RdfHxrdCksa3R9byh2ZSwibGV4Iik7Zm9yKHZhciBVLFRlLGllLEVlLEFlLEdlLEJlPXt9LG1lLEhlLE9lLGV0Ozspe2lmKGllPWFlW2FlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2llXT9FZT10aGlzLmRlZmF1bHRBY3Rpb25zW2llXTooKFU9PT1udWxsfHx0eXBlb2YgVT4idSIpJiYoVT12ZSgpKSxFZT1OZVtpZV0mJk5lW2llXVtVXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgYnQ9IiI7ZXQ9W107Zm9yKG1lIGluIE5lW2llXSl0aGlzLnRlcm1pbmFsc19bbWVdJiZtZT5QZSYmZXQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW21lXSsiJyIpO3llLnNob3dQb3NpdGlvbj9idD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrZSsxKStgOgpgK3llLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArZXQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVXXx8VSkrIiciOmJ0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGtlKzEpKyI6IFVuZXhwZWN0ZWQgIisoVT09SWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVV18fFUpKyInIiksdGhpcy5wYXJzZUVycm9yKGJ0LHt0ZXh0OnllLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tVXXx8VSxsaW5lOnllLnl5bGluZW5vLGxvYzpoZSxleHBlY3RlZDpldH0pfWlmKEVlWzBdaW5zdGFuY2VvZiBBcnJheSYmRWUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitpZSsiLCB0b2tlbjogIitVKTtzd2l0Y2goRWVbMF0pe2Nhc2UgMTphZS5wdXNoKFUpLGNlLnB1c2goeWUueXl0ZXh0KSx0ZS5wdXNoKHllLnl5bGxvYyksYWUucHVzaChFZVsxXSksVT1udWxsLFRlPyhVPVRlLFRlPW51bGwpOihSZT15ZS55eWxlbmcsc2U9eWUueXl0ZXh0LGtlPXllLnl5bGluZW5vLGhlPXllLnl5bGxvYyxDZT4wJiZDZS0tKTticmVhaztjYXNlIDI6aWYoSGU9dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEJlLiQ9Y2VbY2UubGVuZ3RoLUhlXSxCZS5fJD17Zmlyc3RfbGluZTp0ZVt0ZS5sZW5ndGgtKEhlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6dGVbdGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGVbdGUubGVuZ3RoLShIZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0ZVt0ZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGdlJiYoQmUuXyQucmFuZ2U9W3RlW3RlLmxlbmd0aC0oSGV8fDEpXS5yYW5nZVswXSx0ZVt0ZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxHZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQmUsW3NlLFJlLGtlLFgueXksRWVbMV0sY2UsdGVdLmNvbmNhdCgkZSkpLHR5cGVvZiBHZTwidSIpcmV0dXJuIEdlO0hlJiYoYWU9YWUuc2xpY2UoMCwtMSpIZSoyKSxjZT1jZS5zbGljZSgwLC0xKkhlKSx0ZT10ZS5zbGljZSgwLC0xKkhlKSksYWUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tFZVsxXV1bMF0pLGNlLnB1c2goQmUuJCksdGUucHVzaChCZS5fJCksT2U9TmVbYWVbYWUubGVuZ3RoLTJdXVthZVthZS5sZW5ndGgtMV1dLGFlLnB1c2goT2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxlZT1mdW5jdGlvbigpe3ZhciBIPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUSxhZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihRLGFlKTtlbHNlIHRocm93IG5ldyBFcnJvcihRKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHEsUSl7cmV0dXJuIHRoaXMueXk9UXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9cSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1xLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1xLHRoaXMubWF0Y2hlZCs9cTt2YXIgUT1xLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSkscX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihxKXt2YXIgUT1xLmxlbmd0aCxhZT1xLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9cSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtUSksdGhpcy5vZmZzZXQtPVE7dmFyIHVlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGFlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09YWUubGVuZ3RoLTEpO3ZhciBjZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YWU/KGFlLmxlbmd0aD09PXVlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrdWVbdWUubGVuZ3RoLWFlLmxlbmd0aF0ubGVuZ3RoLWFlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtjZVswXSxjZVswXSt0aGlzLnl5bGVuZy1RXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24ocSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ocS5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgcT10aGlzLm1hdGNoO3JldHVybiBxLmxlbmd0aDwyMCYmKHErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXEubGVuZ3RoKSksKHEuc3Vic3RyKDAsMjApKyhxLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5wYXN0SW5wdXQoKSxRPW5ldyBBcnJheShxLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHErdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1ErIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHEsUSl7dmFyIGFlLHVlLGNlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihjZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihjZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx1ZT1xWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx1ZSYmKHRoaXMueXlsaW5lbm8rPXVlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnVlP3VlW3VlLmxlbmd0aC0xXS5sZW5ndGgtdWVbdWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rcVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1xWzBdLHRoaXMubWF0Y2grPXFbMF0sdGhpcy5tYXRjaGVzPXEsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UocVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9cVswXSxhZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxRLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGFlKXJldHVybiBhZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgdGUgaW4gY2UpdGhpc1t0ZV09Y2VbdGVdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBxLFEsYWUsdWU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgY2U9dGhpcy5fY3VycmVudFJ1bGVzKCksdGU9MDt0ZTxjZS5sZW5ndGg7dGUrKylpZihhZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2NlW3RlXV0pLGFlJiYoIVF8fGFlWzBdLmxlbmd0aD5RWzBdLmxlbmd0aCkpe2lmKFE9YWUsdWU9dGUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocT10aGlzLnRlc3RfbWF0Y2goYWUsY2VbdGVdKSxxIT09ITEpcmV0dXJuIHE7aWYodGhpcy5fYmFja3RyYWNrKXtRPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFE/KHE9dGhpcy50ZXN0X21hdGNoKFEsY2VbdWVdKSxxIT09ITE/cTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBRPXRoaXMubmV4dCgpO3JldHVybiBRfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihRKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgUT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBRPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oUSl7cmV0dXJuIFE9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhRfHwwKSxRPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbUV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihRKXt0aGlzLmJlZ2luKFEpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUSxhZSx1ZSxjZSl7dmFyIHRlPWNlO3N3aXRjaCh1ZSl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gYWUueXl0ZXh0PWFlLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDticmVhaztjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTticmVhaztjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNzticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7YnJlYWs7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2JyZWFrO2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMzticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIGFlLnl5dGV4dD1hZS55eXRleHQudHJpbSgpLDcwO2JyZWFrO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDc1O2Nhc2UgNTY6cmV0dXJuIDc2O2Nhc2UgNTc6cmV0dXJuIDcxO2Nhc2UgNTg6cmV0dXJuIDcyO2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDgwO2Nhc2UgNjM6cmV0dXJuIDgxO2Nhc2UgNjQ6cmV0dXJuIDY4O2Nhc2UgNjU6cmV0dXJuIDY5O2Nhc2UgNjY6cmV0dXJuIDU7Y2FzZSA2NzpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OlswLTldKyg/PVsgXG5dKykpL2ksL14oPzpib3hcYikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzphY3RvclxiKS9pLC9eKD86Y3JlYXRlXGIpL2ksL14oPzpkZXN0cm95XGIpL2ksL14oPzpbXlw8LT5cLT46XG4sO10rPyhbXC1dKlteXDwtPlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcPC0+XC0+OlxuLDtdKygoPyEoLXh8LS14fC1cKXwtLVwpKSlbXC1dKlteXCtcPC0+XC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86PDwtPj4pL2ksL14oPzotLT4+KS9pLC9eKD86PDwtLT4+KS9pLC9eKD86LT4pL2ksL14oPzotLT4pL2ksL14oPzotW3hdKS9pLC9eKD86LS1beF0pL2ksL14oPzotW1wpXSkvaSwvXig/Oi0tW1wpXSkvaSwvXig/OjooPzooPzpubyk/d3JhcCk/W14jXG47XSspL2ksL14oPzpcKykvaSwvXig/Oi0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzQzXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzQxXSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbMiwzLDEyXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbMiwzLDEzLDE0XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOlsyLDMsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOCw5LDEwLDExLDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQyLDQ0LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEh9KCk7Sy5sZXhlcj1lZTtmdW5jdGlvbiBKKCl7dGhpcy55eT17fX1yZXR1cm4gbyhKLCJQYXJzZXIiKSxKLnByb3RvdHlwZT1LLEsuUGFyc2VyPUosbmV3IEp9KCk7VE8ucGFyc2VyPVRPO0dmZT1UT30pO2Z1bmN0aW9uIEVPKHQsZSl7aWYodC5saW5rcz09bnVsbCl0LmxpbmtzPWU7ZWxzZSBmb3IobGV0IHIgaW4gZSl0LmxpbmtzW3JdPWVbcl19ZnVuY3Rpb24gWWZlKHQsZSl7aWYodC5wcm9wZXJ0aWVzPT1udWxsKXQucHJvcGVydGllcz1lO2Vsc2UgZm9yKGxldCByIGluIGUpdC5wcm9wZXJ0aWVzW3JdPWVbcl19ZnVuY3Rpb24gVVVlKCl7JHQucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH12YXIgJHQsVFVlLGtPLGtVZSxFVWUsd2ksU1VlLENVZSxBVWUsX1VlLExVZSxEVWUsTlVlLE94LFJVZSxNVWUsSVVlLE9VZSxQVWUsVmZlLE0wLEJVZSxGVWUselVlLEl4LEdVZSwkVWUsVWZlLEhmZSxWVWUsV2ZlLHFmZSxIVWUsWGZlLFNPLGpmZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7dXQoKTtkRSgpO2ZyKCk7QWkoKTskdD1uZXcgdmYoKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6bmV3IE1hcCxjcmVhdGVkQWN0b3JzOm5ldyBNYXAsZGVzdHJveWVkQWN0b3JzOm5ldyBNYXAsYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpLFRVZT1vKGZ1bmN0aW9uKHQpeyR0LnJlY29yZHMuYm94ZXMucHVzaCh7bmFtZTp0LnRleHQsd3JhcDp0LndyYXA/P00wKCksZmlsbDp0LmNvbG9yLGFjdG9yS2V5czpbXX0pLCR0LnJlY29yZHMuY3VycmVudEJveD0kdC5yZWNvcmRzLmJveGVzLnNsaWNlKC0xKVswXX0sImFkZEJveCIpLGtPPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9JHQucmVjb3Jkcy5jdXJyZW50Qm94LGE9JHQucmVjb3Jkcy5hY3RvcnMuZ2V0KHQpO2lmKGEpe2lmKCR0LnJlY29yZHMuY3VycmVudEJveCYmYS5ib3gmJiR0LnJlY29yZHMuY3VycmVudEJveCE9PWEuYm94KXRocm93IG5ldyBFcnJvcihgQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogJHthLm5hbWV9IGNhbid0IGJlIGluICcke2EuYm94Lm5hbWV9JyBhbmQgaW4gJyR7JHQucmVjb3Jkcy5jdXJyZW50Qm94Lm5hbWV9JyBhdCB0aGUgc2FtZSB0aW1lLmApO2lmKGk9YS5ib3g/YS5ib3g6JHQucmVjb3Jkcy5jdXJyZW50Qm94LGEuYm94PWksYSYmZT09PWEubmFtZSYmcj09bnVsbClyZXR1cm59aWYocj8udGV4dD09bnVsbCYmKHI9e3RleHQ6ZSx0eXBlOm59KSwobj09bnVsbHx8ci50ZXh0PT1udWxsKSYmKHI9e3RleHQ6ZSx0eXBlOm59KSwkdC5yZWNvcmRzLmFjdG9ycy5zZXQodCx7Ym94OmksbmFtZTplLGRlc2NyaXB0aW9uOnIudGV4dCx3cmFwOnIud3JhcD8/TTAoKSxwcmV2QWN0b3I6JHQucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpuPz8icGFydGljaXBhbnQifSksJHQucmVjb3Jkcy5wcmV2QWN0b3Ipe2xldCBzPSR0LnJlY29yZHMuYWN0b3JzLmdldCgkdC5yZWNvcmRzLnByZXZBY3Rvcik7cyYmKHMubmV4dEFjdG9yPXQpfSR0LnJlY29yZHMuY3VycmVudEJveCYmJHQucmVjb3Jkcy5jdXJyZW50Qm94LmFjdG9yS2V5cy5wdXNoKHQpLCR0LnJlY29yZHMucHJldkFjdG9yPXR9LCJhZGRBY3RvciIpLGtVZT1vKHQ9PntsZXQgZSxyPTA7aWYoIXQpcmV0dXJuIDA7Zm9yKGU9MDtlPCR0LnJlY29yZHMubWVzc2FnZXMubGVuZ3RoO2UrKykkdC5yZWNvcmRzLm1lc3NhZ2VzW2VdLnR5cGU9PT1JeC5BQ1RJVkVfU1RBUlQmJiR0LnJlY29yZHMubWVzc2FnZXNbZV0uZnJvbT09PXQmJnIrKywkdC5yZWNvcmRzLm1lc3NhZ2VzW2VdLnR5cGU9PT1JeC5BQ1RJVkVfRU5EJiYkdC5yZWNvcmRzLm1lc3NhZ2VzW2VdLmZyb209PT10JiZyLS07cmV0dXJuIHJ9LCJhY3RpdmF0aW9uQ291bnQiKSxFVWU9byhmdW5jdGlvbih0LGUscixuKXskdC5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206dCx0bzplLG1lc3NhZ2U6ci50ZXh0LHdyYXA6ci53cmFwPz9NMCgpLGFuc3dlcjpufSl9LCJhZGRNZXNzYWdlIiksd2k9byhmdW5jdGlvbih0LGUscixuLGk9ITEpe2lmKG49PT1JeC5BQ1RJVkVfRU5EJiZrVWUodD8/IiIpPDEpe2xldCBzPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIrdCsiKSIpO3Rocm93IHMuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sc31yZXR1cm4gJHQucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOnI/LnRleHQ/PyIiLHdyYXA6cj8ud3JhcD8/TTAoKSx0eXBlOm4sYWN0aXZhdGU6aX0pLCEwfSwiYWRkU2lnbmFsIiksU1VlPW8oZnVuY3Rpb24oKXtyZXR1cm4gJHQucmVjb3Jkcy5ib3hlcy5sZW5ndGg+MH0sImhhc0F0TGVhc3RPbmVCb3giKSxDVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmJveGVzLnNvbWUodD0+dC5uYW1lKX0sImhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUiKSxBVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLm1lc3NhZ2VzfSwiZ2V0TWVzc2FnZXMiKSxfVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmJveGVzfSwiZ2V0Qm94ZXMiKSxMVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmFjdG9yc30sImdldEFjdG9ycyIpLERVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMuY3JlYXRlZEFjdG9yc30sImdldENyZWF0ZWRBY3RvcnMiKSxOVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc30sImdldERlc3Ryb3llZEFjdG9ycyIpLE94PW8oZnVuY3Rpb24odCl7cmV0dXJuICR0LnJlY29yZHMuYWN0b3JzLmdldCh0KX0sImdldEFjdG9yIiksUlVlPW8oZnVuY3Rpb24oKXtyZXR1cm5bLi4uJHQucmVjb3Jkcy5hY3RvcnMua2V5cygpXX0sImdldEFjdG9yS2V5cyIpLE1VZT1vKGZ1bmN0aW9uKCl7JHQucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkPSEwfSwiZW5hYmxlU2VxdWVuY2VOdW1iZXJzIiksSVVlPW8oZnVuY3Rpb24oKXskdC5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITF9LCJkaXNhYmxlU2VxdWVuY2VOdW1iZXJzIiksT1VlPW8oKCk9PiR0LnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZCwic2hvd1NlcXVlbmNlTnVtYmVycyIpLFBVZT1vKGZ1bmN0aW9uKHQpeyR0LnJlY29yZHMud3JhcEVuYWJsZWQ9dH0sInNldFdyYXAiKSxWZmU9byh0PT57aWYodD09PXZvaWQgMClyZXR1cm57fTt0PXQudHJpbSgpO2xldCBlPS9eOj93cmFwOi8uZXhlYyh0KSE9PW51bGw/ITA6L146P25vd3JhcDovLmV4ZWModCkhPT1udWxsPyExOnZvaWQgMDtyZXR1cm57Y2xlYW5lZFRleHQ6KGU9PT12b2lkIDA/dDp0LnJlcGxhY2UoL146Pyg/Om5vKT93cmFwOi8sIiIpKS50cmltKCksd3JhcDplfX0sImV4dHJhY3RXcmFwIiksTTA9bygoKT0+JHQucmVjb3Jkcy53cmFwRW5hYmxlZCE9PXZvaWQgMD8kdC5yZWNvcmRzLndyYXBFbmFibGVkOnBlKCkuc2VxdWVuY2U/LndyYXA/PyExLCJhdXRvV3JhcCIpLEJVZT1vKGZ1bmN0aW9uKCl7JHQucmVzZXQoKSxMcigpfSwiY2xlYXIiKSxGVWU9byhmdW5jdGlvbih0KXtsZXQgZT10LnRyaW0oKSx7d3JhcDpyLGNsZWFuZWRUZXh0Om59PVZmZShlKSxpPXt0ZXh0Om4sd3JhcDpyfTtyZXR1cm4gWS5kZWJ1ZyhgcGFyc2VNZXNzYWdlOiAke0pTT04uc3RyaW5naWZ5KGkpfWApLGl9LCJwYXJzZU1lc3NhZ2UiKSx6VWU9byhmdW5jdGlvbih0KXtsZXQgZT0vXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLy5leGVjKHQpLHI9ZT8uWzFdP2VbMV0udHJpbSgpOiJ0cmFuc3BhcmVudCIsbj1lPy5bMl0/ZVsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdz8uQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIixyKXx8KHI9InRyYW5zcGFyZW50IixuPXQudHJpbSgpKTtlbHNle2xldCBzPW5ldyBPcHRpb24oKS5zdHlsZTtzLmNvbG9yPXIscy5jb2xvciE9PXImJihyPSJ0cmFuc3BhcmVudCIsbj10LnRyaW0oKSl9bGV0e3dyYXA6aSxjbGVhbmVkVGV4dDphfT1WZmUobik7cmV0dXJue3RleHQ6YT9rcihhLHBlKCkpOnZvaWQgMCxjb2xvcjpyLHdyYXA6aX19LCJwYXJzZUJveERhdGEiKSxJeD17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjUsQVVUT05VTUJFUjoyNixDUklUSUNBTF9TVEFSVDoyNyxDUklUSUNBTF9PUFRJT046MjgsQ1JJVElDQUxfRU5EOjI5LEJSRUFLX1NUQVJUOjMwLEJSRUFLX0VORDozMSxQQVJfT1ZFUl9TVEFSVDozMixCSURJUkVDVElPTkFMX1NPTElEOjMzLEJJRElSRUNUSU9OQUxfRE9UVEVEOjM0fSxHVWU9e0ZJTExFRDowLE9QRU46MX0sJFVlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxVZmU9byhmdW5jdGlvbih0LGUscil7bGV0IG49e2FjdG9yOnQscGxhY2VtZW50OmUsbWVzc2FnZTpyLnRleHQsd3JhcDpyLndyYXA/P00wKCl9LGk9W10uY29uY2F0KHQsdCk7JHQucmVjb3Jkcy5ub3Rlcy5wdXNoKG4pLCR0LnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTppWzBdLHRvOmlbMV0sbWVzc2FnZTpyLnRleHQsd3JhcDpyLndyYXA/P00wKCksdHlwZTpJeC5OT1RFLHBsYWNlbWVudDplfSl9LCJhZGROb3RlIiksSGZlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1PeCh0KTt0cnl7bGV0IG49a3IoZS50ZXh0LHBlKCkpO249bi5yZXBsYWNlKC8mYW1wOy9nLCImIiksbj1uLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtsZXQgaT1KU09OLnBhcnNlKG4pO0VPKHIsaSl9Y2F0Y2gobil7WS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLG4pfX0sImFkZExpbmtzIiksVlVlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1PeCh0KTt0cnl7bGV0IG49e30saT1rcihlLnRleHQscGUoKSksYT1pLmluZGV4T2YoIkAiKTtpPWkucmVwbGFjZSgvJmFtcDsvZywiJiIpLGk9aS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7bGV0IHM9aS5zbGljZSgwLGEtMSkudHJpbSgpLGw9aS5zbGljZShhKzEpLnRyaW0oKTtuW3NdPWwsRU8ocixuKX1jYXRjaChuKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsbil9fSwiYWRkQUxpbmsiKTtvKEVPLCJpbnNlcnRMaW5rcyIpO1dmZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9T3godCk7dHJ5e2xldCBuPWtyKGUudGV4dCxwZSgpKSxpPUpTT04ucGFyc2Uobik7WWZlKHIsaSl9Y2F0Y2gobil7WS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLG4pfX0sImFkZFByb3BlcnRpZXMiKTtvKFlmZSwiaW5zZXJ0UHJvcGVydGllcyIpO28oVVVlLCJib3hFbmQiKTtxZmU9byhmdW5jdGlvbih0LGUpe2xldCByPU94KHQpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS50ZXh0KTt0cnl7bGV0IGk9bi5pbm5lckhUTUwsYT1KU09OLnBhcnNlKGkpO2EucHJvcGVydGllcyYmWWZlKHIsYS5wcm9wZXJ0aWVzKSxhLmxpbmtzJiZFTyhyLGEubGlua3MpfWNhdGNoKGkpe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0IixpKX19LCJhZGREZXRhaWxzIiksSFVlPW8oZnVuY3Rpb24odCxlKXtpZih0Py5wcm9wZXJ0aWVzIT09dm9pZCAwKXJldHVybiB0LnByb3BlcnRpZXNbZV19LCJnZXRBY3RvclByb3BlcnR5IiksWGZlPW8oZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24oZSl7WGZlKGUpfSk7ZWxzZSBzd2l0Y2godC50eXBlKXtjYXNlInNlcXVlbmNlSW5kZXgiOiR0LnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTp2b2lkIDAsdG86dm9pZCAwLG1lc3NhZ2U6e3N0YXJ0OnQuc2VxdWVuY2VJbmRleCxzdGVwOnQuc2VxdWVuY2VJbmRleFN0ZXAsdmlzaWJsZTp0LnNlcXVlbmNlVmlzaWJsZX0sd3JhcDohMSx0eXBlOnQuc2lnbmFsVHlwZX0pO2JyZWFrO2Nhc2UiYWRkUGFydGljaXBhbnQiOmtPKHQuYWN0b3IsdC5hY3Rvcix0LmRlc2NyaXB0aW9uLHQuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYoJHQucmVjb3Jkcy5hY3RvcnMuaGFzKHQuYWN0b3IpKXRocm93IG5ldyBFcnJvcigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYWN0b3JzIHdpdGggdGhlIHNhbWUgaWQsIGV2ZW4gaWYgb25lIGlzIGRlc3Ryb3llZCBiZWZvcmUgdGhlIG5leHQgaXMgY3JlYXRlZC4gVXNlICdBUycgYWxpYXNlcyB0byBzaW11bGF0ZSB0aGUgYmVoYXZpb3IiKTskdC5yZWNvcmRzLmxhc3RDcmVhdGVkPXQuYWN0b3Isa08odC5hY3Rvcix0LmFjdG9yLHQuZGVzY3JpcHRpb24sdC5kcmF3KSwkdC5yZWNvcmRzLmNyZWF0ZWRBY3RvcnMuc2V0KHQuYWN0b3IsJHQucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVzdHJveVBhcnRpY2lwYW50IjokdC5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9dC5hY3RvciwkdC5yZWNvcmRzLmRlc3Ryb3llZEFjdG9ycy5zZXQodC5hY3RvciwkdC5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6d2kodC5hY3Rvcix2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOndpKHQuYWN0b3Isdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6VWZlKHQuYWN0b3IsdC5wbGFjZW1lbnQsdC50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpIZmUodC5hY3Rvcix0LnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOlZVZSh0LmFjdG9yLHQudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpXZmUodC5hY3Rvcix0LnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6cWZlKHQuYWN0b3IsdC50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKCR0LnJlY29yZHMubGFzdENyZWF0ZWQpe2lmKHQudG8hPT0kdC5yZWNvcmRzLmxhc3RDcmVhdGVkKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIiskdC5yZWNvcmRzLmxhc3RDcmVhdGVkLm5hbWUrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgY3JlYXRpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTskdC5yZWNvcmRzLmxhc3RDcmVhdGVkPXZvaWQgMH1lbHNlIGlmKCR0LnJlY29yZHMubGFzdERlc3Ryb3llZCl7aWYodC50byE9PSR0LnJlY29yZHMubGFzdERlc3Ryb3llZCYmdC5mcm9tIT09JHQucmVjb3Jkcy5sYXN0RGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIGRlc3Ryb3llZCBwYXJ0aWNpcGFudCAiKyR0LnJlY29yZHMubGFzdERlc3Ryb3llZC5uYW1lKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGRlc3Ryb3lpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTskdC5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9dm9pZCAwfXdpKHQuZnJvbSx0LnRvLHQubXNnLHQuc2lnbmFsVHlwZSx0LmFjdGl2YXRlKTticmVhaztjYXNlImJveFN0YXJ0IjpUVWUodC5ib3hEYXRhKTticmVhaztjYXNlImJveEVuZCI6VVVlKCk7YnJlYWs7Y2FzZSJsb29wU3RhcnQiOndpKHZvaWQgMCx2b2lkIDAsdC5sb29wVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcEVuZCI6d2kodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6d2kodm9pZCAwLHZvaWQgMCx0LmNvbG9yLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0RW5kIjp3aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0U3RhcnQiOndpKHZvaWQgMCx2b2lkIDAsdC5vcHRUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRFbmQiOndpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRTdGFydCI6d2kodm9pZCAwLHZvaWQgMCx0LmFsdFRleHQsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImVsc2UiOndpKHZvaWQgMCx2b2lkIDAsdC5hbHRUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOndpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRBY2NUaXRsZSI6TXIodC50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0Ijp3aSh2b2lkIDAsdm9pZCAwLHQucGFyVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYW5kIjp3aSh2b2lkIDAsdm9pZCAwLHQucGFyVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicGFyRW5kIjp3aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiY3JpdGljYWxTdGFydCI6d2kodm9pZCAwLHZvaWQgMCx0LmNyaXRpY2FsVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjp3aSh2b2lkIDAsdm9pZCAwLHQub3B0aW9uVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiY3JpdGljYWxFbmQiOndpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJicmVha1N0YXJ0Ijp3aSh2b2lkIDAsdm9pZCAwLHQuYnJlYWtUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJicmVha0VuZCI6d2kodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVha319LCJhcHBseSIpLFNPPXthZGRBY3RvcjprTyxhZGRNZXNzYWdlOkVVZSxhZGRTaWduYWw6d2ksYWRkTGlua3M6SGZlLGFkZERldGFpbHM6cWZlLGFkZFByb3BlcnRpZXM6V2ZlLGF1dG9XcmFwOk0wLHNldFdyYXA6UFVlLGVuYWJsZVNlcXVlbmNlTnVtYmVyczpNVWUsZGlzYWJsZVNlcXVlbmNlTnVtYmVyczpJVWUsc2hvd1NlcXVlbmNlTnVtYmVyczpPVWUsZ2V0TWVzc2FnZXM6QVVlLGdldEFjdG9yczpMVWUsZ2V0Q3JlYXRlZEFjdG9yczpEVWUsZ2V0RGVzdHJveWVkQWN0b3JzOk5VZSxnZXRBY3RvcjpPeCxnZXRBY3RvcktleXM6UlVlLGdldEFjdG9yUHJvcGVydHk6SFVlLGdldEFjY1RpdGxlOkJyLGdldEJveGVzOl9VZSxnZXREaWFncmFtVGl0bGU6SnIsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldENvbmZpZzpvKCgpPT5wZSgpLnNlcXVlbmNlLCJnZXRDb25maWciKSxjbGVhcjpCVWUscGFyc2VNZXNzYWdlOkZVZSxwYXJzZUJveERhdGE6elVlLExJTkVUWVBFOkl4LEFSUk9XVFlQRTpHVWUsUExBQ0VNRU5UOiRVZSxhZGROb3RlOlVmZSxzZXRBY2NUaXRsZTpNcixhcHBseTpYZmUsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsaGFzQXRMZWFzdE9uZUJveDpTVWUsaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZTpDVWV9fSk7dmFyIFdVZSxLZmUsUWZlPU0oKCk9PnsidXNlIHN0cmljdCI7V1VlPW8odD0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7dC5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHt0LnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke3Quc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3QubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3QubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke3QubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7dC5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke3QuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHt0LmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7dC5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke3QuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke3QuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCwiZ2V0U3R5bGVzIiksS2ZlPVdVZX0pO3ZhciBDTyxrZixKZmUsZWRlLFlVZSxaZmUsQU8scVVlLFhVZSxQeCxJMCx0ZGUsWGMsX08salVlLEtVZSxRVWUsWlVlLEpVZSxlSGUsdEhlLHJkZSxySGUsbkhlLGlIZSxhSGUsc0hlLG9IZSxsSGUsbmRlLGNIZSxMTyx1SGUsZmksaWRlPU0oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtsdigpO2hyKCk7Q089SmkoUXAoKSwxKTtaYSgpO2tmPTE4KjIsSmZlPSJhY3Rvci10b3AiLGVkZT0iYWN0b3ItYm90dG9tIixZVWU9ImFjdG9yLWJveCIsWmZlPSJhY3Rvci1tYW4iLEFPPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gU2QodCxlKX0sImRyYXdSZWN0IikscVVlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZihlLmxpbmtzPT09dm9pZCAwfHxlLmxpbmtzPT09bnVsbHx8T2JqZWN0LmtleXMoZS5saW5rcykubGVuZ3RoPT09MClyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH07bGV0IGE9ZS5saW5rcyxzPWUuYWN0b3JDbnQsbD1lLnJlY3REYXRhO3ZhciB1PSJub25lIjtpJiYodT0iYmxvY2sgIWltcG9ydGFudCIpO2xldCBoPXQuYXBwZW5kKCJnIik7aC5hdHRyKCJpZCIsImFjdG9yIitzKyJfcG9wdXAiKSxoLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxoLmF0dHIoImRpc3BsYXkiLHUpO3ZhciBmPSIiO2wuY2xhc3MhPT12b2lkIDAmJihmPSIgIitsLmNsYXNzKTtsZXQgZD1sLndpZHRoPnI/bC53aWR0aDpyLHA9aC5hcHBlbmQoInJlY3QiKTtpZihwLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrZikscC5hdHRyKCJ4IixsLngpLHAuYXR0cigieSIsbC5oZWlnaHQpLHAuYXR0cigiZmlsbCIsbC5maWxsKSxwLmF0dHIoInN0cm9rZSIsbC5zdHJva2UpLHAuYXR0cigid2lkdGgiLGQpLHAuYXR0cigiaGVpZ2h0IixsLmhlaWdodCkscC5hdHRyKCJyeCIsbC5yeCkscC5hdHRyKCJyeSIsbC5yeSksYSE9bnVsbCl7dmFyIG09MjA7Zm9yKGxldCB2IGluIGEpe3ZhciBnPWguYXBwZW5kKCJhIikseT0oMCxDTy5zYW5pdGl6ZVVybCkoYVt2XSk7Zy5hdHRyKCJ4bGluazpocmVmIix5KSxnLmF0dHIoInRhcmdldCIsIl9ibGFuayIpLHVIZShuKSh2LGcsbC54KzEwLGwuaGVpZ2h0K20sZCwyMCx7Y2xhc3M6ImFjdG9yIn0sbiksbSs9MzB9fXJldHVybiBwLmF0dHIoImhlaWdodCIsbSkse2hlaWdodDpsLmhlaWdodCttLHdpZHRoOmR9fSwiZHJhd1BvcHVwIiksWFVlPW8oZnVuY3Rpb24odCl7cmV0dXJuInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK3QrIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gcHUuc3R5bGUuZGlzcGxheSA9PSAnYmxvY2snID8gJ25vbmUnIDogJ2Jsb2NrJzsgfSJ9LCJwb3B1cE1lbnVUb2dnbGUiKSxQeD1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyPW51bGwpe2xldCBuPXQuYXBwZW5kKCJmb3JlaWduT2JqZWN0IiksaT1hd2FpdCBiaChlLnRleHQsQ3IoKSkscz1uLmFwcGVuZCgieGh0bWw6ZGl2IikuYXR0cigic3R5bGUiLCJ3aWR0aDogZml0LWNvbnRlbnQ7IikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIikuaHRtbChpKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYobi5hdHRyKCJoZWlnaHQiLE1hdGgucm91bmQocy5oZWlnaHQpKS5hdHRyKCJ3aWR0aCIsTWF0aC5yb3VuZChzLndpZHRoKSksZS5jbGFzcz09PSJub3RlVGV4dCIpe2xldCBsPXQubm9kZSgpLmZpcnN0Q2hpbGQ7bC5zZXRBdHRyaWJ1dGUoImhlaWdodCIscy5oZWlnaHQrMiplLnRleHRNYXJnaW4pO2xldCB1PWwuZ2V0QkJveCgpO24uYXR0cigieCIsTWF0aC5yb3VuZCh1LngrdS53aWR0aC8yLXMud2lkdGgvMikpLmF0dHIoInkiLE1hdGgucm91bmQodS55K3UuaGVpZ2h0LzItcy5oZWlnaHQvMikpfWVsc2UgaWYocil7bGV0e3N0YXJ0eDpsLHN0b3B4OnUsc3RhcnR5Omh9PXI7aWYobD51KXtsZXQgZj1sO2w9dSx1PWZ9bi5hdHRyKCJ4IixNYXRoLnJvdW5kKGwrTWF0aC5hYnMobC11KS8yLXMud2lkdGgvMikpLGUuY2xhc3M9PT0ibG9vcFRleHQiP24uYXR0cigieSIsTWF0aC5yb3VuZChoKSk6bi5hdHRyKCJ5IixNYXRoLnJvdW5kKGgtcy5oZWlnaHQpKX1yZXR1cm5bbl19LCJkcmF3S2F0ZXgiKSxJMD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9MCxuPTAsaT1lLnRleHQuc3BsaXQocWUubGluZUJyZWFrUmVnZXgpLFthLHNdPUhvKGUuZm9udFNpemUpLGw9W10sdT0wLGg9bygoKT0+ZS55LCJ5ZnVuYyIpO2lmKGUudmFsaWduIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj4wKXN3aXRjaChlLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOmg9bygoKT0+TWF0aC5yb3VuZChlLnkrZS50ZXh0TWFyZ2luKSwieWZ1bmMiKTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmg9bygoKT0+TWF0aC5yb3VuZChlLnkrKHIrbitlLnRleHRNYXJnaW4pLzIpLCJ5ZnVuYyIpO2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueSsocituKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pLCJ5ZnVuYyIpO2JyZWFrfWlmKGUuYW5jaG9yIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUud2lkdGghPT12b2lkIDApc3dpdGNoKGUuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmUueD1NYXRoLnJvdW5kKGUueCtlLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJzdGFydCIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC8yKSxlLmFuY2hvcj0ibWlkZGxlIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgtZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0iZW5kIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVha31mb3IobGV0W2YsZF1vZiBpLmVudHJpZXMoKSl7ZS50ZXh0TWFyZ2luIT09dm9pZCAwJiZlLnRleHRNYXJnaW49PT0wJiZhIT09dm9pZCAwJiYodT1mKmEpO2xldCBwPXQuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixlLngpLHAuYXR0cigieSIsaCgpKSxlLmFuY2hvciE9PXZvaWQgMCYmcC5hdHRyKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixlLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsZS5hbGlnbm1lbnRCYXNlbGluZSksZS5mb250RmFtaWx5IT09dm9pZCAwJiZwLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxzIT09dm9pZCAwJiZwLnN0eWxlKCJmb250LXNpemUiLHMpLGUuZm9udFdlaWdodCE9PXZvaWQgMCYmcC5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksZS5maWxsIT09dm9pZCAwJiZwLmF0dHIoImZpbGwiLGUuZmlsbCksZS5jbGFzcyE9PXZvaWQgMCYmcC5hdHRyKCJjbGFzcyIsZS5jbGFzcyksZS5keSE9PXZvaWQgMD9wLmF0dHIoImR5IixlLmR5KTp1IT09MCYmcC5hdHRyKCJkeSIsdSk7bGV0IG09ZHx8Wl87aWYoZS50c3Bhbil7bGV0IGc9cC5hcHBlbmQoInRzcGFuIik7Zy5hdHRyKCJ4IixlLngpLGUuZmlsbCE9PXZvaWQgMCYmZy5hdHRyKCJmaWxsIixlLmZpbGwpLGcudGV4dChtKX1lbHNlIHAudGV4dChtKTtlLnZhbGlnbiE9PXZvaWQgMCYmZS50ZXh0TWFyZ2luIT09dm9pZCAwJiZlLnRleHRNYXJnaW4+MCYmKG4rPShwLl9ncm91cHN8fHApWzBdWzBdLmdldEJCb3goKS5oZWlnaHQscj1uKSxsLnB1c2gocCl9cmV0dXJuIGx9LCJkcmF3VGV4dCIpLHRkZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBuLmF0dHIoInBvaW50cyIscihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5oZWlnaHQvMixJMCh0LGUpLG59LCJkcmF3TGFiZWwiKSxYYz0tMSxfTz1vKCh0LGUscixuKT0+e3Quc2VsZWN0JiZyLmZvckVhY2goaT0+e2xldCBhPWUuZ2V0KGkpLHM9dC5zZWxlY3QoIiNhY3RvciIrYS5hY3RvckNudCk7IW4ubWlycm9yQWN0b3JzJiZhLnN0b3B5P3MuYXR0cigieTIiLGEuc3RvcHkrYS5oZWlnaHQvMik6bi5taXJyb3JBY3RvcnMmJnMuYXR0cigieTIiLGEuc3RvcHkpfSl9LCJmaXhMaWZlTGluZUhlaWdodHMiKSxqVWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1uP2Uuc3RvcHk6ZS5zdGFydHksYT1lLngrZS53aWR0aC8yLHM9aStlLmhlaWdodCxsPXQuYXBwZW5kKCJnIikubG93ZXIoKTt2YXIgdT1sO258fChYYysrLE9iamVjdC5rZXlzKGUubGlua3N8fHt9KS5sZW5ndGgmJiFyLmZvcmNlTWVudXMmJnUuYXR0cigib25jbGljayIsWFVlKGBhY3RvciR7WGN9X3BvcHVwYCkpLmF0dHIoImN1cnNvciIsInBvaW50ZXIiKSx1LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK1hjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHMpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUgMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikuYXR0cigibmFtZSIsZS5uYW1lKSx1PWwuYXBwZW5kKCJnIiksZS5hY3RvckNudD1YYyxlLmxpbmtzIT1udWxsJiZ1LmF0dHIoImlkIiwicm9vdC0iK1hjKSk7bGV0IGg9TmwoKTt2YXIgZj0iYWN0b3IiO2UucHJvcGVydGllcz8uY2xhc3M/Zj1lLnByb3BlcnRpZXMuY2xhc3M6aC5maWxsPSIjZWFlYWVhIixuP2YrPWAgJHtlZGV9YDpmKz1gICR7SmZlfWAsaC54PWUueCxoLnk9aSxoLndpZHRoPWUud2lkdGgsaC5oZWlnaHQ9ZS5oZWlnaHQsaC5jbGFzcz1mLGgucng9MyxoLnJ5PTMsaC5uYW1lPWUubmFtZTtsZXQgZD1BTyh1LGgpO2lmKGUucmVjdERhdGE9aCxlLnByb3BlcnRpZXM/Lmljb24pe2xldCBtPWUucHJvcGVydGllcy5pY29uLnRyaW0oKTttLmNoYXJBdCgwKT09PSJAIj9MWSh1LGgueCtoLndpZHRoLTIwLGgueSsxMCxtLnN1YnN0cigxKSk6X1kodSxoLngraC53aWR0aC0yMCxoLnkrMTAsbSl9TE8ocix5aShlLmRlc2NyaXB0aW9uKSkoZS5kZXNjcmlwdGlvbix1LGgueCxoLnksaC53aWR0aCxoLmhlaWdodCx7Y2xhc3M6YGFjdG9yICR7WVVlfWB9LHIpO2xldCBwPWUuaGVpZ2h0O2lmKGQubm9kZSl7bGV0IG09ZC5ub2RlKCkuZ2V0QkJveCgpO2UuaGVpZ2h0PW0uaGVpZ2h0LHA9bS5oZWlnaHR9cmV0dXJuIHB9LCJkcmF3QWN0b3JUeXBlUGFydGljaXBhbnQiKSxLVWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1uP2Uuc3RvcHk6ZS5zdGFydHksYT1lLngrZS53aWR0aC8yLHM9aSs4MCxsPXQuYXBwZW5kKCJnIikubG93ZXIoKTtufHwoWGMrKyxsLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK1hjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHMpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUgMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikuYXR0cigibmFtZSIsZS5uYW1lKSxlLmFjdG9yQ250PVhjKTtsZXQgdT10LmFwcGVuZCgiZyIpLGg9WmZlO24/aCs9YCAke2VkZX1gOmgrPWAgJHtKZmV9YCx1LmF0dHIoImNsYXNzIixoKSx1LmF0dHIoIm5hbWUiLGUubmFtZSk7bGV0IGY9TmwoKTtmLng9ZS54LGYueT1pLGYuZmlsbD0iI2VhZWFlYSIsZi53aWR0aD1lLndpZHRoLGYuaGVpZ2h0PWUuaGVpZ2h0LGYuY2xhc3M9ImFjdG9yIixmLnJ4PTMsZi5yeT0zLHUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tdG9yc28iK1hjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLGkrMjUpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsaSs0NSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi1hcm1zIitYYykuYXR0cigieDEiLGEta2YvMikuYXR0cigieTEiLGkrMzMpLmF0dHIoIngyIixhK2tmLzIpLmF0dHIoInkyIixpKzMzKSx1LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhLWtmLzIpLmF0dHIoInkxIixpKzYwKS5hdHRyKCJ4MiIsYSkuYXR0cigieTIiLGkrNDUpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGEpLmF0dHIoInkxIixpKzQ1KS5hdHRyKCJ4MiIsYStrZi8yLTIpLmF0dHIoInkyIixpKzYwKTtsZXQgZD11LmFwcGVuZCgiY2lyY2xlIik7ZC5hdHRyKCJjeCIsZS54K2Uud2lkdGgvMiksZC5hdHRyKCJjeSIsaSsxMCksZC5hdHRyKCJyIiwxNSksZC5hdHRyKCJ3aWR0aCIsZS53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTtsZXQgcD11Lm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXAuaGVpZ2h0LExPKHIseWkoZS5kZXNjcmlwdGlvbikpKGUuZGVzY3JpcHRpb24sdSxmLngsZi55KzM1LGYud2lkdGgsZi5oZWlnaHQse2NsYXNzOmBhY3RvciAke1pmZX1gfSxyKSxlLmhlaWdodH0sImRyYXdBY3RvclR5cGVBY3RvciIpLFFVZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBhd2FpdCBLVWUodCxlLHIsbik7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIGF3YWl0IGpVZSh0LGUscixuKX19LCJkcmF3QWN0b3IiKSxaVWU9byhmdW5jdGlvbih0LGUscil7bGV0IGk9dC5hcHBlbmQoImciKTtyZGUoaSxlKSxlLm5hbWUmJkxPKHIpKGUubmFtZSxpLGUueCxlLnkrKGUudGV4dE1heEhlaWdodHx8MCkvMixlLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sciksaS5sb3dlcigpfSwiZHJhd0JveCIpLEpVZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSwiYW5jaG9yRWxlbWVudCIpLGVIZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9TmwoKSxzPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PXItZS5zdGFydHksQU8ocyxhKX0sImRyYXdBY3RpdmF0aW9uIiksdEhlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e2JveE1hcmdpbjppLGJveFRleHRNYXJnaW46YSxsYWJlbEJveEhlaWdodDpzLGxhYmVsQm94V2lkdGg6bCxtZXNzYWdlRm9udEZhbWlseTp1LG1lc3NhZ2VGb250U2l6ZTpoLG1lc3NhZ2VGb250V2VpZ2h0OmZ9PW4sZD10LmFwcGVuZCgiZyIpLHA9byhmdW5jdGlvbih5LHYseCxiKXtyZXR1cm4gZC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIseSkuYXR0cigieTEiLHYpLmF0dHIoIngyIix4KS5hdHRyKCJ5MiIsYikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfSwiZHJhd0xvb3BMaW5lIik7cChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxwKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLGUuc2VjdGlvbnMhPT12b2lkIDAmJmUuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbih5KXtwKGUuc3RhcnR4LHkueSxlLnN0b3B4LHkueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgbT1vdigpO20udGV4dD1yLG0ueD1lLnN0YXJ0eCxtLnk9ZS5zdGFydHksbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS53aWR0aD1sfHw1MCxtLmhlaWdodD1zfHwyMCxtLnRleHRNYXJnaW49YSxtLmNsYXNzPSJsYWJlbFRleHQiLHRkZShkLG0pLG09bmRlKCksbS50ZXh0PWUudGl0bGUsbS54PWUuc3RhcnR4K2wvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixtLnk9ZS5zdGFydHkraSthLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udGV4dE1hcmdpbj1hLG0uY2xhc3M9Imxvb3BUZXh0IixtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS53cmFwPSEwO2xldCBnPXlpKG0udGV4dCk/YXdhaXQgUHgoZCxtLGUpOkkwKGQsbSk7aWYoZS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwKXtmb3IobGV0W3ksdl1vZiBPYmplY3QuZW50cmllcyhlLnNlY3Rpb25UaXRsZXMpKWlmKHYubWVzc2FnZSl7bS50ZXh0PXYubWVzc2FnZSxtLng9ZS5zdGFydHgrKGUuc3RvcHgtZS5zdGFydHgpLzIsbS55PWUuc2VjdGlvbnNbeV0ueStpK2EsbS5jbGFzcz0ibG9vcFRleHQiLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0ud3JhcD1lLndyYXAseWkobS50ZXh0KT8oZS5zdGFydHk9ZS5zZWN0aW9uc1t5XS55LGF3YWl0IFB4KGQsbSxlKSk6STAoZCxtKTtsZXQgeD1NYXRoLnJvdW5kKGcubWFwKGI9PihiLl9ncm91cHN8fGIpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoYix3KT0+Yit3KSk7ZS5zZWN0aW9uc1t5XS5oZWlnaHQrPXgtKGkrYSl9fXJldHVybiBlLmhlaWdodD1NYXRoLnJvdW5kKGUuc3RvcHktZS5zdGFydHkpLGR9LCJkcmF3TG9vcCIpLHJkZT1vKGZ1bmN0aW9uKHQsZSl7aTUodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLHJIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSwiaW5zZXJ0RGF0YWJhc2VJY29uIiksbkhlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sImluc2VydENvbXB1dGVySWNvbiIpLGlIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LCJpbnNlcnRDbG9ja0ljb24iKSxhSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw3LjkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8tc3RhcnQtcmV2ZXJzZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSxzSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE1LjUpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxvSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnRTZXF1ZW5jZU51bWJlciIpLGxIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksbmRlPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSwiZ2V0VGV4dE9iaiIpLGNIZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSwiZ2V0Tm90ZVJlY3QiKSxMTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSxzLGwsdSxoLGYsZCl7bGV0IHA9cy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixsK2gvMikuYXR0cigieSIsdStmLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChhKTtpKHAsZCl9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGEscyxsLHUsaCxmLGQscCl7bGV0e2FjdG9yRm9udFNpemU6bSxhY3RvckZvbnRGYW1pbHk6ZyxhY3RvckZvbnRXZWlnaHQ6eX09cCxbdix4XT1IbyhtKSxiPWEuc3BsaXQocWUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgdz0wO3c8Yi5sZW5ndGg7dysrKXtsZXQgXz13KnYtdiooYi5sZW5ndGgtMSkvMixUPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbCtoLzIpLmF0dHIoInkiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHgpLnN0eWxlKCJmb250LXdlaWdodCIseSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtULmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixsK2gvMikuYXR0cigiZHkiLF8pLnRleHQoYlt3XSksVC5hdHRyKCJ5Iix1K2YvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGkoVCxkKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihhLHMsbCx1LGgsZixkLHApe2xldCBtPXMuYXBwZW5kKCJzd2l0Y2giKSx5PW0uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsbCkuYXR0cigieSIsdSkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7eS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChhKSxlKGEsbSxsLHUsaCxmLGQscCksaSh5LGQpfW8ociwiYnlGbyIpO2FzeW5jIGZ1bmN0aW9uIG4oYSxzLGwsdSxoLGYsZCxwKXtsZXQgbT1hd2FpdCBzZChhLENyKCkpLGc9cy5hcHBlbmQoInN3aXRjaCIpLHY9Zy5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixsK2gvMi1tLndpZHRoLzIpLmF0dHIoInkiLHUrZi8yLW0uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixtLndpZHRoKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3YuYXBwZW5kKCJkaXYiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLmh0bWwoYXdhaXQgYmgoYSxDcigpKSksZShhLGcsbCx1LGgsZixkLHApLGkodixkKX1vKG4sImJ5S2F0ZXgiKTtmdW5jdGlvbiBpKGEscyl7Zm9yKGxldCBsIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShsKSYmYS5hdHRyKGwsc1tsXSl9cmV0dXJuIG8oaSwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGEscz0hMSl7cmV0dXJuIHM/bjphLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6YS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSx1SGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYpe2xldCBkPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7YWN0b3JGb250U2l6ZTpwLGFjdG9yRm9udEZhbWlseTptLGFjdG9yRm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChxZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHApLnN0eWxlKCJmb250LXdlaWdodCIsZykuc3R5bGUoImZvbnQtZmFtaWx5IixtKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksZmk9e2RyYXdSZWN0OkFPLGRyYXdUZXh0OkkwLGRyYXdMYWJlbDp0ZGUsZHJhd0FjdG9yOlFVZSxkcmF3Qm94OlpVZSxkcmF3UG9wdXA6cVVlLGFuY2hvckVsZW1lbnQ6SlVlLGRyYXdBY3RpdmF0aW9uOmVIZSxkcmF3TG9vcDp0SGUsZHJhd0JhY2tncm91bmRSZWN0OnJkZSxpbnNlcnRBcnJvd0hlYWQ6YUhlLGluc2VydEFycm93RmlsbGVkSGVhZDpzSGUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6b0hlLGluc2VydEFycm93Q3Jvc3NIZWFkOmxIZSxpbnNlcnREYXRhYmFzZUljb246ckhlLGluc2VydENvbXB1dGVySWNvbjpuSGUsaW5zZXJ0Q2xvY2tJY29uOmlIZSxnZXRUZXh0T2JqOm5kZSxnZXROb3RlUmVjdDpjSGUsZml4TGlmZUxpbmVIZWlnaHRzOl9PLHNhbml0aXplVXJsOkNPLnNhbml0aXplVXJsfX0pO2FzeW5jIGZ1bmN0aW9uIGZIZSh0LGUpe250LmJ1bXBWZXJ0aWNhbFBvcygxMCk7bGV0e3N0YXJ0eDpyLHN0b3B4Om4sbWVzc2FnZTppfT1lLGE9cWUuc3BsaXRCcmVha3MoaSkubGVuZ3RoLHM9eWkoaSksbD1zP2F3YWl0IHNkKGkscGUoKSk6VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaSxPMChEZSkpO2lmKCFzKXtsZXQgZD1sLmhlaWdodC9hO2UuaGVpZ2h0Kz1kLG50LmJ1bXBWZXJ0aWNhbFBvcyhkKX1sZXQgdSxoPWwuaGVpZ2h0LTEwLGY9bC53aWR0aDtpZihyPT09bil7dT1udC5nZXRWZXJ0aWNhbFBvcygpK2gsRGUucmlnaHRBbmdsZXN8fChoKz1EZS5ib3hNYXJnaW4sdT1udC5nZXRWZXJ0aWNhbFBvcygpK2gpLGgrPTMwO2xldCBkPXFlLmdldE1heChmLzIsRGUud2lkdGgvMik7bnQuaW5zZXJ0KHItZCxudC5nZXRWZXJ0aWNhbFBvcygpLTEwK2gsbitkLG50LmdldFZlcnRpY2FsUG9zKCkrMzAraCl9ZWxzZSBoKz1EZS5ib3hNYXJnaW4sdT1udC5nZXRWZXJ0aWNhbFBvcygpK2gsbnQuaW5zZXJ0KHIsdS0xMCxuLHUpO3JldHVybiBudC5idW1wVmVydGljYWxQb3MoaCksZS5oZWlnaHQrPWgsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxudC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSksdX1mdW5jdGlvbiBqYyh0LGUscixuLGkpe250LmJ1bXBWZXJ0aWNhbFBvcyhyKTtsZXQgYT1uO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7bGV0IHM9dFtlLmlkXS53aWR0aCxsPU8wKERlKTtlLm1lc3NhZ2U9VXQud3JhcExhYmVsKGBbJHtlLm1lc3NhZ2V9XWAscy0yKkRlLndyYXBQYWRkaW5nLGwpLGUud2lkdGg9cyxlLndyYXA9ITA7bGV0IHU9VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoZS5tZXNzYWdlLGwpLGg9cWUuZ2V0TWF4KHUuaGVpZ2h0LERlLmxhYmVsQm94SGVpZ2h0KTthPW4raCxZLmRlYnVnKGAke2h9IC0gJHtlLm1lc3NhZ2V9YCl9aShlKSxudC5idW1wVmVydGljYWxQb3MoYSl9ZnVuY3Rpb24gbUhlKHQsZSxyLG4saSxhLHMpe2Z1bmN0aW9uIGwoaCxmKXtoLng8aS5nZXQodC5mcm9tKS54PyhudC5pbnNlcnQoZS5zdG9weC1mLGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkraC5oZWlnaHQvMitEZS5ub3RlTWFyZ2luKSxlLnN0b3B4PWUuc3RvcHgrZik6KG50Lmluc2VydChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4K2YsZS5zdG9weStoLmhlaWdodC8yK0RlLm5vdGVNYXJnaW4pLGUuc3RvcHg9ZS5zdG9weC1mKX1vKGwsInJlY2VpdmVyQWRqdXN0bWVudCIpO2Z1bmN0aW9uIHUoaCxmKXtoLng8aS5nZXQodC50bykueD8obnQuaW5zZXJ0KGUuc3RhcnR4LWYsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5K2guaGVpZ2h0LzIrRGUubm90ZU1hcmdpbiksZS5zdGFydHg9ZS5zdGFydHgrZik6KG50Lmluc2VydChlLnN0b3B4LGUuc3RhcnR5LGUuc3RhcnR4K2YsZS5zdG9weStoLmhlaWdodC8yK0RlLm5vdGVNYXJnaW4pLGUuc3RhcnR4PWUuc3RhcnR4LWYpfWlmKG8odSwic2VuZGVyQWRqdXN0bWVudCIpLGEuZ2V0KHQudG8pPT1uKXtsZXQgaD1pLmdldCh0LnRvKSxmPWgudHlwZT09ImFjdG9yIj9rZi8yKzM6aC53aWR0aC8yKzM7bChoLGYpLGguc3RhcnR5PXItaC5oZWlnaHQvMixudC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LmZyb20pPT1uKXtsZXQgaD1pLmdldCh0LmZyb20pO2lmKERlLm1pcnJvckFjdG9ycyl7bGV0IGY9aC50eXBlPT0iYWN0b3IiP2tmLzI6aC53aWR0aC8yO3UoaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixudC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LnRvKT09bil7bGV0IGg9aS5nZXQodC50byk7aWYoRGUubWlycm9yQWN0b3JzKXtsZXQgZj1oLnR5cGU9PSJhY3RvciI/a2YvMiszOmgud2lkdGgvMiszO2woaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixudC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9fWFzeW5jIGZ1bmN0aW9uIHlIZSh0LGUscil7bGV0IG49e307Zm9yKGxldCBpIG9mIGUpaWYodC5nZXQoaS50bykmJnQuZ2V0KGkuZnJvbSkpe2xldCBhPXQuZ2V0KGkudG8pO2lmKGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhYS5wcmV2QWN0b3J8fGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIWEubmV4dEFjdG9yKWNvbnRpbnVlO2xldCBzPWkucGxhY2VtZW50IT09dm9pZCAwLGw9IXMsdT1zP1FnKERlKTpPMChEZSksaD1pLndyYXA/VXQud3JhcExhYmVsKGkubWVzc2FnZSxEZS53aWR0aC0yKkRlLndyYXBQYWRkaW5nLHUpOmkubWVzc2FnZSxkPSh5aShoKT9hd2FpdCBzZChpLm1lc3NhZ2UscGUoKSk6VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaCx1KSkud2lkdGgrMipEZS53cmFwUGFkZGluZztsJiZpLmZyb209PT1hLm5leHRBY3Rvcj9uW2kudG9dPXFlLmdldE1heChuW2kudG9dfHwwLGQpOmwmJmkuZnJvbT09PWEucHJldkFjdG9yP25baS5mcm9tXT1xZS5nZXRNYXgobltpLmZyb21dfHwwLGQpOmwmJmkuZnJvbT09PWkudG8/KG5baS5mcm9tXT1xZS5nZXRNYXgobltpLmZyb21dfHwwLGQvMiksbltpLnRvXT1xZS5nZXRNYXgobltpLnRvXXx8MCxkLzIpKTppLnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/bltpLmZyb21dPXFlLmdldE1heChuW2kuZnJvbV18fDAsZCk6aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0Y/blthLnByZXZBY3Rvcl09cWUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQpOmkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuT1ZFUiYmKGEucHJldkFjdG9yJiYoblthLnByZXZBY3Rvcl09cWUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQvMikpLGEubmV4dEFjdG9yJiYobltpLmZyb21dPXFlLmdldE1heChuW2kuZnJvbV18fDAsZC8yKSkpfXJldHVybiBZLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59YXN5bmMgZnVuY3Rpb24geEhlKHQsZSxyKXtsZXQgbj0wO2ZvcihsZXQgYSBvZiB0LmtleXMoKSl7bGV0IHM9dC5nZXQoYSk7cy53cmFwJiYocy5kZXNjcmlwdGlvbj1VdC53cmFwTGFiZWwocy5kZXNjcmlwdGlvbixEZS53aWR0aC0yKkRlLndyYXBQYWRkaW5nLERPKERlKSkpO2xldCBsPXlpKHMuZGVzY3JpcHRpb24pP2F3YWl0IHNkKHMuZGVzY3JpcHRpb24scGUoKSk6VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5kZXNjcmlwdGlvbixETyhEZSkpO3Mud2lkdGg9cy53cmFwP0RlLndpZHRoOnFlLmdldE1heChEZS53aWR0aCxsLndpZHRoKzIqRGUud3JhcFBhZGRpbmcpLHMuaGVpZ2h0PXMud3JhcD9xZS5nZXRNYXgobC5oZWlnaHQsRGUuaGVpZ2h0KTpEZS5oZWlnaHQsbj1xZS5nZXRNYXgobixzLmhlaWdodCl9Zm9yKGxldCBhIGluIGUpe2xldCBzPXQuZ2V0KGEpO2lmKCFzKWNvbnRpbnVlO2xldCBsPXQuZ2V0KHMubmV4dEFjdG9yKTtpZighbCl7bGV0IGQ9ZVthXStEZS5hY3Rvck1hcmdpbi1zLndpZHRoLzI7cy5tYXJnaW49cWUuZ2V0TWF4KGQsRGUuYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWxldCBoPWVbYV0rRGUuYWN0b3JNYXJnaW4tcy53aWR0aC8yLWwud2lkdGgvMjtzLm1hcmdpbj1xZS5nZXRNYXgoaCxEZS5hY3Rvck1hcmdpbil9bGV0IGk9MDtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz1PMChEZSksbD1hLmFjdG9yS2V5cy5yZWR1Y2UoKGYsZCk9PmYrPXQuZ2V0KGQpLndpZHRoKyh0LmdldChkKS5tYXJnaW58fDApLDApO2wtPTIqRGUuYm94VGV4dE1hcmdpbixhLndyYXAmJihhLm5hbWU9VXQud3JhcExhYmVsKGEubmFtZSxsLTIqRGUud3JhcFBhZGRpbmcscykpO2xldCB1PVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubmFtZSxzKTtpPXFlLmdldE1heCh1LmhlaWdodCxpKTtsZXQgaD1xZS5nZXRNYXgobCx1LndpZHRoKzIqRGUud3JhcFBhZGRpbmcpO2lmKGEubWFyZ2luPURlLmJveFRleHRNYXJnaW4sbDxoKXtsZXQgZj0oaC1sKS8yO2EubWFyZ2luKz1mfX0pLHIuZm9yRWFjaChhPT5hLnRleHRNYXhIZWlnaHQ9aSkscWUuZ2V0TWF4KG4sRGUuaGVpZ2h0KX12YXIgRGUsbnQsaEhlLE8wLFFnLERPLGRIZSxwSGUsTk8sc2RlLG9kZSxJRSxhZGUsZ0hlLHZIZSxiSGUsd0hlLFRIZSxsZGUsY2RlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtpZGUoKTt1dCgpO2ZyKCk7bHYoKTtWdCgpO2dwKCk7aHIoKTthaSgpO0RlPXt9LG50PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0Om8oZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0aGlzLmFjdG9ycy5sZW5ndGg9PT0wP1swXTp0aGlzLmFjdG9ycy5tYXAodD0+dC5oZWlnaHR8fDApKSsodGhpcy5sb29wcy5sZW5ndGg9PT0wPzA6dGhpcy5sb29wcy5tYXAodD0+dC5oZWlnaHR8fDApLnJlZHVjZSgodCxlKT0+dCtlKSkrKHRoaXMubWVzc2FnZXMubGVuZ3RoPT09MD8wOnRoaXMubWVzc2FnZXMubWFwKHQ9PnQuaGVpZ2h0fHwwKS5yZWR1Y2UoKHQsZSk9PnQrZSkpKyh0aGlzLm5vdGVzLmxlbmd0aD09PTA/MDp0aGlzLm5vdGVzLm1hcCh0PT50LmhlaWdodHx8MCkucmVkdWNlKCh0LGUpPT50K2UpKX0sImdldEhlaWdodCIpLGNsZWFyOm8oZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmJveGVzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSwiY2xlYXIiKSxhZGRCb3g6byhmdW5jdGlvbih0KXt0aGlzLmJveGVzLnB1c2godCl9LCJhZGRCb3giKSxhZGRBY3RvcjpvKGZ1bmN0aW9uKHQpe3RoaXMuYWN0b3JzLnB1c2godCl9LCJhZGRBY3RvciIpLGFkZExvb3A6byhmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LCJhZGRMb29wIiksYWRkTWVzc2FnZTpvKGZ1bmN0aW9uKHQpe3RoaXMubWVzc2FnZXMucHVzaCh0KX0sImFkZE1lc3NhZ2UiKSxhZGROb3RlOm8oZnVuY3Rpb24odCl7dGhpcy5ub3Rlcy5wdXNoKHQpfSwiYWRkTm90ZSIpLGxhc3RBY3RvcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sImxhc3RBY3RvciIpLGxhc3RMb29wOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sImxhc3RMb29wIiksbGFzdE1lc3NhZ2U6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSwibGFzdE1lc3NhZ2UiKSxsYXN0Tm90ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90ZXNbdGhpcy5ub3Rlcy5sZW5ndGgtMV19LCJsYXN0Tm90ZSIpLGFjdG9yczpbXSxib3hlczpbXSxsb29wczpbXSxtZXNzYWdlczpbXSxub3RlczpbXX0saW5pdDpvKGZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsb2RlKHBlKCkpfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9dGhpcyxhPTA7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gbyhmdW5jdGlvbihoKXthKys7bGV0IGY9aS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1hKzE7aS51cGRhdGVWYWwoaCwic3RhcnR5IixlLWYqRGUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChoLCJzdG9weSIsbitmKkRlLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwobnQuZGF0YSwic3RhcnR4Iix0LWYqRGUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChudC5kYXRhLCJzdG9weCIscitmKkRlLmJveE1hcmdpbixNYXRoLm1heCksbCE9PSJhY3RpdmF0aW9uIiYmKGkudXBkYXRlVmFsKGgsInN0YXJ0eCIsdC1mKkRlLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoaCwic3RvcHgiLHIrZipEZS5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKG50LmRhdGEsInN0YXJ0eSIsZS1mKkRlLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwobnQuZGF0YSwic3RvcHkiLG4rZipEZS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0sInVwZGF0ZUl0ZW1Cb3VuZHMiKX1vKHMsInVwZGF0ZUZuIiksdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gocygpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2gocygiYWN0aXZhdGlvbiIpKX0sInVwZGF0ZUJvdW5kcyIpLGluc2VydDpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXFlLmdldE1pbih0LHIpLGE9cWUuZ2V0TWF4KHQscikscz1xZS5nZXRNaW4oZSxuKSxsPXFlLmdldE1heChlLG4pO3RoaXMudXBkYXRlVmFsKG50LmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobnQuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChudC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwobnQuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksbmV3QWN0aXZhdGlvbjpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLmdldCh0LmZyb20pLGk9SUUodC5mcm9tKS5sZW5ndGh8fDAsYT1uLngrbi53aWR0aC8yKyhpLTEpKkRlLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4OmEsc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDphK0RlLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6dC5mcm9tLGFuY2hvcmVkOmZpLmFuY2hvckVsZW1lbnQoZSl9KX0sIm5ld0FjdGl2YXRpb24iKSxlbmRBY3RpdmF0aW9uOm8oZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIuYWN0b3J9KS5sYXN0SW5kZXhPZih0LmZyb20pO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSwiZW5kQWN0aXZhdGlvbiIpLGNyZWF0ZUxvb3A6byhmdW5jdGlvbih0PXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZSl7cmV0dXJue3N0YXJ0eDp2b2lkIDAsc3RhcnR5OnRoaXMudmVydGljYWxQb3Msc3RvcHg6dm9pZCAwLHN0b3B5OnZvaWQgMCx0aXRsZTp0Lm1lc3NhZ2Usd3JhcDp0LndyYXAsd2lkdGg6dC53aWR0aCxoZWlnaHQ6MCxmaWxsOmV9fSwiY3JlYXRlTG9vcCIpLG5ld0xvb3A6byhmdW5jdGlvbih0PXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZSl7dGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMb29wKHQsZSkpfSwibmV3TG9vcCIpLGVuZExvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LCJlbmRMb29wIiksaXNMb29wT3ZlcmxhcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGg/dGhpcy5zZXF1ZW5jZUl0ZW1zW3RoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGgtMV0ub3ZlcmxhcDohMX0sImlzTG9vcE92ZXJsYXAiKSxhZGRTZWN0aW9uVG9Mb29wOm8oZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5Om50LmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sImFkZFNlY3Rpb25Ub0xvb3AiKSxzYXZlVmVydGljYWxQb3M6byhmdW5jdGlvbigpe3RoaXMuaXNMb29wT3ZlcmxhcCgpJiYodGhpcy5zYXZlZFZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MpfSwic2F2ZVZlcnRpY2FsUG9zIikscmVzZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnZlcnRpY2FsUG9zPXRoaXMuc2F2ZWRWZXJ0aWNhbFBvcyl9LCJyZXNldFZlcnRpY2FsUG9zIiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXFlLmdldE1heCh0aGlzLmRhdGEuc3RvcHksdGhpcy52ZXJ0aWNhbFBvcyl9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJue2JvdW5kczp0aGlzLmRhdGEsbW9kZWxzOnRoaXMubW9kZWxzfX0sImdldEJvdW5kcyIpfSxoSGU9byhhc3luYyBmdW5jdGlvbih0LGUpe250LmJ1bXBWZXJ0aWNhbFBvcyhEZS5ib3hNYXJnaW4pLGUuaGVpZ2h0PURlLmJveE1hcmdpbixlLnN0YXJ0eT1udC5nZXRWZXJ0aWNhbFBvcygpO2xldCByPU5sKCk7ci54PWUuc3RhcnR4LHIueT1lLnN0YXJ0eSxyLndpZHRoPWUud2lkdGh8fERlLndpZHRoLHIuY2xhc3M9Im5vdGUiO2xldCBuPXQuYXBwZW5kKCJnIiksaT1maS5kcmF3UmVjdChuLHIpLGE9b3YoKTthLng9ZS5zdGFydHgsYS55PWUuc3RhcnR5LGEud2lkdGg9ci53aWR0aCxhLmR5PSIxZW0iLGEudGV4dD1lLm1lc3NhZ2UsYS5jbGFzcz0ibm90ZVRleHQiLGEuZm9udEZhbWlseT1EZS5ub3RlRm9udEZhbWlseSxhLmZvbnRTaXplPURlLm5vdGVGb250U2l6ZSxhLmZvbnRXZWlnaHQ9RGUubm90ZUZvbnRXZWlnaHQsYS5hbmNob3I9RGUubm90ZUFsaWduLGEudGV4dE1hcmdpbj1EZS5ub3RlTWFyZ2luLGEudmFsaWduPSJjZW50ZXIiO2xldCBzPXlpKGEudGV4dCk/YXdhaXQgUHgobixhKTpJMChuLGEpLGw9TWF0aC5yb3VuZChzLm1hcCh1PT4odS5fZ3JvdXBzfHx1KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKHUsaCk9PnUraCkpO2kuYXR0cigiaGVpZ2h0IixsKzIqRGUubm90ZU1hcmdpbiksZS5oZWlnaHQrPWwrMipEZS5ub3RlTWFyZ2luLG50LmJ1bXBWZXJ0aWNhbFBvcyhsKzIqRGUubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStsKzIqRGUubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K3Iud2lkdGgsbnQuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksbnQubW9kZWxzLmFkZE5vdGUoZSl9LCJkcmF3Tm90ZSIpLE8wPW8odD0+KHtmb250RmFtaWx5OnQubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dC5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0Lm1lc3NhZ2VGb250V2VpZ2h0fSksIm1lc3NhZ2VGb250IiksUWc9byh0PT4oe2ZvbnRGYW1pbHk6dC5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0Lm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnQubm90ZUZvbnRXZWlnaHR9KSwibm90ZUZvbnQiKSxETz1vKHQ9Pih7Zm9udEZhbWlseTp0LmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0LmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0LmFjdG9yRm9udFdlaWdodH0pLCJhY3RvckZvbnQiKTtvKGZIZSwiYm91bmRNZXNzYWdlIik7ZEhlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3N0YXJ0eDppLHN0b3B4OmEsc3RhcnR5OnMsbWVzc2FnZTpsLHR5cGU6dSxzZXF1ZW5jZUluZGV4Omgsc2VxdWVuY2VWaXNpYmxlOmZ9PWUsZD1VdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsLE8wKERlKSkscD1vdigpO3AueD1pLHAueT1zKzEwLHAud2lkdGg9YS1pLHAuY2xhc3M9Im1lc3NhZ2VUZXh0IixwLmR5PSIxZW0iLHAudGV4dD1sLHAuZm9udEZhbWlseT1EZS5tZXNzYWdlRm9udEZhbWlseSxwLmZvbnRTaXplPURlLm1lc3NhZ2VGb250U2l6ZSxwLmZvbnRXZWlnaHQ9RGUubWVzc2FnZUZvbnRXZWlnaHQscC5hbmNob3I9RGUubWVzc2FnZUFsaWduLHAudmFsaWduPSJjZW50ZXIiLHAudGV4dE1hcmdpbj1EZS53cmFwUGFkZGluZyxwLnRzcGFuPSExLHlpKHAudGV4dCk/YXdhaXQgUHgodCxwLHtzdGFydHg6aSxzdG9weDphLHN0YXJ0eTpyfSk6STAodCxwKTtsZXQgbT1kLndpZHRoLGc7aT09PWE/RGUucmlnaHRBbmdsZXM/Zz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGBNICAke2l9LCR7cn0gSCAke2krcWUuZ2V0TWF4KERlLndpZHRoLzIsbS8yKX0gViAke3IrMjV9IEggJHtpfWApOmc9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK2krIiwiK3IrIiBDICIrKGkrNjApKyIsIisoci0xMCkrIiAiKyhpKzYwKSsiLCIrKHIrMzApKyIgIitpKyIsIisocisyMCkpOihnPXQuYXBwZW5kKCJsaW5lIiksZy5hdHRyKCJ4MSIsaSksZy5hdHRyKCJ5MSIsciksZy5hdHRyKCJ4MiIsYSksZy5hdHRyKCJ5MiIscikpLHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX0NST1NTfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOfHx1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRD8oZy5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxnLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmcuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgeT0iIjtEZS5hcnJvd01hcmtlckFic29sdXRlJiYoeT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx5PXkucmVwbGFjZSgvXCgvZywiXFwoIikseT15LnJlcGxhY2UoL1wpL2csIlxcKSIpKSxnLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZy5hdHRyKCJzdHJva2UiLCJub25lIiksZy5zdHlsZSgiZmlsbCIsIm5vbmUiKSwodT09PW4uZGIuTElORVRZUEUuU09MSUR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRCkmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNhcnJvd2hlYWQpIiksKHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUR8fHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEKSYmKGcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIreSsiI2Fycm93aGVhZCkiKSxnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjYXJyb3doZWFkKSIpKSwodT09PW4uZGIuTElORVRZUEUuU09MSURfUE9JTlR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCkmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNmaWxsZWQtaGVhZCkiKSwodT09PW4uZGIuTElORVRZUEUuU09MSURfQ1JPU1N8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUykmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNjcm9zc2hlYWQpIiksKGZ8fERlLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoZy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit5KyIjc2VxdWVuY2VudW1iZXIpIiksdC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixyKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KGgpKX0sImRyYXdNZXNzYWdlIikscEhlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7bGV0IGw9MCx1PTAsaCxmPTA7Zm9yKGxldCBkIG9mIG4pe2xldCBwPWUuZ2V0KGQpLG09cC5ib3g7aCYmaCE9bSYmKHN8fG50Lm1vZGVscy5hZGRCb3goaCksdSs9RGUuYm94TWFyZ2luK2gubWFyZ2luKSxtJiZtIT1oJiYoc3x8KG0ueD1sK3UsbS55PWkpLHUrPW0ubWFyZ2luKSxwLndpZHRoPXAud2lkdGh8fERlLndpZHRoLHAuaGVpZ2h0PXFlLmdldE1heChwLmhlaWdodHx8RGUuaGVpZ2h0LERlLmhlaWdodCkscC5tYXJnaW49cC5tYXJnaW58fERlLmFjdG9yTWFyZ2luLGY9cWUuZ2V0TWF4KGYscC5oZWlnaHQpLHIuZ2V0KHAubmFtZSkmJih1Kz1wLndpZHRoLzIpLHAueD1sK3UscC5zdGFydHk9bnQuZ2V0VmVydGljYWxQb3MoKSxudC5pbnNlcnQocC54LGkscC54K3Aud2lkdGgscC5oZWlnaHQpLGwrPXAud2lkdGgrdSxwLmJveCYmKHAuYm94LndpZHRoPWwrbS5tYXJnaW4tcC5ib3gueCksdT1wLm1hcmdpbixoPXAuYm94LG50Lm1vZGVscy5hZGRBY3RvcihwKX1oJiYhcyYmbnQubW9kZWxzLmFkZEJveChoKSxudC5idW1wVmVydGljYWxQb3MoZil9LCJhZGRBY3RvclJlbmRlcmluZ0RhdGEiKSxOTz1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe2xldCBpPTA7bnQuYnVtcFZlcnRpY2FsUG9zKERlLmJveE1hcmdpbioyKTtmb3IobGV0IGEgb2Ygcil7bGV0IHM9ZS5nZXQoYSk7cy5zdG9weXx8KHMuc3RvcHk9bnQuZ2V0VmVydGljYWxQb3MoKSk7bGV0IGw9YXdhaXQgZmkuZHJhd0FjdG9yKHQscyxEZSwhMCk7aT1xZS5nZXRNYXgoaSxsKX1udC5idW1wVmVydGljYWxQb3MoaStEZS5ib3hNYXJnaW4pfWVsc2UgZm9yKGxldCBpIG9mIHIpe2xldCBhPWUuZ2V0KGkpO2F3YWl0IGZpLmRyYXdBY3Rvcih0LGEsRGUsITEpfX0sImRyYXdBY3RvcnMiKSxzZGU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wLGE9MDtmb3IobGV0IHMgb2Ygcil7bGV0IGw9ZS5nZXQocyksdT12SGUobCksaD1maS5kcmF3UG9wdXAodCxsLHUsRGUsRGUuZm9yY2VNZW51cyxuKTtoLmhlaWdodD5pJiYoaT1oLmhlaWdodCksaC53aWR0aCtsLng+YSYmKGE9aC53aWR0aCtsLngpfXJldHVybnttYXhIZWlnaHQ6aSxtYXhXaWR0aDphfX0sImRyYXdBY3RvcnNQb3B1cCIpLG9kZT1vKGZ1bmN0aW9uKHQpe1ZuKERlLHQpLHQuZm9udEZhbWlseSYmKERlLmFjdG9yRm9udEZhbWlseT1EZS5ub3RlRm9udEZhbWlseT1EZS5tZXNzYWdlRm9udEZhbWlseT10LmZvbnRGYW1pbHkpLHQuZm9udFNpemUmJihEZS5hY3RvckZvbnRTaXplPURlLm5vdGVGb250U2l6ZT1EZS5tZXNzYWdlRm9udFNpemU9dC5mb250U2l6ZSksdC5mb250V2VpZ2h0JiYoRGUuYWN0b3JGb250V2VpZ2h0PURlLm5vdGVGb250V2VpZ2h0PURlLm1lc3NhZ2VGb250V2VpZ2h0PXQuZm9udFdlaWdodCl9LCJzZXRDb25mIiksSUU9byhmdW5jdGlvbih0KXtyZXR1cm4gbnQuYWN0aXZhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdG9yPT09dH0pfSwiYWN0b3JBY3RpdmF0aW9ucyIpLGFkZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZS5nZXQodCksbj1JRSh0KSxpPW4ucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHFlLmdldE1pbihzLGwuc3RhcnR4KX0sci54K3Iud2lkdGgvMi0xKSxhPW4ucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHFlLmdldE1heChzLGwuc3RvcHgpfSxyLngrci53aWR0aC8yKzEpO3JldHVybltpLGFdfSwiYWN0aXZhdGlvbkJvdW5kcyIpO28oamMsImFkanVzdExvb3BIZWlnaHRGb3JXcmFwIik7byhtSGUsImFkanVzdENyZWF0ZWREZXN0cm95ZWREYXRhIik7Z0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzZXF1ZW5jZTphfT1wZSgpO0RlPWE7bGV0IHM7aT09PSJzYW5kYm94IiYmKHM9VmUoIiNpIitlKSk7bGV0IGw9aT09PSJzYW5kYm94Ij9WZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksdT1pPT09InNhbmRib3giP3Mubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bnQuaW5pdCgpLFkuZGVidWcobi5kYik7bGV0IGg9aT09PSJzYW5kYm94Ij9sLnNlbGVjdChgW2lkPSIke2V9Il1gKTpWZShgW2lkPSIke2V9Il1gKSxmPW4uZGIuZ2V0QWN0b3JzKCksZD1uLmRiLmdldENyZWF0ZWRBY3RvcnMoKSxwPW4uZGIuZ2V0RGVzdHJveWVkQWN0b3JzKCksbT1uLmRiLmdldEJveGVzKCksZz1uLmRiLmdldEFjdG9yS2V5cygpLHk9bi5kYi5nZXRNZXNzYWdlcygpLHY9bi5kYi5nZXREaWFncmFtVGl0bGUoKSx4PW4uZGIuaGFzQXRMZWFzdE9uZUJveCgpLGI9bi5kYi5oYXNBdExlYXN0T25lQm94V2l0aFRpdGxlKCksdz1hd2FpdCB5SGUoZix5LG4pO2lmKERlLmhlaWdodD1hd2FpdCB4SGUoZix3LG0pLGZpLmluc2VydENvbXB1dGVySWNvbihoKSxmaS5pbnNlcnREYXRhYmFzZUljb24oaCksZmkuaW5zZXJ0Q2xvY2tJY29uKGgpLHgmJihudC5idW1wVmVydGljYWxQb3MoRGUuYm94TWFyZ2luKSxiJiZudC5idW1wVmVydGljYWxQb3MobVswXS50ZXh0TWF4SGVpZ2h0KSksRGUuaGlkZVVudXNlZFBhcnRpY2lwYW50cz09PSEwKXtsZXQgRj1uZXcgU2V0O3kuZm9yRWFjaChCPT57Ri5hZGQoQi5mcm9tKSxGLmFkZChCLnRvKX0pLGc9Zy5maWx0ZXIoQj0+Ri5oYXMoQikpfXBIZShoLGYsZCxnLDAseSwhMSk7bGV0IF89YXdhaXQgVEhlKHksZix3LG4pO2ZpLmluc2VydEFycm93SGVhZChoKSxmaS5pbnNlcnRBcnJvd0Nyb3NzSGVhZChoKSxmaS5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoaCksZmkuaW5zZXJ0U2VxdWVuY2VOdW1iZXIoaCk7ZnVuY3Rpb24gVChGLEIpe2xldCBHPW50LmVuZEFjdGl2YXRpb24oRik7Ry5zdGFydHkrMTg+QiYmKEcuc3RhcnR5PUItNixCKz0xMiksZmkuZHJhd0FjdGl2YXRpb24oaCxHLEIsRGUsSUUoRi5mcm9tKS5sZW5ndGgpLG50Lmluc2VydChHLnN0YXJ0eCxCLTEwLEcuc3RvcHgsQil9byhULCJhY3RpdmVFbmQiKTtsZXQgRT0xLEw9MSxTPVtdLEE9W10sST0wO2ZvcihsZXQgRiBvZiB5KXtsZXQgQixHLHo7c3dpdGNoKEYudHlwZSl7Y2FzZSBuLmRiLkxJTkVUWVBFLk5PVEU6bnQucmVzZXRWZXJ0aWNhbFBvcygpLEc9Ri5ub3RlTW9kZWwsYXdhaXQgaEhlKGgsRyk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpudC5uZXdBY3RpdmF0aW9uKEYsaCxmKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUNUSVZFX0VORDpUKEYsbnQuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6amMoXyxGLERlLmJveE1hcmdpbixEZS5ib3hNYXJnaW4rRGUuYm94VGV4dE1hcmdpbixXPT5udC5uZXdMb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuTE9PUF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJsb29wIixEZSksbnQuYnVtcFZlcnRpY2FsUG9zKEIuc3RvcHktbnQuZ2V0VmVydGljYWxQb3MoKSksbnQubW9kZWxzLmFkZExvb3AoQik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6amMoXyxGLERlLmJveE1hcmdpbixEZS5ib3hNYXJnaW4sVz0+bnQubmV3TG9vcCh2b2lkIDAsVy5tZXNzYWdlKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlJFQ1RfRU5EOkI9bnQuZW5kTG9vcCgpLEEucHVzaChCKSxudC5tb2RlbHMuYWRkTG9vcChCKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuT1BUX1NUQVJUOmpjKF8sRixEZS5ib3hNYXJnaW4sRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJvcHQiLERlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUxUX1NUQVJUOmpjKF8sRixEZS5ib3hNYXJnaW4sRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmpjKF8sRixEZS5ib3hNYXJnaW4rRGUuYm94VGV4dE1hcmdpbixEZS5ib3hNYXJnaW4sVz0+bnQuYWRkU2VjdGlvblRvTG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJhbHQiLERlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpqYyhfLEYsRGUuYm94TWFyZ2luLERlLmJveE1hcmdpbitEZS5ib3hUZXh0TWFyZ2luLFc9Pm50Lm5ld0xvb3AoVykpLG50LnNhdmVWZXJ0aWNhbFBvcygpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfQU5EOmpjKF8sRixEZS5ib3hNYXJnaW4rRGUuYm94VGV4dE1hcmdpbixEZS5ib3hNYXJnaW4sVz0+bnQuYWRkU2VjdGlvblRvTG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJwYXIiLERlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQVVUT05VTUJFUjpFPUYubWVzc2FnZS5zdGFydHx8RSxMPUYubWVzc2FnZS5zdGVwfHxMLEYubWVzc2FnZS52aXNpYmxlP24uZGIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk6bi5kYi5kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUOmpjKF8sRixEZS5ib3hNYXJnaW4sRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjpqYyhfLEYsRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sRGUuYm94TWFyZ2luLFc9Pm50LmFkZFNlY3Rpb25Ub0xvb3AoVykpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJjcml0aWNhbCIsRGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDpqYyhfLEYsRGUuYm94TWFyZ2luLERlLmJveE1hcmdpbitEZS5ib3hUZXh0TWFyZ2luLFc9Pm50Lm5ld0xvb3AoVykpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJicmVhayIsRGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2RlZmF1bHQ6dHJ5e3o9Ri5tc2dNb2RlbCx6LnN0YXJ0eT1udC5nZXRWZXJ0aWNhbFBvcygpLHouc2VxdWVuY2VJbmRleD1FLHouc2VxdWVuY2VWaXNpYmxlPW4uZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO2xldCBXPWF3YWl0IGZIZShoLHopO21IZShGLHosVyxJLGYsZCxwKSxTLnB1c2goe21lc3NhZ2VNb2RlbDp6LGxpbmVTdGFydFk6V30pLG50Lm1vZGVscy5hZGRNZXNzYWdlKHopfWNhdGNoKFcpe1kuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsVyl9fVtuLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sbi5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixuLmRiLkxJTkVUWVBFLlNPTElELG4uZGIuTElORVRZUEUuRE9UVEVELG4uZGIuTElORVRZUEUuU09MSURfQ1JPU1Msbi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1Msbi5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxuLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCxuLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsbi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXMoRi50eXBlKSYmKEU9RStMKSxJKyt9WS5kZWJ1ZygiY3JlYXRlZEFjdG9ycyIsZCksWS5kZWJ1ZygiZGVzdHJveWVkQWN0b3JzIixwKSxhd2FpdCBOTyhoLGYsZywhMSk7Zm9yKGxldCBGIG9mIFMpYXdhaXQgZEhlKGgsRi5tZXNzYWdlTW9kZWwsRi5saW5lU3RhcnRZLG4pO0RlLm1pcnJvckFjdG9ycyYmYXdhaXQgTk8oaCxmLGcsITApLEEuZm9yRWFjaChGPT5maS5kcmF3QmFja2dyb3VuZFJlY3QoaCxGKSksX08oaCxmLGcsRGUpO2ZvcihsZXQgRiBvZiBudC5tb2RlbHMuYm94ZXMpRi5oZWlnaHQ9bnQuZ2V0VmVydGljYWxQb3MoKS1GLnksbnQuaW5zZXJ0KEYueCxGLnksRi54K0Yud2lkdGgsRi5oZWlnaHQpLEYuc3RhcnR4PUYueCxGLnN0YXJ0eT1GLnksRi5zdG9weD1GLnN0YXJ0eCtGLndpZHRoLEYuc3RvcHk9Ri5zdGFydHkrRi5oZWlnaHQsRi5zdHJva2U9InJnYigwLDAsMCwgMC41KSIsZmkuZHJhd0JveChoLEYsRGUpO3gmJm50LmJ1bXBWZXJ0aWNhbFBvcyhEZS5ib3hNYXJnaW4pO2xldCBEPXNkZShoLGYsZyx1KSx7Ym91bmRzOmt9PW50LmdldEJvdW5kcygpO2suc3RhcnR4PT09dm9pZCAwJiYoay5zdGFydHg9MCksay5zdGFydHk9PT12b2lkIDAmJihrLnN0YXJ0eT0wKSxrLnN0b3B4PT09dm9pZCAwJiYoay5zdG9weD0wKSxrLnN0b3B5PT09dm9pZCAwJiYoay5zdG9weT0wKTtsZXQgUj1rLnN0b3B5LWsuc3RhcnR5O1I8RC5tYXhIZWlnaHQmJihSPUQubWF4SGVpZ2h0KTtsZXQgQz1SKzIqRGUuZGlhZ3JhbU1hcmdpblk7RGUubWlycm9yQWN0b3JzJiYoQz1DLURlLmJveE1hcmdpbitEZS5ib3R0b21NYXJnaW5BZGopO2xldCBPPWsuc3RvcHgtay5zdGFydHg7TzxELm1heFdpZHRoJiYoTz1ELm1heFdpZHRoKTtsZXQgTj1PKzIqRGUuZGlhZ3JhbU1hcmdpblg7diYmaC5hcHBlbmQoInRleHQiKS50ZXh0KHYpLmF0dHIoIngiLChrLnN0b3B4LWsuc3RhcnR4KS8yLTIqRGUuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksWnIoaCxDLE4sRGUudXNlTWF4V2lkdGgpO2xldCBQPXY/NDA6MDtoLmF0dHIoInZpZXdCb3giLGsuc3RhcnR4LURlLmRpYWdyYW1NYXJnaW5YKyIgLSIrKERlLmRpYWdyYW1NYXJnaW5ZK1ApKyIgIitOKyIgIisoQytQKSksWS5kZWJ1ZygibW9kZWxzOiIsbnQubW9kZWxzKX0sImRyYXciKTtvKHlIZSwiZ2V0TWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IiKTt2SGU9byhmdW5jdGlvbih0KXtsZXQgZT0wLHI9RE8oRGUpO2ZvcihsZXQgbiBpbiB0LmxpbmtzKXtsZXQgYT1VdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhuLHIpLndpZHRoKzIqRGUud3JhcFBhZGRpbmcrMipEZS5ib3hNYXJnaW47ZTxhJiYoZT1hKX1yZXR1cm4gZX0sImdldFJlcXVpcmVkUG9wdXBXaWR0aCIpO28oeEhlLCJjYWxjdWxhdGVBY3Rvck1hcmdpbnMiKTtiSGU9byhhc3luYyBmdW5jdGlvbih0LGUscil7bGV0IG49ZS5nZXQodC5mcm9tKSxpPWUuZ2V0KHQudG8pLGE9bi54LHM9aS54LGw9dC53cmFwJiZ0Lm1lc3NhZ2UsdT15aSh0Lm1lc3NhZ2UpP2F3YWl0IHNkKHQubWVzc2FnZSxwZSgpKTpVdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsP1V0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsRGUud2lkdGgsUWcoRGUpKTp0Lm1lc3NhZ2UsUWcoRGUpKSxoPXt3aWR0aDpsP0RlLndpZHRoOnFlLmdldE1heChEZS53aWR0aCx1LndpZHRoKzIqRGUubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4Om4ueCxzdG9weDowLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTp0Lm1lc3NhZ2V9O3JldHVybiB0LnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/KGgud2lkdGg9bD9xZS5nZXRNYXgoRGUud2lkdGgsdS53aWR0aCk6cWUuZ2V0TWF4KG4ud2lkdGgvMitpLndpZHRoLzIsdS53aWR0aCsyKkRlLm5vdGVNYXJnaW4pLGguc3RhcnR4PWErKG4ud2lkdGgrRGUuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GPyhoLndpZHRoPWw/cWUuZ2V0TWF4KERlLndpZHRoLHUud2lkdGgrMipEZS5ub3RlTWFyZ2luKTpxZS5nZXRNYXgobi53aWR0aC8yK2kud2lkdGgvMix1LndpZHRoKzIqRGUubm90ZU1hcmdpbiksaC5zdGFydHg9YS1oLndpZHRoKyhuLndpZHRoLURlLmFjdG9yTWFyZ2luKS8yKTp0LnRvPT09dC5mcm9tPyh1PVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGw/VXQud3JhcExhYmVsKHQubWVzc2FnZSxxZS5nZXRNYXgoRGUud2lkdGgsbi53aWR0aCksUWcoRGUpKTp0Lm1lc3NhZ2UsUWcoRGUpKSxoLndpZHRoPWw/cWUuZ2V0TWF4KERlLndpZHRoLG4ud2lkdGgpOnFlLmdldE1heChuLndpZHRoLERlLndpZHRoLHUud2lkdGgrMipEZS5ub3RlTWFyZ2luKSxoLnN0YXJ0eD1hKyhuLndpZHRoLWgud2lkdGgpLzIpOihoLndpZHRoPU1hdGguYWJzKGErbi53aWR0aC8yLShzK2kud2lkdGgvMikpK0RlLmFjdG9yTWFyZ2luLGguc3RhcnR4PWE8cz9hK24ud2lkdGgvMi1EZS5hY3Rvck1hcmdpbi8yOnMraS53aWR0aC8yLURlLmFjdG9yTWFyZ2luLzIpLGwmJihoLm1lc3NhZ2U9VXQud3JhcExhYmVsKHQubWVzc2FnZSxoLndpZHRoLTIqRGUud3JhcFBhZGRpbmcsUWcoRGUpKSksWS5kZWJ1ZyhgTk06WyR7aC5zdGFydHh9LCR7aC5zdG9weH0sJHtoLnN0YXJ0eX0sJHtoLnN0b3B5fToke2gud2lkdGh9LCR7aC5oZWlnaHR9PSR7dC5tZXNzYWdlfV1gKSxofSwiYnVpbGROb3RlTW9kZWwiKSx3SGU9byhmdW5jdGlvbih0LGUscil7aWYoIVtyLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sci5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixyLmRiLkxJTkVUWVBFLlNPTElELHIuZGIuTElORVRZUEUuRE9UVEVELHIuZGIuTElORVRZUEUuU09MSURfQ1JPU1Msci5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1Msci5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxyLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCxyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXModC50eXBlKSlyZXR1cm57fTtsZXRbbixpXT1hZGUodC5mcm9tLGUpLFthLHNdPWFkZSh0LnRvLGUpLGw9bjw9YSx1PWw/aTpuLGg9bD9hOnMsZj1NYXRoLmFicyhhLXMpPjIsZD1vKHk9Pmw/LXk6eSwiYWRqdXN0VmFsdWUiKTt0LmZyb209PT10LnRvP2g9dToodC5hY3RpdmF0ZSYmIWYmJihoKz1kKERlLmFjdGl2YXRpb25XaWR0aC8yLTEpKSxbci5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHIuZGIuTElORVRZUEUuRE9UVEVEX09QRU5dLmluY2x1ZGVzKHQudHlwZSl8fChoKz1kKDMpKSxbci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELHIuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKHQudHlwZSkmJih1LT1kKDMpKSk7bGV0IHA9W24saSxhLHNdLG09TWF0aC5hYnModS1oKTt0LndyYXAmJnQubWVzc2FnZSYmKHQubWVzc2FnZT1VdC53cmFwTGFiZWwodC5tZXNzYWdlLHFlLmdldE1heChtKzIqRGUud3JhcFBhZGRpbmcsRGUud2lkdGgpLE8wKERlKSkpO2xldCBnPVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHQubWVzc2FnZSxPMChEZSkpO3JldHVybnt3aWR0aDpxZS5nZXRNYXgodC53cmFwPzA6Zy53aWR0aCsyKkRlLndyYXBQYWRkaW5nLG0rMipEZS53cmFwUGFkZGluZyxEZS53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnUsc3RvcHg6aCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxwKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHApfX0sImJ1aWxkTWVzc2FnZU1vZGVsIiksVEhlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9e30sYT1bXSxzLGwsdTtmb3IobGV0IGggb2YgdCl7c3dpdGNoKGguaWQ9VXQucmFuZG9tKHtsZW5ndGg6MTB9KSxoLnR5cGUpe2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmEucHVzaCh7aWQ6aC5pZCxtc2c6aC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIG4uZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOmgubWVzc2FnZSYmKHM9YS5wb3AoKSxpW3MuaWRdPXMsaVtoLmlkXT1zLGEucHVzaChzKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpzPWEucG9wKCksaVtzLmlkXT1zO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2xldCBkPWUuZ2V0KGguZnJvbT9oLmZyb206aC50by5hY3RvcikscD1JRShoLmZyb20/aC5mcm9tOmgudG8uYWN0b3IpLmxlbmd0aCxtPWQueCtkLndpZHRoLzIrKHAtMSkqRGUuYWN0aXZhdGlvbldpZHRoLzIsZz17c3RhcnR4Om0sc3RvcHg6bStEZS5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6aC5mcm9tLGVuYWJsZWQ6ITB9O250LmFjdGl2YXRpb25zLnB1c2goZyl9YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2xldCBkPW50LmFjdGl2YXRpb25zLm1hcChwPT5wLmFjdG9yKS5sYXN0SW5kZXhPZihoLmZyb20pO250LmFjdGl2YXRpb25zLnNwbGljZShkLDEpLnNwbGljZSgwLDEpfWJyZWFrfWgucGxhY2VtZW50IT09dm9pZCAwPyhsPWF3YWl0IGJIZShoLGUsbiksaC5ub3RlTW9kZWw9bCxhLmZvckVhY2goZD0+e3M9ZCxzLmZyb209cWUuZ2V0TWluKHMuZnJvbSxsLnN0YXJ0eCkscy50bz1xZS5nZXRNYXgocy50byxsLnN0YXJ0eCtsLndpZHRoKSxzLndpZHRoPXFlLmdldE1heChzLndpZHRoLE1hdGguYWJzKHMuZnJvbS1zLnRvKSktRGUubGFiZWxCb3hXaWR0aH0pKToodT13SGUoaCxlLG4pLGgubXNnTW9kZWw9dSx1LnN0YXJ0eCYmdS5zdG9weCYmYS5sZW5ndGg+MCYmYS5mb3JFYWNoKGQ9PntpZihzPWQsdS5zdGFydHg9PT11LnN0b3B4KXtsZXQgcD1lLmdldChoLmZyb20pLG09ZS5nZXQoaC50byk7cy5mcm9tPXFlLmdldE1pbihwLngtdS53aWR0aC8yLHAueC1wLndpZHRoLzIscy5mcm9tKSxzLnRvPXFlLmdldE1heChtLngrdS53aWR0aC8yLG0ueCtwLndpZHRoLzIscy50bykscy53aWR0aD1xZS5nZXRNYXgocy53aWR0aCxNYXRoLmFicyhzLnRvLXMuZnJvbSkpLURlLmxhYmVsQm94V2lkdGh9ZWxzZSBzLmZyb209cWUuZ2V0TWluKHUuc3RhcnR4LHMuZnJvbSkscy50bz1xZS5nZXRNYXgodS5zdG9weCxzLnRvKSxzLndpZHRoPXFlLmdldE1heChzLndpZHRoLHUud2lkdGgpLURlLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIG50LmFjdGl2YXRpb25zPVtdLFkuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6IixpKSxpfSwiY2FsY3VsYXRlTG9vcEJvdW5kcyIpLGxkZT17Ym91bmRzOm50LGRyYXdBY3RvcnM6Tk8sZHJhd0FjdG9yc1BvcHVwOnNkZSxzZXRDb25mOm9kZSxkcmF3OmdIZX19KTt2YXIgdWRlPXt9O3ZyKHVkZSx7ZGlhZ3JhbTooKT0+a0hlfSk7dmFyIGtIZSxoZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskZmUoKTtqZmUoKTtRZmUoKTtjZGUoKTtrSGU9e3BhcnNlcjpHZmUsZGI6U08scmVuZGVyZXI6bGRlLHN0eWxlczpLZmUsaW5pdDpvKCh7d3JhcDp0fSk9PntTTy5zZXRXcmFwKHQpfSwiaW5pdCIpfX0pO3ZhciBSTyxPRSxNTz1NKCgpPT57InVzZSBzdHJpY3QiO1JPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihYLGZlLGhlLGdlKXtmb3IoaGU9aGV8fHt9LGdlPVgubGVuZ3RoO2dlLS07aGVbWFtnZV1dPWZlKTtyZXR1cm4gaGV9LCJvIiksZT1bMSwxOF0scj1bMSwxOV0sbj1bMSwyMF0saT1bMSw0MV0sYT1bMSw0Ml0scz1bMSwyNl0sbD1bMSwyNF0sdT1bMSwyNV0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNF0scD1bMSw0NV0sbT1bMSwzNV0sZz1bMSwzNl0seT1bMSwzN10sdj1bMSwzOF0seD1bMSwyN10sYj1bMSwyOF0sdz1bMSwyOV0sXz1bMSwzMF0sVD1bMSwzMV0sRT1bMSw0NF0sTD1bMSw0Nl0sUz1bMSw0M10sQT1bMSw0N10sST1bMSw5XSxEPVsxLDgsOV0saz1bMSw1OF0sUj1bMSw1OV0sQz1bMSw2MF0sTz1bMSw2MV0sTj1bMSw2Ml0sUD1bMSw2M10sRj1bMSw2NF0sQj1bMSw4LDksNDFdLEc9WzEsNzZdLHo9WzEsOCw5LDEyLDEzLDIyLDM5LDQxLDQ0LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDc3LDc5XSxXPVsxLDgsOSwxMiwxMywxNywyMCwyMiwzOSw0MSw0NCw0OCw1OCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OSw4NCw5OSwxMDEsMTAyXSxaPVsxMyw1OCw4NCw5OSwxMDEsMTAyXSxqPVsxMyw1OCw3MSw3Miw4NCw5OSwxMDEsMTAyXSxvZT1bMTMsNTgsNjYsNjcsNjgsNjksNzAsODQsOTksMTAxLDEwMl0sSz1bMSw5OF0sZWU9WzEsMTE1XSxKPVsxLDEwN10sSD1bMSwxMTNdLHE9WzEsMTA4XSxRPVsxLDEwOV0sYWU9WzEsMTEwXSx1ZT1bMSwxMTFdLGNlPVsxLDExMl0sdGU9WzEsMTE0XSxOZT1bMjIsNTgsNTksODAsODQsODUsODYsODcsODgsODldLHNlPVsxLDgsOSwzOSw0MSw0NF0sa2U9WzEsOCw5LDIyXSxSZT1bMSwxNDNdLENlPVsxLDgsOSw1OV0sUGU9WzEsOCw5LDIyLDU4LDU5LDgwLDg0LDg1LDg2LDg3LDg4LDg5XSxJZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsc3RhdGVtZW50czo1LGdyYXBoQ29uZmlnOjYsQ0xBU1NfRElBR1JBTTo3LE5FV0xJTkU6OCxFT0Y6OSxzdGF0ZW1lbnQ6MTAsY2xhc3NMYWJlbDoxMSxTUVM6MTIsU1RSOjEzLFNRRToxNCxuYW1lc3BhY2VOYW1lOjE1LGFscGhhTnVtVG9rZW46MTYsRE9UOjE3LGNsYXNzTmFtZToxOCxjbGFzc0xpdGVyYWxOYW1lOjE5LEdFTkVSSUNUWVBFOjIwLHJlbGF0aW9uU3RhdGVtZW50OjIxLExBQkVMOjIyLG5hbWVzcGFjZVN0YXRlbWVudDoyMyxjbGFzc1N0YXRlbWVudDoyNCxtZW1iZXJTdGF0ZW1lbnQ6MjUsYW5ub3RhdGlvblN0YXRlbWVudDoyNixjbGlja1N0YXRlbWVudDoyNyxzdHlsZVN0YXRlbWVudDoyOCxjc3NDbGFzc1N0YXRlbWVudDoyOSxub3RlU3RhdGVtZW50OjMwLGNsYXNzRGVmU3RhdGVtZW50OjMxLGRpcmVjdGlvbjozMixhY2NfdGl0bGU6MzMsYWNjX3RpdGxlX3ZhbHVlOjM0LGFjY19kZXNjcjozNSxhY2NfZGVzY3JfdmFsdWU6MzYsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNyxuYW1lc3BhY2VJZGVudGlmaWVyOjM4LFNUUlVDVF9TVEFSVDozOSxjbGFzc1N0YXRlbWVudHM6NDAsU1RSVUNUX1NUT1A6NDEsTkFNRVNQQUNFOjQyLGNsYXNzSWRlbnRpZmllcjo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsbWVtYmVyczo0NSxDTEFTUzo0NixBTk5PVEFUSU9OX1NUQVJUOjQ3LEFOTk9UQVRJT05fRU5EOjQ4LE1FTUJFUjo0OSxTRVBBUkFUT1I6NTAscmVsYXRpb246NTEsTk9URV9GT1I6NTIsbm90ZVRleHQ6NTMsTk9URTo1NCxDTEFTU0RFRjo1NSxjbGFzc0xpc3Q6NTYsc3R5bGVzT3B0OjU3LEFMUEhBOjU4LENPTU1BOjU5LGRpcmVjdGlvbl90Yjo2MCxkaXJlY3Rpb25fYnQ6NjEsZGlyZWN0aW9uX3JsOjYyLGRpcmVjdGlvbl9scjo2MyxyZWxhdGlvblR5cGU6NjQsbGluZVR5cGU6NjUsQUdHUkVHQVRJT046NjYsRVhURU5TSU9OOjY3LENPTVBPU0lUSU9OOjY4LERFUEVOREVOQ1k6NjksTE9MTElQT1A6NzAsTElORTo3MSxET1RURURfTElORTo3MixDQUxMQkFDSzo3MyxMSU5LOjc0LExJTktfVEFSR0VUOjc1LENMSUNLOjc2LENBTExCQUNLX05BTUU6NzcsQ0FMTEJBQ0tfQVJHUzo3OCxIUkVGOjc5LFNUWUxFOjgwLENTU0NMQVNTOjgxLHN0eWxlOjgyLHN0eWxlQ29tcG9uZW50OjgzLE5VTTo4NCxDT0xPTjo4NSxVTklUOjg2LFNQQUNFOjg3LEJSS1Q6ODgsUENUOjg5LGNvbW1lbnRUb2tlbjo5MCx0ZXh0VG9rZW46OTEsZ3JhcGhDb2RlVG9rZW5zOjkyLHRleHROb1RhZ3NUb2tlbjo5MyxUQUdTVEFSVDo5NCxUQUdFTkQ6OTUsIj09Ijo5NiwiLS0iOjk3LERFRkFVTFQ6OTgsTUlOVVM6OTksa2V5d29yZHM6MTAwLFVOSUNPREVfVEVYVDoxMDEsQlFVT1RFX1NUUjoxMDIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTc6IkRPVCIsMjA6IkdFTkVSSUNUWVBFIiwyMjoiTEFCRUwiLDMzOiJhY2NfdGl0bGUiLDM0OiJhY2NfdGl0bGVfdmFsdWUiLDM1OiJhY2NfZGVzY3IiLDM2OiJhY2NfZGVzY3JfdmFsdWUiLDM3OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzOToiU1RSVUNUX1NUQVJUIiw0MToiU1RSVUNUX1NUT1AiLDQyOiJOQU1FU1BBQ0UiLDQ0OiJTVFlMRV9TRVBBUkFUT1IiLDQ2OiJDTEFTUyIsNDc6IkFOTk9UQVRJT05fU1RBUlQiLDQ4OiJBTk5PVEFUSU9OX0VORCIsNDk6Ik1FTUJFUiIsNTA6IlNFUEFSQVRPUiIsNTI6Ik5PVEVfRk9SIiw1NDoiTk9URSIsNTU6IkNMQVNTREVGIiw1ODoiQUxQSEEiLDU5OiJDT01NQSIsNjA6ImRpcmVjdGlvbl90YiIsNjE6ImRpcmVjdGlvbl9idCIsNjI6ImRpcmVjdGlvbl9ybCIsNjM6ImRpcmVjdGlvbl9sciIsNjY6IkFHR1JFR0FUSU9OIiw2NzoiRVhURU5TSU9OIiw2ODoiQ09NUE9TSVRJT04iLDY5OiJERVBFTkRFTkNZIiw3MDoiTE9MTElQT1AiLDcxOiJMSU5FIiw3MjoiRE9UVEVEX0xJTkUiLDczOiJDQUxMQkFDSyIsNzQ6IkxJTksiLDc1OiJMSU5LX1RBUkdFVCIsNzY6IkNMSUNLIiw3NzoiQ0FMTEJBQ0tfTkFNRSIsNzg6IkNBTExCQUNLX0FSR1MiLDc5OiJIUkVGIiw4MDoiU1RZTEUiLDgxOiJDU1NDTEFTUyIsODQ6Ik5VTSIsODU6IkNPTE9OIiw4NjoiVU5JVCIsODc6IlNQQUNFIiw4ODoiQlJLVCIsODk6IlBDVCIsOTI6ImdyYXBoQ29kZVRva2VucyIsOTQ6IlRBR1NUQVJUIiw5NToiVEFHRU5EIiw5NjoiPT0iLDk3OiItLSIsOTg6IkRFRkFVTFQiLDk5OiJNSU5VUyIsMTAwOiJrZXl3b3JkcyIsMTAxOiJVTklDT0RFX1RFWFQiLDEwMjoiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNCwxXSxbNiw0XSxbNSwxXSxbNSwyXSxbNSwzXSxbMTEsM10sWzE1LDFdLFsxNSwzXSxbMTUsMl0sWzE4LDFdLFsxOCwzXSxbMTgsMV0sWzE4LDJdLFsxOCwyXSxbMTgsMl0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzIzLDRdLFsyMyw1XSxbMzgsMl0sWzQwLDFdLFs0MCwyXSxbNDAsM10sWzI0LDFdLFsyNCwzXSxbMjQsNF0sWzI0LDZdLFs0MywyXSxbNDMsM10sWzI2LDRdLFs0NSwxXSxbNDUsMl0sWzI1LDFdLFsyNSwyXSxbMjUsMV0sWzI1LDFdLFsyMSwzXSxbMjEsNF0sWzIxLDRdLFsyMSw1XSxbMzAsM10sWzMwLDJdLFszMSwzXSxbNTYsMV0sWzU2LDNdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbNTEsM10sWzUxLDJdLFs1MSwyXSxbNTEsMV0sWzY0LDFdLFs2NCwxXSxbNjQsMV0sWzY0LDFdLFs2NCwxXSxbNjUsMV0sWzY1LDFdLFsyNywzXSxbMjcsNF0sWzI3LDNdLFsyNyw0XSxbMjcsNF0sWzI3LDVdLFsyNywzXSxbMjcsNF0sWzI3LDRdLFsyNyw1XSxbMjcsNF0sWzI3LDVdLFsyNyw1XSxbMjcsNl0sWzI4LDNdLFsyOSwzXSxbNTcsMV0sWzU3LDNdLFs4MiwxXSxbODIsMl0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzkwLDFdLFs5MCwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkzLDFdLFs5MywxXSxbOTMsMV0sWzkzLDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTksMV0sWzUzLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZmUsaGUsZ2UsbmUsdmUsVSxUZSl7dmFyIGllPVUubGVuZ3RoLTE7c3dpdGNoKHZlKXtjYXNlIDg6dGhpcy4kPVVbaWUtMV07YnJlYWs7Y2FzZSA5OmNhc2UgMTI6Y2FzZSAxNDp0aGlzLiQ9VVtpZV07YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOnRoaXMuJD1VW2llLTJdKyIuIitVW2llXTticmVhaztjYXNlIDExOmNhc2UgMTU6dGhpcy4kPVVbaWUtMV0rVVtpZV07YnJlYWs7Y2FzZSAxNjpjYXNlIDE3OnRoaXMuJD1VW2llLTFdKyJ+IitVW2llXSsifiI7YnJlYWs7Y2FzZSAxODpuZS5hZGRSZWxhdGlvbihVW2llXSk7YnJlYWs7Y2FzZSAxOTpVW2llLTFdLnRpdGxlPW5lLmNsZWFudXBMYWJlbChVW2llXSksbmUuYWRkUmVsYXRpb24oVVtpZS0xXSk7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9VVtpZV0udHJpbSgpLG5lLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD1VW2llXS50cmltKCksbmUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMzOm5lLmFkZENsYXNzZXNUb05hbWVzcGFjZShVW2llLTNdLFVbaWUtMV0pO2JyZWFrO2Nhc2UgMzQ6bmUuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKFVbaWUtNF0sVVtpZS0xXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9VVtpZV0sbmUuYWRkTmFtZXNwYWNlKFVbaWVdKTticmVhaztjYXNlIDM2OnRoaXMuJD1bVVtpZV1dO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtVW2llLTFdXTticmVhaztjYXNlIDM4OlVbaWVdLnVuc2hpZnQoVVtpZS0yXSksdGhpcy4kPVVbaWVdO2JyZWFrO2Nhc2UgNDA6bmUuc2V0Q3NzQ2xhc3MoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA0MTpuZS5hZGRNZW1iZXJzKFVbaWUtM10sVVtpZS0xXSk7YnJlYWs7Y2FzZSA0MjpuZS5zZXRDc3NDbGFzcyhVW2llLTVdLFVbaWUtM10pLG5lLmFkZE1lbWJlcnMoVVtpZS01XSxVW2llLTFdKTticmVhaztjYXNlIDQzOnRoaXMuJD1VW2llXSxuZS5hZGRDbGFzcyhVW2llXSk7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9VVtpZS0xXSxuZS5hZGRDbGFzcyhVW2llLTFdKSxuZS5zZXRDbGFzc0xhYmVsKFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgNDU6bmUuYWRkQW5ub3RhdGlvbihVW2llXSxVW2llLTJdKTticmVhaztjYXNlIDQ2OmNhc2UgNTk6dGhpcy4kPVtVW2llXV07YnJlYWs7Y2FzZSA0NzpVW2llXS5wdXNoKFVbaWUtMV0pLHRoaXMuJD1VW2llXTticmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6bmUuYWRkTWVtYmVyKFVbaWUtMV0sbmUuY2xlYW51cExhYmVsKFVbaWVdKSk7YnJlYWs7Y2FzZSA1MDpicmVhaztjYXNlIDUxOmJyZWFrO2Nhc2UgNTI6dGhpcy4kPXtpZDE6VVtpZS0yXSxpZDI6VVtpZV0scmVsYXRpb246VVtpZS0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUzOnRoaXMuJD17aWQxOlVbaWUtM10saWQyOlVbaWVdLHJlbGF0aW9uOlVbaWUtMV0scmVsYXRpb25UaXRsZTE6VVtpZS0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXtpZDE6VVtpZS0zXSxpZDI6VVtpZV0scmVsYXRpb246VVtpZS0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6VVtpZS0xXX07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9e2lkMTpVW2llLTRdLGlkMjpVW2llXSxyZWxhdGlvbjpVW2llLTJdLHJlbGF0aW9uVGl0bGUxOlVbaWUtM10scmVsYXRpb25UaXRsZTI6VVtpZS0xXX07YnJlYWs7Y2FzZSA1NjpuZS5hZGROb3RlKFVbaWVdLFVbaWUtMV0pO2JyZWFrO2Nhc2UgNTc6bmUuYWRkTm90ZShVW2llXSk7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9VVtpZS0yXSxuZS5kZWZpbmVDbGFzcyhVW2llLTFdLFVbaWVdKTticmVhaztjYXNlIDYwOnRoaXMuJD1VW2llLTJdLmNvbmNhdChbVVtpZV1dKTticmVhaztjYXNlIDYxOm5lLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDYyOm5lLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDYzOm5lLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY0Om5lLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDY1OnRoaXMuJD17dHlwZTE6VVtpZS0yXSx0eXBlMjpVW2llXSxsaW5lVHlwZTpVW2llLTFdfTticmVhaztjYXNlIDY2OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOlVbaWVdLGxpbmVUeXBlOlVbaWUtMV19O2JyZWFrO2Nhc2UgNjc6dGhpcy4kPXt0eXBlMTpVW2llLTFdLHR5cGUyOiJub25lIixsaW5lVHlwZTpVW2llXX07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6VVtpZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjticmVhaztjYXNlIDcwOnRoaXMuJD1uZS5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDcyOnRoaXMuJD1uZS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTticmVhaztjYXNlIDczOnRoaXMuJD1uZS5yZWxhdGlvblR5cGUuTE9MTElQT1A7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9bmUubGluZVR5cGUuTElORTticmVhaztjYXNlIDc1OnRoaXMuJD1uZS5saW5lVHlwZS5ET1RURURfTElORTticmVhaztjYXNlIDc2OmNhc2UgODI6dGhpcy4kPVVbaWUtMl0sbmUuc2V0Q2xpY2tFdmVudChVW2llLTFdLFVbaWVdKTticmVhaztjYXNlIDc3OmNhc2UgODM6dGhpcy4kPVVbaWUtM10sbmUuc2V0Q2xpY2tFdmVudChVW2llLTJdLFVbaWUtMV0pLG5lLnNldFRvb2x0aXAoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9VVtpZS0yXSxuZS5zZXRMaW5rKFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPVVbaWUtM10sbmUuc2V0TGluayhVW2llLTJdLFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgODA6dGhpcy4kPVVbaWUtM10sbmUuc2V0TGluayhVW2llLTJdLFVbaWUtMV0pLG5lLnNldFRvb2x0aXAoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9VVtpZS00XSxuZS5zZXRMaW5rKFVbaWUtM10sVVtpZS0yXSxVW2llXSksbmUuc2V0VG9vbHRpcChVW2llLTNdLFVbaWUtMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPVVbaWUtM10sbmUuc2V0Q2xpY2tFdmVudChVW2llLTJdLFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgODU6dGhpcy4kPVVbaWUtNF0sbmUuc2V0Q2xpY2tFdmVudChVW2llLTNdLFVbaWUtMl0sVVtpZS0xXSksbmUuc2V0VG9vbHRpcChVW2llLTNdLFVbaWVdKTticmVhaztjYXNlIDg2OnRoaXMuJD1VW2llLTNdLG5lLnNldExpbmsoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA4Nzp0aGlzLiQ9VVtpZS00XSxuZS5zZXRMaW5rKFVbaWUtM10sVVtpZS0xXSxVW2llXSk7YnJlYWs7Y2FzZSA4ODp0aGlzLiQ9VVtpZS00XSxuZS5zZXRMaW5rKFVbaWUtM10sVVtpZS0xXSksbmUuc2V0VG9vbHRpcChVW2llLTNdLFVbaWVdKTticmVhaztjYXNlIDg5OnRoaXMuJD1VW2llLTVdLG5lLnNldExpbmsoVVtpZS00XSxVW2llLTJdLFVbaWVdKSxuZS5zZXRUb29sdGlwKFVbaWUtNF0sVVtpZS0xXSk7YnJlYWs7Y2FzZSA5MDp0aGlzLiQ9VVtpZS0yXSxuZS5zZXRDc3NTdHlsZShVW2llLTFdLFVbaWVdKTticmVhaztjYXNlIDkxOm5lLnNldENzc0NsYXNzKFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgOTI6dGhpcy4kPVtVW2llXV07YnJlYWs7Y2FzZSA5MzpVW2llLTJdLnB1c2goVVtpZV0pLHRoaXMuJD1VW2llLTJdO2JyZWFrO2Nhc2UgOTU6dGhpcy4kPVVbaWUtMV0rVVtpZV07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzpbMSw2XSwxMDo1LDE2OjM5LDE4OjIxLDE5OjQwLDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOmUsMzU6ciwzNzpuLDM4OjIyLDQyOmksNDM6MjMsNDY6YSw0NzpzLDQ5OmwsNTA6dSw1MjpoLDU0OmYsNTU6ZCw1ODpwLDYwOm0sNjE6Zyw2Mjp5LDYzOnYsNzM6eCw3NDpiLDc2OncsODA6Xyw4MTpULDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx0KEksWzIsNV0sezg6WzEsNDhdfSksezg6WzEsNDldfSx0KEQsWzIsMThdLHsyMjpbMSw1MF19KSx0KEQsWzIsMjBdKSx0KEQsWzIsMjFdKSx0KEQsWzIsMjJdKSx0KEQsWzIsMjNdKSx0KEQsWzIsMjRdKSx0KEQsWzIsMjVdKSx0KEQsWzIsMjZdKSx0KEQsWzIsMjddKSx0KEQsWzIsMjhdKSx0KEQsWzIsMjldKSx7MzQ6WzEsNTFdfSx7MzY6WzEsNTJdfSx0KEQsWzIsMzJdKSx0KEQsWzIsNDhdLHs1MTo1Myw2NDo1Niw2NTo1NywxMzpbMSw1NF0sMjI6WzEsNTVdLDY2OmssNjc6Uiw2ODpDLDY5Ok8sNzA6Tiw3MTpQLDcyOkZ9KSx7Mzk6WzEsNjVdfSx0KEIsWzIsMzldLHszOTpbMSw2N10sNDQ6WzEsNjZdfSksdChELFsyLDUwXSksdChELFsyLDUxXSksezE2OjY4LDU4OnAsODQ6RSw5OTpMLDEwMTpTfSx7MTY6MzksMTg6NjksMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHsxNjozOSwxODo3MCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sezE2OjM5LDE4OjcxLDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSx7NTg6WzEsNzJdfSx7MTM6WzEsNzNdfSx7MTY6MzksMTg6NzQsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHsxMzpHLDUzOjc1fSx7NTY6NzcsNTg6WzEsNzhdfSx0KEQsWzIsNjFdKSx0KEQsWzIsNjJdKSx0KEQsWzIsNjNdKSx0KEQsWzIsNjRdKSx0KHosWzIsMTJdLHsxNjozOSwxOTo0MCwxODo4MCwxNzpbMSw3OV0sMjA6WzEsODFdLDU4OnAsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSksdCh6LFsyLDE0XSx7MjA6WzEsODJdfSksezE1OjgzLDE2Ojg0LDU4OnAsODQ6RSw5OTpMLDEwMTpTfSx7MTY6MzksMTg6ODUsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHQoVyxbMiwxMThdKSx0KFcsWzIsMTE5XSksdChXLFsyLDEyMF0pLHQoVyxbMiwxMjFdKSx0KFsxLDgsOSwxMiwxMywyMCwyMiwzOSw0MSw0NCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OV0sWzIsMTIyXSksdChJLFsyLDZdLHsxMDo1LDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDE4OjIxLDM4OjIyLDQzOjIzLDE2OjM5LDE5OjQwLDU6ODYsMzM6ZSwzNTpyLDM3Om4sNDI6aSw0NjphLDQ3OnMsNDk6bCw1MDp1LDUyOmgsNTQ6Ziw1NTpkLDU4OnAsNjA6bSw2MTpnLDYyOnksNjM6diw3Mzp4LDc0OmIsNzY6dyw4MDpfLDgxOlQsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSksezU6ODcsMTA6NSwxNjozOSwxODoyMSwxOTo0MCwyMTo3LDIzOjgsMjQ6OSwyNToxMCwyNjoxMSwyNzoxMiwyODoxMywyOToxNCwzMDoxNSwzMToxNiwzMjoxNywzMzplLDM1OnIsMzc6biwzODoyMiw0MjppLDQzOjIzLDQ2OmEsNDc6cyw0OTpsLDUwOnUsNTI6aCw1NDpmLDU1OmQsNTg6cCw2MDptLDYxOmcsNjI6eSw2Mzp2LDczOngsNzQ6Yiw3Njp3LDgwOl8sODE6VCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHQoRCxbMiwxOV0pLHQoRCxbMiwzMF0pLHQoRCxbMiwzMV0pLHsxMzpbMSw4OV0sMTY6MzksMTg6ODgsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHs1MTo5MCw2NDo1Niw2NTo1Nyw2NjprLDY3OlIsNjg6Qyw2OTpPLDcwOk4sNzE6UCw3MjpGfSx0KEQsWzIsNDldKSx7NjU6OTEsNzE6UCw3MjpGfSx0KFosWzIsNjhdLHs2NDo5Miw2NjprLDY3OlIsNjg6Qyw2OTpPLDcwOk59KSx0KGosWzIsNjldKSx0KGosWzIsNzBdKSx0KGosWzIsNzFdKSx0KGosWzIsNzJdKSx0KGosWzIsNzNdKSx0KG9lLFsyLDc0XSksdChvZSxbMiw3NV0pLHs4OlsxLDk0XSwyNDo5NSw0MDo5Myw0MzoyMyw0NjphfSx7MTY6OTYsNTg6cCw4NDpFLDk5OkwsMTAxOlN9LHs0NTo5Nyw0OTpLfSx7NDg6WzEsOTldfSx7MTM6WzEsMTAwXX0sezEzOlsxLDEwMV19LHs3NzpbMSwxMDJdLDc5OlsxLDEwM119LHsyMjplZSw1NzoxMDQsNTg6Siw4MDpILDgyOjEwNSw4MzoxMDYsODQ6cSw4NTpRLDg2OmFlLDg3OnVlLDg4OmNlLDg5OnRlfSx7NTg6WzEsMTE2XX0sezEzOkcsNTM6MTE3fSx0KEQsWzIsNTddKSx0KEQsWzIsMTIzXSksezIyOmVlLDU3OjExOCw1ODpKLDU5OlsxLDExOV0sODA6SCw4MjoxMDUsODM6MTA2LDg0OnEsODU6USw4NjphZSw4Nzp1ZSw4ODpjZSw4OTp0ZX0sdChOZSxbMiw1OV0pLHsxNjozOSwxODoxMjAsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHQoeixbMiwxNV0pLHQoeixbMiwxNl0pLHQoeixbMiwxN10pLHszOTpbMiwzNV19LHsxNToxMjIsMTY6ODQsMTc6WzEsMTIxXSwzOTpbMiw5XSw1ODpwLDg0OkUsOTk6TCwxMDE6U30sdChzZSxbMiw0M10sezExOjEyMywxMjpbMSwxMjRdfSksdChJLFsyLDddKSx7OTpbMSwxMjVdfSx0KGtlLFsyLDUyXSksezE2OjM5LDE4OjEyNiwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sezEzOlsxLDEyOF0sMTY6MzksMTg6MTI3LDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSx0KFosWzIsNjddLHs2NDoxMjksNjY6ayw2NzpSLDY4OkMsNjk6Tyw3MDpOfSksdChaLFsyLDY2XSksezQxOlsxLDEzMF19LHsyNDo5NSw0MDoxMzEsNDM6MjMsNDY6YX0sezg6WzEsMTMyXSw0MTpbMiwzNl19LHQoQixbMiw0MF0sezM5OlsxLDEzM119KSx7NDE6WzEsMTM0XX0sezQxOlsyLDQ2XSw0NToxMzUsNDk6S30sezE2OjM5LDE4OjEzNiwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sdChELFsyLDc2XSx7MTM6WzEsMTM3XX0pLHQoRCxbMiw3OF0sezEzOlsxLDEzOV0sNzU6WzEsMTM4XX0pLHQoRCxbMiw4Ml0sezEzOlsxLDE0MF0sNzg6WzEsMTQxXX0pLHsxMzpbMSwxNDJdfSx0KEQsWzIsOTBdLHs1OTpSZX0pLHQoQ2UsWzIsOTJdLHs4MzoxNDQsMjI6ZWUsNTg6Siw4MDpILDg0OnEsODU6USw4NjphZSw4Nzp1ZSw4ODpjZSw4OTp0ZX0pLHQoUGUsWzIsOTRdKSx0KFBlLFsyLDk2XSksdChQZSxbMiw5N10pLHQoUGUsWzIsOThdKSx0KFBlLFsyLDk5XSksdChQZSxbMiwxMDBdKSx0KFBlLFsyLDEwMV0pLHQoUGUsWzIsMTAyXSksdChQZSxbMiwxMDNdKSx0KFBlLFsyLDEwNF0pLHQoRCxbMiw5MV0pLHQoRCxbMiw1Nl0pLHQoRCxbMiw1OF0sezU5OlJlfSksezU4OlsxLDE0NV19LHQoeixbMiwxM10pLHsxNToxNDYsMTY6ODQsNTg6cCw4NDpFLDk5OkwsMTAxOlN9LHszOTpbMiwxMV19LHQoc2UsWzIsNDRdKSx7MTM6WzEsMTQ3XX0sezE6WzIsNF19LHQoa2UsWzIsNTRdKSx0KGtlLFsyLDUzXSksezE2OjM5LDE4OjE0OCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sdChaLFsyLDY1XSksdChELFsyLDMzXSksezQxOlsxLDE0OV19LHsyNDo5NSw0MDoxNTAsNDE6WzIsMzddLDQzOjIzLDQ2OmF9LHs0NToxNTEsNDk6S30sdChCLFsyLDQxXSksezQxOlsyLDQ3XX0sdChELFsyLDQ1XSksdChELFsyLDc3XSksdChELFsyLDc5XSksdChELFsyLDgwXSx7NzU6WzEsMTUyXX0pLHQoRCxbMiw4M10pLHQoRCxbMiw4NF0sezEzOlsxLDE1M119KSx0KEQsWzIsODZdLHsxMzpbMSwxNTVdLDc1OlsxLDE1NF19KSx7MjI6ZWUsNTg6Siw4MDpILDgyOjE1Niw4MzoxMDYsODQ6cSw4NTpRLDg2OmFlLDg3OnVlLDg4OmNlLDg5OnRlfSx0KFBlLFsyLDk1XSksdChOZSxbMiw2MF0pLHszOTpbMiwxMF19LHsxNDpbMSwxNTddfSx0KGtlLFsyLDU1XSksdChELFsyLDM0XSksezQxOlsyLDM4XX0sezQxOlsxLDE1OF19LHQoRCxbMiw4MV0pLHQoRCxbMiw4NV0pLHQoRCxbMiw4N10pLHQoRCxbMiw4OF0sezc1OlsxLDE1OV19KSx0KENlLFsyLDkzXSx7ODM6MTQ0LDIyOmVlLDU4OkosODA6SCw4NDpxLDg1OlEsODY6YWUsODc6dWUsODg6Y2UsODk6dGV9KSx0KHNlLFsyLDhdKSx0KEIsWzIsNDJdKSx0KEQsWzIsODldKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDNdLDgzOlsyLDM1XSwxMjI6WzIsMTFdLDEyNTpbMiw0XSwxMzU6WzIsNDddLDE0NjpbMiwxMF0sMTUwOlsyLDM4XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGZlLGhlKXtpZihoZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGZlKTtlbHNle3ZhciBnZT1uZXcgRXJyb3IoZmUpO3Rocm93IGdlLmhhc2g9aGUsZ2V9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oZmUpe3ZhciBoZT10aGlzLGdlPVswXSxuZT1bXSx2ZT1bbnVsbF0sVT1bXSxUZT10aGlzLnRhYmxlLGllPSIiLEVlPTAsQWU9MCxHZT0wLEJlPTIsbWU9MSxIZT1VLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE9lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZXQ9e3l5Ont9fTtmb3IodmFyIGJ0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksYnQpJiYoZXQueXlbYnRdPXRoaXMueXlbYnRdKTtPZS5zZXRJbnB1dChmZSxldC55eSksZXQueXkubGV4ZXI9T2UsZXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIE9lLnl5bGxvYz4idSImJihPZS55eWxsb2M9e30pO3ZhciBrdD1PZS55eWxsb2M7VS5wdXNoKGt0KTt2YXIgdnQ9T2Uub3B0aW9ucyYmT2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGV0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWV0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHJ0KHlyKXtnZS5sZW5ndGg9Z2UubGVuZ3RoLTIqeXIsdmUubGVuZ3RoPXZlLmxlbmd0aC15cixVLmxlbmd0aD1VLmxlbmd0aC15cn1vKHJ0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHl0KCl7dmFyIHlyO3JldHVybiB5cj1uZS5wb3AoKXx8T2UubGV4KCl8fG1lLHR5cGVvZiB5ciE9Im51bWJlciImJih5ciBpbnN0YW5jZW9mIEFycmF5JiYobmU9eXIseXI9bmUucG9wKCkpLHlyPWhlLnN5bWJvbHNfW3lyXXx8eXIpLHlyfW8oeXQsImxleCIpO2Zvcih2YXIgVWUsdHQsaHQsRXQsZXIsZHQsSmU9e30sY3QsQ3QscHQsQnQ7Oyl7aWYoaHQ9Z2VbZ2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbaHRdP0V0PXRoaXMuZGVmYXVsdEFjdGlvbnNbaHRdOigoVWU9PT1udWxsfHx0eXBlb2YgVWU+InUiKSYmKFVlPXl0KCkpLEV0PVRlW2h0XSYmVGVbaHRdW1VlXSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIgVHI9IiI7QnQ9W107Zm9yKGN0IGluIFRlW2h0XSl0aGlzLnRlcm1pbmFsc19bY3RdJiZjdD5CZSYmQnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2N0XSsiJyIpO09lLnNob3dQb3NpdGlvbj9Ucj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFZSsxKStgOgpgK09lLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQnQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVZV18fFVlKSsiJyI6VHI9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRWUrMSkrIjogVW5leHBlY3RlZCAiKyhVZT09bWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVWVdfHxVZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoVHIse3RleHQ6T2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1VlXXx8VWUsbGluZTpPZS55eWxpbmVubyxsb2M6a3QsZXhwZWN0ZWQ6QnR9KX1pZihFdFswXWluc3RhbmNlb2YgQXJyYXkmJkV0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraHQrIiwgdG9rZW46ICIrVWUpO3N3aXRjaChFdFswXSl7Y2FzZSAxOmdlLnB1c2goVWUpLHZlLnB1c2goT2UueXl0ZXh0KSxVLnB1c2goT2UueXlsbG9jKSxnZS5wdXNoKEV0WzFdKSxVZT1udWxsLHR0PyhVZT10dCx0dD1udWxsKTooQWU9T2UueXlsZW5nLGllPU9lLnl5dGV4dCxFZT1PZS55eWxpbmVubyxrdD1PZS55eWxsb2MsR2U+MCYmR2UtLSk7YnJlYWs7Y2FzZSAyOmlmKEN0PXRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVsxXSxKZS4kPXZlW3ZlLmxlbmd0aC1DdF0sSmUuXyQ9e2ZpcnN0X2xpbmU6VVtVLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpVW1UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VVtVLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VVtVLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdnQmJihKZS5fJC5yYW5nZT1bVVtVLmxlbmd0aC0oQ3R8fDEpXS5yYW5nZVswXSxVW1UubGVuZ3RoLTFdLnJhbmdlWzFdXSksZHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEplLFtpZSxBZSxFZSxldC55eSxFdFsxXSx2ZSxVXS5jb25jYXQoSGUpKSx0eXBlb2YgZHQ8InUiKXJldHVybiBkdDtDdCYmKGdlPWdlLnNsaWNlKDAsLTEqQ3QqMiksdmU9dmUuc2xpY2UoMCwtMSpDdCksVT1VLnNsaWNlKDAsLTEqQ3QpKSxnZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVswXSksdmUucHVzaChKZS4kKSxVLnB1c2goSmUuXyQpLHB0PVRlW2dlW2dlLmxlbmd0aC0yXV1bZ2VbZ2UubGVuZ3RoLTFdXSxnZS5wdXNoKHB0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sJGU9ZnVuY3Rpb24oKXt2YXIgWD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGhlLGdlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGhlLGdlKTtlbHNlIHRocm93IG5ldyBFcnJvcihoZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihmZSxoZSl7cmV0dXJuIHRoaXMueXk9aGV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWZlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1mZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9ZmUsdGhpcy5tYXRjaGVkKz1mZTt2YXIgaGU9ZmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBoZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksZmV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oZmUpe3ZhciBoZT1mZS5sZW5ndGgsZ2U9ZmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1mZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtaGUpLHRoaXMub2Zmc2V0LT1oZTt2YXIgbmU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZ2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1nZS5sZW5ndGgtMSk7dmFyIHZlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpnZT8oZ2UubGVuZ3RoPT09bmUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStuZVtuZS5sZW5ndGgtZ2UubGVuZ3RoXS5sZW5ndGgtZ2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1oZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt2ZVswXSx2ZVswXSt0aGlzLnl5bGVuZy1oZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKGZlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoZmUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBmZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGZlLmxlbmd0aD4yMD8iLi4uIjoiIikrZmUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgZmU9dGhpcy5tYXRjaDtyZXR1cm4gZmUubGVuZ3RoPDIwJiYoZmUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWZlLmxlbmd0aCkpLChmZS5zdWJzdHIoMCwyMCkrKGZlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXMucGFzdElucHV0KCksaGU9bmV3IEFycmF5KGZlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGZlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtoZSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oZmUsaGUpe3ZhciBnZSxuZSx2ZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYodmU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodmUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksbmU9ZmVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLG5lJiYodGhpcy55eWxpbmVubys9bmUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46bmU/bmVbbmUubGVuZ3RoLTFdLmxlbmd0aC1uZVtuZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitmZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1mZVswXSx0aGlzLm1hdGNoKz1mZVswXSx0aGlzLm1hdGNoZXM9ZmUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoZmVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWZlWzBdLGdlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGhlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGdlKXJldHVybiBnZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgVSBpbiB2ZSl0aGlzW1VdPXZlW1VdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBmZSxoZSxnZSxuZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB2ZT10aGlzLl9jdXJyZW50UnVsZXMoKSxVPTA7VTx2ZS5sZW5ndGg7VSsrKWlmKGdlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbdmVbVV1dKSxnZSYmKCFoZXx8Z2VbMF0ubGVuZ3RoPmhlWzBdLmxlbmd0aCkpe2lmKGhlPWdlLG5lPVUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoZmU9dGhpcy50ZXN0X21hdGNoKGdlLHZlW1VdKSxmZSE9PSExKXJldHVybiBmZTtpZih0aGlzLl9iYWNrdHJhY2spe2hlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGhlPyhmZT10aGlzLnRlc3RfbWF0Y2goaGUsdmVbbmVdKSxmZSE9PSExP2ZlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMubmV4dCgpO3JldHVybiBoZXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oaGUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChoZSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgaGU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gaGU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihoZSl7cmV0dXJuIGhlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoaGV8fDApLGhlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbaGVdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oaGUpe3RoaXMuYmVnaW4oaGUpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oaGUsZ2UsbmUsdmUpe3ZhciBVPXZlO3N3aXRjaChuZSl7Y2FzZSAwOnJldHVybiA2MDtjYXNlIDE6cmV0dXJuIDYxO2Nhc2UgMjpyZXR1cm4gNjI7Y2FzZSAzOnJldHVybiA2MztjYXNlIDQ6YnJlYWs7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzM7YnJlYWs7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA4O2Nhc2UgMTQ6YnJlYWs7Y2FzZSAxNTpyZXR1cm4gNztjYXNlIDE2OnJldHVybiA3O2Nhc2UgMTc6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMTg6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDIxOnJldHVybiA3NztjYXNlIDIyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIzOnJldHVybiA3ODtjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gODA7Y2FzZSAyODpyZXR1cm4gNTU7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlIiksNDI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7YnJlYWs7Y2FzZSAzMTpicmVhaztjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UtYm9keSIpLDM5O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDM0OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDM1OnJldHVybiA4O2Nhc2UgMzY6YnJlYWs7Y2FzZSAzNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MiKSw0NjticmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODticmVhaztjYXNlIDQwOmJyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MtYm9keSIpLDM5O2JyZWFrO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDQ0OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDQ1OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDQ2OnJldHVybiJPUEVOX0lOX1NUUlVDVCI7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OnJldHVybiJNRU1CRVIiO2Nhc2UgNDk6cmV0dXJuIDgxO2Nhc2UgNTA6cmV0dXJuIDczO2Nhc2UgNTE6cmV0dXJuIDc0O2Nhc2UgNTI6cmV0dXJuIDc2O2Nhc2UgNTM6cmV0dXJuIDUyO2Nhc2UgNTQ6cmV0dXJuIDU0O2Nhc2UgNTU6cmV0dXJuIDQ3O2Nhc2UgNTY6cmV0dXJuIDQ4O2Nhc2UgNTc6cmV0dXJuIDc5O2Nhc2UgNTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTk6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDYwOnRoaXMuYmVnaW4oImdlbmVyaWMiKTticmVhaztjYXNlIDYxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDYyOnJldHVybiJCUVVPVEVfU1RSIjtjYXNlIDYzOnRoaXMuYmVnaW4oImJxc3RyaW5nIik7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gNzU7Y2FzZSA2NTpyZXR1cm4gNzU7Y2FzZSA2NjpyZXR1cm4gNzU7Y2FzZSA2NzpyZXR1cm4gNzU7Y2FzZSA2ODpyZXR1cm4gNjc7Y2FzZSA2OTpyZXR1cm4gNjc7Y2FzZSA3MDpyZXR1cm4gNjk7Y2FzZSA3MTpyZXR1cm4gNjk7Y2FzZSA3MjpyZXR1cm4gNjg7Y2FzZSA3MzpyZXR1cm4gNjY7Y2FzZSA3NDpyZXR1cm4gNzA7Y2FzZSA3NTpyZXR1cm4gNzE7Y2FzZSA3NjpyZXR1cm4gNzI7Y2FzZSA3NzpyZXR1cm4gMjI7Y2FzZSA3ODpyZXR1cm4gNDQ7Y2FzZSA3OTpyZXR1cm4gOTk7Y2FzZSA4MDpyZXR1cm4gMTc7Y2FzZSA4MTpyZXR1cm4iUExVUyI7Y2FzZSA4MjpyZXR1cm4gODU7Y2FzZSA4MzpyZXR1cm4gNTk7Y2FzZSA4NDpyZXR1cm4gODg7Y2FzZSA4NTpyZXR1cm4gODg7Y2FzZSA4NjpyZXR1cm4gODk7Y2FzZSA4NzpyZXR1cm4iRVFVQUxTIjtjYXNlIDg4OnJldHVybiJFUVVBTFMiO2Nhc2UgODk6cmV0dXJuIDU4O2Nhc2UgOTA6cmV0dXJuIDEyO2Nhc2UgOTE6cmV0dXJuIDE0O2Nhc2UgOTI6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDkzOnJldHVybiA4NDtjYXNlIDk0OnJldHVybiAxMDE7Y2FzZSA5NTpyZXR1cm4gODc7Y2FzZSA5NjpyZXR1cm4gODc7Y2FzZSA5NzpyZXR1cm4gOX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpjbGFzc0RpYWdyYW0tdjJcYikvLC9eKD86Y2xhc3NEaWFncmFtXGIpLywvXig/OlxbXCpcXSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/Om5hbWVzcGFjZVxiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86XFtcKlxdKS8sL14oPzpjbGFzc1xiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbfV0pLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpcW1wqXF0pLywvXig/Olt7XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86bm90ZSBmb3JcYikvLC9eKD86bm90ZVxiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/OmhyZWZcYikvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86fikvLC9eKD86W2BdKS8sL14oPzpbXmBdKykvLC9eKD86W2BdKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzpccypcKFwpKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OjopLywvXig/OiwpLywvXig/OiMpLywvXig/OiMpLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86XFspLywvXig/OlxdKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6eyJuYW1lc3BhY2UtYm9keSI6e3J1bGVzOlsyNiwzMywzNCwzNSwzNiwzNywzOCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxuYW1lc3BhY2U6e3J1bGVzOlsyNiwyOSwzMCwzMSwzMiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSwiY2xhc3MtYm9keSI6e3J1bGVzOlsyNiw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxjbGFzczp7cnVsZXM6WzI2LDM5LDQwLDQxLDQyLDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMiwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzcsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzIyLDIzLDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOlsxOSwyMCwyMSwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjQsMjUsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsOCwxMCwxMywxNCwxNSwxNiwxNywxOCwyNiwyNywyOCwyOSwzOCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5N10saW5jbHVzaXZlOiEwfX19O3JldHVybiBYfSgpO0llLmxleGVyPSRlO2Z1bmN0aW9uIHllKCl7dGhpcy55eT17fX1yZXR1cm4gbyh5ZSwiUGFyc2VyIikseWUucHJvdG90eXBlPUllLEllLlBhcnNlcj15ZSxuZXcgeWV9KCk7Uk8ucGFyc2VyPVJPO09FPVJPfSk7dmFyIHBkZSxCeCxtZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7cGRlPVsiIyIsIisiLCJ+IiwiLSIsIiJdLEJ4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkNsYXNzTWVtYmVyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1lbWJlclR5cGU9cix0aGlzLnZpc2liaWxpdHk9IiIsdGhpcy5jbGFzc2lmaWVyPSIiLHRoaXMudGV4dD0iIjtsZXQgbj1rcihlLHBlKCkpO3RoaXMucGFyc2VNZW1iZXIobil9Z2V0RGlzcGxheURldGFpbHMoKXtsZXQgZT10aGlzLnZpc2liaWxpdHkreXUodGhpcy5pZCk7dGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCImJihlKz1gKCR7eXUodGhpcy5wYXJhbWV0ZXJzLnRyaW0oKSl9KWAsdGhpcy5yZXR1cm5UeXBlJiYoZSs9IiA6ICIreXUodGhpcy5yZXR1cm5UeXBlKSkpLGU9ZS50cmltKCk7bGV0IHI9dGhpcy5wYXJzZUNsYXNzaWZpZXIoKTtyZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZTpyfX1wYXJzZU1lbWJlcihlKXtsZXQgcj0iIjtpZih0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIil7bGV0IGE9LyhbIyt+LV0pPyguKylcKCguKilcKShbXHMkKl0pPyguKikoWyQqXSk/Ly5leGVjKGUpO2lmKGEpe2xldCBzPWFbMV0/YVsxXS50cmltKCk6IiI7aWYocGRlLmluY2x1ZGVzKHMpJiYodGhpcy52aXNpYmlsaXR5PXMpLHRoaXMuaWQ9YVsyXSx0aGlzLnBhcmFtZXRlcnM9YVszXT9hWzNdLnRyaW0oKToiIixyPWFbNF0/YVs0XS50cmltKCk6IiIsdGhpcy5yZXR1cm5UeXBlPWFbNV0/YVs1XS50cmltKCk6IiIscj09PSIiKXtsZXQgbD10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSk7L1skKl0vLmV4ZWMobCkmJihyPWwsdGhpcy5yZXR1cm5UeXBlPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcoMCx0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpKX19fWVsc2V7bGV0IGk9ZS5sZW5ndGgsYT1lLnN1YnN0cmluZygwLDEpLHM9ZS5zdWJzdHJpbmcoaS0xKTtwZGUuaW5jbHVkZXMoYSkmJih0aGlzLnZpc2liaWxpdHk9YSksL1skKl0vLmV4ZWMocykmJihyPXMpLHRoaXMuaWQ9ZS5zdWJzdHJpbmcodGhpcy52aXNpYmlsaXR5PT09IiI/MDoxLHI9PT0iIj9pOmktMSl9dGhpcy5jbGFzc2lmaWVyPXIsdGhpcy5pZD10aGlzLmlkLnN0YXJ0c1dpdGgoIiAiKT8iICIrdGhpcy5pZC50cmltKCk6dGhpcy5pZC50cmltKCk7bGV0IG49YCR7dGhpcy52aXNpYmlsaXR5PyJcXCIrdGhpcy52aXNpYmlsaXR5OiIifSR7eXUodGhpcy5pZCl9JHt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIj9gKCR7eXUodGhpcy5wYXJhbWV0ZXJzKX0pJHt0aGlzLnJldHVyblR5cGU/IiA6ICIreXUodGhpcy5yZXR1cm5UeXBlKToiIn1gOiIifWA7dGhpcy50ZXh0PW4ucmVwbGFjZUFsbCgiPCIsIiZsdDsiKS5yZXBsYWNlQWxsKCI+IiwiJmd0OyIpLHRoaXMudGV4dC5zdGFydHNXaXRoKCJcXCZsdDsiKSYmKHRoaXMudGV4dD10aGlzLnRleHQucmVwbGFjZSgiXFwmbHQ7IiwifiIpKX1wYXJzZUNsYXNzaWZpZXIoKXtzd2l0Y2godGhpcy5jbGFzc2lmaWVyKXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX19fSk7ZnVuY3Rpb24geGRlKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDA6ZT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTplPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjplPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmU9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDplPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDplPSJub25lIn1yZXR1cm4gZX12YXIgUEUsQkUsTm4sZ2RlLEZ4LEpnLHlkZSxxbCxJTyx6eCxQMCxCMCxBSGUsWmcsdmRlLGJkZSxfSGUsTEhlLERIZSxOSGUsUkhlLE1IZSxJSGUsd2RlLE9IZSxQSGUsQkhlLE9PLEZIZSx6SGUsR0hlLCRIZSxWSGUsVUhlLEhIZSxXSGUsRWYsVGRlLFBPLGtkZSxZSGUscUhlLFhIZSxqSGUsS0hlLFFIZSxaSGUsZTEsQk89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3V0KCk7VnQoKTtmcigpO2hyKCk7QWkoKTttZGUoKTtQRT0iY2xhc3NJZC0iLEJFPVtdLE5uPW5ldyBNYXAsZ2RlPW5ldyBNYXAsRng9W10sSmc9W10seWRlPTAscWw9bmV3IE1hcCxJTz0wLHp4PVtdLFAwPW8odD0+cWUuc2FuaXRpemVUZXh0KHQscGUoKSksInNhbml0aXplVGV4dCIpLEIwPW8oZnVuY3Rpb24odCl7bGV0IGU9cWUuc2FuaXRpemVUZXh0KHQscGUoKSkscj0iIixuPWU7aWYoZS5pbmRleE9mKCJ+Iik+MCl7bGV0IGk9ZS5zcGxpdCgifiIpO249UDAoaVswXSkscj1QMChpWzFdKX1yZXR1cm57Y2xhc3NOYW1lOm4sdHlwZTpyfX0sInNwbGl0Q2xhc3NOYW1lQW5kVHlwZSIpLEFIZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9cWUuc2FuaXRpemVUZXh0KHQscGUoKSk7ZSYmKGU9UDAoZSkpO2xldHtjbGFzc05hbWU6bn09QjAocik7Tm4uZ2V0KG4pLmxhYmVsPWUsTm4uZ2V0KG4pLnRleHQ9YCR7ZX0ke05uLmdldChuKS50eXBlP2A8JHtObi5nZXQobikudHlwZX0+YDoiIn1gfSwic2V0Q2xhc3NMYWJlbCIpLFpnPW8oZnVuY3Rpb24odCl7bGV0IGU9cWUuc2FuaXRpemVUZXh0KHQscGUoKSkse2NsYXNzTmFtZTpyLHR5cGU6bn09QjAoZSk7aWYoTm4uaGFzKHIpKXJldHVybjtsZXQgaT1xZS5zYW5pdGl6ZVRleHQocixwZSgpKTtObi5zZXQoaSx7aWQ6aSx0eXBlOm4sbGFiZWw6aSx0ZXh0OmAke2l9JHtuP2AmbHQ7JHtufSZndDtgOiIifWAsc2hhcGU6ImNsYXNzQm94Iixjc3NDbGFzc2VzOiJkZWZhdWx0IixtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sc3R5bGVzOltdLGRvbUlkOlBFK2krIi0iK3lkZX0pLHlkZSsrfSwiYWRkQ2xhc3MiKSx2ZGU9byhmdW5jdGlvbih0LGUpe2xldCByPXtpZDpgaW50ZXJmYWNlJHtKZy5sZW5ndGh9YCxsYWJlbDp0LGNsYXNzSWQ6ZX07SmcucHVzaChyKX0sImFkZEludGVyZmFjZSIpLGJkZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXFlLnNhbml0aXplVGV4dCh0LHBlKCkpO2lmKE5uLmhhcyhlKSlyZXR1cm4gTm4uZ2V0KGUpLmRvbUlkO3Rocm93IG5ldyBFcnJvcigiQ2xhc3Mgbm90IGZvdW5kOiAiK2UpfSwibG9va1VwRG9tSWQiKSxfSGU9byhmdW5jdGlvbigpe0JFPVtdLE5uPW5ldyBNYXAsRng9W10sSmc9W10seng9W10sengucHVzaChUZGUpLHFsPW5ldyBNYXAsSU89MCxQTz0iVEIiLExyKCl9LCJjbGVhciIpLExIZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBObi5nZXQodCl9LCJnZXRDbGFzcyIpLERIZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIE5ufSwiZ2V0Q2xhc3NlcyIpLE5IZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEJFfSwiZ2V0UmVsYXRpb25zIiksUkhlPW8oZnVuY3Rpb24oKXtyZXR1cm4gRnh9LCJnZXROb3RlcyIpLE1IZT1vKGZ1bmN0aW9uKHQpe1kuZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeSh0KSk7bGV0IGU9W0VmLkxPTExJUE9QLEVmLkFHR1JFR0FUSU9OLEVmLkNPTVBPU0lUSU9OLEVmLkRFUEVOREVOQ1ksRWYuRVhURU5TSU9OXTt0LnJlbGF0aW9uLnR5cGUxPT09RWYuTE9MTElQT1AmJiFlLmluY2x1ZGVzKHQucmVsYXRpb24udHlwZTIpPyhaZyh0LmlkMiksdmRlKHQuaWQxLHQuaWQyKSx0LmlkMT1gaW50ZXJmYWNlJHtKZy5sZW5ndGgtMX1gKTp0LnJlbGF0aW9uLnR5cGUyPT09RWYuTE9MTElQT1AmJiFlLmluY2x1ZGVzKHQucmVsYXRpb24udHlwZTEpPyhaZyh0LmlkMSksdmRlKHQuaWQyLHQuaWQxKSx0LmlkMj1gaW50ZXJmYWNlJHtKZy5sZW5ndGgtMX1gKTooWmcodC5pZDEpLFpnKHQuaWQyKSksdC5pZDE9QjAodC5pZDEpLmNsYXNzTmFtZSx0LmlkMj1CMCh0LmlkMikuY2xhc3NOYW1lLHQucmVsYXRpb25UaXRsZTE9cWUuc2FuaXRpemVUZXh0KHQucmVsYXRpb25UaXRsZTEudHJpbSgpLHBlKCkpLHQucmVsYXRpb25UaXRsZTI9cWUuc2FuaXRpemVUZXh0KHQucmVsYXRpb25UaXRsZTIudHJpbSgpLHBlKCkpLEJFLnB1c2godCl9LCJhZGRSZWxhdGlvbiIpLElIZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9QjAodCkuY2xhc3NOYW1lO05uLmdldChyKS5hbm5vdGF0aW9ucy5wdXNoKGUpfSwiYWRkQW5ub3RhdGlvbiIpLHdkZT1vKGZ1bmN0aW9uKHQsZSl7WmcodCk7bGV0IHI9QjAodCkuY2xhc3NOYW1lLG49Tm4uZ2V0KHIpO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7bGV0IGk9ZS50cmltKCk7aS5zdGFydHNXaXRoKCI8PCIpJiZpLmVuZHNXaXRoKCI+PiIpP24uYW5ub3RhdGlvbnMucHVzaChQMChpLnN1YnN0cmluZygyLGkubGVuZ3RoLTIpKSk6aS5pbmRleE9mKCIpIik+MD9uLm1ldGhvZHMucHVzaChuZXcgQngoaSwibWV0aG9kIikpOmkmJm4ubWVtYmVycy5wdXNoKG5ldyBCeChpLCJhdHRyaWJ1dGUiKSl9fSwiYWRkTWVtYmVyIiksT0hlPW8oZnVuY3Rpb24odCxlKXtBcnJheS5pc0FycmF5KGUpJiYoZS5yZXZlcnNlKCksZS5mb3JFYWNoKHI9PndkZSh0LHIpKSl9LCJhZGRNZW1iZXJzIiksUEhlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj17aWQ6YG5vdGUke0Z4Lmxlbmd0aH1gLGNsYXNzOmUsdGV4dDp0fTtGeC5wdXNoKHIpfSwiYWRkTm90ZSIpLEJIZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoIjoiKSYmKHQ9dC5zdWJzdHJpbmcoMSkpLFAwKHQudHJpbSgpKX0sImNsZWFudXBMYWJlbCIpLE9PPW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1yOy9cZC8uZXhlYyhyWzBdKSYmKG49UEUrbik7bGV0IGk9Tm4uZ2V0KG4pO2kmJihpLmNzc0NsYXNzZXMrPSIgIitlKX0pfSwic2V0Q3NzQ2xhc3MiKSxGSGU9byhmdW5jdGlvbih0LGUpe2ZvcihsZXQgciBvZiB0KXtsZXQgbj1nZGUuZ2V0KHIpO249PT12b2lkIDAmJihuPXtpZDpyLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSxnZGUuc2V0KHIsbikpLGUmJmUuZm9yRWFjaChmdW5jdGlvbihpKXtpZigvY29sb3IvLmV4ZWMoaSkpe2xldCBhPWkucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpO24udGV4dFN0eWxlcy5wdXNoKGEpfW4uc3R5bGVzLnB1c2goaSl9KSxObi5mb3JFYWNoKGk9PntpLmNzc0NsYXNzZXMuaW5jbHVkZXMocikmJmkuc3R5bGVzLnB1c2goLi4uZS5mbGF0TWFwKGE9PmEuc3BsaXQoIiwiKSkpfSl9fSwiZGVmaW5lQ2xhc3MiKSx6SGU9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2UhPT12b2lkIDAmJihObi5nZXQocikudG9vbHRpcD1QMChlKSl9KX0sInNldFRvb2x0aXAiKSxHSGU9byhmdW5jdGlvbih0LGUpe3JldHVybiBlJiZxbC5oYXMoZSk/cWwuZ2V0KGUpLmNsYXNzZXMuZ2V0KHQpLnRvb2x0aXA6Tm4uZ2V0KHQpLnRvb2x0aXB9LCJnZXRUb29sdGlwIiksJEhlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXBlKCk7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oaSl7bGV0IGE9aTsvXGQvLmV4ZWMoaVswXSkmJihhPVBFK2EpO2xldCBzPU5uLmdldChhKTtzJiYocy5saW5rPVV0LmZvcm1hdFVybChlLG4pLG4uc2VjdXJpdHlMZXZlbD09PSJzYW5kYm94Ij9zLmxpbmtUYXJnZXQ9Il90b3AiOnR5cGVvZiByPT0ic3RyaW5nIj9zLmxpbmtUYXJnZXQ9UDAocik6cy5saW5rVGFyZ2V0PSJfYmxhbmsiKX0pLE9PKHQsImNsaWNrYWJsZSIpfSwic2V0TGluayIpLFZIZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtVSGUobixlLHIpLE5uLmdldChuKS5oYXZlQ2FsbGJhY2s9ITB9KSxPTyh0LCJjbGlja2FibGUiKX0sInNldENsaWNrRXZlbnQiKSxVSGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49cWUuc2FuaXRpemVUZXh0KHQscGUoKSk7aWYocGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8ZT09PXZvaWQgMClyZXR1cm47bGV0IGE9bjtpZihObi5oYXMoYSkpe2xldCBzPWJkZShhKSxsPVtdO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7bD1yLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sW3VdLnRyaW0oKTtoLnN0YXJ0c1dpdGgoJyInKSYmaC5lbmRzV2l0aCgnIicpJiYoaD1oLnN1YnN0cigxLGgubGVuZ3RoLTIpKSxsW3VdPWh9fWwubGVuZ3RoPT09MCYmbC5wdXNoKHMpLHp4LnB1c2goZnVuY3Rpb24oKXtsZXQgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7c30iXWApO3UhPT1udWxsJiZ1LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe1V0LnJ1bkZ1bmMoZSwuLi5sKX0sITEpfSl9fSwic2V0Q2xpY2tGdW5jIiksSEhlPW8oZnVuY3Rpb24odCl7enguZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LCJiaW5kRnVuY3Rpb25zIiksV0hlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sRWY9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sVGRlPW8oZnVuY3Rpb24odCl7bGV0IGU9VmUoIi5tZXJtYWlkVG9vbHRpcCIpOyhlLl9ncm91cHN8fGUpWzBdWzBdPT09bnVsbCYmKGU9VmUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLFZlKHQpLnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCJnLm5vZGUiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2xldCBpPVZlKHRoaXMpO2lmKGkuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCBzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS50ZXh0KGkuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK3MubGVmdCsocy5yaWdodC1zLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrcy50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksZS5odG1sKGUuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxpLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksVmUodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfSwic2V0dXBUb29sVGlwcyIpO3p4LnB1c2goVGRlKTtQTz0iVEIiLGtkZT1vKCgpPT5QTywiZ2V0RGlyZWN0aW9uIiksWUhlPW8odD0+e1BPPXR9LCJzZXREaXJlY3Rpb24iKSxxSGU9byhmdW5jdGlvbih0KXtxbC5oYXModCl8fChxbC5zZXQodCx7aWQ6dCxjbGFzc2VzOm5ldyBNYXAsY2hpbGRyZW46e30sZG9tSWQ6UEUrdCsiLSIrSU99KSxJTysrKX0sImFkZE5hbWVzcGFjZSIpLFhIZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBxbC5nZXQodCl9LCJnZXROYW1lc3BhY2UiKSxqSGU9byhmdW5jdGlvbigpe3JldHVybiBxbH0sImdldE5hbWVzcGFjZXMiKSxLSGU9byhmdW5jdGlvbih0LGUpe2lmKHFsLmhhcyh0KSlmb3IobGV0IHIgb2YgZSl7bGV0e2NsYXNzTmFtZTpufT1CMChyKTtObi5nZXQobikucGFyZW50PXQscWwuZ2V0KHQpLmNsYXNzZXMuc2V0KG4sTm4uZ2V0KG4pKX19LCJhZGRDbGFzc2VzVG9OYW1lc3BhY2UiKSxRSGU9byhmdW5jdGlvbih0LGUpe2xldCByPU5uLmdldCh0KTtpZighKCFlfHwhcikpZm9yKGxldCBuIG9mIGUpbi5pbmNsdWRlcygiLCIpP3Iuc3R5bGVzLnB1c2goLi4ubi5zcGxpdCgiLCIpKTpyLnN0eWxlcy5wdXNoKG4pfSwic2V0Q3NzU3R5bGUiKTtvKHhkZSwiZ2V0QXJyb3dNYXJrZXIiKTtaSGU9bygoKT0+e2xldCB0PVtdLGU9W10scj1wZSgpO2ZvcihsZXQgaSBvZiBxbC5rZXlzKCkpe2xldCBhPXFsLmdldChpKTtpZihhKXtsZXQgcz17aWQ6YS5pZCxsYWJlbDphLmlkLGlzR3JvdXA6ITAscGFkZGluZzpyLmNsYXNzLnBhZGRpbmc/PzE2LHNoYXBlOiJyZWN0Iixjc3NTdHlsZXM6WyJmaWxsOiBub25lIiwic3Ryb2tlOiBibGFjayJdLGxvb2s6ci5sb29rfTt0LnB1c2gocyl9fWZvcihsZXQgaSBvZiBObi5rZXlzKCkpe2xldCBhPU5uLmdldChpKTtpZihhKXtsZXQgcz1hO3MucGFyZW50SWQ9YS5wYXJlbnQscy5sb29rPXIubG9vayx0LnB1c2gocyl9fWxldCBuPTA7Zm9yKGxldCBpIG9mIEZ4KXtuKys7bGV0IGE9e2lkOmkuaWQsbGFiZWw6aS50ZXh0LGlzR3JvdXA6ITEsc2hhcGU6Im5vdGUiLHBhZGRpbmc6ci5jbGFzcy5wYWRkaW5nPz82LGNzc1N0eWxlczpbInRleHQtYWxpZ246IGxlZnQiLCJ3aGl0ZS1zcGFjZTogbm93cmFwIixgZmlsbDogJHtyLnRoZW1lVmFyaWFibGVzLm5vdGVCa2dDb2xvcn1gLGBzdHJva2U6ICR7ci50aGVtZVZhcmlhYmxlcy5ub3RlQm9yZGVyQ29sb3J9YF0sbG9vazpyLmxvb2t9O3QucHVzaChhKTtsZXQgcz1Obi5nZXQoaS5jbGFzcyk/LmlkPz8iIjtpZihzKXtsZXQgbD17aWQ6YGVkZ2VOb3RlJHtufWAsc3RhcnQ6aS5pZCxlbmQ6cyx0eXBlOiJub3JtYWwiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJyZWxhdGlvbiIsYXJyb3dUeXBlU3RhcnQ6Im5vbmUiLGFycm93VHlwZUVuZDoibm9uZSIsYXJyb3doZWFkU3R5bGU6IiIsbGFiZWxTdHlsZTpbIiJdLHN0eWxlOlsiZmlsbDogbm9uZSJdLHBhdHRlcm46ImRvdHRlZCIsbG9vazpyLmxvb2t9O2UucHVzaChsKX19Zm9yKGxldCBpIG9mIEpnKXtsZXQgYT17aWQ6aS5pZCxsYWJlbDppLmxhYmVsLGlzR3JvdXA6ITEsc2hhcGU6InJlY3QiLGNzc1N0eWxlczpbIm9wYWNpdHk6IDA7Il0sbG9vazpyLmxvb2t9O3QucHVzaChhKX1uPTA7Zm9yKGxldCBpIG9mIEJFKXtuKys7bGV0IGE9e2lkOkM1KGkuaWQxLGkuaWQyLHtwcmVmaXg6ImlkIixjb3VudGVyOm59KSxzdGFydDppLmlkMSxlbmQ6aS5pZDIsdHlwZToibm9ybWFsIixsYWJlbDppLnRpdGxlLGxhYmVscG9zOiJjIix0aGlja25lc3M6Im5vcm1hbCIsY2xhc3NlczoicmVsYXRpb24iLGFycm93VHlwZVN0YXJ0OnhkZShpLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6eGRlKGkucmVsYXRpb24udHlwZTIpLHN0YXJ0TGFiZWxSaWdodDppLnJlbGF0aW9uVGl0bGUxPT09Im5vbmUiPyIiOmkucmVsYXRpb25UaXRsZTEsZW5kTGFiZWxMZWZ0OmkucmVsYXRpb25UaXRsZTI9PT0ibm9uZSI/IiI6aS5yZWxhdGlvblRpdGxlMixhcnJvd2hlYWRTdHlsZToiIixsYWJlbFN0eWxlOlsiZGlzcGxheTogaW5saW5lLWJsb2NrIl0sc3R5bGU6aS5zdHlsZXx8IiIscGF0dGVybjppLnJlbGF0aW9uLmxpbmVUeXBlPT0xPyJkYXNoZWQiOiJzb2xpZCIsbG9vazpyLmxvb2t9O2UucHVzaChhKX1yZXR1cm57bm9kZXM6dCxlZGdlczplLG90aGVyOnt9LGNvbmZpZzpyLGRpcmVjdGlvbjprZGUoKX19LCJnZXREYXRhIiksZTE9e3NldEFjY1RpdGxlOk1yLGdldEFjY1RpdGxlOkJyLGdldEFjY0Rlc2NyaXB0aW9uOnpyLHNldEFjY0Rlc2NyaXB0aW9uOkZyLGdldENvbmZpZzpvKCgpPT5wZSgpLmNsYXNzLCJnZXRDb25maWciKSxhZGRDbGFzczpaZyxiaW5kRnVuY3Rpb25zOkhIZSxjbGVhcjpfSGUsZ2V0Q2xhc3M6TEhlLGdldENsYXNzZXM6REhlLGdldE5vdGVzOlJIZSxhZGRBbm5vdGF0aW9uOklIZSxhZGROb3RlOlBIZSxnZXRSZWxhdGlvbnM6TkhlLGFkZFJlbGF0aW9uOk1IZSxnZXREaXJlY3Rpb246a2RlLHNldERpcmVjdGlvbjpZSGUsYWRkTWVtYmVyOndkZSxhZGRNZW1iZXJzOk9IZSxjbGVhbnVwTGFiZWw6QkhlLGxpbmVUeXBlOldIZSxyZWxhdGlvblR5cGU6RWYsc2V0Q2xpY2tFdmVudDpWSGUsc2V0Q3NzQ2xhc3M6T08sZGVmaW5lQ2xhc3M6RkhlLHNldExpbms6JEhlLGdldFRvb2x0aXA6R0hlLHNldFRvb2x0aXA6ekhlLGxvb2tVcERvbUlkOmJkZSxzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldENsYXNzTGFiZWw6QUhlLGFkZE5hbWVzcGFjZTpxSGUsYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlOktIZSxnZXROYW1lc3BhY2U6WEhlLGdldE5hbWVzcGFjZXM6akhlLHNldENzc1N0eWxlOlFIZSxnZXREYXRhOlpIZX19KTt2YXIgSkhlLEZFLEZPPU0oKCk9PnsidXNlIHN0cmljdCI7SkhlPW8odD0+YGcuY2xhc3NHcm91cCB0ZXh0IHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcnx8dC5jbGFzc1RleHR9OwogIHN0cm9rZTogbm9uZTsKICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIGZvbnQtc2l6ZTogMTBweDsKCiAgLnRpdGxlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgfQoKfQoKLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7dC5jbGFzc1RleHR9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7dC5tYWluQmtnfTsKfQoubGFiZWwgdGV4dCB7CiAgZmlsbDogJHt0LmNsYXNzVGV4dH07Cn0KCi5sYWJlbEJrZyB7CiAgYmFja2dyb3VuZDogJHt0Lm1haW5Ca2d9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHNwYW4gewogIGJhY2tncm91bmQ6ICR7dC5tYWluQmtnfTsKfQoKLmNsYXNzVGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7Cn0KLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgoKLmRpdmlkZXIgewogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKZy5jbGlja2FibGUgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKZy5jbGFzc0dyb3VwIHJlY3QgewogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKfQoKZy5jbGFzc0dyb3VwIGxpbmUgewogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLmNsYXNzTGFiZWwgLmJveCB7CiAgc3Ryb2tlOiBub25lOwogIHN0cm9rZS13aWR0aDogMDsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgb3BhY2l0eTogMC41Owp9CgouY2xhc3NMYWJlbCAubGFiZWwgewogIGZpbGw6ICR7dC5ub2RlQm9yZGVyfTsKICBmb250LXNpemU6IDEwcHg7Cn0KCi5yZWxhdGlvbiB7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLmRhc2hlZC1saW5lewogIHN0cm9rZS1kYXNoYXJyYXk6IDM7Cn0KCi5kb3R0ZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAxIDI7Cn0KCiNjb21wb3NpdGlvblN0YXJ0LCAuY29tcG9zaXRpb24gewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2NvbXBvc2l0aW9uRW5kLCAuY29tcG9zaXRpb24gewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgLmRlcGVuZGVuY3kgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgLmRlcGVuZGVuY3kgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2V4dGVuc2lvblN0YXJ0LCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25FbmQsIC5leHRlbnNpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uU3RhcnQsIC5hZ2dyZWdhdGlvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojYWdncmVnYXRpb25FbmQsIC5hZ2dyZWdhdGlvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojbG9sbGlwb3BTdGFydCwgLmxvbGxpcG9wIHsKICBmaWxsOiAke3QubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojbG9sbGlwb3BFbmQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLmVkZ2VUZXJtaW5hbHMgewogIGZvbnQtc2l6ZTogMTFweDsKICBsaW5lLWhlaWdodDogaW5pdGlhbDsKfQoKLmNsYXNzVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke3QudGV4dENvbG9yfTsKfQpgLCJnZXRTdHlsZXMiKSxGRT1KSGV9KTt2YXIgZVdlLHRXZSxyV2UsekUsek89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7b3coKTtKdigpO1RUKCk7aHIoKTtlV2U9bygodCxlPSJUQiIpPT57aWYoIXQuZG9jKXJldHVybiBlO2xldCByPWU7Zm9yKGxldCBuIG9mIHQuZG9jKW4uc3RtdD09PSJkaXIiJiYocj1uLnZhbHVlKTtyZXR1cm4gcn0sImdldERpciIpLHRXZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLHJXZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe1kuaW5mbygiUkVGMDoiKSxZLmluZm8oIkRyYXdpbmcgY2xhc3MgZGlhZ3JhbSAodjMpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLHN0YXRlOmEsbGF5b3V0OnN9PXBlKCksbD1uLmRiLmdldERhdGEoKSx1PUFtKGUsaSk7bC50eXBlPW4udHlwZSxsLmxheW91dEFsZ29yaXRobT13VChzKSxsLm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHw1MCxsLnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw1MCxsLm1hcmtlcnM9WyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sbC5kaWFncmFtSWQ9ZSxhd2FpdCBRbShsLHUpO2xldCBoPTg7VXQuaW5zZXJ0VGl0bGUodSwiY2xhc3NEaWFncmFtVGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbj8/MjUsbi5kYi5nZXREaWFncmFtVGl0bGUoKSksWm0odSxoLCJjbGFzc0RpYWdyYW0iLGE/LnVzZU1heFdpZHRoPz8hMCl9LCJkcmF3IiksekU9e2dldENsYXNzZXM6dFdlLGRyYXc6cldlLGdldERpcjplV2V9fSk7dmFyIEVkZT17fTt2cihFZGUse2RpYWdyYW06KCk9Pm5XZX0pO3ZhciBuV2UsU2RlPU0oKCk9PnsidXNlIHN0cmljdCI7TU8oKTtCTygpO0ZPKCk7ek8oKTtuV2U9e3BhcnNlcjpPRSxkYjplMSxyZW5kZXJlcjp6RSxzdHlsZXM6RkUsaW5pdDpvKHQ9Pnt0LmNsYXNzfHwodC5jbGFzcz17fSksdC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxlMS5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciBfZGU9e307dnIoX2RlLHtkaWFncmFtOigpPT5vV2V9KTt2YXIgb1dlLExkZT1NKCgpPT57InVzZSBzdHJpY3QiO01PKCk7Qk8oKTtGTygpO3pPKCk7b1dlPXtwYXJzZXI6T0UsZGI6ZTEscmVuZGVyZXI6ekUsc3R5bGVzOkZFLGluaXQ6byh0PT57dC5jbGFzc3x8KHQuY2xhc3M9e30pLHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsZTEuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgR08sR0UsJE89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oRixCLEcseil7Zm9yKEc9R3x8e30sej1GLmxlbmd0aDt6LS07R1tGW3pdXT1CKTtyZXR1cm4gR30sIm8iKSxlPVsxLDJdLHI9WzEsM10sbj1bMSw0XSxpPVsyLDRdLGE9WzEsOV0scz1bMSwxMV0sbD1bMSwxNl0sdT1bMSwxN10saD1bMSwxOF0sZj1bMSwxOV0sZD1bMSwzMl0scD1bMSwyMF0sbT1bMSwyMV0sZz1bMSwyMl0seT1bMSwyM10sdj1bMSwyNF0seD1bMSwyNl0sYj1bMSwyN10sdz1bMSwyOF0sXz1bMSwyOV0sVD1bMSwzMF0sRT1bMSwzMV0sTD1bMSwzNF0sUz1bMSwzNV0sQT1bMSwzNl0sST1bMSwzN10sRD1bMSwzM10saz1bMSw0LDUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLFI9WzEsNCw1LDE0LDE1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDQ1LDQ4LDQ5LDUwLDUxLDU0XSxDPVs0LDUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLE89e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LFNEOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksY2xhc3NEZWZTdGF0ZW1lbnQ6MTAsc3R5bGVTdGF0ZW1lbnQ6MTEsY3NzQ2xhc3NTdGF0ZW1lbnQ6MTIsaWRTdGF0ZW1lbnQ6MTMsREVTQ1I6MTQsIi0tPiI6MTUsSElERV9FTVBUWToxNixzY2FsZToxNyxXSURUSDoxOCxDT01QT1NJVF9TVEFURToxOSxTVFJVQ1RfU1RBUlQ6MjAsU1RSVUNUX1NUT1A6MjEsU1RBVEVfREVTQ1I6MjIsQVM6MjMsSUQ6MjQsRk9SSzoyNSxKT0lOOjI2LENIT0lDRToyNyxDT05DVVJSRU5UOjI4LG5vdGU6Mjksbm90ZVBvc2l0aW9uOjMwLE5PVEVfVEVYVDozMSxkaXJlY3Rpb246MzIsYWNjX3RpdGxlOjMzLGFjY190aXRsZV92YWx1ZTozNCxhY2NfZGVzY3I6MzUsYWNjX2Rlc2NyX3ZhbHVlOjM2LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzcsY2xhc3NEZWY6MzgsQ0xBU1NERUZfSUQ6MzksQ0xBU1NERUZfU1RZTEVPUFRTOjQwLERFRkFVTFQ6NDEsc3R5bGU6NDIsU1RZTEVfSURTOjQzLFNUWUxFREVGX1NUWUxFT1BUUzo0NCxjbGFzczo0NSxDTEFTU0VOVElUWV9JRFM6NDYsU1RZTEVDTEFTUzo0NyxkaXJlY3Rpb25fdGI6NDgsZGlyZWN0aW9uX2J0OjQ5LGRpcmVjdGlvbl9ybDo1MCxkaXJlY3Rpb25fbHI6NTEsZW9sOjUyLCI7Ijo1MyxFREdFX1NUQVRFOjU0LFNUWUxFX1NFUEFSQVRPUjo1NSxsZWZ0X29mOjU2LHJpZ2h0X29mOjU3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkwiLDY6IlNEIiwxNDoiREVTQ1IiLDE1OiItLT4iLDE2OiJISURFX0VNUFRZIiwxNzoic2NhbGUiLDE4OiJXSURUSCIsMTk6IkNPTVBPU0lUX1NUQVRFIiwyMDoiU1RSVUNUX1NUQVJUIiwyMToiU1RSVUNUX1NUT1AiLDIyOiJTVEFURV9ERVNDUiIsMjM6IkFTIiwyNDoiSUQiLDI1OiJGT1JLIiwyNjoiSk9JTiIsMjc6IkNIT0lDRSIsMjg6IkNPTkNVUlJFTlQiLDI5OiJub3RlIiwzMToiTk9URV9URVhUIiwzMzoiYWNjX3RpdGxlIiwzNDoiYWNjX3RpdGxlX3ZhbHVlIiwzNToiYWNjX2Rlc2NyIiwzNjoiYWNjX2Rlc2NyX3ZhbHVlIiwzNzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzg6ImNsYXNzRGVmIiwzOToiQ0xBU1NERUZfSUQiLDQwOiJDTEFTU0RFRl9TVFlMRU9QVFMiLDQxOiJERUZBVUxUIiw0Mjoic3R5bGUiLDQzOiJTVFlMRV9JRFMiLDQ0OiJTVFlMRURFRl9TVFlMRU9QVFMiLDQ1OiJjbGFzcyIsNDY6IkNMQVNTRU5USVRZX0lEUyIsNDc6IlNUWUxFQ0xBU1MiLDQ4OiJkaXJlY3Rpb25fdGIiLDQ5OiJkaXJlY3Rpb25fYnQiLDUwOiJkaXJlY3Rpb25fcmwiLDUxOiJkaXJlY3Rpb25fbHIiLDUzOiI7Iiw1NDoiRURHRV9TVEFURSIsNTU6IlNUWUxFX1NFUEFSQVRPUiIsNTY6ImxlZnRfb2YiLDU3OiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMTIsM10sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFs1MiwxXSxbNTIsMV0sWzEzLDFdLFsxMywxXSxbMTMsM10sWzEzLDNdLFszMCwxXSxbMzAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihCLEcseixXLFosaixvZSl7dmFyIEs9ai5sZW5ndGgtMTtzd2l0Y2goWil7Y2FzZSAzOnJldHVybiBXLnNldFJvb3REb2MoaltLXSksaltLXTticmVhaztjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpqW0tdIT0ibmwiJiYoaltLLTFdLnB1c2goaltLXSksdGhpcy4kPWpbSy0xXSk7YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9altLXTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9altLXTticmVhaztjYXNlIDEzOmxldCBxPWpbSy0xXTtxLmRlc2NyaXB0aW9uPVcudHJpbUNvbG9uKGpbS10pLHRoaXMuJD1xO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOmpbSy0yXSxzdGF0ZTI6altLXX07YnJlYWs7Y2FzZSAxNTpsZXQgUT1XLnRyaW1Db2xvbihqW0tdKTt0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6altLLTNdLHN0YXRlMjpqW0stMV0sZGVzY3JpcHRpb246UX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW0stM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiIsZG9jOmpbSy0xXX07YnJlYWs7Y2FzZSAyMDp2YXIgZWU9altLXSxKPWpbSy0yXS50cmltKCk7aWYoaltLXS5tYXRjaCgiOiIpKXt2YXIgSD1qW0tdLnNwbGl0KCI6Iik7ZWU9SFswXSxKPVtKLEhbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmVlLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOkp9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6altLLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOmpbSy01XSxkb2M6altLLTFdfTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbS10sdHlwZToiZm9yayJ9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6altLXSx0eXBlOiJqb2luIn07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW0tdLHR5cGU6ImNob2ljZSJ9O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Vy5nZXREaXZpZGVySWQoKSx0eXBlOiJkaXZpZGVyIn07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW0stMV0udHJpbSgpLG5vdGU6e3Bvc2l0aW9uOmpbSy0yXS50cmltKCksdGV4dDpqW0tdLnRyaW0oKX19O2JyZWFrO2Nhc2UgMjk6dGhpcy4kPWpbS10udHJpbSgpLFcuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMwOmNhc2UgMzE6dGhpcy4kPWpbS10udHJpbSgpLFcuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPXtzdG10OiJjbGFzc0RlZiIsaWQ6altLLTFdLnRyaW0oKSxjbGFzc2VzOmpbS10udHJpbSgpfTticmVhaztjYXNlIDM0OnRoaXMuJD17c3RtdDoic3R5bGUiLGlkOmpbSy0xXS50cmltKCksc3R5bGVDbGFzczpqW0tdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9e3N0bXQ6ImFwcGx5Q2xhc3MiLGlkOmpbSy0xXS50cmltKCksc3R5bGVDbGFzczpqW0tdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNjpXLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzNzpXLnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzODpXLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzOTpXLnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbS10udHJpbSgpLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQ0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbSy0yXS50cmltKCksY2xhc3NlczpbaltLXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQ1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbSy0yXS50cmltKCksY2xhc3NlczpbaltLXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OmUsNTpyLDY6bn0sezE6WzNdfSx7Mzo1LDQ6ZSw1OnIsNjpufSx7Mzo2LDQ6ZSw1OnIsNjpufSx0KFsxLDQsNSwxNiwxNywxOSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMywzNSwzNywzOCw0Miw0NSw0OCw0OSw1MCw1MSw1NF0saSx7Nzo3fSksezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXSw0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OncsMzg6Xyw0MjpULDQ1OkUsNDg6TCw0OTpTLDUwOkEsNTE6SSw1NDpEfSx0KGssWzIsNV0pLHs5OjM4LDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OncsMzg6Xyw0MjpULDQ1OkUsNDg6TCw0OTpTLDUwOkEsNTE6SSw1NDpEfSx0KGssWzIsN10pLHQoayxbMiw4XSksdChrLFsyLDldKSx0KGssWzIsMTBdKSx0KGssWzIsMTFdKSx0KGssWzIsMTJdLHsxNDpbMSwzOV0sMTU6WzEsNDBdfSksdChrLFsyLDE2XSksezE4OlsxLDQxXX0sdChrLFsyLDE4XSx7MjA6WzEsNDJdfSksezIzOlsxLDQzXX0sdChrLFsyLDIyXSksdChrLFsyLDIzXSksdChrLFsyLDI0XSksdChrLFsyLDI1XSksezMwOjQ0LDMxOlsxLDQ1XSw1NjpbMSw0Nl0sNTc6WzEsNDddfSx0KGssWzIsMjhdKSx7MzQ6WzEsNDhdfSx7MzY6WzEsNDldfSx0KGssWzIsMzFdKSx7Mzk6WzEsNTBdLDQxOlsxLDUxXX0sezQzOlsxLDUyXX0sezQ2OlsxLDUzXX0sdChSLFsyLDQyXSx7NTU6WzEsNTRdfSksdChSLFsyLDQzXSx7NTU6WzEsNTVdfSksdChrLFsyLDM2XSksdChrLFsyLDM3XSksdChrLFsyLDM4XSksdChrLFsyLDM5XSksdChrLFsyLDZdKSx0KGssWzIsMTNdKSx7MTM6NTYsMjQ6ZCw1NDpEfSx0KGssWzIsMTddKSx0KEMsaSx7Nzo1N30pLHsyNDpbMSw1OF19LHsyNDpbMSw1OV19LHsyMzpbMSw2MF19LHsyNDpbMiw0Nl19LHsyNDpbMiw0N119LHQoayxbMiwyOV0pLHQoayxbMiwzMF0pLHs0MDpbMSw2MV19LHs0MDpbMSw2Ml19LHs0NDpbMSw2M119LHs0NzpbMSw2NF19LHsyNDpbMSw2NV19LHsyNDpbMSw2Nl19LHQoayxbMiwxNF0sezE0OlsxLDY3XX0pLHs0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIxOlsxLDY4XSwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzp3LDM4Ol8sNDI6VCw0NTpFLDQ4OkwsNDk6Uyw1MDpBLDUxOkksNTQ6RH0sdChrLFsyLDIwXSx7MjA6WzEsNjldfSksezMxOlsxLDcwXX0sezI0OlsxLDcxXX0sdChrLFsyLDMyXSksdChrLFsyLDMzXSksdChrLFsyLDM0XSksdChrLFsyLDM1XSksdChSLFsyLDQ0XSksdChSLFsyLDQ1XSksdChrLFsyLDE1XSksdChrLFsyLDE5XSksdChDLGksezc6NzJ9KSx0KGssWzIsMjZdKSx0KGssWzIsMjddKSx7NDphLDU6cyw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxMzoxNSwxNjpsLDE3OnUsMTk6aCwyMTpbMSw3M10sMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6dywzODpfLDQyOlQsNDU6RSw0ODpMLDQ5OlMsNTA6QSw1MTpJLDU0OkR9LHQoayxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDQ2OlsyLDQ2XSw0NzpbMiw0N119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihCLEcpe2lmKEcucmVjb3ZlcmFibGUpdGhpcy50cmFjZShCKTtlbHNle3ZhciB6PW5ldyBFcnJvcihCKTt0aHJvdyB6Lmhhc2g9Ryx6fX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKEIpe3ZhciBHPXRoaXMsej1bMF0sVz1bXSxaPVtudWxsXSxqPVtdLG9lPXRoaXMudGFibGUsSz0iIixlZT0wLEo9MCxIPTAscT0yLFE9MSxhZT1qLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHVlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksY2U9e3l5Ont9fTtmb3IodmFyIHRlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksdGUpJiYoY2UueXlbdGVdPXRoaXMueXlbdGVdKTt1ZS5zZXRJbnB1dChCLGNlLnl5KSxjZS55eS5sZXhlcj11ZSxjZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgdWUueXlsbG9jPiJ1IiYmKHVlLnl5bGxvYz17fSk7dmFyIE5lPXVlLnl5bGxvYztqLnB1c2goTmUpO3ZhciBzZT11ZS5vcHRpb25zJiZ1ZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgY2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Y2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24ga2UoVGUpe3oubGVuZ3RoPXoubGVuZ3RoLTIqVGUsWi5sZW5ndGg9Wi5sZW5ndGgtVGUsai5sZW5ndGg9ai5sZW5ndGgtVGV9byhrZSwicG9wU3RhY2siKTtmdW5jdGlvbiBSZSgpe3ZhciBUZTtyZXR1cm4gVGU9Vy5wb3AoKXx8dWUubGV4KCl8fFEsdHlwZW9mIFRlIT0ibnVtYmVyIiYmKFRlIGluc3RhbmNlb2YgQXJyYXkmJihXPVRlLFRlPVcucG9wKCkpLFRlPUcuc3ltYm9sc19bVGVdfHxUZSksVGV9byhSZSwibGV4Iik7Zm9yKHZhciBDZSxQZSxJZSwkZSx5ZSxYLGZlPXt9LGhlLGdlLG5lLHZlOzspe2lmKEllPXpbei5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tJZV0/JGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tJZV06KChDZT09PW51bGx8fHR5cGVvZiBDZT4idSIpJiYoQ2U9UmUoKSksJGU9b2VbSWVdJiZvZVtJZV1bQ2VdKSx0eXBlb2YgJGU+InUifHwhJGUubGVuZ3RofHwhJGVbMF0pe3ZhciBVPSIiO3ZlPVtdO2ZvcihoZSBpbiBvZVtJZV0pdGhpcy50ZXJtaW5hbHNfW2hlXSYmaGU+cSYmdmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2hlXSsiJyIpO3VlLnNob3dQb3NpdGlvbj9VPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpK2A6CmArdWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt2ZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0NlXXx8Q2UpKyInIjpVPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpKyI6IFVuZXhwZWN0ZWQgIisoQ2U9PVE/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bQ2VdfHxDZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoVSx7dGV4dDp1ZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bQ2VdfHxDZSxsaW5lOnVlLnl5bGluZW5vLGxvYzpOZSxleHBlY3RlZDp2ZX0pfWlmKCRlWzBdaW5zdGFuY2VvZiBBcnJheSYmJGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitJZSsiLCB0b2tlbjogIitDZSk7c3dpdGNoKCRlWzBdKXtjYXNlIDE6ei5wdXNoKENlKSxaLnB1c2godWUueXl0ZXh0KSxqLnB1c2godWUueXlsbG9jKSx6LnB1c2goJGVbMV0pLENlPW51bGwsUGU/KENlPVBlLFBlPW51bGwpOihKPXVlLnl5bGVuZyxLPXVlLnl5dGV4dCxlZT11ZS55eWxpbmVubyxOZT11ZS55eWxsb2MsSD4wJiZILS0pO2JyZWFrO2Nhc2UgMjppZihnZT10aGlzLnByb2R1Y3Rpb25zX1skZVsxXV1bMV0sZmUuJD1aW1oubGVuZ3RoLWdlXSxmZS5fJD17Zmlyc3RfbGluZTpqW2oubGVuZ3RoLShnZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmpbai5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpqW2oubGVuZ3RoLShnZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpqW2oubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKGZlLl8kLnJhbmdlPVtqW2oubGVuZ3RoLShnZXx8MSldLnJhbmdlWzBdLGpbai5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxYPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShmZSxbSyxKLGVlLGNlLnl5LCRlWzFdLFosal0uY29uY2F0KGFlKSksdHlwZW9mIFg8InUiKXJldHVybiBYO2dlJiYoej16LnNsaWNlKDAsLTEqZ2UqMiksWj1aLnNsaWNlKDAsLTEqZ2UpLGo9ai5zbGljZSgwLC0xKmdlKSksei5wdXNoKHRoaXMucHJvZHVjdGlvbnNfWyRlWzFdXVswXSksWi5wdXNoKGZlLiQpLGoucHVzaChmZS5fJCksbmU9b2Vbelt6Lmxlbmd0aC0yXV1belt6Lmxlbmd0aC0xXV0sei5wdXNoKG5lKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sTj1mdW5jdGlvbigpe3ZhciBGPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oRyx6KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEcseik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihCLEcpe3JldHVybiB0aGlzLnl5PUd8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUIsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Qix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Qix0aGlzLm1hdGNoZWQrPUI7dmFyIEc9Qi5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEc/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEJ9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oQil7dmFyIEc9Qi5sZW5ndGgsej1CLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Qit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRyksdGhpcy5vZmZzZXQtPUc7dmFyIFc9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksei5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXoubGVuZ3RoLTEpO3ZhciBaPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp6Pyh6Lmxlbmd0aD09PVcubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStXW1cubGVuZ3RoLXoubGVuZ3RoXS5sZW5ndGgtelswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUd9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWlswXSxaWzBdK3RoaXMueXlsZW5nLUddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihCKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoQikpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihCLmxlbmd0aD4yMD8iLi4uIjoiIikrQi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBCPXRoaXMubWF0Y2g7cmV0dXJuIEIubGVuZ3RoPDIwJiYoQis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQi5sZW5ndGgpKSwoQi5zdWJzdHIoMCwyMCkrKEIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgQj10aGlzLnBhc3RJbnB1dCgpLEc9bmV3IEFycmF5KEIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gQit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oQixHKXt2YXIgeixXLFo7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFo9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoWi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxXPUJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFcmJih0aGlzLnl5bGluZW5vKz1XLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlc/V1tXLmxlbmd0aC0xXS5sZW5ndGgtV1tXLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9QlswXSx0aGlzLm1hdGNoKz1CWzBdLHRoaXMubWF0Y2hlcz1CLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUJbMF0sej10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHopcmV0dXJuIHo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGogaW4gWil0aGlzW2pdPVpbal07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEIsRyx6LFc7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgWj10aGlzLl9jdXJyZW50UnVsZXMoKSxqPTA7ajxaLmxlbmd0aDtqKyspaWYoej10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1pbal1dKSx6JiYoIUd8fHpbMF0ubGVuZ3RoPkdbMF0ubGVuZ3RoKSl7aWYoRz16LFc9aix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihCPXRoaXMudGVzdF9tYXRjaCh6LFpbal0pLEIhPT0hMSlyZXR1cm4gQjtpZih0aGlzLl9iYWNrdHJhY2spe0c9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRz8oQj10aGlzLnRlc3RfbWF0Y2goRyxaW1ddKSxCIT09ITE/QjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBHPXRoaXMubmV4dCgpO3JldHVybiBHfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihHKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgRz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBHPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oRyl7cmV0dXJuIEc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhHfHwwKSxHPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihHKXt0aGlzLmJlZ2luKEcpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oRyx6LFcsWil7dmFyIGo9Wjtzd2l0Y2goVyl7Y2FzZSAwOnJldHVybiA0MTtjYXNlIDE6cmV0dXJuIDQ4O2Nhc2UgMjpyZXR1cm4gNDk7Y2FzZSAzOnJldHVybiA1MDtjYXNlIDQ6cmV0dXJuIDUxO2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIDE4O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzg7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM5O2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MDticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0NTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDY7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRSIpLDQyO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVERUZfU1RZTEVTIiksNDM7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ0O2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIDE4O2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHoueXl0ZXh0PXoueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI2O2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI3O2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHoueXl0ZXh0PXoueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNjticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNzticmVhaztjYXNlIDQyOnJldHVybiA0ODtjYXNlIDQzOnJldHVybiA0OTtjYXNlIDQ0OnJldHVybiA1MDtjYXNlIDQ1OnJldHVybiA1MTtjYXNlIDQ2OnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2JyZWFrO2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2JyZWFrO2Nhc2UgNDk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDUxOnJldHVybiAxOTtjYXNlIDUyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDIwO2JyZWFrO2Nhc2UgNTQ6YnJlYWs7Y2FzZSA1NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIxO2JyZWFrO2Nhc2UgNTY6YnJlYWs7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI5O2JyZWFrO2Nhc2UgNTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU2O2JyZWFrO2Nhc2UgNTk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU3O2JyZWFrO2Nhc2UgNjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjticmVhaztjYXNlIDYyOmJyZWFrO2Nhc2UgNjM6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7YnJlYWs7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyNDticmVhaztjYXNlIDY2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwzMTticmVhaztjYXNlIDY3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDMxO2JyZWFrO2Nhc2UgNjg6cmV0dXJuIDY7Y2FzZSA2OTpyZXR1cm4gNjtjYXNlIDcwOnJldHVybiAxNjtjYXNlIDcxOnJldHVybiA1NDtjYXNlIDcyOnJldHVybiAyNDtjYXNlIDczOnJldHVybiB6Lnl5dGV4dD16Lnl5dGV4dC50cmltKCksMTQ7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gMTU7Y2FzZSA3NTpyZXR1cm4gMjg7Y2FzZSA3NjpyZXR1cm4gNTU7Y2FzZSA3NzpyZXR1cm4gNTtjYXNlIDc4OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpkZWZhdWx0XGIpL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXHNdKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OmNsYXNzRGVmXHMrKS9pLC9eKD86REVGQVVMVFxzKykvaSwvXig/Olx3K1xzKykvaSwvXig/OlteXG5dKikvaSwvXig/OmNsYXNzXHMrKS9pLC9eKD86KFx3KykrKCgsXHMqXHcrKSopKS9pLC9eKD86W15cbl0qKS9pLC9eKD86c3R5bGVccyspL2ksL14oPzpbXHcsXStccyspL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDI5LDM1LDQyLDQzLDQ0LDQ1LDU0LDU1LDU2LDU3LDcxLDcyLDczLDc0LDc1XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2NF0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNjEsNjIsNjNdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjYsNjddLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzY1XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1OCw1OSw2MF0saW5jbHVzaXZlOiExfSxTVFlMRURFRl9TVFlMRU9QVFM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RZTEVERUZfU1RZTEVTOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sU1RZTEVfSURTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUWUxFOntydWxlczpbMzBdLGluY2x1c2l2ZTohMX0sQ0xBU1NfU1RZTEU6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxDTEFTUzp7cnVsZXM6WzI3XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIzLDI0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsyMCwyMV0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxOF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxNl0saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzEzLDE0LDMzLDM0XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbNDhdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbNDksNTBdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzksMTAsMzYsMzcsMzgsMzksNDAsNDEsNDYsNDcsNTEsNTIsNTNdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxNSwxNywxOSwyMiwyNiwyOSwzMiwzNSw1Myw1Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3Niw3Nyw3OF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBGfSgpO08ubGV4ZXI9TjtmdW5jdGlvbiBQKCl7dGhpcy55eT17fX1yZXR1cm4gbyhQLCJQYXJzZXIiKSxQLnByb3RvdHlwZT1PLE8uUGFyc2VyPVAsbmV3IFB9KCk7R08ucGFyc2VyPUdPO0dFPUdPfSk7dmFyIFJkZSwkRSx0MSxHeCxNZGUsSWRlLE9kZSxGMCxWRSxWTyxVTyxITyxXTyxZTyxVRSxIRSxQZGUsQmRlLHFPLFhPLEZkZSx6ZGUscjEsaFdlLEdkZSxqTyxmV2UsZFdlLCRkZSxWZGUscFdlLFVkZSxtV2UsSGRlLEtPLFFPLFdkZSxXRSxZZGUsWk8sWUU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSZGU9IkxSIiwkRT0iVEIiLHQxPSJzdGF0ZSIsR3g9InJlbGF0aW9uIixNZGU9ImNsYXNzRGVmIixJZGU9InN0eWxlIixPZGU9ImFwcGx5Q2xhc3MiLEYwPSJkZWZhdWx0IixWRT0iZGl2aWRlciIsVk89ImZpbGw6bm9uZSIsVU89ImZpbGw6ICMzMzMiLEhPPSJjIixXTz0idGV4dCIsWU89Im5vcm1hbCIsVUU9InJlY3QiLEhFPSJyZWN0V2l0aFRpdGxlIixQZGU9InN0YXRlU3RhcnQiLEJkZT0ic3RhdGVFbmQiLHFPPSJkaXZpZGVyIixYTz0icm91bmRlZFdpdGhUaXRsZSIsRmRlPSJub3RlIix6ZGU9Im5vdGVHcm91cCIscjE9InN0YXRlZGlhZ3JhbSIsaFdlPSJzdGF0ZSIsR2RlPWAke3IxfS0ke2hXZX1gLGpPPSJ0cmFuc2l0aW9uIixmV2U9Im5vdGUiLGRXZT0ibm90ZS1lZGdlIiwkZGU9YCR7ak99ICR7ZFdlfWAsVmRlPWAke3IxfS0ke2ZXZX1gLHBXZT0iY2x1c3RlciIsVWRlPWAke3IxfS0ke3BXZX1gLG1XZT0iY2x1c3Rlci1hbHQiLEhkZT1gJHtyMX0tJHttV2V9YCxLTz0icGFyZW50IixRTz0ibm90ZSIsV2RlPSJzdGF0ZSIsV0U9Ii0tLS0iLFlkZT1gJHtXRX0ke1FPfWAsWk89YCR7V0V9JHtLT31gfSk7ZnVuY3Rpb24gSk8odD0iIixlPTAscj0iIixuPVdFKXtsZXQgaT1yIT09bnVsbCYmci5sZW5ndGg+MD9gJHtufSR7cn1gOiIiO3JldHVybmAke1dkZX0tJHt0fSR7aX0tJHtlfWB9ZnVuY3Rpb24gcUUodCxlLHIpe2lmKCFlLmlkfHxlLmlkPT09Ijwvam9pbj48L2Zvcms+Inx8ZS5pZD09PSI8L2Nob2ljZT4iKXJldHVybjtlLmNzc0NsYXNzZXMmJihBcnJheS5pc0FycmF5KGUuY3NzQ29tcGlsZWRTdHlsZXMpfHwoZS5jc3NDb21waWxlZFN0eWxlcz1bXSksZS5jc3NDbGFzc2VzLnNwbGl0KCIgIikuZm9yRWFjaChpPT57aWYoci5nZXQoaSkpe2xldCBhPXIuZ2V0KGkpO2UuY3NzQ29tcGlsZWRTdHlsZXM9Wy4uLmUuY3NzQ29tcGlsZWRTdHlsZXMsLi4uYS5zdHlsZXNdfX0pKTtsZXQgbj10LmZpbmQoaT0+aS5pZD09PWUuaWQpO24/T2JqZWN0LmFzc2lnbihuLGUpOnQucHVzaChlKX1mdW5jdGlvbiB5V2UodCl7cmV0dXJuIHQ/LmNsYXNzZXM/LmpvaW4oIiAiKT8/IiJ9ZnVuY3Rpb24gdldlKHQpe3JldHVybiB0Py5zdHlsZXM/P1tdfXZhciBYRSxTZixnV2UscWRlLG4xLFhkZSxqZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7ZnIoKTtZRSgpO1hFPW5ldyBNYXAsU2Y9MDtvKEpPLCJzdGF0ZURvbUlkIik7Z1dlPW8oKHQsZSxyLG4saSxhLHMsbCk9PntZLnRyYWNlKCJpdGVtcyIsZSksZS5mb3JFYWNoKHU9Pntzd2l0Y2godS5zdG10KXtjYXNlIHQxOm4xKHQsdSxyLG4saSxhLHMsbCk7YnJlYWs7Y2FzZSBGMDpuMSh0LHUscixuLGksYSxzLGwpO2JyZWFrO2Nhc2UgR3g6e24xKHQsdS5zdGF0ZTEscixuLGksYSxzLGwpLG4xKHQsdS5zdGF0ZTIscixuLGksYSxzLGwpO2xldCBoPXtpZDoiZWRnZSIrU2Ysc3RhcnQ6dS5zdGF0ZTEuaWQsZW5kOnUuc3RhdGUyLmlkLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOlZPLGxhYmVsU3R5bGU6IiIsbGFiZWw6cWUuc2FuaXRpemVUZXh0KHUuZGVzY3JpcHRpb24scGUoKSksYXJyb3doZWFkU3R5bGU6VU8sbGFiZWxwb3M6SE8sbGFiZWxUeXBlOldPLHRoaWNrbmVzczpZTyxjbGFzc2VzOmpPLGxvb2s6c307aS5wdXNoKGgpLFNmKyt9YnJlYWt9fSl9LCJzZXR1cERvYyIpLHFkZT1vKCh0LGU9JEUpPT57bGV0IHI9ZTtpZih0LmRvYylmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIik7byhxRSwiaW5zZXJ0T3JVcGRhdGVOb2RlIik7byh5V2UsImdldENsYXNzZXNGcm9tRGJJbmZvIik7byh2V2UsImdldFN0eWxlc0Zyb21EYkluZm8iKTtuMT1vKCh0LGUscixuLGksYSxzLGwpPT57bGV0IHU9ZS5pZCxoPXIuZ2V0KHUpLGY9eVdlKGgpLGQ9dldlKGgpO2lmKFkuaW5mbygiZGF0YUZldGNoZXIgcGFyc2VkSXRlbSIsZSxoLGQpLHUhPT0icm9vdCIpe2xldCBwPVVFO2Uuc3RhcnQ9PT0hMD9wPVBkZTplLnN0YXJ0PT09ITEmJihwPUJkZSksZS50eXBlIT09RjAmJihwPWUudHlwZSksWEUuZ2V0KHUpfHxYRS5zZXQodSx7aWQ6dSxzaGFwZTpwLGRlc2NyaXB0aW9uOnFlLnNhbml0aXplVGV4dCh1LHBlKCkpLGNzc0NsYXNzZXM6YCR7Zn0gJHtHZGV9YCxjc3NTdHlsZXM6ZH0pO2xldCBtPVhFLmdldCh1KTtlLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShtLmRlc2NyaXB0aW9uKT8obS5zaGFwZT1IRSxtLmRlc2NyaXB0aW9uLnB1c2goZS5kZXNjcmlwdGlvbikpOm0uZGVzY3JpcHRpb24/Lmxlbmd0aD4wPyhtLnNoYXBlPUhFLG0uZGVzY3JpcHRpb249PT11P20uZGVzY3JpcHRpb249W2UuZGVzY3JpcHRpb25dOm0uZGVzY3JpcHRpb249W20uZGVzY3JpcHRpb24sZS5kZXNjcmlwdGlvbl0pOihtLnNoYXBlPVVFLG0uZGVzY3JpcHRpb249ZS5kZXNjcmlwdGlvbiksbS5kZXNjcmlwdGlvbj1xZS5zYW5pdGl6ZVRleHRPckFycmF5KG0uZGVzY3JpcHRpb24scGUoKSkpLG0uZGVzY3JpcHRpb24/Lmxlbmd0aD09PTEmJm0uc2hhcGU9PT1IRSYmKG0udHlwZT09PSJncm91cCI/bS5zaGFwZT1YTzptLnNoYXBlPVVFKSwhbS50eXBlJiZlLmRvYyYmKFkuaW5mbygiU2V0dGluZyBjbHVzdGVyIGZvciBYQ1giLHUscWRlKGUpKSxtLnR5cGU9Imdyb3VwIixtLmlzR3JvdXA9ITAsbS5kaXI9cWRlKGUpLG0uc2hhcGU9ZS50eXBlPT09VkU/cU86WE8sbS5jc3NDbGFzc2VzPWAke20uY3NzQ2xhc3Nlc30gJHtVZGV9ICR7YT9IZGU6IiJ9YCk7bGV0IGc9e2xhYmVsU3R5bGU6IiIsc2hhcGU6bS5zaGFwZSxsYWJlbDptLmRlc2NyaXB0aW9uLGNzc0NsYXNzZXM6bS5jc3NDbGFzc2VzLGNzc0NvbXBpbGVkU3R5bGVzOltdLGNzc1N0eWxlczptLmNzc1N0eWxlcyxpZDp1LGRpcjptLmRpcixkb21JZDpKTyh1LFNmKSx0eXBlOm0udHlwZSxpc0dyb3VwOm0udHlwZT09PSJncm91cCIscGFkZGluZzo4LHJ4OjEwLHJ5OjEwLGxvb2s6c307aWYoZy5zaGFwZT09PXFPJiYoZy5sYWJlbD0iIiksdCYmdC5pZCE9PSJyb290IiYmKFkudHJhY2UoIlNldHRpbmcgbm9kZSAiLHUsIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50ICIsdC5pZCksZy5wYXJlbnRJZD10LmlkKSxnLmNlbnRlckxhYmVsPSEwLGUubm90ZSl7bGV0IHk9e2xhYmVsU3R5bGU6IiIsc2hhcGU6RmRlLGxhYmVsOmUubm90ZS50ZXh0LGNzc0NsYXNzZXM6VmRlLGNzc1N0eWxlczpbXSxjc3NDb21waWxlc1N0eWxlczpbXSxpZDp1K1lkZSsiLSIrU2YsZG9tSWQ6Sk8odSxTZixRTyksdHlwZTptLnR5cGUsaXNHcm91cDptLnR5cGU9PT0iZ3JvdXAiLHBhZGRpbmc6cGUoKS5mbG93Y2hhcnQucGFkZGluZyxsb29rOnMscG9zaXRpb246ZS5ub3RlLnBvc2l0aW9ufSx2PXUrWk8seD17bGFiZWxTdHlsZToiIixzaGFwZTp6ZGUsbGFiZWw6ZS5ub3RlLnRleHQsY3NzQ2xhc3NlczptLmNzc0NsYXNzZXMsY3NzU3R5bGVzOltdLGlkOnUrWk8sZG9tSWQ6Sk8odSxTZixLTyksdHlwZToiZ3JvdXAiLGlzR3JvdXA6ITAscGFkZGluZzoxNixsb29rOnMscG9zaXRpb246ZS5ub3RlLnBvc2l0aW9ufTtTZisrLHguaWQ9dix5LnBhcmVudElkPXYscUUobix4LGwpLHFFKG4seSxsKSxxRShuLGcsbCk7bGV0IGI9dSx3PXkuaWQ7ZS5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoYj15LmlkLHc9dSksaS5wdXNoKHtpZDpiKyItIit3LHN0YXJ0OmIsZW5kOncsYXJyb3doZWFkOiJub25lIixhcnJvd1R5cGVFbmQ6IiIsc3R5bGU6Vk8sbGFiZWxTdHlsZToiIixjbGFzc2VzOiRkZSxhcnJvd2hlYWRTdHlsZTpVTyxsYWJlbHBvczpITyxsYWJlbFR5cGU6V08sdGhpY2tuZXNzOllPLGxvb2s6c30pfWVsc2UgcUUobixnLGwpfWUuZG9jJiYoWS50cmFjZSgiQWRkaW5nIG5vZGVzIGNoaWxkcmVuICIpLGdXZShlLGUuZG9jLHIsbixpLCFhLHMsbCkpfSwiZGF0YUZldGNoZXIiKSxYZGU9bygoKT0+e1hFLmNsZWFyKCksU2Y9MH0sInJlc2V0Iil9KTt2YXIgZVAseFdlLGJXZSxLZGUsdFA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7b3coKTtKdigpO1RUKCk7aHIoKTtZRSgpO2VQPW8oKHQsZT0kRSk9PntpZighdC5kb2MpcmV0dXJuIGU7bGV0IHI9ZTtmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIikseFdlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5leHRyYWN0KGUuZGIuZ2V0Um9vdERvY1YyKCkpLGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLGJXZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe1kuaW5mbygiUkVGMDoiKSxZLmluZm8oIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLHN0YXRlOmEsbGF5b3V0OnN9PXBlKCk7bi5kYi5leHRyYWN0KG4uZGIuZ2V0Um9vdERvY1YyKCkpO2xldCBsPW4uZGIuZ2V0RGF0YSgpLHU9QW0oZSxpKTtsLnR5cGU9bi50eXBlLGwubGF5b3V0QWxnb3JpdGhtPXMsbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZ3x8NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZ3x8NTAsbC5tYXJrZXJzPVsiYmFyYiJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgUW0obCx1KTtsZXQgaD04O1V0Lmluc2VydFRpdGxlKHUsInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLFptKHUsaCxyMSxhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpLEtkZT17Z2V0Q2xhc3Nlczp4V2UsZHJhdzpiV2UsZ2V0RGlyOmVQfX0pO2Z1bmN0aW9uIG4wZSgpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHJQKHQ9IiIpe2xldCBlPXQ7cmV0dXJuIHQ9PT1hUCYmKCR4KyssZT1gJHtlMGV9JHskeH1gKSxlfWZ1bmN0aW9uIG5QKHQ9IiIsZT1GMCl7cmV0dXJuIHQ9PT1hUD9lMGU6ZX1mdW5jdGlvbiBEV2UodD0iIil7bGV0IGU9dDtyZXR1cm4gdD09PXQwZSYmKCR4KyssZT1gJHtyMGV9JHskeH1gKSxlfWZ1bmN0aW9uIE5XZSh0PSIiLGU9RjApe3JldHVybiB0PT09dDBlP3IwZTplfWZ1bmN0aW9uIFJXZSh0LGUscil7bGV0IG49clAodC5pZC50cmltKCkpLGk9blAodC5pZC50cmltKCksdC50eXBlKSxhPXJQKGUuaWQudHJpbSgpKSxzPW5QKGUuaWQudHJpbSgpLGUudHlwZSk7Q2YobixpLHQuZG9jLHQuZGVzY3JpcHRpb24sdC5ub3RlLHQuY2xhc3Nlcyx0LnN0eWxlcyx0LnRleHRTdHlsZXMpLENmKGEscyxlLmRvYyxlLmRlc2NyaXB0aW9uLGUubm90ZSxlLmNsYXNzZXMsZS5zdHlsZXMsZS50ZXh0U3R5bGVzKSxYcy5yZWxhdGlvbnMucHVzaCh7aWQxOm4saWQyOmEscmVsYXRpb25UaXRsZTpxZS5zYW5pdGl6ZVRleHQocixwZSgpKX0pfXZhciBhUCxlMGUsdDBlLHIwZSxRZGUsWmRlLHdXZSxUV2UsUUUsc1AsaTBlLFpFLGkxLGEwZSxKRSxYcywkeCxKZGUsa1dlLEVXZSxqRSxTV2UsQ1dlLEtFLG9QLEFXZSxDZixzMGUsejAsbzBlLF9XZSxMV2UsbDBlLGlQLE1XZSxJV2UsYzBlLE9XZSxsUCxQV2UsQldlLEZXZSx6V2UsR1dlLCRXZSxvbCxlNj1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7aHIoKTtmcigpO1Z0KCk7QWkoKTtqZGUoKTt0UCgpO1lFKCk7YVA9IlsqXSIsZTBlPSJzdGFydCIsdDBlPWFQLHIwZT0iZW5kIixRZGU9ImNvbG9yIixaZGU9ImZpbGwiLHdXZT0iYmdGaWxsIixUV2U9IiwiO28objBlLCJuZXdDbGFzc2VzTGlzdCIpO1FFPVtdLHNQPVtdLGkwZT1SZGUsWkU9W10saTE9bjBlKCksYTBlPW8oKCk9Pih7cmVsYXRpb25zOltdLHN0YXRlczpuZXcgTWFwLGRvY3VtZW50czp7fX0pLCJuZXdEb2MiKSxKRT17cm9vdDphMGUoKX0sWHM9SkUucm9vdCwkeD0wLEpkZT0wLGtXZT17TElORTowLERPVFRFRF9MSU5FOjF9LEVXZT17QUdHUkVHQVRJT046MCxFWFRFTlNJT046MSxDT01QT1NJVElPTjoyLERFUEVOREVOQ1k6M30sakU9byh0PT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSwiY2xvbmUiKSxTV2U9byh0PT57WS5pbmZvKCJTZXR0aW5nIHJvb3QgZG9jIix0KSxaRT10fSwic2V0Um9vdERvYyIpLENXZT1vKCgpPT5aRSwiZ2V0Um9vdERvYyIpLEtFPW8oKHQsZSxyKT0+e2lmKGUuc3RtdD09PUd4KUtFKHQsZS5zdGF0ZTEsITApLEtFKHQsZS5zdGF0ZTIsITEpO2Vsc2UgaWYoZS5zdG10PT09dDEmJihlLmlkPT09IlsqXSI/KGUuaWQ9cj90LmlkKyJfc3RhcnQiOnQuaWQrIl9lbmQiLGUuc3RhcnQ9cik6ZS5pZD1lLmlkLnRyaW0oKSksZS5kb2Mpe2xldCBuPVtdLGk9W10sYTtmb3IoYT0wO2E8ZS5kb2MubGVuZ3RoO2ErKylpZihlLmRvY1thXS50eXBlPT09VkUpe2xldCBzPWpFKGUuZG9jW2FdKTtzLmRvYz1qRShpKSxuLnB1c2gocyksaT1bXX1lbHNlIGkucHVzaChlLmRvY1thXSk7aWYobi5sZW5ndGg+MCYmaS5sZW5ndGg+MCl7bGV0IHM9e3N0bXQ6dDEsaWQ6cjkoKSx0eXBlOiJkaXZpZGVyIixkb2M6akUoaSl9O24ucHVzaChqRShzKSksZS5kb2M9bn1lLmRvYy5mb3JFYWNoKHM9PktFKGUscywhMCkpfX0sImRvY1RyYW5zbGF0b3IiKSxvUD1vKCgpPT4oS0Uoe2lkOiJyb290In0se2lkOiJyb290Iixkb2M6WkV9LCEwKSx7aWQ6InJvb3QiLGRvYzpaRX0pLCJnZXRSb290RG9jVjIiKSxBV2U9byh0PT57bGV0IGU7dC5kb2M/ZT10LmRvYzplPXQsWS5pbmZvKGUpLHMwZSghMCksWS5pbmZvKCJFeHRyYWN0IGluaXRpYWwgZG9jdW1lbnQ6IixlKSxlLmZvckVhY2goYT0+e3N3aXRjaChZLndhcm4oIlN0YXRlbWVudCIsYS5zdG10KSxhLnN0bXQpe2Nhc2UgdDE6Q2YoYS5pZC50cmltKCksYS50eXBlLGEuZG9jLGEuZGVzY3JpcHRpb24sYS5ub3RlLGEuY2xhc3NlcyxhLnN0eWxlcyxhLnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgR3g6bDBlKGEuc3RhdGUxLGEuc3RhdGUyLGEuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UgTWRlOmMwZShhLmlkLnRyaW0oKSxhLmNsYXNzZXMpO2JyZWFrO2Nhc2UgSWRlOntsZXQgcz1hLmlkLnRyaW0oKS5zcGxpdCgiLCIpLGw9YS5zdHlsZUNsYXNzLnNwbGl0KCIsIik7cy5mb3JFYWNoKHU9PntsZXQgaD16MCh1KTtpZihoPT09dm9pZCAwKXtsZXQgZj11LnRyaW0oKTtDZihmKSxoPXowKGYpfWguc3R5bGVzPWwubWFwKGY9PmYucmVwbGFjZSgvOy9nLCIiKT8udHJpbSgpKX0pfWJyZWFrO2Nhc2UgT2RlOmxQKGEuaWQudHJpbSgpLGEuc3R5bGVDbGFzcyk7YnJlYWt9fSk7bGV0IHI9bzBlKCksaT1wZSgpLmxvb2s7WGRlKCksbjEodm9pZCAwLG9QKCkscixRRSxzUCwhMCxpLGkxKSxRRS5mb3JFYWNoKGE9PntpZihBcnJheS5pc0FycmF5KGEubGFiZWwpKXtpZihhLmRlc2NyaXB0aW9uPWEubGFiZWwuc2xpY2UoMSksYS5pc0dyb3VwJiZhLmRlc2NyaXB0aW9uLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiR3JvdXAgbm9kZXMgY2FuIG9ubHkgaGF2ZSBsYWJlbC4gUmVtb3ZlIHRoZSBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGZvciBub2RlIFsiK2EuaWQrIl0iKTthLmxhYmVsPWEubGFiZWxbMF19fSl9LCJleHRyYWN0IiksQ2Y9byhmdW5jdGlvbih0LGU9RjAscj1udWxsLG49bnVsbCxpPW51bGwsYT1udWxsLHM9bnVsbCxsPW51bGwpe2xldCB1PXQ/LnRyaW0oKTtpZihYcy5zdGF0ZXMuaGFzKHUpPyhYcy5zdGF0ZXMuZ2V0KHUpLmRvY3x8KFhzLnN0YXRlcy5nZXQodSkuZG9jPXIpLFhzLnN0YXRlcy5nZXQodSkudHlwZXx8KFhzLnN0YXRlcy5nZXQodSkudHlwZT1lKSk6KFkuaW5mbygiQWRkaW5nIHN0YXRlICIsdSxuKSxYcy5zdGF0ZXMuc2V0KHUse2lkOnUsZGVzY3JpcHRpb25zOltdLHR5cGU6ZSxkb2M6cixub3RlOmksY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pKSxuJiYoWS5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIix1LG4pLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVAodSxuLnRyaW0oKSksdHlwZW9mIG49PSJvYmplY3QiJiZuLmZvckVhY2goaD0+aVAodSxoLnRyaW0oKSkpKSxpKXtsZXQgaD1Ycy5zdGF0ZXMuZ2V0KHUpO2gubm90ZT1pLGgubm90ZS50ZXh0PXFlLnNhbml0aXplVGV4dChoLm5vdGUudGV4dCxwZSgpKX1hJiYoWS5pbmZvKCJTZXR0aW5nIHN0YXRlIGNsYXNzZXMiLHUsYSksKHR5cGVvZiBhPT0ic3RyaW5nIj9bYV06YSkuZm9yRWFjaChmPT5sUCh1LGYudHJpbSgpKSkpLHMmJihZLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIix1LHMpLCh0eXBlb2Ygcz09InN0cmluZyI/W3NdOnMpLmZvckVhY2goZj0+UFdlKHUsZi50cmltKCkpKSksbCYmKFkuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLHUscyksKHR5cGVvZiBsPT0ic3RyaW5nIj9bbF06bCkuZm9yRWFjaChmPT5CV2UodSxmLnRyaW0oKSkpKX0sImFkZFN0YXRlIiksczBlPW8oZnVuY3Rpb24odCl7UUU9W10sc1A9W10sSkU9e3Jvb3Q6YTBlKCl9LFhzPUpFLnJvb3QsJHg9MCxpMT1uMGUoKSx0fHxMcigpfSwiY2xlYXIiKSx6MD1vKGZ1bmN0aW9uKHQpe3JldHVybiBYcy5zdGF0ZXMuZ2V0KHQpfSwiZ2V0U3RhdGUiKSxvMGU9byhmdW5jdGlvbigpe3JldHVybiBYcy5zdGF0ZXN9LCJnZXRTdGF0ZXMiKSxfV2U9byhmdW5jdGlvbigpe1kuaW5mbygiRG9jdW1lbnRzID0gIixKRSl9LCJsb2dEb2N1bWVudHMiKSxMV2U9byhmdW5jdGlvbigpe3JldHVybiBYcy5yZWxhdGlvbnN9LCJnZXRSZWxhdGlvbnMiKTtvKHJQLCJzdGFydElkSWZOZWVkZWQiKTtvKG5QLCJzdGFydFR5cGVJZk5lZWRlZCIpO28oRFdlLCJlbmRJZElmTmVlZGVkIik7byhOV2UsImVuZFR5cGVJZk5lZWRlZCIpO28oUldlLCJhZGRSZWxhdGlvbk9ianMiKTtsMGU9byhmdW5jdGlvbih0LGUscil7aWYodHlwZW9mIHQ9PSJvYmplY3QiKVJXZSh0LGUscik7ZWxzZXtsZXQgbj1yUCh0LnRyaW0oKSksaT1uUCh0KSxhPURXZShlLnRyaW0oKSkscz1OV2UoZSk7Q2YobixpKSxDZihhLHMpLFhzLnJlbGF0aW9ucy5wdXNoKHtpZDE6bixpZDI6YSx0aXRsZTpxZS5zYW5pdGl6ZVRleHQocixwZSgpKX0pfX0sImFkZFJlbGF0aW9uIiksaVA9byhmdW5jdGlvbih0LGUpe2xldCByPVhzLnN0YXRlcy5nZXQodCksbj1lLnN0YXJ0c1dpdGgoIjoiKT9lLnJlcGxhY2UoIjoiLCIiKS50cmltKCk6ZTtyLmRlc2NyaXB0aW9ucy5wdXNoKHFlLnNhbml0aXplVGV4dChuLHBlKCkpKX0sImFkZERlc2NyaXB0aW9uIiksTVdlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsMSk9PT0iOiI/dC5zdWJzdHIoMikudHJpbSgpOnQudHJpbSgpfSwiY2xlYW51cExhYmVsIiksSVdlPW8oKCk9PihKZGUrKywiZGl2aWRlci1pZC0iK0pkZSksImdldERpdmlkZXJJZCIpLGMwZT1vKGZ1bmN0aW9uKHQsZT0iIil7aTEuaGFzKHQpfHxpMS5zZXQodCx7aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pO2xldCByPWkxLmdldCh0KTtlPy5zcGxpdChUV2UpLmZvckVhY2gobj0+e2xldCBpPW4ucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihSZWdFeHAoUWRlKS5leGVjKG4pKXtsZXQgcz1pLnJlcGxhY2UoWmRlLHdXZSkucmVwbGFjZShRZGUsWmRlKTtyLnRleHRTdHlsZXMucHVzaChzKX1yLnN0eWxlcy5wdXNoKGkpfSl9LCJhZGRTdHlsZUNsYXNzIiksT1dlPW8oZnVuY3Rpb24oKXtyZXR1cm4gaTF9LCJnZXRDbGFzc2VzIiksbFA9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPXowKHIpO2lmKG49PT12b2lkIDApe2xldCBpPXIudHJpbSgpO0NmKGkpLG49ejAoaSl9bi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENzc0NsYXNzIiksUFdlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj16MCh0KTtyIT09dm9pZCAwJiZyLnN0eWxlcy5wdXNoKGUpfSwic2V0U3R5bGUiKSxCV2U9byhmdW5jdGlvbih0LGUpe2xldCByPXowKHQpO3IhPT12b2lkIDAmJnIudGV4dFN0eWxlcy5wdXNoKGUpfSwic2V0VGV4dFN0eWxlIiksRldlPW8oKCk9PmkwZSwiZ2V0RGlyZWN0aW9uIikseldlPW8odD0+e2kwZT10fSwic2V0RGlyZWN0aW9uIiksR1dlPW8odD0+dCYmdFswXT09PSI6Ij90LnN1YnN0cigxKS50cmltKCk6dC50cmltKCksInRyaW1Db2xvbiIpLCRXZT1vKCgpPT57bGV0IHQ9cGUoKTtyZXR1cm57bm9kZXM6UUUsZWRnZXM6c1Asb3RoZXI6e30sY29uZmlnOnQsZGlyZWN0aW9uOmVQKG9QKCkpfX0sImdldERhdGEiKSxvbD17Z2V0Q29uZmlnOm8oKCk9PnBlKCkuc3RhdGUsImdldENvbmZpZyIpLGdldERhdGE6JFdlLGFkZFN0YXRlOkNmLGNsZWFyOnMwZSxnZXRTdGF0ZTp6MCxnZXRTdGF0ZXM6bzBlLGdldFJlbGF0aW9uczpMV2UsZ2V0Q2xhc3NlczpPV2UsZ2V0RGlyZWN0aW9uOkZXZSxhZGRSZWxhdGlvbjpsMGUsZ2V0RGl2aWRlcklkOklXZSxzZXREaXJlY3Rpb246eldlLGNsZWFudXBMYWJlbDpNV2UsbGluZVR5cGU6a1dlLHJlbGF0aW9uVHlwZTpFV2UsbG9nRG9jdW1lbnRzOl9XZSxnZXRSb290RG9jOkNXZSxzZXRSb290RG9jOlNXZSxnZXRSb290RG9jVjI6b1AsZXh0cmFjdDpBV2UsdHJpbUNvbG9uOkdXZSxnZXRBY2NUaXRsZTpCcixzZXRBY2NUaXRsZTpNcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcixhZGRTdHlsZUNsYXNzOmMwZSxzZXRDc3NDbGFzczpsUCxhZGREZXNjcmlwdGlvbjppUCxzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyfX0pO3ZhciBWV2UsdDYsY1A9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWV2U9byh0PT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7dC50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke3QudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke3Quc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke3QudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7dC5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7dC5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHt0LmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIHAgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KICByZWN0IHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICB9CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5lZGdlTGFiZWwgLmxhYmVsIHRleHQgewogIGZpbGw6ICR7dC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHt0LnRyYW5zaXRpb25MYWJlbENvbG9yfHx0LnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoKLnN0YXRlTGFiZWwgdGV4dCB7CiAgZmlsbDogJHt0LnN0YXRlTGFiZWxDb2xvcn07CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQgewogIGZpbGw6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSAuZm9yay1qb2luIHsKICBmaWxsOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7CiAgZmlsbDogJHt0LmlubmVyRW5kQmFja2dyb3VuZH07CiAgc3Ryb2tlOiAke3QuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQouZW5kLXN0YXRlLWlubmVyIHsKICBmaWxsOiAke3QuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kfTsKICAvLyBzdHJva2U6ICR7dC5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Cgoubm9kZSByZWN0IHsKICBmaWxsOiAke3Quc3RhdGVCa2d8fHQubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KLm5vZGUgcG9seWdvbiB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9OzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQojc3RhdGVkaWFncmFtLWJhcmJFbmQgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdCB7CiAgZmlsbDogJHt0LmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZH07CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5jbHVzdGVyLWxhYmVsLCAubm9kZUxhYmVsIHsKICBjb2xvcjogJHt0LnN0YXRlTGFiZWxDb2xvcn07CiAgLy8gbGluZS1oZWlnaHQ6IDE7Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07Cn0KCi5zdGF0ZWRpYWdyYW0tc3RhdGUgLnRpdGxlLXN0YXRlIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgZmlsbDogJHt0LmNvbXBvc2l0ZUJhY2tncm91bmR8fHQuYmFja2dyb3VuZH07Cn0KLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIgewogIGZpbGw6ICR7dC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICByeDowOwogIHJ5OjA7Cn0KCi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHsKICBzdHJva2UtZGFzaGFycmF5OiAxMCwxMDsKICBmaWxsOiAke3QuYWx0QmFja2dyb3VuZD90LmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLm5vdGUtZWRnZSB7CiAgc3Ryb2tlLWRhc2hhcnJheTogNTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3QgewogIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcng6IDA7CiAgcnk6IDA7Cn0KLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3QgewogIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcng6IDA7CiAgcnk6IDA7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHsKICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSAubm9kZUxhYmVsIHsKICBjb2xvcjogJHt0Lm5vdGVUZXh0Q29sb3J9Owp9Ci5zdGF0ZWRpYWdyYW0gLmVkZ2VMYWJlbCB7CiAgY29sb3I6IHJlZDsgLy8gJHt0Lm5vdGVUZXh0Q29sb3J9Owp9CgojZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5zdGF0ZWRpYWdyYW1UaXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6ICR7dC50ZXh0Q29sb3J9Owp9CmAsImdldFN0eWxlcyIpLHQ2PVZXZX0pO3ZhciB1UCxVV2UsSFdlLHUwZSxXV2UsaDBlLGYwZT1NKCgpPT57InVzZSBzdHJpY3QiO3VQPXt9LFVXZT1vKCh0LGUpPT57dVBbdF09ZX0sInNldCIpLEhXZT1vKHQ9PnVQW3RdLCJnZXQiKSx1MGU9bygoKT0+T2JqZWN0LmtleXModVApLCJrZXlzIiksV1dlPW8oKCk9PnUwZSgpLmxlbmd0aCwic2l6ZSIpLGgwZT17Z2V0OkhXZSxzZXQ6VVdlLGtleXM6dTBlLHNpemU6V1dlfX0pO3ZhciBZV2UscVdlLFhXZSxqV2UscDBlLEtXZSxRV2UsWldlLEpXZSxoUCxkMGUsbTBlLGcwZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7ZjBlKCk7ZTYoKTtocigpO2ZyKCk7VnQoKTt1dCgpO1lXZT1vKHQ9PnQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIscGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHBlKCkuc3RhdGUucGFkZGluZytwZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIscGUoKS5zdGF0ZS5wYWRkaW5nK3BlKCkuc3RhdGUuc2l6ZVVuaXQpLCJkcmF3U3RhcnRTdGF0ZSIpLHFXZT1vKHQ9PnQuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIscGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIscGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KjIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksImRyYXdEaXZpZGVyIiksWFdlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnRleHRIZWlnaHQrMipwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksbj1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixuLndpZHRoKzIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0KzIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIscGUoKS5zdGF0ZS5yYWRpdXMpLHJ9LCJkcmF3U2ltcGxlU3RhdGUiKSxqV2U9bygodCxlKT0+e2xldCByPW8oZnVuY3Rpb24ocCxtLGcpe2xldCB5PXAuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqcGUoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KG0pO2d8fHkuYXR0cigiZHkiLHBlKCkuc3RhdGUudGV4dEhlaWdodCl9LCJhZGRUc3BhbiIpLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnBlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksYT1pLmhlaWdodCxzPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixhK3BlKCkuc3RhdGUucGFkZGluZyouNCtwZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rcGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIiksbD0hMCx1PSEwO2UuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24ocCl7bHx8KHIocyxwLHUpLHU9ITEpLGw9ITF9KTtsZXQgaD10LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixwZSgpLnN0YXRlLnBhZGRpbmcrYStwZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHBlKCkuc3RhdGUucGFkZGluZythK3BlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxmPXMubm9kZSgpLmdldEJCb3goKSxkPU1hdGgubWF4KGYud2lkdGgsaS53aWR0aCk7cmV0dXJuIGguYXR0cigieDIiLGQrMypwZSgpLnN0YXRlLnBhZGRpbmcpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixkKzIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K2ErMipwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixwZSgpLnN0YXRlLnJhZGl1cyksdH0sImRyYXdEZXNjclN0YXRlIikscDBlPW8oKHQsZSxyKT0+e2xldCBuPXBlKCkuc3RhdGUucGFkZGluZyxpPTIqcGUoKS5zdGF0ZS5wYWRkaW5nLGE9dC5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCxsPWEueCx1PXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIscGUoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLHBlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLGY9dS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK2ksZD1NYXRoLm1heChmLHMpO2Q9PT1zJiYoZD1kK2kpO2xldCBwLG09dC5ub2RlKCkuZ2V0QkJveCgpO2UuZG9jLHA9bC1uLGY+cyYmKHA9KHMtZCkvMituKSxNYXRoLmFicyhsLW0ueCk8biYmZj5zJiYocD1sLShmLXMpLzIpO2xldCBnPTEtcGUoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHApLmF0dHIoInkiLGcpLmF0dHIoImNsYXNzIixyPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0K3BlKCkuc3RhdGUudGV4dEhlaWdodCtwZSgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksdS5hdHRyKCJ4IixwK24pLGY8PXMmJnUuYXR0cigieCIsbCsoZC1pKS8yLWYvMituKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHApLmF0dHIoInkiLHBlKCkuc3RhdGUudGl0bGVTaGlmdC1wZSgpLnN0YXRlLnRleHRIZWlnaHQtcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZCkuYXR0cigiaGVpZ2h0IixwZSgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLHBlKCkuc3RhdGUucmFkaXVzKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHApLmF0dHIoInkiLHBlKCkuc3RhdGUudGl0bGVTaGlmdC1wZSgpLnN0YXRlLnRleHRIZWlnaHQtcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCszKzIqcGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIscGUoKS5zdGF0ZS5yYWRpdXMpLHR9LCJhZGRUaXRsZUFuZEJveCIpLEtXZT1vKHQ9Pih0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtb3V0ZXIiKS5hdHRyKCJyIixwZSgpLnN0YXRlLnNpemVVbml0K3BlKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN4IixwZSgpLnN0YXRlLnBhZGRpbmcrcGUoKS5zdGF0ZS5zaXplVW5pdCtwZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeSIscGUoKS5zdGF0ZS5wYWRkaW5nK3BlKCkuc3RhdGUuc2l6ZVVuaXQrcGUoKS5zdGF0ZS5taW5pUGFkZGluZyksdC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLWlubmVyIikuYXR0cigiciIscGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHBlKCkuc3RhdGUucGFkZGluZytwZSgpLnN0YXRlLnNpemVVbml0KzIpLmF0dHIoImN5IixwZSgpLnN0YXRlLnBhZGRpbmcrcGUoKS5zdGF0ZS5zaXplVW5pdCsyKSksImRyYXdFbmRTdGF0ZSIpLFFXZT1vKCh0LGUpPT57bGV0IHI9cGUoKS5zdGF0ZS5mb3JrV2lkdGgsbj1wZSgpLnN0YXRlLmZvcmtIZWlnaHQ7aWYoZS5wYXJlbnRJZCl7bGV0IGk9cjtyPW4sbj1pfXJldHVybiB0LmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJ4IixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLHBlKCkuc3RhdGUucGFkZGluZyl9LCJkcmF3Rm9ya0pvaW5TdGF0ZSIpLFpXZT1vKCh0LGUscixuKT0+e2xldCBpPTAsYT1uLmFwcGVuZCgidGV4dCIpO2Euc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxhLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTtsZXQgcz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKTtzPXMucmVwbGFjZSgvXG4vZywiPGJyLz4iKTtsZXQgbD1zLnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KSx1PTEuMjUqcGUoKS5zdGF0ZS5ub3RlTWFyZ2luO2ZvcihsZXQgaCBvZiBsKXtsZXQgZj1oLnRyaW0oKTtpZihmLmxlbmd0aD4wKXtsZXQgZD1hLmFwcGVuZCgidHNwYW4iKTtpZihkLnRleHQoZiksdT09PTApe2xldCBwPWQubm9kZSgpLmdldEJCb3goKTt1Kz1wLmhlaWdodH1pKz11LGQuYXR0cigieCIsZStwZSgpLnN0YXRlLm5vdGVNYXJnaW4pLGQuYXR0cigieSIscitpKzEuMjUqcGUoKS5zdGF0ZS5ub3RlTWFyZ2luKX19cmV0dXJue3RleHRXaWR0aDphLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDppfX0sIl9kcmF3TG9uZ1RleHQiKSxKV2U9bygodCxlKT0+e2UuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7bGV0IHI9ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnBhZGRpbmcpLG49ZS5hcHBlbmQoImciKSx7dGV4dFdpZHRoOmksdGV4dEhlaWdodDphfT1aV2UodCwwLDAsbik7cmV0dXJuIHIuYXR0cigiaGVpZ2h0IixhKzIqcGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxyLmF0dHIoIndpZHRoIixpK3BlKCkuc3RhdGUubm90ZU1hcmdpbioyKSxyfSwiZHJhd05vdGUiKSxoUD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZS5pZCxuPXtpZDpyLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0saT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixyKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtlLnR5cGU9PT0ic3RhcnQiJiZZV2UoaSksZS50eXBlPT09ImVuZCImJktXZShpKSwoZS50eXBlPT09ImZvcmsifHxlLnR5cGU9PT0iam9pbiIpJiZRV2UoaSxlKSxlLnR5cGU9PT0ibm90ZSImJkpXZShlLm5vdGUudGV4dCxpKSxlLnR5cGU9PT0iZGl2aWRlciImJnFXZShpKSxlLnR5cGU9PT0iZGVmYXVsdCImJmUuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJlhXZShpLGUpLGUudHlwZT09PSJkZWZhdWx0IiYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJmpXZShpLGUpO2xldCBhPWkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gbi53aWR0aD1hLndpZHRoKzIqcGUoKS5zdGF0ZS5wYWRkaW5nLG4uaGVpZ2h0PWEuaGVpZ2h0KzIqcGUoKS5zdGF0ZS5wYWRkaW5nLGgwZS5zZXQocixuKSxufSwiZHJhd1N0YXRlIiksZDBlPTAsbTBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPW8oZnVuY3Rpb24odSl7c3dpdGNoKHUpe2Nhc2Ugb2wucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBvbC5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2Ugb2wucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBvbC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fSwiZ2V0UmVsYXRpb25UeXBlIik7ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKHU9PiFOdW1iZXIuaXNOYU4odS55KSk7bGV0IGk9ZS5wb2ludHMsYT1ucygpLngoZnVuY3Rpb24odSl7cmV0dXJuIHUueH0pLnkoZnVuY3Rpb24odSl7cmV0dXJuIHUueX0pLmN1cnZlKFBvKSxzPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYShpKSkuYXR0cigiaWQiLCJlZGdlIitkMGUpLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpLGw9IiI7aWYocGUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYobD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxsPWwucmVwbGFjZSgvXCgvZywiXFwoIiksbD1sLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxzLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitsKyIjIituKG9sLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZKSsiRW5kKSIpLHIudGl0bGUhPT12b2lkIDApe2xldCB1PXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIikse3g6aCx5OmZ9PVV0LmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxkPXFlLmdldFJvd3Moci50aXRsZSkscD0wLG09W10sZz0wLHk9MDtmb3IobGV0IGI9MDtiPD1kLmxlbmd0aDtiKyspe2xldCB3PXUuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGRbYl0pLmF0dHIoIngiLGgpLmF0dHIoInkiLGYrcCksXz13Lm5vZGUoKS5nZXRCQm94KCk7Zz1NYXRoLm1heChnLF8ud2lkdGgpLHk9TWF0aC5taW4oeSxfLngpLFkuaW5mbyhfLngsaCxmK3ApLHA9PT0wJiYocD13Lm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LFkuaW5mbygiVGl0bGUgaGVpZ2h0IixwLGYpKSxtLnB1c2godyl9bGV0IHY9cCpkLmxlbmd0aDtpZihkLmxlbmd0aD4xKXtsZXQgYj0oZC5sZW5ndGgtMSkqcCouNTttLmZvckVhY2goKHcsXyk9PncuYXR0cigieSIsZitfKnAtYikpLHY9cCpkLmxlbmd0aH1sZXQgeD11Lm5vZGUoKS5nZXRCQm94KCk7dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGgtZy8yLXBlKCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixmLXYvMi1wZSgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixnK3BlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix2K3BlKCkuc3RhdGUucGFkZGluZyksWS5pbmZvKHgpfWQwZSsrfSwiZHJhd0VkZ2UiKX0pO3ZhciBibyxmUCxlWWUsdFllLHJZZSxuWWUseTBlLHYwZSx4MGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO1F2KCk7R3MoKTt1dCgpO2ZyKCk7ZzBlKCk7VnQoKTthaSgpO2ZQPXt9LGVZZT1vKGZ1bmN0aW9uKCl7fSwic2V0Q29uZiIpLHRZZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sImluc2VydE1hcmtlcnMiKSxyWWU9byhmdW5jdGlvbih0LGUscixuKXtibz1wZSgpLnN0YXRlO2xldCBpPXBlKCkuc2VjdXJpdHlMZXZlbCxhO2k9PT0ic2FuZGJveCImJihhPVZlKCIjaSIrZSkpO2xldCBzPWk9PT0ic2FuZGJveCI/VmUoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpLGw9aT09PSJzYW5kYm94Ij9hLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1kuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7bGV0IHU9cy5zZWxlY3QoYFtpZD0nJHtlfSddYCk7dFllKHUpO2xldCBoPW4uZGIuZ2V0Um9vdERvYygpO3kwZShoLHUsdm9pZCAwLCExLHMsbCxuKTtsZXQgZj1iby5wYWRkaW5nLGQ9dS5ub2RlKCkuZ2V0QkJveCgpLHA9ZC53aWR0aCtmKjIsbT1kLmhlaWdodCtmKjIsZz1wKjEuNzU7WnIodSxtLGcsYm8udXNlTWF4V2lkdGgpLHUuYXR0cigidmlld0JveCIsYCR7ZC54LWJvLnBhZGRpbmd9ICAke2QueS1iby5wYWRkaW5nfSBgK3ArIiAiK20pfSwiZHJhdyIpLG5ZZT1vKHQ9PnQ/dC5sZW5ndGgqYm8uZm9udFNpemVGYWN0b3I6MSwiZ2V0TGFiZWxXaWR0aCIpLHkwZT1vKCh0LGUscixuLGksYSxzKT0+e2xldCBsPW5ldyBJcih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLHUsaD0hMDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0uc3RtdD09PSJyZWxhdGlvbiIpe2g9ITE7YnJlYWt9cj9sLnNldEdyYXBoKHtyYW5rZGlyOiJMUiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZXI6InRpZ2h0LXRyZWUiLHJhbmtzZXA6aD8xOmJvLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpoPzE6NTAsaXNNdWx0aUdyYXBoOiEwfSk6bC5zZXRHcmFwaCh7cmFua2RpcjoiVEIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua3NlcDpoPzE6Ym8uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmg/MTo1MCxyYW5rZXI6InRpZ2h0LXRyZWUiLGlzTXVsdGlHcmFwaDohMH0pLGwuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSkscy5kYi5leHRyYWN0KHQpO2xldCBmPXMuZGIuZ2V0U3RhdGVzKCksZD1zLmRiLmdldFJlbGF0aW9ucygpLHA9T2JqZWN0LmtleXMoZiksbT0hMDtmb3IobGV0IGIgb2YgcCl7bGV0IHc9ZltiXTtyJiYody5wYXJlbnRJZD1yKTtsZXQgXztpZih3LmRvYyl7bGV0IFQ9ZS5hcHBlbmQoImciKS5hdHRyKCJpZCIsdy5pZCkuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7aWYoXz15MGUody5kb2MsVCx3LmlkLCFuLGksYSxzKSxtKXtUPXAwZShULHcsbik7bGV0IEU9VC5ub2RlKCkuZ2V0QkJveCgpO18ud2lkdGg9RS53aWR0aCxfLmhlaWdodD1FLmhlaWdodCtiby5wYWRkaW5nLzIsZlBbdy5pZF09e3k6Ym8uY29tcG9zaXRUaXRsZVNpemV9fWVsc2V7bGV0IEU9VC5ub2RlKCkuZ2V0QkJveCgpO18ud2lkdGg9RS53aWR0aCxfLmhlaWdodD1FLmhlaWdodH19ZWxzZSBfPWhQKGUsdyxsKTtpZih3Lm5vdGUpe2xldCBUPXtkZXNjcmlwdGlvbnM6W10saWQ6dy5pZCsiLW5vdGUiLG5vdGU6dy5ub3RlLHR5cGU6Im5vdGUifSxFPWhQKGUsVCxsKTt3Lm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiI/KGwuc2V0Tm9kZShfLmlkKyItbm90ZSIsRSksbC5zZXROb2RlKF8uaWQsXykpOihsLnNldE5vZGUoXy5pZCxfKSxsLnNldE5vZGUoXy5pZCsiLW5vdGUiLEUpKSxsLnNldFBhcmVudChfLmlkLF8uaWQrIi1ncm91cCIpLGwuc2V0UGFyZW50KF8uaWQrIi1ub3RlIixfLmlkKyItZ3JvdXAiKX1lbHNlIGwuc2V0Tm9kZShfLmlkLF8pfVkuZGVidWcoIkNvdW50PSIsbC5ub2RlQ291bnQoKSxsKTtsZXQgZz0wO2QuZm9yRWFjaChmdW5jdGlvbihiKXtnKyssWS5kZWJ1ZygiU2V0dGluZyBlZGdlIixiKSxsLnNldEVkZ2UoYi5pZDEsYi5pZDIse3JlbGF0aW9uOmIsd2lkdGg6blllKGIudGl0bGUpLGhlaWdodDpiby5sYWJlbEhlaWdodCpxZS5nZXRSb3dzKGIudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrZyl9KSxHdShsKSxZLmRlYnVnKCJHcmFwaCBhZnRlciBsYXlvdXQiLGwubm9kZXMoKSk7bGV0IHk9ZS5ub2RlKCk7bC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYil7YiE9PXZvaWQgMCYmbC5ub2RlKGIpIT09dm9pZCAwPyhZLndhcm4oIk5vZGUgIitiKyI6ICIrSlNPTi5zdHJpbmdpZnkobC5ub2RlKGIpKSksaS5zZWxlY3QoIiMiK3kuaWQrIiAjIitiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobC5ub2RlKGIpLngtbC5ub2RlKGIpLndpZHRoLzIpKyIsIisobC5ub2RlKGIpLnkrKGZQW2JdP2ZQW2JdLnk6MCktbC5ub2RlKGIpLmhlaWdodC8yKSsiICkiKSxpLnNlbGVjdCgiIyIreS5pZCsiICMiK2IpLmF0dHIoImRhdGEteC1zaGlmdCIsbC5ub2RlKGIpLngtbC5ub2RlKGIpLndpZHRoLzIpLGEucXVlcnlTZWxlY3RvckFsbCgiIyIreS5pZCsiICMiK2IrIiAuZGl2aWRlciIpLmZvckVhY2goXz0+e2xldCBUPV8ucGFyZW50RWxlbWVudCxFPTAsTD0wO1QmJihULnBhcmVudEVsZW1lbnQmJihFPVQucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLEw9cGFyc2VJbnQoVC5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4oTCkmJihMPTApKSxfLnNldEF0dHJpYnV0ZSgieDEiLDAtTCs4KSxfLnNldEF0dHJpYnV0ZSgieDIiLEUtTC04KX0pKTpZLmRlYnVnKCJObyBOb2RlICIrYisiOiAiK0pTT04uc3RyaW5naWZ5KGwubm9kZShiKSkpfSk7bGV0IHY9eS5nZXRCQm94KCk7bC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYil7YiE9PXZvaWQgMCYmbC5lZGdlKGIpIT09dm9pZCAwJiYoWS5kZWJ1ZygiRWRnZSAiK2IudisiIC0+ICIrYi53KyI6ICIrSlNPTi5zdHJpbmdpZnkobC5lZGdlKGIpKSksbTBlKGUsbC5lZGdlKGIpLGwuZWRnZShiKS5yZWxhdGlvbikpfSksdj15LmdldEJCb3goKTtsZXQgeD17aWQ6cnx8InJvb3QiLGxhYmVsOnJ8fCJyb290Iix3aWR0aDowLGhlaWdodDowfTtyZXR1cm4geC53aWR0aD12LndpZHRoKzIqYm8ucGFkZGluZyx4LmhlaWdodD12LmhlaWdodCsyKmJvLnBhZGRpbmcsWS5kZWJ1ZygiRG9jIHJlbmRlcmVkIix4LGwpLHh9LCJyZW5kZXJEb2MiKSx2MGU9e3NldENvbmY6ZVllLGRyYXc6clllfX0pO3ZhciBiMGU9e307dnIoYjBlLHtkaWFncmFtOigpPT5pWWV9KTt2YXIgaVllLHcwZT1NKCgpPT57InVzZSBzdHJpY3QiOyRPKCk7ZTYoKTtjUCgpO3gwZSgpO2lZZT17cGFyc2VyOkdFLGRiOm9sLHJlbmRlcmVyOnYwZSxzdHlsZXM6dDYsaW5pdDpvKHQ9Pnt0LnN0YXRlfHwodC5zdGF0ZT17fSksdC5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxvbC5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciBFMGU9e307dnIoRTBlLHtkaWFncmFtOigpPT5sWWV9KTt2YXIgbFllLFMwZT1NKCgpPT57InVzZSBzdHJpY3QiOyRPKCk7ZTYoKTtjUCgpO3RQKCk7bFllPXtwYXJzZXI6R0UsZGI6b2wscmVuZGVyZXI6S2RlLHN0eWxlczp0Nixpbml0Om8odD0+e3Quc3RhdGV8fCh0LnN0YXRlPXt9KSx0LnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLG9sLmNsZWFyKCl9LCJpbml0Iil9fSk7dmFyIGRQLF8wZSxMMGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKG09bXx8e30sZz1kLmxlbmd0aDtnLS07bVtkW2ddXT1wKTtyZXR1cm4gbX0sIm8iKSxlPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHI9WzEsOV0sbj1bMSwxMF0saT1bMSwxMV0sYT1bMSwxMl0scz1bMSwxM10sbD1bMSwxNF0sdT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihwLG0sZyx5LHYseCxiKXt2YXIgdz14Lmxlbmd0aC0xO3N3aXRjaCh2KXtjYXNlIDE6cmV0dXJuIHhbdy0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzp4W3ctMV0ucHVzaCh4W3ddKSx0aGlzLiQ9eFt3LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXhbd107YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onkuc2V0RGlhZ3JhbVRpdGxlKHhbd10uc3Vic3RyKDYpKSx0aGlzLiQ9eFt3XS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD14W3ddLnRyaW0oKSx5LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD14W3ddLnRyaW0oKSx5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjp5LmFkZFNlY3Rpb24oeFt3XS5zdWJzdHIoOCkpLHRoaXMuJD14W3ddLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnkuYWRkVGFzayh4W3ctMV0seFt3XSksdGhpcy4kPSJ0YXNrIjticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjE1LDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx7MTk6WzEsMThdfSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSksdChlLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihwLG0pe2lmKG0ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShwKTtlbHNle3ZhciBnPW5ldyBFcnJvcihwKTt0aHJvdyBnLmhhc2g9bSxnfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHApe3ZhciBtPXRoaXMsZz1bMF0seT1bXSx2PVtudWxsXSx4PVtdLGI9dGhpcy50YWJsZSx3PSIiLF89MCxUPTAsRT0wLEw9MixTPTEsQT14LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxEPXt5eTp7fX07Zm9yKHZhciBrIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaykmJihELnl5W2tdPXRoaXMueXlba10pO0kuc2V0SW5wdXQocCxELnl5KSxELnl5LmxleGVyPUksRC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSS55eWxsb2M+InUiJiYoSS55eWxsb2M9e30pO3ZhciBSPUkueXlsbG9jO3gucHVzaChSKTt2YXIgQz1JLm9wdGlvbnMmJkkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9RC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBPKEgpe2cubGVuZ3RoPWcubGVuZ3RoLTIqSCx2Lmxlbmd0aD12Lmxlbmd0aC1ILHgubGVuZ3RoPXgubGVuZ3RoLUh9byhPLCJwb3BTdGFjayIpO2Z1bmN0aW9uIE4oKXt2YXIgSDtyZXR1cm4gSD15LnBvcCgpfHxJLmxleCgpfHxTLHR5cGVvZiBIIT0ibnVtYmVyIiYmKEggaW5zdGFuY2VvZiBBcnJheSYmKHk9SCxIPXkucG9wKCkpLEg9bS5zeW1ib2xzX1tIXXx8SCksSH1vKE4sImxleCIpO2Zvcih2YXIgUCxGLEIsRyx6LFcsWj17fSxqLG9lLEssZWU7Oyl7aWYoQj1nW2cubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbQl0/Rz10aGlzLmRlZmF1bHRBY3Rpb25zW0JdOigoUD09PW51bGx8fHR5cGVvZiBQPiJ1IikmJihQPU4oKSksRz1iW0JdJiZiW0JdW1BdKSx0eXBlb2YgRz4idSJ8fCFHLmxlbmd0aHx8IUdbMF0pe3ZhciBKPSIiO2VlPVtdO2ZvcihqIGluIGJbQl0pdGhpcy50ZXJtaW5hbHNfW2pdJiZqPkwmJmVlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tqXSsiJyIpO0kuc2hvd1Bvc2l0aW9uP0o9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoXysxKStgOgpgK0kuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtlZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BdfHxQKSsiJyI6Sj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhfKzEpKyI6IFVuZXhwZWN0ZWQgIisoUD09Uz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tQXXx8UCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoSix7dGV4dDpJLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tQXXx8UCxsaW5lOkkueXlsaW5lbm8sbG9jOlIsZXhwZWN0ZWQ6ZWV9KX1pZihHWzBdaW5zdGFuY2VvZiBBcnJheSYmRy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0IrIiwgdG9rZW46ICIrUCk7c3dpdGNoKEdbMF0pe2Nhc2UgMTpnLnB1c2goUCksdi5wdXNoKEkueXl0ZXh0KSx4LnB1c2goSS55eWxsb2MpLGcucHVzaChHWzFdKSxQPW51bGwsRj8oUD1GLEY9bnVsbCk6KFQ9SS55eWxlbmcsdz1JLnl5dGV4dCxfPUkueXlsaW5lbm8sUj1JLnl5bGxvYyxFPjAmJkUtLSk7YnJlYWs7Y2FzZSAyOmlmKG9lPXRoaXMucHJvZHVjdGlvbnNfW0dbMV1dWzFdLFouJD12W3YubGVuZ3RoLW9lXSxaLl8kPXtmaXJzdF9saW5lOnhbeC5sZW5ndGgtKG9lfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6eFt4Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnhbeC5sZW5ndGgtKG9lfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhbeC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEMmJihaLl8kLnJhbmdlPVt4W3gubGVuZ3RoLShvZXx8MSldLnJhbmdlWzBdLHhbeC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxXPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShaLFt3LFQsXyxELnl5LEdbMV0sdix4XS5jb25jYXQoQSkpLHR5cGVvZiBXPCJ1IilyZXR1cm4gVztvZSYmKGc9Zy5zbGljZSgwLC0xKm9lKjIpLHY9di5zbGljZSgwLC0xKm9lKSx4PXguc2xpY2UoMCwtMSpvZSkpLGcucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tHWzFdXVswXSksdi5wdXNoKFouJCkseC5wdXNoKFouXyQpLEs9YltnW2cubGVuZ3RoLTJdXVtnW2cubGVuZ3RoLTFdXSxnLnB1c2goSyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGg9ZnVuY3Rpb24oKXt2YXIgZD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG0sZyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihtLGcpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG0pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ocCxtKXtyZXR1cm4gdGhpcy55eT1tfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1wLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXAsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXAsdGhpcy5tYXRjaGVkKz1wO3ZhciBtPXAubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBtPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxwfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHApe3ZhciBtPXAubGVuZ3RoLGc9cC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXArdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW0pLHRoaXMub2Zmc2V0LT1tO3ZhciB5PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGcubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1nLmxlbmd0aC0xKTt2YXIgdj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Zz8oZy5sZW5ndGg9PT15Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreVt5Lmxlbmd0aC1nLmxlbmd0aF0ubGVuZ3RoLWdbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1tfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3ZbMF0sdlswXSt0aGlzLnl5bGVuZy1tXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24ocCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHApKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBwPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ocC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Auc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLm1hdGNoO3JldHVybiBwLmxlbmd0aDwyMCYmKHArPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXAubGVuZ3RoKSksKHAuc3Vic3RyKDAsMjApKyhwLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5wYXN0SW5wdXQoKSxtPW5ldyBBcnJheShwLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHArdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK20rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHAsbSl7dmFyIGcseSx2O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih2PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHYueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseT1wWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx5JiYodGhpcy55eWxpbmVubys9eS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp5P3lbeS5sZW5ndGgtMV0ubGVuZ3RoLXlbeS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitwWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXBbMF0sdGhpcy5tYXRjaCs9cFswXSx0aGlzLm1hdGNoZXM9cCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShwWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1wWzBdLGc9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxnKXJldHVybiBnO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB4IGluIHYpdGhpc1t4XT12W3hdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBwLG0sZyx5O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHY9dGhpcy5fY3VycmVudFJ1bGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWlmKGc9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t2W3hdXSksZyYmKCFtfHxnWzBdLmxlbmd0aD5tWzBdLmxlbmd0aCkpe2lmKG09Zyx5PXgsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocD10aGlzLnRlc3RfbWF0Y2goZyx2W3hdKSxwIT09ITEpcmV0dXJuIHA7aWYodGhpcy5fYmFja3RyYWNrKXttPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIG0/KHA9dGhpcy50ZXN0X21hdGNoKG0sdlt5XSkscCE9PSExP3A6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5leHQoKTtyZXR1cm4gbXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24obSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKG0pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gbT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMobXx8MCksbT49MD90aGlzLmNvbmRpdGlvblN0YWNrW21dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24obSl7dGhpcy5iZWdpbihtKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYpe3ZhciB4PXY7c3dpdGNoKHkpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAxMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gNDtjYXNlIDY6cmV0dXJuIDExO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNDticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gMTc7Y2FzZSAxNTpyZXR1cm4gMTg7Y2FzZSAxNjpyZXR1cm4gMTk7Y2FzZSAxNzpyZXR1cm4iOiI7Y2FzZSAxODpyZXR1cm4gNjtjYXNlIDE5OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gZH0oKTt1LmxleGVyPWg7ZnVuY3Rpb24gZigpe3RoaXMueXk9e319cmV0dXJuIG8oZiwiUGFyc2VyIiksZi5wcm90b3R5cGU9dSx1LlBhcnNlcj1mLG5ldyBmfSgpO2RQLnBhcnNlcj1kUDtfMGU9ZFB9KTt2YXIgYTEscFAsVngsVXgsZlllLGRZZSxwWWUsbVllLGdZZSx5WWUsdlllLEQwZSx4WWUsbVAsTjBlPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtBaSgpO2ExPSIiLHBQPVtdLFZ4PVtdLFV4PVtdLGZZZT1vKGZ1bmN0aW9uKCl7cFAubGVuZ3RoPTAsVngubGVuZ3RoPTAsYTE9IiIsVXgubGVuZ3RoPTAsTHIoKX0sImNsZWFyIiksZFllPW8oZnVuY3Rpb24odCl7YTE9dCxwUC5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHBZZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHBQfSwiZ2V0U2VjdGlvbnMiKSxtWWU9byhmdW5jdGlvbigpe2xldCB0PUQwZSgpLGU9MTAwLHI9MDtmb3IoOyF0JiZyPGU7KXQ9RDBlKCkscisrO3JldHVybiBWeC5wdXNoKC4uLlV4KSxWeH0sImdldFRhc2tzIiksZ1llPW8oZnVuY3Rpb24oKXtsZXQgdD1bXTtyZXR1cm4gVnguZm9yRWFjaChyPT57ci5wZW9wbGUmJnQucHVzaCguLi5yLnBlb3BsZSl9KSxbLi4ubmV3IFNldCh0KV0uc29ydCgpfSwidXBkYXRlQWN0b3JzIikseVllPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLG49MCxpPVtdO3IubGVuZ3RoPT09MT8obj1OdW1iZXIoclswXSksaT1bXSk6KG49TnVtYmVyKHJbMF0pLGk9clsxXS5zcGxpdCgiLCIpKTtsZXQgYT1pLm1hcChsPT5sLnRyaW0oKSkscz17c2VjdGlvbjphMSx0eXBlOmExLHBlb3BsZTphLHRhc2s6dCxzY29yZTpufTtVeC5wdXNoKHMpfSwiYWRkVGFzayIpLHZZZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXtzZWN0aW9uOmExLHR5cGU6YTEsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX07VngucHVzaChlKX0sImFkZFRhc2tPcmciKSxEMGU9byhmdW5jdGlvbigpe2xldCB0PW8oZnVuY3Rpb24ocil7cmV0dXJuIFV4W3JdLnByb2Nlc3NlZH0sImNvbXBpbGVUYXNrIiksZT0hMDtmb3IobGV0W3Isbl1vZiBVeC5lbnRyaWVzKCkpdChyKSxlPWUmJm4ucHJvY2Vzc2VkO3JldHVybiBlfSwiY29tcGlsZVRhc2tzIikseFllPW8oZnVuY3Rpb24oKXtyZXR1cm4gZ1llKCl9LCJnZXRBY3RvcnMiKSxtUD17Z2V0Q29uZmlnOm8oKCk9PnBlKCkuam91cm5leSwiZ2V0Q29uZmlnIiksY2xlYXI6ZlllLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnIsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkU2VjdGlvbjpkWWUsZ2V0U2VjdGlvbnM6cFllLGdldFRhc2tzOm1ZZSxhZGRUYXNrOnlZZSxhZGRUYXNrT3JnOnZZZSxnZXRBY3RvcnM6eFllfX0pO3ZhciBiWWUsUjBlLE0wZT1NKCgpPT57InVzZSBzdHJpY3QiO2JZZT1vKHQ9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICAgIGNvbG9yOiAke3QudGV4dENvbG9yfTsKICB9CiAgLm1vdXRoIHsKICAgIHN0cm9rZTogIzY2NjsKICB9CgogIGxpbmUgewogICAgc3Ryb2tlOiAke3QudGV4dENvbG9yfQogIH0KCiAgLmxlZ2VuZCB7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CgogIC5sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICMzMzM7CiAgfQogIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn0KICB9CgogIC5mYWNlIHsKICAgICR7dC5mYWNlQ29sb3I/YGZpbGw6ICR7dC5mYWNlQ29sb3J9YDoiZmlsbDogI0ZGRjhEQyJ9OwogICAgc3Ryb2tlOiAjOTk5OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTB9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGUxfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlMn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTN9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU0fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlNX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTZ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU3fWA6IiJ9OwogIH0KCiAgLmFjdG9yLTAgewogICAgJHt0LmFjdG9yMD9gZmlsbDogJHt0LmFjdG9yMH1gOiIifTsKICB9CiAgLmFjdG9yLTEgewogICAgJHt0LmFjdG9yMT9gZmlsbDogJHt0LmFjdG9yMX1gOiIifTsKICB9CiAgLmFjdG9yLTIgewogICAgJHt0LmFjdG9yMj9gZmlsbDogJHt0LmFjdG9yMn1gOiIifTsKICB9CiAgLmFjdG9yLTMgewogICAgJHt0LmFjdG9yMz9gZmlsbDogJHt0LmFjdG9yM31gOiIifTsKICB9CiAgLmFjdG9yLTQgewogICAgJHt0LmFjdG9yND9gZmlsbDogJHt0LmFjdG9yNH1gOiIifTsKICB9CiAgLmFjdG9yLTUgewogICAgJHt0LmFjdG9yNT9gZmlsbDogJHt0LmFjdG9yNX1gOiIifTsKICB9CmAsImdldFN0eWxlcyIpLFIwZT1iWWV9KTt2YXIgZ1Asd1llLE8wZSxQMGUsVFllLGtZZSxJMGUsRVllLFNZZSxCMGUsQ1llLHMxLEYwZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7bHYoKTtnUD1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNkKHQsZSl9LCJkcmF3UmVjdCIpLHdZZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IG49dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KS5hdHRyKCJjeSIsZS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksaT10LmFwcGVuZCgiZyIpO2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeC0xNS8zKS5hdHRyKCJjeSIsZS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KzE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKTtmdW5jdGlvbiBhKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTt1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLmN4KyIsIisoZS5jeSsyKSsiKSIpfW8oYSwic21pbGUiKTtmdW5jdGlvbiBzKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoNSooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzcpKyIpIil9byhzLCJzYWQiKTtmdW5jdGlvbiBsKHUpe3UuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGUuY3gtNSkuYXR0cigieTEiLGUuY3krNykuYXR0cigieDIiLGUuY3grNSkuYXR0cigieTIiLGUuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gbyhsLCJhbWJpdmFsZW50IiksZS5zY29yZT4zP2EoaSk6ZS5zY29yZTwzP3MoaSk6bChpKSxufSwiZHJhd0ZhY2UiKSxPMGU9byhmdW5jdGlvbih0LGUpe2xldCByPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gci5hdHRyKCJjeCIsZS5jeCksci5hdHRyKCJjeSIsZS5jeSksci5hdHRyKCJjbGFzcyIsImFjdG9yLSIrZS5wb3MpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigiciIsZS5yKSxyLmNsYXNzIT09dm9pZCAwJiZyLmF0dHIoImNsYXNzIixyLmNsYXNzKSxlLnRpdGxlIT09dm9pZCAwJiZyLmFwcGVuZCgidGl0bGUiKS50ZXh0KGUudGl0bGUpLHJ9LCJkcmF3Q2lyY2xlIiksUDBlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gQVkodCxlKX0sImRyYXdUZXh0IiksVFllPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7bi5hdHRyKCJwb2ludHMiLHIoZS54LGUueSw1MCwyMCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmxhYmVsTWFyZ2luLGUueD1lLngrLjUqZS5sYWJlbE1hcmdpbixQMGUodCxlKX0sImRyYXdMYWJlbCIpLGtZZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9TmwoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPXIud2lkdGgqZS50YXNrQ291bnQrci5kaWFncmFtTWFyZ2luWCooZS50YXNrQ291bnQtMSksaS5oZWlnaHQ9ci5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsZ1AobixpKSxCMGUocikoZS50ZXh0LG4saS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxyLGUuY29sb3VyKX0sImRyYXdTZWN0aW9uIiksSTBlPS0xLEVZZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngrci53aWR0aC8yLGk9dC5hcHBlbmQoImciKTtJMGUrKztsZXQgYT0zMDArNSozMDtpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrSTBlKS5hdHRyKCJ4MSIsbikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG4pLmF0dHIoInkyIixhKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iiksd1llKGkse2N4Om4sY3k6MzAwKyg1LWUuc2NvcmUpKjMwLHNjb3JlOmUuc2NvcmV9KTtsZXQgcz1ObCgpO3MueD1lLngscy55PWUueSxzLmZpbGw9ZS5maWxsLHMud2lkdGg9ci53aWR0aCxzLmhlaWdodD1yLmhlaWdodCxzLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHMucng9MyxzLnJ5PTMsZ1AoaSxzKTtsZXQgbD1lLngrMTQ7ZS5wZW9wbGUuZm9yRWFjaCh1PT57bGV0IGg9ZS5hY3RvcnNbdV0uY29sb3IsZj17Y3g6bCxjeTplLnkscjo3LGZpbGw6aCxzdHJva2U6IiMwMDAiLHRpdGxlOnUscG9zOmUuYWN0b3JzW3VdLnBvc2l0aW9ufTtPMGUoaSxmKSxsKz0xMH0pLEIwZShyKShlLnRhc2ssaSxzLngscy55LHMud2lkdGgscy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0scixlLmNvbG91cil9LCJkcmF3VGFzayIpLFNZZT1vKGZ1bmN0aW9uKHQsZSl7aTUodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLEIwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsZCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChpKTtuKHAsZil9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGksYSxzLGwsdSxoLGYsZCxwKXtsZXR7dGFza0ZvbnRTaXplOm0sdGFza0ZvbnRGYW1pbHk6Z309ZCx5PWkuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgdj0wO3Y8eS5sZW5ndGg7disrKXtsZXQgeD12Km0tbSooeS5sZW5ndGgtMSkvMixiPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwpLmF0dHIoImZpbGwiLHApLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLG0pLnN0eWxlKCJmb250LWZhbWlseSIsZyk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscyt1LzIpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLGIuYXR0cigieSIsbCtoLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxuKGIsZil9fW8oZSwiYnlUc3BhbiIpO2Z1bmN0aW9uIHIoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgic3dpdGNoIiksZz1wLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGgpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChpKSxlKGkscCxzLGwsdSxoLGYsZCksbihnLGYpfW8ociwiYnlGbyIpO2Z1bmN0aW9uIG4oaSxhKXtmb3IobGV0IHMgaW4gYSlzIGluIGEmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksQ1llPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9LCJpbml0R3JhcGhpY3MiKSxzMT17ZHJhd1JlY3Q6Z1AsZHJhd0NpcmNsZTpPMGUsZHJhd1NlY3Rpb246a1llLGRyYXdUZXh0OlAwZSxkcmF3TGFiZWw6VFllLGRyYXdUYXNrOkVZZSxkcmF3QmFja2dyb3VuZFJlY3Q6U1llLGluaXRHcmFwaGljczpDWWV9fSk7ZnVuY3Rpb24gX1llKHQpe2xldCBlPXBlKCkuam91cm5leSxyPTYwO09iamVjdC5rZXlzKHJoKS5mb3JFYWNoKG49PntsZXQgaT1yaFtuXS5jb2xvcixhPXtjeDoyMCxjeTpyLHI6NyxmaWxsOmksc3Ryb2tlOiIjMDAwIixwb3M6cmhbbl0ucG9zaXRpb259O3MxLmRyYXdDaXJjbGUodCxhKTtsZXQgcz17eDo0MCx5OnIrNyxmaWxsOiIjNjY2Iix0ZXh0Om4sdGV4dE1hcmdpbjplLmJveFRleHRNYXJnaW58NX07czEuZHJhd1RleHQodCxzKSxyKz0yMH0pfXZhciBBWWUscmgscjYsRzAsTFllLGxsLHlQLHowZSxEWWUsdlAsRzBlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtGMGUoKTtWdCgpO2FpKCk7QVllPW8oZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtyNltyXT10W3JdfSl9LCJzZXRDb25mIikscmg9e307byhfWWUsImRyYXdBY3RvckxlZ2VuZCIpO3I2PXBlKCkuam91cm5leSxHMD1yNi5sZWZ0TWFyZ2luLExZZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXBlKCkuam91cm5leSxhPXBlKCkuc2VjdXJpdHlMZXZlbCxzO2E9PT0ic2FuZGJveCImJihzPVZlKCIjaSIrZSkpO2xldCBsPWE9PT0ic2FuZGJveCI/VmUocy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpO2xsLmluaXQoKTtsZXQgdT1sLnNlbGVjdCgiIyIrZSk7czEuaW5pdEdyYXBoaWNzKHUpO2xldCBoPW4uZGIuZ2V0VGFza3MoKSxmPW4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCksZD1uLmRiLmdldEFjdG9ycygpO2ZvcihsZXQgeCBpbiByaClkZWxldGUgcmhbeF07bGV0IHA9MDtkLmZvckVhY2goeD0+e3JoW3hdPXtjb2xvcjppLmFjdG9yQ29sb3Vyc1twJWkuYWN0b3JDb2xvdXJzLmxlbmd0aF0scG9zaXRpb246cH0scCsrfSksX1llKHUpLGxsLmluc2VydCgwLDAsRzAsT2JqZWN0LmtleXMocmgpLmxlbmd0aCo1MCksRFllKHUsaCwwKTtsZXQgbT1sbC5nZXRCb3VuZHMoKTtmJiZ1LmFwcGVuZCgidGV4dCIpLnRleHQoZikuYXR0cigieCIsRzApLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtsZXQgZz1tLnN0b3B5LW0uc3RhcnR5KzIqaS5kaWFncmFtTWFyZ2luWSx5PUcwK20uc3RvcHgrMippLmRpYWdyYW1NYXJnaW5YO1pyKHUsZyx5LGkudXNlTWF4V2lkdGgpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEcwKS5hdHRyKCJ5MSIsaS5oZWlnaHQqNCkuYXR0cigieDIiLHktRzAtNCkuYXR0cigieTIiLGkuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7bGV0IHY9Zj83MDowO3UuYXR0cigidmlld0JveCIsYCR7bS5zdGFydHh9IC0yNSAke3l9ICR7Zyt2fWApLHUuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSx1LmF0dHIoImhlaWdodCIsZyt2KzI1KX0sImRyYXciKSxsbD17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9cGUoKS5qb3VybmV5LGE9dGhpcyxzPTA7ZnVuY3Rpb24gbCh1KXtyZXR1cm4gbyhmdW5jdGlvbihmKXtzKys7bGV0IGQ9YS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1zKzE7YS51cGRhdGVWYWwoZiwic3RhcnR5IixlLWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B5IixuK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKGxsLmRhdGEsInN0YXJ0eCIsdC1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChsbC5kYXRhLCJzdG9weCIscitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSx1IT09ImFjdGl2YXRpb24iJiYoYS51cGRhdGVWYWwoZiwic3RhcnR4Iix0LWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B4IixyK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKGxsLmRhdGEsInN0YXJ0eSIsZS1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChsbC5kYXRhLCJzdG9weSIsbitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSl9LCJ1cGRhdGVJdGVtQm91bmRzIil9byhsLCJ1cGRhdGVGbiIpLHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKGwoKSl9LCJ1cGRhdGVCb3VuZHMiKSxpbnNlcnQ6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1NYXRoLm1pbih0LHIpLGE9TWF0aC5tYXgodCxyKSxzPU1hdGgubWluKGUsbiksbD1NYXRoLm1heChlLG4pO3RoaXMudXBkYXRlVmFsKGxsLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobGwuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChsbC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwobGwuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX0sImdldEJvdW5kcyIpfSx5UD1yNi5zZWN0aW9uRmlsbHMsejBlPXI2LnNlY3Rpb25Db2xvdXJzLERZZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1wZSgpLmpvdXJuZXksaT0iIixhPW4uaGVpZ2h0KjIrbi5kaWFncmFtTWFyZ2luWSxzPXIrYSxsPTAsdT0iI0NDQyIsaD0iYmxhY2siLGY9MDtmb3IobGV0W2QscF1vZiBlLmVudHJpZXMoKSl7aWYoaSE9PXAuc2VjdGlvbil7dT15UFtsJXlQLmxlbmd0aF0sZj1sJXlQLmxlbmd0aCxoPXowZVtsJXowZS5sZW5ndGhdO2xldCBnPTAseT1wLnNlY3Rpb247Zm9yKGxldCB4PWQ7eDxlLmxlbmd0aCYmZVt4XS5zZWN0aW9uPT15O3grKylnPWcrMTtsZXQgdj17eDpkKm4udGFza01hcmdpbitkKm4ud2lkdGgrRzAseTo1MCx0ZXh0OnAuc2VjdGlvbixmaWxsOnUsbnVtOmYsY29sb3VyOmgsdGFza0NvdW50Omd9O3MxLmRyYXdTZWN0aW9uKHQsdixuKSxpPXAuc2VjdGlvbixsKyt9bGV0IG09cC5wZW9wbGUucmVkdWNlKChnLHkpPT4ocmhbeV0mJihnW3ldPXJoW3ldKSxnKSx7fSk7cC54PWQqbi50YXNrTWFyZ2luK2Qqbi53aWR0aCtHMCxwLnk9cyxwLndpZHRoPW4uZGlhZ3JhbU1hcmdpblgscC5oZWlnaHQ9bi5kaWFncmFtTWFyZ2luWSxwLmNvbG91cj1oLHAuZmlsbD11LHAubnVtPWYscC5hY3RvcnM9bSxzMS5kcmF3VGFzayh0LHAsbiksbGwuaW5zZXJ0KHAueCxwLnkscC54K3Aud2lkdGgrbi50YXNrTWFyZ2luLDMwMCs1KjMwKX19LCJkcmF3VGFza3MiKSx2UD17c2V0Q29uZjpBWWUsZHJhdzpMWWV9fSk7dmFyICQwZT17fTt2cigkMGUse2RpYWdyYW06KCk9Pk5ZZX0pO3ZhciBOWWUsVjBlPU0oKCk9PnsidXNlIHN0cmljdCI7TDBlKCk7TjBlKCk7TTBlKCk7RzBlKCk7TlllPXtwYXJzZXI6XzBlLGRiOm1QLHJlbmRlcmVyOnZQLHN0eWxlczpSMGUsaW5pdDpvKHQ9Pnt2UC5zZXRDb25mKHQuam91cm5leSksbVAuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgYlAsajBlLEswZT1NKCgpPT57InVzZSBzdHJpY3QiO2JQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihwLG0sZyx5KXtmb3IoZz1nfHx7fSx5PXAubGVuZ3RoO3ktLTtnW3BbeV1dPW0pO3JldHVybiBnfSwibyIpLGU9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywyMCwyMV0scj1bMSw5XSxuPVsxLDEwXSxpPVsxLDExXSxhPVsxLDEyXSxzPVsxLDEzXSxsPVsxLDE2XSx1PVsxLDE3XSxoPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLHRpbWVsaW5lOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcscGVyaW9kX3N0YXRlbWVudDoxOCxldmVudF9zdGF0ZW1lbnQ6MTkscGVyaW9kOjIwLGV2ZW50OjIxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJ0aW1lbGluZSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDExOiJ0aXRsZSIsMTI6ImFjY190aXRsZSIsMTM6ImFjY190aXRsZV92YWx1ZSIsMTQ6ImFjY19kZXNjciIsMTU6ImFjY19kZXNjcl92YWx1ZSIsMTY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE3OiJzZWN0aW9uIiwyMDoicGVyaW9kIiwyMToiZXZlbnQifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzE4LDFdLFsxOSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYseCxiLHcpe3ZhciBfPWIubGVuZ3RoLTE7c3dpdGNoKHgpe2Nhc2UgMTpyZXR1cm4gYltfLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOmJbXy0xXS5wdXNoKGJbX10pLHRoaXMuJD1iW18tMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9YltfXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6di5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShiW19dLnN1YnN0cig2KSksdGhpcy4kPWJbX10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YltfXS50cmltKCksdi5nZXRDb21tb25EYigpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1iW19dLnRyaW0oKSx2LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOnYuYWRkU2VjdGlvbihiW19dLnN1YnN0cig4KSksdGhpcy4kPWJbX10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6di5hZGRUYXNrKGJbX10sMCwiIiksdGhpcy4kPWJbX107YnJlYWs7Y2FzZSAxNjp2LmFkZEV2ZW50KGJbX10uc3Vic3RyKDIpKSx0aGlzLiQ9YltfXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODoxNCwxOToxNSwyMDpsLDIxOnV9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTgsMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4OjE0LDE5OjE1LDIwOmwsMjE6dX0sdChlLFsyLDVdKSx0KGUsWzIsNl0pLHQoZSxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0sdChlLFsyLDExXSksdChlLFsyLDEyXSksdChlLFsyLDEzXSksdChlLFsyLDE0XSksdChlLFsyLDE1XSksdChlLFsyLDE2XSksdChlLFsyLDRdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obSxnKXtpZihnLnJlY292ZXJhYmxlKXRoaXMudHJhY2UobSk7ZWxzZXt2YXIgeT1uZXcgRXJyb3IobSk7dGhyb3cgeS5oYXNoPWcseX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihtKXt2YXIgZz10aGlzLHk9WzBdLHY9W10seD1bbnVsbF0sYj1bXSx3PXRoaXMudGFibGUsXz0iIixUPTAsRT0wLEw9MCxTPTIsQT0xLEk9Yi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxEPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksaz17eXk6e319O2Zvcih2YXIgUiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFIpJiYoay55eVtSXT10aGlzLnl5W1JdKTtELnNldElucHV0KG0say55eSksay55eS5sZXhlcj1ELGsueXkucGFyc2VyPXRoaXMsdHlwZW9mIEQueXlsbG9jPiJ1IiYmKEQueXlsbG9jPXt9KTt2YXIgQz1ELnl5bGxvYztiLnB1c2goQyk7dmFyIE89RC5vcHRpb25zJiZELm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBrLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWsueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTihxKXt5Lmxlbmd0aD15Lmxlbmd0aC0yKnEseC5sZW5ndGg9eC5sZW5ndGgtcSxiLmxlbmd0aD1iLmxlbmd0aC1xfW8oTiwicG9wU3RhY2siKTtmdW5jdGlvbiBQKCl7dmFyIHE7cmV0dXJuIHE9di5wb3AoKXx8RC5sZXgoKXx8QSx0eXBlb2YgcSE9Im51bWJlciImJihxIGluc3RhbmNlb2YgQXJyYXkmJih2PXEscT12LnBvcCgpKSxxPWcuc3ltYm9sc19bcV18fHEpLHF9byhQLCJsZXgiKTtmb3IodmFyIEYsQixHLHosVyxaLGo9e30sb2UsSyxlZSxKOzspe2lmKEc9eVt5Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0ddP3o9dGhpcy5kZWZhdWx0QWN0aW9uc1tHXTooKEY9PT1udWxsfHx0eXBlb2YgRj4idSIpJiYoRj1QKCkpLHo9d1tHXSYmd1tHXVtGXSksdHlwZW9mIHo+InUifHwhei5sZW5ndGh8fCF6WzBdKXt2YXIgSD0iIjtKPVtdO2ZvcihvZSBpbiB3W0ddKXRoaXMudGVybWluYWxzX1tvZV0mJm9lPlMmJkoucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW29lXSsiJyIpO0Quc2hvd1Bvc2l0aW9uP0g9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVCsxKStgOgpgK0Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtKLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bRl18fEYpKyInIjpIPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFQrMSkrIjogVW5leHBlY3RlZCAiKyhGPT1BPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0ZdfHxGKSsiJyIpLHRoaXMucGFyc2VFcnJvcihILHt0ZXh0OkQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0ZdfHxGLGxpbmU6RC55eWxpbmVubyxsb2M6QyxleHBlY3RlZDpKfSl9aWYoelswXWluc3RhbmNlb2YgQXJyYXkmJnoubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitHKyIsIHRva2VuOiAiK0YpO3N3aXRjaCh6WzBdKXtjYXNlIDE6eS5wdXNoKEYpLHgucHVzaChELnl5dGV4dCksYi5wdXNoKEQueXlsbG9jKSx5LnB1c2goelsxXSksRj1udWxsLEI/KEY9QixCPW51bGwpOihFPUQueXlsZW5nLF89RC55eXRleHQsVD1ELnl5bGluZW5vLEM9RC55eWxsb2MsTD4wJiZMLS0pO2JyZWFrO2Nhc2UgMjppZihLPXRoaXMucHJvZHVjdGlvbnNfW3pbMV1dWzFdLGouJD14W3gubGVuZ3RoLUtdLGouXyQ9e2ZpcnN0X2xpbmU6YltiLmxlbmd0aC0oS3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmJbYi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpiW2IubGVuZ3RoLShLfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmJbYi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LE8mJihqLl8kLnJhbmdlPVtiW2IubGVuZ3RoLShLfHwxKV0ucmFuZ2VbMF0sYltiLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFo9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGosW18sRSxULGsueXkselsxXSx4LGJdLmNvbmNhdChJKSksdHlwZW9mIFo8InUiKXJldHVybiBaO0smJih5PXkuc2xpY2UoMCwtMSpLKjIpLHg9eC5zbGljZSgwLC0xKkspLGI9Yi5zbGljZSgwLC0xKkspKSx5LnB1c2godGhpcy5wcm9kdWN0aW9uc19belsxXV1bMF0pLHgucHVzaChqLiQpLGIucHVzaChqLl8kKSxlZT13W3lbeS5sZW5ndGgtMl1dW3lbeS5sZW5ndGgtMV1dLHkucHVzaChlZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGY9ZnVuY3Rpb24oKXt2YXIgcD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGcseSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihnLHkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGcpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24obSxnKXtyZXR1cm4gdGhpcy55eT1nfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1tLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW0sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPW0sdGhpcy5tYXRjaGVkKz1tO3ZhciBnPW0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBnPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxtfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKG0pe3ZhciBnPW0ubGVuZ3RoLHk9bS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW0rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWcpLHRoaXMub2Zmc2V0LT1nO3ZhciB2PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT15Lmxlbmd0aC0xKTt2YXIgeD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46eT8oeS5sZW5ndGg9PT12Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrdlt2Lmxlbmd0aC15Lmxlbmd0aF0ubGVuZ3RoLXlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1nfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3hbMF0seFswXSt0aGlzLnl5bGVuZy1nXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24obSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG0pKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obS5sZW5ndGg+MjA/Ii4uLiI6IiIpK20uc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLm1hdGNoO3JldHVybiBtLmxlbmd0aDwyMCYmKG0rPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW0ubGVuZ3RoKSksKG0uc3Vic3RyKDAsMjApKyhtLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5wYXN0SW5wdXQoKSxnPW5ldyBBcnJheShtLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIG0rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2crIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKG0sZyl7dmFyIHksdix4O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih4PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksdj1tWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx2JiYodGhpcy55eWxpbmVubys9di5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp2P3Zbdi5sZW5ndGgtMV0ubGVuZ3RoLXZbdi5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbittWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPW1bMF0sdGhpcy5tYXRjaCs9bVswXSx0aGlzLm1hdGNoZXM9bSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShtWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1tWzBdLHk9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx5KXJldHVybiB5O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBiIGluIHgpdGhpc1tiXT14W2JdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBtLGcseSx2O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHg9dGhpcy5fY3VycmVudFJ1bGVzKCksYj0wO2I8eC5sZW5ndGg7YisrKWlmKHk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t4W2JdXSkseSYmKCFnfHx5WzBdLmxlbmd0aD5nWzBdLmxlbmd0aCkpe2lmKGc9eSx2PWIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYobT10aGlzLnRlc3RfbWF0Y2goeSx4W2JdKSxtIT09ITEpcmV0dXJuIG07aWYodGhpcy5fYmFja3RyYWNrKXtnPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGc/KG09dGhpcy50ZXN0X21hdGNoKGcseFt2XSksbSE9PSExP206ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgZz10aGlzLm5leHQoKTtyZXR1cm4gZ3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oZyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGcpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gZz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGcpe3JldHVybiBnPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoZ3x8MCksZz49MD90aGlzLmNvbmRpdGlvblN0YWNrW2ddOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oZyl7dGhpcy5iZWdpbihnKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGcseSx2LHgpe3ZhciBiPXg7c3dpdGNoKHYpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAxMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gNDtjYXNlIDY6cmV0dXJuIDExO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNDticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gMTc7Y2FzZSAxNTpyZXR1cm4gMjE7Y2FzZSAxNjpyZXR1cm4gMjA7Y2FzZSAxNzpyZXR1cm4gNjtjYXNlIDE4OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OnRpbWVsaW5lXGIpL2ksL14oPzp0aXRsZVxzW15cbl0rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXjpcbl0rKS9pLC9eKD86OlxzW146XG5dKykvaSwvXig/OlteIzpcbl0rKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywxOF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBwfSgpO2gubGV4ZXI9ZjtmdW5jdGlvbiBkKCl7dGhpcy55eT17fX1yZXR1cm4gbyhkLCJQYXJzZXIiKSxkLnByb3RvdHlwZT1oLGguUGFyc2VyPWQsbmV3IGR9KCk7YlAucGFyc2VyPWJQO2owZT1iUH0pO3ZhciBUUD17fTt2cihUUCx7YWRkRXZlbnQ6KCk9PmFwZSxhZGRTZWN0aW9uOigpPT50cGUsYWRkVGFzazooKT0+aXBlLGFkZFRhc2tPcmc6KCk9PnNwZSxjbGVhcjooKT0+ZXBlLGRlZmF1bHQ6KCk9PkdZZSxnZXRDb21tb25EYjooKT0+SjBlLGdldFNlY3Rpb25zOigpPT5ycGUsZ2V0VGFza3M6KCk9Pm5wZX0pO3ZhciBvMSxaMGUsd1AsbjYsbDEsSjBlLGVwZSx0cGUscnBlLG5wZSxpcGUsYXBlLHNwZSxRMGUsR1llLG9wZT1NKCgpPT57InVzZSBzdHJpY3QiO0FpKCk7bzE9IiIsWjBlPTAsd1A9W10sbjY9W10sbDE9W10sSjBlPW8oKCk9Pnh5LCJnZXRDb21tb25EYiIpLGVwZT1vKGZ1bmN0aW9uKCl7d1AubGVuZ3RoPTAsbjYubGVuZ3RoPTAsbzE9IiIsbDEubGVuZ3RoPTAsTHIoKX0sImNsZWFyIiksdHBlPW8oZnVuY3Rpb24odCl7bzE9dCx3UC5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHJwZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHdQfSwiZ2V0U2VjdGlvbnMiKSxucGU9byhmdW5jdGlvbigpe2xldCB0PVEwZSgpLGU9MTAwLHI9MDtmb3IoOyF0JiZyPGU7KXQ9UTBlKCkscisrO3JldHVybiBuNi5wdXNoKC4uLmwxKSxuNn0sImdldFRhc2tzIiksaXBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXtpZDpaMGUrKyxzZWN0aW9uOm8xLHR5cGU6bzEsdGFzazp0LHNjb3JlOmV8fDAsZXZlbnRzOnI/W3JdOltdfTtsMS5wdXNoKG4pfSwiYWRkVGFzayIpLGFwZT1vKGZ1bmN0aW9uKHQpe2wxLmZpbmQocj0+ci5pZD09PVowZS0xKS5ldmVudHMucHVzaCh0KX0sImFkZEV2ZW50Iiksc3BlPW8oZnVuY3Rpb24odCl7bGV0IGU9e3NlY3Rpb246bzEsdHlwZTpvMSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTtuNi5wdXNoKGUpfSwiYWRkVGFza09yZyIpLFEwZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9byhmdW5jdGlvbihyKXtyZXR1cm4gbDFbcl0ucHJvY2Vzc2VkfSwiY29tcGlsZVRhc2siKSxlPSEwO2ZvcihsZXRbcixuXW9mIGwxLmVudHJpZXMoKSl0KHIpLGU9ZSYmbi5wcm9jZXNzZWQ7cmV0dXJuIGV9LCJjb21waWxlVGFza3MiKSxHWWU9e2NsZWFyOmVwZSxnZXRDb21tb25EYjpKMGUsYWRkU2VjdGlvbjp0cGUsZ2V0U2VjdGlvbnM6cnBlLGdldFRhc2tzOm5wZSxhZGRUYXNrOmlwZSxhZGRUYXNrT3JnOnNwZSxhZGRFdmVudDphcGV9fSk7ZnVuY3Rpb24gaHBlKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9VmUodGhpcyksbj1yLnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSxpLGE9W10scz0xLjEsbD1yLmF0dHIoInkiKSx1PXBhcnNlRmxvYXQoci5hdHRyKCJkeSIpKSxoPXIudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsbCkuYXR0cigiZHkiLHUrImVtIik7Zm9yKGxldCBmPTA7ZjxuLmxlbmd0aDtmKyspaT1uW24ubGVuZ3RoLTEtZl0sYS5wdXNoKGkpLGgudGV4dChhLmpvaW4oIiAiKS50cmltKCkpLChoLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5lfHxpPT09Ijxicj4iKSYmKGEucG9wKCksaC50ZXh0KGEuam9pbigiICIpLnRyaW0oKSksaT09PSI8YnI+Ij9hPVsiIl06YT1baV0saD1yLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixsKS5hdHRyKCJkeSIscysiZW0iKS50ZXh0KGkpKX0pfXZhciAkWWUsaTYsVlllLFVZZSxjcGUsSFllLFdZZSxscGUsWVllLHFZZSxYWWUsa1AsdXBlLGpZZSxLWWUsUVllLFpZZSxBZixmcGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpOyRZZT0xMixpNj1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoInJlY3QiKTtyZXR1cm4gci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksci5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxyLmF0dHIoIndpZHRoIixlLndpZHRoKSxyLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLHIuYXR0cigicngiLGUucngpLHIuYXR0cigicnkiLGUucnkpLGUuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHJ9LCJkcmF3UmVjdCIpLFZZZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IG49dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KS5hdHRyKCJjeSIsZS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksaT10LmFwcGVuZCgiZyIpO2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeC0xNS8zKS5hdHRyKCJjeSIsZS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KzE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKTtmdW5jdGlvbiBhKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTt1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLmN4KyIsIisoZS5jeSsyKSsiKSIpfW8oYSwic21pbGUiKTtmdW5jdGlvbiBzKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoNSooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzcpKyIpIil9byhzLCJzYWQiKTtmdW5jdGlvbiBsKHUpe3UuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGUuY3gtNSkuYXR0cigieTEiLGUuY3krNykuYXR0cigieDIiLGUuY3grNSkuYXR0cigieTIiLGUuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gbyhsLCJhbWJpdmFsZW50IiksZS5zY29yZT4zP2EoaSk6ZS5zY29yZTwzP3MoaSk6bChpKSxufSwiZHJhd0ZhY2UiKSxVWWU9byhmdW5jdGlvbih0LGUpe2xldCByPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gci5hdHRyKCJjeCIsZS5jeCksci5hdHRyKCJjeSIsZS5jeSksci5hdHRyKCJjbGFzcyIsImFjdG9yLSIrZS5wb3MpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigiciIsZS5yKSxyLmNsYXNzIT09dm9pZCAwJiZyLmF0dHIoImNsYXNzIixyLmNsYXNzKSxlLnRpdGxlIT09dm9pZCAwJiZyLmFwcGVuZCgidGl0bGUiKS50ZXh0KGUudGl0bGUpLHJ9LCJkcmF3Q2lyY2xlIiksY3BlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnRleHQucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLG49dC5hcHBlbmQoInRleHQiKTtuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxuLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLGUuY2xhc3MhPT12b2lkIDAmJm4uYXR0cigiY2xhc3MiLGUuY2xhc3MpO2xldCBpPW4uYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBpLmF0dHIoIngiLGUueCtlLnRleHRNYXJnaW4qMiksaS50ZXh0KHIpLG59LCJkcmF3VGV4dCIpLEhZZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO24uYXR0cigicG9pbnRzIixyKGUueCxlLnksNTAsMjAsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5sYWJlbE1hcmdpbixlLng9ZS54Ky41KmUubGFiZWxNYXJnaW4sY3BlKHQsZSl9LCJkcmF3TGFiZWwiKSxXWWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5hcHBlbmQoImciKSxpPWtQKCk7aS54PWUueCxpLnk9ZS55LGkuZmlsbD1lLmZpbGwsaS53aWR0aD1yLndpZHRoLGkuaGVpZ2h0PXIuaGVpZ2h0LGkuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bSxpLnJ4PTMsaS5yeT0zLGk2KG4saSksdXBlKHIpKGUudGV4dCxuLGkueCxpLnksaS53aWR0aCxpLmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bX0scixlLmNvbG91cil9LCJkcmF3U2VjdGlvbiIpLGxwZT0tMSxZWWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZS54K3Iud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7bHBlKys7bGV0IGE9MzAwKzUqMzA7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK2xwZSkuYXR0cigieDEiLG4pLmF0dHIoInkxIixlLnkpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIsYSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFZZZShpLHtjeDpuLGN5OjMwMCsoNS1lLnNjb3JlKSozMCxzY29yZTplLnNjb3JlfSk7bGV0IHM9a1AoKTtzLng9ZS54LHMueT1lLnkscy5maWxsPWUuZmlsbCxzLndpZHRoPXIud2lkdGgscy5oZWlnaHQ9ci5oZWlnaHQscy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxzLnJ4PTMscy5yeT0zLGk2KGkscyksdXBlKHIpKGUudGFzayxpLHMueCxzLnkscy53aWR0aCxzLmhlaWdodCx7Y2xhc3M6InRhc2sifSxyLGUuY29sb3VyKX0sImRyYXdUYXNrIikscVllPW8oZnVuY3Rpb24odCxlKXtpNih0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksWFllPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LCJnZXRUZXh0T2JqIiksa1A9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LCJnZXROb3RlUmVjdCIpLHVwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsZCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChpKTtuKHAsZil9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGksYSxzLGwsdSxoLGYsZCxwKXtsZXR7dGFza0ZvbnRTaXplOm0sdGFza0ZvbnRGYW1pbHk6Z309ZCx5PWkuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgdj0wO3Y8eS5sZW5ndGg7disrKXtsZXQgeD12Km0tbSooeS5sZW5ndGgtMSkvMixiPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwpLmF0dHIoImZpbGwiLHApLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLG0pLnN0eWxlKCJmb250LWZhbWlseSIsZyk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscyt1LzIpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLGIuYXR0cigieSIsbCtoLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxuKGIsZil9fW8oZSwiYnlUc3BhbiIpO2Z1bmN0aW9uIHIoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgic3dpdGNoIiksZz1wLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGgpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChpKSxlKGkscCxzLGwsdSxoLGYsZCksbihnLGYpfW8ociwiYnlGbyIpO2Z1bmN0aW9uIG4oaSxhKXtmb3IobGV0IHMgaW4gYSlzIGluIGEmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksalllPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9LCJpbml0R3JhcGhpY3MiKTtvKGhwZSwid3JhcCIpO0tZZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXIlJFllLTEsYT10LmFwcGVuZCgiZyIpO2Uuc2VjdGlvbj1pLGEuYXR0cigiY2xhc3MiLChlLmNsYXNzP2UuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK2kpKTtsZXQgcz1hLmFwcGVuZCgiZyIpLGw9YS5hcHBlbmQoImciKSxoPWwuYXBwZW5kKCJ0ZXh0IikudGV4dChlLmRlc2NyKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGhwZSxlLndpZHRoKS5ub2RlKCkuZ2V0QkJveCgpLGY9bi5mb250U2l6ZT8ucmVwbGFjZT9uLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6bi5mb250U2l6ZTtyZXR1cm4gZS5oZWlnaHQ9aC5oZWlnaHQrZioxLjEqLjUrZS5wYWRkaW5nLGUuaGVpZ2h0PU1hdGgubWF4KGUuaGVpZ2h0LGUubWF4SGVpZ2h0KSxlLndpZHRoPWUud2lkdGgrMiplLnBhZGRpbmcsbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLndpZHRoLzIrIiwgIitlLnBhZGRpbmcvMisiKSIpLFpZZShzLGUsaSxuKSxlfSwiZHJhd05vZGUiKSxRWWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5hcHBlbmQoImciKSxhPW4uYXBwZW5kKCJ0ZXh0IikudGV4dChlLmRlc2NyKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGhwZSxlLndpZHRoKS5ub2RlKCkuZ2V0QkJveCgpLHM9ci5mb250U2l6ZT8ucmVwbGFjZT9yLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6ci5mb250U2l6ZTtyZXR1cm4gbi5yZW1vdmUoKSxhLmhlaWdodCtzKjEuMSouNStlLnBhZGRpbmd9LCJnZXRWaXJ0dWFsTm9kZUhlaWdodCIpLFpZZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2UudHlwZSkuYXR0cigiZCIsYE0wICR7ZS5oZWlnaHQtNX0gdiR7LWUuaGVpZ2h0KzIqNX0gcTAsLTUgNSwtNSBoJHtlLndpZHRoLTIqNX0gcTUsMCA1LDUgdiR7ZS5oZWlnaHQtNX0gSDAgWmApLHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJub2RlLWxpbmUtIityKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLGUuaGVpZ2h0KS5hdHRyKCJ4MiIsZS53aWR0aCkuYXR0cigieTIiLGUuaGVpZ2h0KX0sImRlZmF1bHRCa2ciKSxBZj17ZHJhd1JlY3Q6aTYsZHJhd0NpcmNsZTpVWWUsZHJhd1NlY3Rpb246V1llLGRyYXdUZXh0OmNwZSxkcmF3TGFiZWw6SFllLGRyYXdUYXNrOllZZSxkcmF3QmFja2dyb3VuZFJlY3Q6cVllLGdldFRleHRPYmo6WFllLGdldE5vdGVSZWN0OmtQLGluaXRHcmFwaGljczpqWWUsZHJhd05vZGU6S1llLGdldFZpcnR1YWxOb2RlSGVpZ2h0OlFZZX19KTt2YXIgSlllLGRwZSxlcWUscHBlLG1wZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7ZnBlKCk7dXQoKTtWdCgpO2FpKCk7SlllPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9cGUoKSxhPWkubGVmdE1hcmdpbj8/NTA7WS5kZWJ1ZygidGltZWxpbmUiLG4uZGIpO2xldCBzPWkuc2VjdXJpdHlMZXZlbCxsO3M9PT0ic2FuZGJveCImJihsPVZlKCIjaSIrZSkpO2xldCBoPShzPT09InNhbmRib3giP1ZlKGwubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6VmUoImJvZHkiKSkuc2VsZWN0KCIjIitlKTtoLmFwcGVuZCgiZyIpO2xldCBmPW4uZGIuZ2V0VGFza3MoKSxkPW4uZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtZLmRlYnVnKCJ0YXNrIixmKSxBZi5pbml0R3JhcGhpY3MoaCk7bGV0IHA9bi5kYi5nZXRTZWN0aW9ucygpO1kuZGVidWcoInNlY3Rpb25zIixwKTtsZXQgbT0wLGc9MCx5PTAsdj0wLHg9NTArYSxiPTUwO3Y9NTA7bGV0IHc9MCxfPSEwO3AuZm9yRWFjaChmdW5jdGlvbihBKXtsZXQgST17bnVtYmVyOncsZGVzY3I6QSxzZWN0aW9uOncsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19LEQ9QWYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxJLGkpO1kuZGVidWcoInNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLEQpLG09TWF0aC5tYXgobSxEKzIwKX0pO2xldCBUPTAsRT0wO1kuZGVidWcoInRhc2tzLmxlbmd0aCIsZi5sZW5ndGgpO2ZvcihsZXRbQSxJXW9mIGYuZW50cmllcygpKXtsZXQgRD17bnVtYmVyOkEsZGVzY3I6SSxzZWN0aW9uOkkuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Z30saz1BZi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLEQsaSk7WS5kZWJ1ZygidGFza0hlaWdodCBiZWZvcmUgZHJhdyIsayksZz1NYXRoLm1heChnLGsrMjApLFQ9TWF0aC5tYXgoVCxJLmV2ZW50cy5sZW5ndGgpO2xldCBSPTA7Zm9yKGxldCBDIG9mIEkuZXZlbnRzKXtsZXQgTz17ZGVzY3I6QyxzZWN0aW9uOkkuc2VjdGlvbixudW1iZXI6SS5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07Uis9QWYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxPLGkpfUU9TWF0aC5tYXgoRSxSKX1ZLmRlYnVnKCJtYXhTZWN0aW9uSGVpZ2h0IGJlZm9yZSBkcmF3IixtKSxZLmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixnKSxwJiZwLmxlbmd0aD4wP3AuZm9yRWFjaChBPT57bGV0IEk9Zi5maWx0ZXIoQz0+Qy5zZWN0aW9uPT09QSksRD17bnVtYmVyOncsZGVzY3I6QSxzZWN0aW9uOncsd2lkdGg6MjAwKk1hdGgubWF4KEkubGVuZ3RoLDEpLTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19O1kuZGVidWcoInNlY3Rpb25Ob2RlIixEKTtsZXQgaz1oLmFwcGVuZCgiZyIpLFI9QWYuZHJhd05vZGUoayxELHcsaSk7WS5kZWJ1Zygic2VjdGlvbk5vZGUgb3V0cHV0IixSKSxrLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3h9LCAke3Z9KWApLGIrPW0rNTAsSS5sZW5ndGg+MCYmZHBlKGgsSSx3LHgsYixnLGksVCxFLG0sITEpLHgrPTIwMCpNYXRoLm1heChJLmxlbmd0aCwxKSxiPXYsdysrfSk6KF89ITEsZHBlKGgsZix3LHgsYixnLGksVCxFLG0sITApKTtsZXQgTD1oLm5vZGUoKS5nZXRCQm94KCk7WS5kZWJ1ZygiYm91bmRzIixMKSxkJiZoLmFwcGVuZCgidGV4dCIpLnRleHQoZCkuYXR0cigieCIsTC53aWR0aC8yLWEpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSx5PV8/bStnKzE1MDpnKzEwMCxoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZVdyYXBwZXIiKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHkpLmF0dHIoIngyIixMLndpZHRoKzMqYSkuYXR0cigieTIiLHkpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIiksSW8odm9pZCAwLGgsaS50aW1lbGluZT8ucGFkZGluZz8/NTAsaS50aW1lbGluZT8udXNlTWF4V2lkdGg/PyExKX0sImRyYXciKSxkcGU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSxoLGYpe2ZvcihsZXQgZCBvZiBlKXtsZXQgcD17ZGVzY3I6ZC50YXNrLHNlY3Rpb246cixudW1iZXI6cix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6YX07WS5kZWJ1ZygidGFza05vZGUiLHApO2xldCBtPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0YXNrV3JhcHBlciIpLHk9QWYuZHJhd05vZGUobSxwLHIscykuaGVpZ2h0O2lmKFkuZGVidWcoInRhc2tIZWlnaHQgYWZ0ZXIgZHJhdyIseSksbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtufSwgJHtpfSlgKSxhPU1hdGgubWF4KGEseSksZC5ldmVudHMpe2xldCB2PXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpLHg9YTtpKz0xMDAseD14K2VxZSh0LGQuZXZlbnRzLHIsbixpLHMpLGktPTEwMCx2LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixuKzE5MC8yKS5hdHRyKCJ5MSIsaSthKS5hdHRyKCJ4MiIsbisxOTAvMikuYXR0cigieTIiLGkrYSsoZj9hOmgpK3UrMTIwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI1LDUiKX1uPW4rMjAwLGYmJiFzLnRpbWVsaW5lPy5kaXNhYmxlTXVsdGljb2xvciYmcisrfWk9aS0xMH0sImRyYXdUYXNrcyIpLGVxZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtsZXQgcz0wLGw9aTtpPWkrMTAwO2ZvcihsZXQgdSBvZiBlKXtsZXQgaD17ZGVzY3I6dSxzZWN0aW9uOnIsbnVtYmVyOnIsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtZLmRlYnVnKCJldmVudE5vZGUiLGgpO2xldCBmPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJldmVudFdyYXBwZXIiKSxwPUFmLmRyYXdOb2RlKGYsaCxyLGEpLmhlaWdodDtzPXMrcCxmLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLGk9aSsxMCtwfXJldHVybiBpPWwsc30sImRyYXdFdmVudHMiKSxwcGU9e3NldENvbmY6bygoKT0+e30sInNldENvbmYiKSxkcmF3OkpZZX19KTt2YXIgdHFlLHJxZSxncGUseXBlPU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTt0cWU9byh0PT57bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0WyJsaW5lQ29sb3IiK3JdPXRbImxpbmVDb2xvciIrcl18fHRbImNTY2FsZUludiIrcl0sZmEodFsibGluZUNvbG9yIityXSk/dFsibGluZUNvbG9yIityXT1fdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTp0WyJsaW5lQ29sb3IiK3JdPUl0KHRbImxpbmVDb2xvciIrcl0sMjApO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspe2xldCBuPSIiKygxNy0zKnIpO2UrPWAKICAgIC5zZWN0aW9uLSR7ci0xfSByZWN0LCAuc2VjdGlvbi0ke3ItMX0gcGF0aCwgLnNlY3Rpb24tJHtyLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtyLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7ci0xfSB0ZXh0IHsKICAgICBmaWxsOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7ci0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtyLTF9ewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke3ItMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtufTsKICAgIH0KICAgIC5zZWN0aW9uLSR7ci0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUludiIrcl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLHJxZT1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7dHFlKHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSAgewogICAgZmlsbDogJHt0LmdpdDB9OwogIH0KICAuc2VjdGlvbi1yb290IHRleHQgewogICAgZmlsbDogJHt0LmdpdEJyYW5jaExhYmVsMH07CiAgfQogIC5pY29uLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6MTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5lZGdlIHsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5ldmVudFdyYXBwZXIgIHsKICAgZmlsdGVyOiBicmlnaHRuZXNzKDEyMCUpOwogIH0KYCwiZ2V0U3R5bGVzIiksZ3BlPXJxZX0pO3ZhciB2cGU9e307dnIodnBlLHtkaWFncmFtOigpPT5ucWV9KTt2YXIgbnFlLHhwZT1NKCgpPT57InVzZSBzdHJpY3QiO0swZSgpO29wZSgpO21wZSgpO3lwZSgpO25xZT17ZGI6VFAscmVuZGVyZXI6cHBlLHBhcnNlcjpqMGUsc3R5bGVzOmdwZX19KTt2YXIgRVAsVHBlLGtwZT1NKCgpPT57InVzZSBzdHJpY3QiO0VQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihfLFQsRSxMKXtmb3IoRT1FfHx7fSxMPV8ubGVuZ3RoO0wtLTtFW19bTF1dPVQpO3JldHVybiBFfSwibyIpLGU9WzEsNF0scj1bMSwxM10sbj1bMSwxMl0saT1bMSwxNV0sYT1bMSwxNl0scz1bMSwyMF0sbD1bMSwxOV0sdT1bNiw3LDhdLGg9WzEsMjZdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzYsNywxMV0sbT1bMSw2LDEzLDE1LDE2LDE5LDIyXSxnPVsxLDMzXSx5PVsxLDM0XSx2PVsxLDYsNywxMSwxMywxNSwxNiwxOSwyMl0seD17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oVCxFLEwsUyxBLEksRCl7dmFyIGs9SS5sZW5ndGgtMTtzd2l0Y2goQSl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gUztjYXNlIDg6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpTLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOlMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OlMuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixJW2tdLmlkKSxTLmFkZE5vZGUoSVtrLTFdLmxlbmd0aCxJW2tdLmlkLElba10uZGVzY3IsSVtrXS50eXBlKTticmVhaztjYXNlIDE2OlMuZ2V0TG9nZ2VyKCkudHJhY2UoIkljb246ICIsSVtrXSksUy5kZWNvcmF0ZU5vZGUoe2ljb246SVtrXX0pO2JyZWFrO2Nhc2UgMTc6Y2FzZSAyMTpTLmRlY29yYXRlTm9kZSh7Y2xhc3M6SVtrXX0pO2JyZWFrO2Nhc2UgMTg6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSVNUIik7YnJlYWs7Y2FzZSAxOTpTLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLElba10uaWQpLFMuYWRkTm9kZSgwLElba10uaWQsSVtrXS5kZXNjcixJW2tdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6Uy5kZWNvcmF0ZU5vZGUoe2ljb246SVtrXX0pO2JyZWFrO2Nhc2UgMjU6Uy5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsSVtrLTJdKSx0aGlzLiQ9e2lkOklbay0xXSxkZXNjcjpJW2stMV0sdHlwZTpTLmdldFR5cGUoSVtrLTJdLElba10pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6SVtrXSxkZXNjcjpJW2tdLHR5cGU6Uy5ub2RlVHlwZS5ERUZBVUxUfTticmVhaztjYXNlIDI3OlMuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLElbay0zXSksdGhpcy4kPXtpZDpJW2stM10sZGVzY3I6SVtrLTFdLHR5cGU6Uy5nZXRUeXBlKElbay0yXSxJW2tdKX07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjJdLHsxNzoxNywxODoxOCwxNDoyNywxNTpbMSwyOF0sMTY6WzEsMjldLDE5OnMsMjI6bH0pLHQocCxbMiwxOF0pLHQocCxbMiwxOV0pLHQocCxbMiwyMF0pLHQocCxbMiwyMV0pLHQocCxbMiwyM10pLHQocCxbMiwyNF0pLHQocCxbMiwyNl0sezE5OlsxLDMwXX0pLHsyMDpbMSwzMV19LHs2OmgsNzpmLDEwOjMyLDExOmR9LHsxOlsyLDddLDY6ciwxMjoyMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHQobSxbMiwxNF0sezc6ZywxMTp5fSksdCh2LFsyLDhdKSx0KHYsWzIsOV0pLHQodixbMiwxMF0pLHQocCxbMiwxNV0pLHQocCxbMiwxNl0pLHQocCxbMiwxN10pLHsyMDpbMSwzNV19LHsyMTpbMSwzNl19LHQobSxbMiwxM10sezc6ZywxMTp5fSksdCh2LFsyLDExXSksdCh2LFsyLDEyXSksezIxOlsxLDM3XX0sdChwLFsyLDI1XSksdChwLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihULEUpe2lmKEUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShUKTtlbHNle3ZhciBMPW5ldyBFcnJvcihUKTt0aHJvdyBMLmhhc2g9RSxMfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFQpe3ZhciBFPXRoaXMsTD1bMF0sUz1bXSxBPVtudWxsXSxJPVtdLEQ9dGhpcy50YWJsZSxrPSIiLFI9MCxDPTAsTz0wLE49MixQPTEsRj1JLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEI9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxHPXt5eTp7fX07Zm9yKHZhciB6IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseikmJihHLnl5W3pdPXRoaXMueXlbel0pO0Iuc2V0SW5wdXQoVCxHLnl5KSxHLnl5LmxleGVyPUIsRy55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQi55eWxsb2M+InUiJiYoQi55eWxsb2M9e30pO3ZhciBXPUIueXlsbG9jO0kucHVzaChXKTt2YXIgWj1CLm9wdGlvbnMmJkIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Ry55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBqKGtlKXtMLmxlbmd0aD1MLmxlbmd0aC0yKmtlLEEubGVuZ3RoPUEubGVuZ3RoLWtlLEkubGVuZ3RoPUkubGVuZ3RoLWtlfW8oaiwicG9wU3RhY2siKTtmdW5jdGlvbiBvZSgpe3ZhciBrZTtyZXR1cm4ga2U9Uy5wb3AoKXx8Qi5sZXgoKXx8UCx0eXBlb2Yga2UhPSJudW1iZXIiJiYoa2UgaW5zdGFuY2VvZiBBcnJheSYmKFM9a2Usa2U9Uy5wb3AoKSksa2U9RS5zeW1ib2xzX1trZV18fGtlKSxrZX1vKG9lLCJsZXgiKTtmb3IodmFyIEssZWUsSixILHEsUSxhZT17fSx1ZSxjZSx0ZSxOZTs7KXtpZihKPUxbTC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tKXT9IPXRoaXMuZGVmYXVsdEFjdGlvbnNbSl06KChLPT09bnVsbHx8dHlwZW9mIEs+InUiKSYmKEs9b2UoKSksSD1EW0pdJiZEW0pdW0tdKSx0eXBlb2YgSD4idSJ8fCFILmxlbmd0aHx8IUhbMF0pe3ZhciBzZT0iIjtOZT1bXTtmb3IodWUgaW4gRFtKXSl0aGlzLnRlcm1pbmFsc19bdWVdJiZ1ZT5OJiZOZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bdWVdKyInIik7Qi5zaG93UG9zaXRpb24/c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUisxKStgOgpgK0Iuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtOZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0tdfHxLKSsiJyI6c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUisxKSsiOiBVbmV4cGVjdGVkICIrKEs9PVA/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bS118fEspKyInIiksdGhpcy5wYXJzZUVycm9yKHNlLHt0ZXh0OkIubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0tdfHxLLGxpbmU6Qi55eWxpbmVubyxsb2M6VyxleHBlY3RlZDpOZX0pfWlmKEhbMF1pbnN0YW5jZW9mIEFycmF5JiZILmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSisiLCB0b2tlbjogIitLKTtzd2l0Y2goSFswXSl7Y2FzZSAxOkwucHVzaChLKSxBLnB1c2goQi55eXRleHQpLEkucHVzaChCLnl5bGxvYyksTC5wdXNoKEhbMV0pLEs9bnVsbCxlZT8oSz1lZSxlZT1udWxsKTooQz1CLnl5bGVuZyxrPUIueXl0ZXh0LFI9Qi55eWxpbmVubyxXPUIueXlsbG9jLE8+MCYmTy0tKTticmVhaztjYXNlIDI6aWYoY2U9dGhpcy5wcm9kdWN0aW9uc19bSFsxXV1bMV0sYWUuJD1BW0EubGVuZ3RoLWNlXSxhZS5fJD17Zmlyc3RfbGluZTpJW0kubGVuZ3RoLShjZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOklbSS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpJW0kubGVuZ3RoLShjZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpJW0kubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxaJiYoYWUuXyQucmFuZ2U9W0lbSS5sZW5ndGgtKGNlfHwxKV0ucmFuZ2VbMF0sSVtJLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGFlLFtrLEMsUixHLnl5LEhbMV0sQSxJXS5jb25jYXQoRikpLHR5cGVvZiBRPCJ1IilyZXR1cm4gUTtjZSYmKEw9TC5zbGljZSgwLC0xKmNlKjIpLEE9QS5zbGljZSgwLC0xKmNlKSxJPUkuc2xpY2UoMCwtMSpjZSkpLEwucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tIWzFdXVswXSksQS5wdXNoKGFlLiQpLEkucHVzaChhZS5fJCksdGU9RFtMW0wubGVuZ3RoLTJdXVtMW0wubGVuZ3RoLTFdXSxMLnB1c2godGUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxiPWZ1bmN0aW9uKCl7dmFyIF89e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihFLEwpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxMKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFQsRSl7cmV0dXJuIHRoaXMueXk9RXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9VCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1ULHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1ULHRoaXMubWF0Y2hlZCs9VDt2YXIgRT1ULm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVH0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihUKXt2YXIgRT1ULmxlbmd0aCxMPVQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1UK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FKSx0aGlzLm9mZnNldC09RTt2YXIgUz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxMLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09TC5sZW5ndGgtMSk7dmFyIEE9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkw/KEwubGVuZ3RoPT09Uy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1NbUy5sZW5ndGgtTC5sZW5ndGhdLmxlbmd0aC1MWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtBWzBdLEFbMF0rdGhpcy55eWxlbmctRV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKFQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShUKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFQubGVuZ3RoPjIwPyIuLi4iOiIiKStULnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5tYXRjaDtyZXR1cm4gVC5sZW5ndGg8MjAmJihUKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ULmxlbmd0aCkpLChULnN1YnN0cigwLDIwKSsoVC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBUPXRoaXMucGFzdElucHV0KCksRT1uZXcgQXJyYXkoVC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBUK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihULEUpe3ZhciBMLFMsQTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoQT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihBLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFM9VFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUyYmKHRoaXMueXlsaW5lbm8rPVMubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Uz9TW1MubGVuZ3RoLTFdLmxlbmd0aC1TW1MubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rVFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1UWzBdLHRoaXMubWF0Y2grPVRbMF0sdGhpcy5tYXRjaGVzPVQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoVFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9VFswXSxMPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksTClyZXR1cm4gTDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSSBpbiBBKXRoaXNbSV09QVtJXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgVCxFLEwsUzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBBPXRoaXMuX2N1cnJlbnRSdWxlcygpLEk9MDtJPEEubGVuZ3RoO0krKylpZihMPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbQVtJXV0pLEwmJighRXx8TFswXS5sZW5ndGg+RVswXS5sZW5ndGgpKXtpZihFPUwsUz1JLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFQ9dGhpcy50ZXN0X21hdGNoKEwsQVtJXSksVCE9PSExKXJldHVybiBUO2lmKHRoaXMuX2JhY2t0cmFjayl7RT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFPyhUPXRoaXMudGVzdF9tYXRjaChFLEFbU10pLFQhPT0hMT9UOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihFKXtyZXR1cm4gRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV8fDApLEU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEUpe3RoaXMuYmVnaW4oRSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihFLEwsUyxBKXt2YXIgST1BO3N3aXRjaChTKXtjYXNlIDA6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLEwueXl0ZXh0KSw2O2JyZWFrO2Nhc2UgMTpyZXR1cm4gODtjYXNlIDI6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjticmVhaztjYXNlIDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTpFLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjticmVhaztjYXNlIDc6cmV0dXJuIDc7Y2FzZSA4OnJldHVybiAxNTtjYXNlIDk6RS5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6RS5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDI1OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLEwueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixMLnl5dGV4dCksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLEwueXl0ZXh0KSwyMDticmVhaztjYXNlIDM2OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsTC55eXRleHQpLDIwO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF99KCk7eC5sZXhlcj1iO2Z1bmN0aW9uIHcoKXt0aGlzLnl5PXt9fXJldHVybiBvKHcsIlBhcnNlciIpLHcucHJvdG90eXBlPXgseC5QYXJzZXI9dyxuZXcgd30oKTtFUC5wYXJzZXI9RVA7VHBlPUVQfSk7dmFyIFhsLEVwZSxTUCxvcWUsbHFlLGNxZSx1cWUscWksaHFlLGZxZSxkcWUscHFlLG1xZSxncWUseXFlLFNwZSxDcGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7dXQoKTticygpO1hsPVtdLEVwZT0wLFNQPXt9LG9xZT1vKCgpPT57WGw9W10sRXBlPTAsU1A9e319LCJjbGVhciIpLGxxZT1vKGZ1bmN0aW9uKHQpe2ZvcihsZXQgZT1YbC5sZW5ndGgtMTtlPj0wO2UtLSlpZihYbFtlXS5sZXZlbDx0KXJldHVybiBYbFtlXTtyZXR1cm4gbnVsbH0sImdldFBhcmVudCIpLGNxZT1vKCgpPT5YbC5sZW5ndGg+MD9YbFswXTpudWxsLCJnZXRNaW5kbWFwIiksdXFlPW8oKHQsZSxyLG4pPT57WS5pbmZvKCJhZGROb2RlIix0LGUscixuKTtsZXQgaT1wZSgpLGE9aS5taW5kbWFwPy5wYWRkaW5nPz91ci5taW5kbWFwLnBhZGRpbmc7c3dpdGNoKG4pe2Nhc2UgcWkuUk9VTkRFRF9SRUNUOmNhc2UgcWkuUkVDVDpjYXNlIHFpLkhFWEFHT046YSo9Mn1sZXQgcz17aWQ6RXBlKyssbm9kZUlkOmtyKGUsaSksbGV2ZWw6dCxkZXNjcjprcihyLGkpLHR5cGU6bixjaGlsZHJlbjpbXSx3aWR0aDppLm1pbmRtYXA/Lm1heE5vZGVXaWR0aD8/dXIubWluZG1hcC5tYXhOb2RlV2lkdGgscGFkZGluZzphfSxsPWxxZSh0KTtpZihsKWwuY2hpbGRyZW4ucHVzaChzKSxYbC5wdXNoKHMpO2Vsc2UgaWYoWGwubGVuZ3RoPT09MClYbC5wdXNoKHMpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBjYW4gYmUgb25seSBvbmUgcm9vdC4gTm8gcGFyZW50IGNvdWxkIGJlIGZvdW5kIGZvciAoIicrcy5kZXNjcisnIiknKX0sImFkZE5vZGUiKSxxaT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LGhxZT1vKCh0LGUpPT57c3dpdGNoKFkuZGVidWcoIkluIGdldCB0eXBlIix0LGUpLHQpe2Nhc2UiWyI6cmV0dXJuIHFpLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gZT09PSIpIj9xaS5ST1VOREVEX1JFQ1Q6cWkuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIHFpLkNJUkNMRTtjYXNlIikiOnJldHVybiBxaS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gcWkuQkFORztjYXNlInt7IjpyZXR1cm4gcWkuSEVYQUdPTjtkZWZhdWx0OnJldHVybiBxaS5ERUZBVUxUfX0sImdldFR5cGUiKSxmcWU9bygodCxlKT0+e1NQW3RdPWV9LCJzZXRFbGVtZW50Rm9ySWQiKSxkcWU9byh0PT57aWYoIXQpcmV0dXJuO2xldCBlPXBlKCkscj1YbFtYbC5sZW5ndGgtMV07dC5pY29uJiYoci5pY29uPWtyKHQuaWNvbixlKSksdC5jbGFzcyYmKHIuY2xhc3M9a3IodC5jbGFzcyxlKSl9LCJkZWNvcmF0ZU5vZGUiKSxwcWU9byh0PT57c3dpdGNoKHQpe2Nhc2UgcWkuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIHFpLlJFQ1Q6cmV0dXJuInJlY3QiO2Nhc2UgcWkuUk9VTkRFRF9SRUNUOnJldHVybiJyb3VuZGVkLXJlY3QiO2Nhc2UgcWkuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgcWkuQ0xPVUQ6cmV0dXJuImNsb3VkIjtjYXNlIHFpLkJBTkc6cmV0dXJuImJhbmciO2Nhc2UgcWkuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX0sInR5cGUyU3RyIiksbXFlPW8oKCk9PlksImdldExvZ2dlciIpLGdxZT1vKHQ9PlNQW3RdLCJnZXRFbGVtZW50QnlJZCIpLHlxZT17Y2xlYXI6b3FlLGFkZE5vZGU6dXFlLGdldE1pbmRtYXA6Y3FlLG5vZGVUeXBlOnFpLGdldFR5cGU6aHFlLHNldEVsZW1lbnRGb3JJZDpmcWUsZGVjb3JhdGVOb2RlOmRxZSx0eXBlMlN0cjpwcWUsZ2V0TG9nZ2VyOm1xZSxnZXRFbGVtZW50QnlJZDpncWV9LFNwZT15cWV9KTtmdW5jdGlvbiBLaSh0KXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBLaT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sS2kodCl9ZnVuY3Rpb24gdEIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBBcGUodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1mdW5jdGlvbiByQih0LGUscil7cmV0dXJuIGUmJkFwZSh0LnByb3RvdHlwZSxlKSxyJiZBcGUodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uICRtZSh0LGUscil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gamwodCxlKXtyZXR1cm4gdnFlKHQpfHx4cWUodCxlKXx8Vm1lKHQsZSl8fGJxZSgpfWZ1bmN0aW9uIHZxZSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIHhxZSh0LGUpe3ZhciByPXQ9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYociE9bnVsbCl7dmFyIG49W10saT0hMCxhPSExLHMsbDt0cnl7Zm9yKHI9ci5jYWxsKHQpOyEoaT0ocz1yLm5leHQoKSkuZG9uZSkmJihuLnB1c2gocy52YWx1ZSksIShlJiZuLmxlbmd0aD09PWUpKTtpPSEwKTt9Y2F0Y2godSl7YT0hMCxsPXV9ZmluYWxseXt0cnl7IWkmJnIucmV0dXJuIT1udWxsJiZyLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBsfX1yZXR1cm4gbn19ZnVuY3Rpb24gVm1lKHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBfcGUodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7aWYocj09PSJPYmplY3QiJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLHI9PT0iTWFwInx8cj09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKHI9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIF9wZSh0LGUpfX1mdW5jdGlvbiBfcGUodCxlKXsoZT09bnVsbHx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBicWUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gVW1lKHQsZSl7dmFyIHI9dHlwZW9mIFN5bWJvbDwidSImJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1WbWUodCkpfHxlJiZ0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXtyJiYodD1yKTt2YXIgbj0wLGk9byhmdW5jdGlvbigpe30sIkYiKTtyZXR1cm57czppLG46byhmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sIm4iKSxlOm8oZnVuY3Rpb24odSl7dGhyb3cgdX0sImUiKSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBhPSEwLHM9ITEsbDtyZXR1cm57czpvKGZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LCJzIiksbjpvKGZ1bmN0aW9uKCl7dmFyIHU9ci5uZXh0KCk7cmV0dXJuIGE9dS5kb25lLHV9LCJuIiksZTpvKGZ1bmN0aW9uKHUpe3M9ITAsbD11fSwiZSIpLGY6byhmdW5jdGlvbigpe3RyeXshYSYmci5yZXR1cm4hPW51bGwmJnIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGx9fSwiZiIpfX1mdW5jdGlvbiBIcWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gV3FlKHQsZSl7cmV0dXJuIGU9e2V4cG9ydHM6e319LHQoZSxlLmV4cG9ydHMpLGUuZXhwb3J0c31mdW5jdGlvbiBacWUodCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmUXFlLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gdFhlKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsSnFlKHQpKzEpLnJlcGxhY2UoZVhlLCIiKX1mdW5jdGlvbiBzWGUodCl7dmFyIGU9aVhlLmNhbGwodCxIeCkscj10W0h4XTt0cnl7dFtIeF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoe312YXIgaT1hWGUuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtIeF09cjpkZWxldGUgdFtIeF0pLGl9ZnVuY3Rpb24gdVhlKHQpe3JldHVybiBjWGUuY2FsbCh0KX1mdW5jdGlvbiBwWGUodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD9kWGU6ZlhlOk5wZSYmTnBlIGluIE9iamVjdCh0KT9vWGUodCk6aFhlKHQpfWZ1bmN0aW9uIG1YZSh0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QifWZ1bmN0aW9uIHZYZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxnWGUodCkmJlptZSh0KT09eVhlfWZ1bmN0aW9uIGtYZSh0KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIHQ7aWYobWIodCkpcmV0dXJuIFJwZTtpZihYMCh0KSl7dmFyIGU9dHlwZW9mIHQudmFsdWVPZj09ImZ1bmN0aW9uIj90LnZhbHVlT2YoKTp0O3Q9WDAoZSk/ZSsiIjplfWlmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdD09PTA/dDordDt0PXJYZSh0KTt2YXIgcj1iWGUudGVzdCh0KTtyZXR1cm4gcnx8d1hlLnRlc3QodCk/VFhlKHQuc2xpY2UoMikscj8yOjgpOnhYZS50ZXN0KHQpP1JwZTordH1mdW5jdGlvbiBBWGUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoPTAsZj0hMSxkPSExLHA9ITA7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihFWGUpO2U9TXBlKGUpfHwwLFgwKHIpJiYoZj0hIXIubGVhZGluZyxkPSJtYXhXYWl0ImluIHIsYT1kP1NYZShNcGUoci5tYXhXYWl0KXx8MCxlKTphLHA9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOnApO2Z1bmN0aW9uIG0oRSl7dmFyIEw9bixTPWk7cmV0dXJuIG49aT12b2lkIDAsaD1FLHM9dC5hcHBseShTLEwpLHN9byhtLCJpbnZva2VGdW5jIik7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gaD1FLGw9c2V0VGltZW91dCh4LGUpLGY/bShFKTpzfW8oZywibGVhZGluZ0VkZ2UiKTtmdW5jdGlvbiB5KEUpe3ZhciBMPUUtdSxTPUUtaCxBPWUtTDtyZXR1cm4gZD9DWGUoQSxhLVMpOkF9byh5LCJyZW1haW5pbmdXYWl0Iik7ZnVuY3Rpb24gdihFKXt2YXIgTD1FLXUsUz1FLWg7cmV0dXJuIHU9PT12b2lkIDB8fEw+PWV8fEw8MHx8ZCYmUz49YX1vKHYsInNob3VsZEludm9rZSIpO2Z1bmN0aW9uIHgoKXt2YXIgRT1DUCgpO2lmKHYoRSkpcmV0dXJuIGIoRSk7bD1zZXRUaW1lb3V0KHgseShFKSl9byh4LCJ0aW1lckV4cGlyZWQiKTtmdW5jdGlvbiBiKEUpe3JldHVybiBsPXZvaWQgMCxwJiZuP20oRSk6KG49aT12b2lkIDAscyl9byhiLCJ0cmFpbGluZ0VkZ2UiKTtmdW5jdGlvbiB3KCl7bCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KGwpLGg9MCxuPXU9aT1sPXZvaWQgMH1vKHcsImNhbmNlbCIpO2Z1bmN0aW9uIF8oKXtyZXR1cm4gbD09PXZvaWQgMD9zOmIoQ1AoKSl9byhfLCJmbHVzaCIpO2Z1bmN0aW9uIFQoKXt2YXIgRT1DUCgpLEw9dihFKTtpZihuPWFyZ3VtZW50cyxpPXRoaXMsdT1FLEwpe2lmKGw9PT12b2lkIDApcmV0dXJuIGcodSk7aWYoZClyZXR1cm4gY2xlYXJUaW1lb3V0KGwpLGw9c2V0VGltZW91dCh4LGUpLG0odSl9cmV0dXJuIGw9PT12b2lkIDAmJihsPXNldFRpbWVvdXQoeCxlKSksc31yZXR1cm4gbyhULCJkZWJvdW5jZWQiKSxULmNhbmNlbD13LFQuZmx1c2g9XyxUfWZ1bmN0aW9uIFY2KHQsZSxyLG4saSxhKXt2YXIgcztyZXR1cm4gbmkodCk/cz10OnM9azFbdF18fGsxLmV1Y2xpZGVhbixlPT09MCYmbmkodCk/cyhpLGEpOnMoZSxyLG4saSxhKX1mdW5jdGlvbiB4S2UodCxlKXtpZihVNih0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fHQ9PW51bGx8fG1iKHQpPyEwOnZLZS50ZXN0KHQpfHwheUtlLnRlc3QodCl8fGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIFNLZSh0KXtpZighWDAodCkpcmV0dXJuITE7dmFyIGU9Wm1lKHQpO3JldHVybiBlPT1US2V8fGU9PWtLZXx8ZT09d0tlfHxlPT1FS2V9ZnVuY3Rpb24gX0tlKHQpe3JldHVybiEhSnBlJiZKcGUgaW4gdH1mdW5jdGlvbiBSS2UodCl7aWYodCE9bnVsbCl7dHJ5e3JldHVybiBOS2UuY2FsbCh0KX1jYXRjaHt9dHJ5e3JldHVybiB0KyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gJEtlKHQpe2lmKCFYMCh0KXx8TEtlKHQpKXJldHVybiExO3ZhciBlPUNLZSh0KT9HS2U6T0tlO3JldHVybiBlLnRlc3QoTUtlKHQpKX1mdW5jdGlvbiBVS2UodCxlKXtyZXR1cm4gdD8uW2VdfWZ1bmN0aW9uIFdLZSh0LGUpe3ZhciByPUhLZSh0LGUpO3JldHVybiBWS2Uocik/cjp2b2lkIDB9ZnVuY3Rpb24gcUtlKCl7dGhpcy5fX2RhdGFfXz1sYj9sYihudWxsKTp7fSx0aGlzLnNpemU9MH1mdW5jdGlvbiBqS2UodCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9ZnVuY3Rpb24gZVFlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYobGIpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1RS2U/dm9pZCAwOnJ9cmV0dXJuIEpLZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9ZnVuY3Rpb24gaVFlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGxiP2VbdF0hPT12b2lkIDA6blFlLmNhbGwoZSx0KX1mdW5jdGlvbiBvUWUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxyW3RdPWxiJiZlPT09dm9pZCAwP3NRZTplLHRoaXN9ZnVuY3Rpb24gQTEodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gY1FlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBoUWUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX1mdW5jdGlvbiBmUWUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihrZ2UodFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBtUWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPUg2KGUsdCk7aWYocjwwKXJldHVybiExO3ZhciBuPWUubGVuZ3RoLTE7cmV0dXJuIHI9PW4/ZS5wb3AoKTpwUWUuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24geVFlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1INihlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19ZnVuY3Rpb24geFFlKHQpe3JldHVybiBINih0aGlzLl9fZGF0YV9fLHQpPi0xfWZ1bmN0aW9uIHdRZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1INihyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfWZ1bmN0aW9uIF8xKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIENRZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGVtZSxtYXA6bmV3KFNRZXx8a1FlKSxzdHJpbmc6bmV3IGVtZX19ZnVuY3Rpb24gX1FlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBlPT0ic3RyaW5nInx8ZT09Im51bWJlciJ8fGU9PSJzeW1ib2wifHxlPT0iYm9vbGVhbiI/dCE9PSJfX3Byb3RvX18iOnQ9PT1udWxsfWZ1bmN0aW9uIERRZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIExRZShlKT9yW3R5cGVvZiBlPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwfWZ1bmN0aW9uIE5RZSh0KXt2YXIgZT1XNih0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfWZ1bmN0aW9uIE1RZSh0KXtyZXR1cm4gVzYodGhpcyx0KS5nZXQodCl9ZnVuY3Rpb24gT1FlKHQpe3JldHVybiBXNih0aGlzLHQpLmhhcyh0KX1mdW5jdGlvbiBCUWUodCxlKXt2YXIgcj1XNih0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfWZ1bmN0aW9uIEwxKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGRCKHQsZSl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fGUhPW51bGwmJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoelFlKTt2YXIgcj1vKGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMsbik6blswXSxhPXIuY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBzPXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1hLnNldChpLHMpfHxhLHN9LCJtZW1vaXplZCIpO3JldHVybiByLmNhY2hlPW5ldyhkQi5DYWNoZXx8RWdlKSxyfWZ1bmN0aW9uIFZRZSh0KXt2YXIgZT1HUWUodCxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09JFFlJiZyLmNsZWFyKCksbn0pLHI9ZS5jYWNoZTtyZXR1cm4gZX1mdW5jdGlvbiBxUWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX1mdW5jdGlvbiBBZ2UodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKFU2KHQpKXJldHVybiBDZ2UodCxBZ2UpKyIiO2lmKG1iKHQpKXJldHVybiBybWU/cm1lLmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS1YUWU/Ii0wIjplfWZ1bmN0aW9uIEtRZSh0KXtyZXR1cm4gdD09bnVsbD8iIjpqUWUodCl9ZnVuY3Rpb24gUVFlKHQsZSl7cmV0dXJuIFU2KHQpP3Q6YktlKHQsZSk/W3RdOlNnZShfZ2UodCkpfWZ1bmN0aW9uIEpRZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fG1iKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tWlFlPyItMCI6ZX1mdW5jdGlvbiBlWmUodCxlKXtlPUxnZShlLHQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7dCE9bnVsbCYmcjxuOyl0PXRbcEIoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9ZnVuY3Rpb24gclplKHQsZSxyKXt2YXIgbj10PT1udWxsP3ZvaWQgMDp0WmUodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59ZnVuY3Rpb24gYVplKHQsZSxyKXtlPT0iX19wcm90b19fIiYmbm1lP25tZSh0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnIsd3JpdGFibGU6ITB9KTp0W2VdPXJ9ZnVuY3Rpb24gY1plKHQsZSxyKXt2YXIgbj10W2VdOyghKGxaZS5jYWxsKHQsZSkmJmtnZShuLHIpKXx8cj09PXZvaWQgMCYmIShlIGluIHQpKSYmc1plKHQsZSxyKX1mdW5jdGlvbiBkWmUodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz9oWmUsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZmWmUudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfWZ1bmN0aW9uIG1aZSh0LGUscixuKXtpZighWDAodCkpcmV0dXJuIHQ7ZT1MZ2UoZSx0KTtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxzPWEtMSxsPXQ7bCE9bnVsbCYmKytpPGE7KXt2YXIgdT1wQihlW2ldKSxoPXI7aWYodT09PSJfX3Byb3RvX18ifHx1PT09ImNvbnN0cnVjdG9yInx8dT09PSJwcm90b3R5cGUiKXJldHVybiB0O2lmKGkhPXMpe3ZhciBmPWxbdV07aD1uP24oZix1LGwpOnZvaWQgMCxoPT09dm9pZCAwJiYoaD1YMChmKT9mOnBaZShlW2krMV0pP1tdOnt9KX11WmUobCx1LGgpLGw9bFt1XX1yZXR1cm4gdH1mdW5jdGlvbiB5WmUodCxlLHIpe3JldHVybiB0PT1udWxsP3Q6Z1plKHQsZSxyKX1mdW5jdGlvbiB4WmUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShuKSk7KytyPG47KWVbcl09dFtyXTtyZXR1cm4gZX1mdW5jdGlvbiB3WmUodCl7cmV0dXJuIFU2KHQpP0NnZSh0LHBCKTptYih0KT9bdF06YlplKFNnZShfZ2UodCkpKX1mdW5jdGlvbiBnQih0LGUscixuKXtmb3IodmFyIGk9W10sYT1uZXcgUzEscz10LmN5KCksbD1zLmhhc0NvbXBvdW5kTm9kZXMoKSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBoPXRbdV07cj9pLnB1c2goaCk6bCYmbihpLGEsaCl9Zm9yKDtpLmxlbmd0aD4wOyl7dmFyIGY9aS5zaGlmdCgpO2UoZiksYS5hZGQoZi5pZCgpKSxsJiZuKGksYSxmKX1yZXR1cm4gdH1mdW5jdGlvbiBOZ2UodCxlLHIpe2lmKHIuaXNQYXJlbnQoKSlmb3IodmFyIG49ci5fcHJpdmF0ZS5jaGlsZHJlbixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ZS5oYXMoYS5pZCgpKXx8dC5wdXNoKGEpfX1mdW5jdGlvbiBSZ2UodCxlLHIpe2lmKHIuaXNDaGlsZCgpKXt2YXIgbj1yLl9wcml2YXRlLnBhcmVudDtlLmhhcyhuLmlkKCkpfHx0LnB1c2gobil9fWZ1bmN0aW9uIEdaZSh0LGUscil7UmdlKHQsZSxyKSxOZ2UodCxlLHIpfWZ1bmN0aW9uIFJQKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PT12b2lkIDAmJihlPSEwKSxyLmxlbmd0aCE9PTApaWYoci5pc05vZGUoKSYmIXIucmVtb3ZlZCgpKXtmb3IodmFyIG49MCxpPXJbMF0sYT1pLl9wcml2YXRlLmVkZ2VzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTshZSYmbC5pc0xvb3AoKXx8KG4rPXQoaSxsKSl9cmV0dXJuIG59ZWxzZSByZXR1cm59fWZ1bmN0aW9uIHUxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpPXRoaXMubm9kZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1zW3RdKHIpO2whPT12b2lkIDAmJihuPT09dm9pZCAwfHxlKGwsbikpJiYobj1sKX1yZXR1cm4gbn19ZnVuY3Rpb24gcXgoKXtyZXR1cm4hMX1mdW5jdGlvbiBmNigpe3JldHVybiEwfWZ1bmN0aW9uIHE2KCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTphSmUsZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPTA7cjxjbWUubGVuZ3RoO3IrKyl7dmFyIG49Y21lW3JdO3RoaXNbbl09dFtuXXx8JGdlW25dfXRoaXMuY29udGV4dD1lfHx0aGlzLmNvbnRleHQsdGhpcy5saXN0ZW5lcnM9W10sdGhpcy5lbWl0dGluZz0wfWZ1bmN0aW9uIFlnZSh0LGUscil7dmFyIG49ci5fcHJpdmF0ZSxpPW4uc3R5bGVDYWNoZT1uLnN0eWxlQ2FjaGV8fFtdLGE7cmV0dXJuKGE9aVt0XSkhPW51bGx8fChhPWlbdF09ZShyKSksYX1mdW5jdGlvbiBYNih0LGUpe3JldHVybiB0PWowKHQpLG8oZnVuY3Rpb24obil7cmV0dXJuIFlnZSh0LGUsbil9LCJjYWNoZWRTdHlsZUZ1bmN0aW9uIil9ZnVuY3Rpb24gajYodCxlKXt0PWowKHQpO3ZhciByPW8oZnVuY3Rpb24oaSl7cmV0dXJuIGUuY2FsbChpKX0sInNlbGZGbiIpO3JldHVybiBvKGZ1bmN0aW9uKCl7dmFyIGk9dGhpc1swXTtpZihpKXJldHVybiBZZ2UodCxyLGkpfSwiY2FjaGVkUHJvdG90eXBlU3R5bGVGdW5jdGlvbiIpfWZ1bmN0aW9uIElQKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZSxuPXIuZGF0YS5wYXJlbnQ/dC5wYXJlbnRzKCk6bnVsbDtpZihuKWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKCFlKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHlCKHQpe3ZhciBlPXQub2sscj10LmVkZ2VPa1ZpYU5vZGV8fHQub2ssbj10LnBhcmVudE9rfHx0Lm9rO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMuY3koKTtpZighaS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMDt2YXIgYT10aGlzWzBdLHM9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoYSl7dmFyIGw9YS5fcHJpdmF0ZTtpZighZShhKSlyZXR1cm4hMTtpZihhLmlzTm9kZSgpKXJldHVybiFzfHxJUChhLG4pO3ZhciB1PWwuc291cmNlLGg9bC50YXJnZXQ7cmV0dXJuIHIodSkmJighc3x8SVAodSxyKSkmJih1PT09aHx8cihoKSYmKCFzfHxJUChoLHIpKSl9fX1mdW5jdGlvbiBobWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9W107aWYoZS5sZW5ndGg9PT0yKXt2YXIgbj1lWzBdLGk9ZVsxXTt0aGlzLm9uKHQuZXZlbnQsbixpKX1lbHNlIGlmKGUubGVuZ3RoPT09MSYmbmkoZVswXSkpe3ZhciBhPWVbMF07dGhpcy5vbih0LmV2ZW50LGEpfWVsc2UgaWYoZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD09PTEmJmtuKGVbMF0pKXtmb3IodmFyIHM9ZS5sZW5ndGg9PT0xP2VbMF06bnVsbCxsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXNbbF0saD0hdC5hYmxlRmllbGR8fHUuX3ByaXZhdGVbdC5hYmxlRmllbGRdLGY9dS5fcHJpdmF0ZVt0LmZpZWxkXSE9dC52YWx1ZTtpZih0Lm92ZXJyaWRlQWJsZSl7dmFyIGQ9dC5vdmVycmlkZUFibGUodSk7aWYoZCE9PXZvaWQgMCYmKGg9ZCwhZCkpcmV0dXJuIHRoaXN9aCYmKHUuX3ByaXZhdGVbdC5maWVsZF09dC52YWx1ZSxmJiZyLnB1c2godSkpfXZhciBwPXRoaXMuc3Bhd24ocik7cC51cGRhdGVTdHlsZSgpLHAuZW1pdCh0LmV2ZW50KSxzJiZwLmVtaXQocyl9cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIE4xKHQpe01mW3QuZmllbGRdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXtpZih0Lm92ZXJyaWRlRmllbGQpe3ZhciByPXQub3ZlcnJpZGVGaWVsZChlKTtpZihyIT09dm9pZCAwKXJldHVybiByfXJldHVybiBlLl9wcml2YXRlW3QuZmllbGRdfX0sTWZbdC5vbl09aG1lKHtldmVudDp0Lm9uLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLE1mW3Qub2ZmXT1obWUoe2V2ZW50OnQub2ZmLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMX0pfWZ1bmN0aW9uIG1tZSh0KXtyZXR1cm4gbyhmdW5jdGlvbihyKXtmb3IodmFyIG49W10saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYT10aGlzW2ldLHM9YS5fcHJpdmF0ZVt0LmF0dHJdO3MmJm4ucHVzaChzKX1yZXR1cm4gdGhpcy5zcGF3bihuLCEwKS5maWx0ZXIocil9LCJzb3VyY2VJbXBsIil9ZnVuY3Rpb24gZ21lKHQpe3JldHVybiBvKGZ1bmN0aW9uKHIpe3ZhciBuPVtdLGk9dGhpcy5fcHJpdmF0ZS5jeSxhPXR8fHt9O1p0KHIpJiYocj1pLiQocikpO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKWZvcih2YXIgbD1yW3NdLl9wcml2YXRlLmVkZ2VzLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XSxmPWguX3ByaXZhdGUuZGF0YSxkPXRoaXMuaGFzRWxlbWVudFdpdGhJZChmLnNvdXJjZSkmJnIuaGFzRWxlbWVudFdpdGhJZChmLnRhcmdldCkscD1yLmhhc0VsZW1lbnRXaXRoSWQoZi5zb3VyY2UpJiZ0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZi50YXJnZXQpLG09ZHx8cDttJiYoKGEudGhpc0lzU3JjfHxhLnRoaXNJc1RndCkmJihhLnRoaXNJc1NyYyYmIWR8fGEudGhpc0lzVGd0JiYhcCl8fG4ucHVzaChoKSl9cmV0dXJuIHRoaXMuc3Bhd24obiwhMCl9LCJlZGdlc1dpdGhJbXBsIil9ZnVuY3Rpb24geW1lKHQpe3ZhciBlPXtjb2RpcmVjdGVkOiExfTtyZXR1cm4gdD1pcih7fSxlLHQpLG8oZnVuY3Rpb24obil7Zm9yKHZhciBpPVtdLGE9dGhpcy5lZGdlcygpLHM9dCxsPTA7bDxhLmxlbmd0aDtsKyspZm9yKHZhciB1PWFbbF0saD11Ll9wcml2YXRlLGY9aC5zb3VyY2UsZD1mLl9wcml2YXRlLmRhdGEuaWQscD1oLmRhdGEudGFyZ2V0LG09Zi5fcHJpdmF0ZS5lZGdlcyxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ10sdj15Ll9wcml2YXRlLmRhdGEseD12LnRhcmdldCxiPXYuc291cmNlLHc9eD09PXAmJmI9PT1kLF89ZD09PXgmJnA9PT1iOyhzLmNvZGlyZWN0ZWQmJnd8fCFzLmNvZGlyZWN0ZWQmJih3fHxfKSkmJmkucHVzaCh5KX1yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIobil9LCJwYXJhbGxlbEVkZ2VzSW1wbCIpfWZ1bmN0aW9uIGdKZSh0LGUscixuKXt2YXIgaT00LGE9LjAwMSxzPTFlLTcsbD0xMCx1PTExLGg9MS8odS0xKSxmPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgZD0wO2Q8NDsrK2QpaWYodHlwZW9mIGFyZ3VtZW50c1tkXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tkXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbZF0pKXJldHVybiExO3Q9TWF0aC5taW4odCwxKSxyPU1hdGgubWluKHIsMSksdD1NYXRoLm1heCh0LDApLHI9TWF0aC5tYXgociwwKTt2YXIgcD1mP25ldyBGbG9hdDMyQXJyYXkodSk6bmV3IEFycmF5KHUpO2Z1bmN0aW9uIG0oSSxEKXtyZXR1cm4gMS0zKkQrMypJfW8obSwiQSIpO2Z1bmN0aW9uIGcoSSxEKXtyZXR1cm4gMypELTYqSX1vKGcsIkIiKTtmdW5jdGlvbiB5KEkpe3JldHVybiAzKkl9byh5LCJDIik7ZnVuY3Rpb24gdihJLEQsayl7cmV0dXJuKChtKEQsaykqSStnKEQsaykpKkkreShEKSkqSX1vKHYsImNhbGNCZXppZXIiKTtmdW5jdGlvbiB4KEksRCxrKXtyZXR1cm4gMyptKEQsaykqSSpJKzIqZyhELGspKkkreShEKX1vKHgsImdldFNsb3BlIik7ZnVuY3Rpb24gYihJLEQpe2Zvcih2YXIgaz0wO2s8aTsrK2spe3ZhciBSPXgoRCx0LHIpO2lmKFI9PT0wKXJldHVybiBEO3ZhciBDPXYoRCx0LHIpLUk7RC09Qy9SfXJldHVybiBEfW8oYiwibmV3dG9uUmFwaHNvbkl0ZXJhdGUiKTtmdW5jdGlvbiB3KCl7Zm9yKHZhciBJPTA7STx1OysrSSlwW0ldPXYoSSpoLHQscil9byh3LCJjYWxjU2FtcGxlVmFsdWVzIik7ZnVuY3Rpb24gXyhJLEQsayl7dmFyIFIsQyxPPTA7ZG8gQz1EKyhrLUQpLzIsUj12KEMsdCxyKS1JLFI+MD9rPUM6RD1DO3doaWxlKE1hdGguYWJzKFIpPnMmJisrTzxsKTtyZXR1cm4gQ31vKF8sImJpbmFyeVN1YmRpdmlkZSIpO2Z1bmN0aW9uIFQoSSl7Zm9yKHZhciBEPTAsaz0xLFI9dS0xO2shPT1SJiZwW2tdPD1JOysraylEKz1oOy0tazt2YXIgQz0oSS1wW2tdKS8ocFtrKzFdLXBba10pLE89RCtDKmgsTj14KE8sdCxyKTtyZXR1cm4gTj49YT9iKEksTyk6Tj09PTA/TzpfKEksRCxEK2gpfW8oVCwiZ2V0VEZvclgiKTt2YXIgRT0hMTtmdW5jdGlvbiBMKCl7RT0hMCwodCE9PWV8fHIhPT1uKSYmdygpfW8oTCwicHJlY29tcHV0ZSIpO3ZhciBTPW8oZnVuY3Rpb24oRCl7cmV0dXJuIEV8fEwoKSx0PT09ZSYmcj09PW4/RDpEPT09MD8wOkQ9PT0xPzE6dihUKEQpLGUsbil9LCJmIik7Uy5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuW3t4OnQseTplfSx7eDpyLHk6bn1dfTt2YXIgQT0iZ2VuZXJhdGVCZXppZXIoIitbdCxlLHIsbl0rIikiO3JldHVybiBTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LFN9ZnVuY3Rpb24gdm1lKHQsZSxyLG4saSl7aWYobj09PTF8fGU9PT1yKXJldHVybiByO3ZhciBhPWkoZSxyLG4pO3JldHVybiB0PT1udWxsfHwoKHQucm91bmRWYWx1ZXx8dC5jb2xvcikmJihhPU1hdGgucm91bmQoYSkpLHQubWluIT09dm9pZCAwJiYoYT1NYXRoLm1heChhLHQubWluKSksdC5tYXghPT12b2lkIDAmJihhPU1hdGgubWluKGEsdC5tYXgpKSksYX1mdW5jdGlvbiB4bWUodCxlKXtyZXR1cm4gdC5wZlZhbHVlIT1udWxsfHx0LnZhbHVlIT1udWxsP3QucGZWYWx1ZSE9bnVsbCYmKGU9PW51bGx8fGUudHlwZS51bml0cyE9PSIlIik/dC5wZlZhbHVlOnQudmFsdWU6dH1mdW5jdGlvbiBoMSh0LGUscixuLGkpe3ZhciBhPWkhPW51bGw/aS50eXBlOm51bGw7cjwwP3I9MDpyPjEmJihyPTEpO3ZhciBzPXhtZSh0LGkpLGw9eG1lKGUsaSk7aWYoeHQocykmJnh0KGwpKXJldHVybiB2bWUoYSxzLGwscixuKTtpZihrbihzKSYma24obCkpe2Zvcih2YXIgdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBmPXNbaF0sZD1sW2hdO2lmKGYhPW51bGwmJmQhPW51bGwpe3ZhciBwPXZtZShhLGYsZCxyLG4pO3UucHVzaChwKX1lbHNlIHUucHVzaChkKX1yZXR1cm4gdX19ZnVuY3Rpb24gdkplKHQsZSxyLG4pe3ZhciBpPSFuLGE9dC5fcHJpdmF0ZSxzPWUuX3ByaXZhdGUsbD1zLmVhc2luZyx1PXMuc3RhcnRUaW1lLGg9bj90OnQuY3koKSxmPWguc3R5bGUoKTtpZighcy5lYXNpbmdJbXBsKWlmKGw9PW51bGwpcy5lYXNpbmdJbXBsPXc2LmxpbmVhcjtlbHNle3ZhciBkO2lmKFp0KGwpKXt2YXIgcD1mLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsbCk7ZD1wLnZhbHVlfWVsc2UgZD1sO3ZhciBtLGc7WnQoZCk/KG09ZCxnPVtdKToobT1kWzFdLGc9ZC5zbGljZSgyKS5tYXAoZnVuY3Rpb24oQil7cmV0dXJuK0J9KSksZy5sZW5ndGg+MD8obT09PSJzcHJpbmciJiZnLnB1c2gocy5kdXJhdGlvbikscy5lYXNpbmdJbXBsPXc2W21dLmFwcGx5KG51bGwsZykpOnMuZWFzaW5nSW1wbD13NlttXX12YXIgeT1zLmVhc2luZ0ltcGwsdjtpZihzLmR1cmF0aW9uPT09MD92PTE6dj0oci11KS9zLmR1cmF0aW9uLHMuYXBwbHlpbmcmJih2PXMucHJvZ3Jlc3MpLHY8MD92PTA6dj4xJiYodj0xKSxzLmRlbGF5PT1udWxsKXt2YXIgeD1zLnN0YXJ0UG9zaXRpb24sYj1zLnBvc2l0aW9uO2lmKGImJmkmJiF0LmxvY2tlZCgpKXt2YXIgdz17fTtYeCh4LngsYi54KSYmKHcueD1oMSh4LngsYi54LHYseSkpLFh4KHgueSxiLnkpJiYody55PWgxKHgueSxiLnksdix5KSksdC5wb3NpdGlvbih3KX12YXIgXz1zLnN0YXJ0UGFuLFQ9cy5wYW4sRT1hLnBhbixMPVQhPW51bGwmJm47TCYmKFh4KF8ueCxULngpJiYoRS54PWgxKF8ueCxULngsdix5KSksWHgoXy55LFQueSkmJihFLnk9aDEoXy55LFQueSx2LHkpKSx0LmVtaXQoInBhbiIpKTt2YXIgUz1zLnN0YXJ0Wm9vbSxBPXMuem9vbSxJPUEhPW51bGwmJm47SSYmKFh4KFMsQSkmJihhLnpvb209c2IoYS5taW5ab29tLGgxKFMsQSx2LHkpLGEubWF4Wm9vbSkpLHQuZW1pdCgiem9vbSIpKSwoTHx8SSkmJnQuZW1pdCgidmlld3BvcnQiKTt2YXIgRD1zLnN0eWxlO2lmKEQmJkQubGVuZ3RoPjAmJmkpe2Zvcih2YXIgaz0wO2s8RC5sZW5ndGg7aysrKXt2YXIgUj1EW2tdLEM9Ui5uYW1lLE89UixOPXMuc3RhcnRTdHlsZVtDXSxQPWYucHJvcGVydGllc1tOLm5hbWVdLEY9aDEoTixPLHYseSxQKTtmLm92ZXJyaWRlQnlwYXNzKHQsQyxGKX10LmVtaXQoInN0eWxlIil9fXJldHVybiBzLnByb2dyZXNzPXYsdn1mdW5jdGlvbiBYeCh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsPyExOnh0KHQpJiZ4dChlKT8hMDohISh0JiZlKX1mdW5jdGlvbiB4SmUodCxlLHIsbil7dmFyIGk9ZS5fcHJpdmF0ZTtpLnN0YXJ0ZWQ9ITAsaS5zdGFydFRpbWU9ci1pLnByb2dyZXNzKmkuZHVyYXRpb259ZnVuY3Rpb24gYm1lKHQsZSl7dmFyIHI9ZS5fcHJpdmF0ZS5hbmlFbGVzLG49W107ZnVuY3Rpb24gaShmLGQpe3ZhciBwPWYuX3ByaXZhdGUsbT1wLmFuaW1hdGlvbi5jdXJyZW50LGc9cC5hbmltYXRpb24ucXVldWUseT0hMTtpZihtLmxlbmd0aD09PTApe3ZhciB2PWcuc2hpZnQoKTt2JiZtLnB1c2godil9Zm9yKHZhciB4PW8oZnVuY3Rpb24oRSl7Zm9yKHZhciBMPUUubGVuZ3RoLTE7TD49MDtMLS0pe3ZhciBTPUVbTF07UygpfUUuc3BsaWNlKDAsRS5sZW5ndGgpfSwiY2FsbGJhY2tzIiksYj1tLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgdz1tW2JdLF89dy5fcHJpdmF0ZTtpZihfLnN0b3BwZWQpe20uc3BsaWNlKGIsMSksXy5ob29rZWQ9ITEsXy5wbGF5aW5nPSExLF8uc3RhcnRlZD0hMSx4KF8uZnJhbWVzKTtjb250aW51ZX0hXy5wbGF5aW5nJiYhXy5hcHBseWluZ3x8KF8ucGxheWluZyYmXy5hcHBseWluZyYmKF8uYXBwbHlpbmc9ITEpLF8uc3RhcnRlZHx8eEplKGYsdyx0KSx2SmUoZix3LHQsZCksXy5hcHBseWluZyYmKF8uYXBwbHlpbmc9ITEpLHgoXy5mcmFtZXMpLF8uc3RlcCE9bnVsbCYmXy5zdGVwKHQpLHcuY29tcGxldGVkKCkmJihtLnNwbGljZShiLDEpLF8uaG9va2VkPSExLF8ucGxheWluZz0hMSxfLnN0YXJ0ZWQ9ITEseChfLmNvbXBsZXRlcykpLHk9ITApfXJldHVybiFkJiZtLmxlbmd0aD09PTAmJmcubGVuZ3RoPT09MCYmbi5wdXNoKGYpLHl9byhpLCJzdGVwT25lIik7Zm9yKHZhciBhPSExLHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXSx1PWkobCk7YT1hfHx1fXZhciBoPWkoZSwhMCk7KGF8fGgpJiYoci5sZW5ndGg+MD9lLm5vdGlmeSgiZHJhdyIscik6ZS5ub3RpZnkoImRyYXciKSksci51bm1lcmdlKG4pLGUuZW1pdCgic3RlcCIpfWZ1bmN0aW9uIFhnZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30sQUplLF9KZSx0KX1mdW5jdGlvbiBqZ2UodCl7dGhpcy5vcHRpb25zPWlyKHt9LExKZSx0KX1mdW5jdGlvbiBLZ2UodCl7dGhpcy5vcHRpb25zPWlyKHt9LERKZSx0KX1mdW5jdGlvbiBaNih0KXt0aGlzLm9wdGlvbnM9aXIoe30sTkplLHQpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgZT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLHI9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBhPWkuc291cmNlKCkuZGF0YSgiaWQiKSxzPWkudGFyZ2V0KCkuZGF0YSgiaWQiKSxsPWUuc29tZShmdW5jdGlvbihoKXtyZXR1cm4gaC5kYXRhKCJpZCIpPT09YX0pLHU9ZS5zb21lKGZ1bmN0aW9uKGgpe3JldHVybiBoLmRhdGEoImlkIik9PT1zfSk7cmV0dXJuIWx8fCF1fSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KG4pfWZ1bmN0aW9uIFpnZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30sWEplLHQpfWZ1bmN0aW9uIGJCKHQpe3RoaXMub3B0aW9ucz1pcih7fSxqSmUsdCl9ZnVuY3Rpb24gSmdlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxLSmUsdCl9ZnVuY3Rpb24gZTFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxRSmUsdCl9ZnVuY3Rpb24gdDFlKHQpe3RoaXMub3B0aW9ucz10LHRoaXMubm90aWZpY2F0aW9ucz0wfWZ1bmN0aW9uIGkxZSh0LGUpe2UucmFkaXVzPT09MD90LmxpbmVUbyhlLmN4LGUuY3kpOnQuYXJjKGUuY3gsZS5jeSxlLnJhZGl1cyxlLnN0YXJ0QW5nbGUsZS5lbmRBbmdsZSxlLmNvdW50ZXJDbG9ja3dpc2UpfWZ1bmN0aW9uIFRCKHQsZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMDtyZXR1cm4gbj09PTB8fGUucmFkaXVzPT09MD97Y3g6ZS54LGN5OmUueSxyYWRpdXM6MCxzdGFydFg6ZS54LHN0YXJ0WTplLnksc3RvcFg6ZS54LHN0b3BZOmUueSxzdGFydEFuZ2xlOnZvaWQgMCxlbmRBbmdsZTp2b2lkIDAsY291bnRlckNsb2Nrd2lzZTp2b2lkIDB9OihlZXQodCxlLHIsbixpKSx7Y3g6cVAsY3k6WFAscmFkaXVzOlcwLHN0YXJ0WDpyMWUsc3RhcnRZOm4xZSxzdG9wWDpqUCxzdG9wWTpLUCxzdGFydEFuZ2xlOlFjLmFuZytNYXRoLlBJLzIqWTAsZW5kQW5nbGU6Y2wuYW5nLU1hdGguUEkvMipZMCxjb3VudGVyQ2xvY2t3aXNlOkU2fSl9ZnVuY3Rpb24gYTFlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG49dFtyXSxpPXRbcisxXTtlLnB1c2goe3g6bix5Oml9KX1yZXR1cm4gZX19ZnVuY3Rpb24gdGV0KHQsZSxyKXtmb3IodmFyIG49byhmdW5jdGlvbihoLGYsZCxwKXtyZXR1cm4gbGEoaCxmLGQscCl9LCJxYmV6aWVyQXQkMSIpLGk9ZS5fcHJpdmF0ZSxhPWkucnN0eWxlLmJlemllclB0cyxzPTA7czx0LmJlemllclByb2pQY3RzLmxlbmd0aDtzKyspe3ZhciBsPXQuYmV6aWVyUHJvalBjdHNbc107YS5wdXNoKHt4Om4oclswXSxyWzJdLHJbNF0sbCkseTpuKHJbMV0sclszXSxyWzVdLGwpfSl9fWZ1bmN0aW9uIElldCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3QubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBPZXQodCxlLHIpe2Zvcih2YXIgbixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aT09PTAmJihuPWEpLHQubGluZVRvKGEueCxhLnkpfXQucXVhZHJhdGljQ3VydmVUbyhyLngsci55LG4ueCxuLnkpfWZ1bmN0aW9uIEJtZSh0LGUscil7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCk7Zm9yKHZhciBuPWUsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO3QubGluZVRvKGEueCxhLnkpfXZhciBzPXIsbD1yWzBdO3QubW92ZVRvKGwueCxsLnkpO2Zvcih2YXIgaT0xO2k8cy5sZW5ndGg7aSsrKXt2YXIgYT1zW2ldO3QubGluZVRvKGEueCxhLnkpfXQuY2xvc2VQYXRoJiZ0LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIFBldCh0LGUscixuLGkpe3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQuYXJjKHIsbixpLDAsTWF0aC5QSSoyLCExKTt2YXIgYT1lLHM9YVswXTt0Lm1vdmVUbyhzLngscy55KTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXTt0LmxpbmVUbyh1LngsdS55KX10LmNsb3NlUGF0aCYmdC5jbG9zZVBhdGgoKX1mdW5jdGlvbiBCZXQodCxlLHIsbil7dC5hcmMoZSxyLG4sMCxNYXRoLlBJKjIsITEpfWZ1bmN0aW9uIEZQKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjUscz1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUrYSxyKSx0LmxpbmVUbyhlK24tYSxyKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIsZStuLHIrYSksdC5saW5lVG8oZStuLHIraS1hKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIraSxlK24tYSxyK2kpLHQubGluZVRvKGUrYSxyK2kpLHQucXVhZHJhdGljQ3VydmVUbyhlLHIraSxlLHIraS1hKSx0LmxpbmVUbyhlLHIrYSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUscixlK2EsciksdC5jbG9zZVBhdGgoKSxzP3Quc3Ryb2tlKCk6dC5maWxsKCl9ZnVuY3Rpb24gSGV0KHQsZSl7Zm9yKHZhciByPWF0b2IodCksbj1uZXcgQXJyYXlCdWZmZXIoci5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkobiksYT0wO2E8ci5sZW5ndGg7YSsrKWlbYV09ci5jaGFyQ29kZUF0KGEpO3JldHVybiBuZXcgQmxvYihbbl0se3R5cGU6ZX0pfWZ1bmN0aW9uIEdtZSh0KXt2YXIgZT10LmluZGV4T2YoIiwiKTtyZXR1cm4gdC5zdWJzdHIoZSsxKX1mdW5jdGlvbiB2MWUodCxlLHIpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gZS50b0RhdGFVUkwocix0LnF1YWxpdHkpfSwiZ2V0QjY0VXJpIik7c3dpdGNoKHQub3V0cHV0KXtjYXNlImJsb2ItcHJvbWlzZSI6cmV0dXJuIG5ldyBDMShmdW5jdGlvbihpLGEpe3RyeXtlLnRvQmxvYihmdW5jdGlvbihzKXtzIT1udWxsP2kocyk6YShuZXcgRXJyb3IoImBjYW52YXMudG9CbG9iKClgIHNlbnQgYSBudWxsIHZhbHVlIGluIGl0cyBjYWxsYmFjayIpKX0scix0LnF1YWxpdHkpfWNhdGNoKHMpe2Eocyl9fSk7Y2FzZSJibG9iIjpyZXR1cm4gSGV0KEdtZShuKCkpLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gR21lKG4oKSk7Y2FzZSJiYXNlNjR1cmkiOmRlZmF1bHQ6cmV0dXJuIG4oKX19ZnVuY3Rpb24gYjFlKHQpe3ZhciBlPXRoaXMscj1lLmN5LndpbmRvdygpLG49ci5kb2N1bWVudDtlLmRhdGE9e2NhbnZhc2VzOm5ldyBBcnJheShLci5DQU5WQVNfTEFZRVJTKSxjb250ZXh0czpuZXcgQXJyYXkoS3IuQ0FOVkFTX0xBWUVSUyksY2FudmFzTmVlZHNSZWRyYXc6bmV3IEFycmF5KEtyLkNBTlZBU19MQVlFUlMpLGJ1ZmZlckNhbnZhc2VzOm5ldyBBcnJheShLci5CVUZGRVJfQ09VTlQpLGJ1ZmZlckNvbnRleHRzOm5ldyBBcnJheShLci5DQU5WQVNfTEFZRVJTKX07dmFyIGk9Ii13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsYT0icmdiYSgwLDAsMCwwKSI7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lcj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBzPWUuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVtpXT1hLHMucG9zaXRpb249InJlbGF0aXZlIixzLnpJbmRleD0iMCIscy5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgbD10LmN5LmNvbnRhaW5lcigpO2wuYXBwZW5kQ2hpbGQoZS5kYXRhLmNhbnZhc0NvbnRhaW5lciksbC5zdHlsZVtpXT1hO3ZhciB1PXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07RHFlKCkmJih1WyItbXMtdG91Y2gtYWN0aW9uIl09Im5vbmUiLHVbInRvdWNoLWFjdGlvbiJdPSJub25lIik7Zm9yKHZhciBoPTA7aDxLci5DQU5WQVNfTEFZRVJTO2grKyl7dmFyIGY9ZS5kYXRhLmNhbnZhc2VzW2hdPW4uY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS5kYXRhLmNvbnRleHRzW2hdPWYuZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKEope2Yuc3R5bGVbSl09dVtKXX0pLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitoKSxmLnN0eWxlLnpJbmRleD1TdHJpbmcoS3IuQ0FOVkFTX0xBWUVSUy1oKSxlLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKGYpLGUuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1toXT0hMX1lLmRhdGEudG9wQ2FudmFzPWUuZGF0YS5jYW52YXNlc1swXSxlLmRhdGEuY2FudmFzZXNbS3IuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0tyLk5PREUrIi1ub2RlIiksZS5kYXRhLmNhbnZhc2VzW0tyLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitLci5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZS5kYXRhLmNhbnZhc2VzW0tyLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitLci5EUkFHKyItZHJhZyIpO2Zvcih2YXIgaD0wO2g8S3IuQlVGRkVSX0NPVU5UO2grKyllLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF09bi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxlLmRhdGEuYnVmZmVyQ29udGV4dHNbaF09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLmdldENvbnRleHQoIjJkIiksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImJ1ZmZlciIraCksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnpJbmRleD1TdHJpbmcoLWgtMSksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7ZS5wYXRoc0VuYWJsZWQ9ITA7dmFyIGQ9S3MoKSxwPW8oZnVuY3Rpb24oSCl7cmV0dXJue3g6KEgueDErSC54MikvMix5OihILnkxK0gueTIpLzJ9fSwiZ2V0Qm94Q2VudGVyIiksbT1vKGZ1bmN0aW9uKEgpe3JldHVybnt4Oi1ILncvMix5Oi1ILmgvMn19LCJnZXRDZW50ZXJPZmZzZXQiKSxnPW8oZnVuY3Rpb24oSCl7dmFyIHE9SFswXS5fcHJpdmF0ZSxRPXEub2xkQmFja2dyb3VuZFRpbWVzdGFtcD09PXEuYmFja2dyb3VuZFRpbWVzdGFtcDtyZXR1cm4hUX0sImJhY2tncm91bmRUaW1lc3RhbXBIYXNDaGFuZ2VkIikseT1vKGZ1bmN0aW9uKEgpe3JldHVybiBIWzBdLl9wcml2YXRlLm5vZGVLZXl9LCJnZXRTdHlsZUtleSIpLHY9byhmdW5jdGlvbihIKXtyZXR1cm4gSFswXS5fcHJpdmF0ZS5sYWJlbFN0eWxlS2V5fSwiZ2V0TGFiZWxLZXkiKSx4PW8oZnVuY3Rpb24oSCl7cmV0dXJuIEhbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sImdldFNvdXJjZUxhYmVsS2V5IiksYj1vKGZ1bmN0aW9uKEgpe3JldHVybiBIWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXl9LCJnZXRUYXJnZXRMYWJlbEtleSIpLHc9byhmdW5jdGlvbihILHEsUSxhZSx1ZSl7cmV0dXJuIGUuZHJhd0VsZW1lbnQoSCxxLFEsITEsITEsdWUpfSwiZHJhd0VsZW1lbnQiKSxfPW8oZnVuY3Rpb24oSCxxLFEsYWUsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChILHEsUSxhZSwibWFpbiIsdWUpfSwiZHJhd0xhYmVsIiksVD1vKGZ1bmN0aW9uKEgscSxRLGFlLHVlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoSCxxLFEsYWUsInNvdXJjZSIsdWUpfSwiZHJhd1NvdXJjZUxhYmVsIiksRT1vKGZ1bmN0aW9uKEgscSxRLGFlLHVlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoSCxxLFEsYWUsInRhcmdldCIsdWUpfSwiZHJhd1RhcmdldExhYmVsIiksTD1vKGZ1bmN0aW9uKEgpe3JldHVybiBILmJvdW5kaW5nQm94KCksSFswXS5fcHJpdmF0ZS5ib2R5Qm91bmRzfSwiZ2V0RWxlbWVudEJveCIpLFM9byhmdW5jdGlvbihIKXtyZXR1cm4gSC5ib3VuZGluZ0JveCgpLEhbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMubWFpbnx8ZH0sImdldExhYmVsQm94IiksQT1vKGZ1bmN0aW9uKEgpe3JldHVybiBILmJvdW5kaW5nQm94KCksSFswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2V8fGR9LCJnZXRTb3VyY2VMYWJlbEJveCIpLEk9byhmdW5jdGlvbihIKXtyZXR1cm4gSC5ib3VuZGluZ0JveCgpLEhbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxkfSwiZ2V0VGFyZ2V0TGFiZWxCb3giKSxEPW8oZnVuY3Rpb24oSCxxKXtyZXR1cm4gcX0sImlzTGFiZWxWaXNpYmxlQXRTY2FsZSIpLGs9byhmdW5jdGlvbihIKXtyZXR1cm4gcChMKEgpKX0sImdldEVsZW1lbnRSb3RhdGlvblBvaW50IiksUj1vKGZ1bmN0aW9uKEgscSxRKXt2YXIgYWU9SD9IKyItIjoiIjtyZXR1cm57eDpxLngrUS5wc3R5bGUoYWUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6cS55K1EucHN0eWxlKGFlKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZX19LCJhZGRUZXh0TWFyZ2luIiksQz1vKGZ1bmN0aW9uKEgscSxRKXt2YXIgYWU9SFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDphZVtxXSx5OmFlW1FdfX0sImdldFJzUHQiKSxPPW8oZnVuY3Rpb24oSCl7cmV0dXJuIFIoIiIsQyhILCJsYWJlbFgiLCJsYWJlbFkiKSxIKX0sImdldExhYmVsUm90YXRpb25Qb2ludCIpLE49byhmdW5jdGlvbihIKXtyZXR1cm4gUigic291cmNlIixDKEgsInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLEgpfSwiZ2V0U291cmNlTGFiZWxSb3RhdGlvblBvaW50IiksUD1vKGZ1bmN0aW9uKEgpe3JldHVybiBSKCJ0YXJnZXQiLEMoSCwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksSCl9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQiKSxGPW8oZnVuY3Rpb24oSCl7cmV0dXJuIG0oTChIKSl9LCJnZXRFbGVtZW50Um90YXRpb25PZmZzZXQiKSxCPW8oZnVuY3Rpb24oSCl7cmV0dXJuIG0oQShIKSl9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0IiksRz1vKGZ1bmN0aW9uKEgpe3JldHVybiBtKEkoSCkpfSwiZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCIpLHo9byhmdW5jdGlvbihIKXt2YXIgcT1TKEgpLFE9bShTKEgpKTtpZihILmlzTm9kZSgpKXtzd2l0Y2goSC5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6US54PS1xLnc7YnJlYWs7Y2FzZSJyaWdodCI6US54PTA7YnJlYWt9c3dpdGNoKEgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6US55PS1xLmg7YnJlYWs7Y2FzZSJib3R0b20iOlEueT0wO2JyZWFrfX1yZXR1cm4gUX0sImdldExhYmVsUm90YXRpb25PZmZzZXQiKSxXPWUuZGF0YS5lbGVUeHJDYWNoZT1uZXcgSngoZSx7Z2V0S2V5OnksZG9lc0VsZUludmFsaWRhdGVLZXk6ZyxkcmF3RWxlbWVudDp3LGdldEJvdW5kaW5nQm94OkwsZ2V0Um90YXRpb25Qb2ludDprLGdldFJvdGF0aW9uT2Zmc2V0OkYsYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxaPWUuZGF0YS5sYmxUeHJDYWNoZT1uZXcgSngoZSx7Z2V0S2V5OnYsZHJhd0VsZW1lbnQ6XyxnZXRCb3VuZGluZ0JveDpTLGdldFJvdGF0aW9uUG9pbnQ6TyxnZXRSb3RhdGlvbk9mZnNldDp6LGlzVmlzaWJsZTpEfSksaj1lLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IEp4KGUse2dldEtleTp4LGRyYXdFbGVtZW50OlQsZ2V0Qm91bmRpbmdCb3g6QSxnZXRSb3RhdGlvblBvaW50Ok4sZ2V0Um90YXRpb25PZmZzZXQ6Qixpc1Zpc2libGU6RH0pLG9lPWUuZGF0YS50bGJUeHJDYWNoZT1uZXcgSngoZSx7Z2V0S2V5OmIsZHJhd0VsZW1lbnQ6RSxnZXRCb3VuZGluZ0JveDpJLGdldFJvdGF0aW9uUG9pbnQ6UCxnZXRSb3RhdGlvbk9mZnNldDpHLGlzVmlzaWJsZTpEfSksSz1lLmRhdGEubHlyVHhyQ2FjaGU9bmV3IGQxZShlKTtlLm9uVXBkYXRlRWxlQ2FsY3MobyhmdW5jdGlvbihILHEpe1cuaW52YWxpZGF0ZUVsZW1lbnRzKHEpLFouaW52YWxpZGF0ZUVsZW1lbnRzKHEpLGouaW52YWxpZGF0ZUVsZW1lbnRzKHEpLG9lLmludmFsaWRhdGVFbGVtZW50cyhxKSxLLmludmFsaWRhdGVFbGVtZW50cyhxKTtmb3IodmFyIFE9MDtRPHEubGVuZ3RoO1ErKyl7dmFyIGFlPXFbUV0uX3ByaXZhdGU7YWUub2xkQmFja2dyb3VuZFRpbWVzdGFtcD1hZS5iYWNrZ3JvdW5kVGltZXN0YW1wfX0sImludmFsaWRhdGVUZXh0dXJlQ2FjaGVzIikpO3ZhciBlZT1vKGZ1bmN0aW9uKEgpe2Zvcih2YXIgcT0wO3E8SC5sZW5ndGg7cSsrKUsuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50KEhbcV0uZWxlKX0sInJlZmluZUluTGF5ZXJzIik7Vy5vbkRlcXVldWUoZWUpLFoub25EZXF1ZXVlKGVlKSxqLm9uRGVxdWV1ZShlZSksb2Uub25EZXF1ZXVlKGVlKX1mdW5jdGlvbiBrMWUodCxlLHIpe3ZhciBuPXIsaT1vKGZ1bmN0aW9uKFMpe29uKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2UrImAgZm9yIGAiK3QrImAgc2luY2UgYCIrUysiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX0sIm92ZXJyaWRlRXJyIik7aWYodD09PSJjb3JlIil7aWYoZmIucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO2ZiLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJjb2xsZWN0aW9uIil7aWYoQWEucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO0FhLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJsYXlvdXQiKXtmb3IodmFyIGE9byhmdW5jdGlvbihTKXt0aGlzLm9wdGlvbnM9UyxyLmNhbGwodGhpcyxTKSxVcih0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9Uy5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sIkxheW91dCIpLHM9YS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbD1bXSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV07c1toXT1zW2hdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1zLnN0YXJ0JiYhcy5ydW4/cy5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFzLnN0YXJ0JiZzLnJ1biYmKHMuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIGY9ci5wcm90b3R5cGUuc3RvcDtzLnN0b3A9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLm9wdGlvbnM7aWYoTCYmTC5hbmltYXRlKXt2YXIgUz10aGlzLmFuaW1hdGlvbnM7aWYoUylmb3IodmFyIEE9MDtBPFMubGVuZ3RoO0ErKylTW0FdLnN0b3AoKX1yZXR1cm4gZj9mLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30scy5kZXN0cm95fHwocy5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBkPW8oZnVuY3Rpb24oUyl7cmV0dXJuIFMuX3ByaXZhdGUuY3l9LCJnZXRDeSIpLHA9e2FkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oUyxBKXtBLmxheW91dD1TLEEuY3k9ZChTKSxBLnRhcmdldD1TfSwiYWRkRXZlbnRGaWVsZHMiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oUyl7cmV0dXJuIGQoUyl9LCJwYXJlbnQiKX07aXIocyx7Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgcTYocCx0aGlzKSx0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihTLEEpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihTLEEpLHRoaXN9LCJvbiIpLG9uZTpvKGZ1bmN0aW9uKFMsQSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShTLEEpLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oUyxBKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKFMsQSksdGhpc30sIm9uY2UiKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKFMsQSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKFMsQSksdGhpc30sInJlbW92ZUxpc3RlbmVyIikscmVtb3ZlQWxsTGlzdGVuZXJzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sInJlbW92ZUFsbExpc3RlbmVycyIpLGVtaXQ6byhmdW5jdGlvbihTLEEpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KFMsQSksdGhpc30sImVtaXQiKX0pLHNuLmV2ZW50QWxpYXNlc09uKHMpLG49YX1lbHNlIGlmKHQ9PT0icmVuZGVyZXIiJiZlIT09Im51bGwiJiZlIT09ImJhc2UiKXt2YXIgbT1FMWUoInJlbmRlcmVyIiwiYmFzZSIpLGc9bS5wcm90b3R5cGUseT1yLHY9ci5wcm90b3R5cGUseD1vKGZ1bmN0aW9uKCl7bS5hcHBseSh0aGlzLGFyZ3VtZW50cykseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJSZW5kZXJlciIpLGI9eC5wcm90b3R5cGU7Zm9yKHZhciB3IGluIGcpe3ZhciBfPWdbd10sVD12W3ddIT1udWxsO2lmKFQpcmV0dXJuIGkodyk7Ylt3XT1ffWZvcih2YXIgRSBpbiB2KWJbRV09dltFXTtnLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKEwpe2JbTF09YltMXXx8ZnVuY3Rpb24oKXtkaSgiUmVuZGVyZXIgZG9lcyBub3QgaW1wbGVtZW50IGByZW5kZXJlci4iK0wrIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksbj14fWVsc2UgaWYodD09PSJfX3Byb3RvX18ifHx0PT09ImNvbnN0cnVjdG9yInx8dD09PSJwcm90b3R5cGUiKXJldHVybiBkaSh0KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gam1lKHttYXA6dzFlLGtleXM6W3QsZV0sdmFsdWU6bn0pfWZ1bmN0aW9uIEUxZSh0LGUpe3JldHVybiBLbWUoe21hcDp3MWUsa2V5czpbdCxlXX0pfWZ1bmN0aW9uIGpldCh0LGUscixuLGkpe3JldHVybiBqbWUoe21hcDpUMWUsa2V5czpbdCxlLHIsbl0sdmFsdWU6aX0pfWZ1bmN0aW9uIEtldCh0LGUscixuKXtyZXR1cm4gS21lKHttYXA6VDFlLGtleXM6W3QsZSxyLG5dfSl9dmFyIFhpLExwZSx3cWUsSG1lLFRxZSxrcWUsZGIsWnQsbmksa24sVXIsRXFlLHh0LFNxZSxDNix3byxwYixXbWUsbkIsWW1lLENxZSxJZixBcWUsX3FlLExxZSxEcWUscmIsaUIsQjYscW1lLERwZSxqaSxOcWUsUnFlLE1xZSxJcWUsT3FlLFBxZSxYbWUsQnFlLGlyLEZxZSx6cWUsR3FlLCRxZSxWcWUsVXFlLGptZSxLbWUsWDAsangsWXFlLHFxZSxYcWUsanFlLEY2LEtxZSxDUCxRcWUsSnFlLGVYZSxyWGUsblhlLHcxLFFtZSxpWGUsYVhlLEh4LG9YZSxsWGUsY1hlLGhYZSxmWGUsZFhlLE5wZSxabWUsZ1hlLHlYZSxtYixScGUseFhlLGJYZSx3WGUsVFhlLE1wZSxFWGUsU1hlLENYZSx6NixBUCxKbWUsX1hlLEE2LGloLHAxLGVnZSxLeCx0Z2UsbmIsaWIsTFhlLF9mLGE2LERYZSxqMCxyZ2UsTlhlLElwZSxSWGUsTVhlLGFCLG5nZSxfNixPcGUsc0IsZGksaWdlLG9uLElYZSxaYyxPWGUsYWdlLFBYZSxzZ2UsX2EsT2Ysb0IsQlhlLFFsLERmLEZYZSxKYyx6WGUsR1hlLFMxLEc2LFBwZSxhYiwkWGUsZ2IsVlhlLFVYZSxIWGUsV1hlLFlYZSxxWGUsWFhlLGpYZSxLWGUsUVhlLFpYZSxfUCxKWGUsZWplLCQ2LG9nZSxtMSx0amUscmplLG5qZSxpamUsYWplLHM2LGxCLGxnZSxLMCxVMCxzamUsbGEseTEsb2plLHNiLEtzLGxqZSxjamUsdWplLGNnZSxoamUseTYsdjYsQnBlLGNCLFQxLGZqZSx1Z2UsaGdlLGRqZSxwamUsbWplLGdqZSx5amUsdmplLGpzLGFoLHhqZSxMNixENixiamUscTAsUXgsTFAsTmYsb2Isd2plLG82LG1zLGZnZSx6UCxRMCxkZ2UsdUIsVGplLEdQLGtqZSxFamUsRnBlLHYxLHpwZSx4MSxTamUsJFAsQ2plLEFqZSxfamUsTGplLHBnZSxEamUsTmplLFJqZSxNamUsSWplLE9qZSxQamUsR3BlLEJqZSxGamUsbWdlLCRwZSxWcGUsemplLEdqZSxXeCxrMSwkamUsaEIsTjYsRFAsZ2dlLHlnZSxWamUsVWplLEhqZSxVcGUsSHBlLFdqZSxZamUscWplLFhqZSxqamUsV3BlLEtqZSxRamUsWmplLEpqZSxZcGUsbDYsZUtlLHRLZSxxcGUscktlLG5LZSxpS2UsYUtlLHNLZSxvS2UsWHBlLGxLZSxqcGUsY0tlLHVLZSxoS2UsYzYsZktlLHU2LGRLZSx2Z2UseGdlLGJnZSx3Z2Usc2gsS3BlLFRnZSxRcGUsWnBlLHBLZSxDMSxWUCxaMCxtS2UsZ0tlLFU2LHlLZSx2S2UsYktlLHdLZSxUS2Usa0tlLEVLZSxDS2UsQUtlLE5QLEpwZSxMS2UsREtlLE5LZSxNS2UsSUtlLE9LZSxQS2UsQktlLEZLZSx6S2UsR0tlLFZLZSxIS2UsZkIsWUtlLGxiLFhLZSxLS2UsUUtlLFpLZSxKS2UsdFFlLHJRZSxuUWUsYVFlLHNRZSxsUWUsZW1lLHVRZSxrZ2UsSDYsZFFlLHBRZSxnUWUsdlFlLGJRZSxUUWUsa1FlLEVRZSxTUWUsQVFlLExRZSxXNixSUWUsSVFlLFBRZSxGUWUsRWdlLHpRZSxHUWUsJFFlLFVRZSxIUWUsV1FlLFlRZSxTZ2UsQ2dlLFhRZSx0bWUscm1lLGpRZSxfZ2UsTGdlLFpRZSxwQix0WmUsblplLGlaZSxubWUsc1plLG9aZSxsWmUsdVplLGhaZSxmWmUscFplLGdaZSx2WmUsYlplLFRaZSxrWmUsRVplLHNuLFNaZSx4NixWcixwbixNdCxVUCxDWmUsQVplLF9aZSxjMSxMZixIUCxMWmUsRFplLE5aZSxSWmUsTVplLERnZSxJWmUsT1plLG1CLFBaZSxwaSwkbixCWmUsRlplLHpaZSxQZixCZixSZixobCxFMSxjYixNZ2UsJFplLFk2LFpsLElnZSxPZ2UsaW1lLFZaZSxiMSx6Zix1bCxLbCxIMCxZeCxoNixNUCxVWmUsSFplLFBnZSxCZ2UsYW1lLHViLHNtZSxvbWUsV1plLFp4LHliLEZnZSxZWmUscVplLFhaZSxqWmUsS1plLFFaZSxaWmUsSlplLGVKZSxsbWUsdEplLHJKZSxuSmUsemdlLEdnZSxpSmUsJGdlLGNtZSxhSmUsRmYsVmdlLHVtZSxzSmUsb0plLGQ2LFVnZSxIZ2UsUXIsbEplLFdnZSxSNixjSmUsdUplLGI2LENhLEQxLGhKZSxmSmUsZEplLHBKZSxNZixIYSxmbWUsZG1lLHBtZSxBYSxNbixtSmUseUplLFJuLHc2LGJKZSx3SmUscDYscWdlLFdQLFQ2LFRKZSxrSmUsWVAsazYsWWEsZWIsRUplLHZiLHZCLGV1LEs2LHhCLFNhLFE2LFVhLFdhLFNKZSxDSmUsSjAsaGIsZmIsTTYsQUplLF9KZSxmMSx3bWUsTEplLERKZSxPUCxOSmUsUkplLE1KZSxJSmUsT0plLFBKZSxRZ2UsQkplLEZKZSx6SmUsVG1lLEdKZSwkSmUsSTYsVkplLFVKZSxISmUsV0plLFlKZSxxSmUsa21lLFhKZSxqSmUsS0plLFFKZSxaSmUsRW1lLFNtZSx3Qix0cCxPNixxUCxYUCxRYyxjbCxDbWUsQW1lLFkwLEU2LG5oLCQwLFcwLEtjLGQxLG02LHIxZSxuMWUsalAsS1AsX21lLExtZSxKSmUsZWV0LHFhLHhiLGtCLHR1LHMxZSxvMWUscmV0LGwxZSxEbWUsTm1lLEo2LGVTLGMxZSx1MWUsUjEsb2gsYmIsUm1lLG5ldCxoMWUsTTEsUFAsZjFlLGlldCxNbWUsZzYsUzYsUVAsYWV0LHNldCxvZXQsY2V0LHVldCxoZXQsZmV0LGRldCxwZXQsbWV0LGdldCx5ZXQsdmV0LHhldCxnMSxiZXQsSngsUWksd2V0LHRiLFA2LFRldCxrZXQsRWV0LENldCxBZXQsX2V0LExldCxEZXQsSW1lLE5ldCxSZXQsZDFlLExhLE9tZSxNZXQscDFlLFBtZSxydSxGZXQsemV0LEdldCwkZXQsVmV0LEJQLGxoLG0xZSxFQixycCxJMSxnMWUsVG8sVWV0LEdmLEZtZSx6bWUsWlAsSlAseTFlLFYwLHdiLHgxZSxXZXQsS3IsWWV0LHFldCxYZXQsdzFlLFQxZSxlQixTMWUsZXAsUWV0LGZsLFNCPU0oKCk9PnsidXNlIHN0cmljdCI7byhLaSwiX3R5cGVvZiIpO28odEIsIl9jbGFzc0NhbGxDaGVjayIpO28oQXBlLCJfZGVmaW5lUHJvcGVydGllcyIpO28ockIsIl9jcmVhdGVDbGFzcyIpO28oJG1lLCJfZGVmaW5lUHJvcGVydHkkMSIpO28oamwsIl9zbGljZWRUb0FycmF5Iik7byh2cWUsIl9hcnJheVdpdGhIb2xlcyIpO28oeHFlLCJfaXRlcmFibGVUb0FycmF5TGltaXQiKTtvKFZtZSwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5Iik7byhfcGUsIl9hcnJheUxpa2VUb0FycmF5Iik7byhicWUsIl9ub25JdGVyYWJsZVJlc3QiKTtvKFVtZSwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiKTtYaT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyxMcGU9WGk/WGkubmF2aWdhdG9yOm51bGw7WGkmJlhpLmRvY3VtZW50O3dxZT1LaSgiIiksSG1lPUtpKHt9KSxUcWU9S2koZnVuY3Rpb24oKXt9KSxrcWU9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpLaShIVE1MRWxlbWVudCksZGI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbnN0YW5jZVN0cmluZyYmbmkoZS5pbnN0YW5jZVN0cmluZyk/ZS5pbnN0YW5jZVN0cmluZygpOm51bGx9LCJpbnN0YW5jZVN0ciIpLFp0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJktpKGUpPT13cWV9LCJzdHJpbmciKSxuaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZLaShlKT09PVRxZX0sImZuIiksa249byhmdW5jdGlvbihlKXtyZXR1cm4hd28oZSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6ZSE9bnVsbCYmZSBpbnN0YW5jZW9mIEFycmF5KX0sImFycmF5IiksVXI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmS2koZSk9PT1IbWUmJiFrbihlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sInBsYWluT2JqZWN0IiksRXFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJktpKGUpPT09SG1lfSwib2JqZWN0IikseHQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmS2koZSk9PT1LaSgxKSYmIWlzTmFOKGUpfSwibnVtYmVyIiksU3FlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHh0KGUpJiZNYXRoLmZsb29yKGUpPT09ZX0sImludGVnZXIiKSxDNj1vKGZ1bmN0aW9uKGUpe2lmKGtxZSE9PSJ1bmRlZmluZWQiKXJldHVybiBlIT1udWxsJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LCJodG1sRWxlbWVudCIpLHdvPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHBiKGUpfHxXbWUoZSl9LCJlbGVtZW50T3JDb2xsZWN0aW9uIikscGI9byhmdW5jdGlvbihlKXtyZXR1cm4gZGIoZSk9PT0iY29sbGVjdGlvbiImJmUuX3ByaXZhdGUuc2luZ2xlfSwiZWxlbWVudCIpLFdtZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBkYihlKT09PSJjb2xsZWN0aW9uIiYmIWUuX3ByaXZhdGUuc2luZ2xlfSwiY29sbGVjdGlvbiIpLG5CPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGRiKGUpPT09ImNvcmUifSwiY29yZSIpLFltZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBkYihlKT09PSJzdHlsZXNoZWV0In0sInN0eWxlc2hlZXQiKSxDcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZGIoZSk9PT0iZXZlbnQifSwiZXZlbnQiKSxJZj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyEwOiEhKGU9PT0iInx8ZS5tYXRjaCgvXlxzKyQvKSl9LCJlbXB0eVN0cmluZyIpLEFxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyExOmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sImRvbUVsZW1lbnQiKSxfcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gVXIoZSkmJnh0KGUueDEpJiZ4dChlLngyKSYmeHQoZS55MSkmJnh0KGUueTIpfSwiYm91bmRpbmdCb3giKSxMcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gRXFlKGUpJiZuaShlLnRoZW4pfSwicHJvbWlzZSIpLERxZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIExwZSYmTHBlLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LCJtcyIpLHJiPW8oZnVuY3Rpb24oZSxyKXtyfHwocj1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYS5wdXNoKGFyZ3VtZW50c1tzXSk7cmV0dXJuIGEuam9pbigiJCIpfSwia2V5Rm4iKSk7dmFyIG49byhmdW5jdGlvbiBpKCl7dmFyIGE9dGhpcyxzPWFyZ3VtZW50cyxsLHU9ci5hcHBseShhLHMpLGg9aS5jYWNoZTtyZXR1cm4obD1oW3VdKXx8KGw9aFt1XT1lLmFwcGx5KGEscykpLGx9LCJtZW1vaXplZEZuIik7cmV0dXJuIG4uY2FjaGU9e30sbn0sIm1lbW9pemUiKSxpQj1yYihmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZSl7cmV0dXJuIi0iK2UudG9Mb3dlckNhc2UoKX0pfSksQjY9cmIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfSl9KSxxbWU9cmIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiQiK2V9KSxEcGU9byhmdW5jdGlvbihlKXtyZXR1cm4gSWYoZSk/ZTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfSwiY2FwaXRhbGl6ZSIpLGppPSIoPzpbLStdPyg/Oig/OlxcZCt8XFxkKlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/KSkiLE5xZT0icmdiW2FdP1xcKCgiK2ppKyJbJV0/KVxccyosXFxzKigiK2ppKyJbJV0/KVxccyosXFxzKigiK2ppKyJbJV0/KSg/OlxccyosXFxzKigiK2ppKyIpKT9cXCkiLFJxZT0icmdiW2FdP1xcKCg/OiIramkrIlslXT8pXFxzKixcXHMqKD86IitqaSsiWyVdPylcXHMqLFxccyooPzoiK2ppKyJbJV0/KSg/OlxccyosXFxzKig/OiIramkrIikpP1xcKSIsTXFlPSJoc2xbYV0/XFwoKCIramkrIilcXHMqLFxccyooIitqaSsiWyVdKVxccyosXFxzKigiK2ppKyJbJV0pKD86XFxzKixcXHMqKCIramkrIikpP1xcKSIsSXFlPSJoc2xbYV0/XFwoKD86IitqaSsiKVxccyosXFxzKig/OiIramkrIlslXSlcXHMqLFxccyooPzoiK2ppKyJbJV0pKD86XFxzKixcXHMqKD86IitqaSsiKSk/XFwpIixPcWU9IlxcI1swLTlhLWZBLUZdezN9IixQcWU9IlxcI1swLTlhLWZBLUZdezZ9IixYbWU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlPHI/LTE6ZT5yPzE6MH0sImFzY2VuZGluZyIpLEJxZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuLTEqWG1lKGUscil9LCJkZXNjZW5kaW5nIiksaXI9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihuIT1udWxsKWZvcih2YXIgaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dFtzXT1uW3NdfX1yZXR1cm4gdH0sRnFlPW8oZnVuY3Rpb24oZSl7aWYoISghKGUubGVuZ3RoPT09NHx8ZS5sZW5ndGg9PT03KXx8ZVswXSE9PSIjIikpe3ZhciByPWUubGVuZ3RoPT09NCxuLGksYSxzPTE2O3JldHVybiByPyhuPXBhcnNlSW50KGVbMV0rZVsxXSxzKSxpPXBhcnNlSW50KGVbMl0rZVsyXSxzKSxhPXBhcnNlSW50KGVbM10rZVszXSxzKSk6KG49cGFyc2VJbnQoZVsxXStlWzJdLHMpLGk9cGFyc2VJbnQoZVszXStlWzRdLHMpLGE9cGFyc2VJbnQoZVs1XStlWzZdLHMpKSxbbixpLGFdfX0sImhleDJ0dXBsZSIpLHpxZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLHMsbCx1LGg7ZnVuY3Rpb24gZihnLHksdil7cmV0dXJuIHY8MCYmKHYrPTEpLHY+MSYmKHYtPTEpLHY8MS82P2crKHktZykqNip2OnY8MS8yP3k6djwyLzM/ZysoeS1nKSooMi8zLXYpKjY6Z31vKGYsImh1ZTJyZ2IiKTt2YXIgZD1uZXcgUmVnRXhwKCJeIitNcWUrIiQiKS5leGVjKGUpO2lmKGQpe2lmKG49cGFyc2VJbnQoZFsxXSksbjwwP249KDM2MC0gLTEqbiUzNjApJTM2MDpuPjM2MCYmKG49biUzNjApLG4vPTM2MCxpPXBhcnNlRmxvYXQoZFsyXSksaTwwfHxpPjEwMHx8KGk9aS8xMDAsYT1wYXJzZUZsb2F0KGRbM10pLGE8MHx8YT4xMDApfHwoYT1hLzEwMCxzPWRbNF0scyE9PXZvaWQgMCYmKHM9cGFyc2VGbG9hdChzKSxzPDB8fHM+MSkpKXJldHVybjtpZihpPT09MClsPXU9aD1NYXRoLnJvdW5kKGEqMjU1KTtlbHNle3ZhciBwPWE8LjU/YSooMStpKTphK2ktYSppLG09MiphLXA7bD1NYXRoLnJvdW5kKDI1NSpmKG0scCxuKzEvMykpLHU9TWF0aC5yb3VuZCgyNTUqZihtLHAsbikpLGg9TWF0aC5yb3VuZCgyNTUqZihtLHAsbi0xLzMpKX1yPVtsLHUsaCxzXX1yZXR1cm4gcn0sImhzbDJ0dXBsZSIpLEdxZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG49bmV3IFJlZ0V4cCgiXiIrTnFlKyIkIikuZXhlYyhlKTtpZihuKXtyPVtdO2Zvcih2YXIgaT1bXSxhPTE7YTw9MzthKyspe3ZhciBzPW5bYV07aWYoc1tzLmxlbmd0aC0xXT09PSIlIiYmKGlbYV09ITApLHM9cGFyc2VGbG9hdChzKSxpW2FdJiYocz1zLzEwMCoyNTUpLHM8MHx8cz4yNTUpcmV0dXJuO3IucHVzaChNYXRoLmZsb29yKHMpKX12YXIgbD1pWzFdfHxpWzJdfHxpWzNdLHU9aVsxXSYmaVsyXSYmaVszXTtpZihsJiYhdSlyZXR1cm47dmFyIGg9bls0XTtpZihoIT09dm9pZCAwKXtpZihoPXBhcnNlRmxvYXQoaCksaDwwfHxoPjEpcmV0dXJuO3IucHVzaChoKX19cmV0dXJuIHJ9LCJyZ2IydHVwbGUiKSwkcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gVXFlW2UudG9Mb3dlckNhc2UoKV19LCJjb2xvcm5hbWUydHVwbGUiKSxWcWU9byhmdW5jdGlvbihlKXtyZXR1cm4oa24oZSk/ZTpudWxsKXx8JHFlKGUpfHxGcWUoZSl8fEdxZShlKXx8enFlKGUpfSwiY29sb3IydHVwbGUiKSxVcWU9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LGptZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2E8bi5sZW5ndGgtMT8ocltzXT09bnVsbCYmKHJbc109e30pLHI9cltzXSk6cltzXT1lLnZhbHVlfX0sInNldE1hcCIpLEttZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2lmKHI9cltzXSxyPT1udWxsKXJldHVybiByfXJldHVybiByfSwiZ2V0TWFwIik7byhIcWUsImlzT2JqZWN0Iik7WDA9SHFlLGp4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307byhXcWUsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIik7WXFlPXR5cGVvZiBqeD09Im9iamVjdCImJmp4JiZqeC5PYmplY3Q9PT1PYmplY3QmJmp4LHFxZT1ZcWUsWHFlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsanFlPXFxZXx8WHFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLEY2PWpxZSxLcWU9byhmdW5jdGlvbigpe3JldHVybiBGNi5EYXRlLm5vdygpfSwibm93IiksQ1A9S3FlLFFxZT0vXHMvO28oWnFlLCJ0cmltbWVkRW5kSW5kZXgiKTtKcWU9WnFlLGVYZT0vXlxzKy87byh0WGUsImJhc2VUcmltIik7clhlPXRYZSxuWGU9RjYuU3ltYm9sLHcxPW5YZSxRbWU9T2JqZWN0LnByb3RvdHlwZSxpWGU9UW1lLmhhc093blByb3BlcnR5LGFYZT1RbWUudG9TdHJpbmcsSHg9dzE/dzEudG9TdHJpbmdUYWc6dm9pZCAwO28oc1hlLCJnZXRSYXdUYWciKTtvWGU9c1hlLGxYZT1PYmplY3QucHJvdG90eXBlLGNYZT1sWGUudG9TdHJpbmc7byh1WGUsIm9iamVjdFRvU3RyaW5nIik7aFhlPXVYZSxmWGU9IltvYmplY3QgTnVsbF0iLGRYZT0iW29iamVjdCBVbmRlZmluZWRdIixOcGU9dzE/dzEudG9TdHJpbmdUYWc6dm9pZCAwO28ocFhlLCJiYXNlR2V0VGFnIik7Wm1lPXBYZTtvKG1YZSwiaXNPYmplY3RMaWtlIik7Z1hlPW1YZSx5WGU9IltvYmplY3QgU3ltYm9sXSI7byh2WGUsImlzU3ltYm9sIik7bWI9dlhlLFJwZT1OYU4seFhlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGJYZT0vXjBiWzAxXSskL2ksd1hlPS9eMG9bMC03XSskL2ksVFhlPXBhcnNlSW50O28oa1hlLCJ0b051bWJlciIpO01wZT1rWGUsRVhlPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixTWGU9TWF0aC5tYXgsQ1hlPU1hdGgubWluO28oQVhlLCJkZWJvdW5jZSIpO3o2PUFYZSxBUD1YaT9YaS5wZXJmb3JtYW5jZTpudWxsLEptZT1BUCYmQVAubm93P2Z1bmN0aW9uKCl7cmV0dXJuIEFQLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxfWGU9ZnVuY3Rpb24oKXtpZihYaSl7aWYoWGkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih0KXtYaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O2lmKFhpLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7WGkubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTtpZihYaS53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe1hpLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07aWYoWGkubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe1hpLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfX1yZXR1cm4gZnVuY3Rpb24odCl7dCYmc2V0VGltZW91dChmdW5jdGlvbigpe3QoSm1lKCkpfSwxZTMvNjApfX0oKSxBNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBfWGUoZSl9LCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKSxpaD1KbWUscDE9OTI2MSxlZ2U9NjU1OTksS3g9NTM4MSx0Z2U9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnAxLG49cixpO2k9ZS5uZXh0KCksIWkuZG9uZTspbj1uKmVnZStpLnZhbHVlfDA7cmV0dXJuIG59LCJoYXNoSXRlcmFibGVJbnRzIiksbmI9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06cDE7cmV0dXJuIHIqZWdlK2V8MH0sImhhc2hJbnQiKSxpYj1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpLeDtyZXR1cm4ocjw8NSkrcitlfDB9LCJoYXNoSW50QWx0IiksTFhlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSoyMDk3MTUyK3J9LCJjb21iaW5lSGFzaGVzIiksX2Y9byhmdW5jdGlvbihlKXtyZXR1cm4gZVswXSoyMDk3MTUyK2VbMV19LCJjb21iaW5lSGFzaGVzQXJyYXkiKSxhNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuW25iKGVbMF0sclswXSksaWIoZVsxXSxyWzFdKV19LCJoYXNoQXJyYXlzIiksRFhlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj17dmFsdWU6MCxkb25lOiExfSxpPTAsYT1lLmxlbmd0aCxzPXtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaTxhP24udmFsdWU9ZVtpKytdOm4uZG9uZT0hMCxufSwibmV4dCIpfTtyZXR1cm4gdGdlKHMscil9LCJoYXNoSW50c0FycmF5IiksajA9byhmdW5jdGlvbihlLHIpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LGk9MCxhPWUubGVuZ3RoLHM9e25leHQ6byhmdW5jdGlvbigpe3JldHVybiBpPGE/bi52YWx1ZT1lLmNoYXJDb2RlQXQoaSsrKTpuLmRvbmU9ITAsbn0sIm5leHQiKX07cmV0dXJuIHRnZShzLHIpfSwiaGFzaFN0cmluZyIpLHJnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIE5YZShhcmd1bWVudHMpfSwiaGFzaFN0cmluZ3MiKSxOWGU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO249PT0wP3I9ajAoaSk6cj1qMChpLHIpfXJldHVybiByfSwiaGFzaFN0cmluZ3NBcnJheSIpLElwZT0hMCxSWGU9Y29uc29sZS53YXJuIT1udWxsLE1YZT1jb25zb2xlLnRyYWNlIT1udWxsLGFCPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxLG5nZT1vKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJ0cnVlaWZ5IiksXzY9byhmdW5jdGlvbigpe3JldHVybiExfSwiZmFsc2lmeSIpLE9wZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJ6ZXJvaWZ5Iiksc0I9byhmdW5jdGlvbigpe30sIm5vb3AiKSxkaT1vKGZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sImVycm9yIiksaWdlPW8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMClJcGU9ISFlO2Vsc2UgcmV0dXJuIElwZX0sIndhcm5pbmdzIiksb249byhmdW5jdGlvbihlKXtpZ2UoKSYmKFJYZT9jb25zb2xlLndhcm4oZSk6KGNvbnNvbGUubG9nKGUpLE1YZSYmY29uc29sZS50cmFjZSgpKSl9LCJ3YXJuIiksSVhlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGlyKHt9LGUpfSwiY2xvbmUiKSxaYz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP2U6a24oZSk/ZS5zbGljZSgpOlVyKGUpP0lYZShlKTplfSwiY29weSIpLE9YZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9LCJjb3B5QXJyYXkiKSxhZ2U9byhmdW5jdGlvbihlLHIpe2ZvcihyPWU9IiI7ZSsrPDM2O3IrPWUqNTEmNTI/KGVeMTU/OF5NYXRoLnJhbmRvbSgpKihlXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiByfSwidXVpZCIpLFBYZT17fSxzZ2U9byhmdW5jdGlvbigpe3JldHVybiBQWGV9LCJzdGF0aWNFbXB0eU9iamVjdCIpLF9hPW8oZnVuY3Rpb24oZSl7dmFyIHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1uPy5bc107aVtzXT1sPT09dm9pZCAwP2Vbc106bH1yZXR1cm4gaX19LCJkZWZhdWx0cyIpLE9mPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmxlbmd0aC0xO2k+PTAmJiEoZVtpXT09PXImJihlLnNwbGljZShpLDEpLG4pKTtpLS0pO30sInJlbW92ZUZyb21BcnJheSIpLG9CPW8oZnVuY3Rpb24oZSl7ZS5zcGxpY2UoMCxlLmxlbmd0aCl9LCJjbGVhckFycmF5IiksQlhlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnB1c2goaSl9fSwicHVzaCIpLFFsPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBuJiYocj1xbWUobixyKSksZVtyXX0sImdldFByZWZpeGVkUHJvcGVydHkiKSxEZj1vKGZ1bmN0aW9uKGUscixuLGkpe24mJihyPXFtZShuLHIpKSxlW3JdPWl9LCJzZXRQcmVmaXhlZFByb3BlcnR5IiksRlhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RCKHRoaXMsdCksdGhpcy5fb2JqPXt9fXJldHVybiBvKHQsIk9iamVjdE1hcCIpLHJCKHQsW3trZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9vYmpbcl09bix0aGlzfSwic2V0Iil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdPXZvaWQgMCx0aGlzfSwiX2RlbGV0ZSIpfSx7a2V5OiJjbGVhciIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuX29iaj17fX0sImNsZWFyIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdIT09dm9pZCAwfSwiaGFzIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdfSwiZ2V0Iil9XSksdH0oKSxKYz10eXBlb2YgTWFwPCJ1Ij9NYXA6RlhlLHpYZT0idW5kZWZpbmVkIixHWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2lmKHRCKHRoaXMsdCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZSE9bnVsbCl7dmFyIHI7ZS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3I9ZS50b0FycmF5KCk6cj1lO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMuYWRkKHJbbl0pfX1yZXR1cm4gbyh0LCJPYmplY3RTZXQiKSxyQih0LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiJzZXQifSwiaW5zdGFuY2VTdHJpbmciKX0se2tleToiYWRkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdIT09MSYmKG5bcl09MSx0aGlzLnNpemUrKyl9LCJhZGQiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdPT09MSYmKG5bcl09MCx0aGlzLnNpemUtLSl9LCJfZGVsZXRlIil9LHtrZXk6ImNsZWFyIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9LCJjbGVhciIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29ialtyXT09PTF9LCJoYXMiKX0se2tleToidG9BcnJheSIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX29iaikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiByLmhhcyhuKX0pfSwidG9BcnJheSIpfSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2gocixuKX0sImZvckVhY2giKX1dKSx0fSgpLFMxPSh0eXBlb2YgU2V0PiJ1Ij8idW5kZWZpbmVkIjpLaShTZXQpKSE9PXpYZT9TZXQ6R1hlLEc2PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZT09PXZvaWQgMHx8cj09PXZvaWQgMHx8IW5CKGUpKXtkaSgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIGk9ci5ncm91cDtpZihpPT1udWxsJiYoci5kYXRhJiZyLmRhdGEuc291cmNlIT1udWxsJiZyLmRhdGEudGFyZ2V0IT1udWxsP2k9ImVkZ2VzIjppPSJub2RlcyIpLGkhPT0ibm9kZXMiJiZpIT09ImVkZ2VzIil7ZGkoIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitpKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBhPXRoaXMuX3ByaXZhdGU9e2N5OmUsc2luZ2xlOiEwLGRhdGE6ci5kYXRhfHx7fSxwb3NpdGlvbjpyLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6aSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhci5zZWxlY3RlZCxzZWxlY3RhYmxlOnIuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXIuc2VsZWN0YWJsZSxsb2NrZWQ6ISFyLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTpyLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXIuZ3JhYmJhYmxlLHBhbm5hYmxlOnIucGFubmFibGU9PT12b2lkIDA/aT09PSJlZGdlcyI6ISFyLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBTMSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ci5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ci5wYXJlbnQmJnIucGFyZW50LmlzTm9kZSgpP3IucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKGEucG9zaXRpb24ueD09bnVsbCYmKGEucG9zaXRpb24ueD0wKSxhLnBvc2l0aW9uLnk9PW51bGwmJihhLnBvc2l0aW9uLnk9MCksci5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgcz1yLnJlbmRlcmVkUG9zaXRpb24sbD1lLnBhbigpLHU9ZS56b29tKCk7YS5wb3NpdGlvbj17eDoocy54LWwueCkvdSx5OihzLnktbC55KS91fX12YXIgaD1bXTtrbihyLmNsYXNzZXMpP2g9ci5jbGFzc2VzOlp0KHIuY2xhc3NlcykmJihoPXIuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgZj0wLGQ9aC5sZW5ndGg7ZjxkO2YrKyl7dmFyIHA9aFtmXTshcHx8cD09PSIifHxhLmNsYXNzZXMuYWRkKHApfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBtPXIuc3R5bGV8fHIuY3NzO20mJihvbigiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUobSkpLChuPT09dm9pZCAwfHxuKSYmdGhpcy5yZXN0b3JlKCl9LCJFbGVtZW50IiksUHBlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9e2JmczplLmJmc3x8IWUuZGZzLGRmczplLmRmc3x8IWUuYmZzfSxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcztVcihuKSYmIXdvKG4pJiYocz1uLG49cy5yb290c3x8cy5yb290LGk9cy52aXNpdCxhPXMuZGlyZWN0ZWQpLGE9YXJndW1lbnRzLmxlbmd0aD09PTImJiFuaShpKT9pOmEsaT1uaShpKT9pOmZ1bmN0aW9uKCl7fTtmb3IodmFyIGw9dGhpcy5fcHJpdmF0ZS5jeSx1PW49WnQobik/dGhpcy5maWx0ZXIobik6bixoPVtdLGY9W10sZD17fSxwPXt9LG09e30sZz0wLHksdj10aGlzLmJ5R3JvdXAoKSx4PXYubm9kZXMsYj12LmVkZ2VzLHc9MDt3PHUubGVuZ3RoO3crKyl7dmFyIF89dVt3XSxUPV8uaWQoKTtfLmlzTm9kZSgpJiYoaC51bnNoaWZ0KF8pLGUuYmZzJiYobVtUXT0hMCxmLnB1c2goXykpLHBbVF09MCl9Zm9yKHZhciBFPW8oZnVuY3Rpb24oKXt2YXIgUj1lLmJmcz9oLnNoaWZ0KCk6aC5wb3AoKSxDPVIuaWQoKTtpZihlLmRmcyl7aWYobVtDXSlyZXR1cm4iY29udGludWUiO21bQ109ITAsZi5wdXNoKFIpfXZhciBPPXBbQ10sTj1kW0NdLFA9TiE9bnVsbD9OLnNvdXJjZSgpOm51bGwsRj1OIT1udWxsP04udGFyZ2V0KCk6bnVsbCxCPU49PW51bGw/dm9pZCAwOlIuc2FtZShQKT9GWzBdOlBbMF0sRz12b2lkIDA7aWYoRz1pKFIsTixCLGcrKyxPKSxHPT09ITApcmV0dXJuIHk9UiwiYnJlYWsiO2lmKEc9PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgej1SLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybighYXx8Sy5zb3VyY2UoKS5zYW1lKFIpKSYmYi5oYXMoSyl9KSxXPTA7Vzx6Lmxlbmd0aDtXKyspe3ZhciBaPXpbV10saj1aLmNvbm5lY3RlZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiFLLnNhbWUoUikmJnguaGFzKEspfSksb2U9ai5pZCgpO2oubGVuZ3RoIT09MCYmIW1bb2VdJiYoaj1qWzBdLGgucHVzaChqKSxlLmJmcyYmKG1bb2VdPSEwLGYucHVzaChqKSksZFtvZV09WixwW29lXT1wW0NdKzEpfX0sIl9sb29wIik7aC5sZW5ndGghPT0wOyl7dmFyIEw9RSgpO2lmKEwhPT0iY29udGludWUiJiZMPT09ImJyZWFrIilicmVha31mb3IodmFyIFM9bC5jb2xsZWN0aW9uKCksQT0wO0E8Zi5sZW5ndGg7QSsrKXt2YXIgST1mW0FdLEQ9ZFtJLmlkKCldO0QhPW51bGwmJlMucHVzaChEKSxTLnB1c2goSSl9cmV0dXJue3BhdGg6bC5jb2xsZWN0aW9uKFMpLGZvdW5kOmwuY29sbGVjdGlvbih5KX19LCJzZWFyY2hGbiIpfSwiZGVmaW5lU2VhcmNoIiksYWI9e2JyZWFkdGhGaXJzdFNlYXJjaDpQcGUoe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6UHBlKHtkZnM6ITB9KX07YWIuYmZzPWFiLmJyZWFkdGhGaXJzdFNlYXJjaDthYi5kZnM9YWIuZGVwdGhGaXJzdFNlYXJjaDskWGU9V3FlKGZ1bmN0aW9uKHQsZSl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2O2k9TWF0aC5mbG9vcixkPU1hdGgubWluLG49byhmdW5jdGlvbih4LGIpe3JldHVybiB4PGI/LTE6eD5iPzE6MH0sImRlZmF1bHRDbXAiKSxmPW8oZnVuY3Rpb24oeCxiLHcsXyxUKXt2YXIgRTtpZih3PT1udWxsJiYodz0wKSxUPT1udWxsJiYoVD1uKSx3PDApdGhyb3cgbmV3IEVycm9yKCJsbyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO2ZvcihfPT1udWxsJiYoXz14Lmxlbmd0aCk7dzxfOylFPWkoKHcrXykvMiksVChiLHhbRV0pPDA/Xz1FOnc9RSsxO3JldHVybltdLnNwbGljZS5hcHBseSh4LFt3LHctd10uY29uY2F0KGIpKSxifSwiaW5zb3J0IiksbD1vKGZ1bmN0aW9uKHgsYix3KXtyZXR1cm4gdz09bnVsbCYmKHc9bikseC5wdXNoKGIpLHkoeCwwLHgubGVuZ3RoLTEsdyl9LCJoZWFwcHVzaCIpLHM9byhmdW5jdGlvbih4LGIpe3ZhciB3LF87cmV0dXJuIGI9PW51bGwmJihiPW4pLHc9eC5wb3AoKSx4Lmxlbmd0aD8oXz14WzBdLHhbMF09dyx2KHgsMCxiKSk6Xz13LF99LCJoZWFwcG9wIiksaD1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgXztyZXR1cm4gdz09bnVsbCYmKHc9biksXz14WzBdLHhbMF09Yix2KHgsMCx3KSxffSwiaGVhcHJlcGxhY2UiKSx1PW8oZnVuY3Rpb24oeCxiLHcpe3ZhciBfO3JldHVybiB3PT1udWxsJiYodz1uKSx4Lmxlbmd0aCYmdyh4WzBdLGIpPDAmJihfPVt4WzBdLGJdLGI9X1swXSx4WzBdPV9bMV0sdih4LDAsdykpLGJ9LCJoZWFwcHVzaHBvcCIpLGE9byhmdW5jdGlvbih4LGIpe3ZhciB3LF8sVCxFLEwsUztmb3IoYj09bnVsbCYmKGI9biksRT1mdW5jdGlvbigpe1M9W107Zm9yKHZhciBBPTAsST1pKHgubGVuZ3RoLzIpOzA8PUk/QTxJOkE+STswPD1JP0ErKzpBLS0pUy5wdXNoKEEpO3JldHVybiBTfS5hcHBseSh0aGlzKS5yZXZlcnNlKCksTD1bXSxfPTAsVD1FLmxlbmd0aDtfPFQ7XysrKXc9RVtfXSxMLnB1c2godih4LHcsYikpO3JldHVybiBMfSwiaGVhcGlmeSIpLGc9byhmdW5jdGlvbih4LGIsdyl7dmFyIF87aWYodz09bnVsbCYmKHc9biksXz14LmluZGV4T2YoYiksXyE9PS0xKXJldHVybiB5KHgsMCxfLHcpLHYoeCxfLHcpfSwidXBkYXRlSXRlbSIpLHA9byhmdW5jdGlvbih4LGIsdyl7dmFyIF8sVCxFLEwsUztpZih3PT1udWxsJiYodz1uKSxUPXguc2xpY2UoMCxiKSwhVC5sZW5ndGgpcmV0dXJuIFQ7Zm9yKGEoVCx3KSxTPXguc2xpY2UoYiksRT0wLEw9Uy5sZW5ndGg7RTxMO0UrKylfPVNbRV0sdShULF8sdyk7cmV0dXJuIFQuc29ydCh3KS5yZXZlcnNlKCl9LCJubGFyZ2VzdCIpLG09byhmdW5jdGlvbih4LGIsdyl7dmFyIF8sVCxFLEwsUyxBLEksRCxrO2lmKHc9PW51bGwmJih3PW4pLGIqMTA8PXgubGVuZ3RoKXtpZihFPXguc2xpY2UoMCxiKS5zb3J0KHcpLCFFLmxlbmd0aClyZXR1cm4gRTtmb3IoVD1FW0UubGVuZ3RoLTFdLEk9eC5zbGljZShiKSxMPTAsQT1JLmxlbmd0aDtMPEE7TCsrKV89SVtMXSx3KF8sVCk8MCYmKGYoRSxfLDAsbnVsbCx3KSxFLnBvcCgpLFQ9RVtFLmxlbmd0aC0xXSk7cmV0dXJuIEV9Zm9yKGEoeCx3KSxrPVtdLFM9MCxEPWQoYix4Lmxlbmd0aCk7MDw9RD9TPEQ6Uz5EOzA8PUQ/KytTOi0tUylrLnB1c2gocyh4LHcpKTtyZXR1cm4ga30sIm5zbWFsbGVzdCIpLHk9byhmdW5jdGlvbih4LGIsdyxfKXt2YXIgVCxFLEw7Zm9yKF89PW51bGwmJihfPW4pLFQ9eFt3XTt3PmI7KXtpZihMPXctMT4+MSxFPXhbTF0sXyhULEUpPDApe3hbd109RSx3PUw7Y29udGludWV9YnJlYWt9cmV0dXJuIHhbd109VH0sIl9zaWZ0ZG93biIpLHY9byhmdW5jdGlvbih4LGIsdyl7dmFyIF8sVCxFLEwsUztmb3Iodz09bnVsbCYmKHc9biksVD14Lmxlbmd0aCxTPWIsRT14W2JdLF89MipiKzE7XzxUOylMPV8rMSxMPFQmJiEodyh4W19dLHhbTF0pPDApJiYoXz1MKSx4W2JdPXhbX10sYj1fLF89MipiKzE7cmV0dXJuIHhbYl09RSx5KHgsUyxiLHcpfSwiX3NpZnR1cCIpLHI9ZnVuY3Rpb24oKXt4LnB1c2g9bCx4LnBvcD1zLHgucmVwbGFjZT1oLHgucHVzaHBvcD11LHguaGVhcGlmeT1hLHgudXBkYXRlSXRlbT1nLHgubmxhcmdlc3Q9cCx4Lm5zbWFsbGVzdD1tO2Z1bmN0aW9uIHgoYil7dGhpcy5jbXA9Yj8/bix0aGlzLm5vZGVzPVtdfXJldHVybiBvKHgsIkhlYXAiKSx4LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGIpe3JldHVybiBsKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMubm9kZXMsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXNbMF19LHgucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm5vZGVzLmluZGV4T2YoYikhPT0tMX0seC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihiKXtyZXR1cm4gaCh0aGlzLm5vZGVzLGIsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKGIpe3JldHVybiB1KHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm5vZGVzLHRoaXMuY21wKX0seC5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbihiKXtyZXR1cm4gZyh0aGlzLm5vZGVzLGIsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzPVtdfSx4LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LHgucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGh9LHgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGI9bmV3IHgsYi5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLGJ9LHgucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5zbGljZSgwKX0seC5wcm90b3R5cGUuaW5zZXJ0PXgucHJvdG90eXBlLnB1c2gseC5wcm90b3R5cGUudG9wPXgucHJvdG90eXBlLnBlZWsseC5wcm90b3R5cGUuZnJvbnQ9eC5wcm90b3R5cGUucGVlayx4LnByb3RvdHlwZS5oYXM9eC5wcm90b3R5cGUuY29udGFpbnMseC5wcm90b3R5cGUuY29weT14LnByb3RvdHlwZS5jbG9uZSx4fSgpLGZ1bmN0aW9uKHgsYil7cmV0dXJuIHQuZXhwb3J0cz1iKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSkuY2FsbChqeCl9KSxnYj0kWGUsVlhlPV9hKHtyb290Om51bGwsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMX0pLFVYZT17ZGlqa3N0cmE6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sd2VpZ2h0OnJbMV0sZGlyZWN0ZWQ6clsyXX19dmFyIG49VlhlKGUpLGk9bi5yb290LGE9bi53ZWlnaHQscz1uLmRpcmVjdGVkLGw9dGhpcyx1PWEsaD1adChpKT90aGlzLmZpbHRlcihpKVswXTppWzBdLGY9e30sZD17fSxwPXt9LG09dGhpcy5ieUdyb3VwKCksZz1tLm5vZGVzLHk9bS5lZGdlczt5LnVubWVyZ2VCeShmdW5jdGlvbihPKXtyZXR1cm4gTy5pc0xvb3AoKX0pO2Zvcih2YXIgdj1vKGZ1bmN0aW9uKE4pe3JldHVybiBmW04uaWQoKV19LCJnZXREaXN0IikseD1vKGZ1bmN0aW9uKE4sUCl7ZltOLmlkKCldPVAsYi51cGRhdGVJdGVtKE4pfSwic2V0RGlzdCIpLGI9bmV3IGdiKGZ1bmN0aW9uKE8sTil7cmV0dXJuIHYoTyktdihOKX0pLHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIF89Z1t3XTtmW18uaWQoKV09Xy5zYW1lKGgpPzA6MS8wLGIucHVzaChfKX1mb3IodmFyIFQ9byhmdW5jdGlvbihOLFApe2Zvcih2YXIgRj0ocz9OLmVkZ2VzVG8oUCk6Ti5lZGdlc1dpdGgoUCkpLmludGVyc2VjdCh5KSxCPTEvMCxHLHo9MDt6PEYubGVuZ3RoO3orKyl7dmFyIFc9Rlt6XSxaPXUoVyk7KFo8Qnx8IUcpJiYoQj1aLEc9Vyl9cmV0dXJue2VkZ2U6RyxkaXN0OkJ9fSwiZGlzdEJldHdlZW4iKTtiLnNpemUoKT4wOyl7dmFyIEU9Yi5wb3AoKSxMPXYoRSksUz1FLmlkKCk7aWYocFtTXT1MLEwhPT0xLzApZm9yKHZhciBBPUUubmVpZ2hib3Job29kKCkuaW50ZXJzZWN0KGcpLEk9MDtJPEEubGVuZ3RoO0krKyl7dmFyIEQ9QVtJXSxrPUQuaWQoKSxSPVQoRSxEKSxDPUwrUi5kaXN0O0M8dihEKSYmKHgoRCxDKSxkW2tdPXtub2RlOkUsZWRnZTpSLmVkZ2V9KX19cmV0dXJue2Rpc3RhbmNlVG86byhmdW5jdGlvbihOKXt2YXIgUD1adChOKT9nLmZpbHRlcihOKVswXTpOWzBdO3JldHVybiBwW1AuaWQoKV19LCJkaXN0YW5jZVRvIikscGF0aFRvOm8oZnVuY3Rpb24oTil7dmFyIFA9WnQoTik/Zy5maWx0ZXIoTilbMF06TlswXSxGPVtdLEI9UCxHPUIuaWQoKTtpZihQLmxlbmd0aD4wKWZvcihGLnVuc2hpZnQoUCk7ZFtHXTspe3ZhciB6PWRbR107Ri51bnNoaWZ0KHouZWRnZSksRi51bnNoaWZ0KHoubm9kZSksQj16Lm5vZGUsRz1CLmlkKCl9cmV0dXJuIGwuc3Bhd24oRil9LCJwYXRoVG8iKX19LCJkaWprc3RyYSIpfSxIWGU9e2tydXNrYWw6byhmdW5jdGlvbihlKXtlPWV8fGZ1bmN0aW9uKHcpe3JldHVybiAxfTtmb3IodmFyIHI9dGhpcy5ieUdyb3VwKCksbj1yLm5vZGVzLGk9ci5lZGdlcyxhPW4ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bix1PW8oZnVuY3Rpb24oXyl7Zm9yKHZhciBUPTA7VDxzLmxlbmd0aDtUKyspe3ZhciBFPXNbVF07aWYoRS5oYXMoXykpcmV0dXJuIFR9fSwiZmluZFNldEluZGV4IiksaD0wO2g8YTtoKyspc1toXT10aGlzLnNwYXduKG5baF0pO2Zvcih2YXIgZj1pLnNvcnQoZnVuY3Rpb24odyxfKXtyZXR1cm4gZSh3KS1lKF8pfSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdLG09cC5zb3VyY2UoKVswXSxnPXAudGFyZ2V0KClbMF0seT11KG0pLHY9dShnKSx4PXNbeV0sYj1zW3ZdO3khPT12JiYobC5tZXJnZShwKSx4Lm1lcmdlKGIpLHMuc3BsaWNlKHYsMSkpfXJldHVybiBsfSwia3J1c2thbCIpfSxXWGU9X2Eoe3Jvb3Q6bnVsbCxnb2FsOm51bGwsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxoZXVyaXN0aWM6byhmdW5jdGlvbihlKXtyZXR1cm4gMH0sImhldXJpc3RpYyIpLGRpcmVjdGVkOiExfSksWVhlPXthU3RhcjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPVdYZShlKSxpPW4ucm9vdCxhPW4uZ29hbCxzPW4uaGV1cmlzdGljLGw9bi5kaXJlY3RlZCx1PW4ud2VpZ2h0O2k9ci5jb2xsZWN0aW9uKGkpWzBdLGE9ci5jb2xsZWN0aW9uKGEpWzBdO3ZhciBoPWkuaWQoKSxmPWEuaWQoKSxkPXt9LHA9e30sbT17fSxnPW5ldyBnYihmdW5jdGlvbihHLHope3JldHVybiBwW0cuaWQoKV0tcFt6LmlkKCldfSkseT1uZXcgUzEsdj17fSx4PXt9LGI9byhmdW5jdGlvbih6LFcpe2cucHVzaCh6KSx5LmFkZChXKX0sImFkZFRvT3BlblNldCIpLHcsXyxUPW8oZnVuY3Rpb24oKXt3PWcucG9wKCksXz13LmlkKCkseS5kZWxldGUoXyl9LCJwb3BGcm9tT3BlblNldCIpLEU9byhmdW5jdGlvbih6KXtyZXR1cm4geS5oYXMoeil9LCJpc0luT3BlblNldCIpO2IoaSxoKSxkW2hdPTAscFtoXT1zKGkpO2Zvcih2YXIgTD0wO2cuc2l6ZSgpPjA7KXtpZihUKCksTCsrLF89PT1mKXtmb3IodmFyIFM9W10sQT1hLEk9ZixEPXhbSV07Uy51bnNoaWZ0KEEpLEQhPW51bGwmJlMudW5zaGlmdChEKSxBPXZbSV0sQSE9bnVsbDspST1BLmlkKCksRD14W0ldO3JldHVybntmb3VuZDohMCxkaXN0YW5jZTpkW19dLHBhdGg6dGhpcy5zcGF3bihTKSxzdGVwczpMfX1tW19dPSEwO2Zvcih2YXIgaz13Ll9wcml2YXRlLmVkZ2VzLFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIEM9a1tSXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoQy5pZCgpKSYmIShsJiZDLmRhdGEoInNvdXJjZSIpIT09Xykpe3ZhciBPPUMuc291cmNlKCksTj1DLnRhcmdldCgpLFA9Ty5pZCgpIT09Xz9POk4sRj1QLmlkKCk7aWYodGhpcy5oYXNFbGVtZW50V2l0aElkKEYpJiYhbVtGXSl7dmFyIEI9ZFtfXSt1KEMpO2lmKCFFKEYpKXtkW0ZdPUIscFtGXT1CK3MoUCksYihQLEYpLHZbRl09dyx4W0ZdPUM7Y29udGludWV9QjxkW0ZdJiYoZFtGXT1CLHBbRl09QitzKFApLHZbRl09dyx4W0ZdPUMpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6TH19LCJhU3RhciIpfSxxWGU9X2Eoe3dlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITF9KSxYWGU9e2Zsb3lkV2Fyc2hhbGw6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5jeSgpLG49cVhlKGUpLGk9bi53ZWlnaHQsYT1uLmRpcmVjdGVkLHM9aSxsPXRoaXMuYnlHcm91cCgpLHU9bC5ub2RlcyxoPWwuZWRnZXMsZj11Lmxlbmd0aCxkPWYqZixwPW8oZnVuY3Rpb24oWil7cmV0dXJuIHUuaW5kZXhPZihaKX0sImluZGV4T2YiKSxtPW8oZnVuY3Rpb24oWil7cmV0dXJuIHVbWl19LCJhdEluZGV4IiksZz1uZXcgQXJyYXkoZCkseT0wO3k8ZDt5Kyspe3ZhciB2PXklZix4PSh5LXYpL2Y7eD09PXY/Z1t5XT0wOmdbeV09MS8wfWZvcih2YXIgYj1uZXcgQXJyYXkoZCksdz1uZXcgQXJyYXkoZCksXz0wO188aC5sZW5ndGg7XysrKXt2YXIgVD1oW19dLEU9VC5zb3VyY2UoKVswXSxMPVQudGFyZ2V0KClbMF07aWYoRSE9PUwpe3ZhciBTPXAoRSksQT1wKEwpLEk9UypmK0EsRD1zKFQpO2lmKGdbSV0+RCYmKGdbSV09RCxiW0ldPUEsd1tJXT1UKSwhYSl7dmFyIGs9QSpmK1M7IWEmJmdba10+RCYmKGdba109RCxiW2tdPVMsd1trXT1UKX19fWZvcih2YXIgUj0wO1I8ZjtSKyspZm9yKHZhciBDPTA7QzxmO0MrKylmb3IodmFyIE89QypmK1IsTj0wO048ZjtOKyspe3ZhciBQPUMqZitOLEY9UipmK047Z1tPXStnW0ZdPGdbUF0mJihnW1BdPWdbT10rZ1tGXSxiW1BdPWJbT10pfXZhciBCPW8oZnVuY3Rpb24oWil7cmV0dXJuKFp0KFopP3IuZmlsdGVyKFopOlopWzBdfSwiZ2V0QXJnRWxlIiksRz1vKGZ1bmN0aW9uKFope3JldHVybiBwKEIoWikpfSwiaW5kZXhPZkFyZ0VsZSIpLHo9e2Rpc3RhbmNlOm8oZnVuY3Rpb24oWixqKXt2YXIgb2U9RyhaKSxLPUcoaik7cmV0dXJuIGdbb2UqZitLXX0sImRpc3RhbmNlIikscGF0aDpvKGZ1bmN0aW9uKFosail7dmFyIG9lPUcoWiksSz1HKGopLGVlPW0ob2UpO2lmKG9lPT09SylyZXR1cm4gZWUuY29sbGVjdGlvbigpO2lmKGJbb2UqZitLXT09bnVsbClyZXR1cm4gci5jb2xsZWN0aW9uKCk7dmFyIEo9ci5jb2xsZWN0aW9uKCksSD1vZSxxO2ZvcihKLm1lcmdlKGVlKTtvZSE9PUs7KUg9b2Usb2U9YltvZSpmK0tdLHE9d1tIKmYrb2VdLEoubWVyZ2UocSksSi5tZXJnZShtKG9lKSk7cmV0dXJuIEp9LCJwYXRoIil9O3JldHVybiB6fSwiZmxveWRXYXJzaGFsbCIpfSxqWGU9X2Eoe3dlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksS1hlPXtiZWxsbWFuRm9yZDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1qWGUoZSksaT1uLndlaWdodCxhPW4uZGlyZWN0ZWQscz1uLnJvb3QsbD1pLHU9dGhpcyxoPXRoaXMuY3koKSxmPXRoaXMuYnlHcm91cCgpLGQ9Zi5lZGdlcyxwPWYubm9kZXMsbT1wLmxlbmd0aCxnPW5ldyBKYyx5PSExLHY9W107cz1oLmNvbGxlY3Rpb24ocylbMF0sZC51bm1lcmdlQnkoZnVuY3Rpb24oc2Upe3JldHVybiBzZS5pc0xvb3AoKX0pO2Zvcih2YXIgeD1kLmxlbmd0aCxiPW8oZnVuY3Rpb24oa2Upe3ZhciBSZT1nLmdldChrZS5pZCgpKTtyZXR1cm4gUmV8fChSZT17fSxnLnNldChrZS5pZCgpLFJlKSksUmV9LCJnZXRJbmZvIiksdz1vKGZ1bmN0aW9uKGtlKXtyZXR1cm4oWnQoa2UpP2guJChrZSk6a2UpWzBdfSwiZ2V0Tm9kZUZyb21UbyIpLF89byhmdW5jdGlvbihrZSl7cmV0dXJuIGIodyhrZSkpLmRpc3R9LCJkaXN0YW5jZVRvIiksVD1vKGZ1bmN0aW9uKGtlKXtmb3IodmFyIFJlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpzLENlPXcoa2UpLFBlPVtdLEllPUNlOzspe2lmKEllPT1udWxsKXJldHVybiByLnNwYXduKCk7dmFyICRlPWIoSWUpLHllPSRlLmVkZ2UsWD0kZS5wcmVkO2lmKFBlLnVuc2hpZnQoSWVbMF0pLEllLnNhbWUoUmUpJiZQZS5sZW5ndGg+MClicmVhazt5ZSE9bnVsbCYmUGUudW5zaGlmdCh5ZSksSWU9WH1yZXR1cm4gdS5zcGF3bihQZSl9LCJwYXRoVG8iKSxFPTA7RTxtO0UrKyl7dmFyIEw9cFtFXSxTPWIoTCk7TC5zYW1lKHMpP1MuZGlzdD0wOlMuZGlzdD0xLzAsUy5wcmVkPW51bGwsUy5lZGdlPW51bGx9Zm9yKHZhciBBPSExLEk9byhmdW5jdGlvbihrZSxSZSxDZSxQZSxJZSwkZSl7dmFyIHllPVBlLmRpc3QrJGU7eWU8SWUuZGlzdCYmIUNlLnNhbWUoUGUuZWRnZSkmJihJZS5kaXN0PXllLEllLnByZWQ9a2UsSWUuZWRnZT1DZSxBPSEwKX0sImNoZWNrRm9yRWRnZVJlcGxhY2VtZW50IiksRD0xO0Q8bTtEKyspe0E9ITE7Zm9yKHZhciBrPTA7azx4O2srKyl7dmFyIFI9ZFtrXSxDPVIuc291cmNlKCksTz1SLnRhcmdldCgpLE49bChSKSxQPWIoQyksRj1iKE8pO0koQyxPLFIsUCxGLE4pLGF8fEkoTyxDLFIsRixQLE4pfWlmKCFBKWJyZWFrfWlmKEEpZm9yKHZhciBCPVtdLEc9MDtHPHg7RysrKXt2YXIgej1kW0ddLFc9ei5zb3VyY2UoKSxaPXoudGFyZ2V0KCksaj1sKHopLG9lPWIoVykuZGlzdCxLPWIoWikuZGlzdDtpZihvZStqPEt8fCFhJiZLK2o8b2UpaWYoeXx8KG9uKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIikseT0hMCksZS5maW5kTmVnYXRpdmVXZWlnaHRDeWNsZXMhPT0hMSl7dmFyIGVlPVtdO29lK2o8SyYmZWUucHVzaChXKSwhYSYmSytqPG9lJiZlZS5wdXNoKFopO2Zvcih2YXIgSj1lZS5sZW5ndGgsSD0wO0g8SjtIKyspe3ZhciBxPWVlW0hdLFE9W3FdO1EucHVzaChiKHEpLmVkZ2UpO2Zvcih2YXIgYWU9YihxKS5wcmVkO1EuaW5kZXhPZihhZSk9PT0tMTspUS5wdXNoKGFlKSxRLnB1c2goYihhZSkuZWRnZSksYWU9YihhZSkucHJlZDtRPVEuc2xpY2UoUS5pbmRleE9mKGFlKSk7Zm9yKHZhciB1ZT1RWzBdLmlkKCksY2U9MCx0ZT0yO3RlPFEubGVuZ3RoO3RlKz0yKVFbdGVdLmlkKCk8dWUmJih1ZT1RW3RlXS5pZCgpLGNlPXRlKTtRPVEuc2xpY2UoY2UpLmNvbmNhdChRLnNsaWNlKDAsY2UpKSxRLnB1c2goUVswXSk7dmFyIE5lPVEubWFwKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQoKX0pLmpvaW4oIiwiKTtCLmluZGV4T2YoTmUpPT09LTEmJih2LnB1c2godS5zcGF3bihRKSksQi5wdXNoKE5lKSl9fWVsc2UgYnJlYWt9cmV0dXJue2Rpc3RhbmNlVG86XyxwYXRoVG86VCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOnksbmVnYXRpdmVXZWlnaHRDeWNsZXM6dn19LCJiZWxsbWFuRm9yZCIpfSxRWGU9TWF0aC5zcXJ0KDIpLFpYZT1vKGZ1bmN0aW9uKGUscixuKXtuLmxlbmd0aD09PTAmJmRpKCJLYXJnZXItU3RlaW4gbXVzdCBiZSBydW4gb24gYSBjb25uZWN0ZWQgKHN1YilncmFwaCIpO2Zvcih2YXIgaT1uW2VdLGE9aVsxXSxzPWlbMl0sbD1yW2FdLHU9cltzXSxoPW4sZj1oLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgZD1oW2ZdLHA9ZFsxXSxtPWRbMl07KHJbcF09PT1sJiZyW21dPT09dXx8cltwXT09PXUmJnJbbV09PT1sKSYmaC5zcGxpY2UoZiwxKX1mb3IodmFyIGc9MDtnPGgubGVuZ3RoO2crKyl7dmFyIHk9aFtnXTt5WzFdPT09dT8oaFtnXT15LnNsaWNlKCksaFtnXVsxXT1sKTp5WzJdPT09dSYmKGhbZ109eS5zbGljZSgpLGhbZ11bMl09bCl9Zm9yKHZhciB2PTA7djxyLmxlbmd0aDt2Kyspclt2XT09PXUmJihyW3ZdPWwpO3JldHVybiBofSwiY29sbGFwc2UiKSxfUD1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcig7bj5pOyl7dmFyIGE9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnIubGVuZ3RoKTtyPVpYZShhLGUsciksbi0tfXJldHVybiByfSwiY29udHJhY3RVbnRpbCIpLEpYZT17a2FyZ2VyU3RlaW46byhmdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLmJ5R3JvdXAoKSxuPXIubm9kZXMsaT1yLmVkZ2VzO2kudW5tZXJnZUJ5KGZ1bmN0aW9uKEYpe3JldHVybiBGLmlzTG9vcCgpfSk7dmFyIGE9bi5sZW5ndGgscz1pLmxlbmd0aCxsPU1hdGguY2VpbChNYXRoLnBvdyhNYXRoLmxvZyhhKS9NYXRoLkxOMiwyKSksdT1NYXRoLmZsb29yKGEvUVhlKTtpZihhPDIpe2RpKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIGg9W10sZj0wO2Y8cztmKyspe3ZhciBkPWlbZl07aC5wdXNoKFtmLG4uaW5kZXhPZihkLnNvdXJjZSgpKSxuLmluZGV4T2YoZC50YXJnZXQoKSldKX1mb3IodmFyIHA9MS8wLG09W10sZz1uZXcgQXJyYXkoYSkseT1uZXcgQXJyYXkoYSksdj1uZXcgQXJyYXkoYSkseD1vKGZ1bmN0aW9uKEIsRyl7Zm9yKHZhciB6PTA7ejxhO3orKylHW3pdPUJbel19LCJjb3B5Tm9kZXNNYXAiKSxiPTA7Yjw9bDtiKyspe2Zvcih2YXIgdz0wO3c8YTt3KyspeVt3XT13O3ZhciBfPV9QKHksaC5zbGljZSgpLGEsdSksVD1fLnNsaWNlKCk7eCh5LHYpO3ZhciBFPV9QKHksXyx1LDIpLEw9X1AodixULHUsMik7RS5sZW5ndGg8PUwubGVuZ3RoJiZFLmxlbmd0aDxwPyhwPUUubGVuZ3RoLG09RSx4KHksZykpOkwubGVuZ3RoPD1FLmxlbmd0aCYmTC5sZW5ndGg8cCYmKHA9TC5sZW5ndGgsbT1MLHgodixnKSl9Zm9yKHZhciBTPXRoaXMuc3Bhd24obS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIGlbRlswXV19KSksQT10aGlzLnNwYXduKCksST10aGlzLnNwYXduKCksRD1nWzBdLGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIFI9Z1trXSxDPW5ba107Uj09PUQ/QS5tZXJnZShDKTpJLm1lcmdlKEMpfXZhciBPPW8oZnVuY3Rpb24oQil7dmFyIEc9ZS5zcGF3bigpO3JldHVybiBCLmZvckVhY2goZnVuY3Rpb24oeil7Ry5tZXJnZSh6KSx6LmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihXKXtlLmNvbnRhaW5zKFcpJiYhUy5jb250YWlucyhXKSYmRy5tZXJnZShXKX0pfSksR30sImNvbnN0cnVjdENvbXBvbmVudCIpLE49W08oQSksTyhJKV0sUD17Y3V0OlMsY29tcG9uZW50czpOLHBhcnRpdGlvbjE6QSxwYXJ0aXRpb24yOkl9O3JldHVybiBQfSwia2FyZ2VyU3RlaW4iKX0sZWplPW8oZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHk6ZS55fX0sImNvcHlQb3NpdGlvbiIpLCQ2PW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OmUueCpyK24ueCx5OmUueSpyK24ueX19LCJtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiIpLG9nZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDooZS54LW4ueCkvcix5OihlLnktbi55KS9yfX0sInJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uIiksbTE9byhmdW5jdGlvbihlKXtyZXR1cm57eDplWzBdLHk6ZVsxXX19LCJhcnJheTJwb2ludCIpLHRqZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPTEvMCxhPXI7YTxuO2ErKyl7dmFyIHM9ZVthXTtpc0Zpbml0ZShzKSYmKGk9TWF0aC5taW4ocyxpKSl9cmV0dXJuIGl9LCJtaW4iKSxyamU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0tMS8wLGE9cjthPG47YSsrKXt2YXIgcz1lW2FdO2lzRmluaXRlKHMpJiYoaT1NYXRoLm1heChzLGkpKX1yZXR1cm4gaX0sIm1heCIpLG5qZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPTAsYT0wLHM9cjtzPG47cysrKXt2YXIgbD1lW3NdO2lzRmluaXRlKGwpJiYoaSs9bCxhKyspfXJldHVybiBpL2F9LCJtZWFuIiksaWplPW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsYT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAscz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7aT9lPWUuc2xpY2UocixuKToobjxlLmxlbmd0aCYmZS5zcGxpY2UobixlLmxlbmd0aC1uKSxyPjAmJmUuc3BsaWNlKDAscikpO2Zvcih2YXIgbD0wLHU9ZS5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9ZVt1XTtzP2lzRmluaXRlKGgpfHwoZVt1XT0tMS8wLGwrKyk6ZS5zcGxpY2UodSwxKX1hJiZlLnNvcnQoZnVuY3Rpb24ocCxtKXtyZXR1cm4gcC1tfSk7dmFyIGY9ZS5sZW5ndGgsZD1NYXRoLmZsb29yKGYvMik7cmV0dXJuIGYlMiE9PTA/ZVtkKzErbF06KGVbZC0xK2xdK2VbZCtsXSkvMn0sIm1lZGlhbiIpLGFqZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLlBJKmUvMTgwfSwiZGVnMnJhZCIpLHM2PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hdGFuMihyLGUpLU1hdGguUEkvMn0sImdldEFuZ2xlRnJvbURpc3AiKSxsQj1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLmxvZygyKX0sbGdlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSwic2lnbnVtIiksSzA9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLnNxcnQoVTAoZSxyKSl9LCJkaXN0IiksVTA9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBuKm4raSppfSwic3FkaXN0Iiksc2plPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49MCxpPTA7aTxyO2krKyluKz1lW2ldO2Zvcih2YXIgYT0wO2E8cjthKyspZVthXT1lW2FdL247cmV0dXJuIGV9LCJpblBsYWNlU3VtTm9ybWFsaXplIiksbGE9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4oMS1pKSooMS1pKSplKzIqKDEtaSkqaSpyK2kqaSpufSwicWJlemllckF0IikseTE9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm57eDpsYShlLngsci54LG4ueCxpKSx5OmxhKGUueSxyLnksbi55LGkpfX0sInFiZXppZXJQdEF0Iiksb2plPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9e3g6ci54LWUueCx5OnIueS1lLnl9LHM9SzAoZSxyKSxsPXt4OmEueC9zLHk6YS55L3N9O3JldHVybiBuPW4/PzAsaT1pPz9uKnMse3g6ZS54K2wueCppLHk6ZS55K2wueSppfX0sImxpbmVBdCIpLHNiPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4scikpfSwiYm91bmQiKSxLcz1vKGZ1bmN0aW9uKGUpe2lmKGU9PW51bGwpcmV0dXJue3gxOjEvMCx5MToxLzAseDI6LTEvMCx5MjotMS8wLHc6MCxoOjB9O2lmKGUueDEhPW51bGwmJmUueTEhPW51bGwpe2lmKGUueDIhPW51bGwmJmUueTIhPW51bGwmJmUueDI+PWUueDEmJmUueTI+PWUueTEpcmV0dXJue3gxOmUueDEseTE6ZS55MSx4MjplLngyLHkyOmUueTIsdzplLngyLWUueDEsaDplLnkyLWUueTF9O2lmKGUudyE9bnVsbCYmZS5oIT1udWxsJiZlLnc+PTAmJmUuaD49MClyZXR1cm57eDE6ZS54MSx5MTplLnkxLHgyOmUueDErZS53LHkyOmUueTErZS5oLHc6ZS53LGg6ZS5ofX19LCJtYWtlQm91bmRpbmdCb3giKSxsamU9byhmdW5jdGlvbihlKXtyZXR1cm57eDE6ZS54MSx4MjplLngyLHc6ZS53LHkxOmUueTEseTI6ZS55MixoOmUuaH19LCJjb3B5Qm91bmRpbmdCb3giKSxjamU9byhmdW5jdGlvbihlKXtlLngxPTEvMCxlLnkxPTEvMCxlLngyPS0xLzAsZS55Mj0tMS8wLGUudz0wLGUuaD0wfSwiY2xlYXJCb3VuZGluZ0JveCIpLHVqZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDE6ZS54MStyLHgyOmUueDIrcix5MTplLnkxK24seTI6ZS55MituLHc6ZS53LGg6ZS5ofX0sInNoaWZ0Qm91bmRpbmdCb3giKSxjZ2U9byhmdW5jdGlvbihlLHIpe2UueDE9TWF0aC5taW4oZS54MSxyLngxKSxlLngyPU1hdGgubWF4KGUueDIsci54MiksZS53PWUueDItZS54MSxlLnkxPU1hdGgubWluKGUueTEsci55MSksZS55Mj1NYXRoLm1heChlLnkyLHIueTIpLGUuaD1lLnkyLWUueTF9LCJ1cGRhdGVCb3VuZGluZ0JveCIpLGhqZT1vKGZ1bmN0aW9uKGUscixuKXtlLngxPU1hdGgubWluKGUueDEsciksZS54Mj1NYXRoLm1heChlLngyLHIpLGUudz1lLngyLWUueDEsZS55MT1NYXRoLm1pbihlLnkxLG4pLGUueTI9TWF0aC5tYXgoZS55MixuKSxlLmg9ZS55Mi1lLnkxfSwiZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50IikseTY9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gZS54MS09cixlLngyKz1yLGUueTEtPXIsZS55Mis9cixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEsZX0sImV4cGFuZEJvdW5kaW5nQm94IiksdjY9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLG4saSxhLHM7aWYoci5sZW5ndGg9PT0xKW49aT1hPXM9clswXTtlbHNlIGlmKHIubGVuZ3RoPT09MiluPWE9clswXSxzPWk9clsxXTtlbHNlIGlmKHIubGVuZ3RoPT09NCl7dmFyIGw9amwociw0KTtuPWxbMF0saT1sWzFdLGE9bFsyXSxzPWxbM119cmV0dXJuIGUueDEtPXMsZS54Mis9aSxlLnkxLT1uLGUueTIrPWEsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxLGV9LCJleHBhbmRCb3VuZGluZ0JveFNpZGVzIiksQnBlPW8oZnVuY3Rpb24oZSxyKXtlLngxPXIueDEsZS55MT1yLnkxLGUueDI9ci54MixlLnkyPXIueTIsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxfSwiYXNzaWduQm91bmRpbmdCb3giKSxjQj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIShlLngxPnIueDJ8fHIueDE+ZS54Mnx8ZS54MjxyLngxfHxyLngyPGUueDF8fGUueTI8ci55MXx8ci55MjxlLnkxfHxlLnkxPnIueTJ8fHIueTE+ZS55Mil9LCJib3VuZGluZ0JveGVzSW50ZXJzZWN0IiksVDE9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUueDE8PXImJnI8PWUueDImJmUueTE8PW4mJm48PWUueTJ9LCJpbkJvdW5kaW5nQm94IiksZmplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gVDEoZSxyLngsci55KX0sInBvaW50SW5Cb3VuZGluZ0JveCIpLHVnZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIFQxKGUsci54MSxyLnkxKSYmVDEoZSxyLngyLHIueTIpfSwiYm91bmRpbmdCb3hJbkJvdW5kaW5nQm94IiksaGdlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiJhdXRvIixoPXU9PT0iYXV0byI/UTAoYSxzKTp1LGY9YS8yLGQ9cy8yO2g9TWF0aC5taW4oaCxmLGQpO3ZhciBwPWghPT1mLG09aCE9PWQsZztpZihwKXt2YXIgeT1uLWYraC1sLHY9aS1kLWwseD1uK2YtaCtsLGI9djtpZihnPU5mKGUscixuLGkseSx2LHgsYiwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihtKXt2YXIgdz1uK2YrbCxfPWktZCtoLWwsVD13LEU9aStkLWgrbDtpZihnPU5mKGUscixuLGksdyxfLFQsRSwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihwKXt2YXIgTD1uLWYraC1sLFM9aStkK2wsQT1uK2YtaCtsLEk9UztpZihnPU5mKGUscixuLGksTCxTLEEsSSwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihtKXt2YXIgRD1uLWYtbCxrPWktZCtoLWwsUj1ELEM9aStkLWgrbDtpZihnPU5mKGUscixuLGksRCxrLFIsQywhMSksZy5sZW5ndGg+MClyZXR1cm4gZ312YXIgTzt7dmFyIE49bi1mK2gsUD1pLWQraDtpZihPPVF4KGUscixuLGksTixQLGgrbCksTy5sZW5ndGg+MCYmT1swXTw9TiYmT1sxXTw9UClyZXR1cm5bT1swXSxPWzFdXX17dmFyIEY9bitmLWgsQj1pLWQraDtpZihPPVF4KGUscixuLGksRixCLGgrbCksTy5sZW5ndGg+MCYmT1swXT49RiYmT1sxXTw9QilyZXR1cm5bT1swXSxPWzFdXX17dmFyIEc9bitmLWgsej1pK2QtaDtpZihPPVF4KGUscixuLGksRyx6LGgrbCksTy5sZW5ndGg+MCYmT1swXT49RyYmT1sxXT49eilyZXR1cm5bT1swXSxPWzFdXX17dmFyIFc9bi1mK2gsWj1pK2QtaDtpZihPPVF4KGUscixuLGksVyxaLGgrbCksTy5sZW5ndGg+MCYmT1swXTw9VyYmT1sxXT49WilyZXR1cm5bT1swXSxPWzFdXX1yZXR1cm5bXX0sInJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSIpLGRqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PWwsaD1NYXRoLm1pbihuLGEpLGY9TWF0aC5tYXgobixhKSxkPU1hdGgubWluKGkscykscD1NYXRoLm1heChpLHMpO3JldHVybiBoLXU8PWUmJmU8PWYrdSYmZC11PD1yJiZyPD1wK3V9LCJpbkxpbmVWaWNpbml0eSIpLHBqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj17eDE6TWF0aC5taW4obixsLGEpLWgseDI6TWF0aC5tYXgobixsLGEpK2gseTE6TWF0aC5taW4oaSx1LHMpLWgseTI6TWF0aC5tYXgoaSx1LHMpK2h9O3JldHVybiEoZTxmLngxfHxlPmYueDJ8fHI8Zi55MXx8cj5mLnkyKX0sImluQmV6aWVyVmljaW5pdHkiKSxtamU9byhmdW5jdGlvbihlLHIsbixpKXtuLT1pO3ZhciBhPXIqci00KmUqbjtpZihhPDApcmV0dXJuW107dmFyIHM9TWF0aC5zcXJ0KGEpLGw9MiplLHU9KC1yK3MpL2wsaD0oLXItcykvbDtyZXR1cm5bdSxoXX0sInNvbHZlUXVhZHJhdGljIiksZ2plPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz0xZS01O2U9PT0wJiYoZT1zKSxyLz1lLG4vPWUsaS89ZTt2YXIgbCx1LGgsZixkLHAsbSxnO2lmKHU9KDMqbi1yKnIpLzksaD0tKDI3KmkpK3IqKDkqbi0yKihyKnIpKSxoLz01NCxsPXUqdSp1K2gqaCxhWzFdPTAsbT1yLzMsbD4wKXtkPWgrTWF0aC5zcXJ0KGwpLGQ9ZDwwPy1NYXRoLnBvdygtZCwxLzMpOk1hdGgucG93KGQsMS8zKSxwPWgtTWF0aC5zcXJ0KGwpLHA9cDwwPy1NYXRoLnBvdygtcCwxLzMpOk1hdGgucG93KHAsMS8zKSxhWzBdPS1tK2QrcCxtKz0oZCtwKS8yLGFbNF09YVsyXT0tbSxtPU1hdGguc3FydCgzKSooLXArZCkvMixhWzNdPW0sYVs1XT0tbTtyZXR1cm59aWYoYVs1XT1hWzNdPTAsbD09PTApe2c9aDwwPy1NYXRoLnBvdygtaCwxLzMpOk1hdGgucG93KGgsMS8zKSxhWzBdPS1tKzIqZyxhWzRdPWFbMl09LShnK20pO3JldHVybn11PS11LGY9dSp1KnUsZj1NYXRoLmFjb3MoaC9NYXRoLnNxcnQoZikpLGc9MipNYXRoLnNxcnQodSksYVswXT0tbStnKk1hdGguY29zKGYvMyksYVsyXT0tbStnKk1hdGguY29zKChmKzIqTWF0aC5QSSkvMyksYVs0XT0tbStnKk1hdGguY29zKChmKzQqTWF0aC5QSSkvMyl9LCJzb2x2ZUN1YmljIikseWplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD0xKm4qbi00Km4qYSsyKm4qbCs0KmEqYS00KmEqbCtsKmwraSppLTQqaSpzKzIqaSp1KzQqcypzLTQqcyp1K3UqdSxmPTEqOSpuKmEtMypuKm4tMypuKmwtNiphKmErMyphKmwrOSppKnMtMyppKmktMyppKnUtNipzKnMrMypzKnUsZD0xKjMqbipuLTYqbiphK24qbC1uKmUrMiphKmErMiphKmUtbCplKzMqaSppLTYqaSpzK2kqdS1pKnIrMipzKnMrMipzKnItdSpyLHA9MSpuKmEtbipuK24qZS1hKmUraSpzLWkqaStpKnItcypyLG09W107Z2plKGgsZixkLHAsbSk7Zm9yKHZhciBnPTFlLTcseT1bXSx2PTA7djw2O3YrPTIpTWF0aC5hYnMobVt2KzFdKTxnJiZtW3ZdPj0wJiZtW3ZdPD0xJiZ5LnB1c2gobVt2XSk7eS5wdXNoKDEpLHkucHVzaCgwKTtmb3IodmFyIHg9LTEsYix3LF8sVD0wO1Q8eS5sZW5ndGg7VCsrKWI9TWF0aC5wb3coMS15W1RdLDIpKm4rMiooMS15W1RdKSp5W1RdKmEreVtUXSp5W1RdKmwsdz1NYXRoLnBvdygxLXlbVF0sMikqaSsyKigxLXlbVF0pKnlbVF0qcyt5W1RdKnlbVF0qdSxfPU1hdGgucG93KGItZSwyKStNYXRoLnBvdyh3LXIsMikseD49MD9fPHgmJih4PV8pOng9XztyZXR1cm4geH0sInNxZGlzdFRvUXVhZHJhdGljQmV6aWVyIiksdmplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPVtlLW4sci1pXSx1PVthLW4scy1pXSxoPXVbMF0qdVswXSt1WzFdKnVbMV0sZj1sWzBdKmxbMF0rbFsxXSpsWzFdLGQ9bFswXSp1WzBdK2xbMV0qdVsxXSxwPWQqZC9oO3JldHVybiBkPDA/ZjpwPmg/KGUtYSkqKGUtYSkrKHItcykqKHItcyk6Zi1wfSwic3FkaXN0VG9GaW5pdGVMaW5lIiksanM9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpLGEscyxsLHUsaD0wLGY9MDtmPG4ubGVuZ3RoLzI7ZisrKWlmKGk9bltmKjJdLGE9bltmKjIrMV0sZisxPG4ubGVuZ3RoLzI/KHM9blsoZisxKSoyXSxsPW5bKGYrMSkqMisxXSk6KHM9blsoZisxLW4ubGVuZ3RoLzIpKjJdLGw9blsoZisxLW4ubGVuZ3RoLzIpKjIrMV0pLCEoaT09ZSYmcz09ZSkpaWYoaT49ZSYmZT49c3x8aTw9ZSYmZTw9cyl1PShlLWkpLyhzLWkpKihsLWEpK2EsdT5yJiZoKys7ZWxzZSBjb250aW51ZTtyZXR1cm4gaCUyIT09MH0sInBvaW50SW5zaWRlUG9seWdvblBvaW50cyIpLGFoPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPW5ldyBBcnJheShuLmxlbmd0aCksZDt1WzBdIT1udWxsPyhkPU1hdGguYXRhbih1WzFdL3VbMF0pLHVbMF08MD9kPWQrTWF0aC5QSS8yOmQ9LWQtTWF0aC5QSS8yKTpkPXU7Zm9yKHZhciBwPU1hdGguY29zKC1kKSxtPU1hdGguc2luKC1kKSxnPTA7ZzxmLmxlbmd0aC8yO2crKylmW2cqMl09cy8yKihuW2cqMl0qcC1uW2cqMisxXSptKSxmW2cqMisxXT1sLzIqKG5bZyoyKzFdKnArbltnKjJdKm0pLGZbZyoyXSs9aSxmW2cqMisxXSs9YTt2YXIgeTtpZihoPjApe3ZhciB2PUQ2KGYsLWgpO3k9TDYodil9ZWxzZSB5PWY7cmV0dXJuIGpzKGUscix5KX0sInBvaW50SW5zaWRlUG9seWdvbiIpLHhqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7Zm9yKHZhciBoPW5ldyBBcnJheShuLmxlbmd0aCoyKSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBkPXVbZl07aFtmKjQrMF09ZC5zdGFydFgsaFtmKjQrMV09ZC5zdGFydFksaFtmKjQrMl09ZC5zdG9wWCxoW2YqNCszXT1kLnN0b3BZO3ZhciBwPU1hdGgucG93KGQuY3gtZSwyKStNYXRoLnBvdyhkLmN5LXIsMik7aWYocDw9TWF0aC5wb3coZC5yYWRpdXMsMikpcmV0dXJuITB9cmV0dXJuIGpzKGUscixoKX0sInBvaW50SW5zaWRlUm91bmRQb2x5Z29uIiksTDY9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoLzIpLG4saSxhLHMsbCx1LGgsZixkPTA7ZDxlLmxlbmd0aC80O2QrKyl7bj1lW2QqNF0saT1lW2QqNCsxXSxhPWVbZCo0KzJdLHM9ZVtkKjQrM10sZDxlLmxlbmd0aC80LTE/KGw9ZVsoZCsxKSo0XSx1PWVbKGQrMSkqNCsxXSxoPWVbKGQrMSkqNCsyXSxmPWVbKGQrMSkqNCszXSk6KGw9ZVswXSx1PWVbMV0saD1lWzJdLGY9ZVszXSk7dmFyIHA9TmYobixpLGEscyxsLHUsaCxmLCEwKTtyW2QqMl09cFswXSxyW2QqMisxXT1wWzFdfXJldHVybiByfSwiam9pbkxpbmVzIiksRDY9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZS5sZW5ndGgqMiksaSxhLHMsbCx1PTA7dTxlLmxlbmd0aC8yO3UrKyl7aT1lW3UqMl0sYT1lW3UqMisxXSx1PGUubGVuZ3RoLzItMT8ocz1lWyh1KzEpKjJdLGw9ZVsodSsxKSoyKzFdKToocz1lWzBdLGw9ZVsxXSk7dmFyIGg9bC1hLGY9LShzLWkpLGQ9TWF0aC5zcXJ0KGgqaCtmKmYpLHA9aC9kLG09Zi9kO25bdSo0XT1pK3AqcixuW3UqNCsxXT1hK20qcixuW3UqNCsyXT1zK3AqcixuW3UqNCszXT1sK20qcn1yZXR1cm4gbn0sImV4cGFuZFBvbHlnb24iKSxiamU9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9bi1lLHU9aS1yO2wvPWEsdS89czt2YXIgaD1NYXRoLnNxcnQobCpsK3UqdSksZj1oLTE7aWYoZjwwKXJldHVybltdO3ZhciBkPWYvaDtyZXR1cm5bKG4tZSkqZCtlLChpLXIpKmQrcl19LCJpbnRlcnNlY3RMaW5lRWxsaXBzZSIpLHEwPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7cmV0dXJuIGUtPWEsci09cyxlLz1uLzIrbCxyLz1pLzIrbCxlKmUrcipyPD0xfSwiY2hlY2tJbkVsbGlwc2UiKSxReD1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PVtuLWUsaS1yXSxoPVtlLWEsci1zXSxmPXVbMF0qdVswXSt1WzFdKnVbMV0sZD0yKihoWzBdKnVbMF0raFsxXSp1WzFdKSxwPWhbMF0qaFswXStoWzFdKmhbMV0tbCpsLG09ZCpkLTQqZipwO2lmKG08MClyZXR1cm5bXTt2YXIgZz0oLWQrTWF0aC5zcXJ0KG0pKS8oMipmKSx5PSgtZC1NYXRoLnNxcnQobSkpLygyKmYpLHY9TWF0aC5taW4oZyx5KSx4PU1hdGgubWF4KGcseSksYj1bXTtpZih2Pj0wJiZ2PD0xJiZiLnB1c2godikseD49MCYmeDw9MSYmYi5wdXNoKHgpLGIubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgdz1iWzBdKnVbMF0rZSxfPWJbMF0qdVsxXStyO2lmKGIubGVuZ3RoPjEpe2lmKGJbMF09PWJbMV0pcmV0dXJuW3csX107dmFyIFQ9YlsxXSp1WzBdK2UsRT1iWzFdKnVbMV0rcjtyZXR1cm5bdyxfLFQsRV19ZWxzZSByZXR1cm5bdyxfXX0sImludGVyc2VjdExpbmVDaXJjbGUiKSxMUD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcjw9ZSYmZTw9bnx8bjw9ZSYmZTw9cj9lOmU8PXImJnI8PW58fG48PXImJnI8PWU/cjpufSwibWlkT2ZUaHJlZSIpLE5mPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPWUtYSxkPW4tZSxwPWwtYSxtPXItcyxnPWktcix5PXUtcyx2PXAqbS15KmYseD1kKm0tZypmLGI9eSpkLXAqZztpZihiIT09MCl7dmFyIHc9di9iLF89eC9iLFQ9LjAwMSxFPTAtVCxMPTErVDtyZXR1cm4gRTw9dyYmdzw9TCYmRTw9XyYmXzw9TD9bZSt3KmQscit3KmddOmg/W2UrdypkLHIrdypnXTpbXX1lbHNlIHJldHVybiB2PT09MHx8eD09PTA/TFAoZSxuLGwpPT09bD9bbCx1XTpMUChlLG4sYSk9PT1hP1thLHNdOkxQKGEsbCxuKT09PW4/W24saV06W106W119LCJmaW5pdGVMaW5lc0ludGVyc2VjdCIpLG9iPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1bXSxmLGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxwPSEwO3M9PW51bGwmJihwPSExKTt2YXIgbTtpZihwKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoLzI7ZysrKWRbZyoyXT1uW2cqMl0qcytpLGRbZyoyKzFdPW5bZyoyKzFdKmwrYTtpZih1PjApe3ZhciB5PUQ2KGQsLXUpO209TDYoeSl9ZWxzZSBtPWR9ZWxzZSBtPW47Zm9yKHZhciB2LHgsYix3LF89MDtfPG0ubGVuZ3RoLzI7XysrKXY9bVtfKjJdLHg9bVtfKjIrMV0sXzxtLmxlbmd0aC8yLTE/KGI9bVsoXysxKSoyXSx3PW1bKF8rMSkqMisxXSk6KGI9bVswXSx3PW1bMV0pLGY9TmYoZSxyLGksYSx2LHgsYix3KSxmLmxlbmd0aCE9PTAmJmgucHVzaChmWzBdLGZbMV0pO3JldHVybiBofSwicG9seWdvbkludGVyc2VjdExpbmUiKSx3amU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9W10sZCxwPW5ldyBBcnJheShuLmxlbmd0aCoyKTtoLmZvckVhY2goZnVuY3Rpb24oYix3KXt3PT09MD8ocFtwLmxlbmd0aC0yXT1iLnN0YXJ0WCxwW3AubGVuZ3RoLTFdPWIuc3RhcnRZKToocFt3KjQtMl09Yi5zdGFydFgscFt3KjQtMV09Yi5zdGFydFkpLHBbdyo0XT1iLnN0b3BYLHBbdyo0KzFdPWIuc3RvcFksZD1ReChlLHIsaSxhLGIuY3gsYi5jeSxiLnJhZGl1cyksZC5sZW5ndGghPT0wJiZmLnB1c2goZFswXSxkWzFdKX0pO2Zvcih2YXIgbT0wO208cC5sZW5ndGgvNDttKyspZD1OZihlLHIsaSxhLHBbbSo0XSxwW20qNCsxXSxwW20qNCsyXSxwW20qNCszXSwhMSksZC5sZW5ndGghPT0wJiZmLnB1c2goZFswXSxkWzFdKTtpZihmLmxlbmd0aD4yKXtmb3IodmFyIGc9W2ZbMF0sZlsxXV0seT1NYXRoLnBvdyhnWzBdLWUsMikrTWF0aC5wb3coZ1sxXS1yLDIpLHY9MTt2PGYubGVuZ3RoLzI7disrKXt2YXIgeD1NYXRoLnBvdyhmW3YqMl0tZSwyKStNYXRoLnBvdyhmW3YqMisxXS1yLDIpO3g8PXkmJihnWzBdPWZbdioyXSxnWzFdPWZbdioyKzFdLHk9eCl9cmV0dXJuIGd9cmV0dXJuIGZ9LCJyb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lIiksbzY9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9W2VbMF0tclswXSxlWzFdLXJbMV1dLGE9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLHM9KGEtbikvYTtyZXR1cm4gczwwJiYocz0xZS01KSxbclswXStzKmlbMF0sclsxXStzKmlbMV1dfSwic2hvcnRlbkludGVyc2VjdGlvbiIpLG1zPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj16UChlLHIpO3JldHVybiBuPWZnZShuKSxufSwiZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlIiksZmdlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG4saT1lLmxlbmd0aC8yLGE9MS8wLHM9MS8wLGw9LTEvMCx1PS0xLzAsaD0wO2g8aTtoKyspcj1lWzIqaF0sbj1lWzIqaCsxXSxhPU1hdGgubWluKGEsciksbD1NYXRoLm1heChsLHIpLHM9TWF0aC5taW4ocyxuKSx1PU1hdGgubWF4KHUsbik7Zm9yKHZhciBmPTIvKGwtYSksZD0yLyh1LXMpLHA9MDtwPGk7cCsrKXI9ZVsyKnBdPWVbMipwXSpmLG49ZVsyKnArMV09ZVsyKnArMV0qZCxhPU1hdGgubWluKGEsciksbD1NYXRoLm1heChsLHIpLHM9TWF0aC5taW4ocyxuKSx1PU1hdGgubWF4KHUsbik7aWYoczwtMSlmb3IodmFyIG09MDttPGk7bSsrKW49ZVsyKm0rMV09ZVsyKm0rMV0rKC0xLXMpO3JldHVybiBlfSwiZml0UG9seWdvblRvU3F1YXJlIikselA9byhmdW5jdGlvbihlLHIpe3ZhciBuPTEvZSoyKk1hdGguUEksaT1lJTI9PT0wP01hdGguUEkvMituLzI6TWF0aC5QSS8yO2krPXI7Zm9yKHZhciBhPW5ldyBBcnJheShlKjIpLHMsbD0wO2w8ZTtsKyspcz1sKm4raSxhWzIqbF09TWF0aC5jb3MocyksYVsyKmwrMV09TWF0aC5zaW4oLXMpO3JldHVybiBhfSwiZ2VuZXJhdGVVbml0TmdvblBvaW50cyIpLFEwPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5taW4oZS80LHIvNCw4KX0sImdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzIiksZGdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5taW4oZS8xMCxyLzEwLDgpfSwiZ2V0Um91bmRQb2x5Z29uUmFkaXVzIiksdUI9byhmdW5jdGlvbigpe3JldHVybiA4fSwiZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoIiksVGplPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybltlLTIqcituLDIqKHItZSksZV19LCJiZXppZXJQdHNUb1F1YWRDb2VmZiIpLEdQPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSpyKSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmUpLGN0cmxQdE9mZnNldFBjdDouMDV9fSwiZ2V0QmFycmVsQ3VydmVDb25zdGFudHMiKSxramU9X2Eoe2RhbXBpbmdGYWN0b3I6LjgscHJlY2lzaW9uOjFlLTYsaXRlcmF0aW9uczoyMDAsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKX0pLEVqZT17cGFnZVJhbms6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9a2plKGUpLG49ci5kYW1waW5nRmFjdG9yLGk9ci5wcmVjaXNpb24sYT1yLml0ZXJhdGlvbnMscz1yLndlaWdodCxsPXRoaXMuX3ByaXZhdGUuY3ksdT10aGlzLmJ5R3JvdXAoKSxoPXUubm9kZXMsZj11LmVkZ2VzLGQ9aC5sZW5ndGgscD1kKmQsbT1mLmxlbmd0aCxnPW5ldyBBcnJheShwKSx5PW5ldyBBcnJheShkKSx2PSgxLW4pL2QseD0wO3g8ZDt4Kyspe2Zvcih2YXIgYj0wO2I8ZDtiKyspe3ZhciB3PXgqZCtiO2dbd109MH15W3hdPTB9Zm9yKHZhciBfPTA7XzxtO18rKyl7dmFyIFQ9ZltfXSxFPVQuZGF0YSgic291cmNlIiksTD1ULmRhdGEoInRhcmdldCIpO2lmKEUhPT1MKXt2YXIgUz1oLmluZGV4T2ZJZChFKSxBPWguaW5kZXhPZklkKEwpLEk9cyhUKSxEPUEqZCtTO2dbRF0rPUkseVtTXSs9SX19Zm9yKHZhciBrPTEvZCt2LFI9MDtSPGQ7UisrKWlmKHlbUl09PT0wKWZvcih2YXIgQz0wO0M8ZDtDKyspe3ZhciBPPUMqZCtSO2dbT109a31lbHNlIGZvcih2YXIgTj0wO048ZDtOKyspe3ZhciBQPU4qZCtSO2dbUF09Z1tQXS95W1JdK3Z9Zm9yKHZhciBGPW5ldyBBcnJheShkKSxCPW5ldyBBcnJheShkKSxHLHo9MDt6PGQ7eisrKUZbel09MTtmb3IodmFyIFc9MDtXPGE7VysrKXtmb3IodmFyIFo9MDtaPGQ7WisrKUJbWl09MDtmb3IodmFyIGo9MDtqPGQ7aisrKWZvcih2YXIgb2U9MDtvZTxkO29lKyspe3ZhciBLPWoqZCtvZTtCW2pdKz1nW0tdKkZbb2VdfXNqZShCKSxHPUYsRj1CLEI9Rztmb3IodmFyIGVlPTAsSj0wO0o8ZDtKKyspe3ZhciBIPUdbSl0tRltKXTtlZSs9SCpIfWlmKGVlPGkpYnJlYWt9dmFyIHE9e3Jhbms6byhmdW5jdGlvbihhZSl7cmV0dXJuIGFlPWwuY29sbGVjdGlvbihhZSlbMF0sRltoLmluZGV4T2YoYWUpXX0sInJhbmsiKX07cmV0dXJuIHF9LCJwYWdlUmFuayIpfSxGcGU9X2Eoe3Jvb3Q6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGRpcmVjdGVkOiExLGFscGhhOjB9KSx2MT17ZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6byhmdW5jdGlvbihlKXtlPUZwZShlKTt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1uLmxlbmd0aDtpZihlLmRpcmVjdGVkKXtmb3IodmFyIGY9e30sZD17fSxwPTAsbT0wLGc9MDtnPGk7ZysrKXt2YXIgeT1uW2ddLHY9eS5pZCgpO2Uucm9vdD15O3ZhciB4PXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtwPHguaW5kZWdyZWUmJihwPXguaW5kZWdyZWUpLG08eC5vdXRkZWdyZWUmJihtPXgub3V0ZGVncmVlKSxmW3ZdPXguaW5kZWdyZWUsZFt2XT14Lm91dGRlZ3JlZX1yZXR1cm57aW5kZWdyZWU6byhmdW5jdGlvbih3KXtyZXR1cm4gcD09MD8wOihadCh3KSYmKHc9ci5maWx0ZXIodykpLGZbdy5pZCgpXS9wKX0sImluZGVncmVlIiksb3V0ZGVncmVlOm8oZnVuY3Rpb24odyl7cmV0dXJuIG09PT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksZFt3LmlkKCldL20pfSwib3V0ZGVncmVlIil9fWVsc2V7Zm9yKHZhciBhPXt9LHM9MCxsPTA7bDxpO2wrKyl7dmFyIHU9bltsXTtlLnJvb3Q9dTt2YXIgaD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZSk7czxoLmRlZ3JlZSYmKHM9aC5kZWdyZWUpLGFbdS5pZCgpXT1oLmRlZ3JlZX1yZXR1cm57ZGVncmVlOm8oZnVuY3Rpb24odyl7cmV0dXJuIHM9PT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksYVt3LmlkKCldL3MpfSwiZGVncmVlIil9fX0sImRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkIiksZGVncmVlQ2VudHJhbGl0eTpvKGZ1bmN0aW9uKGUpe2U9RnBlKGUpO3ZhciByPXRoaXMuY3koKSxuPXRoaXMsaT1lLGE9aS5yb290LHM9aS53ZWlnaHQsbD1pLmRpcmVjdGVkLHU9aS5hbHBoYTtpZihhPXIuY29sbGVjdGlvbihhKVswXSxsKXtmb3IodmFyIG09YS5jb25uZWN0ZWRFZGdlcygpLGc9bS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUudGFyZ2V0KCkuc2FtZShhKSYmbi5oYXMoRSl9KSx5PW0uZmlsdGVyKGZ1bmN0aW9uKEUpe3JldHVybiBFLnNvdXJjZSgpLnNhbWUoYSkmJm4uaGFzKEUpfSksdj1nLmxlbmd0aCx4PXkubGVuZ3RoLGI9MCx3PTAsXz0wO188Zy5sZW5ndGg7XysrKWIrPXMoZ1tfXSk7Zm9yKHZhciBUPTA7VDx5Lmxlbmd0aDtUKyspdys9cyh5W1RdKTtyZXR1cm57aW5kZWdyZWU6TWF0aC5wb3codiwxLXUpKk1hdGgucG93KGIsdSksb3V0ZGVncmVlOk1hdGgucG93KHgsMS11KSpNYXRoLnBvdyh3LHUpfX1lbHNle2Zvcih2YXIgaD1hLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKG4pLGY9aC5sZW5ndGgsZD0wLHA9MDtwPGgubGVuZ3RoO3ArKylkKz1zKGhbcF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coZiwxLXUpKk1hdGgucG93KGQsdSl9fX0sImRlZ3JlZUNlbnRyYWxpdHkiKX07djEuZGM9djEuZGVncmVlQ2VudHJhbGl0eTt2MS5kY249djEuZGVncmVlQ2VudHJhbGl0eU5vcm1hbGlzZWQ9djEuZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7enBlPV9hKHtoYXJtb25pYzohMCx3ZWlnaHQ6byhmdW5jdGlvbigpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSkseDE9e2Nsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXpwZShlKSxuPXIuaGFybW9uaWMsaT1yLndlaWdodCxhPXIuZGlyZWN0ZWQscz10aGlzLmN5KCksbD17fSx1PTAsaD10aGlzLm5vZGVzKCksZj10aGlzLmZsb3lkV2Fyc2hhbGwoe3dlaWdodDppLGRpcmVjdGVkOmF9KSxkPTA7ZDxoLmxlbmd0aDtkKyspe2Zvcih2YXIgcD0wLG09aFtkXSxnPTA7ZzxoLmxlbmd0aDtnKyspaWYoZCE9PWcpe3ZhciB5PWYuZGlzdGFuY2UobSxoW2ddKTtuP3ArPTEveTpwKz15fW58fChwPTEvcCksdTxwJiYodT1wKSxsW20uaWQoKV09cH1yZXR1cm57Y2xvc2VuZXNzOm8oZnVuY3Rpb24oeCl7cmV0dXJuIHU9PTA/MDooWnQoeCk/eD1zLmZpbHRlcih4KVswXS5pZCgpOng9eC5pZCgpLGxbeF0vdSl9LCJjbG9zZW5lc3MiKX19LCJjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZCIpLGNsb3NlbmVzc0NlbnRyYWxpdHk6byhmdW5jdGlvbihlKXt2YXIgcj16cGUoZSksbj1yLnJvb3QsaT1yLndlaWdodCxhPXIuZGlyZWN0ZWQscz1yLmhhcm1vbmljO249dGhpcy5maWx0ZXIobilbMF07Zm9yKHZhciBsPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6bix3ZWlnaHQ6aSxkaXJlY3RlZDphfSksdT0wLGg9dGhpcy5ub2RlcygpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtpZighZC5zYW1lKG4pKXt2YXIgcD1sLmRpc3RhbmNlVG8oZCk7cz91Kz0xL3A6dSs9cH19cmV0dXJuIHM/dToxL3V9LCJjbG9zZW5lc3NDZW50cmFsaXR5Iil9O3gxLmNjPXgxLmNsb3NlbmVzc0NlbnRyYWxpdHk7eDEuY2NuPXgxLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpc2VkPXgxLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkO1NqZT1fYSh7d2VpZ2h0Om51bGwsZGlyZWN0ZWQ6ITF9KSwkUD17YmV0d2Vlbm5lc3NDZW50cmFsaXR5Om8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPVNqZShlKSxuPXIuZGlyZWN0ZWQsaT1yLndlaWdodCxhPWkhPW51bGwscz10aGlzLmN5KCksbD10aGlzLm5vZGVzKCksdT17fSxoPXt9LGY9MCxkPXtzZXQ6byhmdW5jdGlvbih3LF8pe2hbd109XyxfPmYmJihmPV8pfSwic2V0IiksZ2V0Om8oZnVuY3Rpb24odyl7cmV0dXJuIGhbd119LCJnZXQiKX0scD0wO3A8bC5sZW5ndGg7cCsrKXt2YXIgbT1sW3BdLGc9bS5pZCgpO24/dVtnXT1tLm91dGdvZXJzKCkubm9kZXMoKTp1W2ddPW0ub3Blbk5laWdoYm9yaG9vZCgpLm5vZGVzKCksZC5zZXQoZywwKX1mb3IodmFyIHk9byhmdW5jdGlvbih3KXtmb3IodmFyIF89bFt3XS5pZCgpLFQ9W10sRT17fSxMPXt9LFM9e30sQT1uZXcgZ2IoZnVuY3Rpb24ob2UsSyl7cmV0dXJuIFNbb2VdLVNbS119KSxJPTA7STxsLmxlbmd0aDtJKyspe3ZhciBEPWxbSV0uaWQoKTtFW0RdPVtdLExbRF09MCxTW0RdPTEvMH1mb3IoTFtfXT0xLFNbX109MCxBLnB1c2goXyk7IUEuZW1wdHkoKTspe3ZhciBrPUEucG9wKCk7aWYoVC5wdXNoKGspLGEpZm9yKHZhciBSPTA7Ujx1W2tdLmxlbmd0aDtSKyspe3ZhciBDPXVba11bUl0sTz1zLmdldEVsZW1lbnRCeUlkKGspLE49dm9pZCAwO08uZWRnZXNUbyhDKS5sZW5ndGg+MD9OPU8uZWRnZXNUbyhDKVswXTpOPUMuZWRnZXNUbyhPKVswXTt2YXIgUD1pKE4pO0M9Qy5pZCgpLFNbQ10+U1trXStQJiYoU1tDXT1TW2tdK1AsQS5ub2Rlcy5pbmRleE9mKEMpPDA/QS5wdXNoKEMpOkEudXBkYXRlSXRlbShDKSxMW0NdPTAsRVtDXT1bXSksU1tDXT09U1trXStQJiYoTFtDXT1MW0NdK0xba10sRVtDXS5wdXNoKGspKX1lbHNlIGZvcih2YXIgRj0wO0Y8dVtrXS5sZW5ndGg7RisrKXt2YXIgQj11W2tdW0ZdLmlkKCk7U1tCXT09MS8wJiYoQS5wdXNoKEIpLFNbQl09U1trXSsxKSxTW0JdPT1TW2tdKzEmJihMW0JdPUxbQl0rTFtrXSxFW0JdLnB1c2goaykpfX1mb3IodmFyIEc9e30sej0wO3o8bC5sZW5ndGg7eisrKUdbbFt6XS5pZCgpXT0wO2Zvcig7VC5sZW5ndGg+MDspe2Zvcih2YXIgVz1ULnBvcCgpLFo9MDtaPEVbV10ubGVuZ3RoO1orKyl7dmFyIGo9RVtXXVtaXTtHW2pdPUdbal0rTFtqXS9MW1ddKigxK0dbV10pfVchPWxbd10uaWQoKSYmZC5zZXQoVyxkLmdldChXKStHW1ddKX19LCJfbG9vcCIpLHY9MDt2PGwubGVuZ3RoO3YrKyl5KHYpO3ZhciB4PXtiZXR3ZWVubmVzczpvKGZ1bmN0aW9uKHcpe3ZhciBfPXMuY29sbGVjdGlvbih3KS5pZCgpO3JldHVybiBkLmdldChfKX0sImJldHdlZW5uZXNzIiksYmV0d2Vlbm5lc3NOb3JtYWxpemVkOm8oZnVuY3Rpb24odyl7aWYoZj09MClyZXR1cm4gMDt2YXIgXz1zLmNvbGxlY3Rpb24odykuaWQoKTtyZXR1cm4gZC5nZXQoXykvZn0sImJldHdlZW5uZXNzTm9ybWFsaXplZCIpfTtyZXR1cm4geC5iZXR3ZWVubmVzc05vcm1hbGlzZWQ9eC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQseH0sImJldHdlZW5uZXNzQ2VudHJhbGl0eSIpfTskUC5iYz0kUC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7Q2plPV9hKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24odCl7cmV0dXJuIDF9XX0pLEFqZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBDamUoZSl9LCJzZXRPcHRpb25zIiksX2plPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MCxpPTA7aTxyLmxlbmd0aDtpKyspbis9cltpXShlKTtyZXR1cm4gbn0sImdldFNpbWlsYXJpdHkiKSxMamU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyllW2kqcitpXT1ufSwiYWRkTG9vcHMiKSxwZ2U9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbixpPTA7aTxyO2krKyl7bj0wO2Zvcih2YXIgYT0wO2E8cjthKyspbis9ZVthKnIraV07Zm9yKHZhciBzPTA7czxyO3MrKyllW3MqcitpXT1lW3MqcitpXS9ufX0sIm5vcm1hbGl6ZSIpLERqZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9bmV3IEFycmF5KG4qbiksYT0wO2E8bjthKyspe2Zvcih2YXIgcz0wO3M8bjtzKyspaVthKm4rc109MDtmb3IodmFyIGw9MDtsPG47bCsrKWZvcih2YXIgdT0wO3U8bjt1KyspaVthKm4rdV0rPWVbYSpuK2xdKnJbbCpuK3VdfXJldHVybiBpfSwibW11bHQiKSxOamU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUuc2xpY2UoMCksYT0xO2E8bjthKyspZT1EamUoZSxpLHIpO3JldHVybiBlfSwiZXhwYW5kIiksUmplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkocipyKSxhPTA7YTxyKnI7YSsrKWlbYV09TWF0aC5wb3coZVthXSxuKTtyZXR1cm4gcGdlKGksciksaX0sImluZmxhdGUiKSxNamU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgcz1NYXRoLnJvdW5kKGVbYV0qTWF0aC5wb3coMTAsaSkpL01hdGgucG93KDEwLGkpLGw9TWF0aC5yb3VuZChyW2FdKk1hdGgucG93KDEwLGkpKS9NYXRoLnBvdygxMCxpKTtpZihzIT09bClyZXR1cm4hMX1yZXR1cm4hMH0sImhhc0NvbnZlcmdlZCIpLElqZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1bXSxzPTA7czxyO3MrKyl7Zm9yKHZhciBsPVtdLHU9MDt1PHI7dSsrKU1hdGgucm91bmQoZVtzKnIrdV0qMWUzKS8xZTM+MCYmbC5wdXNoKG5bdV0pO2wubGVuZ3RoIT09MCYmYS5wdXNoKGkuY29sbGVjdGlvbihsKSl9cmV0dXJuIGF9LCJhc3NpZ24iKSxPamU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCFyW25dfHxlW25dLmlkKCkhPT1yW25dLmlkKCkpcmV0dXJuITE7cmV0dXJuITB9LCJpc0R1cGxpY2F0ZSIpLFBqZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIhPW4mJk9qZShlW3JdLGVbbl0pJiZlLnNwbGljZShuLDEpO3JldHVybiBlfSwicmVtb3ZlRHVwbGljYXRlcyIpLEdwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLm5vZGVzKCksbj10aGlzLmVkZ2VzKCksaT10aGlzLmN5KCksYT1BamUoZSkscz17fSxsPTA7bDxyLmxlbmd0aDtsKyspc1tyW2xdLmlkKCldPWw7Zm9yKHZhciB1PXIubGVuZ3RoLGg9dSp1LGY9bmV3IEFycmF5KGgpLGQscD0wO3A8aDtwKyspZltwXT0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXt2YXIgZz1uW21dLHk9c1tnLnNvdXJjZSgpLmlkKCldLHY9c1tnLnRhcmdldCgpLmlkKCldLHg9X2plKGcsYS5hdHRyaWJ1dGVzKTtmW3kqdSt2XSs9eCxmW3YqdSt5XSs9eH1MamUoZix1LGEubXVsdEZhY3RvcikscGdlKGYsdSk7Zm9yKHZhciBiPSEwLHc9MDtiJiZ3PGEubWF4SXRlcmF0aW9uczspYj0hMSxkPU5qZShmLHUsYS5leHBhbmRGYWN0b3IpLGY9UmplKGQsdSxhLmluZmxhdGVGYWN0b3IpLE1qZShmLGQsaCw0KXx8KGI9ITApLHcrKzt2YXIgXz1JamUoZix1LHIsaSk7cmV0dXJuIF89UGplKF8pLF99LCJtYXJrb3ZDbHVzdGVyaW5nIiksQmplPXttYXJrb3ZDbHVzdGVyaW5nOkdwZSxtY2w6R3BlfSxGamU9byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sImlkZW50aXR5IiksbWdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoci1lKX0sImFic0RpZmYiKSwkcGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrbWdlKHIsbil9LCJhZGRBYnNEaWZmIiksVnBlPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlK01hdGgucG93KG4tciwyKX0sImFkZFNxdWFyZWREaWZmIiksemplPW8oZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChlKX0sInNxcnQiKSxHamU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGgubWF4KGUsbWdlKHIsbikpfSwibWF4QWJzRGlmZiIpLFd4PW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOkZqZSxsPWksdSxoLGY9MDtmPGU7ZisrKXU9cihmKSxoPW4oZiksbD1hKGwsdSxoKTtyZXR1cm4gcyhsKX0sImdldERpc3RhbmNlIiksazE9e2V1Y2xpZGVhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT49Mj9XeChlLHIsbiwwLFZwZSx6amUpOld4KGUscixuLDAsJHBlKX0sImV1Y2xpZGVhbiIpLHNxdWFyZWRFdWNsaWRlYW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIFd4KGUscixuLDAsVnBlKX0sInNxdWFyZWRFdWNsaWRlYW4iKSxtYW5oYXR0YW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIFd4KGUscixuLDAsJHBlKX0sIm1hbmhhdHRhbiIpLG1heDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gV3goZSxyLG4sLTEvMCxHamUpfSwibWF4Iil9O2sxWyJzcXVhcmVkLWV1Y2xpZGVhbiJdPWsxLnNxdWFyZWRFdWNsaWRlYW47azEuc3F1YXJlZGV1Y2xpZGVhbj1rMS5zcXVhcmVkRXVjbGlkZWFuO28oVjYsImNsdXN0ZXJpbmdEaXN0YW5jZSIpOyRqZT1fYSh7azoyLG06MixzZW5zaXRpdml0eVRocmVzaG9sZDoxZS00LGRpc3RhbmNlOiJldWNsaWRlYW4iLG1heEl0ZXJhdGlvbnM6MTAsYXR0cmlidXRlczpbXSx0ZXN0TW9kZTohMSx0ZXN0Q2VudHJvaWRzOm51bGx9KSxoQj1vKGZ1bmN0aW9uKGUpe3JldHVybiAkamUoZSl9LCJzZXRPcHRpb25zIiksTjY9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPWEhPT0ia01lZG9pZHMiLGw9cz9mdW5jdGlvbihkKXtyZXR1cm4gbltkXX06ZnVuY3Rpb24oZCl7cmV0dXJuIGlbZF0obil9LHU9byhmdW5jdGlvbihwKXtyZXR1cm4gaVtwXShyKX0sImdldFEiKSxoPW4sZj1yO3JldHVybiBWNihlLGkubGVuZ3RoLGwsdSxoLGYpfSwiZ2V0RGlzdCIpLERQPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmxlbmd0aCxhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShyKSx1PW51bGwsaD0wO2g8aTtoKyspYVtoXT1lLm1pbihuW2hdKS52YWx1ZSxzW2hdPWUubWF4KG5baF0pLnZhbHVlO2Zvcih2YXIgZj0wO2Y8cjtmKyspe3U9W107Zm9yKHZhciBkPTA7ZDxpO2QrKyl1W2RdPU1hdGgucmFuZG9tKCkqKHNbZF0tYVtkXSkrYVtkXTtsW2ZdPXV9cmV0dXJuIGx9LCJyYW5kb21DZW50cm9pZHMiKSxnZ2U9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz0xLzAsbD0wLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9TjYobixlLHJbdV0saSxhKTtoPHMmJihzPWgsbD11KX1yZXR1cm4gbH0sImNsYXNzaWZ5IikseWdlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1bXSxhPW51bGwscz0wO3M8ci5sZW5ndGg7cysrKWE9cltzXSxuW2EuaWQoKV09PT1lJiZpLnB1c2goYSk7cmV0dXJuIGl9LCJidWlsZENsdXN0ZXIiKSxWamU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGguYWJzKHItZSk8PW59LCJoYXZlVmFsdWVzQ29udmVyZ2VkIiksVWplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8ZVtpXS5sZW5ndGg7YSsrKXt2YXIgcz1NYXRoLmFicyhlW2ldW2FdLXJbaV1bYV0pO2lmKHM+bilyZXR1cm4hMX1yZXR1cm4hMH0sImhhdmVNYXRyaWNlc0NvbnZlcmdlZCIpLEhqZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MDtpPG47aSsrKWlmKGU9PT1yW2ldKXJldHVybiEwO3JldHVybiExfSwic2VlbkJlZm9yZSIpLFVwZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEFycmF5KHIpO2lmKGUubGVuZ3RoPDUwKWZvcih2YXIgaT0wO2k8cjtpKyspe2Zvcih2YXIgYT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO0hqZShhLG4saSk7KWE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtuW2ldPWF9ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKW5bc109ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtyZXR1cm4gbn0sInJhbmRvbU1lZG9pZHMiKSxIcGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8ci5sZW5ndGg7YSsrKWkrPU42KCJtYW5oYXR0YW4iLHJbYV0sZSxuLCJrTWVkb2lkcyIpO3JldHVybiBpfSwiZmluZENvc3QiKSxXamU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9aEIoZSkscz1uZXcgQXJyYXkoYS5rKSxsPXt9LHU7YS50ZXN0TW9kZT90eXBlb2YgYS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyIj8oYS50ZXN0Q2VudHJvaWRzLHU9RFAobixhLmssYS5hdHRyaWJ1dGVzKSk6S2koYS50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiP3U9YS50ZXN0Q2VudHJvaWRzOnU9RFAobixhLmssYS5hdHRyaWJ1dGVzKTp1PURQKG4sYS5rLGEuYXR0cmlidXRlcyk7Zm9yKHZhciBoPSEwLGY9MDtoJiZmPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWk9bltkXSxsW2kuaWQoKV09Z2dlKGksdSxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lYW5zIik7aD0hMTtmb3IodmFyIHA9MDtwPGEuaztwKyspe3ZhciBtPXlnZShwLG4sbCk7aWYobS5sZW5ndGghPT0wKXtmb3IodmFyIGc9YS5hdHRyaWJ1dGVzLmxlbmd0aCx5PXVbcF0sdj1uZXcgQXJyYXkoZykseD1uZXcgQXJyYXkoZyksYj0wO2I8ZztiKyspe3hbYl09MDtmb3IodmFyIHc9MDt3PG0ubGVuZ3RoO3crKylpPW1bd10seFtiXSs9YS5hdHRyaWJ1dGVzW2JdKGkpO3ZbYl09eFtiXS9tLmxlbmd0aCxWamUodltiXSx5W2JdLGEuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoaD0hMCl9dVtwXT12LHNbcF09ci5jb2xsZWN0aW9uKG0pfX1mKyt9cmV0dXJuIHN9LCJrTWVhbnMiKSxZamU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9aEIoZSkscz1uZXcgQXJyYXkoYS5rKSxsLHU9e30saCxmPW5ldyBBcnJheShhLmspO2EudGVzdE1vZGU/dHlwZW9mIGEudGVzdENlbnRyb2lkcz09Im51bWJlciJ8fChLaShhLnRlc3RDZW50cm9pZHMpPT09Im9iamVjdCI/bD1hLnRlc3RDZW50cm9pZHM6bD1VcGUobixhLmspKTpsPVVwZShuLGEuayk7Zm9yKHZhciBkPSEwLHA9MDtkJiZwPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKWk9blttXSx1W2kuaWQoKV09Z2dlKGksbCxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lZG9pZHMiKTtkPSExO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGg7ZysrKXt2YXIgeT15Z2UoZyxuLHUpO2lmKHkubGVuZ3RoIT09MCl7ZltnXT1IcGUobFtnXSx5LGEuYXR0cmlidXRlcyk7Zm9yKHZhciB2PTA7djx5Lmxlbmd0aDt2KyspaD1IcGUoeVt2XSx5LGEuYXR0cmlidXRlcyksaDxmW2ddJiYoZltnXT1oLGxbZ109eVt2XSxkPSEwKTtzW2ddPXIuY29sbGVjdGlvbih5KX19cCsrfXJldHVybiBzfSwia01lZG9pZHMiKSxxamU9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcyxsLHU9MDt1PHIubGVuZ3RoO3UrKylmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKylpW3VdW2hdPU1hdGgucG93KG5bdV1baF0sYS5tKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKylmb3IodmFyIGQ9MDtkPGEuYXR0cmlidXRlcy5sZW5ndGg7ZCsrKXtzPTAsbD0wO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXMrPWlbcF1bZl0qYS5hdHRyaWJ1dGVzW2RdKHJbcF0pLGwrPWlbcF1bZl07ZVtmXVtkXT1zL2x9fSwidXBkYXRlQ2VudHJvaWRzIiksWGplPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylyW3NdPWVbc10uc2xpY2UoKTtmb3IodmFyIGwsdSxoLGY9Mi8oYS5tLTEpLGQ9MDtkPG4ubGVuZ3RoO2QrKylmb3IodmFyIHA9MDtwPGkubGVuZ3RoO3ArKyl7bD0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXU9TjYoYS5kaXN0YW5jZSxpW3BdLG5bZF0sYS5hdHRyaWJ1dGVzLCJjbWVhbnMiKSxoPU42KGEuZGlzdGFuY2UsaVtwXSxuW21dLGEuYXR0cmlidXRlcywiY21lYW5zIiksbCs9TWF0aC5wb3codS9oLGYpO2VbcF1bZF09MS9sfX0sInVwZGF0ZU1lbWJlcnNoaXAiKSxqamU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9bmV3IEFycmF5KG4uaykscz0wO3M8YS5sZW5ndGg7cysrKWFbc109W107Zm9yKHZhciBsLHUsaD0wO2g8ci5sZW5ndGg7aCsrKXtsPS0xLzAsdT0tMTtmb3IodmFyIGY9MDtmPHJbMF0ubGVuZ3RoO2YrKylyW2hdW2ZdPmwmJihsPXJbaF1bZl0sdT1mKTthW3VdLnB1c2goZVtoXSl9Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXT1pLmNvbGxlY3Rpb24oYVtkXSk7cmV0dXJuIGF9LCJhc3NpZ24iKSxXcGU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1oQihlKSxhLHMsbCx1LGg7dT1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKXVbZl09bmV3IEFycmF5KGkuayk7bD1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWxbZF09bmV3IEFycmF5KGkuayk7Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDtwKyspe2Zvcih2YXIgbT0wLGc9MDtnPGkuaztnKyspbFtwXVtnXT1NYXRoLnJhbmRvbSgpLG0rPWxbcF1bZ107Zm9yKHZhciB5PTA7eTxpLms7eSsrKWxbcF1beV09bFtwXVt5XS9tfXM9bmV3IEFycmF5KGkuayk7Zm9yKHZhciB2PTA7djxpLms7disrKXNbdl09bmV3IEFycmF5KGkuYXR0cmlidXRlcy5sZW5ndGgpO2g9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IodmFyIHg9MDt4PG4ubGVuZ3RoO3grKyloW3hdPW5ldyBBcnJheShpLmspO2Zvcih2YXIgYj0hMCx3PTA7YiYmdzxpLm1heEl0ZXJhdGlvbnM7KWI9ITEscWplKHMsbixsLGgsaSksWGplKGwsdSxzLG4saSksVWplKGwsdSxpLnNlbnNpdGl2aXR5VGhyZXNob2xkKXx8KGI9ITApLHcrKztyZXR1cm4gYT1qamUobixsLGkscikse2NsdXN0ZXJzOmEsZGVncmVlT2ZNZW1iZXJzaGlwOmx9fSwiZnV6enlDTWVhbnMiKSxLamU9e2tNZWFuczpXamUsa01lZG9pZHM6WWplLGZ1enp5Q01lYW5zOldwZSxmY206V3BlfSxRamU9X2Eoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLGxpbmthZ2U6Im1pbiIsbW9kZToidGhyZXNob2xkIix0aHJlc2hvbGQ6MS8wLGFkZERlbmRyb2dyYW06ITEsZGVuZHJvZ3JhbURlcHRoOjAsYXR0cmlidXRlczpbXX0pLFpqZT17c2luZ2xlOiJtaW4iLGNvbXBsZXRlOiJtYXgifSxKamU9byhmdW5jdGlvbihlKXt2YXIgcj1RamUoZSksbj1aamVbci5saW5rYWdlXTtyZXR1cm4gbiE9bnVsbCYmKHIubGlua2FnZT1uKSxyfSwic2V0T3B0aW9ucyIpLFlwZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzPTAsbD0xLzAsdSxoPWEuYXR0cmlidXRlcyxmPW8oZnVuY3Rpb24oQSxJKXtyZXR1cm4gVjYoYS5kaXN0YW5jZSxoLmxlbmd0aCxmdW5jdGlvbihEKXtyZXR1cm4gaFtEXShBKX0sZnVuY3Rpb24oRCl7cmV0dXJuIGhbRF0oSSl9LEEsSSl9LCJnZXREaXN0IiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLmtleSxtPW5bcF1baVtwXV07bTxsJiYocz1wLGw9bSl9aWYoYS5tb2RlPT09InRocmVzaG9sZCImJmw+PWEudGhyZXNob2xkfHxhLm1vZGU9PT0iZGVuZHJvZ3JhbSImJmUubGVuZ3RoPT09MSlyZXR1cm4hMTt2YXIgZz1yW3NdLHk9cltpW3NdXSx2O2EubW9kZT09PSJkZW5kcm9ncmFtIj92PXtsZWZ0OmcscmlnaHQ6eSxrZXk6Zy5rZXl9OnY9e3ZhbHVlOmcudmFsdWUuY29uY2F0KHkudmFsdWUpLGtleTpnLmtleX0sZVtnLmluZGV4XT12LGUuc3BsaWNlKHkuaW5kZXgsMSkscltnLmtleV09djtmb3IodmFyIHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIGI9ZVt4XTtnLmtleT09PWIua2V5P3U9MS8wOmEubGlua2FnZT09PSJtaW4iPyh1PW5bZy5rZXldW2Iua2V5XSxuW2cua2V5XVtiLmtleV0+blt5LmtleV1bYi5rZXldJiYodT1uW3kua2V5XVtiLmtleV0pKTphLmxpbmthZ2U9PT0ibWF4Ij8odT1uW2cua2V5XVtiLmtleV0sbltnLmtleV1bYi5rZXldPG5beS5rZXldW2Iua2V5XSYmKHU9blt5LmtleV1bYi5rZXldKSk6YS5saW5rYWdlPT09Im1lYW4iP3U9KG5bZy5rZXldW2Iua2V5XSpnLnNpemUrblt5LmtleV1bYi5rZXldKnkuc2l6ZSkvKGcuc2l6ZSt5LnNpemUpOmEubW9kZT09PSJkZW5kcm9ncmFtIj91PWYoYi52YWx1ZSxnLnZhbHVlKTp1PWYoYi52YWx1ZVswXSxnLnZhbHVlWzBdKSxuW2cua2V5XVtiLmtleV09bltiLmtleV1bZy5rZXldPXV9Zm9yKHZhciB3PTA7dzxlLmxlbmd0aDt3Kyspe3ZhciBfPWVbd10ua2V5O2lmKGlbX109PT1nLmtleXx8aVtfXT09PXkua2V5KXtmb3IodmFyIFQ9XyxFPTA7RTxlLmxlbmd0aDtFKyspe3ZhciBMPWVbRV0ua2V5O25bX11bTF08bltfXVtUXSYmKFQ9TCl9aVtfXT1UfWVbd10uaW5kZXg9d31yZXR1cm4gZy5rZXk9eS5rZXk9Zy5pbmRleD15LmluZGV4PW51bGwsITB9LCJtZXJnZUNsb3Nlc3QiKSxsNj1vKGZ1bmN0aW9uIHQoZSxyLG4pe2UmJihlLnZhbHVlP3IucHVzaChlLnZhbHVlKTooZS5sZWZ0JiZ0KGUubGVmdCxyKSxlLnJpZ2h0JiZ0KGUucmlnaHQscikpKX0sImdldEFsbENoaWxkcmVuIiksZUtlPW8oZnVuY3Rpb24gdChlLHIpe2lmKCFlKXJldHVybiIiO2lmKGUubGVmdCYmZS5yaWdodCl7dmFyIG49dChlLmxlZnQsciksaT10KGUucmlnaHQsciksYT1yLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpuKyIsIitpfX0pO3JldHVybiByLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6bix0YXJnZXQ6YS5pZCgpfX0pLHIuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTppLHRhcmdldDphLmlkKCl9fSksYS5pZCgpfWVsc2UgaWYoZS52YWx1ZSlyZXR1cm4gZS52YWx1ZS5pZCgpfSwiYnVpbGREZW5kcm9ncmFtIiksdEtlPW8oZnVuY3Rpb24gdChlLHIsbil7aWYoIWUpcmV0dXJuW107dmFyIGk9W10sYT1bXSxzPVtdO3JldHVybiByPT09MD8oZS5sZWZ0JiZsNihlLmxlZnQsaSksZS5yaWdodCYmbDYoZS5yaWdodCxhKSxzPWkuY29uY2F0KGEpLFtuLmNvbGxlY3Rpb24ocyldKTpyPT09MT9lLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJmw2KGUubGVmdCxpKSxlLnJpZ2h0JiZsNihlLnJpZ2h0LGEpLFtuLmNvbGxlY3Rpb24oaSksbi5jb2xsZWN0aW9uKGEpXSk6ZS52YWx1ZT9bbi5jb2xsZWN0aW9uKGUudmFsdWUpXTooZS5sZWZ0JiYoaT10KGUubGVmdCxyLTEsbikpLGUucmlnaHQmJihhPXQoZS5yaWdodCxyLTEsbikpLGkuY29uY2F0KGEpKX0sImJ1aWxkQ2x1c3RlcnNGcm9tVHJlZSIpLHFwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1KamUoZSksYT1pLmF0dHJpYnV0ZXMscz1vKGZ1bmN0aW9uKHcsXyl7cmV0dXJuIFY2KGkuZGlzdGFuY2UsYS5sZW5ndGgsZnVuY3Rpb24oVCl7cmV0dXJuIGFbVF0odyl9LGZ1bmN0aW9uKFQpe3JldHVybiBhW1RdKF8pfSx3LF8pfSwiZ2V0RGlzdCIpLGw9W10sdT1bXSxoPVtdLGY9W10sZD0wO2Q8bi5sZW5ndGg7ZCsrKXt2YXIgcD17dmFsdWU6aS5tb2RlPT09ImRlbmRyb2dyYW0iP25bZF06W25bZF1dLGtleTpkLGluZGV4OmR9O2xbZF09cCxmW2RdPXAsdVtkXT1bXSxoW2RdPTB9Zm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspZm9yKHZhciBnPTA7Zzw9bTtnKyspe3ZhciB5PXZvaWQgMDtpLm1vZGU9PT0iZGVuZHJvZ3JhbSI/eT1tPT09Zz8xLzA6cyhsW21dLnZhbHVlLGxbZ10udmFsdWUpOnk9bT09PWc/MS8wOnMobFttXS52YWx1ZVswXSxsW2ddLnZhbHVlWzBdKSx1W21dW2ddPXksdVtnXVttXT15LHk8dVttXVtoW21dXSYmKGhbbV09Zyl9Zm9yKHZhciB2PVlwZShsLGYsdSxoLGkpO3Y7KXY9WXBlKGwsZix1LGgsaSk7dmFyIHg7cmV0dXJuIGkubW9kZT09PSJkZW5kcm9ncmFtIj8oeD10S2UobFswXSxpLmRlbmRyb2dyYW1EZXB0aCxyKSxpLmFkZERlbmRyb2dyYW0mJmVLZShsWzBdLHIpKTooeD1uZXcgQXJyYXkobC5sZW5ndGgpLGwuZm9yRWFjaChmdW5jdGlvbihiLHcpe2Iua2V5PWIuaW5kZXg9bnVsbCx4W3ddPXIuY29sbGVjdGlvbihiLnZhbHVlKX0pKSx4fSwiaGllcmFyY2hpY2FsQ2x1c3RlcmluZyIpLHJLZT17aGllcmFyY2hpY2FsQ2x1c3RlcmluZzpxcGUsaGNhOnFwZX0sbktlPV9hKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLGlLZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUuZGFtcGluZyxuPWUucHJlZmVyZW5jZTsuNTw9ciYmcjwxfHxkaSgiRGFtcGluZyBtdXN0IHJhbmdlIG9uIFswLjUsIDEpLiAgR290OiAiLmNvbmNhdChyKSk7dmFyIGk9WyJtZWRpYW4iLCJtZWFuIiwibWluIiwibWF4Il07cmV0dXJuIGkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYT09PW59KXx8eHQobil8fGRpKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iJyIuY29uY2F0KGEsIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChuKSksbktlKGUpfSwic2V0T3B0aW9ucyIpLGFLZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gaVt1XShsKX0sImF0dHIiKTtyZXR1cm4tVjYoZSxpLmxlbmd0aCxmdW5jdGlvbihzKXtyZXR1cm4gYShyLHMpfSxmdW5jdGlvbihzKXtyZXR1cm4gYShuLHMpfSxyLG4pfSwiZ2V0U2ltaWxhcml0eSIpLHNLZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtyZXR1cm4gcj09PSJtZWRpYW4iP249aWplKGUpOnI9PT0ibWVhbiI/bj1uamUoZSk6cj09PSJtaW4iP249dGplKGUpOnI9PT0ibWF4Ij9uPXJqZShlKTpuPXIsbn0sImdldFByZWZlcmVuY2UiKSxvS2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXJbYSplK2FdK25bYSplK2FdPjAmJmkucHVzaChhKTtyZXR1cm4gaX0sImZpbmRFeGVtcGxhcnMiKSxYcGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXtmb3IodmFyIHM9LTEsbD0tMS8wLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XTtyW2EqZStoXT5sJiYocz1oLGw9clthKmUraF0pfXM+MCYmaS5wdXNoKHMpfWZvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWlbbltmXV09bltmXTtyZXR1cm4gaX0sImFzc2lnbkNsdXN0ZXJzIiksbEtlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1YcGUoZSxyLG4pLGE9MDthPG4ubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylpW2xdPT09blthXSYmcy5wdXNoKGwpO2Zvcih2YXIgdT0tMSxoPS0xLzAsZj0wO2Y8cy5sZW5ndGg7ZisrKXtmb3IodmFyIGQ9MCxwPTA7cDxzLmxlbmd0aDtwKyspZCs9cltzW3BdKmUrc1tmXV07ZD5oJiYodT1mLGg9ZCl9blthXT1zW3VdfXJldHVybiBpPVhwZShlLHIsbiksaX0sImFzc2lnbiIpLGpwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1pS2UoZSksYT17fSxzPTA7czxuLmxlbmd0aDtzKyspYVtuW3NdLmlkKCldPXM7dmFyIGwsdSxoLGYsZCxwO2w9bi5sZW5ndGgsdT1sKmwsaD1uZXcgQXJyYXkodSk7Zm9yKHZhciBtPTA7bTx1O20rKyloW21dPS0xLzA7Zm9yKHZhciBnPTA7ZzxsO2crKylmb3IodmFyIHk9MDt5PGw7eSsrKWchPT15JiYoaFtnKmwreV09YUtlKGkuZGlzdGFuY2UsbltnXSxuW3ldLGkuYXR0cmlidXRlcykpO2Y9c0tlKGgsaS5wcmVmZXJlbmNlKTtmb3IodmFyIHY9MDt2PGw7disrKWhbdipsK3ZdPWY7ZD1uZXcgQXJyYXkodSk7Zm9yKHZhciB4PTA7eDx1O3grKylkW3hdPTA7cD1uZXcgQXJyYXkodSk7Zm9yKHZhciBiPTA7Yjx1O2IrKylwW2JdPTA7Zm9yKHZhciB3PW5ldyBBcnJheShsKSxfPW5ldyBBcnJheShsKSxUPW5ldyBBcnJheShsKSxFPTA7RTxsO0UrKyl3W0VdPTAsX1tFXT0wLFRbRV09MDtmb3IodmFyIEw9bmV3IEFycmF5KGwqaS5taW5JdGVyYXRpb25zKSxTPTA7UzxMLmxlbmd0aDtTKyspTFtTXT0wO3ZhciBBO2ZvcihBPTA7QTxpLm1heEl0ZXJhdGlvbnM7QSsrKXtmb3IodmFyIEk9MDtJPGw7SSsrKXtmb3IodmFyIEQ9LTEvMCxrPS0xLzAsUj0tMSxDPTAsTz0wO088bDtPKyspd1tPXT1kW0kqbCtPXSxDPXBbSSpsK09dK2hbSSpsK09dLEM+PUQ/KGs9RCxEPUMsUj1PKTpDPmsmJihrPUMpO2Zvcih2YXIgTj0wO048bDtOKyspZFtJKmwrTl09KDEtaS5kYW1waW5nKSooaFtJKmwrTl0tRCkraS5kYW1waW5nKndbTl07ZFtJKmwrUl09KDEtaS5kYW1waW5nKSooaFtJKmwrUl0taykraS5kYW1waW5nKndbUl19Zm9yKHZhciBQPTA7UDxsO1ArKyl7Zm9yKHZhciBGPTAsQj0wO0I8bDtCKyspd1tCXT1wW0IqbCtQXSxfW0JdPU1hdGgubWF4KDAsZFtCKmwrUF0pLEYrPV9bQl07Ri09X1tQXSxfW1BdPWRbUCpsK1BdLEYrPV9bUF07Zm9yKHZhciBHPTA7RzxsO0crKylwW0cqbCtQXT0oMS1pLmRhbXBpbmcpKk1hdGgubWluKDAsRi1fW0ddKStpLmRhbXBpbmcqd1tHXTtwW1AqbCtQXT0oMS1pLmRhbXBpbmcpKihGLV9bUF0pK2kuZGFtcGluZyp3W1BdfWZvcih2YXIgej0wLFc9MDtXPGw7VysrKXt2YXIgWj1wW1cqbCtXXStkW1cqbCtXXT4wPzE6MDtMW0ElaS5taW5JdGVyYXRpb25zKmwrV109Wix6Kz1afWlmKHo+MCYmKEE+PWkubWluSXRlcmF0aW9ucy0xfHxBPT1pLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgaj0wLG9lPTA7b2U8bDtvZSsrKXtUW29lXT0wO2Zvcih2YXIgSz0wO0s8aS5taW5JdGVyYXRpb25zO0srKylUW29lXSs9TFtLKmwrb2VdOyhUW29lXT09PTB8fFRbb2VdPT09aS5taW5JdGVyYXRpb25zKSYmaisrfWlmKGo9PT1sKWJyZWFrfX1mb3IodmFyIGVlPW9LZShsLGQscCksSj1sS2UobCxoLGVlKSxIPXt9LHE9MDtxPGVlLmxlbmd0aDtxKyspSFtlZVtxXV09W107Zm9yKHZhciBRPTA7UTxuLmxlbmd0aDtRKyspe3ZhciBhZT1hW25bUV0uaWQoKV0sdWU9SlthZV07dWUhPW51bGwmJkhbdWVdLnB1c2gobltRXSl9Zm9yKHZhciBjZT1uZXcgQXJyYXkoZWUubGVuZ3RoKSx0ZT0wO3RlPGVlLmxlbmd0aDt0ZSsrKWNlW3RlXT1yLmNvbGxlY3Rpb24oSFtlZVt0ZV1dKTtyZXR1cm4gY2V9LCJhZmZpbml0eVByb3BhZ2F0aW9uIiksY0tlPXthZmZpbml0eVByb3BhZ2F0aW9uOmpwZSxhcDpqcGV9LHVLZT1fYSh7cm9vdDp2b2lkIDAsZGlyZWN0ZWQ6ITF9KSxoS2U9e2hpZXJob2x6ZXI6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sZGlyZWN0ZWQ6clsxXX19dmFyIG49dUtlKGUpLGk9bi5yb290LGE9bi5kaXJlY3RlZCxzPXRoaXMsbD0hMSx1LGgsZjtpJiYoZj1adChpKT90aGlzLmZpbHRlcihpKVswXS5pZCgpOmlbMF0uaWQoKSk7dmFyIGQ9e30scD17fTthP3MuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgdz1iLmlkKCk7aWYoYi5pc05vZGUoKSl7dmFyIF89Yi5pbmRlZ3JlZSghMCksVD1iLm91dGRlZ3JlZSghMCksRT1fLVQsTD1ULV87RT09MT91P2w9ITA6dT13Okw9PTE/aD9sPSEwOmg9dzooTD4xfHxFPjEpJiYobD0hMCksZFt3XT1bXSxiLm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihTKXtTLmlzRWRnZSgpJiZkW3ddLnB1c2goUy5pZCgpKX0pfWVsc2UgcFt3XT1bdm9pZCAwLGIudGFyZ2V0KCkuaWQoKV19KTpzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIHc9Yi5pZCgpO2lmKGIuaXNOb2RlKCkpe3ZhciBfPWIuZGVncmVlKCEwKTtfJTImJih1P2g/bD0hMDpoPXc6dT13KSxkW3ddPVtdLGIuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBkW3ddLnB1c2goVC5pZCgpKX0pfWVsc2UgcFt3XT1bYi5zb3VyY2UoKS5pZCgpLGIudGFyZ2V0KCkuaWQoKV19KTt2YXIgbT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZihsKXJldHVybiBtO2lmKGgmJnUpaWYoYSl7aWYoZiYmaCE9ZilyZXR1cm4gbTtmPWh9ZWxzZXtpZihmJiZoIT1mJiZ1IT1mKXJldHVybiBtO2Z8fChmPWgpfWVsc2UgZnx8KGY9c1swXS5pZCgpKTt2YXIgZz1vKGZ1bmN0aW9uKHcpe2Zvcih2YXIgXz13LFQ9W3ddLEUsTCxTO2RbX10ubGVuZ3RoOylFPWRbX10uc2hpZnQoKSxMPXBbRV1bMF0sUz1wW0VdWzFdLF8hPVM/KGRbU109ZFtTXS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIEEhPUV9KSxfPVMpOiFhJiZfIT1MJiYoZFtMXT1kW0xdLmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4gQSE9RX0pLF89TCksVC51bnNoaWZ0KEUpLFQudW5zaGlmdChfKTtyZXR1cm4gVH0sIndhbGsiKSx5PVtdLHY9W107Zm9yKHY9ZyhmKTt2Lmxlbmd0aCE9MTspZFt2WzBdXS5sZW5ndGg9PTA/KHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpLHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpKTp2PWcodi5zaGlmdCgpKS5jb25jYXQodik7eS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSk7Zm9yKHZhciB4IGluIGQpaWYoZFt4XS5sZW5ndGgpcmV0dXJuIG07cmV0dXJuIG0uZm91bmQ9ITAsbS50cmFpbD10aGlzLnNwYXduKHksITApLG19LCJoaWVyaG9semVyIil9LGM2PW8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9e30sbj0wLGk9MCxhPVtdLHM9W10sbD17fSx1PW8oZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9cy5sZW5ndGgtMSx5PVtdLHY9ZS5zcGF3bigpO3NbZ10ueCE9cHx8c1tnXS55IT1tOyl5LnB1c2gocy5wb3AoKS5lZGdlKSxnLS07eS5wdXNoKHMucG9wKCkuZWRnZSkseS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ZhciBiPXguY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZSk7di5tZXJnZSh4KSxiLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIF89dy5pZCgpLFQ9dy5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTt2Lm1lcmdlKHcpLHJbX10uY3V0VmVydGV4P3YubWVyZ2UoVC5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNMb29wKCl9KSk6di5tZXJnZShUKX0pfSksYS5wdXNoKHYpfSwiYnVpbGRDb21wb25lbnQiKSxoPW8oZnVuY3Rpb24gZChwLG0sZyl7cD09PWcmJihpKz0xKSxyW21dPXtpZDpuLGxvdzpuKyssY3V0VmVydGV4OiExfTt2YXIgeT1lLmdldEVsZW1lbnRCeUlkKG0pLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGUpO2lmKHkuc2l6ZSgpPT09MClhLnB1c2goZS5zcGF3bihlLmdldEVsZW1lbnRCeUlkKG0pKSk7ZWxzZXt2YXIgdix4LGIsdzt5LmZvckVhY2goZnVuY3Rpb24oXyl7dj1fLnNvdXJjZSgpLmlkKCkseD1fLnRhcmdldCgpLmlkKCksYj12PT09bT94OnYsYiE9PWcmJih3PV8uaWQoKSxsW3ddfHwobFt3XT0hMCxzLnB1c2goe3g6bSx5OmIsZWRnZTpffSkpLGIgaW4gcj9yW21dLmxvdz1NYXRoLm1pbihyW21dLmxvdyxyW2JdLmlkKTooZChwLGIsbSksclttXS5sb3c9TWF0aC5taW4oclttXS5sb3cscltiXS5sb3cpLHJbbV0uaWQ8PXJbYl0ubG93JiYoclttXS5jdXRWZXJ0ZXg9ITAsdShtLGIpKSkpfSl9fSwiYmljb25uZWN0ZWRTZWFyY2giKTtlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5pc05vZGUoKSl7dmFyIHA9ZC5pZCgpO3AgaW4gcnx8KGk9MCxoKHAscCkscltwXS5jdXRWZXJ0ZXg9aT4xKX19KTt2YXIgZj1PYmplY3Qua2V5cyhyKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIHJbZF0uY3V0VmVydGV4fSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBlLmdldEVsZW1lbnRCeUlkKGQpfSk7cmV0dXJue2N1dDplLnNwYXduKGYpLGNvbXBvbmVudHM6YX19LCJob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkIiksZktlPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOmM2LGh0YmM6YzYsaHRiOmM2LGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOmM2fSx1Nj1vKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXt9LG49MCxpPVtdLGE9W10scz1lLnNwYXduKGUpLGw9byhmdW5jdGlvbiB1KGgpe2EucHVzaChoKSxyW2hdPXtpbmRleDpuLGxvdzpuKyssZXhwbG9yZWQ6ITF9O3ZhciBmPWUuZ2V0RWxlbWVudEJ5SWQoaCkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoZi5mb3JFYWNoKGZ1bmN0aW9uKHkpe3ZhciB2PXkudGFyZ2V0KCkuaWQoKTt2IT09aCYmKHYgaW4gcnx8dSh2KSxyW3ZdLmV4cGxvcmVkfHwocltoXS5sb3c9TWF0aC5taW4ocltoXS5sb3csclt2XS5sb3cpKSl9KSxyW2hdLmluZGV4PT09cltoXS5sb3cpe2Zvcih2YXIgZD1lLnNwYXduKCk7Oyl7dmFyIHA9YS5wb3AoKTtpZihkLm1lcmdlKGUuZ2V0RWxlbWVudEJ5SWQocCkpLHJbcF0ubG93PXJbaF0uaW5kZXgscltwXS5leHBsb3JlZD0hMCxwPT09aClicmVha312YXIgbT1kLmVkZ2VzV2l0aChkKSxnPWQubWVyZ2UobSk7aS5wdXNoKGcpLHM9cy5kaWZmZXJlbmNlKGcpfX0sInN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoIik7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LmlzTm9kZSgpKXt2YXIgaD11LmlkKCk7aCBpbiByfHxsKGgpfX0pLHtjdXQ6cyxjb21wb25lbnRzOml9fSwidGFyamFuU3Ryb25nbHlDb25uZWN0ZWQiKSxkS2U9e3RhcmphblN0cm9uZ2x5Q29ubmVjdGVkOnU2LHRzYzp1Nix0c2NjOnU2LHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czp1Nn0sdmdlPXt9O1thYixVWGUsSFhlLFlYZSxYWGUsS1hlLEpYZSxFamUsdjEseDEsJFAsQmplLEtqZSxyS2UsY0tlLGhLZSxmS2UsZEtlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKHZnZSx0KX0pO3hnZT0wLGJnZT0xLHdnZT0yLHNoPW8oZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSk7dGhpcy5pZD0iVGhlbmFibGUvMS4wLjciLHRoaXMuc3RhdGU9eGdlLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGU9PSJmdW5jdGlvbiImJmUuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfSwiYXBpIik7c2gucHJvdG90eXBlPXtmdWxmaWxsOm8oZnVuY3Rpb24oZSl7cmV0dXJuIEtwZSh0aGlzLGJnZSwiZnVsZmlsbFZhbHVlIixlKX0sImZ1bGZpbGwiKSxyZWplY3Q6byhmdW5jdGlvbihlKXtyZXR1cm4gS3BlKHRoaXMsd2dlLCJyZWplY3RSZWFzb24iLGUpfSwicmVqZWN0IiksdGhlbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPW5ldyBzaDtyZXR1cm4gbi5vbkZ1bGZpbGxlZC5wdXNoKFpwZShlLGksImZ1bGZpbGwiKSksbi5vblJlamVjdGVkLnB1c2goWnBlKHIsaSwicmVqZWN0IikpLFRnZShuKSxpLnByb3h5fSwidGhlbiIpfTtLcGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gZS5zdGF0ZT09PXhnZSYmKGUuc3RhdGU9cixlW25dPWksVGdlKGUpKSxlfSwiZGVsaXZlciIpLFRnZT1vKGZ1bmN0aW9uKGUpe2Uuc3RhdGU9PT1iZ2U/UXBlKGUsIm9uRnVsZmlsbGVkIixlLmZ1bGZpbGxWYWx1ZSk6ZS5zdGF0ZT09PXdnZSYmUXBlKGUsIm9uUmVqZWN0ZWQiLGUucmVqZWN0UmVhc29uKX0sImV4ZWN1dGUiKSxRcGU9byhmdW5jdGlvbihlLHIsbil7aWYoZVtyXS5sZW5ndGghPT0wKXt2YXIgaT1lW3JdO2Vbcl09W107dmFyIGE9byhmdW5jdGlvbigpe2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF0obil9LCJmdW5jIik7dHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIj9zZXRJbW1lZGlhdGUoYSk6c2V0VGltZW91dChhLDApfX0sImV4ZWN1dGVfaGFuZGxlcnMiKSxacGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJbbl0uY2FsbChyLGkpO2Vsc2V7dmFyIGE7dHJ5e2E9ZShpKX1jYXRjaChzKXtyLnJlamVjdChzKTtyZXR1cm59cEtlKHIsYSl9fX0sInJlc29sdmVyIikscEtlPW8oZnVuY3Rpb24gdChlLHIpe2lmKGU9PT1yfHxlLnByb3h5PT09cil7ZS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIG47aWYoS2kocik9PT0ib2JqZWN0IiYmciE9PW51bGx8fHR5cGVvZiByPT0iZnVuY3Rpb24iKXRyeXtuPXIudGhlbn1jYXRjaChhKXtlLnJlamVjdChhKTtyZXR1cm59aWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe3ZhciBpPSExO3RyeXtuLmNhbGwocixmdW5jdGlvbihhKXtpfHwoaT0hMCxhPT09cj9lLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp0KGUsYSkpfSxmdW5jdGlvbihhKXtpfHwoaT0hMCxlLnJlamVjdChhKSl9KX1jYXRjaChhKXtpfHxlLnJlamVjdChhKX1yZXR1cm59ZS5mdWxmaWxsKHIpfSwicmVzb2x2ZSIpO3NoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLGE9byhmdW5jdGlvbih1LGgpe25bdV09aCxpKyssaT09PXQubGVuZ3RoJiZlKG4pfSwiZnVsZmlsbCIpLHM9MDtzPHQubGVuZ3RoO3MrKykoZnVuY3Rpb24obCl7dmFyIHU9dFtsXSxoPXUhPW51bGwmJnUudGhlbiE9bnVsbDtpZihoKXUudGhlbihmdW5jdGlvbihkKXthKGwsZCl9LGZ1bmN0aW9uKGQpe3IoZCl9KTtlbHNle3ZhciBmPXU7YShsLGYpfX0pKHMpfSl9O3NoLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzaChmdW5jdGlvbihlLHIpe2UodCl9KX07c2gucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc2goZnVuY3Rpb24oZSxyKXtyKHQpfSl9O0MxPXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOnNoLFZQPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW5CKGUpLGE9IWkscz10aGlzLl9wcml2YXRlPWlyKHtkdXJhdGlvbjoxZTN9LHIsbik7aWYocy50YXJnZXQ9ZSxzLnN0eWxlPXMuc3R5bGV8fHMuY3NzLHMuc3RhcnRlZD0hMSxzLnBsYXlpbmc9ITEscy5ob29rZWQ9ITEscy5hcHBseWluZz0hMSxzLnByb2dyZXNzPTAscy5jb21wbGV0ZXM9W10scy5mcmFtZXM9W10scy5jb21wbGV0ZSYmbmkocy5jb21wbGV0ZSkmJnMuY29tcGxldGVzLnB1c2gocy5jb21wbGV0ZSksYSl7dmFyIGw9ZS5wb3NpdGlvbigpO3Muc3RhcnRQb3NpdGlvbj1zLnN0YXJ0UG9zaXRpb258fHt4OmwueCx5OmwueX0scy5zdGFydFN0eWxlPXMuc3RhcnRTdHlsZXx8ZS5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZShlLHMuc3R5bGUpfWlmKGkpe3ZhciB1PWUucGFuKCk7cy5zdGFydFBhbj17eDp1LngseTp1Lnl9LHMuc3RhcnRab29tPWUuem9vbSgpfXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzfSwiQW5pbWF0aW9uIiksWjA9VlAucHJvdG90eXBlO2lyKFowLHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImFuaW1hdGlvbiJ9LCJpbnN0YW5jZVN0cmluZyIpLGhvb2s6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoIWUuaG9va2VkKXt2YXIgcixuPWUudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtlLnF1ZXVlP3I9bi5xdWV1ZTpyPW4uY3VycmVudCxyLnB1c2godGhpcyksd28oZS50YXJnZXQpJiZlLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChlLnRhcmdldCksZS5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LCJob29rIikscGxheTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wcm9ncmVzcz09PTEmJihlLnByb2dyZXNzPTApLGUucGxheWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJwbGF5IikscGxheWluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sInBsYXlpbmciKSxhcHBseTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5hcHBseWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJhcHBseSIpLGFwcGx5aW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30sImFwcGx5aW5nIikscGF1c2U6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUucGxheWluZz0hMSxlLnN0YXJ0ZWQ9ITEsdGhpc30sInBhdXNlIiksc3RvcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITAsdGhpc30sInN0b3AiKSxyZXdpbmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDApfSwicmV3aW5kIiksZmFzdGZvcndhcmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDEpfSwiZmFzdGZvcndhcmQiKSx0aW1lOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzKnIuZHVyYXRpb246dGhpcy5wcm9ncmVzcyhlL3IuZHVyYXRpb24pfSwidGltZSIpLHByb2dyZXNzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGxheWluZztyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzOihuJiZ0aGlzLnBhdXNlKCksci5wcm9ncmVzcz1lLHIuc3RhcnRlZD0hMSxuJiZ0aGlzLnBsYXkoKSx0aGlzKX0sInByb2dyZXNzIiksY29tcGxldGVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LCJjb21wbGV0ZWQiKSxyZXZlcnNlOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHI9ZS5wbGF5aW5nO3ImJnRoaXMucGF1c2UoKSxlLnByb2dyZXNzPTEtZS5wcm9ncmVzcyxlLnN0YXJ0ZWQ9ITE7dmFyIG49byhmdW5jdGlvbihoLGYpe3ZhciBkPWVbaF07ZCE9bnVsbCYmKGVbaF09ZVtmXSxlW2ZdPWQpfSwic3dhcCIpO2lmKG4oInpvb20iLCJzdGFydFpvb20iKSxuKCJwYW4iLCJzdGFydFBhbiIpLG4oInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIpLGUuc3R5bGUpZm9yKHZhciBpPTA7aTxlLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBhPWUuc3R5bGVbaV0scz1hLm5hbWUsbD1lLnN0YXJ0U3R5bGVbc107ZS5zdGFydFN0eWxlW3NdPWEsZS5zdHlsZVtpXT1sfXJldHVybiByJiZ0aGlzLnBsYXkoKSx0aGlzfSwicmV2ZXJzZSIpLHByb21pc2U6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG47c3dpdGNoKGUpe2Nhc2UiZnJhbWUiOm49ci5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6bj1yLmNvbXBsZXRlc31yZXR1cm4gbmV3IEMxKGZ1bmN0aW9uKGksYSl7bi5wdXNoKGZ1bmN0aW9uKCl7aSgpfSl9KX0sInByb21pc2UiKX0pO1owLmNvbXBsZXRlPVowLmNvbXBsZXRlZDtaMC5ydW49WjAucGxheTtaMC5ydW5uaW5nPVowLnBsYXlpbmc7bUtlPXthbmltYXRlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcz1pWzBdO2lmKHMpcmV0dXJuIHMuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoPjB9LCJhbmltYXRlZEltcGwiKX0sImFuaW1hdGVkIiksY2xlYXJRdWV1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtsLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZT1bXX1yZXR1cm4gdGhpc30sImNsZWFyUXVldWVJbXBsIil9LCJjbGVhclF1ZXVlIiksZGVsYXk6byhmdW5jdGlvbigpe3JldHVybiBvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gaS5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGUoe2RlbGF5OnIsZHVyYXRpb246cixjb21wbGV0ZTpufSk6dGhpc30sImRlbGF5SW1wbCIpfSwiZGVsYXkiKSxkZWxheUFuaW1hdGlvbjpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBpLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTpyLGR1cmF0aW9uOnIsY29tcGxldGU6bn0pOnRoaXN9LCJkZWxheUFuaW1hdGlvbkltcGwiKX0sImRlbGF5QW5pbWF0aW9uIiksYW5pbWF0aW9uOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzLHU9IWEsaD0hdTtpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgZj1sLnN0eWxlKCk7cj1pcih7fSxyLG4pO3ZhciBkPU9iamVjdC5rZXlzKHIpLmxlbmd0aD09PTA7aWYoZClyZXR1cm4gbmV3IFZQKHNbMF0scik7c3dpdGNoKHIuZHVyYXRpb249PT12b2lkIDAmJihyLmR1cmF0aW9uPTQwMCksci5kdXJhdGlvbil7Y2FzZSJzbG93IjpyLmR1cmF0aW9uPTYwMDticmVhaztjYXNlImZhc3QiOnIuZHVyYXRpb249MjAwO2JyZWFrfWlmKGgmJihyLnN0eWxlPWYuZ2V0UHJvcHNMaXN0KHIuc3R5bGV8fHIuY3NzKSxyLmNzcz12b2lkIDApLGgmJnIucmVuZGVyZWRQb3NpdGlvbiE9bnVsbCl7dmFyIHA9ci5yZW5kZXJlZFBvc2l0aW9uLG09bC5wYW4oKSxnPWwuem9vbSgpO3IucG9zaXRpb249b2dlKHAsZyxtKX1pZih1JiZyLnBhbkJ5IT1udWxsKXt2YXIgeT1yLnBhbkJ5LHY9bC5wYW4oKTtyLnBhbj17eDp2LngreS54LHk6di55K3kueX19dmFyIHg9ci5jZW50ZXJ8fHIuY2VudHJlO2lmKHUmJnghPW51bGwpe3ZhciBiPWwuZ2V0Q2VudGVyUGFuKHguZWxlcyxyLnpvb20pO2IhPW51bGwmJihyLnBhbj1iKX1pZih1JiZyLmZpdCE9bnVsbCl7dmFyIHc9ci5maXQsXz1sLmdldEZpdFZpZXdwb3J0KHcuZWxlc3x8dy5ib3VuZGluZ0JveCx3LnBhZGRpbmcpO18hPW51bGwmJihyLnBhbj1fLnBhbixyLnpvb209Xy56b29tKX1pZih1JiZVcihyLnpvb20pKXt2YXIgVD1sLmdldFpvb21lZFZpZXdwb3J0KHIuem9vbSk7VCE9bnVsbD8oVC56b29tZWQmJihyLnpvb209VC56b29tKSxULnBhbm5lZCYmKHIucGFuPVQucGFuKSk6ci56b29tPW51bGx9cmV0dXJuIG5ldyBWUChzWzBdLHIpfSwiYW5pbWF0aW9uSW1wbCIpfSwiYW5pbWF0aW9uIiksYW5pbWF0ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztuJiYocj1pcih7fSxyLG4pKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguYW5pbWF0ZWQoKSYmKHIucXVldWU9PT12b2lkIDB8fHIucXVldWUpLGQ9aC5hbmltYXRpb24ocixmP3txdWV1ZTohMH06dm9pZCAwKTtkLnBsYXkoKX1yZXR1cm4gdGhpc30sImFuaW1hdGVJbXBsIil9LCJhbmltYXRlIiksc3RvcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7Zm9yKHZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5hbmltYXRpb24uY3VycmVudCxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF0sZz1tLl9wcml2YXRlO24mJihnLmR1cmF0aW9uPTApfXImJihmLmFuaW1hdGlvbi5xdWV1ZT1bXSksbnx8KGYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiBsLm5vdGlmeSgiZHJhdyIpLHRoaXN9LCJzdG9wSW1wbCIpfSwic3RvcCIpfSxnS2U9QXJyYXkuaXNBcnJheSxVNj1nS2UseUtlPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHZLZT0vXlx3KiQvO28oeEtlLCJpc0tleSIpO2JLZT14S2Usd0tlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixUS2U9IltvYmplY3QgRnVuY3Rpb25dIixrS2U9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixFS2U9IltvYmplY3QgUHJveHldIjtvKFNLZSwiaXNGdW5jdGlvbiIpO0NLZT1TS2UsQUtlPUY2WyJfX2NvcmUtanNfc2hhcmVkX18iXSxOUD1BS2UsSnBlPWZ1bmN0aW9uKCl7dmFyIHQ9L1teLl0rJC8uZXhlYyhOUCYmTlAua2V5cyYmTlAua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB0PyJTeW1ib2woc3JjKV8xLiIrdDoiIn0oKTtvKF9LZSwiaXNNYXNrZWQiKTtMS2U9X0tlLERLZT1GdW5jdGlvbi5wcm90b3R5cGUsTktlPURLZS50b1N0cmluZztvKFJLZSwidG9Tb3VyY2UiKTtNS2U9UktlLElLZT0vW1xcXiQuKis/KClbXF17fXxdL2csT0tlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFBLZT1GdW5jdGlvbi5wcm90b3R5cGUsQktlPU9iamVjdC5wcm90b3R5cGUsRktlPVBLZS50b1N0cmluZyx6S2U9QktlLmhhc093blByb3BlcnR5LEdLZT1SZWdFeHAoIl4iK0ZLZS5jYWxsKHpLZSkucmVwbGFjZShJS2UsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7bygkS2UsImJhc2VJc05hdGl2ZSIpO1ZLZT0kS2U7byhVS2UsImdldFZhbHVlJDEiKTtIS2U9VUtlO28oV0tlLCJnZXROYXRpdmUiKTtmQj1XS2UsWUtlPWZCKE9iamVjdCwiY3JlYXRlIiksbGI9WUtlO28ocUtlLCJoYXNoQ2xlYXIiKTtYS2U9cUtlO28oaktlLCJoYXNoRGVsZXRlIik7S0tlPWpLZSxRS2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLFpLZT1PYmplY3QucHJvdG90eXBlLEpLZT1aS2UuaGFzT3duUHJvcGVydHk7byhlUWUsImhhc2hHZXQiKTt0UWU9ZVFlLHJRZT1PYmplY3QucHJvdG90eXBlLG5RZT1yUWUuaGFzT3duUHJvcGVydHk7byhpUWUsImhhc2hIYXMiKTthUWU9aVFlLHNRZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhvUWUsImhhc2hTZXQiKTtsUWU9b1FlO28oQTEsIkhhc2giKTtBMS5wcm90b3R5cGUuY2xlYXI9WEtlO0ExLnByb3RvdHlwZS5kZWxldGU9S0tlO0ExLnByb3RvdHlwZS5nZXQ9dFFlO0ExLnByb3RvdHlwZS5oYXM9YVFlO0ExLnByb3RvdHlwZS5zZXQ9bFFlO2VtZT1BMTtvKGNRZSwibGlzdENhY2hlQ2xlYXIiKTt1UWU9Y1FlO28oaFFlLCJlcSIpO2tnZT1oUWU7byhmUWUsImFzc29jSW5kZXhPZiIpO0g2PWZRZSxkUWU9QXJyYXkucHJvdG90eXBlLHBRZT1kUWUuc3BsaWNlO28obVFlLCJsaXN0Q2FjaGVEZWxldGUiKTtnUWU9bVFlO28oeVFlLCJsaXN0Q2FjaGVHZXQiKTt2UWU9eVFlO28oeFFlLCJsaXN0Q2FjaGVIYXMiKTtiUWU9eFFlO28od1FlLCJsaXN0Q2FjaGVTZXQiKTtUUWU9d1FlO28oXzEsIkxpc3RDYWNoZSIpO18xLnByb3RvdHlwZS5jbGVhcj11UWU7XzEucHJvdG90eXBlLmRlbGV0ZT1nUWU7XzEucHJvdG90eXBlLmdldD12UWU7XzEucHJvdG90eXBlLmhhcz1iUWU7XzEucHJvdG90eXBlLnNldD1UUWU7a1FlPV8xLEVRZT1mQihGNiwiTWFwIiksU1FlPUVRZTtvKENRZSwibWFwQ2FjaGVDbGVhciIpO0FRZT1DUWU7byhfUWUsImlzS2V5YWJsZSIpO0xRZT1fUWU7byhEUWUsImdldE1hcERhdGEiKTtXNj1EUWU7byhOUWUsIm1hcENhY2hlRGVsZXRlIik7UlFlPU5RZTtvKE1RZSwibWFwQ2FjaGVHZXQiKTtJUWU9TVFlO28oT1FlLCJtYXBDYWNoZUhhcyIpO1BRZT1PUWU7byhCUWUsIm1hcENhY2hlU2V0Iik7RlFlPUJRZTtvKEwxLCJNYXBDYWNoZSIpO0wxLnByb3RvdHlwZS5jbGVhcj1BUWU7TDEucHJvdG90eXBlLmRlbGV0ZT1SUWU7TDEucHJvdG90eXBlLmdldD1JUWU7TDEucHJvdG90eXBlLmhhcz1QUWU7TDEucHJvdG90eXBlLnNldD1GUWU7RWdlPUwxLHpRZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhkQiwibWVtb2l6ZSIpO2RCLkNhY2hlPUVnZTtHUWU9ZEIsJFFlPTUwMDtvKFZRZSwibWVtb2l6ZUNhcHBlZCIpO1VRZT1WUWUsSFFlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLFdRZT0vXFwoXFwpPy9nLFlRZT1VUWUoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZShIUWUsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKFdRZSwiJDEiKTpufHxyKX0pLGV9KSxTZ2U9WVFlO28ocVFlLCJhcnJheU1hcCIpO0NnZT1xUWUsWFFlPTEvMCx0bWU9dzE/dzEucHJvdG90eXBlOnZvaWQgMCxybWU9dG1lP3RtZS50b1N0cmluZzp2b2lkIDA7byhBZ2UsImJhc2VUb1N0cmluZyIpO2pRZT1BZ2U7byhLUWUsInRvU3RyaW5nJDEiKTtfZ2U9S1FlO28oUVFlLCJjYXN0UGF0aCIpO0xnZT1RUWUsWlFlPTEvMDtvKEpRZSwidG9LZXkiKTtwQj1KUWU7byhlWmUsImJhc2VHZXQiKTt0WmU9ZVplO28oclplLCJnZXQiKTtuWmU9clplLGlaZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1mQihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2h7fX0oKSxubWU9aVplO28oYVplLCJiYXNlQXNzaWduVmFsdWUiKTtzWmU9YVplLG9aZT1PYmplY3QucHJvdG90eXBlLGxaZT1vWmUuaGFzT3duUHJvcGVydHk7byhjWmUsImFzc2lnblZhbHVlIik7dVplPWNaZSxoWmU9OTAwNzE5OTI1NDc0MDk5MSxmWmU9L14oPzowfFsxLTldXGQqKSQvO28oZFplLCJpc0luZGV4Iik7cFplPWRaZTtvKG1aZSwiYmFzZVNldCIpO2daZT1tWmU7byh5WmUsInNldCIpO3ZaZT15WmU7byh4WmUsImNvcHlBcnJheSIpO2JaZT14WmU7byh3WmUsInRvUGF0aCIpO1RaZT13WmUsa1plPXtkYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6byhmdW5jdGlvbihpKXt9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihpLGEpe30sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oaSl7fSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihpKXtyZXR1cm4hMH0sImNhblNldCIpfTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSxhKXt2YXIgcz1lLGw9dGhpcyx1PWwubGVuZ3RoIT09dm9pZCAwLGg9dT9sOltsXSxmPXU/bFswXTpsO2lmKFp0KGkpKXt2YXIgZD1pLmluZGV4T2YoIi4iKSE9PS0xLHA9ZCYmVFplKGkpO2lmKHMuYWxsb3dHZXR0aW5nJiZhPT09dm9pZCAwKXt2YXIgbTtyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/bT1uWmUoZi5fcHJpdmF0ZVtzLmZpZWxkXSxwKTptPWYuX3ByaXZhdGVbcy5maWVsZF1baV0pLG19ZWxzZSBpZihzLmFsbG93U2V0dGluZyYmYSE9PXZvaWQgMCl7dmFyIGc9IXMuaW1tdXRhYmxlS2V5c1tpXTtpZihnKXt2YXIgeT0kbWUoe30saSxhKTtzLmJlZm9yZVNldChsLHkpO2Zvcih2YXIgdj0wLHg9aC5sZW5ndGg7djx4O3YrKyl7dmFyIGI9aFt2XTtzLmNhblNldChiKSYmKHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/dlplKGIuX3ByaXZhdGVbcy5maWVsZF0scCxhKTpiLl9wcml2YXRlW3MuZmllbGRdW2ldPWEpfXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9fX1lbHNlIGlmKHMuYWxsb3dTZXR0aW5nJiZVcihpKSl7dmFyIHc9aSxfLFQsRT1PYmplY3Qua2V5cyh3KTtzLmJlZm9yZVNldChsLHcpO2Zvcih2YXIgTD0wO0w8RS5sZW5ndGg7TCsrKXtfPUVbTF0sVD13W19dO3ZhciBTPSFzLmltbXV0YWJsZUtleXNbX107aWYoUylmb3IodmFyIEE9MDtBPGgubGVuZ3RoO0ErKyl7dmFyIEk9aFtBXTtzLmNhblNldChJKSYmKEkuX3ByaXZhdGVbcy5maWVsZF1bX109VCl9fXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9ZWxzZSBpZihzLmFsbG93QmluZGluZyYmbmkoaSkpe3ZhciBEPWk7bC5vbihzLmJpbmRpbmdFdmVudCxEKX1lbHNlIGlmKHMuYWxsb3dHZXR0aW5nJiZpPT09dm9pZCAwKXt2YXIgaztyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLGs9Zi5fcHJpdmF0ZVtzLmZpZWxkXSksa31yZXR1cm4gbH0sImRhdGFJbXBsIil9LCJkYXRhIikscmVtb3ZlRGF0YTpvKGZ1bmN0aW9uKGUpe3ZhciByPXtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMSxpbW11dGFibGVLZXlzOnt9fTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSl7dmFyIGE9ZSxzPXRoaXMsbD1zLmxlbmd0aCE9PXZvaWQgMCx1PWw/czpbc107aWYoWnQoaSkpe2Zvcih2YXIgaD1pLnNwbGl0KC9ccysvKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXt2YXIgcD1oW2RdO2lmKCFJZihwKSl7dmFyIG09IWEuaW1tdXRhYmxlS2V5c1twXTtpZihtKWZvcih2YXIgZz0wLHk9dS5sZW5ndGg7Zzx5O2crKyl1W2ddLl9wcml2YXRlW2EuZmllbGRdW3BdPXZvaWQgMH19YS50cmlnZ2VyRXZlbnQmJnNbYS50cmlnZ2VyRm5OYW1lXShhLmV2ZW50KX1lbHNlIGlmKGk9PT12b2lkIDApe2Zvcih2YXIgdj0wLHg9dS5sZW5ndGg7djx4O3YrKylmb3IodmFyIGI9dVt2XS5fcHJpdmF0ZVthLmZpZWxkXSx3PU9iamVjdC5rZXlzKGIpLF89MDtfPHcubGVuZ3RoO18rKyl7dmFyIFQ9d1tfXSxFPSFhLmltbXV0YWJsZUtleXNbVF07RSYmKGJbVF09dm9pZCAwKX1hLnRyaWdnZXJFdmVudCYmc1thLnRyaWdnZXJGbk5hbWVdKGEuZXZlbnQpfXJldHVybiBzfSwicmVtb3ZlRGF0YUltcGwiKX0sInJlbW92ZURhdGEiKX0sRVplPXtldmVudEFsaWFzZXNPbjpvKGZ1bmN0aW9uKGUpe3ZhciByPWU7ci5hZGRMaXN0ZW5lcj1yLmxpc3Rlbj1yLmJpbmQ9ci5vbixyLnVubGlzdGVuPXIudW5iaW5kPXIub2ZmPXIucmVtb3ZlTGlzdGVuZXIsci50cmlnZ2VyPXIuZW1pdCxyLnBvbj1yLnByb21pc2VPbj1mdW5jdGlvbihuLGkpe3ZhciBhPXRoaXMscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIG5ldyBDMShmdW5jdGlvbihsLHUpe3ZhciBoPW8oZnVuY3Rpb24obSl7YS5vZmYuYXBwbHkoYSxkKSxsKG0pfSwiY2FsbGJhY2siKSxmPXMuY29uY2F0KFtoXSksZD1mLmNvbmNhdChbXSk7YS5vbi5hcHBseShhLGYpfSl9fSwiZXZlbnRBbGlhc2VzT24iKX0sc249e307W21LZSxrWmUsRVplXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKHNuLHQpfSk7U1plPXthbmltYXRlOnNuLmFuaW1hdGUoKSxhbmltYXRpb246c24uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6c24uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnNuLmNsZWFyUXVldWUoKSxkZWxheTpzbi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnNuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpzbi5zdG9wKCl9LHg2PXtjbGFzc2VzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZihlPT09dm9pZCAwKXt2YXIgbj1bXTtyZXR1cm4gclswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIG4ucHVzaChnKX0pLG59ZWxzZSBrbihlKXx8KGU9KGV8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBpPVtdLGE9bmV3IFMxKGUpLHM9MDtzPHIubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPXJbc10sdT1sLl9wcml2YXRlLGg9dS5jbGFzc2VzLGY9ITEsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLG09aC5oYXMocCk7aWYoIW0pe2Y9ITA7YnJlYWt9fWZ8fChmPWguc2l6ZSE9PWUubGVuZ3RoKSxmJiYodS5jbGFzc2VzPWEsaS5wdXNoKGwpKX1yZXR1cm4gaS5sZW5ndGg+MCYmdGhpcy5zcGF3bihpKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikscn0sImNsYXNzZXMiKSxhZGRDbGFzczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITApfSwiYWRkQ2xhc3MiKSxoYXNDbGFzczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07cmV0dXJuIHIhPW51bGwmJnIuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZSl9LCJoYXNDbGFzcyIpLHRvZ2dsZUNsYXNzOm8oZnVuY3Rpb24oZSxyKXtrbihlKXx8KGU9ZS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBuPXRoaXMsaT1yPT09dm9pZCAwLGE9W10scz0wLGw9bi5sZW5ndGg7czxsO3MrKylmb3IodmFyIHU9bltzXSxoPXUuX3ByaXZhdGUuY2xhc3NlcyxmPSExLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHA9ZVtkXSxtPWguaGFzKHApLGc9ITE7cnx8aSYmIW0/KGguYWRkKHApLGc9ITApOighcnx8aSYmbSkmJihoLmRlbGV0ZShwKSxnPSEwKSwhZiYmZyYmKGEucHVzaCh1KSxmPSEwKX1yZXR1cm4gYS5sZW5ndGg+MCYmdGhpcy5zcGF3bihhKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksbn0sInRvZ2dsZUNsYXNzIikscmVtb3ZlQ2xhc3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhlLCExKX0sInJlbW92ZUNsYXNzIiksZmxhc2hDbGFzczpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZihyPT1udWxsKXI9MjUwO2Vsc2UgaWYocj09PTApcmV0dXJuIG47cmV0dXJuIG4uYWRkQ2xhc3MoZSksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoZSl9LHIpLG59LCJmbGFzaENsYXNzIil9O3g2LmNsYXNzTmFtZT14Ni5jbGFzc05hbWVzPXg2LmNsYXNzZXM7VnI9e21ldGFDaGFyOiJbXFwhXFxcIlxcI1xcJFxcJVxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcLlxcL1xcOlxcO1xcPFxcPVxcPlxcP1xcQFxcW1xcXVxcXlxcYFxce1xcfFxcfVxcfl0iLGNvbXBhcmF0b3JPcDoiPXxcXCE9fD58Pj18PHw8PXxcXCQ9fFxcXj18XFwqPSIsYm9vbE9wOiJcXD98XFwhfFxcXiIsc3RyaW5nOmAiKD86XFxcXCJ8W14iXSkqInwnKD86XFxcXCd8W14nXSkqJ2AsbnVtYmVyOmppLG1ldGE6ImRlZ3JlZXxpbmRlZ3JlZXxvdXRkZWdyZWUiLHNlcGFyYXRvcjoiXFxzKixcXHMqIixkZXNjZW5kYW50OiJcXHMrIixjaGlsZDoiXFxzKz5cXHMrIixzdWJqZWN0OiJcXCQiLGdyb3VwOiJub2RlfGVkZ2V8XFwqIixkaXJlY3RlZEVkZ2U6IlxccystPlxccysiLHVuZGlyZWN0ZWRFZGdlOiJcXHMrPC0+XFxzKyJ9O1ZyLnZhcmlhYmxlPSIoPzpbXFx3LS5dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLmNsYXNzTmFtZT0iKD86W1xcdy1dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLnZhbHVlPVZyLnN0cmluZysifCIrVnIubnVtYmVyO1ZyLmlkPVZyLnZhcmlhYmxlOyhmdW5jdGlvbigpe3ZhciB0LGUscjtmb3IodD1Wci5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxyPTA7cjx0Lmxlbmd0aDtyKyspZT10W3JdLFZyLmNvbXBhcmF0b3JPcCs9InxAIitlO2Zvcih0PVZyLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHI9MDtyPHQubGVuZ3RoO3IrKyllPXRbcl0sIShlLmluZGV4T2YoIiEiKT49MCkmJmUhPT0iPSImJihWci5jb21wYXJhdG9yT3ArPSJ8XFwhIitlKX0pKCk7cG49byhmdW5jdGlvbigpe3JldHVybntjaGVja3M6W119fSwibmV3UXVlcnkiKSxNdD17R1JPVVA6MCxDT0xMRUNUSU9OOjEsRklMVEVSOjIsREFUQV9DT01QQVJFOjMsREFUQV9FWElTVDo0LERBVEFfQk9PTDo1LE1FVEFfQ09NUEFSRTo2LFNUQVRFOjcsSUQ6OCxDTEFTUzo5LFVORElSRUNURURfRURHRToxMCxESVJFQ1RFRF9FREdFOjExLE5PREVfU09VUkNFOjEyLE5PREVfVEFSR0VUOjEzLE5PREVfTkVJR0hCT1I6MTQsQ0hJTEQ6MTUsREVTQ0VOREFOVDoxNixQQVJFTlQ6MTcsQU5DRVNUT1I6MTgsQ09NUE9VTkRfU1BMSVQ6MTksVFJVRToyMH0sVVA9W3tzZWxlY3RvcjoiOnNlbGVjdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnNlbGVjdGFibGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuc2VsZWN0YWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGFibGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVubG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnZpc2libGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnZpc2libGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dHJhbnNwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc3BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpncmFiYmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpyZW1vdmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVtb3ZlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjppbnNpZGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5yZW1vdmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp1bmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphbmltYXRlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hbmltYXRlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZGxlc3MiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6b3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcnBoYW4oKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9ub3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpP2UuaXNQYXJlbnQoKTplLnNvdXJjZSgpLmlzUGFyZW50KCl8fGUudGFyZ2V0KCkuaXNQYXJlbnQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9vcCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpzaW1wbGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NpbXBsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6aW5hY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6YmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX1dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gQnFlKHQuc2VsZWN0b3IsZS5zZWxlY3Rvcil9KSxDWmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZSxyPTA7cjxVUC5sZW5ndGg7cisrKWU9VVBbcl0sdFtlLnNlbGVjdG9yXT1lLm1hdGNoZXM7cmV0dXJuIHR9KCksQVplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gQ1plW2VdKHIpfSwic3RhdGVTZWxlY3Rvck1hdGNoZXMiKSxfWmU9IigiK1VQLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rvcn0pLmpvaW4oInwiKSsiKSIsYzE9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitWci5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihyLG4pe3JldHVybiBufSl9LCJjbGVhbk1ldGFDaGFycyIpLExmPW8oZnVuY3Rpb24oZSxyLG4pe2VbZS5sZW5ndGgtMV09bn0sInJlcGxhY2VMYXN0UXVlcnkiKSxIUD1be25hbWU6Imdyb3VwIixxdWVyeTohMCxyZWdleDoiKCIrVnIuZ3JvdXArIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6TXQuR1JPVVAsdmFsdWU6YT09PSIqIj9hOmErInMifSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToic3RhdGUiLHF1ZXJ5OiEwLHJlZ2V4Ol9aZSxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOk10LlNUQVRFLHZhbHVlOmF9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK1ZyLmlkKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOk10LklELHZhbHVlOmMxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrVnIuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOk10LkNMQVNTLHZhbHVlOmMxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6TXQuREFUQV9FWElTVCxmaWVsZDpjMShhKX0pfSwicG9wdWxhdGUiKX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1ZyLnZhcmlhYmxlKyIpXFxzKigiK1ZyLmNvbXBhcmF0b3JPcCsiKVxccyooIitWci52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl0sdT1uZXcgUmVnRXhwKCJeIitWci5zdHJpbmcrIiQiKS5leGVjKGwpIT1udWxsO3U/bD1sLnN1YnN0cmluZygxLGwubGVuZ3RoLTEpOmw9cGFyc2VGbG9hdChsKSxyLmNoZWNrcy5wdXNoKHt0eXBlOk10LkRBVEFfQ09NUEFSRSxmaWVsZDpjMShhKSxvcGVyYXRvcjpzLHZhbHVlOmx9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci5ib29sT3ArIilcXHMqKCIrVnIudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDIpLGE9aVswXSxzPWlbMV07ci5jaGVja3MucHVzaCh7dHlwZTpNdC5EQVRBX0JPT0wsZmllbGQ6YzEocyksb3BlcmF0b3I6YX0pfSwicG9wdWxhdGUiKX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK1ZyLm1ldGErIilcXHMqKCIrVnIuY29tcGFyYXRvck9wKyIpXFxzKigiK1ZyLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl07ci5jaGVja3MucHVzaCh7dHlwZTpNdC5NRVRBX0NPTVBBUkUsZmllbGQ6YzEoYSksb3BlcmF0b3I6cyx2YWx1ZTpwYXJzZUZsb2F0KGwpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6VnIuc2VwYXJhdG9yLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmN1cnJlbnRTdWJqZWN0LGk9ZS5lZGdlQ291bnQsYT1lLmNvbXBvdW5kQ291bnQscz1lW2UubGVuZ3RoLTFdO24hPW51bGwmJihzLnN1YmplY3Q9bixlLmN1cnJlbnRTdWJqZWN0PW51bGwpLHMuZWRnZUNvdW50PWkscy5jb21wb3VuZENvdW50PWEsZS5lZGdlQ291bnQ9MCxlLmNvbXBvdW5kQ291bnQ9MDt2YXIgbD1lW2UubGVuZ3RoKytdPXBuKCk7cmV0dXJuIGx9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1wbigpLGk9cixhPXBuKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6TXQuRElSRUNURURfRURHRSxzb3VyY2U6aSx0YXJnZXQ6YX0pLExmKGUscixuKSxlLmVkZ2VDb3VudCsrLGF9ZWxzZXt2YXIgcz1wbigpLGw9cix1PXBuKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6TXQuTk9ERV9TT1VSQ0Usc291cmNlOmwsdGFyZ2V0OnV9KSxMZihlLHIscyksZS5lZGdlQ291bnQrKyx1fX0sInBvcHVsYXRlIil9LHtuYW1lOiJ1bmRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLnVuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1wbigpLGk9cixhPXBuKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6TXQuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltpLGFdfSksTGYoZSxyLG4pLGUuZWRnZUNvdW50KyssYX1lbHNle3ZhciBzPXBuKCksbD1yLHU9cG4oKTtyZXR1cm4gcy5jaGVja3MucHVzaCh7dHlwZTpNdC5OT0RFX05FSUdIQk9SLG5vZGU6bCxuZWlnaGJvcjp1fSksTGYoZSxyLHMpLHV9fSwicG9wdWxhdGUiKX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuY2hpbGQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPXBuKCksaT1wbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTpNdC5DSElMRCxwYXJlbnQ6YSxjaGlsZDppfSksTGYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9cG4oKSxsPWVbZS5sZW5ndGgtMV0sdT1wbigpLGg9cG4oKSxmPXBuKCksZD1wbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOk10LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTpNdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTpNdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTpNdC5QQVJFTlQscGFyZW50OmQsY2hpbGQ6Zn0pLExmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPXBuKCksbT1wbigpLGc9W3t0eXBlOk10LlBBUkVOVCxwYXJlbnQ6cCxjaGlsZDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLmRlc2NlbmRhbnQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPXBuKCksaT1wbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTpNdC5ERVNDRU5EQU5ULGFuY2VzdG9yOmEsZGVzY2VuZGFudDppfSksTGYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9cG4oKSxsPWVbZS5sZW5ndGgtMV0sdT1wbigpLGg9cG4oKSxmPXBuKCksZD1wbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOk10LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTpNdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTpNdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTpNdC5BTkNFU1RPUixhbmNlc3RvcjpkLGRlc2NlbmRhbnQ6Zn0pLExmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPXBuKCksbT1wbigpLGc9W3t0eXBlOk10LkFOQ0VTVE9SLGFuY2VzdG9yOnAsZGVzY2VuZGFudDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6VnIuc3ViamVjdCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdCE9bnVsbCYmZS5jdXJyZW50U3ViamVjdCE9PXIpcmV0dXJuIG9uKCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIitlLnRvU3RyaW5nKCkrImAiKSwhMTtlLmN1cnJlbnRTdWJqZWN0PXI7dmFyIG49ZVtlLmxlbmd0aC0xXSxpPW4uY2hlY2tzWzBdLGE9aT09bnVsbD9udWxsOmkudHlwZTthPT09TXQuRElSRUNURURfRURHRT9pLnR5cGU9TXQuTk9ERV9UQVJHRVQ6YT09PU10LlVORElSRUNURURfRURHRSYmKGkudHlwZT1NdC5OT0RFX05FSUdIQk9SLGkubm9kZT1pLm5vZGVzWzFdLGkubmVpZ2hib3I9aS5ub2Rlc1swXSxpLm5vZGVzPW51bGwpfSwicG9wdWxhdGUiKX1dO0hQLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIrdC5yZWdleCl9KTtMWmU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbixpLGE9MDthPEhQLmxlbmd0aDthKyspe3ZhciBzPUhQW2FdLGw9cy5uYW1lLHU9ZS5tYXRjaChzLnJlZ2V4T2JqKTtpZih1IT1udWxsKXtuPXUscj1zLGk9bDt2YXIgaD11WzBdO2U9ZS5zdWJzdHJpbmcoaC5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjpyLG1hdGNoOm4sbmFtZTppLHJlbWFpbmluZzplfX0sImNvbnN1bWVFeHByIiksRFplPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXRjaCgvXlxzKy8pO2lmKHIpe3ZhciBuPXJbMF07ZT1lLnN1YnN0cmluZyhuLmxlbmd0aCl9cmV0dXJuIGV9LCJjb25zdW1lV2hpdGVzcGFjZSIpLE5aZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmlucHV0VGV4dD1lLGk9clswXT1wbigpO2ZvcihyLmxlbmd0aD0xLG49RFplKG4pOzspe3ZhciBhPUxaZShuKTtpZihhLmV4cHI9PW51bGwpcmV0dXJuIG9uKCJUaGUgc2VsZWN0b3IgYCIrZSsiYGlzIGludmFsaWQiKSwhMTt2YXIgcz1hLm1hdGNoLnNsaWNlKDEpLGw9YS5leHByLnBvcHVsYXRlKHIsaSxzKTtpZihsPT09ITEpcmV0dXJuITE7aWYobCE9bnVsbCYmKGk9bCksbj1hLnJlbWFpbmluZyxuLm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciB1PXJbci5sZW5ndGgtMV07ci5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHUuc3ViamVjdD1yLmN1cnJlbnRTdWJqZWN0KSx1LmVkZ2VDb3VudD1yLmVkZ2VDb3VudCx1LmNvbXBvdW5kQ291bnQ9ci5jb21wb3VuZENvdW50O2Zvcih2YXIgaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdO2lmKGYuY29tcG91bmRDb3VudD4wJiZmLmVkZ2VDb3VudD4wKXJldHVybiBvbigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoZi5lZGdlQ291bnQ+MSlyZXR1cm4gb24oIlRoZSBzZWxlY3RvciBgIitlKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Zi5lZGdlQ291bnQ9PT0xJiZvbigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSwicGFyc2UiKSxSWmU9byhmdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZT1vKGZ1bmN0aW9uKGYpe3JldHVybiBmPz8iIn0sImNsZWFuIikscj1vKGZ1bmN0aW9uKGYpe3JldHVybiBadChmKT8nIicrZisnIic6ZShmKX0sImNsZWFuVmFsIiksbj1vKGZ1bmN0aW9uKGYpe3JldHVybiIgIitmKyIgIn0sInNwYWNlIiksaT1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi50eXBlLG09Zi52YWx1ZTtzd2l0Y2gocCl7Y2FzZSBNdC5HUk9VUDp7dmFyIGc9ZShtKTtyZXR1cm4gZy5zdWJzdHJpbmcoMCxnLmxlbmd0aC0xKX1jYXNlIE10LkRBVEFfQ09NUEFSRTp7dmFyIHk9Zi5maWVsZCx2PWYub3BlcmF0b3I7cmV0dXJuIlsiK3krbihlKHYpKStyKG0pKyJdIn1jYXNlIE10LkRBVEFfQk9PTDp7dmFyIHg9Zi5vcGVyYXRvcixiPWYuZmllbGQ7cmV0dXJuIlsiK2UoeCkrYisiXSJ9Y2FzZSBNdC5EQVRBX0VYSVNUOnt2YXIgdz1mLmZpZWxkO3JldHVybiJbIit3KyJdIn1jYXNlIE10Lk1FVEFfQ09NUEFSRTp7dmFyIF89Zi5vcGVyYXRvcixUPWYuZmllbGQ7cmV0dXJuIltbIitUK24oZShfKSkrcihtKSsiXV0ifWNhc2UgTXQuU1RBVEU6cmV0dXJuIG07Y2FzZSBNdC5JRDpyZXR1cm4iIyIrbTtjYXNlIE10LkNMQVNTOnJldHVybiIuIittO2Nhc2UgTXQuUEFSRU5UOmNhc2UgTXQuQ0hJTEQ6cmV0dXJuIGEoZi5wYXJlbnQsZCkrbigiPiIpK2EoZi5jaGlsZCxkKTtjYXNlIE10LkFOQ0VTVE9SOmNhc2UgTXQuREVTQ0VOREFOVDpyZXR1cm4gYShmLmFuY2VzdG9yLGQpKyIgIithKGYuZGVzY2VuZGFudCxkKTtjYXNlIE10LkNPTVBPVU5EX1NQTElUOnt2YXIgRT1hKGYubGVmdCxkKSxMPWEoZi5zdWJqZWN0LGQpLFM9YShmLnJpZ2h0LGQpO3JldHVybiBFKyhFLmxlbmd0aD4wPyIgIjoiIikrTCtTfWNhc2UgTXQuVFJVRTpyZXR1cm4iIn19LCJjaGVja1RvU3RyaW5nIiksYT1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihwLG0sZyl7cmV0dXJuIHArKGQ9PT1mJiZnPT09MD8iJCI6IiIpK2kobSxkKX0sIiIpfSwicXVlcnlUb1N0cmluZyIpLHM9IiIsbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzW2xdO3MrPWEodSx1LnN1YmplY3QpLHRoaXMubGVuZ3RoPjEmJmw8dGhpcy5sZW5ndGgtMSYmKHMrPSIsICIpfXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU9cyxzfSwidG9TdHJpbmciKSxNWmU9e3BhcnNlOk5aZSx0b1N0cmluZzpSWmV9LERnZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhPVp0KGUpLHM9eHQoZSksbD1adChuKSx1LGgsZj0hMSxkPSExLHA9ITE7c3dpdGNoKHIuaW5kZXhPZigiISIpPj0wJiYocj1yLnJlcGxhY2UoIiEiLCIiKSxkPSEwKSxyLmluZGV4T2YoIkAiKT49MCYmKHI9ci5yZXBsYWNlKCJAIiwiIiksZj0hMCksKGF8fGx8fGYpJiYodT0hYSYmIXM/IiI6IiIrZSxoPSIiK24pLGYmJihlPXU9dS50b0xvd2VyQ2FzZSgpLG49aD1oLnRvTG93ZXJDYXNlKCkpLHIpe2Nhc2UiKj0iOmk9dS5pbmRleE9mKGgpPj0wO2JyZWFrO2Nhc2UiJD0iOmk9dS5pbmRleE9mKGgsdS5sZW5ndGgtaC5sZW5ndGgpPj0wO2JyZWFrO2Nhc2UiXj0iOmk9dS5pbmRleE9mKGgpPT09MDticmVhaztjYXNlIj0iOmk9ZT09PW47YnJlYWs7Y2FzZSI+IjpwPSEwLGk9ZT5uO2JyZWFrO2Nhc2UiPj0iOnA9ITAsaT1lPj1uO2JyZWFrO2Nhc2UiPCI6cD0hMCxpPWU8bjticmVhaztjYXNlIjw9IjpwPSEwLGk9ZTw9bjticmVhaztkZWZhdWx0Omk9ITE7YnJlYWt9cmV0dXJuIGQmJihlIT1udWxsfHwhcCkmJihpPSFpKSxpfSwidmFsQ21wIiksSVplPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2gocil7Y2FzZSI/IjpyZXR1cm4hIWU7Y2FzZSIhIjpyZXR1cm4hZTtjYXNlIl4iOnJldHVybiBlPT09dm9pZCAwfX0sImJvb2xDbXAiKSxPWmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXZvaWQgMH0sImV4aXN0Q21wIiksbUI9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRhdGEocil9LCJkYXRhIiksUFplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVtyXSgpfSwibWV0YSIpLHBpPVtdLCRuPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5jaGVja3MuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHBpW24udHlwZV0obixyKX0pfSwibWF0Y2hlcyIpO3BpW010LkdST1VQXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHI9PT0iKiJ8fHI9PT1lLmdyb3VwKCl9O3BpW010LlNUQVRFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIEFaZShyLGUpfTtwaVtNdC5JRF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmlkKCk9PT1yfTtwaVtNdC5DTEFTU109ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmhhc0NsYXNzKHIpfTtwaVtNdC5NRVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3IsaT10LnZhbHVlO3JldHVybiBEZ2UoUFplKGUsciksbixpKX07cGlbTXQuREFUQV9DT01QQVJFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yLGk9dC52YWx1ZTtyZXR1cm4gRGdlKG1CKGUsciksbixpKX07cGlbTXQuREFUQV9CT09MXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yO3JldHVybiBJWmUobUIoZSxyKSxuKX07cGlbTXQuREFUQV9FWElTVF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZpZWxkO3JldHVybiB0Lm9wZXJhdG9yLE9aZShtQihlLHIpKX07cGlbTXQuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubm9kZXNbMF0sbj10Lm5vZGVzWzFdLGk9ZS5zb3VyY2UoKSxhPWUudGFyZ2V0KCk7cmV0dXJuICRuKHIsaSkmJiRuKG4sYSl8fCRuKG4saSkmJiRuKHIsYSl9O3BpW010Lk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQubm9kZSxlKSYmZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiYkbih0Lm5laWdoYm9yLHIpfSl9O3BpW010LkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQuc291cmNlLGUuc291cmNlKCkpJiYkbih0LnRhcmdldCxlLnRhcmdldCgpKX07cGlbTXQuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQuc291cmNlLGUpJiZlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmJG4odC50YXJnZXQscil9KX07cGlbTXQuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQudGFyZ2V0LGUpJiZlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmJG4odC5zb3VyY2Uscil9KX07cGlbTXQuQ0hJTERdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQuY2hpbGQsZSkmJiRuKHQucGFyZW50LGUucGFyZW50KCkpfTtwaVtNdC5QQVJFTlRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQucGFyZW50LGUpJiZlLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gJG4odC5jaGlsZCxyKX0pfTtwaVtNdC5ERVNDRU5EQU5UXT1mdW5jdGlvbih0LGUpe3JldHVybiAkbih0LmRlc2NlbmRhbnQsZSkmJmUuYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gJG4odC5hbmNlc3RvcixyKX0pfTtwaVtNdC5BTkNFU1RPUl09ZnVuY3Rpb24odCxlKXtyZXR1cm4gJG4odC5hbmNlc3RvcixlKSYmZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuICRuKHQuZGVzY2VuZGFudCxyKX0pfTtwaVtNdC5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gJG4odC5zdWJqZWN0LGUpJiYkbih0LmxlZnQsZSkmJiRuKHQucmlnaHQsZSl9O3BpW010LlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3BpW010LkNPTExFQ1RJT05dPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gci5oYXMoZSl9O3BpW010LkZJTFRFUl09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiByKGUpfTtCWmU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHIubGVuZ3RoPT09MSYmclswXS5jaGVja3MubGVuZ3RoPT09MSYmclswXS5jaGVja3NbMF0udHlwZT09PU10LklEKXJldHVybiBlLmdldEVsZW1lbnRCeUlkKHJbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIG49byhmdW5jdGlvbihhKXtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZigkbihsLGEpKXJldHVybiEwfXJldHVybiExfSwic2VsZWN0b3JGdW5jdGlvbiIpO3JldHVybiByLnRleHQoKT09bnVsbCYmKG49byhmdW5jdGlvbigpe3JldHVybiEwfSwic2VsZWN0b3JGdW5jdGlvbiIpKSxlLmZpbHRlcihuKX0sImZpbHRlciIpLEZaZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigkbihpLGUpKXJldHVybiEwfXJldHVybiExfSwibWF0Y2hlcyIpLHpaZT17bWF0Y2hlczpGWmUsZmlsdGVyOkJaZX0sUGY9byhmdW5jdGlvbihlKXt0aGlzLmlucHV0VGV4dD1lLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsZT09bnVsbHx8WnQoZSkmJmUubWF0Y2goL15ccyokLyl8fCh3byhlKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOk10LkNPTExFQ1RJT04sdmFsdWU6ZS5jb2xsZWN0aW9uKCl9XX0pOm5pKGUpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6TXQuRklMVEVSLHZhbHVlOmV9XX0pOlp0KGUpP3RoaXMucGFyc2UoZSl8fCh0aGlzLmludmFsaWQ9ITApOmRpKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LCJTZWxlY3RvciIpLEJmPVBmLnByb3RvdHlwZTtbTVplLHpaZV0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaXIoQmYsdCl9KTtCZi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fTtCZi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofTtCZi5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0XX07QmYuc2FtZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXQuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT10LnRleHQoKX07QmYuYWRkUXVlcnk9ZnVuY3Rpb24odCl7dGhpc1t0aGlzLmxlbmd0aCsrXT10fTtCZi5zZWxlY3Rvcj1CZi50b1N0cmluZztSZj17YWxsQXJlOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFBmKGUpO3JldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLm1hdGNoZXMobil9KX0sImFsbEFyZSIpLGlzOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFBmKGUpO3JldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIHIubWF0Y2hlcyhuKX0pfSwiaXMiKSxzb21lOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9cj9lLmFwcGx5KHIsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcyk7aWYoaSlyZXR1cm4hMH1yZXR1cm4hMX0sInNvbWUiKSxldmVyeTpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXI/ZS5hcHBseShyLFt0aGlzW25dLG4sdGhpc10pOmUodGhpc1tuXSxuLHRoaXMpO2lmKCFpKXJldHVybiExfXJldHVybiEwfSwiZXZlcnkiKSxzYW1lOm8oZnVuY3Rpb24oZSl7aWYodGhpcz09PWUpcmV0dXJuITA7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLmxlbmd0aCxuPWUubGVuZ3RoO3JldHVybiByIT09bj8hMTpyPT09MT90aGlzWzBdPT09ZVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBlLmhhc0VsZW1lbnRXaXRoSWQoaS5pZCgpKX0pfSwic2FtZSIpLGFueVNhbWU6byhmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKSx0aGlzLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZChyLmlkKCkpfSl9LCJhbnlTYW1lIiksYWxsQXJlTmVpZ2hib3JzOm8oZnVuY3Rpb24oZSl7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLmhhc0VsZW1lbnRXaXRoSWQobi5pZCgpKX0pfSwiYWxsQXJlTmVpZ2hib3JzIiksY29udGFpbnM6byhmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXM7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzRWxlbWVudFdpdGhJZChuLmlkKCkpfSl9LCJjb250YWlucyIpfTtSZi5hbGxBcmVOZWlnaGJvdXJzPVJmLmFsbEFyZU5laWdoYm9ycztSZi5oYXM9UmYuY29udGFpbnM7UmYuZXF1YWw9UmYuZXF1YWxzPVJmLnNhbWU7aGw9byhmdW5jdGlvbihlLHIpe3JldHVybiBvKGZ1bmN0aW9uKGksYSxzLGwpe3ZhciB1PWksaD10aGlzLGY7aWYodT09bnVsbD9mPSIiOndvKHUpJiZ1Lmxlbmd0aD09PTEmJihmPXUuaWQoKSksaC5sZW5ndGg9PT0xJiZmKXt2YXIgZD1oWzBdLl9wcml2YXRlLHA9ZC50cmF2ZXJzYWxDYWNoZT1kLnRyYXZlcnNhbENhY2hlfHx7fSxtPXBbcl09cFtyXXx8W10sZz1qMChmKSx5PW1bZ107cmV0dXJuIHl8fChtW2ddPWUuY2FsbChoLGksYSxzLGwpKX1lbHNlIHJldHVybiBlLmNhbGwoaCxpLGEscyxsKX0sInRyYXZlcnNhbENhY2hlIil9LCJjYWNoZSIpLEUxPXtwYXJlbnQ6byhmdW5jdGlvbihlKXt2YXIgcj1bXTtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBuPXRoaXNbMF0uX3ByaXZhdGUucGFyZW50O2lmKG4pcmV0dXJuIG59Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXNbaV0scz1hLl9wcml2YXRlLnBhcmVudDtzJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKGUpfSwicGFyZW50IikscGFyZW50czpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMucGFyZW50KCk7bi5ub25lbXB0eSgpOyl7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ci5wdXNoKGEpfW49bi5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bihyLCEwKS5maWx0ZXIoZSl9LCJwYXJlbnRzIiksY29tbW9uQW5jZXN0b3JzOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXSxhPWkucGFyZW50cygpO3I9cnx8YSxyPXIuaW50ZXJzZWN0KGEpfXJldHVybiByLmZpbHRlcihlKX0sImNvbW1vbkFuY2VzdG9ycyIpLG9ycGhhbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNPcnBoYW4oKX0pLmZpbHRlcihlKX0sIm9ycGhhbnMiKSxub25vcnBoYW5zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzQ2hpbGQoKX0pLmZpbHRlcihlKX0sIm5vbm9ycGhhbnMiKSxjaGlsZHJlbjpobChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWZvcih2YXIgbj10aGlzW3JdLGk9bi5fcHJpdmF0ZS5jaGlsZHJlbixhPTA7YTxpLmxlbmd0aDthKyspZS5wdXNoKGlbYV0pO3JldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sImNoaWxkcmVuIiksc2libGluZ3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZSl9LCJzaWJsaW5ncyIpLGlzUGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoIT09MH0sImlzUGFyZW50IiksaXNDaGlsZGxlc3M6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSwiaXNDaGlsZGxlc3MiKSxpc0NoaWxkOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50IT1udWxsfSwiaXNDaGlsZCIpLGlzT3JwaGFuOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50PT1udWxsfSwiaXNPcnBoYW4iKSxkZXNjZW5kYW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPVtdO2Z1bmN0aW9uIG4oaSl7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07ci5wdXNoKHMpLHMuY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZuKHMuY2hpbGRyZW4oKSl9fXJldHVybiBvKG4sImFkZCIpLG4odGhpcy5jaGlsZHJlbigpKSx0aGlzLnNwYXduKHIsITApLmZpbHRlcihlKX0sImRlc2NlbmRhbnRzIil9O28oZ0IsImZvckVhY2hDb21wb3VuZCIpO28oTmdlLCJhZGRDaGlsZHJlbiIpO0UxLmZvckVhY2hEb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gZ0IodGhpcyx0LGUsTmdlKX07byhSZ2UsImFkZFBhcmVudCIpO0UxLmZvckVhY2hVcD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIGdCKHRoaXMsdCxlLFJnZSl9O28oR1plLCJhZGRQYXJlbnRBbmRDaGlsZHJlbiIpO0UxLmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBnQih0aGlzLHQsZSxHWmUpfTtFMS5hbmNlc3RvcnM9RTEucGFyZW50cztjYj1NZ2U9e2RhdGE6c24uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOnNuLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6c24uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpzbi5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLl9wcml2YXRlLmRhdGEuaWR9LCJpZCIpfTtjYi5hdHRyPWNiLmRhdGE7Y2IucmVtb3ZlQXR0cj1jYi5yZW1vdmVEYXRhOyRaZT1NZ2UsWTY9e307byhSUCwiZGVmaW5lRGVncmVlRnVuY3Rpb24iKTtpcihZNix7ZGVncmVlOlJQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZShlLnRhcmdldCgpKT8yOjF9KSxpbmRlZ3JlZTpSUChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRhcmdldCgpLnNhbWUodCk/MTowfSksb3V0ZGVncmVlOlJQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZSh0KT8xOjB9KX0pO28odTEsImRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uIik7aXIoWTYse21pbkRlZ3JlZTp1MSgiZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhEZWdyZWU6dTEoImRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSksbWluSW5kZWdyZWU6dTEoImluZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhJbmRlZ3JlZTp1MSgiaW5kZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0pLG1pbk91dGRlZ3JlZTp1MSgib3V0ZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhPdXRkZWdyZWU6dTEoIm91dGRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSl9KTtpcihZNix7dG90YWxEZWdyZWU6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRoaXMubm9kZXMoKSxpPTA7aTxuLmxlbmd0aDtpKyspcis9bltpXS5kZWdyZWUoZSk7cmV0dXJuIHJ9LCJ0b3RhbERlZ3JlZSIpfSk7T2dlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKCFhLmxvY2tlZCgpKXt2YXIgcz1hLl9wcml2YXRlLnBvc2l0aW9uLGw9e3g6ci54IT1udWxsP3IueC1zLng6MCx5OnIueSE9bnVsbD9yLnktcy55OjB9O2EuaXNQYXJlbnQoKSYmIShsLng9PT0wJiZsLnk9PT0wKSYmYS5jaGlsZHJlbigpLnNoaWZ0KGwsbiksYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSwiYmVmb3JlUG9zaXRpb25TZXQiKSxpbWU9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6byhmdW5jdGlvbihlKXtlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihlLHIpe09nZShlLHIsITEpfSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX0sImNhblNldCIpfTtabD1JZ2U9e3Bvc2l0aW9uOnNuLmRhdGEoaW1lKSxzaWxlbnRQb3NpdGlvbjpzbi5kYXRhKGlyKHt9LGltZSx7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0Om8oZnVuY3Rpb24oZSxyKXtPZ2UoZSxyLCEwKX0sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oZSl7ZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX0sIm9uU2V0Iil9KSkscG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyKXtpZihVcihlKSlyP3RoaXMuc2lsZW50UG9zaXRpb24oZSk6dGhpcy5wb3NpdGlvbihlKTtlbHNlIGlmKG5pKGUpKXt2YXIgbj1lLGk9dGhpcy5jeSgpO2kuc3RhcnRCYXRjaCgpO2Zvcih2YXIgYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdLGw9dm9pZCAwOyhsPW4ocyxhKSkmJihyP3Muc2lsZW50UG9zaXRpb24obCk6cy5wb3NpdGlvbihsKSl9aS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwicG9zaXRpb25zIiksc2lsZW50UG9zaXRpb25zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGUsITApfSwic2lsZW50UG9zaXRpb25zIiksc2hpZnQ6byhmdW5jdGlvbihlLHIsbil7dmFyIGk7aWYoVXIoZSk/KGk9e3g6eHQoZS54KT9lLng6MCx5Onh0KGUueSk/ZS55OjB9LG49cik6WnQoZSkmJnh0KHIpJiYoaT17eDowLHk6MH0saVtlXT1yKSxpIT1udWxsKXt2YXIgYT10aGlzLmN5KCk7YS5zdGFydEJhdGNoKCk7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXNbc107aWYoIShhLmhhc0NvbXBvdW5kTm9kZXMoKSYmbC5pc0NoaWxkKCkmJmwuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciB1PWwucG9zaXRpb24oKSxoPXt4OnUueCtpLngseTp1LnkraS55fTtuP2wuc2lsZW50UG9zaXRpb24oaCk6bC5wb3NpdGlvbihoKX19YS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwic2hpZnQiKSxzaWxlbnRTaGlmdDpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFVyKGUpP3RoaXMuc2hpZnQoZSwhMCk6WnQoZSkmJnh0KHIpJiZ0aGlzLnNoaWZ0KGUsciwhMCksdGhpc30sInNpbGVudFNoaWZ0IikscmVuZGVyZWRQb3NpdGlvbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpc1swXSxpPXRoaXMuY3koKSxhPWkuem9vbSgpLHM9aS5wYW4oKSxsPVVyKGUpP2U6dm9pZCAwLHU9bCE9PXZvaWQgMHx8ciE9PXZvaWQgMCYmWnQoZSk7aWYobiYmbi5pc05vZGUoKSlpZih1KWZvcih2YXIgaD0wO2g8dGhpcy5sZW5ndGg7aCsrKXt2YXIgZj10aGlzW2hdO3IhPT12b2lkIDA/Zi5wb3NpdGlvbihlLChyLXNbZV0pL2EpOmwhPT12b2lkIDAmJmYucG9zaXRpb24ob2dlKGwsYSxzKSl9ZWxzZXt2YXIgZD1uLnBvc2l0aW9uKCk7cmV0dXJuIGw9JDYoZCxhLHMpLGU9PT12b2lkIDA/bDpsW2VdfWVsc2UgaWYoIXUpcmV0dXJuO3JldHVybiB0aGlzfSwicmVuZGVyZWRQb3NpdGlvbiIpLHJlbGF0aXZlUG9zaXRpb246byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXNbMF0saT10aGlzLmN5KCksYT1VcihlKT9lOnZvaWQgMCxzPWEhPT12b2lkIDB8fHIhPT12b2lkIDAmJlp0KGUpLGw9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYobiYmbi5pc05vZGUoKSlpZihzKWZvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgaD10aGlzW3VdLGY9bD9oLnBhcmVudCgpOm51bGwsZD1mJiZmLmxlbmd0aD4wLHA9ZDtkJiYoZj1mWzBdKTt2YXIgbT1wP2YucG9zaXRpb24oKTp7eDowLHk6MH07ciE9PXZvaWQgMD9oLnBvc2l0aW9uKGUscittW2VdKTphIT09dm9pZCAwJiZoLnBvc2l0aW9uKHt4OmEueCttLngseTphLnkrbS55fSl9ZWxzZXt2YXIgZz1uLnBvc2l0aW9uKCkseT1sP24ucGFyZW50KCk6bnVsbCx2PXkmJnkubGVuZ3RoPjAseD12O3YmJih5PXlbMF0pO3ZhciBiPXg/eS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gYT17eDpnLngtYi54LHk6Zy55LWIueX0sZT09PXZvaWQgMD9hOmFbZV19ZWxzZSBpZighcylyZXR1cm47cmV0dXJuIHRoaXN9LCJyZWxhdGl2ZVBvc2l0aW9uIil9O1psLm1vZGVsUG9zaXRpb249WmwucG9pbnQ9WmwucG9zaXRpb247WmwubW9kZWxQb3NpdGlvbnM9WmwucG9pbnRzPVpsLnBvc2l0aW9ucztabC5yZW5kZXJlZFBvaW50PVpsLnJlbmRlcmVkUG9zaXRpb247WmwucmVsYXRpdmVQb2ludD1abC5yZWxhdGl2ZVBvc2l0aW9uO1ZaZT1JZ2U7YjE9emY9e307emYucmVuZGVyZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJvdW5kaW5nQm94KHQpLHI9dGhpcy5jeSgpLG49ci56b29tKCksaT1yLnBhbigpLGE9ZS54MSpuK2kueCxzPWUueDIqbitpLngsbD1lLnkxKm4raS55LHU9ZS55MipuK2kueTtyZXR1cm57eDE6YSx4MjpzLHkxOmwseTI6dSx3OnMtYSxoOnUtbH19O3pmLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxlPXRoaXMuY3koKTtyZXR1cm4hZS5zdHlsZUVuYWJsZWQoKXx8IWUuaGFzQ29tcG91bmROb2RlcygpP3RoaXM6KHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uKHIpe2lmKHIuaXNQYXJlbnQoKSl7dmFyIG49ci5fcHJpdmF0ZTtuLmNvbXBvdW5kQm91bmRzQ2xlYW49ITEsbi5iYkNhY2hlPW51bGwsdHx8ci5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKX19KSx0aGlzKX07emYudXBkYXRlQ29tcG91bmRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCl8fCFlLmhhc0NvbXBvdW5kTm9kZXMoKSlyZXR1cm4gdGhpcztpZighdCYmZS5iYXRjaGluZygpKXJldHVybiB0aGlzO2Z1bmN0aW9uIHIocyl7aWYoIXMuaXNQYXJlbnQoKSlyZXR1cm47dmFyIGw9cy5fcHJpdmF0ZSx1PXMuY2hpbGRyZW4oKSxoPXMucHN0eWxlKCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIpLnZhbHVlPT09ImluY2x1ZGUiLGY9e3dpZHRoOnt2YWw6cy5wc3R5bGUoIm1pbi13aWR0aCIpLnBmVmFsdWUsbGVmdDpzLnBzdHlsZSgibWluLXdpZHRoLWJpYXMtbGVmdCIpLHJpZ2h0OnMucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1yaWdodCIpfSxoZWlnaHQ6e3ZhbDpzLnBzdHlsZSgibWluLWhlaWdodCIpLnBmVmFsdWUsdG9wOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtdG9wIiksYm90dG9tOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIil9fSxkPXUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6aCxpbmNsdWRlT3ZlcmxheXM6ITEsdXNlQ2FjaGU6ITF9KSxwPWwucG9zaXRpb247KGQudz09PTB8fGQuaD09PTApJiYoZD17dzpzLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6cy5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LGQueDE9cC54LWQudy8yLGQueDI9cC54K2Qudy8yLGQueTE9cC55LWQuaC8yLGQueTI9cC55K2QuaC8yKTtmdW5jdGlvbiBtKEEsSSxEKXt2YXIgaz0wLFI9MCxDPUkrRDtyZXR1cm4gQT4wJiZDPjAmJihrPUkvQypBLFI9RC9DKkEpLHtiaWFzRGlmZjprLGJpYXNDb21wbGVtZW50RGlmZjpSfX1vKG0sImNvbXB1dGVCaWFzVmFsdWVzIik7ZnVuY3Rpb24gZyhBLEksRCxrKXtpZihELnVuaXRzPT09IiUiKXN3aXRjaChrKXtjYXNlIndpZHRoIjpyZXR1cm4gQT4wP0QucGZWYWx1ZSpBOjA7Y2FzZSJoZWlnaHQiOnJldHVybiBJPjA/RC5wZlZhbHVlKkk6MDtjYXNlImF2ZXJhZ2UiOnJldHVybiBBPjAmJkk+MD9ELnBmVmFsdWUqKEErSSkvMjowO2Nhc2UibWluIjpyZXR1cm4gQT4wJiZJPjA/QT5JP0QucGZWYWx1ZSpJOkQucGZWYWx1ZSpBOjA7Y2FzZSJtYXgiOnJldHVybiBBPjAmJkk+MD9BPkk/RC5wZlZhbHVlKkE6RC5wZlZhbHVlKkk6MDtkZWZhdWx0OnJldHVybiAwfWVsc2UgcmV0dXJuIEQudW5pdHM9PT0icHgiP0QucGZWYWx1ZTowfW8oZywiY29tcHV0ZVBhZGRpbmdWYWx1ZXMiKTt2YXIgeT1mLndpZHRoLmxlZnQudmFsdWU7Zi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmZi53aWR0aC52YWw+MCYmKHk9eSoxMDAvZi53aWR0aC52YWwpO3ZhciB2PWYud2lkdGgucmlnaHQudmFsdWU7Zi53aWR0aC5yaWdodC51bml0cz09PSJweCImJmYud2lkdGgudmFsPjAmJih2PXYqMTAwL2Yud2lkdGgudmFsKTt2YXIgeD1mLmhlaWdodC50b3AudmFsdWU7Zi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmZi5oZWlnaHQudmFsPjAmJih4PXgqMTAwL2YuaGVpZ2h0LnZhbCk7dmFyIGI9Zi5oZWlnaHQuYm90dG9tLnZhbHVlO2YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJmYuaGVpZ2h0LnZhbD4wJiYoYj1iKjEwMC9mLmhlaWdodC52YWwpO3ZhciB3PW0oZi53aWR0aC52YWwtZC53LHksdiksXz13LmJpYXNEaWZmLFQ9dy5iaWFzQ29tcGxlbWVudERpZmYsRT1tKGYuaGVpZ2h0LnZhbC1kLmgseCxiKSxMPUUuYmlhc0RpZmYsUz1FLmJpYXNDb21wbGVtZW50RGlmZjtsLmF1dG9QYWRkaW5nPWcoZC53LGQuaCxzLnBzdHlsZSgicGFkZGluZyIpLHMucHN0eWxlKCJwYWRkaW5nLXJlbGF0aXZlLXRvIikudmFsdWUpLGwuYXV0b1dpZHRoPU1hdGgubWF4KGQudyxmLndpZHRoLnZhbCkscC54PSgtXytkLngxK2QueDIrVCkvMixsLmF1dG9IZWlnaHQ9TWF0aC5tYXgoZC5oLGYuaGVpZ2h0LnZhbCkscC55PSgtTCtkLnkxK2QueTIrUykvMn1vKHIsInVwZGF0ZSIpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9aS5fcHJpdmF0ZTsoIWEuY29tcG91bmRCb3VuZHNDbGVhbnx8dCkmJihyKGkpLGUuYmF0Y2hpbmcoKXx8KGEuY29tcG91bmRCb3VuZHNDbGVhbj0hMCkpfXJldHVybiB0aGlzfTt1bD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09MS8wfHxlPT09LTEvMD8wOmV9LCJub25pbmYiKSxLbD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aS1yPT09MHx8YS1uPT09MHx8cj09bnVsbHx8bj09bnVsbHx8aT09bnVsbHx8YT09bnVsbHx8KGUueDE9cjxlLngxP3I6ZS54MSxlLngyPWk+ZS54Mj9pOmUueDIsZS55MT1uPGUueTE/bjplLnkxLGUueTI9YT5lLnkyP2E6ZS55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEpfSwidXBkYXRlQm91bmRzIiksSDA9byhmdW5jdGlvbihlLHIpe3JldHVybiByPT1udWxsP2U6S2woZSxyLngxLHIueTEsci54MixyLnkyKX0sInVwZGF0ZUJvdW5kc0Zyb21Cb3giKSxZeD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gUWwoZSxyLG4pfSwicHJlZml4ZWRQcm9wZXJ0eSIpLGg2PW8oZnVuY3Rpb24oZSxyLG4pe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIGk9ci5fcHJpdmF0ZSxhPWkucnN0eWxlLHM9YS5hcnJvd1dpZHRoLzIsbD1yLnBzdHlsZShuKyItYXJyb3ctc2hhcGUiKS52YWx1ZSx1LGg7aWYobCE9PSJub25lIil7bj09PSJzb3VyY2UiPyh1PWEuc3JjWCxoPWEuc3JjWSk6bj09PSJ0YXJnZXQiPyh1PWEudGd0WCxoPWEudGd0WSk6KHU9YS5taWRYLGg9YS5taWRZKTt2YXIgZj1pLmFycm93Qm91bmRzPWkuYXJyb3dCb3VuZHN8fHt9LGQ9ZltuXT1mW25dfHx7fTtkLngxPXUtcyxkLnkxPWgtcyxkLngyPXUrcyxkLnkyPWgrcyxkLnc9ZC54Mi1kLngxLGQuaD1kLnkyLWQueTEseTYoZCwxKSxLbChlLGQueDEsZC55MSxkLngyLGQueTIpfX19LCJ1cGRhdGVCb3VuZHNGcm9tQXJyb3ciKSxNUD1vKGZ1bmN0aW9uKGUscixuKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBpO24/aT1uKyItIjppPSIiO3ZhciBhPXIuX3ByaXZhdGUscz1hLnJzdHlsZSxsPXIucHN0eWxlKGkrImxhYmVsIikuc3RyVmFsdWU7aWYobCl7dmFyIHU9ci5wc3R5bGUoInRleHQtaGFsaWduIiksaD1yLnBzdHlsZSgidGV4dC12YWxpZ24iKSxmPVl4KHMsImxhYmVsV2lkdGgiLG4pLGQ9WXgocywibGFiZWxIZWlnaHQiLG4pLHA9WXgocywibGFiZWxYIixuKSxtPVl4KHMsImxhYmVsWSIsbiksZz1yLnBzdHlsZShpKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx5PXIucHN0eWxlKGkrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHY9ci5pc0VkZ2UoKSx4PXIucHN0eWxlKGkrInRleHQtcm90YXRpb24iKSxiPXIucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLHc9ci5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxfPXcvMixUPXIucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsRT0yLEw9ZCxTPWYsQT1TLzIsST1MLzIsRCxrLFIsQztpZih2KUQ9cC1BLGs9cCtBLFI9bS1JLEM9bStJO2Vsc2V7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6RD1wLVMsaz1wO2JyZWFrO2Nhc2UiY2VudGVyIjpEPXAtQSxrPXArQTticmVhaztjYXNlInJpZ2h0IjpEPXAsaz1wK1M7YnJlYWt9c3dpdGNoKGgudmFsdWUpe2Nhc2UidG9wIjpSPW0tTCxDPW07YnJlYWs7Y2FzZSJjZW50ZXIiOlI9bS1JLEM9bStJO2JyZWFrO2Nhc2UiYm90dG9tIjpSPW0sQz1tK0w7YnJlYWt9fUQrPWctTWF0aC5tYXgoYixfKS1ULUUsays9ZytNYXRoLm1heChiLF8pK1QrRSxSKz15LU1hdGgubWF4KGIsXyktVC1FLEMrPXkrTWF0aC5tYXgoYixfKStUK0U7dmFyIE89bnx8Im1haW4iLE49YS5sYWJlbEJvdW5kcyxQPU5bT109TltPXXx8e307UC54MT1ELFAueTE9UixQLngyPWssUC55Mj1DLFAudz1rLUQsUC5oPUMtUjt2YXIgRj12JiZ4LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLEI9eC5wZlZhbHVlIT1udWxsJiZ4LnBmVmFsdWUhPT0wO2lmKEZ8fEIpe3ZhciBHPUY/WXgoYS5yc3R5bGUsImxhYmVsQW5nbGUiLG4pOngucGZWYWx1ZSx6PU1hdGguY29zKEcpLFc9TWF0aC5zaW4oRyksWj0oRCtrKS8yLGo9KFIrQykvMjtpZighdil7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6Wj1rO2JyZWFrO2Nhc2UicmlnaHQiOlo9RDticmVha31zd2l0Y2goaC52YWx1ZSl7Y2FzZSJ0b3AiOmo9QzticmVhaztjYXNlImJvdHRvbSI6aj1SO2JyZWFrfX12YXIgb2U9byhmdW5jdGlvbih1ZSxjZSl7cmV0dXJuIHVlPXVlLVosY2U9Y2Utaix7eDp1ZSp6LWNlKlcrWix5OnVlKlcrY2UqeitqfX0sInJvdGF0ZSIpLEs9b2UoRCxSKSxlZT1vZShELEMpLEo9b2UoayxSKSxIPW9lKGssQyk7RD1NYXRoLm1pbihLLngsZWUueCxKLngsSC54KSxrPU1hdGgubWF4KEsueCxlZS54LEoueCxILngpLFI9TWF0aC5taW4oSy55LGVlLnksSi55LEgueSksQz1NYXRoLm1heChLLnksZWUueSxKLnksSC55KX12YXIgcT1PKyJSb3QiLFE9TltxXT1OW3FdfHx7fTtRLngxPUQsUS55MT1SLFEueDI9ayxRLnkyPUMsUS53PWstRCxRLmg9Qy1SLEtsKGUsRCxSLGssQyksS2woYS5sYWJlbEJvdW5kcy5hbGwsRCxSLGssQyl9cmV0dXJuIGV9fSwidXBkYXRlQm91bmRzRnJvbUxhYmVsIiksVVplPW8oZnVuY3Rpb24oZSxyKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBuPXIucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSxpPXIucHN0eWxlKCJvdXRsaW5lLXdpZHRoIikudmFsdWU7aWYobj4wJiZpPjApe3ZhciBhPXIucHN0eWxlKCJvdXRsaW5lLW9mZnNldCIpLnZhbHVlLHM9ci5wc3R5bGUoInNoYXBlIikudmFsdWUsbD1pK2EsdT0oZS53K2wqMikvZS53LGg9KGUuaCtsKjIpL2UuaCxmPTAsZD0wO1siZGlhbW9uZCIsInBlbnRhZ29uIiwicm91bmQtdHJpYW5nbGUiXS5pbmNsdWRlcyhzKT8odT0oZS53K2wqMi40KS9lLncsZD0tbC8zLjYpOlsiY29uY2F2ZS1oZXhhZ29uIiwicmhvbWJvaWQiLCJyaWdodC1yaG9tYm9pZCJdLmluY2x1ZGVzKHMpP3U9KGUudytsKjIuNCkvZS53OnM9PT0ic3RhciI/KHU9KGUudytsKjIuOCkvZS53LGg9KGUuaCtsKjIuNikvZS5oLGQ9LWwvMy44KTpzPT09InRyaWFuZ2xlIj8odT0oZS53K2wqMi44KS9lLncsaD0oZS5oK2wqMi40KS9lLmgsZD0tbC8xLjQpOnM9PT0idmVlIiYmKHU9KGUudytsKjQuNCkvZS53LGg9KGUuaCtsKjMuOCkvZS5oLGQ9LWwqLjUpO3ZhciBwPWUuaCpoLWUuaCxtPWUudyp1LWUudztpZih2NihlLFtNYXRoLmNlaWwocC8yKSxNYXRoLmNlaWwobS8yKV0pLGYhPTB8fGQhPT0wKXt2YXIgZz11amUoZSxmLGQpO2NnZShlLGcpfX19fSwidXBkYXRlQm91bmRzRnJvbU91dGxpbmUiKSxIWmU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUuY3ksaT1uLnN0eWxlRW5hYmxlZCgpLGE9bi5oZWFkbGVzcygpLHM9S3MoKSxsPWUuX3ByaXZhdGUsdT1lLmlzTm9kZSgpLGg9ZS5pc0VkZ2UoKSxmLGQscCxtLGcseSx2PWwucnN0eWxlLHg9dSYmaT9lLnBzdHlsZSgiYm91bmRzLWV4cGFuc2lvbiIpLnBmVmFsdWU6WzBdLGI9byhmdW5jdGlvbihOZSl7cmV0dXJuIE5lLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSwiaXNEaXNwbGF5ZWQiKSx3PSFpfHxiKGUpJiYoIWh8fGIoZS5zb3VyY2UoKSkmJmIoZS50YXJnZXQoKSkpO2lmKHcpe3ZhciBfPTAsVD0wO2kmJnIuaW5jbHVkZU92ZXJsYXlzJiYoXz1lLnBzdHlsZSgib3ZlcmxheS1vcGFjaXR5IikudmFsdWUsXyE9PTAmJihUPWUucHN0eWxlKCJvdmVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBFPTAsTD0wO2kmJnIuaW5jbHVkZVVuZGVybGF5cyYmKEU9ZS5wc3R5bGUoInVuZGVybGF5LW9wYWNpdHkiKS52YWx1ZSxFIT09MCYmKEw9ZS5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBTPU1hdGgubWF4KFQsTCksQT0wLEk9MDtpZihpJiYoQT1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEk9QS8yKSx1JiZyLmluY2x1ZGVOb2Rlcyl7dmFyIEQ9ZS5wb3NpdGlvbigpO2c9RC54LHk9RC55O3ZhciBrPWUub3V0ZXJXaWR0aCgpLFI9ay8yLEM9ZS5vdXRlckhlaWdodCgpLE89Qy8yO2Y9Zy1SLGQ9ZytSLHA9eS1PLG09eStPLEtsKHMsZixwLGQsbSksaSYmci5pbmNsdWRlT3V0bGluZXMmJlVaZShzLGUpfWVsc2UgaWYoaCYmci5pbmNsdWRlRWRnZXMpaWYoaSYmIWEpe3ZhciBOPWUucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnN0clZhbHVlO2lmKGY9TWF0aC5taW4odi5zcmNYLHYubWlkWCx2LnRndFgpLGQ9TWF0aC5tYXgodi5zcmNYLHYubWlkWCx2LnRndFgpLHA9TWF0aC5taW4odi5zcmNZLHYubWlkWSx2LnRndFkpLG09TWF0aC5tYXgodi5zcmNZLHYubWlkWSx2LnRndFkpLGYtPUksZCs9SSxwLT1JLG0rPUksS2wocyxmLHAsZCxtKSxOPT09ImhheXN0YWNrIil7dmFyIFA9di5oYXlzdGFja1B0cztpZihQJiZQLmxlbmd0aD09PTIpe2lmKGY9UFswXS54LHA9UFswXS55LGQ9UFsxXS54LG09UFsxXS55LGY+ZCl7dmFyIEY9ZjtmPWQsZD1GfWlmKHA+bSl7dmFyIEI9cDtwPW0sbT1CfUtsKHMsZi1JLHAtSSxkK0ksbStJKX19ZWxzZSBpZihOPT09ImJlemllciJ8fE49PT0idW5idW5kbGVkLWJlemllciJ8fE4uZW5kc1dpdGgoInNlZ21lbnRzIil8fE4uZW5kc1dpdGgoInRheGkiKSl7dmFyIEc7c3dpdGNoKE4pe2Nhc2UiYmV6aWVyIjpjYXNlInVuYnVuZGxlZC1iZXppZXIiOkc9di5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpjYXNlInJvdW5kLXNlZ21lbnRzIjpjYXNlInJvdW5kLXRheGkiOkc9di5saW5lUHRzO2JyZWFrfWlmKEchPW51bGwpZm9yKHZhciB6PTA7ejxHLmxlbmd0aDt6Kyspe3ZhciBXPUdbel07Zj1XLngtSSxkPVcueCtJLHA9Vy55LUksbT1XLnkrSSxLbChzLGYscCxkLG0pfX19ZWxzZXt2YXIgWj1lLnNvdXJjZSgpLGo9Wi5wb3NpdGlvbigpLG9lPWUudGFyZ2V0KCksSz1vZS5wb3NpdGlvbigpO2lmKGY9ai54LGQ9Sy54LHA9ai55LG09Sy55LGY+ZCl7dmFyIGVlPWY7Zj1kLGQ9ZWV9aWYocD5tKXt2YXIgSj1wO3A9bSxtPUp9Zi09SSxkKz1JLHAtPUksbSs9SSxLbChzLGYscCxkLG0pfWlmKGkmJnIuaW5jbHVkZUVkZ2VzJiZoJiYoaDYocyxlLCJtaWQtc291cmNlIiksaDYocyxlLCJtaWQtdGFyZ2V0IiksaDYocyxlLCJzb3VyY2UiKSxoNihzLGUsInRhcmdldCIpKSxpKXt2YXIgSD1lLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKEgpe3ZhciBxPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsUT1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlO0tsKHMscy54MStxLHMueTErUSxzLngyK3Escy55MitRKX19dmFyIGFlPWwuYm9keUJvdW5kcz1sLmJvZHlCb3VuZHN8fHt9O0JwZShhZSxzKSx2NihhZSx4KSx5NihhZSwxKSxpJiYoZj1zLngxLGQ9cy54MixwPXMueTEsbT1zLnkyLEtsKHMsZi1TLHAtUyxkK1MsbStTKSk7dmFyIHVlPWwub3ZlcmxheUJvdW5kcz1sLm92ZXJsYXlCb3VuZHN8fHt9O0JwZSh1ZSxzKSx2Nih1ZSx4KSx5Nih1ZSwxKTt2YXIgY2U9bC5sYWJlbEJvdW5kcz1sLmxhYmVsQm91bmRzfHx7fTtjZS5hbGwhPW51bGw/Y2plKGNlLmFsbCk6Y2UuYWxsPUtzKCksaSYmci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmTVAocyxlLG51bGwpLGgmJihyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJk1QKHMsZSwic291cmNlIiksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZNUChzLGUsInRhcmdldCIpKSl9cmV0dXJuIHMueDE9dWwocy54MSkscy55MT11bChzLnkxKSxzLngyPXVsKHMueDIpLHMueTI9dWwocy55Mikscy53PXVsKHMueDItcy54MSkscy5oPXVsKHMueTItcy55MSkscy53PjAmJnMuaD4wJiZ3JiYodjYocyx4KSx5NihzLDEpKSxzfSwiYm91bmRpbmdCb3hJbXBsIiksUGdlPW8oZnVuY3Rpb24oZSl7dmFyIHI9MCxuPW8oZnVuY3Rpb24ocyl7cmV0dXJuKHM/MTowKTw8cisrfSwidGYiKSxpPTA7cmV0dXJuIGkrPW4oZS5pbmN1ZGVOb2RlcyksaSs9bihlLmluY2x1ZGVFZGdlcyksaSs9bihlLmluY2x1ZGVMYWJlbHMpLGkrPW4oZS5pbmNsdWRlTWFpbkxhYmVscyksaSs9bihlLmluY2x1ZGVTb3VyY2VMYWJlbHMpLGkrPW4oZS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxpKz1uKGUuaW5jbHVkZU92ZXJsYXlzKSxpKz1uKGUuaW5jbHVkZU91dGxpbmVzKSxpfSwiZ2V0S2V5IiksQmdlPW8oZnVuY3Rpb24oZSl7aWYoZS5pc0VkZ2UoKSl7dmFyIHI9ZS5zb3VyY2UoKS5wb3NpdGlvbigpLG49ZS50YXJnZXQoKS5wb3NpdGlvbigpLGk9byhmdW5jdGlvbihzKXtyZXR1cm4gTWF0aC5yb3VuZChzKX0sInIiKTtyZXR1cm4gRFhlKFtpKHIueCksaShyLnkpLGkobi54KSxpKG4ueSldKX1lbHNlIHJldHVybiAwfSwiZ2V0Qm91bmRpbmdCb3hQb3NLZXkiKSxhbWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUsaSxhPWUuaXNFZGdlKCkscz1yPT1udWxsP3NtZTpQZ2UociksbD1zPT09c21lLHU9QmdlKGUpLGg9bi5iYkNhY2hlUG9zS2V5PT09dSxmPXIudXNlQ2FjaGUmJmgsZD1vKGZ1bmN0aW9uKHkpe3JldHVybiB5Ll9wcml2YXRlLmJiQ2FjaGU9PW51bGx8fHkuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sImlzRGlydHkiKSxwPSFmfHxkKGUpfHxhJiZkKGUuc291cmNlKCkpfHxkKGUudGFyZ2V0KCkpO2lmKHA/KGh8fGUucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGYpLGk9SFplKGUsdWIpLG4uYmJDYWNoZT1pLG4uYmJDYWNoZVBvc0tleT11KTppPW4uYmJDYWNoZSwhbCl7dmFyIG09ZS5pc05vZGUoKTtpPUtzKCksKHIuaW5jbHVkZU5vZGVzJiZtfHxyLmluY2x1ZGVFZGdlcyYmIW0pJiYoci5pbmNsdWRlT3ZlcmxheXM/SDAoaSxuLm92ZXJsYXlCb3VuZHMpOkgwKGksbi5ib2R5Qm91bmRzKSksci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmKCFhfHxyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJnIuaW5jbHVkZVRhcmdldExhYmVscyk/SDAoaSxuLmxhYmVsQm91bmRzLmFsbCk6KHIuaW5jbHVkZU1haW5MYWJlbHMmJkgwKGksbi5sYWJlbEJvdW5kcy5tYWluUm90KSxyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJkgwKGksbi5sYWJlbEJvdW5kcy5zb3VyY2VSb3QpLHIuaW5jbHVkZVRhcmdldExhYmVscyYmSDAoaSxuLmxhYmVsQm91bmRzLnRhcmdldFJvdCkpKSxpLnc9aS54Mi1pLngxLGkuaD1pLnkyLWkueTF9cmV0dXJuIGl9LCJjYWNoZWRCb3VuZGluZ0JveEltcGwiKSx1Yj17aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMCxpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVNYWluTGFiZWxzOiEwLGluY2x1ZGVTb3VyY2VMYWJlbHM6ITAsaW5jbHVkZVRhcmdldExhYmVsczohMCxpbmNsdWRlT3ZlcmxheXM6ITAsaW5jbHVkZVVuZGVybGF5czohMCxpbmNsdWRlT3V0bGluZXM6ITAsdXNlQ2FjaGU6ITB9LHNtZT1QZ2UodWIpLG9tZT1fYSh1Yik7emYuYm91bmRpbmdCb3g9ZnVuY3Rpb24odCl7dmFyIGU7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih0PT09dm9pZCAwfHx0LnVzZUNhY2hlPT09dm9pZCAwfHx0LnVzZUNhY2hlPT09ITApKXQ9PT12b2lkIDA/dD11Yjp0PW9tZSh0KSxlPWFtZSh0aGlzWzBdLHQpO2Vsc2V7ZT1LcygpLHQ9dHx8dWI7dmFyIHI9b21lKHQpLG49dGhpcyxpPW4uY3koKSxhPWkuc3R5bGVFbmFibGVkKCk7aWYoYSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9bltzXSx1PWwuX3ByaXZhdGUsaD1CZ2UobCksZj11LmJiQ2FjaGVQb3NLZXk9PT1oLGQ9ci51c2VDYWNoZSYmZiYmIXUuc3R5bGVEaXJ0eTtsLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShkKX10aGlzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCF0LnVzZUNhY2hlKTtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKyl7dmFyIG09bltwXTtIMChlLGFtZShtLHIpKX19cmV0dXJuIGUueDE9dWwoZS54MSksZS55MT11bChlLnkxKSxlLngyPXVsKGUueDIpLGUueTI9dWwoZS55MiksZS53PXVsKGUueDItZS54MSksZS5oPXVsKGUueTItZS55MSksZX07emYuZGlydHlCb3VuZGluZ0JveENhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciBlPXRoaXNbdF0uX3ByaXZhdGU7ZS5iYkNhY2hlPW51bGwsZS5iYkNhY2hlUG9zS2V5PW51bGwsZS5ib2R5Qm91bmRzPW51bGwsZS5vdmVybGF5Qm91bmRzPW51bGwsZS5sYWJlbEJvdW5kcy5hbGw9bnVsbCxlLmxhYmVsQm91bmRzLnNvdXJjZT1udWxsLGUubGFiZWxCb3VuZHMudGFyZ2V0PW51bGwsZS5sYWJlbEJvdW5kcy5tYWluPW51bGwsZS5sYWJlbEJvdW5kcy5zb3VyY2VSb3Q9bnVsbCxlLmxhYmVsQm91bmRzLnRhcmdldFJvdD1udWxsLGUubGFiZWxCb3VuZHMubWFpblJvdD1udWxsLGUuYXJyb3dCb3VuZHMuc291cmNlPW51bGwsZS5hcnJvd0JvdW5kcy50YXJnZXQ9bnVsbCxlLmFycm93Qm91bmRzWyJtaWQtc291cmNlIl09bnVsbCxlLmFycm93Qm91bmRzWyJtaWQtdGFyZ2V0Il09bnVsbH1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKSx0aGlzfTt6Zi5ib3VuZGluZ0JveEF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubm9kZXMoKSxyPXRoaXMuY3koKSxuPXIuaGFzQ29tcG91bmROb2RlcygpLGk9ci5jb2xsZWN0aW9uKCk7aWYobiYmKGk9ZS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuIGguaXNQYXJlbnQoKX0pLGU9ZS5ub3QoaSkpLFVyKHQpKXt2YXIgYT10O3Q9byhmdW5jdGlvbigpe3JldHVybiBhfSwiZm4iKX12YXIgcz1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX3ByaXZhdGUuYmJBdE9sZFBvcz10KGYsZCl9LCJzdG9yZU9sZFBvcyIpLGw9byhmdW5jdGlvbihmKXtyZXR1cm4gZi5fcHJpdmF0ZS5iYkF0T2xkUG9zfSwiZ2V0T2xkUG9zIik7ci5zdGFydEJhdGNoKCksZS5mb3JFYWNoKHMpLnNpbGVudFBvc2l0aW9ucyh0KSxuJiYoaS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgdT1samUodGhpcy5ib3VuZGluZ0JveCh7dXNlQ2FjaGU6ITF9KSk7cmV0dXJuIGUuc2lsZW50UG9zaXRpb25zKGwpLG4mJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpLHIuZW5kQmF0Y2goKSx1fTtiMS5ib3VuZGluZ2JveD1iMS5iYj1iMS5ib3VuZGluZ0JveDtiMS5yZW5kZXJlZEJvdW5kaW5nYm94PWIxLnJlbmRlcmVkQm91bmRpbmdCb3g7V1plPXpmO1p4PXliPXt9O0ZnZT1vKGZ1bmN0aW9uKGUpe2UudXBwZXJjYXNlTmFtZT1EcGUoZS5uYW1lKSxlLmF1dG9OYW1lPSJhdXRvIitlLnVwcGVyY2FzZU5hbWUsZS5sYWJlbE5hbWU9ImxhYmVsIitlLnVwcGVyY2FzZU5hbWUsZS5vdXRlck5hbWU9Im91dGVyIitlLnVwcGVyY2FzZU5hbWUsZS51cHBlcmNhc2VPdXRlck5hbWU9RHBlKGUub3V0ZXJOYW1lKSxaeFtlLm5hbWVdPW8oZnVuY3Rpb24oKXt2YXIgbj10aGlzWzBdLGk9bi5fcHJpdmF0ZSxhPWkuY3kscz1hLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihuKWlmKHMpe2lmKG4uaXNQYXJlbnQoKSlyZXR1cm4gbi51cGRhdGVDb21wb3VuZEJvdW5kcygpLGlbZS5hdXRvTmFtZV18fDA7dmFyIGw9bi5wc3R5bGUoZS5uYW1lKTtzd2l0Y2gobC5zdHJWYWx1ZSl7Y2FzZSJsYWJlbCI6cmV0dXJuIG4ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKCksaS5yc3R5bGVbZS5sYWJlbE5hbWVdfHwwO2RlZmF1bHQ6cmV0dXJuIGwucGZWYWx1ZX19ZWxzZSByZXR1cm4gMX0sImRpbUltcGwiKSxaeFsib3V0ZXIiK2UudXBwZXJjYXNlTmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF0saT1uLl9wcml2YXRlLGE9aS5jeSxzPWEuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKG4paWYocyl7dmFyIGw9bltlLm5hbWVdKCksdT1uLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxoPTIqbi5wYWRkaW5nKCk7cmV0dXJuIGwrdStofWVsc2UgcmV0dXJuIDF9LCJvdXRlckRpbUltcGwiKSxaeFsicmVuZGVyZWQiK2UudXBwZXJjYXNlTmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF07aWYobil7dmFyIGk9bltlLm5hbWVdKCk7cmV0dXJuIGkqdGhpcy5jeSgpLnpvb20oKX19LCJyZW5kZXJlZERpbUltcGwiKSxaeFsicmVuZGVyZWQiK2UudXBwZXJjYXNlT3V0ZXJOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXTtpZihuKXt2YXIgaT1uW2Uub3V0ZXJOYW1lXSgpO3JldHVybiBpKnRoaXMuY3koKS56b29tKCl9fSwicmVuZGVyZWRPdXRlckRpbUltcGwiKX0sImRlZmluZURpbUZucyIpO0ZnZSh7bmFtZToid2lkdGgifSk7RmdlKHtuYW1lOiJoZWlnaHQifSk7eWIucGFkZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF0sZT10Ll9wcml2YXRlO3JldHVybiB0LmlzUGFyZW50KCk/KHQudXBkYXRlQ29tcG91bmRCb3VuZHMoKSxlLmF1dG9QYWRkaW5nIT09dm9pZCAwP2UuYXV0b1BhZGRpbmc6dC5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlKTp0LnBzdHlsZSgicGFkZGluZyIpLnBmVmFsdWV9O3liLnBhZGRlZEhlaWdodD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQuaGVpZ2h0KCkrMip0LnBhZGRpbmcoKX07eWIucGFkZGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0LndpZHRoKCkrMip0LnBhZGRpbmcoKX07WVplPXliLHFaZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSlyZXR1cm4gcihlKX0sImlmRWRnZSIpLFhaZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5jeSgpO3JldHVybiAkNihyKGUpLG4uem9vbSgpLG4ucGFuKCkpfX0sImlmRWRnZVJlbmRlcmVkUG9zaXRpb24iKSxqWmU9byhmdW5jdGlvbihlLHIpe2lmKGUuaXNFZGdlKCkpe3ZhciBuPWUuY3koKSxpPW4ucGFuKCksYT1uLnpvb20oKTtyZXR1cm4gcihlKS5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuICQ2KHMsYSxpKX0pfX0sImlmRWRnZVJlbmRlcmVkUG9zaXRpb25zIiksS1plPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKGUpfSwiY29udHJvbFBvaW50cyIpLFFaZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0U2VnbWVudFBvaW50cyhlKX0sInNlZ21lbnRQb2ludHMiKSxaWmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGUpfSwic291cmNlRW5kcG9pbnQiKSxKWmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGUpfSwidGFyZ2V0RW5kcG9pbnQiKSxlSmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChlKX0sIm1pZHBvaW50IiksbG1lPXtjb250cm9sUG9pbnRzOntnZXQ6S1plLG11bHQ6ITB9LHNlZ21lbnRQb2ludHM6e2dldDpRWmUsbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDpaWmV9LHRhcmdldEVuZHBvaW50OntnZXQ6SlplfSxtaWRwb2ludDp7Z2V0OmVKZX19LHRKZT1vKGZ1bmN0aW9uKGUpe3JldHVybiJyZW5kZXJlZCIrZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyKDEpfSwicmVuZGVyZWROYW1lIiksckplPU9iamVjdC5rZXlzKGxtZSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bG1lW2VdLG49dEplKGUpO3JldHVybiB0W2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHFaZSh0aGlzLHIuZ2V0KX0sci5tdWx0P3Rbbl09ZnVuY3Rpb24oKXtyZXR1cm4galplKHRoaXMsci5nZXQpfTp0W25dPWZ1bmN0aW9uKCl7cmV0dXJuIFhaZSh0aGlzLHIuZ2V0KX0sdH0se30pLG5KZT1pcih7fSxWWmUsV1plLFlaZSxySmUpO3pnZT1vKGZ1bmN0aW9uKGUscil7dGhpcy5yZWN5Y2xlKGUscil9LCJFdmVudCIpO28ocXgsInJldHVybkZhbHNlIik7byhmNiwicmV0dXJuVHJ1ZSIpO3pnZS5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4iZXZlbnQifSwiaW5zdGFuY2VTdHJpbmciKSxyZWN5Y2xlOm8oZnVuY3Rpb24oZSxyKXtpZih0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cXgsZSE9bnVsbCYmZS5wcmV2ZW50RGVmYXVsdD8odGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWQ/ZjY6cXgpOmUhPW51bGwmJmUudHlwZT9yPWU6dGhpcy50eXBlPWUsciE9bnVsbCYmKHRoaXMub3JpZ2luYWxFdmVudD1yLm9yaWdpbmFsRXZlbnQsdGhpcy50eXBlPXIudHlwZSE9bnVsbD9yLnR5cGU6dGhpcy50eXBlLHRoaXMuY3k9ci5jeSx0aGlzLnRhcmdldD1yLnRhcmdldCx0aGlzLnBvc2l0aW9uPXIucG9zaXRpb24sdGhpcy5yZW5kZXJlZFBvc2l0aW9uPXIucmVuZGVyZWRQb3NpdGlvbix0aGlzLm5hbWVzcGFjZT1yLm5hbWVzcGFjZSx0aGlzLmxheW91dD1yLmxheW91dCksdGhpcy5jeSE9bnVsbCYmdGhpcy5wb3NpdGlvbiE9bnVsbCYmdGhpcy5yZW5kZXJlZFBvc2l0aW9uPT1udWxsKXt2YXIgbj10aGlzLnBvc2l0aW9uLGk9dGhpcy5jeS56b29tKCksYT10aGlzLmN5LnBhbigpO3RoaXMucmVuZGVyZWRQb3NpdGlvbj17eDpuLngqaSthLngseTpuLnkqaSthLnl9fXRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpfSwicmVjeWNsZSIpLHByZXZlbnREZWZhdWx0Om8oZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1mNjt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5wcmV2ZW50RGVmYXVsdCgpfSwicHJldmVudERlZmF1bHQiKSxzdG9wUHJvcGFnYXRpb246byhmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZjY7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O2UmJmUuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigpfSwic3RvcFByb3BhZ2F0aW9uIiksc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOm8oZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWY2LHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iKSxpc0RlZmF1bHRQcmV2ZW50ZWQ6cXgsaXNQcm9wYWdhdGlvblN0b3BwZWQ6cXgsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cXh9O0dnZT0vXihbXi5dKykoXC4oPzpbXi5dKykpPyQvLGlKZT0iLioiLCRnZT17cXVhbGlmaWVyQ29tcGFyZTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU9PT1yfSwicXVhbGlmaWVyQ29tcGFyZSIpLGV2ZW50TWF0Y2hlczpvKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKCl7fSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sImNhbGxiYWNrQ29udGV4dCIpLGJlZm9yZUVtaXQ6byhmdW5jdGlvbigpe30sImJlZm9yZUVtaXQiKSxhZnRlckVtaXQ6byhmdW5jdGlvbigpe30sImFmdGVyRW1pdCIpLGJ1YmJsZTpvKGZ1bmN0aW9uKCl7cmV0dXJuITF9LCJidWJibGUiKSxwYXJlbnQ6byhmdW5jdGlvbigpe3JldHVybiBudWxsfSwicGFyZW50IiksY29udGV4dDpudWxsfSxjbWU9T2JqZWN0LmtleXMoJGdlKSxhSmU9e307byhxNiwiRW1pdHRlciIpO0ZmPXE2LnByb3RvdHlwZSxWZ2U9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXtuaShpKSYmKGE9aSxpPW51bGwpLGwmJihzPT1udWxsP3M9bDpzPWlyKHt9LHMsbCkpO2Zvcih2YXIgdT1rbihuKT9uOm4uc3BsaXQoL1xzKy8pLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtpZighSWYoZikpe3ZhciBkPWYubWF0Y2goR2dlKTtpZihkKXt2YXIgcD1kWzFdLG09ZFsyXT9kWzJdOm51bGwsZz1yKGUsZixwLG0saSxhLHMpO2lmKGc9PT0hMSlicmVha319fX0sImZvckVhY2hFdmVudCIpLHVtZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuYWRkRXZlbnRGaWVsZHMoZS5jb250ZXh0LHIpLG5ldyB6Z2Uoci50eXBlLHIpfSwibWFrZUV2ZW50T2JqIiksc0plPW8oZnVuY3Rpb24oZSxyLG4pe2lmKENxZShuKSl7cihlLG4pO3JldHVybn1lbHNlIGlmKFVyKG4pKXtyKGUsdW1lKGUsbikpO3JldHVybn1mb3IodmFyIGk9a24obik/bjpuLnNwbGl0KC9ccysvKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYoIUlmKHMpKXt2YXIgbD1zLm1hdGNoKEdnZSk7aWYobCl7dmFyIHU9bFsxXSxoPWxbMl0/bFsyXTpudWxsLGY9dW1lKGUse3R5cGU6dSxuYW1lc3BhY2U6aCx0YXJnZXQ6ZS5jb250ZXh0fSk7cihlLGYpfX19fSwiZm9yRWFjaEV2ZW50T2JqIik7RmYub249RmYuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gVmdlKHRoaXMsZnVuY3Rpb24oYSxzLGwsdSxoLGYsZCl7bmkoZikmJmEubGlzdGVuZXJzLnB1c2goe2V2ZW50OnMsY2FsbGJhY2s6Zix0eXBlOmwsbmFtZXNwYWNlOnUscXVhbGlmaWVyOmgsY29uZjpkfSl9LHQsZSxyLG4saSksdGhpc307RmYub25lPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLm9uKHQsZSxyLG4se29uZTohMH0pfTtGZi5yZW1vdmVMaXN0ZW5lcj1GZi5vZmY9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPU9YZSh0aGlzLmxpc3RlbmVycykpO2Zvcih2YXIgYT10aGlzLmxpc3RlbmVycyxzPW8oZnVuY3Rpb24oaCl7dmFyIGY9YVtoXTtWZ2UoaSxmdW5jdGlvbihkLHAsbSxnLHksdil7aWYoKGYudHlwZT09PW18fHQ9PT0iKiIpJiYoIWcmJmYubmFtZXNwYWNlIT09Ii4qInx8Zi5uYW1lc3BhY2U9PT1nKSYmKCF5fHxkLnF1YWxpZmllckNvbXBhcmUoZi5xdWFsaWZpZXIseSkpJiYoIXZ8fGYuY2FsbGJhY2s9PT12KSlyZXR1cm4gYS5zcGxpY2UoaCwxKSwhMX0sdCxlLHIsbil9LCJfbG9vcCIpLGw9YS5sZW5ndGgtMTtsPj0wO2wtLSlzKGwpO3JldHVybiB0aGlzfTtGZi5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcigiKiIpfTtGZi5lbWl0PUZmLnRyaWdnZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGlzdGVuZXJzLGk9bi5sZW5ndGg7cmV0dXJuIHRoaXMuZW1pdHRpbmcrKyxrbihlKXx8KGU9W2VdKSxzSmUodGhpcyxmdW5jdGlvbihhLHMpe3IhPW51bGwmJihuPVt7ZXZlbnQ6cy5ldmVudCx0eXBlOnMudHlwZSxuYW1lc3BhY2U6cy5uYW1lc3BhY2UsY2FsbGJhY2s6cn1dLGk9bi5sZW5ndGgpO2Zvcih2YXIgbD1vKGZ1bmN0aW9uKGYpe3ZhciBkPW5bZl07aWYoZC50eXBlPT09cy50eXBlJiYoIWQubmFtZXNwYWNlfHxkLm5hbWVzcGFjZT09PXMubmFtZXNwYWNlfHxkLm5hbWVzcGFjZT09PWlKZSkmJmEuZXZlbnRNYXRjaGVzKGEuY29udGV4dCxkLHMpKXt2YXIgcD1bc107ZSE9bnVsbCYmQlhlKHAsZSksYS5iZWZvcmVFbWl0KGEuY29udGV4dCxkLHMpLGQuY29uZiYmZC5jb25mLm9uZSYmKGEubGlzdGVuZXJzPWEubGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbih5KXtyZXR1cm4geSE9PWR9KSk7dmFyIG09YS5jYWxsYmFja0NvbnRleHQoYS5jb250ZXh0LGQscyksZz1kLmNhbGxiYWNrLmFwcGx5KG0scCk7YS5hZnRlckVtaXQoYS5jb250ZXh0LGQscyksZz09PSExJiYocy5zdG9wUHJvcGFnYXRpb24oKSxzLnByZXZlbnREZWZhdWx0KCkpfX0sIl9sb29wMiIpLHU9MDt1PGk7dSsrKWwodSk7YS5idWJibGUoYS5jb250ZXh0KSYmIXMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmYS5wYXJlbnQoYS5jb250ZXh0KS5lbWl0KHMsZSl9LHQpLHRoaXMuZW1pdHRpbmctLSx0aGlzfTtvSmU9e3F1YWxpZmllckNvbXBhcmU6byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT1udWxsfHxyPT1udWxsP2U9PW51bGwmJnI9PW51bGw6ZS5zYW1lVGV4dChyKX0sInF1YWxpZmllckNvbXBhcmUiKSxldmVudE1hdGNoZXM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5xdWFsaWZpZXI7cmV0dXJuIGkhPW51bGw/ZSE9PW4udGFyZ2V0JiZwYihuLnRhcmdldCkmJmkubWF0Y2hlcyhuLnRhcmdldCk6ITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKGUscil7ci5jeT1lLmN5KCksci50YXJnZXQ9ZX0sImFkZEV2ZW50RmllbGRzIiksY2FsbGJhY2tDb250ZXh0Om8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiByLnF1YWxpZmllciE9bnVsbD9uLnRhcmdldDplfSwiY2FsbGJhY2tDb250ZXh0IiksYmVmb3JlRW1pdDpvKGZ1bmN0aW9uKGUscil7ci5jb25mJiZyLmNvbmYub25jZSYmci5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHIuZXZlbnQsci5xdWFsaWZpZXIsci5jYWxsYmFjayl9LCJiZWZvcmVFbWl0IiksYnViYmxlOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImJ1YmJsZSIpLHBhcmVudDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKT9lLnBhcmVudCgpOmUuY3koKX0sInBhcmVudCIpfSxkNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBadChlKT9uZXcgUGYoZSk6ZX0sImFyZ1NlbGVjdG9yIiksVWdlPXtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuX3ByaXZhdGU7bi5lbWl0dGVyfHwobi5lbWl0dGVyPW5ldyBxNihvSmUscikpfXJldHVybiB0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWQ2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbihlLGksbil9cmV0dXJuIHRoaXN9LCJvbiIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1kNihyKSxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBzPXRoaXNbYV07cy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZSxpLG4pfXJldHVybiB0aGlzfSwicmVtb3ZlTGlzdGVuZXIiKSxyZW1vdmVBbGxMaXN0ZW5lcnM6byhmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdO3IuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpfXJldHVybiB0aGlzfSwicmVtb3ZlQWxsTGlzdGVuZXJzIiksb25lOm8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1kNihyKSxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBzPXRoaXNbYV07cy5lbWl0dGVyKCkub25lKGUsaSxuKX1yZXR1cm4gdGhpc30sIm9uZSIpLG9uY2U6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWQ2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbihlLGksbix7b25jZTohMCxvbmNlQ29sbGVjdGlvbjp0aGlzfSl9fSwib25jZSIpLGVtaXQ6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dO2kuZW1pdHRlcigpLmVtaXQoZSxyKX1yZXR1cm4gdGhpc30sImVtaXQiKSxlbWl0QW5kTm90aWZ5Om8oZnVuY3Rpb24oZSxyKXtpZih0aGlzLmxlbmd0aCE9PTApcmV0dXJuIHRoaXMuY3koKS5ub3RpZnkoZSx0aGlzKSx0aGlzLmVtaXQoZSxyKSx0aGlzfSwiZW1pdEFuZE5vdGlmeSIpfTtzbi5ldmVudEFsaWFzZXNPbihVZ2UpO0hnZT17bm9kZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNOb2RlKCl9KS5maWx0ZXIoZSl9LCJub2RlcyIpLGVkZ2VzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzRWRnZSgpfSkuZmlsdGVyKGUpfSwiZWRnZXMiKSxieUdyb3VwOm8oZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5zcGF3bigpLHI9dGhpcy5zcGF3bigpLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXTtpLmlzTm9kZSgpP2UucHVzaChpKTpyLnB1c2goaSl9cmV0dXJue25vZGVzOmUsZWRnZXM6cn19LCJieUdyb3VwIiksZmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtpZihlPT09dm9pZCAwKXJldHVybiB0aGlzO2lmKFp0KGUpfHx3byhlKSlyZXR1cm4gbmV3IFBmKGUpLmZpbHRlcih0aGlzKTtpZihuaShlKSl7Zm9yKHZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9cj9lLmFwcGx5KHIsW3MsYSxpXSk6ZShzLGEsaSk7bCYmbi5wdXNoKHMpfXJldHVybiBufXJldHVybiB0aGlzLnNwYXduKCl9LCJmaWx0ZXIiKSxub3Q6byhmdW5jdGlvbihlKXtpZihlKXtadChlKSYmKGU9dGhpcy5maWx0ZXIoZSkpO2Zvcih2YXIgcj10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9ZS5oYXMoaSk7YXx8ci5wdXNoKGkpfXJldHVybiByfWVsc2UgcmV0dXJuIHRoaXN9LCJub3QiKSxhYnNvbHV0ZUNvbXBsZW1lbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtyZXR1cm4gZS5tdXRhYmxlRWxlbWVudHMoKS5ub3QodGhpcyl9LCJhYnNvbHV0ZUNvbXBsZW1lbnQiKSxpbnRlcnNlY3Q6byhmdW5jdGlvbihlKXtpZihadChlKSl7dmFyIHI9ZTtyZXR1cm4gdGhpcy5maWx0ZXIocil9Zm9yKHZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT1lLHM9dGhpcy5sZW5ndGg8ZS5sZW5ndGgsbD1zP2k6YSx1PXM/YTppLGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTt1LmhhcyhmKSYmbi5wdXNoKGYpfXJldHVybiBufSwiaW50ZXJzZWN0IikseG9yOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtadChlKSYmKGU9ci4kKGUpKTt2YXIgbj10aGlzLnNwYXduKCksaT10aGlzLGE9ZSxzPW8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIGQ9dVtmXSxwPWQuX3ByaXZhdGUuZGF0YS5pZCxtPWguaGFzRWxlbWVudFdpdGhJZChwKTttfHxuLnB1c2goZCl9fSwiYWRkIik7cmV0dXJuIHMoaSxhKSxzKGEsaSksbn0sInhvciIpLGRpZmY6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O1p0KGUpJiYoZT1yLiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMuc3Bhd24oKSxhPXRoaXMuc3Bhd24oKSxzPXRoaXMsbD1lLHU9byhmdW5jdGlvbihmLGQscCl7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDttKyspe3ZhciBnPWZbbV0seT1nLl9wcml2YXRlLmRhdGEuaWQsdj1kLmhhc0VsZW1lbnRXaXRoSWQoeSk7dj9hLm1lcmdlKGcpOnAucHVzaChnKX19LCJhZGQiKTtyZXR1cm4gdShzLGwsbiksdShsLHMsaSkse2xlZnQ6bixyaWdodDppLGJvdGg6YX19LCJkaWZmIiksYWRkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihadChlKSl7dmFyIG49ZTtlPXIubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgaT10aGlzLnNwYXduU2VsZigpLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXSxsPSF0aGlzLmhhcyhzKTtsJiZpLnB1c2gocyl9cmV0dXJuIGl9LCJhZGQiKSxtZXJnZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUsbj1yLmN5O2lmKCFlKXJldHVybiB0aGlzO2lmKGUmJlp0KGUpKXt2YXIgaT1lO2U9bi5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoaSl9Zm9yKHZhciBhPXIubWFwLHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSx1PWwuX3ByaXZhdGUuZGF0YS5pZCxoPSFhLmhhcyh1KTtpZihoKXt2YXIgZj10aGlzLmxlbmd0aCsrO3RoaXNbZl09bCxhLnNldCh1LHtlbGU6bCxpbmRleDpmfSl9fXJldHVybiB0aGlzfSwibWVyZ2UiKSx1bm1lcmdlQXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzW2VdLG49ci5pZCgpLGk9dGhpcy5fcHJpdmF0ZSxhPWkubWFwO3RoaXNbZV09dm9pZCAwLGEuZGVsZXRlKG4pO3ZhciBzPWU9PT10aGlzLmxlbmd0aC0xO2lmKHRoaXMubGVuZ3RoPjEmJiFzKXt2YXIgbD10aGlzLmxlbmd0aC0xLHU9dGhpc1tsXSxoPXUuX3ByaXZhdGUuZGF0YS5pZDt0aGlzW2xdPXZvaWQgMCx0aGlzW2VdPXUsYS5zZXQoaCx7ZWxlOnUsaW5kZXg6ZX0pfXJldHVybiB0aGlzLmxlbmd0aC0tLHRoaXN9LCJ1bm1lcmdlQXQiKSx1bm1lcmdlT25lOm8oZnVuY3Rpb24oZSl7ZT1lWzBdO3ZhciByPXRoaXMuX3ByaXZhdGUsbj1lLl9wcml2YXRlLmRhdGEuaWQsaT1yLm1hcCxhPWkuZ2V0KG4pO2lmKCFhKXJldHVybiB0aGlzO3ZhciBzPWEuaW5kZXg7cmV0dXJuIHRoaXMudW5tZXJnZUF0KHMpLHRoaXN9LCJ1bm1lcmdlT25lIiksdW5tZXJnZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZSYmWnQoZSkpe3ZhciBuPWU7ZT1yLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihuKX1mb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLnVubWVyZ2VPbmUoZVtpXSk7cmV0dXJuIHRoaXN9LCJ1bm1lcmdlIiksdW5tZXJnZUJ5Om8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPXRoaXNbcl07ZShuKSYmdGhpcy51bm1lcmdlQXQocil9cmV0dXJuIHRoaXN9LCJ1bm1lcmdlQnkiKSxtYXA6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9cj9lLmFwcGx5KHIsW3MsYSxpXSk6ZShzLGEsaSk7bi5wdXNoKGwpfXJldHVybiBufSwibWFwIikscmVkdWNlOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49cixpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKW49ZShuLGlbYV0sYSxpKTtyZXR1cm4gbn0sInJlZHVjZSIpLG1heDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPS0xLzAsaSxhPXRoaXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9cj9lLmFwcGx5KHIsW2wscyxhXSk6ZShsLHMsYSk7dT5uJiYobj11LGk9bCl9cmV0dXJue3ZhbHVlOm4sZWxlOml9fSwibWF4IiksbWluOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MS8wLGksYT10aGlzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PXI/ZS5hcHBseShyLFtsLHMsYV0pOmUobCxzLGEpO3U8biYmKG49dSxpPWwpfXJldHVybnt2YWx1ZTpuLGVsZTppfX0sIm1pbiIpfSxRcj1IZ2U7UXIudT1RclsifCJdPVFyWyIrIl09UXIudW5pb249UXIub3I9UXIuYWRkO1FyWyJcXCJdPVFyWyIhIl09UXJbIi0iXT1Rci5kaWZmZXJlbmNlPVFyLnJlbGF0aXZlQ29tcGxlbWVudD1Rci5zdWJ0cmFjdD1Rci5ub3Q7UXIubj1RclsiJiJdPVFyWyIuIl09UXIuYW5kPVFyLmludGVyc2VjdGlvbj1Rci5pbnRlcnNlY3Q7UXJbIl4iXT1RclsiKCspIl09UXJbIigtKSJdPVFyLnN5bW1ldHJpY0RpZmZlcmVuY2U9UXIuc3ltZGlmZj1Rci54b3I7UXIuZm5GaWx0ZXI9UXIuZmlsdGVyRm49UXIuc3RkRmlsdGVyPVFyLmZpbHRlcjtRci5jb21wbGVtZW50PVFyLmFic2NvbXA9UXIuYWJzb2x1dGVDb21wbGVtZW50O2xKZT17aXNOb2RlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09Im5vZGVzIn0sImlzTm9kZSIpLGlzRWRnZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJlZGdlcyJ9LCJpc0VkZ2UiKSxpc0xvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdPT09dGhpcy50YXJnZXQoKVswXX0sImlzTG9vcCIpLGlzU2ltcGxlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXSE9PXRoaXMudGFyZ2V0KClbMF19LCJpc1NpbXBsZSIpLGdyb3VwOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuX3ByaXZhdGUuZ3JvdXB9LCJncm91cCIpfSxXZ2U9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuY3koKSxpPW4uaGFzQ29tcG91bmROb2RlcygpO2Z1bmN0aW9uIGEoZil7dmFyIGQ9Zi5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKTtyZXR1cm4gZC52YWx1ZT09PSJhdXRvIj9pP2YuekRlcHRoKCk6MDpkLnZhbHVlPT09ImJvdHRvbSI/LTE6ZC52YWx1ZT09PSJ0b3AiP2FCOjB9byhhLCJnZXREZXB0aCIpO3ZhciBzPWEoZSktYShyKTtpZihzIT09MClyZXR1cm4gcztmdW5jdGlvbiBsKGYpe3ZhciBkPWYucHN0eWxlKCJ6LWluZGV4LWNvbXBhcmUiKTtyZXR1cm4gZC52YWx1ZT09PSJhdXRvIiYmZi5pc05vZGUoKT8xOjB9byhsLCJnZXRFbGVEZXB0aCIpO3ZhciB1PWwoZSktbChyKTtpZih1IT09MClyZXR1cm4gdTt2YXIgaD1lLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXIucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIGghPT0wP2g6ZS5wb29sSW5kZXgoKS1yLnBvb2xJbmRleCgpfSwiekluZGV4U29ydCIpLFI2PXtmb3JFYWNoOm8oZnVuY3Rpb24oZSxyKXtpZihuaShlKSlmb3IodmFyIG49dGhpcy5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXRoaXNbaV0scz1yP2UuYXBwbHkocixbYSxpLHRoaXNdKTplKGEsaSx0aGlzKTtpZihzPT09ITEpYnJlYWt9cmV0dXJuIHRoaXN9LCJmb3JFYWNoIiksdG9BcnJheTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyllLnB1c2godGhpc1tyXSk7cmV0dXJuIGV9LCJ0b0FycmF5Iiksc2xpY2U6byhmdW5jdGlvbihlLHIpe3ZhciBuPVtdLGk9dGhpcy5sZW5ndGg7cj09bnVsbCYmKHI9aSksZT09bnVsbCYmKGU9MCksZTwwJiYoZT1pK2UpLHI8MCYmKHI9aStyKTtmb3IodmFyIGE9ZTthPj0wJiZhPHImJmE8aTthKyspbi5wdXNoKHRoaXNbYV0pO3JldHVybiB0aGlzLnNwYXduKG4pfSwic2xpY2UiKSxzaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIiksZXE6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tlXXx8dGhpcy5zcGF3bigpfSwiZXEiKSxmaXJzdDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF18fHRoaXMuc3Bhd24oKX0sImZpcnN0IiksbGFzdDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5sZW5ndGgtMV18fHRoaXMuc3Bhd24oKX0sImxhc3QiKSxlbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPT09MH0sImVtcHR5Iiksbm9uZW1wdHk6byhmdW5jdGlvbigpe3JldHVybiF0aGlzLmVtcHR5KCl9LCJub25lbXB0eSIpLHNvcnQ6byhmdW5jdGlvbihlKXtpZighbmkoZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy50b0FycmF5KCkuc29ydChlKTtyZXR1cm4gdGhpcy5zcGF3bihyKX0sInNvcnQiKSxzb3J0QnlaSW5kZXg6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNvcnQoV2dlKX0sInNvcnRCeVpJbmRleCIpLHpEZXB0aDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXt2YXIgcj1lLl9wcml2YXRlLG49ci5ncm91cDtpZihuPT09Im5vZGVzIil7dmFyIGk9ci5kYXRhLnBhcmVudD9lLnBhcmVudHMoKS5zaXplKCk6MDtyZXR1cm4gZS5pc1BhcmVudCgpP2k6YUItMX1lbHNle3ZhciBhPXIuc291cmNlLHM9ci50YXJnZXQsbD1hLnpEZXB0aCgpLHU9cy56RGVwdGgoKTtyZXR1cm4gTWF0aC5tYXgobCx1LDApfX19LCJ6RGVwdGgiKX07UjYuZWFjaD1SNi5mb3JFYWNoO2NKZT1vKGZ1bmN0aW9uKCl7dmFyIGU9InVuZGVmaW5lZCIscj0odHlwZW9mIFN5bWJvbD4idSI/InVuZGVmaW5lZCI6S2koU3ltYm9sKSkhPWUmJktpKFN5bWJvbC5pdGVyYXRvcikhPWU7ciYmKFI2W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXt2YXIgbj10aGlzLGk9e3ZhbHVlOnZvaWQgMCxkb25lOiExfSxhPTAscz10aGlzLmxlbmd0aDtyZXR1cm4gJG1lKHtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gYTxzP2kudmFsdWU9blthKytdOihpLnZhbHVlPXZvaWQgMCxpLmRvbmU9ITApLGl9LCJuZXh0Iil9LFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSl9KX0sImRlZmluZVN5bWJvbEl0ZXJhdG9yIik7Y0plKCk7dUplPV9hKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITF9KSxiNj17bGF5b3V0RGltZW5zaW9uczpvKGZ1bmN0aW9uKGUpe2U9dUplKGUpO3ZhciByO2lmKCF0aGlzLnRha2VzVXBTcGFjZSgpKXI9e3c6MCxoOjB9O2Vsc2UgaWYoZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpe3ZhciBuPXRoaXMuYm91bmRpbmdCb3goKTtyPXt3Om4udyxoOm4uaH19ZWxzZSByPXt3OnRoaXMub3V0ZXJXaWR0aCgpLGg6dGhpcy5vdXRlckhlaWdodCgpfTtyZXR1cm4oci53PT09MHx8ci5oPT09MCkmJihyLnc9ci5oPTEpLHJ9LCJsYXlvdXREaW1lbnNpb25zIiksbGF5b3V0UG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIVQuaXNQYXJlbnQoKX0pLGE9dGhpcy5jeSgpLHM9ci5lbGVzLGw9byhmdW5jdGlvbihFKXtyZXR1cm4gRS5pZCgpfSwiZ2V0TWVtb2l6ZUtleSIpLHU9cmIobixsKTtlLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6ZX0pLGUuYW5pbWF0aW9ucz1bXTt2YXIgaD1vKGZ1bmN0aW9uKEUsTCxTKXt2YXIgQT17eDpMLngxK0wudy8yLHk6TC55MStMLmgvMn0sST17eDooUy54LUEueCkqRSx5OihTLnktQS55KSpFfTtyZXR1cm57eDpBLngrSS54LHk6QS55K0kueX19LCJjYWxjdWxhdGVTcGFjaW5nIiksZj1yLnNwYWNpbmdGYWN0b3ImJnIuc3BhY2luZ0ZhY3RvciE9PTEsZD1vKGZ1bmN0aW9uKCl7aWYoIWYpcmV0dXJuIG51bGw7Zm9yKHZhciBFPUtzKCksTD0wO0w8aS5sZW5ndGg7TCsrKXt2YXIgUz1pW0xdLEE9dShTLEwpO2hqZShFLEEueCxBLnkpfXJldHVybiBFfSwic3BhY2luZ0JiIikscD1kKCksbT1yYihmdW5jdGlvbihULEUpe3ZhciBMPXUoVCxFKTtpZihmKXt2YXIgUz1NYXRoLmFicyhyLnNwYWNpbmdGYWN0b3IpO0w9aChTLHAsTCl9cmV0dXJuIHIudHJhbnNmb3JtIT1udWxsJiYoTD1yLnRyYW5zZm9ybShULEwpKSxMfSxsKTtpZihyLmFuaW1hdGUpe2Zvcih2YXIgZz0wO2c8aS5sZW5ndGg7ZysrKXt2YXIgeT1pW2ddLHY9bSh5LGcpLHg9ci5hbmltYXRlRmlsdGVyPT1udWxsfHxyLmFuaW1hdGVGaWx0ZXIoeSxnKTtpZih4KXt2YXIgYj15LmFuaW1hdGlvbih7cG9zaXRpb246dixkdXJhdGlvbjpyLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGlvbkVhc2luZ30pO2UuYW5pbWF0aW9ucy5wdXNoKGIpfWVsc2UgeS5wb3NpdGlvbih2KX1pZihyLmZpdCl7dmFyIHc9YS5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6cy5ib3VuZGluZ0JveEF0KG0pLHBhZGRpbmc6ci5wYWRkaW5nfSxkdXJhdGlvbjpyLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGlvbkVhc2luZ30pO2UuYW5pbWF0aW9ucy5wdXNoKHcpfWVsc2UgaWYoci56b29tIT09dm9pZCAwJiZyLnBhbiE9PXZvaWQgMCl7dmFyIF89YS5hbmltYXRpb24oe3pvb206ci56b29tLHBhbjpyLnBhbixkdXJhdGlvbjpyLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGlvbkVhc2luZ30pO2UuYW5pbWF0aW9ucy5wdXNoKF8pfWUuYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBULnBsYXkoKX0pLGUub25lKCJsYXlvdXRyZWFkeSIsci5yZWFkeSksZS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OmV9KSxDMS5hbGwoZS5hbmltYXRpb25zLm1hcChmdW5jdGlvbihUKXtyZXR1cm4gVC5wcm9taXNlKCl9KSkudGhlbihmdW5jdGlvbigpe2Uub25lKCJsYXlvdXRzdG9wIixyLnN0b3ApLGUuZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OmV9KX0pfWVsc2UgaS5wb3NpdGlvbnMobSksci5maXQmJmEuZml0KHIuZWxlcyxyLnBhZGRpbmcpLHIuem9vbSE9bnVsbCYmYS56b29tKHIuem9vbSksci5wYW4mJmEucGFuKHIucGFuKSxlLm9uZSgibGF5b3V0cmVhZHkiLHIucmVhZHkpLGUuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDplfSksZS5vbmUoImxheW91dHN0b3AiLHIuc3RvcCksZS5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZX0pO3JldHVybiB0aGlzfSwibGF5b3V0UG9zaXRpb25zIiksbGF5b3V0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpO3JldHVybiByLm1ha2VMYXlvdXQoaXIoe30sZSx7ZWxlczp0aGlzfSkpfSwibGF5b3V0Iil9O2I2LmNyZWF0ZUxheW91dD1iNi5tYWtlTGF5b3V0PWI2LmxheW91dDtvKFlnZSwic3R5bGVDYWNoZSIpO28oWDYsImNhY2hlU3R5bGVGdW5jdGlvbiIpO28oajYsImNhY2hlUHJvdG90eXBlU3R5bGVGdW5jdGlvbiIpO0NhPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj1yLnJlbmRlcmVyKCksaT1yLnN0eWxlRW5hYmxlZCgpO3JldHVybiBuJiZpJiZuLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGUpLHRoaXN9LCJyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUiKSxkaXJ0eVN0eWxlQ2FjaGU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKSxyPW8oZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3ByaXZhdGUuc3R5bGVDYWNoZT1udWxsfSwiZGlydHkiKTtpZihlLmhhc0NvbXBvdW5kTm9kZXMoKSl7dmFyIG47bj10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpLG4ubWVyZ2Uobi5jb25uZWN0ZWRFZGdlcygpKSxuLmZvckVhY2gocil9ZWxzZSB0aGlzLmZvckVhY2goZnVuY3Rpb24oaSl7cihpKSxpLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChyKX0pO3JldHVybiB0aGlzfSwiZGlydHlTdHlsZUNhY2hlIiksdXBkYXRlU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O2lmKCFyLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2lmKHIuYmF0Y2hpbmcoKSl7dmFyIG49ci5fcHJpdmF0ZS5iYXRjaFN0eWxlRWxlcztyZXR1cm4gbi5tZXJnZSh0aGlzKSx0aGlzfXZhciBpPXIuaGFzQ29tcG91bmROb2RlcygpLGE9dGhpcztlPSEhKGV8fGU9PT12b2lkIDApLGkmJihhPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSkpO3ZhciBzPWE7cmV0dXJuIGU/cy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpOnMuZW1pdCgic3R5bGUiKSxhLmZvckVhY2goZnVuY3Rpb24obCl7cmV0dXJuIGwuX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMH0pLHRoaXN9LCJ1cGRhdGVTdHlsZSIpLGNsZWFuU3R5bGU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZihlLnN0eWxlRW5hYmxlZCgpKWZvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzW3JdO24uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKG4uX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMSxlLnN0eWxlKCkuYXBwbHkobikpfX0sImNsZWFuU3R5bGUiKSxwYXJzZWRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxuPXRoaXNbMF0saT1uLmN5KCk7aWYoaS5zdHlsZUVuYWJsZWQoKSYmbil7dGhpcy5jbGVhblN0eWxlKCk7dmFyIGE9bi5fcHJpdmF0ZS5zdHlsZVtlXTtyZXR1cm4gYT8/KHI/aS5zdHlsZSgpLmdldERlZmF1bHRQcm9wZXJ0eShlKTpudWxsKX19LCJwYXJzZWRTdHlsZSIpLG51bWVyaWNTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07aWYoci5jeSgpLnN0eWxlRW5hYmxlZCgpJiZyKXt2YXIgbj1yLnBzdHlsZShlKTtyZXR1cm4gbi5wZlZhbHVlIT09dm9pZCAwP24ucGZWYWx1ZTpuLnZhbHVlfX0sIm51bWVyaWNTdHlsZSIpLG51bWVyaWNTdHlsZVVuaXRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtpZihyLmN5KCkuc3R5bGVFbmFibGVkKCkmJnIpcmV0dXJuIHIucHN0eWxlKGUpLnVuaXRzfSwibnVtZXJpY1N0eWxlVW5pdHMiKSxyZW5kZXJlZFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpO2lmKCFyLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gci5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUobixlKX0sInJlbmRlcmVkU3R5bGUiKSxzdHlsZTpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5jeSgpO2lmKCFuLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBpPSExLGE9bi5zdHlsZSgpO2lmKFVyKGUpKXt2YXIgcz1lO2EuYXBwbHlCeXBhc3ModGhpcyxzLGkpLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKX1lbHNlIGlmKFp0KGUpKWlmKHI9PT12b2lkIDApe3ZhciBsPXRoaXNbMF07cmV0dXJuIGw/YS5nZXRTdHlsZVByb3BlcnR5VmFsdWUobCxlKTp2b2lkIDB9ZWxzZSBhLmFwcGx5QnlwYXNzKHRoaXMsZSxyLGkpLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTtlbHNlIGlmKGU9PT12b2lkIDApe3ZhciB1PXRoaXNbMF07cmV0dXJuIHU/YS5nZXRSYXdTdHlsZSh1KTp2b2lkIDB9cmV0dXJuIHRoaXN9LCJzdHlsZSIpLHJlbW92ZVN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpO2lmKCFyLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBuPSExLGk9ci5zdHlsZSgpLGE9dGhpcztpZihlPT09dm9pZCAwKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO2kucmVtb3ZlQWxsQnlwYXNzZXMobCxuKX1lbHNle2U9ZS5zcGxpdCgvXHMrLyk7Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBoPWFbdV07aS5yZW1vdmVCeXBhc3NlcyhoLGUsbil9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sInJlbW92ZVN0eWxlIiksc2hvdzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5IiwiZWxlbWVudCIpLHRoaXN9LCJzaG93IiksaGlkZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LCJoaWRlIiksZWZmZWN0aXZlT3BhY2l0eTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiAxO3ZhciByPWUuaGFzQ29tcG91bmROb2RlcygpLG49dGhpc1swXTtpZihuKXt2YXIgaT1uLl9wcml2YXRlLGE9bi5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtpZighcilyZXR1cm4gYTt2YXIgcz1pLmRhdGEucGFyZW50P24ucGFyZW50cygpOm51bGw7aWYocylmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIHU9c1tsXSxoPXUucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7YT1oKmF9cmV0dXJuIGF9fSwiZWZmZWN0aXZlT3BhY2l0eSIpLHRyYW5zcGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIHI9dGhpc1swXSxuPXIuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7aWYocilyZXR1cm4gbj9yLmVmZmVjdGl2ZU9wYWNpdHkoKT09PTA6ci5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZT09PTB9LCJ0cmFuc3BhcmVudCIpLGJhY2tncm91bmRpbmc6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcj10aGlzWzBdO3JldHVybiEhci5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nfSwiYmFja2dyb3VuZGluZyIpfTtvKElQLCJjaGVja0NvbXBvdW5kIik7byh5QiwiZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24iKTtEMT1YNigiZWxlVGFrZXNVcFNwYWNlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoImRpc3BsYXkiKS52YWx1ZT09PSJlbGVtZW50IiYmdC53aWR0aCgpIT09MCYmKHQuaXNOb2RlKCk/dC5oZWlnaHQoKSE9PTA6ITApfSk7Q2EudGFrZXNVcFNwYWNlPWo2KCJ0YWtlc1VwU3BhY2UiLHlCKHtvazpEMX0pKTtoSmU9WDYoImVsZUludGVyYWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoImV2ZW50cyIpLnZhbHVlPT09InllcyImJnQucHN0eWxlKCJ2aXNpYmlsaXR5IikudmFsdWU9PT0idmlzaWJsZSImJkQxKHQpfSksZkplPVg2KCJwYXJlbnRJbnRlcmFjdGl2ZSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHN0eWxlKCJ2aXNpYmlsaXR5IikudmFsdWU9PT0idmlzaWJsZSImJkQxKHQpfSk7Q2EuaW50ZXJhY3RpdmU9ajYoImludGVyYWN0aXZlIix5Qih7b2s6aEplLHBhcmVudE9rOmZKZSxlZGdlT2tWaWFOb2RlOkQxfSkpO0NhLm5vbmludGVyYWN0aXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtpZih0KXJldHVybiF0LmludGVyYWN0aXZlKCl9O2RKZT1YNigiZWxlVmlzaWJsZSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHN0eWxlKCJ2aXNpYmlsaXR5IikudmFsdWU9PT0idmlzaWJsZSImJnQucHN0eWxlKCJvcGFjaXR5IikucGZWYWx1ZSE9PTAmJkQxKHQpfSkscEplPUQxO0NhLnZpc2libGU9ajYoInZpc2libGUiLHlCKHtvazpkSmUsZWRnZU9rVmlhTm9kZTpwSmV9KSk7Q2EuaGlkZGVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtpZih0KXJldHVybiF0LnZpc2libGUoKX07Q2EuaXNCdW5kbGVkQmV6aWVyPWo2KCJpc0J1bmRsZWRCZXppZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3koKS5zdHlsZUVuYWJsZWQoKT8hdGhpcy5yZW1vdmVkKCkmJnRoaXMucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlPT09ImJlemllciImJnRoaXMudGFrZXNVcFNwYWNlKCk6ITF9KTtDYS5ieXBhc3M9Q2EuY3NzPUNhLnN0eWxlO0NhLnJlbmRlcmVkQ3NzPUNhLnJlbmRlcmVkU3R5bGU7Q2EucmVtb3ZlQnlwYXNzPUNhLnJlbW92ZUNzcz1DYS5yZW1vdmVTdHlsZTtDYS5wc3R5bGU9Q2EucGFyc2VkU3R5bGU7TWY9e307byhobWUsImRlZmluZVN3aXRjaEZ1bmN0aW9uIik7byhOMSwiZGVmaW5lU3dpdGNoU2V0Iik7TjEoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5jeSgpLmF1dG9sb2NrKCk/ITA6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJsb2NrIixvZmY6InVubG9jayJ9KTtOMSh7ZmllbGQ6ImdyYWJiYWJsZSIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxlLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJncmFiaWZ5IixvZmY6InVuZ3JhYmlmeSJ9KTtOMSh7ZmllbGQ6InNlbGVjdGVkIixhYmxlRmllbGQ6InNlbGVjdGFibGUiLG92ZXJyaWRlQWJsZTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVBYmxlIiksb246InNlbGVjdCIsb2ZmOiJ1bnNlbGVjdCJ9KTtOMSh7ZmllbGQ6InNlbGVjdGFibGUiLG92ZXJyaWRlRmllbGQ6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5jeSgpLmF1dG91bnNlbGVjdGlmeSgpPyExOnZvaWQgMH0sIm92ZXJyaWRlRmllbGQiKSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pO01mLmRlc2VsZWN0PU1mLnVuc2VsZWN0O01mLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIHQuX3ByaXZhdGUuZ3JhYmJlZH07TjEoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pO04xKHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSk7TWYuaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQuX3ByaXZhdGUuYWN0aXZlfTtIYT17fSxmbWU9byhmdW5jdGlvbihlKXtyZXR1cm4gbyhmdW5jdGlvbihuKXtmb3IodmFyIGk9dGhpcyxhPVtdLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtpZihsLmlzTm9kZSgpKXtmb3IodmFyIHU9ITEsaD1sLmNvbm5lY3RlZEVkZ2VzKCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdLHA9ZC5zb3VyY2UoKSxtPWQudGFyZ2V0KCk7aWYoZS5ub0luY29taW5nRWRnZXMmJm09PT1sJiZwIT09bHx8ZS5ub091dGdvaW5nRWRnZXMmJnA9PT1sJiZtIT09bCl7dT0hMDticmVha319dXx8YS5wdXNoKGwpfX1yZXR1cm4gdGhpcy5zcGF3bihhLCEwKS5maWx0ZXIobil9LCJkYWdFeHRyZW1pdHlJbXBsIil9LCJkZWZpbmVEYWdFeHRyZW1pdHkiKSxkbWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXRoaXMsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYocy5pc05vZGUoKSlmb3IodmFyIGw9cy5jb25uZWN0ZWRFZGdlcygpLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XSxmPWguc291cmNlKCksZD1oLnRhcmdldCgpO2Uub3V0Z29pbmcmJmY9PT1zPyhpLnB1c2goaCksaS5wdXNoKGQpKTplLmluY29taW5nJiZkPT09cyYmKGkucHVzaChoKSxpLnB1c2goZikpfX1yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIocil9fSwiZGVmaW5lRGFnT25lSG9wIikscG1lPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10aGlzLGk9W10sYT17fTs7KXt2YXIgcz1lLm91dGdvaW5nP24ub3V0Z29lcnMoKTpuLmluY29tZXJzKCk7aWYocy5sZW5ndGg9PT0wKWJyZWFrO2Zvcih2YXIgbD0hMSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLmlkKCk7YVtmXXx8KGFbZl09ITAsaS5wdXNoKGgpLGw9ITApfWlmKCFsKWJyZWFrO249c31yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIocil9fSwiZGVmaW5lRGFnQWxsSG9wcyIpO0hhLmNsZWFyVHJhdmVyc2FsQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl0aGlzW3RdLl9wcml2YXRlLnRyYXZlcnNhbENhY2hlPW51bGx9O2lyKEhhLHtyb290czpmbWUoe25vSW5jb21pbmdFZGdlczohMH0pLGxlYXZlczpmbWUoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOmhsKGRtZSh7b3V0Z29pbmc6ITB9KSwib3V0Z29lcnMiKSxzdWNjZXNzb3JzOnBtZSh7b3V0Z29pbmc6ITB9KSxpbmNvbWVyczpobChkbWUoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOnBtZSh7aW5jb21pbmc6ITB9KX0pO2lyKEhhLHtuZWlnaGJvcmhvb2Q6aGwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5ub2RlcygpLG49MDtuPHIubGVuZ3RoO24rKylmb3IodmFyIGk9cltuXSxhPWkuY29ubmVjdGVkRWRnZXMoKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1sLnNvdXJjZSgpLGg9bC50YXJnZXQoKSxmPWk9PT11P2g6dTtmLmxlbmd0aD4wJiZlLnB1c2goZlswXSksZS5wdXNoKGxbMF0pfXJldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sIm5laWdoYm9yaG9vZCIpLGNsb3NlZE5laWdoYm9yaG9vZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZSl9LCJjbG9zZWROZWlnaGJvcmhvb2QiKSxvcGVuTmVpZ2hib3Job29kOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGUpfSwib3Blbk5laWdoYm9yaG9vZCIpfSk7SGEubmVpZ2hib3VyaG9vZD1IYS5uZWlnaGJvcmhvb2Q7SGEuY2xvc2VkTmVpZ2hib3VyaG9vZD1IYS5jbG9zZWROZWlnaGJvcmhvb2Q7SGEub3Blbk5laWdoYm91cmhvb2Q9SGEub3Blbk5laWdoYm9yaG9vZDtpcihIYSx7c291cmNlOmhsKG8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXSxuO3JldHVybiByJiYobj1yLl9wcml2YXRlLnNvdXJjZXx8ci5jeSgpLmNvbGxlY3Rpb24oKSksbiYmZT9uLmZpbHRlcihlKTpufSwic291cmNlSW1wbCIpLCJzb3VyY2UiKSx0YXJnZXQ6aGwobyhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdLG47cmV0dXJuIHImJihuPXIuX3ByaXZhdGUudGFyZ2V0fHxyLmN5KCkuY29sbGVjdGlvbigpKSxuJiZlP24uZmlsdGVyKGUpOm59LCJ0YXJnZXRJbXBsIiksInRhcmdldCIpLHNvdXJjZXM6bW1lKHthdHRyOiJzb3VyY2UifSksdGFyZ2V0czptbWUoe2F0dHI6InRhcmdldCJ9KX0pO28obW1lLCJkZWZpbmVTb3VyY2VGdW5jdGlvbiIpO2lyKEhhLHtlZGdlc1dpdGg6aGwoZ21lKCksImVkZ2VzV2l0aCIpLGVkZ2VzVG86aGwoZ21lKHt0aGlzSXNTcmM6ITB9KSwiZWRnZXNUbyIpfSk7byhnbWUsImRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uIik7aXIoSGEse2Nvbm5lY3RlZEVkZ2VzOmhsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKGkuaXNOb2RlKCkpZm9yKHZhciBhPWkuX3ByaXZhdGUuZWRnZXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO2UucHVzaChsKX19cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwiY29ubmVjdGVkRWRnZXMiKSxjb25uZWN0ZWROb2RlczpobChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpLmlzRWRnZSgpJiYoZS5wdXNoKGkuc291cmNlKClbMF0pLGUucHVzaChpLnRhcmdldCgpWzBdKSl9cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwiY29ubmVjdGVkTm9kZXMiKSxwYXJhbGxlbEVkZ2VzOmhsKHltZSgpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOmhsKHltZSh7Y29kaXJlY3RlZDohMH0pLCJjb2RpcmVjdGVkRWRnZXMiKX0pO28oeW1lLCJkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24iKTtpcihIYSx7Y29tcG9uZW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmN5KCksaT1uLmNvbGxlY3Rpb24oKSxhPWU9PW51bGw/ci5ub2RlcygpOmUubm9kZXMoKSxzPVtdO2UhPW51bGwmJmEuZW1wdHkoKSYmKGE9ZS5zb3VyY2VzKCkpO3ZhciBsPW8oZnVuY3Rpb24oZixkKXtpLm1lcmdlKGYpLGEudW5tZXJnZShmKSxkLm1lcmdlKGYpfSwidmlzaXRJbkNvbXBvbmVudCIpO2lmKGEuZW1wdHkoKSlyZXR1cm4gci5zcGF3bigpO3ZhciB1PW8oZnVuY3Rpb24oKXt2YXIgZj1uLmNvbGxlY3Rpb24oKTtzLnB1c2goZik7dmFyIGQ9YVswXTtsKGQsZiksci5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOmQsdmlzaXQ6byhmdW5jdGlvbihtKXtyZXR1cm4gbChtLGYpfSwidmlzaXQiKX0pLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihtKXtyLmhhcyhtKSYmZi5oYXMobS5zb3VyY2UoKSkmJmYuaGFzKG0udGFyZ2V0KCkpJiZmLm1lcmdlKG0pfSl9KX0sIl9sb29wIik7ZG8gdSgpO3doaWxlKGEubGVuZ3RoPjApO3JldHVybiBzfSwiY29tcG9uZW50cyIpLGNvbXBvbmVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtyZXR1cm4gZS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZSlbMF19LCJjb21wb25lbnQiKX0pO0hhLmNvbXBvbmVudHNPZj1IYS5jb21wb25lbnRzO0FhPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsaT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7aWYoZT09PXZvaWQgMCl7ZGkoIkEgY29sbGVjdGlvbiBtdXN0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGNvcmUiKTtyZXR1cm59dmFyIGE9bmV3IEpjLHM9ITE7aWYoIXIpcj1bXTtlbHNlIGlmKHIubGVuZ3RoPjAmJlVyKHJbMF0pJiYhcGIoclswXSkpe3M9ITA7Zm9yKHZhciBsPVtdLHU9bmV3IFMxLGg9MCxmPXIubGVuZ3RoO2g8ZjtoKyspe3ZhciBkPXJbaF07ZC5kYXRhPT1udWxsJiYoZC5kYXRhPXt9KTt2YXIgcD1kLmRhdGE7aWYocC5pZD09bnVsbClwLmlkPWFnZSgpO2Vsc2UgaWYoZS5oYXNFbGVtZW50V2l0aElkKHAuaWQpfHx1LmhhcyhwLmlkKSljb250aW51ZTt2YXIgbT1uZXcgRzYoZSxkLCExKTtsLnB1c2gobSksdS5hZGQocC5pZCl9cj1sfXRoaXMubGVuZ3RoPTA7Zm9yKHZhciBnPTAseT1yLmxlbmd0aDtnPHk7ZysrKXt2YXIgdj1yW2ddWzBdO2lmKHYhPW51bGwpe3ZhciB4PXYuX3ByaXZhdGUuZGF0YS5pZDsoIW58fCFhLmhhcyh4KSkmJihuJiZhLnNldCh4LHtpbmRleDp0aGlzLmxlbmd0aCxlbGU6dn0pLHRoaXNbdGhpcy5sZW5ndGhdPXYsdGhpcy5sZW5ndGgrKyl9fXRoaXMuX3ByaXZhdGU9e2VsZXM6dGhpcyxjeTplLGdldCBtYXAoKXtyZXR1cm4gdGhpcy5sYXp5TWFwPT1udWxsJiZ0aGlzLnJlYnVpbGRNYXAoKSx0aGlzLmxhenlNYXB9LHNldCBtYXAoYil7dGhpcy5sYXp5TWFwPWJ9LHJlYnVpbGRNYXA6byhmdW5jdGlvbigpe2Zvcih2YXIgdz10aGlzLmxhenlNYXA9bmV3IEpjLF89dGhpcy5lbGVzLFQ9MDtUPF8ubGVuZ3RoO1QrKyl7dmFyIEU9X1tUXTt3LnNldChFLmlkKCkse2luZGV4OlQsZWxlOkV9KX19LCJyZWJ1aWxkTWFwIil9LG4mJih0aGlzLl9wcml2YXRlLm1hcD1hKSxzJiYhaSYmdGhpcy5yZXN0b3JlKCl9LCJDb2xsZWN0aW9uIiksTW49RzYucHJvdG90eXBlPUFhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7TW4uaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iY29sbGVjdGlvbiJ9O01uLnNwYXduPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBBYSh0aGlzLmN5KCksdCxlKX07TW4uc3Bhd25TZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Bhd24odGhpcyl9O01uLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O01uLnJlbmRlcmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKX07TW4uZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfTtNbi5jb2xsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIFdtZSh0aGlzKT90aGlzOm5ldyBBYSh0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9O01uLnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgQWEodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX07TW4uaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih0KXtyZXR1cm4gdD0iIit0LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh0KX07TW4uZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24odCl7dD0iIit0O3ZhciBlPXRoaXMuX3ByaXZhdGUuY3kscj10aGlzLl9wcml2YXRlLm1hcC5nZXQodCk7cmV0dXJuIHI/ci5lbGU6bmV3IEFhKGUpfTtNbi4kaWQ9TW4uZ2V0RWxlbWVudEJ5SWQ7TW4ucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxlPXQuX3ByaXZhdGUuZWxlbWVudHMscj10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGUuX3ByaXZhdGUubWFwLmdldChyKS5pbmRleH07TW4uaW5kZXhPZj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChlKS5pbmRleH07TW4uaW5kZXhPZklkPWZ1bmN0aW9uKHQpe3JldHVybiB0PSIiK3QsdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHQpLmluZGV4fTtNbi5qc29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZWxlbWVudCgpLHI9dGhpcy5jeSgpO2lmKGU9PW51bGwmJnQpcmV0dXJuIHRoaXM7aWYoZSE9bnVsbCl7dmFyIG49ZS5fcHJpdmF0ZTtpZihVcih0KSl7aWYoci5zdGFydEJhdGNoKCksdC5kYXRhKXtlLmRhdGEodC5kYXRhKTt2YXIgaT1uLmRhdGE7aWYoZS5pc0VkZ2UoKSl7dmFyIGE9ITEscz17fSxsPXQuZGF0YS5zb3VyY2UsdT10LmRhdGEudGFyZ2V0O2whPW51bGwmJmwhPWkuc291cmNlJiYocy5zb3VyY2U9IiIrbCxhPSEwKSx1IT1udWxsJiZ1IT1pLnRhcmdldCYmKHMudGFyZ2V0PSIiK3UsYT0hMCksYSYmKGU9ZS5tb3ZlKHMpKX1lbHNle3ZhciBoPSJwYXJlbnQiaW4gdC5kYXRhLGY9dC5kYXRhLnBhcmVudDtoJiYoZiE9bnVsbHx8aS5wYXJlbnQhPW51bGwpJiZmIT1pLnBhcmVudCYmKGY9PT12b2lkIDAmJihmPW51bGwpLGYhPW51bGwmJihmPSIiK2YpLGU9ZS5tb3ZlKHtwYXJlbnQ6Zn0pKX19dC5wb3NpdGlvbiYmZS5wb3NpdGlvbih0LnBvc2l0aW9uKTt2YXIgZD1vKGZ1bmN0aW9uKHksdix4KXt2YXIgYj10W3ldO2IhPW51bGwmJmIhPT1uW3ldJiYoYj9lW3ZdKCk6ZVt4XSgpKX0sImNoZWNrU3dpdGNoIik7cmV0dXJuIGQoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksZCgic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLGQoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLGQoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxkKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksZCgicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHQuY2xhc3NlcyE9bnVsbCYmZS5jbGFzc2VzKHQuY2xhc3Nlcyksci5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih0PT09dm9pZCAwKXt2YXIgcD17ZGF0YTpaYyhuLmRhdGEpLHBvc2l0aW9uOlpjKG4ucG9zaXRpb24pLGdyb3VwOm4uZ3JvdXAscmVtb3ZlZDpuLnJlbW92ZWQsc2VsZWN0ZWQ6bi5zZWxlY3RlZCxzZWxlY3RhYmxlOm4uc2VsZWN0YWJsZSxsb2NrZWQ6bi5sb2NrZWQsZ3JhYmJhYmxlOm4uZ3JhYmJhYmxlLHBhbm5hYmxlOm4ucGFubmFibGUsY2xhc3NlczpudWxsfTtwLmNsYXNzZXM9IiI7dmFyIG09MDtyZXR1cm4gbi5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIHAuY2xhc3Nlcys9bSsrPT09MD9nOiIgIitnfSkscH19fTtNbi5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV0sbj1yLmpzb24oKTt0LnB1c2gobil9cmV0dXJuIHR9O01uLmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuY3koKSxlPVtdLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpc1tyXSxpPW4uanNvbigpLGE9bmV3IEc2KHQsaSwhMSk7ZS5wdXNoKGEpfXJldHVybiBuZXcgQWEodCxlKX07TW4uY29weT1Nbi5jbG9uZTtNbi5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxyPXRoaXMsbj1yLmN5KCksaT1uLl9wcml2YXRlLGE9W10scz1bXSxsLHU9MCxoPXIubGVuZ3RoO3U8aDt1Kyspe3ZhciBmPXJbdV07ZSYmIWYucmVtb3ZlZCgpfHwoZi5pc05vZGUoKT9hLnB1c2goZik6cy5wdXNoKGYpKX1sPWEuY29uY2F0KHMpO3ZhciBkLHA9byhmdW5jdGlvbigpe2wuc3BsaWNlKGQsMSksZC0tfSwicmVtb3ZlRnJvbUVsZW1lbnRzIik7Zm9yKGQ9MDtkPGwubGVuZ3RoO2QrKyl7dmFyIG09bFtkXSxnPW0uX3ByaXZhdGUseT1nLmRhdGE7aWYobS5jbGVhclRyYXZlcnNhbENhY2hlKCksISghZSYmIWcucmVtb3ZlZCkpe2lmKHkuaWQ9PT12b2lkIDApeS5pZD1hZ2UoKTtlbHNlIGlmKHh0KHkuaWQpKXkuaWQ9IiIreS5pZDtlbHNlIGlmKElmKHkuaWQpfHwhWnQoeS5pZCkpe2RpKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIreS5pZCsiYCIpLHAoKTtjb250aW51ZX1lbHNlIGlmKG4uaGFzRWxlbWVudFdpdGhJZCh5LmlkKSl7ZGkoIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIreS5pZCsiYCIpLHAoKTtjb250aW51ZX19dmFyIHY9eS5pZDtpZihtLmlzTm9kZSgpKXt2YXIgeD1nLnBvc2l0aW9uO3gueD09bnVsbCYmKHgueD0wKSx4Lnk9PW51bGwmJih4Lnk9MCl9aWYobS5pc0VkZ2UoKSl7Zm9yKHZhciBiPW0sdz1bInNvdXJjZSIsInRhcmdldCJdLF89dy5sZW5ndGgsVD0hMSxFPTA7RTxfO0UrKyl7dmFyIEw9d1tFXSxTPXlbTF07eHQoUykmJihTPXlbTF09IiIreVtMXSksUz09bnVsbHx8Uz09PSIiPyhkaSgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIit2KyJgIHdpdGggdW5zcGVjaWZpZWQgIitMKSxUPSEwKTpuLmhhc0VsZW1lbnRXaXRoSWQoUyl8fChkaSgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIit2KyJgIHdpdGggbm9uZXhpc3RhbnQgIitMKyIgYCIrUysiYCIpLFQ9ITApfWlmKFQpe3AoKTtjb250aW51ZX12YXIgQT1uLmdldEVsZW1lbnRCeUlkKHkuc291cmNlKSxJPW4uZ2V0RWxlbWVudEJ5SWQoeS50YXJnZXQpO0Euc2FtZShJKT9BLl9wcml2YXRlLmVkZ2VzLnB1c2goYik6KEEuX3ByaXZhdGUuZWRnZXMucHVzaChiKSxJLl9wcml2YXRlLmVkZ2VzLnB1c2goYikpLGIuX3ByaXZhdGUuc291cmNlPUEsYi5fcHJpdmF0ZS50YXJnZXQ9SX1nLm1hcD1uZXcgSmMsZy5tYXAuc2V0KHYse2VsZTptLGluZGV4OjB9KSxnLnJlbW92ZWQ9ITEsZSYmbi5hZGRUb1Bvb2wobSl9Zm9yKHZhciBEPTA7RDxhLmxlbmd0aDtEKyspe3ZhciBrPWFbRF0sUj1rLl9wcml2YXRlLmRhdGE7eHQoUi5wYXJlbnQpJiYoUi5wYXJlbnQ9IiIrUi5wYXJlbnQpO3ZhciBDPVIucGFyZW50LE89QyE9bnVsbDtpZihPfHxrLl9wcml2YXRlLnBhcmVudCl7dmFyIE49ay5fcHJpdmF0ZS5wYXJlbnQ/bi5jb2xsZWN0aW9uKCkubWVyZ2Uoay5fcHJpdmF0ZS5wYXJlbnQpOm4uZ2V0RWxlbWVudEJ5SWQoQyk7aWYoTi5lbXB0eSgpKVIucGFyZW50PXZvaWQgMDtlbHNlIGlmKE5bMF0ucmVtb3ZlZCgpKW9uKCJOb2RlIGFkZGVkIHdpdGggbWlzc2luZyBwYXJlbnQsIHJlZmVyZW5jZSB0byBwYXJlbnQgcmVtb3ZlZCIpLFIucGFyZW50PXZvaWQgMCxrLl9wcml2YXRlLnBhcmVudD1udWxsO2Vsc2V7Zm9yKHZhciBQPSExLEY9TjshRi5lbXB0eSgpOyl7aWYoay5zYW1lKEYpKXtQPSEwLFIucGFyZW50PXZvaWQgMDticmVha31GPUYucGFyZW50KCl9UHx8KE5bMF0uX3ByaXZhdGUuY2hpbGRyZW4ucHVzaChrKSxrLl9wcml2YXRlLnBhcmVudD1OWzBdLGkuaGFzQ29tcG91bmROb2Rlcz0hMCl9fX1pZihsLmxlbmd0aD4wKXtmb3IodmFyIEI9bC5sZW5ndGg9PT1yLmxlbmd0aD9yOm5ldyBBYShuLGwpLEc9MDtHPEIubGVuZ3RoO0crKyl7dmFyIHo9QltHXTt6LmlzTm9kZSgpfHwoei5wYXJhbGxlbEVkZ2VzKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLHouc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLHoudGFyZ2V0KCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpKX12YXIgVztpLmhhc0NvbXBvdW5kTm9kZXM/Vz1uLmNvbGxlY3Rpb24oKS5tZXJnZShCKS5tZXJnZShCLmNvbm5lY3RlZE5vZGVzKCkpLm1lcmdlKEIucGFyZW50KCkpOlc9QixXLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHQpLHQ/Qi5lbWl0QW5kTm90aWZ5KCJhZGQiKTplJiZCLmVtaXQoImFkZCIpfXJldHVybiByfTtNbi5yZW1vdmVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtyZXR1cm4gdCYmdC5fcHJpdmF0ZS5yZW1vdmVkfTtNbi5pbnNpZGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0JiYhdC5fcHJpdmF0ZS5yZW1vdmVkfTtNbi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAsZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAscj10aGlzLG49W10saT17fSxhPXIuX3ByaXZhdGUuY3k7ZnVuY3Rpb24gcyhDKXtmb3IodmFyIE89Qy5fcHJpdmF0ZS5lZGdlcyxOPTA7TjxPLmxlbmd0aDtOKyspdShPW05dKX1vKHMsImFkZENvbm5lY3RlZEVkZ2VzIik7ZnVuY3Rpb24gbChDKXtmb3IodmFyIE89Qy5fcHJpdmF0ZS5jaGlsZHJlbixOPTA7TjxPLmxlbmd0aDtOKyspdShPW05dKX1vKGwsImFkZENoaWxkcmVuIik7ZnVuY3Rpb24gdShDKXt2YXIgTz1pW0MuaWQoKV07ZSYmQy5yZW1vdmVkKCl8fE98fChpW0MuaWQoKV09ITAsQy5pc05vZGUoKT8obi5wdXNoKEMpLHMoQyksbChDKSk6bi51bnNoaWZ0KEMpKX1vKHUsImFkZCIpO2Zvcih2YXIgaD0wLGY9ci5sZW5ndGg7aDxmO2grKyl7dmFyIGQ9cltoXTt1KGQpfWZ1bmN0aW9uIHAoQyxPKXt2YXIgTj1DLl9wcml2YXRlLmVkZ2VzO09mKE4sTyksQy5jbGVhclRyYXZlcnNhbENhY2hlKCl9byhwLCJyZW1vdmVFZGdlUmVmIik7ZnVuY3Rpb24gbShDKXtDLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1vKG0sInJlbW92ZVBhcmFsbGVsUmVmIik7dmFyIGc9W107Zy5pZHM9e307ZnVuY3Rpb24geShDLE8pe089T1swXSxDPUNbMF07dmFyIE49Qy5fcHJpdmF0ZS5jaGlsZHJlbixQPUMuaWQoKTtPZihOLE8pLE8uX3ByaXZhdGUucGFyZW50PW51bGwsZy5pZHNbUF18fChnLmlkc1tQXT0hMCxnLnB1c2goQykpfW8oeSwicmVtb3ZlQ2hpbGRSZWYiKSxyLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGUmJmEucmVtb3ZlRnJvbVBvb2wobik7Zm9yKHZhciB2PTA7djxuLmxlbmd0aDt2Kyspe3ZhciB4PW5bdl07aWYoeC5pc0VkZ2UoKSl7dmFyIGI9eC5zb3VyY2UoKVswXSx3PXgudGFyZ2V0KClbMF07cChiLHgpLHAodyx4KTtmb3IodmFyIF89eC5wYXJhbGxlbEVkZ2VzKCksVD0wO1Q8Xy5sZW5ndGg7VCsrKXt2YXIgRT1fW1RdO20oRSksRS5pc0J1bmRsZWRCZXppZXIoKSYmRS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgTD14LnBhcmVudCgpO0wubGVuZ3RoIT09MCYmeShMLHgpfWUmJih4Ll9wcml2YXRlLnJlbW92ZWQ9ITApfXZhciBTPWEuX3ByaXZhdGUuZWxlbWVudHM7YS5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzPSExO2Zvcih2YXIgQT0wO0E8Uy5sZW5ndGg7QSsrKXt2YXIgST1TW0FdO2lmKEkuaXNQYXJlbnQoKSl7YS5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzPSEwO2JyZWFrfX12YXIgRD1uZXcgQWEodGhpcy5jeSgpLG4pO0Quc2l6ZSgpPjAmJih0P0QuZW1pdEFuZE5vdGlmeSgicmVtb3ZlIik6ZSYmRC5lbWl0KCJyZW1vdmUiKSk7Zm9yKHZhciBrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBSPWdba107KCFlfHwhUi5yZW1vdmVkKCkpJiZSLnVwZGF0ZVN0eWxlKCl9cmV0dXJuIER9O01uLm1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPXRoaXMsbj0hMSxpPSExLGE9byhmdW5jdGlvbihnKXtyZXR1cm4gZz09bnVsbD9nOiIiK2d9LCJ0b1N0cmluZyIpO2lmKHQuc291cmNlIT09dm9pZCAwfHx0LnRhcmdldCE9PXZvaWQgMCl7dmFyIHM9YSh0LnNvdXJjZSksbD1hKHQudGFyZ2V0KSx1PXMhPW51bGwmJmUuaGFzRWxlbWVudFdpdGhJZChzKSxoPWwhPW51bGwmJmUuaGFzRWxlbWVudFdpdGhJZChsKTsodXx8aCkmJihlLmJhdGNoKGZ1bmN0aW9uKCl7ci5yZW1vdmUobixpKSxyLmVtaXRBbmROb3RpZnkoIm1vdmVvdXQiKTtmb3IodmFyIG09MDttPHIubGVuZ3RoO20rKyl7dmFyIGc9clttXSx5PWcuX3ByaXZhdGUuZGF0YTtnLmlzRWRnZSgpJiYodSYmKHkuc291cmNlPXMpLGgmJih5LnRhcmdldD1sKSl9ci5yZXN0b3JlKG4saSl9KSxyLmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih0LnBhcmVudCE9PXZvaWQgMCl7dmFyIGY9YSh0LnBhcmVudCksZD1mPT09bnVsbHx8ZS5oYXNFbGVtZW50V2l0aElkKGYpO2lmKGQpe3ZhciBwPWY9PT1udWxsP3ZvaWQgMDpmO2UuYmF0Y2goZnVuY3Rpb24oKXt2YXIgbT1yLnJlbW92ZShuLGkpO20uZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgeT1yW2ddLHY9eS5fcHJpdmF0ZS5kYXRhO3kuaXNOb2RlKCkmJih2LnBhcmVudD1wKX1tLnJlc3RvcmUobixpKX0pLHIuZW1pdEFuZE5vdGlmeSgibW92ZSIpfX1yZXR1cm4gdGhpc307W3ZnZSxTWmUseDYsUmYsRTEsJFplLFk2LG5KZSxVZ2UsSGdlLGxKZSxSNixiNixDYSxNZixIYV0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihNbix0KX0pO21KZT17YWRkOm8oZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzO2lmKHdvKGUpKXt2YXIgaT1lO2lmKGkuX3ByaXZhdGUuY3k9PT1uKXI9aS5yZXN0b3JlKCk7ZWxzZXtmb3IodmFyIGE9W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2EucHVzaChsLmpzb24oKSl9cj1uZXcgQWEobixhKX19ZWxzZSBpZihrbihlKSl7dmFyIHU9ZTtyPW5ldyBBYShuLHUpfWVsc2UgaWYoVXIoZSkmJihrbihlLm5vZGVzKXx8a24oZS5lZGdlcykpKXtmb3IodmFyIGg9ZSxmPVtdLGQ9WyJub2RlcyIsImVkZ2VzIl0scD0wLG09ZC5sZW5ndGg7cDxtO3ArKyl7dmFyIGc9ZFtwXSx5PWhbZ107aWYoa24oeSkpZm9yKHZhciB2PTAseD15Lmxlbmd0aDt2PHg7disrKXt2YXIgYj1pcih7Z3JvdXA6Z30seVt2XSk7Zi5wdXNoKGIpfX1yPW5ldyBBYShuLGYpfWVsc2V7dmFyIHc9ZTtyPW5ldyBHNihuLHcpLmNvbGxlY3Rpb24oKX1yZXR1cm4gcn0sImFkZCIpLHJlbW92ZTpvKGZ1bmN0aW9uKGUpe2lmKCF3byhlKSl7aWYoWnQoZSkpe3ZhciByPWU7ZT10aGlzLiQocil9fXJldHVybiBlLnJlbW92ZSgpfSwicmVtb3ZlIil9O28oZ0plLCJnZW5lcmF0ZUN1YmljQmV6aWVyIik7eUplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuKXtyZXR1cm4tbi50ZW5zaW9uKm4ueC1uLmZyaWN0aW9uKm4udn1vKHQsInNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlIik7ZnVuY3Rpb24gZShuLGksYSl7dmFyIHM9e3g6bi54K2EuZHgqaSx2Om4udithLmR2KmksdGVuc2lvbjpuLnRlbnNpb24sZnJpY3Rpb246bi5mcmljdGlvbn07cmV0dXJue2R4OnMudixkdjp0KHMpfX1vKGUsInNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZSIpO2Z1bmN0aW9uIHIobixpKXt2YXIgYT17ZHg6bi52LGR2OnQobil9LHM9ZShuLGkqLjUsYSksbD1lKG4saSouNSxzKSx1PWUobixpLGwpLGg9MS82KihhLmR4KzIqKHMuZHgrbC5keCkrdS5keCksZj0xLzYqKGEuZHYrMioocy5kditsLmR2KSt1LmR2KTtyZXR1cm4gbi54PW4ueCtoKmksbi52PW4uditmKmksbn1yZXR1cm4gbyhyLCJzcHJpbmdJbnRlZ3JhdGVTdGF0ZSIpLG8oZnVuY3Rpb24gbihpLGEscyl7dmFyIGw9e3g6LTEsdjowLHRlbnNpb246bnVsbCxmcmljdGlvbjpudWxsfSx1PVswXSxoPTAsZj0xLzFlNCxkPTE2LzFlMyxwLG0sZztmb3IoaT1wYXJzZUZsb2F0KGkpfHw1MDAsYT1wYXJzZUZsb2F0KGEpfHwyMCxzPXN8fG51bGwsbC50ZW5zaW9uPWksbC5mcmljdGlvbj1hLHA9cyE9PW51bGwscD8oaD1uKGksYSksbT1oL3MqZCk6bT1kO2c9cihnfHxsLG0pLHUucHVzaCgxK2cueCksaCs9MTYsTWF0aC5hYnMoZy54KT5mJiZNYXRoLmFicyhnLnYpPmY7KTtyZXR1cm4gcD9mdW5jdGlvbih5KXtyZXR1cm4gdVt5Kih1Lmxlbmd0aC0xKXwwXX06aH0sInNwcmluZ1JLNEZhY3RvcnkiKX0oKSxSbj1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWdKZShlLHIsbixpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLHUpe3JldHVybiBzKyhsLXMpKmEodSl9fSwiY3ViaWNCZXppZXIiKSx3Nj17bGluZWFyOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlKyhyLWUpKm59LCJsaW5lYXIiKSxlYXNlOlJuKC4yNSwuMSwuMjUsMSksImVhc2UtaW4iOlJuKC40MiwwLDEsMSksImVhc2Utb3V0IjpSbigwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6Um4oLjQyLDAsLjU4LDEpLCJlYXNlLWluLXNpbmUiOlJuKC40NywwLC43NDUsLjcxNSksImVhc2Utb3V0LXNpbmUiOlJuKC4zOSwuNTc1LC41NjUsMSksImVhc2UtaW4tb3V0LXNpbmUiOlJuKC40NDUsLjA1LC41NSwuOTUpLCJlYXNlLWluLXF1YWQiOlJuKC41NSwuMDg1LC42OCwuNTMpLCJlYXNlLW91dC1xdWFkIjpSbiguMjUsLjQ2LC40NSwuOTQpLCJlYXNlLWluLW91dC1xdWFkIjpSbiguNDU1LC4wMywuNTE1LC45NTUpLCJlYXNlLWluLWN1YmljIjpSbiguNTUsLjA1NSwuNjc1LC4xOSksImVhc2Utb3V0LWN1YmljIjpSbiguMjE1LC42MSwuMzU1LDEpLCJlYXNlLWluLW91dC1jdWJpYyI6Um4oLjY0NSwuMDQ1LC4zNTUsMSksImVhc2UtaW4tcXVhcnQiOlJuKC44OTUsLjAzLC42ODUsLjIyKSwiZWFzZS1vdXQtcXVhcnQiOlJuKC4xNjUsLjg0LC40NCwxKSwiZWFzZS1pbi1vdXQtcXVhcnQiOlJuKC43NywwLC4xNzUsMSksImVhc2UtaW4tcXVpbnQiOlJuKC43NTUsLjA1LC44NTUsLjA2KSwiZWFzZS1vdXQtcXVpbnQiOlJuKC4yMywxLC4zMiwxKSwiZWFzZS1pbi1vdXQtcXVpbnQiOlJuKC44NiwwLC4wNywxKSwiZWFzZS1pbi1leHBvIjpSbiguOTUsLjA1LC43OTUsLjAzNSksImVhc2Utb3V0LWV4cG8iOlJuKC4xOSwxLC4yMiwxKSwiZWFzZS1pbi1vdXQtZXhwbyI6Um4oMSwwLDAsMSksImVhc2UtaW4tY2lyYyI6Um4oLjYsLjA0LC45OCwuMzM1KSwiZWFzZS1vdXQtY2lyYyI6Um4oLjA3NSwuODIsLjE2NSwxKSwiZWFzZS1pbi1vdXQtY2lyYyI6Um4oLjc4NSwuMTM1LC4xNSwuODYpLHNwcmluZzpvKGZ1bmN0aW9uKGUscixuKXtpZihuPT09MClyZXR1cm4gdzYubGluZWFyO3ZhciBpPXlKZShlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYSsocy1hKSppKGwpfX0sInNwcmluZyIpLCJjdWJpYy1iZXppZXIiOlJufTtvKHZtZSwiZ2V0RWFzZWRWYWx1ZSIpO28oeG1lLCJnZXRWYWx1ZSIpO28oaDEsImVhc2UiKTtvKHZKZSwic3RlcCQxIik7byhYeCwidmFsaWQiKTtvKHhKZSwic3RhcnRBbmltYXRpb24iKTtvKGJtZSwic3RlcEFsbCIpO2JKZT17YW5pbWF0ZTpzbi5hbmltYXRlKCksYW5pbWF0aW9uOnNuLmFuaW1hdGlvbigpLGFuaW1hdGVkOnNuLmFuaW1hdGVkKCksY2xlYXJRdWV1ZTpzbi5jbGVhclF1ZXVlKCksZGVsYXk6c24uZGVsYXkoKSxkZWxheUFuaW1hdGlvbjpzbi5kZWxheUFuaW1hdGlvbigpLHN0b3A6c24uc3RvcCgpLGFkZFRvQW5pbWF0aW9uUG9vbDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ci5zdHlsZUVuYWJsZWQoKSYmci5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGUpfSwiYWRkVG9BbmltYXRpb25Qb29sIiksc3RvcEFuaW1hdGlvbkxvb3A6byhmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LCJzdG9wQW5pbWF0aW9uTG9vcCIpLHN0YXJ0QW5pbWF0aW9uTG9vcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihlLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nPSEwLCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybjtmdW5jdGlvbiByKCl7ZS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyYmQTYobyhmdW5jdGlvbihhKXtibWUoYSxlKSxyKCl9LCJhbmltYXRpb25TdGVwIikpfW8ociwiaGVhZGxlc3NTdGVwIik7dmFyIG49ZS5yZW5kZXJlcigpO24mJm4uYmVmb3JlUmVuZGVyP24uYmVmb3JlUmVuZGVyKG8oZnVuY3Rpb24oYSxzKXtibWUocyxlKX0sInJlbmRlcmVyQW5pbWF0aW9uU3RlcCIpLG4uYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTpyKCl9LCJzdGFydEFuaW1hdGlvbkxvb3AiKX0sd0plPXtxdWFsaWZpZXJDb21wYXJlOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09bnVsbHx8cj09bnVsbD9lPT1udWxsJiZyPT1udWxsOmUuc2FtZVRleHQocil9LCJxdWFsaWZpZXJDb21wYXJlIiksZXZlbnRNYXRjaGVzOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIucXVhbGlmaWVyO3JldHVybiBpIT1udWxsP2UhPT1uLnRhcmdldCYmcGIobi50YXJnZXQpJiZpLm1hdGNoZXMobi50YXJnZXQpOiEwfSwiZXZlbnRNYXRjaGVzIiksYWRkRXZlbnRGaWVsZHM6byhmdW5jdGlvbihlLHIpe3IuY3k9ZSxyLnRhcmdldD1lfSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHIucXVhbGlmaWVyIT1udWxsP24udGFyZ2V0OmV9LCJjYWxsYmFja0NvbnRleHQiKX0scDY9byhmdW5jdGlvbihlKXtyZXR1cm4gWnQoZSk/bmV3IFBmKGUpOmV9LCJhcmdTZWxlY3RvciIpLHFnZT17Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5lbWl0dGVyfHwoZS5lbWl0dGVyPW5ldyBxNih3SmUsdGhpcykpLHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub24oZSxwNihyKSxuKSx0aGlzfSwib24iKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZSxwNihyKSxuKSx0aGlzfSwicmVtb3ZlTGlzdGVuZXIiKSxyZW1vdmVBbGxMaXN0ZW5lcnM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSwicmVtb3ZlQWxsTGlzdGVuZXJzIiksb25lOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSxwNihyKSxuKSx0aGlzfSwib25lIiksb25jZTpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGUscDYociksbiksdGhpc30sIm9uY2UiKSxlbWl0Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChlLHIpLHRoaXN9LCJlbWl0IiksZW1pdEFuZE5vdGlmeTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuZW1pdChlKSx0aGlzLm5vdGlmeShlLHIpLHRoaXN9LCJlbWl0QW5kTm90aWZ5Iil9O3NuLmV2ZW50QWxpYXNlc09uKHFnZSk7V1A9e3BuZzpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGU9ZXx8e30sci5wbmcoZSl9LCJwbmciKSxqcGc6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBlPWV8fHt9LGUuYmc9ZS5iZ3x8IiNmZmYiLHIuanBnKGUpfSwianBnIil9O1dQLmpwZWc9V1AuanBnO1Q2PXtsYXlvdXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PW51bGwpe2RpKCJMYXlvdXQgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufWlmKGUubmFtZT09bnVsbCl7ZGkoIkEgYG5hbWVgIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59dmFyIG49ZS5uYW1lLGk9ci5leHRlbnNpb24oImxheW91dCIsbik7aWYoaT09bnVsbCl7ZGkoIk5vIHN1Y2ggbGF5b3V0IGAiK24rImAgZm91bmQuICBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpO3JldHVybn12YXIgYTtadChlLmVsZXMpP2E9ci4kKGUuZWxlcyk6YT1lLmVsZXMhPW51bGw/ZS5lbGVzOnIuJCgpO3ZhciBzPW5ldyBpKGlyKHt9LGUse2N5OnIsZWxlczphfSkpO3JldHVybiBzfSwibGF5b3V0Iil9O1Q2LmNyZWF0ZUxheW91dD1UNi5tYWtlTGF5b3V0PVQ2LmxheW91dDtUSmU9e25vdGlmeTpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5fcHJpdmF0ZTtpZih0aGlzLmJhdGNoaW5nKCkpe24uYmF0Y2hOb3RpZmljYXRpb25zPW4uYmF0Y2hOb3RpZmljYXRpb25zfHx7fTt2YXIgaT1uLmJhdGNoTm90aWZpY2F0aW9uc1tlXT1uLmJhdGNoTm90aWZpY2F0aW9uc1tlXXx8dGhpcy5jb2xsZWN0aW9uKCk7ciE9bnVsbCYmaS5tZXJnZShyKTtyZXR1cm59aWYobi5ub3RpZmljYXRpb25zRW5hYmxlZCl7dmFyIGE9dGhpcy5yZW5kZXJlcigpO3RoaXMuZGVzdHJveWVkKCl8fCFhfHxhLm5vdGlmeShlLHIpfX0sIm5vdGlmeSIpLG5vdGlmaWNhdGlvbnM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO3JldHVybiBlPT09dm9pZCAwP3Iubm90aWZpY2F0aW9uc0VuYWJsZWQ6KHIubm90aWZpY2F0aW9uc0VuYWJsZWQ9ISFlLHRoaXMpfSwibm90aWZpY2F0aW9ucyIpLG5vTm90aWZpY2F0aW9uczpvKGZ1bmN0aW9uKGUpe3RoaXMubm90aWZpY2F0aW9ucyghMSksZSgpLHRoaXMubm90aWZpY2F0aW9ucyghMCl9LCJub05vdGlmaWNhdGlvbnMiKSxiYXRjaGluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudD4wfSwiYmF0Y2hpbmciKSxzdGFydEJhdGNoOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmJhdGNoQ291bnQ9PW51bGwmJihlLmJhdGNoQ291bnQ9MCksZS5iYXRjaENvdW50PT09MCYmKGUuYmF0Y2hTdHlsZUVsZXM9dGhpcy5jb2xsZWN0aW9uKCksZS5iYXRjaE5vdGlmaWNhdGlvbnM9e30pLGUuYmF0Y2hDb3VudCsrLHRoaXN9LCJzdGFydEJhdGNoIiksZW5kQmF0Y2g6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoZS5iYXRjaENvdW50PT09MClyZXR1cm4gdGhpcztpZihlLmJhdGNoQ291bnQtLSxlLmJhdGNoQ291bnQ9PT0wKXtlLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7dmFyIHI9dGhpcy5yZW5kZXJlcigpO09iamVjdC5rZXlzKGUuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPWUuYmF0Y2hOb3RpZmljYXRpb25zW25dO2kuZW1wdHkoKT9yLm5vdGlmeShuKTpyLm5vdGlmeShuLGkpfSl9cmV0dXJuIHRoaXN9LCJlbmRCYXRjaCIpLGJhdGNoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhcnRCYXRjaCgpLGUoKSx0aGlzLmVuZEJhdGNoKCksdGhpc30sImJhdGNoIiksYmF0Y2hEYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV0scz1lW2FdLGw9ci5nZXRFbGVtZW50QnlJZChhKTtsLmRhdGEocyl9fSl9LCJiYXRjaERhdGEiKX0sa0plPV9hKHtoaWRlRWRnZXNPblZpZXdwb3J0OiExLHRleHR1cmVPblZpZXdwb3J0OiExLG1vdGlvbkJsdXI6ITEsbW90aW9uQmx1ck9wYWNpdHk6LjA1LHBpeGVsUmF0aW86dm9pZCAwLGRlc2t0b3BUYXBUaHJlc2hvbGQ6NCx0b3VjaFRhcFRocmVzaG9sZDo4LHdoZWVsU2Vuc2l0aXZpdHk6MSxkZWJ1ZzohMSxzaG93RnBzOiExfSksWVA9e3JlbmRlclRvOm8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gYS5yZW5kZXJUbyhlLHIsbixpKSx0aGlzfSwicmVuZGVyVG8iKSxyZW5kZXJlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXJ9LCJyZW5kZXJlciIpLGZvcmNlUmVuZGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3RpZnkoImRyYXciKSx0aGlzfSwiZm9yY2VSZW5kZXIiKSxyZXNpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmFsaWRhdGVTaXplKCksdGhpcy5lbWl0QW5kTm90aWZ5KCJyZXNpemUiKSx0aGlzfSwicmVzaXplIiksaW5pdFJlbmRlcmVyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuZXh0ZW5zaW9uKCJyZW5kZXJlciIsZS5uYW1lKTtpZihuPT1udWxsKXtkaSgiQ2FuIG5vdCBpbml0aWFsaXNlOiBObyBzdWNoIHJlbmRlcmVyIGAiLmNvbmNhdChlLm5hbWUsImAgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/IikpO3JldHVybn1lLndoZWVsU2Vuc2l0aXZpdHkhPT12b2lkIDAmJm9uKCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS4iKTt2YXIgaT1rSmUoZSk7aS5jeT1yLHIuX3ByaXZhdGUucmVuZGVyZXI9bmV3IG4oaSksdGhpcy5ub3RpZnkoImluaXQiKX0sImluaXRSZW5kZXJlciIpLGRlc3Ryb3lSZW5kZXJlcjpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLm5vdGlmeSgiZGVzdHJveSIpO3ZhciByPWUuY29udGFpbmVyKCk7aWYocilmb3Ioci5fY3lyZWc9bnVsbDtyLmNoaWxkTm9kZXMubGVuZ3RoPjA7KXIucmVtb3ZlQ2hpbGQoci5jaGlsZE5vZGVzWzBdKTtlLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZS5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4uX3ByaXZhdGU7aS5yc2NyYXRjaD17fSxpLnJzdHlsZT17fSxpLmFuaW1hdGlvbi5jdXJyZW50PVtdLGkuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LCJkZXN0cm95UmVuZGVyZXIiKSxvblJlbmRlcjpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLGUpfSwib25SZW5kZXIiKSxvZmZSZW5kZXI6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vZmYoInJlbmRlciIsZSl9LCJvZmZSZW5kZXIiKX07WVAuaW52YWxpZGF0ZURpbWVuc2lvbnM9WVAucmVzaXplO2s2PXtjb2xsZWN0aW9uOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gWnQoZSk/dGhpcy4kKGUpOndvKGUpP2UuY29sbGVjdGlvbigpOmtuKGUpPyhyfHwocj17fSksbmV3IEFhKHRoaXMsZSxyLnVuaXF1ZSxyLnJlbW92ZWQpKTpuZXcgQWEodGhpcyl9LCJjb2xsZWN0aW9uIiksbm9kZXM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLiQoZnVuY3Rpb24obil7cmV0dXJuIG4uaXNOb2RlKCl9KTtyZXR1cm4gZT9yLmZpbHRlcihlKTpyfSwibm9kZXMiKSxlZGdlczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuJChmdW5jdGlvbihuKXtyZXR1cm4gbi5pc0VkZ2UoKX0pO3JldHVybiBlP3IuZmlsdGVyKGUpOnJ9LCJlZGdlcyIpLCQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBlP3IuZmlsdGVyKGUpOnIuc3Bhd25TZWxmKCl9LCIkIiksbXV0YWJsZUVsZW1lbnRzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50c30sIm11dGFibGVFbGVtZW50cyIpfTtrNi5lbGVtZW50cz1rNi5maWx0ZXI9azYuJDtZYT17fSxlYj0idCIsRUplPSJmIjtZYS5hcHBseT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWUuX3ByaXZhdGUsbj1yLmN5LGk9bi5jb2xsZWN0aW9uKCksYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgcz10W2FdLGw9ZS5nZXRDb250ZXh0TWV0YShzKTtpZighbC5lbXB0eSl7dmFyIHU9ZS5nZXRDb250ZXh0U3R5bGUobCksaD1lLmFwcGx5Q29udGV4dFN0eWxlKGwsdSxzKTtzLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGU/ZS51cGRhdGVUcmFuc2l0aW9ucyhzLGguZGlmZlByb3BzKTpzLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGU9ITA7dmFyIGY9ZS51cGRhdGVTdHlsZUhpbnRzKHMpO2YmJmkucHVzaChzKX19cmV0dXJuIGl9O1lhLmdldFByb3BlcnRpZXNEaWZmPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUucHJvcERpZmZzPXIuX3ByaXZhdGUucHJvcERpZmZzfHx7fSxpPXQrIi0iK2UsYT1uW2ldO2lmKGEpcmV0dXJuIGE7Zm9yKHZhciBzPVtdLGw9e30sdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9dFt1XT09PWViLGQ9ZVt1XT09PWViLHA9ZiE9PWQsbT1oLm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoPjA7aWYocHx8ZCYmbSl7dmFyIGc9dm9pZCAwO3AmJm18fHA/Zz1oLnByb3BlcnRpZXM6bSYmKGc9aC5tYXBwZWRQcm9wZXJ0aWVzKTtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl7Zm9yKHZhciB2PWdbeV0seD12Lm5hbWUsYj0hMSx3PXUrMTt3PHIubGVuZ3RoO3crKyl7dmFyIF89clt3XSxUPWVbd109PT1lYjtpZihUJiYoYj1fLnByb3BlcnRpZXNbdi5uYW1lXSE9bnVsbCxiKSlicmVha30hbFt4XSYmIWImJihsW3hdPSEwLHMucHVzaCh4KSl9fX1yZXR1cm4gbltpXT1zLHN9O1lhLmdldENvbnRleHRNZXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9IiIsbixpPXQuX3ByaXZhdGUuc3R5bGVDeHRLZXl8fCIiLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXSxsPXMuc2VsZWN0b3ImJnMuc2VsZWN0b3IubWF0Y2hlcyh0KTtsP3IrPWViOnIrPUVKZX1yZXR1cm4gbj1lLmdldFByb3BlcnRpZXNEaWZmKGksciksdC5fcHJpdmF0ZS5zdHlsZUN4dEtleT1yLHtrZXk6cixkaWZmUHJvcE5hbWVzOm4sZW1wdHk6bi5sZW5ndGg9PT0wfX07WWEuZ2V0Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dGhpcyxuPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcz10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXN8fHt9O2lmKG5bZV0pcmV0dXJuIG5bZV07Zm9yKHZhciBpPXtfcHJpdmF0ZTp7a2V5OmV9fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1lW2FdPT09ZWI7aWYobClmb3IodmFyIHU9MDt1PHMucHJvcGVydGllcy5sZW5ndGg7dSsrKXt2YXIgaD1zLnByb3BlcnRpZXNbdV07aVtoLm5hbWVdPWh9fXJldHVybiBuW2VdPWksaX07WWEuYXBwbHlDb250ZXh0U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLGk9dC5kaWZmUHJvcE5hbWVzLGE9e30scz1uLnR5cGVzLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHU9aVtsXSxoPWVbdV0sZj1yLnBzdHlsZSh1KTtpZighaClpZihmKWYuYnlwYXNzP2g9e25hbWU6dSxkZWxldGVCeXBhc3NlZDohMH06aD17bmFtZTp1LGRlbGV0ZTohMH07ZWxzZSBjb250aW51ZTtpZihmIT09aCl7aWYoaC5tYXBwZWQ9PT1zLmZuJiZmIT1udWxsJiZmLm1hcHBpbmchPW51bGwmJmYubWFwcGluZy52YWx1ZT09PWgudmFsdWUpe3ZhciBkPWYubWFwcGluZyxwPWQuZm5WYWx1ZT1oLnZhbHVlKHIpO2lmKHA9PT1kLnByZXZGblZhbHVlKWNvbnRpbnVlfXZhciBtPWFbdV09e3ByZXY6Zn07bi5hcHBseVBhcnNlZFByb3BlcnR5KHIsaCksbS5uZXh0PXIucHN0eWxlKHUpLG0ubmV4dCYmbS5uZXh0LmJ5cGFzcyYmKG0ubmV4dD1tLm5leHQuYnlwYXNzZWQpfX1yZXR1cm57ZGlmZlByb3BzOmF9fTtZYS51cGRhdGVTdHlsZUhpbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUscj10aGlzLG49ci5wcm9wZXJ0eUdyb3VwTmFtZXMsaT1yLnByb3BlcnR5R3JvdXBLZXlzLGE9byhmdW5jdGlvbihRLGFlLHVlKXtyZXR1cm4gci5nZXRQcm9wZXJ0aWVzSGFzaChRLGFlLHVlKX0sInByb3BIYXNoIikscz1lLnN0eWxlS2V5O2lmKHQucmVtb3ZlZCgpKXJldHVybiExO3ZhciBsPWUuZ3JvdXA9PT0ibm9kZXMiLHU9dC5fcHJpdmF0ZS5zdHlsZTtuPU9iamVjdC5rZXlzKHUpO2Zvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdO2Uuc3R5bGVLZXlzW2ZdPVtwMSxLeF19Zm9yKHZhciBkPW8oZnVuY3Rpb24oUSxhZSl7cmV0dXJuIGUuc3R5bGVLZXlzW2FlXVswXT1uYihRLGUuc3R5bGVLZXlzW2FlXVswXSl9LCJ1cGRhdGVHcktleTEiKSxwPW8oZnVuY3Rpb24oUSxhZSl7cmV0dXJuIGUuc3R5bGVLZXlzW2FlXVsxXT1pYihRLGUuc3R5bGVLZXlzW2FlXVsxXSl9LCJ1cGRhdGVHcktleTIiKSxtPW8oZnVuY3Rpb24oUSxhZSl7ZChRLGFlKSxwKFEsYWUpfSwidXBkYXRlR3JLZXkiKSxnPW8oZnVuY3Rpb24oUSxhZSl7Zm9yKHZhciB1ZT0wO3VlPFEubGVuZ3RoO3VlKyspe3ZhciBjZT1RLmNoYXJDb2RlQXQodWUpO2QoY2UsYWUpLHAoY2UsYWUpfX0sInVwZGF0ZUdyS2V5V1N0ciIpLHk9MmU5LHY9byhmdW5jdGlvbihRKXtyZXR1cm4tMTI4PFEmJlE8MTI4JiZNYXRoLmZsb29yKFEpIT09UT95LShRKjEwMjR8MCk6UX0sImNsZWFuTnVtIikseD0wO3g8bi5sZW5ndGg7eCsrKXt2YXIgYj1uW3hdLHc9dVtiXTtpZih3IT1udWxsKXt2YXIgXz10aGlzLnByb3BlcnRpZXNbYl0sVD1fLnR5cGUsRT1fLmdyb3VwS2V5LEw9dm9pZCAwO18uaGFzaE92ZXJyaWRlIT1udWxsP0w9Xy5oYXNoT3ZlcnJpZGUodCx3KTp3LnBmVmFsdWUhPW51bGwmJihMPXcucGZWYWx1ZSk7dmFyIFM9Xy5lbnVtcz09bnVsbD93LnZhbHVlOm51bGwsQT1MIT1udWxsLEk9UyE9bnVsbCxEPUF8fEksaz13LnVuaXRzO2lmKFQubnVtYmVyJiZEJiYhVC5tdWx0aXBsZSl7dmFyIFI9QT9MOlM7bSh2KFIpLEUpLCFBJiZrIT1udWxsJiZnKGssRSl9ZWxzZSBnKHcuc3RyVmFsdWUsRSl9fWZvcih2YXIgQz1bcDEsS3hdLE89MDtPPGkubGVuZ3RoO08rKyl7dmFyIE49aVtPXSxQPWUuc3R5bGVLZXlzW05dO0NbMF09bmIoUFswXSxDWzBdKSxDWzFdPWliKFBbMV0sQ1sxXSl9ZS5zdHlsZUtleT1MWGUoQ1swXSxDWzFdKTt2YXIgRj1lLnN0eWxlS2V5cztlLmxhYmVsRGltc0tleT1fZihGLmxhYmVsRGltZW5zaW9ucyk7dmFyIEI9YSh0LFsibGFiZWwiXSxGLmxhYmVsRGltZW5zaW9ucyk7aWYoZS5sYWJlbEtleT1fZihCKSxlLmxhYmVsU3R5bGVLZXk9X2YoYTYoRi5jb21tb25MYWJlbCxCKSksIWwpe3ZhciBHPWEodCxbInNvdXJjZS1sYWJlbCJdLEYubGFiZWxEaW1lbnNpb25zKTtlLnNvdXJjZUxhYmVsS2V5PV9mKEcpLGUuc291cmNlTGFiZWxTdHlsZUtleT1fZihhNihGLmNvbW1vbkxhYmVsLEcpKTt2YXIgej1hKHQsWyJ0YXJnZXQtbGFiZWwiXSxGLmxhYmVsRGltZW5zaW9ucyk7ZS50YXJnZXRMYWJlbEtleT1fZih6KSxlLnRhcmdldExhYmVsU3R5bGVLZXk9X2YoYTYoRi5jb21tb25MYWJlbCx6KSl9aWYobCl7dmFyIFc9ZS5zdHlsZUtleXMsWj1XLm5vZGVCb2R5LGo9Vy5ub2RlQm9yZGVyLG9lPVcubm9kZU91dGxpbmUsSz1XLmJhY2tncm91bmRJbWFnZSxlZT1XLmNvbXBvdW5kLEo9Vy5waWUsSD1bWixqLG9lLEssZWUsSl0uZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxIT1udWxsfSkucmVkdWNlKGE2LFtwMSxLeF0pO2Uubm9kZUtleT1fZihIKSxlLmhhc1BpZT1KIT1udWxsJiZKWzBdIT09cDEmJkpbMV0hPT1LeH1yZXR1cm4gcyE9PWUuc3R5bGVLZXl9O1lhLmNsZWFyU3R5bGVIaW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlO2Uuc3R5bGVDeHRLZXk9IiIsZS5zdHlsZUtleXM9e30sZS5zdHlsZUtleT1udWxsLGUubGFiZWxLZXk9bnVsbCxlLmxhYmVsU3R5bGVLZXk9bnVsbCxlLnNvdXJjZUxhYmVsS2V5PW51bGwsZS5zb3VyY2VMYWJlbFN0eWxlS2V5PW51bGwsZS50YXJnZXRMYWJlbEtleT1udWxsLGUudGFyZ2V0TGFiZWxTdHlsZUtleT1udWxsLGUubm9kZUtleT1udWxsLGUuaGFzUGllPW51bGx9O1lhLmFwcGx5UGFyc2VkUHJvcGVydHk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ZSxpPXQuX3ByaXZhdGUuc3R5bGUsYSxzPXIudHlwZXMsbD1yLnByb3BlcnRpZXNbbi5uYW1lXS50eXBlLHU9bi5ieXBhc3MsaD1pW24ubmFtZV0sZj1oJiZoLmJ5cGFzcyxkPXQuX3ByaXZhdGUscD0ibWFwcGluZyIsbT1vKGZ1bmN0aW9uKFope3JldHVybiBaPT1udWxsP251bGw6Wi5wZlZhbHVlIT1udWxsP1oucGZWYWx1ZTpaLnZhbHVlfSwiZ2V0VmFsIiksZz1vKGZ1bmN0aW9uKCl7dmFyIFo9bShoKSxqPW0obik7ci5jaGVja1RyaWdnZXJzKHQsbi5uYW1lLFosail9LCJjaGVja1RyaWdnZXJzIik7aWYoZS5uYW1lPT09ImN1cnZlLXN0eWxlIiYmdC5pc0VkZ2UoKSYmKGUudmFsdWUhPT0iYmV6aWVyIiYmdC5pc0xvb3AoKXx8ZS52YWx1ZT09PSJoYXlzdGFjayImJih0LnNvdXJjZSgpLmlzUGFyZW50KCl8fHQudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYobj1lPXRoaXMucGFyc2UoZS5uYW1lLCJiZXppZXIiLHUpKSxuLmRlbGV0ZSlyZXR1cm4gaVtuLm5hbWVdPXZvaWQgMCxnKCksITA7aWYobi5kZWxldGVCeXBhc3NlZClyZXR1cm4gaD9oLmJ5cGFzcz8oaC5ieXBhc3NlZD12b2lkIDAsZygpLCEwKTohMTooZygpLCEwKTtpZihuLmRlbGV0ZUJ5cGFzcylyZXR1cm4gaD9oLmJ5cGFzcz8oaVtuLm5hbWVdPWguYnlwYXNzZWQsZygpLCEwKTohMTooZygpLCEwKTt2YXIgeT1vKGZ1bmN0aW9uKCl7b24oIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3QuaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrbi5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIituLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK24uZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrbi5maWVsZCsiYCBkZWZpbmVkIil9LCJwcmludE1hcHBpbmdFcnIiKTtzd2l0Y2gobi5tYXBwZWQpe2Nhc2Ugcy5tYXBEYXRhOntmb3IodmFyIHY9bi5maWVsZC5zcGxpdCgiLiIpLHg9ZC5kYXRhLGI9MDtiPHYubGVuZ3RoJiZ4O2IrKyl7dmFyIHc9dltiXTt4PXhbd119aWYoeD09bnVsbClyZXR1cm4geSgpLCExO3ZhciBfO2lmKHh0KHgpKXt2YXIgVD1uLmZpZWxkTWF4LW4uZmllbGRNaW47VD09PTA/Xz0wOl89KHgtbi5maWVsZE1pbikvVH1lbHNlIHJldHVybiBvbigiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIituLmZpZWxkKyI6ICIreCsiYCBmb3IgYCIrdC5pZCgpKyJgIGlzIG5vbi1udW1lcmljKSIpLCExO2lmKF88MD9fPTA6Xz4xJiYoXz0xKSxsLmNvbG9yKXt2YXIgRT1uLnZhbHVlTWluWzBdLEw9bi52YWx1ZU1heFswXSxTPW4udmFsdWVNaW5bMV0sQT1uLnZhbHVlTWF4WzFdLEk9bi52YWx1ZU1pblsyXSxEPW4udmFsdWVNYXhbMl0saz1uLnZhbHVlTWluWzNdPT1udWxsPzE6bi52YWx1ZU1pblszXSxSPW4udmFsdWVNYXhbM109PW51bGw/MTpuLnZhbHVlTWF4WzNdLEM9W01hdGgucm91bmQoRSsoTC1FKSpfKSxNYXRoLnJvdW5kKFMrKEEtUykqXyksTWF0aC5yb3VuZChJKyhELUkpKl8pLE1hdGgucm91bmQoaysoUi1rKSpfKV07YT17YnlwYXNzOm4uYnlwYXNzLG5hbWU6bi5uYW1lLHZhbHVlOkMsc3RyVmFsdWU6InJnYigiK0NbMF0rIiwgIitDWzFdKyIsICIrQ1syXSsiKSJ9fWVsc2UgaWYobC5udW1iZXIpe3ZhciBPPW4udmFsdWVNaW4rKG4udmFsdWVNYXgtbi52YWx1ZU1pbikqXzthPXRoaXMucGFyc2Uobi5uYW1lLE8sbi5ieXBhc3MscCl9ZWxzZSByZXR1cm4hMTtpZighYSlyZXR1cm4geSgpLCExO2EubWFwcGluZz1uLG49YTticmVha31jYXNlIHMuZGF0YTp7Zm9yKHZhciBOPW4uZmllbGQuc3BsaXQoIi4iKSxQPWQuZGF0YSxGPTA7RjxOLmxlbmd0aCYmUDtGKyspe3ZhciBCPU5bRl07UD1QW0JdfWlmKFAhPW51bGwmJihhPXRoaXMucGFyc2Uobi5uYW1lLFAsbi5ieXBhc3MscCkpLCFhKXJldHVybiB5KCksITE7YS5tYXBwaW5nPW4sbj1hO2JyZWFrfWNhc2Ugcy5mbjp7dmFyIEc9bi52YWx1ZSx6PW4uZm5WYWx1ZSE9bnVsbD9uLmZuVmFsdWU6Ryh0KTtpZihuLnByZXZGblZhbHVlPXosej09bnVsbClyZXR1cm4gb24oIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCIrbi5uYW1lKyJgIGZvciBlbGUgYCIrdC5pZCgpKyJgIGlzIG51bGwpIiksITE7aWYoYT10aGlzLnBhcnNlKG4ubmFtZSx6LG4uYnlwYXNzLHApLCFhKXJldHVybiBvbigiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK24ubmFtZSsiYCBmb3IgZWxlIGAiK3QuaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO2EubWFwcGluZz1aYyhuKSxuPWE7YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gdT8oZj9uLmJ5cGFzc2VkPWguYnlwYXNzZWQ6bi5ieXBhc3NlZD1oLGlbbi5uYW1lXT1uKTpmP2guYnlwYXNzZWQ9bjppW24ubmFtZV09bixnKCksITB9O1lhLmNsZWFuRWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZih0aGlzLmNsZWFyU3R5bGVIaW50cyhuKSxuLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLG4uZGlydHlCb3VuZGluZ0JveENhY2hlKCksIWUpbi5fcHJpdmF0ZS5zdHlsZT17fTtlbHNlIGZvcih2YXIgaT1uLl9wcml2YXRlLnN0eWxlLGE9T2JqZWN0LmtleXMoaSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9aVtsXTt1IT1udWxsJiYodS5ieXBhc3M/dS5ieXBhc3NlZD1udWxsOmlbbF09bnVsbCl9fX07WWEudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxlPXQubXV0YWJsZUVsZW1lbnRzKCk7ZS51cGRhdGVTdHlsZSgpfTtZYS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10Ll9wcml2YXRlLGk9dC5wc3R5bGUoInRyYW5zaXRpb24tcHJvcGVydHkiKS52YWx1ZSxhPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWR1cmF0aW9uIikucGZWYWx1ZSxzPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWRlbGF5IikucGZWYWx1ZTtpZihpLmxlbmd0aD4wJiZhPjApe2Zvcih2YXIgbD17fSx1PSExLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPXQucHN0eWxlKGYpLHA9ZVtmXTtpZihwKXt2YXIgbT1wLnByZXYsZz1tLHk9cC5uZXh0IT1udWxsP3AubmV4dDpkLHY9ITEseD12b2lkIDAsYj0xZS02O2cmJih4dChnLnBmVmFsdWUpJiZ4dCh5LnBmVmFsdWUpPyh2PXkucGZWYWx1ZS1nLnBmVmFsdWUseD1nLnBmVmFsdWUrYip2KTp4dChnLnZhbHVlKSYmeHQoeS52YWx1ZSk/KHY9eS52YWx1ZS1nLnZhbHVlLHg9Zy52YWx1ZStiKnYpOmtuKGcudmFsdWUpJiZrbih5LnZhbHVlKSYmKHY9Zy52YWx1ZVswXSE9PXkudmFsdWVbMF18fGcudmFsdWVbMV0hPT15LnZhbHVlWzFdfHxnLnZhbHVlWzJdIT09eS52YWx1ZVsyXSx4PWcuc3RyVmFsdWUpLHYmJihsW2ZdPXkuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh0LGYseCksdT0hMCkpfX1pZighdSlyZXR1cm47bi50cmFuc2l0aW9uaW5nPSEwLG5ldyBDMShmdW5jdGlvbih3KXtzPjA/dC5kZWxheUFuaW1hdGlvbihzKS5wbGF5KCkucHJvbWlzZSgpLnRoZW4odyk6dygpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmFuaW1hdGlvbih7c3R5bGU6bCxkdXJhdGlvbjphLGVhc2luZzp0LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ci5yZW1vdmVCeXBhc3Nlcyh0LGkpLHQuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxuLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIG4udHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXModCxpKSx0LmVtaXRBbmROb3RpZnkoInN0eWxlIiksbi50cmFuc2l0aW9uaW5nPSExKX07WWEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLnByb3BlcnRpZXNbZV0sbD1pKHMpO2whPW51bGwmJmwocixuKSYmYShzKX07WWEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihhKXtyZXR1cm4gYS50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtpLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix0KX0pfTtZYS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihpKXtyZXR1cm4gaS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oaSl7dC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx0LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmZT09PSJjdXJ2ZS1zdHlsZSImJihyPT09ImJlemllciJ8fG49PT0iYmV6aWVyIikmJnQucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0J1bmRsZWRCZXppZXIoKSYmYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLGkudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZlPT09ImRpc3BsYXkiJiYocj09PSJub25lInx8bj09PSJub25lIikmJnQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfTtZYS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHQsZSxyLG4pe3QuZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIodCxlLHIsbiksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIodCxlLHIsbil9O3ZiPXt9O3ZiLmFwcGx5QnlwYXNzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT1bXSxzPSEwO2lmKGU9PT0iKiJ8fGU9PT0iKioiKXtpZihyIT09dm9pZCAwKWZvcih2YXIgbD0wO2w8aS5wcm9wZXJ0aWVzLmxlbmd0aDtsKyspe3ZhciB1PWkucHJvcGVydGllc1tsXSxoPXUubmFtZSxmPXRoaXMucGFyc2UoaCxyLCEwKTtmJiZhLnB1c2goZil9fWVsc2UgaWYoWnQoZSkpe3ZhciBkPXRoaXMucGFyc2UoZSxyLCEwKTtkJiZhLnB1c2goZCl9ZWxzZSBpZihVcihlKSl7dmFyIHA9ZTtuPXI7Zm9yKHZhciBtPU9iamVjdC5rZXlzKHApLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXSx2PXBbeV07aWYodj09PXZvaWQgMCYmKHY9cFtCNih5KV0pLHYhPT12b2lkIDApe3ZhciB4PXRoaXMucGFyc2UoeSx2LCEwKTt4JiZhLnB1c2goeCl9fX1lbHNlIHJldHVybiExO2lmKGEubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGI9ITEsdz0wO3c8dC5sZW5ndGg7dysrKXtmb3IodmFyIF89dFt3XSxUPXt9LEU9dm9pZCAwLEw9MDtMPGEubGVuZ3RoO0wrKyl7dmFyIFM9YVtMXTtpZihuKXt2YXIgQT1fLnBzdHlsZShTLm5hbWUpO0U9VFtTLm5hbWVdPXtwcmV2OkF9fWI9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KF8sWmMoUykpfHxiLG4mJihFLm5leHQ9Xy5wc3R5bGUoUy5uYW1lKSl9YiYmdGhpcy51cGRhdGVTdHlsZUhpbnRzKF8pLG4mJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoXyxULHMpfXJldHVybiBifTt2Yi5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih0LGUscil7ZT1pQihlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkuX3ByaXZhdGUuc3R5bGVbZV0scz10aGlzLnByb3BlcnRpZXNbZV0udHlwZSxsPXMuY29sb3IsdT1zLm11dGlwbGUsaD1hP2EucGZWYWx1ZSE9bnVsbD9hLnBmVmFsdWU6YS52YWx1ZTpudWxsOyFhfHwhYS5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhpLGUscik6KGEudmFsdWU9cixhLnBmVmFsdWUhPW51bGwmJihhLnBmVmFsdWU9ciksbD9hLnN0clZhbHVlPSJyZ2IoIityLmpvaW4oIiwiKSsiKSI6dT9hLnN0clZhbHVlPXIuam9pbigiICIpOmEuc3RyVmFsdWU9IiIrcix0aGlzLnVwZGF0ZVN0eWxlSGludHMoaSkpLHRoaXMuY2hlY2tUcmlnZ2VycyhpLGUsaCxyKX19O3ZiLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXModCx0aGlzLnByb3BlcnR5TmFtZXMsZSl9O3ZiLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ITAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxzPXt9LGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9ZVtsXSxoPXRoaXMucHJvcGVydGllc1t1XSxmPWEucHN0eWxlKGgubmFtZSk7aWYoISghZnx8IWYuYnlwYXNzKSl7dmFyIGQ9IiIscD10aGlzLnBhcnNlKHUsZCwhMCksbT1zW2gubmFtZV09e3ByZXY6Zn07dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KGEscCksbS5uZXh0PWEucHN0eWxlKGgubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhhKSxyJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGEscyxuKX19O3ZCPXt9O3ZCLmdldEVtU2l6ZUluUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250YWluZXJDc3MoImZvbnQtc2l6ZSIpO3JldHVybiB0IT1udWxsP3BhcnNlRmxvYXQodCk6MX07dkIuY29udGFpbmVyQ3NzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY3kscj1lLmNvbnRhaW5lcigpLG49ZS53aW5kb3coKTtpZihuJiZyJiZuLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuIG4uZ2V0Q29tcHV0ZWRTdHlsZShyKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfTtldT17fTtldS5nZXRSZW5kZXJlZFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/dGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxlLCEwKTp0aGlzLmdldFJhd1N0eWxlKHQsITApfTtldS5nZXRSYXdTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7aWYodD10WzBdLHQpe2Zvcih2YXIgbj17fSxpPTA7aTxyLnByb3BlcnRpZXMubGVuZ3RoO2krKyl7dmFyIGE9ci5wcm9wZXJ0aWVzW2ldLHM9ci5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxhLm5hbWUsZSk7cyE9bnVsbCYmKG5bYS5uYW1lXT1zLG5bQjYoYS5uYW1lKV09cyl9cmV0dXJuIG59fTtldS5nZXRJbmRleGVkU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5wc3R5bGUoZSlbcl1bbl07cmV0dXJuIGk/P3QuY3koKS5zdHlsZSgpLmdldERlZmF1bHRQcm9wZXJ0eShlKVtyXVswXX07ZXUuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHQ9dFswXSx0KXt2YXIgaT1uLnByb3BlcnRpZXNbZV07aS5hbGlhcyYmKGk9aS5wb2ludHNUbyk7dmFyIGE9aS50eXBlLHM9dC5wc3R5bGUoaS5uYW1lKTtpZihzKXt2YXIgbD1zLnZhbHVlLHU9cy51bml0cyxoPXMuc3RyVmFsdWU7aWYociYmYS5udW1iZXImJmwhPW51bGwmJnh0KGwpKXt2YXIgZj10LmN5KCkuem9vbSgpLGQ9byhmdW5jdGlvbih2KXtyZXR1cm4gdipmfSwiZ2V0UmVuZGVyZWRWYWx1ZSIpLHA9byhmdW5jdGlvbih2LHgpe3JldHVybiBkKHYpK3h9LCJnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyIpLG09a24obCksZz1tP3UuZXZlcnkoZnVuY3Rpb24oeSl7cmV0dXJuIHkhPW51bGx9KTp1IT1udWxsO3JldHVybiBnP20/bC5tYXAoZnVuY3Rpb24oeSx2KXtyZXR1cm4gcCh5LHVbdl0pfSkuam9pbigiICIpOnAobCx1KTptP2wubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBadCh5KT95OiIiK2QoeSl9KS5qb2luKCIgIik6IiIrZChsKX1lbHNlIGlmKGghPW51bGwpcmV0dXJuIGh9cmV0dXJuIG51bGx9fTtldS5nZXRBbmltYXRpb25TdGFydFN0eWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXSxhPWkubmFtZSxzPXQucHN0eWxlKGEpO3MhPT12b2lkIDAmJihVcihzKT9zPXRoaXMucGFyc2UoYSxzLnN0clZhbHVlKTpzPXRoaXMucGFyc2UoYSxzKSkscyYmKHJbYV09cyl9cmV0dXJuIHJ9O2V1LmdldFByb3BzTGlzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9W10sbj10LGk9ZS5wcm9wZXJ0aWVzO2lmKG4pZm9yKHZhciBhPU9iamVjdC5rZXlzKG4pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PW5bbF0saD1pW2xdfHxpW2lCKGwpXSxmPXRoaXMucGFyc2UoaC5uYW1lLHUpO2YmJnIucHVzaChmKX1yZXR1cm4gcn07ZXUuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnNsaWNlKCksaSxhLHMsbCx1LGg7Zm9yKHU9MDt1PGUubGVuZ3RoO3UrKylpZihpPWVbdV0sYT10LnBzdHlsZShpLCExKSxhIT1udWxsKWlmKGEucGZWYWx1ZSE9bnVsbCluWzBdPW5iKGwsblswXSksblsxXT1pYihsLG5bMV0pO2Vsc2UgZm9yKHM9YS5zdHJWYWx1ZSxoPTA7aDxzLmxlbmd0aDtoKyspbD1zLmNoYXJDb2RlQXQoaCksblswXT1uYihsLG5bMF0pLG5bMV09aWIobCxuWzFdKTtyZXR1cm4gbn07ZXUuZ2V0UHJvcGVydGllc0hhc2g9ZXUuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoO0s2PXt9O0s2LmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxpPW4uc2VsZWN0b3IsYT1uLnN0eWxlfHxuLmNzcyxzPU9iamVjdC5rZXlzKGEpO2Uuc2VsZWN0b3IoaSk7Zm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0saD1hW3VdO2UuY3NzKHUsaCl9fXJldHVybiBlfTtLNi5mcm9tSnNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tSnNvbih0KSxlfTtLNi5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5kZWZhdWx0TGVuZ3RoO2U8dGhpcy5sZW5ndGg7ZSsrKXtmb3IodmFyIHI9dGhpc1tlXSxuPXIuc2VsZWN0b3IsaT1yLnByb3BlcnRpZXMsYT17fSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YVtsLm5hbWVdPWwuc3RyVmFsdWV9dC5wdXNoKHtzZWxlY3RvcjpuP24udG9TdHJpbmcoKToiY29yZSIsc3R5bGU6YX0pfXJldHVybiB0fTt4Qj17fTt4Qi5hcHBlbmRGcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLG49IiIrdCxpLGEscztuPW4ucmVwbGFjZSgvWy9dWypdKFxzfC4pKz9bKl1bL10vZywiIik7ZnVuY3Rpb24gbCgpe24ubGVuZ3RoPmkubGVuZ3RoP249bi5zdWJzdHIoaS5sZW5ndGgpOm49IiJ9byhsLCJyZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmciKTtmdW5jdGlvbiB1KCl7YS5sZW5ndGg+cy5sZW5ndGg/YT1hLnN1YnN0cihzLmxlbmd0aCk6YT0iIn1mb3Iobyh1LCJyZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSIpOzspe3ZhciBoPW4ubWF0Y2goL15ccyokLyk7aWYoaClicmVhazt2YXIgZj1uLm1hdGNoKC9eXHMqKCg/Oi58XHMpKz8pXHMqXHsoKD86LnxccykrPylcfS8pO2lmKCFmKXtvbigiSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogIituKTticmVha31pPWZbMF07dmFyIGQ9ZlsxXTtpZihkIT09ImNvcmUiKXt2YXIgcD1uZXcgUGYoZCk7aWYocC5pbnZhbGlkKXtvbigiU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBzZWxlY3RvciBmb3VuZCBpbiBzdHJpbmcgc3R5bGVzaGVldDogIitkKSxsKCk7Y29udGludWV9fXZhciBtPWZbMl0sZz0hMTthPW07Zm9yKHZhciB5PVtdOzspe3ZhciB2PWEubWF0Y2goL15ccyokLyk7aWYodilicmVhazt2YXIgeD1hLm1hdGNoKC9eXHMqKC4rPylccyo6XHMqKC4rPykoPzpccyo7fFxzKiQpLyk7aWYoIXgpe29uKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrbSksZz0hMDticmVha31zPXhbMF07dmFyIGI9eFsxXSx3PXhbMl0sXz1lLnByb3BlcnRpZXNbYl07aWYoIV8pe29uKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiAiK3MpLHUoKTtjb250aW51ZX12YXIgVD1yLnBhcnNlKGIsdyk7aWYoIVQpe29uKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAiK3MpLHUoKTtjb250aW51ZX15LnB1c2goe25hbWU6Yix2YWw6d30pLHUoKX1pZihnKXtsKCk7YnJlYWt9ci5zZWxlY3RvcihkKTtmb3IodmFyIEU9MDtFPHkubGVuZ3RoO0UrKyl7dmFyIEw9eVtFXTtyLmNzcyhMLm5hbWUsTC52YWwpfWwoKX1yZXR1cm4gcn07eEIuZnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tU3RyaW5nKHQpLGV9O1NhPXt9OyhmdW5jdGlvbigpe3ZhciB0PWppLGU9UnFlLHI9SXFlLG49T3FlLGk9UHFlLGE9byhmdW5jdGlvbihIKXtyZXR1cm4iXiIrSCsiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sImRhdGEiKSxzPW8oZnVuY3Rpb24oSCl7dmFyIHE9dCsifFxcdyt8IitlKyJ8IityKyJ8IituKyJ8IitpO3JldHVybiJeIitIKyJcXHMqXFwoKFtcXHdcXC5dKylcXHMqXFwsXFxzKigiK3QrIilcXHMqXFwsXFxzKigiK3QrIilcXHMqLFxccyooIitxKyIpXFxzKlxcLFxccyooIitxKyIpXFwpJCJ9LCJtYXBEYXRhIiksbD1bYF51cmxcXHMqXFwoXFxzKlsnIl0/KC4rPylbJyJdP1xccypcXCkkYCwiXihub25lKSQiLCJeKC4rKSQiXTtTYS50eXBlcz17dGltZTp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOiJzfG1zIixpbXBsaWNpdFVuaXRzOiJtcyJ9LHBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIn0scGVyY2VudGFnZXM6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIixtdWx0aXBsZTohMH0semVyb09uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwfSx6ZXJvT25lTnVtYmVyczp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxuT25lT25lTnVtYmVyOntudW1iZXI6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZUludDp7bnVtYmVyOiEwLG1pbjowLGludGVnZXI6ITAsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlTnVtYmVyOntudW1iZXI6ITAsbWluOjAsdW5pdGxlc3M6ITB9LHBvc2l0aW9uOntlbnVtczpbInBhcmVudCIsIm9yaWdpbiJdfSxub2RlU2l6ZTp7bnVtYmVyOiEwLG1pbjowLGVudW1zOlsibGFiZWwiXX0sbnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITB9LG51bWJlcnM6e251bWJlcjohMCx1bml0bGVzczohMCxtdWx0aXBsZTohMH0scG9zaXRpdmVOdW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMCxtaW46MCxzdHJpY3RNaW46ITB9LHNpemU6e251bWJlcjohMCxtaW46MH0sYmlkaXJlY3Rpb25hbFNpemU6e251bWJlcjohMH0sYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITB9LGJpZGlyZWN0aW9uYWxTaXplczp7bnVtYmVyOiEwLG11bHRpcGxlOiEwfSxzaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwfSxheGlzRGlyZWN0aW9uOntlbnVtczpbImhvcml6b250YWwiLCJsZWZ0d2FyZCIsInJpZ2h0d2FyZCIsInZlcnRpY2FsIiwidXB3YXJkIiwiZG93bndhcmQiLCJhdXRvIl19LHBhZGRpbmdSZWxhdGl2ZVRvOntlbnVtczpbIndpZHRoIiwiaGVpZ2h0IiwiYXZlcmFnZSIsIm1pbiIsIm1heCJdfSxiZ1dIOntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwLGVudW1zOlsiYXV0byJdLG11bHRpcGxlOiEwfSxiZ1Bvczp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMCxtdWx0aXBsZTohMH0sYmdSZWxhdGl2ZVRvOntlbnVtczpbImlubmVyIiwiaW5jbHVkZS1wYWRkaW5nIl0sbXVsdGlwbGU6ITB9LGJnUmVwZWF0OntlbnVtczpbInJlcGVhdCIsInJlcGVhdC14IiwicmVwZWF0LXkiLCJuby1yZXBlYXQiXSxtdWx0aXBsZTohMH0sYmdGaXQ6e2VudW1zOlsibm9uZSIsImNvbnRhaW4iLCJjb3ZlciJdLG11bHRpcGxlOiEwfSxiZ0Nyb3NzT3JpZ2luOntlbnVtczpbImFub255bW91cyIsInVzZS1jcmVkZW50aWFscyIsIm51bGwiXSxtdWx0aXBsZTohMH0sYmdDbGlwOntlbnVtczpbIm5vbmUiLCJub2RlIl0sbXVsdGlwbGU6ITB9LGJnQ29udGFpbm1lbnQ6e2VudW1zOlsiaW5zaWRlIiwib3ZlciJdLG11bHRpcGxlOiEwfSxjb2xvcjp7Y29sb3I6ITB9LGNvbG9yczp7Y29sb3I6ITAsbXVsdGlwbGU6ITB9LGZpbGw6e2VudW1zOlsic29saWQiLCJsaW5lYXItZ3JhZGllbnQiLCJyYWRpYWwtZ3JhZGllbnQiXX0sYm9vbDp7ZW51bXM6WyJ5ZXMiLCJubyJdfSxib29sczp7ZW51bXM6WyJ5ZXMiLCJubyJdLG11bHRpcGxlOiEwfSxsaW5lU3R5bGU6e2VudW1zOlsic29saWQiLCJkb3R0ZWQiLCJkYXNoZWQiXX0sbGluZUNhcDp7ZW51bXM6WyJidXR0Iiwicm91bmQiLCJzcXVhcmUiXX0sbGluZVBvc2l0aW9uOntlbnVtczpbImNlbnRlciIsImluc2lkZSIsIm91dHNpZGUiXX0sbGluZUpvaW46e2VudW1zOlsicm91bmQiLCJiZXZlbCIsIm1pdGVyIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSIsInJvdW5kLXNlZ21lbnRzIiwicm91bmQtdGF4aSJdfSxyYWRpdXNUeXBlOntlbnVtczpbImFyYy1yYWRpdXMiLCJpbmZsdWVuY2UtcmFkaXVzIl0sbXVsdGlwbGU6ITB9LGZvbnRGYW1pbHk6e3JlZ2V4OideKFtcXHctIFxcIl0rKD86XFxzKixcXHMqW1xcdy0gXFwiXSspKikkJ30sZm9udFN0eWxlOntlbnVtczpbIml0YWxpYyIsIm5vcm1hbCIsIm9ibGlxdWUiXX0sZm9udFdlaWdodDp7ZW51bXM6WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjgwMCIsIjkwMCIsMTAwLDIwMCwzMDAsNDAwLDUwMCw2MDAsNzAwLDgwMCw5MDBdfSx0ZXh0RGVjb3JhdGlvbjp7ZW51bXM6WyJub25lIiwidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJsaW5lLXRocm91Z2giXX0sdGV4dFRyYW5zZm9ybTp7ZW51bXM6WyJub25lIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlIl19LHRleHRXcmFwOntlbnVtczpbIm5vbmUiLCJ3cmFwIiwiZWxsaXBzaXMiXX0sdGV4dE92ZXJmbG93V3JhcDp7ZW51bXM6WyJ3aGl0ZXNwYWNlIiwiYW55d2hlcmUiXX0sdGV4dEJhY2tncm91bmRTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdfSxub2RlU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiLCJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIiwiYm90dG9tcm91bmRyZWN0YW5nbGUiLCJib3R0b20tcm91bmQtcmVjdGFuZ2xlIiwiYmFycmVsIiwiZWxsaXBzZSIsInRyaWFuZ2xlIiwicm91bmQtdHJpYW5nbGUiLCJzcXVhcmUiLCJwZW50YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwiaGV4YWdvbiIsInJvdW5kLWhleGFnb24iLCJjb25jYXZlaGV4YWdvbiIsImNvbmNhdmUtaGV4YWdvbiIsImhlcHRhZ29uIiwicm91bmQtaGVwdGFnb24iLCJvY3RhZ29uIiwicm91bmQtb2N0YWdvbiIsInRhZyIsInJvdW5kLXRhZyIsInN0YXIiLCJkaWFtb25kIiwicm91bmQtZGlhbW9uZCIsInZlZSIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiLCJwb2x5Z29uIl19LG92ZXJsYXlTaGFwZTp7ZW51bXM6WyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImVsbGlwc2UiXX0sY29ybmVyUmFkaXVzOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJhdXRvIl19LGNvbXBvdW5kSW5jbHVkZUxhYmVsczp7ZW51bXM6WyJpbmNsdWRlIiwiZXhjbHVkZSJdfSxhcnJvd1NoYXBlOntlbnVtczpbInRlZSIsInRyaWFuZ2xlIiwidHJpYW5nbGUtdGVlIiwiY2lyY2xlLXRyaWFuZ2xlIiwidHJpYW5nbGUtY3Jvc3MiLCJ0cmlhbmdsZS1iYWNrY3VydmUiLCJ2ZWUiLCJzcXVhcmUiLCJjaXJjbGUiLCJkaWFtb25kIiwiY2hldnJvbiIsIm5vbmUiXX0sYXJyb3dGaWxsOntlbnVtczpbImZpbGxlZCIsImhvbGxvdyJdfSxhcnJvd1dpZHRoOntudW1iZXI6ITAsdW5pdHM6IiV8cHh8ZW0iLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbIm1hdGNoLWxpbmUiXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6YSgiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OmEoImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDphKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6cygibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OnMoIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpzKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIiwiZW5kcG9pbnRzIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKEgscSl7c3dpdGNoKEgubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIHFbMF0hPT0iZGVnIiYmcVswXSE9PSJyYWQiJiZxWzFdIT09ImRlZyImJnFbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIFp0KEhbMF0pfHxxWzBdPT09ImRlZyJ8fHFbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX0sInZhbGlkYXRlIil9LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKEgpe3ZhciBxPUgubGVuZ3RoO3JldHVybiBxPT09MXx8cT09PTJ8fHE9PT00fSwidmFsaWRhdGUiKX19O3ZhciB1PXt6ZXJvTm9uWmVybzpvKGZ1bmN0aW9uKEgscSl7cmV0dXJuKEg9PW51bGx8fHE9PW51bGwpJiZIIT09cXx8SD09MCYmcSE9MD8hMDpIIT0wJiZxPT0wfSwiemVyb05vblplcm8iKSxhbnk6byhmdW5jdGlvbihILHEpe3JldHVybiBIIT1xfSwiYW55IiksZW1wdHlOb25FbXB0eTpvKGZ1bmN0aW9uKEgscSl7dmFyIFE9SWYoSCksYWU9SWYocSk7cmV0dXJuIFEmJiFhZXx8IVEmJmFlfSwiZW1wdHlOb25FbXB0eSIpfSxoPVNhLnR5cGVzLGY9W3tuYW1lOiJsYWJlbCIsdHlwZTpoLnRleHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNaT3JkZXI6dS5lbXB0eU5vbkVtcHR5fSx7bmFtZToidGV4dC1yb3RhdGlvbiIsdHlwZTpoLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLGQ9W3tuYW1lOiJzb3VyY2UtbGFiZWwiLHR5cGU6aC50ZXh0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtcm90YXRpb24iLHR5cGU6aC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1tYXJnaW4teCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW9mZnNldCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxwPVt7bmFtZToidGFyZ2V0LWxhYmVsIix0eXBlOmgudGV4dCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LXJvdGF0aW9uIix0eXBlOmgudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LW1hcmdpbi15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sbT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOmguZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6aC5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpoLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6aC50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOmgudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6aC50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOmgucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxnPVt7bmFtZToidGV4dC12YWxpZ24iLHR5cGU6aC52YWxpZ24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWhhbGlnbiIsdHlwZTpoLmhhbGlnbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtb3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1ib3JkZXItd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItc3R5bGUiLHR5cGU6aC5ib3JkZXJTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtYmFja2dyb3VuZC1zaGFwZSIsdHlwZTpoLnRleHRCYWNrZ3JvdW5kU2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWp1c3RpZmljYXRpb24iLHR5cGU6aC5qdXN0aWZpY2F0aW9ufV0seT1be25hbWU6ImV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ0ZXh0LWV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9XSx2PVt7bmFtZToiZGlzcGxheSIsdHlwZTpoLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6dS5hbnksdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpoLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjp1Lnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6aC56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpoLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOmgubnVtYmVyLHRyaWdnZXJzWk9yZGVyOnUuYW55fV0seD1be25hbWU6Im92ZXJsYXktcGFkZGluZyIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJvdmVybGF5LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJvdmVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJvdmVybGF5LXNoYXBlIix0eXBlOmgub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3ZlcmxheS1jb3JuZXItcmFkaXVzIix0eXBlOmguY29ybmVyUmFkaXVzfV0sYj1be25hbWU6InVuZGVybGF5LXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidW5kZXJsYXktY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InVuZGVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJ1bmRlcmxheS1zaGFwZSIsdHlwZTpoLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InVuZGVybGF5LWNvcm5lci1yYWRpdXMiLHR5cGU6aC5jb3JuZXJSYWRpdXN9XSx3PVt7bmFtZToidHJhbnNpdGlvbi1wcm9wZXJ0eSIsdHlwZTpoLnByb3BMaXN0fSx7bmFtZToidHJhbnNpdGlvbi1kdXJhdGlvbiIsdHlwZTpoLnRpbWV9LHtuYW1lOiJ0cmFuc2l0aW9uLWRlbGF5Iix0eXBlOmgudGltZX0se25hbWU6InRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIix0eXBlOmguZWFzaW5nfV0sXz1vKGZ1bmN0aW9uKEgscSl7cmV0dXJuIHEudmFsdWU9PT0ibGFiZWwiPy1ILnBvb2xJbmRleCgpOnEucGZWYWx1ZX0sIm5vZGVTaXplSGFzaE92ZXJyaWRlIiksVD1be25hbWU6ImhlaWdodCIsdHlwZTpoLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55LGhhc2hPdmVycmlkZTpffSx7bmFtZToid2lkdGgiLHR5cGU6aC5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSxoYXNoT3ZlcnJpZGU6X30se25hbWU6InNoYXBlIix0eXBlOmgubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6aC5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29ybmVyLXJhZGl1cyIsdHlwZTpoLmNvcm5lclJhZGl1c30se25hbWU6ImJhY2tncm91bmQtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImJhY2tncm91bmQtZmlsbCIsdHlwZTpoLmZpbGx9LHtuYW1lOiJiYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ibGFja2VuIix0eXBlOmgubk9uZU9uZU51bWJlcn0se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6aC5jb2xvcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOmgucGVyY2VudGFnZXN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIsdHlwZTpoLmdyYWRpZW50RGlyZWN0aW9ufSx7bmFtZToicGFkZGluZyIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJwYWRkaW5nLXJlbGF0aXZlLXRvIix0eXBlOmgucGFkZGluZ1JlbGF0aXZlVG8sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJib3VuZHMtZXhwYW5zaW9uIix0eXBlOmguYm91bmRzRXhwYW5zaW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sRT1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToiYm9yZGVyLWNhcCIsdHlwZTpoLmxpbmVDYXB9LHtuYW1lOiJib3JkZXItam9pbiIsdHlwZTpoLmxpbmVKb2lufSx7bmFtZToiYm9yZGVyLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJib3JkZXItZGFzaC1vZmZzZXQiLHR5cGU6aC5udW1iZXJ9LHtuYW1lOiJib3JkZXItcG9zaXRpb24iLHR5cGU6aC5saW5lUG9zaXRpb259XSxMPVt7bmFtZToib3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im91dGxpbmUtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3V0bGluZS1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToib3V0bGluZS1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sUz1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6aC51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpoLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6aC5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6aC5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOmguYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOmguYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6aC5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpoLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6aC5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpoLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpoLmJnUG9zfV0sQT1be25hbWU6InBvc2l0aW9uIix0eXBlOmgucG9zaXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIsdHlwZTpoLmNvbXBvdW5kSW5jbHVkZUxhYmVscyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1sZWZ0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLXJpZ2h0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi1oZWlnaHQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLXRvcCIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLEk9W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOmgubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOmguZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOmgubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOmgubnVtYmVyfSx7bmFtZToibGluZS1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZX0se25hbWU6ImxpbmUtb3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpoLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6aC5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOmguY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtcmFkaWkiLHR5cGU6aC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToicmFkaXVzLXR5cGUiLHR5cGU6aC5yYWRpdXNUeXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOmguYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktcmFkaXVzIix0eXBlOmgubnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZWRnZS1kaXN0YW5jZXMiLHR5cGU6aC5lZGdlRGlzdGFuY2VzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYXJyb3ctc2NhbGUiLHR5cGU6aC5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imxvb3AtZGlyZWN0aW9uIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJsb29wLXN3ZWVwIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sRD1be25hbWU6Imdob3N0Iix0eXBlOmguYm9vbCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9XSxrPVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpoLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfV0sUj1bXTtTYS5waWVCYWNrZ3JvdW5kTj0xNixSLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgQz0xO0M8PVNhLnBpZUJhY2tncm91bmROO0MrKylSLnB1c2goe25hbWU6InBpZS0iK0MrIi1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOmguY29sb3J9KSxSLnB1c2goe25hbWU6InBpZS0iK0MrIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6aC5wZXJjZW50fSksUi5wdXNoKHtuYW1lOiJwaWUtIitDKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0pO3ZhciBPPVtdLE49U2EuYXJyb3dQcmVmaXhlcz1bInNvdXJjZSIsIm1pZC1zb3VyY2UiLCJ0YXJnZXQiLCJtaWQtdGFyZ2V0Il07W3tuYW1lOiJhcnJvdy1zaGFwZSIsdHlwZTpoLmFycm93U2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJhcnJvdy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYXJyb3ctZmlsbCIsdHlwZTpoLmFycm93RmlsbH0se25hbWU6ImFycm93LXdpZHRoIix0eXBlOmguYXJyb3dXaWR0aH1dLmZvckVhY2goZnVuY3Rpb24oSil7Ti5mb3JFYWNoKGZ1bmN0aW9uKEgpe3ZhciBxPUgrIi0iK0oubmFtZSxRPUoudHlwZSxhZT1KLnRyaWdnZXJzQm91bmRzO08ucHVzaCh7bmFtZTpxLHR5cGU6USx0cmlnZ2Vyc0JvdW5kczphZX0pfSl9LHt9KTt2YXIgUD1TYS5wcm9wZXJ0aWVzPVtdLmNvbmNhdCh5LHcsdix4LGIsRCxnLG0sZixkLHAsVCxFLEwsUyxSLEEsSSxPLGspLEY9U2EucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOnksdHJhbnNpdGlvbjp3LHZpc2liaWxpdHk6dixvdmVybGF5OngsdW5kZXJsYXk6YixnaG9zdDpELGNvbW1vbkxhYmVsOmcsbGFiZWxEaW1lbnNpb25zOm0sbWFpbkxhYmVsOmYsc291cmNlTGFiZWw6ZCx0YXJnZXRMYWJlbDpwLG5vZGVCb2R5OlQsbm9kZUJvcmRlcjpFLG5vZGVPdXRsaW5lOkwsYmFja2dyb3VuZEltYWdlOlMscGllOlIsY29tcG91bmQ6QSxlZGdlTGluZTpJLGVkZ2VBcnJvdzpPLGNvcmU6a30sQj1TYS5wcm9wZXJ0eUdyb3VwTmFtZXM9e30sRz1TYS5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhGKTtHLmZvckVhY2goZnVuY3Rpb24oSil7QltKXT1GW0pdLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gSC5uYW1lfSksRltKXS5mb3JFYWNoKGZ1bmN0aW9uKEgpe3JldHVybiBILmdyb3VwS2V5PUp9KX0pO3ZhciB6PVNhLmFsaWFzZXM9W3tuYW1lOiJjb250ZW50Iixwb2ludHNUbzoibGFiZWwifSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZSIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0Iixwb2ludHNUbzoiY29udHJvbC1wb2ludC13ZWlnaHRzIn0se25hbWU6InNlZ21lbnQtZGlzdGFuY2UiLHBvaW50c1RvOiJzZWdtZW50LWRpc3RhbmNlcyJ9LHtuYW1lOiJzZWdtZW50LXdlaWdodCIscG9pbnRzVG86InNlZ21lbnQtd2VpZ2h0cyJ9LHtuYW1lOiJzZWdtZW50LXJhZGl1cyIscG9pbnRzVG86InNlZ21lbnQtcmFkaWkifSx7bmFtZToiZWRnZS10ZXh0LXJvdGF0aW9uIixwb2ludHNUbzoidGV4dC1yb3RhdGlvbiJ9LHtuYW1lOiJwYWRkaW5nLWxlZnQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctcmlnaHQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctdG9wIixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLWJvdHRvbSIscG9pbnRzVG86InBhZGRpbmcifV07U2EucHJvcGVydHlOYW1lcz1QLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gSi5uYW1lfSk7Zm9yKHZhciBXPTA7VzxQLmxlbmd0aDtXKyspe3ZhciBaPVBbV107UFtaLm5hbWVdPVp9Zm9yKHZhciBqPTA7ajx6Lmxlbmd0aDtqKyspe3ZhciBvZT16W2pdLEs9UFtvZS5wb2ludHNUb10sZWU9e25hbWU6b2UubmFtZSxhbGlhczohMCxwb2ludHNUbzpLfTtQLnB1c2goZWUpLFBbb2UubmFtZV09ZWV9fSkoKTtTYS5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt0XX07U2EuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlO2lmKHQuZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHQuZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBlPWlyKHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwib3ZlcmxheS1jb3JuZXItcmFkaXVzIjoiYXV0byIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LWNvcm5lci1yYWRpdXMiOiJhdXRvIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsImJvcmRlci1kYXNoLXBhdHRlcm4iOls0LDJdLCJib3JkZXItZGFzaC1vZmZzZXQiOjAsImJvcmRlci1jYXAiOiJidXR0IiwiYm9yZGVyLWpvaW4iOiJtaXRlciIsImJvcmRlci1wb3NpdGlvbiI6ImNlbnRlciIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiY29ybmVyLXJhZGl1cyI6ImF1dG8iLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0xO2Y8PVNhLnBpZUJhY2tncm91bmROO2YrKyl7dmFyIGQ9aC5uYW1lLnJlcGxhY2UoInt7aX19IixmKSxwPWgudmFsdWU7dVtkXT1wfXJldHVybiB1fSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLW91dGxpbmUtd2lkdGgiOjAsImxpbmUtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJzZWdtZW50LXJhZGlpIjoxNSwicmFkaXVzLXR5cGUiOiJhcmMtcmFkaXVzIiwidGF4aS10dXJuIjoiNTAlIiwidGF4aS1yYWRpdXMiOjE1LCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe3JldHVybiBTYS5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGQ9ZisiLSIraC5uYW1lLHA9aC52YWx1ZTt1W2RdPXB9KSx1fSx7fSkpLHI9e30sbj0wO248dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMucHJvcGVydGllc1tuXTtpZighaS5wb2ludHNUbyl7dmFyIGE9aS5uYW1lLHM9ZVthXSxsPXRoaXMucGFyc2UoYSxzKTtyW2FdPWx9fXJldHVybiB0LmRlZmF1bHRQcm9wZXJ0aWVzPXIsdC5kZWZhdWx0UHJvcGVydGllc307U2EuYWRkRGVmYXVsdFN0eWxlc2hlZXQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdG9yKCI6cGFyZW50IikuY3NzKHtzaGFwZToicmVjdGFuZ2xlIixwYWRkaW5nOjEwLCJiYWNrZ3JvdW5kLWNvbG9yIjoiI2VlZSIsImJvcmRlci1jb2xvciI6IiNjY2MiLCJib3JkZXItd2lkdGgiOjF9KS5zZWxlY3RvcigiZWRnZSIpLmNzcyh7d2lkdGg6M30pLnNlbGVjdG9yKCI6bG9vcCIpLmNzcyh7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn0pLnNlbGVjdG9yKCJlZGdlOmNvbXBvdW5kIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIiLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUifSkuc2VsZWN0b3IoIjpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjMDE2OUQ5IiwibGluZS1jb2xvciI6IiMwMTY5RDkiLCJzb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwidGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSIsIm1pZC1zb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXRhcmdldC1hcnJvdy1jb2xvciI6IiMwMTY5RDkifSkuc2VsZWN0b3IoIjpwYXJlbnQ6c2VsZWN0ZWQiKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0NDRTFGOSIsImJvcmRlci1jb2xvciI6IiNhZWM4ZTUifSkuc2VsZWN0b3IoIjphY3RpdmUiKS5jc3MoeyJvdmVybGF5LWNvbG9yIjoiYmxhY2siLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LW9wYWNpdHkiOi4yNX0pLHRoaXMuZGVmYXVsdExlbmd0aD10aGlzLmxlbmd0aH07UTY9e307UTYucGFyc2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcztpZihuaShlKSlyZXR1cm4gaS5wYXJzZUltcGxXYXJuKHQsZSxyLG4pO3ZhciBhPW49PT0ibWFwcGluZyJ8fG49PT0hMHx8bj09PSExfHxuPT1udWxsPyJkb250Y2FyZSI6bixzPXI/InQiOiJmIixsPSIiK2UsdT1yZ2UodCxsLHMsYSksaD1pLnByb3BDYWNoZT1pLnByb3BDYWNoZXx8W10sZjtyZXR1cm4oZj1oW3VdKXx8KGY9aFt1XT1pLnBhcnNlSW1wbFdhcm4odCxlLHIsbikpLChyfHxuPT09Im1hcHBpbmciKSYmKGY9WmMoZiksZiYmKGYudmFsdWU9WmMoZi52YWx1ZSkpKSxmfTtRNi5wYXJzZUltcGxXYXJuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMucGFyc2VJbXBsKHQsZSxyLG4pO3JldHVybiFpJiZlIT1udWxsJiZvbigiVGhlIHN0eWxlIHByb3BlcnR5IGAiLmNvbmNhdCh0LCI6ICIpLmNvbmNhdChlLCJgIGlzIGludmFsaWQiKSksaSYmKGkubmFtZT09PSJ3aWR0aCJ8fGkubmFtZT09PSJoZWlnaHQiKSYmZT09PSJsYWJlbCImJm9uKCJUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgIitpLm5hbWUrImAiKSxpfTtRNi5wYXJzZUltcGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0PWlCKHQpO3ZhciBhPWkucHJvcGVydGllc1t0XSxzPWUsbD1pLnR5cGVzO2lmKCFhfHxlPT09dm9pZCAwKXJldHVybiBudWxsO2EuYWxpYXMmJihhPWEucG9pbnRzVG8sdD1hLm5hbWUpO3ZhciB1PVp0KGUpO3UmJihlPWUudHJpbSgpKTt2YXIgaD1hLnR5cGU7aWYoIWgpcmV0dXJuIG51bGw7aWYociYmKGU9PT0iInx8ZT09PW51bGwpKXJldHVybntuYW1lOnQsdmFsdWU6ZSxieXBhc3M6ITAsZGVsZXRlQnlwYXNzOiEwfTtpZihuaShlKSlyZXR1cm57bmFtZTp0LHZhbHVlOmUsc3RyVmFsdWU6ImZuIixtYXBwZWQ6bC5mbixieXBhc3M6cn07dmFyIGYsZDtpZighKCF1fHxufHxlLmxlbmd0aDw3fHxlWzFdIT09ImEiKSl7aWYoZS5sZW5ndGg+PTcmJmVbMF09PT0iZCImJihmPW5ldyBSZWdFeHAobC5kYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocilyZXR1cm4hMTt2YXIgcD1sLmRhdGE7cmV0dXJue25hbWU6dCx2YWx1ZTpmLHN0clZhbHVlOiIiK2UsbWFwcGVkOnAsZmllbGQ6ZlsxXSxieXBhc3M6cn19ZWxzZSBpZihlLmxlbmd0aD49MTAmJmVbMF09PT0ibSImJihkPW5ldyBSZWdFeHAobC5tYXBEYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocnx8aC5tdWx0aXBsZSlyZXR1cm4hMTt2YXIgbT1sLm1hcERhdGE7aWYoIShoLmNvbG9yfHxoLm51bWJlcikpcmV0dXJuITE7dmFyIGc9dGhpcy5wYXJzZSh0LGRbNF0pO2lmKCFnfHxnLm1hcHBlZClyZXR1cm4hMTt2YXIgeT10aGlzLnBhcnNlKHQsZFs1XSk7aWYoIXl8fHkubWFwcGVkKXJldHVybiExO2lmKGcucGZWYWx1ZT09PXkucGZWYWx1ZXx8Zy5zdHJWYWx1ZT09PXkuc3RyVmFsdWUpcmV0dXJuIG9uKCJgIit0KyI6ICIrZSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIrdCsiOiAiK2cuc3RyVmFsdWUrImAiKSx0aGlzLnBhcnNlKHQsZy5zdHJWYWx1ZSk7aWYoaC5jb2xvcil7dmFyIHY9Zy52YWx1ZSx4PXkudmFsdWUsYj12WzBdPT09eFswXSYmdlsxXT09PXhbMV0mJnZbMl09PT14WzJdJiYodlszXT09PXhbM118fCh2WzNdPT1udWxsfHx2WzNdPT09MSkmJih4WzNdPT1udWxsfHx4WzNdPT09MSkpO2lmKGIpcmV0dXJuITF9cmV0dXJue25hbWU6dCx2YWx1ZTpkLHN0clZhbHVlOiIiK2UsbWFwcGVkOm0sZmllbGQ6ZFsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KGRbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoZFszXSksdmFsdWVNaW46Zy52YWx1ZSx2YWx1ZU1heDp5LnZhbHVlLGJ5cGFzczpyfX19aWYoaC5tdWx0aXBsZSYmbiE9PSJtdWx0aXBsZSIpe3ZhciB3O2lmKHU/dz1lLnNwbGl0KC9ccysvKTprbihlKT93PWU6dz1bZV0saC5ldmVuTXVsdGlwbGUmJncubGVuZ3RoJTIhPT0wKXJldHVybiBudWxsO2Zvcih2YXIgXz1bXSxUPVtdLEU9W10sTD0iIixTPSExLEE9MDtBPHcubGVuZ3RoO0ErKyl7dmFyIEk9aS5wYXJzZSh0LHdbQV0sciwibXVsdGlwbGUiKTtTPVN8fFp0KEkudmFsdWUpLF8ucHVzaChJLnZhbHVlKSxFLnB1c2goSS5wZlZhbHVlIT1udWxsP0kucGZWYWx1ZTpJLnZhbHVlKSxULnB1c2goSS51bml0cyksTCs9KEE+MD8iICI6IiIpK0kuc3RyVmFsdWV9cmV0dXJuIGgudmFsaWRhdGUmJiFoLnZhbGlkYXRlKF8sVCk/bnVsbDpoLnNpbmdsZUVudW0mJlM/Xy5sZW5ndGg9PT0xJiZadChfWzBdKT97bmFtZTp0LHZhbHVlOl9bMF0sc3RyVmFsdWU6X1swXSxieXBhc3M6cn06bnVsbDp7bmFtZTp0LHZhbHVlOl8scGZWYWx1ZTpFLHN0clZhbHVlOkwsYnlwYXNzOnIsdW5pdHM6VH19dmFyIEQ9byhmdW5jdGlvbigpe2Zvcih2YXIgSD0wO0g8aC5lbnVtcy5sZW5ndGg7SCsrKXt2YXIgcT1oLmVudW1zW0hdO2lmKHE9PT1lKXJldHVybntuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfX1yZXR1cm4gbnVsbH0sImNoZWNrRW51bXMiKTtpZihoLm51bWJlcil7dmFyIGssUj0icHgiO2lmKGgudW5pdHMmJihrPWgudW5pdHMpLGguaW1wbGljaXRVbml0cyYmKFI9aC5pbXBsaWNpdFVuaXRzKSwhaC51bml0bGVzcylpZih1KXt2YXIgQz0icHh8ZW0iKyhoLmFsbG93UGVyY2VudD8ifFxcJSI6IiIpO2smJihDPWspO3ZhciBPPWUubWF0Y2goIl4oIitqaSsiKSgiK0MrIik/JCIpO08mJihlPU9bMV0saz1PWzJdfHxSKX1lbHNlKCFrfHxoLmltcGxpY2l0VW5pdHMpJiYoaz1SKTtpZihlPXBhcnNlRmxvYXQoZSksaXNOYU4oZSkmJmguZW51bXM9PT12b2lkIDApcmV0dXJuIG51bGw7aWYoaXNOYU4oZSkmJmguZW51bXMhPT12b2lkIDApcmV0dXJuIGU9cyxEKCk7aWYoaC5pbnRlZ2VyJiYhU3FlKGUpfHxoLm1pbiE9PXZvaWQgMCYmKGU8aC5taW58fGguc3RyaWN0TWluJiZlPT09aC5taW4pfHxoLm1heCE9PXZvaWQgMCYmKGU+aC5tYXh8fGguc3RyaWN0TWF4JiZlPT09aC5tYXgpKXJldHVybiBudWxsO3ZhciBOPXtuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlKyhrfHwiIiksdW5pdHM6ayxieXBhc3M6cn07cmV0dXJuIGgudW5pdGxlc3N8fGshPT0icHgiJiZrIT09ImVtIj9OLnBmVmFsdWU9ZTpOLnBmVmFsdWU9az09PSJweCJ8fCFrP2U6dGhpcy5nZXRFbVNpemVJblBpeGVscygpKmUsKGs9PT0ibXMifHxrPT09InMiKSYmKE4ucGZWYWx1ZT1rPT09Im1zIj9lOjFlMyplKSwoaz09PSJkZWcifHxrPT09InJhZCIpJiYoTi5wZlZhbHVlPWs9PT0icmFkIj9lOmFqZShlKSksaz09PSIlIiYmKE4ucGZWYWx1ZT1lLzEwMCksTn1lbHNlIGlmKGgucHJvcExpc3Qpe3ZhciBQPVtdLEY9IiIrZTtpZihGIT09Im5vbmUiKXtmb3IodmFyIEI9Ri5zcGxpdCgvXHMqLFxzKnxccysvKSxHPTA7RzxCLmxlbmd0aDtHKyspe3ZhciB6PUJbR10udHJpbSgpO2kucHJvcGVydGllc1t6XT9QLnB1c2goeik6b24oImAiK3orImAgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgbmFtZSIpfWlmKFAubGVuZ3RoPT09MClyZXR1cm4gbnVsbH1yZXR1cm57bmFtZTp0LHZhbHVlOlAsc3RyVmFsdWU6UC5sZW5ndGg9PT0wPyJub25lIjpQLmpvaW4oIiAiKSxieXBhc3M6cn19ZWxzZSBpZihoLmNvbG9yKXt2YXIgVz1WcWUoZSk7cmV0dXJuIFc/e25hbWU6dCx2YWx1ZTpXLHBmVmFsdWU6VyxzdHJWYWx1ZToicmdiKCIrV1swXSsiLCIrV1sxXSsiLCIrV1syXSsiKSIsYnlwYXNzOnJ9Om51bGx9ZWxzZSBpZihoLnJlZ2V4fHxoLnJlZ2V4ZXMpe2lmKGguZW51bXMpe3ZhciBaPUQoKTtpZihaKXJldHVybiBafWZvcih2YXIgaj1oLnJlZ2V4ZXM/aC5yZWdleGVzOltoLnJlZ2V4XSxvZT0wO29lPGoubGVuZ3RoO29lKyspe3ZhciBLPW5ldyBSZWdFeHAoaltvZV0pLGVlPUsuZXhlYyhlKTtpZihlZSlyZXR1cm57bmFtZTp0LHZhbHVlOmguc2luZ2xlUmVnZXhNYXRjaFZhbHVlP2VlWzFdOmVlLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9fXJldHVybiBudWxsfWVsc2UgcmV0dXJuIGguc3RyaW5nP3tuYW1lOnQsdmFsdWU6IiIrZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfTpoLmVudW1zP0QoKTpudWxsfTtVYT1vKGZ1bmN0aW9uIHQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUpO2lmKCFuQihlKSl7ZGkoIkEgc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UiKTtyZXR1cm59dGhpcy5fcHJpdmF0ZT17Y3k6ZSxjb3JlU3R5bGU6e319LHRoaXMubGVuZ3RoPTAsdGhpcy5yZXNldFRvRGVmYXVsdCgpfSwiU3R5bGUiKSxXYT1VYS5wcm90b3R5cGU7V2EuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGUifTtXYS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9wcml2YXRlLGU9dC5jeSxyPWUuZWxlbWVudHMoKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspdGhpc1tuXT12b2lkIDA7cmV0dXJuIHRoaXMubGVuZ3RoPTAsdC5jb250ZXh0U3R5bGVzPXt9LHQucHJvcERpZmZzPXt9LHRoaXMuY2xlYW5FbGVtZW50cyhyLCEwKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aVswXS5fcHJpdmF0ZTthLnN0eWxlRGlydHk9ITAsYS5hcHBsaWVkSW5pdFN0eWxlPSExfSksdGhpc307V2EucmVzZXRUb0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKSx0aGlzfTtXYS5jb3JlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVt0XXx8dGhpcy5nZXREZWZhdWx0UHJvcGVydHkodCl9O1dhLnNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT0iY29yZSI/bnVsbDpuZXcgUGYodCkscj10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW3JdPXtzZWxlY3RvcjplLHByb3BlcnRpZXM6W10sbWFwcGVkUHJvcGVydGllczpbXSxpbmRleDpyfSx0aGlzfTtXYS5jc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzO2lmKGUubGVuZ3RoPT09MSlmb3IodmFyIHI9ZVswXSxuPTA7bjx0LnByb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGk9dC5wcm9wZXJ0aWVzW25dLGE9cltpLm5hbWVdO2E9PT12b2lkIDAmJihhPXJbQjYoaS5uYW1lKV0pLGEhPT12b2lkIDAmJnRoaXMuY3NzUnVsZShpLm5hbWUsYSl9ZWxzZSBlLmxlbmd0aD09PTImJnRoaXMuY3NzUnVsZShlWzBdLGVbMV0pO3JldHVybiB0aGlzfTtXYS5zdHlsZT1XYS5jc3M7V2EuY3NzUnVsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyc2UodCxlKTtpZihyKXt2YXIgbj10aGlzLmxlbmd0aC0xO3RoaXNbbl0ucHJvcGVydGllcy5wdXNoKHIpLHRoaXNbbl0ucHJvcGVydGllc1tyLm5hbWVdPXIsci5uYW1lLm1hdGNoKC9waWUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJnIudmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1BpZT0hMCksci5tYXBwZWQmJnRoaXNbbl0ubWFwcGVkUHJvcGVydGllcy5wdXNoKHIpO3ZhciBpPSF0aGlzW25dLnNlbGVjdG9yO2kmJih0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtyLm5hbWVdPXIpfXJldHVybiB0aGlzfTtXYS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFltZSh0KT90LmFwcGVuZFRvU3R5bGUodGhpcyk6a24odCk/dGhpcy5hcHBlbmRGcm9tSnNvbih0KTpadCh0KSYmdGhpcy5hcHBlbmRGcm9tU3RyaW5nKHQpLHRoaXN9O1VhLmZyb21Kc29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFVhKHQpO3JldHVybiByLmZyb21Kc29uKGUpLHJ9O1VhLmZyb21TdHJpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFVhKHQpLmZyb21TdHJpbmcoZSl9O1tZYSx2Yix2QixldSxLNix4QixTYSxRNl0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihXYSx0KX0pO1VhLnR5cGVzPVdhLnR5cGVzO1VhLnByb3BlcnRpZXM9V2EucHJvcGVydGllcztVYS5wcm9wZXJ0eUdyb3Vwcz1XYS5wcm9wZXJ0eUdyb3VwcztVYS5wcm9wZXJ0eUdyb3VwTmFtZXM9V2EucHJvcGVydHlHcm91cE5hbWVzO1VhLnByb3BlcnR5R3JvdXBLZXlzPVdhLnByb3BlcnR5R3JvdXBLZXlzO1NKZT17c3R5bGU6byhmdW5jdGlvbihlKXtpZihlKXt2YXIgcj10aGlzLnNldFN0eWxlKGUpO3IudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LCJzdHlsZSIpLHNldFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gWW1lKGUpP3Iuc3R5bGU9ZS5nZW5lcmF0ZVN0eWxlKHRoaXMpOmtuKGUpP3Iuc3R5bGU9VWEuZnJvbUpzb24odGhpcyxlKTpadChlKT9yLnN0eWxlPVVhLmZyb21TdHJpbmcodGhpcyxlKTpyLnN0eWxlPVVhKHRoaXMpLHIuc3R5bGV9LCJzZXRTdHlsZSIpLHVwZGF0ZVN0eWxlOm8oZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9LCJ1cGRhdGVTdHlsZSIpfSxDSmU9InNpbmdsZSIsSjA9e2F1dG9sb2NrOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSwiYXV0b2xvY2siKSxhdXRvdW5ncmFiaWZ5Om8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sImF1dG91bmdyYWJpZnkiKSxhdXRvdW5zZWxlY3RpZnk6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sImF1dG91bnNlbGVjdGlmeSIpLHNlbGVjdGlvblR5cGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO2lmKHIuc2VsZWN0aW9uVHlwZT09bnVsbCYmKHIuc2VsZWN0aW9uVHlwZT1DSmUpLGUhPT12b2lkIDApKGU9PT0iYWRkaXRpdmUifHxlPT09InNpbmdsZSIpJiYoci5zZWxlY3Rpb25UeXBlPWUpO2Vsc2UgcmV0dXJuIHIuc2VsZWN0aW9uVHlwZTtyZXR1cm4gdGhpc30sInNlbGVjdGlvblR5cGUiKSxwYW5uaW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInBhbm5pbmdFbmFibGVkIiksdXNlclBhbm5pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyUGFubmluZ0VuYWJsZWQiKSx6b29taW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInpvb21pbmdFbmFibGVkIiksdXNlclpvb21pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyWm9vbWluZ0VuYWJsZWQiKSxib3hTZWxlY3Rpb25FbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30sImJveFNlbGVjdGlvbkVuYWJsZWQiKSxwYW46byhmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPXRoaXMuX3ByaXZhdGUucGFuLG4saSxhLHMsbDtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcjtjYXNlIDE6aWYoWnQoZVswXSkpcmV0dXJuIG49ZVswXSxyW25dO2lmKFVyKGVbMF0pKXtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpczthPWVbMF0scz1hLngsbD1hLnkseHQocykmJihyLng9cykseHQobCkmJihyLnk9bCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7bj1lWzBdLGk9ZVsxXSwobj09PSJ4Inx8bj09PSJ5IikmJnh0KGkpJiYocltuXT1pKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuIikscGFuQnk6byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXMuX3ByaXZhdGUucGFuLGEscyxsLHUsaDtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpVcihlKSYmKGw9blswXSx1PWwueCxoPWwueSx4dCh1KSYmKGkueCs9dSkseHQoaCkmJihpLnkrPWgpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjphPWUscz1yLChhPT09IngifHxhPT09InkiKSYmeHQocykmJihpW2FdKz1zKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuQnkiKSxmaXQ6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZSxyKTtpZihuKXt2YXIgaT10aGlzLl9wcml2YXRlO2kuem9vbT1uLnpvb20saS5wYW49bi5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSwiZml0IiksZ2V0Rml0Vmlld3BvcnQ6byhmdW5jdGlvbihlLHIpe2lmKHh0KGUpJiZyPT09dm9pZCAwJiYocj1lLGU9dm9pZCAwKSwhKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCkpe3ZhciBuO2lmKFp0KGUpKXt2YXIgaT1lO2U9dGhpcy4kKGkpfWVsc2UgaWYoX3FlKGUpKXt2YXIgYT1lO249e3gxOmEueDEseTE6YS55MSx4MjphLngyLHkyOmEueTJ9LG4udz1uLngyLW4ueDEsbi5oPW4ueTItbi55MX1lbHNlIHdvKGUpfHwoZT10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZighKHdvKGUpJiZlLmVtcHR5KCkpKXtuPW58fGUuYm91bmRpbmdCb3goKTt2YXIgcz10aGlzLndpZHRoKCksbD10aGlzLmhlaWdodCgpLHU7aWYocj14dChyKT9yOjAsIWlzTmFOKHMpJiYhaXNOYU4obCkmJnM+MCYmbD4wJiYhaXNOYU4obi53KSYmIWlzTmFOKG4uaCkmJm4udz4wJiZuLmg+MCl7dT1NYXRoLm1pbigocy0yKnIpL24udywobC0yKnIpL24uaCksdT11PnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206dSx1PXU8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTp1O3ZhciBoPXt4OihzLXUqKG4ueDErbi54MikpLzIseToobC11KihuLnkxK24ueTIpKS8yfTtyZXR1cm57em9vbTp1LHBhbjpofX19fX0sImdldEZpdFZpZXdwb3J0Iiksem9vbVJhbmdlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHI9PW51bGwpe3ZhciBpPWU7ZT1pLm1pbixyPWkubWF4fXJldHVybiB4dChlKSYmeHQocikmJmU8PXI/KG4ubWluWm9vbT1lLG4ubWF4Wm9vbT1yKTp4dChlKSYmcj09PXZvaWQgMCYmZTw9bi5tYXhab29tP24ubWluWm9vbT1lOnh0KHIpJiZlPT09dm9pZCAwJiZyPj1uLm1pblpvb20mJihuLm1heFpvb209ciksdGhpc30sInpvb21SYW5nZSIpLG1pblpvb206byhmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjplfSl9LCJtaW5ab29tIiksbWF4Wm9vbTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp0aGlzLnpvb21SYW5nZSh7bWF4OmV9KX0sIm1heFpvb20iKSxnZXRab29tZWRWaWV3cG9ydDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUsbj1yLnBhbixpPXIuem9vbSxhLHMsbD0hMTtpZihyLnpvb21pbmdFbmFibGVkfHwobD0hMCkseHQoZSk/cz1lOlVyKGUpJiYocz1lLmxldmVsLGUucG9zaXRpb24hPW51bGw/YT0kNihlLnBvc2l0aW9uLGksbik6ZS5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoYT1lLnJlbmRlcmVkUG9zaXRpb24pLGEhPW51bGwmJiFyLnBhbm5pbmdFbmFibGVkJiYobD0hMCkpLHM9cz5yLm1heFpvb20/ci5tYXhab29tOnMscz1zPHIubWluWm9vbT9yLm1pblpvb206cyxsfHwheHQocyl8fHM9PT1pfHxhIT1udWxsJiYoIXh0KGEueCl8fCF4dChhLnkpKSlyZXR1cm4gbnVsbDtpZihhIT1udWxsKXt2YXIgdT1uLGg9aSxmPXMsZD17eDotZi9oKihhLngtdS54KSthLngseTotZi9oKihhLnktdS55KSthLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206ZixwYW46ZH19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOnMscGFuOm59fSwiZ2V0Wm9vbWVkVmlld3BvcnQiKSx6b29tOm8oZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO3ZhciByPXRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQoZSksbj10aGlzLl9wcml2YXRlO3JldHVybiByPT1udWxsfHwhci56b29tZWQ/dGhpczoobi56b29tPXIuem9vbSxyLnBhbm5lZCYmKG4ucGFuLng9ci5wYW4ueCxuLnBhbi55PXIucGFuLnkpLHRoaXMuZW1pdCgiem9vbSIrKHIucGFubmVkPyIgcGFuIjoiIikrIiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXMpfSwiem9vbSIpLHZpZXdwb3J0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPSEwLGk9ITAsYT1bXSxzPSExLGw9ITE7aWYoIWUpcmV0dXJuIHRoaXM7aWYoeHQoZS56b29tKXx8KG49ITEpLFVyKGUucGFuKXx8KGk9ITEpLCFuJiYhaSlyZXR1cm4gdGhpcztpZihuKXt2YXIgdT1lLnpvb207dTxyLm1pblpvb218fHU+ci5tYXhab29tfHwhci56b29taW5nRW5hYmxlZD9zPSEwOihyLnpvb209dSxhLnB1c2goInpvb20iKSl9aWYoaSYmKCFzfHwhZS5jYW5jZWxPbkZhaWxlZFpvb20pJiZyLnBhbm5pbmdFbmFibGVkKXt2YXIgaD1lLnBhbjt4dChoLngpJiYoci5wYW4ueD1oLngsbD0hMSkseHQoaC55KSYmKHIucGFuLnk9aC55LGw9ITEpLGx8fGEucHVzaCgicGFuIil9cmV0dXJuIGEubGVuZ3RoPjAmJihhLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KGEuam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sInZpZXdwb3J0IiksY2VudGVyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5nZXRDZW50ZXJQYW4oZSk7cmV0dXJuIHImJih0aGlzLl9wcml2YXRlLnBhbj1yLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IikpLHRoaXN9LCJjZW50ZXIiKSxnZXRDZW50ZXJQYW46byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpe2lmKFp0KGUpKXt2YXIgbj1lO2U9dGhpcy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9ZWxzZSB3byhlKXx8KGU9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoZS5sZW5ndGghPT0wKXt2YXIgaT1lLmJvdW5kaW5nQm94KCksYT10aGlzLndpZHRoKCkscz10aGlzLmhlaWdodCgpO3I9cj09PXZvaWQgMD90aGlzLl9wcml2YXRlLnpvb206cjt2YXIgbD17eDooYS1yKihpLngxK2kueDIpKS8yLHk6KHMtciooaS55MStpLnkyKSkvMn07cmV0dXJuIGx9fX0sImdldENlbnRlclBhbiIpLHJlc2V0Om8oZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZHx8IXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ/dGhpczoodGhpcy52aWV3cG9ydCh7cGFuOnt4OjAseTowfSx6b29tOjF9KSx0aGlzKX0sInJlc2V0IiksaW52YWxpZGF0ZVNpemU6byhmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuc2l6ZUNhY2hlPW51bGx9LCJpbnZhbGlkYXRlU2l6ZSIpLHNpemU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUscj1lLmNvbnRhaW5lcixuPXRoaXM7cmV0dXJuIGUuc2l6ZUNhY2hlPWUuc2l6ZUNhY2hlfHwocj9mdW5jdGlvbigpe3ZhciBpPW4ud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShyKSxhPW8oZnVuY3Rpb24obCl7cmV0dXJuIHBhcnNlRmxvYXQoaS5nZXRQcm9wZXJ0eVZhbHVlKGwpKX0sInZhbCIpO3JldHVybnt3aWR0aDpyLmNsaWVudFdpZHRoLWEoInBhZGRpbmctbGVmdCIpLWEoInBhZGRpbmctcmlnaHQiKSxoZWlnaHQ6ci5jbGllbnRIZWlnaHQtYSgicGFkZGluZy10b3AiKS1hKCJwYWRkaW5nLWJvdHRvbSIpfX0oKTp7d2lkdGg6MSxoZWlnaHQ6MX0pfSwic2l6ZSIpLHdpZHRoOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkud2lkdGh9LCJ3aWR0aCIpLGhlaWdodDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodH0sImhlaWdodCIpLGV4dGVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5wYW4scj10aGlzLl9wcml2YXRlLnpvb20sbj10aGlzLnJlbmRlcmVkRXh0ZW50KCksaT17eDE6KG4ueDEtZS54KS9yLHgyOihuLngyLWUueCkvcix5MToobi55MS1lLnkpL3IseTI6KG4ueTItZS55KS9yfTtyZXR1cm4gaS53PWkueDItaS54MSxpLmg9aS55Mi1pLnkxLGl9LCJleHRlbnQiKSxyZW5kZXJlZEV4dGVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCgpLHI9dGhpcy5oZWlnaHQoKTtyZXR1cm57eDE6MCx5MTowLHgyOmUseTI6cix3OmUsaDpyfX0sInJlbmRlcmVkRXh0ZW50IiksbXVsdGlDbGlja0RlYm91bmNlVGltZTpvKGZ1bmN0aW9uKGUpe2lmKGUpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfSwibXVsdGlDbGlja0RlYm91bmNlVGltZSIpfTtKMC5jZW50cmU9SjAuY2VudGVyO0owLmF1dG9sb2NrTm9kZXM9SjAuYXV0b2xvY2s7SjAuYXV0b3VuZ3JhYmlmeU5vZGVzPUowLmF1dG91bmdyYWJpZnk7aGI9e2RhdGE6c24uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOnNuLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOnNuLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSl9O2hiLmF0dHI9aGIuZGF0YTtoYi5yZW1vdmVBdHRyPWhiLnJlbW92ZURhdGE7ZmI9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2U9aXIoe30sZSk7dmFyIG49ZS5jb250YWluZXI7biYmIUM2KG4pJiZDNihuWzBdKSYmKG49blswXSk7dmFyIGk9bj9uLl9jeXJlZzpudWxsO2k9aXx8e30saSYmaS5jeSYmKGkuY3kuZGVzdHJveSgpLGk9e30pO3ZhciBhPWkucmVhZGllcz1pLnJlYWRpZXN8fFtdO24mJihuLl9jeXJlZz1pKSxpLmN5PXI7dmFyIHM9WGkhPT12b2lkIDAmJm4hPT12b2lkIDAmJiFlLmhlYWRsZXNzLGw9ZTtsLmxheW91dD1pcih7bmFtZTpzPyJncmlkIjoibnVsbCJ9LGwubGF5b3V0KSxsLnJlbmRlcmVyPWlyKHtuYW1lOnM/ImNhbnZhcyI6Im51bGwifSxsLnJlbmRlcmVyKTt2YXIgdT1vKGZ1bmN0aW9uKGcseSx2KXtyZXR1cm4geSE9PXZvaWQgMD95OnYhPT12b2lkIDA/djpnfSwiZGVmVmFsIiksaD10aGlzLl9wcml2YXRlPXtjb250YWluZXI6bixyZWFkeTohMSxvcHRpb25zOmwsZWxlbWVudHM6bmV3IEFhKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyBBYSh0aGlzKSxkYXRhOmwuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDp1KCEwLGwuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDp1KCEwLGwudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDp1KCEwLGwucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDp1KCEwLGwudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnUoITAsbC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazp1KCExLGwuYXV0b2xvY2ssbC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnUoITEsbC5hdXRvdW5ncmFiaWZ5LGwuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6dSghMSxsLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOmwuc3R5bGVFbmFibGVkPT09dm9pZCAwP3M6bC5zdHlsZUVuYWJsZWQsem9vbTp4dChsLnpvb20pP2wuem9vbToxLHBhbjp7eDpVcihsLnBhbikmJnh0KGwucGFuLngpP2wucGFuLng6MCx5OlVyKGwucGFuKSYmeHQobC5wYW4ueSk/bC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTp1KDI1MCxsLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUobC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOmwubWluWm9vbSxtYXg6bC5tYXhab29tfSk7dmFyIGY9byhmdW5jdGlvbihnLHkpe3ZhciB2PWcuc29tZShMcWUpO2lmKHYpcmV0dXJuIEMxLmFsbChnKS50aGVuKHkpO3koZyl9LCJsb2FkRXh0RGF0YSIpO2guc3R5bGVFbmFibGVkJiZyLnNldFN0eWxlKFtdKTt2YXIgZD1pcih7fSxsLGwucmVuZGVyZXIpO3IuaW5pdFJlbmRlcmVyKGQpO3ZhciBwPW8oZnVuY3Rpb24oZyx5LHYpe3Iubm90aWZpY2F0aW9ucyghMSk7dmFyIHg9ci5tdXRhYmxlRWxlbWVudHMoKTt4Lmxlbmd0aD4wJiZ4LnJlbW92ZSgpLGchPW51bGwmJihVcihnKXx8a24oZykpJiZyLmFkZChnKSxyLm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKHcpe3Iubm90aWZpY2F0aW9ucyghMCksci5lbWl0KHcpLHIub25lKCJsb2FkIix5KSxyLmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXtyLm9uZSgiZG9uZSIsdiksci5lbWl0KCJkb25lIil9KTt2YXIgYj1pcih7fSxyLl9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtiLmVsZXM9ci5lbGVtZW50cygpLHIubGF5b3V0KGIpLnJ1bigpfSwic2V0RWxlc0FuZExheW91dCIpO2YoW2wuc3R5bGUsbC5lbGVtZW50c10sZnVuY3Rpb24obSl7dmFyIGc9bVswXSx5PW1bMV07aC5zdHlsZUVuYWJsZWQmJnIuc3R5bGUoKS5hcHBlbmQoZykscCh5LGZ1bmN0aW9uKCl7ci5zdGFydEFuaW1hdGlvbkxvb3AoKSxoLnJlYWR5PSEwLG5pKGwucmVhZHkpJiZyLm9uKCJyZWFkeSIsbC5yZWFkeSk7Zm9yKHZhciB2PTA7djxhLmxlbmd0aDt2Kyspe3ZhciB4PWFbdl07ci5vbigicmVhZHkiLHgpfWkmJihpLnJlYWRpZXM9W10pLHIuZW1pdCgicmVhZHkiKX0sbC5kb25lKX0pfSwiQ29yZSIpLE02PWZiLnByb3RvdHlwZTtpcihNNix7aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJjb3JlIn0sImluc3RhbmNlU3RyaW5nIiksaXNSZWFkeTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVhZHl9LCJpc1JlYWR5IiksZGVzdHJveWVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LCJkZXN0cm95ZWQiKSxyZWFkeTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZSk6dGhpcy5vbigicmVhZHkiLGUpLHRoaXN9LCJyZWFkeSIpLGRlc3Ryb3k6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIWUuZGVzdHJveWVkKCkpcmV0dXJuIGUuc3RvcEFuaW1hdGlvbkxvb3AoKSxlLmRlc3Ryb3lSZW5kZXJlcigpLHRoaXMuZW1pdCgiZGVzdHJveSIpLGUuX3ByaXZhdGUuZGVzdHJveWVkPSEwLGV9LCJkZXN0cm95IiksaGFzRWxlbWVudFdpdGhJZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZSl9LCJoYXNFbGVtZW50V2l0aElkIiksZ2V0RWxlbWVudEJ5SWQ6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChlKX0sImdldEVsZW1lbnRCeUlkIiksaGFzQ29tcG91bmROb2RlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30sImhhc0NvbXBvdW5kTm9kZXMiKSxoZWFkbGVzczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSwiaGVhZGxlc3MiKSxzdHlsZUVuYWJsZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sInN0eWxlRW5hYmxlZCIpLGFkZFRvUG9vbDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGUpLHRoaXN9LCJhZGRUb1Bvb2wiKSxyZW1vdmVGcm9tUG9vbDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZSksdGhpc30sInJlbW92ZUZyb21Qb29sIiksY29udGFpbmVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb250YWluZXJ8fG51bGx9LCJjb250YWluZXIiKSx3aW5kb3c6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyO2lmKGU9PW51bGwpcmV0dXJuIFhpO3ZhciByPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7cmV0dXJuIHI9PT12b2lkIDB8fHI9PW51bGw/WGk6ci5kZWZhdWx0Vmlld3x8WGl9LCJ3aW5kb3ciKSxtb3VudDpvKGZ1bmN0aW9uKGUpe2lmKGUhPW51bGwpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLGk9bi5vcHRpb25zO3JldHVybiFDNihlKSYmQzYoZVswXSkmJihlPWVbMF0pLHIuc3RvcEFuaW1hdGlvbkxvb3AoKSxyLmRlc3Ryb3lSZW5kZXJlcigpLG4uY29udGFpbmVyPWUsbi5zdHlsZUVuYWJsZWQ9ITAsci5pbnZhbGlkYXRlU2l6ZSgpLHIuaW5pdFJlbmRlcmVyKGlyKHt9LGksaS5yZW5kZXJlcix7bmFtZTppLnJlbmRlcmVyLm5hbWU9PT0ibnVsbCI/ImNhbnZhcyI6aS5yZW5kZXJlci5uYW1lfSkpLHIuc3RhcnRBbmltYXRpb25Mb29wKCksci5zdHlsZShpLnN0eWxlKSxyLmVtaXQoIm1vdW50Iikscn19LCJtb3VudCIpLHVubW91bnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuc3RvcEFuaW1hdGlvbkxvb3AoKSxlLmRlc3Ryb3lSZW5kZXJlcigpLGUuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGUuZW1pdCgidW5tb3VudCIpLGV9LCJ1bm1vdW50Iiksb3B0aW9uczpvKGZ1bmN0aW9uKCl7cmV0dXJuIFpjKHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LCJvcHRpb25zIiksanNvbjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLGk9ci5tdXRhYmxlRWxlbWVudHMoKSxhPW8oZnVuY3Rpb24oXyl7cmV0dXJuIHIuZ2V0RWxlbWVudEJ5SWQoXy5pZCgpKX0sImdldEZyZXNoUmVmIik7aWYoVXIoZSkpe2lmKHIuc3RhcnRCYXRjaCgpLGUuZWxlbWVudHMpe3ZhciBzPXt9LGw9byhmdW5jdGlvbihfLFQpe2Zvcih2YXIgRT1bXSxMPVtdLFM9MDtTPF8ubGVuZ3RoO1MrKyl7dmFyIEE9X1tTXTtpZighQS5kYXRhLmlkKXtvbigiY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUiKTtjb250aW51ZX12YXIgST0iIitBLmRhdGEuaWQsRD1yLmdldEVsZW1lbnRCeUlkKEkpO3NbSV09ITAsRC5sZW5ndGghPT0wP0wucHVzaCh7ZWxlOkQsanNvbjpBfSk6KFQmJihBLmdyb3VwPVQpLEUucHVzaChBKSl9ci5hZGQoRSk7Zm9yKHZhciBrPTA7azxMLmxlbmd0aDtrKyspe3ZhciBSPUxba10sQz1SLmVsZSxPPVIuanNvbjtDLmpzb24oTyl9fSwidXBkYXRlRWxlcyIpO2lmKGtuKGUuZWxlbWVudHMpKWwoZS5lbGVtZW50cyk7ZWxzZSBmb3IodmFyIHU9WyJub2RlcyIsImVkZ2VzIl0saD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdLGQ9ZS5lbGVtZW50c1tmXTtrbihkKSYmbChkLGYpfXZhciBwPXIuY29sbGVjdGlvbigpO2kuZmlsdGVyKGZ1bmN0aW9uKHcpe3JldHVybiFzW3cuaWQoKV19KS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3cuaXNQYXJlbnQoKT9wLm1lcmdlKHcpOncucmVtb3ZlKCl9KSxwLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIHcuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSkscC5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiBhKHcpLnJlbW92ZSgpfSl9ZS5zdHlsZSYmci5zdHlsZShlLnN0eWxlKSxlLnpvb20hPW51bGwmJmUuem9vbSE9PW4uem9vbSYmci56b29tKGUuem9vbSksZS5wYW4mJihlLnBhbi54IT09bi5wYW4ueHx8ZS5wYW4ueSE9PW4ucGFuLnkpJiZyLnBhbihlLnBhbiksZS5kYXRhJiZyLmRhdGEoZS5kYXRhKTtmb3IodmFyIG09WyJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJib3hTZWxlY3Rpb25FbmFibGVkIiwiYXV0b2xvY2siLCJhdXRvdW5ncmFiaWZ5IiwiYXV0b3Vuc2VsZWN0aWZ5IiwibXVsdGlDbGlja0RlYm91bmNlVGltZSJdLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtlW3ldIT1udWxsJiZyW3ldKGVbeV0pfXJldHVybiByLmVuZEJhdGNoKCksdGhpc31lbHNle3ZhciB2PSEhZSx4PXt9O3Y/eC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3Lmpzb24oKX0pOih4LmVsZW1lbnRzPXt9LGkuZm9yRWFjaChmdW5jdGlvbih3KXt2YXIgXz13Lmdyb3VwKCk7eC5lbGVtZW50c1tfXXx8KHguZWxlbWVudHNbX109W10pLHguZWxlbWVudHNbX10ucHVzaCh3Lmpzb24oKSl9KSksdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQmJih4LnN0eWxlPXIuc3R5bGUoKS5qc29uKCkpLHguZGF0YT1aYyhyLmRhdGEoKSk7dmFyIGI9bi5vcHRpb25zO3JldHVybiB4Lnpvb21pbmdFbmFibGVkPW4uem9vbWluZ0VuYWJsZWQseC51c2VyWm9vbWluZ0VuYWJsZWQ9bi51c2VyWm9vbWluZ0VuYWJsZWQseC56b29tPW4uem9vbSx4Lm1pblpvb209bi5taW5ab29tLHgubWF4Wm9vbT1uLm1heFpvb20seC5wYW5uaW5nRW5hYmxlZD1uLnBhbm5pbmdFbmFibGVkLHgudXNlclBhbm5pbmdFbmFibGVkPW4udXNlclBhbm5pbmdFbmFibGVkLHgucGFuPVpjKG4ucGFuKSx4LmJveFNlbGVjdGlvbkVuYWJsZWQ9bi5ib3hTZWxlY3Rpb25FbmFibGVkLHgucmVuZGVyZXI9WmMoYi5yZW5kZXJlcikseC5oaWRlRWRnZXNPblZpZXdwb3J0PWIuaGlkZUVkZ2VzT25WaWV3cG9ydCx4LnRleHR1cmVPblZpZXdwb3J0PWIudGV4dHVyZU9uVmlld3BvcnQseC53aGVlbFNlbnNpdGl2aXR5PWIud2hlZWxTZW5zaXRpdml0eSx4Lm1vdGlvbkJsdXI9Yi5tb3Rpb25CbHVyLHgubXVsdGlDbGlja0RlYm91bmNlVGltZT1iLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUseH19LCJqc29uIil9KTtNNi4kaWQ9TTYuZ2V0RWxlbWVudEJ5SWQ7W21KZSxiSmUscWdlLFdQLFQ2LFRKZSxZUCxrNixTSmUsSjAsaGJdLmZvckVhY2goZnVuY3Rpb24odCl7aXIoTTYsdCl9KTtBSmU9e2ZpdDohMCxkaXJlY3RlZDohMSxwYWRkaW5nOjMwLGNpcmNsZTohMSxncmlkOiExLHNwYWNpbmdGYWN0b3I6MS43NSxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyb290czp2b2lkIDAsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9LF9KZT17bWF4aW1hbDohMSxhY3ljbGljOiExfSxmMT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNjcmF0Y2goImJyZWFkdGhmaXJzdCIpfSwiZ2V0SW5mbyIpLHdtZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuc2NyYXRjaCgiYnJlYWR0aGZpcnN0IixyKX0sInNldEluZm8iKTtvKFhnZSwiQnJlYWR0aEZpcnN0TGF5b3V0Iik7WGdlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9dC5jeSxuPWUuZWxlcyxpPW4ubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oY2Upe3JldHVybiFjZS5pc1BhcmVudCgpfSksYT1uLHM9ZS5kaXJlY3RlZCxsPWUuYWN5Y2xpY3x8ZS5tYXhpbWFsfHxlLm1heGltYWxBZGp1c3RtZW50cz4wLHU9S3MoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpyLndpZHRoKCksaDpyLmhlaWdodCgpfSksaDtpZih3byhlLnJvb3RzKSloPWUucm9vdHM7ZWxzZSBpZihrbihlLnJvb3RzKSl7Zm9yKHZhciBmPVtdLGQ9MDtkPGUucm9vdHMubGVuZ3RoO2QrKyl7dmFyIHA9ZS5yb290c1tkXSxtPXIuZ2V0RWxlbWVudEJ5SWQocCk7Zi5wdXNoKG0pfWg9ci5jb2xsZWN0aW9uKGYpfWVsc2UgaWYoWnQoZS5yb290cykpaD1yLiQoZS5yb290cyk7ZWxzZSBpZihzKWg9aS5yb290cygpO2Vsc2V7dmFyIGc9bi5jb21wb25lbnRzKCk7aD1yLmNvbGxlY3Rpb24oKTtmb3IodmFyIHk9byhmdW5jdGlvbih0ZSl7dmFyIE5lPWdbdGVdLHNlPU5lLm1heERlZ3JlZSghMSksa2U9TmUuZmlsdGVyKGZ1bmN0aW9uKFJlKXtyZXR1cm4gUmUuZGVncmVlKCExKT09PXNlfSk7aD1oLmFkZChrZSl9LCJfbG9vcCIpLHY9MDt2PGcubGVuZ3RoO3YrKyl5KHYpfXZhciB4PVtdLGI9e30sdz1vKGZ1bmN0aW9uKHRlLE5lKXt4W05lXT09bnVsbCYmKHhbTmVdPVtdKTt2YXIgc2U9eFtOZV0ubGVuZ3RoO3hbTmVdLnB1c2godGUpLHdtZSh0ZSx7aW5kZXg6c2UsZGVwdGg6TmV9KX0sImFkZFRvRGVwdGgiKSxfPW8oZnVuY3Rpb24odGUsTmUpe3ZhciBzZT1mMSh0ZSksa2U9c2UuZGVwdGgsUmU9c2UuaW5kZXg7eFtrZV1bUmVdPW51bGwsdyh0ZSxOZSl9LCJjaGFuZ2VEZXB0aCIpO2EuYmZzKHtyb290czpoLGRpcmVjdGVkOmUuZGlyZWN0ZWQsdmlzaXQ6byhmdW5jdGlvbih0ZSxOZSxzZSxrZSxSZSl7dmFyIENlPXRlWzBdLFBlPUNlLmlkKCk7dyhDZSxSZSksYltQZV09ITB9LCJ2aXNpdCIpfSk7Zm9yKHZhciBUPVtdLEU9MDtFPGkubGVuZ3RoO0UrKyl7dmFyIEw9aVtFXTtiW0wuaWQoKV18fFQucHVzaChMKX12YXIgUz1vKGZ1bmN0aW9uKHRlKXtmb3IodmFyIE5lPXhbdGVdLHNlPTA7c2U8TmUubGVuZ3RoO3NlKyspe3ZhciBrZT1OZVtzZV07aWYoa2U9PW51bGwpe05lLnNwbGljZShzZSwxKSxzZS0tO2NvbnRpbnVlfXdtZShrZSx7ZGVwdGg6dGUsaW5kZXg6c2V9KX19LCJhc3NpZ25EZXB0aHNBdCIpLEE9byhmdW5jdGlvbigpe2Zvcih2YXIgdGU9MDt0ZTx4Lmxlbmd0aDt0ZSsrKVModGUpfSwiYXNzaWduRGVwdGhzIiksST1vKGZ1bmN0aW9uKHRlLE5lKXtmb3IodmFyIHNlPWYxKHRlKSxrZT10ZS5pbmNvbWVycygpLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4gWC5pc05vZGUoKSYmbi5oYXMoWCl9KSxSZT0tMSxDZT10ZS5pZCgpLFBlPTA7UGU8a2UubGVuZ3RoO1BlKyspe3ZhciBJZT1rZVtQZV0sJGU9ZjEoSWUpO1JlPU1hdGgubWF4KFJlLCRlLmRlcHRoKX1pZihzZS5kZXB0aDw9UmUpe2lmKCFlLmFjeWNsaWMmJk5lW0NlXSlyZXR1cm4gbnVsbDt2YXIgeWU9UmUrMTtyZXR1cm4gXyh0ZSx5ZSksTmVbQ2VdPXllLCEwfXJldHVybiExfSwiYWRqdXN0TWF4aW1hbGx5Iik7aWYocyYmbCl7dmFyIEQ9W10saz17fSxSPW8oZnVuY3Rpb24odGUpe3JldHVybiBELnB1c2godGUpfSwiZW5xdWV1ZSIpLEM9byhmdW5jdGlvbigpe3JldHVybiBELnNoaWZ0KCl9LCJkZXF1ZXVlIik7Zm9yKGkuZm9yRWFjaChmdW5jdGlvbihjZSl7cmV0dXJuIEQucHVzaChjZSl9KTtELmxlbmd0aD4wOyl7dmFyIE89QygpLE49SShPLGspO2lmKE4pTy5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihjZSl7cmV0dXJuIGNlLmlzTm9kZSgpJiZuLmhhcyhjZSl9KS5mb3JFYWNoKFIpO2Vsc2UgaWYoTj09PW51bGwpe29uKCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitPLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19QSgpO3ZhciBQPTA7aWYoZS5hdm9pZE92ZXJsYXApZm9yKHZhciBGPTA7RjxpLmxlbmd0aDtGKyspe3ZhciBCPWlbRl0sRz1CLmxheW91dERpbWVuc2lvbnMoZSksej1HLncsVz1HLmg7UD1NYXRoLm1heChQLHosVyl9dmFyIFo9e30saj1vKGZ1bmN0aW9uKHRlKXtpZihaW3RlLmlkKCldKXJldHVybiBaW3RlLmlkKCldO2Zvcih2YXIgTmU9ZjEodGUpLmRlcHRoLHNlPXRlLm5laWdoYm9yaG9vZCgpLGtlPTAsUmU9MCxDZT0wO0NlPHNlLmxlbmd0aDtDZSsrKXt2YXIgUGU9c2VbQ2VdO2lmKCEoUGUuaXNFZGdlKCl8fFBlLmlzUGFyZW50KCl8fCFpLmhhcyhQZSkpKXt2YXIgSWU9ZjEoUGUpO2lmKEllIT1udWxsKXt2YXIgJGU9SWUuaW5kZXgseWU9SWUuZGVwdGg7aWYoISgkZT09bnVsbHx8eWU9PW51bGwpKXt2YXIgWD14W3llXS5sZW5ndGg7eWU8TmUmJihrZSs9JGUvWCxSZSsrKX19fX1yZXR1cm4gUmU9TWF0aC5tYXgoMSxSZSksa2U9a2UvUmUsUmU9PT0wJiYoa2U9MCksWlt0ZS5pZCgpXT1rZSxrZX0sImdldFdlaWdodGVkUGVyY2VudCIpLG9lPW8oZnVuY3Rpb24odGUsTmUpe3ZhciBzZT1qKHRlKSxrZT1qKE5lKSxSZT1zZS1rZTtyZXR1cm4gUmU9PT0wP1htZSh0ZS5pZCgpLE5lLmlkKCkpOlJlfSwic29ydEZuIik7ZS5kZXB0aFNvcnQhPT12b2lkIDAmJihvZT1lLmRlcHRoU29ydCk7Zm9yKHZhciBLPTA7Szx4Lmxlbmd0aDtLKyspeFtLXS5zb3J0KG9lKSxTKEspO2Zvcih2YXIgZWU9W10sSj0wO0o8VC5sZW5ndGg7SisrKWVlLnB1c2goVFtKXSk7eC51bnNoaWZ0KGVlKSxBKCk7Zm9yKHZhciBIPTAscT0wO3E8eC5sZW5ndGg7cSsrKUg9TWF0aC5tYXgoeFtxXS5sZW5ndGgsSCk7dmFyIFE9e3g6dS54MSt1LncvMix5OnUueDErdS5oLzJ9LGFlPXgucmVkdWNlKGZ1bmN0aW9uKGNlLHRlKXtyZXR1cm4gTWF0aC5tYXgoY2UsdGUubGVuZ3RoKX0sMCksdWU9byhmdW5jdGlvbih0ZSl7dmFyIE5lPWYxKHRlKSxzZT1OZS5kZXB0aCxrZT1OZS5pbmRleCxSZT14W3NlXS5sZW5ndGgsQ2U9TWF0aC5tYXgodS53LygoZS5ncmlkP2FlOlJlKSsxKSxQKSxQZT1NYXRoLm1heCh1LmgvKHgubGVuZ3RoKzEpLFApLEllPU1hdGgubWluKHUudy8yL3gubGVuZ3RoLHUuaC8yL3gubGVuZ3RoKTtpZihJZT1NYXRoLm1heChJZSxQKSxlLmNpcmNsZSl7dmFyIHllPUllKnNlK0llLSh4Lmxlbmd0aD4wJiZ4WzBdLmxlbmd0aDw9Mz9JZS8yOjApLFg9MipNYXRoLlBJL3hbc2VdLmxlbmd0aCprZTtyZXR1cm4gc2U9PT0wJiZ4WzBdLmxlbmd0aD09PTEmJih5ZT0xKSx7eDpRLngreWUqTWF0aC5jb3MoWCkseTpRLnkreWUqTWF0aC5zaW4oWCl9fWVsc2V7dmFyICRlPXt4OlEueCsoa2UrMS0oUmUrMSkvMikqQ2UseTooc2UrMSkqUGV9O3JldHVybiAkZX19LCJnZXRQb3NpdGlvbiIpO3JldHVybiBuLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSx1ZSksdGhpc307TEplPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxzcGFjaW5nRmFjdG9yOnZvaWQgMCxyYWRpdXM6dm9pZCAwLHN0YXJ0QW5nbGU6My8yKk1hdGguUEksc3dlZXA6dm9pZCAwLGNsb2Nrd2lzZTohMCxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oamdlLCJDaXJjbGVMYXlvdXQiKTtqZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9ZS5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFlLmNvdW50ZXJjbG9ja3dpc2U6ZS5jbG9ja3dpc2UsYT1uLm5vZGVzKCkubm90KCI6cGFyZW50Iik7ZS5zb3J0JiYoYT1hLnNvcnQoZS5zb3J0KSk7Zm9yKHZhciBzPUtzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pLGw9e3g6cy54MStzLncvMix5OnMueTErcy5oLzJ9LHU9ZS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2EubGVuZ3RoOmUuc3dlZXAsaD11L01hdGgubWF4KDEsYS5sZW5ndGgtMSksZixkPTAscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgbT1hW3BdLGc9bS5sYXlvdXREaW1lbnNpb25zKGUpLHk9Zy53LHY9Zy5oO2Q9TWF0aC5tYXgoZCx5LHYpfWlmKHh0KGUucmFkaXVzKT9mPWUucmFkaXVzOmEubGVuZ3RoPD0xP2Y9MDpmPU1hdGgubWluKHMuaCxzLncpLzItZCxhLmxlbmd0aD4xJiZlLmF2b2lkT3ZlcmxhcCl7ZCo9MS43NTt2YXIgeD1NYXRoLmNvcyhoKS1NYXRoLmNvcygwKSxiPU1hdGguc2luKGgpLU1hdGguc2luKDApLHc9TWF0aC5zcXJ0KGQqZC8oeCp4K2IqYikpO2Y9TWF0aC5tYXgodyxmKX12YXIgXz1vKGZ1bmN0aW9uKEUsTCl7dmFyIFM9ZS5zdGFydEFuZ2xlK0wqaCooaT8xOi0xKSxBPWYqTWF0aC5jb3MoUyksST1mKk1hdGguc2luKFMpLEQ9e3g6bC54K0EseTpsLnkrSX07cmV0dXJuIER9LCJnZXRQb3MiKTtyZXR1cm4gbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsXyksdGhpc307REplPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZ3JlZSgpfSwiY29uY2VudHJpYyIpLGxldmVsV2lkdGg6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXhEZWdyZWUoKS80fSwibGV2ZWxXaWR0aCIpLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhLZ2UsIkNvbmNlbnRyaWNMYXlvdXQiKTtLZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9ZS5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFlLmNvdW50ZXJjbG9ja3dpc2U6ZS5jbG9ja3dpc2Usbj10LmN5LGk9ZS5lbGVzLGE9aS5ub2RlcygpLm5vdCgiOnBhcmVudCIpLHM9S3MoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpuLndpZHRoKCksaDpuLmhlaWdodCgpfSksbD17eDpzLngxK3Mudy8yLHk6cy55MStzLmgvMn0sdT1bXSxoPTAsZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgZD1hW2ZdLHA9dm9pZCAwO3A9ZS5jb25jZW50cmljKGQpLHUucHVzaCh7dmFsdWU6cCxub2RlOmR9KSxkLl9wcml2YXRlLnNjcmF0Y2guY29uY2VudHJpYz1wfWEudXBkYXRlU3R5bGUoKTtmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyl7dmFyIGc9YVttXSx5PWcubGF5b3V0RGltZW5zaW9ucyhlKTtoPU1hdGgubWF4KGgseS53LHkuaCl9dS5zb3J0KGZ1bmN0aW9uKGNlLHRlKXtyZXR1cm4gdGUudmFsdWUtY2UudmFsdWV9KTtmb3IodmFyIHY9ZS5sZXZlbFdpZHRoKGEpLHg9W1tdXSxiPXhbMF0sdz0wO3c8dS5sZW5ndGg7dysrKXt2YXIgXz11W3ddO2lmKGIubGVuZ3RoPjApe3ZhciBUPU1hdGguYWJzKGJbMF0udmFsdWUtXy52YWx1ZSk7VD49diYmKGI9W10seC5wdXNoKGIpKX1iLnB1c2goXyl9dmFyIEU9aCtlLm1pbk5vZGVTcGFjaW5nO2lmKCFlLmF2b2lkT3ZlcmxhcCl7dmFyIEw9eC5sZW5ndGg+MCYmeFswXS5sZW5ndGg+MSxTPU1hdGgubWluKHMudyxzLmgpLzItRSxBPVMvKHgubGVuZ3RoK0w/MTowKTtFPU1hdGgubWluKEUsQSl9Zm9yKHZhciBJPTAsRD0wO0Q8eC5sZW5ndGg7RCsrKXt2YXIgaz14W0RdLFI9ZS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2subGVuZ3RoOmUuc3dlZXAsQz1rLmRUaGV0YT1SL01hdGgubWF4KDEsay5sZW5ndGgtMSk7aWYoay5sZW5ndGg+MSYmZS5hdm9pZE92ZXJsYXApe3ZhciBPPU1hdGguY29zKEMpLU1hdGguY29zKDApLE49TWF0aC5zaW4oQyktTWF0aC5zaW4oMCksUD1NYXRoLnNxcnQoRSpFLyhPKk8rTipOKSk7ST1NYXRoLm1heChQLEkpfWsucj1JLEkrPUV9aWYoZS5lcXVpZGlzdGFudCl7Zm9yKHZhciBGPTAsQj0wLEc9MDtHPHgubGVuZ3RoO0crKyl7dmFyIHo9eFtHXSxXPXouci1CO0Y9TWF0aC5tYXgoRixXKX1CPTA7Zm9yKHZhciBaPTA7Wjx4Lmxlbmd0aDtaKyspe3ZhciBqPXhbWl07Wj09PTAmJihCPWouciksai5yPUIsQis9Rn19Zm9yKHZhciBvZT17fSxLPTA7Szx4Lmxlbmd0aDtLKyspZm9yKHZhciBlZT14W0tdLEo9ZWUuZFRoZXRhLEg9ZWUucixxPTA7cTxlZS5sZW5ndGg7cSsrKXt2YXIgUT1lZVtxXSxhZT1lLnN0YXJ0QW5nbGUrKHI/MTotMSkqSipxLHVlPXt4OmwueCtIKk1hdGguY29zKGFlKSx5OmwueStIKk1hdGguc2luKGFlKX07b2VbUS5ub2RlLmlkKCldPXVlfXJldHVybiBpLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbihjZSl7dmFyIHRlPWNlLmlkKCk7cmV0dXJuIG9lW3RlXX0pLHRoaXN9O05KZT17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIiksYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpvKGZ1bmN0aW9uKGUpe3JldHVybiAyMDQ4fSwibm9kZVJlcHVsc2lvbiIpLG5vZGVPdmVybGFwOjQsaWRlYWxFZGdlTGVuZ3RoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIDMyfSwiaWRlYWxFZGdlTGVuZ3RoIiksZWRnZUVsYXN0aWNpdHk6byhmdW5jdGlvbihlKXtyZXR1cm4gMzJ9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtvKFo2LCJDb3NlTGF5b3V0Iik7WjYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuY3kscj10aGlzO3Iuc3RvcHBlZD0hMSwodC5hbmltYXRlPT09ITB8fHQuYW5pbWF0ZT09PSExKSYmci5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0OnJ9KSx0LmRlYnVnPT09ITA/T1A9ITA6T1A9ITE7dmFyIG49UkplKGUscix0KTtPUCYmT0plKG4pLHQucmFuZG9taXplJiZQSmUobik7dmFyIGk9aWgoKSxhPW8oZnVuY3Rpb24oKXtCSmUobixlLHQpLHQuZml0PT09ITAmJmUuZml0KHQucGFkZGluZyl9LCJyZWZyZXNoIikscz1vKGZ1bmN0aW9uKHApe3JldHVybiEoci5zdG9wcGVkfHxwPj10Lm51bUl0ZXJ8fChGSmUobix0KSxuLnRlbXBlcmF0dXJlPW4udGVtcGVyYXR1cmUqdC5jb29saW5nRmFjdG9yLG4udGVtcGVyYXR1cmU8dC5taW5UZW1wKSl9LCJtYWluTG9vcCIpLGw9byhmdW5jdGlvbigpe2lmKHQuYW5pbWF0ZT09PSEwfHx0LmFuaW1hdGU9PT0hMSlhKCksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6cn0pO2Vsc2V7dmFyIHA9dC5lbGVzLm5vZGVzKCksbT1RZ2Uobix0LHApO3AubGF5b3V0UG9zaXRpb25zKHIsdCxtKX19LCJkb25lIiksdT0wLGg9ITA7aWYodC5hbmltYXRlPT09ITApe3ZhciBmPW8oZnVuY3Rpb24gZCgpe2Zvcih2YXIgcD0wO2gmJnA8dC5yZWZyZXNoOyloPXModSksdSsrLHArKztpZighaClrbWUobix0KSxsKCk7ZWxzZXt2YXIgbT1paCgpO20taT49dC5hbmltYXRpb25UaHJlc2hvbGQmJmEoKSxBNihkKX19LCJmcmFtZSIpO2YoKX1lbHNle2Zvcig7aDspaD1zKHUpLHUrKztrbWUobix0KSxsKCl9cmV0dXJuIHRoaXN9O1o2LnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXMuZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9O1o2LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpc307UkplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmVsZXMuZWRnZXMoKSxhPW4uZWxlcy5ub2RlcygpLHM9S3Mobi5ib3VuZGluZ0JveD9uLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksbD17aXNDb21wb3VuZDplLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6YS5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOmkuc2l6ZSgpLHRlbXBlcmF0dXJlOm4uaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6cy53LGNsaWVudEhlaWdodDpzLmgsYm91bmRpbmdCb3g6c30sdT1uLmVsZXMuY29tcG9uZW50cygpLGg9e30sZj0wO2Y8dS5sZW5ndGg7ZisrKWZvcih2YXIgZD11W2ZdLHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTtoW20uaWQoKV09Zn1mb3IodmFyIGY9MDtmPGwubm9kZVNpemU7ZisrKXt2YXIgZz1hW2ZdLHk9Zy5sYXlvdXREaW1lbnNpb25zKG4pLHY9e307di5pc0xvY2tlZD1nLmxvY2tlZCgpLHYuaWQ9Zy5kYXRhKCJpZCIpLHYucGFyZW50SWQ9Zy5kYXRhKCJwYXJlbnQiKSx2LmNtcHRJZD1oW2cuaWQoKV0sdi5jaGlsZHJlbj1bXSx2LnBvc2l0aW9uWD1nLnBvc2l0aW9uKCJ4Iiksdi5wb3NpdGlvblk9Zy5wb3NpdGlvbigieSIpLHYub2Zmc2V0WD0wLHYub2Zmc2V0WT0wLHYuaGVpZ2h0PXkudyx2LndpZHRoPXkuaCx2Lm1heFg9di5wb3NpdGlvblgrdi53aWR0aC8yLHYubWluWD12LnBvc2l0aW9uWC12LndpZHRoLzIsdi5tYXhZPXYucG9zaXRpb25ZK3YuaGVpZ2h0LzIsdi5taW5ZPXYucG9zaXRpb25ZLXYuaGVpZ2h0LzIsdi5wYWRMZWZ0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFJpZ2h0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFRvcD1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5wYWRCb3R0b209cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYubm9kZVJlcHVsc2lvbj1uaShuLm5vZGVSZXB1bHNpb24pP24ubm9kZVJlcHVsc2lvbihnKTpuLm5vZGVSZXB1bHNpb24sbC5sYXlvdXROb2Rlcy5wdXNoKHYpLGwuaWRUb0luZGV4W3YuaWRdPWZ9Zm9yKHZhciB4PVtdLGI9MCx3PS0xLF89W10sZj0wO2Y8bC5ub2RlU2l6ZTtmKyspe3ZhciBnPWwubGF5b3V0Tm9kZXNbZl0sVD1nLnBhcmVudElkO1QhPW51bGw/bC5sYXlvdXROb2Rlc1tsLmlkVG9JbmRleFtUXV0uY2hpbGRyZW4ucHVzaChnLmlkKTooeFsrK3ddPWcuaWQsXy5wdXNoKGcuaWQpKX1mb3IobC5ncmFwaFNldC5wdXNoKF8pO2I8PXc7KXt2YXIgRT14W2IrK10sTD1sLmlkVG9JbmRleFtFXSxtPWwubGF5b3V0Tm9kZXNbTF0sUz1tLmNoaWxkcmVuO2lmKFMubGVuZ3RoPjApe2wuZ3JhcGhTZXQucHVzaChTKTtmb3IodmFyIGY9MDtmPFMubGVuZ3RoO2YrKyl4Wysrd109U1tmXX19Zm9yKHZhciBmPTA7ZjxsLmdyYXBoU2V0Lmxlbmd0aDtmKyspZm9yKHZhciBBPWwuZ3JhcGhTZXRbZl0scD0wO3A8QS5sZW5ndGg7cCsrKXt2YXIgST1sLmlkVG9JbmRleFtBW3BdXTtsLmluZGV4VG9HcmFwaFtJXT1mfWZvcih2YXIgZj0wO2Y8bC5lZGdlU2l6ZTtmKyspe3ZhciBEPWlbZl0saz17fTtrLmlkPUQuZGF0YSgiaWQiKSxrLnNvdXJjZUlkPUQuZGF0YSgic291cmNlIiksay50YXJnZXRJZD1ELmRhdGEoInRhcmdldCIpO3ZhciBSPW5pKG4uaWRlYWxFZGdlTGVuZ3RoKT9uLmlkZWFsRWRnZUxlbmd0aChEKTpuLmlkZWFsRWRnZUxlbmd0aCxDPW5pKG4uZWRnZUVsYXN0aWNpdHkpP24uZWRnZUVsYXN0aWNpdHkoRCk6bi5lZGdlRWxhc3RpY2l0eSxPPWwuaWRUb0luZGV4W2suc291cmNlSWRdLE49bC5pZFRvSW5kZXhbay50YXJnZXRJZF0sUD1sLmluZGV4VG9HcmFwaFtPXSxGPWwuaW5kZXhUb0dyYXBoW05dO2lmKFAhPUYpe2Zvcih2YXIgQj1NSmUoay5zb3VyY2VJZCxrLnRhcmdldElkLGwpLEc9bC5ncmFwaFNldFtCXSx6PTAsdj1sLmxheW91dE5vZGVzW09dO0cuaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLHorKztmb3Iodj1sLmxheW91dE5vZGVzW05dO0cuaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLHorKztSKj16Km4ubmVzdGluZ0ZhY3Rvcn1rLmlkZWFsTGVuZ3RoPVIsay5lbGFzdGljaXR5PUMsbC5sYXlvdXRFZGdlcy5wdXNoKGspfXJldHVybiBsfSwiY3JlYXRlTGF5b3V0SW5mbyIpLE1KZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1JSmUoZSxyLDAsbik7cmV0dXJuIDI+aS5jb3VudD8wOmkuZ3JhcGh9LCJmaW5kTENBIiksSUplPW8oZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1pLmdyYXBoU2V0W25dO2lmKC0xPGEuaW5kZXhPZihlKSYmLTE8YS5pbmRleE9mKHIpKXJldHVybntjb3VudDoyLGdyYXBoOm59O2Zvcih2YXIgcz0wLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxoPWkuaWRUb0luZGV4W3VdLGY9aS5sYXlvdXROb2Rlc1toXS5jaGlsZHJlbjtpZihmLmxlbmd0aCE9PTApe3ZhciBkPWkuaW5kZXhUb0dyYXBoW2kuaWRUb0luZGV4W2ZbMF1dXSxwPXQoZSxyLGQsaSk7aWYocC5jb3VudCE9PTApaWYocC5jb3VudD09PTEpe2lmKHMrKyxzPT09MilicmVha31lbHNlIHJldHVybiBwfX1yZXR1cm57Y291bnQ6cyxncmFwaDpufX0sImZpbmRMQ0FfYXV4IiksUEplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5jbGllbnRXaWR0aCxpPWUuY2xpZW50SGVpZ2h0LGE9MDthPGUubm9kZVNpemU7YSsrKXt2YXIgcz1lLmxheW91dE5vZGVzW2FdO3MuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXMuaXNMb2NrZWQmJihzLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKm4scy5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSppKX19LCJyYW5kb21pemVQb3NpdGlvbnMiKSxRZ2U9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5ib3VuZGluZ0JveCxhPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIHIuYm91bmRpbmdCb3gmJihuLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtzLmRhdGEoImlkIildXTthLngxPU1hdGgubWluKGEueDEsbC5wb3NpdGlvblgpLGEueDI9TWF0aC5tYXgoYS54MixsLnBvc2l0aW9uWCksYS55MT1NYXRoLm1pbihhLnkxLGwucG9zaXRpb25ZKSxhLnkyPU1hdGgubWF4KGEueTIsbC5wb3NpdGlvblkpfSksYS53PWEueDItYS54MSxhLmg9YS55Mi1hLnkxKSxmdW5jdGlvbihzLGwpe3ZhciB1PWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbcy5kYXRhKCJpZCIpXV07aWYoci5ib3VuZGluZ0JveCl7dmFyIGg9KHUucG9zaXRpb25YLWEueDEpL2EudyxmPSh1LnBvc2l0aW9uWS1hLnkxKS9hLmg7cmV0dXJue3g6aS54MStoKmkudyx5OmkueTErZippLmh9fWVsc2UgcmV0dXJue3g6dS5wb3NpdGlvblgseTp1LnBvc2l0aW9uWX19fSwiZ2V0U2NhbGVJbkJvdW5kc0ZuIiksQkplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW4ubGF5b3V0LGE9bi5lbGVzLm5vZGVzKCkscz1RZ2UoZSxuLGEpO2EucG9zaXRpb25zKHMpLGUucmVhZHkhPT0hMCYmKGUucmVhZHk9ITAsaS5vbmUoImxheW91dHJlYWR5IixuLnJlYWR5KSxpLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sInJlZnJlc2hQb3NpdGlvbnMiKSxGSmU9byhmdW5jdGlvbihlLHIsbil7ekplKGUsciksVkplKGUpLFVKZShlLHIpLEhKZShlKSxXSmUoZSl9LCJzdGVwIiksekplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZ3JhcGhTZXQubGVuZ3RoO24rKylmb3IodmFyIGk9ZS5ncmFwaFNldFtuXSxhPWkubGVuZ3RoLHM9MDtzPGE7cysrKWZvcih2YXIgbD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbc11dXSx1PXMrMTt1PGE7dSsrKXt2YXIgaD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbdV1dXTtHSmUobCxoLGUscil9fSwiY2FsY3VsYXRlTm9kZUZvcmNlcyIpLFRtZT1vKGZ1bmN0aW9uKGUpe3JldHVybi1lKzIqZSpNYXRoLnJhbmRvbSgpfSwicmFuZG9tRGlzdGFuY2UiKSxHSmU9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1lLmNtcHRJZCxzPXIuY21wdElkO2lmKCEoYSE9PXMmJiFuLmlzQ29tcG91bmQpKXt2YXIgbD1yLnBvc2l0aW9uWC1lLnBvc2l0aW9uWCx1PXIucG9zaXRpb25ZLWUucG9zaXRpb25ZLGg9MTtsPT09MCYmdT09PTAmJihsPVRtZShoKSx1PVRtZShoKSk7dmFyIGY9JEplKGUscixsLHUpO2lmKGY+MCl2YXIgZD1pLm5vZGVPdmVybGFwKmYscD1NYXRoLnNxcnQobCpsK3UqdSksbT1kKmwvcCxnPWQqdS9wO2Vsc2UgdmFyIHk9STYoZSxsLHUpLHY9STYociwtMSpsLC0xKnUpLHg9di54LXkueCxiPXYueS15Lnksdz14KngrYipiLHA9TWF0aC5zcXJ0KHcpLGQ9KGUubm9kZVJlcHVsc2lvbityLm5vZGVSZXB1bHNpb24pL3csbT1kKngvcCxnPWQqYi9wO2UuaXNMb2NrZWR8fChlLm9mZnNldFgtPW0sZS5vZmZzZXRZLT1nKSxyLmlzTG9ja2VkfHwoci5vZmZzZXRYKz1tLHIub2Zmc2V0WSs9Zyl9fSwibm9kZVJlcHVsc2lvbiIpLCRKZT1vKGZ1bmN0aW9uKGUscixuLGkpe2lmKG4+MCl2YXIgYT1lLm1heFgtci5taW5YO2Vsc2UgdmFyIGE9ci5tYXhYLWUubWluWDtpZihpPjApdmFyIHM9ZS5tYXhZLXIubWluWTtlbHNlIHZhciBzPXIubWF4WS1lLm1pblk7cmV0dXJuIGE+PTAmJnM+PTA/TWF0aC5zcXJ0KGEqYStzKnMpOjB9LCJub2Rlc092ZXJsYXAiKSxJNj1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLnBvc2l0aW9uWCxhPWUucG9zaXRpb25ZLHM9ZS5oZWlnaHR8fDEsbD1lLndpZHRofHwxLHU9bi9yLGg9cy9sLGY9e307cmV0dXJuIHI9PT0wJiYwPG58fHI9PT0wJiYwPm4/KGYueD1pLGYueT1hK3MvMixmKTowPHImJi0xKmg8PXUmJnU8PWg/KGYueD1pK2wvMixmLnk9YStsKm4vMi9yLGYpOjA+ciYmLTEqaDw9dSYmdTw9aD8oZi54PWktbC8yLGYueT1hLWwqbi8yL3IsZik6MDxuJiYodTw9LTEqaHx8dT49aCk/KGYueD1pK3Mqci8yL24sZi55PWErcy8yLGYpOigwPm4mJih1PD0tMSpofHx1Pj1oKSYmKGYueD1pLXMqci8yL24sZi55PWEtcy8yKSxmKX0sImZpbmRDbGlwcGluZ1BvaW50IiksVkplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZWRnZVNpemU7bisrKXt2YXIgaT1lLmxheW91dEVkZ2VzW25dLGE9ZS5pZFRvSW5kZXhbaS5zb3VyY2VJZF0scz1lLmxheW91dE5vZGVzW2FdLGw9ZS5pZFRvSW5kZXhbaS50YXJnZXRJZF0sdT1lLmxheW91dE5vZGVzW2xdLGg9dS5wb3NpdGlvblgtcy5wb3NpdGlvblgsZj11LnBvc2l0aW9uWS1zLnBvc2l0aW9uWTtpZighKGg9PT0wJiZmPT09MCkpe3ZhciBkPUk2KHMsaCxmKSxwPUk2KHUsLTEqaCwtMSpmKSxtPXAueC1kLngsZz1wLnktZC55LHk9TWF0aC5zcXJ0KG0qbStnKmcpLHY9TWF0aC5wb3coaS5pZGVhbExlbmd0aC15LDIpL2kuZWxhc3RpY2l0eTtpZih5IT09MCl2YXIgeD12Km0veSxiPXYqZy95O2Vsc2UgdmFyIHg9MCxiPTA7cy5pc0xvY2tlZHx8KHMub2Zmc2V0WCs9eCxzLm9mZnNldFkrPWIpLHUuaXNMb2NrZWR8fCh1Lm9mZnNldFgtPXgsdS5vZmZzZXRZLT1iKX19fSwiY2FsY3VsYXRlRWRnZUZvcmNlcyIpLFVKZT1vKGZ1bmN0aW9uKGUscil7aWYoci5ncmF2aXR5IT09MClmb3IodmFyIG49MSxpPTA7aTxlLmdyYXBoU2V0Lmxlbmd0aDtpKyspe3ZhciBhPWUuZ3JhcGhTZXRbaV0scz1hLmxlbmd0aDtpZihpPT09MCl2YXIgbD1lLmNsaWVudEhlaWdodC8yLHU9ZS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIGg9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthWzBdXV0sZj1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2gucGFyZW50SWRdXSxsPWYucG9zaXRpb25YLHU9Zi5wb3NpdGlvblk7Zm9yKHZhciBkPTA7ZDxzO2QrKyl7dmFyIHA9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthW2RdXV07aWYoIXAuaXNMb2NrZWQpe3ZhciBtPWwtcC5wb3NpdGlvblgsZz11LXAucG9zaXRpb25ZLHk9TWF0aC5zcXJ0KG0qbStnKmcpO2lmKHk+bil7dmFyIHY9ci5ncmF2aXR5Km0veSx4PXIuZ3Jhdml0eSpnL3k7cC5vZmZzZXRYKz12LHAub2Zmc2V0WSs9eH19fX19LCJjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzIiksSEplPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bXSxpPTAsYT0tMTtmb3Iobi5wdXNoLmFwcGx5KG4sZS5ncmFwaFNldFswXSksYSs9ZS5ncmFwaFNldFswXS5sZW5ndGg7aTw9YTspe3ZhciBzPW5baSsrXSxsPWUuaWRUb0luZGV4W3NdLHU9ZS5sYXlvdXROb2Rlc1tsXSxoPXUuY2hpbGRyZW47aWYoMDxoLmxlbmd0aCYmIXUuaXNMb2NrZWQpe2Zvcih2YXIgZj11Lm9mZnNldFgsZD11Lm9mZnNldFkscD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2hbcF1dXTttLm9mZnNldFgrPWYsbS5vZmZzZXRZKz1kLG5bKythXT1oW3BdfXUub2Zmc2V0WD0wLHUub2Zmc2V0WT0wfX19LCJwcm9wYWdhdGVGb3JjZXMiKSxXSmU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmKGkubWF4WD12b2lkIDAsaS5taW5YPXZvaWQgMCxpLm1heFk9dm9pZCAwLGkubWluWT12b2lkIDApfWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07aWYoISgwPGkuY2hpbGRyZW4ubGVuZ3RofHxpLmlzTG9ja2VkKSl7dmFyIGE9WUplKGkub2Zmc2V0WCxpLm9mZnNldFksZS50ZW1wZXJhdHVyZSk7aS5wb3NpdGlvblgrPWEueCxpLnBvc2l0aW9uWSs9YS55LGkub2Zmc2V0WD0wLGkub2Zmc2V0WT0wLGkubWluWD1pLnBvc2l0aW9uWC1pLndpZHRoLGkubWF4WD1pLnBvc2l0aW9uWCtpLndpZHRoLGkubWluWT1pLnBvc2l0aW9uWS1pLmhlaWdodCxpLm1heFk9aS5wb3NpdGlvblkraS5oZWlnaHQscUplKGksZSl9fWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmIWkuaXNMb2NrZWQmJihpLnBvc2l0aW9uWD0oaS5tYXhYK2kubWluWCkvMixpLnBvc2l0aW9uWT0oaS5tYXhZK2kubWluWSkvMixpLndpZHRoPWkubWF4WC1pLm1pblgsaS5oZWlnaHQ9aS5tYXhZLWkubWluWSl9fSwidXBkYXRlUG9zaXRpb25zIiksWUplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU1hdGguc3FydChlKmUrcipyKTtpZihpPm4pdmFyIGE9e3g6biplL2kseTpuKnIvaX07ZWxzZSB2YXIgYT17eDplLHk6cn07cmV0dXJuIGF9LCJsaW1pdEZvcmNlIikscUplPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPWUucGFyZW50SWQ7aWYobiE9bnVsbCl7dmFyIGk9ci5sYXlvdXROb2Rlc1tyLmlkVG9JbmRleFtuXV0sYT0hMTtpZigoaS5tYXhYPT1udWxsfHxlLm1heFgraS5wYWRSaWdodD5pLm1heFgpJiYoaS5tYXhYPWUubWF4WCtpLnBhZFJpZ2h0LGE9ITApLChpLm1pblg9PW51bGx8fGUubWluWC1pLnBhZExlZnQ8aS5taW5YKSYmKGkubWluWD1lLm1pblgtaS5wYWRMZWZ0LGE9ITApLChpLm1heFk9PW51bGx8fGUubWF4WStpLnBhZEJvdHRvbT5pLm1heFkpJiYoaS5tYXhZPWUubWF4WStpLnBhZEJvdHRvbSxhPSEwKSwoaS5taW5ZPT1udWxsfHxlLm1pblktaS5wYWRUb3A8aS5taW5ZKSYmKGkubWluWT1lLm1pblktaS5wYWRUb3AsYT0hMCksYSlyZXR1cm4gdChpLHIpfX0sInVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyIpLGttZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUubGF5b3V0Tm9kZXMsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sbD1zLmNtcHRJZCx1PWlbbF09aVtsXXx8W107dS5wdXNoKHMpfWZvcih2YXIgaD0wLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmLngxPTEvMCxmLngyPS0xLzAsZi55MT0xLzAsZi55Mj0tMS8wO2Zvcih2YXIgZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO2YueDE9TWF0aC5taW4oZi54MSxwLnBvc2l0aW9uWC1wLndpZHRoLzIpLGYueDI9TWF0aC5tYXgoZi54MixwLnBvc2l0aW9uWCtwLndpZHRoLzIpLGYueTE9TWF0aC5taW4oZi55MSxwLnBvc2l0aW9uWS1wLmhlaWdodC8yKSxmLnkyPU1hdGgubWF4KGYueTIscC5wb3NpdGlvblkrcC5oZWlnaHQvMil9Zi53PWYueDItZi54MSxmLmg9Zi55Mi1mLnkxLGgrPWYudypmLmh9fWkuc29ydChmdW5jdGlvbihiLHcpe3JldHVybiB3Lncqdy5oLWIudypiLmh9KTtmb3IodmFyIG09MCxnPTAseT0wLHY9MCx4PU1hdGguc3FydChoKSplLmNsaWVudFdpZHRoL2UuY2xpZW50SGVpZ2h0LGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtwLmlzTG9ja2VkfHwocC5wb3NpdGlvblgrPW0tZi54MSxwLnBvc2l0aW9uWSs9Zy1mLnkxKX1tKz1mLncrci5jb21wb25lbnRTcGFjaW5nLHkrPWYudytyLmNvbXBvbmVudFNwYWNpbmcsdj1NYXRoLm1heCh2LGYuaCkseT54JiYoZys9dityLmNvbXBvbmVudFNwYWNpbmcsbT0wLHk9MCx2PTApfX19LCJzZXBhcmF0ZUNvbXBvbmVudHMiKSxYSmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246byhmdW5jdGlvbihlKXt9LCJwb3NpdGlvbiIpLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhaZ2UsIkdyaWRMYXlvdXQiKTtaZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9bi5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2Uuc29ydCYmKGk9aS5zb3J0KGUuc29ydCkpO3ZhciBhPUtzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pO2lmKGEuaD09PTB8fGEudz09PTApbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsZnVuY3Rpb24oWil7cmV0dXJue3g6YS54MSx5OmEueTF9fSk7ZWxzZXt2YXIgcz1pLnNpemUoKSxsPU1hdGguc3FydChzKmEuaC9hLncpLHU9TWF0aC5yb3VuZChsKSxoPU1hdGgucm91bmQoYS53L2EuaCpsKSxmPW8oZnVuY3Rpb24oail7aWYoaj09bnVsbClyZXR1cm4gTWF0aC5taW4odSxoKTt2YXIgb2U9TWF0aC5taW4odSxoKTtvZT09dT91PWo6aD1qfSwic21hbGwiKSxkPW8oZnVuY3Rpb24oail7aWYoaj09bnVsbClyZXR1cm4gTWF0aC5tYXgodSxoKTt2YXIgb2U9TWF0aC5tYXgodSxoKTtvZT09dT91PWo6aD1qfSwibGFyZ2UiKSxwPWUucm93cyxtPWUuY29scyE9bnVsbD9lLmNvbHM6ZS5jb2x1bW5zO2lmKHAhPW51bGwmJm0hPW51bGwpdT1wLGg9bTtlbHNlIGlmKHAhPW51bGwmJm09PW51bGwpdT1wLGg9TWF0aC5jZWlsKHMvdSk7ZWxzZSBpZihwPT1udWxsJiZtIT1udWxsKWg9bSx1PU1hdGguY2VpbChzL2gpO2Vsc2UgaWYoaCp1PnMpe3ZhciBnPWYoKSx5PWQoKTsoZy0xKSp5Pj1zP2YoZy0xKTooeS0xKSpnPj1zJiZkKHktMSl9ZWxzZSBmb3IoO2gqdTxzOyl7dmFyIHY9ZigpLHg9ZCgpOyh4KzEpKnY+PXM/ZCh4KzEpOmYodisxKX12YXIgYj1hLncvaCx3PWEuaC91O2lmKGUuY29uZGVuc2UmJihiPTAsdz0wKSxlLmF2b2lkT3ZlcmxhcClmb3IodmFyIF89MDtfPGkubGVuZ3RoO18rKyl7dmFyIFQ9aVtfXSxFPVQuX3ByaXZhdGUucG9zaXRpb247KEUueD09bnVsbHx8RS55PT1udWxsKSYmKEUueD0wLEUueT0wKTt2YXIgTD1ULmxheW91dERpbWVuc2lvbnMoZSksUz1lLmF2b2lkT3ZlcmxhcFBhZGRpbmcsQT1MLncrUyxJPUwuaCtTO2I9TWF0aC5tYXgoYixBKSx3PU1hdGgubWF4KHcsSSl9Zm9yKHZhciBEPXt9LGs9byhmdW5jdGlvbihqLG9lKXtyZXR1cm4hIURbImMtIitqKyItIitvZV19LCJ1c2VkIiksUj1vKGZ1bmN0aW9uKGosb2Upe0RbImMtIitqKyItIitvZV09ITB9LCJ1c2UiKSxDPTAsTz0wLE49byhmdW5jdGlvbigpe08rKyxPPj1oJiYoTz0wLEMrKyl9LCJtb3ZlVG9OZXh0Q2VsbCIpLFA9e30sRj0wO0Y8aS5sZW5ndGg7RisrKXt2YXIgQj1pW0ZdLEc9ZS5wb3NpdGlvbihCKTtpZihHJiYoRy5yb3chPT12b2lkIDB8fEcuY29sIT09dm9pZCAwKSl7dmFyIHo9e3JvdzpHLnJvdyxjb2w6Ry5jb2x9O2lmKHouY29sPT09dm9pZCAwKWZvcih6LmNvbD0wO2soei5yb3csei5jb2wpOyl6LmNvbCsrO2Vsc2UgaWYoei5yb3c9PT12b2lkIDApZm9yKHoucm93PTA7ayh6LnJvdyx6LmNvbCk7KXoucm93Kys7UFtCLmlkKCldPXosUih6LnJvdyx6LmNvbCl9fXZhciBXPW8oZnVuY3Rpb24oaixvZSl7dmFyIEssZWU7aWYoai5sb2NrZWQoKXx8ai5pc1BhcmVudCgpKXJldHVybiExO3ZhciBKPVBbai5pZCgpXTtpZihKKUs9Si5jb2wqYitiLzIrYS54MSxlZT1KLnJvdyp3K3cvMithLnkxO2Vsc2V7Zm9yKDtrKEMsTyk7KU4oKTtLPU8qYitiLzIrYS54MSxlZT1DKncrdy8yK2EueTEsUihDLE8pLE4oKX1yZXR1cm57eDpLLHk6ZWV9fSwiZ2V0UG9zIik7aS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLFcpfXJldHVybiB0aGlzfTtqSmU9e3JlYWR5Om8oZnVuY3Rpb24oKXt9LCJyZWFkeSIpLHN0b3A6byhmdW5jdGlvbigpe30sInN0b3AiKX07byhiQiwiTnVsbExheW91dCIpO2JCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmVsZXMscj10aGlzO3JldHVybiB0LmN5LHIuZW1pdCgibGF5b3V0c3RhcnQiKSxlLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjB9fSksci5vbmUoImxheW91dHJlYWR5Iix0LnJlYWR5KSxyLmVtaXQoImxheW91dHJlYWR5Iiksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc307YkIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307S0plPXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKEpnZSwiUHJlc2V0TGF5b3V0Iik7SmdlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmVsZXMscj1lLm5vZGVzKCksbj1uaSh0LnBvc2l0aW9ucyk7ZnVuY3Rpb24gaShhKXtpZih0LnBvc2l0aW9ucz09bnVsbClyZXR1cm4gZWplKGEucG9zaXRpb24oKSk7aWYobilyZXR1cm4gdC5wb3NpdGlvbnMoYSk7dmFyIHM9dC5wb3NpdGlvbnNbYS5fcHJpdmF0ZS5kYXRhLmlkXTtyZXR1cm4gcz8/bnVsbH1yZXR1cm4gbyhpLCJnZXRQb3NpdGlvbiIpLHIubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxmdW5jdGlvbihhLHMpe3ZhciBsPWkoYSk7cmV0dXJuIGEubG9ja2VkKCl8fGw9PW51bGw/ITE6bH0pLHRoaXN9O1FKZT17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhlMWUsIlJhbmRvbUxheW91dCIpO2UxZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dC5jeSxyPXQuZWxlcyxuPUtzKHQuYm91bmRpbmdCb3g/dC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ZS53aWR0aCgpLGg6ZS5oZWlnaHQoKX0pLGk9byhmdW5jdGlvbihzLGwpe3JldHVybnt4Om4ueDErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKm4udykseTpuLnkxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpuLmgpfX0sImdldFBvcyIpO3JldHVybiByLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxpKSx0aGlzfTtaSmU9W3tuYW1lOiJicmVhZHRoZmlyc3QiLGltcGw6WGdlfSx7bmFtZToiY2lyY2xlIixpbXBsOmpnZX0se25hbWU6ImNvbmNlbnRyaWMiLGltcGw6S2dlfSx7bmFtZToiY29zZSIsaW1wbDpaNn0se25hbWU6ImdyaWQiLGltcGw6WmdlfSx7bmFtZToibnVsbCIsaW1wbDpiQn0se25hbWU6InByZXNldCIsaW1wbDpKZ2V9LHtuYW1lOiJyYW5kb20iLGltcGw6ZTFlfV07byh0MWUsIk51bGxSZW5kZXJlciIpO0VtZT1vKGZ1bmN0aW9uKCl7fSwibm9vcCIpLFNtZT1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcyIpfSwidGhyb3dJbWdFcnIiKTt0MWUucHJvdG90eXBlPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6RW1lLG5vdGlmeTpvKGZ1bmN0aW9uKCl7dGhpcy5ub3RpZmljYXRpb25zKyt9LCJub3RpZnkiKSxpbml0OkVtZSxpc0hlYWRsZXNzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImlzSGVhZGxlc3MiKSxwbmc6U21lLGpwZzpTbWV9O3dCPXt9O3dCLmFycm93U2hhcGVXaWR0aD0uMzt3Qi5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hcnJvd1NoYXBlcz17fSxlPXRoaXMscj1vKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0ueC1kLzIteSx4PW0ueCtkLzIreSxiPW0ueS1kLzIteSx3PW0ueStkLzIreSxfPXY8PWgmJmg8PXgmJmI8PWYmJmY8PXc7cmV0dXJuIF99LCJiYkNvbGxpZGUiKSxuPW8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1oKk1hdGguY29zKHApLWYqTWF0aC5zaW4ocCkseT1oKk1hdGguc2luKHApK2YqTWF0aC5jb3MocCksdj1nKmQseD15KmQsYj12K20ueCx3PXgrbS55O3JldHVybnt4OmIseTp3fX0sInRyYW5zZm9ybSIpLGk9byhmdW5jdGlvbihoLGYsZCxwKXtmb3IodmFyIG09W10sZz0wO2c8aC5sZW5ndGg7Zys9Mil7dmFyIHk9aFtnXSx2PWhbZysxXTttLnB1c2gobih5LHYsZixkLHApKX1yZXR1cm4gbX0sInRyYW5zZm9ybVBvaW50cyIpLGE9byhmdW5jdGlvbihoKXtmb3IodmFyIGY9W10sZD0wO2Q8aC5sZW5ndGg7ZCsrKXt2YXIgcD1oW2RdO2YucHVzaChwLngscC55KX1yZXR1cm4gZn0sInBvaW50c1RvQXJyIikscz1vKGZ1bmN0aW9uKGgpe3JldHVybiBoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnBmVmFsdWUqMn0sInN0YW5kYXJkR2FwIiksbD1vKGZ1bmN0aW9uKGgsZil7WnQoZikmJihmPXRbZl0pLHRbaF09aXIoe25hbWU6aCxwb2ludHM6Wy0uMTUsLS4zLC4xNSwtLjMsLjE1LC4zLC0uMTUsLjNdLGNvbGxpZGU6byhmdW5jdGlvbihwLG0sZyx5LHYseCl7dmFyIGI9YShpKHRoaXMucG9pbnRzLGcrMip4LHksdikpLHc9anMocCxtLGIpO3JldHVybiB3fSwiY29sbGlkZSIpLHJvdWdoQ29sbGlkZTpyLGRyYXc6byhmdW5jdGlvbihwLG0sZyx5KXt2YXIgdj1pKHRoaXMucG9pbnRzLG0sZyx5KTtlLmFycm93U2hhcGVJbXBsKCJwb2x5Z29uIikocCx2KX0sImRyYXciKSxzcGFjaW5nOm8oZnVuY3Rpb24ocCl7cmV0dXJuIDB9LCJzcGFjaW5nIiksZ2FwOnN9LGYpfSwiZGVmaW5lQXJyb3dTaGFwZSIpO2woIm5vbmUiLHtjb2xsaWRlOl82LHJvdWdoQ29sbGlkZTpfNixkcmF3OnNCLHNwYWNpbmc6T3BlLGdhcDpPcGV9KSxsKCJ0cmlhbmdsZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjNdfSksbCgiYXJyb3ciLCJ0cmlhbmdsZSIpLGwoInRyaWFuZ2xlLWJhY2tjdXJ2ZSIse3BvaW50czp0LnRyaWFuZ2xlLnBvaW50cyxjb250cm9sUG9pbnQ6WzAsLS4xNV0scm91Z2hDb2xsaWRlOnIsZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7dmFyIGc9aSh0aGlzLnBvaW50cyxmLGQscCkseT10aGlzLmNvbnRyb2xQb2ludCx2PW4oeVswXSx5WzFdLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHYpfSwiZHJhdyIpLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBzKGgpKi44fSwiZ2FwIil9KSxsKCJ0cmlhbmdsZS10ZWUiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0scG9pbnRzVGVlOlstLjE1LC0uNCwtLjE1LC0uNSwuMTUsLS41LC4xNSwtLjRdLGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1hKGkodGhpcy5wb2ludHMsZCsyKnkscCxtKSkseD1hKGkodGhpcy5wb2ludHNUZWUsZCsyKnkscCxtKSksYj1qcyhoLGYsdil8fGpzKGgsZix4KTtyZXR1cm4gYn0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PWkodGhpcy5wb2ludHNUZWUsZixkLHApO2UuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShoLGcseSl9LCJkcmF3Iil9KSxsKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0seD1NYXRoLnBvdyh2LngtaCwyKStNYXRoLnBvdyh2LnktZiwyKTw9TWF0aC5wb3coKGQrMip5KSp0aGlzLnJhZGl1cywyKSxiPWEoaSh0aGlzLnBvaW50cyxkKzIqeSxwLG0pKTtyZXR1cm4ganMoaCxmLGIpfHx4fSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHNUcixmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyxwLngscC55LHRoaXMucmFkaXVzKmYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gZS5nZXRBcnJvd1dpZHRoKGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfSwic3BhY2luZyIpfSksbCgidHJpYW5nbGUtY3Jvc3MiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0sYmFzZUNyb3NzTGluZVB0czpbLS4xNSwtLjQsLS4xNSwtLjQsLjE1LC0uNCwuMTUsLS40XSxjcm9zc0xpbmVQdHM6byhmdW5jdGlvbihoLGYpe3ZhciBkPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLHA9Zi9oLG09MyxnPTU7cmV0dXJuIGRbbV09ZFttXS1wLGRbZ109ZFtnXS1wLGR9LCJjcm9zc0xpbmVQdHMiKSxjb2xsaWRlOm8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9YShpKHRoaXMucG9pbnRzLGQrMip5LHAsbSkpLHg9YShpKHRoaXMuY3Jvc3NMaW5lUHRzKGQsZyksZCsyKnkscCxtKSksYj1qcyhoLGYsdil8fGpzKGgsZix4KTtyZXR1cm4gYn0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PWkodGhpcy5jcm9zc0xpbmVQdHMoZixtKSxmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyx5KX0sImRyYXciKX0pLGwoInZlZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjMsMCwtLjE1XSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gcyhoKSouNTI1fSwiZ2FwIil9KSxsKCJjaXJjbGUiLHtyYWRpdXM6LjE1LGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1tLHg9TWF0aC5wb3codi54LWgsMikrTWF0aC5wb3codi55LWYsMik8PU1hdGgucG93KChkKzIqeSkqdGhpcy5yYWRpdXMsMik7cmV0dXJuIHh9LCJjb2xsaWRlIiksZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgscC54LHAueSx0aGlzLnJhZGl1cypmKX0sImRyYXciKSxzcGFjaW5nOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGUuZ2V0QXJyb3dXaWR0aChoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c30sInNwYWNpbmciKX0pLGwoInRlZSIse3BvaW50czpbLS4xNSwwLC0uMTUsLS4xLC4xNSwtLjEsLjE1LDBdLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gMX0sInNwYWNpbmciKSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gMX0sImdhcCIpfSksbCgic3F1YXJlIix7cG9pbnRzOlstLjE1LDAsLjE1LDAsLjE1LC0uMywtLjE1LC0uM119KSxsKCJkaWFtb25kIix7cG9pbnRzOlstLjE1LC0uMTUsMCwtLjMsLjE1LC0uMTUsMCwwXSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gaC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpoLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZX0sImdhcCIpfSksbCgiY2hldnJvbiIse3BvaW50czpbMCwwLC0uMTUsLS4xNSwtLjEsLS4yLDAsLS4xLC4xLC0uMiwuMTUsLS4xNV0sZ2FwOm8oZnVuY3Rpb24oaCl7cmV0dXJuIC45NSpoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfSwiZ2FwIil9KX07dHA9e307dHAucHJvamVjdEludG9WaWV3cG9ydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3ksbj10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxpPW5bMF0sYT1uWzFdLHM9bls0XSxsPXIucGFuKCksdT1yLnpvb20oKSxoPSgodC1pKS9zLWwueCkvdSxmPSgoZS1hKS9zLWwueSkvdTtyZXR1cm5baCxmXX07dHAuZmluZENvbnRhaW5lckNsaWVudENvb3Jkcz1mdW5jdGlvbigpe2lmKHRoaXMuY29udGFpbmVyQkIpcmV0dXJuIHRoaXMuY29udGFpbmVyQkI7dmFyIHQ9dGhpcy5jb250YWluZXIsZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy5jeS53aW5kb3coKS5nZXRDb21wdXRlZFN0eWxlKHQpLG49byhmdW5jdGlvbih4KXtyZXR1cm4gcGFyc2VGbG9hdChyLmdldFByb3BlcnR5VmFsdWUoeCkpfSwic3R5bGVWYWx1ZSIpLGk9e2xlZnQ6bigicGFkZGluZy1sZWZ0IikscmlnaHQ6bigicGFkZGluZy1yaWdodCIpLHRvcDpuKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpuKCJwYWRkaW5nLWJvdHRvbSIpfSxhPXtsZWZ0Om4oImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6bigiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOm4oImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206bigiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxzPXQuY2xpZW50V2lkdGgsbD10LmNsaWVudEhlaWdodCx1PWkubGVmdCtpLnJpZ2h0LGg9aS50b3AraS5ib3R0b20sZj1hLmxlZnQrYS5yaWdodCxkPWUud2lkdGgvKHMrZikscD1zLXUsbT1sLWgsZz1lLmxlZnQraS5sZWZ0K2EubGVmdCx5PWUudG9wK2kudG9wK2EudG9wO3JldHVybiB0aGlzLmNvbnRhaW5lckJCPVtnLHkscCxtLGRdfTt0cC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lckJCPW51bGx9O3RwLmZpbmROZWFyZXN0RWxlbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5maW5kTmVhcmVzdEVsZW1lbnRzKHQsZSxyLG4pWzBdfTt0cC5maW5kTmVhcmVzdEVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT10aGlzLHM9YS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLGw9W10sdT1hLmN5Lnpvb20oKSxoPWEuY3kuaGFzQ29tcG91bmROb2RlcygpLGY9KG4/MjQ6OCkvdSxkPShuPzg6MikvdSxwPShuPzg6MikvdSxtPTEvMCxnLHk7ciYmKHM9cy5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gdihMLFMpe2lmKEwuaXNOb2RlKCkpe2lmKHkpcmV0dXJuO3k9TCxsLnB1c2goTCl9aWYoTC5pc0VkZ2UoKSYmKFM9PW51bGx8fFM8bSkpaWYoZyl7aWYoZy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PUwucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmcucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWU9PT1MLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlKXtmb3IodmFyIEE9MDtBPGwubGVuZ3RoO0ErKylpZihsW0FdLmlzRWRnZSgpKXtsW0FdPUwsZz1MLG09Uz8/bTticmVha319fWVsc2UgbC5wdXNoKEwpLGc9TCxtPVM/P219byh2LCJhZGRFbGUiKTtmdW5jdGlvbiB4KEwpe3ZhciBTPUwub3V0ZXJXaWR0aCgpKzIqZCxBPUwub3V0ZXJIZWlnaHQoKSsyKmQsST1TLzIsRD1BLzIsaz1MLnBvc2l0aW9uKCksUj1MLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpMLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsQz1MLl9wcml2YXRlLnJzY3JhdGNoO2lmKGsueC1JPD10JiZ0PD1rLngrSSYmay55LUQ8PWUmJmU8PWsueStEKXt2YXIgTz1hLm5vZGVTaGFwZXNbaS5nZXROb2RlU2hhcGUoTCldO2lmKE8uY2hlY2tQb2ludCh0LGUsMCxTLEEsay54LGsueSxSLEMpKXJldHVybiB2KEwsMCksITB9fW8oeCwiY2hlY2tOb2RlIik7ZnVuY3Rpb24gYihMKXt2YXIgUz1MLl9wcml2YXRlLEE9Uy5yc2NyYXRjaCxJPUwucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsRD1MLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSxrPUkvMitmLFI9ayprLEM9ayoyLEY9Uy5zb3VyY2UsQj1TLnRhcmdldCxPO2lmKEEuZWRnZVR5cGU9PT0ic2VnbWVudHMifHxBLmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8QS5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgTj1BLmFsbHB0cyxQPTA7UCszPE4ubGVuZ3RoO1ArPTIpaWYoZGplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdLEMpJiZSPihPPXZqZSh0LGUsTltQXSxOW1ArMV0sTltQKzJdLE5bUCszXSkpKXJldHVybiB2KEwsTyksITB9ZWxzZSBpZihBLmVkZ2VUeXBlPT09ImJlemllciJ8fEEuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxBLmVkZ2VUeXBlPT09InNlbGYifHxBLmVkZ2VUeXBlPT09ImNvbXBvdW5kIil7Zm9yKHZhciBOPUEuYWxscHRzLFA9MDtQKzU8QS5hbGxwdHMubGVuZ3RoO1ArPTQpaWYocGplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdLE5bUCs0XSxOW1ArNV0sQykmJlI+KE89eWplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdLE5bUCs0XSxOW1ArNV0pKSlyZXR1cm4gdihMLE8pLCEwfWZvcih2YXIgRj1GfHxTLnNvdXJjZSxCPUJ8fFMudGFyZ2V0LEc9aS5nZXRBcnJvd1dpZHRoKEksRCksej1be25hbWU6InNvdXJjZSIseDpBLmFycm93U3RhcnRYLHk6QS5hcnJvd1N0YXJ0WSxhbmdsZTpBLnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6QS5hcnJvd0VuZFgseTpBLmFycm93RW5kWSxhbmdsZTpBLnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OkEubWlkWCx5OkEubWlkWSxhbmdsZTpBLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OkEubWlkWCx5OkEubWlkWSxhbmdsZTpBLm1pZHRndEFycm93QW5nbGV9XSxQPTA7UDx6Lmxlbmd0aDtQKyspe3ZhciBXPXpbUF0sWj1hLmFycm93U2hhcGVzW0wucHN0eWxlKFcubmFtZSsiLWFycm93LXNoYXBlIikudmFsdWVdLGo9TC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihaLnJvdWdoQ29sbGlkZSh0LGUsRyxXLmFuZ2xlLHt4OlcueCx5OlcueX0saixmKSYmWi5jb2xsaWRlKHQsZSxHLFcuYW5nbGUse3g6Vy54LHk6Vy55fSxqLGYpKXJldHVybiB2KEwpLCEwfWgmJmwubGVuZ3RoPjAmJih4KEYpLHgoQikpfW8oYiwiY2hlY2tFZGdlIik7ZnVuY3Rpb24gdyhMLFMsQSl7cmV0dXJuIFFsKEwsUyxBKX1vKHcsInByZXByb3AiKTtmdW5jdGlvbiBfKEwsUyl7dmFyIEE9TC5fcHJpdmF0ZSxJPXAsRDtTP0Q9UysiLSI6RD0iIixMLmJvdW5kaW5nQm94KCk7dmFyIGs9QS5sYWJlbEJvdW5kc1tTfHwibWFpbiJdLFI9TC5wc3R5bGUoRCsibGFiZWwiKS52YWx1ZSxDPUwucHN0eWxlKCJ0ZXh0LWV2ZW50cyIpLnN0clZhbHVlPT09InllcyI7aWYoISghQ3x8IVIpKXt2YXIgTz13KEEucnNjcmF0Y2gsImxhYmVsWCIsUyksTj13KEEucnNjcmF0Y2gsImxhYmVsWSIsUyksUD13KEEucnNjcmF0Y2gsImxhYmVsQW5nbGUiLFMpLEY9TC5wc3R5bGUoRCsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUsQj1MLnBzdHlsZShEKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxHPWsueDEtSS1GLHo9ay54MitJLUYsVz1rLnkxLUktQixaPWsueTIrSS1CO2lmKFApe3ZhciBqPU1hdGguY29zKFApLG9lPU1hdGguc2luKFApLEs9byhmdW5jdGlvbih1ZSxjZSl7cmV0dXJuIHVlPXVlLU8sY2U9Y2UtTix7eDp1ZSpqLWNlKm9lK08seTp1ZSpvZStjZSpqK059fSwicm90YXRlIiksZWU9SyhHLFcpLEo9SyhHLFopLEg9Syh6LFcpLHE9Syh6LFopLFE9W2VlLngrRixlZS55K0IsSC54K0YsSC55K0IscS54K0YscS55K0IsSi54K0YsSi55K0JdO2lmKGpzKHQsZSxRKSlyZXR1cm4gdihMKSwhMH1lbHNlIGlmKFQxKGssdCxlKSlyZXR1cm4gdihMKSwhMH19byhfLCJjaGVja0xhYmVsIik7Zm9yKHZhciBUPXMubGVuZ3RoLTE7VD49MDtULS0pe3ZhciBFPXNbVF07RS5pc05vZGUoKT94KEUpfHxfKEUpOmIoRSl8fF8oRSl8fF8oRSwic291cmNlIil8fF8oRSwidGFyZ2V0Iil9cmV0dXJuIGx9O3RwLmdldEFsbEluQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKS5pbnRlcmFjdGl2ZSxhPVtdLHM9TWF0aC5taW4odCxyKSxsPU1hdGgubWF4KHQsciksdT1NYXRoLm1pbihlLG4pLGg9TWF0aC5tYXgoZSxuKTt0PXMscj1sLGU9dSxuPWg7Zm9yKHZhciBmPUtzKHt4MTp0LHkxOmUseDI6cix5MjpufSksZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgcD1pW2RdO2lmKHAuaXNOb2RlKCkpe3ZhciBtPXAsZz1tLmJvdW5kaW5nQm94KHtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiExLGluY2x1ZGVMYWJlbHM6ITF9KTtjQihmLGcpJiYhdWdlKGcsZikmJmEucHVzaChtKX1lbHNle3ZhciB5PXAsdj15Ll9wcml2YXRlLHg9di5yc2NyYXRjaDtpZih4LnN0YXJ0WCE9bnVsbCYmeC5zdGFydFkhPW51bGwmJiFUMShmLHguc3RhcnRYLHguc3RhcnRZKXx8eC5lbmRYIT1udWxsJiZ4LmVuZFkhPW51bGwmJiFUMShmLHguZW5kWCx4LmVuZFkpKWNvbnRpbnVlO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyInx8eC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fHguZWRnZVR5cGU9PT0ic2VsZiJ8fHguZWRnZVR5cGU9PT0iY29tcG91bmQifHx4LmVkZ2VUeXBlPT09InNlZ21lbnRzInx8eC5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgYj12LnJzdHlsZS5iZXppZXJQdHN8fHYucnN0eWxlLmxpbmVQdHN8fHYucnN0eWxlLmhheXN0YWNrUHRzLHc9ITAsXz0wO188Yi5sZW5ndGg7XysrKWlmKCFmamUoZixiW19dKSl7dz0hMTticmVha313JiZhLnB1c2goeSl9ZWxzZSh4LmVkZ2VUeXBlPT09ImhheXN0YWNrInx8eC5lZGdlVHlwZT09PSJzdHJhaWdodCIpJiZhLnB1c2goeSl9fXJldHVybiBhfTtPNj17fTtPNi5jYWxjdWxhdGVBcnJvd0FuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLnJzY3JhdGNoLHI9ZS5lZGdlVHlwZT09PSJoYXlzdGFjayIsbj1lLmVkZ2VUeXBlPT09ImJlemllciIsaT1lLmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyIixhPWUuZWRnZVR5cGU9PT0ic2VnbWVudHMiLHM9ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIsbD1lLmVkZ2VUeXBlPT09InNlbGYiLHUsaCxmLGQscCxtLHgsYjtpZihyPyhmPWUuaGF5c3RhY2tQdHNbMF0sZD1lLmhheXN0YWNrUHRzWzFdLHA9ZS5oYXlzdGFja1B0c1syXSxtPWUuaGF5c3RhY2tQdHNbM10pOihmPWUuYXJyb3dTdGFydFgsZD1lLmFycm93U3RhcnRZLHA9ZS5hcnJvd0VuZFgsbT1lLmFycm93RW5kWSkseD1lLm1pZFgsYj1lLm1pZFksYSl1PWYtZS5zZWdwdHNbMF0saD1kLWUuc2VncHRzWzFdO2Vsc2UgaWYoaXx8c3x8bHx8bil7dmFyIGc9ZS5hbGxwdHMseT1sYShnWzBdLGdbMl0sZ1s0XSwuMSksdj1sYShnWzFdLGdbM10sZ1s1XSwuMSk7dT1mLXksaD1kLXZ9ZWxzZSB1PWYteCxoPWQtYjtlLnNyY0Fycm93QW5nbGU9czYodSxoKTt2YXIgeD1lLm1pZFgsYj1lLm1pZFk7aWYociYmKHg9KGYrcCkvMixiPShkK20pLzIpLHU9cC1mLGg9bS1kLGEpe3ZhciBnPWUuYWxscHRzO2lmKGcubGVuZ3RoLzIlMj09PTApe3ZhciB3PWcubGVuZ3RoLzIsXz13LTI7dT1nW3ddLWdbX10saD1nW3crMV0tZ1tfKzFdfWVsc2UgaWYoZS5pc1JvdW5kKXU9ZS5taWRWZWN0b3JbMV0saD0tZS5taWRWZWN0b3JbMF07ZWxzZXt2YXIgdz1nLmxlbmd0aC8yLTEsXz13LTI7dT1nW3ddLWdbX10saD1nW3crMV0tZ1tfKzFdfX1lbHNlIGlmKGl8fHN8fGwpe3ZhciBnPWUuYWxscHRzLFQ9ZS5jdHJscHRzLEUsTCxTLEE7aWYoVC5sZW5ndGgvMiUyPT09MCl7dmFyIEk9Zy5sZW5ndGgvMi0xLEQ9SSsyLGs9RCsyO0U9bGEoZ1tJXSxnW0RdLGdba10sMCksTD1sYShnW0krMV0sZ1tEKzFdLGdbaysxXSwwKSxTPWxhKGdbSV0sZ1tEXSxnW2tdLDFlLTQpLEE9bGEoZ1tJKzFdLGdbRCsxXSxnW2srMV0sMWUtNCl9ZWxzZXt2YXIgRD1nLmxlbmd0aC8yLTEsST1ELTIsaz1EKzI7RT1sYShnW0ldLGdbRF0sZ1trXSwuNDk5OSksTD1sYShnW0krMV0sZ1tEKzFdLGdbaysxXSwuNDk5OSksUz1sYShnW0ldLGdbRF0sZ1trXSwuNSksQT1sYShnW0krMV0sZ1tEKzFdLGdbaysxXSwuNSl9dT1TLUUsaD1BLUx9aWYoZS5taWR0Z3RBcnJvd0FuZ2xlPXM2KHUsaCksZS5taWREaXNwWD11LGUubWlkRGlzcFk9aCx1Kj0tMSxoKj0tMSxhKXt2YXIgZz1lLmFsbHB0cztpZihnLmxlbmd0aC8yJTIhPT0wKXtpZighZS5pc1JvdW5kKXt2YXIgdz1nLmxlbmd0aC8yLTEsUj13KzI7dT0tKGdbUl0tZ1t3XSksaD0tKGdbUisxXS1nW3crMV0pfX19aWYoZS5taWRzcmNBcnJvd0FuZ2xlPXM2KHUsaCksYSl1PXAtZS5zZWdwdHNbZS5zZWdwdHMubGVuZ3RoLTJdLGg9bS1lLnNlZ3B0c1tlLnNlZ3B0cy5sZW5ndGgtMV07ZWxzZSBpZihpfHxzfHxsfHxuKXt2YXIgZz1lLmFsbHB0cyxDPWcubGVuZ3RoLHk9bGEoZ1tDLTZdLGdbQy00XSxnW0MtMl0sLjkpLHY9bGEoZ1tDLTVdLGdbQy0zXSxnW0MtMV0sLjkpO3U9cC15LGg9bS12fWVsc2UgdT1wLXgsaD1tLWI7ZS50Z3RBcnJvd0FuZ2xlPXM2KHUsaCl9O082LmdldEFycm93V2lkdGg9TzYuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sbj1yW3QrIiwgIitlXTtyZXR1cm4gbnx8KG49TWF0aC5tYXgoTWF0aC5wb3codCoxMy4zNywuOSksMjkpKmUsclt0KyIsICIrZV09bixuKX07UWM9e30sY2w9e30sTG1lPW8oZnVuY3Rpb24oZSxyLG4pe24ueD1yLngtZS54LG4ueT1yLnktZS55LG4ubGVuPU1hdGguc3FydChuLngqbi54K24ueSpuLnkpLG4ubng9bi54L24ubGVuLG4ubnk9bi55L24ubGVuLG4uYW5nPU1hdGguYXRhbjIobi5ueSxuLm54KX0sImFzVmVjIiksSkplPW8oZnVuY3Rpb24oZSxyKXtyLng9ZS54Ki0xLHIueT1lLnkqLTEsci5ueD1lLm54Ki0xLHIubnk9ZS5ueSotMSxyLmFuZz1lLmFuZz4wPy0oTWF0aC5QSS1lLmFuZyk6TWF0aC5QSStlLmFuZ30sImludmVydFZlYyIpLGVldD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZSE9PV9tZT9MbWUocixlLFFjKTpKSmUoY2wsUWMpLExtZShyLG4sY2wpLENtZT1RYy5ueCpjbC5ueS1RYy5ueSpjbC5ueCxBbWU9UWMubngqY2wubngtUWMubnkqLWNsLm55LG5oPU1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLENtZSkpKSxNYXRoLmFicyhuaCk8MWUtNil7cVA9ci54LFhQPXIueSxXMD1kMT0wO3JldHVybn1ZMD0xLEU2PSExLEFtZTwwP25oPDA/bmg9TWF0aC5QSStuaDoobmg9TWF0aC5QSS1uaCxZMD0tMSxFNj0hMCk6bmg+MCYmKFkwPS0xLEU2PSEwKSxyLnJhZGl1cyE9PXZvaWQgMD9kMT1yLnJhZGl1czpkMT1pLCQwPW5oLzIsbTY9TWF0aC5taW4oUWMubGVuLzIsY2wubGVuLzIpLGE/KEtjPU1hdGguYWJzKE1hdGguY29zKCQwKSpkMS9NYXRoLnNpbigkMCkpLEtjPm02PyhLYz1tNixXMD1NYXRoLmFicyhLYypNYXRoLnNpbigkMCkvTWF0aC5jb3MoJDApKSk6VzA9ZDEpOihLYz1NYXRoLm1pbihtNixkMSksVzA9TWF0aC5hYnMoS2MqTWF0aC5zaW4oJDApL01hdGguY29zKCQwKSkpLGpQPXIueCtjbC5ueCpLYyxLUD1yLnkrY2wubnkqS2MscVA9alAtY2wubnkqVzAqWTAsWFA9S1ArY2wubngqVzAqWTAscjFlPXIueCtRYy5ueCpLYyxuMWU9ci55K1FjLm55KktjLF9tZT1yfSwiY2FsY0Nvcm5lckFyYyIpO28oaTFlLCJkcmF3UHJlcGFyZWRSb3VuZENvcm5lciIpO28oVEIsImdldFJvdW5kQ29ybmVyIik7cWE9e307cWEuZmluZE1pZHB0UHRzRXRjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wb3NQdHMsbj1lLmludGVyc2VjdGlvblB0cyxpPWUudmVjdG9yTm9ybUludmVyc2UsYSxzPXQucHN0eWxlKCJzb3VyY2UtZW5kcG9pbnQiKSxsPXQucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSx1PXMudW5pdHMhPW51bGwmJmwudW5pdHMhPW51bGwsaD1vKGZ1bmN0aW9uKFQsRSxMLFMpe3ZhciBBPVMtRSxJPUwtVCxEPU1hdGguc3FydChJKkkrQSpBKTtyZXR1cm57eDotQS9ELHk6SS9EfX0sInJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlIiksZj10LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goZil7Y2FzZSJub2RlLXBvc2l0aW9uIjphPXI7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOmE9bjticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKHUpe3ZhciBkPXRoaXMubWFudWFsRW5kcHRUb1B4KHQuc291cmNlKClbMF0scykscD1qbChkLDIpLG09cFswXSxnPXBbMV0seT10aGlzLm1hbnVhbEVuZHB0VG9QeCh0LnRhcmdldCgpWzBdLGwpLHY9amwoeSwyKSx4PXZbMF0sYj12WzFdLHc9e3gxOm0seTE6Zyx4Mjp4LHkyOmJ9O2k9aChtLGcseCxiKSxhPXd9ZWxzZSBvbigiRWRnZSAiLmNvbmNhdCh0LmlkKCksIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLiIpKSxhPW47YnJlYWt9fXJldHVybnttaWRwdFB0czphLHZlY3Rvck5vcm1JbnZlcnNlOml9fTtxYS5maW5kSGF5c3RhY2tQb2ludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj1yLl9wcml2YXRlLGk9bi5yc2NyYXRjaDtpZighaS5oYXlzdGFjayl7dmFyIGE9TWF0aC5yYW5kb20oKSoyKk1hdGguUEk7aS5zb3VyY2U9e3g6TWF0aC5jb3MoYSkseTpNYXRoLnNpbihhKX0sYT1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSSxpLnRhcmdldD17eDpNYXRoLmNvcyhhKSx5Ok1hdGguc2luKGEpfX12YXIgcz1uLnNvdXJjZSxsPW4udGFyZ2V0LHU9cy5wb3NpdGlvbigpLGg9bC5wb3NpdGlvbigpLGY9cy53aWR0aCgpLGQ9bC53aWR0aCgpLHA9cy5oZWlnaHQoKSxtPWwuaGVpZ2h0KCksZz1yLnBzdHlsZSgiaGF5c3RhY2stcmFkaXVzIikudmFsdWUseT1nLzI7aS5oYXlzdGFja1B0cz1pLmFsbHB0cz1baS5zb3VyY2UueCpmKnkrdS54LGkuc291cmNlLnkqcCp5K3UueSxpLnRhcmdldC54KmQqeStoLngsaS50YXJnZXQueSptKnkraC55XSxpLm1pZFg9KGkuYWxscHRzWzBdK2kuYWxscHRzWzJdKS8yLGkubWlkWT0oaS5hbGxwdHNbMV0raS5hbGxwdHNbM10pLzIsaS5lZGdlVHlwZT0iaGF5c3RhY2siLGkuaGF5c3RhY2s9ITAsdGhpcy5zdG9yZUVkZ2VQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKHIpLHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHIpfX07cWEuZmluZFNlZ21lbnRzUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaCxuPXQucHN0eWxlKCJzZWdtZW50LXdlaWdodHMiKSxpPXQucHN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIpLGE9dC5wc3R5bGUoInNlZ21lbnQtcmFkaWkiKSxzPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLGw9TWF0aC5taW4obi5wZlZhbHVlLmxlbmd0aCxpLnBmVmFsdWUubGVuZ3RoKSx1PWEucGZWYWx1ZVthLnBmVmFsdWUubGVuZ3RoLTFdLGg9cy5wZlZhbHVlW3MucGZWYWx1ZS5sZW5ndGgtMV07ci5lZGdlVHlwZT0ic2VnbWVudHMiLHIuc2VncHRzPVtdLHIucmFkaWk9W10sci5pc0FyY1JhZGl1cz1bXTtmb3IodmFyIGY9MDtmPGw7ZisrKXt2YXIgZD1uLnBmVmFsdWVbZl0scD1pLnBmVmFsdWVbZl0sbT0xLWQsZz1kLHk9dGhpcy5maW5kTWlkcHRQdHNFdGModCxlKSx2PXkubWlkcHRQdHMseD15LnZlY3Rvck5vcm1JbnZlcnNlLGI9e3g6di54MSptK3YueDIqZyx5OnYueTEqbSt2LnkyKmd9O3Iuc2VncHRzLnB1c2goYi54K3gueCpwLGIueSt4LnkqcCksci5yYWRpaS5wdXNoKGEucGZWYWx1ZVtmXSE9PXZvaWQgMD9hLnBmVmFsdWVbZl06dSksci5pc0FyY1JhZGl1cy5wdXNoKChzLnBmVmFsdWVbZl0hPT12b2lkIDA/cy5wZlZhbHVlW2ZdOmgpPT09ImFyYy1yYWRpdXMiKX19O3FhLmZpbmRMb29wUG9pbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLmRpckNvdW50cyxzPWUuc3JjUG9zLGw9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdT1sP2wucGZWYWx1ZVswXTp2b2lkIDAsaD10LnBzdHlsZSgibG9vcC1kaXJlY3Rpb24iKS5wZlZhbHVlLGY9dC5wc3R5bGUoImxvb3Atc3dlZXAiKS5wZlZhbHVlLGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZTtpLmVkZ2VUeXBlPSJzZWxmIjt2YXIgcD1yLG09ZDtuJiYocD0wLG09dSk7dmFyIGc9aC1NYXRoLlBJLzIseT1nLWYvMix2PWcrZi8yLHg9aCsiXyIrZjtwPWFbeF09PT12b2lkIDA/YVt4XT0wOisrYVt4XSxpLmN0cmxwdHM9W3MueCtNYXRoLmNvcyh5KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih5KSoxLjQqbSoocC8zKzEpLHMueCtNYXRoLmNvcyh2KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih2KSoxLjQqbSoocC8zKzEpXX07cWEuZmluZENvbXBvdW5kTG9vcFBvaW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9wcml2YXRlLnJzY3JhdGNoO2kuZWRnZVR5cGU9ImNvbXBvdW5kIjt2YXIgYT1lLnNyY1BvcyxzPWUudGd0UG9zLGw9ZS5zcmNXLHU9ZS5zcmNILGg9ZS50Z3RXLGY9ZS50Z3RILGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxwPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLG09cD9wLnBmVmFsdWVbMF06dm9pZCAwLGc9cix5PWQ7biYmKGc9MCx5PW0pO3ZhciB2PTUwLHg9e3g6YS54LWwvMix5OmEueS11LzJ9LGI9e3g6cy54LWgvMix5OnMueS1mLzJ9LHc9e3g6TWF0aC5taW4oeC54LGIueCkseTpNYXRoLm1pbih4LnksYi55KX0sXz0uNSxUPU1hdGgubWF4KF8sTWF0aC5sb2cobCouMDEpKSxFPU1hdGgubWF4KF8sTWF0aC5sb2coaCouMDEpKTtpLmN0cmxwdHM9W3cueCx3LnktKDErTWF0aC5wb3codiwxLjEyKS8xMDApKnkqKGcvMysxKSpULHcueC0oMStNYXRoLnBvdyh2LDEuMTIpLzEwMCkqeSooZy8zKzEpKkUsdy55XX07cWEuZmluZFN0cmFpZ2h0RWRnZVBvaW50cz1mdW5jdGlvbih0KXt0Ll9wcml2YXRlLnJzY3JhdGNoLmVkZ2VUeXBlPSJzdHJhaWdodCJ9O3FhLmZpbmRCZXppZXJQb2ludHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10Ll9wcml2YXRlLnJzY3JhdGNoLHM9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxsPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHU9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyIpLGg9bCYmdT9NYXRoLm1pbihsLnZhbHVlLmxlbmd0aCx1LnZhbHVlLmxlbmd0aCk6MSxmPWw/bC5wZlZhbHVlWzBdOnZvaWQgMCxkPXUudmFsdWVbMF0scD1uO2EuZWRnZVR5cGU9cD8ibXVsdGliZXppZXIiOiJiZXppZXIiLGEuY3RybHB0cz1bXTtmb3IodmFyIG09MDttPGg7bSsrKXt2YXIgZz0oLjUtZS5lbGVzLmxlbmd0aC8yK3IpKnMqKGk/LTE6MSkseT12b2lkIDAsdj1sZ2UoZyk7cCYmKGY9bD9sLnBmVmFsdWVbbV06cyxkPXUudmFsdWVbbV0pLG4/eT1mOnk9ZiE9PXZvaWQgMD92KmY6dm9pZCAwO3ZhciB4PXkhPT12b2lkIDA/eTpnLGI9MS1kLHc9ZCxfPXRoaXMuZmluZE1pZHB0UHRzRXRjKHQsZSksVD1fLm1pZHB0UHRzLEU9Xy52ZWN0b3JOb3JtSW52ZXJzZSxMPXt4OlQueDEqYitULngyKncseTpULnkxKmIrVC55Mip3fTthLmN0cmxwdHMucHVzaChMLngrRS54KngsTC55K0UueSp4KX19O3FhLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaDtyLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIG49InZlcnRpY2FsIixpPSJob3Jpem9udGFsIixhPSJsZWZ0d2FyZCIscz0icmlnaHR3YXJkIixsPSJkb3dud2FyZCIsdT0idXB3YXJkIixoPSJhdXRvIixmPWUucG9zUHRzLGQ9ZS5zcmNXLHA9ZS5zcmNILG09ZS50Z3RXLGc9ZS50Z3RILHk9dC5wc3R5bGUoImVkZ2UtZGlzdGFuY2VzIikudmFsdWUsdj15IT09Im5vZGUtcG9zaXRpb24iLHg9dC5wc3R5bGUoInRheGktZGlyZWN0aW9uIikudmFsdWUsYj14LHc9dC5wc3R5bGUoInRheGktdHVybiIpLF89dy51bml0cz09PSIlIixUPXcucGZWYWx1ZSxFPVQ8MCxMPXQucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxTPXY/KGQrbSkvMjowLEE9dj8ocCtnKS8yOjAsST1mLngyLWYueDEsRD1mLnkyLWYueTEsaz1vKGZ1bmN0aW9uKGllLEVlKXtyZXR1cm4gaWU+MD9NYXRoLm1heChpZS1FZSwwKTpNYXRoLm1pbihpZStFZSwwKX0sInN1YkRXSCIpLFI9ayhJLFMpLEM9ayhELEEpLE89ITE7Yj09PWg/eD1NYXRoLmFicyhSKT5NYXRoLmFicyhDKT9pOm46Yj09PXV8fGI9PT1sPyh4PW4sTz0hMCk6KGI9PT1hfHxiPT09cykmJih4PWksTz0hMCk7dmFyIE49eD09PW4sUD1OP0M6UixGPU4/RDpJLEI9bGdlKEYpLEc9ITE7IShPJiYoX3x8RSkpJiYoYj09PWwmJkY8MHx8Yj09PXUmJkY+MHx8Yj09PWEmJkY+MHx8Yj09PXMmJkY8MCkmJihCKj0tMSxQPUIqTWF0aC5hYnMoUCksRz0hMCk7dmFyIHo7aWYoXyl7dmFyIFc9VDwwPzErVDpUO3o9VypQfWVsc2V7dmFyIFo9VDwwP1A6MDt6PVorVCpCfXZhciBqPW8oZnVuY3Rpb24oaWUpe3JldHVybiBNYXRoLmFicyhpZSk8THx8TWF0aC5hYnMoaWUpPj1NYXRoLmFicyhQKX0sImdldElzVG9vQ2xvc2UiKSxvZT1qKHopLEs9aihNYXRoLmFicyhQKS1NYXRoLmFicyh6KSksZWU9b2V8fEs7aWYoZWUmJiFHKWlmKE4pe3ZhciBKPU1hdGguYWJzKEYpPD1wLzIsSD1NYXRoLmFicyhJKTw9bS8yO2lmKEope3ZhciBxPShmLngxK2YueDIpLzIsUT1mLnkxLGFlPWYueTI7ci5zZWdwdHM9W3EsUSxxLGFlXX1lbHNlIGlmKEgpe3ZhciB1ZT0oZi55MStmLnkyKS8yLGNlPWYueDEsdGU9Zi54MjtyLnNlZ3B0cz1bY2UsdWUsdGUsdWVdfWVsc2Ugci5zZWdwdHM9W2YueDEsZi55Ml19ZWxzZXt2YXIgTmU9TWF0aC5hYnMoRik8PWQvMixzZT1NYXRoLmFicyhEKTw9Zy8yO2lmKE5lKXt2YXIga2U9KGYueTErZi55MikvMixSZT1mLngxLENlPWYueDI7ci5zZWdwdHM9W1JlLGtlLENlLGtlXX1lbHNlIGlmKHNlKXt2YXIgUGU9KGYueDErZi54MikvMixJZT1mLnkxLCRlPWYueTI7ci5zZWdwdHM9W1BlLEllLFBlLCRlXX1lbHNlIHIuc2VncHRzPVtmLngyLGYueTFdfWVsc2UgaWYoTil7dmFyIHllPWYueTEreisodj9wLzIqQjowKSxYPWYueDEsZmU9Zi54MjtyLnNlZ3B0cz1bWCx5ZSxmZSx5ZV19ZWxzZXt2YXIgaGU9Zi54MSt6Kyh2P2QvMipCOjApLGdlPWYueTEsbmU9Zi55MjtyLnNlZ3B0cz1baGUsZ2UsaGUsbmVdfWlmKHIuaXNSb3VuZCl7dmFyIHZlPXQucHN0eWxlKCJ0YXhpLXJhZGl1cyIpLnZhbHVlLFU9dC5wc3R5bGUoInJhZGl1cy10eXBlIikudmFsdWVbMF09PT0iYXJjLXJhZGl1cyI7ci5yYWRpaT1uZXcgQXJyYXkoci5zZWdwdHMubGVuZ3RoLzIpLmZpbGwodmUpLHIuaXNBcmNSYWRpdXM9bmV3IEFycmF5KHIuc2VncHRzLmxlbmd0aC8yKS5maWxsKFUpfX07cWEudHJ5VG9Db3JyZWN0SW52YWxpZFBvaW50cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoci5lZGdlVHlwZT09PSJiZXppZXIiKXt2YXIgbj1lLnNyY1BvcyxpPWUudGd0UG9zLGE9ZS5zcmNXLHM9ZS5zcmNILGw9ZS50Z3RXLHU9ZS50Z3RILGg9ZS5zcmNTaGFwZSxmPWUudGd0U2hhcGUsZD1lLnNyY0Nvcm5lclJhZGl1cyxwPWUudGd0Q29ybmVyUmFkaXVzLG09ZS5zcmNScyxnPWUudGd0UnMseT0heHQoci5zdGFydFgpfHwheHQoci5zdGFydFkpLHY9IXh0KHIuYXJyb3dTdGFydFgpfHwheHQoci5hcnJvd1N0YXJ0WSkseD0heHQoci5lbmRYKXx8IXh0KHIuZW5kWSksYj0heHQoci5hcnJvd0VuZFgpfHwheHQoci5hcnJvd0VuZFkpLHc9MyxfPXRoaXMuZ2V0QXJyb3dXaWR0aCh0LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHQucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLmFycm93U2hhcGVXaWR0aCxUPXcqXyxFPUswKHt4OnIuY3RybHB0c1swXSx5OnIuY3RybHB0c1sxXX0se3g6ci5zdGFydFgseTpyLnN0YXJ0WX0pLEw9RTxULFM9SzAoe3g6ci5jdHJscHRzWzBdLHk6ci5jdHJscHRzWzFdfSx7eDpyLmVuZFgseTpyLmVuZFl9KSxBPVM8VCxJPSExO2lmKHl8fHZ8fEwpe0k9ITA7dmFyIEQ9e3g6ci5jdHJscHRzWzBdLW4ueCx5OnIuY3RybHB0c1sxXS1uLnl9LGs9TWF0aC5zcXJ0KEQueCpELngrRC55KkQueSksUj17eDpELngvayx5OkQueS9rfSxDPU1hdGgubWF4KGEscyksTz17eDpyLmN0cmxwdHNbMF0rUi54KjIqQyx5OnIuY3RybHB0c1sxXStSLnkqMipDfSxOPWguaW50ZXJzZWN0TGluZShuLngsbi55LGEscyxPLngsTy55LDAsZCxtKTtMPyhyLmN0cmxwdHNbMF09ci5jdHJscHRzWzBdK1IueCooVC1FKSxyLmN0cmxwdHNbMV09ci5jdHJscHRzWzFdK1IueSooVC1FKSk6KHIuY3RybHB0c1swXT1OWzBdK1IueCpULHIuY3RybHB0c1sxXT1OWzFdK1IueSpUKX1pZih4fHxifHxBKXtJPSEwO3ZhciBQPXt4OnIuY3RybHB0c1swXS1pLngseTpyLmN0cmxwdHNbMV0taS55fSxGPU1hdGguc3FydChQLngqUC54K1AueSpQLnkpLEI9e3g6UC54L0YseTpQLnkvRn0sRz1NYXRoLm1heChhLHMpLHo9e3g6ci5jdHJscHRzWzBdK0IueCoyKkcseTpyLmN0cmxwdHNbMV0rQi55KjIqR30sVz1mLmludGVyc2VjdExpbmUoaS54LGkueSxsLHUsei54LHoueSwwLHAsZyk7QT8oci5jdHJscHRzWzBdPXIuY3RybHB0c1swXStCLngqKFQtUyksci5jdHJscHRzWzFdPXIuY3RybHB0c1sxXStCLnkqKFQtUykpOihyLmN0cmxwdHNbMF09V1swXStCLngqVCxyLmN0cmxwdHNbMV09V1sxXStCLnkqVCl9SSYmdGhpcy5maW5kRW5kcG9pbnRzKHQpfX07cWEuc3RvcmVBbGxwdHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpZihlLmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyInx8ZS5lZGdlVHlwZT09PSJiZXppZXIifHxlLmVkZ2VUeXBlPT09InNlbGYifHxlLmVkZ2VUeXBlPT09ImNvbXBvdW5kIil7ZS5hbGxwdHM9W10sZS5hbGxwdHMucHVzaChlLnN0YXJ0WCxlLnN0YXJ0WSk7Zm9yKHZhciByPTA7cisxPGUuY3RybHB0cy5sZW5ndGg7cis9MillLmFsbHB0cy5wdXNoKGUuY3RybHB0c1tyXSxlLmN0cmxwdHNbcisxXSksciszPGUuY3RybHB0cy5sZW5ndGgmJmUuYWxscHRzLnB1c2goKGUuY3RybHB0c1tyXStlLmN0cmxwdHNbcisyXSkvMiwoZS5jdHJscHRzW3IrMV0rZS5jdHJscHRzW3IrM10pLzIpO2UuYWxscHRzLnB1c2goZS5lbmRYLGUuZW5kWSk7dmFyIG4saTtlLmN0cmxwdHMubGVuZ3RoLzIlMj09PTA/KG49ZS5hbGxwdHMubGVuZ3RoLzItMSxlLm1pZFg9ZS5hbGxwdHNbbl0sZS5taWRZPWUuYWxscHRzW24rMV0pOihuPWUuYWxscHRzLmxlbmd0aC8yLTMsaT0uNSxlLm1pZFg9bGEoZS5hbGxwdHNbbl0sZS5hbGxwdHNbbisyXSxlLmFsbHB0c1tuKzRdLGkpLGUubWlkWT1sYShlLmFsbHB0c1tuKzFdLGUuYWxscHRzW24rM10sZS5hbGxwdHNbbis1XSxpKSl9ZWxzZSBpZihlLmVkZ2VUeXBlPT09InN0cmFpZ2h0IillLmFsbHB0cz1bZS5zdGFydFgsZS5zdGFydFksZS5lbmRYLGUuZW5kWV0sZS5taWRYPShlLnN0YXJ0WCtlLmVuZFgrZS5hcnJvd1N0YXJ0WCtlLmFycm93RW5kWCkvNCxlLm1pZFk9KGUuc3RhcnRZK2UuZW5kWStlLmFycm93U3RhcnRZK2UuYXJyb3dFbmRZKS80O2Vsc2UgaWYoZS5lZGdlVHlwZT09PSJzZWdtZW50cyIpe2lmKGUuYWxscHRzPVtdLGUuYWxscHRzLnB1c2goZS5zdGFydFgsZS5zdGFydFkpLGUuYWxscHRzLnB1c2guYXBwbHkoZS5hbGxwdHMsZS5zZWdwdHMpLGUuYWxscHRzLnB1c2goZS5lbmRYLGUuZW5kWSksZS5pc1JvdW5kKXtlLnJvdW5kQ29ybmVycz1bXTtmb3IodmFyIGE9MjthKzM8ZS5hbGxwdHMubGVuZ3RoO2ErPTIpe3ZhciBzPWUucmFkaWlbYS8yLTFdLGw9ZS5pc0FyY1JhZGl1c1thLzItMV07ZS5yb3VuZENvcm5lcnMucHVzaChUQih7eDplLmFsbHB0c1thLTJdLHk6ZS5hbGxwdHNbYS0xXX0se3g6ZS5hbGxwdHNbYV0seTplLmFsbHB0c1thKzFdLHJhZGl1czpzfSx7eDplLmFsbHB0c1thKzJdLHk6ZS5hbGxwdHNbYSszXX0scyxsKSl9fWlmKGUuc2VncHRzLmxlbmd0aCU0PT09MCl7dmFyIHU9ZS5zZWdwdHMubGVuZ3RoLzIsaD11LTI7ZS5taWRYPShlLnNlZ3B0c1toXStlLnNlZ3B0c1t1XSkvMixlLm1pZFk9KGUuc2VncHRzW2grMV0rZS5zZWdwdHNbdSsxXSkvMn1lbHNle3ZhciBmPWUuc2VncHRzLmxlbmd0aC8yLTE7aWYoIWUuaXNSb3VuZCllLm1pZFg9ZS5zZWdwdHNbZl0sZS5taWRZPWUuc2VncHRzW2YrMV07ZWxzZXt2YXIgZD17eDplLnNlZ3B0c1tmXSx5OmUuc2VncHRzW2YrMV19LHA9ZS5yb3VuZENvcm5lcnNbZi8yXSxtPVtkLngtcC5jeCxkLnktcC5jeV0sZz1wLnJhZGl1cy9NYXRoLnNxcnQoTWF0aC5wb3cobVswXSwyKStNYXRoLnBvdyhtWzFdLDIpKTttPW0ubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5Kmd9KSxlLm1pZFg9cC5jeCttWzBdLGUubWlkWT1wLmN5K21bMV0sZS5taWRWZWN0b3I9bX19fX07cWEuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmc9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtlLm5vZGVzT3ZlcmxhcHx8eHQoZS5zdGFydFgpJiZ4dChlLnN0YXJ0WSkmJnh0KGUuZW5kWCkmJnh0KGUuZW5kWSk/ZS5sb2dnZWRFcnI9ITE6ZS5sb2dnZWRFcnJ8fChlLmxvZ2dlZEVycj0hMCxvbigiRWRnZSBgIit0LmlkKCkrImAgaGFzIGludmFsaWQgZW5kcG9pbnRzIGFuZCBzbyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRyYXcuICBBZGp1c3QgeW91ciBlZGdlIHN0eWxlIChlLmcuIGNvbnRyb2wgcG9pbnRzKSBhY2NvcmRpbmdseSBvciB1c2UgYW4gYWx0ZXJuYXRpdmUgZWRnZSB0eXBlLiAgVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvdXIgd2hlbiB0aGUgc291cmNlIG5vZGUgYW5kIHRoZSB0YXJnZXQgbm9kZSBvdmVybGFwLiIpKX07cWEuZmluZEVkZ2VDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoISghdHx8dC5sZW5ndGg9PT0wKSl7Zm9yKHZhciByPXRoaXMsbj1yLmN5LGk9bi5oYXNDb21wb3VuZE5vZGVzKCksYT17bWFwOm5ldyBKYyxnZXQ6byhmdW5jdGlvbihMKXt2YXIgUz10aGlzLm1hcC5nZXQoTFswXSk7cmV0dXJuIFMhPW51bGw/Uy5nZXQoTFsxXSk6bnVsbH0sImdldCIpLHNldDpvKGZ1bmN0aW9uKEwsUyl7dmFyIEE9dGhpcy5tYXAuZ2V0KExbMF0pO0E9PW51bGwmJihBPW5ldyBKYyx0aGlzLm1hcC5zZXQoTFswXSxBKSksQS5zZXQoTFsxXSxTKX0sInNldCIpfSxzPVtdLGw9W10sdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdLGY9aC5fcHJpdmF0ZSxkPWgucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEoaC5yZW1vdmVkKCl8fCFoLnRha2VzVXBTcGFjZSgpKSl7aWYoZD09PSJoYXlzdGFjayIpe2wucHVzaChoKTtjb250aW51ZX12YXIgcD1kPT09InVuYnVuZGxlZC1iZXppZXIifHxkLmVuZHNXaXRoKCJzZWdtZW50cyIpfHxkPT09InN0cmFpZ2h0Inx8ZD09PSJzdHJhaWdodC10cmlhbmdsZSJ8fGQuZW5kc1dpdGgoInRheGkiKSxtPWQ9PT0idW5idW5kbGVkLWJlemllciJ8fGQ9PT0iYmV6aWVyIixnPWYuc291cmNlLHk9Zi50YXJnZXQsdj1nLnBvb2xJbmRleCgpLHg9eS5wb29sSW5kZXgoKSxiPVt2LHhdLnNvcnQoKSx3PWEuZ2V0KGIpO3c9PW51bGwmJih3PXtlbGVzOltdfSxhLnNldChiLHcpLHMucHVzaChiKSksdy5lbGVzLnB1c2goaCkscCYmKHcuaGFzVW5idW5kbGVkPSEwKSxtJiYody5oYXNCZXppZXI9ITApfX1mb3IodmFyIF89byhmdW5jdGlvbihMKXt2YXIgUz1zW0xdLEE9YS5nZXQoUyksST12b2lkIDA7aWYoIUEuaGFzVW5idW5kbGVkKXt2YXIgRD1BLmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihoZSl7cmV0dXJuIGhlLmlzQnVuZGxlZEJlemllcigpfSk7b0IoQS5lbGVzKSxELmZvckVhY2goZnVuY3Rpb24oaGUpe3JldHVybiBBLmVsZXMucHVzaChoZSl9KSxBLmVsZXMuc29ydChmdW5jdGlvbihoZSxnZSl7cmV0dXJuIGhlLnBvb2xJbmRleCgpLWdlLnBvb2xJbmRleCgpfSl9dmFyIGs9QS5lbGVzWzBdLFI9ay5zb3VyY2UoKSxDPWsudGFyZ2V0KCk7aWYoUi5wb29sSW5kZXgoKT5DLnBvb2xJbmRleCgpKXt2YXIgTz1SO1I9QyxDPU99dmFyIE49QS5zcmNQb3M9Ui5wb3NpdGlvbigpLFA9QS50Z3RQb3M9Qy5wb3NpdGlvbigpLEY9QS5zcmNXPVIub3V0ZXJXaWR0aCgpLEI9QS5zcmNIPVIub3V0ZXJIZWlnaHQoKSxHPUEudGd0Vz1DLm91dGVyV2lkdGgoKSx6PUEudGd0SD1DLm91dGVySGVpZ2h0KCksVz1BLnNyY1NoYXBlPXIubm9kZVNoYXBlc1tlLmdldE5vZGVTaGFwZShSKV0sWj1BLnRndFNoYXBlPXIubm9kZVNoYXBlc1tlLmdldE5vZGVTaGFwZShDKV0saj1BLnNyY0Nvcm5lclJhZGl1cz1SLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpSLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsb2U9QS50Z3RDb3JuZXJSYWRpdXM9Qy5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6Qy5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLEs9QS50Z3RScz1DLl9wcml2YXRlLnJzY3JhdGNoLGVlPUEuc3JjUnM9Ui5fcHJpdmF0ZS5yc2NyYXRjaDtBLmRpckNvdW50cz17bm9ydGg6MCx3ZXN0OjAsc291dGg6MCxlYXN0OjAsbm9ydGh3ZXN0OjAsc291dGh3ZXN0OjAsbm9ydGhlYXN0OjAsc291dGhlYXN0OjB9O2Zvcih2YXIgSj0wO0o8QS5lbGVzLmxlbmd0aDtKKyspe3ZhciBIPUEuZWxlc1tKXSxxPUhbMF0uX3ByaXZhdGUucnNjcmF0Y2gsUT1ILnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxhZT1RPT09InVuYnVuZGxlZC1iZXppZXIifHxRLmVuZHNXaXRoKCJzZWdtZW50cyIpfHxRLmVuZHNXaXRoKCJ0YXhpIiksdWU9IVIuc2FtZShILnNvdXJjZSgpKTtpZighQS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZSIT09QyYmKEEuaGFzQmV6aWVyfHxBLmhhc1VuYnVuZGxlZCkpe0EuY2FsY3VsYXRlZEludGVyc2VjdGlvbj0hMDt2YXIgY2U9Vy5pbnRlcnNlY3RMaW5lKE4ueCxOLnksRixCLFAueCxQLnksMCxqLGVlKSx0ZT1BLnNyY0ludG49Y2UsTmU9Wi5pbnRlcnNlY3RMaW5lKFAueCxQLnksRyx6LE4ueCxOLnksMCxvZSxLKSxzZT1BLnRndEludG49TmUsa2U9QS5pbnRlcnNlY3Rpb25QdHM9e3gxOmNlWzBdLHgyOk5lWzBdLHkxOmNlWzFdLHkyOk5lWzFdfSxSZT1BLnBvc1B0cz17eDE6Ti54LHgyOlAueCx5MTpOLnkseTI6UC55fSxDZT1OZVsxXS1jZVsxXSxQZT1OZVswXS1jZVswXSxJZT1NYXRoLnNxcnQoUGUqUGUrQ2UqQ2UpLCRlPUEudmVjdG9yPXt4OlBlLHk6Q2V9LHllPUEudmVjdG9yTm9ybT17eDokZS54L0llLHk6JGUueS9JZX0sWD17eDoteWUueSx5OnllLnh9O0Eubm9kZXNPdmVybGFwPSF4dChJZSl8fFouY2hlY2tQb2ludChjZVswXSxjZVsxXSwwLEcseixQLngsUC55LG9lLEspfHxXLmNoZWNrUG9pbnQoTmVbMF0sTmVbMV0sMCxGLEIsTi54LE4ueSxqLGVlKSxBLnZlY3Rvck5vcm1JbnZlcnNlPVgsST17bm9kZXNPdmVybGFwOkEubm9kZXNPdmVybGFwLGRpckNvdW50czpBLmRpckNvdW50cyxjYWxjdWxhdGVkSW50ZXJzZWN0aW9uOiEwLGhhc0JlemllcjpBLmhhc0JlemllcixoYXNVbmJ1bmRsZWQ6QS5oYXNVbmJ1bmRsZWQsZWxlczpBLmVsZXMsc3JjUG9zOlAsdGd0UG9zOk4sc3JjVzpHLHNyY0g6eix0Z3RXOkYsdGd0SDpCLHNyY0ludG46c2UsdGd0SW50bjp0ZSxzcmNTaGFwZTpaLHRndFNoYXBlOlcscG9zUHRzOnt4MTpSZS54Mix5MTpSZS55Mix4MjpSZS54MSx5MjpSZS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTprZS54Mix5MTprZS55Mix4MjprZS54MSx5MjprZS55MX0sdmVjdG9yOnt4Oi0kZS54LHk6LSRlLnl9LHZlY3Rvck5vcm06e3g6LXllLngseToteWUueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LVgueCx5Oi1YLnl9fX12YXIgZmU9dWU/STpBO3Eubm9kZXNPdmVybGFwPWZlLm5vZGVzT3ZlcmxhcCxxLnNyY0ludG49ZmUuc3JjSW50bixxLnRndEludG49ZmUudGd0SW50bixxLmlzUm91bmQ9US5zdGFydHNXaXRoKCJyb3VuZCIpLGkmJihSLmlzUGFyZW50KCl8fFIuaXNDaGlsZCgpfHxDLmlzUGFyZW50KCl8fEMuaXNDaGlsZCgpKSYmKFIucGFyZW50cygpLmFueVNhbWUoQyl8fEMucGFyZW50cygpLmFueVNhbWUoUil8fFIuc2FtZShDKSYmUi5pc1BhcmVudCgpKT9lLmZpbmRDb21wb3VuZExvb3BQb2ludHMoSCxmZSxKLGFlKTpSPT09Qz9lLmZpbmRMb29wUG9pbnRzKEgsZmUsSixhZSk6US5lbmRzV2l0aCgic2VnbWVudHMiKT9lLmZpbmRTZWdtZW50c1BvaW50cyhILGZlKTpRLmVuZHNXaXRoKCJ0YXhpIik/ZS5maW5kVGF4aVBvaW50cyhILGZlKTpRPT09InN0cmFpZ2h0Inx8IWFlJiZBLmVsZXMubGVuZ3RoJTI9PT0xJiZKPT09TWF0aC5mbG9vcihBLmVsZXMubGVuZ3RoLzIpP2UuZmluZFN0cmFpZ2h0RWRnZVBvaW50cyhIKTplLmZpbmRCZXppZXJQb2ludHMoSCxmZSxKLGFlLHVlKSxlLmZpbmRFbmRwb2ludHMoSCksZS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKEgsZmUpLGUuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcoSCksZS5zdG9yZUFsbHB0cyhIKSxlLnN0b3JlRWRnZVByb2plY3Rpb25zKEgpLGUuY2FsY3VsYXRlQXJyb3dBbmdsZXMoSCksZS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKEgpLGUuY2FsY3VsYXRlTGFiZWxBbmdsZXMoSCl9fSwiX2xvb3AiKSxUPTA7VDxzLmxlbmd0aDtUKyspXyhUKTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cyhsKX19O28oYTFlLCJnZXRQdHMiKTtxYS5nZXRTZWdtZW50UG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2gscj1lLmVkZ2VUeXBlO2lmKHI9PT0ic2VnbWVudHMiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxhMWUoZS5zZWdwdHMpfTtxYS5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2gscj1lLmVkZ2VUeXBlO2lmKHI9PT0iYmV6aWVyInx8cj09PSJtdWx0aWJlemllciJ8fHI9PT0ic2VsZiJ8fHI9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxhMWUoZS5jdHJscHRzKX07cWEuZ2V0RWRnZU1pZHBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7cmV0dXJuIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpLHt4OmUubWlkWCx5OmUubWlkWX19O3hiPXt9O3hiLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10LnBvc2l0aW9uKCksaT10Lm91dGVyV2lkdGgoKSxhPXQub3V0ZXJIZWlnaHQoKSxzPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZS52YWx1ZS5sZW5ndGg9PT0yKXt2YXIgbD1bZS5wZlZhbHVlWzBdLGUucGZWYWx1ZVsxXV07cmV0dXJuIGUudW5pdHNbMF09PT0iJSImJihsWzBdPWxbMF0qaSksZS51bml0c1sxXT09PSIlIiYmKGxbMV09bFsxXSphKSxsWzBdKz1uLngsbFsxXSs9bi55LGx9ZWxzZXt2YXIgdT1lLnBmVmFsdWVbMF07dT0tTWF0aC5QSS8yK3U7dmFyIGg9MipNYXRoLm1heChpLGEpLGY9W24ueCtNYXRoLmNvcyh1KSpoLG4ueStNYXRoLnNpbih1KSpoXTtyZXR1cm4gci5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKHQpXS5pbnRlcnNlY3RMaW5lKG4ueCxuLnksaSxhLGZbMF0sZlsxXSwwLHQucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOnQucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxzKX19O3hiLmZpbmRFbmRwb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyLG49dC5zb3VyY2UoKVswXSxpPXQudGFyZ2V0KClbMF0sYT1uLnBvc2l0aW9uKCkscz1pLnBvc2l0aW9uKCksbD10LnBzdHlsZSgidGFyZ2V0LWFycm93LXNoYXBlIikudmFsdWUsdT10LnBzdHlsZSgic291cmNlLWFycm93LXNoYXBlIikudmFsdWUsaD10LnBzdHlsZSgidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIpLnBmVmFsdWUsZj10LnBzdHlsZSgic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSIpLnBmVmFsdWUsZD1uLl9wcml2YXRlLnJzY3JhdGNoLHA9aS5fcHJpdmF0ZS5yc2NyYXRjaCxtPXQucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGc9dC5fcHJpdmF0ZS5yc2NyYXRjaCx5PWcuZWRnZVR5cGUsdj1tPT09InRheGkiLHg9eT09PSJzZWxmInx8eT09PSJjb21wb3VuZCIsYj15PT09ImJlemllciJ8fHk9PT0ibXVsdGliZXppZXIifHx4LHc9eSE9PSJiZXppZXIiLF89eT09PSJzdHJhaWdodCJ8fHk9PT0ic2VnbWVudHMiLFQ9eT09PSJzZWdtZW50cyIsRT1ifHx3fHxfLEw9eHx8dixTPXQucHN0eWxlKCJzb3VyY2UtZW5kcG9pbnQiKSxBPUw/Im91dHNpZGUtdG8tbm9kZSI6Uy52YWx1ZSxJPW4ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOm4ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxEPXQucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxrPUw/Im91dHNpZGUtdG8tbm9kZSI6RC52YWx1ZSxSPWkucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOmkucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZTtnLnNyY01hbkVuZHB0PVMsZy50Z3RNYW5FbmRwdD1EO3ZhciBDLE8sTixQO2lmKGIpe3ZhciBGPVtnLmN0cmxwdHNbMF0sZy5jdHJscHRzWzFdXSxCPXc/W2cuY3RybHB0c1tnLmN0cmxwdHMubGVuZ3RoLTJdLGcuY3RybHB0c1tnLmN0cmxwdHMubGVuZ3RoLTFdXTpGO0M9QixPPUZ9ZWxzZSBpZihfKXt2YXIgRz1UP2cuc2VncHRzLnNsaWNlKDAsMik6W3MueCxzLnldLHo9VD9nLnNlZ3B0cy5zbGljZShnLnNlZ3B0cy5sZW5ndGgtMik6W2EueCxhLnldO0M9eixPPUd9aWYoaz09PSJpbnNpZGUtdG8tbm9kZSIpcj1bcy54LHMueV07ZWxzZSBpZihELnVuaXRzKXI9dGhpcy5tYW51YWxFbmRwdFRvUHgoaSxEKTtlbHNlIGlmKGs9PT0ib3V0c2lkZS10by1saW5lIilyPWcudGd0SW50bjtlbHNlIGlmKGs9PT0ib3V0c2lkZS10by1ub2RlInx8az09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP049Qzooaz09PSJvdXRzaWRlLXRvLWxpbmUifHxrPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpJiYoTj1bYS54LGEueV0pLHI9ZS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKGkpXS5pbnRlcnNlY3RMaW5lKHMueCxzLnksaS5vdXRlcldpZHRoKCksaS5vdXRlckhlaWdodCgpLE5bMF0sTlsxXSwwLFIscCksaz09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwifHxrPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBXPWkuX3ByaXZhdGUucnNjcmF0Y2gsWj1XLmxhYmVsV2lkdGgsaj1XLmxhYmVsSGVpZ2h0LG9lPVcubGFiZWxYLEs9Vy5sYWJlbFksZWU9Wi8yLEo9ai8yLEg9aS5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7SD09PSJ0b3AiP0stPUo6SD09PSJib3R0b20iJiYoSys9Sik7dmFyIHE9aS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7cT09PSJsZWZ0Ij9vZS09ZWU6cT09PSJyaWdodCImJihvZSs9ZWUpO3ZhciBRPW9iKE5bMF0sTlsxXSxbb2UtZWUsSy1KLG9lK2VlLEstSixvZStlZSxLK0osb2UtZWUsSytKXSxzLngscy55KTtpZihRLmxlbmd0aD4wKXt2YXIgYWU9YSx1ZT1VMChhZSxtMShyKSksY2U9VTAoYWUsbTEoUSkpLHRlPXVlO2lmKGNlPHVlJiYocj1RLHRlPWNlKSxRLmxlbmd0aD4yKXt2YXIgTmU9VTAoYWUse3g6UVsyXSx5OlFbM119KTtOZTx0ZSYmKHI9W1FbMl0sUVszXV0pfX19dmFyIHNlPW82KHIsQyxlLmFycm93U2hhcGVzW2xdLnNwYWNpbmcodCkraCksa2U9bzYocixDLGUuYXJyb3dTaGFwZXNbbF0uZ2FwKHQpK2gpO2lmKGcuZW5kWD1rZVswXSxnLmVuZFk9a2VbMV0sZy5hcnJvd0VuZFg9c2VbMF0sZy5hcnJvd0VuZFk9c2VbMV0sQT09PSJpbnNpZGUtdG8tbm9kZSIpcj1bYS54LGEueV07ZWxzZSBpZihTLnVuaXRzKXI9dGhpcy5tYW51YWxFbmRwdFRvUHgobixTKTtlbHNlIGlmKEE9PT0ib3V0c2lkZS10by1saW5lIilyPWcuc3JjSW50bjtlbHNlIGlmKEE9PT0ib3V0c2lkZS10by1ub2RlInx8QT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP1A9TzooQT09PSJvdXRzaWRlLXRvLWxpbmUifHxBPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpJiYoUD1bcy54LHMueV0pLHI9ZS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKG4pXS5pbnRlcnNlY3RMaW5lKGEueCxhLnksbi5vdXRlcldpZHRoKCksbi5vdXRlckhlaWdodCgpLFBbMF0sUFsxXSwwLEksZCksQT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwifHxBPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBSZT1uLl9wcml2YXRlLnJzY3JhdGNoLENlPVJlLmxhYmVsV2lkdGgsUGU9UmUubGFiZWxIZWlnaHQsSWU9UmUubGFiZWxYLCRlPVJlLmxhYmVsWSx5ZT1DZS8yLFg9UGUvMixmZT1uLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtmZT09PSJ0b3AiPyRlLT1YOmZlPT09ImJvdHRvbSImJigkZSs9WCk7dmFyIGhlPW4ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO2hlPT09ImxlZnQiP0llLT15ZTpoZT09PSJyaWdodCImJihJZSs9eWUpO3ZhciBnZT1vYihQWzBdLFBbMV0sW0llLXllLCRlLVgsSWUreWUsJGUtWCxJZSt5ZSwkZStYLEllLXllLCRlK1hdLGEueCxhLnkpO2lmKGdlLmxlbmd0aD4wKXt2YXIgbmU9cyx2ZT1VMChuZSxtMShyKSksVT1VMChuZSxtMShnZSkpLFRlPXZlO2lmKFU8dmUmJihyPVtnZVswXSxnZVsxXV0sVGU9VSksZ2UubGVuZ3RoPjIpe3ZhciBpZT1VMChuZSx7eDpnZVsyXSx5OmdlWzNdfSk7aWU8VGUmJihyPVtnZVsyXSxnZVszXV0pfX19dmFyIEVlPW82KHIsTyxlLmFycm93U2hhcGVzW3VdLnNwYWNpbmcodCkrZiksQWU9bzYocixPLGUuYXJyb3dTaGFwZXNbdV0uZ2FwKHQpK2YpO2cuc3RhcnRYPUFlWzBdLGcuc3RhcnRZPUFlWzFdLGcuYXJyb3dTdGFydFg9RWVbMF0sZy5hcnJvd1N0YXJ0WT1FZVsxXSxFJiYoIXh0KGcuc3RhcnRYKXx8IXh0KGcuc3RhcnRZKXx8IXh0KGcuZW5kWCl8fCF4dChnLmVuZFkpP2cuYmFkTGluZT0hMDpnLmJhZExpbmU9ITEpfTt4Yi5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzBdLHk6ZS5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93U3RhcnRYLHk6ZS5hcnJvd1N0YXJ0WX19fTt4Yi5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzJdLHk6ZS5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93RW5kWCx5OmUuYXJyb3dFbmRZfX19O2tCPXt9O28odGV0LCJwdXNoQmV6aWVyUHRzIik7a0Iuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZSxyPWUucnNjcmF0Y2gsbj1yLmVkZ2VUeXBlO2lmKGUucnN0eWxlLmJlemllclB0cz1udWxsLGUucnN0eWxlLmxpbmVQdHM9bnVsbCxlLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLG49PT0ibXVsdGliZXppZXIifHxuPT09ImJlemllciJ8fG49PT0ic2VsZiJ8fG49PT0iY29tcG91bmQiKXtlLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBpPTA7aSs1PHIuYWxscHRzLmxlbmd0aDtpKz00KXRldCh0aGlzLHQsci5hbGxwdHMuc2xpY2UoaSxpKzYpKX1lbHNlIGlmKG49PT0ic2VnbWVudHMiKWZvcih2YXIgYT1lLnJzdHlsZS5saW5lUHRzPVtdLGk9MDtpKzE8ci5hbGxwdHMubGVuZ3RoO2krPTIpYS5wdXNoKHt4OnIuYWxscHRzW2ldLHk6ci5hbGxwdHNbaSsxXX0pO2Vsc2UgaWYobj09PSJoYXlzdGFjayIpe3ZhciBzPXIuaGF5c3RhY2tQdHM7ZS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4OnNbMF0seTpzWzFdfSx7eDpzWzJdLHk6c1szXX1dfWUucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofTtrQi5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh0KX07dHU9e307dHUucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJsYWJlbCIpLnN0clZhbHVlO2lmKCFJZihlKSl7dmFyIHIsbixpPXQuX3ByaXZhdGUsYT10LndpZHRoKCkscz10LmhlaWdodCgpLGw9dC5wYWRkaW5nKCksdT10LnBvc2l0aW9uKCksaD10LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxmPXQucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLGQ9aS5yc2NyYXRjaCxwPWkucnN0eWxlO3N3aXRjaChoKXtjYXNlImxlZnQiOnI9dS54LWEvMi1sO2JyZWFrO2Nhc2UicmlnaHQiOnI9dS54K2EvMitsO2JyZWFrO2RlZmF1bHQ6cj11Lnh9c3dpdGNoKGYpe2Nhc2UidG9wIjpuPXUueS1zLzItbDticmVhaztjYXNlImJvdHRvbSI6bj11Lnkrcy8yK2w7YnJlYWs7ZGVmYXVsdDpuPXUueX1kLmxhYmVsWD1yLGQubGFiZWxZPW4scC5sYWJlbFg9cixwLmxhYmVsWT1uLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXModCksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O3MxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49TWF0aC5hdGFuKHIvZSk7cmV0dXJuIGU9PT0wJiZuPDAmJihuPW4qLTEpLG59LCJsaW5lQW5nbGVGcm9tRGVsdGEiKSxvMWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBzMWUobixpKX0sImxpbmVBbmdsZSIpLHJldD1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXNiKDAsaS0uMDAxLDEpLHM9c2IoMCxpKy4wMDEsMSksbD15MShlLHIsbixhKSx1PXkxKGUscixuLHMpO3JldHVybiBvMWUobCx1KX0sImJlemllckFuZ2xlIik7dHUucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX3ByaXZhdGUsbj1yLnJzY3JhdGNoLGk9dGhpcyxhPXttaWQ6dC5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnQucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6dC5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihhLm1pZHx8YS5zb3VyY2V8fGEudGFyZ2V0KXtlPXt4Om4ubWlkWCx5Om4ubWlkWX07dmFyIHM9byhmdW5jdGlvbihkLHAsbSl7RGYoci5yc2NyYXRjaCxkLHAsbSksRGYoci5yc3R5bGUsZCxwLG0pfSwic2V0UnMiKTtzKCJsYWJlbFgiLG51bGwsZS54KSxzKCJsYWJlbFkiLG51bGwsZS55KTt2YXIgbD1zMWUobi5taWREaXNwWCxuLm1pZERpc3BZKTtzKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCxsKTt2YXIgdT1vKGZ1bmN0aW9uIGYoKXtpZihmLmNhY2hlKXJldHVybiBmLmNhY2hlO2Zvcih2YXIgZD1bXSxwPTA7cCs1PG4uYWxscHRzLmxlbmd0aDtwKz00KXt2YXIgbT17eDpuLmFsbHB0c1twXSx5Om4uYWxscHRzW3ArMV19LGc9e3g6bi5hbGxwdHNbcCsyXSx5Om4uYWxscHRzW3ArM119LHk9e3g6bi5hbGxwdHNbcCs0XSx5Om4uYWxscHRzW3ArNV19O2QucHVzaCh7cDA6bSxwMTpnLHAyOnksc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgdj1yLnJzdHlsZS5iZXppZXJQdHMseD1pLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBiKEwsUyxBLEksRCl7dmFyIGs9SzAoUyxBKSxSPUwuc2VnbWVudHNbTC5zZWdtZW50cy5sZW5ndGgtMV0sQz17cDA6UyxwMTpBLHQwOkksdDE6RCxzdGFydERpc3Q6Uj9SLnN0YXJ0RGlzdCtSLmxlbmd0aDowLGxlbmd0aDprfTtMLnNlZ21lbnRzLnB1c2goQyksTC5sZW5ndGgrPWt9byhiLCJhZGRTZWdtZW50Iik7Zm9yKHZhciB3PTA7dzxkLmxlbmd0aDt3Kyspe3ZhciBfPWRbd10sVD1kW3ctMV07VCYmKF8uc3RhcnREaXN0PVQuc3RhcnREaXN0K1QubGVuZ3RoKSxiKF8sXy5wMCx2W3cqeF0sMCxpLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIEU9MDtFPHgtMTtFKyspYihfLHZbdyp4K0VdLHZbdyp4K0UrMV0saS5iZXppZXJQcm9qUGN0c1tFXSxpLmJlemllclByb2pQY3RzW0UrMV0pO2IoXyx2W3cqeCt4LTFdLF8ucDIsaS5iZXppZXJQcm9qUGN0c1t4LTFdLDEpfXJldHVybiBmLmNhY2hlPWR9LCJjcmVhdGVDb250cm9sUG9pbnRJbmZvIiksaD1vKGZ1bmN0aW9uKGQpe3ZhciBwLG09ZD09PSJzb3VyY2UiO2lmKGFbZF0pe3ZhciBnPXQucHN0eWxlKGQrIi10ZXh0LW9mZnNldCIpLnBmVmFsdWU7c3dpdGNoKG4uZWRnZVR5cGUpe2Nhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJiZXppZXIiOmNhc2UibXVsdGliZXppZXIiOntmb3IodmFyIHk9dSgpLHYseD0wLGI9MCx3PTA7dzx5Lmxlbmd0aDt3Kyspe2Zvcih2YXIgXz15W20/dzp5Lmxlbmd0aC0xLXddLFQ9MDtUPF8uc2VnbWVudHMubGVuZ3RoO1QrKyl7dmFyIEU9Xy5zZWdtZW50c1ttP1Q6Xy5zZWdtZW50cy5sZW5ndGgtMS1UXSxMPXc9PT15Lmxlbmd0aC0xJiZUPT09Xy5zZWdtZW50cy5sZW5ndGgtMTtpZih4PWIsYis9RS5sZW5ndGgsYj49Z3x8TCl7dj17Y3A6XyxzZWdtZW50OkV9O2JyZWFrfX1pZih2KWJyZWFrfXZhciBTPXYuY3AsQT12LnNlZ21lbnQsST0oZy14KS9BLmxlbmd0aCxEPUEudDEtQS50MCxrPW0/QS50MCtEKkk6QS50MS1EKkk7az1zYigwLGssMSksZT15MShTLnAwLFMucDEsUy5wMixrKSxwPXJldChTLnAwLFMucDEsUy5wMixrKTticmVha31jYXNlInN0cmFpZ2h0IjpjYXNlInNlZ21lbnRzIjpjYXNlImhheXN0YWNrIjp7Zm9yKHZhciBSPTAsQyxPLE4sUCxGPW4uYWxscHRzLmxlbmd0aCxCPTA7QiszPEYmJihtPyhOPXt4Om4uYWxscHRzW0JdLHk6bi5hbGxwdHNbQisxXX0sUD17eDpuLmFsbHB0c1tCKzJdLHk6bi5hbGxwdHNbQiszXX0pOihOPXt4Om4uYWxscHRzW0YtMi1CXSx5Om4uYWxscHRzW0YtMS1CXX0sUD17eDpuLmFsbHB0c1tGLTQtQl0seTpuLmFsbHB0c1tGLTMtQl19KSxDPUswKE4sUCksTz1SLFIrPUMsIShSPj1nKSk7Qis9Mik7dmFyIEc9Zy1PLHo9Ry9DO3o9c2IoMCx6LDEpLGU9b2plKE4sUCx6KSxwPW8xZShOLFApO2JyZWFrfX1zKCJsYWJlbFgiLGQsZS54KSxzKCJsYWJlbFkiLGQsZS55KSxzKCJsYWJlbEF1dG9BbmdsZSIsZCxwKX19LCJjYWxjdWxhdGVFbmRQcm9qZWN0aW9uIik7aCgic291cmNlIiksaCgidGFyZ2V0IiksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O3R1LmFwcGx5TGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0KSx0LmlzRWRnZSgpJiYodGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKHQsInNvdXJjZSIpLHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0LCJ0YXJnZXQiKSl9O3R1LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49dGhpcy5nZXRMYWJlbFRleHQodCxlKSxpPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQsbiksYT10LnBzdHlsZSgibGluZS1oZWlnaHQiKS5wZlZhbHVlLHM9dC5wc3R5bGUoInRleHQtd3JhcCIpLnN0clZhbHVlLGw9UWwoci5yc2NyYXRjaCwibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGUpfHxbXSx1PXMhPT0id3JhcCI/MTpNYXRoLm1heChsLmxlbmd0aCwxKSxoPWkuaGVpZ2h0L3UsZj1oKmEsZD1pLndpZHRoLHA9aS5oZWlnaHQrKHUtMSkqKGEtMSkqaDtEZihyLnJzdHlsZSwibGFiZWxXaWR0aCIsZSxkKSxEZihyLnJzY3JhdGNoLCJsYWJlbFdpZHRoIixlLGQpLERmKHIucnN0eWxlLCJsYWJlbEhlaWdodCIsZSxwKSxEZihyLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZSxwKSxEZihyLnJzY3JhdGNoLCJsYWJlbExpbmVIZWlnaHQiLGUsZil9O3R1LmdldExhYmVsVGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj1lP2UrIi0iOiIiLGk9dC5wc3R5bGUobisibGFiZWwiKS5zdHJWYWx1ZSxhPXQucHN0eWxlKCJ0ZXh0LXRyYW5zZm9ybSIpLnZhbHVlLHM9byhmdW5jdGlvbihaLGope3JldHVybiBqPyhEZihyLnJzY3JhdGNoLFosZSxqKSxqKTpRbChyLnJzY3JhdGNoLFosZSl9LCJyc2NyYXRjaCIpO2lmKCFpKXJldHVybiIiO2E9PSJub25lInx8KGE9PSJ1cHBlcmNhc2UiP2k9aS50b1VwcGVyQ2FzZSgpOmE9PSJsb3dlcmNhc2UiJiYoaT1pLnRvTG93ZXJDYXNlKCkpKTt2YXIgbD10LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYobD09PSJ3cmFwIil7dmFyIHU9cygibGFiZWxLZXkiKTtpZih1IT1udWxsJiZzKCJsYWJlbFdyYXBLZXkiKT09PXUpcmV0dXJuIHMoImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIGg9Ilx1MjAwQiIsZj1pLnNwbGl0KGAKYCksZD10LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLHA9dC5wc3R5bGUoInRleHQtb3ZlcmZsb3ctd3JhcCIpLnZhbHVlLG09cD09PSJhbnl3aGVyZSIsZz1bXSx5PS9bXHNcdTIwMGJdK3wkL2csdj0wO3Y8Zi5sZW5ndGg7disrKXt2YXIgeD1mW3ZdLGI9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCx4KSx3PWIud2lkdGg7aWYobSl7dmFyIF89eC5zcGxpdCgiIikuam9pbihoKTt4PV99aWYodz5kKXt2YXIgVD14Lm1hdGNoQWxsKHkpLEU9IiIsTD0wLFM9VW1lKFQpLEE7dHJ5e2ZvcihTLnMoKTshKEE9Uy5uKCkpLmRvbmU7KXt2YXIgST1BLnZhbHVlLEQ9SVswXSxrPXguc3Vic3RyaW5nKEwsSS5pbmRleCk7TD1JLmluZGV4K0QubGVuZ3RoO3ZhciBSPUUubGVuZ3RoPT09MD9rOkUraytELEM9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxSKSxPPUMud2lkdGg7Tzw9ZD9FKz1rK0Q6KEUmJmcucHVzaChFKSxFPWsrRCl9fWNhdGNoKFcpe1MuZShXKX1maW5hbGx5e1MuZigpfUUubWF0Y2goL15bXHNcdTIwMGJdKyQvKXx8Zy5wdXNoKEUpfWVsc2UgZy5wdXNoKHgpfXMoImxhYmVsV3JhcENhY2hlZExpbmVzIixnKSxpPXMoImxhYmVsV3JhcENhY2hlZFRleHQiLGcuam9pbihgCmApKSxzKCJsYWJlbFdyYXBLZXkiLHUpfWVsc2UgaWYobD09PSJlbGxpcHNpcyIpe3ZhciBOPXQucHN0eWxlKCJ0ZXh0LW1heC13aWR0aCIpLnBmVmFsdWUsUD0iIixGPSJcdTIwMjYiLEI9ITE7aWYodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxpKS53aWR0aDxOKXJldHVybiBpO2Zvcih2YXIgRz0wO0c8aS5sZW5ndGg7RysrKXt2YXIgej10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LFAraVtHXStGKS53aWR0aDtpZih6Pk4pYnJlYWs7UCs9aVtHXSxHPT09aS5sZW5ndGgtMSYmKEI9ITApfXJldHVybiBCfHwoUCs9RiksUH1yZXR1cm4gaX07dHUuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJ0ZXh0LWp1c3RpZmljYXRpb24iKS5zdHJWYWx1ZSxyPXQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnN0clZhbHVlO2lmKGU9PT0iYXV0byIpaWYodC5pc05vZGUoKSlzd2l0Y2gocil7Y2FzZSJsZWZ0IjpyZXR1cm4icmlnaHQiO2Nhc2UicmlnaHQiOnJldHVybiJsZWZ0IjtkZWZhdWx0OnJldHVybiJjZW50ZXIifWVsc2UgcmV0dXJuImNlbnRlciI7ZWxzZSByZXR1cm4gZX07dHUuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3kud2luZG93KCksaT1uLmRvY3VtZW50LGE9ajAoZSx0Ll9wcml2YXRlLmxhYmVsRGltc0tleSkscz1yLmxhYmVsRGltQ2FjaGV8fChyLmxhYmVsRGltQ2FjaGU9W10pLGw9c1thXTtpZihsIT1udWxsKXJldHVybiBsO3ZhciB1PTAsaD10LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLGY9dC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsZD10LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxwPXQucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLG09dGhpcy5sYWJlbENhbGNDYW52YXMsZz10aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7aWYoIW0pe209dGhpcy5sYWJlbENhbGNDYW52YXM9aS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxnPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1tLmdldENvbnRleHQoIjJkIik7dmFyIHk9bS5zdHlsZTt5LnBvc2l0aW9uPSJhYnNvbHV0ZSIseS5sZWZ0PSItOTk5OXB4Iix5LnRvcD0iLTk5OTlweCIseS56SW5kZXg9Ii0xIix5LnZpc2liaWxpdHk9ImhpZGRlbiIseS5wb2ludGVyRXZlbnRzPSJub25lIn1nLmZvbnQ9IiIuY29uY2F0KGgsIiAiKS5jb25jYXQocCwiICIpLmNvbmNhdChmLCJweCAiKS5jb25jYXQoZCk7Zm9yKHZhciB2PTAseD0wLGI9ZS5zcGxpdChgCmApLHc9MDt3PGIubGVuZ3RoO3crKyl7dmFyIF89Ylt3XSxUPWcubWVhc3VyZVRleHQoXyksRT1NYXRoLmNlaWwoVC53aWR0aCksTD1mO3Y9TWF0aC5tYXgoRSx2KSx4Kz1MfXJldHVybiB2Kz11LHgrPXUsc1thXT17d2lkdGg6dixoZWlnaHQ6eH19O3R1LmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ci5yc2NyYXRjaCxpPXQuaXNFZGdlKCksYT1lP2UrIi0iOiIiLHM9dC5wc3R5bGUoYSsidGV4dC1yb3RhdGlvbiIpLGw9cy5zdHJWYWx1ZTtyZXR1cm4gbD09PSJub25lIj8wOmkmJmw9PT0iYXV0b3JvdGF0ZSI/bi5sYWJlbEF1dG9BbmdsZTpsPT09ImF1dG9yb3RhdGUiPzA6cy5wZlZhbHVlfTt0dS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5pc0VkZ2UoKSxuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoO2kubGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCksciYmKGkuc291cmNlTGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCwic291cmNlIiksaS50YXJnZXRMYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0LCJ0YXJnZXQiKSl9O2wxZT17fSxEbWU9MjgsTm1lPSExO2wxZS5nZXROb2RlU2hhcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHI9PT0iY3V0cmVjdGFuZ2xlIiYmKHQud2lkdGgoKTxEbWV8fHQuaGVpZ2h0KCk8RG1lKSlyZXR1cm4gTm1lfHwob24oIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxObWU9ITApLCJyZWN0YW5nbGUiO2lmKHQuaXNQYXJlbnQoKSlyZXR1cm4gcj09PSJyZWN0YW5nbGUifHxyPT09InJvdW5kcmVjdGFuZ2xlInx8cj09PSJyb3VuZC1yZWN0YW5nbGUifHxyPT09ImN1dHJlY3RhbmdsZSJ8fHI9PT0iY3V0LXJlY3RhbmdsZSJ8fHI9PT0iYmFycmVsIj9yOiJyZWN0YW5nbGUiO2lmKHI9PT0icG9seWdvbiIpe3ZhciBuPXQucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnZhbHVlO3JldHVybiBlLm5vZGVTaGFwZXMubWFrZVBvbHlnb24obikubmFtZX1yZXR1cm4gcn07SjY9e307SjYucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3ksZT10LmNvbGxlY3Rpb24oKSxyPXRoaXMsbj1vKGZ1bmN0aW9uKHMpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtpZihlLm1lcmdlKHMpLGwpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5yc3R5bGU7ZC5jbGVhbj0hMSxkLmNsZWFuQ29ubmVjdGVkPSExfX0sImVucXVldWUiKTtyLmJpbmRlcih0KS5vbigiYm91bmRzLiogZGlydHkuKiIsbyhmdW5jdGlvbihzKXt2YXIgbD1zLnRhcmdldDtuKGwpfSwib25EaXJ0eUJvdW5kcyIpKS5vbigic3R5bGUuKiBiYWNrZ3JvdW5kLioiLG8oZnVuY3Rpb24ocyl7dmFyIGw9cy50YXJnZXQ7bihsLCExKX0sIm9uRGlydHlTdHlsZSIpKTt2YXIgaT1vKGZ1bmN0aW9uKHMpe2lmKHMpe3ZhciBsPXIub25VcGRhdGVFbGVDYWxjc0ZucztlLmNsZWFuU3R5bGUoKTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XSxmPWguX3ByaXZhdGUucnN0eWxlO2guaXNOb2RlKCkmJiFmLmNsZWFuQ29ubmVjdGVkJiYobihoLmNvbm5lY3RlZEVkZ2VzKCkpLGYuY2xlYW5Db25uZWN0ZWQ9ITApfWlmKGwpZm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspe3ZhciBwPWxbZF07cChzLGUpfXIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGUpLGU9dC5jb2xsZWN0aW9uKCl9fSwidXBkYXRlRWxlQ2FsY3MiKTtyLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlPWZ1bmN0aW9uKCl7aSghMCl9LHIuYmVmb3JlUmVuZGVyKGksci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKX07SjYub25VcGRhdGVFbGVDYWxjcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnM9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zfHxbXTtlLnB1c2godCl9O0o2LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPW8oZnVuY3Rpb24oXyl7cmV0dXJuIF8uX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkfSwiaXNDbGVhbkNvbm5lY3RlZCIpLG49W10saT1bXTtpZighdGhpcy5kZXN0cm95ZWQpe2U9PT12b2lkIDAmJihlPSEwKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPXMuX3ByaXZhdGUsdT1sLnJzdHlsZTtzLmlzRWRnZSgpJiYoIXIocy5zb3VyY2UoKSl8fCFyKHMudGFyZ2V0KCkpKSYmKHUuY2xlYW49ITEpLCEoZSYmdS5jbGVhbnx8cy5yZW1vdmVkKCkpJiZzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUiJiYobC5ncm91cD09PSJub2RlcyI/aS5wdXNoKHMpOm4ucHVzaChzKSx1LmNsZWFuPSEwKX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPWYuX3ByaXZhdGUscD1kLnJzdHlsZSxtPWYucG9zaXRpb24oKTt0aGlzLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbihmKSxwLm5vZGVYPW0ueCxwLm5vZGVZPW0ueSxwLm5vZGVXPWYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscC5ub2RlSD1mLnBzdHlsZSgiaGVpZ2h0IikucGZWYWx1ZX10aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKG4pO2Zvcih2YXIgZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddLHY9eS5fcHJpdmF0ZSx4PXYucnN0eWxlLGI9di5yc2NyYXRjaDt4LnNyY1g9Yi5hcnJvd1N0YXJ0WCx4LnNyY1k9Yi5hcnJvd1N0YXJ0WSx4LnRndFg9Yi5hcnJvd0VuZFgseC50Z3RZPWIuYXJyb3dFbmRZLHgubWlkWD1iLm1pZFgseC5taWRZPWIubWlkWSx4LmxhYmVsQW5nbGU9Yi5sYWJlbEFuZ2xlLHguc291cmNlTGFiZWxBbmdsZT1iLnNvdXJjZUxhYmVsQW5nbGUseC50YXJnZXRMYWJlbEFuZ2xlPWIudGFyZ2V0TGFiZWxBbmdsZX19fTtlUz17fTtlUy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7aWYodCl7dC5kcmFnPVtdLHQubm9uZHJhZz1bXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLGk9bi5fcHJpdmF0ZS5yc2NyYXRjaDtuLmdyYWJiZWQoKSYmIW4uaXNQYXJlbnQoKT9lLnB1c2gobik6aS5pbkRyYWdMYXllcj90LmRyYWcucHVzaChuKTp0Lm5vbmRyYWcucHVzaChuKX1mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LmRyYWcucHVzaChuKX19fTtlUy5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW51bGx9O2VTLmdldENhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKHQpe2lmKHR8fCF0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzKXt2YXIgZT10aGlzLmN5Lm11dGFibGVFbGVtZW50cygpLnRvQXJyYXkoKTtlLnNvcnQoV2dlKSxlLmludGVyYWN0aXZlPWUuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWUsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBlfTtjMWU9e307W3RwLE82LHFhLHhiLGtCLHR1LGwxZSxKNixlU10uZm9yRWFjaChmdW5jdGlvbih0KXtpcihjMWUsdCl9KTt1MWU9e307dTFlLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5pbWFnZUNhY2hlPW4uaW1hZ2VDYWNoZXx8e30sYT1pW3RdO2lmKGEpcmV0dXJuIGEuaW1hZ2UuY29tcGxldGV8fGEuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsciksYS5pbWFnZTthPWlbdF09aVt0XXx8e307dmFyIHM9YS5pbWFnZT1uZXcgSW1hZ2U7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3MuZXJyb3I9ITB9KTt2YXIgbD0iZGF0YToiLHU9dC5zdWJzdHJpbmcoMCxsLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PWw7cmV0dXJuIHV8fChlPWU9PT0ibnVsbCI/bnVsbDplLHMuY3Jvc3NPcmlnaW49ZSkscy5zcmM9dCxzfTtSMT17fTtSMS5yZWdpc3RlckJpbmRpbmc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyxbMV0pLGE9dGhpcy5iaW5kZXIodCk7cmV0dXJuIGEub24uYXBwbHkoYSxpKX07UjEuYmluZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmN5LndpbmRvdygpLG49dD09PXJ8fHQ9PT1yLmRvY3VtZW50fHx0PT09ci5kb2N1bWVudC5ib2R5fHxBcWUodCk7aWYoZS5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9PW51bGwpe3ZhciBpPSExO3RyeXt2YXIgYT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6byhmdW5jdGlvbigpe3JldHVybiBpPSEwLCEwfSwiZ2V0Iil9KTtyLmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsYSl9Y2F0Y2h7fWUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPWl9dmFyIHM9byhmdW5jdGlvbih1LGgsZil7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbiYmZS5zdXBwb3J0c1Bhc3NpdmVFdmVudHMmJihkWzJdPXtjYXB0dXJlOmY/PyExLHBhc3NpdmU6ITEsb25jZTohMX0pLGUuYmluZGluZ3MucHVzaCh7dGFyZ2V0OnQsYXJnczpkfSksKHQuYWRkRXZlbnRMaXN0ZW5lcnx8dC5vbikuYXBwbHkodCxkKSx0aGlzfSwib24iKTtyZXR1cm57b246cyxhZGRFdmVudExpc3RlbmVyOnMsYWRkTGlzdGVuZXI6cyxiaW5kOnN9fTtSMS5ub2RlSXNEcmFnZ2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuaXNOb2RlKCkmJiF0LmxvY2tlZCgpJiZ0LmdyYWJiYWJsZSgpfTtSMS5ub2RlSXNHcmFiYmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubm9kZUlzRHJhZ2dhYmxlKHQpJiZ0LmludGVyYWN0aXZlKCl9O1IxLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5jeS53aW5kb3coKSxyPW8oZnVuY3Rpb24oWCl7cmV0dXJuIFguc2VsZWN0ZWQoKX0sImlzU2VsZWN0ZWQiKSxuPW8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7WD09bnVsbCYmKFg9dC5jeSk7Zm9yKHZhciBuZT0wO25lPGZlLmxlbmd0aDtuZSsrKXt2YXIgdmU9ZmVbbmVdO1guZW1pdCh7b3JpZ2luYWxFdmVudDpoZSx0eXBlOnZlLHBvc2l0aW9uOmdlfSl9fSwidHJpZ2dlckV2ZW50cyIpLGk9byhmdW5jdGlvbihYKXtyZXR1cm4gWC5zaGlmdEtleXx8WC5tZXRhS2V5fHxYLmN0cmxLZXl9LCJpc011bHRTZWxLZXlEb3duIiksYT1vKGZ1bmN0aW9uKFgsZmUpe3ZhciBoZT0hMDtpZih0LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmWCYmWC5wYW5uYWJsZSgpKWZvcih2YXIgZ2U9MDtmZSYmZ2U8ZmUubGVuZ3RoO2dlKyspe3ZhciBYPWZlW2dlXTtpZihYLmlzTm9kZSgpJiZYLmlzUGFyZW50KCkmJiFYLnBhbm5hYmxlKCkpe2hlPSExO2JyZWFrfX1lbHNlIGhlPSEwO3JldHVybiBoZX0sImFsbG93UGFubmluZ1Bhc3N0aHJvdWdoIikscz1vKGZ1bmN0aW9uKFgpe1hbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sInNldEdyYWJiZWQiKSxsPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5ncmFiYmVkPSExfSwic2V0RnJlZWQiKSx1PW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMH0sInNldEluRHJhZ0xheWVyIiksaD1vKGZ1bmN0aW9uKFgpe1hbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITF9LCJzZXRPdXREcmFnTGF5ZXIiKSxmPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LCJzZXRHcmFiVGFyZ2V0IiksZD1vKGZ1bmN0aW9uKFgpe1hbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSExfSwicmVtb3ZlR3JhYlRhcmdldCIpLHA9byhmdW5jdGlvbihYLGZlKXt2YXIgaGU9ZmUuYWRkVG9MaXN0LGdlPWhlLmhhcyhYKTshZ2UmJlguZ3JhYmJhYmxlKCkmJiFYLmxvY2tlZCgpJiYoaGUubWVyZ2UoWCkscyhYKSl9LCJhZGRUb0RyYWdMaXN0IiksbT1vKGZ1bmN0aW9uKFgsZmUpe2lmKFguY3koKS5oYXNDb21wb3VuZE5vZGVzKCkmJiEoZmUuaW5EcmFnTGF5ZXI9PW51bGwmJmZlLmFkZFRvTGlzdD09bnVsbCkpe3ZhciBoZT1YLmRlc2NlbmRhbnRzKCk7ZmUuaW5EcmFnTGF5ZXImJihoZS5mb3JFYWNoKHUpLGhlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCh1KSksZmUuYWRkVG9MaXN0JiZwKGhlLGZlKX19LCJhZGREZXNjZW5kYW50c1RvRHJhZyIpLGc9byhmdW5jdGlvbihYLGZlKXtmZT1mZXx8e307dmFyIGhlPVguY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7ZmUuaW5EcmFnTGF5ZXImJihYLmZvckVhY2godSksWC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oZ2Upe3JldHVybiFoZXx8Z2UuaXNFZGdlKCl9KS5mb3JFYWNoKHUpKSxmZS5hZGRUb0xpc3QmJlguZm9yRWFjaChmdW5jdGlvbihnZSl7cChnZSxmZSl9KSxtKFgsZmUpLHgoWCx7aW5EcmFnTGF5ZXI6ZmUuaW5EcmFnTGF5ZXJ9KSx0LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9LCJhZGROb2Rlc1RvRHJhZyIpLHk9Zyx2PW8oZnVuY3Rpb24oWCl7WCYmKHQuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGZlKXtsKGZlKSxoKGZlKSxkKGZlKX0pLHQudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKSl9LCJmcmVlRHJhZ2dlZEVsZW1lbnRzIikseD1vKGZ1bmN0aW9uKFgsZmUpe2lmKCEoZmUuaW5EcmFnTGF5ZXI9PW51bGwmJmZlLmFkZFRvTGlzdD09bnVsbCkmJlguY3koKS5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBoZT1YLmFuY2VzdG9ycygpLm9ycGhhbnMoKTtpZighaGUuc2FtZShYKSl7dmFyIGdlPWhlLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoaGUpLnVubWVyZ2UoWCkudW5tZXJnZShYLmRlc2NlbmRhbnRzKCkpLG5lPWdlLmNvbm5lY3RlZEVkZ2VzKCk7ZmUuaW5EcmFnTGF5ZXImJihuZS5mb3JFYWNoKHUpLGdlLmZvckVhY2godSkpLGZlLmFkZFRvTGlzdCYmZ2UuZm9yRWFjaChmdW5jdGlvbih2ZSl7cCh2ZSxmZSl9KX19fSwidXBkYXRlQW5jZXN0b3JzSW5EcmFnTGF5ZXIiKSxiPW8oZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50IT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpfSwiYmx1ckFjdGl2ZURvbUVsZW1lbnQiKSx3PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyPCJ1IixfPXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7dz8odC5yZW1vdmVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbih5ZSl7Zm9yKHZhciBYPTA7WDx5ZS5sZW5ndGg7WCsrKXt2YXIgZmU9eWVbWF0saGU9ZmUucmVtb3ZlZE5vZGVzO2lmKGhlKWZvcih2YXIgZ2U9MDtnZTxoZS5sZW5ndGg7Z2UrKyl7dmFyIG5lPWhlW2dlXTtpZihuZT09PXQuY29udGFpbmVyKXt0LmRlc3Ryb3koKTticmVha319fX0pLHQuY29udGFpbmVyLnBhcmVudE5vZGUmJnQucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lci5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSk6dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIkRPTU5vZGVSZW1vdmVkIixmdW5jdGlvbih5ZSl7dC5kZXN0cm95KCl9KTt2YXIgVD16NihmdW5jdGlvbigpe3QuY3kucmVzaXplKCl9LDEwMCk7dyYmKHQuc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihUKSx0LnN0eWxlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lcix7YXR0cmlidXRlczohMH0pKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJyZXNpemUiLFQpLF8mJih0LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihUKSx0LnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodC5jb250YWluZXIpKTt2YXIgRT1vKGZ1bmN0aW9uKFgsZmUpe2Zvcig7WCE9bnVsbDspZmUoWCksWD1YLnBhcmVudE5vZGV9LCJmb3JFYWNoVXAiKSxMPW8oZnVuY3Rpb24oKXt0LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfSwiaW52YWxpZGF0ZUNvb3JkcyIpO0UodC5jb250YWluZXIsZnVuY3Rpb24oeWUpe3QucmVnaXN0ZXJCaW5kaW5nKHllLCJ0cmFuc2l0aW9uZW5kIixMKSx0LnJlZ2lzdGVyQmluZGluZyh5ZSwiYW5pbWF0aW9uZW5kIixMKSx0LnJlZ2lzdGVyQmluZGluZyh5ZSwic2Nyb2xsIixMKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oeWUpe3llLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgUz1vKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0aW9uWzRdIT09MH0sImluQm94U2VsZWN0aW9uIiksQT1vKGZ1bmN0aW9uKFgpe2Zvcih2YXIgZmU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaGU9ZmVbMF0sZ2U9ZmVbMV0sbmU9ZmVbMl0sdmU9ZmVbM10sVT1YLnRvdWNoZXM/WC50b3VjaGVzOltYXSxUZT0hMSxpZT0wO2llPFUubGVuZ3RoO2llKyspe3ZhciBFZT1VW2llXTtpZihoZTw9RWUuY2xpZW50WCYmRWUuY2xpZW50WDw9aGUrbmUmJmdlPD1FZS5jbGllbnRZJiZFZS5jbGllbnRZPD1nZSt2ZSl7VGU9ITA7YnJlYWt9fWlmKCFUZSlyZXR1cm4hMTtmb3IodmFyIEFlPXQuY29udGFpbmVyLEdlPVgudGFyZ2V0LEJlPUdlLnBhcmVudE5vZGUsbWU9ITE7QmU7KXtpZihCZT09PUFlKXttZT0hMDticmVha31CZT1CZS5wYXJlbnROb2RlfXJldHVybiEhbWV9LCJldmVudEluQ29udGFpbmVyIik7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIm1vdXNlZG93biIsbyhmdW5jdGlvbihYKXtpZihBKFgpJiYhKHQuaG92ZXJEYXRhLndoaWNoPT09MSYmWC53aGljaCE9PTEpKXtYLnByZXZlbnREZWZhdWx0KCksYigpLHQuaG92ZXJEYXRhLmNhcHR1cmU9ITAsdC5ob3ZlckRhdGEud2hpY2g9WC53aGljaDt2YXIgZmU9dC5jeSxoZT1bWC5jbGllbnRYLFguY2xpZW50WV0sZ2U9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KGhlWzBdLGhlWzFdKSxuZT10LnNlbGVjdGlvbix2ZT10LmZpbmROZWFyZXN0RWxlbWVudHMoZ2VbMF0sZ2VbMV0sITAsITEpLFU9dmVbMF0sVGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt0LmhvdmVyRGF0YS5tZG93blBvcz1nZSx0LmhvdmVyRGF0YS5tZG93bkdQb3M9aGU7dmFyIGllPW8oZnVuY3Rpb24oKXt0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSExLGNsZWFyVGltZW91dCh0LmhvdmVyRGF0YS50YXBob2xkVGltZW91dCksdC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkKXt2YXIgSGU9dC5ob3ZlckRhdGEuZG93bjtIZT9IZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19KTpmZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19KX19LHQudGFwaG9sZER1cmF0aW9uKX0sImNoZWNrRm9yVGFwaG9sZCIpO2lmKFgud2hpY2g9PTMpe3QuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyIEVlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmdlWzBdLHk6Z2VbMV19fTtVPyhVLmFjdGl2YXRlKCksVS5lbWl0KEVlKSx0LmhvdmVyRGF0YS5kb3duPVUpOmZlLmVtaXQoRWUpLHQuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihYLndoaWNoPT0xKXtVJiZVLmFjdGl2YXRlKCk7e2lmKFUhPW51bGwmJnQubm9kZUlzR3JhYmJhYmxlKFUpKXt2YXIgQWU9byhmdW5jdGlvbihIZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6WCx0eXBlOkhlLHBvc2l0aW9uOnt4OmdlWzBdLHk6Z2VbMV19fX0sIm1ha2VFdmVudCIpLEdlPW8oZnVuY3Rpb24oSGUpe0hlLmVtaXQoQWUoImdyYWIiKSl9LCJ0cmlnZ2VyR3JhYiIpO2lmKGYoVSksIVUuc2VsZWN0ZWQoKSlUZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWZlLmNvbGxlY3Rpb24oKSx5KFUse2FkZFRvTGlzdDpUZX0pLFUuZW1pdChBZSgiZ3JhYm9uIikpLmVtaXQoQWUoImdyYWIiKSk7ZWxzZXtUZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWZlLmNvbGxlY3Rpb24oKTt2YXIgQmU9ZmUuJChmdW5jdGlvbihtZSl7cmV0dXJuIG1lLmlzTm9kZSgpJiZtZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShtZSl9KTtnKEJlLHthZGRUb0xpc3Q6VGV9KSxVLmVtaXQoQWUoImdyYWJvbiIpKSxCZS5mb3JFYWNoKEdlKX10LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKX10LmhvdmVyRGF0YS5kb3duPVUsdC5ob3ZlckRhdGEuZG93bnM9dmUsdC5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9bihVLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sWCx7eDpnZVswXSx5OmdlWzFdfSksVT09bnVsbD8obmVbNF09MSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6Z2VbMF0seTpnZVsxXX0sdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKTpVLnBhbm5hYmxlKCkmJihuZVs0XT0xKSxpZSgpfW5lWzBdPW5lWzJdPWdlWzBdLG5lWzFdPW5lWzNdPWdlWzFdfX0sIm1vdXNlZG93bkhhbmRsZXIiKSwhMSksdC5yZWdpc3RlckJpbmRpbmcoZSwibW91c2Vtb3ZlIixvKGZ1bmN0aW9uKFgpe3ZhciBmZT10LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWZlJiYhQShYKSkpe3ZhciBoZT0hMSxnZT10LmN5LG5lPWdlLnpvb20oKSx2ZT1bWC5jbGllbnRYLFguY2xpZW50WV0sVT10LnByb2plY3RJbnRvVmlld3BvcnQodmVbMF0sdmVbMV0pLFRlPXQuaG92ZXJEYXRhLm1kb3duUG9zLGllPXQuaG92ZXJEYXRhLm1kb3duR1BvcyxFZT10LnNlbGVjdGlvbixBZT1udWxsOyF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmKEFlPXQuZmluZE5lYXJlc3RFbGVtZW50KFVbMF0sVVsxXSwhMCwhMSkpO3ZhciBHZT10LmhvdmVyRGF0YS5sYXN0LEJlPXQuaG92ZXJEYXRhLmRvd24sbWU9W1VbMF0tRWVbMl0sVVsxXS1FZVszXV0sSGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxPZTtpZihpZSl7dmFyIGV0PXZlWzBdLWllWzBdLGJ0PWV0KmV0LGt0PXZlWzFdLWllWzFdLHZ0PWt0Kmt0LHJ0PWJ0K3Z0O3QuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9T2U9cnQ+PXQuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIHl0PWkoWCk7T2UmJih0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwKTt2YXIgVWU9byhmdW5jdGlvbigpe3ZhciBCdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE9dC5ob3ZlckRhdGEuZHJhZ0RlbHRhfHxbXTtCdC5sZW5ndGg9PT0wPyhCdC5wdXNoKG1lWzBdKSxCdC5wdXNoKG1lWzFdKSk6KEJ0WzBdKz1tZVswXSxCdFsxXSs9bWVbMV0pfSwidXBkYXRlRHJhZ0RlbHRhIik7aGU9ITAsbihBZSxbIm1vdXNlbW92ZSIsInZtb3VzZW1vdmUiLCJ0YXBkcmFnIl0sWCx7eDpVWzBdLHk6VVsxXX0pO3ZhciB0dD1vKGZ1bmN0aW9uKCl7dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LmhvdmVyRGF0YS5zZWxlY3Rpbmd8fGdlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6VVswXSx5OlVbMV19fSksRWVbNF09MSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpfSwiZ29JbnRvQm94TW9kZSIpO2lmKHQuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoT2Upe3ZhciBodD17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX07QmU/QmUuZW1pdChodCk6Z2UuZW1pdChodCksdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXQuaG92ZXJEYXRhLmN4dE92ZXJ8fEFlIT09dC5ob3ZlckRhdGEuY3h0T3ZlcikmJih0LmhvdmVyRGF0YS5jeHRPdmVyJiZ0LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDpVWzBdLHk6VVsxXX19KSx0LmhvdmVyRGF0YS5jeHRPdmVyPUFlLEFlJiZBZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX0pKX19ZWxzZSBpZih0LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoaGU9ITAsZ2UucGFubmluZ0VuYWJsZWQoKSYmZ2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBFdDtpZih0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIGVyPXQuaG92ZXJEYXRhLm1kb3duUG9zO0V0PXt4OihVWzBdLWVyWzBdKSpuZSx5OihVWzFdLWVyWzFdKSpuZX0sdC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITF9ZWxzZSBFdD17eDptZVswXSpuZSx5Om1lWzFdKm5lfTtnZS5wYW5CeShFdCksZ2UuZW1pdCgiZHJhZ3BhbiIpLHQuaG92ZXJEYXRhLmRyYWdnZWQ9ITB9VT10LnByb2plY3RJbnRvVmlld3BvcnQoWC5jbGllbnRYLFguY2xpZW50WSl9ZWxzZSBpZihFZVs0XT09MSYmKEJlPT1udWxsfHxCZS5wYW5uYWJsZSgpKSl7aWYoT2Upe2lmKCF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmZ2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiYoeXR8fCFnZS5wYW5uaW5nRW5hYmxlZCgpfHwhZ2UudXNlclBhbm5pbmdFbmFibGVkKCkpKXR0KCk7ZWxzZSBpZighdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZnZS5wYW5uaW5nRW5hYmxlZCgpJiZnZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7dmFyIGR0PWEoQmUsdC5ob3ZlckRhdGEuZG93bnMpO2R0JiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITAsdC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITAsRWVbNF09MCx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249bTEoVGUpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKSl9QmUmJkJlLnBhbm5hYmxlKCkmJkJlLmFjdGl2ZSgpJiZCZS51bmFjdGl2YXRlKCl9fWVsc2V7aWYoQmUmJkJlLnBhbm5hYmxlKCkmJkJlLmFjdGl2ZSgpJiZCZS51bmFjdGl2YXRlKCksKCFCZXx8IUJlLmdyYWJiZWQoKSkmJkFlIT1HZSYmKEdlJiZuKEdlLFsibW91c2VvdXQiLCJ0YXBkcmFnb3V0Il0sWCx7eDpVWzBdLHk6VVsxXX0pLEFlJiZuKEFlLFsibW91c2VvdmVyIiwidGFwZHJhZ292ZXIiXSxYLHt4OlVbMF0seTpVWzFdfSksdC5ob3ZlckRhdGEubGFzdD1BZSksQmUpaWYoT2Upe2lmKGdlLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmeXQpQmUmJkJlLmdyYWJiZWQoKSYmKHYoSGUpLEJlLmVtaXQoImZyZWVvbiIpLEhlLmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihCZS5lbWl0KCJkcmFnZnJlZW9uIiksSGUuZW1pdCgiZHJhZ2ZyZWUiKSkpLHR0KCk7ZWxzZSBpZihCZSYmQmUuZ3JhYmJlZCgpJiZ0Lm5vZGVJc0RyYWdnYWJsZShCZSkpe3ZhciBKZT0hdC5kcmFnRGF0YS5kaWREcmFnO0plJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LmRyYWdEYXRhLmRpZERyYWc9ITAsdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxnKEhlLHtpbkRyYWdMYXllcjohMH0pO3ZhciBjdD17eDowLHk6MH07aWYoeHQobWVbMF0pJiZ4dChtZVsxXSkmJihjdC54Kz1tZVswXSxjdC55Kz1tZVsxXSxKZSkpe3ZhciBDdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE7Q3QmJnh0KEN0WzBdKSYmeHQoQ3RbMV0pJiYoY3QueCs9Q3RbMF0sY3QueSs9Q3RbMV0pfXQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxIZS5zaWxlbnRTaGlmdChjdCkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3KCl9fWVsc2UgVWUoKTtoZT0hMH1pZihFZVsyXT1VWzBdLEVlWzNdPVVbMV0saGUpcmV0dXJuIFguc3RvcFByb3BhZ2F0aW9uJiZYLnN0b3BQcm9wYWdhdGlvbigpLFgucHJldmVudERlZmF1bHQmJlgucHJldmVudERlZmF1bHQoKSwhMX19LCJtb3VzZW1vdmVIYW5kbGVyIiksITEpO3ZhciBJLEQsazt0LnJlZ2lzdGVyQmluZGluZyhlLCJtb3VzZXVwIixvKGZ1bmN0aW9uKFgpe2lmKCEodC5ob3ZlckRhdGEud2hpY2g9PT0xJiZYLndoaWNoIT09MSYmdC5ob3ZlckRhdGEuY2FwdHVyZSkpe3ZhciBmZT10LmhvdmVyRGF0YS5jYXB0dXJlO2lmKGZlKXt0LmhvdmVyRGF0YS5jYXB0dXJlPSExO3ZhciBoZT10LmN5LGdlPXQucHJvamVjdEludG9WaWV3cG9ydChYLmNsaWVudFgsWC5jbGllbnRZKSxuZT10LnNlbGVjdGlvbix2ZT10LmZpbmROZWFyZXN0RWxlbWVudChnZVswXSxnZVsxXSwhMCwhMSksVT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzLFRlPXQuaG92ZXJEYXRhLmRvd24saWU9aShYKTtpZih0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24mJih0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpLHQuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITAsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxUZSYmVGUudW5hY3RpdmF0ZSgpLHQuaG92ZXJEYXRhLndoaWNoPT09Myl7dmFyIEVlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX07aWYoVGU/VGUuZW1pdChFZSk6aGUuZW1pdChFZSksIXQuaG92ZXJEYXRhLmN4dERyYWdnZWQpe3ZhciBBZT17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19O1RlP1RlLmVtaXQoQWUpOmhlLmVtaXQoQWUpfXQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITEsdC5ob3ZlckRhdGEud2hpY2g9bnVsbH1lbHNlIGlmKHQuaG92ZXJEYXRhLndoaWNoPT09MSl7aWYobih2ZSxbIm1vdXNldXAiLCJ0YXBlbmQiLCJ2bW91c2V1cCJdLFgse3g6Z2VbMF0seTpnZVsxXX0pLCF0LmRyYWdEYXRhLmRpZERyYWcmJiF0LmhvdmVyRGF0YS5kcmFnZ2VkJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiYhdC5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyYmKG4oVGUsWyJjbGljayIsInRhcCIsInZjbGljayJdLFgse3g6Z2VbMF0seTpnZVsxXX0pLEQ9ITEsWC50aW1lU3RhbXAtazw9aGUubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhJJiZjbGVhclRpbWVvdXQoSSksRD0hMCxrPW51bGwsbihUZSxbImRibGNsaWNrIiwiZGJsdGFwIiwidmRibGNsaWNrIl0sWCx7eDpnZVswXSx5OmdlWzFdfSkpOihJPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtEfHxuKFRlLFsib25lY2xpY2siLCJvbmV0YXAiLCJ2b25lY2xpY2siXSxYLHt4OmdlWzBdLHk6Z2VbMV19KX0saGUubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxrPVgudGltZVN0YW1wKSksVGU9PW51bGwmJiF0LmRyYWdEYXRhLmRpZERyYWcmJiF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF0LmhvdmVyRGF0YS5kcmFnZ2VkJiYhaShYKSYmKGhlLiQocikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxVLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPVU9aGUuY29sbGVjdGlvbigpKSx2ZT09VGUmJiF0LmRyYWdEYXRhLmRpZERyYWcmJiF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJnZlIT1udWxsJiZ2ZS5fcHJpdmF0ZS5zZWxlY3RhYmxlJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmd8fChoZS5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxpZT92ZS5zZWxlY3RlZCgpP3ZlLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6dmUuc2VsZWN0KFsidGFwc2VsZWN0Il0pOmllfHwoaGUuJChyKS51bm1lcmdlKHZlKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLHZlLnNlbGVjdChbInRhcHNlbGVjdCJdKSkpLHQucmVkcmF3SGludCgiZWxlcyIsITApKSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBHZT1oZS5jb2xsZWN0aW9uKHQuZ2V0QWxsSW5Cb3gobmVbMF0sbmVbMV0sbmVbMl0sbmVbM10pKTt0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLEdlLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxoZS5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6WCxwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX0pO3ZhciBCZT1vKGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2Uuc2VsZWN0YWJsZSgpJiYhT2Uuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO2hlLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fGllfHxoZS4kKHIpLnVubWVyZ2UoR2UpLnVuc2VsZWN0KCksR2UuZW1pdCgiYm94Iikuc3RkRmlsdGVyKEJlKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx0LnJlZHJhdygpfWlmKHQuaG92ZXJEYXRhLmRyYWdnaW5nJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKSwhbmVbNF0pe3QucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3SGludCgiZWxlcyIsITApO3ZhciBtZT1UZSYmVGUuZ3JhYmJlZCgpO3YoVSksbWUmJihUZS5lbWl0KCJmcmVlb24iKSxVLmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihUZS5lbWl0KCJkcmFnZnJlZW9uIiksVS5lbWl0KCJkcmFnZnJlZSIpKSl9fW5lWzRdPTAsdC5ob3ZlckRhdGEuZG93bj1udWxsLHQuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITEsdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExLHQuaG92ZXJEYXRhLnNlbGVjdGluZz0hMSx0LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnPSExLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMSx0LmhvdmVyRGF0YS5kcmFnZ2VkPSExLHQuaG92ZXJEYXRhLmRyYWdEZWx0YT1bXSx0LmhvdmVyRGF0YS5tZG93blBvcz1udWxsLHQuaG92ZXJEYXRhLm1kb3duR1Bvcz1udWxsLHQuaG92ZXJEYXRhLndoaWNoPW51bGx9fX0sIm1vdXNldXBIYW5kbGVyIiksITEpO3ZhciBSPW8oZnVuY3Rpb24oWCl7aWYoIXQuc2Nyb2xsaW5nUGFnZSl7dmFyIGZlPXQuY3ksaGU9ZmUuem9vbSgpLGdlPWZlLnBhbigpLG5lPXQucHJvamVjdEludG9WaWV3cG9ydChYLmNsaWVudFgsWC5jbGllbnRZKSx2ZT1bbmVbMF0qaGUrZ2UueCxuZVsxXSpoZStnZS55XTtpZih0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHQuaG92ZXJEYXRhLmRyYWdnaW5nfHx0LmhvdmVyRGF0YS5jeHRTdGFydGVkfHxTKCkpe1gucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoZmUucGFubmluZ0VuYWJsZWQoKSYmZmUudXNlclBhbm5pbmdFbmFibGVkKCkmJmZlLnpvb21pbmdFbmFibGVkKCkmJmZlLnVzZXJab29taW5nRW5hYmxlZCgpKXtYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLndoZWVsWm9vbWluZz0hMCxjbGVhclRpbWVvdXQodC5kYXRhLndoZWVsVGltZW91dCksdC5kYXRhLndoZWVsVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5kYXRhLndoZWVsWm9vbWluZz0hMSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfSwxNTApO3ZhciBVO1guZGVsdGFZIT1udWxsP1U9WC5kZWx0YVkvLTI1MDpYLndoZWVsRGVsdGFZIT1udWxsP1U9WC53aGVlbERlbHRhWS8xZTM6VT1YLndoZWVsRGVsdGEvMWUzLFU9VSp0LndoZWVsU2Vuc2l0aXZpdHk7dmFyIFRlPVguZGVsdGFNb2RlPT09MTtUZSYmKFUqPTMzKTt2YXIgaWU9ZmUuem9vbSgpKk1hdGgucG93KDEwLFUpO1gudHlwZT09PSJnZXN0dXJlY2hhbmdlIiYmKGllPXQuZ2VzdHVyZVN0YXJ0Wm9vbSpYLnNjYWxlKSxmZS56b29tKHtsZXZlbDppZSxyZW5kZXJlZFBvc2l0aW9uOnt4OnZlWzBdLHk6dmVbMV19fSksZmUuZW1pdChYLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSI/InBpbmNoem9vbSI6InNjcm9sbHpvb20iKX19fSwid2hlZWxIYW5kbGVyIik7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIndoZWVsIixSLCEwKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJzY3JvbGwiLG8oZnVuY3Rpb24oWCl7dC5zY3JvbGxpbmdQYWdlPSEwLGNsZWFyVGltZW91dCh0LnNjcm9sbGluZ1BhZ2VUaW1lb3V0KSx0LnNjcm9sbGluZ1BhZ2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjcm9sbGluZ1BhZ2U9ITF9LDI1MCl9LCJzY3JvbGxIYW5kbGVyIiksITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJnZXN0dXJlc3RhcnQiLG8oZnVuY3Rpb24oWCl7dC5nZXN0dXJlU3RhcnRab29tPXQuY3kuem9vbSgpLHQuaGFzVG91Y2hTdGFydGVkfHxYLnByZXZlbnREZWZhdWx0KCl9LCJnZXN0dXJlU3RhcnRIYW5kbGVyIiksITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJnZXN0dXJlY2hhbmdlIixmdW5jdGlvbih5ZSl7dC5oYXNUb3VjaFN0YXJ0ZWR8fFIoeWUpfSwhMCksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIm1vdXNlb3V0IixvKGZ1bmN0aW9uKFgpe3ZhciBmZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC5jbGllbnRYLFguY2xpZW50WSk7dC5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToibW91c2VvdXQiLHBvc2l0aW9uOnt4OmZlWzBdLHk6ZmVbMV19fSl9LCJtb3VzZU91dEhhbmRsZXIiKSwhMSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIm1vdXNlb3ZlciIsbyhmdW5jdGlvbihYKXt2YXIgZmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFguY2xpZW50WCxYLmNsaWVudFkpO3QuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6Im1vdXNlb3ZlciIscG9zaXRpb246e3g6ZmVbMF0seTpmZVsxXX19KX0sIm1vdXNlT3ZlckhhbmRsZXIiKSwhMSk7dmFyIEMsTyxOLFAsRixCLEcseixXLFosaixvZSxLLGVlPW8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7cmV0dXJuIE1hdGguc3FydCgoaGUtWCkqKGhlLVgpKyhnZS1mZSkqKGdlLWZlKSl9LCJkaXN0YW5jZSIpLEo9byhmdW5jdGlvbihYLGZlLGhlLGdlKXtyZXR1cm4oaGUtWCkqKGhlLVgpKyhnZS1mZSkqKGdlLWZlKX0sImRpc3RhbmNlU3EiKSxIO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ0b3VjaHN0YXJ0IixIPW8oZnVuY3Rpb24oWCl7aWYodC5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFBKFgpKXtiKCksdC50b3VjaERhdGEuY2FwdHVyZT0hMCx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwO3ZhciBmZT10LmN5LGhlPXQudG91Y2hEYXRhLm5vdyxnZT10LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFgudG91Y2hlc1swXSl7dmFyIG5lPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7aGVbMF09bmVbMF0saGVbMV09bmVbMV19aWYoWC50b3VjaGVzWzFdKXt2YXIgbmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1sxXS5jbGllbnRYLFgudG91Y2hlc1sxXS5jbGllbnRZKTtoZVsyXT1uZVswXSxoZVszXT1uZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBuZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO2hlWzRdPW5lWzBdLGhlWzVdPW5lWzFdfWlmKFgudG91Y2hlc1sxXSl7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCx2KHQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7dmFyIHZlPXQuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO1c9dmVbMF0sWj12ZVsxXSxqPXZlWzJdLG9lPXZlWzNdLEM9WC50b3VjaGVzWzBdLmNsaWVudFgtVyxPPVgudG91Y2hlc1swXS5jbGllbnRZLVosTj1YLnRvdWNoZXNbMV0uY2xpZW50WC1XLFA9WC50b3VjaGVzWzFdLmNsaWVudFktWixLPTA8PUMmJkM8PWomJjA8PU4mJk48PWomJjA8PU8mJk88PW9lJiYwPD1QJiZQPD1vZTt2YXIgVT1mZS5wYW4oKSxUZT1mZS56b29tKCk7Rj1lZShDLE8sTixQKSxCPUooQyxPLE4sUCksRz1bKEMrTikvMiwoTytQKS8yXSx6PVsoR1swXS1VLngpL1RlLChHWzFdLVUueSkvVGVdO3ZhciBpZT0yMDAsRWU9aWUqaWU7aWYoQjxFZSYmIVgudG91Y2hlc1syXSl7dmFyIEFlPXQuZmluZE5lYXJlc3RFbGVtZW50KGhlWzBdLGhlWzFdLCEwLCEwKSxHZT10LmZpbmROZWFyZXN0RWxlbWVudChoZVsyXSxoZVszXSwhMCwhMCk7QWUmJkFlLmlzTm9kZSgpPyhBZS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aGVbMF0seTpoZVsxXX19KSx0LnRvdWNoRGF0YS5zdGFydD1BZSk6R2UmJkdlLmlzTm9kZSgpPyhHZS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aGVbMF0seTpoZVsxXX19KSx0LnRvdWNoRGF0YS5zdGFydD1HZSk6ZmUuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpoZVswXSx5OmhlWzFdfX0pLHQudG91Y2hEYXRhLnN0YXJ0JiYodC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSksdC50b3VjaERhdGEuY3h0PSEwLHQudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITEsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhdygpO3JldHVybn19aWYoWC50b3VjaGVzWzJdKWZlLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmWC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIVgudG91Y2hlc1sxXSl7aWYoWC50b3VjaGVzWzBdKXt2YXIgQmU9dC5maW5kTmVhcmVzdEVsZW1lbnRzKGhlWzBdLGhlWzFdLCEwLCEwKSxtZT1CZVswXTtpZihtZSE9bnVsbCYmKG1lLmFjdGl2YXRlKCksdC50b3VjaERhdGEuc3RhcnQ9bWUsdC50b3VjaERhdGEuc3RhcnRzPUJlLHQubm9kZUlzR3JhYmJhYmxlKG1lKSkpe3ZhciBIZT10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM9ZmUuY29sbGVjdGlvbigpLE9lPW51bGw7dC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksbWUuc2VsZWN0ZWQoKT8oT2U9ZmUuJChmdW5jdGlvbihydCl7cmV0dXJuIHJ0LnNlbGVjdGVkKCkmJnQubm9kZUlzR3JhYmJhYmxlKHJ0KX0pLGcoT2Use2FkZFRvTGlzdDpIZX0pKTp5KG1lLHthZGRUb0xpc3Q6SGV9KSxmKG1lKTt2YXIgZXQ9byhmdW5jdGlvbih5dCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6WCx0eXBlOnl0LHBvc2l0aW9uOnt4OmhlWzBdLHk6aGVbMV19fX0sIm1ha2VFdmVudCIpO21lLmVtaXQoZXQoImdyYWJvbiIpKSxPZT9PZS5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXtydC5lbWl0KGV0KCJncmFiIikpfSk6bWUuZW1pdChldCgiZ3JhYiIpKX1uKG1lLFsidG91Y2hzdGFydCIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLFgse3g6aGVbMF0seTpoZVsxXX0pLG1lPT1udWxsJiYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4Om5lWzBdLHk6bmVbMV19LHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKSksdC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHQudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx0LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYhdC5waW5jaGluZyYmIXQudG91Y2hEYXRhLnNlbGVjdGluZyYmbih0LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxYLHt4OmhlWzBdLHk6aGVbMV19KX0sdC50YXBob2xkRHVyYXRpb24pfX1pZihYLnRvdWNoZXMubGVuZ3RoPj0xKXtmb3IodmFyIGJ0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxrdD0wO2t0PGhlLmxlbmd0aDtrdCsrKWJ0W2t0XT1nZVtrdF09aGVba3RdO3ZhciB2dD1YLnRvdWNoZXNbMF07dC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W3Z0LmNsaWVudFgsdnQuY2xpZW50WV19fX0sInRvdWNoc3RhcnRIYW5kbGVyIiksITEpO3ZhciBxO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNobW92ZSIscT1vKGZ1bmN0aW9uKFgpe3ZhciBmZT10LnRvdWNoRGF0YS5jYXB0dXJlO2lmKCEoIWZlJiYhQShYKSkpe3ZhciBoZT10LnNlbGVjdGlvbixnZT10LmN5LG5lPXQudG91Y2hEYXRhLm5vdyx2ZT10LnRvdWNoRGF0YS5lYXJsaWVyLFU9Z2Uuem9vbSgpO2lmKFgudG91Y2hlc1swXSl7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7bmVbMF09VGVbMF0sbmVbMV09VGVbMV19aWYoWC50b3VjaGVzWzFdKXt2YXIgVGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1sxXS5jbGllbnRYLFgudG91Y2hlc1sxXS5jbGllbnRZKTtuZVsyXT1UZVswXSxuZVszXT1UZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO25lWzRdPVRlWzBdLG5lWzVdPVRlWzFdfXZhciBpZT10LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbixFZTtpZihmZSYmWC50b3VjaGVzWzBdJiZpZSl7Zm9yKHZhciBBZT1bXSxHZT0wO0dlPG5lLmxlbmd0aDtHZSsrKUFlW0dlXT1uZVtHZV0tdmVbR2VdO3ZhciBCZT1YLnRvdWNoZXNbMF0uY2xpZW50WC1pZVswXSxtZT1CZSpCZSxIZT1YLnRvdWNoZXNbMF0uY2xpZW50WS1pZVsxXSxPZT1IZSpIZSxldD1tZStPZTtFZT1ldD49dC50b3VjaFRhcFRocmVzaG9sZDJ9aWYoZmUmJnQudG91Y2hEYXRhLmN4dCl7WC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBidD1YLnRvdWNoZXNbMF0uY2xpZW50WC1XLGt0PVgudG91Y2hlc1swXS5jbGllbnRZLVosdnQ9WC50b3VjaGVzWzFdLmNsaWVudFgtVyxydD1YLnRvdWNoZXNbMV0uY2xpZW50WS1aLHl0PUooYnQsa3QsdnQscnQpLFVlPXl0L0IsdHQ9MTUwLGh0PXR0KnR0LEV0PTEuNSxlcj1FdCpFdDtpZihVZT49ZXJ8fHl0Pj1odCl7dC50b3VjaERhdGEuY3h0PSExLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgZHQ9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fTt0LnRvdWNoRGF0YS5zdGFydD8odC50b3VjaERhdGEuc3RhcnQudW5hY3RpdmF0ZSgpLmVtaXQoZHQpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGwpOmdlLmVtaXQoZHQpfX1pZihmZSYmdC50b3VjaERhdGEuY3h0KXt2YXIgZHQ9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpuZVswXSx5Om5lWzFdfX07dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQudG91Y2hEYXRhLnN0YXJ0P3QudG91Y2hEYXRhLnN0YXJ0LmVtaXQoZHQpOmdlLmVtaXQoZHQpLHQudG91Y2hEYXRhLnN0YXJ0JiYodC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSksdC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMDt2YXIgSmU9dC5maW5kTmVhcmVzdEVsZW1lbnQobmVbMF0sbmVbMV0sITAsITApOyghdC50b3VjaERhdGEuY3h0T3Zlcnx8SmUhPT10LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHQudG91Y2hEYXRhLmN4dE92ZXImJnQudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fSksdC50b3VjaERhdGEuY3h0T3Zlcj1KZSxKZSYmSmUuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpuZVswXSx5Om5lWzFdfX0pKX1lbHNlIGlmKGZlJiZYLnRvdWNoZXNbMl0mJmdlLmJveFNlbGVjdGlvbkVuYWJsZWQoKSlYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx0LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGdlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19KSx0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAsdC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGhlWzRdPTEsIWhlfHxoZS5sZW5ndGg9PT0wfHxoZVswXT09PXZvaWQgMD8oaGVbMF09KG5lWzBdK25lWzJdK25lWzRdKS8zLGhlWzFdPShuZVsxXStuZVszXStuZVs1XSkvMyxoZVsyXT0obmVbMF0rbmVbMl0rbmVbNF0pLzMrMSxoZVszXT0obmVbMV0rbmVbM10rbmVbNV0pLzMrMSk6KGhlWzJdPShuZVswXStuZVsyXStuZVs0XSkvMyxoZVszXT0obmVbMV0rbmVbM10rbmVbNV0pLzMpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKTtlbHNlIGlmKGZlJiZYLnRvdWNoZXNbMV0mJiF0LnRvdWNoRGF0YS5kaWRTZWxlY3QmJmdlLnpvb21pbmdFbmFibGVkKCkmJmdlLnBhbm5pbmdFbmFibGVkKCkmJmdlLnVzZXJab29taW5nRW5hYmxlZCgpJiZnZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7WC5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgY3Q9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGN0KXt0LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIEN0PTA7Q3Q8Y3QubGVuZ3RoO0N0Kyspe3ZhciBwdD1jdFtDdF0uX3ByaXZhdGU7cHQuZ3JhYmJlZD0hMSxwdC5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEJ0PXQudG91Y2hEYXRhLnN0YXJ0LGJ0PVgudG91Y2hlc1swXS5jbGllbnRYLVcsa3Q9WC50b3VjaGVzWzBdLmNsaWVudFktWix2dD1YLnRvdWNoZXNbMV0uY2xpZW50WC1XLHJ0PVgudG91Y2hlc1sxXS5jbGllbnRZLVosVHI9ZWUoYnQsa3QsdnQscnQpLHlyPVRyL0Y7aWYoSyl7dmFyIG9yPWJ0LUMsbG49a3QtTyxPcj12dC1OLGlpPXJ0LVAsbW49KG9yK09yKS8yLE9uPShsbitpaSkvMixfcj1nZS56b29tKCksbWk9X3IqeXIsdnM9Z2UucGFuKCksUG49elswXSpfcit2cy54LFNvPXpbMV0qX3IrdnMueSxnbD17eDotbWkvX3IqKFBuLXZzLngtbW4pK1BuLHk6LW1pL19yKihTby12cy55LU9uKStTb307aWYoQnQmJkJ0LmFjdGl2ZSgpKXt2YXIgY3Q9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO3YoY3QpLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3SGludCgiZWxlcyIsITApLEJ0LnVuYWN0aXZhdGUoKS5lbWl0KCJmcmVlb24iKSxjdC5lbWl0KCJmcmVlIiksdC5kcmFnRGF0YS5kaWREcmFnJiYoQnQuZW1pdCgiZHJhZ2ZyZWVvbiIpLGN0LmVtaXQoImRyYWdmcmVlIikpfWdlLnZpZXdwb3J0KHt6b29tOm1pLHBhbjpnbCxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxnZS5lbWl0KCJwaW5jaHpvb20iKSxGPVRyLEM9YnQsTz1rdCxOPXZ0LFA9cnQsdC5waW5jaGluZz0hMH1pZihYLnRvdWNoZXNbMF0pe3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFkpO25lWzBdPVRlWzBdLG5lWzFdPVRlWzFdfWlmKFgudG91Y2hlc1sxXSl7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMV0uY2xpZW50WCxYLnRvdWNoZXNbMV0uY2xpZW50WSk7bmVbMl09VGVbMF0sbmVbM109VGVbMV19aWYoWC50b3VjaGVzWzJdKXt2YXIgVGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1syXS5jbGllbnRYLFgudG91Y2hlc1syXS5jbGllbnRZKTtuZVs0XT1UZVswXSxuZVs1XT1UZVsxXX19ZWxzZSBpZihYLnRvdWNoZXNbMF0mJiF0LnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBCbj10LnRvdWNoRGF0YS5zdGFydCxraT10LnRvdWNoRGF0YS5sYXN0LEplO2lmKCF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LnN3aXBlUGFubmluZyYmKEplPXQuZmluZE5lYXJlc3RFbGVtZW50KG5lWzBdLG5lWzFdLCEwLCEwKSksZmUmJkJuIT1udWxsJiZYLnByZXZlbnREZWZhdWx0KCksZmUmJkJuIT1udWxsJiZ0Lm5vZGVJc0RyYWdnYWJsZShCbikpaWYoRWUpe3ZhciBjdD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMsQXQ9IXQuZHJhZ0RhdGEuZGlkRHJhZztBdCYmZyhjdCx7aW5EcmFnTGF5ZXI6ITB9KSx0LmRyYWdEYXRhLmRpZERyYWc9ITA7dmFyIFB0PXt4OjAseTowfTtpZih4dChBZVswXSkmJnh0KEFlWzFdKSYmKFB0LngrPUFlWzBdLFB0LnkrPUFlWzFdLEF0KSl7dC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIHd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YTt3dCYmeHQod3RbMF0pJiZ4dCh3dFsxXSkmJihQdC54Kz13dFswXSxQdC55Kz13dFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLGN0LnNpbGVudFNoaWZ0KFB0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXT09dmVbMF0mJnQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV09PXZlWzFdJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfWVsc2V7dmFyIHd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YT10LnRvdWNoRGF0YS5kcmFnRGVsdGF8fFtdO3d0Lmxlbmd0aD09PTA/KHd0LnB1c2goQWVbMF0pLHd0LnB1c2goQWVbMV0pKTood3RbMF0rPUFlWzBdLHd0WzFdKz1BZVsxXSl9aWYobihCbnx8SmUsWyJ0b3VjaG1vdmUiLCJ0YXBkcmFnIiwidm1vdXNlbW92ZSJdLFgse3g6bmVbMF0seTpuZVsxXX0pLCghQm58fCFCbi5ncmFiYmVkKCkpJiZKZSE9a2kmJihraSYma2kuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fSksSmUmJkplLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJ0YXBkcmFnb3ZlciIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19KSksdC50b3VjaERhdGEubGFzdD1KZSxmZSlmb3IodmFyIEN0PTA7Q3Q8bmUubGVuZ3RoO0N0KyspbmVbQ3RdJiZ0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW0N0XSYmRWUmJih0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwKTtpZihmZSYmKEJuPT1udWxsfHxCbi5wYW5uYWJsZSgpKSYmZ2UucGFubmluZ0VuYWJsZWQoKSYmZ2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBXZT1hKEJuLHQudG91Y2hEYXRhLnN0YXJ0cyk7V2UmJihYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9ufHwodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPW0xKHQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24pKSx0LnN3aXBlUGFubmluZz8oZ2UucGFuQnkoe3g6QWVbMF0qVSx5OkFlWzFdKlV9KSxnZS5lbWl0KCJkcmFncGFuIikpOkVlJiYodC5zd2lwZVBhbm5pbmc9ITAsZ2UucGFuQnkoe3g6QmUqVSx5OkhlKlV9KSxnZS5lbWl0KCJkcmFncGFuIiksQm4mJihCbi51bmFjdGl2YXRlKCksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnRvdWNoRGF0YS5zdGFydD1udWxsKSkpO3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFkpO25lWzBdPVRlWzBdLG5lWzFdPVRlWzFdfX1mb3IodmFyIEdlPTA7R2U8bmUubGVuZ3RoO0dlKyspdmVbR2VdPW5lW0dlXTtmZSYmWC50b3VjaGVzLmxlbmd0aD4wJiYhdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYhdC5zd2lwZVBhbm5pbmcmJnQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiE9bnVsbCYmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX19LCJ0b3VjaG1vdmVIYW5kbGVyIiksITEpO3ZhciBRO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNoY2FuY2VsIixRPW8oZnVuY3Rpb24oWCl7dmFyIGZlPXQudG91Y2hEYXRhLnN0YXJ0O3QudG91Y2hEYXRhLmNhcHR1cmU9ITEsZmUmJmZlLnVuYWN0aXZhdGUoKX0sInRvdWNoY2FuY2VsSGFuZGxlciIpKTt2YXIgYWUsdWUsY2UsdGU7aWYodC5yZWdpc3RlckJpbmRpbmcoZSwidG91Y2hlbmQiLGFlPW8oZnVuY3Rpb24oWCl7dmFyIGZlPXQudG91Y2hEYXRhLnN0YXJ0LGhlPXQudG91Y2hEYXRhLmNhcHR1cmU7aWYoaGUpWC50b3VjaGVzLmxlbmd0aD09PTAmJih0LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxYLnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIGdlPXQuc2VsZWN0aW9uO3Quc3dpcGVQYW5uaW5nPSExLHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMTt2YXIgbmU9dC5jeSx2ZT1uZS56b29tKCksVT10LnRvdWNoRGF0YS5ub3csVGU9dC50b3VjaERhdGEuZWFybGllcjtpZihYLnRvdWNoZXNbMF0pe3ZhciBpZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFkpO1VbMF09aWVbMF0sVVsxXT1pZVsxXX1pZihYLnRvdWNoZXNbMV0pe3ZhciBpZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzFdLmNsaWVudFgsWC50b3VjaGVzWzFdLmNsaWVudFkpO1VbMl09aWVbMF0sVVszXT1pZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBpZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO1VbNF09aWVbMF0sVVs1XT1pZVsxXX1mZSYmZmUudW5hY3RpdmF0ZSgpO3ZhciBFZTtpZih0LnRvdWNoRGF0YS5jeHQpe2lmKEVlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpVWzBdLHk6VVsxXX19LGZlP2ZlLmVtaXQoRWUpOm5lLmVtaXQoRWUpLCF0LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgQWU9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX07ZmU/ZmUuZW1pdChBZSk6bmUuZW1pdChBZSl9dC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHQ9ITEsdC50b3VjaERhdGEuc3RhcnQ9bnVsbCx0LnJlZHJhdygpO3JldHVybn1pZighWC50b3VjaGVzWzJdJiZuZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJnQudG91Y2hEYXRhLnNlbGVjdGluZyl7dC50b3VjaERhdGEuc2VsZWN0aW5nPSExO3ZhciBHZT1uZS5jb2xsZWN0aW9uKHQuZ2V0QWxsSW5Cb3goZ2VbMF0sZ2VbMV0sZ2VbMl0sZ2VbM10pKTtnZVswXT12b2lkIDAsZ2VbMV09dm9pZCAwLGdlWzJdPXZvaWQgMCxnZVszXT12b2lkIDAsZ2VbNF09MCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLG5lLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpYLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX0pO3ZhciBCZT1vKGZ1bmN0aW9uKGh0KXtyZXR1cm4gaHQuc2VsZWN0YWJsZSgpJiYhaHQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO0dlLmVtaXQoImJveCIpLnN0ZEZpbHRlcihCZSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IiksR2Uubm9uZW1wdHkoKSYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX1pZihmZT8udW5hY3RpdmF0ZSgpLFgudG91Y2hlc1syXSl0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7ZWxzZSBpZighWC50b3VjaGVzWzFdKXtpZighWC50b3VjaGVzWzBdKXtpZighWC50b3VjaGVzWzBdKXt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7dmFyIG1lPXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztpZihmZSE9bnVsbCl7dmFyIEhlPWZlLl9wcml2YXRlLmdyYWJiZWQ7dihtZSksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksSGUmJihmZS5lbWl0KCJmcmVlb24iKSxtZS5lbWl0KCJmcmVlIiksdC5kcmFnRGF0YS5kaWREcmFnJiYoZmUuZW1pdCgiZHJhZ2ZyZWVvbiIpLG1lLmVtaXQoImRyYWdmcmVlIikpKSxuKGZlLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxYLHt4OlVbMF0seTpVWzFdfSksZmUudW5hY3RpdmF0ZSgpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgT2U9dC5maW5kTmVhcmVzdEVsZW1lbnQoVVswXSxVWzFdLCEwLCEwKTtuKE9lLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxYLHt4OlVbMF0seTpVWzFdfSl9dmFyIGV0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0tVVswXSxidD1ldCpldCxrdD10LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLVVbMV0sdnQ9a3Qqa3QscnQ9YnQrdnQseXQ9cnQqdmUqdmU7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZHx8KGZlfHxuZS4kKCI6c2VsZWN0ZWQiKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLG4oZmUsWyJ0YXAiLCJ2Y2xpY2siXSxYLHt4OlVbMF0seTpVWzFdfSksdWU9ITEsWC50aW1lU3RhbXAtdGU8PW5lLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oY2UmJmNsZWFyVGltZW91dChjZSksdWU9ITAsdGU9bnVsbCxuKGZlLFsiZGJsdGFwIiwidmRibGNsaWNrIl0sWCx7eDpVWzBdLHk6VVsxXX0pKTooY2U9c2V0VGltZW91dChmdW5jdGlvbigpe3VlfHxuKGZlLFsib25ldGFwIiwidm9uZWNsaWNrIl0sWCx7eDpVWzBdLHk6VVsxXX0pfSxuZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpLHRlPVgudGltZVN0YW1wKSksZmUhPW51bGwmJiF0LmRyYWdEYXRhLmRpZERyYWcmJmZlLl9wcml2YXRlLnNlbGVjdGFibGUmJnl0PHQudG91Y2hUYXBUaHJlc2hvbGQyJiYhdC5waW5jaGluZyYmKG5lLnNlbGVjdGlvblR5cGUoKT09PSJzaW5nbGUiPyhuZS4kKHIpLnVubWVyZ2UoZmUpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksZmUuc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpmZS5zZWxlY3RlZCgpP2ZlLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6ZmUuc2VsZWN0KFsidGFwc2VsZWN0Il0pLHQucmVkcmF3SGludCgiZWxlcyIsITApKSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBVZT0wO1VlPFUubGVuZ3RoO1VlKyspVGVbVWVdPVVbVWVdO3QuZHJhZ0RhdGEuZGlkRHJhZz0hMSxYLnRvdWNoZXMubGVuZ3RoPT09MCYmKHQudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPVtudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sdC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx0LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFgudG91Y2hlcy5sZW5ndGg8MiYmKFgudG91Y2hlcy5sZW5ndGg9PT0xJiYodC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W1gudG91Y2hlc1swXS5jbGllbnRYLFgudG91Y2hlc1swXS5jbGllbnRZXSksdC5waW5jaGluZz0hMSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKX0sInRvdWNoZW5kSGFuZGxlciIpLCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBOZT1bXSxzZT1vKGZ1bmN0aW9uKFgpe3JldHVybntjbGllbnRYOlguY2xpZW50WCxjbGllbnRZOlguY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6WC5wb2ludGVySWQscGFnZVg6WC5wYWdlWCxwYWdlWTpYLnBhZ2VZLHJhZGl1c1g6WC53aWR0aC8yLHJhZGl1c1k6WC5oZWlnaHQvMixzY3JlZW5YOlguc2NyZWVuWCxzY3JlZW5ZOlguc2NyZWVuWSx0YXJnZXQ6WC50YXJnZXR9fSwibWFrZVRvdWNoIiksa2U9byhmdW5jdGlvbihYKXtyZXR1cm57ZXZlbnQ6WCx0b3VjaDpzZShYKX19LCJtYWtlUG9pbnRlciIpLFJlPW8oZnVuY3Rpb24oWCl7TmUucHVzaChrZShYKSl9LCJhZGRQb2ludGVyIiksQ2U9byhmdW5jdGlvbihYKXtmb3IodmFyIGZlPTA7ZmU8TmUubGVuZ3RoO2ZlKyspe3ZhciBoZT1OZVtmZV07aWYoaGUuZXZlbnQucG9pbnRlcklkPT09WC5wb2ludGVySWQpe05lLnNwbGljZShmZSwxKTtyZXR1cm59fX0sInJlbW92ZVBvaW50ZXIiKSxQZT1vKGZ1bmN0aW9uKFgpe3ZhciBmZT1OZS5maWx0ZXIoZnVuY3Rpb24oaGUpe3JldHVybiBoZS5ldmVudC5wb2ludGVySWQ9PT1YLnBvaW50ZXJJZH0pWzBdO2ZlLmV2ZW50PVgsZmUudG91Y2g9c2UoWCl9LCJ1cGRhdGVQb2ludGVyIiksSWU9byhmdW5jdGlvbihYKXtYLnRvdWNoZXM9TmUubWFwKGZ1bmN0aW9uKGZlKXtyZXR1cm4gZmUudG91Y2h9KX0sImFkZFRvdWNoZXNUb0V2ZW50IiksJGU9byhmdW5jdGlvbihYKXtyZXR1cm4gWC5wb2ludGVyVHlwZT09PSJtb3VzZSJ8fFgucG9pbnRlclR5cGU9PT00fSwicG9pbnRlcklzTW91c2UiKTt0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKHllKXskZSh5ZSl8fCh5ZS5wcmV2ZW50RGVmYXVsdCgpLFJlKHllKSxJZSh5ZSksSCh5ZSkpfSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJ1cCIsZnVuY3Rpb24oeWUpeyRlKHllKXx8KENlKHllKSxJZSh5ZSksYWUoeWUpKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJwb2ludGVyY2FuY2VsIixmdW5jdGlvbih5ZSl7JGUoeWUpfHwoQ2UoeWUpLEllKHllKSxRKHllKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKHllKXskZSh5ZSl8fCh5ZS5wcmV2ZW50RGVmYXVsdCgpLFBlKHllKSxJZSh5ZSkscSh5ZSkpfSl9fTtvaD17fTtvaC5nZW5lcmF0ZVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3RdPXtyZW5kZXJlcjp0aGlzLG5hbWU6dCxwb2ludHM6ZSxkcmF3Om8oZnVuY3Rpb24obixpLGEscyxsLHUpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicG9seWdvbiIsbixpLGEscyxsLHRoaXMucG9pbnRzKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmKXtyZXR1cm4gb2IobCx1LHRoaXMucG9pbnRzLG4saSxhLzIscy8yLGgpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYpe3JldHVybiBhaChuLGksdGhpcy5wb2ludHMsdSxoLHMsbCxbMCwtMV0sYSl9LCJjaGVja1BvaW50Iil9fTtvaC5nZW5lcmF0ZUVsbGlwc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmVsbGlwc2U9e3JlbmRlcmVyOnRoaXMsbmFtZToiZWxsaXBzZSIsZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7cmV0dXJuIGJqZShhLHMsZSxyLG4vMitsLGkvMitsKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtyZXR1cm4gcTAoZSxyLGksYSxzLGwsbil9LCJjaGVja1BvaW50Iil9fTtvaC5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbdF09e3JlbmRlcmVyOnRoaXMsbmFtZTp0LHBvaW50czplLGdldE9yQ3JlYXRlQ29ybmVyczpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgpe2lmKHVbaF0hPT12b2lkIDAmJnVbaCsiLWN4Il09PT1uJiZ1W2grIi1jeSJdPT09aSlyZXR1cm4gdVtoXTt1W2hdPW5ldyBBcnJheShlLmxlbmd0aC8yKSx1W2grIi1jeCJdPW4sdVtoKyItY3kiXT1pO3ZhciBmPWEvMixkPXMvMjtsPWw9PT0iYXV0byI/ZGdlKGEscyk6bDtmb3IodmFyIHA9bmV3IEFycmF5KGUubGVuZ3RoLzIpLG09MDttPGUubGVuZ3RoLzI7bSsrKXBbbV09e3g6bitmKmVbbSoyXSx5OmkrZCplW20qMisxXX07dmFyIGcseSx2LHgsYj1wLmxlbmd0aDtmb3IoeT1wW2ItMV0sZz0wO2c8YjtnKyspdj1wW2clYl0seD1wWyhnKzEpJWJdLHVbaF1bZ109VEIoeSx2LHgsbCkseT12LHY9eDtyZXR1cm4gdVtoXX0sImdldE9yQ3JlYXRlQ29ybmVycyIpLGRyYXc6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwoInJvdW5kLXBvbHlnb24iLG4saSxhLHMsbCx0aGlzLnBvaW50cyx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhpLGEscyxsLHUsaCwiZHJhd0Nvcm5lcnMiKSl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZixkKXtyZXR1cm4gd2plKGwsdSx0aGlzLnBvaW50cyxuLGksYSxzLGgsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnMobixpLGEscyxmLGQsImNvcm5lcnMiKSl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZixkKXtyZXR1cm4geGplKG4saSx0aGlzLnBvaW50cyx1LGgscyxsLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKHUsaCxzLGwsZixkLCJjb3JuZXJzIikpfSwiY2hlY2tQb2ludCIpfX07b2guZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbInJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJyb3VuZC1yZWN0YW5nbGUiLHBvaW50czptcyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEsdGhpcy5wb2ludHMscyl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7cmV0dXJuIGhnZShhLHMsZSxyLG4saSxsLHUpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPWkvMixmPWEvMjt1PXU9PT0iYXV0byI/UTAoaSxhKTp1LHU9TWF0aC5taW4oaCxmLHUpO3ZhciBkPXUqMjtyZXR1cm4hIShhaChlLHIsdGhpcy5wb2ludHMscyxsLGksYS1kLFswLC0xXSxuKXx8YWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLWQsYSxbMCwtMV0sbil8fHEwKGUscixkLGQscy1oK3UsbC1mK3Usbil8fHEwKGUscixkLGQscytoLXUsbC1mK3Usbil8fHEwKGUscixkLGQscytoLXUsbCtmLXUsbil8fHEwKGUscixkLGQscy1oK3UsbCtmLXUsbikpfSwiY2hlY2tQb2ludCIpfX07b2guZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJjdXQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJjdXQtcmVjdGFuZ2xlIixjb3JuZXJMZW5ndGg6dUIoKSxwb2ludHM6bXMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhLG51bGwscyl9LCJkcmF3IiksZ2VuZXJhdGVDdXRUcmlhbmdsZVB0czpvKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9YT09PSJhdXRvIj90aGlzLmNvcm5lckxlbmd0aDphLGw9ci8yLHU9ZS8yLGg9bi11LGY9bit1LGQ9aS1sLHA9aStsO3JldHVybnt0b3BMZWZ0OltoLGQrcyxoK3MsZCxoK3MsZCtzXSx0b3BSaWdodDpbZi1zLGQsZixkK3MsZi1zLGQrc10sYm90dG9tUmlnaHQ6W2YscC1zLGYtcyxwLGYtcyxwLXNdLGJvdHRvbUxlZnQ6W2grcyxwLGgscC1zLGgrcyxwLXNdfX0sImdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMiKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMobisyKmwsaSsyKmwsZSxyLHUpLGY9W10uY29uY2F0LmFwcGx5KFtdLFtoLnRvcExlZnQuc3BsaWNlKDAsNCksaC50b3BSaWdodC5zcGxpY2UoMCw0KSxoLmJvdHRvbVJpZ2h0LnNwbGljZSgwLDQpLGguYm90dG9tTGVmdC5zcGxpY2UoMCw0KV0pO3JldHVybiBvYihhLHMsZixlLHIpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPXU9PT0iYXV0byI/dGhpcy5jb3JuZXJMZW5ndGg6dTtpZihhaChlLHIsdGhpcy5wb2ludHMscyxsLGksYS0yKmgsWzAsLTFdLG4pfHxhaChlLHIsdGhpcy5wb2ludHMscyxsLGktMipoLGEsWzAsLTFdLG4pKXJldHVybiEwO3ZhciBmPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhpLGEscyxsKTtyZXR1cm4ganMoZSxyLGYudG9wTGVmdCl8fGpzKGUscixmLnRvcFJpZ2h0KXx8anMoZSxyLGYuYm90dG9tUmlnaHQpfHxqcyhlLHIsZi5ib3R0b21MZWZ0KX0sImNoZWNrUG9pbnQiKX19O29oLmdlbmVyYXRlQmFycmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5iYXJyZWw9e3JlbmRlcmVyOnRoaXMsbmFtZToiYmFycmVsIixwb2ludHM6bXMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD0uMTUsZj0uNSxkPS44NSxwPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMobisyKmwsaSsyKmwsZSxyKSxtPW8oZnVuY3Rpb24odil7dmFyIHg9eTEoe3g6dlswXSx5OnZbMV19LHt4OnZbMl0seTp2WzNdfSx7eDp2WzRdLHk6dls1XX0saCksYj15MSh7eDp2WzBdLHk6dlsxXX0se3g6dlsyXSx5OnZbM119LHt4OnZbNF0seTp2WzVdfSxmKSx3PXkxKHt4OnZbMF0seTp2WzFdfSx7eDp2WzJdLHk6dlszXX0se3g6dls0XSx5OnZbNV19LGQpO3JldHVyblt2WzBdLHZbMV0seC54LHgueSxiLngsYi55LHcueCx3Lnksdls0XSx2WzVdXX0sImFwcHJveGltYXRlQmFycmVsQ3VydmVQdHMiKSxnPVtdLmNvbmNhdChtKHAudG9wTGVmdCksbShwLnRvcFJpZ2h0KSxtKHAuYm90dG9tUmlnaHQpLG0ocC5ib3R0b21MZWZ0KSk7cmV0dXJuIG9iKGEscyxnLGUscil9LCJpbnRlcnNlY3RMaW5lIiksZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHM6byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yLzIscz1lLzIsbD1uLXMsdT1uK3MsaD1pLWEsZj1pK2EsZD1HUChlLHIpLHA9ZC5oZWlnaHRPZmZzZXQsbT1kLndpZHRoT2Zmc2V0LGc9ZC5jdHJsUHRPZmZzZXRQY3QqZSx5PXt0b3BMZWZ0OltsLGgrcCxsK2csaCxsK20saF0sdG9wUmlnaHQ6W3UtbSxoLHUtZyxoLHUsaCtwXSxib3R0b21SaWdodDpbdSxmLXAsdS1nLGYsdS1tLGZdLGJvdHRvbUxlZnQ6W2wrbSxmLGwrZyxmLGwsZi1wXX07cmV0dXJuIHkudG9wTGVmdC5pc1RvcD0hMCx5LnRvcFJpZ2h0LmlzVG9wPSEwLHkuYm90dG9tTGVmdC5pc0JvdHRvbT0hMCx5LmJvdHRvbVJpZ2h0LmlzQm90dG9tPSEwLHl9LCJnZW5lcmF0ZUJhcnJlbEJlemllclB0cyIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPUdQKGksYSksZj1oLmhlaWdodE9mZnNldCxkPWgud2lkdGhPZmZzZXQ7aWYoYWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtMipmLFswLC0xXSxuKXx8YWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLTIqZCxhLFswLC0xXSxuKSlyZXR1cm4hMDtmb3IodmFyIHA9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhpLGEscyxsKSxtPW8oZnVuY3Rpb24oUyxBLEkpe3ZhciBEPUlbNF0saz1JWzJdLFI9SVswXSxDPUlbNV0sTz1JWzFdLE49TWF0aC5taW4oRCxSKSxQPU1hdGgubWF4KEQsUiksRj1NYXRoLm1pbihDLE8pLEI9TWF0aC5tYXgoQyxPKTtpZihOPD1TJiZTPD1QJiZGPD1BJiZBPD1CKXt2YXIgRz1UamUoRCxrLFIpLHo9bWplKEdbMF0sR1sxXSxHWzJdLFMpLFc9ei5maWx0ZXIoZnVuY3Rpb24oWil7cmV0dXJuIDA8PVomJlo8PTF9KTtpZihXLmxlbmd0aD4wKXJldHVybiBXWzBdfXJldHVybiBudWxsfSwiZ2V0Q3VydmVUIiksZz1PYmplY3Qua2V5cyhwKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciB2PWdbeV0seD1wW3ZdLGI9bShlLHIseCk7aWYoYiE9bnVsbCl7dmFyIHc9eFs1XSxfPXhbM10sVD14WzFdLEU9bGEodyxfLFQsYik7aWYoeC5pc1RvcCYmRTw9cnx8eC5pc0JvdHRvbSYmcjw9RSlyZXR1cm4hMH19cmV0dXJuITF9LCJjaGVja1BvaW50Iil9fTtvaC5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1siYm90dG9tLXJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5ib3R0b21yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJib3R0b20tcm91bmQtcmVjdGFuZ2xlIixwb2ludHM6bXMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhLHRoaXMucG9pbnRzLHMpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPWUtKG4vMitsKSxmPXItKGkvMitsKSxkPWYscD1lKyhuLzIrbCksbT1OZihhLHMsZSxyLGgsZixwLGQsITEpO3JldHVybiBtLmxlbmd0aD4wP206aGdlKGEscyxlLHIsbixpLGwsdSl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dT11PT09ImF1dG8iP1EwKGksYSk6dTt2YXIgaD0yKnU7aWYoYWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtaCxbMCwtMV0sbil8fGFoKGUscix0aGlzLnBvaW50cyxzLGwsaS1oLGEsWzAsLTFdLG4pKXJldHVybiEwO3ZhciBmPWkvMisyKm4sZD1hLzIrMipuLHA9W3MtZixsLWQscy1mLGwscytmLGwscytmLGwtZF07cmV0dXJuISEoanMoZSxyLHApfHxxMChlLHIsaCxoLHMraS8yLXUsbCthLzItdSxuKXx8cTAoZSxyLGgsaCxzLWkvMit1LGwrYS8yLXUsbikpfSwiY2hlY2tQb2ludCIpfX07b2gucmVnaXN0ZXJOb2RlU2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ub2RlU2hhcGVzPXt9LGU9dGhpczt0aGlzLmdlbmVyYXRlRWxsaXBzZSgpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0cmlhbmdsZSIsbXMoMywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdHJpYW5nbGUiLG1zKDMsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyZWN0YW5nbGUiLG1zKDQsMCkpLHQuc3F1YXJlPXQucmVjdGFuZ2xlLHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVDdXRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQmFycmVsKCksdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7e3ZhciByPVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oImRpYW1vbmQiLHIpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWRpYW1vbmQiLHIpfXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJwZW50YWdvbiIsbXMoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtcGVudGFnb24iLG1zKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXhhZ29uIixtcyg2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXhhZ29uIixtcyg2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGVwdGFnb24iLG1zKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhlcHRhZ29uIixtcyg3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigib2N0YWdvbiIsbXMoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtb2N0YWdvbiIsbXMoOCwwKSk7dmFyIG49bmV3IEFycmF5KDIwKTt7dmFyIGk9elAoNSwwKSxhPXpQKDUsTWF0aC5QSS81KSxzPS41KigzLU1hdGguc3FydCg1KSk7cyo9MS41Nztmb3IodmFyIGw9MDtsPGEubGVuZ3RoLzI7bCsrKWFbbCoyXSo9cyxhW2wqMisxXSo9cztmb3IodmFyIGw9MDtsPDIwLzQ7bCsrKW5bbCo0XT1pW2wqMl0sbltsKjQrMV09aVtsKjIrMV0sbltsKjQrMl09YVtsKjJdLG5bbCo0KzNdPWFbbCoyKzFdfW49ZmdlKG4pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJzdGFyIixuKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidmVlIixbLTEsLTEsMCwtLjMzMywxLC0xLDAsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaG9tYm9pZCIsWy0xLC0xLC4zMzMsLTEsMSwxLC0uMzMzLDFdKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmlnaHQtcmhvbWJvaWQiLFstLjMzMywtMSwxLC0xLC4zMzMsMSwtMSwxXSksdGhpcy5ub2RlU2hhcGVzLmNvbmNhdmVoZXhhZ29uPXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJjb25jYXZlLWhleGFnb24iLFstMSwtLjk1LC0uNzUsMCwtMSwuOTUsMSwuOTUsLjc1LDAsMSwtLjk1XSk7e3ZhciB1PVstMSwtMSwuMjUsLTEsMSwwLC4yNSwxLC0xLDFdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0YWciLHUpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRhZyIsdSl9dC5tYWtlUG9seWdvbj1mdW5jdGlvbihoKXt2YXIgZj1oLmpvaW4oIiQiKSxkPSJwb2x5Z29uLSIrZixwO3JldHVybihwPXRoaXNbZF0pP3A6ZS5nZW5lcmF0ZVBvbHlnb24oZCxoKX19O2JiPXt9O2JiLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fTtiYi5yZWRyYXc9ZnVuY3Rpb24odCl7dD10fHxzZ2UoKTt2YXIgZT10aGlzO2UuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJihlLmF2ZXJhZ2VSZWRyYXdUaW1lPTApLGUubGFzdFJlZHJhd1RpbWU9PT12b2lkIDAmJihlLmxhc3RSZWRyYXdUaW1lPTApLGUubGFzdERyYXdUaW1lPT09dm9pZCAwJiYoZS5sYXN0RHJhd1RpbWU9MCksZS5yZXF1ZXN0ZWRGcmFtZT0hMCxlLnJlbmRlck9wdGlvbnM9dH07YmIuYmVmb3JlUmVuZGVyPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuZGVzdHJveWVkKXtlPT1udWxsJiZkaSgiUHJpb3JpdHkgaXMgbm90IG9wdGlvbmFsIGZvciBiZWZvcmVSZW5kZXIiKTt2YXIgcj10aGlzLmJlZm9yZVJlbmRlckNhbGxiYWNrcztyLnB1c2goe2ZuOnQscHJpb3JpdHk6ZX0pLHIuc29ydChmdW5jdGlvbihuLGkpe3JldHVybiBpLnByaW9yaXR5LW4ucHJpb3JpdHl9KX19O1JtZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9ZS5iZWZvcmVSZW5kZXJDYWxsYmFja3MsYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV0uZm4ocixuKX0sImJlZm9yZVJlbmRlckNhbGxiYWNrcyIpO2JiLnN0YXJ0UmVuZGVyTG9vcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmN5O2lmKCF0LnJlbmRlckxvb3BTdGFydGVkKXt0LnJlbmRlckxvb3BTdGFydGVkPSEwO3ZhciByPW8oZnVuY3Rpb24gbihpKXtpZighdC5kZXN0cm95ZWQpe2lmKCFlLmJhdGNoaW5nKCkpaWYodC5yZXF1ZXN0ZWRGcmFtZSYmIXQuc2tpcEZyYW1lKXtSbWUodCwhMCxpKTt2YXIgYT1paCgpO3QucmVuZGVyKHQucmVuZGVyT3B0aW9ucyk7dmFyIHM9dC5sYXN0RHJhd1RpbWU9aWgoKTt0LmF2ZXJhZ2VSZWRyYXdUaW1lPT09dm9pZCAwJiYodC5hdmVyYWdlUmVkcmF3VGltZT1zLWEpLHQucmVkcmF3Q291bnQ9PT12b2lkIDAmJih0LnJlZHJhd0NvdW50PTApLHQucmVkcmF3Q291bnQrKyx0LnJlZHJhd1RvdGFsVGltZT09PXZvaWQgMCYmKHQucmVkcmF3VG90YWxUaW1lPTApO3ZhciBsPXMtYTt0LnJlZHJhd1RvdGFsVGltZSs9bCx0Lmxhc3RSZWRyYXdUaW1lPWwsdC5hdmVyYWdlUmVkcmF3VGltZT10LmF2ZXJhZ2VSZWRyYXdUaW1lLzIrbC8yLHQucmVxdWVzdGVkRnJhbWU9ITF9ZWxzZSBSbWUodCwhMSxpKTt0LnNraXBGcmFtZT0hMSxBNihuKX19LCJyZW5kZXJGbiIpO0E2KHIpfX07bmV0PW8oZnVuY3Rpb24oZSl7dGhpcy5pbml0KGUpfSwiQmFzZVJlbmRlcmVyIiksaDFlPW5ldCxNMT1oMWUucHJvdG90eXBlO00xLmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdO00xLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm9wdGlvbnM9dCxlLmN5PXQuY3k7dmFyIHI9ZS5jb250YWluZXI9dC5jeS5jb250YWluZXIoKSxuPWUuY3kud2luZG93KCk7aWYobil7dmFyIGk9bi5kb2N1bWVudCxhPWkuaGVhZCxzPSJfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQiLGw9Il9fX19fX19fX19jeXRvc2NhcGVfY29udGFpbmVyIix1PWkuZ2V0RWxlbWVudEJ5SWQocykhPW51bGw7aWYoci5jbGFzc05hbWUuaW5kZXhPZihsKTwwJiYoci5jbGFzc05hbWU9KHIuY2xhc3NOYW1lfHwiIikrIiAiK2wpLCF1KXt2YXIgaD1pLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aC5pZD1zLGgudGV4dENvbnRlbnQ9Ii4iK2wrIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsYS5pbnNlcnRCZWZvcmUoaCxhLmNoaWxkcmVuWzBdKX12YXIgZj1uLmdldENvbXB1dGVkU3R5bGUociksZD1mLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7ZD09PSJzdGF0aWMiJiZvbigiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1lLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLGUuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxlLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxlLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sZS50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sZS5yZWRyYXdzPTAsZS5zaG93RnBzPXQuc2hvd0ZwcyxlLmRlYnVnPXQuZGVidWcsZS5oaWRlRWRnZXNPblZpZXdwb3J0PXQuaGlkZUVkZ2VzT25WaWV3cG9ydCxlLnRleHR1cmVPblZpZXdwb3J0PXQudGV4dHVyZU9uVmlld3BvcnQsZS53aGVlbFNlbnNpdGl2aXR5PXQud2hlZWxTZW5zaXRpdml0eSxlLm1vdGlvbkJsdXJFbmFibGVkPXQubW90aW9uQmx1cixlLmZvcmNlZFBpeGVsUmF0aW89eHQodC5waXhlbFJhdGlvKT90LnBpeGVsUmF0aW86bnVsbCxlLm1vdGlvbkJsdXI9dC5tb3Rpb25CbHVyLGUubW90aW9uQmx1ck9wYWNpdHk9dC5tb3Rpb25CbHVyT3BhY2l0eSxlLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3k9MS1lLm1vdGlvbkJsdXJPcGFjaXR5LGUubW90aW9uQmx1clB4UmF0aW89MSxlLm1iUHhSQmx1cnJ5PTEsZS5taW5NYkxvd1F1YWxGcmFtZXM9NCxlLmZ1bGxRdWFsaXR5TWI9ITEsZS5jbGVhcmVkRm9yTW90aW9uQmx1cj1bXSxlLmRlc2t0b3BUYXBUaHJlc2hvbGQ9dC5kZXNrdG9wVGFwVGhyZXNob2xkLGUuZGVza3RvcFRhcFRocmVzaG9sZDI9dC5kZXNrdG9wVGFwVGhyZXNob2xkKnQuZGVza3RvcFRhcFRocmVzaG9sZCxlLnRvdWNoVGFwVGhyZXNob2xkPXQudG91Y2hUYXBUaHJlc2hvbGQsZS50b3VjaFRhcFRocmVzaG9sZDI9dC50b3VjaFRhcFRocmVzaG9sZCp0LnRvdWNoVGFwVGhyZXNob2xkLGUudGFwaG9sZER1cmF0aW9uPTUwMCxlLmJpbmRpbmdzPVtdLGUuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzPVtdLGUuYmVmb3JlUmVuZGVyUHJpb3JpdGllcz17YW5pbWF0aW9uczo0MDAsZWxlQ2FsY3M6MzAwLGVsZVR4ckRlcToyMDAsbHlyVHhyRGVxOjE1MCxseXJUeHJTa2lwOjEwMH0sZS5yZWdpc3Rlck5vZGVTaGFwZXMoKSxlLnJlZ2lzdGVyQXJyb3dTaGFwZXMoKSxlLnJlZ2lzdGVyQ2FsY3VsYXRpb25MaXN0ZW5lcnMoKX07TTEubm90aWZ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3k7aWYoIXRoaXMuZGVzdHJveWVkKXtpZih0PT09ImluaXQiKXtyLmxvYWQoKTtyZXR1cm59aWYodD09PSJkZXN0cm95Iil7ci5kZXN0cm95KCk7cmV0dXJufSh0PT09ImFkZCJ8fHQ9PT0icmVtb3ZlInx8dD09PSJtb3ZlIiYmbi5oYXNDb21wb3VuZE5vZGVzKCl8fHQ9PT0ibG9hZCJ8fHQ9PT0iem9yZGVyInx8dD09PSJtb3VudCIpJiZyLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcygpLHQ9PT0idmlld3BvcnQiJiZyLnJlZHJhd0hpbnQoInNlbGVjdCIsITApLCh0PT09ImxvYWQifHx0PT09InJlc2l6ZSJ8fHQ9PT0ibW91bnQiKSYmKHIuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksci5tYXRjaENhbnZhc1NpemUoci5jb250YWluZXIpKSxyLnJlZHJhd0hpbnQoImVsZXMiLCEwKSxyLnJlZHJhd0hpbnQoImRyYWciLCEwKSx0aGlzLnN0YXJ0UmVuZGVyTG9vcCgpLHRoaXMucmVkcmF3KCl9fTtNMS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmRlc3Ryb3llZD0hMCx0LmN5LnN0b3BBbmltYXRpb25Mb29wKCk7Zm9yKHZhciBlPTA7ZTx0LmJpbmRpbmdzLmxlbmd0aDtlKyspe3ZhciByPXQuYmluZGluZ3NbZV0sbj1yLGk9bi50YXJnZXQ7KGkub2ZmfHxpLnJlbW92ZUV2ZW50TGlzdGVuZXIpLmFwcGx5KGksbi5hcmdzKX1pZih0LmJpbmRpbmdzPVtdLHQuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzPVtdLHQub25VcGRhdGVFbGVDYWxjc0Zucz1bXSx0LnJlbW92ZU9ic2VydmVyJiZ0LnJlbW92ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0LnN0eWxlT2JzZXJ2ZXImJnQuc3R5bGVPYnNlcnZlci5kaXNjb25uZWN0KCksdC5yZXNpemVPYnNlcnZlciYmdC5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdC5sYWJlbENhbGNEaXYpdHJ5e2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodC5sYWJlbENhbGNEaXYpfWNhdGNoe319O00xLmlzSGVhZGxlc3M9ZnVuY3Rpb24oKXtyZXR1cm4hMX07W3dCLGMxZSx1MWUsUjEsb2gsYmJdLmZvckVhY2goZnVuY3Rpb24odCl7aXIoTTEsdCl9KTtQUD0xZTMvNjAsZjFlPXtzZXR1cERlcXVldWVpbmc6byhmdW5jdGlvbihlKXtyZXR1cm4gbyhmdW5jdGlvbigpe3ZhciBuPXRoaXMsaT10aGlzLnJlbmRlcmVyO2lmKCFuLmRlcXVldWVpbmdTZXR1cCl7bi5kZXF1ZXVlaW5nU2V0dXA9ITA7dmFyIGE9ejYoZnVuY3Rpb24oKXtpLnJlZHJhd0hpbnQoImVsZXMiLCEwKSxpLnJlZHJhd0hpbnQoImRyYWciLCEwKSxpLnJlZHJhdygpfSxlLmRlcVJlZHJhd1RocmVzaG9sZCkscz1vKGZ1bmN0aW9uKGgsZil7dmFyIGQ9aWgoKSxwPWkuYXZlcmFnZVJlZHJhd1RpbWUsbT1pLmxhc3RSZWRyYXdUaW1lLGc9W10seT1pLmN5LmV4dGVudCgpLHY9aS5nZXRQaXhlbFJhdGlvKCk7Zm9yKGh8fGkuZmx1c2hSZW5kZXJlZFN0eWxlUXVldWUoKTs7KXt2YXIgeD1paCgpLGI9eC1kLHc9eC1mO2lmKG08UFApe3ZhciBfPVBQLShoP3A6MCk7aWYodz49ZS5kZXFGYXN0Q29zdCpfKWJyZWFrfWVsc2UgaWYoaCl7aWYoYj49ZS5kZXFDb3N0Km18fGI+PWUuZGVxQXZnQ29zdCpwKWJyZWFrfWVsc2UgaWYodz49ZS5kZXFOb0RyYXdDb3N0KlBQKWJyZWFrO3ZhciBUPWUuZGVxKG4sdix5KTtpZihULmxlbmd0aD4wKWZvcih2YXIgRT0wO0U8VC5sZW5ndGg7RSsrKWcucHVzaChUW0VdKTtlbHNlIGJyZWFrfWcubGVuZ3RoPjAmJihlLm9uRGVxZChuLGcpLCFoJiZlLnNob3VsZFJlZHJhdyhuLGcsdix5KSYmYSgpKX0sImRlcXVldWUiKSxsPWUucHJpb3JpdHl8fHNCO2kuYmVmb3JlUmVuZGVyKHMsbChuKSl9fSwic2V0dXBEZXF1ZXVlaW5nSW1wbCIpfSwic2V0dXBEZXF1ZXVlaW5nIil9LGlldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOl82O3RCKHRoaXMsdCksdGhpcy5pZHNCeUtleT1uZXcgSmMsdGhpcy5rZXlGb3JJZD1uZXcgSmMsdGhpcy5jYWNoZXNCeUx2bD1uZXcgSmMsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWUsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT1yfXJldHVybiBvKHQsIkVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAiKSxyQih0LFt7a2V5OiJnZXRJZHNGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7cj09bnVsbCYmZGkoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIG49dGhpcy5pZHNCeUtleSxpPXRoaXMuaWRzQnlLZXkuZ2V0KHIpO3JldHVybiBpfHwoaT1uZXcgUzEsbi5zZXQocixpKSksaX0sImdldElkc0ZvciIpfSx7a2V5OiJhZGRJZEZvcktleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3IhPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHIpLmFkZChuKX0sImFkZElkRm9yS2V5Iil9LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7ciE9bnVsbCYmdGhpcy5nZXRJZHNGb3IocikuZGVsZXRlKG4pfSwiZGVsZXRlSWRGb3JLZXkiKX0se2tleToiZ2V0TnVtYmVyT2ZJZHNGb3JLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/MDp0aGlzLmdldElkc0ZvcihyKS5zaXplfSwiZ2V0TnVtYmVyT2ZJZHNGb3JLZXkiKX0se2tleToidXBkYXRlS2V5TWFwcGluZ0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKSxhPXRoaXMuZ2V0S2V5KHIpO3RoaXMuZGVsZXRlSWRGb3JLZXkoaSxuKSx0aGlzLmFkZElkRm9yS2V5KGEsbiksdGhpcy5rZXlGb3JJZC5zZXQobixhKX0sInVwZGF0ZUtleU1hcHBpbmdGb3IiKX0se2tleToiZGVsZXRlS2V5TWFwcGluZ0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKTt0aGlzLmRlbGV0ZUlkRm9yS2V5KGksbiksdGhpcy5rZXlGb3JJZC5kZWxldGUobil9LCJkZWxldGVLZXlNYXBwaW5nRm9yIil9LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobiksYT10aGlzLmdldEtleShyKTtyZXR1cm4gaSE9PWF9LCJrZXlIYXNDaGFuZ2VkRm9yIil9LHtrZXk6ImlzSW52YWxpZCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHIpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHIpfSwiaXNJbnZhbGlkIil9LHtrZXk6ImdldENhY2hlc0F0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuY2FjaGVzQnlMdmwsaT10aGlzLmx2bHMsYT1uLmdldChyKTtyZXR1cm4gYXx8KGE9bmV3IEpjLG4uc2V0KHIsYSksaS5wdXNoKHIpKSxhfSwiZ2V0Q2FjaGVzQXQiKX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChuKS5nZXQocil9LCJnZXRDYWNoZSIpfSx7a2V5OiJnZXQiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldEtleShyKSxhPXRoaXMuZ2V0Q2FjaGUoaSxuKTtyZXR1cm4gYSE9bnVsbCYmdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKHIpLGF9LCJnZXQiKX0se2tleToiZ2V0Rm9yQ2FjaGVkS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5rZXlGb3JJZC5nZXQoci5pZCgpKSxhPXRoaXMuZ2V0Q2FjaGUoaSxuKTtyZXR1cm4gYX0sImdldEZvckNhY2hlZEtleSIpfSx7a2V5OiJoYXNDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLmdldENhY2hlc0F0KG4pLmhhcyhyKX0sImhhc0NhY2hlIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0S2V5KHIpO3JldHVybiB0aGlzLmhhc0NhY2hlKGksbil9LCJoYXMiKX0se2tleToic2V0Q2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe2kua2V5PXIsdGhpcy5nZXRDYWNoZXNBdChuKS5zZXQocixpKX0sInNldENhY2hlIil9LHtrZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9dGhpcy5nZXRLZXkocik7dGhpcy5zZXRDYWNoZShhLG4saSksdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKHIpfSwic2V0Iil9LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dGhpcy5nZXRDYWNoZXNBdChuKS5kZWxldGUocil9LCJkZWxldGVDYWNoZSIpfSx7a2V5OiJkZWxldGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldEtleShyKTt0aGlzLmRlbGV0ZUNhY2hlKGksbil9LCJfZGVsZXRlIil9LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLmx2bHMuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gbi5kZWxldGVDYWNoZShyLGkpfSl9LCJpbnZhbGlkYXRlS2V5Iil9LHtrZXk6ImludmFsaWRhdGUiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobik7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHIpO3ZhciBhPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkocik7cmV0dXJuIGEmJnRoaXMuaW52YWxpZGF0ZUtleShpKSxhfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KGkpPT09MH0sImludmFsaWRhdGUiKX1dKSx0fSgpLE1tZT0yNSxnNj01MCxTNj0tNCxRUD0zLGFldD03Ljk5LHNldD04LG9ldD0xMDI0LGNldD0xMDI0LHVldD0xMDI0LGhldD0uMixmZXQ9LjgsZGV0PTEwLHBldD0uMTUsbWV0PS4xLGdldD0uOSx5ZXQ9LjksdmV0PTEwMCx4ZXQ9MSxnMT17ZGVxdWV1ZToiZGVxdWV1ZSIsZG93bnNjYWxlOiJkb3duc2NhbGUiLGhpZ2hRdWFsaXR5OiJoaWdoUXVhbGl0eSJ9LGJldD1fYSh7Z2V0S2V5Om51bGwsZG9lc0VsZUludmFsaWRhdGVLZXk6XzYsZHJhd0VsZW1lbnQ6bnVsbCxnZXRCb3VuZGluZ0JveDpudWxsLGdldFJvdGF0aW9uUG9pbnQ6bnVsbCxnZXRSb3RhdGlvbk9mZnNldDpudWxsLGlzVmlzaWJsZTpuZ2UsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSxKeD1vKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztuLnJlbmRlcmVyPWUsbi5vbkRlcXVldWVzPVtdO3ZhciBpPWJldChyKTtpcihuLGkpLG4ubG9va3VwPW5ldyBpZXQoaS5nZXRLZXksaS5kb2VzRWxlSW52YWxpZGF0ZUtleSksbi5zZXR1cERlcXVldWVpbmcoKX0sIkVsZW1lbnRUZXh0dXJlQ2FjaGUiKSxRaT1KeC5wcm90b3R5cGU7UWkucmVhc29ucz1nMTtRaS5nZXRUZXh0dXJlUXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZS5lbGVJbWdDYWNoZXM9ZS5lbGVJbWdDYWNoZXN8fHt9LGUuZWxlSW1nQ2FjaGVzW3RdPWUuZWxlSW1nQ2FjaGVzW3RdfHxbXX07UWkuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5lbGVJbWdDYWNoZXMucmV0aXJlZD1lLmVsZUltZ0NhY2hlcy5yZXRpcmVkfHx7fSxuPXJbdF09clt0XXx8W107cmV0dXJuIG59O1FpLmdldEVsZW1lbnRRdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmVsZUNhY2hlUXVldWU9dC5lbGVDYWNoZVF1ZXVlfHxuZXcgZ2IoZnVuY3Rpb24ocixuKXtyZXR1cm4gbi5yZXFzLXIucmVxc30pO3JldHVybiBlfTtRaS5nZXRFbGVtZW50S2V5VG9RdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmVsZUtleVRvQ2FjaGVRdWV1ZT10LmVsZUtleVRvQ2FjaGVRdWV1ZXx8e307cmV0dXJuIGV9O1FpLmdldEVsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLHM9dGhpcy5yZW5kZXJlcixsPXMuY3kuem9vbSgpLHU9dGhpcy5sb29rdXA7aWYoIWV8fGUudz09PTB8fGUuaD09PTB8fGlzTmFOKGUudyl8fGlzTmFOKGUuaCl8fCF0LnZpc2libGUoKXx8dC5yZW1vdmVkKCl8fCFhLmFsbG93RWRnZVR4ckNhY2hpbmcmJnQuaXNFZGdlKCl8fCFhLmFsbG93UGFyZW50VHhyQ2FjaGluZyYmdC5pc1BhcmVudCgpKXJldHVybiBudWxsO2lmKG49PW51bGwmJihuPU1hdGguY2VpbChsQihsKnIpKSksbjxTNiluPVM2O2Vsc2UgaWYobD49YWV0fHxuPlFQKXJldHVybiBudWxsO3ZhciBoPU1hdGgucG93KDIsbiksZj1lLmgqaCxkPWUudypoLHA9cy5lbGVUZXh0QmlnZ2VyVGhhbk1pbih0LGgpO2lmKCF0aGlzLmlzVmlzaWJsZSh0LHApKXJldHVybiBudWxsO3ZhciBtPXUuZ2V0KHQsbik7aWYobSYmbS5pbnZhbGlkYXRlZCYmKG0uaW52YWxpZGF0ZWQ9ITEsbS50ZXh0dXJlLmludmFsaWRhdGVkV2lkdGgtPW0ud2lkdGgpLG0pcmV0dXJuIG07dmFyIGc7aWYoZjw9TW1lP2c9TW1lOmY8PWc2P2c9ZzY6Zz1NYXRoLmNlaWwoZi9nNikqZzYsZj51ZXR8fGQ+Y2V0KXJldHVybiBudWxsO3ZhciB5PWEuZ2V0VGV4dHVyZVF1ZXVlKGcpLHY9eVt5Lmxlbmd0aC0yXSx4PW8oZnVuY3Rpb24oKXtyZXR1cm4gYS5yZWN5Y2xlVGV4dHVyZShnLGQpfHxhLmFkZFRleHR1cmUoZyxkKX0sImFkZE5ld1R4ciIpO3Z8fCh2PXlbeS5sZW5ndGgtMV0pLHZ8fCh2PXgoKSksdi53aWR0aC12LnVzZWRXaWR0aDxkJiYodj14KCkpO2Zvcih2YXIgYj1vKGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLnNjYWxlZExhYmVsU2hvd249PT1wfSwic2NhbGFibGVGcm9tIiksdz1pJiZpPT09ZzEuZGVxdWV1ZSxfPWkmJmk9PT1nMS5oaWdoUXVhbGl0eSxUPWkmJmk9PT1nMS5kb3duc2NhbGUsRSxMPW4rMTtMPD1RUDtMKyspe3ZhciBTPXUuZ2V0KHQsTCk7aWYoUyl7RT1TO2JyZWFrfX12YXIgQT1FJiZFLmxldmVsPT09bisxP0U6bnVsbCxJPW8oZnVuY3Rpb24oKXt2LmNvbnRleHQuZHJhd0ltYWdlKEEudGV4dHVyZS5jYW52YXMsQS54LDAsQS53aWR0aCxBLmhlaWdodCx2LnVzZWRXaWR0aCwwLGQsZil9LCJkb3duc2NhbGUiKTtpZih2LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx2LmNvbnRleHQuY2xlYXJSZWN0KHYudXNlZFdpZHRoLDAsZCxnKSxiKEEpKUkoKTtlbHNlIGlmKGIoRSkpaWYoXyl7Zm9yKHZhciBEPUUubGV2ZWw7RD5uO0QtLSlBPWEuZ2V0RWxlbWVudCh0LGUscixELGcxLmRvd25zY2FsZSk7SSgpfWVsc2UgcmV0dXJuIGEucXVldWVFbGVtZW50KHQsRS5sZXZlbC0xKSxFO2Vsc2V7dmFyIGs7aWYoIXcmJiFfJiYhVClmb3IodmFyIFI9bi0xO1I+PVM2O1ItLSl7dmFyIEM9dS5nZXQodCxSKTtpZihDKXtrPUM7YnJlYWt9fWlmKGIoaykpcmV0dXJuIGEucXVldWVFbGVtZW50KHQsbiksazt2LmNvbnRleHQudHJhbnNsYXRlKHYudXNlZFdpZHRoLDApLHYuY29udGV4dC5zY2FsZShoLGgpLHRoaXMuZHJhd0VsZW1lbnQodi5jb250ZXh0LHQsZSxwLCExKSx2LmNvbnRleHQuc2NhbGUoMS9oLDEvaCksdi5jb250ZXh0LnRyYW5zbGF0ZSgtdi51c2VkV2lkdGgsMCl9cmV0dXJuIG09e3g6di51c2VkV2lkdGgsdGV4dHVyZTp2LGxldmVsOm4sc2NhbGU6aCx3aWR0aDpkLGhlaWdodDpmLHNjYWxlZExhYmVsU2hvd246cH0sdi51c2VkV2lkdGgrPU1hdGguY2VpbChkK3NldCksdi5lbGVDYWNoZXMucHVzaChtKSx1LnNldCh0LG4sbSksYS5jaGVja1RleHR1cmVGdWxsbmVzcyh2KSxtfTtRaS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh0W2VdKX07UWkuaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubG9va3VwLG49W10saT1yLmlzSW52YWxpZCh0KTtpZihpKXtmb3IodmFyIGE9UzY7YTw9UVA7YSsrKXt2YXIgcz1yLmdldEZvckNhY2hlZEtleSh0LGEpO3MmJm4ucHVzaChzKX12YXIgbD1yLmludmFsaWRhdGUodCk7aWYobClmb3IodmFyIHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XSxmPWgudGV4dHVyZTtmLmludmFsaWRhdGVkV2lkdGgrPWgud2lkdGgsaC5pbnZhbGlkYXRlZD0hMCxlLmNoZWNrVGV4dHVyZVV0aWxpdHkoZil9ZS5yZW1vdmVGcm9tUXVldWUodCl9fTtRaS5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHQpe3QuaW52YWxpZGF0ZWRXaWR0aD49aGV0KnQud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh0KX07UWkuY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2V0VGV4dHVyZVF1ZXVlKHQuaGVpZ2h0KTt0LnVzZWRXaWR0aC90LndpZHRoPmZldCYmdC5mdWxsbmVzc0NoZWNrcz49ZGV0P09mKHIsdCk6dC5mdWxsbmVzc0NoZWNrcysrfTtRaS5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmhlaWdodCxuPWUuZ2V0VGV4dHVyZVF1ZXVlKHIpLGk9dGhpcy5sb29rdXA7T2Yobix0KSx0LnJldGlyZWQ9ITA7Zm9yKHZhciBhPXQuZWxlQ2FjaGVzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTtpLmRlbGV0ZUNhY2hlKGwua2V5LGwubGV2ZWwpfW9CKGEpO3ZhciB1PWUuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZShyKTt1LnB1c2godCl9O1FpLmFkZFRleHR1cmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZXRUZXh0dXJlUXVldWUodCksaT17fTtyZXR1cm4gbi5wdXNoKGkpLGkuZWxlQ2FjaGVzPVtdLGkuaGVpZ2h0PXQsaS53aWR0aD1NYXRoLm1heChvZXQsZSksaS51c2VkV2lkdGg9MCxpLmludmFsaWRhdGVkV2lkdGg9MCxpLmZ1bGxuZXNzQ2hlY2tzPTAsaS5jYW52YXM9ci5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKGkud2lkdGgsaS5oZWlnaHQpLGkuY29udGV4dD1pLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLGl9O1FpLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMsbj1yLmdldFRleHR1cmVRdWV1ZSh0KSxpPXIuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0KSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYocy53aWR0aD49ZSlyZXR1cm4gcy5yZXRpcmVkPSExLHMudXNlZFdpZHRoPTAscy5pbnZhbGlkYXRlZFdpZHRoPTAscy5mdWxsbmVzc0NoZWNrcz0wLG9CKHMuZWxlQ2FjaGVzKSxzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxzLndpZHRoLHMuaGVpZ2h0KSxPZihpLHMpLG4ucHVzaChzKSxzfX07UWkucXVldWVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2V0RWxlbWVudFF1ZXVlKCksaT1yLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksYT10aGlzLmdldEtleSh0KSxzPWlbYV07aWYocylzLmxldmVsPU1hdGgubWF4KHMubGV2ZWwsZSkscy5lbGVzLm1lcmdlKHQpLHMucmVxcysrLG4udXBkYXRlSXRlbShzKTtlbHNle3ZhciBsPXtlbGVzOnQuc3Bhd24oKS5tZXJnZSh0KSxsZXZlbDplLHJlcXM6MSxrZXk6YX07bi5wdXNoKGwpLGlbYV09bH19O1FpLmRlcXVldWU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLmdldEVsZW1lbnRRdWV1ZSgpLG49ZS5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGk9W10sYT1lLmxvb2t1cCxzPTA7czx4ZXQmJnIuc2l6ZSgpPjA7cysrKXt2YXIgbD1yLnBvcCgpLHU9bC5rZXksaD1sLmVsZXNbMF0sZj1hLmhhc0NhY2hlKGgsbC5sZXZlbCk7aWYoblt1XT1udWxsLGYpY29udGludWU7aS5wdXNoKGwpO3ZhciBkPWUuZ2V0Qm91bmRpbmdCb3goaCk7ZS5nZXRFbGVtZW50KGgsZCx0LGwubGV2ZWwsZzEuZGVxdWV1ZSl9cmV0dXJuIGl9O1FpLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZXRFbGVtZW50UXVldWUoKSxuPWUuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxpPXRoaXMuZ2V0S2V5KHQpLGE9bltpXTthIT1udWxsJiYoYS5lbGVzLmxlbmd0aD09PTE/KGEucmVxcz1hQixyLnVwZGF0ZUl0ZW0oYSksci5wb3AoKSxuW2ldPW51bGwpOmEuZWxlcy51bm1lcmdlKHQpKX07UWkub25EZXF1ZXVlPWZ1bmN0aW9uKHQpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHQpfTtRaS5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHQpe09mKHRoaXMub25EZXF1ZXVlcyx0KX07UWkuc2V0dXBEZXF1ZXVlaW5nPWYxZS5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDp2ZXQsZGVxQ29zdDpwZXQsZGVxQXZnQ29zdDptZXQsZGVxTm9EcmF3Q29zdDpnZXQsZGVxRmFzdENvc3Q6eWV0LGRlcTpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZS5kZXF1ZXVlKHIsbil9LCJkZXEiKSxvbkRlcWQ6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5vbkRlcXVldWVzLmxlbmd0aDtuKyspe3ZhciBpPWUub25EZXF1ZXVlc1tuXTtpKHIpfX0sIm9uRGVxZCIpLHNob3VsZFJlZHJhdzpvKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgcz1yW2FdLmVsZXMsbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLmJvdW5kaW5nQm94KCk7aWYoY0IodSxpKSlyZXR1cm4hMH1yZXR1cm4hMX0sInNob3VsZFJlZHJhdyIpLHByaW9yaXR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9LCJwcmlvcml0eSIpfSk7d2V0PTEsdGI9LTQsUDY9MixUZXQ9My45OSxrZXQ9NTAsRWV0PTUwLENldD0uMTUsQWV0PS4xLF9ldD0uOSxMZXQ9LjksRGV0PTEsSW1lPTI1MCxOZXQ9NGUzKjRlMyxSZXQ9ITAsZDFlPW8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIucmVuZGVyZXI9ZSxpPW4uY3k7ci5sYXllcnNCeUxldmVsPXt9LHIuZmlyc3RHZXQ9ITAsci5sYXN0SW52YWxpZGF0aW9uVGltZT1paCgpLTIqSW1lLHIuc2tpcHBpbmc9ITEsci5lbGVUeHJEZXFzPWkuY29sbGVjdGlvbigpLHIuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD16NihmdW5jdGlvbigpe3IucmVmaW5lRWxlbWVudFRleHR1cmVzKHIuZWxlVHhyRGVxcyksci5lbGVUeHJEZXFzLnVubWVyZ2Uoci5lbGVUeHJEZXFzKX0sRWV0KSxuLmJlZm9yZVJlbmRlcihmdW5jdGlvbihzLGwpe2wtci5sYXN0SW52YWxpZGF0aW9uVGltZTw9SW1lP3Iuc2tpcHBpbmc9ITA6ci5za2lwcGluZz0hMX0sbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4clNraXApO3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gdS5yZXFzLWwucmVxc30sInFTb3J0Iik7ci5sYXllcnNRdWV1ZT1uZXcgZ2IoYSksci5zZXR1cERlcXVldWVpbmcoKX0sIkxheWVyZWRUZXh0dXJlQ2FjaGUiKSxMYT1kMWUucHJvdG90eXBlLE9tZT0wLE1ldD1NYXRoLnBvdygyLDUzKS0xO0xhLm1ha2VMYXllcj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucG93KDIsZSksbj1NYXRoLmNlaWwodC53KnIpLGk9TWF0aC5jZWlsKHQuaCpyKSxhPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhuLGkpLHM9e2lkOk9tZT0rK09tZSVNZXQsYmI6dCxsZXZlbDplLHdpZHRoOm4saGVpZ2h0OmksY2FudmFzOmEsY29udGV4dDphLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSxsPXMuY29udGV4dCx1PS1zLmJiLngxLGg9LXMuYmIueTE7cmV0dXJuIGwuc2NhbGUocixyKSxsLnRyYW5zbGF0ZSh1LGgpLHN9O0xhLmdldExheWVycz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPW4ucmVuZGVyZXIsYT1pLmN5LHM9YS56b29tKCksbD1uLmZpcnN0R2V0O2lmKG4uZmlyc3RHZXQ9ITEscj09bnVsbCl7aWYocj1NYXRoLmNlaWwobEIocyplKSkscjx0YilyPXRiO2Vsc2UgaWYocz49VGV0fHxyPlA2KXJldHVybiBudWxsfW4udmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcocix0KTt2YXIgdT1uLmxheWVyc0J5TGV2ZWwsaD1NYXRoLnBvdygyLHIpLGY9dVtyXT11W3JdfHxbXSxkLHA9bi5sZXZlbElzQ29tcGxldGUocix0KSxtLGc9byhmdW5jdGlvbigpe3ZhciBJPW8oZnVuY3Rpb24oTyl7aWYobi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhPLHQpLG4ubGV2ZWxJc0NvbXBsZXRlKE8sdCkpcmV0dXJuIG09dVtPXSwhMH0sImNhblVzZUFzVG1wTHZsIiksRD1vKGZ1bmN0aW9uKE8pe2lmKCFtKWZvcih2YXIgTj1yK087dGI8PU4mJk48PVA2JiYhSShOKTtOKz1PKTt9LCJjaGVja0x2bHMiKTtEKDEpLEQoLTEpO2Zvcih2YXIgaz1mLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgUj1mW2tdO1IuaW52YWxpZCYmT2YoZixSKX19LCJjaGVja1RlbXBMZXZlbHMiKTtpZighcClnKCk7ZWxzZSByZXR1cm4gZjt2YXIgeT1vKGZ1bmN0aW9uKCl7aWYoIWQpe2Q9S3MoKTtmb3IodmFyIEk9MDtJPHQubGVuZ3RoO0krKyljZ2UoZCx0W0ldLmJvdW5kaW5nQm94KCkpfXJldHVybiBkfSwiZ2V0QmIiKSx2PW8oZnVuY3Rpb24oSSl7ST1JfHx7fTt2YXIgRD1JLmFmdGVyO3koKTt2YXIgaz1kLncqaCooZC5oKmgpO2lmKGs+TmV0KXJldHVybiBudWxsO3ZhciBSPW4ubWFrZUxheWVyKGQscik7aWYoRCE9bnVsbCl7dmFyIEM9Zi5pbmRleE9mKEQpKzE7Zi5zcGxpY2UoQywwLFIpfWVsc2UoSS5pbnNlcnQ9PT12b2lkIDB8fEkuaW5zZXJ0KSYmZi51bnNoaWZ0KFIpO3JldHVybiBSfSwibWFrZUxheWVyIik7aWYobi5za2lwcGluZyYmIWwpcmV0dXJuIG51bGw7Zm9yKHZhciB4PW51bGwsYj10Lmxlbmd0aC93ZXQsdz0hbCxfPTA7Xzx0Lmxlbmd0aDtfKyspe3ZhciBUPXRbX10sRT1ULl9wcml2YXRlLnJzY3JhdGNoLEw9RS5pbWdMYXllckNhY2hlcz1FLmltZ0xheWVyQ2FjaGVzfHx7fSxTPUxbcl07aWYoUyl7eD1TO2NvbnRpbnVlfWlmKCgheHx8eC5lbGVzLmxlbmd0aD49Ynx8IXVnZSh4LmJiLFQuYm91bmRpbmdCb3goKSkpJiYoeD12KHtpbnNlcnQ6ITAsYWZ0ZXI6eH0pLCF4KSlyZXR1cm4gbnVsbDttfHx3P24ucXVldWVMYXllcih4LFQpOm4uZHJhd0VsZUluTGF5ZXIoeCxULHIsZSkseC5lbGVzLnB1c2goVCksTFtyXT14fXJldHVybiBtfHwodz9udWxsOmYpfTtMYS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH07TGEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPXRoaXMucmVuZGVyZXIscz10LmNvbnRleHQsbD1lLmJvdW5kaW5nQm94KCk7bC53PT09MHx8bC5oPT09MHx8IWUudmlzaWJsZSgpfHwocj1pLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChyLG4pLGEuc2V0SW1nU21vb3RoaW5nKHMsITEpLGEuZHJhd0NhY2hlZEVsZW1lbnQocyxlLG51bGwsbnVsbCxyLFJldCksYS5zZXRJbWdTbW9vdGhpbmcocywhMCkpfTtMYS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5sYXllcnNCeUxldmVsW3RdO2lmKCFufHxuLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO2lmKHMucmVxcz4wfHxzLmludmFsaWQpcmV0dXJuITE7aSs9cy5lbGVzLmxlbmd0aH1yZXR1cm4gaT09PWUubGVuZ3RofTtMYS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzQnlMZXZlbFt0XTtpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXtmb3IodmFyIGk9cltuXSxhPS0xLHM9MDtzPGUubGVuZ3RoO3MrKylpZihpLmVsZXNbMF09PT1lW3NdKXthPXM7YnJlYWt9aWYoYTwwKXt0aGlzLmludmFsaWRhdGVMYXllcihpKTtjb250aW51ZX1mb3IodmFyIGw9YSxzPTA7czxpLmVsZXMubGVuZ3RoO3MrKylpZihpLmVsZXNbc10hPT1lW2wrc10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2JyZWFrfX19O0xhLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPXBiKHRbMF0pLGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIGE9bj9udWxsOnRbaV0scz1uP3RbaV06dFtpXS5lbGUsbD1zLl9wcml2YXRlLnJzY3JhdGNoLHU9bC5pbWdMYXllckNhY2hlcz1sLmltZ0xheWVyQ2FjaGVzfHx7fSxoPXRiO2g8PVA2O2grKyl7dmFyIGY9dVtoXTtmJiYoYSYmci5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoZi5sZXZlbCkhPT1hLmxldmVsfHxlKGYscyxhKSl9fTtMYS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT0hMSxyPXRiO3I8PVA2O3IrKyl7dmFyIG49dC5sYXllcnNCeUxldmVsW3JdO2lmKG4mJm4ubGVuZ3RoPjApe2U9ITA7YnJlYWt9fXJldHVybiBlfTtMYS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0Lmxlbmd0aCE9PTAmJihlLmxhc3RJbnZhbGlkYXRpb25UaW1lPWloKCksISh0Lmxlbmd0aD09PTB8fCFlLmhhdmVMYXllcnMoKSkmJmUudXBkYXRlRWxlbWVudHNJbkxheWVycyh0LG8oZnVuY3Rpb24obixpLGEpe2UuaW52YWxpZGF0ZUxheWVyKG4pfSwiaW52YWxBc3NvY0xheWVycyIpKSl9O0xhLmludmFsaWRhdGVMYXllcj1mdW5jdGlvbih0KXtpZih0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lPWloKCksIXQuaW52YWxpZCl7dmFyIGU9dC5sZXZlbCxyPXQuZWxlcyxuPXRoaXMubGF5ZXJzQnlMZXZlbFtlXTtPZihuLHQpLHQuZWxlc1F1ZXVlPVtdLHQuaW52YWxpZD0hMCx0LnJlcGxhY2VtZW50JiYodC5yZXBsYWNlbWVudC5pbnZhbGlkPSEwKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlczthJiYoYVtlXT1udWxsKX19fTtMYS5yZWZpbmVFbGVtZW50VGV4dHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnModCxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcz1uLnJlcGxhY2VtZW50O2lmKHN8fChzPW4ucmVwbGFjZW1lbnQ9ZS5tYWtlTGF5ZXIobi5iYixuLmxldmVsKSxzLnJlcGxhY2VzPW4scy5lbGVzPW4uZWxlcyksIXMucmVxcylmb3IodmFyIGw9MDtsPHMuZWxlcy5sZW5ndGg7bCsrKWUucXVldWVMYXllcihzLHMuZWxlc1tsXSl9LCJyZWZpbmVFYWNoRWxlIikpfTtMYS5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5lbGVUeHJEZXFzLm1lcmdlKHQpLHRoaXMuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCgpfTtMYS5xdWV1ZUxheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIubGF5ZXJzUXVldWUsaT10LmVsZXNRdWV1ZSxhPWkuaGFzSWQ9aS5oYXNJZHx8e307aWYoIXQucmVwbGFjZW1lbnQpe2lmKGUpe2lmKGFbZS5pZCgpXSlyZXR1cm47aS5wdXNoKGUpLGFbZS5pZCgpXT0hMH10LnJlcXM/KHQucmVxcysrLG4udXBkYXRlSXRlbSh0KSk6KHQucmVxcz0xLG4ucHVzaCh0KSl9fTtMYS5kZXF1ZXVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZS5sYXllcnNRdWV1ZSxuPVtdLGk9MDtpPERldCYmci5zaXplKCkhPT0wOyl7dmFyIGE9ci5wZWVrKCk7aWYoYS5yZXBsYWNlbWVudCl7ci5wb3AoKTtjb250aW51ZX1pZihhLnJlcGxhY2VzJiZhIT09YS5yZXBsYWNlcy5yZXBsYWNlbWVudCl7ci5wb3AoKTtjb250aW51ZX1pZihhLmludmFsaWQpe3IucG9wKCk7Y29udGludWV9dmFyIHM9YS5lbGVzUXVldWUuc2hpZnQoKTtzJiYoZS5kcmF3RWxlSW5MYXllcihhLHMsYS5sZXZlbCx0KSxpKyspLG4ubGVuZ3RoPT09MCYmbi5wdXNoKCEwKSxhLmVsZXNRdWV1ZS5sZW5ndGg9PT0wJiYoci5wb3AoKSxhLnJlcXM9MCxhLnJlcGxhY2VzJiZlLmFwcGx5TGF5ZXJSZXBsYWNlbWVudChhKSxlLnJlcXVlc3RSZWRyYXcoKSl9cmV0dXJuIG59O0xhLmFwcGx5TGF5ZXJSZXBsYWNlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5sYXllcnNCeUxldmVsW3QubGV2ZWxdLG49dC5yZXBsYWNlcyxpPXIuaW5kZXhPZihuKTtpZighKGk8MHx8bi5pbnZhbGlkKSl7cltpXT10O2Zvcih2YXIgYT0wO2E8dC5lbGVzLmxlbmd0aDthKyspe3ZhciBzPXQuZWxlc1thXS5fcHJpdmF0ZSxsPXMuaW1nTGF5ZXJDYWNoZXM9cy5pbWdMYXllckNhY2hlc3x8e307bCYmKGxbdC5sZXZlbF09dCl9ZS5yZXF1ZXN0UmVkcmF3KCl9fTtMYS5yZXF1ZXN0UmVkcmF3PXo2KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZW5kZXJlcjt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnJlZHJhdygpfSwxMDApO0xhLnNldHVwRGVxdWV1ZWluZz1mMWUuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6a2V0LGRlcUNvc3Q6Q2V0LGRlcUF2Z0Nvc3Q6QWV0LGRlcU5vRHJhd0Nvc3Q6X2V0LGRlcUZhc3RDb3N0OkxldCxkZXE6byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRlcXVldWUocil9LCJkZXEiKSxvbkRlcWQ6c0Isc2hvdWxkUmVkcmF3Om5nZSxwcmlvcml0eTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyRGVxfSwicHJpb3JpdHkiKX0pO3AxZT17fTtvKElldCwicG9seWdvbiIpO28oT2V0LCJ0cmlhbmdsZUJhY2tjdXJ2ZSIpO28oQm1lLCJ0cmlhbmdsZVRlZSIpO28oUGV0LCJjaXJjbGVUcmlhbmdsZSIpO28oQmV0LCJjaXJjbGUiKTtwMWUuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24odCl7cmV0dXJuKFBtZXx8KFBtZT17cG9seWdvbjpJZXQsInRyaWFuZ2xlLWJhY2tjdXJ2ZSI6T2V0LCJ0cmlhbmdsZS10ZWUiOkJtZSwiY2lyY2xlLXRyaWFuZ2xlIjpQZXQsInRyaWFuZ2xlLWNyb3NzIjpCbWUsY2lyY2xlOkJldH0pKVt0XX07cnU9e307cnUuZHJhd0VsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXM7ZS5pc05vZGUoKT9zLmRyYXdOb2RlKHQsZSxyLG4saSxhKTpzLmRyYXdFZGdlKHQsZSxyLG4saSxhKX07cnUuZHJhd0VsZW1lbnRPdmVybGF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztlLmlzTm9kZSgpP3IuZHJhd05vZGVPdmVybGF5KHQsZSk6ci5kcmF3RWRnZU92ZXJsYXkodCxlKX07cnUuZHJhd0VsZW1lbnRVbmRlcmxheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7ZS5pc05vZGUoKT9yLmRyYXdOb2RlVW5kZXJsYXkodCxlKTpyLmRyYXdFZGdlVW5kZXJsYXkodCxlKX07cnUuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7dmFyIHU9dGhpcyxoPXIuZ2V0Qm91bmRpbmdCb3goZSk7aWYoIShoLnc9PT0wfHxoLmg9PT0wKSl7dmFyIGY9ci5nZXRFbGVtZW50KGUsaCxuLGksYSk7aWYoZiE9bnVsbCl7dmFyIGQ9bCh1LGUpO2lmKGQ9PT0wKXJldHVybjt2YXIgcD1zKHUsZSksbT1oLngxLGc9aC55MSx5PWgudyx2PWguaCx4LGIsdyxfLFQ7aWYocCE9PTApe3ZhciBFPXIuZ2V0Um90YXRpb25Qb2ludChlKTt3PUUueCxfPUUueSx0LnRyYW5zbGF0ZSh3LF8pLHQucm90YXRlKHApLFQ9dS5nZXRJbWdTbW9vdGhpbmcodCksVHx8dS5zZXRJbWdTbW9vdGhpbmcodCwhMCk7dmFyIEw9ci5nZXRSb3RhdGlvbk9mZnNldChlKTt4PUwueCxiPUwueX1lbHNlIHg9bSxiPWc7dmFyIFM7ZCE9PTEmJihTPXQuZ2xvYmFsQWxwaGEsdC5nbG9iYWxBbHBoYT1TKmQpLHQuZHJhd0ltYWdlKGYudGV4dHVyZS5jYW52YXMsZi54LDAsZi53aWR0aCxmLmhlaWdodCx4LGIseSx2KSxkIT09MSYmKHQuZ2xvYmFsQWxwaGE9UykscCE9PTAmJih0LnJvdGF0ZSgtcCksdC50cmFuc2xhdGUoLXcsLV8pLFR8fHUuc2V0SW1nU21vb3RoaW5nKHQsITEpKX1lbHNlIHIuZHJhd0VsZW1lbnQodCxlKX19O0ZldD1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJnZXRaZXJvUm90YXRpb24iKSx6ZXQ9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmdldFRleHRBbmdsZShyLG51bGwpfSwiZ2V0TGFiZWxSb3RhdGlvbiIpLEdldD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsInNvdXJjZSIpfSwiZ2V0U291cmNlTGFiZWxSb3RhdGlvbiIpLCRldD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsInRhcmdldCIpfSwiZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbiIpLFZldD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuZWZmZWN0aXZlT3BhY2l0eSgpfSwiZ2V0T3BhY2l0eSIpLEJQPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5wc3R5bGUoInRleHQtb3BhY2l0eSIpLnBmVmFsdWUqci5lZmZlY3RpdmVPcGFjaXR5KCl9LCJnZXRUZXh0T3BhY2l0eSIpO3J1LmRyYXdDYWNoZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLGw9cy5kYXRhLHU9bC5lbGVUeHJDYWNoZSxoPWwubGJsVHhyQ2FjaGUsZj1sLnNsYlR4ckNhY2hlLGQ9bC50bGJUeHJDYWNoZSxwPWUuYm91bmRpbmdCb3goKSxtPWE9PT0hMD91LnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKHAudz09PTB8fHAuaD09PTB8fCFlLnZpc2libGUoKSkmJighbnx8Y0IocCxuKSkpe3ZhciBnPWUuaXNFZGdlKCkseT1lLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO3MuZHJhd0VsZW1lbnRVbmRlcmxheSh0LGUpLHMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSx1LHIsaSxtLEZldCxWZXQpLCghZ3x8IXkpJiZzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsaCxyLGksbSx6ZXQsQlApLGcmJiF5JiYocy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24odCxlLGYscixpLG0sR2V0LEJQKSxzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsZCxyLGksbSwkZXQsQlApKSxzLmRyYXdFbGVtZW50T3ZlcmxheSh0LGUpfX07cnUuZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO3IuZHJhd0VsZW1lbnQodCxpKX19O3J1LmRyYXdDYWNoZWRFbGVtZW50cz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcyxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07aS5kcmF3Q2FjaGVkRWxlbWVudCh0LHMscixuKX19O3J1LmRyYXdDYWNoZWROb2Rlcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcyxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07cy5pc05vZGUoKSYmaS5kcmF3Q2FjaGVkRWxlbWVudCh0LHMscixuKX19O3J1LmRyYXdMYXllcmVkRWxlbWVudHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPWkuZGF0YS5seXJUeHJDYWNoZS5nZXRMYXllcnMoZSxyKTtpZihhKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9bC5iYjt1Lnc9PT0wfHx1Lmg9PT0wfHx0LmRyYXdJbWFnZShsLmNhbnZhcyx1LngxLHUueTEsdS53LHUuaCl9ZWxzZSBpLmRyYXdDYWNoZWRFbGVtZW50cyh0LGUscixuKX07bGg9e307bGguZHJhd0VkZ2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxzPXRoaXMsbD1lLl9wcml2YXRlLnJzY3JhdGNoO2lmKCEoYSYmIWUudmlzaWJsZSgpKSYmIShsLmJhZExpbmV8fGwuYWxscHRzPT1udWxsfHxpc05hTihsLmFsbHB0c1swXSkpKXt2YXIgdTtyJiYodT1yLHQudHJhbnNsYXRlKC11LngxLC11LnkxKSk7dmFyIGg9YT9lLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlOjEsZj1hP2UucHN0eWxlKCJsaW5lLW9wYWNpdHkiKS52YWx1ZToxLGQ9ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUscD1lLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLG09ZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxnPWUucHN0eWxlKCJsaW5lLWNhcCIpLnZhbHVlLHk9ZS5wc3R5bGUoImxpbmUtb3V0bGluZS13aWR0aCIpLnZhbHVlLHY9ZS5wc3R5bGUoImxpbmUtb3V0bGluZS1jb2xvciIpLnZhbHVlLHg9aCpmLGI9aCpmLHc9byhmdW5jdGlvbigpe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp4O2Q9PT0ic3RyYWlnaHQtdHJpYW5nbGUiPyhzLmVsZVN0cm9rZVN0eWxlKHQsZSxPKSxzLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGUsdCxsLmFsbHB0cykpOih0LmxpbmVXaWR0aD1tLHQubGluZUNhcD1nLHMuZWxlU3Ryb2tlU3R5bGUodCxlLE8pLHMuZHJhd0VkZ2VQYXRoKGUsdCxsLmFsbHB0cyxwKSx0LmxpbmVDYXA9ImJ1dHQiKX0sImRyYXdMaW5lIiksXz1vKGZ1bmN0aW9uKCl7dmFyIE89YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOng7aWYodC5saW5lV2lkdGg9bSt5LHQubGluZUNhcD1nLHk+MClzLmNvbG9yU3Ryb2tlU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxPKTtlbHNle3QubGluZUNhcD0iYnV0dCI7cmV0dXJufWQ9PT0ic3RyYWlnaHQtdHJpYW5nbGUiP3MuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZSx0LGwuYWxscHRzKToocy5kcmF3RWRnZVBhdGgoZSx0LGwuYWxscHRzLHApLHQubGluZUNhcD0iYnV0dCIpfSwiZHJhd0xpbmVPdXRsaW5lIiksVD1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3RWRnZU92ZXJsYXkodCxlKX0sImRyYXdPdmVybGF5IiksRT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3RWRnZVVuZGVybGF5KHQsZSl9LCJkcmF3VW5kZXJsYXkiKSxMPW8oZnVuY3Rpb24oKXt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06YjtzLmRyYXdBcnJvd2hlYWRzKHQsZSxPKX0sImRyYXdBcnJvd3MiKSxTPW8oZnVuY3Rpb24oKXtzLmRyYXdFbGVtZW50VGV4dCh0LGUsbnVsbCxuKX0sImRyYXdUZXh0Iik7dC5saW5lSm9pbj0icm91bmQiO3ZhciBBPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoQSl7dmFyIEk9ZS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxEPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaz1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLFI9eCprO3QudHJhbnNsYXRlKEksRCksdyhSKSxMKFIpLHQudHJhbnNsYXRlKC1JLC1EKX1lbHNlIF8oKTtFKCksdygpLEwoKSxUKCksUygpLHImJnQudHJhbnNsYXRlKHUueDEsdS55MSl9fTttMWU9byhmdW5jdGlvbihlKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihuLnZpc2libGUoKSl7dmFyIGk9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1vcGFjaXR5IikpLnZhbHVlO2lmKGkhPT0wKXt2YXIgYT10aGlzLHM9YS51c2VQYXRocygpLGw9bi5fcHJpdmF0ZS5yc2NyYXRjaCx1PW4ucHN0eWxlKCIiLmNvbmNhdChlLCItcGFkZGluZyIpKS5wZlZhbHVlLGg9Mip1LGY9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb2xvciIpKS52YWx1ZTtyLmxpbmVXaWR0aD1oLGwuZWRnZVR5cGU9PT0ic2VsZiImJiFzP3IubGluZUNhcD0iYnV0dCI6ci5saW5lQ2FwPSJyb3VuZCIsYS5jb2xvclN0cm9rZVN0eWxlKHIsZlswXSxmWzFdLGZbMl0saSksYS5kcmF3RWRnZVBhdGgobixyLGwuYWxscHRzLCJzb2xpZCIpfX19fSwiZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkiKTtsaC5kcmF3RWRnZU92ZXJsYXk9bTFlKCJvdmVybGF5Iik7bGguZHJhd0VkZ2VVbmRlcmxheT1tMWUoInVuZGVybGF5Iik7bGguZHJhd0VkZ2VQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLHMsbD0hMSx1PXRoaXMudXNlUGF0aHMoKSxoPXQucHN0eWxlKCJsaW5lLWRhc2gtcGF0dGVybiIpLnBmVmFsdWUsZj10LnBzdHlsZSgibGluZS1kYXNoLW9mZnNldCIpLnBmVmFsdWU7aWYodSl7dmFyIGQ9ci5qb2luKCIkIikscD1pLnBhdGhDYWNoZUtleSYmaS5wYXRoQ2FjaGVLZXk9PT1kO3A/KHM9ZT1pLnBhdGhDYWNoZSxsPSEwKToocz1lPW5ldyBQYXRoMkQsaS5wYXRoQ2FjaGVLZXk9ZCxpLnBhdGhDYWNoZT1zKX1pZihhLnNldExpbmVEYXNoKXN3aXRjaChuKXtjYXNlImRvdHRlZCI6YS5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOmEuc2V0TGluZURhc2goaCksYS5saW5lRGFzaE9mZnNldD1mO2JyZWFrO2Nhc2Uic29saWQiOmEuc2V0TGluZURhc2goW10pO2JyZWFrfWlmKCFsJiYhaS5iYWRMaW5lKXN3aXRjaChlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhyWzBdLHJbMV0pLGkuZWRnZVR5cGUpe2Nhc2UiYmV6aWVyIjpjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UibXVsdGliZXppZXIiOmZvcih2YXIgbT0yO20rMzxyLmxlbmd0aDttKz00KWUucXVhZHJhdGljQ3VydmVUbyhyW21dLHJbbSsxXSxyW20rMl0sclttKzNdKTticmVhaztjYXNlInN0cmFpZ2h0IjpjYXNlImhheXN0YWNrIjpmb3IodmFyIGc9MjtnKzE8ci5sZW5ndGg7Zys9MillLmxpbmVUbyhyW2ddLHJbZysxXSk7YnJlYWs7Y2FzZSJzZWdtZW50cyI6aWYoaS5pc1JvdW5kKXt2YXIgeT1VbWUoaS5yb3VuZENvcm5lcnMpLHY7dHJ5e2Zvcih5LnMoKTshKHY9eS5uKCkpLmRvbmU7KXt2YXIgeD12LnZhbHVlO2kxZShlLHgpfX1jYXRjaCh3KXt5LmUodyl9ZmluYWxseXt5LmYoKX1lLmxpbmVUbyhyW3IubGVuZ3RoLTJdLHJbci5sZW5ndGgtMV0pfWVsc2UgZm9yKHZhciBiPTI7YisxPHIubGVuZ3RoO2IrPTIpZS5saW5lVG8ocltiXSxyW2IrMV0pO2JyZWFrfWU9YSx1P2Uuc3Ryb2tlKHMpOmUuc3Ryb2tlKCksZS5zZXRMaW5lRGFzaCYmZS5zZXRMaW5lRGFzaChbXSl9O2xoLmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHQsZSxyKXtlLmZpbGxTdHlsZT1lLnN0cm9rZVN0eWxlO2Zvcih2YXIgbj10LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGk9MDtpKzE8ci5sZW5ndGg7aSs9Mil7dmFyIGE9W3JbaSsyXS1yW2ldLHJbaSszXS1yW2krMV1dLHM9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGw9W2FbMV0vcywtYVswXS9zXSx1PVtsWzBdKm4vMixsWzFdKm4vMl07ZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhyW2ldLXVbMF0scltpKzFdLXVbMV0pLGUubGluZVRvKHJbaV0rdVswXSxyW2krMV0rdVsxXSksZS5saW5lVG8ocltpKzJdLHJbaSszXSksZS5jbG9zZVBhdGgoKSxlLmZpbGwoKX19O2xoLmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLl9wcml2YXRlLnJzY3JhdGNoLGk9bi5lZGdlVHlwZT09PSJoYXlzdGFjayI7aXx8dGhpcy5kcmF3QXJyb3doZWFkKHQsZSwic291cmNlIixuLmFycm93U3RhcnRYLG4uYXJyb3dTdGFydFksbi5zcmNBcnJvd0FuZ2xlLHIpLHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsIm1pZC10YXJnZXQiLG4ubWlkWCxuLm1pZFksbi5taWR0Z3RBcnJvd0FuZ2xlLHIpLHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsIm1pZC1zb3VyY2UiLG4ubWlkWCxuLm1pZFksbi5taWRzcmNBcnJvd0FuZ2xlLHIpLGl8fHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsInRhcmdldCIsbi5hcnJvd0VuZFgsbi5hcnJvd0VuZFksbi50Z3RBcnJvd0FuZ2xlLHIpfTtsaC5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2lmKCEoaXNOYU4obil8fG49PW51bGx8fGlzTmFOKGkpfHxpPT1udWxsfHxpc05hTihhKXx8YT09bnVsbCkpe3ZhciBsPXRoaXMsdT1lLnBzdHlsZShyKyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZih1IT09Im5vbmUiKXt2YXIgaD1lLnBzdHlsZShyKyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLGY9ZS5wc3R5bGUocisiLWFycm93LWZpbGwiKS52YWx1ZSxkPWUucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscD1lLnBzdHlsZShyKyItYXJyb3ctd2lkdGgiKSxtPXAudmFsdWU9PT0ibWF0Y2gtbGluZSI/ZDpwLnBmVmFsdWU7cC51bml0cz09PSIlIiYmKG0qPWQpO3ZhciBnPWUucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7cz09PXZvaWQgMCYmKHM9Zyk7dmFyIHk9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247KHMhPT0xfHxmPT09ImhvbGxvdyIpJiYodC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbC5jb2xvckZpbGxTdHlsZSh0LDI1NSwyNTUsMjU1LDEpLGwuY29sb3JTdHJva2VTdHlsZSh0LDI1NSwyNTUsMjU1LDEpLGwuZHJhd0Fycm93U2hhcGUoZSx0LGgsZCx1LG0sbixpLGEpLHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPXkpO3ZhciB2PWUucHN0eWxlKHIrIi1hcnJvdy1jb2xvciIpLnZhbHVlO2wuY29sb3JGaWxsU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxzKSxsLmNvbG9yU3Ryb2tlU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxzKSxsLmRyYXdBcnJvd1NoYXBlKGUsdCxmLGQsdSxtLG4saSxhKX19fTtsaC5kcmF3QXJyb3dTaGFwZT1mdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSl7dmFyIGg9dGhpcyxmPXRoaXMudXNlUGF0aHMoKSYmaSE9PSJ0cmlhbmdsZS1jcm9zcyIsZD0hMSxwLG09ZSxnPXt4OnMseTpsfSx5PXQucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLHY9dGhpcy5nZXRBcnJvd1dpZHRoKG4seSkseD1oLmFycm93U2hhcGVzW2ldO2lmKGYpe3ZhciBiPWguYXJyb3dQYXRoQ2FjaGU9aC5hcnJvd1BhdGhDYWNoZXx8W10sdz1qMChpKSxfPWJbd107XyE9bnVsbD8ocD1lPV8sZD0hMCk6KHA9ZT1uZXcgUGF0aDJELGJbd109cCl9ZHx8KGUuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGY/eC5kcmF3KGUsMSwwLHt4OjAseTowfSwxKTp4LmRyYXcoZSx2LHUsZyxuKSxlLmNsb3NlUGF0aCYmZS5jbG9zZVBhdGgoKSksZT1tLGYmJihlLnRyYW5zbGF0ZShzLGwpLGUucm90YXRlKHUpLGUuc2NhbGUodix2KSksKHI9PT0iZmlsbGVkInx8cj09PSJib3RoIikmJihmP2UuZmlsbChwKTplLmZpbGwoKSksKHI9PT0iaG9sbG93Inx8cj09PSJib3RoIikmJihlLmxpbmVXaWR0aD1hLyhmP3Y6MSksZS5saW5lSm9pbj0ibWl0ZXIiLGY/ZS5zdHJva2UocCk6ZS5zdHJva2UoKSksZiYmKGUuc2NhbGUoMS92LDEvdiksZS5yb3RhdGUoLXUpLGUudHJhbnNsYXRlKC1zLC1sKSl9O0VCPXt9O0VCLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUsaCl7aWYoIShpPD0wfHxhPD0wfHx1PD0wfHxoPD0wKSl0cnl7dC5kcmF3SW1hZ2UoZSxyLG4saSxhLHMsbCx1LGgpfWNhdGNoKGYpe29uKGYpfX07RUIuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcyxzPXIucG9zaXRpb24oKSxsPXMueCx1PXMueSxoPXIuY3koKS5zdHlsZSgpLGY9aC5nZXRJbmRleGVkU3R5bGUuYmluZChoKSxkPWYociwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsbikscD1mKHIsImJhY2tncm91bmQtcmVwZWF0IiwidmFsdWUiLG4pLG09ci53aWR0aCgpLGc9ci5oZWlnaHQoKSx5PXIucGFkZGluZygpKjIsdj1tKyhmKHIsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsbik9PT0iaW5uZXIiPzA6eSkseD1nKyhmKHIsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLG4pPT09ImlubmVyIj8wOnkpLGI9ci5fcHJpdmF0ZS5yc2NyYXRjaCx3PWYociwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLG4pLF89dz09PSJub2RlIixUPWYociwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLG4pKmksRT1mKHIsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIiwidmFsdWUiLG4pLEw9ci5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZTtMIT09ImF1dG8iJiYoTD1yLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUpO3ZhciBTPWUud2lkdGh8fGUuY2FjaGVkVyxBPWUuaGVpZ2h0fHxlLmNhY2hlZEg7KFM9PW51bGx8fEE9PW51bGwpJiYoZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSxTPWUuY2FjaGVkVz1lLndpZHRofHxlLm9mZnNldFdpZHRoLEE9ZS5jYWNoZWRIPWUuaGVpZ2h0fHxlLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGUpKTt2YXIgST1TLEQ9QTtpZihmKHIsImJhY2tncm91bmQtd2lkdGgiLCJ2YWx1ZSIsbikhPT0iYXV0byImJihmKHIsImJhY2tncm91bmQtd2lkdGgiLCJ1bml0cyIsbik9PT0iJSI/ST1mKHIsImJhY2tncm91bmQtd2lkdGgiLCJwZlZhbHVlIixuKSp2Okk9ZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwicGZWYWx1ZSIsbikpLGYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJ2YWx1ZSIsbikhPT0iYXV0byImJihmKHIsImJhY2tncm91bmQtaGVpZ2h0IiwidW5pdHMiLG4pPT09IiUiP0Q9ZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLG4pKng6RD1mKHIsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsbikpLCEoST09PTB8fEQ9PT0wKSl7aWYoZD09PSJjb250YWluIil7dmFyIGs9TWF0aC5taW4odi9JLHgvRCk7SSo9ayxEKj1rfWVsc2UgaWYoZD09PSJjb3ZlciIpe3ZhciBrPU1hdGgubWF4KHYvSSx4L0QpO0kqPWssRCo9a312YXIgUj1sLXYvMixDPWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLG4pLE89ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLCJwZlZhbHVlIixuKTtDPT09IiUiP1IrPSh2LUkpKk86Uis9Tzt2YXIgTj1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsbiksUD1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJwZlZhbHVlIixuKTtOPT09IiUiP1IrPSh2LUkpKlA6Uis9UDt2YXIgRj11LXgvMixCPWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi15IiwidW5pdHMiLG4pLEc9ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixuKTtCPT09IiUiP0YrPSh4LUQpKkc6Ris9Rzt2YXIgej1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJ1bml0cyIsbiksVz1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixuKTt6PT09IiUiP0YrPSh4LUQpKlc6Ris9VyxiLnBhdGhDYWNoZSYmKFItPWwsRi09dSxsPTAsdT0wKTt2YXIgWj10Lmdsb2JhbEFscGhhO3QuZ2xvYmFsQWxwaGE9VDt2YXIgaj1hLmdldEltZ1Ntb290aGluZyh0KSxvZT0hMTtpZihFPT09Im5vIiYmaj8oYS5zZXRJbWdTbW9vdGhpbmcodCwhMSksb2U9ITApOkU9PT0ieWVzIiYmIWomJihhLnNldEltZ1Ntb290aGluZyh0LCEwKSxvZT0hMCkscD09PSJuby1yZXBlYXQiKV8mJih0LnNhdmUoKSxiLnBhdGhDYWNoZT90LmNsaXAoYi5wYXRoQ2FjaGUpOihhLm5vZGVTaGFwZXNbYS5nZXROb2RlU2hhcGUocildLmRyYXcodCxsLHUsdix4LEwsYiksdC5jbGlwKCkpKSxhLnNhZmVEcmF3SW1hZ2UodCxlLDAsMCxTLEEsUixGLEksRCksXyYmdC5yZXN0b3JlKCk7ZWxzZXt2YXIgSz10LmNyZWF0ZVBhdHRlcm4oZSxwKTt0LmZpbGxTdHlsZT1LLGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShyKV0uZHJhdyh0LGwsdSx2LHgsTCxiKSx0LnRyYW5zbGF0ZShSLEYpLHQuZmlsbCgpLHQudHJhbnNsYXRlKC1SLC1GKX10Lmdsb2JhbEFscGhhPVosb2UmJmEuc2V0SW1nU21vb3RoaW5nKHQsail9fTtycD17fTtycC5lbGVUZXh0QmlnZ2VyVGhhbk1pbj1mdW5jdGlvbih0LGUpe2lmKCFlKXt2YXIgcj10LmN5KCkuem9vbSgpLG49dGhpcy5nZXRQaXhlbFJhdGlvKCksaT1NYXRoLmNlaWwobEIocipuKSk7ZT1NYXRoLnBvdygyLGkpfXZhciBhPXQucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKmUscz10LnBzdHlsZSgibWluLXpvb21lZC1mb250LXNpemUiKS5wZlZhbHVlO3JldHVybiEoYTxzKX07cnAuZHJhd0VsZW1lbnRUZXh0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcztpZihuPT1udWxsKXtpZihhJiYhcy5lbGVUZXh0QmlnZ2VyVGhhbk1pbihlKSlyZXR1cm59ZWxzZSBpZihuPT09ITEpcmV0dXJuO2lmKGUuaXNOb2RlKCkpe3ZhciBsPWUucHN0eWxlKCJsYWJlbCIpO2lmKCFsfHwhbC52YWx1ZSlyZXR1cm47dmFyIHU9cy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7dC50ZXh0QWxpZ249dSx0LnRleHRCYXNlbGluZT0iYm90dG9tIn1lbHNle3ZhciBoPWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmUsZj1lLnBzdHlsZSgibGFiZWwiKSxkPWUucHN0eWxlKCJzb3VyY2UtbGFiZWwiKSxwPWUucHN0eWxlKCJ0YXJnZXQtbGFiZWwiKTtpZihofHwoIWZ8fCFmLnZhbHVlKSYmKCFkfHwhZC52YWx1ZSkmJighcHx8IXAudmFsdWUpKXJldHVybjt0LnRleHRBbGlnbj0iY2VudGVyIix0LnRleHRCYXNlbGluZT0iYm90dG9tIn12YXIgbT0hcixnO3ImJihnPXIsdC50cmFuc2xhdGUoLWcueDEsLWcueTEpKSxpPT1udWxsPyhzLmRyYXdUZXh0KHQsZSxudWxsLG0sYSksZS5pc0VkZ2UoKSYmKHMuZHJhd1RleHQodCxlLCJzb3VyY2UiLG0sYSkscy5kcmF3VGV4dCh0LGUsInRhcmdldCIsbSxhKSkpOnMuZHJhd1RleHQodCxlLGksbSxhKSxyJiZ0LnRyYW5zbGF0ZShnLngxLGcueTEpfTtycC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciByPTA7cjx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3IrKylpZihlPXRoaXMuZm9udENhY2hlc1tyXSxlLmNvbnRleHQ9PT10KXJldHVybiBlO3JldHVybiBlPXtjb250ZXh0OnR9LHRoaXMuZm9udENhY2hlcy5wdXNoKGUpLGV9O3JwLnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLG49ZS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxpPWUucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsYT1lLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxzPWUucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLGw9cj9lLmVmZmVjdGl2ZU9wYWNpdHkoKSplLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSx1PWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKmwsaD1lLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxmPWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt0LmZvbnQ9bisiICIrcysiICIraSsiICIrYSx0LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh0LGhbMF0saFsxXSxoWzJdLGwpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh0LGZbMF0sZlsxXSxmWzJdLHUpfTtvKEZQLCJyb3VuZFJlY3QiKTtycC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoLGE9ZT9lKyItIjoiIixzPXQucHN0eWxlKGErInRleHQtcm90YXRpb24iKSxsPVFsKGksImxhYmVsQW5nbGUiLGUpO3JldHVybiBzLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3I9dC5pc0VkZ2UoKT9sOjA6cy5zdHJWYWx1ZT09PSJub25lIj9yPTA6cj1zLnBmVmFsdWUscn07cnAuZHJhd1RleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWUuX3ByaXZhdGUscz1hLnJzY3JhdGNoLGw9aT9lLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoaSYmKGw9PT0wfHxlLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3I9PT0ibWFpbiImJihyPW51bGwpO3ZhciB1PVFsKHMsImxhYmVsWCIsciksaD1RbChzLCJsYWJlbFkiLHIpLGYsZCxwPXRoaXMuZ2V0TGFiZWxUZXh0KGUscik7aWYocCE9bnVsbCYmcCE9PSIiJiYhaXNOYU4odSkmJiFpc05hTihoKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh0LGUsaSk7dmFyIG09cj9yKyItIjoiIixnPVFsKHMsImxhYmVsV2lkdGgiLHIpLHk9UWwocywibGFiZWxIZWlnaHQiLHIpLHY9ZS5wc3R5bGUobSsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseD1lLnBzdHlsZShtKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxiPWUuaXNFZGdlKCksdz1lLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSxfPWUucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO2ImJih3PSJjZW50ZXIiLF89ImNlbnRlciIpLHUrPXYsaCs9eDt2YXIgVDtzd2l0Y2gobj9UPXRoaXMuZ2V0VGV4dEFuZ2xlKGUscik6VD0wLFQhPT0wJiYoZj11LGQ9aCx0LnRyYW5zbGF0ZShmLGQpLHQucm90YXRlKFQpLHU9MCxoPTApLF8pe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6aCs9eS8yO2JyZWFrO2Nhc2UiYm90dG9tIjpoKz15O2JyZWFrfXZhciBFPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLEw9ZS5wc3R5bGUoInRleHQtYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSxTPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsQT1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLEk9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1zaGFwZSIpLnN0clZhbHVlLEQ9SS5pbmRleE9mKCJyb3VuZCIpPT09MCxrPTI7aWYoRT4wfHxTPjAmJkw+MCl7dmFyIFI9dS1BO3N3aXRjaCh3KXtjYXNlImxlZnQiOlItPWc7YnJlYWs7Y2FzZSJjZW50ZXIiOlItPWcvMjticmVha312YXIgQz1oLXktQSxPPWcrMipBLE49eSsyKkE7aWYoRT4wKXt2YXIgUD10LmZpbGxTdHlsZSxGPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0LmZpbGxTdHlsZT0icmdiYSgiK0ZbMF0rIiwiK0ZbMV0rIiwiK0ZbMl0rIiwiK0UqbCsiKSIsRD9GUCh0LFIsQyxPLE4sayk6dC5maWxsUmVjdChSLEMsTyxOKSx0LmZpbGxTdHlsZT1QfWlmKFM+MCYmTD4wKXt2YXIgQj10LnN0cm9rZVN0eWxlLEc9dC5saW5lV2lkdGgsej1lLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxXPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci1zdHlsZSIpLnZhbHVlO2lmKHQuc3Ryb2tlU3R5bGU9InJnYmEoIit6WzBdKyIsIit6WzFdKyIsIit6WzJdKyIsIitMKmwrIikiLHQubGluZVdpZHRoPVMsdC5zZXRMaW5lRGFzaClzd2l0Y2goVyl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlImRvdWJsZSI6dC5saW5lV2lkdGg9Uy80LHQuc2V0TGluZURhc2goW10pO2JyZWFrO2Nhc2Uic29saWQiOnQuc2V0TGluZURhc2goW10pO2JyZWFrfWlmKEQ/RlAodCxSLEMsTyxOLGssInN0cm9rZSIpOnQuc3Ryb2tlUmVjdChSLEMsTyxOKSxXPT09ImRvdWJsZSIpe3ZhciBaPVMvMjtEP0ZQKHQsUitaLEMrWixPLVoqMixOLVoqMixrLCJzdHJva2UiKTp0LnN0cm9rZVJlY3QoUitaLEMrWixPLVoqMixOLVoqMil9dC5zZXRMaW5lRGFzaCYmdC5zZXRMaW5lRGFzaChbXSksdC5saW5lV2lkdGg9Ryx0LnN0cm9rZVN0eWxlPUJ9fXZhciBqPTIqZS5wc3R5bGUoInRleHQtb3V0bGluZS13aWR0aCIpLnBmVmFsdWU7aWYoaj4wJiYodC5saW5lV2lkdGg9aiksZS5wc3R5bGUoInRleHQtd3JhcCIpLnZhbHVlPT09IndyYXAiKXt2YXIgb2U9UWwocywibGFiZWxXcmFwQ2FjaGVkTGluZXMiLHIpLEs9UWwocywibGFiZWxMaW5lSGVpZ2h0IixyKSxlZT1nLzIsSj10aGlzLmdldExhYmVsSnVzdGlmaWNhdGlvbihlKTtzd2l0Y2goSj09PSJhdXRvInx8KHc9PT0ibGVmdCI/Sj09PSJsZWZ0Ij91Kz0tZzpKPT09ImNlbnRlciImJih1Kz0tZWUpOnc9PT0iY2VudGVyIj9KPT09ImxlZnQiP3UrPS1lZTpKPT09InJpZ2h0IiYmKHUrPWVlKTp3PT09InJpZ2h0IiYmKEo9PT0iY2VudGVyIj91Kz1lZTpKPT09InJpZ2h0IiYmKHUrPWcpKSksXyl7Y2FzZSJ0b3AiOmgtPShvZS5sZW5ndGgtMSkqSzticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOmgtPShvZS5sZW5ndGgtMSkqSzticmVha31mb3IodmFyIEg9MDtIPG9lLmxlbmd0aDtIKyspaj4wJiZ0LnN0cm9rZVRleHQob2VbSF0sdSxoKSx0LmZpbGxUZXh0KG9lW0hdLHUsaCksaCs9S31lbHNlIGo+MCYmdC5zdHJva2VUZXh0KHAsdSxoKSx0LmZpbGxUZXh0KHAsdSxoKTtUIT09MCYmKHQucm90YXRlKC1UKSx0LnRyYW5zbGF0ZSgtZiwtZCkpfX19O0kxPXt9O0kxLmRyYXdOb2RlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITAscz10aGlzLGwsdSxoPWUuX3ByaXZhdGUsZj1oLnJzY3JhdGNoLGQ9ZS5wb3NpdGlvbigpO2lmKCEoIXh0KGQueCl8fCF4dChkLnkpKSYmIShhJiYhZS52aXNpYmxlKCkpKXt2YXIgcD1hP2UuZWZmZWN0aXZlT3BhY2l0eSgpOjEsbT1zLnVzZVBhdGhzKCksZyx5PSExLHY9ZS5wYWRkaW5nKCk7bD1lLndpZHRoKCkrMip2LHU9ZS5oZWlnaHQoKSsyKnY7dmFyIHg7ciYmKHg9cix0LnRyYW5zbGF0ZSgteC54MSwteC55MSkpO2Zvcih2YXIgYj1lLnBzdHlsZSgiYmFja2dyb3VuZC1pbWFnZSIpLHc9Yi52YWx1ZSxfPW5ldyBBcnJheSh3Lmxlbmd0aCksVD1uZXcgQXJyYXkody5sZW5ndGgpLEU9MCxMPTA7TDx3Lmxlbmd0aDtMKyspe3ZhciBTPXdbTF0sQT1fW0xdPVMhPW51bGwmJlMhPT0ibm9uZSI7aWYoQSl7dmFyIEk9ZS5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGUsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLCJ2YWx1ZSIsTCk7RSsrLFRbTF09cy5nZXRDYWNoZWRJbWFnZShTLEksZnVuY3Rpb24oKXtoLmJhY2tncm91bmRUaW1lc3RhbXA9RGF0ZS5ub3coKSxlLmVtaXRBbmROb3RpZnkoImJhY2tncm91bmQiKX0pfX12YXIgRD1lLnBzdHlsZSgiYmFja2dyb3VuZC1ibGFja2VuIikudmFsdWUsaz1lLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxSPWUucHN0eWxlKCJiYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpwLEM9ZS5wc3R5bGUoImJvcmRlci1jb2xvciIpLnZhbHVlLE89ZS5wc3R5bGUoImJvcmRlci1zdHlsZSIpLnZhbHVlLE49ZS5wc3R5bGUoImJvcmRlci1qb2luIikudmFsdWUsUD1lLnBzdHlsZSgiYm9yZGVyLWNhcCIpLnZhbHVlLEY9ZS5wc3R5bGUoImJvcmRlci1wb3NpdGlvbiIpLnZhbHVlLEI9ZS5wc3R5bGUoImJvcmRlci1kYXNoLXBhdHRlcm4iKS5wZlZhbHVlLEc9ZS5wc3R5bGUoImJvcmRlci1kYXNoLW9mZnNldCIpLnBmVmFsdWUsej1lLnBzdHlsZSgiYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSpwLFc9ZS5wc3R5bGUoIm91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFo9ZS5wc3R5bGUoIm91dGxpbmUtY29sb3IiKS52YWx1ZSxqPWUucHN0eWxlKCJvdXRsaW5lLXN0eWxlIikudmFsdWUsb2U9ZS5wc3R5bGUoIm91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKnAsSz1lLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZSxlZT1lLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlO2VlIT09ImF1dG8iJiYoZWU9ZS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlKTt2YXIgSj1vKGZ1bmN0aW9uKCl7dmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpSO3MuZWxlRmlsbFN0eWxlKHQsZSx2ZSl9LCJzZXR1cFNoYXBlQ29sb3IiKSxIPW8oZnVuY3Rpb24oKXt2YXIgdmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOno7cy5jb2xvclN0cm9rZVN0eWxlKHQsQ1swXSxDWzFdLENbMl0sdmUpfSwic2V0dXBCb3JkZXJDb2xvciIpLHE9byhmdW5jdGlvbigpe3ZhciB2ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06b2U7cy5jb2xvclN0cm9rZVN0eWxlKHQsWlswXSxaWzFdLFpbMl0sdmUpfSwic2V0dXBPdXRsaW5lQ29sb3IiKSxRPW8oZnVuY3Rpb24odmUsVSxUZSxpZSl7dmFyIEVlPXMubm9kZVBhdGhDYWNoZT1zLm5vZGVQYXRoQ2FjaGV8fFtdLEFlPXJnZShUZT09PSJwb2x5Z29uIj9UZSsiLCIraWUuam9pbigiLCIpOlRlLCIiK1UsIiIrdmUsIiIrZWUpLEdlPUVlW0FlXSxCZSxtZT0hMTtyZXR1cm4gR2UhPW51bGw/KEJlPUdlLG1lPSEwLGYucGF0aENhY2hlPUJlKTooQmU9bmV3IFBhdGgyRCxFZVtBZV09Zi5wYXRoQ2FjaGU9QmUpLHtwYXRoOkJlLGNhY2hlSGl0Om1lfX0sImdldFBhdGgiKSxhZT1lLnBzdHlsZSgic2hhcGUiKS5zdHJWYWx1ZSx1ZT1lLnBzdHlsZSgic2hhcGUtcG9seWdvbi1wb2ludHMiKS5wZlZhbHVlO2lmKG0pe3QudHJhbnNsYXRlKGQueCxkLnkpO3ZhciBjZT1RKGwsdSxhZSx1ZSk7Zz1jZS5wYXRoLHk9Y2UuY2FjaGVIaXR9dmFyIHRlPW8oZnVuY3Rpb24oKXtpZigheSl7dmFyIHZlPWQ7bSYmKHZlPXt4OjAseTowfSkscy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KGd8fHQsdmUueCx2ZS55LGwsdSxlZSxmKX1tP3QuZmlsbChnKTp0LmZpbGwoKX0sImRyYXdTaGFwZSIpLE5lPW8oZnVuY3Rpb24oKXtmb3IodmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLFRlPWguYmFja2dyb3VuZGluZyxpZT0wLEVlPTA7RWU8VC5sZW5ndGg7RWUrKyl7dmFyIEFlPWUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShlLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLEVlKTtpZihVJiZBZT09PSJvdmVyInx8IVUmJkFlPT09Imluc2lkZSIpe2llKys7Y29udGludWV9X1tFZV0mJlRbRWVdLmNvbXBsZXRlJiYhVFtFZV0uZXJyb3ImJihpZSsrLHMuZHJhd0luc2NyaWJlZEltYWdlKHQsVFtFZV0sZSxFZSx2ZSkpfWguYmFja2dyb3VuZGluZz1pZSE9PUUsVGUhPT1oLmJhY2tncm91bmRpbmcmJmUudXBkYXRlU3R5bGUoITEpfSwiZHJhd0ltYWdlcyIpLHNlPW8oZnVuY3Rpb24oKXt2YXIgdmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnA7cy5oYXNQaWUoZSkmJihzLmRyYXdQaWUodCxlLFUpLHZlJiYobXx8cy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KHQsZC54LGQueSxsLHUsZWUsZikpKX0sImRyYXdQaWUiKSxrZT1vKGZ1bmN0aW9uKCl7dmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFU9KEQ+MD9EOi1EKSp2ZSxUZT1EPjA/MDoyNTU7RCE9PTAmJihzLmNvbG9yRmlsbFN0eWxlKHQsVGUsVGUsVGUsVSksbT90LmZpbGwoZyk6dC5maWxsKCkpfSwiZGFya2VuIiksUmU9byhmdW5jdGlvbigpe2lmKGs+MCl7aWYodC5saW5lV2lkdGg9ayx0LmxpbmVDYXA9UCx0LmxpbmVKb2luPU4sdC5zZXRMaW5lRGFzaClzd2l0Y2goTyl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKEIpLHQubGluZURhc2hPZmZzZXQ9RzticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoRiE9PSJjZW50ZXIiKXtpZih0LnNhdmUoKSx0LmxpbmVXaWR0aCo9MixGPT09Imluc2lkZSIpbT90LmNsaXAoZyk6dC5jbGlwKCk7ZWxzZXt2YXIgdmU9bmV3IFBhdGgyRDt2ZS5yZWN0KC1sLzItaywtdS8yLWssbCsyKmssdSsyKmspLHZlLmFkZFBhdGgoZyksdC5jbGlwKHZlLCJldmVub2RkIil9bT90LnN0cm9rZShnKTp0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWVsc2UgbT90LnN0cm9rZShnKTp0LnN0cm9rZSgpO2lmKE89PT0iZG91YmxlIil7dC5saW5lV2lkdGg9ay8zO3ZhciBVPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLG0/dC5zdHJva2UoZyk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1VfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdCb3JkZXIiKSxDZT1vKGZ1bmN0aW9uKCl7aWYoVz4wKXtpZih0LmxpbmVXaWR0aD1XLHQubGluZUNhcD0iYnV0dCIsdC5zZXRMaW5lRGFzaClzd2l0Y2goail7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9dmFyIHZlPWQ7bSYmKHZlPXt4OjAseTowfSk7dmFyIFU9cy5nZXROb2RlU2hhcGUoZSksVGU9aztGPT09Imluc2lkZSImJihUZT0wKSxGPT09Im91dHNpZGUiJiYoVGUqPTIpO3ZhciBpZT0obCtUZSsoVytLKSkvbCxFZT0odStUZSsoVytLKSkvdSxBZT1sKmllLEdlPXUqRWUsQmU9cy5ub2RlU2hhcGVzW1VdLnBvaW50cyxtZTtpZihtKXt2YXIgSGU9UShBZSxHZSxVLEJlKTttZT1IZS5wYXRofWlmKFU9PT0iZWxsaXBzZSIpcy5kcmF3RWxsaXBzZVBhdGgobWV8fHQsdmUueCx2ZS55LEFlLEdlKTtlbHNlIGlmKFsicm91bmQtZGlhbW9uZCIsInJvdW5kLWhlcHRhZ29uIiwicm91bmQtaGV4YWdvbiIsInJvdW5kLW9jdGFnb24iLCJyb3VuZC1wZW50YWdvbiIsInJvdW5kLXBvbHlnb24iLCJyb3VuZC10cmlhbmdsZSIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKFUpKXt2YXIgT2U9MCxldD0wLGJ0PTA7VT09PSJyb3VuZC1kaWFtb25kIj9PZT0oVGUrSytXKSoxLjQ6VT09PSJyb3VuZC1oZXB0YWdvbiI/KE9lPShUZStLK1cpKjEuMDc1LGJ0PS0oVGUvMitLK1cpLzM1KTpVPT09InJvdW5kLWhleGFnb24iP09lPShUZStLK1cpKjEuMTI6VT09PSJyb3VuZC1wZW50YWdvbiI/KE9lPShUZStLK1cpKjEuMTMsYnQ9LShUZS8yK0srVykvMTUpOlU9PT0icm91bmQtdGFnIj8oT2U9KFRlK0srVykqMS4xMixldD0oVGUvMitXK0spKi4wNyk6VT09PSJyb3VuZC10cmlhbmdsZSImJihPZT0oVGUrSytXKSooTWF0aC5QSS8yKSxidD0tKFRlK0svMitXKS9NYXRoLlBJKSxPZSE9PTAmJihpZT0obCtPZSkvbCxBZT1sKmllLFsicm91bmQtaGV4YWdvbiIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKFUpfHwoRWU9KHUrT2UpL3UsR2U9dSpFZSkpLGVlPWVlPT09ImF1dG8iP2RnZShBZSxHZSk6ZWU7Zm9yKHZhciBrdD1BZS8yLHZ0PUdlLzIscnQ9ZWUrKFRlK1crSykvMix5dD1uZXcgQXJyYXkoQmUubGVuZ3RoLzIpLFVlPW5ldyBBcnJheShCZS5sZW5ndGgvMiksdHQ9MDt0dDxCZS5sZW5ndGgvMjt0dCsrKXl0W3R0XT17eDp2ZS54K2V0K2t0KkJlW3R0KjJdLHk6dmUueStidCt2dCpCZVt0dCoyKzFdfTt2YXIgaHQsRXQsZXIsZHQsSmU9eXQubGVuZ3RoO2ZvcihFdD15dFtKZS0xXSxodD0wO2h0PEplO2h0KyspZXI9eXRbaHQlSmVdLGR0PXl0WyhodCsxKSVKZV0sVWVbaHRdPVRCKEV0LGVyLGR0LHJ0KSxFdD1lcixlcj1kdDtzLmRyYXdSb3VuZFBvbHlnb25QYXRoKG1lfHx0LHZlLngrZXQsdmUueStidCxsKmllLHUqRWUsQmUsVWUpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFUpKWVlPWVlPT09ImF1dG8iP1EwKEFlLEdlKTplZSxzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgobWV8fHQsdmUueCx2ZS55LEFlLEdlLGVlKyhUZStXK0spLzIpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoVSkpZWU9ZWU9PT0iYXV0byI/dUIoKTplZSxzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKG1lfHx0LHZlLngsdmUueSxBZSxHZSxudWxsLGVlKyhUZStXK0spLzQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhVKSllZT1lZT09PSJhdXRvIj9RMChBZSxHZSk6ZWUscy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoKG1lfHx0LHZlLngsdmUueSxBZSxHZSxlZSsoVGUrVytLKS8yKTtlbHNlIGlmKFU9PT0iYmFycmVsIilzLmRyYXdCYXJyZWxQYXRoKG1lfHx0LHZlLngsdmUueSxBZSxHZSk7ZWxzZSBpZihVLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoVSkpe3ZhciBjdD0oVGUrVytLKS9sO0JlPUw2KEQ2KEJlLGN0KSkscy5kcmF3UG9seWdvblBhdGgobWV8fHQsdmUueCx2ZS55LGwsdSxCZSl9ZWxzZXt2YXIgQ3Q9KFRlK1crSykvbDtCZT1MNihENihCZSwtQ3QpKSxzLmRyYXdQb2x5Z29uUGF0aChtZXx8dCx2ZS54LHZlLnksbCx1LEJlKX1pZihtP3Quc3Ryb2tlKG1lKTp0LnN0cm9rZSgpLGo9PT0iZG91YmxlIil7dC5saW5lV2lkdGg9VGUvMzt2YXIgcHQ9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbT90LnN0cm9rZShtZSk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1wdH10LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKX19LCJkcmF3T3V0bGluZSIpLFBlPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdOb2RlT3ZlcmxheSh0LGUsZCxsLHUpfSwiZHJhd092ZXJsYXkiKSxJZT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3Tm9kZVVuZGVybGF5KHQsZSxkLGwsdSl9LCJkcmF3VW5kZXJsYXkiKSwkZT1vKGZ1bmN0aW9uKCl7cy5kcmF3RWxlbWVudFRleHQodCxlLG51bGwsbil9LCJkcmF3VGV4dCIpLHllPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoeWUpe3ZhciBYPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsZmU9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSxoZT1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLGdlPWhlKnA7dC50cmFuc2xhdGUoWCxmZSkscSgpLENlKCksSihoZSpSKSx0ZSgpLE5lKGdlLCEwKSxIKGhlKnopLFJlKCksc2UoRCE9PTB8fGshPT0wKSxOZShnZSwhMSksa2UoZ2UpLHQudHJhbnNsYXRlKC1YLC1mZSl9bSYmdC50cmFuc2xhdGUoLWQueCwtZC55KSxJZSgpLG0mJnQudHJhbnNsYXRlKGQueCxkLnkpLHEoKSxDZSgpLEooKSx0ZSgpLE5lKHAsITApLEgoKSxSZSgpLHNlKEQhPT0wfHxrIT09MCksTmUocCwhMSksa2UoKSxtJiZ0LnRyYW5zbGF0ZSgtZC54LC1kLnkpLCRlKCksUGUoKSxyJiZ0LnRyYW5zbGF0ZSh4LngxLHgueTEpfX07ZzFlPW8oZnVuY3Rpb24oZSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKHIsbixpLGEscyl7dmFyIGw9dGhpcztpZihuLnZpc2libGUoKSl7dmFyIHU9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1wYWRkaW5nIikpLnBmVmFsdWUsaD1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLW9wYWNpdHkiKSkudmFsdWUsZj1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLWNvbG9yIikpLnZhbHVlLGQ9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1zaGFwZSIpKS52YWx1ZSxwPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItY29ybmVyLXJhZGl1cyIpKS52YWx1ZTtpZihoPjApe2lmKGk9aXx8bi5wb3NpdGlvbigpLGE9PW51bGx8fHM9PW51bGwpe3ZhciBtPW4ucGFkZGluZygpO2E9bi53aWR0aCgpKzIqbSxzPW4uaGVpZ2h0KCkrMiptfWwuY29sb3JGaWxsU3R5bGUocixmWzBdLGZbMV0sZlsyXSxoKSxsLm5vZGVTaGFwZXNbZF0uZHJhdyhyLGkueCxpLnksYSt1KjIscyt1KjIscCksci5maWxsKCl9fX19LCJkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheSIpO0kxLmRyYXdOb2RlT3ZlcmxheT1nMWUoIm92ZXJsYXkiKTtJMS5kcmF3Tm9kZVVuZGVybGF5PWcxZSgidW5kZXJsYXkiKTtJMS5oYXNQaWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dFswXSx0Ll9wcml2YXRlLmhhc1BpZX07STEuZHJhd1BpZT1mdW5jdGlvbih0LGUscixuKXtlPWVbMF0sbj1ufHxlLnBvc2l0aW9uKCk7dmFyIGk9ZS5jeSgpLnN0eWxlKCksYT1lLnBzdHlsZSgicGllLXNpemUiKSxzPW4ueCxsPW4ueSx1PWUud2lkdGgoKSxoPWUuaGVpZ2h0KCksZj1NYXRoLm1pbih1LGgpLzIsZD0wLHA9dGhpcy51c2VQYXRocygpO3AmJihzPTAsbD0wKSxhLnVuaXRzPT09IiUiP2Y9ZiphLnBmVmFsdWU6YS5wZlZhbHVlIT09dm9pZCAwJiYoZj1hLnBmVmFsdWUvMik7Zm9yKHZhciBtPTE7bTw9aS5waWVCYWNrZ3JvdW5kTjttKyspe3ZhciBnPWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1zaXplIikudmFsdWUseT1lLnBzdHlsZSgicGllLSIrbSsiLWJhY2tncm91bmQtY29sb3IiKS52YWx1ZSx2PWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqcix4PWcvMTAwO3grZD4xJiYoeD0xLWQpO3ZhciBiPTEuNSpNYXRoLlBJKzIqTWF0aC5QSSpkLHc9MipNYXRoLlBJKngsXz1iK3c7Zz09PTB8fGQ+PTF8fGQreD4xfHwodC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhzLGwpLHQuYXJjKHMsbCxmLGIsXyksdC5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKHQseVswXSx5WzFdLHlbMl0sdiksdC5maWxsKCksZCs9eCl9fTtUbz17fSxVZXQ9MTAwO1RvLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEuY29udGV4dHNbMF07aWYodGhpcy5mb3JjZWRQaXhlbFJhdGlvIT1udWxsKXJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87dmFyIGU9dGhpcy5jeS53aW5kb3coKSxyPXQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDE7cmV0dXJuKGUuZGV2aWNlUGl4ZWxSYXRpb3x8MSkvcn07VG8ucGFpbnRDYWNoZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5wYWludENhY2hlcz10aGlzLnBhaW50Q2FjaGVzfHxbXSxyPSEwLG4saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKG49ZVtpXSxuLmNvbnRleHQ9PT10KXtyPSExO2JyZWFrfXJldHVybiByJiYobj17Y29udGV4dDp0fSxlLnB1c2gobikpLG59O1RvLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3I9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxzPXRoaXMudXNlUGF0aHMoKSxsPXIucHN0eWxlKGUrIi1ncmFkaWVudC1zdG9wLWNvbG9ycyIpLnZhbHVlLHU9ci5wc3R5bGUoZSsiLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIikucGZWYWx1ZTtpZihuPT09InJhZGlhbC1ncmFkaWVudCIpaWYoci5pc0VkZ2UoKSl7dmFyIGg9ci5zb3VyY2VFbmRwb2ludCgpLGY9ci50YXJnZXRFbmRwb2ludCgpLGQ9ci5taWRwb2ludCgpLHA9SzAoaCxkKSxtPUswKGYsZCk7YT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGQueCxkLnksMCxkLngsZC55LE1hdGgubWF4KHAsbSkpfWVsc2V7dmFyIGc9cz97eDowLHk6MH06ci5wb3NpdGlvbigpLHk9ci5wYWRkZWRXaWR0aCgpLHY9ci5wYWRkZWRIZWlnaHQoKTthPXQuY3JlYXRlUmFkaWFsR3JhZGllbnQoZy54LGcueSwwLGcueCxnLnksTWF0aC5tYXgoeSx2KSl9ZWxzZSBpZihyLmlzRWRnZSgpKXt2YXIgeD1yLnNvdXJjZUVuZHBvaW50KCksYj1yLnRhcmdldEVuZHBvaW50KCk7YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHgueCx4LnksYi54LGIueSl9ZWxzZXt2YXIgdz1zP3t4OjAseTowfTpyLnBvc2l0aW9uKCksXz1yLnBhZGRlZFdpZHRoKCksVD1yLnBhZGRlZEhlaWdodCgpLEU9Xy8yLEw9VC8yLFM9ci5wc3R5bGUoImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIikudmFsdWU7c3dpdGNoKFMpe2Nhc2UidG8tYm90dG9tIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LHcueS1MLHcueCx3LnkrTCk7YnJlYWs7Y2FzZSJ0by10b3AiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3Lngsdy55K0wsdy54LHcueS1MKTticmVhaztjYXNlInRvLWxlZnQiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngrRSx3Lnksdy54LUUsdy55KTticmVhaztjYXNlInRvLXJpZ2h0IjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LUUsdy55LHcueCtFLHcueSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tcmlnaHQiOmNhc2UidG8tcmlnaHQtYm90dG9tIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LUUsdy55LUwsdy54K0Usdy55K0wpO2JyZWFrO2Nhc2UidG8tdG9wLXJpZ2h0IjpjYXNlInRvLXJpZ2h0LXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueC1FLHcueStMLHcueCtFLHcueS1MKTticmVhaztjYXNlInRvLWJvdHRvbS1sZWZ0IjpjYXNlInRvLWxlZnQtYm90dG9tIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54K0Usdy55LUwsdy54LUUsdy55K0wpO2JyZWFrO2Nhc2UidG8tdG9wLWxlZnQiOmNhc2UidG8tbGVmdC10b3AiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngrRSx3LnkrTCx3LngtRSx3LnktTCk7YnJlYWt9fWlmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgQT11Lmxlbmd0aD09PWwubGVuZ3RoLEk9bC5sZW5ndGgsRD0wO0Q8STtEKyspYS5hZGRDb2xvclN0b3AoQT91W0RdOkQvKEktMSksInJnYmEoIitsW0RdWzBdKyIsIitsW0RdWzFdKyIsIitsW0RdWzJdKyIsIitpKyIpIik7cmV0dXJuIGF9O1RvLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih0LCJiYWNrZ3JvdW5kIixlLHIsbik7aWYoIWkpcmV0dXJuIG51bGw7dC5maWxsU3R5bGU9aX07VG8uY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmZpbGxTdHlsZT0icmdiYSgiK2UrIiwiK3IrIiwiK24rIiwiK2krIikifTtUby5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWZpbGwiKS52YWx1ZTtpZihuPT09ImxpbmVhci1ncmFkaWVudCJ8fG49PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50RmlsbFN0eWxlKHQsZSxuLHIpO2Vsc2V7dmFyIGk9ZS5wc3R5bGUoImJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKHQsaVswXSxpWzFdLGlbMl0scil9fTtUby5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih0LCJsaW5lIixlLHIsbik7aWYoIWkpcmV0dXJuIG51bGw7dC5zdHJva2VTdHlsZT1pfTtUby5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5zdHJva2VTdHlsZT0icmdiYSgiK2UrIiwiK3IrIiwiK24rIiwiK2krIikifTtUby5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5wc3R5bGUoImxpbmUtZmlsbCIpLnZhbHVlO2lmKG49PT0ibGluZWFyLWdyYWRpZW50Inx8bj09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZSh0LGUsbixyKTtlbHNle3ZhciBpPWUucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKHQsaVswXSxpWzFdLGlbMl0scil9fTtUby5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGF0YSxuPWUuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9blsyXSxhPW5bM10scz1lLmdldFBpeGVsUmF0aW8oKSxsPWUubW90aW9uQmx1clB4UmF0aW87KHQ9PT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbZS5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8dD09PWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKHM9bCk7dmFyIHU9aSpzLGg9YSpzLGY7aWYoISh1PT09ZS5jYW52YXNXaWR0aCYmaD09PWUuY2FudmFzSGVpZ2h0KSl7ZS5mb250Q2FjaGVzPW51bGw7dmFyIGQ9ci5jYW52YXNDb250YWluZXI7ZC5zdHlsZS53aWR0aD1pKyJweCIsZC5zdHlsZS5oZWlnaHQ9YSsicHgiO2Zvcih2YXIgcD0wO3A8ZS5DQU5WQVNfTEFZRVJTO3ArKylmPXIuY2FudmFzZXNbcF0sZi53aWR0aD11LGYuaGVpZ2h0PWgsZi5zdHlsZS53aWR0aD1pKyJweCIsZi5zdHlsZS5oZWlnaHQ9YSsicHgiO2Zvcih2YXIgcD0wO3A8ZS5CVUZGRVJfQ09VTlQ7cCsrKWY9ci5idWZmZXJDYW52YXNlc1twXSxmLndpZHRoPXUsZi5oZWlnaHQ9aCxmLnN0eWxlLndpZHRoPWkrInB4IixmLnN0eWxlLmhlaWdodD1hKyJweCI7ZS50ZXh0dXJlTXVsdD0xLHM8PTEmJihmPXIuYnVmZmVyQ2FudmFzZXNbZS5URVhUVVJFX0JVRkZFUl0sZS50ZXh0dXJlTXVsdD0yLGYud2lkdGg9dSplLnRleHR1cmVNdWx0LGYuaGVpZ2h0PWgqZS50ZXh0dXJlTXVsdCksZS5jYW52YXNXaWR0aD11LGUuY2FudmFzSGVpZ2h0PWh9fTtUby5yZW5kZXJUbz1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlbmRlcih7Zm9yY2VkQ29udGV4dDp0LGZvcmNlZFpvb206ZSxmb3JjZWRQYW46cixkcmF3QWxsTGF5ZXJzOiEwLGZvcmNlZFB4UmF0aW86bn0pfTtUby5yZW5kZXI9ZnVuY3Rpb24odCl7dD10fHxzZ2UoKTt2YXIgZT10LmZvcmNlZENvbnRleHQscj10LmRyYXdBbGxMYXllcnMsbj10LmRyYXdPbmx5Tm9kZUxheWVyLGk9dC5mb3JjZWRab29tLGE9dC5mb3JjZWRQYW4scz10aGlzLGw9dC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnQuZm9yY2VkUHhSYXRpbyx1PXMuY3ksaD1zLmRhdGEsZj1oLmNhbnZhc05lZWRzUmVkcmF3LGQ9cy50ZXh0dXJlT25WaWV3cG9ydCYmIWUmJihzLnBpbmNoaW5nfHxzLmhvdmVyRGF0YS5kcmFnZ2luZ3x8cy5zd2lwZVBhbm5pbmd8fHMuZGF0YS53aGVlbFpvb21pbmcpLHA9dC5tb3Rpb25CbHVyIT09dm9pZCAwP3QubW90aW9uQmx1cjpzLm1vdGlvbkJsdXIsbT1zLm1vdGlvbkJsdXJQeFJhdGlvLGc9dS5oYXNDb21wb3VuZE5vZGVzKCkseT1zLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMsdj0hIShzLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fHMudG91Y2hEYXRhLnNlbGVjdGluZyk7cD1wJiYhZSYmcy5tb3Rpb25CbHVyRW5hYmxlZCYmIXY7dmFyIHg9cDtlfHwocy5wcmV2UHhSYXRpbyE9PWwmJihzLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpLHMubWF0Y2hDYW52YXNTaXplKHMuY29udGFpbmVyKSxzLnJlZHJhd0hpbnQoImVsZXMiLCEwKSxzLnJlZHJhd0hpbnQoImRyYWciLCEwKSkscy5wcmV2UHhSYXRpbz1sKSwhZSYmcy5tb3Rpb25CbHVyVGltZW91dCYmY2xlYXJUaW1lb3V0KHMubW90aW9uQmx1clRpbWVvdXQpLHAmJihzLm1iRnJhbWVzPT1udWxsJiYocy5tYkZyYW1lcz0wKSxzLm1iRnJhbWVzKysscy5tYkZyYW1lczwzJiYoeD0hMSkscy5tYkZyYW1lcz5zLm1pbk1iTG93UXVhbEZyYW1lcyYmKHMubW90aW9uQmx1clB4UmF0aW89cy5tYlB4UkJsdXJyeSkpLHMuY2xlYXJpbmdNb3Rpb25CbHVyJiYocy5tb3Rpb25CbHVyUHhSYXRpbz0xKSxzLnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhZCYmKGZbcy5OT0RFXT0hMCxmW3MuU0VMRUNUX0JPWF09ITApO3ZhciBiPXUuc3R5bGUoKSx3PXUuem9vbSgpLF89aSE9PXZvaWQgMD9pOncsVD11LnBhbigpLEU9e3g6VC54LHk6VC55fSxMPXt6b29tOncscGFuOnt4OlQueCx5OlQueX19LFM9cy5wcmV2Vmlld3BvcnQsQT1TPT09dm9pZCAwfHxMLnpvb20hPT1TLnpvb218fEwucGFuLnghPT1TLnBhbi54fHxMLnBhbi55IT09Uy5wYW4ueTshQSYmISh5JiYhZykmJihzLm1vdGlvbkJsdXJQeFJhdGlvPTEpLGEmJihFPWEpLF8qPWwsRS54Kj1sLEUueSo9bDt2YXIgST1zLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gRChjZSx0ZSxOZSxzZSxrZSl7dmFyIFJlPWNlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtjZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIscy5jb2xvckZpbGxTdHlsZShjZSwyNTUsMjU1LDI1NSxzLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLGNlLmZpbGxSZWN0KHRlLE5lLHNlLGtlKSxjZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UmV9byhELCJtYmNsZWFyIik7ZnVuY3Rpb24gayhjZSx0ZSl7dmFyIE5lLHNlLGtlLFJlOyFzLmNsZWFyaW5nTW90aW9uQmx1ciYmKGNlPT09aC5idWZmZXJDb250ZXh0c1tzLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHxjZT09PWguYnVmZmVyQ29udGV4dHNbcy5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSk/KE5lPXt4OlQueCptLHk6VC55Km19LHNlPXcqbSxrZT1zLmNhbnZhc1dpZHRoKm0sUmU9cy5jYW52YXNIZWlnaHQqbSk6KE5lPUUsc2U9XyxrZT1zLmNhbnZhc1dpZHRoLFJlPXMuY2FudmFzSGVpZ2h0KSxjZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRlPT09Im1vdGlvbkJsdXIiP0QoY2UsMCwwLGtlLFJlKTohZSYmKHRlPT09dm9pZCAwfHx0ZSkmJmNlLmNsZWFyUmVjdCgwLDAsa2UsUmUpLHJ8fChjZS50cmFuc2xhdGUoTmUueCxOZS55KSxjZS5zY2FsZShzZSxzZSkpLGEmJmNlLnRyYW5zbGF0ZShhLngsYS55KSxpJiZjZS5zY2FsZShpLGkpfWlmKG8oaywic2V0Q29udGV4dFRyYW5zZm9ybSIpLGR8fChzLnRleHR1cmVEcmF3TGFzdEZyYW1lPSExKSxkKXtpZihzLnRleHR1cmVEcmF3TGFzdEZyYW1lPSEwLCFzLnRleHR1cmVDYWNoZSl7cy50ZXh0dXJlQ2FjaGU9e30scy50ZXh0dXJlQ2FjaGUuYmI9dS5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpLHMudGV4dHVyZUNhY2hlLnRleHR1cmU9cy5kYXRhLmJ1ZmZlckNhbnZhc2VzW3MuVEVYVFVSRV9CVUZGRVJdO3ZhciBSPXMuZGF0YS5idWZmZXJDb250ZXh0c1tzLlRFWFRVUkVfQlVGRkVSXTtSLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksUi5jbGVhclJlY3QoMCwwLHMuY2FudmFzV2lkdGgqcy50ZXh0dXJlTXVsdCxzLmNhbnZhc0hlaWdodCpzLnRleHR1cmVNdWx0KSxzLnJlbmRlcih7Zm9yY2VkQ29udGV4dDpSLGRyYXdPbmx5Tm9kZUxheWVyOiEwLGZvcmNlZFB4UmF0aW86bCpzLnRleHR1cmVNdWx0fSk7dmFyIEw9cy50ZXh0dXJlQ2FjaGUudmlld3BvcnQ9e3pvb206dS56b29tKCkscGFuOnUucGFuKCksd2lkdGg6cy5jYW52YXNXaWR0aCxoZWlnaHQ6cy5jYW52YXNIZWlnaHR9O0wubXBhbj17eDooMC1MLnBhbi54KS9MLnpvb20seTooMC1MLnBhbi55KS9MLnpvb219fWZbcy5EUkFHXT0hMSxmW3MuTk9ERV09ITE7dmFyIEM9aC5jb250ZXh0c1tzLk5PREVdLE89cy50ZXh0dXJlQ2FjaGUudGV4dHVyZSxMPXMudGV4dHVyZUNhY2hlLnZpZXdwb3J0O0Muc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxwP0QoQywwLDAsTC53aWR0aCxMLmhlaWdodCk6Qy5jbGVhclJlY3QoMCwwLEwud2lkdGgsTC5oZWlnaHQpO3ZhciBOPWIuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIikudmFsdWUsUD1iLmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IikudmFsdWU7cy5jb2xvckZpbGxTdHlsZShDLE5bMF0sTlsxXSxOWzJdLFApLEMuZmlsbFJlY3QoMCwwLEwud2lkdGgsTC5oZWlnaHQpO3ZhciB3PXUuem9vbSgpO2soQywhMSksQy5jbGVhclJlY3QoTC5tcGFuLngsTC5tcGFuLnksTC53aWR0aC9MLnpvb20vbCxMLmhlaWdodC9MLnpvb20vbCksQy5kcmF3SW1hZ2UoTyxMLm1wYW4ueCxMLm1wYW4ueSxMLndpZHRoL0wuem9vbS9sLEwuaGVpZ2h0L0wuem9vbS9sKX1lbHNlIHMudGV4dHVyZU9uVmlld3BvcnQmJiFlJiYocy50ZXh0dXJlQ2FjaGU9bnVsbCk7dmFyIEY9dS5leHRlbnQoKSxCPXMucGluY2hpbmd8fHMuaG92ZXJEYXRhLmRyYWdnaW5nfHxzLnN3aXBlUGFubmluZ3x8cy5kYXRhLndoZWVsWm9vbWluZ3x8cy5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxzLmN5LmFuaW1hdGVkKCksRz1zLmhpZGVFZGdlc09uVmlld3BvcnQmJkIsej1bXTtpZih6W3MuTk9ERV09IWZbcy5OT0RFXSYmcCYmIXMuY2xlYXJlZEZvck1vdGlvbkJsdXJbcy5OT0RFXXx8cy5jbGVhcmluZ01vdGlvbkJsdXIseltzLk5PREVdJiYocy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLk5PREVdPSEwKSx6W3MuRFJBR109IWZbcy5EUkFHXSYmcCYmIXMuY2xlYXJlZEZvck1vdGlvbkJsdXJbcy5EUkFHXXx8cy5jbGVhcmluZ01vdGlvbkJsdXIseltzLkRSQUddJiYocy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLkRSQUddPSEwKSxmW3MuTk9ERV18fHJ8fG58fHpbcy5OT0RFXSl7dmFyIFc9cCYmIXpbcy5OT0RFXSYmbSE9PTEsQz1lfHwoVz9zLmRhdGEuYnVmZmVyQ29udGV4dHNbcy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXTpoLmNvbnRleHRzW3MuTk9ERV0pLFo9cCYmIVc/Im1vdGlvbkJsdXIiOnZvaWQgMDtrKEMsWiksRz9zLmRyYXdDYWNoZWROb2RlcyhDLEkubm9uZHJhZyxsLEYpOnMuZHJhd0xheWVyZWRFbGVtZW50cyhDLEkubm9uZHJhZyxsLEYpLHMuZGVidWcmJnMuZHJhd0RlYnVnUG9pbnRzKEMsSS5ub25kcmFnKSwhciYmIXAmJihmW3MuTk9ERV09ITEpfWlmKCFuJiYoZltzLkRSQUddfHxyfHx6W3MuRFJBR10pKXt2YXIgVz1wJiYheltzLkRSQUddJiZtIT09MSxDPWV8fChXP3MuZGF0YS5idWZmZXJDb250ZXh0c1tzLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOmguY29udGV4dHNbcy5EUkFHXSk7ayhDLHAmJiFXPyJtb3Rpb25CbHVyIjp2b2lkIDApLEc/cy5kcmF3Q2FjaGVkTm9kZXMoQyxJLmRyYWcsbCxGKTpzLmRyYXdDYWNoZWRFbGVtZW50cyhDLEkuZHJhZyxsLEYpLHMuZGVidWcmJnMuZHJhd0RlYnVnUG9pbnRzKEMsSS5kcmFnKSwhciYmIXAmJihmW3MuRFJBR109ITEpfWlmKHMuc2hvd0Zwc3x8IW4mJmZbcy5TRUxFQ1RfQk9YXSYmIXIpe3ZhciBDPWV8fGguY29udGV4dHNbcy5TRUxFQ1RfQk9YXTtpZihrKEMpLHMuc2VsZWN0aW9uWzRdPT0xJiYocy5ob3ZlckRhdGEuc2VsZWN0aW5nfHxzLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgdz1zLmN5Lnpvb20oKSxqPWIuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS93O0MubGluZVdpZHRoPWosQy5maWxsU3R5bGU9InJnYmEoIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVswXSsiLCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK2IuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixDLmZpbGxSZWN0KHMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzFdLHMuc2VsZWN0aW9uWzJdLXMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzNdLXMuc2VsZWN0aW9uWzFdKSxqPjAmJihDLnN0cm9rZVN0eWxlPSJyZ2JhKCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK2IuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiKS52YWx1ZVsyXSsiLCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsQy5zdHJva2VSZWN0KHMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzFdLHMuc2VsZWN0aW9uWzJdLXMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzNdLXMuc2VsZWN0aW9uWzFdKSl9aWYoaC5iZ0FjdGl2ZVBvc2lzdGlvbiYmIXMuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIHc9cy5jeS56b29tKCksb2U9aC5iZ0FjdGl2ZVBvc2lzdGlvbjtDLmZpbGxTdHlsZT0icmdiYSgiK2IuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK2IuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMV0rIiwiK2IuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK2IuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIsQy5iZWdpblBhdGgoKSxDLmFyYyhvZS54LG9lLnksYi5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvdywwLDIqTWF0aC5QSSksQy5maWxsKCl9dmFyIEs9cy5sYXN0UmVkcmF3VGltZTtpZihzLnNob3dGcHMmJkspe0s9TWF0aC5yb3VuZChLKTt2YXIgZWU9TWF0aC5yb3VuZCgxZTMvSyk7Qy5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLEMuZmlsbFN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLEMuc3Ryb2tlU3R5bGU9InJnYmEoMjU1LCAwLCAwLCAwLjc1KSIsQy5saW5lV2lkdGg9MSxDLmZpbGxUZXh0KCIxIGZyYW1lID0gIitLKyIgbXMgPSAiK2VlKyIgZnBzIiwwLDIwKTt2YXIgSj02MDtDLnN0cm9rZVJlY3QoMCwzMCwyNTAsMjApLEMuZmlsbFJlY3QoMCwzMCwyNTAqTWF0aC5taW4oZWUvSiwxKSwyMCl9cnx8KGZbcy5TRUxFQ1RfQk9YXT0hMSl9aWYocCYmbSE9PTEpe3ZhciBIPWguY29udGV4dHNbcy5OT0RFXSxxPXMuZGF0YS5idWZmZXJDYW52YXNlc1tzLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLFE9aC5jb250ZXh0c1tzLkRSQUddLGFlPXMuZGF0YS5idWZmZXJDYW52YXNlc1tzLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddLHVlPW8oZnVuY3Rpb24odGUsTmUsc2Upe3RlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksc2V8fCF4P3RlLmNsZWFyUmVjdCgwLDAscy5jYW52YXNXaWR0aCxzLmNhbnZhc0hlaWdodCk6RCh0ZSwwLDAscy5jYW52YXNXaWR0aCxzLmNhbnZhc0hlaWdodCk7dmFyIGtlPW07dGUuZHJhd0ltYWdlKE5lLDAsMCxzLmNhbnZhc1dpZHRoKmtlLHMuY2FudmFzSGVpZ2h0KmtlLDAsMCxzLmNhbnZhc1dpZHRoLHMuY2FudmFzSGVpZ2h0KX0sImRyYXdNb3Rpb25CbHVyIik7KGZbcy5OT0RFXXx8eltzLk5PREVdKSYmKHVlKEgscSx6W3MuTk9ERV0pLGZbcy5OT0RFXT0hMSksKGZbcy5EUkFHXXx8eltzLkRSQUddKSYmKHVlKFEsYWUseltzLkRSQUddKSxmW3MuRFJBR109ITEpfXMucHJldlZpZXdwb3J0PUwscy5jbGVhcmluZ01vdGlvbkJsdXImJihzLmNsZWFyaW5nTW90aW9uQmx1cj0hMSxzLm1vdGlvbkJsdXJDbGVhcmVkPSEwLHMubW90aW9uQmx1cj0hMCkscCYmKHMubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3MubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxzLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3MuTk9ERV09ITEscy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLkRSQUddPSExLHMubW90aW9uQmx1cj0hMSxzLmNsZWFyaW5nTW90aW9uQmx1cj0hZCxzLm1iRnJhbWVzPTAsZltzLk5PREVdPSEwLGZbcy5EUkFHXT0hMCxzLnJlZHJhdygpfSxVZXQpKSxlfHx1LmVtaXQoInJlbmRlciIpfTtHZj17fTtHZi5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMjt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlK3MqYVswXSxyK2wqYVsxXSk7Zm9yKHZhciB1PTE7dTxhLmxlbmd0aC8yO3UrKyl0LmxpbmVUbyhlK3MqYVt1KjJdLHIrbCphW3UqMisxXSk7dC5jbG9zZVBhdGgoKX07R2YuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe3JldHVybiBpMWUodCxsKX0pLHQuY2xvc2VQYXRoKCl9O0dmLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMix1PWE9PT0iYXV0byI/UTAobixpKTpNYXRoLm1pbihhLGwscyk7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQuYXJjVG8oZStzLHItbCxlK3Mscix1KSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQuYXJjVG8oZS1zLHItbCxlLHItbCx1KSx0LmxpbmVUbyhlLHItbCksdC5jbG9zZVBhdGgoKX07R2YuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9bi8yLGw9aS8yLHU9YT09PSJhdXRvIj9RMChuLGkpOmE7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQubGluZVRvKGUrcyxyLWwpLHQubGluZVRvKGUrcyxyKSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQubGluZVRvKGUtcyxyLWwpLHQubGluZVRvKGUsci1sKSx0LmNsb3NlUGF0aCgpfTtHZi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSxzKXt2YXIgbD1uLzIsdT1pLzIsaD1zPT09ImF1dG8iP3VCKCk6czt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLWwraCxyLXUpLHQubGluZVRvKGUrbC1oLHItdSksdC5saW5lVG8oZStsLHItdStoKSx0LmxpbmVUbyhlK2wscit1LWgpLHQubGluZVRvKGUrbC1oLHIrdSksdC5saW5lVG8oZS1sK2gscit1KSx0LmxpbmVUbyhlLWwscit1LWgpLHQubGluZVRvKGUtbCxyLXUraCksdC5jbG9zZVBhdGgoKX07R2YuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uLzIscz1pLzIsbD1lLWEsdT1lK2EsaD1yLXMsZj1yK3MsZD1HUChuLGkpLHA9ZC53aWR0aE9mZnNldCxtPWQuaGVpZ2h0T2Zmc2V0LGc9ZC5jdHJsUHRPZmZzZXRQY3QqcDt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhsLGgrbSksdC5saW5lVG8obCxmLW0pLHQucXVhZHJhdGljQ3VydmVUbyhsK2csZixsK3AsZiksdC5saW5lVG8odS1wLGYpLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsZix1LGYtbSksdC5saW5lVG8odSxoK20pLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsaCx1LXAsaCksdC5saW5lVG8obCtwLGgpLHQucXVhZHJhdGljQ3VydmVUbyhsK2csaCxsLGgrbSksdC5jbG9zZVBhdGgoKX07Rm1lPU1hdGguc2luKDApLHptZT1NYXRoLmNvcygwKSxaUD17fSxKUD17fSx5MWU9TWF0aC5QSS80MDtmb3IoVjA9MCpNYXRoLlBJO1YwPDIqTWF0aC5QSTtWMCs9eTFlKVpQW1YwXT1NYXRoLnNpbihWMCksSlBbVjBdPU1hdGguY29zKFYwKTtHZi5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0LmVsbGlwc2UpdC5lbGxpcHNlKGUscixuLzIsaS8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBhLHMsbD1uLzIsdT1pLzIsaD0wKk1hdGguUEk7aDwyKk1hdGguUEk7aCs9eTFlKWE9ZS1sKlpQW2hdKkZtZStsKkpQW2hdKnptZSxzPXIrdSpKUFtoXSpGbWUrdSpaUFtoXSp6bWUsaD09PTA/dC5tb3ZlVG8oYSxzKTp0LmxpbmVUbyhhLHMpO3QuY2xvc2VQYXRoKCl9O3diPXt9O3diLmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxbcixyLmdldENvbnRleHQoIjJkIildfTt3Yi5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN5LHI9ZS5tdXRhYmxlRWxlbWVudHMoKSxuPXIuYm91bmRpbmdCb3goKSxpPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGE9dC5mdWxsP01hdGguY2VpbChuLncpOmlbMl0scz10LmZ1bGw/TWF0aC5jZWlsKG4uaCk6aVszXSxsPXh0KHQubWF4V2lkdGgpfHx4dCh0Lm1heEhlaWdodCksdT10aGlzLmdldFBpeGVsUmF0aW8oKSxoPTE7aWYodC5zY2FsZSE9PXZvaWQgMClhKj10LnNjYWxlLHMqPXQuc2NhbGUsaD10LnNjYWxlO2Vsc2UgaWYobCl7dmFyIGY9MS8wLGQ9MS8wO3h0KHQubWF4V2lkdGgpJiYoZj1oKnQubWF4V2lkdGgvYSkseHQodC5tYXhIZWlnaHQpJiYoZD1oKnQubWF4SGVpZ2h0L3MpLGg9TWF0aC5taW4oZixkKSxhKj1oLHMqPWh9bHx8KGEqPXUscyo9dSxoKj11KTt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtwLndpZHRoPWEscC5oZWlnaHQ9cyxwLnN0eWxlLndpZHRoPWErInB4IixwLnN0eWxlLmhlaWdodD1zKyJweCI7dmFyIG09cC5nZXRDb250ZXh0KCIyZCIpO2lmKGE+MCYmcz4wKXttLmNsZWFyUmVjdCgwLDAsYSxzKSxtLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBnPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih0LmZ1bGwpbS50cmFuc2xhdGUoLW4ueDEqaCwtbi55MSpoKSxtLnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudHMobSxnKSxtLnNjYWxlKDEvaCwxL2gpLG0udHJhbnNsYXRlKG4ueDEqaCxuLnkxKmgpO2Vsc2V7dmFyIHk9ZS5wYW4oKSx2PXt4OnkueCpoLHk6eS55Kmh9O2gqPWUuem9vbSgpLG0udHJhbnNsYXRlKHYueCx2LnkpLG0uc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50cyhtLGcpLG0uc2NhbGUoMS9oLDEvaCksbS50cmFuc2xhdGUoLXYueCwtdi55KX10LmJnJiYobS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLG0uZmlsbFN0eWxlPXQuYmcsbS5yZWN0KDAsMCxhLHMpLG0uZmlsbCgpKX1yZXR1cm4gcH07byhIZXQsImI2NFRvQmxvYiIpO28oR21lLCJiNjRVcmlUb0I2NCIpO28odjFlLCJvdXRwdXQiKTt3Yi5wbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHYxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL3BuZyIpfTt3Yi5qcGc9ZnVuY3Rpb24odCl7cmV0dXJuIHYxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL2pwZWciKX07eDFlPXt9O3gxZS5ub2RlU2hhcGVJbXBsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7c3dpdGNoKHQpe2Nhc2UiZWxsaXBzZSI6cmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKGUscixuLGksYSk7Y2FzZSJwb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3UG9seWdvblBhdGgoZSxyLG4saSxhLHMpO2Nhc2Uicm91bmQtcG9seWdvbiI6cmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgoZSxyLG4saSxhLHMsbCk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZSxyLG4saSxhLGwpO2Nhc2UiY3V0cmVjdGFuZ2xlIjpjYXNlImN1dC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGUscixuLGksYSxzLGwpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChlLHIsbixpLGEsbCk7Y2FzZSJiYXJyZWwiOnJldHVybiB0aGlzLmRyYXdCYXJyZWxQYXRoKGUscixuLGksYSl9fTtXZXQ9YjFlLEtyPWIxZS5wcm90b3R5cGU7S3IuQ0FOVkFTX0xBWUVSUz0zO0tyLlNFTEVDVF9CT1g9MDtLci5EUkFHPTE7S3IuTk9ERT0yO0tyLkJVRkZFUl9DT1VOVD0zO0tyLlRFWFRVUkVfQlVGRkVSPTA7S3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xO0tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtvKGIxZSwiQ2FudmFzUmVuZGVyZXIiKTtLci5yZWRyYXdIaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztzd2l0Y2godCl7Y2FzZSJlbGVzIjpyLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbS3IuTk9ERV09ZTticmVhaztjYXNlImRyYWciOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tLci5EUkFHXT1lO2JyZWFrO2Nhc2Uic2VsZWN0IjpyLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbS3IuU0VMRUNUX0JPWF09ZTticmVha319O1lldD10eXBlb2YgUGF0aDJEPCJ1IjtLci5wYXRoMmRFbmFibGVkPWZ1bmN0aW9uKHQpe2lmKHQ9PT12b2lkIDApcmV0dXJuIHRoaXMucGF0aHNFbmFibGVkO3RoaXMucGF0aHNFbmFibGVkPSEhdH07S3IudXNlUGF0aHM9ZnVuY3Rpb24oKXtyZXR1cm4gWWV0JiZ0aGlzLnBhdGhzRW5hYmxlZH07S3Iuc2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHQsZSl7dC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ZToodC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSx0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZD1lLHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSl9O0tyLmdldEltZ1Ntb290aGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ6dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWR8fHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkfTtLci5tYWtlT2Zmc2NyZWVuQ2FudmFzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoKHR5cGVvZiBPZmZzY3JlZW5DYW52YXM+InUiPyJ1bmRlZmluZWQiOktpKE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCIpcj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk7ZWxzZXt2YXIgbj10aGlzLmN5LndpbmRvdygpLGk9bi5kb2N1bWVudDtyPWkuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksci53aWR0aD10LHIuaGVpZ2h0PWV9cmV0dXJuIHJ9O1twMWUscnUsbGgsRUIscnAsSTEsVG8sR2Ysd2IseDFlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKEtyLHQpfSk7cWV0PVt7bmFtZToibnVsbCIsaW1wbDp0MWV9LHtuYW1lOiJiYXNlIixpbXBsOmgxZX0se25hbWU6ImNhbnZhcyIsaW1wbDpXZXR9XSxYZXQ9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6WkplfSx7dHlwZToicmVuZGVyZXIiLGV4dGVuc2lvbnM6cWV0fV0sdzFlPXt9LFQxZT17fTtvKGsxZSwic2V0RXh0ZW5zaW9uIik7byhFMWUsImdldEV4dGVuc2lvbiIpO28oamV0LCJzZXRNb2R1bGUiKTtvKEtldCwiZ2V0TW9kdWxlIik7ZUI9byhmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXJldHVybiBFMWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBrMWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBLZXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT01KXJldHVybiBqZXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2RpKCJJbnZhbGlkIGV4dGVuc2lvbiBhY2Nlc3Mgc3ludGF4Iil9LCJleHRlbnNpb24iKTtmYi5wcm90b3R5cGUuZXh0ZW5zaW9uPWVCO1hldC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZXh0ZW5zaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2sxZSh0LnR5cGUsZS5uYW1lLGUuaW1wbCl9KX0pO1MxZT1vKGZ1bmN0aW9uIHQoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQ7dGhpcy5sZW5ndGg9MH0sIlN0eWxlc2hlZXQiKSxlcD1TMWUucHJvdG90eXBlO2VwLmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInN0eWxlc2hlZXQifTtlcC5zZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW2VdPXtzZWxlY3Rvcjp0LHByb3BlcnRpZXM6W119LHRoaXN9O2VwLmNzcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLTE7aWYoWnQodCkpdGhpc1tyXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6dCx2YWx1ZTplfSk7ZWxzZSBpZihVcih0KSlmb3IodmFyIG49dCxpPU9iamVjdC5rZXlzKG4pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXSxsPW5bc107aWYobCE9bnVsbCl7dmFyIHU9VWEucHJvcGVydGllc1tzXXx8VWEucHJvcGVydGllc1tCNihzKV07aWYodSE9bnVsbCl7dmFyIGg9dS5uYW1lLGY9bDt0aGlzW3JdLnByb3BlcnRpZXMucHVzaCh7bmFtZTpoLHZhbHVlOmZ9KX19fXJldHVybiB0aGlzfTtlcC5zdHlsZT1lcC5jc3M7ZXAuZ2VuZXJhdGVTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWEodCk7cmV0dXJuIHRoaXMuYXBwZW5kVG9TdHlsZShlKX07ZXAuYXBwZW5kVG9TdHlsZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuc2VsZWN0b3IsaT1yLnByb3BlcnRpZXM7dC5zZWxlY3RvcihuKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTt0LmNzcyhzLm5hbWUscy52YWx1ZSl9fXJldHVybiB0fTtRZXQ9IjMuMzAuMiIsZmw9byhmdW5jdGlvbihlKXtpZihlPT09dm9pZCAwJiYoZT17fSksVXIoZSkpcmV0dXJuIG5ldyBmYihlKTtpZihadChlKSlyZXR1cm4gZUIuYXBwbHkoZUIsYXJndW1lbnRzKX0sImN5dG9zY2FwZSIpO2ZsLnVzZT1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGUudW5zaGlmdChmbCksdC5hcHBseShudWxsLGUpLHRoaXN9O2ZsLndhcm5pbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBpZ2UodCl9O2ZsLnZlcnNpb249UWV0O2ZsLnN0eWxlc2hlZXQ9ZmwuU3R5bGVzaGVldD1TMWV9KTt2YXIgQUI9RWkoKFRiLENCKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIFRiPT0ib2JqZWN0IiYmdHlwZW9mIENCPT0ib2JqZWN0Ij9DQi5leHBvcnRzPXIoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxyKTp0eXBlb2YgVGI9PSJvYmplY3QiP1RiLmxheW91dEJhc2U9cigpOmUubGF5b3V0QmFzZT1yKCl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKFRiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIobil7aWYoZVtuXSlyZXR1cm4gZVtuXS5leHBvcnRzO3ZhciBpPWVbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiB0W25dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHIpLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG8ociwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLHIubT10LHIuYz1lLHIuaT1mdW5jdGlvbihuKXtyZXR1cm4gbn0sci5kPWZ1bmN0aW9uKG4saSxhKXtyLm8obixpKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmF9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciBpPW4mJm4uX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG59LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIHIuZChpLCJhIixpKSxpfSxyLm89ZnVuY3Rpb24obixpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSl9LHIucD0iIixyKHIucz0yNil9KFtmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJMYXlvdXRDb25zdGFudHMiKSxuLlFVQUxJVFk9MSxuLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRD0hMSxuLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ9ITAsbi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUPSExLG4uREVGQVVMVF9BTklNQVRJT05fUEVSSU9EPTUwLG4uREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUz0hMSxuLkRFRkFVTFRfR1JBUEhfTUFSR0lOPTE1LG4uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPSExLG4uU0lNUExFX05PREVfU0laRT00MCxuLlNJTVBMRV9OT0RFX0hBTEZfU0laRT1uLlNJTVBMRV9OT0RFX1NJWkUvMixuLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRT00MCxuLk1JTl9FREdFX0xFTkdUSD0xLG4uV09STERfQk9VTkRBUlk9MWU2LG4uSU5JVElBTF9XT1JMRF9CT1VOREFSWT1uLldPUkxEX0JPVU5EQVJZLzFlMyxuLldPUkxEX0NFTlRFUl9YPTEyMDAsbi5XT1JMRF9DRU5URVJfWT05MDAsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoOCksYT1yKDkpO2Z1bmN0aW9uIHModSxoLGYpe24uY2FsbCh0aGlzLGYpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PSExLHRoaXMudkdyYXBoT2JqZWN0PWYsdGhpcy5iZW5kcG9pbnRzPVtdLHRoaXMuc291cmNlPXUsdGhpcy50YXJnZXQ9aH1vKHMsIkxFZGdlIikscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBsIGluIG4pc1tsXT1uW2xdO3MucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxzLnByb3RvdHlwZS5pc0ludGVyR3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludGVyR3JhcGh9LHMucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0scy5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fSxzLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVuZHBvaW50c30scy5wcm90b3R5cGUuZ2V0TGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGNhfSxzLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZUluTGNhfSxzLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldEluTGNhfSxzLnByb3RvdHlwZS5nZXRPdGhlckVuZD1mdW5jdGlvbih1KXtpZih0aGlzLnNvdXJjZT09PXUpcmV0dXJuIHRoaXMudGFyZ2V0O2lmKHRoaXMudGFyZ2V0PT09dSlyZXR1cm4gdGhpcy5zb3VyY2U7dGhyb3ciTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2UifSxzLnByb3RvdHlwZS5nZXRPdGhlckVuZEluR3JhcGg9ZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9dGhpcy5nZXRPdGhlckVuZCh1KSxkPWguZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpOzspe2lmKGYuZ2V0T3duZXIoKT09aClyZXR1cm4gZjtpZihmLmdldE93bmVyKCk9PWQpYnJlYWs7Zj1mLmdldE93bmVyKCkuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9LHMucHJvdG90eXBlLnVwZGF0ZUxlbmd0aD1mdW5jdGlvbigpe3ZhciB1PW5ldyBBcnJheSg0KTt0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1pLmdldEludGVyc2VjdGlvbih0aGlzLnRhcmdldC5nZXRSZWN0KCksdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLHUpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fHwodGhpcy5sZW5ndGhYPXVbMF0tdVsyXSx0aGlzLmxlbmd0aFk9dVsxXS11WzNdLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1hLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPWEuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKSl9LHMucHJvdG90eXBlLnVwZGF0ZUxlbmd0aFNpbXBsZT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoWD10aGlzLnRhcmdldC5nZXRDZW50ZXJYKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWCgpLHRoaXMubGVuZ3RoWT10aGlzLnRhcmdldC5nZXRDZW50ZXJZKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1hLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPWEuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKX0sdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpKXt0aGlzLnZHcmFwaE9iamVjdD1pfW8obiwiTEdyYXBoT2JqZWN0IiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigxMykscz1yKDApLGw9cigxNiksdT1yKDQpO2Z1bmN0aW9uIGgoZCxwLG0sZyl7bT09bnVsbCYmZz09bnVsbCYmKGc9cCksbi5jYWxsKHRoaXMsZyksZC5ncmFwaE1hbmFnZXIhPW51bGwmJihkPWQuZ3JhcGhNYW5hZ2VyKSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9aS5NQVhfVkFMVUUsdGhpcy52R3JhcGhPYmplY3Q9Zyx0aGlzLmVkZ2VzPVtdLHRoaXMuZ3JhcGhNYW5hZ2VyPWQsbSE9bnVsbCYmcCE9bnVsbD90aGlzLnJlY3Q9bmV3IGEocC54LHAueSxtLndpZHRoLG0uaGVpZ2h0KTp0aGlzLnJlY3Q9bmV3IGF9byhoLCJMTm9kZSIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBuKWhbZl09bltmXTtoLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxoLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkfSxoLnByb3RvdHlwZS5nZXRPd25lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyfSxoLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGQpe3RoaXMucmVjdC53aWR0aD1kfSxoLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGQpe3RoaXMucmVjdC5oZWlnaHQ9ZH0saC5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzIpfSxoLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLnJlY3QueCx0aGlzLnJlY3QueSl9LGgucHJvdG90eXBlLmdldFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0fSxoLnByb3RvdHlwZS5nZXREaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQpfSxoLnByb3RvdHlwZS5nZXRIYWxmVGhlRGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCt0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoKS8yfSxoLnByb3RvdHlwZS5zZXRSZWN0PWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC54LHRoaXMucmVjdC55PWQueSx0aGlzLnJlY3Qud2lkdGg9cC53aWR0aCx0aGlzLnJlY3QuaGVpZ2h0PXAuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLXRoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55PXAtdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQsdGhpcy5yZWN0Lnk9cH0saC5wcm90b3R5cGUubW92ZUJ5PWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0LngrPWQsdGhpcy5yZWN0LnkrPXB9LGgucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoeS50YXJnZXQ9PWQpe2lmKHkuc291cmNlIT1nKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSEiO3AucHVzaCh5KX19KSxwfSxoLnByb3RvdHlwZS5nZXRFZGdlc0JldHdlZW49ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZighKHkuc291cmNlPT1nfHx5LnRhcmdldD09ZykpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQiOyh5LnRhcmdldD09ZHx8eS5zb3VyY2U9PWQpJiZwLnB1c2goeSl9KSxwfSxoLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0PWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwPXRoaXM7cmV0dXJuIHAuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLnNvdXJjZT09cClkLmFkZChtLnRhcmdldCk7ZWxzZXtpZihtLnRhcmdldCE9cCl0aHJvdyJJbmNvcnJlY3QgaW5jaWRlbmN5ISI7ZC5hZGQobS5zb3VyY2UpfX0pLGR9LGgucHJvdG90eXBlLndpdGhDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscCxtO2lmKGQuYWRkKHRoaXMpLHRoaXMuY2hpbGQhPW51bGwpZm9yKHZhciBnPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSx5PTA7eTxnLmxlbmd0aDt5KyspcD1nW3ldLG09cC53aXRoQ2hpbGRyZW4oKSxtLmZvckVhY2goZnVuY3Rpb24odil7ZC5hZGQodil9KTtyZXR1cm4gZH0saC5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9MCxwO2lmKHRoaXMuY2hpbGQ9PW51bGwpZD0xO2Vsc2UgZm9yKHZhciBtPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxnPTA7ZzxtLmxlbmd0aDtnKyspcD1tW2ddLGQrPXAuZ2V0Tm9PZkNoaWxkcmVuKCk7cmV0dXJuIGQ9PTAmJihkPTEpLGR9LGgucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LGgucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5lc3RpbWF0ZWRTaXplPSh0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCkvMjoodGhpcy5lc3RpbWF0ZWRTaXplPXRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLnJlY3Qud2lkdGg9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMucmVjdC5oZWlnaHQ9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMuZXN0aW1hdGVkU2l6ZSl9LGgucHJvdG90eXBlLnNjYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgZCxwLG09LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSxnPXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtkPXMuV09STERfQ0VOVEVSX1grbC5uZXh0RG91YmxlKCkqKGctbSkrbTt2YXIgeT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLHY9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO3A9cy5XT1JMRF9DRU5URVJfWStsLm5leHREb3VibGUoKSoodi15KSt5LHRoaXMucmVjdC54PWQsdGhpcy5yZWN0Lnk9cH0saC5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5nZXRDaGlsZCgpPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCE9MCl7dmFyIGQ9dGhpcy5nZXRDaGlsZCgpO2lmKGQudXBkYXRlQm91bmRzKCEwKSx0aGlzLnJlY3QueD1kLmdldExlZnQoKSx0aGlzLnJlY3QueT1kLmdldFRvcCgpLHRoaXMuc2V0V2lkdGgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKSx0aGlzLnNldEhlaWdodChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpLHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKXt2YXIgcD1kLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCksbT1kLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCk7dGhpcy5sYWJlbFdpZHRoPnAmJih0aGlzLnJlY3QueC09KHRoaXMubGFiZWxXaWR0aC1wKS8yLHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKSksdGhpcy5sYWJlbEhlaWdodD5tJiYodGhpcy5sYWJlbFBvcz09ImNlbnRlciI/dGhpcy5yZWN0LnktPSh0aGlzLmxhYmVsSGVpZ2h0LW0pLzI6dGhpcy5sYWJlbFBvcz09InRvcCImJih0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodC1tKSx0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KSl9fX0saC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9PWkuTUFYX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aH0saC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGQpe3ZhciBwPXRoaXMucmVjdC54O3A+cy5XT1JMRF9CT1VOREFSWT9wPXMuV09STERfQk9VTkRBUlk6cDwtcy5XT1JMRF9CT1VOREFSWSYmKHA9LXMuV09STERfQk9VTkRBUlkpO3ZhciBtPXRoaXMucmVjdC55O20+cy5XT1JMRF9CT1VOREFSWT9tPXMuV09STERfQk9VTkRBUlk6bTwtcy5XT1JMRF9CT1VOREFSWSYmKG09LXMuV09STERfQk9VTkRBUlkpO3ZhciBnPW5ldyB1KHAsbSkseT1kLmludmVyc2VUcmFuc2Zvcm1Qb2ludChnKTt0aGlzLnNldExvY2F0aW9uKHkueCx5LnkpfSxoLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxoLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0saC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe2k9PW51bGwmJmE9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKToodGhpcy54PWksdGhpcy55PWEpfW8obiwiUG9pbnREIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXREaWZmZXJlbmNlPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLngtaS54LHRoaXMueS1pLnkpfSxuLnByb3RvdHlwZS5nZXRDb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMueCs9aS53aWR0aCx0aGlzLnkrPWkuaGVpZ2h0LHRoaXN9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMCkscz1yKDYpLGw9cigzKSx1PXIoMSksaD1yKDEzKSxmPXIoMTIpLGQ9cigxMSk7ZnVuY3Rpb24gcChnLHksdil7bi5jYWxsKHRoaXMsdiksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPWEuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9Zyx5IT1udWxsJiZ5IGluc3RhbmNlb2Ygcz90aGlzLmdyYXBoTWFuYWdlcj15OnkhPW51bGwmJnkgaW5zdGFuY2VvZiBMYXlvdXQmJih0aGlzLmdyYXBoTWFuYWdlcj15LmdyYXBoTWFuYWdlcil9byhwLCJMR3JhcGgiKSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIG0gaW4gbilwW21dPW5bbV07cC5wcm90b3R5cGUuZ2V0Tm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc30scC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30scC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LHAucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0fSxwLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0fSxwLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3B9LHAucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdHRvbX0scC5wcm90b3R5cGUuaXNDb25uZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZH0scC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSx2KXtpZih5PT1udWxsJiZ2PT1udWxsKXt2YXIgeD1nO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93IkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhIjtpZih0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih4KT4tMSl0aHJvdyJOb2RlIGFscmVhZHkgaW4gZ3JhcGghIjtyZXR1cm4geC5vd25lcj10aGlzLHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKHgpLHh9ZWxzZXt2YXIgYj1nO2lmKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeSk+LTEmJnRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHYpPi0xKSl0aHJvdyJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCEiO2lmKCEoeS5vd25lcj09di5vd25lciYmeS5vd25lcj09dGhpcykpdGhyb3ciQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoISI7cmV0dXJuIHkub3duZXIhPXYub3duZXI/bnVsbDooYi5zb3VyY2U9eSxiLnRhcmdldD12LGIuaXNJbnRlckdyYXBoPSExLHRoaXMuZ2V0RWRnZXMoKS5wdXNoKGIpLHkuZWRnZXMucHVzaChiKSx2IT15JiZ2LmVkZ2VzLnB1c2goYiksYil9fSxwLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZyl7dmFyIHk9ZztpZihnIGluc3RhbmNlb2YgbCl7aWYoeT09bnVsbCl0aHJvdyJOb2RlIGlzIG51bGwhIjtpZighKHkub3duZXIhPW51bGwmJnkub3duZXI9PXRoaXMpKXRocm93Ik93bmVyIGdyYXBoIGlzIGludmFsaWQhIjtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhIjtmb3IodmFyIHY9eS5lZGdlcy5zbGljZSgpLHgsYj12Lmxlbmd0aCx3PTA7dzxiO3crKyl4PXZbd10seC5pc0ludGVyR3JhcGg/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHgpOnguc291cmNlLm93bmVyLnJlbW92ZSh4KTt2YXIgXz10aGlzLm5vZGVzLmluZGV4T2YoeSk7aWYoXz09LTEpdGhyb3ciTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0ISI7dGhpcy5ub2Rlcy5zcGxpY2UoXywxKX1lbHNlIGlmKGcgaW5zdGFuY2VvZiB1KXt2YXIgeD1nO2lmKHg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoISh4LnNvdXJjZSE9bnVsbCYmeC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHguc291cmNlLm93bmVyIT1udWxsJiZ4LnRhcmdldC5vd25lciE9bnVsbCYmeC5zb3VyY2Uub3duZXI9PXRoaXMmJngudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIFQ9eC5zb3VyY2UuZWRnZXMuaW5kZXhPZih4KSxFPXgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoeCk7aWYoIShUPi0xJiZFPi0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7eC5zb3VyY2UuZWRnZXMuc3BsaWNlKFQsMSkseC50YXJnZXQhPXguc291cmNlJiZ4LnRhcmdldC5lZGdlcy5zcGxpY2UoRSwxKTt2YXIgXz14LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLmluZGV4T2YoeCk7aWYoXz09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoXywxKX19LHAucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3A9ZnVuY3Rpb24oKXtmb3IodmFyIGc9aS5NQVhfVkFMVUUseT1pLk1BWF9WQUxVRSx2LHgsYix3PXRoaXMuZ2V0Tm9kZXMoKSxfPXcubGVuZ3RoLFQ9MDtUPF87VCsrKXt2YXIgRT13W1RdO3Y9RS5nZXRUb3AoKSx4PUUuZ2V0TGVmdCgpLGc+diYmKGc9dikseT54JiYoeT14KX1yZXR1cm4gZz09aS5NQVhfVkFMVUU/bnVsbDood1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9iPXdbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6Yj10aGlzLm1hcmdpbix0aGlzLmxlZnQ9eS1iLHRoaXMudG9wPWctYixuZXcgZih0aGlzLmxlZnQsdGhpcy50b3ApKX0scC5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1pLk1BWF9WQUxVRSx2PS1pLk1BWF9WQUxVRSx4PWkuTUFYX1ZBTFVFLGI9LWkuTUFYX1ZBTFVFLHcsXyxULEUsTCxTPXRoaXMubm9kZXMsQT1TLmxlbmd0aCxJPTA7STxBO0krKyl7dmFyIEQ9U1tJXTtnJiZELmNoaWxkIT1udWxsJiZELnVwZGF0ZUJvdW5kcygpLHc9RC5nZXRMZWZ0KCksXz1ELmdldFJpZ2h0KCksVD1ELmdldFRvcCgpLEU9RC5nZXRCb3R0b20oKSx5PncmJih5PXcpLHY8XyYmKHY9XykseD5UJiYoeD1UKSxiPEUmJihiPUUpfXZhciBrPW5ldyBoKHkseCx2LXksYi14KTt5PT1pLk1BWF9WQUxVRSYmKHRoaXMubGVmdD10aGlzLnBhcmVudC5nZXRMZWZ0KCksdGhpcy5yaWdodD10aGlzLnBhcmVudC5nZXRSaWdodCgpLHRoaXMudG9wPXRoaXMucGFyZW50LmdldFRvcCgpLHRoaXMuYm90dG9tPXRoaXMucGFyZW50LmdldEJvdHRvbSgpKSxTWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP0w9U1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpMPXRoaXMubWFyZ2luLHRoaXMubGVmdD1rLngtTCx0aGlzLnJpZ2h0PWsueCtrLndpZHRoK0wsdGhpcy50b3A9ay55LUwsdGhpcy5ib3R0b209ay55K2suaGVpZ2h0K0x9LHAuY2FsY3VsYXRlQm91bmRzPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1pLk1BWF9WQUxVRSx2PS1pLk1BWF9WQUxVRSx4PWkuTUFYX1ZBTFVFLGI9LWkuTUFYX1ZBTFVFLHcsXyxULEUsTD1nLmxlbmd0aCxTPTA7UzxMO1MrKyl7dmFyIEE9Z1tTXTt3PUEuZ2V0TGVmdCgpLF89QS5nZXRSaWdodCgpLFQ9QS5nZXRUb3AoKSxFPUEuZ2V0Qm90dG9tKCkseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgST1uZXcgaCh5LHgsdi15LGIteCk7cmV0dXJuIEl9LHAucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/MTp0aGlzLnBhcmVudC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKX0scC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtmb3IodmFyIGc9MCx5PXRoaXMubm9kZXMsdj15Lmxlbmd0aCx4PTA7eDx2O3grKyl7dmFyIGI9eVt4XTtnKz1iLmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGc9PTA/dGhpcy5lc3RpbWF0ZWRTaXplPWEuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFOnRoaXMuZXN0aW1hdGVkU2l6ZT1nL01hdGguc3FydCh0aGlzLm5vZGVzLmxlbmd0aCksdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS51cGRhdGVDb25uZWN0ZWQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgeT1uZXcgZCx2PW5ldyBTZXQseD10aGlzLm5vZGVzWzBdLGIsdyxfPXgud2l0aENoaWxkcmVuKCk7Zm9yKF8uZm9yRWFjaChmdW5jdGlvbihJKXt5LnB1c2goSSksdi5hZGQoSSl9KTt5Lmxlbmd0aCE9PTA7KXt4PXkuc2hpZnQoKSxiPXguZ2V0RWRnZXMoKTtmb3IodmFyIFQ9Yi5sZW5ndGgsRT0wO0U8VDtFKyspe3ZhciBMPWJbRV07aWYodz1MLmdldE90aGVyRW5kSW5HcmFwaCh4LHRoaXMpLHchPW51bGwmJiF2Lmhhcyh3KSl7dmFyIFM9dy53aXRoQ2hpbGRyZW4oKTtTLmZvckVhY2goZnVuY3Rpb24oSSl7eS5wdXNoKEkpLHYuYWRkKEkpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLHYuc2l6ZT49dGhpcy5ub2Rlcy5sZW5ndGgpe3ZhciBBPTA7di5mb3JFYWNoKGZ1bmN0aW9uKEkpe0kub3duZXI9PWcmJkErK30pLEE9PXRoaXMubm9kZXMubGVuZ3RoJiYodGhpcy5pc0Nvbm5lY3RlZD0hMCl9fSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXIoMSk7ZnVuY3Rpb24gYShzKXtuPXIoNSksdGhpcy5sYXlvdXQ9cyx0aGlzLmdyYXBocz1bXSx0aGlzLmVkZ2VzPVtdfW8oYSwiTEdyYXBoTWFuYWdlciIpLGEucHJvdG90eXBlLmFkZFJvb3Q9ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmxheW91dC5uZXdHcmFwaCgpLGw9dGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKSx1PXRoaXMuYWRkKHMsbCk7cmV0dXJuIHRoaXMuc2V0Um9vdEdyYXBoKHUpLHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyxsLHUsaCxmKXtpZih1PT1udWxsJiZoPT1udWxsJiZmPT1udWxsKXtpZihzPT1udWxsKXRocm93IkdyYXBoIGlzIG51bGwhIjtpZihsPT1udWxsKXRocm93IlBhcmVudCBub2RlIGlzIG51bGwhIjtpZih0aGlzLmdyYXBocy5pbmRleE9mKHMpPi0xKXRocm93IkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZih0aGlzLmdyYXBocy5wdXNoKHMpLHMucGFyZW50IT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgcGFyZW50ISI7aWYobC5jaGlsZCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIGNoaWxkISI7cmV0dXJuIHMucGFyZW50PWwsbC5jaGlsZD1zLHN9ZWxzZXtmPXUsaD1sLHU9czt2YXIgZD1oLmdldE93bmVyKCkscD1mLmdldE93bmVyKCk7aWYoIShkIT1udWxsJiZkLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoIShwIT1udWxsJiZwLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoZD09cClyZXR1cm4gdS5pc0ludGVyR3JhcGg9ITEsZC5hZGQodSxoLGYpO2lmKHUuaXNJbnRlckdyYXBoPSEwLHUuc291cmNlPWgsdS50YXJnZXQ9Zix0aGlzLmVkZ2VzLmluZGV4T2YodSk+LTEpdGhyb3ciRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCEiO2lmKHRoaXMuZWRnZXMucHVzaCh1KSwhKHUuc291cmNlIT1udWxsJiZ1LnRhcmdldCE9bnVsbCkpdGhyb3ciRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh1LnNvdXJjZS5lZGdlcy5pbmRleE9mKHUpPT0tMSYmdS50YXJnZXQuZWRnZXMuaW5kZXhPZih1KT09LTEpKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCEiO3JldHVybiB1LnNvdXJjZS5lZGdlcy5wdXNoKHUpLHUudGFyZ2V0LmVkZ2VzLnB1c2godSksdX19LGEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihzKXtpZihzIGluc3RhbmNlb2Ygbil7dmFyIGw9cztpZihsLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nciI7aWYoIShsPT10aGlzLnJvb3RHcmFwaHx8bC5wYXJlbnQhPW51bGwmJmwucGFyZW50LmdyYXBoTWFuYWdlcj09dGhpcykpdGhyb3ciSW52YWxpZCBwYXJlbnQgbm9kZSEiO3ZhciB1PVtdO3U9dS5jb25jYXQobC5nZXRFZGdlcygpKTtmb3IodmFyIGgsZj11Lmxlbmd0aCxkPTA7ZDxmO2QrKyloPXVbZF0sbC5yZW1vdmUoaCk7dmFyIHA9W107cD1wLmNvbmNhdChsLmdldE5vZGVzKCkpO3ZhciBtO2Y9cC5sZW5ndGg7Zm9yKHZhciBkPTA7ZDxmO2QrKyltPXBbZF0sbC5yZW1vdmUobSk7bD09dGhpcy5yb290R3JhcGgmJnRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO3ZhciBnPXRoaXMuZ3JhcGhzLmluZGV4T2YobCk7dGhpcy5ncmFwaHMuc3BsaWNlKGcsMSksbC5wYXJlbnQ9bnVsbH1lbHNlIGlmKHMgaW5zdGFuY2VvZiBpKXtpZihoPXMsaD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighaC5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKGguc291cmNlIT1udWxsJiZoLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoaC5zb3VyY2UuZWRnZXMuaW5kZXhPZihoKSE9LTEmJmgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoaCkhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGc9aC5zb3VyY2UuZWRnZXMuaW5kZXhPZihoKTtpZihoLnNvdXJjZS5lZGdlcy5zcGxpY2UoZywxKSxnPWgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoaCksaC50YXJnZXQuZWRnZXMuc3BsaWNlKGcsMSksIShoLnNvdXJjZS5vd25lciE9bnVsbCYmaC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkhPW51bGwpKXRocm93IkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsISI7aWYoaC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKT09LTEpdGhyb3ciTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhIjt2YXIgZz1oLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpO2guc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLnNwbGljZShnLDEpfX0sYS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0sYS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSxhLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgcz1bXSxsPXRoaXMuZ2V0R3JhcGhzKCksdT1sLmxlbmd0aCxoPTA7aDx1O2grKylzPXMuY29uY2F0KGxbaF0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1zfXJldHVybiB0aGlzLmFsbE5vZGVzfSxhLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSxhLnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSxhLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSxhLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe2Zvcih2YXIgcz1bXSxsPXRoaXMuZ2V0R3JhcGhzKCksdT1sLmxlbmd0aCxoPTA7aDxsLmxlbmd0aDtoKyspcz1zLmNvbmNhdChsW2hdLmdldEVkZ2VzKCkpO3M9cy5jb25jYXQodGhpcy5lZGdlcyksdGhpcy5hbGxFZGdlcz1zfXJldHVybiB0aGlzLmFsbEVkZ2VzfSxhLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9ufSxhLnByb3RvdHlwZS5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbihzKXtpZih0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249c30sYS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuc2V0Um9vdEdyYXBoPWZ1bmN0aW9uKHMpe2lmKHMuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciUm9vdCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjt0aGlzLnJvb3RHcmFwaD1zLHMucGFyZW50PT1udWxsJiYocy5wYXJlbnQ9dGhpcy5sYXlvdXQubmV3Tm9kZSgiUm9vdCBub2RlIikpfSxhLnByb3RvdHlwZS5nZXRMYXlvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXR9LGEucHJvdG90eXBlLmlzT25lQW5jZXN0b3JPZk90aGVyPWZ1bmN0aW9uKHMsbCl7aWYoIShzIT1udWxsJiZsIT1udWxsKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZihzPT1sKXJldHVybiEwO3ZhciB1PXMuZ2V0T3duZXIoKSxoO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PWwpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7dT1sLmdldE93bmVyKCk7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09cylyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTtyZXR1cm4hMX0sYS5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcyxsLHUsaCxmLGQ9dGhpcy5nZXRBbGxFZGdlcygpLHA9ZC5sZW5ndGgsbT0wO208cDttKyspe2lmKHM9ZFttXSxsPXMuc291cmNlLHU9cy50YXJnZXQscy5sY2E9bnVsbCxzLnNvdXJjZUluTGNhPWwscy50YXJnZXRJbkxjYT11LGw9PXUpe3MubGNhPWwuZ2V0T3duZXIoKTtjb250aW51ZX1mb3IoaD1sLmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtmb3Iocy50YXJnZXRJbkxjYT11LGY9dS5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7aWYoZj09aCl7cy5sY2E9ZjticmVha31pZihmPT10aGlzLnJvb3RHcmFwaClicmVhaztpZihzLmxjYSE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtzLnRhcmdldEluTGNhPWYuZ2V0UGFyZW50KCksZj1zLnRhcmdldEluTGNhLmdldE93bmVyKCl9aWYoaD09dGhpcy5yb290R3JhcGgpYnJlYWs7cy5sY2E9PW51bGwmJihzLnNvdXJjZUluTGNhPWguZ2V0UGFyZW50KCksaD1zLnNvdXJjZUluTGNhLmdldE93bmVyKCkpfWlmKHMubGNhPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQifX0sYS5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yPWZ1bmN0aW9uKHMsbCl7aWYocz09bClyZXR1cm4gcy5nZXRPd25lcigpO3ZhciB1PXMuZ2V0T3duZXIoKTtkb3tpZih1PT1udWxsKWJyZWFrO3ZhciBoPWwuZ2V0T3duZXIoKTtkb3tpZihoPT1udWxsKWJyZWFrO2lmKGg9PXUpcmV0dXJuIGg7aD1oLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3U9dS5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTtyZXR1cm4gdX0sYS5wcm90b3R5cGUuY2FsY0luY2x1c2lvblRyZWVEZXB0aHM9ZnVuY3Rpb24ocyxsKXtzPT1udWxsJiZsPT1udWxsJiYocz10aGlzLnJvb3RHcmFwaCxsPTEpO2Zvcih2YXIgdSxoPXMuZ2V0Tm9kZXMoKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXU9aFtkXSx1LmluY2x1c2lvblRyZWVEZXB0aD1sLHUuY2hpbGQhPW51bGwmJnRoaXMuY2FsY0luY2x1c2lvblRyZWVEZXB0aHModS5jaGlsZCxsKzEpfSxhLnByb3RvdHlwZS5pbmNsdWRlc0ludmFsaWRFZGdlPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGw9dGhpcy5lZGdlcy5sZW5ndGgsdT0wO3U8bDt1KyspaWYocz10aGlzLmVkZ2VzW3VdLHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIocy5zb3VyY2Uscy50YXJnZXQpKXJldHVybiEwO3JldHVybiExfSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDApO2Z1bmN0aW9uIGkoKXt9byhpLCJGRExheW91dENvbnN0YW50cyIpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLk1BWF9JVEVSQVRJT05TPTI1MDAsaS5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxpLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxpLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxpLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxpLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGkuTUFYX05PREVfRElTUExBQ0VNRU5UPWkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsaS5NSU5fUkVQVUxTSU9OX0RJU1Q9aS5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxpLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsaS5NSU5fRURHRV9MRU5HVEg9MSxpLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2Z1bmN0aW9uIGkoKXt9byhpLCJJR2VvbWV0cnkiKSxpLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKGEscyxsLHUpe2lmKCFhLmludGVyc2VjdHMocykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIGg9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoYSxzLGgpLGxbMF09TWF0aC5taW4oYS5nZXRSaWdodCgpLHMuZ2V0UmlnaHQoKSktTWF0aC5tYXgoYS54LHMueCksbFsxXT1NYXRoLm1pbihhLmdldEJvdHRvbSgpLHMuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KGEueSxzLnkpLGEuZ2V0WCgpPD1zLmdldFgoKSYmYS5nZXRSaWdodCgpPj1zLmdldFJpZ2h0KCk/bFswXSs9TWF0aC5taW4ocy5nZXRYKCktYS5nZXRYKCksYS5nZXRSaWdodCgpLXMuZ2V0UmlnaHQoKSk6cy5nZXRYKCk8PWEuZ2V0WCgpJiZzLmdldFJpZ2h0KCk+PWEuZ2V0UmlnaHQoKSYmKGxbMF0rPU1hdGgubWluKGEuZ2V0WCgpLXMuZ2V0WCgpLHMuZ2V0UmlnaHQoKS1hLmdldFJpZ2h0KCkpKSxhLmdldFkoKTw9cy5nZXRZKCkmJmEuZ2V0Qm90dG9tKCk+PXMuZ2V0Qm90dG9tKCk/bFsxXSs9TWF0aC5taW4ocy5nZXRZKCktYS5nZXRZKCksYS5nZXRCb3R0b20oKS1zLmdldEJvdHRvbSgpKTpzLmdldFkoKTw9YS5nZXRZKCkmJnMuZ2V0Qm90dG9tKCk+PWEuZ2V0Qm90dG9tKCkmJihsWzFdKz1NYXRoLm1pbihhLmdldFkoKS1zLmdldFkoKSxzLmdldEJvdHRvbSgpLWEuZ2V0Qm90dG9tKCkpKTt2YXIgZj1NYXRoLmFicygocy5nZXRDZW50ZXJZKCktYS5nZXRDZW50ZXJZKCkpLyhzLmdldENlbnRlclgoKS1hLmdldENlbnRlclgoKSkpO3MuZ2V0Q2VudGVyWSgpPT09YS5nZXRDZW50ZXJZKCkmJnMuZ2V0Q2VudGVyWCgpPT09YS5nZXRDZW50ZXJYKCkmJihmPTEpO3ZhciBkPWYqbFswXSxwPWxbMV0vZjtsWzBdPHA/cD1sWzBdOmQ9bFsxXSxsWzBdPS0xKmhbMF0qKHAvMit1KSxsWzFdPS0xKmhbMV0qKGQvMit1KX0saS5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihhLHMsbCl7YS5nZXRDZW50ZXJYKCk8cy5nZXRDZW50ZXJYKCk/bFswXT0tMTpsWzBdPTEsYS5nZXRDZW50ZXJZKCk8cy5nZXRDZW50ZXJZKCk/bFsxXT0tMTpsWzFdPTF9LGkuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihhLHMsbCl7dmFyIHU9YS5nZXRDZW50ZXJYKCksaD1hLmdldENlbnRlclkoKSxmPXMuZ2V0Q2VudGVyWCgpLGQ9cy5nZXRDZW50ZXJZKCk7aWYoYS5pbnRlcnNlY3RzKHMpKXJldHVybiBsWzBdPXUsbFsxXT1oLGxbMl09ZixsWzNdPWQsITA7dmFyIHA9YS5nZXRYKCksbT1hLmdldFkoKSxnPWEuZ2V0UmlnaHQoKSx5PWEuZ2V0WCgpLHY9YS5nZXRCb3R0b20oKSx4PWEuZ2V0UmlnaHQoKSxiPWEuZ2V0V2lkdGhIYWxmKCksdz1hLmdldEhlaWdodEhhbGYoKSxfPXMuZ2V0WCgpLFQ9cy5nZXRZKCksRT1zLmdldFJpZ2h0KCksTD1zLmdldFgoKSxTPXMuZ2V0Qm90dG9tKCksQT1zLmdldFJpZ2h0KCksST1zLmdldFdpZHRoSGFsZigpLEQ9cy5nZXRIZWlnaHRIYWxmKCksaz0hMSxSPSExO2lmKHU9PT1mKXtpZihoPmQpcmV0dXJuIGxbMF09dSxsWzFdPW0sbFsyXT1mLGxbM109UywhMTtpZihoPGQpcmV0dXJuIGxbMF09dSxsWzFdPXYsbFsyXT1mLGxbM109VCwhMX1lbHNlIGlmKGg9PT1kKXtpZih1PmYpcmV0dXJuIGxbMF09cCxsWzFdPWgsbFsyXT1FLGxbM109ZCwhMTtpZih1PGYpcmV0dXJuIGxbMF09ZyxsWzFdPWgsbFsyXT1fLGxbM109ZCwhMX1lbHNle3ZhciBDPWEuaGVpZ2h0L2Eud2lkdGgsTz1zLmhlaWdodC9zLndpZHRoLE49KGQtaCkvKGYtdSksUD12b2lkIDAsRj12b2lkIDAsQj12b2lkIDAsRz12b2lkIDAsej12b2lkIDAsVz12b2lkIDA7aWYoLUM9PT1OP3U+Zj8obFswXT15LGxbMV09dixrPSEwKToobFswXT1nLGxbMV09bSxrPSEwKTpDPT09TiYmKHU+Zj8obFswXT1wLGxbMV09bSxrPSEwKToobFswXT14LGxbMV09dixrPSEwKSksLU89PT1OP2Y+dT8obFsyXT1MLGxbM109UyxSPSEwKToobFsyXT1FLGxbM109VCxSPSEwKTpPPT09TiYmKGY+dT8obFsyXT1fLGxbM109VCxSPSEwKToobFsyXT1BLGxbM109UyxSPSEwKSksayYmUilyZXR1cm4hMTtpZih1PmY/aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQyxOLDQpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihPLE4sMikpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwzKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwxKSk6aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwxKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwzKSk6KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihDLE4sMiksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTiw0KSksIWspc3dpdGNoKFApe2Nhc2UgMTpHPW0sQj11Ky13L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDI6Qj14LEc9aCtiKk4sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDM6Rz12LEI9dSt3L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDQ6Qj15LEc9aCstYipOLGxbMF09QixsWzFdPUc7YnJlYWt9aWYoIVIpc3dpdGNoKEYpe2Nhc2UgMTpXPVQsej1mKy1EL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDI6ej1BLFc9ZCtJKk4sbFsyXT16LGxbM109VzticmVhaztjYXNlIDM6Vz1TLHo9ZitEL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDQ6ej1MLFc9ZCstSSpOLGxbMl09eixsWzNdPVc7YnJlYWt9fXJldHVybiExfSxpLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYT5zP2w6MStsJTR9LGkuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGEscyxsLHUpe2lmKHU9PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihhLHMsbCk7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLF89dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEw9dm9pZCAwLFM9dm9pZCAwLEE9dm9pZCAwO3JldHVybiB3PXAtZixUPWgtZCxMPWQqZi1oKnAsXz12LWcsRT1tLXksUz15KmctbSp2LEE9dypFLV8qVCxBPT09MD9udWxsOih4PShUKlMtRSpMKS9BLGI9KF8qTC13KlMpL0EsbmV3IG4oeCxiKSl9LGkuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD12b2lkIDA7cmV0dXJuIGEhPT1sPyhoPU1hdGguYXRhbigodS1zKS8obC1hKSksbDxhP2grPU1hdGguUEk6dTxzJiYoaCs9dGhpcy5UV09fUEkpKTp1PHM/aD10aGlzLk9ORV9BTkRfSEFMRl9QSTpoPXRoaXMuSEFMRl9QSSxofSxpLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PShkLWgpKih2LWcpLSh5LW0pKihwLWYpO2lmKHg9PT0wKXJldHVybiExO3ZhciBiPSgodi1nKSooeS1oKSsobS15KSoodi1mKSkveCx3PSgoZi1wKSooeS1oKSsoZC1oKSoodi1mKSkveDtyZXR1cm4gMDxiJiZiPDEmJjA8dyYmdzwxfSxpLkhBTEZfUEk9LjUqTWF0aC5QSSxpLk9ORV9BTkRfSEFMRl9QST0xLjUqTWF0aC5QSSxpLlRXT19QST0yKk1hdGguUEksaS5USFJFRV9QST0zKk1hdGguUEksdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIklNYXRoIiksbi5zaWduPWZ1bmN0aW9uKGkpe3JldHVybiBpPjA/MTppPDA/LTE6MH0sbi5mbG9vcj1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguY2VpbChpKTpNYXRoLmZsb29yKGkpfSxuLmNlaWw9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmZsb29yKGkpOk1hdGguY2VpbChpKX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkludGVnZXIiKSxuLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LG4uTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmLGQpe2Zvcih2YXIgcD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdO20uZW51bWVyYWJsZT1tLmVudW1lcmFibGV8fCExLG0uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBtJiYobS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsbS5rZXksbSl9fXJldHVybiBvKGgsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihmLGQscCl7cmV0dXJuIGQmJmgoZi5wcm90b3R5cGUsZCkscCYmaChmLHApLGZ9fSgpO2Z1bmN0aW9uIGkoaCxmKXtpZighKGggaW5zdGFuY2VvZiBmKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPW8oZnVuY3Rpb24oZil7cmV0dXJue3ZhbHVlOmYsbmV4dDpudWxsLHByZXY6bnVsbH19LCJub2RlRnJvbSIpLHM9byhmdW5jdGlvbihmLGQscCxtKXtyZXR1cm4gZiE9PW51bGw/Zi5uZXh0PWQ6bS5oZWFkPWQscCE9PW51bGw/cC5wcmV2PWQ6bS50YWlsPWQsZC5wcmV2PWYsZC5uZXh0PXAsbS5sZW5ndGgrKyxkfSwiYWRkIiksbD1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi5wcmV2LG09Zi5uZXh0O3JldHVybiBwIT09bnVsbD9wLm5leHQ9bTpkLmhlYWQ9bSxtIT09bnVsbD9tLnByZXY9cDpkLnRhaWw9cCxmLnByZXY9Zi5uZXh0PW51bGwsZC5sZW5ndGgtLSxmfSwiX3JlbW92ZSIpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYpe3ZhciBkPXRoaXM7aSh0aGlzLGgpLHRoaXMubGVuZ3RoPTAsdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsZj8uZm9yRWFjaChmdW5jdGlvbihwKXtyZXR1cm4gZC5wdXNoKHApfSl9cmV0dXJuIG8oaCwiTGlua2VkTGlzdCIpLG4oaCxbe2tleToic2l6ZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocC5wcmV2LGEoZCkscCx0aGlzKX0sImluc2VydEJlZm9yZSIpfSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsYShkKSxwLm5leHQsdGhpcyl9LCJpbnNlcnRBZnRlciIpfSx7a2V5OiJpbnNlcnROb2RlQmVmb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocC5wcmV2LGQscCx0aGlzKX0sImluc2VydE5vZGVCZWZvcmUiKX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxkLHAubmV4dCx0aGlzKX0sImluc2VydE5vZGVBZnRlciIpfSx7a2V5OiJwdXNoIix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKHRoaXMudGFpbCxhKGQpLG51bGwsdGhpcyl9LCJwdXNoIil9LHtrZXk6InVuc2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHMobnVsbCxhKGQpLHRoaXMuaGVhZCx0aGlzKX0sInVuc2hpZnQiKX0se2tleToicmVtb3ZlIix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBsKGQsdGhpcyl9LCJyZW1vdmUiKX0se2tleToicG9wIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpLnZhbHVlfSwicG9wIil9LHtrZXk6InBvcE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcyl9LCJwb3BOb2RlIil9LHtrZXk6InNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5oZWFkLHRoaXMpLnZhbHVlfSwic2hpZnQiKX0se2tleToic2hpZnROb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5oZWFkLHRoaXMpfSwic2hpZnROb2RlIil9LHtrZXk6ImdldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCl7aWYoZDw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBwPTEsbT10aGlzLmhlYWQ7cDxkOyltPW0ubmV4dCxwKys7cmV0dXJuIG0udmFsdWV9fSwiZ2V0X29iamVjdF9hdCIpfSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7aWYoZDw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBtPTEsZz10aGlzLmhlYWQ7bTxkOylnPWcubmV4dCxtKys7Zy52YWx1ZT1wfX0sInNldF9vYmplY3RfYXQiKX1dKSxofSgpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhLHMpe3RoaXMueD1udWxsLHRoaXMueT1udWxsLGk9PW51bGwmJmE9PW51bGwmJnM9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbD8odGhpcy54PWksdGhpcy55PWEpOmkuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbCYmKHM9aSx0aGlzLng9cy54LHRoaXMueT1zLnkpfW8obiwiUG9pbnQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxuLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihpLGEscyl7aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsPyhzPWksdGhpcy5zZXRMb2NhdGlvbihzLngscy55KSk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGwmJihwYXJzZUludChpKT09aSYmcGFyc2VJbnQoYSk9PWE/dGhpcy5tb3ZlKGksYSk6KHRoaXMueD1NYXRoLmZsb29yKGkrLjUpLHRoaXMueT1NYXRoLmZsb29yKGErLjUpKSl9LG4ucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oaSxhKXt0aGlzLng9aSx0aGlzLnk9YX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGksYSl7dGhpcy54Kz1pLHRoaXMueSs9YX0sbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGkpe2lmKGkuY29uc3RydWN0b3IubmFtZT09IlBvaW50Iil7dmFyIGE9aTtyZXR1cm4gdGhpcy54PT1hLngmJnRoaXMueT09YS55fXJldHVybiB0aGlzPT1pfSxuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgbigpLmNvbnN0cnVjdG9yLm5hbWUrIlt4PSIrdGhpcy54KyIseT0iK3RoaXMueSsiXSJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhLHMsbCl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaSE9bnVsbCYmYSE9bnVsbCYmcyE9bnVsbCYmbCE9bnVsbCYmKHRoaXMueD1pLHRoaXMueT1hLHRoaXMud2lkdGg9cyx0aGlzLmhlaWdodD1sKX1vKG4sIlJlY3RhbmdsZUQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG4ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGkpe3RoaXMud2lkdGg9aX0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oaSl7dGhpcy5oZWlnaHQ9aX0sbi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oaSl7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8aS54fHx0aGlzLmdldEJvdHRvbSgpPGkueXx8aS5nZXRSaWdodCgpPHRoaXMueHx8aS5nZXRCb3R0b20oKTx0aGlzLnkpfSxuLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LG4ucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sbi5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX07ZnVuY3Rpb24gaSgpe31vKGksIlVuaXF1ZUlER2VuZXJldG9yIiksaS5sYXN0SUQ9MCxpLmNyZWF0ZUlEPWZ1bmN0aW9uKGEpe3JldHVybiBpLmlzUHJpbWl0aXZlKGEpP2E6KGEudW5pcXVlSUQhPW51bGx8fChhLnVuaXF1ZUlEPWkuZ2V0U3RyaW5nKCksaS5sYXN0SUQrKyksYS51bmlxdWVJRCl9LGkuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsJiYoYT1pLmxhc3RJRCksIk9iamVjdCMiK2F9LGkuaXNQcmltaXRpdmU9ZnVuY3Rpb24oYSl7dmFyIHM9dHlwZW9mIGE+InUiPyJ1bmRlZmluZWQiOm4oYSk7cmV0dXJuIGE9PW51bGx8fHMhPSJvYmplY3QiJiZzIT0iZnVuY3Rpb24ifSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKG0pe2lmKEFycmF5LmlzQXJyYXkobSkpe2Zvcih2YXIgZz0wLHk9QXJyYXkobS5sZW5ndGgpO2c8bS5sZW5ndGg7ZysrKXlbZ109bVtnXTtyZXR1cm4geX1lbHNlIHJldHVybiBBcnJheS5mcm9tKG0pfW8obiwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGk9cigwKSxhPXIoNikscz1yKDMpLGw9cigxKSx1PXIoNSksaD1yKDQpLGY9cigxNyksZD1yKDI3KTtmdW5jdGlvbiBwKG0pe2QuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgYSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLG0hPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPW0pfW8ocCwiTGF5b3V0IikscC5SQU5ET01fU0VFRD0xLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKX0scC5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKX0scC5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKX0scC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIG09bmV3IGEodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPW0sbX0scC5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyB1KG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBzKHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgbChudWxsLG51bGwsbSl9LHAucHJvdG90eXBlLmNoZWNrTGF5b3V0U3VjY2Vzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk9PW51bGx8fHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLmxlbmd0aD09MHx8dGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpfSxwLnByb3RvdHlwZS5ydW5MYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy50aWxpbmdQcmVMYXlvdXQmJnRoaXMudGlsaW5nUHJlTGF5b3V0KCksdGhpcy5pbml0UGFyYW1ldGVycygpO3ZhciBtO3JldHVybiB0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpP209ITE6bT10aGlzLmxheW91dCgpLGkuQU5JTUFURT09PSJkdXJpbmciPyExOihtJiYodGhpcy5pc1N1YkxheW91dHx8dGhpcy5kb1Bvc3RMYXlvdXQoKSksdGhpcy50aWxpbmdQb3N0TGF5b3V0JiZ0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITAsbSl9LHAucHJvdG90eXBlLmRvUG9zdExheW91dD1mdW5jdGlvbigpe3RoaXMuaW5jcmVtZW50YWx8fHRoaXMudHJhbnNmb3JtKCksdGhpcy51cGRhdGUoKX0scC5wcm90b3R5cGUudXBkYXRlMj1mdW5jdGlvbigpe2lmKHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSwhdGhpcy5pc1JlbW90ZVVzZSl7Zm9yKHZhciBtLGc9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSx5PTA7eTxnLmxlbmd0aDt5KyspbT1nW3ldO2Zvcih2YXIgdix4PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHk9MDt5PHgubGVuZ3RoO3krKyl2PXhbeV07dGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKX19LHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudXBkYXRlMigpO2Vsc2UgaWYobSBpbnN0YW5jZW9mIHMpe3ZhciBnPW07aWYoZy5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgeT1nLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSx2PTA7djx5Lmxlbmd0aDt2KyspdXBkYXRlKHlbdl0pO2lmKGcudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgeD1nLnZHcmFwaE9iamVjdDt4LnVwZGF0ZShnKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgbCl7dmFyIGI9bTtpZihiLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHc9Yi52R3JhcGhPYmplY3Q7dy51cGRhdGUoYil9fWVsc2UgaWYobSBpbnN0YW5jZW9mIHUpe3ZhciBfPW07aWYoXy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBUPV8udkdyYXBoT2JqZWN0O1QudXBkYXRlKF8pfX19LHAucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5pc1N1YkxheW91dHx8KHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTKSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmKHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9ITEpfSxwLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnRyYW5zZm9ybShuZXcgaCgwLDApKTtlbHNle3ZhciBnPW5ldyBmLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZih5IT1udWxsKXtnLnNldFdvcmxkT3JnWChtLngpLGcuc2V0V29ybGRPcmdZKG0ueSksZy5zZXREZXZpY2VPcmdYKHkueCksZy5zZXREZXZpY2VPcmdZKHkueSk7Zm9yKHZhciB2PXRoaXMuZ2V0QWxsTm9kZXMoKSx4LGI9MDtiPHYubGVuZ3RoO2IrKyl4PXZbYl0seC50cmFuc2Zvcm0oZyl9fX0scC5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGcseSx2PW0uZ2V0Tm9kZXMoKSx4PTA7eDx2Lmxlbmd0aDt4KyspZz12W3hdLHk9Zy5nZXRDaGlsZCgpLHk9PW51bGx8fHkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/Zy5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHkpLGcudXBkYXRlQm91bmRzKCkpfSxwLnByb3RvdHlwZS5nZXRGbGF0Rm9yZXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBtPVtdLGc9ITAseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx2PSEwLHg9MDt4PHkubGVuZ3RoO3grKyl5W3hdLmdldENoaWxkKCkhPW51bGwmJih2PSExKTtpZighdilyZXR1cm4gbTt2YXIgYj1uZXcgU2V0LHc9W10sXz1uZXcgTWFwLFQ9W107Zm9yKFQ9VC5jb25jYXQoeSk7VC5sZW5ndGg+MCYmZzspe2Zvcih3LnB1c2goVFswXSk7dy5sZW5ndGg+MCYmZzspe3ZhciBFPXdbMF07dy5zcGxpY2UoMCwxKSxiLmFkZChFKTtmb3IodmFyIEw9RS5nZXRFZGdlcygpLHg9MDt4PEwubGVuZ3RoO3grKyl7dmFyIFM9TFt4XS5nZXRPdGhlckVuZChFKTtpZihfLmdldChFKSE9UylpZighYi5oYXMoUykpdy5wdXNoKFMpLF8uc2V0KFMsRSk7ZWxzZXtnPSExO2JyZWFrfX19aWYoIWcpbT1bXTtlbHNle3ZhciBBPVtdLmNvbmNhdChuKGIpKTttLnB1c2goQSk7Zm9yKHZhciB4PTA7eDxBLmxlbmd0aDt4Kyspe3ZhciBJPUFbeF0sRD1ULmluZGV4T2YoSSk7RD4tMSYmVC5zcGxpY2UoRCwxKX1iPW5ldyBTZXQsXz1uZXcgTWFwfX1yZXR1cm4gbX0scC5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHM9ZnVuY3Rpb24obSl7Zm9yKHZhciBnPVtdLHk9bS5zb3VyY2Usdj10aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IobS5zb3VyY2UsbS50YXJnZXQpLHg9MDt4PG0uYmVuZHBvaW50cy5sZW5ndGg7eCsrKXt2YXIgYj10aGlzLm5ld05vZGUobnVsbCk7Yi5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksdi5hZGQoYik7dmFyIHc9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh3LHksYiksZy5hZGQoYikseT1ifXZhciB3PXRoaXMubmV3RWRnZShudWxsKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuYWRkKHcseSxtLnRhcmdldCksdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChtLGcpLG0uaXNJbnRlckdyYXBoKCk/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKG0pOnYucmVtb3ZlKG0pLGd9LHAucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2Rlcz1mdW5jdGlvbigpe3ZhciBtPVtdO209bS5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSksbT1bXS5jb25jYXQobih0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KG0pO2Zvcih2YXIgZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2lmKHkuYmVuZHBvaW50cy5sZW5ndGg+MCl7Zm9yKHZhciB2PXRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5nZXQoeSkseD0wO3g8di5sZW5ndGg7eCsrKXt2YXIgYj12W3hdLHc9bmV3IGgoYi5nZXRDZW50ZXJYKCksYi5nZXRDZW50ZXJZKCkpLF89eS5iZW5kcG9pbnRzLmdldCh4KTtfLng9dy54LF8ueT13LnksYi5nZXRPd25lcigpLnJlbW92ZShiKX10aGlzLmdyYXBoTWFuYWdlci5hZGQoeSx5LnNvdXJjZSx5LnRhcmdldCl9fX0scC50cmFuc2Zvcm09ZnVuY3Rpb24obSxnLHksdil7aWYoeSE9bnVsbCYmdiE9bnVsbCl7dmFyIHg9ZztpZihtPD01MCl7dmFyIGI9Zy95O3gtPShnLWIpLzUwKig1MC1tKX1lbHNle3ZhciB3PWcqdjt4Kz0ody1nKS81MCoobS01MCl9cmV0dXJuIHh9ZWxzZXt2YXIgXyxUO3JldHVybiBtPD01MD8oXz05KmcvNTAwLFQ9Zy8xMCk6KF89OSpnLzUwLFQ9LTgqZyksXyptK1R9fSxwLmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24obSl7dmFyIGc9W107Zz1nLmNvbmNhdChtKTt2YXIgeT1bXSx2PW5ldyBNYXAseD0hMSxiPW51bGw7KGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSk7Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDt3Kyspe3ZhciBfPWdbd10sVD1fLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO3Yuc2V0KF8sXy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksVD09MSYmeS5wdXNoKF8pfXZhciBFPVtdO2ZvcihFPUUuY29uY2F0KHkpOyF4Oyl7dmFyIEw9W107TD1MLmNvbmNhdChFKSxFPVtdO2Zvcih2YXIgdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgXz1nW3ddLFM9Zy5pbmRleE9mKF8pO1M+PTAmJmcuc3BsaWNlKFMsMSk7dmFyIEE9Xy5nZXROZWlnaGJvcnNMaXN0KCk7QS5mb3JFYWNoKGZ1bmN0aW9uKGspe2lmKHkuaW5kZXhPZihrKTwwKXt2YXIgUj12LmdldChrKSxDPVItMTtDPT0xJiZFLnB1c2goayksdi5zZXQoayxDKX19KX15PXkuY29uY2F0KEUpLChnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pfXJldHVybiBifSxwLnByb3RvdHlwZS5zZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24obSl7dGhpcy5ncmFwaE1hbmFnZXI9bX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIlJhbmRvbVNlZWQiKSxuLnNlZWQ9MSxuLng9MCxuLm5leHREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gbi54PU1hdGguc2luKG4uc2VlZCsrKSoxZTQsbi54LU1hdGguZmxvb3Iobi54KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0KTtmdW5jdGlvbiBpKGEscyl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfW8oaSwiVHJhbnNmb3JtIiksaS5wcm90b3R5cGUuZ2V0V29ybGRPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWH0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdZfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdZPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFh9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFg9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WX0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WT1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1h9LGkucHJvdG90eXBlLnNldERldmljZU9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlT3JnWD1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1l9LGkucHJvdG90eXBlLnNldERldmljZU9yZ1k9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlT3JnWT1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFh9LGkucHJvdG90eXBlLnNldERldmljZUV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlRXh0WD1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFl9LGkucHJvdG90eXBlLnNldERldmljZUV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlRXh0WT1hfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFg7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1grKGEtdGhpcy5sd29ybGRPcmdYKSp0aGlzLmxkZXZpY2VFeHRYL2wpLHN9LGkucHJvdG90eXBlLnRyYW5zZm9ybVk9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWSsoYS10aGlzLmx3b3JsZE9yZ1kpKnRoaXMubGRldmljZUV4dFkvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubGRldmljZUV4dFg7cmV0dXJuIGwhPTAmJihzPXRoaXMubHdvcmxkT3JnWCsoYS10aGlzLmxkZXZpY2VPcmdYKSp0aGlzLmx3b3JsZEV4dFgvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVk9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubGRldmljZUV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubHdvcmxkT3JnWSsoYS10aGlzLmxkZXZpY2VPcmdZKSp0aGlzLmx3b3JsZEV4dFkvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50PWZ1bmN0aW9uKGEpe3ZhciBzPW5ldyBuKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoYS54KSx0aGlzLmludmVyc2VUcmFuc2Zvcm1ZKGEueSkpO3JldHVybiBzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGQpe2lmKEFycmF5LmlzQXJyYXkoZCkpe2Zvcih2YXIgcD0wLG09QXJyYXkoZC5sZW5ndGgpO3A8ZC5sZW5ndGg7cCsrKW1bcF09ZFtwXTtyZXR1cm4gbX1lbHNlIHJldHVybiBBcnJheS5mcm9tKGQpfW8obiwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGk9cigxNSksYT1yKDcpLHM9cigwKSxsPXIoOCksdT1yKDkpO2Z1bmN0aW9uIGgoKXtpLmNhbGwodGhpcyksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPWEuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5pZGVhbEVkZ2VMZW5ndGg9YS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMuc3ByaW5nQ29uc3RhbnQ9YS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PWEuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1hLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqYS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLmNvb2xpbmdGYWN0b3I9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5tYXhJdGVyYXRpb25zPWEuTUFYX0lURVJBVElPTlN9byhoLCJGRExheW91dCIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBpKWhbZl09aVtmXTtoLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2kucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9YS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxoLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwLG0sZyx5LHYseD10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksYj0wO2I8eC5sZW5ndGg7YisrKWQ9eFtiXSxkLmlkZWFsTGVuZ3RoPXRoaXMuaWRlYWxFZGdlTGVuZ3RoLGQuaXNJbnRlckdyYXBoJiYobT1kLmdldFNvdXJjZSgpLGc9ZC5nZXRUYXJnZXQoKSx5PWQuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdj1kLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiYmKGQuaWRlYWxMZW5ndGgrPXkrdi0yKnMuU0lNUExFX05PREVfU0laRSkscD1kLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLGQuaWRlYWxMZW5ndGgrPWEuREVGQVVMVF9FREdFX0xFTkdUSCphLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKG0uZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZy5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKnApKX0saC5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciphLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZD10aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUqdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCx0aGlzLnJlcHVsc2lvblJhbmdlPXRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxFZGdlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSx0aGlzLmNhbGNTcHJpbmdGb3JjZShwLHAuaWRlYWxMZW5ndGgpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLHA9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLG0sZyx5LHYseD10aGlzLmdldEFsbE5vZGVzKCksYjtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJmQmJnRoaXMudXBkYXRlR3JpZCgpLGI9bmV3IFNldCxtPTA7bTx4Lmxlbmd0aDttKyspeT14W21dLHRoaXMuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlKHksYixkLHApLGIuYWRkKHkpO2Vsc2UgZm9yKG09MDttPHgubGVuZ3RoO20rKylmb3IoeT14W21dLGc9bSsxO2c8eC5sZW5ndGg7ZysrKXY9eFtnXSx5LmdldE93bmVyKCk9PXYuZ2V0T3duZXIoKSYmdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoeSx2KX0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoZCl9LGgucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHAubW92ZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFNvdXJjZSgpLGc9ZC5nZXRUYXJnZXQoKSx5LHYseCxiO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJm0uZ2V0Q2hpbGQoKT09bnVsbCYmZy5nZXRDaGlsZCgpPT1udWxsKWQudXBkYXRlTGVuZ3RoU2ltcGxlKCk7ZWxzZSBpZihkLnVwZGF0ZUxlbmd0aCgpLGQuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KXJldHVybjt5PWQuZ2V0TGVuZ3RoKCkseSE9MCYmKHY9dGhpcy5zcHJpbmdDb25zdGFudCooeS1wKSx4PXYqKGQubGVuZ3RoWC95KSxiPXYqKGQubGVuZ3RoWS95KSxtLnNwcmluZ0ZvcmNlWCs9eCxtLnNwcmluZ0ZvcmNlWSs9YixnLnNwcmluZ0ZvcmNlWC09eCxnLnNwcmluZ0ZvcmNlWS09Yil9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0UmVjdCgpLGc9cC5nZXRSZWN0KCkseT1uZXcgQXJyYXkoMiksdj1uZXcgQXJyYXkoNCkseCxiLHcsXyxULEUsTDtpZihtLmludGVyc2VjdHMoZykpe2wuY2FsY1NlcGFyYXRpb25BbW91bnQobSxnLHksYS5ERUZBVUxUX0VER0VfTEVOR1RILzIpLEU9Mip5WzBdLEw9Mip5WzFdO3ZhciBTPWQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuLyhkLm5vT2ZDaGlsZHJlbitwLm5vT2ZDaGlsZHJlbik7ZC5yZXB1bHNpb25Gb3JjZVgtPVMqRSxkLnJlcHVsc2lvbkZvcmNlWS09UypMLHAucmVwdWxzaW9uRm9yY2VYKz1TKkUscC5yZXB1bHNpb25Gb3JjZVkrPVMqTH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJmQuZ2V0Q2hpbGQoKT09bnVsbCYmcC5nZXRDaGlsZCgpPT1udWxsPyh4PWcuZ2V0Q2VudGVyWCgpLW0uZ2V0Q2VudGVyWCgpLGI9Zy5nZXRDZW50ZXJZKCktbS5nZXRDZW50ZXJZKCkpOihsLmdldEludGVyc2VjdGlvbihtLGcsdikseD12WzJdLXZbMF0sYj12WzNdLXZbMV0pLE1hdGguYWJzKHgpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoeD11LnNpZ24oeCkqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGIpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoYj11LnNpZ24oYikqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLHc9eCp4K2IqYixfPU1hdGguc3FydCh3KSxUPXRoaXMucmVwdWxzaW9uQ29uc3RhbnQqZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vdyxFPVQqeC9fLEw9VCpiL18sZC5yZXB1bHNpb25Gb3JjZVgtPUUsZC5yZXB1bHNpb25Gb3JjZVktPUwscC5yZXB1bHNpb25Gb3JjZVgrPUUscC5yZXB1bHNpb25Gb3JjZVkrPUx9LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oZCl7dmFyIHAsbSxnLHksdix4LGIsdztwPWQuZ2V0T3duZXIoKSxtPShwLmdldFJpZ2h0KCkrcC5nZXRMZWZ0KCkpLzIsZz0ocC5nZXRUb3AoKStwLmdldEJvdHRvbSgpKS8yLHk9ZC5nZXRDZW50ZXJYKCktbSx2PWQuZ2V0Q2VudGVyWSgpLWcseD1NYXRoLmFicyh5KStkLmdldFdpZHRoKCkvMixiPU1hdGguYWJzKHYpK2QuZ2V0SGVpZ2h0KCkvMixkLmdldE93bmVyKCk9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8odz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwoeD53fHxiPncpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KSk6KHc9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciwoeD53fHxiPncpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCkpfSxoLnByb3RvdHlwZS5pc0NvbnZlcmdlZD1mdW5jdGlvbigpe3ZhciBkLHA9ITE7cmV0dXJuIHRoaXMudG90YWxJdGVyYXRpb25zPnRoaXMubWF4SXRlcmF0aW9ucy8zJiYocD1NYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50LXRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQpPDIpLGQ9dGhpcy50b3RhbERpc3BsYWNlbWVudDx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9dGhpcy50b3RhbERpc3BsYWNlbWVudCxkfHxwfSxoLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJiF0aGlzLmlzU3ViTGF5b3V0JiYodGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9PXRoaXMuYW5pbWF0aW9uUGVyaW9kPyh0aGlzLnVwZGF0ZSgpLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTApOnRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zKyspfSxoLnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sZC5ub09mQ2hpbGRyZW49ZC5nZXROb09mQ2hpbGRyZW4oKX0saC5wcm90b3R5cGUuY2FsY0dyaWQ9ZnVuY3Rpb24oZCl7dmFyIHA9MCxtPTA7cD1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLG09cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGc9bmV3IEFycmF5KHApLHk9MDt5PHA7eSsrKWdbeV09bmV3IEFycmF5KG0pO2Zvcih2YXIgeT0wO3k8cDt5KyspZm9yKHZhciB2PTA7djxtO3YrKylnW3ldW3ZdPW5ldyBBcnJheTtyZXR1cm4gZ30saC5wcm90b3R5cGUuYWRkTm9kZVRvR3JpZD1mdW5jdGlvbihkLHAsbSl7dmFyIGc9MCx5PTAsdj0wLHg9MDtnPXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHk9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkud2lkdGgrZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSksdj1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx4PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLmhlaWdodCtkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGI9ZztiPD15O2IrKylmb3IodmFyIHc9djt3PD14O3crKyl0aGlzLmdyaWRbYl1bd10ucHVzaChkKSxkLnNldEdyaWRDb29yZGluYXRlcyhnLHksdix4KX0saC5wcm90b3R5cGUudXBkYXRlR3JpZD1mdW5jdGlvbigpe3ZhciBkLHAsbT10aGlzLmdldEFsbE5vZGVzKCk7Zm9yKHRoaXMuZ3JpZD10aGlzLmNhbGNHcmlkKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSksZD0wO2Q8bS5sZW5ndGg7ZCsrKXA9bVtkXSx0aGlzLmFkZE5vZGVUb0dyaWQocCx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0TGVmdCgpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSl9LGgucHJvdG90eXBlLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZT1mdW5jdGlvbihkLHAsbSxnKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZtfHxnKXt2YXIgeT1uZXcgU2V0O2Quc3Vycm91bmRpbmc9bmV3IEFycmF5O2Zvcih2YXIgdix4PXRoaXMuZ3JpZCxiPWQuc3RhcnRYLTE7YjxkLmZpbmlzaFgrMjtiKyspZm9yKHZhciB3PWQuc3RhcnRZLTE7dzxkLmZpbmlzaFkrMjt3KyspaWYoIShiPDB8fHc8MHx8Yj49eC5sZW5ndGh8fHc+PXhbMF0ubGVuZ3RoKSl7Zm9yKHZhciBfPTA7Xzx4W2JdW3ddLmxlbmd0aDtfKyspaWYodj14W2JdW3ddW19dLCEoZC5nZXRPd25lcigpIT12LmdldE93bmVyKCl8fGQ9PXYpJiYhcC5oYXModikmJiF5Lmhhcyh2KSl7dmFyIFQ9TWF0aC5hYnMoZC5nZXRDZW50ZXJYKCktdi5nZXRDZW50ZXJYKCkpLShkLmdldFdpZHRoKCkvMit2LmdldFdpZHRoKCkvMiksRT1NYXRoLmFicyhkLmdldENlbnRlclkoKS12LmdldENlbnRlclkoKSktKGQuZ2V0SGVpZ2h0KCkvMit2LmdldEhlaWdodCgpLzIpO1Q8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJkU8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnkuYWRkKHYpfX1kLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChuKHkpKX1mb3IoYj0wO2I8ZC5zdXJyb3VuZGluZy5sZW5ndGg7YisrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKGQsZC5zdXJyb3VuZGluZ1tiXSl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAwfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEpLGk9cig3KTtmdW5jdGlvbiBhKGwsdSxoKXtuLmNhbGwodGhpcyxsLHUsaCksdGhpcy5pZGVhbExlbmd0aD1pLkRFRkFVTFRfRURHRV9MRU5HVEh9byhhLCJGRExheW91dEVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzKTtmdW5jdGlvbiBpKHMsbCx1LGgpe24uY2FsbCh0aGlzLHMsbCx1LGgpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MCx0aGlzLnN0YXJ0WD0wLHRoaXMuZmluaXNoWD0wLHRoaXMuc3RhcnRZPTAsdGhpcy5maW5pc2hZPTAsdGhpcy5zdXJyb3VuZGluZz1bXX1vKGksIkZETGF5b3V0Tm9kZSIpLGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLnByb3RvdHlwZS5zZXRHcmlkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24ocyxsLHUsaCl7dGhpcy5zdGFydFg9cyx0aGlzLmZpbmlzaFg9bCx0aGlzLnN0YXJ0WT11LHRoaXMuZmluaXNoWT1ofSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7dGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaSE9PW51bGwmJmEhPT1udWxsJiYodGhpcy5oZWlnaHQ9YSx0aGlzLndpZHRoPWkpfW8obiwiRGltZW5zaW9uRCIpLG4ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG4ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGkpe3RoaXMud2lkdGg9aX0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oaSl7dGhpcy5oZWlnaHQ9aX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNCk7ZnVuY3Rpb24gaSgpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1vKGksIkhhc2hNYXAiKSxpLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1uLmNyZWF0ZUlEKGEpO3RoaXMuY29udGFpbnMobCl8fCh0aGlzLm1hcFtsXT1zLHRoaXMua2V5cy5wdXNoKGEpKX0saS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbYV0hPW51bGx9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFtzXX0saS5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNCk7ZnVuY3Rpb24gaSgpe3RoaXMuc2V0PXt9fW8oaSwiSGFzaFNldCIpLGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3RoaXMuY29udGFpbnMocyl8fCh0aGlzLnNldFtzXT1hKX0saS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXX0saS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNldD17fX0saS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldPT1hfSxpLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpPT09MH0saS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RofSxpLnByb3RvdHlwZS5hZGRBbGxUbz1mdW5jdGlvbihhKXtmb3IodmFyIHM9T2JqZWN0LmtleXModGhpcy5zZXQpLGw9cy5sZW5ndGgsdT0wO3U8bDt1KyspYS5wdXNoKHRoaXMuc2V0W3NbdV1dKX0saS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RofSxpLnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgdT1hW2xdO3RoaXMuYWRkKHUpfX0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl07ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLmtleSxkKX19cmV0dXJuIG8obCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaCYmbCh1LnByb3RvdHlwZSxoKSxmJiZsKHUsZiksdX19KCk7ZnVuY3Rpb24gaShsLHUpe2lmKCEobCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9cigxMSkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtpKHRoaXMsbCksKGghPT1udWxsfHxoIT09dm9pZCAwKSYmKHRoaXMuY29tcGFyZUZ1bmN0aW9uPXRoaXMuX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24pO3ZhciBmPXZvaWQgMDt1IGluc3RhbmNlb2YgYT9mPXUuc2l6ZSgpOmY9dS5sZW5ndGgsdGhpcy5fcXVpY2tzb3J0KHUsMCxmLTEpfXJldHVybiBvKGwsIlF1aWNrc29ydCIpLG4obCxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7aWYoZjxkKXt2YXIgcD10aGlzLl9wYXJ0aXRpb24oaCxmLGQpO3RoaXMuX3F1aWNrc29ydChoLGYscCksdGhpcy5fcXVpY2tzb3J0KGgscCsxLGQpfX0sIl9xdWlja3NvcnQiKX0se2tleToiX3BhcnRpdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7Zm9yKHZhciBwPXRoaXMuX2dldChoLGYpLG09ZixnPWQ7Oyl7Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbihwLHRoaXMuX2dldChoLGcpKTspZy0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KGgsbSkscCk7KW0rKztpZihtPGcpdGhpcy5fc3dhcChoLG0sZyksbSsrLGctLTtlbHNlIHJldHVybiBnfX0sIl9wYXJ0aXRpb24iKX0se2tleToiX2dldCIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBoIGluc3RhbmNlb2YgYT9oLmdldF9vYmplY3RfYXQoZik6aFtmXX0sIl9nZXQiKX0se2tleToiX3NldCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7aCBpbnN0YW5jZW9mIGE/aC5zZXRfb2JqZWN0X2F0KGYsZCk6aFtmXT1kfSwiX3NldCIpfSx7a2V5OiJfc3dhcCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7dmFyIHA9dGhpcy5fZ2V0KGgsZik7dGhpcy5fc2V0KGgsZix0aGlzLl9nZXQoaCxkKSksdGhpcy5fc2V0KGgsZCxwKX0sIl9zd2FwIil9LHtrZXk6Il9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGY+aH0sIl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIil9XSksbH0oKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHMobCx1KXtmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYua2V5LGYpfX1yZXR1cm4gbyhzLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24obCx1LGgpe3JldHVybiB1JiZzKGwucHJvdG90eXBlLHUpLGgmJnMobCxoKSxsfX0oKTtmdW5jdGlvbiBpKHMsbCl7aWYoIShzIGluc3RhbmNlb2YgbCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHMobCx1KXt2YXIgaD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06MSxmPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTotMSxkPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTotMTtpKHRoaXMscyksdGhpcy5zZXF1ZW5jZTE9bCx0aGlzLnNlcXVlbmNlMj11LHRoaXMubWF0Y2hfc2NvcmU9aCx0aGlzLm1pc21hdGNoX3BlbmFsdHk9Zix0aGlzLmdhcF9wZW5hbHR5PWQsdGhpcy5pTWF4PWwubGVuZ3RoKzEsdGhpcy5qTWF4PXUubGVuZ3RoKzEsdGhpcy5ncmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgcD0wO3A8dGhpcy5pTWF4O3ArKyl7dGhpcy5ncmlkW3BdPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgbT0wO208dGhpcy5qTWF4O20rKyl0aGlzLmdyaWRbcF1bbV09MH10aGlzLnRyYWNlYmFja0dyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBnPTA7Zzx0aGlzLmlNYXg7ZysrKXt0aGlzLnRyYWNlYmFja0dyaWRbZ109bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciB5PTA7eTx0aGlzLmpNYXg7eSsrKXRoaXMudHJhY2ViYWNrR3JpZFtnXVt5XT1bbnVsbCxudWxsLG51bGxdfXRoaXMuYWxpZ25tZW50cz1bXSx0aGlzLnNjb3JlPS0xLHRoaXMuY29tcHV0ZUdyaWRzKCl9cmV0dXJuIG8ocywiTmVlZGxlbWFuV3Vuc2NoIiksbihzLFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjb3JlfSwiZ2V0U2NvcmUiKX0se2tleToiZ2V0QWxpZ25tZW50cyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmFsaWdubWVudHN9LCJnZXRBbGlnbm1lbnRzIil9LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6byhmdW5jdGlvbigpe2Zvcih2YXIgdT0xO3U8dGhpcy5qTWF4O3UrKyl0aGlzLmdyaWRbMF1bdV09dGhpcy5ncmlkWzBdW3UtMV0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbMF1bdV09WyExLCExLCEwXTtmb3IodmFyIGg9MTtoPHRoaXMuaU1heDtoKyspdGhpcy5ncmlkW2hdWzBdPXRoaXMuZ3JpZFtoLTFdWzBdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkW2hdWzBdPVshMSwhMCwhMV07Zm9yKHZhciBmPTE7Zjx0aGlzLmlNYXg7ZisrKWZvcih2YXIgZD0xO2Q8dGhpcy5qTWF4O2QrKyl7dmFyIHA9dm9pZCAwO3RoaXMuc2VxdWVuY2UxW2YtMV09PT10aGlzLnNlcXVlbmNlMltkLTFdP3A9dGhpcy5ncmlkW2YtMV1bZC0xXSt0aGlzLm1hdGNoX3Njb3JlOnA9dGhpcy5ncmlkW2YtMV1bZC0xXSt0aGlzLm1pc21hdGNoX3BlbmFsdHk7dmFyIG09dGhpcy5ncmlkW2YtMV1bZF0rdGhpcy5nYXBfcGVuYWx0eSxnPXRoaXMuZ3JpZFtmXVtkLTFdK3RoaXMuZ2FwX3BlbmFsdHkseT1bcCxtLGddLHY9dGhpcy5hcnJheUFsbE1heEluZGV4ZXMoeSk7dGhpcy5ncmlkW2ZdW2RdPXlbdlswXV0sdGhpcy50cmFjZWJhY2tHcmlkW2ZdW2RdPVt2LmluY2x1ZGVzKDApLHYuaW5jbHVkZXMoMSksdi5pbmNsdWRlcygyKV19dGhpcy5zY29yZT10aGlzLmdyaWRbdGhpcy5pTWF4LTFdW3RoaXMuak1heC0xXX0sImNvbXB1dGVHcmlkcyIpfSx7a2V5OiJhbGlnbm1lbnRUcmFjZWJhY2siLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgdT1bXTtmb3IodS5wdXNoKHtwb3M6W3RoaXMuc2VxdWVuY2UxLmxlbmd0aCx0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLHNlcTE6IiIsc2VxMjoiIn0pO3VbMF07KXt2YXIgaD11WzBdLGY9dGhpcy50cmFjZWJhY2tHcmlkW2gucG9zWzBdXVtoLnBvc1sxXV07ZlswXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV0tMV0sc2VxMTp0aGlzLnNlcXVlbmNlMVtoLnBvc1swXS0xXStoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxmWzFdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0tMSxoLnBvc1sxXV0sc2VxMTp0aGlzLnNlcXVlbmNlMVtoLnBvc1swXS0xXStoLnNlcTEsc2VxMjoiLSIraC5zZXEyfSksZlsyXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLGgucG9zWzFdLTFdLHNlcTE6Ii0iK2guc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW2gucG9zWzFdLTFdK2guc2VxMn0pLGgucG9zWzBdPT09MCYmaC5wb3NbMV09PT0wJiZ0aGlzLmFsaWdubWVudHMucHVzaCh7c2VxdWVuY2UxOmguc2VxMSxzZXF1ZW5jZTI6aC5zZXEyfSksdS5zaGlmdCgpfXJldHVybiB0aGlzLmFsaWdubWVudHN9LCJhbGlnbm1lbnRUcmFjZWJhY2siKX0se2tleToiZ2V0QWxsSW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj1bXSxkPS0xOyhkPXUuaW5kZXhPZihoLGQrMSkpIT09LTE7KWYucHVzaChkKTtyZXR1cm4gZn0sImdldEFsbEluZGV4ZXMiKX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpvKGZ1bmN0aW9uKHUpe3JldHVybiB0aGlzLmdldEFsbEluZGV4ZXModSxNYXRoLm1heC5hcHBseShudWxsLHUpKX0sImFycmF5QWxsTWF4SW5kZXhlcyIpfV0pLHN9KCk7dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49byhmdW5jdGlvbigpe30sImxheW91dEJhc2UiKTtuLkZETGF5b3V0PXIoMTgpLG4uRkRMYXlvdXRDb25zdGFudHM9cig3KSxuLkZETGF5b3V0RWRnZT1yKDE5KSxuLkZETGF5b3V0Tm9kZT1yKDIwKSxuLkRpbWVuc2lvbkQ9cigyMSksbi5IYXNoTWFwPXIoMjIpLG4uSGFzaFNldD1yKDIzKSxuLklHZW9tZXRyeT1yKDgpLG4uSU1hdGg9cig5KSxuLkludGVnZXI9cigxMCksbi5Qb2ludD1yKDEyKSxuLlBvaW50RD1yKDQpLG4uUmFuZG9tU2VlZD1yKDE2KSxuLlJlY3RhbmdsZUQ9cigxMyksbi5UcmFuc2Zvcm09cigxNyksbi5VbmlxdWVJREdlbmVyZXRvcj1yKDE0KSxuLlF1aWNrc29ydD1yKDI0KSxuLkxpbmtlZExpc3Q9cigxMSksbi5MR3JhcGhPYmplY3Q9cigyKSxuLkxHcmFwaD1yKDUpLG4uTEVkZ2U9cigxKSxuLkxHcmFwaE1hbmFnZXI9cig2KSxuLkxOb2RlPXIoMyksbi5MYXlvdXQ9cigxNSksbi5MYXlvdXRDb25zdGFudHM9cigwKSxuLk5lZWRsZW1hbld1bnNjaD1yKDI1KSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5saXN0ZW5lcnM9W119byhuLCJFbWl0dGVyIik7dmFyIGk9bi5wcm90b3R5cGU7aS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OmEsY2FsbGJhY2s6c30pfSxpLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtsPj0wO2wtLSl7dmFyIHU9dGhpcy5saXN0ZW5lcnNbbF07dS5ldmVudD09PWEmJnUuY2FsbGJhY2s9PT1zJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UobCwxKX19LGkuZW1pdD1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD0wO2w8dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2wrKyl7dmFyIHU9dGhpcy5saXN0ZW5lcnNbbF07YT09PXUuZXZlbnQmJnUuY2FsbGJhY2socyl9fSx0LmV4cG9ydHM9bn1dKX0pfSk7dmFyIExCPUVpKChrYixfQik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBrYj09Im9iamVjdCImJnR5cGVvZiBfQj09Im9iamVjdCI/X0IuZXhwb3J0cz1yKEFCKCkpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFsibGF5b3V0LWJhc2UiXSxyKTp0eXBlb2Yga2I9PSJvYmplY3QiP2tiLmNvc2VCYXNlPXIoQUIoKSk6ZS5jb3NlQmFzZT1yKGUubGF5b3V0QmFzZSl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKGtiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj17fTtmdW5jdGlvbiBuKGkpe2lmKHJbaV0pcmV0dXJuIHJbaV0uZXhwb3J0czt2YXIgYT1yW2ldPXtpLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChhLmV4cG9ydHMsYSxhLmV4cG9ydHMsbiksYS5sPSEwLGEuZXhwb3J0c31yZXR1cm4gbyhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksbi5tPWUsbi5jPXIsbi5pPWZ1bmN0aW9uKGkpe3JldHVybiBpfSxuLmQ9ZnVuY3Rpb24oaSxhLHMpe24ubyhpLGEpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6c30pfSxuLm49ZnVuY3Rpb24oaSl7dmFyIGE9aSYmaS5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gaX0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gbi5kKGEsImEiLGEpLGF9LG4ubz1mdW5jdGlvbihpLGEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKX0sbi5wPSIiLG4obi5zPTcpfShbZnVuY3Rpb24oZSxyKXtlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0Q29uc3RhbnRzO2Z1bmN0aW9uIGEoKXt9byhhLCJDb1NFQ29uc3RhbnRzIik7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2EuREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORz0hMSxhLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049aS5ERUZBVUxUX0VER0VfTEVOR1RILGEuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTj02MCxhLlRJTEU9ITAsYS5USUxJTkdfUEFERElOR19WRVJUSUNBTD0xMCxhLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9MTAsYS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTD0hMSxlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0RWRnZTtmdW5jdGlvbiBhKGwsdSxoKXtpLmNhbGwodGhpcyxsLHUsaCl9byhhLCJDb1NFRWRnZSIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkxHcmFwaDtmdW5jdGlvbiBhKGwsdSxoKXtpLmNhbGwodGhpcyxsLHUsaCl9byhhLCJDb1NFR3JhcGgiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIGEobCl7aS5jYWxsKHRoaXMsbCl9byhhLCJDb1NFR3JhcGhNYW5hZ2VyIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2UuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXROb2RlLGE9bigwKS5JTWF0aDtmdW5jdGlvbiBzKHUsaCxmLGQpe2kuY2FsbCh0aGlzLHUsaCxmLGQpfW8ocywiQ29TRU5vZGUiKSxzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGwgaW4gaSlzW2xdPWlbbF07cy5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciB1PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD11LmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT11LmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD11LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50KmEuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPnUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCphLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSx1LnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxzLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLGQscD0wO3A8Zi5sZW5ndGg7cCsrKWQ9ZltwXSxkLmdldENoaWxkKCk9PW51bGw/KGQubW92ZUJ5KHUsaCksZC5kaXNwbGFjZW1lbnRYKz11LGQuZGlzcGxhY2VtZW50WSs9aCk6ZC5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHUsaCl9LHMucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKHUpe3RoaXMucHJlZDE9dX0scy5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LHMucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxzLnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKHUpe3RoaXMubmV4dD11fSxzLnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LHMucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbih1KXt0aGlzLnByb2Nlc3NlZD11fSxzLnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGUuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXQsYT1uKDQpLHM9bigzKSxsPW4oNSksdT1uKDIpLGg9bigxKSxmPW4oMCkuRkRMYXlvdXRDb25zdGFudHMsZD1uKDApLkxheW91dENvbnN0YW50cyxwPW4oMCkuUG9pbnQsbT1uKDApLlBvaW50RCxnPW4oMCkuTGF5b3V0LHk9bigwKS5JbnRlZ2VyLHY9bigwKS5JR2VvbWV0cnkseD1uKDApLkxHcmFwaCxiPW4oMCkuVHJhbnNmb3JtO2Z1bmN0aW9uIHcoKXtpLmNhbGwodGhpcyksdGhpcy50b0JlVGlsZWQ9e319byh3LCJDb1NFTGF5b3V0Iiksdy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBfIGluIGkpd1tfXT1pW19dO3cucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBUPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1ULFR9LHcucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKFQpe3JldHVybiBuZXcgcyhudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLFQpfSx3LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKFQpe3JldHVybiBuZXcgbCh0aGlzLmdyYXBoTWFuYWdlcixUKX0sdy5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihUKXtyZXR1cm4gbmV3IHUobnVsbCxudWxsLFQpfSx3LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2kucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChoLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9aC5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1oLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Zi5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PWYuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Zi5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1mLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1mLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1mLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9mLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Zi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSx3LnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oKXt2YXIgVD1kLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtyZXR1cm4gVCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSx3LnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5ub2Rlc1dpdGhHcmF2aXR5PXRoaXMuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSksdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLmNhbGNJZGVhbEVkZ2VMZW5ndGhzKCksdGhpcy5pbmNyZW1lbnRhbCl7aWYoaC5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCl7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgRT1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksTD10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKEkpe3JldHVybiBFLmhhcyhJKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKEwpfX1lbHNle3ZhciBUPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKFQubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoVCk7ZWxzZXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBFPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxMPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oUyl7cmV0dXJuIEUuaGFzKFMpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oTCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSx3LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWYuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBUPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxFPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIFQuaGFzKEEpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oRSksdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksdGhpcy5jb29saW5nRmFjdG9yPWYuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTH1lbHNlIHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITA7dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMrK31pZih0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlyZXR1cm4hMDt0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MCYmKHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpKSx0aGlzLmNvb2xpbmdGYWN0b3I9Zi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMKigoMTAwLXRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKS8xMDApLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKyt9dmFyIEw9IXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCxTPXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoTCxTKSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKSx0aGlzLmFuaW1hdGUoKSwhMX0sdy5wcm90b3R5cGUuZ2V0UG9zaXRpb25zRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgVD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEU9e30sTD0wO0w8VC5sZW5ndGg7TCsrKXt2YXIgUz1UW0xdLnJlY3QsQT1UW0xdLmlkO0VbQV09e2lkOkEseDpTLmdldENlbnRlclgoKSx5OlMuZ2V0Q2VudGVyWSgpLHc6Uy53aWR0aCxoOlMuaGVpZ2h0fX1yZXR1cm4gRX0sdy5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciBUPSExO2lmKGYuQU5JTUFURT09PSJkdXJpbmciKXRoaXMuZW1pdCgibGF5b3V0c3RhcnRlZCIpO2Vsc2V7Zm9yKDshVDspVD10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LHcucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgVD1bXSxFLEw9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksUz1MLmxlbmd0aCxBO2ZvcihBPTA7QTxTO0ErKylFPUxbQV0sRS51cGRhdGVDb25uZWN0ZWQoKSxFLmlzQ29ubmVjdGVkfHwoVD1ULmNvbmNhdChFLmdldE5vZGVzKCkpKTtyZXR1cm4gVH0sdy5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cz1mdW5jdGlvbigpe3ZhciBUPVtdO1Q9VC5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7dmFyIEU9bmV3IFNldCxMO2ZvcihMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBTPVRbTF07aWYoIUUuaGFzKFMpKXt2YXIgQT1TLmdldFNvdXJjZSgpLEk9Uy5nZXRUYXJnZXQoKTtpZihBPT1JKVMuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IG0pLFMuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IG0pLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoUyksRS5hZGQoUyk7ZWxzZXt2YXIgRD1bXTtpZihEPUQuY29uY2F0KEEuZ2V0RWRnZUxpc3RUb05vZGUoSSkpLEQ9RC5jb25jYXQoSS5nZXRFZGdlTGlzdFRvTm9kZShBKSksIUUuaGFzKERbMF0pKXtpZihELmxlbmd0aD4xKXt2YXIgaztmb3Ioaz0wO2s8RC5sZW5ndGg7aysrKXt2YXIgUj1EW2tdO1IuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IG0pLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoUil9fUQuZm9yRWFjaChmdW5jdGlvbihDKXtFLmFkZChDKX0pfX19aWYoRS5zaXplPT1ULmxlbmd0aClicmVha319LHcucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihUKXtmb3IodmFyIEU9bmV3IHAoMCwwKSxMPU1hdGguY2VpbChNYXRoLnNxcnQoVC5sZW5ndGgpKSxTPTAsQT0wLEk9MCxEPW5ldyBtKDAsMCksaz0wO2s8VC5sZW5ndGg7aysrKXtrJUw9PTAmJihJPTAsQT1TLGshPTAmJihBKz1oLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pLFM9MCk7dmFyIFI9VFtrXSxDPWcuZmluZENlbnRlck9mVHJlZShSKTtFLng9SSxFLnk9QSxEPXcucmFkaWFsTGF5b3V0KFIsQyxFKSxELnk+UyYmKFM9TWF0aC5mbG9vcihELnkpKSxJPU1hdGguZmxvb3IoRC54K2guREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IG0oZC5XT1JMRF9DRU5URVJfWC1ELngvMixkLldPUkxEX0NFTlRFUl9ZLUQueS8yKSl9LHcucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKFQsRSxMKXt2YXIgUz1NYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKFQpLGguREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7dy5icmFuY2hSYWRpYWxMYXlvdXQoRSxudWxsLDAsMzU5LDAsUyk7dmFyIEE9eC5jYWxjdWxhdGVCb3VuZHMoVCksST1uZXcgYjtJLnNldERldmljZU9yZ1goQS5nZXRNaW5YKCkpLEkuc2V0RGV2aWNlT3JnWShBLmdldE1pblkoKSksSS5zZXRXb3JsZE9yZ1goTC54KSxJLnNldFdvcmxkT3JnWShMLnkpO2Zvcih2YXIgRD0wO0Q8VC5sZW5ndGg7RCsrKXt2YXIgaz1UW0RdO2sudHJhbnNmb3JtKEkpfXZhciBSPW5ldyBtKEEuZ2V0TWF4WCgpLEEuZ2V0TWF4WSgpKTtyZXR1cm4gSS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoUil9LHcuYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKFQsRSxMLFMsQSxJKXt2YXIgRD0oUy1MKzEpLzI7RDwwJiYoRCs9MTgwKTt2YXIgaz0oRCtMKSUzNjAsUj1rKnYuVFdPX1BJLzM2MCxDPU1hdGguY29zKFIpLE89QSpNYXRoLmNvcyhSKSxOPUEqTWF0aC5zaW4oUik7VC5zZXRDZW50ZXIoTyxOKTt2YXIgUD1bXTtQPVAuY29uY2F0KFQuZ2V0RWRnZXMoKSk7dmFyIEY9UC5sZW5ndGg7RSE9bnVsbCYmRi0tO2Zvcih2YXIgQj0wLEc9UC5sZW5ndGgseixXPVQuZ2V0RWRnZXNCZXR3ZWVuKEUpO1cubGVuZ3RoPjE7KXt2YXIgWj1XWzBdO1cuc3BsaWNlKDAsMSk7dmFyIGo9UC5pbmRleE9mKFopO2o+PTAmJlAuc3BsaWNlKGosMSksRy0tLEYtLX1FIT1udWxsP3o9KFAuaW5kZXhPZihXWzBdKSsxKSVHOno9MDtmb3IodmFyIG9lPU1hdGguYWJzKFMtTCkvRixLPXo7QiE9RjtLPSsrSyVHKXt2YXIgZWU9UFtLXS5nZXRPdGhlckVuZChUKTtpZihlZSE9RSl7dmFyIEo9KEwrQipvZSklMzYwLEg9KEorb2UpJTM2MDt3LmJyYW5jaFJhZGlhbExheW91dChlZSxULEosSCxBK0ksSSksQisrfX19LHcubWF4RGlhZ29uYWxJblRyZWU9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPXkuTUlOX1ZBTFVFLEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIFM9VFtMXSxBPVMuZ2V0RGlhZ29uYWwoKTtBPkUmJihFPUEpfXJldHVybiBFfSx3LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sdy5wcm90b3R5cGUuZ3JvdXBaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBUPXRoaXMsRT17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBMPVtdLFM9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxBPTA7QTxTLmxlbmd0aDtBKyspe3ZhciBJPVNbQV0sRD1JLmdldFBhcmVudCgpO3RoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihJKT09PTAmJihELmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoRCkpJiZMLnB1c2goSSl9Zm9yKHZhciBBPTA7QTxMLmxlbmd0aDtBKyspe3ZhciBJPUxbQV0saz1JLmdldFBhcmVudCgpLmlkO3R5cGVvZiBFW2tdPiJ1IiYmKEVba109W10pLEVba109RVtrXS5jb25jYXQoSSl9T2JqZWN0LmtleXMoRSkuZm9yRWFjaChmdW5jdGlvbihSKXtpZihFW1JdLmxlbmd0aD4xKXt2YXIgQz0iRHVtbXlDb21wb3VuZF8iK1I7VC5tZW1iZXJHcm91cHNbQ109RVtSXTt2YXIgTz1FW1JdWzBdLmdldFBhcmVudCgpLE49bmV3IGwoVC5ncmFwaE1hbmFnZXIpO04uaWQ9QyxOLnBhZGRpbmdMZWZ0PU8ucGFkZGluZ0xlZnR8fDAsTi5wYWRkaW5nUmlnaHQ9Ty5wYWRkaW5nUmlnaHR8fDAsTi5wYWRkaW5nQm90dG9tPU8ucGFkZGluZ0JvdHRvbXx8MCxOLnBhZGRpbmdUb3A9Ty5wYWRkaW5nVG9wfHwwLFQuaWRUb0R1bW15Tm9kZVtDXT1OO3ZhciBQPVQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKFQubmV3R3JhcGgoKSxOKSxGPU8uZ2V0Q2hpbGQoKTtGLmFkZChOKTtmb3IodmFyIEI9MDtCPEVbUl0ubGVuZ3RoO0IrKyl7dmFyIEc9RVtSXVtCXTtGLnJlbW92ZShHKSxQLmFkZChHKX19fSl9LHcucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIFQ9e30sRT17fTt0aGlzLnBlcmZvcm1ERlNPbkNvbXBvdW5kcygpO2Zvcih2YXIgTD0wO0w8dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aDtMKyspRVt0aGlzLmNvbXBvdW5kT3JkZXJbTF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltMXSxUW3RoaXMuY29tcG91bmRPcmRlcltMXS5pZF09W10uY29uY2F0KHRoaXMuY29tcG91bmRPcmRlcltMXS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh0aGlzLmNvbXBvdW5kT3JkZXJbTF0uZ2V0Q2hpbGQoKSksdGhpcy5jb21wb3VuZE9yZGVyW0xdLmNoaWxkPW51bGw7dGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMudGlsZUNvbXBvdW5kTWVtYmVycyhULEUpfSx3LnByb3RvdHlwZS5jbGVhclplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUz1ULmlkVG9EdW1teU5vZGVbTF07RVtMXT1ULnRpbGVOb2RlcyhULm1lbWJlckdyb3Vwc1tMXSxTLnBhZGRpbmdMZWZ0K1MucGFkZGluZ1JpZ2h0KSxTLnJlY3Qud2lkdGg9RVtMXS53aWR0aCxTLnJlY3QuaGVpZ2h0PUVbTF0uaGVpZ2h0fSl9LHcucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIFQ9dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aC0xO1Q+PTA7VC0tKXt2YXIgRT10aGlzLmNvbXBvdW5kT3JkZXJbVF0sTD1FLmlkLFM9RS5wYWRkaW5nTGVmdCxBPUUucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tMXSxFLnJlY3QueCxFLnJlY3QueSxTLEEpfX0sdy5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhFKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBTPVQuaWRUb0R1bW15Tm9kZVtMXSxBPVMucGFkZGluZ0xlZnQsST1TLnBhZGRpbmdUb3A7VC5hZGp1c3RMb2NhdGlvbnMoRVtMXSxTLnJlY3QueCxTLnJlY3QueSxBLEkpfSl9LHcucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihUKXt2YXIgRT1ULmlkO2lmKHRoaXMudG9CZVRpbGVkW0VdIT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXTt2YXIgTD1ULmdldENoaWxkKCk7aWYoTD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITEsITE7Zm9yKHZhciBTPUwuZ2V0Tm9kZXMoKSxBPTA7QTxTLmxlbmd0aDtBKyspe3ZhciBJPVNbQV07aWYodGhpcy5nZXROb2RlRGVncmVlKEkpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdPSExLCExO2lmKEkuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbSS5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKEkpKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITAsITB9LHcucHJvdG90eXBlLmdldE5vZGVEZWdyZWU9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPVQuaWQsTD1ULmdldEVkZ2VzKCksUz0wLEE9MDtBPEwubGVuZ3RoO0ErKyl7dmFyIEk9TFtBXTtJLmdldFNvdXJjZSgpLmlkIT09SS5nZXRUYXJnZXQoKS5pZCYmKFM9UysxKX1yZXR1cm4gU30sdy5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbj1mdW5jdGlvbihUKXt2YXIgRT10aGlzLmdldE5vZGVEZWdyZWUoVCk7aWYoVC5nZXRDaGlsZCgpPT1udWxsKXJldHVybiBFO2Zvcih2YXIgTD1ULmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxTPTA7UzxMLmxlbmd0aDtTKyspe3ZhciBBPUxbU107RSs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKEEpfXJldHVybiBFfSx3LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LHcucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT0wO0U8VC5sZW5ndGg7RSsrKXt2YXIgTD1UW0VdO0wuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhMLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5nZXRUb0JlVGlsZWQoTCkmJnRoaXMuY29tcG91bmRPcmRlci5wdXNoKEwpfX0sdy5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKFQsRSxMLFMsQSl7RSs9UyxMKz1BO2Zvcih2YXIgST1FLEQ9MDtEPFQucm93cy5sZW5ndGg7RCsrKXt2YXIgaz1ULnJvd3NbRF07RT1JO2Zvcih2YXIgUj0wLEM9MDtDPGsubGVuZ3RoO0MrKyl7dmFyIE89a1tDXTtPLnJlY3QueD1FLE8ucmVjdC55PUwsRSs9Ty5yZWN0LndpZHRoK1QuaG9yaXpvbnRhbFBhZGRpbmcsTy5yZWN0LmhlaWdodD5SJiYoUj1PLnJlY3QuaGVpZ2h0KX1MKz1SK1QudmVydGljYWxQYWRkaW5nfX0sdy5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihULEUpe3ZhciBMPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoVCkuZm9yRWFjaChmdW5jdGlvbihTKXt2YXIgQT1FW1NdO0wudGlsZWRNZW1iZXJQYWNrW1NdPUwudGlsZU5vZGVzKFRbU10sQS5wYWRkaW5nTGVmdCtBLnBhZGRpbmdSaWdodCksQS5yZWN0LndpZHRoPUwudGlsZWRNZW1iZXJQYWNrW1NdLndpZHRoLEEucmVjdC5oZWlnaHQ9TC50aWxlZE1lbWJlclBhY2tbU10uaGVpZ2h0fSl9LHcucHJvdG90eXBlLnRpbGVOb2Rlcz1mdW5jdGlvbihULEUpe3ZhciBMPWguVElMSU5HX1BBRERJTkdfVkVSVElDQUwsUz1oLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsQT17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6RSx2ZXJ0aWNhbFBhZGRpbmc6TCxob3Jpem9udGFsUGFkZGluZzpTfTtULnNvcnQoZnVuY3Rpb24oayxSKXtyZXR1cm4gay5yZWN0LndpZHRoKmsucmVjdC5oZWlnaHQ+Ui5yZWN0LndpZHRoKlIucmVjdC5oZWlnaHQ/LTE6ay5yZWN0LndpZHRoKmsucmVjdC5oZWlnaHQ8Ui5yZWN0LndpZHRoKlIucmVjdC5oZWlnaHQ/MTowfSk7Zm9yKHZhciBJPTA7STxULmxlbmd0aDtJKyspe3ZhciBEPVRbSV07QS5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhBLEQsMCxFKTp0aGlzLmNhbkFkZEhvcml6b250YWwoQSxELnJlY3Qud2lkdGgsRC5yZWN0LmhlaWdodCk/dGhpcy5pbnNlcnROb2RlVG9Sb3coQSxELHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChBKSxFKTp0aGlzLmluc2VydE5vZGVUb1JvdyhBLEQsQS5yb3dzLmxlbmd0aCxFKSx0aGlzLnNoaWZ0VG9MYXN0Um93KEEpfXJldHVybiBBfSx3LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24oVCxFLEwsUyl7dmFyIEE9UztpZihMPT1ULnJvd3MubGVuZ3RoKXt2YXIgST1bXTtULnJvd3MucHVzaChJKSxULnJvd1dpZHRoLnB1c2goQSksVC5yb3dIZWlnaHQucHVzaCgwKX12YXIgRD1ULnJvd1dpZHRoW0xdK0UucmVjdC53aWR0aDtULnJvd3NbTF0ubGVuZ3RoPjAmJihEKz1ULmhvcml6b250YWxQYWRkaW5nKSxULnJvd1dpZHRoW0xdPUQsVC53aWR0aDxEJiYoVC53aWR0aD1EKTt2YXIgaz1FLnJlY3QuaGVpZ2h0O0w+MCYmKGsrPVQudmVydGljYWxQYWRkaW5nKTt2YXIgUj0wO2s+VC5yb3dIZWlnaHRbTF0mJihSPVQucm93SGVpZ2h0W0xdLFQucm93SGVpZ2h0W0xdPWssUj1ULnJvd0hlaWdodFtMXS1SKSxULmhlaWdodCs9UixULnJvd3NbTF0ucHVzaChFKX0sdy5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleD1mdW5jdGlvbihUKXtmb3IodmFyIEU9LTEsTD1OdW1iZXIuTUFYX1ZBTFVFLFM9MDtTPFQucm93cy5sZW5ndGg7UysrKVQucm93V2lkdGhbU108TCYmKEU9UyxMPVQucm93V2lkdGhbU10pO3JldHVybiBFfSx3LnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPS0xLEw9TnVtYmVyLk1JTl9WQUxVRSxTPTA7UzxULnJvd3MubGVuZ3RoO1MrKylULnJvd1dpZHRoW1NdPkwmJihFPVMsTD1ULnJvd1dpZHRoW1NdKTtyZXR1cm4gRX0sdy5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbihULEUsTCl7dmFyIFM9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KFQpO2lmKFM8MClyZXR1cm4hMDt2YXIgQT1ULnJvd1dpZHRoW1NdO2lmKEErVC5ob3Jpem9udGFsUGFkZGluZytFPD1ULndpZHRoKXJldHVybiEwO3ZhciBJPTA7VC5yb3dIZWlnaHRbU108TCYmUz4wJiYoST1MK1QudmVydGljYWxQYWRkaW5nLVQucm93SGVpZ2h0W1NdKTt2YXIgRDtULndpZHRoLUE+PUUrVC5ob3Jpem9udGFsUGFkZGluZz9EPShULmhlaWdodCtJKS8oQStFK1QuaG9yaXpvbnRhbFBhZGRpbmcpOkQ9KFQuaGVpZ2h0K0kpL1Qud2lkdGgsST1MK1QudmVydGljYWxQYWRkaW5nO3ZhciBrO3JldHVybiBULndpZHRoPEU/az0oVC5oZWlnaHQrSSkvRTprPShULmhlaWdodCtJKS9ULndpZHRoLGs8MSYmKGs9MS9rKSxEPDEmJihEPTEvRCksRDxrfSx3LnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihUKXt2YXIgRT10aGlzLmdldExvbmdlc3RSb3dJbmRleChUKSxMPVQucm93V2lkdGgubGVuZ3RoLTEsUz1ULnJvd3NbRV0sQT1TW1MubGVuZ3RoLTFdLEk9QS53aWR0aCtULmhvcml6b250YWxQYWRkaW5nO2lmKFQud2lkdGgtVC5yb3dXaWR0aFtMXT5JJiZFIT1MKXtTLnNwbGljZSgtMSwxKSxULnJvd3NbTF0ucHVzaChBKSxULnJvd1dpZHRoW0VdPVQucm93V2lkdGhbRV0tSSxULnJvd1dpZHRoW0xdPVQucm93V2lkdGhbTF0rSSxULndpZHRoPVQucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KFQpXTtmb3IodmFyIEQ9TnVtYmVyLk1JTl9WQUxVRSxrPTA7azxTLmxlbmd0aDtrKyspU1trXS5oZWlnaHQ+RCYmKEQ9U1trXS5oZWlnaHQpO0U+MCYmKEQrPVQudmVydGljYWxQYWRkaW5nKTt2YXIgUj1ULnJvd0hlaWdodFtFXStULnJvd0hlaWdodFtMXTtULnJvd0hlaWdodFtFXT1ELFQucm93SGVpZ2h0W0xdPEEuaGVpZ2h0K1QudmVydGljYWxQYWRkaW5nJiYoVC5yb3dIZWlnaHRbTF09QS5oZWlnaHQrVC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBDPVQucm93SGVpZ2h0W0VdK1Qucm93SGVpZ2h0W0xdO1QuaGVpZ2h0Kz1DLVIsdGhpcy5zaGlmdFRvTGFzdFJvdyhUKX19LHcucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe2guVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LHcucHJvdG90eXBlLnRpbGluZ1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXtoLlRJTEUmJih0aGlzLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycygpLHRoaXMucmVwb3B1bGF0ZUNvbXBvdW5kcygpKX0sdy5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFQ9W10sRT0hMCxMO0U7KXt2YXIgUz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEE9W107RT0hMTtmb3IodmFyIEk9MDtJPFMubGVuZ3RoO0krKylMPVNbSV0sTC5nZXRFZGdlcygpLmxlbmd0aD09MSYmIUwuZ2V0RWRnZXMoKVswXS5pc0ludGVyR3JhcGgmJkwuZ2V0Q2hpbGQoKT09bnVsbCYmKEEucHVzaChbTCxMLmdldEVkZ2VzKClbMF0sTC5nZXRPd25lcigpXSksRT0hMCk7aWYoRT09ITApe2Zvcih2YXIgRD1bXSxrPTA7azxBLmxlbmd0aDtrKyspQVtrXVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKEQucHVzaChBW2tdKSxBW2tdWzBdLmdldE93bmVyKCkucmVtb3ZlKEFba11bMF0pKTtULnB1c2goRCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1UfSx3LnByb3RvdHlwZS5ncm93VHJlZT1mdW5jdGlvbihUKXtmb3IodmFyIEU9VC5sZW5ndGgsTD1UW0UtMV0sUyxBPTA7QTxMLmxlbmd0aDtBKyspUz1MW0FdLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShTKSxTWzJdLmFkZChTWzBdKSxTWzJdLmFkZChTWzFdLFNbMV0uc291cmNlLFNbMV0udGFyZ2V0KTtULnNwbGljZShULmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LHcucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oVCl7dmFyIEUsTCxTPVRbMF07Uz09VFsxXS5zb3VyY2U/TD1UWzFdLnRhcmdldDpMPVRbMV0uc291cmNlO3ZhciBBPUwuc3RhcnRYLEk9TC5maW5pc2hYLEQ9TC5zdGFydFksaz1MLmZpbmlzaFksUj0wLEM9MCxPPTAsTj0wLFA9W1IsTyxDLE5dO2lmKEQ+MClmb3IodmFyIEY9QTtGPD1JO0YrKylQWzBdKz10aGlzLmdyaWRbRl1bRC0xXS5sZW5ndGgrdGhpcy5ncmlkW0ZdW0RdLmxlbmd0aC0xO2lmKEk8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgRj1EO0Y8PWs7RisrKVBbMV0rPXRoaXMuZ3JpZFtJKzFdW0ZdLmxlbmd0aCt0aGlzLmdyaWRbSV1bRl0ubGVuZ3RoLTE7aWYoazx0aGlzLmdyaWRbMF0ubGVuZ3RoLTEpZm9yKHZhciBGPUE7Rjw9STtGKyspUFsyXSs9dGhpcy5ncmlkW0ZdW2srMV0ubGVuZ3RoK3RoaXMuZ3JpZFtGXVtrXS5sZW5ndGgtMTtpZihBPjApZm9yKHZhciBGPUQ7Rjw9aztGKyspUFszXSs9dGhpcy5ncmlkW0EtMV1bRl0ubGVuZ3RoK3RoaXMuZ3JpZFtBXVtGXS5sZW5ndGgtMTtmb3IodmFyIEI9eS5NQVhfVkFMVUUsRyx6LFc9MDtXPFAubGVuZ3RoO1crKylQW1ddPEI/KEI9UFtXXSxHPTEsej1XKTpQW1ddPT1CJiZHKys7aWYoRz09MyYmQj09MClQWzBdPT0wJiZQWzFdPT0wJiZQWzJdPT0wP0U9MTpQWzBdPT0wJiZQWzFdPT0wJiZQWzNdPT0wP0U9MDpQWzBdPT0wJiZQWzJdPT0wJiZQWzNdPT0wP0U9MzpQWzFdPT0wJiZQWzJdPT0wJiZQWzNdPT0wJiYoRT0yKTtlbHNlIGlmKEc9PTImJkI9PTApe3ZhciBaPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtQWzBdPT0wJiZQWzFdPT0wP1o9PTA/RT0wOkU9MTpQWzBdPT0wJiZQWzJdPT0wP1o9PTA/RT0wOkU9MjpQWzBdPT0wJiZQWzNdPT0wP1o9PTA/RT0wOkU9MzpQWzFdPT0wJiZQWzJdPT0wP1o9PTA/RT0xOkU9MjpQWzFdPT0wJiZQWzNdPT0wP1o9PTA/RT0xOkU9MzpaPT0wP0U9MjpFPTN9ZWxzZSBpZihHPT00JiZCPT0wKXt2YXIgWj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7RT1afWVsc2UgRT16O0U9PTA/Uy5zZXRDZW50ZXIoTC5nZXRDZW50ZXJYKCksTC5nZXRDZW50ZXJZKCktTC5nZXRIZWlnaHQoKS8yLWYuREVGQVVMVF9FREdFX0xFTkdUSC1TLmdldEhlaWdodCgpLzIpOkU9PTE/Uy5zZXRDZW50ZXIoTC5nZXRDZW50ZXJYKCkrTC5nZXRXaWR0aCgpLzIrZi5ERUZBVUxUX0VER0VfTEVOR1RIK1MuZ2V0V2lkdGgoKS8yLEwuZ2V0Q2VudGVyWSgpKTpFPT0yP1Muc2V0Q2VudGVyKEwuZ2V0Q2VudGVyWCgpLEwuZ2V0Q2VudGVyWSgpK0wuZ2V0SGVpZ2h0KCkvMitmLkRFRkFVTFRfRURHRV9MRU5HVEgrUy5nZXRIZWlnaHQoKS8yKTpTLnNldENlbnRlcihMLmdldENlbnRlclgoKS1MLmdldFdpZHRoKCkvMi1mLkRFRkFVTFRfRURHRV9MRU5HVEgtUy5nZXRXaWR0aCgpLzIsTC5nZXRDZW50ZXJZKCkpfSxlLmV4cG9ydHM9d30sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT17fTtpLmxheW91dEJhc2U9bigwKSxpLkNvU0VDb25zdGFudHM9bigxKSxpLkNvU0VFZGdlPW4oMiksaS5Db1NFR3JhcGg9bigzKSxpLkNvU0VHcmFwaE1hbmFnZXI9big0KSxpLkNvU0VMYXlvdXQ9big2KSxpLkNvU0VOb2RlPW4oNSksZS5leHBvcnRzPWl9XSl9KX0pO3ZhciBDMWU9RWkoKEViLERCKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIEViPT0ib2JqZWN0IiYmdHlwZW9mIERCPT0ib2JqZWN0Ij9EQi5leHBvcnRzPXIoTEIoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJjb3NlLWJhc2UiXSxyKTp0eXBlb2YgRWI9PSJvYmplY3QiP0ViLmN5dG9zY2FwZUNvc2VCaWxrZW50PXIoTEIoKSk6ZS5jeXRvc2NhcGVDb3NlQmlsa2VudD1yKGUuY29zZUJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShFYixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpKXtpZihyW2ldKXJldHVybiByW2ldLmV4cG9ydHM7dmFyIGE9cltpXT17aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubD0hMCxhLmV4cG9ydHN9cmV0dXJuIG8obiwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLG4ubT1lLG4uYz1yLG4uaT1mdW5jdGlvbihpKXtyZXR1cm4gaX0sbi5kPWZ1bmN0aW9uKGksYSxzKXtuLm8oaSxhKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGksYSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnN9KX0sbi5uPWZ1bmN0aW9uKGkpe3ZhciBhPWkmJmkuX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGl9LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIG4uZChhLCJhIixhKSxhfSxuLm89ZnVuY3Rpb24oaSxhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksYSl9LG4ucD0iIixuKG4ucz0xKX0oW2Z1bmN0aW9uKGUscil7ZS5leHBvcnRzPXR9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxhPW4oMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxzPW4oMCkuQ29TRUNvbnN0YW50cyxsPW4oMCkuQ29TRUxheW91dCx1PW4oMCkuQ29TRU5vZGUsaD1uKDApLmxheW91dEJhc2UuUG9pbnRELGY9bigwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsZD17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gcCh2LHgpe3ZhciBiPXt9O2Zvcih2YXIgdyBpbiB2KWJbd109dlt3XTtmb3IodmFyIHcgaW4geCliW3ddPXhbd107cmV0dXJuIGJ9byhwLCJleHRlbmQiKTtmdW5jdGlvbiBtKHYpe3RoaXMub3B0aW9ucz1wKGQsdiksZyh0aGlzLm9wdGlvbnMpfW8obSwiX0NvU0VMYXlvdXQiKTt2YXIgZz1vKGZ1bmN0aW9uKHgpe3gubm9kZVJlcHVsc2lvbiE9bnVsbCYmKHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9YS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD14Lm5vZGVSZXB1bHNpb24pLHguaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYocy5ERUZBVUxUX0VER0VfTEVOR1RIPWEuREVGQVVMVF9FREdFX0xFTkdUSD14LmlkZWFsRWRnZUxlbmd0aCkseC5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9YS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD14LmVkZ2VFbGFzdGljaXR5KSx4Lm5lc3RpbmdGYWN0b3IhPW51bGwmJihzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9YS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPXgubmVzdGluZ0ZhY3RvcikseC5ncmF2aXR5IT1udWxsJiYocy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9YS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9eC5ncmF2aXR5KSx4Lm51bUl0ZXIhPW51bGwmJihzLk1BWF9JVEVSQVRJT05TPWEuTUFYX0lURVJBVElPTlM9eC5udW1JdGVyKSx4LmdyYXZpdHlSYW5nZSE9bnVsbCYmKHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1hLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eC5ncmF2aXR5UmFuZ2UpLHguZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYocy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9eC5ncmF2aXR5Q29tcG91bmQpLHguZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXguZ3Jhdml0eVJhbmdlQ29tcG91bmQpLHguaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJihzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPXguaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLHgucXVhbGl0eT09ImRyYWZ0Ij9pLlFVQUxJVFk9MDp4LnF1YWxpdHk9PSJwcm9vZiI/aS5RVUFMSVRZPTI6aS5RVUFMSVRZPTEscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9YS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9aS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9eC5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMscy5ERUZBVUxUX0lOQ1JFTUVOVEFMPWEuREVGQVVMVF9JTkNSRU1FTlRBTD1pLkRFRkFVTFRfSU5DUkVNRU5UQUw9IXgucmFuZG9taXplLHMuQU5JTUFURT1hLkFOSU1BVEU9aS5BTklNQVRFPXguYW5pbWF0ZSxzLlRJTEU9eC50aWxlLHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIHgudGlsaW5nUGFkZGluZ1ZlcnRpY2FsPT0iZnVuY3Rpb24iP3gudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLmNhbGwoKTp4LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxzLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIHgudGlsaW5nUGFkZGluZ0hvcml6b250YWw9PSJmdW5jdGlvbiI/eC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCk6eC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH0sImdldFVzZXJPcHRpb25zIik7bS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHYseCxiPXRoaXMub3B0aW9ucyx3PXRoaXMuaWRUb0xOb2RlPXt9LF89dGhpcy5sYXlvdXQ9bmV3IGwsVD10aGlzO1Quc3RvcHBlZD0hMSx0aGlzLmN5PXRoaXMub3B0aW9ucy5jeSx0aGlzLmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6dGhpc30pO3ZhciBFPV8ubmV3R3JhcGhNYW5hZ2VyKCk7dGhpcy5nbT1FO3ZhciBMPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksUz10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO3RoaXMucm9vdD1FLmFkZFJvb3QoKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QodGhpcy5yb290LHRoaXMuZ2V0VG9wTW9zdE5vZGVzKEwpLF8pO2Zvcih2YXIgQT0wO0E8Uy5sZW5ndGg7QSsrKXt2YXIgST1TW0FdLEQ9dGhpcy5pZFRvTE5vZGVbSS5kYXRhKCJzb3VyY2UiKV0saz10aGlzLmlkVG9MTm9kZVtJLmRhdGEoInRhcmdldCIpXTtpZihEIT09ayYmRC5nZXRFZGdlc0JldHdlZW4oaykubGVuZ3RoPT0wKXt2YXIgUj1FLmFkZChfLm5ld0VkZ2UoKSxELGspO1IuaWQ9SS5pZCgpfX12YXIgQz1vKGZ1bmN0aW9uKFAsRil7dHlwZW9mIFA9PSJudW1iZXIiJiYoUD1GKTt2YXIgQj1QLmRhdGEoImlkIiksRz1ULmlkVG9MTm9kZVtCXTtyZXR1cm57eDpHLmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTpHLmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9fSwiZ2V0UG9zaXRpb25zIiksTz1vKGZ1bmN0aW9uIE4oKXtmb3IodmFyIFA9byhmdW5jdGlvbigpe2IuZml0JiZiLmN5LmZpdChiLmVsZXMsYi5wYWRkaW5nKSx2fHwodj0hMCxULmN5Lm9uZSgibGF5b3V0cmVhZHkiLGIucmVhZHkpLFQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpUfSkpfSwiYWZ0ZXJSZXBvc2l0aW9uIiksRj1ULm9wdGlvbnMucmVmcmVzaCxCLEc9MDtHPEYmJiFCO0crKylCPVQuc3RvcHBlZHx8VC5sYXlvdXQudGljaygpO2lmKEIpe18uY2hlY2tMYXlvdXRTdWNjZXNzKCkmJiFfLmlzU3ViTGF5b3V0JiZfLmRvUG9zdExheW91dCgpLF8udGlsaW5nUG9zdExheW91dCYmXy50aWxpbmdQb3N0TGF5b3V0KCksXy5pc0xheW91dEZpbmlzaGVkPSEwLFQub3B0aW9ucy5lbGVzLm5vZGVzKCkucG9zaXRpb25zKEMpLFAoKSxULmN5Lm9uZSgibGF5b3V0c3RvcCIsVC5vcHRpb25zLnN0b3ApLFQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OlR9KSx4JiZjYW5jZWxBbmltYXRpb25GcmFtZSh4KSx2PSExO3JldHVybn12YXIgej1ULmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7Yi5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKFcsWil7aWYodHlwZW9mIFc9PSJudW1iZXIiJiYoVz1aKSwhVy5pc1BhcmVudCgpKXtmb3IodmFyIGo9Vy5pZCgpLG9lPXpbal0sSz1XO29lPT1udWxsJiYob2U9eltLLmRhdGEoInBhcmVudCIpXXx8elsiRHVtbXlDb21wb3VuZF8iK0suZGF0YSgicGFyZW50IildLHpbal09b2UsSz1LLnBhcmVudCgpWzBdLEshPW51bGwpOyk7cmV0dXJuIG9lIT1udWxsP3t4Om9lLngseTpvZS55fTp7eDpXLnBvc2l0aW9uKCJ4IikseTpXLnBvc2l0aW9uKCJ5Iil9fX0pLFAoKSx4PXJlcXVlc3RBbmltYXRpb25GcmFtZShOKX0sIml0ZXJhdGVBbmltYXRlZCIpO3JldHVybiBfLmFkZExpc3RlbmVyKCJsYXlvdXRzdGFydGVkIixmdW5jdGlvbigpe1Qub3B0aW9ucy5hbmltYXRlPT09ImR1cmluZyImJih4PXJlcXVlc3RBbmltYXRpb25GcmFtZShPKSl9KSxfLnJ1bkxheW91dCgpLHRoaXMub3B0aW9ucy5hbmltYXRlIT09ImR1cmluZyImJihULm9wdGlvbnMuZWxlcy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLmxheW91dFBvc2l0aW9ucyhULFQub3B0aW9ucyxDKSx2PSExKSx0aGlzfSxtLnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24odil7Zm9yKHZhciB4PXt9LGI9MDtiPHYubGVuZ3RoO2IrKyl4W3ZbYl0uaWQoKV09ITA7dmFyIHc9di5maWx0ZXIoZnVuY3Rpb24oXyxUKXt0eXBlb2YgXz09Im51bWJlciImJihfPVQpO2Zvcih2YXIgRT1fLnBhcmVudCgpWzBdO0UhPW51bGw7KXtpZih4W0UuaWQoKV0pcmV0dXJuITE7RT1FLnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIHd9LG0ucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3Q9ZnVuY3Rpb24odix4LGIpe2Zvcih2YXIgdz14Lmxlbmd0aCxfPTA7Xzx3O18rKyl7dmFyIFQ9eFtfXSxFPVQuY2hpbGRyZW4oKSxMLFM9VC5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6dGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKFQub3V0ZXJXaWR0aCgpIT1udWxsJiZULm91dGVySGVpZ2h0KCkhPW51bGw/TD12LmFkZChuZXcgdShiLmdyYXBoTWFuYWdlcixuZXcgaChULnBvc2l0aW9uKCJ4IiktUy53LzIsVC5wb3NpdGlvbigieSIpLVMuaC8yKSxuZXcgZihwYXJzZUZsb2F0KFMudykscGFyc2VGbG9hdChTLmgpKSkpOkw9di5hZGQobmV3IHUodGhpcy5ncmFwaE1hbmFnZXIpKSxMLmlkPVQuZGF0YSgiaWQiKSxMLnBhZGRpbmdMZWZ0PXBhcnNlSW50KFQuY3NzKCJwYWRkaW5nIikpLEwucGFkZGluZ1RvcD1wYXJzZUludChULmNzcygicGFkZGluZyIpKSxMLnBhZGRpbmdSaWdodD1wYXJzZUludChULmNzcygicGFkZGluZyIpKSxMLnBhZGRpbmdCb3R0b209cGFyc2VJbnQoVC5jc3MoInBhZGRpbmciKSksdGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmVC5pc1BhcmVudCgpKXt2YXIgQT1ULmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLncsST1ULmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLmgsRD1ULmNzcygidGV4dC1oYWxpZ24iKTtMLmxhYmVsV2lkdGg9QSxMLmxhYmVsSGVpZ2h0PUksTC5sYWJlbFBvcz1EfWlmKHRoaXMuaWRUb0xOb2RlW1QuZGF0YSgiaWQiKV09TCxpc05hTihMLnJlY3QueCkmJihMLnJlY3QueD0wKSxpc05hTihMLnJlY3QueSkmJihMLnJlY3QueT0wKSxFIT1udWxsJiZFLmxlbmd0aD4wKXt2YXIgaztrPWIuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGIubmV3R3JhcGgoKSxMKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoayxFLGIpfX19LG0ucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciB5PW8oZnVuY3Rpb24oeCl7eCgibGF5b3V0IiwiY29zZS1iaWxrZW50IixtKX0sInJlZ2lzdGVyIik7dHlwZW9mIGN5dG9zY2FwZTwidSImJnkoY3l0b3NjYXBlKSxlLmV4cG9ydHM9eX1dKX0pfSk7ZnVuY3Rpb24gaXR0KHQsZSxyLG4saSl7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS54KyIsIithLnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLndpZHRoLWUpLzIrIiwgIityKyIpIil9dmFyIFpldCxKZXQsZXR0LHR0dCxydHQsbnR0LGF0dCxzdHQsQTFlLF8xZSxMMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQbCgpO2hyKCk7WmV0PTEyLEpldD1vKGZ1bmN0aW9uKHQsZSxyLG4pe2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgJHtyLmhlaWdodC01fSB2JHstci5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke3Iud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtyLmhlaWdodC01fSBIMCBaYCksZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK24pLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsci5oZWlnaHQpLmF0dHIoIngyIixyLndpZHRoKS5hdHRyKCJ5MiIsci5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLGV0dD1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigid2lkdGgiLHIud2lkdGgpfSwicmVjdEJrZyIpLHR0dD1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0uMTUqbixzPS4yNSpuLGw9LjM1Km4sdT0uMipuO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHthfSwke2F9IDAgMCwxICR7biouMjV9LCR7LTEqbiouMX0KICAgICAgYSR7bH0sJHtsfSAxIDAsMSAke24qLjR9LCR7LTEqbiouMX0KICAgICAgYSR7c30sJHtzfSAxIDAsMSAke24qLjM1fSwkezEqbiouMn0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHtuKi4xNX0sJHsxKmkqLjM1fQogICAgICBhJHt1fSwke3V9IDEgMCwxICR7LTEqbiouMTV9LCR7MSppKi42NX0KCiAgICAgIGEke3N9LCR7YX0gMSAwLDEgJHstMSpuKi4yNX0sJHtuKi4xNX0KICAgICAgYSR7bH0sJHtsfSAxIDAsMSAkey0xKm4qLjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMSAkey0xKm4qLjI1fSwkey0xKm4qLjE1fQoKICAgICAgYSR7YX0sJHthfSAxIDAsMSAkey0xKm4qLjF9LCR7LTEqaSouMzV9CiAgICAgIGEke3V9LCR7dX0gMSAwLDEgJHtuKi4xfSwkey0xKmkqLjY1fQoKICAgIEgwIFYwIFpgKX0sImNsb3VkQmtnIikscnR0PW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIud2lkdGgsaT1yLmhlaWdodCxhPS4xNSpuO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LCR7LTEqaSouMX0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LCR7MSppKi4xfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjE1fSwkezEqaSouMzN9CiAgICAgIGEke2EqLjh9LCR7YSouOH0gMSAwLDAgMCwkezEqaSouMzR9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4xNX0sJHsxKmkqLjMzfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwke2kqLjE1fQogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sJHstMSppKi4xNX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4xfSwkey0xKmkqLjMzfQogICAgICBhJHthKi44fSwke2EqLjh9IDEgMCwwIDAsJHstMSppKi4zNH0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjF9LCR7LTEqaSouMzN9CgogICAgSDAgVjAgWmApfSwiYmFuZ0JrZyIpLG50dD1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJyIixyLndpZHRoLzIpfSwiY2lyY2xlQmtnIik7byhpdHQsImluc2VydFBvbHlnb25TaGFwZSIpO2F0dD1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLmhlaWdodCxhPW4vNCxzPXIud2lkdGgtci5wYWRkaW5nKzIqYSxsPVt7eDphLHk6MH0se3g6cy1hLHk6MH0se3g6cyx5Oi1uLzJ9LHt4OnMtYSx5Oi1ufSx7eDphLHk6LW59LHt4OjAseTotbi8yfV07aXR0KGUscyxuLGwscil9LCJoZXhhZ29uQmtnIiksc3R0PW8oZnVuY3Rpb24odCxlLHIpe2UuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KS5hdHRyKCJyeCIsci5wYWRkaW5nKS5hdHRyKCJyeSIsci5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsci53aWR0aCl9LCJyb3VuZGVkUmVjdEJrZyIpLEExZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9aS5odG1sTGFiZWxzLHM9biUoWmV0LTEpLGw9ZS5hcHBlbmQoImciKTtyLnNlY3Rpb249cztsZXQgdT0ic2VjdGlvbi0iK3M7czwwJiYodSs9IiBzZWN0aW9uLXJvb3QiKSxsLmF0dHIoImNsYXNzIiwoci5jbGFzcz9yLmNsYXNzKyIgIjoiIikrIm1pbmRtYXAtbm9kZSAiK3UpO2xldCBoPWwuYXBwZW5kKCJnIiksZj1sLmFwcGVuZCgiZyIpLGQ9ci5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO2F3YWl0IExpKGYsZCx7dXNlSHRtbExhYmVsczphLHdpZHRoOnIud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0saSksYXx8Zi5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKTtsZXQgcD1mLm5vZGUoKS5nZXRCQm94KCksW21dPUhvKGkuZm9udFNpemUpO2lmKHIuaGVpZ2h0PXAuaGVpZ2h0K20qMS4xKi41K3IucGFkZGluZyxyLndpZHRoPXAud2lkdGgrMipyLnBhZGRpbmcsci5pY29uKWlmKHIudHlwZT09PXQubm9kZVR5cGUuQ0lSQ0xFKXIuaGVpZ2h0Kz01MCxyLndpZHRoKz01MCxsLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsci53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitzKyIgIityLmljb24pLGYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci53aWR0aC8yKyIsICIrKHIuaGVpZ2h0LzItMS41KnIucGFkZGluZykrIikiKTtlbHNle3Iud2lkdGgrPTUwO2xldCBnPXIuaGVpZ2h0O3IuaGVpZ2h0PU1hdGgubWF4KGcsNjApO2xldCB5PU1hdGguYWJzKHIuaGVpZ2h0LWcpO2wuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCI2MHB4IikuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDoiK3kvMisicHg7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitzKyIgIityLmljb24pLGYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKDI1K3Iud2lkdGgvMikrIiwgIisoeS8yK3IucGFkZGluZy8yKSsiKSIpfWVsc2UgaWYoYSl7bGV0IGc9KHIud2lkdGgtcC53aWR0aCkvMix5PShyLmhlaWdodC1wLmhlaWdodCkvMjtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwgIit5KyIpIil9ZWxzZXtsZXQgZz1yLndpZHRoLzIseT1yLnBhZGRpbmcvMjtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwgIit5KyIpIil9c3dpdGNoKHIudHlwZSl7Y2FzZSB0Lm5vZGVUeXBlLkRFRkFVTFQ6SmV0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5ST1VOREVEX1JFQ1Q6c3R0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5SRUNUOmV0dCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuQ0lSQ0xFOmguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci53aWR0aC8yKyIsICIrICtyLmhlaWdodC8yKyIpIiksbnR0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5DTE9VRDp0dHQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkJBTkc6cnR0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5IRVhBR09OOmF0dCh0LGgscixzKTticmVha31yZXR1cm4gdC5zZXRFbGVtZW50Rm9ySWQoci5pZCxsKSxyLmhlaWdodH0sImRyYXdOb2RlIiksXzFlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmdldEVsZW1lbnRCeUlkKGUuaWQpLG49ZS54fHwwLGk9ZS55fHwwO3IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbisiLCIraSsiKSIpfSwicG9zaXRpb25Ob2RlIil9KTthc3luYyBmdW5jdGlvbiBOMWUodCxlLHIsbixpKXthd2FpdCBBMWUodCxlLHIsbixpKSxyLmNoaWxkcmVuJiZhd2FpdCBQcm9taXNlLmFsbChyLmNoaWxkcmVuLm1hcCgoYSxzKT0+TjFlKHQsZSxhLG48MD9zOm4saSkpKX1mdW5jdGlvbiBvdHQodCxlKXtlLmVkZ2VzKCkubWFwKChyLG4pPT57bGV0IGk9ci5kYXRhKCk7aWYoclswXS5fcHJpdmF0ZS5ib2R5Qm91bmRzKXtsZXQgYT1yWzBdLl9wcml2YXRlLnJzY3JhdGNoO1kudHJhY2UoIkVkZ2U6ICIsbixpKSx0Lmluc2VydCgicGF0aCIpLmF0dHIoImQiLGBNICR7YS5zdGFydFh9LCR7YS5zdGFydFl9IEwgJHthLm1pZFh9LCR7YS5taWRZfSBMJHthLmVuZFh9LCR7YS5lbmRZfSBgKS5hdHRyKCJjbGFzcyIsImVkZ2Ugc2VjdGlvbi1lZGdlLSIraS5zZWN0aW9uKyIgZWRnZS1kZXB0aC0iK2kuZGVwdGgpfX0pfWZ1bmN0aW9uIFIxZSh0LGUscixuKXtlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDp0LmlkLnRvU3RyaW5nKCksbGFiZWxUZXh0OnQuZGVzY3IsaGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsbGV2ZWw6bixub2RlSWQ6dC5pZCxwYWRkaW5nOnQucGFkZGluZyx0eXBlOnQudHlwZX0scG9zaXRpb246e3g6dC54LHk6dC55fX0pLHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4uZm9yRWFjaChpPT57UjFlKGksZSxyLG4rMSksZS5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7aWQ6YCR7dC5pZH1fJHtpLmlkfWAsc291cmNlOnQuaWQsdGFyZ2V0OmkuaWQsZGVwdGg6bixzZWN0aW9uOmkuc2VjdGlvbn19KX0pfWZ1bmN0aW9uIGx0dCh0LGUpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49VmUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLGk9Zmwoe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn19XX0pO24ucmVtb3ZlKCksUjFlKHQsaSxlLDApLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EubGF5b3V0RGltZW5zaW9ucz0oKT0+e2xldCBzPWEuZGF0YSgpO3JldHVybnt3OnMud2lkdGgsaDpzLmhlaWdodH19fSksaS5sYXlvdXQoe25hbWU6ImNvc2UtYmlsa2VudCIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExfSkucnVuKCksaS5yZWFkeShhPT57WS5pbmZvKCJSZWFkeSIsYSkscihpKX0pfSl9ZnVuY3Rpb24gY3R0KHQsZSl7ZS5ub2RlcygpLm1hcCgocixuKT0+e2xldCBpPXIuZGF0YSgpO2kueD1yLnBvc2l0aW9uKCkueCxpLnk9ci5wb3NpdGlvbigpLnksXzFlKHQsaSk7bGV0IGE9dC5nZXRFbGVtZW50QnlJZChpLm5vZGVJZCk7WS5pbmZvKCJJZDoiLG4sIlBvc2l0aW9uOiAoIixyLnBvc2l0aW9uKCkueCwiLCAiLHIucG9zaXRpb24oKS55LCIpIixpKSxhLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3IucG9zaXRpb24oKS54LWkud2lkdGgvMn0sICR7ci5wb3NpdGlvbigpLnktaS5oZWlnaHQvMn0pYCksYS5hdHRyKCJhdHRyIixgYXBhLSR7bn0pYCl9KX12YXIgRDFlLHV0dCxNMWUsSTFlPU0oKCk9PnsidXNlIHN0cmljdCI7U0IoKTtEMWU9SmkoQzFlKCksMSk7cHIoKTtWdCgpO3V0KCk7ZWgoKTthaSgpO0wxZSgpO2JzKCk7ZmwudXNlKEQxZS5kZWZhdWx0KTtvKE4xZSwiZHJhd05vZGVzIik7byhvdHQsImRyYXdFZGdlcyIpO28oUjFlLCJhZGROb2RlcyIpO28obHR0LCJsYXlvdXRNaW5kbWFwIik7byhjdHQsInBvc2l0aW9uTm9kZXMiKTt1dHQ9byhhc3luYyh0LGUscixuKT0+e1kuZGVidWcoYFJlbmRlcmluZyBtaW5kbWFwIGRpYWdyYW0KYCt0KTtsZXQgaT1uLmRiLGE9aS5nZXRNaW5kbWFwKCk7aWYoIWEpcmV0dXJuO2xldCBzPXBlKCk7cy5odG1sTGFiZWxzPSExO2xldCBsPVZhKGUpLHU9bC5hcHBlbmQoImciKTt1LmF0dHIoImNsYXNzIiwibWluZG1hcC1lZGdlcyIpO2xldCBoPWwuYXBwZW5kKCJnIik7aC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxhd2FpdCBOMWUoaSxoLGEsLTEscyk7bGV0IGY9YXdhaXQgbHR0KGEscyk7b3R0KHUsZiksY3R0KGksZiksSW8odm9pZCAwLGwscy5taW5kbWFwPy5wYWRkaW5nPz91ci5taW5kbWFwLnBhZGRpbmcscy5taW5kbWFwPy51c2VNYXhXaWR0aD8/dXIubWluZG1hcC51c2VNYXhXaWR0aCl9LCJkcmF3IiksTTFlPXtkcmF3OnV0dH19KTt2YXIgaHR0LGZ0dCxPMWUsUDFlPU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTtodHQ9byh0PT57bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0WyJsaW5lQ29sb3IiK3JdPXRbImxpbmVDb2xvciIrcl18fHRbImNTY2FsZUludiIrcl0sZmEodFsibGluZUNvbG9yIityXSk/dFsibGluZUNvbG9yIityXT1fdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTp0WyJsaW5lQ29sb3IiK3JdPUl0KHRbImxpbmVDb2xvciIrcl0sMjApO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspe2xldCBuPSIiKygxNy0zKnIpO2UrPWAKICAgIC5zZWN0aW9uLSR7ci0xfSByZWN0LCAuc2VjdGlvbi0ke3ItMX0gcGF0aCwgLnNlY3Rpb24tJHtyLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtyLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7ci0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3ItMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7ci0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtyLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7bn07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK3JdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksZnR0PW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtodHQodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAubWluZG1hcC1ub2RlLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYCwiZ2V0U3R5bGVzIiksTzFlPWZ0dH0pO3ZhciBCMWU9e307dnIoQjFlLHtkaWFncmFtOigpPT5kdHR9KTt2YXIgZHR0LEYxZT1NKCgpPT57InVzZSBzdHJpY3QiO2twZSgpO0NwZSgpO0kxZSgpO1AxZSgpO2R0dD17ZGI6U3BlLHJlbmRlcmVyOk0xZSxwYXJzZXI6VHBlLHN0eWxlczpPMWV9fSk7dmFyIE5CLCQxZSxWMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oTCxTLEEsSSl7Zm9yKEE9QXx8e30sST1MLmxlbmd0aDtJLS07QVtMW0ldXT1TKTtyZXR1cm4gQX0sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsMzFdLGc9WzYsNywxMSwyNF0seT1bMSw2LDEzLDE2LDE3LDIwLDIzXSx2PVsxLDM1XSx4PVsxLDM2XSxiPVsxLDYsNywxMSwxMywxNiwxNywyMCwyM10sdz1bMSwzOF0sXz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsS0FOQkFOOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsc2hhcGVEYXRhOjE1LElDT046MTYsQ0xBU1M6MTcsbm9kZVdpdGhJZDoxOCxub2RlV2l0aG91dElkOjE5LE5PREVfRFNUQVJUOjIwLE5PREVfREVTQ1I6MjEsTk9ERV9ERU5EOjIyLE5PREVfSUQ6MjMsU0hBUEVfREFUQToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiS0FOQkFOIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNjoiSUNPTiIsMTc6IkNMQVNTIiwyMDoiTk9ERV9EU1RBUlQiLDIxOiJOT0RFX0RFU0NSIiwyMjoiTk9ERV9ERU5EIiwyMzoiTk9ERV9JRCIsMjQ6IlNIQVBFX0RBVEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsM10sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTksM10sWzE4LDFdLFsxOCw0XSxbMTUsMl0sWzE1LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUyxBLEksRCxrLFIsQyl7dmFyIE89Ui5sZW5ndGgtMTtzd2l0Y2goayl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gRDtjYXNlIDg6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpELmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OkQuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixSW08tMV0uaWQpLEQuYWRkTm9kZShSW08tMl0ubGVuZ3RoLFJbTy0xXS5pZCxSW08tMV0uZGVzY3IsUltPLTFdLnR5cGUsUltPXSk7YnJlYWs7Y2FzZSAxNjpELmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsUltPXS5pZCksRC5hZGROb2RlKFJbTy0xXS5sZW5ndGgsUltPXS5pZCxSW09dLmRlc2NyLFJbT10udHlwZSk7YnJlYWs7Y2FzZSAxNzpELmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLFJbT10pLEQuZGVjb3JhdGVOb2RlKHtpY29uOlJbT119KTticmVhaztjYXNlIDE4OmNhc2UgMjM6RC5kZWNvcmF0ZU5vZGUoe2NsYXNzOlJbT119KTticmVhaztjYXNlIDE5OkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMjA6RC5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixSW08tMV0uaWQpLEQuYWRkTm9kZSgwLFJbTy0xXS5pZCxSW08tMV0uZGVzY3IsUltPLTFdLnR5cGUsUltPXSk7YnJlYWs7Y2FzZSAyMTpELmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLFJbT10uaWQpLEQuYWRkTm9kZSgwLFJbT10uaWQsUltPXS5kZXNjcixSW09dLnR5cGUpO2JyZWFrO2Nhc2UgMjI6RC5kZWNvcmF0ZU5vZGUoe2ljb246UltPXX0pO2JyZWFrO2Nhc2UgMjc6RC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsUltPLTJdKSx0aGlzLiQ9e2lkOlJbTy0xXSxkZXNjcjpSW08tMV0sdHlwZTpELmdldFR5cGUoUltPLTJdLFJbT10pfTticmVhaztjYXNlIDI4OnRoaXMuJD17aWQ6UltPXSxkZXNjcjpSW09dLHR5cGU6MH07YnJlYWs7Y2FzZSAyOTpELmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixSW08tM10pLHRoaXMuJD17aWQ6UltPLTNdLGRlc2NyOlJbTy0xXSx0eXBlOkQuZ2V0VHlwZShSW08tMl0sUltPXSl9O2JyZWFrO2Nhc2UgMzA6dGhpcy4kPVJbTy0xXStSW09dO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPVJbT107YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjRdLHsxODoxNywxOToxOCwxNDoyNywxNjpbMSwyOF0sMTc6WzEsMjldLDIwOnMsMjM6bH0pLHQocCxbMiwxOV0pLHQocCxbMiwyMV0sezE1OjMwLDI0Om19KSx0KHAsWzIsMjJdKSx0KHAsWzIsMjNdKSx0KGcsWzIsMjVdKSx0KGcsWzIsMjZdKSx0KGcsWzIsMjhdLHsyMDpbMSwzMl19KSx7MjE6WzEsMzNdfSx7NjpoLDc6ZiwxMDozNCwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx0KHksWzIsMTRdLHs3OnYsMTE6eH0pLHQoYixbMiw4XSksdChiLFsyLDldKSx0KGIsWzIsMTBdKSx0KHAsWzIsMTZdLHsxNTozNywyNDptfSksdChwLFsyLDE3XSksdChwLFsyLDE4XSksdChwLFsyLDIwXSx7MjQ6d30pLHQoZyxbMiwzMV0pLHsyMTpbMSwzOV19LHsyMjpbMSw0MF19LHQoeSxbMiwxM10sezc6diwxMTp4fSksdChiLFsyLDExXSksdChiLFsyLDEyXSksdChwLFsyLDE1XSx7MjQ6d30pLHQoZyxbMiwzMF0pLHsyMjpbMSw0MV19LHQoZyxbMiwyN10pLHQoZyxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUyxBKXtpZihBLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUyk7ZWxzZXt2YXIgST1uZXcgRXJyb3IoUyk7dGhyb3cgSS5oYXNoPUEsSX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihTKXt2YXIgQT10aGlzLEk9WzBdLEQ9W10saz1bbnVsbF0sUj1bXSxDPXRoaXMudGFibGUsTz0iIixOPTAsUD0wLEY9MCxCPTIsRz0xLHo9Ui5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxXPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksWj17eXk6e319O2Zvcih2YXIgaiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGopJiYoWi55eVtqXT10aGlzLnl5W2pdKTtXLnNldElucHV0KFMsWi55eSksWi55eS5sZXhlcj1XLFoueXkucGFyc2VyPXRoaXMsdHlwZW9mIFcueXlsbG9jPiJ1IiYmKFcueXlsbG9jPXt9KTt2YXIgb2U9Vy55eWxsb2M7Ui5wdXNoKG9lKTt2YXIgSz1XLm9wdGlvbnMmJlcub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBlZShQZSl7SS5sZW5ndGg9SS5sZW5ndGgtMipQZSxrLmxlbmd0aD1rLmxlbmd0aC1QZSxSLmxlbmd0aD1SLmxlbmd0aC1QZX1vKGVlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIEooKXt2YXIgUGU7cmV0dXJuIFBlPUQucG9wKCl8fFcubGV4KCl8fEcsdHlwZW9mIFBlIT0ibnVtYmVyIiYmKFBlIGluc3RhbmNlb2YgQXJyYXkmJihEPVBlLFBlPUQucG9wKCkpLFBlPUEuc3ltYm9sc19bUGVdfHxQZSksUGV9byhKLCJsZXgiKTtmb3IodmFyIEgscSxRLGFlLHVlLGNlLHRlPXt9LE5lLHNlLGtlLFJlOzspe2lmKFE9SVtJLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1FdP2FlPXRoaXMuZGVmYXVsdEFjdGlvbnNbUV06KChIPT09bnVsbHx8dHlwZW9mIEg+InUiKSYmKEg9SigpKSxhZT1DW1FdJiZDW1FdW0hdKSx0eXBlb2YgYWU+InUifHwhYWUubGVuZ3RofHwhYWVbMF0pe3ZhciBDZT0iIjtSZT1bXTtmb3IoTmUgaW4gQ1tRXSl0aGlzLnRlcm1pbmFsc19bTmVdJiZOZT5CJiZSZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bTmVdKyInIik7Vy5zaG93UG9zaXRpb24/Q2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoTisxKStgOgpgK1cuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtSZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0hdfHxIKSsiJyI6Q2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoTisxKSsiOiBVbmV4cGVjdGVkICIrKEg9PUc/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bSF18fEgpKyInIiksdGhpcy5wYXJzZUVycm9yKENlLHt0ZXh0OlcubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0hdfHxILGxpbmU6Vy55eWxpbmVubyxsb2M6b2UsZXhwZWN0ZWQ6UmV9KX1pZihhZVswXWluc3RhbmNlb2YgQXJyYXkmJmFlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUSsiLCB0b2tlbjogIitIKTtzd2l0Y2goYWVbMF0pe2Nhc2UgMTpJLnB1c2goSCksay5wdXNoKFcueXl0ZXh0KSxSLnB1c2goVy55eWxsb2MpLEkucHVzaChhZVsxXSksSD1udWxsLHE/KEg9cSxxPW51bGwpOihQPVcueXlsZW5nLE89Vy55eXRleHQsTj1XLnl5bGluZW5vLG9lPVcueXlsbG9jLEY+MCYmRi0tKTticmVhaztjYXNlIDI6aWYoc2U9dGhpcy5wcm9kdWN0aW9uc19bYWVbMV1dWzFdLHRlLiQ9a1trLmxlbmd0aC1zZV0sdGUuXyQ9e2ZpcnN0X2xpbmU6UltSLmxlbmd0aC0oc2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpSW1IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UltSLmxlbmd0aC0oc2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UltSLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sSyYmKHRlLl8kLnJhbmdlPVtSW1IubGVuZ3RoLShzZXx8MSldLnJhbmdlWzBdLFJbUi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxjZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkodGUsW08sUCxOLFoueXksYWVbMV0sayxSXS5jb25jYXQoeikpLHR5cGVvZiBjZTwidSIpcmV0dXJuIGNlO3NlJiYoST1JLnNsaWNlKDAsLTEqc2UqMiksaz1rLnNsaWNlKDAsLTEqc2UpLFI9Ui5zbGljZSgwLC0xKnNlKSksSS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FlWzFdXVswXSksay5wdXNoKHRlLiQpLFIucHVzaCh0ZS5fJCksa2U9Q1tJW0kubGVuZ3RoLTJdXVtJW0kubGVuZ3RoLTFdXSxJLnB1c2goa2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxUPWZ1bmN0aW9uKCl7dmFyIEw9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihBLEkpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoQSxJKTtlbHNlIHRocm93IG5ldyBFcnJvcihBKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFMsQSl7cmV0dXJuIHRoaXMueXk9QXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Uyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1TLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1TLHRoaXMubWF0Y2hlZCs9Uzt2YXIgQT1TLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksU30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihTKXt2YXIgQT1TLmxlbmd0aCxJPVMuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1TK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1BKSx0aGlzLm9mZnNldC09QTt2YXIgRD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxJLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09SS5sZW5ndGgtMSk7dmFyIGs9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkk/KEkubGVuZ3RoPT09RC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0RbRC5sZW5ndGgtSS5sZW5ndGhdLmxlbmd0aC1JWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tQX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtrWzBdLGtbMF0rdGhpcy55eWxlbmctQV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKFMpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShTKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFMubGVuZ3RoPjIwPyIuLi4iOiIiKStTLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5tYXRjaDtyZXR1cm4gUy5sZW5ndGg8MjAmJihTKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1TLmxlbmd0aCkpLChTLnN1YnN0cigwLDIwKSsoUy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBTPXRoaXMucGFzdElucHV0KCksQT1uZXcgQXJyYXkoUy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBTK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtBKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihTLEEpe3ZhciBJLEQsaztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEQ9U1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksRCYmKHRoaXMueXlsaW5lbm8rPUQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46RD9EW0QubGVuZ3RoLTFdLmxlbmd0aC1EW0QubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rU1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1TWzBdLHRoaXMubWF0Y2grPVNbMF0sdGhpcy5tYXRjaGVzPVMsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoU1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9U1swXSxJPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEEsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSSlyZXR1cm4gSTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgUiBpbiBrKXRoaXNbUl09a1tSXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUyxBLEksRDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBrPXRoaXMuX2N1cnJlbnRSdWxlcygpLFI9MDtSPGsubGVuZ3RoO1IrKylpZihJPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNba1tSXV0pLEkmJighQXx8SVswXS5sZW5ndGg+QVswXS5sZW5ndGgpKXtpZihBPUksRD1SLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFM9dGhpcy50ZXN0X21hdGNoKEksa1tSXSksUyE9PSExKXJldHVybiBTO2lmKHRoaXMuX2JhY2t0cmFjayl7QT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBBPyhTPXRoaXMudGVzdF9tYXRjaChBLGtbRF0pLFMhPT0hMT9TOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5uZXh0KCk7cmV0dXJuIEF8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEEpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChBKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihBKXtyZXR1cm4gQT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEF8fDApLEE+PTA/dGhpcy5jb25kaXRpb25TdGFja1tBXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEEpe3RoaXMuYmVnaW4oQSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihBLEksRCxrKXt2YXIgUj1rO3N3aXRjaChEKXtjYXNlIDA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJzaGFwZURhdGEiKSxJLnl5dGV4dD0iIiwyNDticmVhaztjYXNlIDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJzaGFwZURhdGFTdHIiKSwyNDticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNDticmVhaztjYXNlIDM6bGV0IEM9L1xuXHMqL2c7cmV0dXJuIEkueXl0ZXh0PUkueXl0ZXh0LnJlcGxhY2UoQywiPGJyLz4iKSwyNDticmVhaztjYXNlIDQ6cmV0dXJuIDI0O2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiBBLmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50IixJLnl5dGV4dCksNjticmVhaztjYXNlIDc6cmV0dXJuIDg7Y2FzZSA4OnRoaXMuYmVnaW4oIkNMQVNTIik7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTc7YnJlYWs7Y2FzZSAxMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMTpBLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gNztjYXNlIDE0OnJldHVybiAxNjtjYXNlIDE1OkEuZ2V0TG9nZ2VyKCkudHJhY2UoImVuZCBpY29uIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvZGluZyBub2RlIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvc2lvbiBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIDEzO2Nhc2UgMjU6cmV0dXJuIDIzO2Nhc2UgMjY6cmV0dXJuIDExO2Nhc2UgMjc6dGhpcy5iZWdpbigiTlNUUjIiKTticmVhaztjYXNlIDI4OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDI5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMwOkEuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiZGVzY3JpcHRpb246IixJLnl5dGV4dCksIk5PREVfREVTQ1IiO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kIC4uLiIsSS55eXRleHQpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixJLnl5dGV4dCksMjE7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLEkueXl0ZXh0KSwyMTticmVha319LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpAXHspL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXlwiXSspL2ksL14oPzpbXn1eIl0rKS9pLC9eKD86XH0pL2ksL14oPzpccyolJS4qKS9pLC9eKD86a2FuYmFuXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfUBdKykvaSwvXig/OiQpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKykvaSwvXig/OlsiXSkvaSwvXig/OltcKV1cKSkvaSwvXig/OltcKV0pL2ksL14oPzpbXF1dKS9pLC9eKD86XH1cfSkvaSwvXig/OlwoLSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoXCgpL2ksL14oPzpcKCkvaSwvXig/OlteXClcXVwoXH1dKykvaSwvXig/Oi4rKD8hXChcKCkpL2ldLGNvbmRpdGlvbnM6e3NoYXBlRGF0YUVuZEJyYWNrZXQ6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc2hhcGVEYXRhU3RyOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YTp7cnVsZXM6WzEsNCw1XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxJQ09OOntydWxlczpbMTQsMTVdLGluY2x1c2l2ZTohMX0sTlNUUjI6e3J1bGVzOlsyOCwyOV0saW5jbHVzaXZlOiExfSxOU1RSOntydWxlczpbMzEsMzJdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzI3LDMwLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDYsNyw4LDExLDEyLDEzLDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEx9KCk7Xy5sZXhlcj1UO2Z1bmN0aW9uIEUoKXt0aGlzLnl5PXt9fXJldHVybiBvKEUsIlBhcnNlciIpLEUucHJvdG90eXBlPV8sXy5QYXJzZXI9RSxuZXcgRX0oKTtOQi5wYXJzZXI9TkI7JDFlPU5CfSk7dmFyIGRsLE1CLFJCLElCLHl0dCx2dHQsVTFlLHh0dCxidHQsWmksd3R0LFR0dCxrdHQsRXR0LFN0dCxDdHQsQXR0LEgxZSxXMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7dXQoKTticygpO2V3KCk7ZGw9W10sTUI9W10sUkI9MCxJQj17fSx5dHQ9bygoKT0+e2RsPVtdLE1CPVtdLFJCPTAsSUI9e319LCJjbGVhciIpLHZ0dD1vKHQ9PntpZihkbC5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBlPWRsWzBdLmxldmVsLHI9bnVsbDtmb3IobGV0IG49ZGwubGVuZ3RoLTE7bj49MDtuLS0paWYoZGxbbl0ubGV2ZWw9PT1lJiYhciYmKHI9ZGxbbl0pLGRsW25dLmxldmVsPGUpdGhyb3cgbmV3IEVycm9yKCdJdGVtcyB3aXRob3V0IHNlY3Rpb24gZGV0ZWN0ZWQsIGZvdW5kIHNlY3Rpb24gKCInK2RsW25dLmxhYmVsKyciKScpO3JldHVybiB0PT09cj8ubGV2ZWw/bnVsbDpyfSwiZ2V0U2VjdGlvbiIpLFUxZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIE1CfSwiZ2V0U2VjdGlvbnMiKSx4dHQ9byhmdW5jdGlvbigpe2xldCB0PVtdLGU9W10scj1VMWUoKSxuPXBlKCk7Zm9yKGxldCBpIG9mIHIpe2xldCBhPXtpZDppLmlkLGxhYmVsOmtyKGkubGFiZWw/PyIiLG4pLGlzR3JvdXA6ITAsdGlja2V0OmkudGlja2V0LHNoYXBlOiJrYW5iYW5TZWN0aW9uIixsZXZlbDppLmxldmVsLGxvb2s6bi5sb29rfTtlLnB1c2goYSk7bGV0IHM9ZGwuZmlsdGVyKGw9PmwucGFyZW50SWQ9PT1pLmlkKTtmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2lkOmwuaWQscGFyZW50SWQ6aS5pZCxsYWJlbDprcihsLmxhYmVsPz8iIixuKSxpc0dyb3VwOiExLHRpY2tldDpsPy50aWNrZXQscHJpb3JpdHk6bD8ucHJpb3JpdHksYXNzaWduZWQ6bD8uYXNzaWduZWQsaWNvbjpsPy5pY29uLHNoYXBlOiJrYW5iYW5JdGVtIixsZXZlbDpsLmxldmVsLHJ4OjUscnk6NSxjc3NTdHlsZXM6WyJ0ZXh0LWFsaWduOiBsZWZ0Il19O2UucHVzaCh1KX19cmV0dXJue25vZGVzOmUsZWRnZXM6dCxvdGhlcjp7fSxjb25maWc6cGUoKX19LCJnZXREYXRhIiksYnR0PW8oKHQsZSxyLG4saSk9PntsZXQgYT1wZSgpLHM9YS5taW5kbWFwPy5wYWRkaW5nPz91ci5taW5kbWFwLnBhZGRpbmc7c3dpdGNoKG4pe2Nhc2UgWmkuUk9VTkRFRF9SRUNUOmNhc2UgWmkuUkVDVDpjYXNlIFppLkhFWEFHT046cyo9Mn1sZXQgbD17aWQ6a3IoZSxhKXx8ImtibiIrUkIrKyxsZXZlbDp0LGxhYmVsOmtyKHIsYSksd2lkdGg6YS5taW5kbWFwPy5tYXhOb2RlV2lkdGg/P3VyLm1pbmRtYXAubWF4Tm9kZVdpZHRoLHBhZGRpbmc6cyxpc0dyb3VwOiExfTtpZihpIT09dm9pZCAwKXtsZXQgaDtpLmluY2x1ZGVzKGAKYCk/aD1pK2AKYDpoPWB7CmAraStgCn1gO2xldCBmPVNtKGgse3NjaGVtYTpFbX0pO2lmKGYuc2hhcGUmJihmLnNoYXBlIT09Zi5zaGFwZS50b0xvd2VyQ2FzZSgpfHxmLnNoYXBlLmluY2x1ZGVzKCJfIikpKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtmLnNoYXBlfS4gU2hhcGUgbmFtZXMgc2hvdWxkIGJlIGxvd2VyY2FzZS5gKTtmPy5zaGFwZSYmZi5zaGFwZT09PSJrYW5iYW5JdGVtIiYmKGwuc2hhcGU9Zj8uc2hhcGUpLGY/LmxhYmVsJiYobC5sYWJlbD1mPy5sYWJlbCksZj8uaWNvbiYmKGwuaWNvbj1mPy5pY29uKSxmPy5hc3NpZ25lZCYmKGwuYXNzaWduZWQ9Zj8uYXNzaWduZWQpLGY/LnRpY2tldCYmKGwudGlja2V0PWY/LnRpY2tldCksZj8ucHJpb3JpdHkmJihsLnByaW9yaXR5PWY/LnByaW9yaXR5KX1sZXQgdT12dHQodCk7dT9sLnBhcmVudElkPXUuaWR8fCJrYm4iK1JCKys6TUIucHVzaChsKSxkbC5wdXNoKGwpfSwiYWRkTm9kZSIpLFppPXtERUZBVUxUOjAsTk9fQk9SREVSOjAsUk9VTkRFRF9SRUNUOjEsUkVDVDoyLENJUkNMRTozLENMT1VEOjQsQkFORzo1LEhFWEFHT046Nn0sd3R0PW8oKHQsZSk9Pntzd2l0Y2goWS5kZWJ1ZygiSW4gZ2V0IHR5cGUiLHQsZSksdCl7Y2FzZSJbIjpyZXR1cm4gWmkuUkVDVDtjYXNlIigiOnJldHVybiBlPT09IikiP1ppLlJPVU5ERURfUkVDVDpaaS5DTE9VRDtjYXNlIigoIjpyZXR1cm4gWmkuQ0lSQ0xFO2Nhc2UiKSI6cmV0dXJuIFppLkNMT1VEO2Nhc2UiKSkiOnJldHVybiBaaS5CQU5HO2Nhc2Uie3siOnJldHVybiBaaS5IRVhBR09OO2RlZmF1bHQ6cmV0dXJuIFppLkRFRkFVTFR9fSwiZ2V0VHlwZSIpLFR0dD1vKCh0LGUpPT57SUJbdF09ZX0sInNldEVsZW1lbnRGb3JJZCIpLGt0dD1vKHQ9PntpZighdClyZXR1cm47bGV0IGU9cGUoKSxyPWRsW2RsLmxlbmd0aC0xXTt0Lmljb24mJihyLmljb249a3IodC5pY29uLGUpKSx0LmNsYXNzJiYoci5jc3NDbGFzc2VzPWtyKHQuY2xhc3MsZSkpfSwiZGVjb3JhdGVOb2RlIiksRXR0PW8odD0+e3N3aXRjaCh0KXtjYXNlIFppLkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSBaaS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIFppLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIFppLkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIFppLkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSBaaS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIFppLkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19LCJ0eXBlMlN0ciIpLFN0dD1vKCgpPT5ZLCJnZXRMb2dnZXIiKSxDdHQ9byh0PT5JQlt0XSwiZ2V0RWxlbWVudEJ5SWQiKSxBdHQ9e2NsZWFyOnl0dCxhZGROb2RlOmJ0dCxnZXRTZWN0aW9uczpVMWUsZ2V0RGF0YTp4dHQsbm9kZVR5cGU6WmksZ2V0VHlwZTp3dHQsc2V0RWxlbWVudEZvcklkOlR0dCxkZWNvcmF0ZU5vZGU6a3R0LHR5cGUyU3RyOkV0dCxnZXRMb2dnZXI6U3R0LGdldEVsZW1lbnRCeUlkOkN0dH0sSDFlPUF0dH0pO3ZhciBfdHQsWTFlLHExZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7dXQoKTtlaCgpO2FpKCk7YnMoKTtsdygpO3Z3KCk7X3R0PW8oYXN5bmModCxlLHIsbik9PntZLmRlYnVnKGBSZW5kZXJpbmcga2FuYmFuIGRpYWdyYW0KYCt0KTtsZXQgYT1uLmRiLmdldERhdGEoKSxzPXBlKCk7cy5odG1sTGFiZWxzPSExO2xldCBsPVZhKGUpLHU9bC5hcHBlbmQoImciKTt1LmF0dHIoImNsYXNzIiwic2VjdGlvbnMiKTtsZXQgaD1sLmFwcGVuZCgiZyIpO2guYXR0cigiY2xhc3MiLCJpdGVtcyIpO2xldCBmPWEubm9kZXMuZmlsdGVyKHY9PnYuaXNHcm91cCksZD0wLHA9MTAsbT1bXSxnPTI1O2ZvcihsZXQgdiBvZiBmKXtsZXQgeD1zPy5rYW5iYW4/LnNlY3Rpb25XaWR0aHx8MjAwO2Q9ZCsxLHYueD14KmQrKGQtMSkqcC8yLHYud2lkdGg9eCx2Lnk9MCx2LmhlaWdodD14KjMsdi5yeD01LHYucnk9NSx2LmNzc0NsYXNzZXM9di5jc3NDbGFzc2VzKyIgc2VjdGlvbi0iK2Q7bGV0IGI9YXdhaXQgX20odSx2KTtnPU1hdGgubWF4KGcsYj8ubGFiZWxCQm94Py5oZWlnaHQpLG0ucHVzaChiKX1sZXQgeT0wO2ZvcihsZXQgdiBvZiBmKXtsZXQgeD1tW3ldO3k9eSsxO2xldCBiPXM/LmthbmJhbj8uc2VjdGlvbldpZHRofHwyMDAsdz0tYiozLzIrZyxfPXcsVD1hLm5vZGVzLmZpbHRlcihTPT5TLnBhcmVudElkPT09di5pZCk7Zm9yKGxldCBTIG9mIFQpe2lmKFMuaXNHcm91cCl0aHJvdyBuZXcgRXJyb3IoIkdyb3VwcyB3aXRoaW4gZ3JvdXBzIGFyZSBub3QgYWxsb3dlZCBpbiBLYW5iYW4gZGlhZ3JhbXMiKTtTLng9di54LFMud2lkdGg9Yi0xLjUqcDtsZXQgST0oYXdhaXQgTG0oaCxTLHtjb25maWc6c30pKS5ub2RlKCkuZ2V0QkJveCgpO1MueT1fK0kuaGVpZ2h0LzIsYXdhaXQgVXYoUyksXz1TLnkrSS5oZWlnaHQvMitwLzJ9bGV0IEU9eC5jbHVzdGVyLnNlbGVjdCgicmVjdCIpLEw9TWF0aC5tYXgoXy13KzMqcCw1MCkrKGctMjUpO0UuYXR0cigiaGVpZ2h0IixMKX1Jbyh2b2lkIDAsbCxzLm1pbmRtYXA/LnBhZGRpbmc/P3VyLmthbmJhbi5wYWRkaW5nLHMubWluZG1hcD8udXNlTWF4V2lkdGg/P3VyLmthbmJhbi51c2VNYXhXaWR0aCl9LCJkcmF3IiksWTFlPXtkcmF3Ol90dH19KTt2YXIgTHR0LER0dCxYMWUsajFlPU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTtMdHQ9byh0PT57bGV0IGU9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl0WyJsaW5lQ29sb3IiK25dPXRbImxpbmVDb2xvciIrbl18fHRbImNTY2FsZUludiIrbl0sZmEodFsibGluZUNvbG9yIituXSk/dFsibGluZUNvbG9yIituXT1fdCh0WyJsaW5lQ29sb3IiK25dLDIwKTp0WyJsaW5lQ29sb3IiK25dPUl0KHRbImxpbmVDb2xvciIrbl0sMjApO2xldCByPW8oKG4saSk9PnQuZGFya01vZGU/SXQobixpKTpfdChuLGkpLCJhZGp1c3RlciIpO2ZvcihsZXQgbj0wO248dC5USEVNRV9DT0xPUl9MSU1JVDtuKyspe2xldCBpPSIiKygxNy0zKm4pO2UrPWAKICAgIC5zZWN0aW9uLSR7bi0xfSByZWN0LCAuc2VjdGlvbi0ke24tMX0gcGF0aCwgLnNlY3Rpb24tJHtuLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtuLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7bi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7cih0WyJjU2NhbGUiK25dLDEwKX07CiAgICAgIHN0cm9rZTogJHtyKHRbImNTY2FsZSIrbl0sMTApfTsKCiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrbl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke24tMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIituXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7bi0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrbl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtuLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7aX07CiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK25dfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmthbmJhbi10aWNrZXQtbGluayB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLER0dD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7THR0KHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLmNsdXN0ZXItbGFiZWwsIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn07CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICAgIH0KICAua2FuYmFuLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYCwiZ2V0U3R5bGVzIiksWDFlPUR0dH0pO3ZhciBLMWU9e307dnIoSzFlLHtkaWFncmFtOigpPT5OdHR9KTt2YXIgTnR0LFExZT1NKCgpPT57InVzZSBzdHJpY3QiO1YxZSgpO1cxZSgpO3ExZSgpO2oxZSgpO050dD17ZGI6SDFlLHJlbmRlcmVyOlkxZSxwYXJzZXI6JDFlLHN0eWxlczpYMWV9fSk7dmFyIE9CLFNiLGV5ZT1NKCgpPT57InVzZSBzdHJpY3QiO09CPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihsLHUsaCxmKXtmb3IoaD1ofHx7fSxmPWwubGVuZ3RoO2YtLTtoW2xbZl1dPXUpO3JldHVybiBofSwibyIpLGU9WzEsOV0scj1bMSwxMF0sbj1bMSw1LDEwLDEyXSxpPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNBTktFWTo0LE5FV0xJTkU6NSxjc3Y6NixvcHRfZW9mOjcscmVjb3JkOjgsY3N2X3RhaWw6OSxFT0Y6MTAsImZpZWxkW3NvdXJjZV0iOjExLENPTU1BOjEyLCJmaWVsZFt0YXJnZXRdIjoxMywiZmllbGRbdmFsdWVdIjoxNCxmaWVsZDoxNSxlc2NhcGVkOjE2LG5vbl9lc2NhcGVkOjE3LERRVU9URToxOCxFU0NBUEVEX1RFWFQ6MTksTk9OX0VTQ0FQRURfVEVYVDoyMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU0FOS0VZIiw1OiJORVdMSU5FIiwxMDoiRU9GIiwxMToiZmllbGRbc291cmNlXSIsMTI6IkNPTU1BIiwxMzoiZmllbGRbdGFyZ2V0XSIsMTQ6ImZpZWxkW3ZhbHVlXSIsMTg6IkRRVU9URSIsMTk6IkVTQ0FQRURfVEVYVCIsMjA6Ik5PTl9FU0NBUEVEX1RFWFQifSxwcm9kdWN0aW9uc186WzAsWzMsNF0sWzYsMl0sWzksMl0sWzksMF0sWzcsMV0sWzcsMF0sWzgsNV0sWzE1LDFdLFsxNSwxXSxbMTYsM10sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24odSxoLGYsZCxwLG0sZyl7dmFyIHk9bS5sZW5ndGgtMTtzd2l0Y2gocCl7Y2FzZSA3OmxldCB2PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSx4PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxiPXBhcnNlRmxvYXQobVt5XS50cmltKCkpO2QuYWRkTGluayh2LHgsYik7YnJlYWs7Y2FzZSA4OmNhc2UgOTpjYXNlIDExOnRoaXMuJD1tW3ldO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPW1beS0xXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdfSx7Njo0LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxOlsyLDZdLDc6MTEsMTA6WzEsMTJdfSx0KHIsWzIsNF0sezk6MTMsNTpbMSwxNF19KSx7MTI6WzEsMTVdfSx0KG4sWzIsOF0pLHQobixbMiw5XSksezE5OlsxLDE2XX0sdChuLFsyLDExXSksezE6WzIsMV19LHsxOlsyLDVdfSx0KHIsWzIsMl0pLHs2OjE3LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxNToxOCwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx7MTg6WzEsMTldfSx0KHIsWzIsM10pLHsxMjpbMSwyMF19LHQobixbMiwxMF0pLHsxNToyMSwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx0KFsxLDUsMTBdLFsyLDddKV0sZGVmYXVsdEFjdGlvbnM6ezExOlsyLDFdLDEyOlsyLDVdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odSxoKXtpZihoLnJlY292ZXJhYmxlKXRoaXMudHJhY2UodSk7ZWxzZXt2YXIgZj1uZXcgRXJyb3IodSk7dGhyb3cgZi5oYXNoPWgsZn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbih1KXt2YXIgaD10aGlzLGY9WzBdLGQ9W10scD1bbnVsbF0sbT1bXSxnPXRoaXMudGFibGUseT0iIix2PTAseD0wLGI9MCx3PTIsXz0xLFQ9bS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksTD17eXk6e319O2Zvcih2YXIgUyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFMpJiYoTC55eVtTXT10aGlzLnl5W1NdKTtFLnNldElucHV0KHUsTC55eSksTC55eS5sZXhlcj1FLEwueXkucGFyc2VyPXRoaXMsdHlwZW9mIEUueXlsbG9jPiJ1IiYmKEUueXlsbG9jPXt9KTt2YXIgQT1FLnl5bGxvYzttLnB1c2goQSk7dmFyIEk9RS5vcHRpb25zJiZFLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBMLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUwueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRChvZSl7Zi5sZW5ndGg9Zi5sZW5ndGgtMipvZSxwLmxlbmd0aD1wLmxlbmd0aC1vZSxtLmxlbmd0aD1tLmxlbmd0aC1vZX1vKEQsInBvcFN0YWNrIik7ZnVuY3Rpb24gaygpe3ZhciBvZTtyZXR1cm4gb2U9ZC5wb3AoKXx8RS5sZXgoKXx8Xyx0eXBlb2Ygb2UhPSJudW1iZXIiJiYob2UgaW5zdGFuY2VvZiBBcnJheSYmKGQ9b2Usb2U9ZC5wb3AoKSksb2U9aC5zeW1ib2xzX1tvZV18fG9lKSxvZX1vKGssImxleCIpO2Zvcih2YXIgUixDLE8sTixQLEYsQj17fSxHLHosVyxaOzspe2lmKE89ZltmLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW09dP049dGhpcy5kZWZhdWx0QWN0aW9uc1tPXTooKFI9PT1udWxsfHx0eXBlb2YgUj4idSIpJiYoUj1rKCkpLE49Z1tPXSYmZ1tPXVtSXSksdHlwZW9mIE4+InUifHwhTi5sZW5ndGh8fCFOWzBdKXt2YXIgaj0iIjtaPVtdO2ZvcihHIGluIGdbT10pdGhpcy50ZXJtaW5hbHNfW0ddJiZHPncmJloucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0ddKyInIik7RS5zaG93UG9zaXRpb24/aj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2KzEpK2A6CmArRS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1ouam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tSXXx8UikrIiciOmo9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodisxKSsiOiBVbmV4cGVjdGVkICIrKFI9PV8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUl18fFIpKyInIiksdGhpcy5wYXJzZUVycm9yKGose3RleHQ6RS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bUl18fFIsbGluZTpFLnl5bGluZW5vLGxvYzpBLGV4cGVjdGVkOlp9KX1pZihOWzBdaW5zdGFuY2VvZiBBcnJheSYmTi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK08rIiwgdG9rZW46ICIrUik7c3dpdGNoKE5bMF0pe2Nhc2UgMTpmLnB1c2goUikscC5wdXNoKEUueXl0ZXh0KSxtLnB1c2goRS55eWxsb2MpLGYucHVzaChOWzFdKSxSPW51bGwsQz8oUj1DLEM9bnVsbCk6KHg9RS55eWxlbmcseT1FLnl5dGV4dCx2PUUueXlsaW5lbm8sQT1FLnl5bGxvYyxiPjAmJmItLSk7YnJlYWs7Y2FzZSAyOmlmKHo9dGhpcy5wcm9kdWN0aW9uc19bTlsxXV1bMV0sQi4kPXBbcC5sZW5ndGgtel0sQi5fJD17Zmlyc3RfbGluZTptW20ubGVuZ3RoLSh6fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bVttLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOm1bbS5sZW5ndGgtKHp8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bVttLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sSSYmKEIuXyQucmFuZ2U9W21bbS5sZW5ndGgtKHp8fDEpXS5yYW5nZVswXSxtW20ubGVuZ3RoLTFdLnJhbmdlWzFdXSksRj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQixbeSx4LHYsTC55eSxOWzFdLHAsbV0uY29uY2F0KFQpKSx0eXBlb2YgRjwidSIpcmV0dXJuIEY7eiYmKGY9Zi5zbGljZSgwLC0xKnoqMikscD1wLnNsaWNlKDAsLTEqeiksbT1tLnNsaWNlKDAsLTEqeikpLGYucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tOWzFdXVswXSkscC5wdXNoKEIuJCksbS5wdXNoKEIuXyQpLFc9Z1tmW2YubGVuZ3RoLTJdXVtmW2YubGVuZ3RoLTFdXSxmLnB1c2goVyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGE9ZnVuY3Rpb24oKXt2YXIgbD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGgsZil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihoLGYpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGgpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24odSxoKXtyZXR1cm4gdGhpcy55eT1ofHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD11LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXUsdGhpcy5tYXRjaGVkKz11O3ZhciBoPXUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBoPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx1fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHUpe3ZhciBoPXUubGVuZ3RoLGY9dS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWgpLHRoaXMub2Zmc2V0LT1oO3ZhciBkPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGYubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1mLmxlbmd0aC0xKTt2YXIgcD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Zj8oZi5sZW5ndGg9PT1kLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZFtkLmxlbmd0aC1mLmxlbmd0aF0ubGVuZ3RoLWZbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1ofSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3BbMF0scFswXSt0aGlzLnl5bGVuZy1oXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24odSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciB1PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odS5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLm1hdGNoO3JldHVybiB1Lmxlbmd0aDwyMCYmKHUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXUubGVuZ3RoKSksKHUuc3Vic3RyKDAsMjApKyh1Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5wYXN0SW5wdXQoKSxoPW5ldyBBcnJheSh1Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2grIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHUsaCl7dmFyIGYsZCxwO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihwPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHAueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZD11WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxkJiYodGhpcy55eWxpbmVubys9ZC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpkP2RbZC5sZW5ndGgtMV0ubGVuZ3RoLWRbZC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit1WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXVbMF0sdGhpcy5tYXRjaCs9dVswXSx0aGlzLm1hdGNoZXM9dSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh1WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz11WzBdLGY9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsaCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxmKXJldHVybiBmO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBtIGluIHApdGhpc1ttXT1wW21dO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB1LGgsZixkO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHA9dGhpcy5fY3VycmVudFJ1bGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWlmKGY9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1twW21dXSksZiYmKCFofHxmWzBdLmxlbmd0aD5oWzBdLmxlbmd0aCkpe2lmKGg9ZixkPW0sdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYodT10aGlzLnRlc3RfbWF0Y2goZixwW21dKSx1IT09ITEpcmV0dXJuIHU7aWYodGhpcy5fYmFja3RyYWNrKXtoPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGg/KHU9dGhpcy50ZXN0X21hdGNoKGgscFtkXSksdSE9PSExP3U6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgaD10aGlzLm5leHQoKTtyZXR1cm4gaHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oaCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGgpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gaD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGgpe3JldHVybiBoPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoaHx8MCksaD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2hdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oaCl7dGhpcy5iZWdpbihoKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGgsZixkLHApe3ZhciBtPXA7c3dpdGNoKGQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImNzdiIpLDQ7YnJlYWs7Y2FzZSAxOnJldHVybiAxMDtjYXNlIDI6cmV0dXJuIDU7Y2FzZSAzOnJldHVybiAxMjtjYXNlIDQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODticmVhaztjYXNlIDU6cmV0dXJuIDIwO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgiZXNjYXBlZF90ZXh0IiksMTg7YnJlYWs7Y2FzZSA3OnJldHVybiAxOX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpzYW5rZXktYmV0YVxiKS9pLC9eKD86JCkvaSwvXig/OigoXHUwMDBEXHUwMDBBKXwoXHUwMDBBKSkpL2ksL14oPzooXHUwMDJDKSkvaSwvXig/OihcdTAwMjIpKS9pLC9eKD86KFtcdTAwMjAtXHUwMDIxXHUwMDIzLVx1MDAyQlx1MDAyRC1cdTAwN0VdKSopL2ksL14oPzooXHUwMDIyKSg/IShcdTAwMjIpKSkvaSwvXig/OigoW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pfChcdTAwMkMpfChcdTAwMEQpfChcdTAwMEEpfChcdTAwMjIpKFx1MDAyMikpKikvaV0sY29uZGl0aW9uczp7Y3N2OntydWxlczpbMSwyLDMsNCw1LDYsN10saW5jbHVzaXZlOiExfSxlc2NhcGVkX3RleHQ6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsN10saW5jbHVzaXZlOiEwfX19O3JldHVybiBsfSgpO2kubGV4ZXI9YTtmdW5jdGlvbiBzKCl7dGhpcy55eT17fX1yZXR1cm4gbyhzLCJQYXJzZXIiKSxzLnByb3RvdHlwZT1pLGkuUGFyc2VyPXMsbmV3IHN9KCk7T0IucGFyc2VyPU9CO1NiPU9CfSk7dmFyIHJTLG5TLHRTLE90dCxQQixQdHQsQkIsQnR0LEZ0dCx6dHQsR3R0LHR5ZSxyeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7QWkoKTtyUz1bXSxuUz1bXSx0Uz1uZXcgTWFwLE90dD1vKCgpPT57clM9W10sblM9W10sdFM9bmV3IE1hcCxMcigpfSwiY2xlYXIiKSxQQj1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbj0wKXt0aGlzLnNvdXJjZT1lO3RoaXMudGFyZ2V0PXI7dGhpcy52YWx1ZT1ufXN0YXRpY3tvKHRoaXMsIlNhbmtleUxpbmsiKX19LFB0dD1vKCh0LGUscik9PntyUy5wdXNoKG5ldyBQQih0LGUscikpfSwiYWRkTGluayIpLEJCPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuSUQ9ZX1zdGF0aWN7byh0aGlzLCJTYW5rZXlOb2RlIil9fSxCdHQ9byh0PT57dD1xZS5zYW5pdGl6ZVRleHQodCxwZSgpKTtsZXQgZT10Uy5nZXQodCk7cmV0dXJuIGU9PT12b2lkIDAmJihlPW5ldyBCQih0KSx0Uy5zZXQodCxlKSxuUy5wdXNoKGUpKSxlfSwiZmluZE9yQ3JlYXRlTm9kZSIpLEZ0dD1vKCgpPT5uUywiZ2V0Tm9kZXMiKSx6dHQ9bygoKT0+clMsImdldExpbmtzIiksR3R0PW8oKCk9Pih7bm9kZXM6blMubWFwKHQ9Pih7aWQ6dC5JRH0pKSxsaW5rczpyUy5tYXAodD0+KHtzb3VyY2U6dC5zb3VyY2UuSUQsdGFyZ2V0OnQudGFyZ2V0LklELHZhbHVlOnQudmFsdWV9KSl9KSwiZ2V0R3JhcGgiKSx0eWU9e25vZGVzTWFwOnRTLGdldENvbmZpZzpvKCgpPT5wZSgpLnNhbmtleSwiZ2V0Q29uZmlnIiksZ2V0Tm9kZXM6RnR0LGdldExpbmtzOnp0dCxnZXRHcmFwaDpHdHQsYWRkTGluazpQdHQsZmluZE9yQ3JlYXRlTm9kZTpCdHQsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjRGVzY3JpcHRpb246enIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldERpYWdyYW1UaXRsZTpjbixjbGVhcjpPdHR9fSk7ZnVuY3Rpb24gQ2IodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocjxpfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIG55ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oQ2IsIm1heCIpfSk7ZnVuY3Rpb24gTzEodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPm58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocj5pfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIGl5ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oTzEsIm1pbiIpfSk7ZnVuY3Rpb24gUDEodCxlKXtsZXQgcj0wO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpKG49K24pJiYocis9bik7ZWxzZXtsZXQgbj0tMTtmb3IobGV0IGkgb2YgdCkoaT0rZShpLCsrbix0KSkmJihyKz1pKX1yZXR1cm4gcn12YXIgYXllPU0oKCk9PnsidXNlIHN0cmljdCI7byhQMSwic3VtIil9KTt2YXIgRkI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtueWUoKTtpeWUoKTtheWUoKX0pO2Z1bmN0aW9uICR0dCh0KXtyZXR1cm4gdC50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gekIodCl7cmV0dXJuIHQuZGVwdGh9ZnVuY3Rpb24gR0IodCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fWZ1bmN0aW9uIEFiKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uICRCKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP08xKHQuc291cmNlTGlua3MsJHR0KS0xOjB9dmFyIFZCPU0oKCk9PnsidXNlIHN0cmljdCI7RkIoKTtvKCR0dCwidGFyZ2V0RGVwdGgiKTtvKHpCLCJsZWZ0Iik7byhHQiwicmlnaHQiKTtvKEFiLCJqdXN0aWZ5Iik7bygkQiwiY2VudGVyIil9KTtmdW5jdGlvbiBCMSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIHN5ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oQjEsImNvbnN0YW50Iil9KTtmdW5jdGlvbiBveWUodCxlKXtyZXR1cm4gaVModC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gbHllKHQsZSl7cmV0dXJuIGlTKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGlTKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiBVQih0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBWdHQodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gVXR0KHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIEh0dCh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiBjeWUodCxlKXtsZXQgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gdXllKHtub2Rlczp0fSl7Zm9yKGxldCBlIG9mIHQpe2xldCByPWUueTAsbj1yO2ZvcihsZXQgaSBvZiBlLnNvdXJjZUxpbmtzKWkueTA9citpLndpZHRoLzIscis9aS53aWR0aDtmb3IobGV0IGkgb2YgZS50YXJnZXRMaW5rcylpLnkxPW4raS53aWR0aC8yLG4rPWkud2lkdGh9fWZ1bmN0aW9uIGFTKCl7bGV0IHQ9MCxlPTAscj0xLG49MSxpPTI0LGE9OCxzLGw9VnR0LHU9QWIsaCxmLGQ9VXR0LHA9SHR0LG09NjtmdW5jdGlvbiBnKCl7bGV0IE89e25vZGVzOmQuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOnAuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4geShPKSx2KE8pLHgoTyksYihPKSxUKE8pLHV5ZShPKSxPfW8oZywic2Fua2V5IiksZy51cGRhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIHV5ZShPKSxPfSxnLm5vZGVJZD1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10eXBlb2YgTz09ImZ1bmN0aW9uIj9POkIxKE8pLGcpOmx9LGcubm9kZUFsaWduPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBPPT0iZnVuY3Rpb24iP086QjEoTyksZyk6dX0sZy5ub2RlU29ydD1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1PLGcpOmh9LGcubm9kZVdpZHRoPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStPLGcpOml9LGcubm9kZVBhZGRpbmc9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cz0rTyxnKTphfSxnLm5vZGVzPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiBPPT0iZnVuY3Rpb24iP086QjEoTyksZyk6ZH0sZy5saW5rcz1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10eXBlb2YgTz09ImZ1bmN0aW9uIj9POkIxKE8pLGcpOnB9LGcubGlua1NvcnQ9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TyxnKTpmfSxnLnNpemU9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZT0wLHI9K09bMF0sbj0rT1sxXSxnKTpbci10LG4tZV19LGcuZXh0ZW50PWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStPWzBdWzBdLHI9K09bMV1bMF0sZT0rT1swXVsxXSxuPStPWzFdWzFdLGcpOltbdCxlXSxbcixuXV19LGcuaXRlcmF0aW9ucz1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rTyxnKTptfTtmdW5jdGlvbiB5KHtub2RlczpPLGxpbmtzOk59KXtmb3IobGV0W0YsQl1vZiBPLmVudHJpZXMoKSlCLmluZGV4PUYsQi5zb3VyY2VMaW5rcz1bXSxCLnRhcmdldExpbmtzPVtdO2xldCBQPW5ldyBNYXAoTy5tYXAoKEYsQik9PltsKEYsQixPKSxGXSkpO2ZvcihsZXRbRixCXW9mIE4uZW50cmllcygpKXtCLmluZGV4PUY7bGV0e3NvdXJjZTpHLHRhcmdldDp6fT1CO3R5cGVvZiBHIT0ib2JqZWN0IiYmKEc9Qi5zb3VyY2U9Y3llKFAsRykpLHR5cGVvZiB6IT0ib2JqZWN0IiYmKHo9Qi50YXJnZXQ9Y3llKFAseikpLEcuc291cmNlTGlua3MucHVzaChCKSx6LnRhcmdldExpbmtzLnB1c2goQil9aWYoZiE9bnVsbClmb3IobGV0e3NvdXJjZUxpbmtzOkYsdGFyZ2V0TGlua3M6Qn1vZiBPKUYuc29ydChmKSxCLnNvcnQoZil9byh5LCJjb21wdXRlTm9kZUxpbmtzIik7ZnVuY3Rpb24gdih7bm9kZXM6T30pe2ZvcihsZXQgTiBvZiBPKU4udmFsdWU9Ti5maXhlZFZhbHVlPT09dm9pZCAwP01hdGgubWF4KFAxKE4uc291cmNlTGlua3MsVUIpLFAxKE4udGFyZ2V0TGlua3MsVUIpKTpOLmZpeGVkVmFsdWV9byh2LCJjb21wdXRlTm9kZVZhbHVlcyIpO2Z1bmN0aW9uIHgoe25vZGVzOk99KXtsZXQgTj1PLmxlbmd0aCxQPW5ldyBTZXQoTyksRj1uZXcgU2V0LEI9MDtmb3IoO1Auc2l6ZTspe2ZvcihsZXQgRyBvZiBQKXtHLmRlcHRoPUI7Zm9yKGxldHt0YXJnZXQ6en1vZiBHLnNvdXJjZUxpbmtzKUYuYWRkKHopfWlmKCsrQj5OKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO1A9RixGPW5ldyBTZXR9fW8oeCwiY29tcHV0ZU5vZGVEZXB0aHMiKTtmdW5jdGlvbiBiKHtub2RlczpPfSl7bGV0IE49Ty5sZW5ndGgsUD1uZXcgU2V0KE8pLEY9bmV3IFNldCxCPTA7Zm9yKDtQLnNpemU7KXtmb3IobGV0IEcgb2YgUCl7Ry5oZWlnaHQ9Qjtmb3IobGV0e3NvdXJjZTp6fW9mIEcudGFyZ2V0TGlua3MpRi5hZGQoeil9aWYoKytCPk4pdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7UD1GLEY9bmV3IFNldH19byhiLCJjb21wdXRlTm9kZUhlaWdodHMiKTtmdW5jdGlvbiB3KHtub2RlczpPfSl7bGV0IE49Q2IoTyxCPT5CLmRlcHRoKSsxLFA9KHItdC1pKS8oTi0xKSxGPW5ldyBBcnJheShOKTtmb3IobGV0IEIgb2YgTyl7bGV0IEc9TWF0aC5tYXgoMCxNYXRoLm1pbihOLTEsTWF0aC5mbG9vcih1LmNhbGwobnVsbCxCLE4pKSkpO0IubGF5ZXI9RyxCLngwPXQrRypQLEIueDE9Qi54MCtpLEZbR10/RltHXS5wdXNoKEIpOkZbR109W0JdfWlmKGgpZm9yKGxldCBCIG9mIEYpQi5zb3J0KGgpO3JldHVybiBGfW8odywiY29tcHV0ZU5vZGVMYXllcnMiKTtmdW5jdGlvbiBfKE8pe2xldCBOPU8xKE8sUD0+KG4tZS0oUC5sZW5ndGgtMSkqcykvUDEoUCxVQikpO2ZvcihsZXQgUCBvZiBPKXtsZXQgRj1lO2ZvcihsZXQgQiBvZiBQKXtCLnkwPUYsQi55MT1GK0IudmFsdWUqTixGPUIueTErcztmb3IobGV0IEcgb2YgQi5zb3VyY2VMaW5rcylHLndpZHRoPUcudmFsdWUqTn1GPShuLUYrcykvKFAubGVuZ3RoKzEpO2ZvcihsZXQgQj0wO0I8UC5sZW5ndGg7KytCKXtsZXQgRz1QW0JdO0cueTArPUYqKEIrMSksRy55MSs9RiooQisxKX1rKFApfX1vKF8sImluaXRpYWxpemVOb2RlQnJlYWR0aHMiKTtmdW5jdGlvbiBUKE8pe2xldCBOPXcoTyk7cz1NYXRoLm1pbihhLChuLWUpLyhDYihOLFA9PlAubGVuZ3RoKS0xKSksXyhOKTtmb3IobGV0IFA9MDtQPG07KytQKXtsZXQgRj1NYXRoLnBvdyguOTksUCksQj1NYXRoLm1heCgxLUYsKFArMSkvbSk7TChOLEYsQiksRShOLEYsQil9fW8oVCwiY29tcHV0ZU5vZGVCcmVhZHRocyIpO2Z1bmN0aW9uIEUoTyxOLFApe2ZvcihsZXQgRj0xLEI9Ty5sZW5ndGg7RjxCOysrRil7bGV0IEc9T1tGXTtmb3IobGV0IHogb2YgRyl7bGV0IFc9MCxaPTA7Zm9yKGxldHtzb3VyY2U6b2UsdmFsdWU6S31vZiB6LnRhcmdldExpbmtzKXtsZXQgZWU9Syooei5sYXllci1vZS5sYXllcik7Vys9UihvZSx6KSplZSxaKz1lZX1pZighKFo+MCkpY29udGludWU7bGV0IGo9KFcvWi16LnkwKSpOO3oueTArPWosei55MSs9aixEKHopfWg9PT12b2lkIDAmJkcuc29ydChpUyksUyhHLFApfX1vKEUsInJlbGF4TGVmdFRvUmlnaHQiKTtmdW5jdGlvbiBMKE8sTixQKXtmb3IobGV0IEY9Ty5sZW5ndGgsQj1GLTI7Qj49MDstLUIpe2xldCBHPU9bQl07Zm9yKGxldCB6IG9mIEcpe2xldCBXPTAsWj0wO2ZvcihsZXR7dGFyZ2V0Om9lLHZhbHVlOkt9b2Ygei5zb3VyY2VMaW5rcyl7bGV0IGVlPUsqKG9lLmxheWVyLXoubGF5ZXIpO1crPUMoeixvZSkqZWUsWis9ZWV9aWYoIShaPjApKWNvbnRpbnVlO2xldCBqPShXL1otei55MCkqTjt6LnkwKz1qLHoueTErPWosRCh6KX1oPT09dm9pZCAwJiZHLnNvcnQoaVMpLFMoRyxQKX19byhMLCJyZWxheFJpZ2h0VG9MZWZ0Iik7ZnVuY3Rpb24gUyhPLE4pe2xldCBQPU8ubGVuZ3RoPj4xLEY9T1tQXTtJKE8sRi55MC1zLFAtMSxOKSxBKE8sRi55MStzLFArMSxOKSxJKE8sbixPLmxlbmd0aC0xLE4pLEEoTyxlLDAsTil9byhTLCJyZXNvbHZlQ29sbGlzaW9ucyIpO2Z1bmN0aW9uIEEoTyxOLFAsRil7Zm9yKDtQPE8ubGVuZ3RoOysrUCl7bGV0IEI9T1tQXSxHPShOLUIueTApKkY7Rz4xZS02JiYoQi55MCs9RyxCLnkxKz1HKSxOPUIueTErc319byhBLCJyZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tIik7ZnVuY3Rpb24gSShPLE4sUCxGKXtmb3IoO1A+PTA7LS1QKXtsZXQgQj1PW1BdLEc9KEIueTEtTikqRjtHPjFlLTYmJihCLnkwLT1HLEIueTEtPUcpLE49Qi55MC1zfX1vKEksInJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3AiKTtmdW5jdGlvbiBEKHtzb3VyY2VMaW5rczpPLHRhcmdldExpbmtzOk59KXtpZihmPT09dm9pZCAwKXtmb3IobGV0e3NvdXJjZTp7c291cmNlTGlua3M6UH19b2YgTilQLnNvcnQobHllKTtmb3IobGV0e3RhcmdldDp7dGFyZ2V0TGlua3M6UH19b2YgTylQLnNvcnQob3llKX19byhELCJyZW9yZGVyTm9kZUxpbmtzIik7ZnVuY3Rpb24gayhPKXtpZihmPT09dm9pZCAwKWZvcihsZXR7c291cmNlTGlua3M6Tix0YXJnZXRMaW5rczpQfW9mIE8pTi5zb3J0KGx5ZSksUC5zb3J0KG95ZSl9byhrLCJyZW9yZGVyTGlua3MiKTtmdW5jdGlvbiBSKE8sTil7bGV0IFA9Ty55MC0oTy5zb3VyY2VMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7dGFyZ2V0OkYsd2lkdGg6Qn1vZiBPLnNvdXJjZUxpbmtzKXtpZihGPT09TilicmVhaztQKz1CK3N9Zm9yKGxldHtzb3VyY2U6Rix3aWR0aDpCfW9mIE4udGFyZ2V0TGlua3Mpe2lmKEY9PT1PKWJyZWFrO1AtPUJ9cmV0dXJuIFB9byhSLCJ0YXJnZXRUb3AiKTtmdW5jdGlvbiBDKE8sTil7bGV0IFA9Ti55MC0oTi50YXJnZXRMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7c291cmNlOkYsd2lkdGg6Qn1vZiBOLnRhcmdldExpbmtzKXtpZihGPT09TylicmVhaztQKz1CK3N9Zm9yKGxldHt0YXJnZXQ6Rix3aWR0aDpCfW9mIE8uc291cmNlTGlua3Mpe2lmKEY9PT1OKWJyZWFrO1AtPUJ9cmV0dXJuIFB9cmV0dXJuIG8oQywic291cmNlVG9wIiksZ312YXIgaHllPU0oKCk9PnsidXNlIHN0cmljdCI7RkIoKTtWQigpO3N5ZSgpO28ob3llLCJhc2NlbmRpbmdTb3VyY2VCcmVhZHRoIik7byhseWUsImFzY2VuZGluZ1RhcmdldEJyZWFkdGgiKTtvKGlTLCJhc2NlbmRpbmdCcmVhZHRoIik7byhVQiwidmFsdWUiKTtvKFZ0dCwiZGVmYXVsdElkIik7byhVdHQsImRlZmF1bHROb2RlcyIpO28oSHR0LCJkZWZhdWx0TGlua3MiKTtvKGN5ZSwiZmluZCIpO28odXllLCJjb21wdXRlTGlua0JyZWFkdGhzIik7byhhUywiU2Fua2V5Iil9KTtmdW5jdGlvbiBZQigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZ5ZSgpe3JldHVybiBuZXcgWUJ9dmFyIEhCLFdCLG5wLFd0dCxxQixkeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIQj1NYXRoLlBJLFdCPTIqSEIsbnA9MWUtNixXdHQ9V0ItbnA7byhZQiwiUGF0aCIpO28oZnllLCJwYXRoIik7WUIucHJvdG90eXBlPWZ5ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllCLG1vdmVUbzpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sIm1vdmVUbyIpLGNsb3NlUGF0aDpvKGZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSwibGluZVRvIikscXVhZHJhdGljQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSwicXVhZHJhdGljQ3VydmVUbyIpLGJlemllckN1cnZlVG86byhmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSwiYmV6aWVyQ3VydmVUbyIpLGFyY1RvOm8oZnVuY3Rpb24odCxlLHIsbixpKXt0PSt0LGU9K2Uscj0rcixuPStuLGk9K2k7dmFyIGE9dGhpcy5feDEscz10aGlzLl95MSxsPXItdCx1PW4tZSxoPWEtdCxmPXMtZSxkPWgqaCtmKmY7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGQ+bnApaWYoIShNYXRoLmFicyhmKmwtdSpoKT5ucCl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2V7dmFyIHA9ci1hLG09bi1zLGc9bCpsK3UqdSx5PXAqcCttKm0sdj1NYXRoLnNxcnQoZykseD1NYXRoLnNxcnQoZCksYj1pKk1hdGgudGFuKChIQi1NYXRoLmFjb3MoKGcrZC15KS8oMip2KngpKSkvMiksdz1iL3gsXz1iL3Y7TWF0aC5hYnMody0xKT5ucCYmKHRoaXMuXys9IkwiKyh0K3cqaCkrIiwiKyhlK3cqZikpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhmKnA+aCptKSsiLCIrKHRoaXMuX3gxPXQrXypsKSsiLCIrKHRoaXMuX3kxPWUrXyp1KX19LCJhcmNUbyIpLGFyYzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0PSt0LGU9K2Uscj0rcixhPSEhYTt2YXIgcz1yKk1hdGguY29zKG4pLGw9cipNYXRoLnNpbihuKSx1PXQrcyxoPWUrbCxmPTFeYSxkPWE/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK3UrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLXUpPm5wfHxNYXRoLmFicyh0aGlzLl95MS1oKT5ucCkmJih0aGlzLl8rPSJMIit1KyIsIitoKSxyJiYoZDwwJiYoZD1kJVdCK1dCKSxkPld0dD90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHQtcykrIiwiKyhlLWwpKyJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHRoaXMuX3gxPXUpKyIsIisodGhpcy5feTE9aCk6ZD5ucCYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoZD49SEIpKyIsIitmKyIsIisodGhpcy5feDE9dCtyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrcipNYXRoLnNpbihpKSkpKX0sImFyYyIpLHJlY3Q6byhmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSwicmVjdCIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffSwidG9TdHJpbmciKX07cUI9ZnllfSk7dmFyIHB5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2R5ZSgpfSk7ZnVuY3Rpb24gc1ModCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIG15ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oc1MsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGd5ZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5eWUodCl7cmV0dXJuIHRbMV19dmFyIHZ5ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oZ3llLCJ4Iik7byh5eWUsInkiKX0pO3ZhciB4eWUsYnllPU0oKCk9PnsidXNlIHN0cmljdCI7eHllPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFl0dCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gcXR0KHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBYdHQodCl7dmFyIGU9WXR0LHI9cXR0LG49Z3llLGk9eXllLGE9bnVsbDtmdW5jdGlvbiBzKCl7dmFyIGwsdT14eWUuY2FsbChhcmd1bWVudHMpLGg9ZS5hcHBseSh0aGlzLHUpLGY9ci5hcHBseSh0aGlzLHUpO2lmKGF8fChhPWw9cUIoKSksdChhLCtuLmFwcGx5KHRoaXMsKHVbMF09aCx1KSksK2kuYXBwbHkodGhpcyx1KSwrbi5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLCtpLmFwcGx5KHRoaXMsdSkpLGwpcmV0dXJuIGE9bnVsbCxsKyIifHxudWxsfXJldHVybiBvKHMsImxpbmsiKSxzLnNvdXJjZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHMpOmV9LHMudGFyZ2V0PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWwscyk6cn0scy54PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6c1MoK2wpLHMpOm59LHMueT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnNTKCtsKSxzKTppfSxzLmNvbnRleHQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bD8/bnVsbCxzKTphfSxzfWZ1bmN0aW9uIGp0dCh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFhCKCl7cmV0dXJuIFh0dChqdHQpfXZhciB3eWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtweWUoKTtieWUoKTtteWUoKTt2eWUoKTtvKFl0dCwibGlua1NvdXJjZSIpO28ocXR0LCJsaW5rVGFyZ2V0Iik7byhYdHQsImxpbmsiKTtvKGp0dCwiY3VydmVIb3Jpem9udGFsIik7byhYQiwibGlua0hvcml6b250YWwiKX0pO3ZhciBUeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3eWUoKX0pO2Z1bmN0aW9uIEt0dCh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24gUXR0KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX1mdW5jdGlvbiBvUygpe3JldHVybiBYQigpLnNvdXJjZShLdHQpLnRhcmdldChRdHQpfXZhciBreWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUeWUoKTtvKEt0dCwiaG9yaXpvbnRhbFNvdXJjZSIpO28oUXR0LCJob3Jpem9udGFsVGFyZ2V0Iik7byhvUywiZGVmYXVsdCIpfSk7dmFyIEV5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2h5ZSgpO1ZCKCk7a3llKCl9KTt2YXIgX2IsU3llPU0oKCk9PnsidXNlIHN0cmljdCI7X2I9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJVaWQiKX1zdGF0aWN7dGhpcy5jb3VudD0wfXN0YXRpYyBuZXh0KGUpe3JldHVybiBuZXcgdChlKyArK3QuY291bnQpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9ZSx0aGlzLmhyZWY9YCMke2V9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX19KTt2YXIgWnR0LEp0dCxDeWUsQXllPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtwcigpO0V5ZSgpO2FpKCk7U3llKCk7WnR0PXtsZWZ0OnpCLHJpZ2h0OkdCLGNlbnRlcjokQixqdXN0aWZ5OkFifSxKdHQ9byhmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLHNhbmtleTphfT1wZSgpLHM9QjQuc2Fua2V5LGw7aT09PSJzYW5kYm94IiYmKGw9VmUoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij9WZShsLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksaD1pPT09InNhbmRib3giP3Uuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOlZlKGBbaWQ9IiR7ZX0iXWApLGY9YT8ud2lkdGg/P3Mud2lkdGgsZD1hPy5oZWlnaHQ/P3Mud2lkdGgscD1hPy51c2VNYXhXaWR0aD8/cy51c2VNYXhXaWR0aCxtPWE/Lm5vZGVBbGlnbm1lbnQ/P3Mubm9kZUFsaWdubWVudCxnPWE/LnByZWZpeD8/cy5wcmVmaXgseT1hPy5zdWZmaXg/P3Muc3VmZml4LHY9YT8uc2hvd1ZhbHVlcz8/cy5zaG93VmFsdWVzLHg9bi5kYi5nZXRHcmFwaCgpLGI9WnR0W21dO2FTKCkubm9kZUlkKEk9PkkuaWQpLm5vZGVXaWR0aCgxMCkubm9kZVBhZGRpbmcoMTArKHY/MTU6MCkpLm5vZGVBbGlnbihiKS5leHRlbnQoW1swLDBdLFtmLGRdXSkoeCk7bGV0IFQ9a3UoZV8pO2guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHgubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsST0+KEkudWlkPV9iLm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiJ0cmFuc2xhdGUoIitJLngwKyIsIitJLnkwKyIpIn0pLmF0dHIoIngiLEk9PkkueDApLmF0dHIoInkiLEk9PkkueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIsST0+SS55MS1JLnkwKS5hdHRyKCJ3aWR0aCIsST0+SS54MS1JLngwKS5hdHRyKCJmaWxsIixJPT5UKEkuaWQpKTtsZXQgRT1vKCh7aWQ6SSx2YWx1ZTpEfSk9PnY/YCR7SX0KJHtnfSR7TWF0aC5yb3VuZChEKjEwMCkvMTAwfSR7eX1gOkksImdldFRleHQiKTtoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHgubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixJPT5JLngwPGYvMj9JLngxKzY6SS54MC02KS5hdHRyKCJ5IixJPT4oSS55MStJLnkwKS8yKS5hdHRyKCJkeSIsYCR7dj8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLEk9PkkueDA8Zi8yPyJzdGFydCI6ImVuZCIpLnRleHQoRSk7bGV0IEw9aC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHgubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLFM9YT8ubGlua0NvbG9yPz8iZ3JhZGllbnQiO2lmKFM9PT0iZ3JhZGllbnQiKXtsZXQgST1MLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsRD0+KEQudWlkPV9iLm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLEQ9PkQuc291cmNlLngxKS5hdHRyKCJ4MiIsRD0+RC50YXJnZXQueDApO0kuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixEPT5UKEQuc291cmNlLmlkKSksSS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsRD0+VChELnRhcmdldC5pZCkpfWxldCBBO3N3aXRjaChTKXtjYXNlImdyYWRpZW50IjpBPW8oST0+SS51aWQsImNvbG9yaW5nIik7YnJlYWs7Y2FzZSJzb3VyY2UiOkE9byhJPT5UKEkuc291cmNlLmlkKSwiY29sb3JpbmciKTticmVhaztjYXNlInRhcmdldCI6QT1vKEk9PlQoSS50YXJnZXQuaWQpLCJjb2xvcmluZyIpO2JyZWFrO2RlZmF1bHQ6QT1TfUwuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsb1MoKSkuYXR0cigic3Ryb2tlIixBKS5hdHRyKCJzdHJva2Utd2lkdGgiLEk9Pk1hdGgubWF4KDEsSS53aWR0aCkpLElvKHZvaWQgMCxoLDAscCl9LCJkcmF3IiksQ3llPXtkcmF3Okp0dH19KTt2YXIgX3llLEx5ZT1NKCgpPT57InVzZSBzdHJpY3QiO195ZT1vKHQ9PnQucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksInByZXBhcmVUZXh0Rm9yUGFyc2luZyIpfSk7dmFyIER5ZT17fTt2cihEeWUse2RpYWdyYW06KCk9PnRydH0pO3ZhciBlcnQsdHJ0LE55ZT1NKCgpPT57InVzZSBzdHJpY3QiO2V5ZSgpO3J5ZSgpO0F5ZSgpO0x5ZSgpO2VydD1TYi5wYXJzZS5iaW5kKFNiKTtTYi5wYXJzZT10PT5lcnQoX3llKHQpKTt0cnQ9e3BhcnNlcjpTYixkYjp0eWUscmVuZGVyZXI6Q3llfX0pO3ZhciBJeWUsakIsYXJ0LHNydCxvcnQsbHJ0LGNydCwkZixLQj1NKCgpPT57InVzZSBzdHJpY3QiO1phKCk7YnMoKTtocigpO0FpKCk7SXllPXtwYWNrZXQ6W119LGpCPXN0cnVjdHVyZWRDbG9uZShJeWUpLGFydD11ci5wYWNrZXQsc3J0PW8oKCk9PntsZXQgdD1Ecyh7Li4uYXJ0LC4uLkNyKCkucGFja2V0fSk7cmV0dXJuIHQuc2hvd0JpdHMmJih0LnBhZGRpbmdZKz0xMCksdH0sImdldENvbmZpZyIpLG9ydD1vKCgpPT5qQi5wYWNrZXQsImdldFBhY2tldCIpLGxydD1vKHQ9Pnt0Lmxlbmd0aD4wJiZqQi5wYWNrZXQucHVzaCh0KX0sInB1c2hXb3JkIiksY3J0PW8oKCk9PntMcigpLGpCPXN0cnVjdHVyZWRDbG9uZShJeWUpfSwiY2xlYXIiKSwkZj17cHVzaFdvcmQ6bHJ0LGdldFBhY2tldDpvcnQsZ2V0Q29uZmlnOnNydCxjbGVhcjpjcnQsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldERpYWdyYW1UaXRsZTpKcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcn19KTt2YXIgdXJ0LGhydCxmcnQsT3llLFB5ZT1NKCgpPT57InVzZSBzdHJpY3QiO0hnKCk7dXQoKTtUeCgpO0tCKCk7dXJ0PTFlNCxocnQ9byh0PT57eWYodCwkZik7bGV0IGU9LTEscj1bXSxuPTEse2JpdHNQZXJSb3c6aX09JGYuZ2V0Q29uZmlnKCk7Zm9yKGxldHtzdGFydDphLGVuZDpzLGxhYmVsOmx9b2YgdC5ibG9ja3Mpe2lmKHMmJnM8YSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzfSBpcyBpbnZhbGlkLiBFbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gc3RhcnQuYCk7aWYoYSE9PWUrMSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzPz9hfSBpcyBub3QgY29udGlndW91cy4gSXQgc2hvdWxkIHN0YXJ0IGZyb20gJHtlKzF9LmApO2ZvcihlPXM/P2EsWS5kZWJ1ZyhgUGFja2V0IGJsb2NrICR7YX0gLSAke2V9IHdpdGggbGFiZWwgJHtsfWApO3IubGVuZ3RoPD1pKzEmJiRmLmdldFBhY2tldCgpLmxlbmd0aDx1cnQ7KXtsZXRbdSxoXT1mcnQoe3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH0sbixpKTtpZihyLnB1c2godSksdS5lbmQrMT09PW4qaSYmKCRmLnB1c2hXb3JkKHIpLHI9W10sbisrKSwhaClicmVhazsoe3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH09aCl9fSRmLnB1c2hXb3JkKHIpfSwicG9wdWxhdGUiKSxmcnQ9bygodCxlLHIpPT57aWYodC5lbmQ9PT12b2lkIDAmJih0LmVuZD10LnN0YXJ0KSx0LnN0YXJ0PnQuZW5kKXRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHt0LnN0YXJ0fSBpcyBncmVhdGVyIHRoYW4gYmxvY2sgZW5kICR7dC5lbmR9LmApO3JldHVybiB0LmVuZCsxPD1lKnI/W3Qsdm9pZCAwXTpbe3N0YXJ0OnQuc3RhcnQsZW5kOmUqci0xLGxhYmVsOnQubGFiZWx9LHtzdGFydDplKnIsZW5kOnQuZW5kLGxhYmVsOnQubGFiZWx9XX0sImdldE5leHRGaXR0aW5nQmxvY2siKSxPeWU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IFlsKCJwYWNrZXQiLHQpO1kuZGVidWcoZSksaHJ0KGUpfSwicGFyc2UiKX19KTt2YXIgZHJ0LHBydCxCeWUsRnllPU0oKCk9PnsidXNlIHN0cmljdCI7ZWgoKTthaSgpO2RydD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldENvbmZpZygpLHtyb3dIZWlnaHQ6cyxwYWRkaW5nWTpsLGJpdFdpZHRoOnUsYml0c1BlclJvdzpofT1hLGY9aS5nZXRQYWNrZXQoKSxkPWkuZ2V0RGlhZ3JhbVRpdGxlKCkscD1zK2wsbT1wKihmLmxlbmd0aCsxKS0oZD8wOnMpLGc9dSpoKzIseT1WYShlKTt5LmF0dHIoInZpZXdib3giLGAwIDAgJHtnfSAke219YCksWnIoeSxtLGcsYS51c2VNYXhXaWR0aCk7Zm9yKGxldFt2LHhdb2YgZi5lbnRyaWVzKCkpcHJ0KHkseCx2LGEpO3kuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixnLzIpLmF0dHIoInkiLG0tcC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJwYWNrZXRUaXRsZSIpfSwiZHJhdyIpLHBydD1vKCh0LGUscix7cm93SGVpZ2h0Om4scGFkZGluZ1g6aSxwYWRkaW5nWTphLGJpdFdpZHRoOnMsYml0c1BlclJvdzpsLHNob3dCaXRzOnV9KT0+e2xldCBoPXQuYXBwZW5kKCJnIiksZj1yKihuK2EpK2E7Zm9yKGxldCBkIG9mIGUpe2xldCBwPWQuc3RhcnQlbCpzKzEsbT0oZC5lbmQtZC5zdGFydCsxKSpzLWk7aWYoaC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbSkuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJjbGFzcyIsInBhY2tldEJsb2NrIiksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwK20vMikuYXR0cigieSIsZituLzIpLmF0dHIoImNsYXNzIiwicGFja2V0TGFiZWwiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkLmxhYmVsKSwhdSljb250aW51ZTtsZXQgZz1kLmVuZD09PWQuc3RhcnQseT1mLTI7aC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwKyhnP20vMjowKSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIHN0YXJ0IikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidGV4dC1hbmNob3IiLGc/Im1pZGRsZSI6InN0YXJ0IikudGV4dChkLnN0YXJ0KSxnfHxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArbSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIGVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChkLmVuZCl9fSwiZHJhd1dvcmQiKSxCeWU9e2RyYXc6ZHJ0fX0pO3ZhciBtcnQsenllLEd5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2hyKCk7bXJ0PXtieXRlRm9udFNpemU6IjEwcHgiLHN0YXJ0Qnl0ZUNvbG9yOiJibGFjayIsZW5kQnl0ZUNvbG9yOiJibGFjayIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHRpdGxlQ29sb3I6ImJsYWNrIix0aXRsZUZvbnRTaXplOiIxNHB4IixibG9ja1N0cm9rZUNvbG9yOiJibGFjayIsYmxvY2tTdHJva2VXaWR0aDoiMSIsYmxvY2tGaWxsQ29sb3I6IiNlZmVmZWYifSx6eWU9bygoe3BhY2tldDp0fT17fSk9PntsZXQgZT1EcyhtcnQsdCk7cmV0dXJuYAoJLnBhY2tldEJ5dGUgewoJCWZvbnQtc2l6ZTogJHtlLmJ5dGVGb250U2l6ZX07Cgl9CgkucGFja2V0Qnl0ZS5zdGFydCB7CgkJZmlsbDogJHtlLnN0YXJ0Qnl0ZUNvbG9yfTsKCX0KCS5wYWNrZXRCeXRlLmVuZCB7CgkJZmlsbDogJHtlLmVuZEJ5dGVDb2xvcn07Cgl9CgkucGFja2V0TGFiZWwgewoJCWZpbGw6ICR7ZS5sYWJlbENvbG9yfTsKCQlmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKCX0KCS5wYWNrZXRUaXRsZSB7CgkJZmlsbDogJHtlLnRpdGxlQ29sb3J9OwoJCWZvbnQtc2l6ZTogJHtlLnRpdGxlRm9udFNpemV9OwoJfQoJLnBhY2tldEJsb2NrIHsKCQlzdHJva2U6ICR7ZS5ibG9ja1N0cm9rZUNvbG9yfTsKCQlzdHJva2Utd2lkdGg6ICR7ZS5ibG9ja1N0cm9rZVdpZHRofTsKCQlmaWxsOiAke2UuYmxvY2tGaWxsQ29sb3J9OwoJfQoJYH0sInN0eWxlcyIpfSk7dmFyICR5ZT17fTt2cigkeWUse2RpYWdyYW06KCk9PmdydH0pO3ZhciBncnQsVnllPU0oKCk9PnsidXNlIHN0cmljdCI7S0IoKTtQeWUoKTtGeWUoKTtHeWUoKTtncnQ9e3BhcnNlcjpPeWUsZGI6JGYscmVuZGVyZXI6QnllLHN0eWxlczp6eWV9fSk7dmFyIFFCLFd5ZSxZeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24odyxfLFQsRSl7Zm9yKFQ9VHx8e30sRT13Lmxlbmd0aDtFLS07VFt3W0VdXT1fKTtyZXR1cm4gVH0sIm8iKSxlPVsxLDddLHI9WzEsMTNdLG49WzEsMTRdLGk9WzEsMTVdLGE9WzEsMTldLHM9WzEsMTZdLGw9WzEsMTddLHU9WzEsMThdLGg9WzgsMzBdLGY9WzgsMjEsMjgsMjksMzAsMzEsMzIsNDAsNDQsNDddLGQ9WzEsMjNdLHA9WzEsMjRdLG09WzgsMTUsMTYsMjEsMjgsMjksMzAsMzEsMzIsNDAsNDQsNDddLGc9WzgsMTUsMTYsMjEsMjcsMjgsMjksMzAsMzEsMzIsNDAsNDQsNDddLHk9WzEsNDldLHY9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHNwYWNlTGluZXM6MyxTUEFDRUxJTkU6NCxOTDo1LHNlcGFyYXRvcjo2LFNQQUNFOjcsRU9GOjgsc3RhcnQ6OSxCTE9DS19ESUFHUkFNX0tFWToxMCxkb2N1bWVudDoxMSxzdG9wOjEyLHN0YXRlbWVudDoxMyxsaW5rOjE0LExJTks6MTUsU1RBUlRfTElOSzoxNixMSU5LX0xBQkVMOjE3LFNUUjoxOCxub2RlU3RhdGVtZW50OjE5LGNvbHVtbnNTdGF0ZW1lbnQ6MjAsU1BBQ0VfQkxPQ0s6MjEsYmxvY2tTdGF0ZW1lbnQ6MjIsY2xhc3NEZWZTdGF0ZW1lbnQ6MjMsY3NzQ2xhc3NTdGF0ZW1lbnQ6MjQsc3R5bGVTdGF0ZW1lbnQ6MjUsbm9kZToyNixTSVpFOjI3LENPTFVNTlM6MjgsImlkLWJsb2NrIjoyOSxlbmQ6MzAsYmxvY2s6MzEsTk9ERV9JRDozMixub2RlU2hhcGVOTGFiZWw6MzMsZGlyTGlzdDozNCxESVI6MzUsTk9ERV9EU1RBUlQ6MzYsTk9ERV9ERU5EOjM3LEJMT0NLX0FSUk9XX1NUQVJUOjM4LEJMT0NLX0FSUk9XX0VORDozOSxjbGFzc0RlZjo0MCxDTEFTU0RFRl9JRDo0MSxDTEFTU0RFRl9TVFlMRU9QVFM6NDIsREVGQVVMVDo0MyxjbGFzczo0NCxDTEFTU0VOVElUWV9JRFM6NDUsU1RZTEVDTEFTUzo0NixzdHlsZTo0NyxTVFlMRV9FTlRJVFlfSURTOjQ4LFNUWUxFX0RFRklOSVRJT05fREFUQTo0OSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0VMSU5FIiw1OiJOTCIsNzoiU1BBQ0UiLDg6IkVPRiIsMTA6IkJMT0NLX0RJQUdSQU1fS0VZIiwxNToiTElOSyIsMTY6IlNUQVJUX0xJTksiLDE3OiJMSU5LX0xBQkVMIiwxODoiU1RSIiwyMToiU1BBQ0VfQkxPQ0siLDI3OiJTSVpFIiwyODoiQ09MVU1OUyIsMjk6ImlkLWJsb2NrIiwzMDoiZW5kIiwzMToiYmxvY2siLDMyOiJOT0RFX0lEIiwzNToiRElSIiwzNjoiTk9ERV9EU1RBUlQiLDM3OiJOT0RFX0RFTkQiLDM4OiJCTE9DS19BUlJPV19TVEFSVCIsMzk6IkJMT0NLX0FSUk9XX0VORCIsNDA6ImNsYXNzRGVmIiw0MToiQ0xBU1NERUZfSUQiLDQyOiJDTEFTU0RFRl9TVFlMRU9QVFMiLDQzOiJERUZBVUxUIiw0NDoiY2xhc3MiLDQ1OiJDTEFTU0VOVElUWV9JRFMiLDQ2OiJTVFlMRUNMQVNTIiw0Nzoic3R5bGUiLDQ4OiJTVFlMRV9FTlRJVFlfSURTIiw0OToiU1RZTEVfREVGSU5JVElPTl9EQVRBIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFszLDJdLFs2LDFdLFs2LDFdLFs2LDFdLFs5LDNdLFsxMiwxXSxbMTIsMV0sWzEyLDJdLFsxMiwyXSxbMTEsMV0sWzExLDJdLFsxNCwxXSxbMTQsNF0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxOSwzXSxbMTksMl0sWzE5LDFdLFsyMCwxXSxbMjIsNF0sWzIyLDNdLFsyNiwxXSxbMjYsMl0sWzM0LDFdLFszNCwyXSxbMzMsM10sWzMzLDRdLFsyMywzXSxbMjMsM10sWzI0LDNdLFsyNSwzXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKF8sVCxFLEwsUyxBLEkpe3ZhciBEPUEubGVuZ3RoLTE7c3dpdGNoKFMpe2Nhc2UgNDpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKE5MKSAiKTticmVhaztjYXNlIDU6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChTcGFjZSkgIik7YnJlYWs7Y2FzZSA2OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSAiKTticmVhaztjYXNlIDc6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogaGllcmFyY2h5OiAiLEFbRC0xXSksTC5zZXRIaWVyYXJjaHkoQVtELTFdKTticmVhaztjYXNlIDg6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMDpMLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDExOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDEyOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHN0YXRlbWVudDogIixBW0RdKSx0eXBlb2YgQVtEXS5sZW5ndGg9PSJudW1iZXIiP3RoaXMuJD1BW0RdOnRoaXMuJD1bQVtEXV07YnJlYWs7Y2FzZSAxMzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQgIzI6ICIsQVtELTFdKSx0aGlzLiQ9W0FbRC0xXV0uY29uY2F0KEFbRF0pO2JyZWFrO2Nhc2UgMTQ6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbGluazogIixBW0RdLF8pLHRoaXMuJD17ZWRnZVR5cGVTdHI6QVtEXSxsYWJlbDoiIn07YnJlYWs7Y2FzZSAxNTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBMQUJFTCBsaW5rOiAiLEFbRC0zXSxBW0QtMV0sQVtEXSksdGhpcy4kPXtlZGdlVHlwZVN0cjpBW0RdLGxhYmVsOkFbRC0xXX07YnJlYWs7Y2FzZSAxODpsZXQgaz1wYXJzZUludChBW0RdKSxSPUwuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6Uix0eXBlOiJzcGFjZSIsbGFiZWw6IiIsd2lkdGg6ayxjaGlsZHJlbjpbXX07YnJlYWs7Y2FzZSAyMzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiAobm9kZVN0YXRlbWVudCBsaW5rIG5vZGUpICIsQVtELTJdLEFbRC0xXSxBW0RdLCIgdHlwZXN0cjogIixBW0QtMV0uZWRnZVR5cGVTdHIpO2xldCBDPUwuZWRnZVN0clRvRWRnZURhdGEoQVtELTFdLmVkZ2VUeXBlU3RyKTt0aGlzLiQ9W3tpZDpBW0QtMl0uaWQsbGFiZWw6QVtELTJdLmxhYmVsLHR5cGU6QVtELTJdLnR5cGUsZGlyZWN0aW9uczpBW0QtMl0uZGlyZWN0aW9uc30se2lkOkFbRC0yXS5pZCsiLSIrQVtEXS5pZCxzdGFydDpBW0QtMl0uaWQsZW5kOkFbRF0uaWQsbGFiZWw6QVtELTFdLmxhYmVsLHR5cGU6ImVkZ2UiLGRpcmVjdGlvbnM6QVtEXS5kaXJlY3Rpb25zLGFycm93VHlwZUVuZDpDLGFycm93VHlwZVN0YXJ0OiJhcnJvd19vcGVuIn0se2lkOkFbRF0uaWQsbGFiZWw6QVtEXS5sYWJlbCx0eXBlOkwudHlwZVN0cjJUeXBlKEFbRF0udHlwZVN0ciksZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnN9XTticmVhaztjYXNlIDI0OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgIixBW0QtMV0sQVtEXSksdGhpcy4kPXtpZDpBW0QtMV0uaWQsbGFiZWw6QVtELTFdLmxhYmVsLHR5cGU6TC50eXBlU3RyMlR5cGUoQVtELTFdLnR5cGVTdHIpLGRpcmVjdGlvbnM6QVtELTFdLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6cGFyc2VJbnQoQVtEXSwxMCl9O2JyZWFrO2Nhc2UgMjU6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZVN0YXRlbWVudCAobm9kZSkgIixBW0RdKSx0aGlzLiQ9e2lkOkFbRF0uaWQsbGFiZWw6QVtEXS5sYWJlbCx0eXBlOkwudHlwZVN0cjJUeXBlKEFbRF0udHlwZVN0ciksZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6MX07YnJlYWs7Y2FzZSAyNjpMLmdldExvZ2dlcigpLmRlYnVnKCJBUEExMjMiLHRoaXM/dGhpczoibmEiKSxMLmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TOiAiLEFbRF0pLHRoaXMuJD17dHlwZToiY29sdW1uLXNldHRpbmciLGNvbHVtbnM6QVtEXT09PSJhdXRvIj8tMTpwYXJzZUludChBW0RdKX07YnJlYWs7Y2FzZSAyNzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBpZC1ibG9jayBzdGF0ZW1lbnQgOiAiLEFbRC0yXSxBW0QtMV0pO2xldCBPPUwuZ2VuZXJhdGVJZCgpO3RoaXMuJD17Li4uQVtELTJdLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46QVtELTFdfTticmVhaztjYXNlIDI4OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGJsb2NrU3RhdGVtZW50IDogIixBW0QtMl0sQVtELTFdLEFbRF0pO2xldCBOPUwuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6Tix0eXBlOiJjb21wb3NpdGUiLGxhYmVsOiIiLGNoaWxkcmVuOkFbRC0xXX07YnJlYWs7Y2FzZSAyOTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlIChOT0RFX0lEIHNlcGFyYXRvcik6ICIsQVtEXSksdGhpcy4kPXtpZDpBW0RdfTticmVhaztjYXNlIDMwOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6ICIsQVtELTFdLEFbRF0pLHRoaXMuJD17aWQ6QVtELTFdLGxhYmVsOkFbRF0ubGFiZWwsdHlwZVN0cjpBW0RdLnR5cGVTdHIsZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnN9O2JyZWFrO2Nhc2UgMzE6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogZGlyTGlzdDogIixBW0RdKSx0aGlzLiQ9W0FbRF1dO2JyZWFrO2Nhc2UgMzI6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogZGlyTGlzdDogIixBW0QtMV0sQVtEXSksdGhpcy4kPVtBW0QtMV1dLmNvbmNhdChBW0RdKTticmVhaztjYXNlIDMzOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTaGFwZU5MYWJlbDogIixBW0QtMl0sQVtELTFdLEFbRF0pLHRoaXMuJD17dHlwZVN0cjpBW0QtMl0rQVtEXSxsYWJlbDpBW0QtMV19O2JyZWFrO2Nhc2UgMzQ6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogQkxPQ0tfQVJST1cgbm9kZVNoYXBlTkxhYmVsOiAiLEFbRC0zXSxBW0QtMl0sIiAjMzoiLEFbRC0xXSxBW0RdKSx0aGlzLiQ9e3R5cGVTdHI6QVtELTNdK0FbRF0sbGFiZWw6QVtELTJdLGRpcmVjdGlvbnM6QVtELTFdfTticmVhaztjYXNlIDM1OmNhc2UgMzY6dGhpcy4kPXt0eXBlOiJjbGFzc0RlZiIsaWQ6QVtELTFdLnRyaW0oKSxjc3M6QVtEXS50cmltKCl9O2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0eXBlOiJhcHBseUNsYXNzIixpZDpBW0QtMV0udHJpbSgpLHN0eWxlQ2xhc3M6QVtEXS50cmltKCl9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0eXBlOiJhcHBseVN0eWxlcyIsaWQ6QVtELTFdLnRyaW0oKSxzdHlsZXNTdHI6QVtEXS50cmltKCl9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7OToxLDEwOlsxLDJdfSx7MTpbM119LHsxMTozLDEzOjQsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHs4OlsxLDIwXX0sdChoLFsyLDEyXSx7MTM6NCwxOTo1LDIwOjYsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDExOjIxLDIxOmUsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0pLHQoZixbMiwxNl0sezE0OjIyLDE1OmQsMTY6cH0pLHQoZixbMiwxN10pLHQoZixbMiwxOF0pLHQoZixbMiwxOV0pLHQoZixbMiwyMF0pLHQoZixbMiwyMV0pLHQoZixbMiwyMl0pLHQobSxbMiwyNV0sezI3OlsxLDI1XX0pLHQoZixbMiwyNl0pLHsxOToyNiwyNjoxMiwzMjphfSx7MTE6MjcsMTM6NCwxOTo1LDIwOjYsMjE6ZSwyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0sezQxOlsxLDI4XSw0MzpbMSwyOV19LHs0NTpbMSwzMF19LHs0ODpbMSwzMV19LHQoZyxbMiwyOV0sezMzOjMyLDM2OlsxLDMzXSwzODpbMSwzNF19KSx7MTpbMiw3XX0sdChoLFsyLDEzXSksezI2OjM1LDMyOmF9LHszMjpbMiwxNF19LHsxNzpbMSwzNl19LHQobSxbMiwyNF0pLHsxMTozNywxMzo0LDE0OjIyLDE1OmQsMTY6cCwxOTo1LDIwOjYsMjE6ZSwyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0sezMwOlsxLDM4XX0sezQyOlsxLDM5XX0sezQyOlsxLDQwXX0sezQ2OlsxLDQxXX0sezQ5OlsxLDQyXX0sdChnLFsyLDMwXSksezE4OlsxLDQzXX0sezE4OlsxLDQ0XX0sdChtLFsyLDIzXSksezE4OlsxLDQ1XX0sezMwOlsxLDQ2XX0sdChmLFsyLDI4XSksdChmLFsyLDM1XSksdChmLFsyLDM2XSksdChmLFsyLDM3XSksdChmLFsyLDM4XSksezM3OlsxLDQ3XX0sezM0OjQ4LDM1Onl9LHsxNTpbMSw1MF19LHQoZixbMiwyN10pLHQoZyxbMiwzM10pLHszOTpbMSw1MV19LHszNDo1MiwzNTp5LDM5OlsyLDMxXX0sezMyOlsyLDE1XX0sdChnLFsyLDM0XSksezM5OlsyLDMyXX1dLGRlZmF1bHRBY3Rpb25zOnsyMDpbMiw3XSwyMzpbMiwxNF0sNTA6WzIsMTVdLDUyOlsyLDMyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKF8sVCl7aWYoVC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF8pO2Vsc2V7dmFyIEU9bmV3IEVycm9yKF8pO3Rocm93IEUuaGFzaD1ULEV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oXyl7dmFyIFQ9dGhpcyxFPVswXSxMPVtdLFM9W251bGxdLEE9W10sST10aGlzLnRhYmxlLEQ9IiIsaz0wLFI9MCxDPTAsTz0yLE49MSxQPUEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksRj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLEI9e3l5Ont9fTtmb3IodmFyIEcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxHKSYmKEIueXlbR109dGhpcy55eVtHXSk7Ri5zZXRJbnB1dChfLEIueXkpLEIueXkubGV4ZXI9RixCLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBGLnl5bGxvYz4idSImJihGLnl5bGxvYz17fSk7dmFyIHo9Ri55eWxsb2M7QS5wdXNoKHopO3ZhciBXPUYub3B0aW9ucyYmRi5vcHRpb25zLnJhbmdlczt0eXBlb2YgQi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1CLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFooc2Upe0UubGVuZ3RoPUUubGVuZ3RoLTIqc2UsUy5sZW5ndGg9Uy5sZW5ndGgtc2UsQS5sZW5ndGg9QS5sZW5ndGgtc2V9byhaLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGooKXt2YXIgc2U7cmV0dXJuIHNlPUwucG9wKCl8fEYubGV4KCl8fE4sdHlwZW9mIHNlIT0ibnVtYmVyIiYmKHNlIGluc3RhbmNlb2YgQXJyYXkmJihMPXNlLHNlPUwucG9wKCkpLHNlPVQuc3ltYm9sc19bc2VdfHxzZSksc2V9byhqLCJsZXgiKTtmb3IodmFyIG9lLEssZWUsSixILHEsUT17fSxhZSx1ZSxjZSx0ZTs7KXtpZihlZT1FW0UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZWVdP0o9dGhpcy5kZWZhdWx0QWN0aW9uc1tlZV06KChvZT09PW51bGx8fHR5cGVvZiBvZT4idSIpJiYob2U9aigpKSxKPUlbZWVdJiZJW2VlXVtvZV0pLHR5cGVvZiBKPiJ1Inx8IUoubGVuZ3RofHwhSlswXSl7dmFyIE5lPSIiO3RlPVtdO2ZvcihhZSBpbiBJW2VlXSl0aGlzLnRlcm1pbmFsc19bYWVdJiZhZT5PJiZ0ZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bYWVdKyInIik7Ri5zaG93UG9zaXRpb24/TmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaysxKStgOgpgK0Yuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt0ZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW29lXXx8b2UpKyInIjpOZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrKzEpKyI6IFVuZXhwZWN0ZWQgIisob2U9PU4/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bb2VdfHxvZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTmUse3RleHQ6Ri5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bb2VdfHxvZSxsaW5lOkYueXlsaW5lbm8sbG9jOnosZXhwZWN0ZWQ6dGV9KX1pZihKWzBdaW5zdGFuY2VvZiBBcnJheSYmSi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2VlKyIsIHRva2VuOiAiK29lKTtzd2l0Y2goSlswXSl7Y2FzZSAxOkUucHVzaChvZSksUy5wdXNoKEYueXl0ZXh0KSxBLnB1c2goRi55eWxsb2MpLEUucHVzaChKWzFdKSxvZT1udWxsLEs/KG9lPUssSz1udWxsKTooUj1GLnl5bGVuZyxEPUYueXl0ZXh0LGs9Ri55eWxpbmVubyx6PUYueXlsbG9jLEM+MCYmQy0tKTticmVhaztjYXNlIDI6aWYodWU9dGhpcy5wcm9kdWN0aW9uc19bSlsxXV1bMV0sUS4kPVNbUy5sZW5ndGgtdWVdLFEuXyQ9e2ZpcnN0X2xpbmU6QVtBLmxlbmd0aC0odWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpBW0EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46QVtBLmxlbmd0aC0odWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QVtBLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sVyYmKFEuXyQucmFuZ2U9W0FbQS5sZW5ndGgtKHVlfHwxKV0ucmFuZ2VbMF0sQVtBLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFEsW0QsUixrLEIueXksSlsxXSxTLEFdLmNvbmNhdChQKSksdHlwZW9mIHE8InUiKXJldHVybiBxO3VlJiYoRT1FLnNsaWNlKDAsLTEqdWUqMiksUz1TLnNsaWNlKDAsLTEqdWUpLEE9QS5zbGljZSgwLC0xKnVlKSksRS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0pbMV1dWzBdKSxTLnB1c2goUS4kKSxBLnB1c2goUS5fJCksY2U9SVtFW0UubGVuZ3RoLTJdXVtFW0UubGVuZ3RoLTFdXSxFLnB1c2goY2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSx4PWZ1bmN0aW9uKCl7dmFyIHc9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihULEUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVCxFKTtlbHNlIHRocm93IG5ldyBFcnJvcihUKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKF8sVCl7cmV0dXJuIHRoaXMueXk9VHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Xyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBfPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1fLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fLHRoaXMubWF0Y2hlZCs9Xzt2YXIgVD1fLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksX30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihfKXt2YXIgVD1fLmxlbmd0aCxFPV8uc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1fK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1UKSx0aGlzLm9mZnNldC09VDt2YXIgTD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxFLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09RS5sZW5ndGgtMSk7dmFyIFM9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkU/KEUubGVuZ3RoPT09TC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0xbTC5sZW5ndGgtRS5sZW5ndGhdLmxlbmd0aC1FWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtTWzBdLFNbMF0rdGhpcy55eWxlbmctVF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKF8pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShfKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgXz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKF8ubGVuZ3RoPjIwPyIuLi4iOiIiKStfLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5tYXRjaDtyZXR1cm4gXy5sZW5ndGg8MjAmJihfKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1fLmxlbmd0aCkpLChfLnN1YnN0cigwLDIwKSsoXy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBfPXRoaXMucGFzdElucHV0KCksVD1uZXcgQXJyYXkoXy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtUKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihfLFQpe3ZhciBFLEwsUztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoUz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihTLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEw9X1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksTCYmKHRoaXMueXlsaW5lbm8rPUwubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46TD9MW0wubGVuZ3RoLTFdLmxlbmd0aC1MW0wubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1fWzBdLHRoaXMubWF0Y2grPV9bMF0sdGhpcy5tYXRjaGVzPV8sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoX1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9X1swXSxFPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRSlyZXR1cm4gRTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgQSBpbiBTKXRoaXNbQV09U1tBXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgXyxULEUsTDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBTPXRoaXMuX2N1cnJlbnRSdWxlcygpLEE9MDtBPFMubGVuZ3RoO0ErKylpZihFPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbU1tBXV0pLEUmJighVHx8RVswXS5sZW5ndGg+VFswXS5sZW5ndGgpKXtpZihUPUUsTD1BLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKF89dGhpcy50ZXN0X21hdGNoKEUsU1tBXSksXyE9PSExKXJldHVybiBfO2lmKHRoaXMuX2JhY2t0cmFjayl7VD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUPyhfPXRoaXMudGVzdF9tYXRjaChULFNbTF0pLF8hPT0hMT9fOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5uZXh0KCk7cmV0dXJuIFR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihUKXtyZXR1cm4gVD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFR8fDApLFQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1tUXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFQpe3RoaXMuYmVnaW4oVCl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihULEUsTCxTKXt2YXIgQT1TO3N3aXRjaChMKXtjYXNlIDA6cmV0dXJuIDEwO2Nhc2UgMTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgc3BhY2UtYmxvY2siKSwzMTticmVhaztjYXNlIDI6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIG5sLWJsb2NrIiksMzE7YnJlYWs7Y2FzZSAzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBzcGFjZS1ibG9jayIpLDI5O2JyZWFrO2Nhc2UgNDpULmdldExvZ2dlcigpLmRlYnVnKCIuIixFLnl5dGV4dCk7YnJlYWs7Y2FzZSA1OlQuZ2V0TG9nZ2VyKCkuZGVidWcoIl8iLEUueXl0ZXh0KTticmVhaztjYXNlIDY6cmV0dXJuIDU7Y2FzZSA3OnJldHVybiBFLnl5dGV4dD0tMSwyODticmVhaztjYXNlIDg6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL2NvbHVtbnNccysvLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TIChMRVgpIixFLnl5dGV4dCksMjg7YnJlYWs7Y2FzZSA5OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDEwOnJldHVybiJNRF9TVFIiO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTM6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBQT1BQSU5HIFNUUjoiLEUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBTVFIgZW5kOiIsRS55eXRleHQpLCJTVFIiO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL3NwYWNlXDovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJTUEFDRSBOVU0gKExFWCkiLEUueXl0ZXh0KSwyMTticmVhaztjYXNlIDE2OnJldHVybiBFLnl5dGV4dD0iMSIsVC5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsRS55eXRleHQpLDIxO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIDQzO2Nhc2UgMTg6cmV0dXJuIkxJTktTVFlMRSI7Y2FzZSAxOTpyZXR1cm4iSU5URVJQT0xBVEUiO2Nhc2UgMjA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRiIpLDQwO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLCJERUZBVUxUX0NMQVNTREVGX0lEIjticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSw0MTticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDI7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTIiksNDQ7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU19TVFlMRSIpLDQ1O2JyZWFrO2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NjticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RZTEVfU1RNTlQiKSw0NzticmVhaztjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUWUxFX0RFRklOSVRJT04iKSw0ODticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLCJhY2NfdGl0bGUiO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDMyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksImFjY19kZXNjciI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDM1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDM3OnJldHVybiAzMDtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAtKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXV0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAvXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC9dIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKV0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXT4iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1NTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogLSkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNTY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICgtIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU3OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCgiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjE6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjI6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGM6ID4iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjQ6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IChbIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDcyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJCTE9DS19BUlJPVyIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBBUlIgU1RBUlQiKSwzODticmVhaztjYXNlIDc1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IE5PREVfSUQiLEUueXl0ZXh0KSwzMjticmVhaztjYXNlIDc2OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IEVPRiIsRS55eXRleHQpLDg7YnJlYWs7Y2FzZSA3Nzp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSA3ODp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSA3OTpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSA4MDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MTpULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgyOlQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBBUlI6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IE5PREVfREVTQ1I6IixFLnl5dGV4dCksIk5PREVfREVTQ1IiO2JyZWFrO2Nhc2UgODQ6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIFBPUFBJTkciKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4NTpULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ID0+QkFFIiksdGhpcy5wdXNoU3RhdGUoIkFSUk9XX0RJUiIpO2JyZWFrO2Nhc2UgODY6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChyaWdodCk6IGRpcjoiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDg3OnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAobGVmdCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA4ODpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHgpOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgODk6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh5KToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDkwOnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAodXApOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTE6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChkb3duKToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDkyOnJldHVybiBFLnl5dGV4dD0iXT4iLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoQVJST1dfRElSIGVuZCk6IixFLnl5dGV4dCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwiQkxPQ0tfQVJST1dfRU5EIjticmVhaztjYXNlIDkzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIitFLnl5dGV4dCsiIyIpLDE1O2JyZWFrO2Nhc2UgOTQ6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTc6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU1RBUlRfTElOSyIsRS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjticmVhaztjYXNlIDk4OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFNUQVJUX0xJTksiLEUueXl0ZXh0KSx0aGlzLnB1c2hTdGF0ZSgiTExBQkVMIiksMTY7YnJlYWs7Y2FzZSA5OTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixFLnl5dGV4dCksdGhpcy5wdXNoU3RhdGUoIkxMQUJFTCIpLDE2O2JyZWFrO2Nhc2UgMTAwOnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDEwMTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTdGFydGluZyBzdHJpbmciKSx0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIiksIkxJTktfTEFCRUwiO2JyZWFrO2Nhc2UgMTAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIiwiIyIrRS55eXRleHQrIiMiKSwxNTticmVhaztjYXNlIDEwMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSAxMDU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogQ09MT04iLEUueXl0ZXh0KSxFLnl5dGV4dD1FLnl5dGV4dC5zbGljZSgxKSwyNzticmVha319LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpibG9jay1iZXRhXGIpLywvXig/OmJsb2NrXHMrKS8sL14oPzpibG9ja1xuKykvLC9eKD86YmxvY2s6KS8sL14oPzpbXHNdKykvLC9eKD86W1xuXSspLywvXig/OigoXHUwMDBEXHUwMDBBKXwoXHUwMDBBKSkpLywvXig/OmNvbHVtbnNccythdXRvXGIpLywvXig/OmNvbHVtbnNccytbXGRdKykvLC9eKD86WyJdW2BdKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpzcGFjZVs6XVxkKykvLC9eKD86c3BhY2VcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZccyspLywvXig/OkRFRkFVTFRccyspLywvXig/Olx3K1xzKykvLC9eKD86W15cbl0qKS8sL14oPzpjbGFzc1xzKykvLC9eKD86KFx3KykrKCgsXHMqXHcrKSopKS8sL14oPzpbXlxuXSopLywvXig/OnN0eWxlXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OmVuZFxiXHMqKS8sL14oPzpcKFwoXCgpLywvXig/OlwpXClcKSkvLC9eKD86W1wpXVwpKS8sL14oPzpcfVx9KS8sL14oPzpcfSkvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXCgpLywvXig/OlxdXF0pLywvXig/OlwoKS8sL14oPzpcXVwpKS8sL14oPzpcXFxdKS8sL14oPzpcL1xdKS8sL14oPzpcKVxdKS8sL14oPzpbXCldKS8sL14oPzpcXT4pLywvXig/OltcXV0pLywvXig/Oi1cKSkvLC9eKD86XCgtKS8sL14oPzpcKVwpKS8sL14oPzpcKSkvLC9eKD86XChcKFwoKS8sL14oPzpcKFwoKS8sL14oPzpce1x7KS8sL14oPzpceykvLC9eKD86PikvLC9eKD86XChcWykvLC9eKD86XCgpLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XFtcXCkvLC9eKD86XFtcLykvLC9eKD86XFtcXCkvLC9eKD86XFspLywvXig/OjxcWykvLC9eKD86W15cKFxbXG5cLVwpXHtcfVxzXDxcPjpdKykvLC9eKD86JCkvLC9eKD86WyJdW2BdKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86XF0+XHMqXCgpLywvXig/Oiw/XHMqcmlnaHRccyopLywvXig/Oiw/XHMqbGVmdFxzKikvLC9eKD86LD9ccyp4XHMqKS8sL14oPzosP1xzKnlccyopLywvXig/Oiw/XHMqdXBccyopLywvXig/Oiw/XHMqZG93blxzKikvLC9eKD86XClccyopLywvXig/OlxzKlt4bzxdPy0tK1steG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT0rWz14bz5dXHMqKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpccypbeG88XT89PVxzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXSkvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86OlxkKykvXSxjb25kaXRpb25zOntTVFlMRV9ERUZJTklUSU9OOntydWxlczpbMjldLGluY2x1c2l2ZTohMX0sU1RZTEVfU1RNTlQ6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjNdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyMSwyMl0saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI2XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjVdLGluY2x1c2l2ZTohMX0sTExBQkVMOntydWxlczpbMTAwLDEwMSwxMDIsMTAzLDEwNF0saW5jbHVzaXZlOiExfSxBUlJPV19ESVI6e3J1bGVzOls4Niw4Nyw4OCw4OSw5MCw5MSw5Ml0saW5jbHVzaXZlOiExfSxCTE9DS19BUlJPVzp7cnVsZXM6Wzc3LDgyLDg1XSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlszOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw3OCw4MV0saW5jbHVzaXZlOiExfSxtZF9zdHJpbmc6e3J1bGVzOlsxMCwxMSw3OSw4MF0saW5jbHVzaXZlOiExfSxzcGFjZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxMywxNCw4Myw4NF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMzUsMzZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTIsMTUsMTYsMTcsMTgsMTksMjAsMjQsMjcsMzAsMzIsMzQsMzcsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTA1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHd9KCk7di5sZXhlcj14O2Z1bmN0aW9uIGIoKXt0aGlzLnl5PXt9fXJldHVybiBvKGIsIlBhcnNlciIpLGIucHJvdG90eXBlPXYsdi5QYXJzZXI9YixuZXcgYn0oKTtRQi5wYXJzZXI9UUI7V3llPVFCfSk7ZnVuY3Rpb24gQ3J0KHQpe3N3aXRjaChZLmRlYnVnKCJ0eXBlU3RyMlR5cGUiLHQpLHQpe2Nhc2UiW10iOnJldHVybiJzcXVhcmUiO2Nhc2UiKCkiOnJldHVybiBZLmRlYnVnKCJ3ZSBoYXZlIGEgcm91bmQiKSwicm91bmQiO2Nhc2UiKCgpKSI6cmV0dXJuImNpcmNsZSI7Y2FzZSI+XSI6cmV0dXJuInJlY3RfbGVmdF9pbnZfYXJyb3ciO2Nhc2Uie30iOnJldHVybiJkaWFtb25kIjtjYXNlInt7fX0iOnJldHVybiJoZXhhZ29uIjtjYXNlIihbXSkiOnJldHVybiJzdGFkaXVtIjtjYXNlIltbXV0iOnJldHVybiJzdWJyb3V0aW5lIjtjYXNlIlsoKV0iOnJldHVybiJjeWxpbmRlciI7Y2FzZSIoKCgpKSkiOnJldHVybiJkb3VibGVjaXJjbGUiO2Nhc2UiWy8vXSI6cmV0dXJuImxlYW5fcmlnaHQiO2Nhc2UiW1xcXFxdIjpyZXR1cm4ibGVhbl9sZWZ0IjtjYXNlIlsvXFxdIjpyZXR1cm4idHJhcGV6b2lkIjtjYXNlIltcXC9dIjpyZXR1cm4iaW52X3RyYXBlem9pZCI7Y2FzZSI8W10+IjpyZXR1cm4iYmxvY2tfYXJyb3ciO2RlZmF1bHQ6cmV0dXJuIm5hIn19ZnVuY3Rpb24gQXJ0KHQpe3N3aXRjaChZLmRlYnVnKCJ0eXBlU3RyMlR5cGUiLHQpLHQpe2Nhc2UiPT0iOnJldHVybiJ0aGljayI7ZGVmYXVsdDpyZXR1cm4ibm9ybWFsIn19ZnVuY3Rpb24gX3J0KHQpe3N3aXRjaCh0LnRyaW0oKSl7Y2FzZSItLXgiOnJldHVybiJhcnJvd19jcm9zcyI7Y2FzZSItLW8iOnJldHVybiJhcnJvd19jaXJjbGUiO2RlZmF1bHQ6cmV0dXJuImFycm93X3BvaW50In19dmFyIEpsLEpCLFpCLHF5ZSxYeWUseHJ0LEt5ZSxicnQsbFMsd3J0LFRydCxrcnQsRXJ0LFF5ZSxlRixMYixTcnQsanllLExydCxEcnQsTnJ0LFJydCxNcnQsSXJ0LE9ydCxQcnQsQnJ0LEZydCx6cnQsWnllLEp5ZT1NKCgpPT57InVzZSBzdHJpY3QiO0FMKCk7WmEoKTtWdCgpO3V0KCk7ZnIoKTtBaSgpO0psPW5ldyBNYXAsSkI9W10sWkI9bmV3IE1hcCxxeWU9ImNvbG9yIixYeWU9ImZpbGwiLHhydD0iYmdGaWxsIixLeWU9IiwiLGJydD1wZSgpLGxTPW5ldyBNYXAsd3J0PW8odD0+cWUuc2FuaXRpemVUZXh0KHQsYnJ0KSwic2FuaXRpemVUZXh0IiksVHJ0PW8oZnVuY3Rpb24odCxlPSIiKXtsZXQgcj1sUy5nZXQodCk7cnx8KHI9e2lkOnQsc3R5bGVzOltdLHRleHRTdHlsZXM6W119LGxTLnNldCh0LHIpKSxlPy5zcGxpdChLeWUpLmZvckVhY2gobj0+e2xldCBpPW4ucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihSZWdFeHAocXllKS5leGVjKG4pKXtsZXQgcz1pLnJlcGxhY2UoWHllLHhydCkucmVwbGFjZShxeWUsWHllKTtyLnRleHRTdHlsZXMucHVzaChzKX1yLnN0eWxlcy5wdXNoKGkpfSl9LCJhZGRTdHlsZUNsYXNzIiksa3J0PW8oZnVuY3Rpb24odCxlPSIiKXtsZXQgcj1KbC5nZXQodCk7ZSE9bnVsbCYmKHIuc3R5bGVzPWUuc3BsaXQoS3llKSl9LCJhZGRTdHlsZTJOb2RlIiksRXJ0PW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1KbC5nZXQocik7aWYobj09PXZvaWQgMCl7bGV0IGk9ci50cmltKCk7bj17aWQ6aSx0eXBlOiJuYSIsY2hpbGRyZW46W119LEpsLnNldChpLG4pfW4uY2xhc3Nlc3x8KG4uY2xhc3Nlcz1bXSksbi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENzc0NsYXNzIiksUXllPW8oKHQsZSk9PntsZXQgcj10LmZsYXQoKSxuPVtdO2ZvcihsZXQgaSBvZiByKXtpZihpLmxhYmVsJiYoaS5sYWJlbD13cnQoaS5sYWJlbCkpLGkudHlwZT09PSJjbGFzc0RlZiIpe1RydChpLmlkLGkuY3NzKTtjb250aW51ZX1pZihpLnR5cGU9PT0iYXBwbHlDbGFzcyIpe0VydChpLmlkLGk/LnN0eWxlQ2xhc3M/PyIiKTtjb250aW51ZX1pZihpLnR5cGU9PT0iYXBwbHlTdHlsZXMiKXtpPy5zdHlsZXNTdHImJmtydChpLmlkLGk/LnN0eWxlc1N0cik7Y29udGludWV9aWYoaS50eXBlPT09ImNvbHVtbi1zZXR0aW5nIillLmNvbHVtbnM9aS5jb2x1bW5zPz8tMTtlbHNlIGlmKGkudHlwZT09PSJlZGdlIil7bGV0IGE9KFpCLmdldChpLmlkKT8/MCkrMTtaQi5zZXQoaS5pZCxhKSxpLmlkPWErIi0iK2kuaWQsSkIucHVzaChpKX1lbHNle2kubGFiZWx8fChpLnR5cGU9PT0iY29tcG9zaXRlIj9pLmxhYmVsPSIiOmkubGFiZWw9aS5pZCk7bGV0IGE9SmwuZ2V0KGkuaWQpO2lmKGE9PT12b2lkIDA/Smwuc2V0KGkuaWQsaSk6KGkudHlwZSE9PSJuYSImJihhLnR5cGU9aS50eXBlKSxpLmxhYmVsIT09aS5pZCYmKGEubGFiZWw9aS5sYWJlbCkpLGkuY2hpbGRyZW4mJlF5ZShpLmNoaWxkcmVuLGkpLGkudHlwZT09PSJzcGFjZSIpe2xldCBzPWkud2lkdGg/PzE7Zm9yKGxldCBsPTA7bDxzO2wrKyl7bGV0IHU9cm4oaSk7dS5pZD11LmlkKyItIitsLEpsLnNldCh1LmlkLHUpLG4ucHVzaCh1KX19ZWxzZSBhPT09dm9pZCAwJiZuLnB1c2goaSl9fWUuY2hpbGRyZW49bn0sInBvcHVsYXRlQmxvY2tEYXRhYmFzZSIpLGVGPVtdLExiPXtpZDoicm9vdCIsdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpbXSxjb2x1bW5zOi0xfSxTcnQ9bygoKT0+e1kuZGVidWcoIkNsZWFyIGNhbGxlZCIpLExyKCksTGI9e2lkOiJyb290Iix0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOltdLGNvbHVtbnM6LTF9LEpsPW5ldyBNYXAoW1sicm9vdCIsTGJdXSksZUY9W10sbFM9bmV3IE1hcCxKQj1bXSxaQj1uZXcgTWFwfSwiY2xlYXIiKTtvKENydCwidHlwZVN0cjJUeXBlIik7byhBcnQsImVkZ2VUeXBlU3RyMlR5cGUiKTtvKF9ydCwiZWRnZVN0clRvRWRnZURhdGEiKTtqeWU9MCxMcnQ9bygoKT0+KGp5ZSsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIranllKSwiZ2VuZXJhdGVJZCIpLERydD1vKHQ9PntMYi5jaGlsZHJlbj10LFF5ZSh0LExiKSxlRj1MYi5jaGlsZHJlbn0sInNldEhpZXJhcmNoeSIpLE5ydD1vKHQ9PntsZXQgZT1KbC5nZXQodCk7cmV0dXJuIGU/ZS5jb2x1bW5zP2UuY29sdW1uczplLmNoaWxkcmVuP2UuY2hpbGRyZW4ubGVuZ3RoOi0xOi0xfSwiZ2V0Q29sdW1ucyIpLFJydD1vKCgpPT5bLi4uSmwudmFsdWVzKCldLCJnZXRCbG9ja3NGbGF0IiksTXJ0PW8oKCk9PmVGfHxbXSwiZ2V0QmxvY2tzIiksSXJ0PW8oKCk9PkpCLCJnZXRFZGdlcyIpLE9ydD1vKHQ9PkpsLmdldCh0KSwiZ2V0QmxvY2siKSxQcnQ9byh0PT57Smwuc2V0KHQuaWQsdCl9LCJzZXRCbG9jayIpLEJydD1vKCgpPT5jb25zb2xlLCJnZXRMb2dnZXIiKSxGcnQ9byhmdW5jdGlvbigpe3JldHVybiBsU30sImdldENsYXNzZXMiKSx6cnQ9e2dldENvbmZpZzpvKCgpPT5DcigpLmJsb2NrLCJnZXRDb25maWciKSx0eXBlU3RyMlR5cGU6Q3J0LGVkZ2VUeXBlU3RyMlR5cGU6QXJ0LGVkZ2VTdHJUb0VkZ2VEYXRhOl9ydCxnZXRMb2dnZXI6QnJ0LGdldEJsb2Nrc0ZsYXQ6UnJ0LGdldEJsb2NrczpNcnQsZ2V0RWRnZXM6SXJ0LHNldEhpZXJhcmNoeTpEcnQsZ2V0QmxvY2s6T3J0LHNldEJsb2NrOlBydCxnZXRDb2x1bW5zOk5ydCxnZXRDbGFzc2VzOkZydCxjbGVhcjpTcnQsZ2VuZXJhdGVJZDpMcnR9LFp5ZT16cnR9KTt2YXIgY1MsR3J0LGV2ZSx0dmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO2NTPW8oKHQsZSk9PntsZXQgcj1heSxuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gWnMobixpLGEsZSl9LCJmYWRlIiksR3J0PW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuLHAgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CgoKCiAgLmxhYmVsIHRleHQsc3BhbixwIHsKICAgIGZpbGw6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LW91dGVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgLy8gfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtaW5uZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogIC8vIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMi4wcHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi8KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtjUyh0LmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6CiAgfQoKICAubm9kZSAuY2x1c3RlciB7CiAgICAvLyBmaWxsOiAke2NTKHQubWFpbkJrZywuNSl9OwogICAgZmlsbDogJHtjUyh0LmNsdXN0ZXJCa2csLjUpfTsKICAgIHN0cm9rZTogJHtjUyh0LmNsdXN0ZXJCb3JkZXIsLjIpfTsKICAgIGJveC1zaGFkb3c6IHJnYmEoNTAsIDUwLCA5MywgMC4yNSkgMHB4IDEzcHggMjdweCAtNXB4LCByZ2JhKDAsIDAsIDAsIDAuMykgMHB4IDhweCAxNnB4IC04cHg7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLmNsdXN0ZXIgc3BhbixwIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CmAsImdldFN0eWxlcyIpLGV2ZT1HcnR9KTt2YXIgJHJ0LFZydCxVcnQsSHJ0LFdydCxZcnQscXJ0LFhydCxqcnQsS3J0LFFydCxydmUsbnZlPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTskcnQ9bygodCxlLHIsbik9PntlLmZvckVhY2goaT0+e1FydFtpXSh0LHIsbil9KX0sImluc2VydE1hcmtlcnMiKSxWcnQ9bygodCxlLHIpPT57WS50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsciksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSwiZXh0ZW5zaW9uIiksVXJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSwiY29tcG9zaXRpb24iKSxIcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJhZ2dyZWdhdGlvbiIpLFdydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiZGVwZW5kZW5jeSIpLFlydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0sImxvbGxpcG9wIikscXJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwicG9pbnQiKSxYcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwiY2lyY2xlIiksanJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjcm9zcyIpLEtydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiYmFyYiIpLFFydD17ZXh0ZW5zaW9uOlZydCxjb21wb3NpdGlvbjpVcnQsYWdncmVnYXRpb246SHJ0LGRlcGVuZGVuY3k6V3J0LGxvbGxpcG9wOllydCxwb2ludDpxcnQsY2lyY2xlOlhydCxjcm9zczpqcnQsYmFyYjpLcnR9LHJ2ZT0kcnR9KTtmdW5jdGlvbiBacnQodCxlKXtpZih0PT09MHx8IU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IEVycm9yKCJDb2x1bW5zIG11c3QgYmUgYW4gaW50ZWdlciAhPT0gMC4iKTtpZihlPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcigiUG9zaXRpb24gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiIrZSk7aWYodDwwKXJldHVybntweDplLHB5OjB9O2lmKHQ9PT0xKXJldHVybntweDowLHB5OmV9O2xldCByPWUldCxuPU1hdGguZmxvb3IoZS90KTtyZXR1cm57cHg6cixweTpufX1mdW5jdGlvbiB0Rih0LGUscj0wLG49MCl7WS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpIix0LmlkLHQ/LnNpemU/LngsImJsb2NrIHdpZHRoID0iLHQ/LnNpemUsInNpZWJsaW5nV2lkdGgiLHIpLHQ/LnNpemU/LndpZHRofHwodC5zaXplPXt3aWR0aDpyLGhlaWdodDpuLHg6MCx5OjB9KTtsZXQgaT0wLGE9MDtpZih0LmNoaWxkcmVuPy5sZW5ndGg+MCl7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdEYobSxlKTtsZXQgcz1KcnQodCk7aT1zLndpZHRoLGE9cy5oZWlnaHQsWS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSBtYXhXaWR0aCBvZiIsdC5pZCwiOnMgY2hpbGRyZW4gaXMgIixpLGEpO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKW0uc2l6ZSYmKFkuZGVidWcoYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke3QuaWR9IGlkPSR7bS5pZH0gJHtpfSAke2F9ICR7SlNPTi5zdHJpbmdpZnkobS5zaXplKX1gKSxtLnNpemUud2lkdGg9aSoobS53aWR0aEluQ29sdW1ucz8/MSkrVGkqKChtLndpZHRoSW5Db2x1bW5zPz8xKS0xKSxtLnNpemUuaGVpZ2h0PWEsbS5zaXplLng9MCxtLnNpemUueT0wLFkuZGVidWcoYGFiYzk1IHVwZGF0aW5nIHNpemUgb2YgJHt0LmlkfSBjaGlsZHJlbiBjaGlsZDoke20uaWR9IG1heFdpZHRoOiR7aX0gbWF4SGVpZ2h0OiR7YX1gKSk7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdEYobSxlLGksYSk7bGV0IGw9dC5jb2x1bW5zPz8tMSx1PTA7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdSs9bS53aWR0aEluQ29sdW1ucz8/MTtsZXQgaD10LmNoaWxkcmVuLmxlbmd0aDtsPjAmJmw8dSYmKGg9bCk7bGV0IGY9TWF0aC5jZWlsKHUvaCksZD1oKihpK1RpKStUaSxwPWYqKGErVGkpK1RpO2lmKGQ8cil7WS5kZWJ1ZyhgRGV0ZWN0ZWQgdG8gc21hbGwgc2llYmxpbmc6IGFiYzk1ICR7dC5pZH0gc2llYmxpbmdXaWR0aCAke3J9IHNpZWJsaW5nSGVpZ2h0ICR7bn0gd2lkdGggJHtkfWApLGQ9cixwPW47bGV0IG09KHItaCpUaS1UaSkvaCxnPShuLWYqVGktVGkpL2Y7WS5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODgiLHQuaWQsImNoaWxkV2lkdGgiLG0sIm1heFdpZHRoIixpKSxZLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsdC5pZCwiY2hpbGRIZWlnaHQiLGcsIm1heEhlaWdodCIsYSksWS5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODggeFNpemUiLGgsInBhZGRpbmciLFRpKTtmb3IobGV0IHkgb2YgdC5jaGlsZHJlbil5LnNpemUmJih5LnNpemUud2lkdGg9bSx5LnNpemUuaGVpZ2h0PWcseS5zaXplLng9MCx5LnNpemUueT0wKX1pZihZLmRlYnVnKGBhYmM5NSAoZmluYWxlIGNhbGMpICR7dC5pZH0geFNpemUgJHtofSB5U2l6ZSAke2Z9IGNvbHVtbnMgJHtsfSR7dC5jaGlsZHJlbi5sZW5ndGh9IHdpZHRoPSR7TWF0aC5tYXgoZCx0LnNpemU/LndpZHRofHwwKX1gKSxkPCh0Py5zaXplPy53aWR0aHx8MCkpe2Q9dD8uc2l6ZT8ud2lkdGh8fDA7bGV0IG09bD4wP01hdGgubWluKHQuY2hpbGRyZW4ubGVuZ3RoLGwpOnQuY2hpbGRyZW4ubGVuZ3RoO2lmKG0+MCl7bGV0IGc9KGQtbSpUaS1UaSkvbTtZLmRlYnVnKCJhYmM5NSAoZ3Jvd2luZyB0byBmaXQpIHdpZHRoIix0LmlkLGQsdC5zaXplPy53aWR0aCxnKTtmb3IobGV0IHkgb2YgdC5jaGlsZHJlbil5LnNpemUmJih5LnNpemUud2lkdGg9Zyl9fXQuc2l6ZT17d2lkdGg6ZCxoZWlnaHQ6cCx4OjAseTowfX1ZLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk0IChkb25lKSIsdC5pZCx0Py5zaXplPy54LHQ/LnNpemU/LndpZHRoLHQ/LnNpemU/LnksdD8uc2l6ZT8uaGVpZ2h0KX1mdW5jdGlvbiBpdmUodCxlKXtZLmRlYnVnKGBhYmM4NSBsYXlvdXQgYmxvY2tzICg9PmxheW91dEJsb2NrcykgJHt0LmlkfSB4OiAke3Q/LnNpemU/Lnh9IHk6ICR7dD8uc2l6ZT8ueX0gd2lkdGg6ICR7dD8uc2l6ZT8ud2lkdGh9YCk7bGV0IHI9dC5jb2x1bW5zPz8tMTtpZihZLmRlYnVnKCJsYXlvdXRCbG9ja3MgY29sdW1ucyBhYmM5NSIsdC5pZCwiPT4iLHIsdCksdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5sZW5ndGg+MCl7bGV0IG49dD8uY2hpbGRyZW5bMF0/LnNpemU/LndpZHRoPz8wLGk9dC5jaGlsZHJlbi5sZW5ndGgqbisodC5jaGlsZHJlbi5sZW5ndGgtMSkqVGk7WS5kZWJ1Zygid2lkdGhPZkNoaWxkcmVuIDg4IixpLCJwb3NYIik7bGV0IGE9MDtZLmRlYnVnKCJhYmM5MSBibG9jaz8uc2l6ZT8ueCIsdC5pZCx0Py5zaXplPy54KTtsZXQgcz10Py5zaXplPy54P3Q/LnNpemU/LngrKC10Py5zaXplPy53aWR0aC8yfHwwKTotVGksbD0wO2ZvcihsZXQgdSBvZiB0LmNoaWxkcmVuKXtsZXQgaD10O2lmKCF1LnNpemUpY29udGludWU7bGV0e3dpZHRoOmYsaGVpZ2h0OmR9PXUuc2l6ZSx7cHg6cCxweTptfT1acnQocixhKTtpZihtIT1sJiYobD1tLHM9dD8uc2l6ZT8ueD90Py5zaXplPy54KygtdD8uc2l6ZT8ud2lkdGgvMnx8MCk6LVRpLFkuZGVidWcoIk5ldyByb3cgaW4gbGF5b3V0IGZvciBibG9jayIsdC5pZCwiIGFuZCBjaGlsZCAiLHUuaWQsbCkpLFkuZGVidWcoYGFiYzg5IGxheW91dCBibG9ja3MgKGNoaWxkKSBpZDogJHt1LmlkfSBQb3M6ICR7YX0gKHB4LCBweSkgJHtwfSwke219ICgke2g/LnNpemU/Lnh9LCR7aD8uc2l6ZT8ueX0pIHBhcmVudDogJHtoLmlkfSB3aWR0aDogJHtmfSR7VGl9YCksaC5zaXplKXtsZXQgZz1mLzI7dS5zaXplLng9cytUaStnLFkuZGVidWcoYGFiYzkxIGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7dS5pZH0gc3RhcnRpbmdQb3M9WCR7c30gbmV3IHN0YXJ0aW5nUG9zWCR7dS5zaXplLnh9ICR7Z30gcGFkZGluZz0ke1RpfSB3aWR0aD0ke2Z9IGhhbGZXaWR0aD0ke2d9ID0+IHg6JHt1LnNpemUueH0geToke3Uuc2l6ZS55fSAke3Uud2lkdGhJbkNvbHVtbnN9ICh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyICR7ZioodT8ud2lkdGhJbkNvbHVtbnM/PzEpLzJ9YCkscz11LnNpemUueCtnLHUuc2l6ZS55PWguc2l6ZS55LWguc2l6ZS5oZWlnaHQvMittKihkK1RpKStkLzIrVGksWS5kZWJ1ZyhgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHt1LmlkfXN0YXJ0aW5nUG9zWCR7c30ke1RpfSR7Z309Png6JHt1LnNpemUueH15OiR7dS5zaXplLnl9JHt1LndpZHRoSW5Db2x1bW5zfSh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyJHtmKih1Py53aWR0aEluQ29sdW1ucz8/MSkvMn1gKX11LmNoaWxkcmVuJiZpdmUodSxlKSxhKz11Py53aWR0aEluQ29sdW1ucz8/MSxZLmRlYnVnKCJhYmM4OCBjb2x1bW5zUG9zIix1LGEpfX1ZLmRlYnVnKGBsYXlvdXQgYmxvY2tzICg8PT1sYXlvdXRCbG9ja3MpICR7dC5pZH0geDogJHt0Py5zaXplPy54fSB5OiAke3Q/LnNpemU/Lnl9IHdpZHRoOiAke3Q/LnNpemU/LndpZHRofWApfWZ1bmN0aW9uIGF2ZSh0LHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9PXttaW5YOjAsbWluWTowLG1heFg6MCxtYXhZOjB9KXtpZih0LnNpemUmJnQuaWQhPT0icm9vdCIpe2xldHt4OmEseTpzLHdpZHRoOmwsaGVpZ2h0OnV9PXQuc2l6ZTthLWwvMjxlJiYoZT1hLWwvMikscy11LzI8ciYmKHI9cy11LzIpLGErbC8yPm4mJihuPWErbC8yKSxzK3UvMj5pJiYoaT1zK3UvMil9aWYodC5jaGlsZHJlbilmb3IobGV0IGEgb2YgdC5jaGlsZHJlbikoe21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX09YXZlKGEse21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX0pKTtyZXR1cm57bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfX1mdW5jdGlvbiBzdmUodCl7bGV0IGU9dC5nZXRCbG9jaygicm9vdCIpO2lmKCFlKXJldHVybjt0RihlLHQsMCwwKSxpdmUoZSx0KSxZLmRlYnVnKCJnZXRCbG9ja3MiLEpTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSk7bGV0e21pblg6cixtaW5ZOm4sbWF4WDppLG1heFk6YX09YXZlKGUpLHM9YS1uLGw9aS1yO3JldHVybnt4OnIseTpuLHdpZHRoOmwsaGVpZ2h0OnN9fXZhciBUaSxKcnQsb3ZlPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtWdCgpO1RpPXBlKCk/LmJsb2NrPy5wYWRkaW5nPz84O28oWnJ0LCJjYWxjdWxhdGVCbG9ja1Bvc2l0aW9uIik7SnJ0PW8odD0+e2xldCBlPTAscj0wO2ZvcihsZXQgbiBvZiB0LmNoaWxkcmVuKXtsZXR7d2lkdGg6aSxoZWlnaHQ6YSx4OnMseTpsfT1uLnNpemU/P3t3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O1kuZGVidWcoImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDoiLG4uaWQsIndpZHRoOiIsaSwiaGVpZ2h0OiIsYSwieDoiLHMsInk6IixsLG4udHlwZSksbi50eXBlIT09InNwYWNlIiYmKGk+ZSYmKGU9aS8odC53aWR0aEluQ29sdW1ucz8/MSkpLGE+ciYmKHI9YSkpfXJldHVybnt3aWR0aDplLGhlaWdodDpyfX0sImdldE1heENoaWxkU2l6ZSIpO28odEYsInNldEJsb2NrU2l6ZXMiKTtvKGl2ZSwibGF5b3V0QmxvY2tzIik7byhhdmUsImZpbmRCb3VuZHMiKTtvKHN2ZSwibGF5b3V0Iil9KTtmdW5jdGlvbiBsdmUodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1mdW5jdGlvbiBlbnQodCl7bGV0IGU9VmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSkscj1lLmFwcGVuZCgieGh0bWw6ZGl2Iiksbj10LmxhYmVsLGk9dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsYT1yLmFwcGVuZCgic3BhbiIpO3JldHVybiBhLmh0bWwobiksbHZlKGEsdC5sYWJlbFN0eWxlKSxhLmF0dHIoImNsYXNzIixpKSxsdmUocix0LmxhYmVsU3R5bGUpLHIuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxyLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLHIuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksZS5ub2RlKCl9dmFyIHRudCxncyx1Uz1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7dXQoKTtWdCgpO2ZyKCk7aHIoKTtQbCgpO28obHZlLCJhcHBseVN0eWxlIik7byhlbnQsImFkZEh0bWxMYWJlbCIpO3RudD1vKCh0LGUscixuKT0+e2xldCBpPXR8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmKGk9aVswXSkseHIocGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksWS5kZWJ1ZygidmVydGV4VGV4dCIraSk7bGV0IGE9e2lzTm9kZTpuLGxhYmVsOnc5KE1hKGkpKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGVudChhKX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBzPVtdO3R5cGVvZiBpPT0ic3RyaW5nIj9zPWkuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP3M9aTpzPVtdO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHI/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1sLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfX0sImNyZWF0ZUxhYmVsIiksZ3M9dG50fSk7dmFyIHV2ZSxybnQsY3ZlLGh2ZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7dXZlPW8oKHQsZSxyLG4saSk9PntlLmFycm93VHlwZVN0YXJ0JiZjdmUodCwic3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQscixuLGkpLGUuYXJyb3dUeXBlRW5kJiZjdmUodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSl9LCJhZGRFZGdlTWFya2VycyIpLHJudD17YXJyb3dfY3Jvc3M6ImNyb3NzIixhcnJvd19wb2ludDoicG9pbnQiLGFycm93X2JhcmI6ImJhcmIiLGFycm93X2NpcmNsZToiY2lyY2xlIixhZ2dyZWdhdGlvbjoiYWdncmVnYXRpb24iLGV4dGVuc2lvbjoiZXh0ZW5zaW9uIixjb21wb3NpdGlvbjoiY29tcG9zaXRpb24iLGRlcGVuZGVuY3k6ImRlcGVuZGVuY3kiLGxvbGxpcG9wOiJsb2xsaXBvcCJ9LGN2ZT1vKCh0LGUscixuLGksYSk9PntsZXQgcz1ybnRbcl07aWYoIXMpe1kud2FybihgVW5rbm93biBhcnJvdyB0eXBlOiAke3J9YCk7cmV0dXJufWxldCBsPWU9PT0ic3RhcnQiPyJTdGFydCI6IkVuZCI7dC5hdHRyKGBtYXJrZXItJHtlfWAsYHVybCgke259IyR7aX1fJHthfS0ke3N9JHtsfSlgKX0sImFkZEVkZ2VNYXJrZXIiKX0pO2Z1bmN0aW9uIGhTKHQsZSl7cGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmdCYmKHQuc3R5bGUud2lkdGg9ZS5sZW5ndGgqOSsicHgiLHQuc3R5bGUuaGVpZ2h0PSIxMnB4Iil9dmFyIHJGLFhhLGR2ZSxwdmUsbm50LGludCxmdmUsbXZlLGd2ZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7dVMoKTtQbCgpO3ByKCk7VnQoKTtocigpO2ZyKCk7dUwoKTskdigpO2h2ZSgpO3JGPXt9LFhhPXt9LGR2ZT1vKCh0LGUpPT57bGV0IHI9cGUoKSxuPXhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGk9ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP0xpKHQsZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6bixhZGRTdmdCYWNrZ3JvdW5kOiEwfSxyKTpncyhlLmxhYmVsLGUubGFiZWxTdHlsZSksYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIikscz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTtzLm5vZGUoKS5hcHBlbmRDaGlsZChpKTtsZXQgbD1pLmdldEJCb3goKTtpZihuKXtsZXQgaD1pLmNoaWxkcmVuWzBdLGY9VmUoaSk7bD1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLGwud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrLWwuaGVpZ2h0LzIrIikiKSxyRltlLmlkXT1hLGUud2lkdGg9bC53aWR0aCxlLmhlaWdodD1sLmhlaWdodDtsZXQgdTtpZihlLnN0YXJ0TGFiZWxMZWZ0KXtsZXQgaD1ncyhlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0TGVmdD1mLGhTKHUsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCBoPWdzKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1mLm5vZGUoKS5hcHBlbmRDaGlsZChoKSxkLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0UmlnaHQ9ZixoUyh1LGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7bGV0IGg9Z3MoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksZi5ub2RlKCkuYXBwZW5kQ2hpbGQoaCksWGFbZS5pZF18fChYYVtlLmlkXT17fSksWGFbZS5pZF0uZW5kTGVmdD1mLGhTKHUsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7bGV0IGg9Z3MoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLGYubm9kZSgpLmFwcGVuZENoaWxkKGgpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLmVuZFJpZ2h0PWYsaFModSxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBpfSwiaW5zZXJ0RWRnZUxhYmVsIik7byhoUywic2V0VGVybWluYWxXaWR0aCIpO3B2ZT1vKCh0LGUpPT57WS5kZWJ1ZygiTW92aW5nIGxhYmVsIGFiYzg4ICIsdC5pZCx0LmxhYmVsLHJGW3QuaWRdLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPXBlKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1GdShuKTtpZih0LmxhYmVsKXtsZXQgYT1yRlt0LmlkXSxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjTGFiZWxQb3NpdGlvbihyKTtZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgIit0LmxhYmVsKyIgZnJvbSAoIixzLCIsIixsLCIpIHRvICgiLHUueCwiLCIsdS55LCIpIGFiYzg4IiksZS51cGRhdGVkUGF0aCYmKHM9dS54LGw9dS55KX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2wraS8yfSlgKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5zdGFydExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5zdGFydExhYmVsUmlnaHQpe2xldCBhPVhhW3QuaWRdLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5lbmRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbFJpZ2h0KXtsZXQgYT1YYVt0LmlkXS5lbmRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX19LCJwb3NpdGlvbkVkZ2VMYWJlbCIpLG5udD1vKCh0LGUpPT57bGV0IHI9dC54LG49dC55LGk9TWF0aC5hYnMoZS54LXIpLGE9TWF0aC5hYnMoZS55LW4pLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gaT49c3x8YT49bH0sIm91dHNpZGVOb2RlIiksaW50PW8oKHQsZSxyKT0+e1kuZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OgogIG91dHNpZGVQb2ludDogJHtKU09OLnN0cmluZ2lmeShlKX0KICBpbnNpZGVQb2ludCA6ICR7SlNPTi5zdHJpbmdpZnkocil9CiAgbm9kZSAgICAgICAgOiB4OiR7dC54fSB5OiR7dC55fSB3OiR7dC53aWR0aH0gaDoke3QuaGVpZ2h0fWApO2xldCBuPXQueCxpPXQueSxhPU1hdGguYWJzKG4tci54KSxzPXQud2lkdGgvMixsPXIueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsaD1NYXRoLmFicyhlLnktci55KSxmPU1hdGguYWJzKGUueC1yLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKG4tZS54KSp1KXtsZXQgZD1yLnk8ZS55P2UueS11LWk6aS11LWUueTtsPWYqZC9oO2xldCBwPXt4OnIueDxlLng/ci54K2w6ci54LWYrbCx5OnIueTxlLnk/ci55K2gtZDpyLnktaCtkfTtyZXR1cm4gbD09PTAmJihwLng9ZS54LHAueT1lLnkpLGY9PT0wJiYocC54PWUueCksaD09PTAmJihwLnk9ZS55KSxZLmRlYnVnKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBZLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksZnZlPW8oKHQsZSk9PntZLmRlYnVnKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLHQsZSk7bGV0IHI9W10sbj10WzBdLGk9ITE7cmV0dXJuIHQuZm9yRWFjaChhPT57aWYoIW5udChlLGEpJiYhaSl7bGV0IHM9aW50KGUsbixhKSxsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSl8fHIucHVzaChzKSxpPSEwfWVsc2Ugbj1hLGl8fHIucHVzaChhKX0pLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKSxtdmU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD1yLnBvaW50cztZLmRlYnVnKCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPSIsciwiZT0iLGUpO2xldCB1PSExLGg9YS5ub2RlKGUudik7dmFyIGY9YS5ub2RlKGUudyk7Zj8uaW50ZXJzZWN0JiZoPy5pbnRlcnNlY3QmJihsPWwuc2xpY2UoMSxyLnBvaW50cy5sZW5ndGgtMSksbC51bnNoaWZ0KGguaW50ZXJzZWN0KGxbMF0pKSxsLnB1c2goZi5pbnRlcnNlY3QobFtsLmxlbmd0aC0xXSkpKSxyLnRvQ2x1c3RlciYmKFkuZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLG5bci50b0NsdXN0ZXJdKSxsPWZ2ZShyLnBvaW50cyxuW3IudG9DbHVzdGVyXS5ub2RlKSx1PSEwKSxyLmZyb21DbHVzdGVyJiYoWS5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixuW3IuZnJvbUNsdXN0ZXJdKSxsPWZ2ZShsLnJldmVyc2UoKSxuW3IuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSx1PSEwKTtsZXQgZD1sLmZpbHRlcihfPT4hTnVtYmVyLmlzTmFOKF8ueSkpLHA9UG87ci5jdXJ2ZSYmKGk9PT0iZ3JhcGgifHxpPT09ImZsb3djaGFydCIpJiYocD1yLmN1cnZlKTtsZXR7eDptLHk6Z309dXcocikseT1ucygpLngobSkueShnKS5jdXJ2ZShwKSx2O3N3aXRjaChyLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnY9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6dj0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjp2PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDp2PSIifXN3aXRjaChyLnBhdHRlcm4pe2Nhc2Uic29saWQiOnYrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6dis9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6dis9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31sZXQgeD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixyLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3YrKHIuY2xhc3Nlcz8iICIrci5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLHIuc3R5bGUpLGI9IiI7KHBlKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fHBlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihiPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGI9Yi5yZXBsYWNlKC9cKC9nLCJcXCgiKSxiPWIucmVwbGFjZSgvXCkvZywiXFwpIikpLHV2ZSh4LHIsYixzLGkpO2xldCB3PXt9O3JldHVybiB1JiYody51cGRhdGVkUGF0aD1sKSx3Lm9yaWdpbmFsUGF0aD1yLnBvaW50cyx3fSwiaW5zZXJ0RWRnZSIpfSk7dmFyIGFudCx5dmUsdnZlPU0oKCk9PnsidXNlIHN0cmljdCI7YW50PW8odD0+e2xldCBlPW5ldyBTZXQ7Zm9yKGxldCByIG9mIHQpc3dpdGNoKHIpe2Nhc2UieCI6ZS5hZGQoInJpZ2h0IiksZS5hZGQoImxlZnQiKTticmVhaztjYXNlInkiOmUuYWRkKCJ1cCIpLGUuYWRkKCJkb3duIik7YnJlYWs7ZGVmYXVsdDplLmFkZChyKTticmVha31yZXR1cm4gZX0sImV4cGFuZEFuZERlZHVwbGljYXRlRGlyZWN0aW9ucyIpLHl2ZT1vKCh0LGUscik9PntsZXQgbj1hbnQodCksaT0yLGE9ZS5oZWlnaHQrMipyLnBhZGRpbmcscz1hL2ksbD1lLndpZHRoKzIqcytyLnBhZGRpbmcsdT1yLnBhZGRpbmcvMjtyZXR1cm4gbi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6cyx5OjB9LHt4OmwvMix5OjIqdX0se3g6bC1zLHk6MH0se3g6bCx5OjB9LHt4OmwseTotYS8zfSx7eDpsKzIqdSx5Oi1hLzJ9LHt4OmwseTotMiphLzN9LHt4OmwseTotYX0se3g6bC1zLHk6LWF9LHt4OmwvMix5Oi1hLTIqdX0se3g6cyx5Oi1hfSx7eDowLHk6LWF9LHt4OjAseTotMiphLzN9LHt4Oi0yKnUseTotYS8yfSx7eDowLHk6LWEvM31dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpJiZuLmhhcygidXAiKT9be3g6cyx5OjB9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6cyx5Oi1hfSx7eDpsLXMseTotYX0se3g6bCx5OjB9XTpuLmhhcygicmlnaHQiKSYmbi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpsLHk6LXN9LHt4OmwseTotYStzfSx7eDowLHk6LWF9XTpuLmhhcygibGVmdCIpJiZuLmhhcygidXAiKSYmbi5oYXMoImRvd24iKT9be3g6bCx5OjB9LHt4OjAseTotc30se3g6MCx5Oi1hK3N9LHt4OmwseTotYX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpP1t7eDpzLHk6MH0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpsLXMseTotYSt1fSx7eDpzLHk6LWErdX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dOm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDpsLzIseTowfSx7eDowLHk6LXV9LHt4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4OjAseTotYSt1fSx7eDpsLzIseTotYX0se3g6bCx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fSx7eDpsLHk6LXV9XTpuLmhhcygicmlnaHQiKSYmbi5oYXMoInVwIik/W3t4OjAseTowfSx7eDpsLHk6LXN9LHt4OjAseTotYX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6bCx5OjB9LHt4OjAseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpP1t7eDpsLHk6MH0se3g6MCx5Oi1zfSx7eDpsLHk6LWF9XTpuLmhhcygibGVmdCIpJiZuLmhhcygiZG93biIpP1t7eDpsLHk6MH0se3g6MCx5OjB9LHt4OmwseTotYX1dOm4uaGFzKCJyaWdodCIpP1t7eDpzLHk6LXV9LHt4OnMseTotdX0se3g6bC1zLHk6LXV9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6bC1zLHk6LWErdX0se3g6cyx5Oi1hK3V9LHt4OnMseTotYSt1fV06bi5oYXMoImxlZnQiKT9be3g6cyx5OjB9LHt4OnMseTotdX0se3g6bC1zLHk6LXV9LHt4Omwtcyx5Oi1hK3V9LHt4OnMseTotYSt1fSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInVwIik/W3t4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4OjAseTotYSt1fSx7eDpsLzIseTotYX0se3g6bCx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fV06bi5oYXMoImRvd24iKT9be3g6bC8yLHk6MH0se3g6MCx5Oi11fSx7eDpzLHk6LXV9LHt4OnMseTotYSt1fSx7eDpsLXMseTotYSt1fSx7eDpsLXMseTotdX0se3g6bCx5Oi11fV06W3t4OjAseTowfV19LCJnZXRBcnJvd1BvaW50cyIpfSk7ZnVuY3Rpb24gc250KHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfXZhciB4dmUsYnZlPU0oKCk9PnsidXNlIHN0cmljdCI7byhzbnQsImludGVyc2VjdE5vZGUiKTt4dmU9c250fSk7ZnVuY3Rpb24gb250KHQsZSxyLG4pe3ZhciBpPXQueCxhPXQueSxzPWktbi54LGw9YS1uLnksdT1NYXRoLnNxcnQoZSplKmwqbCtyKnIqcypzKSxoPU1hdGguYWJzKGUqcipzL3UpO24ueDxpJiYoaD0taCk7dmFyIGY9TWF0aC5hYnMoZSpyKmwvdSk7cmV0dXJuIG4ueTxhJiYoZj0tZikse3g6aStoLHk6YStmfX12YXIgZlMsbkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG9udCwiaW50ZXJzZWN0RWxsaXBzZSIpO2ZTPW9udH0pO2Z1bmN0aW9uIGxudCh0LGUscil7cmV0dXJuIGZTKHQsZSxlLHIpfXZhciB3dmUsVHZlPU0oKCk9PnsidXNlIHN0cmljdCI7bkYoKTtvKGxudCwiaW50ZXJzZWN0Q2lyY2xlIik7d3ZlPWxudH0pO2Z1bmN0aW9uIGNudCh0LGUscixuKXt2YXIgaSxhLHMsbCx1LGgsZixkLHAsbSxnLHksdix4LGI7aWYoaT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxwPWkqci54K3Mqci55K3UsbT1pKm4ueCtzKm4ueSt1LCEocCE9PTAmJm0hPT0wJiZrdmUocCxtKSkmJihhPW4ueS1yLnksbD1yLngtbi54LGg9bi54KnIueS1yLngqbi55LGY9YSp0LngrbCp0LnkraCxkPWEqZS54K2wqZS55K2gsIShmIT09MCYmZCE9PTAmJmt2ZShmLGQpKSYmKGc9aSpsLWEqcyxnIT09MCkpKXJldHVybiB5PU1hdGguYWJzKGcvMiksdj1zKmgtbCp1LHg9djwwPyh2LXkpL2c6KHYreSkvZyx2PWEqdS1pKmgsYj12PDA/KHYteSkvZzoodit5KS9nLHt4LHk6Yn19ZnVuY3Rpb24ga3ZlKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBFdmUsU3ZlPU0oKCk9PnsidXNlIHN0cmljdCI7byhjbnQsImludGVyc2VjdExpbmUiKTtvKGt2ZSwic2FtZVNpZ24iKTtFdmU9Y250fSk7ZnVuY3Rpb24gdW50KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT1bXSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTt0eXBlb2YgZS5mb3JFYWNoPT0iZnVuY3Rpb24iP2UuZm9yRWFjaChmdW5jdGlvbihnKXtzPU1hdGgubWluKHMsZy54KSxsPU1hdGgubWluKGwsZy55KX0pOihzPU1hdGgubWluKHMsZS54KSxsPU1hdGgubWluKGwsZS55KSk7Zm9yKHZhciB1PW4tdC53aWR0aC8yLXMsaD1pLXQuaGVpZ2h0LzItbCxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBkPWVbZl0scD1lW2Y8ZS5sZW5ndGgtMT9mKzE6MF0sbT1FdmUodCxyLHt4OnUrZC54LHk6aCtkLnl9LHt4OnUrcC54LHk6aCtwLnl9KTttJiZhLnB1c2gobSl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoZnVuY3Rpb24oZyx5KXt2YXIgdj1nLngtci54LHg9Zy55LXIueSxiPU1hdGguc3FydCh2KnYreCp4KSx3PXkueC1yLngsXz15Lnktci55LFQ9TWF0aC5zcXJ0KHcqdytfKl8pO3JldHVybiBiPFQ/LTE6Yj09PVQ/MDoxfSksYVswXSk6dH12YXIgQ3ZlLEF2ZT1NKCgpPT57InVzZSBzdHJpY3QiO1N2ZSgpO0N2ZT11bnQ7byh1bnQsImludGVyc2VjdFBvbHlnb24iKX0pO3ZhciBobnQsX3ZlLEx2ZT1NKCgpPT57InVzZSBzdHJpY3QiO2hudD1vKCh0LGUpPT57dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzIsdSxoO3JldHVybiBNYXRoLmFicyhhKSpzPk1hdGguYWJzKGkpKmw/KGE8MCYmKGw9LWwpLHU9YT09PTA/MDpsKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1pPT09MD8wOnMqYS9pKSx7eDpyK3UseTpuK2h9fSwiaW50ZXJzZWN0UmVjdCIpLF92ZT1obnR9KTt2YXIgSW4saUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtidmUoKTtUdmUoKTtuRigpO0F2ZSgpO0x2ZSgpO0luPXtub2RlOnh2ZSxjaXJjbGU6d3ZlLGVsbGlwc2U6ZlMscG9seWdvbjpDdmUscmVjdDpfdmV9fSk7ZnVuY3Rpb24gZWModCxlLHIsbil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS54KyIsIitpLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrci8yKyIpIil9dmFyIFJpLGpuLGFGPU0oKCk9PnsidXNlIHN0cmljdCI7dVMoKTtQbCgpO1Z0KCk7cHIoKTtmcigpO2hyKCk7Umk9byhhc3luYyh0LGUscixuKT0+e2xldCBpPXBlKCksYSxzPWUudXNlSHRtbExhYmVsc3x8eHIoaS5mbG93Y2hhcnQuaHRtbExhYmVscyk7cj9hPXI6YT0ibm9kZSBkZWZhdWx0IjtsZXQgbD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsZS5sYWJlbFN0eWxlKSxoO2UubGFiZWxUZXh0PT09dm9pZCAwP2g9IiI6aD10eXBlb2YgZS5sYWJlbFRleHQ9PSJzdHJpbmciP2UubGFiZWxUZXh0OmUubGFiZWxUZXh0WzBdO2xldCBmPXUubm9kZSgpLGQ7ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP2Q9TGkodSxrcihNYShoKSxpKSx7dXNlSHRtbExhYmVsczpzLHdpZHRoOmUud2lkdGh8fGkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCJ9LGkpOmQ9Zi5hcHBlbmRDaGlsZChncyhrcihNYShoKSxpKSxlLmxhYmVsU3R5bGUsITEsbikpO2xldCBwPWQuZ2V0QkJveCgpLG09ZS5wYWRkaW5nLzI7aWYoeHIoaS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBnPWQuY2hpbGRyZW5bMF0seT1WZShkKSx2PWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKHYpe2xldCB4PWgucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4udl0ubWFwKGI9Pm5ldyBQcm9taXNlKHc9PntmdW5jdGlvbiBfKCl7aWYoYi5zdHlsZS5kaXNwbGF5PSJmbGV4IixiLnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIseCl7bGV0IFQ9aS5mb250U2l6ZT9pLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLEw9cGFyc2VJbnQoVCwxMCkqNSsicHgiO2Iuc3R5bGUubWluV2lkdGg9TCxiLnN0eWxlLm1heFdpZHRoPUx9ZWxzZSBiLnN0eWxlLndpZHRoPSIxMDAlIjt3KGIpfW8oXywic2V0dXBJbWFnZSIpLHNldFRpbWVvdXQoKCk9PntiLmNvbXBsZXRlJiZfKCl9KSxiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixfKSxiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLF8pfSkpKX1wPWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseS5hdHRyKCJ3aWR0aCIscC53aWR0aCkseS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0KX1yZXR1cm4gcz91LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpOnUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLXAuaGVpZ2h0LzIrIikiKSxlLmNlbnRlckxhYmVsJiZ1LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLHUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOmwsYmJveDpwLGhhbGZQYWRkaW5nOm0sbGFiZWw6dX19LCJsYWJlbEhlbHBlciIpLGpuPW8oKHQsZSk9PntsZXQgcj1lLm5vZGUoKS5nZXRCQm94KCk7dC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0fSwidXBkYXRlTm9kZUJvdW5kcyIpO28oZWMsImluc2VydFBvbHlnb25TaGFwZSIpfSk7dmFyIGZudCxEdmUsTnZlPU0oKCk9PnsidXNlIHN0cmljdCI7YUYoKTt1dCgpO1Z0KCk7aUYoKTtmbnQ9byhhc3luYyh0LGUpPT57ZS51c2VIdG1sTGFiZWxzfHxwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwoZS5jZW50ZXJMYWJlbD0hMCk7bGV0e3NoYXBlU3ZnOm4sYmJveDppLGhhbGZQYWRkaW5nOmF9PWF3YWl0IFJpKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCk7WS5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO2xldCBzPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLGpuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIEluLnJlY3QoZSxsKX0sbn0sIm5vdGUiKSxEdmU9Zm50fSk7ZnVuY3Rpb24gc0YodCxlLHIsbil7bGV0IGk9W10sYT1vKGw9PntpLnB1c2gobCwwKX0sImFkZEJvcmRlciIpLHM9byhsPT57aS5wdXNoKDAsbCl9LCJza2lwQm9yZGVyIik7ZS5pbmNsdWRlcygidCIpPyhZLmRlYnVnKCJhZGQgdG9wIGJvcmRlciIpLGEocikpOnMociksZS5pbmNsdWRlcygiciIpPyhZLmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJiIik/KFkuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJsIik/KFkuZGVidWcoImFkZCBsZWZ0IGJvcmRlciIpLGEobikpOnMobiksdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixpLmpvaW4oIiAiKSl9dmFyIFJ2ZSxrbyxNdmUsZG50LHBudCxtbnQsZ250LHludCx2bnQseG50LGJudCx3bnQsVG50LGtudCxFbnQsU250LENudCxBbnQsX250LExudCxEbnQsTm50LEl2ZSxSbnQsTW50LE92ZSxkUyxvRixQdmUsQnZlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtWdCgpO2ZyKCk7dXQoKTt2dmUoKTt1UygpO2lGKCk7TnZlKCk7YUYoKTtSdmU9byh0PT50PyIgIit0OiIiLCJmb3JtYXRDbGFzcyIpLGtvPW8oKHQsZSk9PmAke2V8fCJub2RlIGRlZmF1bHQifSR7UnZlKHQuY2xhc3Nlcyl9ICR7UnZlKHQuY2xhc3MpfWAsImdldENsYXNzZXNGcm9tTm9kZSIpLE12ZT1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1pK2EsbD1be3g6cy8yLHk6MH0se3g6cyx5Oi1zLzJ9LHt4OnMvMix5Oi1zfSx7eDowLHk6LXMvMn1dO1kuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2xldCB1PWVjKHIscyxzLGwpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGgpe3JldHVybiBZLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxJbi5wb2x5Z29uKGUsbCxoKX0scn0sInF1ZXN0aW9uIiksZG50PW8oKHQsZSk9PntsZXQgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG49MjgsaT1be3g6MCx5Om4vMn0se3g6bi8yLHk6MH0se3g6MCx5Oi1uLzJ9LHt4Oi1uLzIseTowfV07cmV0dXJuIHIuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy54KyIsIitzLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGUud2lkdGg9MjgsZS5oZWlnaHQ9MjgsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIEluLmNpcmNsZShlLDE0LHMpfSxyfSwiY2hvaWNlIikscG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT00LGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9YS9pLGw9bi53aWR0aCsyKnMrZS5wYWRkaW5nLHU9W3t4OnMseTowfSx7eDpsLXMseTowfSx7eDpsLHk6LWEvMn0se3g6bC1zLHk6LWF9LHt4OnMseTotYX0se3g6MCx5Oi1hLzJ9XSxoPWVjKHIsbCxhLHUpO3JldHVybiBoLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5wb2x5Z29uKGUsdSxmKX0scn0sImhleGFnb24iKSxtbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBSaSh0LGUsdm9pZCAwLCEwKSxpPTIsYT1uLmhlaWdodCsyKmUucGFkZGluZyxzPWEvaSxsPW4ud2lkdGgrMipzK2UucGFkZGluZyx1PXl2ZShlLmRpcmVjdGlvbnMsbixlKSxoPWVjKHIsbCxhLHUpO3JldHVybiBoLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5wb2x5Z29uKGUsdSxmKX0scn0sImJsb2NrX2Fycm93IiksZ250PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotYS8yLHk6MH0se3g6aSx5OjB9LHt4OmkseTotYX0se3g6LWEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO3JldHVybiBlYyhyLGksYSxzKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksZS53aWR0aD1pK2EsZS5oZWlnaHQ9YSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJyZWN0X2xlZnRfaW52X2Fycm93IikseW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUpLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKmEvNix5OjB9LHt4OmktYS82LHk6MH0se3g6aSsyKmEvNix5Oi1hfSx7eDphLzYseTotYX1dLGw9ZWMocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwibGVhbl9yaWdodCIpLHZudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MiphLzYseTowfSx7eDppK2EvNix5OjB9LHt4OmktMiphLzYseTotYX0se3g6LWEvNix5Oi1hfV0sbD1lYyhyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksam4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJsZWFuX2xlZnQiKSx4bnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBSaSh0LGUsa28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKmEvNix5OjB9LHt4OmkrMiphLzYseTowfSx7eDppLWEvNix5Oi1hfSx7eDphLzYseTotYX1dLGw9ZWMocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwidHJhcGV6b2lkIiksYm50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDphLzYseTowfSx7eDppLWEvNix5OjB9LHt4OmkrMiphLzYseTotYX0se3g6LTIqYS82LHk6LWF9XSxsPWVjKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sImludl90cmFwZXpvaWQiKSx3bnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBSaSh0LGUsa28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDppK2EvMix5OjB9LHt4OmkseTotYS8yfSx7eDppK2EvMix5Oi1hfSx7eDowLHk6LWF9XSxsPWVjKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInJlY3RfcmlnaHRfaW52X2Fycm93IiksVG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPWkvMixzPWEvKDIuNStpLzUwKSxsPW4uaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrYSsiLCIrcysiIDAsMCwwICIraSsiIDAgYSAiK2ErIiwiK3MrIiAwLDAsMCAiKy1pKyIgMCBsIDAsIitsKyIgYSAiK2ErIiwiK3MrIiAwLDAsMCAiK2krIiAwIGwgMCwiKy1sLGg9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImQiLHUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1pLzIrIiwiKy0obC8yK3MpKyIpIik7cmV0dXJuIGpuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7bGV0IGQ9SW4ucmVjdChlLGYpLHA9ZC54LWUueDtpZihhIT0wJiYoTWF0aC5hYnMocCk8ZS53aWR0aC8yfHxNYXRoLmFicyhwKT09ZS53aWR0aC8yJiZNYXRoLmFicyhkLnktZS55KT5lLmhlaWdodC8yLXMpKXtsZXQgbT1zKnMqKDEtcCpwLyhhKmEpKTttIT0wJiYobT1NYXRoLnNxcnQobSkpLG09cy1tLGYueS1lLnk+MCYmKG09LW0pLGQueSs9bX1yZXR1cm4gZH0scn0sImN5bGluZGVyIiksa250PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBSaSh0LGUsIm5vZGUgIitlLmNsYXNzZXMrIiAiK2UuY2xhc3MsITApLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWUucG9zaXRpb25lZD9lLndpZHRoOm4ud2lkdGgrZS5wYWRkaW5nLGw9ZS5wb3NpdGlvbmVkP2UuaGVpZ2h0Om4uaGVpZ2h0K2UucGFkZGluZyx1PWUucG9zaXRpb25lZD8tcy8yOi1uLndpZHRoLzItaSxoPWUucG9zaXRpb25lZD8tbC8yOi1uLmhlaWdodC8yLWk7aWYoYS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGUucHJvcHMpe2xldCBmPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKHNGKGEsZS5wcm9wcy5ib3JkZXJzLHMsbCksZi5kZWxldGUoImJvcmRlcnMiKSksZi5mb3JFYWNoKGQ9PntZLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2R9YCl9KX1yZXR1cm4gam4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gSW4ucmVjdChlLGYpfSxyfSwicmVjdCIpLEVudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgUmkodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxhPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscz1lLnBvc2l0aW9uZWQ/ZS53aWR0aDpuLndpZHRoK2UucGFkZGluZyxsPWUucG9zaXRpb25lZD9lLmhlaWdodDpuLmhlaWdodCtlLnBhZGRpbmcsdT1lLnBvc2l0aW9uZWQ/LXMvMjotbi53aWR0aC8yLWksaD1lLnBvc2l0aW9uZWQ/LWwvMjotbi5oZWlnaHQvMi1pO2lmKGEuYXR0cigiY2xhc3MiLCJiYXNpYyBjbHVzdGVyIGNvbXBvc2l0ZSBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4Iix1KS5hdHRyKCJ5IixoKS5hdHRyKCJ3aWR0aCIscykuYXR0cigiaGVpZ2h0IixsKSxlLnByb3BzKXtsZXQgZj1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihzRihhLGUucHJvcHMuYm9yZGVycyxzLGwpLGYuZGVsZXRlKCJib3JkZXJzIikpLGYuZm9yRWFjaChkPT57WS53YXJuKGBVbmtub3duIG5vZGUgcHJvcGVydHkgJHtkfWApfSl9cmV0dXJuIGpuKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnJlY3QoZSxmKX0scn0sImNvbXBvc2l0ZSIpLFNudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cn09YXdhaXQgUmkodCxlLCJsYWJlbCIsITApO1kudHJhY2UoIkNsYXNzZXMgPSAiLGUuY2xhc3MpO2xldCBuPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wLGE9MDtpZihuLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLHIuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxlLnByb3BzKXtsZXQgcz1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihzRihuLGUucHJvcHMuYm9yZGVycyxpLGEpLHMuZGVsZXRlKCJib3JkZXJzIikpLHMuZm9yRWFjaChsPT57WS53YXJuKGBVbmtub3duIG5vZGUgcHJvcGVydHkgJHtsfWApfSl9cmV0dXJuIGpuKGUsbiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIEluLnJlY3QoZSxzKX0scn0sImxhYmVsUmVjdCIpO28oc0YsImFwcGx5Tm9kZVByb3BlcnR5Qm9yZGVycyIpO0NudD1vKCh0LGUpPT57bGV0IHI7ZS5jbGFzc2VzP3I9Im5vZGUgIitlLmNsYXNzZXM6cj0ibm9kZSBkZWZhdWx0IjtsZXQgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixyKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGE9bi5pbnNlcnQoImxpbmUiKSxzPW4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGw9ZS5sYWJlbFRleHQuZmxhdD9lLmxhYmVsVGV4dC5mbGF0KCk6ZS5sYWJlbFRleHQsdT0iIjt0eXBlb2YgbD09Im9iamVjdCI/dT1sWzBdOnU9bCxZLmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLHUsbCx0eXBlb2YgbD09Im9iamVjdCIpO2xldCBoPXMubm9kZSgpLmFwcGVuZENoaWxkKGdzKHUsZS5sYWJlbFN0eWxlLCEwLCEwKSksZj17d2lkdGg6MCxoZWlnaHQ6MH07aWYoeHIocGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCB5PWguY2hpbGRyZW5bMF0sdj1WZShoKTtmPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdi5hdHRyKCJ3aWR0aCIsZi53aWR0aCksdi5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KX1ZLmluZm8oIlRleHQgMiIsbCk7bGV0IGQ9bC5zbGljZSgxLGwubGVuZ3RoKSxwPWguZ2V0QkJveCgpLG09cy5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoZC5qb2luP2Quam9pbigiPGJyLz4iKTpkLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHhyKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgeT1tLmNoaWxkcmVuWzBdLHY9VmUobSk7Zj15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGYud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixmLmhlaWdodCl9bGV0IGc9ZS5wYWRkaW5nLzI7cmV0dXJuIFZlKG0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZi53aWR0aD5wLndpZHRoPzA6KHAud2lkdGgtZi53aWR0aCkvMikrIiwgIisocC5oZWlnaHQrZys1KSsiKSIpLFZlKGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZi53aWR0aDxwLndpZHRoPzA6LShwLndpZHRoLWYud2lkdGgpLzIpKyIsIDApIiksZj1zLm5vZGUoKS5nZXRCQm94KCkscy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrKC1mLmhlaWdodC8yLWcrMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi53aWR0aC8yLWcpLmF0dHIoInkiLC1mLmhlaWdodC8yLWcpLmF0dHIoIndpZHRoIixmLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixmLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLndpZHRoLzItZykuYXR0cigieDIiLGYud2lkdGgvMitnKS5hdHRyKCJ5MSIsLWYuaGVpZ2h0LzItZytwLmhlaWdodCtnKS5hdHRyKCJ5MiIsLWYuaGVpZ2h0LzItZytwLmhlaWdodCtnKSxqbihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBJbi5yZWN0KGUseSl9LG59LCJyZWN0V2l0aFRpdGxlIiksQW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLmhlaWdodCtlLnBhZGRpbmcsYT1uLndpZHRoK2kvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsaS8yKS5hdHRyKCJyeSIsaS8yKS5hdHRyKCJ4IiwtYS8yKS5hdHRyKCJ5IiwtaS8yKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixpKTtyZXR1cm4gam4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxyfSwic3RhZGl1bSIpLF9udD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksYT1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGEuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2kpLmF0dHIoIndpZHRoIixuLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcpLFkuaW5mbygiQ2lyY2xlIG1haW4iKSxqbihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBZLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsbi53aWR0aC8yK2kscyksSW4uY2lyY2xlKGUsbi53aWR0aC8yK2kscyl9LHJ9LCJjaXJjbGUiKSxMbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGE9NSxzPXIuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksbD1zLmluc2VydCgiY2lyY2xlIiksdT1zLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIHMuYXR0cigiY2xhc3MiLGUuY2xhc3MpLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2krYSkuYXR0cigid2lkdGgiLG4ud2lkdGgrZS5wYWRkaW5nK2EqMikuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcrYSoyKSx1LmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nKSxZLmluZm8oIkRvdWJsZUNpcmNsZSBtYWluIiksam4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbihoKXtyZXR1cm4gWS5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixlLG4ud2lkdGgvMitpK2EsaCksSW4uY2lyY2xlKGUsbi53aWR0aC8yK2krYSxoKX0scn0sImRvdWJsZWNpcmNsZSIpLERudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmkseTowfSx7eDppLHk6LWF9LHt4OjAseTotYX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6aSs4LHk6MH0se3g6aSs4LHk6LWF9LHt4Oi04LHk6LWF9LHt4Oi04LHk6MH1dLGw9ZWMocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwic3Vicm91dGluZSIpLE5udD1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxuPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbi5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxqbihlLG4pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGkpe3JldHVybiBJbi5jaXJjbGUoZSw3LGkpfSxyfSwic3RhcnQiKSxJdmU9bygodCxlLHIpPT57bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7cj09PSJMUiImJihpPTEwLGE9NzApO2xldCBzPW4uYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqaS8yKS5hdHRyKCJ5IiwtMSphLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIGpuKGUscyksZS5oZWlnaHQ9ZS5oZWlnaHQrZS5wYWRkaW5nLzIsZS53aWR0aD1lLndpZHRoK2UucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBJbi5yZWN0KGUsbCl9LG59LCJmb3JrSm9pbiIpLFJudD1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxuPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxpPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxuLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxqbihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBJbi5jaXJjbGUoZSw3LGEpfSxyfSwiZW5kIiksTW50PW8oKHQsZSk9PntsZXQgcj1lLnBhZGRpbmcvMixuPTQsaT04LGE7ZS5jbGFzc2VzP2E9Im5vZGUgIitlLmNsYXNzZXM6YT0ibm9kZSBkZWZhdWx0IjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbD1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHU9cy5pbnNlcnQoImxpbmUiKSxoPXMuaW5zZXJ0KCJsaW5lIiksZj0wLGQ9bixwPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLG09MCxnPWUuY2xhc3NEYXRhLmFubm90YXRpb25zPy5bMF0seT1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iXHhBQiIrZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIlx4QkIiOiIiLHY9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoeSxlLmxhYmVsU3R5bGUsITAsITApKSx4PXYuZ2V0QkJveCgpO2lmKHhyKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgUz12LmNoaWxkcmVuWzBdLEE9VmUodik7eD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLHgud2lkdGgpLEEuYXR0cigiaGVpZ2h0Iix4LmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihkKz14LmhlaWdodCtuLGYrPXgud2lkdGgpO2xldCBiPWUuY2xhc3NEYXRhLmxhYmVsO2UuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmUuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/Yis9IiZsdDsiK2UuY2xhc3NEYXRhLnR5cGUrIiZndDsiOmIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7bGV0IHc9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoYixlLmxhYmVsU3R5bGUsITAsITApKTtWZSh3KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgXz13LmdldEJCb3goKTtpZih4cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IFM9dy5jaGlsZHJlblswXSxBPVZlKHcpO189Uy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBLmF0dHIoIndpZHRoIixfLndpZHRoKSxBLmF0dHIoImhlaWdodCIsXy5oZWlnaHQpfWQrPV8uaGVpZ2h0K24sXy53aWR0aD5mJiYoZj1fLndpZHRoKTtsZXQgVD1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goUz0+e2xldCBBPVMuZ2V0RGlzcGxheURldGFpbHMoKSxJPUEuZGlzcGxheVRleHQ7cGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKEk9SS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7bGV0IEQ9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoSSxBLmNzc1N0eWxlP0EuY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksaz1ELmdldEJCb3goKTtpZih4cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IFI9RC5jaGlsZHJlblswXSxDPVZlKEQpO2s9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxDLmF0dHIoIndpZHRoIixrLndpZHRoKSxDLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfWsud2lkdGg+ZiYmKGY9ay53aWR0aCksZCs9ay5oZWlnaHQrbixULnB1c2goRCl9KSxkKz1pO2xldCBFPVtdO2lmKGUuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChTPT57bGV0IEE9Uy5nZXREaXNwbGF5RGV0YWlscygpLEk9QS5kaXNwbGF5VGV4dDtwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoST1JLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtsZXQgRD1wLm5vZGUoKS5hcHBlbmRDaGlsZChncyhJLEEuY3NzU3R5bGU/QS5jc3NTdHlsZTplLmxhYmVsU3R5bGUsITAsITApKSxrPUQuZ2V0QkJveCgpO2lmKHhyKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgUj1ELmNoaWxkcmVuWzBdLEM9VmUoRCk7az1SLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEMuYXR0cigid2lkdGgiLGsud2lkdGgpLEMuYXR0cigiaGVpZ2h0IixrLmhlaWdodCl9ay53aWR0aD5mJiYoZj1rLndpZHRoKSxkKz1rLmhlaWdodCtuLEUucHVzaChEKX0pLGQrPWksZyl7bGV0IFM9KGYteC53aWR0aCkvMjtWZSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitTKSsiLCAiKy0xKmQvMisiKSIpLG09eC5oZWlnaHQrbn1sZXQgTD0oZi1fLndpZHRoKS8yO3JldHVybiBWZSh3KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitMKSsiLCAiKygtMSpkLzIrbSkrIikiKSxtKz1fLmhlaWdodCtuLHUuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksVC5mb3JFYWNoKFM9PntWZShTKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbStpLzIpKyIpIik7bGV0IEE9Uz8uZ2V0QkJveCgpO20rPShBPy5oZWlnaHQ/PzApK259KSxtKz1pLGguYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksRS5mb3JFYWNoKFM9PntWZShTKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbSkrIikiKTtsZXQgQT1TPy5nZXRCQm94KCk7bSs9KEE/LmhlaWdodD8/MCkrbn0pLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi8yLXIpLmF0dHIoInkiLC0oZC8yKS1yKS5hdHRyKCJ3aWR0aCIsZitlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZCtlLnBhZGRpbmcpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIEluLnJlY3QoZSxTKX0sc30sImNsYXNzX2JveCIpLE92ZT17cmhvbWJ1czpNdmUsY29tcG9zaXRlOkVudCxxdWVzdGlvbjpNdmUscmVjdDprbnQsbGFiZWxSZWN0OlNudCxyZWN0V2l0aFRpdGxlOkNudCxjaG9pY2U6ZG50LGNpcmNsZTpfbnQsZG91YmxlY2lyY2xlOkxudCxzdGFkaXVtOkFudCxoZXhhZ29uOnBudCxibG9ja19hcnJvdzptbnQscmVjdF9sZWZ0X2ludl9hcnJvdzpnbnQsbGVhbl9yaWdodDp5bnQsbGVhbl9sZWZ0OnZudCx0cmFwZXpvaWQ6eG50LGludl90cmFwZXpvaWQ6Ym50LHJlY3RfcmlnaHRfaW52X2Fycm93OndudCxjeWxpbmRlcjpUbnQsc3RhcnQ6Tm50LGVuZDpSbnQsbm90ZTpEdmUsc3Vicm91dGluZTpEbnQsZm9yazpJdmUsam9pbjpJdmUsY2xhc3NfYm94Ok1udH0sZFM9e30sb0Y9byhhc3luYyh0LGUscik9PntsZXQgbixpO2lmKGUubGluayl7bGV0IGE7cGUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2E9Il90b3AiOmUubGlua1RhcmdldCYmKGE9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsYSksaT1hd2FpdCBPdmVbZS5zaGFwZV0obixlLHIpfWVsc2UgaT1hd2FpdCBPdmVbZS5zaGFwZV0odCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxkU1tlLmlkXT1uLGUuaGF2ZUNhbGxiYWNrJiZkU1tlLmlkXS5hdHRyKCJjbGFzcyIsZFNbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59LCJpbnNlcnROb2RlIiksUHZlPW8odD0+e2xldCBlPWRTW3QuaWRdO1kudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO2Z1bmN0aW9uIEZ2ZSh0LGUscj0hMSl7bGV0IG49dCxpPSJkZWZhdWx0Ijsobj8uY2xhc3Nlcz8ubGVuZ3RofHwwKT4wJiYoaT0obj8uY2xhc3Nlcz8/W10pLmpvaW4oIiAiKSksaT1pKyIgZmxvd2NoYXJ0LWxhYmVsIjtsZXQgYT0wLHM9IiIsbDtzd2l0Y2gobi50eXBlKXtjYXNlInJvdW5kIjphPTUscz0icmVjdCI7YnJlYWs7Y2FzZSJjb21wb3NpdGUiOmE9MCxzPSJjb21wb3NpdGUiLGw9MDticmVhaztjYXNlInNxdWFyZSI6cz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpzPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpzPSJoZXhhZ29uIjticmVhaztjYXNlImJsb2NrX2Fycm93IjpzPSJibG9ja19hcnJvdyI7YnJlYWs7Y2FzZSJvZGQiOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6cz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnM9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnM9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpzPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlInJlY3RfbGVmdF9pbnZfYXJyb3ciOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpzPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6cz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpzPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOnM9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnM9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpzPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6cz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0OnM9InJlY3QifWxldCB1PXQ5KG4/LnN0eWxlcz8/W10pLGg9bi5sYWJlbCxmPW4uc2l6ZT8/e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07cmV0dXJue2xhYmVsU3R5bGU6dS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Omgscng6YSxyeTphLGNsYXNzOmksc3R5bGU6dS5zdHlsZSxpZDpuLmlkLGRpcmVjdGlvbnM6bi5kaXJlY3Rpb25zLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHg6Zi54LHk6Zi55LHBvc2l0aW9uZWQ6cixpbnRlcnNlY3Q6dm9pZCAwLHR5cGU6bi50eXBlLHBhZGRpbmc6bD8/Q3IoKT8uYmxvY2s/LnBhZGRpbmc/PzB9fWFzeW5jIGZ1bmN0aW9uIEludCh0LGUscil7bGV0IG49RnZlKGUsciwhMSk7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bGV0IGk9Q3IoKSxhPWF3YWl0IG9GKHQsbix7Y29uZmlnOml9KSxzPWEubm9kZSgpLmdldEJCb3goKSxsPXIuZ2V0QmxvY2sobi5pZCk7bC5zaXplPXt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCx4OjAseTowLG5vZGU6YX0sci5zZXRCbG9jayhsKSxhLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIE9udCh0LGUscil7bGV0IG49RnZlKGUsciwhMCk7aWYoci5nZXRCbG9jayhuLmlkKS50eXBlIT09InNwYWNlIil7bGV0IGE9Q3IoKTthd2FpdCBvRih0LG4se2NvbmZpZzphfSksZS5pbnRlcnNlY3Q9bj8uaW50ZXJzZWN0LFB2ZShuKX19YXN5bmMgZnVuY3Rpb24gbEYodCxlLHIsbil7Zm9yKGxldCBpIG9mIGUpYXdhaXQgbih0LGksciksaS5jaGlsZHJlbiYmYXdhaXQgbEYodCxpLmNoaWxkcmVuLHIsbil9YXN5bmMgZnVuY3Rpb24genZlKHQsZSxyKXthd2FpdCBsRih0LGUscixJbnQpfWFzeW5jIGZ1bmN0aW9uIEd2ZSh0LGUscil7YXdhaXQgbEYodCxlLHIsT250KX1hc3luYyBmdW5jdGlvbiAkdmUodCxlLHIsbixpKXtsZXQgYT1uZXcgSXIoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTthLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IobGV0IHMgb2YgcilzLnNpemUmJmEuc2V0Tm9kZShzLmlkLHt3aWR0aDpzLnNpemUud2lkdGgsaGVpZ2h0OnMuc2l6ZS5oZWlnaHQsaW50ZXJzZWN0OnMuaW50ZXJzZWN0fSk7Zm9yKGxldCBzIG9mIGUpaWYocy5zdGFydCYmcy5lbmQpe2xldCBsPW4uZ2V0QmxvY2socy5zdGFydCksdT1uLmdldEJsb2NrKHMuZW5kKTtpZihsPy5zaXplJiZ1Py5zaXplKXtsZXQgaD1sLnNpemUsZj11LnNpemUsZD1be3g6aC54LHk6aC55fSx7eDpoLngrKGYueC1oLngpLzIseTpoLnkrKGYueS1oLnkpLzJ9LHt4OmYueCx5OmYueX1dO212ZSh0LHt2OnMuc3RhcnQsdzpzLmVuZCxuYW1lOnMuaWR9LHsuLi5zLGFycm93VHlwZUVuZDpzLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpzLmFycm93VHlwZVN0YXJ0LHBvaW50czpkLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSx2b2lkIDAsImJsb2NrIixhLGkpLHMubGFiZWwmJihhd2FpdCBkdmUodCx7Li4ucyxsYWJlbDpzLmxhYmVsLGxhYmVsU3R5bGU6InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IixhcnJvd1R5cGVFbmQ6cy5hcnJvd1R5cGVFbmQsYXJyb3dUeXBlU3RhcnQ6cy5hcnJvd1R5cGVTdGFydCxwb2ludHM6ZCxjbGFzc2VzOiJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxIn0pLHB2ZSh7Li4ucyx4OmRbMV0ueCx5OmRbMV0ueX0se29yaWdpbmFsUGF0aDpkfSkpfX19dmFyIFZ2ZT1NKCgpPT57InVzZSBzdHJpY3QiO0dzKCk7WmEoKTtndmUoKTtCdmUoKTtocigpO28oRnZlLCJnZXROb2RlRnJvbUJsb2NrIik7byhJbnQsImNhbGN1bGF0ZUJsb2NrU2l6ZSIpO28oT250LCJpbnNlcnRCbG9ja1Bvc2l0aW9uZWQiKTtvKGxGLCJwZXJmb3JtT3BlcmF0aW9ucyIpO28oenZlLCJjYWxjdWxhdGVCbG9ja1NpemVzIik7byhHdmUsImluc2VydEJsb2NrcyIpO28oJHZlLCJpbnNlcnRFZGdlcyIpfSk7dmFyIFBudCxCbnQsVXZlLEh2ZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7WmEoKTtudmUoKTt1dCgpO2FpKCk7b3ZlKCk7VnZlKCk7UG50PW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksQm50PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxibG9jazphfT1DcigpLHM9bi5kYixsO2k9PT0ic2FuZGJveCImJihsPVZlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/VmUobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpLGg9aT09PSJzYW5kYm94Ij91LnNlbGVjdChgW2lkPSIke2V9Il1gKTpWZShgW2lkPSIke2V9Il1gKTtydmUoaCxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxuLnR5cGUsZSk7bGV0IGQ9cy5nZXRCbG9ja3MoKSxwPXMuZ2V0QmxvY2tzRmxhdCgpLG09cy5nZXRFZGdlcygpLGc9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJsb2NrIik7YXdhaXQgenZlKGcsZCxzKTtsZXQgeT1zdmUocyk7aWYoYXdhaXQgR3ZlKGcsZCxzKSxhd2FpdCAkdmUoZyxtLHAscyxlKSx5KXtsZXQgdj15LHg9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKC4xMjUqKHYud2lkdGgvdi5oZWlnaHQpKSksYj12LmhlaWdodCt4KzEwLHc9di53aWR0aCsxMCx7dXNlTWF4V2lkdGg6X309YTtacihoLGIsdywhIV8pLFkuZGVidWcoIkhlcmUgQm91bmRzIix5LHYpLGguYXR0cigidmlld0JveCIsYCR7di54LTV9ICR7di55LTV9ICR7di53aWR0aCsxMH0gJHt2LmhlaWdodCsxMH1gKX19LCJkcmF3IiksVXZlPXtkcmF3OkJudCxnZXRDbGFzc2VzOlBudH19KTt2YXIgV3ZlPXt9O3ZyKFd2ZSx7ZGlhZ3JhbTooKT0+Rm50fSk7dmFyIEZudCxZdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZeWUoKTtKeWUoKTt0dmUoKTtIdmUoKTtGbnQ9e3BhcnNlcjpXeWUsZGI6WnllLHJlbmRlcmVyOlV2ZSxzdHlsZXM6ZXZlfX0pO3ZhciBjRix1RixEYixqdmUsaEYseXMsbnUscFMsS3ZlLFZudCxOYixRdmUsWnZlLEp2ZSxlMmUsbVMsVmYsZ1M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjRj17TDoibGVmdCIsUjoicmlnaHQiLFQ6InRvcCIsQjoiYm90dG9tIn0sdUY9e0w6byh0PT5gJHt0fSwke3QvMn0gMCwke3R9IDAsMGAsIkwiKSxSOm8odD0+YDAsJHt0LzJ9ICR7dH0sMCAke3R9LCR7dH1gLCJSIiksVDpvKHQ9PmAwLDAgJHt0fSwwICR7dC8yfSwke3R9YCwiVCIpLEI6byh0PT5gJHt0LzJ9LDAgJHt0fSwke3R9IDAsJHt0fWAsIkIiKX0sRGI9e0w6bygodCxlKT0+dC1lKzIsIkwiKSxSOm8oKHQsZSk9PnQtMiwiUiIpLFQ6bygodCxlKT0+dC1lKzIsIlQiKSxCOm8oKHQsZSk9PnQtMiwiQiIpfSxqdmU9byhmdW5jdGlvbih0KXtyZXR1cm4geXModCk/dD09PSJMIj8iUiI6IkwiOnQ9PT0iVCI/IkIiOiJUIn0sImdldE9wcG9zaXRlQXJjaGl0ZWN0dXJlRGlyZWN0aW9uIiksaEY9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IkwifHxlPT09IlIifHxlPT09IlQifHxlPT09IkIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb24iKSx5cz1vKGZ1bmN0aW9uKHQpe2xldCBlPXQ7cmV0dXJuIGU9PT0iTCJ8fGU9PT0iUiJ9LCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgiKSxudT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQ7cmV0dXJuIGU9PT0iVCJ8fGU9PT0iQiJ9LCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkiKSxwUz1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9eXModCkmJm51KGUpLG49bnUodCkmJnlzKGUpO3JldHVybiByfHxufSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YWSIpLEt2ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXRbMF0scj10WzFdLG49eXMoZSkmJm51KHIpLGk9bnUoZSkmJnlzKHIpO3JldHVybiBufHxpfSwiaXNBcmNoaXRlY3R1cmVQYWlyWFkiKSxWbnQ9byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PSJMTCImJnQhPT0iUlIiJiZ0IT09IlRUIiYmdCE9PSJCQiJ9LCJpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLE5iPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1gJHt0fSR7ZX1gO3JldHVybiBWbnQocik/cjp2b2lkIDB9LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyIiksUXZlPW8oZnVuY3Rpb24oW3QsZV0scil7bGV0IG49clswXSxpPXJbMV07cmV0dXJuIHlzKG4pP251KGkpP1t0KyhuPT09IkwiPy0xOjEpLGUrKGk9PT0iVCI/MTotMSldOlt0KyhuPT09IkwiPy0xOjEpLGVdOnlzKGkpP1t0KyhpPT09IkwiPzE6LTEpLGUrKG49PT0iVCI/MTotMSldOlt0LGUrKG49PT0iVCI/MTotMSldfSwic2hpZnRQb3NpdGlvbkJ5QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLFp2ZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09IkxUInx8dD09PSJUTCI/WzEsMV06dD09PSJCTCJ8fHQ9PT0iTEIiP1sxLC0xXTp0PT09IkJSInx8dD09PSJSQiI/Wy0xLC0xXTpbLTEsMV19LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25YWUZhY3RvcnMiKSxKdmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09InNlcnZpY2UifSwiaXNBcmNoaXRlY3R1cmVTZXJ2aWNlIiksZTJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PSJqdW5jdGlvbiJ9LCJpc0FyY2hpdGVjdHVyZUp1bmN0aW9uIiksbVM9byh0PT50LmRhdGEoKSwiZWRnZURhdGEiKSxWZj1vKHQ9PnQuZGF0YSgpLCJub2RlRGF0YSIpfSk7ZnVuY3Rpb24gTWkodCl7bGV0IGU9cGUoKS5hcmNoaXRlY3R1cmU7cmV0dXJuIGU/Llt0XT9lW3RdOnQyZVt0XX12YXIgdDJlLG1yLFVudCxIbnQsV250LFludCxxbnQsWG50LGpudCxLbnQsUW50LFpudCxKbnQsZWl0LHRpdCxyaXQsaXAsUmI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjticygpO1Z0KCk7ZEUoKTtBaSgpO2dTKCk7dDJlPXVyLmFyY2hpdGVjdHVyZSxtcj1uZXcgdmYoKCk9Pih7bm9kZXM6e30sZ3JvdXBzOnt9LGVkZ2VzOltdLHJlZ2lzdGVyZWRJZHM6e30sY29uZmlnOnQyZSxkYXRhU3RydWN0dXJlczp2b2lkIDAsZWxlbWVudHM6e319KSksVW50PW8oKCk9Pnttci5yZXNldCgpLExyKCl9LCJjbGVhciIpLEhudD1vKGZ1bmN0aW9uKHtpZDp0LGljb246ZSxpbjpyLHRpdGxlOm4saWNvblRleHQ6aX0pe2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIGlkIFske3R9XSBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyICR7bXIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdfWApO2lmKHIhPT12b2lkIDApe2lmKHQ9PT1yKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7dH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIFske3R9XSdzIHBhcmVudCBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIGNyZWF0ZWQgYmVmb3JlIHRoaXMgc2VydmljZWApO2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PSJub2RlIil0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIFske3R9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApfW1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0ibm9kZSIsbXIucmVjb3Jkcy5ub2Rlc1t0XT17aWQ6dCx0eXBlOiJzZXJ2aWNlIixpY29uOmUsaWNvblRleHQ6aSx0aXRsZTpuLGVkZ2VzOltdLGluOnJ9fSwiYWRkU2VydmljZSIpLFdudD1vKCgpPT5PYmplY3QudmFsdWVzKG1yLnJlY29yZHMubm9kZXMpLmZpbHRlcihKdmUpLCJnZXRTZXJ2aWNlcyIpLFludD1vKGZ1bmN0aW9uKHtpZDp0LGluOmV9KXttci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF09Im5vZGUiLG1yLnJlY29yZHMubm9kZXNbdF09e2lkOnQsdHlwZToianVuY3Rpb24iLGVkZ2VzOltdLGluOmV9fSwiYWRkSnVuY3Rpb24iKSxxbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyhtci5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoZTJlKSwiZ2V0SnVuY3Rpb25zIiksWG50PW8oKCk9Pk9iamVjdC52YWx1ZXMobXIucmVjb3Jkcy5ub2RlcyksImdldE5vZGVzIiksam50PW8odD0+bXIucmVjb3Jkcy5ub2Rlc1t0XSwiZ2V0Tm9kZSIpLEtudD1vKGZ1bmN0aW9uKHtpZDp0LGljb246ZSxpbjpyLHRpdGxlOm59KXtpZihtci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgaWQgWyR7dH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHttci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF19YCk7aWYociE9PXZvaWQgMCl7aWYodD09PXIpdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7dH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHt0fV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIGdyb3VwYCk7aWYobXIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09Im5vZGUiKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIFske3R9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApfW1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0iZ3JvdXAiLG1yLnJlY29yZHMuZ3JvdXBzW3RdPXtpZDp0LGljb246ZSx0aXRsZTpuLGluOnJ9fSwiYWRkR3JvdXAiKSxRbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyhtci5yZWNvcmRzLmdyb3VwcyksImdldEdyb3VwcyIpLFpudD1vKGZ1bmN0aW9uKHtsaHNJZDp0LHJoc0lkOmUsbGhzRGlyOnIscmhzRGlyOm4sbGhzSW50bzppLHJoc0ludG86YSxsaHNHcm91cDpzLHJoc0dyb3VwOmwsdGl0bGU6dX0pe2lmKCFoRihyKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciBsZWZ0IGhhbmQgc2lkZSBvZiBlZGdlICR7dH0tLSR7ZX0uIEV4cGVjdGVkIChMLFIsVCxCKSBnb3QgJHtyfWApO2lmKCFoRihuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciByaWdodCBoYW5kIHNpZGUgb2YgZWRnZSAke3R9LS0ke2V9LiBFeHBlY3RlZCAoTCxSLFQsQikgZ290ICR7bn1gKTtpZihtci5yZWNvcmRzLm5vZGVzW3RdPT09dm9pZCAwJiZtci5yZWNvcmRzLmdyb3Vwc1t0XT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBsZWZ0LWhhbmQgaWQgWyR7dH1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYCk7aWYobXIucmVjb3Jkcy5ub2Rlc1tlXT09PXZvaWQgMCYmbXIucmVjb3Jkcy5ncm91cHNbdF09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtlfV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gKTtsZXQgaD1tci5yZWNvcmRzLm5vZGVzW3RdLmluLGY9bXIucmVjb3Jkcy5ub2Rlc1tlXS5pbjtpZihzJiZoJiZmJiZoPT1mKXRocm93IG5ldyBFcnJvcihgVGhlIGxlZnQtaGFuZCBpZCBbJHt0fV0gaXMgbW9kaWZpZWQgdG8gdHJhdmVyc2UgdGhlIGdyb3VwIGJvdW5kYXJ5LCBidXQgdGhlIGVkZ2UgZG9lcyBub3QgcGFzcyB0aHJvdWdoIHR3byBncm91cHMuYCk7aWYobCYmaCYmZiYmaD09Zil0aHJvdyBuZXcgRXJyb3IoYFRoZSByaWdodC1oYW5kIGlkIFske2V9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gKTtsZXQgZD17bGhzSWQ6dCxsaHNEaXI6cixsaHNJbnRvOmksbGhzR3JvdXA6cyxyaHNJZDplLHJoc0RpcjpuLHJoc0ludG86YSxyaHNHcm91cDpsLHRpdGxlOnV9O21yLnJlY29yZHMuZWRnZXMucHVzaChkKSxtci5yZWNvcmRzLm5vZGVzW3RdJiZtci5yZWNvcmRzLm5vZGVzW2VdJiYobXIucmVjb3Jkcy5ub2Rlc1t0XS5lZGdlcy5wdXNoKG1yLnJlY29yZHMuZWRnZXNbbXIucmVjb3Jkcy5lZGdlcy5sZW5ndGgtMV0pLG1yLnJlY29yZHMubm9kZXNbZV0uZWRnZXMucHVzaChtci5yZWNvcmRzLmVkZ2VzW21yLnJlY29yZHMuZWRnZXMubGVuZ3RoLTFdKSl9LCJhZGRFZGdlIiksSm50PW8oKCk9Pm1yLnJlY29yZHMuZWRnZXMsImdldEVkZ2VzIiksZWl0PW8oKCk9PntpZihtci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPT09dm9pZCAwKXtsZXQgdD1PYmplY3QuZW50cmllcyhtci5yZWNvcmRzLm5vZGVzKS5yZWR1Y2UoKHMsW2wsdV0pPT4oc1tsXT11LmVkZ2VzLnJlZHVjZSgoaCxmKT0+e2lmKGYubGhzSWQ9PT1sKXtsZXQgZD1OYihmLmxoc0RpcixmLnJoc0Rpcik7ZCYmKGhbZF09Zi5yaHNJZCl9ZWxzZXtsZXQgZD1OYihmLnJoc0RpcixmLmxoc0Rpcik7ZCYmKGhbZF09Zi5saHNJZCl9cmV0dXJuIGh9LHt9KSxzKSx7fSksZT1PYmplY3Qua2V5cyh0KVswXSxyPXtbZV06MX0sbj1PYmplY3Qua2V5cyh0KS5yZWR1Y2UoKHMsbCk9Pmw9PT1lP3M6ey4uLnMsW2xdOjF9LHt9KSxpPW8ocz0+e2xldCBsPXtbc106WzAsMF19LHU9W3NdO2Zvcig7dS5sZW5ndGg+MDspe2xldCBoPXUuc2hpZnQoKTtpZihoKXtyW2hdPTEsZGVsZXRlIG5baF07bGV0IGY9dFtoXSxbZCxwXT1sW2hdO09iamVjdC5lbnRyaWVzKGYpLmZvckVhY2goKFttLGddKT0+e3JbZ118fChsW2ddPVF2ZShbZCxwXSxtKSx1LnB1c2goZykpfSl9fXJldHVybiBsfSwiQkZTIiksYT1baShlKV07Zm9yKDtPYmplY3Qua2V5cyhuKS5sZW5ndGg+MDspYS5wdXNoKGkoT2JqZWN0LmtleXMobilbMF0pKTttci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPXthZGpMaXN0OnQsc3BhdGlhbE1hcHM6YX19cmV0dXJuIG1yLnJlY29yZHMuZGF0YVN0cnVjdHVyZXN9LCJnZXREYXRhU3RydWN0dXJlcyIpLHRpdD1vKCh0LGUpPT57bXIucmVjb3Jkcy5lbGVtZW50c1t0XT1lfSwic2V0RWxlbWVudEZvcklkIikscml0PW8odD0+bXIucmVjb3Jkcy5lbGVtZW50c1t0XSwiZ2V0RWxlbWVudEJ5SWQiKSxpcD17Y2xlYXI6VW50LHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnIsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkU2VydmljZTpIbnQsZ2V0U2VydmljZXM6V250LGFkZEp1bmN0aW9uOlludCxnZXRKdW5jdGlvbnM6cW50LGdldE5vZGVzOlhudCxnZXROb2RlOmpudCxhZGRHcm91cDpLbnQsZ2V0R3JvdXBzOlFudCxhZGRFZGdlOlpudCxnZXRFZGdlczpKbnQsc2V0RWxlbWVudEZvcklkOnRpdCxnZXRFbGVtZW50QnlJZDpyaXQsZ2V0RGF0YVN0cnVjdHVyZXM6ZWl0fTtvKE1pLCJnZXRDb25maWdGaWVsZCIpfSk7dmFyIG5pdCxyMmUsbjJlPU0oKCk9PnsidXNlIHN0cmljdCI7SGcoKTt1dCgpO1R4KCk7UmIoKTtuaXQ9bygodCxlKT0+e3lmKHQsZSksdC5ncm91cHMubWFwKGUuYWRkR3JvdXApLHQuc2VydmljZXMubWFwKHI9PmUuYWRkU2VydmljZSh7Li4ucix0eXBlOiJzZXJ2aWNlIn0pKSx0Lmp1bmN0aW9ucy5tYXAocj0+ZS5hZGRKdW5jdGlvbih7Li4ucix0eXBlOiJqdW5jdGlvbiJ9KSksdC5lZGdlcy5tYXAoZS5hZGRFZGdlKX0sInBvcHVsYXRlRGIiKSxyMmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IFlsKCJhcmNoaXRlY3R1cmUiLHQpO1kuZGVidWcoZSksbml0KGUsaXApfSwicGFyc2UiKX19KTt2YXIgaWl0LGkyZSxhMmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpaXQ9byh0PT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAke3QuYXJjaEVkZ2VXaWR0aH07CiAgICBzdHJva2U6ICR7dC5hcmNoRWRnZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuYXJyb3cgewogICAgZmlsbDogJHt0LmFyY2hFZGdlQXJyb3dDb2xvcn07CiAgfQoKICAubm9kZS1ia2cgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHt0LmFyY2hHcm91cEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LmFyY2hHcm91cEJvcmRlcldpZHRofTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg7CiAgfQogIC5ub2RlLWljb24tdGV4dCB7CiAgICBkaXNwbGF5OiBmbGV4OyAKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIAogIC5ub2RlLWljb24tdGV4dCA+IGRpdiB7CiAgICBjb2xvcjogI2ZmZjsKICAgIG1hcmdpbjogMXB4OwogICAgaGVpZ2h0OiBmaXQtY29udGVudDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CiAgfQpgLCJnZXRTdHlsZXMiKSxpMmU9aWl0fSk7dmFyIGRGPUVpKChNYixmRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBNYj09Im9iamVjdCImJnR5cGVvZiBmRj09Im9iamVjdCI/ZkYuZXhwb3J0cz1yKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10scik6dHlwZW9mIE1iPT0ib2JqZWN0Ij9NYi5sYXlvdXRCYXNlPXIoKTplLmxheW91dEJhc2U9cigpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShNYixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe2lmKGVbbl0pcmV0dXJuIGVbbl0uZXhwb3J0czt2YXIgaT1lW25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxyKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBvKHIsIl9fd2VicGFja19yZXF1aXJlX18iKSxyLm09dCxyLmM9ZSxyLmk9ZnVuY3Rpb24obil7cmV0dXJuIG59LHIuZD1mdW5jdGlvbihuLGksYSl7ci5vKG4saSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDphfSl9LHIubj1mdW5jdGlvbihuKXt2YXIgaT1uJiZuLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBufSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiByLmQoaSwiYSIsaSksaX0sci5vPWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpfSxyLnA9IiIscihyLnM9MjgpfShbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTGF5b3V0Q29uc3RhbnRzIiksbi5RVUFMSVRZPTEsbi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsbi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLG4uREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLG4uREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCxuLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsbi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSxuLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSxuLlNJTVBMRV9OT0RFX1NJWkU9NDAsbi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9bi5TSU1QTEVfTk9ERV9TSVpFLzIsbi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsbi5NSU5fRURHRV9MRU5HVEg9MSxuLldPUkxEX0JPVU5EQVJZPTFlNixuLklOSVRJQUxfV09STERfQk9VTkRBUlk9bi5XT1JMRF9CT1VOREFSWS8xZTMsbi5XT1JMRF9DRU5URVJfWD0xMjAwLG4uV09STERfQ0VOVEVSX1k9OTAwLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDgpLGE9cig5KTtmdW5jdGlvbiBzKHUsaCxmKXtuLmNhbGwodGhpcyxmKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1mLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT11LHRoaXMudGFyZ2V0PWh9byhzLCJMRWRnZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBuKXNbbF09bltsXTtzLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LHMucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0scy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxzLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHMucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0scy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LHMucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0scy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24odSl7aWYodGhpcy5zb3VyY2U9PT11KXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PXUpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0T3RoZXJFbmQodSksZD1oLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihmLmdldE93bmVyKCk9PWgpcmV0dXJuIGY7aWYoZi5nZXRPd25lcigpPT1kKWJyZWFrO2Y9Zi5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9aS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSx1KSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD11WzBdLXVbMl0sdGhpcy5sZW5ndGhZPXVbMV0tdVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSl7dGhpcy52R3JhcGhPYmplY3Q9aX1vKG4sIkxHcmFwaE9iamVjdCIpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMTMpLHM9cigwKSxsPXIoMTYpLHU9cig1KTtmdW5jdGlvbiBoKGQscCxtLGcpe209PW51bGwmJmc9PW51bGwmJihnPXApLG4uY2FsbCh0aGlzLGcpLGQuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoZD1kLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWkuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWcsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1kLG0hPW51bGwmJnAhPW51bGw/dGhpcy5yZWN0PW5ldyBhKHAueCxwLnksbS53aWR0aCxtLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBhfW8oaCwiTE5vZGUiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gbiloW2ZdPW5bZl07aC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30saC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0saC5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0saC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihkKXt0aGlzLnJlY3Qud2lkdGg9ZH0saC5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihkKXt0aGlzLnJlY3QuaGVpZ2h0PWR9LGgucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LGgucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0saC5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxoLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0saC5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0saC5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0saC5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQueCx0aGlzLnJlY3QueT1kLnksdGhpcy5yZWN0LndpZHRoPXAud2lkdGgsdGhpcy5yZWN0LmhlaWdodD1wLmhlaWdodH0saC5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT1wLXRoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54Kz1kLHRoaXMucmVjdC55Kz1wfSxoLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkudGFyZ2V0PT1kKXtpZih5LnNvdXJjZSE9Zyl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjtwLnB1c2goeSl9fSkscH0saC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoISh5LnNvdXJjZT09Z3x8eS50YXJnZXQ9PWcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoeS50YXJnZXQ9PWR8fHkuc291cmNlPT1kKSYmcC5wdXNoKHkpfSkscH0saC5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscD10aGlzO3JldHVybiBwLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obSl7aWYobS5zb3VyY2U9PXApZC5hZGQobS50YXJnZXQpO2Vsc2V7aWYobS50YXJnZXQhPXApdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO2QuYWRkKG0uc291cmNlKX19KSxkfSxoLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHAsbTtpZihkLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZz10aGlzLmNoaWxkLmdldE5vZGVzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKXA9Z1t5XSxtPXAud2l0aENoaWxkcmVuKCksbS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2QuYWRkKHYpfSk7cmV0dXJuIGR9LGgucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPTAscDtpZih0aGlzLmNoaWxkPT1udWxsKWQ9MTtlbHNlIGZvcih2YXIgbT10aGlzLmNoaWxkLmdldE5vZGVzKCksZz0wO2c8bS5sZW5ndGg7ZysrKXA9bVtnXSxkKz1wLmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBkPT0wJiYoZD0xKSxkfSxoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxoLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIGQscCxtPS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksZz1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7ZD1zLldPUkxEX0NFTlRFUl9YK2wubmV4dERvdWJsZSgpKihnLW0pK207dmFyIHk9LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSx2PXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtwPXMuV09STERfQ0VOVEVSX1krbC5uZXh0RG91YmxlKCkqKHYteSkreSx0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBkPXRoaXMuZ2V0Q2hpbGQoKTtpZihkLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9ZC5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9ZC5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIHA9ZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpLG09ZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aCYmKHRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0ibGVmdCI/KHRoaXMucmVjdC54LT10aGlzLmxhYmVsV2lkdGgsdGhpcy5zZXRXaWR0aChwK3RoaXMubGFiZWxXaWR0aCkpOnRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmdGhpcy5sYWJlbFdpZHRoPnA/KHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXApLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKTp0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmdGhpcy5zZXRXaWR0aChwK3RoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQmJih0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyh0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodCx0aGlzLnNldEhlaWdodChtK3RoaXMubGFiZWxIZWlnaHQpKTp0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJjZW50ZXIiJiZ0aGlzLmxhYmVsSGVpZ2h0Pm0/KHRoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1tKS8yLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKTp0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZ0aGlzLnNldEhlaWdodChtK3RoaXMubGFiZWxIZWlnaHQpKX19fSxoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09aS5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxoLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZCl7dmFyIHA9dGhpcy5yZWN0Lng7cD5zLldPUkxEX0JPVU5EQVJZP3A9cy5XT1JMRF9CT1VOREFSWTpwPC1zLldPUkxEX0JPVU5EQVJZJiYocD0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIG09dGhpcy5yZWN0Lnk7bT5zLldPUkxEX0JPVU5EQVJZP209cy5XT1JMRF9CT1VOREFSWTptPC1zLldPUkxEX0JPVU5EQVJZJiYobT0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIGc9bmV3IHUocCxtKSx5PWQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGcpO3RoaXMuc2V0TG9jYXRpb24oeS54LHkueSl9LGgucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LGgucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxoLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDApO2Z1bmN0aW9uIGkoKXt9byhpLCJGRExheW91dENvbnN0YW50cyIpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLk1BWF9JVEVSQVRJT05TPTI1MDAsaS5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxpLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxpLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxpLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxpLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGkuTUFYX05PREVfRElTUExBQ0VNRU5UPWkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsaS5NSU5fUkVQVUxTSU9OX0RJU1Q9aS5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxpLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsaS5NSU5fRURHRV9MRU5HVEg9MSxpLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXtpPT1udWxsJiZhPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1pLHRoaXMueT1hKX1vKG4sIlBvaW50RCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWkueCx0aGlzLnktaS55KX0sbi5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLngrPWkud2lkdGgsdGhpcy55Kz1pLmhlaWdodCx0aGlzfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDApLHM9cig3KSxsPXIoMyksdT1yKDEpLGg9cigxMyksZj1yKDEyKSxkPXIoMTEpO2Z1bmN0aW9uIHAoZyx5LHYpe24uY2FsbCh0aGlzLHYpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1hLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWcseSE9bnVsbCYmeSBpbnN0YW5jZW9mIHM/dGhpcy5ncmFwaE1hbmFnZXI9eTp5IT1udWxsJiZ5IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9eS5ncmFwaE1hbmFnZXIpfW8ocCwiTEdyYXBoIikscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBtIGluIG4pcFttXT1uW21dO3AucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHAucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxwLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0scC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0scC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSxwLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHAucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHksdil7aWYoeT09bnVsbCYmdj09bnVsbCl7dmFyIHg9ZztpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeCk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHgub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaCh4KSx4fWVsc2V7dmFyIGI9ZztpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHkpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih2KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHkub3duZXI9PXYub3duZXImJnkub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiB5Lm93bmVyIT12Lm93bmVyP251bGw6KGIuc291cmNlPXksYi50YXJnZXQ9dixiLmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChiKSx5LmVkZ2VzLnB1c2goYiksdiE9eSYmdi5lZGdlcy5wdXNoKGIpLGIpfX0scC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGcpe3ZhciB5PWc7aWYoZyBpbnN0YW5jZW9mIGwpe2lmKHk9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoISh5Lm93bmVyIT1udWxsJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB2PXkuZWRnZXMuc2xpY2UoKSx4LGI9di5sZW5ndGgsdz0wO3c8Yjt3KyspeD12W3ddLHguaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh4KTp4LnNvdXJjZS5vd25lci5yZW1vdmUoeCk7dmFyIF89dGhpcy5ub2Rlcy5pbmRleE9mKHkpO2lmKF89PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKF8sMSl9ZWxzZSBpZihnIGluc3RhbmNlb2YgdSl7dmFyIHg9ZztpZih4PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2UhPW51bGwmJngudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh4LnNvdXJjZS5vd25lciE9bnVsbCYmeC50YXJnZXQub3duZXIhPW51bGwmJnguc291cmNlLm93bmVyPT10aGlzJiZ4LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciBUPXguc291cmNlLmVkZ2VzLmluZGV4T2YoeCksRT14LnRhcmdldC5lZGdlcy5pbmRleE9mKHgpO2lmKCEoVD4tMSYmRT4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3guc291cmNlLmVkZ2VzLnNwbGljZShULDEpLHgudGFyZ2V0IT14LnNvdXJjZSYmeC50YXJnZXQuZWRnZXMuc3BsaWNlKEUsMSk7dmFyIF89eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHgpO2lmKF89PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO3guc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKF8sMSl9fSxwLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPWkuTUFYX1ZBTFVFLHk9aS5NQVhfVkFMVUUsdix4LGIsdz10aGlzLmdldE5vZGVzKCksXz13Lmxlbmd0aCxUPTA7VDxfO1QrKyl7dmFyIEU9d1tUXTt2PUUuZ2V0VG9wKCkseD1FLmdldExlZnQoKSxnPnYmJihnPXYpLHk+eCYmKHk9eCl9cmV0dXJuIGc9PWkuTUFYX1ZBTFVFP251bGw6KHdbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Yj13WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OmI9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PXktYix0aGlzLnRvcD1nLWIsbmV3IGYodGhpcy5sZWZ0LHRoaXMudG9wKSl9LHAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSx3LF8sVCxFLEwsUz10aGlzLm5vZGVzLEE9Uy5sZW5ndGgsST0wO0k8QTtJKyspe3ZhciBEPVNbSV07ZyYmRC5jaGlsZCE9bnVsbCYmRC51cGRhdGVCb3VuZHMoKSx3PUQuZ2V0TGVmdCgpLF89RC5nZXRSaWdodCgpLFQ9RC5nZXRUb3AoKSxFPUQuZ2V0Qm90dG9tKCkseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgaz1uZXcgaCh5LHgsdi15LGIteCk7eT09aS5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSksU1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9MPVNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6TD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9ay54LUwsdGhpcy5yaWdodD1rLngray53aWR0aCtMLHRoaXMudG9wPWsueS1MLHRoaXMuYm90dG9tPWsueStrLmhlaWdodCtMfSxwLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSx3LF8sVCxFLEw9Zy5sZW5ndGgsUz0wO1M8TDtTKyspe3ZhciBBPWdbU107dz1BLmdldExlZnQoKSxfPUEuZ2V0UmlnaHQoKSxUPUEuZ2V0VG9wKCksRT1BLmdldEJvdHRvbSgpLHk+dyYmKHk9dyksdjxfJiYodj1fKSx4PlQmJih4PVQpLGI8RSYmKGI9RSl9dmFyIEk9bmV3IGgoeSx4LHYteSxiLXgpO3JldHVybiBJfSxwLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPTAseT10aGlzLm5vZGVzLHY9eS5sZW5ndGgseD0wO3g8djt4Kyspe3ZhciBiPXlbeF07Zys9Yi5jYWxjRXN0aW1hdGVkU2l6ZSgpfXJldHVybiBnPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1hLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9Zy9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcztpZih0aGlzLm5vZGVzLmxlbmd0aD09MCl7dGhpcy5pc0Nvbm5lY3RlZD0hMDtyZXR1cm59dmFyIHk9bmV3IGQsdj1uZXcgU2V0LHg9dGhpcy5ub2Rlc1swXSxiLHcsXz14LndpdGhDaGlsZHJlbigpO2ZvcihfLmZvckVhY2goZnVuY3Rpb24oSSl7eS5wdXNoKEkpLHYuYWRkKEkpfSk7eS5sZW5ndGghPT0wOyl7eD15LnNoaWZ0KCksYj14LmdldEVkZ2VzKCk7Zm9yKHZhciBUPWIubGVuZ3RoLEU9MDtFPFQ7RSsrKXt2YXIgTD1iW0VdO2lmKHc9TC5nZXRPdGhlckVuZEluR3JhcGgoeCx0aGlzKSx3IT1udWxsJiYhdi5oYXModykpe3ZhciBTPXcud2l0aENoaWxkcmVuKCk7Uy5mb3JFYWNoKGZ1bmN0aW9uKEkpe3kucHVzaChJKSx2LmFkZChJKX0pfX19aWYodGhpcy5pc0Nvbm5lY3RlZD0hMSx2LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgQT0wO3YuZm9yRWFjaChmdW5jdGlvbihJKXtJLm93bmVyPT1nJiZBKyt9KSxBPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1yKDEpO2Z1bmN0aW9uIGEocyl7bj1yKDYpLHRoaXMubGF5b3V0PXMsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1vKGEsIkxHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxsPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksdT10aGlzLmFkZChzLGwpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaCh1KSx0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsbCx1LGgsZil7aWYodT09bnVsbCYmaD09bnVsbCYmZj09bnVsbCl7aWYocz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYobD09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihzKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChzKSxzLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKGwuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBzLnBhcmVudD1sLGwuY2hpbGQ9cyxzfWVsc2V7Zj11LGg9bCx1PXM7dmFyIGQ9aC5nZXRPd25lcigpLHA9Zi5nZXRPd25lcigpO2lmKCEoZCE9bnVsbCYmZC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEocCE9bnVsbCYmcC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKGQ9PXApcmV0dXJuIHUuaXNJbnRlckdyYXBoPSExLGQuYWRkKHUsaCxmKTtpZih1LmlzSW50ZXJHcmFwaD0hMCx1LnNvdXJjZT1oLHUudGFyZ2V0PWYsdGhpcy5lZGdlcy5pbmRleE9mKHUpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2godSksISh1LnNvdXJjZSE9bnVsbCYmdS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEodS5zb3VyY2UuZWRnZXMuaW5kZXhPZih1KT09LTEmJnUudGFyZ2V0LmVkZ2VzLmluZGV4T2YodSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gdS5zb3VyY2UuZWRnZXMucHVzaCh1KSx1LnRhcmdldC5lZGdlcy5wdXNoKHUpLHV9fSxhLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24ocyl7aWYocyBpbnN0YW5jZW9mIG4pe3ZhciBsPXM7aWYobC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEobD09dGhpcy5yb290R3JhcGh8fGwucGFyZW50IT1udWxsJiZsLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgdT1bXTt1PXUuY29uY2F0KGwuZ2V0RWRnZXMoKSk7Zm9yKHZhciBoLGY9dS5sZW5ndGgsZD0wO2Q8ZjtkKyspaD11W2RdLGwucmVtb3ZlKGgpO3ZhciBwPVtdO3A9cC5jb25jYXQobC5nZXROb2RlcygpKTt2YXIgbTtmPXAubGVuZ3RoO2Zvcih2YXIgZD0wO2Q8ZjtkKyspbT1wW2RdLGwucmVtb3ZlKG0pO2w9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZz10aGlzLmdyYXBocy5pbmRleE9mKGwpO3RoaXMuZ3JhcGhzLnNwbGljZShnLDEpLGwucGFyZW50PW51bGx9ZWxzZSBpZihzIGluc3RhbmNlb2YgaSl7aWYoaD1zLGg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIWguaXNJbnRlckdyYXBoKXRocm93Ik5vdCBhbiBpbnRlci1ncmFwaCBlZGdlISI7aWYoIShoLnNvdXJjZSE9bnVsbCYmaC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGguc291cmNlLmVkZ2VzLmluZGV4T2YoaCkhPS0xJiZoLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpIT0tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3ZhciBnPWguc291cmNlLmVkZ2VzLmluZGV4T2YoaCk7aWYoaC5zb3VyY2UuZWRnZXMuc3BsaWNlKGcsMSksZz1oLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpLGgudGFyZ2V0LmVkZ2VzLnNwbGljZShnLDEpLCEoaC5zb3VyY2Uub3duZXIhPW51bGwmJmguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKGguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGc9aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKTtoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoZywxKX19LGEucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe3RoaXMucm9vdEdyYXBoLnVwZGF0ZUJvdW5kcyghMCl9LGEucHJvdG90eXBlLmdldEdyYXBocz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbE5vZGVzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8dTtoKyspcz1zLmNvbmNhdChsW2hdLmdldE5vZGVzKCkpO3RoaXMuYWxsTm9kZXM9c31yZXR1cm4gdGhpcy5hbGxOb2Rlc30sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxFZGdlcz1mdW5jdGlvbigpe3RoaXMuYWxsRWRnZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249bnVsbH0sYS5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbEVkZ2VzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8bC5sZW5ndGg7aCsrKXM9cy5jb25jYXQobFtoXS5nZXRFZGdlcygpKTtzPXMuY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9c31yZXR1cm4gdGhpcy5hbGxFZGdlc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sYS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24ocyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPXN9LGEucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihzKXtpZihzLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9cyxzLnBhcmVudD09bnVsbCYmKHMucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sYS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxhLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihzLGwpe2lmKCEocyE9bnVsbCYmbCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYocz09bClyZXR1cm4hMDt2YXIgdT1zLmdldE93bmVyKCksaDtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1sKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3U9bC5nZXRPd25lcigpO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PXMpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbCx1LGgsZixkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXtpZihzPWRbbV0sbD1zLnNvdXJjZSx1PXMudGFyZ2V0LHMubGNhPW51bGwscy5zb3VyY2VJbkxjYT1sLHMudGFyZ2V0SW5MY2E9dSxsPT11KXtzLmxjYT1sLmdldE93bmVyKCk7Y29udGludWV9Zm9yKGg9bC5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7Zm9yKHMudGFyZ2V0SW5MY2E9dSxmPXUuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2lmKGY9PWgpe3MubGNhPWY7YnJlYWt9aWYoZj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYocy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cy50YXJnZXRJbkxjYT1mLmdldFBhcmVudCgpLGY9cy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKGg9PXRoaXMucm9vdEdyYXBoKWJyZWFrO3MubGNhPT1udWxsJiYocy5zb3VyY2VJbkxjYT1oLmdldFBhcmVudCgpLGg9cy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihzLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihzLGwpe2lmKHM9PWwpcmV0dXJuIHMuZ2V0T3duZXIoKTt2YXIgdT1zLmdldE93bmVyKCk7ZG97aWYodT09bnVsbClicmVhazt2YXIgaD1sLmdldE93bmVyKCk7ZG97aWYoaD09bnVsbClicmVhaztpZihoPT11KXJldHVybiBoO2g9aC5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTt1PXUuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIHV9LGEucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKHMsbCl7cz09bnVsbCYmbD09bnVsbCYmKHM9dGhpcy5yb290R3JhcGgsbD0xKTtmb3IodmFyIHUsaD1zLmdldE5vZGVzKCksZj1oLmxlbmd0aCxkPTA7ZDxmO2QrKyl1PWhbZF0sdS5pbmNsdXNpb25UcmVlRGVwdGg9bCx1LmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKHUuY2hpbGQsbCsxKX0sYS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgcyxsPVtdLHU9dGhpcy5lZGdlcy5sZW5ndGgsaD0wO2g8dTtoKyspcz10aGlzLmVkZ2VzW2hdLHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIocy5zb3VyY2Uscy50YXJnZXQpJiZsLnB1c2gocyk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5yZW1vdmUobFtoXSk7cmV0dXJuITF9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2Z1bmN0aW9uIGkoKXt9byhpLCJJR2VvbWV0cnkiKSxpLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKGEscyxsLHUpe2lmKCFhLmludGVyc2VjdHMocykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIGg9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoYSxzLGgpLGxbMF09TWF0aC5taW4oYS5nZXRSaWdodCgpLHMuZ2V0UmlnaHQoKSktTWF0aC5tYXgoYS54LHMueCksbFsxXT1NYXRoLm1pbihhLmdldEJvdHRvbSgpLHMuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KGEueSxzLnkpLGEuZ2V0WCgpPD1zLmdldFgoKSYmYS5nZXRSaWdodCgpPj1zLmdldFJpZ2h0KCk/bFswXSs9TWF0aC5taW4ocy5nZXRYKCktYS5nZXRYKCksYS5nZXRSaWdodCgpLXMuZ2V0UmlnaHQoKSk6cy5nZXRYKCk8PWEuZ2V0WCgpJiZzLmdldFJpZ2h0KCk+PWEuZ2V0UmlnaHQoKSYmKGxbMF0rPU1hdGgubWluKGEuZ2V0WCgpLXMuZ2V0WCgpLHMuZ2V0UmlnaHQoKS1hLmdldFJpZ2h0KCkpKSxhLmdldFkoKTw9cy5nZXRZKCkmJmEuZ2V0Qm90dG9tKCk+PXMuZ2V0Qm90dG9tKCk/bFsxXSs9TWF0aC5taW4ocy5nZXRZKCktYS5nZXRZKCksYS5nZXRCb3R0b20oKS1zLmdldEJvdHRvbSgpKTpzLmdldFkoKTw9YS5nZXRZKCkmJnMuZ2V0Qm90dG9tKCk+PWEuZ2V0Qm90dG9tKCkmJihsWzFdKz1NYXRoLm1pbihhLmdldFkoKS1zLmdldFkoKSxzLmdldEJvdHRvbSgpLWEuZ2V0Qm90dG9tKCkpKTt2YXIgZj1NYXRoLmFicygocy5nZXRDZW50ZXJZKCktYS5nZXRDZW50ZXJZKCkpLyhzLmdldENlbnRlclgoKS1hLmdldENlbnRlclgoKSkpO3MuZ2V0Q2VudGVyWSgpPT09YS5nZXRDZW50ZXJZKCkmJnMuZ2V0Q2VudGVyWCgpPT09YS5nZXRDZW50ZXJYKCkmJihmPTEpO3ZhciBkPWYqbFswXSxwPWxbMV0vZjtsWzBdPHA/cD1sWzBdOmQ9bFsxXSxsWzBdPS0xKmhbMF0qKHAvMit1KSxsWzFdPS0xKmhbMV0qKGQvMit1KX0saS5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihhLHMsbCl7YS5nZXRDZW50ZXJYKCk8cy5nZXRDZW50ZXJYKCk/bFswXT0tMTpsWzBdPTEsYS5nZXRDZW50ZXJZKCk8cy5nZXRDZW50ZXJZKCk/bFsxXT0tMTpsWzFdPTF9LGkuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihhLHMsbCl7dmFyIHU9YS5nZXRDZW50ZXJYKCksaD1hLmdldENlbnRlclkoKSxmPXMuZ2V0Q2VudGVyWCgpLGQ9cy5nZXRDZW50ZXJZKCk7aWYoYS5pbnRlcnNlY3RzKHMpKXJldHVybiBsWzBdPXUsbFsxXT1oLGxbMl09ZixsWzNdPWQsITA7dmFyIHA9YS5nZXRYKCksbT1hLmdldFkoKSxnPWEuZ2V0UmlnaHQoKSx5PWEuZ2V0WCgpLHY9YS5nZXRCb3R0b20oKSx4PWEuZ2V0UmlnaHQoKSxiPWEuZ2V0V2lkdGhIYWxmKCksdz1hLmdldEhlaWdodEhhbGYoKSxfPXMuZ2V0WCgpLFQ9cy5nZXRZKCksRT1zLmdldFJpZ2h0KCksTD1zLmdldFgoKSxTPXMuZ2V0Qm90dG9tKCksQT1zLmdldFJpZ2h0KCksST1zLmdldFdpZHRoSGFsZigpLEQ9cy5nZXRIZWlnaHRIYWxmKCksaz0hMSxSPSExO2lmKHU9PT1mKXtpZihoPmQpcmV0dXJuIGxbMF09dSxsWzFdPW0sbFsyXT1mLGxbM109UywhMTtpZihoPGQpcmV0dXJuIGxbMF09dSxsWzFdPXYsbFsyXT1mLGxbM109VCwhMX1lbHNlIGlmKGg9PT1kKXtpZih1PmYpcmV0dXJuIGxbMF09cCxsWzFdPWgsbFsyXT1FLGxbM109ZCwhMTtpZih1PGYpcmV0dXJuIGxbMF09ZyxsWzFdPWgsbFsyXT1fLGxbM109ZCwhMX1lbHNle3ZhciBDPWEuaGVpZ2h0L2Eud2lkdGgsTz1zLmhlaWdodC9zLndpZHRoLE49KGQtaCkvKGYtdSksUD12b2lkIDAsRj12b2lkIDAsQj12b2lkIDAsRz12b2lkIDAsej12b2lkIDAsVz12b2lkIDA7aWYoLUM9PT1OP3U+Zj8obFswXT15LGxbMV09dixrPSEwKToobFswXT1nLGxbMV09bSxrPSEwKTpDPT09TiYmKHU+Zj8obFswXT1wLGxbMV09bSxrPSEwKToobFswXT14LGxbMV09dixrPSEwKSksLU89PT1OP2Y+dT8obFsyXT1MLGxbM109UyxSPSEwKToobFsyXT1FLGxbM109VCxSPSEwKTpPPT09TiYmKGY+dT8obFsyXT1fLGxbM109VCxSPSEwKToobFsyXT1BLGxbM109UyxSPSEwKSksayYmUilyZXR1cm4hMTtpZih1PmY/aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQyxOLDQpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihPLE4sMikpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwzKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwxKSk6aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwxKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwzKSk6KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihDLE4sMiksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTiw0KSksIWspc3dpdGNoKFApe2Nhc2UgMTpHPW0sQj11Ky13L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDI6Qj14LEc9aCtiKk4sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDM6Rz12LEI9dSt3L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDQ6Qj15LEc9aCstYipOLGxbMF09QixsWzFdPUc7YnJlYWt9aWYoIVIpc3dpdGNoKEYpe2Nhc2UgMTpXPVQsej1mKy1EL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDI6ej1BLFc9ZCtJKk4sbFsyXT16LGxbM109VzticmVhaztjYXNlIDM6Vz1TLHo9ZitEL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDQ6ej1MLFc9ZCstSSpOLGxbMl09eixsWzNdPVc7YnJlYWt9fXJldHVybiExfSxpLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYT5zP2w6MStsJTR9LGkuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGEscyxsLHUpe2lmKHU9PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihhLHMsbCk7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLF89dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEw9dm9pZCAwLFM9dm9pZCAwLEE9dm9pZCAwO3JldHVybiB3PXAtZixUPWgtZCxMPWQqZi1oKnAsXz12LWcsRT1tLXksUz15KmctbSp2LEE9dypFLV8qVCxBPT09MD9udWxsOih4PShUKlMtRSpMKS9BLGI9KF8qTC13KlMpL0EsbmV3IG4oeCxiKSl9LGkuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD12b2lkIDA7cmV0dXJuIGEhPT1sPyhoPU1hdGguYXRhbigodS1zKS8obC1hKSksbDxhP2grPU1hdGguUEk6dTxzJiYoaCs9dGhpcy5UV09fUEkpKTp1PHM/aD10aGlzLk9ORV9BTkRfSEFMRl9QSTpoPXRoaXMuSEFMRl9QSSxofSxpLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PShkLWgpKih2LWcpLSh5LW0pKihwLWYpO2lmKHg9PT0wKXJldHVybiExO3ZhciBiPSgodi1nKSooeS1oKSsobS15KSoodi1mKSkveCx3PSgoZi1wKSooeS1oKSsoZC1oKSoodi1mKSkveDtyZXR1cm4gMDxiJiZiPDEmJjA8dyYmdzwxfSxpLmZpbmRDaXJjbGVMaW5lSW50ZXJzZWN0aW9ucz1mdW5jdGlvbihhLHMsbCx1LGgsZixkKXt2YXIgcD0obC1hKSoobC1hKSsodS1zKSoodS1zKSxtPTIqKChhLWgpKihsLWEpKyhzLWYpKih1LXMpKSxnPShhLWgpKihhLWgpKyhzLWYpKihzLWYpLWQqZCx5PW0qbS00KnAqZztpZih5Pj0wKXt2YXIgdj0oLW0rTWF0aC5zcXJ0KG0qbS00KnAqZykpLygyKnApLHg9KC1tLU1hdGguc3FydChtKm0tNCpwKmcpKS8oMipwKSxiPW51bGw7cmV0dXJuIHY+PTAmJnY8PTE/W3ZdOng+PTAmJng8PTE/W3hdOmJ9ZWxzZSByZXR1cm4gbnVsbH0saS5IQUxGX1BJPS41Kk1hdGguUEksaS5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksaS5UV09fUEk9MipNYXRoLlBJLGkuVEhSRUVfUEk9MypNYXRoLlBJLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJTWF0aCIpLG4uc2lnbj1mdW5jdGlvbihpKXtyZXR1cm4gaT4wPzE6aTwwPy0xOjB9LG4uZmxvb3I9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmNlaWwoaSk6TWF0aC5mbG9vcihpKX0sbi5jZWlsPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5mbG9vcihpKTpNYXRoLmNlaWwoaSl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJbnRlZ2VyIiksbi5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxuLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZixkKXtmb3IodmFyIHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTttLmVudW1lcmFibGU9bS5lbnVtZXJhYmxlfHwhMSxtLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbSYmKG0ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLG0ua2V5LG0pfX1yZXR1cm4gbyhoLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24oZixkLHApe3JldHVybiBkJiZoKGYucHJvdG90eXBlLGQpLHAmJmgoZixwKSxmfX0oKTtmdW5jdGlvbiBpKGgsZil7aWYoIShoIGluc3RhbmNlb2YgZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1vKGZ1bmN0aW9uKGYpe3JldHVybnt2YWx1ZTpmLG5leHQ6bnVsbCxwcmV2Om51bGx9fSwibm9kZUZyb20iKSxzPW8oZnVuY3Rpb24oZixkLHAsbSl7cmV0dXJuIGYhPT1udWxsP2YubmV4dD1kOm0uaGVhZD1kLHAhPT1udWxsP3AucHJldj1kOm0udGFpbD1kLGQucHJldj1mLGQubmV4dD1wLG0ubGVuZ3RoKyssZH0sImFkZCIpLGw9byhmdW5jdGlvbihmLGQpe3ZhciBwPWYucHJldixtPWYubmV4dDtyZXR1cm4gcCE9PW51bGw/cC5uZXh0PW06ZC5oZWFkPW0sbSE9PW51bGw/bS5wcmV2PXA6ZC50YWlsPXAsZi5wcmV2PWYubmV4dD1udWxsLGQubGVuZ3RoLS0sZn0sIl9yZW1vdmUiKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmKXt2YXIgZD10aGlzO2kodGhpcyxoKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGY/LmZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIGQucHVzaChwKX0pfXJldHVybiBvKGgsIkxpbmtlZExpc3QiKSxuKGgsW3trZXk6InNpemUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIil9LHtrZXk6Imluc2VydEJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixhKGQpLHAsdGhpcyl9LCJpbnNlcnRCZWZvcmUiKX0se2tleToiaW5zZXJ0QWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGEoZCkscC5uZXh0LHRoaXMpfSwiaW5zZXJ0QWZ0ZXIiKX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixkLHAsdGhpcyl9LCJpbnNlcnROb2RlQmVmb3JlIil9LHtrZXk6Imluc2VydE5vZGVBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsZCxwLm5leHQsdGhpcyl9LCJpbnNlcnROb2RlQWZ0ZXIiKX0se2tleToicHVzaCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyh0aGlzLnRhaWwsYShkKSxudWxsLHRoaXMpfSwicHVzaCIpfSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKG51bGwsYShkKSx0aGlzLmhlYWQsdGhpcyl9LCJ1bnNoaWZ0Iil9LHtrZXk6InJlbW92ZSIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gbChkLHRoaXMpfSwicmVtb3ZlIil9LHtrZXk6InBvcCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKS52YWx1ZX0sInBvcCIpfSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpfSwicG9wTm9kZSIpfSx7a2V5OiJzaGlmdCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX0sInNoaWZ0Iil9LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKX0sInNoaWZ0Tm9kZSIpfSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgcD0xLG09dGhpcy5oZWFkO3A8ZDspbT1tLm5leHQscCsrO3JldHVybiBtLnZhbHVlfX0sImdldF9vYmplY3RfYXQiKX0se2tleToic2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkLHApe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgbT0xLGc9dGhpcy5oZWFkO208ZDspZz1nLm5leHQsbSsrO2cudmFsdWU9cH19LCJzZXRfb2JqZWN0X2F0Iil9XSksaH0oKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxpPT1udWxsJiZhPT1udWxsJiZzPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGw/KHRoaXMueD1pLHRoaXMueT1hKTppLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGwmJihzPWksdGhpcy54PXMueCx0aGlzLnk9cy55KX1vKG4sIlBvaW50Iiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oaSxhLHMpe2kuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbD8ocz1pLHRoaXMuc2V0TG9jYXRpb24ocy54LHMueSkpOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsJiYocGFyc2VJbnQoaSk9PWkmJnBhcnNlSW50KGEpPT1hP3RoaXMubW92ZShpLGEpOih0aGlzLng9TWF0aC5mbG9vcihpKy41KSx0aGlzLnk9TWF0aC5mbG9vcihhKy41KSkpfSxuLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGksYSl7dGhpcy54PWksdGhpcy55PWF9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpLGEpe3RoaXMueCs9aSx0aGlzLnkrPWF9LG4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihpKXtpZihpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBhPWk7cmV0dXJuIHRoaXMueD09YS54JiZ0aGlzLnk9PWEueX1yZXR1cm4gdGhpcz09aX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzLGwpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPW51bGwmJmEhPW51bGwmJnMhPW51bGwmJmwhPW51bGwmJih0aGlzLng9aSx0aGlzLnk9YSx0aGlzLndpZHRoPXMsdGhpcy5oZWlnaHQ9bCl9byhuLCJSZWN0YW5nbGVEIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LG4ucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGkpe3JldHVybiEodGhpcy5nZXRSaWdodCgpPGkueHx8dGhpcy5nZXRCb3R0b20oKTxpLnl8fGkuZ2V0UmlnaHQoKTx0aGlzLnh8fGkuZ2V0Qm90dG9tKCk8dGhpcy55KX0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRNaW5YPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpfSxuLnByb3RvdHlwZS5nZXRNYXhYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpK3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0LzJ9LG4ucHJvdG90eXBlLmdldE1pblk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCl9LG4ucHJvdG90eXBlLmdldE1heFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmdldFdpZHRoSGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldEhlaWdodEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHQvMn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2Z1bmN0aW9uIGkoKXt9byhpLCJVbmlxdWVJREdlbmVyZXRvciIpLGkubGFzdElEPTAsaS5jcmVhdGVJRD1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc1ByaW1pdGl2ZShhKT9hOihhLnVuaXF1ZUlEIT1udWxsfHwoYS51bmlxdWVJRD1pLmdldFN0cmluZygpLGkubGFzdElEKyspLGEudW5pcXVlSUQpfSxpLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbCYmKGE9aS5sYXN0SUQpLCJPYmplY3QjIithfSxpLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGEpe3ZhciBzPXR5cGVvZiBhPiJ1Ij8idW5kZWZpbmVkIjpuKGEpO3JldHVybiBhPT1udWxsfHxzIT0ib2JqZWN0IiYmcyE9ImZ1bmN0aW9uIn0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihtKXtpZihBcnJheS5pc0FycmF5KG0pKXtmb3IodmFyIGc9MCx5PUFycmF5KG0ubGVuZ3RoKTtnPG0ubGVuZ3RoO2crKyl5W2ddPW1bZ107cmV0dXJuIHl9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShtKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMCksYT1yKDcpLHM9cigzKSxsPXIoMSksdT1yKDYpLGg9cig1KSxmPXIoMTcpLGQ9cigyOSk7ZnVuY3Rpb24gcChtKXtkLmNhbGwodGhpcyksdGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMsdGhpcy5lZGdlVG9EdW1teU5vZGVzPW5ldyBNYXAsdGhpcy5ncmFwaE1hbmFnZXI9bmV3IGEodGhpcyksdGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMuaXNTdWJMYXlvdXQ9ITEsdGhpcy5pc1JlbW90ZVVzZT0hMSxtIT1udWxsJiYodGhpcy5pc1JlbW90ZVVzZT1tKX1vKHAsIkxheW91dCIpLHAuUkFORE9NX1NFRUQ9MSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHAucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHAucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBtPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1tLG19LHAucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgdShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgcyh0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGwobnVsbCxudWxsLG0pfSxwLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0scC5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgbTtyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9tPSExOm09dGhpcy5sYXlvdXQoKSxpLkFOSU1BVEU9PT0iZHVyaW5nIj8hMToobSYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLG0pfSxwLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHAucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgbSxnPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKW09Z1t5XTtmb3IodmFyIHYseD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx5PTA7eTx4Lmxlbmd0aDt5Kyspdj14W3ldO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKG0gaW5zdGFuY2VvZiBzKXt2YXIgZz1tO2lmKGcuZ2V0Q2hpbGQoKSE9bnVsbClmb3IodmFyIHk9Zy5nZXRDaGlsZCgpLmdldE5vZGVzKCksdj0wO3Y8eS5sZW5ndGg7disrKXVwZGF0ZSh5W3ZdKTtpZihnLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHg9Zy52R3JhcGhPYmplY3Q7eC51cGRhdGUoZyl9fWVsc2UgaWYobSBpbnN0YW5jZW9mIGwpe3ZhciBiPW07aWYoYi52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB3PWIudkdyYXBoT2JqZWN0O3cudXBkYXRlKGIpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiB1KXt2YXIgXz1tO2lmKF8udkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgVD1fLnZHcmFwaE9iamVjdDtULnVwZGF0ZShfKX19fSxwLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0scC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IGgoMCwwKSk7ZWxzZXt2YXIgZz1uZXcgZix5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS51cGRhdGVMZWZ0VG9wKCk7aWYoeSE9bnVsbCl7Zy5zZXRXb3JsZE9yZ1gobS54KSxnLnNldFdvcmxkT3JnWShtLnkpLGcuc2V0RGV2aWNlT3JnWCh5LngpLGcuc2V0RGV2aWNlT3JnWSh5LnkpO2Zvcih2YXIgdj10aGlzLmdldEFsbE5vZGVzKCkseCxiPTA7Yjx2Lmxlbmd0aDtiKyspeD12W2JdLHgudHJhbnNmb3JtKGcpfX19LHAucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKSx0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHMoITApO2Vsc2UgZm9yKHZhciBnLHksdj1tLmdldE5vZGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWc9dlt4XSx5PWcuZ2V0Q2hpbGQoKSx5PT1udWxsfHx5LmdldE5vZGVzKCkubGVuZ3RoPT0wP2cuc2NhdHRlcigpOih0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh5KSxnLnVwZGF0ZUJvdW5kcygpKX0scC5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxnPSEwLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksdj0hMCx4PTA7eDx5Lmxlbmd0aDt4KyspeVt4XS5nZXRDaGlsZCgpIT1udWxsJiYodj0hMSk7aWYoIXYpcmV0dXJuIG07dmFyIGI9bmV3IFNldCx3PVtdLF89bmV3IE1hcCxUPVtdO2ZvcihUPVQuY29uY2F0KHkpO1QubGVuZ3RoPjAmJmc7KXtmb3Iody5wdXNoKFRbMF0pO3cubGVuZ3RoPjAmJmc7KXt2YXIgRT13WzBdO3cuc3BsaWNlKDAsMSksYi5hZGQoRSk7Zm9yKHZhciBMPUUuZ2V0RWRnZXMoKSx4PTA7eDxMLmxlbmd0aDt4Kyspe3ZhciBTPUxbeF0uZ2V0T3RoZXJFbmQoRSk7aWYoXy5nZXQoRSkhPVMpaWYoIWIuaGFzKFMpKXcucHVzaChTKSxfLnNldChTLEUpO2Vsc2V7Zz0hMTticmVha319fWlmKCFnKW09W107ZWxzZXt2YXIgQT1bXS5jb25jYXQobihiKSk7bS5wdXNoKEEpO2Zvcih2YXIgeD0wO3g8QS5sZW5ndGg7eCsrKXt2YXIgST1BW3hdLEQ9VC5pbmRleE9mKEkpO0Q+LTEmJlQuc3BsaWNlKEQsMSl9Yj1uZXcgU2V0LF89bmV3IE1hcH19cmV0dXJuIG19LHAucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKG0pe2Zvcih2YXIgZz1bXSx5PW0uc291cmNlLHY9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKG0uc291cmNlLG0udGFyZ2V0KSx4PTA7eDxtLmJlbmRwb2ludHMubGVuZ3RoO3grKyl7dmFyIGI9dGhpcy5uZXdOb2RlKG51bGwpO2Iuc2V0UmVjdChuZXcgUG9pbnQoMCwwKSxuZXcgRGltZW5zaW9uKDEsMSkpLHYuYWRkKGIpO3ZhciB3PXRoaXMubmV3RWRnZShudWxsKTt0aGlzLmdyYXBoTWFuYWdlci5hZGQodyx5LGIpLGcuYWRkKGIpLHk9Yn12YXIgdz10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh3LHksbS50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQobSxnKSxtLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShtKTp2LnJlbW92ZShtKSxnfSxwLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgbT1bXTttPW0uY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLG09W10uY29uY2F0KG4odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChtKTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtpZih5LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgdj10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHkpLHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIGI9dlt4XSx3PW5ldyBoKGIuZ2V0Q2VudGVyWCgpLGIuZ2V0Q2VudGVyWSgpKSxfPXkuYmVuZHBvaW50cy5nZXQoeCk7Xy54PXcueCxfLnk9dy55LGIuZ2V0T3duZXIoKS5yZW1vdmUoYil9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHkseS5zb3VyY2UseS50YXJnZXQpfX19LHAudHJhbnNmb3JtPWZ1bmN0aW9uKG0sZyx5LHYpe2lmKHkhPW51bGwmJnYhPW51bGwpe3ZhciB4PWc7aWYobTw9NTApe3ZhciBiPWcveTt4LT0oZy1iKS81MCooNTAtbSl9ZWxzZXt2YXIgdz1nKnY7eCs9KHctZykvNTAqKG0tNTApfXJldHVybiB4fWVsc2V7dmFyIF8sVDtyZXR1cm4gbTw9NTA/KF89OSpnLzUwMCxUPWcvMTApOihfPTkqZy81MCxUPS04KmcpLF8qbStUfX0scC5maW5kQ2VudGVyT2ZUcmVlPWZ1bmN0aW9uKG0pe3ZhciBnPVtdO2c9Zy5jb25jYXQobSk7dmFyIHk9W10sdj1uZXcgTWFwLHg9ITEsYj1udWxsOyhnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pO2Zvcih2YXIgdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgXz1nW3ddLFQ9Xy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTt2LnNldChfLF8uZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemUpLFQ9PTEmJnkucHVzaChfKX12YXIgRT1bXTtmb3IoRT1FLmNvbmNhdCh5KTsheDspe3ZhciBMPVtdO0w9TC5jb25jYXQoRSksRT1bXTtmb3IodmFyIHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIF89Z1t3XSxTPWcuaW5kZXhPZihfKTtTPj0wJiZnLnNwbGljZShTLDEpO3ZhciBBPV8uZ2V0TmVpZ2hib3JzTGlzdCgpO0EuZm9yRWFjaChmdW5jdGlvbihrKXtpZih5LmluZGV4T2Yoayk8MCl7dmFyIFI9di5nZXQoayksQz1SLTE7Qz09MSYmRS5wdXNoKGspLHYuc2V0KGssQyl9fSl9eT15LmNvbmNhdChFKSwoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKX1yZXR1cm4gYn0scC5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKG0pe3RoaXMuZ3JhcGhNYW5hZ2VyPW19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJSYW5kb21TZWVkIiksbi5zZWVkPTEsbi54PTAsbi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ueD1NYXRoLnNpbihuLnNlZWQrKykqMWU0LG4ueC1NYXRoLmZsb29yKG4ueCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNSk7ZnVuY3Rpb24gaShhLHMpe3RoaXMubHdvcmxkT3JnWD0wLHRoaXMubHdvcmxkT3JnWT0wLHRoaXMubGRldmljZU9yZ1g9MCx0aGlzLmxkZXZpY2VPcmdZPTAsdGhpcy5sd29ybGRFeHRYPTEsdGhpcy5sd29ybGRFeHRZPTEsdGhpcy5sZGV2aWNlRXh0WD0xLHRoaXMubGRldmljZUV4dFk9MX1vKGksIlRyYW5zZm9ybSIpLGkucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWT1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFk9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFg9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFk9YX0saS5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdYKyhhLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9sKSxzfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1krKGEtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1grKGEtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1krKGEtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihhKXt2YXIgcz1uZXcgbih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGEueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShhLnkpKTtyZXR1cm4gc30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihkKXtpZihBcnJheS5pc0FycmF5KGQpKXtmb3IodmFyIHA9MCxtPUFycmF5KGQubGVuZ3RoKTtwPGQubGVuZ3RoO3ArKyltW3BdPWRbcF07cmV0dXJuIG19ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShkKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMTUpLGE9cig0KSxzPXIoMCksbD1yKDgpLHU9cig5KTtmdW5jdGlvbiBoKCl7aS5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1hLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1hLk1BWF9JVEVSQVRJT05TfW8oaCwiRkRMYXlvdXQiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gaSloW2ZdPWlbZl07aC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLnRvdGFsSXRlcmF0aW9ucz0wLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTAsdGhpcy51c2VGUkdyaWRWYXJpYW50PWEuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OLHRoaXMuZ3JpZD1bXX0saC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscCxtLGcseSx2LHgsYj10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksdz0wO3c8Yi5sZW5ndGg7dysrKWQ9Ylt3XSxwPWQuaWRlYWxMZW5ndGgsZC5pc0ludGVyR3JhcGgmJihnPWQuZ2V0U291cmNlKCkseT1kLmdldFRhcmdldCgpLHY9ZC5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx4PWQuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uJiYoZC5pZGVhbExlbmd0aCs9dit4LTIqcy5TSU1QTEVfTk9ERV9TSVpFKSxtPWQuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksZC5pZGVhbExlbmd0aCs9cCphLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKGcuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkreS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKm0pKX0saC5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciphLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqYS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkPXRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSp0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoLHRoaXMucmVwdWxzaW9uUmFuZ2U9dGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbEVkZ2VzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHRoaXMuY2FsY1NwcmluZ0ZvcmNlKHAscC5pZGVhbExlbmd0aCl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXM9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAscD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbSxnLHksdix4PXRoaXMuZ2V0QWxsTm9kZXMoKSxiO2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmZCYmdGhpcy51cGRhdGVHcmlkKCksYj1uZXcgU2V0LG09MDttPHgubGVuZ3RoO20rKyl5PXhbbV0sdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUoeSxiLGQscCksYi5hZGQoeSk7ZWxzZSBmb3IobT0wO208eC5sZW5ndGg7bSsrKWZvcih5PXhbbV0sZz1tKzE7Zzx4Lmxlbmd0aDtnKyspdj14W2ddLHkuZ2V0T3duZXIoKT09di5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZSh5LHYpfSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZShkKX0saC5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0scC5tb3ZlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHksdix4LGI7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmbS5nZXRDaGlsZCgpPT1udWxsJiZnLmdldENoaWxkKCk9PW51bGwpZC51cGRhdGVMZW5ndGhTaW1wbGUoKTtlbHNlIGlmKGQudXBkYXRlTGVuZ3RoKCksZC5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQpcmV0dXJuO3k9ZC5nZXRMZW5ndGgoKSx5IT0wJiYodj1kLmVkZ2VFbGFzdGljaXR5Kih5LXApLHg9diooZC5sZW5ndGhYL3kpLGI9diooZC5sZW5ndGhZL3kpLG0uc3ByaW5nRm9yY2VYKz14LG0uc3ByaW5nRm9yY2VZKz1iLGcuc3ByaW5nRm9yY2VYLT14LGcuc3ByaW5nRm9yY2VZLT1iKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRSZWN0KCksZz1wLmdldFJlY3QoKSx5PW5ldyBBcnJheSgyKSx2PW5ldyBBcnJheSg0KSx4LGIsdyxfLFQsRSxMO2lmKG0uaW50ZXJzZWN0cyhnKSl7bC5jYWxjU2VwYXJhdGlvbkFtb3VudChtLGcseSxhLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksRT0yKnlbMF0sTD0yKnlbMV07dmFyIFM9ZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vKGQubm9PZkNoaWxkcmVuK3Aubm9PZkNoaWxkcmVuKTtkLnJlcHVsc2lvbkZvcmNlWC09UypFLGQucmVwdWxzaW9uRm9yY2VZLT1TKkwscC5yZXB1bHNpb25Gb3JjZVgrPVMqRSxwLnJlcHVsc2lvbkZvcmNlWSs9UypMfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmZC5nZXRDaGlsZCgpPT1udWxsJiZwLmdldENoaWxkKCk9PW51bGw/KHg9Zy5nZXRDZW50ZXJYKCktbS5nZXRDZW50ZXJYKCksYj1nLmdldENlbnRlclkoKS1tLmdldENlbnRlclkoKSk6KGwuZ2V0SW50ZXJzZWN0aW9uKG0sZyx2KSx4PXZbMl0tdlswXSxiPXZbM10tdlsxXSksTWF0aC5hYnMoeCk8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJih4PXUuc2lnbih4KSphLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMoYik8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJihiPXUuc2lnbihiKSphLk1JTl9SRVBVTFNJT05fRElTVCksdz14KngrYipiLF89TWF0aC5zcXJ0KHcpLFQ9KGQubm9kZVJlcHVsc2lvbi8yK3Aubm9kZVJlcHVsc2lvbi8yKSpkLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi93LEU9VCp4L18sTD1UKmIvXyxkLnJlcHVsc2lvbkZvcmNlWC09RSxkLnJlcHVsc2lvbkZvcmNlWS09TCxwLnJlcHVsc2lvbkZvcmNlWCs9RSxwLnJlcHVsc2lvbkZvcmNlWSs9TH0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihkKXt2YXIgcCxtLGcseSx2LHgsYix3O3A9ZC5nZXRPd25lcigpLG09KHAuZ2V0UmlnaHQoKStwLmdldExlZnQoKSkvMixnPShwLmdldFRvcCgpK3AuZ2V0Qm90dG9tKCkpLzIseT1kLmdldENlbnRlclgoKS1tLHY9ZC5nZXRDZW50ZXJZKCktZyx4PU1hdGguYWJzKHkpK2QuZ2V0V2lkdGgoKS8yLGI9TWF0aC5hYnModikrZC5nZXRIZWlnaHQoKS8yLGQuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh3PXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYpKToodz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdip0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50KSl9LGgucHJvdG90eXBlLmlzQ29udmVyZ2VkPWZ1bmN0aW9uKCl7dmFyIGQscD0hMTtyZXR1cm4gdGhpcy50b3RhbEl0ZXJhdGlvbnM+dGhpcy5tYXhJdGVyYXRpb25zLzMmJihwPU1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQtdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCk8MiksZD10aGlzLnRvdGFsRGlzcGxhY2VtZW50PHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD10aGlzLnRvdGFsRGlzcGxhY2VtZW50LGR8fHB9LGgucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmIXRoaXMuaXNTdWJMYXlvdXQmJih0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz09dGhpcy5hbmltYXRpb25QZXJpb2Q/KHRoaXMudXBkYXRlKCksdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCk6dGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMrKyl9LGgucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSxkLm5vT2ZDaGlsZHJlbj1kLmdldE5vT2ZDaGlsZHJlbigpfSxoLnByb3RvdHlwZS5jYWxjR3JpZD1mdW5jdGlvbihkKXt2YXIgcD0wLG09MDtwPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSksbT1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgZz1uZXcgQXJyYXkocCkseT0wO3k8cDt5KyspZ1t5XT1uZXcgQXJyYXkobSk7Zm9yKHZhciB5PTA7eTxwO3krKylmb3IodmFyIHY9MDt2PG07disrKWdbeV1bdl09bmV3IEFycmF5O3JldHVybiBnfSxoLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKGQscCxtKXt2YXIgZz0wLHk9MCx2PTAseD0wO2c9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseT1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS53aWR0aCtkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx2PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHg9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkuaGVpZ2h0K2QuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgYj1nO2I8PXk7YisrKWZvcih2YXIgdz12O3c8PXg7dysrKXRoaXMuZ3JpZFtiXVt3XS5wdXNoKGQpLGQuc2V0R3JpZENvb3JkaW5hdGVzKGcseSx2LHgpfSxoLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIGQscCxtPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxkPTA7ZDxtLmxlbmd0aDtkKyspcD1tW2RdLHRoaXMuYWRkTm9kZVRvR3JpZChwLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0saC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKGQscCxtLGcpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJm18fGcpe3ZhciB5PW5ldyBTZXQ7ZC5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciB2LHg9dGhpcy5ncmlkLGI9ZC5zdGFydFgtMTtiPGQuZmluaXNoWCsyO2IrKylmb3IodmFyIHc9ZC5zdGFydFktMTt3PGQuZmluaXNoWSsyO3crKylpZighKGI8MHx8dzwwfHxiPj14Lmxlbmd0aHx8dz49eFswXS5sZW5ndGgpKXtmb3IodmFyIF89MDtfPHhbYl1bd10ubGVuZ3RoO18rKylpZih2PXhbYl1bd11bX10sIShkLmdldE93bmVyKCkhPXYuZ2V0T3duZXIoKXx8ZD09dikmJiFwLmhhcyh2KSYmIXkuaGFzKHYpKXt2YXIgVD1NYXRoLmFicyhkLmdldENlbnRlclgoKS12LmdldENlbnRlclgoKSktKGQuZ2V0V2lkdGgoKS8yK3YuZ2V0V2lkdGgoKS8yKSxFPU1hdGguYWJzKGQuZ2V0Q2VudGVyWSgpLXYuZ2V0Q2VudGVyWSgpKS0oZC5nZXRIZWlnaHQoKS8yK3YuZ2V0SGVpZ2h0KCkvMik7VDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmRTw9dGhpcy5yZXB1bHNpb25SYW5nZSYmeS5hZGQodil9fWQuc3Vycm91bmRpbmc9W10uY29uY2F0KG4oeSkpfWZvcihiPTA7YjxkLnN1cnJvdW5kaW5nLmxlbmd0aDtiKyspdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoZCxkLnN1cnJvdW5kaW5nW2JdKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksaT1yKDQpO2Z1bmN0aW9uIGEobCx1LGgpe24uY2FsbCh0aGlzLGwsdSxoKSx0aGlzLmlkZWFsTGVuZ3RoPWkuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLmVkZ2VFbGFzdGljaXR5PWkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEh9byhhLCJGRExheW91dEVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzKSxpPXIoNCk7ZnVuY3Rpb24gYShsLHUsaCxmKXtuLmNhbGwodGhpcyxsLHUsaCxmKSx0aGlzLm5vZGVSZXB1bHNpb249aS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119byhhLCJGRExheW91dE5vZGUiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107YS5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGwsdSxoLGYpe3RoaXMuc3RhcnRYPWwsdGhpcy5maW5pc2hYPXUsdGhpcy5zdGFydFk9aCx0aGlzLmZpbmlzaFk9Zn0sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPT1udWxsJiZhIT09bnVsbCYmKHRoaXMuaGVpZ2h0PWEsdGhpcy53aWR0aD1pKX1vKG4sIkRpbWVuc2lvbkQiKSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLm1hcD17fSx0aGlzLmtleXM9W119byhpLCJIYXNoTWFwIiksaS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGEscyl7dmFyIGw9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKGwpfHwodGhpcy5tYXBbbF09cyx0aGlzLmtleXMucHVzaChhKSl9LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW2FdIT1udWxsfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbc119LGkucHJvdG90eXBlLmtleVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLnNldD17fX1vKGksIkhhc2hTZXQiKSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKHMpfHwodGhpcy5zZXRbc109YSl9LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5zZXRbbi5jcmVhdGVJRChhKV19LGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXT09YX0saS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxsPXMubGVuZ3RoLHU9MDt1PGw7dSsrKWEucHVzaCh0aGlzLnNldFtzW3VdXSl9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIHU9YVtsXTt0aGlzLmFkZCh1KX19LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJNYXRyaXgiKSxuLm11bHRNYXQ9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXtzW2xdPVtdO2Zvcih2YXIgdT0wO3U8YVswXS5sZW5ndGg7dSsrKXtzW2xdW3VdPTA7Zm9yKHZhciBoPTA7aDxpWzBdLmxlbmd0aDtoKyspc1tsXVt1XSs9aVtsXVtoXSphW2hdW3VdfX1yZXR1cm4gc30sbi50cmFuc3Bvc2U9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9MDtzPGlbMF0ubGVuZ3RoO3MrKyl7YVtzXT1bXTtmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKylhW3NdW2xdPWlbbF1bc119cmV0dXJuIGF9LG4ubXVsdENvbnM9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXNbbF09aVtsXSphO3JldHVybiBzfSxuLm1pbnVzT3A9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXNbbF09aVtsXS1hW2xdO3JldHVybiBzfSxuLmRvdFByb2R1Y3Q9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9MCxsPTA7bDxpLmxlbmd0aDtsKyspcys9aVtsXSphW2xdO3JldHVybiBzfSxuLm1hZz1mdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZG90UHJvZHVjdChpLGkpKX0sbi5ub3JtYWxpemU9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9dGhpcy5tYWcoaSksbD0wO2w8aS5sZW5ndGg7bCsrKWFbbF09aVtsXS9zO3JldHVybiBhfSxuLm11bHRHYW1tYT1mdW5jdGlvbihpKXtmb3IodmFyIGE9W10scz0wLGw9MDtsPGkubGVuZ3RoO2wrKylzKz1pW2xdO3MqPS0xL2kubGVuZ3RoO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKWFbdV09cytpW3VdO3JldHVybiBhfSxuLm11bHRMPWZ1bmN0aW9uKGksYSxzKXtmb3IodmFyIGw9W10sdT1bXSxoPVtdLGY9MDtmPGFbMF0ubGVuZ3RoO2YrKyl7Zm9yKHZhciBkPTAscD0wO3A8YS5sZW5ndGg7cCsrKWQrPS0uNSphW3BdW2ZdKmlbcF07dVtmXT1kfWZvcih2YXIgbT0wO208cy5sZW5ndGg7bSsrKXtmb3IodmFyIGc9MCx5PTA7eTxzLmxlbmd0aDt5KyspZys9c1ttXVt5XSp1W3ldO2hbbV09Z31mb3IodmFyIHY9MDt2PGEubGVuZ3RoO3YrKyl7Zm9yKHZhciB4PTAsYj0wO2I8YVswXS5sZW5ndGg7YisrKXgrPWFbdl1bYl0qaFtiXTtsW3ZdPXh9cmV0dXJuIGx9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2Zvcih2YXIgZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZC5rZXksZCl9fXJldHVybiBvKGwsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbih1LGgsZil7cmV0dXJuIGgmJmwodS5wcm90b3R5cGUsaCksZiYmbCh1LGYpLHV9fSgpO2Z1bmN0aW9uIGkobCx1KXtpZighKGwgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPXIoMTEpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7aSh0aGlzLGwpLChoIT09bnVsbHx8aCE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgZj12b2lkIDA7dSBpbnN0YW5jZW9mIGE/Zj11LnNpemUoKTpmPXUubGVuZ3RoLHRoaXMuX3F1aWNrc29ydCh1LDAsZi0xKX1yZXR1cm4gbyhsLCJRdWlja3NvcnQiKSxuKGwsW3trZXk6Il9xdWlja3NvcnQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2lmKGY8ZCl7dmFyIHA9dGhpcy5fcGFydGl0aW9uKGgsZixkKTt0aGlzLl9xdWlja3NvcnQoaCxmLHApLHRoaXMuX3F1aWNrc29ydChoLHArMSxkKX19LCJfcXVpY2tzb3J0Iil9LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2Zvcih2YXIgcD10aGlzLl9nZXQoaCxmKSxtPWYsZz1kOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24ocCx0aGlzLl9nZXQoaCxnKSk7KWctLTtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChoLG0pLHApOyltKys7aWYobTxnKXRoaXMuX3N3YXAoaCxtLGcpLG0rKyxnLS07ZWxzZSByZXR1cm4gZ319LCJfcGFydGl0aW9uIil9LHtrZXk6Il9nZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gaCBpbnN0YW5jZW9mIGE/aC5nZXRfb2JqZWN0X2F0KGYpOmhbZl19LCJfZ2V0Iil9LHtrZXk6Il9zZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2ggaW5zdGFuY2VvZiBhP2guc2V0X29iamVjdF9hdChmLGQpOmhbZl09ZH0sIl9zZXQiKX0se2tleToiX3N3YXAiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe3ZhciBwPXRoaXMuX2dldChoLGYpO3RoaXMuX3NldChoLGYsdGhpcy5fZ2V0KGgsZCkpLHRoaXMuX3NldChoLGQscCl9LCJfc3dhcCIpfSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBmPmh9LCJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIpfV0pLGx9KCk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIlNWRCIpLG4uc3ZkPWZ1bmN0aW9uKGkpe3RoaXMuVT1udWxsLHRoaXMuVj1udWxsLHRoaXMucz1udWxsLHRoaXMubT0wLHRoaXMubj0wLHRoaXMubT1pLmxlbmd0aCx0aGlzLm49aVswXS5sZW5ndGg7dmFyIGE9TWF0aC5taW4odGhpcy5tLHRoaXMubik7dGhpcy5zPWZ1bmN0aW9uKGR0KXtmb3IodmFyIEplPVtdO2R0LS0gPjA7KUplLnB1c2goMCk7cmV0dXJuIEplfShNYXRoLm1pbih0aGlzLm0rMSx0aGlzLm4pKSx0aGlzLlU9ZnVuY3Rpb24oZHQpe3ZhciBKZT1vKGZ1bmN0aW9uIGN0KEN0KXtpZihDdC5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKHZhciBwdD1bXSxCdD0wO0J0PEN0WzBdO0J0KyspcHQucHVzaChjdChDdC5zbGljZSgxKSkpO3JldHVybiBwdH0sImFsbG9jYXRlIik7cmV0dXJuIEplKGR0KX0oW3RoaXMubSxhXSksdGhpcy5WPWZ1bmN0aW9uKGR0KXt2YXIgSmU9byhmdW5jdGlvbiBjdChDdCl7aWYoQ3QubGVuZ3RoPT0wKXJldHVybiAwO2Zvcih2YXIgcHQ9W10sQnQ9MDtCdDxDdFswXTtCdCsrKXB0LnB1c2goY3QoQ3Quc2xpY2UoMSkpKTtyZXR1cm4gcHR9LCJhbGxvY2F0ZSIpO3JldHVybiBKZShkdCl9KFt0aGlzLm4sdGhpcy5uXSk7Zm9yKHZhciBzPWZ1bmN0aW9uKGR0KXtmb3IodmFyIEplPVtdO2R0LS0gPjA7KUplLnB1c2goMCk7cmV0dXJuIEplfSh0aGlzLm4pLGw9ZnVuY3Rpb24oZHQpe2Zvcih2YXIgSmU9W107ZHQtLSA+MDspSmUucHVzaCgwKTtyZXR1cm4gSmV9KHRoaXMubSksdT0hMCxoPSEwLGY9TWF0aC5taW4odGhpcy5tLTEsdGhpcy5uKSxkPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5uLTIsdGhpcy5tKSkscD0wO3A8TWF0aC5tYXgoZixkKTtwKyspe2lmKHA8Zil7dGhpcy5zW3BdPTA7Zm9yKHZhciBtPXA7bTx0aGlzLm07bSsrKXRoaXMuc1twXT1uLmh5cG90KHRoaXMuc1twXSxpW21dW3BdKTtpZih0aGlzLnNbcF0hPT0wKXtpW3BdW3BdPDAmJih0aGlzLnNbcF09LXRoaXMuc1twXSk7Zm9yKHZhciBnPXA7Zzx0aGlzLm07ZysrKWlbZ11bcF0vPXRoaXMuc1twXTtpW3BdW3BdKz0xfXRoaXMuc1twXT0tdGhpcy5zW3BdfWZvcih2YXIgeT1wKzE7eTx0aGlzLm47eSsrKXtpZihmdW5jdGlvbihkdCxKZSl7cmV0dXJuIGR0JiZKZX0ocDxmLHRoaXMuc1twXSE9PTApKXtmb3IodmFyIHY9MCx4PXA7eDx0aGlzLm07eCsrKXYrPWlbeF1bcF0qaVt4XVt5XTt2PS12L2lbcF1bcF07Zm9yKHZhciBiPXA7Yjx0aGlzLm07YisrKWlbYl1beV0rPXYqaVtiXVtwXX1zW3ldPWlbcF1beV19aWYoZnVuY3Rpb24oZHQsSmUpe3JldHVybiBkdCYmSmV9KHUscDxmKSlmb3IodmFyIHc9cDt3PHRoaXMubTt3KyspdGhpcy5VW3ddW3BdPWlbd11bcF07aWYocDxkKXtzW3BdPTA7Zm9yKHZhciBfPXArMTtfPHRoaXMubjtfKyspc1twXT1uLmh5cG90KHNbcF0sc1tfXSk7aWYoc1twXSE9PTApe3NbcCsxXTwwJiYoc1twXT0tc1twXSk7Zm9yKHZhciBUPXArMTtUPHRoaXMubjtUKyspc1tUXS89c1twXTtzW3ArMV0rPTF9aWYoc1twXT0tc1twXSxmdW5jdGlvbihkdCxKZSl7cmV0dXJuIGR0JiZKZX0ocCsxPHRoaXMubSxzW3BdIT09MCkpe2Zvcih2YXIgRT1wKzE7RTx0aGlzLm07RSsrKWxbRV09MDtmb3IodmFyIEw9cCsxO0w8dGhpcy5uO0wrKylmb3IodmFyIFM9cCsxO1M8dGhpcy5tO1MrKylsW1NdKz1zW0xdKmlbU11bTF07Zm9yKHZhciBBPXArMTtBPHRoaXMubjtBKyspZm9yKHZhciBJPS1zW0FdL3NbcCsxXSxEPXArMTtEPHRoaXMubTtEKyspaVtEXVtBXSs9SSpsW0RdfWlmKGgpZm9yKHZhciBrPXArMTtrPHRoaXMubjtrKyspdGhpcy5WW2tdW3BdPXNba119fXZhciBSPU1hdGgubWluKHRoaXMubix0aGlzLm0rMSk7aWYoZjx0aGlzLm4mJih0aGlzLnNbZl09aVtmXVtmXSksdGhpcy5tPFImJih0aGlzLnNbUi0xXT0wKSxkKzE8UiYmKHNbZF09aVtkXVtSLTFdKSxzW1ItMV09MCx1KXtmb3IodmFyIEM9ZjtDPGE7QysrKXtmb3IodmFyIE89MDtPPHRoaXMubTtPKyspdGhpcy5VW09dW0NdPTA7dGhpcy5VW0NdW0NdPTF9Zm9yKHZhciBOPWYtMTtOPj0wO04tLSlpZih0aGlzLnNbTl0hPT0wKXtmb3IodmFyIFA9TisxO1A8YTtQKyspe2Zvcih2YXIgRj0wLEI9TjtCPHRoaXMubTtCKyspRis9dGhpcy5VW0JdW05dKnRoaXMuVVtCXVtQXTtGPS1GL3RoaXMuVVtOXVtOXTtmb3IodmFyIEc9TjtHPHRoaXMubTtHKyspdGhpcy5VW0ddW1BdKz1GKnRoaXMuVVtHXVtOXX1mb3IodmFyIHo9Tjt6PHRoaXMubTt6KyspdGhpcy5VW3pdW05dPS10aGlzLlVbel1bTl07dGhpcy5VW05dW05dPTErdGhpcy5VW05dW05dO2Zvcih2YXIgVz0wO1c8Ti0xO1crKyl0aGlzLlVbV11bTl09MH1lbHNle2Zvcih2YXIgWj0wO1o8dGhpcy5tO1orKyl0aGlzLlVbWl1bTl09MDt0aGlzLlVbTl1bTl09MX19aWYoaClmb3IodmFyIGo9dGhpcy5uLTE7aj49MDtqLS0pe2lmKGZ1bmN0aW9uKGR0LEplKXtyZXR1cm4gZHQmJkplfShqPGQsc1tqXSE9PTApKWZvcih2YXIgb2U9aisxO29lPGE7b2UrKyl7Zm9yKHZhciBLPTAsZWU9aisxO2VlPHRoaXMubjtlZSsrKUsrPXRoaXMuVltlZV1bal0qdGhpcy5WW2VlXVtvZV07Sz0tSy90aGlzLlZbaisxXVtqXTtmb3IodmFyIEo9aisxO0o8dGhpcy5uO0orKyl0aGlzLlZbSl1bb2VdKz1LKnRoaXMuVltKXVtqXX1mb3IodmFyIEg9MDtIPHRoaXMubjtIKyspdGhpcy5WW0hdW2pdPTA7dGhpcy5WW2pdW2pdPTF9Zm9yKHZhciBxPVItMSxRPTAsYWU9TWF0aC5wb3coMiwtNTIpLHVlPU1hdGgucG93KDIsLTk2Nik7Uj4wOyl7dmFyIGNlPXZvaWQgMCx0ZT12b2lkIDA7Zm9yKGNlPVItMjtjZT49LTEmJmNlIT09LTE7Y2UtLSlpZihNYXRoLmFicyhzW2NlXSk8PXVlK2FlKihNYXRoLmFicyh0aGlzLnNbY2VdKStNYXRoLmFicyh0aGlzLnNbY2UrMV0pKSl7c1tjZV09MDticmVha31pZihjZT09PVItMil0ZT00O2Vsc2V7dmFyIE5lPXZvaWQgMDtmb3IoTmU9Ui0xO05lPj1jZSYmTmUhPT1jZTtOZS0tKXt2YXIgc2U9KE5lIT09Uj9NYXRoLmFicyhzW05lXSk6MCkrKE5lIT09Y2UrMT9NYXRoLmFicyhzW05lLTFdKTowKTtpZihNYXRoLmFicyh0aGlzLnNbTmVdKTw9dWUrYWUqc2Upe3RoaXMuc1tOZV09MDticmVha319TmU9PT1jZT90ZT0zOk5lPT09Ui0xP3RlPTE6KHRlPTIsY2U9TmUpfXN3aXRjaChjZSsrLHRlKXtjYXNlIDE6e3ZhciBrZT1zW1ItMl07c1tSLTJdPTA7Zm9yKHZhciBSZT1SLTI7UmU+PWNlO1JlLS0pe3ZhciBDZT1uLmh5cG90KHRoaXMuc1tSZV0sa2UpLFBlPXRoaXMuc1tSZV0vQ2UsSWU9a2UvQ2U7aWYodGhpcy5zW1JlXT1DZSxSZSE9PWNlJiYoa2U9LUllKnNbUmUtMV0sc1tSZS0xXT1QZSpzW1JlLTFdKSxoKWZvcih2YXIgJGU9MDskZTx0aGlzLm47JGUrKylDZT1QZSp0aGlzLlZbJGVdW1JlXStJZSp0aGlzLlZbJGVdW1ItMV0sdGhpcy5WWyRlXVtSLTFdPS1JZSp0aGlzLlZbJGVdW1JlXStQZSp0aGlzLlZbJGVdW1ItMV0sdGhpcy5WWyRlXVtSZV09Q2V9fWJyZWFrO2Nhc2UgMjp7dmFyIHllPXNbY2UtMV07c1tjZS0xXT0wO2Zvcih2YXIgWD1jZTtYPFI7WCsrKXt2YXIgZmU9bi5oeXBvdCh0aGlzLnNbWF0seWUpLGhlPXRoaXMuc1tYXS9mZSxnZT15ZS9mZTtpZih0aGlzLnNbWF09ZmUseWU9LWdlKnNbWF0sc1tYXT1oZSpzW1hdLHUpZm9yKHZhciBuZT0wO25lPHRoaXMubTtuZSsrKWZlPWhlKnRoaXMuVVtuZV1bWF0rZ2UqdGhpcy5VW25lXVtjZS0xXSx0aGlzLlVbbmVdW2NlLTFdPS1nZSp0aGlzLlVbbmVdW1hdK2hlKnRoaXMuVVtuZV1bY2UtMV0sdGhpcy5VW25lXVtYXT1mZX19YnJlYWs7Y2FzZSAzOnt2YXIgdmU9TWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5hYnModGhpcy5zW1ItMV0pLE1hdGguYWJzKHRoaXMuc1tSLTJdKSksTWF0aC5hYnMoc1tSLTJdKSksTWF0aC5hYnModGhpcy5zW2NlXSkpLE1hdGguYWJzKHNbY2VdKSksVT10aGlzLnNbUi0xXS92ZSxUZT10aGlzLnNbUi0yXS92ZSxpZT1zW1ItMl0vdmUsRWU9dGhpcy5zW2NlXS92ZSxBZT1zW2NlXS92ZSxHZT0oKFRlK1UpKihUZS1VKStpZSppZSkvMixCZT1VKmllKihVKmllKSxtZT0wOyhmdW5jdGlvbihkdCxKZSl7cmV0dXJuIGR0fHxKZX0pKEdlIT09MCxCZSE9PTApJiYobWU9TWF0aC5zcXJ0KEdlKkdlK0JlKSxHZTwwJiYobWU9LW1lKSxtZT1CZS8oR2UrbWUpKTtmb3IodmFyIEhlPShFZStVKSooRWUtVSkrbWUsT2U9RWUqQWUsZXQ9Y2U7ZXQ8Ui0xO2V0Kyspe3ZhciBidD1uLmh5cG90KEhlLE9lKSxrdD1IZS9idCx2dD1PZS9idDtpZihldCE9PWNlJiYoc1tldC0xXT1idCksSGU9a3QqdGhpcy5zW2V0XSt2dCpzW2V0XSxzW2V0XT1rdCpzW2V0XS12dCp0aGlzLnNbZXRdLE9lPXZ0KnRoaXMuc1tldCsxXSx0aGlzLnNbZXQrMV09a3QqdGhpcy5zW2V0KzFdLGgpZm9yKHZhciBydD0wO3J0PHRoaXMubjtydCsrKWJ0PWt0KnRoaXMuVltydF1bZXRdK3Z0KnRoaXMuVltydF1bZXQrMV0sdGhpcy5WW3J0XVtldCsxXT0tdnQqdGhpcy5WW3J0XVtldF0ra3QqdGhpcy5WW3J0XVtldCsxXSx0aGlzLlZbcnRdW2V0XT1idDtpZihidD1uLmh5cG90KEhlLE9lKSxrdD1IZS9idCx2dD1PZS9idCx0aGlzLnNbZXRdPWJ0LEhlPWt0KnNbZXRdK3Z0KnRoaXMuc1tldCsxXSx0aGlzLnNbZXQrMV09LXZ0KnNbZXRdK2t0KnRoaXMuc1tldCsxXSxPZT12dCpzW2V0KzFdLHNbZXQrMV09a3Qqc1tldCsxXSx1JiZldDx0aGlzLm0tMSlmb3IodmFyIHl0PTA7eXQ8dGhpcy5tO3l0KyspYnQ9a3QqdGhpcy5VW3l0XVtldF0rdnQqdGhpcy5VW3l0XVtldCsxXSx0aGlzLlVbeXRdW2V0KzFdPS12dCp0aGlzLlVbeXRdW2V0XStrdCp0aGlzLlVbeXRdW2V0KzFdLHRoaXMuVVt5dF1bZXRdPWJ0fXNbUi0yXT1IZSxRPVErMX1icmVhaztjYXNlIDQ6e2lmKHRoaXMuc1tjZV08PTAmJih0aGlzLnNbY2VdPXRoaXMuc1tjZV08MD8tdGhpcy5zW2NlXTowLGgpKWZvcih2YXIgVWU9MDtVZTw9cTtVZSsrKXRoaXMuVltVZV1bY2VdPS10aGlzLlZbVWVdW2NlXTtmb3IoO2NlPHEmJiEodGhpcy5zW2NlXT49dGhpcy5zW2NlKzFdKTspe3ZhciB0dD10aGlzLnNbY2VdO2lmKHRoaXMuc1tjZV09dGhpcy5zW2NlKzFdLHRoaXMuc1tjZSsxXT10dCxoJiZjZTx0aGlzLm4tMSlmb3IodmFyIGh0PTA7aHQ8dGhpcy5uO2h0KyspdHQ9dGhpcy5WW2h0XVtjZSsxXSx0aGlzLlZbaHRdW2NlKzFdPXRoaXMuVltodF1bY2VdLHRoaXMuVltodF1bY2VdPXR0O2lmKHUmJmNlPHRoaXMubS0xKWZvcih2YXIgRXQ9MDtFdDx0aGlzLm07RXQrKyl0dD10aGlzLlVbRXRdW2NlKzFdLHRoaXMuVVtFdF1bY2UrMV09dGhpcy5VW0V0XVtjZV0sdGhpcy5VW0V0XVtjZV09dHQ7Y2UrK31RPTAsUi0tfWJyZWFrfX12YXIgZXI9e1U6dGhpcy5VLFY6dGhpcy5WLFM6dGhpcy5zfTtyZXR1cm4gZXJ9LG4uaHlwb3Q9ZnVuY3Rpb24oaSxhKXt2YXIgcz12b2lkIDA7cmV0dXJuIE1hdGguYWJzKGkpPk1hdGguYWJzKGEpPyhzPWEvaSxzPU1hdGguYWJzKGkpKk1hdGguc3FydCgxK3MqcykpOmEhPTA/KHM9aS9hLHM9TWF0aC5hYnMoYSkqTWF0aC5zcXJ0KDErcypzKSk6cz0wLHN9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe2Zvcih2YXIgaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZi5rZXksZil9fXJldHVybiBvKHMsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihsLHUsaCl7cmV0dXJuIHUmJnMobC5wcm90b3R5cGUsdSksaCYmcyhsLGgpLGx9fSgpO2Z1bmN0aW9uIGkocyxsKXtpZighKHMgaW5zdGFuY2VvZiBsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLGY9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLGQ9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2kodGhpcyxzKSx0aGlzLnNlcXVlbmNlMT1sLHRoaXMuc2VxdWVuY2UyPXUsdGhpcy5tYXRjaF9zY29yZT1oLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1mLHRoaXMuZ2FwX3BlbmFsdHk9ZCx0aGlzLmlNYXg9bC5sZW5ndGgrMSx0aGlzLmpNYXg9dS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBwPTA7cDx0aGlzLmlNYXg7cCsrKXt0aGlzLmdyaWRbcF09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBtPTA7bTx0aGlzLmpNYXg7bSsrKXRoaXMuZ3JpZFtwXVttXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGc9MDtnPHRoaXMuaU1heDtnKyspe3RoaXMudHJhY2ViYWNrR3JpZFtnXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIHk9MDt5PHRoaXMuak1heDt5KyspdGhpcy50cmFjZWJhY2tHcmlkW2ddW3ldPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gbyhzLCJOZWVkbGVtYW5XdW5zY2giKSxuKHMsW3trZXk6ImdldFNjb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NvcmV9LCJnZXRTY29yZSIpfSx7a2V5OiJnZXRBbGlnbm1lbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImdldEFsaWdubWVudHMiKX0se2tleToiY29tcHV0ZUdyaWRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB1PTE7dTx0aGlzLmpNYXg7dSsrKXRoaXMuZ3JpZFswXVt1XT10aGlzLmdyaWRbMF1bdS0xXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFswXVt1XT1bITEsITEsITBdO2Zvcih2YXIgaD0xO2g8dGhpcy5pTWF4O2grKyl0aGlzLmdyaWRbaF1bMF09dGhpcy5ncmlkW2gtMV1bMF0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbaF1bMF09WyExLCEwLCExXTtmb3IodmFyIGY9MTtmPHRoaXMuaU1heDtmKyspZm9yKHZhciBkPTE7ZDx0aGlzLmpNYXg7ZCsrKXt2YXIgcD12b2lkIDA7dGhpcy5zZXF1ZW5jZTFbZi0xXT09PXRoaXMuc2VxdWVuY2UyW2QtMV0/cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWF0Y2hfc2NvcmU6cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWlzbWF0Y2hfcGVuYWx0eTt2YXIgbT10aGlzLmdyaWRbZi0xXVtkXSt0aGlzLmdhcF9wZW5hbHR5LGc9dGhpcy5ncmlkW2ZdW2QtMV0rdGhpcy5nYXBfcGVuYWx0eSx5PVtwLG0sZ10sdj10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyh5KTt0aGlzLmdyaWRbZl1bZF09eVt2WzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbZl1bZF09W3YuaW5jbHVkZXMoMCksdi5pbmNsdWRlcygxKSx2LmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfSwiY29tcHV0ZUdyaWRzIil9LHtrZXk6ImFsaWdubWVudFRyYWNlYmFjayIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciB1PVtdO2Zvcih1LnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7dVswXTspe3ZhciBoPXVbMF0sZj10aGlzLnRyYWNlYmFja0dyaWRbaC5wb3NbMF1dW2gucG9zWzFdXTtmWzBdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0tMSxoLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW2gucG9zWzFdLTFdK2guc2VxMn0pLGZbMV0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOiItIitoLnNlcTJ9KSxmWzJdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0saC5wb3NbMV0tMV0sc2VxMToiLSIraC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksaC5wb3NbMF09PT0wJiZoLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6aC5zZXExLHNlcXVlbmNlMjpoLnNlcTJ9KSx1LnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImFsaWdubWVudFRyYWNlYmFjayIpfSx7a2V5OiJnZXRBbGxJbmRleGVzIix2YWx1ZTpvKGZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPVtdLGQ9LTE7KGQ9dS5pbmRleE9mKGgsZCsxKSkhPT0tMTspZi5wdXNoKGQpO3JldHVybiBmfSwiZ2V0QWxsSW5kZXhlcyIpfSx7a2V5OiJhcnJheUFsbE1heEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyh1LE1hdGgubWF4LmFwcGx5KG51bGwsdSkpfSwiYXJyYXlBbGxNYXhJbmRleGVzIil9XSksc30oKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1vKGZ1bmN0aW9uKCl7fSwibGF5b3V0QmFzZSIpO24uRkRMYXlvdXQ9cigxOCksbi5GRExheW91dENvbnN0YW50cz1yKDQpLG4uRkRMYXlvdXRFZGdlPXIoMTkpLG4uRkRMYXlvdXROb2RlPXIoMjApLG4uRGltZW5zaW9uRD1yKDIxKSxuLkhhc2hNYXA9cigyMiksbi5IYXNoU2V0PXIoMjMpLG4uSUdlb21ldHJ5PXIoOCksbi5JTWF0aD1yKDkpLG4uSW50ZWdlcj1yKDEwKSxuLlBvaW50PXIoMTIpLG4uUG9pbnREPXIoNSksbi5SYW5kb21TZWVkPXIoMTYpLG4uUmVjdGFuZ2xlRD1yKDEzKSxuLlRyYW5zZm9ybT1yKDE3KSxuLlVuaXF1ZUlER2VuZXJldG9yPXIoMTQpLG4uUXVpY2tzb3J0PXIoMjUpLG4uTGlua2VkTGlzdD1yKDExKSxuLkxHcmFwaE9iamVjdD1yKDIpLG4uTEdyYXBoPXIoNiksbi5MRWRnZT1yKDEpLG4uTEdyYXBoTWFuYWdlcj1yKDcpLG4uTE5vZGU9cigzKSxuLkxheW91dD1yKDE1KSxuLkxheW91dENvbnN0YW50cz1yKDApLG4uTmVlZGxlbWFuV3Vuc2NoPXIoMjcpLG4uTWF0cml4PXIoMjQpLG4uU1ZEPXIoMjYpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmxpc3RlbmVycz1bXX1vKG4sIkVtaXR0ZXIiKTt2YXIgaT1uLnByb3RvdHlwZTtpLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGEscyl7dGhpcy5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6YSxjYWxsYmFjazpzfSl9LGkucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2w+PTA7bC0tKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTt1LmV2ZW50PT09YSYmdS5jYWxsYmFjaz09PXMmJnRoaXMubGlzdGVuZXJzLnNwbGljZShsLDEpfX0saS5lbWl0PWZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPTA7bDx0aGlzLmxpc3RlbmVycy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTthPT09dS5ldmVudCYmdS5jYWxsYmFjayhzKX19LHQuZXhwb3J0cz1ufV0pfSl9KTt2YXIgbUY9RWkoKEliLHBGKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIEliPT0ib2JqZWN0IiYmdHlwZW9mIHBGPT0ib2JqZWN0Ij9wRi5leHBvcnRzPXIoZEYoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJsYXlvdXQtYmFzZSJdLHIpOnR5cGVvZiBJYj09Im9iamVjdCI/SWIuY29zZUJhc2U9cihkRigpKTplLmNvc2VCYXNlPXIoZS5sYXlvdXRCYXNlKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoSWIsZnVuY3Rpb24odCl7cmV0dXJuKCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXs0NTooYSxzLGwpPT57dmFyIHU9e307dS5sYXlvdXRCYXNlPWwoNTUxKSx1LkNvU0VDb25zdGFudHM9bCg4MDYpLHUuQ29TRUVkZ2U9bCg3NjcpLHUuQ29TRUdyYXBoPWwoODgwKSx1LkNvU0VHcmFwaE1hbmFnZXI9bCg1NzgpLHUuQ29TRUxheW91dD1sKDc2NSksdS5Db1NFTm9kZT1sKDk5MSksdS5Db25zdHJhaW50SGFuZGxlcj1sKDkwMiksYS5leHBvcnRzPXV9LDgwNjooYSxzLGwpPT57dmFyIHU9bCg1NTEpLkZETGF5b3V0Q29uc3RhbnRzO2Z1bmN0aW9uIGgoKXt9byhoLCJDb1NFQ29uc3RhbnRzIik7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2guREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORz0hMSxoLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049dS5ERUZBVUxUX0VER0VfTEVOR1RILGguREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTj02MCxoLlRJTEU9ITAsaC5USUxJTkdfUEFERElOR19WRVJUSUNBTD0xMCxoLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9MTAsaC5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMCxoLkVORk9SQ0VfQ09OU1RSQUlOVFM9ITAsaC5BUFBMWV9MQVlPVVQ9ITAsaC5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUz0hMCxoLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSEwLGguUFVSRV9JTkNSRU1FTlRBTD1oLkRFRkFVTFRfSU5DUkVNRU5UQUwsYS5leHBvcnRzPWh9LDc2NzooYSxzLGwpPT57dmFyIHU9bCg1NTEpLkZETGF5b3V0RWRnZTtmdW5jdGlvbiBoKGQscCxtKXt1LmNhbGwodGhpcyxkLHAsbSl9byhoLCJDb1NFRWRnZSIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiB1KWhbZl09dVtmXTthLmV4cG9ydHM9aH0sODgwOihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuTEdyYXBoO2Z1bmN0aW9uIGgoZCxwLG0pe3UuY2FsbCh0aGlzLGQscCxtKX1vKGgsIkNvU0VHcmFwaCIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiB1KWhbZl09dVtmXTthLmV4cG9ydHM9aH0sNTc4OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuTEdyYXBoTWFuYWdlcjtmdW5jdGlvbiBoKGQpe3UuY2FsbCh0aGlzLGQpfW8oaCwiQ29TRUdyYXBoTWFuYWdlciIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiB1KWhbZl09dVtmXTthLmV4cG9ydHM9aH0sNzY1OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXQsaD1sKDU3OCksZj1sKDg4MCksZD1sKDk5MSkscD1sKDc2NyksbT1sKDgwNiksZz1sKDkwMikseT1sKDU1MSkuRkRMYXlvdXRDb25zdGFudHMsdj1sKDU1MSkuTGF5b3V0Q29uc3RhbnRzLHg9bCg1NTEpLlBvaW50LGI9bCg1NTEpLlBvaW50RCx3PWwoNTUxKS5EaW1lbnNpb25ELF89bCg1NTEpLkxheW91dCxUPWwoNTUxKS5JbnRlZ2VyLEU9bCg1NTEpLklHZW9tZXRyeSxMPWwoNTUxKS5MR3JhcGgsUz1sKDU1MSkuVHJhbnNmb3JtLEE9bCg1NTEpLkxpbmtlZExpc3Q7ZnVuY3Rpb24gSSgpe3UuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fSx0aGlzLmNvbnN0cmFpbnRzPXt9fW8oSSwiQ29TRUxheW91dCIpLEkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgRCBpbiB1KUlbRF09dVtEXTtJLnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgaz1uZXcgaCh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9ayxrfSxJLnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IGYobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixrKX0sSS5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IGQodGhpcy5ncmFwaE1hbmFnZXIsayl9LEkucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBwKG51bGwsbnVsbCxrKX0sSS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt1LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLmlzU3ViTGF5b3V0fHwobS5ERUZBVUxUX0VER0VfTEVOR1RIPDEwP3RoaXMuaWRlYWxFZGdlTGVuZ3RoPTEwOnRoaXMuaWRlYWxFZGdlTGVuZ3RoPW0uREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249bS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLmdyYXZpdHlDb25zdGFudD15LkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPXkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLnBydW5lZE5vZGVzQWxsPVtdLHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zPTAsdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnM9MCx0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSExKX0sSS5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dS5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyLmNhbGwodGhpcyksdGhpcy5jb29saW5nQ3ljbGU9MCx0aGlzLm1heENvb2xpbmdDeWNsZT10aGlzLm1heEl0ZXJhdGlvbnMveS5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QsdGhpcy5maW5hbFRlbXBlcmF0dXJlPS4wNCx0aGlzLmNvb2xpbmdBZGp1c3Rlcj0xfSxJLnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oKXt2YXIgaz12LkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtyZXR1cm4gayYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSxJLnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5ub2Rlc1dpdGhHcmF2aXR5PXRoaXMuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSksdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLmNhbGNJZGVhbEVkZ2VMZW5ndGhzKCksdGhpcy5pbmNyZW1lbnRhbCl7aWYobS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCl7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgUj1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksQz10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKFApe3JldHVybiBSLmhhcyhQKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKEMpfX1lbHNle3ZhciBrPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKGsubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoayk7ZWxzZXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBSPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxDPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oTyl7cmV0dXJuIFIuaGFzKE8pfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oQyksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aD4wJiYoZy5oYW5kbGVDb25zdHJhaW50cyh0aGlzKSx0aGlzLmluaXRDb25zdHJhaW50VmFyaWFibGVzKCkpLHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksbS5BUFBMWV9MQVlPVVQmJnRoaXMucnVuU3ByaW5nRW1iZWRkZXIoKSwhMH0sSS5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyV5LkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgaz1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksUj10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKE4pe3JldHVybiBrLmhhcyhOKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKFIpLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLG0uUFVSRV9JTkNSRU1FTlRBTD90aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLzI6dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTH1lbHNlIHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITA7dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMrK31pZih0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlyZXR1cm4hMDt0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MCYmKHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpKSxtLlBVUkVfSU5DUkVNRU5UQUw/dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTC8yKigoMTAwLXRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKS8xMDApOnRoaXMuY29vbGluZ0ZhY3Rvcj15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgQz0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLE89dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNUcmVlR3Jvd2luZ3x8dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNHcm93dGhGaW5pc2hlZDtyZXR1cm4gdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpLHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhDLE8pLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKSx0aGlzLm1vdmVOb2RlcygpLHRoaXMuYW5pbWF0ZSgpLCExfSxJLnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksUj17fSxDPTA7QzxrLmxlbmd0aDtDKyspe3ZhciBPPWtbQ10ucmVjdCxOPWtbQ10uaWQ7UltOXT17aWQ6Tix4Ok8uZ2V0Q2VudGVyWCgpLHk6Ty5nZXRDZW50ZXJZKCksdzpPLndpZHRoLGg6Ty5oZWlnaHR9fXJldHVybiBSfSxJLnByb3RvdHlwZS5ydW5TcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZD0yNSx0aGlzLmFuaW1hdGlvblBlcmlvZD10aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7dmFyIGs9ITE7aWYoeS5BTklNQVRFPT09ImR1cmluZyIpdGhpcy5lbWl0KCJsYXlvdXRzdGFydGVkIik7ZWxzZXtmb3IoOyFrOylrPXRoaXMudGljaygpO3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpfX0sSS5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMuZ2V0QWxsTm9kZXMoKSxSLEM9MDtDPGsubGVuZ3RoO0MrKylSPWtbQ10sUi5jYWxjdWxhdGVEaXNwbGFjZW1lbnQoKTtPYmplY3Qua2V5cyh0aGlzLmNvbnN0cmFpbnRzKS5sZW5ndGg+MCYmdGhpcy51cGRhdGVEaXNwbGFjZW1lbnRzKCk7Zm9yKHZhciBDPTA7QzxrLmxlbmd0aDtDKyspUj1rW0NdLFIubW92ZSgpfSxJLnByb3RvdHlwZS5pbml0Q29uc3RyYWludFZhcmlhYmxlcz1mdW5jdGlvbigpe3ZhciBrPXRoaXM7dGhpcy5pZFRvTm9kZU1hcD1uZXcgTWFwLHRoaXMuZml4ZWROb2RlU2V0PW5ldyBTZXQ7Zm9yKHZhciBSPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksQz0wO0M8Ui5sZW5ndGg7QysrKXt2YXIgTz1SW0NdO3RoaXMuaWRUb05vZGVNYXAuc2V0KE8uaWQsTyl9dmFyIE49byhmdW5jdGlvbiBlZShKKXtmb3IodmFyIEg9Si5nZXRDaGlsZCgpLmdldE5vZGVzKCkscSxRPTAsYWU9MDthZTxILmxlbmd0aDthZSsrKXE9SFthZV0scS5nZXRDaGlsZCgpPT1udWxsP2suZml4ZWROb2RlU2V0LmhhcyhxLmlkKSYmKFErPTEwMCk6USs9ZWUocSk7cmV0dXJuIFF9LCJjYWxjdWxhdGVDb21wb3VuZFdlaWdodCIpO2lmKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCl7dGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oSCl7ay5maXhlZE5vZGVTZXQuYWRkKEgubm9kZUlkKX0pO2Zvcih2YXIgUj10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE8sQz0wO0M8Ui5sZW5ndGg7QysrKWlmKE89UltDXSxPLmdldENoaWxkKCkhPW51bGwpe3ZhciBQPU4oTyk7UD4wJiYoTy5maXhlZE5vZGVXZWlnaHQ9UCl9fWlmKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KXt2YXIgRj1uZXcgTWFwLEI9bmV3IE1hcDtpZih0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQ9bmV3IE1hcCx0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudD1uZXcgTWFwLHRoaXMuZml4ZWROb2Rlc09uSG9yaXpvbnRhbD1uZXcgU2V0LHRoaXMuZml4ZWROb2Rlc09uVmVydGljYWw9bmV3IFNldCx0aGlzLmZpeGVkTm9kZVNldC5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtrLmZpeGVkTm9kZXNPbkhvcml6b250YWwuYWRkKGVlKSxrLmZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZChlZSl9KSx0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIEc9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLEM9MDtDPEcubGVuZ3RoO0MrKyl0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuc2V0KCJkdW1teSIrQyxbXSksR1tDXS5mb3JFYWNoKGZ1bmN0aW9uKEope0Yuc2V0KEosImR1bW15IitDKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KCJkdW1teSIrQykucHVzaChKKSxrLmZpeGVkTm9kZVNldC5oYXMoSikmJmsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoImR1bW15IitDKX0pO2lmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgej10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxDPTA7Qzx6Lmxlbmd0aDtDKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KCJkdW1teSIrQyxbXSkseltDXS5mb3JFYWNoKGZ1bmN0aW9uKEope0Iuc2V0KEosImR1bW15IitDKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoImR1bW15IitDKS5wdXNoKEopLGsuZml4ZWROb2RlU2V0LmhhcyhKKSYmay5maXhlZE5vZGVzT25WZXJ0aWNhbC5hZGQoImR1bW15IitDKX0pfWlmKG0uUkVMQVhfTU9WRU1FTlRfT05fQ09OU1RSQUlOVFMpdGhpcy5zaHVmZmxlPWZ1bmN0aW9uKGVlKXt2YXIgSixILHE7Zm9yKHE9ZWUubGVuZ3RoLTE7cT49MiplZS5sZW5ndGgvMztxLS0pSj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHErMSkpLEg9ZWVbcV0sZWVbcV09ZWVbSl0sZWVbSl09SDtyZXR1cm4gZWV9LHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbD1bXSx0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsPVtdLHRoaXMubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbD1uZXcgTWFwLHRoaXMubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWw9bmV3IE1hcCx0aGlzLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWw9bmV3IE1hcCx0aGlzLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsPW5ldyBNYXAsdGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihlZSl7aWYoZWUubGVmdCl7dmFyIEo9Ri5oYXMoZWUubGVmdCk/Ri5nZXQoZWUubGVmdCk6ZWUubGVmdCxIPUYuaGFzKGVlLnJpZ2h0KT9GLmdldChlZS5yaWdodCk6ZWUucmlnaHQ7ay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKEopfHwoay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLnB1c2goSiksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChKLFtdKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKEopP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoSixrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KEopWzBdKS5nZXRDZW50ZXJYKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoSixrLmlkVG9Ob2RlTWFwLmdldChKKS5nZXRDZW50ZXJYKCkpKSxrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuaW5jbHVkZXMoSCl8fChrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwucHVzaChIKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuc2V0KEgsW10pLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSCk/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChILGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoSClbMF0pLmdldENlbnRlclgoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChILGsuaWRUb05vZGVNYXAuZ2V0KEgpLmdldENlbnRlclgoKSkpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5nZXQoSikucHVzaCh7cmlnaHQ6SCxnYXA6ZWUuZ2FwfSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChIKS5wdXNoKHtsZWZ0OkosZ2FwOmVlLmdhcH0pfWVsc2V7dmFyIHE9Qi5oYXMoZWUudG9wKT9CLmdldChlZS50b3ApOmVlLnRvcCxRPUIuaGFzKGVlLmJvdHRvbSk/Qi5nZXQoZWUuYm90dG9tKTplZS5ib3R0b207ay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyhxKXx8KGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChxKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLnNldChxLFtdKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMocSk/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQocSxrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQocSlbMF0pLmdldENlbnRlclkoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQocSxrLmlkVG9Ob2RlTWFwLmdldChxKS5nZXRDZW50ZXJZKCkpKSxrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKFEpfHwoay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5wdXNoKFEpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuc2V0KFEsW10pLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhRKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChRLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChRKVswXSkuZ2V0Q2VudGVyWSgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChRLGsuaWRUb05vZGVNYXAuZ2V0KFEpLmdldENlbnRlclkoKSkpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KHEpLnB1c2goe2JvdHRvbTpRLGdhcDplZS5nYXB9KSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLmdldChRKS5wdXNoKHt0b3A6cSxnYXA6ZWUuZ2FwfSl9fSk7ZWxzZXt2YXIgVz1uZXcgTWFwLFo9bmV3IE1hcDt0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZihlZS5sZWZ0KXt2YXIgSj1GLmhhcyhlZS5sZWZ0KT9GLmdldChlZS5sZWZ0KTplZS5sZWZ0LEg9Ri5oYXMoZWUucmlnaHQpP0YuZ2V0KGVlLnJpZ2h0KTplZS5yaWdodDtXLmhhcyhKKT9XLmdldChKKS5wdXNoKEgpOlcuc2V0KEosW0hdKSxXLmhhcyhIKT9XLmdldChIKS5wdXNoKEopOlcuc2V0KEgsW0pdKX1lbHNle3ZhciBxPUIuaGFzKGVlLnRvcCk/Qi5nZXQoZWUudG9wKTplZS50b3AsUT1CLmhhcyhlZS5ib3R0b20pP0IuZ2V0KGVlLmJvdHRvbSk6ZWUuYm90dG9tO1ouaGFzKHEpP1ouZ2V0KHEpLnB1c2goUSk6Wi5zZXQocSxbUV0pLFouaGFzKFEpP1ouZ2V0KFEpLnB1c2gocSk6Wi5zZXQoUSxbcV0pfX0pO3ZhciBqPW8oZnVuY3Rpb24oSixIKXt2YXIgcT1bXSxRPVtdLGFlPW5ldyBBLHVlPW5ldyBTZXQsY2U9MDtyZXR1cm4gSi5mb3JFYWNoKGZ1bmN0aW9uKHRlLE5lKXtpZighdWUuaGFzKE5lKSl7cVtjZV09W10sUVtjZV09ITE7dmFyIHNlPU5lO2ZvcihhZS5wdXNoKHNlKSx1ZS5hZGQoc2UpLHFbY2VdLnB1c2goc2UpO2FlLmxlbmd0aCE9MDspe3NlPWFlLnNoaWZ0KCksSC5oYXMoc2UpJiYoUVtjZV09ITApO3ZhciBrZT1KLmdldChzZSk7a2UuZm9yRWFjaChmdW5jdGlvbihSZSl7dWUuaGFzKFJlKXx8KGFlLnB1c2goUmUpLHVlLmFkZChSZSkscVtjZV0ucHVzaChSZSkpfSl9Y2UrK319KSx7Y29tcG9uZW50czpxLGlzRml4ZWQ6UX19LCJjb25zdHJ1Y3RDb21wb25lbnRzIiksb2U9aihXLGsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbCk7dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsPW9lLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWw9b2UuaXNGaXhlZDt2YXIgSz1qKFosay5maXhlZE5vZGVzT25WZXJ0aWNhbCk7dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbD1LLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPblZlcnRpY2FsPUsuaXNGaXhlZH19fSxJLnByb3RvdHlwZS51cGRhdGVEaXNwbGFjZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcztpZih0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQmJnRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKEspe3ZhciBlZT1rLmlkVG9Ob2RlTWFwLmdldChLLm5vZGVJZCk7ZWUuZGlzcGxhY2VtZW50WD0wLGVlLmRpc3BsYWNlbWVudFk9MH0pLHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCl7aWYodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKWZvcih2YXIgUj10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsQz0wO0M8Ui5sZW5ndGg7QysrKXtmb3IodmFyIE89MCxOPTA7TjxSW0NdLmxlbmd0aDtOKyspe2lmKHRoaXMuZml4ZWROb2RlU2V0LmhhcyhSW0NdW05dKSl7Tz0wO2JyZWFrfU8rPXRoaXMuaWRUb05vZGVNYXAuZ2V0KFJbQ11bTl0pLmRpc3BsYWNlbWVudFh9Zm9yKHZhciBQPU8vUltDXS5sZW5ndGgsTj0wO048UltDXS5sZW5ndGg7TisrKXRoaXMuaWRUb05vZGVNYXAuZ2V0KFJbQ11bTl0pLmRpc3BsYWNlbWVudFg9UH1pZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyIEY9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsQz0wO0M8Ri5sZW5ndGg7QysrKXtmb3IodmFyIEI9MCxOPTA7TjxGW0NdLmxlbmd0aDtOKyspe2lmKHRoaXMuZml4ZWROb2RlU2V0LmhhcyhGW0NdW05dKSl7Qj0wO2JyZWFrfUIrPXRoaXMuaWRUb05vZGVNYXAuZ2V0KEZbQ11bTl0pLmRpc3BsYWNlbWVudFl9Zm9yKHZhciBHPUIvRltDXS5sZW5ndGgsTj0wO048RltDXS5sZW5ndGg7TisrKXRoaXMuaWRUb05vZGVNYXAuZ2V0KEZbQ11bTl0pLmRpc3BsYWNlbWVudFk9R319aWYodGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpaWYobS5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUyl0aGlzLnRvdGFsSXRlcmF0aW9ucyUxMD09MCYmKHRoaXMuc2h1ZmZsZSh0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwpLHRoaXMuc2h1ZmZsZSh0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsKSksdGhpcy5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmZvckVhY2goZnVuY3Rpb24oSyl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMoSykpe3ZhciBlZT0wO2suZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSyk/ZWU9ay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChLKVswXSkuZGlzcGxhY2VtZW50WDplZT1rLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRYLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5nZXQoSykuZm9yRWFjaChmdW5jdGlvbihKKXtpZihKLnJpZ2h0KXt2YXIgSD1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuZ2V0KEoucmlnaHQpLWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSyktZWU7SDxKLmdhcCYmKGVlLT1KLmdhcC1IKX1lbHNle3ZhciBIPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSyktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChKLmxlZnQpK2VlO0g8Si5nYXAmJihlZSs9Si5nYXAtSCl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChLLGsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSykrZWUpLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSyk/ay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChLKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFg9ZWV9KTprLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRYPWVlfX0pLHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwuZm9yRWFjaChmdW5jdGlvbihLKXtpZighay5maXhlZE5vZGVzT25Ib3Jpem9udGFsLmhhcyhLKSl7dmFyIGVlPTA7ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKEspP2VlPWsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChLKVswXSkuZGlzcGxhY2VtZW50WTplZT1rLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRZLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KEspLmZvckVhY2goZnVuY3Rpb24oSil7aWYoSi5ib3R0b20pe3ZhciBIPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KEouYm90dG9tKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChLKS1lZTtIPEouZ2FwJiYoZWUtPUouZ2FwLUgpfWVsc2V7dmFyIEg9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoSyktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoSi50b3ApK2VlO0g8Si5nYXAmJihlZSs9Si5nYXAtSCl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoSyxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChLKStlZSksay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKEspP2suZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChLKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFk9ZWV9KTprLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRZPWVlfX0pO2Vsc2V7Zm9yKHZhciBDPTA7Qzx0aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWwubGVuZ3RoO0MrKyl7dmFyIHo9dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsW0NdO2lmKHRoaXMuZml4ZWRDb21wb25lbnRzT25Ib3Jpem9udGFsW0NdKWZvcih2YXIgTj0wO048ei5sZW5ndGg7TisrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCh6W05dKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFg9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFg9MDtlbHNle2Zvcih2YXIgVz0wLFo9MCxOPTA7Tjx6Lmxlbmd0aDtOKyspaWYodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyh6W05dKSl7dmFyIGo9dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCh6W05dKTtXKz1qLmxlbmd0aCp0aGlzLmlkVG9Ob2RlTWFwLmdldChqWzBdKS5kaXNwbGFjZW1lbnRYLForPWoubGVuZ3RofWVsc2UgVys9dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WCxaKys7Zm9yKHZhciBvZT1XL1osTj0wO048ei5sZW5ndGg7TisrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCh6W05dKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFg9b2V9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCh6W05dKS5kaXNwbGFjZW1lbnRYPW9lfX1mb3IodmFyIEM9MDtDPHRoaXMuY29tcG9uZW50c09uVmVydGljYWwubGVuZ3RoO0MrKyl7dmFyIHo9dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbFtDXTtpZih0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWxbQ10pZm9yKHZhciBOPTA7Tjx6Lmxlbmd0aDtOKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKHpbTl0pP3RoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCh6W05dKS5mb3JFYWNoKGZ1bmN0aW9uKEgpe2suaWRUb05vZGVNYXAuZ2V0KEgpLmRpc3BsYWNlbWVudFk9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFk9MDtlbHNle2Zvcih2YXIgVz0wLFo9MCxOPTA7Tjx6Lmxlbmd0aDtOKyspaWYodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKHpbTl0pKXt2YXIgaj10aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoeltOXSk7Vys9ai5sZW5ndGgqdGhpcy5pZFRvTm9kZU1hcC5nZXQoalswXSkuZGlzcGxhY2VtZW50WSxaKz1qLmxlbmd0aH1lbHNlIFcrPXRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFksWisrO2Zvcih2YXIgb2U9Vy9aLE49MDtOPHoubGVuZ3RoO04rKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KHpbTl0pLmZvckVhY2goZnVuY3Rpb24oYWUpe2suaWRUb05vZGVNYXAuZ2V0KGFlKS5kaXNwbGFjZW1lbnRZPW9lfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WT1vZX19fX0sSS5wcm90b3R5cGUuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25Ubz1mdW5jdGlvbigpe3ZhciBrPVtdLFIsQz10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSxPPUMubGVuZ3RoLE47Zm9yKE49MDtOPE87TisrKVI9Q1tOXSxSLnVwZGF0ZUNvbm5lY3RlZCgpLFIuaXNDb25uZWN0ZWR8fChrPWsuY29uY2F0KFIuZ2V0Tm9kZXMoKSkpO3JldHVybiBrfSxJLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIGs9W107az1rLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTt2YXIgUj1uZXcgU2V0LEM7Zm9yKEM9MDtDPGsubGVuZ3RoO0MrKyl7dmFyIE89a1tDXTtpZighUi5oYXMoTykpe3ZhciBOPU8uZ2V0U291cmNlKCksUD1PLmdldFRhcmdldCgpO2lmKE49PVApTy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgYiksTy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgYiksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhPKSxSLmFkZChPKTtlbHNle3ZhciBGPVtdO2lmKEY9Ri5jb25jYXQoTi5nZXRFZGdlTGlzdFRvTm9kZShQKSksRj1GLmNvbmNhdChQLmdldEVkZ2VMaXN0VG9Ob2RlKE4pKSwhUi5oYXMoRlswXSkpe2lmKEYubGVuZ3RoPjEpe3ZhciBCO2ZvcihCPTA7QjxGLmxlbmd0aDtCKyspe3ZhciBHPUZbQl07Ry5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgYiksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhHKX19Ri5mb3JFYWNoKGZ1bmN0aW9uKHope1IuYWRkKHopfSl9fX1pZihSLnNpemU9PWsubGVuZ3RoKWJyZWFrfX0sSS5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhZGlhbGx5PWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1uZXcgeCgwLDApLEM9TWF0aC5jZWlsKE1hdGguc3FydChrLmxlbmd0aCkpLE89MCxOPTAsUD0wLEY9bmV3IGIoMCwwKSxCPTA7QjxrLmxlbmd0aDtCKyspe0IlQz09MCYmKFA9MCxOPU8sQiE9MCYmKE4rPW0uREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTiksTz0wKTt2YXIgRz1rW0JdLHo9Xy5maW5kQ2VudGVyT2ZUcmVlKEcpO1IueD1QLFIueT1OLEY9SS5yYWRpYWxMYXlvdXQoRyx6LFIpLEYueT5PJiYoTz1NYXRoLmZsb29yKEYueSkpLFA9TWF0aC5mbG9vcihGLngrbS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKX10aGlzLnRyYW5zZm9ybShuZXcgYih2LldPUkxEX0NFTlRFUl9YLUYueC8yLHYuV09STERfQ0VOVEVSX1ktRi55LzIpKX0sSS5yYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oayxSLEMpe3ZhciBPPU1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUoayksbS5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTtJLmJyYW5jaFJhZGlhbExheW91dChSLG51bGwsMCwzNTksMCxPKTt2YXIgTj1MLmNhbGN1bGF0ZUJvdW5kcyhrKSxQPW5ldyBTO1Auc2V0RGV2aWNlT3JnWChOLmdldE1pblgoKSksUC5zZXREZXZpY2VPcmdZKE4uZ2V0TWluWSgpKSxQLnNldFdvcmxkT3JnWChDLngpLFAuc2V0V29ybGRPcmdZKEMueSk7Zm9yKHZhciBGPTA7RjxrLmxlbmd0aDtGKyspe3ZhciBCPWtbRl07Qi50cmFuc2Zvcm0oUCl9dmFyIEc9bmV3IGIoTi5nZXRNYXhYKCksTi5nZXRNYXhZKCkpO3JldHVybiBQLmludmVyc2VUcmFuc2Zvcm1Qb2ludChHKX0sSS5icmFuY2hSYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oayxSLEMsTyxOLFApe3ZhciBGPShPLUMrMSkvMjtGPDAmJihGKz0xODApO3ZhciBCPShGK0MpJTM2MCxHPUIqRS5UV09fUEkvMzYwLHo9TWF0aC5jb3MoRyksVz1OKk1hdGguY29zKEcpLFo9TipNYXRoLnNpbihHKTtrLnNldENlbnRlcihXLFopO3ZhciBqPVtdO2o9ai5jb25jYXQoay5nZXRFZGdlcygpKTt2YXIgb2U9ai5sZW5ndGg7UiE9bnVsbCYmb2UtLTtmb3IodmFyIEs9MCxlZT1qLmxlbmd0aCxKLEg9ay5nZXRFZGdlc0JldHdlZW4oUik7SC5sZW5ndGg+MTspe3ZhciBxPUhbMF07SC5zcGxpY2UoMCwxKTt2YXIgUT1qLmluZGV4T2YocSk7UT49MCYmai5zcGxpY2UoUSwxKSxlZS0tLG9lLS19UiE9bnVsbD9KPShqLmluZGV4T2YoSFswXSkrMSklZWU6Sj0wO2Zvcih2YXIgYWU9TWF0aC5hYnMoTy1DKS9vZSx1ZT1KO0shPW9lO3VlPSsrdWUlZWUpe3ZhciBjZT1qW3VlXS5nZXRPdGhlckVuZChrKTtpZihjZSE9Uil7dmFyIHRlPShDK0sqYWUpJTM2MCxOZT0odGUrYWUpJTM2MDtJLmJyYW5jaFJhZGlhbExheW91dChjZSxrLHRlLE5lLE4rUCxQKSxLKyt9fX0sSS5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIFI9VC5NSU5fVkFMVUUsQz0wO0M8ay5sZW5ndGg7QysrKXt2YXIgTz1rW0NdLE49Ty5nZXREaWFnb25hbCgpO04+UiYmKFI9Til9cmV0dXJuIFJ9LEkucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSxJLnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxSPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIEM9W10sTz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyIFA9T1tOXSxGPVAuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFApPT09MCYmKEYuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChGKSkmJkMucHVzaChQKX1mb3IodmFyIE49MDtOPEMubGVuZ3RoO04rKyl7dmFyIFA9Q1tOXSxCPVAuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIFJbQl0+InUiJiYoUltCXT1bXSksUltCXT1SW0JdLmNvbmNhdChQKX1PYmplY3Qua2V5cyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKFJbR10ubGVuZ3RoPjEpe3ZhciB6PSJEdW1teUNvbXBvdW5kXyIrRztrLm1lbWJlckdyb3Vwc1t6XT1SW0ddO3ZhciBXPVJbR11bMF0uZ2V0UGFyZW50KCksWj1uZXcgZChrLmdyYXBoTWFuYWdlcik7Wi5pZD16LFoucGFkZGluZ0xlZnQ9Vy5wYWRkaW5nTGVmdHx8MCxaLnBhZGRpbmdSaWdodD1XLnBhZGRpbmdSaWdodHx8MCxaLnBhZGRpbmdCb3R0b209Vy5wYWRkaW5nQm90dG9tfHwwLFoucGFkZGluZ1RvcD1XLnBhZGRpbmdUb3B8fDAsay5pZFRvRHVtbXlOb2RlW3pdPVo7dmFyIGo9ay5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoay5uZXdHcmFwaCgpLFopLG9lPVcuZ2V0Q2hpbGQoKTtvZS5hZGQoWik7Zm9yKHZhciBLPTA7SzxSW0ddLmxlbmd0aDtLKyspe3ZhciBlZT1SW0ddW0tdO29lLnJlbW92ZShlZSksai5hZGQoZWUpfX19KX0sSS5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgaz17fSxSPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO0MrKylSW3RoaXMuY29tcG91bmRPcmRlcltDXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW0NdLGtbdGhpcy5jb21wb3VuZE9yZGVyW0NdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW0NdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltDXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbQ10uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKGssUil9LEkucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLFI9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBPPWsuaWRUb0R1bW15Tm9kZVtDXTtpZihSW0NdPWsudGlsZU5vZGVzKGsubWVtYmVyR3JvdXBzW0NdLE8ucGFkZGluZ0xlZnQrTy5wYWRkaW5nUmlnaHQpLE8ucmVjdC53aWR0aD1SW0NdLndpZHRoLE8ucmVjdC5oZWlnaHQ9UltDXS5oZWlnaHQsTy5zZXRDZW50ZXIoUltDXS5jZW50ZXJYLFJbQ10uY2VudGVyWSksTy5sYWJlbE1hcmdpbkxlZnQ9MCxPLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBOPU8ucmVjdC53aWR0aCxQPU8ucmVjdC5oZWlnaHQ7Ty5sYWJlbFdpZHRoJiYoTy5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oTy5yZWN0LngtPU8ubGFiZWxXaWR0aCxPLnNldFdpZHRoKE4rTy5sYWJlbFdpZHRoKSxPLmxhYmVsTWFyZ2luTGVmdD1PLmxhYmVsV2lkdGgpOk8ubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmTy5sYWJlbFdpZHRoPk4/KE8ucmVjdC54LT0oTy5sYWJlbFdpZHRoLU4pLzIsTy5zZXRXaWR0aChPLmxhYmVsV2lkdGgpLE8ubGFiZWxNYXJnaW5MZWZ0PShPLmxhYmVsV2lkdGgtTikvMik6Ty5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJk8uc2V0V2lkdGgoTitPLmxhYmVsV2lkdGgpKSxPLmxhYmVsSGVpZ2h0JiYoTy5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oTy5yZWN0LnktPU8ubGFiZWxIZWlnaHQsTy5zZXRIZWlnaHQoUCtPLmxhYmVsSGVpZ2h0KSxPLmxhYmVsTWFyZ2luVG9wPU8ubGFiZWxIZWlnaHQpOk8ubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJk8ubGFiZWxIZWlnaHQ+UD8oTy5yZWN0LnktPShPLmxhYmVsSGVpZ2h0LVApLzIsTy5zZXRIZWlnaHQoTy5sYWJlbEhlaWdodCksTy5sYWJlbE1hcmdpblRvcD0oTy5sYWJlbEhlaWdodC1QKS8yKTpPLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZPLnNldEhlaWdodChQK08ubGFiZWxIZWlnaHQpKX19KX0sSS5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgaz10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBSPXRoaXMuY29tcG91bmRPcmRlcltrXSxDPVIuaWQsTz1SLnBhZGRpbmdMZWZ0LE49Ui5wYWRkaW5nVG9wLFA9Ui5sYWJlbE1hcmdpbkxlZnQsRj1SLmxhYmVsTWFyZ2luVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW0NdLFIucmVjdC54LFIucmVjdC55LE8sTixQLEYpfX0sSS5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxSPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBPPWsuaWRUb0R1bW15Tm9kZVtDXSxOPU8ucGFkZGluZ0xlZnQsUD1PLnBhZGRpbmdUb3AsRj1PLmxhYmVsTWFyZ2luTGVmdCxCPU8ubGFiZWxNYXJnaW5Ub3A7ay5hZGp1c3RMb2NhdGlvbnMoUltDXSxPLnJlY3QueCxPLnJlY3QueSxOLFAsRixCKX0pfSxJLnByb3RvdHlwZS5nZXRUb0JlVGlsZWQ9ZnVuY3Rpb24oayl7dmFyIFI9ay5pZDtpZih0aGlzLnRvQmVUaWxlZFtSXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbUl07dmFyIEM9ay5nZXRDaGlsZCgpO2lmKEM9PW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW1JdPSExLCExO2Zvcih2YXIgTz1DLmdldE5vZGVzKCksTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgUD1PW05dO2lmKHRoaXMuZ2V0Tm9kZURlZ3JlZShQKT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFtSXT0hMSwhMTtpZihQLmdldENoaWxkKCk9PW51bGwpe3RoaXMudG9CZVRpbGVkW1AuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChQKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbUl09ITEsITF9cmV0dXJuIHRoaXMudG9CZVRpbGVkW1JdPSEwLCEwfSxJLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1rLmlkLEM9ay5nZXRFZGdlcygpLE89MCxOPTA7TjxDLmxlbmd0aDtOKyspe3ZhciBQPUNbTl07UC5nZXRTb3VyY2UoKS5pZCE9PVAuZ2V0VGFyZ2V0KCkuaWQmJihPPU8rMSl9cmV0dXJuIE99LEkucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oayl7dmFyIFI9dGhpcy5nZXROb2RlRGVncmVlKGspO2lmKGsuZ2V0Q2hpbGQoKT09bnVsbClyZXR1cm4gUjtmb3IodmFyIEM9ay5nZXRDaGlsZCgpLmdldE5vZGVzKCksTz0wO088Qy5sZW5ndGg7TysrKXt2YXIgTj1DW09dO1IrPXRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihOKX1yZXR1cm4gUn0sSS5wcm90b3R5cGUucGVyZm9ybURGU09uQ29tcG91bmRzPWZ1bmN0aW9uKCl7dGhpcy5jb21wb3VuZE9yZGVyPVtdLHRoaXMuZmlsbENvbXBleE9yZGVyQnlERlModGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkpfSxJLnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbihrKXtmb3IodmFyIFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIEM9a1tSXTtDLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoQy5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKEMpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChDKX19LEkucHJvdG90eXBlLmFkanVzdExvY2F0aW9ucz1mdW5jdGlvbihrLFIsQyxPLE4sUCxGKXtSKz1PK1AsQys9TitGO2Zvcih2YXIgQj1SLEc9MDtHPGsucm93cy5sZW5ndGg7RysrKXt2YXIgej1rLnJvd3NbR107Uj1CO2Zvcih2YXIgVz0wLFo9MDtaPHoubGVuZ3RoO1orKyl7dmFyIGo9eltaXTtqLnJlY3QueD1SLGoucmVjdC55PUMsUis9ai5yZWN0LndpZHRoK2suaG9yaXpvbnRhbFBhZGRpbmcsai5yZWN0LmhlaWdodD5XJiYoVz1qLnJlY3QuaGVpZ2h0KX1DKz1XK2sudmVydGljYWxQYWRkaW5nfX0sSS5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihrLFIpe3ZhciBDPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoaykuZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgTj1SW09dO2lmKEMudGlsZWRNZW1iZXJQYWNrW09dPUMudGlsZU5vZGVzKGtbT10sTi5wYWRkaW5nTGVmdCtOLnBhZGRpbmdSaWdodCksTi5yZWN0LndpZHRoPUMudGlsZWRNZW1iZXJQYWNrW09dLndpZHRoLE4ucmVjdC5oZWlnaHQ9Qy50aWxlZE1lbWJlclBhY2tbT10uaGVpZ2h0LE4uc2V0Q2VudGVyKEMudGlsZWRNZW1iZXJQYWNrW09dLmNlbnRlclgsQy50aWxlZE1lbWJlclBhY2tbT10uY2VudGVyWSksTi5sYWJlbE1hcmdpbkxlZnQ9MCxOLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBQPU4ucmVjdC53aWR0aCxGPU4ucmVjdC5oZWlnaHQ7Ti5sYWJlbFdpZHRoJiYoTi5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oTi5yZWN0LngtPU4ubGFiZWxXaWR0aCxOLnNldFdpZHRoKFArTi5sYWJlbFdpZHRoKSxOLmxhYmVsTWFyZ2luTGVmdD1OLmxhYmVsV2lkdGgpOk4ubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmTi5sYWJlbFdpZHRoPlA/KE4ucmVjdC54LT0oTi5sYWJlbFdpZHRoLVApLzIsTi5zZXRXaWR0aChOLmxhYmVsV2lkdGgpLE4ubGFiZWxNYXJnaW5MZWZ0PShOLmxhYmVsV2lkdGgtUCkvMik6Ti5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJk4uc2V0V2lkdGgoUCtOLmxhYmVsV2lkdGgpKSxOLmxhYmVsSGVpZ2h0JiYoTi5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oTi5yZWN0LnktPU4ubGFiZWxIZWlnaHQsTi5zZXRIZWlnaHQoRitOLmxhYmVsSGVpZ2h0KSxOLmxhYmVsTWFyZ2luVG9wPU4ubGFiZWxIZWlnaHQpOk4ubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJk4ubGFiZWxIZWlnaHQ+Rj8oTi5yZWN0LnktPShOLmxhYmVsSGVpZ2h0LUYpLzIsTi5zZXRIZWlnaHQoTi5sYWJlbEhlaWdodCksTi5sYWJlbE1hcmdpblRvcD0oTi5sYWJlbEhlaWdodC1GKS8yKTpOLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZOLnNldEhlaWdodChGK04ubGFiZWxIZWlnaHQpKX19KX0sSS5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKGssUil7dmFyIEM9dGhpcy50aWxlTm9kZXNCeUZhdm9yaW5nRGltKGssUiwhMCksTz10aGlzLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0oayxSLCExKSxOPXRoaXMuZ2V0T3JnUmF0aW8oQyksUD10aGlzLmdldE9yZ1JhdGlvKE8pLEY7cmV0dXJuIFA8Tj9GPU86Rj1DLEZ9LEkucHJvdG90eXBlLmdldE9yZ1JhdGlvPWZ1bmN0aW9uKGspe3ZhciBSPWsud2lkdGgsQz1rLmhlaWdodCxPPVIvQztyZXR1cm4gTzwxJiYoTz0xL08pLE99LEkucHJvdG90eXBlLmNhbGNJZGVhbFJvd1dpZHRoPWZ1bmN0aW9uKGssUil7dmFyIEM9bS5USUxJTkdfUEFERElOR19WRVJUSUNBTCxPPW0uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxOPWsubGVuZ3RoLFA9MCxGPTAsQj0wO2suZm9yRWFjaChmdW5jdGlvbihLKXtQKz1LLmdldFdpZHRoKCksRis9Sy5nZXRIZWlnaHQoKSxLLmdldFdpZHRoKCk+QiYmKEI9Sy5nZXRXaWR0aCgpKX0pO3ZhciBHPVAvTix6PUYvTixXPU1hdGgucG93KEMtTywyKSs0KihHK08pKih6K0MpKk4sWj0oTy1DK01hdGguc3FydChXKSkvKDIqKEcrTykpLGo7Uj8oaj1NYXRoLmNlaWwoWiksaj09WiYmaisrKTpqPU1hdGguZmxvb3IoWik7dmFyIG9lPWoqKEcrTyktTztyZXR1cm4gQj5vZSYmKG9lPUIpLG9lKz1PKjIsb2V9LEkucHJvdG90eXBlLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW09ZnVuY3Rpb24oayxSLEMpe3ZhciBPPW0uVElMSU5HX1BBRERJTkdfVkVSVElDQUwsTj1tLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsUD1tLlRJTElOR19DT01QQVJFX0JZLEY9e3Jvd3M6W10scm93V2lkdGg6W10scm93SGVpZ2h0OltdLHdpZHRoOjAsaGVpZ2h0OlIsdmVydGljYWxQYWRkaW5nOk8saG9yaXpvbnRhbFBhZGRpbmc6TixjZW50ZXJYOjAsY2VudGVyWTowfTtQJiYoRi5pZGVhbFJvd1dpZHRoPXRoaXMuY2FsY0lkZWFsUm93V2lkdGgoayxDKSk7dmFyIEI9byhmdW5jdGlvbihlZSl7cmV0dXJuIGVlLnJlY3Qud2lkdGgqZWUucmVjdC5oZWlnaHR9LCJnZXROb2RlQXJlYSIpLEc9byhmdW5jdGlvbihlZSxKKXtyZXR1cm4gQihKKS1CKGVlKX0sImFyZWFDb21wYXJlRmNuIik7ay5zb3J0KGZ1bmN0aW9uKEssZWUpe3ZhciBKPUc7cmV0dXJuIEYuaWRlYWxSb3dXaWR0aD8oSj1QLEooSy5pZCxlZS5pZCkpOkooSyxlZSl9KTtmb3IodmFyIHo9MCxXPTAsWj0wO1o8ay5sZW5ndGg7WisrKXt2YXIgaj1rW1pdO3orPWouZ2V0Q2VudGVyWCgpLFcrPWouZ2V0Q2VudGVyWSgpfUYuY2VudGVyWD16L2subGVuZ3RoLEYuY2VudGVyWT1XL2subGVuZ3RoO2Zvcih2YXIgWj0wO1o8ay5sZW5ndGg7WisrKXt2YXIgaj1rW1pdO2lmKEYucm93cy5sZW5ndGg9PTApdGhpcy5pbnNlcnROb2RlVG9Sb3coRixqLDAsUik7ZWxzZSBpZih0aGlzLmNhbkFkZEhvcml6b250YWwoRixqLnJlY3Qud2lkdGgsai5yZWN0LmhlaWdodCkpe3ZhciBvZT1GLnJvd3MubGVuZ3RoLTE7Ri5pZGVhbFJvd1dpZHRofHwob2U9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEYpKSx0aGlzLmluc2VydE5vZGVUb1JvdyhGLGosb2UsUil9ZWxzZSB0aGlzLmluc2VydE5vZGVUb1JvdyhGLGosRi5yb3dzLmxlbmd0aCxSKTt0aGlzLnNoaWZ0VG9MYXN0Um93KEYpfXJldHVybiBGfSxJLnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24oayxSLEMsTyl7dmFyIE49TztpZihDPT1rLnJvd3MubGVuZ3RoKXt2YXIgUD1bXTtrLnJvd3MucHVzaChQKSxrLnJvd1dpZHRoLnB1c2goTiksay5yb3dIZWlnaHQucHVzaCgwKX12YXIgRj1rLnJvd1dpZHRoW0NdK1IucmVjdC53aWR0aDtrLnJvd3NbQ10ubGVuZ3RoPjAmJihGKz1rLmhvcml6b250YWxQYWRkaW5nKSxrLnJvd1dpZHRoW0NdPUYsay53aWR0aDxGJiYoay53aWR0aD1GKTt2YXIgQj1SLnJlY3QuaGVpZ2h0O0M+MCYmKEIrPWsudmVydGljYWxQYWRkaW5nKTt2YXIgRz0wO0I+ay5yb3dIZWlnaHRbQ10mJihHPWsucm93SGVpZ2h0W0NdLGsucm93SGVpZ2h0W0NdPUIsRz1rLnJvd0hlaWdodFtDXS1HKSxrLmhlaWdodCs9RyxrLnJvd3NbQ10ucHVzaChSKX0sSS5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleD1mdW5jdGlvbihrKXtmb3IodmFyIFI9LTEsQz1OdW1iZXIuTUFYX1ZBTFVFLE89MDtPPGsucm93cy5sZW5ndGg7TysrKWsucm93V2lkdGhbT108QyYmKFI9TyxDPWsucm93V2lkdGhbT10pO3JldHVybiBSfSxJLnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oayl7Zm9yKHZhciBSPS0xLEM9TnVtYmVyLk1JTl9WQUxVRSxPPTA7TzxrLnJvd3MubGVuZ3RoO08rKylrLnJvd1dpZHRoW09dPkMmJihSPU8sQz1rLnJvd1dpZHRoW09dKTtyZXR1cm4gUn0sSS5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbihrLFIsQyl7aWYoay5pZGVhbFJvd1dpZHRoKXt2YXIgTz1rLnJvd3MubGVuZ3RoLTEsTj1rLnJvd1dpZHRoW09dO3JldHVybiBOK1Iray5ob3Jpem9udGFsUGFkZGluZzw9ay5pZGVhbFJvd1dpZHRofXZhciBQPXRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChrKTtpZihQPDApcmV0dXJuITA7dmFyIEY9ay5yb3dXaWR0aFtQXTtpZihGK2suaG9yaXpvbnRhbFBhZGRpbmcrUjw9ay53aWR0aClyZXR1cm4hMDt2YXIgQj0wO2sucm93SGVpZ2h0W1BdPEMmJlA+MCYmKEI9QytrLnZlcnRpY2FsUGFkZGluZy1rLnJvd0hlaWdodFtQXSk7dmFyIEc7ay53aWR0aC1GPj1SK2suaG9yaXpvbnRhbFBhZGRpbmc/Rz0oay5oZWlnaHQrQikvKEYrUitrLmhvcml6b250YWxQYWRkaW5nKTpHPShrLmhlaWdodCtCKS9rLndpZHRoLEI9QytrLnZlcnRpY2FsUGFkZGluZzt2YXIgejtyZXR1cm4gay53aWR0aDxSP3o9KGsuaGVpZ2h0K0IpL1I6ej0oay5oZWlnaHQrQikvay53aWR0aCx6PDEmJih6PTEveiksRzwxJiYoRz0xL0cpLEc8en0sSS5wcm90b3R5cGUuc2hpZnRUb0xhc3RSb3c9ZnVuY3Rpb24oayl7dmFyIFI9dGhpcy5nZXRMb25nZXN0Um93SW5kZXgoayksQz1rLnJvd1dpZHRoLmxlbmd0aC0xLE89ay5yb3dzW1JdLE49T1tPLmxlbmd0aC0xXSxQPU4ud2lkdGgray5ob3Jpem9udGFsUGFkZGluZztpZihrLndpZHRoLWsucm93V2lkdGhbQ10+UCYmUiE9Qyl7Ty5zcGxpY2UoLTEsMSksay5yb3dzW0NdLnB1c2goTiksay5yb3dXaWR0aFtSXT1rLnJvd1dpZHRoW1JdLVAsay5yb3dXaWR0aFtDXT1rLnJvd1dpZHRoW0NdK1Asay53aWR0aD1rLnJvd1dpZHRoW2luc3RhbmNlLmdldExvbmdlc3RSb3dJbmRleChrKV07Zm9yKHZhciBGPU51bWJlci5NSU5fVkFMVUUsQj0wO0I8Ty5sZW5ndGg7QisrKU9bQl0uaGVpZ2h0PkYmJihGPU9bQl0uaGVpZ2h0KTtSPjAmJihGKz1rLnZlcnRpY2FsUGFkZGluZyk7dmFyIEc9ay5yb3dIZWlnaHRbUl0ray5yb3dIZWlnaHRbQ107ay5yb3dIZWlnaHRbUl09RixrLnJvd0hlaWdodFtDXTxOLmhlaWdodCtrLnZlcnRpY2FsUGFkZGluZyYmKGsucm93SGVpZ2h0W0NdPU4uaGVpZ2h0K2sudmVydGljYWxQYWRkaW5nKTt2YXIgej1rLnJvd0hlaWdodFtSXStrLnJvd0hlaWdodFtDXTtrLmhlaWdodCs9ei1HLHRoaXMuc2hpZnRUb0xhc3RSb3coayl9fSxJLnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQ9ZnVuY3Rpb24oKXttLlRJTEUmJih0aGlzLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLmNsZWFyQ29tcG91bmRzKCksdGhpcy5jbGVhclplcm9EZWdyZWVNZW1iZXJzKCkpfSxJLnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7bS5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LEkucHJvdG90eXBlLnJlZHVjZVRyZWVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPVtdLFI9ITAsQztSOyl7dmFyIE89dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxOPVtdO1I9ITE7Zm9yKHZhciBQPTA7UDxPLmxlbmd0aDtQKyspaWYoQz1PW1BdLEMuZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFDLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZDLmdldENoaWxkKCk9PW51bGwpe2lmKG0uUFVSRV9JTkNSRU1FTlRBTCl7dmFyIEY9Qy5nZXRFZGdlcygpWzBdLmdldE90aGVyRW5kKEMpLEI9bmV3IHcoQy5nZXRDZW50ZXJYKCktRi5nZXRDZW50ZXJYKCksQy5nZXRDZW50ZXJZKCktRi5nZXRDZW50ZXJZKCkpO04ucHVzaChbQyxDLmdldEVkZ2VzKClbMF0sQy5nZXRPd25lcigpLEJdKX1lbHNlIE4ucHVzaChbQyxDLmdldEVkZ2VzKClbMF0sQy5nZXRPd25lcigpXSk7Uj0hMH1pZihSPT0hMCl7Zm9yKHZhciBHPVtdLHo9MDt6PE4ubGVuZ3RoO3orKylOW3pdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYoRy5wdXNoKE5bel0pLE5bel1bMF0uZ2V0T3duZXIoKS5yZW1vdmUoTlt6XVswXSkpO2sucHVzaChHKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPWt9LEkucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1rLmxlbmd0aCxDPWtbUi0xXSxPLE49MDtOPEMubGVuZ3RoO04rKylPPUNbTl0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKE8pLE9bMl0uYWRkKE9bMF0pLE9bMl0uYWRkKE9bMV0sT1sxXS5zb3VyY2UsT1sxXS50YXJnZXQpO2suc3BsaWNlKGsubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sSS5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZT1mdW5jdGlvbihrKXt2YXIgUixDLE89a1swXTtpZihPPT1rWzFdLnNvdXJjZT9DPWtbMV0udGFyZ2V0OkM9a1sxXS5zb3VyY2UsbS5QVVJFX0lOQ1JFTUVOVEFMKU8uc2V0Q2VudGVyKEMuZ2V0Q2VudGVyWCgpK2tbM10uZ2V0V2lkdGgoKSxDLmdldENlbnRlclkoKStrWzNdLmdldEhlaWdodCgpKTtlbHNle3ZhciBOPUMuc3RhcnRYLFA9Qy5maW5pc2hYLEY9Qy5zdGFydFksQj1DLmZpbmlzaFksRz0wLHo9MCxXPTAsWj0wLGo9W0csVyx6LFpdO2lmKEY+MClmb3IodmFyIG9lPU47b2U8PVA7b2UrKylqWzBdKz10aGlzLmdyaWRbb2VdW0YtMV0ubGVuZ3RoK3RoaXMuZ3JpZFtvZV1bRl0ubGVuZ3RoLTE7aWYoUDx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBvZT1GO29lPD1CO29lKyspalsxXSs9dGhpcy5ncmlkW1ArMV1bb2VdLmxlbmd0aCt0aGlzLmdyaWRbUF1bb2VdLmxlbmd0aC0xO2lmKEI8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIgb2U9TjtvZTw9UDtvZSsrKWpbMl0rPXRoaXMuZ3JpZFtvZV1bQisxXS5sZW5ndGgrdGhpcy5ncmlkW29lXVtCXS5sZW5ndGgtMTtpZihOPjApZm9yKHZhciBvZT1GO29lPD1CO29lKyspalszXSs9dGhpcy5ncmlkW04tMV1bb2VdLmxlbmd0aCt0aGlzLmdyaWRbTl1bb2VdLmxlbmd0aC0xO2Zvcih2YXIgSz1ULk1BWF9WQUxVRSxlZSxKLEg9MDtIPGoubGVuZ3RoO0grKylqW0hdPEs/KEs9altIXSxlZT0xLEo9SCk6altIXT09SyYmZWUrKztpZihlZT09MyYmSz09MClqWzBdPT0wJiZqWzFdPT0wJiZqWzJdPT0wP1I9MTpqWzBdPT0wJiZqWzFdPT0wJiZqWzNdPT0wP1I9MDpqWzBdPT0wJiZqWzJdPT0wJiZqWzNdPT0wP1I9MzpqWzFdPT0wJiZqWzJdPT0wJiZqWzNdPT0wJiYoUj0yKTtlbHNlIGlmKGVlPT0yJiZLPT0wKXt2YXIgcT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMik7alswXT09MCYmalsxXT09MD9xPT0wP1I9MDpSPTE6alswXT09MCYmalsyXT09MD9xPT0wP1I9MDpSPTI6alswXT09MCYmalszXT09MD9xPT0wP1I9MDpSPTM6alsxXT09MCYmalsyXT09MD9xPT0wP1I9MTpSPTI6alsxXT09MCYmalszXT09MD9xPT0wP1I9MTpSPTM6cT09MD9SPTI6Uj0zfWVsc2UgaWYoZWU9PTQmJks9PTApe3ZhciBxPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtSPXF9ZWxzZSBSPUo7Uj09MD9PLnNldENlbnRlcihDLmdldENlbnRlclgoKSxDLmdldENlbnRlclkoKS1DLmdldEhlaWdodCgpLzIteS5ERUZBVUxUX0VER0VfTEVOR1RILU8uZ2V0SGVpZ2h0KCkvMik6Uj09MT9PLnNldENlbnRlcihDLmdldENlbnRlclgoKStDLmdldFdpZHRoKCkvMit5LkRFRkFVTFRfRURHRV9MRU5HVEgrTy5nZXRXaWR0aCgpLzIsQy5nZXRDZW50ZXJZKCkpOlI9PTI/Ty5zZXRDZW50ZXIoQy5nZXRDZW50ZXJYKCksQy5nZXRDZW50ZXJZKCkrQy5nZXRIZWlnaHQoKS8yK3kuREVGQVVMVF9FREdFX0xFTkdUSCtPLmdldEhlaWdodCgpLzIpOk8uc2V0Q2VudGVyKEMuZ2V0Q2VudGVyWCgpLUMuZ2V0V2lkdGgoKS8yLXkuREVGQVVMVF9FREdFX0xFTkdUSC1PLmdldFdpZHRoKCkvMixDLmdldENlbnRlclkoKSl9fSxhLmV4cG9ydHM9SX0sOTkxOihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXROb2RlLGg9bCg1NTEpLklNYXRoO2Z1bmN0aW9uIGYocCxtLGcseSl7dS5jYWxsKHRoaXMscCxtLGcseSl9byhmLCJDb1NFTm9kZSIpLGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiB1KWZbZF09dVtkXTtmLnByb3RvdHlwZS5jYWxjdWxhdGVEaXNwbGFjZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTt0aGlzLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZml4ZWROb2RlV2VpZ2h0Pyh0aGlzLmRpc3BsYWNlbWVudFgrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5maXhlZE5vZGVXZWlnaHQsdGhpcy5kaXNwbGFjZW1lbnRZKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMuZml4ZWROb2RlV2VpZ2h0KToodGhpcy5kaXNwbGFjZW1lbnRYKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WSs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLm5vT2ZDaGlsZHJlbiksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKT5wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRYPXAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQqaC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCkpLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk+cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WT1wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50Kmguc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLmNoaWxkJiZ0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPjAmJnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKX0sZi5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbj1mdW5jdGlvbihwLG0pe2Zvcih2YXIgZz10aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSx5LHY9MDt2PGcubGVuZ3RoO3YrKyl5PWdbdl0seS5nZXRDaGlsZCgpPT1udWxsPyh5LmRpc3BsYWNlbWVudFgrPXAseS5kaXNwbGFjZW1lbnRZKz1tKTp5LnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4ocCxtKX0sZi5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpOyh0aGlzLmNoaWxkPT1udWxsfHx0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wKSYmKHRoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpLHAudG90YWxEaXNwbGFjZW1lbnQrPU1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkrTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxmLnByb3RvdHlwZS5zZXRQcmVkMT1mdW5jdGlvbihwKXt0aGlzLnByZWQxPXB9LGYucHJvdG90eXBlLmdldFByZWQxPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQxfSxmLnByb3RvdHlwZS5nZXRQcmVkMj1mdW5jdGlvbigpe3JldHVybiBwcmVkMn0sZi5wcm90b3R5cGUuc2V0TmV4dD1mdW5jdGlvbihwKXt0aGlzLm5leHQ9cH0sZi5wcm90b3R5cGUuZ2V0TmV4dD1mdW5jdGlvbigpe3JldHVybiBuZXh0fSxmLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQ9ZnVuY3Rpb24ocCl7dGhpcy5wcm9jZXNzZWQ9cH0sZi5wcm90b3R5cGUuaXNQcm9jZXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcHJvY2Vzc2VkfSxhLmV4cG9ydHM9Zn0sOTAyOihhLHMsbCk9PntmdW5jdGlvbiB1KGcpe2lmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgeT0wLHY9QXJyYXkoZy5sZW5ndGgpO3k8Zy5sZW5ndGg7eSsrKXZbeV09Z1t5XTtyZXR1cm4gdn1lbHNlIHJldHVybiBBcnJheS5mcm9tKGcpfW8odSwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGg9bCg4MDYpLGY9bCg1NTEpLkxpbmtlZExpc3QsZD1sKDU1MSkuTWF0cml4LHA9bCg1NTEpLlNWRDtmdW5jdGlvbiBtKCl7fW8obSwiQ29uc3RyYWludEhhbmRsZXIiKSxtLmhhbmRsZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGcpe3ZhciB5PXt9O3kuZml4ZWROb2RlQ29uc3RyYWludD1nLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQseS5hbGlnbm1lbnRDb25zdHJhaW50PWcuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCx5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD1nLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDtmb3IodmFyIHY9bmV3IE1hcCx4PW5ldyBNYXAsYj1bXSx3PVtdLF89Zy5nZXRBbGxOb2RlcygpLFQ9MCxFPTA7RTxfLmxlbmd0aDtFKyspe3ZhciBMPV9bRV07TC5nZXRDaGlsZCgpPT1udWxsJiYoeC5zZXQoTC5pZCxUKyspLGIucHVzaChMLmdldENlbnRlclgoKSksdy5wdXNoKEwuZ2V0Q2VudGVyWSgpKSx2LnNldChMLmlkLEwpKX15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbih2ZSl7IXZlLmdhcCYmdmUuZ2FwIT0wJiYodmUubGVmdD92ZS5nYXA9aC5ERUZBVUxUX0VER0VfTEVOR1RIK3YuZ2V0KHZlLmxlZnQpLmdldFdpZHRoKCkvMit2LmdldCh2ZS5yaWdodCkuZ2V0V2lkdGgoKS8yOnZlLmdhcD1oLkRFRkFVTFRfRURHRV9MRU5HVEgrdi5nZXQodmUudG9wKS5nZXRIZWlnaHQoKS8yK3YuZ2V0KHZlLmJvdHRvbSkuZ2V0SGVpZ2h0KCkvMil9KTt2YXIgUz1vKGZ1bmN0aW9uKFUsVGUpe3JldHVybnt4OlUueC1UZS54LHk6VS55LVRlLnl9fSwiY2FsY3VsYXRlUG9zaXRpb25EaWZmIiksQT1vKGZ1bmN0aW9uKFUpe3ZhciBUZT0wLGllPTA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihFZSl7VGUrPWJbeC5nZXQoRWUpXSxpZSs9d1t4LmdldChFZSldfSkse3g6VGUvVS5zaXplLHk6aWUvVS5zaXplfX0sImNhbGN1bGF0ZUF2Z1Bvc2l0aW9uIiksST1vKGZ1bmN0aW9uKFUsVGUsaWUsRWUsQWUpe2Z1bmN0aW9uIEdlKHZ0LHJ0KXt2YXIgeXQ9bmV3IFNldCh2dCksVWU9ITAsdHQ9ITEsaHQ9dm9pZCAwO3RyeXtmb3IodmFyIEV0PXJ0W1N5bWJvbC5pdGVyYXRvcl0oKSxlcjshKFVlPShlcj1FdC5uZXh0KCkpLmRvbmUpO1VlPSEwKXt2YXIgZHQ9ZXIudmFsdWU7eXQuYWRkKGR0KX19Y2F0Y2goSmUpe3R0PSEwLGh0PUplfWZpbmFsbHl7dHJ5eyFVZSYmRXQucmV0dXJuJiZFdC5yZXR1cm4oKX1maW5hbGx5e2lmKHR0KXRocm93IGh0fX1yZXR1cm4geXR9byhHZSwic2V0VW5pb24iKTt2YXIgQmU9bmV3IE1hcDtVLmZvckVhY2goZnVuY3Rpb24odnQscnQpe0JlLnNldChydCwwKX0pLFUuZm9yRWFjaChmdW5jdGlvbih2dCxydCl7dnQuZm9yRWFjaChmdW5jdGlvbih5dCl7QmUuc2V0KHl0LmlkLEJlLmdldCh5dC5pZCkrMSl9KX0pO3ZhciBtZT1uZXcgTWFwLEhlPW5ldyBNYXAsT2U9bmV3IGY7QmUuZm9yRWFjaChmdW5jdGlvbih2dCxydCl7dnQ9PTA/KE9lLnB1c2gocnQpLGllfHwoVGU9PSJob3Jpem9udGFsIj9tZS5zZXQocnQseC5oYXMocnQpP2JbeC5nZXQocnQpXTpFZS5nZXQocnQpKTptZS5zZXQocnQseC5oYXMocnQpP3dbeC5nZXQocnQpXTpFZS5nZXQocnQpKSkpOm1lLnNldChydCxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLGllJiZIZS5zZXQocnQsbmV3IFNldChbcnRdKSl9KSxpZSYmQWUuZm9yRWFjaChmdW5jdGlvbih2dCl7dmFyIHJ0PVtdO2lmKHZ0LmZvckVhY2goZnVuY3Rpb24odHQpe2llLmhhcyh0dCkmJnJ0LnB1c2godHQpfSkscnQubGVuZ3RoPjApe3ZhciB5dD0wO3J0LmZvckVhY2goZnVuY3Rpb24odHQpe1RlPT0iaG9yaXpvbnRhbCI/KG1lLnNldCh0dCx4Lmhhcyh0dCk/Ylt4LmdldCh0dCldOkVlLmdldCh0dCkpLHl0Kz1tZS5nZXQodHQpKToobWUuc2V0KHR0LHguaGFzKHR0KT93W3guZ2V0KHR0KV06RWUuZ2V0KHR0KSkseXQrPW1lLmdldCh0dCkpfSkseXQ9eXQvcnQubGVuZ3RoLHZ0LmZvckVhY2goZnVuY3Rpb24odHQpe2llLmhhcyh0dCl8fG1lLnNldCh0dCx5dCl9KX1lbHNle3ZhciBVZT0wO3Z0LmZvckVhY2goZnVuY3Rpb24odHQpe1RlPT0iaG9yaXpvbnRhbCI/VWUrPXguaGFzKHR0KT9iW3guZ2V0KHR0KV06RWUuZ2V0KHR0KTpVZSs9eC5oYXModHQpP3dbeC5nZXQodHQpXTpFZS5nZXQodHQpfSksVWU9VWUvdnQubGVuZ3RoLHZ0LmZvckVhY2goZnVuY3Rpb24odHQpe21lLnNldCh0dCxVZSl9KX19KTtmb3IodmFyIGV0PW8oZnVuY3Rpb24oKXt2YXIgcnQ9T2Uuc2hpZnQoKSx5dD1VLmdldChydCk7eXQuZm9yRWFjaChmdW5jdGlvbihVZSl7aWYobWUuZ2V0KFVlLmlkKTxtZS5nZXQocnQpK1VlLmdhcClpZihpZSYmaWUuaGFzKFVlLmlkKSl7dmFyIHR0PXZvaWQgMDtpZihUZT09Imhvcml6b250YWwiP3R0PXguaGFzKFVlLmlkKT9iW3guZ2V0KFVlLmlkKV06RWUuZ2V0KFVlLmlkKTp0dD14LmhhcyhVZS5pZCk/d1t4LmdldChVZS5pZCldOkVlLmdldChVZS5pZCksbWUuc2V0KFVlLmlkLHR0KSx0dDxtZS5nZXQocnQpK1VlLmdhcCl7dmFyIGh0PW1lLmdldChydCkrVWUuZ2FwLXR0O0hlLmdldChydCkuZm9yRWFjaChmdW5jdGlvbihFdCl7bWUuc2V0KEV0LG1lLmdldChFdCktaHQpfSl9fWVsc2UgbWUuc2V0KFVlLmlkLG1lLmdldChydCkrVWUuZ2FwKTtCZS5zZXQoVWUuaWQsQmUuZ2V0KFVlLmlkKS0xKSxCZS5nZXQoVWUuaWQpPT0wJiZPZS5wdXNoKFVlLmlkKSxpZSYmSGUuc2V0KFVlLmlkLEdlKEhlLmdldChydCksSGUuZ2V0KFVlLmlkKSkpfSl9LCJfbG9vcCIpO09lLmxlbmd0aCE9MDspZXQoKTtpZihpZSl7dmFyIGJ0PW5ldyBTZXQ7VS5mb3JFYWNoKGZ1bmN0aW9uKHZ0LHJ0KXt2dC5sZW5ndGg9PTAmJmJ0LmFkZChydCl9KTt2YXIga3Q9W107SGUuZm9yRWFjaChmdW5jdGlvbih2dCxydCl7aWYoYnQuaGFzKHJ0KSl7dmFyIHl0PSExLFVlPSEwLHR0PSExLGh0PXZvaWQgMDt0cnl7Zm9yKHZhciBFdD12dFtTeW1ib2wuaXRlcmF0b3JdKCksZXI7IShVZT0oZXI9RXQubmV4dCgpKS5kb25lKTtVZT0hMCl7dmFyIGR0PWVyLnZhbHVlO2llLmhhcyhkdCkmJih5dD0hMCl9fWNhdGNoKEN0KXt0dD0hMCxodD1DdH1maW5hbGx5e3RyeXshVWUmJkV0LnJldHVybiYmRXQucmV0dXJuKCl9ZmluYWxseXtpZih0dCl0aHJvdyBodH19aWYoIXl0KXt2YXIgSmU9ITEsY3Q9dm9pZCAwO2t0LmZvckVhY2goZnVuY3Rpb24oQ3QscHQpe0N0LmhhcyhbXS5jb25jYXQodSh2dCkpWzBdKSYmKEplPSEwLGN0PXB0KX0pLEplP3Z0LmZvckVhY2goZnVuY3Rpb24oQ3Qpe2t0W2N0XS5hZGQoQ3QpfSk6a3QucHVzaChuZXcgU2V0KHZ0KSl9fX0pLGt0LmZvckVhY2goZnVuY3Rpb24odnQscnQpe3ZhciB5dD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksVWU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHR0PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxodD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksRXQ9ITAsZXI9ITEsZHQ9dm9pZCAwO3RyeXtmb3IodmFyIEplPXZ0W1N5bWJvbC5pdGVyYXRvcl0oKSxjdDshKEV0PShjdD1KZS5uZXh0KCkpLmRvbmUpO0V0PSEwKXt2YXIgQ3Q9Y3QudmFsdWUscHQ9dm9pZCAwO1RlPT0iaG9yaXpvbnRhbCI/cHQ9eC5oYXMoQ3QpP2JbeC5nZXQoQ3QpXTpFZS5nZXQoQ3QpOnB0PXguaGFzKEN0KT93W3guZ2V0KEN0KV06RWUuZ2V0KEN0KTt2YXIgQnQ9bWUuZ2V0KEN0KTtwdDx5dCYmKHl0PXB0KSxwdD50dCYmKHR0PXB0KSxCdDxVZSYmKFVlPUJ0KSxCdD5odCYmKGh0PUJ0KX19Y2F0Y2goT24pe2VyPSEwLGR0PU9ufWZpbmFsbHl7dHJ5eyFFdCYmSmUucmV0dXJuJiZKZS5yZXR1cm4oKX1maW5hbGx5e2lmKGVyKXRocm93IGR0fX12YXIgVHI9KHl0K3R0KS8yLShVZStodCkvMix5cj0hMCxvcj0hMSxsbj12b2lkIDA7dHJ5e2Zvcih2YXIgT3I9dnRbU3ltYm9sLml0ZXJhdG9yXSgpLGlpOyEoeXI9KGlpPU9yLm5leHQoKSkuZG9uZSk7eXI9ITApe3ZhciBtbj1paS52YWx1ZTttZS5zZXQobW4sbWUuZ2V0KG1uKStUcil9fWNhdGNoKE9uKXtvcj0hMCxsbj1Pbn1maW5hbGx5e3RyeXsheXImJk9yLnJldHVybiYmT3IucmV0dXJuKCl9ZmluYWxseXtpZihvcil0aHJvdyBsbn19fSl9cmV0dXJuIG1lfSwiZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudCIpLEQ9byhmdW5jdGlvbihVKXt2YXIgVGU9MCxpZT0wLEVlPTAsQWU9MDtpZihVLmZvckVhY2goZnVuY3Rpb24oSGUpe0hlLmxlZnQ/Ylt4LmdldChIZS5sZWZ0KV0tYlt4LmdldChIZS5yaWdodCldPj0wP1RlKys6aWUrKzp3W3guZ2V0KEhlLnRvcCldLXdbeC5nZXQoSGUuYm90dG9tKV0+PTA/RWUrKzpBZSsrfSksVGU+aWUmJkVlPkFlKWZvcih2YXIgR2U9MDtHZTx4LnNpemU7R2UrKyliW0dlXT0tMSpiW0dlXSx3W0dlXT0tMSp3W0dlXTtlbHNlIGlmKFRlPmllKWZvcih2YXIgQmU9MDtCZTx4LnNpemU7QmUrKyliW0JlXT0tMSpiW0JlXTtlbHNlIGlmKEVlPkFlKWZvcih2YXIgbWU9MDttZTx4LnNpemU7bWUrKyl3W21lXT0tMSp3W21lXX0sImFwcGx5UmVmbGVjdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50Iiksaz1vKGZ1bmN0aW9uKFUpe3ZhciBUZT1bXSxpZT1uZXcgZixFZT1uZXcgU2V0LEFlPTA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihHZSxCZSl7aWYoIUVlLmhhcyhCZSkpe1RlW0FlXT1bXTt2YXIgbWU9QmU7Zm9yKGllLnB1c2gobWUpLEVlLmFkZChtZSksVGVbQWVdLnB1c2gobWUpO2llLmxlbmd0aCE9MDspe21lPWllLnNoaWZ0KCk7dmFyIEhlPVUuZ2V0KG1lKTtIZS5mb3JFYWNoKGZ1bmN0aW9uKE9lKXtFZS5oYXMoT2UuaWQpfHwoaWUucHVzaChPZS5pZCksRWUuYWRkKE9lLmlkKSxUZVtBZV0ucHVzaChPZS5pZCkpfSl9QWUrK319KSxUZX0sImZpbmRDb21wb25lbnRzIiksUj1vKGZ1bmN0aW9uKFUpe3ZhciBUZT1uZXcgTWFwO3JldHVybiBVLmZvckVhY2goZnVuY3Rpb24oaWUsRWUpe1RlLnNldChFZSxbXSl9KSxVLmZvckVhY2goZnVuY3Rpb24oaWUsRWUpe2llLmZvckVhY2goZnVuY3Rpb24oQWUpe1RlLmdldChFZSkucHVzaChBZSksVGUuZ2V0KEFlLmlkKS5wdXNoKHtpZDpFZSxnYXA6QWUuZ2FwLGRpcmVjdGlvbjpBZS5kaXJlY3Rpb259KX0pfSksVGV9LCJkYWdUb1VuZGlyZWN0ZWQiKSxDPW8oZnVuY3Rpb24oVSl7dmFyIFRlPW5ldyBNYXA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihpZSxFZSl7VGUuc2V0KEVlLFtdKX0pLFUuZm9yRWFjaChmdW5jdGlvbihpZSxFZSl7aWUuZm9yRWFjaChmdW5jdGlvbihBZSl7VGUuZ2V0KEFlLmlkKS5wdXNoKHtpZDpFZSxnYXA6QWUuZ2FwLGRpcmVjdGlvbjpBZS5kaXJlY3Rpb259KX0pfSksVGV9LCJkYWdUb1JldmVyc2VkIiksTz1bXSxOPVtdLFA9ITEsRj0hMSxCPW5ldyBTZXQsRz1uZXcgTWFwLHo9bmV3IE1hcCxXPVtdO2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24odmUpe0IuYWRkKHZlLm5vZGVJZCl9KSx5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmKHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24odmUpe3ZlLmxlZnQ/KEcuaGFzKHZlLmxlZnQpP0cuZ2V0KHZlLmxlZnQpLnB1c2goe2lkOnZlLnJpZ2h0LGdhcDp2ZS5nYXAsZGlyZWN0aW9uOiJob3Jpem9udGFsIn0pOkcuc2V0KHZlLmxlZnQsW3tpZDp2ZS5yaWdodCxnYXA6dmUuZ2FwLGRpcmVjdGlvbjoiaG9yaXpvbnRhbCJ9XSksRy5oYXModmUucmlnaHQpfHxHLnNldCh2ZS5yaWdodCxbXSkpOihHLmhhcyh2ZS50b3ApP0cuZ2V0KHZlLnRvcCkucHVzaCh7aWQ6dmUuYm90dG9tLGdhcDp2ZS5nYXAsZGlyZWN0aW9uOiJ2ZXJ0aWNhbCJ9KTpHLnNldCh2ZS50b3AsW3tpZDp2ZS5ib3R0b20sZ2FwOnZlLmdhcCxkaXJlY3Rpb246InZlcnRpY2FsIn1dKSxHLmhhcyh2ZS5ib3R0b20pfHxHLnNldCh2ZS5ib3R0b20sW10pKX0pLHo9UihHKSxXPWsoeikpLGguVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkcpe2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD4xKXkuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKHZlLFUpe09bVV09W3ZlLnBvc2l0aW9uLngsdmUucG9zaXRpb24ueV0sTltVXT1bYlt4LmdldCh2ZS5ub2RlSWQpXSx3W3guZ2V0KHZlLm5vZGVJZCldXX0pLFA9ITA7ZWxzZSBpZih5LmFsaWdubWVudENvbnN0cmFpbnQpKGZ1bmN0aW9uKCl7dmFyIHZlPTA7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXtmb3IodmFyIFU9eS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLFRlPW8oZnVuY3Rpb24obWUpe3ZhciBIZT1uZXcgU2V0O1VbbWVdLmZvckVhY2goZnVuY3Rpb24oYnQpe0hlLmFkZChidCl9KTt2YXIgT2U9bmV3IFNldChbXS5jb25jYXQodShIZSkpLmZpbHRlcihmdW5jdGlvbihidCl7cmV0dXJuIEIuaGFzKGJ0KX0pKSxldD12b2lkIDA7T2Uuc2l6ZT4wP2V0PWJbeC5nZXQoT2UudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06ZXQ9QShIZSkueCxVW21lXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtPW3ZlXT1bZXQsd1t4LmdldChidCldXSxOW3ZlXT1bYlt4LmdldChidCldLHdbeC5nZXQoYnQpXV0sdmUrK30pfSwiX2xvb3AyIiksaWU9MDtpZTxVLmxlbmd0aDtpZSsrKVRlKGllKTtQPSEwfWlmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKXtmb3IodmFyIEVlPXkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLEFlPW8oZnVuY3Rpb24obWUpe3ZhciBIZT1uZXcgU2V0O0VlW21lXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtIZS5hZGQoYnQpfSk7dmFyIE9lPW5ldyBTZXQoW10uY29uY2F0KHUoSGUpKS5maWx0ZXIoZnVuY3Rpb24oYnQpe3JldHVybiBCLmhhcyhidCl9KSksZXQ9dm9pZCAwO09lLnNpemU+MD9ldD1iW3guZ2V0KE9lLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOmV0PUEoSGUpLnksRWVbbWVdLmZvckVhY2goZnVuY3Rpb24oYnQpe09bdmVdPVtiW3guZ2V0KGJ0KV0sZXRdLE5bdmVdPVtiW3guZ2V0KGJ0KV0sd1t4LmdldChidCldXSx2ZSsrfSl9LCJfbG9vcDMiKSxHZT0wO0dlPEVlLmxlbmd0aDtHZSsrKUFlKEdlKTtQPSEwfXkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoRj0hMCl9KSgpO2Vsc2UgaWYoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpe2Zvcih2YXIgWj0wLGo9MCxvZT0wO29lPFcubGVuZ3RoO29lKyspV1tvZV0ubGVuZ3RoPlomJihaPVdbb2VdLmxlbmd0aCxqPW9lKTtpZihaPHouc2l6ZS8yKUQoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpLFA9ITEsRj0hMTtlbHNle3ZhciBLPW5ldyBNYXAsZWU9bmV3IE1hcCxKPVtdO1dbal0uZm9yRWFjaChmdW5jdGlvbih2ZSl7Ry5nZXQodmUpLmZvckVhY2goZnVuY3Rpb24oVSl7VS5kaXJlY3Rpb249PSJob3Jpem9udGFsIj8oSy5oYXModmUpP0suZ2V0KHZlKS5wdXNoKFUpOksuc2V0KHZlLFtVXSksSy5oYXMoVS5pZCl8fEsuc2V0KFUuaWQsW10pLEoucHVzaCh7bGVmdDp2ZSxyaWdodDpVLmlkfSkpOihlZS5oYXModmUpP2VlLmdldCh2ZSkucHVzaChVKTplZS5zZXQodmUsW1VdKSxlZS5oYXMoVS5pZCl8fGVlLnNldChVLmlkLFtdKSxKLnB1c2goe3RvcDp2ZSxib3R0b206VS5pZH0pKX0pfSksRChKKSxGPSExO3ZhciBIPUkoSywiaG9yaXpvbnRhbCIpLHE9SShlZSwidmVydGljYWwiKTtXW2pdLmZvckVhY2goZnVuY3Rpb24odmUsVSl7TltVXT1bYlt4LmdldCh2ZSldLHdbeC5nZXQodmUpXV0sT1tVXT1bXSxILmhhcyh2ZSk/T1tVXVswXT1ILmdldCh2ZSk6T1tVXVswXT1iW3guZ2V0KHZlKV0scS5oYXModmUpP09bVV1bMV09cS5nZXQodmUpOk9bVV1bMV09d1t4LmdldCh2ZSldfSksUD0hMH19aWYoUCl7Zm9yKHZhciBRPXZvaWQgMCxhZT1kLnRyYW5zcG9zZShPKSx1ZT1kLnRyYW5zcG9zZShOKSxjZT0wO2NlPGFlLmxlbmd0aDtjZSsrKWFlW2NlXT1kLm11bHRHYW1tYShhZVtjZV0pLHVlW2NlXT1kLm11bHRHYW1tYSh1ZVtjZV0pO3ZhciB0ZT1kLm11bHRNYXQoYWUsZC50cmFuc3Bvc2UodWUpKSxOZT1wLnN2ZCh0ZSk7UT1kLm11bHRNYXQoTmUuVixkLnRyYW5zcG9zZShOZS5VKSk7Zm9yKHZhciBzZT0wO3NlPHguc2l6ZTtzZSsrKXt2YXIga2U9W2Jbc2VdLHdbc2VdXSxSZT1bUVswXVswXSxRWzFdWzBdXSxDZT1bUVswXVsxXSxRWzFdWzFdXTtiW3NlXT1kLmRvdFByb2R1Y3Qoa2UsUmUpLHdbc2VdPWQuZG90UHJvZHVjdChrZSxDZSl9RiYmRCh5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl9fWlmKGguRU5GT1JDRV9DT05TVFJBSU5UUyl7aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoPjApe3ZhciBQZT17eDowLHk6MH07eS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24odmUsVSl7dmFyIFRlPXt4OmJbeC5nZXQodmUubm9kZUlkKV0seTp3W3guZ2V0KHZlLm5vZGVJZCldfSxpZT12ZS5wb3NpdGlvbixFZT1TKGllLFRlKTtQZS54Kz1FZS54LFBlLnkrPUVlLnl9KSxQZS54Lz15LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoLFBlLnkvPXkuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGgsYi5mb3JFYWNoKGZ1bmN0aW9uKHZlLFUpe2JbVV0rPVBlLnh9KSx3LmZvckVhY2goZnVuY3Rpb24odmUsVSl7d1tVXSs9UGUueX0pLHkuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtiW3guZ2V0KHZlLm5vZGVJZCldPXZlLnBvc2l0aW9uLngsd1t4LmdldCh2ZS5ub2RlSWQpXT12ZS5wb3NpdGlvbi55fSl9aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih5LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciBJZT15LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsJGU9byhmdW5jdGlvbihVKXt2YXIgVGU9bmV3IFNldDtJZVtVXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtUZS5hZGQoQWUpfSk7dmFyIGllPW5ldyBTZXQoW10uY29uY2F0KHUoVGUpKS5maWx0ZXIoZnVuY3Rpb24oQWUpe3JldHVybiBCLmhhcyhBZSl9KSksRWU9dm9pZCAwO2llLnNpemU+MD9FZT1iW3guZ2V0KGllLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOkVlPUEoVGUpLngsVGUuZm9yRWFjaChmdW5jdGlvbihBZSl7Qi5oYXMoQWUpfHwoYlt4LmdldChBZSldPUVlKX0pfSwiX2xvb3A0IikseWU9MDt5ZTxJZS5sZW5ndGg7eWUrKykkZSh5ZSk7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpZm9yKHZhciBYPXkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLGZlPW8oZnVuY3Rpb24oVSl7dmFyIFRlPW5ldyBTZXQ7WFtVXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtUZS5hZGQoQWUpfSk7dmFyIGllPW5ldyBTZXQoW10uY29uY2F0KHUoVGUpKS5maWx0ZXIoZnVuY3Rpb24oQWUpe3JldHVybiBCLmhhcyhBZSl9KSksRWU9dm9pZCAwO2llLnNpemU+MD9FZT13W3guZ2V0KGllLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOkVlPUEoVGUpLnksVGUuZm9yRWFjaChmdW5jdGlvbihBZSl7Qi5oYXMoQWUpfHwod1t4LmdldChBZSldPUVlKX0pfSwiX2xvb3A1IiksaGU9MDtoZTxYLmxlbmd0aDtoZSsrKWZlKGhlKX15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmZnVuY3Rpb24oKXt2YXIgdmU9bmV3IE1hcCxVPW5ldyBNYXAsVGU9bmV3IE1hcCxpZT1uZXcgTWFwLEVlPW5ldyBNYXAsQWU9bmV3IE1hcCxHZT1uZXcgU2V0LEJlPW5ldyBTZXQ7aWYoQi5mb3JFYWNoKGZ1bmN0aW9uKHd0KXtHZS5hZGQod3QpLEJlLmFkZCh3dCl9KSx5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIG1lPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxIZT1vKGZ1bmN0aW9uKFdlKXtUZS5zZXQoImR1bW15IitXZSxbXSksbWVbV2VdLmZvckVhY2goZnVuY3Rpb24oRnQpe3ZlLnNldChGdCwiZHVtbXkiK1dlKSxUZS5nZXQoImR1bW15IitXZSkucHVzaChGdCksQi5oYXMoRnQpJiZHZS5hZGQoImR1bW15IitXZSl9KSxFZS5zZXQoImR1bW15IitXZSxiW3guZ2V0KG1lW1dlXVswXSldKX0sIl9sb29wNiIpLE9lPTA7T2U8bWUubGVuZ3RoO09lKyspSGUoT2UpO2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgZXQ9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsYnQ9byhmdW5jdGlvbihXZSl7aWUuc2V0KCJkdW1teSIrV2UsW10pLGV0W1dlXS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtVLnNldChGdCwiZHVtbXkiK1dlKSxpZS5nZXQoImR1bW15IitXZSkucHVzaChGdCksQi5oYXMoRnQpJiZCZS5hZGQoImR1bW15IitXZSl9KSxBZS5zZXQoImR1bW15IitXZSx3W3guZ2V0KGV0W1dlXVswXSldKX0sIl9sb29wNyIpLGt0PTA7a3Q8ZXQubGVuZ3RoO2t0KyspYnQoa3QpfXZhciB2dD1uZXcgTWFwLHJ0PW5ldyBNYXAseXQ9byhmdW5jdGlvbihXZSl7Ry5nZXQoV2UpLmZvckVhY2goZnVuY3Rpb24oRnQpe3ZhciBkZT12b2lkIDAsZ249dm9pZCAwO0Z0LmRpcmVjdGlvbj09Imhvcml6b250YWwiPyhkZT12ZS5nZXQoV2UpP3ZlLmdldChXZSk6V2UsdmUuZ2V0KEZ0LmlkKT9nbj17aWQ6dmUuZ2V0KEZ0LmlkKSxnYXA6RnQuZ2FwLGRpcmVjdGlvbjpGdC5kaXJlY3Rpb259OmduPUZ0LHZ0LmhhcyhkZSk/dnQuZ2V0KGRlKS5wdXNoKGduKTp2dC5zZXQoZGUsW2duXSksdnQuaGFzKGduLmlkKXx8dnQuc2V0KGduLmlkLFtdKSk6KGRlPVUuZ2V0KFdlKT9VLmdldChXZSk6V2UsVS5nZXQoRnQuaWQpP2duPXtpZDpVLmdldChGdC5pZCksZ2FwOkZ0LmdhcCxkaXJlY3Rpb246RnQuZGlyZWN0aW9ufTpnbj1GdCxydC5oYXMoZGUpP3J0LmdldChkZSkucHVzaChnbik6cnQuc2V0KGRlLFtnbl0pLHJ0Lmhhcyhnbi5pZCl8fHJ0LnNldChnbi5pZCxbXSkpfSl9LCJfbG9vcDgiKSxVZT0hMCx0dD0hMSxodD12b2lkIDA7dHJ5e2Zvcih2YXIgRXQ9Ry5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLGVyOyEoVWU9KGVyPUV0Lm5leHQoKSkuZG9uZSk7VWU9ITApe3ZhciBkdD1lci52YWx1ZTt5dChkdCl9fWNhdGNoKHd0KXt0dD0hMCxodD13dH1maW5hbGx5e3RyeXshVWUmJkV0LnJldHVybiYmRXQucmV0dXJuKCl9ZmluYWxseXtpZih0dCl0aHJvdyBodH19dmFyIEplPVIodnQpLGN0PVIocnQpLEN0PWsoSmUpLHB0PWsoY3QpLEJ0PUModnQpLFRyPUMocnQpLHlyPVtdLG9yPVtdO0N0LmZvckVhY2goZnVuY3Rpb24od3QsV2Upe3lyW1dlXT1bXSx3dC5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtCdC5nZXQoRnQpLmxlbmd0aD09MCYmeXJbV2VdLnB1c2goRnQpfSl9KSxwdC5mb3JFYWNoKGZ1bmN0aW9uKHd0LFdlKXtvcltXZV09W10sd3QuZm9yRWFjaChmdW5jdGlvbihGdCl7VHIuZ2V0KEZ0KS5sZW5ndGg9PTAmJm9yW1dlXS5wdXNoKEZ0KX0pfSk7dmFyIGxuPUkodnQsImhvcml6b250YWwiLEdlLEVlLHlyKSxPcj1JKHJ0LCJ2ZXJ0aWNhbCIsQmUsQWUsb3IpLGlpPW8oZnVuY3Rpb24oV2Upe1RlLmdldChXZSk/VGUuZ2V0KFdlKS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtiW3guZ2V0KEZ0KV09bG4uZ2V0KFdlKX0pOmJbeC5nZXQoV2UpXT1sbi5nZXQoV2UpfSwiX2xvb3A5IiksbW49ITAsT249ITEsX3I9dm9pZCAwO3RyeXtmb3IodmFyIG1pPWxuLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksdnM7IShtbj0odnM9bWkubmV4dCgpKS5kb25lKTttbj0hMCl7dmFyIFBuPXZzLnZhbHVlO2lpKFBuKX19Y2F0Y2god3Qpe09uPSEwLF9yPXd0fWZpbmFsbHl7dHJ5eyFtbiYmbWkucmV0dXJuJiZtaS5yZXR1cm4oKX1maW5hbGx5e2lmKE9uKXRocm93IF9yfX12YXIgU289byhmdW5jdGlvbihXZSl7aWUuZ2V0KFdlKT9pZS5nZXQoV2UpLmZvckVhY2goZnVuY3Rpb24oRnQpe3dbeC5nZXQoRnQpXT1Pci5nZXQoV2UpfSk6d1t4LmdldChXZSldPU9yLmdldChXZSl9LCJfbG9vcDEwIiksZ2w9ITAsQm49ITEsa2k9dm9pZCAwO3RyeXtmb3IodmFyIEF0PU9yLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksUHQ7IShnbD0oUHQ9QXQubmV4dCgpKS5kb25lKTtnbD0hMCl7dmFyIFBuPVB0LnZhbHVlO1NvKFBuKX19Y2F0Y2god3Qpe0JuPSEwLGtpPXd0fWZpbmFsbHl7dHJ5eyFnbCYmQXQucmV0dXJuJiZBdC5yZXR1cm4oKX1maW5hbGx5e2lmKEJuKXRocm93IGtpfX19KCl9Zm9yKHZhciBnZT0wO2dlPF8ubGVuZ3RoO2dlKyspe3ZhciBuZT1fW2dlXTtuZS5nZXRDaGlsZCgpPT1udWxsJiZuZS5zZXRDZW50ZXIoYlt4LmdldChuZS5pZCldLHdbeC5nZXQobmUuaWQpXSl9fSxhLmV4cG9ydHM9bX0sNTUxOmE9PnthLmV4cG9ydHM9dH19LHI9e307ZnVuY3Rpb24gbihhKXt2YXIgcz1yW2FdO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgbD1yW2FdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVthXShsLGwuZXhwb3J0cyxuKSxsLmV4cG9ydHN9byhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIik7dmFyIGk9big0NSk7cmV0dXJuIGl9KSgpfSl9KTt2YXIgczJlPUVpKChPYixnRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBPYj09Im9iamVjdCImJnR5cGVvZiBnRj09Im9iamVjdCI/Z0YuZXhwb3J0cz1yKG1GKCkpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFsiY29zZS1iYXNlIl0scik6dHlwZW9mIE9iPT0ib2JqZWN0Ij9PYi5jeXRvc2NhcGVGY29zZT1yKG1GKCkpOmUuY3l0b3NjYXBlRmNvc2U9cihlLmNvc2VCYXNlKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoT2IsZnVuY3Rpb24odCl7cmV0dXJuKCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXs2NTg6YT0+e2EuZXhwb3J0cz1PYmplY3QuYXNzaWduIT1udWxsP09iamVjdC5hc3NpZ24uYmluZChPYmplY3QpOmZ1bmN0aW9uKHMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHU9QXJyYXkobD4xP2wtMTowKSxoPTE7aDxsO2grKyl1W2gtMV09YXJndW1lbnRzW2hdO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihkKXtyZXR1cm4gc1tkXT1mW2RdfSl9KSxzfX0sNTQ4OihhLHMsbCk9Pnt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQocCxtKXt2YXIgZz1bXSx5PSEwLHY9ITEseD12b2lkIDA7dHJ5e2Zvcih2YXIgYj1wW1N5bWJvbC5pdGVyYXRvcl0oKSx3OyEoeT0odz1iLm5leHQoKSkuZG9uZSkmJihnLnB1c2gody52YWx1ZSksIShtJiZnLmxlbmd0aD09PW0pKTt5PSEwKTt9Y2F0Y2goXyl7dj0hMCx4PV99ZmluYWxseXt0cnl7IXkmJmIucmV0dXJuJiZiLnJldHVybigpfWZpbmFsbHl7aWYodil0aHJvdyB4fX1yZXR1cm4gZ31yZXR1cm4gbyhkLCJzbGljZUl0ZXJhdG9yIiksZnVuY3Rpb24ocCxtKXtpZihBcnJheS5pc0FycmF5KHApKXJldHVybiBwO2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QocCkpcmV0dXJuIGQocCxtKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpLGg9bCgxNDApLmxheW91dEJhc2UuTGlua2VkTGlzdCxmPXt9O2YuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKGQpe2Zvcih2YXIgcD17fSxtPTA7bTxkLmxlbmd0aDttKyspcFtkW21dLmlkKCldPSEwO3ZhciBnPWQuZmlsdGVyKGZ1bmN0aW9uKHksdil7dHlwZW9mIHk9PSJudW1iZXIiJiYoeT12KTtmb3IodmFyIHg9eS5wYXJlbnQoKVswXTt4IT1udWxsOyl7aWYocFt4LmlkKCldKXJldHVybiExO3g9eC5wYXJlbnQoKVswXX1yZXR1cm4hMH0pO3JldHVybiBnfSxmLmNvbm5lY3RDb21wb25lbnRzPWZ1bmN0aW9uKGQscCxtLGcpe3ZhciB5PW5ldyBoLHY9bmV3IFNldCx4PVtdLGI9dm9pZCAwLHc9dm9pZCAwLF89dm9pZCAwLFQ9ITEsRT0xLEw9W10sUz1bXSxBPW8oZnVuY3Rpb24oKXt2YXIgRD1kLmNvbGxlY3Rpb24oKTtTLnB1c2goRCk7dmFyIGs9bVswXSxSPWQuY29sbGVjdGlvbigpO1IubWVyZ2UoaykubWVyZ2Uoay5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbihwKSkseC5wdXNoKGspLFIuZm9yRWFjaChmdW5jdGlvbihOKXt5LnB1c2goTiksdi5hZGQoTiksRC5tZXJnZShOKX0pO2Zvcih2YXIgQz1vKGZ1bmN0aW9uKCl7az15LnNoaWZ0KCk7dmFyIFA9ZC5jb2xsZWN0aW9uKCk7ay5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oeil7cC5pbnRlcnNlY3Rpb24oay5lZGdlc1dpdGgoeikpLmxlbmd0aD4wJiZQLm1lcmdlKHopfSk7Zm9yKHZhciBGPTA7RjxQLmxlbmd0aDtGKyspe3ZhciBCPVBbRl07aWYoYj1tLmludGVyc2VjdGlvbihCLnVuaW9uKEIuYW5jZXN0b3JzKCkpKSxiIT1udWxsJiYhdi5oYXMoYlswXSkpe3ZhciBHPWIudW5pb24oYi5kZXNjZW5kYW50cygpKTtHLmZvckVhY2goZnVuY3Rpb24oeil7eS5wdXNoKHopLHYuYWRkKHopLEQubWVyZ2UoeiksbS5oYXMoeikmJngucHVzaCh6KX0pfX19LCJfbG9vcDIiKTt5Lmxlbmd0aCE9MDspQygpO2lmKEQuZm9yRWFjaChmdW5jdGlvbihOKXtwLmludGVyc2VjdGlvbihOLmNvbm5lY3RlZEVkZ2VzKCkpLmZvckVhY2goZnVuY3Rpb24oUCl7RC5oYXMoUC5zb3VyY2UoKSkmJkQuaGFzKFAudGFyZ2V0KCkpJiZELm1lcmdlKFApfSl9KSx4Lmxlbmd0aD09bS5sZW5ndGgmJihUPSEwKSwhVHx8VCYmRT4xKXt3PXhbMF0sXz13LmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoLHguZm9yRWFjaChmdW5jdGlvbihOKXtOLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoPF8mJihfPU4uY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgsdz1OKX0pLEwucHVzaCh3LmlkKCkpO3ZhciBPPWQuY29sbGVjdGlvbigpO08ubWVyZ2UoeFswXSkseC5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ubWVyZ2UoTil9KSx4PVtdLG09bS5kaWZmZXJlbmNlKE8pLEUrK319LCJfbG9vcCIpO2RvIEEoKTt3aGlsZSghVCk7cmV0dXJuIGcmJkwubGVuZ3RoPjAmJmcuc2V0KCJkdW1teSIrKGcuc2l6ZSsxKSxMKSxTfSxmLnJlbG9jYXRlQ29tcG9uZW50PWZ1bmN0aW9uKGQscCxtKXtpZighbS5maXhlZE5vZGVDb25zdHJhaW50KXt2YXIgZz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksdj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7aWYobS5xdWFsaXR5PT0iZHJhZnQiKXt2YXIgYj0hMCx3PSExLF89dm9pZCAwO3RyeXtmb3IodmFyIFQ9cC5ub2RlSW5kZXhlc1tTeW1ib2wuaXRlcmF0b3JdKCksRTshKGI9KEU9VC5uZXh0KCkpLmRvbmUpO2I9ITApe3ZhciBMPUUudmFsdWUsUz11KEwsMiksQT1TWzBdLEk9U1sxXSxEPW0uY3kuZ2V0RWxlbWVudEJ5SWQoQSk7aWYoRCl7dmFyIGs9RC5ib3VuZGluZ0JveCgpLFI9cC54Q29vcmRzW0ldLWsudy8yLEM9cC54Q29vcmRzW0ldK2sudy8yLE89cC55Q29vcmRzW0ldLWsuaC8yLE49cC55Q29vcmRzW0ldK2suaC8yO1I8ZyYmKGc9UiksQz55JiYoeT1DKSxPPHYmJih2PU8pLE4+eCYmKHg9Til9fX1jYXRjaCh6KXt3PSEwLF89en1maW5hbGx5e3RyeXshYiYmVC5yZXR1cm4mJlQucmV0dXJuKCl9ZmluYWxseXtpZih3KXRocm93IF99fXZhciBQPWQueC0oeStnKS8yLEY9ZC55LSh4K3YpLzI7cC54Q29vcmRzPXAueENvb3Jkcy5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHorUH0pLHAueUNvb3Jkcz1wLnlDb29yZHMubWFwKGZ1bmN0aW9uKHope3JldHVybiB6K0Z9KX1lbHNle09iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24oeil7dmFyIFc9cFt6XSxaPVcuZ2V0UmVjdCgpLngsaj1XLmdldFJlY3QoKS54K1cuZ2V0UmVjdCgpLndpZHRoLG9lPVcuZ2V0UmVjdCgpLnksSz1XLmdldFJlY3QoKS55K1cuZ2V0UmVjdCgpLmhlaWdodDtaPGcmJihnPVopLGo+eSYmKHk9aiksb2U8diYmKHY9b2UpLEs+eCYmKHg9Syl9KTt2YXIgQj1kLngtKHkrZykvMixHPWQueS0oeCt2KS8yO09iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24oeil7dmFyIFc9cFt6XTtXLnNldENlbnRlcihXLmdldENlbnRlclgoKStCLFcuZ2V0Q2VudGVyWSgpK0cpfSl9fX0sZi5jYWxjQm91bmRpbmdCb3g9ZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKHZhciB5PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHY9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIseD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixiPU51bWJlci5NSU5fU0FGRV9JTlRFR0VSLHc9dm9pZCAwLF89dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEw9ZC5kZXNjZW5kYW50cygpLm5vdCgiOnBhcmVudCIpLFM9TC5sZW5ndGgsQT0wO0E8UztBKyspe3ZhciBJPUxbQV07dz1wW2cuZ2V0KEkuaWQoKSldLUkud2lkdGgoKS8yLF89cFtnLmdldChJLmlkKCkpXStJLndpZHRoKCkvMixUPW1bZy5nZXQoSS5pZCgpKV0tSS5oZWlnaHQoKS8yLEU9bVtnLmdldChJLmlkKCkpXStJLmhlaWdodCgpLzIseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgRD17fTtyZXR1cm4gRC50b3BMZWZ0WD15LEQudG9wTGVmdFk9eCxELndpZHRoPXYteSxELmhlaWdodD1iLXgsRH0sZi5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbj1mdW5jdGlvbihkLHApe3ZhciBtPWQuY29sbGVjdGlvbigpO3JldHVybiBwLm5vZGVzKCI6cGFyZW50IikuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgeT0hMTtnLmNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2LmNzcygiZGlzcGxheSIpIT0ibm9uZSImJih5PSEwKX0pLHl8fG0ubWVyZ2UoZyl9KSxtfSxhLmV4cG9ydHM9Zn0sODE2OihhLHMsbCk9Pnt2YXIgdT1sKDU0OCksaD1sKDE0MCkuQ29TRUxheW91dCxmPWwoMTQwKS5Db1NFTm9kZSxkPWwoMTQwKS5sYXlvdXRCYXNlLlBvaW50RCxwPWwoMTQwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsbT1sKDE0MCkubGF5b3V0QmFzZS5MYXlvdXRDb25zdGFudHMsZz1sKDE0MCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyx5PWwoMTQwKS5Db1NFQ29uc3RhbnRzLHY9byhmdW5jdGlvbihiLHcpe3ZhciBfPWIuY3ksVD1iLmVsZXMsRT1ULm5vZGVzKCksTD1ULmVkZ2VzKCksUz12b2lkIDAsQT12b2lkIDAsST12b2lkIDAsRD17fTtiLnJhbmRvbWl6ZSYmKFM9dy5ub2RlSW5kZXhlcyxBPXcueENvb3JkcyxJPXcueUNvb3Jkcyk7dmFyIGs9byhmdW5jdGlvbih6KXtyZXR1cm4gdHlwZW9mIHo9PSJmdW5jdGlvbiJ9LCJpc0ZuIiksUj1vKGZ1bmN0aW9uKHosVyl7cmV0dXJuIGsoeik/eihXKTp6fSwib3B0Rm4iKSxDPXUuY2FsY1BhcmVudHNXaXRob3V0Q2hpbGRyZW4oXyxUKSxPPW8oZnVuY3Rpb24gRyh6LFcsWixqKXtmb3IodmFyIG9lPVcubGVuZ3RoLEs9MDtLPG9lO0srKyl7dmFyIGVlPVdbS10sSj1udWxsO2VlLmludGVyc2VjdGlvbihDKS5sZW5ndGg9PTAmJihKPWVlLmNoaWxkcmVuKCkpO3ZhciBIPXZvaWQgMCxxPWVlLmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczpqLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKGVlLm91dGVyV2lkdGgoKSE9bnVsbCYmZWUub3V0ZXJIZWlnaHQoKSE9bnVsbClpZihqLnJhbmRvbWl6ZSlpZighZWUuaXNQYXJlbnQoKSlIPXouYWRkKG5ldyBmKFouZ3JhcGhNYW5hZ2VyLG5ldyBkKEFbUy5nZXQoZWUuaWQoKSldLXEudy8yLElbUy5nZXQoZWUuaWQoKSldLXEuaC8yKSxuZXcgcChwYXJzZUZsb2F0KHEudykscGFyc2VGbG9hdChxLmgpKSkpO2Vsc2V7dmFyIFE9dS5jYWxjQm91bmRpbmdCb3goZWUsQSxJLFMpO2VlLmludGVyc2VjdGlvbihDKS5sZW5ndGg9PTA/SD16LmFkZChuZXcgZihaLmdyYXBoTWFuYWdlcixuZXcgZChRLnRvcExlZnRYLFEudG9wTGVmdFkpLG5ldyBwKFEud2lkdGgsUS5oZWlnaHQpKSk6SD16LmFkZChuZXcgZihaLmdyYXBoTWFuYWdlcixuZXcgZChRLnRvcExlZnRYLFEudG9wTGVmdFkpLG5ldyBwKHBhcnNlRmxvYXQocS53KSxwYXJzZUZsb2F0KHEuaCkpKSl9ZWxzZSBIPXouYWRkKG5ldyBmKFouZ3JhcGhNYW5hZ2VyLG5ldyBkKGVlLnBvc2l0aW9uKCJ4IiktcS53LzIsZWUucG9zaXRpb24oInkiKS1xLmgvMiksbmV3IHAocGFyc2VGbG9hdChxLncpLHBhcnNlRmxvYXQocS5oKSkpKTtlbHNlIEg9ei5hZGQobmV3IGYodGhpcy5ncmFwaE1hbmFnZXIpKTtpZihILmlkPWVlLmRhdGEoImlkIiksSC5ub2RlUmVwdWxzaW9uPVIoai5ub2RlUmVwdWxzaW9uLGVlKSxILnBhZGRpbmdMZWZ0PXBhcnNlSW50KGVlLmNzcygicGFkZGluZyIpKSxILnBhZGRpbmdUb3A9cGFyc2VJbnQoZWUuY3NzKCJwYWRkaW5nIikpLEgucGFkZGluZ1JpZ2h0PXBhcnNlSW50KGVlLmNzcygicGFkZGluZyIpKSxILnBhZGRpbmdCb3R0b209cGFyc2VJbnQoZWUuY3NzKCJwYWRkaW5nIikpLGoubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiYoSC5sYWJlbFdpZHRoPWVlLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMSxpbmNsdWRlT3ZlcmxheXM6ITF9KS53LEgubGFiZWxIZWlnaHQ9ZWUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExLGluY2x1ZGVPdmVybGF5czohMX0pLmgsSC5sYWJlbFBvc1ZlcnRpY2FsPWVlLmNzcygidGV4dC12YWxpZ24iKSxILmxhYmVsUG9zSG9yaXpvbnRhbD1lZS5jc3MoInRleHQtaGFsaWduIikpLERbZWUuZGF0YSgiaWQiKV09SCxpc05hTihILnJlY3QueCkmJihILnJlY3QueD0wKSxpc05hTihILnJlY3QueSkmJihILnJlY3QueT0wKSxKIT1udWxsJiZKLmxlbmd0aD4wKXt2YXIgYWU9dm9pZCAwO2FlPVouZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKFoubmV3R3JhcGgoKSxIKSxHKGFlLEosWixqKX19fSwicHJvY2Vzc0NoaWxkcmVuTGlzdCIpLE49byhmdW5jdGlvbih6LFcsWil7Zm9yKHZhciBqPTAsb2U9MCxLPTA7SzxaLmxlbmd0aDtLKyspe3ZhciBlZT1aW0tdLEo9RFtlZS5kYXRhKCJzb3VyY2UiKV0sSD1EW2VlLmRhdGEoInRhcmdldCIpXTtpZihKJiZIJiZKIT09SCYmSi5nZXRFZGdlc0JldHdlZW4oSCkubGVuZ3RoPT0wKXt2YXIgcT1XLmFkZCh6Lm5ld0VkZ2UoKSxKLEgpO3EuaWQ9ZWUuaWQoKSxxLmlkZWFsTGVuZ3RoPVIoYi5pZGVhbEVkZ2VMZW5ndGgsZWUpLHEuZWRnZUVsYXN0aWNpdHk9UihiLmVkZ2VFbGFzdGljaXR5LGVlKSxqKz1xLmlkZWFsTGVuZ3RoLG9lKyt9fWIuaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYob2U+MD95LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWovb2U6ayhiLmlkZWFsRWRnZUxlbmd0aCk/eS5ERUZBVUxUX0VER0VfTEVOR1RIPWcuREVGQVVMVF9FREdFX0xFTkdUSD01MDp5LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWIuaWRlYWxFZGdlTGVuZ3RoLHkuTUlOX1JFUFVMU0lPTl9ESVNUPWcuTUlOX1JFUFVMU0lPTl9ESVNUPWcuREVGQVVMVF9FREdFX0xFTkdUSC8xMCx5LkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049Zy5ERUZBVUxUX0VER0VfTEVOR1RIKX0sInByb2Nlc3NFZGdlcyIpLFA9byhmdW5jdGlvbih6LFcpe1cuZml4ZWROb2RlQ29uc3RyYWludCYmKHouY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludD1XLmZpeGVkTm9kZUNvbnN0cmFpbnQpLFcuYWxpZ25tZW50Q29uc3RyYWludCYmKHouY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludD1XLmFsaWdubWVudENvbnN0cmFpbnQpLFcucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoei5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9Vy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfSwicHJvY2Vzc0NvbnN0cmFpbnRzIik7Yi5uZXN0aW5nRmFjdG9yIT1udWxsJiYoeS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWcuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1iLm5lc3RpbmdGYWN0b3IpLGIuZ3Jhdml0eSE9bnVsbCYmKHkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eSksYi5udW1JdGVyIT1udWxsJiYoeS5NQVhfSVRFUkFUSU9OUz1nLk1BWF9JVEVSQVRJT05TPWIubnVtSXRlciksYi5ncmF2aXR5UmFuZ2UhPW51bGwmJih5LkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Zy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWIuZ3Jhdml0eVJhbmdlKSxiLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKHkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eUNvbXBvdW5kKSxiLmdyYXZpdHlSYW5nZUNvbXBvdW5kIT1udWxsJiYoeS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1iLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxiLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsIT1udWxsJiYoeS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWcuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1iLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsKSxiLnRpbGluZ0NvbXBhcmVCeSE9bnVsbCYmKHkuVElMSU5HX0NPTVBBUkVfQlk9Yi50aWxpbmdDb21wYXJlQnkpLGIucXVhbGl0eT09InByb29mIj9tLlFVQUxJVFk9MjptLlFVQUxJVFk9MCx5Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1nLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1tLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyx5LkRFRkFVTFRfSU5DUkVNRU5UQUw9Zy5ERUZBVUxUX0lOQ1JFTUVOVEFMPW0uREVGQVVMVF9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUseS5BTklNQVRFPWcuQU5JTUFURT1tLkFOSU1BVEU9Yi5hbmltYXRlLHkuVElMRT1iLnRpbGUseS5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/Yi50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOmIudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj9iLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpiLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLHkuREVGQVVMVF9JTkNSRU1FTlRBTD1nLkRFRkFVTFRfSU5DUkVNRU5UQUw9bS5ERUZBVUxUX0lOQ1JFTUVOVEFMPSEwLHkuUFVSRV9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUsbS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPWIudW5pZm9ybU5vZGVEaW1lbnNpb25zLGIuc3RlcD09InRyYW5zZm9ybWVkIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITAseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSExLHkuQVBQTFlfTEFZT1VUPSExKSxiLnN0ZXA9PSJlbmZvcmNlZCImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMCx5LkFQUExZX0xBWU9VVD0hMSksYi5zdGVwPT0iY29zZSImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMSx5LkFQUExZX0xBWU9VVD0hMCksYi5zdGVwPT0iYWxsIiYmKGIucmFuZG9taXplP3kuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITA6eS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMSx5LkVORk9SQ0VfQ09OU1RSQUlOVFM9ITAseS5BUFBMWV9MQVlPVVQ9ITApLGIuZml4ZWROb2RlQ29uc3RyYWludHx8Yi5hbGlnbm1lbnRDb25zdHJhaW50fHxiLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD95LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExOnkuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITA7dmFyIEY9bmV3IGgsQj1GLm5ld0dyYXBoTWFuYWdlcigpO3JldHVybiBPKEIuYWRkUm9vdCgpLHUuZ2V0VG9wTW9zdE5vZGVzKEUpLEYsYiksTihGLEIsTCksUChGLGIpLEYucnVuTGF5b3V0KCksRH0sImNvc2VMYXlvdXQiKTthLmV4cG9ydHM9e2Nvc2VMYXlvdXQ6dn19LDIxMjooYSxzLGwpPT57dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHcsXyl7Zm9yKHZhciBUPTA7VDxfLmxlbmd0aDtUKyspe3ZhciBFPV9bVF07RS5lbnVtZXJhYmxlPUUuZW51bWVyYWJsZXx8ITEsRS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEUmJihFLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxFLmtleSxFKX19cmV0dXJuIG8oYiwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKHcsXyxUKXtyZXR1cm4gXyYmYih3LnByb3RvdHlwZSxfKSxUJiZiKHcsVCksd319KCk7ZnVuY3Rpb24gaChiLHcpe2lmKCEoYiBpbnN0YW5jZW9mIHcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaCwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGY9bCg2NTgpLGQ9bCg1NDgpLHA9bCg2NTcpLG09cC5zcGVjdHJhbExheW91dCxnPWwoODE2KSx5PWcuY29zZUxheW91dCx2PU9iamVjdC5mcmVlemUoe3F1YWxpdHk6ImRlZmF1bHQiLHJhbmRvbWl6ZTohMCxhbmltYXRlOiEwLGFuaW1hdGlvbkR1cmF0aW9uOjFlMyxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGZpdDohMCxwYWRkaW5nOjMwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSx1bmlmb3JtTm9kZURpbWVuc2lvbnM6ITEscGFja0NvbXBvbmVudHM6ITAsc3RlcDoiYWxsIixzYW1wbGluZ1R5cGU6ITAsc2FtcGxlU2l6ZToyNSxub2RlU2VwYXJhdGlvbjo3NSxwaVRvbDoxZS03LG5vZGVSZXB1bHNpb246byhmdW5jdGlvbih3KXtyZXR1cm4gNDUwMH0sIm5vZGVSZXB1bHNpb24iKSxpZGVhbEVkZ2VMZW5ndGg6byhmdW5jdGlvbih3KXtyZXR1cm4gNTB9LCJpZGVhbEVkZ2VMZW5ndGgiKSxlZGdlRWxhc3RpY2l0eTpvKGZ1bmN0aW9uKHcpe3JldHVybiAuNDV9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsdGlsaW5nQ29tcGFyZUJ5OnZvaWQgMCx0aWxpbmdQYWRkaW5nVmVydGljYWw6MTAsdGlsaW5nUGFkZGluZ0hvcml6b250YWw6MTAsZ3Jhdml0eVJhbmdlQ29tcG91bmQ6MS41LGdyYXZpdHlDb21wb3VuZDoxLGdyYXZpdHlSYW5nZTozLjgsaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw6LjMsZml4ZWROb2RlQ29uc3RyYWludDp2b2lkIDAsYWxpZ25tZW50Q29uc3RyYWludDp2b2lkIDAscmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50OnZvaWQgMCxyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIil9KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYih3KXtoKHRoaXMsYiksdGhpcy5vcHRpb25zPWYoe30sdix3KX1yZXR1cm4gbyhiLCJMYXlvdXQiKSx1KGIsW3trZXk6InJ1biIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciBfPXRoaXMsVD10aGlzLm9wdGlvbnMsRT1ULmN5LEw9VC5lbGVzLFM9W10sQT12b2lkIDAsST12b2lkIDAsRD1bXSxrPXZvaWQgMCxSPVtdO1QuZml4ZWROb2RlQ29uc3RyYWludCYmKCFBcnJheS5pc0FycmF5KFQuZml4ZWROb2RlQ29uc3RyYWludCl8fFQuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg9PTApJiYoVC5maXhlZE5vZGVDb25zdHJhaW50PXZvaWQgMCksVC5hbGlnbm1lbnRDb25zdHJhaW50JiYoVC5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsJiYoIUFycmF5LmlzQXJyYXkoVC5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXx8VC5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLmxlbmd0aD09MCkmJihULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWw9dm9pZCAwKSxULmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCYmKCFBcnJheS5pc0FycmF5KFQuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKXx8VC5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwubGVuZ3RoPT0wKSYmKFQuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsPXZvaWQgMCkpLFQucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoIUFycmF5LmlzQXJyYXkoVC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfHxULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5sZW5ndGg9PTApJiYoVC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9dm9pZCAwKTt2YXIgQz1ULmZpeGVkTm9kZUNvbnN0cmFpbnR8fFQuYWxpZ25tZW50Q29uc3RyYWludHx8VC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7QyYmKFQudGlsZT0hMSxULnBhY2tDb21wb25lbnRzPSExKTt2YXIgTz12b2lkIDAsTj0hMTtpZihFLmxheW91dFV0aWxpdGllcyYmVC5wYWNrQ29tcG9uZW50cyYmKE89RS5sYXlvdXRVdGlsaXRpZXMoImdldCIpLE98fChPPUUubGF5b3V0VXRpbGl0aWVzKCkpLE49ITApLEwubm9kZXMoKS5sZW5ndGg+MClpZihOKXt2YXIgQj1kLmdldFRvcE1vc3ROb2RlcyhULmVsZXMubm9kZXMoKSk7aWYoaz1kLmNvbm5lY3RDb21wb25lbnRzKEUsVC5lbGVzLEIpLGsuZm9yRWFjaChmdW5jdGlvbihzZSl7dmFyIGtlPXNlLmJvdW5kaW5nQm94KCk7Ui5wdXNoKHt4OmtlLngxK2tlLncvMix5OmtlLnkxK2tlLmgvMn0pfSksVC5yYW5kb21pemUmJmsuZm9yRWFjaChmdW5jdGlvbihzZSl7VC5lbGVzPXNlLFMucHVzaChtKFQpKX0pLFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiIpe3ZhciBHPUUuY29sbGVjdGlvbigpO2lmKFQudGlsZSl7dmFyIHo9bmV3IE1hcCxXPVtdLFo9W10saj0wLG9lPXtub2RlSW5kZXhlczp6LHhDb29yZHM6Vyx5Q29vcmRzOlp9LEs9W107aWYoay5mb3JFYWNoKGZ1bmN0aW9uKHNlLGtlKXtzZS5lZGdlcygpLmxlbmd0aD09MCYmKHNlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihSZSxDZSl7Ry5tZXJnZShzZS5ub2RlcygpW0NlXSksUmUuaXNQYXJlbnQoKXx8KG9lLm5vZGVJbmRleGVzLnNldChzZS5ub2RlcygpW0NlXS5pZCgpLGorKyksb2UueENvb3Jkcy5wdXNoKHNlLm5vZGVzKClbMF0ucG9zaXRpb24oKS54KSxvZS55Q29vcmRzLnB1c2goc2Uubm9kZXMoKVswXS5wb3NpdGlvbigpLnkpKX0pLEsucHVzaChrZSkpfSksRy5sZW5ndGg+MSl7dmFyIGVlPUcuYm91bmRpbmdCb3goKTtSLnB1c2goe3g6ZWUueDErZWUudy8yLHk6ZWUueTErZWUuaC8yfSksay5wdXNoKEcpLFMucHVzaChvZSk7Zm9yKHZhciBKPUsubGVuZ3RoLTE7Sj49MDtKLS0pay5zcGxpY2UoS1tKXSwxKSxTLnNwbGljZShLW0pdLDEpLFIuc3BsaWNlKEtbSl0sMSl9fWsuZm9yRWFjaChmdW5jdGlvbihzZSxrZSl7VC5lbGVzPXNlLEQucHVzaCh5KFQsU1trZV0pKSxkLnJlbG9jYXRlQ29tcG9uZW50KFJba2VdLERba2VdLFQpfSl9ZWxzZSBrLmZvckVhY2goZnVuY3Rpb24oc2Usa2Upe2QucmVsb2NhdGVDb21wb25lbnQoUltrZV0sU1trZV0sVCl9KTt2YXIgSD1uZXcgU2V0O2lmKGsubGVuZ3RoPjEpe3ZhciBxPVtdLFE9TC5maWx0ZXIoZnVuY3Rpb24oc2Upe3JldHVybiBzZS5jc3MoImRpc3BsYXkiKT09Im5vbmUifSk7ay5mb3JFYWNoKGZ1bmN0aW9uKHNlLGtlKXt2YXIgUmU9dm9pZCAwO2lmKFQucXVhbGl0eT09ImRyYWZ0IiYmKFJlPVNba2VdLm5vZGVJbmRleGVzKSxzZS5ub2RlcygpLm5vdChRKS5sZW5ndGg+MCl7dmFyIENlPXt9O0NlLmVkZ2VzPVtdLENlLm5vZGVzPVtdO3ZhciBQZT12b2lkIDA7c2Uubm9kZXMoKS5ub3QoUSkuZm9yRWFjaChmdW5jdGlvbihJZSl7aWYoVC5xdWFsaXR5PT0iZHJhZnQiKWlmKCFJZS5pc1BhcmVudCgpKVBlPVJlLmdldChJZS5pZCgpKSxDZS5ub2Rlcy5wdXNoKHt4OlNba2VdLnhDb29yZHNbUGVdLUllLmJvdW5kaW5nYm94KCkudy8yLHk6U1trZV0ueUNvb3Jkc1tQZV0tSWUuYm91bmRpbmdib3goKS5oLzIsd2lkdGg6SWUuYm91bmRpbmdib3goKS53LGhlaWdodDpJZS5ib3VuZGluZ2JveCgpLmh9KTtlbHNle3ZhciAkZT1kLmNhbGNCb3VuZGluZ0JveChJZSxTW2tlXS54Q29vcmRzLFNba2VdLnlDb29yZHMsUmUpO0NlLm5vZGVzLnB1c2goe3g6JGUudG9wTGVmdFgseTokZS50b3BMZWZ0WSx3aWR0aDokZS53aWR0aCxoZWlnaHQ6JGUuaGVpZ2h0fSl9ZWxzZSBEW2tlXVtJZS5pZCgpXSYmQ2Uubm9kZXMucHVzaCh7eDpEW2tlXVtJZS5pZCgpXS5nZXRMZWZ0KCkseTpEW2tlXVtJZS5pZCgpXS5nZXRUb3AoKSx3aWR0aDpEW2tlXVtJZS5pZCgpXS5nZXRXaWR0aCgpLGhlaWdodDpEW2tlXVtJZS5pZCgpXS5nZXRIZWlnaHQoKX0pfSksc2UuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEllKXt2YXIgJGU9SWUuc291cmNlKCkseWU9SWUudGFyZ2V0KCk7aWYoJGUuY3NzKCJkaXNwbGF5IikhPSJub25lIiYmeWUuY3NzKCJkaXNwbGF5IikhPSJub25lIilpZihULnF1YWxpdHk9PSJkcmFmdCIpe3ZhciBYPVJlLmdldCgkZS5pZCgpKSxmZT1SZS5nZXQoeWUuaWQoKSksaGU9W10sZ2U9W107aWYoJGUuaXNQYXJlbnQoKSl7dmFyIG5lPWQuY2FsY0JvdW5kaW5nQm94KCRlLFNba2VdLnhDb29yZHMsU1trZV0ueUNvb3JkcyxSZSk7aGUucHVzaChuZS50b3BMZWZ0WCtuZS53aWR0aC8yKSxoZS5wdXNoKG5lLnRvcExlZnRZK25lLmhlaWdodC8yKX1lbHNlIGhlLnB1c2goU1trZV0ueENvb3Jkc1tYXSksaGUucHVzaChTW2tlXS55Q29vcmRzW1hdKTtpZih5ZS5pc1BhcmVudCgpKXt2YXIgdmU9ZC5jYWxjQm91bmRpbmdCb3goeWUsU1trZV0ueENvb3JkcyxTW2tlXS55Q29vcmRzLFJlKTtnZS5wdXNoKHZlLnRvcExlZnRYK3ZlLndpZHRoLzIpLGdlLnB1c2godmUudG9wTGVmdFkrdmUuaGVpZ2h0LzIpfWVsc2UgZ2UucHVzaChTW2tlXS54Q29vcmRzW2ZlXSksZ2UucHVzaChTW2tlXS55Q29vcmRzW2ZlXSk7Q2UuZWRnZXMucHVzaCh7c3RhcnRYOmhlWzBdLHN0YXJ0WTpoZVsxXSxlbmRYOmdlWzBdLGVuZFk6Z2VbMV19KX1lbHNlIERba2VdWyRlLmlkKCldJiZEW2tlXVt5ZS5pZCgpXSYmQ2UuZWRnZXMucHVzaCh7c3RhcnRYOkRba2VdWyRlLmlkKCldLmdldENlbnRlclgoKSxzdGFydFk6RFtrZV1bJGUuaWQoKV0uZ2V0Q2VudGVyWSgpLGVuZFg6RFtrZV1beWUuaWQoKV0uZ2V0Q2VudGVyWCgpLGVuZFk6RFtrZV1beWUuaWQoKV0uZ2V0Q2VudGVyWSgpfSl9KSxDZS5ub2Rlcy5sZW5ndGg+MCYmKHEucHVzaChDZSksSC5hZGQoa2UpKX19KTt2YXIgYWU9Ty5wYWNrQ29tcG9uZW50cyhxLFQucmFuZG9taXplKS5zaGlmdHM7aWYoVC5xdWFsaXR5PT0iZHJhZnQiKVMuZm9yRWFjaChmdW5jdGlvbihzZSxrZSl7dmFyIFJlPXNlLnhDb29yZHMubWFwKGZ1bmN0aW9uKFBlKXtyZXR1cm4gUGUrYWVba2VdLmR4fSksQ2U9c2UueUNvb3Jkcy5tYXAoZnVuY3Rpb24oUGUpe3JldHVybiBQZSthZVtrZV0uZHl9KTtzZS54Q29vcmRzPVJlLHNlLnlDb29yZHM9Q2V9KTtlbHNle3ZhciB1ZT0wO0guZm9yRWFjaChmdW5jdGlvbihzZSl7T2JqZWN0LmtleXMoRFtzZV0pLmZvckVhY2goZnVuY3Rpb24oa2Upe3ZhciBSZT1EW3NlXVtrZV07UmUuc2V0Q2VudGVyKFJlLmdldENlbnRlclgoKSthZVt1ZV0uZHgsUmUuZ2V0Q2VudGVyWSgpK2FlW3VlXS5keSl9KSx1ZSsrfSl9fX1lbHNle3ZhciBQPVQuZWxlcy5ib3VuZGluZ0JveCgpO2lmKFIucHVzaCh7eDpQLngxK1Audy8yLHk6UC55MStQLmgvMn0pLFQucmFuZG9taXplKXt2YXIgRj1tKFQpO1MucHVzaChGKX1ULnF1YWxpdHk9PSJkZWZhdWx0Inx8VC5xdWFsaXR5PT0icHJvb2YiPyhELnB1c2goeShULFNbMF0pKSxkLnJlbG9jYXRlQ29tcG9uZW50KFJbMF0sRFswXSxUKSk6ZC5yZWxvY2F0ZUNvbXBvbmVudChSWzBdLFNbMF0sVCl9dmFyIGNlPW8oZnVuY3Rpb24oa2UsUmUpe2lmKFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiIpe3R5cGVvZiBrZT09Im51bWJlciImJihrZT1SZSk7dmFyIENlPXZvaWQgMCxQZT12b2lkIDAsSWU9a2UuZGF0YSgiaWQiKTtyZXR1cm4gRC5mb3JFYWNoKGZ1bmN0aW9uKHllKXtJZSBpbiB5ZSYmKENlPXt4OnllW0llXS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6eWVbSWVdLmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9LFBlPXllW0llXSl9KSxULm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmKFBlLmxhYmVsV2lkdGgmJihQZS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij9DZS54Kz1QZS5sYWJlbFdpZHRoLzI6UGUubGFiZWxQb3NIb3Jpem9udGFsPT0icmlnaHQiJiYoQ2UueC09UGUubGFiZWxXaWR0aC8yKSksUGUubGFiZWxIZWlnaHQmJihQZS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj9DZS55Kz1QZS5sYWJlbEhlaWdodC8yOlBlLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiYoQ2UueS09UGUubGFiZWxIZWlnaHQvMikpKSxDZT09bnVsbCYmKENlPXt4OmtlLnBvc2l0aW9uKCJ4IikseTprZS5wb3NpdGlvbigieSIpfSkse3g6Q2UueCx5OkNlLnl9fWVsc2V7dmFyICRlPXZvaWQgMDtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKHllKXt2YXIgWD15ZS5ub2RlSW5kZXhlcy5nZXQoa2UuaWQoKSk7WCE9bnVsbCYmKCRlPXt4OnllLnhDb29yZHNbWF0seTp5ZS55Q29vcmRzW1hdfSl9KSwkZT09bnVsbCYmKCRlPXt4OmtlLnBvc2l0aW9uKCJ4IikseTprZS5wb3NpdGlvbigieSIpfSkse3g6JGUueCx5OiRlLnl9fX0sImdldFBvc2l0aW9ucyIpO2lmKFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiJ8fFQucmFuZG9taXplKXt2YXIgdGU9ZC5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihFLEwpLE5lPUwuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuY3NzKCJkaXNwbGF5Iik9PSJub25lIn0pO1QuZWxlcz1MLm5vdChOZSksTC5ub2RlcygpLm5vdCgiOnBhcmVudCIpLm5vdChOZSkubGF5b3V0UG9zaXRpb25zKF8sVCxjZSksdGUubGVuZ3RoPjAmJnRlLmZvckVhY2goZnVuY3Rpb24oc2Upe3NlLnBvc2l0aW9uKGNlKHNlKSl9KX1lbHNlIGNvbnNvbGUubG9nKCJJZiByYW5kb21pemUgb3B0aW9uIGlzIHNldCB0byBmYWxzZSwgdGhlbiBxdWFsaXR5IG9wdGlvbiBtdXN0IGJlICdkZWZhdWx0JyBvciAncHJvb2YnLiIpfSwicnVuIil9XSksYn0oKTthLmV4cG9ydHM9eH0sNjU3OihhLHMsbCk9Pnt2YXIgdT1sKDU0OCksaD1sKDE0MCkubGF5b3V0QmFzZS5NYXRyaXgsZj1sKDE0MCkubGF5b3V0QmFzZS5TVkQsZD1vKGZ1bmN0aW9uKG0pe3ZhciBnPW0uY3kseT1tLmVsZXMsdj15Lm5vZGVzKCkseD15Lm5vZGVzKCI6cGFyZW50IiksYj1uZXcgTWFwLHc9bmV3IE1hcCxfPW5ldyBNYXAsVD1bXSxFPVtdLEw9W10sUz1bXSxBPVtdLEk9W10sRD1bXSxrPVtdLFI9dm9pZCAwLEM9dm9pZCAwLE89MWU4LE49MWUtOSxQPW0ucGlUb2wsRj1tLnNhbXBsaW5nVHlwZSxCPW0ubm9kZVNlcGFyYXRpb24sRz12b2lkIDAsej1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBUZT0wLGllPTAsRWU9ITE7aWU8Rzspe1RlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpDKSxFZT0hMTtmb3IodmFyIEFlPTA7QWU8aWU7QWUrKylpZihTW0FlXT09VGUpe0VlPSEwO2JyZWFrfWlmKCFFZSlTW2llXT1UZSxpZSsrO2Vsc2UgY29udGludWV9fSwicmFuZG9tU2FtcGxlQ1IiKSxXPW8oZnVuY3Rpb24oVGUsaWUsRWUpe2Zvcih2YXIgQWU9W10sR2U9MCxCZT0wLG1lPTAsSGU9dm9pZCAwLE9lPVtdLGV0PTAsYnQ9MSxrdD0wO2t0PEM7a3QrKylPZVtrdF09Tztmb3IoQWVbQmVdPVRlLE9lW1RlXT0wO0JlPj1HZTspe21lPUFlW0dlKytdO2Zvcih2YXIgdnQ9VFttZV0scnQ9MDtydDx2dC5sZW5ndGg7cnQrKylIZT13LmdldCh2dFtydF0pLE9lW0hlXT09TyYmKE9lW0hlXT1PZVttZV0rMSxBZVsrK0JlXT1IZSk7SVttZV1baWVdPU9lW21lXSpCfWlmKEVlKXtmb3IodmFyIHl0PTA7eXQ8Qzt5dCsrKUlbeXRdW2llXTxBW3l0XSYmKEFbeXRdPUlbeXRdW2llXSk7Zm9yKHZhciBVZT0wO1VlPEM7VWUrKylBW1VlXT5ldCYmKGV0PUFbVWVdLGJ0PVVlKX1yZXR1cm4gYnR9LCJCRlMiKSxaPW8oZnVuY3Rpb24oVGUpe3ZhciBpZT12b2lkIDA7aWYoVGUpe2llPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpDKSxSPWllO2Zvcih2YXIgQWU9MDtBZTxDO0FlKyspQVtBZV09Tztmb3IodmFyIEdlPTA7R2U8RztHZSsrKVNbR2VdPWllLGllPVcoaWUsR2UsVGUpfWVsc2V7eigpO2Zvcih2YXIgRWU9MDtFZTxHO0VlKyspVyhTW0VlXSxFZSxUZSwhMSl9Zm9yKHZhciBCZT0wO0JlPEM7QmUrKylmb3IodmFyIG1lPTA7bWU8RzttZSsrKUlbQmVdW21lXSo9SVtCZV1bbWVdO2Zvcih2YXIgSGU9MDtIZTxHO0hlKyspRFtIZV09W107Zm9yKHZhciBPZT0wO09lPEc7T2UrKylmb3IodmFyIGV0PTA7ZXQ8RztldCsrKURbT2VdW2V0XT1JW1NbZXRdXVtPZV19LCJhbGxCRlMiKSxqPW8oZnVuY3Rpb24oKXtmb3IodmFyIFRlPWYuc3ZkKEQpLGllPVRlLlMsRWU9VGUuVSxBZT1UZS5WLEdlPWllWzBdKmllWzBdKmllWzBdLEJlPVtdLG1lPTA7bWU8RzttZSsrKXtCZVttZV09W107Zm9yKHZhciBIZT0wO0hlPEc7SGUrKylCZVttZV1bSGVdPTAsbWU9PUhlJiYoQmVbbWVdW0hlXT1pZVttZV0vKGllW21lXSppZVttZV0rR2UvKGllW21lXSppZVttZV0pKSl9az1oLm11bHRNYXQoaC5tdWx0TWF0KEFlLEJlKSxoLnRyYW5zcG9zZShFZSkpfSwic2FtcGxlIiksb2U9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9dm9pZCAwLGllPXZvaWQgMCxFZT1bXSxBZT1bXSxHZT1bXSxCZT1bXSxtZT0wO21lPEM7bWUrKylFZVttZV09TWF0aC5yYW5kb20oKSxBZVttZV09TWF0aC5yYW5kb20oKTtFZT1oLm5vcm1hbGl6ZShFZSksQWU9aC5ub3JtYWxpemUoQWUpO2Zvcih2YXIgSGU9MCxPZT1OLGV0PU4sYnQ9dm9pZCAwOzspe0hlKys7Zm9yKHZhciBrdD0wO2t0PEM7a3QrKylHZVtrdF09RWVba3RdO2lmKEVlPWgubXVsdEdhbW1hKGgubXVsdEwoaC5tdWx0R2FtbWEoR2UpLEksaykpLFRlPWguZG90UHJvZHVjdChHZSxFZSksRWU9aC5ub3JtYWxpemUoRWUpLE9lPWguZG90UHJvZHVjdChHZSxFZSksYnQ9TWF0aC5hYnMoT2UvZXQpLGJ0PD0xK1AmJmJ0Pj0xKWJyZWFrO2V0PU9lfWZvcih2YXIgdnQ9MDt2dDxDO3Z0KyspR2VbdnRdPUVlW3Z0XTtmb3IoSGU9MCxldD1OOzspe0hlKys7Zm9yKHZhciBydD0wO3J0PEM7cnQrKylCZVtydF09QWVbcnRdO2lmKEJlPWgubWludXNPcChCZSxoLm11bHRDb25zKEdlLGguZG90UHJvZHVjdChHZSxCZSkpKSxBZT1oLm11bHRHYW1tYShoLm11bHRMKGgubXVsdEdhbW1hKEJlKSxJLGspKSxpZT1oLmRvdFByb2R1Y3QoQmUsQWUpLEFlPWgubm9ybWFsaXplKEFlKSxPZT1oLmRvdFByb2R1Y3QoQmUsQWUpLGJ0PU1hdGguYWJzKE9lL2V0KSxidDw9MStQJiZidD49MSlicmVhaztldD1PZX1mb3IodmFyIHl0PTA7eXQ8Qzt5dCsrKUJlW3l0XT1BZVt5dF07RT1oLm11bHRDb25zKEdlLE1hdGguc3FydChNYXRoLmFicyhUZSkpKSxMPWgubXVsdENvbnMoQmUsTWF0aC5zcXJ0KE1hdGguYWJzKGllKSkpfSwicG93ZXJJdGVyYXRpb24iKTt1LmNvbm5lY3RDb21wb25lbnRzKGcseSx1LmdldFRvcE1vc3ROb2Rlcyh2KSxiKSx4LmZvckVhY2goZnVuY3Rpb24oVSl7dS5jb25uZWN0Q29tcG9uZW50cyhnLHksdS5nZXRUb3BNb3N0Tm9kZXMoVS5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbih5KSksYil9KTtmb3IodmFyIEs9MCxlZT0wO2VlPHYubGVuZ3RoO2VlKyspdltlZV0uaXNQYXJlbnQoKXx8dy5zZXQodltlZV0uaWQoKSxLKyspO3ZhciBKPSEwLEg9ITEscT12b2lkIDA7dHJ5e2Zvcih2YXIgUT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksYWU7IShKPShhZT1RLm5leHQoKSkuZG9uZSk7Sj0hMCl7dmFyIHVlPWFlLnZhbHVlO3cuc2V0KHVlLEsrKyl9fWNhdGNoKFUpe0g9ITAscT1VfWZpbmFsbHl7dHJ5eyFKJiZRLnJldHVybiYmUS5yZXR1cm4oKX1maW5hbGx5e2lmKEgpdGhyb3cgcX19Zm9yKHZhciBjZT0wO2NlPHcuc2l6ZTtjZSsrKVRbY2VdPVtdO3guZm9yRWFjaChmdW5jdGlvbihVKXtmb3IodmFyIFRlPVUuY2hpbGRyZW4oKS5pbnRlcnNlY3Rpb24oeSk7VGUubm9kZXMoIjpjaGlsZGxlc3MiKS5sZW5ndGg9PTA7KVRlPVRlLm5vZGVzKClbMF0uY2hpbGRyZW4oKS5pbnRlcnNlY3Rpb24oeSk7dmFyIGllPTAsRWU9VGUubm9kZXMoIjpjaGlsZGxlc3MiKVswXS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtUZS5ub2RlcygiOmNoaWxkbGVzcyIpLmZvckVhY2goZnVuY3Rpb24oQWUsR2Upe0FlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoPEVlJiYoRWU9QWUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgsaWU9R2UpfSksXy5zZXQoVS5pZCgpLFRlLm5vZGVzKCI6Y2hpbGRsZXNzIilbaWVdLmlkKCkpfSksdi5mb3JFYWNoKGZ1bmN0aW9uKFUpe3ZhciBUZT12b2lkIDA7VS5pc1BhcmVudCgpP1RlPXcuZ2V0KF8uZ2V0KFUuaWQoKSkpOlRlPXcuZ2V0KFUuaWQoKSksVS5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oaWUpe3kuaW50ZXJzZWN0aW9uKFUuZWRnZXNXaXRoKGllKSkubGVuZ3RoPjAmJihpZS5pc1BhcmVudCgpP1RbVGVdLnB1c2goXy5nZXQoaWUuaWQoKSkpOlRbVGVdLnB1c2goaWUuaWQoKSkpfSl9KTt2YXIgdGU9byhmdW5jdGlvbihUZSl7dmFyIGllPXcuZ2V0KFRlKSxFZT12b2lkIDA7Yi5nZXQoVGUpLmZvckVhY2goZnVuY3Rpb24oQWUpe2cuZ2V0RWxlbWVudEJ5SWQoQWUpLmlzUGFyZW50KCk/RWU9Xy5nZXQoQWUpOkVlPUFlLFRbaWVdLnB1c2goRWUpLFRbdy5nZXQoRWUpXS5wdXNoKFRlKX0pfSwiX2xvb3AiKSxOZT0hMCxzZT0hMSxrZT12b2lkIDA7dHJ5e2Zvcih2YXIgUmU9Yi5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLENlOyEoTmU9KENlPVJlLm5leHQoKSkuZG9uZSk7TmU9ITApe3ZhciBQZT1DZS52YWx1ZTt0ZShQZSl9fWNhdGNoKFUpe3NlPSEwLGtlPVV9ZmluYWxseXt0cnl7IU5lJiZSZS5yZXR1cm4mJlJlLnJldHVybigpfWZpbmFsbHl7aWYoc2UpdGhyb3cga2V9fUM9dy5zaXplO3ZhciBJZT12b2lkIDA7aWYoQz4yKXtHPUM8bS5zYW1wbGVTaXplP0M6bS5zYW1wbGVTaXplO2Zvcih2YXIgJGU9MDskZTxDOyRlKyspSVskZV09W107Zm9yKHZhciB5ZT0wO3llPEc7eWUrKylrW3llXT1bXTtyZXR1cm4gbS5xdWFsaXR5PT0iZHJhZnQifHxtLnN0ZXA9PSJhbGwiPyhaKEYpLGooKSxvZSgpLEllPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkx9KToody5mb3JFYWNoKGZ1bmN0aW9uKFUsVGUpe0UucHVzaChnLmdldEVsZW1lbnRCeUlkKFRlKS5wb3NpdGlvbigieCIpKSxMLnB1c2goZy5nZXRFbGVtZW50QnlJZChUZSkucG9zaXRpb24oInkiKSl9KSxJZT17bm9kZUluZGV4ZXM6dyx4Q29vcmRzOkUseUNvb3JkczpMfSksSWV9ZWxzZXt2YXIgWD13LmtleXMoKSxmZT1nLmdldEVsZW1lbnRCeUlkKFgubmV4dCgpLnZhbHVlKSxoZT1mZS5wb3NpdGlvbigpLGdlPWZlLm91dGVyV2lkdGgoKTtpZihFLnB1c2goaGUueCksTC5wdXNoKGhlLnkpLEM9PTIpe3ZhciBuZT1nLmdldEVsZW1lbnRCeUlkKFgubmV4dCgpLnZhbHVlKSx2ZT1uZS5vdXRlcldpZHRoKCk7RS5wdXNoKGhlLngrZ2UvMit2ZS8yK20uaWRlYWxFZGdlTGVuZ3RoKSxMLnB1c2goaGUueSl9cmV0dXJuIEllPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkx9LEllfX0sInNwZWN0cmFsTGF5b3V0Iik7YS5leHBvcnRzPXtzcGVjdHJhbExheW91dDpkfX0sNTc5OihhLHMsbCk9Pnt2YXIgdT1sKDIxMiksaD1vKGZ1bmN0aW9uKGQpe2QmJmQoImxheW91dCIsImZjb3NlIix1KX0sInJlZ2lzdGVyIik7dHlwZW9mIGN5dG9zY2FwZTwidSImJmgoY3l0b3NjYXBlKSxhLmV4cG9ydHM9aH0sMTQwOmE9PnthLmV4cG9ydHM9dH19LHI9e307ZnVuY3Rpb24gbihhKXt2YXIgcz1yW2FdO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgbD1yW2FdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVthXShsLGwuZXhwb3J0cyxuKSxsLmV4cG9ydHN9byhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIik7dmFyIGk9big1NzkpO3JldHVybiBpfSkoKX0pfSk7dmFyIEYxLGFwLHlGPU0oKCk9PnsidXNlIHN0cmljdCI7c3UoKTtGMT1vKHQ9PmA8Zz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iODAiIHN0eWxlPSJmaWxsOiAjMDg3ZWJmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4ke3R9PC9nPmAsIndyYXBJY29uIiksYXA9e3ByZWZpeDoibWVybWFpZC1hcmNoaXRlY3R1cmUiLGhlaWdodDo4MCx3aWR0aDo4MCxpY29uczp7ZGF0YWJhc2U6e2JvZHk6RjEoJzxwYXRoIGlkPSJiIiBkYXRhLW5hbWU9IjQiIGQ9Im0yMCw1Ny44NmMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggaWQ9ImMiIGRhdGEtbmFtZT0iMyIgZD0ibTIwLDQ1Ljk1YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBpZD0iZCIgZGF0YS1uYW1lPSIyIiBkPSJtMjAsMzQuMDVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGlkPSJlIiBkYXRhLW5hbWU9IjEiIGN4PSI0MCIgY3k9IjIyLjE0IiByeD0iMjAiIHJ5PSI3LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIyMCIgeTE9IjU3Ljg2IiB4Mj0iMjAiIHkyPSIyMi4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iNjAiIHkxPSI1Ny44NiIgeDI9IjYwIiB5Mj0iMjIuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LHNlcnZlcjp7Ym9keTpGMSgnPHJlY3QgeD0iMTcuNSIgeT0iMTcuNSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiByeD0iMiIgcnk9IjIiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSIzMi41IiB4Mj0iNjIuNSIgeTI9IjMyLjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSI0Ny41IiB4Mj0iNjIuNSIgeTI9IjQ3LjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGc+PHBhdGggZD0ibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSwyNWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PHBhdGggZD0ibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSw0MGMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PHBhdGggZD0ibTU2LjI1LDU1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSw1NWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PGNpcmNsZSBjeD0iMzIuNSIgY3k9IjI1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyNy41IiBjeT0iMjUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjIyLjUiIGN5PSIyNSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PC9nPjxnPjxjaXJjbGUgY3g9IjMyLjUiIGN5PSI0MCIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjcuNSIgY3k9IjQwIiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyMi41IiBjeT0iNDAiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48Y2lyY2xlIGN4PSIzMi41IiBjeT0iNTUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjI3LjUiIGN5PSI1NSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjU1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+Jyl9LGRpc2s6e2JvZHk6RjEoJzxyZWN0IHg9IjIwIiB5PSIxNSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjUwIiByeD0iMSIgcnk9IjEiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjI0IiBjeT0iMTkuMTciIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNTYiIGN5PSIxOS4xNyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSIyNCIgY3k9IjYwLjgzIiByeD0iLjgiIHJ5PSIuODMiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjU2IiBjeT0iNjAuODMiIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNDAiIGN5PSIzMy43NSIgcng9IjE0IiByeT0iMTQuNTgiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjQwIiBjeT0iMzMuNzUiIHJ4PSI0IiByeT0iNC4xNyIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtMzcuNTEsNDIuNTJsLTQuODMsMTMuMjJjLS4yNi43MS0xLjEsMS4wMi0xLjc2LjY0bC00LjE4LTIuNDJjLS42Ni0uMzgtLjgxLTEuMjYtLjMzLTEuODRsOS4wMS0xMC44Yy44OC0xLjA1LDIuNTYtLjA4LDIuMDksMS4yWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPicpfSxpbnRlcm5ldDp7Ym9keTpGMSgnPGNpcmNsZSBjeD0iNDAiIGN5PSI0MCIgcj0iMjIuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iNDAiIHkxPSIxNy41IiB4Mj0iNDAiIHkyPSI2Mi41IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxNy41IiB5MT0iNDAiIHgyPSI2Mi41IiB5Mj0iNDAiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggZD0ibTM5Ljk5LDE3LjUxYy0xNS4yOCwxMS4xLTE1LjI4LDMzLjg4LDAsNDQuOTgiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggZD0ibTQwLjAxLDE3LjUxYzE1LjI4LDExLjEsMTUuMjgsMzMuODgsMCw0NC45OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTkuNzUiIHkxPSIzMC4xIiB4Mj0iNjAuMjUiIHkyPSIzMC4xIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxOS43NSIgeTE9IjQ5LjkiIHgyPSI2MC4yNSIgeTI9IjQ5LjkiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LGNsb3VkOntib2R5OkYxKCc8cGF0aCBkPSJtNjUsNDcuNWMwLDIuNzYtMi4yNCw1LTUsNUgyMGMtMi43NiwwLTUtMi4yNC01LTUsMC0xLjg3LDEuMDMtMy41MSwyLjU2LTQuMzYtLjA0LS4yMS0uMDYtLjQyLS4wNi0uNjQsMC0yLjYsMi40OC00Ljc0LDUuNjUtNC45NywxLjY1LTQuNTEsNi4zNC03Ljc2LDExLjg1LTcuNzYuODYsMCwxLjY5LjA4LDIuNS4yMywyLjA5LTEuNTcsNC42OS0yLjUsNy41LTIuNSw2LjEsMCwxMS4xOSw0LjM4LDEyLjI4LDEwLjE3LDIuMTQuNTYsMy43MiwyLjUxLDMuNzIsNC44MywwLC4wMywwLC4wNy0uMDEuMSwyLjI5LjQ2LDQuMDEsMi40OCw0LjAxLDQuOVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LHVua25vd246elMsYmxhbms6e2JvZHk6RjEoIiIpfX19fSk7dmFyIG8yZSxsMmUsYzJlLHUyZSxoMmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzdSgpO1Z0KCk7UGwoKTtSYigpO3lGKCk7Z1MoKTtvMmU9byhhc3luYyBmdW5jdGlvbih0LGUpe2xldCByPU1pKCJwYWRkaW5nIiksbj1NaSgiaWNvblNpemUiKSxpPW4vMixhPW4vNixzPWEvMjthd2FpdCBQcm9taXNlLmFsbChlLmVkZ2VzKCkubWFwKGFzeW5jIGw9PntsZXR7c291cmNlOnUsc291cmNlRGlyOmgsc291cmNlQXJyb3c6Zixzb3VyY2VHcm91cDpkLHRhcmdldDpwLHRhcmdldERpcjptLHRhcmdldEFycm93OmcsdGFyZ2V0R3JvdXA6eSxsYWJlbDp2fT1tUyhsKSx7eCx5OmJ9PWxbMF0uc291cmNlRW5kcG9pbnQoKSx7eDp3LHk6X309bFswXS5taWRwb2ludCgpLHt4OlQseTpFfT1sWzBdLnRhcmdldEVuZHBvaW50KCksTD1yKzQ7aWYoZCYmKHlzKGgpP3grPWg9PT0iTCI/LUw6TDpiKz1oPT09IlQiPy1MOkwrMTgpLHkmJih5cyhtKT9UKz1tPT09IkwiPy1MOkw6RSs9bT09PSJUIj8tTDpMKzE4KSwhZCYmaXAuZ2V0Tm9kZSh1KT8udHlwZT09PSJqdW5jdGlvbiImJih5cyhoKT94Kz1oPT09IkwiP2k6LWk6Yis9aD09PSJUIj9pOi1pKSwheSYmaXAuZ2V0Tm9kZShwKT8udHlwZT09PSJqdW5jdGlvbiImJih5cyhtKT9UKz1tPT09IkwiP2k6LWk6RSs9bT09PSJUIj9pOi1pKSxsWzBdLl9wcml2YXRlLnJzY3JhdGNoKXtsZXQgUz10Lmluc2VydCgiZyIpO2lmKFMuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHt4fSwke2J9IEwgJHt3fSwke199IEwke1R9LCR7RX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIiksZil7bGV0IEE9eXMoaCk/RGJbaF0oeCxhKTp4LXMsST1udShoKT9EYltoXShiLGEpOmItcztTLmluc2VydCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsdUZbaF0oYSkpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke0F9LCR7SX0pYCkuYXR0cigiY2xhc3MiLCJhcnJvdyIpfWlmKGcpe2xldCBBPXlzKG0pP0RiW21dKFQsYSk6VC1zLEk9bnUobSk/RGJbbV0oRSxhKTpFLXM7Uy5pbnNlcnQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLHVGW21dKGEpKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtBfSwke0l9KWApLmF0dHIoImNsYXNzIiwiYXJyb3ciKX1pZih2KXtsZXQgQT1wUyhoLG0pPyJYWSI6eXMoaCk/IlgiOiJZIixJPTA7QT09PSJYIj9JPU1hdGguYWJzKHgtVCk6QT09PSJZIj9JPU1hdGguYWJzKGItRSkvMS41Okk9TWF0aC5hYnMoeC1UKS8yO2xldCBEPVMuYXBwZW5kKCJnIik7aWYoYXdhaXQgTGkoRCx2LHt1c2VIdG1sTGFiZWxzOiExLHdpZHRoOkksY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxwZSgpKSxELmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEE9PT0iWCIpRC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsICIrXysiKSIpO2Vsc2UgaWYoQT09PSJZIilELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIiwgIitfKyIpIHJvdGF0ZSgtOTApIik7ZWxzZSBpZihBPT09IlhZIil7bGV0IGs9TmIoaCxtKTtpZihrJiZLdmUoaykpe2xldCBSPUQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFtDLE9dPVp2ZShrKTtELmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsYHJvdGF0ZSgkey0xKkMqTyo0NX0pYCk7bGV0IE49RC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RC5hdHRyKCJ0cmFuc2Zvcm0iLGAKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke3d9LCAke18tUi5oZWlnaHQvMn0pCiAgICAgICAgICAgICAgICB0cmFuc2xhdGUoJHtDKk4ud2lkdGgvMn0sICR7TypOLmhlaWdodC8yfSkKICAgICAgICAgICAgICAgIHJvdGF0ZSgkey0xKkMqTyo0NX0sIDAsICR7Ui5oZWlnaHQvMn0pCiAgICAgICAgICAgICAgYCl9fX19fSkpfSwiZHJhd0VkZ2VzIiksbDJlPW8oYXN5bmMgZnVuY3Rpb24odCxlKXtsZXQgbj1NaSgicGFkZGluZyIpKi43NSxpPU1pKCJmb250U2l6ZSIpLHM9TWkoImljb25TaXplIikvMjthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGw9PntsZXQgdT1WZihsKTtpZih1LnR5cGU9PT0iZ3JvdXAiKXtsZXR7aCx3OmYseDE6ZCx5MTpwfT1sLmJvdW5kaW5nQm94KCk7dC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixkK3MpLmF0dHIoInkiLHArcykuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIsaCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyIpO2xldCBtPXQuYXBwZW5kKCJnIiksZz1kLHk9cDtpZih1Lmljb24pe2xldCB2PW0uYXBwZW5kKCJnIik7di5odG1sKGA8Zz4ke2F3YWl0IF9vKHUuaWNvbix7aGVpZ2h0Om4sd2lkdGg6bixmYWxsYmFja1ByZWZpeDphcC5wcmVmaXh9KX08L2c+YCksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZytzKzEpKyIsICIrKHkrcysxKSsiKSIpLGcrPW4seSs9aS8yLTEtMn1pZih1LmxhYmVsKXtsZXQgdj1tLmFwcGVuZCgiZyIpO2F3YWl0IExpKHYsdS5sYWJlbCx7dXNlSHRtbExhYmVsczohMSx3aWR0aDpmLGNsYXNzZXM6ImFyY2hpdGVjdHVyZS1zZXJ2aWNlLWxhYmVsIn0scGUoKSksdi5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwic3RhcnQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iiksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZytzKzQpKyIsICIrKHkrcysyKSsiKSIpfX19KSl9LCJkcmF3R3JvdXBzIiksYzJlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe2ZvcihsZXQgbiBvZiByKXtsZXQgaT1lLmFwcGVuZCgiZyIpLGE9TWkoImljb25TaXplIik7aWYobi50aXRsZSl7bGV0IGg9aS5hcHBlbmQoImciKTthd2FpdCBMaShoLG4udGl0bGUse3VzZUh0bWxMYWJlbHM6ITEsd2lkdGg6YSoxLjUsY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxwZSgpKSxoLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLGguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS8yKyIsICIrYSsiKSIpfWxldCBzPWkuYXBwZW5kKCJnIik7aWYobi5pY29uKXMuaHRtbChgPGc+JHthd2FpdCBfbyhuLmljb24se2hlaWdodDphLHdpZHRoOmEsZmFsbGJhY2tQcmVmaXg6YXAucHJlZml4fSl9PC9nPmApO2Vsc2UgaWYobi5pY29uVGV4dCl7cy5odG1sKGA8Zz4ke2F3YWl0IF9vKCJibGFuayIse2hlaWdodDphLHdpZHRoOmEsZmFsbGJhY2tQcmVmaXg6YXAucHJlZml4fSl9PC9nPmApO2xldCBkPXMuYXBwZW5kKCJnIikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsYSkuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi10ZXh0IikuYXR0cigic3R5bGUiLGBoZWlnaHQ6ICR7YX1weDtgKS5hcHBlbmQoImRpdiIpLmh0bWwobi5pY29uVGV4dCkscD1wYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkLm5vZGUoKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LXNpemUiKS5yZXBsYWNlKC9cRC9nLCIiKSk/PzE2O2QuYXR0cigic3R5bGUiLGAtd2Via2l0LWxpbmUtY2xhbXA6ICR7TWF0aC5mbG9vcigoYS0yKS9wKX07YCl9ZWxzZSBzLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibm9kZS1ia2ciKS5hdHRyKCJpZCIsIm5vZGUtIituLmlkKS5hdHRyKCJkIixgTTAgJHthfSB2JHstYX0gcTAsLTUgNSwtNSBoJHthfSBxNSwwIDUsNSB2JHthfSBIMCBaYCk7aS5hdHRyKCJjbGFzcyIsImFyY2hpdGVjdHVyZS1zZXJ2aWNlIik7bGV0e3dpZHRoOmwsaGVpZ2h0OnV9PWkuX2dyb3Vwc1swXVswXS5nZXRCQm94KCk7bi53aWR0aD1sLG4uaGVpZ2h0PXUsdC5zZXRFbGVtZW50Rm9ySWQobi5pZCxpKX1yZXR1cm4gMH0sImRyYXdTZXJ2aWNlcyIpLHUyZT1vKGZ1bmN0aW9uKHQsZSxyKXtyLmZvckVhY2gobj0+e2xldCBpPWUuYXBwZW5kKCJnIiksYT1NaSgiaWNvblNpemUiKTtpLmFwcGVuZCgiZyIpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK24uaWQpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjAiKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixhKSxpLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWp1bmN0aW9uIik7bGV0e3dpZHRoOmwsaGVpZ2h0OnV9PWkuX2dyb3Vwc1swXVswXS5nZXRCQm94KCk7aS53aWR0aD1sLGkuaGVpZ2h0PXUsdC5zZXRFbGVtZW50Rm9ySWQobi5pZCxpKX0pfSwiZHJhd0p1bmN0aW9ucyIpfSk7ZnVuY3Rpb24gYWl0KHQsZSl7dC5mb3JFYWNoKHI9PntlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOnt0eXBlOiJzZXJ2aWNlIixpZDpyLmlkLGljb246ci5pY29uLGxhYmVsOnIudGl0bGUscGFyZW50OnIuaW4sd2lkdGg6TWkoImljb25TaXplIiksaGVpZ2h0Ok1pKCJpY29uU2l6ZSIpfSxjbGFzc2VzOiJub2RlLXNlcnZpY2UifSl9KX1mdW5jdGlvbiBzaXQodCxlKXt0LmZvckVhY2gocj0+e2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e3R5cGU6Imp1bmN0aW9uIixpZDpyLmlkLHBhcmVudDpyLmluLHdpZHRoOk1pKCJpY29uU2l6ZSIpLGhlaWdodDpNaSgiaWNvblNpemUiKX0sY2xhc3Nlczoibm9kZS1qdW5jdGlvbiJ9KX0pfWZ1bmN0aW9uIG9pdCh0LGUpe2Uubm9kZXMoKS5tYXAocj0+e2xldCBuPVZmKHIpO2lmKG4udHlwZT09PSJncm91cCIpcmV0dXJuO24ueD1yLnBvc2l0aW9uKCkueCxuLnk9ci5wb3NpdGlvbigpLnksdC5nZXRFbGVtZW50QnlJZChuLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi54fHwwKSsiLCIrKG4ueXx8MCkrIikiKX0pfWZ1bmN0aW9uIGxpdCh0LGUpe3QuZm9yRWFjaChyPT57ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7dHlwZToiZ3JvdXAiLGlkOnIuaWQsaWNvbjpyLmljb24sbGFiZWw6ci50aXRsZSxwYXJlbnQ6ci5pbn0sY2xhc3Nlczoibm9kZS1ncm91cCJ9KX0pfWZ1bmN0aW9uIGNpdCh0LGUpe3QuZm9yRWFjaChyPT57bGV0e2xoc0lkOm4scmhzSWQ6aSxsaHNJbnRvOmEsbGhzR3JvdXA6cyxyaHNJbnRvOmwsbGhzRGlyOnUscmhzRGlyOmgscmhzR3JvdXA6Zix0aXRsZTpkfT1yLHA9cFMoci5saHNEaXIsci5yaHNEaXIpPyJzZWdtZW50cyI6InN0cmFpZ2h0IixtPXtpZDpgJHtufS0ke2l9YCxsYWJlbDpkLHNvdXJjZTpuLHNvdXJjZURpcjp1LHNvdXJjZUFycm93OmEsc291cmNlR3JvdXA6cyxzb3VyY2VFbmRwb2ludDp1PT09IkwiPyIwIDUwJSI6dT09PSJSIj8iMTAwJSA1MCUiOnU9PT0iVCI/IjUwJSAwIjoiNTAlIDEwMCUiLHRhcmdldDppLHRhcmdldERpcjpoLHRhcmdldEFycm93OmwsdGFyZ2V0R3JvdXA6Zix0YXJnZXRFbmRwb2ludDpoPT09IkwiPyIwIDUwJSI6aD09PSJSIj8iMTAwJSA1MCUiOmg9PT0iVCI/IjUwJSAwIjoiNTAlIDEwMCUifTtlLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOm0sY2xhc3NlczpwfSl9KX1mdW5jdGlvbiB1aXQodCl7bGV0IGU9dC5tYXAoaT0+e2xldCBhPXt9LHM9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFtsLFt1LGhdXSk9PnthW2hdfHwoYVtoXT1bXSksc1t1XXx8KHNbdV09W10pLGFbaF0ucHVzaChsKSxzW3VdLnB1c2gobCl9KSx7aG9yaXo6T2JqZWN0LnZhbHVlcyhhKS5maWx0ZXIobD0+bC5sZW5ndGg+MSksdmVydDpPYmplY3QudmFsdWVzKHMpLmZpbHRlcihsPT5sLmxlbmd0aD4xKX19KSxbcixuXT1lLnJlZHVjZSgoW2ksYV0se2hvcml6OnMsdmVydDpsfSk9PltbLi4uaSwuLi5zXSxbLi4uYSwuLi5sXV0sW1tdLFtdXSk7cmV0dXJue2hvcml6b250YWw6cix2ZXJ0aWNhbDpufX1mdW5jdGlvbiBoaXQodCl7bGV0IGU9W10scj1vKGk9PmAke2lbMF19LCR7aVsxXX1gLCJwb3NUb1N0ciIpLG49byhpPT5pLnNwbGl0KCIsIikubWFwKGE9PnBhcnNlSW50KGEpKSwic3RyVG9Qb3MiKTtyZXR1cm4gdC5mb3JFYWNoKGk9PntsZXQgYT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaSkubWFwKChbaCxmXSk9PltyKGYpLGhdKSkscz1bcihbMCwwXSldLGw9e30sdT17TDpbLTEsMF0sUjpbMSwwXSxUOlswLDFdLEI6WzAsLTFdfTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgaD1zLnNoaWZ0KCk7aWYoaCl7bFtoXT0xO2xldCBmPWFbaF07aWYoZil7bGV0IGQ9bihoKTtPYmplY3QuZW50cmllcyh1KS5mb3JFYWNoKChbcCxtXSk9PntsZXQgZz1yKFtkWzBdK21bMF0sZFsxXSttWzFdXSkseT1hW2ddO3kmJiFsW2ddJiYocy5wdXNoKGcpLGUucHVzaCh7W2NGW3BdXTp5LFtjRltqdmUocCldXTpmLGdhcDoxLjUqTWkoImljb25TaXplIil9KSl9KX19fX0pLGV9ZnVuY3Rpb24gZml0KHQsZSxyLG4se3NwYXRpYWxNYXBzOml9KXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e2xldCBzPVZlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSxsPWZsKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6InN0cmFpZ2h0IixsYWJlbDoiZGF0YShsYWJlbCkiLCJzb3VyY2UtZW5kcG9pbnQiOiJkYXRhKHNvdXJjZUVuZHBvaW50KSIsInRhcmdldC1lbmRwb2ludCI6ImRhdGEodGFyZ2V0RW5kcG9pbnQpIn19LHtzZWxlY3RvcjoiZWRnZS5zZWdtZW50cyIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6InNlZ21lbnRzIiwic2VnbWVudC13ZWlnaHRzIjoiMCIsInNlZ21lbnQtZGlzdGFuY2VzIjpbLjVdLCJlZGdlLWRpc3RhbmNlcyI6ImVuZHBvaW50cyIsInNvdXJjZS1lbmRwb2ludCI6ImRhdGEoc291cmNlRW5kcG9pbnQpIiwidGFyZ2V0LWVuZHBvaW50IjoiZGF0YSh0YXJnZXRFbmRwb2ludCkifX0se3NlbGVjdG9yOiJub2RlIixzdHlsZTp7ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIjoiaW5jbHVkZSJ9fSx7c2VsZWN0b3I6Im5vZGVbbGFiZWxdIixzdHlsZTp7InRleHQtdmFsaWduIjoiYm90dG9tIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJmb250LXNpemUiOmAke01pKCJmb250U2l6ZSIpfXB4YH19LHtzZWxlY3RvcjoiLm5vZGUtc2VydmljZSIsc3R5bGU6e2xhYmVsOiJkYXRhKGxhYmVsKSIsd2lkdGg6ImRhdGEod2lkdGgpIixoZWlnaHQ6ImRhdGEoaGVpZ2h0KSJ9fSx7c2VsZWN0b3I6Ii5ub2RlLWp1bmN0aW9uIixzdHlsZTp7d2lkdGg6ImRhdGEod2lkdGgpIixoZWlnaHQ6ImRhdGEoaGVpZ2h0KSJ9fSx7c2VsZWN0b3I6Ii5ub2RlLWdyb3VwIixzdHlsZTp7cGFkZGluZzpgJHtNaSgicGFkZGluZyIpfXB4YH19XX0pO3MucmVtb3ZlKCksbGl0KHIsbCksYWl0KHQsbCksc2l0KGUsbCksY2l0KG4sbCk7bGV0IHU9dWl0KGkpLGg9aGl0KGkpLGY9bC5sYXlvdXQoe25hbWU6ImZjb3NlIixxdWFsaXR5OiJwcm9vZiIsc3R5bGVFbmFibGVkOiExLGFuaW1hdGU6ITEsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGlkZWFsRWRnZUxlbmd0aChkKXtsZXRbcCxtXT1kLmNvbm5lY3RlZE5vZGVzKCkse3BhcmVudDpnfT1WZihwKSx7cGFyZW50Onl9PVZmKG0pO3JldHVybiBnPT09eT8xLjUqTWkoImljb25TaXplIik6LjUqTWkoImljb25TaXplIil9LGVkZ2VFbGFzdGljaXR5KGQpe2xldFtwLG1dPWQuY29ubmVjdGVkTm9kZXMoKSx7cGFyZW50Omd9PVZmKHApLHtwYXJlbnQ6eX09VmYobSk7cmV0dXJuIGc9PT15Py40NTouMDAxfSxhbGlnbm1lbnRDb25zdHJhaW50OnUscmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50Omh9KTtmLm9uZSgibGF5b3V0c3RvcCIsKCk9PntmdW5jdGlvbiBkKHAsbSxnLHkpe2xldCB2LHgse3g6Yix5Ond9PXAse3g6Xyx5OlR9PW07eD0oeS13KyhiLWcpKih3LVQpLyhiLV8pKS9NYXRoLnNxcnQoMStNYXRoLnBvdygody1UKS8oYi1fKSwyKSksdj1NYXRoLnNxcnQoTWF0aC5wb3coeS13LDIpK01hdGgucG93KGctYiwyKS1NYXRoLnBvdyh4LDIpKTtsZXQgRT1NYXRoLnNxcnQoTWF0aC5wb3coXy1iLDIpK01hdGgucG93KFQtdywyKSk7dj12L0U7bGV0IEw9KF8tYikqKHktdyktKFQtdykqKGctYik7c3dpdGNoKCEwKXtjYXNlIEw+PTA6TD0xO2JyZWFrO2Nhc2UgTDwwOkw9LTE7YnJlYWt9bGV0IFM9KF8tYikqKGctYikrKFQtdykqKHktdyk7c3dpdGNoKCEwKXtjYXNlIFM+PTA6Uz0xO2JyZWFrO2Nhc2UgUzwwOlM9LTE7YnJlYWt9cmV0dXJuIHg9TWF0aC5hYnMoeCkqTCx2PXYqUyx7ZGlzdGFuY2VzOngsd2VpZ2h0czp2fX1vKGQsImdldFNlZ21lbnRXZWlnaHRzIiksbC5zdGFydEJhdGNoKCk7Zm9yKGxldCBwIG9mIE9iamVjdC52YWx1ZXMobC5lZGdlcygpKSlpZihwLmRhdGE/LigpKXtsZXR7eDptLHk6Z309cC5zb3VyY2UoKS5wb3NpdGlvbigpLHt4OnkseTp2fT1wLnRhcmdldCgpLnBvc2l0aW9uKCk7aWYobSE9PXkmJmchPT12KXtsZXQgeD1wLnNvdXJjZUVuZHBvaW50KCksYj1wLnRhcmdldEVuZHBvaW50KCkse3NvdXJjZURpcjp3fT1tUyhwKSxbXyxUXT1udSh3KT9beC54LGIueV06W2IueCx4LnldLHt3ZWlnaHRzOkUsZGlzdGFuY2VzOkx9PWQoeCxiLF8sVCk7cC5zdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiLEwpLHAuc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIsRSl9fWwuZW5kQmF0Y2goKSxmLnJ1bigpfSksZi5ydW4oKSxsLnJlYWR5KGQ9PntZLmluZm8oIlJlYWR5IixkKSxhKGwpfSl9KX12YXIgZjJlLGRpdCxkMmUscDJlPU0oKCk9PnsidXNlIHN0cmljdCI7c3UoKTtTQigpO2YyZT1KaShzMmUoKSwxKTtwcigpO3V0KCk7ZWgoKTthaSgpO1JiKCk7eUYoKTtnUygpO2gyZSgpO1hiKFt7bmFtZTphcC5wcmVmaXgsaWNvbnM6YXB9XSk7ZmwudXNlKGYyZS5kZWZhdWx0KTtvKGFpdCwiYWRkU2VydmljZXMiKTtvKHNpdCwiYWRkSnVuY3Rpb25zIik7byhvaXQsInBvc2l0aW9uTm9kZXMiKTtvKGxpdCwiYWRkR3JvdXBzIik7byhjaXQsImFkZEVkZ2VzIik7byh1aXQsImdldEFsaWdubWVudHMiKTtvKGhpdCwiZ2V0UmVsYXRpdmVDb25zdHJhaW50cyIpO28oZml0LCJsYXlvdXRBcmNoaXRlY3R1cmUiKTtkaXQ9byhhc3luYyh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldFNlcnZpY2VzKCkscz1pLmdldEp1bmN0aW9ucygpLGw9aS5nZXRHcm91cHMoKSx1PWkuZ2V0RWRnZXMoKSxoPWkuZ2V0RGF0YVN0cnVjdHVyZXMoKSxmPVZhKGUpLGQ9Zi5hcHBlbmQoImciKTtkLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWVkZ2VzIik7bGV0IHA9Zi5hcHBlbmQoImciKTtwLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2VzIik7bGV0IG09Zi5hcHBlbmQoImciKTttLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWdyb3VwcyIpLGF3YWl0IGMyZShpLHAsYSksdTJlKGkscCxzKTtsZXQgZz1hd2FpdCBmaXQoYSxzLGwsdSxoKTthd2FpdCBvMmUoZCxnKSxhd2FpdCBsMmUobSxnKSxvaXQoaSxnKSxJbyh2b2lkIDAsZixNaSgicGFkZGluZyIpLE1pKCJ1c2VNYXhXaWR0aCIpKX0sImRyYXciKSxkMmU9e2RyYXc6ZGl0fX0pO3ZhciBtMmU9e307dnIobTJlLHtkaWFncmFtOigpPT5waXR9KTt2YXIgcGl0LGcyZT1NKCgpPT57InVzZSBzdHJpY3QiO24yZSgpO1JiKCk7YTJlKCk7cDJlKCk7cGl0PXtwYXJzZXI6cjJlLGRiOmlwLHJlbmRlcmVyOmQyZSxzdHlsZXM6aTJlfX0pO3ZhciBlYXQ9e307dnIoZWF0LHtkZWZhdWx0OigpPT5KaXR9KTtzdSgpO0dTKCk7WmYoKTt2YXIgVlg9ImM0IixQQ2U9byh0PT4vXlxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KHQpLCJkZXRlY3RvciIpLEJDZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oJFgoKSxHWCkpO3JldHVybntpZDpWWCxkaWFncmFtOnR9fSwibG9hZGVyIiksRkNlPXtpZDpWWCxkZXRlY3RvcjpQQ2UsbG9hZGVyOkJDZX0sVVg9RkNlO3ZhciBZaWU9ImZsb3djaGFydCIsVU9lPW8oKHQsZSk9PmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIifHxlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QodCksImRldGVjdG9yIiksSE9lPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihFVCgpLGtUKSk7cmV0dXJue2lkOllpZSxkaWFncmFtOnR9fSwibG9hZGVyIiksV09lPXtpZDpZaWUsZGV0ZWN0b3I6VU9lLGxvYWRlcjpIT2V9LHFpZT1XT2U7dmFyIFhpZT0iZmxvd2NoYXJ0LXYyIixZT2U9bygodCxlKT0+ZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtZDMiPyExOihlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiJiYoZS5sYXlvdXQ9ImVsayIpLC9eXHMqZ3JhcGgvLnRlc3QodCkmJmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqZmxvd2NoYXJ0Ly50ZXN0KHQpKSwiZGV0ZWN0b3IiKSxxT2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEVUKCksa1QpKTtyZXR1cm57aWQ6WGllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxYT2U9e2lkOlhpZSxkZXRlY3RvcjpZT2UsbG9hZGVyOnFPZX0samllPVhPZTt2YXIgRWFlPSJlciIsa1BlPW8odD0+L15ccyplckRpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksRVBlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihrYWUoKSxUYWUpKTtyZXR1cm57aWQ6RWFlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxTUGU9e2lkOkVhZSxkZXRlY3RvcjprUGUsbG9hZGVyOkVQZX0sU2FlPVNQZTt2YXIgT3VlPSJnaXRHcmFwaCIsakdlPW8odD0+L15ccypnaXRHcmFwaC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxLR2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEl1ZSgpLE11ZSkpO3JldHVybntpZDpPdWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLFFHZT17aWQ6T3VlLGRldGVjdG9yOmpHZSxsb2FkZXI6S0dlfSxQdWU9UUdlO3ZhciBmaGU9ImdhbnR0IixGJGU9byh0PT4vXlxzKmdhbnR0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLHokZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaGhlKCksdWhlKSk7cmV0dXJue2lkOmZoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksRyRlPXtpZDpmaGUsZGV0ZWN0b3I6RiRlLGxvYWRlcjp6JGV9LGRoZT1HJGU7dmFyIFRoZT0iaW5mbyIsWSRlPW8odD0+L15ccyppbmZvLy50ZXN0KHQpLCJkZXRlY3RvciIpLHEkZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od2hlKCksYmhlKSk7cmV0dXJue2lkOlRoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksa2hlPXtpZDpUaGUsZGV0ZWN0b3I6WSRlLGxvYWRlcjpxJGV9O3ZhciBNaGU9InBpZSIsc1ZlPW8odD0+L15ccypwaWUvLnRlc3QodCksImRldGVjdG9yIiksb1ZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihSaGUoKSxOaGUpKTtyZXR1cm57aWQ6TWhlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxJaGU9e2lkOk1oZSxkZXRlY3RvcjpzVmUsbG9hZGVyOm9WZX07dmFyIHFoZT0icXVhZHJhbnRDaGFydCIsU1ZlPW8odD0+L15ccypxdWFkcmFudENoYXJ0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLENWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWWhlKCksV2hlKSk7cmV0dXJue2lkOnFoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksQVZlPXtpZDpxaGUsZGV0ZWN0b3I6U1ZlLGxvYWRlcjpDVmV9LFhoZT1BVmU7dmFyIHdmZT0ieHljaGFydCIsVVZlPW8odD0+L15ccyp4eWNoYXJ0LWJldGEvLnRlc3QodCksImRldGVjdG9yIiksSFZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiZmUoKSx4ZmUpKTtyZXR1cm57aWQ6d2ZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxXVmU9e2lkOndmZSxkZXRlY3RvcjpVVmUsbG9hZGVyOkhWZX0sVGZlPVdWZTt2YXIgRmZlPSJyZXF1aXJlbWVudCIseFVlPW8odD0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QodCksImRldGVjdG9yIiksYlVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihCZmUoKSxQZmUpKTtyZXR1cm57aWQ6RmZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSx3VWU9e2lkOkZmZSxkZXRlY3Rvcjp4VWUsbG9hZGVyOmJVZX0semZlPXdVZTt2YXIgZmRlPSJzZXF1ZW5jZSIsRUhlPW8odD0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksU0hlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihoZGUoKSx1ZGUpKTtyZXR1cm57aWQ6ZmRlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxDSGU9e2lkOmZkZSxkZXRlY3RvcjpFSGUsbG9hZGVyOlNIZX0sZGRlPUNIZTt2YXIgQ2RlPSJjbGFzcyIsaVdlPW8oKHQsZSk9PmU/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypjbGFzc0RpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksYVdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTZGUoKSxFZGUpKTtyZXR1cm57aWQ6Q2RlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxzV2U9e2lkOkNkZSxkZXRlY3RvcjppV2UsbG9hZGVyOmFXZX0sQWRlPXNXZTt2YXIgRGRlPSJjbGFzc0RpYWdyYW0iLGxXZT1vKCh0LGUpPT4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdCh0KSYmZT8uY2xhc3M/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmNsYXNzRGlhZ3JhbS12Mi8udGVzdCh0KSwiZGV0ZWN0b3IiKSxjV2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KExkZSgpLF9kZSkpO3JldHVybntpZDpEZGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLHVXZT17aWQ6RGRlLGRldGVjdG9yOmxXZSxsb2FkZXI6Y1dlfSxOZGU9dVdlO3ZhciBUMGU9InN0YXRlIixhWWU9bygodCxlKT0+ZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxzWWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHcwZSgpLGIwZSkpO3JldHVybntpZDpUMGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLG9ZZT17aWQ6VDBlLGRldGVjdG9yOmFZZSxsb2FkZXI6c1llfSxrMGU9b1llO3ZhciBDMGU9InN0YXRlRGlhZ3JhbSIsY1llPW8oKHQsZSk9PiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KHQpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSYmZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIiksImRldGVjdG9yIiksdVllPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTMGUoKSxFMGUpKTtyZXR1cm57aWQ6QzBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxoWWU9e2lkOkMwZSxkZXRlY3RvcjpjWWUsbG9hZGVyOnVZZX0sQTBlPWhZZTt2YXIgVTBlPSJqb3VybmV5IixSWWU9byh0PT4vXlxzKmpvdXJuZXkvLnRlc3QodCksImRldGVjdG9yIiksTVllPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihWMGUoKSwkMGUpKTtyZXR1cm57aWQ6VTBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxJWWU9e2lkOlUwZSxkZXRlY3RvcjpSWWUsbG9hZGVyOk1ZZX0sSDBlPUlZZTt1dCgpO2VoKCk7YWkoKTt2YXIgT1llPW8oKHQsZSxyKT0+e1kuZGVidWcoYHJlbmRlcmluZyBzdmcgZm9yIHN5bnRheCBlcnJvcgpgKTtsZXQgbj1WYShlKSxpPW4uYXBwZW5kKCJnIik7bi5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksWnIobiwxMDAsNTEyLCEwKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtyfWApfSwiZHJhdyIpLHhQPXtkcmF3Ok9ZZX0sVzBlPXhQO3ZhciBQWWU9e2RiOnt9LHJlbmRlcmVyOnhQLHBhcnNlcjp7cGFyc2U6bygoKT0+e30sInBhcnNlIil9fSxZMGU9UFllO3ZhciBxMGU9ImZsb3djaGFydC1lbGsiLEJZZT1vKCh0LGU9e30pPT4vXlxzKmZsb3djaGFydC1lbGsvLnRlc3QodCl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KHQpJiZlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyhlLmxheW91dD0iZWxrIiwhMCk6ITEsImRldGVjdG9yIiksRlllPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihFVCgpLGtUKSk7cmV0dXJue2lkOnEwZSxkaWFncmFtOnR9fSwibG9hZGVyIikselllPXtpZDpxMGUsZGV0ZWN0b3I6QlllLGxvYWRlcjpGWWV9LFgwZT16WWU7dmFyIGJwZT0idGltZWxpbmUiLGlxZT1vKHQ9Pi9eXHMqdGltZWxpbmUvLnRlc3QodCksImRldGVjdG9yIiksYXFlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih4cGUoKSx2cGUpKTtyZXR1cm57aWQ6YnBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxzcWU9e2lkOmJwZSxkZXRlY3RvcjppcWUsbG9hZGVyOmFxZX0sd3BlPXNxZTt2YXIgejFlPSJtaW5kbWFwIixwdHQ9byh0PT4vXlxzKm1pbmRtYXAvLnRlc3QodCksImRldGVjdG9yIiksbXR0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihGMWUoKSxCMWUpKTtyZXR1cm57aWQ6ejFlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxndHQ9e2lkOnoxZSxkZXRlY3RvcjpwdHQsbG9hZGVyOm10dH0sRzFlPWd0dDt2YXIgWjFlPSJrYW5iYW4iLFJ0dD1vKHQ9Pi9eXHMqa2FuYmFuLy50ZXN0KHQpLCJkZXRlY3RvciIpLE10dD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUTFlKCksSzFlKSk7cmV0dXJue2lkOloxZSxkaWFncmFtOnR9fSwibG9hZGVyIiksSXR0PXtpZDpaMWUsZGV0ZWN0b3I6UnR0LGxvYWRlcjpNdHR9LEoxZT1JdHQ7dmFyIFJ5ZT0ic2Fua2V5IixycnQ9byh0PT4vXlxzKnNhbmtleS1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLG5ydD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oTnllKCksRHllKSk7cmV0dXJue2lkOlJ5ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksaXJ0PXtpZDpSeWUsZGV0ZWN0b3I6cnJ0LGxvYWRlcjpucnR9LE15ZT1pcnQ7dmFyIFV5ZT0icGFja2V0Iix5cnQ9byh0PT4vXlxzKnBhY2tldC1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLHZydD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVnllKCksJHllKSk7cmV0dXJue2lkOlV5ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksSHllPXtpZDpVeWUsZGV0ZWN0b3I6eXJ0LGxvYWRlcjp2cnR9O3ZhciBxdmU9ImJsb2NrIix6bnQ9byh0PT4vXlxzKmJsb2NrLWJldGEvLnRlc3QodCksImRldGVjdG9yIiksR250PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihZdmUoKSxXdmUpKTtyZXR1cm57aWQ6cXZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSwkbnQ9e2lkOnF2ZSxkZXRlY3Rvcjp6bnQsbG9hZGVyOkdudH0sWHZlPSRudDt2YXIgeTJlPSJhcmNoaXRlY3R1cmUiLG1pdD1vKHQ9Pi9eXHMqYXJjaGl0ZWN0dXJlLy50ZXN0KHQpLCJkZXRlY3RvciIpLGdpdD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZzJlKCksbTJlKSk7cmV0dXJue2lkOnkyZSxkaWFncmFtOnR9fSwibG9hZGVyIikseWl0PXtpZDp5MmUsZGV0ZWN0b3I6bWl0LGxvYWRlcjpnaXR9LHYyZT15aXQ7WmYoKTtWdCgpO3ZhciB4MmU9ITEsejE9bygoKT0+e3gyZXx8KHgyZT0hMCxvZCgiZXJyb3IiLFkwZSx0PT50LnRvTG93ZXJDYXNlKCkudHJpbSgpPT09ImVycm9yIiksb2QoIi0tLSIse2RiOntjbGVhcjpvKCgpPT57fSwiY2xlYXIiKX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3Om8oKCk9Pnt9LCJkcmF3Iil9LHBhcnNlcjp7cGFyc2U6bygoKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9LCJwYXJzZSIpfSxpbml0Om8oKCk9Pm51bGwsImluaXQiKX0sdD0+dC50b0xvd2VyQ2FzZSgpLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoIi0tLSIpKSxaYihVWCxKMWUsTmRlLEFkZSxTYWUsZGhlLGtoZSxJaGUsemZlLGRkZSxYMGUsamllLHFpZSxHMWUsd3BlLFB1ZSxBMGUsazBlLEgwZSxYaGUsTXllLEh5ZSxUZmUsWHZlLHYyZSkpfSwiYWRkRGlhZ3JhbXMiKTt1dCgpO1pmKCk7VnQoKTt2YXIgYjJlPW8oYXN5bmMoKT0+e1kuZGVidWcoIkxvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtcyIpO2xldCBlPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoUWYpLm1hcChhc3luYyhbcix7ZGV0ZWN0b3I6bixsb2FkZXI6aX1dKT0+e2lmKGkpdHJ5e2J5KHIpfWNhdGNoe3RyeXtsZXR7ZGlhZ3JhbTphLGlkOnN9PWF3YWl0IGkoKTtvZChzLGEsbil9Y2F0Y2goYSl7dGhyb3cgWS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGlhZ3JhbSB3aXRoIGtleSAke3J9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKSxkZWxldGUgUWZbcl0sYX19fSkpKS5maWx0ZXIocj0+ci5zdGF0dXM9PT0icmVqZWN0ZWQiKTtpZihlLmxlbmd0aD4wKXtZLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApO2ZvcihsZXQgciBvZiBlKVkuZXJyb3Iocik7dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApfX0sImxvYWRSZWdpc3RlcmVkRGlhZ3JhbXMiKTt1dCgpO3ByKCk7dmFyIHlTPSJjb21tIix2Uz0icnVsZSIseFM9ImRlY2wiO3ZhciB3MmU9IkBpbXBvcnQiO3ZhciBUMmU9IkBrZXlmcmFtZXMiO3ZhciBrMmU9IkBsYXllciI7dmFyIHZGPU1hdGguYWJzLFBiPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gYlModCl7cmV0dXJuIHQudHJpbSgpfW8oYlMsInRyaW0iKTtmdW5jdGlvbiBCYih0LGUscil7cmV0dXJuIHQucmVwbGFjZShlLHIpfW8oQmIsInJlcGxhY2UiKTtmdW5jdGlvbiBFMmUodCxlLHIpe3JldHVybiB0LmluZGV4T2YoZSxyKX1vKEUyZSwiaW5kZXhvZiIpO2Z1bmN0aW9uIHNwKHQsZSl7cmV0dXJuIHQuY2hhckNvZGVBdChlKXwwfW8oc3AsImNoYXJhdCIpO2Z1bmN0aW9uIFVmKHQsZSxyKXtyZXR1cm4gdC5zbGljZShlLHIpfW8oVWYsInN1YnN0ciIpO2Z1bmN0aW9uIEVvKHQpe3JldHVybiB0Lmxlbmd0aH1vKEVvLCJzdHJsZW4iKTtmdW5jdGlvbiBTMmUodCl7cmV0dXJuIHQubGVuZ3RofW8oUzJlLCJzaXplb2YiKTtmdW5jdGlvbiBHMSh0LGUpe3JldHVybiBlLnB1c2godCksdH1vKEcxLCJhcHBlbmQiKTt2YXIgd1M9MSwkMT0xLEMyZT0wLHBsPTAsSWk9MCxVMT0iIjtmdW5jdGlvbiBUUyh0LGUscixuLGksYSxzLGwpe3JldHVybnt2YWx1ZTp0LHJvb3Q6ZSxwYXJlbnQ6cix0eXBlOm4scHJvcHM6aSxjaGlsZHJlbjphLGxpbmU6d1MsY29sdW1uOiQxLGxlbmd0aDpzLHJldHVybjoiIixzaWJsaW5nczpsfX1vKFRTLCJub2RlIik7ZnVuY3Rpb24gQTJlKCl7cmV0dXJuIElpfW8oQTJlLCJjaGFyIik7ZnVuY3Rpb24gXzJlKCl7cmV0dXJuIElpPXBsPjA/c3AoVTEsLS1wbCk6MCwkMS0tLElpPT09MTAmJigkMT0xLHdTLS0pLElpfW8oXzJlLCJwcmV2Iik7ZnVuY3Rpb24gbWwoKXtyZXR1cm4gSWk9cGw8QzJlP3NwKFUxLHBsKyspOjAsJDErKyxJaT09PTEwJiYoJDE9MSx3UysrKSxJaX1vKG1sLCJuZXh0Iik7ZnVuY3Rpb24gY2goKXtyZXR1cm4gc3AoVTEscGwpfW8oY2gsInBlZWsiKTtmdW5jdGlvbiBGYigpe3JldHVybiBwbH1vKEZiLCJjYXJldCIpO2Z1bmN0aW9uIGtTKHQsZSl7cmV0dXJuIFVmKFUxLHQsZSl9byhrUywic2xpY2UiKTtmdW5jdGlvbiBWMSh0KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gNTtjYXNlIDMzOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ3OmNhc2UgNjI6Y2FzZSA2NDpjYXNlIDEyNjpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OnJldHVybiA0O2Nhc2UgNTg6cmV0dXJuIDM7Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA5MTpyZXR1cm4gMjtjYXNlIDQxOmNhc2UgOTM6cmV0dXJuIDF9cmV0dXJuIDB9byhWMSwidG9rZW4iKTtmdW5jdGlvbiBMMmUodCl7cmV0dXJuIHdTPSQxPTEsQzJlPUVvKFUxPXQpLHBsPTAsW119byhMMmUsImFsbG9jIik7ZnVuY3Rpb24gRDJlKHQpe3JldHVybiBVMT0iIix0fW8oRDJlLCJkZWFsbG9jIik7ZnVuY3Rpb24gRVModCl7cmV0dXJuIGJTKGtTKHBsLTEseEYodD09PTkxP3QrMjp0PT09NDA/dCsxOnQpKSl9byhFUywiZGVsaW1pdCIpO2Z1bmN0aW9uIE4yZSh0KXtmb3IoOyhJaT1jaCgpKSYmSWk8MzM7KW1sKCk7cmV0dXJuIFYxKHQpPjJ8fFYxKElpKT4zPyIiOiIgIn1vKE4yZSwid2hpdGVzcGFjZSIpO2Z1bmN0aW9uIFIyZSh0LGUpe2Zvcig7LS1lJiZtbCgpJiYhKElpPDQ4fHxJaT4xMDJ8fElpPjU3JiZJaTw2NXx8SWk+NzAmJklpPDk3KTspO3JldHVybiBrUyh0LEZiKCkrKGU8NiYmY2goKT09MzImJm1sKCk9PTMyKSl9byhSMmUsImVzY2FwaW5nIik7ZnVuY3Rpb24geEYodCl7Zm9yKDttbCgpOylzd2l0Y2goSWkpe2Nhc2UgdDpyZXR1cm4gcGw7Y2FzZSAzNDpjYXNlIDM5OnQhPT0zNCYmdCE9PTM5JiZ4RihJaSk7YnJlYWs7Y2FzZSA0MDp0PT09NDEmJnhGKHQpO2JyZWFrO2Nhc2UgOTI6bWwoKTticmVha31yZXR1cm4gcGx9byh4RiwiZGVsaW1pdGVyIik7ZnVuY3Rpb24gTTJlKHQsZSl7Zm9yKDttbCgpJiZ0K0lpIT09NTc7KWlmKHQrSWk9PT04NCYmY2goKT09PTQ3KWJyZWFrO3JldHVybiIvKiIra1MoZSxwbC0xKSsiKiIrUGIodD09PTQ3P3Q6bWwoKSl9byhNMmUsImNvbW1lbnRlciIpO2Z1bmN0aW9uIEkyZSh0KXtmb3IoOyFWMShjaCgpKTspbWwoKTtyZXR1cm4ga1ModCxwbCl9byhJMmUsImlkZW50aWZpZXIiKTtmdW5jdGlvbiBCMmUodCl7cmV0dXJuIEQyZShTUygiIixudWxsLG51bGwsbnVsbCxbIiJdLHQ9TDJlKHQpLDAsWzBdLHQpKX1vKEIyZSwiY29tcGlsZSIpO2Z1bmN0aW9uIFNTKHQsZSxyLG4saSxhLHMsbCx1KXtmb3IodmFyIGg9MCxmPTAsZD1zLHA9MCxtPTAsZz0wLHk9MSx2PTEseD0xLGI9MCx3PSIiLF89aSxUPWEsRT1uLEw9dzt2Oylzd2l0Y2goZz1iLGI9bWwoKSl7Y2FzZSA0MDppZihnIT0xMDgmJnNwKEwsZC0xKT09NTgpe0UyZShMKz1CYihFUyhiKSwiJiIsIiZcZiIpLCImXGYiLHZGKGg/bFtoLTFdOjApKSE9LTEmJih4PS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpMKz1FUyhiKTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6TCs9TjJlKGcpO2JyZWFrO2Nhc2UgOTI6TCs9UjJlKEZiKCktMSw3KTtjb250aW51ZTtjYXNlIDQ3OnN3aXRjaChjaCgpKXtjYXNlIDQyOmNhc2UgNDc6RzEodml0KE0yZShtbCgpLEZiKCkpLGUscix1KSx1KSwoVjEoZ3x8MSk9PTV8fFYxKGNoKCl8fDEpPT01KSYmRW8oTCkmJlVmKEwsLTEsdm9pZCAwKSE9PSIgIiYmKEwrPSIgIik7YnJlYWs7ZGVmYXVsdDpMKz0iLyJ9YnJlYWs7Y2FzZSAxMjMqeTpsW2grK109RW8oTCkqeDtjYXNlIDEyNSp5OmNhc2UgNTk6Y2FzZSAwOnN3aXRjaChiKXtjYXNlIDA6Y2FzZSAxMjU6dj0wO2Nhc2UgNTkrZjp4PT0tMSYmKEw9QmIoTCwvXGYvZywiIikpLG0+MCYmKEVvKEwpLWR8fHk9PT0wJiZnPT09NDcpJiZHMShtPjMyP1AyZShMKyI7IixuLHIsZC0xLHUpOlAyZShCYihMLCIgIiwiIikrIjsiLG4scixkLTIsdSksdSk7YnJlYWs7Y2FzZSA1OTpMKz0iOyI7ZGVmYXVsdDppZihHMShFPU8yZShMLGUscixoLGYsaSxsLHcsXz1bXSxUPVtdLGQsYSksYSksYj09PTEyMylpZihmPT09MClTUyhMLGUsRSxFLF8sYSxkLGwsVCk7ZWxzZSBzd2l0Y2gocD09PTk5JiZzcChMLDMpPT09MTEwPzEwMDpwKXtjYXNlIDEwMDpjYXNlIDEwODpjYXNlIDEwOTpjYXNlIDExNTpTUyh0LEUsRSxuJiZHMShPMmUodCxFLEUsMCwwLGksbCx3LGksXz1bXSxkLFQpLFQpLGksVCxkLGwsbj9fOlQpO2JyZWFrO2RlZmF1bHQ6U1MoTCxFLEUsRSxbIiJdLFQsMCxsLFQpfX1oPWY9bT0wLHk9eD0xLHc9TD0iIixkPXM7YnJlYWs7Y2FzZSA1ODpkPTErRW8oTCksbT1nO2RlZmF1bHQ6aWYoeTwxKXtpZihiPT0xMjMpLS15O2Vsc2UgaWYoYj09MTI1JiZ5Kys9PTAmJl8yZSgpPT0xMjUpY29udGludWV9c3dpdGNoKEwrPVBiKGIpLGIqeSl7Y2FzZSAzODp4PWY+MD8xOihMKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OmxbaCsrXT0oRW8oTCktMSkqeCx4PTE7YnJlYWs7Y2FzZSA2NDpjaCgpPT09NDUmJihMKz1FUyhtbCgpKSkscD1jaCgpLGY9ZD1Fbyh3PUwrPUkyZShGYigpKSksYisrO2JyZWFrO2Nhc2UgNDU6Zz09PTQ1JiZFbyhMKT09MiYmKHk9MCl9fXJldHVybiBhfW8oU1MsInBhcnNlIik7ZnVuY3Rpb24gTzJlKHQsZSxyLG4saSxhLHMsbCx1LGgsZixkKXtmb3IodmFyIHA9aS0xLG09aT09PTA/YTpbIiJdLGc9UzJlKG0pLHk9MCx2PTAseD0wO3k8bjsrK3kpZm9yKHZhciBiPTAsdz1VZih0LHArMSxwPXZGKHY9c1t5XSkpLF89dDtiPGc7KytiKShfPWJTKHY+MD9tW2JdKyIgIit3OkJiKHcsLyZcZi9nLG1bYl0pKSkmJih1W3grK109Xyk7cmV0dXJuIFRTKHQsZSxyLGk9PT0wP3ZTOmwsdSxoLGYsZCl9byhPMmUsInJ1bGVzZXQiKTtmdW5jdGlvbiB2aXQodCxlLHIsbil7cmV0dXJuIFRTKHQsZSxyLHlTLFBiKEEyZSgpKSxVZih0LDIsLTIpLDAsbil9byh2aXQsImNvbW1lbnQiKTtmdW5jdGlvbiBQMmUodCxlLHIsbixpKXtyZXR1cm4gVFModCxlLHIseFMsVWYodCwwLG4pLFVmKHQsbisxLC0xKSxuLGkpfW8oUDJlLCJkZWNsYXJhdGlvbiIpO2Z1bmN0aW9uIENTKHQsZSl7Zm9yKHZhciByPSIiLG49MDtuPHQubGVuZ3RoO24rKylyKz1lKHRbbl0sbix0LGUpfHwiIjtyZXR1cm4gcn1vKENTLCJzZXJpYWxpemUiKTtmdW5jdGlvbiBGMmUodCxlLHIsbil7c3dpdGNoKHQudHlwZSl7Y2FzZSBrMmU6aWYodC5jaGlsZHJlbi5sZW5ndGgpYnJlYWs7Y2FzZSB3MmU6Y2FzZSB4UzpyZXR1cm4gdC5yZXR1cm49dC5yZXR1cm58fHQudmFsdWU7Y2FzZSB5UzpyZXR1cm4iIjtjYXNlIFQyZTpyZXR1cm4gdC5yZXR1cm49dC52YWx1ZSsieyIrQ1ModC5jaGlsZHJlbixuKSsifSI7Y2FzZSB2UzppZighRW8odC52YWx1ZT10LnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIEVvKHI9Q1ModC5jaGlsZHJlbixuKSk/dC5yZXR1cm49dC52YWx1ZSsieyIrcisifSI6IiJ9byhGMmUsInN0cmluZ2lmeSIpO3ZhciBqMmU9SmkobEMoKSwxKTtsVCgpO3RPKCk7dmFyIHhpdD0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIHoyZSh0LGUpe3QuYXR0cigicm9sZSIseGl0KSxlIT09IiImJnQuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGUpfW8oejJlLCJzZXRBMTF5RGlhZ3JhbUluZm8iKTtmdW5jdGlvbiBHMmUodCxlLHIsbil7aWYodC5pbnNlcnQhPT12b2lkIDApe2lmKHIpe2xldCBpPWBjaGFydC1kZXNjLSR7bn1gO3QuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsaSksdC5pbnNlcnQoImRlc2MiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIsaSkudGV4dChyKX1pZihlKXtsZXQgaT1gY2hhcnQtdGl0bGUtJHtufWA7dC5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpLHQuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixpKS50ZXh0KGUpfX19byhHMmUsImFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uIik7Z3AoKTtaYSgpO1phKCk7VnQoKTtaZigpOyRTKCk7aHIoKTt2YXIgSDE9Y2xhc3MgdHtjb25zdHJ1Y3RvcihlLHIsbixpLGEpe3RoaXMudHlwZT1lO3RoaXMudGV4dD1yO3RoaXMuZGI9bjt0aGlzLnBhcnNlcj1pO3RoaXMucmVuZGVyZXI9YX1zdGF0aWN7byh0aGlzLCJEaWFncmFtIil9c3RhdGljIGFzeW5jIGZyb21UZXh0KGUscj17fSl7bGV0IG49Q3IoKSxpPW1wKGUsbik7ZT1OWChlKStgCmA7dHJ5e2J5KGkpfWNhdGNoe2xldCBoPXN6KGkpO2lmKCFoKXRocm93IG5ldyBwcChgRGlhZ3JhbSAke2l9IG5vdCBmb3VuZC5gKTtsZXR7aWQ6ZixkaWFncmFtOmR9PWF3YWl0IGgoKTtvZChmLGQpfWxldHtkYjphLHBhcnNlcjpzLHJlbmRlcmVyOmwsaW5pdDp1fT1ieShpKTtyZXR1cm4gcy5wYXJzZXImJihzLnBhcnNlci55eT1hKSxhLmNsZWFyPy4oKSx1Py4obiksci50aXRsZSYmYS5zZXREaWFncmFtVGl0bGU/LihyLnRpdGxlKSxhd2FpdCBzLnBhcnNlKGUpLG5ldyB0KGksZSxhLHMsbCl9YXN5bmMgcmVuZGVyKGUscil7YXdhaXQgdGhpcy5yZW5kZXJlci5kcmF3KHRoaXMudGV4dCxlLHIsdGhpcyl9Z2V0UGFyc2VyKCl7cmV0dXJuIHRoaXMucGFyc2VyfWdldFR5cGUoKXtyZXR1cm4gdGhpcy50eXBlfX07ZnIoKTt2YXIgJDJlPVtdO3ZhciBWMmU9bygoKT0+eyQyZS5mb3JFYWNoKHQ9Pnt0KCl9KSwkMmU9W119LCJhdHRhY2hGdW5jdGlvbnMiKTt1dCgpO3ZhciBVMmU9byh0PT50LnJlcGxhY2UoL15ccyolJSg/IXspW15cbl0rXG4/L2dtLCIiKS50cmltU3RhcnQoKSwiY2xlYW51cENvbW1lbnRzIik7UWIoKTtldygpO2Z1bmN0aW9uIEgyZSh0KXtsZXQgZT10Lm1hdGNoKEtiKTtpZighZSlyZXR1cm57dGV4dDp0LG1ldGFkYXRhOnt9fTtsZXQgcj1TbShlWzFdLHtzY2hlbWE6RW19KT8/e307cj10eXBlb2Ygcj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHIpP3I6e307bGV0IG49e307cmV0dXJuIHIuZGlzcGxheU1vZGUmJihuLmRpc3BsYXlNb2RlPXIuZGlzcGxheU1vZGUudG9TdHJpbmcoKSksci50aXRsZSYmKG4udGl0bGU9ci50aXRsZS50b1N0cmluZygpKSxyLmNvbmZpZyYmKG4uY29uZmlnPXIuY29uZmlnKSx7dGV4dDp0LnNsaWNlKGVbMF0ubGVuZ3RoKSxtZXRhZGF0YTpufX1vKEgyZSwiZXh0cmFjdEZyb250TWF0dGVyIik7aHIoKTt2YXIgYml0PW8odD0+dC5yZXBsYWNlKC9cclxuPy9nLGAKYCkucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywoZSxyLG4pPT4iPCIrcituLnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpLCJjbGVhbnVwVGV4dCIpLHdpdD1vKHQ9PntsZXR7dGV4dDplLG1ldGFkYXRhOnJ9PUgyZSh0KSx7ZGlzcGxheU1vZGU6bix0aXRsZTppLGNvbmZpZzphPXt9fT1yO3JldHVybiBuJiYoYS5nYW50dHx8KGEuZ2FudHQ9e30pLGEuZ2FudHQuZGlzcGxheU1vZGU9bikse3RpdGxlOmksY29uZmlnOmEsdGV4dDplfX0sInByb2Nlc3NGcm9udG1hdHRlciIpLFRpdD1vKHQ9PntsZXQgZT1VdC5kZXRlY3RJbml0KHQpPz97fSxyPVV0LmRldGVjdERpcmVjdGl2ZSh0LCJ3cmFwIik7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ZS53cmFwPXIuc29tZSgoe3R5cGU6bn0pPT5uPT09IndyYXAiKTpyPy50eXBlPT09IndyYXAiJiYoZS53cmFwPSEwKSx7dGV4dDpMWCh0KSxkaXJlY3RpdmU6ZX19LCJwcm9jZXNzRGlyZWN0aXZlcyIpO2Z1bmN0aW9uIGJGKHQpe2xldCBlPWJpdCh0KSxyPXdpdChlKSxuPVRpdChyLnRleHQpLGk9RHMoci5jb25maWcsbi5kaXJlY3RpdmUpO3JldHVybiB0PVUyZShuLnRleHQpLHtjb2RlOnQsdGl0bGU6ci50aXRsZSxjb25maWc6aX19byhiRiwicHJlcHJvY2Vzc0RpYWdyYW0iKTtKQygpO2E0KCk7aHIoKTtmdW5jdGlvbiBXMmUodCl7bGV0IGU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLHI9QXJyYXkuZnJvbShlLG49PlN0cmluZy5mcm9tQ29kZVBvaW50KG4pKS5qb2luKCIiKTtyZXR1cm4gYnRvYShyKX1vKFcyZSwidG9CYXNlNjQiKTt2YXIga2l0PTVlNCxFaXQ9ImdyYXBoIFRCO2FbTWF4aW11bSB0ZXh0IHNpemUgaW4gZGlhZ3JhbSBleGNlZWRlZF07c3R5bGUgYSBmaWxsOiNmYWEiLFNpdD0ic2FuZGJveCIsQ2l0PSJsb29zZSIsQWl0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsX2l0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixMaXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLERpdD0iMTAwJSIsTml0PSIxMDAlIixSaXQ9ImJvcmRlcjowO21hcmdpbjowOyIsTWl0PSJtYXJnaW46MCIsSWl0PSJhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb24gYWxsb3ctcG9wdXBzIixPaXQ9J1RoZSAiaWZyYW1lIiB0YWcgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuJyxQaXQ9WyJmb3JlaWdub2JqZWN0Il0sQml0PVsiZG9taW5hbnQtYmFzZWxpbmUiXTtmdW5jdGlvbiBLMmUodCl7bGV0IGU9YkYodCk7cmV0dXJuIGx5KCksZUcoZS5jb25maWc/P3t9KSxlfW8oSzJlLCJwcm9jZXNzQW5kU2V0Q29uZmlncyIpO2FzeW5jIGZ1bmN0aW9uIEZpdCh0LGUpe3oxKCk7dHJ5e2xldHtjb2RlOnIsY29uZmlnOm59PUsyZSh0KTtyZXR1cm57ZGlhZ3JhbVR5cGU6KGF3YWl0IFEyZShyKSkudHlwZSxjb25maWc6bn19Y2F0Y2gocil7aWYoZT8uc3VwcHJlc3NFcnJvcnMpcmV0dXJuITE7dGhyb3cgcn19byhGaXQsInBhcnNlIik7dmFyIFkyZT1vKCh0LGUscj1bXSk9PmAKLiR7dH0gJHtlfSB7ICR7ci5qb2luKCIgIWltcG9ydGFudDsgIil9ICFpbXBvcnRhbnQ7IH1gLCJjc3NJbXBvcnRhbnRTdHlsZXMiKSx6aXQ9bygodCxlPW5ldyBNYXApPT57bGV0IHI9IiI7aWYodC50aGVtZUNTUyE9PXZvaWQgMCYmKHIrPWAKJHt0LnRoZW1lQ1NTfWApLHQuZm9udEZhbWlseSE9PXZvaWQgMCYmKHIrPWAKOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fX1gKSx0LmFsdEZvbnRGYW1pbHkhPT12b2lkIDAmJihyKz1gCjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHt0LmFsdEZvbnRGYW1pbHl9fWApLGUgaW5zdGFuY2VvZiBNYXApe2xldCBzPXQuaHRtbExhYmVscz8/dC5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHM/WyI+ICoiLCJzcGFuIl06WyJyZWN0IiwicG9seWdvbiIsImVsbGlwc2UiLCJjaXJjbGUiLCJwYXRoIl07ZS5mb3JFYWNoKGw9PntjcihsLnN0eWxlcyl8fHMuZm9yRWFjaCh1PT57cis9WTJlKGwuaWQsdSxsLnN0eWxlcyl9KSxjcihsLnRleHRTdHlsZXMpfHwocis9WTJlKGwuaWQsInRzcGFuIiwobD8udGV4dFN0eWxlc3x8W10pLm1hcCh1PT51LnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpKSkpfSl9cmV0dXJuIHJ9LCJjcmVhdGVDc3NTdHlsZXMiKSxHaXQ9bygodCxlLHIsbik9PntsZXQgaT16aXQodCxyKSxhPU8kKGUsaSx0LnRoZW1lVmFyaWFibGVzKTtyZXR1cm4gQ1MoQjJlKGAke259eyR7YX19YCksRjJlKX0sImNyZWF0ZVVzZXJTdHlsZXMiKSwkaXQ9bygodD0iIixlLHIpPT57bGV0IG49dDtyZXR1cm4hciYmIWUmJihuPW4ucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXChbXGQrLi86PT9BLVphLXotXSo/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycpKSxuPU1hKG4pLG49bi5yZXBsYWNlKC88YnI+L2csIjxici8+Iiksbn0sImNsZWFuVXBTdmdDb2RlIiksVml0PW8oKHQ9IiIsZSk9PntsZXQgcj1lPy52aWV3Qm94Py5iYXNlVmFsPy5oZWlnaHQ/ZS52aWV3Qm94LmJhc2VWYWwuaGVpZ2h0KyJweCI6Tml0LG49VzJlKGA8Ym9keSBzdHlsZT0iJHtNaXR9Ij4ke3R9PC9ib2R5PmApO3JldHVybmA8aWZyYW1lIHN0eWxlPSJ3aWR0aDoke0RpdH07aGVpZ2h0OiR7cn07JHtSaXR9IiBzcmM9ImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9VVRGLTg7YmFzZTY0LCR7bn0iIHNhbmRib3g9IiR7SWl0fSI+CiAgJHtPaXR9CjwvaWZyYW1lPmB9LCJwdXRJbnRvSUZyYW1lIikscTJlPW8oKHQsZSxyLG4saSk9PntsZXQgYT10LmFwcGVuZCgiZGl2Iik7YS5hdHRyKCJpZCIsciksbiYmYS5hdHRyKCJzdHlsZSIsbik7bGV0IHM9YS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIixlKS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsQWl0KTtyZXR1cm4gaSYmcy5hdHRyKCJ4bWxuczp4bGluayIsaSkscy5hcHBlbmQoImciKSx0fSwiYXBwZW5kRGl2U3ZnRyIpO2Z1bmN0aW9uIFgyZSh0LGUpe3JldHVybiB0LmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLGUpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIil9byhYMmUsInNhbmRib3hlZElmcmFtZSIpO3ZhciBVaXQ9bygodCxlLHIsbik9Pnt0LmdldEVsZW1lbnRCeUlkKGUpPy5yZW1vdmUoKSx0LmdldEVsZW1lbnRCeUlkKHIpPy5yZW1vdmUoKSx0LmdldEVsZW1lbnRCeUlkKG4pPy5yZW1vdmUoKX0sInJlbW92ZUV4aXN0aW5nRWxlbWVudHMiKSxIaXQ9byhhc3luYyBmdW5jdGlvbih0LGUscil7ejEoKTtsZXQgbj1LMmUoZSk7ZT1uLmNvZGU7bGV0IGk9Q3IoKTtZLmRlYnVnKGkpLGUubGVuZ3RoPihpPy5tYXhUZXh0U2l6ZT8/a2l0KSYmKGU9RWl0KTtsZXQgYT0iIyIrdCxzPSJpIit0LGw9IiMiK3MsdT0iZCIrdCxoPSIjIit1LGY9bygoKT0+e2xldCBSPVZlKHA/bDpoKS5ub2RlKCk7UiYmInJlbW92ZSJpbiBSJiZSLnJlbW92ZSgpfSwicmVtb3ZlVGVtcEVsZW1lbnRzIiksZD1WZSgiYm9keSIpLHA9aS5zZWN1cml0eUxldmVsPT09U2l0LG09aS5zZWN1cml0eUxldmVsPT09Q2l0LGc9aS5mb250RmFtaWx5O2lmKHIhPT12b2lkIDApe2lmKHImJihyLmlubmVySFRNTD0iIikscCl7bGV0IGs9WDJlKFZlKHIpLHMpO2Q9VmUoay5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxkLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGQ9VmUocik7cTJlKGQsdCx1LGBmb250LWZhbWlseTogJHtnfWAsX2l0KX1lbHNle2lmKFVpdChkb2N1bWVudCx0LHUscykscCl7bGV0IGs9WDJlKFZlKCJib2R5Iikscyk7ZD1WZShrLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLGQubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgZD1WZSgiYm9keSIpO3EyZShkLHQsdSl9bGV0IHksdjt0cnl7eT1hd2FpdCBIMS5mcm9tVGV4dChlLHt0aXRsZTpuLnRpdGxlfSl9Y2F0Y2goayl7aWYoaS5zdXBwcmVzc0Vycm9yUmVuZGVyaW5nKXRocm93IGYoKSxrO3k9YXdhaXQgSDEuZnJvbVRleHQoImVycm9yIiksdj1rfWxldCB4PWQuc2VsZWN0KGgpLm5vZGUoKSxiPXkudHlwZSx3PXguZmlyc3RDaGlsZCxfPXcuZmlyc3RDaGlsZCxUPXkucmVuZGVyZXIuZ2V0Q2xhc3Nlcz8uKGUseSksRT1HaXQoaSxiLFQsYSksTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0wuaW5uZXJIVE1MPUUsdy5pbnNlcnRCZWZvcmUoTCxfKTt0cnl7YXdhaXQgeS5yZW5kZXJlci5kcmF3KGUsdCxfeCx5KX1jYXRjaChrKXt0aHJvdyBpLnN1cHByZXNzRXJyb3JSZW5kZXJpbmc/ZigpOlcwZS5kcmF3KGUsdCxfeCksa31sZXQgUz1kLnNlbGVjdChgJHtofSBzdmdgKSxBPXkuZGIuZ2V0QWNjVGl0bGU/LigpLEk9eS5kYi5nZXRBY2NEZXNjcmlwdGlvbj8uKCk7WWl0KGIsUyxBLEkpLGQuc2VsZWN0KGBbaWQ9IiR7dH0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsTGl0KTtsZXQgRD1kLnNlbGVjdChoKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFkuZGVidWcoImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlIixpLmFycm93TWFya2VyQWJzb2x1dGUpLEQ9JGl0KEQscCx4cihpLmFycm93TWFya2VyQWJzb2x1dGUpKSxwKXtsZXQgaz1kLnNlbGVjdChoKyIgc3ZnIikubm9kZSgpO0Q9Vml0KEQsayl9ZWxzZSBtfHwoRD1qMmUuZGVmYXVsdC5zYW5pdGl6ZShELHtBRERfVEFHUzpQaXQsQUREX0FUVFI6Qml0fSkpO2lmKFYyZSgpLHYpdGhyb3cgdjtyZXR1cm4gZigpLHtkaWFncmFtVHlwZTpiLHN2ZzpELGJpbmRGdW5jdGlvbnM6eS5kYi5iaW5kRnVuY3Rpb25zfX0sInJlbmRlciIpO2Z1bmN0aW9uIFdpdCh0PXt9KXtsZXQgZT1Wbih7fSx0KTtlPy5mb250RmFtaWx5JiYhZS50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKGUudGhlbWVWYXJpYWJsZXN8fChlLnRoZW1lVmFyaWFibGVzPXt9KSxlLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5KSxReihlKSxlPy50aGVtZSYmZS50aGVtZSBpbiBEbz9lLnRoZW1lVmFyaWFibGVzPURvW2UudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGUudGhlbWVWYXJpYWJsZXMpOmUmJihlLnRoZW1lVmFyaWFibGVzPURvLmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoZS50aGVtZVZhcmlhYmxlcykpO2xldCByPXR5cGVvZiBlPT0ib2JqZWN0Ij9pQyhlKTphQygpO0oxKHIubG9nTGV2ZWwpLHoxKCl9byhXaXQsImluaXRpYWxpemUiKTt2YXIgUTJlPW8oKHQsZT17fSk9PntsZXR7Y29kZTpyfT1iRih0KTtyZXR1cm4gSDEuZnJvbVRleHQocixlKX0sImdldERpYWdyYW1Gcm9tVGV4dCIpO2Z1bmN0aW9uIFlpdCh0LGUscixuKXt6MmUoZSx0KSxHMmUoZSxyLG4sZS5hdHRyKCJpZCIpKX1vKFlpdCwiYWRkQTExeUluZm8iKTt2YXIgSGY9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOkhpdCxwYXJzZTpGaXQsZ2V0RGlhZ3JhbUZyb21UZXh0OlEyZSxpbml0aWFsaXplOldpdCxnZXRDb25maWc6Q3Isc2V0Q29uZmlnOm80LGdldFNpdGVDb25maWc6YUMsdXBkYXRlU2l0ZUNvbmZpZzpaeixyZXNldDpvKCgpPT57bHkoKX0sInJlc2V0IiksZ2xvYmFsUmVzZXQ6bygoKT0+e2x5KHBoKX0sImdsb2JhbFJlc2V0IiksZGVmYXVsdENvbmZpZzpwaH0pO0oxKENyKCkubG9nTGV2ZWwpO2x5KENyKCkpO0p2KCk7aHIoKTt2YXIgcWl0PW8oKHQsZSxyKT0+e1kud2Fybih0KSxzOSh0KT8ociYmcih0LnN0cix0Lmhhc2gpLGUucHVzaCh7Li4udCxtZXNzYWdlOnQuc3RyLGVycm9yOnR9KSk6KHImJnIodCksdCBpbnN0YW5jZW9mIEVycm9yJiZlLnB1c2goe3N0cjp0Lm1lc3NhZ2UsbWVzc2FnZTp0Lm1lc3NhZ2UsaGFzaDp0Lm5hbWUsZXJyb3I6dH0pKX0sImhhbmRsZUVycm9yIiksWjJlPW8oYXN5bmMgZnVuY3Rpb24odD17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IFhpdCh0KX1jYXRjaChlKXtpZihzOShlKSYmWS5lcnJvcihlLnN0ciksdWgucGFyc2VFcnJvciYmdWgucGFyc2VFcnJvcihlKSwhdC5zdXBwcmVzc0Vycm9ycyl0aHJvdyBZLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxlfX0sInJ1biIpLFhpdD1vKGFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6dCxxdWVyeVNlbGVjdG9yOmUsbm9kZXM6cn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2xldCBuPUhmLmdldENvbmZpZygpO1kuZGVidWcoYCR7dD8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBpO2lmKHIpaT1yO2Vsc2UgaWYoZSlpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1kuZGVidWcoYEZvdW5kICR7aS5sZW5ndGh9IGRpYWdyYW1zYCksbj8uc3RhcnRPbkxvYWQhPT12b2lkIDAmJihZLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiK24/LnN0YXJ0T25Mb2FkKSxIZi51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpuPy5zdGFydE9uTG9hZH0pKTtsZXQgYT1uZXcgVXQuSW5pdElER2VuZXJhdG9yKG4uZGV0ZXJtaW5pc3RpY0lkcyxuLmRldGVybWluaXN0aWNJRFNlZWQpLHMsbD1bXTtmb3IobGV0IHUgb2YgQXJyYXkuZnJvbShpKSl7WS5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIit1LmlkKTtpZih1LmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTt1LnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7bGV0IGg9YG1lcm1haWQtJHthLm5leHQoKX1gO3M9dS5pbm5lckhUTUwscz1qYihVdC5lbnRpdHlEZWNvZGUocykpLnRyaW0oKS5yZXBsYWNlKC88YnJccypcLz8+L2dpLCI8YnIvPiIpO2xldCBmPVV0LmRldGVjdEluaXQocyk7ZiYmWS5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGYpO3RyeXtsZXR7c3ZnOmQsYmluZEZ1bmN0aW9uczpwfT1hd2FpdCByeGUoaCxzLHUpO3UuaW5uZXJIVE1MPWQsdCYmYXdhaXQgdChoKSxwJiZwKHUpfWNhdGNoKGQpe3FpdChkLGwsdWgucGFyc2VFcnJvcil9fWlmKGwubGVuZ3RoPjApdGhyb3cgbFswXX0sInJ1blRocm93c0Vycm9ycyIpLEoyZT1vKGZ1bmN0aW9uKHQpe0hmLmluaXRpYWxpemUodCl9LCJpbml0aWFsaXplIiksaml0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe1kud2FybigibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuIiksdCYmSjJlKHQpO2xldCBuPXtwb3N0UmVuZGVyQ2FsbGJhY2s6cixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBlPT0ic3RyaW5nIj9uLnF1ZXJ5U2VsZWN0b3I9ZTplJiYoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P24ubm9kZXM9W2VdOm4ubm9kZXM9ZSksYXdhaXQgWjJlKG4pfSwiaW5pdCIpLEtpdD1vKGFzeW5jKHQse2xhenlMb2FkOmU9ITB9PXt9KT0+e3oxKCksWmIoLi4udCksZT09PSExJiZhd2FpdCBiMmUoKX0sInJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyIpLGV4ZT1vKGZ1bmN0aW9uKCl7aWYodWguc3RhcnRPbkxvYWQpe2xldHtzdGFydE9uTG9hZDp0fT1IZi5nZXRDb25maWcoKTt0JiZ1aC5ydW4oKS5jYXRjaChlPT5ZLmVycm9yKCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplIixlKSl9fSwiY29udGVudExvYWRlZCIpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixleGUsITEpfXZhciBRaXQ9byhmdW5jdGlvbih0KXt1aC5wYXJzZUVycm9yPXR9LCJzZXRQYXJzZUVycm9ySGFuZGxlciIpLEFTPVtdLHdGPSExLHR4ZT1vKGFzeW5jKCk9PntpZighd0Ype2Zvcih3Rj0hMDtBUy5sZW5ndGg+MDspe2xldCB0PUFTLnNoaWZ0KCk7aWYodCl0cnl7YXdhaXQgdCgpfWNhdGNoKGUpe1kuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsZSl9fXdGPSExfX0sImV4ZWN1dGVRdWV1ZSIpLFppdD1vKGFzeW5jKHQsZSk9Pm5ldyBQcm9taXNlKChyLG4pPT57bGV0IGk9bygoKT0+bmV3IFByb21pc2UoKGEscyk9PntIZi5wYXJzZSh0LGUpLnRoZW4obD0+e2EobCkscihsKX0sbD0+e1kuZXJyb3IoIkVycm9yIHBhcnNpbmciLGwpLHVoLnBhcnNlRXJyb3I/LihsKSxzKGwpLG4obCl9KX0pLCJwZXJmb3JtQ2FsbCIpO0FTLnB1c2goaSksdHhlKCkuY2F0Y2gobil9KSwicGFyc2UiKSxyeGU9bygodCxlLHIpPT5uZXcgUHJvbWlzZSgobixpKT0+e2xldCBhPW8oKCk9Pm5ldyBQcm9taXNlKChzLGwpPT57SGYucmVuZGVyKHQsZSxyKS50aGVuKHU9PntzKHUpLG4odSl9LHU9PntZLmVycm9yKCJFcnJvciBwYXJzaW5nIix1KSx1aC5wYXJzZUVycm9yPy4odSksbCh1KSxpKHUpfSl9KSwicGVyZm9ybUNhbGwiKTtBUy5wdXNoKGEpLHR4ZSgpLmNhdGNoKGkpfSksInJlbmRlciIpLHVoPXtzdGFydE9uTG9hZDohMCxtZXJtYWlkQVBJOkhmLHBhcnNlOlppdCxyZW5kZXI6cnhlLGluaXQ6aml0LHJ1bjpaMmUscmVnaXN0ZXJFeHRlcm5hbERpYWdyYW1zOktpdCxyZWdpc3RlckxheW91dExvYWRlcnM6X0QsaW5pdGlhbGl6ZTpKMmUscGFyc2VFcnJvcjp2b2lkIDAsY29udGVudExvYWRlZDpleGUsc2V0UGFyc2VFcnJvckhhbmRsZXI6UWl0LGRldGVjdFR5cGU6bXAscmVnaXN0ZXJJY29uUGFja3M6WGJ9LEppdD11aDtyZXR1cm4gY3hlKGVhdCk7fSkoKTsKLyohIENoZWNrIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovCi8qIQogKiBXYWl0IGZvciBkb2N1bWVudCBsb2FkZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBleGVjdXRpb24KICovCi8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpkb21wdXJpZnkvZGlzdC9wdXJpZnkuanM6CiAgKCohIEBsaWNlbnNlIERPTVB1cmlmeSAzLjEuNiB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMy4xLjYvTElDRU5TRSAqKQoKanMteWFtbC9kaXN0L2pzLXlhbWwubWpzOgogICgqISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKikKCmxvZGFzaC1lcy9sb2Rhc2guanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAgICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPSJlcyIgLW8gLi9gCiAgICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogICAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogICAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogICAqKQoKY3l0b3NjYXBlL2Rpc3QvY3l0b3NjYXBlLmVzbS5tanM6CiAgKCohCiAgRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFJhbGYgUy4gRW5nZWxzY2hhbGwgKGh0dHA6Ly9lbmdlbHNjaGFsbC5jb20pCiAgTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlIChodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKQogICopCiAgKCohCiAgRXZlbnQgb2JqZWN0IGJhc2VkIG9uIGpRdWVyeSBldmVudHMsIE1JVCBsaWNlbnNlCiAgCiAgaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvCiAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAqKQogICgqISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKikKICAoKiEgUnVuZ2UtS3V0dGEgc3ByaW5nIHBoeXNpY3MgZnVuY3Rpb24gZ2VuZXJhdG9yLiBBZGFwdGVkIGZyb20gRnJhbWVyLmpzLCBjb3B5cmlnaHQgS29lbiBCb2suIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICopCiovCmdsb2JhbFRoaXMubWVybWFpZCA9IGdsb2JhbFRoaXMuX19lc2J1aWxkX2VzbV9tZXJtYWlkLmRlZmF1bHQ7Cg==`; |