(()=>{var e={170:(e,t,r)=>{"use strict";var n=r(6440);function o(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function i(e,t){this._pairs=[],e&&n(e,this,t)}var s=i.prototype;s.append=function(e,t){this._pairs.push([e,t])},s.toString=function(e){var t=e?function(t){return e.call(this,t,o)}:o;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")},e.exports=i},243:e=>{"use strict";e.exports=FormData},786:(e,t,r)=>{e.exports=r(1894)},1111:e=>{"use strict";const t=new Set(["ENOTFOUND","ENETUNREACH","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_CRL","UNABLE_TO_DECRYPT_CERT_SIGNATURE","UNABLE_TO_DECRYPT_CRL_SIGNATURE","UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY","CERT_SIGNATURE_FAILURE","CRL_SIGNATURE_FAILURE","CERT_NOT_YET_VALID","CERT_HAS_EXPIRED","CRL_NOT_YET_VALID","CRL_HAS_EXPIRED","ERROR_IN_CERT_NOT_BEFORE_FIELD","ERROR_IN_CERT_NOT_AFTER_FIELD","ERROR_IN_CRL_LAST_UPDATE_FIELD","ERROR_IN_CRL_NEXT_UPDATE_FIELD","OUT_OF_MEM","DEPTH_ZERO_SELF_SIGNED_CERT","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","UNABLE_TO_VERIFY_LEAF_SIGNATURE","CERT_CHAIN_TOO_LONG","CERT_REVOKED","INVALID_CA","PATH_LENGTH_EXCEEDED","INVALID_PURPOSE","CERT_UNTRUSTED","CERT_REJECTED","HOSTNAME_MISMATCH"]);e.exports=e=>!t.has(e&&e.code)},1894:e=>{"use strict";e.exports="object"==typeof self?self.FormData:window.FormData},2002:(e,t,r)=>{"use strict";var n=r(170);e.exports="undefined"!=typeof URLSearchParams?URLSearchParams:n},2012:(e,t,r)=>{"use strict";var n=r(9516),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,i,s={};return e?(n.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=n.trim(e.slice(0,i)).toLowerCase(),r=n.trim(e.slice(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([r]):s[t]?s[t]+", "+r:r}})),s):s}},2505:(e,t,r)=>{e.exports=r(8015)},2881:(e,t,r)=>{"use strict";var n=r(9516),o=r(7412);e.exports=function(e,t,r,i){var s=this||o;return n.forEach(i,(function(n){e=n.call(s,e,t,r)})),e}},3191:(e,t,r)=>{"use strict";var n=r(8563);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){for(var t=r._listeners.length;t-- >0;)r._listeners[t](e);r._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,o,i){r.reason||(r.reason=new n(e,o,i),t(r.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},o.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},3471:(e,t,r)=>{"use strict";var n=r(9516);function o(){this.handlers=[]}o.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.clear=function(){this.handlers&&(this.handlers=[])},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},3864:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},3948:(e,t,r)=>{"use strict";var n=r(9516);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),n.isString(o)&&a.push("path="+o),n.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},4202:(e,t,r)=>{"use strict";var n=r(9516);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function o(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=o(window.location.href),function(t){var r=n.isString(t)?o(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},4298:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e){function t(e,r,o,i){var s=e[i++];if("__proto__"===s)return!0;var a=Number.isFinite(+s),u=i>=e.length;return s=!s&&n.isArray(o)?o.length:s,u?(n.hasOwnProperty(o,s)?o[s]=[o[s],r]:o[s]=r,!a):(o[s]&&n.isObject(o[s])||(o[s]=[]),t(e,r,o[s],i)&&n.isArray(o[s])&&(o[s]=function(e){var t,r,n={},o=Object.keys(e),i=o.length;for(t=0;t{"use strict";var n=r(9516),o=r(2881),i=r(3864),s=r(7412),a=r(8563),u=r(7018);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,null,e.transformRequest),u(e.headers,"Accept"),u(e.headers,"Content-Type"),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||s.adapter)(e).then((function(t){return c(e),t.data=o.call(e,t.data,t.headers,t.status,e.transformResponse),t}),(function(t){return i(t)||(c(e),t&&t.response&&(t.response.data=o.call(e,t.response.data,t.response.headers,t.response.status,e.transformResponse))),Promise.reject(t)}))}},4680:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}},4841:(e,t,r)=>{"use strict";var n=r(9641).version,o=r(5845),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,r){function i(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,a){if(!1===e)throw new o(i(n," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[n]&&(s[n]=!0,console.warn(i(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,a)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),i=n.length;i-- >0;){var s=n[i],a=t[s];if(a){var u=e[s],c=void 0===u||a(u,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},4896:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},5019:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},5155:(e,t,r)=>{"use strict";var n=r(9516),o=r(9106),i=r(3471),s=r(4490),a=r(5343),u=r(9615),c=r(4841),f=c.validators;function l(e){this.defaults=e,this.interceptors={request:new i,response:new i}}l.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&c.assertOptions(r,{silentJSONParsing:f.transitional(f.boolean),forcedJSONParsing:f.transitional(f.boolean),clarifyTimeoutError:f.transitional(f.boolean)},!1);var o=t.paramsSerializer;null!=o&&(n.isFunction(o)?t.paramsSerializer={serialize:o}:c.assertOptions(o,{encode:f.function,serialize:f.function},!0));var i=[],u=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));var l,d=[];if(this.interceptors.response.forEach((function(e){d.push(e.fulfilled,e.rejected)})),!u){var p=[s,void 0];for(Array.prototype.unshift.apply(p,i),p=p.concat(d),l=Promise.resolve(t);p.length;)l=l.then(p.shift(),p.shift());return l}for(var h=t;i.length;){var m=i.shift(),y=i.shift();try{h=m(h)}catch(e){y(e);break}}try{l=s(h)}catch(e){return Promise.reject(e)}for(;d.length;)l=l.then(d.shift(),d.shift());return l},l.prototype.getUri=function(e){e=a(this.defaults,e);var t=u(e.baseURL,e.url,e.allowAbsoluteUrls);return o(t,e.params,e.paramsSerializer)},n.forEach(["delete","get","head","options"],(function(e){l.prototype[e]=function(t,r){return this.request(a(r||{},{method:e,url:t,data:(r||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,o){return this.request(a(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}l.prototype[e]=t(),l.prototype[e+"Form"]=t(!0)})),e.exports=l},5343:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e,t){t=t||{};var r={};function o(e,t){return n.isPlainObject(e)&&n.isPlainObject(t)?n.merge(e,t):n.isEmptyObject(t)?n.merge({},e):n.isPlainObject(t)?n.merge({},t):n.isArray(t)?t.slice():t}function i(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:o(void 0,e[r]):o(e[r],t[r])}function s(e){if(!n.isUndefined(t[e]))return o(void 0,t[e])}function a(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:o(void 0,e[r]):o(void 0,t[r])}function u(r){return r in t?o(e[r],t[r]):r in e?o(void 0,e[r]):void 0}var c={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:u};return n.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||i,o=t(e);n.isUndefined(o)&&t!==u||(r[e]=o)})),r}},5592:(e,t,r)=>{"use strict";var n=r(9516),o=r(7522),i=r(3948),s=r(9106),a=r(9615),u=r(2012),c=r(4202),f=r(4896),l=r(5845),d=r(8563),p=r(5656),h=r(5721);e.exports=function(e){return new Promise((function(t,r){var m,y=e.data,v=e.headers,w=e.responseType,E=e.withXSRFToken;function b(){e.cancelToken&&e.cancelToken.unsubscribe(m),e.signal&&e.signal.removeEventListener("abort",m)}n.isFormData(y)&&n.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var R=e.auth.username||"",T=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(R+":"+T)}var _=a(e.baseURL,e.url,e.allowAbsoluteUrls);function x(){if(g){var n="getAllResponseHeaders"in g?u(g.getAllResponseHeaders()):null,i={data:w&&"text"!==w&&"json"!==w?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g};o((function(e){t(e),b()}),(function(e){r(e),b()}),i),g=null}}if(g.open(e.method.toUpperCase(),s(_,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=x:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(x)},g.onabort=function(){g&&(r(new l("Request aborted",l.ECONNABORTED,e,g)),g=null)},g.onerror=function(){r(new l("Network Error",l.ERR_NETWORK,e,g)),g=null},g.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new l(t,n.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,g)),g=null},n.isStandardBrowserEnv()&&(E&&n.isFunction(E)&&(E=E(e)),E||!1!==E&&c(_))){var O=e.xsrfHeaderName&&e.xsrfCookieName&&i.read(e.xsrfCookieName);O&&(v[e.xsrfHeaderName]=O)}"setRequestHeader"in g&&n.forEach(v,(function(e,t){void 0===y&&"content-type"===t.toLowerCase()?delete v[t]:g.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),w&&"json"!==w&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(m=function(t){g&&(r(!t||t.type?new d(null,e,g):t),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(m),e.signal&&(e.signal.aborted?m():e.signal.addEventListener("abort",m))),y||!1===y||0===y||""===y||(y=null);var A=p(_);A&&-1===h.protocols.indexOf(A)?r(new l("Unsupported protocol "+A+":",l.ERR_BAD_REQUEST,e)):g.send(y)}))}},5656:e=>{"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},5721:(e,t,r)=>{"use strict";e.exports=r(9490)},5845:(e,t,r)=>{"use strict";var n=r(9516);function o(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}n.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var i=o.prototype,s={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){s[e]={value:e}})),Object.defineProperties(o,s),Object.defineProperty(i,"isAxiosError",{value:!0}),o.from=function(e,t,r,s,a,u){var c=Object.create(i);return n.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,r,s,a),c.cause=e,c.name=e.name,u&&Object.assign(c,u),c},e.exports=o},6069:(e,t,r)=>{"use strict";var n=r(9516),o=r(6440),i=r(5721);e.exports=function(e,t){return o(e,new i.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,o){return i.isNode&&n.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}},6440:(e,t,r)=>{"use strict";var n=r(9516),o=r(5845),i=r(786);function s(e){return n.isPlainObject(e)||n.isArray(e)}function a(e){return n.endsWith(e,"[]")?e.slice(0,-2):e}function u(e,t,r){return e?e.concat(t).map((function(e,t){return e=a(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}var c=n.toFlatObject(n,{},null,(function(e){return/^is[A-Z]/.test(e)}));e.exports=function(e,t,r){if(!n.isObject(e))throw new TypeError("target must be an object");t=t||new(i||FormData);var f,l=(r=n.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!n.isUndefined(t[e])}))).metaTokens,d=r.visitor||v,p=r.dots,h=r.indexes,m=(r.Blob||"undefined"!=typeof Blob&&Blob)&&((f=t)&&n.isFunction(f.append)&&"FormData"===f[Symbol.toStringTag]&&f[Symbol.iterator]);if(!n.isFunction(d))throw new TypeError("visitor must be a function");function y(e){if(null===e)return"";if(n.isDate(e))return e.toISOString();if(!m&&n.isBlob(e))throw new o("Blob is not supported. Use a Buffer instead.");return n.isArrayBuffer(e)||n.isTypedArray(e)?m&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function v(e,r,o){var i=e;if(e&&!o&&"object"==typeof e)if(n.endsWith(r,"{}"))r=l?r:r.slice(0,-2),e=JSON.stringify(e);else if(n.isArray(e)&&function(e){return n.isArray(e)&&!e.some(s)}(e)||n.isFileList(e)||n.endsWith(r,"[]")&&(i=n.toArray(e)))return r=a(r),i.forEach((function(e,o){!n.isUndefined(e)&&null!==e&&t.append(!0===h?u([r],o,p):null===h?r:r+"[]",y(e))})),!1;return!!s(e)||(t.append(u(o,r,p),y(e)),!1)}var w=[],E=Object.assign(c,{defaultVisitor:v,convertValue:y,isVisitable:s});if(!n.isObject(e))throw new TypeError("data must be an object");return function e(r,o){if(!n.isUndefined(r)){if(-1!==w.indexOf(r))throw Error("Circular reference detected in "+o.join("."));w.push(r),n.forEach(r,(function(r,i){!0===(!(n.isUndefined(r)||null===r)&&d.call(t,r,n.isString(i)?i.trim():i,o,E))&&e(r,o?o.concat(i):[i])})),w.pop()}}(e),t}},7018:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},7412:(e,t,r)=>{"use strict";var n=r(9516),o=r(7018),i=r(5845),s=r(4896),a=r(6440),u=r(6069),c=r(5721),f=r(4298),l={"Content-Type":"application/x-www-form-urlencoded"};function d(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var p,h={transitional:s,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(p=r(5592)),p),transformRequest:[function(e,t){o(t,"Accept"),o(t,"Content-Type");var r,i=t&&t["Content-Type"]||"",s=i.indexOf("application/json")>-1,c=n.isObject(e);if(c&&n.isHTMLForm(e)&&(e=new FormData(e)),n.isFormData(e))return s?JSON.stringify(f(e)):e;if(n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e))return e;if(n.isArrayBufferView(e))return e.buffer;if(n.isURLSearchParams(e))return d(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(c){if(-1!==i.indexOf("application/x-www-form-urlencoded"))return u(e,this.formSerializer).toString();if((r=n.isFileList(e))||i.indexOf("multipart/form-data")>-1){var l=this.env&&this.env.FormData;return a(r?{"files[]":e}:e,l&&new l,this.formSerializer)}}return c||s?(d(t,"application/json"),function(e,t,r){if(n.isString(e))try{return(t||JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||h.transitional,r=t&&t.forcedJSONParsing,o="json"===this.responseType;if(e&&n.isString(e)&&(r&&!this.responseType||o)){var s=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw i.from(e,i.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:c.classes.FormData,Blob:c.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){h.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){h.headers[e]=n.merge(l)})),e.exports=h},7522:(e,t,r)=>{"use strict";var n=r(5845);e.exports=function(e,t,r){var o=r.config.validateStatus;r.status&&o&&!o(r.status)?t(new n("Request failed with status code "+r.status,[n.ERR_BAD_REQUEST,n.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}},7980:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},8015:(e,t,r)=>{"use strict";var n=r(9516),o=r(9012),i=r(5155),s=r(5343),a=r(7412),u=r(4298);var c=function e(t){var r=new i(t),a=o(i.prototype.request,r);return n.extend(a,i.prototype,r),n.extend(a,r),a.create=function(r){return e(s(t,r))},a}(a);c.Axios=i,c.CanceledError=r(8563),c.CancelToken=r(3191),c.isCancel=r(3864),c.VERSION=r(9641).version,c.toFormData=r(6440),c.AxiosError=r(5845),c.Cancel=c.CanceledError,c.all=function(e){return Promise.all(e)},c.spread=r(7980),c.isAxiosError=r(5019),c.formToJSON=function(e){return u(n.isHTMLForm(e)?new FormData(e):e)},e.exports=c,e.exports.default=c},8563:(e,t,r)=>{"use strict";var n=r(5845);function o(e,t,r){n.call(this,null==e?"canceled":e,n.ERR_CANCELED,t,r),this.name="CanceledError"}r(9516).inherits(o,n,{__CANCEL__:!0}),e.exports=o},9012:e=>{"use strict";e.exports=function(e,t){return function(){return e.apply(t,arguments)}}},9106:(e,t,r)=>{"use strict";var n=r(9516),o=r(170);function i(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,r){if(!t)return e;var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s));var a,u=r&&r.encode||i,c=r&&r.serialize;return(a=c?c(t,r):n.isURLSearchParams(t)?t.toString():new o(t,r).toString(u))&&(e+=(-1===e.indexOf("?")?"?":"&")+a),e}},9137:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},9490:(e,t,r)=>{"use strict";e.exports={isBrowser:!0,classes:{URLSearchParams:r(2002),FormData:r(243),Blob},protocols:["http","https","file","blob","url","data"]}},9516:(e,t,r)=>{"use strict";var n,o=r(9012),i=Object.prototype.toString,s=(n=Object.create(null),function(e){var t=i.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())});function a(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function u(e){return Array.isArray(e)}function c(e){return void 0===e}var f=a("ArrayBuffer");function l(e){return"number"==typeof e}function d(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var h=a("Date"),m=a("File"),y=a("Blob"),v=a("FileList");function w(e){return"[object Function]"===i.call(e)}var E=a("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),u(e))for(var r=0,n=e.length;r0;)s=o[i],n&&!n(s,e,t)||a[s]||(t[s]=e[s],a[s]=!0);e=!1!==r&&Object.getPrototypeOf(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;if(u(e))return e;var t=e.length;if(!l(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},isTypedArray:R,isFileList:v,forEachEntry:function(e,t){for(var r,n=(e&&e[Symbol.iterator]).call(e);(r=n.next())&&!r.done;){var o=r.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var r,n=[];null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:_,hasOwnProperty:x}},9615:(e,t,r)=>{"use strict";var n=r(9137),o=r(4680);e.exports=function(e,t,r){var i=!n(t);return e&&(i||!1===r)?o(e,t):t}},9641:e=>{e.exports={version:"0.30.0"}},9797:e=>{var t="undefined"!=typeof process&&process.pid?process.pid.toString(36):"";function r(){var e=Date.now(),t=r.last||e;return r.last=e>t?e:t+1}e.exports=e.exports.default=function(e,n){return(e||"")+""+t+r().toString(36)+(n||"")},e.exports.process=function(e,n){return(e||"")+t+r().toString(36)+(n||"")},e.exports.time=function(e,t){return(e||"")+r().toString(36)+(t||"")}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=r(2505),t=r.n(e),n=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function s(e){try{u(n.next(e))}catch(e){i(e)}}function a(e){try{u(n.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}u((n=n.apply(e,t||[])).next())}))},o=function(e,t){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,n=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=500&&e.response.status<=599)}function L(e){return!!e.config&&(j(e)&&-1!==I.indexOf(e.config.method))}function F(e){return P(e)||L(e)}var k={retries:3,retryCondition:F,retryDelay:function(){return 0},shouldResetTimeout:!1,onRetry:()=>{}};function B(e,t){var r=function(e,t){return C(C(C({},k),t),e[U])}(e,t);return r.retryCount=r.retryCount||0,e[U]=r,r}function M(){return(M=A((function*(e,t){var{retries:r,retryCondition:n}=e,o=e.retryCount(B(e,t).lastRequestTime=Date.now(),e))),n=e.interceptors.response.use(null,function(){var r=A((function*(r){var{config:n}=r;if(!n)return Promise.reject(r);var o=B(n,t);if(yield function(e,t){return M.apply(this,arguments)}(o,r)){o.retryCount+=1;var{retryDelay:i,shouldResetTimeout:s,onRetry:a}=o,u=i(o.retryCount,r);if(function(e,t){e.defaults.agent===t.agent&&delete t.agent,e.defaults.httpAgent===t.httpAgent&&delete t.httpAgent,e.defaults.httpsAgent===t.httpsAgent&&delete t.httpsAgent}(e,n),!s&&n.timeout&&o.lastRequestTime){var c=Date.now()-o.lastRequestTime,f=n.timeout-c-u;if(f<=0)return Promise.reject(r);n.timeout=f}return n.transformRequest=[e=>e],yield a(o.retryCount,r,n),new Promise((t=>setTimeout((()=>t(e(n))),u)))}return Promise.reject(r)}));return function(e){return r.apply(this,arguments)}}());return{requestInterceptorId:r,responseInterceptorId:n}}q.isNetworkError=P,q.isSafeRequestError=function(e){return!!e.config&&(j(e)&&-1!==D.indexOf(e.config.method))},q.isIdempotentRequestError=L,q.isNetworkOrIdempotentRequestError=F,q.exponentialDelay=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100,r=Math.pow(2,e)*t;return r+.2*r*Math.random()},q.isRetryableError=j;const V=function(e){return"undefined"!=typeof window&&window.location.href.includes("cartPERF=true")&&(e.headers["x-aem-load-test"]="true"),e};const H=function(e){return e.xMSVectorId&&(e.headers["X-MS-Vector-Id"]=e.xMSVectorId),e};const X=function(e){var t=h.getCookie("ucs_sid");return t&&(e.headers["x-ms-ucs-sid"]=t),e};var G=function(){function e(){this._client=t().create()}return e.prototype.addCV=function(){return this._client.interceptors.request.use(d),this},e.prototype.addAuthentication=function(){return this._client.interceptors.request.use(u),this},e.prototype.addXAuthMUID=function(){return this._client.interceptors.request.use(m),this},e.prototype.addRiskSessionId=function(){return this._client.interceptors.request.use(v),this},e.prototype.addFirstName=function(){return this._client.interceptors.request.use(w),this},e.prototype.addTentOptions=function(){return this._client.interceptors.request.use(_),this},e.prototype.addXAEMLoadTest=function(){return this._client.interceptors.request.use(V),this},e.prototype.addXMSVectorId=function(){return this._client.interceptors.request.use(H),this},e.prototype.addUcsSid=function(){return this._client.interceptors.request.use(X),this},e.prototype.addRetry=function(e,t){return q(this._client,{retries:e,retryDelay:function(e,r){return t}}),this},e.prototype.build=function(){return this._client},e.RETRIES_COUNT_DEFAULT=3,e.RETRY_TIMEOUT_DEFAULT=50,e}(),J=(new G).addCV().addAuthentication().addXAuthMUID().addRiskSessionId().addRetry(G.RETRIES_COUNT_DEFAULT,G.RETRY_TIMEOUT_DEFAULT).addFirstName().addTentOptions().addXAEMLoadTest().addXMSVectorId().addUcsSid().build(),z=function(){function e(){var e=document.querySelector(".userInfo-config"),t=document.querySelector(".meControl-configInfo"),r=this.isV2Enabled(e),n=this.getUrl(e),o=this.getTimeout(e),i=this.isMeControlEnable(t),s={timeout:o,withCredentials:!0};if(null!==e&&null!==n&&i)if(this._isConfigured=!0,r){var a=document.querySelector(".userInfo-config").getAttribute("data-v2url"),u={timeout:o,withCredentials:!0,params:{ru:"".concat(location.hostname).concat(location.pathname).concat(location.search)}};this._userInfo=(new G).addCV().addRetry(G.RETRIES_COUNT_DEFAULT,G.RETRY_TIMEOUT_DEFAULT).build().get(a,u).then((function(e){return e.data})).catch((function(e){if(!e.code&&!e.response){var t=document.querySelector(".meControl-configInfo").getAttribute("data-signinurl");return location.href="".concat(t,"?ru=").concat(window.location.href),null}}))}else this._userInfo=(new G).addCV().addRetry(G.RETRIES_COUNT_DEFAULT,G.RETRY_TIMEOUT_DEFAULT).build().get(n,s).then((function(e){return e.data}));else this._isConfigured=!1,this._userInfo=Promise.resolve(null)}return e.prototype.getUserInfo=function(){return this._userInfo},e.prototype.getTimeout=function(e){return null==e?null:parseInt(e.getAttribute("data-userinfotimeoutms"))},e.prototype.getUrl=function(e){return null==e?null:e.getAttribute("data-userinfourl")},e.prototype.isV2Enabled=function(e){return null!=e&&"true"===e.getAttribute("data-isV2enabled")},e.prototype.isMeControlEnable=function(e){return null!=e&&"true"===e.getAttribute("data-isenabled")},e.prototype.isConfigured=function(){return this._isConfigured},e.getInstance=function(){return e._instance||(e._instance=new e),e._instance},e}();window.MsHttpClient=window.MsHttpClient||{},window.MsHttpClient.defaultInstance=J,window.MsHttpClient.Builder=G,window.UserInfoSingleton=z})()})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50bGlicy9jbGllbnRsaWItaHR0cGNsaWVudC9qcy9odHRwY2xpZW50Lm1pbi5qcyIsIm1hcHBpbmdzIjoid0NBRUEsSUFBSUEsRUFBYSxFQUFRLE1BRXpCLFNBQVNDLEVBQU9DLEdBQ2QsSUFBSUMsRUFBVSxDQUNaLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsTUFBTyxJQUNQLE1BQU8sTUFFVCxPQUFPQyxtQkFBbUJGLEdBQUtHLFFBQVEsc0JBQXNCLFNBQWtCQyxHQUM3RSxPQUFPSCxFQUFRRyxFQUNqQixHQUNGLENBRUEsU0FBU0MsRUFBcUJDLEVBQVFDLEdBQ3BDQyxLQUFLQyxPQUFTLEdBRWRILEdBQVVSLEVBQVdRLEVBQVFFLEtBQU1ELEVBQ3JDLENBRUEsSUFBSUcsRUFBWUwsRUFBcUJLLFVBRXJDQSxFQUFVQyxPQUFTLFNBQWdCQyxFQUFNQyxHQUN2Q0wsS0FBS0MsT0FBT0ssS0FBSyxDQUFDRixFQUFNQyxHQUMxQixFQUVBSCxFQUFVSyxTQUFXLFNBQWtCQyxHQUNyQyxJQUFJQyxFQUFVRCxFQUFVLFNBQVNILEdBQy9CLE9BQU9HLEVBQVFFLEtBQUtWLEtBQU1LLEVBQU9kLEVBQ25DLEVBQUlBLEVBRUosT0FBT1MsS0FBS0MsT0FBT1UsS0FBSSxTQUFjQyxHQUNuQyxPQUFPSCxFQUFRRyxFQUFLLElBQU0sSUFBTUgsRUFBUUcsRUFBSyxHQUMvQyxHQUFHLElBQUlDLEtBQUssSUFDZCxFQUVBQyxFQUFPQyxRQUFVbEIsQyx1QkN2Q2pCaUIsRUFBT0MsUUFBVUMsUSxnQkNEakJGLEVBQU9DLFFBQVUsRUFBakIsSyx3QkNDQSxNQUFNRSxFQUFXLElBQUlDLElBQUksQ0FDeEIsWUFDQSxjQUdBLDRCQUNBLG9CQUNBLG1DQUNBLGtDQUNBLHFDQUNBLHlCQUNBLHdCQUNBLHFCQUNBLG1CQUNBLG9CQUNBLGtCQUNBLGlDQUNBLGdDQUNBLGlDQUNBLGlDQUNBLGFBQ0EsOEJBQ0EsNEJBQ0Esb0NBQ0Esa0NB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QUNoQixFQUVjLEVBQUFhLFlBQWQsV0FJSSxPQUhLQyxFQUFrQkMsWUFDbkJELEVBQWtCQyxVQUFZLElBQUlELEdBRS9CQSxFQUFrQkMsU0FDN0IsRUFDSixFQWhHQSxHQ1RBdGtCLE9BQU91a0IsYUFBZXZrQixPQUFPdWtCLGNBQWdCLENBQUMsRUFDOUN2a0IsT0FBT3VrQixhQUFhQyxnQkFBa0I3QixFQUN0QzNpQixPQUFPdWtCLGFBQWFFLFFBQVU3QixFQUM5QjVpQixPQUFPcWtCLGtCQUFvQkEsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9pcy1yZXRyeS1hbGxvd2VkL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL3VuaXFpZC9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3JlYWN0LWFwcC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9hdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvblRva2VuSGFuZGxlci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9Db21wYWN0VGlja2V0SGVhZGVySW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9jdi9Nc0NWSGFuZGxlci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9Nc0NWSGVhZGVySW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9oYW5kbGVycy9Db29raWVIYW5kbGVyLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9jb21wb25lbnRzL0NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9YQXV0aE1VSURJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL3V0aWxzL2NvbW1vblV0aWxzLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL1Jpc2tTZXNzaW9uSURHZW5lcmF0b3JJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9GaXJzdE5hbWVIZWFkZXJJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2hhbmRsZXJzL1RlbnRPcHRpb25zSGFuZGxlci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9UZW50T3B0aW9uc0hlYWRlckludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy1yZXRyeS9saWIvZXNtL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL1hBRU1Mb2FkVGVzdEludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL1hNU1ZlY3RvcklkSW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvWE1TVWNzQ29va2llSW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9odHRwQ2xpZW50L0h0dHBDbGllbnRCdWlsZGVyLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaHR0cENsaWVudC9IdHRwQ2xpZW50LnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvdXRpbHMvVXNlckluZm9TaW5nbGV0b24udHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3dlYmNvbXBvbmVudHMvaHR0cC1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vdG9Gb3JtRGF0YScpO1xuXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIHZhciBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJ1xcKFxcKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG52YXIgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIHZhciBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gRm9ybURhdGE7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBkZW55TGlzdCA9IG5ldyBTZXQoW1xuXHQnRU5PVEZPVU5EJyxcblx0J0VORVRVTlJFQUNIJyxcblxuXHQvLyBTU0wgZXJyb3JzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZmM4ZTNlMmNkYzUyMTk3ODM1MWRlMjU3MDMwZGIwMDc2ZDc5ZTBhYi9zcmMvY3J5cHRvL2NyeXB0b19jb21tb24uY2MjTDMwMS1MMzI4XG5cdCdVTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUJyxcblx0J1VOQUJMRV9UT19HRVRfQ1JMJyxcblx0J1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFJyxcblx0J1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkUnLFxuXHQnVU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWScsXG5cdCdDRVJUX1NJR05BVFVSRV9GQUlMVVJFJyxcblx0J0NSTF9TSUdOQVRVUkVfRkFJTFVSRScsXG5cdCdDRVJUX05PVF9ZRVRfVkFMSUQnLFxuXHQnQ0VSVF9IQVNfRVhQSVJFRCcsXG5cdCdDUkxfTk9UX1lFVF9WQUxJRCcsXG5cdCdDUkxfSEFTX0VYUElSRUQnLFxuXHQnRVJST1JfSU5fQ0VSVF9OT1RfQkVGT1JFX0ZJRUxEJyxcblx0J0VSUk9SX0lOX0NFUlRfTk9UX0FGVEVSX0ZJRUxEJyxcblx0J0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9GSUVMRCcsXG5cdCdFUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklFTEQnLFxuXHQnT1VUX09GX01FTScsXG5cdCdERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQnLFxuXHQnU0VMRl9TSUdORURfQ0VSVF9JTl9DSEFJTicsXG5cdCdVTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFknLFxuXHQnVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRScsXG5cdCdDRVJUX0NIQUlOX1RPT19MT05HJyxcblx0J0NFUlRfUkVWT0tFRCcsXG5cdCdJTlZBTElEX0NBJyxcblx0J1BBVEhfTEVOR1RIX0VYQ0VFREVEJyxcblx0J0lOVkFMSURfUFVSUE9TRScsXG5cdCdDRVJUX1VOVFJVU1RFRCcsXG5cdCdDRVJUX1JFSkVDVEVEJyxcblx0J0hPU1ROQU1FX01JU01BVENIJ1xuXSk7XG5cbi8vIFRPRE86IFVzZSBgZXJyb3I/LmNvZGVgIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMTRcbm1vZHVsZS5leHBvcnRzID0gZXJyb3IgPT4gIWRlbnlMaXN0LmhhcyhlcnJvciAmJiBlcnJvci5jb2RlKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYuRm9ybURhdGEgOiB3aW5kb3cuRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBBeGlvc1VSTFNlYXJjaFBhcmFtcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnNsaWNlKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zbGljZShpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzIEhUVFAgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIHN0YXR1cywgZm5zKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb250ZXh0LCBkYXRhLCBoZWFkZXJzLCBzdGF0dXMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9DYW5jZWxlZEVycm9yJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcblxuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihjYW5jZWwpIHtcbiAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgIHZhciBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gICAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICB2YXIgaTtcbiAgdmFyIGxlbiA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgdmFyIG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIHZhciBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIHZhciBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcGVydHkodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgbnVsbCxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIG5vcm1hbGl6ZUhlYWRlck5hbWUoY29uZmlnLmhlYWRlcnMsICdBY2NlcHQnKTtcbiAgbm9ybWFsaXplSGVhZGVyTmFtZShjb25maWcuaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbDtcblxuICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgdmFyIHBhcmFtc1NlcmlhbGl6ZXIgPSBjb25maWcucGFyYW1zU2VyaWFsaXplcjtcblxuICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0VtcHR5T2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgdGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aFhTUkZUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2FkYXB0ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZVR5cGUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmQ29va2llTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25VcGxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uRG93bmxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2RlY29tcHJlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Qm9keUxlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2JlZm9yZVJlZGlyZWN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNwb3J0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cEFnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cHNBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2NhbmNlbFRva2VuJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnc29ja2V0UGF0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlRW5jb2RpbmcnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd2YWxpZGF0ZVN0YXR1cyc6IG1lcmdlRGlyZWN0S2V5c1xuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICB2YXIgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIHZhciBjb25maWdWYWx1ZSA9IG1lcmdlKHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG52YXIgcGxhdGZvcm0gPSByZXF1aXJlKCcuLi9wbGF0Zm9ybScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG4gICAgdmFyIHJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgdmFyIHdpdGhYU1JGVG9rZW4gPSBjb25maWcud2l0aFhTUkZUb2tlbjtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCwgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKGNvbmZpZykpO1xuICAgICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpKSB7XG4gICAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgICB2YXIgeHNyZlZhbHVlID0gY29uZmlnLnhzcmZIZWFkZXJOYW1lICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKTtcbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmFsc2UsIDAgKHplcm8gbnVtYmVyKSwgYW5kICcnIChlbXB0eSBzdHJpbmcpIGFyZSB2YWxpZCBKU09OIHZhbHVlc1xuICAgIGlmICghcmVxdWVzdERhdGEgJiYgcmVxdWVzdERhdGEgIT09IGZhbHNlICYmIHJlcXVlc3REYXRhICE9PSAwICYmIHJlcXVlc3REYXRhICE9PSAnJykge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIHZhciBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGZ1bmN0aW9uKGNvZGUpIHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IGZ1bmN0aW9uKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykge1xuICB2YXIgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi90b0Zvcm1EYXRhJyk7XG52YXIgcGxhdGZvcm0gPSByZXF1aXJlKCcuLi9wbGF0Zm9ybS8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgZW52Rm9ybURhdGEgPSByZXF1aXJlKCcuLi9lbnYvY2xhc3Nlcy9Gb3JtRGF0YScpO1xuXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG52YXIgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50KHRoaW5nKSB7XG4gIHJldHVybiB0aGluZyAmJiB1dGlscy5pc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoZW52Rm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgdmFyIG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICB2YXIgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgdmFyIGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIHZhciBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICB2YXIgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIHZhciB1c2VCbG9iID0gX0Jsb2IgJiYgaXNTcGVjQ29tcGxpYW50KGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICB2YXIgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBzdGFjayA9IFtdO1xuXG4gIHZhciBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yOiBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWU6IGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZTogaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4vdHJhbnNpdGlvbmFsJyk7XG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xudmFyIHRvVVJMRW5jb2RlZEZvcm0gPSByZXF1aXJlKCcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0nKTtcbnZhciBwbGF0Zm9ybSA9IHJlcXVpcmUoJy4uL3BsYXRmb3JtJyk7XG52YXIgZm9ybURhdGFUb0pTT04gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddIHx8ICcnO1xuICAgIHZhciBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICB2YXIgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgdmFyIGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB2YXIgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgdmFyIF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xudmFyIGZvcm1EYXRhVG9KU09OID0gcmVxdWlyZSgnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OJyk7XG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5heGlvcy50b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9saWIvY29yZS9BeGlvc0Vycm9yJyk7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSBmdW5jdGlvbih0aGluZykge1xuICByZXR1cm4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBBeGlvc1VSTFNlYXJjaFBhcmFtcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuXG4gIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgfVxuXG4gIHZhciBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgdmFyIHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zOiByZXF1aXJlKCcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zJyksXG4gICAgRm9ybURhdGE6IHJlcXVpcmUoJy4vY2xhc3Nlcy9Gb3JtRGF0YScpLFxuICAgIEJsb2I6IEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBraW5kT2YgPSAoZnVuY3Rpb24oY2FjaGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5mdW5jdGlvbiBraW5kT2ZUZXN0KHR5cGUpIHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzS2luZE9mKHRoaW5nKSB7XG4gICAgcmV0dXJuIGtpbmRPZih0aGluZykgPT09IHR5cGU7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBlbXB0eSBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgZW1wdHkgT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eU9iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHRoaW5nKSB7XG4gIHZhciBwYXR0ZXJuID0gJ1tvYmplY3QgRm9ybURhdGFdJztcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8XG4gICAgdG9TdHJpbmcuY2FsbCh0aGluZykgPT09IHBhdHRlcm4gfHxcbiAgICAoaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gcGF0dGVybilcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIHZhciBwcm9kdWN0O1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKFxuICAgIChwcm9kdWN0ID0gbmF2aWdhdG9yLnByb2R1Y3QpID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgcHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICBwcm9kdWN0ID09PSAnTlMnKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIHRvRmxhdE9iamVjdChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikge1xuICB2YXIgcHJvcHM7XG4gIHZhciBpO1xuICB2YXIgcHJvcDtcbiAgdmFyIG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLypcbiAqIGRldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIHZhciBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh0aGluZykge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIHZhciBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgdmFyIGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGlzVHlwZWRBcnJheSA9IChmdW5jdGlvbihUeXBlZEFycmF5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG5mdW5jdGlvbiBmb3JFYWNoRW50cnkob2JqLCBmbikge1xuICB2YXIgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIHZhciBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgdmFyIHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgdmFyIHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoQWxsKHJlZ0V4cCwgc3RyKSB7XG4gIHZhciBtYXRjaGVzO1xuICB2YXIgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbnZhciBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IChmdW5jdGlvbiByZXNvbHZlcihfaGFzT3duUHJvcGVydHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgIHJldHVybiBfaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xuICB9O1xufSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNFbXB0eU9iamVjdDogaXNFbXB0eU9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT00sXG4gIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZjoga2luZE9mLFxuICBraW5kT2ZUZXN0OiBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aDogZW5kc1dpdGgsXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0OiBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoRW50cnk6IGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGw6IG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtOiBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eTogaGFzT3duUHJvcGVydHlcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93QWJzb2x1dGVVcmxzIFNldCB0byB0cnVlIHRvIGFsbG93IGFic29sdXRlIFVSTHNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwsIGFsbG93QWJzb2x1dGVVcmxzKSB7XG4gIHZhciBpc1JlbGF0aXZlVVJMID0gIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKTtcbiAgaWYgKGJhc2VVUkwgJiYgKGlzUmVsYXRpdmVVUkwgfHwgYWxsb3dBYnNvbHV0ZVVybHMgPT09IGZhbHNlKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMzAuMFwiXG59OyIsIi8qIFxuKFRoZSBNSVQgTGljZW5zZSlcbkNvcHlyaWdodCAoYykgMjAxNC0yMDIxIEhhbMOhc3ogw4Fkw6FtIDxhZGFtQGFpbWZvcm0uY29tPlxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuXG4vLyAgVW5pcXVlIEhleGF0cmlkZWNpbWFsIElEIEdlbmVyYXRvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vICBEZXBlbmRlbmNpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIHBpZCA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnBpZCA/IHByb2Nlc3MucGlkLnRvU3RyaW5nKDM2KSA6ICcnIDtcbnZhciBhZGRyZXNzID0gJyc7XG5pZih0eXBlb2YgX193ZWJwYWNrX3JlcXVpcmVfXyAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgIHZhciBtYWMgPSAnJywgb3MgPSByZXF1aXJlKCdvcycpOyBcbiAgICBpZihvcy5uZXR3b3JrSW50ZXJmYWNlcykgdmFyIG5ldHdvcmtJbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTtcbiAgICBpZihuZXR3b3JrSW50ZXJmYWNlcyl7XG4gICAgICAgIGxvb3A6XG4gICAgICAgIGZvcihsZXQgaW50ZXJmYWNlX2tleSBpbiBuZXR3b3JrSW50ZXJmYWNlcyl7XG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrSW50ZXJmYWNlID0gbmV0d29ya0ludGVyZmFjZXNbaW50ZXJmYWNlX2tleV07XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBuZXR3b3JrSW50ZXJmYWNlLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgaWYobmV0d29ya0ludGVyZmFjZVtpXSAhPT0gdW5kZWZpbmVkICYmIG5ldHdvcmtJbnRlcmZhY2VbaV0ubWFjICYmIG5ldHdvcmtJbnRlcmZhY2VbaV0ubWFjICE9ICcwMDowMDowMDowMDowMDowMCcpe1xuICAgICAgICAgICAgICAgICAgICBtYWMgPSBuZXR3b3JrSW50ZXJmYWNlW2ldLm1hYzsgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWRkcmVzcyA9IG1hYyA/IHBhcnNlSW50KG1hYy5yZXBsYWNlKC9cXDp8XFxEKy9naSwgJycpKS50b1N0cmluZygzNikgOiAnJyA7XG4gICAgfVxufSBcblxuLy8gIEV4cG9ydHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxubW9kdWxlLmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24ocHJlZml4LCBzdWZmaXgpeyByZXR1cm4gKHByZWZpeCA/IHByZWZpeCA6ICcnKSArIGFkZHJlc3MgKyBwaWQgKyBub3coKS50b1N0cmluZygzNikgKyAoc3VmZml4ID8gc3VmZml4IDogJycpOyB9XG5tb2R1bGUuZXhwb3J0cy5wcm9jZXNzID0gZnVuY3Rpb24ocHJlZml4LCBzdWZmaXgpeyByZXR1cm4gKHByZWZpeCA/IHByZWZpeCA6ICcnKSArIHBpZCArIG5vdygpLnRvU3RyaW5nKDM2KSArIChzdWZmaXggPyBzdWZmaXggOiAnJyk7IH1cbm1vZHVsZS5leHBvcnRzLnRpbWUgICAgPSBmdW5jdGlvbihwcmVmaXgsIHN1ZmZpeCl7IHJldHVybiAocHJlZml4ID8gcHJlZml4IDogJycpICsgbm93KCkudG9TdHJpbmcoMzYpICsgKHN1ZmZpeCA/IHN1ZmZpeCA6ICcnKTsgfVxuXG4vLyAgSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5mdW5jdGlvbiBub3coKXtcbiAgICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gICAgdmFyIGxhc3QgPSBub3cubGFzdCB8fCB0aW1lO1xuICAgIHJldHVybiBub3cubGFzdCA9IHRpbWUgPiBsYXN0ID8gdGltZSA6IGxhc3QgKyAxO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsImltcG9ydCB7Q3VzdG9tV2luZG93fSBmcm9tICcuLi93aW5kb3cvQ3VzdG9tV2luZG93Jztcbi8vIGNhc3QgZ2xvYmFsIHZhciB3aW5kb3cgd2l0aCBDdXN0b21XaW5kb3dcbmRlY2xhcmUgbGV0IHdpbmRvdzogQ3VzdG9tV2luZG93O1xuXG4vKiBBIHV0aWxpdHkgY2xhc3MgdG8gcmV0cml2ZSBhdXRoZW50aWNhdGlvbiB0b2tlblxuICovXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIge1xuICAgIHN0YXRpYyBhc3luYyBnZXRDb21wYWN0VGlja2V0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy5tc2F1dGggJiYgd2luZG93Lm1zYXV0aC5BdXRoVGlja2V0KSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cubXNhdXRoLkF1dGhUaWNrZXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBpc1VzZXJTaWduZWRJbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCEod2luZG93Lm1zYXV0aCAmJiB3aW5kb3cubXNhdXRoLkF1dGhUaWNrZXQpKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cubXNhdXRoLkF1dGhUaWNrZXQgIT09IG51bGwpO1xuXG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldFVzZXJOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy5tc2F1dGggJiYgd2luZG93Lm1zYXV0aC5GaXJzdE5hbWUpKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7fVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5tc2F1dGguRmlyc3ROYW1lKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0VXNlclR5cGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCEod2luZG93Lm1zYXV0aCAmJiB3aW5kb3cubXNhdXRoLlR5cGUpKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7fVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5tc2F1dGguVHlwZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldEF1dGhUaWNrZXRFeCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAoISh3aW5kb3cubXNhdXRoICYmIHdpbmRvdy5tc2F1dGguQXV0aFRpY2tldEV4KSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cubXNhdXRoLkF1dGhUaWNrZXRFeCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIgfSBmcm9tICcuLi9hdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvblRva2VuSGFuZGxlcic7XG5cbi8qIEFkZCB0aGUgYXV0aCBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuIEluIGNhc2UgdGhlIHJlcXVlc3QgaXMgcGFzc2VkIHdpdGhcbiBjdXN0b20gaGVhZGVyIG5hbWUgYWxvbmcgd2l0aCB0aGUgcHJlZml4LCBpdCB3aWxsIGJlIHNldC4gXG4gKi9cbmNvbnN0IENvbXBhY3RUaWNrZXRIZWFkZXJJbnRlcmNlcHRvciA9IGFzeW5jIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgY29tcGFjdFRpY2tldCA9IGF3YWl0IEF1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyLmdldENvbXBhY3RUaWNrZXQoKTtcbiAgICBjb25zdCBhdXRoVGlja2V0RXggPSBhd2FpdCBBdXRoZW50aWNhdGlvblRva2VuSGFuZGxlci5nZXRBdXRoVGlja2V0RXgoKTtcbiAgICBjb25zdCB1c2VyVHlwZSA9IGF3YWl0IEF1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyLmdldFVzZXJUeXBlKCk7XG5cbiAgICAvL1NldCB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgYWxvbmcgd2l0aCB0aGUgcHJlZml4IGlmIHBhc3NlZCBpbiB0aGUgY29uZmlnXG4gICAgaWYgKGNvbXBhY3RUaWNrZXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY29uZmlnLkNvbXBhY3RIZWFkZXJOYW1lICE9IG51bGxcbiAgICAgICAgICAgICYmIGNvbmZpZy5Db21wYWN0SGVhZGVyUHJlZml4ICE9IG51bGwpIHsgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHVzZXJUeXBlICE9IG51bGwgJiYgdXNlclR5cGUudG9Mb3dlckNhc2UoKSA9PSBcImFhZFwiICYmIGNvbmZpZy5BYWRIZWFkZXJQcmVmaXggJiYgYXV0aFRpY2tldEV4ICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5Db21wYWN0SGVhZGVyTmFtZV0gPSBjb25maWcuQWFkSGVhZGVyUHJlZml4ICsgYXV0aFRpY2tldEV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVyc1tjb25maWcuQ29tcGFjdEhlYWRlck5hbWVdID0gY29uZmlnLkNvbXBhY3RIZWFkZXJQcmVmaXggKyBjb21wYWN0VGlja2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vU2V0IHRoZSBjb21wYWN0IHRpY2tldCBoZWFkZXIgaWYgdGhlIGN1c3RvbSBoZWFkZXIgaXMgbm90IHBhc3NlZFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzWydjb21wYWN0VGlja2V0J10gPSBjb21wYWN0VGlja2V0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gY29uZmlnO1xufVxuZXhwb3J0IGRlZmF1bHQgQ29tcGFjdFRpY2tldEhlYWRlckludGVyY2VwdG9yO1xuIiwiaW1wb3J0IHsgQ3VzdG9tV2luZG93LEluY3JlbWVudENWIH0gZnJvbSAnLi4vd2luZG93L0N1c3RvbVdpbmRvdyc7XG4gXG4vLyBjYXN0IGdsb2JhbCB2YXIgd2luZG93IHdpdGggQ3VzdG9tV2luZG93XG5kZWNsYXJlIGxldCB3aW5kb3c6IEN1c3RvbVdpbmRvdztcbiBcbi8qIEEgdXRpbGl0eSBjbGFzcyB0byByZXRyaXZlIE1TQ1YuIFdlIHNoYWxsIGluY3JlbWVudCBhbmQgc2V0IHRoZSB2YWx1ZSBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgaWYgdGhlIFxuICAgIENWIGlzIGF2YWlsYWJsZVxuICovXG5leHBvcnQgY2xhc3MgTXNDVkhhbmRsZXIgeyAgICAgXG4gICAgc3RhdGljICBnZXRNc0NWKCk6IEluY3JlbWVudENWIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy50ZWxlbWV0cnkgJiYgd2luZG93LnRlbGVtZXRyeS5jb3JyZWxhdGlvblZlY3RvclBsdWdpbiA/IHdpbmRvdy50ZWxlbWV0cnkuY29ycmVsYXRpb25WZWN0b3JQbHVnaW4uZ2V0Q3YoKSA6IG51bGw7XG4gICAgfSAgXG59XG4iLCJpbXBvcnQgeyBBeGlvc0N1c3RvbUNvbmZpZyB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5pbXBvcnQgeyBNc0NWSGFuZGxlciB9IGZyb20gJy4uL2N2L01zQ1ZIYW5kbGVyJztcbmltcG9ydCB1bmlxaWQgZnJvbSAndW5pcWlkJztcblxuLyogQWRkIE1zQ1YgaGVhZGVyIHRvIHJlcXVlc3QgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0IHNvIHRoYXQgd2Ugc2VuZCB1bmlxdWUgQ1YgdmFsdWUgaW4gdGhlIHJlcXVlc3RcbiAqL1xuY29uc3QgTXNDVkhlYWRlckludGVyY2VwdG9yID0gIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG4gICAgbGV0IG1zQ3YgPSBNc0NWSGFuZGxlci5nZXRNc0NWKCk7XG4gICAgaWYgKGNvbmZpZy5jdiAmJiBjb25maWcueE1TVmVjdG9ySWQpIHtcbiAgICAgICAgLy8gRm9yIHRoZSBhZGQgdG8gY2FydCB1c2UgY2FzZSwgYWx3YXlzIGluY3JlbWVudCB0aGUgQ1YgZm9yIGFsbCB0aGUgY2FsbHMgaW5jbHVkaW5nIHJldHJpZXNcbiAgICAgICAgaWYgKG1zQ3YgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ01TLUNWJ10gPSBtc0N2LmluY3JlbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ01TLUNWJ10gPSBjb25maWcuY3Y7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvL0NvcnJlbGF0aW9uIFZlY3RvciBhbHNvIGNhbGxlZCBhcyBDViBpcyB1c2VkIGZvciB0cmFjaW5nIHJlcXVlc3QgYWNyb3NzIHNlcnZpY2VzIGFuZCBkb3duc3RyZWFtIHN5c3RlbXMgXG4gICAgICAgIGlmIChtc0N2ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzWydNUy1DViddID0gbXNDdi5pbmNyZW1lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzWydNUy1DViddID0gdW5pcWlkKCdjYXNjJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5leHBvcnQgZGVmYXVsdCBNc0NWSGVhZGVySW50ZXJjZXB0b3I7IiwiLyogQSB1dGlsaXR5IGNsYXNzIHRvIHJldHJpdmUgY29va2llXG4gKi9cbmV4cG9ydCBjbGFzcyBDb29raWVIYW5kbGVyIHtcbiAgICBzdGF0aWMgZ2V0Q29va2llKGNuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgbGV0IG5hbWUgPSBjbmFtZSArIFwiPVwiO1xuICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsZXQgZGVjb2RlZENvb2tpZSA9IGRlY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5jb29raWUpO1xuICAgICAgICAgIGxldCBjYSA9IGRlY29kZWRDb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDxjYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBsZXQgYyA9IGNhW2ldO1xuICAgICAgICAgICAgICBjID0gYy50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChjLmluZGV4T2YobmFtZSkgPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgfVxuXG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IExPQURfQ0FSVF9VUkxfUEVSRiA9ICdodHRwczovL2NhcnQucGVyZi5zdG9yZS13ZWIuZHluYW1pY3MuY29tL3YxLjAvY2FydC9sb2FkQ2FydCc7XG5leHBvcnQgY29uc3QgTE9BRF9DQVJUX1VSTF9QUEUgPSAnaHR0cHM6Ly9jYXJ0LnBwZS5zdG9yZS13ZWIuZHluYW1pY3MuY29tL3YxLjAvY2FydC9sb2FkQ2FydCc7XG5leHBvcnQgY29uc3QgTE9BRF9DQVJUX1VSTF9JTlQgPSAnaHR0cHM6Ly9jYXJ0LnN0YWdpbmcuc3RvcmUtd2ViLmR5bmFtaWNzLmNvbS92MS4wL2NhcnQvbG9hZENhcnQnO1xuZXhwb3J0IGNvbnN0IExPQURfQ0FSVF9VUkwgPSAnaHR0cHM6Ly9jYXJ0LnByb2R1Y3Rpb24uc3RvcmUtd2ViLmR5bmFtaWNzLmNvbS92MS4wL2NhcnQvbG9hZENhcnQnO1xuZXhwb3J0IGNvbnN0IFJFRElSRUNUX0NBUlRfVVJMID0gJ2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9idXknO1xuZXhwb3J0IGNvbnN0IENBUlRfRVJST1JfU0VSVklDRSA9ICdodHRwczovL2NlbS5zZXJ2aWNlcy5taWNyb3NvZnQuY29tL3YxLyRsb2NhbGUvZXJyb3JzLyRjb2RlLSRyZWFzb24vU3RvcmVmcm9udCc7XG5leHBvcnQgY29uc3QgQ09ORklHVVJFX1FVSUNLSFJFRlNfVVJMID0gJ2h0dHBzOi8vJGhvc3RuYW1lLyRsb2NhbGUkc2FuZGJveFBhdGgvc3RvcmUvY29uZmlndXJlLyRwcm9kdWN0VGl0bGUvJGJpZ0lkJztcbmV4cG9ydCBjb25zdCBDT05GSUdVUkVfREVWX1VSTCA9ICdodHRwczovL3d3d2Rldi5taWNyb3NvZnQuY29tLyRsb2NhbGUvc3RvcmUvY29uZmlndXJlLyRwcm9kdWN0VGl0bGUvJGJpZ0lkP2Nyb3Nzc2VsbGlkPSZzZWxlY3RlZENvbG9yPSRjb2xvcic7XG5leHBvcnQgY29uc3QgQ09ORklHVVJFX1VSTCA9ICdodHRwczovLyRob3N0TmFtZS8kbG9jYWxlL3N0b3JlL2NvbmZpZ3VyZS8kcHJvZHVjdFRpdGxlLyRiaWdJZD9jcm9zc3NlbGxpZD0mc2VsZWN0ZWRDb2xvcj0kY29sb3InO1xuZXhwb3J0IGNvbnN0IENPTkZJR1VSRV9TQU5EQk9YX1VSTCA9ICdodHRwczovLyRob3N0bmFtZS8kbG9jYWxlL3dpbmRvd3NhbnkvJHVzZXIvc3RvcmUvY29uZmlndXJlLyRwcm9kdWN0VGl0bGUvJGJpZ0lkP2Nyb3Nzc2VsbGlkPSZzZWxlY3RlZENvbG9yPSRjb2xvcic7XG5leHBvcnQgY29uc3QgQlVJTERfVVJMID0gJ2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9idWlsZC8kcHJvZHVjdFRpdGxlLyRiaWdJZD9jaWQ9JnByZXZpZXc9JnByZXZpZXdNb2Rlcz0nO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1FVSUNLX0hSRUZTX1VSTCA9ICdodHRwczovL3d3dy5taWNyb3NvZnQuY29tLyRsb2NhbGUvc3RvcmUvYnVpbGQvJHByb2R1Y3RUaXRsZS8kYmlnSWQnO1xuZXhwb3J0IGNvbnN0IE1BTkFHRV9VUkwgPSAnaHR0cHM6Ly9hY2NvdW50Lm1pY3Jvc29mdC5jb20vc2VydmljZXMvJztcbmV4cG9ydCBjb25zdCBSRURJUkVDVF9JTlRFUlNUSVRJQUxfVVJMPSdodHRwczovL3d3dy5taWNyb3NvZnQuY29tLyRsb2NhbGUvc3RvcmUvYnV5JztcbmV4cG9ydCBjb25zdCBQUkVPUkRFUiA9ICdQUkVPUkRFUic7XG5leHBvcnQgY29uc3QgQ0hFQ0tZT1VSRUxJR0lCSUxJVFkgPSAnQ2hlY2sgeW91ciBlbGlnaWJpbGl0eSc7XG5leHBvcnQgY29uc3QgTVVJRENvb2tpZU5hbWUgPSAnY2FydE11aWQnO1xuZXhwb3J0IGNvbnN0IE1TMENvb2tpZU5hbWUgPSAnTVMwJztcbmV4cG9ydCBjb25zdCBBVVRIX0hFQURFUl9OQU1FID0gJ0F1dGhvcml6YXRpb24nO1xuZXhwb3J0IGNvbnN0IENPTVBBQ1RfVElDS0VUX0hFQURFUl9OQU1FID0gJ2NvbXBhY3RUaWNrZXQnO1xuZXhwb3J0IGNvbnN0IFRFTlRFRF9QQUdFX0ZMQUdfSEVBREVSX05BTUUgPSAneC1tcy10ZW50ZWQnO1xuZXhwb3J0IGNvbnN0IEFVVEhfSEVBREVSX1BSRUZJWCA9ICdXTElEMS4wPXQ9JztcbmV4cG9ydCBjb25zdCBBVVRIX0FBRF9IRUFERVJfUFJFRklYID0gJ0JlYXJlciAnO1xuZXhwb3J0IGNvbnN0IFhfQVVUSF9NVUlEX0hFQURFUiA9ICd4LWF1dGhvcml6YXRpb24tbXVpZCc7XG5leHBvcnQgY29uc3QgWF9BRU1fTE9BRF9URVNUID0gJ3gtYWVtLWxvYWQtdGVzdCc7XG5leHBvcnQgY29uc3QgVWNzU2lkQ29va2llTmFtZSA9ICd1Y3Nfc2lkJztcbmV4cG9ydCBjb25zdCBYX01TX1VDU19TSUQgPSAneC1tcy11Y3Mtc2lkJztcbmV4cG9ydCBjb25zdCBNVUlEX0hFQURFUl9OQU1FID0gJ01VSUQnO1xuZXhwb3J0IGNvbnN0IENBUlRfVFlQRSA9ICdjb25zdW1lcic7IC8vVE9ETzogQXdhaXRpbmcgcmVzcG9uc2UgZm9yIHRoaXMgdmFsdWVcbmV4cG9ydCBjb25zdCBBUFBfSUQgPSAnQWVtV2ViJztcbmV4cG9ydCBjb25zdCBDQVRBTE9HX0NMSUVOVF9UWVBFID0gJ3N0b3JlV2ViJzsgLy8gU3RvcmVXZWIgaXMgdGhlIHZhbHVlIHVzZWQgYnkgYWxsIHRoZSBzdG9yZSB3ZWIgcGFnZXMuXG5leHBvcnQgY29uc3QgQ0xJRU5UID0gJ1VuaXZlcnNhbFdlYlN0b3JlLkNhcnQnOyAvLyBVbml2ZXJzYWxXZWJTdG9yZS5DYXJ0IGlzIHRoZSBvbmUgdXNlZCBieSBhbGwgdGhlIHN0b3JlIHdlYiBwYWdlcy5cbmV4cG9ydCBjb25zdCBERVZJQ0VfVFlQRV9QQyA9ICdQYyc7IC8vIFBjIGlzIGRlZmF1bHQgdmFsdWUgd2hlbiBkZXZpY2VGYW1pbHkgaXMgbnVsbC5cbmV4cG9ydCBjb25zdCBERVZJQ0VfRkFNSUxZID0gJ2RldmljZWZhbWlseSc7XG5leHBvcnQgY29uc3QgREVWSUNFX1RZUEVfVU5LTk9XTiA9ICdVbmtub3duJztcbmV4cG9ydCBjb25zdCBQQ0lEID0gJ3BjaWQnO1xuZXhwb3J0IGNvbnN0IE9DSUQgPSAnb2NpZCc7XG5leHBvcnQgY29uc3QgQ0lEID0gJ2NpZCc7XG5leHBvcnQgY29uc3QgUFJPRCA9ICdwcm9kJztcbmV4cG9ydCBjb25zdCBQUEUgPSAncHBlJztcbmV4cG9ydCBjb25zdCBQRVJGID0gJ3BlcmYnO1xuZXhwb3J0IGNvbnN0IElOVCA9ICdzdGFnaW5nJztcbmV4cG9ydCBjb25zdCBDQVJUX0RBU0ggPSAnY2FydC0nO1xuZXhwb3J0IGNvbnN0IFhfTVNfVkVDVE9SX0lEID0gJ1gtTVMtVmVjdG9yLUlkJztcbmV4cG9ydCBjb25zdCBYX01TX0NMSUVOVF9UWVBFID0gJ1gtTVMtQ2xpZW50LVR5cGUnO1xuZXhwb3J0IGNvbnN0IFhfTVNfTUFSS0VUID0gJ1gtTVMtTWFya2V0JztcbmNvbnN0IERFVklDRV9UWVBFX0pTT04gPSB7XG4gICAgJ3dpbmRvd3MuZGVza3RvcCc6J1BjJyxcbiAgICAnd2luZG93cy5tb2JpbGUnOidNb2JpbGUnLFxuICAgICd3aW5kb3dzLnhib3gnOidYYm94JyxcbiAgICAnd2luZG93cy5ob2xvZ3JhcGhpYyc6J0hvbG9sZW5zJyxcbiAgICAnd2luZG93cy50ZWFtJzonU3VyZmFjZScsXG4gICAgJ21hYyc6J01hYycsXG4gICAgJ2lvcyc6J0lvcycsXG4gICAgJ2FuZHJvaWQnOidBbmRyb2lkJyxcbiAgICAnd2luZG93cy53aW5kb3dzUGhvbmU4eCc6J1Vua25vd24nLFxuICAgICd3aW5kb3dzLndpbmRvd3NQaG9uZTd4JzonVW5rbm93bicsXG4gICAgJ3dpbmRvd3Mud2luZG93czh4JzonVW5rbm93bicsXG4gICAgJ3dpbmRvd3MudW5pdmVyc2FsJzonVW5rbm93bicsXG59XG5leHBvcnQgY29uc3QgREVWSUNFX1RZUEVfTUFQID0gbmV3IE1hcChPYmplY3QuZW50cmllcyhERVZJQ0VfVFlQRV9KU09OKSk7XG5leHBvcnQgY29uc3QgR0VUX1JFVklFV19TVEFUVVMgPSAnZ2V0UmV2aWV3U3RhdHVzJ1xuZXhwb3J0IGNvbnN0IEVOQUJMRV9QUkVfUkVMRUFTRV9DSEVDSyA9IFwiZW5hYmxlUHJlUmVsZWFzZUNoZWNrXCJcbmV4cG9ydCBjb25zdCBTS1VfTEVOR1RIX0NIRUNLX1ZBTFVFID0gNDtcbmV4cG9ydCBjb25zdCBBQ1RJVkVfVEFCX0ZMQUcgPSAnYWN0aXZldGFiJztcbmV4cG9ydCBjb25zdCBJTlZJU0lCTEVfRkxBRyA9ICdJbnZpc2liaWxpYXJldmVsYXJlJztcbmV4cG9ydCBjb25zdCBDQVJUX1BQRSA9ICdjYXJ0UFBFJztcbmV4cG9ydCBjb25zdCBDQVJUX1BFUkYgPSAnY2FydFBFUkYnO1xuZXhwb3J0IGNvbnN0IENBUlRfSU5UID0gJ2NhcnRJTlQnO1xuZXhwb3J0IGNvbnN0IEFFTV9SRURJUkVDVF9GTEFHID0gJ2FlbXJlZGlyZWN0JztcbmV4cG9ydCBjb25zdCBQVVNIX1RPX0lOU1RBTExfTU9EQUxfSUQgPSAncHRpLW1vZGFsJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPQ0FMRSA9ICdlbi11cyc7XG5leHBvcnQgY29uc3QgQlVZQk9YX0pTTExfQ09NUE5BTUUgPSAnQnV5IEJveCc7XG5leHBvcnQgY29uc3QgUFJPRF9VUkxfUk9PVCA9ICdodHRwczovL3d3dy5taWNyb3NvZnQuY29tJztcbmV4cG9ydCBjb25zdCBBRERfVE9fQ0FSVF9UQUcgPSAnW0FkZFRvQ2FydF0nO1xuZXhwb3J0IGNvbnN0IEJVWV9OT1dfUFBFID0gJ2J1eU5vd1BQRSc7XG5leHBvcnQgY29uc3QgQ0FSVF9RU1BfVUNTID0gJ2VuYWJsZXVjcyc7XG5cbi8vIGkxOG4gc3RyaW5nc1xuZXhwb3J0IGNvbnN0IENWX1NVUFBPUlRfVEVYVDEgPSAnSWYgeW91IG5lZWQgYW55IGFkZGl0aW9uYWwgYXNzaXN0YW5jZSwgcGxlYXNlIGNvbnRhY3QgTWljcm9zb2Z0IFN0b3JlIFN1cHBvcnQgYXQgezB9JztcbmV4cG9ydCBjb25zdCBDVl9TVVBQT1JUX1RFWFQyID0gJ1BsZWFzZSBzYXZlIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZShzKSBzbyB0aGF0IG91ciBzdXBwb3J0IGFkdm9jYXRlcyBtYXkgYmUgYWJsZSB0byBiZXR0ZXIgYXNzaXN0IHlvdTonO1xuZXhwb3J0IGNvbnN0IFZJRVdfQ0FSVCA9ICdWaWV3IGNhcnQnO1xuZXhwb3J0IGNvbnN0IENPTlRJTlVFX1NIT1BQSU5HID0gJ0NvbnRpbnVlIHNob3BwaW5nJztcbmV4cG9ydCBjb25zdCBDTE9TRV9ESUFMT0dfV0lORE9XID0gJ0Nsb3NlIGRpYWxvZyB3aW5kb3cnO1xuZXhwb3J0IGNvbnN0IENBUlRfU1VQUE9SVF9VUkwgPSAnaHR0cHM6Ly9ha2EubXMvc3RvcmVjcyc7XG5cbi8vIFVwZGF0ZSBmb2xsb3dpbmcgcHJvdG90eXBlIGJ1c2luZXNzIFVSTHMgd2l0aCBmaW5hbCBVUkxzIHdoZW4gYXZhaWxhYmxlIFxuZXhwb3J0IGNvbnN0IEJVU0lORVNTX1NJR05fVVBfVVJMID0gXCJodHRwczovL3Bydi5zaWdudXAubWljcm9zb2Z0LmNvbS9DcmVhdGVBY2NvdW50XCJcbmV4cG9ydCBjb25zdCBDQVNDQURFX0JVU0lORVNTX1NJR05fSU5fVVJMID0gXCJodHRwczovL3d3d2Rldi5taWNyb3NvZnQuY29tL2Nhc2NhZGVhdXRoL3YxL3N0b3JlLWJ1c2luZXNzL2FjY291bnQvc2lnbmludG9cIjtcblxuLy8gTWFuYWdlIHlvdXIgYWNjb3VudCB0YWIgb24gYXV0aGVudGljYXRlZCBob21lIHBhZ2VcbmV4cG9ydCBjb25zdCBNSUNST1NPRlRfQURNSU5fQ0VOVEVSID0gJ2h0dHBzOi8vYWthLm1zL21hYy1yZWRpcmVjdCc7XG5leHBvcnQgY29uc3QgTUFOQUdFX1JFQ0VOVF9PUkRFUlMgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXJlY2VudG9yZGVycyc7XG5leHBvcnQgY29uc3QgTUFOQUdFX0FERFJFU1MgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLW1hbmFnZWFkZHJlc3MnO1xuZXhwb3J0IGNvbnN0IE1BTkFHRV9QQVlNRU5UX09QVElPTlMgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXBheW1lbnQnO1xuZXhwb3J0IGNvbnN0IE1BTkFHRV9JTkZPID0gJ2h0dHBzOi8vYWthLm1zL21hYy1tYW5hZ2V1c2Vycyc7XG5leHBvcnQgY29uc3QgUFJJVkFDWV9TVEFURU1FTlRfUFJJVkFDWV9BTkRfU0VDVVJJVFkgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXByaXZhY3lzdGF0ZW1lbnQnO1xuZXhwb3J0IGNvbnN0IFNUQVJUX1NIT1BQSU5HID0gJ2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vezB9L3N0b3JlL2Ivc3VyZmFjZWZvcmJ1c2luZXNzP2ljaWQ9U01CX3F1aWNrbGlua19idXNpbmVzc2RldmljZXMnO1xuZXhwb3J0IGNvbnN0IENBTk5PVF9GSU5EX09SREVSID0gJ2h0dHBzOi8vYWthLm1zL21hYy1yZWNlbnRvcmRlcnMnO1xuZXhwb3J0IGNvbnN0IElNQUdFX1BMQUNFSE9MREVSID0gXCJodHRwczovL3M3ZDIuc2NlbmU3LmNvbS9pcy9pbWFnZS9taWNyb3NvZnRjb3JwL213Zi1wbGFjZWhvbGRlclwiO1xuXG4vLyBDYXJ0IFBheWxvYWRcbmV4cG9ydCBjb25zdCBCSUxMSU5HX0FDQ09VTlRfSURfQ09PS0lFX05BTUUgPSBcIkJpbGxpbmdBY2N0SWRcIjtcblxuLy8gQnVzaW5lc3MgQ2FydCByZWRpcmVjdCB1cmxcbmV4cG9ydCBjb25zdCBSRURJUkVDVF9CVVNJTkVTU19DQVJUX1VSTCA9ICdodHRwczovL3d3d3BwZS5taWNyb3NvZnQuY29tLyRsb2NhbGUvc3RvcmUvYnVzaW5lc3MvY2FydCc7XG5cbmV4cG9ydCBjb25zdCBVU0VSX1NJR05FRF9JTl9UWVBFX0JVU0lORVNTID0gJ2FhZCc7XG5leHBvcnQgY29uc3QgT1JERVJJTkdfRVhQRVJJRU5DRV9DT01NRVJDSUFMID0gJ0NvbW1lcmNpYWwnO1xuZXhwb3J0IGNvbnN0IE9SREVSSU5HX0VYUEVSSUVOQ0VfQ09OU1VNRVIgPSAnQ29uc3VtZXInO1xuZXhwb3J0IGNvbnN0IENBVEFMT0dfSURfQ09NTUVSQ0lBTCA9IDQ7XG5leHBvcnQgY29uc3QgQ0FUQUxPR19JRF9DT05TVU1FUiA9IDE7XG5leHBvcnQgY29uc3QgVVNFUl9TSUdORURfSU5fVFlQRV9NU0EgPSAnbXNhJztcbmV4cG9ydCBjb25zdCBDT05TVU1FUl9PTkxZX1BST0RVQ1RfUkVESVJFQ1RfVVJMID0gJy8kbG9jYWxlL3N0b3JlL2J1c2luZXNzLWludGVyc3RpdGlhbC1lcnJvcj9zdGF0dXM9Y29uc3VtZXJvbmx5cHJvZHVjdCc7XG5leHBvcnQgZW51bSBTb3VyY2VDYXRhbG9nIHtcbiAgICBDYXQxID0gJ0NhdDEnLFxuICAgIENhdDQgPSAnQ2F0NCdcbn07XG5cbi8vIGxvYWRDYXJ0IGVycm9yIGNvZGVzXG5leHBvcnQgY29uc3QgRkFJTEVEX1RPX0FERF9JVEVNID0gJ0ZhaWxlZFRvQWRkSXRlbSc7XG5leHBvcnQgY29uc3QgVVBEQVRFRF9JVEVNX1RPX0FERCA9ICdVcGRhdGVkSXRlbVRvQWRkJztcbmV4cG9ydCBjb25zdCBGYWlsZWRfVE9fVVBEQVRFRF9MSU5FX0lURU0gPSAnRmFpbGVkVG9VcGRhdGVMaW5lSXRlbSc7XG5leHBvcnQgY29uc3QgUFVSID0gJ1BVUic7XG5cbi8vIGxvYWRDYXJ0IGVycm9yIHJlYXNvbnNcbmV4cG9ydCBjb25zdCBNQVhfT1ZFUkFMTF9DQVJUX1FVQU5USVRZX0VYQ0VFREVEID0gJ01heE92ZXJhbGxDYXJ0UXVhbnRpdHlFeGNlZWRlZCc7XG5leHBvcnQgY29uc3QgTUFYX0xJTkVfSVRFTV9RVUFOVElUWV9FWENFRURFRCA9ICdNYXhMaW5lSXRlbVF1YW50aXR5RXhjZWVkZWQnO1xuZXhwb3J0IGNvbnN0IFFVQU5USVRZX0xJTUlUX0VYQ0VFREVEID0gJ1F1YW50aXR5TGltaXRFeGNlZWRlZCc7XG5cbi8vIGxvYWRDYXJ0IGVycm9yIGxvYyBrZXlzXG5leHBvcnQgY29uc3QgQ0FSVF9MSU1JVF9FUlJPUiA9ICdDQVJUX0xJTUlUX0VSUk9SJztcbmV4cG9ydCBjb25zdCBDQVJUX0xJTUlUX0RFU0NSSVBUSU9OID0gJ0NBUlRfTElNSVRfREVTQ1JJUFRJT04nO1xuZXhwb3J0IGNvbnN0IEZVTExfQ0FSVF9FUlJPUiA9ICdGVUxMX0NBUlRfRVJST1InO1xuZXhwb3J0IGNvbnN0IEZVTExfQ0FSVF9ERVNDUklQVElPTiA9ICdGVUxMX0NBUlRfREVTQ1JJUFRJT04nO1xuZXhwb3J0IGNvbnN0IE1BWF9JVEVNX0VSUk9SID0gJ01BWF9JVEVNX0VSUk9SJztcbmV4cG9ydCBjb25zdCBNQVhfSVRFTV9ERVNDUklQVElPTiA9ICdNQVhfSVRFTV9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgTUFYX1FVQU5USVRZX0RFU0NSSVBUSU9OID0gJ01BWF9RVUFOVElUWV9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1FVQU5USVRZX0VSUk9SID0gJ1VQREFURV9RVUFOVElUWV9FUlJPUic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1FVQU5USVRZX0RFU0NSSVBUSU9OID0gJ1VQREFURV9RVUFOVElUWV9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgQ0FSVF9JVEVNX0VSUk9SID0gJ0NBUlRfSVRFTV9FUlJPUic7XG5leHBvcnQgY29uc3QgQ0FSVF9JVEVNX0RFU0NSSVBUSU9OID0gJ0NBUlRfSVRFTV9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgQ0FSVF9ERUZBVUxUX0VSUk9SID0gJ1NPTUVUSElOR19XRU5UX1dST05HJztcblxuLy8gbG9hZENhcnQgZXJyb3IgbWVzc2FnZXNcbmV4cG9ydCBjb25zdCBDQVJUX0xJTUlUX1NIT1JUX01FU1NBR0UgPSBcIllvdSd2ZSByZWFjaGVkIHRoZSBsaW1pdCBvZiBpdGVtcyB5b3UgY2FuIGFkZCB0byBjYXJ0LlwiO1xuZXhwb3J0IGNvbnN0IENBUlRfTElNSVRfTE9OR19NRVNTQUdFID0gJ1RvIGFkZCBpdGVtcyB0byB5b3VyIGNhcnQsIGZpcnN0IHJlbW92ZSBleGlzdGluZyBpdGVtcywgcmVkdWNlIHF1YW50aXRpZXMsIG9yIHNhdmUgaXRlbXMgZm9yIGxhdGVyLic7XG5leHBvcnQgY29uc3QgRlVMTF9DQVJUX1NIT1JUX01FU1NBR0UgPSAnWW91ciBjYXJ0IGlzIGZ1bGwuJztcbmV4cG9ydCBjb25zdCBGVUxMX0NBUlRfTE9OR19NRVNTQUdFID0gJ1VuYWJsZSB0byBhZGQgbGluZSBpdGVtIHRvIGNhcnQsIGNhcnQgcXVhbnRpdHkgaXMgYXQgaXRzIG1heC4nO1xuZXhwb3J0IGNvbnN0IE1BWF9JVEVNX1NIT1JUX01FU1NBR0UgPSBcIllvdSd2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB5b3UgY2FuIGFkZCB0byB5b3VyIGNhcnQuXCI7XG5leHBvcnQgY29uc3QgTUFYX0lURU1fTE9OR19NRVNTQUdFID0gXCJDb3VsZCBub3QgdXBkYXRlIHF1YW50aXR5LCBZb3UndmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgeW91IGNhbiBhZGQgdG8geW91ciBjYXJ0LlwiO1xuZXhwb3J0IGNvbnN0IE1BWF9RVUFOVElUWV9MT05HX01FU1NBR0UgPSAnWW91IGhhdmUgcmVhY2hlZCB0aGUgbWF4IHF1YW50aXR5IGZvciB5b3VyIHByb2R1Y3QuJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUVVBTlRJVFlfU0hPUlRfTUVTU0FHRSA9ICdNYXggcHJvZHVjdCBxdWFudGl0eSByZWFjaGVkJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUVVBTlRJVFlfTE9OR19NRVNTQUdFID0gJ0NvdWxkIG5vdCB1cGRhdGUgcXVhbnRpdHksIHRoZSByZXF1ZXN0ZWQgcXVhbnRpdHkgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQuJztcbmV4cG9ydCBjb25zdCBDQVJUX0lURU1fU0hPUlRfTUVTU0FHRSA9IFwiQ2FuJ3QgYWRkIHRoaXMgaXRlbSB0byB5b3VyIGNhcnRcIjtcbmV4cG9ydCBjb25zdCBDQVJUX0lURU1fTE9OR19NRVNTQUdFID0gJ0NvdWxkIG5vdCBhZGQgdGhlIHJlcXVlc3RlZCBpdGVtIGFzIHlvdSBhcmUgYWxyZWFkeSBhdCB0aGUgbGltaXQgZm9yIHRoaXMgaXRlbSBpbiB5b3VyIGNhcnQnO1xuZXhwb3J0IGNvbnN0IENBUlRfREVGQVVMVF9TSE9SVF9NRVNTQUdFID0gJ1NvbWV0aGluZyB3ZW50IHdyb25nIC4uLic7IiwiaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuaW1wb3J0IHsgQ29va2llSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL0Nvb2tpZUhhbmRsZXInO1xuaW1wb3J0IHsgTVVJRENvb2tpZU5hbWUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0NvbnN0YW50cyc7XG5cbi8qIEFkZCB4LWF1dGhvcml6YXRpb24tbXVpZCBoZWFkZXIgdG8gcmVxdWVzdCBieSBnZXR0aW5nIE1VSUQgY29va2llXG4gKi9cbmNvbnN0IFhBdXRoTVVJREludGVyY2VwdG9yID0gIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG4gICAgaWYoY29uZmlnLk1VSURIZWFkZXIgIT0gbnVsbCkge1xuICAgICAgICBsZXQgYXV0aG9yaXphdGlvbk1VSUQgPSAgQ29va2llSGFuZGxlci5nZXRDb29raWUoTVVJRENvb2tpZU5hbWUpO1xuICAgICAgICBpZiAoYXV0aG9yaXphdGlvbk1VSUQgIT0gXCJcIikge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLk1VSURIZWFkZXJdID0gYXV0aG9yaXphdGlvbk1VSUQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5leHBvcnQgZGVmYXVsdCBYQXV0aE1VSURJbnRlcmNlcHRvcjsiLCIvL1RoZSBiZWxvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGd1aWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGZvcm1hdCAtIDQwIGRpZ2l0IGNoYXJhY3RlclxuLy9sZW5ndGggd2l0aCAnLScgZGFzaGVzIGluY2x1ZGVkLiB5b3UgY2FuIGFsc28gcmVmZXJlIHRvIGdlbmVyYXRlQ29va2llLmpzIGZpbGUgaW5vcmRlciB0byBcbi8vZ2V0IGEgZGlmZmVyZW50IGZvcm1hdCBvbmUgd2l0aCAzNiBjaGFyYWN0ZXIgbGVuZ3RoIGFuZCBubyBkYXNoZXMuXG5leHBvcnQgY29uc3QgY3JlYXRlR3VpZCA9ICgpID0+IHtcbiAgICBjb25zdCBndWlkUGF0dGVybiA9IFwieHh4eHh4eHgteHh4eC00eHh4LVJ4eHgteHh4eHh4eHh4eHh4XCI7XG4gICAgZnVuY3Rpb24gcmFuZG9tSGV4RGlnaXQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGdldFJhbmRvbUJldHdlZW5aZXJvQW5kT25lKCkgKiAxNikudG9TdHJpbmcoMTYpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBndWlkUGF0dGVybi5yZXBsYWNlKC94L2csIHJhbmRvbUhleERpZ2l0KTtcbiAgICAvLyB1cGRhdGUgcmVtYWluaW5nIDIgYml0cyBvZiBmaXJzdCBkaWdpdCBvZiB0aGUgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZDpcbiAgICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoXCJSXCIsICg4IHwgTWF0aC5mbG9vcihnZXRSYW5kb21CZXR3ZWVuWmVyb0FuZE9uZSgpICogMykpLnRvU3RyaW5nKDE2KSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRSYW5kb21CZXR3ZWVuWmVyb0FuZE9uZSA9ICgpID0+IHtcbiAgICBjb25zdCBjcnlwdG86IENyeXB0byA9IHdpbmRvdy5jcnlwdG8gfHwgKDxhbnk+d2luZG93KS5tc0NyeXB0bztcbiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXSAvIE1hdGgucG93KDE2LCA4KTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCk7XG59IiwiaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vblV0aWxzJztcbmltcG9ydCB7IENvb2tpZUhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9Db29raWVIYW5kbGVyJztcbmltcG9ydCB7IE1TMENvb2tpZU5hbWUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0NvbnN0YW50cyc7XG5cbmNvbnN0IFJpc2tTZXNzaW9uSWRJbnRlcmNlcHRvciA9IChjb25maWc6IGFueSkgPT4ge1xuICAgIGlmKGNvbmZpZy5yaXNrSWRBcHBlbmQpXG4gICAge1xuICAgICAgICBjb25zdCByaXNrSWQgPSBDb29raWVIYW5kbGVyLmdldENvb2tpZShNUzBDb29raWVOYW1lKSB8fCBjcmVhdGVHdWlkKCk7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmRhdGEgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGxldCBwYXlsb2FkID0gSlNPTi5wYXJzZShjb25maWcuZGF0YSk7XG4gICAgICAgICAgICBwYXlsb2FkLnJpc2tTZXNzaW9uSWQgPSByaXNrSWQ7XG4gICAgICAgICAgICBjb25maWcuZGF0YSA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZGF0YSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uZmlnLmRhdGFbJ3Jpc2tTZXNzaW9uSWQnXSA9IHJpc2tJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSaXNrU2Vzc2lvbklkSW50ZXJjZXB0b3I7XG4iLCJcbmNvbnN0IEZpcnN0TmFtZUhlYWRlckludGVyY2VwdG9yID0gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgaWYoY29uZmlnLkZpcnN0TmFtZSlcbiAgICB7XG4gICAgICAgIGNvbmZpZy5oZWFkZXJzWydGaXJzdE5hbWUnXSA9IGNvbmZpZy5GaXJzdE5hbWU7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpcnN0TmFtZUhlYWRlckludGVyY2VwdG9yO1xuIiwiaW1wb3J0IHtDdXN0b21XaW5kb3d9IGZyb20gJy4uL3dpbmRvdy9DdXN0b21XaW5kb3cnO1xuLy8gY2FzdCBnbG9iYWwgdmFyIHdpbmRvdyB3aXRoIEN1c3RvbVdpbmRvd1xuZGVjbGFyZSBsZXQgd2luZG93OiBDdXN0b21XaW5kb3c7XG5cbi8qIEEgdXRpbGl0eSBjbGFzcyB0byByZXRyaWV2ZSB0ZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbnRPcHRpb25zSGFuZGxlciB7XG4gICAgc3RhdGljIGFzeW5jIGlzVGVudGVkUGFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAoISh3aW5kb3cudGVudG9wdGlvbnMgJiYgd2luZG93LnRlbnRvcHRpb25zLmlzVGVudGVkUGFnZSkpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTt9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93LnRlbnRvcHRpb25zLmlzVGVudGVkUGFnZSk7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBBeGlvc0N1c3RvbUNvbmZpZyB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5pbXBvcnQgeyBUZW50T3B0aW9uc0hhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9UZW50T3B0aW9uc0hhbmRsZXInO1xuaW1wb3J0IHsgVEVOVEVEX1BBR0VfRkxBR19IRUFERVJfTkFNRSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcblxuY29uc3QgVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvciA9IGFzeW5jIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG5cbiAgICBjb25zdCBpc1RlbnRlZFBhZ2UgPSBhd2FpdCBUZW50T3B0aW9uc0hhbmRsZXIuaXNUZW50ZWRQYWdlKCk7XG5cbiAgICBpZihpc1RlbnRlZFBhZ2UgIT0gbnVsbCAmJiBcInRydWVcIiA9PT0gaXNUZW50ZWRQYWdlKVxuICAgIHtcbiAgICAgICAgY29uZmlnLmhlYWRlcnNbVEVOVEVEX1BBR0VfRkxBR19IRUFERVJfTkFNRV0gPSBpc1RlbnRlZFBhZ2U7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbnRPcHRpb25zSGVhZGVySW50ZXJjZXB0b3I7XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCBpc1JldHJ5QWxsb3dlZCBmcm9tICdpcy1yZXRyeS1hbGxvd2VkJztcbmV4cG9ydCB2YXIgbmFtZXNwYWNlID0gJ2F4aW9zLXJldHJ5Jztcbi8qKlxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvclxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXR3b3JrRXJyb3IoZXJyb3IpIHtcbiAgdmFyIENPREVfRVhDTFVERV9MSVNUID0gWydFUlJfQ0FOQ0VMRUQnLCAnRUNPTk5BQk9SVEVEJ107XG4gIHJldHVybiAhZXJyb3IucmVzcG9uc2UgJiYgQm9vbGVhbihlcnJvci5jb2RlKSAmJiAvLyBQcmV2ZW50cyByZXRyeWluZyBjYW5jZWxsZWQgcmVxdWVzdHNcbiAgIUNPREVfRVhDTFVERV9MSVNULmluY2x1ZGVzKGVycm9yLmNvZGUpICYmIC8vIFByZXZlbnRzIHJldHJ5aW5nIHRpbWVkIG91dCAmIGNhbmNlbGxlZCByZXF1ZXN0c1xuICBpc1JldHJ5QWxsb3dlZChlcnJvcikgLy8gUHJldmVudHMgcmV0cnlpbmcgdW5zYWZlIGVycm9yc1xuICA7XG59XG52YXIgU0FGRV9IVFRQX01FVEhPRFMgPSBbJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXTtcbnZhciBJREVNUE9URU5UX0hUVFBfTUVUSE9EUyA9IFNBRkVfSFRUUF9NRVRIT0RTLmNvbmNhdChbJ3B1dCcsICdkZWxldGUnXSk7XG4vKipcbiAqIEBwYXJhbSAge0Vycm9yfSAgZXJyb3JcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuIGVycm9yLmNvZGUgIT09ICdFQ09OTkFCT1JURUQnICYmICghZXJyb3IucmVzcG9uc2UgfHwgZXJyb3IucmVzcG9uc2Uuc3RhdHVzID49IDUwMCAmJiBlcnJvci5yZXNwb25zZS5zdGF0dXMgPD0gNTk5KTtcbn1cbi8qKlxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvclxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlUmVxdWVzdEVycm9yKGVycm9yKSB7XG4gIGlmICghZXJyb3IuY29uZmlnKSB7XG4gICAgLy8gQ2Fubm90IGRldGVybWluZSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgcmV0cmllZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc1JldHJ5YWJsZUVycm9yKGVycm9yKSAmJiBTQUZFX0hUVFBfTUVUSE9EUy5pbmRleE9mKGVycm9yLmNvbmZpZy5tZXRob2QpICE9PSAtMTtcbn1cbi8qKlxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvclxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVtcG90ZW50UmVxdWVzdEVycm9yKGVycm9yKSB7XG4gIGlmICghZXJyb3IuY29uZmlnKSB7XG4gICAgLy8gQ2Fubm90IGRldGVybWluZSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgcmV0cmllZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc1JldHJ5YWJsZUVycm9yKGVycm9yKSAmJiBJREVNUE9URU5UX0hUVFBfTUVUSE9EUy5pbmRleE9mKGVycm9yLmNvbmZpZy5tZXRob2QpICE9PSAtMTtcbn1cbi8qKlxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvclxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yKGVycm9yKSB7XG4gIHJldHVybiBpc05ldHdvcmtFcnJvcihlcnJvcikgfHwgaXNJZGVtcG90ZW50UmVxdWVzdEVycm9yKGVycm9yKTtcbn1cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfSAtIGRlbGF5IGluIG1pbGxpc2Vjb25kcywgYWx3YXlzIDBcbiAqL1xuXG5mdW5jdGlvbiBub0RlbGF5KCkge1xuICByZXR1cm4gMDtcbn1cbi8qKlxuICogU2V0IGRlbGF5RmFjdG9yIDEwMDAgZm9yIGFuIGV4cG9uZW50aWFsIGRlbGF5IHRvIG9jY3VyIG9uIHRoZSBvcmRlclxuICogb2Ygc2Vjb25kc1xuICogQHBhcmFtICB7bnVtYmVyfSBbcmV0cnlOdW1iZXI9MF1cbiAqIEBwYXJhbSAge0Vycm9yfSAgZXJyb3IgLSB1bnVzZWQ7IGZvciBleGlzdGluZyBBUEkgb2YgcmV0cnlEZWxheSBjYWxsYmFja1xuICogQHBhcmFtICB7bnVtYmVyfSBbZGVsYXlGYWN0b3I9MTAwXSBtaWxsaXNlY29uZHNcbiAqIEByZXR1cm4ge251bWJlcn0gLSBkZWxheSBpbiBtaWxsaXNlY29uZHNcbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvbmVudGlhbERlbGF5KCkge1xuICB2YXIgcmV0cnlOdW1iZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDA7XG4gIHZhciBlcnJvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgZGVsYXlGYWN0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDEwMDtcbiAgdmFyIGRlbGF5ID0gTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpICogZGVsYXlGYWN0b3I7XG4gIHZhciByYW5kb21TdW0gPSBkZWxheSAqIDAuMiAqIE1hdGgucmFuZG9tKCk7IC8vIDAtMjAlIG9mIHRoZSBkZWxheVxuXG4gIHJldHVybiBkZWxheSArIHJhbmRvbVN1bTtcbn1cbi8qKiBAdHlwZSB7SUF4aW9zUmV0cnlDb25maWd9ICovXG5cbmV4cG9ydCB2YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICByZXRyaWVzOiAzLFxuICByZXRyeUNvbmRpdGlvbjogaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yLFxuICByZXRyeURlbGF5OiBub0RlbGF5LFxuICBzaG91bGRSZXNldFRpbWVvdXQ6IGZhbHNlLFxuICBvblJldHJ5OiAoKSA9PiB7fVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgYXhpb3MtcmV0cnkgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICogQHBhcmFtICB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBjb25maWdcbiAqIEBwYXJhbSAge0lBeGlvc1JldHJ5Q29uZmlnfSBkZWZhdWx0T3B0aW9uc1xuICogQHJldHVybiB7SUF4aW9zUmV0cnlDb25maWdFeHRlbmRlZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0T3B0aW9ucyhjb25maWcsIGRlZmF1bHRPcHRpb25zKSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgREVGQVVMVF9PUFRJT05TKSwgZGVmYXVsdE9wdGlvbnMpLCBjb25maWdbbmFtZXNwYWNlXSk7XG59XG4vKipcbiAqIEluaXRpYWxpemVzIGFuZCByZXR1cm5zIHRoZSByZXRyeSBzdGF0ZSBmb3IgdGhlIGdpdmVuIHJlcXVlc3QvY29uZmlnXG4gKiBAcGFyYW0gIHtBeGlvc1JlcXVlc3RDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtICB7SUF4aW9zUmV0cnlDb25maWd9IGRlZmF1bHRPcHRpb25zXG4gKiBAcmV0dXJuIHtJQXhpb3NSZXRyeUNvbmZpZ0V4dGVuZGVkfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFN0YXRlKGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IGdldFJlcXVlc3RPcHRpb25zKGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpO1xuICBjdXJyZW50U3RhdGUucmV0cnlDb3VudCA9IGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50IHx8IDA7XG4gIGNvbmZpZ1tuYW1lc3BhY2VdID0gY3VycmVudFN0YXRlO1xuICByZXR1cm4gY3VycmVudFN0YXRlO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtBeGlvc30gYXhpb3NcbiAqIEBwYXJhbSAge0F4aW9zUmVxdWVzdENvbmZpZ30gY29uZmlnXG4gKi9cblxuXG5mdW5jdGlvbiBmaXhDb25maWcoYXhpb3MsIGNvbmZpZykge1xuICBpZiAoYXhpb3MuZGVmYXVsdHMuYWdlbnQgPT09IGNvbmZpZy5hZ2VudCkge1xuICAgIGRlbGV0ZSBjb25maWcuYWdlbnQ7XG4gIH1cblxuICBpZiAoYXhpb3MuZGVmYXVsdHMuaHR0cEFnZW50ID09PSBjb25maWcuaHR0cEFnZW50KSB7XG4gICAgZGVsZXRlIGNvbmZpZy5odHRwQWdlbnQ7XG4gIH1cblxuICBpZiAoYXhpb3MuZGVmYXVsdHMuaHR0cHNBZ2VudCA9PT0gY29uZmlnLmh0dHBzQWdlbnQpIHtcbiAgICBkZWxldGUgY29uZmlnLmh0dHBzQWdlbnQ7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIHJldHJ5Q29uZGl0aW9uIGlmIHJlcXVlc3QgY2FuIGJlIHJldHJpZWQuIEhhbmRsZXMgaXQncyByZXR1cm5pbmcgdmFsdWUgb3IgUHJvbWlzZS5cbiAqIEBwYXJhbSAge0lBeGlvc1JldHJ5Q29uZmlnRXh0ZW5kZWR9IGN1cnJlbnRTdGF0ZVxuICogQHBhcmFtICB7RXJyb3J9IGVycm9yXG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fVxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkUmV0cnkoX3gsIF94Mikge1xuICByZXR1cm4gX3Nob3VsZFJldHJ5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIEFkZHMgcmVzcG9uc2UgaW50ZXJjZXB0b3JzIHRvIGFuIGF4aW9zIGluc3RhbmNlIHRvIHJldHJ5IHJlcXVlc3RzIGZhaWxlZCBkdWUgdG8gbmV0d29yayBpc3N1ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG4gKlxuICogYXhpb3NSZXRyeShheGlvcywgeyByZXRyaWVzOiAzIH0pO1xuICpcbiAqIGF4aW9zLmdldCgnaHR0cDovL2V4YW1wbGUuY29tL3Rlc3QnKSAvLyBUaGUgZmlyc3QgcmVxdWVzdCBmYWlscyBhbmQgdGhlIHNlY29uZCByZXR1cm5zICdvaydcbiAqICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAqICAgICByZXN1bHQuZGF0YTsgLy8gJ29rJ1xuICogICB9KTtcbiAqXG4gKiAvLyBFeHBvbmVudGlhbCBiYWNrLW9mZiByZXRyeSBkZWxheSBiZXR3ZWVuIHJlcXVlc3RzXG4gKiBheGlvc1JldHJ5KGF4aW9zLCB7IHJldHJ5RGVsYXkgOiBheGlvc1JldHJ5LmV4cG9uZW50aWFsRGVsYXl9KTtcbiAqXG4gKiAvLyBDdXN0b20gcmV0cnkgZGVsYXlcbiAqIGF4aW9zUmV0cnkoYXhpb3MsIHsgcmV0cnlEZWxheSA6IChyZXRyeUNvdW50KSA9PiB7XG4gKiAgIHJldHVybiByZXRyeUNvdW50ICogMTAwMDtcbiAqIH19KTtcbiAqXG4gKiAvLyBBbHNvIHdvcmtzIHdpdGggY3VzdG9tIGF4aW9zIGluc3RhbmNlc1xuICogY29uc3QgY2xpZW50ID0gYXhpb3MuY3JlYXRlKHsgYmFzZVVSTDogJ2h0dHA6Ly9leGFtcGxlLmNvbScgfSk7XG4gKiBheGlvc1JldHJ5KGNsaWVudCwgeyByZXRyaWVzOiAzIH0pO1xuICpcbiAqIGNsaWVudC5nZXQoJy90ZXN0JykgLy8gVGhlIGZpcnN0IHJlcXVlc3QgZmFpbHMgYW5kIHRoZSBzZWNvbmQgcmV0dXJucyAnb2snXG4gKiAgIC50aGVuKHJlc3VsdCA9PiB7XG4gKiAgICAgcmVzdWx0LmRhdGE7IC8vICdvaydcbiAqICAgfSk7XG4gKlxuICogLy8gQWxsb3dzIHJlcXVlc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICogY2xpZW50XG4gKiAgIC5nZXQoJy90ZXN0Jywge1xuICogICAgICdheGlvcy1yZXRyeSc6IHtcbiAqICAgICAgIHJldHJpZXM6IDBcbiAqICAgICB9XG4gKiAgIH0pXG4gKiAgIC5jYXRjaChlcnJvciA9PiB7IC8vIFRoZSBmaXJzdCByZXF1ZXN0IGZhaWxzXG4gKiAgICAgZXJyb3IgIT09IHVuZGVmaW5lZFxuICogICB9KTtcbiAqXG4gKiBAcGFyYW0ge0F4aW9zfSBheGlvcyBBbiBheGlvcyBpbnN0YW5jZSAodGhlIGF4aW9zIG9iamVjdCBvciBvbmUgY3JlYXRlZCBmcm9tIGF4aW9zLmNyZWF0ZSlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVmYXVsdE9wdGlvbnNdXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRPcHRpb25zLnJldHJpZXM9M10gTnVtYmVyIG9mIHJldHJpZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlZmF1bHRPcHRpb25zLnNob3VsZFJlc2V0VGltZW91dD1mYWxzZV1cbiAqICAgICAgICBEZWZpbmVzIGlmIHRoZSB0aW1lb3V0IHNob3VsZCBiZSByZXNldCBiZXR3ZWVuIHJldHJpZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtkZWZhdWx0T3B0aW9ucy5yZXRyeUNvbmRpdGlvbj1pc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3JdXG4gKiAgICAgICAgQSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGVycm9yIGNhbiBiZSByZXRyaWVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZGVmYXVsdE9wdGlvbnMucmV0cnlEZWxheT1ub0RlbGF5XVxuICogICAgICAgIEEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBkZWxheSBiZXR3ZWVuIHJldHJ5IHJlcXVlc3RzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZGVmYXVsdE9wdGlvbnMub25SZXRyeT0oKT0+e31dXG4gKiAgICAgICAgQSBmdW5jdGlvbiB0byBnZXQgbm90aWZpZWQgd2hlbiBhIHJldHJ5IG9jY3Vyc1xuICogQHJldHVybiB7eyByZXF1ZXN0SW50ZXJjZXB0b3JJZDogbnVtYmVyLCByZXNwb25zZUludGVyY2VwdG9ySWQ6IG51bWJlciB9fVxuICogICAgICAgIFRoZSBpZHMgb2YgdGhlIGludGVyY2VwdG9ycyBhZGRlZCB0byB0aGUgcmVxdWVzdCBhbmQgdG8gdGhlIHJlc3BvbnNlIChzbyB0aGV5IGNhbiBiZSBlamVjdGVkIGF0IGEgbGF0ZXIgdGltZSlcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zaG91bGRSZXRyeSgpIHtcbiAgX3Nob3VsZFJldHJ5ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChjdXJyZW50U3RhdGUsIGVycm9yKSB7XG4gICAgdmFyIHtcbiAgICAgIHJldHJpZXMsXG4gICAgICByZXRyeUNvbmRpdGlvblxuICAgIH0gPSBjdXJyZW50U3RhdGU7XG4gICAgdmFyIHNob3VsZFJldHJ5T3JQcm9taXNlID0gY3VycmVudFN0YXRlLnJldHJ5Q291bnQgPCByZXRyaWVzICYmIHJldHJ5Q29uZGl0aW9uKGVycm9yKTsgLy8gVGhpcyBjb3VsZCBiZSBhIHByb21pc2VcblxuICAgIGlmICh0eXBlb2Ygc2hvdWxkUmV0cnlPclByb21pc2UgPT09ICdvYmplY3QnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgc2hvdWxkUmV0cnlQcm9taXNlUmVzdWx0ID0geWllbGQgc2hvdWxkUmV0cnlPclByb21pc2U7IC8vIGtlZXAgcmV0dXJuIHRydWUgdW5sZXNzIHNob3VsZFJldHJ5UHJvbWlzZVJlc3VsdCByZXR1cm4gZmFsc2UgZm9yIGNvbXBhdGliaWxpdHlcblxuICAgICAgICByZXR1cm4gc2hvdWxkUmV0cnlQcm9taXNlUmVzdWx0ICE9PSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRSZXRyeU9yUHJvbWlzZTtcbiAgfSk7XG4gIHJldHVybiBfc2hvdWxkUmV0cnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXhpb3NSZXRyeShheGlvcywgZGVmYXVsdE9wdGlvbnMpIHtcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvcklkID0gYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGNvbmZpZyA9PiB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGdldEN1cnJlbnRTdGF0ZShjb25maWcsIGRlZmF1bHRPcHRpb25zKTtcbiAgICBjdXJyZW50U3RhdGUubGFzdFJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9KTtcbiAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JJZCA9IGF4aW9zLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UobnVsbCwgLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoZXJyb3IpIHtcbiAgICAgIHZhciB7XG4gICAgICAgIGNvbmZpZ1xuICAgICAgfSA9IGVycm9yOyAvLyBJZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uIHRvIHJldHJ5IHRoZSByZXF1ZXN0XG5cbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBnZXRDdXJyZW50U3RhdGUoY29uZmlnLCBkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICAgIGlmICh5aWVsZCBzaG91bGRSZXRyeShjdXJyZW50U3RhdGUsIGVycm9yKSkge1xuICAgICAgICBjdXJyZW50U3RhdGUucmV0cnlDb3VudCArPSAxO1xuICAgICAgICB2YXIge1xuICAgICAgICAgIHJldHJ5RGVsYXksXG4gICAgICAgICAgc2hvdWxkUmVzZXRUaW1lb3V0LFxuICAgICAgICAgIG9uUmV0cnlcbiAgICAgICAgfSA9IGN1cnJlbnRTdGF0ZTtcbiAgICAgICAgdmFyIGRlbGF5ID0gcmV0cnlEZWxheShjdXJyZW50U3RhdGUucmV0cnlDb3VudCwgZXJyb3IpOyAvLyBBeGlvcyBmYWlscyBtZXJnaW5nIHRoaXMgY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGJlY2F1c2UgaXQgaGFzIGFuIGlzc3VlXG4gICAgICAgIC8vIHdpdGggY2lyY3VsYXIgc3RydWN0dXJlczogaHR0cHM6Ly9naXRodWIuY29tL216YWJyaXNraWUvYXhpb3MvaXNzdWVzLzM3MFxuXG4gICAgICAgIGZpeENvbmZpZyhheGlvcywgY29uZmlnKTtcblxuICAgICAgICBpZiAoIXNob3VsZFJlc2V0VGltZW91dCAmJiBjb25maWcudGltZW91dCAmJiBjdXJyZW50U3RhdGUubGFzdFJlcXVlc3RUaW1lKSB7XG4gICAgICAgICAgdmFyIGxhc3RSZXF1ZXN0RHVyYXRpb24gPSBEYXRlLm5vdygpIC0gY3VycmVudFN0YXRlLmxhc3RSZXF1ZXN0VGltZTtcbiAgICAgICAgICB2YXIgdGltZW91dCA9IGNvbmZpZy50aW1lb3V0IC0gbGFzdFJlcXVlc3REdXJhdGlvbiAtIGRlbGF5O1xuXG4gICAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25maWcudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdCA9IFtkYXRhID0+IGRhdGFdO1xuICAgICAgICB5aWVsZCBvblJldHJ5KGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50LCBlcnJvciwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKGF4aW9zKGNvbmZpZykpLCBkZWxheSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfeDMpIHtcbiAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSgpKTtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JJZCxcbiAgICByZXNwb25zZUludGVyY2VwdG9ySWRcbiAgfTtcbn0gLy8gQ29tcGF0aWJpbGl0eSB3aXRoIENvbW1vbkpTXG5cbmF4aW9zUmV0cnkuaXNOZXR3b3JrRXJyb3IgPSBpc05ldHdvcmtFcnJvcjtcbmF4aW9zUmV0cnkuaXNTYWZlUmVxdWVzdEVycm9yID0gaXNTYWZlUmVxdWVzdEVycm9yO1xuYXhpb3NSZXRyeS5pc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IgPSBpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3I7XG5heGlvc1JldHJ5LmlzTmV0d29ya09ySWRlbXBvdGVudFJlcXVlc3RFcnJvciA9IGlzTmV0d29ya09ySWRlbXBvdGVudFJlcXVlc3RFcnJvcjtcbmF4aW9zUmV0cnkuZXhwb25lbnRpYWxEZWxheSA9IGV4cG9uZW50aWFsRGVsYXk7XG5heGlvc1JldHJ5LmlzUmV0cnlhYmxlRXJyb3IgPSBpc1JldHJ5YWJsZUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQ0FSVF9QRVJGLCBYX0FFTV9MT0FEX1RFU1QgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0NvbnN0YW50cyc7XG5pbXBvcnQgeyBBeGlvc0N1c3RvbUNvbmZpZyB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5cbmNvbnN0IFhBRU1Mb2FkVGVzdEludGVyY2VwdG9yID0gKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgIFxuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKENBUlRfUEVSRisnPXRydWUnKSl7XG5cbiAgICAgICAgY29uZmlnLmhlYWRlcnNbWF9BRU1fTE9BRF9URVNUXSA9ICd0cnVlJztcbiAgICB9XG4gICBcbiAgICByZXR1cm4gY29uZmlnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBYQUVNTG9hZFRlc3RJbnRlcmNlcHRvcjsiLCJpbXBvcnQgeyBYX01TX1ZFQ1RPUl9JRCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcbmltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcblxuLyogQWRkIHgtbXMtdmVjdG9yLWlkIGhlYWRlciB0byByZXF1ZXN0IGJ5IGdldHRpbmcgTVVJRCBjb29raWVcbiAqL1xuY29uc3QgWE1TVmVjdG9ySWRJbnRlcmNlcHRvciA9ICAoY29uZmlnOiBBeGlvc0N1c3RvbUNvbmZpZykgPT4ge1xuICAgIGlmIChjb25maWcueE1TVmVjdG9ySWQpIFxuICAgICAgICBjb25maWcuaGVhZGVyc1tYX01TX1ZFQ1RPUl9JRF0gPSBjb25maWcueE1TVmVjdG9ySWQ7XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5leHBvcnQgZGVmYXVsdCBYTVNWZWN0b3JJZEludGVyY2VwdG9yOyIsImltcG9ydCB7IFhfTVNfVUNTX1NJRCwgVWNzU2lkQ29va2llTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcbmltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7IENvb2tpZUhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9Db29raWVIYW5kbGVyJztcblxuLyogQWRkIHgtbXMtdXNjX3NpZCBoZWFkZXIgdG8gcmVxdWVzdCBpZiBwcmVzZW50XG4gKi9cbmNvbnN0IFhNU1Vjc0Nvb2tpZUludGVyY2VwdG9yID0gIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgY29va2llVmFsdWUgPSBDb29raWVIYW5kbGVyLmdldENvb2tpZShVY3NTaWRDb29raWVOYW1lKTtcbiAgICBpZiAoY29va2llVmFsdWUpIFxuICAgICAgICBjb25maWcuaGVhZGVyc1tYX01TX1VDU19TSURdID0gY29va2llVmFsdWU7XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5leHBvcnQgZGVmYXVsdCBYTVNVY3NDb29raWVJbnRlcmNlcHRvcjsiLCJpbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgQ29tcGFjdFRpY2tldEhlYWRlckludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9Db21wYWN0VGlja2V0SGVhZGVySW50ZXJjZXB0b3InO1xuaW1wb3J0IE1zQ1ZIZWFkZXJJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvTXNDVkhlYWRlckludGVyY2VwdG9yJztcbmltcG9ydCBYQXV0aE1VSURJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvWEF1dGhNVUlESW50ZXJjZXB0b3InO1xuaW1wb3J0IFJpc2tTZXNzaW9uSWRJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvUmlza1Nlc3Npb25JREdlbmVyYXRvckludGVyY2VwdG9yJztcbmltcG9ydCBGaXJzdE5hbWVIZWFkZXJJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3InO1xuaW1wb3J0IFRlbnRPcHRpb25zSGVhZGVySW50ZXJjZXB0b3IgZnJvbSAnLi4vaW50ZXJjZXB0b3JzL1RlbnRPcHRpb25zSGVhZGVySW50ZXJjZXB0b3InO1xuaW1wb3J0IGF4aW9zUmV0cnkgZnJvbSAnYXhpb3MtcmV0cnknXG5pbXBvcnQgWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3IgZnJvbSAnLi4vaW50ZXJjZXB0b3JzL1hBRU1Mb2FkVGVzdEludGVyY2VwdG9yJztcbmltcG9ydCBYTVNWZWN0b3JJZEludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9YTVNWZWN0b3JJZEludGVyY2VwdG9yJztcbmltcG9ydCBYTVNVY3NDb29raWVJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvWE1TVWNzQ29va2llSW50ZXJjZXB0b3InO1xuXG5cbi8qKlxuICogQnVpbGQgY3VzdG9tIEh0dHAgY2xpZW50LiBDbGllbnQgY2FuIGNvbnRhaW4gdmFyaWFibGUgcGFydHMgdG8gdXNlIGlmIG5lZWRlZC5cbiAqIGV4YW1wbGU6XG4gKiBjb25zdCBjbGllbnQgPSBuZXcgSHR0cENsaWVudEJ1aWxkZXIoKS5hZGRBdXRoZW50aWNhdGlvbigpLmFkZFhBdXRoTVVJRCgpLmJ1aWxkKCk7XG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgc3RhdGljIHJlYWRvbmx5IFJFVFJJRVNfQ09VTlRfREVGQVVMVCA9IDM7XG4gICAgc3RhdGljIHJlYWRvbmx5IFJFVFJZX1RJTUVPVVRfREVGQVVMVCA9IDUwO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2NsaWVudCA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZCBDb3JyZWxhdGlvbiBWZWN0b3IgdG8gdGhlIHJlcXVlc3QgaGVhZGVyXG4gICAgICovXG4gICAgYWRkQ1YoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKE1zQ1ZIZWFkZXJJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZCBBdXRoZW50aWNhdGlvbiB0b2tlbnMgYXZhaWFibGUgaW4gdGhlIHJlcXVlc3QgaGVhZGVyXG4gICAgICovXG4gICAgYWRkQXV0aGVudGljYXRpb24oKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKENvbXBhY3RUaWNrZXRIZWFkZXJJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZCBNVUlEIGNvb2tpZSBhdmFpYWJsZSBpbiB0aGUgcmVxdWVzdCBoZWFkZXJcbiAgICAgKi9cbiAgICBhZGRYQXV0aE1VSUQoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFhBdXRoTVVJREludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIHJpc2tTZXNzaW9uSWQgdG8gdGhlIHJlcXVlc3QgaGVhZGVyIG9mIGFueSBBUEkgY2FsbFxuICAgICAqL1xuICAgIGFkZFJpc2tTZXNzaW9uSWQoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFJpc2tTZXNzaW9uSWRJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZCBGaXJzdCBOYW1lIHRvIHRoZSByZXF1ZXN0IGhlYWRlciBvZiBhbnkgQVBJIGNhbGxcbiAgICAgKi9cbiAgICBhZGRGaXJzdE5hbWUoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKEZpcnN0TmFtZUhlYWRlckludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIHRlbnQgb3B0aW9ucyB0byB0aGUgcmVxdWVzdCBoZWFkZXIgb2YgYW55IEFQSSBjYWxsXG4gICAgICovXG4gICAgYWRkVGVudE9wdGlvbnMoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFRlbnRPcHRpb25zSGVhZGVySW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogYWRkIEFFTSBMb2FkIHRlc3Qgb3B0aW9ucyB0byB0aGUgcmVxdWVzdCBoZWFkZXIgb2YgYW55IEFQSSBjYWxsXG4gICAgICovXG4gICAgIGFkZFhBRU1Mb2FkVGVzdCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogYWRkIFgtTVMtVmVjdG9yX0lkIG9wdGlvbnMgdG8gdGhlIHJlcXVlc3QgaGVhZGVyIG9mIGFueSBBUEkgY2FsbFxuICAgICAqL1xuICAgICAgYWRkWE1TVmVjdG9ySWQoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICB0aGlzLl9jbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFhNU1ZlY3RvcklkSW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgKiBhZGQgeC1tcy11Y3Mtc2lkIHRvIHRoZSByZXF1ZXN0IGhlYWRlciBvZiBhbnkgQVBJIGNhbGxcbiAgICAqL1xuICAgICBhZGRVY3NTaWQoKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoWE1TVWNzQ29va2llSW50ZXJjZXB0b3IpO1xuICAgICAgIHJldHVybiB0aGlzO1xuICAgfVxuICAgIC8qKlxuICAgICAqIGludGVyY2VwdHMgZmFpbGVkIHJlcXVlc3RzIChIVFRQIGNvZGUgNVhYKSBhbmQgcmV0cmllcyB0aGVtIHdoZW5ldmVyIHBvc3NpYmxlLlxuICAgICAqIEBwYXJhbSByZXRyeUNvdW50IFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGZhaWxpbmcuXG4gICAgICogQHBhcmFtIHJldHJ5VGltZW91dCBEZWxheSBiZWZvcmUgcmV0cnlcbiAgICAgKi9cbiAgICBhZGRSZXRyeShyZXRyeUNvdW50Om51bWJlcixyZXRyeVRpbWVvdXQ6bnVtYmVyKTogSHR0cENsaWVudEJ1aWxkZXIge1xuICAgICAgICBjb25zdCBkZWxheUZ1bmMgPSAocmV0cnlDb3VudDogbnVtYmVyLCBlcnJvcjogRXJyb3IpID0+IHJldHJ5VGltZW91dDtcbiAgICAgICAgYXhpb3NSZXRyeSh0aGlzLl9jbGllbnQsIHtcbiAgICAgICAgICAgIHJldHJpZXM6IHJldHJ5Q291bnQsXG4gICAgICAgICAgICByZXRyeURlbGF5OiBkZWxheUZ1bmNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGJ1aWxkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50O1xuICAgIH1cbn0iLCJpbXBvcnQge0F4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtIdHRwQ2xpZW50QnVpbGRlcn0gZnJvbSAnLi9IdHRwQ2xpZW50QnVpbGRlcidcblxuLyogRXhwb3NlcyBhIEh0dHAgY2xpZW50IGludGVyZmFjZSB3aXRoXG4gKiAgIENvbXBhY3RIZWFkZXJOYW1lOiBhdXRoZW50aWNhdGlvbiB0b2tlbnMgYWRkZWQgdG8gdGhlIGhlYWRlclxuICogICBDb21wYWN0SGVhZGVyUHJlZml4OiBwcmVmaXggdG8gYmUgYWRkZWQgdG8gYXV0aGVudGljYXRpb24gdG9rZW4gaW4gaGVhZGVyXG4gKiAgIE1VSURIZWFkZXI6IG11aWQgY29va2llIGFkZGVkIHRvIHRoZSBoZWFkZXJcbiAqIFRvIHVzZSB0aGUgY2xpZW50LCB5b3UgY2FuIGV4cG9ydCB0aGlzIGludGVyZmFjZSBhbmQgbWFrZSByZXN0ZnVsIHJlcXVlc3RzIGZvbGxvd2luZyB0aGUgc3ludGF4IGZyb20gYXhpb3MgbGlicmFyeVxuICovXG5cbi8vQWRkQ1YoKSBuZWVkIHRvIGJlIHJlbW92ZWQgd2hlbiAxRFMgY29uZmlndXJhdGlvbiBpcyByZWFkeSBpbiBoaWdoZXIgZW52aXJvbm1lbnRzXG5leHBvcnQgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50QnVpbGRlcigpXG4gICAgLmFkZENWKClcbiAgICAuYWRkQXV0aGVudGljYXRpb24oKVxuICAgIC5hZGRYQXV0aE1VSUQoKVxuICAgIC5hZGRSaXNrU2Vzc2lvbklkKClcbiAgICAuYWRkUmV0cnkoSHR0cENsaWVudEJ1aWxkZXIuUkVUUklFU19DT1VOVF9ERUZBVUxULCBIdHRwQ2xpZW50QnVpbGRlci5SRVRSWV9USU1FT1VUX0RFRkFVTFQpXG4gICAgLmFkZEZpcnN0TmFtZSgpXG4gICAgLmFkZFRlbnRPcHRpb25zKClcbiAgICAuYWRkWEFFTUxvYWRUZXN0KClcbiAgICAuYWRkWE1TVmVjdG9ySWQoKVxuICAgIC5hZGRVY3NTaWQoKVxuICAgIC5idWlsZCgpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF4aW9zQ3VzdG9tQ29uZmlnIGV4dGVuZHMgQXhpb3NSZXF1ZXN0Q29uZmlnIHtcbiAgICBDb21wYWN0SGVhZGVyTmFtZT86IHN0cmluZztcbiAgICBDb21wYWN0SGVhZGVyUHJlZml4Pzogc3RyaW5nO1xuICAgIEFhZEhlYWRlclByZWZpeD86IHN0cmluZztcbiAgICBNVUlESGVhZGVyPzogc3RyaW5nO1xuICAgIHJpc2tJZEFwcGVuZD86IGJvb2xlYW47XG4gICAgRmlyc3ROYW1lPzogc3RyaW5nO1xuICAgIGlzVGVudGVkUGFnZT86IHN0cmluZztcbiAgICB4QWVtTG9hZFRlc3RIZWFkZXI/OiBzdHJpbmc7XG4gICAgeE1TVmVjdG9ySWQ/OiBzdHJpbmc7XG4gICAgY3Y/OiBzdHJpbmc7XG4gICAgVWNzU2lkSGVhZGVyPzogc3RyaW5nO1xufVxuIiwiaW1wb3J0IHsgSHR0cENsaWVudEJ1aWxkZXIgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnRCdWlsZGVyJztcbmltcG9ydCB7IEF4aW9zRXJyb3IsIEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VySW5mbyB7XG4gICAgQXV0aFRpY2tldD86IHN0cmluZztcbiAgICBGaXJzdE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXNlciBpbmZvIHNpbmdlbHRvbiByZXR1cm5zIHByb21pc2UgZnJvbSBheGlvcyBIdHRwQ2xpZW50XG4gKiBVc2VySW5mb1NpbmdsZXRvbi5nZXRJbnN0YW5jZSgpLmdldFVzZXJJbmZvKCkudGhlbiggZGF0YSAgPT4ge2NvbnNvbGUubG9nKGRhdGEpO30pXG4gKi9cblxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvU2luZ2xldG9uIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFVzZXJJbmZvU2luZ2xldG9uO1xuICAgIHByaXZhdGUgX2lzQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF91c2VySW5mbzogUHJvbWlzZTxVc2VySW5mbz47XG5cbiAgICBwdWJsaWMgZ2V0VXNlckluZm8oKTogUHJvbWlzZTxVc2VySW5mbz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLnVzZXJJbmZvLWNvbmZpZycpO1xuICAgICAgICBjb25zdCBtZUNvbnRyb2xDb25maWdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5tZUNvbnRyb2wtY29uZmlnSW5mbycpO1xuICAgICAgICBjb25zdCBpc1YyRW5hYmxlZCA9IHRoaXMuaXNWMkVuYWJsZWQodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IGNsYWltc1VSTCA9IHRoaXMuZ2V0VXJsKHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGltZW91dEluTVMgPSB0aGlzLmdldFRpbWVvdXQodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQpO1xuICAgICAgICBjb25zdCBpc01lQ29udHJvbEVuYWJsZSA9IHRoaXMuaXNNZUNvbnRyb2xFbmFibGUobWVDb250cm9sQ29uZmlnRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRJbk1TLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50ICE9PSBudWxsICYmIGNsYWltc1VSTCAhPT0gbnVsbCAmJiBpc01lQ29udHJvbEVuYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5faXNDb25maWd1cmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy9jaGVjayBpZiB2MnVzZXJpbmZvIGlzIGVuYWJsZWQsIGlmIGl0IGlzIGdldCB0aGUgdjJ1c2VyaW5mb3VybCBhbmQgcGVyZm9ybSB2MlVzZXJJbmZvQ2FsbCBvbiByZXNwb25zZVxuICAgICAgICAgICAgaWYgKGlzVjJFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckluZm9WMiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcudXNlckluZm8tY29uZmlnJykuZ2V0QXR0cmlidXRlKCdkYXRhLXYydXJsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdENvbmZpZ1YyOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRJbk1TLFxuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczp7cnU6IGAke2xvY2F0aW9uLmhvc3RuYW1lfSR7bG9jYXRpb24ucGF0aG5hbWV9JHtsb2NhdGlvbi5zZWFyY2h9YH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlckluZm8gPSBuZXcgSHR0cENsaWVudEJ1aWxkZXIoKS5hZGRDVigpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRSZXRyeShIdHRwQ2xpZW50QnVpbGRlci5SRVRSSUVTX0NPVU5UX0RFRkFVTFQsIEh0dHBDbGllbnRCdWlsZGVyLlJFVFJZX1RJTUVPVVRfREVGQVVMVClcbiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkuZ2V0KHVzZXJJbmZvVjIsIHJlcXVlc3RDb25maWdWMikudGhlbigocmVzOiBBeGlvc1Jlc3BvbnNlPFVzZXJJbmZvPikgPT4gcmVzLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEF4aW9zRXJyb3I8YW55PikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gdG9rZW4gcmVmcmVzaCBzY2VuYXJpbywgYnJvd3NlciBhdXRvbWF0aWNhbGx5IGZvbGxvd3MgMzAyIHJlc3BvbnNlIGZyb20gUlBTIHVzZXJpbmZvIHRvIHRoZSBSUFMgc2lnbmluIGVuZHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25pbiBlbmRwb2ludCByZXNwb25kcyB3aXRoIHJlZGlyZWN0IHRvIGxvZ2luLmxpdmUgZm9yIHRva2VuIHJlZnJlc2ggLSB3aGljaCByZXN1bHRzIGluIGEgQ09SUyBlcnJvciB3aGVuIHJlcXVlc3QgY29tZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGF1dGhvciBhcyBhdXRob3IgaXMgbm90IG9uIHRoZSBDRE4uIFBlciBXQzMgZG9jdW1lbnRhdGlvbiwgaHR0cDovL3d3dy53My5vcmcvVFIvY29ycy8jc2ltcGxlLWNyb3NzLW9yaWdpbi1yZXF1ZXN0ICwgQ09SUyBlcnJvcnMgYXJlIHRyZWF0ZWQgYXMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBuZXR3b3JrIGVycm9ycyB3aXRoIG5vIHN0YXR1cyBjb2RlIG9yIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFlcnJvci5jb2RlICYmICFlcnJvci5yZXNwb25zZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBwYWdlIGxldmVsIHJlZGlyZWN0IHRvIGxvZ2luLmxpdmUsIGJ5cGFzc2luZyBDT1JTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25JblVSTCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcubWVDb250cm9sLWNvbmZpZ0luZm8nKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2lnbmludXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hZGQgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgcGFnZSBzbyB1c2VyIGlzIHJlZGlyZWN0ZWQgYmFjayB0byB0aGUgcGFnZSB0aGV5IHN0YXJ0ZWQgb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBgJHtzaWduSW5VUkx9P3J1PSR7d2luZG93LmxvY2F0aW9uLmhyZWZ9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vZG8gdGhlIHJlZ3VsYXIgY2FsbCB0byB0aGUgc3RhbmRhcmQgdXNlcmluZm8gZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VySW5mbyA9IG5ldyBIdHRwQ2xpZW50QnVpbGRlcigpLmFkZENWKClcbiAgICAgICAgICAgICAgICAgICAgLmFkZFJldHJ5KEh0dHBDbGllbnRCdWlsZGVyLlJFVFJJRVNfQ09VTlRfREVGQVVMVCwgSHR0cENsaWVudEJ1aWxkZXIuUkVUUllfVElNRU9VVF9ERUZBVUxUKVxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKS5nZXQoY2xhaW1zVVJMLCByZXF1ZXN0Q29uZmlnKS50aGVuKChyZXM6IEF4aW9zUmVzcG9uc2U8VXNlckluZm8+KSA9PiByZXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbmZpZ3VyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJJbmZvID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUaW1lb3V0KHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBwYXJzZUludCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdXNlcmluZm90aW1lb3V0bXMnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmwodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS11c2VyaW5mb3VybCcpO1xuICAgIH1cbiAgICBwcml2YXRlIGlzVjJFbmFibGVkKHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gJ3RydWUnID09PSB1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXNWMmVuYWJsZWQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTWVDb250cm9sRW5hYmxlKG1lQ29udHJvbDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKG1lQ29udHJvbCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAndHJ1ZScgPT09IG1lQ29udHJvbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXNlbmFibGVkJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFnZXMgd2l0aG91dCB1bml2ZXJzYWwgaGVhZGVyIG1heSBub3QgY29udGFpbiBjb25maWd1cmF0aW9uYWwgZWxlbWVudCBmb3IgLnVzZXJJbmZvLWNvbmZpZyBhbmQgcGFnZXMgd2l0aCBVSEZcbiAgICAgKiBtYXkgaGF2ZSBtZSBjb250cm9sIGRpc2FibGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NvbmZpZ3VyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBVc2VySW5mb1NpbmdsZXRvbiB7XG4gICAgICAgIGlmICghVXNlckluZm9TaW5nbGV0b24uX2luc3RhbmNlKSB7XG4gICAgICAgICAgICBVc2VySW5mb1NpbmdsZXRvbi5faW5zdGFuY2UgPSBuZXcgVXNlckluZm9TaW5nbGV0b24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVXNlckluZm9TaW5nbGV0b24uX2luc3RhbmNlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnLi4vcmVhY3QtaW5qZWN0b3JzL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5pbXBvcnQge0h0dHBDbGllbnRCdWlsZGVyfSBmcm9tICcuLi9yZWFjdC1pbmplY3RvcnMvaHR0cENsaWVudC9IdHRwQ2xpZW50QnVpbGRlcic7XG5pbXBvcnQge1VzZXJJbmZvU2luZ2xldG9ufSBmcm9tICcuLi9yZWFjdC1pbmplY3RvcnMvdXRpbHMvVXNlckluZm9TaW5nbGV0b24nO1xuXG53aW5kb3cuTXNIdHRwQ2xpZW50ID0gd2luZG93Lk1zSHR0cENsaWVudCB8fCB7fTtcbndpbmRvdy5Nc0h0dHBDbGllbnQuZGVmYXVsdEluc3RhbmNlID0gSHR0cENsaWVudDtcbndpbmRvdy5Nc0h0dHBDbGllbnQuQnVpbGRlciA9IEh0dHBDbGllbnRCdWlsZGVyO1xud2luZG93LlVzZXJJbmZvU2luZ2xldG9uID0gVXNlckluZm9TaW5nbGV0b247XG4iXSwibmFtZXMiOlsidG9Gb3JtRGF0YSIsImVuY29kZSIsInN0ciIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwibWF0Y2giLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIm9wdGlvbnMiLCJ0aGlzIiwiX3BhaXJzIiwicHJvdG90eXBlIiwiYXBwZW5kIiwibmFtZSIsInZhbHVlIiwicHVzaCIsInRvU3RyaW5nIiwiZW5jb2RlciIsIl9lbmNvZGUiLCJjYWxsIiwibWFwIiwicGFpciIsImpvaW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiRm9ybURhdGEiLCJkZW55TGlzdCIsIlNldCIsImVycm9yIiwiaGFzIiwiY29kZSIsInNlbGYiLCJ3aW5kb3ciLCJVUkxTZWFyY2hQYXJhbXMiLCJ1dGlscyIsImlnbm9yZUR1cGxpY2F0ZU9mIiwiaGVhZGVycyIsImtleSIsInZhbCIsImkiLCJwYXJzZWQiLCJmb3JFYWNoIiwic3BsaXQiLCJsaW5lIiwiaW5kZXhPZiIsInRyaW0iLCJzbGljZSIsInRvTG93ZXJDYXNlIiwiY29uY2F0IiwiZGVmYXVsdHMiLCJkYXRhIiwic3RhdHVzIiwiZm5zIiwiY29udGV4dCIsImZuIiwiQ2FuY2VsZWRFcnJvciIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRva2VuIiwidGhlbiIsImNhbmNlbCIsIl9saXN0ZW5lcnMiLCJsZW5ndGgiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiLCJtZXNzYWdlIiwiY29uZmlnIiwicmVxdWVzdCIsInJlYXNvbiIsInRocm93SWZSZXF1ZXN0ZWQiLCJsaXN0ZW5lciIsImluZGV4Iiwic3BsaWNlIiwic291cmNlIiwiYyIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImlkIiwiY2xlYXIiLCJoIiwiX19DQU5DRUxfXyIsImlzU3RhbmRhcmRCcm93c2VyRW52Iiwid3JpdGUiLCJleHBpcmVzIiwicGF0aCIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsImlzTnVtYmVyIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwiaXNTdHJpbmciLCJkb2N1bWVudCIsInJlYWQiLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJvcmlnaW5VUkwiLCJtc2llIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJ1cmwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwicHJvdG9jb2wiLCJob3N0Iiwic2VhcmNoIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwiY2hhckF0IiwibG9jYXRpb24iLCJyZXF1ZXN0VVJMIiwiZm9ybURhdGEiLCJidWlsZFBhdGgiLCJ0YXJnZXQiLCJpc051bWVyaWNLZXkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzTGFzdCIsImlzQXJyYXkiLCJoYXNPd25Qcm9wZXJ0eSIsImlzT2JqZWN0IiwiYXJyIiwib2JqIiwia2V5cyIsIk9iamVjdCIsImxlbiIsImFycmF5VG9PYmplY3QiLCJpc0Zvcm1EYXRhIiwiaXNGdW5jdGlvbiIsImVudHJpZXMiLCJmb3JFYWNoRW50cnkiLCJtYXRjaEFsbCIsInBhcnNlUHJvcFBhdGgiLCJ0cmFuc2Zvcm1EYXRhIiwiaXNDYW5jZWwiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsImNhbmNlbFRva2VuIiwic2lnbmFsIiwiYWJvcnRlZCIsInRyYW5zZm9ybVJlcXVlc3QiLCJtZXJnZSIsImNvbW1vbiIsIm1ldGhvZCIsImFkYXB0ZXIiLCJyZXNwb25zZSIsInRyYW5zZm9ybVJlc3BvbnNlIiwicmVqZWN0IiwiYmFzZVVSTCIsInJlbGF0aXZlVVJMIiwiVkVSU0lPTiIsIkF4aW9zRXJyb3IiLCJ2YWxpZGF0b3JzIiwidHlwZSIsInRoaW5nIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidHJhbnNpdGlvbmFsIiwidmFsaWRhdG9yIiwidmVyc2lvbiIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiY29uc29sZSIsIndhcm4iLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJFUlJfQkFEX09QVElPTiIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwicGF5bG9hZCIsImlzQXhpb3NFcnJvciIsImJ1aWxkVVJMIiwiZGlzcGF0Y2hSZXF1ZXN0IiwibWVyZ2VDb25maWciLCJidWlsZEZ1bGxQYXRoIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYm9vbGVhbiIsInBhcmFtc1NlcmlhbGl6ZXIiLCJzZXJpYWxpemUiLCJmdW5jdGlvbiIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwiY2hhaW4iLCJBcnJheSIsImFwcGx5Iiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJmdWxsUGF0aCIsImFsbG93QWJzb2x1dGVVcmxzIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsImlzUGxhaW5PYmplY3QiLCJpc0VtcHR5T2JqZWN0IiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInByb3AiLCJpc1VuZGVmaW5lZCIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJjb25maWdWYWx1ZSIsInNldHRsZSIsImNvb2tpZXMiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInBhcnNlUHJvdG9jb2wiLCJwbGF0Zm9ybSIsIm9uQ2FuY2VsZWQiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwid2l0aFhTUkZUb2tlbiIsImRvbmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiWE1MSHR0cFJlcXVlc3QiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVuZXNjYXBlIiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0IiwiZXJyIiwib3BlbiIsInRvVXBwZXJDYXNlIiwidGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInNldFRpbWVvdXQiLCJvbmFib3J0IiwiRUNPTk5BQk9SVEVEIiwib25lcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsInhzcmZIZWFkZXJOYW1lIiwieHNyZkNvb2tpZU5hbWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2l0aENyZWRlbnRpYWxzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJhYm9ydCIsInByb3RvY29scyIsIkVSUl9CQURfUkVRVUVTVCIsInNlbmQiLCJleGVjIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwic3RhY2siLCJpbmhlcml0cyIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwiZGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJmcm9tIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY3JlYXRlIiwidG9GbGF0T2JqZWN0IiwiY2F1c2UiLCJhc3NpZ24iLCJjbGFzc2VzIiwidmlzaXRvciIsImhlbHBlcnMiLCJpc05vZGUiLCJpc0J1ZmZlciIsImRlZmF1bHRWaXNpdG9yIiwiYXJndW1lbnRzIiwiZW52Rm9ybURhdGEiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwiZW5kc1dpdGgiLCJyZW5kZXJLZXkiLCJkb3RzIiwicHJlZGljYXRlcyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidXNlQmxvYiIsIkJsb2IiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIml0ZXJhdG9yIiwiY29udmVydFZhbHVlIiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyIiwiaXNUeXBlZEFycmF5IiwiQnVmZmVyIiwiSlNPTiIsInN0cmluZ2lmeSIsInNvbWUiLCJpc0ZsYXRBcnJheSIsImlzRmlsZUxpc3QiLCJ0b0FycmF5IiwiZWwiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwibm9ybWFsaXplZE5hbWUiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybURhdGFUb0pTT04iLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsInNldENvbnRlbnRUeXBlSWZVbnNldCIsInByb2Nlc3MiLCJjb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsImlzSFRNTEZvcm0iLCJpc1N0cmVhbSIsImlzRmlsZSIsImlzQXJyYXlCdWZmZXJWaWV3IiwiYnVmZmVyIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwicGFyc2UiLCJlIiwic3RyaW5naWZ5U2FmZWx5IiwiSlNPTlJlcXVlc3RlZCIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJNYXRoIiwiZmxvb3IiLCJjYWxsYmFjayIsImJpbmQiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiZXh0ZW5kIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJmb3JtVG9KU09OIiwiRVJSX0NBTkNFTEVEIiwidGhpc0FyZyIsImhhc2htYXJrSW5kZXgiLCJzZXJpYWxpemVkUGFyYW1zIiwic2VyaWFsaXplRm4iLCJpc0Jyb3dzZXIiLCJjYWNoZSIsImtpbmRPZiIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImwiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsIl9oYXNPd25Qcm9wZXJ0eSIsInBhdHRlcm4iLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsInBpcGUiLCJwcm9kdWN0IiwiYXNzaWduVmFsdWUiLCJhIiwiYiIsInN0cmlwQk9NIiwiY29udGVudCIsImNoYXJDb2RlQXQiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsIlN0cmluZyIsImxhc3RJbmRleCIsIm5leHQiLCJyZWdFeHAiLCJtYXRjaGVzIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwiaXNSZWxhdGl2ZVVSTCIsInBpZCIsInRpbWUiLCJsYXN0IiwicHJlZml4Iiwic3VmZml4IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm4iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZCIsImRlZmluaXRpb24iLCJvIiwiZW51bWVyYWJsZSIsImdldCIsImdldENvbXBhY3RUaWNrZXQiLCJtc2F1dGgiLCJBdXRoVGlja2V0IiwiaXNVc2VyU2lnbmVkSW4iLCJnZXRVc2VyTmFtZSIsIkZpcnN0TmFtZSIsImdldFVzZXJUeXBlIiwiVHlwZSIsImdldEF1dGhUaWNrZXRFeCIsIkF1dGhUaWNrZXRFeCIsIkF1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyIiwiY29tcGFjdFRpY2tldCIsImF1dGhUaWNrZXRFeCIsInVzZXJUeXBlIiwiQ29tcGFjdEhlYWRlck5hbWUiLCJDb21wYWN0SGVhZGVyUHJlZml4IiwiQWFkSGVhZGVyUHJlZml4IiwiZ2V0TXNDViIsInRlbGVtZXRyeSIsImNvcnJlbGF0aW9uVmVjdG9yUGx1Z2luIiwiZ2V0Q3YiLCJtc0N2IiwiTXNDVkhhbmRsZXIiLCJjdiIsInhNU1ZlY3RvcklkIiwiaW5jcmVtZW50IiwiU291cmNlQ2F0YWxvZyIsImdldENvb2tpZSIsImNuYW1lIiwiY2EiLCJzdWJzdHJpbmciLCJNYXAiLCJNVUlESGVhZGVyIiwiYXV0aG9yaXphdGlvbk1VSUQiLCJDb29raWVIYW5kbGVyIiwiZ2V0UmFuZG9tQmV0d2Vlblplcm9BbmRPbmUiLCJjcnlwdG8iLCJtc0NyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQzMkFycmF5IiwicG93IiwicmFuZG9tIiwicmlza0lkQXBwZW5kIiwicmlza0lkIiwicmlza1Nlc3Npb25JZCIsImlzVGVudGVkUGFnZSIsInRlbnRvcHRpb25zIiwiVGVudE9wdGlvbnNIYW5kbGVyIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwiX25leHQiLCJfdGhyb3ciLCJhcmciLCJpbmZvIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmdzIiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsInN5bSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9vYmplY3RTcHJlYWQiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJuYW1lc3BhY2UiLCJpc05ldHdvcmtFcnJvciIsIkJvb2xlYW4iLCJpbmNsdWRlcyIsIlNBRkVfSFRUUF9NRVRIT0RTIiwiSURFTVBPVEVOVF9IVFRQX01FVEhPRFMiLCJpc1JldHJ5YWJsZUVycm9yIiwiaXNJZGVtcG90ZW50UmVxdWVzdEVycm9yIiwiaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yIiwiREVGQVVMVF9PUFRJT05TIiwicmV0cmllcyIsInJldHJ5Q29uZGl0aW9uIiwicmV0cnlEZWxheSIsInNob3VsZFJlc2V0VGltZW91dCIsIm9uUmV0cnkiLCJnZXRDdXJyZW50U3RhdGUiLCJkZWZhdWx0T3B0aW9ucyIsImN1cnJlbnRTdGF0ZSIsImdldFJlcXVlc3RPcHRpb25zIiwicmV0cnlDb3VudCIsIl9zaG91bGRSZXRyeSIsInNob3VsZFJldHJ5T3JQcm9taXNlIiwiX2VyciIsImF4aW9zUmV0cnkiLCJyZXF1ZXN0SW50ZXJjZXB0b3JJZCIsImxhc3RSZXF1ZXN0VGltZSIsInJlc3BvbnNlSW50ZXJjZXB0b3JJZCIsIl9yZWYiLCJfeCIsIl94MiIsInNob3VsZFJldHJ5IiwiZGVsYXkiLCJhZ2VudCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJmaXhDb25maWciLCJsYXN0UmVxdWVzdER1cmF0aW9uIiwiX3gzIiwiaXNTYWZlUmVxdWVzdEVycm9yIiwiZXhwb25lbnRpYWxEZWxheSIsInJldHJ5TnVtYmVyIiwiZGVsYXlGYWN0b3IiLCJDQVJUX1BFUkYiLCJjb29raWVWYWx1ZSIsIl9jbGllbnQiLCJhZGRDViIsImFkZEF1dGhlbnRpY2F0aW9uIiwiYWRkWEF1dGhNVUlEIiwiYWRkUmlza1Nlc3Npb25JZCIsImFkZEZpcnN0TmFtZSIsImFkZFRlbnRPcHRpb25zIiwiYWRkWEFFTUxvYWRUZXN0IiwiYWRkWE1TVmVjdG9ySWQiLCJhZGRVY3NTaWQiLCJhZGRSZXRyeSIsInJldHJ5VGltZW91dCIsIlJFVFJJRVNfQ09VTlRfREVGQVVMVCIsIlJFVFJZX1RJTUVPVVRfREVGQVVMVCIsIkh0dHBDbGllbnQiLCJIdHRwQ2xpZW50QnVpbGRlciIsInVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsIm1lQ29udHJvbENvbmZpZ0VsZW1lbnQiLCJpc1YyRW5hYmxlZCIsImNsYWltc1VSTCIsImdldFVybCIsInRpbWVvdXRJbk1TIiwiZ2V0VGltZW91dCIsImlzTWVDb250cm9sRW5hYmxlIiwicmVxdWVzdENvbmZpZyIsIl9pc0NvbmZpZ3VyZWQiLCJ1c2VySW5mb1YyIiwiZ2V0QXR0cmlidXRlIiwicmVxdWVzdENvbmZpZ1YyIiwicnUiLCJfdXNlckluZm8iLCJyZXMiLCJjYXRjaCIsInNpZ25JblVSTCIsImdldFVzZXJJbmZvIiwicGFyc2VJbnQiLCJtZUNvbnRyb2wiLCJpc0NvbmZpZ3VyZWQiLCJnZXRJbnN0YW5jZSIsIlVzZXJJbmZvU2luZ2xldG9uIiwiX2luc3RhbmNlIiwiTXNIdHRwQ2xpZW50IiwiZGVmYXVsdEluc3RhbmNlIiwiQnVpbGRlciJdLCJzb3VyY2VSb290IjoiIn0=