1!function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var t="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||void 0!==e.g&&e.g||{},r="URLSearchParams"in t,n="Symbol"in t&&"iterator"in Symbol,o="FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(e){return!1}}(),i="FormData"in t,a="ArrayBuffer"in t;if(a)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],l=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)||""===e)throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function u(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 n&&(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){if(2!=e.length)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+e.length);this.append(e[0],e[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function h(e){if(!e._noBody)return e.bodyUsed?Promise.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function m(e){return new Promise(function(t,r){e.onload=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function y(e){var t=new FileReader,r=m(t);return t.readAsArrayBuffer(e),r}function p(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function v(){return this.bodyUsed=!1,this._initBody=function(e){var t;this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:o&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:i&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:r&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&o&&(t=e)&&DataView.prototype.isPrototypeOf(t)?(this._bodyArrayBuffer=p(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=p(e):this._bodyText=e=Object.prototype.toString.call(e):(this._noBody=!0,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):r&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},o&&(this.blob=function(){var e=h(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(){if(this._bodyArrayBuffer)return h(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer));if(o)return this.blob().then(y);throw new Error("could not read as ArrayBuffer")},this.text=function(){var e,t,r,n,o,i=h(this);if(i)return i;if(this._bodyBlob)return e=this._bodyBlob,r=m(t=new FileReader),o=(n=/charset=([A-Za-z0-9_-]+)/.exec(e.type))?n[1]:"utf-8",t.readAsText(e,o),r;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),r=new Array(t.length),n=0;n<t.length;n++)r[n]=String.fromCharCode(t[n]);return r.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},i&&(this.formData=function(){return this.text().then(w)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(e,t){e=c(e),t=u(t);var r=this.map[e];this.map[e]=r?r+", "+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)]=u(t)},d.prototype.forEach=function(e,t){for(var r in this.map)this.map.hasOwnProperty(r)&&e.call(t,this.map[r],r,this)},d.prototype.keys=function(){var e=[];return this.forEach(function(t,r){e.push(r)}),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,r){e.push([r,t])}),f(e)},n&&(d.prototype[Symbol.iterator]=d.prototype.entries);var b=["CONNECT","DELETE","GET","HEAD","OPTIONS","PATCH","POST","PUT","TRACE"];function g(e,r){if(!(this instanceof g))throw new TypeError('Please use the "new" operator, this DOM object c
1onstructor cannot be called as a function.');var n,o,i=(r=r||{}).body;if(e instanceof g){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,r.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=r.credentials||this.credentials||"same-origin",!r.headers&&this.headers||(this.headers=new d(r.headers)),this.method=(o=(n=r.method||this.method||"GET").toUpperCase(),b.indexOf(o)>-1?o:n),this.mode=r.mode||this.mode||null,this.signal=r.signal||this.signal||function(){if("AbortController"in t)return(new AbortController).signal}(),this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(i),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==r.cache&&"no-cache"!==r.cache)){var a=/([?&])_=[^&]*/;a.test(this.url)?this.url=this.url.replace(a,"$1_="+(new Date).getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}function w(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var r=e.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");t.append(decodeURIComponent(n),decodeURIComponent(o))}}),t}function k(e,t){if(!(this instanceof k))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.status<200||this.status>599)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=this.status>=200&&this.status<300,this.statusText=void 0===t.statusText?"":""+t.statusText,this.headers=new d(t.headers),this.url=t.url||"",this._initBody(e)}g.prototype.clone=function(){return new g(this,{body:this._bodyInit})},v.call(g.prototype),v.call(k.prototype),k.prototype.clone=function(){return new k(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},k.error=function(){var e=new k(null,{status:200,statusText:""});return e.ok=!1,e.status=0,e.type="error",e};var A=[301,302,303,307,308];k.redirect=function(e,t){if(-1===A.indexOf(t))throw new RangeError("Invalid status code");return new k(null,{status:t,headers:{location:e}})};var T=t.DOMException;try{new T}catch(e){(T=function(e,t){this.message=e,this.name=t;var r=Error(e);this.stack=r.stack}).prototype=Object.create(Error.prototype),T.prototype.constructor=T}function _(e,r){return new Promise(function(n,i){var s=new g(e,r);if(s.signal&&s.signal.aborted)return i(new T("Aborted","AbortError"));var l=new XMLHttpRequest;function f(){l.abort()}if(l.onload=function(){var e,t,r={statusText:l.statusText,headers:(e=l.getAllResponseHeaders()||"",t=new d,e.replace(/\r?\n[\t ]+/g," ").split("\r").map(function(e){return 0===e.indexOf("\n")?e.substr(1,e.length):e}).forEach(function(e){var r=e.split(":"),n=r.shift().trim();if(n){var o=r.join(":").trim();try{t.append(n,o)}catch(e){console.warn("Response "+e.message)}}}),t)};0===s.url.indexOf("file://")&&(l.status<200||l.status>599)?r.status=200:r.status=l.status,r.url="responseURL"in l?l.responseURL:r.headers.get("X-Request-URL");var o="response"in l?l.response:l.responseText;setTimeout(function(){n(new k(o,r))},0)},l.onerror=function(){setTimeout(function(){i(new TypeError("Network request failed"))},0)},l.ontimeout=function(){setTimeout(function(){i(new TypeError("Network request timed out"))},0)},l.onabort=function(){setTimeout(function(){i(new T("Aborted","AbortError"))},0)}
1,l.open(s.method,function(e){try{return""===e&&t.location.href?t.location.href:e}catch(t){return e}}(s.url),!0),"include"===s.credentials?l.withCredentials=!0:"omit"===s.credentials&&(l.withCredentials=!1),"responseType"in l&&(o?l.responseType="blob":a&&(l.responseType="arraybuffer")),r&&"object"==typeof r.headers&&!(r.headers instanceof d||t.Headers&&r.headers instanceof t.Headers)){var h=[];Object.getOwnPropertyNames(r.headers).forEach(function(e){h.push(c(e)),l.setRequestHeader(e,u(r.headers[e]))}),s.headers.forEach(function(e,t){-1===h.indexOf(t)&&l.setRequestHeader(t,e)})}else s.headers.forEach(function(e,t){l.setRequestHeader(t,e)});s.signal&&(s.signal.addEventListener("abort",f),l.onreadystatechange=function(){4===l.readyState&&s.signal.removeEventListener("abort",f)}),l.send(void 0===s._bodyInit?null:s._bodyInit)})}_.polyfill=!0,t.fetch||(t.fetch=_,t.Headers=d,t.Request=g,t.Response=k)}(),function(){var e=["year","make","model","submodel","engine","transmission","body"],t={ymmPath:"platform",initialYmm:{},config:{goAction:"redirect",clearAction:"redirect"}},r="ymmFilterState",n=".filter_div.filter_platform";function o(e){var o=e.closest(n).data(r);return null!=o?o:t}function i(t){for(var r,n={},o=0,i=e;o<i.length;o++){var a=i[o],s=String(null!==(r=t.find(".ymm-filter-".concat(a)).val())&&void 0!==r?r:"");s&&(n[a]=s)}return n}function a(e){return t=this,r=arguments,o=function(e,t,r,n,o,i,a,s){return void 0===t&&(t=!0),void 0===r&&(r=!1),void 0===n&&(n=""),void 0===o&&(o={}),void 0===i&&(i=null),void 0===a&&(a=""),void 0===s&&(s=""),function(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(l){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}(this,function(l){var c,u;if(r&&(c=e,void 0===u&&(u=3e3),createBlackout(),$("#blackout").addClass("removable"),$("#blackout_text").html(c),$("#blackout_text_container").show(),$("#blackout").fadeIn("slow",function(){window.blackoutTimeout=window.setTimeout(function(){$("#blackout").fadeOut("slow",function(){closeBlackout()})},u)}),window.cwToast=!0,console.error(e,n,o,null==i?void 0:i.status,a,s)),t)try{console.error(e)}catch(e){"object"==typeof e&&(e="Failed to send log."),console.error(e)}return[2]})},new((n=void 0)||(n=Promise))(function(e,i){function a(e){try{l(o.next(e))}catch(e){i(e)}}function s(e){try{l(o.throw(e))}catch(e){i(e)}}function l(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n(function(e){e(r)})).then(a,s)}l((o=o.apply(t,r||[])).next())});var t,r,n,o}function s(e){return e.replace(/[^\da-z]+/gi,"-").replace(/-+/gi,"-").toLowerCase()}function l(e,t){return e.find(".ymm-filter-".concat(t))}var c=["submodel","engine","transmission","body"];function u(e,t,r){for(var n,o=r.clears||[],i=r.params||{},s=r.initialVar,c=l(e,t),u=r.preserveSelection?String(null!==(n=c.val())&&void 0!==n?n:""):"",d=0,h=o;d<h.length;d++){var m=h[d];f(e,m)}return c.parent().activity(),$.ajax({url:"/api/vehicles.php",type:"GET",dataType:"json",data:Object.assign({search:t},i),error:function(e,r,n){a(e.responseText,!0,!1,"populatePlatform_"+t,i,e,r,n),c.parent().activity(!1)},success:function(r){var n,o;f(e,t,r,u),c.parent().activity(!1),s&&0!==c.find('option[value="'+s+'"]').length&&c.val((n=s,o=document.createElement("textarea"),o.innerHTML=n,o.value)).trigger("change")}})}function f(e,t,r,n){function o(e,t){for(var r=0,o=e;r<o.length;r++){var i=o[r],a=new Option(i,i);n===i&&(a.selected=!0),t.append(a)}}void 0===n&&(n=""),l(e,t).val("");var i=e.find("select.ymm-filter-"+t+":last");i.attr("disabled","disabled").find("option,optgroup").not(":contains("+t.toUpperCase()+")[value='']").not(":contains(*select)[value='']").remove();var a=Array.isArray(null==r?void 0:r.result)?r.result:[],s=Array.isArray(null==r?void 0:r.popular)?r.popular:[];if(a.length>0){if(s.length>0){var c=$("<optgroup>",{label:"Popular"}),u=$("<optgroup>",{label:"Other"});o(s,c),o(a,u),i.append(c,u)}else o(a,i);i.prop("disabled",!1)}}function d(t){for(var r=0,n=e;r<n.length;r++){var o=n[r];
1t&&t[o]?(Cookies.set(o,t[o],{path:"/"},"C0003"),"year"===o&&Cookies.set("shopWithoutVehicle","false",{path:"/"},"C0003")):Cookies.set(o,null,{path:"/",expires:-1},"C0003")}}function h(){return void 0!==Cookies.get("websiteCustomerSessionName")}function m(e,t,r,n,o){return i=this,a=arguments,l=function(e,t,r,n,o,i,a){var s,l;return void 0===i&&(i=null),void 0===a&&(a=!1),function(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(l){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}(this,function(c){switch(c.label){case 0:return void 0===Cookies.get("WebsiteCustomerSessionName")?[2,!1]:(s=new URLSearchParams({action:"add_vehicle",formId:String(null!=i?i:""),year:String(t),make:r,model:n,engine:null!=o?o:"",source:String(e),keepFresh:String(Math.random()),skipDb:String(a)}),[4,fetch("/assets/php/account/vehicleshelper.php",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"},body:s})]);case 1:return(l=c.sent()).ok?[2,!0]:(console.error("Failed to add vehicle:",l.statusText),[2,!1])}})},new((s=void 0)||(s=Promise))(function(e,t){function r(e){try{o(l.next(e))}catch(e){t(e)}}function n(e){try{o(l.throw(e))}catch(e){t(e)}}function o(t){var o;t.done?e(t.value):(o=t.value,o instanceof s?o:new s(function(e){e(o)})).then(r,n)}o((l=l.apply(i,a||[])).next())});var i,a,s,l}var y="ymm-filter-loading";function p(e,t){void 0===t&&(t={});var r=t.scroll,n=void 0===r||r;switch(o(e).config.goAction){case"redirect":!function(e){var t,r,n,a;t=this,r=void 0,a=function(){var t,r,n,a,l,c,u,f;return function(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(l){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}(this,function(y){switch(y.label){case 0:return e.find(".ymm-filter-go").hasClass("disabled")?[2]:(t=o(e),r=i(e),n=String(null!==(u=e.find(".brand").val())&&void 0!==u?u:""),a="/".concat(t.ymmPath,"/"),r.make&&(a+=s(r.make)+"/",r.model&&(a+=s(r.model)+"/",r.year&&(a+=s(r.year)+"/",r.submodel?a+="submodel/"+s(r.submodel)+"/":r.engine?a+="engine/"+s(r.engine)+"/":r.transmission?a+="transmission/"+s(r.transmission)+"/":r.body&&(a+="body/"+s(r.body)+"/"),m(2,r.year,r.make,r.model,null!==(f=r.engine)&&void 0!==f?f:"",null,!0)))),n&&(a="/brands/".concat(n).concat(a)),$("body").hasClass("category-page")&&(l=window.location.pathname.split("/"),c=l.indexOf("products"),a+=l.slice(c,-1).join("/")+"/"),"true"===Cookies.get("shopWithoutVehicle")&&h()||d(r),[4,gtmEvent("find_your_parts_filter",{eventData:{location:a,vehicle:r}})]);case 1:return y.sent(),window.location.href=a,[2]}})}
1,new((n=void 0)||(n=Promise))(function(e,o){function i(e){try{l(a.next(e))}catch(e){o(e)}}function s(e){try{l(a.throw(e))}catch(e){o(e)}}function l(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n(function(e){e(r)})).then(i,s)}l((a=a.apply(t,r||[])).next())})}(e);break;case"updateGrid":v(e,function(e){return function(e,t){var r,n;void 0===t&&(t=!0);var o=i(e);d(o),gtmEvent("find_your_parts_filter",{eventData:{location:window.location.pathname,vehicle:o}}),o.year&&o.make&&o.model&&m(2,o.year,o.make,o.model,null!==(r=o.engine)&&void 0!==r?r:"",null,!0);var a=$(".product-results-view"),s=$("#filterattributes"),l=filterbyymm(a,s,e);if(!t)return l;var c=$(".widget.filter-grid"),u=c.offset(),f=$(window).scrollTop(),h=$(window).height();if(!u||void 0===f||void 0===h)return l;var y=u.top,p=u.top+(null!==(n=c.outerHeight(!0))&&void 0!==n?n:0);return(y>f+h||p<f)&&c.is(":visible")&&$("html, body").animate({scrollTop:u.top},250),l}(e,n)});break;case"search":v(e,b)}}function v(e,t){if(!e.hasClass(y)){var r;e.addClass(y);try{r=t(e)}catch(t){throw e.removeClass(y),t}r&&"function"==typeof r.always?r.always(function(){return e.removeClass(y)}):e.removeClass(y)}}function b(e){var t=i(e);return d(t),gtmEvent("find_your_parts_filter",{eventData:{location:window.location.pathname,vehicle:t}}),performSearch()}var g={year:function(e){var t=l(e,"year");if(t.val())return u(e,"make",{clears:["make","model","submodel","engine","transmission","body"],params:{year:t.val()},initialVar:o(e).initialYmm.make})},make:function(e){var t=l(e,"year"),r=l(e,"make");if(t.val()&&r.val())return u(e,"model",{clears:["model","submodel","engine","transmission","body"],params:{year:t.val(),make:r.val()},initialVar:o(e).initialYmm.model})}};function w(e,t,i){var a,s=$(e).closest("div.filters");!function(e,t,o){var i=e.closest(n).data(r);i&&(o?i.initialYmm[t]=o:delete i.initialYmm[t])}(s,t,String(null!==(a=$(e).val())&&void 0!==a?a:"")),$(s).find(".ymm-filter-go").addClass("disabled"),"model"===t&&($(e).val()?s.find(".ymm-filter-go").removeClass("disabled"):s.find(".ymm-filter-go").addClass("disabled"));var c=[];if(g[t])if($(e).val())(m=g[t](s))&&c.push(m);else for(var d=0,h=i;d<h.length;d++)f(s,h[d]);else{if(s.find(".ymm-filter-submodel").length>0){var m=function(e){var t=l(e,"year"),r=l(e,"make"),n=l(e,"model");if(r.val()&&n.val()&&t.val())return u(e,"submodel",{clears:["submodel"],params:{year:t.val(),make:r.val(),model:n.val()},initialVar:o(e).initialYmm.submodel})}(s);m&&c.push(m)}s.find(".ymm-filter-engine").length>0&&(m=function(e){var t=l(e,"make"),r=l(e,"model"),n=l(e,"year");if(t.val()&&r.val()&&n.val())return u(e,"engine",{clears:["engine"],params:{year:n.val(),make:t.val(),model:r.val()},initialVar:o(e).initialYmm.engine})}(s),m&&c.push(m)),s.find(".ymm-filter-body").length>0&&(m=function(e){var t=l(e,"make"),r=l(e,"model"),n=l(e,"year");if(t.val()&&r.val()&&n.val())return u(e,"body",{clears:["body"],params:{year:n.val(),make:t.val(),model:r.val()},initialVar:o(e).initialYmm.body})}(s),m&&c.push(m)),s.find(".ymm-filter-transmission").length>0&&(m=function(e){var t=l(e,"make"),r=l(e,"model"),n=l(e,"year");if(t.val()&&r.val()&&n.val())return u(e,"transmission",{clears:["transmission"],params:{year:n.val(),make:t.val(),model:r.val()},initialVar:o(e).initialYmm.transmission})}(s),m&&c.push(m))}T(e,c)}var k=new WeakMap,A=new WeakMap;function T(e,t){var r,n,o=e.closest(".filters").get(0);if(o){if(t.length>0){k.set(o,(null!==(r=k.get(o))&&void 0!==r?r:0)+t.length);for(var i=0,a=t;i<a.length;i++)a[i].always(function(){return _(o)})}(null!==(n=k.get(o))&&void 0!==n?n:0)>0?A.set(o,e):C(e)}else C(e)}function _(e){var t,r=(null!==(t=k.get(e))&&void 0!==t?t:1)-1;if(r>0)k.set(e,r);else{k.delete(e);var n=A.get(e);n&&(A.delete(e),C(n))}}var x=250,E=new WeakMap;function C(e){if(function(e){return"redirect"!==o(e.closest(".filters")).config.goAction}($(e))){var t=$(e).closest(".filters"),r=t.get(0);if(r){var n=E.get(r);void 0!==n&&clearTimeout(n);var i=setTimeout(function(){E.delete(r),p(t)},x);E.set(r,i)}}}$(function(){(function(){$(".ymm-filter-year").on("change",function(){w($(this),"year",["make","model","submodel","engine","transmission","body"])}),$(".ymm-filter-make").on("change",function(){w($(this),"make",["model","submodel","engine","transmission","body"])}),$(".ymm-filter-model").on("change",function(){w($(this),"model",[])});
1for(var e=function(e,t){$(e).on("change",function(){var e=$(this),r=function(e,t){var r=[],n=i(e);if(!n.year||!n.make||!n.model)return r;for(var o=0,a=c;o<a.length;o++){var s=a[o];if(s!==t&&0!==e.find(".ymm-filter-".concat(s)).length){for(var l={year:n.year,make:n.make,model:n.model},f=0,d=c;f<d.length;f++){var h=d[f];h!==s&&n[h]&&(l[h]=n[h])}r.push(u(e,s,{clears:[s],params:l,preserveSelection:!0}))}}return r}(e.closest("div.filters"),t);T(e,r)})},t=0,r=[{selector:".ymm-filter-submodel",field:"submodel"},{selector:".ymm-filter-engine",field:"engine"},{selector:".ymm-filter-transmission",field:"transmission"},{selector:".ymm-filter-body",field:"body"}];t<r.length;t++){var n=r[t];e(n.selector,n.field)}})(),$(".ymm-filter-go").off().on("click",function(e,t){void 0===t&&(t={}),p($(this).closest(".filters"),t)}),$(".ymm-filter-clear").off().on("click",function(){!function(e){var t=o(e);switch(t.config.clearAction){case"redirect":!function(e){d(),window.location.href="/".concat(e.ymmPath)}(t);break;case"empty":!function(e){h()||d(),function(e){var t=e.closest(n).data(r);t&&(t.initialYmm={})}(e),l(e,"year").val("").trigger("change")}(e)}}($(this).closest(".filters"))}),$(".filter_div.filter_platform").each(function(){var t,n,o,i,a,s=$(this),c=s.find('template.ts-bundle-data[data-ts-bundle="ymm-filter/index"]').first();if(0!==c.length){for(var u=c.data(),f={},h=0,m=e;h<m.length;h++)u[k=m[h]]&&(f[k]=String(u[k]));var y={ymmPath:null!==(t=u.ymmPath)&&void 0!==t?t:"platform",initialYmm:f,config:{goAction:null!==(n=u.goAction)&&void 0!==n?n:"redirect",clearAction:null!==(o=u.clearAction)&&void 0!==o?o:"redirect"}},p=$("#sitewide-fitment-component").length>0,v=Cookies.get("shopWithoutVehicle"),b=p&&("false"===v||void 0===v);if("platform"==($("body").hasClass("category-page")?"category":$("body").hasClass("productpage")?"product":$("body").hasClass("platform")?"platform":"other")&&b&&y.initialYmm.make&&y.initialYmm.make===Cookies.get("make")&&y.initialYmm.model&&y.initialYmm.model===Cookies.get("model")&&String(null!==(i=y.initialYmm.year)&&void 0!==i?i:"")===String(null!==(a=Cookies.get("year"))&&void 0!==a?a:""))for(var g=0,w=["engine","transmission","body","submodel"];g<w.length;g++){var k=w[g],A=Cookies.get(k);!y.initialYmm[k]&&A&&(y.initialYmm[k]=A)}!function(e,t){e.data(r,t)}(s,y),"true"!==v&&y.initialYmm.year&&y.initialYmm.make&&y.initialYmm.model&&d(y.initialYmm),function(e,t){var r;if(t.initialYmm.year){var n=l(e,"year"),o=String(null!==(r=n.first().val())&&void 0!==r?r:""),i=Array.isArray(t.initialYmm.year)?t.initialYmm.year:[t.initialYmm.year];if(""!==o&&i.some(function(e){return String(e)===o}))n.each(function(e,t){var r=$(t).closest("div.filters");r.find(".ymm-filter-model").val()&&r.find(".ymm-filter-go").removeClass("disabled")});else{var a=t.initialYmm.year;n.each(function(e,t){$(t).val(a).trigger("change")})}}}(s,y),"updateGrid"===y.config.goAction&&$(s).find(".ymm-filter-go").trigger("click",[{scroll:!1}])}})})}()}(); 2//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QsT0FORCxDQVVBLElBQU0vQyxFQUFPekYsRUFBTVIsV0FBV2lHLEtBQzlCZ0gsRUFBWWQsS0FBSyxTQUFVa0IsRUFBR2hFLEdBQzdCdkgsRUFBRXVILEdBQ0FsSSxJQUFJOEUsR0FDSjdCLFFBQVEsU0FDWCxFQVBBLENBbEJBLENBMEJELENBdENFbUosQ0FBbUJuQixFQUFZNUwsR0FDRCxlQUExQkEsRUFBTVAsT0FBT0MsVUFDaEI0QixFQUFFc0ssR0FDQW5MLEtBQUssa0JBQ0xtRCxRQUFRLFFBQVMsQ0FBQyxDQUFFMkMsUUFBUSxJQWpFL0IsQ0FtRUQsRUFDRCxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vLy4veW1tLWZpbHRlci90eXBlcy50cyIsIndlYnBhY2s6Ly8vLi95bW0tZmlsdGVyL3N0YXRlLnRzIiwid2VicGFjazovLy8uL3V0aWwvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vLy4vdXRpbC9lbmNvZGUtZGVjb2RlLnRzIiwid2VicGFjazovLy8uL3ltbS1maWx0ZXIvdXRpbC9maWx0ZXJzLnRzIiwid2VicGFjazovLy8uL3ltbS1maWx0ZXIvdXRpbC9wb3B1bGF0ZS1maWVsZHMudHMiLCJ3ZWJwYWNrOi8vLy4vdXRpbC9jb29raWVzLnRzIiwid2VicGFjazovLy8uL3V0aWwvdXNlci50cyIsIndlYnBhY2s6Ly8vLi91dGlsL3ZlaGljbGUudHMiLCJ3ZWJwYWNrOi8vLy4veW1tLWZpbHRlci91dGlsL2dvLWFjdGlvbi50cyIsIndlYnBhY2s6Ly8vLi95bW0tZmlsdGVyL3V0aWwvcGxhdGZvcm0tYmluZGluZ3MudHMiLCJ3ZWJwYWNrOi8vLy4veW1tLWZpbHRlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi95bW0tZmlsdGVyL3V0aWwvY2xlYXItYWN0aW9uLnRzIiwid2VicGFjazovLy8uL3V0aWwvZG9tLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYn
2BhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfSIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpem
2VOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZS
2hmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldy
2hib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gI
2H0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2Y
2XIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2Y
2XIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgI
2HJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBjb25zdCBZTU1fRklFTERTID0gWyd5ZWFyJywgJ21ha2UnLCAnbW9kZWwnLCAnc3VibW9kZWwnLCAnZW5naW5lJywgJ3RyYW5zbWlzc2lvbicsICdib2R5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBZTU1GaWVsZCA9ICh0eXBlb2YgWU1NX0ZJRUxEUylbbnVtYmVyXTtcbiIsImltcG9ydCB7IFlNTV9GSUVMRFMsIFlNTUZpZWxkIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFltbUZpbHRlclN0YXRlID0ge1xuXHR5bW1QYXRoOiBzdHJpbmc7XG5cdGluaXRpYWxZbW06IFBhcnRpYWw8UmVjb3JkPFlNTUZpZWxkLCBzdHJpbmc+Pjtcblx0Y29uZmlnOiBZbW1GaWx0ZXJDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBZbW1GaWx0ZXJDb25maWcgPSB7XG5cdGdvQWN0aW9uOiBZbW1GaWx0ZXJHb0FjdGlvbjtcblx0Y2xlYXJBY3Rpb246IFltbUZpbHRlckNsZWFyQWN0aW9uO1xufTtcblxudHlwZSBZbW1GaWx0ZXJHb0FjdGlvbiA9ICdyZWRpcmVjdCcgfCAndXBkYXRlR3JpZCcgfCAnc2VhcmNoJztcbnR5cGUgWW1tRmlsdGVyQ2xlYXJBY3Rpb24gPSAncmVkaXJlY3QnIHwgJ2VtcHR5JztcblxuY29uc3QgREVGQVVMVF9TVEFURTogWW1tRmlsdGVyU3RhdGUgPSB7XG5cdHltbVBhdGg6ICdwbGF0Zm9ybScsXG5cdGluaXRpYWxZbW06IHt9LFxuXHRjb25maWc6IHtcblx0XHRnb0FjdGlvbjogJ3JlZGlyZWN0Jyxcblx0XHRjbGVhckFjdGlvbjogJ3JlZGlyZWN0Jyxcblx0fSxcbn07XG5cbmNvbnN0IFNUQVRFX0RBVEFfS0VZID0gJ3ltbUZpbHRlclN0YXRlJztcbmNvbnN0IFdJREdFVF9ST09UX1NFTEVDVE9SID0gJy5maWx0ZXJfZGl2LmZpbHRlcl9wbGF0Zm9ybSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJTdGF0ZSh3aWRnZXRSb290OiBKUXVlcnksIHN0YXRlOiBZbW1GaWx0ZXJTdGF0ZSk6IHZvaWQge1xuXHR3aWRnZXRSb290LmRhdGEoU1RBVEVfREFUQV9LRVksIHN0YXRl
2KTtcbn1cblxuLy8gTG9vayB1cCB0aGUgcGVyLWluc3RhbmNlIHN0YXRlIGJ5IHdhbGtpbmcgZnJvbSBhbnkgZWxlbWVudCBpbnNpZGUgdGhlIGZpbHRlclxuLy8gdXAgdG8gdGhlIHdpZGdldCByb290IHRoYXQgY2FycmllcyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZUZvckZpbHRlcihmaWx0ZXI6IEpRdWVyeSk6IFltbUZpbHRlclN0YXRlIHtcblx0Y29uc3Qgd2lkZ2V0Um9vdCA9IGZpbHRlci5jbG9zZXN0KFdJREdFVF9ST09UX1NFTEVDVE9SKTtcblx0Y29uc3Qgc3RhdGUgPSB3aWRnZXRSb290LmRhdGEoU1RBVEVfREFUQV9LRVkpIGFzIFltbUZpbHRlclN0YXRlIHwgdW5kZWZpbmVkO1xuXHRyZXR1cm4gc3RhdGUgPz8gREVGQVVMVF9TVEFURTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUluaXRpYWxZbW0oZmlsdGVyOiBKUXVlcnksIGZpZWxkOiBZTU1GaWVsZCwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCB3aWRnZXRSb290ID0gZmlsdGVyLmNsb3Nlc3QoV0lER0VUX1JPT1RfU0VMRUNUT1IpO1xuXHRjb25zdCBzdGF0ZSA9IHdpZGdldFJvb3QuZGF0YShTVEFURV9EQVRBX0tFWSkgYXMgWW1tRmlsdGVyU3RhdGUgfCB1bmRlZmluZWQ7XG5cdGlmICghc3RhdGUpIHJldHVybjtcblx0aWYgKHZhbHVlKSB7XG5cdFx0c3RhdGUuaW5pdGlhbFltbVtmaWVsZF0gPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgc3RhdGUuaW5pdGlhbFltbVtmaWVsZF07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFySW5pdGlhbFltbShmaWx0ZXI6IEpRdWVyeSk6IHZvaWQge1xuXHRjb25zdCB3aWRnZXRSb290ID0gZmlsdGVyLmNsb3Nlc3QoV0lER0VUX1JPT1RfU0VMRUNUT1IpO1xuXHRjb25zdCBzdGF0ZSA9IHdpZGdldFJvb3QuZGF0YShTVEFURV9EQVRBX0tFWSkgYXMgWW1tRmlsdGVyU3RhdGUgfCB1bmRlZmluZWQ7XG5cdGlmICghc3RhdGUpIHJldHVybjtcblx0c3RhdGUuaW5pdGlhbFltbSA9IHt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVoaWNsZUZyb21GaWx0ZXIoZmlsdGVyOiBKUXVlcnkpOiBQYXJ0aWFsPFJlY29yZDxZTU1GaWVsZCwgc3RyaW5nPj4ge1xuXHRjb25zdCB2ZWhpY2xlOiBQYXJ0aWFsPFJlY29yZDxZTU1GaWVsZCwgc3RyaW5nPj4gPSB7fTtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBZTU1fRklFTERTKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBTdHJpbmcoZmlsdGVyLmZpbmQoYC55bW0tZmlsdGVyLSR7ZmllbGR9YCkudmFsKCkgPz8gJycpO1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dmVoaWNsZVtmaWVsZF0gPSB2YWx1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZlaGljbGU7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gdG9hc3QodGV4dDogc3RyaW5nLCB0aW1lOiBudW1iZXIgPSAzMDAwKTogdm9pZCB7XG5cdGNyZWF0ZUJsYWNrb3V0KCk7XG5cdCQoJyNibGFja291dCcpLmFkZENsYXNzKCdyZW1vdmFibGUnKTtcblx0JCgnI2JsYWNrb3V0X3RleHQnKS5odG1sKHRleHQpO1xuXHQkKCcjYmxhY2tvdXRfdGV4dF9jb250YWluZXInKS5zaG93KCk7XG5cblx0JCgnI2JsYWNrb3V0JykuZmFkZUluKCdzbG93JywgKCkgPT4ge1xuXHRcdHdpbmRvdy5ibGFja291dFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQkKCcjYmxhY2tvdXQnKS5mYWRlT3V0KCdzbG93JywgKCkgPT4ge1xuXHRcdFx0XHRjbG9zZUJsYWNrb3V0KCk7XG5cdFx0XHR9KTtcblx0XHR9LCB0aW1lKTtcblx0fSk7XG5cblx0d2luZG93LmN3VG9hc3QgPSB0cnVlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nRXJyb3IoXG5cdG1lc3NhZ2U6IHN0cmluZyxcblx0cmVwb3J0RXJyb3IgPSB0cnVlLFxuXHRub3RpZnlVc2VyID0gZmFsc2UsXG5cdG1ldGhvZCA9ICcnLFxuXHRhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuXHRqcVhIUjogSlF1ZXJ5LmpxWEhSIHwgbnVsbCA9IG51bGwsXG5cdHRleHRTdGF0dXMgPSAnJyxcblx0ZXJyb3JUaHJvd24gPSAnJ1xuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChub3RpZnlVc2VyKSB7XG5cdFx0dG9hc3QobWVzc2FnZSk7XG5cdFx0Y29uc29sZS5lcnJvcihtZXNzYWdlLCBtZXRob2QsIGFyZ3MsIGpxWEhSPy5zdGF0dXMsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKTtcblx0fVxuXG5cdGlmIChyZXBvcnRFcnJvcikge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRlcnJvciA9ICdGYWlsZWQgdG8gc2VuZCBsb2cuJztcblx0XHRcdH1cblx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXHRcdH1cblx0fVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUVudGl0aWVzKGVuY29kZWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG5cdHRleHRBcmVhLmlubmVySFRNTCA9IGVuY29kZWRTdHJpbmc7XG5cdHJldHVybiB0ZXh0QXJlYS52YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlaGljbGVVUkxSZXBsYWNlbWVudChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBzdHJcblx0XHQucmVwbGFjZSgvW15cXGRhLXpdKy9naSwgJy0nKVxuXHRcdC5yZXBsYWNlKC8tKy9naSwgJy0nKVxuXHRcdC50b0xvd2VyQ2FzZSgpO1xufVxuIiwiaW1wb3J0IHsgWU1NRmllbGQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXIoeW1tRmlsdGVyOiBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+LCBmaWx0ZXJOYW1lOiBZTU1GaWVsZCk6IEpRdWVyeTxIVE1MU2VsZWN0RWxlbWVudD4ge1xuXHRyZXR1cm4geW1tRmlsdGVyLmZpbmQoYC55bW0tZmlsdGVyLSR7ZmlsdGVyTmFtZX1gKSBhcyBKUXVlcnk8SFRNTFNlbGVjdEVsZW1lbnQ+O1xufVxuIiwiaW1wb3J0IHsgWU1NRmllbGQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRTdGF0ZUZvckZpbHRlciwgZ2V0VmVoaWNsZUZyb21GaWx0ZXIgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJ0AvdXRpbC9lcnJvcic7XG5pbXBvcnQgeyBkZWNvZGVFbnRpdGllcyB9IGZyb20gJ0AvdXRpbC9lbmNvZGUtZGVjb2RlJztcbmltcG9ydCB7
2IGdldEZpbHRlciB9IGZyb20gJy4vZmlsdGVycyc7XG5cbnR5cGUgUG9wdWxhdGVPcHRpb25zID0ge1xuXHRjbGVhcnM/OiBZTU1GaWVsZFtdO1xuXHRwYXJhbXM/OiBQYXJ0aWFsPFJlY29yZDxZTU1GaWVsZCwgYW55Pj47XG5cdGluaXRpYWxWYXI/OiBzdHJpbmc7IC8vIE9wdGlvbmFsIGdsb2JhbCB2YXJpYWJsZSBuYW1lIGZvciBpbml0aWFsIHZhbHVlIChlLmcuLCBmcm9tIFVSTCBvciBjb29raWUpXG5cdHByZXNlcnZlU2VsZWN0aW9uPzogYm9vbGVhbjsgLy8gUmUtc2VsZWN0IHRoZSBjdXJyZW50IHZhbHVlIGFmdGVyIHJlcG9wdWxhdGluZyBpZiBpdCBzdGlsbCBhcHBlYXJzIGluIHRoZSBuZXcgcmVzdWx0c1xufTtcblxudHlwZSBWZWhpY2xlUmVzcG9uc2UgPSB7XG5cdHJlc3VsdDogc3RyaW5nW107XG5cdHBvcHVsYXI/OiBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IE9QVElPTkFMX0ZJRUxEUzogWU1NRmllbGRbXSA9IFsnc3VibW9kZWwnLCAnZW5naW5lJywgJ3RyYW5zbWlzc2lvbicsICdib2R5J107XG5cbmZ1bmN0aW9uIHBvcHVsYXRlUGxhdGZvcm1GaWVsZChjb250YWluZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4sIGZpZWxkOiBZTU1GaWVsZCwgb3B0aW9uczogUG9wdWxhdGVPcHRpb25zKTogSlF1ZXJ5LmpxWEhSIHtcblx0Y29uc3QgY2xlYXJzID0gb3B0aW9ucy5jbGVhcnMgfHwgW107XG5cdGNvbnN0IHBhcmFtcyA9IG9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXHRjb25zdCBpbml0aWFsVmFyID0gb3B0aW9ucy5pbml0aWFsVmFyO1xuXG5cdGNvbnN0IHNlbGVjdCA9IGdldEZpbHRlcihjb250YWluZXIsIGZpZWxkKTtcblx0Y29uc3QgcHJldmlvdXNWYWx1ZSA9IG9wdGlvbnMucHJlc2VydmVTZWxlY3Rpb24gPyBTdHJpbmcoc2VsZWN0LnZhbCgpID8/ICcnKSA6ICcnO1xuXG5cdC8vIENsZWFyIGRvd25zdHJlYW0gZmllbGRzXG5cdGZvciAoY29uc3QgZG93bnN0cmVhbSBvZiBjbGVhcnMpIHtcblx0XHRyZXBsYWNlUGxhdGZvcm1GaWx0ZXIoY29udGFpbmVyLCBkb3duc3RyZWFtKTtcblx0fVxuXG5cdHNlbGVjdC5wYXJlbnQoKS5hY3Rpdml0eSgpO1xuXHRyZXR1cm4gJC5hamF4KHtcblx0XHR1cmw6ICcvYXBpL3ZlaGljbGVzLnBocCcsXG5cdFx0dHlwZTogJ0dFVCcsXG5cdFx0ZGF0YVR5cGU6ICdqc29uJyxcblx0XHRkYXRhOiBPYmplY3QuYXNzaWduKHsgc2VhcmNoOiBmaWVsZCB9LCBwYXJhbXMpLFxuXHRcdGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG5cdFx0XHRsb2dFcnJvcihqcVhIUi5yZXNwb25zZVRleHQsIHRydWUsIGZhbHNlLCAncG9wdWxhdGVQbGF0Zm9ybV8nICsgZmllbGQsIHBhcmFtcywganFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKTtcblx0XHRcdHNlbGVjdC5wYXJlbnQoKS5hY3Rpdml0eShmYWxzZSk7XG5cdFx0fSxcblx0XHRzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRcdHJlcGxhY2VQbGF0Zm9ybUZpbHRlcihjb250YWluZXIsIGZpZWxkLCByZXNwb25zZSwgcHJldmlvdXNWYWx1ZSk7XG5cdFx0XHRzZWxlY3QucGFyZW50KCkuYWN0aXZpdHkoZmFsc2UpO1xuXHRcdFx0aWYgKGluaXRpYWxWYXIpIHtcblx0XHRcdFx0aWYgKHNlbGVjdC5maW5kKCdvcHRpb25bdmFsdWU9XCInICsgaW5pdGlhbFZhciArICdcIl0nKS5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHRzZWxlY3QudmFsKGRlY29kZUVudGl0aWVzKGluaXRpYWxWYXIpKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVBsYXRmb3JtRmlsdGVyKGNvbnRhaW5lcjogSlF1ZXJ5PEhUTUxEaXZFbGVtZW50PiwgZmlsdGVyOiBZTU1GaWVsZCwgcmVzcG9uc2U/OiBWZWhpY2xlUmVzcG9uc2UsIHByZXZpb3VzVmFsdWU/OiBzdHJpbmcpIHtcblx0aWYgKHByZXZpb3VzVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHByZXZpb3VzVmFsdWUgPSAnJztcblx0fVxuXG5cdGZ1bmN0aW9uIHBvcHVsYXRlRmllbGRHcm91cHMoZmllbGRzOiBzdHJpbmdbXSwgZ3JvdXA6IEpRdWVyeTxIVE1MU2VsZWN0RWxlbWVudD4gfCBKUXVlcnk8SFRNTE9wdEdyb3VwRWxlbWVudD4pIHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0Y29uc3Qgb3B0aW9uID0gbmV3IE9wdGlvbihmaWVsZCwgZmllbGQpO1xuXHRcdFx0aWYgKHByZXZpb3VzVmFsdWUgPT09IGZpZWxkKSB7XG5cdFx0XHRcdG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRncm91cC5hcHBlbmQob3B0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRnZXRGaWx0ZXIoY29udGFpbmVyLCBmaWx0ZXIpLnZhbCgnJyk7XG5cblx0Y29uc3QgcGxhdGZvcm1TZWxlY3Q6IEpRdWVyeTxIVE1MU2VsZWN0RWxlbWVudD4gPSBjb250YWluZXIuZmluZCgnc2VsZWN0LnltbS1maWx0ZXItJyArIGZpbHRlciArICc6bGFzdCcpO1xuXHRwbGF0Zm9ybVNlbGVjdFxuXHRcdC5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpXG5cdFx0LmZpbmQoJ29wdGlvbixvcHRncm91cCcpXG5cdFx0Lm5vdCgnOmNvbnRhaW5zKCcgKyBmaWx0ZXIudG9VcHBlckNhc2UoKSArIFwiKVt2YWx1ZT0nJ11cIilcblx0XHQubm90KFwiOmNvbnRhaW5zKCpzZWxlY3QpW3ZhbHVlPScnXVwiKVxuXHRcdC5yZW1vdmUoKTtcblxuXHRjb25zdCByZXN1bHRzID0gQXJyYXkuaXNBcnJheShyZXNwb25zZT8ucmVzdWx0KSA/IHJlc3BvbnNlLnJlc3VsdCA6IFtdO1xuXHRjb25zdCBwb3B1bGFyID0gQXJyYXkuaXNBcnJheShyZXNwb25zZT8ucG9wdWxhcikgPyByZXNwb25zZS5wb3B1bGFyIDogW107XG5cblx0aWYgKHJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChwb3B1bGFyLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHBvcHVsYXJHcm91cDogSlF1ZXJ5PEhUTUxPcHRHcm91cEVsZW1lbnQ+ID0gJCgnPG9wdGdyb3VwPicsIHsgbGFiZWw6ICdQb3B1bGFyJyB9KTtcblx0XHRcdGNvbnN0IG90aGVyR3JvdXA6IEpRdWVyeTxIVE1MT3B0R3JvdXBFbGVtZW50PiA9ICQoJzxvcHRncm91cD4nLCB7IGxhYmVsOiAnT3RoZXInIH0pO1xuXG5cdFx0XHRwb3B1bGF0ZUZpZWxkR3JvdXBzKHBvcHVsYXIsIHBvcHVsYXJHcm91cCk7XG5cdFx0XHRwb3B1bGF0ZUZpZWxkR3JvdXBzKHJlc3VsdHMsIG90aGVyR3JvdXApO1xuXG5cdFx0XHRwbGF0Zm9ybVNlbGVjdC5hcHBlbmQocG9wdWxhckdyb3VwLCBvdGhlckdyb3VwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9wdWxhdGVGaWVsZEdyb3VwcyhyZXN1bHRzLCBwbGF0Zm9ybVNlbGVjdCk7XG5cdFx0fVxuXG5cdFx0cGxhdGZvcm1TZWxlY3QucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlUGxhdGZvcm1ZZWFycyhmaWx0ZXI6IEpRdW
2VyeTxIVE1MRGl2RWxlbWVudD4pOiBKUXVlcnkuanFYSFIge1xuXHRyZXR1cm4gcG9wdWxhdGVQbGF0Zm9ybUZpZWxkKGZpbHRlciwgJ3llYXInLCB7XG5cdFx0Y2xlYXJzOiBbJ3llYXInLCAnbWFrZScsICdtb2RlbCcsICdzdWJtb2RlbCcsICdlbmdpbmUnLCAndHJhbnNtaXNzaW9uJywgJ2JvZHknXSxcblx0XHRpbml0aWFsVmFyOiBnZXRTdGF0ZUZvckZpbHRlcihmaWx0ZXIpLmluaXRpYWxZbW0ueWVhcixcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZVBsYXRmb3JtTWFrZXMoZmlsdGVyOiBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+KTogSlF1ZXJ5LmpxWEhSIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeWVhclNlbGVjdCA9IGdldEZpbHRlcihmaWx0ZXIsICd5ZWFyJyk7XG5cdGlmICgheWVhclNlbGVjdC52YWwoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gcG9wdWxhdGVQbGF0Zm9ybUZpZWxkKGZpbHRlciwgJ21ha2UnLCB7XG5cdFx0Y2xlYXJzOiBbJ21ha2UnLCAnbW9kZWwnLCAnc3VibW9kZWwnLCAnZW5naW5lJywgJ3RyYW5zbWlzc2lvbicsICdib2R5J10sXG5cdFx0cGFyYW1zOiB7IHllYXI6IHllYXJTZWxlY3QudmFsKCkgfSxcblx0XHRpbml0aWFsVmFyOiBnZXRTdGF0ZUZvckZpbHRlcihmaWx0ZXIpLmluaXRpYWxZbW0ubWFrZSxcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZVBsYXRmb3JtTW9kZWxzKGZpbHRlcjogSlF1ZXJ5PEhUTUxEaXZFbGVtZW50Pik6IEpRdWVyeS5qcVhIUiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHllYXJTZWxlY3QgPSBnZXRGaWx0ZXIoZmlsdGVyLCAneWVhcicpO1xuXHRjb25zdCBtYWtlU2VsZWN0ID0gZ2V0RmlsdGVyKGZpbHRlciwgJ21ha2UnKTtcblx0aWYgKCF5ZWFyU2VsZWN0LnZhbCgpIHx8ICFtYWtlU2VsZWN0LnZhbCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBwb3B1bGF0ZVBsYXRmb3JtRmllbGQoZmlsdGVyLCAnbW9kZWwnLCB7XG5cdFx0Y2xlYXJzOiBbJ21vZGVsJywgJ3N1Ym1vZGVsJywgJ2VuZ2luZScsICd0cmFuc21pc3Npb24nLCAnYm9keSddLFxuXHRcdHBhcmFtczogeyB5ZWFyOiB5ZWFyU2VsZWN0LnZhbCgpLCBtYWtlOiBtYWtlU2VsZWN0LnZhbCgpIH0sXG5cdFx0aW5pdGlhbFZhcjogZ2V0U3RhdGVGb3JGaWx0ZXIoZmlsdGVyKS5pbml0aWFsWW1tLm1vZGVsLFxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlUGxhdGZvcm1TdWJtb2RlbHMoZmlsdGVyOiBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+KTogSlF1ZXJ5LmpxWEhSIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeWVhclNlbGVjdCA9IGdldEZpbHRlcihmaWx0ZXIsICd5ZWFyJyk7XG5cdGNvbnN0IG1ha2VTZWxlY3QgPSBnZXRGaWx0ZXIoZmlsdGVyLCAnbWFrZScpO1xuXHRjb25zdCBtb2RlbFNlbGVjdCA9IGdldEZpbHRlcihmaWx0ZXIsICdtb2RlbCcpO1xuXHRpZiAoIW1ha2VTZWxlY3QudmFsKCkgfHwgIW1vZGVsU2VsZWN0LnZhbCgpIHx8ICF5ZWFyU2VsZWN0LnZhbCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBwb3B1bGF0ZVBsYXRmb3JtRmllbGQoZmlsdGVyLCAnc3VibW9kZWwnLCB7XG5cdFx0Y2xlYXJzOiBbJ3N1Ym1vZGVsJ10sXG5cdFx0cGFyYW1zOiB7IHllYXI6IHllYXJTZWxlY3QudmFsKCksIG1ha2U6IG1ha2VTZWxlY3QudmFsKCksIG1vZGVsOiBtb2RlbFNlbGVjdC52YWwoKSB9LFxuXHRcdGluaXRpYWxWYXI6IGdldFN0YXRlRm9yRmlsdGVyKGZpbHRlcikuaW5pdGlhbFltbS5zdWJtb2RlbCxcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZVBsYXRmb3JtRW5naW5lcyhmaWx0ZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4pOiBKUXVlcnkuanFYSFIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYWtlU2VsZWN0ID0gZ2V0RmlsdGVyKGZpbHRlciwgJ21ha2UnKTtcblx0Y29uc3QgbW9kZWxTZWxlY3QgPSBnZXRGaWx0ZXIoZmlsdGVyLCAnbW9kZWwnKTtcblx0Y29uc3QgeWVhclNlbGVjdCA9IGdldEZpbHRlcihmaWx0ZXIsICd5ZWFyJyk7XG5cdGlmICghbWFrZVNlbGVjdC52YWwoKSB8fCAhbW9kZWxTZWxlY3QudmFsKCkgfHwgIXllYXJTZWxlY3QudmFsKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIHBvcHVsYXRlUGxhdGZvcm1GaWVsZChmaWx0ZXIsICdlbmdpbmUnLCB7XG5cdFx0Y2xlYXJzOiBbJ2VuZ2luZSddLFxuXHRcdHBhcmFtczogeyB5ZWFyOiB5ZWFyU2VsZWN0LnZhbCgpLCBtYWtlOiBtYWtlU2VsZWN0LnZhbCgpLCBtb2RlbDogbW9kZWxTZWxlY3QudmFsKCkgfSxcblx0XHRpbml0aWFsVmFyOiBnZXRTdGF0ZUZvckZpbHRlcihmaWx0ZXIpLmluaXRpYWxZbW0uZW5naW5lLFxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlUGxhdGZvcm1UcmFuc21pc3Npb25zKGZpbHRlcjogSlF1ZXJ5PEhUTUxEaXZFbGVtZW50Pik6IEpRdWVyeS5qcVhIUiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1ha2VTZWxlY3QgPSBnZXRGaWx0ZXIoZmlsdGVyLCAnbWFrZScpO1xuXHRjb25zdCBtb2RlbFNlbGVjdCA9IGdldEZpbHRlcihmaWx0ZXIsICdtb2RlbCcpO1xuXHRjb25zdCB5ZWFyU2VsZWN0ID0gZ2V0RmlsdGVyKGZpbHRlciwgJ3llYXInKTtcblx0aWYgKCFtYWtlU2VsZWN0LnZhbCgpIHx8ICFtb2RlbFNlbGVjdC52YWwoKSB8fCAheWVhclNlbGVjdC52YWwoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gcG9wdWxhdGVQbGF0Zm9ybUZpZWxkKGZpbHRlciwgJ3RyYW5zbWlzc2lvbicsIHtcblx0XHRjbGVhcnM6IFsndHJhbnNtaXNzaW9uJ10sXG5cdFx0cGFyYW1zOiB7IHllYXI6IHllYXJTZWxlY3QudmFsKCksIG1ha2U6IG1ha2VTZWxlY3QudmFsKCksIG1vZGVsOiBtb2RlbFNlbGVjdC52YWwoKSB9LFxuXHRcdGluaXRpYWxWYXI6IGdldFN0YXRlRm9yRmlsdGVyKGZpbHRlcikuaW5pdGlhbFltbS50cmFuc21pc3Npb24sXG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVQbGF0Zm9ybUJvZGllcyhmaWx0ZXI6IEpRdW
2VyeTxIVE1MRGl2RWxlbWVudD4pOiBKUXVlcnkuanFYSFIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYWtlU2VsZWN0ID0gZ2V0RmlsdGVyKGZpbHRlciwgJ21ha2UnKTtcblx0Y29uc3QgbW9kZWxTZWxlY3QgPSBnZXRGaWx0ZXIoZmlsdGVyLCAnbW9kZWwnKTtcblx0Y29uc3QgeWVhclNlbGVjdCA9IGdldEZpbHRlcihmaWx0ZXIsICd5ZWFyJyk7XG5cdGlmICghbWFrZVNlbGVjdC52YWwoKSB8fCAhbW9kZWxTZWxlY3QudmFsKCkgfHwgIXllYXJTZWxlY3QudmFsKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIHBvcHVsYXRlUGxhdGZvcm1GaWVsZChmaWx0ZXIsICdib2R5Jywge1xuXHRcdGNsZWFyczogWydib2R5J10sXG5cdFx0cGFyYW1zOiB7IHllYXI6IHllYXJTZWxlY3QudmFsKCksIG1ha2U6IG1ha2VTZWxlY3QudmFsKCksIG1vZGVsOiBtb2RlbFNlbGVjdC52YWwoKSB9LFxuXHRcdGluaXRpYWxWYXI6IGdldFN0YXRlRm9yRmlsdGVyKGZpbHRlcikuaW5pdGlhbFltbS5ib2R5LFxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhc2NhZGVPcHRpb25hbEZpZWxkcyhjb250YWluZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4sIGNoYW5nZWRGaWVsZDogWU1NRmllbGQpOiBKUXVlcnkuanFYSFJbXSB7XG5cdGNvbnN0IHhocnM6IEpRdWVyeS5qcVhIUltdID0gW107XG5cdGNvbnN0IHZlaGljbGUgPSBnZXRWZWhpY2xlRnJvbUZpbHRlcihjb250YWluZXIpO1xuXHRpZiAoIXZlaGljbGUueWVhciB8fCAhdmVoaWNsZS5tYWtlIHx8ICF2ZWhpY2xlLm1vZGVsKSB7XG5cdFx0cmV0dXJuIHhocnM7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIE9QVElPTkFMX0ZJRUxEUykge1xuXHRcdGlmIChmaWVsZCA9PT0gY2hhbmdlZEZpZWxkKSBjb250aW51ZTtcblx0XHRpZiAoY29udGFpbmVyLmZpbmQoYC55bW0tZmlsdGVyLSR7ZmllbGR9YCkubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuXHRcdGNvbnN0IHBhcmFtczogUGFydGlhbDxSZWNvcmQ8WU1NRmllbGQsIHN0cmluZz4+ID0ge1xuXHRcdFx0eWVhcjogdmVoaWNsZS55ZWFyLFxuXHRcdFx0bWFrZTogdmVoaWNsZS5tYWtlLFxuXHRcdFx0bW9kZWw6IHZlaGljbGUubW9kZWwsXG5cdFx0fTtcblx0XHRmb3IgKGNvbnN0IG90aGVyIG9mIE9QVElPTkFMX0ZJRUxEUykge1xuXHRcdFx0aWYgKG90aGVyID09PSBmaWVsZCkgY29udGludWU7XG5cdFx0XHRpZiAodmVoaWNsZVtvdGhlcl0pIHBhcmFtc1tvdGhlcl0gPSB2ZWhpY2xlW290aGVyXTtcblx0XHR9XG5cblx0XHR4aHJzLnB1c2gocG9wdWxhdGVQbGF0Zm9ybUZpZWxkKGNvbnRhaW5lciwgZmllbGQsIHtcblx0XHRcdGNsZWFyczogW2ZpZWxkXSxcblx0XHRcdHBhcmFtcyxcblx0XHRcdHByZXNlcnZlU2VsZWN0aW9uOiB0cnVlLFxuXHRcdH0pKTtcblx0fVxuXHRyZXR1cm4geGhycztcbn1cbiIsImltcG9ydCB7IFlNTUZpZWxkLCBZTU1fRklFTERTIH0gZnJvbSAnLi4veW1tLWZpbHRlci90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRWZWhpY2xlQ29va2llcyh2ZWhpY2xlPzogUGFydGlhbDxSZWNvcmQ8WU1NRmllbGQsIHN0cmluZz4+KTogdm9pZCB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgWU1NX0ZJRUxEUykge1xuXHRcdGlmICh2ZWhpY2xlICYmIHZlaGljbGVbZmllbGRdKSB7XG5cdFx0XHRDb29raWVzLnNldChmaWVsZCwgdmVoaWNsZVtmaWVsZF0hLCB7IHBhdGg6ICcvJyB9LCAnQzAwMDMnKTtcblx0XHRcdGlmIChmaWVsZCA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdC8vIFdoZW4gc2V0dGluZyBhIHllYXIsIGFsc28gc2V0IHRoZSBcInNob3Agd2l0aG91dCB2ZWhpY2xlXCIgc3RhdGUgdG8gZmFsc2Vcblx0XHRcdFx0Q29va2llcy5zZXQoJ3Nob3BXaXRob3V0VmVoaWNsZScsICdmYWxzZScsIHsgcGF0aDogJy8nIH0sICdDMDAwMycpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb29raWVzLnNldChmaWVsZCwgbnVsbCwgeyBwYXRoOiAnLycsIGV4cGlyZXM6IC0xIH0sICdDMDAwMycpO1xuXHRcdH1cblx0fVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGlzTG9nZ2VkSW4oKSB7XG5cdHJldHVybiBDb29raWVzLmdldCgnd2Vic2l0ZUN1c3RvbWVyU2Vzc2lvbk5hbWUnKSAhPT0gdW5kZWZpbmVkO1xufVxuIiwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEN1c3RvbWVyVmVoaWNsZShcblx0c291cmNlOiBudW1iZXIsXG5cdHllYXI6IG51bWJlciB8IHN0cmluZyxcblx0bWFrZTogc3RyaW5nLFxuXHRtb2RlbDogc3RyaW5nLFxuXHRlbmdpbmU6IHN0cmluZyB8IG51bGwsXG5cdGZvcm1JZDogbnVtYmVyIHwgbnVsbCA9IG51bGwsXG5cdHNraXBEYjogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0aWYgKENvb2tpZXMuZ2V0KCdXZWJzaXRlQ3VzdG9tZXJTZXNzaW9uTmFtZScpID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZmFsc2U7IC8vIFVzZXIgaXMgbm90IGxvZ2dlZCBpbiwgZG8gbm90IGF0dGVtcHQgdG8gYWRkIHZlaGljbGVcblx0fVxuXG5cdGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuXHRcdGFjdGlvbjogJ2FkZF92ZWhpY2xlJyxcblx0XHRmb3JtSWQ6IFN0cmluZyhmb3JtSWQgPz8gJycpLFxuXHRcdHllYXI6IFN0cmluZyh5ZWFyKSxcblx0XHRtYWtlLFxuXHRcdG1vZGVsLFxuXHRcdGVuZ2luZTogZW5naW5lID8/ICcnLFxuXHRcdHNvdXJjZTogU3RyaW5nKHNvdXJjZSksXG5cdFx0a2VlcEZyZXNoOiBTdHJpbmcoTWF0aC5yYW5kb20oKSksXG5cdFx0c2tpcERiOiBTdHJpbmcoc2tpcERiKSxcblx0fSk7XG5cblx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2Fzc2V0cy9waHAvYWNjb3VudC92ZWhpY2xlc2hlbHBlci5waHAnLCB7XG5cdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG5cdFx0fSxcblx0XHRib2R5OiBwYXJhbXMsXG5cdH0pO1xuXG5cdGlmICghcmVzcG9uc2Uub2spIHtcblx0XHRjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIHZlaGljbGU6JywgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgeyB2ZWhpY2xlVVJMUmVwbGFjZW1lbnQgfSBmcm9tICdAL3V0aWwvZW5jb2RlLWRlY29kZSc7XG5pbXBvcnQgeyBnZXRTdGF0ZUZvckZpbHRlciwgZ2V0VmVoaWNsZUZyb21GaWx0ZXIgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBzZXRWZWhpY2xlQ29va2llcyB9IGZyb20gJ0AvdXRpbC9jb29raWVzJztcbmltcG9ydCB7
2IGFkZEN1c3RvbWVyVmVoaWNsZSB9IGZyb20gJ0AvdXRpbC92ZWhpY2xlJztcbmltcG9ydCB7IGlzTG9nZ2VkSW4gfSBmcm9tICdAL3V0aWwvdXNlcic7XG5cbi8qKlxuICogQ2xhc3MgYWRkZWQgdG8gdGhlIGZpbHRlciBjb250YWluZXIgd2hpbGUgYW4gdXBkYXRlR3JpZC9zZWFyY2ggcmVxdWVzdCBpcyBpblxuICogZmxpZ2h0LiBEaXN0aW5jdCBmcm9tIHRoZSBgZGlzYWJsZWRgIGNsYXNzIG9uIGAueW1tLWZpbHRlci1nb2AsIHdoaWNoIGlzIGFcbiAqIHZhbGlkaXR5IHNpZ25hbCAobW9kZWwgaXMvaXNuJ3Qgc2VsZWN0ZWQpIHRvZ2dsZWQgYnkgcGxhdGZvcm0tYmluZGluZ3MudHMuXG4gKi9cbmNvbnN0IElOX0ZMSUdIVF9DTEFTUyA9ICd5bW0tZmlsdGVyLWxvYWRpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdvQWN0aW9uT3B0aW9ucyB7XG5cdHNjcm9sbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlR29BY3Rpb24oZmlsdGVyOiBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+LCBvcHRpb25zOiBHb0FjdGlvbk9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCB7IHNjcm9sbCA9IHRydWUgfSA9IG9wdGlvbnM7XG5cdGNvbnN0IHN0YXRlID0gZ2V0U3RhdGVGb3JGaWx0ZXIoZmlsdGVyKTtcblx0c3dpdGNoIChzdGF0ZS5jb25maWcuZ29BY3Rpb24pIHtcblx0XHRjYXNlICdyZWRpcmVjdCc6XG5cdFx0XHRyZWRpcmVjdFRvUGxhdGZvcm0oZmlsdGVyKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3VwZGF0ZUdyaWQnOlxuXHRcdFx0cnVuR3VhcmRlZChmaWx0ZXIsIChmKSA9PiB1cGRhdGVHcmlkKGYsIHNjcm9sbCkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnc2VhcmNoJzpcblx0XHRcdHJ1bkd1YXJkZWQoZmlsdGVyLCBzZWFyY2hCeVlNTSk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIFByZXZlbnRzIG92ZXJsYXBwaW5nIGludm9jYXRpb25zIG9mIGFuIGFjdGlvbiB0aGF0IGlzc3VlcyBhIGZpcmUtYW5kLWZvcmdldFxuICogQUpBWCByZXF1ZXN0LiBUaGUgYWN0aW9uIHJldHVybnMgYSBqcVhIUiAob3IgdW5kZWZpbmVkIGlmIGl0IHNob3J0LWNpcmN1aXRzXG4gKiBiZWZvcmUgaXNzdWluZyBhIHJlcXVlc3QpOyB3ZSBob2xkIHRoZSBpbi1mbGlnaHQgZmxhZyB1bnRpbCB0aGF0IHByb21pc2VcbiAqIHNldHRsZXMuIFN1YnNlcXVlbnQgY2FsbHMgd2hpbGUgYSByZXF1ZXN0IGlzIGluIGZsaWdodCBhcmUgZHJvcHBlZC5cbiAqL1xuZnVuY3Rpb24gcnVuR3VhcmRlZChmaWx0ZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4sIGFjdGlvbjogKGZpbHRlcjogSlF1ZXJ5PEhUTUxEaXZFbGVtZW50PikgPT4gSlF1ZXJ5LmpxWEhSIHwgdW5kZWZpbmVkKSB7XG5cdGlmIChmaWx0ZXIuaGFzQ2xhc3MoSU5fRkxJR0hUX0NMQVNTKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmaWx0ZXIuYWRkQ2xhc3MoSU5fRkxJR0hUX0NMQVNTKTtcblxuXHRsZXQgcGVuZGluZzogSlF1ZXJ5LmpxWEhSIHwgdW5kZWZpbmVkO1xuXHR0cnkge1xuXHRcdHBlbmRpbmcgPSBhY3Rpb24oZmlsdGVyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGZpbHRlci5yZW1vdmVDbGFzcyhJTl9GTElHSFRfQ0xBU1MpO1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRpZiAocGVuZGluZyAmJiB0eXBlb2YgcGVuZGluZy5hbHdheXMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRwZW5kaW5nLmFsd2F5cygoKSA9PiBmaWx0ZXIucmVtb3ZlQ2xhc3MoSU5fRkxJR0hUX0NMQVNTKSk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQWN0aW9uIGRpZCBub3QgaXNzdWUgYSByZXF1ZXN0IChlLmcuIGVhcmx5IHJldHVybikuIFJlbGVhc2UgdGhlIGd1YXJkXG5cdFx0Ly8gaW1tZWRpYXRlbHkgc28gdGhlIG5leHQgdXNlciBpbnRlcmFjdGlvbiBpc24ndCBibG9ja2VkLlxuXHRcdGZpbHRlci5yZW1vdmVDbGFzcyhJTl9GTElHSFRfQ0xBU1MpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZGlyZWN0VG9QbGF0Zm9ybShmaWx0ZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4pIHtcblx0aWYgKGZpbHRlci5maW5kKCcueW1tLWZpbHRlci1nbycpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgc3RhdGUgPSBnZXRTdGF0ZUZvckZpbHRlcihmaWx0ZXIpO1xuXHRjb25zdCB2ZWhpY2xlID0gZ2V0VmVoaWNsZUZyb21GaWx0ZXIoZmlsdGVyKTtcblx0Y29uc3QgYnJhbmQgPSBTdHJpbmcoZmlsdGVyLmZpbmQoJy5icmFuZCcpLnZhbCgpID8/ICcnKTtcblxuXHRsZXQgcGF0aCA9IGAvJHtzdGF0ZS55bW1QYXRofS9gO1xuXHRpZiAodmVoaWNsZS5tYWtlKSB7XG5cdFx0cGF0aCArPSB2ZWhpY2xlVVJMUmVwbGFjZW1lbnQodmVoaWNsZS5tYWtlKSArICcvJztcblx0XHRpZiAodmVoaWNsZS5tb2RlbCkge1xuXHRcdFx0cGF0aCArPSB2ZWhpY2xlVVJMUmVwbGFjZW1lbnQodmVoaWNsZS5tb2RlbCkgKyAnLyc7XG5cdFx0XHRpZiAodmVoaWNsZS55ZWFyKSB7XG5cdFx0XHRcdHBhdGggKz0gdmVoaWNsZVVSTFJlcGxhY2VtZW50KHZlaGljbGUueWVhcikgKyAnLyc7XG5cblx0XHRcdFx0aWYgKHZlaGljbGUuc3VibW9kZWwpIHtcblx0XHRcdFx0XHRwYXRoICs9ICdzdWJtb2RlbC8nICsgdmVoaWNsZVVSTFJlcGxhY2VtZW50KHZlaGljbGUuc3VibW9kZWwpICsgJy8nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZlaGljbGUuZW5naW5lKSB7XG5cdFx0XHRcdFx0cGF0aCArPSAnZW5naW5lLycgKyB2ZWhpY2xlVVJMUmVwbGFjZW1lbnQodmVoaWNsZS5lbmdpbmUpICsgJy8nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZlaGljbGUudHJhbnNtaXNzaW9uKSB7XG5cdFx0XHRcdFx0cGF0aCArPSAndHJhbnNtaXNzaW9uLycgKyB2ZWhpY2xlVVJMUmVwbGFjZW1lbnQodmVoaWNsZS50cmFuc21pc3Npb24pICsgJy8nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZlaGljbGUuYm9keSkge1xuXHRcdFx0XHRcdHBhdGggKz0gJ2JvZHkvJyArIHZlaGljbGVVUkxSZXBsYWNlbWVudCh2ZWhpY2xlLmJvZHkpICsgJy8nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFkZEN1c3RvbWVyVmVoaWNsZSgyLCB2ZWhpY2xlLnllYXIsIHZlaGljbGUubWFrZSwgdmVoaWNsZS5tb2RlbCwgdmVoaWNsZS5lbmdpbmUgPz8gJycsIG51bGwsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYnJhbmQpIHtcblx0XHRwYXRoID0gYC9
2icmFuZHMvJHticmFuZH0ke3BhdGh9YDtcblx0fVxuXHRpZiAoJCgnYm9keScpLmhhc0NsYXNzKCdjYXRlZ29yeS1wYWdlJykpIHtcblx0XHRsZXQgY3VycmVudFBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoJy8nKTtcblx0XHRsZXQgaW5kZXggPSBjdXJyZW50UGF0aC5pbmRleE9mKCdwcm9kdWN0cycpO1xuXHRcdHBhdGggKz0gY3VycmVudFBhdGguc2xpY2UoaW5kZXgsIC0xKS5qb2luKCcvJykgKyAnLyc7XG5cdH1cblxuXHRpZiAoQ29va2llcy5nZXQoJ3Nob3BXaXRob3V0VmVoaWNsZScpICE9PSAndHJ1ZScgfHwgIWlzTG9nZ2VkSW4oKSkge1xuXHRcdHNldFZlaGljbGVDb29raWVzKHZlaGljbGUpO1xuXHR9XG5cblx0YXdhaXQgZ3RtRXZlbnQoJ2ZpbmRfeW91cl9wYXJ0c19maWx0ZXInLCB7XG5cdFx0ZXZlbnREYXRhOiB7XG5cdFx0XHRsb2NhdGlvbjogcGF0aCxcblx0XHRcdHZlaGljbGU6IHZlaGljbGUsXG5cdFx0fSxcblx0fSk7XG5cblx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYXRoO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVHcmlkKGZpbHRlcjogSlF1ZXJ5PEhUTUxEaXZFbGVtZW50Piwgc2Nyb2xsID0gdHJ1ZSk6IEpRdWVyeS5qcVhIUiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHZlaGljbGUgPSBnZXRWZWhpY2xlRnJvbUZpbHRlcihmaWx0ZXIpO1xuXHRzZXRWZWhpY2xlQ29va2llcyh2ZWhpY2xlKTtcblxuXHRndG1FdmVudCgnZmluZF95b3VyX3BhcnRzX2ZpbHRlcicsIHtcblx0XHRldmVudERhdGE6IHtcblx0XHRcdGxvY2F0aW9uOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXG5cdFx0XHR2ZWhpY2xlOiB2ZWhpY2xlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdGlmICh2ZWhpY2xlLnllYXIgJiYgdmVoaWNsZS5tYWtlICYmIHZlaGljbGUubW9kZWwpIHtcblx0XHRhZGRDdXN0b21lclZlaGljbGUoMiwgdmVoaWNsZS55ZWFyLCB2ZWhpY2xlLm1ha2UsIHZlaGljbGUubW9kZWwsIHZlaGljbGUuZW5naW5lID8/ICcnLCBudWxsLCB0cnVlKTtcblx0fVxuXG5cdC8vIFRPRE86IENoYW5nZSB0aGlzIG9uY2UgdGhlIGZpbHRlciBncmlkIGlzIHBvcnRlZCB0byBUU1xuXHRjb25zdCBncmlkT2JqID0gJCgnLnByb2R1Y3QtcmVzdWx0cy12aWV3Jyk7XG5cdGNvbnN0IGF0dHIgPSAkKCcjZmlsdGVyYXR0cmlidXRlcycpO1xuXHRjb25zdCB4aHIgPSBmaWx0ZXJieXltbShncmlkT2JqLCBhdHRyLCBmaWx0ZXIpO1xuXG5cdGlmICghc2Nyb2xsKSB7XG5cdFx0cmV0dXJuIHhocjtcblx0fVxuXHRjb25zdCBmaWx0ZXJHcmlkID0gJCgnLndpZGdldC5maWx0ZXItZ3JpZCcpO1xuXHRjb25zdCBncmlkT2Zmc2V0ID0gZmlsdGVyR3JpZC5vZmZzZXQoKTtcblx0Y29uc3Qgd2luZG93VG9wID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xuXHRjb25zdCB3aW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG5cdGlmICghZ3JpZE9mZnNldCB8fCB3aW5kb3dUb3AgPT09IHVuZGVmaW5lZCB8fCB3aW5kb3dIZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB4aHI7XG5cdH1cblx0Y29uc3QgY1RvcCA9IGdyaWRPZmZzZXQudG9wO1xuXHRjb25zdCBjQm90ID0gZ3JpZE9mZnNldC50b3AgKyAoZmlsdGVyR3JpZC5vdXRlckhlaWdodCh0cnVlKSA/PyAwKTtcblx0Y29uc3Qgd2luZG93Qm90ID0gd2luZG93VG9wICsgd2luZG93SGVpZ2h0O1xuXG5cdGlmICgoY1RvcCA+IHdpbmRvd0JvdCB8fCBjQm90IDwgd2luZG93VG9wKSAmJiBmaWx0ZXJHcmlkLmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0JCgnaHRtbCwgYm9keScpLmFuaW1hdGUoXG5cdFx0XHR7XG5cdFx0XHRcdHNjcm9sbFRvcDogZ3JpZE9mZnNldC50b3AsXG5cdFx0XHR9LFxuXHRcdFx0MjUwXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiB4aHI7XG59XG5cbmZ1bmN0aW9uIHNlYXJjaEJ5WU1NKF9maWx0ZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4pOiBKUXVlcnkuanFYSFIgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2ZWhpY2xlID0gZ2V0VmVoaWNsZUZyb21GaWx0ZXIoX2ZpbHRlcik7XG5cblx0Ly8gUGVyc2lzdCB2ZWhpY2xlIHNpdGV3aWRlIGZvciBsb2dnZWQtb3V0IHVzZXJzXG5cdHNldFZlaGljbGVDb29raWVzKHZlaGljbGUpO1xuXG5cdGd0bUV2ZW50KCdmaW5kX3lvdXJfcGFydHNfZmlsdGVyJywge1xuXHRcdGV2ZW50RGF0YToge1xuXHRcdFx0bG9jYXRpb246IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcblx0XHRcdHZlaGljbGU6IHZlaGljbGUsXG5cdFx0fSxcblx0fSk7XG5cblx0cmV0dXJuIHBlcmZvcm1TZWFyY2goKTtcbn1cbiIsImltcG9ydCB7IFlNTUZpZWxkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcblx0cG9wdWxhdGVQbGF0Zm9ybU1ha2VzLFxuXHRwb3B1bGF0ZVBsYXRmb3JtTW9kZWxzLFxuXHRwb3B1bGF0ZVBsYXRmb3JtRW5naW5lcyxcblx0cG9wdWxhdGVQbGF0Zm9ybVRyYW5zbWlzc2lvbnMsXG5cdHBvcHVsYXRlUGxhdGZvcm1Cb2RpZXMsXG5cdHBvcHVsYXRlUGxhdGZvcm1TdWJtb2RlbHMsXG5cdHJlcGxhY2VQbGF0Zm9ybUZpbHRlcixcblx0Y2FzY2FkZU9wdGlvbmFsRmllbGRzLFxufSBmcm9tICcuL3BvcHVsYXRlLWZpZWxkcyc7XG5pbXBvcnQgeyBleGVjdXRlQ2xlYXJBY3Rpb24gfSBmcm9tICcuL2NsZWFyLWFjdGlvbic7XG5pbXBvcnQgeyBleGVjdXRlR29BY3Rpb24sIEdvQWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vZ28tYWN0aW9uJztcbmltcG9ydCB7IGdldFN0YXRlRm9yRmlsdGVyLCB1cGRhdGVJbml0aWFsWW1tIH0gZnJvbSAnLi4vc3Rh
2dGUnO1xuXG5jb25zdCBGSUxURVJfUE9QVUxBVEVfTUFQOiBQYXJ0aWFsPFJlY29yZDxZTU1GaWVsZCwgKGZpbHRlcjogSlF1ZXJ5PEhUTUxEaXZFbGVtZW50PikgPT4gSlF1ZXJ5LmpxWEhSIHwgdW5kZWZpbmVkPj4gPSB7XG5cdHllYXI6IHBvcHVsYXRlUGxhdGZvcm1NYWtlcyxcblx0bWFrZTogcG9wdWxhdGVQbGF0Zm9ybU1vZGVscyxcbn0gYXMgY29uc3Q7XG5jb25zdCBMQVNUX1JFUVVJUkVEX0ZJRUxEOiBZTU1GaWVsZCA9ICdtb2RlbCcgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFkZEZpbHRlckNoYW5nZUxpc3RlbmVyKGZpbHRlcjogSlF1ZXJ5PEhUTUxTZWxlY3RFbGVtZW50PiwgZmlsdGVyVHlwZTogWU1NRmllbGQsIGRvd25zdHJlYW1GaWx0ZXJzOiBZTU1GaWVsZFtdKSB7XG5cdHZhciB2ZWhpY2xlRmlsdGVyOiBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+ID0gJChmaWx0ZXIpLmNsb3Nlc3QoJ2Rpdi5maWx0ZXJzJyk7XG5cblx0dXBkYXRlSW5pdGlhbFltbSh2ZWhpY2xlRmlsdGVyLCBmaWx0ZXJUeXBlLCBTdHJpbmcoJChmaWx0ZXIpLnZhbCgpID8/ICcnKSk7XG5cblx0JCh2ZWhpY2xlRmlsdGVyKS5maW5kKCcueW1tLWZpbHRlci1nbycpLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuXG5cdGlmIChmaWx0ZXJUeXBlID09PSBMQVNUX1JFUVVJUkVEX0ZJRUxEKSB7XG5cdFx0aWYgKCQoZmlsdGVyKS52YWwoKSkge1xuXHRcdFx0dmVoaWNsZUZpbHRlci5maW5kKCcueW1tLWZpbHRlci1nbycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWhpY2xlRmlsdGVyLmZpbmQoJy55bW0tZmlsdGVyLWdvJykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgcGVuZGluZ1BvcHVsYXRlczogSlF1ZXJ5LmpxWEhSW10gPSBbXTtcblx0aWYgKEZJTFRFUl9QT1BVTEFURV9NQVBbZmlsdGVyVHlwZV0pIHtcblx0XHRpZiAoJChmaWx0ZXIpLnZhbCgpKSB7XG5cdFx0XHRjb25zdCB4aHIgPSBGSUxURVJfUE9QVUxBVEVfTUFQW2ZpbHRlclR5cGVdKHZlaGljbGVGaWx0ZXIpO1xuXHRcdFx0aWYgKHhocikgcGVuZGluZ1BvcHVsYXRlcy5wdXNoKHhocik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgZG93bnN0cmVhbUZpbHRlciBvZiBkb3duc3RyZWFtRmlsdGVycykge1xuXHRcdFx0XHRyZXBsYWNlUGxhdGZvcm1GaWx0ZXIodmVoaWNsZUZpbHRlciwgZG93bnN0cmVhbUZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICh2ZWhpY2xlRmlsdGVyLmZpbmQoJy55bW0tZmlsdGVyLXN1Ym1vZGVsJykubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgeGhyID0gcG9wdWxhdGVQbGF0Zm9ybVN1Ym1vZGVscyh2ZWhpY2xlRmlsdGVyKTtcblx0XHRcdGlmICh4aHIpIHBlbmRpbmdQb3B1bGF0ZXMucHVzaCh4aHIpO1xuXHRcdH1cblx0XHRpZiAodmVoaWNsZUZpbHRlci5maW5kKCcueW1tLWZpbHRlci1lbmdpbmUnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCB4aHIgPSBwb3B1bGF0ZVBsYXRmb3JtRW5naW5lcyh2ZWhpY2xlRmlsdGVyKTtcblx0XHRcdGlmICh4aHIpIHBlbmRpbmdQb3B1bGF0ZXMucHVzaCh4aHIpO1xuXHRcdH1cblx0XHRpZiAodmVoaWNsZUZpbHRlci5maW5kKCcueW1tLWZpbHRlci1ib2R5JykubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgeGhyID0gcG9wdWxhdGVQbGF0Zm9ybUJvZGllcyh2ZWhpY2xlRmlsdGVyKTtcblx0XHRcdGlmICh4aHIpIHBlbmRpbmdQb3B1bGF0ZXMucHVzaCh4aHIpO1xuXHRcdH1cblx0XHRpZiAodmVoaWNsZUZpbHRlci5maW5kKCcueW1tLWZpbHRlci10cmFuc21pc3Npb24nKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCB4aHIgPSBwb3B1bGF0ZVBsYXRmb3JtVHJhbnNtaXNzaW9ucyh2ZWhpY2xlRmlsdGVyKTtcblx0XHRcdGlmICh4aHIpIHBlbmRpbmdQb3B1bGF0ZXMucHVzaCh4aHIpO1xuXHRcdH1cblx0fVxuXHRzY2hlZHVsZUV4ZWN1dGVBZnRlcihmaWx0ZXIsIHBlbmRpbmdQb3B1bGF0ZXMpO1xufVxuXG5jb25zdCBwb3B1bGF0ZUluRmxpZ2h0ID0gbmV3IFdlYWtNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbmNvbnN0IHBlbmRpbmdFeGVjdXRlRmlsdGVyID0gbmV3IFdlYWtNYXA8SFRNTEVsZW1lbnQsIEpRdWVyeTxIVE1MU2VsZWN0RWxlbWVudD4+KCk7XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRXhlY3V0ZUFmdGVyKGZpbHRlcjogSlF1ZXJ5PEhUTUxTZWxlY3RFbGVtZW50PiwgeGhyczogSlF1ZXJ5LmpxWEhSW10pIHtcblx0Y29uc3Qga2V5ID0gZmlsdGVyLmNsb3Nlc3QoJy5maWx0ZXJzJykuZ2V0KDApO1xuXHRpZiAoIWtleSkge1xuXHRcdGV4ZWN1dGVJZk5lZWRlZChmaWx0ZXIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh4aHJzLmxlbmd0aCA+IDApIHtcblx0XHRwb3B1bGF0ZUluRmxpZ2h0LnNldChrZXksIChwb3B1bGF0ZUluRmxpZ2h0LmdldChrZXkpID8/IDApICsgeGhycy5sZW5ndGgpO1xuXHRcdGZvciAoY29uc3QgeGhyIG9mIHhocnMpIHtcblx0XHRcdHhoci5hbHdheXMoKCkgPT4gb25Qb3B1bGF0ZVNldHRsZShrZXkpKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoKHBvcHVsYXRlSW5GbGlnaHQuZ2V0KGtleSkgPz8gMCkgPiAwKSB7XG5cdFx0cGVuZGluZ0V4ZWN1dGVGaWx0ZXIuc2V0KGtleSwgZmlsdGVyKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRleGVjdXRlSWZOZWVkZWQoZmlsdGVyKTtcbn1cblxuZnVuY3Rpb24gb25Qb3B1bGF0ZVNldHRsZShrZXk6IEhUTUxFbGVtZW50KSB7XG5cdGNvbnN0IHJlbWFpbmluZyA9IChwb3B1bGF0ZUluRmxpZ2h0LmdldChrZXkpID8/IDEpIC0gMTtcblx0aWYgKHJlbWFpbmluZyA+IDApIHtcblx0XHRwb3B1bGF0ZUluRmxpZ2h0LnNldChrZXksIHJlbWFpbmluZyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHBvcHVsYXRlSW5GbGlnaHQuZGVsZXRlKGtleSk7XG5cdGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nRXhlY3V0ZUZpbHRlci5nZXQoa2V5KTtcblx0aWYgKHBlbmRpbmcpIHtcblx0XHRwZW5kaW5nRXhlY3V0ZUZpbHRlci5kZWxldGUoa2V5KTtcblx0XHRleGVjdXRlSWZOZWVkZWQocGVuZGluZyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkRXhlY3V0ZUdvQWN0aW9uT25DaGFuZ2UoZmlsdGVyOiBKUXVlcnk8SFRNTFNlbGVjdEVsZW1lbnQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IHN0YXRlID0gZ2V0U3RhdGVGb3JGaWx0ZXIoZmlsdGVyLmNsb3Nlc3QoJy5maWx0ZXJzJykpO1xuXHRyZXR1cm4gc3RhdGUuY29uZmlnLmdvQWN0aW9uICE9PSAncmVkaXJlY3QnO1xufVxuXG4vLyBEZWJvdW5jZVxuY29uc3QgQVVUT19GSVJFX0RFQk9VTkNFX01TID0gMjUwO1xuY29uc3QgcGVuZGluZ0V4ZWN1dG
2VUaW1lcnMgPSBuZXcgV2Vha01hcDxIVE1MRWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KCk7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVJZk5lZWRlZChmaWx0ZXI6IEpRdWVyeTxIVE1MU2VsZWN0RWxlbWVudD4pIHtcblx0aWYgKCFzaG91bGRFeGVjdXRlR29BY3Rpb25PbkNoYW5nZSgkKGZpbHRlcikpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IGNvbnRhaW5lciA9ICQoZmlsdGVyKS5jbG9zZXN0KCcuZmlsdGVycycpIGFzIEpRdWVyeTxIVE1MRGl2RWxlbWVudD47XG5cdGNvbnN0IGtleSA9IGNvbnRhaW5lci5nZXQoMCk7XG5cdGlmICgha2V5KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZXhpc3RpbmcgPSBwZW5kaW5nRXhlY3V0ZVRpbWVycy5nZXQoa2V5KTtcblx0aWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRjbGVhclRpbWVvdXQoZXhpc3RpbmcpO1xuXHR9XG5cdGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0cGVuZGluZ0V4ZWN1dGVUaW1lcnMuZGVsZXRlKGtleSk7XG5cdFx0ZXhlY3V0ZUdvQWN0aW9uKGNvbnRhaW5lcik7XG5cdH0sIEFVVE9fRklSRV9ERUJPVU5DRV9NUyk7XG5cdHBlbmRpbmdFeGVjdXRlVGltZXJzLnNldChrZXksIHRpbWVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRGaWx0ZXJDaGFuZ2VzKCkge1xuXHQkKCcueW1tLWZpbHRlci15ZWFyJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uICh0aGlzOiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdGFkZEZpbHRlckNoYW5nZUxpc3RlbmVyKCQodGhpcyksICd5ZWFyJywgWydtYWtlJywgJ21vZGVsJywgJ3N1Ym1vZGVsJywgJ2VuZ2luZScsICd0cmFuc21pc3Npb24nLCAnYm9keSddKTtcblx0fSk7XG5cdCQoJy55bW0tZmlsdGVyLW1ha2UnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKHRoaXM6IEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0YWRkRmlsdGVyQ2hhbmdlTGlzdGVuZXIoJCh0aGlzKSwgJ21ha2UnLCBbJ21vZGVsJywgJ3N1Ym1vZGVsJywgJ2VuZ2luZScsICd0cmFuc21pc3Npb24nLCAnYm9keSddKTtcblx0fSk7XG5cdCQoJy55bW0tZmlsdGVyLW1vZGVsJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uICh0aGlzOiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdGFkZEZpbHRlckNoYW5nZUxpc3RlbmVyKCQodGhpcyksICdtb2RlbCcsIFtdKTtcblx0fSk7XG5cdGNvbnN0IE9QVElPTkFMX0JJTkRJTkdTOiBBcnJheTx7IHNlbGVjdG9yOiBzdHJpbmc7IGZpZWxkOiBZTU1GaWVsZCB9PiA9IFtcblx0XHR7IHNlbGVjdG9yOiAnLnltbS1maWx0ZXItc3VibW9kZWwnLCBmaWVsZDogJ3N1Ym1vZGVsJyB9LFxuXHRcdHsgc2VsZWN0b3I6ICcueW1tLWZpbHRlci1lbmdpbmUnLCBmaWVsZDogJ2VuZ2luZScgfSxcblx0XHR7IHNlbGVjdG9yOiAnLnltbS1maWx0ZXItdHJhbnNtaXNzaW9uJywgZmllbGQ6ICd0cmFuc21pc3Npb24nIH0sXG5cdFx0eyBzZWxlY3RvcjogJy55bW0tZmlsdGVyLWJvZHknLCBmaWVsZDogJ2JvZHknIH0sXG5cdF07XG5cdGZvciAoY29uc3QgeyBzZWxlY3RvciwgZmllbGQgfSBvZiBPUFRJT05BTF9CSU5ESU5HUykge1xuXHRcdCQoc2VsZWN0b3IpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAodGhpczogSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcblx0XHRcdGNvbnN0IHhocnMgPSBjYXNjYWRlT3B0aW9uYWxGaWVsZHMoJHRoaXMuY2xvc2VzdCgnZGl2LmZpbHRlcnMnKSBhcyBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+LCBmaWVsZCk7XG5cdFx0XHRzY2hlZHVsZUV4ZWN1dGVBZnRlcigkdGhpcywgeGhycyk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRDbGlja0hhbmRsZXJzKCkge1xuXHQkKCcueW1tLWZpbHRlci1nbycpXG5cdFx0Lm9mZigpXG5cdFx0Lm9uKCdjbGljaycsIGZ1bmN0aW9uIChfZXZlbnQsIG9wdGlvbnM6IEdvQWN0aW9uT3B0aW9ucyA9IHt9KSB7XG5cdFx0XHRleGVjdXRlR29BY3Rpb24oJCh0aGlzKS5jbG9zZXN0KCcuZmlsdGVycycpLCBvcHRpb25zKTtcblx0XHR9KTtcblxuXHQkKCcueW1tLWZpbHRlci1jbGVhcicpXG5cdFx0Lm9mZigpXG5cdFx0Lm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGV4ZWN1dGVDbGVhckFjdGlvbigkKHRoaXMpLmNsb3Nlc3QoJy5maWx0ZXJzJykpO1xuXHRcdH0pO1xufVxuIiwiaW1wb3J0IHsgWU1NX0ZJRUxEUywgWU1NRmllbGQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJpbmRDbGlja0hhbmRsZXJzLCBiaW5kRmlsdGVyQ2hhbmdlcyB9IGZyb20gJy4vdXRpbC9wbGF0Zm9ybS1iaW5kaW5ncyc7XG5pbXBvcnQgeyBzZXRGaWx0ZXJTdGF0ZSwgWW1tRmlsdGVyQ29uZmlnLCBZbW1GaWx0ZXJTdGF0ZSB9IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHsgZ2V0UGFnZVR5cGUgfSBmcm9tICdAL3V0aWwvZG9tJztcbmltcG9ydCB7IHNldFZlaGljbGVDb29raWVzIH0gZnJvbSAnQC91dGlsL2Nvb2tpZXMnO1xuaW1wb3J0IHsgZ2V0RmlsdGVyIH0gZnJvbSAnLi91dGlsL2ZpbHRlcnMnO1xuXG4kKGZ1bmN0aW9uICgpIHtcblx0YmluZEZpbHRlckNoYW5nZXMoKTtcblx0YmluZENsaWNrSGFuZGxlcnMoKTtcblxuXHQkKCcuZmlsdGVyX2Rpdi5maWx0ZXJfcGxhdGZvcm0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCB3aWRnZXRSb290ID0gJCh0aGlzKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IHdpZGdldFJvb3QuZmluZCgndGVtcGxhdGUudHMtYnVuZGxlLWRhdGFbZGF0YS10cy1idW5kbGU9XCJ5bW0tZmlsdGVyL2luZGV4XCJdJykuZmlyc3QoKTtcblx0XHRpZiAodGVtcGxhdGUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYnVuZGxlRGF0YSA9IHRlbXBsYXRlLmRhdGEoKSBhcyB7XG5cdFx0XHR5ZWFyPzogc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcblx0XHRcdG1ha2U/OiBzdHJpbmc7XG5cdFx0XHRtb2RlbD86IHN0cmluZztcblx0XHRcdHN1Ym1vZGVsPzogc3RyaW5nO1xuXHRcdFx0ZW5naW5lPzogc3RyaW5nO1xuXHRcdFx0dHJhbnNtaXNzaW9uPzogc3RyaW5nO1xuXHRcdFx0Ym9keT86IHN0cmluZztcblx0XHRcdHltbVBhdGg/OiBzdHJpbmc7XG5cdFx0XHRnb0FjdGlvbj86IFltbUZpbHRlckNvbmZpZ1snZ29BY3Rpb24nXTtcblx0XHRcdGNsZWFyQWN0aW9uPzogWW1tRmlsdGVyQ29uZmlnWydjbGVhckFjdGlvbiddO1xuXHRcdH07XG5cblx0XHRjb25zdCBpbml0aWFsWW1tOiBQYXJ0aWFsPFJlY29yZDxZTU1GaWVsZCwgc3RyaW5nPj4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIFlNTV9GSUVMRFMpIHtcblx0XHRcdGlmIChidW5kbGVEYXRhW2ZpZWxkIGFzIFlNTUZpZWxkXSkge1xuXHRcdFx0XHRpbml0aWFsWW1tW2ZpZWxkIGFzIFlNTUZpZWxkXSA9IFN0cmluZyhidW5kbGVEYXRhW2ZpZWxkIGFzIFlNTUZpZWxkXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhdGU6IFltbUZpbHRlclN0YXRlID0ge1xuXHRcdFx0eW1tUGF0aDogYnVuZGxlRGF0YVsneW1tUGF0aCddID8/ICdwbGF0Zm9ybScsXG5cdFx0XHRpbml0aWFsWW1tLFxuXHRcdFx0Y29uZmlnOiB7XG5cdFx0XHRcdGdvQWN0aW9uOiBidW5kbGVEYXRhWydnb0FjdGlvbiddID8/ICdyZWRpcmVjdCcsXG5cdFx0XHRcdGNsZWFyQWN0aW9uOiBidW5kbGVEYXRhWydjbGVhckFjdGlvbiddID8/ICdyZWRpcmVjdCcsXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRjb25zdCBzaXRld2lkZUZpdG1lbnRFbmFibGVkID0gJCgnI3NpdGV3aWRlLWZpdG
21lbnQtY29tcG9uZW50JykubGVuZ3RoID4gMDtcblx0XHRjb25zdCBzaG9wV2l0aG91dFZlaGljbGUgPSBDb29raWVzLmdldCgnc2hvcFdpdGhvdXRWZWhpY2xlJyk7XG5cdFx0Y29uc3QgZml0bWVudEVuYWJsZWRBbmRTaG9wcGluZ0J5VmVoaWNsZSA9IHNpdGV3aWRlRml0bWVudEVuYWJsZWQgJiYgKHNob3BXaXRob3V0VmVoaWNsZSA9PT0gJ2ZhbHNlJyB8fCBzaG9wV2l0aG91dFZlaGljbGUgPT09IHVuZGVmaW5lZCk7XG5cblx0XHQvLyBXaXRob3V0IHRoaXMgZ3VhcmQsIHN3aXRjaGluZyBmcm9tIGUuZy4gYSBDb3J2ZXR0ZSB0byBhIFdyYW5nbGVyIGNvdWxkXG5cdFx0Ly8gcHVsbCBpbiB0aGUgcHJldmlvdXMgZW5naW5lIHNsdWcgd2hlbiB0aGUgVVJMIGxhbmRzIHdpdGhvdXQgYW4gZW5naW5lIHNlZ21lbnQuXG5cdFx0aWYgKGdldFBhZ2VUeXBlKCkgPT09ICdwbGF0Zm9ybScgJiYgZml0bWVudEVuYWJsZWRBbmRTaG9wcGluZ0J5VmVoaWNsZSkge1xuXHRcdFx0Y29uc3QgY29va2llTWF0Y2hlc1VybCA9XG5cdFx0XHRcdCEhc3RhdGUuaW5pdGlhbFltbS5tYWtlICYmXG5cdFx0XHRcdHN0YXRlLmluaXRpYWxZbW0ubWFrZSA9PT0gQ29va2llcy5nZXQoJ21ha2UnKSAmJlxuXHRcdFx0XHQhIXN0YXRlLmluaXRpYWxZbW0ubW9kZWwgJiZcblx0XHRcdFx0c3RhdGUuaW5pdGlhbFltbS5tb2RlbCA9PT0gQ29va2llcy5nZXQoJ21vZGVsJykgJiZcblx0XHRcdFx0U3RyaW5nKHN0YXRlLmluaXRpYWxZbW0ueWVhciA/PyAnJykgPT09IFN0cmluZyhDb29raWVzLmdldCgneWVhcicpID8/ICcnKTtcblxuXHRcdFx0aWYgKGNvb2tpZU1hdGNoZXNVcmwpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBmaWVsZCBvZiBbJ2VuZ2luZScsICd0cmFuc21pc3Npb24nLCAnYm9keScsICdzdWJtb2RlbCddIGFzIGNvbnN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29va2llVmFsdWUgPSBDb29raWVzLmdldChmaWVsZCk7XG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5pbml0aWFsWW1tW2ZpZWxkXSAmJiBjb29raWVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUuaW5pdGlhbFltbVtmaWVsZF0gPSBjb29raWVWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRGaWx0ZXJTdGF0ZSh3aWRnZXRSb290LCBzdGF0ZSk7XG5cblx0XHRpZiAoc2hvcFdpdGhvdXRWZWhpY2xlICE9PSAndHJ1ZScgJiYgc3RhdGUuaW5pdGlhbFltbS55ZWFyICYmIHN0YXRlLmluaXRpYWxZbW0ubWFrZSAmJiBzdGF0ZS5pbml0aWFsWW1tLm1vZGVsKSB7XG5cdFx0XHRzZXRWZWhpY2xlQ29va2llcyhzdGF0ZS5pbml0aWFsWW1tKTtcblx0XHR9XG5cblx0XHRpbml0UGxhdGZvcm1GaWx0ZXIod2lkZ2V0Um9vdCwgc3RhdGUpO1xuXHRcdGlmIChzdGF0ZS5jb25maWcuZ29BY3Rpb24gPT09ICd1cGRhdGVHcmlkJykge1xuXHRcdFx0JCh3aWRnZXRSb290KVxuXHRcdFx0XHQuZmluZCgnLnltbS1maWx0ZXItZ28nKVxuXHRcdFx0XHQudHJpZ2dlcignY2xpY2snLCBbeyBzY3JvbGw6IGZhbHNlIH1dKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0UGxhdGZvcm1GaWx0ZXIod2lkZ2V0Um9vdDogSlF1ZXJ5LCBzdGF0ZTogWW1tRmlsdGVyU3RhdGUpOiB2b2lkIHtcblx0aWYgKCFzdGF0ZS5pbml0aWFsWW1tLnllYXIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBQSFAgcHJlLXJlbmRlcnMgdGhlIGNhc2NhZGluZyBkcm9wZG93bnMgd2l0aCBvcHRpb25zICsgc2VsZWN0ZWQgdmFsdWVzIHdoZW4gdGhlIFlNTVxuXHQvLyByZXNvbHZlcyB0byBhIHJlYWwgdmVoaWNsZS4gRGV0ZWN0IHRoYXQgYW5kIHNraXAgb3VyIG93biBBSkFYIGNhc2NhZGUuXG5cdGNvbnN0IHllYXJTZWxlY3RzID0gZ2V0RmlsdGVyKHdpZGdldFJvb3QgYXMgSlF1ZXJ5PEhUTUxEaXZFbGVtZW50PiwgJ3llYXInKTtcblx0Y29uc3QgZmlyc3RZZWFyVmFsID0gU3RyaW5nKHllYXJTZWxlY3RzLmZpcnN0KCkudmFsKCkgPz8gJycpO1xuXG5cdGNvbnN0IGluaXRpYWxZZWFycyA9IEFycmF5LmlzQXJyYXkoc3RhdGUuaW5pdGlhbFltbS55ZWFyKSA/IHN0YXRlLmluaXRpYWxZbW0ueWVhciA6IFtzdGF0ZS5pbml0aWFsWW1tLnllYXJdO1xuXHRjb25zdCBzZXJ2ZXJSZW5kZXJlZCA9IGZpcnN0WWVhclZhbCAhPT0gJycgJiYgaW5pdGlhbFllYXJzLnNvbWUoKHllYXIpID0+IFN0cmluZyh5ZWFyKSA9PT0gZmlyc3RZZWFyVmFsKTtcblxuXHRpZiAoc2VydmVyUmVuZGVyZWQpIHtcblx0XHR5ZWFyU2VsZWN0cy5lYWNoKGZ1bmN0aW9uIChfLCB5ZWFyU2VsZWN0KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJDb250YWluZXIgPSAkKHllYXJTZWxlY3QpLmNsb3Nlc3QoJ2Rpdi5maWx0ZXJzJyk7XG5cdFx0XHRpZiAoZmlsdGVyQ29udGFpbmVyLmZpbmQoJy55bW0tZmlsdGVyLW1vZGVsJykudmFsKCkpIHtcblx0XHRcdFx0ZmlsdGVyQ29udGFpbmVyLmZpbmQoJy55bW0tZmlsdGVyLWdvJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgeWVhciA9IHN0YXRlLmluaXRpYWxZbW0ueWVhcjtcblx0eWVhclNlbGVjdHMuZWFjaChmdW5jdGlvbiAoXywgeWVhclNlbGVjdCkge1xuXHRcdCQoeWVhclNlbGVjdClcblx0XHRcdC52YWwoeWVhciBhcyBKUXVlcnkuVHlwZU9yQXJyYXk8c3RyaW5nPilcblx0XHRcdC50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0fSk7XG59XG4iLCJpbXBvcnQgeyBzZXRWZWhpY2xlQ29va2llcyB9IGZyb20gJ0AvdXRpbC9jb29raWVzJztcbmltcG9ydCB7IGNsZWFySW5pdGlhbFltbSwgZ2V0U3RhdGVGb3JGaWx0ZXIsIFltbUZpbHRlclN0YXRlIH0gZnJvbSAnLi4vc3Rh
2dGUnO1xuaW1wb3J0IHsgZ2V0RmlsdGVyIH0gZnJvbSAnLi9maWx0ZXJzJztcbmltcG9ydCB7IGlzTG9nZ2VkSW4gfSBmcm9tICdAL3V0aWwvdXNlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlQ2xlYXJBY3Rpb24oZmlsdGVyOiBKUXVlcnk8SFRNTERpdkVsZW1lbnQ+KSB7XG5cdGNvbnN0IHN0YXRlID0gZ2V0U3RhdGVGb3JGaWx0ZXIoZmlsdGVyKTtcblx0c3dpdGNoIChzdGF0ZS5jb25maWcuY2xlYXJBY3Rpb24pIHtcblx0XHRjYXNlICdyZWRpcmVjdCc6XG5cdFx0XHRyZWRpcmVjdFRvQmFzZShzdGF0ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdlbXB0eSc6XG5cdFx0XHRlbXB0eUZpbHRlcnMoZmlsdGVyKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlZGlyZWN0VG9CYXNlKHN0YXRlOiBZbW1GaWx0ZXJTdGF0ZSkge1xuXHRzZXRWZWhpY2xlQ29va2llcygpO1xuXHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAvJHtzdGF0ZS55bW1QYXRofWA7XG59XG5cbmZ1bmN0aW9uIGVtcHR5RmlsdGVycyhmaWx0ZXI6IEpRdWVyeTxIVE1MRGl2RWxlbWVudD4pIHtcblx0aWYgKCFpc0xvZ2dlZEluKCkpIHNldFZlaGljbGVDb29raWVzKCk7XG5cdGNsZWFySW5pdGlhbFltbShmaWx0ZXIpO1xuXHRnZXRGaWx0ZXIoZmlsdGVyLCAneWVhcicpLnZhbCgnJykudHJpZ2dlcignY2hhbmdlJyk7XG59XG4iLCJkZWNsYXJlIGNvbnN0ICQ6IEpRdWVyeVN0YXRpYztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VUeXBlKCk6ICdjYXRlZ29yeScgfCAncHJvZHVjdCcgfCAncGxhdGZvcm0nIHwgJ290aGVyJyB7XG5cdGlmIChpc0NhdGVnb3J5UGFnZSgpKSB7XG5cdFx0cmV0dXJuICdjYXRlZ29yeSc7XG5cdH0gZWxzZSBpZiAoaXNQcm9kdWN0UGFnZSgpKSB7XG5cdFx0cmV0dXJuICdwcm9kdWN0Jztcblx0fSBlbHNlIGlmIChpc1BsYXRmb3JtUGFnZSgpKSB7XG5cdFx0cmV0dXJuICdwbGF0Zm9ybSc7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuICdvdGhlcic7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2F0ZWdvcnlQYWdlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gJCgnYm9keScpLmhhc0NsYXNzKCdjYXRlZ29yeS1wYWdlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RQYWdlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gJCgnYm9keScpLmhhc0NsYXNzKCdwcm9kdWN0cGFnZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGF0Zm9ybVBhZ2UoKTogYm9vbGVhbiB7XG5cdHJldHVybiAkKCdib2R5JykuaGFzQ2xhc3MoJ3BsYXRmb3JtJyk7XG59XG5cbmZ1bmN0aW9uIGdldEZpcnN0VmlzaWJsZUhlYWRlckhlaWdodCgpOiBudW1iZXIge1xuXHRjb25zdCBjYW5kaWRhdGVzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmhlYWRlci1jb250YWluZXIsIC5zaW1wbGUtaGVhZGVyLWNvbnRhaW5lcicpKTtcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGNhbmRpZGF0ZXMpIHtcblx0XHQvLyBSb3VnaCBlcXVpdmFsZW50IHRvIGpRdWVyeSA6dmlzaWJsZVxuXHRcdGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGlmIChyZWN0LmhlaWdodCA+IDApIHtcblx0XHRcdHJldHVybiByZWN0LmhlaWdodDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUNzc0lkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgQ1NTPzogeyBlc2NhcGU/OiAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nIH0gfSkuQ1NTPy5lc2NhcGUpIHtcblx0XHRyZXR1cm4gKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgQ1NTOiB7IGVzY2FwZTogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyB9IH0pLkNTUy5lc2NhcGUoaWQpO1xuXHR9XG5cdHJldHVybiBpZC5yZXBsYWNlKC8oWyAjOz8lJiwuKyp+JzpcIiFeJFtcXF0oKT0+fFxcL0BdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmZ1bmN0aW9uIGZvY3VzVGFyZ2V0QWZ0ZXJTY3JvbGwodGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuXHRjb25zdCBoYXNUYWJJbmRleCA9IHRhcmdldC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG5cdGNvbnN0IHByZXZpb3VzVGFiSW5kZXggPSBoYXNUYWJJbmRleCA/IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgOiBudWxsO1xuXG5cdGlmICghaGFzVGFiSW5kZXgpIHtcblx0XHR0YXJnZXQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuXHR9XG5cdHRhcmdldC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG5cblx0aWYgKCFoYXNUYWJJbmRleCAmJiBwcmV2aW91c1RhYkluZGV4ID09PSBudWxsKSB7XG5cdFx0dGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBmdW5jdGlvbiBoYW5kbGVCbHVyKCk6IHZvaWQge1xuXHRcdFx0dGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcblx0XHRcdHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgaGFuZGxlQmx1cik7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmV2ZWFsVGFyZ2V0SW5UYWJXaWRnZXRzKHRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcblx0bGV0IGN1cnJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRhcmdldDtcblxuXHR3aGlsZSAoY3VycmVudCkge1xuXHRcdGNvbnN0IHBhbmVsID0gY3VycmVudC5jbG9zZXN0KCcudGFiLXdpZGdldC1wYW5lbCwgLnVpLXRhYnMtcGFuZWwsIFtpZF1bdGFiY291bnRdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXHRcdGlmICghcGFuZWwgfHwgIXBhbmVsLmlkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgd2lkZ2V0ID0gcGFuZWwuY2xvc2VzdCgnLndpZGdldC53aWRnZXQtdGFicywgLndpZGdldC5zdXBwb3J0LXJlc291cmNlcycpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblx0XHRpZiAoIXdpZGdldCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChwYW5lbC5vZmZzZXRQYXJlbnQgIT09IG51bGwgJiYgcGFuZWwuZ2V0QXR0cmlidXRlKCdhcmlhLWh
2pZGRlbicpICE9PSAndHJ1ZScpIHtcblx0XHRcdGN1cnJlbnQgPSB3aWRnZXQucGFyZW50RWxlbWVudDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1hdGNoaW5nSGVhZGluZyA9IChBcnJheS5mcm9tKHdpZGdldC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiX2FjY29yZGlvbl9oZWFkaW5nJykpIGFzIEhUTUxFbGVtZW50W10pLmZpbmQoXG5cdFx0XHQoaGVhZGluZykgPT4gaGVhZGluZy5nZXRBdHRyaWJ1dGUoJ3JlbCcpID09PSBwYW5lbC5pZFxuXHRcdCk7XG5cdFx0aWYgKCFtYXRjaGluZ0hlYWRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRtYXRjaGluZ0hlYWRpbmcuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSkpO1xuXHRcdGN1cnJlbnQgPSB3aWRnZXQucGFyZW50RWxlbWVudDtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9BbmNob3JGcm9tSGFzaChoYXNoOiBzdHJpbmcsIHVwZGF0ZUhpc3Rvcnk6IGJvb2xlYW4pOiBib29sZWFuIHtcblx0aWYgKCFoYXNoIHx8IGhhc2gubGVuZ3RoIDwgMikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHJhd0lkID0gaGFzaC5yZXBsYWNlKC9eIy8sICcnKTtcblx0bGV0IHRhcmdldElkID0gcmF3SWQ7XG5cdHRyeSB7XG5cdFx0dGFyZ2V0SWQgPSBkZWNvZGVVUklDb21wb25lbnQocmF3SWQpO1xuXHR9IGNhdGNoIHtcblx0XHQvLyBrZWVwIHJhd1xuXHR9XG5cblx0bGV0IHRhcmdldDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0Y29uc3QgYnlJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0aWYgKGJ5SWQpIHtcblx0XHR0YXJnZXQgPSBieUlkO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHNhZmVJZCA9IGVzY2FwZUNzc0lkKHRhcmdldElkKTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignIycgKyBzYWZlSWQpO1xuXHRcdGlmICghdGFyZ2V0KSB7XG5cdFx0XHR0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignW25hbWU9XCInICsgdGFyZ2V0SWQucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpICsgJ1wiXScpO1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV2ZWFsVGFyZ2V0SW5UYWJXaWRnZXRzKHRhcmdldCk7XG5cblx0aWYgKHVwZGF0ZUhpc3RvcnkpIHtcblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgJyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHJhd0lkKSk7XG5cdH1cblxuXHRjb25zdCBvZmZzZXQgPSBnZXRGaXJzdFZpc2libGVIZWFkZXJIZWlnaHQoKTtcblx0Y29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0Y29uc3QgdGFyZ2V0VG9wID0gTWF0aC5tYXgoMCwgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIG9mZnNldCk7XG5cblx0JCgnaHRtbCwgYm9keScpXG5cdFx0LnN0b3AodHJ1ZSlcblx0XHQuYW5pbWF0ZSh7IHNjcm9sbFRvcDogdGFyZ2V0VG9wIH0sIDMwMCwgZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0Zm9jdXNUYXJnZXRBZnRlclNjcm9sbCh0YXJnZXQpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc01vZGlmaWVkQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFuY2hvckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG5cdGlmIChpc01vZGlmaWVkQ2xpY2soZXZlbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IG51bGw7XG5cdGNvbnN0IGxpbmsgPSB0YXJnZXQ/LmNsb3Nlc3QoXCJhW2hyZWZePScjJ11cIikgYXMgSFRNTEFuY2hvckVsZW1lbnQgfCBudWxsO1xuXHRpZiAoIWxpbmspIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBocmVmID0gbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblx0aWYgKCFocmVmIHx8IGhyZWYgPT09ICcjJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChzY3JvbGxUb0FuY2hvckZyb21IYXNoKGhyZWYsIHRydWUpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEFuY2hvclNjcm9sbCgpOiB2b2lkIHtcblx0aWYgKHdpbmRvdy5fX2FuY2hvclNjcm9sbEluaXRpYWxpemVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHdpbmRvdy5fX2FuY2hvclNjcm9sbEluaXRpYWxpemVkID0gdHJ1ZTtcblxuXHRjb25zdCBpbml0aWFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRpZiAoaW5pdGlhbEhhc2gpIHtcblx0XHRpZiAoJ3Njcm9sbFJlc3RvcmF0aW9uJyBpbiBoaXN0b3J5KSB7XG5cdFx0XHRoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gJ21hbnVhbCc7XG5cdFx0fVxuXHRcdHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcblxuXHRcdGNvbnN0IHNjcm9sbEluaXRpYWxIYXNoID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0c2Nyb2xsVG9BbmNob3JGcm9tSGFzaChpbml0aWFsSGFzaCwgZmFsc2UpO1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRzY3JvbGxUb0FuY2hvckZyb21IYXNoKGluaXRpYWxIYXNoLCBmYWxzZSk7XG5cdFx0XHR9LCA1MCk7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdHNjcm9sbFRvQW5jaG9yRnJvbUhhc2goaW5pdGlhbEhhc2gsIGZhbHNlKTtcblx0XHRcdH0sIDMwMCk7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdHNjcm9sbFRvQW5jaG9yRnJvbUhhc2goaW5pdGlhbEhhc2gsIGZhbHNlKTtcblx0XHRcdH0sIDgwMCk7XG5cdFx0fTtcblxuXHRcdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG5cdFx0XHRzY3JvbGxJbml0aWFsSGFzaCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNjcm9sbEluaXRpYWxIYXNoLCB7IG9uY2U6IHRydWUgfSk7XG5cdFx0fVxuXHR9XG5cblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0c2Nyb2xsVG9BbmNob3JGcm9tSGFzaCh3aW5kb3cubG9jYXRpb24uaGFzaCwgZmFsc2UpO1xuXHR9KTtcblxuXHQoZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudCkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBbmNob3JDbGljayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lQ291bnQoZWxlbWVudDogSlF1ZXJ5PEhUTUxFbGVtZW50Pik6IG51bWJlciB7XG5cdGNvbnN0IGVsID0gZWxlbWVudFswXTtcblx0aWYgKCFlbCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGNvbnN0IGNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRsZXQgbGluZUhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWQubGluZUhlaWdodCk7XG5cdGlmIChOdW1iZXIuaXNOYU4obGluZUhlaWdodCkpIHtcblx0XHRsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZC5mb250U2l6ZSkgKiAxLjI7XG5cdH1cblx0aWYgKCFsaW5lSGVpZ2h0KSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblx0cmV0dXJuIE1hdGgucm91bmQoZWwuc2Nyb2xsSGVpZ2h0IC8gbGluZUhlaWdodCk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIk
2Z1bmN0aW9uIiwiZSIsIndpbmRvdyIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzZWxmIiwic3VwcG9ydCIsIlN5bWJvbCIsIkJsb2IiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpbmRleE9mIiwidG9TdHJpbmciLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwidmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwiaXRlcmF0b3IiLCJuZXh0Iiwic2hpZnQiLCJkb25lIiwidW5kZWZpbmVkIiwiSGVhZGVycyIsImhlYWRlcnMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwibGVuZ3RoIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbnN1bWVkIiwiYm9keSIsIl9ub0JvZHkiLCJib2R5VXNlZCIsIlByb21pc2UiLCJyZWplY3QiLCJmaWxlUmVhZGVyUmVhZHkiLCJyZWFkZXIiLCJyZXNvbHZlIiwib25sb2FkIiwicmVzdWx0Iiwib25lcnJvciIsImVycm9yIiwicmVhZEJsb2JBc0FycmF5QnVmZmVyIiwiYmxvYiIsIkZpbGVSZWFkZXIiLCJwcm9taXNlIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJidWZmZXJDbG9uZSIsImJ1ZiIsInNsaWNlIiwidmlldyIsIlVpbnQ4QXJyYXkiLCJieXRlTGVuZ3RoIiwic2V0IiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsImlzUHJvdG90eXBlT2YiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJEYXRhVmlldyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwibWF0Y2giLCJlbmNvZGluZyIsImV4ZWMiLCJyZWFkQXNUZXh0IiwiY2hhcnMiLCJpIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsImZvcm1EYXRhIiwiZGVjb2RlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsIm9sZFZhbHVlIiwiaGFzIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwia2V5cyIsInB1c2giLCJ2YWx1ZXMiLCJlbnRyaWVzIiwibWV0aG9kcyIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJtZXRob2QiLCJ1cGNhc2VkIiwidXJsIiwiY3JlZGVudGlhbHMiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJBYm9ydENvbnRyb2xsZXIiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsImRlY29kZVVSSUNvbXBvbmVudCIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJSYW5nZUVycm9yIiwib2siLCJzdGF0dXNUZXh0IiwiY2xvbmUiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsImxvY2F0aW9uIiwiRE9NRXhjZXB0aW9uIiwiZXJyIiwibWVzc2FnZSIsInN0YWNrIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJmZXRjaCIsImluaXQiLCJyZXF1ZXN0IiwiYWJvcnRlZCIsInhociIsIlhNTEh0dHBSZXF1
2ZXN0IiwiYWJvcnRYaHIiLCJhYm9ydCIsInJhd0hlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzdWJzdHIiLCJsaW5lIiwicGFydHMiLCJjb25zb2xlIiwid2FybiIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwic2V0VGltZW91dCIsIm9udGltZW91dCIsIm9uYWJvcnQiLCJvcGVuIiwiaHJlZiIsImZpeFVybCIsIndpdGhDcmVkZW50aWFscyIsInJlc3BvbnNlVHlwZSIsIm5hbWVzIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJwb2x5ZmlsbCIsIllNTV9GSUVMRFMiLCJERUZBVUxUX1NUQVRFIiwieW1tUGF0aCIsImluaXRpYWxZbW0iLCJjb25maWciLCJnb0FjdGlvbiIsImNsZWFyQWN0aW9uIiwiU1RBVEVfREFUQV9LRVkiLCJXSURHRVRfUk9PVF9TRUxFQ1RPUiIsImdldFN0YXRlRm9yRmlsdGVyIiwiZmlsdGVyIiwic3RhdGUiLCJjbG9zZXN0IiwiZGF0YSIsImdldFZlaGljbGVGcm9tRmlsdGVyIiwidmVoaWNsZSIsIl9pIiwiWU1NX0ZJRUxEU18xIiwiZmllbGQiLCJfYSIsImZpbmQiLCJjb25jYXQiLCJ2YWwiLCJsb2dFcnJvciIsIm1lc3NhZ2VfMSIsInJlcG9ydEVycm9yIiwibm90aWZ5VXNlciIsImFyZ3MiLCJqcVhIUiIsInRleHRTdGF0dXMiLCJlcnJvclRocm93biIsInRpbWUiLCJjcmVhdGVCbGFja291dCIsIiQiLCJhZGRDbGFzcyIsImh0bWwiLCJzaG93IiwiZmFkZUluIiwiYmxhY2tvdXRUaW1lb3V0IiwiZmFkZU91dCIsImNsb3NlQmxhY2tvdXQiLCJjd1RvYXN0IiwidmVoaWNsZVVSTFJlcGxhY2VtZW50Iiwic3RyIiwiZ2V0RmlsdGVyIiwieW1tRmlsdGVyIiwiZmlsdGVyTmFtZSIsIk9QVElPTkFMX0ZJRUxEUyIsInBvcHVsYXRlUGxhdGZvcm1GaWVsZCIsImNvbnRhaW5lciIsImNsZWFycyIsInBhcmFtcyIsImluaXRpYWxWYXIiLCJzZWxlY3QiLCJwcmV2aW91c1ZhbHVlIiwicHJlc2VydmVTZWxlY3Rpb24iLCJjbGVhcnNfMSIsImRvd25zdHJlYW0iLCJyZXBsYWNlUGxhdGZvcm1GaWx0ZXIiLCJwYXJlbnQiLCJhY3Rpdml0eSIsImFqYXgiLCJkYXRhVHlwZSIsImFzc2lnbiIsInNlYXJjaCIsInN1Y2Nlc3MiLCJlbmNvZGVkU3RyaW5nIiwidGV4dEFyZWEiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJ0cmlnZ2VyIiwicG9wdWxhdGVGaWVsZEdyb3VwcyIsImZpZWxkcyIsImdyb3VwIiwiZmllbGRzXzEiLCJvcHRpb24iLCJPcHRpb24iLCJzZWxlY3RlZCIsInBsYXRmb3JtU2VsZWN0IiwiYXR0ciIsIm5vdCIsInJlbW92ZSIsInJlc3VsdHMiLCJwb3B1bGFyIiwicG9wdWxhckdyb3VwIiwibGFiZWwiLCJvdGhlckdyb3VwIiwic2V0VmVoaWNsZUNvb2tpZXMiLCJDb29raWVzIiwicGF0aCIsImV4cGlyZXMiLCJpc0xvZ2dlZEluIiwiYWRkQ3VzdG9tZXJWZWhpY2xlIiwic291cmNlXzEiLCJ5ZWFyXzEiLCJtYWtlXzEiLCJtb2RlbF8xIiwiZW5naW5lXzEiLCJzb3VyY2UiLCJ5ZWFyIiwibWFrZSIsIm1vZGVsIiwiZW5naW5lIiwiZm9ybUlkIiwic2tpcERiIiwiYWN0aW9uIiwia2VlcEZyZXNoIiwiTWF0aCIsInJhbmRvbSIsIkFjY2VwdCIsInNlbnQiLCJJTl9GTElHSFRfQ0xBU1MiLCJleGVjdXRlR29BY3Rpb24iLCJzY3JvbGwiLCJoYXNDbGFzcyIsImJyYW5kIiwic3VibW9kZWwiLCJ0cmFuc21pc3Npb24iLCJfYiIsImN1cnJlbnRQYXRoIiwicGF0aG5hbWUiLCJpbmRleCIsImd0bUV2ZW50IiwiZXZlbnREYXRhIiwiX2MiLCJyZWRpcmVjdFRvUGxhdGZvcm0iLCJydW5HdWFyZGVkIiwiZiIsImdyaWRPYmoiLCJmaWx0ZXJieXltbSIsImZpbHRlckdyaWQiLCJncmlkT2Zmc2V0Iiwib2Zmc2V0Iiwid2luZG93VG9wIiwic2Nyb2xsVG9wIiwid2luZG93SGVpZ2h0IiwiaGVpZ2h0IiwiY1RvcCIsInRvcCIsImNCb3QiLCJvdXRlckhlaWdodCIsImlzIiwiYW5pbWF0ZSIsInVwZGF0ZUdyaWQiLCJzZWFyY2hCeVlNTSIsInBlbmRpbmciLCJyZW1vdmVDbGFzcyIsImFsd2F5cyIsIl9maWx0ZXIiLCJwZXJmb3JtU2VhcmNoIiwiRklMVEVSX1BPUFVMQVRFX01BUCIsInllYXJTZWxlY3QiLCJtYWtlU2VsZWN0IiwiYWRkRmlsdGVyQ2hhbmdlTGlzdGVuZXIiLCJmaWx0ZXJUeXBlIiwiZG93bnN0cmVhbUZpbHRlcnMiLCJ2ZWhpY2xlRmlsdGVyIiwidXBkYXRlSW5pdGlhbFltbSIsInBlbmRpbmdQb3B1bGF0ZXMiLCJkb3duc3RyZWFtRmlsdGVyc18xIiwibW9kZWxTZWxlY3QiLCJwb3B1bGF0ZVBsYXRmb3JtU3VibW9kZWxzIiwicG9wdWxhdGVQbGF0Zm9ybUVuZ2luZXMiLCJwb3B1bGF0ZVBsYXRmb3JtQm9kaWVzIiwicG9wdWxhdGVQbGF0Zm9ybVRyYW5zbWlzc2lvbnMiLCJzY2hlZHVsZUV4ZWN1dGVBZnRlciIsInBvcHVsYXRlSW5GbGlnaHQiLCJXZWFrTWFwIiwicGVuZGluZ0V4ZWN1dGVGaWx0ZXIiLCJ4aHJzIiwieGhyc18xIiwib25Qb3B1bGF0ZVNldHRsZSIsImV4ZWN1dGVJZk5lZWRlZCIsInJlbWFpbmluZyIsImRlbGV0ZSIsIkFVVE9fRklSRV9ERUJPVU5DRV9NUyIsInBlbmRpbmdFeGVjdXRlVGltZXJzIiwic2hvdWxkRXhlY3V0ZUdvQWN0aW9uT25DaGFuZ2UiLCJleGlzdGluZyIsImNsZWFyVGltZW91dCIsInRpbWVyIiwib24iLCJzZWxlY3RvciIsIiR0aGlzIiwiY2hhbmdlZEZpZWxkIiwiT1BUSU9OQUxfRklFTERTXzEiLCJPUFRJT05BTF9GSUVMRFNfMiIsIm90aGVyIiwiY2FzY2FkZU9wdGlvbmFsRmllbGRzIiwiT1BUSU9OQUxfQklORElOR1NfMSIsImJpbmRGaWx0ZXJDaGFuZ2VzIiwib2ZmIiwiX2V2ZW50IiwicmVkaXJlY3RUb0Jhc2UiLCJjbGVhckluaXRpYWxZbW0iLCJlbXB0eUZpbHRlcnMiLCJleGVjdXRlQ2xlYXJBY3Rpb24iLCJlYWNoIiwid2lkZ2V0Um9vdCIsInRlbXBsYXRlIiwiZmlyc3QiLCJidW5kbGVEYXRhIiwic2l0ZXdpZGVGaXRtZW50RW5hYmxlZCIsInNob3BXaXRob3V0VmVoaWNsZSIsImZpdG1lbnRFbmFibGVkQW5kU2hvcHBpbmdCeVZlaGljbGUiLCJfZCIsIl9lIiwiX2YiLCJfZyIsImNvb2tpZVZhbHVlIiwic2V0RmlsdGVyU3RhdGUiLCJ5ZWFyU2VsZWN0cyIsImZpcnN0WWVhclZhbCIsImluaXRpYWxZZWFycyIsInNvbWUiLCJfIiwiZmlsdGVyQ29udGFpbmVyIiwiaW5pdFBsYXRmb3JtRmlsdGVyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.