3NCUbh7cABzRyEMEXAcGCAozSuxvUTf75ms · data · 2.7c767379.chunk.js_17
{
"2.7c767379.chunk.js_17": "base64:b2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEZwKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBWcChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtxcChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBxcChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gS3AoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB6cChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVVwKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIEdwKGUpe3JldHVybihHcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4oSHA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBXcCxZcCxYcCxRcD1mdW5jdGlvbihlKXtyZXR1cm4gZCgpKGUpJiZCKGVbMF0pJiZCKGVbMV0pP2Uuam9pbigiIH4gIik6ZX0sJHA9SygoTnA9T3A9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHpwKHRoaXMsR3AodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZIcChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlckNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGF5bG9hZCxyPWUuc2VwYXJhdG9yLG49ZS5mb3JtYXR0ZXIsaT1lLml0ZW1TdHlsZSxvPWUuaXRlbVNvcnRlcjtpZih0JiZ0Lmxlbmd0aCl7dmFyIGE9KG8/QmUoKSh0LG8pOnQpLm1hcChmdW5jdGlvbihlLHQpe2lmKCJub25lIj09PWUudHlwZSlyZXR1cm4gbnVsbDt2YXIgbz1WcCh7ZGlzcGxheToiYmxvY2siLHBhZGRpbmdUb3A6NCxwYWRkaW5nQm90dG9tOjQsY29sb3I6ZS5jb2xvcnx8IiMwMDAifSxpKSxhPWUuZm9ybWF0dGVyfHxufHxRcCxzPWUubmFtZSx1PWUudmFsdWU7aWYoYSl7dmFyIGM9YSh1LHMsZSx0KTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgZj1GcChjLDIpO3U9ZlswXSxzPWZbMV19ZWxzZSB1PWN9cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZToicmVjaGFydHMtdG9vbHRpcC1pdGVtIixrZXk6InRvb2x0aXAtaXRlbS0iLmNvbmNhdCh0KSxzdHlsZTpvfSxCKHMpP2cuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy10b29sdGlwLWl0ZW0tbmFtZSJ9LHMpOm51bGwsQihzKT9nLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVjaGFydHMtdG9vbHRpcC1pdGVtLXNlcGFyYXRvciJ9LHIpOm51bGwsZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLXRvb2x0aXAtaXRlbS12YWx1ZSJ9LHUpLGcuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy10b29sdGlwLWl0ZW0tdW5pdCJ9LGUudW5pdHx8IiIpKX0pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6InJlY2hhcnRzLXRvb2x0aXAtaXRlbS1saXN0IixzdHlsZTp7cGFkZGluZzowLG1hcmdpbjowfX0sYSl9cmV0dXJuIG51bGx9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUud3JhcHBlckNsYXNzTmFtZSxyPWUuY29udGVudFN0eWxlLG49ZS5sYWJlbENsYXNzTmFtZSxpPWUubGFiZWxTdHlsZSxvPWUubGFiZWwsYT1lLmxhYmVsRm9ybWF0dGVyLHM9VnAoe21hcmdpbjowLHBhZGRpbmc6MTAsYmFja2dyb3VuZENvbG9yOiIjZmZmIixib3JkZXI6IjFweCBzb2xpZCAjY2NjIix3aGl0ZVNwYWNlOiJub3dyYXAifSxyKSx1PVZwKHttYXJnaW46MH0saSksYz1CKG8pLGY9Yz9vOiIiLGw9XygpKCJyZWNoYXJ0cy1kZWZhdWx0LXRvb2x0aXAiLHQpLGg9XygpKCJyZWNoYXJ0cy10b29sdGlwLWxhYmVsIixuKTtyZXR1cm4gYyYmYSYmKGY9YShvKSksZy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsLHN0eWxlOnN9LGcuYS5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOmgsc3R5bGU6dX0sZiksdGhpcy5yZW5kZXJDb250ZW50KCkpfX1dKSYmS3Aoci5wcm90b3R5cGUsbiksaSYmS3AocixpKSx0fSgpLE9wLmRpc3BsYXlOYW1lPSJEZWZhdWx0VG9vbHRpcENvbnRlbnQiLE9wLnByb3BUeXBlcz17c2VwYXJhdG9yOm0uYS5zdHJpbmcsd3JhcHBlckNsYXNzTmFtZTptLmEuc3RyaW5nLGxhYmVsQ2xhc3NOYW1lOm0uYS5zdHJpbmcsZm9ybWF0dGVyOm0uYS5mdW5jLGNvbnRlbnRTdHlsZTptLmEub2JqZWN0LGl0ZW1TdHlsZTptLmEub2JqZWN0LGxhYmVsU3R5bGU6bS5hLm9iamVjdCxsYWJlbEZvcm1hdHRlcjptLmEuZnVuYyxsYWJlbDptLmEuYW55LHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHtuYW1lOm0uYS5hbnksdmFsdWU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nLG0uYS5hcnJheV0pLHVuaXQ6bS5hLmFueX0pKSxpdGVtU29ydGVyOm0uYS5mdW5jfSxPcC5kZWZhdWx0UHJvcHM9e3NlcGFyYXRvcjoiIDogIixjb250ZW50U3R5bGU6e30saXRlbVN0eWxlOnt9LGxhYmVsU3R5bGU6e319LGtwPU5wKSl8fGtwO2Z1bmN0aW9uIFpwKGUpe3JldHVybihacD0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEpwKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VkKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGVkKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB0ZChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHJkKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09WnAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbmQoZSl7cmV0dXJuKG5kPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBpZChlLHQpe3JldHVybihpZD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIG9kLGFkLHNkLHVkPSJyZWNoYXJ0cy10b29sdGlwLXdyYXBwZXIiLGNkPWZ1bmN0aW9uKGUpe3JldHVybiBlLmRhdGFLZXl9LGZkPXtjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSksdmlld0JveDptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLGFjdGl2ZTptLmEuYm9vbCxzZXBhcmF0b3I6bS5hLnN0cmluZyxmb3JtYXR0ZXI6bS5hLmZ1bmMsb2Zmc2V0Om0uYS5udW1iZXIsaXRlbVN0eWxlOm0uYS5vYmplY3QsbGFiZWxTdHlsZTptLmEub2JqZWN0LHdyYXBwZXJTdHlsZTptLmEub2JqZWN0LGNvbnRlbnRTdHlsZTptLmEub2JqZWN0LGN1cnNvcjptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEuZWxlbWVudCxtLmEub2JqZWN0XSksY29vcmRpbmF0ZTptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXJ9KSxwb3NpdGlvbjptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXJ9KSxsYWJlbDptLmEuYW55LHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHtuYW1lOm0uYS5hbnksdmFsdWU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nLG0uYS5hcnJheV0pLHVuaXQ6bS5hLmFueSx0eXBlOm0uYS5vbmVPZihRKX0pKSxwYXlsb2RVbmlxQnk6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmJvb2xdKSxpc0FuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxhbmltYXRpb25EdXJhdGlvbjptLmEubnVtYmVyLGFuaW1hdGlvbkVhc2luZzptLmEub25lT2YoWyJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJsaW5lYXIiXSksaXRlbVNvcnRlcjptLmEuZnVuYyxmaWx0ZXJOdWxsOm0uYS5ib29sLHVzZVRyYW5zbGF0ZTNkOm0uYS5ib29sfSxsZD17YWN0aXZlOiExLG9mZnNldDoxMCx2aWV3Qm94Ont4MTowLHgyOjAseTE6MCx5MjowfSxjb29yZGluYXRlOnt4OjAseTowfSxjdXJzb3JTdHlsZTp7fSxzZXBhcmF0b3I6IiA6ICIsd3JhcHBlclN0eWxlOnt9LGNvbnRlbnRTdHlsZTp7fSxpdGVtU3R5bGU6e30sbGFiZWxTdHlsZTp7fSxjdXJzb3I6ITAsaXNBbmltYXRpb25BY3RpdmU6IWFlKCksYW5pbWF0aW9uRWFzaW5nOiJlYXNlIixhbmltYXRpb25EdXJhdGlvbjo0MDAsZmlsdGVyTnVsbDohMCx1c2VUcmFuc2xhdGUzZDohMX0saGQ9SygoWHA9WXA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9cmQodGhpcywoZT1uZCh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e2JveFdpZHRoOi0xLGJveEhlaWdodDotMX0scn12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZpZChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToidXBkYXRlQkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0O2lmKHRoaXMud3JhcHBlck5vZGUmJnRoaXMud3JhcHBlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgbj10aGlzLndyYXBwZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyhNYXRoLmFicyhuLndpZHRoLXQpPjF8fE1hdGguYWJzKG4uaGVpZ2h0LXIpPjEpJiZ0aGlzLnNldFN0YXRlKHtib3hXaWR0aDpuLndpZHRoLGJveEhlaWdodDpuLmhlaWdodH0pfWVsc2UtMT09PXQmJi0xPT09cnx8dGhpcy5zZXRTdGF0ZSh7Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49dGhpcyxpPXRoaXMucHJvcHMsbz1pLnBheWxvYWQsYT1pLmlzQW5pbWF0aW9uQWN0aXZlLHM9aS5hbmltYXRpb25EdXJhdGlvbixjPWkuYW5pbWF0aW9uRWFzaW5nLGw9aS5maWx0ZXJOdWxsLGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMD09PWU/TmYoKSh0LGNkKTp1KCkoZSk/TmYoKSh0LGUpOnR9KGkucGF5bG9kVW5pcUJ5LGwmJm8mJm8ubGVuZ3RoP28uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFmKCkoZS52YWx1ZSl9KTpvKSxwPWgmJmgubGVuZ3RoLGQ9dGhpcy5wcm9wcyx5PWQuY29udGVudCx2PWQudmlld0JveCxtPWQuY29vcmRpbmF0ZSxiPWQucG9zaXRpb24sUz1kLmFjdGl2ZSxFPWQub2Zmc2V0LHc9SnAoe3BvaW50ZXJFdmVudHM6Im5vbmUiLHZpc2liaWxpdHk6UyYmcD8idmlzaWJsZSI6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIix0b3A6MH0sZC53cmFwcGVyU3R5bGUpO2lmKGImJlIoYi54KSYmUihiLnkpKXQ9Yi54LHI9Yi55O2Vsc2V7dmFyIFQ9dGhpcy5zdGF0ZSxBPVQuYm94V2lkdGgsQz1ULmJveEhlaWdodDtBPjAmJkM+MCYmbT8odD1iJiZSKGIueCk/Yi54Ok1hdGgubWF4KG0ueCtBK0U+di54K3Yud2lkdGg/bS54LUEtRTptLngrRSx2LngpLHI9YiYmUihiLnkpP2IueTpNYXRoLm1heChtLnkrQytFPnYueSt2LmhlaWdodD9tLnktQy1FOm0ueStFLHYueSkpOncudmlzaWJpbGl0eT0iaGlkZGVuIn13PUpwKHt9LHcsaWMoe3RyYW5zZm9ybTp0aGlzLnByb3BzLnVzZVRyYW5zbGF0ZTNkPyJ0cmFuc2xhdGUzZCgiLmNvbmNhdCh0LCJweCwgIikuY29uY2F0KHIsInB4LCAwKSIpOiJ0cmFuc2xhdGUoIi5jb25jYXQodCwicHgsICIpLmNvbmNhdChyLCJweCkiKX0pKSxhJiZTJiYodz1KcCh7fSx3LGljKHt0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gIi5jb25jYXQocywibXMgIikuY29uY2F0KGMpfSkpKTt2YXIgeD1fKCkodWQsKGVkKGU9e30sIiIuY29uY2F0KHVkLCItcmlnaHQiKSxSKHQpJiZtJiZSKG0ueCkmJnQ+PW0ueCksZWQoZSwiIi5jb25jYXQodWQsIi1sZWZ0IiksUih0KSYmbSYmUihtLngpJiZ0PG0ueCksZWQoZSwiIi5jb25jYXQodWQsIi1ib3R0b20iKSxSKHIpJiZtJiZSKG0ueSkmJnI+PW0ueSksZWQoZSwiIi5jb25jYXQodWQsIi10b3AiKSxSKHIpJiZtJiZSKG0ueSkmJnI8bS55KSxlKSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eCxzdHlsZTp3LHJlZjpmdW5jdGlvbihlKXtuLndyYXBwZXJOb2RlPWV9fSxmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KCRwLHQpfSh5LEpwKHt9LHRoaXMucHJvcHMse3BheWxvYWQ6aH0pKSl9fV0pJiZ0ZChyLnByb3RvdHlwZSxuKSxpJiZ0ZChyLGkpLHR9KCksWXAuZGlzcGxheU5hbWU9IlRvb2x0aXAiLFlwLnByb3BUeXBlcz1mZCxZcC5kZWZhdWx0UHJvcHM9bGQsV3A9WHApKXx8V3A7ZnVuY3Rpb24gcGQoZSl7cmV0dXJuKHBkPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gZGQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHlkKCl7cmV0dXJuKHlkPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZ2QoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB2ZChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PXBkKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIG1kKGUpe3JldHVybihtZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gYmQoZSx0KXtyZXR1cm4oYmQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBfZCxTZCxFZCx3ZD1LKChzZD1hZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdmQodGhpcyxtZCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmJkKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyl7cmV0dXJuIk0iLmNvbmNhdChlLCIsIikuY29uY2F0KGksInYiKS5jb25jYXQobiwiTSIpLmNvbmNhdChvLCIsIikuY29uY2F0KHQsImgiKS5jb25jYXQocil9fV0sKG49W3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54LHI9ZS55LG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89ZS50b3AsYT1lLmxlZnQscz1lLmNsYXNzTmFtZTtyZXR1cm4gUih0KSYmUihyKSYmUihuKSYmUihpKSYmUihvKSYmUihhKT9nLmEuY3JlYXRlRWxlbWVudCgicGF0aCIseWQoe30sZWUodGhpcy5wcm9wcykse2NsYXNzTmFtZTpfKCkoInJlY2hhcnRzLWNyb3NzIixzKSxkOnRoaXMuY29uc3RydWN0b3IuZ2V0UGF0aCh0LHIsbixpLG8sYSl9KSk6bnVsbH19XSkmJmdkKHIucHJvdG90eXBlLG4pLGkmJmdkKHIsaSksdH0oKSxhZC5kaXNwbGF5TmFtZT0iQ3Jvc3MiLGFkLnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtkZChlLHQsclt0XSl9KX1yZXR1cm4gZX0oe30sSCx7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLHRvcDptLmEubnVtYmVyLGxlZnQ6bS5hLm51bWJlcixjbGFzc05hbWU6bS5hLnN0cmluZ30pLGFkLmRlZmF1bHRQcm9wcz17eDowLHk6MCx0b3A6MCxsZWZ0OjAsd2lkdGg6MCxoZWlnaHQ6MH0sb2Q9c2QpKXx8b2Q7ZnVuY3Rpb24gVGQoZSl7cmV0dXJuKFRkPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQWQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIENkKCl7cmV0dXJuKENkPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBJZChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVRkKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGtkKGUpe3JldHVybihrZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gT2QoZSx0KXtyZXR1cm4oT2Q9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBOZD1mdW5jdGlvbihlKXt2YXIgdD1lLmN4LHI9ZS5jeSxuPWUucmFkaXVzLGk9ZS5hbmdsZSxvPWUuc2lnbixhPWUuaXNFeHRlcm5hbCxzPWUuY29ybmVyUmFkaXVzLHU9ZS5jb3JuZXJJc0V4dGVybmFsLGM9cyooYT8xOi0xKStuLGY9TWF0aC5hc2luKHMvYykvJGwsbD11P2k6aStvKmYsaD11P2ktbypmOmk7cmV0dXJue2NlbnRlcjpKbCh0LHIsYyxsKSxjaXJjbGVUYW5nZW5jeTpKbCh0LHIsbixsKSxsaW5lVGFuZ2VuY3k6SmwodCxyLGMqTWF0aC5jb3MoZiokbCksaCksdGhldGE6Zn19LFBkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY3gscj1lLmN5LG49ZS5pbm5lclJhZGl1cyxpPWUub3V0ZXJSYWRpdXMsbz1lLnN0YXJ0QW5nbGUsYT1mdW5jdGlvbihlLHQpe3JldHVybiBOKHQtZSkqTWF0aC5taW4oTWF0aC5hYnModC1lKSwzNTkuOTk5KX0obyxlLmVuZEFuZ2xlKSxzPW8rYSx1PUpsKHQscixpLG8pLGM9SmwodCxyLGkscyksZj0iTSAiLmNvbmNhdCh1LngsIiwiKS5jb25jYXQodS55LCJcbiAgICBBICIpLmNvbmNhdChpLCIsIikuY29uY2F0KGksIiwwLFxuICAgICIpLmNvbmNhdCgrKE1hdGguYWJzKGEpPjE4MCksIiwiKS5jb25jYXQoKyhvPnMpLCIsXG4gICAgIikuY29uY2F0KGMueCwiLCIpLmNvbmNhdChjLnksIlxuICAiKTtpZihuPjApe3ZhciBsPUpsKHQscixuLG8pLGg9SmwodCxyLG4scyk7Zis9IkwgIi5jb25jYXQoaC54LCIsIikuY29uY2F0KGgueSwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChuLCIsIikuY29uY2F0KG4sIiwwLFxuICAgICAgICAgICAgIikuY29uY2F0KCsoTWF0aC5hYnMoYSk+MTgwKSwiLCIpLmNvbmNhdCgrKG88PXMpLCIsXG4gICAgICAgICAgICAiKS5jb25jYXQobC54LCIsIikuY29uY2F0KGwueSwiIFoiKX1lbHNlIGYrPSJMICIuY29uY2F0KHQsIiwiKS5jb25jYXQociwiIFoiKTtyZXR1cm4gZn0sUmQ9SygoRWQ9U2Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLElkKHRoaXMsa2QodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZPZChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jeCxyPWUuY3ksbj1lLmlubmVyUmFkaXVzLGk9ZS5vdXRlclJhZGl1cyxvPWUuY29ybmVyUmFkaXVzLGE9ZS5mb3JjZUNvcm5lclJhZGl1cyxzPWUuY29ybmVySXNFeHRlcm5hbCx1PWUuc3RhcnRBbmdsZSxjPWUuZW5kQW5nbGUsZj1lLmNsYXNzTmFtZTtpZihpPG58fHU9PT1jKXJldHVybiBudWxsO3ZhciBsLGg9XygpKCJyZWNoYXJ0cy1zZWN0b3IiLGYpLHA9aS1uLGQ9RChvLHAsMCwhMCk7cmV0dXJuIGw9ZD4wJiZNYXRoLmFicyh1LWMpPDM2MD9mdW5jdGlvbihlKXt2YXIgdD1lLmN4LHI9ZS5jeSxuPWUuaW5uZXJSYWRpdXMsaT1lLm91dGVyUmFkaXVzLG89ZS5jb3JuZXJSYWRpdXMsYT1lLmZvcmNlQ29ybmVyUmFkaXVzLHM9ZS5jb3JuZXJJc0V4dGVybmFsLHU9ZS5zdGFydEFuZ2xlLGM9ZS5lbmRBbmdsZSxmPU4oYy11KSxsPU5kKHtjeDp0LGN5OnIscmFkaXVzOmksYW5nbGU6dSxzaWduOmYsY29ybmVyUmFkaXVzOm8sY29ybmVySXNFeHRlcm5hbDpzfSksaD1sLmNpcmNsZVRhbmdlbmN5LHA9bC5saW5lVGFuZ2VuY3ksZD1sLnRoZXRhLHk9TmQoe2N4OnQsY3k6cixyYWRpdXM6aSxhbmdsZTpjLHNpZ246LWYsY29ybmVyUmFkaXVzOm8sY29ybmVySXNFeHRlcm5hbDpzfSksZz15LmNpcmNsZVRhbmdlbmN5LHY9eS5saW5lVGFuZ2VuY3ksbT15LnRoZXRhLGI9TWF0aC5hYnModS1jKS1kLW07aWYoYjwwKXJldHVybiBhPyJNICIuY29uY2F0KHAueCwiLCIpLmNvbmNhdChwLnksIlxuICAgICAgICBhIikuY29uY2F0KG8sIiwiKS5jb25jYXQobywiLDAsMCwxLCIpLmNvbmNhdCgyKm8sIiwwXG4gICAgICAgIGEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLDEsIikuY29uY2F0KDIqLW8sIiwwXG4gICAgICAiKTpQZCh7Y3g6dCxjeTpyLGlubmVyUmFkaXVzOm4sb3V0ZXJSYWRpdXM6aSxzdGFydEFuZ2xlOnUsZW5kQW5nbGU6Y30pO3ZhciBfPSJNICIuY29uY2F0KHAueCwiLCIpLmNvbmNhdChwLnksIlxuICAgIEEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQoaC54LCIsIikuY29uY2F0KGgueSwiXG4gICAgQSIpLmNvbmNhdChpLCIsIikuY29uY2F0KGksIiwwLCIpLmNvbmNhdCgrKGI+MTgwKSwiLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQoZy54LCIsIikuY29uY2F0KGcueSwiXG4gICAgQSIpLmNvbmNhdChvLCIsIikuY29uY2F0KG8sIiwwLDAsIikuY29uY2F0KCsoZjwwKSwiLCIpLmNvbmNhdCh2LngsIiwiKS5jb25jYXQodi55LCJcbiAgIik7aWYobj4wKXt2YXIgUz1OZCh7Y3g6dCxjeTpyLHJhZGl1czpuLGFuZ2xlOnUsc2lnbjpmLGlzRXh0ZXJuYWw6ITAsY29ybmVyUmFkaXVzOm8sY29ybmVySXNFeHRlcm5hbDpzfSksRT1TLmNpcmNsZVRhbmdlbmN5LHc9Uy5saW5lVGFuZ2VuY3ksVD1TLnRoZXRhLEE9TmQoe2N4OnQsY3k6cixyYWRpdXM6bixhbmdsZTpjLHNpZ246LWYsaXNFeHRlcm5hbDohMCxjb3JuZXJSYWRpdXM6byxjb3JuZXJJc0V4dGVybmFsOnN9KSxDPUEuY2lyY2xlVGFuZ2VuY3kseD1BLmxpbmVUYW5nZW5jeSxJPUEudGhldGEsaz1NYXRoLmFicyh1LWMpLVQtSTtpZihrPDApcmV0dXJuIiIuY29uY2F0KF8sIkwiKS5jb25jYXQodCwiLCIpLmNvbmNhdChyLCJaIik7Xys9IkwiLmNvbmNhdCh4LngsIiwiKS5jb25jYXQoeC55LCJcbiAgICAgIEEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQoQy54LCIsIikuY29uY2F0KEMueSwiXG4gICAgICBBIikuY29uY2F0KG4sIiwiKS5jb25jYXQobiwiLDAsIikuY29uY2F0KCsoaz4xODApLCIsIikuY29uY2F0KCsoZj4wKSwiLCIpLmNvbmNhdChFLngsIiwiKS5jb25jYXQoRS55LCJcbiAgICAgIEEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQody54LCIsIikuY29uY2F0KHcueSwiWiIpfWVsc2UgXys9IkwiLmNvbmNhdCh0LCIsIikuY29uY2F0KHIsIloiKTtyZXR1cm4gX30oe2N4OnQsY3k6cixpbm5lclJhZGl1czpuLG91dGVyUmFkaXVzOmksY29ybmVyUmFkaXVzOk1hdGgubWluKGQscC8yKSxmb3JjZUNvcm5lclJhZGl1czphLGNvcm5lcklzRXh0ZXJuYWw6cyxzdGFydEFuZ2xlOnUsZW5kQW5nbGU6Y30pOlBkKHtjeDp0LGN5OnIsaW5uZXJSYWRpdXM6bixvdXRlclJhZGl1czppLHN0YXJ0QW5nbGU6dSxlbmRBbmdsZTpjfSksZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLENkKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6aCxkOmx9KSl9fV0pJiZ4ZChyLnByb3RvdHlwZSxuKSxpJiZ4ZChyLGkpLHR9KCksU2QuZGlzcGxheU5hbWU9IlNlY3RvciIsU2QucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FkKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyxjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsaW5uZXJSYWRpdXM6bS5hLm51bWJlcixvdXRlclJhZGl1czptLmEubnVtYmVyLHN0YXJ0QW5nbGU6bS5hLm51bWJlcixlbmRBbmdsZTptLmEubnVtYmVyLGNvcm5lclJhZGl1czptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSxmb3JjZUNvcm5lclJhZGl1czptLmEuYm9vbCxjb3JuZXJJc0V4dGVybmFsOm0uYS5ib29sfSksU2QuZGVmYXVsdFByb3BzPXtjeDowLGN5OjAsaW5uZXJSYWRpdXM6MCxvdXRlclJhZGl1czowLHN0YXJ0QW5nbGU6MCxlbmRBbmdsZTowLGNvcm5lclJhZGl1czowLGZvcmNlQ29ybmVyUmFkaXVzOiExLGNvcm5lcklzRXh0ZXJuYWw6ITF9LF9kPUVkKSl8fF9kO2Z1bmN0aW9uIEJkKGUpe3JldHVybihCZD0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIE1kKCl7cmV0dXJuKE1kPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTGQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7RGQoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gRGQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIGpkKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX1mdW5jdGlvbiBVZChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIEZkKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09QmQodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gVmQoZSl7cmV0dXJuKFZkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBxZChlLHQpe3JldHVybihxZD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIEtkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxGZCh0aGlzLFZkKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmcWQoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6ImdldFRpY2tzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgcj1lLnRpY2ssbj1lLnRpY2tzLGk9ZS52aWV3Qm94LG89ZS5taW5UaWNrR2FwLGE9ZS5vcmllbnRhdGlvbixzPWUuaW50ZXJ2YWwsdT1lLnRpY2tGb3JtYXR0ZXIsYz1lLnVuaXQ7cmV0dXJuIG4mJm4ubGVuZ3RoJiZyP1Iocyl8fGFlKCk/dC5nZXROdW1iZXJJbnRlcnZhbFRpY2tzKG4sUihzKT9zOjApOiJwcmVzZXJ2ZVN0YXJ0RW5kIj09PXM/dC5nZXRUaWNrc1N0YXJ0KHt0aWNrczpuLHRpY2tGb3JtYXR0ZXI6dSx2aWV3Qm94Omksb3JpZW50YXRpb246YSxtaW5UaWNrR2FwOm8sdW5pdDpjfSwhMCk6InByZXNlcnZlU3RhcnQiPT09cz90LmdldFRpY2tzU3RhcnQoe3RpY2tzOm4sdGlja0Zvcm1hdHRlcjp1LHZpZXdCb3g6aSxvcmllbnRhdGlvbjphLG1pblRpY2tHYXA6byx1bml0OmN9KTp0LmdldFRpY2tzRW5kKHt0aWNrczpuLHRpY2tGb3JtYXR0ZXI6dSx2aWV3Qm94Omksb3JpZW50YXRpb246YSxtaW5UaWNrR2FwOm8sdW5pdDpjfSk6W119fSx7a2V5OiJnZXROdW1iZXJJbnRlcnZhbFRpY2tzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlLHIpe3JldHVybiByJSh0KzEpPT09MH0pfX0se2tleToiZ2V0VGlja3NTdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGk9ZS50aWNrcyxvPWUudGlja0Zvcm1hdHRlcixhPWUudmlld0JveCxzPWUub3JpZW50YXRpb24sYz1lLm1pblRpY2tHYXAsZj1lLnVuaXQsbD1hLngsaD1hLnkscD1hLndpZHRoLGQ9YS5oZWlnaHQseT0idG9wIj09PXN8fCJib3R0b20iPT09cz8id2lkdGgiOiJoZWlnaHQiLGc9KGl8fFtdKS5zbGljZSgpLHY9ZiYmIndpZHRoIj09PXk/YmUoZilbeV06MCxtPWcubGVuZ3RoLGI9bT49Mj9OKGdbMV0uY29vcmRpbmF0ZS1nWzBdLmNvb3JkaW5hdGUpOjE7aWYoMT09PWI/KHI9IndpZHRoIj09PXk/bDpoLG49IndpZHRoIj09PXk/bCtwOmgrZCk6KHI9IndpZHRoIj09PXk/bCtwOmgrZCxuPSJ3aWR0aCI9PT15P2w6aCksdCl7dmFyIF89aVttLTFdLFM9dSgpKG8pP28oXy52YWx1ZSk6Xy52YWx1ZSxFPWJlKFMpW3ldK3Ysdz1iKihfLmNvb3JkaW5hdGUrYipFLzItbik7Z1ttLTFdPV89TGQoe30sXyx7dGlja0Nvb3JkOnc+MD9fLmNvb3JkaW5hdGUtdypiOl8uY29vcmRpbmF0ZX0pLGIqKF8udGlja0Nvb3JkLWIqRS8yLXIpPj0wJiZiKihfLnRpY2tDb29yZCtiKkUvMi1uKTw9MCYmKG49Xy50aWNrQ29vcmQtYiooRS8yK2MpLGdbbS0xXT1MZCh7fSxfLHtpc1Nob3c6ITB9KSl9Zm9yKHZhciBUPXQ/bS0xOm0sQT0wO0E8VDtBKyspe3ZhciBDPWdbQV0seD11KCkobyk/byhDLnZhbHVlKTpDLnZhbHVlLEk9YmUoeClbeV0rdjtpZigwPT09QSl7dmFyIGs9YiooQy5jb29yZGluYXRlLWIqSS8yLXIpO2dbQV09Qz1MZCh7fSxDLHt0aWNrQ29vcmQ6azwwP0MuY29vcmRpbmF0ZS1rKmI6Qy5jb29yZGluYXRlfSl9ZWxzZSBnW0FdPUM9TGQoe30sQyx7dGlja0Nvb3JkOkMuY29vcmRpbmF0ZX0pO2IqKEMudGlja0Nvb3JkLWIqSS8yLXIpPj0wJiZiKihDLnRpY2tDb29yZCtiKkkvMi1uKTw9MCYmKHI9Qy50aWNrQ29vcmQrYiooSS8yK2MpLGdbQV09TGQoe30sQyx7aXNTaG93OiEwfSkpfXJldHVybiBnLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1Nob3d9KX19LHtrZXk6ImdldFRpY2tzRW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS50aWNrcyxpPWUudGlja0Zvcm1hdHRlcixvPWUudmlld0JveCxhPWUub3JpZW50YXRpb24scz1lLm1pblRpY2tHYXAsYz1lLnVuaXQsZj1vLngsbD1vLnksaD1vLndpZHRoLHA9by5oZWlnaHQsZD0idG9wIj09PWF8fCJib3R0b20iPT09YT8id2lkdGgiOiJoZWlnaHQiLHk9YyYmIndpZHRoIj09PWQ/YmUoYylbZF06MCxnPShufHxbXSkuc2xpY2UoKSx2PWcubGVuZ3RoLG09dj49Mj9OKGdbMV0uY29vcmRpbmF0ZS1nWzBdLmNvb3JkaW5hdGUpOjE7MT09PW0/KHQ9IndpZHRoIj09PWQ/ZjpsLHI9IndpZHRoIj09PWQ/ZitoOmwrcCk6KHQ9IndpZHRoIj09PWQ/ZitoOmwrcCxyPSJ3aWR0aCI9PT1kP2Y6bCk7Zm9yKHZhciBiPXYtMTtiPj0wO2ItLSl7dmFyIF89Z1tiXSxTPXUoKShpKT9pKF8udmFsdWUpOl8udmFsdWUsRT1iZShTKVtkXSt5O2lmKGI9PT12LTEpe3ZhciB3PW0qKF8uY29vcmRpbmF0ZSttKkUvMi1yKTtnW2JdPV89TGQoe30sXyx7dGlja0Nvb3JkOnc+MD9fLmNvb3JkaW5hdGUtdyptOl8uY29vcmRpbmF0ZX0pfWVsc2UgZ1tiXT1fPUxkKHt9LF8se3RpY2tDb29yZDpfLmNvb3JkaW5hdGV9KTttKihfLnRpY2tDb29yZC1tKkUvMi10KT49MCYmbSooXy50aWNrQ29vcmQrbSpFLzItcik8PTAmJihyPV8udGlja0Nvb3JkLW0qKEUvMitzKSxnW2JdPUxkKHt9LF8se2lzU2hvdzohMH0pKX1yZXR1cm4gZy5maWx0ZXI="
}
Changelog:
{
"2020.04.17 15:39": "base64:b2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEZwKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBWcChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtxcChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBxcChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gS3AoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB6cChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVVwKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIEdwKGUpe3JldHVybihHcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4oSHA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBXcCxZcCxYcCxRcD1mdW5jdGlvbihlKXtyZXR1cm4gZCgpKGUpJiZCKGVbMF0pJiZCKGVbMV0pP2Uuam9pbigiIH4gIik6ZX0sJHA9SygoTnA9T3A9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHpwKHRoaXMsR3AodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZIcChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlckNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGF5bG9hZCxyPWUuc2VwYXJhdG9yLG49ZS5mb3JtYXR0ZXIsaT1lLml0ZW1TdHlsZSxvPWUuaXRlbVNvcnRlcjtpZih0JiZ0Lmxlbmd0aCl7dmFyIGE9KG8/QmUoKSh0LG8pOnQpLm1hcChmdW5jdGlvbihlLHQpe2lmKCJub25lIj09PWUudHlwZSlyZXR1cm4gbnVsbDt2YXIgbz1WcCh7ZGlzcGxheToiYmxvY2siLHBhZGRpbmdUb3A6NCxwYWRkaW5nQm90dG9tOjQsY29sb3I6ZS5jb2xvcnx8IiMwMDAifSxpKSxhPWUuZm9ybWF0dGVyfHxufHxRcCxzPWUubmFtZSx1PWUudmFsdWU7aWYoYSl7dmFyIGM9YSh1LHMsZSx0KTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgZj1GcChjLDIpO3U9ZlswXSxzPWZbMV19ZWxzZSB1PWN9cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZToicmVjaGFydHMtdG9vbHRpcC1pdGVtIixrZXk6InRvb2x0aXAtaXRlbS0iLmNvbmNhdCh0KSxzdHlsZTpvfSxCKHMpP2cuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy10b29sdGlwLWl0ZW0tbmFtZSJ9LHMpOm51bGwsQihzKT9nLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVjaGFydHMtdG9vbHRpcC1pdGVtLXNlcGFyYXRvciJ9LHIpOm51bGwsZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLXRvb2x0aXAtaXRlbS12YWx1ZSJ9LHUpLGcuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy10b29sdGlwLWl0ZW0tdW5pdCJ9LGUudW5pdHx8IiIpKX0pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6InJlY2hhcnRzLXRvb2x0aXAtaXRlbS1saXN0IixzdHlsZTp7cGFkZGluZzowLG1hcmdpbjowfX0sYSl9cmV0dXJuIG51bGx9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUud3JhcHBlckNsYXNzTmFtZSxyPWUuY29udGVudFN0eWxlLG49ZS5sYWJlbENsYXNzTmFtZSxpPWUubGFiZWxTdHlsZSxvPWUubGFiZWwsYT1lLmxhYmVsRm9ybWF0dGVyLHM9VnAoe21hcmdpbjowLHBhZGRpbmc6MTAsYmFja2dyb3VuZENvbG9yOiIjZmZmIixib3JkZXI6IjFweCBzb2xpZCAjY2NjIix3aGl0ZVNwYWNlOiJub3dyYXAifSxyKSx1PVZwKHttYXJnaW46MH0saSksYz1CKG8pLGY9Yz9vOiIiLGw9XygpKCJyZWNoYXJ0cy1kZWZhdWx0LXRvb2x0aXAiLHQpLGg9XygpKCJyZWNoYXJ0cy10b29sdGlwLWxhYmVsIixuKTtyZXR1cm4gYyYmYSYmKGY9YShvKSksZy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsLHN0eWxlOnN9LGcuYS5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOmgsc3R5bGU6dX0sZiksdGhpcy5yZW5kZXJDb250ZW50KCkpfX1dKSYmS3Aoci5wcm90b3R5cGUsbiksaSYmS3AocixpKSx0fSgpLE9wLmRpc3BsYXlOYW1lPSJEZWZhdWx0VG9vbHRpcENvbnRlbnQiLE9wLnByb3BUeXBlcz17c2VwYXJhdG9yOm0uYS5zdHJpbmcsd3JhcHBlckNsYXNzTmFtZTptLmEuc3RyaW5nLGxhYmVsQ2xhc3NOYW1lOm0uYS5zdHJpbmcsZm9ybWF0dGVyOm0uYS5mdW5jLGNvbnRlbnRTdHlsZTptLmEub2JqZWN0LGl0ZW1TdHlsZTptLmEub2JqZWN0LGxhYmVsU3R5bGU6bS5hLm9iamVjdCxsYWJlbEZvcm1hdHRlcjptLmEuZnVuYyxsYWJlbDptLmEuYW55LHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHtuYW1lOm0uYS5hbnksdmFsdWU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nLG0uYS5hcnJheV0pLHVuaXQ6bS5hLmFueX0pKSxpdGVtU29ydGVyOm0uYS5mdW5jfSxPcC5kZWZhdWx0UHJvcHM9e3NlcGFyYXRvcjoiIDogIixjb250ZW50U3R5bGU6e30saXRlbVN0eWxlOnt9LGxhYmVsU3R5bGU6e319LGtwPU5wKSl8fGtwO2Z1bmN0aW9uIFpwKGUpe3JldHVybihacD0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEpwKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VkKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGVkKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB0ZChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHJkKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09WnAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbmQoZSl7cmV0dXJuKG5kPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBpZChlLHQpe3JldHVybihpZD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIG9kLGFkLHNkLHVkPSJyZWNoYXJ0cy10b29sdGlwLXdyYXBwZXIiLGNkPWZ1bmN0aW9uKGUpe3JldHVybiBlLmRhdGFLZXl9LGZkPXtjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSksdmlld0JveDptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLGFjdGl2ZTptLmEuYm9vbCxzZXBhcmF0b3I6bS5hLnN0cmluZyxmb3JtYXR0ZXI6bS5hLmZ1bmMsb2Zmc2V0Om0uYS5udW1iZXIsaXRlbVN0eWxlOm0uYS5vYmplY3QsbGFiZWxTdHlsZTptLmEub2JqZWN0LHdyYXBwZXJTdHlsZTptLmEub2JqZWN0LGNvbnRlbnRTdHlsZTptLmEub2JqZWN0LGN1cnNvcjptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEuZWxlbWVudCxtLmEub2JqZWN0XSksY29vcmRpbmF0ZTptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXJ9KSxwb3NpdGlvbjptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXJ9KSxsYWJlbDptLmEuYW55LHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHtuYW1lOm0uYS5hbnksdmFsdWU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nLG0uYS5hcnJheV0pLHVuaXQ6bS5hLmFueSx0eXBlOm0uYS5vbmVPZihRKX0pKSxwYXlsb2RVbmlxQnk6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmJvb2xdKSxpc0FuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxhbmltYXRpb25EdXJhdGlvbjptLmEubnVtYmVyLGFuaW1hdGlvbkVhc2luZzptLmEub25lT2YoWyJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJsaW5lYXIiXSksaXRlbVNvcnRlcjptLmEuZnVuYyxmaWx0ZXJOdWxsOm0uYS5ib29sLHVzZVRyYW5zbGF0ZTNkOm0uYS5ib29sfSxsZD17YWN0aXZlOiExLG9mZnNldDoxMCx2aWV3Qm94Ont4MTowLHgyOjAseTE6MCx5MjowfSxjb29yZGluYXRlOnt4OjAseTowfSxjdXJzb3JTdHlsZTp7fSxzZXBhcmF0b3I6IiA6ICIsd3JhcHBlclN0eWxlOnt9LGNvbnRlbnRTdHlsZTp7fSxpdGVtU3R5bGU6e30sbGFiZWxTdHlsZTp7fSxjdXJzb3I6ITAsaXNBbmltYXRpb25BY3RpdmU6IWFlKCksYW5pbWF0aW9uRWFzaW5nOiJlYXNlIixhbmltYXRpb25EdXJhdGlvbjo0MDAsZmlsdGVyTnVsbDohMCx1c2VUcmFuc2xhdGUzZDohMX0saGQ9SygoWHA9WXA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9cmQodGhpcywoZT1uZCh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e2JveFdpZHRoOi0xLGJveEhlaWdodDotMX0scn12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZpZChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToidXBkYXRlQkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0O2lmKHRoaXMud3JhcHBlck5vZGUmJnRoaXMud3JhcHBlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgbj10aGlzLndyYXBwZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyhNYXRoLmFicyhuLndpZHRoLXQpPjF8fE1hdGguYWJzKG4uaGVpZ2h0LXIpPjEpJiZ0aGlzLnNldFN0YXRlKHtib3hXaWR0aDpuLndpZHRoLGJveEhlaWdodDpuLmhlaWdodH0pfWVsc2UtMT09PXQmJi0xPT09cnx8dGhpcy5zZXRTdGF0ZSh7Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49dGhpcyxpPXRoaXMucHJvcHMsbz1pLnBheWxvYWQsYT1pLmlzQW5pbWF0aW9uQWN0aXZlLHM9aS5hbmltYXRpb25EdXJhdGlvbixjPWkuYW5pbWF0aW9uRWFzaW5nLGw9aS5maWx0ZXJOdWxsLGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMD09PWU/TmYoKSh0LGNkKTp1KCkoZSk/TmYoKSh0LGUpOnR9KGkucGF5bG9kVW5pcUJ5LGwmJm8mJm8ubGVuZ3RoP28uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFmKCkoZS52YWx1ZSl9KTpvKSxwPWgmJmgubGVuZ3RoLGQ9dGhpcy5wcm9wcyx5PWQuY29udGVudCx2PWQudmlld0JveCxtPWQuY29vcmRpbmF0ZSxiPWQucG9zaXRpb24sUz1kLmFjdGl2ZSxFPWQub2Zmc2V0LHc9SnAoe3BvaW50ZXJFdmVudHM6Im5vbmUiLHZpc2liaWxpdHk6UyYmcD8idmlzaWJsZSI6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIix0b3A6MH0sZC53cmFwcGVyU3R5bGUpO2lmKGImJlIoYi54KSYmUihiLnkpKXQ9Yi54LHI9Yi55O2Vsc2V7dmFyIFQ9dGhpcy5zdGF0ZSxBPVQuYm94V2lkdGgsQz1ULmJveEhlaWdodDtBPjAmJkM+MCYmbT8odD1iJiZSKGIueCk/Yi54Ok1hdGgubWF4KG0ueCtBK0U+di54K3Yud2lkdGg/bS54LUEtRTptLngrRSx2LngpLHI9YiYmUihiLnkpP2IueTpNYXRoLm1heChtLnkrQytFPnYueSt2LmhlaWdodD9tLnktQy1FOm0ueStFLHYueSkpOncudmlzaWJpbGl0eT0iaGlkZGVuIn13PUpwKHt9LHcsaWMoe3RyYW5zZm9ybTp0aGlzLnByb3BzLnVzZVRyYW5zbGF0ZTNkPyJ0cmFuc2xhdGUzZCgiLmNvbmNhdCh0LCJweCwgIikuY29uY2F0KHIsInB4LCAwKSIpOiJ0cmFuc2xhdGUoIi5jb25jYXQodCwicHgsICIpLmNvbmNhdChyLCJweCkiKX0pKSxhJiZTJiYodz1KcCh7fSx3LGljKHt0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gIi5jb25jYXQocywibXMgIikuY29uY2F0KGMpfSkpKTt2YXIgeD1fKCkodWQsKGVkKGU9e30sIiIuY29uY2F0KHVkLCItcmlnaHQiKSxSKHQpJiZtJiZSKG0ueCkmJnQ+PW0ueCksZWQoZSwiIi5jb25jYXQodWQsIi1sZWZ0IiksUih0KSYmbSYmUihtLngpJiZ0PG0ueCksZWQoZSwiIi5jb25jYXQodWQsIi1ib3R0b20iKSxSKHIpJiZtJiZSKG0ueSkmJnI+PW0ueSksZWQoZSwiIi5jb25jYXQodWQsIi10b3AiKSxSKHIpJiZtJiZSKG0ueSkmJnI8bS55KSxlKSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eCxzdHlsZTp3LHJlZjpmdW5jdGlvbihlKXtuLndyYXBwZXJOb2RlPWV9fSxmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KCRwLHQpfSh5LEpwKHt9LHRoaXMucHJvcHMse3BheWxvYWQ6aH0pKSl9fV0pJiZ0ZChyLnByb3RvdHlwZSxuKSxpJiZ0ZChyLGkpLHR9KCksWXAuZGlzcGxheU5hbWU9IlRvb2x0aXAiLFlwLnByb3BUeXBlcz1mZCxZcC5kZWZhdWx0UHJvcHM9bGQsV3A9WHApKXx8V3A7ZnVuY3Rpb24gcGQoZSl7cmV0dXJuKHBkPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gZGQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHlkKCl7cmV0dXJuKHlkPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZ2QoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB2ZChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PXBkKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIG1kKGUpe3JldHVybihtZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gYmQoZSx0KXtyZXR1cm4oYmQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBfZCxTZCxFZCx3ZD1LKChzZD1hZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdmQodGhpcyxtZCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmJkKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyl7cmV0dXJuIk0iLmNvbmNhdChlLCIsIikuY29uY2F0KGksInYiKS5jb25jYXQobiwiTSIpLmNvbmNhdChvLCIsIikuY29uY2F0KHQsImgiKS5jb25jYXQocil9fV0sKG49W3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54LHI9ZS55LG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89ZS50b3AsYT1lLmxlZnQscz1lLmNsYXNzTmFtZTtyZXR1cm4gUih0KSYmUihyKSYmUihuKSYmUihpKSYmUihvKSYmUihhKT9nLmEuY3JlYXRlRWxlbWVudCgicGF0aCIseWQoe30sZWUodGhpcy5wcm9wcykse2NsYXNzTmFtZTpfKCkoInJlY2hhcnRzLWNyb3NzIixzKSxkOnRoaXMuY29uc3RydWN0b3IuZ2V0UGF0aCh0LHIsbixpLG8sYSl9KSk6bnVsbH19XSkmJmdkKHIucHJvdG90eXBlLG4pLGkmJmdkKHIsaSksdH0oKSxhZC5kaXNwbGF5TmFtZT0iQ3Jvc3MiLGFkLnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtkZChlLHQsclt0XSl9KX1yZXR1cm4gZX0oe30sSCx7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLHRvcDptLmEubnVtYmVyLGxlZnQ6bS5hLm51bWJlcixjbGFzc05hbWU6bS5hLnN0cmluZ30pLGFkLmRlZmF1bHRQcm9wcz17eDowLHk6MCx0b3A6MCxsZWZ0OjAsd2lkdGg6MCxoZWlnaHQ6MH0sb2Q9c2QpKXx8b2Q7ZnVuY3Rpb24gVGQoZSl7cmV0dXJuKFRkPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQWQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIENkKCl7cmV0dXJuKENkPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBJZChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVRkKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGtkKGUpe3JldHVybihrZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gT2QoZSx0KXtyZXR1cm4oT2Q9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBOZD1mdW5jdGlvbihlKXt2YXIgdD1lLmN4LHI9ZS5jeSxuPWUucmFkaXVzLGk9ZS5hbmdsZSxvPWUuc2lnbixhPWUuaXNFeHRlcm5hbCxzPWUuY29ybmVyUmFkaXVzLHU9ZS5jb3JuZXJJc0V4dGVybmFsLGM9cyooYT8xOi0xKStuLGY9TWF0aC5hc2luKHMvYykvJGwsbD11P2k6aStvKmYsaD11P2ktbypmOmk7cmV0dXJue2NlbnRlcjpKbCh0LHIsYyxsKSxjaXJjbGVUYW5nZW5jeTpKbCh0LHIsbixsKSxsaW5lVGFuZ2VuY3k6SmwodCxyLGMqTWF0aC5jb3MoZiokbCksaCksdGhldGE6Zn19LFBkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY3gscj1lLmN5LG49ZS5pbm5lclJhZGl1cyxpPWUub3V0ZXJSYWRpdXMsbz1lLnN0YXJ0QW5nbGUsYT1mdW5jdGlvbihlLHQpe3JldHVybiBOKHQtZSkqTWF0aC5taW4oTWF0aC5hYnModC1lKSwzNTkuOTk5KX0obyxlLmVuZEFuZ2xlKSxzPW8rYSx1PUpsKHQscixpLG8pLGM9SmwodCxyLGkscyksZj0iTSAiLmNvbmNhdCh1LngsIiwiKS5jb25jYXQodS55LCJcbiAgICBBICIpLmNvbmNhdChpLCIsIikuY29uY2F0KGksIiwwLFxuICAgICIpLmNvbmNhdCgrKE1hdGguYWJzKGEpPjE4MCksIiwiKS5jb25jYXQoKyhvPnMpLCIsXG4gICAgIikuY29uY2F0KGMueCwiLCIpLmNvbmNhdChjLnksIlxuICAiKTtpZihuPjApe3ZhciBsPUpsKHQscixuLG8pLGg9SmwodCxyLG4scyk7Zis9IkwgIi5jb25jYXQoaC54LCIsIikuY29uY2F0KGgueSwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChuLCIsIikuY29uY2F0KG4sIiwwLFxuICAgICAgICAgICAgIikuY29uY2F0KCsoTWF0aC5hYnMoYSk+MTgwKSwiLCIpLmNvbmNhdCgrKG88PXMpLCIsXG4gICAgICAgICAgICAiKS5jb25jYXQobC54LCIsIikuY29uY2F0KGwueSwiIFoiKX1lbHNlIGYrPSJMICIuY29uY2F0KHQsIiwiKS5jb25jYXQociwiIFoiKTtyZXR1cm4gZn0sUmQ9SygoRWQ9U2Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLElkKHRoaXMsa2QodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZPZChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jeCxyPWUuY3ksbj1lLmlubmVyUmFkaXVzLGk9ZS5vdXRlclJhZGl1cyxvPWUuY29ybmVyUmFkaXVzLGE9ZS5mb3JjZUNvcm5lclJhZGl1cyxzPWUuY29ybmVySXNFeHRlcm5hbCx1PWUuc3RhcnRBbmdsZSxjPWUuZW5kQW5nbGUsZj1lLmNsYXNzTmFtZTtpZihpPG58fHU9PT1jKXJldHVybiBudWxsO3ZhciBsLGg9XygpKCJyZWNoYXJ0cy1zZWN0b3IiLGYpLHA9aS1uLGQ9RChvLHAsMCwhMCk7cmV0dXJuIGw9ZD4wJiZNYXRoLmFicyh1LWMpPDM2MD9mdW5jdGlvbihlKXt2YXIgdD1lLmN4LHI9ZS5jeSxuPWUuaW5uZXJSYWRpdXMsaT1lLm91dGVyUmFkaXVzLG89ZS5jb3JuZXJSYWRpdXMsYT1lLmZvcmNlQ29ybmVyUmFkaXVzLHM9ZS5jb3JuZXJJc0V4dGVybmFsLHU9ZS5zdGFydEFuZ2xlLGM9ZS5lbmRBbmdsZSxmPU4oYy11KSxsPU5kKHtjeDp0LGN5OnIscmFkaXVzOmksYW5nbGU6dSxzaWduOmYsY29ybmVyUmFkaXVzOm8sY29ybmVySXNFeHRlcm5hbDpzfSksaD1sLmNpcmNsZVRhbmdlbmN5LHA9bC5saW5lVGFuZ2VuY3ksZD1sLnRoZXRhLHk9TmQoe2N4OnQsY3k6cixyYWRpdXM6aSxhbmdsZTpjLHNpZ246LWYsY29ybmVyUmFkaXVzOm8sY29ybmVySXNFeHRlcm5hbDpzfSksZz15LmNpcmNsZVRhbmdlbmN5LHY9eS5saW5lVGFuZ2VuY3ksbT15LnRoZXRhLGI9TWF0aC5hYnModS1jKS1kLW07aWYoYjwwKXJldHVybiBhPyJNICIuY29uY2F0KHAueCwiLCIpLmNvbmNhdChwLnksIlxuICAgICAgICBhIikuY29uY2F0KG8sIiwiKS5jb25jYXQobywiLDAsMCwxLCIpLmNvbmNhdCgyKm8sIiwwXG4gICAgICAgIGEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLDEsIikuY29uY2F0KDIqLW8sIiwwXG4gICAgICAiKTpQZCh7Y3g6dCxjeTpyLGlubmVyUmFkaXVzOm4sb3V0ZXJSYWRpdXM6aSxzdGFydEFuZ2xlOnUsZW5kQW5nbGU6Y30pO3ZhciBfPSJNICIuY29uY2F0KHAueCwiLCIpLmNvbmNhdChwLnksIlxuICAgIEEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQoaC54LCIsIikuY29uY2F0KGgueSwiXG4gICAgQSIpLmNvbmNhdChpLCIsIikuY29uY2F0KGksIiwwLCIpLmNvbmNhdCgrKGI+MTgwKSwiLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQoZy54LCIsIikuY29uY2F0KGcueSwiXG4gICAgQSIpLmNvbmNhdChvLCIsIikuY29uY2F0KG8sIiwwLDAsIikuY29uY2F0KCsoZjwwKSwiLCIpLmNvbmNhdCh2LngsIiwiKS5jb25jYXQodi55LCJcbiAgIik7aWYobj4wKXt2YXIgUz1OZCh7Y3g6dCxjeTpyLHJhZGl1czpuLGFuZ2xlOnUsc2lnbjpmLGlzRXh0ZXJuYWw6ITAsY29ybmVyUmFkaXVzOm8sY29ybmVySXNFeHRlcm5hbDpzfSksRT1TLmNpcmNsZVRhbmdlbmN5LHc9Uy5saW5lVGFuZ2VuY3ksVD1TLnRoZXRhLEE9TmQoe2N4OnQsY3k6cixyYWRpdXM6bixhbmdsZTpjLHNpZ246LWYsaXNFeHRlcm5hbDohMCxjb3JuZXJSYWRpdXM6byxjb3JuZXJJc0V4dGVybmFsOnN9KSxDPUEuY2lyY2xlVGFuZ2VuY3kseD1BLmxpbmVUYW5nZW5jeSxJPUEudGhldGEsaz1NYXRoLmFicyh1LWMpLVQtSTtpZihrPDApcmV0dXJuIiIuY29uY2F0KF8sIkwiKS5jb25jYXQodCwiLCIpLmNvbmNhdChyLCJaIik7Xys9IkwiLmNvbmNhdCh4LngsIiwiKS5jb25jYXQoeC55LCJcbiAgICAgIEEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQoQy54LCIsIikuY29uY2F0KEMueSwiXG4gICAgICBBIikuY29uY2F0KG4sIiwiKS5jb25jYXQobiwiLDAsIikuY29uY2F0KCsoaz4xODApLCIsIikuY29uY2F0KCsoZj4wKSwiLCIpLmNvbmNhdChFLngsIiwiKS5jb25jYXQoRS55LCJcbiAgICAgIEEiKS5jb25jYXQobywiLCIpLmNvbmNhdChvLCIsMCwwLCIpLmNvbmNhdCgrKGY8MCksIiwiKS5jb25jYXQody54LCIsIikuY29uY2F0KHcueSwiWiIpfWVsc2UgXys9IkwiLmNvbmNhdCh0LCIsIikuY29uY2F0KHIsIloiKTtyZXR1cm4gX30oe2N4OnQsY3k6cixpbm5lclJhZGl1czpuLG91dGVyUmFkaXVzOmksY29ybmVyUmFkaXVzOk1hdGgubWluKGQscC8yKSxmb3JjZUNvcm5lclJhZGl1czphLGNvcm5lcklzRXh0ZXJuYWw6cyxzdGFydEFuZ2xlOnUsZW5kQW5nbGU6Y30pOlBkKHtjeDp0LGN5OnIsaW5uZXJSYWRpdXM6bixvdXRlclJhZGl1czppLHN0YXJ0QW5nbGU6dSxlbmRBbmdsZTpjfSksZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLENkKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6aCxkOmx9KSl9fV0pJiZ4ZChyLnByb3RvdHlwZSxuKSxpJiZ4ZChyLGkpLHR9KCksU2QuZGlzcGxheU5hbWU9IlNlY3RvciIsU2QucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FkKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyxjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsaW5uZXJSYWRpdXM6bS5hLm51bWJlcixvdXRlclJhZGl1czptLmEubnVtYmVyLHN0YXJ0QW5nbGU6bS5hLm51bWJlcixlbmRBbmdsZTptLmEubnVtYmVyLGNvcm5lclJhZGl1czptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSxmb3JjZUNvcm5lclJhZGl1czptLmEuYm9vbCxjb3JuZXJJc0V4dGVybmFsOm0uYS5ib29sfSksU2QuZGVmYXVsdFByb3BzPXtjeDowLGN5OjAsaW5uZXJSYWRpdXM6MCxvdXRlclJhZGl1czowLHN0YXJ0QW5nbGU6MCxlbmRBbmdsZTowLGNvcm5lclJhZGl1czowLGZvcmNlQ29ybmVyUmFkaXVzOiExLGNvcm5lcklzRXh0ZXJuYWw6ITF9LF9kPUVkKSl8fF9kO2Z1bmN0aW9uIEJkKGUpe3JldHVybihCZD0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIE1kKCl7cmV0dXJuKE1kPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTGQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7RGQoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gRGQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIGpkKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX1mdW5jdGlvbiBVZChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIEZkKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09QmQodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gVmQoZSl7cmV0dXJuKFZkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBxZChlLHQpe3JldHVybihxZD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIEtkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxGZCh0aGlzLFZkKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmcWQoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6ImdldFRpY2tzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgcj1lLnRpY2ssbj1lLnRpY2tzLGk9ZS52aWV3Qm94LG89ZS5taW5UaWNrR2FwLGE9ZS5vcmllbnRhdGlvbixzPWUuaW50ZXJ2YWwsdT1lLnRpY2tGb3JtYXR0ZXIsYz1lLnVuaXQ7cmV0dXJuIG4mJm4ubGVuZ3RoJiZyP1Iocyl8fGFlKCk/dC5nZXROdW1iZXJJbnRlcnZhbFRpY2tzKG4sUihzKT9zOjApOiJwcmVzZXJ2ZVN0YXJ0RW5kIj09PXM/dC5nZXRUaWNrc1N0YXJ0KHt0aWNrczpuLHRpY2tGb3JtYXR0ZXI6dSx2aWV3Qm94Omksb3JpZW50YXRpb246YSxtaW5UaWNrR2FwOm8sdW5pdDpjfSwhMCk6InByZXNlcnZlU3RhcnQiPT09cz90LmdldFRpY2tzU3RhcnQoe3RpY2tzOm4sdGlja0Zvcm1hdHRlcjp1LHZpZXdCb3g6aSxvcmllbnRhdGlvbjphLG1pblRpY2tHYXA6byx1bml0OmN9KTp0LmdldFRpY2tzRW5kKHt0aWNrczpuLHRpY2tGb3JtYXR0ZXI6dSx2aWV3Qm94Omksb3JpZW50YXRpb246YSxtaW5UaWNrR2FwOm8sdW5pdDpjfSk6W119fSx7a2V5OiJnZXROdW1iZXJJbnRlcnZhbFRpY2tzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlLHIpe3JldHVybiByJSh0KzEpPT09MH0pfX0se2tleToiZ2V0VGlja3NTdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGk9ZS50aWNrcyxvPWUudGlja0Zvcm1hdHRlcixhPWUudmlld0JveCxzPWUub3JpZW50YXRpb24sYz1lLm1pblRpY2tHYXAsZj1lLnVuaXQsbD1hLngsaD1hLnkscD1hLndpZHRoLGQ9YS5oZWlnaHQseT0idG9wIj09PXN8fCJib3R0b20iPT09cz8id2lkdGgiOiJoZWlnaHQiLGc9KGl8fFtdKS5zbGljZSgpLHY9ZiYmIndpZHRoIj09PXk/YmUoZilbeV06MCxtPWcubGVuZ3RoLGI9bT49Mj9OKGdbMV0uY29vcmRpbmF0ZS1nWzBdLmNvb3JkaW5hdGUpOjE7aWYoMT09PWI/KHI9IndpZHRoIj09PXk/bDpoLG49IndpZHRoIj09PXk/bCtwOmgrZCk6KHI9IndpZHRoIj09PXk/bCtwOmgrZCxuPSJ3aWR0aCI9PT15P2w6aCksdCl7dmFyIF89aVttLTFdLFM9dSgpKG8pP28oXy52YWx1ZSk6Xy52YWx1ZSxFPWJlKFMpW3ldK3Ysdz1iKihfLmNvb3JkaW5hdGUrYipFLzItbik7Z1ttLTFdPV89TGQoe30sXyx7dGlja0Nvb3JkOnc+MD9fLmNvb3JkaW5hdGUtdypiOl8uY29vcmRpbmF0ZX0pLGIqKF8udGlja0Nvb3JkLWIqRS8yLXIpPj0wJiZiKihfLnRpY2tDb29yZCtiKkUvMi1uKTw9MCYmKG49Xy50aWNrQ29vcmQtYiooRS8yK2MpLGdbbS0xXT1MZCh7fSxfLHtpc1Nob3c6ITB9KSl9Zm9yKHZhciBUPXQ/bS0xOm0sQT0wO0E8VDtBKyspe3ZhciBDPWdbQV0seD11KCkobyk/byhDLnZhbHVlKTpDLnZhbHVlLEk9YmUoeClbeV0rdjtpZigwPT09QSl7dmFyIGs9YiooQy5jb29yZGluYXRlLWIqSS8yLXIpO2dbQV09Qz1MZCh7fSxDLHt0aWNrQ29vcmQ6azwwP0MuY29vcmRpbmF0ZS1rKmI6Qy5jb29yZGluYXRlfSl9ZWxzZSBnW0FdPUM9TGQoe30sQyx7dGlja0Nvb3JkOkMuY29vcmRpbmF0ZX0pO2IqKEMudGlja0Nvb3JkLWIqSS8yLXIpPj0wJiZiKihDLnRpY2tDb29yZCtiKkkvMi1uKTw9MCYmKHI9Qy50aWNrQ29vcmQrYiooSS8yK2MpLGdbQV09TGQoe30sQyx7aXNTaG93OiEwfSkpfXJldHVybiBnLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1Nob3d9KX19LHtrZXk6ImdldFRpY2tzRW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS50aWNrcyxpPWUudGlja0Zvcm1hdHRlcixvPWUudmlld0JveCxhPWUub3JpZW50YXRpb24scz1lLm1pblRpY2tHYXAsYz1lLnVuaXQsZj1vLngsbD1vLnksaD1vLndpZHRoLHA9by5oZWlnaHQsZD0idG9wIj09PWF8fCJib3R0b20iPT09YT8id2lkdGgiOiJoZWlnaHQiLHk9YyYmIndpZHRoIj09PWQ/YmUoYylbZF06MCxnPShufHxbXSkuc2xpY2UoKSx2PWcubGVuZ3RoLG09dj49Mj9OKGdbMV0uY29vcmRpbmF0ZS1nWzBdLmNvb3JkaW5hdGUpOjE7MT09PW0/KHQ9IndpZHRoIj09PWQ/ZjpsLHI9IndpZHRoIj09PWQ/ZitoOmwrcCk6KHQ9IndpZHRoIj09PWQ/ZitoOmwrcCxyPSJ3aWR0aCI9PT1kP2Y6bCk7Zm9yKHZhciBiPXYtMTtiPj0wO2ItLSl7dmFyIF89Z1tiXSxTPXUoKShpKT9pKF8udmFsdWUpOl8udmFsdWUsRT1iZShTKVtkXSt5O2lmKGI9PT12LTEpe3ZhciB3PW0qKF8uY29vcmRpbmF0ZSttKkUvMi1yKTtnW2JdPV89TGQoe30sXyx7dGlja0Nvb3JkOnc+MD9fLmNvb3JkaW5hdGUtdyptOl8uY29vcmRpbmF0ZX0pfWVsc2UgZ1tiXT1fPUxkKHt9LF8se3RpY2tDb29yZDpfLmNvb3JkaW5hdGV9KTttKihfLnRpY2tDb29yZC1tKkUvMi10KT49MCYmbSooXy50aWNrQ29vcmQrbSpFLzItcik8PTAmJihyPV8udGlja0Nvb3JkLW0qKEUvMitzKSxnW2JdPUxkKHt9LF8se2lzU2hvdzohMH0pKX1yZXR1cm4gZy5maWx0ZXI="
}