var koalafiSdk;koalafiSdk=(()=>{var e={16:(e,t,n)=>{var r=n(15),i=n(645)(r);i.push([e.id,"#koalafi-modal {\n  position: fixed;\n  z-index: 2000;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n}\n\n#koalafi-iframe,\n#koalafi-iframe-wrapper,\n#koalafi-modal-content {\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 2000;\n}\n\n#koalafi-loader {\n  background-color: white;\n  border-radius: 0.3rem;\n  display: flex;\n  margin: 0 auto;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n}\n\n@media only screen and (min-width: 768px) {\n  #koalafi-loader {\n    width: 540px;\n    height: 600px;\n  }\n}\n","",{version:3,sources:["webpack://./src/features/modal/modal.css"],names:[],mappings:"AAAA;EACE,eAAe;EACf,aAAa;EACb,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,cAAc;EACd,oCAAoC;EACpC,aAAa;AACf;;AAEA;;;EAGE,mBAAmB;EACnB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,YAAY;EACZ,OAAO;EACP,gBAAgB;EAChB,eAAe;EACf,MAAM;EACN,WAAW;EACX,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,qBAAqB;EACrB,aAAa;EACb,cAAc;EACd,WAAW;EACX,YAAY;EACZ,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE;IACE,YAAY;IACZ,aAAa;EACf;AACF",sourcesContent:["#koalafi-modal {\n  position: fixed;\n  z-index: 2000;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n}\n\n#koalafi-iframe,\n#koalafi-iframe-wrapper,\n#koalafi-modal-content {\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 2000;\n}\n\n#koalafi-loader {\n  background-color: white;\n  border-radius: 0.3rem;\n  display: flex;\n  margin: 0 auto;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n}\n\n@media only screen and (min-width: 768px) {\n  #koalafi-loader {\n    width: 540px;\n    height: 600px;\n  }\n}\n"],sourceRoot:""}]),e.exports=i},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var a=this[o][0];null!=a&&(i[a]=!0)}for(var s=0;s<e.length;s++){var u=[].concat(e[s]);r&&i[u[0]]||(n&&(u[2]?u[2]="".concat(n," and ").concat(u[2]):u[2]=n),t.push(u))}},t}},15:e=>{"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.exports=function(e){var n,r,i=(r=4,function(e){if(Array.isArray(e))return e}(n=e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}}(n,r)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=i[1],a=i[3];if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),u="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),c="/*# ".concat(u," */"),l=a.sources.map((function(e){return"/*# sourceURL=".concat(a.sourceRoot||"").concat(e," */")}));return[o].concat(l).concat([c]).join("\n")}return[o].join("\n")}},445:e=>{"use strict";e.exports=function(e){var t=e.uri,n=e.name,r=e.type;this.uri=t,this.name=n,this.type=r}},804:(e,t,n)=>{"use strict";var r=n(268);e.exports=function e(t,n,i){var o;void 0===n&&(n=""),void 0===i&&(i=r);var a=new Map;function s(e,t){var n=a.get(t);n?n.push.apply(n,e):a.set(t,e)}if(i(t))o=null,s([n],t);else{var u=n?n+".":"";if("undefined"!=typeof FileList&&t instanceof FileList)o=Array.prototype.map.call(t,(function(e,t){return s([""+u+t],e),null}));else if(Array.isArray(t))o=t.map((function(t,n){var r=e(t,""+u+n,i);return r.files.forEach(s),r.clone}));else if(t&&t.constructor===Object)for(var c in o={},t){var l=e(t[c],""+u+c,i);l.files.forEach(s),o[c]=l.clone}else o=t}return{clone:o,files:a}}},823:(e,t,n)=>{"use strict";t.ReactNativeFile=n(445),t.extractFiles=n(804),t.isExtractableFile=n(268)},268:(e,t,n)=>{"use strict";var r=n(445);e.exports=function(e){return"undefined"!=typeof File&&e instanceof File||"undefined"!=typeof Blob&&e instanceof Blob||e instanceof r}},458:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=n(823),o=r(n(45)),a=function(e){return i.isExtractableFile(e)||null!==e&&"object"==typeof e&&"function"==typeof e.pipe};t.default=function(e,t){var n=i.extractFiles({query:e,variables:t},"",a),r=n.clone,s=n.files;if(0===s.size)return JSON.stringify(r);var u=new("undefined"==typeof FormData?o.default:FormData);u.append("operations",JSON.stringify(r));var c={},l=0;return s.forEach((function(e){c[++l]=e})),u.append("map",JSON.stringify(c)),l=0,s.forEach((function(e,t){u.append(""+ ++l,t)})),u}},687:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return o(t,e),t},s=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},u=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}},c=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.gql=t.request=t.rawRequest=t.GraphQLClient=t.ClientError=void 0;var f=a(n(581)),d=f,p=n(33),h=l(n(458)),y=n(308),v=n(308);Object.defineProperty(t,"ClientError",{enumerable:!0,get:function(){return v.ClientError}});var m=function(e){var t={};return e&&("undefined"!=typeof Headers&&e instanceof Headers||e instanceof d.Headers?t=function(e){var t={};return e.forEach((function(e,n){t[n]=e})),t}(e):Array.isArray(e)?e.forEach((function(e){var n=e[0],r=e[1];t[n]=r})):t=e),t},b=function(){function e(e,t){this.url=e,this.options=t||{}}return e.prototype.rawRequest=function(e,t,n){return s(this,void 0,void 0,(function(){var i,o,a,s,l,d,p,v,b,g,w;return u(this,(function(u){switch(u.label){case 0:return i=this.options,o=i.headers,a=i.fetch,s=void 0===a?f.default:a,l=c(i,["headers","fetch"]),d=h.default(e,t),[4,s(this.url,r({method:"POST",headers:r(r(r({},"string"==typeof d?{"Content-Type":"application/json"}:{}),m(o)),m(n)),body:d},l))];case 1:return[4,A(p=u.sent())];case 2:if(v=u.sent(),p.ok&&!v.errors&&v.data)return b=p.headers,g=p.status,[2,r(r({},v),{headers:b,status:g})];throw w="string"==typeof v?{error:v}:v,new y.ClientError(r(r({},w),{status:p.status,headers:p.headers}),{query:e,variables:t})}}))}))},e.prototype.request=function(e,t,n){return s(this,void 0,void 0,(function(){var i,o,a,s,l,d,v,b,g,w;return u(this,(function(u){switch(u.label){case 0:return i=this.options,o=i.headers,a=i.fetch,s=void 0===a?f.default:a,l=c(i,["headers","fetch"]),d=function(e){return"string"==typeof e?e:p.print(e)}(e),v=h.default(d,t),[4,s(this.url,r({method:"POST",headers:r(r(r({},"string"==typeof v?{"Content-Type":"application/json"}:{}),m(o)),m(n)),body:v},l))];case 1:return[4,A(b=u.sent())];case 2:if(g=u.sent(),b.ok&&!g.errors&&g.data)return[2,g.data];throw w="string"==typeof g?{error:g}:g,new y.ClientError(r(r({},w),{status:b.status}),{query:d,variables:t})}}))}))},e.prototype.setHeaders=function(e){return this.options.headers=e,this},e.prototype.setHeader=function(e,t){var n,r=this.options.headers;return r?r[e]=t:this.options.headers=((n={})[e]=t,n),this},e}();function g(e,t,n){return s(this,void 0,void 0,(function(){return u(this,(function(r){return[2,new b(e).request(t,n)]}))}))}function A(e){var t=e.headers.get("Content-Type");return t&&t.startsWith("application/json")?e.json():e.text()}t.GraphQLClient=b,t.rawRequest=function(e,t,n){return s(this,void 0,void 0,(function(){return u(this,(function(r){return[2,new b(e).rawRequest(t,n)]}))}))},t.request=g,t.default=g,t.gql=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return e.reduce((function(e,n,r){return""+e+n+(r in t?t[r]:"")}),"")}},308:function(e,t){"use strict";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.ClientError=void 0;var i=function(e){function t(n,r){var i=this,o=t.extractMessage(n)+": "+JSON.stringify({response:n,request:r});return i=e.call(this,o)||this,Object.setPrototypeOf(i,t.prototype),i.response=n,i.request=r,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(i,t),i}return r(t,e),t.extractMessage=function(e){try{return e.errors[0].message}catch(t){return"GraphQL Error (Code: "+e.status+")"}},t}(Error);t.ClientError=i},581:function(e,t){var n=function(e){function t(){this.fetch=!1,this.DOMException=e.DOMException}return t.prototype=e,new t}("undefined"!=typeof self?self:this);!function(e){!function(t){var n="URLSearchParams"in e,r="Symbol"in e&&"iterator"in Symbol,i="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),o="FormData"in e,a="ArrayBuffer"in e;if(a)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(e){return e&&s.indexOf(Object.prototype.toString.call(e))>-1};function c(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function l(e){return"string"!=typeof e&&(e=String(e)),e}function f(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function d(e){this.map={},e instanceof d?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function p(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function h(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function y(e){var t=new FileReader,n=h(t);return t.readAsArrayBuffer(e),n}function v(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:i&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:o&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&i&&(t=e)&&DataView.prototype.isPrototypeOf(t)?(this._bodyArrayBuffer=v(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||u(e))?this._bodyArrayBuffer=v(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},i&&(this.blob=function(){var e=p(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var e,t,n,r=p(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,n=h(t=new FileReader),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},o&&(this.formData=function(){return this.text().then(A)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(e,t){e=c(e),t=l(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},d.prototype.delete=function(e){delete this.map[c(e)]},d.prototype.get=function(e){return e=c(e),this.has(e)?this.map[e]:null},d.prototype.has=function(e){return this.map.hasOwnProperty(c(e))},d.prototype.set=function(e,t){this.map[c(e)]=l(t)},d.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},d.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),f(e)},d.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),f(e)},d.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),f(e)},r&&(d.prototype[Symbol.iterator]=d.prototype.entries);var b=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function g(e,t){var n,r,i=(t=t||{}).body;if(e instanceof g){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new d(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,i||null==e._bodyInit||(i=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new d(t.headers)),this.method=(r=(n=t.method||this.method||"GET").toUpperCase(),b.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function A(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}})),t}function w(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new d(t.headers),this.url=t.url||"",this._initBody(e)}g.prototype.clone=function(){return new g(this,{body:this._bodyInit})},m.call(g.prototype),m.call(w.prototype),w.prototype.clone=function(){return new w(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},w.error=function(){var e=new w(null,{status:0,statusText:""});return e.type="error",e};var E=[301,302,303,307,308];w.redirect=function(e,t){if(-1===E.indexOf(t))throw new RangeError("Invalid status code");return new w(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function x(e,n){return new Promise((function(r,o){var a=new g(e,n);if(a.signal&&a.signal.aborted)return o(new t.DOMException("Aborted","AbortError"));var s=new XMLHttpRequest;function u(){s.abort()}s.onload=function(){var e,t,n={status:s.status,statusText:s.statusText,headers:(e=s.getAllResponseHeaders()||"",t=new d,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var i=n.join(":").trim();t.append(r,i)}})),t)};n.url="responseURL"in s?s.responseURL:n.headers.get("X-Request-URL");var i="response"in s?s.response:s.responseText;r(new w(i,n))},s.onerror=function(){o(new TypeError("Network request failed"))},s.ontimeout=function(){o(new TypeError("Network request failed"))},s.onabort=function(){o(new t.DOMException("Aborted","AbortError"))},s.open(a.method,a.url,!0),"include"===a.credentials?s.withCredentials=!0:"omit"===a.credentials&&(s.withCredentials=!1),"responseType"in s&&i&&(s.responseType="blob"),a.headers.forEach((function(e,t){s.setRequestHeader(t,e)})),a.signal&&(a.signal.addEventListener("abort",u),s.onreadystatechange=function(){4===s.readyState&&a.signal.removeEventListener("abort",u)}),s.send(void 0===a._bodyInit?null:a._bodyInit)}))}x.polyfill=!0,e.fetch||(e.fetch=x,e.Headers=d,e.Request=g,e.Response=w),t.Headers=d,t.Request=g,t.Response=w,t.fetch=x}({})}(n),delete n.fetch.polyfill,(t=n.fetch).default=n.fetch,t.fetch=n.fetch,t.Headers=n.Headers,t.Request=n.Request,t.Response=n.Response,e.exports=t},45:e=>{e.exports="object"==typeof self?self.FormData:window.FormData},972:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.prototype.toJSON;"function"==typeof t||(0,r.default)(0),e.prototype.inspect=t,i.default&&(e.prototype[i.default]=t)};var r=o(n(706)),i=o(n(554));function o(e){return e&&e.__esModule?e:{default:e}}},2:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return a(e,[])};var r,i=(r=n(554))&&r.__esModule?r:{default:r};function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){switch(o(e)){case"string":return JSON.stringify(e);case"function":return e.name?"[function ".concat(e.name,"]"):"[function]";case"object":return null===e?"null":function(e,t){if(-1!==t.indexOf(e))return"[Circular]";var n=[].concat(t,[e]),r=function(e){var t=e[String(i.default)];return"function"==typeof t?t:"function"==typeof e.inspect?e.inspect:void 0}(e);if(void 0!==r){var o=r.call(e);if(o!==e)return"string"==typeof o?o:a(o,n)}else if(Array.isArray(e))return function(e,t){if(0===e.length)return"[]";if(t.length>2)return"[Array]";for(var n=Math.min(10,e.length),r=e.length-n,i=[],o=0;o<n;++o)i.push(a(e[o],t));return 1===r?i.push("... 1 more item"):r>1&&i.push("... ".concat(r," more items")),"["+i.join(", ")+"]"}(e,n);return function(e,t){var n=Object.keys(e);return 0===n.length?"{}":t.length>2?"["+function(e){var t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if("Object"===t&&"function"==typeof e.constructor){var n=e.constructor.name;if("string"==typeof n&&""!==n)return n}return t}(e)+"]":"{ "+n.map((function(n){return n+": "+a(e[n],t)})).join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}},706:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}},554:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):void 0;t.default=n},807:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNode=function(e){return null!=e&&"string"==typeof e.kind},t.Token=t.Location=void 0;var r,i=(r=n(972))&&r.__esModule?r:{default:r},o=function(){function e(e,t,n){this.start=e.start,this.end=t.end,this.startToken=e,this.endToken=t,this.source=n}return e.prototype.toJSON=function(){return{start:this.start,end:this.end}},e}();t.Location=o,(0,i.default)(o);var a=function(){function e(e,t,n,r,i,o,a){this.kind=e,this.start=t,this.end=n,this.line=r,this.column=i,this.value=a,this.prev=o,this.next=null}return e.prototype.toJSON=function(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}},e}();t.Token=a,(0,i.default)(a)},849:(e,t)=>{"use strict";function n(e){for(var t=0;t<e.length;++t)if(" "!==e[t]&&"\t"!==e[t])return!1;return!0}function r(e){for(var t,n=!0,r=!0,i=0,o=null,a=0;a<e.length;++a)switch(e.charCodeAt(a)){case 13:10===e.charCodeAt(a+1)&&++a;case 10:n=!1,r=!0,i=0;break;case 9:case 32:++i;break;default:r&&!n&&(null===o||i<o)&&(o=i),r=!1}return null!==(t=o)&&void 0!==t?t:0}Object.defineProperty(t,"__esModule",{value:!0}),t.dedentBlockStringValue=function(e){var t=e.split(/\r\n|[\n\r]/g),i=r(e);if(0!==i)for(var o=1;o<t.length;o++)t[o]=t[o].slice(i);for(var a=0;a<t.length&&n(t[a]);)++a;for(var s=t.length;s>a&&n(t[s-1]);)--s;return t.slice(a,s).join("\n")},t.getBlockStringIndentation=r,t.printBlockString=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=-1===e.indexOf("\n"),i=" "===e[0]||"\t"===e[0],o='"'===e[e.length-1],a="\\"===e[e.length-1],s=!r||o||a||n,u="";return!s||r&&i||(u+="\n"+t),u+=t?e.replace(/\n/g,"\n"+t):e,s&&(u+="\n"),'"""'+u.replace(/"""/g,'\\"""')+'"""'}},33:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.print=function(e){return(0,r.visit)(e,{leave:o})};var r=n(285),i=n(849),o={Name:function(e){return e.value},Variable:function(e){return"$"+e.name},Document:function(e){return s(e.definitions,"\n\n")+"\n"},OperationDefinition:function(e){var t=e.operation,n=e.name,r=c("(",s(e.variableDefinitions,", "),")"),i=s(e.directives," "),o=e.selectionSet;return n||i||r||"query"!==t?s([t,s([n,r]),i,o]," "):o},VariableDefinition:function(e){var t=e.variable,n=e.type,r=e.defaultValue,i=e.directives;return t+": "+n+c(" = ",r)+c(" ",s(i," "))},SelectionSet:function(e){return u(e.selections)},Field:function(e){var t=e.alias,n=e.name,r=e.arguments,i=e.directives,o=e.selectionSet,a=c("",t,": ")+n,u=a+c("(",s(r,", "),")");return u.length>80&&(u=a+c("(\n",l(s(r,"\n")),"\n)")),s([u,s(i," "),o]," ")},Argument:function(e){return e.name+": "+e.value},FragmentSpread:function(e){return"..."+e.name+c(" ",s(e.directives," "))},InlineFragment:function(e){var t=e.typeCondition,n=e.directives,r=e.selectionSet;return s(["...",c("on ",t),s(n," "),r]," ")},FragmentDefinition:function(e){var t=e.name,n=e.typeCondition,r=e.variableDefinitions,i=e.directives,o=e.selectionSet;return"fragment ".concat(t).concat(c("(",s(r,", "),")")," ")+"on ".concat(n," ").concat(c("",s(i," ")," "))+o},IntValue:function(e){return e.value},FloatValue:function(e){return e.value},StringValue:function(e,t){var n=e.value;return e.block?(0,i.printBlockString)(n,"description"===t?"":"  "):JSON.stringify(n)},BooleanValue:function(e){return e.value?"true":"false"},NullValue:function(){return"null"},EnumValue:function(e){return e.value},ListValue:function(e){return"["+s(e.values,", ")+"]"},ObjectValue:function(e){return"{"+s(e.fields,", ")+"}"},ObjectField:function(e){return e.name+": "+e.value},Directive:function(e){return"@"+e.name+c("(",s(e.arguments,", "),")")},NamedType:function(e){return e.name},ListType:function(e){return"["+e.type+"]"},NonNullType:function(e){return e.type+"!"},SchemaDefinition:a((function(e){var t=e.directives,n=e.operationTypes;return s(["schema",s(t," "),u(n)]," ")})),OperationTypeDefinition:function(e){return e.operation+": "+e.type},ScalarTypeDefinition:a((function(e){return s(["scalar",e.name,s(e.directives," ")]," ")})),ObjectTypeDefinition:a((function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["type",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")})),FieldDefinition:a((function(e){var t=e.name,n=e.arguments,r=e.type,i=e.directives;return t+(d(n)?c("(\n",l(s(n,"\n")),"\n)"):c("(",s(n,", "),")"))+": "+r+c(" ",s(i," "))})),InputValueDefinition:a((function(e){var t=e.name,n=e.type,r=e.defaultValue,i=e.directives;return s([t+": "+n,c("= ",r),s(i," ")]," ")})),InterfaceTypeDefinition:a((function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["interface",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")})),UnionTypeDefinition:a((function(e){var t=e.name,n=e.directives,r=e.types;return s(["union",t,s(n," "),r&&0!==r.length?"= "+s(r," | "):""]," ")})),EnumTypeDefinition:a((function(e){var t=e.name,n=e.directives,r=e.values;return s(["enum",t,s(n," "),u(r)]," ")})),EnumValueDefinition:a((function(e){return s([e.name,s(e.directives," ")]," ")})),InputObjectTypeDefinition:a((function(e){var t=e.name,n=e.directives,r=e.fields;return s(["input",t,s(n," "),u(r)]," ")})),DirectiveDefinition:a((function(e){var t=e.name,n=e.arguments,r=e.repeatable,i=e.locations;return"directive @"+t+(d(n)?c("(\n",l(s(n,"\n")),"\n)"):c("(",s(n,", "),")"))+(r?" repeatable":"")+" on "+s(i," | ")})),SchemaExtension:function(e){var t=e.directives,n=e.operationTypes;return s(["extend schema",s(t," "),u(n)]," ")},ScalarTypeExtension:function(e){return s(["extend scalar",e.name,s(e.directives," ")]," ")},ObjectTypeExtension:function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["extend type",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")},InterfaceTypeExtension:function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["extend interface",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")},UnionTypeExtension:function(e){var t=e.name,n=e.directives,r=e.types;return s(["extend union",t,s(n," "),r&&0!==r.length?"= "+s(r," | "):""]," ")},EnumTypeExtension:function(e){var t=e.name,n=e.directives,r=e.values;return s(["extend enum",t,s(n," "),u(r)]," ")},InputObjectTypeExtension:function(e){var t=e.name,n=e.directives,r=e.fields;return s(["extend input",t,s(n," "),u(r)]," ")}};function a(e){return function(t){return s([t.description,e(t)],"\n")}}function s(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return null!==(t=null==e?void 0:e.filter((function(e){return e})).join(n))&&void 0!==t?t:""}function u(e){return c("{\n",l(s(e,"\n")),"\n}")}function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return null!=t&&""!==t?e+t+n:""}function l(e){return c("  ",e.replace(/\n/g,"\n  "))}function f(e){return-1!==e.indexOf("\n")}function d(e){return null!=e&&e.some(f)}},285:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.visit=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a,r=void 0,c=Array.isArray(e),l=[e],f=-1,d=[],p=void 0,h=void 0,y=void 0,v=[],m=[],b=e;do{var g=++f===l.length,A=g&&0!==d.length;if(g){if(h=0===m.length?void 0:v[v.length-1],p=y,y=m.pop(),A){if(c)p=p.slice();else{for(var w={},E=0,x=Object.keys(p);E<x.length;E++){var O=x[E];w[O]=p[O]}p=w}for(var _=0,S=0;S<d.length;S++){var j=d[S][0],T=d[S][1];c&&(j-=_),c&&null===T?(p.splice(j,1),_++):p[j]=T}}f=r.index,l=r.keys,d=r.edits,c=r.inArray,r=r.prev}else{if(h=y?c?f:l[f]:void 0,null==(p=y?y[h]:b))continue;y&&v.push(h)}var k,B=void 0;if(!Array.isArray(p)){if(!(0,o.isNode)(p))throw new Error("Invalid AST Node: ".concat((0,i.default)(p),"."));var C=u(t,p.kind,g);if(C){if((B=C.call(t,p,h,y,v,m))===s)break;if(!1===B){if(!g){v.pop();continue}}else if(void 0!==B&&(d.push([h,B]),!g)){if(!(0,o.isNode)(B)){v.pop();continue}p=B}}}void 0===B&&A&&d.push([h,p]),g?v.pop():(r={inArray:c,index:f,keys:l,edits:d,prev:r},l=(c=Array.isArray(p))?p:null!==(k=n[p.kind])&&void 0!==k?k:[],f=-1,d=[],y&&m.push(y),y=p)}while(void 0!==r);return 0!==d.length&&(b=d[d.length-1][1]),b},t.visitInParallel=function(e){var t=new Array(e.length);return{enter:function(n){for(var r=0;r<e.length;r++)if(null==t[r]){var i=u(e[r],n.kind,!1);if(i){var o=i.apply(e[r],arguments);if(!1===o)t[r]=n;else if(o===s)t[r]=s;else if(void 0!==o)return o}}},leave:function(n){for(var r=0;r<e.length;r++)if(null==t[r]){var i=u(e[r],n.kind,!0);if(i){var o=i.apply(e[r],arguments);if(o===s)t[r]=s;else if(void 0!==o&&!1!==o)return o}}else t[r]===n&&(t[r]=null)}}},t.getVisitFn=u,t.BREAK=t.QueryDocumentKeys=void 0;var r,i=(r=n(2))&&r.__esModule?r:{default:r},o=n(807),a={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};t.QueryDocumentKeys=a;var s=Object.freeze({});function u(e,t,n){var r=e[t];if(r){if(!n&&"function"==typeof r)return r;var i=n?r.leave:r.enter;if("function"==typeof i)return i}else{var o=n?e.leave:e.enter;if(o){if("function"==typeof o)return o;var a=o[t];if("function"==typeof a)return a}}}t.BREAK=s},387:(e,t,n)=>{var r='<div id="koalafi-modal"> <div id="koalafi-modal-content"> <div id="koalafi-loader"> <img src="'+n(91)(n(206))+'"/> </div> <div id="koalafi-iframe-wrapper"> <iframe id="koalafi-iframe" frameborder="0" src="${kfiUrl}${queryParams}"></iframe> </div> </div> </div> ';e.exports=r},91:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},397:(e,t,n)=>{var r=n(16);e.exports="string"==typeof r?r:r.toString()},68:(e,t,n)=>{var r=n(387);e.exports="string"==typeof r?r:r.toString()},449:(e,t,n)=>{"use strict";n.r(t),n.d(t,{edgeService:()=>u,openModal:()=>p});var r=n(687),i=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))};let o;const a=r.gql`
  mutation createOrder($orderInput: NewOrder!) {
    createOrder(input: $orderInput) {
      orderId
      orderErrors {
        __typename
        ... on FatalError {
          message
        }
        ... on BadRequest {
          message
        }
      }
    }
  }
`,s=r.gql`
  query order($id: ID!) {
    order(id: $id) {
      metadata {
        formType
      }
    }
  }
`,u={fetchOrder:e=>i(void 0,void 0,void 0,(function*(){return o||(o=new r.GraphQLClient("https://application-edge-service.sandbox.koalafi.com/query")),o.request(s,{id:e})})),createOrder:(e,t)=>i(void 0,void 0,void 0,(function*(){return o||(o=new r.GraphQLClient("https://application-edge-service.sandbox.koalafi.com/query")),o.setHeader("public-dealer-id",e),o.request(a,{orderInput:t})}))};const c=n(68),l=n(397);var f;!function(e){e.checkout="checkout",e.financing="financing",e.product="product"}(f||(f={}));const d=(e,t)=>{document.getElementById(t).classList.remove("show"),setTimeout((function(){e.style.display="none"}),200),document.body.style.overflow="visible";const n=new CustomEvent("closeModal",{detail:{isModalClosed:!0}});window.dispatchEvent(n)},p=e=>{return t=void 0,n=void 0,i=function*(){let t,n,r,i;if("object"==typeof e?({orderId:t,pdi:n,useStage:r,launchPage:i}=e):"string"==typeof e&&(t=e),!t&&!n)throw new Error("openModal(): arguments not passed in correctly.");const o="https://epply.sandbox.koalafi.com",a="koalafi-modal-content",s=((e,t,n)=>{let r,i;if(i=f.checkout,n.launchPage)switch(n.launchPage){case"product":i=f.product;break;case"financing":i=f.financing;break;default:i=f.checkout}if(r="?",!n.orderId)throw new Error("openModal(): invalid args");return r+=`orderId=${n.orderId}`,n.pdi&&(r+=`&pdi=${n.pdi}`),n.launchPage&&(r+=`&launchPage=${i}`),n.useStage&&(r+="&stage"),e.replace("${kfiUrl}","https://epply.sandbox.koalafi.com").replace("${queryParams}",r)})(c,0,{orderId:t,pdi:n,useStage:r,launchPage:i});try{((e,t)=>{if(!document.getElementById(e)){const n=document.createElement("style");n.id=e,n.innerHTML=t,document.getElementsByTagName("head")[0].appendChild(n)}})("koalafi-css",l),((e,t,n)=>{if(!document.getElementById(t)){const e=document.createElement("div");e.id=t,document.body.appendChild(e)}document.body.style.overflow="hidden",document.getElementById(t).insertAdjacentHTML("afterend",e),setTimeout((function(){console.log(n,"modalcontentid"),document.getElementById(n).classList.add("show")}),4)})(s,"koalafi-div",a)}catch(e){console.error("Inserting CSS/HTML: ",e)}const u=document.getElementById("koalafi-modal"),p=document.getElementById("koalafi-modal-close-button");let h,y;return document.onclick=function(e){var n;if(e.target==p){const e=document.getElementById("koalafi-iframe");null===(n=null==e?void 0:e.contentWindow)||void 0===n||n.postMessage("Closed modal with X button",o),d(u,a),y({orderId:t,reason:"closed modal with X button"})}},window.addEventListener("message",(function(e){if(e.origin!==o)return;const t=JSON.parse(e.data);if(t.stopSpinner){const e=document.getElementById("koalafi-loader");e&&e.remove()}t.wcfSuccess?h(t.payload):!1===t.wcfSuccess&&y(t.payload),t.closeModal&&d(u,a)}),!1),new Promise(((e,t)=>{h=e,y=t}))},new((r=void 0)||(r=Promise))((function(e,o){function a(e){try{u(i.next(e))}catch(e){o(e)}}function s(e){try{u(i.throw(e))}catch(e){o(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(a,s)}u((i=i.apply(t,n||[])).next())}));var t,n,r,i}},206:(e,t,n)=>{"use strict";e.exports=n.p+"254cc7c28b470b33b135.svg"}},t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={id:r,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}return n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),n(449)})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vc3JjL2ZlYXR1cmVzL21vZGFsL21vZGFsLmNzcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9leHRyYWN0LWZpbGVzL3B1YmxpYy9SZWFjdE5hdGl2ZUZpbGUuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9leHRyYWN0LWZpbGVzL3B1YmxpYy9leHRyYWN0RmlsZXMuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9leHRyYWN0LWZpbGVzL3B1YmxpYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2V4dHJhY3QtZmlsZXMvcHVibGljL2lzRXh0cmFjdGFibGVGaWxlLmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC1yZXF1ZXN0L2Rpc3QvY3JlYXRlUmVxdWVzdEJvZHkuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsLXJlcXVlc3QvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2dyYXBocWwtcmVxdWVzdC9kaXN0L3R5cGVzLmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC1yZXF1ZXN0L25vZGVfbW9kdWxlcy9jcm9zcy1mZXRjaC9kaXN0L2Jyb3dzZXItcG9ueWZpbGwuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsLXJlcXVlc3Qvbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2dyYXBocWwvanN1dGlscy9kZWZpbmVJbnNwZWN0LmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC9qc3V0aWxzL2luc3BlY3QuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvaW52YXJpYW50LmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC9qc3V0aWxzL25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL2FzdC5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2dyYXBocWwvbGFuZ3VhZ2UvYmxvY2tTdHJpbmcuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL3ByaW50ZXIuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL3Zpc2l0b3IuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL3NyYy9mZWF0dXJlcy9tb2RhbC9tb2RhbC1zaG9ydC1mb3JtLmh0bWwiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9odG1sLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9zcmMvZmVhdHVyZXMvbW9kYWwvbW9kYWwuY3NzP2QzYzEiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL3NyYy9mZWF0dXJlcy9tb2RhbC9tb2RhbC1zaG9ydC1mb3JtLmh0bWw/OTUyMSIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vc3JjL3NlcnZpY2VzL2VkZ2Uuc2VydmljZS50cyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vc3JjL2ZlYXR1cmVzL21vZGFsL21vZGFsLnRzIiwid2VicGFjazovL2tvYWxhZmlTZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2tvYWxhZmlTZGsvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCJdLCJuYW1lcyI6WyJfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsImNvbmNhdCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJkZWR1cGUiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwibGVuZ3RoIiwiX2kiLCJfYXJyYXlMaWtlVG9BcnJheSIsImFyciIsImxlbiIsImFycjIiLCJBcnJheSIsIl9pdGVtIiwiaXNBcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiT2JqZWN0IiwiX2FyciIsIl9uIiwiX2QiLCJfZSIsInVuZGVmaW5lZCIsIl9zIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsImVyciIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm8iLCJtaW5MZW4iLCJuIiwicHJvdG90eXBlIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJUeXBlRXJyb3IiLCJfbm9uSXRlcmFibGVSZXN0IiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlIiwic291cmNlUm9vdCIsIl9yZWYiLCJ1cmkiLCJ0eXBlIiwiZGVmYXVsdElzRXh0cmFjdGFibGVGaWxlIiwiZXh0cmFjdEZpbGVzIiwicGF0aCIsImlzRXh0cmFjdGFibGVGaWxlIiwiY2xvbmUiLCJmaWxlcyIsIk1hcCIsImFkZEZpbGUiLCJwYXRocyIsImZpbGUiLCJzdG9yZWRQYXRocyIsImdldCIsImFwcGx5Iiwic2V0IiwicHJlZml4IiwiRmlsZUxpc3QiLCJjaGlsZCIsInJlc3VsdCIsImZvckVhY2giLCJSZWFjdE5hdGl2ZUZpbGUiLCJGaWxlIiwiQmxvYiIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJkZWZpbmVQcm9wZXJ0eSIsImV4dHJhY3RfZmlsZXNfMSIsImZvcm1fZGF0YV8xIiwiaXNFeHRyYWN0YWJsZUZpbGVFbmhhbmNlZCIsInBpcGUiLCJkZWZhdWx0IiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJfYSIsInNpemUiLCJmb3JtIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwiYXJndW1lbnRzIiwicCIsImhhc093blByb3BlcnR5IiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwibSIsImsiLCJrMiIsImVudW1lcmFibGUiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJ2IiwiX19pbXBvcnRTdGFyIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwiZSIsInJlamVjdGVkIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIm9wIiwicG9wIiwiX19yZXN0IiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ3FsIiwicmVxdWVzdCIsInJhd1JlcXVlc3QiLCJHcmFwaFFMQ2xpZW50IiwiQ2xpZW50RXJyb3IiLCJjcm9zc19mZXRjaF8xIiwiQ3Jvc3NGZXRjaCIsInByaW50ZXJfMSIsImNyZWF0ZVJlcXVlc3RCb2R5XzEiLCJ0eXBlc18xIiwidHlwZXNfMiIsInJlc29sdmVIZWFkZXJzIiwiaGVhZGVycyIsIm9IZWFkZXJzIiwiSGVhZGVycyIsIkhlYWRlcnNJbnN0YW5jZVRvUGxhaW5PYmplY3QiLCJ1cmwiLCJvcHRpb25zIiwicmVxdWVzdEhlYWRlcnMiLCJfYiIsImxvY2FsRmV0Y2giLCJvdGhlcnMiLCJyZXNwb25zZSIsImhlYWRlcnNfMSIsInN0YXR1c18xIiwiZXJyb3JSZXN1bHQiLCJfYyIsImZldGNoIiwibWV0aG9kIiwiZ2V0UmVzdWx0Iiwib2siLCJlcnJvcnMiLCJzdGF0dXMiLCJlcnJvciIsImRvY3VtZW50IiwicmVzb2x2ZWREb2MiLCJwcmludCIsInJlc29sdmVSZXF1ZXN0RG9jdW1lbnQiLCJzZXRIZWFkZXJzIiwic2V0SGVhZGVyIiwia2V5IiwiY29udGVudFR5cGUiLCJzdGFydHNXaXRoIiwianNvbiIsInRleHQiLCJjaHVua3MiLCJyZWR1Y2UiLCJhY2N1bXVsYXRvciIsImNodW5rIiwiaW5kZXgiLCJleHRlbmRTdGF0aWNzIiwiX19leHRlbmRzIiwiZCIsImIiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9fIiwiX3N1cGVyIiwiX3RoaXMiLCJtZXNzYWdlIiwiZXh0cmFjdE1lc3NhZ2UiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiX19zZWxmX18iLCJyb290IiwiRiIsIkRPTUV4Y2VwdGlvbiIsInNlbGYiLCJzdXBwb3J0Iiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3Iiwib2JqIiwibm9ybWFsaXplTmFtZSIsIlN0cmluZyIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwic2hpZnQiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiY29uc3VtZWQiLCJib2R5VXNlZCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsIm9ubG9hZCIsIm9uZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJ1ZmZlckNsb25lIiwiYnVmIiwidmlldyIsIlVpbnQ4QXJyYXkiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsImlzUHJvdG90eXBlT2YiLCJfYm9keUJsb2IiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiYXJyYXlCdWZmZXIiLCJyZWFkQXNUZXh0IiwiY2hhcnMiLCJmcm9tQ2hhckNvZGUiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsInBhcnNlIiwib2xkVmFsdWUiLCJoYXMiLCJjYWxsYmFjayIsImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIiwibWV0aG9kcyIsIlJlcXVlc3QiLCJpbnB1dCIsInVwY2FzZWQiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwidHJpbSIsInNwbGl0IiwiYnl0ZXMiLCJyZXBsYWNlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiUmVzcG9uc2UiLCJib2R5SW5pdCIsInN0YXR1c1RleHQiLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwibG9jYXRpb24iLCJzdGFjayIsImluaXQiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwicmF3SGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJwYXJ0cyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwid2luZG93IiwiY2xhc3NPYmplY3QiLCJmbiIsInRvSlNPTiIsIl9pbnZhcmlhbnQiLCJpbnNwZWN0IiwiX25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZm9ybWF0VmFsdWUiLCJfdHlwZW9mIiwic2VlblZhbHVlcyIsInByZXZpb3VzbHlTZWVuVmFsdWVzIiwiY3VzdG9tSW5zcGVjdEZuIiwib2JqZWN0IiwiZ2V0Q3VzdG9tRm4iLCJjdXN0b21WYWx1ZSIsImFycmF5IiwiTWF0aCIsIm1pbiIsInJlbWFpbmluZyIsImZvcm1hdEFycmF5IiwidGFnIiwiZ2V0T2JqZWN0VGFnIiwiZm9ybWF0T2JqZWN0IiwiZm9ybWF0T2JqZWN0VmFsdWUiLCJjb25kaXRpb24iLCJCb29sZWFuIiwiX2RlZmF1bHQiLCJmb3IiLCJpc05vZGUiLCJtYXliZU5vZGUiLCJraW5kIiwiVG9rZW4iLCJMb2NhdGlvbiIsIl9kZWZpbmVJbnNwZWN0Iiwic3RhcnRUb2tlbiIsImVuZFRva2VuIiwic3RhcnQiLCJlbmQiLCJjb2x1bW4iLCJwcmV2IiwiaXNCbGFuayIsInN0ciIsImdldEJsb2NrU3RyaW5nSW5kZW50YXRpb24iLCJfY29tbW9uSW5kZW50IiwiaXNGaXJzdExpbmUiLCJpc0VtcHR5TGluZSIsImluZGVudCIsImNvbW1vbkluZGVudCIsImNoYXJDb2RlQXQiLCJkZWRlbnRCbG9ja1N0cmluZ1ZhbHVlIiwicmF3U3RyaW5nIiwibGluZXMiLCJzdGFydExpbmUiLCJlbmRMaW5lIiwicHJpbnRCbG9ja1N0cmluZyIsImluZGVudGF0aW9uIiwicHJlZmVyTXVsdGlwbGVMaW5lcyIsImlzU2luZ2xlTGluZSIsImhhc0xlYWRpbmdTcGFjZSIsImhhc1RyYWlsaW5nUXVvdGUiLCJoYXNUcmFpbGluZ1NsYXNoIiwicHJpbnRBc011bHRpcGxlTGluZXMiLCJhc3QiLCJfdmlzaXRvciIsInZpc2l0IiwibGVhdmUiLCJwcmludERvY0FTVFJlZHVjZXIiLCJfYmxvY2tTdHJpbmciLCJOYW1lIiwibm9kZSIsIlZhcmlhYmxlIiwiRG9jdW1lbnQiLCJkZWZpbml0aW9ucyIsIk9wZXJhdGlvbkRlZmluaXRpb24iLCJvcGVyYXRpb24iLCJ2YXJEZWZzIiwid3JhcCIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0IiwiVmFyaWFibGVEZWZpbml0aW9uIiwidmFyaWFibGUiLCJkZWZhdWx0VmFsdWUiLCJTZWxlY3Rpb25TZXQiLCJfcmVmMiIsImJsb2NrIiwic2VsZWN0aW9ucyIsIkZpZWxkIiwiX3JlZjMiLCJhbGlhcyIsImFyZ3MiLCJhcmdzTGluZSIsIkFyZ3VtZW50IiwiX3JlZjQiLCJGcmFnbWVudFNwcmVhZCIsIl9yZWY1IiwiSW5saW5lRnJhZ21lbnQiLCJfcmVmNiIsInR5cGVDb25kaXRpb24iLCJGcmFnbWVudERlZmluaXRpb24iLCJfcmVmNyIsIkludFZhbHVlIiwiX3JlZjgiLCJGbG9hdFZhbHVlIiwiX3JlZjkiLCJTdHJpbmdWYWx1ZSIsIl9yZWYxMCIsIkJvb2xlYW5WYWx1ZSIsIl9yZWYxMSIsIk51bGxWYWx1ZSIsIkVudW1WYWx1ZSIsIl9yZWYxMiIsIkxpc3RWYWx1ZSIsIl9yZWYxMyIsIk9iamVjdFZhbHVlIiwiX3JlZjE0IiwiZmllbGRzIiwiT2JqZWN0RmllbGQiLCJfcmVmMTUiLCJEaXJlY3RpdmUiLCJfcmVmMTYiLCJOYW1lZFR5cGUiLCJfcmVmMTciLCJMaXN0VHlwZSIsIl9yZWYxOCIsIk5vbk51bGxUeXBlIiwiX3JlZjE5IiwiU2NoZW1hRGVmaW5pdGlvbiIsImFkZERlc2NyaXB0aW9uIiwiX3JlZjIwIiwib3BlcmF0aW9uVHlwZXMiLCJPcGVyYXRpb25UeXBlRGVmaW5pdGlvbiIsIl9yZWYyMSIsIlNjYWxhclR5cGVEZWZpbml0aW9uIiwiX3JlZjIyIiwiT2JqZWN0VHlwZURlZmluaXRpb24iLCJfcmVmMjMiLCJpbnRlcmZhY2VzIiwiRmllbGREZWZpbml0aW9uIiwiX3JlZjI0IiwiaGFzTXVsdGlsaW5lSXRlbXMiLCJJbnB1dFZhbHVlRGVmaW5pdGlvbiIsIl9yZWYyNSIsIkludGVyZmFjZVR5cGVEZWZpbml0aW9uIiwiX3JlZjI2IiwiVW5pb25UeXBlRGVmaW5pdGlvbiIsIl9yZWYyNyIsInR5cGVzIiwiRW51bVR5cGVEZWZpbml0aW9uIiwiX3JlZjI4IiwiRW51bVZhbHVlRGVmaW5pdGlvbiIsIl9yZWYyOSIsIklucHV0T2JqZWN0VHlwZURlZmluaXRpb24iLCJfcmVmMzAiLCJEaXJlY3RpdmVEZWZpbml0aW9uIiwiX3JlZjMxIiwicmVwZWF0YWJsZSIsImxvY2F0aW9ucyIsIlNjaGVtYUV4dGVuc2lvbiIsIl9yZWYzMiIsIlNjYWxhclR5cGVFeHRlbnNpb24iLCJfcmVmMzMiLCJPYmplY3RUeXBlRXh0ZW5zaW9uIiwiX3JlZjM0IiwiSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsIl9yZWYzNSIsIlVuaW9uVHlwZUV4dGVuc2lvbiIsIl9yZWYzNiIsIkVudW1UeXBlRXh0ZW5zaW9uIiwiX3JlZjM3IiwiSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIiwiX3JlZjM4IiwiY2IiLCJkZXNjcmlwdGlvbiIsIm1heWJlQXJyYXkiLCJfbWF5YmVBcnJheSRmaWx0ZXIkam8iLCJzZXBhcmF0b3IiLCJmaWx0ZXIiLCJ4IiwibWF5YmVTdHJpbmciLCJpc011bHRpbGluZSIsInNvbWUiLCJ2aXNpdG9yIiwidmlzaXRvcktleXMiLCJRdWVyeURvY3VtZW50S2V5cyIsImluQXJyYXkiLCJlZGl0cyIsInBhcmVudCIsImFuY2VzdG9ycyIsIm5ld1Jvb3QiLCJpc0xlYXZpbmciLCJpc0VkaXRlZCIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJlZGl0T2Zmc2V0IiwiaWkiLCJlZGl0S2V5IiwiZWRpdFZhbHVlIiwic3BsaWNlIiwiX3Zpc2l0b3JLZXlzJG5vZGUka2luIiwiX2FzdCIsIl9pbnNwZWN0IiwidmlzaXRGbiIsImdldFZpc2l0Rm4iLCJCUkVBSyIsInZpc2l0SW5QYXJhbGxlbCIsInZpc2l0b3JzIiwic2tpcHBpbmciLCJlbnRlciIsImZyZWV6ZSIsImtpbmRWaXNpdG9yIiwia2luZFNwZWNpZmljVmlzaXRvciIsInNwZWNpZmljVmlzaXRvciIsInNwZWNpZmljS2luZFZpc2l0b3IiLCJjb2RlIiwiX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyIsImhhc2giLCJtYXliZU5lZWRRdW90ZXMiLCJncmFwaFFMQ2xpZW50IiwiY3JlYXRlT3JkZXJNdXRhdGlvbiIsImZldGNoT3JkZXJRdWVyeSIsImVkZ2VTZXJ2aWNlIiwiZmV0Y2hPcmRlciIsImNyZWF0ZU9yZGVyIiwicHVibGljRGVhbGVySWQiLCJvcmRlcklucHV0IiwibW9kYWxTaG9ydEh0bWwiLCJzaGFyZWRDc3MiLCJsYXVuY2hQYWdlVHlwZXMiLCJoYW5kbGVDbG9zZU1vZGFsU3R5bGluZyIsIm1vZGFsRWxlbWVudCIsIm1vZGFsQ29udGVudElkIiwiZ2V0RWxlbWVudEJ5SWQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzZXRUaW1lb3V0Iiwic3R5bGUiLCJkaXNwbGF5Iiwib3ZlcmZsb3ciLCJldmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiaXNNb2RhbENsb3NlZCIsImRpc3BhdGNoRXZlbnQiLCJvcGVuTW9kYWwiLCJvcmRlcklkIiwidXNlU3RhZ2UiLCJsYXVuY2hQYWdlIiwicGRpIiwiRUNPTU1fVVJMIiwiTU9EQUxfQ09OVEVOVF9JRCIsIm1vZGlmaWVkSHRtbCIsImh0bWwiLCJlY29tbVVybCIsInF1ZXJ5UGFyYW1zIiwibGF1bmNoUGFnZVR5cGUiLCJjaGVja291dCIsInByb2R1Y3QiLCJmaW5hbmNpbmciLCJtb2RpZnlLZmlIVE1MIiwiY3NzU3R5bGVUYWdJZCIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0TW9kYWxDc3MiLCJlbXB0eURpdklkIiwiZW1wdHlEaXYiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJjb25zb2xlIiwibG9nIiwiYWRkIiwiaW5zZXJ0TW9kYWxIdG1sIiwid2NNb2RhbCIsImNsb3NlTW9kYWxCdXR0b24iLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJvbmNsaWNrIiwidGFyZ2V0IiwiaWZyYW1lIiwiY29udGVudFdpbmRvdyIsInBvc3RNZXNzYWdlIiwicmVhc29uIiwib3JpZ2luIiwiZXZlbnREYXRhIiwic3RvcFNwaW5uZXIiLCJzcGlubmVyRGl2Iiwid2NmU3VjY2VzcyIsInBheWxvYWQiLCJjbG9zZU1vZGFsIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImRlZmluaXRpb24iLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJwcm9wIiwiciIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwiaW1wb3J0U2NyaXB0cyIs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QkgsR0FBVyxDQUNmLElBQUlJLEVBQVUxYixFQUFTaVoscUJBQXFCLFVBQ3pDeUMsRUFBUXJtQixTQUFRaW1CLEVBQVlJLEVBQVFBLEVBQVFybUIsT0FBUyxHQUFHb21CLEtBSzdELElBQUtILEVBQVcsTUFBTSxJQUFJM1osTUFBTSx5REFDaEMyWixFQUFZQSxFQUFVaFYsUUFBUSxPQUFRLElBQUlBLFFBQVEsUUFBUyxJQUFJQSxRQUFRLFlBQWEsS0FDcEZ1VSxFQUFvQnhmLEVBQUlpZ0IsRyxHTFpqQlQsRUFBb0IsTSIsImZpbGUiOiJrb2FsYWZpU2RrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIik7XG52YXIgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIik7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIja29hbGFmaS1tb2RhbCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiAyMDAwO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4ja29hbGFmaS1pZnJhbWUsXFxuI2tvYWxhZmktaWZyYW1lLXdyYXBwZXIsXFxuI2tvYWxhZmktbW9kYWwtY29udGVudCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICB6LWluZGV4OiAyMDAwO1xcbn1cXG5cXG4ja29hbGFmaS1sb2FkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgI2tvYWxhZmktbG9hZGVyIHtcXG4gICAgd2lkdGg6IDU0MHB4O1xcbiAgICBoZWlnaHQ6IDYwMHB4O1xcbiAgfVxcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvZmVhdHVyZXMvbW9kYWwvbW9kYWwuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsZUFBZTtFQUNmLGFBQWE7RUFDYixPQUFPO0VBQ1AsTUFBTTtFQUNOLFdBQVc7RUFDWCxZQUFZO0VBQ1osY0FBYztFQUNkLG9DQUFvQztFQUNwQyxhQUFhO0FBQ2Y7O0FBRUE7OztFQUdFLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixZQUFZO0VBQ1osT0FBTztFQUNQLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsTUFBTTtFQUNOLFdBQVc7RUFDWCxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSx1QkFBdUI7RUFDdkIscUJBQXFCO0VBQ3JCLGFBQWE7RUFDYixjQUFjO0VBQ2QsV0FBVztFQUNYLFlBQVk7RUFDWixtQkFBbUI7RUFDbkIsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0U7SUFDRSxZQUFZO0lBQ1osYUFBYTtFQUNmO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI2tvYWxhZmktbW9kYWwge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgei1pbmRleDogMjAwMDtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuI2tvYWxhZmktaWZyYW1lLFxcbiNrb2FsYWZpLWlmcmFtZS13cmFwcGVyLFxcbiNrb2FsYWZpLW1vZGFsLWNvbnRlbnQge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZWZ0OiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgei1pbmRleDogMjAwMDtcXG59XFxuXFxuI2tvYWxhZmktbG9hZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gICNrb2FsYWZpLWxvYWRlciB7XFxuICAgIHdpZHRoOiA1NDBweDtcXG4gICAgaGVpZ2h0OiA2MDBweDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuIFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIiBhbmQgXCIpLmNvbmNhdChpdGVtWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlYWN0TmF0aXZlRmlsZShfcmVmKSB7XG4gIHZhciB1cmkgPSBfcmVmLnVyaSxcbiAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgIHR5cGUgPSBfcmVmLnR5cGU7XG4gIHRoaXMudXJpID0gdXJpO1xuICB0aGlzLm5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmF1bHRJc0V4dHJhY3RhYmxlRmlsZSA9IHJlcXVpcmUoJy4vaXNFeHRyYWN0YWJsZUZpbGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRyYWN0RmlsZXModmFsdWUsIHBhdGgsIGlzRXh0cmFjdGFibGVGaWxlKSB7XG4gIGlmIChwYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXRoID0gJyc7XG4gIH1cblxuICBpZiAoaXNFeHRyYWN0YWJsZUZpbGUgPT09IHZvaWQgMCkge1xuICAgIGlzRXh0cmFjdGFibGVGaWxlID0gZGVmYXVsdElzRXh0cmFjdGFibGVGaWxlO1xuICB9XG5cbiAgdmFyIGNsb25lO1xuICB2YXIgZmlsZXMgPSBuZXcgTWFwKCk7XG5cbiAgZnVuY3Rpb24gYWRkRmlsZShwYXRocywgZmlsZSkge1xuICAgIHZhciBzdG9yZWRQYXRocyA9IGZpbGVzLmdldChmaWxlKTtcbiAgICBpZiAoc3RvcmVkUGF0aHMpIHN0b3JlZFBhdGhzLnB1c2guYXBwbHkoc3RvcmVkUGF0aHMsIHBhdGhzKTtcbiAgICBlbHNlIGZpbGVzLnNldChmaWxlLCBwYXRocyk7XG4gIH1cblxuICBpZiAoaXNFeHRyYWN0YWJsZUZpbGUodmFsdWUpKSB7XG4gICAgY2xvbmUgPSBudWxsO1xuICAgIGFkZEZpbGUoW3BhdGhdLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHByZWZpeCA9IHBhdGggPyBwYXRoICsgJy4nIDogJyc7XG4gICAgaWYgKHR5cGVvZiBGaWxlTGlzdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBGaWxlTGlzdClcbiAgICAgIGNsb25lID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHZhbHVlLCBmdW5jdGlvbiAoZmlsZSwgaSkge1xuICAgICAgICBhZGRGaWxlKFsnJyArIHByZWZpeCArIGldLCBmaWxlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgIGNsb25lID0gdmFsdWUubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZXh0cmFjdEZpbGVzKGNoaWxkLCAnJyArIHByZWZpeCArIGksIGlzRXh0cmFjdGFibGVGaWxlKTtcbiAgICAgICAgcmVzdWx0LmZpbGVzLmZvckVhY2goYWRkRmlsZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY2xvbmU7XG4gICAgICB9KTtcbiAgICBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICBjbG9uZSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpIGluIHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBleHRyYWN0RmlsZXModmFsdWVbaV0sICcnICsgcHJlZml4ICsgaSwgaXNFeHRyYWN0YWJsZUZpbGUpO1xuICAgICAgICByZXN1bHQuZmlsZXMuZm9yRWFjaChhZGRGaWxlKTtcbiAgICAgICAgY2xvbmVbaV0gPSByZXN1bHQuY2xvbmU7XG4gICAgICB9XG4gICAgfSBlbHNlIGNsb25lID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNsb25lOiBjbG9uZSxcbiAgICBmaWxlczogZmlsZXMsXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLlJlYWN0TmF0aXZlRmlsZSA9IHJlcXVpcmUoJy4vUmVhY3ROYXRpdmVGaWxlJyk7XG5leHBvcnRzLmV4dHJhY3RGaWxlcyA9IHJlcXVpcmUoJy4vZXh0cmFjdEZpbGVzJyk7XG5leHBvcnRzLmlzRXh0cmFjdGFibGVGaWxlID0gcmVxdWlyZSgnLi9pc0V4dHJhY3RhYmxlRmlsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3ROYXRpdmVGaWxlID0gcmVxdWlyZSgnLi9SZWFjdE5hdGl2ZUZpbGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0V4dHJhY3RhYmxlRmlsZSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgICh0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB8fFxuICAgICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKSB8fFxuICAgIHZhbHVlIGluc3RhbmNlb2YgUmVhY3ROYXRpdmVGaWxlXG4gICk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZXh0cmFjdF9maWxlc18xID0gcmVxdWlyZShcImV4dHJhY3QtZmlsZXNcIik7XG52YXIgZm9ybV9kYXRhXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImZvcm0tZGF0YVwiKSk7XG4vKipcbiAqIER1Y2sgdHlwZSBpZiBOb2RlSlMgc3RyZWFtXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXN0cmVhbS9ibG9iLzM3NTA1MDViMDcyN2Y2ZGY1NDMyNDc4NGZlMzY5MzY1ZWY3ODg0MWUvaW5kZXguanMjTDNcbiAqL1xudmFyIGlzRXh0cmFjdGFibGVGaWxlRW5oYW5jZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gZXh0cmFjdF9maWxlc18xLmlzRXh0cmFjdGFibGVGaWxlKHZhbHVlKSB8fFxuICAgICAgICAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUucGlwZSA9PT0gJ2Z1bmN0aW9uJyk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIE11bHRpcGFydCBGb3JtIGlmIGJvZHkgY29udGFpbnMgZmlsZXNcbiAqIChodHRwczovL2dpdGh1Yi5jb20vamF5ZGVuc2VyaWMvZ3JhcGhxbC1tdWx0aXBhcnQtcmVxdWVzdC1zcGVjKVxuICogT3RoZXJ3aXNlIHJldHVybnMgSlNPTlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0Qm9keShxdWVyeSwgdmFyaWFibGVzKSB7XG4gICAgdmFyIF9hID0gZXh0cmFjdF9maWxlc18xLmV4dHJhY3RGaWxlcyh7IHF1ZXJ5OiBxdWVyeSwgdmFyaWFibGVzOiB2YXJpYWJsZXMgfSwgJycsIGlzRXh0cmFjdGFibGVGaWxlRW5oYW5jZWQpLCBjbG9uZSA9IF9hLmNsb25lLCBmaWxlcyA9IF9hLmZpbGVzO1xuICAgIGlmIChmaWxlcy5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjbG9uZSk7XG4gICAgfVxuICAgIHZhciBGb3JtID0gdHlwZW9mIEZvcm1EYXRhID09PSAndW5kZWZpbmVkJyA/IGZvcm1fZGF0YV8xLmRlZmF1bHQgOiBGb3JtRGF0YTtcbiAgICB2YXIgZm9ybSA9IG5ldyBGb3JtKCk7XG4gICAgZm9ybS5hcHBlbmQoJ29wZXJhdGlvbnMnLCBKU09OLnN0cmluZ2lmeShjbG9uZSkpO1xuICAgIHZhciBtYXAgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAocGF0aHMpIHtcbiAgICAgICAgbWFwWysraV0gPSBwYXRocztcbiAgICB9KTtcbiAgICBmb3JtLmFwcGVuZCgnbWFwJywgSlNPTi5zdHJpbmdpZnkobWFwKSk7XG4gICAgaSA9IDA7XG4gICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAocGF0aHMsIGZpbGUpIHtcbiAgICAgICAgZm9ybS5hcHBlbmQoXCJcIiArICsraSwgZmlsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm07XG59XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVSZXF1ZXN0Qm9keTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZVJlcXVlc3RCb2R5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ3FsID0gZXhwb3J0cy5yZXF1ZXN0ID0gZXhwb3J0cy5yYXdSZXF1ZXN0ID0gZXhwb3J0cy5HcmFwaFFMQ2xpZW50ID0gZXhwb3J0cy5DbGllbnRFcnJvciA9IHZvaWQgMDtcbnZhciBjcm9zc19mZXRjaF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjcm9zcy1mZXRjaFwiKSksIENyb3NzRmV0Y2ggPSBjcm9zc19mZXRjaF8xO1xudmFyIHByaW50ZXJfMSA9IHJlcXVpcmUoXCJncmFwaHFsL2xhbmd1YWdlL3ByaW50ZXJcIik7XG52YXIgY3JlYXRlUmVxdWVzdEJvZHlfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVSZXF1ZXN0Qm9keVwiKSk7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xudmFyIHR5cGVzXzIgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLkNsaWVudEVycm9yOyB9IH0pO1xuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBoZWFkZXJzIGNvbmZpZ3VyYXRpb24gaW50byBhIHBsYWluIG9iamVjdC5cbiAqL1xudmFyIHJlc29sdmVIZWFkZXJzID0gZnVuY3Rpb24gKGhlYWRlcnMpIHtcbiAgICB2YXIgb0hlYWRlcnMgPSB7fTtcbiAgICBpZiAoaGVhZGVycykge1xuICAgICAgICBpZiAoKHR5cGVvZiBIZWFkZXJzICE9PSAndW5kZWZpbmVkJyAmJiBoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykgfHxcbiAgICAgICAgICAgIGhlYWRlcnMgaW5zdGFuY2VvZiBDcm9zc0ZldGNoLkhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9IZWFkZXJzID0gSGVhZGVyc0luc3RhbmNlVG9QbGFpbk9iamVjdChoZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBfYVswXSwgdmFsdWUgPSBfYVsxXTtcbiAgICAgICAgICAgICAgICBvSGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvSGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9IZWFkZXJzO1xufTtcbi8qKlxuICogdG9kb1xuICovXG52YXIgR3JhcGhRTENsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHcmFwaFFMQ2xpZW50KHVybCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB9XG4gICAgR3JhcGhRTENsaWVudC5wcm90b3R5cGUucmF3UmVxdWVzdCA9IGZ1bmN0aW9uIChxdWVyeSwgdmFyaWFibGVzLCByZXF1ZXN0SGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIGhlYWRlcnMsIF9iLCBsb2NhbEZldGNoLCBvdGhlcnMsIGJvZHksIHJlc3BvbnNlLCByZXN1bHQsIGhlYWRlcnNfMSwgc3RhdHVzXzEsIGVycm9yUmVzdWx0O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSB0aGlzLm9wdGlvbnMsIGhlYWRlcnMgPSBfYS5oZWFkZXJzLCBfYiA9IF9hLmZldGNoLCBsb2NhbEZldGNoID0gX2IgPT09IHZvaWQgMCA/IGNyb3NzX2ZldGNoXzEuZGVmYXVsdCA6IF9iLCBvdGhlcnMgPSBfX3Jlc3QoX2EsIFtcImhlYWRlcnNcIiwgXCJmZXRjaFwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gY3JlYXRlUmVxdWVzdEJvZHlfMS5kZWZhdWx0KHF1ZXJ5LCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgbG9jYWxGZXRjaCh0aGlzLnVybCwgX19hc3NpZ24oeyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSA6IHt9KSksIHJlc29sdmVIZWFkZXJzKGhlYWRlcnMpKSwgcmVzb2x2ZUhlYWRlcnMocmVxdWVzdEhlYWRlcnMpKSwgYm9keTogYm9keSB9LCBvdGhlcnMpKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZ2V0UmVzdWx0KHJlc3BvbnNlKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5vayAmJiAhcmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNfMSA9IHJlc3BvbnNlLmhlYWRlcnMsIHN0YXR1c18xID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdWx0KSwgeyBoZWFkZXJzOiBoZWFkZXJzXzEsIHN0YXR1czogc3RhdHVzXzEgfSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXN1bHQgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHsgZXJyb3I6IHJlc3VsdCB9IDogcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkNsaWVudEVycm9yKF9fYXNzaWduKF9fYXNzaWduKHt9LCBlcnJvclJlc3VsdCksIHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMgfSksIHsgcXVlcnk6IHF1ZXJ5LCB2YXJpYWJsZXM6IHZhcmlhYmxlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZW5kIGEgR3JhcGhRTCBkb2N1bWVudCB0byB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIEdyYXBoUUxDbGllbnQucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIHZhcmlhYmxlcywgcmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBoZWFkZXJzLCBfYiwgbG9jYWxGZXRjaCwgb3RoZXJzLCByZXNvbHZlZERvYywgYm9keSwgcmVzcG9uc2UsIHJlc3VsdCwgZXJyb3JSZXN1bHQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXMub3B0aW9ucywgaGVhZGVycyA9IF9hLmhlYWRlcnMsIF9iID0gX2EuZmV0Y2gsIGxvY2FsRmV0Y2ggPSBfYiA9PT0gdm9pZCAwID8gY3Jvc3NfZmV0Y2hfMS5kZWZhdWx0IDogX2IsIG90aGVycyA9IF9fcmVzdChfYSwgW1wiaGVhZGVyc1wiLCBcImZldGNoXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkRG9jID0gcmVzb2x2ZVJlcXVlc3REb2N1bWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gY3JlYXRlUmVxdWVzdEJvZHlfMS5kZWZhdWx0KHJlc29sdmVkRG9jLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgbG9jYWxGZXRjaCh0aGlzLnVybCwgX19hc3NpZ24oeyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSA6IHt9KSksIHJlc29sdmVIZWFkZXJzKGhlYWRlcnMpKSwgcmVzb2x2ZUhlYWRlcnMocmVxdWVzdEhlYWRlcnMpKSwgYm9keTogYm9keSB9LCBvdGhlcnMpKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZ2V0UmVzdWx0KHJlc3BvbnNlKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5vayAmJiAhcmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHQuZGF0YV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlc3VsdCA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8geyBlcnJvcjogcmVzdWx0IH0gOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuQ2xpZW50RXJyb3IoX19hc3NpZ24oX19hc3NpZ24oe30sIGVycm9yUmVzdWx0KSwgeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9KSwgeyBxdWVyeTogcmVzb2x2ZWREb2MsIHZhcmlhYmxlczogdmFyaWFibGVzIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEdyYXBoUUxDbGllbnQucHJvdG90eXBlLnNldEhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICAgICAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGVhZGVyIHRvIHRoZSBjbGllbnQuIEFsbCBzdWJzZXF1ZW50IHJlcXVlc3RzIHdpbGwgaGF2ZSB0aGlzIGhlYWRlci5cbiAgICAgKi9cbiAgICBHcmFwaFFMQ2xpZW50LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBoZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG4gICAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgICAgICAvLyB0b2RvIHdoYXQgaWYgaGVhZGVycyBpcyBpbiBuZXN0ZWQgYXJyYXkgZm9ybS4uLiA/XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSAoX2EgPSB7fSwgX2Fba2V5XSA9IHZhbHVlLCBfYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gR3JhcGhRTENsaWVudDtcbn0oKSk7XG5leHBvcnRzLkdyYXBoUUxDbGllbnQgPSBHcmFwaFFMQ2xpZW50O1xuLyoqXG4gKiB0b2RvXG4gKi9cbmZ1bmN0aW9uIHJhd1JlcXVlc3QodXJsLCBxdWVyeSwgdmFyaWFibGVzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xpZW50O1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBjbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudCh1cmwpO1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGNsaWVudC5yYXdSZXF1ZXN0KHF1ZXJ5LCB2YXJpYWJsZXMpXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJhd1JlcXVlc3QgPSByYXdSZXF1ZXN0O1xuLyoqXG4gKiBTZW5kIGEgR3JhcGhRTCBEb2N1bWVudCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXIgZm9yIGV4ZWN0dWlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzXG4gKiAvLyBZb3UgY2FuIHBhc3MgYSByYXcgc3RyaW5nXG4gKlxuICogYXdhaXQgcmVxdWVzdCgnaHR0cHM6Ly9mb28uYmFyL2dyYXBocWwnLCBgXG4gKiAgIHtcbiAqICAgICBxdWVyeSB7XG4gKiAgICAgICB1c2Vyc1xuICogICAgIH1cbiAqICAgfVxuICogYClcbiAqXG4gKiAvLyBZb3UgY2FuIGFsc28gcGFzcyBhIEdyYXBoUUwgRG9jdW1lbnROb2RlLiBDb252ZW5pZW50IGlmIHlvdVxuICogLy8gYXJlIHVzaW5nIGdyYXBocWwtdGFnIHBhY2thZ2UuXG4gKlxuICogaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZydcbiAqXG4gKiBhd2FpdCByZXF1ZXN0KCdodHRwczovL2Zvby5iYXIvZ3JhcGhxbCcsIGdxbGAuLi5gKVxuICpcbiAqIC8vIElmIHlvdSBkb24ndCBhY3R1YWxseSBjYXJlIGFib3V0IHVzaW5nIERvY3VtZW50Tm9kZSBidXQganVzdFxuICogLy8gd2FudCB0aGUgdG9vbGluZyBzdXBwb3J0IGZvciBncWwgdGVtcGxhdGUgdGFnIGxpa2UgSURFIHN5bnRheFxuICogLy8gY29sb3JpbmcgYW5kIHByZXR0aWVyIGF1dG9mb3JtYXQgdGhlbiBub3RlIHlvdSBjYW4gdXNlIHRoZVxuICogLy8gcGFzc3Rocm91Z2ggZ3FsIHRhZyBzaGlwcGVkIHdpdGggZ3JhcGhxbC1yZXF1ZXN0IHRvIHNhdmUgYSBiaXRcbiAqIC8vIG9mIHBlcmZvcm1hbmNlIGFuZCBub3QgaGF2ZSB0byBpbnN0YWxsIGFub3RoZXIgZGVwIGludG8geW91ciBwcm9qZWN0LlxuICpcbiAqIGltcG9ydCB7IGdxbCB9IGZyb20gJ2dyYXBocWwtcmVxdWVzdCdcbiAqXG4gKiBhd2FpdCByZXF1ZXN0KCdodHRwczovL2Zvby5iYXIvZ3JhcGhxbCcsIGdxbGAuLi5gKVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3QodXJsLCBkb2N1bWVudCwgdmFyaWFibGVzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xpZW50O1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBjbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudCh1cmwpO1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGNsaWVudC5yZXF1ZXN0KGRvY3VtZW50LCB2YXJpYWJsZXMpXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlcXVlc3QgPSByZXF1ZXN0O1xuZXhwb3J0cy5kZWZhdWx0ID0gcmVxdWVzdDtcbi8qKlxuICogdG9kb1xuICovXG5mdW5jdGlvbiBnZXRSZXN1bHQocmVzcG9uc2UpIHtcbiAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICB9XG59XG4vKipcbiAqIGhlbHBlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlcXVlc3REb2N1bWVudChkb2N1bWVudCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgcmV0dXJuIHByaW50ZXJfMS5wcmludChkb2N1bWVudCk7XG59XG4vKipcbiAqIENvbnZlbmllbmNlIHBhc3N0aHJvdWdoIHRlbXBsYXRlIHRhZyB0byBnZXQgdGhlIGJlbmVmaXRzIG9mIHRvb2xpbmcgZm9yIHRoZSBncWwgdGVtcGxhdGUgdGFnLiBUaGlzIGRvZXMgbm90IGFjdHVhbGx5IHBhcnNlIHRoZSBpbnB1dCBpbnRvIGEgR3JhcGhRTCBEb2N1bWVudE5vZGUgbGlrZSBncmFwaHFsLXRhZyBwYWNrYWdlIGRvZXMuIEl0IGp1c3QgcmV0dXJucyB0aGUgc3RyaW5nIHdpdGggYW55IHZhcmlhYmxlcyBnaXZlbiBpbnRlcnBvbGF0ZWQuIENhbiBzYXZlIHlvdSBhIGJpdCBvZiBwZXJmb3JtYW5jZSBhbmQgaGF2aW5nIHRvIGluc3RhbGwgYW5vdGhlciBwYWNrYWdlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHsgZ3FsIH0gZnJvbSAnZ3JhcGhxbC1yZXF1ZXN0J1xuICpcbiAqIGF3YWl0IHJlcXVlc3QoJ2h0dHBzOi8vZm9vLmJhci9ncmFwaHFsJywgZ3FsYC4uLmApXG4gKlxuICogQHJlbWFya3NcbiAqXG4gKiBTZXZlcmFsIHRvb2xzIGluIHRoZSBOb2RlIEdyYXBoUUwgZWNvc3lzdGVtIGFyZSBoYXJkY29kZWQgdG8gc3BlY2lhbGx5IHRyZWF0IGFueSB0ZW1wbGF0ZSB0YWcgbmFtZWQgXCJncWxcIi4gRm9yIGV4YW1wbGUgc2VlIHRoaXMgcHJldHRpZXIgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV0dGllci9wcmV0dGllci9pc3N1ZXMvNDM2MC4gVXNpbmcgdGhpcyB0ZW1wbGF0ZSB0YWcgaGFzIG5vIHJ1bnRpbWUgZWZmZWN0IGJleW9uZCB2YXJpYWJsZSBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBncWwoY2h1bmtzKSB7XG4gICAgdmFyIHZhcmlhYmxlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhcmlhYmxlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjaHVuaywgaW5kZXgpIHsgcmV0dXJuIFwiXCIgKyBhY2N1bXVsYXRvciArIGNodW5rICsgKGluZGV4IGluIHZhcmlhYmxlcyA/IHZhcmlhYmxlc1tpbmRleF0gOiAnJyk7IH0sICcnKTtcbn1cbmV4cG9ydHMuZ3FsID0gZ3FsO1xuLyoqXG4gKiBDb252ZXJ0IEhlYWRlcnMgaW5zdGFuY2UgaW50byByZWd1bGFyIG9iamVjdFxuICovXG5mdW5jdGlvbiBIZWFkZXJzSW5zdGFuY2VUb1BsYWluT2JqZWN0KGhlYWRlcnMpIHtcbiAgICB2YXIgbyA9IHt9O1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAodiwgaykge1xuICAgICAgICBvW2tdID0gdjtcbiAgICB9KTtcbiAgICByZXR1cm4gbztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2xpZW50RXJyb3IgPSB2b2lkIDA7XG52YXIgQ2xpZW50RXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENsaWVudEVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENsaWVudEVycm9yKHJlc3BvbnNlLCByZXF1ZXN0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBtZXNzYWdlID0gQ2xpZW50RXJyb3IuZXh0cmFjdE1lc3NhZ2UocmVzcG9uc2UpICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBDbGllbnRFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICBfdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICBfdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgYXMgU2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydCAuY2FwdHVyZVN0YWNrVHJhY2VcbiAgICAgICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIENsaWVudEVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENsaWVudEVycm9yLmV4dHJhY3RNZXNzYWdlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JzWzBdLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkdyYXBoUUwgRXJyb3IgKENvZGU6IFwiICsgcmVzcG9uc2Uuc3RhdHVzICsgXCIpXCI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDbGllbnRFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuQ2xpZW50RXJyb3IgPSBDbGllbnRFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsInZhciBfX3NlbGZfXyA9IChmdW5jdGlvbiAocm9vdCkge1xuZnVuY3Rpb24gRigpIHtcbnRoaXMuZmV0Y2ggPSBmYWxzZTtcbnRoaXMuRE9NRXhjZXB0aW9uID0gcm9vdC5ET01FeGNlcHRpb25cbn1cbkYucHJvdG90eXBlID0gcm9vdDtcbnJldHVybiBuZXcgRigpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuKGZ1bmN0aW9uKHNlbGYpIHtcblxudmFyIGlycmVsZXZhbnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcblxuICB2YXIgc3VwcG9ydCA9IHtcbiAgICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIHNlbGYsXG4gICAgaXRlcmFibGU6ICdTeW1ib2wnIGluIHNlbGYgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gICAgYmxvYjpcbiAgICAgICdGaWxlUmVhZGVyJyBpbiBzZWxmICYmXG4gICAgICAnQmxvYicgaW4gc2VsZiAmJlxuICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5ldyBCbG9iKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIHNlbGYsXG4gICAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gc2VsZlxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG4gIH1cblxuICBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICAgIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICAgIF07XG5cbiAgICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICB9XG4gICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH5dL2kudGVzdChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUnKVxuICAgIH1cbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge307XG5cbiAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdO1xuICAgIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV07XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgaXRlbXMucHVzaChuYW1lKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpdGVtcy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH07XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICAgIH1cbiAgICBib2R5LmJvZHlVc2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcik7XG4gICAgICB9O1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKTtcbiAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbiAgICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBjaGFycy5qb2luKCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gICAgaWYgKGJ1Zi5zbGljZSkge1xuICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpO1xuICAgICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gQm9keSgpIHtcbiAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keTtcbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKTtcbiAgICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcyk7XG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcyk7XG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ107XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5O1xuXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgICB9XG4gICAgICB0aGlzLnVybCA9IGlucHV0LnVybDtcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFscztcbiAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2Q7XG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlO1xuICAgICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWw7XG4gICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdDtcbiAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nO1xuICAgIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpO1xuICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbDtcbiAgICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsO1xuICAgIHRoaXMucmVmZXJyZXIgPSBudWxsO1xuXG4gICAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICAgIH1cbiAgICB0aGlzLl9pbml0Qm9keShib2R5KTtcbiAgfVxuXG4gIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG4gIH07XG5cbiAgZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGJvZHlcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdCgnJicpXG4gICAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpO1xuICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgcmV0dXJuIGZvcm1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICAgIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICAgIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpO1xuICAgIHByZVByb2Nlc3NlZEhlYWRlcnMuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKTtcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSk7XG5cbiAgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSAnZGVmYXVsdCc7XG4gICAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXM7XG4gICAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMDtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnc3RhdHVzVGV4dCcgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc3RhdHVzVGV4dCA6ICdPSyc7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnO1xuICAgIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KTtcbiAgfVxuXG4gIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpO1xuXG4gIFJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgdXJsOiB0aGlzLnVybFxuICAgIH0pXG4gIH07XG5cbiAgUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KTtcbiAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJztcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfTtcblxuICB2YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF07XG5cbiAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgfTtcblxuICBleHBvcnRzLkRPTUV4Y2VwdGlvbiA9IHNlbGYuRE9NRXhjZXB0aW9uO1xuICB0cnkge1xuICAgIG5ldyBleHBvcnRzLkRPTUV4Y2VwdGlvbigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBleHBvcnRzLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSk7XG4gICAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgfTtcbiAgICBleHBvcnRzLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZXhwb3J0cy5ET01FeGNlcHRpb247XG4gIH1cblxuICBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBleHBvcnRzLkRPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG5cbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgfVxuXG4gICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgICB9O1xuICAgICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpO1xuICAgICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBleHBvcnRzLkRPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QudXJsLCB0cnVlKTtcblxuICAgICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKTtcblxuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KTtcbiAgICB9KVxuICB9XG5cbiAgZmV0Y2gucG9seWZpbGwgPSB0cnVlO1xuXG4gIGlmICghc2VsZi5mZXRjaCkge1xuICAgIHNlbGYuZmV0Y2ggPSBmZXRjaDtcbiAgICBzZWxmLkhlYWRlcnMgPSBIZWFkZXJzO1xuICAgIHNlbGYuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gICAgc2VsZi5SZXNwb25zZSA9IFJlc3BvbnNlO1xuICB9XG5cbiAgZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycztcbiAgZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcbiAgZXhwb3J0cy5SZXNwb25zZSA9IFJlc3BvbnNlO1xuICBleHBvcnRzLmZldGNoID0gZmV0Y2g7XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oe30pKTtcbn0pKF9fc2VsZl9fKTtcbmRlbGV0ZSBfX3NlbGZfXy5mZXRjaC5wb2x5ZmlsbFxuZXhwb3J0cyA9IF9fc2VsZl9fLmZldGNoIC8vIFRvIGVuYWJsZTogaW1wb3J0IGZldGNoIGZyb20gJ2Nyb3NzLWZldGNoJ1xuZXhwb3J0cy5kZWZhdWx0ID0gX19zZWxmX18uZmV0Y2ggLy8gRm9yIFR5cGVTY3JpcHQgY29uc3VtZXJzIHdpdGhvdXQgZXNNb2R1bGVJbnRlcm9wLlxuZXhwb3J0cy5mZXRjaCA9IF9fc2VsZl9fLmZldGNoIC8vIFRvIGVuYWJsZTogaW1wb3J0IHtmZXRjaH0gZnJvbSAnY3Jvc3MtZmV0Y2gnXG5leHBvcnRzLkhlYWRlcnMgPSBfX3NlbGZfXy5IZWFkZXJzXG5leHBvcnRzLlJlcXVlc3QgPSBfX3NlbGZfXy5SZXF1ZXN0XG5leHBvcnRzLlJlc3BvbnNlID0gX19zZWxmX18uUmVzcG9uc2Vcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1xuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnID8gc2VsZi5Gb3JtRGF0YSA6IHdpbmRvdy5Gb3JtRGF0YTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmaW5lSW5zcGVjdDtcblxudmFyIF9pbnZhcmlhbnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2ludmFyaWFudC5qc1wiKSk7XG5cbnZhciBfbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogVGhlIGBkZWZpbmVJbnNwZWN0KClgIGZ1bmN0aW9uIGRlZmluZXMgYGluc3BlY3QoKWAgcHJvdG90eXBlIG1ldGhvZCBhcyBhbGlhcyBvZiBgdG9KU09OYFxuICovXG5mdW5jdGlvbiBkZWZpbmVJbnNwZWN0KGNsYXNzT2JqZWN0KSB7XG4gIHZhciBmbiA9IGNsYXNzT2JqZWN0LnByb3RvdHlwZS50b0pTT047XG4gIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyB8fCAoMCwgX2ludmFyaWFudC5kZWZhdWx0KSgwKTtcbiAgY2xhc3NPYmplY3QucHJvdG90eXBlLmluc3BlY3QgPSBmbjsgLy8gaXN0YW5idWwgaWdub3JlIGVsc2UgKFNlZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsL2dyYXBocWwtanMvaXNzdWVzLzIzMTcnKVxuXG4gIGlmIChfbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbC5kZWZhdWx0KSB7XG4gICAgY2xhc3NPYmplY3QucHJvdG90eXBlW19ub2RlanNDdXN0b21JbnNwZWN0U3ltYm9sLmRlZmF1bHRdID0gZm47XG4gIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gaW5zcGVjdDtcblxudmFyIF9ub2RlanNDdXN0b21JbnNwZWN0U3ltYm9sID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub2RlanNDdXN0b21JbnNwZWN0U3ltYm9sLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDEwO1xudmFyIE1BWF9SRUNVUlNJVkVfREVQVEggPSAyO1xuLyoqXG4gKiBVc2VkIHRvIHByaW50IHZhbHVlcyBpbiBlcnJvciBtZXNzYWdlcy5cbiAqL1xuXG5mdW5jdGlvbiBpbnNwZWN0KHZhbHVlKSB7XG4gIHJldHVybiBmb3JtYXRWYWx1ZSh2YWx1ZSwgW10pO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSwgc2VlblZhbHVlcykge1xuICBzd2l0Y2ggKF90eXBlb2YodmFsdWUpKSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4gdmFsdWUubmFtZSA/IFwiW2Z1bmN0aW9uIFwiLmNvbmNhdCh2YWx1ZS5uYW1lLCBcIl1cIikgOiAnW2Z1bmN0aW9uXSc7XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtYXRPYmplY3RWYWx1ZSh2YWx1ZSwgc2VlblZhbHVlcyk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0T2JqZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzbHlTZWVuVmFsdWVzKSB7XG4gIGlmIChwcmV2aW91c2x5U2VlblZhbHVlcy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICB9XG5cbiAgdmFyIHNlZW5WYWx1ZXMgPSBbXS5jb25jYXQocHJldmlvdXNseVNlZW5WYWx1ZXMsIFt2YWx1ZV0pO1xuICB2YXIgY3VzdG9tSW5zcGVjdEZuID0gZ2V0Q3VzdG9tRm4odmFsdWUpO1xuXG4gIGlmIChjdXN0b21JbnNwZWN0Rm4gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXN0b21WYWx1ZSA9IGN1c3RvbUluc3BlY3RGbi5jYWxsKHZhbHVlKTsgLy8gY2hlY2sgZm9yIGluZmluaXRlIHJlY3Vyc2lvblxuXG4gICAgaWYgKGN1c3RvbVZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjdXN0b21WYWx1ZSA9PT0gJ3N0cmluZycgPyBjdXN0b21WYWx1ZSA6IGZvcm1hdFZhbHVlKGN1c3RvbVZhbHVlLCBzZWVuVmFsdWVzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0QXJyYXkodmFsdWUsIHNlZW5WYWx1ZXMpO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdE9iamVjdCh2YWx1ZSwgc2VlblZhbHVlcyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE9iamVjdChvYmplY3QsIHNlZW5WYWx1ZXMpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAne30nO1xuICB9XG5cbiAgaWYgKHNlZW5WYWx1ZXMubGVuZ3RoID4gTUFYX1JFQ1VSU0lWRV9ERVBUSCkge1xuICAgIHJldHVybiAnWycgKyBnZXRPYmplY3RUYWcob2JqZWN0KSArICddJztcbiAgfVxuXG4gIHZhciBwcm9wZXJ0aWVzID0ga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWx1ZSA9IGZvcm1hdFZhbHVlKG9iamVjdFtrZXldLCBzZWVuVmFsdWVzKTtcbiAgICByZXR1cm4ga2V5ICsgJzogJyArIHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuICd7ICcgKyBwcm9wZXJ0aWVzLmpvaW4oJywgJykgKyAnIH0nO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShhcnJheSwgc2VlblZhbHVlcykge1xuICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdbXSc7XG4gIH1cblxuICBpZiAoc2VlblZhbHVlcy5sZW5ndGggPiBNQVhfUkVDVVJTSVZFX0RFUFRIKSB7XG4gICAgcmV0dXJuICdbQXJyYXldJztcbiAgfVxuXG4gIHZhciBsZW4gPSBNYXRoLm1pbihNQVhfQVJSQVlfTEVOR1RILCBhcnJheS5sZW5ndGgpO1xuICB2YXIgcmVtYWluaW5nID0gYXJyYXkubGVuZ3RoIC0gbGVuO1xuICB2YXIgaXRlbXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaXRlbXMucHVzaChmb3JtYXRWYWx1ZShhcnJheVtpXSwgc2VlblZhbHVlcykpO1xuICB9XG5cbiAgaWYgKHJlbWFpbmluZyA9PT0gMSkge1xuICAgIGl0ZW1zLnB1c2goJy4uLiAxIG1vcmUgaXRlbScpO1xuICB9IGVsc2UgaWYgKHJlbWFpbmluZyA+IDEpIHtcbiAgICBpdGVtcy5wdXNoKFwiLi4uIFwiLmNvbmNhdChyZW1haW5pbmcsIFwiIG1vcmUgaXRlbXNcIikpO1xuICB9XG5cbiAgcmV0dXJuICdbJyArIGl0ZW1zLmpvaW4oJywgJykgKyAnXSc7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUZuKG9iamVjdCkge1xuICB2YXIgY3VzdG9tSW5zcGVjdEZuID0gb2JqZWN0W1N0cmluZyhfbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbC5kZWZhdWx0KV07XG5cbiAgaWYgKHR5cGVvZiBjdXN0b21JbnNwZWN0Rm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3VzdG9tSW5zcGVjdEZuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3QuaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBvYmplY3QuaW5zcGVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RUYWcob2JqZWN0KSB7XG4gIHZhciB0YWcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5yZXBsYWNlKC9eXFxbb2JqZWN0IC8sICcnKS5yZXBsYWNlKC9dJC8sICcnKTtcblxuICBpZiAodGFnID09PSAnT2JqZWN0JyAmJiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG5hbWUgPSBvYmplY3QuY29uc3RydWN0b3IubmFtZTtcblxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YWc7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGludmFyaWFudDtcblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICB2YXIgYm9vbGVhbkNvbmRpdGlvbiA9IEJvb2xlYW4oY29uZGl0aW9uKTsgLy8gaXN0YW5idWwgaWdub3JlIGVsc2UgKFNlZSB0cmFuc2Zvcm1hdGlvbiBkb25lIGluICcuL3Jlc291cmNlcy9pbmxpbmVJbnZhcmlhbnQuanMnKVxuXG4gIGlmICghYm9vbGVhbkNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9IG51bGwgPyBtZXNzYWdlIDogJ1VuZXhwZWN0ZWQgaW52YXJpYW50IHRyaWdnZXJlZC4nKTtcbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAoU2VlOiAnaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZ3JhcGhxbC1qcy9pc3N1ZXMvMjMxNycpXG52YXIgbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicgPyBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpIDogdW5kZWZpbmVkO1xudmFyIF9kZWZhdWx0ID0gbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZTtcbmV4cG9ydHMuVG9rZW4gPSBleHBvcnRzLkxvY2F0aW9uID0gdm9pZCAwO1xuXG52YXIgX2RlZmluZUluc3BlY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9qc3V0aWxzL2RlZmluZUluc3BlY3QuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvbnRhaW5zIGEgcmFuZ2Ugb2YgVVRGLTggY2hhcmFjdGVyIG9mZnNldHMgYW5kIHRva2VuIHJlZmVyZW5jZXMgdGhhdFxuICogaWRlbnRpZnkgdGhlIHJlZ2lvbiBvZiB0aGUgc291cmNlIGZyb20gd2hpY2ggdGhlIEFTVCBkZXJpdmVkLlxuICovXG52YXIgTG9jYXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogVGhlIGNoYXJhY3RlciBvZmZzZXQgYXQgd2hpY2ggdGhpcyBOb2RlIGJlZ2lucy5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGF0IHdoaWNoIHRoaXMgTm9kZSBlbmRzLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIFRva2VuIGF0IHdoaWNoIHRoaXMgTm9kZSBiZWdpbnMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgVG9rZW4gYXQgd2hpY2ggdGhpcyBOb2RlIGVuZHMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgU291cmNlIGRvY3VtZW50IHRoZSBBU1QgcmVwcmVzZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIExvY2F0aW9uKHN0YXJ0VG9rZW4sIGVuZFRva2VuLCBzb3VyY2UpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnRUb2tlbi5zdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZFRva2VuLmVuZDtcbiAgICB0aGlzLnN0YXJ0VG9rZW4gPSBzdGFydFRva2VuO1xuICAgIHRoaXMuZW5kVG9rZW4gPSBlbmRUb2tlbjtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBMb2NhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gTG9jYXRpb247XG59KCk7IC8vIFByaW50IGEgc2ltcGxpZmllZCBmb3JtIHdoZW4gYXBwZWFyaW5nIGluIGBpbnNwZWN0YCBhbmQgYHV0aWwuaW5zcGVjdGAuXG5cblxuZXhwb3J0cy5Mb2NhdGlvbiA9IExvY2F0aW9uO1xuKDAsIF9kZWZpbmVJbnNwZWN0LmRlZmF1bHQpKExvY2F0aW9uKTtcbi8qKlxuICogUmVwcmVzZW50cyBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgcmVwcmVzZW50ZWQgYnkgYSBsZXhpY2FsIHRva2VuXG4gKiB3aXRoaW4gYSBTb3VyY2UuXG4gKi9cblxudmFyIFRva2VuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIFRva2VuLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIGNoYXJhY3RlciBvZmZzZXQgYXQgd2hpY2ggdGhpcyBOb2RlIGJlZ2lucy5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGF0IHdoaWNoIHRoaXMgTm9kZSBlbmRzLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIDEtaW5kZXhlZCBsaW5lIG51bWJlciBvbiB3aGljaCB0aGlzIFRva2VuIGFwcGVhcnMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgMS1pbmRleGVkIGNvbHVtbiBudW1iZXIgYXQgd2hpY2ggdGhpcyBUb2tlbiBiZWdpbnMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGb3Igbm9uLXB1bmN0dWF0aW9uIHRva2VucywgcmVwcmVzZW50cyB0aGUgaW50ZXJwcmV0ZWQgdmFsdWUgb2YgdGhlIHRva2VuLlxuICAgKi9cblxuICAvKipcbiAgICogVG9rZW5zIGV4aXN0IGFzIG5vZGVzIGluIGEgZG91YmxlLWxpbmtlZC1saXN0IGFtb25nc3QgYWxsIHRva2Vuc1xuICAgKiBpbmNsdWRpbmcgaWdub3JlZCB0b2tlbnMuIDxTT0Y+IGlzIGFsd2F5cyB0aGUgZmlyc3Qgbm9kZSBhbmQgPEVPRj5cbiAgICogdGhlIGxhc3QuXG4gICAqL1xuICBmdW5jdGlvbiBUb2tlbihraW5kLCBzdGFydCwgZW5kLCBsaW5lLCBjb2x1bW4sIHByZXYsIHZhbHVlKSB7XG4gICAgdGhpcy5raW5kID0ga2luZDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBUb2tlbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IHRoaXMua2luZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGluZTogdGhpcy5saW5lLFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtblxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIFRva2VuO1xufSgpOyAvLyBQcmludCBhIHNpbXBsaWZpZWQgZm9ybSB3aGVuIGFwcGVhcmluZyBpbiBgaW5zcGVjdGAgYW5kIGB1dGlsLmluc3BlY3RgLlxuXG5cbmV4cG9ydHMuVG9rZW4gPSBUb2tlbjtcbigwLCBfZGVmaW5lSW5zcGVjdC5kZWZhdWx0KShUb2tlbik7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5cbmZ1bmN0aW9uIGlzTm9kZShtYXliZU5vZGUpIHtcbiAgcmV0dXJuIG1heWJlTm9kZSAhPSBudWxsICYmIHR5cGVvZiBtYXliZU5vZGUua2luZCA9PT0gJ3N0cmluZyc7XG59XG4vKipcbiAqIFRoZSBsaXN0IG9mIGFsbCBwb3NzaWJsZSBBU1Qgbm9kZSB0eXBlcy5cbiAqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZGVudEJsb2NrU3RyaW5nVmFsdWUgPSBkZWRlbnRCbG9ja1N0cmluZ1ZhbHVlO1xuZXhwb3J0cy5nZXRCbG9ja1N0cmluZ0luZGVudGF0aW9uID0gZ2V0QmxvY2tTdHJpbmdJbmRlbnRhdGlvbjtcbmV4cG9ydHMucHJpbnRCbG9ja1N0cmluZyA9IHByaW50QmxvY2tTdHJpbmc7XG5cbi8qKlxuICogUHJvZHVjZXMgdGhlIHZhbHVlIG9mIGEgYmxvY2sgc3RyaW5nIGZyb20gaXRzIHBhcnNlZCByYXcgdmFsdWUsIHNpbWlsYXIgdG9cbiAqIENvZmZlZVNjcmlwdCdzIGJsb2NrIHN0cmluZywgUHl0aG9uJ3MgZG9jc3RyaW5nIHRyaW0gb3IgUnVieSdzIHN0cmlwX2hlcmVkb2MuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRzIHRoZSBHcmFwaFFMIHNwZWMncyBCbG9ja1N0cmluZ1ZhbHVlKCkgc3RhdGljIGFsZ29yaXRobS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVkZW50QmxvY2tTdHJpbmdWYWx1ZShyYXdTdHJpbmcpIHtcbiAgLy8gRXhwYW5kIGEgYmxvY2sgc3RyaW5nJ3MgcmF3IHZhbHVlIGludG8gaW5kZXBlbmRlbnQgbGluZXMuXG4gIHZhciBsaW5lcyA9IHJhd1N0cmluZy5zcGxpdCgvXFxyXFxufFtcXG5cXHJdL2cpOyAvLyBSZW1vdmUgY29tbW9uIGluZGVudGF0aW9uIGZyb20gYWxsIGxpbmVzIGJ1dCBmaXJzdC5cblxuICB2YXIgY29tbW9uSW5kZW50ID0gZ2V0QmxvY2tTdHJpbmdJbmRlbnRhdGlvbihyYXdTdHJpbmcpO1xuXG4gIGlmIChjb21tb25JbmRlbnQgIT09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsaW5lc1tpXSA9IGxpbmVzW2ldLnNsaWNlKGNvbW1vbkluZGVudCk7XG4gICAgfVxuICB9IC8vIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBibGFuayBsaW5lcy5cblxuXG4gIHZhciBzdGFydExpbmUgPSAwO1xuXG4gIHdoaWxlIChzdGFydExpbmUgPCBsaW5lcy5sZW5ndGggJiYgaXNCbGFuayhsaW5lc1tzdGFydExpbmVdKSkge1xuICAgICsrc3RhcnRMaW5lO1xuICB9XG5cbiAgdmFyIGVuZExpbmUgPSBsaW5lcy5sZW5ndGg7XG5cbiAgd2hpbGUgKGVuZExpbmUgPiBzdGFydExpbmUgJiYgaXNCbGFuayhsaW5lc1tlbmRMaW5lIC0gMV0pKSB7XG4gICAgLS1lbmRMaW5lO1xuICB9IC8vIFJldHVybiBhIHN0cmluZyBvZiB0aGUgbGluZXMgam9pbmVkIHdpdGggVSswMDBBLlxuXG5cbiAgcmV0dXJuIGxpbmVzLnNsaWNlKHN0YXJ0TGluZSwgZW5kTGluZSkuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzQmxhbmsoc3RyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHN0cltpXSAhPT0gJyAnICYmIHN0cltpXSAhPT0gJ1xcdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRCbG9ja1N0cmluZ0luZGVudGF0aW9uKHZhbHVlKSB7XG4gIHZhciBfY29tbW9uSW5kZW50O1xuXG4gIHZhciBpc0ZpcnN0TGluZSA9IHRydWU7XG4gIHZhciBpc0VtcHR5TGluZSA9IHRydWU7XG4gIHZhciBpbmRlbnQgPSAwO1xuICB2YXIgY29tbW9uSW5kZW50ID0gbnVsbDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgc3dpdGNoICh2YWx1ZS5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICAvLyAgXFxyXG4gICAgICAgIGlmICh2YWx1ZS5jaGFyQ29kZUF0KGkgKyAxKSA9PT0gMTApIHtcbiAgICAgICAgICArK2k7IC8vIHNraXAgXFxyXFxuIGFzIG9uZSBzeW1ib2xcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICAgIGNhc2UgMTA6XG4gICAgICAgIC8vICBcXG5cbiAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTtcbiAgICAgICAgaXNFbXB0eUxpbmUgPSB0cnVlO1xuICAgICAgICBpbmRlbnQgPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5OiAvLyAgIFxcdFxuXG4gICAgICBjYXNlIDMyOlxuICAgICAgICAvLyAgPHNwYWNlPlxuICAgICAgICArK2luZGVudDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChpc0VtcHR5TGluZSAmJiAhaXNGaXJzdExpbmUgJiYgKGNvbW1vbkluZGVudCA9PT0gbnVsbCB8fCBpbmRlbnQgPCBjb21tb25JbmRlbnQpKSB7XG4gICAgICAgICAgY29tbW9uSW5kZW50ID0gaW5kZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaXNFbXB0eUxpbmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKF9jb21tb25JbmRlbnQgPSBjb21tb25JbmRlbnQpICE9PSBudWxsICYmIF9jb21tb25JbmRlbnQgIT09IHZvaWQgMCA/IF9jb21tb25JbmRlbnQgOiAwO1xufVxuLyoqXG4gKiBQcmludCBhIGJsb2NrIHN0cmluZyBpbiB0aGUgaW5kZW50ZWQgYmxvY2sgZm9ybSBieSBhZGRpbmcgYSBsZWFkaW5nIGFuZFxuICogdHJhaWxpbmcgYmxhbmsgbGluZS4gSG93ZXZlciwgaWYgYSBibG9jayBzdHJpbmcgc3RhcnRzIHdpdGggd2hpdGVzcGFjZSBhbmQgaXNcbiAqIGEgc2luZ2xlLWxpbmUsIGFkZGluZyBhIGxlYWRpbmcgYmxhbmsgbGluZSB3b3VsZCBzdHJpcCB0aGF0IHdoaXRlc3BhY2UuXG4gKlxuICogQGludGVybmFsXG4gKi9cblxuXG5mdW5jdGlvbiBwcmludEJsb2NrU3RyaW5nKHZhbHVlKSB7XG4gIHZhciBpbmRlbnRhdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gIHZhciBwcmVmZXJNdWx0aXBsZUxpbmVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGlzU2luZ2xlTGluZSA9IHZhbHVlLmluZGV4T2YoJ1xcbicpID09PSAtMTtcbiAgdmFyIGhhc0xlYWRpbmdTcGFjZSA9IHZhbHVlWzBdID09PSAnICcgfHwgdmFsdWVbMF0gPT09ICdcXHQnO1xuICB2YXIgaGFzVHJhaWxpbmdRdW90ZSA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdID09PSAnXCInO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdID09PSAnXFxcXCc7XG4gIHZhciBwcmludEFzTXVsdGlwbGVMaW5lcyA9ICFpc1NpbmdsZUxpbmUgfHwgaGFzVHJhaWxpbmdRdW90ZSB8fCBoYXNUcmFpbGluZ1NsYXNoIHx8IHByZWZlck11bHRpcGxlTGluZXM7XG4gIHZhciByZXN1bHQgPSAnJzsgLy8gRm9ybWF0IGEgbXVsdGktbGluZSBibG9jayBxdW90ZSB0byBhY2NvdW50IGZvciBsZWFkaW5nIHNwYWNlLlxuXG4gIGlmIChwcmludEFzTXVsdGlwbGVMaW5lcyAmJiAhKGlzU2luZ2xlTGluZSAmJiBoYXNMZWFkaW5nU3BhY2UpKSB7XG4gICAgcmVzdWx0ICs9ICdcXG4nICsgaW5kZW50YXRpb247XG4gIH1cblxuICByZXN1bHQgKz0gaW5kZW50YXRpb24gPyB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJ1xcbicgKyBpbmRlbnRhdGlvbikgOiB2YWx1ZTtcblxuICBpZiAocHJpbnRBc011bHRpcGxlTGluZXMpIHtcbiAgICByZXN1bHQgKz0gJ1xcbic7XG4gIH1cblxuICByZXR1cm4gJ1wiXCJcIicgKyByZXN1bHQucmVwbGFjZSgvXCJcIlwiL2csICdcXFxcXCJcIlwiJykgKyAnXCJcIlwiJztcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludCA9IHByaW50O1xuXG52YXIgX3Zpc2l0b3IgPSByZXF1aXJlKFwiLi92aXNpdG9yLmpzXCIpO1xuXG52YXIgX2Jsb2NrU3RyaW5nID0gcmVxdWlyZShcIi4vYmxvY2tTdHJpbmcuanNcIik7XG5cbi8qKlxuICogQ29udmVydHMgYW4gQVNUIGludG8gYSBzdHJpbmcsIHVzaW5nIG9uZSBzZXQgb2YgcmVhc29uYWJsZVxuICogZm9ybWF0dGluZyBydWxlcy5cbiAqL1xuZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiAoMCwgX3Zpc2l0b3IudmlzaXQpKGFzdCwge1xuICAgIGxlYXZlOiBwcmludERvY0FTVFJlZHVjZXJcbiAgfSk7XG59XG5cbnZhciBNQVhfTElORV9MRU5HVEggPSA4MDsgLy8gVE9ETzogcHJvdmlkZSBiZXR0ZXIgdHlwZSBjb3ZlcmFnZSBpbiBmdXR1cmVcblxudmFyIHByaW50RG9jQVNUUmVkdWNlciA9IHtcbiAgTmFtZTogZnVuY3Rpb24gTmFtZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gIH0sXG4gIFZhcmlhYmxlOiBmdW5jdGlvbiBWYXJpYWJsZShub2RlKSB7XG4gICAgcmV0dXJuICckJyArIG5vZGUubmFtZTtcbiAgfSxcbiAgLy8gRG9jdW1lbnRcbiAgRG9jdW1lbnQ6IGZ1bmN0aW9uIERvY3VtZW50KG5vZGUpIHtcbiAgICByZXR1cm4gam9pbihub2RlLmRlZmluaXRpb25zLCAnXFxuXFxuJykgKyAnXFxuJztcbiAgfSxcbiAgT3BlcmF0aW9uRGVmaW5pdGlvbjogZnVuY3Rpb24gT3BlcmF0aW9uRGVmaW5pdGlvbihub2RlKSB7XG4gICAgdmFyIG9wID0gbm9kZS5vcGVyYXRpb247XG4gICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgdmFyIHZhckRlZnMgPSB3cmFwKCcoJywgam9pbihub2RlLnZhcmlhYmxlRGVmaW5pdGlvbnMsICcsICcpLCAnKScpO1xuICAgIHZhciBkaXJlY3RpdmVzID0gam9pbihub2RlLmRpcmVjdGl2ZXMsICcgJyk7XG4gICAgdmFyIHNlbGVjdGlvblNldCA9IG5vZGUuc2VsZWN0aW9uU2V0OyAvLyBBbm9ueW1vdXMgcXVlcmllcyB3aXRoIG5vIGRpcmVjdGl2ZXMgb3IgdmFyaWFibGUgZGVmaW5pdGlvbnMgY2FuIHVzZVxuICAgIC8vIHRoZSBxdWVyeSBzaG9ydCBmb3JtLlxuXG4gICAgcmV0dXJuICFuYW1lICYmICFkaXJlY3RpdmVzICYmICF2YXJEZWZzICYmIG9wID09PSAncXVlcnknID8gc2VsZWN0aW9uU2V0IDogam9pbihbb3AsIGpvaW4oW25hbWUsIHZhckRlZnNdKSwgZGlyZWN0aXZlcywgc2VsZWN0aW9uU2V0XSwgJyAnKTtcbiAgfSxcbiAgVmFyaWFibGVEZWZpbml0aW9uOiBmdW5jdGlvbiBWYXJpYWJsZURlZmluaXRpb24oX3JlZikge1xuICAgIHZhciB2YXJpYWJsZSA9IF9yZWYudmFyaWFibGUsXG4gICAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZi5kaXJlY3RpdmVzO1xuICAgIHJldHVybiB2YXJpYWJsZSArICc6ICcgKyB0eXBlICsgd3JhcCgnID0gJywgZGVmYXVsdFZhbHVlKSArIHdyYXAoJyAnLCBqb2luKGRpcmVjdGl2ZXMsICcgJykpO1xuICB9LFxuICBTZWxlY3Rpb25TZXQ6IGZ1bmN0aW9uIFNlbGVjdGlvblNldChfcmVmMikge1xuICAgIHZhciBzZWxlY3Rpb25zID0gX3JlZjIuc2VsZWN0aW9ucztcbiAgICByZXR1cm4gYmxvY2soc2VsZWN0aW9ucyk7XG4gIH0sXG4gIEZpZWxkOiBmdW5jdGlvbiBGaWVsZChfcmVmMykge1xuICAgIHZhciBhbGlhcyA9IF9yZWYzLmFsaWFzLFxuICAgICAgICBuYW1lID0gX3JlZjMubmFtZSxcbiAgICAgICAgYXJncyA9IF9yZWYzLmFyZ3VtZW50cyxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYzLmRpcmVjdGl2ZXMsXG4gICAgICAgIHNlbGVjdGlvblNldCA9IF9yZWYzLnNlbGVjdGlvblNldDtcbiAgICB2YXIgcHJlZml4ID0gd3JhcCgnJywgYWxpYXMsICc6ICcpICsgbmFtZTtcbiAgICB2YXIgYXJnc0xpbmUgPSBwcmVmaXggKyB3cmFwKCcoJywgam9pbihhcmdzLCAnLCAnKSwgJyknKTtcblxuICAgIGlmIChhcmdzTGluZS5sZW5ndGggPiBNQVhfTElORV9MRU5HVEgpIHtcbiAgICAgIGFyZ3NMaW5lID0gcHJlZml4ICsgd3JhcCgnKFxcbicsIGluZGVudChqb2luKGFyZ3MsICdcXG4nKSksICdcXG4pJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvaW4oW2FyZ3NMaW5lLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksIHNlbGVjdGlvblNldF0sICcgJyk7XG4gIH0sXG4gIEFyZ3VtZW50OiBmdW5jdGlvbiBBcmd1bWVudChfcmVmNCkge1xuICAgIHZhciBuYW1lID0gX3JlZjQubmFtZSxcbiAgICAgICAgdmFsdWUgPSBfcmVmNC52YWx1ZTtcbiAgICByZXR1cm4gbmFtZSArICc6ICcgKyB2YWx1ZTtcbiAgfSxcbiAgLy8gRnJhZ21lbnRzXG4gIEZyYWdtZW50U3ByZWFkOiBmdW5jdGlvbiBGcmFnbWVudFNwcmVhZChfcmVmNSkge1xuICAgIHZhciBuYW1lID0gX3JlZjUubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWY1LmRpcmVjdGl2ZXM7XG4gICAgcmV0dXJuICcuLi4nICsgbmFtZSArIHdyYXAoJyAnLCBqb2luKGRpcmVjdGl2ZXMsICcgJykpO1xuICB9LFxuICBJbmxpbmVGcmFnbWVudDogZnVuY3Rpb24gSW5saW5lRnJhZ21lbnQoX3JlZjYpIHtcbiAgICB2YXIgdHlwZUNvbmRpdGlvbiA9IF9yZWY2LnR5cGVDb25kaXRpb24sXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmNi5kaXJlY3RpdmVzLFxuICAgICAgICBzZWxlY3Rpb25TZXQgPSBfcmVmNi5zZWxlY3Rpb25TZXQ7XG4gICAgcmV0dXJuIGpvaW4oWycuLi4nLCB3cmFwKCdvbiAnLCB0eXBlQ29uZGl0aW9uKSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBzZWxlY3Rpb25TZXRdLCAnICcpO1xuICB9LFxuICBGcmFnbWVudERlZmluaXRpb246IGZ1bmN0aW9uIEZyYWdtZW50RGVmaW5pdGlvbihfcmVmNykge1xuICAgIHZhciBuYW1lID0gX3JlZjcubmFtZSxcbiAgICAgICAgdHlwZUNvbmRpdGlvbiA9IF9yZWY3LnR5cGVDb25kaXRpb24sXG4gICAgICAgIHZhcmlhYmxlRGVmaW5pdGlvbnMgPSBfcmVmNy52YXJpYWJsZURlZmluaXRpb25zLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjcuZGlyZWN0aXZlcyxcbiAgICAgICAgc2VsZWN0aW9uU2V0ID0gX3JlZjcuc2VsZWN0aW9uU2V0O1xuICAgIHJldHVybiAoLy8gTm90ZTogZnJhZ21lbnQgdmFyaWFibGUgZGVmaW5pdGlvbnMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGJlIGNoYW5nZWRcbiAgICAgIC8vIG9yIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIFwiZnJhZ21lbnQgXCIuY29uY2F0KG5hbWUpLmNvbmNhdCh3cmFwKCcoJywgam9pbih2YXJpYWJsZURlZmluaXRpb25zLCAnLCAnKSwgJyknKSwgXCIgXCIpICsgXCJvbiBcIi5jb25jYXQodHlwZUNvbmRpdGlvbiwgXCIgXCIpLmNvbmNhdCh3cmFwKCcnLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksICcgJykpICsgc2VsZWN0aW9uU2V0XG4gICAgKTtcbiAgfSxcbiAgLy8gVmFsdWVcbiAgSW50VmFsdWU6IGZ1bmN0aW9uIEludFZhbHVlKF9yZWY4KSB7XG4gICAgdmFyIHZhbHVlID0gX3JlZjgudmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBGbG9hdFZhbHVlOiBmdW5jdGlvbiBGbG9hdFZhbHVlKF9yZWY5KSB7XG4gICAgdmFyIHZhbHVlID0gX3JlZjkudmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBTdHJpbmdWYWx1ZTogZnVuY3Rpb24gU3RyaW5nVmFsdWUoX3JlZjEwLCBrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBfcmVmMTAudmFsdWUsXG4gICAgICAgIGlzQmxvY2tTdHJpbmcgPSBfcmVmMTAuYmxvY2s7XG4gICAgcmV0dXJuIGlzQmxvY2tTdHJpbmcgPyAoMCwgX2Jsb2NrU3RyaW5nLnByaW50QmxvY2tTdHJpbmcpKHZhbHVlLCBrZXkgPT09ICdkZXNjcmlwdGlvbicgPyAnJyA6ICcgICcpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9LFxuICBCb29sZWFuVmFsdWU6IGZ1bmN0aW9uIEJvb2xlYW5WYWx1ZShfcmVmMTEpIHtcbiAgICB2YXIgdmFsdWUgPSBfcmVmMTEudmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfSxcbiAgTnVsbFZhbHVlOiBmdW5jdGlvbiBOdWxsVmFsdWUoKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfSxcbiAgRW51bVZhbHVlOiBmdW5jdGlvbiBFbnVtVmFsdWUoX3JlZjEyKSB7XG4gICAgdmFyIHZhbHVlID0gX3JlZjEyLnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgTGlzdFZhbHVlOiBmdW5jdGlvbiBMaXN0VmFsdWUoX3JlZjEzKSB7XG4gICAgdmFyIHZhbHVlcyA9IF9yZWYxMy52YWx1ZXM7XG4gICAgcmV0dXJuICdbJyArIGpvaW4odmFsdWVzLCAnLCAnKSArICddJztcbiAgfSxcbiAgT2JqZWN0VmFsdWU6IGZ1bmN0aW9uIE9iamVjdFZhbHVlKF9yZWYxNCkge1xuICAgIHZhciBmaWVsZHMgPSBfcmVmMTQuZmllbGRzO1xuICAgIHJldHVybiAneycgKyBqb2luKGZpZWxkcywgJywgJykgKyAnfSc7XG4gIH0sXG4gIE9iamVjdEZpZWxkOiBmdW5jdGlvbiBPYmplY3RGaWVsZChfcmVmMTUpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYxNS5uYW1lLFxuICAgICAgICB2YWx1ZSA9IF9yZWYxNS52YWx1ZTtcbiAgICByZXR1cm4gbmFtZSArICc6ICcgKyB2YWx1ZTtcbiAgfSxcbiAgLy8gRGlyZWN0aXZlXG4gIERpcmVjdGl2ZTogZnVuY3Rpb24gRGlyZWN0aXZlKF9yZWYxNikge1xuICAgIHZhciBuYW1lID0gX3JlZjE2Lm5hbWUsXG4gICAgICAgIGFyZ3MgPSBfcmVmMTYuYXJndW1lbnRzO1xuICAgIHJldHVybiAnQCcgKyBuYW1lICsgd3JhcCgnKCcsIGpvaW4oYXJncywgJywgJyksICcpJyk7XG4gIH0sXG4gIC8vIFR5cGVcbiAgTmFtZWRUeXBlOiBmdW5jdGlvbiBOYW1lZFR5cGUoX3JlZjE3KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMTcubmFtZTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgTGlzdFR5cGU6IGZ1bmN0aW9uIExpc3RUeXBlKF9yZWYxOCkge1xuICAgIHZhciB0eXBlID0gX3JlZjE4LnR5cGU7XG4gICAgcmV0dXJuICdbJyArIHR5cGUgKyAnXSc7XG4gIH0sXG4gIE5vbk51bGxUeXBlOiBmdW5jdGlvbiBOb25OdWxsVHlwZShfcmVmMTkpIHtcbiAgICB2YXIgdHlwZSA9IF9yZWYxOS50eXBlO1xuICAgIHJldHVybiB0eXBlICsgJyEnO1xuICB9LFxuICAvLyBUeXBlIFN5c3RlbSBEZWZpbml0aW9uc1xuICBTY2hlbWFEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjIwKSB7XG4gICAgdmFyIGRpcmVjdGl2ZXMgPSBfcmVmMjAuZGlyZWN0aXZlcyxcbiAgICAgICAgb3BlcmF0aW9uVHlwZXMgPSBfcmVmMjAub3BlcmF0aW9uVHlwZXM7XG4gICAgcmV0dXJuIGpvaW4oWydzY2hlbWEnLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksIGJsb2NrKG9wZXJhdGlvblR5cGVzKV0sICcgJyk7XG4gIH0pLFxuICBPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjogZnVuY3Rpb24gT3BlcmF0aW9uVHlwZURlZmluaXRpb24oX3JlZjIxKSB7XG4gICAgdmFyIG9wZXJhdGlvbiA9IF9yZWYyMS5vcGVyYXRpb24sXG4gICAgICAgIHR5cGUgPSBfcmVmMjEudHlwZTtcbiAgICByZXR1cm4gb3BlcmF0aW9uICsgJzogJyArIHR5cGU7XG4gIH0sXG4gIFNjYWxhclR5cGVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjIyKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjIubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyMi5kaXJlY3RpdmVzO1xuICAgIHJldHVybiBqb2luKFsnc2NhbGFyJywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpXSwgJyAnKTtcbiAgfSksXG4gIE9iamVjdFR5cGVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjIzKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjMubmFtZSxcbiAgICAgICAgaW50ZXJmYWNlcyA9IF9yZWYyMy5pbnRlcmZhY2VzLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjIzLmRpcmVjdGl2ZXMsXG4gICAgICAgIGZpZWxkcyA9IF9yZWYyMy5maWVsZHM7XG4gICAgcmV0dXJuIGpvaW4oWyd0eXBlJywgbmFtZSwgd3JhcCgnaW1wbGVtZW50cyAnLCBqb2luKGludGVyZmFjZXMsICcgJiAnKSksIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2soZmllbGRzKV0sICcgJyk7XG4gIH0pLFxuICBGaWVsZERlZmluaXRpb246IGFkZERlc2NyaXB0aW9uKGZ1bmN0aW9uIChfcmVmMjQpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYyNC5uYW1lLFxuICAgICAgICBhcmdzID0gX3JlZjI0LmFyZ3VtZW50cyxcbiAgICAgICAgdHlwZSA9IF9yZWYyNC50eXBlLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjI0LmRpcmVjdGl2ZXM7XG4gICAgcmV0dXJuIG5hbWUgKyAoaGFzTXVsdGlsaW5lSXRlbXMoYXJncykgPyB3cmFwKCcoXFxuJywgaW5kZW50KGpvaW4oYXJncywgJ1xcbicpKSwgJ1xcbiknKSA6IHdyYXAoJygnLCBqb2luKGFyZ3MsICcsICcpLCAnKScpKSArICc6ICcgKyB0eXBlICsgd3JhcCgnICcsIGpvaW4oZGlyZWN0aXZlcywgJyAnKSk7XG4gIH0pLFxuICBJbnB1dFZhbHVlRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYyNSkge1xuICAgIHZhciBuYW1lID0gX3JlZjI1Lm5hbWUsXG4gICAgICAgIHR5cGUgPSBfcmVmMjUudHlwZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3JlZjI1LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyNS5kaXJlY3RpdmVzO1xuICAgIHJldHVybiBqb2luKFtuYW1lICsgJzogJyArIHR5cGUsIHdyYXAoJz0gJywgZGVmYXVsdFZhbHVlKSwgam9pbihkaXJlY3RpdmVzLCAnICcpXSwgJyAnKTtcbiAgfSksXG4gIEludGVyZmFjZVR5cGVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjI2KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjYubmFtZSxcbiAgICAgICAgaW50ZXJmYWNlcyA9IF9yZWYyNi5pbnRlcmZhY2VzLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjI2LmRpcmVjdGl2ZXMsXG4gICAgICAgIGZpZWxkcyA9IF9yZWYyNi5maWVsZHM7XG4gICAgcmV0dXJuIGpvaW4oWydpbnRlcmZhY2UnLCBuYW1lLCB3cmFwKCdpbXBsZW1lbnRzICcsIGpvaW4oaW50ZXJmYWNlcywgJyAmICcpKSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhmaWVsZHMpXSwgJyAnKTtcbiAgfSksXG4gIFVuaW9uVHlwZURlZmluaXRpb246IGFkZERlc2NyaXB0aW9uKGZ1bmN0aW9uIChfcmVmMjcpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYyNy5uYW1lLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjI3LmRpcmVjdGl2ZXMsXG4gICAgICAgIHR5cGVzID0gX3JlZjI3LnR5cGVzO1xuICAgIHJldHVybiBqb2luKFsndW5pb24nLCBuYW1lLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksIHR5cGVzICYmIHR5cGVzLmxlbmd0aCAhPT0gMCA/ICc9ICcgKyBqb2luKHR5cGVzLCAnIHwgJykgOiAnJ10sICcgJyk7XG4gIH0pLFxuICBFbnVtVHlwZURlZmluaXRpb246IGFkZERlc2NyaXB0aW9uKGZ1bmN0aW9uIChfcmVmMjgpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYyOC5uYW1lLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjI4LmRpcmVjdGl2ZXMsXG4gICAgICAgIHZhbHVlcyA9IF9yZWYyOC52YWx1ZXM7XG4gICAgcmV0dXJuIGpvaW4oWydlbnVtJywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayh2YWx1ZXMpXSwgJyAnKTtcbiAgfSksXG4gIEVudW1WYWx1ZURlZmluaXRpb246IGFkZERlc2NyaXB0aW9uKGZ1bmN0aW9uIChfcmVmMjkpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYyOS5uYW1lLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjI5LmRpcmVjdGl2ZXM7XG4gICAgcmV0dXJuIGpvaW4oW25hbWUsIGpvaW4oZGlyZWN0aXZlcywgJyAnKV0sICcgJyk7XG4gIH0pLFxuICBJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjMwKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMzAubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYzMC5kaXJlY3RpdmVzLFxuICAgICAgICBmaWVsZHMgPSBfcmVmMzAuZmllbGRzO1xuICAgIHJldHVybiBqb2luKFsnaW5wdXQnLCBuYW1lLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksIGJsb2NrKGZpZWxkcyldLCAnICcpO1xuICB9KSxcbiAgRGlyZWN0aXZlRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYzMSkge1xuICAgIHZhciBuYW1lID0gX3JlZjMxLm5hbWUsXG4gICAgICAgIGFyZ3MgPSBfcmVmMzEuYXJndW1lbnRzLFxuICAgICAgICByZXBlYXRhYmxlID0gX3JlZjMxLnJlcGVhdGFibGUsXG4gICAgICAgIGxvY2F0aW9ucyA9IF9yZWYzMS5sb2NhdGlvbnM7XG4gICAgcmV0dXJuICdkaXJlY3RpdmUgQCcgKyBuYW1lICsgKGhhc011bHRpbGluZUl0ZW1zKGFyZ3MpID8gd3JhcCgnKFxcbicsIGluZGVudChqb2luKGFyZ3MsICdcXG4nKSksICdcXG4pJykgOiB3cmFwKCcoJywgam9pbihhcmdzLCAnLCAnKSwgJyknKSkgKyAocmVwZWF0YWJsZSA/ICcgcmVwZWF0YWJsZScgOiAnJykgKyAnIG9uICcgKyBqb2luKGxvY2F0aW9ucywgJyB8ICcpO1xuICB9KSxcbiAgU2NoZW1hRXh0ZW5zaW9uOiBmdW5jdGlvbiBTY2hlbWFFeHRlbnNpb24oX3JlZjMyKSB7XG4gICAgdmFyIGRpcmVjdGl2ZXMgPSBfcmVmMzIuZGlyZWN0aXZlcyxcbiAgICAgICAgb3BlcmF0aW9uVHlwZXMgPSBfcmVmMzIub3BlcmF0aW9uVHlwZXM7XG4gICAgcmV0dXJuIGpvaW4oWydleHRlbmQgc2NoZW1hJywgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhvcGVyYXRpb25UeXBlcyldLCAnICcpO1xuICB9LFxuICBTY2FsYXJUeXBlRXh0ZW5zaW9uOiBmdW5jdGlvbiBTY2FsYXJUeXBlRXh0ZW5zaW9uKF9yZWYzMykge1xuICAgIHZhciBuYW1lID0gX3JlZjMzLm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzMuZGlyZWN0aXZlcztcbiAgICByZXR1cm4gam9pbihbJ2V4dGVuZCBzY2FsYXInLCBuYW1lLCBqb2luKGRpcmVjdGl2ZXMsICcgJyldLCAnICcpO1xuICB9LFxuICBPYmplY3RUeXBlRXh0ZW5zaW9uOiBmdW5jdGlvbiBPYmplY3RUeXBlRXh0ZW5zaW9uKF9yZWYzNCkge1xuICAgIHZhciBuYW1lID0gX3JlZjM0Lm5hbWUsXG4gICAgICAgIGludGVyZmFjZXMgPSBfcmVmMzQuaW50ZXJmYWNlcyxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYzNC5kaXJlY3RpdmVzLFxuICAgICAgICBmaWVsZHMgPSBfcmVmMzQuZmllbGRzO1xuICAgIHJldHVybiBqb2luKFsnZXh0ZW5kIHR5cGUnLCBuYW1lLCB3cmFwKCdpbXBsZW1lbnRzICcsIGpvaW4oaW50ZXJmYWNlcywgJyAmICcpKSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhmaWVsZHMpXSwgJyAnKTtcbiAgfSxcbiAgSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjogZnVuY3Rpb24gSW50ZXJmYWNlVHlwZUV4dGVuc2lvbihfcmVmMzUpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYzNS5uYW1lLFxuICAgICAgICBpbnRlcmZhY2VzID0gX3JlZjM1LmludGVyZmFjZXMsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzUuZGlyZWN0aXZlcyxcbiAgICAgICAgZmllbGRzID0gX3JlZjM1LmZpZWxkcztcbiAgICByZXR1cm4gam9pbihbJ2V4dGVuZCBpbnRlcmZhY2UnLCBuYW1lLCB3cmFwKCdpbXBsZW1lbnRzICcsIGpvaW4oaW50ZXJmYWNlcywgJyAmICcpKSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhmaWVsZHMpXSwgJyAnKTtcbiAgfSxcbiAgVW5pb25UeXBlRXh0ZW5zaW9uOiBmdW5jdGlvbiBVbmlvblR5cGVFeHRlbnNpb24oX3JlZjM2KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMzYubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYzNi5kaXJlY3RpdmVzLFxuICAgICAgICB0eXBlcyA9IF9yZWYzNi50eXBlcztcbiAgICByZXR1cm4gam9pbihbJ2V4dGVuZCB1bmlvbicsIG5hbWUsIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgdHlwZXMgJiYgdHlwZXMubGVuZ3RoICE9PSAwID8gJz0gJyArIGpvaW4odHlwZXMsICcgfCAnKSA6ICcnXSwgJyAnKTtcbiAgfSxcbiAgRW51bVR5cGVFeHRlbnNpb246IGZ1bmN0aW9uIEVudW1UeXBlRXh0ZW5zaW9uKF9yZWYzNykge1xuICAgIHZhciBuYW1lID0gX3JlZjM3Lm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzcuZGlyZWN0aXZlcyxcbiAgICAgICAgdmFsdWVzID0gX3JlZjM3LnZhbHVlcztcbiAgICByZXR1cm4gam9pbihbJ2V4dGVuZCBlbnVtJywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayh2YWx1ZXMpXSwgJyAnKTtcbiAgfSxcbiAgSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOiBmdW5jdGlvbiBJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24oX3JlZjM4KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMzgubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYzOC5kaXJlY3RpdmVzLFxuICAgICAgICBmaWVsZHMgPSBfcmVmMzguZmllbGRzO1xuICAgIHJldHVybiBqb2luKFsnZXh0ZW5kIGlucHV0JywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhmaWVsZHMpXSwgJyAnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYWRkRGVzY3JpcHRpb24oY2IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGpvaW4oW25vZGUuZGVzY3JpcHRpb24sIGNiKG5vZGUpXSwgJ1xcbicpO1xuICB9O1xufVxuLyoqXG4gKiBHaXZlbiBtYXliZUFycmF5LCBwcmludCBhbiBlbXB0eSBzdHJpbmcgaWYgaXQgaXMgbnVsbCBvciBlbXB0eSwgb3RoZXJ3aXNlXG4gKiBwcmludCBhbGwgaXRlbXMgdG9nZXRoZXIgc2VwYXJhdGVkIGJ5IHNlcGFyYXRvciBpZiBwcm92aWRlZFxuICovXG5cblxuZnVuY3Rpb24gam9pbihtYXliZUFycmF5KSB7XG4gIHZhciBfbWF5YmVBcnJheSRmaWx0ZXIkam87XG5cbiAgdmFyIHNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gIHJldHVybiAoX21heWJlQXJyYXkkZmlsdGVyJGpvID0gbWF5YmVBcnJheSA9PT0gbnVsbCB8fCBtYXliZUFycmF5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXliZUFycmF5LmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4O1xuICB9KS5qb2luKHNlcGFyYXRvcikpICE9PSBudWxsICYmIF9tYXliZUFycmF5JGZpbHRlciRqbyAhPT0gdm9pZCAwID8gX21heWJlQXJyYXkkZmlsdGVyJGpvIDogJyc7XG59XG4vKipcbiAqIEdpdmVuIGFycmF5LCBwcmludCBlYWNoIGl0ZW0gb24gaXRzIG93biBsaW5lLCB3cmFwcGVkIGluIGFuXG4gKiBpbmRlbnRlZCBcInsgfVwiIGJsb2NrLlxuICovXG5cblxuZnVuY3Rpb24gYmxvY2soYXJyYXkpIHtcbiAgcmV0dXJuIHdyYXAoJ3tcXG4nLCBpbmRlbnQoam9pbihhcnJheSwgJ1xcbicpKSwgJ1xcbn0nKTtcbn1cbi8qKlxuICogSWYgbWF5YmVTdHJpbmcgaXMgbm90IG51bGwgb3IgZW1wdHksIHRoZW4gd3JhcCB3aXRoIHN0YXJ0IGFuZCBlbmQsIG90aGVyd2lzZSBwcmludCBhbiBlbXB0eSBzdHJpbmcuXG4gKi9cblxuXG5mdW5jdGlvbiB3cmFwKHN0YXJ0LCBtYXliZVN0cmluZykge1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnJztcbiAgcmV0dXJuIG1heWJlU3RyaW5nICE9IG51bGwgJiYgbWF5YmVTdHJpbmcgIT09ICcnID8gc3RhcnQgKyBtYXliZVN0cmluZyArIGVuZCA6ICcnO1xufVxuXG5mdW5jdGlvbiBpbmRlbnQoc3RyKSB7XG4gIHJldHVybiB3cmFwKCcgICcsIHN0ci5yZXBsYWNlKC9cXG4vZywgJ1xcbiAgJykpO1xufVxuXG5mdW5jdGlvbiBpc011bHRpbGluZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKCdcXG4nKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGhhc011bHRpbGluZUl0ZW1zKG1heWJlQXJyYXkpIHtcbiAgcmV0dXJuIG1heWJlQXJyYXkgIT0gbnVsbCAmJiBtYXliZUFycmF5LnNvbWUoaXNNdWx0aWxpbmUpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZpc2l0ID0gdmlzaXQ7XG5leHBvcnRzLnZpc2l0SW5QYXJhbGxlbCA9IHZpc2l0SW5QYXJhbGxlbDtcbmV4cG9ydHMuZ2V0VmlzaXRGbiA9IGdldFZpc2l0Rm47XG5leHBvcnRzLkJSRUFLID0gZXhwb3J0cy5RdWVyeURvY3VtZW50S2V5cyA9IHZvaWQgMDtcblxudmFyIF9pbnNwZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vanN1dGlscy9pbnNwZWN0LmpzXCIpKTtcblxudmFyIF9hc3QgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBRdWVyeURvY3VtZW50S2V5cyA9IHtcbiAgTmFtZTogW10sXG4gIERvY3VtZW50OiBbJ2RlZmluaXRpb25zJ10sXG4gIE9wZXJhdGlvbkRlZmluaXRpb246IFsnbmFtZScsICd2YXJpYWJsZURlZmluaXRpb25zJywgJ2RpcmVjdGl2ZXMnLCAnc2VsZWN0aW9uU2V0J10sXG4gIFZhcmlhYmxlRGVmaW5pdGlvbjogWyd2YXJpYWJsZScsICd0eXBlJywgJ2RlZmF1bHRWYWx1ZScsICdkaXJlY3RpdmVzJ10sXG4gIFZhcmlhYmxlOiBbJ25hbWUnXSxcbiAgU2VsZWN0aW9uU2V0OiBbJ3NlbGVjdGlvbnMnXSxcbiAgRmllbGQ6IFsnYWxpYXMnLCAnbmFtZScsICdhcmd1bWVudHMnLCAnZGlyZWN0aXZlcycsICdzZWxlY3Rpb25TZXQnXSxcbiAgQXJndW1lbnQ6IFsnbmFtZScsICd2YWx1ZSddLFxuICBGcmFnbWVudFNwcmVhZDogWyduYW1lJywgJ2RpcmVjdGl2ZXMnXSxcbiAgSW5saW5lRnJhZ21lbnQ6IFsndHlwZUNvbmRpdGlvbicsICdkaXJlY3RpdmVzJywgJ3NlbGVjdGlvblNldCddLFxuICBGcmFnbWVudERlZmluaXRpb246IFsnbmFtZScsIC8vIE5vdGU6IGZyYWdtZW50IHZhcmlhYmxlIGRlZmluaXRpb25zIGFyZSBleHBlcmltZW50YWwgYW5kIG1heSBiZSBjaGFuZ2VkXG4gIC8vIG9yIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgJ3ZhcmlhYmxlRGVmaW5pdGlvbnMnLCAndHlwZUNvbmRpdGlvbicsICdkaXJlY3RpdmVzJywgJ3NlbGVjdGlvblNldCddLFxuICBJbnRWYWx1ZTogW10sXG4gIEZsb2F0VmFsdWU6IFtdLFxuICBTdHJpbmdWYWx1ZTogW10sXG4gIEJvb2xlYW5WYWx1ZTogW10sXG4gIE51bGxWYWx1ZTogW10sXG4gIEVudW1WYWx1ZTogW10sXG4gIExpc3RWYWx1ZTogWyd2YWx1ZXMnXSxcbiAgT2JqZWN0VmFsdWU6IFsnZmllbGRzJ10sXG4gIE9iamVjdEZpZWxkOiBbJ25hbWUnLCAndmFsdWUnXSxcbiAgRGlyZWN0aXZlOiBbJ25hbWUnLCAnYXJndW1lbnRzJ10sXG4gIE5hbWVkVHlwZTogWyduYW1lJ10sXG4gIExpc3RUeXBlOiBbJ3R5cGUnXSxcbiAgTm9uTnVsbFR5cGU6IFsndHlwZSddLFxuICBTY2hlbWFEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ2RpcmVjdGl2ZXMnLCAnb3BlcmF0aW9uVHlwZXMnXSxcbiAgT3BlcmF0aW9uVHlwZURlZmluaXRpb246IFsndHlwZSddLFxuICBTY2FsYXJUeXBlRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2RpcmVjdGl2ZXMnXSxcbiAgT2JqZWN0VHlwZURlZmluaXRpb246IFsnZGVzY3JpcHRpb24nLCAnbmFtZScsICdpbnRlcmZhY2VzJywgJ2RpcmVjdGl2ZXMnLCAnZmllbGRzJ10sXG4gIEZpZWxkRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2FyZ3VtZW50cycsICd0eXBlJywgJ2RpcmVjdGl2ZXMnXSxcbiAgSW5wdXRWYWx1ZURlZmluaXRpb246IFsnZGVzY3JpcHRpb24nLCAnbmFtZScsICd0eXBlJywgJ2RlZmF1bHRWYWx1ZScsICdkaXJlY3RpdmVzJ10sXG4gIEludGVyZmFjZVR5cGVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAnaW50ZXJmYWNlcycsICdkaXJlY3RpdmVzJywgJ2ZpZWxkcyddLFxuICBVbmlvblR5cGVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAnZGlyZWN0aXZlcycsICd0eXBlcyddLFxuICBFbnVtVHlwZURlZmluaXRpb246IFsnZGVzY3JpcHRpb24nLCAnbmFtZScsICdkaXJlY3RpdmVzJywgJ3ZhbHVlcyddLFxuICBFbnVtVmFsdWVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAnZGlyZWN0aXZlcyddLFxuICBJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAnZGlyZWN0aXZlcycsICdmaWVsZHMnXSxcbiAgRGlyZWN0aXZlRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2FyZ3VtZW50cycsICdsb2NhdGlvbnMnXSxcbiAgU2NoZW1hRXh0ZW5zaW9uOiBbJ2RpcmVjdGl2ZXMnLCAnb3BlcmF0aW9uVHlwZXMnXSxcbiAgU2NhbGFyVHlwZUV4dGVuc2lvbjogWyduYW1lJywgJ2RpcmVjdGl2ZXMnXSxcbiAgT2JqZWN0VHlwZUV4dGVuc2lvbjogWyduYW1lJywgJ2ludGVyZmFjZXMnLCAnZGlyZWN0aXZlcycsICdmaWVsZHMnXSxcbiAgSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjogWyduYW1lJywgJ2ludGVyZmFjZXMnLCAnZGlyZWN0aXZlcycsICdmaWVsZHMnXSxcbiAgVW5pb25UeXBlRXh0ZW5zaW9uOiBbJ25hbWUnLCAnZGlyZWN0aXZlcycsICd0eXBlcyddLFxuICBFbnVtVHlwZUV4dGVuc2lvbjogWyduYW1lJywgJ2RpcmVjdGl2ZXMnLCAndmFsdWVzJ10sXG4gIElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjogWyduYW1lJywgJ2RpcmVjdGl2ZXMnLCAnZmllbGRzJ11cbn07XG5leHBvcnRzLlF1ZXJ5RG9jdW1lbnRLZXlzID0gUXVlcnlEb2N1bWVudEtleXM7XG52YXIgQlJFQUsgPSBPYmplY3QuZnJlZXplKHt9KTtcbi8qKlxuICogdmlzaXQoKSB3aWxsIHdhbGsgdGhyb3VnaCBhbiBBU1QgdXNpbmcgYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwsIGNhbGxpbmdcbiAqIHRoZSB2aXNpdG9yJ3MgZW50ZXIgZnVuY3Rpb24gYXQgZWFjaCBub2RlIGluIHRoZSB0cmF2ZXJzYWwsIGFuZCBjYWxsaW5nIHRoZVxuICogbGVhdmUgZnVuY3Rpb24gYWZ0ZXIgdmlzaXRpbmcgdGhhdCBub2RlIGFuZCBhbGwgb2YgaXRzIGNoaWxkIG5vZGVzLlxuICpcbiAqIEJ5IHJldHVybmluZyBkaWZmZXJlbnQgdmFsdWVzIGZyb20gdGhlIGVudGVyIGFuZCBsZWF2ZSBmdW5jdGlvbnMsIHRoZVxuICogYmVoYXZpb3Igb2YgdGhlIHZpc2l0b3IgY2FuIGJlIGFsdGVyZWQsIGluY2x1ZGluZyBza2lwcGluZyBvdmVyIGEgc3ViLXRyZWUgb2ZcbiAqIHRoZSBBU1QgKGJ5IHJldHVybmluZyBmYWxzZSksIGVkaXRpbmcgdGhlIEFTVCBieSByZXR1cm5pbmcgYSB2YWx1ZSBvciBudWxsXG4gKiB0byByZW1vdmUgdGhlIHZhbHVlLCBvciB0byBzdG9wIHRoZSB3aG9sZSB0cmF2ZXJzYWwgYnkgcmV0dXJuaW5nIEJSRUFLLlxuICpcbiAqIFdoZW4gdXNpbmcgdmlzaXQoKSB0byBlZGl0IGFuIEFTVCwgdGhlIG9yaWdpbmFsIEFTVCB3aWxsIG5vdCBiZSBtb2RpZmllZCwgYW5kXG4gKiBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBU1Qgd2l0aCB0aGUgY2hhbmdlcyBhcHBsaWVkIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSB0aGVcbiAqIHZpc2l0IGZ1bmN0aW9uLlxuICpcbiAqICAgICBjb25zdCBlZGl0ZWRBU1QgPSB2aXNpdChhc3QsIHtcbiAqICAgICAgIGVudGVyKG5vZGUsIGtleSwgcGFyZW50LCBwYXRoLCBhbmNlc3RvcnMpIHtcbiAqICAgICAgICAgLy8gQHJldHVyblxuICogICAgICAgICAvLyAgIHVuZGVmaW5lZDogbm8gYWN0aW9uXG4gKiAgICAgICAgIC8vICAgZmFsc2U6IHNraXAgdmlzaXRpbmcgdGhpcyBub2RlXG4gKiAgICAgICAgIC8vICAgdmlzaXRvci5CUkVBSzogc3RvcCB2aXNpdGluZyBhbHRvZ2V0aGVyXG4gKiAgICAgICAgIC8vICAgbnVsbDogZGVsZXRlIHRoaXMgbm9kZVxuICogICAgICAgICAvLyAgIGFueSB2YWx1ZTogcmVwbGFjZSB0aGlzIG5vZGUgd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWVcbiAqICAgICAgIH0sXG4gKiAgICAgICBsZWF2ZShub2RlLCBrZXksIHBhcmVudCwgcGF0aCwgYW5jZXN0b3JzKSB7XG4gKiAgICAgICAgIC8vIEByZXR1cm5cbiAqICAgICAgICAgLy8gICB1bmRlZmluZWQ6IG5vIGFjdGlvblxuICogICAgICAgICAvLyAgIGZhbHNlOiBubyBhY3Rpb25cbiAqICAgICAgICAgLy8gICB2aXNpdG9yLkJSRUFLOiBzdG9wIHZpc2l0aW5nIGFsdG9nZXRoZXJcbiAqICAgICAgICAgLy8gICBudWxsOiBkZWxldGUgdGhpcyBub2RlXG4gKiAgICAgICAgIC8vICAgYW55IHZhbHVlOiByZXBsYWNlIHRoaXMgbm9kZSB3aXRoIHRoZSByZXR1cm5lZCB2YWx1ZVxuICogICAgICAgfVxuICogICAgIH0pO1xuICpcbiAqIEFsdGVybmF0aXZlbHkgdG8gcHJvdmlkaW5nIGVudGVyKCkgYW5kIGxlYXZlKCkgZnVuY3Rpb25zLCBhIHZpc2l0b3IgY2FuXG4gKiBpbnN0ZWFkIHByb3ZpZGUgZnVuY3Rpb25zIG5hbWVkIHRoZSBzYW1lIGFzIHRoZSBraW5kcyBvZiBBU1Qgbm9kZXMsIG9yXG4gKiBlbnRlci9sZWF2ZSB2aXNpdG9ycyBhdCBhIG5hbWVkIGtleSwgbGVhZGluZyB0byBmb3VyIHBlcm11dGF0aW9ucyBvZiB0aGVcbiAqIHZpc2l0b3IgQVBJOlxuICpcbiAqIDEpIE5hbWVkIHZpc2l0b3JzIHRyaWdnZXJlZCB3aGVuIGVudGVyaW5nIGEgbm9kZSBvZiBhIHNwZWNpZmljIGtpbmQuXG4gKlxuICogICAgIHZpc2l0KGFzdCwge1xuICogICAgICAgS2luZChub2RlKSB7XG4gKiAgICAgICAgIC8vIGVudGVyIHRoZSBcIktpbmRcIiBub2RlXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAyKSBOYW1lZCB2aXNpdG9ycyB0aGF0IHRyaWdnZXIgdXBvbiBlbnRlcmluZyBhbmQgbGVhdmluZyBhIG5vZGUgb2ZcbiAqICAgIGEgc3BlY2lmaWMga2luZC5cbiAqXG4gKiAgICAgdmlzaXQoYXN0LCB7XG4gKiAgICAgICBLaW5kOiB7XG4gKiAgICAgICAgIGVudGVyKG5vZGUpIHtcbiAqICAgICAgICAgICAvLyBlbnRlciB0aGUgXCJLaW5kXCIgbm9kZVxuICogICAgICAgICB9XG4gKiAgICAgICAgIGxlYXZlKG5vZGUpIHtcbiAqICAgICAgICAgICAvLyBsZWF2ZSB0aGUgXCJLaW5kXCIgbm9kZVxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAzKSBHZW5lcmljIHZpc2l0b3JzIHRoYXQgdHJpZ2dlciB1cG9uIGVudGVyaW5nIGFuZCBsZWF2aW5nIGFueSBub2RlLlxuICpcbiAqICAgICB2aXNpdChhc3QsIHtcbiAqICAgICAgIGVudGVyKG5vZGUpIHtcbiAqICAgICAgICAgLy8gZW50ZXIgYW55IG5vZGVcbiAqICAgICAgIH0sXG4gKiAgICAgICBsZWF2ZShub2RlKSB7XG4gKiAgICAgICAgIC8vIGxlYXZlIGFueSBub2RlXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiA0KSBQYXJhbGxlbCB2aXNpdG9ycyBmb3IgZW50ZXJpbmcgYW5kIGxlYXZpbmcgbm9kZXMgb2YgYSBzcGVjaWZpYyBraW5kLlxuICpcbiAqICAgICB2aXNpdChhc3QsIHtcbiAqICAgICAgIGVudGVyOiB7XG4gKiAgICAgICAgIEtpbmQobm9kZSkge1xuICogICAgICAgICAgIC8vIGVudGVyIHRoZSBcIktpbmRcIiBub2RlXG4gKiAgICAgICAgIH1cbiAqICAgICAgIH0sXG4gKiAgICAgICBsZWF2ZToge1xuICogICAgICAgICBLaW5kKG5vZGUpIHtcbiAqICAgICAgICAgICAvLyBsZWF2ZSB0aGUgXCJLaW5kXCIgbm9kZVxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqL1xuXG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5cbmZ1bmN0aW9uIHZpc2l0KHJvb3QsIHZpc2l0b3IpIHtcbiAgdmFyIHZpc2l0b3JLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBRdWVyeURvY3VtZW50S2V5cztcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZi1pbml0ICovXG4gIHZhciBzdGFjayA9IHVuZGVmaW5lZDtcbiAgdmFyIGluQXJyYXkgPSBBcnJheS5pc0FycmF5KHJvb3QpO1xuICB2YXIga2V5cyA9IFtyb290XTtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBlZGl0cyA9IFtdO1xuICB2YXIgbm9kZSA9IHVuZGVmaW5lZDtcbiAgdmFyIGtleSA9IHVuZGVmaW5lZDtcbiAgdmFyIHBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdmFyIHBhdGggPSBbXTtcbiAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICB2YXIgbmV3Um9vdCA9IHJvb3Q7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYtaW5pdCAqL1xuXG4gIGRvIHtcbiAgICBpbmRleCsrO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpbmRleCA9PT0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGlzRWRpdGVkID0gaXNMZWF2aW5nICYmIGVkaXRzLmxlbmd0aCAhPT0gMDtcblxuICAgIGlmIChpc0xlYXZpbmcpIHtcbiAgICAgIGtleSA9IGFuY2VzdG9ycy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICBub2RlID0gcGFyZW50O1xuICAgICAgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpO1xuXG4gICAgICBpZiAoaXNFZGl0ZWQpIHtcbiAgICAgICAgaWYgKGluQXJyYXkpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5zbGljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjbG9uZSA9IHt9O1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMCwgX09iamVjdCRrZXlzMiA9IE9iamVjdC5rZXlzKG5vZGUpOyBfaTIgPCBfT2JqZWN0JGtleXMyLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgICAgIHZhciBrID0gX09iamVjdCRrZXlzMltfaTJdO1xuICAgICAgICAgICAgY2xvbmVba10gPSBub2RlW2tdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUgPSBjbG9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlZGl0T2Zmc2V0ID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZWRpdHMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgdmFyIGVkaXRLZXkgPSBlZGl0c1tpaV1bMF07XG4gICAgICAgICAgdmFyIGVkaXRWYWx1ZSA9IGVkaXRzW2lpXVsxXTtcblxuICAgICAgICAgIGlmIChpbkFycmF5KSB7XG4gICAgICAgICAgICBlZGl0S2V5IC09IGVkaXRPZmZzZXQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGluQXJyYXkgJiYgZWRpdFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBub2RlLnNwbGljZShlZGl0S2V5LCAxKTtcbiAgICAgICAgICAgIGVkaXRPZmZzZXQrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZVtlZGl0S2V5XSA9IGVkaXRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5kZXggPSBzdGFjay5pbmRleDtcbiAgICAgIGtleXMgPSBzdGFjay5rZXlzO1xuICAgICAgZWRpdHMgPSBzdGFjay5lZGl0cztcbiAgICAgIGluQXJyYXkgPSBzdGFjay5pbkFycmF5O1xuICAgICAgc3RhY2sgPSBzdGFjay5wcmV2O1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBwYXJlbnQgPyBpbkFycmF5ID8gaW5kZXggOiBrZXlzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIG5vZGUgPSBwYXJlbnQgPyBwYXJlbnRba2V5XSA6IG5ld1Jvb3Q7XG5cbiAgICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXRoLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gdm9pZCAwO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICBpZiAoISgwLCBfYXN0LmlzTm9kZSkobm9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBU1QgTm9kZTogXCIuY29uY2F0KCgwLCBfaW5zcGVjdC5kZWZhdWx0KShub2RlKSwgXCIuXCIpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZpc2l0Rm4gPSBnZXRWaXNpdEZuKHZpc2l0b3IsIG5vZGUua2luZCwgaXNMZWF2aW5nKTtcblxuICAgICAgaWYgKHZpc2l0Rm4pIHtcbiAgICAgICAgcmVzdWx0ID0gdmlzaXRGbi5jYWxsKHZpc2l0b3IsIG5vZGUsIGtleSwgcGFyZW50LCBwYXRoLCBhbmNlc3RvcnMpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmICghaXNMZWF2aW5nKSB7XG4gICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZWRpdHMucHVzaChba2V5LCByZXN1bHRdKTtcblxuICAgICAgICAgIGlmICghaXNMZWF2aW5nKSB7XG4gICAgICAgICAgICBpZiAoKDAsIF9hc3QuaXNOb2RlKShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgaXNFZGl0ZWQpIHtcbiAgICAgIGVkaXRzLnB1c2goW2tleSwgbm9kZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0xlYXZpbmcpIHtcbiAgICAgIHBhdGgucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfdmlzaXRvcktleXMkbm9kZSRraW47XG5cbiAgICAgIHN0YWNrID0ge1xuICAgICAgICBpbkFycmF5OiBpbkFycmF5LFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGtleXM6IGtleXMsXG4gICAgICAgIGVkaXRzOiBlZGl0cyxcbiAgICAgICAgcHJldjogc3RhY2tcbiAgICAgIH07XG4gICAgICBpbkFycmF5ID0gQXJyYXkuaXNBcnJheShub2RlKTtcbiAgICAgIGtleXMgPSBpbkFycmF5ID8gbm9kZSA6IChfdmlzaXRvcktleXMkbm9kZSRraW4gPSB2aXNpdG9yS2V5c1tub2RlLmtpbmRdKSAhPT0gbnVsbCAmJiBfdmlzaXRvcktleXMkbm9kZSRraW4gIT09IHZvaWQgMCA/IF92aXNpdG9yS2V5cyRub2RlJGtpbiA6IFtdO1xuICAgICAgaW5kZXggPSAtMTtcbiAgICAgIGVkaXRzID0gW107XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2gocGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gbm9kZTtcbiAgICB9XG4gIH0gd2hpbGUgKHN0YWNrICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChlZGl0cy5sZW5ndGggIT09IDApIHtcbiAgICBuZXdSb290ID0gZWRpdHNbZWRpdHMubGVuZ3RoIC0gMV1bMV07XG4gIH1cblxuICByZXR1cm4gbmV3Um9vdDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2aXNpdG9yIGluc3RhbmNlIHdoaWNoIGRlbGVnYXRlcyB0byBtYW55IHZpc2l0b3JzIHRvIHJ1biBpblxuICogcGFyYWxsZWwuIEVhY2ggdmlzaXRvciB3aWxsIGJlIHZpc2l0ZWQgZm9yIGVhY2ggbm9kZSBiZWZvcmUgbW92aW5nIG9uLlxuICpcbiAqIElmIGEgcHJpb3IgdmlzaXRvciBlZGl0cyBhIG5vZGUsIG5vIGZvbGxvd2luZyB2aXNpdG9ycyB3aWxsIHNlZSB0aGF0IG5vZGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2aXNpdEluUGFyYWxsZWwodmlzaXRvcnMpIHtcbiAgdmFyIHNraXBwaW5nID0gbmV3IEFycmF5KHZpc2l0b3JzLmxlbmd0aCk7XG4gIHJldHVybiB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKG5vZGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNraXBwaW5nW2ldID09IG51bGwpIHtcbiAgICAgICAgICB2YXIgZm4gPSBnZXRWaXNpdEZuKHZpc2l0b3JzW2ldLCBub2RlLmtpbmQsXG4gICAgICAgICAgLyogaXNMZWF2aW5nICovXG4gICAgICAgICAgZmFsc2UpO1xuXG4gICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkodmlzaXRvcnNbaV0sIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHNraXBwaW5nW2ldID0gbm9kZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICBza2lwcGluZ1tpXSA9IEJSRUFLO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGVhdmU6IGZ1bmN0aW9uIGxlYXZlKG5vZGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNraXBwaW5nW2ldID09IG51bGwpIHtcbiAgICAgICAgICB2YXIgZm4gPSBnZXRWaXNpdEZuKHZpc2l0b3JzW2ldLCBub2RlLmtpbmQsXG4gICAgICAgICAgLyogaXNMZWF2aW5nICovXG4gICAgICAgICAgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseSh2aXNpdG9yc1tpXSwgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgc2tpcHBpbmdbaV0gPSBCUkVBSztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChza2lwcGluZ1tpXSA9PT0gbm9kZSkge1xuICAgICAgICAgIHNraXBwaW5nW2ldID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogR2l2ZW4gYSB2aXNpdG9yIGluc3RhbmNlLCBpZiBpdCBpcyBsZWF2aW5nIG9yIG5vdCwgYW5kIGEgbm9kZSBraW5kLCByZXR1cm5cbiAqIHRoZSBmdW5jdGlvbiB0aGUgdmlzaXRvciBydW50aW1lIHNob3VsZCBjYWxsLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmlzaXRGbih2aXNpdG9yLCBraW5kLCBpc0xlYXZpbmcpIHtcbiAgdmFyIGtpbmRWaXNpdG9yID0gdmlzaXRvcltraW5kXTtcblxuICBpZiAoa2luZFZpc2l0b3IpIHtcbiAgICBpZiAoIWlzTGVhdmluZyAmJiB0eXBlb2Yga2luZFZpc2l0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIHsgS2luZCgpIHt9IH1cbiAgICAgIHJldHVybiBraW5kVmlzaXRvcjtcbiAgICB9XG5cbiAgICB2YXIga2luZFNwZWNpZmljVmlzaXRvciA9IGlzTGVhdmluZyA/IGtpbmRWaXNpdG9yLmxlYXZlIDoga2luZFZpc2l0b3IuZW50ZXI7XG5cbiAgICBpZiAodHlwZW9mIGtpbmRTcGVjaWZpY1Zpc2l0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIHsgS2luZDogeyBlbnRlcigpIHt9LCBsZWF2ZSgpIHt9IH0gfVxuICAgICAgcmV0dXJuIGtpbmRTcGVjaWZpY1Zpc2l0b3I7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzcGVjaWZpY1Zpc2l0b3IgPSBpc0xlYXZpbmcgPyB2aXNpdG9yLmxlYXZlIDogdmlzaXRvci5lbnRlcjtcblxuICAgIGlmIChzcGVjaWZpY1Zpc2l0b3IpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3BlY2lmaWNWaXNpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIHsgZW50ZXIoKSB7fSwgbGVhdmUoKSB7fSB9XG4gICAgICAgIHJldHVybiBzcGVjaWZpY1Zpc2l0b3I7XG4gICAgICB9XG5cbiAgICAgIHZhciBzcGVjaWZpY0tpbmRWaXNpdG9yID0gc3BlY2lmaWNWaXNpdG9yW2tpbmRdO1xuXG4gICAgICBpZiAodHlwZW9mIHNwZWNpZmljS2luZFZpc2l0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8geyBlbnRlcjogeyBLaW5kKCkge30gfSwgbGVhdmU6IHsgS2luZCgpIHt9IH0gfVxuICAgICAgICByZXR1cm4gc3BlY2lmaWNLaW5kVmlzaXRvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEltcG9ydHNcbnZhciBfX19IVE1MX0xPQURFUl9HRVRfU09VUkNFX0ZST01fSU1QT1JUX19fID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9odG1sLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCIpO1xudmFyIF9fX0hUTUxfTE9BREVSX0lNUE9SVF8wX19fID0gcmVxdWlyZShcIi4vbG9hZGVyLnN2Z1wiKTtcbi8vIE1vZHVsZVxudmFyIF9fX0hUTUxfTE9BREVSX1JFUExBQ0VNRU5UXzBfX18gPSBfX19IVE1MX0xPQURFUl9HRVRfU09VUkNFX0ZST01fSU1QT1JUX19fKF9fX0hUTUxfTE9BREVSX0lNUE9SVF8wX19fKTtcbnZhciBjb2RlID0gXCI8ZGl2IGlkPVxcXCJrb2FsYWZpLW1vZGFsXFxcIj4gPGRpdiBpZD1cXFwia29hbGFmaS1tb2RhbC1jb250ZW50XFxcIj4gPGRpdiBpZD1cXFwia29hbGFmaS1sb2FkZXJcXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8wX19fICsgXCJcXFwiLz4gPC9kaXY+IDxkaXYgaWQ9XFxcImtvYWxhZmktaWZyYW1lLXdyYXBwZXJcXFwiPiA8aWZyYW1lIGlkPVxcXCJrb2FsYWZpLWlmcmFtZVxcXCIgZnJhbWVib3JkZXI9XFxcIjBcXFwiIHNyYz1cXFwiJHtrZmlVcmx9JHtxdWVyeVBhcmFtc31cXFwiPjwvaWZyYW1lPiA8L2Rpdj4gPC9kaXY+IDwvZGl2PiBcIjtcbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gY29kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGUsIG5vLXBhcmFtLXJlYXNzaWduXG5cblxuICB1cmwgPSB1cmwgJiYgdXJsLl9fZXNNb2R1bGUgPyB1cmwuZGVmYXVsdCA6IHVybDtcblxuICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tYXliZU5lZWRRdW90ZXMgJiYgL1tcXHRcXG5cXGZcXHIgXCInPTw+YF0vLnRlc3QodXJsKSkge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLCBcIlxcXCJcIik7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiLCJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzFdLnVzZVsxXSEuL21vZGFsLmNzc1wiKTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlc3VsdC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgIiwiXG4gICAgICAgIHZhciByZXN1bHQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvaHRtbC1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzFdIS4vbW9kYWwtc2hvcnQtZm9ybS5odG1sXCIpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gcmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAiLCJpbXBvcnQgeyBncWwsIEdyYXBoUUxDbGllbnQgfSBmcm9tICdncmFwaHFsLXJlcXVlc3QnO1xuaW1wb3J0IHsgb3JkZXIsIG9yZGVyVmFyaWFibGVzLCBvcmRlcl9vcmRlciB9IGZyb20gJy4uL2dlbmVyYXRlZC9vcmRlcic7XG5pbXBvcnQgeyBOZXdPcmRlciB9IGZyb20gJy4uL2dlbmVyYXRlZC9nbG9iYWxUeXBlcyc7XG5cbmludGVyZmFjZSBpZWRnZVNlcnZpY2Uge1xuICBmZXRjaE9yZGVyKG9yZGVySWQ6IHN0cmluZyk6IFByb21pc2U8b3JkZXI+O1xuICBjcmVhdGVPcmRlcihwdWJsaWNEZWFsZXJJZDogc3RyaW5nLCBvcmRlcklucHV0OiBOZXdPcmRlcik6IFByb21pc2U8b3JkZXI+O1xufVxuXG5sZXQgZ3JhcGhRTENsaWVudDogR3JhcGhRTENsaWVudDtcblxuY29uc3QgY3JlYXRlT3JkZXJNdXRhdGlvbiA9IGdxbGBcbiAgbXV0YXRpb24gY3JlYXRlT3JkZXIoJG9yZGVySW5wdXQ6IE5ld09yZGVyISkge1xuICAgIGNyZWF0ZU9yZGVyKGlucHV0OiAkb3JkZXJJbnB1dCkge1xuICAgICAgb3JkZXJJZFxuICAgICAgb3JkZXJFcnJvcnMge1xuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICAgIC4uLiBvbiBGYXRhbEVycm9yIHtcbiAgICAgICAgICBtZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgLi4uIG9uIEJhZFJlcXVlc3Qge1xuICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgZmV0Y2hPcmRlclF1ZXJ5ID0gZ3FsYFxuICBxdWVyeSBvcmRlcigkaWQ6IElEISkge1xuICAgIG9yZGVyKGlkOiAkaWQpIHtcbiAgICAgIG1ldGFkYXRhIHtcbiAgICAgICAgZm9ybVR5cGVcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IGVkZ2VTZXJ2aWNlOiBpZWRnZVNlcnZpY2UgPSB7XG4gIGZldGNoT3JkZXI6IGFzeW5jIChpZDogc3RyaW5nKTogUHJvbWlzZTxvcmRlcj4gPT4ge1xuICAgIGlmICghZ3JhcGhRTENsaWVudCkge1xuICAgICAgZ3JhcGhRTENsaWVudCA9IG5ldyBHcmFwaFFMQ2xpZW50KHByb2Nlc3MuZW52LkdSQVBIX1FMX0VORFBPSU5UKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhRTENsaWVudC5yZXF1ZXN0KGZldGNoT3JkZXJRdWVyeSwgeyBpZCB9KTtcbiAgfSxcbiAgY3JlYXRlT3JkZXI6IGFzeW5jIChwdWJsaWNEZWFsZXJJZDogc3RyaW5nLCBvcmRlcklucHV0OiBOZXdPcmRlcik6IFByb21pc2U8b3JkZXI+ID0+IHtcbiAgICBpZiAoIWdyYXBoUUxDbGllbnQpIHtcbiAgICAgIGdyYXBoUUxDbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudChwcm9jZXNzLmVudi5HUkFQSF9RTF9FTkRQT0lOVCk7XG4gICAgfVxuICAgIGdyYXBoUUxDbGllbnQuc2V0SGVhZGVyKCdwdWJsaWMtZGVhbGVyLWlkJywgcHVibGljRGVhbGVySWQpO1xuICAgIHJldHVybiBncmFwaFFMQ2xpZW50LnJlcXVlc3QoY3JlYXRlT3JkZXJNdXRhdGlvbiwgeyBvcmRlcklucHV0IH0pO1xuICB9LFxufTtcblxuZXhwb3J0IHsgZWRnZVNlcnZpY2UgfTtcbiIsImltcG9ydCB7IEZvcm1UeXBlcyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9nbG9iYWxUeXBlcyc7XG5pbXBvcnQgeyBlZGdlU2VydmljZSB9IGZyb20gJy4uLy4uL2tvYWxhZmlTZGsnO1xuXG4vLyBIYWQgdG8gdXNlIHJlcXVpcmUgdG8gZ2V0IHRoZXNlIGxvYWRlZFxuLy8gdXNpbmcgc3RyaW5nIGxvYWRlcnMgc28gdGhlc2Ugd2lsbCBiZSBzdHJpbmdzXG5jb25zdCBtb2RhbFNob3J0SHRtbDogc3RyaW5nID0gcmVxdWlyZSgnLi9tb2RhbC1zaG9ydC1mb3JtLmh0bWwnKTtcbmNvbnN0IHNoYXJlZENzczogc3RyaW5nID0gcmVxdWlyZSgnLi9tb2RhbC5jc3MnKTtcblxudHlwZSBvcGVuTW9kYWxBcmdzID0ge1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIHBkaTogc3RyaW5nO1xuICB1c2VTdGFnZTogYm9vbGVhbjtcbiAgbGF1bmNoUGFnZTogbGF1bmNoUGFnZVR5cGVzO1xufTtcblxuZXhwb3J0IGVudW0gbGF1bmNoUGFnZVR5cGVzIHtcbiAgY2hlY2tvdXQgPSAnY2hlY2tvdXQnLFxuICBmaW5hbmNpbmcgPSAnZmluYW5jaW5nJyxcbiAgcHJvZHVjdCA9ICdwcm9kdWN0Jyxcbn1cblxuY29uc3QgaW5zZXJ0TW9kYWxDc3MgPSAoY3NzU3R5bGVUYWdJZDogc3RyaW5nLCBjc3M6IHN0cmluZykgPT4ge1xuICBjb25zdCBjc3NTdHlsZVRhZ0V4aXN0cyA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY3NzU3R5bGVUYWdJZCk7XG4gIC8vIG9ubHkgYWRkIHN0eWxlIHNjcmlwdCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gIGlmICghY3NzU3R5bGVUYWdFeGlzdHMpIHtcbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUuaWQgPSBjc3NTdHlsZVRhZ0lkO1xuICAgIHN0eWxlLmlubmVySFRNTCA9IGNzcztcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxufTtcblxuY29uc3QgbW9kaWZ5S2ZpSFRNTCA9IChodG1sOiBzdHJpbmcsIGVjb21tVXJsOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnRpYWw8b3Blbk1vZGFsQXJncz4pID0+IHtcbiAgbGV0IHF1ZXJ5UGFyYW1zOiBzdHJpbmc7XG4gIGxldCBsYXVuY2hQYWdlVHlwZTogbGF1bmNoUGFnZVR5cGVzO1xuXG4gIGxhdW5jaFBhZ2VUeXBlID0gbGF1bmNoUGFnZVR5cGVzLmNoZWNrb3V0O1xuICBpZiAob3B0aW9ucy5sYXVuY2hQYWdlKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxhdW5jaFBhZ2UpIHtcbiAgICAgIGNhc2UgJ3Byb2R1Y3QnOlxuICAgICAgICBsYXVuY2hQYWdlVHlwZSA9IGxhdW5jaFBhZ2VUeXBlcy5wcm9kdWN0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpbmFuY2luZyc6XG4gICAgICAgIGxhdW5jaFBhZ2VUeXBlID0gbGF1bmNoUGFnZVR5cGVzLmZpbmFuY2luZztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvL2RlZmF1bHQgdG8gaGlnaGVzdCBwZXJtIHBhZ2VcbiAgICAgICAgbGF1bmNoUGFnZVR5cGUgPSBsYXVuY2hQYWdlVHlwZXMuY2hlY2tvdXQ7XG4gICAgfVxuICB9XG5cbiAgcXVlcnlQYXJhbXMgPSBgP2A7XG5cbiAgaWYgKG9wdGlvbnMub3JkZXJJZCkge1xuICAgIHF1ZXJ5UGFyYW1zICs9IGBvcmRlcklkPSR7b3B0aW9ucy5vcmRlcklkfWA7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBvcGVuTW9kYWwoKTogaW52YWxpZCBhcmdzYCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMucGRpKSB7XG4gICAgcXVlcnlQYXJhbXMgKz0gYCZwZGk9JHtvcHRpb25zLnBkaX1gO1xuICB9XG4gIGlmIChvcHRpb25zLmxhdW5jaFBhZ2UpIHtcbiAgICBxdWVyeVBhcmFtcyArPSBgJmxhdW5jaFBhZ2U9JHtsYXVuY2hQYWdlVHlwZX1gO1xuICB9XG4gIGlmIChvcHRpb25zLnVzZVN0YWdlKSB7XG4gICAgcXVlcnlQYXJhbXMgKz0gYCZzdGFnZWA7XG4gIH1cblxuICByZXR1cm4gaHRtbC5yZXBsYWNlKCcke2tmaVVybH0nLCBlY29tbVVybCkucmVwbGFjZSgnJHtxdWVyeVBhcmFtc30nLCBxdWVyeVBhcmFtcyk7XG59O1xuXG5jb25zdCBpbnNlcnRNb2RhbEh0bWwgPSAobW9kaWZpZWRIdG1sOiBzdHJpbmcsIGVtcHR5RGl2SWQ6IHN0cmluZywgbW9kYWxDb250ZW50SWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBlbXB0eURpdkV4aXN0cyA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZW1wdHlEaXZJZCk7XG4gIGlmICghZW1wdHlEaXZFeGlzdHMpIHtcbiAgICBjb25zdCBlbXB0eURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVtcHR5RGl2LmlkID0gZW1wdHlEaXZJZDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVtcHR5RGl2KTtcbiAgfVxuXG4gIC8vIFByZXZlbnRzIHNjcm9sbGluZyBiZWhpbmQgdGhlIG1vZGFsXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZW1wdHlEaXZJZCkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIG1vZGlmaWVkSHRtbCk7XG5cbiAgLy8gRW5hYmxlcyB0aGUgYW5pbWF0aW9uIG9mIHRoZSBtb2RhbCBhcHBlYXJpbmcuIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlXG4gIC8vIG1vZGFsIGJhY2tncm91bmQgdG8gYXBwZWFyIGJyaWVmbHkgc28gdGhlIGFuaW1hdGlvbiBvZiB0aGUgbW9kYWwgd2lsbCB3b3JrXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGNvbnNvbGUubG9nKG1vZGFsQ29udGVudElkLCAnbW9kYWxjb250ZW50aWQnKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb2RhbENvbnRlbnRJZCkuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9LCA0KTtcbn07XG5cbmNvbnN0IGhhbmRsZUNsb3NlTW9kYWxTdHlsaW5nID0gKG1vZGFsRWxlbWVudDogSFRNTEVsZW1lbnQsIG1vZGFsQ29udGVudElkOiBzdHJpbmcpID0+IHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kYWxDb250ZW50SWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgLy8gRW5hYmxlcyBhbmltYXRpb24gdG8gdGFrZSBlZmZlY3RcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgbW9kYWxFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH0sIDIwMCk7XG4gIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG5cbiAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2Nsb3NlTW9kYWwnLCB7IGRldGFpbDogeyBpc01vZGFsQ2xvc2VkOiB0cnVlIH0gfSk7XG4gIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn07XG5cbi8vIGtlZXBpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IG9wZW5Nb2RhbCA9IGFzeW5jIChvcHRpb25zOiBvcGVuTW9kYWxBcmdzIHwgc3RyaW5nKSA9PiB7XG4gIGxldCBvcmRlcklkOiBzdHJpbmc7XG4gIGxldCBwdWJsaWNEZWFsZXJJZDogc3RyaW5nO1xuICBsZXQgdXNlU3RhZ2U6IGJvb2xlYW47XG4gIGxldCBsYXVuY2hQYWdlOiBsYXVuY2hQYWdlVHlwZXM7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICh7IG9yZGVySWQsIHBkaTogcHVibGljRGVhbGVySWQsIHVzZVN0YWdlLCBsYXVuY2hQYWdlOiBsYXVuY2hQYWdlIH0gPSBvcHRpb25zKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyB0aGlzIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHRvIGVuc3VyZSBCb1QgcGFzc2luZyBvcmRlcklkIGFzIGEgc3RyaW5nIHN0aWxsIHdvcmtzLlxuICAgIG9yZGVySWQgPSBvcHRpb25zO1xuICB9XG5cbiAgaWYgKCFvcmRlcklkICYmICFwdWJsaWNEZWFsZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignb3Blbk1vZGFsKCk6IGFyZ3VtZW50cyBub3QgcGFzc2VkIGluIGNvcnJlY3RseS4nKTtcbiAgfVxuXG4gIGNvbnN0IEVNUFRZX0RJVl9JRCA9ICdrb2FsYWZpLWRpdic7XG4gIGNvbnN0IENTU19TVFlMRV9UQUdfSUQgPSAna29hbGFmaS1jc3MnO1xuICBjb25zdCBFQ09NTV9VUkwgPSBwcm9jZXNzLmVudi5FQ09NTV9VUkw7XG4gIGNvbnN0IE1PREFMX0lEID0gYGtvYWxhZmktbW9kYWxgO1xuICBjb25zdCBNT0RBTF9DT05URU5UX0lEID0gYGtvYWxhZmktbW9kYWwtY29udGVudGA7XG4gIGNvbnN0IENMT1NFX0JVVFRPTl9JRCA9IGBrb2FsYWZpLW1vZGFsLWNsb3NlLWJ1dHRvbmA7XG4gIGNvbnN0IElGUkFNRV9JRCA9IGBrb2FsYWZpLWlmcmFtZWA7XG5cbiAgY29uc3QgbW9kaWZpZWRIdG1sID0gbW9kaWZ5S2ZpSFRNTChtb2RhbFNob3J0SHRtbCwgRUNPTU1fVVJMLCB7XG4gICAgb3JkZXJJZCxcbiAgICBwZGk6IHB1YmxpY0RlYWxlcklkLFxuICAgIHVzZVN0YWdlLFxuICAgIGxhdW5jaFBhZ2U6IGxhdW5jaFBhZ2UsXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgaW5zZXJ0TW9kYWxDc3MoQ1NTX1NUWUxFX1RBR19JRCwgc2hhcmVkQ3NzKTtcbiAgICBpbnNlcnRNb2RhbEh0bWwobW9kaWZpZWRIdG1sLCBFTVBUWV9ESVZfSUQsIE1PREFMX0NPTlRFTlRfSUQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdJbnNlcnRpbmcgQ1NTL0hUTUw6ICcsIGVycik7XG4gIH1cblxuICBjb25zdCB3Y01vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTU9EQUxfSUQpO1xuICBjb25zdCBjbG9zZU1vZGFsQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQ0xPU0VfQlVUVE9OX0lEKTtcblxuICAvLyBQbGFjZWhvbGRlciBsZXRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZS9yZWplY3QgcmV0dXJuZWQgUHJvbWlzZVxuICBsZXQgcHJvbWlzZVJlc29sdmU7XG4gIGxldCBwcm9taXNlUmVqZWN0O1xuXG4gIGRvY3VtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09IGNsb3NlTW9kYWxCdXR0b24pIHtcbiAgICAgIC8vIE5vdGlmaWVzIG91ciBhcHAgdGhhdCBtb2RhbCBpcyBjbG9zaW5nXG4gICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRlJBTUVfSUQpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xuICAgICAgLy8gQXBwIGlzIGV4cGVjdGluZyB0aGlzIGV4YWN0IG1lc3NhZ2UgdXBvbiBtb2RhbCBjbG9zdXJlXG4gICAgICBpZnJhbWU/LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKCdDbG9zZWQgbW9kYWwgd2l0aCBYIGJ1dHRvbicsIEVDT01NX1VSTCk7XG5cbiAgICAgIGhhbmRsZUNsb3NlTW9kYWxTdHlsaW5nKHdjTW9kYWwsIE1PREFMX0NPTlRFTlRfSUQpO1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBvcmRlcklkOiBvcmRlcklkLFxuICAgICAgICByZWFzb246ICdjbG9zZWQgbW9kYWwgd2l0aCBYIGJ1dHRvbicsXG4gICAgICB9O1xuICAgICAgcHJvbWlzZVJlamVjdChwYXlsb2FkKTtcbiAgICB9XG4gIH07XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ21lc3NhZ2UnLFxuICAgIGZ1bmN0aW9uIChldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgICAvLyBQcmV2ZW50cyByZWFkaW5nIGV2ZW50cyBmcm9tIHVuaW50ZW5kZWQgc2l0ZXMuXG4gICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSBFQ09NTV9VUkwpIHJldHVybjtcblxuICAgICAgY29uc3QgZXZlbnREYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgICAgaWYgKGV2ZW50RGF0YS5zdG9wU3Bpbm5lcikge1xuICAgICAgICBjb25zdCBzcGlubmVyRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tvYWxhZmktbG9hZGVyJyk7XG4gICAgICAgIGlmIChzcGlubmVyRGl2KSB7XG4gICAgICAgICAgc3Bpbm5lckRpdi5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnREYXRhLndjZlN1Y2Nlc3MpIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUoZXZlbnREYXRhLnBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudERhdGEud2NmU3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcHJvbWlzZVJlamVjdChldmVudERhdGEucGF5bG9hZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudERhdGEuY2xvc2VNb2RhbCkge1xuICAgICAgICBoYW5kbGVDbG9zZU1vZGFsU3R5bGluZyh3Y01vZGFsLCBNT0RBTF9DT05URU5UX0lEKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBGb3IgY29kZSByZWFkYWJpbGl0eTogZXZlbnRMaXN0ZW5lciBhbmQgb25jbGljayB3ZXJlIG1vdmVkIG91dHNpZGUgb2YgcmV0dXJuXG4gICAgLy8gc3RhdGVtZW50LCBzaW5jZSB0aGV5IGFyZSBhZGRlZCB0byB0aGUgd2luZG93L2RvY3VtZW50IGFuZCBhcmVuJ3Qgc2NvcGVkIHRvIHByb21pc2VcbiAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBvcGVuTW9kYWwsIG1vZGlmeUtmaUhUTUwgfTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oNDQ5KTtcbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyY1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHNjcmlwdFVybCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXS5zcmNcblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7Il0sInNvdXJjZVJvb3QiOiIifQ==