3NCUbh7cABzRyEMEXAcGCAozSuxvUTf75ms · data · 2.7c767379.chunk.js_54
{
    "2.7c767379.chunk.js_54": "base64:ZnJvbVB1YmxpYz1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygcz90Om5ldyBzKGUse3B1Yjp0fSl9LHMuZnJvbVNlY3JldD1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygcz90Om5ldyBzKGUse3NlY3JldDp0fSl9LHMucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LGEocywicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxhKHMsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxhKHMsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZHNhLHQ9dGhpcy5oYXNoKCkscj1lLmVuY29kaW5nTGVuZ3RoLTEsbj10LnNsaWNlKDAsZS5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIG5bMF0mPTI0OCxuW3JdJj0xMjcsbltyXXw9NjQsbn0pLGEocywicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxhKHMsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLGEocywibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxzLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oZSx0aGlzKX0scy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KGUsdCx0aGlzKX0scy5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLG4uZW5jb2RlKHRoaXMuc2VjcmV0KCksZSl9LHMucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihlKXtyZXR1cm4gbi5lbmNvZGUodGhpcy5wdWJCeXRlcygpLGUpfSxlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI0KSxpPXIoNDgpLG89aS5hc3NlcnQsYT1pLmNhY2hlZFByb3BlcnR5LHM9aS5wYXJzZUJ5dGVzO2Z1bmN0aW9uIHUoZSx0KXt0aGlzLmVkZHNhPWUsIm9iamVjdCIhPT10eXBlb2YgdCYmKHQ9cyh0KSksQXJyYXkuaXNBcnJheSh0KSYmKHQ9e1I6dC5zbGljZSgwLGUuZW5jb2RpbmdMZW5ndGgpLFM6dC5zbGljZShlLmVuY29kaW5nTGVuZ3RoKX0pLG8odC5SJiZ0LlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLGUuaXNQb2ludCh0LlIpJiYodGhpcy5fUj10LlIpLHQuUyBpbnN0YW5jZW9mIG4mJih0aGlzLl9TPXQuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheSh0LlIpP3QuUjp0LlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkodC5TKT90LlM6dC5TZW5jb2RlZH1hKHUsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxhKHUsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLGEodSwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksYSh1LCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksdS5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LHUucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGkuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzMSk7dC5jZXJ0aWZpY2F0ZT1yKDYxOSk7dmFyIGk9bi5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7dC5SU0FQcml2YXRlS2V5PWk7dmFyIG89bi5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO3QuUlNBUHVibGljS2V5PW87dmFyIGE9bi5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UocyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTt0LlB1YmxpY0tleT1hO3ZhciBzPW4uZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHU9bi5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShzKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTt0LlByaXZhdGVLZXk9dTt2YXIgYz1uLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTt0LkVuY3J5cHRlZFByaXZhdGVLZXk9Yzt2YXIgZj1uLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7dC5EU0FQcml2YXRlS2V5PWYsdC5EU0FwYXJhbT1uLmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBsPW4uZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoaCksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7dC5FQ1ByaXZhdGVLZXk9bDt2YXIgaD1uLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7dC5zaWduYXR1cmU9bi5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDEzMSksaT1yKDcpO2Z1bmN0aW9uIG8oZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLmJvZHk9dCx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dC5kZWZpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG8oZSx0KX0sby5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PXIoNjExKS5ydW5JblRoaXNDb250ZXh0KCIoZnVuY3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoKG4pe3Q9ZnVuY3Rpb24oZSl7dGhpcy5faW5pdE5hbWVkKGUpfX1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24odCl7ZS5jYWxsKHRoaXMsdCl9LG5ldyB0KHRoaXMpfSxvLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1lfHwiZGVyIix0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5kZWNvZGVyc1tlXT10aGlzLl9jcmVhdGVOYW1lZChuLmRlY29kZXJzW2VdKSksdGhpcy5kZWNvZGVyc1tlXX0sby5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2Rlcih0KS5kZWNvZGUoZSxyKX0sby5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8ImRlciIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShlKXx8KHRoaXMuZW5jb2RlcnNbZV09dGhpcy5fY3JlYXRlTmFtZWQobi5lbmNvZGVyc1tlXSkpLHRoaXMuZW5jb2RlcnNbZV19LG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIodCkuZW5jb2RlKGUscil9fSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7dmFyIGluZGV4T2Y9ZnVuY3Rpb24oZSx0KXtpZihlLmluZGV4T2YpcmV0dXJuIGUuaW5kZXhPZih0KTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKGUpO3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdH0sZm9yRWFjaD1mdW5jdGlvbihlLHQpe2lmKGUuZm9yRWFjaClyZXR1cm4gZS5mb3JFYWNoKHQpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQoZVtyXSxyLGUpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl8iLHt9KSxmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfX1jYXRjaChlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2VbdF09cn19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KGUpO3RoaXMuY29kZT1lfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC4iKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt0LnN0eWxlfHwodC5zdHlsZT17fSksdC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciByPXQuY29udGVudFdpbmRvdyxuPXIuZXZhbCxpPXIuZXhlY1NjcmlwdDshbiYmaSYmKGkuY2FsbChyLCJudWxsIiksbj1yLmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXMoZSksZnVuY3Rpb24odCl7clt0XT1lW3RdfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHQpe2VbdF0mJihyW3RdPWVbdF0pfSk7dmFyIG89T2JqZWN0X2tleXMociksYT1uLmNhbGwocix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKHIpLGZ1bmN0aW9uKHQpeyh0IGluIGV8fC0xPT09aW5kZXhPZihvLHQpKSYmKGVbdF09clt0XSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odCl7dCBpbiBlfHxkZWZpbmVQcm9wKGUsdCxyW3RdKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksYX0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9U2NyaXB0LmNyZWF0ZUNvbnRleHQoZSkscj10aGlzLnJ1bkluQ29udGV4dCh0KTtyZXR1cm4gZSYmZm9yRWFjaChPYmplY3Rfa2V5cyh0KSxmdW5jdGlvbihyKXtlW3JdPXRbcl19KSxyfSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKGUpe2V4cG9ydHNbZV09U2NyaXB0W2VdPWZ1bmN0aW9uKHQpe3ZhciByPVNjcmlwdCh0KTtyZXR1cm4gcltlXS5hcHBseShyLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIENvbnRleHR9LGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGUpe3JldHVybiBleHBvcnRzLlNjcmlwdChlKX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDb250ZXh0O3JldHVybiJvYmplY3QiPT09dHlwZW9mIGUmJmZvckVhY2goT2JqZWN0X2tleXMoZSksZnVuY3Rpb24ocil7dFtyXT1lW3JdfSksdH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDcpO2Z1bmN0aW9uIGkoZSl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOmV8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gbyhlLHQpe3RoaXMucGF0aD1lLHRoaXMucmV0aHJvdyh0KX10LlJlcG9ydGVyPWksaS5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG99LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ZS5vYmoscGF0aExlbjplLnBhdGgubGVuZ3RofX0saS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3Qub2JqPWUub2JqLHQucGF0aD10LnBhdGguc2xpY2UoMCxlLnBhdGhMZW4pfSxpLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goZSl9LGkucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0LnBhdGg9dC5wYXRoLnNsaWNlKDAsZS0xKX0saS5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGUpLG51bGwhPT1uLm9iaiYmKG4ub2JqW3RdPXIpfSxpLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LGkucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx0PWUub2JqO3JldHVybiBlLm9iaj17fSx0fSxpLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLHI9dC5vYmo7cmV0dXJuIHQub2JqPWUscn0saS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLl9yZXBvcnRlclN0YXRlLG49ZSBpbnN0YW5jZW9mIG87aWYodD1uP2U6bmV3IG8oci5wYXRoLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoZSkrIl0ifSkuam9pbigiIiksZS5tZXNzYWdlfHxlLGUuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyB0O3JldHVybiBufHxyLmVycm9ycy5wdXNoKHQpLHR9LGkucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gdC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IoZSk/bnVsbDplLGVycm9yczp0LmVycm9yc306ZX0sbihvLEVycm9yKSxvLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKGUpe2lmKHRoaXMubWVzc2FnZT1lKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG8pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxMzIpLlJlcG9ydGVyLGk9cigxMzIpLkVuY29kZXJCdWZmZXIsbz1yKDEzMikuRGVjb2RlckJ1ZmZlcixhPXIoNDcpLHM9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSx1PVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQocyk7ZnVuY3Rpb24gYyhlLHQpe3ZhciByPXt9O3RoaXMuX2Jhc2VTdGF0ZT1yLHIuZW5jPWUsci5wYXJlbnQ9dHx8bnVsbCxyLmNoaWxkcmVuPW51bGwsci50YWc9bnVsbCxyLmFyZ3M9bnVsbCxyLnJldmVyc2VBcmdzPW51bGwsci5jaG9pY2U9bnVsbCxyLm9wdGlvbmFsPSExLHIuYW55PSExLHIub2JqPSExLHIudXNlPW51bGwsci51c2VEZWNvZGVyPW51bGwsci5rZXk9bnVsbCxyLmRlZmF1bHQ9bnVsbCxyLmV4cGxpY2l0PW51bGwsci5pbXBsaWNpdD1udWxsLHIuY29udGFpbnM9bnVsbCxyLnBhcmVudHx8KHIuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1lLmV4cG9ydHM9Yzt2YXIgZj1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO2MucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHQ9e307Zi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09ZVtyXX0pO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQucGFyZW50KTtyZXR1cm4gci5fYmFzZVN0YXRlPXQscn0sYy5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7dS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXNbdF09ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gZS5jaGlsZHJlbi5wdXNoKHIpLHJbdF0uYXBwbHkocixhcmd1bWVudHMpfX0sdGhpcyl9LGMucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTthKG51bGw9PT10LnBhcmVudCksZS5jYWxsKHRoaXMpLHQuY2hpbGRyZW49dC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxhLmVxdWFsKHQuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxjLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUscj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO2U9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1yLmxlbmd0aCYmKGEobnVsbD09PXQuY2hpbGRyZW4pLHQuY2hpbGRyZW49cixyLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PWUubGVuZ3RoJiYoYShudWxsPT09dC5hcmdzKSx0LmFyZ3M9ZSx0LnJldmVyc2VBcmdzPWUubWFwKGZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09dHlwZW9mIGV8fGUuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIGU7dmFyIHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKTt2YXIgbj1lW3JdO3Rbbl09cn0pLHR9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2MucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3Rocm93IG5ldyBFcnJvcihlKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0LmVuYyl9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2MucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYShudWxsPT09dC50YWcpLHQudGFnPWUsdGhpcy5fdXNlQXJncyhyKSx0aGlzfX0pLGMucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlKXthKGUpO3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYShudWxsPT09dC51c2UpLHQudXNlPWUsdGhpc30sYy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LGMucHJvdG90eXBlLmRlZj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQuZGVmYXVsdCksdC5kZWZhdWx0PWUsdC5vcHRpb25hbD0hMCx0aGlzfSxjLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQuZXhwbGljaXQmJm51bGw9PT10LmltcGxpY2l0KSx0LmV4cGxpY2l0PWUsdGhpc30sYy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LmV4cGxpY2l0JiZudWxsPT09dC5pbXBsaWNpdCksdC5pbXBsaWNpdD1lLHRoaXN9LGMucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSx0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGUub2JqPSEwLDAhPT10Lmxlbmd0aCYmdGhpcy5fdXNlQXJncyh0KSx0aGlzfSxjLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LmtleSksdC5rZXk9ZSx0aGlzfSxjLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxjLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LmNob2ljZSksdC5jaG9pY2U9ZSx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKSx0aGlzfSxjLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQudXNlKSx0LmNvbnRhaW5zPWUsdGhpc30sYy5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ci5wYXJlbnQpcmV0dXJuIGUud3JhcFJlc3VsdChyLmNoaWxkcmVuWzBdLl9kZWNvZGUoZSx0KSk7dmFyIG4saT1yLmRlZmF1bHQsYT0hMCxzPW51bGw7aWYobnVsbCE9PXIua2V5JiYocz1lLmVudGVyS2V5KHIua2V5KSksci5vcHRpb25hbCl7dmFyIHU9bnVsbDtpZihudWxsIT09ci5leHBsaWNpdD91PXIuZXhwbGljaXQ6bnVsbCE9PXIuaW1wbGljaXQ/dT1yLmltcGxpY2l0Om51bGwhPT1yLnRhZyYmKHU9ci50YWcpLG51bGwhPT11fHxyLmFueSl7aWYoYT10aGlzLl9wZWVrVGFnKGUsdSxyLmFueSksZS5pc0Vycm9yKGEpKXJldHVybiBhfWVsc2V7dmFyIGM9ZS5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLGUsdCk6dGhpcy5fZGVjb2RlQ2hvaWNlKGUsdCksYT0hMH1jYXRjaChkKXthPSExfWUucmVzdG9yZShjKX19aWYoci5vYmomJmEmJihuPWUuZW50ZXJPYmplY3QoKSksYSl7aWYobnVsbCE9PXIuZXhwbGljaXQpe3ZhciBmPXRoaXMuX2RlY29kZVRhZyhlLHIuZXhwbGljaXQpO2lmKGUuaXNFcnJvcihmKSlyZXR1cm4gZjtlPWZ9dmFyIGw9ZS5vZmZzZXQ7aWYobnVsbD09PXIudXNlJiZudWxsPT09ci5jaG9pY2Upe2lmKHIuYW55KWM9ZS5zYXZlKCk7dmFyIGg9dGhpcy5fZGVjb2RlVGFnKGUsbnVsbCE9PXIuaW1wbGljaXQ/ci5pbXBsaWNpdDpyLnRhZyxyLmFueSk7aWYoZS5pc0Vycm9yKGgpKXJldHVybiBoO3IuYW55P2k9ZS5yYXcoYyk6ZT1ofWlmKHQmJnQudHJhY2smJm51bGwhPT1yLnRhZyYmdC50cmFjayhlLnBhdGgoKSxsLGUubGVuZ3RoLCJ0YWdnZWQiKSx0JiZ0LnRyYWNrJiZudWxsIT09ci50YWcmJnQudHJhY2soZS5wYXRoKCksZS5vZmZzZXQsZS5sZW5ndGgsImNvbnRlbnQiKSxpPXIuYW55P2k6bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsZSx0KTp0aGlzLl9kZWNvZGVDaG9pY2UoZSx0KSxlLmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoci5hbnl8fG51bGwhPT1yLmNob2ljZXx8bnVsbD09PXIuY2hpbGRyZW58fHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihyKXtyLl9kZWNvZGUoZSx0KX0pLHIuY29udGFpbnMmJigib2N0c3RyIj09PXIudGFnfHwiYml0c3RyIj09PXIudGFnKSl7dmFyIHA9bmV3IG8oaSk7aT10aGlzLl9nZXRVc2Uoci5jb250YWlucyxlLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShwLHQpfX1yZXR1cm4gci5vYmomJmEmJihpPWUubGVhdmVPYmplY3QobikpLG51bGw9PT1yLmtleXx8bnVsbD09PWkmJiEwIT09YT9udWxsIT09cyYmZS5leGl0S2V5KHMpOmUubGVhdmVLZXkocyxyLmtleSxpKSxpfSxjLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09ZXx8InNldCI9PT1lP251bGw6InNlcW9mIj09PWV8fCJzZXRvZiI9PT1lP3RoaXMuX2RlY29kZUxpc3QodCxlLG4uYXJnc1swXSxyKTovc3RyJC8udGVzdChlKT90aGlzLl9kZWNvZGVTdHIodCxlLHIpOiJvYmppZCI9PT1lJiZuLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQodCxuLmFyZ3NbMF0sbi5hcmdzWzFdLHIpOiJvYmppZCI9PT1lP3RoaXMuX2RlY29kZU9iamlkKHQsbnVsbCxudWxsLHIpOiJnZW50aW1lIj09PWV8fCJ1dGN0aW1lIj09PWU/dGhpcy5fZGVjb2RlVGltZSh0LGUscik6Im51bGxfIj09PWU/dGhpcy5fZGVjb2RlTnVsbCh0LHIpOiJib29sIj09PWU/dGhpcy5fZGVjb2RlQm9vbCh0LHIpOiJvYmpEZXNjIj09PWU/dGhpcy5fZGVjb2RlU3RyKHQsZSxyKToiaW50Ij09PWV8fCJlbnVtIj09PWU/dGhpcy5fZGVjb2RlSW50KHQsbi5hcmdzJiZuLmFyZ3NbMF0scik6bnVsbCE9PW4udXNlP3RoaXMuX2dldFVzZShuLnVzZSx0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZSh0LHIpOnQuZXJyb3IoInVua25vd24gdGFnOiAiK2UpfSxjLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByLnVzZURlY29kZXI9dGhpcy5fdXNlKGUsdCksYShudWxsPT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sci5pbXBsaWNpdCE9PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5jbG9uZSgpLHIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXIuaW1wbGljaXQpLHIudXNlRGVjb2Rlcn0sYy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZSxuPW51bGwsaT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoci5jaG9pY2UpLnNvbWUoZnVuY3Rpb24obyl7dmFyIGE9ZS5zYXZlKCkscz1yLmNob2ljZVtvXTt0cnl7dmFyIHU9cy5fZGVjb2RlKGUsdCk7aWYoZS5pc0Vycm9yKHUpKXJldHVybiExO249e3R5cGU6byx2YWx1ZTp1fSxpPSEwfWNhdGNoKGMpe3JldHVybiBlLnJlc3RvcmUoYSksITF9cmV0dXJuITB9LHRoaXMpLGk/bjplLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sYy5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGUsdGhpcy5yZXBvcnRlcil9LGMucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5kZWZhdWx0fHxuLmRlZmF1bHQhPT1lKXt2YXIgaT10aGlzLl9lbmNvZGVWYWx1ZShlLHQscik7aWYodm9pZCAwIT09aSYmIXRoaXMuX3NraXBEZWZhdWx0KGksdCxyKSlyZXR1cm4gaX19LGMucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1pLnBhcmVudClyZXR1cm4gaS5jaGlsZHJlblswXS5fZW5jb2RlKGUsdHx8bmV3IG4pO3ZhciBvPW51bGw7aWYodGhpcy5yZXBvcnRlcj10LGkub3B0aW9uYWwmJnZvaWQgMD09PWUpe2lmKG51bGw9PT1pLmRlZmF1bHQpcmV0dXJuO2U9aS5kZWZhdWx0fXZhciBhPW51bGwscz0hMTtpZihpLmFueSlvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk7ZWxzZSBpZihpLmNob2ljZSlvPXRoaXMuX2VuY29kZUNob2ljZShlLHQpO2Vsc2UgaWYoaS5jb250YWlucylhPXRoaXMuX2dldFVzZShpLmNvbnRhaW5zLHIpLl9lbmNvZGUoZSx0KSxzPSEwO2Vsc2UgaWYoaS5jaGlsZHJlbilhPWkuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHIpe2lmKCJudWxsXyI9PT1yLl9iYXNlU3RhdGUudGFnKXJldHVybiByLl9lbmNvZGUobnVsbCx0LGUpO2lmKG51bGw9PT1yLl9iYXNlU3RhdGUua2V5KXJldHVybiB0LmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBuPXQuZW50ZXJLZXkoci5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPT10eXBlb2YgZSlyZXR1cm4gdC5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIGk9ci5fZW5jb2RlKGVbci5fYmFzZVN0YXRlLmtleV0sdCxlKTtyZXR1cm4gdC5sZWF2ZUtleShuKSxpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxhPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSk7ZWxzZSBpZigic2Vxb2YiPT09aS50YWd8fCJzZXRvZiI9PT1pLnRhZyl7aWYoIWkuYXJnc3x8MSE9PWkuYXJncy5sZW5ndGgpcmV0dXJuIHQuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitpLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgdT10aGlzLmNsb25lKCk7dS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSxlKS5fZW5jb2RlKHIsdCl9LHUpKX1lbHNlIG51bGwhPT1pLnVzZT9vPXRoaXMuX2dldFVzZShpLnVzZSxyKS5fZW5jb2RlKGUsdCk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKGkudGFnLGUpLHM9ITApO2lmKCFpLmFueSYmbnVsbD09PWkuY2hvaWNlKXt2YXIgYz1udWxsIT09aS5pbXBsaWNpdD9pLmltcGxpY2l0OmkudGFnLGY9bnVsbD09PWkuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1jP251bGw9PT1pLnVzZSYmdC5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PWkudXNlJiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUoYyxzLGYsYSkpfXJldHVybiBudWxsIT09aS5leHBsaWNpdCYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKGkuZXhwbGljaXQsITEsImNvbnRleHQiLG8pKSxvfSxjLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbZS50eXBlXTtyZXR1cm4gbnx8YSghMSxlLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhyLmNob2ljZSkpKSxuLl9lbmNvZGUoZS52YWx1ZSx0KX0sYy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChlKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKHQsZSk7aWYoIm9iamlkIj09PWUmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQodCxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoIm9iamlkIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKHQsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1lfHwidXRjdGltZSI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKHQsZSk7aWYoIm51bGxfIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PWV8fCJlbnVtIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZUludCh0LHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09ZSlyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbCh0KTtpZigib2JqRGVzYyI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVTdHIodCxlKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitlKX0sYy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKGUpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoZSl9LGMucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKGUpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoZSl9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigzMzYpO3QudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSx0LnRhZ0NsYXNzQnlOYW1lPW4uX3JldmVyc2UodC50YWdDbGFzcyksdC50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LHQudGFnQnlOYW1lPW4uX3JldmVyc2UodC50YWcpfSxmdW5jdGlvbihlLHQscil7dmFyIG49dDtuLmRlcj1yKDMzNyksbi5wZW09cig2MTYpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig3KSxpPXIoMTgpLkJ1ZmZlcixvPXIoMzM3KTtmdW5jdGlvbiBhKGUpe28uY2FsbCh0aGlzLGUpLHRoaXMuZW5jPSJwZW0ifW4oYSxvKSxlLmV4cG9ydHM9YSxhLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLG49dC5sYWJlbC50b1VwcGVyQ2FzZSgpLGE9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLHM9LTEsdT0tMSxjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBmPXJbY10ubWF0Y2goYSk7aWYobnVsbCE9PWYmJmZbMl09PT1uKXtpZigtMSE9PXMpe2lmKCJFTkQiIT09ZlsxXSlicmVhazt1PWM7YnJlYWt9aWYoIkJFR0lOIiE9PWZbMV0pYnJlYWs7cz1jfX1pZigtMT09PXN8fC0xPT09dSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIrbik7dmFyIGw9ci5zbGljZShzKzEsdSkuam9pbigiIik7bC5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciBoPW5ldyBpKGwsImJhc2U2NCIpO3JldHVybiBvLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGgsdCl9fSxmdW5jdGlvbihlLHQscil7dmFyIG49dDtuLmRlcj1yKDMzOCksbi5wZW09cig2MTgpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig3KSxpPXIoMzM4KTtmdW5jdGlvbiBvKGUpe2kuY2FsbCh0aGlzLGUpLHRoaXMuZW5jPSJwZW0ifW4obyxpKSxlLmV4cG9ydHM9byxvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9aS5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxlKS50b1N0cmluZygiYmFzZTY0Iiksbj1bIi0tLS0tQkVHSU4gIit0LmxhYmVsKyItLS0tLSJdLG89MDtvPHIubGVuZ3RoO28rPTY0KW4ucHVzaChyLnNsaWNlKG8sbys2NCkpO3JldHVybiBuLnB1c2goIi0tLS0tRU5EICIrdC5sYWJlbCsiLS0tLS0iKSxuLmpvaW4oIlxuIil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMxKSxpPW4uZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxvPW4uZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLGE9bi5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSxzPW4uZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKGEpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksdT1uLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKG8pfSksYz1uLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZih1KX0pLGY9bi5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKGMpfSl9KSxsPW4uZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKGkpLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShpKSl9KSxoPW4uZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLHA9bi5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShhKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKGYpLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZShsKSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShmKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UocyksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKGgpLm9wdGlvbmFsKCkpfSksZD1uLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShwKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKGEpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO2UuZXhwb3J0cz1kfSxmdW5jdGlvbihlKXtlLmV4cG9ydHM9eyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9fSxmdW5jdGlvbihlLHQscil7dmFyIG49L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHJcK1wvXD1dKylbXG5ccl0rL20saT0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sbz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyXCtcL1w9XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxhPXIoMTU5KSxzPXIoMjEzKSx1PXIoOCkuQnVmZmVyO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGM9ZS50b1N0cmluZygpLGY9Yy5tYXRjaChuKTtpZihmKXt2YXIgbD0iYWVzIitmWzFdLGg9dS5mcm9tKGZbMl0sImhleCIpLHA9dS5mcm9tKGZbM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxkPWEodCxoLnNsaWNlKDAsOCkscGFyc2VJbnQoZlsxXSwxMCkpLmtleSx5PVtdLGc9cy5jcmVhdGVEZWNpcGhlcml2KGwsZCxoKTt5LnB1c2goZy51cGRhdGUocCkpLHkucHVzaChnLmZpbmFsKCkpLA=="
}

Changelog:

{
    "2020.04.17 15:39": "base64:ZnJvbVB1YmxpYz1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygcz90Om5ldyBzKGUse3B1Yjp0fSl9LHMuZnJvbVNlY3JldD1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygcz90Om5ldyBzKGUse3NlY3JldDp0fSl9LHMucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LGEocywicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxhKHMsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxhKHMsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZHNhLHQ9dGhpcy5oYXNoKCkscj1lLmVuY29kaW5nTGVuZ3RoLTEsbj10LnNsaWNlKDAsZS5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIG5bMF0mPTI0OCxuW3JdJj0xMjcsbltyXXw9NjQsbn0pLGEocywicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxhKHMsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLGEocywibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxzLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oZSx0aGlzKX0scy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KGUsdCx0aGlzKX0scy5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLG4uZW5jb2RlKHRoaXMuc2VjcmV0KCksZSl9LHMucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihlKXtyZXR1cm4gbi5lbmNvZGUodGhpcy5wdWJCeXRlcygpLGUpfSxlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI0KSxpPXIoNDgpLG89aS5hc3NlcnQsYT1pLmNhY2hlZFByb3BlcnR5LHM9aS5wYXJzZUJ5dGVzO2Z1bmN0aW9uIHUoZSx0KXt0aGlzLmVkZHNhPWUsIm9iamVjdCIhPT10eXBlb2YgdCYmKHQ9cyh0KSksQXJyYXkuaXNBcnJheSh0KSYmKHQ9e1I6dC5zbGljZSgwLGUuZW5jb2RpbmdMZW5ndGgpLFM6dC5zbGljZShlLmVuY29kaW5nTGVuZ3RoKX0pLG8odC5SJiZ0LlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLGUuaXNQb2ludCh0LlIpJiYodGhpcy5fUj10LlIpLHQuUyBpbnN0YW5jZW9mIG4mJih0aGlzLl9TPXQuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheSh0LlIpP3QuUjp0LlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkodC5TKT90LlM6dC5TZW5jb2RlZH1hKHUsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxhKHUsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLGEodSwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksYSh1LCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksdS5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LHUucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGkuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzMSk7dC5jZXJ0aWZpY2F0ZT1yKDYxOSk7dmFyIGk9bi5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7dC5SU0FQcml2YXRlS2V5PWk7dmFyIG89bi5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO3QuUlNBUHVibGljS2V5PW87dmFyIGE9bi5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UocyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTt0LlB1YmxpY0tleT1hO3ZhciBzPW4uZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHU9bi5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShzKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTt0LlByaXZhdGVLZXk9dTt2YXIgYz1uLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTt0LkVuY3J5cHRlZFByaXZhdGVLZXk9Yzt2YXIgZj1uLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7dC5EU0FQcml2YXRlS2V5PWYsdC5EU0FwYXJhbT1uLmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBsPW4uZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoaCksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7dC5FQ1ByaXZhdGVLZXk9bDt2YXIgaD1uLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7dC5zaWduYXR1cmU9bi5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDEzMSksaT1yKDcpO2Z1bmN0aW9uIG8oZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLmJvZHk9dCx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dC5kZWZpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG8oZSx0KX0sby5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PXIoNjExKS5ydW5JblRoaXNDb250ZXh0KCIoZnVuY3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoKG4pe3Q9ZnVuY3Rpb24oZSl7dGhpcy5faW5pdE5hbWVkKGUpfX1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24odCl7ZS5jYWxsKHRoaXMsdCl9LG5ldyB0KHRoaXMpfSxvLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1lfHwiZGVyIix0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5kZWNvZGVyc1tlXT10aGlzLl9jcmVhdGVOYW1lZChuLmRlY29kZXJzW2VdKSksdGhpcy5kZWNvZGVyc1tlXX0sby5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2Rlcih0KS5kZWNvZGUoZSxyKX0sby5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8ImRlciIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShlKXx8KHRoaXMuZW5jb2RlcnNbZV09dGhpcy5fY3JlYXRlTmFtZWQobi5lbmNvZGVyc1tlXSkpLHRoaXMuZW5jb2RlcnNbZV19LG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIodCkuZW5jb2RlKGUscil9fSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7dmFyIGluZGV4T2Y9ZnVuY3Rpb24oZSx0KXtpZihlLmluZGV4T2YpcmV0dXJuIGUuaW5kZXhPZih0KTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKGUpO3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdH0sZm9yRWFjaD1mdW5jdGlvbihlLHQpe2lmKGUuZm9yRWFjaClyZXR1cm4gZS5mb3JFYWNoKHQpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQoZVtyXSxyLGUpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl8iLHt9KSxmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfX1jYXRjaChlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2VbdF09cn19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KGUpO3RoaXMuY29kZT1lfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC4iKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt0LnN0eWxlfHwodC5zdHlsZT17fSksdC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciByPXQuY29udGVudFdpbmRvdyxuPXIuZXZhbCxpPXIuZXhlY1NjcmlwdDshbiYmaSYmKGkuY2FsbChyLCJudWxsIiksbj1yLmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXMoZSksZnVuY3Rpb24odCl7clt0XT1lW3RdfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHQpe2VbdF0mJihyW3RdPWVbdF0pfSk7dmFyIG89T2JqZWN0X2tleXMociksYT1uLmNhbGwocix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKHIpLGZ1bmN0aW9uKHQpeyh0IGluIGV8fC0xPT09aW5kZXhPZihvLHQpKSYmKGVbdF09clt0XSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odCl7dCBpbiBlfHxkZWZpbmVQcm9wKGUsdCxyW3RdKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksYX0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9U2NyaXB0LmNyZWF0ZUNvbnRleHQoZSkscj10aGlzLnJ1bkluQ29udGV4dCh0KTtyZXR1cm4gZSYmZm9yRWFjaChPYmplY3Rfa2V5cyh0KSxmdW5jdGlvbihyKXtlW3JdPXRbcl19KSxyfSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKGUpe2V4cG9ydHNbZV09U2NyaXB0W2VdPWZ1bmN0aW9uKHQpe3ZhciByPVNjcmlwdCh0KTtyZXR1cm4gcltlXS5hcHBseShyLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIENvbnRleHR9LGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGUpe3JldHVybiBleHBvcnRzLlNjcmlwdChlKX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDb250ZXh0O3JldHVybiJvYmplY3QiPT09dHlwZW9mIGUmJmZvckVhY2goT2JqZWN0X2tleXMoZSksZnVuY3Rpb24ocil7dFtyXT1lW3JdfSksdH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDcpO2Z1bmN0aW9uIGkoZSl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOmV8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gbyhlLHQpe3RoaXMucGF0aD1lLHRoaXMucmV0aHJvdyh0KX10LlJlcG9ydGVyPWksaS5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG99LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ZS5vYmoscGF0aExlbjplLnBhdGgubGVuZ3RofX0saS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3Qub2JqPWUub2JqLHQucGF0aD10LnBhdGguc2xpY2UoMCxlLnBhdGhMZW4pfSxpLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goZSl9LGkucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0LnBhdGg9dC5wYXRoLnNsaWNlKDAsZS0xKX0saS5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGUpLG51bGwhPT1uLm9iaiYmKG4ub2JqW3RdPXIpfSxpLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LGkucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx0PWUub2JqO3JldHVybiBlLm9iaj17fSx0fSxpLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLHI9dC5vYmo7cmV0dXJuIHQub2JqPWUscn0saS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLl9yZXBvcnRlclN0YXRlLG49ZSBpbnN0YW5jZW9mIG87aWYodD1uP2U6bmV3IG8oci5wYXRoLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoZSkrIl0ifSkuam9pbigiIiksZS5tZXNzYWdlfHxlLGUuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyB0O3JldHVybiBufHxyLmVycm9ycy5wdXNoKHQpLHR9LGkucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gdC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IoZSk/bnVsbDplLGVycm9yczp0LmVycm9yc306ZX0sbihvLEVycm9yKSxvLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKGUpe2lmKHRoaXMubWVzc2FnZT1lKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG8pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxMzIpLlJlcG9ydGVyLGk9cigxMzIpLkVuY29kZXJCdWZmZXIsbz1yKDEzMikuRGVjb2RlckJ1ZmZlcixhPXIoNDcpLHM9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSx1PVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQocyk7ZnVuY3Rpb24gYyhlLHQpe3ZhciByPXt9O3RoaXMuX2Jhc2VTdGF0ZT1yLHIuZW5jPWUsci5wYXJlbnQ9dHx8bnVsbCxyLmNoaWxkcmVuPW51bGwsci50YWc9bnVsbCxyLmFyZ3M9bnVsbCxyLnJldmVyc2VBcmdzPW51bGwsci5jaG9pY2U9bnVsbCxyLm9wdGlvbmFsPSExLHIuYW55PSExLHIub2JqPSExLHIudXNlPW51bGwsci51c2VEZWNvZGVyPW51bGwsci5rZXk9bnVsbCxyLmRlZmF1bHQ9bnVsbCxyLmV4cGxpY2l0PW51bGwsci5pbXBsaWNpdD1udWxsLHIuY29udGFpbnM9bnVsbCxyLnBhcmVudHx8KHIuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1lLmV4cG9ydHM9Yzt2YXIgZj1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO2MucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHQ9e307Zi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09ZVtyXX0pO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQucGFyZW50KTtyZXR1cm4gci5fYmFzZVN0YXRlPXQscn0sYy5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7dS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXNbdF09ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gZS5jaGlsZHJlbi5wdXNoKHIpLHJbdF0uYXBwbHkocixhcmd1bWVudHMpfX0sdGhpcyl9LGMucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTthKG51bGw9PT10LnBhcmVudCksZS5jYWxsKHRoaXMpLHQuY2hpbGRyZW49dC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxhLmVxdWFsKHQuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxjLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUscj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO2U9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1yLmxlbmd0aCYmKGEobnVsbD09PXQuY2hpbGRyZW4pLHQuY2hpbGRyZW49cixyLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PWUubGVuZ3RoJiYoYShudWxsPT09dC5hcmdzKSx0LmFyZ3M9ZSx0LnJldmVyc2VBcmdzPWUubWFwKGZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09dHlwZW9mIGV8fGUuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIGU7dmFyIHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKTt2YXIgbj1lW3JdO3Rbbl09cn0pLHR9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2MucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3Rocm93IG5ldyBFcnJvcihlKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0LmVuYyl9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2MucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYShudWxsPT09dC50YWcpLHQudGFnPWUsdGhpcy5fdXNlQXJncyhyKSx0aGlzfX0pLGMucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlKXthKGUpO3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYShudWxsPT09dC51c2UpLHQudXNlPWUsdGhpc30sYy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LGMucHJvdG90eXBlLmRlZj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQuZGVmYXVsdCksdC5kZWZhdWx0PWUsdC5vcHRpb25hbD0hMCx0aGlzfSxjLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQuZXhwbGljaXQmJm51bGw9PT10LmltcGxpY2l0KSx0LmV4cGxpY2l0PWUsdGhpc30sYy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LmV4cGxpY2l0JiZudWxsPT09dC5pbXBsaWNpdCksdC5pbXBsaWNpdD1lLHRoaXN9LGMucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSx0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGUub2JqPSEwLDAhPT10Lmxlbmd0aCYmdGhpcy5fdXNlQXJncyh0KSx0aGlzfSxjLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LmtleSksdC5rZXk9ZSx0aGlzfSxjLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxjLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LmNob2ljZSksdC5jaG9pY2U9ZSx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKSx0aGlzfSxjLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQudXNlKSx0LmNvbnRhaW5zPWUsdGhpc30sYy5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ci5wYXJlbnQpcmV0dXJuIGUud3JhcFJlc3VsdChyLmNoaWxkcmVuWzBdLl9kZWNvZGUoZSx0KSk7dmFyIG4saT1yLmRlZmF1bHQsYT0hMCxzPW51bGw7aWYobnVsbCE9PXIua2V5JiYocz1lLmVudGVyS2V5KHIua2V5KSksci5vcHRpb25hbCl7dmFyIHU9bnVsbDtpZihudWxsIT09ci5leHBsaWNpdD91PXIuZXhwbGljaXQ6bnVsbCE9PXIuaW1wbGljaXQ/dT1yLmltcGxpY2l0Om51bGwhPT1yLnRhZyYmKHU9ci50YWcpLG51bGwhPT11fHxyLmFueSl7aWYoYT10aGlzLl9wZWVrVGFnKGUsdSxyLmFueSksZS5pc0Vycm9yKGEpKXJldHVybiBhfWVsc2V7dmFyIGM9ZS5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLGUsdCk6dGhpcy5fZGVjb2RlQ2hvaWNlKGUsdCksYT0hMH1jYXRjaChkKXthPSExfWUucmVzdG9yZShjKX19aWYoci5vYmomJmEmJihuPWUuZW50ZXJPYmplY3QoKSksYSl7aWYobnVsbCE9PXIuZXhwbGljaXQpe3ZhciBmPXRoaXMuX2RlY29kZVRhZyhlLHIuZXhwbGljaXQpO2lmKGUuaXNFcnJvcihmKSlyZXR1cm4gZjtlPWZ9dmFyIGw9ZS5vZmZzZXQ7aWYobnVsbD09PXIudXNlJiZudWxsPT09ci5jaG9pY2Upe2lmKHIuYW55KWM9ZS5zYXZlKCk7dmFyIGg9dGhpcy5fZGVjb2RlVGFnKGUsbnVsbCE9PXIuaW1wbGljaXQ/ci5pbXBsaWNpdDpyLnRhZyxyLmFueSk7aWYoZS5pc0Vycm9yKGgpKXJldHVybiBoO3IuYW55P2k9ZS5yYXcoYyk6ZT1ofWlmKHQmJnQudHJhY2smJm51bGwhPT1yLnRhZyYmdC50cmFjayhlLnBhdGgoKSxsLGUubGVuZ3RoLCJ0YWdnZWQiKSx0JiZ0LnRyYWNrJiZudWxsIT09ci50YWcmJnQudHJhY2soZS5wYXRoKCksZS5vZmZzZXQsZS5sZW5ndGgsImNvbnRlbnQiKSxpPXIuYW55P2k6bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsZSx0KTp0aGlzLl9kZWNvZGVDaG9pY2UoZSx0KSxlLmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoci5hbnl8fG51bGwhPT1yLmNob2ljZXx8bnVsbD09PXIuY2hpbGRyZW58fHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihyKXtyLl9kZWNvZGUoZSx0KX0pLHIuY29udGFpbnMmJigib2N0c3RyIj09PXIudGFnfHwiYml0c3RyIj09PXIudGFnKSl7dmFyIHA9bmV3IG8oaSk7aT10aGlzLl9nZXRVc2Uoci5jb250YWlucyxlLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShwLHQpfX1yZXR1cm4gci5vYmomJmEmJihpPWUubGVhdmVPYmplY3QobikpLG51bGw9PT1yLmtleXx8bnVsbD09PWkmJiEwIT09YT9udWxsIT09cyYmZS5leGl0S2V5KHMpOmUubGVhdmVLZXkocyxyLmtleSxpKSxpfSxjLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09ZXx8InNldCI9PT1lP251bGw6InNlcW9mIj09PWV8fCJzZXRvZiI9PT1lP3RoaXMuX2RlY29kZUxpc3QodCxlLG4uYXJnc1swXSxyKTovc3RyJC8udGVzdChlKT90aGlzLl9kZWNvZGVTdHIodCxlLHIpOiJvYmppZCI9PT1lJiZuLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQodCxuLmFyZ3NbMF0sbi5hcmdzWzFdLHIpOiJvYmppZCI9PT1lP3RoaXMuX2RlY29kZU9iamlkKHQsbnVsbCxudWxsLHIpOiJnZW50aW1lIj09PWV8fCJ1dGN0aW1lIj09PWU/dGhpcy5fZGVjb2RlVGltZSh0LGUscik6Im51bGxfIj09PWU/dGhpcy5fZGVjb2RlTnVsbCh0LHIpOiJib29sIj09PWU/dGhpcy5fZGVjb2RlQm9vbCh0LHIpOiJvYmpEZXNjIj09PWU/dGhpcy5fZGVjb2RlU3RyKHQsZSxyKToiaW50Ij09PWV8fCJlbnVtIj09PWU/dGhpcy5fZGVjb2RlSW50KHQsbi5hcmdzJiZuLmFyZ3NbMF0scik6bnVsbCE9PW4udXNlP3RoaXMuX2dldFVzZShuLnVzZSx0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZSh0LHIpOnQuZXJyb3IoInVua25vd24gdGFnOiAiK2UpfSxjLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByLnVzZURlY29kZXI9dGhpcy5fdXNlKGUsdCksYShudWxsPT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sci5pbXBsaWNpdCE9PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5jbG9uZSgpLHIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXIuaW1wbGljaXQpLHIudXNlRGVjb2Rlcn0sYy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZSxuPW51bGwsaT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoci5jaG9pY2UpLnNvbWUoZnVuY3Rpb24obyl7dmFyIGE9ZS5zYXZlKCkscz1yLmNob2ljZVtvXTt0cnl7dmFyIHU9cy5fZGVjb2RlKGUsdCk7aWYoZS5pc0Vycm9yKHUpKXJldHVybiExO249e3R5cGU6byx2YWx1ZTp1fSxpPSEwfWNhdGNoKGMpe3JldHVybiBlLnJlc3RvcmUoYSksITF9cmV0dXJuITB9LHRoaXMpLGk/bjplLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sYy5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGUsdGhpcy5yZXBvcnRlcil9LGMucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5kZWZhdWx0fHxuLmRlZmF1bHQhPT1lKXt2YXIgaT10aGlzLl9lbmNvZGVWYWx1ZShlLHQscik7aWYodm9pZCAwIT09aSYmIXRoaXMuX3NraXBEZWZhdWx0KGksdCxyKSlyZXR1cm4gaX19LGMucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1pLnBhcmVudClyZXR1cm4gaS5jaGlsZHJlblswXS5fZW5jb2RlKGUsdHx8bmV3IG4pO3ZhciBvPW51bGw7aWYodGhpcy5yZXBvcnRlcj10LGkub3B0aW9uYWwmJnZvaWQgMD09PWUpe2lmKG51bGw9PT1pLmRlZmF1bHQpcmV0dXJuO2U9aS5kZWZhdWx0fXZhciBhPW51bGwscz0hMTtpZihpLmFueSlvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk7ZWxzZSBpZihpLmNob2ljZSlvPXRoaXMuX2VuY29kZUNob2ljZShlLHQpO2Vsc2UgaWYoaS5jb250YWlucylhPXRoaXMuX2dldFVzZShpLmNvbnRhaW5zLHIpLl9lbmNvZGUoZSx0KSxzPSEwO2Vsc2UgaWYoaS5jaGlsZHJlbilhPWkuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHIpe2lmKCJudWxsXyI9PT1yLl9iYXNlU3RhdGUudGFnKXJldHVybiByLl9lbmNvZGUobnVsbCx0LGUpO2lmKG51bGw9PT1yLl9iYXNlU3RhdGUua2V5KXJldHVybiB0LmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBuPXQuZW50ZXJLZXkoci5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPT10eXBlb2YgZSlyZXR1cm4gdC5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIGk9ci5fZW5jb2RlKGVbci5fYmFzZVN0YXRlLmtleV0sdCxlKTtyZXR1cm4gdC5sZWF2ZUtleShuKSxpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxhPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSk7ZWxzZSBpZigic2Vxb2YiPT09aS50YWd8fCJzZXRvZiI9PT1pLnRhZyl7aWYoIWkuYXJnc3x8MSE9PWkuYXJncy5sZW5ndGgpcmV0dXJuIHQuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitpLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgdT10aGlzLmNsb25lKCk7dS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSxlKS5fZW5jb2RlKHIsdCl9LHUpKX1lbHNlIG51bGwhPT1pLnVzZT9vPXRoaXMuX2dldFVzZShpLnVzZSxyKS5fZW5jb2RlKGUsdCk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKGkudGFnLGUpLHM9ITApO2lmKCFpLmFueSYmbnVsbD09PWkuY2hvaWNlKXt2YXIgYz1udWxsIT09aS5pbXBsaWNpdD9pLmltcGxpY2l0OmkudGFnLGY9bnVsbD09PWkuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1jP251bGw9PT1pLnVzZSYmdC5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PWkudXNlJiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUoYyxzLGYsYSkpfXJldHVybiBudWxsIT09aS5leHBsaWNpdCYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKGkuZXhwbGljaXQsITEsImNvbnRleHQiLG8pKSxvfSxjLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbZS50eXBlXTtyZXR1cm4gbnx8YSghMSxlLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhyLmNob2ljZSkpKSxuLl9lbmNvZGUoZS52YWx1ZSx0KX0sYy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChlKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKHQsZSk7aWYoIm9iamlkIj09PWUmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQodCxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoIm9iamlkIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKHQsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1lfHwidXRjdGltZSI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKHQsZSk7aWYoIm51bGxfIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PWV8fCJlbnVtIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZUludCh0LHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09ZSlyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbCh0KTtpZigib2JqRGVzYyI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVTdHIodCxlKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitlKX0sYy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKGUpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoZSl9LGMucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKGUpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoZSl9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigzMzYpO3QudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSx0LnRhZ0NsYXNzQnlOYW1lPW4uX3JldmVyc2UodC50YWdDbGFzcyksdC50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LHQudGFnQnlOYW1lPW4uX3JldmVyc2UodC50YWcpfSxmdW5jdGlvbihlLHQscil7dmFyIG49dDtuLmRlcj1yKDMzNyksbi5wZW09cig2MTYpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig3KSxpPXIoMTgpLkJ1ZmZlcixvPXIoMzM3KTtmdW5jdGlvbiBhKGUpe28uY2FsbCh0aGlzLGUpLHRoaXMuZW5jPSJwZW0ifW4oYSxvKSxlLmV4cG9ydHM9YSxhLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLG49dC5sYWJlbC50b1VwcGVyQ2FzZSgpLGE9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLHM9LTEsdT0tMSxjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBmPXJbY10ubWF0Y2goYSk7aWYobnVsbCE9PWYmJmZbMl09PT1uKXtpZigtMSE9PXMpe2lmKCJFTkQiIT09ZlsxXSlicmVhazt1PWM7YnJlYWt9aWYoIkJFR0lOIiE9PWZbMV0pYnJlYWs7cz1jfX1pZigtMT09PXN8fC0xPT09dSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIrbik7dmFyIGw9ci5zbGljZShzKzEsdSkuam9pbigiIik7bC5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciBoPW5ldyBpKGwsImJhc2U2NCIpO3JldHVybiBvLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGgsdCl9fSxmdW5jdGlvbihlLHQscil7dmFyIG49dDtuLmRlcj1yKDMzOCksbi5wZW09cig2MTgpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig3KSxpPXIoMzM4KTtmdW5jdGlvbiBvKGUpe2kuY2FsbCh0aGlzLGUpLHRoaXMuZW5jPSJwZW0ifW4obyxpKSxlLmV4cG9ydHM9byxvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9aS5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxlKS50b1N0cmluZygiYmFzZTY0Iiksbj1bIi0tLS0tQkVHSU4gIit0LmxhYmVsKyItLS0tLSJdLG89MDtvPHIubGVuZ3RoO28rPTY0KW4ucHVzaChyLnNsaWNlKG8sbys2NCkpO3JldHVybiBuLnB1c2goIi0tLS0tRU5EICIrdC5sYWJlbCsiLS0tLS0iKSxuLmpvaW4oIlxuIil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMxKSxpPW4uZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxvPW4uZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLGE9bi5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSxzPW4uZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKGEpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksdT1uLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKG8pfSksYz1uLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZih1KX0pLGY9bi5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKGMpfSl9KSxsPW4uZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKGkpLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShpKSl9KSxoPW4uZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLHA9bi5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShhKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKGYpLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZShsKSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShmKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UocyksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKGgpLm9wdGlvbmFsKCkpfSksZD1uLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShwKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKGEpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO2UuZXhwb3J0cz1kfSxmdW5jdGlvbihlKXtlLmV4cG9ydHM9eyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9fSxmdW5jdGlvbihlLHQscil7dmFyIG49L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHJcK1wvXD1dKylbXG5ccl0rL20saT0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sbz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyXCtcL1w9XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxhPXIoMTU5KSxzPXIoMjEzKSx1PXIoOCkuQnVmZmVyO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGM9ZS50b1N0cmluZygpLGY9Yy5tYXRjaChuKTtpZihmKXt2YXIgbD0iYWVzIitmWzFdLGg9dS5mcm9tKGZbMl0sImhleCIpLHA9dS5mcm9tKGZbM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxkPWEodCxoLnNsaWNlKDAsOCkscGFyc2VJbnQoZlsxXSwxMCkpLmtleSx5PVtdLGc9cy5jcmVhdGVEZWNpcGhlcml2KGwsZCxoKTt5LnB1c2goZy51cGRhdGUocCkpLHkucHVzaChnLmZpbmFsKCkpLA=="
}

github/deemru/w8io/169f3d6 
2.90 ms