(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{260:function(e,t,r){var n=r(544);e.exports=h,e.exports.parse=i,e.exports.compile=function(e,t){return u(i(e,t),t)},e.exports.tokensToFunction=u,e.exports.tokensToRegExp=g;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var r,n=[],i=0,a=0,u="",l=t&&t.delimiter||"/";null!=(r=o.exec(e));){var f=r[0],s=r[1],g=r.index;if(u+=e.slice(a,g),a=g+f.length,s)u+=s[1];else{var h=e[a],d=r[2],x=r[3],v=r[4],w=r[5],m=r[6],E=r[7];u&&(n.push(u),u="");var y=null!=d&&null!=h&&h!==d,b="+"===m||"*"===m,R="?"===m||"*"===m,k=d||l,$=v||w,T=d||("string"==typeof n[n.length-1]?n[n.length-1]:"");n.push({name:x||i++,prefix:d||"",delimiter:k,optional:R,repeat:b,partial:y,asterisk:!!E,pattern:$?c($):E?".*":p(k,T)})}}return a<e.length&&(u+=e.substr(a)),u&&n.push(u),n}function p(e,t){return!t||t.indexOf(e)>-1?"[^"+l(e)+"]+?":l(t)+"|(?:(?!"+l(t)+")[^"+l(e)+"])+?"}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function u(e,t){for(var r=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(r[o]=new RegExp("^(?:"+e[o].pattern+")$",s(t)));return function(t,o){for(var i="",p=t||{},u=(o||{}).pretty?a:encodeURIComponent,l=0;l<e.length;l++){var c=e[l];if("string"!=typeof c){var f,s=p[c.name];if(null==s){if(c.optional){c.partial&&(i+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(n(s)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(s)+"`");if(0===s.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var g=0;g<s.length;g++){if(f=u(s[g]),!r[l].test(f))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(f)+"`");i+=(0===g?c.prefix:c.delimiter)+f}}else{if(f=c.asterisk?encodeURI(s).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):u(s),!r[l].test(f))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+f+'"');i+=c.prefix+f}}else i+=c}return i}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function f(e,t){return e.keys=t,e}function s(e){return e&&e.sensitive?"":"i"}function g(e,t,r){n(t)||(r=t||r,t=[]);for(var o=(r=r||{}).strict,i=!1!==r.end,p="",a=0;a<e.length;a++){var u=e[a];if("string"==typeof u)p+=l(u);else{var c=l(u.prefix),g="(?:"+u.pattern+")";t.push(u),u.repeat&&(g+="(?:"+c+g+")*"),p+=g=u.optional?u.partial?c+"("+g+")?":"(?:"+c+"("+g+"))?":c+"("+g+")"}}var h=l(r.delimiter||"/"),d=p.slice(-h.length)===h;return o||(p=(d?p.slice(0,-h.length):p)+"(?:"+h+"(?=$))?"),p+=i?"$":o&&d?"":"(?="+h+"|$)",f(new RegExp("^"+p,s(r)),t)}function h(e,t,r){return n(t)||(r=t||r,t=[]),r=r||{},e instanceof RegExp?function(e,t){var r=e.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)t.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return f(e,t)}(e,t):n(e)?function(e,t,r){for(var n=[],o=0;o<e.length;o++)n.push(h(e[o],t,r).source);return f(new RegExp("(?:"+n.join("|")+")",s(r)),t)}(e,t,r):function(e,t,r){return g(i(e,r),t,r)}(e,t,r)}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIl0sIm5hbWVzIjpbImlzYXJyYXkiLCJtb2R1bGUiLCJleHBvcnRzIiwicGF0aFRvUmVnZXhwIiwicGFyc2UiLCJjb21waWxlIiwic3RyIiwib3B0aW9ucyIsInRva2Vuc1RvRnVuY3Rpb24iLCJ0b2tlbnNUb1JlZ0V4cCIsIlBBVEhfUkVHRVhQIiwiUmVnRXhwIiwiam9pbiIsInJlcyIsInRva2VucyIsImtleSIsImluZGV4IiwicGF0aCIsImRlZmF1bHREZWxpbWl0ZXIiLCJkZWxpbWl0ZXIiLCJleGVjIiwibSIsImVzY2FwZWQiLCJvZmZzZXQiLCJzbGljZSIsImxlbmd0aCIsIm5leHQiLCJwcmVmaXgiLCJuYW1lIiwiY2FwdHVyZSIsImdyb3VwIiwibW9kaWZpZXIiLCJhc3RlcmlzayIsInB1c2giLCJwYXJ0aWFsIiwicmVwZWF0Iiwib3B0aW9uYWwiLCJwYXR0ZXJuIiwicHJldlRleHQiLCJlc2NhcGVHcm91cCIsInJlc3RyaWN0QmFja3RyYWNrIiwic3Vic3RyIiwiaW5kZXhPZiIsImVzY2FwZVN0cmluZyIsImVuY29kZVVSSUNvbXBvbmVudFByZXR0eSIsImVuY29kZVVSSSIsInJlcGxhY2UiLCJjIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwidG9VcHBlckNhc2UiLCJtYXRjaGVzIiwiQXJyYXkiLCJpIiwiZmxhZ3MiLCJvYmoiLCJvcHRzIiwiZGF0YSIsImVuY29kZSIsInByZXR0eSIsImVuY29kZVVSSUNvbXBvbmVudCIsInRva2VuIiwic2VnbWVudCIsInZhbHVlIiwiVHlwZUVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImoiLCJ0ZXN0IiwiYXR0YWNoS2V5cyIsInJlIiwia2V5cyIsInNlbnNpdGl2ZSIsInN0cmljdCIsImVuZCIsInJvdXRlIiwiZW5kc1dpdGhEZWxpbWl0ZXIiLCJncm91cHMiLCJzb3VyY2UiLCJtYXRjaCIsInJlZ2V4cFRvUmVnZXhwIiwicGFydHMiLCJhcnJheVRvUmVnZXhwIiwic3RyaW5nVG9SZWdleHAiXSwibWFwcGluZ3MiOiI2RUFBQSxJQUFJQSxFQUFVLEVBQVEsS0FLdEJDLEVBQU9DLFFBQVVDLEVBQ2pCRixFQUFPQyxRQUFRRSxNQUFRQSxFQUN2QkgsRUFBT0MsUUFBUUcsUUErR2YsU0FBa0JDLEVBQUtDLEdBQ3JCLE9BQU9DLEVBQWlCSixFQUFNRSxFQUFLQyxHQUFVQSxJQS9HL0NOLEVBQU9DLFFBQVFNLGlCQUFtQkEsRUFDbENQLEVBQU9DLFFBQVFPLGVBQWlCQSxFQU9oQyxJQUFJQyxFQUFjLElBQUlDLE9BQU8sQ0FHM0IsVUFPQSwwR0FDQUMsS0FBSyxLQUFNLEtBU2IsU0FBU1IsRUFBT0UsRUFBS0MsR0FRbkIsSUFQQSxJQUtJTSxFQUxBQyxFQUFTLEdBQ1RDLEVBQU0sRUFDTkMsRUFBUSxFQUNSQyxFQUFPLEdBQ1BDLEVBQW1CWCxHQUFXQSxFQUFRWSxXQUFhLElBR2YsT0FBaENOLEVBQU1ILEVBQVlVLEtBQUtkLEtBQWUsQ0FDNUMsSUFBSWUsRUFBSVIsRUFBSSxHQUNSUyxFQUFVVCxFQUFJLEdBQ2RVLEVBQVNWLEVBQUlHLE1BS2pCLEdBSkFDLEdBQVFYLEVBQUlrQixNQUFNUixFQUFPTyxHQUN6QlAsRUFBUU8sRUFBU0YsRUFBRUksT0FHZkgsRUFDRkwsR0FBUUssRUFBUSxPQURsQixDQUtBLElBQUlJLEVBQU9wQixFQUFJVSxHQUNYVyxFQUFTZCxFQUFJLEdBQ2JlLEVBQU9mLEVBQUksR0FDWGdCLEVBQVVoQixFQUFJLEdBQ2RpQixFQUFRakIsRUFBSSxHQUNaa0IsRUFBV2xCLEVBQUksR0FDZm1CLEVBQVduQixFQUFJLEdBR2ZJLElBQ0ZILEVBQU9tQixLQUFLaEIsR0FDWkEsRUFBTyxJQUdULElBQUlpQixFQUFvQixNQUFWUCxHQUEwQixNQUFSRCxHQUFnQkEsSUFBU0MsRUFDckRRLEVBQXNCLE1BQWJKLEdBQWlDLE1BQWJBLEVBQzdCSyxFQUF3QixNQUFiTCxHQUFpQyxNQUFiQSxFQUMvQlosRUFBWVEsR0FBVVQsRUFDdEJtQixFQUFVUixHQUFXQyxFQUNyQlEsRUFBV1gsSUFBZ0QsaUJBQTlCYixFQUFPQSxFQUFPVyxPQUFTLEdBQWtCWCxFQUFPQSxFQUFPVyxPQUFTLEdBQUssSUFFdEdYLEVBQU9tQixLQUFLLENBQ1ZMLEtBQU1BLEdBQVFiLElBQ2RZLE9BQVFBLEdBQVUsR0FDbEJSLFVBQVdBLEVBQ1hpQixTQUFVQSxFQUNWRCxPQUFRQSxFQUNSRCxRQUFTQSxFQUNURixXQUFZQSxFQUNaSyxRQUFTQSxFQUFVRSxFQUFZRixHQUFZTCxFQUFXLEtBQU9RLEVBQWtCckIsRUFBV21CLE1BYzlGLE9BVEl0QixFQUFRVixFQUFJbUIsU0FDZFIsR0FBUVgsRUFBSW1DLE9BQU96QixJQUlqQkMsR0FDRkgsRUFBT21CLEtBQUtoQixHQUdQSCxFQUdULFNBQVMwQixFQUFrQnJCLEVBQVdtQixHQUNwQyxPQUFLQSxHQUFZQSxFQUFTSSxRQUFRdkIsSUFBYyxFQUN2QyxLQUFPd0IsRUFBYXhCLEdBQWEsTUFHbkN3QixFQUFhTCxHQUFZLFVBQVlLLEVBQWFMLEdBQVksTUFBUUssRUFBYXhCLEdBQWEsT0FvQnpHLFNBQVN5QixFQUEwQnRDLEdBQ2pDLE9BQU91QyxVQUFVdkMsR0FBS3dDLFFBQVEsV0FBVyxTQUFVQyxHQUNqRCxNQUFPLElBQU1BLEVBQUVDLFdBQVcsR0FBR0MsU0FBUyxJQUFJQyxpQkFtQjlDLFNBQVMxQyxFQUFrQk0sRUFBUVAsR0FLakMsSUFIQSxJQUFJNEMsRUFBVSxJQUFJQyxNQUFNdEMsRUFBT1csUUFHdEI0QixFQUFJLEVBQUdBLEVBQUl2QyxFQUFPVyxPQUFRNEIsSUFDUixpQkFBZHZDLEVBQU91QyxLQUNoQkYsRUFBUUUsR0FBSyxJQUFJMUMsT0FBTyxPQUFTRyxFQUFPdUMsR0FBR2hCLFFBQVUsS0FBTWlCLEVBQU0vQyxLQUlyRSxPQUFPLFNBQVVnRCxFQUFLQyxHQU1wQixJQUxBLElBQUl2QyxFQUFPLEdBQ1B3QyxFQUFPRixHQUFPLEdBRWRHLEdBRFVGLEdBQVEsSUFDREcsT0FBU2YsRUFBMkJnQixtQkFFaERQLEVBQUksRUFBR0EsRUFBSXZDLEVBQU9XLE9BQVE0QixJQUFLLENBQ3RDLElBQUlRLEVBQVEvQyxFQUFPdUMsR0FFbkIsR0FBcUIsaUJBQVZRLEVBQVgsQ0FNQSxJQUNJQyxFQURBQyxFQUFRTixFQUFLSSxFQUFNakMsTUFHdkIsR0FBYSxNQUFUbUMsRUFBZSxDQUNqQixHQUFJRixFQUFNekIsU0FBVSxDQUVkeUIsRUFBTTNCLFVBQ1JqQixHQUFRNEMsRUFBTWxDLFFBR2hCLFNBRUEsTUFBTSxJQUFJcUMsVUFBVSxhQUFlSCxFQUFNakMsS0FBTyxtQkFJcEQsR0FBSTVCLEVBQVErRCxHQUFaLENBQ0UsSUFBS0YsRUFBTTFCLE9BQ1QsTUFBTSxJQUFJNkIsVUFBVSxhQUFlSCxFQUFNakMsS0FBTyxrQ0FBb0NxQyxLQUFLQyxVQUFVSCxHQUFTLEtBRzlHLEdBQXFCLElBQWpCQSxFQUFNdEMsT0FBYyxDQUN0QixHQUFJb0MsRUFBTXpCLFNBQ1IsU0FFQSxNQUFNLElBQUk0QixVQUFVLGFBQWVILEVBQU1qQyxLQUFPLHFCQUlwRCxJQUFLLElBQUl1QyxFQUFJLEVBQUdBLEVBQUlKLEVBQU10QyxPQUFRMEMsSUFBSyxDQUdyQyxHQUZBTCxFQUFVSixFQUFPSyxFQUFNSSxLQUVsQmhCLEVBQVFFLEdBQUdlLEtBQUtOLEdBQ25CLE1BQU0sSUFBSUUsVUFBVSxpQkFBbUJILEVBQU1qQyxLQUFPLGVBQWlCaUMsRUFBTXhCLFFBQVUsb0JBQXNCNEIsS0FBS0MsVUFBVUosR0FBVyxLQUd2STdDLElBQWUsSUFBTmtELEVBQVVOLEVBQU1sQyxPQUFTa0MsRUFBTTFDLFdBQWEyQyxPQXBCekQsQ0E0QkEsR0FGQUEsRUFBVUQsRUFBTTdCLFNBNUViYSxVQTRFdUNrQixHQTVFeEJqQixRQUFRLFNBQVMsU0FBVUMsR0FDL0MsTUFBTyxJQUFNQSxFQUFFQyxXQUFXLEdBQUdDLFNBQVMsSUFBSUMsaUJBMkVXUSxFQUFPSyxJQUVyRFosRUFBUUUsR0FBR2UsS0FBS04sR0FDbkIsTUFBTSxJQUFJRSxVQUFVLGFBQWVILEVBQU1qQyxLQUFPLGVBQWlCaUMsRUFBTXhCLFFBQVUsb0JBQXNCeUIsRUFBVSxLQUduSDdDLEdBQVE0QyxFQUFNbEMsT0FBU21DLFFBckRyQjdDLEdBQVE0QyxFQXdEWixPQUFPNUMsR0FVWCxTQUFTMEIsRUFBY3JDLEdBQ3JCLE9BQU9BLEVBQUl3QyxRQUFRLDZCQUE4QixRQVNuRCxTQUFTUCxFQUFhVCxHQUNwQixPQUFPQSxFQUFNZ0IsUUFBUSxnQkFBaUIsUUFVeEMsU0FBU3VCLEVBQVlDLEVBQUlDLEdBRXZCLE9BREFELEVBQUdDLEtBQU9BLEVBQ0hELEVBU1QsU0FBU2hCLEVBQU8vQyxHQUNkLE9BQU9BLEdBQVdBLEVBQVFpRSxVQUFZLEdBQUssSUF3RTdDLFNBQVMvRCxFQUFnQkssRUFBUXlELEVBQU1oRSxHQUNoQ1AsRUFBUXVFLEtBQ1hoRSxFQUFrQ2dFLEdBQVFoRSxFQUMxQ2dFLEVBQU8sSUFVVCxJQUxBLElBQUlFLEdBRkpsRSxFQUFVQSxHQUFXLElBRUFrRSxPQUNqQkMsR0FBc0IsSUFBaEJuRSxFQUFRbUUsSUFDZEMsRUFBUSxHQUdIdEIsRUFBSSxFQUFHQSxFQUFJdkMsRUFBT1csT0FBUTRCLElBQUssQ0FDdEMsSUFBSVEsRUFBUS9DLEVBQU91QyxHQUVuQixHQUFxQixpQkFBVlEsRUFDVGMsR0FBU2hDLEVBQWFrQixPQUNqQixDQUNMLElBQUlsQyxFQUFTZ0IsRUFBYWtCLEVBQU1sQyxRQUM1QkUsRUFBVSxNQUFRZ0MsRUFBTXhCLFFBQVUsSUFFdENrQyxFQUFLdEMsS0FBSzRCLEdBRU5BLEVBQU0xQixTQUNSTixHQUFXLE1BQVFGLEVBQVNFLEVBQVUsTUFheEM4QyxHQU5JOUMsRUFKQWdDLEVBQU16QixTQUNIeUIsRUFBTTNCLFFBR0NQLEVBQVMsSUFBTUUsRUFBVSxLQUZ6QixNQUFRRixFQUFTLElBQU1FLEVBQVUsTUFLbkNGLEVBQVMsSUFBTUUsRUFBVSxLQU96QyxJQUFJVixFQUFZd0IsRUFBYXBDLEVBQVFZLFdBQWEsS0FDOUN5RCxFQUFvQkQsRUFBTW5ELE9BQU9MLEVBQVVNLFVBQVlOLEVBa0IzRCxPQVpLc0QsSUFDSEUsR0FBU0MsRUFBb0JELEVBQU1uRCxNQUFNLEdBQUlMLEVBQVVNLFFBQVVrRCxHQUFTLE1BQVF4RCxFQUFZLFdBSTlGd0QsR0FERUQsRUFDTyxJQUlBRCxHQUFVRyxFQUFvQixHQUFLLE1BQVF6RCxFQUFZLE1BRzNEa0QsRUFBVyxJQUFJMUQsT0FBTyxJQUFNZ0UsRUFBT3JCLEVBQU0vQyxJQUFXZ0UsR0FlN0QsU0FBU3BFLEVBQWNjLEVBQU1zRCxFQUFNaEUsR0FRakMsT0FQS1AsRUFBUXVFLEtBQ1hoRSxFQUFrQ2dFLEdBQVFoRSxFQUMxQ2dFLEVBQU8sSUFHVGhFLEVBQVVBLEdBQVcsR0FFakJVLGFBQWdCTixPQWxKdEIsU0FBeUJNLEVBQU1zRCxHQUU3QixJQUFJTSxFQUFTNUQsRUFBSzZELE9BQU9DLE1BQU0sYUFFL0IsR0FBSUYsRUFDRixJQUFLLElBQUl4QixFQUFJLEVBQUdBLEVBQUl3QixFQUFPcEQsT0FBUTRCLElBQ2pDa0IsRUFBS3RDLEtBQUssQ0FDUkwsS0FBTXlCLEVBQ04xQixPQUFRLEtBQ1JSLFVBQVcsS0FDWGlCLFVBQVUsRUFDVkQsUUFBUSxFQUNSRCxTQUFTLEVBQ1RGLFVBQVUsRUFDVkssUUFBUyxPQUtmLE9BQU9nQyxFQUFXcEQsRUFBTXNELEdBZ0lmUyxDQUFlL0QsRUFBNEIsR0FHaERqQixFQUFRaUIsR0F4SGQsU0FBd0JBLEVBQU1zRCxFQUFNaEUsR0FHbEMsSUFGQSxJQUFJMEUsRUFBUSxHQUVINUIsRUFBSSxFQUFHQSxFQUFJcEMsRUFBS1EsT0FBUTRCLElBQy9CNEIsRUFBTWhELEtBQUs5QixFQUFhYyxFQUFLb0MsR0FBSWtCLEVBQU1oRSxHQUFTdUUsUUFLbEQsT0FBT1QsRUFGTSxJQUFJMUQsT0FBTyxNQUFRc0UsRUFBTXJFLEtBQUssS0FBTyxJQUFLMEMsRUFBTS9DLElBRW5DZ0UsR0FnSGpCVyxDQUFvQyxFQUE4QixFQUFRM0UsR0FyR3JGLFNBQXlCVSxFQUFNc0QsRUFBTWhFLEdBQ25DLE9BQU9FLEVBQWVMLEVBQU1hLEVBQU1WLEdBQVVnRSxFQUFNaEUsR0F1RzNDNEUsQ0FBcUMsRUFBOEIsRUFBUTVFIiwiZmlsZSI6Im5wbS5wYXRoLXRvLXJlZ2V4cC40MWIwYjdkMmIyMTAzZjQ0YzJjNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc2FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbi8qKlxuICogRXhwb3NlIGBwYXRoVG9SZWdleHBgLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGhUb1JlZ2V4cFxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGVcbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXG5tb2R1bGUuZXhwb3J0cy50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXG5cbi8qKlxuICogVGhlIG1haW4gcGF0aCBtYXRjaGluZyByZWdleHAgdXRpbGl0eS5cbiAqXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG52YXIgUEFUSF9SRUdFWFAgPSBuZXcgUmVnRXhwKFtcbiAgLy8gTWF0Y2ggZXNjYXBlZCBjaGFyYWN0ZXJzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGFwcGVhciBpbiBmdXR1cmUgbWF0Y2hlcy5cbiAgLy8gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IHdvbid0IHRyYW5zZm9ybS5cbiAgJyhcXFxcXFxcXC4pJyxcbiAgLy8gTWF0Y2ggRXhwcmVzcy1zdHlsZSBwYXJhbWV0ZXJzIGFuZCB1bi1uYW1lZCBwYXJhbWV0ZXJzIHdpdGggYSBwcmVmaXhcbiAgLy8gYW5kIG9wdGlvbmFsIHN1ZmZpeGVzLiBNYXRjaGVzIGFwcGVhciBhczpcbiAgLy9cbiAgLy8gXCIvOnRlc3QoXFxcXGQrKT9cIiA9PiBbXCIvXCIsIFwidGVzdFwiLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCBcIj9cIiwgdW5kZWZpbmVkXVxuICAvLyBcIi9yb3V0ZShcXFxcZCspXCIgID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gIC8vIFwiLypcIiAgICAgICAgICAgID0+IFtcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIipcIl1cbiAgJyhbXFxcXC8uXSk/KD86KD86XFxcXDooXFxcXHcrKSg/OlxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKShbKyo/XSk/fChcXFxcKikpJ1xuXS5qb2luKCd8JyksICdnJylcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdXG4gIHZhciBrZXkgPSAwXG4gIHZhciBpbmRleCA9IDBcbiAgdmFyIHBhdGggPSAnJ1xuICB2YXIgZGVmYXVsdERlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XVxuICAgIHZhciBwcmVmaXggPSByZXNbMl1cbiAgICB2YXIgbmFtZSA9IHJlc1szXVxuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdXG4gICAgdmFyIGdyb3VwID0gcmVzWzVdXG4gICAgdmFyIG1vZGlmaWVyID0gcmVzWzZdXG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddXG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKVxuICAgICAgcGF0aCA9ICcnXG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4XG4gICAgdmFyIHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIHZhciBkZWxpbWl0ZXIgPSBwcmVmaXggfHwgZGVmYXVsdERlbGltaXRlclxuICAgIHZhciBwYXR0ZXJuID0gY2FwdHVyZSB8fCBncm91cFxuICAgIHZhciBwcmV2VGV4dCA9IHByZWZpeCB8fCAodHlwZW9mIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnID8gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA6ICcnKVxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgIHByZWZpeDogcHJlZml4IHx8ICcnLFxuICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICByZXBlYXQ6IHJlcGVhdCxcbiAgICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgICBhc3RlcmlzazogISFhc3RlcmlzayxcbiAgICAgIHBhdHRlcm46IHBhdHRlcm4gPyBlc2NhcGVHcm91cChwYXR0ZXJuKSA6IChhc3RlcmlzayA/ICcuKicgOiByZXN0cmljdEJhY2t0cmFjayhkZWxpbWl0ZXIsIHByZXZUZXh0KSlcbiAgICB9KVxuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KVxuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG5mdW5jdGlvbiByZXN0cmljdEJhY2t0cmFjayhkZWxpbWl0ZXIsIHByZXZUZXh0KSB7XG4gIGlmICghcHJldlRleHQgfHwgcHJldlRleHQuaW5kZXhPZihkZWxpbWl0ZXIpID4gLTEpIHtcbiAgICByZXR1cm4gJ1teJyArIGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpICsgJ10rPydcbiAgfVxuXG4gIHJldHVybiBlc2NhcGVTdHJpbmcocHJldlRleHQpICsgJ3woPzooPyEnICsgZXNjYXBlU3RyaW5nKHByZXZUZXh0KSArICcpW14nICsgZXNjYXBlU3RyaW5nKGRlbGltaXRlcikgKyAnXSkrPydcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFmdW5jdGlvbihPYmplY3Q9LCBPYmplY3Q9KX1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0ciwgb3B0aW9ucyksIG9wdGlvbnMpXG59XG5cbi8qKlxuICogUHJldHRpZXIgZW5jb2Rpbmcgb2YgVVJJIHBhdGggc2VnbWVudHMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvW1xcLz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgdGhlIGFzdGVyaXNrIHBhcmFtZXRlci4gU2ltaWxhciB0byBgcHJldHR5YCwgYnV0IGFsbG93cyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlQXN0ZXJpc2sgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBtZXRob2QgZm9yIHRyYW5zZm9ybWluZyB0b2tlbnMgaW50byB0aGUgcGF0aCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9GdW5jdGlvbiAodG9rZW5zLCBvcHRpb25zKSB7XG4gIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICB2YXIgbWF0Y2hlcyA9IG5ldyBBcnJheSh0b2tlbnMubGVuZ3RoKVxuXG4gIC8vIENvbXBpbGUgYWxsIHRoZSBwYXR0ZXJucyBiZWZvcmUgY29tcGlsYXRpb24uXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0b2tlbnNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBtYXRjaGVzW2ldID0gbmV3IFJlZ0V4cCgnXig/OicgKyB0b2tlbnNbaV0ucGF0dGVybiArICcpJCcsIGZsYWdzKG9wdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgdmFyIHBhdGggPSAnJ1xuICAgIHZhciBkYXRhID0gb2JqIHx8IHt9XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9XG4gICAgdmFyIGVuY29kZSA9IG9wdGlvbnMucHJldHR5ID8gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IDogZW5jb2RlVVJJQ29tcG9uZW50XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhdGggKz0gdG9rZW5cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW3Rva2VuLm5hbWVdXG4gICAgICB2YXIgc2VnbWVudFxuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAvLyBQcmVwZW5kIHBhcnRpYWwgc2VnbWVudCBwcmVmaXhlcy5cbiAgICAgICAgICBpZiAodG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXhcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gYmUgZGVmaW5lZCcpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzYXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlmICghdG9rZW4ucmVwZWF0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgcmVwZWF0LCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnYCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0pXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkoc2VnbWVudCkgKyAnYCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aCArPSAoaiA9PT0gMCA/IHRva2VuLnByZWZpeCA6IHRva2VuLmRlbGltaXRlcikgKyBzZWdtZW50XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50ID0gdG9rZW4uYXN0ZXJpc2sgPyBlbmNvZGVBc3Rlcmlzayh2YWx1ZSkgOiBlbmNvZGUodmFsdWUpXG5cbiAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgfVxuXG4gICAgICBwYXRoICs9IHRva2VuLnByZWZpeCArIHNlZ21lbnRcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFxuICB9XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18XFwvXFxcXF0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEVzY2FwZSB0aGUgY2FwdHVyaW5nIGdyb3VwIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgbWVhbmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGdyb3VwXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUdyb3VwIChncm91cCkge1xuICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokXFwvKCldKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGtleXMgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhdHRhY2hLZXlzIChyZSwga2V5cykge1xuICByZS5rZXlzID0ga2V5c1xuICByZXR1cm4gcmVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZsYWdzIGZvciBhIHJlZ2V4cCBmcm9tIHRoZSBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmbGFncyAob3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLnNlbnNpdGl2ZSA/ICcnIDogJ2knXG59XG5cbi8qKlxuICogUHVsbCBvdXQga2V5cyBmcm9tIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvUmVnZXhwIChwYXRoLCBrZXlzKSB7XG4gIC8vIFVzZSBhIG5lZ2F0aXZlIGxvb2thaGVhZCB0byBtYXRjaCBvbmx5IGNhcHR1cmluZyBncm91cHMuXG4gIHZhciBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKVxuXG4gIGlmIChncm91cHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgbmFtZTogaSxcbiAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICBkZWxpbWl0ZXI6IG51bGwsXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIGFzdGVyaXNrOiBmYWxzZSxcbiAgICAgICAgcGF0dGVybjogbnVsbFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhwYXRoLCBrZXlzKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gIHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnRzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKHBhdGhUb1JlZ2V4cChwYXRoW2ldLCBrZXlzLCBvcHRpb25zKS5zb3VyY2UpXG4gIH1cblxuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86JyArIHBhcnRzLmpvaW4oJ3wnKSArICcpJywgZmxhZ3Mob3B0aW9ucykpXG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocmVnZXhwLCBrZXlzKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb1JlZ0V4cChwYXJzZShwYXRoLCBvcHRpb25zKSwga2V5cywgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gICAgICAgICAgdG9rZW5zXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19IGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdFeHAgKHRva2Vucywga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKVxuICAgIGtleXMgPSBbXVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3RcbiAgdmFyIGVuZCA9IG9wdGlvbnMuZW5kICE9PSBmYWxzZVxuICB2YXIgcm91dGUgPSAnJ1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgdG9rZW5zIGFuZCBjcmVhdGUgb3VyIHJlZ2V4cCBzdHJpbmcuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgcm91dGUgKz0gZXNjYXBlU3RyaW5nKHRva2VuKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlZml4ID0gZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeClcbiAgICAgIHZhciBjYXB0dXJlID0gJyg/OicgKyB0b2tlbi5wYXR0ZXJuICsgJyknXG5cbiAgICAgIGtleXMucHVzaCh0b2tlbilcblxuICAgICAgaWYgKHRva2VuLnJlcGVhdCkge1xuICAgICAgICBjYXB0dXJlICs9ICcoPzonICsgcHJlZml4ICsgY2FwdHVyZSArICcpKidcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghdG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgIGNhcHR1cmUgPSAnKD86JyArIHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSk/J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyk/J1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpJ1xuICAgICAgfVxuXG4gICAgICByb3V0ZSArPSBjYXB0dXJlXG4gICAgfVxuICB9XG5cbiAgdmFyIGRlbGltaXRlciA9IGVzY2FwZVN0cmluZyhvcHRpb25zLmRlbGltaXRlciB8fCAnLycpXG4gIHZhciBlbmRzV2l0aERlbGltaXRlciA9IHJvdXRlLnNsaWNlKC1kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gZGVsaW1pdGVyXG5cbiAgLy8gSW4gbm9uLXN0cmljdCBtb2RlIHdlIGFsbG93IGEgc2xhc2ggYXQgdGhlIGVuZCBvZiBtYXRjaC4gSWYgdGhlIHBhdGggdG9cbiAgLy8gbWF0Y2ggYWxyZWFkeSBlbmRzIHdpdGggYSBzbGFzaCwgd2UgcmVtb3ZlIGl0IGZvciBjb25zaXN0ZW5jeS4gVGhlIHNsYXNoXG4gIC8vIGlzIHZhbGlkIGF0IHRoZSBlbmQgb2YgYSBwYXRoIG1hdGNoLCBub3QgaW4gdGhlIG1pZGRsZS4gVGhpcyBpcyBpbXBvcnRhbnRcbiAgLy8gaW4gbm9uLWVuZGluZyBtb2RlLCB3aGVyZSBcIi90ZXN0L1wiIHNob3VsZG4ndCBtYXRjaCBcIi90ZXN0Ly9yb3V0ZVwiLlxuICBpZiAoIXN0cmljdCkge1xuICAgIHJvdXRlID0gKGVuZHNXaXRoRGVsaW1pdGVyID8gcm91dGUuc2xpY2UoMCwgLWRlbGltaXRlci5sZW5ndGgpIDogcm91dGUpICsgJyg/OicgKyBkZWxpbWl0ZXIgKyAnKD89JCkpPydcbiAgfVxuXG4gIGlmIChlbmQpIHtcbiAgICByb3V0ZSArPSAnJCdcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBub24tZW5kaW5nIG1vZGUsIHdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYXMgbXVjaCBhc1xuICAgIC8vIHBvc3NpYmxlIGJ5IHVzaW5nIGEgcG9zaXRpdmUgbG9va2FoZWFkIHRvIHRoZSBlbmQgb3IgbmV4dCBwYXRoIHNlZ21lbnQuXG4gICAgcm91dGUgKz0gc3RyaWN0ICYmIGVuZHNXaXRoRGVsaW1pdGVyID8gJycgOiAnKD89JyArIGRlbGltaXRlciArICd8JCknXG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhuZXcgUmVnRXhwKCdeJyArIHJvdXRlLCBmbGFncyhvcHRpb25zKSksIGtleXMpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoc3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0gICAgICAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucylcbiAgICBrZXlzID0gW11cbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwVG9SZWdleHAocGF0aCwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSlcbiAgfVxuXG4gIGlmIChpc2FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGFycmF5VG9SZWdleHAoLyoqIEB0eXBlIHshQXJyYXl9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdUb1JlZ2V4cCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==