(()=>{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=>{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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Q2hCLEVBRWMsRUFBQWEsWUFBZCxXQUlJLE9BSEtDLEVBQWtCQyxZQUNuQkQsRUFBa0JDLFVBQVksSUFBSUQsR0FFL0JBLEVBQWtCQyxTQUM3QixFQUNKLEVBaEdBLEdDVEF0a0IsT0FBT3VrQixhQUFldmtCLE9BQU91a0IsY0FBZ0IsQ0FBQyxFQUM5Q3ZrQixPQUFPdWtCLGFBQWFDLGdCQUFrQjdCLEVBQ3RDM2lCLE9BQU91a0IsYUFBYUUsUUFBVTdCLEVBQzlCNWlCLE9BQU9xa0Isa0JBQW9CQSxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2NsYXNzZXMvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2lzLXJldHJ5LWFsbG93ZWQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvdW5pcWlkL2luZGV4LmpzIiwid2VicGFjazovL3JlYWN0LWFwcC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL0NvbXBhY3RUaWNrZXRIZWFkZXJJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2N2L01zQ1ZIYW5kbGVyLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL01zQ1ZIZWFkZXJJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2hhbmRsZXJzL0Nvb2tpZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL2NvbXBvbmVudHMvQ29uc3RhbnRzLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL1hBdXRoTVVJREludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvdXRpbHMvY29tbW9uVXRpbHMudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvUmlza1Nlc3Npb25JREdlbmVyYXRvckludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL0ZpcnN0TmFtZUhlYWRlckludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaGFuZGxlcnMvVGVudE9wdGlvbnNIYW5kbGVyLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL1RlbnRPcHRpb25zSGVhZGVySW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zLXJldHJ5L2xpYi9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvWE1TVmVjdG9ySWRJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9YTVNVY3NDb29raWVJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2h0dHBDbGllbnQvSHR0cENsaWVudEJ1aWxkZXIudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9odHRwQ2xpZW50L0h0dHBDbGllbnQudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy91dGlscy9Vc2VySW5mb1NpbmdsZXRvbi50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvd2ViY29tcG9uZW50cy9odHRwLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi90b0Zvcm1EYXRhJyk7XG5cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgdmFyIGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnXFwoXFwpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgdmFyIF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3Rcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZm9ybS1kYXRhJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGRlbnlMaXN0ID0gbmV3IFNldChbXG5cdCdFTk9URk9VTkQnLFxuXHQnRU5FVFVOUkVBQ0gnLFxuXG5cdC8vIFNTTCBlcnJvcnMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9mYzhlM2UyY2RjNTIxOTc4MzUxZGUyNTcwMzBkYjAwNzZkNzllMGFiL3NyYy9jcnlwdG8vY3J5cHRvX2NvbW1vbi5jYyNMMzAxLUwzMjhcblx0J1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlQnLFxuXHQnVU5BQkxFX1RPX0dFVF9DUkwnLFxuXHQnVU5BQkxFX1RPX0RFQ1JZUFRfQ0VSVF9TSUdOQVRVUkUnLFxuXHQnVU5BQkxFX1RPX0RFQ1JZUFRfQ1JMX1NJR05BVFVSRScsXG5cdCdVTkFCTEVfVE9fREVDT0RFX0lTU1VFUl9QVUJMSUNfS0VZJyxcblx0J0NFUlRfU0lHTkFUVVJFX0ZBSUxVUkUnLFxuXHQnQ1JMX1NJR05BVFVSRV9GQUlMVVJFJyxcblx0J0NFUlRfTk9UX1lFVF9WQUxJRCcsXG5cdCdDRVJUX0hBU19FWFBJUkVEJyxcblx0J0NSTF9OT1RfWUVUX1ZBTElEJyxcblx0J0NSTF9IQVNfRVhQSVJFRCcsXG5cdCdFUlJPUl9JTl9DRVJUX05PVF9CRUZPUkVfRklFTEQnLFxuXHQnRVJST1JfSU5fQ0VSVF9OT1RfQUZURVJfRklFTEQnLFxuXHQnRVJST1JfSU5fQ1JMX0xBU1RfVVBEQVRFX0ZJRUxEJyxcblx0J0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9GSUVMRCcsXG5cdCdPVVRfT0ZfTUVNJyxcblx0J0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCcsXG5cdCdTRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOJyxcblx0J1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWScsXG5cdCdVTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFJyxcblx0J0NFUlRfQ0hBSU5fVE9PX0xPTkcnLFxuXHQnQ0VSVF9SRVZPS0VEJyxcblx0J0lOVkFMSURfQ0EnLFxuXHQnUEFUSF9MRU5HVEhfRVhDRUVERUQnLFxuXHQnSU5WQUxJRF9QVVJQT1NFJyxcblx0J0NFUlRfVU5UUlVTVEVEJyxcblx0J0NFUlRfUkVKRUNURUQnLFxuXHQnSE9TVE5BTUVfTUlTTUFUQ0gnXG5dKTtcblxuLy8gVE9ETzogVXNlIGBlcnJvcj8uY29kZWAgd2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAxNFxubW9kdWxlLmV4cG9ydHMgPSBlcnJvciA9PiAhZGVueUxpc3QuaGFzKGVycm9yICYmIGVycm9yLmNvZGUpO1xuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnID8gc2VsZi5Gb3JtRGF0YSA6IHdpbmRvdy5Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zVVJMU2VhcmNoUGFyYW1zID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc2xpY2UoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnNsaWNlKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGF0dXMgSFRUUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgc3RhdHVzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMsIHN0YXR1cyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgfVxuICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbiA9IGZ1bmN0aW9uKG9uZnVsZmlsbGVkKSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZCxcbiAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAoZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIHZhciBpO1xuICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICB2YXIgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgdmFyIGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgdmFyIGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wZXJ0eSh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICB2YXIgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZm9ybURhdGFUb0pTT047XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBudWxsLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgbm9ybWFsaXplSGVhZGVyTmFtZShjb25maWcuaGVhZGVycywgJ0FjY2VwdCcpO1xuICBub3JtYWxpemVIZWFkZXJOYW1lKGNvbmZpZy5oZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzXG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICB2YXIgcGFyYW1zU2VyaWFsaXplciA9IGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyO1xuXG4gIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdmFyIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcHJvbWlzZTtcblxuICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG5cbiAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgIGNoYWluID0gY2hhaW4uY29uY2F0KHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG5cbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgdmFyIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgd2hpbGUgKHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHZhciBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdmFyIG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHRyeSB7XG4gICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvblJlamVjdGVkKGVycm9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdChuZXdDb25maWcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cblxuICB3aGlsZSAocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCksIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCwgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzRW1wdHlPYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCB0YXJnZXQpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoWFNSRlRva2VuJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcbnZhciBwbGF0Zm9ybSA9IHJlcXVpcmUoJy4uL3BsYXRmb3JtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgd2l0aFhTUkZUb2tlbiA9IGNvbmZpZy53aXRoWFNSRlRva2VuO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCAgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4oY29uZmlnKSk7XG4gICAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkpIHtcbiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICAgIHZhciB4c3JmVmFsdWUgPSBjb25maWcueHNyZkhlYWRlck5hbWUgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpO1xuICAgICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBmdW5jdGlvbihjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmYWxzZSwgMCAoemVybyBudW1iZXIpLCBhbmQgJycgKGVtcHR5IHN0cmluZykgYXJlIHZhbGlkIEpTT04gdmFsdWVzXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSAmJiByZXF1ZXN0RGF0YSAhPT0gZmFsc2UgJiYgcmVxdWVzdERhdGEgIT09IDAgJiYgcmVxdWVzdERhdGEgIT09ICcnKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgdmFyIG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUvJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxudmFyIHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xudmFyIGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvc0Vycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIHRvRm9ybURhdGEgPSByZXF1aXJlKCcuL3RvRm9ybURhdGEnKTtcbnZhciBwbGF0Zm9ybSA9IHJlcXVpcmUoJy4uL3BsYXRmb3JtLycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBlbnZGb3JtRGF0YSA9IHJlcXVpcmUoJy4uL2Vudi9jbGFzc2VzL0Zvcm1EYXRhJyk7XG5cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbnZhciBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnQodGhpbmcpIHtcbiAgcmV0dXJuIHRoaW5nICYmIHV0aWxzLmlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl07XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChlbnZGb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICB2YXIgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHZhciB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICB2YXIgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgdmFyIGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIHZhciBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgdmFyIHVzZUJsb2IgPSBfQmxvYiAmJiBpc1NwZWNDb21wbGlhbnQoZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIHZhciBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgdmFyIGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3I6IGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZTogY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlOiBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG52YXIgdG9VUkxFbmNvZGVkRm9ybSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybScpO1xudmFyIHBsYXRmb3JtID0gcmVxdWlyZSgnLi4vcGxhdGZvcm0nKTtcbnZhciBmb3JtRGF0YVRvSlNPTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04nKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gfHwgJyc7XG4gICAgdmFyIGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIHZhciBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICB2YXIgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHZhciBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICB2YXIgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChkYXRhICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG52YXIgZm9ybURhdGFUb0pTT04gPSByZXF1aXJlKCcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04nKTtcbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcbmF4aW9zLlZFUlNJT04gPSByZXF1aXJlKCcuL2Vudi9kYXRhJykudmVyc2lvbjtcbmF4aW9zLnRvRm9ybURhdGEgPSByZXF1aXJlKCcuL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2xpYi9jb3JlL0F4aW9zRXJyb3InKTtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IGZ1bmN0aW9uKHRoaW5nKSB7XG4gIHJldHVybiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIEF4aW9zVVJMU2VhcmNoUGFyYW1zID0gcmVxdWlyZSgnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG5cbiAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICB9XG5cbiAgdmFyIF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICB2YXIgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IHJlcXVpcmUoJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMnKSxcbiAgICBGb3JtRGF0YTogcmVxdWlyZSgnLi9jbGFzc2VzL0Zvcm1EYXRhJyksXG4gICAgQmxvYjogQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGtpbmRPZiA9IChmdW5jdGlvbihjYWNoZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmZ1bmN0aW9uIGtpbmRPZlRlc3QodHlwZSkge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gaXNLaW5kT2YodGhpbmcpIHtcbiAgICByZXR1cm4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIGVtcHR5IE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBlbXB0eSBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICYmIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodGhpbmcpIHtcbiAgdmFyIHBhdHRlcm4gPSAnW29iamVjdCBGb3JtRGF0YV0nO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHxcbiAgICB0b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gcGF0dGVybiB8fFxuICAgIChpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSBwYXR0ZXJuKVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgdmFyIHByb2R1Y3Q7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gICAgKHByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdCkgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICBwcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgIHByb2R1Y3QgPT09ICdOUycpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdHMoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gdG9GbGF0T2JqZWN0KHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSB7XG4gIHZhciBwcm9wcztcbiAgdmFyIGk7XG4gIHZhciBwcm9wO1xuICB2YXIgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKlxuICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgdmFyIGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHRoaW5nKSB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgdmFyIGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIgaXNUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKFR5cGVkQXJyYXkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbmZ1bmN0aW9uIGZvckVhY2hFbnRyeShvYmosIGZuKSB7XG4gIHZhciBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgdmFyIGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICB2YXIgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICB2YXIgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hBbGwocmVnRXhwLCBzdHIpIHtcbiAgdmFyIG1hdGNoZXM7XG4gIHZhciBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gKGZ1bmN0aW9uIHJlc29sdmVyKF9oYXNPd25Qcm9wZXJ0eSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqLCBwcm9wKSB7XG4gICAgcmV0dXJuIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG4gIH07XG59KShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc0VtcHR5T2JqZWN0OiBpc0VtcHR5T2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTSxcbiAgaW5oZXJpdHM6IGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3Q6IHRvRmxhdE9iamVjdCxcbiAga2luZE9mOiBraW5kT2YsXG4gIGtpbmRPZlRlc3Q6IGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoOiBlbmRzV2l0aCxcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3Q6IGlzRmlsZUxpc3QsXG4gIGZvckVhY2hFbnRyeTogZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbDogbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm06IGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5OiBoYXNPd25Qcm9wZXJ0eVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dBYnNvbHV0ZVVybHMgU2V0IHRvIHRydWUgdG8gYWxsb3cgYWJzb2x1dGUgVVJMc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCwgYWxsb3dBYnNvbHV0ZVVybHMpIHtcbiAgdmFyIGlzUmVsYXRpdmVVUkwgPSAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpO1xuICBpZiAoYmFzZVVSTCAmJiAoaXNSZWxhdGl2ZVVSTCB8fCBhbGxvd0Fic29sdXRlVXJscyA9PT0gZmFsc2UpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4zMC4wXCJcbn07IiwiLyogXG4oVGhlIE1JVCBMaWNlbnNlKVxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMjEgSGFsw6FzeiDDgWTDoW0gPGFkYW1AYWltZm9ybS5jb20+XG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG5cbi8vICBVbmlxdWUgSGV4YXRyaWRlY2ltYWwgSUQgR2VuZXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gIERlcGVuZGVuY2llc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG52YXIgcGlkID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MucGlkID8gcHJvY2Vzcy5waWQudG9TdHJpbmcoMzYpIDogJycgO1xudmFyIGFkZHJlc3MgPSAnJztcbmlmKHR5cGVvZiBfX3dlYnBhY2tfcmVxdWlyZV9fICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyl7XG4gICAgdmFyIG1hYyA9ICcnLCBvcyA9IHJlcXVpcmUoJ29zJyk7IFxuICAgIGlmKG9zLm5ldHdvcmtJbnRlcmZhY2VzKSB2YXIgbmV0d29ya0ludGVyZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpO1xuICAgIGlmKG5ldHdvcmtJbnRlcmZhY2VzKXtcbiAgICAgICAgbG9vcDpcbiAgICAgICAgZm9yKGxldCBpbnRlcmZhY2Vfa2V5IGluIG5ldHdvcmtJbnRlcmZhY2VzKXtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtJbnRlcmZhY2UgPSBuZXR3b3JrSW50ZXJmYWNlc1tpbnRlcmZhY2Vfa2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IG5ldHdvcmtJbnRlcmZhY2UubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBpZihuZXR3b3JrSW50ZXJmYWNlW2ldICE9PSB1bmRlZmluZWQgJiYgbmV0d29ya0ludGVyZmFjZVtpXS5tYWMgJiYgbmV0d29ya0ludGVyZmFjZVtpXS5tYWMgIT0gJzAwOjAwOjAwOjAwOjAwOjAwJyl7XG4gICAgICAgICAgICAgICAgICAgIG1hYyA9IG5ldHdvcmtJbnRlcmZhY2VbaV0ubWFjOyBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzID0gbWFjID8gcGFyc2VJbnQobWFjLnJlcGxhY2UoL1xcOnxcXEQrL2dpLCAnJykpLnRvU3RyaW5nKDM2KSA6ICcnIDtcbiAgICB9XG59IFxuXG4vLyAgRXhwb3J0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5tb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihwcmVmaXgsIHN1ZmZpeCl7IHJldHVybiAocHJlZml4ID8gcHJlZml4IDogJycpICsgYWRkcmVzcyArIHBpZCArIG5vdygpLnRvU3RyaW5nKDM2KSArIChzdWZmaXggPyBzdWZmaXggOiAnJyk7IH1cbm1vZHVsZS5leHBvcnRzLnByb2Nlc3MgPSBmdW5jdGlvbihwcmVmaXgsIHN1ZmZpeCl7IHJldHVybiAocHJlZml4ID8gcHJlZml4IDogJycpICsgcGlkICsgbm93KCkudG9TdHJpbmcoMzYpICsgKHN1ZmZpeCA/IHN1ZmZpeCA6ICcnKTsgfVxubW9kdWxlLmV4cG9ydHMudGltZSAgICA9IGZ1bmN0aW9uKHByZWZpeCwgc3VmZml4KXsgcmV0dXJuIChwcmVmaXggPyBwcmVmaXggOiAnJykgKyBub3coKS50b1N0cmluZygzNikgKyAoc3VmZml4ID8gc3VmZml4IDogJycpOyB9XG5cbi8vICBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmZ1bmN0aW9uIG5vdygpe1xuICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgbGFzdCA9IG5vdy5sYXN0IHx8IHRpbWU7XG4gICAgcmV0dXJuIG5vdy5sYXN0ID0gdGltZSA+IGxhc3QgPyB0aW1lIDogbGFzdCArIDE7XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiaW1wb3J0IHtDdXN0b21XaW5kb3d9IGZyb20gJy4uL3dpbmRvdy9DdXN0b21XaW5kb3cnO1xuLy8gY2FzdCBnbG9iYWwgdmFyIHdpbmRvdyB3aXRoIEN1c3RvbVdpbmRvd1xuZGVjbGFyZSBsZXQgd2luZG93OiBDdXN0b21XaW5kb3c7XG5cbi8qIEEgdXRpbGl0eSBjbGFzcyB0byByZXRyaXZlIGF1dGhlbnRpY2F0aW9uIHRva2VuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblRva2VuSGFuZGxlciB7XG4gICAgc3RhdGljIGFzeW5jIGdldENvbXBhY3RUaWNrZXQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCEod2luZG93Lm1zYXV0aCAmJiB3aW5kb3cubXNhdXRoLkF1dGhUaWNrZXQpKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7fVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5tc2F1dGguQXV0aFRpY2tldCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGlzVXNlclNpZ25lZEluKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoISh3aW5kb3cubXNhdXRoICYmIHdpbmRvdy5tc2F1dGguQXV0aFRpY2tldCkpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7fVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5tc2F1dGguQXV0aFRpY2tldCAhPT0gbnVsbCk7XG5cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0VXNlck5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCEod2luZG93Lm1zYXV0aCAmJiB3aW5kb3cubXNhdXRoLkZpcnN0TmFtZSkpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTt9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93Lm1zYXV0aC5GaXJzdE5hbWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRVc2VyVHlwZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAoISh3aW5kb3cubXNhdXRoICYmIHdpbmRvdy5tc2F1dGguVHlwZSkpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTt9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93Lm1zYXV0aC5UeXBlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0QXV0aFRpY2tldEV4KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy5tc2F1dGggJiYgd2luZG93Lm1zYXV0aC5BdXRoVGlja2V0RXgpKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7fVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5tc2F1dGguQXV0aFRpY2tldEV4KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBeGlvc0N1c3RvbUNvbmZpZyB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblRva2VuSGFuZGxlciB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyJztcblxuLyogQWRkIHRoZSBhdXRoIGhlYWRlciB0byB0aGUgcmVxdWVzdC4gSW4gY2FzZSB0aGUgcmVxdWVzdCBpcyBwYXNzZWQgd2l0aFxuIGN1c3RvbSBoZWFkZXIgbmFtZSBhbG9uZyB3aXRoIHRoZSBwcmVmaXgsIGl0IHdpbGwgYmUgc2V0LiBcbiAqL1xuY29uc3QgQ29tcGFjdFRpY2tldEhlYWRlckludGVyY2VwdG9yID0gYXN5bmMgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgICBjb25zdCBjb21wYWN0VGlja2V0ID0gYXdhaXQgQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIuZ2V0Q29tcGFjdFRpY2tldCgpO1xuICAgIGNvbnN0IGF1dGhUaWNrZXRFeCA9IGF3YWl0IEF1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyLmdldEF1dGhUaWNrZXRFeCgpO1xuICAgIGNvbnN0IHVzZXJUeXBlID0gYXdhaXQgQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIuZ2V0VXNlclR5cGUoKTtcblxuICAgIC8vU2V0IHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBhbG9uZyB3aXRoIHRoZSBwcmVmaXggaWYgcGFzc2VkIGluIHRoZSBjb25maWdcbiAgICBpZiAoY29tcGFjdFRpY2tldCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjb25maWcuQ29tcGFjdEhlYWRlck5hbWUgIT0gbnVsbFxuICAgICAgICAgICAgJiYgY29uZmlnLkNvbXBhY3RIZWFkZXJQcmVmaXggIT0gbnVsbCkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodXNlclR5cGUgIT0gbnVsbCAmJiB1c2VyVHlwZS50b0xvd2VyQ2FzZSgpID09IFwiYWFkXCIgJiYgY29uZmlnLkFhZEhlYWRlclByZWZpeCAmJiBhdXRoVGlja2V0RXggIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLkNvbXBhY3RIZWFkZXJOYW1lXSA9IGNvbmZpZy5BYWRIZWFkZXJQcmVmaXggKyBhdXRoVGlja2V0RXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5Db21wYWN0SGVhZGVyTmFtZV0gPSBjb25maWcuQ29tcGFjdEhlYWRlclByZWZpeCArIGNvbXBhY3RUaWNrZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9TZXQgdGhlIGNvbXBhY3QgdGlja2V0IGhlYWRlciBpZiB0aGUgY3VzdG9tIGhlYWRlciBpcyBub3QgcGFzc2VkXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ2NvbXBhY3RUaWNrZXQnXSA9IGNvbXBhY3RUaWNrZXQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBjb25maWc7XG59XG5leHBvcnQgZGVmYXVsdCBDb21wYWN0VGlja2V0SGVhZGVySW50ZXJjZXB0b3I7XG4iLCJpbXBvcnQgeyBDdXN0b21XaW5kb3csSW5jcmVtZW50Q1YgfSBmcm9tICcuLi93aW5kb3cvQ3VzdG9tV2luZG93JztcbiBcbi8vIGNhc3QgZ2xvYmFsIHZhciB3aW5kb3cgd2l0aCBDdXN0b21XaW5kb3dcbmRlY2xhcmUgbGV0IHdpbmRvdzogQ3VzdG9tV2luZG93O1xuIFxuLyogQSB1dGlsaXR5IGNsYXNzIHRvIHJldHJpdmUgTVNDVi4gV2Ugc2hhbGwgaW5jcmVtZW50IGFuZCBzZXQgdGhlIHZhbHVlIGluIHRoZSByZXF1ZXN0IGhlYWRlciBpZiB0aGUgXG4gICAgQ1YgaXMgYXZhaWxhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBNc0NWSGFuZGxlciB7ICAgICBcbiAgICBzdGF0aWMgIGdldE1zQ1YoKTogSW5jcmVtZW50Q1Yge1xuICAgICAgICByZXR1cm4gd2luZG93LnRlbGVtZXRyeSAmJiB3aW5kb3cudGVsZW1ldHJ5LmNvcnJlbGF0aW9uVmVjdG9yUGx1Z2luID8gd2luZG93LnRlbGVtZXRyeS5jb3JyZWxhdGlvblZlY3RvclBsdWdpbi5nZXRDdigpIDogbnVsbDtcbiAgICB9ICBcbn1cbiIsImltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7IE1zQ1ZIYW5kbGVyIH0gZnJvbSAnLi4vY3YvTXNDVkhhbmRsZXInO1xuaW1wb3J0IHVuaXFpZCBmcm9tICd1bmlxaWQnO1xuXG4vKiBBZGQgTXNDViBoZWFkZXIgdG8gcmVxdWVzdCBhZnRlciBpbmNyZW1lbnRpbmcgaXQgc28gdGhhdCB3ZSBzZW5kIHVuaXF1ZSBDViB2YWx1ZSBpbiB0aGUgcmVxdWVzdFxuICovXG5jb25zdCBNc0NWSGVhZGVySW50ZXJjZXB0b3IgPSAgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgICBsZXQgbXNDdiA9IE1zQ1ZIYW5kbGVyLmdldE1zQ1YoKTtcbiAgICBpZiAoY29uZmlnLmN2ICYmIGNvbmZpZy54TVNWZWN0b3JJZCkge1xuICAgICAgICAvLyBGb3IgdGhlIGFkZCB0byBjYXJ0IHVzZSBjYXNlLCBhbHdheXMgaW5jcmVtZW50IHRoZSBDViBmb3IgYWxsIHRoZSBjYWxscyBpbmNsdWRpbmcgcmV0cmllc1xuICAgICAgICBpZiAobXNDdiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1snTVMtQ1YnXSA9IG1zQ3YuaW5jcmVtZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1snTVMtQ1YnXSA9IGNvbmZpZy5jdjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vQ29ycmVsYXRpb24gVmVjdG9yIGFsc28gY2FsbGVkIGFzIENWIGlzIHVzZWQgZm9yIHRyYWNpbmcgcmVxdWVzdCBhY3Jvc3Mgc2VydmljZXMgYW5kIGRvd25zdHJlYW0gc3lzdGVtcyBcbiAgICAgICAgaWYgKG1zQ3YgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ01TLUNWJ10gPSBtc0N2LmluY3JlbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ01TLUNWJ10gPSB1bmlxaWQoJ2Nhc2MnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IE1zQ1ZIZWFkZXJJbnRlcmNlcHRvcjsiLCIvKiBBIHV0aWxpdHkgY2xhc3MgdG8gcmV0cml2ZSBjb29raWVcbiAqL1xuZXhwb3J0IGNsYXNzIENvb2tpZUhhbmRsZXIge1xuICAgIHN0YXRpYyBnZXRDb29raWUoY25hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICBsZXQgbmFtZSA9IGNuYW1lICsgXCI9XCI7XG4gICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxldCBkZWNvZGVkQ29va2llID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZSk7XG4gICAgICAgICAgbGV0IGNhID0gZGVjb2RlZENvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGxldCBjID0gY2FbaV07XG4gICAgICAgICAgICAgIGMgPSBjLnRyaW0oKTtcbiAgICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWUubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICB9XG5cbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgTE9BRF9DQVJUX1VSTF9QRVJGID0gJ2h0dHBzOi8vY2FydC5wZXJmLnN0b3JlLXdlYi5keW5hbWljcy5jb20vdjEuMC9jYXJ0L2xvYWRDYXJ0JztcbmV4cG9ydCBjb25zdCBMT0FEX0NBUlRfVVJMX1BQRSA9ICdodHRwczovL2NhcnQucHBlLnN0b3JlLXdlYi5keW5hbWljcy5jb20vdjEuMC9jYXJ0L2xvYWRDYXJ0JztcbmV4cG9ydCBjb25zdCBMT0FEX0NBUlRfVVJMX0lOVCA9ICdodHRwczovL2NhcnQuc3RhZ2luZy5zdG9yZS13ZWIuZHluYW1pY3MuY29tL3YxLjAvY2FydC9sb2FkQ2FydCc7XG5leHBvcnQgY29uc3QgTE9BRF9DQVJUX1VSTCA9ICdodHRwczovL2NhcnQucHJvZHVjdGlvbi5zdG9yZS13ZWIuZHluYW1pY3MuY29tL3YxLjAvY2FydC9sb2FkQ2FydCc7XG5leHBvcnQgY29uc3QgUkVESVJFQ1RfQ0FSVF9VUkwgPSAnaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS8kbG9jYWxlL3N0b3JlL2J1eSc7XG5leHBvcnQgY29uc3QgQ0FSVF9FUlJPUl9TRVJWSUNFID0gJ2h0dHBzOi8vY2VtLnNlcnZpY2VzLm1pY3Jvc29mdC5jb20vdjEvJGxvY2FsZS9lcnJvcnMvJGNvZGUtJHJlYXNvbi9TdG9yZWZyb250JztcbmV4cG9ydCBjb25zdCBDT05GSUdVUkVfUVVJQ0tIUkVGU19VUkwgPSAnaHR0cHM6Ly8kaG9zdG5hbWUvJGxvY2FsZSRzYW5kYm94UGF0aC9zdG9yZS9jb25maWd1cmUvJHByb2R1Y3RUaXRsZS8kYmlnSWQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR1VSRV9ERVZfVVJMID0gJ2h0dHBzOi8vd3d3ZGV2Lm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9jb25maWd1cmUvJHByb2R1Y3RUaXRsZS8kYmlnSWQ/Y3Jvc3NzZWxsaWQ9JnNlbGVjdGVkQ29sb3I9JGNvbG9yJztcbmV4cG9ydCBjb25zdCBDT05GSUdVUkVfVVJMID0gJ2h0dHBzOi8vJGhvc3ROYW1lLyRsb2NhbGUvc3RvcmUvY29uZmlndXJlLyRwcm9kdWN0VGl0bGUvJGJpZ0lkP2Nyb3Nzc2VsbGlkPSZzZWxlY3RlZENvbG9yPSRjb2xvcic7XG5leHBvcnQgY29uc3QgQ09ORklHVVJFX1NBTkRCT1hfVVJMID0gJ2h0dHBzOi8vJGhvc3RuYW1lLyRsb2NhbGUvd2luZG93c2FueS8kdXNlci9zdG9yZS9jb25maWd1cmUvJHByb2R1Y3RUaXRsZS8kYmlnSWQ/Y3Jvc3NzZWxsaWQ9JnNlbGVjdGVkQ29sb3I9JGNvbG9yJztcbmV4cG9ydCBjb25zdCBCVUlMRF9VUkwgPSAnaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS8kbG9jYWxlL3N0b3JlL2J1aWxkLyRwcm9kdWN0VGl0bGUvJGJpZ0lkP2NpZD0mcHJldmlldz0mcHJldmlld01vZGVzPSc7XG5leHBvcnQgY29uc3QgQlVJTERfUVVJQ0tfSFJFRlNfVVJMID0gJ2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9idWlsZC8kcHJvZHVjdFRpdGxlLyRiaWdJZCc7XG5leHBvcnQgY29uc3QgTUFOQUdFX1VSTCA9ICdodHRwczovL2FjY291bnQubWljcm9zb2Z0LmNvbS9zZXJ2aWNlcy8nO1xuZXhwb3J0IGNvbnN0IFJFRElSRUNUX0lOVEVSU1RJVElBTF9VUkw9J2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9idXknO1xuZXhwb3J0IGNvbnN0IFBSRU9SREVSID0gJ1BSRU9SREVSJztcbmV4cG9ydCBjb25zdCBDSEVDS1lPVVJFTElHSUJJTElUWSA9ICdDaGVjayB5b3VyIGVsaWdpYmlsaXR5JztcbmV4cG9ydCBjb25zdCBNVUlEQ29va2llTmFtZSA9ICdjYXJ0TXVpZCc7XG5leHBvcnQgY29uc3QgTVMwQ29va2llTmFtZSA9ICdNUzAnO1xuZXhwb3J0IGNvbnN0IEFVVEhfSEVBREVSX05BTUUgPSAnQXV0aG9yaXphdGlvbic7XG5leHBvcnQgY29uc3QgQ09NUEFDVF9USUNLRVRfSEVBREVSX05BTUUgPSAnY29tcGFjdFRpY2tldCc7XG5leHBvcnQgY29uc3QgVEVOVEVEX1BBR0VfRkxBR19IRUFERVJfTkFNRSA9ICd4LW1zLXRlbnRlZCc7XG5leHBvcnQgY29uc3QgQVVUSF9IRUFERVJfUFJFRklYID0gJ1dMSUQxLjA9dD0nO1xuZXhwb3J0IGNvbnN0IEFVVEhfQUFEX0hFQURFUl9QUkVGSVggPSAnQmVhcmVyICc7XG5leHBvcnQgY29uc3QgWF9BVVRIX01VSURfSEVBREVSID0gJ3gtYXV0aG9yaXphdGlvbi1tdWlkJztcbmV4cG9ydCBjb25zdCBYX0FFTV9MT0FEX1RFU1QgPSAneC1hZW0tbG9hZC10ZXN0JztcbmV4cG9ydCBjb25zdCBVY3NTaWRDb29raWVOYW1lID0gJ3Vjc19zaWQnO1xuZXhwb3J0IGNvbnN0IFhfTVNfVUNTX1NJRCA9ICd4LW1zLXVjcy1zaWQnO1xuZXhwb3J0IGNvbnN0IE1VSURfSEVBREVSX05BTUUgPSAnTVVJRCc7XG5leHBvcnQgY29uc3QgQ0FSVF9UWVBFID0gJ2NvbnN1bWVyJzsgLy9UT0RPOiBBd2FpdGluZyByZXNwb25zZSBmb3IgdGhpcyB2YWx1ZVxuZXhwb3J0IGNvbnN0IEFQUF9JRCA9ICdBZW1XZWInO1xuZXhwb3J0IGNvbnN0IENBVEFMT0dfQ0xJRU5UX1RZUEUgPSAnc3RvcmVXZWInOyAvLyBTdG9yZVdlYiBpcyB0aGUgdmFsdWUgdXNlZCBieSBhbGwgdGhlIHN0b3JlIHdlYiBwYWdlcy5cbmV4cG9ydCBjb25zdCBDTElFTlQgPSAnVW5pdmVyc2FsV2ViU3RvcmUuQ2FydCc7IC8vIFVuaXZlcnNhbFdlYlN0b3JlLkNhcnQgaXMgdGhlIG9uZSB1c2VkIGJ5IGFsbCB0aGUgc3RvcmUgd2ViIHBhZ2VzLlxuZXhwb3J0IGNvbnN0IERFVklDRV9UWVBFX1BDID0gJ1BjJzsgLy8gUGMgaXMgZGVmYXVsdCB2YWx1ZSB3aGVuIGRldmljZUZhbWlseSBpcyBudWxsLlxuZXhwb3J0IGNvbnN0IERFVklDRV9GQU1JTFkgPSAnZGV2aWNlZmFtaWx5JztcbmV4cG9ydCBjb25zdCBERVZJQ0VfVFlQRV9VTktOT1dOID0gJ1Vua25vd24nO1xuZXhwb3J0IGNvbnN0IFBDSUQgPSAncGNpZCc7XG5leHBvcnQgY29uc3QgT0NJRCA9ICdvY2lkJztcbmV4cG9ydCBjb25zdCBDSUQgPSAnY2lkJztcbmV4cG9ydCBjb25zdCBQUk9EID0gJ3Byb2QnO1xuZXhwb3J0IGNvbnN0IFBQRSA9ICdwcGUnO1xuZXhwb3J0IGNvbnN0IFBFUkYgPSAncGVyZic7XG5leHBvcnQgY29uc3QgSU5UID0gJ3N0YWdpbmcnO1xuZXhwb3J0IGNvbnN0IENBUlRfREFTSCA9ICdjYXJ0LSc7XG5leHBvcnQgY29uc3QgWF9NU19WRUNUT1JfSUQgPSAnWC1NUy1WZWN0b3ItSWQnO1xuZXhwb3J0IGNvbnN0IFhfTVNfQ0xJRU5UX1RZUEUgPSAnWC1NUy1DbGllbnQtVHlwZSc7XG5leHBvcnQgY29uc3QgWF9NU19NQVJLRVQgPSAnWC1NUy1NYXJrZXQnO1xuY29uc3QgREVWSUNFX1RZUEVfSlNPTiA9IHtcbiAgICAnd2luZG93cy5kZXNrdG9wJzonUGMnLFxuICAgICd3aW5kb3dzLm1vYmlsZSc6J01vYmlsZScsXG4gICAgJ3dpbmRvd3MueGJveCc6J1hib3gnLFxuICAgICd3aW5kb3dzLmhvbG9ncmFwaGljJzonSG9sb2xlbnMnLFxuICAgICd3aW5kb3dzLnRlYW0nOidTdXJmYWNlJyxcbiAgICAnbWFjJzonTWFjJyxcbiAgICAnaW9zJzonSW9zJyxcbiAgICAnYW5kcm9pZCc6J0FuZHJvaWQnLFxuICAgICd3aW5kb3dzLndpbmRvd3NQaG9uZTh4JzonVW5rbm93bicsXG4gICAgJ3dpbmRvd3Mud2luZG93c1Bob25lN3gnOidVbmtub3duJyxcbiAgICAnd2luZG93cy53aW5kb3dzOHgnOidVbmtub3duJyxcbiAgICAnd2luZG93cy51bml2ZXJzYWwnOidVbmtub3duJyxcbn1cbmV4cG9ydCBjb25zdCBERVZJQ0VfVFlQRV9NQVAgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKERFVklDRV9UWVBFX0pTT04pKTtcbmV4cG9ydCBjb25zdCBHRVRfUkVWSUVXX1NUQVRVUyA9ICdnZXRSZXZpZXdTdGF0dXMnXG5leHBvcnQgY29uc3QgRU5BQkxFX1BSRV9SRUxFQVNFX0NIRUNLID0gXCJlbmFibGVQcmVSZWxlYXNlQ2hlY2tcIlxuZXhwb3J0IGNvbnN0IFNLVV9MRU5HVEhfQ0hFQ0tfVkFMVUUgPSA0O1xuZXhwb3J0IGNvbnN0IEFDVElWRV9UQUJfRkxBRyA9ICdhY3RpdmV0YWInO1xuZXhwb3J0IGNvbnN0IElOVklTSUJMRV9GTEFHID0gJ0ludmlzaWJpbGlhcmV2ZWxhcmUnO1xuZXhwb3J0IGNvbnN0IENBUlRfUFBFID0gJ2NhcnRQUEUnO1xuZXhwb3J0IGNvbnN0IENBUlRfUEVSRiA9ICdjYXJ0UEVSRic7XG5leHBvcnQgY29uc3QgQ0FSVF9JTlQgPSAnY2FydElOVCc7XG5leHBvcnQgY29uc3QgQUVNX1JFRElSRUNUX0ZMQUcgPSAnYWVtcmVkaXJlY3QnO1xuZXhwb3J0IGNvbnN0IFBVU0hfVE9fSU5TVEFMTF9NT0RBTF9JRCA9ICdwdGktbW9kYWwnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9DQUxFID0gJ2VuLXVzJztcbmV4cG9ydCBjb25zdCBCVVlCT1hfSlNMTF9DT01QTkFNRSA9ICdCdXkgQm94JztcbmV4cG9ydCBjb25zdCBQUk9EX1VSTF9ST09UID0gJ2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20nO1xuZXhwb3J0IGNvbnN0IEFERF9UT19DQVJUX1RBRyA9ICdbQWRkVG9DYXJ0XSc7XG5leHBvcnQgY29uc3QgQlVZX05PV19QUEUgPSAnYnV5Tm93UFBFJztcbmV4cG9ydCBjb25zdCBDQVJUX1FTUF9VQ1MgPSAnZW5hYmxldWNzJztcblxuLy8gaTE4biBzdHJpbmdzXG5leHBvcnQgY29uc3QgQ1ZfU1VQUE9SVF9URVhUMSA9ICdJZiB5b3UgbmVlZCBhbnkgYWRkaXRpb25hbCBhc3Npc3RhbmNlLCBwbGVhc2UgY29udGFjdCBNaWNyb3NvZnQgU3RvcmUgU3VwcG9ydCBhdCB7MH0nO1xuZXhwb3J0IGNvbnN0IENWX1NVUFBPUlRfVEVYVDIgPSAnUGxlYXNlIHNhdmUgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlKHMpIHNvIHRoYXQgb3VyIHN1cHBvcnQgYWR2b2NhdGVzIG1heSBiZSBhYmxlIHRvIGJldHRlciBhc3Npc3QgeW91Oic7XG5leHBvcnQgY29uc3QgVklFV19DQVJUID0gJ1ZpZXcgY2FydCc7XG5leHBvcnQgY29uc3QgQ09OVElOVUVfU0hPUFBJTkcgPSAnQ29udGludWUgc2hvcHBpbmcnO1xuZXhwb3J0IGNvbnN0IENMT1NFX0RJQUxPR19XSU5ET1cgPSAnQ2xvc2UgZGlhbG9nIHdpbmRvdyc7XG5leHBvcnQgY29uc3QgQ0FSVF9TVVBQT1JUX1VSTCA9ICdodHRwczovL2FrYS5tcy9zdG9yZWNzJztcblxuLy8gVXBkYXRlIGZvbGxvd2luZyBwcm90b3R5cGUgYnVzaW5lc3MgVVJMcyB3aXRoIGZpbmFsIFVSTHMgd2hlbiBhdmFpbGFibGUgXG5leHBvcnQgY29uc3QgQlVTSU5FU1NfU0lHTl9VUF9VUkwgPSBcImh0dHBzOi8vcHJ2LnNpZ251cC5taWNyb3NvZnQuY29tL0NyZWF0ZUFjY291bnRcIlxuZXhwb3J0IGNvbnN0IENBU0NBREVfQlVTSU5FU1NfU0lHTl9JTl9VUkwgPSBcImh0dHBzOi8vd3d3ZGV2Lm1pY3Jvc29mdC5jb20vY2FzY2FkZWF1dGgvdjEvc3RvcmUtYnVzaW5lc3MvYWNjb3VudC9zaWduaW50b1wiO1xuXG4vLyBNYW5hZ2UgeW91ciBhY2NvdW50IHRhYiBvbiBhdXRoZW50aWNhdGVkIGhvbWUgcGFnZVxuZXhwb3J0IGNvbnN0IE1JQ1JPU09GVF9BRE1JTl9DRU5URVIgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXJlZGlyZWN0JztcbmV4cG9ydCBjb25zdCBNQU5BR0VfUkVDRU5UX09SREVSUyA9ICdodHRwczovL2FrYS5tcy9tYWMtcmVjZW50b3JkZXJzJztcbmV4cG9ydCBjb25zdCBNQU5BR0VfQUREUkVTUyA9ICdodHRwczovL2FrYS5tcy9tYWMtbWFuYWdlYWRkcmVzcyc7XG5leHBvcnQgY29uc3QgTUFOQUdFX1BBWU1FTlRfT1BUSU9OUyA9ICdodHRwczovL2FrYS5tcy9tYWMtcGF5bWVudCc7XG5leHBvcnQgY29uc3QgTUFOQUdFX0lORk8gPSAnaHR0cHM6Ly9ha2EubXMvbWFjLW1hbmFnZXVzZXJzJztcbmV4cG9ydCBjb25zdCBQUklWQUNZX1NUQVRFTUVOVF9QUklWQUNZX0FORF9TRUNVUklUWSA9ICdodHRwczovL2FrYS5tcy9tYWMtcHJpdmFjeXN0YXRlbWVudCc7XG5leHBvcnQgY29uc3QgU1RBUlRfU0hPUFBJTkcgPSAnaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS97MH0vc3RvcmUvYi9zdXJmYWNlZm9yYnVzaW5lc3M/aWNpZD1TTUJfcXVpY2tsaW5rX2J1c2luZXNzZGV2aWNlcyc7XG5leHBvcnQgY29uc3QgQ0FOTk9UX0ZJTkRfT1JERVIgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXJlY2VudG9yZGVycyc7XG5leHBvcnQgY29uc3QgSU1BR0VfUExBQ0VIT0xERVIgPSBcImh0dHBzOi8vczdkMi5zY2VuZTcuY29tL2lzL2ltYWdlL21pY3Jvc29mdGNvcnAvbXdmLXBsYWNlaG9sZGVyXCI7XG5cbi8vIENhcnQgUGF5bG9hZFxuZXhwb3J0IGNvbnN0IEJJTExJTkdfQUNDT1VOVF9JRF9DT09LSUVfTkFNRSA9IFwiQmlsbGluZ0FjY3RJZFwiO1xuXG4vLyBCdXNpbmVzcyBDYXJ0IHJlZGlyZWN0IHVybFxuZXhwb3J0IGNvbnN0IFJFRElSRUNUX0JVU0lORVNTX0NBUlRfVVJMID0gJ2h0dHBzOi8vd3d3cHBlLm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9idXNpbmVzcy9jYXJ0JztcblxuZXhwb3J0IGNvbnN0IFVTRVJfU0lHTkVEX0lOX1RZUEVfQlVTSU5FU1MgPSAnYWFkJztcbmV4cG9ydCBjb25zdCBPUkRFUklOR19FWFBFUklFTkNFX0NPTU1FUkNJQUwgPSAnQ29tbWVyY2lhbCc7XG5leHBvcnQgY29uc3QgT1JERVJJTkdfRVhQRVJJRU5DRV9DT05TVU1FUiA9ICdDb25zdW1lcic7XG5leHBvcnQgY29uc3QgQ0FUQUxPR19JRF9DT01NRVJDSUFMID0gNDtcbmV4cG9ydCBjb25zdCBDQVRBTE9HX0lEX0NPTlNVTUVSID0gMTtcbmV4cG9ydCBjb25zdCBVU0VSX1NJR05FRF9JTl9UWVBFX01TQSA9ICdtc2EnO1xuZXhwb3J0IGNvbnN0IENPTlNVTUVSX09OTFlfUFJPRFVDVF9SRURJUkVDVF9VUkwgPSAnLyRsb2NhbGUvc3RvcmUvYnVzaW5lc3MtaW50ZXJzdGl0aWFsLWVycm9yP3N0YXR1cz1jb25zdW1lcm9ubHlwcm9kdWN0JztcbmV4cG9ydCBlbnVtIFNvdXJjZUNhdGFsb2cge1xuICAgIENhdDEgPSAnQ2F0MScsXG4gICAgQ2F0NCA9ICdDYXQ0J1xufTtcblxuLy8gbG9hZENhcnQgZXJyb3IgY29kZXNcbmV4cG9ydCBjb25zdCBGQUlMRURfVE9fQUREX0lURU0gPSAnRmFpbGVkVG9BZGRJdGVtJztcbmV4cG9ydCBjb25zdCBVUERBVEVEX0lURU1fVE9fQUREID0gJ1VwZGF0ZWRJdGVtVG9BZGQnO1xuZXhwb3J0IGNvbnN0IEZhaWxlZF9UT19VUERBVEVEX0xJTkVfSVRFTSA9ICdGYWlsZWRUb1VwZGF0ZUxpbmVJdGVtJztcbmV4cG9ydCBjb25zdCBQVVIgPSAnUFVSJztcblxuLy8gbG9hZENhcnQgZXJyb3IgcmVhc29uc1xuZXhwb3J0IGNvbnN0IE1BWF9PVkVSQUxMX0NBUlRfUVVBTlRJVFlfRVhDRUVERUQgPSAnTWF4T3ZlcmFsbENhcnRRdWFudGl0eUV4Y2VlZGVkJztcbmV4cG9ydCBjb25zdCBNQVhfTElORV9JVEVNX1FVQU5USVRZX0VYQ0VFREVEID0gJ01heExpbmVJdGVtUXVhbnRpdHlFeGNlZWRlZCc7XG5leHBvcnQgY29uc3QgUVVBTlRJVFlfTElNSVRfRVhDRUVERUQgPSAnUXVhbnRpdHlMaW1pdEV4Y2VlZGVkJztcblxuLy8gbG9hZENhcnQgZXJyb3IgbG9jIGtleXNcbmV4cG9ydCBjb25zdCBDQVJUX0xJTUlUX0VSUk9SID0gJ0NBUlRfTElNSVRfRVJST1InO1xuZXhwb3J0IGNvbnN0IENBUlRfTElNSVRfREVTQ1JJUFRJT04gPSAnQ0FSVF9MSU1JVF9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgRlVMTF9DQVJUX0VSUk9SID0gJ0ZVTExfQ0FSVF9FUlJPUic7XG5leHBvcnQgY29uc3QgRlVMTF9DQVJUX0RFU0NSSVBUSU9OID0gJ0ZVTExfQ0FSVF9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgTUFYX0lURU1fRVJST1IgPSAnTUFYX0lURU1fRVJST1InO1xuZXhwb3J0IGNvbnN0IE1BWF9JVEVNX0RFU0NSSVBUSU9OID0gJ01BWF9JVEVNX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBNQVhfUVVBTlRJVFlfREVTQ1JJUFRJT04gPSAnTUFYX1FVQU5USVRZX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUVVBTlRJVFlfRVJST1IgPSAnVVBEQVRFX1FVQU5USVRZX0VSUk9SJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUVVBTlRJVFlfREVTQ1JJUFRJT04gPSAnVVBEQVRFX1FVQU5USVRZX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBDQVJUX0lURU1fRVJST1IgPSAnQ0FSVF9JVEVNX0VSUk9SJztcbmV4cG9ydCBjb25zdCBDQVJUX0lURU1fREVTQ1JJUFRJT04gPSAnQ0FSVF9JVEVNX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBDQVJUX0RFRkFVTFRfRVJST1IgPSAnU09NRVRISU5HX1dFTlRfV1JPTkcnO1xuXG4vLyBsb2FkQ2FydCBlcnJvciBtZXNzYWdlc1xuZXhwb3J0IGNvbnN0IENBUlRfTElNSVRfU0hPUlRfTUVTU0FHRSA9IFwiWW91J3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIGl0ZW1zIHlvdSBjYW4gYWRkIHRvIGNhcnQuXCI7XG5leHBvcnQgY29uc3QgQ0FSVF9MSU1JVF9MT05HX01FU1NBR0UgPSAnVG8gYWRkIGl0ZW1zIHRvIHlvdXIgY2FydCwgZmlyc3QgcmVtb3ZlIGV4aXN0aW5nIGl0ZW1zLCByZWR1Y2UgcXVhbnRpdGllcywgb3Igc2F2ZSBpdGVtcyBmb3IgbGF0ZXIuJztcbmV4cG9ydCBjb25zdCBGVUxMX0NBUlRfU0hPUlRfTUVTU0FHRSA9ICdZb3VyIGNhcnQgaXMgZnVsbC4nO1xuZXhwb3J0IGNvbnN0IEZVTExfQ0FSVF9MT05HX01FU1NBR0UgPSAnVW5hYmxlIHRvIGFkZCBsaW5lIGl0ZW0gdG8gY2FydCwgY2FydCBxdWFudGl0eSBpcyBhdCBpdHMgbWF4Lic7XG5leHBvcnQgY29uc3QgTUFYX0lURU1fU0hPUlRfTUVTU0FHRSA9IFwiWW91J3ZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHlvdSBjYW4gYWRkIHRvIHlvdXIgY2FydC5cIjtcbmV4cG9ydCBjb25zdCBNQVhfSVRFTV9MT05HX01FU1NBR0UgPSBcIkNvdWxkIG5vdCB1cGRhdGUgcXVhbnRpdHksIFlvdSd2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB5b3UgY2FuIGFkZCB0byB5b3VyIGNhcnQuXCI7XG5leHBvcnQgY29uc3QgTUFYX1FVQU5USVRZX0xPTkdfTUVTU0FHRSA9ICdZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXggcXVhbnRpdHkgZm9yIHlvdXIgcHJvZHVjdC4nO1xuZXhwb3J0IGNvbnN0IFVQREFURV9RVUFOVElUWV9TSE9SVF9NRVNTQUdFID0gJ01heCBwcm9kdWN0IHF1YW50aXR5IHJlYWNoZWQnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9RVUFOVElUWV9MT05HX01FU1NBR0UgPSAnQ291bGQgbm90IHVwZGF0ZSBxdWFudGl0eSwgdGhlIHJlcXVlc3RlZCBxdWFudGl0eSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZC4nO1xuZXhwb3J0IGNvbnN0IENBUlRfSVRFTV9TSE9SVF9NRVNTQUdFID0gXCJDYW4ndCBhZGQgdGhpcyBpdGVtIHRvIHlvdXIgY2FydFwiO1xuZXhwb3J0IGNvbnN0IENBUlRfSVRFTV9MT05HX01FU1NBR0UgPSAnQ291bGQgbm90IGFkZCB0aGUgcmVxdWVzdGVkIGl0ZW0gYXMgeW91IGFyZSBhbHJlYWR5IGF0IHRoZSBsaW1pdCBmb3IgdGhpcyBpdGVtIGluIHlvdXIgY2FydCc7XG5leHBvcnQgY29uc3QgQ0FSVF9ERUZBVUxUX1NIT1JUX01FU1NBR0UgPSAnU29tZXRoaW5nIHdlbnQgd3JvbmcgLi4uJzsiLCJpbXBvcnQgeyBBeGlvc0N1c3RvbUNvbmZpZyB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5pbXBvcnQgeyBDb29raWVIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvQ29va2llSGFuZGxlcic7XG5pbXBvcnQgeyBNVUlEQ29va2llTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcblxuLyogQWRkIHgtYXV0aG9yaXphdGlvbi1tdWlkIGhlYWRlciB0byByZXF1ZXN0IGJ5IGdldHRpbmcgTVVJRCBjb29raWVcbiAqL1xuY29uc3QgWEF1dGhNVUlESW50ZXJjZXB0b3IgPSAgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgICBpZihjb25maWcuTVVJREhlYWRlciAhPSBudWxsKSB7XG4gICAgICAgIGxldCBhdXRob3JpemF0aW9uTVVJRCA9ICBDb29raWVIYW5kbGVyLmdldENvb2tpZShNVUlEQ29va2llTmFtZSk7XG4gICAgICAgIGlmIChhdXRob3JpemF0aW9uTVVJRCAhPSBcIlwiKSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1tjb25maWcuTVVJREhlYWRlcl0gPSBhdXRob3JpemF0aW9uTVVJRDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IFhBdXRoTVVJREludGVyY2VwdG9yOyIsIi8vVGhlIGJlbG93IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZ3VpZCBpbiB0aGlzIHBhcnRpY3VsYXIgZm9ybWF0IC0gNDAgZGlnaXQgY2hhcmFjdGVyXG4vL2xlbmd0aCB3aXRoICctJyBkYXNoZXMgaW5jbHVkZWQuIHlvdSBjYW4gYWxzbyByZWZlcmUgdG8gZ2VuZXJhdGVDb29raWUuanMgZmlsZSBpbm9yZGVyIHRvIFxuLy9nZXQgYSBkaWZmZXJlbnQgZm9ybWF0IG9uZSB3aXRoIDM2IGNoYXJhY3RlciBsZW5ndGggYW5kIG5vIGRhc2hlcy5cbmV4cG9ydCBjb25zdCBjcmVhdGVHdWlkID0gKCkgPT4ge1xuICAgIGNvbnN0IGd1aWRQYXR0ZXJuID0gXCJ4eHh4eHh4eC14eHh4LTR4eHgtUnh4eC14eHh4eHh4eHh4eHhcIjtcbiAgICBmdW5jdGlvbiByYW5kb21IZXhEaWdpdCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZ2V0UmFuZG9tQmV0d2Vlblplcm9BbmRPbmUoKSAqIDE2KS50b1N0cmluZygxNik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGd1aWRQYXR0ZXJuLnJlcGxhY2UoL3gvZywgcmFuZG9tSGV4RGlnaXQpO1xuICAgIC8vIHVwZGF0ZSByZW1haW5pbmcgMiBiaXRzIG9mIGZpcnN0IGRpZ2l0IG9mIHRoZSBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkOlxuICAgIHJldHVybiByZXN1bHQucmVwbGFjZShcIlJcIiwgKDggfCBNYXRoLmZsb29yKGdldFJhbmRvbUJldHdlZW5aZXJvQW5kT25lKCkgKiAzKSkudG9TdHJpbmcoMTYpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJhbmRvbUJldHdlZW5aZXJvQW5kT25lID0gKCkgPT4ge1xuICAgIGNvbnN0IGNyeXB0bzogQ3J5cHRvID0gd2luZG93LmNyeXB0byB8fCAoPGFueT53aW5kb3cpLm1zQ3J5cHRvO1xuICAgIGlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdIC8gTWF0aC5wb3coMTYsIDgpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn0iLCJpbXBvcnQgeyBjcmVhdGVHdWlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uVXRpbHMnO1xuaW1wb3J0IHsgQ29va2llSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL0Nvb2tpZUhhbmRsZXInO1xuaW1wb3J0IHsgTVMwQ29va2llTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcblxuY29uc3QgUmlza1Nlc3Npb25JZEludGVyY2VwdG9yID0gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgaWYoY29uZmlnLnJpc2tJZEFwcGVuZClcbiAgICB7XG4gICAgICAgIGNvbnN0IHJpc2tJZCA9IENvb2tpZUhhbmRsZXIuZ2V0Q29va2llKE1TMENvb2tpZU5hbWUpIHx8IGNyZWF0ZUd1aWQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGF0YSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKGNvbmZpZy5kYXRhKTtcbiAgICAgICAgICAgIHBheWxvYWQucmlza1Nlc3Npb25JZCA9IHJpc2tJZDtcbiAgICAgICAgICAgIGNvbmZpZy5kYXRhID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5kYXRhID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25maWcuZGF0YVsncmlza1Nlc3Npb25JZCddID0gcmlza0lkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJpc2tTZXNzaW9uSWRJbnRlcmNlcHRvcjtcbiIsIlxuY29uc3QgRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3IgPSAoY29uZmlnOiBhbnkpID0+IHtcbiAgICBpZihjb25maWcuRmlyc3ROYW1lKVxuICAgIHtcbiAgICAgICAgY29uZmlnLmhlYWRlcnNbJ0ZpcnN0TmFtZSddID0gY29uZmlnLkZpcnN0TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3I7XG4iLCJpbXBvcnQge0N1c3RvbVdpbmRvd30gZnJvbSAnLi4vd2luZG93L0N1c3RvbVdpbmRvdyc7XG4vLyBjYXN0IGdsb2JhbCB2YXIgd2luZG93IHdpdGggQ3VzdG9tV2luZG93XG5kZWNsYXJlIGxldCB3aW5kb3c6IEN1c3RvbVdpbmRvdztcblxuLyogQSB1dGlsaXR5IGNsYXNzIHRvIHJldHJpZXZlIHRlbnQgb3B0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgVGVudE9wdGlvbnNIYW5kbGVyIHtcbiAgICBzdGF0aWMgYXN5bmMgaXNUZW50ZWRQYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy50ZW50b3B0aW9ucyAmJiB3aW5kb3cudGVudG9wdGlvbnMuaXNUZW50ZWRQYWdlKSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cudGVudG9wdGlvbnMuaXNUZW50ZWRQYWdlKTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7IFRlbnRPcHRpb25zSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL1RlbnRPcHRpb25zSGFuZGxlcic7XG5pbXBvcnQgeyBURU5URURfUEFHRV9GTEFHX0hFQURFUl9OQU1FIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25zdGFudHMnO1xuXG5jb25zdCBUZW50T3B0aW9uc0hlYWRlckludGVyY2VwdG9yID0gYXN5bmMgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcblxuICAgIGNvbnN0IGlzVGVudGVkUGFnZSA9IGF3YWl0IFRlbnRPcHRpb25zSGFuZGxlci5pc1RlbnRlZFBhZ2UoKTtcblxuICAgIGlmKGlzVGVudGVkUGFnZSAhPSBudWxsICYmIFwidHJ1ZVwiID09PSBpc1RlbnRlZFBhZ2UpXG4gICAge1xuICAgICAgICBjb25maWcuaGVhZGVyc1tURU5URURfUEFHRV9GTEFHX0hFQURFUl9OQU1FXSA9IGlzVGVudGVkUGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvcjtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IGlzUmV0cnlBbGxvd2VkIGZyb20gJ2lzLXJldHJ5LWFsbG93ZWQnO1xuZXhwb3J0IHZhciBuYW1lc3BhY2UgPSAnYXhpb3MtcmV0cnknO1xuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05ldHdvcmtFcnJvcihlcnJvcikge1xuICB2YXIgQ09ERV9FWENMVURFX0xJU1QgPSBbJ0VSUl9DQU5DRUxFRCcsICdFQ09OTkFCT1JURUQnXTtcbiAgcmV0dXJuICFlcnJvci5yZXNwb25zZSAmJiBCb29sZWFuKGVycm9yLmNvZGUpICYmIC8vIFByZXZlbnRzIHJldHJ5aW5nIGNhbmNlbGxlZCByZXF1ZXN0c1xuICAhQ09ERV9FWENMVURFX0xJU1QuaW5jbHVkZXMoZXJyb3IuY29kZSkgJiYgLy8gUHJldmVudHMgcmV0cnlpbmcgdGltZWQgb3V0ICYgY2FuY2VsbGVkIHJlcXVlc3RzXG4gIGlzUmV0cnlBbGxvd2VkKGVycm9yKSAvLyBQcmV2ZW50cyByZXRyeWluZyB1bnNhZmUgZXJyb3JzXG4gIDtcbn1cbnZhciBTQUZFX0hUVFBfTUVUSE9EUyA9IFsnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddO1xudmFyIElERU1QT1RFTlRfSFRUUF9NRVRIT0RTID0gU0FGRV9IVFRQX01FVEhPRFMuY29uY2F0KFsncHV0JywgJ2RlbGV0ZSddKTtcbi8qKlxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvclxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRyeWFibGVFcnJvcihlcnJvcikge1xuICByZXR1cm4gZXJyb3IuY29kZSAhPT0gJ0VDT05OQUJPUlRFRCcgJiYgKCFlcnJvci5yZXNwb25zZSB8fCBlcnJvci5yZXNwb25zZS5zdGF0dXMgPj0gNTAwICYmIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA8PSA1OTkpO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVSZXF1ZXN0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFlcnJvci5jb25maWcpIHtcbiAgICAvLyBDYW5ub3QgZGV0ZXJtaW5lIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSByZXRyaWVkXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpICYmIFNBRkVfSFRUUF9NRVRIT0RTLmluZGV4T2YoZXJyb3IuY29uZmlnLm1ldGhvZCkgIT09IC0xO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFlcnJvci5jb25maWcpIHtcbiAgICAvLyBDYW5ub3QgZGV0ZXJtaW5lIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSByZXRyaWVkXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpICYmIElERU1QT1RFTlRfSFRUUF9NRVRIT0RTLmluZGV4T2YoZXJyb3IuY29uZmlnLm1ldGhvZCkgIT09IC0xO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuIGlzTmV0d29ya0Vycm9yKGVycm9yKSB8fCBpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IoZXJyb3IpO1xufVxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IC0gZGVsYXkgaW4gbWlsbGlzZWNvbmRzLCBhbHdheXMgMFxuICovXG5cbmZ1bmN0aW9uIG5vRGVsYXkoKSB7XG4gIHJldHVybiAwO1xufVxuLyoqXG4gKiBTZXQgZGVsYXlGYWN0b3IgMTAwMCBmb3IgYW4gZXhwb25lbnRpYWwgZGVsYXkgdG8gb2NjdXIgb24gdGhlIG9yZGVyXG4gKiBvZiBzZWNvbmRzXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtyZXRyeU51bWJlcj0wXVxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvciAtIHVudXNlZDsgZm9yIGV4aXN0aW5nIEFQSSBvZiByZXRyeURlbGF5IGNhbGxiYWNrXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtkZWxheUZhY3Rvcj0xMDBdIG1pbGxpc2Vjb25kc1xuICogQHJldHVybiB7bnVtYmVyfSAtIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9uZW50aWFsRGVsYXkoKSB7XG4gIHZhciByZXRyeU51bWJlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMDtcbiAgdmFyIGVycm9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBkZWxheUZhY3RvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTAwO1xuICB2YXIgZGVsYXkgPSBNYXRoLnBvdygyLCByZXRyeU51bWJlcikgKiBkZWxheUZhY3RvcjtcbiAgdmFyIHJhbmRvbVN1bSA9IGRlbGF5ICogMC4yICogTWF0aC5yYW5kb20oKTsgLy8gMC0yMCUgb2YgdGhlIGRlbGF5XG5cbiAgcmV0dXJuIGRlbGF5ICsgcmFuZG9tU3VtO1xufVxuLyoqIEB0eXBlIHtJQXhpb3NSZXRyeUNvbmZpZ30gKi9cblxuZXhwb3J0IHZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHJldHJpZXM6IDMsXG4gIHJldHJ5Q29uZGl0aW9uOiBpc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3IsXG4gIHJldHJ5RGVsYXk6IG5vRGVsYXksXG4gIHNob3VsZFJlc2V0VGltZW91dDogZmFsc2UsXG4gIG9uUmV0cnk6ICgpID0+IHt9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBheGlvcy1yZXRyeSBvcHRpb25zIGZvciB0aGUgY3VycmVudCByZXF1ZXN0XG4gKiBAcGFyYW0gIHtBeGlvc1JlcXVlc3RDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtICB7SUF4aW9zUmV0cnlDb25maWd9IGRlZmF1bHRPcHRpb25zXG4gKiBAcmV0dXJuIHtJQXhpb3NSZXRyeUNvbmZpZ0V4dGVuZGVkfVxuICovXG5cbmZ1bmN0aW9uIGdldFJlcXVlc3RPcHRpb25zKGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpIHtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBERUZBVUxUX09QVElPTlMpLCBkZWZhdWx0T3B0aW9ucyksIGNvbmZpZ1tuYW1lc3BhY2VdKTtcbn1cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW5kIHJldHVybnMgdGhlIHJldHJ5IHN0YXRlIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdC9jb25maWdcbiAqIEBwYXJhbSAge0F4aW9zUmVxdWVzdENvbmZpZ30gY29uZmlnXG4gKiBAcGFyYW0gIHtJQXhpb3NSZXRyeUNvbmZpZ30gZGVmYXVsdE9wdGlvbnNcbiAqIEByZXR1cm4ge0lBeGlvc1JldHJ5Q29uZmlnRXh0ZW5kZWR9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U3RhdGUoY29uZmlnLCBkZWZhdWx0T3B0aW9ucykge1xuICB2YXIgY3VycmVudFN0YXRlID0gZ2V0UmVxdWVzdE9wdGlvbnMoY29uZmlnLCBkZWZhdWx0T3B0aW9ucyk7XG4gIGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50ID0gY3VycmVudFN0YXRlLnJldHJ5Q291bnQgfHwgMDtcbiAgY29uZmlnW25hbWVzcGFjZV0gPSBjdXJyZW50U3RhdGU7XG4gIHJldHVybiBjdXJyZW50U3RhdGU7XG59XG4vKipcbiAqIEBwYXJhbSAge0F4aW9zfSBheGlvc1xuICogQHBhcmFtICB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBjb25maWdcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpeENvbmZpZyhheGlvcywgY29uZmlnKSB7XG4gIGlmIChheGlvcy5kZWZhdWx0cy5hZ2VudCA9PT0gY29uZmlnLmFnZW50KSB7XG4gICAgZGVsZXRlIGNvbmZpZy5hZ2VudDtcbiAgfVxuXG4gIGlmIChheGlvcy5kZWZhdWx0cy5odHRwQWdlbnQgPT09IGNvbmZpZy5odHRwQWdlbnQpIHtcbiAgICBkZWxldGUgY29uZmlnLmh0dHBBZ2VudDtcbiAgfVxuXG4gIGlmIChheGlvcy5kZWZhdWx0cy5odHRwc0FnZW50ID09PSBjb25maWcuaHR0cHNBZ2VudCkge1xuICAgIGRlbGV0ZSBjb25maWcuaHR0cHNBZ2VudDtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgcmV0cnlDb25kaXRpb24gaWYgcmVxdWVzdCBjYW4gYmUgcmV0cmllZC4gSGFuZGxlcyBpdCdzIHJldHVybmluZyB2YWx1ZSBvciBQcm9taXNlLlxuICogQHBhcmFtICB7SUF4aW9zUmV0cnlDb25maWdFeHRlbmRlZH0gY3VycmVudFN0YXRlXG4gKiBAcGFyYW0gIHtFcnJvcn0gZXJyb3JcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRSZXRyeShfeCwgX3gyKSB7XG4gIHJldHVybiBfc2hvdWxkUmV0cnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogQWRkcyByZXNwb25zZSBpbnRlcmNlcHRvcnMgdG8gYW4gYXhpb3MgaW5zdGFuY2UgdG8gcmV0cnkgcmVxdWVzdHMgZmFpbGVkIGR1ZSB0byBuZXR3b3JrIGlzc3Vlc1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbiAqXG4gKiBheGlvc1JldHJ5KGF4aW9zLCB7IHJldHJpZXM6IDMgfSk7XG4gKlxuICogYXhpb3MuZ2V0KCdodHRwOi8vZXhhbXBsZS5jb20vdGVzdCcpIC8vIFRoZSBmaXJzdCByZXF1ZXN0IGZhaWxzIGFuZCB0aGUgc2Vjb25kIHJldHVybnMgJ29rJ1xuICogICAudGhlbihyZXN1bHQgPT4ge1xuICogICAgIHJlc3VsdC5kYXRhOyAvLyAnb2snXG4gKiAgIH0pO1xuICpcbiAqIC8vIEV4cG9uZW50aWFsIGJhY2stb2ZmIHJldHJ5IGRlbGF5IGJldHdlZW4gcmVxdWVzdHNcbiAqIGF4aW9zUmV0cnkoYXhpb3MsIHsgcmV0cnlEZWxheSA6IGF4aW9zUmV0cnkuZXhwb25lbnRpYWxEZWxheX0pO1xuICpcbiAqIC8vIEN1c3RvbSByZXRyeSBkZWxheVxuICogYXhpb3NSZXRyeShheGlvcywgeyByZXRyeURlbGF5IDogKHJldHJ5Q291bnQpID0+IHtcbiAqICAgcmV0dXJuIHJldHJ5Q291bnQgKiAxMDAwO1xuICogfX0pO1xuICpcbiAqIC8vIEFsc28gd29ya3Mgd2l0aCBjdXN0b20gYXhpb3MgaW5zdGFuY2VzXG4gKiBjb25zdCBjbGllbnQgPSBheGlvcy5jcmVhdGUoeyBiYXNlVVJMOiAnaHR0cDovL2V4YW1wbGUuY29tJyB9KTtcbiAqIGF4aW9zUmV0cnkoY2xpZW50LCB7IHJldHJpZXM6IDMgfSk7XG4gKlxuICogY2xpZW50LmdldCgnL3Rlc3QnKSAvLyBUaGUgZmlyc3QgcmVxdWVzdCBmYWlscyBhbmQgdGhlIHNlY29uZCByZXR1cm5zICdvaydcbiAqICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAqICAgICByZXN1bHQuZGF0YTsgLy8gJ29rJ1xuICogICB9KTtcbiAqXG4gKiAvLyBBbGxvd3MgcmVxdWVzdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gKiBjbGllbnRcbiAqICAgLmdldCgnL3Rlc3QnLCB7XG4gKiAgICAgJ2F4aW9zLXJldHJ5Jzoge1xuICogICAgICAgcmV0cmllczogMFxuICogICAgIH1cbiAqICAgfSlcbiAqICAgLmNhdGNoKGVycm9yID0+IHsgLy8gVGhlIGZpcnN0IHJlcXVlc3QgZmFpbHNcbiAqICAgICBlcnJvciAhPT0gdW5kZWZpbmVkXG4gKiAgIH0pO1xuICpcbiAqIEBwYXJhbSB7QXhpb3N9IGF4aW9zIEFuIGF4aW9zIGluc3RhbmNlICh0aGUgYXhpb3Mgb2JqZWN0IG9yIG9uZSBjcmVhdGVkIGZyb20gYXhpb3MuY3JlYXRlKVxuICogQHBhcmFtIHtPYmplY3R9IFtkZWZhdWx0T3B0aW9uc11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdE9wdGlvbnMucmV0cmllcz0zXSBOdW1iZXIgb2YgcmV0cmllc1xuICogQHBhcmFtIHtib29sZWFufSBbZGVmYXVsdE9wdGlvbnMuc2hvdWxkUmVzZXRUaW1lb3V0PWZhbHNlXVxuICogICAgICAgIERlZmluZXMgaWYgdGhlIHRpbWVvdXQgc2hvdWxkIGJlIHJlc2V0IGJldHdlZW4gcmV0cmllc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2RlZmF1bHRPcHRpb25zLnJldHJ5Q29uZGl0aW9uPWlzTmV0d29ya09ySWRlbXBvdGVudFJlcXVlc3RFcnJvcl1cbiAqICAgICAgICBBIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgZXJyb3IgY2FuIGJlIHJldHJpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtkZWZhdWx0T3B0aW9ucy5yZXRyeURlbGF5PW5vRGVsYXldXG4gKiAgICAgICAgQSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGRlbGF5IGJldHdlZW4gcmV0cnkgcmVxdWVzdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtkZWZhdWx0T3B0aW9ucy5vblJldHJ5PSgpPT57fV1cbiAqICAgICAgICBBIGZ1bmN0aW9uIHRvIGdldCBub3RpZmllZCB3aGVuIGEgcmV0cnkgb2NjdXJzXG4gKiBAcmV0dXJuIHt7IHJlcXVlc3RJbnRlcmNlcHRvcklkOiBudW1iZXIsIHJlc3BvbnNlSW50ZXJjZXB0b3JJZDogbnVtYmVyIH19XG4gKiAgICAgICAgVGhlIGlkcyBvZiB0aGUgaW50ZXJjZXB0b3JzIGFkZGVkIHRvIHRoZSByZXF1ZXN0IGFuZCB0byB0aGUgcmVzcG9uc2UgKHNvIHRoZXkgY2FuIGJlIGVqZWN0ZWQgYXQgYSBsYXRlciB0aW1lKVxuICovXG5cblxuZnVuY3Rpb24gX3Nob3VsZFJldHJ5KCkge1xuICBfc2hvdWxkUmV0cnkgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKGN1cnJlbnRTdGF0ZSwgZXJyb3IpIHtcbiAgICB2YXIge1xuICAgICAgcmV0cmllcyxcbiAgICAgIHJldHJ5Q29uZGl0aW9uXG4gICAgfSA9IGN1cnJlbnRTdGF0ZTtcbiAgICB2YXIgc2hvdWxkUmV0cnlPclByb21pc2UgPSBjdXJyZW50U3RhdGUucmV0cnlDb3VudCA8IHJldHJpZXMgJiYgcmV0cnlDb25kaXRpb24oZXJyb3IpOyAvLyBUaGlzIGNvdWxkIGJlIGEgcHJvbWlzZVxuXG4gICAgaWYgKHR5cGVvZiBzaG91bGRSZXRyeU9yUHJvbWlzZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBzaG91bGRSZXRyeVByb21pc2VSZXN1bHQgPSB5aWVsZCBzaG91bGRSZXRyeU9yUHJvbWlzZTsgLy8ga2VlcCByZXR1cm4gdHJ1ZSB1bmxlc3Mgc2hvdWxkUmV0cnlQcm9taXNlUmVzdWx0IHJldHVybiBmYWxzZSBmb3IgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgIHJldHVybiBzaG91bGRSZXRyeVByb21pc2VSZXN1bHQgIT09IGZhbHNlO1xuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFJldHJ5T3JQcm9taXNlO1xuICB9KTtcbiAgcmV0dXJuIF9zaG91bGRSZXRyeS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBheGlvc1JldHJ5KGF4aW9zLCBkZWZhdWx0T3B0aW9ucykge1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9ySWQgPSBheGlvcy5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoY29uZmlnID0+IHtcbiAgICB2YXIgY3VycmVudFN0YXRlID0gZ2V0Q3VycmVudFN0YXRlKGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpO1xuICAgIGN1cnJlbnRTdGF0ZS5sYXN0UmVxdWVzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH0pO1xuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvcklkID0gYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShudWxsLCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChlcnJvcikge1xuICAgICAgdmFyIHtcbiAgICAgICAgY29uZmlnXG4gICAgICB9ID0gZXJyb3I7IC8vIElmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24gdG8gcmV0cnkgdGhlIHJlcXVlc3RcblxuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGdldEN1cnJlbnRTdGF0ZShjb25maWcsIGRlZmF1bHRPcHRpb25zKTtcblxuICAgICAgaWYgKHlpZWxkIHNob3VsZFJldHJ5KGN1cnJlbnRTdGF0ZSwgZXJyb3IpKSB7XG4gICAgICAgIGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50ICs9IDE7XG4gICAgICAgIHZhciB7XG4gICAgICAgICAgcmV0cnlEZWxheSxcbiAgICAgICAgICBzaG91bGRSZXNldFRpbWVvdXQsXG4gICAgICAgICAgb25SZXRyeVxuICAgICAgICB9ID0gY3VycmVudFN0YXRlO1xuICAgICAgICB2YXIgZGVsYXkgPSByZXRyeURlbGF5KGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50LCBlcnJvcik7IC8vIEF4aW9zIGZhaWxzIG1lcmdpbmcgdGhpcyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYmVjYXVzZSBpdCBoYXMgYW4gaXNzdWVcbiAgICAgICAgLy8gd2l0aCBjaXJjdWxhciBzdHJ1Y3R1cmVzOiBodHRwczovL2dpdGh1Yi5jb20vbXphYnJpc2tpZS9heGlvcy9pc3N1ZXMvMzcwXG5cbiAgICAgICAgZml4Q29uZmlnKGF4aW9zLCBjb25maWcpO1xuXG4gICAgICAgIGlmICghc2hvdWxkUmVzZXRUaW1lb3V0ICYmIGNvbmZpZy50aW1lb3V0ICYmIGN1cnJlbnRTdGF0ZS5sYXN0UmVxdWVzdFRpbWUpIHtcbiAgICAgICAgICB2YXIgbGFzdFJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSBjdXJyZW50U3RhdGUubGFzdFJlcXVlc3RUaW1lO1xuICAgICAgICAgIHZhciB0aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQgLSBsYXN0UmVxdWVzdER1cmF0aW9uIC0gZGVsYXk7XG5cbiAgICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbmZpZy50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0ID0gW2RhdGEgPT4gZGF0YV07XG4gICAgICAgIHlpZWxkIG9uUmV0cnkoY3VycmVudFN0YXRlLnJldHJ5Q291bnQsIGVycm9yLCBjb25maWcpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoYXhpb3MoY29uZmlnKSksIGRlbGF5KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKF94Mykge1xuICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9KCkpO1xuICByZXR1cm4ge1xuICAgIHJlcXVlc3RJbnRlcmNlcHRvcklkLFxuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JJZFxuICB9O1xufSAvLyBDb21wYXRpYmlsaXR5IHdpdGggQ29tbW9uSlNcblxuYXhpb3NSZXRyeS5pc05ldHdvcmtFcnJvciA9IGlzTmV0d29ya0Vycm9yO1xuYXhpb3NSZXRyeS5pc1NhZmVSZXF1ZXN0RXJyb3IgPSBpc1NhZmVSZXF1ZXN0RXJyb3I7XG5heGlvc1JldHJ5LmlzSWRlbXBvdGVudFJlcXVlc3RFcnJvciA9IGlzSWRlbXBvdGVudFJlcXVlc3RFcnJvcjtcbmF4aW9zUmV0cnkuaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yID0gaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yO1xuYXhpb3NSZXRyeS5leHBvbmVudGlhbERlbGF5ID0gZXhwb25lbnRpYWxEZWxheTtcbmF4aW9zUmV0cnkuaXNSZXRyeWFibGVFcnJvciA9IGlzUmV0cnlhYmxlRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBDQVJUX1BFUkYsIFhfQUVNX0xPQURfVEVTVCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcbmltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcblxuY29uc3QgWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3IgPSAoY29uZmlnOiBBeGlvc0N1c3RvbUNvbmZpZykgPT4ge1xuICAgXG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoQ0FSVF9QRVJGKyc9dHJ1ZScpKXtcblxuICAgICAgICBjb25maWcuaGVhZGVyc1tYX0FFTV9MT0FEX1RFU1RdID0gJ3RydWUnO1xuICAgIH1cbiAgIFxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFhBRU1Mb2FkVGVzdEludGVyY2VwdG9yOyIsImltcG9ydCB7IFhfTVNfVkVDVE9SX0lEIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25zdGFudHMnO1xuaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuXG4vKiBBZGQgeC1tcy12ZWN0b3ItaWQgaGVhZGVyIHRvIHJlcXVlc3QgYnkgZ2V0dGluZyBNVUlEIGNvb2tpZVxuICovXG5jb25zdCBYTVNWZWN0b3JJZEludGVyY2VwdG9yID0gIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG4gICAgaWYgKGNvbmZpZy54TVNWZWN0b3JJZCkgXG4gICAgICAgIGNvbmZpZy5oZWFkZXJzW1hfTVNfVkVDVE9SX0lEXSA9IGNvbmZpZy54TVNWZWN0b3JJZDtcbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IFhNU1ZlY3RvcklkSW50ZXJjZXB0b3I7IiwiaW1wb3J0IHsgWF9NU19VQ1NfU0lELCBVY3NTaWRDb29raWVOYW1lIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25zdGFudHMnO1xuaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuaW1wb3J0IHsgQ29va2llSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL0Nvb2tpZUhhbmRsZXInO1xuXG4vKiBBZGQgeC1tcy11c2Nfc2lkIGhlYWRlciB0byByZXF1ZXN0IGlmIHByZXNlbnRcbiAqL1xuY29uc3QgWE1TVWNzQ29va2llSW50ZXJjZXB0b3IgPSAgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgICBjb25zdCBjb29raWVWYWx1ZSA9IENvb2tpZUhhbmRsZXIuZ2V0Q29va2llKFVjc1NpZENvb2tpZU5hbWUpO1xuICAgIGlmIChjb29raWVWYWx1ZSkgXG4gICAgICAgIGNvbmZpZy5oZWFkZXJzW1hfTVNfVUNTX1NJRF0gPSBjb29raWVWYWx1ZTtcbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IFhNU1Vjc0Nvb2tpZUludGVyY2VwdG9yOyIsImltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2V9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBDb21wYWN0VGlja2V0SGVhZGVySW50ZXJjZXB0b3IgZnJvbSAnLi4vaW50ZXJjZXB0b3JzL0NvbXBhY3RUaWNrZXRIZWFkZXJJbnRlcmNlcHRvcic7XG5pbXBvcnQgTXNDVkhlYWRlckludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9Nc0NWSGVhZGVySW50ZXJjZXB0b3InO1xuaW1wb3J0IFhBdXRoTVVJREludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9YQXV0aE1VSURJbnRlcmNlcHRvcic7XG5pbXBvcnQgUmlza1Nlc3Npb25JZEludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9SaXNrU2Vzc2lvbklER2VuZXJhdG9ySW50ZXJjZXB0b3InO1xuaW1wb3J0IEZpcnN0TmFtZUhlYWRlckludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9GaXJzdE5hbWVIZWFkZXJJbnRlcmNlcHRvcic7XG5pbXBvcnQgVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvcic7XG5pbXBvcnQgYXhpb3NSZXRyeSBmcm9tICdheGlvcy1yZXRyeSdcbmltcG9ydCBYQUVNTG9hZFRlc3RJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3InO1xuaW1wb3J0IFhNU1ZlY3RvcklkSW50ZXJjZXB0b3IgZnJvbSAnLi4vaW50ZXJjZXB0b3JzL1hNU1ZlY3RvcklkSW50ZXJjZXB0b3InO1xuaW1wb3J0IFhNU1Vjc0Nvb2tpZUludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9YTVNVY3NDb29raWVJbnRlcmNlcHRvcic7XG5cblxuLyoqXG4gKiBCdWlsZCBjdXN0b20gSHR0cCBjbGllbnQuIENsaWVudCBjYW4gY29udGFpbiB2YXJpYWJsZSBwYXJ0cyB0byB1c2UgaWYgbmVlZGVkLlxuICogZXhhbXBsZTpcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBIdHRwQ2xpZW50QnVpbGRlcigpLmFkZEF1dGhlbnRpY2F0aW9uKCkuYWRkWEF1dGhNVUlEKCkuYnVpbGQoKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRCdWlsZGVyIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgUkVUUklFU19DT1VOVF9ERUZBVUxUID0gMztcbiAgICBzdGF0aWMgcmVhZG9ubHkgUkVUUllfVElNRU9VVF9ERUZBVUxUID0gNTA7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IEF4aW9zSW5zdGFuY2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fY2xpZW50ID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIENvcnJlbGF0aW9uIFZlY3RvciB0byB0aGUgcmVxdWVzdCBoZWFkZXJcbiAgICAgKi9cbiAgICBhZGRDVigpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoTXNDVkhlYWRlckludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIEF1dGhlbnRpY2F0aW9uIHRva2VucyBhdmFpYWJsZSBpbiB0aGUgcmVxdWVzdCBoZWFkZXJcbiAgICAgKi9cbiAgICBhZGRBdXRoZW50aWNhdGlvbigpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoQ29tcGFjdFRpY2tldEhlYWRlckludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIE1VSUQgY29va2llIGF2YWlhYmxlIGluIHRoZSByZXF1ZXN0IGhlYWRlclxuICAgICAqL1xuICAgIGFkZFhBdXRoTVVJRCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoWEF1dGhNVUlESW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGQgcmlza1Nlc3Npb25JZCB0byB0aGUgcmVxdWVzdCBoZWFkZXIgb2YgYW55IEFQSSBjYWxsXG4gICAgICovXG4gICAgYWRkUmlza1Nlc3Npb25JZCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoUmlza1Nlc3Npb25JZEludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIEZpcnN0IE5hbWUgdG8gdGhlIHJlcXVlc3QgaGVhZGVyIG9mIGFueSBBUEkgY2FsbFxuICAgICAqL1xuICAgIGFkZEZpcnN0TmFtZSgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGQgdGVudCBvcHRpb25zIHRvIHRoZSByZXF1ZXN0IGhlYWRlciBvZiBhbnkgQVBJIGNhbGxcbiAgICAgKi9cbiAgICBhZGRUZW50T3B0aW9ucygpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBhZGQgQUVNIExvYWQgdGVzdCBvcHRpb25zIHRvIHRoZSByZXF1ZXN0IGhlYWRlciBvZiBhbnkgQVBJIGNhbGxcbiAgICAgKi9cbiAgICAgYWRkWEFFTUxvYWRUZXN0KCk6IEh0dHBDbGllbnRCdWlsZGVyIHtcbiAgICAgICAgdGhpcy5fY2xpZW50LmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShYQUVNTG9hZFRlc3RJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgICAvKipcbiAgICAgKiBhZGQgWC1NUy1WZWN0b3JfSWQgb3B0aW9ucyB0byB0aGUgcmVxdWVzdCBoZWFkZXIgb2YgYW55IEFQSSBjYWxsXG4gICAgICovXG4gICAgICBhZGRYTVNWZWN0b3JJZCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoWE1TVmVjdG9ySWRJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAqIGFkZCB4LW1zLXVjcy1zaWQgdG8gdGhlIHJlcXVlc3QgaGVhZGVyIG9mIGFueSBBUEkgY2FsbFxuICAgICovXG4gICAgIGFkZFVjc1NpZCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgdGhpcy5fY2xpZW50LmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShYTVNVY3NDb29raWVJbnRlcmNlcHRvcik7XG4gICAgICAgcmV0dXJuIHRoaXM7XG4gICB9XG4gICAgLyoqXG4gICAgICogaW50ZXJjZXB0cyBmYWlsZWQgcmVxdWVzdHMgKEhUVFAgY29kZSA1WFgpIGFuZCByZXRyaWVzIHRoZW0gd2hlbmV2ZXIgcG9zc2libGUuXG4gICAgICogQHBhcmFtIHJldHJ5Q291bnQgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBiZWZvcmUgZmFpbGluZy5cbiAgICAgKiBAcGFyYW0gcmV0cnlUaW1lb3V0IERlbGF5IGJlZm9yZSByZXRyeVxuICAgICAqL1xuICAgIGFkZFJldHJ5KHJldHJ5Q291bnQ6bnVtYmVyLHJldHJ5VGltZW91dDpudW1iZXIpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIGNvbnN0IGRlbGF5RnVuYyA9IChyZXRyeUNvdW50OiBudW1iZXIsIGVycm9yOiBFcnJvcikgPT4gcmV0cnlUaW1lb3V0O1xuICAgICAgICBheGlvc1JldHJ5KHRoaXMuX2NsaWVudCwge1xuICAgICAgICAgICAgcmV0cmllczogcmV0cnlDb3VudCxcbiAgICAgICAgICAgIHJldHJ5RGVsYXk6IGRlbGF5RnVuY1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYnVpbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gICAgfVxufSIsImltcG9ydCB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tICdheGlvcyc7XG5pbXBvcnQge0h0dHBDbGllbnRCdWlsZGVyfSBmcm9tICcuL0h0dHBDbGllbnRCdWlsZGVyJ1xuXG4vKiBFeHBvc2VzIGEgSHR0cCBjbGllbnQgaW50ZXJmYWNlIHdpdGhcbiAqICAgQ29tcGFjdEhlYWRlck5hbWU6IGF1dGhlbnRpY2F0aW9uIHRva2VucyBhZGRlZCB0byB0aGUgaGVhZGVyXG4gKiAgIENvbXBhY3RIZWFkZXJQcmVmaXg6IHByZWZpeCB0byBiZSBhZGRlZCB0byBhdXRoZW50aWNhdGlvbiB0b2tlbiBpbiBoZWFkZXJcbiAqICAgTVVJREhlYWRlcjogbXVpZCBjb29raWUgYWRkZWQgdG8gdGhlIGhlYWRlclxuICogVG8gdXNlIHRoZSBjbGllbnQsIHlvdSBjYW4gZXhwb3J0IHRoaXMgaW50ZXJmYWNlIGFuZCBtYWtlIHJlc3RmdWwgcmVxdWVzdHMgZm9sbG93aW5nIHRoZSBzeW50YXggZnJvbSBheGlvcyBsaWJyYXJ5XG4gKi9cblxuLy9BZGRDVigpIG5lZWQgdG8gYmUgcmVtb3ZlZCB3aGVuIDFEUyBjb25maWd1cmF0aW9uIGlzIHJlYWR5IGluIGhpZ2hlciBlbnZpcm9ubWVudHNcbmV4cG9ydCBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnRCdWlsZGVyKClcbiAgICAuYWRkQ1YoKVxuICAgIC5hZGRBdXRoZW50aWNhdGlvbigpXG4gICAgLmFkZFhBdXRoTVVJRCgpXG4gICAgLmFkZFJpc2tTZXNzaW9uSWQoKVxuICAgIC5hZGRSZXRyeShIdHRwQ2xpZW50QnVpbGRlci5SRVRSSUVTX0NPVU5UX0RFRkFVTFQsIEh0dHBDbGllbnRCdWlsZGVyLlJFVFJZX1RJTUVPVVRfREVGQVVMVClcbiAgICAuYWRkRmlyc3ROYW1lKClcbiAgICAuYWRkVGVudE9wdGlvbnMoKVxuICAgIC5hZGRYQUVNTG9hZFRlc3QoKVxuICAgIC5hZGRYTVNWZWN0b3JJZCgpXG4gICAgLmFkZFVjc1NpZCgpXG4gICAgLmJ1aWxkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXhpb3NDdXN0b21Db25maWcgZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWcge1xuICAgIENvbXBhY3RIZWFkZXJOYW1lPzogc3RyaW5nO1xuICAgIENvbXBhY3RIZWFkZXJQcmVmaXg/OiBzdHJpbmc7XG4gICAgQWFkSGVhZGVyUHJlZml4Pzogc3RyaW5nO1xuICAgIE1VSURIZWFkZXI/OiBzdHJpbmc7XG4gICAgcmlza0lkQXBwZW5kPzogYm9vbGVhbjtcbiAgICBGaXJzdE5hbWU/OiBzdHJpbmc7XG4gICAgaXNUZW50ZWRQYWdlPzogc3RyaW5nO1xuICAgIHhBZW1Mb2FkVGVzdEhlYWRlcj86IHN0cmluZztcbiAgICB4TVNWZWN0b3JJZD86IHN0cmluZztcbiAgICBjdj86IHN0cmluZztcbiAgICBVY3NTaWRIZWFkZXI/OiBzdHJpbmc7XG59XG4iLCJpbXBvcnQgeyBIdHRwQ2xpZW50QnVpbGRlciB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudEJ1aWxkZXInO1xuaW1wb3J0IHsgQXhpb3NFcnJvciwgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJbmZvIHtcbiAgICBBdXRoVGlja2V0Pzogc3RyaW5nO1xuICAgIEZpcnN0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VyIGluZm8gc2luZ2VsdG9uIHJldHVybnMgcHJvbWlzZSBmcm9tIGF4aW9zIEh0dHBDbGllbnRcbiAqIFVzZXJJbmZvU2luZ2xldG9uLmdldEluc3RhbmNlKCkuZ2V0VXNlckluZm8oKS50aGVuKCBkYXRhICA9PiB7Y29uc29sZS5sb2coZGF0YSk7fSlcbiAqL1xuXG5leHBvcnQgY2xhc3MgVXNlckluZm9TaW5nbGV0b24ge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXNlckluZm9TaW5nbGV0b247XG4gICAgcHJpdmF0ZSBfaXNDb25maWd1cmVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3VzZXJJbmZvOiBQcm9taXNlPFVzZXJJbmZvPjtcblxuICAgIHB1YmxpYyBnZXRVc2VySW5mbygpOiBQcm9taXNlPFVzZXJJbmZvPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCB1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcudXNlckluZm8tY29uZmlnJyk7XG4gICAgICAgIGNvbnN0IG1lQ29udHJvbENvbmZpZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLm1lQ29udHJvbC1jb25maWdJbmZvJyk7XG4gICAgICAgIGNvbnN0IGlzVjJFbmFibGVkID0gdGhpcy5pc1YyRW5hYmxlZCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgY2xhaW1zVVJMID0gdGhpcy5nZXRVcmwodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQpO1xuICAgICAgICBjb25zdCB0aW1lb3V0SW5NUyA9IHRoaXMuZ2V0VGltZW91dCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzTWVDb250cm9sRW5hYmxlID0gdGhpcy5pc01lQ29udHJvbEVuYWJsZShtZUNvbnRyb2xDb25maWdFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcmVxdWVzdENvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgICAgICAgdGltZW91dDogdGltZW91dEluTVMsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQgIT09IG51bGwgJiYgY2xhaW1zVVJMICE9PSBudWxsICYmIGlzTWVDb250cm9sRW5hYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbmZpZ3VyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvL2NoZWNrIGlmIHYydXNlcmluZm8gaXMgZW5hYmxlZCwgaWYgaXQgaXMgZ2V0IHRoZSB2MnVzZXJpbmZvdXJsIGFuZCBwZXJmb3JtIHYyVXNlckluZm9DYWxsIG9uIHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoaXNWMkVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VySW5mb1YyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy51c2VySW5mby1jb25maWcnKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdjJ1cmwnKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29uZmlnVjI6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGltZW91dEluTVMsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOntydTogYCR7bG9jYXRpb24uaG9zdG5hbWV9JHtsb2NhdGlvbi5wYXRobmFtZX0ke2xvY2F0aW9uLnNlYXJjaH1gfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLl91c2VySW5mbyA9IG5ldyBIdHRwQ2xpZW50QnVpbGRlcigpLmFkZENWKClcbiAgICAgICAgICAgICAgICAgICAgLmFkZFJldHJ5KEh0dHBDbGllbnRCdWlsZGVyLlJFVFJJRVNfQ09VTlRfREVGQVVMVCwgSHR0cENsaWVudEJ1aWxkZXIuUkVUUllfVElNRU9VVF9ERUZBVUxUKVxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKS5nZXQodXNlckluZm9WMiwgcmVxdWVzdENvbmZpZ1YyKS50aGVuKChyZXM6IEF4aW9zUmVzcG9uc2U8VXNlckluZm8+KSA9PiByZXMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogQXhpb3NFcnJvcjxhbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiB0b2tlbiByZWZyZXNoIHNjZW5hcmlvLCBicm93c2VyIGF1dG9tYXRpY2FsbHkgZm9sbG93cyAzMDIgcmVzcG9uc2UgZnJvbSBSUFMgdXNlcmluZm8gdG8gdGhlIFJQUyBzaWduaW4gZW5kcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmluIGVuZHBvaW50IHJlc3BvbmRzIHdpdGggcmVkaXJlY3QgdG8gbG9naW4ubGl2ZSBmb3IgdG9rZW4gcmVmcmVzaCAtIHdoaWNoIHJlc3VsdHMgaW4gYSBDT1JTIGVycm9yIHdoZW4gcmVxdWVzdCBjb21lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYXV0aG9yIGFzIGF1dGhvciBpcyBub3Qgb24gdGhlIENETi4gUGVyIFdDMyBkb2N1bWVudGF0aW9uLCBodHRwOi8vd3d3LnczLm9yZy9UUi9jb3JzLyNzaW1wbGUtY3Jvc3Mtb3JpZ2luLXJlcXVlc3QgLCBDT1JTIGVycm9ycyBhcmUgdHJlYXRlZCBhcyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsIG5ldHdvcmsgZXJyb3JzIHdpdGggbm8gc3RhdHVzIGNvZGUgb3IgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWVycm9yLmNvZGUgJiYgIWVycm9yLnJlc3BvbnNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHBhZ2UgbGV2ZWwgcmVkaXJlY3QgdG8gbG9naW4ubGl2ZSwgYnlwYXNzaW5nIENPUlNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbkluVVJMID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5tZUNvbnRyb2wtY29uZmlnSW5mbycpLmdldEF0dHJpYnV0ZSgnZGF0YS1zaWduaW51cmwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FkZCBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBwYWdlIHNvIHVzZXIgaXMgcmVkaXJlY3RlZCBiYWNrIHRvIHRoZSBwYWdlIHRoZXkgc3RhcnRlZCBvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGAke3NpZ25JblVSTH0/cnU9JHt3aW5kb3cubG9jYXRpb24uaHJlZn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy9kbyB0aGUgcmVndWxhciBjYWxsIHRvIHRoZSBzdGFuZGFyZCB1c2VyaW5mbyBlbmRwb2ludFxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJJbmZvID0gbmV3IEh0dHBDbGllbnRCdWlsZGVyKCkuYWRkQ1YoKVxuICAgICAgICAgICAgICAgICAgICAuYWRkUmV0cnkoSHR0cENsaWVudEJ1aWxkZXIuUkVUUklFU19DT1VOVF9ERUZBVUxULCBIdHRwQ2xpZW50QnVpbGRlci5SRVRSWV9USU1FT1VUX0RFRkFVTFQpXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpLmdldChjbGFpbXNVUkwsIHJlcXVlc3RDb25maWcpLnRoZW4oKHJlczogQXhpb3NSZXNwb25zZTxVc2VySW5mbz4pID0+IHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29uZmlndXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdXNlckluZm8gPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRpbWVvdXQodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS11c2VyaW5mb3RpbWVvdXRtcycpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXVzZXJpbmZvdXJsJyk7XG4gICAgfVxuICAgIHByaXZhdGUgaXNWMkVuYWJsZWQodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAndHJ1ZScgPT09IHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pc1YyZW5hYmxlZCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNZUNvbnRyb2xFbmFibGUobWVDb250cm9sOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAobWVDb250cm9sID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICd0cnVlJyA9PT0gbWVDb250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1pc2VuYWJsZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWdlcyB3aXRob3V0IHVuaXZlcnNhbCBoZWFkZXIgbWF5IG5vdCBjb250YWluIGNvbmZpZ3VyYXRpb25hbCBlbGVtZW50IGZvciAudXNlckluZm8tY29uZmlnIGFuZCBwYWdlcyB3aXRoIFVIRlxuICAgICAqIG1heSBoYXZlIG1lIGNvbnRyb2wgZGlzYWJsZWQuXG4gICAgICovXG4gICAgcHVibGljIGlzQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ29uZmlndXJlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFVzZXJJbmZvU2luZ2xldG9uIHtcbiAgICAgICAgaWYgKCFVc2VySW5mb1NpbmdsZXRvbi5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIFVzZXJJbmZvU2luZ2xldG9uLl9pbnN0YW5jZSA9IG5ldyBVc2VySW5mb1NpbmdsZXRvbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVc2VySW5mb1NpbmdsZXRvbi5faW5zdGFuY2U7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICcuLi9yZWFjdC1pbmplY3RvcnMvaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7SHR0cENsaWVudEJ1aWxkZXJ9IGZyb20gJy4uL3JlYWN0LWluamVjdG9ycy9odHRwQ2xpZW50L0h0dHBDbGllbnRCdWlsZGVyJztcbmltcG9ydCB7VXNlckluZm9TaW5nbGV0b259IGZyb20gJy4uL3JlYWN0LWluamVjdG9ycy91dGlscy9Vc2VySW5mb1NpbmdsZXRvbic7XG5cbndpbmRvdy5Nc0h0dHBDbGllbnQgPSB3aW5kb3cuTXNIdHRwQ2xpZW50IHx8IHt9O1xud2luZG93Lk1zSHR0cENsaWVudC5kZWZhdWx0SW5zdGFuY2UgPSBIdHRwQ2xpZW50O1xud2luZG93Lk1zSHR0cENsaWVudC5CdWlsZGVyID0gSHR0cENsaWVudEJ1aWxkZXI7XG53aW5kb3cuVXNlckluZm9TaW5nbGV0b24gPSBVc2VySW5mb1NpbmdsZXRvbjtcbiJdLCJuYW1lcyI6WyJ0b0Zvcm1EYXRhIiwiZW5jb2RlIiwic3RyIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJtYXRjaCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwicGFyYW1zIiwib3B0aW9ucyIsInRoaXMiLCJfcGFpcnMiLCJwcm90b3R5cGUiLCJhcHBlbmQiLCJuYW1lIiwidmFsdWUiLCJwdXNoIiwidG9TdHJpbmciLCJlbmNvZGVyIiwiX2VuY29kZSIsImNhbGwiLCJtYXAiLCJwYWlyIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJGb3JtRGF0YSIsImRlbnlMaXN0IiwiU2V0IiwiZXJyb3IiLCJoYXMiLCJjb2RlIiwic2VsZiIsIndpbmRvdyIsIlVSTFNlYXJjaFBhcmFtcyIsInV0aWxzIiwiaWdub3JlRHVwbGljYXRlT2YiLCJoZWFkZXJzIiwia2V5IiwidmFsIiwiaSIsInBhcnNlZCIsImZvckVhY2giLCJzcGxpdCIsImxpbmUiLCJpbmRleE9mIiwidHJpbSIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJjb25jYXQiLCJkZWZhdWx0cyIsImRhdGEiLCJzdGF0dXMiLCJmbnMiLCJjb250ZXh0IiwiZm4iLCJDYW5jZWxlZEVycm9yIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsIlR5cGVFcnJvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidG9rZW4iLCJ0aGVuIiwiY2FuY2VsIiwiX2xpc3RlbmVycyIsImxlbmd0aCIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsIm1lc3NhZ2UiLCJjb25maWciLCJyZXF1ZXN0IiwicmVhc29uIiwidGhyb3dJZlJlcXVlc3RlZCIsImxpc3RlbmVyIiwiaW5kZXgiLCJzcGxpY2UiLCJzb3VyY2UiLCJjIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiaWQiLCJjbGVhciIsImgiLCJfX0NBTkNFTF9fIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJ3cml0ZSIsImV4cGlyZXMiLCJwYXRoIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJpc1N0cmluZyIsImRvY3VtZW50IiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsIm9yaWdpblVSTCIsIm1zaWUiLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50IiwicmVzb2x2ZVVSTCIsInVybCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsInJlcXVlc3RVUkwiLCJmb3JtRGF0YSIsImJ1aWxkUGF0aCIsInRhcmdldCIsImlzTnVtZXJpY0tleSIsIk51bWJlciIsImlzRmluaXRlIiwiaXNMYXN0IiwiaXNBcnJheSIsImhhc093blByb3BlcnR5IiwiaXNPYmplY3QiLCJhcnIiLCJvYmoiLCJrZXlzIiwiT2JqZWN0IiwibGVuIiwiYXJyYXlUb09iamVjdCIsImlzRm9ybURhdGEiLCJpc0Z1bmN0aW9uIiwiZW50cmllcyIsImZvckVhY2hFbnRyeSIsIm1hdGNoQWxsIiwicGFyc2VQcm9wUGF0aCIsInRyYW5zZm9ybURhdGEiLCJpc0NhbmNlbCIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwiY2FuY2VsVG9rZW4iLCJzaWduYWwiLCJhYm9ydGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwibWV0aG9kIiwiYWRhcHRlciIsInJlc3BvbnNlIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZWplY3QiLCJiYXNlVVJMIiwicmVsYXRpdmVVUkwiLCJWRVJTSU9OIiwiQXhpb3NFcnJvciIsInZhbGlkYXRvcnMiLCJ0eXBlIiwidGhpbmciLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ0cmFuc2l0aW9uYWwiLCJ2YWxpZGF0b3IiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInJlc3VsdCIsInVuZGVmaW5lZCIsIkVSUl9CQURfT1BUSU9OIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJwYXlsb2FkIiwiaXNBeGlvc0Vycm9yIiwiYnVpbGRVUkwiLCJkaXNwYXRjaFJlcXVlc3QiLCJtZXJnZUNvbmZpZyIsImJ1aWxkRnVsbFBhdGgiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJib29sZWFuIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImZ1bmN0aW9uIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJjaGFpbiIsIkFycmF5IiwiYXBwbHkiLCJzaGlmdCIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZ1bGxQYXRoIiwiYWxsb3dBYnNvbHV0ZVVybHMiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHlPYmplY3QiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsImlzVW5kZWZpbmVkIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwic2V0dGxlIiwiY29va2llcyIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwicGFyc2VQcm90b2NvbCIsInBsYXRmb3JtIiwib25DYW5jZWxlZCIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJyZXNwb25zZVR5cGUiLCJ3aXRoWFNSRlRva2VuIiwiZG9uZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJlcnIiLCJvcGVuIiwidG9VcHBlckNhc2UiLCJ0aW1lb3V0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwieHNyZkhlYWRlck5hbWUiLCJ4c3JmQ29va2llTmFtZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aXRoQ3JlZGVudGlhbHMiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImFib3J0IiwicHJvdG9jb2xzIiwiRVJSX0JBRF9SRVFVRVNUIiwic2VuZCIsImV4ZWMiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJzdGFjayIsImluaGVyaXRzIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJkZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjcmVhdGUiLCJ0b0ZsYXRPYmplY3QiLCJjYXVzZSIsImFzc2lnbiIsImNsYXNzZXMiLCJ2aXNpdG9yIiwiaGVscGVycyIsImlzTm9kZSIsImlzQnVmZmVyIiwiZGVmYXVsdFZpc2l0b3IiLCJhcmd1bWVudHMiLCJlbnZGb3JtRGF0YSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJlbmRzV2l0aCIsInJlbmRlcktleSIsImRvdHMiLCJwcmVkaWNhdGVzIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJvcHRpb24iLCJ1c2VCbG9iIiwiQmxvYiIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJjb252ZXJ0VmFsdWUiLCJpc0RhdGUiLCJ0b0lTT1N0cmluZyIsImlzQmxvYiIsImlzQXJyYXlCdWZmZXIiLCJpc1R5cGVkQXJyYXkiLCJCdWZmZXIiLCJKU09OIiwic3RyaW5naWZ5Iiwic29tZSIsImlzRmxhdEFycmF5IiwiaXNGaWxlTGlzdCIsInRvQXJyYXkiLCJlbCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJwb3AiLCJub3JtYWxpemVkTmFtZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtRGF0YVRvSlNPTiIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwicHJvY2VzcyIsImNvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwiaXNIVE1MRm9ybSIsImlzU3RyZWFtIiwiaXNGaWxlIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJidWZmZXIiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImUiLCJzdHJpbmdpZnlTYWZlbHkiLCJKU09OUmVxdWVzdGVkIiwic3RyaWN0SlNPTlBhcnNpbmciLCJFUlJfQkFEX1JFU1BPTlNFIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsIk1hdGgiLCJmbG9vciIsImNhbGxiYWNrIiwiYmluZCIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJleHRlbmQiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImZvcm1Ub0pTT04iLCJFUlJfQ0FOQ0VMRUQiLCJ0aGlzQXJnIiwiaGFzaG1hcmtJbmRleCIsInNlcmlhbGl6ZWRQYXJhbXMiLCJzZXJpYWxpemVGbiIsImlzQnJvd3NlciIsImNhY2hlIiwia2luZE9mIiwia2luZE9mVGVzdCIsImdldFByb3RvdHlwZU9mIiwibCIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiX2hhc093blByb3BlcnR5IiwicGF0dGVybiIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImEiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiU3RyaW5nIiwibGFzdEluZGV4IiwibmV4dCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJyZXF1ZXN0ZWRVUkwiLCJpc1JlbGF0aXZlVVJMIiwicGlkIiwidGltZSIsImxhc3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibiIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiZGVmaW5pdGlvbiIsIm8iLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0Q29tcGFjdFRpY2tldCIsIm1zYXV0aCIsIkF1dGhUaWNrZXQiLCJpc1VzZXJTaWduZWRJbiIsImdldFVzZXJOYW1lIiwiRmlyc3ROYW1lIiwiZ2V0VXNlclR5cGUiLCJUeXBlIiwiZ2V0QXV0aFRpY2tldEV4IiwiQXV0aFRpY2tldEV4IiwiQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIiLCJjb21wYWN0VGlja2V0IiwiYXV0aFRpY2tldEV4IiwidXNlclR5cGUiLCJDb21wYWN0SGVhZGVyTmFtZSIsIkNvbXBhY3RIZWFkZXJQcmVmaXgiLCJBYWRIZWFkZXJQcmVmaXgiLCJnZXRNc0NWIiwidGVsZW1ldHJ5IiwiY29ycmVsYXRpb25WZWN0b3JQbHVnaW4iLCJnZXRDdiIsIm1zQ3YiLCJNc0NWSGFuZGxlciIsImN2IiwieE1TVmVjdG9ySWQiLCJpbmNyZW1lbnQiLCJTb3VyY2VDYXRhbG9nIiwiZ2V0Q29va2llIiwiY25hbWUiLCJjYSIsInN1YnN0cmluZyIsIk1hcCIsIk1VSURIZWFkZXIiLCJhdXRob3JpemF0aW9uTVVJRCIsIkNvb2tpZUhhbmRsZXIiLCJnZXRSYW5kb21CZXR3ZWVuWmVyb0FuZE9uZSIsImNyeXB0byIsIm1zQ3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDMyQXJyYXkiLCJwb3ciLCJyYW5kb20iLCJyaXNrSWRBcHBlbmQiLCJyaXNrSWQiLCJyaXNrU2Vzc2lvbklkIiwiaXNUZW50ZWRQYWdlIiwidGVudG9wdGlvbnMiLCJUZW50T3B0aW9uc0hhbmRsZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3MiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX29iamVjdFNwcmVhZCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIm5hbWVzcGFjZSIsImlzTmV0d29ya0Vycm9yIiwiQm9vbGVhbiIsImluY2x1ZGVzIiwiU0FGRV9IVFRQX01FVEhPRFMiLCJJREVNUE9URU5UX0hUVFBfTUVUSE9EUyIsImlzUmV0cnlhYmxlRXJyb3IiLCJpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IiLCJpc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3IiLCJERUZBVUxUX09QVElPTlMiLCJyZXRyaWVzIiwicmV0cnlDb25kaXRpb24iLCJyZXRyeURlbGF5Iiwic2hvdWxkUmVzZXRUaW1lb3V0Iiwib25SZXRyeSIsImdldEN1cnJlbnRTdGF0ZSIsImRlZmF1bHRPcHRpb25zIiwiY3VycmVudFN0YXRlIiwiZ2V0UmVxdWVzdE9wdGlvbnMiLCJyZXRyeUNvdW50IiwiX3Nob3VsZFJldHJ5Iiwic2hvdWxkUmV0cnlPclByb21pc2UiLCJfZXJyIiwiYXhpb3NSZXRyeSIsInJlcXVlc3RJbnRlcmNlcHRvcklkIiwibGFzdFJlcXVlc3RUaW1lIiwicmVzcG9uc2VJbnRlcmNlcHRvcklkIiwiX3JlZiIsIl94IiwiX3gyIiwic2hvdWxkUmV0cnkiLCJkZWxheSIsImFnZW50IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImZpeENvbmZpZyIsImxhc3RSZXF1ZXN0RHVyYXRpb24iLCJfeDMiLCJpc1NhZmVSZXF1ZXN0RXJyb3IiLCJleHBvbmVudGlhbERlbGF5IiwicmV0cnlOdW1iZXIiLCJkZWxheUZhY3RvciIsIkNBUlRfUEVSRiIsImNvb2tpZVZhbHVlIiwiX2NsaWVudCIsImFkZENWIiwiYWRkQXV0aGVudGljYXRpb24iLCJhZGRYQXV0aE1VSUQiLCJhZGRSaXNrU2Vzc2lvbklkIiwiYWRkRmlyc3ROYW1lIiwiYWRkVGVudE9wdGlvbnMiLCJhZGRYQUVNTG9hZFRlc3QiLCJhZGRYTVNWZWN0b3JJZCIsImFkZFVjc1NpZCIsImFkZFJldHJ5IiwicmV0cnlUaW1lb3V0IiwiUkVUUklFU19DT1VOVF9ERUZBVUxUIiwiUkVUUllfVElNRU9VVF9ERUZBVUxUIiwiSHR0cENsaWVudCIsIkh0dHBDbGllbnRCdWlsZGVyIiwidXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwibWVDb250cm9sQ29uZmlnRWxlbWVudCIsImlzVjJFbmFibGVkIiwiY2xhaW1zVVJMIiwiZ2V0VXJsIiwidGltZW91dEluTVMiLCJnZXRUaW1lb3V0IiwiaXNNZUNvbnRyb2xFbmFibGUiLCJyZXF1ZXN0Q29uZmlnIiwiX2lzQ29uZmlndXJlZCIsInVzZXJJbmZvVjIiLCJnZXRBdHRyaWJ1dGUiLCJyZXF1ZXN0Q29uZmlnVjIiLCJydSIsIl91c2VySW5mbyIsInJlcyIsImNhdGNoIiwic2lnbkluVVJMIiwiZ2V0VXNlckluZm8iLCJwYXJzZUludCIsIm1lQ29udHJvbCIsImlzQ29uZmlndXJlZCIsImdldEluc3RhbmNlIiwiVXNlckluZm9TaW5nbGV0b24iLCJfaW5zdGFuY2UiLCJNc0h0dHBDbGllbnQiLCJkZWZhdWx0SW5zdGFuY2UiLCJCdWlsZGVyIl0sInNvdXJjZVJvb3QiOiIifQ==