mailgun.js 8.0.6 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +1367 -1314
- package/error.d.ts +1 -0
- package/interfaces/RequestOptions.d.ts +3 -3
- package/mailgun.node.js +2 -2
- package/mailgun.node.js.LICENSE.txt +1 -1
- package/mailgun.web.js +2 -2
- package/mailgun.web.js.LICENSE.txt +1 -1
- package/package.json +2 -2
- package/request.d.ts +2 -0
- package/version.md +1 -1
package/mailgun.web.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see mailgun.web.js.LICENSE.txt */
|
|
2
|
-
define((()=>(()=>{var t={9669:(t,e,n)=>{t.exports=n(1609)},5448:(t,e,n)=>{"use strict";var r=n(4867),o=n(6026),s=n(4372),i=n(5327),a=n(4097),u=n(4109),c=n(7985),l=n(7874),p=n(2648),f=n(644),h=n(205);t.exports=function(t){return new Promise((function(e,n){var d,y=t.data,v=t.headers,b=t.responseType;function m(){t.cancelToken&&t.cancelToken.unsubscribe(d),t.signal&&t.signal.removeEventListener("abort",d)}r.isFormData(y)&&r.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(t.auth){var _=t.auth.username||"",w=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";v.Authorization="Basic "+btoa(_+":"+w)}var O=a(t.baseURL,t.url);function x(){if(g){var r="getAllResponseHeaders"in g?u(g.getAllResponseHeaders()):null,s={data:b&&"text"!==b&&"json"!==b?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:t,request:g};o((function(t){e(t),m()}),(function(t){n(t),m()}),s),g=null}}if(g.open(t.method.toUpperCase(),i(O,t.params,t.paramsSerializer),!0),g.timeout=t.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&&(n(new p("Request aborted",p.ECONNABORTED,t,g)),g=null)},g.onerror=function(){n(new p("Network Error",p.ERR_NETWORK,t,g,g)),g=null},g.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||l;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(new p(e,r.clarifyTimeoutError?p.ETIMEDOUT:p.ECONNABORTED,t,g)),g=null},r.isStandardBrowserEnv()){var R=(t.withCredentials||c(O))&&t.xsrfCookieName?s.read(t.xsrfCookieName):void 0;R&&(v[t.xsrfHeaderName]=R)}"setRequestHeader"in g&&r.forEach(v,(function(t,e){void 0===y&&"content-type"===e.toLowerCase()?delete v[e]:g.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(g.withCredentials=!!t.withCredentials),b&&"json"!==b&&(g.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&g.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(d=function(t){g&&(n(!t||t&&t.type?new f:t),g.abort(),g=null)},t.cancelToken&&t.cancelToken.subscribe(d),t.signal&&(t.signal.aborted?d():t.signal.addEventListener("abort",d))),y||(y=null);var q=h(O);q&&-1===["http","https","file"].indexOf(q)?n(new p("Unsupported protocol "+q+":",p.ERR_BAD_REQUEST,t)):g.send(y)}))}},1609:(t,e,n)=>{"use strict";var r=n(4867),o=n(1849),s=n(321),i=n(7185);var a=function t(e){var n=new s(e),a=o(s.prototype.request,n);return r.extend(a,s.prototype,n),r.extend(a,n),a.create=function(n){return t(i(e,n))},a}(n(5546));a.Axios=s,a.CanceledError=n(644),a.CancelToken=n(4972),a.isCancel=n(6502),a.VERSION=n(7288).version,a.toFormData=n(7675),a.AxiosError=n(2648),a.Cancel=a.CanceledError,a.all=function(t){return Promise.all(t)},a.spread=n(8713),a.isAxiosError=n(6268),t.exports=a,t.exports.default=a},4972:(t,e,n)=>{"use strict";var r=n(644);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,r=n._listeners.length;for(e=0;e<r;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,r=new Promise((function(t){n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},o.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},644:(t,e,n)=>{"use strict";var r=n(2648);function o(t){r.call(this,null==t?"canceled":t,r.ERR_CANCELED),this.name="CanceledError"}n(4867).inherits(o,r,{__CANCEL__:!0}),t.exports=o},6502:t=>{"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},321:(t,e,n)=>{"use strict";var r=n(4867),o=n(5327),s=n(782),i=n(3572),a=n(7185),u=n(4097),c=n(4875),l=c.validators;function p(t){this.defaults=t,this.interceptors={request:new s,response:new s}}p.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=a(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&c.assertOptions(n,{silentJSONParsing:l.transitional(l.boolean),forcedJSONParsing:l.transitional(l.boolean),clarifyTimeoutError:l.transitional(l.boolean)},!1);var r=[],o=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(o=o&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var s,u=[];if(this.interceptors.response.forEach((function(t){u.push(t.fulfilled,t.rejected)})),!o){var p=[i,void 0];for(Array.prototype.unshift.apply(p,r),p=p.concat(u),s=Promise.resolve(e);p.length;)s=s.then(p.shift(),p.shift());return s}for(var f=e;r.length;){var h=r.shift(),d=r.shift();try{f=h(f)}catch(t){d(t);break}}try{s=i(f)}catch(t){return Promise.reject(t)}for(;u.length;)s=s.then(u.shift(),u.shift());return s},p.prototype.getUri=function(t){t=a(this.defaults,t);var e=u(t.baseURL,t.url);return o(e,t.params,t.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(t){p.prototype[t]=function(e,n){return this.request(a(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){function e(e){return function(n,r,o){return this.request(a(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}p.prototype[t]=e(),p.prototype[t+"Form"]=e(!0)})),t.exports=p},2648:(t,e,n)=>{"use strict";var r=n(4867);function o(t,e,n,r,o){Error.call(this),this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}r.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 s=o.prototype,i={};["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"].forEach((function(t){i[t]={value:t}})),Object.defineProperties(o,i),Object.defineProperty(s,"isAxiosError",{value:!0}),o.from=function(t,e,n,i,a,u){var c=Object.create(s);return r.toFlatObject(t,c,(function(t){return t!==Error.prototype})),o.call(c,t.message,e,n,i,a),c.name=t.name,u&&Object.assign(c,u),c},t.exports=o},782:(t,e,n)=>{"use strict";var r=n(4867);function o(){this.handlers=[]}o.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},4097:(t,e,n)=>{"use strict";var r=n(1793),o=n(7303);t.exports=function(t,e){return t&&!r(e)?o(t,e):e}},3572:(t,e,n)=>{"use strict";var r=n(4867),o=n(8527),s=n(6502),i=n(5546),a=n(644);function u(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new a}t.exports=function(t){return u(t),t.headers=t.headers||{},t.data=o.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||i.adapter)(t).then((function(e){return u(t),e.data=o.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return s(e)||(u(t),e&&e.response&&(e.response.data=o.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},7185:(t,e,n)=>{"use strict";var r=n(4867);t.exports=function(t,e){e=e||{};var n={};function o(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function s(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:o(void 0,t[n]):o(t[n],e[n])}function i(t){if(!r.isUndefined(e[t]))return o(void 0,e[t])}function a(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:o(void 0,t[n]):o(void 0,e[n])}function u(n){return n in e?o(t[n],e[n]):n in t?o(void 0,t[n]):void 0}var c={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials: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 r.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=c[t]||s,o=e(t);r.isUndefined(o)&&e!==u||(n[t]=o)})),n}},6026:(t,e,n)=>{"use strict";var r=n(2648);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}},8527:(t,e,n)=>{"use strict";var r=n(4867),o=n(5546);t.exports=function(t,e,n){var s=this||o;return r.forEach(n,(function(n){t=n.call(s,t,e)})),t}},5546:(t,e,n)=>{"use strict";var r=n(4867),o=n(6016),s=n(2648),i=n(7874),a=n(7675),u={"Content-Type":"application/x-www-form-urlencoded"};function c(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var l,p={transitional:i,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(l=n(5448)),l),transformRequest:[function(t,e){if(o(e,"Accept"),o(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t))return t;if(r.isArrayBufferView(t))return t.buffer;if(r.isURLSearchParams(t))return c(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString();var n,s=r.isObject(t),i=e&&e["Content-Type"];if((n=r.isFileList(t))||s&&"multipart/form-data"===i){var u=this.env&&this.env.FormData;return a(n?{"files[]":t}:t,u&&new u)}return s||"application/json"===i?(c(e,"application/json"),function(t,e,n){if(r.isString(t))try{return(e||JSON.parse)(t),r.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||p.transitional,n=e&&e.silentJSONParsing,o=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||o&&r.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw s.from(t,s.ERR_BAD_RESPONSE,this,null,this.response);throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(1623)},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(t){p.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){p.headers[t]=r.merge(u)})),t.exports=p},7874:t=>{"use strict";t.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:t=>{t.exports={version:"0.27.2"}},1849:t=>{"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},5327:(t,e,n)=>{"use strict";var r=n(4867);function o(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var s;if(n)s=n(e);else if(r.isURLSearchParams(e))s=e.toString();else{var i=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),i.push(o(e)+"="+o(t))})))})),s=i.join("&")}if(s){var a=t.indexOf("#");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf("?")?"?":"&")+s}return t}},7303:t=>{"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},4372:(t,e,n)=>{"use strict";var r=n(4867);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,s,i){var a=[];a.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(s)&&a.push("domain="+s),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:t=>{"use strict";t.exports=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}},6268:(t,e,n)=>{"use strict";var r=n(4867);t.exports=function(t){return r.isObject(t)&&!0===t.isAxiosError}},7985:(t,e,n)=>{"use strict";var r=n(4867);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},6016:(t,e,n)=>{"use strict";var r=n(4867);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},1623:t=>{t.exports=null},4109:(t,e,n)=>{"use strict";var r=n(4867),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"];t.exports=function(t){var e,n,s,i={};return t?(r.forEach(t.split("\n"),(function(t){if(s=t.indexOf(":"),e=r.trim(t.substr(0,s)).toLowerCase(),n=r.trim(t.substr(s+1)),e){if(i[e]&&o.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i):i}},205:t=>{"use strict";t.exports=function(t){var e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}},8713:t=>{"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},7675:(t,e,n)=>{"use strict";var r=n(4867);t.exports=function(t,e){e=e||new FormData;var n=[];function o(t){return null===t?"":r.isDate(t)?t.toISOString():r.isArrayBuffer(t)||r.isTypedArray(t)?"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}return function t(s,i){if(r.isPlainObject(s)||r.isArray(s)){if(-1!==n.indexOf(s))throw Error("Circular reference detected in "+i);n.push(s),r.forEach(s,(function(n,s){if(!r.isUndefined(n)){var a,u=i?i+"."+s:s;if(n&&!i&&"object"==typeof n)if(r.endsWith(s,"{}"))n=JSON.stringify(n);else if(r.endsWith(s,"[]")&&(a=r.toArray(n)))return void a.forEach((function(t){!r.isUndefined(t)&&e.append(u,o(t))}));t(n,u)}})),n.pop()}else e.append(i,o(s))}(t),e}},4875:(t,e,n)=>{"use strict";var r=n(7288).version,o=n(2648),s={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){s[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var i={};s.transitional=function(t,e,n){function s(t,e){return"[Axios v"+r+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,a){if(!1===t)throw new o(s(r," has been removed"+(e?" in "+e:"")),o.ERR_DEPRECATED);return e&&!i[r]&&(i[r]=!0,console.warn(s(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,a)}},t.exports={assertOptions:function(t,e,n){if("object"!=typeof t)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(t),s=r.length;s-- >0;){var i=r[s],a=e[i];if(a){var u=t[i],c=void 0===u||a(u,i,t);if(!0!==c)throw new o("option "+i+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+i,o.ERR_BAD_OPTION)}},validators:s}},4867:(t,e,n)=>{"use strict";var r,o=n(1849),s=Object.prototype.toString,i=(r=Object.create(null),function(t){var e=s.call(t);return r[e]||(r[e]=e.slice(8,-1).toLowerCase())});function a(t){return t=t.toLowerCase(),function(e){return i(e)===t}}function u(t){return Array.isArray(t)}function c(t){return void 0===t}var l=a("ArrayBuffer");function p(t){return null!==t&&"object"==typeof t}function f(t){if("object"!==i(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}var h=a("Date"),d=a("File"),y=a("Blob"),v=a("FileList");function b(t){return"[object Function]"===s.call(t)}var m=a("URLSearchParams");function g(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),u(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}var _,w=(_="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(t){return _&&t instanceof _});t.exports={isArray:u,isArrayBuffer:l,isBuffer:function(t){return null!==t&&!c(t)&&null!==t.constructor&&!c(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){var e="[object FormData]";return t&&("function"==typeof FormData&&t instanceof FormData||s.call(t)===e||b(t.toString)&&t.toString()===e)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&l(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:p,isPlainObject:f,isUndefined:c,isDate:h,isFile:d,isBlob:y,isFunction:b,isStream:function(t){return p(t)&&b(t.pipe)},isURLSearchParams:m,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:g,merge:function t(){var e={};function n(n,r){f(e[r])&&f(n)?e[r]=t(e[r],n):f(n)?e[r]=t({},n):u(n)?e[r]=n.slice():e[r]=n}for(var r=0,o=arguments.length;r<o;r++)g(arguments[r],n);return e},extend:function(t,e,n){return g(e,(function(e,r){t[r]=n&&"function"==typeof e?o(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n){var r,o,s,i={};e=e||{};do{for(o=(r=Object.getOwnPropertyNames(t)).length;o-- >0;)i[s=r[o]]||(e[s]=t[s],i[s]=!0);t=Object.getPrototypeOf(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:i,kindOfTest:a,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;var e=t.length;if(c(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},isTypedArray:w,isFileList:v}},6646:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(n(6903)),i=o(n(2929)),a=o(n(5741)),u=o(n(2338)),c=o(n(6280)),l=o(n(2778)),p=o(n(5869)),f=o(n(240)),h=o(n(7641)),d=o(n(7734)),y=o(n(8083)),v=o(n(2310)),b=o(n(8766)),m=o(n(5853)),g=o(n(6061)),_=o(n(8780)),w=o(n(5513)),O=function(t,e){var n=r({},t);if(n.url||(n.url="https://api.mailgun.net"),!n.username)throw new Error('Parameter "username" is required');if(!n.key)throw new Error('Parameter "key" is required');this.request=new s.default(n,e);var o=new b.default(this.request),O=new m.default(this.request),x=new _.default(this.request),R=new w.default(this.request),q=new g.default(this.request);this.domains=new i.default(this.request,O,x,R),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new c.default(this.request),this.messages=new p.default(this.request),this.routes=new f.default(this.request),this.ips=new d.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new v.default(this.request,o),this.validate=new h.default(this.request,q)};e.default=O},9975:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=i(n(4078)),u=i(n(5258)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,n,r){var o=new URL(e).searchParams,s=e&&"string"==typeof e&&e.split(n).pop()||"",i=null;return r&&(i=o.has(r)?o.get(r):void 0),{id:t,page:"?"===n?"?".concat(s):s,iteratorPosition:i,url:e}},t.prototype.parsePageLinks=function(t,e,n){var r=this;return Object.entries(t.body.paging).reduce((function(t,o){var s=o[0],i=o[1];return t[s]=r.parsePage(s,i,e,n),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var n=t,o=r({},e);return o.page&&(n=(0,a.default)(t,o.page),delete o.page),{url:n,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,n){return o(this,void 0,void 0,(function(){var r,o,i,a;return s(this,(function(s){switch(s.label){case 0:return r=this.updateUrlAndQuery(t,e),o=r.url,i=r.updatedQuery,this.request?[4,this.request.get(o,i)]:[3,2];case 1:return a=s.sent(),[2,this.parseList(a,n)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},2929:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Domain=void 0;var s=o(n(4078)),i=o(n(5258)),a=function(t,e,n){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=n||null};e.Domain=a;var u=function(){function t(t,e,n,r){this.request=t,this.domainCredentials=e,this.domainTemplates=n,this.domainTags=r}return t.prototype._parseMessage=function(t){return t.body},t.prototype.parseDomainList=function(t){return t.body&&t.body.items?t.body.items.map((function(t){return new a(t)})):[]},t.prototype._parseDomain=function(t){return new a(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e.parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/".concat(t)).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,n=r({},t);return"force_dkim_authority"in n&&"boolean"==typeof n.force_dkim_authority&&(n.force_dkim_authority="true"===n.force_dkim_authority.toString()?"true":"false"),this.request.postWithFD("/v3/domains",n).then((function(t){return e._parseDomain(t)}))},t.prototype.verify=function(t){var e=this;return this.request.put("/v3/domains/".concat(t,"/verify")).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/".concat(t)).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/".concat(t,"/connection")).then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/".concat(t,"/connection"),e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,s.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,n){var r=this;if("boolean"==typeof(null==n?void 0:n.active))throw new i.default({status:400,statusText:"Received boolean value for active property",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",t,"tracking",e),n).then((function(t){return r._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,s.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,s.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var n="";if(e.pool_id&&e.ip)throw new i.default({status:400,statusText:"Too much data for replacement",body:{message:"Please specify either pool_id or ip (not both)"}});return e.pool_id?n="?pool_id=".concat(e.pool_id):e.ip&&(n="?ip=".concat(e.ip)),this.request.delete((0,s.default)("/v3/domains",t,"ips","ip_pool",n))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_authority"),{},{query:"self=".concat(e.self)}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_selector"),{},{query:"dkim_selector=".concat(e.dkimSelector)}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/".concat(t,"/web_prefix"),{},{query:"web_prefix=".concat(e.webPrefix)}).then((function(t){return t}))},t}();e.default=u},5853:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(4078)),s=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var n=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return n._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var n=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.update=function(t,e,n){var r=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),n).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var n=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return n._parseDeletedResponse(t)}))},t}();e.default=s},5513:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTagStatistic=e.DomainTag=void 0;var c=u(n(4078)),l=u(n(9975)),p=function(t){this.tag=t.tag,this.description=t.description,this["first-seen"]=new Date(t["first-seen"]),this["last-seen"]=new Date(t["last-seen"])};e.DomainTag=p;var f=function(t){this.tag=t.body.tag,this.description=t.body.description,this.start=new Date(t.body.start),this.end=new Date(t.body.end),this.resolution=t.body.resolution,this.stats=t.body.stats.map((function(t){return s(s({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=f;var h=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/",n}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new p(t)})),e.pages=this.parsePageLinks(t,"?","tag"),e.status=t.status,e},e.prototype._parseTagStatistic=function(t){return new f(t)},e.prototype.list=function(t,e){return i(this,void 0,void 0,(function(){return a(this,(function(n){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/tags"),e)]}))}))},e.prototype.get=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new p(t.body)}))},e.prototype.update=function(t,e,n){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),n).then((function(t){return t.body}))},e.prototype.destroy=function(t,e){return this.request.delete("".concat(this.baseRoute).concat(t,"/tags/").concat(e)).then((function(t){return{message:t.body.message,status:t.status}}))},e.prototype.statistic=function(t,e,n){var r=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),n).then((function(t){return r._parseTagStatistic(t)}))},e.prototype.countries=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},e.prototype.providers=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},e.prototype.devices=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},e}(l.default);e.default=h},8780:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTemplateItem=void 0;var c=u(n(4078)),l=u(n(9975)),p=function(t){this.name=t.name,this.description=t.description,this.createdAt=t.createdAt?new Date(t.createdAt):"",this.createdBy=t.createdBy,this.id=t.id,t.version&&(this.version=t.version,t.version.createdAt&&(this.version.createdAt=new Date(t.version.createdAt))),t.versions&&t.versions.length&&(this.versions=t.versions.map((function(t){var e=s({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=p;var f=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/",n}return o(e,t),e.prototype.parseCreationResponse=function(t){return new p(t.body.template)},e.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new p(t.body.template)),e},e.prototype.parseMutationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.templateName=t.body.template.name),e},e.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},e.prototype.parseMutateTemplateVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body.template&&(e.templateName=t.body.template.name,e.templateVersion={tag:t.body.template.version.tag}),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new p(t)})),e.pages=this.parsePageLinks(t,"?","p"),e.status=t.status,e},e.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new p(t.body.template),e.pages=this.parsePageLinks(t,"?","p"),e},e.prototype.list=function(t,e){return i(this,void 0,void 0,(function(){return a(this,(function(n){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,n){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),n).then((function(t){return new p(t.body.template)}))},e.prototype.create=function(t,e){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return n.parseCreationResponse(t)}))},e.prototype.update=function(t,e,n){var r=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),n).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return n.parseMutationResponse(t)}))},e.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},e.prototype.createVersion=function(t,e,n){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),n).then((function(t){return r.parseCreationVersionResponse(t)}))},e.prototype.getVersion=function(t,e,n){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n)).then((function(t){return new p(t.body.template)}))},e.prototype.updateVersion=function(t,e,n,r){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n),r).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,n){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n)).then((function(t){return r.parseMutateTemplateVersionResponse(t)}))},e.prototype.listVersions=function(t,e,n){var r=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),n).then((function(t){return r.parseListTemplateVersions(t)}))},e}(l.default);e.default=f},5258:function(t,e){"use strict";var n,r=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var n=e.status,r=e.statusText,o=e.message,s=e.body,i=void 0===s?{}:s,a=this,u="",c="";return"string"==typeof i?u=i:(u=null==i?void 0:i.message,c=null==i?void 0:i.error),(a=t.call(this)||this).stack="",a.status=n,a.message=o||c||r,a.details=u,a}return r(e,t),e}(Error);e.default=o},5741:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=a(n(4078)),c=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"/"),e.status=t.status,e},e.prototype.get=function(t,e){return s(this,void 0,void 0,(function(){return i(this,(function(n){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(n(9975)).default);e.default=c},335:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.FormDataConstructor=t}return t.prototype.createFormData=function(t){var e=this;if(!t)throw new Error("Please provide data object");return Object.keys(t).filter((function(e){return t[e]})).reduce((function(n,r){return["attachment","inline","multipleValidationFile"].includes(r)?(e.addFilesToFD(r,t[r],n),n):"message"===r?(e.addMimeDataToFD(r,t[r],n),n):(e.addCommonPropertyToFD(r,t[r],n),n)}),new this.FormDataConstructor)},t.prototype.isNodeFormData=function(t){return void 0!==t.getHeaders},t.prototype.getAttachmentOptions=function(t){if("object"!=typeof t||this.isStream(t))return{};var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})},t.prototype.addMimeDataToFD=function(t,e,n){if(Buffer.isBuffer(e)||"string"==typeof e){var r=n,o="string"==typeof e?Buffer.from(e):e;r.append(t,o,{filename:"MimeMessage"})}else{n.append(t,e,"MimeMessage")}},t.prototype.addFilesToFD=function(t,e,n){var r=this,o=function(t,e,n){var o="multipleValidationFile"===t?"file":t,s=r.isStream(e)?e:e.data,i=r.getAttachmentOptions(e);r.isNodeFormData(n)?n.append(o,s,i):n.append(o,s,i.filename)};Array.isArray(e)?e.forEach((function(e){o(t,e,n)})):o(t,e,n)},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.addCommonPropertyToFD=function(t,e,n){Array.isArray(e)?e.forEach((function(e){n.append(t,e)})):null!=e&&n.append(t,e)},t}();e.default=r},7530:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(6646)),s=function(){function t(t){this.formData=t}return Object.defineProperty(t,"default",{get:function(){return this},enumerable:!1,configurable:!0}),t.prototype.client=function(t){return new o.default(t,this.formData)},t}();e.default=s},5098:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuppressionModels=void 0,function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={}))},8083:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t){this.request=t}return t.prototype.list=function(){var t=this;return this.request.get("/v1/ip_pools").then((function(e){return t.parseIpPoolsResponse(e)}))},t.prototype.create=function(t){return r(this,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=r.sent(),[2,n({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return r(this,void 0,void 0,(function(){var r;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return r=o.sent(),[2,n({status:r.status},r.body)]}}))}))},t.prototype.delete=function(t,e){return r(this,void 0,void 0,(function(){var r;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return r=o.sent(),[2,n({status:r.status},r.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return n({status:t.status},t.body)},t}();e.default=s},7734:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t){this.request=t}return t.prototype.list=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=n.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=n.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},2310:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r.members=n,r}return o(e,t),e.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:s(s({},e),{created_at:new Date(1e3*e.created_at)})}},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e.status=t.status,e},e.prototype.list=function(t){return i(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),t)]}))}))},e.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},e.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},e.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},e.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},e.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return s({status:t.status},t.body)}))},e.prototype.validationResult=function(t){var e=this;return this.request.get("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return e.parseValidationResult(t.status,t.body)}))},e.prototype.cancelValidation=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return{status:t.status,message:t.body.message}}))},e}(u(n(9975)).default);e.default=c},8766:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n}return o(e,t),e.prototype.checkAndUpdateData=function(t){var e=s({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e},e.prototype.listMembers=function(t,e){return i(this,void 0,void 0,(function(){return a(this,(function(n){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e)]}))}))},e.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},e.prototype.createMember=function(t,e){var n=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),n).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var n={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members.json"),n).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,n){var r=this.checkAndUpdateData(n);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),r).then((function(t){return t.body.member}))},e.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},e}(u(n(9975)).default);e.default=c},5869:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(n(5258)),i=function(){function t(t){this.request=t}return t.prototype.prepareBooleanValues=function(t){var e=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!t||0===Object.keys(t).length)throw new s.default({status:400,message:"Message data object can not be empty"});return Object.keys(t).reduce((function(n,r){return e.has(r)&&"boolean"==typeof t[r]?n[r]=t[r]?"yes":"no":n[r]=t[r],n}),{})},t.prototype._parseResponse=function(t){return r({status:t.status},t.body)},t.prototype.create=function(t,e){if(e.message)return this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse);var n=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),n).then(this._parseResponse)},t}();e.default=i},6061:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultipleValidationJob=void 0;var c=u(n(9975)),l=function(t,e){var n,r;this.createdAt=new Date(t.created_at),this.id=t.id,this.quantity=t.quantity,this.recordsProcessed=t.records_processed,this.status=t.status,this.responseStatusCode=e,t.download_url&&(this.downloadUrl={csv:null===(n=t.download_url)||void 0===n?void 0:n.csv,json:null===(r=t.download_url)||void 0===r?void 0:r.json}),t.summary&&(this.summary={result:{catchAll:t.summary.result.catch_all,deliverable:t.summary.result.deliverable,doNotSend:t.summary.result.do_not_send,undeliverable:t.summary.result.undeliverable,unknown:t.summary.result.unknown},risk:{high:t.summary.risk.high,low:t.summary.risk.low,medium:t.summary.risk.medium,unknown:t.summary.risk.unknown}})};e.MultipleValidationJob=l;var p=function(t){function e(e){var n=t.call(this)||this;return n.request=e,n}return o(e,t),e.prototype.handleResponse=function(t){return s({status:t.status},null==t?void 0:t.body)},e.prototype.parseList=function(t){var e={};return e.jobs=t.body.jobs.map((function(e){return new l(e,t.status)})),e.pages=this.parsePageLinks(t,"?","pivot"),e.total=t.body.total,e.status=t.status,e},e.prototype.list=function(t){return i(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("/v4/address/validate/bulk",t)]}))}))},e.prototype.get=function(t){return i(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=n.sent(),[2,new l(e.body,e.status)]}}))}))},e.prototype.create=function(t,e){return i(this,void 0,void 0,(function(){var n,r;return a(this,(function(o){switch(o.label){case 0:return delete(n=s({multipleValidationFile:s({},null==e?void 0:e.file)},e)).file,[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),n)];case 1:return r=o.sent(),[2,this.handleResponse(r)]}}))}))},e.prototype.destroy=function(t){return i(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=n.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=p},6903:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&o(e,t,n);return s(e,t),e},a=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var l=i(n(7501)),p=c(n(4078)),f=c(n(9669)),h=c(n(5258)),d=c(n(335)),y=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=t.headers||{},this.formDataBuilder=new d.default(e),this.maxBodyLength=52428800}return t.prototype.request=function(t,e,n){var o,s,i;return a(this,void 0,void 0,(function(){var a,c,d,y,v,b,m,g,_,w;return u(this,(function(u){switch(u.label){case 0:a=r({},n),c=l.encode("".concat(this.username,":").concat(this.key)),d=a.headers?a.headers:{},y=r(r({Authorization:"Basic ".concat(c)},this.headers),d),null==a||delete a.headers,v=r({},a),(null==a?void 0:a.query)&&Object.getOwnPropertyNames(null==a?void 0:a.query).length>0&&(v.params=new URLSearchParams(a.query),delete v.query),(null==a?void 0:a.body)&&(b=null==a?void 0:a.body,v.data=b,delete v.body),g=(0,p.default)(this.url,e),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,f.default.request(r(r({method:t.toLocaleUpperCase(),timeout:this.timeout,url:g,headers:y},v),{maxBodyLength:this.maxBodyLength}))];case 2:return m=u.sent(),[3,4];case 3:throw _=u.sent(),w=_,new h.default({status:(null===(o=null==w?void 0:w.response)||void 0===o?void 0:o.status)||400,statusText:(null===(s=null==w?void 0:w.response)||void 0===s?void 0:s.statusText)||w.code,body:(null===(i=null==w?void 0:w.response)||void 0===i?void 0:i.data)||w.message});case 4:return[4,this.getResponseBody(m)];case 5:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(n){if(e={body:{},status:null==t?void 0:t.status},"string"==typeof t.data){if("Mailgun Magnificent API"===t.data)throw new h.default({status:400,statusText:"Incorrect url",body:t.data});e.body={message:t.data}}else e.body=t.data;return[2,e]}))}))},t.prototype.query=function(t,e,n,o){return this.request(t,e,r({query:n},o))},t.prototype.command=function(t,e,n,o,s){void 0===s&&(s=!0);var i={};s&&(i={"Content-Type":"application/x-www-form-urlencoded"});var a=r(r(r({},i),{body:n}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,n){return this.query("get",t,e,n)},t.prototype.post=function(t,e,n){return this.command("post",t,e,n)},t.prototype.postWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("post",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("put",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("patch",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,n){return this.command("put",t,e,n)},t.prototype.delete=function(t,e){return this.command("delete",t,e)},t}();e.default=y},240:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/".concat(t)).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/".concat(t)).then((function(t){return t.body}))},t}();e.default=n},2338:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__spreadArray||function(t,e,n){if(n||2===arguments.length)for(var r,o=0,s=e.length;o<s;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=s(n(4078)),a=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=r({},t);return e.time=new Date(t.time),e}))},u=function(){function t(t){this.request=t}return t.prototype.prepareSearchParams=function(t){var e=[];return"object"==typeof t&&Object.keys(t).length&&(e=Object.entries(t).reduce((function(t,e){var n=e[0],r=e[1];if(Array.isArray(r)&&r.length){var s=r.map((function(t){return[n,t]}));return o(o([],t,!0),s,!0)}return t.push([n,r]),t}),[])),e},t.prototype._parseStats=function(t){return new a(t.body)},t.prototype.getDomain=function(t,e){var n=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),n).then(this._parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this._parseStats)},t}();e.default=u},6280:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},a=this&&this.__spreadArray||function(t,e,n){if(n||2===arguments.length)for(var r,o=0,s=e.length;o<s;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.WhiteList=e.Unsubscribe=e.Complaint=e.Bounce=e.Suppression=void 0;var c=u(n(4078)),l=n(5098),p=u(n(5258)),f=u(n(9975)),h={headers:{"Content-Type":"application/json"}},d=function(t){this.type=t};e.Suppression=d;var y=function(t){function e(e){var n=t.call(this,l.SuppressionModels.BOUNCES)||this;return n.address=e.address,n.code=+e.code,n.error=e.error,n.created_at=new Date(e.created_at),n}return o(e,t),e}(d);e.Bounce=y;var v=function(t){function e(e){var n=t.call(this,l.SuppressionModels.COMPLAINTS)||this;return n.address=e.address,n.created_at=new Date(e.created_at),n}return o(e,t),e}(d);e.Complaint=v;var b=function(t){function e(e){var n=t.call(this,l.SuppressionModels.UNSUBSCRIBES)||this;return n.address=e.address,n.tags=e.tags,n.created_at=new Date(e.created_at),n}return o(e,t),e}(d);e.Unsubscribe=b;var m=function(t){function e(e){var n=t.call(this,l.SuppressionModels.WHITELISTS)||this;return n.value=e.value,n.reason=e.reason,n.createdAt=new Date(e.createdAt),n}return o(e,t),e}(d);e.WhiteList=m;var g=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.models=new Map,n.models.set("bounces",y),n.models.set("complaints",v),n.models.set("unsubscribes",b),n.models.set("whitelists",m),n}return o(e,t),e.prototype.parseList=function(t,e){var n={};return n.items=t.body.items.map((function(t){return new e(t)})),n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e){if(Array.isArray(e))throw new p.default({status:400,statusText:"Data property should be an object",body:{message:"Whitelist's creation process does not support multiple creations. Data property should be an object"}});return this.request.postWithFD((0,c.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},e.prototype.checkType=function(t){if(!this.models.has(t))throw new p.default({status:400,statusText:"Unknown type value",body:{message:"Type may be only one of [bounces, complaints, unsubscribes, whitelists]"}})},e.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},e.prototype.list=function(t,e,n){return s(this,void 0,void 0,(function(){var r;return i(this,(function(o){return this.checkType(e),r=this.models.get(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),n,r)]}))}))},e.prototype.get=function(t,e,n){var r=this;this.checkType(e);var o=this.models.get(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(n))).then((function(t){return r._parseItem(t.body,o)}))},e.prototype.create=function(t,e,n){var r;return this.checkType(e),"whitelists"===e?this.createWhiteList(t,n):(r=Array.isArray(n)?a([],n,!0):[n],this.request.post((0,c.default)("v3",t,e),JSON.stringify(r),h).then(this.prepareResponse))},e.prototype.destroy=function(t,e,n){return this.checkType(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(n))).then((function(t){return{message:t.body.message,value:t.body.value||"",address:t.body.address||"",status:t.status}}))},e}(f.default);e.default=g,t.exports=g},7641:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,n.sent().body]}}))}))},t}();e.default=o},2778:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(4078)),s=function(t,e){this.id=t,this.url=e},i=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var n,r=null===(n=null==e?void 0:e.body)||void 0===n?void 0:n.webhook,o=null==r?void 0:r.url;return o||(o=(null==r?void 0:r.urls)&&r.urls.length?r.urls[0]:void 0),new s(t,o)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,n,r){return void 0===r&&(r=!1),r?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:n}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:n}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,n){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:n}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=i},7501:function(t,e,n){var r;t=n.nmd(t),function(o){var s=e,i=(t&&t.exports,"object"==typeof n.g&&n.g);i.global!==i&&i.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&u("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,s=t.length%3,i="",a=-1,l=t.length-s;++a<l;)e=t.charCodeAt(a)<<16,n=t.charCodeAt(++a)<<8,r=t.charCodeAt(++a),i+=c.charAt((o=e+n+r)>>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==s?(e=t.charCodeAt(a)<<8,n=t.charCodeAt(++a),i+=c.charAt((o=e+n)>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==s&&(o=t.charCodeAt(a),i+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),i},decode:function(t){var e=(t=String(t).replace(l,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&u("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,s="",i=-1;++i<e;)r=c.indexOf(t.charAt(i)),n=o%4?64*n+r:r,o++%4&&(s+=String.fromCharCode(255&n>>(-2*o&6)));return s},version:"1.0.0"};void 0===(r=function(){return p}.call(e,n,e,t))||(t.exports=r)}()},4078:function(t,e,n){var r,o,s;s=function(){function t(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var n=t.shift();t[0]=n+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r<t.length;r++){var o=t[r];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(r>0&&(o=o.replace(/^[\/]+/,"")),o=r<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var s=e.join("/"),i=(s=s.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s=i.shift()+(i.length>0?"?":"")+i.join("&")}return function(){return t("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=s():void 0===(o="function"==typeof(r=s)?r.call(e,n,e,t):r)||(t.exports=o)}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var s=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n(7530)})()));
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGd1bi53ZWIuanMiLCJtYXBwaW5ncyI6Ijt3Q0FBQUEsRUFBT0MsUUFBVSxFQUFqQixtQ0NFQSxJQUFJQyxFQUFRLEVBQVEsTUFDaEJDLEVBQVMsRUFBUSxNQUNqQkMsRUFBVSxFQUFRLE1BQ2xCQyxFQUFXLEVBQVEsTUFDbkJDLEVBQWdCLEVBQVEsTUFDeEJDLEVBQWUsRUFBUSxNQUN2QkMsRUFBa0IsRUFBUSxNQUMxQkMsRUFBdUIsRUFBUSxNQUMvQkMsRUFBYSxFQUFRLE1BQ3JCQyxFQUFnQixFQUFRLEtBQ3hCQyxFQUFnQixFQUFRLEtBRTVCWixFQUFPQyxRQUFVLFNBQW9CWSxHQUNuQyxPQUFPLElBQUlDLFNBQVEsU0FBNEJDLEVBQVNDLEdBQ3RELElBR0lDLEVBSEFDLEVBQWNMLEVBQU9NLEtBQ3JCQyxFQUFpQlAsRUFBT1EsUUFDeEJDLEVBQWVULEVBQU9TLGFBRTFCLFNBQVNDLElBQ0hWLEVBQU9XLGFBQ1RYLEVBQU9XLFlBQVlDLFlBQVlSLEdBRzdCSixFQUFPYSxRQUNUYixFQUFPYSxPQUFPQyxvQkFBb0IsUUFBU1YsRUFFL0MsQ0FFSWYsRUFBTTBCLFdBQVdWLElBQWdCaEIsRUFBTTJCLCtCQUNsQ1QsRUFBZSxnQkFHeEIsSUFBSVUsRUFBVSxJQUFJQyxlQUdsQixHQUFJbEIsRUFBT21CLEtBQU0sQ0FDZixJQUFJQyxFQUFXcEIsRUFBT21CLEtBQUtDLFVBQVksR0FDbkNDLEVBQVdyQixFQUFPbUIsS0FBS0UsU0FBV0MsU0FBU0MsbUJBQW1CdkIsRUFBT21CLEtBQUtFLFdBQWEsR0FDM0ZkLEVBQWVpQixjQUFnQixTQUFXQyxLQUFLTCxFQUFXLElBQU1DLEVBQ2xFLENBRUEsSUFBSUssRUFBV2pDLEVBQWNPLEVBQU8yQixRQUFTM0IsRUFBTzRCLEtBT3BELFNBQVNDLElBQ1AsR0FBS1osRUFBTCxDQUlBLElBQUlhLEVBQWtCLDBCQUEyQmIsRUFBVXZCLEVBQWF1QixFQUFRYyx5QkFBMkIsS0FHdkdDLEVBQVcsQ0FDYjFCLEtBSGtCRyxHQUFpQyxTQUFqQkEsR0FBNkMsU0FBakJBLEVBQ3ZDUSxFQUFRZSxTQUEvQmYsRUFBUWdCLGFBR1JDLE9BQVFqQixFQUFRaUIsT0FDaEJDLFdBQVlsQixFQUFRa0IsV0FDcEIzQixRQUFTc0IsRUFDVDlCLE9BQVFBLEVBQ1JpQixRQUFTQSxHQUdYM0IsR0FBTyxTQUFrQjhDLEdBQ3ZCbEMsRUFBUWtDLEdBQ1IxQixHQUNGLElBQUcsU0FBaUIyQixHQUNsQmxDLEVBQU9rQyxHQUNQM0IsR0FDRixHQUFHc0IsR0FHSGYsRUFBVSxJQXZCVixDQXdCRixDQW1FQSxHQW5HQUEsRUFBUXFCLEtBQUt0QyxFQUFPdUMsT0FBT0MsY0FBZWhELEVBQVNrQyxFQUFVMUIsRUFBT3lDLE9BQVF6QyxFQUFPMEMsbUJBQW1CLEdBR3RHekIsRUFBUTBCLFFBQVUzQyxFQUFPMkMsUUErQnJCLGNBQWUxQixFQUVqQkEsRUFBUVksVUFBWUEsRUFHcEJaLEVBQVEyQixtQkFBcUIsV0FDdEIzQixHQUFrQyxJQUF2QkEsRUFBUTRCLGFBUUQsSUFBbkI1QixFQUFRaUIsUUFBa0JqQixFQUFRNkIsYUFBd0QsSUFBekM3QixFQUFRNkIsWUFBWUMsUUFBUSxXQUtqRkMsV0FBV25CLEVBQ2IsRUFJRlosRUFBUWdDLFFBQVUsV0FDWGhDLElBSUxkLEVBQU8sSUFBSU4sRUFBVyxrQkFBbUJBLEVBQVdxRCxhQUFjbEQsRUFBUWlCLElBRzFFQSxFQUFVLEtBQ1osRUFHQUEsRUFBUWtDLFFBQVUsV0FHaEJoRCxFQUFPLElBQUlOLEVBQVcsZ0JBQWlCQSxFQUFXdUQsWUFBYXBELEVBQVFpQixFQUFTQSxJQUdoRkEsRUFBVSxJQUNaLEVBR0FBLEVBQVFvQyxVQUFZLFdBQ2xCLElBQUlDLEVBQXNCdEQsRUFBTzJDLFFBQVUsY0FBZ0IzQyxFQUFPMkMsUUFBVSxjQUFnQixtQkFDeEZZLEVBQWV2RCxFQUFPdUQsY0FBZ0IzRCxFQUN0Q0ksRUFBT3NELHNCQUNUQSxFQUFzQnRELEVBQU9zRCxxQkFFL0JuRCxFQUFPLElBQUlOLEVBQ1R5RCxFQUNBQyxFQUFhQyxvQkFBc0IzRCxFQUFXNEQsVUFBWTVELEVBQVdxRCxhQUNyRWxELEVBQ0FpQixJQUdGQSxFQUFVLElBQ1osRUFLSTVCLEVBQU0yQix1QkFBd0IsQ0FFaEMsSUFBSTBDLEdBQWExRCxFQUFPMkQsaUJBQW1CaEUsRUFBZ0IrQixLQUFjMUIsRUFBTzRELGVBQzlFckUsRUFBUXNFLEtBQUs3RCxFQUFPNEQscUJBQ3BCRSxFQUVFSixJQUNGbkQsRUFBZVAsRUFBTytELGdCQUFrQkwsRUFFNUMsQ0FHSSxxQkFBc0J6QyxHQUN4QjVCLEVBQU0yRSxRQUFRekQsR0FBZ0IsU0FBMEIwRCxFQUFLQyxRQUNoQyxJQUFoQjdELEdBQXFELGlCQUF0QjZELEVBQUlDLHFCQUVyQzVELEVBQWUyRCxHQUd0QmpELEVBQVFtRCxpQkFBaUJGLEVBQUtELEVBRWxDLElBSUc1RSxFQUFNZ0YsWUFBWXJFLEVBQU8yRCxtQkFDNUIxQyxFQUFRMEMsa0JBQW9CM0QsRUFBTzJELGlCQUlqQ2xELEdBQWlDLFNBQWpCQSxJQUNsQlEsRUFBUVIsYUFBZVQsRUFBT1MsY0FJUyxtQkFBOUJULEVBQU9zRSxvQkFDaEJyRCxFQUFRc0QsaUJBQWlCLFdBQVl2RSxFQUFPc0Usb0JBSVAsbUJBQTVCdEUsRUFBT3dFLGtCQUFtQ3ZELEVBQVF3RCxRQUMzRHhELEVBQVF3RCxPQUFPRixpQkFBaUIsV0FBWXZFLEVBQU93RSxtQkFHakR4RSxFQUFPVyxhQUFlWCxFQUFPYSxVQUcvQlQsRUFBYSxTQUFTc0UsR0FDZnpELElBR0xkLEdBQVF1RSxHQUFXQSxHQUFVQSxFQUFPQyxLQUFRLElBQUk3RSxFQUFrQjRFLEdBQ2xFekQsRUFBUTJELFFBQ1IzRCxFQUFVLEtBQ1osRUFFQWpCLEVBQU9XLGFBQWVYLEVBQU9XLFlBQVlrRSxVQUFVekUsR0FDL0NKLEVBQU9hLFNBQ1RiLEVBQU9hLE9BQU9pRSxRQUFVMUUsSUFBZUosRUFBT2EsT0FBTzBELGlCQUFpQixRQUFTbkUsS0FJOUVDLElBQ0hBLEVBQWMsTUFHaEIsSUFBSTBFLEVBQVdoRixFQUFjMkIsR0FFekJxRCxJQUErRCxJQUFuRCxDQUFFLE9BQVEsUUFBUyxRQUFTaEMsUUFBUWdDLEdBQ2xENUUsRUFBTyxJQUFJTixFQUFXLHdCQUEwQmtGLEVBQVcsSUFBS2xGLEVBQVdtRixnQkFBaUJoRixJQU05RmlCLEVBQVFnRSxLQUFLNUUsRUFDZixHQUNGLCtCQzNOQSxJQUFJaEIsRUFBUSxFQUFRLE1BQ2hCNkYsRUFBTyxFQUFRLE1BQ2ZDLEVBQVEsRUFBUSxLQUNoQkMsRUFBYyxFQUFRLE1BNEIxQixJQUFJQyxFQW5CSixTQUFTQyxFQUFlQyxHQUN0QixJQUFJQyxFQUFVLElBQUlMLEVBQU1JLEdBQ3BCRSxFQUFXUCxFQUFLQyxFQUFNTyxVQUFVekUsUUFBU3VFLEdBYTdDLE9BVkFuRyxFQUFNc0csT0FBT0YsRUFBVU4sRUFBTU8sVUFBV0YsR0FHeENuRyxFQUFNc0csT0FBT0YsRUFBVUQsR0FHdkJDLEVBQVNHLE9BQVMsU0FBZ0JDLEdBQ2hDLE9BQU9QLEVBQWVGLEVBQVlHLEVBQWVNLEdBQ25ELEVBRU9KLENBQ1QsQ0FHWUgsQ0EzQkcsRUFBUSxPQThCdkJELEVBQU1GLE1BQVFBLEVBR2RFLEVBQU12RixjQUFnQixFQUFRLEtBQzlCdUYsRUFBTVMsWUFBYyxFQUFRLE1BQzVCVCxFQUFNVSxTQUFXLEVBQVEsTUFDekJWLEVBQU1XLFFBQVUsZ0JBQ2hCWCxFQUFNWSxXQUFhLEVBQVEsTUFHM0JaLEVBQU14RixXQUFhLEVBQVEsTUFHM0J3RixFQUFNYSxPQUFTYixFQUFNdkYsY0FHckJ1RixFQUFNYyxJQUFNLFNBQWFDLEdBQ3ZCLE9BQU9uRyxRQUFRa0csSUFBSUMsRUFDckIsRUFDQWYsRUFBTWdCLE9BQVMsRUFBUSxNQUd2QmhCLEVBQU1pQixhQUFlLEVBQVEsTUFFN0JuSCxFQUFPQyxRQUFVaUcsRUFHakJsRyxFQUFPQyxRQUFQLFFBQXlCaUcsK0JDN0R6QixJQUFJdkYsRUFBZ0IsRUFBUSxLQVE1QixTQUFTZ0csRUFBWVMsR0FDbkIsR0FBd0IsbUJBQWJBLEVBQ1QsTUFBTSxJQUFJQyxVQUFVLGdDQUd0QixJQUFJQyxFQUVKQyxLQUFLQyxRQUFVLElBQUkxRyxTQUFRLFNBQXlCQyxHQUNsRHVHLEVBQWlCdkcsQ0FDbkIsSUFFQSxJQUFJMEcsRUFBUUYsS0FHWkEsS0FBS0MsUUFBUUUsTUFBSyxTQUFTbkMsR0FDekIsR0FBS2tDLEVBQU1FLFdBQVgsQ0FFQSxJQUFJQyxFQUNBQyxFQUFJSixFQUFNRSxXQUFXRyxPQUV6QixJQUFLRixFQUFJLEVBQUdBLEVBQUlDLEVBQUdELElBQ2pCSCxFQUFNRSxXQUFXQyxHQUFHckMsR0FFdEJrQyxFQUFNRSxXQUFhLElBUlUsQ0FTL0IsSUFHQUosS0FBS0MsUUFBUUUsS0FBTyxTQUFTSyxHQUMzQixJQUFJQyxFQUVBUixFQUFVLElBQUkxRyxTQUFRLFNBQVNDLEdBQ2pDMEcsRUFBTS9CLFVBQVUzRSxHQUNoQmlILEVBQVdqSCxDQUNiLElBQUcyRyxLQUFLSyxHQU1SLE9BSkFQLEVBQVFqQyxPQUFTLFdBQ2ZrQyxFQUFNaEcsWUFBWXVHLEVBQ3BCLEVBRU9SLENBQ1QsRUFFQUosR0FBUyxTQUFnQmEsR0FDbkJSLEVBQU1TLFNBS1ZULEVBQU1TLE9BQVMsSUFBSXZILEVBQWNzSCxHQUNqQ1gsRUFBZUcsRUFBTVMsUUFDdkIsR0FDRixDQUtBdkIsRUFBWUosVUFBVTRCLGlCQUFtQixXQUN2QyxHQUFJWixLQUFLVyxPQUNQLE1BQU1YLEtBQUtXLE1BRWYsRUFNQXZCLEVBQVlKLFVBQVViLFVBQVksU0FBbUIwQyxHQUMvQ2IsS0FBS1csT0FDUEUsRUFBU2IsS0FBS1csUUFJWlgsS0FBS0ksV0FDUEosS0FBS0ksV0FBV1UsS0FBS0QsR0FFckJiLEtBQUtJLFdBQWEsQ0FBQ1MsRUFFdkIsRUFNQXpCLEVBQVlKLFVBQVU5RSxZQUFjLFNBQXFCMkcsR0FDdkQsR0FBS2IsS0FBS0ksV0FBVixDQUdBLElBQUlXLEVBQVFmLEtBQUtJLFdBQVcvRCxRQUFRd0UsSUFDckIsSUFBWEUsR0FDRmYsS0FBS0ksV0FBV1ksT0FBT0QsRUFBTyxFQUhoQyxDQUtGLEVBTUEzQixFQUFZNkIsT0FBUyxXQUNuQixJQUFJakQsRUFJSixNQUFPLENBQ0xrQyxNQUpVLElBQUlkLEdBQVksU0FBa0I4QixHQUM1Q2xELEVBQVNrRCxDQUNYLElBR0VsRCxPQUFRQSxFQUVaLEVBRUF2RixFQUFPQyxRQUFVMEcsOEJDcEhqQixJQUFJakcsRUFBYSxFQUFRLE1BU3pCLFNBQVNDLEVBQWNzSCxHQUVyQnZILEVBQVdnSSxLQUFLbkIsS0FBaUIsTUFBWFUsRUFBa0IsV0FBYUEsRUFBU3ZILEVBQVdpSSxjQUN6RXBCLEtBQUtxQixLQUFPLGVBQ2QsQ0FaWSxFQUFRLE1BY2RDLFNBQVNsSSxFQUFlRCxFQUFZLENBQ3hDb0ksWUFBWSxJQUdkOUksRUFBT0MsUUFBVVUseUJDbkJqQlgsRUFBT0MsUUFBVSxTQUFrQmdELEdBQ2pDLFNBQVVBLElBQVNBLEVBQU02RixXQUMzQiw4QkNGQSxJQUFJNUksRUFBUSxFQUFRLE1BQ2hCRyxFQUFXLEVBQVEsTUFDbkIwSSxFQUFxQixFQUFRLEtBQzdCQyxFQUFrQixFQUFRLE1BQzFCL0MsRUFBYyxFQUFRLE1BQ3RCM0YsRUFBZ0IsRUFBUSxNQUN4QjJJLEVBQVksRUFBUSxNQUVwQkMsRUFBYUQsRUFBVUMsV0FNM0IsU0FBU2xELEVBQU1VLEdBQ2JhLEtBQUs0QixTQUFXekMsRUFDaEJhLEtBQUs2QixhQUFlLENBQ2xCdEgsUUFBUyxJQUFJaUgsRUFDYmxHLFNBQVUsSUFBSWtHLEVBRWxCLENBT0EvQyxFQUFNTyxVQUFVekUsUUFBVSxTQUFpQnVILEVBQWF4SSxHQUczQixpQkFBaEJ3SSxHQUNUeEksRUFBU0EsR0FBVSxDQUFDLEdBQ2I0QixJQUFNNEcsRUFFYnhJLEVBQVN3SSxHQUFlLENBQUMsR0FHM0J4SSxFQUFTb0YsRUFBWXNCLEtBQUs0QixTQUFVdEksSUFHekJ1QyxPQUNUdkMsRUFBT3VDLE9BQVN2QyxFQUFPdUMsT0FBTzRCLGNBQ3JCdUMsS0FBSzRCLFNBQVMvRixPQUN2QnZDLEVBQU91QyxPQUFTbUUsS0FBSzRCLFNBQVMvRixPQUFPNEIsY0FFckNuRSxFQUFPdUMsT0FBUyxNQUdsQixJQUFJZ0IsRUFBZXZELEVBQU91RCxrQkFFTE8sSUFBakJQLEdBQ0Y2RSxFQUFVSyxjQUFjbEYsRUFBYyxDQUNwQ21GLGtCQUFtQkwsRUFBVzlFLGFBQWE4RSxFQUFXTSxTQUN0REMsa0JBQW1CUCxFQUFXOUUsYUFBYThFLEVBQVdNLFNBQ3REbkYsb0JBQXFCNkUsRUFBVzlFLGFBQWE4RSxFQUFXTSxXQUN2RCxHQUlMLElBQUlFLEVBQTBCLEdBQzFCQyxHQUFpQyxFQUNyQ3BDLEtBQUs2QixhQUFhdEgsUUFBUStDLFNBQVEsU0FBb0MrRSxHQUNqQyxtQkFBeEJBLEVBQVlDLFVBQTBELElBQWhDRCxFQUFZQyxRQUFRaEosS0FJckU4SSxFQUFpQ0EsR0FBa0NDLEVBQVlFLFlBRS9FSixFQUF3QkssUUFBUUgsRUFBWUksVUFBV0osRUFBWUssVUFDckUsSUFFQSxJQUtJekMsRUFMQTBDLEVBQTJCLEdBTy9CLEdBTkEzQyxLQUFLNkIsYUFBYXZHLFNBQVNnQyxTQUFRLFNBQWtDK0UsR0FDbkVNLEVBQXlCN0IsS0FBS3VCLEVBQVlJLFVBQVdKLEVBQVlLLFNBQ25FLEtBSUtOLEVBQWdDLENBQ25DLElBQUlRLEVBQVEsQ0FBQ25CLE9BQWlCckUsR0FNOUIsSUFKQXlGLE1BQU03RCxVQUFVd0QsUUFBUU0sTUFBTUYsRUFBT1QsR0FDckNTLEVBQVFBLEVBQU1HLE9BQU9KLEdBRXJCMUMsRUFBVTFHLFFBQVFDLFFBQVFGLEdBQ25Cc0osRUFBTXJDLFFBQ1hOLEVBQVVBLEVBQVFFLEtBQUt5QyxFQUFNSSxRQUFTSixFQUFNSSxTQUc5QyxPQUFPL0MsQ0FDVCxDQUlBLElBREEsSUFBSWdELEVBQVkzSixFQUNUNkksRUFBd0I1QixRQUFRLENBQ3JDLElBQUkyQyxFQUFjZixFQUF3QmEsUUFDdENHLEVBQWFoQixFQUF3QmEsUUFDekMsSUFDRUMsRUFBWUMsRUFBWUQsRUFJMUIsQ0FIRSxNQUFPRyxHQUNQRCxFQUFXQyxHQUNYLEtBQ0YsQ0FDRixDQUVBLElBQ0VuRCxFQUFVd0IsRUFBZ0J3QixFQUc1QixDQUZFLE1BQU9HLEdBQ1AsT0FBTzdKLFFBQVFFLE9BQU8ySixFQUN4QixDQUVBLEtBQU9ULEVBQXlCcEMsUUFDOUJOLEVBQVVBLEVBQVFFLEtBQUt3QyxFQUF5QkssUUFBU0wsRUFBeUJLLFNBR3BGLE9BQU8vQyxDQUNULEVBRUF4QixFQUFNTyxVQUFVcUUsT0FBUyxTQUFnQi9KLEdBQ3ZDQSxFQUFTb0YsRUFBWXNCLEtBQUs0QixTQUFVdEksR0FDcEMsSUFBSTBCLEVBQVdqQyxFQUFjTyxFQUFPMkIsUUFBUzNCLEVBQU80QixLQUNwRCxPQUFPcEMsRUFBU2tDLEVBQVUxQixFQUFPeUMsT0FBUXpDLEVBQU8wQyxpQkFDbEQsRUFHQXJELEVBQU0yRSxRQUFRLENBQUMsU0FBVSxNQUFPLE9BQVEsWUFBWSxTQUE2QnpCLEdBRS9FNEMsRUFBTU8sVUFBVW5ELEdBQVUsU0FBU1gsRUFBSzVCLEdBQ3RDLE9BQU8wRyxLQUFLekYsUUFBUW1FLEVBQVlwRixHQUFVLENBQUMsRUFBRyxDQUM1Q3VDLE9BQVFBLEVBQ1JYLElBQUtBLEVBQ0x0QixNQUFPTixHQUFVLENBQUMsR0FBR00sT0FFekIsQ0FDRixJQUVBakIsRUFBTTJFLFFBQVEsQ0FBQyxPQUFRLE1BQU8sVUFBVSxTQUErQnpCLEdBR3JFLFNBQVN5SCxFQUFtQkMsR0FDMUIsT0FBTyxTQUFvQnJJLEVBQUt0QixFQUFNTixHQUNwQyxPQUFPMEcsS0FBS3pGLFFBQVFtRSxFQUFZcEYsR0FBVSxDQUFDLEVBQUcsQ0FDNUN1QyxPQUFRQSxFQUNSL0IsUUFBU3lKLEVBQVMsQ0FDaEIsZUFBZ0IsdUJBQ2QsQ0FBQyxFQUNMckksSUFBS0EsRUFDTHRCLEtBQU1BLElBRVYsQ0FDRixDQUVBNkUsRUFBTU8sVUFBVW5ELEdBQVV5SCxJQUUxQjdFLEVBQU1PLFVBQVVuRCxFQUFTLFFBQVV5SCxHQUFtQixFQUN4RCxJQUVBN0ssRUFBT0MsUUFBVStGLCtCQzdKakIsSUFBSTlGLEVBQVEsRUFBUSxNQVlwQixTQUFTUSxFQUFXdUgsRUFBUzhDLEVBQU1sSyxFQUFRaUIsRUFBU2UsR0FDbERtSSxNQUFNdEMsS0FBS25CLE1BQ1hBLEtBQUtVLFFBQVVBLEVBQ2ZWLEtBQUtxQixLQUFPLGFBQ1ptQyxJQUFTeEQsS0FBS3dELEtBQU9BLEdBQ3JCbEssSUFBVzBHLEtBQUsxRyxPQUFTQSxHQUN6QmlCLElBQVl5RixLQUFLekYsUUFBVUEsR0FDM0JlLElBQWEwRSxLQUFLMUUsU0FBV0EsRUFDL0IsQ0FFQTNDLEVBQU0ySSxTQUFTbkksRUFBWXNLLE1BQU8sQ0FDaENDLE9BQVEsV0FDTixNQUFPLENBRUxoRCxRQUFTVixLQUFLVSxRQUNkVyxLQUFNckIsS0FBS3FCLEtBRVhzQyxZQUFhM0QsS0FBSzJELFlBQ2xCQyxPQUFRNUQsS0FBSzRELE9BRWJDLFNBQVU3RCxLQUFLNkQsU0FDZkMsV0FBWTlELEtBQUs4RCxXQUNqQkMsYUFBYy9ELEtBQUsrRCxhQUNuQkMsTUFBT2hFLEtBQUtnRSxNQUVaMUssT0FBUTBHLEtBQUsxRyxPQUNia0ssS0FBTXhELEtBQUt3RCxLQUNYaEksT0FBUXdFLEtBQUsxRSxVQUFZMEUsS0FBSzFFLFNBQVNFLE9BQVN3RSxLQUFLMUUsU0FBU0UsT0FBUyxLQUUzRSxJQUdGLElBQUl3RCxFQUFZN0YsRUFBVzZGLFVBQ3ZCaUYsRUFBYyxDQUFDLEVBRW5CLENBQ0UsdUJBQ0EsaUJBQ0EsZUFDQSxZQUNBLGNBQ0EsNEJBQ0EsaUJBQ0EsbUJBQ0Esa0JBQ0EsZ0JBRUEzRyxTQUFRLFNBQVNrRyxHQUNqQlMsRUFBWVQsR0FBUSxDQUFDOUgsTUFBTzhILEVBQzlCLElBRUFVLE9BQU9DLGlCQUFpQmhMLEVBQVk4SyxHQUNwQ0MsT0FBT0UsZUFBZXBGLEVBQVcsZUFBZ0IsQ0FBQ3RELE9BQU8sSUFHekR2QyxFQUFXa0wsS0FBTyxTQUFTakIsRUFBT0ksRUFBTWxLLEVBQVFpQixFQUFTZSxFQUFVZ0osR0FDakUsSUFBSUMsRUFBYUwsT0FBT2hGLE9BQU9GLEdBWS9CLE9BVkFyRyxFQUFNNkwsYUFBYXBCLEVBQU9tQixHQUFZLFNBQWdCRSxHQUNwRCxPQUFPQSxJQUFRaEIsTUFBTXpFLFNBQ3ZCLElBRUE3RixFQUFXZ0ksS0FBS29ELEVBQVluQixFQUFNMUMsUUFBUzhDLEVBQU1sSyxFQUFRaUIsRUFBU2UsR0FFbEVpSixFQUFXbEQsS0FBTytCLEVBQU0vQixLQUV4QmlELEdBQWVKLE9BQU9RLE9BQU9ILEVBQVlELEdBRWxDQyxDQUNULEVBRUE5TCxFQUFPQyxRQUFVUyw4QkNuRmpCLElBQUlSLEVBQVEsRUFBUSxNQUVwQixTQUFTNkksSUFDUHhCLEtBQUsyRSxTQUFXLEVBQ2xCLENBVUFuRCxFQUFtQnhDLFVBQVU0RixJQUFNLFNBQWFuQyxFQUFXQyxFQUFVbUMsR0FPbkUsT0FOQTdFLEtBQUsyRSxTQUFTN0QsS0FBSyxDQUNqQjJCLFVBQVdBLEVBQ1hDLFNBQVVBLEVBQ1ZILGNBQWFzQyxHQUFVQSxFQUFRdEMsWUFDL0JELFFBQVN1QyxFQUFVQSxFQUFRdkMsUUFBVSxPQUVoQ3RDLEtBQUsyRSxTQUFTcEUsT0FBUyxDQUNoQyxFQU9BaUIsRUFBbUJ4QyxVQUFVOEYsTUFBUSxTQUFlQyxHQUM5Qy9FLEtBQUsyRSxTQUFTSSxLQUNoQi9FLEtBQUsyRSxTQUFTSSxHQUFNLEtBRXhCLEVBVUF2RCxFQUFtQnhDLFVBQVUxQixRQUFVLFNBQWlCMEgsR0FDdERyTSxFQUFNMkUsUUFBUTBDLEtBQUsyRSxVQUFVLFNBQXdCTSxHQUN6QyxPQUFOQSxHQUNGRCxFQUFHQyxFQUVQLEdBQ0YsRUFFQXhNLEVBQU9DLFFBQVU4SSwrQkNuRGpCLElBQUkwRCxFQUFnQixFQUFRLE1BQ3hCQyxFQUFjLEVBQVEsTUFXMUIxTSxFQUFPQyxRQUFVLFNBQXVCdUMsRUFBU21LLEdBQy9DLE9BQUluSyxJQUFZaUssRUFBY0UsR0FDckJELEVBQVlsSyxFQUFTbUssR0FFdkJBLENBQ1QsK0JDakJBLElBQUl6TSxFQUFRLEVBQVEsTUFDaEIwTSxFQUFnQixFQUFRLE1BQ3hCaEcsRUFBVyxFQUFRLE1BQ25CdUMsRUFBVyxFQUFRLE1BQ25CeEksRUFBZ0IsRUFBUSxLQUs1QixTQUFTa00sRUFBNkJoTSxHQUtwQyxHQUpJQSxFQUFPVyxhQUNUWCxFQUFPVyxZQUFZMkcsbUJBR2pCdEgsRUFBT2EsUUFBVWIsRUFBT2EsT0FBT2lFLFFBQ2pDLE1BQU0sSUFBSWhGLENBRWQsQ0FRQVgsRUFBT0MsUUFBVSxTQUF5QlksR0E4QnhDLE9BN0JBZ00sRUFBNkJoTSxHQUc3QkEsRUFBT1EsUUFBVVIsRUFBT1EsU0FBVyxDQUFDLEVBR3BDUixFQUFPTSxLQUFPeUwsRUFBY2xFLEtBQzFCN0gsRUFDQUEsRUFBT00sS0FDUE4sRUFBT1EsUUFDUFIsRUFBT2lNLGtCQUlUak0sRUFBT1EsUUFBVW5CLEVBQU02TSxNQUNyQmxNLEVBQU9RLFFBQVEyTCxRQUFVLENBQUMsRUFDMUJuTSxFQUFPUSxRQUFRUixFQUFPdUMsU0FBVyxDQUFDLEVBQ2xDdkMsRUFBT1EsU0FHVG5CLEVBQU0yRSxRQUNKLENBQUMsU0FBVSxNQUFPLE9BQVEsT0FBUSxNQUFPLFFBQVMsV0FDbEQsU0FBMkJ6QixVQUNsQnZDLEVBQU9RLFFBQVErQixFQUN4QixLQUdZdkMsRUFBT29NLFNBQVc5RCxFQUFTOEQsU0FFMUJwTSxHQUFRNkcsTUFBSyxTQUE2QjdFLEdBV3ZELE9BVkFnSyxFQUE2QmhNLEdBRzdCZ0MsRUFBUzFCLEtBQU95TCxFQUFjbEUsS0FDNUI3SCxFQUNBZ0MsRUFBUzFCLEtBQ1QwQixFQUFTeEIsUUFDVFIsRUFBT3FNLG1CQUdGckssQ0FDVCxJQUFHLFNBQTRCcUYsR0FlN0IsT0FkS3RCLEVBQVNzQixLQUNaMkUsRUFBNkJoTSxHQUd6QnFILEdBQVVBLEVBQU9yRixXQUNuQnFGLEVBQU9yRixTQUFTMUIsS0FBT3lMLEVBQWNsRSxLQUNuQzdILEVBQ0FxSCxFQUFPckYsU0FBUzFCLEtBQ2hCK0csRUFBT3JGLFNBQVN4QixRQUNoQlIsRUFBT3FNLHFCQUtOcE0sUUFBUUUsT0FBT2tILEVBQ3hCLEdBQ0YsK0JDcEZBLElBQUloSSxFQUFRLEVBQVEsTUFVcEJGLEVBQU9DLFFBQVUsU0FBcUJrTixFQUFTQyxHQUU3Q0EsRUFBVUEsR0FBVyxDQUFDLEVBQ3RCLElBQUl2TSxFQUFTLENBQUMsRUFFZCxTQUFTd00sRUFBZUMsRUFBUTlFLEdBQzlCLE9BQUl0SSxFQUFNcU4sY0FBY0QsSUFBV3BOLEVBQU1xTixjQUFjL0UsR0FDOUN0SSxFQUFNNk0sTUFBTU8sRUFBUTlFLEdBQ2xCdEksRUFBTXFOLGNBQWMvRSxHQUN0QnRJLEVBQU02TSxNQUFNLENBQUMsRUFBR3ZFLEdBQ2R0SSxFQUFNc04sUUFBUWhGLEdBQ2hCQSxFQUFPaUYsUUFFVGpGLENBQ1QsQ0FHQSxTQUFTa0YsRUFBb0JDLEdBQzNCLE9BQUt6TixFQUFNZ0YsWUFBWWtJLEVBQVFPLElBRW5Cek4sRUFBTWdGLFlBQVlpSSxFQUFRUSxTQUEvQixFQUNFTixPQUFlMUksRUFBV3dJLEVBQVFRLElBRmxDTixFQUFlRixFQUFRUSxHQUFPUCxFQUFRTyxHQUlqRCxDQUdBLFNBQVNDLEVBQWlCRCxHQUN4QixJQUFLek4sRUFBTWdGLFlBQVlrSSxFQUFRTyxJQUM3QixPQUFPTixPQUFlMUksRUFBV3lJLEVBQVFPLEdBRTdDLENBR0EsU0FBU0UsRUFBaUJGLEdBQ3hCLE9BQUt6TixFQUFNZ0YsWUFBWWtJLEVBQVFPLElBRW5Cek4sRUFBTWdGLFlBQVlpSSxFQUFRUSxTQUEvQixFQUNFTixPQUFlMUksRUFBV3dJLEVBQVFRLElBRmxDTixPQUFlMUksRUFBV3lJLEVBQVFPLEdBSTdDLENBR0EsU0FBU0csRUFBZ0JILEdBQ3ZCLE9BQUlBLEtBQVFQLEVBQ0hDLEVBQWVGLEVBQVFRLEdBQU9QLEVBQVFPLElBQ3BDQSxLQUFRUixFQUNWRSxPQUFlMUksRUFBV3dJLEVBQVFRLFNBRHBDLENBR1QsQ0FFQSxJQUFJSSxFQUFXLENBQ2IsSUFBT0gsRUFDUCxPQUFVQSxFQUNWLEtBQVFBLEVBQ1IsUUFBV0MsRUFDWCxpQkFBb0JBLEVBQ3BCLGtCQUFxQkEsRUFDckIsaUJBQW9CQSxFQUNwQixRQUFXQSxFQUNYLGVBQWtCQSxFQUNsQixnQkFBbUJBLEVBQ25CLFFBQVdBLEVBQ1gsYUFBZ0JBLEVBQ2hCLGVBQWtCQSxFQUNsQixlQUFrQkEsRUFDbEIsaUJBQW9CQSxFQUNwQixtQkFBc0JBLEVBQ3RCLFdBQWNBLEVBQ2QsaUJBQW9CQSxFQUNwQixjQUFpQkEsRUFDakIsZUFBa0JBLEVBQ2xCLFVBQWFBLEVBQ2IsVUFBYUEsRUFDYixXQUFjQSxFQUNkLFlBQWVBLEVBQ2YsV0FBY0EsRUFDZCxpQkFBb0JBLEVBQ3BCLGVBQWtCQyxHQVNwQixPQU5BNU4sRUFBTTJFLFFBQVE0RyxPQUFPdUMsS0FBS2IsR0FBUzdDLE9BQU9tQixPQUFPdUMsS0FBS1osS0FBVyxTQUE0Qk8sR0FDM0YsSUFBSVosRUFBUWdCLEVBQVNKLElBQVNELEVBQzFCTyxFQUFjbEIsRUFBTVksR0FDdkJ6TixFQUFNZ0YsWUFBWStJLElBQWdCbEIsSUFBVWUsSUFBcUJqTixFQUFPOE0sR0FBUU0sRUFDbkYsSUFFT3BOLENBQ1QsK0JDakdBLElBQUlILEVBQWEsRUFBUSxNQVN6QlYsRUFBT0MsUUFBVSxTQUFnQmMsRUFBU0MsRUFBUTZCLEdBQ2hELElBQUlxTCxFQUFpQnJMLEVBQVNoQyxPQUFPcU4sZUFDaENyTCxFQUFTRSxRQUFXbUwsSUFBa0JBLEVBQWVyTCxFQUFTRSxRQUdqRS9CLEVBQU8sSUFBSU4sRUFDVCxtQ0FBcUNtQyxFQUFTRSxPQUM5QyxDQUFDckMsRUFBV21GLGdCQUFpQm5GLEVBQVd5TixrQkFBa0JDLEtBQUtDLE1BQU14TCxFQUFTRSxPQUFTLEtBQU8sR0FDOUZGLEVBQVNoQyxPQUNUZ0MsRUFBU2YsUUFDVGUsSUFQRjlCLEVBQVE4QixFQVVaLCtCQ3RCQSxJQUFJM0MsRUFBUSxFQUFRLE1BQ2hCaUosRUFBVyxFQUFRLE1BVXZCbkosRUFBT0MsUUFBVSxTQUF1QmtCLEVBQU1FLEVBQVNpTixHQUNyRCxJQUFJakksRUFBVWtCLE1BQVE0QixFQU10QixPQUpBakosRUFBTTJFLFFBQVF5SixHQUFLLFNBQW1CL0IsR0FDcENwTCxFQUFPb0wsRUFBRzdELEtBQUtyQyxFQUFTbEYsRUFBTUUsRUFDaEMsSUFFT0YsQ0FDVCwrQkNuQkEsSUFBSWpCLEVBQVEsRUFBUSxNQUNoQnFPLEVBQXNCLEVBQVEsTUFDOUI3TixFQUFhLEVBQVEsTUFDckJELEVBQXVCLEVBQVEsTUFDL0JxRyxFQUFhLEVBQVEsTUFFckIwSCxFQUF1QixDQUN6QixlQUFnQixxQ0FHbEIsU0FBU0MsRUFBc0JwTixFQUFTNEIsSUFDakMvQyxFQUFNZ0YsWUFBWTdELElBQVluQixFQUFNZ0YsWUFBWTdELEVBQVEsbUJBQzNEQSxFQUFRLGdCQUFrQjRCLEVBRTlCLENBNkJBLElBMUJNZ0ssRUEwQkY5RCxFQUFXLENBRWIvRSxhQUFjM0QsRUFFZHdNLFVBN0I4QixvQkFBbkJsTCxnQkFHbUIsb0JBQVoyTSxTQUF1RSxxQkFBNUNqRCxPQUFPbEYsVUFBVW9JLFNBQVNqRyxLQUFLZ0csWUFEMUV6QixFQUFVLEVBQVEsT0FLYkEsR0F3QlBILGlCQUFrQixDQUFDLFNBQTBCM0wsRUFBTUUsR0FJakQsR0FIQWtOLEVBQW9CbE4sRUFBUyxVQUM3QmtOLEVBQW9CbE4sRUFBUyxnQkFFekJuQixFQUFNMEIsV0FBV1QsSUFDbkJqQixFQUFNME8sY0FBY3pOLElBQ3BCakIsRUFBTTJPLFNBQVMxTixJQUNmakIsRUFBTTRPLFNBQVMzTixJQUNmakIsRUFBTTZPLE9BQU81TixJQUNiakIsRUFBTThPLE9BQU83TixHQUViLE9BQU9BLEVBRVQsR0FBSWpCLEVBQU0rTyxrQkFBa0I5TixHQUMxQixPQUFPQSxFQUFLK04sT0FFZCxHQUFJaFAsRUFBTWlQLGtCQUFrQmhPLEdBRTFCLE9BREFzTixFQUFzQnBOLEVBQVMsbURBQ3hCRixFQUFLd04sV0FHZCxJQUdJUyxFQUhBQyxFQUFrQm5QLEVBQU1vUCxTQUFTbk8sR0FDakNvTyxFQUFjbE8sR0FBV0EsRUFBUSxnQkFJckMsSUFBSytOLEVBQWFsUCxFQUFNa1AsV0FBV2pPLEtBQVdrTyxHQUFtQyx3QkFBaEJFLEVBQXdDLENBQ3ZHLElBQUlDLEVBQVlqSSxLQUFLa0ksS0FBT2xJLEtBQUtrSSxJQUFJQyxTQUNyQyxPQUFPNUksRUFBV3NJLEVBQWEsQ0FBQyxVQUFXak8sR0FBUUEsRUFBTXFPLEdBQWEsSUFBSUEsRUFDNUUsQ0FBTyxPQUFJSCxHQUFtQyxxQkFBaEJFLEdBQzVCZCxFQUFzQnBOLEVBQVMsb0JBbkRyQyxTQUF5QnNPLEVBQVVDLEVBQVFDLEdBQ3pDLEdBQUkzUCxFQUFNNFAsU0FBU0gsR0FDakIsSUFFRSxPQURDQyxHQUFVRyxLQUFLQyxPQUFPTCxHQUNoQnpQLEVBQU0rUCxLQUFLTixFQUtwQixDQUpFLE1BQU9PLEdBQ1AsR0FBZSxnQkFBWEEsRUFBRXRILEtBQ0osTUFBTXNILENBRVYsQ0FHRixPQUFRTCxHQUFXRSxLQUFLSSxXQUFXUixFQUNyQyxDQXVDYVMsQ0FBZ0JqUCxJQUdsQkEsQ0FDVCxHQUVBK0wsa0JBQW1CLENBQUMsU0FBMkIvTCxHQUM3QyxJQUFJaUQsRUFBZW1ELEtBQUtuRCxjQUFnQitFLEVBQVMvRSxhQUM3Q21GLEVBQW9CbkYsR0FBZ0JBLEVBQWFtRixrQkFDakRFLEVBQW9CckYsR0FBZ0JBLEVBQWFxRixrQkFDakQ0RyxHQUFxQjlHLEdBQTJDLFNBQXRCaEMsS0FBS2pHLGFBRW5ELEdBQUkrTyxHQUFzQjVHLEdBQXFCdkosRUFBTTRQLFNBQVMzTyxJQUFTQSxFQUFLMkcsT0FDMUUsSUFDRSxPQUFPaUksS0FBS0MsTUFBTTdPLEVBUXBCLENBUEUsTUFBTytPLEdBQ1AsR0FBSUcsRUFBbUIsQ0FDckIsR0FBZSxnQkFBWEgsRUFBRXRILEtBQ0osTUFBTWxJLEVBQVdrTCxLQUFLc0UsRUFBR3hQLEVBQVd5TixpQkFBa0I1RyxLQUFNLEtBQU1BLEtBQUsxRSxVQUV6RSxNQUFNcU4sQ0FDUixDQUNGLENBR0YsT0FBTy9PLENBQ1QsR0FNQXFDLFFBQVMsRUFFVGlCLGVBQWdCLGFBQ2hCRyxlQUFnQixlQUVoQjBMLGtCQUFtQixFQUNuQkMsZUFBZ0IsRUFFaEJkLElBQUssQ0FDSEMsU0FBVSxFQUFRLE9BR3BCeEIsZUFBZ0IsU0FBd0JuTCxHQUN0QyxPQUFPQSxHQUFVLEtBQU9BLEVBQVMsR0FDbkMsRUFFQTFCLFFBQVMsQ0FDUDJMLE9BQVEsQ0FDTixPQUFVLHVDQUtoQjlNLEVBQU0yRSxRQUFRLENBQUMsU0FBVSxNQUFPLFNBQVMsU0FBNkJ6QixHQUNwRStGLEVBQVM5SCxRQUFRK0IsR0FBVSxDQUFDLENBQzlCLElBRUFsRCxFQUFNMkUsUUFBUSxDQUFDLE9BQVEsTUFBTyxVQUFVLFNBQStCekIsR0FDckUrRixFQUFTOUgsUUFBUStCLEdBQVVsRCxFQUFNNk0sTUFBTXlCLEVBQ3pDLElBRUF4TyxFQUFPQyxRQUFVa0oseUJDL0lqQm5KLEVBQU9DLFFBQVUsQ0FDZnNKLG1CQUFtQixFQUNuQkUsbUJBQW1CLEVBQ25CcEYscUJBQXFCLGFDTHZCckUsRUFBT0MsUUFBVSxDQUNmLFFBQVcsaUNDQ2JELEVBQU9DLFFBQVUsU0FBY3NNLEVBQUlpRSxHQUNqQyxPQUFPLFdBRUwsSUFEQSxJQUFJQyxFQUFPLElBQUlyRyxNQUFNc0csVUFBVTVJLFFBQ3RCRixFQUFJLEVBQUdBLEVBQUk2SSxFQUFLM0ksT0FBUUYsSUFDL0I2SSxFQUFLN0ksR0FBSzhJLFVBQVU5SSxHQUV0QixPQUFPMkUsRUFBR2xDLE1BQU1tRyxFQUFTQyxFQUMzQixDQUNGLCtCQ1JBLElBQUl2USxFQUFRLEVBQVEsTUFFcEIsU0FBU3lRLEVBQU83TCxHQUNkLE9BQU8xQyxtQkFBbUIwQyxHQUN4QjhMLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxPQUFRLEtBQ2hCQSxRQUFRLFFBQVMsS0FDakJBLFFBQVEsT0FBUSxLQUNoQkEsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLFFBQVMsSUFDckIsQ0FTQTVRLEVBQU9DLFFBQVUsU0FBa0J3QyxFQUFLYSxFQUFRQyxHQUU5QyxJQUFLRCxFQUNILE9BQU9iLEVBR1QsSUFBSW9PLEVBQ0osR0FBSXROLEVBQ0ZzTixFQUFtQnROLEVBQWlCRCxRQUMvQixHQUFJcEQsRUFBTWlQLGtCQUFrQjdMLEdBQ2pDdU4sRUFBbUJ2TixFQUFPcUwsZUFDckIsQ0FDTCxJQUFJbUMsRUFBUSxHQUVaNVEsRUFBTTJFLFFBQVF2QixHQUFRLFNBQW1Cd0IsRUFBS0MsR0FDeENELFVBSUE1RSxFQUFNc04sUUFBUTFJLEdBQ2hCQyxHQUFZLEtBRVpELEVBQU0sQ0FBQ0EsR0FHVDVFLEVBQU0yRSxRQUFRQyxHQUFLLFNBQW9CaU0sR0FDakM3USxFQUFNOFEsT0FBT0QsR0FDZkEsRUFBSUEsRUFBRUUsY0FDRy9RLEVBQU1vUCxTQUFTeUIsS0FDeEJBLEVBQUloQixLQUFLSSxVQUFVWSxJQUVyQkQsRUFBTXpJLEtBQUtzSSxFQUFPNUwsR0FBTyxJQUFNNEwsRUFBT0ksR0FDeEMsSUFDRixJQUVBRixFQUFtQkMsRUFBTUksS0FBSyxJQUNoQyxDQUVBLEdBQUlMLEVBQWtCLENBQ3BCLElBQUlNLEVBQWdCMU8sRUFBSW1CLFFBQVEsTUFDVCxJQUFuQnVOLElBQ0YxTyxFQUFNQSxFQUFJZ0wsTUFBTSxFQUFHMEQsSUFHckIxTyxLQUE4QixJQUF0QkEsRUFBSW1CLFFBQVEsS0FBYyxJQUFNLEtBQU9pTixDQUNqRCxDQUVBLE9BQU9wTyxDQUNULHlCQzVEQXpDLEVBQU9DLFFBQVUsU0FBcUJ1QyxFQUFTNE8sR0FDN0MsT0FBT0EsRUFDSDVPLEVBQVFvTyxRQUFRLE9BQVEsSUFBTSxJQUFNUSxFQUFZUixRQUFRLE9BQVEsSUFDaEVwTyxDQUNOLCtCQ1hBLElBQUl0QyxFQUFRLEVBQVEsTUFFcEJGLEVBQU9DLFFBQ0xDLEVBQU0yQix1QkFJSyxDQUNMd1AsTUFBTyxTQUFlekksRUFBTTNGLEVBQU9xTyxFQUFTQyxFQUFNQyxFQUFRQyxHQUN4RCxJQUFJQyxFQUFTLEdBQ2JBLEVBQU9ySixLQUFLTyxFQUFPLElBQU14RyxtQkFBbUJhLElBRXhDL0MsRUFBTXlSLFNBQVNMLElBQ2pCSSxFQUFPckosS0FBSyxXQUFhLElBQUl1SixLQUFLTixHQUFTTyxlQUd6QzNSLEVBQU00UCxTQUFTeUIsSUFDakJHLEVBQU9ySixLQUFLLFFBQVVrSixHQUdwQnJSLEVBQU00UCxTQUFTMEIsSUFDakJFLEVBQU9ySixLQUFLLFVBQVltSixJQUdYLElBQVhDLEdBQ0ZDLEVBQU9ySixLQUFLLFVBR2R5SixTQUFTSixPQUFTQSxFQUFPUixLQUFLLEtBQ2hDLEVBRUF4TSxLQUFNLFNBQWNrRSxHQUNsQixJQUFJbUosRUFBUUQsU0FBU0osT0FBT0ssTUFBTSxJQUFJQyxPQUFPLGFBQWVwSixFQUFPLGNBQ25FLE9BQVFtSixFQUFRRSxtQkFBbUJGLEVBQU0sSUFBTSxJQUNqRCxFQUVBRyxPQUFRLFNBQWdCdEosR0FDdEJyQixLQUFLOEosTUFBTXpJLEVBQU0sR0FBSWdKLEtBQUtPLE1BQVEsTUFDcEMsR0FNSyxDQUNMZCxNQUFPLFdBQWtCLEVBQ3pCM00sS0FBTSxXQUFrQixPQUFPLElBQU0sRUFDckN3TixPQUFRLFdBQW1CLDBCQ3pDbkNsUyxFQUFPQyxRQUFVLFNBQXVCd0MsR0FJdEMsTUFBTyw4QkFBOEIyUCxLQUFLM1AsRUFDNUMsK0JDWEEsSUFBSXZDLEVBQVEsRUFBUSxNQVFwQkYsRUFBT0MsUUFBVSxTQUFzQm9TLEdBQ3JDLE9BQU9uUyxFQUFNb1AsU0FBUytDLEtBQXNDLElBQXpCQSxFQUFRbEwsWUFDN0MsK0JDVkEsSUFBSWpILEVBQVEsRUFBUSxNQUVwQkYsRUFBT0MsUUFDTEMsRUFBTTJCLHVCQUlKLFdBQ0UsSUFFSXlRLEVBRkFDLEVBQU8sa0JBQWtCSCxLQUFLSSxVQUFVQyxXQUN4Q0MsRUFBaUJaLFNBQVNhLGNBQWMsS0FTNUMsU0FBU0MsRUFBV25RLEdBQ2xCLElBQUlvUSxFQUFPcFEsRUFXWCxPQVRJOFAsSUFFRkcsRUFBZUksYUFBYSxPQUFRRCxHQUNwQ0EsRUFBT0gsRUFBZUcsTUFHeEJILEVBQWVJLGFBQWEsT0FBUUQsR0FHN0IsQ0FDTEEsS0FBTUgsRUFBZUcsS0FDckJqTixTQUFVOE0sRUFBZTlNLFNBQVc4TSxFQUFlOU0sU0FBU2dMLFFBQVEsS0FBTSxJQUFNLEdBQ2hGbUMsS0FBTUwsRUFBZUssS0FDckJDLE9BQVFOLEVBQWVNLE9BQVNOLEVBQWVNLE9BQU9wQyxRQUFRLE1BQU8sSUFBTSxHQUMzRXFDLEtBQU1QLEVBQWVPLEtBQU9QLEVBQWVPLEtBQUtyQyxRQUFRLEtBQU0sSUFBTSxHQUNwRXNDLFNBQVVSLEVBQWVRLFNBQ3pCQyxLQUFNVCxFQUFlUyxLQUNyQkMsU0FBaUQsTUFBdENWLEVBQWVVLFNBQVNDLE9BQU8sR0FDeENYLEVBQWVVLFNBQ2YsSUFBTVYsRUFBZVUsU0FFM0IsQ0FVQSxPQVJBZCxFQUFZTSxFQUFXVSxPQUFPQyxTQUFTVixNQVFoQyxTQUF5QlcsR0FDOUIsSUFBSUMsRUFBVXZULEVBQU00UCxTQUFTMEQsR0FBZVosRUFBV1ksR0FBY0EsRUFDckUsT0FBUUMsRUFBTzdOLFdBQWEwTSxFQUFVMU0sVUFDbEM2TixFQUFPVixPQUFTVCxFQUFVUyxJQUNoQyxDQUNELENBbERELEdBc0RTLFdBQ0wsT0FBTyxDQUNULCtCQy9ETixJQUFJN1MsRUFBUSxFQUFRLE1BRXBCRixFQUFPQyxRQUFVLFNBQTZCb0IsRUFBU3FTLEdBQ3JEeFQsRUFBTTJFLFFBQVF4RCxHQUFTLFNBQXVCNEIsRUFBTzJGLEdBQy9DQSxJQUFTOEssR0FBa0I5SyxFQUFLdkYsZ0JBQWtCcVEsRUFBZXJRLGdCQUNuRWhDLEVBQVFxUyxHQUFrQnpRLFNBQ25CNUIsRUFBUXVILEdBRW5CLEdBQ0YsWUNWQTVJLEVBQU9DLFFBQVUsa0NDQ2pCLElBQUlDLEVBQVEsRUFBUSxNQUloQnlULEVBQW9CLENBQ3RCLE1BQU8sZ0JBQWlCLGlCQUFrQixlQUFnQixPQUMxRCxVQUFXLE9BQVEsT0FBUSxvQkFBcUIsc0JBQ2hELGdCQUFpQixXQUFZLGVBQWdCLHNCQUM3QyxVQUFXLGNBQWUsY0FnQjVCM1QsRUFBT0MsUUFBVSxTQUFzQm9CLEdBQ3JDLElBQ0kwRCxFQUNBRCxFQUNBOEMsRUFIQTZMLEVBQVMsQ0FBQyxFQUtkLE9BQUtwUyxHQUVMbkIsRUFBTTJFLFFBQVF4RCxFQUFRdVMsTUFBTSxPQUFPLFNBQWdCQyxHQUtqRCxHQUpBak0sRUFBSWlNLEVBQUtqUSxRQUFRLEtBQ2pCbUIsRUFBTTdFLEVBQU0rUCxLQUFLNEQsRUFBS0MsT0FBTyxFQUFHbE0sSUFBSTVDLGNBQ3BDRixFQUFNNUUsRUFBTStQLEtBQUs0RCxFQUFLQyxPQUFPbE0sRUFBSSxJQUU3QjdDLEVBQUssQ0FDUCxHQUFJME8sRUFBTzFPLElBQVE0TyxFQUFrQi9QLFFBQVFtQixJQUFRLEVBQ25ELE9BR0EwTyxFQUFPMU8sR0FERyxlQUFSQSxHQUNhME8sRUFBTzFPLEdBQU8wTyxFQUFPMU8sR0FBTyxJQUFJdUYsT0FBTyxDQUFDeEYsSUFFekMyTyxFQUFPMU8sR0FBTzBPLEVBQU8xTyxHQUFPLEtBQU9ELEVBQU1BLENBRTNELENBQ0YsSUFFTzJPLEdBbkJnQkEsQ0FvQnpCLHdCQ2xEQXpULEVBQU9DLFFBQVUsU0FBdUJ3QyxHQUN0QyxJQUFJc1AsRUFBUSw0QkFBNEJnQyxLQUFLdFIsR0FDN0MsT0FBT3NQLEdBQVNBLEVBQU0sSUFBTSxFQUM5Qix5QkNpQkEvUixFQUFPQyxRQUFVLFNBQWdCK1QsR0FDL0IsT0FBTyxTQUFjQyxHQUNuQixPQUFPRCxFQUFTM0osTUFBTSxLQUFNNEosRUFDOUIsQ0FDRiwrQkN4QkEsSUFBSS9ULEVBQVEsRUFBUSxNQXFFcEJGLEVBQU9DLFFBNURQLFNBQW9CK0wsRUFBS2tJLEdBRXZCQSxFQUFXQSxHQUFZLElBQUl4RSxTQUUzQixJQUFJbkUsRUFBUSxHQUVaLFNBQVM0SSxFQUFhbFIsR0FDcEIsT0FBYyxPQUFWQSxFQUF1QixHQUV2Qi9DLEVBQU04USxPQUFPL04sR0FDUkEsRUFBTWdPLGNBR1gvUSxFQUFNME8sY0FBYzNMLElBQVUvQyxFQUFNa1UsYUFBYW5SLEdBQzVCLG1CQUFUb1IsS0FBc0IsSUFBSUEsS0FBSyxDQUFDcFIsSUFBVXFSLE9BQU8xSSxLQUFLM0ksR0FHL0RBLENBQ1QsQ0F1Q0EsT0FyQ0EsU0FBU3NSLEVBQU1wVCxFQUFNcVQsR0FDbkIsR0FBSXRVLEVBQU1xTixjQUFjcE0sSUFBU2pCLEVBQU1zTixRQUFRck0sR0FBTyxDQUNwRCxJQUE2QixJQUF6Qm9LLEVBQU0zSCxRQUFRekMsR0FDaEIsTUFBTTZKLE1BQU0sa0NBQW9Dd0osR0FHbERqSixFQUFNbEQsS0FBS2xILEdBRVhqQixFQUFNMkUsUUFBUTFELEdBQU0sU0FBYzhCLEVBQU84QixHQUN2QyxJQUFJN0UsRUFBTWdGLFlBQVlqQyxHQUF0QixDQUNBLElBQ0lnUixFQURBUSxFQUFVRCxFQUFZQSxFQUFZLElBQU16UCxFQUFNQSxFQUdsRCxHQUFJOUIsSUFBVXVSLEdBQThCLGlCQUFWdlIsRUFDaEMsR0FBSS9DLEVBQU13VSxTQUFTM1AsRUFBSyxNQUV0QjlCLEVBQVE4TSxLQUFLSSxVQUFVbE4sUUFDbEIsR0FBSS9DLEVBQU13VSxTQUFTM1AsRUFBSyxRQUFVa1AsRUFBTS9ULEVBQU15VSxRQUFRMVIsSUFLM0QsWUFIQWdSLEVBQUlwUCxTQUFRLFNBQVMrUCxJQUNsQjFVLEVBQU1nRixZQUFZMFAsSUFBT1YsRUFBU1csT0FBT0osRUFBU04sRUFBYVMsR0FDbEUsSUFLSkwsRUFBTXRSLEVBQU93UixFQWpCdUIsQ0FrQnRDLElBRUFsSixFQUFNdUosS0FDUixNQUNFWixFQUFTVyxPQUFPTCxFQUFXTCxFQUFhaFQsR0FFNUMsQ0FFQW9ULENBQU12SSxHQUVDa0ksQ0FDVCwrQkNuRUEsSUFBSXJOLEVBQVUsZ0JBQ1ZuRyxFQUFhLEVBQVEsTUFFckJ3SSxFQUFhLENBQUMsRUFHbEIsQ0FBQyxTQUFVLFVBQVcsU0FBVSxXQUFZLFNBQVUsVUFBVXJFLFNBQVEsU0FBU1csRUFBTW9DLEdBQ3JGc0IsRUFBVzFELEdBQVEsU0FBbUJ1UCxHQUNwQyxjQUFjQSxJQUFVdlAsR0FBUSxLQUFPb0MsRUFBSSxFQUFJLEtBQU8sS0FBT3BDLENBQy9ELENBQ0YsSUFFQSxJQUFJd1AsRUFBcUIsQ0FBQyxFQVMxQjlMLEVBQVc5RSxhQUFlLFNBQXNCNkUsRUFBV2dNLEVBQVNoTixHQUNsRSxTQUFTaU4sRUFBY0MsRUFBS0MsR0FDMUIsTUFBTyxXQUFhdk8sRUFBVSwwQkFBNkJzTyxFQUFNLElBQU9DLEdBQVFuTixFQUFVLEtBQU9BLEVBQVUsR0FDN0csQ0FHQSxPQUFPLFNBQVNoRixFQUFPa1MsRUFBS0UsR0FDMUIsSUFBa0IsSUFBZHBNLEVBQ0YsTUFBTSxJQUFJdkksRUFDUndVLEVBQWNDLEVBQUsscUJBQXVCRixFQUFVLE9BQVNBLEVBQVUsS0FDdkV2VSxFQUFXNFUsZ0JBZWYsT0FYSUwsSUFBWUQsRUFBbUJHLEtBQ2pDSCxFQUFtQkcsSUFBTyxFQUUxQkksUUFBUUMsS0FDTk4sRUFDRUMsRUFDQSwrQkFBaUNGLEVBQVUsOENBSzFDaE0sR0FBWUEsRUFBVWhHLEVBQU9rUyxFQUFLRSxFQUMzQyxDQUNGLEVBZ0NBclYsRUFBT0MsUUFBVSxDQUNmcUosY0F4QkYsU0FBdUI4QyxFQUFTcUosRUFBUUMsR0FDdEMsR0FBdUIsaUJBQVp0SixFQUNULE1BQU0sSUFBSTFMLEVBQVcsNEJBQTZCQSxFQUFXaVYsc0JBSS9ELElBRkEsSUFBSTNILEVBQU92QyxPQUFPdUMsS0FBSzVCLEdBQ25CeEUsRUFBSW9HLEVBQUtsRyxPQUNORixLQUFNLEdBQUcsQ0FDZCxJQUFJdU4sRUFBTW5ILEVBQUtwRyxHQUNYcUIsRUFBWXdNLEVBQU9OLEdBQ3ZCLEdBQUlsTSxFQUFKLENBQ0UsSUFBSWhHLEVBQVFtSixFQUFRK0ksR0FDaEJTLE9BQW1CalIsSUFBVjFCLEdBQXVCZ0csRUFBVWhHLEVBQU9rUyxFQUFLL0ksR0FDMUQsSUFBZSxJQUFYd0osRUFDRixNQUFNLElBQUlsVixFQUFXLFVBQVl5VSxFQUFNLFlBQWNTLEVBQVFsVixFQUFXaVYscUJBRzVFLE1BQ0EsSUFBcUIsSUFBakJELEVBQ0YsTUFBTSxJQUFJaFYsRUFBVyxrQkFBb0J5VSxFQUFLelUsRUFBV21WLGVBRTdELENBQ0YsRUFJRTNNLFdBQVlBLGdDQ2xGZCxJQU91QjRNLEVBUG5CL1AsRUFBTyxFQUFRLE1BSWY0SSxFQUFXbEQsT0FBT2xGLFVBQVVvSSxTQUc1Qm9ILEdBQW1CRCxFQU1wQnJLLE9BQU9oRixPQUFPLE1BSlIsU0FBU3NPLEdBQ2QsSUFBSWlCLEVBQU1ySCxFQUFTakcsS0FBS3FNLEdBQ3hCLE9BQU9lLEVBQU1FLEtBQVNGLEVBQU1FLEdBQU9BLEVBQUl2SSxNQUFNLEdBQUksR0FBR3pJLGNBQ3RELEdBR0YsU0FBU2lSLEVBQVd6USxHQUVsQixPQURBQSxFQUFPQSxFQUFLUixjQUNMLFNBQWtCK1AsR0FDdkIsT0FBT2dCLEVBQU9oQixLQUFXdlAsQ0FDM0IsQ0FDRixDQVFBLFNBQVNnSSxFQUFRMUksR0FDZixPQUFPc0YsTUFBTW9ELFFBQVExSSxFQUN2QixDQVFBLFNBQVNJLEVBQVlKLEdBQ25CLFlBQXNCLElBQVJBLENBQ2hCLENBb0JBLElBQUk4SixFQUFnQnFILEVBQVcsZUE2Qy9CLFNBQVMzRyxFQUFTeEssR0FDaEIsT0FBZSxPQUFSQSxHQUErQixpQkFBUkEsQ0FDaEMsQ0FRQSxTQUFTeUksRUFBY3pJLEdBQ3JCLEdBQW9CLFdBQWhCaVIsRUFBT2pSLEdBQ1QsT0FBTyxFQUdULElBQUl5QixFQUFZa0YsT0FBT3lLLGVBQWVwUixHQUN0QyxPQUFxQixPQUFkeUIsR0FBc0JBLElBQWNrRixPQUFPbEYsU0FDcEQsQ0FTQSxJQUFJeUssRUFBU2lGLEVBQVcsUUFTcEJsSCxFQUFTa0gsRUFBVyxRQVNwQmpILEVBQVNpSCxFQUFXLFFBU3BCN0csRUFBYTZHLEVBQVcsWUFRNUIsU0FBU0UsRUFBV3JSLEdBQ2xCLE1BQThCLHNCQUF2QjZKLEVBQVNqRyxLQUFLNUQsRUFDdkIsQ0FpQ0EsSUFBSXFLLEVBQW9COEcsRUFBVyxtQkFtRG5DLFNBQVNwUixFQUFRbUgsRUFBS08sR0FFcEIsR0FBSVAsUUFVSixHQUxtQixpQkFBUkEsSUFFVEEsRUFBTSxDQUFDQSxJQUdMd0IsRUFBUXhCLEdBRVYsSUFBSyxJQUFJcEUsRUFBSSxFQUFHQyxFQUFJbUUsRUFBSWxFLE9BQVFGLEVBQUlDLEVBQUdELElBQ3JDMkUsRUFBRzdELEtBQUssS0FBTXNELEVBQUlwRSxHQUFJQSxFQUFHb0UsUUFJM0IsSUFBSyxJQUFJakgsS0FBT2lILEVBQ1ZQLE9BQU9sRixVQUFVNlAsZUFBZTFOLEtBQUtzRCxFQUFLakgsSUFDNUN3SCxFQUFHN0QsS0FBSyxLQUFNc0QsRUFBSWpILEdBQU1BLEVBQUtpSCxFQUlyQyxDQXdKQSxJQUE2QnFLLEVBQXpCakMsR0FBeUJpQyxFQUtKLG9CQUFmQyxZQUE4QjdLLE9BQU95SyxlQUFlSSxZQUhyRCxTQUFTdkIsR0FDZCxPQUFPc0IsR0FBY3RCLGFBQWlCc0IsQ0FDeEMsR0FHRnJXLEVBQU9DLFFBQVUsQ0FDZnVOLFFBQVNBLEVBQ1RvQixjQUFlQSxFQUNmQyxTQXZZRixTQUFrQi9KLEdBQ2hCLE9BQWUsT0FBUkEsSUFBaUJJLEVBQVlKLElBQTRCLE9BQXBCQSxFQUFJeVIsY0FBeUJyUixFQUFZSixFQUFJeVIsY0FDaEQsbUJBQTdCelIsRUFBSXlSLFlBQVkxSCxVQUEyQi9KLEVBQUl5UixZQUFZMUgsU0FBUy9KLEVBQ2xGLEVBcVlFbEQsV0E5UEYsU0FBb0JtVCxHQUNsQixJQUFJeUIsRUFBVSxvQkFDZCxPQUFPekIsSUFDZ0IsbUJBQWJyRixVQUEyQnFGLGFBQWlCckYsVUFDcERmLEVBQVNqRyxLQUFLcU0sS0FBV3lCLEdBQ3hCTCxFQUFXcEIsRUFBTXBHLFdBQWFvRyxFQUFNcEcsYUFBZTZILEVBRXhELEVBd1BFdkgsa0JBcFhGLFNBQTJCbkssR0FPekIsTUFMNEIsb0JBQWhCMlIsYUFBaUNBLFlBQWtCLE9BQ3BEQSxZQUFZQyxPQUFPNVIsR0FFbkIsR0FBVUEsRUFBVSxRQUFNOEosRUFBYzlKLEVBQUlvSyxPQUd6RCxFQTZXRVksU0FyV0YsU0FBa0JoTCxHQUNoQixNQUFzQixpQkFBUkEsQ0FDaEIsRUFvV0U2TSxTQTVWRixTQUFrQjdNLEdBQ2hCLE1BQXNCLGlCQUFSQSxDQUNoQixFQTJWRXdLLFNBQVVBLEVBQ1YvQixjQUFlQSxFQUNmckksWUFBYUEsRUFDYjhMLE9BQVFBLEVBQ1JqQyxPQUFRQSxFQUNSQyxPQUFRQSxFQUNSbUgsV0FBWUEsRUFDWnJILFNBblJGLFNBQWtCaEssR0FDaEIsT0FBT3dLLEVBQVN4SyxJQUFRcVIsRUFBV3JSLEVBQUk2UixLQUN6QyxFQWtSRXhILGtCQUFtQkEsRUFDbkJ0TixxQkFqT0YsV0FDRSxPQUF5QixvQkFBZDJRLFdBQW9ELGdCQUF0QkEsVUFBVW9FLFNBQ1ksaUJBQXRCcEUsVUFBVW9FLFNBQ1ksT0FBdEJwRSxVQUFVb0UsV0FJL0Isb0JBQVh0RCxRQUNhLG9CQUFieEIsU0FFWCxFQXdORWpOLFFBQVNBLEVBQ1RrSSxNQS9KRixTQUFTQSxJQUNQLElBQUk2SSxFQUFTLENBQUMsRUFDZCxTQUFTaUIsRUFBWS9SLEVBQUtDLEdBQ3BCd0ksRUFBY3FJLEVBQU83USxLQUFTd0ksRUFBY3pJLEdBQzlDOFEsRUFBTzdRLEdBQU9nSSxFQUFNNkksRUFBTzdRLEdBQU1ELEdBQ3hCeUksRUFBY3pJLEdBQ3ZCOFEsRUFBTzdRLEdBQU9nSSxFQUFNLENBQUMsRUFBR2pJLEdBQ2YwSSxFQUFRMUksR0FDakI4USxFQUFPN1EsR0FBT0QsRUFBSTJJLFFBRWxCbUksRUFBTzdRLEdBQU9ELENBRWxCLENBRUEsSUFBSyxJQUFJOEMsRUFBSSxFQUFHQyxFQUFJNkksVUFBVTVJLE9BQVFGLEVBQUlDLEVBQUdELElBQzNDL0MsRUFBUTZMLFVBQVU5SSxHQUFJaVAsR0FFeEIsT0FBT2pCLENBQ1QsRUE4SUVwUCxPQXBJRixTQUFnQnNRLEVBQUdDLEVBQUd2RyxHQVFwQixPQVBBM0wsRUFBUWtTLEdBQUcsU0FBcUJqUyxFQUFLQyxHQUVqQytSLEVBQUUvUixHQURBeUwsR0FBMEIsbUJBQVIxTCxFQUNYaUIsRUFBS2pCLEVBQUswTCxHQUVWMUwsQ0FFYixJQUNPZ1MsQ0FDVCxFQTRIRTdHLEtBeFBGLFNBQWMrRixHQUNaLE9BQU9BLEVBQUkvRixLQUFPK0YsRUFBSS9GLE9BQVMrRixFQUFJcEYsUUFBUSxhQUFjLEdBQzNELEVBdVBFb0csU0FySEYsU0FBa0JDLEdBSWhCLE9BSDhCLFFBQTFCQSxFQUFRQyxXQUFXLEtBQ3JCRCxFQUFVQSxFQUFReEosTUFBTSxJQUVuQndKLENBQ1QsRUFpSEVwTyxTQXZHRixTQUFrQjBOLEVBQWFZLEVBQWtCQyxFQUFPNUwsR0FDdEQrSyxFQUFZaFEsVUFBWWtGLE9BQU9oRixPQUFPMFEsRUFBaUI1USxVQUFXaUYsR0FDbEUrSyxFQUFZaFEsVUFBVWdRLFlBQWNBLEVBQ3BDYSxHQUFTM0wsT0FBT1EsT0FBT3NLLEVBQVloUSxVQUFXNlEsRUFDaEQsRUFvR0VyTCxhQTFGRixTQUFzQnNMLEVBQVdDLEVBQVNDLEdBQ3hDLElBQUlILEVBQ0F4UCxFQUNBK0YsRUFDQTZKLEVBQVMsQ0FBQyxFQUVkRixFQUFVQSxHQUFXLENBQUMsRUFFdEIsRUFBRyxDQUdELElBREExUCxHQURBd1AsRUFBUTNMLE9BQU9nTSxvQkFBb0JKLElBQ3pCdlAsT0FDSEYsS0FBTSxHQUVONFAsRUFETDdKLEVBQU95SixFQUFNeFAsTUFFWDBQLEVBQVEzSixHQUFRMEosRUFBVTFKLEdBQzFCNkosRUFBTzdKLElBQVEsR0FHbkIwSixFQUFZNUwsT0FBT3lLLGVBQWVtQixFQUNwQyxPQUFTQSxLQUFlRSxHQUFVQSxFQUFPRixFQUFXQyxLQUFhRCxJQUFjNUwsT0FBT2xGLFdBRXRGLE9BQU8rUSxDQUNULEVBcUVFdkIsT0FBUUEsRUFDUkUsV0FBWUEsRUFDWnZCLFNBOURGLFNBQWtCc0IsRUFBSzBCLEVBQWNDLEdBQ25DM0IsRUFBTTRCLE9BQU81QixTQUNJclIsSUFBYmdULEdBQTBCQSxFQUFXM0IsRUFBSWxPLFVBQzNDNlAsRUFBVzNCLEVBQUlsTyxRQUVqQjZQLEdBQVlELEVBQWE1UCxPQUN6QixJQUFJK1AsRUFBWTdCLEVBQUlwUyxRQUFROFQsRUFBY0MsR0FDMUMsT0FBc0IsSUFBZkUsR0FBb0JBLElBQWNGLENBQzNDLEVBdURFaEQsUUEvQ0YsU0FBaUJJLEdBQ2YsSUFBS0EsRUFBTyxPQUFPLEtBQ25CLElBQUluTixFQUFJbU4sRUFBTWpOLE9BQ2QsR0FBSTVDLEVBQVkwQyxHQUFJLE9BQU8sS0FFM0IsSUFEQSxJQUFJcU0sRUFBTSxJQUFJN0osTUFBTXhDLEdBQ2JBLEtBQU0sR0FDWHFNLEVBQUlyTSxHQUFLbU4sRUFBTW5OLEdBRWpCLE9BQU9xTSxDQUNULEVBdUNFRyxhQUFjQSxFQUNkaEYsV0FBWUEsZ1pDbmRkLGlCQUlBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLFlBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUVBLGFBQ0EsYUFDQSxhQUNBLGFBR0EsRUFlRSxTQUFZaEQsRUFBa0I4SCxHQUM1QixJQUFNclQsRUFBeUJpWCxFQUFBQSxDQUFBQSxFQUFLMUwsR0FNcEMsR0FKS3ZMLEVBQU80QixNQUNWNUIsRUFBTzRCLElBQU0sNEJBR1Y1QixFQUFPb0IsU0FDVixNQUFNLElBQUkrSSxNQUFNLG9DQUdsQixJQUFLbkssRUFBT2tFLElBQ1YsTUFBTSxJQUFJaUcsTUFBTSwrQkFJbEJ6RCxLQUFLekYsUUFBVSxJQUFJaVcsRUFBQUEsUUFBUWxYLEVBQVFxVCxHQUNuQyxJQUFNOEQsRUFBbUIsSUFBSUMsRUFBQUEsUUFBaUIxUSxLQUFLekYsU0FDN0NvVyxFQUEwQixJQUFJQyxFQUFBQSxRQUF3QjVRLEtBQUt6RixTQUMzRHNXLEVBQXdCLElBQUlDLEVBQUFBLFFBQXNCOVEsS0FBS3pGLFNBQ3ZEd1csRUFBbUIsSUFBSUMsRUFBQUEsUUFBaUJoUixLQUFLekYsU0FDN0MwVyxFQUEyQixJQUFJQyxFQUFBQSxRQUF5QmxSLEtBQUt6RixTQUVuRXlGLEtBQUttUixRQUFVLElBQUlDLEVBQUFBLFFBQ2pCcFIsS0FBS3pGLFFBQ0xvVyxFQUNBRSxFQUNBRSxHQUVGL1EsS0FBS3FSLFNBQVcsSUFBSUMsRUFBQUEsUUFBY3RSLEtBQUt6RixTQUN2Q3lGLEtBQUt1UixPQUFTLElBQUlDLEVBQUFBLFFBQVl4UixLQUFLekYsU0FDbkN5RixLQUFLeVIsTUFBUSxJQUFJQyxFQUFBQSxRQUFZMVIsS0FBS3pGLFNBQ2xDeUYsS0FBSzJSLGFBQWUsSUFBSUMsRUFBQUEsUUFBa0I1UixLQUFLekYsU0FDL0N5RixLQUFLNlIsU0FBVyxJQUFJQyxFQUFBQSxRQUFlOVIsS0FBS3pGLFNBQ3hDeUYsS0FBSytSLE9BQVMsSUFBSUMsRUFBQUEsUUFBYWhTLEtBQUt6RixTQUNwQ3lGLEtBQUtpUyxJQUFNLElBQUlDLEVBQUFBLFFBQVVsUyxLQUFLekYsU0FDOUJ5RixLQUFLbVMsU0FBVyxJQUFJQyxFQUFBQSxRQUFjcFMsS0FBS3pGLFNBQ3ZDeUYsS0FBS3FTLE1BQVEsSUFBSUMsRUFBQUEsUUFBWXRTLEtBQUt6RixRQUFTa1csR0FDM0N6USxLQUFLdVMsU0FBVyxJQUFJQyxFQUFBQSxRQUFleFMsS0FBS3pGLFFBQVMwVyxFQUNsRCxzeERDOUVILGlCQUNBLGFBZ0JBLGFBRUUsV0FBWTFXLEdBQ05BLElBQ0Z5RixLQUFLekYsUUFBVUEsRUFFbEIsQ0EwRUgsT0F4RVlrWSxFQUFBQSxVQUFBQSxVQUFWLFNBQ0UxTixFQUNBMk4sRUFDQUMsRUFDQUMsR0FFQSxJQUNRQyxFQURVLElBQUlDLElBQUlKLEdBQ1EsYUFFNUJLLEVBQVlMLEdBQThCLGlCQUFaQSxHQUF1QkEsRUFBUXJHLE1BQU1zRyxHQUFjcEYsT0FBYyxHQUNqR3lGLEVBQW1CLEtBTXZCLE9BTElKLElBQ0ZJLEVBQW1CSCxFQUFhSSxJQUFJTCxHQUNoQ0MsRUFBYUssSUFBSU4sUUFDakJ4VixHQUVDLENBQ0wySCxHQUFFLEVBQ0ZvTyxLQUF1QixNQUFqQlIsRUFBdUIsV0FBSUksR0FBY0EsRUFDL0NDLGlCQUFnQixFQUNoQjlYLElBQUt3WCxFQUVSLEVBRVNELEVBQUFBLFVBQUFBLGVBQVYsU0FDRW5YLEVBQ0FxWCxFQUNBQyxHQUhGLFdBTUUsT0FEYzFPLE9BQU9rUCxRQUFROVgsRUFBUytYLEtBQUtDLFFBQzlCQyxRQUNYLFNBQUNDLEVBQTJCQyxPQUFDMU8sRUFBRSxLQUFFMk4sRUFBTyxLQUV0QyxPQURBYyxFQUFJek8sR0FBTTJPLEVBQUtDLFVBQVU1TyxFQUFJMk4sRUFBU0MsRUFBY0MsR0FDN0NZLENBQ1IsR0FBRSxDQUFDLEVBRVAsRUFFT2YsRUFBQUEsVUFBQUEsa0JBQVIsU0FBMEJtQixFQUFtQkMsR0FDM0MsSUFBSTNZLEVBQU0wWSxFQUNKRSxFQUFZLEVBQUgsR0FBUUQsR0FLdkIsT0FKSUMsRUFBVVgsT0FDWmpZLEdBQU0sYUFBUTBZLEVBQVdFLEVBQVVYLGFBQzVCVyxFQUFVWCxNQUVaLENBQ0xqWSxJQUFHLEVBQ0g2WSxhQUFjRCxFQUVqQixFQUVlckIsRUFBQUEsVUFBQUEscUJBQWhCLFNBQXFDbUIsRUFBa0JDLEVBQXVCRyxnSEFJdEVQLEVBQXdCelQsS0FBS2lVLGtCQUFrQkwsRUFBV0MsR0FBeEQzWSxFQUFHLE1BQUU2WSxFQUFZLGVBQ3JCL1QsS0FBS3pGLFFBQzhCLEdBQU15RixLQUFLekYsUUFBUTJZLElBQUloWSxFQUFLNlksSUFEL0QsYUFHRixPQUZNelksRUFBK0I0WSxFQUFBQSxPQUVyQyxHQUFPbFUsS0FBS21VLFVBQVU3WSxFQUFVMFksV0FFbEMsTUFBTSxJQUFJSSxFQUFBQSxRQUFTLENBQ2pCNVksT0FBUSxJQUNSQyxXQUFZLDRCQUNaNFgsS0FBTSxDQUFFM1MsUUFBUyxZQUVwQixFQU1ILENBQUMsQ0FoRkQsNGFDaEJBLGlCQXlCQSxhQW9CQSxFQWNFLFNBQVk5RyxFQUF1QnlhLEVBQWdDQyxHQUNqRXRVLEtBQUtxQixLQUFPekgsRUFBS3lILEtBQ2pCckIsS0FBS3VVLFlBQWMzYSxFQUFLMmEsWUFDeEJ2VSxLQUFLd1Usa0JBQW9CNWEsRUFBSzRhLGtCQUM5QnhVLEtBQUt5VSxNQUFRN2EsRUFBSzZhLE1BQ2xCelUsS0FBSzBVLFNBQVc5YSxFQUFLOGEsU0FDckIxVSxLQUFLMlUsWUFBYy9hLEVBQUsrYSxZQUN4QjNVLEtBQUs0VSxXQUFhaGIsRUFBS2diLFdBQ3ZCNVUsS0FBSzZVLGNBQWdCamIsRUFBS2liLGNBQzFCN1UsS0FBSzhVLFdBQWFsYixFQUFLa2IsV0FDdkI5VSxLQUFLL0IsS0FBT3JFLEVBQUtxRSxLQUVqQitCLEtBQUsrVSxzQkFBd0JWLEdBQWEsS0FDMUNyVSxLQUFLZ1Ysb0JBQXNCVixHQUFXLElBQ3ZDLEVBNUJVNWIsRUFBQUEsT0FBQUEsRUErQmIsaUJBTUUsV0FDRTZCLEVBQ0FvVyxFQUNBRSxFQUNBRSxHQUVBL1EsS0FBS3pGLFFBQVVBLEVBQ2Z5RixLQUFLaVYsa0JBQW9CdEUsRUFDekIzUSxLQUFLa1YsZ0JBQWtCckUsRUFDdkI3USxLQUFLbVYsV0FBYXBFLENBQ25CLENBZ0pILE9BOUlVcUUsRUFBQUEsVUFBQUEsY0FBUixTQUFzQjlaLEdBQ3BCLE9BQU9BLEVBQVMrWCxJQUNqQixFQUVPK0IsRUFBQUEsVUFBQUEsZ0JBQVIsU0FBd0I5WixHQUN0QixPQUFJQSxFQUFTK1gsTUFBUS9YLEVBQVMrWCxLQUFLZ0MsTUFDMUIvWixFQUFTK1gsS0FBS2dDLE1BQU1DLEtBQUksU0FBVUMsR0FDdkMsT0FBTyxJQUFJQyxFQUFPRCxFQUNuQixJQUVJLEVBQ1IsRUFFT0gsRUFBQUEsVUFBQUEsYUFBUixTQUFxQjlaLEdBQ25CLE9BQU8sSUFBSWthLEVBQ1RsYSxFQUFTK1gsS0FBS3BKLE9BQ2QzTyxFQUFTK1gsS0FBSzBCLHNCQUNkelosRUFBUytYLEtBQUsyQixvQkFFakIsRUFFT0ksRUFBQUEsVUFBQUEsdUJBQVIsU0FBK0I5WixHQUM3QixPQUFPQSxFQUFTK1gsS0FBS29DLFFBQ3RCLEVBRU9MLEVBQUFBLFVBQUFBLHFCQUFSLFNBQTZCOVosR0FDM0IsT0FBT0EsRUFBUytYLElBQ2pCLEVBRUQrQixFQUFBQSxVQUFBQSxLQUFBQSxTQUFLdkIsR0FBTCxXQUNFLE9BQU83VCxLQUFLekYsUUFBUTJZLElBQUksY0FBZVcsR0FDcEMxVCxNQUFLLFNBQUN1VixHQUFzQixTQUFLQyxnQkFBZ0JELEVBQThCLEdBQ25GLEVBRUROLEVBQUFBLFVBQUFBLElBQUFBLFNBQUluTCxHQUFKLFdBQ0UsT0FBT2pLLEtBQUt6RixRQUFRMlksSUFBSSxzQkFBZWpKLElBQ3BDOUosTUFBSyxTQUFDdVYsR0FBc0IsU0FBS0UsYUFBYUYsRUFBMEIsR0FDNUUsRUFFRE4sRUFBQUEsVUFBQUEsT0FBQUEsU0FBT3hiLEdBQVAsV0FDUWljLEVBQVUsRUFBSCxHQUFRamMsR0FLckIsTUFKSSx5QkFBMEJpYyxHQUFtRCxrQkFBakNBLEVBQVFDLHVCQUN0REQsRUFBUUMscUJBQW1FLFNBQTVDRCxFQUFRQyxxQkFBcUIxTyxXQUF3QixPQUFTLFNBR3hGcEgsS0FBS3pGLFFBQVF3YixXQUFXLGNBQWVGLEdBQzNDMVYsTUFBSyxTQUFDdVYsR0FBc0IsU0FBS0UsYUFBYUYsRUFBMEIsR0FDNUUsRUFFRE4sRUFBQUEsVUFBQUEsT0FBQUEsU0FBT25MLEdBQVAsV0FDRSxPQUFPakssS0FBS3pGLFFBQVF5YixJQUFJLHNCQUFlL0wsRUFBTSxZQUMxQzlKLE1BQUssU0FBQ3VWLEdBQXNCLFNBQUtFLGFBQWFGLEVBQTBCLEdBQzVFLEVBRUROLEVBQUFBLFVBQUFBLFFBQUFBLFNBQVFuTCxHQUFSLFdBQ0UsT0FBT2pLLEtBQUt6RixRQUFRMGIsT0FBTyxzQkFBZWhNLElBQ3ZDOUosTUFBSyxTQUFDdVYsR0FBc0IsU0FBS1EsY0FBY1IsRUFBK0IsR0FDbEYsRUFFRE4sRUFBQUEsVUFBQUEsY0FBQUEsU0FBY25MLEdBQ1osT0FBT2pLLEtBQUt6RixRQUFRMlksSUFBSSxzQkFBZWpKLEVBQU0sZ0JBQzFDOUosTUFBSyxTQUFDdVYsR0FBc0IsT0FBQUEsQ0FBaUMsSUFDN0R2VixNQUFLLFNBQUN1VixHQUFtQyxPQUFBQSxFQUFJckMsS0FBSzhDLFVBQWdDLEdBQ3RGLEVBRURmLEVBQUFBLFVBQUFBLGlCQUFBQSxTQUFpQm5MLEVBQWdCclEsR0FDL0IsT0FBT29HLEtBQUt6RixRQUFReWIsSUFBSSxzQkFBZS9MLEVBQU0sZUFBZXJRLEdBQ3pEdUcsTUFBSyxTQUFDdVYsR0FBc0IsT0FBQUEsQ0FBbUMsSUFDL0R2VixNQUFLLFNBQUN1VixHQUFxQyxPQUFBQSxFQUFJckMsSUFBaUMsR0FDcEYsRUFJRCtCLEVBQUFBLFVBQUFBLFlBQUFBLFNBQVluTCxHQUNWLE9BQU9qSyxLQUFLekYsUUFBUTJZLEtBQUksYUFBUSxjQUFlakosRUFBUSxhQUNwRDlKLEtBQUtILEtBQUtvVyx1QkFDZCxFQUVEaEIsRUFBQUEsVUFBQUEsZUFBQUEsU0FDRW5MLEVBQ0FoTSxFQUNBckUsR0FIRixXQUtFLEdBQTRCLGtCQUFqQkEsYUFBSSxFQUFKQSxFQUFNeWMsUUFDZixNQUFNLElBQUlqQyxFQUFBQSxRQUFTLENBQUU1WSxPQUFRLElBQUtDLFdBQVksNkNBQThDNFgsS0FBTSxDQUFFM1MsUUFBUyxrREFFL0csT0FBT1YsS0FBS3pGLFFBQVErYixXQUFVLGFBQVEsY0FBZXJNLEVBQVEsV0FBWWhNLEdBQU9yRSxHQUM3RXVHLE1BQUssU0FBQ3VWLEdBQXNCLFNBQUthLHFCQUFxQmIsRUFBb0MsR0FDOUYsRUFJRE4sRUFBQUEsVUFBQUEsT0FBQUEsU0FBT25MLEdBQ0wsT0FBT2pLLEtBQUt6RixRQUFRMlksS0FBSSxhQUFRLGNBQWVqSixFQUFRLFFBQ3BEOUosTUFBSyxTQUFDN0UsR0FBcUIsTUFBSyxPQUFjLFFBQWQsRUFBQUEsYUFBUSxFQUFSQSxFQUFVK1gsWUFBSUksSUFBQUEsT0FBQSxFQUFBQSxFQUFFNEIsS0FBSyxHQUN6RCxFQUVERCxFQUFBQSxVQUFBQSxTQUFBQSxTQUFTbkwsRUFBZ0J1TSxHQUN2QixPQUFPeFcsS0FBS3pGLFFBQVF3YixZQUFXLGFBQVEsY0FBZTlMLEVBQVEsT0FBUSxDQUFFdU0sR0FBRSxHQUMzRSxFQUVEcEIsRUFBQUEsVUFBQUEsU0FBQUEsU0FBU25MLEVBQWdCdU0sR0FDdkIsT0FBT3hXLEtBQUt6RixRQUFRMGIsUUFBTyxhQUFRLGNBQWVoTSxFQUFRLE1BQU91TSxHQUNsRSxFQUVEcEIsRUFBQUEsVUFBQUEsV0FBQUEsU0FBV25MLEVBQWdCd00sR0FDekIsT0FBT3pXLEtBQUt6RixRQUFRd2IsWUFBVyxhQUFRLGNBQWU5TCxFQUFRLE9BQVEsQ0FBRXdNLFFBQU8sR0FDaEYsRUFFRHJCLEVBQUFBLFVBQUFBLGFBQUFBLFNBQWFuTCxFQUFnQnlNLEdBQzNCLElBQUk3RCxFQUFlLEdBQ25CLEdBQUk2RCxFQUFZRCxTQUFXQyxFQUFZRixHQUNyQyxNQUFNLElBQUlwQyxFQUFBQSxRQUNSLENBQ0U1WSxPQUFRLElBQ1JDLFdBQVksZ0NBQ1o0WCxLQUFNLENBQUUzUyxRQUFTLG9EQVF2QixPQUxXZ1csRUFBWUQsUUFDckI1RCxFQUFlLG1CQUFZNkQsRUFBWUQsU0FDOUJDLEVBQVlGLEtBQ3JCM0QsRUFBZSxjQUFPNkQsRUFBWUYsS0FFN0J4VyxLQUFLekYsUUFBUTBiLFFBQU8sYUFBUSxjQUFlaE0sRUFBUSxNQUFPLFVBQVc0SSxHQUM3RSxFQUVEdUMsRUFBQUEsVUFBQUEsb0JBQUFBLFNBQW9CbkwsRUFBZ0JyUSxHQUNsQyxPQUFPb0csS0FBS3pGLFFBQVF5YixJQUFJLHNCQUFlL0wsRUFBTSxtQkFBbUIsQ0FBQyxFQUFHLENBQUU0SixNQUFPLGVBQVFqYSxFQUFLK2MsUUFDdkZ4VyxNQUFLLFNBQUN1VixHQUFzQixPQUFBQSxDQUFtQyxJQUMvRHZWLE1BQUssU0FBQ3VWLEdBQXVDLE9BQUFBLEVBQUlyQyxJQUE0QixHQUNqRixFQUVEK0IsRUFBQUEsVUFBQUEsbUJBQUFBLFNBQW1CbkwsRUFBZ0JyUSxHQUNqQyxPQUFPb0csS0FBS3pGLFFBQVF5YixJQUFJLHNCQUFlL0wsRUFBTSxrQkFBa0IsQ0FBQyxFQUFHLENBQUU0SixNQUFPLHdCQUFpQmphLEVBQUtnZCxnQkFDL0Z6VyxNQUFLLFNBQUN1VixHQUFzQixPQUFBQSxDQUFrQyxHQUNsRSxFQUVETixFQUFBQSxVQUFBQSxnQkFBQUEsU0FBZ0JuTCxFQUFnQnJRLEdBQzlCLE9BQU9vRyxLQUFLekYsUUFBUXliLElBQUksc0JBQWUvTCxFQUFNLGVBQWUsQ0FBQyxFQUFHLENBQUU0SixNQUFPLHFCQUFjamEsRUFBS2lkLGFBQ3pGMVcsTUFBSyxTQUFDdVYsR0FBc0IsT0FBQUEsQ0FBK0IsR0FDL0QsRUFDSCxDQUFDLENBaEtELHVMQzdFQSxpQkFnQkEsYUFJRSxXQUFZbmIsR0FDVnlGLEtBQUt6RixRQUFVQSxFQUNmeUYsS0FBSzhXLFVBQVksY0FDbEIsQ0FnRUgsT0E5RFVDLEVBQUFBLFVBQUFBLDRCQUFSLFNBQ0V6YixHQUVBLE1BQU8sQ0FDTCtaLE1BQU8vWixFQUFTK1gsS0FBS2dDLE1BQ3JCMkIsV0FBWTFiLEVBQVMrWCxLQUFLNEQsWUFFN0IsRUFFT0YsRUFBQUEsVUFBQUEsc0JBQVIsU0FDRXpiLEdBTUEsTUFKZSxDQUNiRSxPQUFRRixFQUFTRSxPQUNqQmtGLFFBQVNwRixFQUFTK1gsS0FBSzNTLFFBRzFCLEVBRU9xVyxFQUFBQSxVQUFBQSxzQkFBUixTQUNFemIsR0FRQSxNQU5lLENBQ2JFLE9BQVFGLEVBQVNFLE9BQ2pCa0YsUUFBU3BGLEVBQVMrWCxLQUFLM1MsUUFDdkJ3VyxLQUFNNWIsRUFBUytYLEtBQUs2RCxLQUl2QixFQUVESCxFQUFBQSxVQUFBQSxLQUFBQSxTQUFLOU0sRUFBZ0I0SixHQUFyQixXQUNFLE9BQU83VCxLQUFLekYsUUFBUTJZLEtBQUksYUFBUWxULEtBQUs4VyxVQUFXN00sRUFBUSxnQkFBaUI0SixHQUN0RTFULE1BQ0MsU0FBQ3VWLEdBQXFCLFNBQUt5Qiw0QkFBNEJ6QixFQUFxQyxHQUVqRyxFQUVEcUIsRUFBQUEsVUFBQUEsT0FBQUEsU0FDRTlNLEVBQ0FyUSxHQUZGLFdBSUUsT0FBT29HLEtBQUt6RixRQUFRd2IsV0FBVyxVQUFHL1YsS0FBSzhXLFdBQVMvVCxPQUFHa0gsRUFBTSxnQkFBZ0JyUSxHQUN0RXVHLE1BQUssU0FBQ3VWLEdBQXFCLFNBQUswQixzQkFBc0IxQixFQUFJLEdBQzlELEVBRURxQixFQUFBQSxVQUFBQSxPQUFBQSxTQUNFOU0sRUFDQW9OLEVBQ0F6ZCxHQUhGLFdBS0UsT0FBT29HLEtBQUt6RixRQUFRK2IsVUFBVSxVQUFHdFcsS0FBSzhXLFdBQVMvVCxPQUFHa0gsRUFBTSxpQkFBQWxILE9BQWdCc1UsR0FBb0J6ZCxHQUN6RnVHLE1BQUssU0FBQ3VWLEdBQXFCLFNBQUswQixzQkFBc0IxQixFQUFJLEdBQzlELEVBRURxQixFQUFBQSxVQUFBQSxRQUFBQSxTQUNFOU0sRUFDQW9OLEdBRkYsV0FJRSxPQUFPclgsS0FBS3pGLFFBQVEwYixPQUFPLFVBQUdqVyxLQUFLOFcsV0FBUy9ULE9BQUdrSCxFQUFNLGlCQUFBbEgsT0FBZ0JzVSxJQUNsRWxYLE1BQUssU0FBQ3VWLEdBQXFCLFNBQUs0QixzQkFBc0I1QixFQUFJLEdBQzlELEVBQ0gsQ0FBQyxDQXZFRCwweEVDaEJBLGlCQXlCQSxhQUVBLEVBTUUsU0FBWTZCLEdBQ1Z2WCxLQUFLd1gsSUFBTUQsRUFBUUMsSUFDbkJ4WCxLQUFLMkQsWUFBYzRULEVBQVE1VCxZQUMzQjNELEtBQUssY0FBZ0IsSUFBSXFLLEtBQUtrTixFQUFRLGVBQ3RDdlgsS0FBSyxhQUFlLElBQUlxSyxLQUFLa04sRUFBUSxhQUN0QyxFQVhVN2UsRUFBQUEsVUFBQUEsRUFjYixNQVFFLFNBQVkrZSxHQUNWelgsS0FBS3dYLElBQU1DLEVBQWlCcEUsS0FBS21FLElBQ2pDeFgsS0FBSzJELFlBQWM4VCxFQUFpQnBFLEtBQUsxUCxZQUN6QzNELEtBQUswWCxNQUFRLElBQUlyTixLQUFLb04sRUFBaUJwRSxLQUFLcUUsT0FDNUMxWCxLQUFLMlgsSUFBTSxJQUFJdE4sS0FBS29OLEVBQWlCcEUsS0FBS3NFLEtBQzFDM1gsS0FBSzRYLFdBQWFILEVBQWlCcEUsS0FBS3VFLFdBQ3hDNVgsS0FBS3lSLE1BQVFnRyxFQUFpQnBFLEtBQUs1QixNQUFNNkQsS0FBSSxTQUFVdUMsR0FFckQsT0FEWSxFQUFILEtBQVFBLEdBQUksQ0FBRUMsS0FBTSxJQUFJek4sS0FBS3dOLEVBQUtDLE9BRTVDLEdBQ0YsRUFsQlVwZixFQUFBQSxtQkFBQUEsRUFxQmIsa0JBTUUsV0FBWTZCLEdBQVosTUFDRXdkLEVBQUFBLEtBQUFBLEtBQU14ZCxJQUFRLFlBQ2RtWixFQUFLblosUUFBVUEsRUFDZm1aLEVBQUtvRCxVQUFZLFFBQ2xCLENBNkVILE9BdEZVa0IsRUFBQUEsRUFBQUEsR0FXRUMsRUFBQUEsVUFBQUEsVUFBVixTQUNFM2MsR0FFQSxJQUFNMUIsRUFBTyxDQUFDLEVBS2QsT0FKQUEsRUFBS3liLE1BQVEvWixFQUFTK1gsS0FBS2dDLE1BQU1DLEtBQUksU0FBQ2lDLEdBQWdDLFdBQUlXLEVBQVVYLEVBQVEsSUFFNUYzZCxFQUFLdWUsTUFBUW5ZLEtBQUtvWSxlQUFlOWMsRUFBVSxJQUFLLE9BQ2hEMUIsRUFBSzRCLE9BQVNGLEVBQVNFLE9BQ2hCNUIsQ0FDUixFQUVPcWUsRUFBQUEsVUFBQUEsbUJBQVIsU0FDRTNjLEdBRUEsT0FBTyxJQUFJK2MsRUFBbUIvYyxFQUMvQixFQUVLMmMsRUFBQUEsVUFBQUEsS0FBTixTQUFXaE8sRUFBZ0I0SixzRUFDekIsU0FBTzdULEtBQUtzWSxzQkFBcUIsYUFBUXRZLEtBQUs4VyxVQUFXN00sRUFBUSxTQUFVNEosU0FDNUUsRUFFRG9FLEVBQUFBLFVBQUFBLElBQUFBLFNBQUloTyxFQUFnQnVOLEdBQ2xCLE9BQU94WCxLQUFLekYsUUFBUTJZLEtBQUksYUFBUWxULEtBQUs4VyxVQUFXN00sRUFBUSxRQUFTdU4sSUFDOURyWCxNQUNDLFNBQUN1VixHQUFxQixXQUFJd0MsRUFBVXhDLEVBQUlyQyxLQUFLLEdBRWxELEVBRUQ0RSxFQUFBQSxVQUFBQSxPQUFBQSxTQUFPaE8sRUFBZ0J1TixFQUFhN1QsR0FDbEMsT0FBTzNELEtBQUt6RixRQUFReWIsS0FBSSxhQUFRaFcsS0FBSzhXLFVBQVc3TSxFQUFRLFFBQVN1TixHQUFNN1QsR0FDcEV4RCxNQUNDLFNBQUN1VixHQUFxQixPQUFBQSxFQUFJckMsSUFBNEIsR0FFM0QsRUFFRDRFLEVBQUFBLFVBQUFBLFFBQUFBLFNBQ0VoTyxFQUNBdU4sR0FFQSxPQUFPeFgsS0FBS3pGLFFBQVEwYixPQUFPLFVBQUdqVyxLQUFLOFcsV0FBUy9ULE9BQUdrSCxFQUFNLFVBQUFsSCxPQUFTeVUsSUFDM0RyWCxNQUFLLFNBQUN1VixHQUFxQixNQUMxQixDQUNFaFYsUUFBU2dWLEVBQUlyQyxLQUFLM1MsUUFDbEJsRixPQUFRa2EsRUFBSWxhLE9BQ1ksR0FDL0IsRUFFRHljLEVBQUFBLFVBQUFBLFVBQUFBLFNBQVVoTyxFQUFnQnVOLEVBQWEzRCxHQUF2QyxXQUVFLE9BQU83VCxLQUFLekYsUUFBUTJZLEtBQUksYUFBUWxULEtBQUs4VyxVQUFXN00sRUFBUSxRQUFTdU4sRUFBSyxTQUFVM0QsR0FDN0UxVCxNQUNDLFNBQUN1VixHQUFxQixTQUFLNkMsbUJBQW1CN0MsRUFBSSxHQUV2RCxFQUVEdUMsRUFBQUEsVUFBQUEsVUFBQUEsU0FBVWhPLEVBQWdCdU4sR0FDeEIsT0FBT3hYLEtBQUt6RixRQUFRMlksS0FBSSxhQUFRbFQsS0FBSzhXLFVBQVc3TSxFQUFRLFFBQVN1TixFQUFLLCtCQUNuRXJYLE1BQ0MsU0FBQ3VWLEdBQXVDLE9BQUFBLEVBQUlyQyxJQUFxQyxHQUV0RixFQUVENEUsRUFBQUEsVUFBQUEsVUFBQUEsU0FBVWhPLEVBQWdCdU4sR0FDeEIsT0FBT3hYLEtBQUt6RixRQUFRMlksS0FBSSxhQUFRbFQsS0FBSzhXLFVBQVc3TSxFQUFRLFFBQVN1TixFQUFLLCtCQUNuRXJYLE1BQ0MsU0FBQ3VWLEdBQXVDLE9BQUFBLEVBQUlyQyxJQUFxQyxHQUV0RixFQUVENEUsRUFBQUEsVUFBQUEsUUFBQUEsU0FBUWhPLEVBQWdCdU4sR0FDdEIsT0FBT3hYLEtBQUt6RixRQUFRMlksS0FBSSxhQUFRbFQsS0FBSzhXLFVBQVc3TSxFQUFRLFFBQVN1TixFQUFLLDZCQUNuRXJYLE1BQ0MsU0FBQ3VWLEdBQXFDLE9BQUFBLEVBQUlyQyxJQUFtQyxHQUVsRixFQUNILENBdkZBLEVBQ1VtRixFQUFBQSxveEVDL0RWLGlCQTRCQSxhQUVBLEVBU0UsU0FBWUMsR0FDVnpZLEtBQUtxQixLQUFPb1gsRUFBc0JwWCxLQUNsQ3JCLEtBQUsyRCxZQUFjOFUsRUFBc0I5VSxZQUN6QzNELEtBQUswWSxVQUFZRCxFQUFzQkMsVUFBWSxJQUFJck8sS0FBS29PLEVBQXNCQyxXQUFhLEdBQy9GMVksS0FBSzJZLFVBQVlGLEVBQXNCRSxVQUN2QzNZLEtBQUsrRSxHQUFLMFQsRUFBc0IxVCxHQUU1QjBULEVBQXNCL0ssVUFDeEIxTixLQUFLME4sUUFBVStLLEVBQXNCL0ssUUFDakMrSyxFQUFzQi9LLFFBQVFnTCxZQUNoQzFZLEtBQUswTixRQUFRZ0wsVUFBWSxJQUFJck8sS0FBS29PLEVBQXNCL0ssUUFBUWdMLGFBSWhFRCxFQUFzQkcsVUFBWUgsRUFBc0JHLFNBQVNyWSxTQUNuRVAsS0FBSzRZLFNBQVdILEVBQXNCRyxTQUFTdEQsS0FBSSxTQUFDNUgsR0FDbEQsSUFBTVcsRUFBUyxFQUFILEdBQVFYLEdBRXBCLE9BREFXLEVBQU9xSyxVQUFZLElBQUlyTyxLQUFLcUQsRUFBUWdMLFdBQzdCckssQ0FDUixJQUVKLEVBOUJVM1YsRUFBQUEsbUJBQUFBLEVBaUNiLGtCQU1FLFdBQVk2QixHQUFaLE1BQ0V3ZCxFQUFBQSxLQUFBQSxLQUFNeGQsSUFBUSxZQUNkbVosRUFBS25aLFFBQVVBLEVBQ2ZtWixFQUFLb0QsVUFBWSxRQUNsQixDQWtLSCxPQTNLVWtCLEVBQUFBLEVBQUFBLEdBV0FhLEVBQUFBLFVBQUFBLHNCQUFSLFNBQThCamYsR0FDNUIsT0FBTyxJQUFJa2YsRUFBbUJsZixFQUFLeVosS0FBSzBGLFNBQ3pDLEVBRU9GLEVBQUFBLFVBQUFBLDZCQUFSLFNBQ0VqZixHQUVBLElBQU15VSxFQUE0QyxDQUFDLEVBTW5ELE9BTEFBLEVBQU83UyxPQUFTNUIsRUFBSzRCLE9BQ3JCNlMsRUFBTzNOLFFBQVU5RyxFQUFLeVosS0FBSzNTLFFBQ3ZCOUcsRUFBS3laLE1BQVF6WixFQUFLeVosS0FBSzBGLFdBQ3pCMUssRUFBTzBLLFNBQVcsSUFBSUQsRUFBbUJsZixFQUFLeVosS0FBSzBGLFdBRTlDMUssQ0FDUixFQUVPd0ssRUFBQUEsVUFBQUEsc0JBQVIsU0FDRWpmLEdBRUEsSUFBTXlVLEVBQTZDLENBQUMsRUFNcEQsT0FMQUEsRUFBTzdTLE9BQVM1QixFQUFLNEIsT0FDckI2UyxFQUFPM04sUUFBVTlHLEVBQUt5WixLQUFLM1MsUUFDdkI5RyxFQUFLeVosTUFBUXpaLEVBQUt5WixLQUFLMEYsV0FDekIxSyxFQUFPMkssYUFBZXBmLEVBQUt5WixLQUFLMEYsU0FBUzFYLE1BRXBDZ04sQ0FDUixFQUVPd0ssRUFBQUEsVUFBQUEsMEJBQVIsU0FBa0NqZixHQUNoQyxJQUFNeVUsRUFBNkIsQ0FBQyxFQUdwQyxPQUZBQSxFQUFPN1MsT0FBUzVCLEVBQUs0QixPQUNyQjZTLEVBQU8zTixRQUFVOUcsRUFBS3laLEtBQUszUyxRQUNwQjJOLENBQ1IsRUFFT3dLLEVBQUFBLFVBQUFBLG1DQUFSLFNBQ0VqZixHQUVBLElBQU15VSxFQUE0QyxDQUFDLEVBT25ELE9BTkFBLEVBQU83UyxPQUFTNUIsRUFBSzRCLE9BQ3JCNlMsRUFBTzNOLFFBQVU5RyxFQUFLeVosS0FBSzNTLFFBQ3ZCOUcsRUFBS3laLEtBQUswRixXQUNaMUssRUFBTzJLLGFBQWVwZixFQUFLeVosS0FBSzBGLFNBQVMxWCxLQUN6Q2dOLEVBQU80SyxnQkFBa0IsQ0FBRXpCLElBQUs1ZCxFQUFLeVosS0FBSzBGLFNBQVNyTCxRQUFROEosTUFFdERuSixDQUNSLEVBRVN3SyxFQUFBQSxVQUFBQSxVQUFWLFNBQW9CdmQsR0FDbEIsSUFBTTFCLEVBQU8sQ0FBQyxFQU9kLE9BTEFBLEVBQUt5YixNQUFRL1osRUFBUytYLEtBQUtnQyxNQUFNQyxLQUFJLFNBQUM0RCxHQUFzQixXQUFJSixFQUFtQkksRUFBRSxJQUVyRnRmLEVBQUt1ZSxNQUFRblksS0FBS29ZLGVBQWU5YyxFQUFVLElBQUssS0FDaEQxQixFQUFLNEIsT0FBU0YsRUFBU0UsT0FFaEI1QixDQUNSLEVBRU9pZixFQUFBQSxVQUFBQSwwQkFBUixTQUNFdmQsR0FFQSxJQUFNMUIsRUFBTyxDQUFDLEVBTWQsT0FKQUEsRUFBS21mLFNBQVcsSUFBSUQsRUFBbUJ4ZCxFQUFTK1gsS0FBSzBGLFVBRXJEbmYsRUFBS3VlLE1BQVFuWSxLQUFLb1ksZUFBZTljLEVBQVUsSUFBSyxLQUV6QzFCLENBQ1IsRUFFS2lmLEVBQUFBLFVBQUFBLEtBQU4sU0FBVzVPLEVBQWdCNEosc0VBQ3pCLFNBQU83VCxLQUFLc1ksc0JBQXFCLGFBQVF0WSxLQUFLOFcsVUFBVzdNLEVBQVEsY0FBZTRKLFNBQ2pGLEVBRURnRixFQUFBQSxVQUFBQSxJQUFBQSxTQUFJNU8sRUFBZ0IrTyxFQUFzQm5GLEdBQ3hDLE9BQU83VCxLQUFLekYsUUFBUTJZLEtBQUksYUFBUWxULEtBQUs4VyxVQUFXN00sRUFBUSxjQUFlK08sR0FBZW5GLEdBQ25GMVQsTUFDQyxTQUFDdVYsR0FBc0MsV0FBSW9ELEVBQW1CcEQsRUFBSXJDLEtBQUswRixTQUFTLEdBRXJGLEVBRURGLEVBQUFBLFVBQUFBLE9BQUFBLFNBQ0U1TyxFQUNBclEsR0FGRixXQUlFLE9BQU9vRyxLQUFLekYsUUFBUXdiLFlBQVcsYUFBUS9WLEtBQUs4VyxVQUFXN00sRUFBUSxjQUFlclEsR0FDM0V1RyxNQUFLLFNBQUN1VixHQUF5QyxTQUFLeUQsc0JBQXNCekQsRUFBSSxHQUNsRixFQUVEbUQsRUFBQUEsVUFBQUEsT0FBQUEsU0FDRTVPLEVBQ0ErTyxFQUNBcGYsR0FIRixXQUtFLE9BQU9vRyxLQUFLekYsUUFBUStiLFdBQVUsYUFBUXRXLEtBQUs4VyxVQUFXN00sRUFBUSxjQUFlK08sR0FBZXBmLEdBQ3pGdUcsTUFBSyxTQUFDdVYsR0FBaUQsU0FBSzBELHNCQUFzQjFELEVBQUksR0FDMUYsRUFFRG1ELEVBQUFBLFVBQUFBLFFBQUFBLFNBQVE1TyxFQUFnQitPLEdBQXhCLFdBQ0UsT0FBT2haLEtBQUt6RixRQUFRMGIsUUFBTyxhQUFRalcsS0FBSzhXLFVBQVc3TSxFQUFRLGNBQWUrTyxJQUN2RTdZLE1BQUssU0FBQ3VWLEdBQWlELFNBQUswRCxzQkFBc0IxRCxFQUFJLEdBQzFGLEVBRURtRCxFQUFBQSxVQUFBQSxXQUFBQSxTQUFXNU8sR0FBWCxXQUNFLE9BQU9qSyxLQUFLekYsUUFBUTBiLFFBQU8sYUFBUWpXLEtBQUs4VyxVQUFXN00sRUFBUSxlQUN4RDlKLE1BQUssU0FBQ3VWLEdBQWlDLFNBQUsyRCwwQkFBMEIzRCxFQUFJLEdBQzlFLEVBRURtRCxFQUFBQSxVQUFBQSxjQUFBQSxTQUNFNU8sRUFDQStPLEVBQ0FwZixHQUhGLFdBS0UsT0FBT29HLEtBQUt6RixRQUFRd2IsWUFBVyxhQUFRL1YsS0FBSzhXLFVBQVc3TSxFQUFRLGNBQWUrTyxFQUFjLGFBQWNwZixHQUN2R3VHLE1BQ0MsU0FBQ3VWLEdBQWdELFNBQUs0RCw2QkFBNkI1RCxFQUFJLEdBRTVGLEVBRURtRCxFQUFBQSxVQUFBQSxXQUFBQSxTQUFXNU8sRUFBZ0IrTyxFQUFzQnhCLEdBQy9DLE9BQU94WCxLQUFLekYsUUFBUTJZLEtBQUksYUFBUWxULEtBQUs4VyxVQUFXN00sRUFBUSxjQUFlK08sRUFBYyxhQUFjeEIsSUFDaEdyWCxNQUNDLFNBQUN1VixHQUFzQyxXQUFJb0QsRUFBbUJwRCxFQUFJckMsS0FBSzBGLFNBQVMsR0FFckYsRUFFREYsRUFBQUEsVUFBQUEsY0FBQUEsU0FDRTVPLEVBQ0ErTyxFQUNBeEIsRUFDQTVkLEdBSkYsV0FNRSxPQUFPb0csS0FBS3pGLFFBQVErYixXQUFVLGFBQVF0VyxLQUFLOFcsVUFBVzdNLEVBQVEsY0FBZStPLEVBQWMsYUFBY3hCLEdBQU01ZCxHQUM1R3VHLE1BRUMsU0FBQ3VWLEdBQWdELFNBQUs2RCxtQ0FBbUM3RCxFQUFJLEdBRWxHLEVBRURtRCxFQUFBQSxVQUFBQSxlQUFBQSxTQUNFNU8sRUFDQStPLEVBQ0F4QixHQUhGLFdBS0UsT0FBT3hYLEtBQUt6RixRQUFRMGIsUUFBTyxhQUFRalcsS0FBSzhXLFVBQVc3TSxFQUFRLGNBQWUrTyxFQUFjLGFBQWN4QixJQUVuR3JYLE1BQUssU0FBQ3VWLEdBQWdELFNBQUs2RCxtQ0FBbUM3RCxFQUFJLEdBQ3RHLEVBRURtRCxFQUFBQSxVQUFBQSxhQUFBQSxTQUNFNU8sRUFDQStPLEVBQ0FuRixHQUhGLFdBS0UsT0FBTzdULEtBQUt6RixRQUFRMlksS0FBSSxhQUFRbFQsS0FBSzhXLFVBQVc3TSxFQUFRLGFBQWMrTyxFQUFjLGFBQWNuRixHQUMvRjFULE1BQ0MsU0FBQ3VWLEdBQStDLFNBQUs4RCwwQkFBMEI5RCxFQUFJLEdBRXhGLEVBQ0gsQ0E1S0EsRUFDVThDLEVBQUFBLHNrQkM5RFYsa0JBS0UsV0FBWS9FLE9BQ1ZqWSxFQUFNLFNBQ05DLEVBQVUsYUFDVmlGLEVBQU8sVUFDUHdULEVBQUFBLEVBQUFBLEtBQUFiLE9BQUksSUFBRyxHQUFDLEVBQUNhLEVBSlgsT0FNTXVGLEVBQWMsR0FDZHJXLEVBQVEsU0FDUSxpQkFBVGlRLEVBQ1RvRyxFQUFjcEcsR0FFZG9HLEVBQWNwRyxhQUFJLEVBQUpBLEVBQU0zUyxRQUNwQjBDLEVBQVFpUSxhQUFJLEVBQUpBLEVBQU1qUSxVQUVoQjJVLEVBQUFBLEtBQUFBLE9BQU8sTUFFRi9ULE1BQVEsR0FDYjBQLEVBQUtsWSxPQUFTQSxFQUNka1ksRUFBS2hULFFBQVVBLEdBQVcwQyxHQUFTM0gsRUFDbkNpWSxFQUFLZ0csUUFBVUQsR0FDaEIsQ0FDSCxPQTFCc0N6QixFQUFBQSxFQUFBQSxHQTBCdEMsQ0ExQkEsRUFBc0N2VSxpaEVDRnRDLGlCQVVBLGNBSUUsV0FBWWxKLEdBQVosTUFDRXdkLEVBQUFBLEtBQUFBLEtBQU14ZCxJQUFRLFlBQ2RtWixFQUFLblosUUFBVUEsR0FDaEIsQ0FnQkgsT0F0QlV5ZCxFQUFBQSxFQUFBQSxHQVFFMkIsRUFBQUEsVUFBQUEsVUFBVixTQUNFcmUsR0FFQSxJQUFNMUIsRUFBTyxDQUFDLEVBS2QsT0FKQUEsRUFBS3liLE1BQVEvWixFQUFTK1gsS0FBS2dDLE1BRTNCemIsRUFBS3VlLE1BQVFuWSxLQUFLb1ksZUFBZTljLEVBQVUsS0FDM0MxQixFQUFLNEIsT0FBU0YsRUFBU0UsT0FDaEI1QixDQUNSLEVBRUsrZixFQUFBQSxVQUFBQSxJQUFOLFNBQVUxUCxFQUFnQjRKLHNFQUN4QixTQUFPN1QsS0FBS3NZLHNCQUFxQixhQUFRLE1BQU9yTyxFQUFRLFVBQVc0SixTQUNwRSxFQUNILENBdkJBLEVBVEEsV0FVVTJFLCtVQ1JWLGlCQUVFLFdBQVlvQixHQUNWNVosS0FBSzRaLG9CQUFzQkEsQ0FDNUIsQ0FvSEgsT0FsSFNDLEVBQUFBLFVBQUFBLGVBQVAsU0FBc0JqZ0IsR0FBdEIsV0FDRSxJQUFLQSxFQUNILE1BQU0sSUFBSTZKLE1BQU0sOEJBbUJsQixPQWpCMENTLE9BQU91QyxLQUFLN00sR0FDbkRvVyxRQUFPLFNBQVV4UyxHQUFPLE9BQU81RCxFQUFLNEQsRUFBTyxJQUMzQytWLFFBQU8sU0FBQ3VHLEVBQXNDdGMsR0FFN0MsTUFEaUIsQ0FBQyxhQUFjLFNBQVUsMEJBQzdCdWMsU0FBU3ZjLElBQ3BCa1csRUFBS3NHLGFBQWF4YyxFQUFLNUQsRUFBSzRELEdBQU1zYyxHQUMzQkEsR0FHRyxZQUFSdGMsR0FDRmtXLEVBQUt1RyxnQkFBZ0J6YyxFQUFLNUQsRUFBSzRELEdBQU1zYyxHQUM5QkEsSUFHVHBHLEVBQUt3RyxzQkFBc0IxYyxFQUFLNUQsRUFBSzRELEdBQU1zYyxHQUNwQ0EsRUFDUixHQUFFLElBQUk5WixLQUFLNFosb0JBRWYsRUFFT0MsRUFBQUEsVUFBQUEsZUFBUixTQUF1Qk0sR0FFckIsWUFBdUQvYyxJQUFqQytjLEVBQWtCQyxVQUN6QyxFQUVPUCxFQUFBQSxVQUFBQSxxQkFBUixTQUE2QnRFLEdBUzNCLEdBQW9CLGlCQUFUQSxHQUFxQnZWLEtBQUt1SCxTQUFTZ08sR0FBTyxNQUFPLENBQUMsRUFFM0QsSUFBQThFLEVBR0U5RSxFQUFJLFNBRk52TixFQUVFdU4sRUFBSSxZQUROK0UsRUFDRS9FLEVBQUksWUFDUixnQkFDTThFLEVBQVcsQ0FBRUEsU0FBUSxHQUFLLENBQUVBLFNBQVUsU0FDdENyUyxHQUFlLENBQUVBLFlBQVcsSUFDNUJzUyxHQUFlLENBQUVBLFlBQVcsR0FFbkMsRUFFT1QsRUFBQUEsVUFBQUEsZ0JBQVIsU0FDRXJjLEVBQ0E1RCxFQUNBdWdCLEdBRUEsR0FBSXBOLE9BQU96RixTQUFTMU4sSUFBeUIsaUJBQVRBLEVBQW1CLENBQ3JELElBQU0yZ0IsRUFBZUosRUFDZkssRUFBK0IsaUJBQVQ1Z0IsRUFBb0JtVCxPQUFPMUksS0FBS3pLLEdBQVFBLEVBQ3BFMmdCLEVBQWFqTixPQUFPOVAsRUFBS2dkLEVBQWMsQ0FBRUgsU0FBVSxlQUNwRCxLQUFNLENBQ21CRixFQUNSN00sT0FBTzlQLEVBQUs1RCxFQUFNLGNBQ25DLENBQ0YsRUFFT2lnQixFQUFBQSxVQUFBQSxhQUFSLFNBQ0VZLEVBQ0EvZSxFQUNBeWUsR0FIRixXQUtRTyxFQUFpQixTQUNyQkMsRUFDQWxXLEVBQ0FrSSxHQUVBLElBQU1uUCxFQUFzQiwyQkFBaEJtZCxFQUEyQyxPQUFTQSxFQUUxREMsRUFEZWxILEVBQUtuTSxTQUFTOUMsR0FDSkEsRUFBTUEsRUFBSTdLLEtBRW5DaUwsRUFBVTZPLEVBQUttSCxxQkFBcUJwVyxHQUN0Q2lQLEVBQUtvSCxlQUFlbk8sR0FDdEJBLEVBQVNXLE9BQU85UCxFQUFLb2QsRUFBUy9WLEdBR2hDOEgsRUFBU1csT0FBTzlQLEVBQUtvZCxFQUFTL1YsRUFBUXdWLFNBQ3ZDLEVBRUd4WCxNQUFNb0QsUUFBUXZLLEdBQ2hCQSxFQUFNNEIsU0FBUSxTQUFVaVksR0FDdEJtRixFQUFlRCxFQUFjbEYsRUFBTTRFLEVBQ3BDLElBRURPLEVBQWVELEVBQWMvZSxFQUFPeWUsRUFFdkMsRUFFT04sRUFBQUEsVUFBQUEsU0FBUixTQUFpQmpnQixHQUNmLE1BQXVCLGlCQUFUQSxHQUEwQyxtQkFBZEEsRUFBS3dWLElBQ2hELEVBRU95SyxFQUFBQSxVQUFBQSxzQkFBUixTQUNFcmMsRUFDQTlCLEVBQ0FvZSxHQUVJalgsTUFBTW9ELFFBQVF2SyxHQUNoQkEsRUFBTTRCLFNBQVEsU0FBVWlZLEdBQ3RCdUUsRUFBWXhNLE9BQU85UCxFQUFLK1gsRUFDekIsSUFDaUIsTUFBVDdaLEdBQ1RvZSxFQUFZeE0sT0FBTzlQLEVBQUs5QixFQUUzQixFQUNILENBQUMsQ0F4SEQsR0F5SEFoRCxFQUFBQSxRQUFlbWhCLDBLQzVIZixpQkFJQSxhQUlFLFdBQVkxUixHQUNWbkksS0FBSzJNLFNBQVd4RSxDQUNqQixDQUtILE9BVkVqRSxPQUFBQSxlQUFXNlcsRUFBQSxVQUFPLEtBQWxCLFdBQXVDLE9BQU8vYSxJQUFPLGtDQU9yRCthLEVBQUFBLFVBQUFBLE9BQUFBLFNBQU9sVyxHQUNMLE9BQU8sSUFBSW1XLEVBQUFBLFFBQU9uVyxFQUFTN0UsS0FBSzJNLFNBQ2pDLEVBQ0gsQ0FBQyxDQVhELHNIQ01BLFNBQVlzTyxHQUNWQSxFQUFBQSxRQUFBQSxVQUNBQSxFQUFBQSxXQUFBQSxhQUNBQSxFQUFBQSxhQUFBQSxlQUNBQSxFQUFBQSxXQUFBQSxZQUpGLEVBQVl2aUIsRUFBQUEsb0JBQUFBLEVBQUFBLGtCQUFpQiwyckRDSzdCLGlCQUdFLFdBQVk2QixHQUNWeUYsS0FBS3pGLFFBQVVBLENBQ2hCLENBcUNILE9BbkNFMmdCLEVBQUFBLFVBQUFBLEtBQUFBLFdBQUEsV0FDRSxPQUFPbGIsS0FBS3pGLFFBQVEyWSxJQUFJLGdCQUNyQi9TLE1BQUssU0FBQzdFLEdBQWlDLFNBQUs2ZixxQkFBcUI3ZixFQUFTLEdBQzlFLEVBRUs0ZixFQUFBQSxVQUFBQSxPQUFOLFNBQWF0aEIsbUdBQzRCLFNBQU1vRyxLQUFLekYsUUFBUXdiLFdBQVcsZUFBZ0JuYyxXQUNyRixPQURNMEIsRUFBaUNtWSxFQUFBQSxPQUN2QyxNQUNFalksT0FBUUYsRUFBU0UsUUFDZEYsRUFBUytYLGFBRWYsRUFFSzZILEVBQUFBLFVBQUFBLE9BQU4sU0FBYUUsRUFBZ0J4aEIsbUdBQ2EsU0FBTW9HLEtBQUt6RixRQUFROGdCLFlBQVksdUJBQWdCRCxHQUFVeGhCLFdBQ2pHLE9BRE0wQixFQUFrQ21ZLEVBQUFBLE9BQ3hDLE1BQ0VqWSxPQUFRRixFQUFTRSxRQUNkRixFQUFTK1gsYUFFZixFQUVLNkgsRUFBQUEsVUFBQUEsT0FBTixTQUFhRSxFQUFnQnhoQixtR0FDWSxTQUFNb0csS0FBS3pGLFFBQVEwYixPQUFPLHVCQUFnQm1GLEdBQVV4aEIsV0FDM0YsT0FETTBCLEVBQWlDbVksRUFBQUEsT0FDdkMsTUFDRWpZLE9BQVFGLEVBQVNFLFFBQ2RGLEVBQVMrWCxhQUVmLEVBRU82SCxFQUFBQSxVQUFBQSxxQkFBUixTQUE2QjVmLEdBQzNCLFVBQ0VFLE9BQVFGLEVBQVNFLFFBQ2RGLEVBQVMrWCxLQUVmLEVBQ0gsQ0FBQyxDQTFDRCxnK0NDWkEsaUJBR0UsV0FBWTlZLEdBQ1Z5RixLQUFLekYsUUFBVUEsQ0FDaEIsQ0FlSCxPQWJRK2dCLEVBQUFBLFVBQUFBLEtBQU4sU0FBV3pILG1HQUNRLFNBQU03VCxLQUFLekYsUUFBUTJZLElBQUksVUFBV1csV0FDbkQsT0FETXZZLEVBQVdtWSxFQUFBQSxPQUNqQixHQUFPelQsS0FBS3ViLGlCQUFzQ2pnQixVQUNuRCxFQUVLZ2dCLEVBQUFBLFVBQUFBLElBQU4sU0FBVTlFLG1HQUNTLFNBQU14VyxLQUFLekYsUUFBUTJZLElBQUksa0JBQVdzRCxZQUNuRCxPQURNbGIsRUFBV21ZLEVBQUFBLE9BQ2pCLEdBQU96VCxLQUFLdWIsaUJBQXlCamdCLFVBQ3RDLEVBRU9nZ0IsRUFBQUEsVUFBQUEsaUJBQVIsU0FBNEJoZ0IsR0FDMUIsT0FBT0EsRUFBUytYLElBQ2pCLEVBQ0gsQ0FBQyxDQXBCRCxrdkVDV0EsSUFFQSxjQU1FLFdBQVk5WSxFQUFrQmloQixHQUE5QixNQUNFekQsRUFBQUEsS0FBQUEsS0FBTXhkLElBQVEsWUFDZG1aLEVBQUtuWixRQUFVQSxFQUNmbVosRUFBS29ELFVBQVksWUFDakJwRCxFQUFLOEgsUUFBVUEsR0FDaEIsQ0F3RUgsT0FsRlV4RCxFQUFBQSxFQUFBQSxHQVlBeUQsRUFBQUEsVUFBQUEsc0JBQVIsU0FBOEJqZ0IsRUFBZ0I1QixHQUM1QyxNQUFPLENBQ0w0QixPQUFNLEVBQ05rZ0IsaUJBQWtCLEVBQUYsS0FDWDloQixHQUFJLENBQ1BnYixXQUFZLElBQUl2SyxLQUF1QixJQUFsQnpRLEVBQUtnYixjQUcvQixFQUVTNkcsRUFBQUEsVUFBQUEsVUFBVixTQUFvQm5nQixHQUNsQixJQUFNMUIsRUFBTyxDQUFDLEVBT2QsT0FMQUEsRUFBS3liLE1BQVEvWixFQUFTK1gsS0FBS2dDLE1BRTNCemIsRUFBS3VlLE1BQVFuWSxLQUFLb1ksZUFBZTljLEVBQVUsSUFBSyxXQUNoRDFCLEVBQUs0QixPQUFTRixFQUFTRSxPQUVoQjVCLENBQ1IsRUFFSzZoQixFQUFBQSxVQUFBQSxLQUFOLFNBQVc1SCxzRUFDVCxTQUFPN1QsS0FBS3NZLHFCQUFxQixVQUFHdFksS0FBSzhXLFVBQVMsVUFBVWpELFNBQzdELEVBRUQ0SCxFQUFBQSxVQUFBQSxJQUFBQSxTQUFJRSxHQUNGLE9BQU8zYixLQUFLekYsUUFBUTJZLElBQUksVUFBR2xULEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksSUFDMUN4YixNQUFLLFNBQUM3RSxHQUFhLE9BQUFBLEVBQVMrWCxLQUFLdUksSUFBbUIsR0FDeEQsRUFFREgsRUFBQUEsVUFBQUEsT0FBQUEsU0FBTzdoQixHQUNMLE9BQU9vRyxLQUFLekYsUUFBUXdiLFdBQVcvVixLQUFLOFcsVUFBV2xkLEdBQzVDdUcsTUFBSyxTQUFDN0UsR0FBYSxPQUFBQSxFQUFTK1gsS0FBS3VJLElBQW1CLEdBQ3hELEVBRURILEVBQUFBLFVBQUFBLE9BQUFBLFNBQU9FLEVBQXlCL2hCLEdBQzlCLE9BQU9vRyxLQUFLekYsUUFBUStiLFVBQVUsVUFBR3RXLEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksR0FBbUIvaEIsR0FDbkV1RyxNQUFLLFNBQUM3RSxHQUFhLE9BQUFBLEVBQVMrWCxLQUFLdUksSUFBbUIsR0FDeEQsRUFFREgsRUFBQUEsVUFBQUEsUUFBQUEsU0FBUUUsR0FDTixPQUFPM2IsS0FBS3pGLFFBQVEwYixPQUFPLFVBQUdqVyxLQUFLOFcsVUFBUyxLQUFBL1QsT0FBSTRZLElBQzdDeGIsTUFBSyxTQUFDN0UsR0FBYSxPQUFBQSxFQUFTK1gsSUFBcUIsR0FDckQsRUFFRG9JLEVBQUFBLFVBQUFBLFNBQUFBLFNBQVNFLEdBQ1AsT0FBTzNiLEtBQUt6RixRQUFRc2hCLEtBQUssVUFBRzdiLEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksRUFBZSxhQUFhLENBQUMsR0FDeEV4YixNQUFLLFNBQUM3RSxHQUFhLFVBQ2xCRSxPQUFRRixFQUFTRSxRQUNkRixFQUFTK1gsS0FDYSxHQUM5QixFQUVEb0ksRUFBQUEsVUFBQUEsaUJBQUFBLFNBQWlCRSxHQUFqQixXQUNFLE9BQU8zYixLQUFLekYsUUFBUTJZLElBQUksVUFBR2xULEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksRUFBZSxjQUN6RHhiLE1BQ0MsU0FBQzdFLEdBQWEsU0FBS3dnQixzQkFDakJ4Z0IsRUFBU0UsT0FDUkYsRUFBUytYLEtBQ1gsR0FFTixFQUVEb0ksRUFBQUEsVUFBQUEsaUJBQUFBLFNBQWlCRSxHQUNmLE9BQU8zYixLQUFLekYsUUFBUTBiLE9BQU8sVUFBR2pXLEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksRUFBZSxjQUM1RHhiLE1BQUssU0FBQzdFLEdBQWEsTUFBQyxDQUNuQkUsT0FBUUYsRUFBU0UsT0FDakJrRixRQUFTcEYsRUFBUytYLEtBQUszUyxRQUNHLEdBQy9CLEVBQ0gsQ0FuRkEsRUFGQSxXQUdVOFgsd3ZFQ0ZWLElBRUEsY0FNRSxXQUFZamUsR0FBWixNQUNFd2QsRUFBQUEsS0FBQUEsS0FBTXhkLElBQVEsWUFDZG1aLEVBQUtuWixRQUFVQSxFQUNmbVosRUFBS29ELFVBQVksYUFDbEIsQ0EwRUgsT0FuRlVrQixFQUFBQSxFQUFBQSxHQVdBK0QsRUFBQUEsVUFBQUEsbUJBQVIsU0FBMkJuaUIsR0FDekIsSUFBTW9pQixFQUFVLEVBQUgsR0FBUXBpQixHQVVyQixNQVJ5QixpQkFBZEEsRUFBS3FpQixPQUNkRCxFQUFRQyxLQUFPelQsS0FBS0ksVUFBVW9ULEVBQVFDLE9BR1Qsa0JBQXBCcmlCLEVBQUtzaUIsYUFDZEYsRUFBUUUsV0FBYXRpQixFQUFLc2lCLFdBQWEsTUFBUSxNQUcxQ0YsQ0FDUixFQUVTRCxFQUFBQSxVQUFBQSxVQUFWLFNBQ0V6Z0IsR0FFQSxJQUFNMUIsRUFBTyxDQUFDLEVBSWQsT0FIQUEsRUFBS3liLE1BQVEvWixFQUFTK1gsS0FBS2dDLE1BRTNCemIsRUFBS3VlLE1BQVFuWSxLQUFLb1ksZUFBZTljLEVBQVUsSUFBSyxXQUN6QzFCLENBQ1IsRUFFS21pQixFQUFBQSxVQUFBQSxZQUFOLFNBQ0VKLEVBQ0E5SCxzRUFFQSxTQUFPN1QsS0FBS3NZLHFCQUFxQixVQUFHdFksS0FBSzhXLFVBQVMsS0FBQS9ULE9BQUk0WSxFQUFlLGtCQUFrQjlILFNBQ3hGLEVBRURrSSxFQUFBQSxVQUFBQSxVQUFBQSxTQUFVSixFQUF5QlEsR0FDakMsT0FBT25jLEtBQUt6RixRQUFRMlksSUFBSSxVQUFHbFQsS0FBSzhXLFVBQVMsS0FBQS9ULE9BQUk0WSxFQUFlLGFBQUE1WSxPQUFZb1osSUFDckVoYyxNQUFLLFNBQUM3RSxHQUFhLE9BQUFBLEVBQVMrWCxLQUFLK0ksTUFBd0IsR0FDN0QsRUFFREwsRUFBQUEsVUFBQUEsYUFBQUEsU0FDRUosRUFDQS9oQixHQUVBLElBQU15aUIsRUFBVXJjLEtBQUtzYyxtQkFBbUIxaUIsR0FDeEMsT0FBT29HLEtBQUt6RixRQUFRd2IsV0FBVyxVQUFHL1YsS0FBSzhXLFVBQVMsS0FBQS9ULE9BQUk0WSxFQUFlLFlBQVlVLEdBQzVFbGMsTUFBSyxTQUFDN0UsR0FBYSxPQUFBQSxFQUFTK1gsS0FBSytJLE1BQXdCLEdBQzdELEVBRURMLEVBQUFBLFVBQUFBLGNBQUFBLFNBQ0VKLEVBQ0EvaEIsR0FFQSxJQUFNb2lCLEVBQWtDLENBQ3RDUixRQUFTM1ksTUFBTW9ELFFBQVFyTSxFQUFLNGhCLFNBQVdoVCxLQUFLSSxVQUFVaFAsRUFBSzRoQixTQUFXNWhCLEVBQUs0aEIsUUFDM0VlLE9BQVEzaUIsRUFBSzJpQixRQUdmLE9BQU92YyxLQUFLekYsUUFBUXdiLFdBQVcsVUFBRy9WLEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksRUFBZSxpQkFBaUJLLEdBQ2pGN2IsTUFBSyxTQUFDN0UsR0FBYSxPQUFBQSxFQUFTK1gsSUFBa0MsR0FDbEUsRUFFRDBJLEVBQUFBLFVBQUFBLGFBQUFBLFNBQ0VKLEVBQ0FRLEVBQ0F2aUIsR0FFQSxJQUFNeWlCLEVBQVVyYyxLQUFLc2MsbUJBQW1CMWlCLEdBQ3hDLE9BQU9vRyxLQUFLekYsUUFBUStiLFVBQVUsVUFBR3RXLEtBQUs4VyxVQUFTLEtBQUEvVCxPQUFJNFksRUFBZSxhQUFBNVksT0FBWW9aLEdBQXlCRSxHQUNwR2xjLE1BQUssU0FBQzdFLEdBQWEsT0FBQUEsRUFBUytYLEtBQUsrSSxNQUF3QixHQUM3RCxFQUVETCxFQUFBQSxVQUFBQSxjQUFBQSxTQUFjSixFQUF5QlEsR0FDckMsT0FBT25jLEtBQUt6RixRQUFRMGIsT0FBTyxVQUFHalcsS0FBSzhXLFVBQVMsS0FBQS9ULE9BQUk0WSxFQUFlLGFBQUE1WSxPQUFZb1osSUFDeEVoYyxNQUFLLFNBQUM3RSxHQUFhLE9BQUFBLEVBQVMrWCxJQUFxQixHQUNyRCxFQUNILENBcEZBLEVBRkEsV0FHVW1GLGthQ2xCVixpQkFTQSxhQUdFLFdBQVlqZSxHQUNWeUYsS0FBS3pGLFFBQVVBLENBQ2hCLENBK0NILE9BN0NVaWlCLEVBQUFBLFVBQUFBLHFCQUFSLFNBQTZCNWlCLEdBQzNCLElBQU02aUIsRUFBa0IsSUFBSUMsSUFBSSxDQUM5QixhQUNBLFNBQ0EsU0FDQSxhQUNBLG9CQUNBLG1CQUNBLGdCQUNBLHdCQUdGLElBQUs5aUIsR0FBcUMsSUFBN0JzSyxPQUFPdUMsS0FBSzdNLEdBQU0yRyxPQUM3QixNQUFNLElBQUk2VCxFQUFBQSxRQUFTLENBQ2pCNVksT0FBUSxJQUNSa0YsUUFBUyx5Q0FHYixPQUFPd0QsT0FBT3VDLEtBQUs3TSxHQUFNMlosUUFBTyxTQUFDQyxFQUFLaFcsR0FNcEMsT0FMSWlmLEVBQWdCeEosSUFBSXpWLElBQTZCLGtCQUFkNUQsRUFBSzRELEdBQzFDZ1csRUFBSWhXLEdBQU81RCxFQUFLNEQsR0FBTyxNQUFRLEtBRS9CZ1csRUFBSWhXLEdBQU81RCxFQUFLNEQsR0FFWGdXLENBQ1IsR0FBRSxDQUFDLEVBQ0wsRUFFRGdKLEVBQUFBLFVBQUFBLGVBQUFBLFNBQWVsaEIsR0FDYixVQUNFRSxPQUFRRixFQUFTRSxRQUNkRixFQUFTK1gsS0FFZixFQUVEbUosRUFBQUEsVUFBQUEsT0FBQUEsU0FBT3ZTLEVBQWdCclEsR0FDckIsR0FBSUEsRUFBSzhHLFFBQ1AsT0FBT1YsS0FBS3pGLFFBQVF3YixXQUFXLGNBQU85TCxFQUFNLGtCQUFrQnJRLEdBQzNEdUcsS0FBS0gsS0FBSzJjLGdCQUdmLElBQU1DLEVBQWU1YyxLQUFLNmMscUJBQXFCampCLEdBQy9DLE9BQU9vRyxLQUFLekYsUUFBUXdiLFdBQVcsY0FBTzlMLEVBQU0sYUFBYTJTLEdBQ3REemMsS0FBS0gsS0FBSzJjLGVBQ2QsRUFDSCxDQUFDLENBcERELGl4RUNUQSxpQkFpQkEsRUE0QkUsU0FBWS9pQixFQUFpQ2tqQixXQUMzQzljLEtBQUswWSxVQUFZLElBQUlyTyxLQUFLelEsRUFBS2diLFlBQy9CNVUsS0FBSytFLEdBQUtuTCxFQUFLbUwsR0FDZi9FLEtBQUsrYyxTQUFXbmpCLEVBQUttakIsU0FDckIvYyxLQUFLZ2QsaUJBQW1CcGpCLEVBQUtxakIsa0JBQzdCamQsS0FBS3hFLE9BQVM1QixFQUFLNEIsT0FDbkJ3RSxLQUFLOGMsbUJBQXFCQSxFQUN0QmxqQixFQUFLc2pCLGVBQ1BsZCxLQUFLbWQsWUFBYyxDQUNqQkMsSUFBc0IsUUFBakIsRUFBQXhqQixFQUFLc2pCLG9CQUFZekosSUFBQUEsT0FBQSxFQUFBQSxFQUFFMkosSUFDeEJDLEtBQXVCLFFBQWpCLEVBQUF6akIsRUFBS3NqQixvQkFBWWhKLElBQUFBLE9BQUEsRUFBQUEsRUFBRW1KLE9BR3pCempCLEVBQUswakIsVUFDUHRkLEtBQUtzZCxRQUFVLENBQ2JqUCxPQUFRLENBQ05rUCxTQUFVM2pCLEVBQUswakIsUUFBUWpQLE9BQU9tUCxVQUM5QkMsWUFBYTdqQixFQUFLMGpCLFFBQVFqUCxPQUFPb1AsWUFDakNDLFVBQVc5akIsRUFBSzBqQixRQUFRalAsT0FBT3NQLFlBQy9CQyxjQUFlaGtCLEVBQUswakIsUUFBUWpQLE9BQU91UCxjQUNuQ0MsUUFBU2prQixFQUFLMGpCLFFBQVFqUCxPQUFPd1AsU0FFL0JDLEtBQU0sQ0FDSkMsS0FBTW5rQixFQUFLMGpCLFFBQVFRLEtBQUtDLEtBQ3hCQyxJQUFLcGtCLEVBQUswakIsUUFBUVEsS0FBS0UsSUFDdkJDLE9BQVFya0IsRUFBSzBqQixRQUFRUSxLQUFLRyxPQUMxQkosUUFBU2prQixFQUFLMGpCLFFBQVFRLEtBQUtELFVBSWxDLEVBMURVbmxCLEVBQUFBLHNCQUFBQSxFQTZEYixrQkFLRSxXQUFZNkIsR0FBWixNQUNFd2QsRUFBQUEsS0FBQUEsT0FBTyxZQUNQckUsRUFBS25aLFFBQVVBLEdBQ2hCLENBa0RILE9BekRVeWQsRUFBQUEsRUFBQUEsR0FTQWtHLEVBQUFBLFVBQUFBLGVBQVIsU0FBMEI1aUIsR0FDeEIsT0FBT2lWLEVBQUFBLENBQ0wvVSxPQUFRRixFQUFTRSxRQUNkRixhQUFRLEVBQVJBLEVBQVUrWCxLQUVoQixFQUVTNkssRUFBQUEsVUFBQUEsVUFBVixTQUFvQjVpQixHQUVsQixJQUFNMUIsRUFBTyxDQUFDLEVBUWQsT0FOQUEsRUFBS3VrQixLQUFPN2lCLEVBQVMrWCxLQUFLOEssS0FBSzdJLEtBQUksU0FBQzhJLEdBQVEsV0FBSUMsRUFBc0JELEVBQUs5aUIsRUFBU0UsT0FBTyxJQUUzRjVCLEVBQUt1ZSxNQUFRblksS0FBS29ZLGVBQWU5YyxFQUFVLElBQUssU0FDaEQxQixFQUFLMGtCLE1BQVFoakIsRUFBUytYLEtBQUtpTCxNQUMzQjFrQixFQUFLNEIsT0FBU0YsRUFBU0UsT0FFaEI1QixDQUNSLEVBRUtza0IsRUFBQUEsVUFBQUEsS0FBTixTQUFXckssc0VBQ1QsU0FBTzdULEtBQUtzWSxxQkFBcUIsNEJBQTZCekUsU0FDL0QsRUFFS3FLLEVBQUFBLFVBQUFBLElBQU4sU0FBVUssbUdBQ1MsU0FBTXZlLEtBQUt6RixRQUFRMlksSUFBSSxvQ0FBNkJxTCxZQUNyRSxPQURNampCLEVBQVdtWSxFQUFBQSxPQUNqQixHQUFPLElBQUk0SyxFQUFzQi9pQixFQUFTK1gsS0FBTS9YLEVBQVNFLGVBQzFELEVBRUswaUIsRUFBQUEsVUFBQUEsT0FBTixTQUNFSyxFQUNBM2tCLHFHQVNpQixjQVBYNGtCLEVBQXNCLEdBQzFCQyx1QkFBd0IsRUFBRixHQUNqQjdrQixhQUFJLEVBQUpBLEVBQU04a0IsT0FFUjlrQixJQUV5QjhrQixLQUNiLEdBQU0xZSxLQUFLekYsUUFBUXdiLFdBQVcsb0NBQTZCd0ksR0FBVUMsV0FDdEYsT0FETWxqQixFQUFXbVksRUFBQUEsT0FDakIsR0FBT3pULEtBQUsyZSxlQUE2Q3JqQixVQUMxRCxFQUVLNGlCLEVBQUFBLFVBQUFBLFFBQU4sU0FBY0ssbUdBQ0ssU0FBTXZlLEtBQUt6RixRQUFRMGIsT0FBTyxvQ0FBNkJzSSxZQUN4RSxPQURNampCLEVBQVdtWSxFQUFBQSxPQUNqQixHQUFPelQsS0FBSzJlLGVBQThDcmpCLFVBQzNELEVBQ0gsQ0ExREEsRUFDVWtkLEVBQUFBLGk2RUMvRVYsaUJBQ0EsYUFDQSxhQUVBLGFBS0EsWUFHQSxhQVNFLFdBQVkzVCxFQUF5QjhILEdBQ25DM00sS0FBS3RGLFNBQVdtSyxFQUFRbkssU0FDeEJzRixLQUFLeEMsSUFBTXFILEVBQVFySCxJQUNuQndDLEtBQUs5RSxJQUFNMkosRUFBUTNKLElBQ25COEUsS0FBSy9ELFFBQVU0SSxFQUFRNUksUUFDdkIrRCxLQUFLbEcsUUFBVStLLEVBQVEvSyxTQUFXLENBQUMsRUFDbkNrRyxLQUFLNGUsZ0JBQWtCLElBQUlDLEVBQUFBLFFBQWdCbFMsR0FDM0MzTSxLQUFLZ0osY0FBZ0IsUUFDdEIsQ0ErSkgsT0E3SlE4VixFQUFBQSxVQUFBQSxRQUFOLFNBQ0VqakIsRUFDQVgsRUFDQTZqQiwrSEFFTWxhLEVBQU8sS0FBOEJrYSxHQUNyQ0MsRUFBUUMsRUFBTzdWLE9BQU8sVUFBR3BKLEtBQUt0RixTQUFRLEtBQUFxSSxPQUFJL0MsS0FBS3hDLE1BQy9DMGhCLEVBQWdCcmEsRUFBUS9LLFFBQVUrSyxFQUFRL0ssUUFBVSxDQUFDLEVBRXJEQSxFQUFPLEtBQ1hnQixjQUFlLGdCQUFTa2tCLElBQ3JCaGYsS0FBS2xHLFNBQ0xvbEIsR0FHRXJhLGdCQUFBQSxFQUFTL0ssUUFFVmlDLEVBQVMsRUFBSCxHQUFROEksSUFFaEJBLGFBQU8sRUFBUEEsRUFBU2dQLFFBQVMzUCxPQUFPZ00sb0JBQW9CckwsYUFBTyxFQUFQQSxFQUFTZ1AsT0FBT3RULE9BQVMsSUFDeEV4RSxFQUFPQSxPQUFTLElBQUlvakIsZ0JBQWdCdGEsRUFBUWdQLGNBQ3JDOVgsRUFBTzhYLFFBR1poUCxhQUFPLEVBQVBBLEVBQVN3TyxRQUNMQSxFQUFPeE8sYUFBTyxFQUFQQSxFQUFTd08sS0FDdEJ0WCxFQUFPbkMsS0FBT3laLFNBQ1B0WCxFQUFPc1gsTUFHVitMLEdBQVcsYUFBUXBmLEtBQUs5RSxJQUFLQSxvQkFFdEIsZ0NBQU1ta0IsRUFBQUEsUUFBTTlrQixRQUFPZ1csRUFBQUEsRUFBQUEsQ0FDNUIxVSxPQUFRQSxFQUFPeWpCLG9CQUNmcmpCLFFBQVMrRCxLQUFLL0QsUUFDZGYsSUFBS2trQixFQUNMdGxCLFFBQU8sR0FDSmlDLEdBQU0sQ0FDVGlOLGNBQWVoSixLQUFLZ0osZ0NBTnRCMU4sRUFBV2lrQixFQUFBQSxvQkFXWCxpQkFGTUMsRUFBZ0JDLEVBRWhCLElBQUlyTCxFQUFBQSxRQUFTLENBQ2pCNVksUUFBK0IsUUFBdkIsRUFBQWdrQixhQUFhLEVBQWJBLEVBQWVsa0IsZ0JBQVFtWSxJQUFBQSxPQUFBLEVBQUFBLEVBQUVqWSxTQUFVLElBQzNDQyxZQUFtQyxRQUF2QixFQUFBK2pCLGFBQWEsRUFBYkEsRUFBZWxrQixnQkFBUTRZLElBQUFBLE9BQUEsRUFBQUEsRUFBRXpZLGFBQWMrakIsRUFBY2hjLEtBQ2pFNlAsTUFBNkIsUUFBdkIsRUFBQW1NLGFBQWEsRUFBYkEsRUFBZWxrQixnQkFBUW9rQixJQUFBQSxPQUFBLEVBQUFBLEVBQUU5bEIsT0FBUTRsQixFQUFjOWUsaUJBSTdDLFNBQU1WLEtBQUsyZixnQkFBZ0Jya0IsV0FDdkMsU0FEWWlrQixFQUFBQSxjQUViLEVBRWFULEVBQUFBLFVBQUFBLGdCQUFkLFNBQThCeGpCLDRFQU01QixHQUxNb2EsRUFBTSxDQUNWckMsS0FBTSxDQUFDLEVBQ1A3WCxPQUFRRixhQUFRLEVBQVJBLEVBQVVFLFFBR1MsaUJBQWxCRixFQUFTMUIsS0FBbUIsQ0FDckMsR0FBc0IsNEJBQWxCMEIsRUFBUzFCLEtBQ1gsTUFBTSxJQUFJd2EsRUFBQUEsUUFBUyxDQUNqQjVZLE9BQVEsSUFDUkMsV0FBWSxnQkFDWjRYLEtBQU0vWCxFQUFTMUIsT0FHbkI4YixFQUFJckMsS0FBTyxDQUNUM1MsUUFBU3BGLEVBQVMxQixLQUVyQixNQUNDOGIsRUFBSXJDLEtBQU8vWCxFQUFTMUIsS0FFdEIsU0FBTzhiLFFBQ1IsRUFFRG9KLEVBQUFBLFVBQUFBLE1BQUFBLFNBQ0VqakIsRUFDQVgsRUFDQTJZLEVBQ0FoUCxHQUVBLE9BQU83RSxLQUFLekYsUUFBUXNCLEVBQVFYLEVBQUdxVixFQUFBQSxDQUFJc0QsTUFBSyxHQUFLaFAsR0FDOUMsRUFFRGlhLEVBQUFBLFVBQUFBLFFBQUFBLFNBQ0VqakIsRUFDQVgsRUFDQXRCLEVBQ0FpTCxFQUNBK2EsUUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxHQUVBLElBQUk5bEIsRUFBVSxDQUFDLEVBQ1g4bEIsSUFDRjlsQixFQUFVLENBQUUsZUFBZ0Isc0NBRTlCLElBQU0rbEIsRUFBaUIsRUFBSCxPQUNmL2xCLEdBQU8sQ0FDVnVaLEtBQU16WixJQUNIaUwsR0FFTCxPQUFPN0UsS0FBS3pGLFFBQ1ZzQixFQUNBWCxFQUNBMmtCLEVBRUgsRUFFRGYsRUFBQUEsVUFBQUEsSUFBQUEsU0FDRTVqQixFQUNBMlksRUFDQWhQLEdBRUEsT0FBTzdFLEtBQUs2VCxNQUFNLE1BQU8zWSxFQUFLMlksRUFBT2hQLEVBQ3RDLEVBRURpYSxFQUFBQSxVQUFBQSxLQUFBQSxTQUNFNWpCLEVBQ0F0QixFQUNBaUwsR0FFQSxPQUFPN0UsS0FBSzhmLFFBQVEsT0FBUTVrQixFQUFLdEIsRUFBTWlMLEVBQ3hDLEVBRURpYSxFQUFBQSxVQUFBQSxXQUFBQSxTQUNFNWpCLEVBQ0F0QixHQUVBLElBQU0rUyxFQUFXM00sS0FBSzRlLGdCQUFnQm1CLGVBQWVubUIsR0FDckQsT0FBT29HLEtBQUs4ZixRQUFRLE9BQVE1a0IsRUFBS3lSLEVBQVUsQ0FDekM3UyxRQUFTLENBQUUsZUFBZ0IseUJBQzFCLEVBQ0osRUFFRGdsQixFQUFBQSxVQUFBQSxVQUFBQSxTQUFVNWpCLEVBQWF0QixHQUNyQixJQUFNK1MsRUFBVzNNLEtBQUs0ZSxnQkFBZ0JtQixlQUFlbm1CLEdBQ3JELE9BQU9vRyxLQUFLOGYsUUFBUSxNQUFPNWtCLEVBQUt5UixFQUFVLENBQ3hDN1MsUUFBUyxDQUFFLGVBQWdCLHlCQUMxQixFQUNKLEVBRURnbEIsRUFBQUEsVUFBQUEsWUFBQUEsU0FBWTVqQixFQUFhdEIsR0FDdkIsSUFBTStTLEVBQVczTSxLQUFLNGUsZ0JBQWdCbUIsZUFBZW5tQixHQUNyRCxPQUFPb0csS0FBSzhmLFFBQVEsUUFBUzVrQixFQUFLeVIsRUFBVSxDQUMxQzdTLFFBQVMsQ0FBRSxlQUFnQix5QkFDMUIsRUFDSixFQUVEZ2xCLEVBQUFBLFVBQUFBLElBQUFBLFNBQUk1akIsRUFBYXRCLEVBQXlDaUwsR0FFeEQsT0FBTzdFLEtBQUs4ZixRQUFRLE1BQU81a0IsRUFBS3RCLEVBQU1pTCxFQUN2QyxFQUVEaWEsRUFBQUEsVUFBQUEsT0FBQUEsU0FBTzVqQixFQUFhdEIsR0FDbEIsT0FBT29HLEtBQUs4ZixRQUFRLFNBQVU1a0IsRUFBS3RCLEVBQ3BDLEVBQ0gsQ0FBQyxDQWhMRCxHQWtMQWxCLEVBQUFBLFFBQWVvbUIsNkVDekxmLGlCQUdFLFdBQVl2a0IsR0FDVnlGLEtBQUt6RixRQUFVQSxDQUNoQixDQTBCSCxPQXhCRXlsQixFQUFBQSxVQUFBQSxLQUFBQSxTQUFLbk0sR0FDSCxPQUFPN1QsS0FBS3pGLFFBQVEyWSxJQUFJLGFBQWNXLEdBQ25DMVQsTUFBSyxTQUFDN0UsR0FBYSxPQUFBQSxFQUFTK1gsS0FBS2dDLEtBQUssR0FDMUMsRUFFRDJLLEVBQUFBLFVBQUFBLElBQUFBLFNBQUlqYixHQUNGLE9BQU8vRSxLQUFLekYsUUFBUTJZLElBQUkscUJBQWNuTyxJQUNuQzVFLE1BQUssU0FBQzdFLEdBQWEsT0FBQUEsRUFBUytYLEtBQUs0TSxLQUFLLEdBQzFDLEVBRURELEVBQUFBLFVBQUFBLE9BQUFBLFNBQU9wbUIsR0FDTCxPQUFPb0csS0FBS3pGLFFBQVF3YixXQUFXLGFBQWNuYyxHQUMxQ3VHLE1BQUssU0FBQzdFLEdBQWEsT0FBQUEsRUFBUytYLEtBQUs0TSxLQUFLLEdBQzFDLEVBRURELEVBQUFBLFVBQUFBLE9BQUFBLFNBQU9qYixFQUFZbkwsR0FDakIsT0FBT29HLEtBQUt6RixRQUFRK2IsVUFBVSxxQkFBY3ZSLEdBQU1uTCxHQUMvQ3VHLE1BQUssU0FBQzdFLEdBQWEsT0FBQUEsRUFBUytYLElBQUksR0FDcEMsRUFFRDJNLEVBQUFBLFVBQUFBLFFBQUFBLFNBQVFqYixHQUNOLE9BQU8vRSxLQUFLekYsUUFBUTBiLE9BQU8scUJBQWNsUixJQUN0QzVFLE1BQUssU0FBQzdFLEdBQWEsT0FBQUEsRUFBUytYLElBQUksR0FDcEMsRUFDSCxDQUFDLENBL0JELHduQkNMQSxpQkFJQSxFQU1FLFNBQVl6WixHQUNWb0csS0FBSzBYLE1BQVEsSUFBSXJOLEtBQUt6USxFQUFLOGQsT0FDM0IxWCxLQUFLMlgsSUFBTSxJQUFJdE4sS0FBS3pRLEVBQUsrZCxLQUN6QjNYLEtBQUs0WCxXQUFhaGUsRUFBS2dlLFdBQ3ZCNVgsS0FBS3lSLE1BQVE3WCxFQUFLNlgsTUFBTTZELEtBQUksU0FBVXVDLEdBQ3BDLElBQU1uQyxFQUFNLEVBQUgsR0FBUW1DLEdBRWpCLE9BREFuQyxFQUFJb0MsS0FBTyxJQUFJek4sS0FBS3dOLEVBQUtDLE1BQ2xCcEMsQ0FDUixHQUNGLEVBR0gsYUFHRSxXQUFZbmIsR0FDVnlGLEtBQUt6RixRQUFVQSxDQUNoQixDQWtDSCxPQWhDVTJsQixFQUFBQSxVQUFBQSxvQkFBUixTQUE0QnJNLEdBQzFCLElBQUloQixFQUFlLEdBYW5CLE1BWnFCLGlCQUFWZ0IsR0FBc0IzUCxPQUFPdUMsS0FBS29OLEdBQU90VCxTQUNsRHNTLEVBQWUzTyxPQUFPa1AsUUFBUVMsR0FBT04sUUFBTyxTQUFDNE0sRUFBZ0JDLEdBQ3BELElBQUE1aUIsRUFBYzRpQixFQUFXLEdBQXBCMWtCLEVBQVMwa0IsRUFBVyxHQUNoQyxHQUFJdmQsTUFBTW9ELFFBQVF2SyxJQUFVQSxFQUFNNkUsT0FBUSxDQUN4QyxJQUFNOGYsRUFBbUIza0IsRUFBTTRaLEtBQUksU0FBQ0MsR0FBUyxPQUFDL1gsRUFBSytYLEVBQUssSUFDeEQsY0FBVzRLLEdBQWMsR0FBS0UsR0FBZ0IsRUFDL0MsQ0FFRCxPQURBRixFQUFlcmYsS0FBSyxDQUFDdEQsRUFBSzlCLElBQ25CeWtCLENBQ1IsR0FBRSxLQUdFdE4sQ0FDUixFQUVEcU4sRUFBQUEsVUFBQUEsWUFBQUEsU0FBWTVrQixHQUNWLE9BQU8sSUFBSWdsQixFQUFNaGxCLEVBQVMrWCxLQUMzQixFQUVENk0sRUFBQUEsVUFBQUEsVUFBQUEsU0FBVWpXLEVBQWdCNEosR0FDeEIsSUFBTWhCLEVBQWU3UyxLQUFLdWdCLG9CQUFvQjFNLEdBQzlDLE9BQU83VCxLQUFLekYsUUFBUTJZLEtBQUksYUFBUSxNQUFPakosRUFBUSxlQUFnQjRJLEdBQzVEMVMsS0FBS0gsS0FBS3dnQixZQUNkLEVBRUROLEVBQUFBLFVBQUFBLFdBQUFBLFNBQVdyTSxHQUNULElBQU1oQixFQUFlN1MsS0FBS3VnQixvQkFBb0IxTSxHQUM5QyxPQUFPN1QsS0FBS3pGLFFBQVEyWSxJQUFJLGtCQUFtQkwsR0FDeEMxUyxLQUFLSCxLQUFLd2dCLFlBQ2QsRUFDSCxDQUFDLENBdkNELDZ5RUNyQkEsaUJBR0EsVUFhQSxhQU1BLGFBRU1DLEVBQWdCLENBQ3BCM21CLFFBQVMsQ0FBRSxlQUFnQixxQkFFN0IsRUFFRSxTQUFZbUUsR0FDVitCLEtBQUsvQixLQUFPQSxDQUNiLEVBSlV2RixFQUFBQSxZQUFBQSxFQU1iLGtCQU1FLFdBQVlrQixHQUFaLE1BQ0VtZSxFQUFBQSxLQUFBQSxLQUFNMkksRUFBQUEsa0JBQWtCQyxVQUFRLFlBQ2hDak4sRUFBS2tOLFFBQVVobkIsRUFBS2duQixRQUNwQmxOLEVBQUtsUSxNQUFRNUosRUFBSzRKLEtBQ2xCa1EsRUFBS3RRLE1BQVF4SixFQUFLd0osTUFDbEJzUSxFQUFLa0IsV0FBYSxJQUFJdkssS0FBS3pRLEVBQUtnYixhQUNqQyxDQUNILE9BYjRCb0QsRUFBQUEsRUFBQUEsR0FhNUIsQ0FiQSxFQUE0QjZJLEdBQWZub0IsRUFBQUEsT0FBQUEsRUFlYixrQkFJRSxXQUFZa0IsR0FBWixNQUNFbWUsRUFBQUEsS0FBQUEsS0FBTTJJLEVBQUFBLGtCQUFrQkksYUFBVyxZQUNuQ3BOLEVBQUtrTixRQUFVaG5CLEVBQUtnbkIsUUFDcEJsTixFQUFLa0IsV0FBYSxJQUFJdkssS0FBS3pRLEVBQUtnYixhQUNqQyxDQUNILE9BVCtCb0QsRUFBQUEsRUFBQUEsR0FTL0IsQ0FUQSxFQUErQjZJLEdBQWxCbm9CLEVBQUFBLFVBQUFBLEVBV2Isa0JBS0UsV0FBWWtCLEdBQVosTUFDRW1lLEVBQUFBLEtBQUFBLEtBQU0ySSxFQUFBQSxrQkFBa0JLLGVBQWEsWUFDckNyTixFQUFLa04sUUFBVWhuQixFQUFLZ25CLFFBQ3BCbE4sRUFBS3NOLEtBQU9wbkIsRUFBS29uQixLQUNqQnROLEVBQUtrQixXQUFhLElBQUl2SyxLQUFLelEsRUFBS2diLGFBQ2pDLENBQ0gsT0FYaUNvRCxFQUFBQSxFQUFBQSxHQVdqQyxDQVhBLEVBQWlDNkksR0FBcEJub0IsRUFBQUEsWUFBQUEsRUFhYixrQkFLRSxXQUFZa0IsR0FBWixNQUNFbWUsRUFBQUEsS0FBQUEsS0FBTTJJLEVBQUFBLGtCQUFrQk8sYUFBVyxZQUNuQ3ZOLEVBQUtoWSxNQUFROUIsRUFBSzhCLE1BQ2xCZ1ksRUFBSy9TLE9BQVMvRyxFQUFLK0csT0FDbkIrUyxFQUFLZ0YsVUFBWSxJQUFJck8sS0FBS3pRLEVBQUs4ZSxZQUNoQyxDQUNILE9BWCtCVixFQUFBQSxFQUFBQSxHQVcvQixDQVhBLEVBQStCNkksR0FBbEJub0IsRUFBQUEsVUFBQUEsRUFhYixrQkFJRSxXQUFZNkIsR0FBWixNQUNFd2QsRUFBQUEsS0FBQUEsS0FBTXhkLElBQVEsWUFDZG1aLEVBQUtuWixRQUFVQSxFQUNmbVosRUFBS3dOLE9BQVMsSUFBSUMsSUFDbEJ6TixFQUFLd04sT0FBT0UsSUFBSSxVQUFXQyxHQUMzQjNOLEVBQUt3TixPQUFPRSxJQUFJLGFBQWNFLEdBQzlCNU4sRUFBS3dOLE9BQU9FLElBQUksZUFBZ0JHLEdBQ2hDN04sRUFBS3dOLE9BQU9FLElBQUksYUFBY0ksSUFDL0IsQ0E2SEgsT0F6SStDeEosRUFBQUEsRUFBQUEsR0FjbkN5SixFQUFBQSxVQUFBQSxVQUFWLFNBQ0VubUIsRUFDQTBZLEdBS0EsSUFBTXBhLEVBQU8sQ0FBQyxFQUtkLE9BSkFBLEVBQUt5YixNQUFRL1osRUFBUytYLEtBQUtnQyxNQUFNQyxLQUFJLFNBQUNDLEdBQVMsV0FBSXZCLEVBQU11QixFQUFLLElBRTlEM2IsRUFBS3VlLE1BQVFuWSxLQUFLb1ksZUFBZTljLEVBQVUsSUFBSyxXQUNoRDFCLEVBQUs0QixPQUFTRixFQUFTRSxPQUNoQjVCLENBQ1IsRUFFRDZuQixFQUFBQSxVQUFBQSxXQUFBQSxTQUNFN25CLEVBQ0FvYSxHQUtBLE9BQU8sSUFBSUEsRUFBTXBhLEVBQ2xCLEVBRU82bkIsRUFBQUEsVUFBQUEsZ0JBQVIsU0FDRXhYLEVBQ0FyUSxHQUVBLEdBQUlpSixNQUFNb0QsUUFBUXJNLEdBQ2hCLE1BQU0sSUFBSXdhLEVBQUFBLFFBQVMsQ0FDakI1WSxPQUFRLElBQ1JDLFdBQVksb0NBQ1o0WCxLQUFNLENBQ0ozUyxRQUFTLHlHQUlmLE9BQU9WLEtBQUt6RixRQUNUd2IsWUFBVyxhQUFRLEtBQU05TCxFQUFRLGNBQWVyUSxHQUNoRHVHLEtBQUtILEtBQUswaEIsZ0JBQ2QsRUFFT0QsRUFBQUEsVUFBQUEsVUFBUixTQUFrQnhqQixHQUNoQixJQUFLK0IsS0FBS2toQixPQUFPak8sSUFBSWhWLEdBQ25CLE1BQU0sSUFBSW1XLEVBQUFBLFFBQVMsQ0FDakI1WSxPQUFRLElBQ1JDLFdBQVkscUJBQ1o0WCxLQUFNLENBQUUzUyxRQUFTLDRFQUd0QixFQUVPK2dCLEVBQUFBLFVBQUFBLGdCQUFSLFNBQXdCbm1CLEdBQ3RCLE1BQU8sQ0FDTG9GLFFBQVNwRixFQUFTK1gsS0FBSzNTLFFBQ3ZCekMsS0FBTTNDLEVBQVMrWCxLQUFLcFYsTUFBUSxHQUM1QnZDLE1BQU9KLEVBQVMrWCxLQUFLM1gsT0FBUyxHQUM5QkYsT0FBUUYsRUFBU0UsT0FFcEIsRUFFS2ltQixFQUFBQSxVQUFBQSxLQUFOLFNBQ0V4WCxFQUNBaE0sRUFDQTRWLDRFQUlBLE9BRkE3VCxLQUFLMmhCLFVBQVUxakIsR0FDVDJqQixFQUFRNWhCLEtBQUtraEIsT0FBT2hPLElBQUlqVixHQUM5QixHQUFPK0IsS0FBS3NZLHNCQUFxQixhQUFRLEtBQU1yTyxFQUFRaE0sR0FBTzRWLEVBQU8rTixTQUN0RSxFQUVESCxFQUFBQSxVQUFBQSxJQUFBQSxTQUNFeFgsRUFDQWhNLEVBQ0EyaUIsR0FIRixXQUtFNWdCLEtBQUsyaEIsVUFBVTFqQixHQUVmLElBQU0yakIsRUFBUTVoQixLQUFLa2hCLE9BQU9oTyxJQUFJalYsR0FDOUIsT0FBTytCLEtBQUt6RixRQUNUMlksS0FBSSxhQUFRLEtBQU1qSixFQUFRaE0sRUFBTXBELG1CQUFtQitsQixLQUNuRHpnQixNQUFLLFNBQUM3RSxHQUFrQyxTQUFLdW1CLFdBQXlCdm1CLEVBQVMrWCxLQUFNdU8sRUFBTSxHQUMvRixFQUVESCxFQUFBQSxVQUFBQSxPQUFBQSxTQUNFeFgsRUFDQWhNLEVBQ0FyRSxHQUlBLElBQUlrb0IsRUFDSixPQUhBOWhCLEtBQUsyaEIsVUFBVTFqQixHQUdGLGVBQVRBLEVBQ0srQixLQUFLK2hCLGdCQUFnQjlYLEVBQVFyUSxJQU1wQ2tvQixFQUhHamYsTUFBTW9ELFFBQVFyTSxHQUdOLEVBQUgsR0FBT0EsR0FBSSxHQUZSLENBQUNBLEdBS1BvRyxLQUFLekYsUUFDVHNoQixNQUFLLGFBQVEsS0FBTTVSLEVBQVFoTSxHQUFPdUssS0FBS0ksVUFBVWtaLEdBQVdyQixHQUM1RHRnQixLQUFLSCxLQUFLMGhCLGlCQUNkLEVBRURELEVBQUFBLFVBQUFBLFFBQUFBLFNBQ0V4WCxFQUNBaE0sRUFDQTJpQixHQUdBLE9BREE1Z0IsS0FBSzJoQixVQUFVMWpCLEdBQ1IrQixLQUFLekYsUUFDVDBiLFFBQU8sYUFBUSxLQUFNaE0sRUFBUWhNLEVBQU1wRCxtQkFBbUIrbEIsS0FDdER6Z0IsTUFBSyxTQUFDN0UsR0FBeUMsTUFBQyxDQUMvQ29GLFFBQVNwRixFQUFTK1gsS0FBSzNTLFFBQ3ZCaEYsTUFBT0osRUFBUytYLEtBQUszWCxPQUFTLEdBQzlCa2xCLFFBQVN0bEIsRUFBUytYLEtBQUt1TixTQUFXLEdBQ2xDcGxCLE9BQVFGLEVBQVNFLE9BQ2pCLEdBQ0wsRUFDSCxDQXpJQSxFQUErQ2dkLEVBQUFBLHFCQTJJL0MvZixFQUFPQyxRQUFVK29CLG05Q0M3TmpCLGlCQUlFLFdBQVlsbkIsRUFBa0IwVyxHQUM1QmpSLEtBQUt6RixRQUFVQSxFQUNmeUYsS0FBS2dpQixtQkFBcUIvUSxDQUMzQixDQU9ILE9BTFFnUixFQUFBQSxVQUFBQSxJQUFOLFNBQVVyQixtR0FFMkIsT0FEN0IvTSxFQUF5QixDQUFFK00sUUFBTyxHQUNMLEdBQU01Z0IsS0FBS3pGLFFBQVEyWSxJQUFJLHVCQUF3QlcsV0FDbEYsU0FEbUNKLEVBQUFBLE9BQ3JCSixZQUNmLEVBQ0gsQ0FBQyxDQWRELHVMQ0pBLGlCQVdBLEVBSUUsU0FBWXRPLEVBQVk3SixHQUN0QjhFLEtBQUsrRSxHQUFLQSxFQUNWL0UsS0FBSzlFLElBQU1BLENBQ1osRUFHSCxhQUdFLFdBQVlYLEdBQ1Z5RixLQUFLekYsUUFBVUEsQ0FDaEIsQ0F3REgsT0F0REUybkIsRUFBQUEsVUFBQUEsa0JBQUFBLFNBQWtCNW1CLEdBQ2hCLE9BQU9BLEVBQVMrWCxLQUFLaEMsUUFDdEIsRUFFRDZRLEVBQUFBLFVBQUFBLG9CQUFBQSxTQUFvQm5kLEdBQ2xCLE9BQU8sU0FBVXpKLFNBQ1Q2bUIsRUFBZ0MsUUFBZCxFQUFBN21CLGFBQVEsRUFBUkEsRUFBVStYLFlBQUlJLElBQUFBLE9BQUEsRUFBQUEsRUFBRTJPLFFBQ3BDbG5CLEVBQU1pbkIsYUFBZSxFQUFmQSxFQUFpQmpuQixJQU0zQixPQUxLQSxJQUNIQSxHQUFNaW5CLGFBQWUsRUFBZkEsRUFBaUJFLE9BQVFGLEVBQWdCRSxLQUFLOWhCLE9BQ2hENGhCLEVBQWdCRSxLQUFLLFFBQ3JCamxCLEdBRUMsSUFBSWtsQixFQUFRdmQsRUFBSTdKLEVBQ3hCLENBQ0YsRUFFRGduQixFQUFBQSxVQUFBQSxrQkFBQUEsU0FBa0I1bUIsR0FFaEIsTUFBTyxDQUFFa0ksS0FBTWxJLEVBQVMrWCxLQUFLN1AsS0FBTTlDLFFBQVNwRixFQUFTK1gsS0FBSzNTLFFBQzNELEVBRUR3aEIsRUFBQUEsVUFBQUEsS0FBQUEsU0FBS2pZLEVBQWdCNEosR0FDbkIsT0FBTzdULEtBQUt6RixRQUFRMlksS0FBSSxhQUFRLGNBQWVqSixFQUFRLFlBQWE0SixHQUNqRTFULEtBQUtILEtBQUt1aUIsa0JBQ2QsRUFFREwsRUFBQUEsVUFBQUEsSUFBQUEsU0FBSWpZLEVBQWdCbEYsR0FDbEIsT0FBTy9FLEtBQUt6RixRQUFRMlksS0FBSSxhQUFRLGNBQWVqSixFQUFRLFdBQVlsRixJQUNoRTVFLEtBQUtILEtBQUt3aUIsb0JBQW9CemQsR0FDbEMsRUFFRG1kLEVBQUFBLFVBQUFBLE9BQUFBLFNBQU9qWSxFQUNMbEYsRUFDQTdKLEVBQ0EyUCxHQUNBLFlBREEsSUFBQUEsSUFBQUEsR0FBQUEsR0FDSUEsRUFDSzdLLEtBQUt6RixRQUFRK2IsV0FBVSxhQUFRLGNBQWVyTSxFQUFRLFdBQVlsRixFQUFJLFFBQVMsQ0FBRTdKLElBQUcsSUFDeEZpRixLQUFLSCxLQUFLeWlCLG1CQUdSemlCLEtBQUt6RixRQUFRd2IsWUFBVyxhQUFRLGNBQWU5TCxFQUFRLFlBQWEsQ0FBRWxGLEdBQUUsRUFBRTdKLElBQUcsSUFDakZpRixLQUFLSCxLQUFLd2lCLG9CQUFvQnpkLEdBQ2xDLEVBRURtZCxFQUFBQSxVQUFBQSxPQUFBQSxTQUFPalksRUFBZ0JsRixFQUFZN0osR0FDakMsT0FBTzhFLEtBQUt6RixRQUFRK2IsV0FBVSxhQUFRLGNBQWVyTSxFQUFRLFdBQVlsRixHQUFLLENBQUU3SixJQUFHLElBQ2hGaUYsS0FBS0gsS0FBS3dpQixvQkFBb0J6ZCxHQUNsQyxFQUVEbWQsRUFBQUEsVUFBQUEsUUFBQUEsU0FBUWpZLEVBQWdCbEYsR0FDdEIsT0FBTy9FLEtBQUt6RixRQUFRMGIsUUFBTyxhQUFRLGNBQWVoTSxFQUFRLFdBQVlsRixJQUNuRTVFLEtBQUtILEtBQUt3aUIsb0JBQW9CemQsR0FDbEMsRUFDSCxDQUFDLENBN0RELHFDQ3JCQSxpQkFDRSxTQUFTMmQsR0FHVixJQUFJQyxFQUE0Q2pxQixFQVE1Q2txQixHQUwwQ25xQixHQUM3Q0EsRUFBT0MsUUFJMEIsaUJBQVYsRUFBQW1xQixHQUFzQixFQUFBQSxHQUMxQ0QsRUFBV0UsU0FBV0YsR0FBY0EsRUFBVzdXLE9BTW5ELElBQUlnWCxFQUF3QixTQUFTcmlCLEdBQ3BDVixLQUFLVSxRQUFVQSxDQUNoQixHQUNBcWlCLEVBQXNCL2pCLFVBQVksSUFBSXlFLE9BQ05wQyxLQUFPLHdCQUV2QyxJQUFJK0IsRUFBUSxTQUFTMUMsR0FHcEIsTUFBTSxJQUFJcWlCLEVBQXNCcmlCLEVBQ2pDLEVBRUlzaUIsRUFBUSxtRUFFUkMsRUFBeUIsZUFzR3pCaEUsRUFBUyxDQUNaLE9BM0RZLFNBQVNpRSxHQUNyQkEsRUFBUTdTLE9BQU82UyxHQUNYLGFBQWFyWSxLQUFLcVksSUFHckI5ZixFQUNDLDZFQWNGLElBVkEsSUFHSW1NLEVBQ0FDLEVBQ0F0TyxFQUNBeUcsRUFOQXdiLEVBQVVELEVBQU0zaUIsT0FBUyxFQUN6QjZpQixFQUFTLEdBQ1RoVCxHQUFZLEVBTVo3UCxFQUFTMmlCLEVBQU0zaUIsT0FBUzRpQixJQUVuQi9TLEVBQVc3UCxHQUVuQmdQLEVBQUkyVCxFQUFNdlQsV0FBV1MsSUFBYSxHQUNsQ1osRUFBSTBULEVBQU12VCxhQUFhUyxJQUFhLEVBQ3BDbFAsRUFBSWdpQixFQUFNdlQsYUFBYVMsR0FJdkJnVCxHQUNDSixFQUFNbFgsUUFKUG5FLEVBQVM0SCxFQUFJQyxFQUFJdE8sSUFJTyxHQUFLLElBQzVCOGhCLEVBQU1sWCxPQUFPbkUsR0FBVSxHQUFLLElBQzVCcWIsRUFBTWxYLE9BQU9uRSxHQUFVLEVBQUksSUFDM0JxYixFQUFNbFgsT0FBZ0IsR0FBVG5FLEdBdUJmLE9BbkJlLEdBQVh3YixHQUNINVQsRUFBSTJULEVBQU12VCxXQUFXUyxJQUFhLEVBQ2xDWixFQUFJMFQsRUFBTXZULGFBQWFTLEdBRXZCZ1QsR0FDQ0osRUFBTWxYLFFBRlBuRSxFQUFTNEgsRUFBSUMsSUFFVyxJQUN2QndULEVBQU1sWCxPQUFRbkUsR0FBVSxFQUFLLElBQzdCcWIsRUFBTWxYLE9BQVFuRSxHQUFVLEVBQUssSUFDN0IsS0FFb0IsR0FBWHdiLElBQ1Z4YixFQUFTdWIsRUFBTXZULFdBQVdTLEdBQzFCZ1QsR0FDQ0osRUFBTWxYLE9BQU9uRSxHQUFVLEdBQ3ZCcWIsRUFBTWxYLE9BQVFuRSxHQUFVLEVBQUssSUFDN0IsTUFJS3liLENBQ1IsRUFJQyxPQWxHWSxTQUFTRixHQUdyQixJQUFJM2lCLEdBRkoyaUIsRUFBUTdTLE9BQU82UyxHQUNiN1osUUFBUTRaLEVBQXdCLEtBQ2YxaUIsT0FDZkEsRUFBUyxHQUFLLElBRWpCQSxHQURBMmlCLEVBQVFBLEVBQU03WixRQUFRLE9BQVEsS0FDZjlJLFNBR2ZBLEVBQVMsR0FBSyxHQUVkLGlCQUFpQnNLLEtBQUtxWSxLQUV0QjlmLEVBQ0MseUVBUUYsSUFMQSxJQUNJaWdCLEVBQ0ExYixFQUZBMmIsRUFBYSxFQUdiRixFQUFTLEdBQ1RoVCxHQUFZLElBQ1BBLEVBQVc3UCxHQUNuQm9ILEVBQVNxYixFQUFNM21CLFFBQVE2bUIsRUFBTXBYLE9BQU9zRSxJQUNwQ2lULEVBQWFDLEVBQWEsRUFBaUIsR0FBYkQsRUFBa0IxYixFQUFTQSxFQUVyRDJiLElBQWUsSUFFbEJGLEdBQVUvUyxPQUFPa1QsYUFDaEIsSUFBT0YsS0FBZ0IsRUFBSUMsRUFBYSxLQUkzQyxPQUFPRixDQUNSLEVBaUVDLFFBQVcsY0FZVixLQUZELGFBQ0MsT0FBT25FLENBQ1AsK0JBYUgsQ0FsS0MseUJDREQsWUFJb0IsV0FFbEIsU0FBU3VFLEVBQVdDLEdBQ2xCLElBQUlDLEVBQWMsR0FDbEIsR0FBd0IsSUFBcEJELEVBQVNsakIsT0FBZ0IsTUFBTyxHQUVwQyxHQUEyQixpQkFBaEJrakIsRUFBUyxHQUNsQixNQUFNLElBQUkzakIsVUFBVSxrQ0FBb0MyakIsRUFBUyxJQUluRSxHQUFJQSxFQUFTLEdBQUdqWixNQUFNLGlCQUFtQmlaLEVBQVNsakIsT0FBUyxFQUFHLENBQzVELElBQUlvakIsRUFBUUYsRUFBU3pnQixRQUNyQnlnQixFQUFTLEdBQUtFLEVBQVFGLEVBQVMsRUFDakMsQ0FHSUEsRUFBUyxHQUFHalosTUFBTSxnQkFDcEJpWixFQUFTLEdBQUtBLEVBQVMsR0FBR3BhLFFBQVEsZ0JBQWlCLFVBRW5Eb2EsRUFBUyxHQUFLQSxFQUFTLEdBQUdwYSxRQUFRLGdCQUFpQixTQUdyRCxJQUFLLElBQUloSixFQUFJLEVBQUdBLEVBQUlvakIsRUFBU2xqQixPQUFRRixJQUFLLENBQ3hDLElBQUl1akIsRUFBWUgsRUFBU3BqQixHQUV6QixHQUF5QixpQkFBZHVqQixFQUNULE1BQU0sSUFBSTlqQixVQUFVLGtDQUFvQzhqQixHQUd4QyxLQUFkQSxJQUVBdmpCLEVBQUksSUFFTnVqQixFQUFZQSxFQUFVdmEsUUFBUSxTQUFVLEtBSXhDdWEsRUFGRXZqQixFQUFJb2pCLEVBQVNsakIsT0FBUyxFQUVacWpCLEVBQVV2YSxRQUFRLFNBQVUsSUFHNUJ1YSxFQUFVdmEsUUFBUSxTQUFVLEtBRzFDcWEsRUFBWTVpQixLQUFLOGlCLEdBRW5CLENBRUEsSUFBSW5WLEVBQU1pVixFQUFZL1osS0FBSyxLQU92QkosR0FISmtGLEVBQU1BLEVBQUlwRixRQUFRLGtCQUFtQixPQUdyQmdELE1BQU0sS0FHdEIsT0FGQW9DLEVBQU1sRixFQUFNdkcsU0FBV3VHLEVBQU1oSixPQUFTLEVBQUksSUFBSyxJQUFNZ0osRUFBTUksS0FBSyxJQUdsRSxDQUVBLE9BQU8sV0FTTCxPQUFPNlosRUFOcUIsaUJBQWpCcmEsVUFBVSxHQUNYQSxVQUFVLEdBRVYsR0FBR2pELE1BQU0vRSxLQUFLZ0ksV0FJMUIsQ0FFRixFQTVFdUMxUSxFQUFPQyxRQUFTRCxFQUFPQyxRQUFVbXJCLFNBQ0EsMEJBQWpCLEtBQWlCLG9DQ0RwRUMsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCNW1CLElBQWpCNm1CLEVBQ0gsT0FBT0EsRUFBYXZyQixRQUdyQixJQUFJRCxFQUFTcXJCLEVBQXlCRSxHQUFZLENBQ2pEamYsR0FBSWlmLEVBQ0pFLFFBQVEsRUFDUnhyQixRQUFTLENBQUMsR0FVWCxPQU5BeXJCLEVBQW9CSCxHQUFVN2lCLEtBQUsxSSxFQUFPQyxRQUFTRCxFQUFRQSxFQUFPQyxRQUFTcXJCLEdBRzNFdHJCLEVBQU95ckIsUUFBUyxFQUdUenJCLEVBQU9DLE9BQ2YsUUN6QkFxckIsRUFBb0JsQixFQUFJLFdBQ3ZCLEdBQTBCLGlCQUFmdUIsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPcGtCLE1BQVEsSUFBSXFrQixTQUFTLGNBQWIsRUFHaEIsQ0FGRSxNQUFPMWIsR0FDUixHQUFzQixpQkFBWG9ELE9BQXFCLE9BQU9BLE1BQ3hDLENBQ0EsQ0FQdUIsR0NBeEJnWSxFQUFvQk8sSUFBTzdyQixJQUMxQkEsRUFBTzhyQixNQUFRLEdBQ1Y5ckIsRUFBTytyQixXQUFVL3JCLEVBQU8rckIsU0FBVyxJQUNqQy9yQixHQ0FrQnNyQixFQUFvQiIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvY2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9kb21haW5zLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvZG9tYWluc0NyZWRlbnRpYWxzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvZG9tYWluc1RhZ3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9kb21haW5zVGVtcGxhdGVzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9mb3JtRGF0YUJ1aWxkZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL1N1cHByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2lwLXBvb2xzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaXBzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvbGlzdHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9tYWlsTGlzdE1lbWJlcnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9tZXNzYWdlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL211bHRpcGxlVmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3JlcXVlc3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9yb3V0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9zdGF0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3N1cHByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3ZhbGlkYXRlLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvd2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL3VybC1qb2luL2xpYi91cmwtam9pbi5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0LCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScgXS5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5heGlvcy50b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9saWIvY29yZS9BeGlvc0Vycm9yJyk7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdiZWZvcmVSZWRpcmVjdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zcG9ydCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBzQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdjYW5jZWxUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3NvY2tldFBhdGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZUVuY29kaW5nJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndmFsaWRhdGVTdGF0dXMnOiBtZXJnZURpcmVjdEtleXNcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbmZpZzEpLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICB2YXIgY29uZmlnVmFsdWUgPSBtZXJnZShwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG5cbiAgICB2YXIgaXNGaWxlTGlzdDtcblxuICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IChpc09iamVjdFBheWxvYWQgJiYgY29udGVudFR5cGUgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgIHZhciBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcbiAgICAgIHJldHVybiB0b0Zvcm1EYXRhKGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcmVxdWlyZSgnLi9lbnYvRm9ybURhdGEnKVxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBcInZlcnNpb25cIjogXCIwLjI3LjJcIlxufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxubW9kdWxlLmV4cG9ydHMgPSBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICB2YXIgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IEZvcm1EYXRhKCk7XG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkKGRhdGEsIHBhcmVudEtleSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGRhdGEpIHx8IHV0aWxzLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKGRhdGEpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXJlbnRLZXkpO1xuICAgICAgfVxuXG4gICAgICBzdGFjay5wdXNoKGRhdGEpO1xuXG4gICAgICB1dGlscy5mb3JFYWNoKGRhdGEsIGZ1bmN0aW9uIGVhY2godmFsdWUsIGtleSkge1xuICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG4gICAgICAgIHZhciBmdWxsS2V5ID0gcGFyZW50S2V5ID8gcGFyZW50S2V5ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICB2YXIgYXJyO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiAhcGFyZW50S2V5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICAgICF1dGlscy5pc1VuZGVmaW5lZChlbCkgJiYgZm9ybURhdGEuYXBwZW5kKGZ1bGxLZXksIGNvbnZlcnRWYWx1ZShlbCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGQodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQocGFyZW50S2V5LCBjb252ZXJ0VmFsdWUoZGF0YSkpO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBraW5kT2YgPSAoZnVuY3Rpb24oY2FjaGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5mdW5jdGlvbiBraW5kT2ZUZXN0KHR5cGUpIHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzS2luZE9mKHRoaW5nKSB7XG4gICAgcmV0dXJuIGtpbmRPZih0aGluZykgPT09IHR5cGU7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykge1xuICB2YXIgcGF0dGVybiA9ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSBwYXR0ZXJuIHx8XG4gICAgKGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09IHBhdHRlcm4pXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gdG9GbGF0T2JqZWN0KHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyKSB7XG4gIHZhciBwcm9wcztcbiAgdmFyIGk7XG4gIHZhciBwcm9wO1xuICB2YXIgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKlxuICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgdmFyIGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIHZhciBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoaXNVbmRlZmluZWQoaSkpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIgaXNUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKFR5cGVkQXJyYXkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT00sXG4gIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZjoga2luZE9mLFxuICBraW5kT2ZUZXN0OiBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aDogZW5kc1dpdGgsXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0OiBpc0ZpbGVMaXN0XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IE9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL09wdGlvbnMnO1xuaW1wb3J0IHsgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvUmVxdWVzdE9wdGlvbnMnO1xuXG5pbXBvcnQgRG9tYWluQ2xpZW50IGZyb20gJy4vZG9tYWlucyc7XG5pbXBvcnQgRXZlbnRDbGllbnQgZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IFN0YXRzQ2xpZW50IGZyb20gJy4vc3RhdHMnO1xuaW1wb3J0IFN1cHByZXNzaW9uQ2xpZW50IGZyb20gJy4vc3VwcHJlc3Npb25zJztcbmltcG9ydCBXZWJob29rQ2xpZW50IGZyb20gJy4vd2ViaG9va3MnO1xuaW1wb3J0IE1lc3NhZ2VzQ2xpZW50IGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IFJvdXRlc0NsaWVudCBmcm9tICcuL3JvdXRlcyc7XG5pbXBvcnQgVmFsaWRhdGVDbGllbnQgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgSXBzQ2xpZW50IGZyb20gJy4vaXBzJztcbmltcG9ydCBJcFBvb2xzQ2xpZW50IGZyb20gJy4vaXAtcG9vbHMnO1xuaW1wb3J0IExpc3RzQ2xpZW50IGZyb20gJy4vbGlzdHMnO1xuaW1wb3J0IE1haWxMaXN0c01lbWJlcnMgZnJvbSAnLi9tYWlsTGlzdE1lbWJlcnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgZnJvbSAnLi9tdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IERvbWFpblRlbXBsYXRlc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5pbXBvcnQgeyBJTWFpbGd1bkNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9JTWFpbGd1bkNsaWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudCBpbXBsZW1lbnRzIElNYWlsZ3VuQ2xpZW50IHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIHB1YmxpYyBkb21haW5zO1xuICBwdWJsaWMgd2ViaG9va3M7XG4gIHB1YmxpYyBldmVudHM7XG4gIHB1YmxpYyBzdGF0cztcbiAgcHVibGljIHN1cHByZXNzaW9ucztcbiAgcHVibGljIG1lc3NhZ2VzO1xuICBwdWJsaWMgcm91dGVzO1xuICBwdWJsaWMgdmFsaWRhdGU7XG4gIHB1YmxpYyBpcHM7XG4gIHB1YmxpYyBpcF9wb29scztcbiAgcHVibGljIGxpc3RzO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgY29uc3QgY29uZmlnOiBSZXF1ZXN0T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9IGFzIFJlcXVlc3RPcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICBjb25maWcudXJsID0gJ2h0dHBzOi8vYXBpLm1haWxndW4ubmV0JztcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy51c2VybmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJ1c2VybmFtZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcImtleVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbmZpZywgZm9ybURhdGEpO1xuICAgIGNvbnN0IG1haWxMaXN0c01lbWJlcnMgPSBuZXcgTWFpbExpc3RzTWVtYmVycyh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50ID0gbmV3IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGVtcGxhdGVzQ2xpZW50ID0gbmV3IERvbWFpblRlbXBsYXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRhZ3NDbGllbnQgPSBuZXcgRG9tYWluVGFnc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCA9IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcblxuICAgIHRoaXMuZG9tYWlucyA9IG5ldyBEb21haW5DbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICBkb21haW5DcmVkZW50aWFsc0NsaWVudCxcbiAgICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgICAgIGRvbWFpblRhZ3NDbGllbnRcbiAgICApO1xuICAgIHRoaXMud2ViaG9va3MgPSBuZXcgV2ViaG9va0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50Q2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBTdGF0c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3VwcHJlc3Npb25zID0gbmV3IFN1cHByZXNzaW9uQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMucm91dGVzID0gbmV3IFJvdXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBzID0gbmV3IElwc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBfcG9vbHMgPSBuZXcgSXBQb29sc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubGlzdHMgPSBuZXcgTGlzdHNDbGllbnQodGhpcy5yZXF1ZXN0LCBtYWlsTGlzdHNNZW1iZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gbmV3IFZhbGlkYXRlQ2xpZW50KHRoaXMucmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHtcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgUXVlcnlXaXRoUGFnZSxcbiAgUmVzcG9uc2VXaXRoUGFnaW5nLFxuICBVcGRhdGVkVXJsQW5kUXVlcnlcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IEJvdW5jZURhdGEsIElCb3VuY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9Cb3VuY2UnO1xuaW1wb3J0IHsgQ29tcGxhaW50RGF0YSwgSUNvbXBsYWludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL0NvbXBsYWludCc7XG5pbXBvcnQgeyBJVW5zdWJzY3JpYmUsIFVuc3Vic2NyaWJlRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL1Vuc3Vic2NyaWJlJztcbmltcG9ydCB7IElXaGl0ZUxpc3QsIFdoaXRlTGlzdERhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9XaGl0ZUxpc3QnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIE5hdmlnYXRpb25UaHJ1UGFnZXMgPFQ+IHtcbiAgcmVxdWVzdD86IFJlcXVlc3Q7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q/OiBSZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZShcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhZ2VVcmw6IHN0cmluZyxcbiAgICB1cmxTZXBhcmF0b3I6IHN0cmluZyxcbiAgICBpdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuXG4gICAgY29uc3QgcGFnZVZhbHVlID0gcGFnZVVybCAmJiB0eXBlb2YgcGFnZVVybCA9PT0gJ3N0cmluZycgPyBwYWdlVXJsLnNwbGl0KHVybFNlcGFyYXRvcikucG9wKCkgfHwgJycgOiAnJztcbiAgICBsZXQgaXRlcmF0b3JQb3NpdGlvbiA9IG51bGw7XG4gICAgaWYgKGl0ZXJhdG9yTmFtZSkge1xuICAgICAgaXRlcmF0b3JQb3NpdGlvbiA9IHNlYXJjaFBhcmFtcy5oYXMoaXRlcmF0b3JOYW1lKVxuICAgICAgICA/IHNlYXJjaFBhcmFtcy5nZXQoaXRlcmF0b3JOYW1lKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogdXJsU2VwYXJhdG9yID09PSAnPycgPyBgPyR7cGFnZVZhbHVlfWAgOiBwYWdlVmFsdWUsXG4gICAgICBpdGVyYXRvclBvc2l0aW9uLFxuICAgICAgdXJsOiBwYWdlVXJsXG4gICAgfSBhcyBQYXJzZWRQYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZUxpbmtzKFxuICAgIHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lPzogc3RyaW5nXG4gICk6IFBhcnNlZFBhZ2VzTGlzdCB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBbaWQsIHBhZ2VVcmxdOiBbIGlkOiBzdHJpbmcsIHBhZ2VVcmw6IHN0cmluZ10pID0+IHtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMucGFyc2VQYWdlKGlkLCBwYWdlVXJsLCB1cmxTZXBhcmF0b3IsIGl0ZXJhdG9yTmFtZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICkgYXMgdW5rbm93biBhcyBQYXJzZWRQYWdlc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybDogc3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UpOiBVcGRhdGVkVXJsQW5kUXVlcnkge1xuICAgIGxldCB1cmwgPSBjbGllbnRVcmw7XG4gICAgY29uc3QgcXVlcnlDb3B5ID0geyAuLi5xdWVyeSB9O1xuICAgIGlmIChxdWVyeUNvcHkucGFnZSkge1xuICAgICAgdXJsID0gdXJsam9pbihjbGllbnRVcmwsIHF1ZXJ5Q29weS5wYWdlKTtcbiAgICAgIGRlbGV0ZSBxdWVyeUNvcHkucGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybCxcbiAgICAgIHVwZGF0ZWRRdWVyeTogcXVlcnlDb3B5XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXF1ZXN0TGlzdFdpdGhQYWdlcyhjbGllbnRVcmw6c3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgeyB1cmwsIHVwZGF0ZWRRdWVyeSB9ID0gdGhpcy51cGRhdGVVcmxBbmRRdWVyeShjbGllbnRVcmwsIHF1ZXJ5KTtcbiAgICBpZiAodGhpcy5yZXF1ZXN0KSB7XG4gICAgICBjb25zdCByZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh1cmwsIHVwZGF0ZWRRdWVyeSk7XG4gICAgICAvLyBNb2RlbCBoZXJlIGlzIHVzdWFsbHkgdW5kZWZpbmVkIGV4Y2VwdCBmb3IgU3VwcHJlc3Npb24gQ2xpZW50XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUxpc3QocmVzcG9uc2UsIE1vZGVsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgIHN0YXR1czogNTAwLFxuICAgICAgc3RhdHVzVGV4dDogJ1JlcXVlc3QgcHJvcGVydHkgaXMgZW1wdHknLFxuICAgICAgYm9keTogeyBtZXNzYWdlOiAnJyB9XG4gICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBhcnNlTGlzdChyZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nLCBNb2RlbD86IHtcbiAgICBuZXcoZGF0YTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFQ7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIERvbWFpblJlc3BvbnNlRGF0YSxcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluU2hvcnREYXRhLFxuICBETlNSZWNvcmQsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgTWVzc2FnZVJlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBVcGRhdGVkT3BlblRyYWNraW5nXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UcmFja2luZyc7XG5pbXBvcnQgeyBJRG9tYWluQ3JlZGVudGlhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCB7IElEb21haW5UYWdzQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBEb21haW5TaG9ydERhdGEsIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCwgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbCkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudDogRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgIGRvbWFpblRhZ3NDbGllbnQ6IERvbWFpblRhZ3NDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZShyZXNwb25zZTogRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpIDogTWVzc2FnZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEb21haW5MaXN0KHJlc3BvbnNlOiBEb21haW5MaXN0UmVzcG9uc2VEYXRhKTogRG9tYWluW10ge1xuICAgIGlmIChyZXNwb25zZS5ib2R5ICYmIHJlc3BvbnNlLmJvZHkuaXRlbXMpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gbmV3IERvbWFpbihpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogRG9tYWluIHtcbiAgICByZXR1cm4gbmV3IERvbWFpbihcbiAgICAgIHJlc3BvbnNlLmJvZHkuZG9tYWluLFxuICAgICAgcmVzcG9uc2UuYm9keS5yZWNlaXZpbmdfZG5zX3JlY29yZHMsXG4gICAgICByZXNwb25zZS5ib2R5LnNlbmRpbmdfZG5zX3JlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6IERvbWFpblRyYWNraW5nRGF0YSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkudHJhY2tpbmc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlOiBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6VXBkYXRlZE9wZW5UcmFja2luZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogRG9tYWluc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5bXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvZG9tYWlucycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlRG9tYWluTGlzdChyZXMgYXMgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBEb21haW5JbmZvKSA6IFByb21pc2U8RG9tYWluPiB7XG4gICAgY29uc3QgcG9zdE9iaiA9IHsgLi4uZGF0YSB9O1xuICAgIGlmICgnZm9yY2VfZGtpbV9hdXRob3JpdHknIGluIHBvc3RPYmogJiYgdHlwZW9mIHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkgPT09ICdib29sZWFuJykge1xuICAgICAgcG9zdE9iai5mb3JjZV9ka2ltX2F1dGhvcml0eSA9IHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkudG9TdHJpbmcoKSA9PT0gJ3RydWUnID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92My9kb21haW5zJywgcG9zdE9iailcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgdmVyaWZ5KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxEb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L3ZlcmlmeWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2UocmVzIGFzIERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpXG4gICAgICAudGhlbigocmVzOkNvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKSA9PiByZXMuYm9keS5jb25uZWN0aW9uIGFzIENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBDb25uZWN0aW9uU2V0dGluZ3MpOiBQcm9taXNlPFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcylcbiAgICAgIC50aGVuKChyZXM6VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcykgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICAvLyBUcmFja2luZ1xuXG4gIGdldFRyYWNraW5nKGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluVHJhY2tpbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VUcmFja2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICBpZiAodHlwZW9mIGRhdGE/LmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoeyBzdGF0dXM6IDQwMCwgc3RhdHVzVGV4dDogJ1JlY2VpdmVkIGJvb2xlYW4gdmFsdWUgZm9yIGFjdGl2ZSBwcm9wZXJ0eScsIGJvZHk6IHsgbWVzc2FnZTogJ1Byb3BlcnR5IFwiYWN0aXZlXCIgbXVzdCBjb250YWluIHN0cmluZyB2YWx1ZS4nIH0gfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJywgdHlwZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVHJhY2tpbmdVcGRhdGUocmVzIGFzIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpKTtcbiAgfVxuXG4gIC8vIElQc1xuXG4gIGdldElwcyhkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBBUElSZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHk/Lml0ZW1zKTtcbiAgfVxuXG4gIGFzc2lnbklwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IGlwIH0pO1xuICB9XG5cbiAgZGVsZXRlSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCBpcCkpO1xuICB9XG5cbiAgbGlua0lwUG9vbChkb21haW46IHN0cmluZywgcG9vbF9pZDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQgfSk7XG4gIH1cblxuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnVG9vIG11Y2ggZGF0YSBmb3IgcmVwbGFjZW1lbnQnLFxuICAgICAgICAgIGJvZHk6IHsgbWVzc2FnZTogJ1BsZWFzZSBzcGVjaWZ5IGVpdGhlciBwb29sX2lkIG9yIGlwIChub3QgYm90aCknIH1cbiAgICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICB1cGRhdGVES0lNU2VsZWN0b3IoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1TZWxlY3RvckluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9zZWxlY3RvcmAsIHt9LCB7IHF1ZXJ5OiBgZGtpbV9zZWxlY3Rvcj0ke2RhdGEuZGtpbVNlbGVjdG9yfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVXZWJQcmVmaXgoZG9tYWluOiBzdHJpbmcsIGRhdGE6IFdlYlByZWZpeEluZm8pOiBQcm9taXNlPFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vd2ViX3ByZWZpeGAsIHt9LCB7IHF1ZXJ5OiBgd2ViX3ByZWZpeD0ke2RhdGEud2ViUHJlZml4fWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHMsXG4gIERvbWFpbkNyZWRlbnRpYWxzTGlzdCxcbiAgRG9tYWluQ3JlZGVudGlhbHNRdWVyeSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEsXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0LFxuICBJRG9tYWluQ3JlZGVudGlhbHMsXG4gIFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DcmVkZW50aWFsc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5DcmVkZW50aWFscyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9kb21haW5zLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGFcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICB0b3RhbENvdW50OiByZXNwb25zZS5ib2R5LnRvdGFsX2NvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZVJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEZWxldGVkUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6RGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgc3BlYzogcmVzcG9uc2UuYm9keS5zcGVjXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkNyZWRlbnRpYWxzUXVlcnkpOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy9jcmVkZW50aWFscycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QocmVzIGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5DcmVkZW50aWFsc1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFsc2AsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nLFxuICAgIGRhdGE6IFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURlbGV0ZWRSZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSxcbiAgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdzSXRlbSxcbiAgRG9tYWluVGFnc0l0ZW1JbmZvLFxuICBEb21haW5UYWdzTGlzdCxcbiAgRG9tYWluVGFnc01lc3NhZ2VSZXMsXG4gIERvbWFpblRhZ3NRdWVyeSxcbiAgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5LFxuICBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ1N0YXRpc3RpY0l0ZW0sXG4gIERvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCxcbiAgSURvbWFpblRhZ3NDbGllbnQsXG4gIFJlc29sdXRpb25cbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWcgaW1wbGVtZW50cyBEb21haW5UYWdzSXRlbSB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAnZmlyc3Qtc2Vlbic6IERhdGU7XG4gICdsYXN0LXNlZW4nOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykge1xuICAgIHRoaXMudGFnID0gdGFnSW5mby50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ0luZm8uZGVzY3JpcHRpb247XG4gICAgdGhpc1snZmlyc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snZmlyc3Qtc2VlbiddKTtcbiAgICB0aGlzWydsYXN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2xhc3Qtc2VlbiddKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnU3RhdGlzdGljIGltcGxlbWVudHMgRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IFJlc29sdXRpb247XG4gIHN0YXRzOiBEb21haW5UYWdTdGF0aXN0aWNJdGVtW107XG5cbiAgY29uc3RydWN0b3IodGFnU3RhdGlzdGljSW5mbzogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlKSB7XG4gICAgdGhpcy50YWcgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkudGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkucmVzb2x1dGlvbjtcbiAgICB0aGlzLnN0YXRzID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCwgdGltZTogbmV3IERhdGUoc3RhdC50aW1lKSB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UYWdzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxEb21haW5UYWdzTGlzdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgKTogRG9tYWluVGFnc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBEb21haW5UYWdzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAndGFnJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRhZ1N0YXRpc3RpYyhcbiAgICByZXNwb25zZTogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlXG4gICk6IERvbWFpblRhZ1N0YXRpc3RpYyB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UYWdTdGF0aXN0aWMocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UYWdzUXVlcnkpOiBQcm9taXNlPERvbWFpblRhZ3NMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnKSwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UYWcocmVzLmJvZHkpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZyksIGRlc2NyaXB0aW9uKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdzTWVzc2FnZVJlc1xuICAgICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS90YWdzLyR7dGFnfWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gKFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogcmVzLmJvZHkubWVzc2FnZSxcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNcbiAgICAgICAgfSBhcyBEb21haW5UYWdzTWVzc2FnZVJlcykpO1xuICB9XG5cbiAgc3RhdGlzdGljKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgcXVlcnk6IERvbWFpblRhZ3NTdGF0aXN0aWNRdWVyeSlcbiAgICA6IFByb21pc2U8RG9tYWluVGFnU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUYWdTdGF0aXN0aWMocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGNvdW50cmllcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2NvdW50cmllcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIHByb3ZpZGVycyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL3Byb3ZpZGVycycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIGRldmljZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvZGV2aWNlcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBEb21haW5UZW1wbGF0ZSwgRG9tYWluVGVtcGxhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZXNRdWVyeSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhLFxuICBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhLFxuICBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBJRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0LFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBOb3RpZmljYXRpb25BUElSZXNwb25zZSxcbiAgTm90aWZpY2F0aW9uUmVzdWx0LFxuICBTaG9ydFRlbXBsYXRlVmVyc2lvbixcbiAgVGVtcGxhdGVRdWVyeSxcbiAgVGVtcGxhdGVWZXJzaW9uLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRlbXBsYXRlcyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRlbXBsYXRlSXRlbSBpbXBsZW1lbnRzIERvbWFpblRlbXBsYXRlIHtcbiAgbmFtZSA6IHN0cmluZztcbiAgZGVzY3JpcHRpb24gOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdCA6IERhdGUgfCAnJztcbiAgY3JlYXRlZEJ5IDogc3RyaW5nO1xuICBpZCA6IHN0cmluZztcbiAgdmVyc2lvbj86IFRlbXBsYXRlVmVyc2lvbjtcbiAgdmVyc2lvbnM/OiBTaG9ydFRlbXBsYXRlVmVyc2lvbltdO1xuXG4gIGNvbnN0cnVjdG9yKGRvbWFpblRlbXBsYXRlRnJvbUFQSTogRG9tYWluVGVtcGxhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQpIDogJyc7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEJ5O1xuICAgIHRoaXMuaWQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuaWQ7XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24pIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uO1xuICAgICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCkge1xuICAgICAgICB0aGlzLnZlcnNpb24uY3JlYXRlZEF0ID0gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zICYmIGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbnMgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udmVyc2lvbiB9O1xuICAgICAgICByZXN1bHQuY3JlYXRlZEF0ID0gbmV3IERhdGUodmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRlbXBsYXRlc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25SZXNwb25zZShkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKTogRG9tYWluVGVtcGxhdGVJdGVtIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGlvblJlc3BvbnNlKFxuICAgIGRhdGE6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZVxuICApOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQgPSB7fSBhcyBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UoZGF0YTogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpOiBOb3RpZmljYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTm90aWZpY2F0aW9uUmVzdWx0ID0ge30gYXMgTm90aWZpY2F0aW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgICByZXN1bHQudGVtcGxhdGVWZXJzaW9uID0geyB0YWc6IGRhdGEuYm9keS50ZW1wbGF0ZS52ZXJzaW9uLnRhZyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlKTogTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGQ6IERvbWFpblRlbXBsYXRlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGQpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhcbiAgICByZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZVxuICApOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0O1xuXG4gICAgZGF0YS50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzcG9uc2UuYm9keS50ZW1wbGF0ZSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAncCcpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5KTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBxdWVyeSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCBxdWVyeT86IFRlbXBsYXRlUXVlcnkpOiBQcm9taXNlPERvbWFpblRlbXBsYXRlSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXMuYm9keS50ZW1wbGF0ZSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVEYXRhXG4gICk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YVxuICApOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSkpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveUFsbChkb21haW46IHN0cmluZyk6IFByb21pc2U8Tm90aWZpY2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpKVxuICAgICAgLnRoZW4oKHJlczogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VOb3RpZmljYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGNyZWF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFZlcnNpb24oZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIC50aGVuKChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBsaXN0VmVyc2lvbnMoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeVxuICApOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMocmVzKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQVBJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXR1czogbnVtYmVyIHwgc3RyaW5nO1xuICBzdGFjazogc3RyaW5nO1xuICBkZXRhaWxzOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0LFxuICAgIG1lc3NhZ2UsXG4gICAgYm9keSA9IHt9XG4gIH06IEFQSUVycm9yT3B0aW9ucykge1xuICAgIGxldCBib2R5TWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvciA9ICcnO1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHlNZXNzYWdlID0gYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5Py5tZXNzYWdlO1xuICAgICAgZXJyb3IgPSBib2R5Py5lcnJvcjtcbiAgICB9XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQ7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCxcbiAgRXZlbnRzUXVlcnksXG4gIEV2ZW50c1Jlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEV2ZW50c0xpc3Q+IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlLFxuICApOiBFdmVudHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRXZlbnRzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnLycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IEV2ZW50c1F1ZXJ5KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpLCBxdWVyeSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuXG5jbGFzcyBGb3JtRGF0YUJ1aWxkZXIge1xuICBwcml2YXRlIEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGE7XG4gIGNvbnN0cnVjdG9yKEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IgPSBGb3JtRGF0YUNvbnN0cnVjdG9yO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZvcm1EYXRhKGRhdGE6IGFueSk6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9KVxuICAgICAgLnJlZHVjZSgoZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleXMgPSBbJ2F0dGFjaG1lbnQnLCAnaW5saW5lJywgJ211bHRpcGxlVmFsaWRhdGlvbkZpbGUnXTtcbiAgICAgICAgaWYgKGZpbGVLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICB0aGlzLmFkZEZpbGVzVG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdtZXNzYWdlJykgeyAvLyBtaW1lIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmFkZE1pbWVEYXRhVG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkQ29tbW9uUHJvcGVydHlUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgIH0sIG5ldyB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IoKSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05vZGVGb3JtRGF0YShmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSlcbiAgOiBmb3JtRGF0YUluc3RhbmNlIGlzIE5vZGVGb3JtRGF0YSB7XG4gICAgcmV0dXJuICg8Tm9kZUZvcm1EYXRhPmZvcm1EYXRhSW5zdGFuY2UpLmdldEhlYWRlcnMgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0YWNobWVudE9wdGlvbnMoaXRlbToge1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlPyA6IHN0cmluZztcbiAgICBrbm93bkxlbmd0aD86IG51bWJlcjtcbiAgfSk6IHtcbiAgICBmaWxlbmFtZT86IHN0cmluZyxcbiAgICBjb250ZW50VHlwZT86IHN0cmluZyxcbiAgICBrbm93bkxlbmd0aD86IG51bWJlclxuICB9IHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IHRoaXMuaXNTdHJlYW0oaXRlbSkpIHJldHVybiB7fTtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGhcbiAgICB9ID0gaXRlbTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGZpbGVuYW1lID8geyBmaWxlbmFtZSB9IDogeyBmaWxlbmFtZTogJ2ZpbGUnIH0pLFxuICAgICAgLi4uKGNvbnRlbnRUeXBlICYmIHsgY29udGVudFR5cGUgfSksXG4gICAgICAuLi4oa25vd25MZW5ndGggJiYgeyBrbm93bkxlbmd0aCB9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZE1pbWVEYXRhVG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBkYXRhOiBCdWZmZXIgfCBCbG9iIHwgc3RyaW5nLFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkgfHwgdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBub2RlRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIE5vZGVGb3JtRGF0YTtcbiAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGRhdGEpIDogZGF0YTtcbiAgICAgIG5vZGVGb3JtRGF0YS5hcHBlbmQoa2V5LCBwcmVwYXJlZERhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJyb3dzZXJGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgRm9ybURhdGE7XG4gICAgICBicm93c2VyRm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YSwgJ01pbWVNZXNzYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIG9yaWdpbmFsS2V5OiBzdHJpbmcsXG4gICAgICBvYmo6IGFueSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3JpZ2luYWxLZXkgPT09ICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJyA/ICdmaWxlJyA6IG9yaWdpbmFsS2V5O1xuICAgICAgY29uc3QgaXNTdHJlYW1EYXRhID0gdGhpcy5pc1N0cmVhbShvYmopO1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IGlzU3RyZWFtRGF0YSA/IG9iaiA6IG9iai5kYXRhO1xuICAgICAgLy8gZ2V0QXR0YWNobWVudE9wdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG9iaiBwYXJhbWV0ZXIgdG8gcHJldmVudCBsb29zaW5nIGZpbGVuYW1lXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyhvYmopO1xuICAgICAgaWYgKHRoaXMuaXNOb2RlRm9ybURhdGEoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgaXRlbSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCB2YWx1ZSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmVhbShkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkYXRhLnBpcGUgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgZm9ybURhdGFBY2MuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRm9ybURhdGFCdWlsZGVyO1xuIiwiaW1wb3J0IENsaWVudCBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogT3B0aW9ucykgOiBDbGllbnQge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBCb3VuY2UsIENvbXBsYWludCwgVW5zdWJzY3JpYmUsIFdoaXRlTGlzdFxufSBmcm9tICcuLi8uLi9zdXBwcmVzc2lvbnMnO1xuaW1wb3J0IHsgUGFnZXNMaXN0LCBQYXJzZWRQYWdlc0xpc3QgfSBmcm9tICcuLi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IEJvdW5jZURhdGEgfSBmcm9tICcuL0JvdW5jZSc7XG5pbXBvcnQgeyBDb21wbGFpbnREYXRhIH0gZnJvbSAnLi9Db21wbGFpbnQnO1xuaW1wb3J0IHsgVW5zdWJzY3JpYmVEYXRhIH0gZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5pbXBvcnQgeyBXaGl0ZUxpc3REYXRhIH0gZnJvbSAnLi9XaGl0ZUxpc3QnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgQ09NUExBSU5UUyA9ICdjb21wbGFpbnRzJyxcbiAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkxpc3Qge1xuICBpdGVtczogKEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0KVtdO1xuICBwYWdlczogUGFyc2VkUGFnZXNMaXN0O1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU3VwcHJlc3Npb25MaXN0UXVlcnkgPSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBwYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdXBwcmVzc2lvbkRhdGFUeXBlID0gQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlIHtcbiAgYm9keToge1xuICAgIGl0ZW1zOiBCb3VuY2VEYXRhW10gfCBDb21wbGFpbnREYXRhW10gfCBVbnN1YnNjcmliZURhdGFbXSB8IFdoaXRlTGlzdERhdGFbXTtcbiAgICBwYWdpbmc6IFBhZ2VzTGlzdDtcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvblJlc3BvbnNlIHtcbiAgYm9keTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSB7XG4gIGJvZHk6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU/OiBudW1iZXI7XG4gIGVycm9yPzogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIHRhZz86IHN0cmluZztcbiAgY3JlYXRlZF9hdD86IHN0cmluZyA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlIHtcbiAgYm9keTp7XG4gICAgbWVzc2FnZTpzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgbWVzc2FnZTpzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPElwUG9vbExpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YxL2lwX3Bvb2xzJylcbiAgICAgIC50aGVuKChyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogSXBQb29sQ3JlYXRlRGF0YSk6IFByb21pc2U8SXBQb29sQ3JlYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbENyZWF0ZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xVcGRhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wYXRjaFdpdGhGRChgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6SXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKTogSXBQb29sTGlzdFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCBNZ1JlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSXBzTGlzdFJlc3BvbnNlQm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQge1xuICByZXF1ZXN0OiBNZ1JlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogTWdSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IGFueSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3QsXG4gIFZhbGlkYXRpb25BcGlSZXNwb25zZSxcbiAgU3RhcnRWYWxpZGF0aW9uUmVzdWx0LFxuICBWYWxpZGF0aW9uUmVzdWx0LFxuICBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdFJlc3VsdCxcbiAgTWFpbGluZ0xpc3RBcGlSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvbGlzdHMnO1xuaW1wb3J0IHsgSU1haWxMaXN0c01lbWJlcnMgfSBmcm9tICcuL2ludGVyZmFjZXMvbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbGluZ0xpc3RSZXN1bHQ+IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1lbWJlcnM6IElNYWlsTGlzdHNNZW1iZXJzO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIG1lbWJlcnM6SU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWxpZGF0aW9uUmVzdWx0KHN0YXR1czogbnVtYmVyLCBkYXRhOiBWYWxpZGF0aW9uQXBpUmVzcG9uc2UpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDoge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQgKiAxMDAwKSAvLyBhZGQgbWlsbGlzZWNvbmQgdG8gVW5peCB0aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9IGFzIFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlKTogTWFpbGluZ0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsaW5nTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9L3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG5cbiAgdmFsaWRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFN0YXJ0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYCwge30pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgICB9KSBhcyBTdGFydFZhbGlkYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgdmFsaWRhdGlvblJlc3VsdChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXNwb25zZSkgPT4gdGhpcy5wYXJzZVZhbGlkYXRpb25SZXN1bHQoXG4gICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICByZXNwb25zZS5ib2R5IGFzIFZhbGlkYXRpb25BcGlSZXNwb25zZVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsVmFsaWRhdGlvbihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgICB9IGFzIENhbmNlbFZhbGlkYXRpb25SZXN1bHQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIE1haWxMaXN0TWVtYmVyc1F1ZXJ5LFxuICBJTWFpbExpc3RzTWVtYmVycyxcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzLFxuICBNYWlsTGlzdE1lbWJlcixcbiAgTXVsdGlwbGVNZW1iZXJzRGF0YSxcbiAgTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSxcbiAgRGVsZXRlZE1lbWJlcixcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxLFxuICBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSxcbiAgTWFpbExpc3RNZW1iZXJzUmVzdWx0LFxuICBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsTGlzdHNNZW1iZXJzXG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxNYWlsTGlzdE1lbWJlcnNSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU1haWxMaXN0c01lbWJlcnMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZFVwZGF0ZURhdGEoZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzKSB7XG4gICAgY29uc3QgbmV3RGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnZhcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBuZXdEYXRhLnZhcnMgPSBKU09OLnN0cmluZ2lmeShuZXdEYXRhLnZhcnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YS5zdWJzY3JpYmVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG5ld0RhdGEuc3Vic2NyaWJlZCA9IGRhdGEuc3Vic2NyaWJlZCA/ICd5ZXMnIDogJ25vJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RGF0YSBhcyBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZSxcbiAgKTogTWFpbExpc3RNZW1iZXJzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTWFpbExpc3RNZW1iZXJzUmVzdWx0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RNZW1iZXJzKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIHF1ZXJ5PzogTWFpbExpc3RNZW1iZXJzUXVlcnlcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyhgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvcGFnZXNgLCBxdWVyeSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcbmltcG9ydCB7XG4gIE1haWxndW5NZXNzYWdlRGF0YSxcbiAgTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UsXG4gIE1lc3NhZ2VzU2VuZFJlc3VsdFxufSBmcm9tICcuL2ludGVyZmFjZXMvTWVzc2FnZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzc2FnZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQm9vbGVhblZhbHVlcyhkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBNYWlsZ3VuTWVzc2FnZURhdGEge1xuICAgIGNvbnN0IHllc05vUHJvcGVydGllcyA9IG5ldyBTZXQoW1xuICAgICAgJ286dGVzdG1vZGUnLFxuICAgICAgJ3Q6dGV4dCcsXG4gICAgICAnbzpka2ltJyxcbiAgICAgICdvOnRyYWNraW5nJyxcbiAgICAgICdvOnRyYWNraW5nLWNsaWNrcycsXG4gICAgICAnbzp0cmFja2luZy1vcGVucycsXG4gICAgICAnbzpyZXF1aXJlLXRscycsXG4gICAgICAnbzpza2lwLXZlcmlmaWNhdGlvbidcbiAgICBdKTtcblxuICAgIGlmICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSBkYXRhIG9iamVjdCBjYW4gbm90IGJlIGVtcHR5J1xuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHllc05vUHJvcGVydGllcy5oYXMoa2V5KSAmJiB0eXBlb2YgZGF0YVtrZXldID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgYWNjW2tleV0gPSBkYXRhW2tleV0gPyAneWVzJyA6ICdubyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgTWFpbGd1bk1lc3NhZ2VEYXRhKTtcbiAgfVxuXG4gIF9wYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSk6IE1lc3NhZ2VzU2VuZFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IE1haWxndW5NZXNzYWdlRGF0YSk6IFByb21pc2U8TWVzc2FnZXNTZW5kUmVzdWx0PiB7XG4gICAgaWYgKGRhdGEubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzLm1pbWVgLCBkYXRhKVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RpZmllZERhdGEgPSB0aGlzLnByZXBhcmVCb29sZWFuVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlc2AsIG1vZGlmaWVkRGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHtcbiAgQ2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YSxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzcG9uc2UsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYlJlc3VsdCxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeVxufVxuICBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IgaW1wbGVtZW50cyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQge1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIGlkOiBzdHJpbmc7XG4gIHF1YW50aXR5OiBudW1iZXJcbiAgcmVjb3Jkc1Byb2Nlc3NlZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGRvd25sb2FkVXJsPzoge1xuICAgIGNzdjogc3RyaW5nO1xuICAgIGpzb246IHN0cmluZztcbiAgfTtcblxuICByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcjtcbiAgc3VtbWFyeT86IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBudW1iZXI7XG4gICAgICAgICAgZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICBkb05vdFNlbmQ6IG51bWJlcjtcbiAgICAgICAgICB1bmRlbGl2ZXJhYmxlOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIHJpc2s6IHtcbiAgICAgICAgICBoaWdoOiBudW1iZXI7XG4gICAgICAgICAgbG93OiBudW1iZXI7XG4gICAgICAgICAgbWVkaXVtOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSwgcmVzcG9uc2VTdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5xdWFudGl0eSA9IGRhdGEucXVhbnRpdHk7XG4gICAgdGhpcy5yZWNvcmRzUHJvY2Vzc2VkID0gZGF0YS5yZWNvcmRzX3Byb2Nlc3NlZDtcbiAgICB0aGlzLnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHRoaXMucmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXNDb2RlO1xuICAgIGlmIChkYXRhLmRvd25sb2FkX3VybCkge1xuICAgICAgdGhpcy5kb3dubG9hZFVybCA9IHtcbiAgICAgICAgY3N2OiBkYXRhLmRvd25sb2FkX3VybD8uY3N2LFxuICAgICAgICBqc29uOiBkYXRhLmRvd25sb2FkX3VybD8uanNvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc3VtbWFyeSkge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBjYXRjaEFsbDogZGF0YS5zdW1tYXJ5LnJlc3VsdC5jYXRjaF9hbGwsXG4gICAgICAgICAgZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZGVsaXZlcmFibGUsXG4gICAgICAgICAgZG9Ob3RTZW5kOiBkYXRhLnN1bW1hcnkucmVzdWx0LmRvX25vdF9zZW5kLFxuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5kZWxpdmVyYWJsZSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmVzdWx0LnVua25vd25cbiAgICAgICAgfSxcbiAgICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IGRhdGEuc3VtbWFyeS5yaXNrLmhpZ2gsXG4gICAgICAgICAgbG93OiBkYXRhLnN1bW1hcnkucmlzay5sb3csXG4gICAgICAgICAgbWVkaXVtOiBkYXRhLnN1bW1hcnkucmlzay5tZWRpdW0sXG4gICAgICAgICAgdW5rbm93bjogZGF0YS5zdW1tYXJ5LnJpc2sudW5rbm93blxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PlxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFQ+KHJlc3BvbnNlOiBBUElSZXNwb25zZSk6IFQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlPy5ib2R5XG4gICAgfSBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXNwb25zZSlcbiAgICA6IE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ7XG5cbiAgICBkYXRhLmpvYnMgPSByZXNwb25zZS5ib2R5LmpvYnMubWFwKChqb2IpID0+IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2Ioam9iLCByZXNwb25zZS5zdGF0dXMpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwaXZvdCcpO1xuICAgIGRhdGEudG90YWwgPSByZXNwb25zZS5ib2R5LnRvdGFsO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeSk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcygnL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsaycsIHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uSm9iKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlLnN0YXR1cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoXG4gICAgbGlzdElkOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ge1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQgPSB7XG4gICAgICBtdWx0aXBsZVZhbGlkYXRpb25GaWxlOiB7XG4gICAgICAgIC4uLmRhdGE/LmZpbGVcbiAgICAgIH0sXG4gICAgICAuLi5kYXRhXG4gICAgfTtcbiAgICBkZWxldGUgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YS5maWxlO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCwgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgYmFzZTY0IGZyb20gJ2Jhc2UtNjQnO1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7IE9uQ2FsbEVtcHR5SGVhZGVycywgT25DYWxsUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL1JlcXVlc3RPcHRpb25zJztcbmltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL0FQSUVycm9yT3B0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBGb3JtRGF0YUJ1aWxkZXIgZnJvbSAnLi9mb3JtRGF0YUJ1aWxkZXInO1xuaW1wb3J0IHsgSXBQb29sRGVsZXRlRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcFBvb2xzJztcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgdXNlcm5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBrZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHByaXZhdGUgZm9ybURhdGFCdWlsZGVyOiBGb3JtRGF0YUJ1aWxkZXI7XG4gIHByaXZhdGUgbWF4Qm9keUxlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMudXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lO1xuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCBhcyBzdHJpbmc7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICB0aGlzLmZvcm1EYXRhQnVpbGRlciA9IG5ldyBGb3JtRGF0YUJ1aWxkZXIoZm9ybURhdGEpO1xuICAgIHRoaXMubWF4Qm9keUxlbmd0aCA9IDUyNDI4ODAwOyAvLyA1MCBNQlxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgY29uc3Qgb25DYWxsSGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9O1xuXG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVyc0luaXR8IE9uQ2FsbEVtcHR5SGVhZGVycyA9IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljfWAsXG4gICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAuLi5vbkNhbGxIZWFkZXJzXG4gICAgfTtcblxuICAgIGRlbGV0ZSBvcHRpb25zPy5oZWFkZXJzO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0aW9ucz8ucXVlcnkpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5wYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKG9wdGlvbnMucXVlcnkpO1xuICAgICAgZGVsZXRlIHBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uYm9keSkge1xuICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnM/LmJvZHk7XG4gICAgICBwYXJhbXMuZGF0YSA9IGJvZHk7XG4gICAgICBkZWxldGUgcGFyYW1zLmJvZHk7XG4gICAgfVxuICAgIGxldCByZXNwb25zZTogQXhpb3NSZXNwb25zZTtcbiAgICBjb25zdCB1cmxWYWx1ZSA9IHVybGpvaW4odGhpcy51cmwsIHVybCk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgdXJsOiB1cmxWYWx1ZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiB0aGlzLm1heEJvZHlMZW5ndGhcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGVyciBhcyBBeGlvc0Vycm9yO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXMgfHwgNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiBlcnJvclJlc3BvbnNlPy5yZXNwb25zZT8uc3RhdHVzVGV4dCB8fCBlcnJvclJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGJvZHk6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yUmVzcG9uc2UubWVzc2FnZVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keToge30sXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXNcbiAgICB9IGFzIEFQSVJlc3BvbnNlO1xuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgPT09ICdNYWlsZ3VuIE1hZ25pZmljZW50IEFQSScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW5jb3JyZWN0IHVybCcsXG4gICAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLmJvZHkgPSByZXNwb25zZS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcXVlcnkoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IEFycmF5PEFycmF5PHN0cmluZz4+LFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXRob2QsIHVybCwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGNvbW1hbmQoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB8IHN0cmluZyB8IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBhZGREZWZhdWx0SGVhZGVycyA9IHRydWVcbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgaWYgKGFkZERlZmF1bHRIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzID0geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAuLi5oZWFkZXJzLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0T3B0aW9uc1xuICAgICk7XG4gIH1cblxuICBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IEFycmF5PEFycmF5PHN0cmluZz4+LFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ2dldCcsIHVybCwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3RXaXRoRkQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHBhdGNoV2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3BhdGNoJywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdXQodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKHVybDogc3RyaW5nLCBkYXRhPzogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdkZWxldGUnLCB1cmwsIGRhdGEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQge1xuICBDcmVhdGVVcGRhdGVSb3V0ZURhdGEsIERlc3Ryb3lSb3V0ZVJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzTGlzdFF1ZXJ5LCBVcGRhdGVSb3V0ZVJlc3BvbnNlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yb3V0ZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk6IFJvdXRlc0xpc3RRdWVyeSk6IFByb21pc2U8Um91dGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvcm91dGVzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMpO1xuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvcm91dGVzJywgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxVcGRhdGVSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92My9yb3V0ZXMvJHtpZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3koaWQ6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgU3RhdHNRdWVyeSwgU3RhdHNPcHRpb25zLCBTdGF0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL1N0YXRzT3B0aW9ucyc7XG5cbmNsYXNzIFN0YXRzIHtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb2x1dGlvbjogc3RyaW5nO1xuICBzdGF0czogU3RhdFtdO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFN0YXRzT3B0aW9ucykge1xuICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZShkYXRhLnN0YXJ0KTtcbiAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKGRhdGEuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBkYXRhLnJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBTdGF0KSB7XG4gICAgICBjb25zdCByZXMgPSB7IC4uLnN0YXQgfTtcbiAgICAgIHJlcy50aW1lID0gbmV3IERhdGUoc3RhdC50aW1lKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5OiBTdGF0c1F1ZXJ5IHwgdW5kZWZpbmVkKTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkucmVkdWNlKChhcnJheVdpdGhQYWlycywgY3VycmVudFBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY3VycmVudFBhaXI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCByZXBlYXRlZFByb3BlcnR5ID0gdmFsdWUubWFwKChpdGVtKSA9PiBba2V5LCBpdGVtXSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5hcnJheVdpdGhQYWlycywgLi4ucmVwZWF0ZWRQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICByZXR1cm4gYXJyYXlXaXRoUGFpcnM7XG4gICAgICB9LCBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+Pik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcztcbiAgfVxuXG4gIF9wYXJzZVN0YXRzKHJlc3BvbnNlOiB7IGJvZHk6IFN0YXRzT3B0aW9ucyB9KTogU3RhdHMge1xuICAgIHJldHVybiBuZXcgU3RhdHMocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBnZXREb21haW4oZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogU3RhdHNRdWVyeSk6IFByb21pc2U8U3RhdHM+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ3N0YXRzL3RvdGFsJyksIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG5cbiAgZ2V0QWNjb3VudChxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3N0YXRzL3RvdGFsJywgc2VhcmNoUGFyYW1zKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VTdGF0cyk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCxcbiAgU3VwcHJlc3Npb25EYXRhVHlwZSxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCxcbiAgU3VwcHJlc3Npb25MaXN0LFxuICBTdXBwcmVzc2lvbkxpc3RRdWVyeSxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTW9kZWxzLFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSUJvdW5jZSwgQm91bmNlRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdXBwcmVzc2lvbnMvQm91bmNlJztcbmltcG9ydCB7IElDb21wbGFpbnQsIENvbXBsYWludERhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL0NvbXBsYWludCc7XG5pbXBvcnQgeyBJVW5zdWJzY3JpYmUsIFVuc3Vic2NyaWJlRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdXBwcmVzc2lvbnMvVW5zdWJzY3JpYmUnO1xuaW1wb3J0IHsgSVdoaXRlTGlzdCwgV2hpdGVMaXN0RGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdXBwcmVzc2lvbnMvV2hpdGVMaXN0JztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuXG5jb25zdCBjcmVhdGVPcHRpb25zID0ge1xuICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxufTtcbmV4cG9ydCBjbGFzcyBTdXBwcmVzc2lvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQm91bmNlIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2RlOiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQm91bmNlRGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkJPVU5DRVMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNvZGUgPSArZGF0YS5jb2RlO1xuICAgIHRoaXMuZXJyb3IgPSBkYXRhLmVycm9yO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBsYWludCBleHRlbmRzIFN1cHByZXNzaW9uIGltcGxlbWVudHMgSUNvbXBsYWludCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQ09NUExBSU5UUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuc3Vic2NyaWJlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJVW5zdWJzY3JpYmUge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHRhZ3M6IHN0cmluZ1tdO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFVuc3Vic2NyaWJlRGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLlVOU1VCU0NSSUJFUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMudGFncyA9IGRhdGEudGFncztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaGl0ZUxpc3QgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElXaGl0ZUxpc3Qge1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5XSElURUxJU1RTKTtcbiAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkQXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uQ2xpZW50IGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxTdXBwcmVzc2lvbkxpc3Q+IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgbW9kZWxzOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubW9kZWxzLnNldCgnYm91bmNlcycsIEJvdW5jZSk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCdjb21wbGFpbnRzJywgQ29tcGxhaW50KTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3Vuc3Vic2NyaWJlcycsIFVuc3Vic2NyaWJlKTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3doaXRlbGlzdHMnLCBXaGl0ZUxpc3QpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICAgIH1cbiAgKTogU3VwcHJlc3Npb25MaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgU3VwcHJlc3Npb25MaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgoaXRlbSkgPT4gbmV3IE1vZGVsKGl0ZW0pKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfcGFyc2VJdGVtPFQgZXh0ZW5kcyBTdXBwcmVzc2lvbj4oXG4gICAgZGF0YSA6IEJvdW5jZURhdGEgfCBDb21wbGFpbnREYXRhIHwgVW5zdWJzY3JpYmVEYXRhIHwgV2hpdGVMaXN0RGF0YSxcbiAgICBNb2RlbDoge1xuICAgICAgbmV3KGRhdGE6IEJvdW5jZURhdGEgfCBDb21wbGFpbnREYXRhIHwgVW5zdWJzY3JpYmVEYXRhIHwgV2hpdGVMaXN0RGF0YSk6XG4gICAgICBUXG4gICAgfVxuICApOiBUIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsKGRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXaGl0ZUxpc3QoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgc3RhdHVzVGV4dDogJ0RhdGEgcHJvcGVydHkgc2hvdWxkIGJlIGFuIG9iamVjdCcsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnV2hpdGVsaXN0XFwncyBjcmVhdGlvbiBwcm9jZXNzIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY3JlYXRpb25zLiBEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnXG4gICAgICAgIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxzLmhhcyh0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdVbmtub3duIHR5cGUgdmFsdWUnLFxuICAgICAgICBib2R5OiB7IG1lc3NhZ2U6ICdUeXBlIG1heSBiZSBvbmx5IG9uZSBvZiBbYm91bmNlcywgY29tcGxhaW50cywgdW5zdWJzY3JpYmVzLCB3aGl0ZWxpc3RzXScgfVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlc3BvbnNlKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UpOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgdHlwZTogcmVzcG9uc2UuYm9keS50eXBlIHx8ICcnLFxuICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBsaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBxdWVyeT86IFN1cHByZXNzaW9uTGlzdFF1ZXJ5XG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25MaXN0PiB7XG4gICAgdGhpcy5jaGVja1R5cGUodHlwZSk7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbigndjMnLCBkb21haW4sIHR5cGUpLCBxdWVyeSwgbW9kZWwpO1xuICB9XG5cbiAgZ2V0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxCb3VuY2UgfCBDb21wbGFpbnQgfCBVbnN1YnNjcmliZSB8IFdoaXRlTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25SZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VJdGVtPHR5cGVvZiBtb2RlbD4ocmVzcG9uc2UuYm9keSwgbW9kZWwpKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5kZWxldGUodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5ib2R5LmFkZHJlc3MgfHwgJycsXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdXBwcmVzc2lvbkNsaWVudDtcbiIsImltcG9ydCB7IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25SZXNwb25zZSwgVmFsaWRhdGlvblF1ZXJ5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL1ZhbGlkYXRlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRlQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBWYWxpZGF0aW9uUXVlcnkgPSB7IGFkZHJlc3MgfTtcbiAgICBjb25zdCByZXN1bHQ6IFZhbGlkYXRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlJywgcXVlcnkpO1xuICAgIHJldHVybiByZXN1bHQuYm9keSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5cbmltcG9ydCB7XG4gIFZhbGlkYXRpb25SZXNwb25zZSxcbiAgV2ViaG9va0xpc3QsXG4gIFdlYmhvb2tSZXNwb25zZSxcbiAgV2ViaG9va3NJZHMsXG4gIFdlYmhvb2tzUXVlcnlcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL1dlYmhvb2tzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmNsYXNzIFdlYmhvb2sge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tMaXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgd2ViaG9va3M6IFdlYmhvb2tMaXN0IH0gfSk6IFdlYmhvb2tMaXN0IHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS53ZWJob29rcztcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tXaXRoSUQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2U6IFdlYmhvb2tSZXNwb25zZSk6IFdlYmhvb2sge1xuICAgICAgY29uc3Qgd2ViaG9va1Jlc3BvbnNlID0gcmVzcG9uc2U/LmJvZHk/LndlYmhvb2s7XG4gICAgICBsZXQgdXJsID0gd2ViaG9va1Jlc3BvbnNlPy51cmw7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybHMgJiYgd2ViaG9va1Jlc3BvbnNlLnVybHMubGVuZ3RoXG4gICAgICAgICAgPyB3ZWJob29rUmVzcG9uc2UudXJsc1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBXZWJob29rKGlkLCB1cmwpO1xuICAgIH07XG4gIH1cblxuICBfcGFyc2VXZWJob29rVGVzdChyZXNwb25zZTogeyBib2R5OiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfSlcbiAgOiB7Y29kZTogbnVtYmVyLCBtZXNzYWdlOnN0cmluZ30ge1xuICAgIHJldHVybiB7IGNvZGU6IHJlc3BvbnNlLmJvZHkuY29kZSwgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlIH0gYXMgVmFsaWRhdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk6IFdlYmhvb2tzUXVlcnkpOiBQcm9taXNlPFdlYmhvb2tMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCBxdWVyeSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va0xpc3QpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCBpZDogV2ViaG9va3NJZHMpOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0ZXN0ID0gZmFsc2UpOiBQcm9taXNlPFdlYmhvb2sgfCBWYWxpZGF0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAodGVzdCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkLCAndGVzdCcpLCB7IHVybCB9KVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tUZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCB7IGlkLCB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCksIHsgdXJsIH0pXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcpIDogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG59XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2Jhc2U2NCB2MS4wLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGVzIGBleHBvcnRzYC5cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXG5cdC8vIGl0IGFzIGByb290YC5cblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgSW52YWxpZENoYXJhY3RlckVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH07XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5cdHZhciBlcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHQvLyBOb3RlOiB0aGUgZXJyb3IgbWVzc2FnZXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZSBtYXRjaCB0aG9zZSB1c2VkIGJ5XG5cdFx0Ly8gdGhlIG5hdGl2ZSBgYXRvYmAvYGJ0b2FgIGltcGxlbWVudGF0aW9uIGluIENocm9taXVtLlxuXHRcdHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSk7XG5cdH07XG5cblx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXG5cdHZhciBSRUdFWF9TUEFDRV9DSEFSQUNURVJTID0gL1tcXHRcXG5cXGZcXHIgXS9nO1xuXG5cdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2Jcblx0Ly8gVGhlIG9wdGltaXplZCBiYXNlNjQtZGVjb2RpbmcgYWxnb3JpdGhtIHVzZWQgaXMgYmFzZWQgb24gQGF0a+KAmXMgZXhjZWxsZW50XG5cdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dClcblx0XHRcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggJSA0ID09IDApIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvPT0/JC8sICcnKTtcblx0XHRcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0bGVuZ3RoICUgNCA9PSAxIHx8XG5cdFx0XHQvLyBodHRwOi8vd2hhdHdnLm9yZy9DI2FscGhhbnVtZXJpYy1hc2NpaS1jaGFyYWN0ZXJzXG5cdFx0XHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXG5cdFx0KSB7XG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBiaXRDb3VudGVyID0gMDtcblx0XHR2YXIgYml0U3RvcmFnZTtcblx0XHR2YXIgYnVmZmVyO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0YnVmZmVyID0gVEFCTEUuaW5kZXhPZihpbnB1dC5jaGFyQXQocG9zaXRpb24pKTtcblx0XHRcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcblx0XHRcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxuXHRcdFx0aWYgKGJpdENvdW50ZXIrKyAlIDQpIHtcblx0XHRcdFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cblx0XHRcdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG5cdFx0XHRcdFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0Ly8gYGVuY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBidG9hYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxuXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG5cdFx0aWYgKC9bXlxcMC1cXHhGRl0vLnRlc3QoaW5wdXQpKSB7XG5cdFx0XHQvLyBOb3RlOiBubyBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhc3RyYWwgc3ltYm9scyBoZXJlLCBhcyBzdXJyb2dhdGVzIGFyZVxuXHRcdFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcblx0XHRcdFx0J0xhdGluMSByYW5nZS4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHZhciBhO1xuXHRcdHZhciBiO1xuXHRcdHZhciBjO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcblxuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBSZWFkIHRocmVlIGJ5dGVzLCBpLmUuIDI0IGJpdHMuXG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YyA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYiArIGM7XG5cdFx0XHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXG5cdFx0XHQvLyBtYXRjaGluZyBjaGFyYWN0ZXIgZm9yIGVhY2ggb2YgdGhlbSB0byB0aGUgb3V0cHV0LlxuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxOCAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyICYgMHgzRilcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhZGRpbmcgPT0gMikge1xuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDg7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgMikgJiAweDNGKSArXG5cdFx0XHRcdCc9J1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHBhZGRpbmcgPT0gMSkge1xuXHRcdFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgNCkgJiAweDNGKSArXG5cdFx0XHRcdCc9PSdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHR2YXIgYmFzZTY0ID0ge1xuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQndmVyc2lvbic6ICcxLjAuMCdcblx0fTtcblxuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBiYXNlNjQ7XG5cdFx0fSk7XG5cdH1cdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAodmFyIGtleSBpbiBiYXNlNjQpIHtcblx0XHRcdFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIoZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGRlZmluaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZGVmaW5pdGlvbik7XG4gIGVsc2UgY29udGV4dFtuYW1lXSA9IGRlZmluaXRpb24oKTtcbn0pKCd1cmxqb2luJywgdGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gICAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICAgIH1cblxuICAgIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gICAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gICAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gICAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbiAgfTtcblxufSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzUzMCk7XG4iXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInV0aWxzIiwic2V0dGxlIiwiY29va2llcyIsImJ1aWxkVVJMIiwiYnVpbGRGdWxsUGF0aCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwiQXhpb3NFcnJvciIsIkNhbmNlbGVkRXJyb3IiLCJwYXJzZVByb3RvY29sIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbkNhbmNlbGVkIiwicmVxdWVzdERhdGEiLCJkYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJoZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaXNGb3JtRGF0YSIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0IiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkF1dGhvcml6YXRpb24iLCJidG9hIiwiZnVsbFBhdGgiLCJiYXNlVVJMIiwidXJsIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidmFsdWUiLCJlcnIiLCJvcGVuIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwidGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsImluZGV4T2YiLCJzZXRUaW1lb3V0Iiwib25hYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJ0cmFuc2l0aW9uYWwiLCJjbGFyaWZ5VGltZW91dEVycm9yIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwieHNyZkNvb2tpZU5hbWUiLCJyZWFkIiwidW5kZWZpbmVkIiwieHNyZkhlYWRlck5hbWUiLCJmb3JFYWNoIiwidmFsIiwia2V5IiwidG9Mb3dlckNhc2UiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiaXNVbmRlZmluZWQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsInR5cGUiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJwcm90b2NvbCIsIkVSUl9CQURfUkVRVUVTVCIsInNlbmQiLCJiaW5kIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwicHJvdG90eXBlIiwiZXh0ZW5kIiwiY3JlYXRlIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwiVkVSU0lPTiIsInRvRm9ybURhdGEiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsImV4ZWN1dG9yIiwiVHlwZUVycm9yIiwicmVzb2x2ZVByb21pc2UiLCJ0aGlzIiwicHJvbWlzZSIsInRva2VuIiwidGhlbiIsIl9saXN0ZW5lcnMiLCJpIiwibCIsImxlbmd0aCIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJtZXNzYWdlIiwicmVhc29uIiwidGhyb3dJZlJlcXVlc3RlZCIsImxpc3RlbmVyIiwicHVzaCIsImluZGV4Iiwic3BsaWNlIiwic291cmNlIiwiYyIsImNhbGwiLCJFUlJfQ0FOQ0VMRUQiLCJuYW1lIiwiaW5oZXJpdHMiLCJfX0NBTkNFTF9fIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiZGlzcGF0Y2hSZXF1ZXN0IiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsImRlZmF1bHRzIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJhc3NlcnRPcHRpb25zIiwic2lsZW50SlNPTlBhcnNpbmciLCJib29sZWFuIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicnVuV2hlbiIsInN5bmNocm9ub3VzIiwidW5zaGlmdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwiY2hhaW4iLCJBcnJheSIsImFwcGx5IiwiY29uY2F0Iiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJlcnJvciIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImNvZGUiLCJFcnJvciIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJkZXNjcmlwdG9ycyIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJ0b0ZsYXRPYmplY3QiLCJvYmoiLCJhc3NpZ24iLCJoYW5kbGVycyIsInVzZSIsIm9wdGlvbnMiLCJlamVjdCIsImlkIiwiZm4iLCJoIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwibWVyZ2UiLCJjb21tb24iLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwidGFyZ2V0IiwiaXNQbGFpbk9iamVjdCIsImlzQXJyYXkiLCJzbGljZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJwcm9wIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImtleXMiLCJjb25maWdWYWx1ZSIsInZhbGlkYXRlU3RhdHVzIiwiRVJSX0JBRF9SRVNQT05TRSIsIk1hdGgiLCJmbG9vciIsImZucyIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsInNldENvbnRlbnRUeXBlSWZVbnNldCIsInByb2Nlc3MiLCJ0b1N0cmluZyIsImlzQXJyYXlCdWZmZXIiLCJpc0J1ZmZlciIsImlzU3RyZWFtIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJidWZmZXIiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzRmlsZUxpc3QiLCJpc09iamVjdFBheWxvYWQiLCJpc09iamVjdCIsImNvbnRlbnRUeXBlIiwiX0Zvcm1EYXRhIiwiZW52IiwiRm9ybURhdGEiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJpc1N0cmluZyIsIkpTT04iLCJwYXJzZSIsInRyaW0iLCJlIiwic3RyaW5naWZ5Iiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInRoaXNBcmciLCJhcmdzIiwiYXJndW1lbnRzIiwiZW5jb2RlIiwicmVwbGFjZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInYiLCJpc0RhdGUiLCJ0b0lTT1N0cmluZyIsImpvaW4iLCJoYXNobWFya0luZGV4IiwicmVsYXRpdmVVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJwYXRoIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJkb2N1bWVudCIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwidGVzdCIsInBheWxvYWQiLCJvcmlnaW5VUkwiLCJtc2llIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50IiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJob3N0Iiwic2VhcmNoIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwiY2hhckF0Iiwid2luZG93IiwibG9jYXRpb24iLCJyZXF1ZXN0VVJMIiwicGFyc2VkIiwibm9ybWFsaXplZE5hbWUiLCJpZ25vcmVEdXBsaWNhdGVPZiIsInNwbGl0IiwibGluZSIsInN1YnN0ciIsImV4ZWMiLCJjYWxsYmFjayIsImFyciIsImZvcm1EYXRhIiwiY29udmVydFZhbHVlIiwiaXNUeXBlZEFycmF5IiwiQmxvYiIsIkJ1ZmZlciIsImJ1aWxkIiwicGFyZW50S2V5IiwiZnVsbEtleSIsImVuZHNXaXRoIiwidG9BcnJheSIsImVsIiwiYXBwZW5kIiwicG9wIiwidGhpbmciLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwicmVzdWx0IiwiRVJSX0JBRF9PUFRJT04iLCJjYWNoZSIsImtpbmRPZiIsInN0ciIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImlzRnVuY3Rpb24iLCJoYXNPd25Qcm9wZXJ0eSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiY29uc3RydWN0b3IiLCJwYXR0ZXJuIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJwaXBlIiwicHJvZHVjdCIsImFzc2lnblZhbHVlIiwiYSIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsIlN0cmluZyIsImxhc3RJbmRleCIsIl9fYXNzaWduIiwicmVxdWVzdF8xIiwibWFpbExpc3RzTWVtYmVycyIsIm1haWxMaXN0TWVtYmVyc18xIiwiZG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJkb21haW5zQ3JlZGVudGlhbHNfMSIsImRvbWFpblRlbXBsYXRlc0NsaWVudCIsImRvbWFpbnNUZW1wbGF0ZXNfMSIsImRvbWFpblRhZ3NDbGllbnQiLCJkb21haW5zVGFnc18xIiwibXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uXzEiLCJkb21haW5zIiwiZG9tYWluc18xIiwid2ViaG9va3MiLCJ3ZWJob29rc18xIiwiZXZlbnRzIiwiZXZlbnRzXzEiLCJzdGF0cyIsInN0YXRzXzEiLCJzdXBwcmVzc2lvbnMiLCJzdXBwcmVzc2lvbnNfMSIsIm1lc3NhZ2VzIiwibWVzc2FnZXNfMSIsInJvdXRlcyIsInJvdXRlc18xIiwiaXBzIiwiaXBzXzEiLCJpcF9wb29scyIsImlwX3Bvb2xzXzEiLCJsaXN0cyIsImxpc3RzXzEiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlXzEiLCJOYXZpZ2F0aW9uVGhydVBhZ2VzIiwicGFnZVVybCIsInVybFNlcGFyYXRvciIsIml0ZXJhdG9yTmFtZSIsInNlYXJjaFBhcmFtcyIsIlVSTCIsInBhZ2VWYWx1ZSIsIml0ZXJhdG9yUG9zaXRpb24iLCJoYXMiLCJnZXQiLCJwYWdlIiwiZW50cmllcyIsImJvZHkiLCJwYWdpbmciLCJyZWR1Y2UiLCJhY2MiLCJfYSIsIl90aGlzIiwicGFyc2VQYWdlIiwiY2xpZW50VXJsIiwicXVlcnkiLCJxdWVyeUNvcHkiLCJ1cGRhdGVkUXVlcnkiLCJNb2RlbCIsInVwZGF0ZVVybEFuZFF1ZXJ5IiwiX2IiLCJwYXJzZUxpc3QiLCJlcnJvcl8xIiwicmVjZWl2aW5nIiwic2VuZGluZyIsInJlcXVpcmVfdGxzIiwic2tpcF92ZXJpZmljYXRpb24iLCJzdGF0ZSIsIndpbGRjYXJkIiwic3BhbV9hY3Rpb24iLCJjcmVhdGVkX2F0Iiwic210cF9wYXNzd29yZCIsInNtdHBfbG9naW4iLCJyZWNlaXZpbmdfZG5zX3JlY29yZHMiLCJzZW5kaW5nX2Ruc19yZWNvcmRzIiwiZG9tYWluQ3JlZGVudGlhbHMiLCJkb21haW5UZW1wbGF0ZXMiLCJkb21haW5UYWdzIiwiRG9tYWluQ2xpZW50IiwiaXRlbXMiLCJtYXAiLCJpdGVtIiwiRG9tYWluIiwidHJhY2tpbmciLCJyZXMiLCJwYXJzZURvbWFpbkxpc3QiLCJfcGFyc2VEb21haW4iLCJwb3N0T2JqIiwiZm9yY2VfZGtpbV9hdXRob3JpdHkiLCJwb3N0V2l0aEZEIiwicHV0IiwiZGVsZXRlIiwiX3BhcnNlTWVzc2FnZSIsImNvbm5lY3Rpb24iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwiYWN0aXZlIiwicHV0V2l0aEZEIiwiX3BhcnNlVHJhY2tpbmdVcGRhdGUiLCJpcCIsInBvb2xfaWQiLCJyZXBsYWNlbWVudCIsInNlbGYiLCJka2ltU2VsZWN0b3IiLCJ3ZWJQcmVmaXgiLCJiYXNlUm91dGUiLCJEb21haW5DcmVkZW50aWFsc0NsaWVudCIsInRvdGFsQ291bnQiLCJ0b3RhbF9jb3VudCIsInNwZWMiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJjcmVkZW50aWFsc0xvZ2luIiwiX3BhcnNlRGVsZXRlZFJlc3BvbnNlIiwidGFnSW5mbyIsInRhZyIsInRhZ1N0YXRpc3RpY0luZm8iLCJzdGFydCIsImVuZCIsInJlc29sdXRpb24iLCJzdGF0IiwidGltZSIsIl9zdXBlciIsIl9fZXh0ZW5kcyIsIkRvbWFpblRhZ3NDbGllbnQiLCJEb21haW5UYWciLCJwYWdlcyIsInBhcnNlUGFnZUxpbmtzIiwiRG9tYWluVGFnU3RhdGlzdGljIiwicmVxdWVzdExpc3RXaXRoUGFnZXMiLCJfcGFyc2VUYWdTdGF0aXN0aWMiLCJOYXZpZ2F0aW9uVGhydVBhZ2VzXzEiLCJkb21haW5UZW1wbGF0ZUZyb21BUEkiLCJjcmVhdGVkQXQiLCJjcmVhdGVkQnkiLCJ2ZXJzaW9ucyIsIkRvbWFpblRlbXBsYXRlc0NsaWVudCIsIkRvbWFpblRlbXBsYXRlSXRlbSIsInRlbXBsYXRlIiwidGVtcGxhdGVOYW1lIiwidGVtcGxhdGVWZXJzaW9uIiwiZCIsInBhcnNlQ3JlYXRpb25SZXNwb25zZSIsInBhcnNlTXV0YXRpb25SZXNwb25zZSIsInBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UiLCJwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlIiwicGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZSIsInBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMiLCJib2R5TWVzc2FnZSIsImRldGFpbHMiLCJFdmVudENsaWVudCIsIkZvcm1EYXRhQ29uc3RydWN0b3IiLCJGb3JtRGF0YUJ1aWxkZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYWRkRmlsZXNUb0ZEIiwiYWRkTWltZURhdGFUb0ZEIiwiYWRkQ29tbW9uUHJvcGVydHlUb0ZEIiwiZm9ybURhdGFJbnN0YW5jZSIsImdldEhlYWRlcnMiLCJmaWxlbmFtZSIsImtub3duTGVuZ3RoIiwibm9kZUZvcm1EYXRhIiwicHJlcGFyZWREYXRhIiwicHJvcGVydHlOYW1lIiwiYXBwZW5kRmlsZVRvRkQiLCJvcmlnaW5hbEtleSIsIm9iakRhdGEiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImlzTm9kZUZvcm1EYXRhIiwiTWFpbGd1biIsImNsaWVudF8xIiwiU3VwcHJlc3Npb25Nb2RlbHMiLCJJcFBvb2xzQ2xpZW50IiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJwb29sSWQiLCJwYXRjaFdpdGhGRCIsIklwc0NsaWVudCIsInBhcnNlSXBzUmVzcG9uc2UiLCJtZW1iZXJzIiwiTGlzdHNDbGllbnQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwibWFpbExpc3RBZGRyZXNzIiwibGlzdCIsInBvc3QiLCJwYXJzZVZhbGlkYXRpb25SZXN1bHQiLCJNYWlsTGlzdHNNZW1iZXJzIiwibmV3RGF0YSIsInZhcnMiLCJzdWJzY3JpYmVkIiwibWFpbExpc3RNZW1iZXJBZGRyZXNzIiwibWVtYmVyIiwicmVxRGF0YSIsImNoZWNrQW5kVXBkYXRlRGF0YSIsInVwc2VydCIsIk1lc3NhZ2VzQ2xpZW50IiwieWVzTm9Qcm9wZXJ0aWVzIiwiU2V0IiwiX3BhcnNlUmVzcG9uc2UiLCJtb2RpZmllZERhdGEiLCJwcmVwYXJlQm9vbGVhblZhbHVlcyIsInJlc3BvbnNlU3RhdHVzQ29kZSIsInF1YW50aXR5IiwicmVjb3Jkc1Byb2Nlc3NlZCIsInJlY29yZHNfcHJvY2Vzc2VkIiwiZG93bmxvYWRfdXJsIiwiZG93bmxvYWRVcmwiLCJjc3YiLCJqc29uIiwic3VtbWFyeSIsImNhdGNoQWxsIiwiY2F0Y2hfYWxsIiwiZGVsaXZlcmFibGUiLCJkb05vdFNlbmQiLCJkb19ub3Rfc2VuZCIsInVuZGVsaXZlcmFibGUiLCJ1bmtub3duIiwicmlzayIsImhpZ2giLCJsb3ciLCJtZWRpdW0iLCJNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQiLCJqb2JzIiwiam9iIiwiTXVsdGlwbGVWYWxpZGF0aW9uSm9iIiwidG90YWwiLCJsaXN0SWQiLCJtdWx0aXBsZVZhbGlkYXRpb25EYXRhIiwibXVsdGlwbGVWYWxpZGF0aW9uRmlsZSIsImZpbGUiLCJoYW5kbGVSZXNwb25zZSIsImZvcm1EYXRhQnVpbGRlciIsImZvcm1EYXRhQnVpbGRlcl8xIiwiUmVxdWVzdCIsIm9uQ2FsbE9wdGlvbnMiLCJiYXNpYyIsImJhc2U2NCIsIm9uQ2FsbEhlYWRlcnMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1cmxWYWx1ZSIsImF4aW9zXzEiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsIl9kIiwiZXJyb3JSZXNwb25zZSIsImVycl8xIiwiX2MiLCJnZXRSZXNwb25zZUJvZHkiLCJhZGREZWZhdWx0SGVhZGVycyIsInJlcXVlc3RPcHRpb25zIiwiY29tbWFuZCIsImNyZWF0ZUZvcm1EYXRhIiwiUm91dGVzQ2xpZW50Iiwicm91dGUiLCJTdGF0c0NsaWVudCIsImFycmF5V2l0aFBhaXJzIiwiY3VycmVudFBhaXIiLCJyZXBlYXRlZFByb3BlcnR5IiwiU3RhdHMiLCJwcmVwYXJlU2VhcmNoUGFyYW1zIiwiX3BhcnNlU3RhdHMiLCJjcmVhdGVPcHRpb25zIiwiU3VwcHJlc3Npb25zXzEiLCJCT1VOQ0VTIiwiYWRkcmVzcyIsIlN1cHByZXNzaW9uIiwiQ09NUExBSU5UUyIsIlVOU1VCU0NSSUJFUyIsInRhZ3MiLCJXSElURUxJU1RTIiwibW9kZWxzIiwiTWFwIiwic2V0IiwiQm91bmNlIiwiQ29tcGxhaW50IiwiVW5zdWJzY3JpYmUiLCJXaGl0ZUxpc3QiLCJTdXBwcmVzc2lvbkNsaWVudCIsInByZXBhcmVSZXNwb25zZSIsImNoZWNrVHlwZSIsIm1vZGVsIiwiX3BhcnNlSXRlbSIsInBvc3REYXRhIiwiY3JlYXRlV2hpdGVMaXN0IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiVmFsaWRhdGVDbGllbnQiLCJXZWJob29rQ2xpZW50Iiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVybHMiLCJXZWJob29rIiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwiX3BhcnNlV2ViaG9va1Rlc3QiLCJyb290IiwiZnJlZUV4cG9ydHMiLCJmcmVlR2xvYmFsIiwiZyIsImdsb2JhbCIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIlRBQkxFIiwiUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyIsImlucHV0IiwicGFkZGluZyIsIm91dHB1dCIsImJpdFN0b3JhZ2UiLCJiaXRDb3VudGVyIiwiZnJvbUNoYXJDb2RlIiwibm9ybWFsaXplIiwic3RyQXJyYXkiLCJyZXN1bHRBcnJheSIsImZpcnN0IiwiY29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJubWQiLCJwYXRocyIsImNoaWxkcmVuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
2
|
+
define((()=>(()=>{var t={646:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(n(903)),i=o(n(929)),a=o(n(741)),u=o(n(338)),c=o(n(280)),l=o(n(778)),f=o(n(869)),p=o(n(240)),h=o(n(641)),d=o(n(734)),y=o(n(83)),b=o(n(310)),m=o(n(766)),v=o(n(853)),g=o(n(61)),w=o(n(780)),_=o(n(513)),O=function(t,e){var n=r({},t);if(n.url||(n.url="https://api.mailgun.net"),!n.username)throw new Error('Parameter "username" is required');if(!n.key)throw new Error('Parameter "key" is required');this.request=new s.default(n,e);var o=new m.default(this.request),O=new v.default(this.request),R=new w.default(this.request),S=new _.default(this.request),x=new g.default(this.request);this.domains=new i.default(this.request,O,R,S),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new c.default(this.request),this.messages=new f.default(this.request),this.routes=new p.default(this.request),this.ips=new d.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new b.default(this.request,o),this.validate=new h.default(this.request,x)};e.default=O},975:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=i(n(78)),u=i(n(258)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,n,r){var o=new URL(e).searchParams,s=e&&"string"==typeof e&&e.split(n).pop()||"",i=null;return r&&(i=o.has(r)?o.get(r):void 0),{id:t,page:"?"===n?"?".concat(s):s,iteratorPosition:i,url:e}},t.prototype.parsePageLinks=function(t,e,n){var r=this;return Object.entries(t.body.paging).reduce((function(t,o){var s=o[0],i=o[1];return t[s]=r.parsePage(s,i,e,n),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var n=t,o=r({},e);return o.page&&(n=(0,a.default)(t,o.page),delete o.page),{url:n,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,n){return o(this,void 0,void 0,(function(){var r,o,i,a;return s(this,(function(s){switch(s.label){case 0:return r=this.updateUrlAndQuery(t,e),o=r.url,i=r.updatedQuery,this.request?[4,this.request.get(o,i)]:[3,2];case 1:return a=s.sent(),[2,this.parseList(a,n)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},929:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Domain=void 0;var s=o(n(78)),i=o(n(258)),a=function(t,e,n){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=n||null};e.Domain=a;var u=function(){function t(t,e,n,r){this.request=t,this.domainCredentials=e,this.domainTemplates=n,this.domainTags=r}return t.prototype._parseMessage=function(t){return t.body},t.prototype.parseDomainList=function(t){return t.body&&t.body.items?t.body.items.map((function(t){return new a(t)})):[]},t.prototype._parseDomain=function(t){return new a(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e.parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/".concat(t)).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,n=r({},t);return"force_dkim_authority"in n&&"boolean"==typeof n.force_dkim_authority&&(n.force_dkim_authority="true"===n.force_dkim_authority.toString()?"true":"false"),this.request.postWithFD("/v3/domains",n).then((function(t){return e._parseDomain(t)}))},t.prototype.verify=function(t){var e=this;return this.request.put("/v3/domains/".concat(t,"/verify")).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/".concat(t)).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/".concat(t,"/connection")).then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/".concat(t,"/connection"),e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,s.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,n){var r=this;if("boolean"==typeof(null==n?void 0:n.active))throw new i.default({status:400,statusText:"Received boolean value for active property",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",t,"tracking",e),n).then((function(t){return r._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,s.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,s.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var n="";if(e.pool_id&&e.ip)throw new i.default({status:400,statusText:"Too much data for replacement",body:{message:"Please specify either pool_id or ip (not both)"}});return e.pool_id?n="?pool_id=".concat(e.pool_id):e.ip&&(n="?ip=".concat(e.ip)),this.request.delete((0,s.default)("/v3/domains",t,"ips","ip_pool",n))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_authority"),{},{query:"self=".concat(e.self)}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_selector"),{},{query:"dkim_selector=".concat(e.dkimSelector)}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/".concat(t,"/web_prefix"),{},{query:"web_prefix=".concat(e.webPrefix)}).then((function(t){return t}))},t}();e.default=u},853:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(78)),s=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var n=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return n._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var n=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.update=function(t,e,n){var r=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),n).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var n=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return n._parseDeletedResponse(t)}))},t}();e.default=s},513:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTagStatistic=e.DomainTag=void 0;var c=u(n(78)),l=u(n(975)),f=function(t){this.tag=t.tag,this.description=t.description,this["first-seen"]=new Date(t["first-seen"]),this["last-seen"]=new Date(t["last-seen"])};e.DomainTag=f;var p=function(t){this.tag=t.body.tag,this.description=t.body.description,this.start=new Date(t.body.start),this.end=new Date(t.body.end),this.resolution=t.body.resolution,this.stats=t.body.stats.map((function(t){return s(s({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=p;var h=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/",n}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","tag"),e.status=t.status,e},e.prototype._parseTagStatistic=function(t){return new p(t)},e.prototype.list=function(t,e){return i(this,void 0,void 0,(function(){return a(this,(function(n){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/tags"),e)]}))}))},e.prototype.get=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new f(t.body)}))},e.prototype.update=function(t,e,n){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),n).then((function(t){return t.body}))},e.prototype.destroy=function(t,e){return this.request.delete("".concat(this.baseRoute).concat(t,"/tags/").concat(e)).then((function(t){return{message:t.body.message,status:t.status}}))},e.prototype.statistic=function(t,e,n){var r=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),n).then((function(t){return r._parseTagStatistic(t)}))},e.prototype.countries=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},e.prototype.providers=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},e.prototype.devices=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},e}(l.default);e.default=h},780:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTemplateItem=void 0;var c=u(n(78)),l=u(n(975)),f=function(t){this.name=t.name,this.description=t.description,this.createdAt=t.createdAt?new Date(t.createdAt):"",this.createdBy=t.createdBy,this.id=t.id,t.version&&(this.version=t.version,t.version.createdAt&&(this.version.createdAt=new Date(t.version.createdAt))),t.versions&&t.versions.length&&(this.versions=t.versions.map((function(t){var e=s({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=f;var p=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/",n}return o(e,t),e.prototype.parseCreationResponse=function(t){return new f(t.body.template)},e.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new f(t.body.template)),e},e.prototype.parseMutationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.templateName=t.body.template.name),e},e.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},e.prototype.parseMutateTemplateVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body.template&&(e.templateName=t.body.template.name,e.templateVersion={tag:t.body.template.version.tag}),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","p"),e.status=t.status,e},e.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new f(t.body.template),e.pages=this.parsePageLinks(t,"?","p"),e},e.prototype.list=function(t,e){return i(this,void 0,void 0,(function(){return a(this,(function(n){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,n){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),n).then((function(t){return new f(t.body.template)}))},e.prototype.create=function(t,e){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return n.parseCreationResponse(t)}))},e.prototype.update=function(t,e,n){var r=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),n).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return n.parseMutationResponse(t)}))},e.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},e.prototype.createVersion=function(t,e,n){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),n).then((function(t){return r.parseCreationVersionResponse(t)}))},e.prototype.getVersion=function(t,e,n){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n)).then((function(t){return new f(t.body.template)}))},e.prototype.updateVersion=function(t,e,n,r){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n),r).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,n){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n)).then((function(t){return r.parseMutateTemplateVersionResponse(t)}))},e.prototype.listVersions=function(t,e,n){var r=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),n).then((function(t){return r.parseListTemplateVersions(t)}))},e}(l.default);e.default=p},258:function(t,e){"use strict";var n,r=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var n=e.status,r=e.statusText,o=e.message,s=e.body,i=void 0===s?{}:s,a=this,u="",c="";return"string"==typeof i?u=i:(u=null==i?void 0:i.message,c=null==i?void 0:i.error),(a=t.call(this)||this).stack="",a.status=n,a.message=o||c||r,a.details=u,a.type="MailgunAPIError",a}return r(e,t),e}(Error);e.default=o},741:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=a(n(78)),c=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"/"),e.status=t.status,e},e.prototype.get=function(t,e){return s(this,void 0,void 0,(function(){return i(this,(function(n){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(n(975)).default);e.default=c},335:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.FormDataConstructor=t}return t.prototype.createFormData=function(t){var e=this;if(!t)throw new Error("Please provide data object");return Object.keys(t).filter((function(e){return t[e]})).reduce((function(n,r){return["attachment","inline","multipleValidationFile"].includes(r)?(e.addFilesToFD(r,t[r],n),n):"message"===r?(e.addMimeDataToFD(r,t[r],n),n):(e.addCommonPropertyToFD(r,t[r],n),n)}),new this.FormDataConstructor)},t.prototype.isNodeFormData=function(t){return void 0!==t.getHeaders},t.prototype.getAttachmentOptions=function(t){if("object"!=typeof t||this.isStream(t))return{};var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})},t.prototype.addMimeDataToFD=function(t,e,n){if(Buffer.isBuffer(e)||"string"==typeof e){var r=n,o="string"==typeof e?Buffer.from(e):e;r.append(t,o,{filename:"MimeMessage"})}else{n.append(t,e,"MimeMessage")}},t.prototype.addFilesToFD=function(t,e,n){var r=this,o=function(t,e,n){var o="multipleValidationFile"===t?"file":t,s=r.isStream(e)?e:e.data,i=r.getAttachmentOptions(e);r.isNodeFormData(n)?n.append(o,s,i):n.append(o,s,i.filename)};Array.isArray(e)?e.forEach((function(e){o(t,e,n)})):o(t,e,n)},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.addCommonPropertyToFD=function(t,e,n){Array.isArray(e)?e.forEach((function(e){n.append(t,e)})):null!=e&&n.append(t,e)},t}();e.default=r},530:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(646)),s=function(){function t(t){this.formData=t}return Object.defineProperty(t,"default",{get:function(){return this},enumerable:!1,configurable:!0}),t.prototype.client=function(t){return new o.default(t,this.formData)},t}();e.default=s},98:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuppressionModels=void 0,function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={}))},83:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t){this.request=t}return t.prototype.list=function(){var t=this;return this.request.get("/v1/ip_pools").then((function(e){return t.parseIpPoolsResponse(e)}))},t.prototype.create=function(t){return r(this,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=r.sent(),[2,n({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return r(this,void 0,void 0,(function(){var r;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return r=o.sent(),[2,n({status:r.status},r.body)]}}))}))},t.prototype.delete=function(t,e){return r(this,void 0,void 0,(function(){var r;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return r=o.sent(),[2,n({status:r.status},r.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return n({status:t.status},t.body)},t}();e.default=s},734:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t){this.request=t}return t.prototype.list=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=n.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=n.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},310:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r.members=n,r}return o(e,t),e.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:s(s({},e),{created_at:new Date(1e3*e.created_at)})}},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e.status=t.status,e},e.prototype.list=function(t){return i(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),t)]}))}))},e.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},e.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},e.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},e.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},e.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return s({status:t.status},t.body)}))},e.prototype.validationResult=function(t){var e=this;return this.request.get("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return e.parseValidationResult(t.status,t.body)}))},e.prototype.cancelValidation=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return{status:t.status,message:t.body.message}}))},e}(u(n(975)).default);e.default=c},766:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n}return o(e,t),e.prototype.checkAndUpdateData=function(t){var e=s({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e},e.prototype.listMembers=function(t,e){return i(this,void 0,void 0,(function(){return a(this,(function(n){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e)]}))}))},e.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},e.prototype.createMember=function(t,e){var n=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),n).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var n={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members.json"),n).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,n){var r=this.checkAndUpdateData(n);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),r).then((function(t){return t.body.member}))},e.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},e}(u(n(975)).default);e.default=c},869:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(n(258)),i=function(){function t(t){this.request=t}return t.prototype.prepareBooleanValues=function(t){var e=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!t||0===Object.keys(t).length)throw new s.default({status:400,message:"Message data object can not be empty"});return Object.keys(t).reduce((function(n,r){return e.has(r)&&"boolean"==typeof t[r]?n[r]=t[r]?"yes":"no":n[r]=t[r],n}),{})},t.prototype._parseResponse=function(t){return r({status:t.status},t.body)},t.prototype.create=function(t,e){if(e.message)return this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse);var n=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),n).then(this._parseResponse)},t}();e.default=i},61:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},s.apply(this,arguments)},i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultipleValidationJob=void 0;var c=u(n(975)),l=function(t,e){var n,r;this.createdAt=new Date(t.created_at),this.id=t.id,this.quantity=t.quantity,this.recordsProcessed=t.records_processed,this.status=t.status,this.responseStatusCode=e,t.download_url&&(this.downloadUrl={csv:null===(n=t.download_url)||void 0===n?void 0:n.csv,json:null===(r=t.download_url)||void 0===r?void 0:r.json}),t.summary&&(this.summary={result:{catchAll:t.summary.result.catch_all,deliverable:t.summary.result.deliverable,doNotSend:t.summary.result.do_not_send,undeliverable:t.summary.result.undeliverable,unknown:t.summary.result.unknown},risk:{high:t.summary.risk.high,low:t.summary.risk.low,medium:t.summary.risk.medium,unknown:t.summary.risk.unknown}})};e.MultipleValidationJob=l;var f=function(t){function e(e){var n=t.call(this)||this;return n.request=e,n}return o(e,t),e.prototype.handleResponse=function(t){return s({status:t.status},null==t?void 0:t.body)},e.prototype.parseList=function(t){var e={};return e.jobs=t.body.jobs.map((function(e){return new l(e,t.status)})),e.pages=this.parsePageLinks(t,"?","pivot"),e.total=t.body.total,e.status=t.status,e},e.prototype.list=function(t){return i(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("/v4/address/validate/bulk",t)]}))}))},e.prototype.get=function(t){return i(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=n.sent(),[2,new l(e.body,e.status)]}}))}))},e.prototype.create=function(t,e){return i(this,void 0,void 0,(function(){var n,r;return a(this,(function(o){switch(o.label){case 0:return delete(n=s({multipleValidationFile:s({},null==e?void 0:e.file)},e)).file,[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),n)];case 1:return r=o.sent(),[2,this.handleResponse(r)]}}))}))},e.prototype.destroy=function(t){return i(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=n.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=f},903:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&o(e,t,n);return s(e,t),e},a=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var l=i(n(501)),f=c(n(78)),p=i(n(218)),h=c(n(258)),d=c(n(335)),y=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=this.makeHeadersFromObject(t.headers),this.formDataBuilder=new d.default(e),this.maxBodyLength=52428800}return t.prototype.request=function(t,e,n){var o,s,i;return a(this,void 0,void 0,(function(){var a,c,l,d,y,b,m,v;return u(this,(function(u){switch(u.label){case 0:null==(a=r({},n))||delete a.headers,c=this.joinAndTransformHeaders(n),l=r({},a),(null==a?void 0:a.query)&&Object.getOwnPropertyNames(null==a?void 0:a.query).length>0&&(l.params=new URLSearchParams(a.query),delete l.query),(null==a?void 0:a.body)&&(d=null==a?void 0:a.body,l.data=d,delete l.body),b=(0,f.default)(this.url,e),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,p.default.request(r(r({method:t.toLocaleUpperCase(),timeout:this.timeout,url:b,headers:c},l),{maxBodyLength:this.maxBodyLength}))];case 2:return y=u.sent(),[3,4];case 3:throw m=u.sent(),v=m,new h.default({status:(null===(o=null==v?void 0:v.response)||void 0===o?void 0:o.status)||400,statusText:(null===(s=null==v?void 0:v.response)||void 0===s?void 0:s.statusText)||v.code,body:(null===(i=null==v?void 0:v.response)||void 0===i?void 0:i.data)||v.message});case 4:return[4,this.getResponseBody(y)];case 5:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(n){if(e={body:{},status:null==t?void 0:t.status},"string"==typeof t.data){if("Mailgun Magnificent API"===t.data)throw new h.default({status:400,statusText:"Incorrect url",body:t.data});e.body={message:t.data}}else e.body=t.data;return[2,e]}))}))},t.prototype.joinAndTransformHeaders=function(t){var e=new p.AxiosHeaders,n=l.encode("".concat(this.username,":").concat(this.key));e.setAuthorization("Basic ".concat(n)),e.set(this.headers);var r=t&&t.headers,o=this.makeHeadersFromObject(r);return e.set(o),e},t.prototype.makeHeadersFromObject=function(t){void 0===t&&(t={});var e=new p.AxiosHeaders;return e=Object.entries(t).reduce((function(t,e){var n=e[0],r=e[1];return t.set(n,r),t}),e)},t.prototype.query=function(t,e,n,o){return this.request(t,e,r({query:n},o))},t.prototype.command=function(t,e,n,o,s){void 0===s&&(s=!0);var i={};s&&(i={"Content-Type":"application/x-www-form-urlencoded"});var a=r(r(r({},i),{body:n}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,n){return this.query("get",t,e,n)},t.prototype.post=function(t,e,n){return this.command("post",t,e,n)},t.prototype.postWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("post",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("put",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("patch",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,n){return this.command("put",t,e,n)},t.prototype.delete=function(t,e){return this.command("delete",t,e)},t}();e.default=y},240:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/".concat(t)).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/".concat(t)).then((function(t){return t.body}))},t}();e.default=n},338:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__spreadArray||function(t,e,n){if(n||2===arguments.length)for(var r,o=0,s=e.length;o<s;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=s(n(78)),a=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=r({},t);return e.time=new Date(t.time),e}))},u=function(){function t(t){this.request=t}return t.prototype.prepareSearchParams=function(t){var e=[];return"object"==typeof t&&Object.keys(t).length&&(e=Object.entries(t).reduce((function(t,e){var n=e[0],r=e[1];if(Array.isArray(r)&&r.length){var s=r.map((function(t){return[n,t]}));return o(o([],t,!0),s,!0)}return t.push([n,r]),t}),[])),e},t.prototype._parseStats=function(t){return new a(t.body)},t.prototype.getDomain=function(t,e){var n=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),n).then(this._parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this._parseStats)},t}();e.default=u},280:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},a=this&&this.__spreadArray||function(t,e,n){if(n||2===arguments.length)for(var r,o=0,s=e.length;o<s;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.WhiteList=e.Unsubscribe=e.Complaint=e.Bounce=e.Suppression=void 0;var c=u(n(78)),l=n(98),f=u(n(258)),p=u(n(975)),h={headers:{"Content-Type":"application/json"}},d=function(t){this.type=t};e.Suppression=d;var y=function(t){function e(e){var n=t.call(this,l.SuppressionModels.BOUNCES)||this;return n.address=e.address,n.code=+e.code,n.error=e.error,n.created_at=new Date(e.created_at),n}return o(e,t),e}(d);e.Bounce=y;var b=function(t){function e(e){var n=t.call(this,l.SuppressionModels.COMPLAINTS)||this;return n.address=e.address,n.created_at=new Date(e.created_at),n}return o(e,t),e}(d);e.Complaint=b;var m=function(t){function e(e){var n=t.call(this,l.SuppressionModels.UNSUBSCRIBES)||this;return n.address=e.address,n.tags=e.tags,n.created_at=new Date(e.created_at),n}return o(e,t),e}(d);e.Unsubscribe=m;var v=function(t){function e(e){var n=t.call(this,l.SuppressionModels.WHITELISTS)||this;return n.value=e.value,n.reason=e.reason,n.createdAt=new Date(e.createdAt),n}return o(e,t),e}(d);e.WhiteList=v;var g=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.models=new Map,n.models.set("bounces",y),n.models.set("complaints",b),n.models.set("unsubscribes",m),n.models.set("whitelists",v),n}return o(e,t),e.prototype.parseList=function(t,e){var n={};return n.items=t.body.items.map((function(t){return new e(t)})),n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e){if(Array.isArray(e))throw new f.default({status:400,statusText:"Data property should be an object",body:{message:"Whitelist's creation process does not support multiple creations. Data property should be an object"}});return this.request.postWithFD((0,c.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},e.prototype.checkType=function(t){if(!this.models.has(t))throw new f.default({status:400,statusText:"Unknown type value",body:{message:"Type may be only one of [bounces, complaints, unsubscribes, whitelists]"}})},e.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},e.prototype.list=function(t,e,n){return s(this,void 0,void 0,(function(){var r;return i(this,(function(o){return this.checkType(e),r=this.models.get(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),n,r)]}))}))},e.prototype.get=function(t,e,n){var r=this;this.checkType(e);var o=this.models.get(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(n))).then((function(t){return r._parseItem(t.body,o)}))},e.prototype.create=function(t,e,n){var r;return this.checkType(e),"whitelists"===e?this.createWhiteList(t,n):(r=Array.isArray(n)?a([],n,!0):[n],this.request.post((0,c.default)("v3",t,e),JSON.stringify(r),h).then(this.prepareResponse))},e.prototype.destroy=function(t,e,n){return this.checkType(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(n))).then((function(t){return{message:t.body.message,value:t.body.value||"",address:t.body.address||"",status:t.status}}))},e}(p.default);e.default=g,t.exports=g},641:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{u(r.next(t))}catch(t){s(t)}}function a(t){try{u(r.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,n.sent().body]}}))}))},t}();e.default=o},778:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(78)),s=function(t,e){this.id=t,this.url=e},i=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var n,r=null===(n=null==e?void 0:e.body)||void 0===n?void 0:n.webhook,o=null==r?void 0:r.url;return o||(o=(null==r?void 0:r.urls)&&r.urls.length?r.urls[0]:void 0),new s(t,o)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,n,r){return void 0===r&&(r=!1),r?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:n}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:n}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,n){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:n}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=i},501:function(t,e,n){var r;t=n.nmd(t),function(o){var s=e,i=(t&&t.exports,"object"==typeof n.g&&n.g);i.global!==i&&i.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,f={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&u("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,s=t.length%3,i="",a=-1,l=t.length-s;++a<l;)e=t.charCodeAt(a)<<16,n=t.charCodeAt(++a)<<8,r=t.charCodeAt(++a),i+=c.charAt((o=e+n+r)>>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==s?(e=t.charCodeAt(a)<<8,n=t.charCodeAt(++a),i+=c.charAt((o=e+n)>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==s&&(o=t.charCodeAt(a),i+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),i},decode:function(t){var e=(t=String(t).replace(l,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&u("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,s="",i=-1;++i<e;)r=c.indexOf(t.charAt(i)),n=o%4?64*n+r:r,o++%4&&(s+=String.fromCharCode(255&n>>(-2*o&6)));return s},version:"1.0.0"};void 0===(r=function(){return f}.call(e,n,e,t))||(t.exports=r)}()},78:function(t,e,n){var r,o,s;s=function(){function t(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var n=t.shift();t[0]=n+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r<t.length;r++){var o=t[r];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(r>0&&(o=o.replace(/^[\/]+/,"")),o=r<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var s=e.join("/"),i=(s=s.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s=i.shift()+(i.length>0?"?":"")+i.join("&")}return function(){return t("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=s():void 0===(o="function"==typeof(r=s)?r.call(e,n,e,t):r)||(t.exports=o)},218:(t,e,n)=>{"use strict";function r(t,e){return function(){return t.apply(e,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:s}=Object,i=(a=Object.create(null),t=>{const e=o.call(t);return a[e]||(a[e]=e.slice(8,-1).toLowerCase())});var a;const u=t=>(t=t.toLowerCase(),e=>i(e)===t),c=t=>e=>typeof e===t,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const h=c("string"),d=c("function"),y=c("number"),b=t=>null!==t&&"object"==typeof t,m=t=>{if("object"!==i(t))return!1;const e=s(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},v=u("Date"),g=u("File"),w=u("Blob"),_=u("FileList"),O=u("URLSearchParams");function R(t,e,{allOwnKeys:n=!1}={}){if(null==t)return;let r,o;if("object"!=typeof t&&(t=[t]),l(t))for(r=0,o=t.length;r<o;r++)e.call(null,t[r],r,t);else{const o=n?Object.getOwnPropertyNames(t):Object.keys(t),s=o.length;let i;for(r=0;r<s;r++)i=o[r],e.call(null,t[i],i,t)}}function S(t,e){e=e.toLowerCase();const n=Object.keys(t);let r,o=n.length;for(;o-- >0;)if(r=n[o],e===r.toLowerCase())return r;return null}const x="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,j=t=>!f(t)&&t!==x;const E=(A="undefined"!=typeof Uint8Array&&s(Uint8Array),t=>A&&t instanceof A);var A;const P=u("HTMLFormElement"),k=(({hasOwnProperty:t})=>(e,n)=>t.call(e,n))(Object.prototype),T=u("RegExp"),q=(t,e)=>{const n=Object.getOwnPropertyDescriptors(t),r={};R(n,((n,o)=>{!1!==e(n,o,t)&&(r[o]=n)})),Object.defineProperties(t,r)},D="abcdefghijklmnopqrstuvwxyz",C="0123456789",F={DIGIT:C,ALPHA:D,ALPHA_DIGIT:D+D.toUpperCase()+C};var L={isArray:l,isArrayBuffer:p,isBuffer:function(t){return null!==t&&!f(t)&&null!==t.constructor&&!f(t.constructor)&&d(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:t=>{const e="[object FormData]";return t&&("function"==typeof FormData&&t instanceof FormData||o.call(t)===e||d(t.toString)&&t.toString()===e)},isArrayBufferView:function(t){let e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&p(t.buffer),e},isString:h,isNumber:y,isBoolean:t=>!0===t||!1===t,isObject:b,isPlainObject:m,isUndefined:f,isDate:v,isFile:g,isBlob:w,isRegExp:T,isFunction:d,isStream:t=>b(t)&&d(t.pipe),isURLSearchParams:O,isTypedArray:E,isFileList:_,forEach:R,merge:function t(){const{caseless:e}=j(this)&&this||{},n={},r=(r,o)=>{const s=e&&S(n,o)||o;m(n[s])&&m(r)?n[s]=t(n[s],r):m(r)?n[s]=t({},r):l(r)?n[s]=r.slice():n[s]=r};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&R(arguments[t],r);return n},extend:(t,e,n,{allOwnKeys:o}={})=>(R(e,((e,o)=>{n&&d(e)?t[o]=r(e,n):t[o]=e}),{allOwnKeys:o}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,e,n,r)=>{t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:(t,e,n,r)=>{let o,i,a;const u={};if(e=e||{},null==t)return e;do{for(o=Object.getOwnPropertyNames(t),i=o.length;i-- >0;)a=o[i],r&&!r(a,t,e)||u[a]||(e[a]=t[a],u[a]=!0);t=!1!==n&&s(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:i,kindOfTest:u,endsWith:(t,e,n)=>{t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;const r=t.indexOf(e,n);return-1!==r&&r===n},toArray:t=>{if(!t)return null;if(l(t))return t;let e=t.length;if(!y(e))return null;const n=new Array(e);for(;e-- >0;)n[e]=t[e];return n},forEachEntry:(t,e)=>{const n=(t&&t[Symbol.iterator]).call(t);let r;for(;(r=n.next())&&!r.done;){const n=r.value;e.call(t,n[0],n[1])}},matchAll:(t,e)=>{let n;const r=[];for(;null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:P,hasOwnProperty:k,hasOwnProp:k,reduceDescriptors:q,freezeMethods:t=>{q(t,((e,n)=>{if(d(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=t[n];d(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(t,e)=>{const n={},r=t=>{t.forEach((t=>{n[t]=!0}))};return l(t)?r(t):r(String(t).split(e)),n},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(t,e)=>(t=+t,Number.isFinite(t)?t:e),findKey:S,global:x,isContextDefined:j,ALPHABET:F,generateString:(t=16,e=F.ALPHA_DIGIT)=>{let n="";const{length:r}=e;for(;t--;)n+=e[Math.random()*r|0];return n},isSpecCompliantForm:function(t){return!!(t&&d(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:t=>{const e=new Array(10),n=(t,r)=>{if(b(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[r]=t;const o=l(t)?[]:{};return R(t,((t,e)=>{const s=n(t,r+1);!f(s)&&(o[e]=s)})),e[r]=void 0,o}}return t};return n(t,0)}};function M(t,e,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}L.inherits(M,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:L.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const N=M.prototype,U={};["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((t=>{U[t]={value:t}})),Object.defineProperties(M,U),Object.defineProperty(N,"isAxiosError",{value:!0}),M.from=(t,e,n,r,o,s)=>{const i=Object.create(N);return L.toFlatObject(t,i,(function(t){return t!==Error.prototype}),(t=>"isAxiosError"!==t)),M.call(i,t.message,e,n,r,o),i.cause=t,i.name=t.name,s&&Object.assign(i,s),i};function B(t){return L.isPlainObject(t)||L.isArray(t)}function W(t){return L.endsWith(t,"[]")?t.slice(0,-2):t}function I(t,e,n){return t?t.concat(e).map((function(t,e){return t=W(t),!n&&e?"["+t+"]":t})).join(n?".":""):e}const V=L.toFlatObject(L,{},null,(function(t){return/^is[A-Z]/.test(t)}));function H(t,e,n){if(!L.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const r=(n=L.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!L.isUndefined(e[t])}))).metaTokens,o=n.visitor||c,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&L.isSpecCompliantForm(e);if(!L.isFunction(o))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(L.isDate(t))return t.toISOString();if(!a&&L.isBlob(t))throw new M("Blob is not supported. Use a Buffer instead.");return L.isArrayBuffer(t)||L.isTypedArray(t)?a&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,n,o){let a=t;if(t&&!o&&"object"==typeof t)if(L.endsWith(n,"{}"))n=r?n:n.slice(0,-2),t=JSON.stringify(t);else if(L.isArray(t)&&function(t){return L.isArray(t)&&!t.some(B)}(t)||(L.isFileList(t)||L.endsWith(n,"[]"))&&(a=L.toArray(t)))return n=W(n),a.forEach((function(t,r){!L.isUndefined(t)&&null!==t&&e.append(!0===i?I([n],r,s):null===i?n:n+"[]",u(t))})),!1;return!!B(t)||(e.append(I(o,n,s),u(t)),!1)}const l=[],f=Object.assign(V,{defaultVisitor:c,convertValue:u,isVisitable:B});if(!L.isObject(t))throw new TypeError("data must be an object");return function t(n,r){if(!L.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),L.forEach(n,(function(n,s){!0===(!(L.isUndefined(n)||null===n)&&o.call(e,n,L.isString(s)?s.trim():s,r,f))&&t(n,r?r.concat(s):[s])})),l.pop()}}(t),e}function z(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function J(t,e){this._pairs=[],t&&H(t,this,e)}const G=J.prototype;function K(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function $(t,e,n){if(!e)return t;const r=n&&n.encode||K,o=n&&n.serialize;let s;if(s=o?o(e,n):L.isURLSearchParams(e)?e.toString():new J(e,n).toString(r),s){const e=t.indexOf("#");-1!==e&&(t=t.slice(0,e)),t+=(-1===t.indexOf("?")?"?":"&")+s}return t}G.append=function(t,e){this._pairs.push([t,e])},G.toString=function(t){const e=t?function(e){return t.call(this,e,z)}:z;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var Q=class InterceptorManager{constructor(){this.handlers=[]}use(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){L.forEach(this.handlers,(function(e){null!==e&&t(e)}))}},X={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Z="undefined"!=typeof URLSearchParams?URLSearchParams:J,Y="undefined"!=typeof FormData?FormData:null;const tt=(()=>{let t;return("undefined"==typeof navigator||"ReactNative"!==(t=navigator.product)&&"NativeScript"!==t&&"NS"!==t)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),et="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts;var nt={isBrowser:!0,classes:{URLSearchParams:Z,FormData:Y,Blob},isStandardBrowserEnv:tt,isStandardBrowserWebWorkerEnv:et,protocols:["http","https","file","blob","url","data"]};function rt(t){function e(t,n,r,o){let s=t[o++];const i=Number.isFinite(+s),a=o>=t.length;if(s=!s&&L.isArray(r)?r.length:s,a)return L.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!i;r[s]&&L.isObject(r[s])||(r[s]=[]);return e(t,n,r[s],o)&&L.isArray(r[s])&&(r[s]=function(t){const e={},n=Object.keys(t);let r;const o=n.length;let s;for(r=0;r<o;r++)s=n[r],e[s]=t[s];return e}(r[s])),!i}if(L.isFormData(t)&&L.isFunction(t.entries)){const n={};return L.forEachEntry(t,((t,r)=>{e(function(t){return L.matchAll(/\w+|\[(\w*)]/g,t).map((t=>"[]"===t[0]?"":t[1]||t[0]))}(t),r,n,0)})),n}return null}const ot={"Content-Type":void 0};const st={transitional:X,adapter:["xhr","http"],transformRequest:[function(t,e){const n=e.getContentType()||"",r=n.indexOf("application/json")>-1,o=L.isObject(t);o&&L.isHTMLForm(t)&&(t=new FormData(t));if(L.isFormData(t))return r&&r?JSON.stringify(rt(t)):t;if(L.isArrayBuffer(t)||L.isBuffer(t)||L.isStream(t)||L.isFile(t)||L.isBlob(t))return t;if(L.isArrayBufferView(t))return t.buffer;if(L.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let s;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return H(t,new nt.classes.URLSearchParams,Object.assign({visitor:function(t,e,n,r){return nt.isNode&&L.isBuffer(t)?(this.append(e,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((s=L.isFileList(t))||n.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return H(s?{"files[]":t}:t,e&&new e,this.formSerializer)}}return o||r?(e.setContentType("application/json",!1),function(t,e,n){if(L.isString(t))try{return(e||JSON.parse)(t),L.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||st.transitional,n=e&&e.forcedJSONParsing,r="json"===this.responseType;if(t&&L.isString(t)&&(n&&!this.responseType||r)){const n=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(t){if(n){if("SyntaxError"===t.name)throw M.from(t,M.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:nt.classes.FormData,Blob:nt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};L.forEach(["delete","get","head"],(function(t){st.headers[t]={}})),L.forEach(["post","put","patch"],(function(t){st.headers[t]=L.merge(ot)}));var it=st;const at=L.toObjectSet(["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"]);const ut=Symbol("internals");function ct(t){return t&&String(t).trim().toLowerCase()}function lt(t){return!1===t||null==t?t:L.isArray(t)?t.map(lt):String(t)}function ft(t,e,n,r,o){return L.isFunction(r)?r.call(this,e,n):(o&&(e=n),L.isString(e)?L.isString(r)?-1!==e.indexOf(r):L.isRegExp(r)?r.test(e):void 0:void 0)}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,e,n){const r=this;function o(t,e,n){const o=ct(e);if(!o)throw new Error("header name must be a non-empty string");const s=L.findKey(r,o);(!s||void 0===r[s]||!0===n||void 0===n&&!1!==r[s])&&(r[s||e]=lt(t))}const s=(t,e)=>L.forEach(t,((t,n)=>o(t,n,e)));return L.isPlainObject(t)||t instanceof this.constructor?s(t,e):L.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z]+$/.test(t.trim())?s((t=>{const e={};let n,r,o;return t&&t.split("\n").forEach((function(t){o=t.indexOf(":"),n=t.substring(0,o).trim().toLowerCase(),r=t.substring(o+1).trim(),!n||e[n]&&at[n]||("set-cookie"===n?e[n]?e[n].push(r):e[n]=[r]:e[n]=e[n]?e[n]+", "+r:r)})),e})(t),e):null!=t&&o(e,t,n),this}get(t,e){if(t=ct(t)){const n=L.findKey(this,t);if(n){const t=this[n];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(t);)e[r[1]]=r[2];return e}(t);if(L.isFunction(e))return e.call(this,t,n);if(L.isRegExp(e))return e.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=ct(t)){const n=L.findKey(this,t);return!(!n||void 0===this[n]||e&&!ft(0,this[n],n,e))}return!1}delete(t,e){const n=this;let r=!1;function o(t){if(t=ct(t)){const o=L.findKey(n,t);!o||e&&!ft(0,n[o],o,e)||(delete n[o],r=!0)}}return L.isArray(t)?t.forEach(o):o(t),r}clear(t){const e=Object.keys(this);let n=e.length,r=!1;for(;n--;){const o=e[n];t&&!ft(0,this[o],o,t,!0)||(delete this[o],r=!0)}return r}normalize(t){const e=this,n={};return L.forEach(this,((r,o)=>{const s=L.findKey(n,o);if(s)return e[s]=lt(r),void delete e[o];const i=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((t,e,n)=>e.toUpperCase()+n))}(o):String(o).trim();i!==o&&delete e[o],e[i]=lt(r),n[i]=!0})),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return L.forEach(this,((n,r)=>{null!=n&&!1!==n&&(e[r]=t&&L.isArray(n)?n.join(", "):n)})),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([t,e])=>t+": "+e)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const n=new this(t);return e.forEach((t=>n.set(t))),n}static accessor(t){const e=(this[ut]=this[ut]={accessors:{}}).accessors,n=this.prototype;function r(t){const r=ct(t);e[r]||(!function(t,e){const n=L.toCamelCase(" "+e);["get","set","has"].forEach((r=>{Object.defineProperty(t,r+n,{value:function(t,n,o){return this[r].call(this,e,t,n,o)},configurable:!0})}))}(n,t),e[r]=!0)}return L.isArray(t)?t.forEach(r):r(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),L.freezeMethods(AxiosHeaders.prototype),L.freezeMethods(AxiosHeaders);var pt=AxiosHeaders;function ht(t,e){const n=this||it,r=e||n,o=pt.from(r.headers);let s=r.data;return L.forEach(t,(function(t){s=t.call(n,s,o.normalize(),e?e.status:void 0)})),o.normalize(),s}function dt(t){return!(!t||!t.__CANCEL__)}function yt(t,e,n){M.call(this,null==t?"canceled":t,M.ERR_CANCELED,e,n),this.name="CanceledError"}L.inherits(yt,M,{__CANCEL__:!0});var bt=nt.isStandardBrowserEnv?{write:function(t,e,n,r,o,s){const i=[];i.push(t+"="+encodeURIComponent(e)),L.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),L.isString(r)&&i.push("path="+r),L.isString(o)&&i.push("domain="+o),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read:function(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function mt(t,e){return t&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}var vt=nt.isStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");let n;function r(n){let r=n;return t&&(e.setAttribute("href",r),r=e.href),e.setAttribute("href",r),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return n=r(window.location.href),function(t){const e=L.isString(t)?r(t):t;return e.protocol===n.protocol&&e.host===n.host}}():function(){return!0};function gt(t,e){let n=0;const r=function(t,e){t=t||10;const n=new Array(t),r=new Array(t);let o,s=0,i=0;return e=void 0!==e?e:1e3,function(a){const u=Date.now(),c=r[i];o||(o=u),n[s]=a,r[s]=u;let l=i,f=0;for(;l!==s;)f+=n[l++],l%=t;if(s=(s+1)%t,s===i&&(i=(i+1)%t),u-o<e)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return o=>{const s=o.loaded,i=o.lengthComputable?o.total:void 0,a=s-n,u=r(a);n=s;const c={loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:u||void 0,estimated:u&&i&&s<=i?(i-s)/u:void 0,event:o};c[e?"download":"upload"]=!0,t(c)}}const wt={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(t){return new Promise((function(e,n){let r=t.data;const o=pt.from(t.headers).normalize(),s=t.responseType;let i;function a(){t.cancelToken&&t.cancelToken.unsubscribe(i),t.signal&&t.signal.removeEventListener("abort",i)}L.isFormData(r)&&(nt.isStandardBrowserEnv||nt.isStandardBrowserWebWorkerEnv)&&o.setContentType(!1);let u=new XMLHttpRequest;if(t.auth){const e=t.auth.username||"",n=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";o.set("Authorization","Basic "+btoa(e+":"+n))}const c=mt(t.baseURL,t.url);function l(){if(!u)return;const r=pt.from("getAllResponseHeaders"in u&&u.getAllResponseHeaders());!function(t,e,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(new M("Request failed with status code "+n.status,[M.ERR_BAD_REQUEST,M.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}((function(t){e(t),a()}),(function(t){n(t),a()}),{data:s&&"text"!==s&&"json"!==s?u.response:u.responseText,status:u.status,statusText:u.statusText,headers:r,config:t,request:u}),u=null}if(u.open(t.method.toUpperCase(),$(c,t.params,t.paramsSerializer),!0),u.timeout=t.timeout,"onloadend"in u?u.onloadend=l:u.onreadystatechange=function(){u&&4===u.readyState&&(0!==u.status||u.responseURL&&0===u.responseURL.indexOf("file:"))&&setTimeout(l)},u.onabort=function(){u&&(n(new M("Request aborted",M.ECONNABORTED,t,u)),u=null)},u.onerror=function(){n(new M("Network Error",M.ERR_NETWORK,t,u)),u=null},u.ontimeout=function(){let e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const r=t.transitional||X;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(new M(e,r.clarifyTimeoutError?M.ETIMEDOUT:M.ECONNABORTED,t,u)),u=null},nt.isStandardBrowserEnv){const e=(t.withCredentials||vt(c))&&t.xsrfCookieName&&bt.read(t.xsrfCookieName);e&&o.set(t.xsrfHeaderName,e)}void 0===r&&o.setContentType(null),"setRequestHeader"in u&&L.forEach(o.toJSON(),(function(t,e){u.setRequestHeader(e,t)})),L.isUndefined(t.withCredentials)||(u.withCredentials=!!t.withCredentials),s&&"json"!==s&&(u.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&u.addEventListener("progress",gt(t.onDownloadProgress,!0)),"function"==typeof t.onUploadProgress&&u.upload&&u.upload.addEventListener("progress",gt(t.onUploadProgress)),(t.cancelToken||t.signal)&&(i=e=>{u&&(n(!e||e.type?new yt(null,t,u):e),u.abort(),u=null)},t.cancelToken&&t.cancelToken.subscribe(i),t.signal&&(t.signal.aborted?i():t.signal.addEventListener("abort",i)));const f=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(c);f&&-1===nt.protocols.indexOf(f)?n(new M("Unsupported protocol "+f+":",M.ERR_BAD_REQUEST,t)):u.send(r||null)}))}};L.forEach(wt,((t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch(t){}Object.defineProperty(t,"adapterName",{value:e})}}));var _t=t=>{t=L.isArray(t)?t:[t];const{length:e}=t;let n,r;for(let o=0;o<e&&(n=t[o],!(r=L.isString(n)?wt[n.toLowerCase()]:n));o++);if(!r){if(!1===r)throw new M(`Adapter ${n} is not supported by the environment`,"ERR_NOT_SUPPORT");throw new Error(L.hasOwnProp(wt,n)?`Adapter '${n}' is not available in the build`:`Unknown adapter '${n}'`)}if(!L.isFunction(r))throw new TypeError("adapter is not a function");return r};function Ot(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new yt(null,t)}function Rt(t){Ot(t),t.headers=pt.from(t.headers),t.data=ht.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1);return _t(t.adapter||it.adapter)(t).then((function(e){return Ot(t),e.data=ht.call(t,t.transformResponse,e),e.headers=pt.from(e.headers),e}),(function(e){return dt(e)||(Ot(t),e&&e.response&&(e.response.data=ht.call(t,t.transformResponse,e.response),e.response.headers=pt.from(e.response.headers))),Promise.reject(e)}))}const St=t=>t instanceof pt?t.toJSON():t;function xt(t,e){e=e||{};const n={};function r(t,e,n){return L.isPlainObject(t)&&L.isPlainObject(e)?L.merge.call({caseless:n},t,e):L.isPlainObject(e)?L.merge({},e):L.isArray(e)?e.slice():e}function o(t,e,n){return L.isUndefined(e)?L.isUndefined(t)?void 0:r(void 0,t,n):r(t,e,n)}function s(t,e){if(!L.isUndefined(e))return r(void 0,e)}function i(t,e){return L.isUndefined(e)?L.isUndefined(t)?void 0:r(void 0,t):r(void 0,e)}function a(n,o,s){return s in e?r(n,o):s in t?r(void 0,n):void 0}const u={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(t,e)=>o(St(t),St(e),!0)};return L.forEach(Object.keys(t).concat(Object.keys(e)),(function(r){const s=u[r]||o,i=s(t[r],e[r],r);L.isUndefined(i)&&s!==a||(n[r]=i)})),n}const jt="1.3.3",Et={};["object","boolean","number","function","string","symbol"].forEach(((t,e)=>{Et[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));const At={};Et.transitional=function(t,e,n){function r(t,e){return"[Axios v1.3.3] Transitional option '"+t+"'"+e+(n?". "+n:"")}return(n,o,s)=>{if(!1===t)throw new M(r(o," has been removed"+(e?" in "+e:"")),M.ERR_DEPRECATED);return e&&!At[o]&&(At[o]=!0,console.warn(r(o," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,o,s)}};var Pt={assertOptions:function(t,e,n){if("object"!=typeof t)throw new M("options must be an object",M.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let o=r.length;for(;o-- >0;){const s=r[o],i=e[s];if(i){const e=t[s],n=void 0===e||i(e,s,t);if(!0!==n)throw new M("option "+s+" must be "+n,M.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new M("Unknown option "+s,M.ERR_BAD_OPTION)}},validators:Et};const kt=Pt.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new Q,response:new Q}}request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=xt(this.defaults,e);const{transitional:n,paramsSerializer:r,headers:o}=e;let s;void 0!==n&&Pt.assertOptions(n,{silentJSONParsing:kt.transitional(kt.boolean),forcedJSONParsing:kt.transitional(kt.boolean),clarifyTimeoutError:kt.transitional(kt.boolean)},!1),void 0!==r&&Pt.assertOptions(r,{encode:kt.function,serialize:kt.function},!0),e.method=(e.method||this.defaults.method||"get").toLowerCase(),s=o&&L.merge(o.common,o[e.method]),s&&L.forEach(["delete","get","head","post","put","patch","common"],(t=>{delete o[t]})),e.headers=pt.concat(s,o);const i=[];let a=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(a=a&&t.synchronous,i.unshift(t.fulfilled,t.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(t){u.push(t.fulfilled,t.rejected)}));let l,f=0;if(!a){const t=[Rt.bind(this),void 0];for(t.unshift.apply(t,i),t.push.apply(t,u),l=t.length,c=Promise.resolve(e);f<l;)c=c.then(t[f++],t[f++]);return c}l=i.length;let p=e;for(f=0;f<l;){const t=i[f++],e=i[f++];try{p=t(p)}catch(t){e.call(this,t);break}}try{c=Rt.call(this,p)}catch(t){return Promise.reject(t)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(t){return $(mt((t=xt(this.defaults,t)).baseURL,t.url),t.params,t.paramsSerializer)}}L.forEach(["delete","get","head","options"],(function(t){Axios.prototype[t]=function(e,n){return this.request(xt(n||{},{method:t,url:e,data:(n||{}).data}))}})),L.forEach(["post","put","patch"],(function(t){function e(e){return function(n,r,o){return this.request(xt(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Axios.prototype[t]=e(),Axios.prototype[t+"Form"]=e(!0)}));var Tt=Axios;class CancelToken{constructor(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");let e;this.promise=new Promise((function(t){e=t}));const n=this;this.promise.then((t=>{if(!n._listeners)return;let e=n._listeners.length;for(;e-- >0;)n._listeners[e](t);n._listeners=null})),this.promise.then=t=>{let e;const r=new Promise((t=>{n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t,r,o){n.reason||(n.reason=new yt(t,r,o),e(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}static source(){let t;return{token:new CancelToken((function(e){t=e})),cancel:t}}}var qt=CancelToken;const Dt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Dt).forEach((([t,e])=>{Dt[e]=t}));var Ct=Dt;const Ft=function t(e){const n=new Tt(e),o=r(Tt.prototype.request,n);return L.extend(o,Tt.prototype,n,{allOwnKeys:!0}),L.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return t(xt(e,n))},o}(it);Ft.Axios=Tt,Ft.CanceledError=yt,Ft.CancelToken=qt,Ft.isCancel=dt,Ft.VERSION=jt,Ft.toFormData=H,Ft.AxiosError=M,Ft.Cancel=Ft.CanceledError,Ft.all=function(t){return Promise.all(t)},Ft.spread=function(t){return function(e){return t.apply(null,e)}},Ft.isAxiosError=function(t){return L.isObject(t)&&!0===t.isAxiosError},Ft.mergeConfig=xt,Ft.AxiosHeaders=pt,Ft.formToJSON=t=>rt(L.isHTMLForm(t)?new FormData(t):t),Ft.HttpStatusCode=Ct,Ft.default=Ft,t.exports=Ft}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var s=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n(530)})()));
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBS3BELEVBQU85UCxRQUFTOFAsRUFBUUEsRUFBTzlQLFFBQVNzMUIsR0FHM0V4bEIsRUFBT3dZLFFBQVMsRUFHVHhZLEVBQU85UCxPQUNmLFFDekJBczFCLEVBQW9CemtCLEVBQUksV0FDdkIsR0FBMEIsaUJBQWZ5RSxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU83YSxNQUFRLElBQUlpN0IsU0FBUyxjQUFiLEVBR2hCLENBRkUsTUFBTzFVLEdBQ1IsR0FBc0IsaUJBQVhqUSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDQXhCdWtCLEVBQW9CSyxJQUFPN2xCLElBQzFCQSxFQUFPOGxCLE1BQVEsR0FDVjlsQixFQUFPK2xCLFdBQVUvbEIsRUFBTytsQixTQUFXLElBQ2pDL2xCLEdDQWtCd2xCLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9jbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2RvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9kb21haW5zQ3JlZGVudGlhbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9kb21haW5zVGFncy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9lcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaW50ZXJmYWNlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb25zLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaXAtcG9vbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9pcHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9saXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL21lc3NhZ2VzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3JvdXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3N0YXRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvc3VwcHJlc3Npb25zLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvdmFsaWRhdGUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi93ZWJob29rcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2Jhc2UtNjQvYmFzZTY0LmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYXhpb3MvZGlzdC9icm93c2VyL2F4aW9zLmNqcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IE9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL09wdGlvbnMnO1xuaW1wb3J0IHsgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvUmVxdWVzdE9wdGlvbnMnO1xuXG5pbXBvcnQgRG9tYWluQ2xpZW50IGZyb20gJy4vZG9tYWlucyc7XG5pbXBvcnQgRXZlbnRDbGllbnQgZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IFN0YXRzQ2xpZW50IGZyb20gJy4vc3RhdHMnO1xuaW1wb3J0IFN1cHByZXNzaW9uQ2xpZW50IGZyb20gJy4vc3VwcHJlc3Npb25zJztcbmltcG9ydCBXZWJob29rQ2xpZW50IGZyb20gJy4vd2ViaG9va3MnO1xuaW1wb3J0IE1lc3NhZ2VzQ2xpZW50IGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IFJvdXRlc0NsaWVudCBmcm9tICcuL3JvdXRlcyc7XG5pbXBvcnQgVmFsaWRhdGVDbGllbnQgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgSXBzQ2xpZW50IGZyb20gJy4vaXBzJztcbmltcG9ydCBJcFBvb2xzQ2xpZW50IGZyb20gJy4vaXAtcG9vbHMnO1xuaW1wb3J0IExpc3RzQ2xpZW50IGZyb20gJy4vbGlzdHMnO1xuaW1wb3J0IE1haWxMaXN0c01lbWJlcnMgZnJvbSAnLi9tYWlsTGlzdE1lbWJlcnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgZnJvbSAnLi9tdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IERvbWFpblRlbXBsYXRlc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5pbXBvcnQgeyBJTWFpbGd1bkNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9JTWFpbGd1bkNsaWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudCBpbXBsZW1lbnRzIElNYWlsZ3VuQ2xpZW50IHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIHB1YmxpYyBkb21haW5zO1xuICBwdWJsaWMgd2ViaG9va3M7XG4gIHB1YmxpYyBldmVudHM7XG4gIHB1YmxpYyBzdGF0cztcbiAgcHVibGljIHN1cHByZXNzaW9ucztcbiAgcHVibGljIG1lc3NhZ2VzO1xuICBwdWJsaWMgcm91dGVzO1xuICBwdWJsaWMgdmFsaWRhdGU7XG4gIHB1YmxpYyBpcHM7XG4gIHB1YmxpYyBpcF9wb29scztcbiAgcHVibGljIGxpc3RzO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgY29uc3QgY29uZmlnOiBSZXF1ZXN0T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9IGFzIFJlcXVlc3RPcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICBjb25maWcudXJsID0gJ2h0dHBzOi8vYXBpLm1haWxndW4ubmV0JztcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy51c2VybmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJ1c2VybmFtZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcImtleVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbmZpZywgZm9ybURhdGEpO1xuICAgIGNvbnN0IG1haWxMaXN0c01lbWJlcnMgPSBuZXcgTWFpbExpc3RzTWVtYmVycyh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50ID0gbmV3IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGVtcGxhdGVzQ2xpZW50ID0gbmV3IERvbWFpblRlbXBsYXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRhZ3NDbGllbnQgPSBuZXcgRG9tYWluVGFnc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCA9IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcblxuICAgIHRoaXMuZG9tYWlucyA9IG5ldyBEb21haW5DbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICBkb21haW5DcmVkZW50aWFsc0NsaWVudCxcbiAgICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgICAgIGRvbWFpblRhZ3NDbGllbnRcbiAgICApO1xuICAgIHRoaXMud2ViaG9va3MgPSBuZXcgV2ViaG9va0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50Q2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBTdGF0c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3VwcHJlc3Npb25zID0gbmV3IFN1cHByZXNzaW9uQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMucm91dGVzID0gbmV3IFJvdXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBzID0gbmV3IElwc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBfcG9vbHMgPSBuZXcgSXBQb29sc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubGlzdHMgPSBuZXcgTGlzdHNDbGllbnQodGhpcy5yZXF1ZXN0LCBtYWlsTGlzdHNNZW1iZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gbmV3IFZhbGlkYXRlQ2xpZW50KHRoaXMucmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHtcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgUXVlcnlXaXRoUGFnZSxcbiAgUmVzcG9uc2VXaXRoUGFnaW5nLFxuICBVcGRhdGVkVXJsQW5kUXVlcnlcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IEJvdW5jZURhdGEsIElCb3VuY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9Cb3VuY2UnO1xuaW1wb3J0IHsgQ29tcGxhaW50RGF0YSwgSUNvbXBsYWludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL0NvbXBsYWludCc7XG5pbXBvcnQgeyBJVW5zdWJzY3JpYmUsIFVuc3Vic2NyaWJlRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL1Vuc3Vic2NyaWJlJztcbmltcG9ydCB7IElXaGl0ZUxpc3QsIFdoaXRlTGlzdERhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9XaGl0ZUxpc3QnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIE5hdmlnYXRpb25UaHJ1UGFnZXMgPFQ+IHtcbiAgcmVxdWVzdD86IFJlcXVlc3Q7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q/OiBSZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZShcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhZ2VVcmw6IHN0cmluZyxcbiAgICB1cmxTZXBhcmF0b3I6IHN0cmluZyxcbiAgICBpdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuXG4gICAgY29uc3QgcGFnZVZhbHVlID0gcGFnZVVybCAmJiB0eXBlb2YgcGFnZVVybCA9PT0gJ3N0cmluZycgPyBwYWdlVXJsLnNwbGl0KHVybFNlcGFyYXRvcikucG9wKCkgfHwgJycgOiAnJztcbiAgICBsZXQgaXRlcmF0b3JQb3NpdGlvbiA9IG51bGw7XG4gICAgaWYgKGl0ZXJhdG9yTmFtZSkge1xuICAgICAgaXRlcmF0b3JQb3NpdGlvbiA9IHNlYXJjaFBhcmFtcy5oYXMoaXRlcmF0b3JOYW1lKVxuICAgICAgICA/IHNlYXJjaFBhcmFtcy5nZXQoaXRlcmF0b3JOYW1lKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogdXJsU2VwYXJhdG9yID09PSAnPycgPyBgPyR7cGFnZVZhbHVlfWAgOiBwYWdlVmFsdWUsXG4gICAgICBpdGVyYXRvclBvc2l0aW9uLFxuICAgICAgdXJsOiBwYWdlVXJsXG4gICAgfSBhcyBQYXJzZWRQYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZUxpbmtzKFxuICAgIHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lPzogc3RyaW5nXG4gICk6IFBhcnNlZFBhZ2VzTGlzdCB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBbaWQsIHBhZ2VVcmxdOiBbIGlkOiBzdHJpbmcsIHBhZ2VVcmw6IHN0cmluZ10pID0+IHtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMucGFyc2VQYWdlKGlkLCBwYWdlVXJsLCB1cmxTZXBhcmF0b3IsIGl0ZXJhdG9yTmFtZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICkgYXMgdW5rbm93biBhcyBQYXJzZWRQYWdlc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybDogc3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UpOiBVcGRhdGVkVXJsQW5kUXVlcnkge1xuICAgIGxldCB1cmwgPSBjbGllbnRVcmw7XG4gICAgY29uc3QgcXVlcnlDb3B5ID0geyAuLi5xdWVyeSB9O1xuICAgIGlmIChxdWVyeUNvcHkucGFnZSkge1xuICAgICAgdXJsID0gdXJsam9pbihjbGllbnRVcmwsIHF1ZXJ5Q29weS5wYWdlKTtcbiAgICAgIGRlbGV0ZSBxdWVyeUNvcHkucGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybCxcbiAgICAgIHVwZGF0ZWRRdWVyeTogcXVlcnlDb3B5XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXF1ZXN0TGlzdFdpdGhQYWdlcyhjbGllbnRVcmw6c3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgeyB1cmwsIHVwZGF0ZWRRdWVyeSB9ID0gdGhpcy51cGRhdGVVcmxBbmRRdWVyeShjbGllbnRVcmwsIHF1ZXJ5KTtcbiAgICBpZiAodGhpcy5yZXF1ZXN0KSB7XG4gICAgICBjb25zdCByZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh1cmwsIHVwZGF0ZWRRdWVyeSk7XG4gICAgICAvLyBNb2RlbCBoZXJlIGlzIHVzdWFsbHkgdW5kZWZpbmVkIGV4Y2VwdCBmb3IgU3VwcHJlc3Npb24gQ2xpZW50XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUxpc3QocmVzcG9uc2UsIE1vZGVsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgIHN0YXR1czogNTAwLFxuICAgICAgc3RhdHVzVGV4dDogJ1JlcXVlc3QgcHJvcGVydHkgaXMgZW1wdHknLFxuICAgICAgYm9keTogeyBtZXNzYWdlOiAnJyB9XG4gICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBhcnNlTGlzdChyZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nLCBNb2RlbD86IHtcbiAgICBuZXcoZGF0YTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFQ7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIERvbWFpblJlc3BvbnNlRGF0YSxcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluU2hvcnREYXRhLFxuICBETlNSZWNvcmQsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgTWVzc2FnZVJlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBVcGRhdGVkT3BlblRyYWNraW5nXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UcmFja2luZyc7XG5pbXBvcnQgeyBJRG9tYWluQ3JlZGVudGlhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCB7IElEb21haW5UYWdzQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBEb21haW5TaG9ydERhdGEsIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCwgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbCkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudDogRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgIGRvbWFpblRhZ3NDbGllbnQ6IERvbWFpblRhZ3NDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZShyZXNwb25zZTogRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpIDogTWVzc2FnZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEb21haW5MaXN0KHJlc3BvbnNlOiBEb21haW5MaXN0UmVzcG9uc2VEYXRhKTogRG9tYWluW10ge1xuICAgIGlmIChyZXNwb25zZS5ib2R5ICYmIHJlc3BvbnNlLmJvZHkuaXRlbXMpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gbmV3IERvbWFpbihpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogRG9tYWluIHtcbiAgICByZXR1cm4gbmV3IERvbWFpbihcbiAgICAgIHJlc3BvbnNlLmJvZHkuZG9tYWluLFxuICAgICAgcmVzcG9uc2UuYm9keS5yZWNlaXZpbmdfZG5zX3JlY29yZHMsXG4gICAgICByZXNwb25zZS5ib2R5LnNlbmRpbmdfZG5zX3JlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6IERvbWFpblRyYWNraW5nRGF0YSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkudHJhY2tpbmc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlOiBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6VXBkYXRlZE9wZW5UcmFja2luZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogRG9tYWluc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5bXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvZG9tYWlucycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlRG9tYWluTGlzdChyZXMgYXMgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBEb21haW5JbmZvKSA6IFByb21pc2U8RG9tYWluPiB7XG4gICAgY29uc3QgcG9zdE9iaiA9IHsgLi4uZGF0YSB9O1xuICAgIGlmICgnZm9yY2VfZGtpbV9hdXRob3JpdHknIGluIHBvc3RPYmogJiYgdHlwZW9mIHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkgPT09ICdib29sZWFuJykge1xuICAgICAgcG9zdE9iai5mb3JjZV9ka2ltX2F1dGhvcml0eSA9IHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkudG9TdHJpbmcoKSA9PT0gJ3RydWUnID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92My9kb21haW5zJywgcG9zdE9iailcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgdmVyaWZ5KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxEb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L3ZlcmlmeWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2UocmVzIGFzIERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpXG4gICAgICAudGhlbigocmVzOkNvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKSA9PiByZXMuYm9keS5jb25uZWN0aW9uIGFzIENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBDb25uZWN0aW9uU2V0dGluZ3MpOiBQcm9taXNlPFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcylcbiAgICAgIC50aGVuKChyZXM6VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcykgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICAvLyBUcmFja2luZ1xuXG4gIGdldFRyYWNraW5nKGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluVHJhY2tpbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VUcmFja2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICBpZiAodHlwZW9mIGRhdGE/LmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoeyBzdGF0dXM6IDQwMCwgc3RhdHVzVGV4dDogJ1JlY2VpdmVkIGJvb2xlYW4gdmFsdWUgZm9yIGFjdGl2ZSBwcm9wZXJ0eScsIGJvZHk6IHsgbWVzc2FnZTogJ1Byb3BlcnR5IFwiYWN0aXZlXCIgbXVzdCBjb250YWluIHN0cmluZyB2YWx1ZS4nIH0gfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJywgdHlwZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVHJhY2tpbmdVcGRhdGUocmVzIGFzIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpKTtcbiAgfVxuXG4gIC8vIElQc1xuXG4gIGdldElwcyhkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBBUElSZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHk/Lml0ZW1zKTtcbiAgfVxuXG4gIGFzc2lnbklwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IGlwIH0pO1xuICB9XG5cbiAgZGVsZXRlSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCBpcCkpO1xuICB9XG5cbiAgbGlua0lwUG9vbChkb21haW46IHN0cmluZywgcG9vbF9pZDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQgfSk7XG4gIH1cblxuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnVG9vIG11Y2ggZGF0YSBmb3IgcmVwbGFjZW1lbnQnLFxuICAgICAgICAgIGJvZHk6IHsgbWVzc2FnZTogJ1BsZWFzZSBzcGVjaWZ5IGVpdGhlciBwb29sX2lkIG9yIGlwIChub3QgYm90aCknIH1cbiAgICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICB1cGRhdGVES0lNU2VsZWN0b3IoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1TZWxlY3RvckluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9zZWxlY3RvcmAsIHt9LCB7IHF1ZXJ5OiBgZGtpbV9zZWxlY3Rvcj0ke2RhdGEuZGtpbVNlbGVjdG9yfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVXZWJQcmVmaXgoZG9tYWluOiBzdHJpbmcsIGRhdGE6IFdlYlByZWZpeEluZm8pOiBQcm9taXNlPFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vd2ViX3ByZWZpeGAsIHt9LCB7IHF1ZXJ5OiBgd2ViX3ByZWZpeD0ke2RhdGEud2ViUHJlZml4fWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHMsXG4gIERvbWFpbkNyZWRlbnRpYWxzTGlzdCxcbiAgRG9tYWluQ3JlZGVudGlhbHNRdWVyeSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEsXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0LFxuICBJRG9tYWluQ3JlZGVudGlhbHMsXG4gIFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DcmVkZW50aWFsc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5DcmVkZW50aWFscyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9kb21haW5zLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGFcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICB0b3RhbENvdW50OiByZXNwb25zZS5ib2R5LnRvdGFsX2NvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZVJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEZWxldGVkUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6RGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgc3BlYzogcmVzcG9uc2UuYm9keS5zcGVjXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkNyZWRlbnRpYWxzUXVlcnkpOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy9jcmVkZW50aWFscycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QocmVzIGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5DcmVkZW50aWFsc1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFsc2AsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nLFxuICAgIGRhdGE6IFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURlbGV0ZWRSZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSxcbiAgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdzSXRlbSxcbiAgRG9tYWluVGFnc0l0ZW1JbmZvLFxuICBEb21haW5UYWdzTGlzdCxcbiAgRG9tYWluVGFnc01lc3NhZ2VSZXMsXG4gIERvbWFpblRhZ3NRdWVyeSxcbiAgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5LFxuICBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ1N0YXRpc3RpY0l0ZW0sXG4gIERvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCxcbiAgSURvbWFpblRhZ3NDbGllbnQsXG4gIFJlc29sdXRpb25cbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWcgaW1wbGVtZW50cyBEb21haW5UYWdzSXRlbSB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAnZmlyc3Qtc2Vlbic6IERhdGU7XG4gICdsYXN0LXNlZW4nOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykge1xuICAgIHRoaXMudGFnID0gdGFnSW5mby50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ0luZm8uZGVzY3JpcHRpb247XG4gICAgdGhpc1snZmlyc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snZmlyc3Qtc2VlbiddKTtcbiAgICB0aGlzWydsYXN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2xhc3Qtc2VlbiddKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnU3RhdGlzdGljIGltcGxlbWVudHMgRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IFJlc29sdXRpb247XG4gIHN0YXRzOiBEb21haW5UYWdTdGF0aXN0aWNJdGVtW107XG5cbiAgY29uc3RydWN0b3IodGFnU3RhdGlzdGljSW5mbzogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlKSB7XG4gICAgdGhpcy50YWcgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkudGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkucmVzb2x1dGlvbjtcbiAgICB0aGlzLnN0YXRzID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCwgdGltZTogbmV3IERhdGUoc3RhdC50aW1lKSB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UYWdzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxEb21haW5UYWdzTGlzdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgKTogRG9tYWluVGFnc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBEb21haW5UYWdzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAndGFnJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRhZ1N0YXRpc3RpYyhcbiAgICByZXNwb25zZTogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlXG4gICk6IERvbWFpblRhZ1N0YXRpc3RpYyB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UYWdTdGF0aXN0aWMocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UYWdzUXVlcnkpOiBQcm9taXNlPERvbWFpblRhZ3NMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnKSwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UYWcocmVzLmJvZHkpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZyksIGRlc2NyaXB0aW9uKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdzTWVzc2FnZVJlc1xuICAgICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS90YWdzLyR7dGFnfWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gKFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogcmVzLmJvZHkubWVzc2FnZSxcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNcbiAgICAgICAgfSBhcyBEb21haW5UYWdzTWVzc2FnZVJlcykpO1xuICB9XG5cbiAgc3RhdGlzdGljKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgcXVlcnk6IERvbWFpblRhZ3NTdGF0aXN0aWNRdWVyeSlcbiAgICA6IFByb21pc2U8RG9tYWluVGFnU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUYWdTdGF0aXN0aWMocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGNvdW50cmllcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2NvdW50cmllcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIHByb3ZpZGVycyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL3Byb3ZpZGVycycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIGRldmljZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvZGV2aWNlcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBEb21haW5UZW1wbGF0ZSwgRG9tYWluVGVtcGxhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZXNRdWVyeSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhLFxuICBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhLFxuICBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBJRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0LFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBOb3RpZmljYXRpb25BUElSZXNwb25zZSxcbiAgTm90aWZpY2F0aW9uUmVzdWx0LFxuICBTaG9ydFRlbXBsYXRlVmVyc2lvbixcbiAgVGVtcGxhdGVRdWVyeSxcbiAgVGVtcGxhdGVWZXJzaW9uLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRlbXBsYXRlcyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRlbXBsYXRlSXRlbSBpbXBsZW1lbnRzIERvbWFpblRlbXBsYXRlIHtcbiAgbmFtZSA6IHN0cmluZztcbiAgZGVzY3JpcHRpb24gOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdCA6IERhdGUgfCAnJztcbiAgY3JlYXRlZEJ5IDogc3RyaW5nO1xuICBpZCA6IHN0cmluZztcbiAgdmVyc2lvbj86IFRlbXBsYXRlVmVyc2lvbjtcbiAgdmVyc2lvbnM/OiBTaG9ydFRlbXBsYXRlVmVyc2lvbltdO1xuXG4gIGNvbnN0cnVjdG9yKGRvbWFpblRlbXBsYXRlRnJvbUFQSTogRG9tYWluVGVtcGxhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQpIDogJyc7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEJ5O1xuICAgIHRoaXMuaWQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuaWQ7XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24pIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uO1xuICAgICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCkge1xuICAgICAgICB0aGlzLnZlcnNpb24uY3JlYXRlZEF0ID0gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zICYmIGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbnMgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udmVyc2lvbiB9O1xuICAgICAgICByZXN1bHQuY3JlYXRlZEF0ID0gbmV3IERhdGUodmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRlbXBsYXRlc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25SZXNwb25zZShkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKTogRG9tYWluVGVtcGxhdGVJdGVtIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGlvblJlc3BvbnNlKFxuICAgIGRhdGE6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZVxuICApOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQgPSB7fSBhcyBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UoZGF0YTogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpOiBOb3RpZmljYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTm90aWZpY2F0aW9uUmVzdWx0ID0ge30gYXMgTm90aWZpY2F0aW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgICByZXN1bHQudGVtcGxhdGVWZXJzaW9uID0geyB0YWc6IGRhdGEuYm9keS50ZW1wbGF0ZS52ZXJzaW9uLnRhZyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlKTogTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGQ6IERvbWFpblRlbXBsYXRlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGQpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhcbiAgICByZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZVxuICApOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0O1xuXG4gICAgZGF0YS50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzcG9uc2UuYm9keS50ZW1wbGF0ZSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAncCcpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5KTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBxdWVyeSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCBxdWVyeT86IFRlbXBsYXRlUXVlcnkpOiBQcm9taXNlPERvbWFpblRlbXBsYXRlSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXMuYm9keS50ZW1wbGF0ZSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVEYXRhXG4gICk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YVxuICApOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSkpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveUFsbChkb21haW46IHN0cmluZyk6IFByb21pc2U8Tm90aWZpY2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpKVxuICAgICAgLnRoZW4oKHJlczogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VOb3RpZmljYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGNyZWF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFZlcnNpb24oZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIC50aGVuKChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBsaXN0VmVyc2lvbnMoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeVxuICApOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMocmVzKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQVBJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyBzdGF0dXM6IG51bWJlciB8IHN0cmluZztcbiAgcHVibGljIHN0YWNrOiBzdHJpbmc7XG4gIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0LFxuICAgIG1lc3NhZ2UsXG4gICAgYm9keSA9IHt9XG4gIH06IEFQSUVycm9yT3B0aW9ucykge1xuICAgIGxldCBib2R5TWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvciA9ICcnO1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHlNZXNzYWdlID0gYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5Py5tZXNzYWdlO1xuICAgICAgZXJyb3IgPSBib2R5Py5lcnJvcjtcbiAgICB9XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQ7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gICAgdGhpcy50eXBlID0gJ01haWxndW5BUElFcnJvcic7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCxcbiAgRXZlbnRzUXVlcnksXG4gIEV2ZW50c1Jlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEV2ZW50c0xpc3Q+IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlLFxuICApOiBFdmVudHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRXZlbnRzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnLycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IEV2ZW50c1F1ZXJ5KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpLCBxdWVyeSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuXG5jbGFzcyBGb3JtRGF0YUJ1aWxkZXIge1xuICBwcml2YXRlIEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGE7XG4gIGNvbnN0cnVjdG9yKEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IgPSBGb3JtRGF0YUNvbnN0cnVjdG9yO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZvcm1EYXRhKGRhdGE6IGFueSk6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9KVxuICAgICAgLnJlZHVjZSgoZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleXMgPSBbJ2F0dGFjaG1lbnQnLCAnaW5saW5lJywgJ211bHRpcGxlVmFsaWRhdGlvbkZpbGUnXTtcbiAgICAgICAgaWYgKGZpbGVLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICB0aGlzLmFkZEZpbGVzVG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdtZXNzYWdlJykgeyAvLyBtaW1lIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmFkZE1pbWVEYXRhVG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkQ29tbW9uUHJvcGVydHlUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgIH0sIG5ldyB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IoKSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05vZGVGb3JtRGF0YShmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSlcbiAgOiBmb3JtRGF0YUluc3RhbmNlIGlzIE5vZGVGb3JtRGF0YSB7XG4gICAgcmV0dXJuICg8Tm9kZUZvcm1EYXRhPmZvcm1EYXRhSW5zdGFuY2UpLmdldEhlYWRlcnMgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0YWNobWVudE9wdGlvbnMoaXRlbToge1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlPyA6IHN0cmluZztcbiAgICBrbm93bkxlbmd0aD86IG51bWJlcjtcbiAgfSk6IHtcbiAgICBmaWxlbmFtZT86IHN0cmluZyxcbiAgICBjb250ZW50VHlwZT86IHN0cmluZyxcbiAgICBrbm93bkxlbmd0aD86IG51bWJlclxuICB9IHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IHRoaXMuaXNTdHJlYW0oaXRlbSkpIHJldHVybiB7fTtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGhcbiAgICB9ID0gaXRlbTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGZpbGVuYW1lID8geyBmaWxlbmFtZSB9IDogeyBmaWxlbmFtZTogJ2ZpbGUnIH0pLFxuICAgICAgLi4uKGNvbnRlbnRUeXBlICYmIHsgY29udGVudFR5cGUgfSksXG4gICAgICAuLi4oa25vd25MZW5ndGggJiYgeyBrbm93bkxlbmd0aCB9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZE1pbWVEYXRhVG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBkYXRhOiBCdWZmZXIgfCBCbG9iIHwgc3RyaW5nLFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkgfHwgdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBub2RlRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIE5vZGVGb3JtRGF0YTtcbiAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGRhdGEpIDogZGF0YTtcbiAgICAgIG5vZGVGb3JtRGF0YS5hcHBlbmQoa2V5LCBwcmVwYXJlZERhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJyb3dzZXJGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgRm9ybURhdGE7XG4gICAgICBicm93c2VyRm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YSwgJ01pbWVNZXNzYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIG9yaWdpbmFsS2V5OiBzdHJpbmcsXG4gICAgICBvYmo6IGFueSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3JpZ2luYWxLZXkgPT09ICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJyA/ICdmaWxlJyA6IG9yaWdpbmFsS2V5O1xuICAgICAgY29uc3QgaXNTdHJlYW1EYXRhID0gdGhpcy5pc1N0cmVhbShvYmopO1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IGlzU3RyZWFtRGF0YSA/IG9iaiA6IG9iai5kYXRhO1xuICAgICAgLy8gZ2V0QXR0YWNobWVudE9wdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG9iaiBwYXJhbWV0ZXIgdG8gcHJldmVudCBsb29zaW5nIGZpbGVuYW1lXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyhvYmopO1xuICAgICAgaWYgKHRoaXMuaXNOb2RlRm9ybURhdGEoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgaXRlbSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCB2YWx1ZSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmVhbShkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkYXRhLnBpcGUgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgZm9ybURhdGFBY2MuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRm9ybURhdGFCdWlsZGVyO1xuIiwiaW1wb3J0IENsaWVudCBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogT3B0aW9ucykgOiBDbGllbnQge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBCb3VuY2UsIENvbXBsYWludCwgVW5zdWJzY3JpYmUsIFdoaXRlTGlzdFxufSBmcm9tICcuLi8uLi9zdXBwcmVzc2lvbnMnO1xuaW1wb3J0IHsgUGFnZXNMaXN0LCBQYXJzZWRQYWdlc0xpc3QgfSBmcm9tICcuLi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IEJvdW5jZURhdGEgfSBmcm9tICcuL0JvdW5jZSc7XG5pbXBvcnQgeyBDb21wbGFpbnREYXRhIH0gZnJvbSAnLi9Db21wbGFpbnQnO1xuaW1wb3J0IHsgVW5zdWJzY3JpYmVEYXRhIH0gZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5pbXBvcnQgeyBXaGl0ZUxpc3REYXRhIH0gZnJvbSAnLi9XaGl0ZUxpc3QnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgQ09NUExBSU5UUyA9ICdjb21wbGFpbnRzJyxcbiAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkxpc3Qge1xuICBpdGVtczogKEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0KVtdO1xuICBwYWdlczogUGFyc2VkUGFnZXNMaXN0O1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU3VwcHJlc3Npb25MaXN0UXVlcnkgPSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBwYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdXBwcmVzc2lvbkRhdGFUeXBlID0gQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlIHtcbiAgYm9keToge1xuICAgIGl0ZW1zOiBCb3VuY2VEYXRhW10gfCBDb21wbGFpbnREYXRhW10gfCBVbnN1YnNjcmliZURhdGFbXSB8IFdoaXRlTGlzdERhdGFbXTtcbiAgICBwYWdpbmc6IFBhZ2VzTGlzdDtcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvblJlc3BvbnNlIHtcbiAgYm9keTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSB7XG4gIGJvZHk6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU/OiBudW1iZXI7XG4gIGVycm9yPzogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIHRhZz86IHN0cmluZztcbiAgY3JlYXRlZF9hdD86IHN0cmluZyA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlIHtcbiAgYm9keTp7XG4gICAgbWVzc2FnZTpzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgbWVzc2FnZTpzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPElwUG9vbExpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YxL2lwX3Bvb2xzJylcbiAgICAgIC50aGVuKChyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogSXBQb29sQ3JlYXRlRGF0YSk6IFByb21pc2U8SXBQb29sQ3JlYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbENyZWF0ZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xVcGRhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wYXRjaFdpdGhGRChgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6SXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKTogSXBQb29sTGlzdFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCBNZ1JlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSXBzTGlzdFJlc3BvbnNlQm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQge1xuICByZXF1ZXN0OiBNZ1JlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogTWdSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IGFueSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3QsXG4gIFZhbGlkYXRpb25BcGlSZXNwb25zZSxcbiAgU3RhcnRWYWxpZGF0aW9uUmVzdWx0LFxuICBWYWxpZGF0aW9uUmVzdWx0LFxuICBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdFJlc3VsdCxcbiAgTWFpbGluZ0xpc3RBcGlSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvbGlzdHMnO1xuaW1wb3J0IHsgSU1haWxMaXN0c01lbWJlcnMgfSBmcm9tICcuL2ludGVyZmFjZXMvbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbGluZ0xpc3RSZXN1bHQ+IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1lbWJlcnM6IElNYWlsTGlzdHNNZW1iZXJzO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIG1lbWJlcnM6SU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWxpZGF0aW9uUmVzdWx0KHN0YXR1czogbnVtYmVyLCBkYXRhOiBWYWxpZGF0aW9uQXBpUmVzcG9uc2UpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDoge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQgKiAxMDAwKSAvLyBhZGQgbWlsbGlzZWNvbmQgdG8gVW5peCB0aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9IGFzIFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlKTogTWFpbGluZ0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsaW5nTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9L3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG5cbiAgdmFsaWRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFN0YXJ0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYCwge30pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgICB9KSBhcyBTdGFydFZhbGlkYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgdmFsaWRhdGlvblJlc3VsdChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXNwb25zZSkgPT4gdGhpcy5wYXJzZVZhbGlkYXRpb25SZXN1bHQoXG4gICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICByZXNwb25zZS5ib2R5IGFzIFZhbGlkYXRpb25BcGlSZXNwb25zZVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsVmFsaWRhdGlvbihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgICB9IGFzIENhbmNlbFZhbGlkYXRpb25SZXN1bHQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIE1haWxMaXN0TWVtYmVyc1F1ZXJ5LFxuICBJTWFpbExpc3RzTWVtYmVycyxcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzLFxuICBNYWlsTGlzdE1lbWJlcixcbiAgTXVsdGlwbGVNZW1iZXJzRGF0YSxcbiAgTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSxcbiAgRGVsZXRlZE1lbWJlcixcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxLFxuICBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSxcbiAgTWFpbExpc3RNZW1iZXJzUmVzdWx0LFxuICBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsTGlzdHNNZW1iZXJzXG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxNYWlsTGlzdE1lbWJlcnNSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU1haWxMaXN0c01lbWJlcnMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZFVwZGF0ZURhdGEoZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzKSB7XG4gICAgY29uc3QgbmV3RGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnZhcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBuZXdEYXRhLnZhcnMgPSBKU09OLnN0cmluZ2lmeShuZXdEYXRhLnZhcnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YS5zdWJzY3JpYmVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG5ld0RhdGEuc3Vic2NyaWJlZCA9IGRhdGEuc3Vic2NyaWJlZCA/ICd5ZXMnIDogJ25vJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RGF0YSBhcyBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZSxcbiAgKTogTWFpbExpc3RNZW1iZXJzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTWFpbExpc3RNZW1iZXJzUmVzdWx0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RNZW1iZXJzKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIHF1ZXJ5PzogTWFpbExpc3RNZW1iZXJzUXVlcnlcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyhgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvcGFnZXNgLCBxdWVyeSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcbmltcG9ydCB7XG4gIE1haWxndW5NZXNzYWdlRGF0YSxcbiAgTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UsXG4gIE1lc3NhZ2VzU2VuZFJlc3VsdFxufSBmcm9tICcuL2ludGVyZmFjZXMvTWVzc2FnZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzc2FnZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQm9vbGVhblZhbHVlcyhkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBNYWlsZ3VuTWVzc2FnZURhdGEge1xuICAgIGNvbnN0IHllc05vUHJvcGVydGllcyA9IG5ldyBTZXQoW1xuICAgICAgJ286dGVzdG1vZGUnLFxuICAgICAgJ3Q6dGV4dCcsXG4gICAgICAnbzpka2ltJyxcbiAgICAgICdvOnRyYWNraW5nJyxcbiAgICAgICdvOnRyYWNraW5nLWNsaWNrcycsXG4gICAgICAnbzp0cmFja2luZy1vcGVucycsXG4gICAgICAnbzpyZXF1aXJlLXRscycsXG4gICAgICAnbzpza2lwLXZlcmlmaWNhdGlvbidcbiAgICBdKTtcblxuICAgIGlmICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSBkYXRhIG9iamVjdCBjYW4gbm90IGJlIGVtcHR5J1xuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHllc05vUHJvcGVydGllcy5oYXMoa2V5KSAmJiB0eXBlb2YgZGF0YVtrZXldID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgYWNjW2tleV0gPSBkYXRhW2tleV0gPyAneWVzJyA6ICdubyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgTWFpbGd1bk1lc3NhZ2VEYXRhKTtcbiAgfVxuXG4gIF9wYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSk6IE1lc3NhZ2VzU2VuZFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IE1haWxndW5NZXNzYWdlRGF0YSk6IFByb21pc2U8TWVzc2FnZXNTZW5kUmVzdWx0PiB7XG4gICAgaWYgKGRhdGEubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzLm1pbWVgLCBkYXRhKVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RpZmllZERhdGEgPSB0aGlzLnByZXBhcmVCb29sZWFuVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlc2AsIG1vZGlmaWVkRGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHtcbiAgQ2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YSxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzcG9uc2UsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYlJlc3VsdCxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeVxufVxuICBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IgaW1wbGVtZW50cyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQge1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIGlkOiBzdHJpbmc7XG4gIHF1YW50aXR5OiBudW1iZXJcbiAgcmVjb3Jkc1Byb2Nlc3NlZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGRvd25sb2FkVXJsPzoge1xuICAgIGNzdjogc3RyaW5nO1xuICAgIGpzb246IHN0cmluZztcbiAgfTtcblxuICByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcjtcbiAgc3VtbWFyeT86IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBudW1iZXI7XG4gICAgICAgICAgZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICBkb05vdFNlbmQ6IG51bWJlcjtcbiAgICAgICAgICB1bmRlbGl2ZXJhYmxlOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIHJpc2s6IHtcbiAgICAgICAgICBoaWdoOiBudW1iZXI7XG4gICAgICAgICAgbG93OiBudW1iZXI7XG4gICAgICAgICAgbWVkaXVtOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSwgcmVzcG9uc2VTdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5xdWFudGl0eSA9IGRhdGEucXVhbnRpdHk7XG4gICAgdGhpcy5yZWNvcmRzUHJvY2Vzc2VkID0gZGF0YS5yZWNvcmRzX3Byb2Nlc3NlZDtcbiAgICB0aGlzLnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHRoaXMucmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXNDb2RlO1xuICAgIGlmIChkYXRhLmRvd25sb2FkX3VybCkge1xuICAgICAgdGhpcy5kb3dubG9hZFVybCA9IHtcbiAgICAgICAgY3N2OiBkYXRhLmRvd25sb2FkX3VybD8uY3N2LFxuICAgICAgICBqc29uOiBkYXRhLmRvd25sb2FkX3VybD8uanNvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc3VtbWFyeSkge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBjYXRjaEFsbDogZGF0YS5zdW1tYXJ5LnJlc3VsdC5jYXRjaF9hbGwsXG4gICAgICAgICAgZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZGVsaXZlcmFibGUsXG4gICAgICAgICAgZG9Ob3RTZW5kOiBkYXRhLnN1bW1hcnkucmVzdWx0LmRvX25vdF9zZW5kLFxuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5kZWxpdmVyYWJsZSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmVzdWx0LnVua25vd25cbiAgICAgICAgfSxcbiAgICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IGRhdGEuc3VtbWFyeS5yaXNrLmhpZ2gsXG4gICAgICAgICAgbG93OiBkYXRhLnN1bW1hcnkucmlzay5sb3csXG4gICAgICAgICAgbWVkaXVtOiBkYXRhLnN1bW1hcnkucmlzay5tZWRpdW0sXG4gICAgICAgICAgdW5rbm93bjogZGF0YS5zdW1tYXJ5LnJpc2sudW5rbm93blxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PlxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFQ+KHJlc3BvbnNlOiBBUElSZXNwb25zZSk6IFQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlPy5ib2R5XG4gICAgfSBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXNwb25zZSlcbiAgICA6IE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ7XG5cbiAgICBkYXRhLmpvYnMgPSByZXNwb25zZS5ib2R5LmpvYnMubWFwKChqb2IpID0+IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2Ioam9iLCByZXNwb25zZS5zdGF0dXMpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwaXZvdCcpO1xuICAgIGRhdGEudG90YWwgPSByZXNwb25zZS5ib2R5LnRvdGFsO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeSk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcygnL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsaycsIHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uSm9iKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlLnN0YXR1cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoXG4gICAgbGlzdElkOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ge1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQgPSB7XG4gICAgICBtdWx0aXBsZVZhbGlkYXRpb25GaWxlOiB7XG4gICAgICAgIC4uLmRhdGE/LmZpbGVcbiAgICAgIH0sXG4gICAgICAuLi5kYXRhXG4gICAgfTtcbiAgICBkZWxldGUgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YS5maWxlO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCwgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgYmFzZTY0IGZyb20gJ2Jhc2UtNjQnO1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IGF4aW9zLCB7XG4gIEF4aW9zRXJyb3IsIEF4aW9zUmVzcG9uc2UsIEF4aW9zSGVhZGVycywgUmF3QXhpb3NSZXF1ZXN0SGVhZGVyc1xufSBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7IE9uQ2FsbFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgRm9ybURhdGFCdWlsZGVyIGZyb20gJy4vZm9ybURhdGFCdWlsZGVyJztcbmltcG9ydCB7IElwUG9vbERlbGV0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUga2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGhlYWRlcnM6IEF4aW9zSGVhZGVycztcbiAgcHJpdmF0ZSBmb3JtRGF0YUJ1aWxkZXI6IEZvcm1EYXRhQnVpbGRlcjtcbiAgcHJpdmF0ZSBtYXhCb2R5TGVuZ3RoOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVxdWVzdE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy51c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWU7XG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIGFzIHN0cmluZztcbiAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgdGhpcy5oZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVyc0Zyb21PYmplY3Qob3B0aW9ucy5oZWFkZXJzKTtcbiAgICB0aGlzLmZvcm1EYXRhQnVpbGRlciA9IG5ldyBGb3JtRGF0YUJ1aWxkZXIoZm9ybURhdGEpO1xuICAgIHRoaXMubWF4Qm9keUxlbmd0aCA9IDUyNDI4ODAwOyAvLyA1MCBNQlxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgZGVsZXRlIG9wdGlvbnM/LmhlYWRlcnM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSB0aGlzLmpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKG9uQ2FsbE9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMucGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhvcHRpb25zLnF1ZXJ5KTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmJvZHkpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBvcHRpb25zPy5ib2R5O1xuICAgICAgcGFyYW1zLmRhdGEgPSBib2R5O1xuICAgICAgZGVsZXRlIHBhcmFtcy5ib2R5O1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IEF4aW9zUmVzcG9uc2U7XG4gICAgY29uc3QgdXJsVmFsdWUgPSB1cmxqb2luKHRoaXMudXJsLCB1cmwpO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgIHVybDogdXJsVmFsdWUsXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IHRoaXMubWF4Qm9keUxlbmd0aFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyIGFzIEF4aW9zRXJyb3I7XG5cbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogZXJyb3JSZXNwb25zZT8ucmVzcG9uc2U/LnN0YXR1cyB8fCA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXNUZXh0IHx8IGVycm9yUmVzcG9uc2UuY29kZSxcbiAgICAgICAgYm9keTogZXJyb3JSZXNwb25zZT8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyb3JSZXNwb25zZS5tZXNzYWdlXG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZUJvZHkocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXMgYXMgQVBJUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlc3BvbnNlQm9keShyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBib2R5OiB7fSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2U/LnN0YXR1c1xuICAgIH0gYXMgQVBJUmVzcG9uc2U7XG5cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAocmVzcG9uc2UuZGF0YSA9PT0gJ01haWxndW4gTWFnbmlmaWNlbnQgQVBJJykge1xuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdJbmNvcnJlY3QgdXJsJyxcbiAgICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhXG4gICAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJlcy5ib2R5ID0ge1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMuYm9keSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKFxuICAgIG9uQ2FsbE9wdGlvbnM/OiBPbkNhbGxSZXF1ZXN0T3B0aW9uc1xuICApOiBBeGlvc0hlYWRlcnMge1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuXG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgcmVxdWVzdEhlYWRlcnMuc2V0QXV0aG9yaXphdGlvbihgQmFzaWMgJHtiYXNpY31gKTtcbiAgICByZXF1ZXN0SGVhZGVycy5zZXQodGhpcy5oZWFkZXJzKTtcblxuICAgIGNvbnN0IHJlY2VpdmVkT25DYWxsSGVhZGVycyA9IG9uQ2FsbE9wdGlvbnMgJiYgb25DYWxsT3B0aW9ucy5oZWFkZXJzO1xuICAgIGNvbnN0IG9uQ2FsbEhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzRnJvbU9iamVjdChyZWNlaXZlZE9uQ2FsbEhlYWRlcnMpO1xuICAgIHJlcXVlc3RIZWFkZXJzLnNldChvbkNhbGxIZWFkZXJzKTtcbiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnM7XG4gIH1cblxuICBwcml2YXRlIG1ha2VIZWFkZXJzRnJvbU9iamVjdChcbiAgICBoZWFkZXJzT2JqZWN0OiBSYXdBeGlvc1JlcXVlc3RIZWFkZXJzID0ge31cbiAgKTogQXhpb3NIZWFkZXJzIHtcbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSBuZXcgQXhpb3NIZWFkZXJzKCk7XG4gICAgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZW50cmllcyhoZWFkZXJzT2JqZWN0KS5yZWR1Y2UoXG4gICAgICAoaGVhZGVyc0FjY3VtdWxhdG9yOiBBeGlvc0hlYWRlcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBoZWFkZXJzQWNjdW11bGF0b3Iuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gaGVhZGVyc0FjY3VtdWxhdG9yO1xuICAgICAgfSwgcmVxdWVzdEhlYWRlcnNcbiAgICApO1xuICAgIHJldHVybiByZXF1ZXN0SGVhZGVycztcbiAgfVxuXG4gIHF1ZXJ5KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWV0aG9kLCB1cmwsIHsgcXVlcnksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBjb21tYW5kKFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCBzdHJpbmcgfCBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgYWRkRGVmYXVsdEhlYWRlcnMgPSB0cnVlXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgIGlmIChhZGREZWZhdWx0SGVhZGVycykge1xuICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH07XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdnZXQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0V2l0aEZEKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdXRXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwYXRjaFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwYXRjaCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRlbGV0ZSh1cmw6IHN0cmluZywgZGF0YT86IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgnZGVsZXRlJywgdXJsLCBkYXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHtcbiAgQ3JlYXRlVXBkYXRlUm91dGVEYXRhLCBEZXN0cm95Um91dGVSZXNwb25zZSwgUm91dGUsIFJvdXRlc0xpc3RRdWVyeSwgVXBkYXRlUm91dGVSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvcm91dGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBSb3V0ZXNMaXN0UXVlcnkpOiBQcm9taXNlPFJvdXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3JvdXRlcycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL3JvdXRlcycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8VXBkYXRlUm91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjMvcm91dGVzLyR7aWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3lSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IFN0YXRzUXVlcnksIFN0YXRzT3B0aW9ucywgU3RhdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdGF0c09wdGlvbnMnO1xuXG5jbGFzcyBTdGF0cyB7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IHN0cmluZztcbiAgc3RhdHM6IFN0YXRbXTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUoZGF0YS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSBkYXRhLnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogU3RhdCkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0IH07XG4gICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeTogU3RhdHNRdWVyeSB8IHVuZGVmaW5lZCk6IEFycmF5PEFycmF5PHN0cmluZz4+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj47XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMocXVlcnkpLmxlbmd0aCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocXVlcnkpLnJlZHVjZSgoYXJyYXlXaXRoUGFpcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZWRQcm9wZXJ0eSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gW2tleSwgaXRlbV0pO1xuICAgICAgICAgIHJldHVybiBbLi4uYXJyYXlXaXRoUGFpcnMsIC4uLnJlcGVhdGVkUHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGFycmF5V2l0aFBhaXJzO1xuICAgICAgfSwgW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj4pO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXM7XG4gIH1cblxuICBfcGFyc2VTdGF0cyhyZXNwb25zZTogeyBib2R5OiBTdGF0c09wdGlvbnMgfSk6IFN0YXRzIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxTdGF0cz4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhLFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQsXG4gIFN1cHByZXNzaW9uRGF0YVR5cGUsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlLFxuICBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQsXG4gIFN1cHByZXNzaW9uTGlzdCxcbiAgU3VwcHJlc3Npb25MaXN0UXVlcnksXG4gIFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlLFxuICBTdXBwcmVzc2lvbk1vZGVscyxcbiAgU3VwcHJlc3Npb25SZXNwb25zZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcbmltcG9ydCB7IElCb3VuY2UsIEJvdW5jZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL0JvdW5jZSc7XG5pbXBvcnQgeyBJQ29tcGxhaW50LCBDb21wbGFpbnREYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9Db21wbGFpbnQnO1xuaW1wb3J0IHsgSVVuc3Vic2NyaWJlLCBVbnN1YnNjcmliZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL1Vuc3Vic2NyaWJlJztcbmltcG9ydCB7IElXaGl0ZUxpc3QsIFdoaXRlTGlzdERhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvU3VwcHJlc3Npb25zL1doaXRlTGlzdCc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcblxuY29uc3QgY3JlYXRlT3B0aW9ucyA9IHtcbiAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cbn07XG5leHBvcnQgY2xhc3MgU3VwcHJlc3Npb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHR5cGU6IFN1cHByZXNzaW9uTW9kZWxzKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEJvdW5jZSBleHRlbmRzIFN1cHByZXNzaW9uIGltcGxlbWVudHMgSUJvdW5jZSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5CT1VOQ0VTKTtcbiAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgdGhpcy5jb2RlID0gK2RhdGEuY29kZTtcbiAgICB0aGlzLmVycm9yID0gZGF0YS5lcnJvcjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wbGFpbnQgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElDb21wbGFpbnQge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQ29tcGxhaW50RGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkNPTVBMQUlOVFMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1YnNjcmliZSBleHRlbmRzIFN1cHByZXNzaW9uIGltcGxlbWVudHMgSVVuc3Vic2NyaWJlIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLnRhZ3MgPSBkYXRhLnRhZ3M7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJV2hpdGVMaXN0IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBXaGl0ZUxpc3REYXRhKSB7XG4gICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuV0hJVEVMSVNUUyk7XG4gICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgdGhpcy5yZWFzb24gPSBkYXRhLnJlYXNvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZEF0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBwcmVzc2lvbkNsaWVudCBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8U3VwcHJlc3Npb25MaXN0PiB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1vZGVsczogTWFwPHN0cmluZywgYW55PjtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLm1vZGVscyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ2JvdW5jZXMnLCBCb3VuY2UpO1xuICAgIHRoaXMubW9kZWxzLnNldCgnY29tcGxhaW50cycsIENvbXBsYWludCk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCd1bnN1YnNjcmliZXMnLCBVbnN1YnNjcmliZSk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCd3aGl0ZWxpc3RzJywgV2hpdGVMaXN0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YTogU3VwcHJlc3Npb25EYXRhVHlwZSk6XG4gICAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgICB9XG4gICk6IFN1cHByZXNzaW9uTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIFN1cHByZXNzaW9uTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGl0ZW0pID0+IG5ldyBNb2RlbChpdGVtKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgICAgVFxuICAgIH1cbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2hpdGVMaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgICB9XG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAnd2hpdGVsaXN0cycpLCBkYXRhKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVscy5oYXModHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnVW5rbm93biB0eXBlIHZhbHVlJyxcbiAgICAgICAgYm9keTogeyBtZXNzYWdlOiAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXNwb25zZShyZXNwb25zZTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlKTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHR5cGU6IHJlc3BvbnNlLmJvZHkudHlwZSB8fCAnJyxcbiAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBTdXBwcmVzc2lvbkxpc3RRdWVyeVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbHMuZ2V0KHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgcXVlcnksIG1vZGVsKTtcbiAgfVxuXG4gIGdldChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8Qm91bmNlIHwgQ29tcGxhaW50IHwgVW5zdWJzY3JpYmUgfCBXaGl0ZUxpc3Q+IHtcbiAgICB0aGlzLmNoZWNrVHlwZSh0eXBlKTtcblxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbHMuZ2V0KHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5nZXQodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlSXRlbTx0eXBlb2YgbW9kZWw+KHJlc3BvbnNlLmJvZHksIG1vZGVsKSk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICB0aGlzLmNoZWNrVHlwZSh0eXBlKTtcbiAgICAvLyBzdXBwb3J0cyBhZGRpbmcgbXVsdGlwbGUgc3VwcHJlc3Npb25zIGJ5IGRlZmF1bHRcbiAgICBsZXQgcG9zdERhdGE7XG4gICAgaWYgKHR5cGUgPT09ICd3aGl0ZWxpc3RzJykge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2hpdGVMaXN0KGRvbWFpbiwgZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBwb3N0RGF0YSA9IFtkYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zdERhdGEgPSBbLi4uZGF0YV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3QodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUpLCBKU09OLnN0cmluZ2lmeShwb3N0RGF0YSksIGNyZWF0ZU9wdGlvbnMpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQ+IHtcbiAgICB0aGlzLmNoZWNrVHlwZSh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZGVsZXRlKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlLCBlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcykpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSkgPT4gKHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgICB2YWx1ZTogcmVzcG9uc2UuYm9keS52YWx1ZSB8fCAnJyxcbiAgICAgICAgYWRkcmVzczogcmVzcG9uc2UuYm9keS5hZGRyZXNzIHx8ICcnLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3VwcHJlc3Npb25DbGllbnQ7XG4iLCJpbXBvcnQgeyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0aW9uUmVzcG9uc2UsIFZhbGlkYXRpb25RdWVyeSB9IGZyb20gJy4vaW50ZXJmYWNlcy9WYWxpZGF0ZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYWxpZGF0ZUNsaWVudCB7XG4gIHB1YmxpYyBtdWx0aXBsZVZhbGlkYXRpb247XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50OiBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLm11bHRpcGxlVmFsaWRhdGlvbiA9IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGdldChhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeTogVmFsaWRhdGlvblF1ZXJ5ID0geyBhZGRyZXNzIH07XG4gICAgY29uc3QgcmVzdWx0OiBWYWxpZGF0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHF1ZXJ5KTtcbiAgICByZXR1cm4gcmVzdWx0LmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdDtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG5pbXBvcnQge1xuICBWYWxpZGF0aW9uUmVzcG9uc2UsXG4gIFdlYmhvb2tMaXN0LFxuICBXZWJob29rUmVzcG9uc2UsXG4gIFdlYmhvb2tzSWRzLFxuICBXZWJob29rc1F1ZXJ5XG59IGZyb20gJy4vaW50ZXJmYWNlcy9XZWJob29rcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5jbGFzcyBXZWJob29rIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VXZWJob29rTGlzdChyZXNwb25zZTogeyBib2R5OiB7IHdlYmhvb2tzOiBXZWJob29rTGlzdCB9IH0pOiBXZWJob29rTGlzdCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkud2ViaG9va3M7XG4gIH1cblxuICBfcGFyc2VXZWJob29rV2l0aElEKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlOiBXZWJob29rUmVzcG9uc2UpOiBXZWJob29rIHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSZXNwb25zZSA9IHJlc3BvbnNlPy5ib2R5Py53ZWJob29rO1xuICAgICAgbGV0IHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJsO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdXJsID0gd2ViaG9va1Jlc3BvbnNlPy51cmxzICYmIHdlYmhvb2tSZXNwb25zZS51cmxzLmxlbmd0aFxuICAgICAgICAgID8gd2ViaG9va1Jlc3BvbnNlLnVybHNbMF1cbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgV2ViaG9vayhpZCwgdXJsKTtcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1Rlc3QocmVzcG9uc2U6IHsgYm9keTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IH0pXG4gIDoge2NvZGU6IG51bWJlciwgbWVzc2FnZTpzdHJpbmd9IHtcbiAgICByZXR1cm4geyBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUsIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSB9IGFzIFZhbGlkYXRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5OiBXZWJob29rc1F1ZXJ5KTogUHJvbWlzZTxXZWJob29rTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnKSwgcXVlcnkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tMaXN0KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgaWQ6IFdlYmhvb2tzSWRzKTogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGVzdCA9IGZhbHNlKTogUHJvbWlzZTxXZWJob29rIHwgVmFsaWRhdGlvblJlc3BvbnNlPiB7XG4gICAgaWYgKHRlc3QpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCwgJ3Rlc3QnKSwgeyB1cmwgfSlcbiAgICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rVGVzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnKSwgeyBpZCwgdXJsIH0pXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcpOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpLCB7IHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nKSA6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9iYXNlNjQgdjEuMC4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSwgYW5kIHVzZVxuXHQvLyBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9O1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yO1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxuXHRcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cblx0XHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xuXHR9O1xuXG5cdHZhciBUQUJMRSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3NwYWNlLWNoYXJhY3RlclxuXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFx0XFxuXFxmXFxyIF0vZztcblxuXHQvLyBgZGVjb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGF0b2JgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZC4gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1hdG9iXG5cdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxuXHQvLyBpbXBsZW1lbnRhdGlvbi4gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYXRrLzEwMjAzOTZcblx0dmFyIGRlY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpXG5cdFx0XHQucmVwbGFjZShSRUdFWF9TUEFDRV9DSEFSQUNURVJTLCAnJyk7XG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoICUgNCA9PSAwKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XG5cdFx0XHRsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGxlbmd0aCAlIDQgPT0gMSB8fFxuXHRcdFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xuXHRcdFx0L1teK2EtekEtWjAtOS9dLy50ZXN0KGlucHV0KVxuXHRcdCkge1xuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdJbnZhbGlkIGNoYXJhY3RlcjogdGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgYml0Q291bnRlciA9IDA7XG5cdFx0dmFyIGJpdFN0b3JhZ2U7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XG5cdFx0XHRiaXRTdG9yYWdlID0gYml0Q291bnRlciAlIDQgPyBiaXRTdG9yYWdlICogNjQgKyBidWZmZXIgOiBidWZmZXI7XG5cdFx0XHQvLyBVbmxlc3MgdGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBncm91cCBvZiA0IGNoYXJhY3RlcnPigKZcblx0XHRcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XG5cdFx0XHRcdC8vIOKApmNvbnZlcnQgdGhlIGZpcnN0IDggYml0cyB0byBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuXG5cdFx0XHRcdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuXHRcdFx0XHRcdDB4RkYgJiBiaXRTdG9yYWdlID4+ICgtMiAqIGJpdENvdW50ZXIgJiA2KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkOiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWJ0b2Fcblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXHRcdGlmICgvW15cXDAtXFx4RkZdLy50ZXN0KGlucHV0KSkge1xuXHRcdFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcblx0XHRcdC8vIG1hdGNoZWQsIGFuZCB0aGUgaW5wdXQgaXMgc3VwcG9zZWQgdG8gb25seSBjb250YWluIEFTQ0lJIGFueXdheS5cblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgJyArXG5cdFx0XHRcdCdMYXRpbjEgcmFuZ2UuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIHBhZGRpbmcgPSBpbnB1dC5sZW5ndGggJSAzO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR2YXIgYTtcblx0XHR2YXIgYjtcblx0XHR2YXIgYztcblx0XHR2YXIgYnVmZmVyO1xuXHRcdC8vIE1ha2Ugc3VyZSBhbnkgcGFkZGluZyBpcyBoYW5kbGVkIG91dHNpZGUgb2YgdGhlIGxvb3AuXG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCAtIHBhZGRpbmc7XG5cblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDE2O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbikgPDwgODtcblx0XHRcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGIgKyBjO1xuXHRcdFx0Ly8gVHVybiB0aGUgMjQgYml0cyBpbnRvIGZvdXIgY2h1bmtzIG9mIDYgYml0cyBlYWNoLCBhbmQgYXBwZW5kIHRoZVxuXHRcdFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTIgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gNiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChwYWRkaW5nID09IDIpIHtcblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYjtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTApICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPj4gNCkgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xuXHRcdFx0XHQnPSdcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcblx0XHRcdGJ1ZmZlciA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAyKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xuXHRcdFx0XHQnPT0nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGJhc2U2NCA9IHtcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J3ZlcnNpb24nOiAnMS4wLjAnXG5cdH07XG5cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gYmFzZTY0O1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gYmFzZTY0O1xuXHRcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XG5cdFx0XHRcdGJhc2U2NC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gYmFzZTY0W2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuYmFzZTY0ID0gYmFzZTY0O1xuXHR9XG5cbn0odGhpcykpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gQXhpb3MgdjEuMy4zIENvcHlyaWdodCAoYykgMjAyMyBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBjb25zdCBwYXR0ZXJuID0gJ1tvYmplY3QgRm9ybURhdGFdJztcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8XG4gICAgdG9TdHJpbmcuY2FsbCh0aGluZykgPT09IHBhdHRlcm4gfHxcbiAgICAoaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gcGF0dGVybilcbiAgKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgaWYgKHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufTtcblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxudmFyIHV0aWxzID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3Rcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlJDEoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUkMSk7XG4gIH0gOiBlbmNvZGUkMTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIEludGVyY2VwdG9yTWFuYWdlciQxID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuXG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXMkMSA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG5cbnZhciBGb3JtRGF0YSQxID0gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzU3RhbmRhcmRCcm93c2VyRW52ID0gKCgpID0+IHtcbiAgbGV0IHByb2R1Y3Q7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gICAgKHByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdCkgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICBwcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgIHByb2R1Y3QgPT09ICdOUycpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufSkoKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuIGNvbnN0IGlzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuXG52YXIgcGxhdGZvcm0gPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zJDEsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsXG4gICAgQmxvYlxuICB9LFxuICBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgaXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuXG5mdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIGlmICghaGFzSlNPTkNvbnRlbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbnZhciBkZWZhdWx0cyQxID0gZGVmYXVsdHM7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyTmFtZShzdHIpIHtcbiAgcmV0dXJuIC9eWy1fYS16QS1aXSskLy50ZXN0KHN0ci50cmltKCkpO1xufVxuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSk7XG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxudmFyIGNvb2tpZXMgPSBwbGF0Zm9ybS5pc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IFtdO1xuICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH0pKCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5mdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cblxudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHBsYXRmb3JtLmlzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG5mdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NFdmVudFJlZHVjZXIobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0pIHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZVxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9O1xufVxuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiAocGxhdGZvcm0uaXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpKSB7XG4gICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmIChwbGF0Zm9ybS5pc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKVxuICAgICAgICAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KGNvbmZpZy54c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlclxufTtcblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbnZhciBhZGFwdGVycyA9IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBpZigoYWRhcHRlciA9IHV0aWxzLmlzU3RyaW5nKG5hbWVPckFkYXB0ZXIpID8ga25vd25BZGFwdGVyc1tuYW1lT3JBZGFwdGVyLnRvTG93ZXJDYXNlKCldIDogbmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG4gICAgICBpZiAoYWRhcHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgYEFkYXB0ZXIgJHtuYW1lT3JBZGFwdGVyfSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudGAsXG4gICAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICB1dGlscy5oYXNPd25Qcm9wKGtub3duQWRhcHRlcnMsIG5hbWVPckFkYXB0ZXIpID9cbiAgICAgICAgICBgQWRhcHRlciAnJHtuYW1lT3JBZGFwdGVyfScgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGRgIDpcbiAgICAgICAgICBgVW5rbm93biBhZGFwdGVyICcke25hbWVPckFkYXB0ZXJ9J2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhZGFwdGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59O1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzJDEuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMkMSA/IHRoaW5nLnRvSlNPTigpIDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuMy4zXCI7XG5cbmNvbnN0IHZhbGlkYXRvcnMkMSA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMkMS50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0b3IgPSB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMVxufTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGNvbnRleHRIZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG52YXIgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYW5jZWxUb2tlbiQxID0gQ2FuY2VsVG9rZW47XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cblxuY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbnZhciBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMkMSk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcyQxO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbiQxO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlJDE7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF4aW9zLmNqcy5tYXBcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MzApO1xuIl0sIm5hbWVzIjpbIm9wdGlvbnMiLCJmb3JtRGF0YSIsImNvbmZpZyIsIl9fYXNzaWduIiwidXJsIiwidXNlcm5hbWUiLCJFcnJvciIsImtleSIsInRoaXMiLCJyZXF1ZXN0IiwicmVxdWVzdF8xIiwibWFpbExpc3RzTWVtYmVycyIsIm1haWxMaXN0TWVtYmVyc18xIiwiZG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJkb21haW5zQ3JlZGVudGlhbHNfMSIsImRvbWFpblRlbXBsYXRlc0NsaWVudCIsImRvbWFpbnNUZW1wbGF0ZXNfMSIsImRvbWFpblRhZ3NDbGllbnQiLCJkb21haW5zVGFnc18xIiwibXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uXzEiLCJkb21haW5zIiwiZG9tYWluc18xIiwid2ViaG9va3MiLCJ3ZWJob29rc18xIiwiZXZlbnRzIiwiZXZlbnRzXzEiLCJzdGF0cyIsInN0YXRzXzEiLCJzdXBwcmVzc2lvbnMiLCJzdXBwcmVzc2lvbnNfMSIsIm1lc3NhZ2VzIiwibWVzc2FnZXNfMSIsInJvdXRlcyIsInJvdXRlc18xIiwiaXBzIiwiaXBzXzEiLCJpcF9wb29scyIsImlwX3Bvb2xzXzEiLCJsaXN0cyIsImxpc3RzXzEiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlXzEiLCJOYXZpZ2F0aW9uVGhydVBhZ2VzIiwiaWQiLCJwYWdlVXJsIiwidXJsU2VwYXJhdG9yIiwiaXRlcmF0b3JOYW1lIiwic2VhcmNoUGFyYW1zIiwiVVJMIiwicGFnZVZhbHVlIiwic3BsaXQiLCJwb3AiLCJpdGVyYXRvclBvc2l0aW9uIiwiaGFzIiwiZ2V0IiwidW5kZWZpbmVkIiwicGFnZSIsInJlc3BvbnNlIiwiT2JqZWN0IiwiZW50cmllcyIsImJvZHkiLCJwYWdpbmciLCJyZWR1Y2UiLCJhY2MiLCJfYSIsIl90aGlzIiwicGFyc2VQYWdlIiwiY2xpZW50VXJsIiwicXVlcnkiLCJxdWVyeUNvcHkiLCJ1cGRhdGVkUXVlcnkiLCJNb2RlbCIsInVwZGF0ZVVybEFuZFF1ZXJ5IiwiX2IiLCJwYXJzZUxpc3QiLCJlcnJvcl8xIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsIm1lc3NhZ2UiLCJkYXRhIiwicmVjZWl2aW5nIiwic2VuZGluZyIsIm5hbWUiLCJyZXF1aXJlX3RscyIsInNraXBfdmVyaWZpY2F0aW9uIiwic3RhdGUiLCJ3aWxkY2FyZCIsInNwYW1fYWN0aW9uIiwiY3JlYXRlZF9hdCIsInNtdHBfcGFzc3dvcmQiLCJzbXRwX2xvZ2luIiwidHlwZSIsInJlY2VpdmluZ19kbnNfcmVjb3JkcyIsInNlbmRpbmdfZG5zX3JlY29yZHMiLCJleHBvcnRzIiwiZG9tYWluQ3JlZGVudGlhbHMiLCJkb21haW5UZW1wbGF0ZXMiLCJkb21haW5UYWdzIiwiRG9tYWluQ2xpZW50IiwiaXRlbXMiLCJtYXAiLCJpdGVtIiwiRG9tYWluIiwiZG9tYWluIiwidHJhY2tpbmciLCJ0aGVuIiwicmVzIiwicGFyc2VEb21haW5MaXN0IiwiX3BhcnNlRG9tYWluIiwicG9zdE9iaiIsImZvcmNlX2RraW1fYXV0aG9yaXR5IiwidG9TdHJpbmciLCJwb3N0V2l0aEZEIiwicHV0IiwiZGVsZXRlIiwiX3BhcnNlTWVzc2FnZSIsImNvbm5lY3Rpb24iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwiYWN0aXZlIiwicHV0V2l0aEZEIiwiX3BhcnNlVHJhY2tpbmdVcGRhdGUiLCJpcCIsInBvb2xfaWQiLCJyZXBsYWNlbWVudCIsInNlbGYiLCJka2ltU2VsZWN0b3IiLCJ3ZWJQcmVmaXgiLCJiYXNlUm91dGUiLCJEb21haW5DcmVkZW50aWFsc0NsaWVudCIsInRvdGFsQ291bnQiLCJ0b3RhbF9jb3VudCIsInNwZWMiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJjb25jYXQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJjcmVkZW50aWFsc0xvZ2luIiwiX3BhcnNlRGVsZXRlZFJlc3BvbnNlIiwidGFnSW5mbyIsInRhZyIsImRlc2NyaXB0aW9uIiwiRGF0ZSIsInRhZ1N0YXRpc3RpY0luZm8iLCJzdGFydCIsImVuZCIsInJlc29sdXRpb24iLCJzdGF0IiwidGltZSIsIl9zdXBlciIsIl9fZXh0ZW5kcyIsIkRvbWFpblRhZ3NDbGllbnQiLCJEb21haW5UYWciLCJwYWdlcyIsInBhcnNlUGFnZUxpbmtzIiwiRG9tYWluVGFnU3RhdGlzdGljIiwicmVxdWVzdExpc3RXaXRoUGFnZXMiLCJfcGFyc2VUYWdTdGF0aXN0aWMiLCJOYXZpZ2F0aW9uVGhydVBhZ2VzXzEiLCJkb21haW5UZW1wbGF0ZUZyb21BUEkiLCJjcmVhdGVkQXQiLCJjcmVhdGVkQnkiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJsZW5ndGgiLCJyZXN1bHQiLCJEb21haW5UZW1wbGF0ZXNDbGllbnQiLCJEb21haW5UZW1wbGF0ZUl0ZW0iLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInRlbXBsYXRlVmVyc2lvbiIsImQiLCJwYXJzZUNyZWF0aW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0aW9uUmVzcG9uc2UiLCJwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlIiwicGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZSIsInBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UiLCJwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zIiwiYm9keU1lc3NhZ2UiLCJlcnJvciIsInN0YWNrIiwiZGV0YWlscyIsIkV2ZW50Q2xpZW50IiwiRm9ybURhdGFDb25zdHJ1Y3RvciIsIkZvcm1EYXRhQnVpbGRlciIsImtleXMiLCJmaWx0ZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYWRkRmlsZXNUb0ZEIiwiYWRkTWltZURhdGFUb0ZEIiwiYWRkQ29tbW9uUHJvcGVydHlUb0ZEIiwiZm9ybURhdGFJbnN0YW5jZSIsImdldEhlYWRlcnMiLCJpc1N0cmVhbSIsImZpbGVuYW1lIiwiY29udGVudFR5cGUiLCJrbm93bkxlbmd0aCIsIkJ1ZmZlciIsImlzQnVmZmVyIiwibm9kZUZvcm1EYXRhIiwicHJlcGFyZWREYXRhIiwiZnJvbSIsImFwcGVuZCIsInByb3BlcnR5TmFtZSIsInZhbHVlIiwiYXBwZW5kRmlsZVRvRkQiLCJvcmlnaW5hbEtleSIsIm9iaiIsIm9iakRhdGEiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImlzTm9kZUZvcm1EYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsInBpcGUiLCJGb3JtRGF0YSIsIk1haWxndW4iLCJjbGllbnRfMSIsIlN1cHByZXNzaW9uTW9kZWxzIiwiSXBQb29sc0NsaWVudCIsInBhcnNlSXBQb29sc1Jlc3BvbnNlIiwicG9vbElkIiwicGF0Y2hXaXRoRkQiLCJJcHNDbGllbnQiLCJwYXJzZUlwc1Jlc3BvbnNlIiwibWVtYmVycyIsIkxpc3RzQ2xpZW50IiwidmFsaWRhdGlvblJlc3VsdCIsIm1haWxMaXN0QWRkcmVzcyIsImxpc3QiLCJwb3N0IiwicGFyc2VWYWxpZGF0aW9uUmVzdWx0IiwiTWFpbExpc3RzTWVtYmVycyIsIm5ld0RhdGEiLCJ2YXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YnNjcmliZWQiLCJtYWlsTGlzdE1lbWJlckFkZHJlc3MiLCJtZW1iZXIiLCJyZXFEYXRhIiwiY2hlY2tBbmRVcGRhdGVEYXRhIiwidXBzZXJ0IiwiTWVzc2FnZXNDbGllbnQiLCJ5ZXNOb1Byb3BlcnRpZXMiLCJTZXQiLCJfcGFyc2VSZXNwb25zZSIsIm1vZGlmaWVkRGF0YSIsInByZXBhcmVCb29sZWFuVmFsdWVzIiwicmVzcG9uc2VTdGF0dXNDb2RlIiwicXVhbnRpdHkiLCJyZWNvcmRzUHJvY2Vzc2VkIiwicmVjb3Jkc19wcm9jZXNzZWQiLCJkb3dubG9hZF91cmwiLCJkb3dubG9hZFVybCIsImNzdiIsImpzb24iLCJzdW1tYXJ5IiwiY2F0Y2hBbGwiLCJjYXRjaF9hbGwiLCJkZWxpdmVyYWJsZSIsImRvTm90U2VuZCIsImRvX25vdF9zZW5kIiwidW5kZWxpdmVyYWJsZSIsInVua25vd24iLCJyaXNrIiwiaGlnaCIsImxvdyIsIm1lZGl1bSIsIk11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImpvYnMiLCJqb2IiLCJNdWx0aXBsZVZhbGlkYXRpb25Kb2IiLCJ0b3RhbCIsImxpc3RJZCIsIm11bHRpcGxlVmFsaWRhdGlvbkRhdGEiLCJtdWx0aXBsZVZhbGlkYXRpb25GaWxlIiwiZmlsZSIsImhhbmRsZVJlc3BvbnNlIiwidGltZW91dCIsImhlYWRlcnMiLCJtYWtlSGVhZGVyc0Zyb21PYmplY3QiLCJmb3JtRGF0YUJ1aWxkZXIiLCJmb3JtRGF0YUJ1aWxkZXJfMSIsIm1heEJvZHlMZW5ndGgiLCJSZXF1ZXN0IiwibWV0aG9kIiwib25DYWxsT3B0aW9ucyIsInJlcXVlc3RIZWFkZXJzIiwiam9pbkFuZFRyYW5zZm9ybUhlYWRlcnMiLCJwYXJhbXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiVVJMU2VhcmNoUGFyYW1zIiwidXJsVmFsdWUiLCJheGlvc18xIiwidG9Mb2NhbGVVcHBlckNhc2UiLCJfZCIsImVycm9yUmVzcG9uc2UiLCJlcnJfMSIsImNvZGUiLCJfYyIsImdldFJlc3BvbnNlQm9keSIsImJhc2ljIiwiYmFzZTY0IiwiZW5jb2RlIiwic2V0QXV0aG9yaXphdGlvbiIsInNldCIsInJlY2VpdmVkT25DYWxsSGVhZGVycyIsIm9uQ2FsbEhlYWRlcnMiLCJoZWFkZXJzT2JqZWN0IiwiaGVhZGVyc0FjY3VtdWxhdG9yIiwiY3VycmVudFBhaXIiLCJhZGREZWZhdWx0SGVhZGVycyIsInJlcXVlc3RPcHRpb25zIiwiY29tbWFuZCIsImNyZWF0ZUZvcm1EYXRhIiwiUm91dGVzQ2xpZW50Iiwicm91dGUiLCJTdGF0c0NsaWVudCIsImFycmF5V2l0aFBhaXJzIiwicmVwZWF0ZWRQcm9wZXJ0eSIsInB1c2giLCJTdGF0cyIsInByZXBhcmVTZWFyY2hQYXJhbXMiLCJfcGFyc2VTdGF0cyIsImNyZWF0ZU9wdGlvbnMiLCJTdXBwcmVzc2lvbnNfMSIsIkJPVU5DRVMiLCJhZGRyZXNzIiwiU3VwcHJlc3Npb24iLCJDT01QTEFJTlRTIiwiVU5TVUJTQ1JJQkVTIiwidGFncyIsIldISVRFTElTVFMiLCJyZWFzb24iLCJtb2RlbHMiLCJNYXAiLCJCb3VuY2UiLCJDb21wbGFpbnQiLCJVbnN1YnNjcmliZSIsIldoaXRlTGlzdCIsIlN1cHByZXNzaW9uQ2xpZW50IiwicHJlcGFyZVJlc3BvbnNlIiwiY2hlY2tUeXBlIiwibW9kZWwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJfcGFyc2VJdGVtIiwicG9zdERhdGEiLCJjcmVhdGVXaGl0ZUxpc3QiLCJtb2R1bGUiLCJtdWx0aXBsZVZhbGlkYXRpb24iLCJWYWxpZGF0ZUNsaWVudCIsIldlYmhvb2tDbGllbnQiLCJ3ZWJob29rUmVzcG9uc2UiLCJ3ZWJob29rIiwidXJscyIsIldlYmhvb2siLCJfcGFyc2VXZWJob29rTGlzdCIsIl9wYXJzZVdlYmhvb2tXaXRoSUQiLCJ0ZXN0IiwiX3BhcnNlV2ViaG9va1Rlc3QiLCJyb290IiwiZnJlZUV4cG9ydHMiLCJmcmVlR2xvYmFsIiwiZyIsImdsb2JhbCIsIndpbmRvdyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsInByb3RvdHlwZSIsIlRBQkxFIiwiUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyIsImlucHV0IiwiU3RyaW5nIiwiYSIsImIiLCJjIiwiYnVmZmVyIiwicGFkZGluZyIsIm91dHB1dCIsInBvc2l0aW9uIiwiY2hhckNvZGVBdCIsImNoYXJBdCIsInJlcGxhY2UiLCJiaXRTdG9yYWdlIiwiYml0Q291bnRlciIsImluZGV4T2YiLCJmcm9tQ2hhckNvZGUiLCJub3JtYWxpemUiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiVHlwZUVycm9yIiwibWF0Y2giLCJmaXJzdCIsInNoaWZ0IiwiaSIsImNvbXBvbmVudCIsInN0ciIsImpvaW4iLCJwYXJ0cyIsImFyZ3VtZW50cyIsInNsaWNlIiwiY2FsbCIsImRlZmluaXRpb24iLCJiaW5kIiwiZm4iLCJ0aGlzQXJnIiwiYXBwbHkiLCJnZXRQcm90b3R5cGVPZiIsImtpbmRPZiIsImNhY2hlIiwiY3JlYXRlIiwidGhpbmciLCJ0b0xvd2VyQ2FzZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0FycmF5QnVmZmVyIiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJ2YWwiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIml0ZXJhdG9yIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzVVJMU2VhcmNoUGFyYW1zIiwiYWxsT3duS2V5cyIsImwiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJoYXNPd25Qcm9wZXJ0eSIsInByb3AiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBQkVUIiwiQUxQSEFfRElHSVQiLCJ0b1VwcGVyQ2FzZSIsInV0aWxzIiwiY29uc3RydWN0b3IiLCJpc0Zvcm1EYXRhIiwicGF0dGVybiIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpc0Jvb2xlYW4iLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJ0cmltIiwic3RyaXBCT00iLCJjb250ZW50IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJkZWZpbmVQcm9wZXJ0eSIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJsYXN0SW5kZXgiLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJtIiwicDEiLCJwMiIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsIk51bWJlciIsImlzRmluaXRlIiwiZ2VuZXJhdGVTdHJpbmciLCJzaXplIiwiYWxwaGFiZXQiLCJNYXRoIiwicmFuZG9tIiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInZpc2l0Iiwic291cmNlIiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiQXhpb3NFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwidG9KU09OIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwicHJvdG90eXBlJDEiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJwYXRoIiwiZG90cyIsInRva2VuIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsIm9wdGlvbiIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsInVzZUJsb2IiLCJCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJzb21lIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsImVuY29kZSQxIiwiY2hhck1hcCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwiX3BhaXJzIiwiYnVpbGRVUkwiLCJfZW5jb2RlIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImVuY29kZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIkMSIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiaCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJVUkxTZWFyY2hQYXJhbXMkMSIsIkZvcm1EYXRhJDEiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJuYXZpZ2F0b3IiLCJkb2N1bWVudCIsImlzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwicGxhdGZvcm0iLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwicHJvdG9jb2xzIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwicGFyc2VQcm9wUGF0aCIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwiZGVmYXVsdHMiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJoZWxwZXJzIiwiaXNOb2RlIiwidG9VUkxFbmNvZGVkRm9ybSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImUiLCJzdHJpbmdpZnlTYWZlbHkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwiY29tbW9uIiwiZGVmYXVsdHMkMSIsImlnbm9yZUR1cGxpY2F0ZU9mIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsImhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsIkF4aW9zSGVhZGVycyIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsInNldEhlYWRlciIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwicmF3SGVhZGVycyIsInBhcnNlZCIsImxpbmUiLCJzdWJzdHJpbmciLCJwYXJzZUhlYWRlcnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsInBhcnNlVG9rZW5zIiwibWF0Y2hlciIsImRlbGV0ZWQiLCJkZWxldGVIZWFkZXIiLCJmb3JtYXQiLCJub3JtYWxpemVkIiwidyIsImNoYXIiLCJmb3JtYXRIZWFkZXIiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwic3RhdGljIiwiY29tcHV0ZWQiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJjb25maWd1cmFibGUiLCJidWlsZEFjY2Vzc29ycyIsImFjY2Vzc29yIiwiQXhpb3NIZWFkZXJzJDEiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsImNvb2tpZXMiLCJ3cml0ZSIsImV4cGlyZXMiLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsInJlYWQiLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJidWlsZEZ1bGxQYXRoIiwiYmFzZVVSTCIsInJlcXVlc3RlZFVSTCIsInJlbGF0aXZlVVJMIiwiY29tYmluZVVSTHMiLCJpc1VSTFNhbWVPcmlnaW4iLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJsb2NhdGlvbiIsInJlcXVlc3RVUkwiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJmaXJzdFNhbXBsZVRTIiwiaGVhZCIsInRhaWwiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibG9hZGVkIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsImtub3duQWRhcHRlcnMiLCJodHRwIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYXV0aCIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJidG9hIiwiZnVsbFBhdGgiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJFUlJfQkFEX1JFUVVFU1QiLCJmbG9vciIsInNldHRsZSIsImVyciIsInJlc3BvbnNlVGV4dCIsIm9wZW4iLCJwYXJhbXNTZXJpYWxpemVyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicGFyc2VQcm90b2NvbCIsInNlbmQiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwidGltZW91dE1lc3NhZ2UiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50Iiwic29ja2V0UGF0aCIsInJlc3BvbnNlRW5jb2RpbmciLCJjb25maWdWYWx1ZSIsIlZFUlNJT04iLCJ2YWxpZGF0b3JzJDEiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJ2YWxpZGF0b3JzIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiY29udGV4dEhlYWRlcnMiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsIkF4aW9zJDEiLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJfbGlzdGVuZXJzIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsInNwbGljZSIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiSHR0cFN0YXR1c0NvZGUkMSIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsImZvcm1Ub0pTT04iLCJkZWZhdWx0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIkZ1bmN0aW9uIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiJdLCJzb3VyY2VSb290IjoiIn0=
|