PageSourceSearch

https://orthonebraska.com/wp-content/themes/orthonebraska/js/components/resources.min.js?ver=1790173899

js orthonebraska.com collected 2026-09-24 20:06:47 UTC 138,601 bytes, 4 lines download raw bytes

vendor: 4,490 bytes, lines 1-3
1!function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function t(e,t,n,r,a,o,i){try{var c=e[o](i),l=c.value}catch(e){return void n(e)}c.done?t(l):Promise.resolve(l).then(r,a)}function n(e){return function(){var n=this,r=arguments;return new Promise(function(a,o){var i=e.apply(n,r);function c(e){t(i,a,o,c,l,"next",e)}function l(e){t(i,a,o,c,l,"throw",e)}c(void 0)})}}function r(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=c(e))||t){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,o=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw o}}}}function a(){
2/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function c(n,r,a,i){var c=r&&r.prototype instanceof s?r:s,u=Object.create(c.prototype);return o(u,"_invoke",function(n,r,a){var o,i,c,s=0,u=a||[],d=!1,f={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return o=t,i=0,c=e,f.n=n,l}};function p(n,r){for(i=n,c=r,t=0;!d&&s&&!a&&t<u.length;t++){var a,o=u[t],p=f.p,v=o[2];n>3?(a=v===r)&&(c=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=n<2&&p<o[1])?(i=0,f.v=r,f.n=o[1]):p<v&&(a=n<3||o[0]>r||r>v)&&(o[4]=n,o[5]=r,f.n=v,i=0))}if(a||n>1)return l;throw d=!0,r}return function(a,u,v){if(s>1)throw TypeError("Generator is already running");for(d&&1===u&&p(u,v),i=u,c=v;(t=i<2?e:c)||!d;){o||(i?i<3?(i>1&&(f.n=-1),p(i,c)):f.n=c:f.v=c);try{if(s=2,o){if(i||(a="next"),t=o[a]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),i=1);o=e}else if((t=(d=f.n<0)?c:n.call(r,f))!==l)break}catch(t){o=e,i=1,c=t}finally{s=1}}return{value:t,done:d}}}(n,a,i),!0),u}var l={};function s(){}function u(){}function d(){}t=Object.getPrototypeOf;var f=[][r]?t(t([][r]())):(o(t={},r,function(){return this}),t),p=d.prototype=s.prototype=Object.create(f);function v(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,o(e,i,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=d,o(p,"constructor",d),o(d,"constructor",u),u.displayName="GeneratorFunction",o(d,i,"GeneratorFunction"),o(p),o(p,i,"Generator"),o(p,r,function(){return this}),o(p,"toString",function(){return"[object Generator]"}),(a=function(){return{w:c,m:v}})()}function o(e,t,n,r){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}o=function(e,t,n,r){function i(t,n){o(e,t,function(e){return this._invoke(t,n,e)})}t?a?a(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(i("next",0),i("throw",1),i("return",2))},o(e,t,n,r)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,c=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(t,n){if(t){if("string"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}n(a().m(function e(t,n){var r,o,i;return a().w(function(e){for(;;)switch(e.n){case 0:return r="".concat(t).concat(n?"?".concat(n):""),e.n=1,fetch(r);case 1:if((o=e.v).ok){e.n=2;break}throw new Error("HTTP error: ".concat(o.status));case 2:return e.n=3,o.json();case 3:return i=e.v,e.a(2,i)}},e)}));
3var l,s,u,d,f=(l=n(a().m(function e(t,r,o,i,c){var l,s,u,d,f;return a().w(function(e){for(;;)switch(e.n){case 0:return l=[],s=i||1,u=0,d=null,r=r&&r>0?r:100,c=c||{order:"asc",orderby:"title"},f=function(){var e=n(a().m(function e(n){var i,s,u;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return i=t.includes("?"),s="".concat(t).concat(i?"&":"?","per_page=").concat(r).concat(n?"&page=".concat(n):"","&order=").concat(c.order,"&orderby=").concat(c.orderby).concat(o?"&".concat(o):""),e.p=1,e.n=2,fetch(s);case 2:if((d=e.v).ok){e.n=3;break}throw new Error("HTTP error! Status: ".concat(d.status));case 3:return e.n=4,d.json();case 4:u=e.v,l=l.concat(u),e.n=6;break;case 5:throw e.p=5,e.v,new Error("Cannot load data.");case 6:return e.a(2)}},e,null,[[1,5]])}));return function(t){return e.apply(this,arguments)}}(),e.n=1,f(i);case 1:s++,d&&(u=i||d.headers.get("X-WP-TotalPages"));case 2:if(!(s<=u)){e.n=4;break}return e.n=3,f(s);case 3:s++,e.n=2;break;case 4:return e.a(2,{data:l,resultsTotal:d.headers.get("X-WP-Total"),pageTotal:d.headers.get("X-WP-TotalPages")})}},e)})),function(e,t,n,r,a){return l.apply(this,arguments)}),p=function(e,t){var n=null;return function(){for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];window.clearTimeout(n),n=window.setTimeout(function(){e.apply(null,a)},t)}},v=function(){var e=new URLSearchParams(window.location.search),t={};return e.forEach(function(e,n){var r;t[n]=!!(r=e)&&r.split(" ")}),t},h=function(e){var t=new URLSearchParams(window.location.search).toString(),n=e.toString();t!=n&&(n.length>0?history.pushState({},"","".concat(location.pathname,"?").concat(n)):history.pushState({},"","".concat(location.pathname)))},m=function(e,t){var n=new URLSearchParams(window.location.search);e&&t?n.set(e,t):n.delete(e),h(n)},g=function(e,t){if("text"==t||"zip"==t)return e.querySelector("input").value;if("select"==t){var n=e.querySelector("select").value;return n&&-1!=n?[n]:""}if("radio"==t){var r=e.querySelector("input:checked");return r?[r.value]:""}return"checkbox"==t?(a=e.querySelectorAll("input[type=checkbox]"),o=[],a.forEach(function(e){e.checked&&o.push(e.value)}),o):filterValue;var a,o},y=function(){var e=new URLSearchParams(window.location.search),t="";return e.has("zip")&&(t=e.get("zip")),t},w=function(e){return/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(e)},b=function(){var e=document.getElementById("zipError");e&&e.remove()},_=function(e){var t=document.querySelector('[data-filter-name="zip"]'),n=document.getElementById("zipError"),r="";if(n||((n=document.createElement("div")).id="zipError",n.role="alert",n.classList.add("filter-field__error")),"invalid"==e?r="Enter a valid, five-digit zip code.":"ZERO_RESULTS"==e?r="Invalid zip code.":(console.log(e),r="There was an error with your search."),!r)return!1;n.textContent=r,t.append(n)},S=function(e,t){var n=e[0]*(Math.PI/180),r=t[0]*(Math.PI/180),a=r-n,o=(t[1]-e[1])*(Math.PI/180);return 7917.6*Math.asin(Math.sqrt(Math.sin(a/2)*Math.sin(a/2)+Math.cos(n)*Math.cos(r)*Math.sin(o/2)*Math.sin(o/2)))},L=function(e,t){var n=JSON.parse(JSON.stringify(e)),r=[];return t&&2==t.length?(n.forEach(function(e){if(e.hasOwnProperty("locations")){for(var n,a=e.locations,o=0;o<a.length;o++){var i=[a[o].lat,a[o].lng],c=S(t,i),l=Math.round(10*c)/10;a[o].miles=l,(!n||n>l)&&(n=l)}n&&(e.distance=n),r.push(e)}else{var s=e,u=[s.lat,s.lng],d=S(t,u),f=Math.round(10*d)/10;e.distance=f||null,r.push(s)}}),r):(console.log("Invalid coordinates."),e)},k=function(e,t,n){var r=new URLSearchParams(window.location.search),a="";if(n=n||"title",r.has("sortby")&&(a=r.get("sortby")),!a){var o=y();o&&w(o)?a="zip":t&&(a=t)}return"zip"==a?(e.sort(function(e,t){return e[n].toLowerCase()>t[n].toLowerCase()?1:-1}),e.sort(function(e,t){return null===e.distance?1:null===t.distance?-1:e.distance===t.distance?0:e.distance<t.distance?-1:1})):"alphaDesc"==a?e.sort(function(e,t){return e[n].toLowerCase()>t[n].toLowerCase()?-1:1}):"random"==a?e=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=[e[n],e[t]];e[t]=r[0],e[n]=r[1]}return e}(e):"custom_order"==a?e.sort(function(e,t){return e.custom_order>t.custom_order?1:-1}):e.sort(function(e,t){return e[n].toLowerCase()>t[n].toLowerCase()?1:-1}),e},E=function(e,t,n,a,o){var i="",c=document.querySelector("[data-filter-error]"),l=c?c.innerHTML:"No results were found. Please try another search.";if(e.length>0)if(o>0){var s,u,d,f=Math.ceil(e.length/o);if(a||(a=1),u=(s=(a-1)*o)+o,d=e.slice(s,u),a<=f){var p,v=r(d);try{for(v.s();!(p=v.n()).done;){i+=n(p.value)}}catch(e){v.e(e)}finally{v.f()}}else i=l}else{var h,m=r(e);try{for(m.s();!(h=m.n()).done;){i+=n(h.value)}}catch(e){m.e(e)}finally{m.f()}}else i=l;t.innerHTML=i},A=function(e){var t=!1,n=function(n){var r=n.getAttribute("aria-controls"),a=document.getElementById(r);
3n.setAttribute("aria-expanded","false"),a.hidden=!0,e.classList.remove("is-active"),t=!1};e.addEventListener("click",function(r){if(r.target.classList.contains("js-dropdown-toggle")){r.preventDefault();var a=r.target;"false"==a.getAttribute("aria-expanded")?(i=(o=a).getAttribute("aria-controls"),c=document.getElementById(i),o.setAttribute("aria-expanded","true"),c.hidden=!1,e.classList.add("is-active"),t=!0):n(a)}var o,i,c}),e.addEventListener("keydown",function(r){if(t&&"Escape"==r.key){var a=e.querySelector(".js-dropdown-toggle");n(a),a.focus()}})},q=40.09282765660555,P=-98.97105761662755,T=[],x=(d=document.createElement("textarea"),function(e){return d.innerHTML=e,d.value}),M=document.querySelector("[data-filter-fields]"),C=M.querySelectorAll("[data-filter-name]"),z=document.querySelector("[data-filter-loader]"),O=document.querySelector("[data-filter-results]"),j=document.querySelector("[data-result-count]"),I=document.querySelector("[data-filter-find]"),H=document.querySelectorAll("[data-filter-clear]"),R=document.querySelectorAll("[data-filter-print]"),G=document.querySelectorAll("[data-filter-share]"),D=document.querySelector("[data-filter-sort]"),N=document.querySelector("[data-filter-pagination]"),U=function(){z&&z.classList.add("is-active"),M.querySelectorAll("input[type=checkbox], select").forEach(function(e){e.disabled=!0})},B=function(){z&&z.classList.remove("is-active"),M.querySelectorAll("input[type=checkbox], select").forEach(function(e){e.disabled=!1})},W=function(e,t,n,r){var a={pagination:!0,perPage:-1,zipSearch:!0,map:!0,mapMarker:null,mapClustering:!1,defaultSorting:"alphaAsc"},o={},c=null,l=null;for(var d in a)t.hasOwnProperty(d)?o[d]=t[d]:o[d]=a[d];if((o.zipSearch||o.map)&&(c=[]),o.map&&function(e){var t,n=(null===(t=window.GOOGLE_MAPS_DATA)||void 0===t?void 0:t.mapId)||"",r={center:{lat:q,lng:P},zoom:10,mapId:n,mapTypeControl:!1,streetViewControl:!1,zoomControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT}};e.setOptions(r)}(l=null),M&&z&&O){var f=function(e,t){var r=v(),a=r.pagenum,i=O.dataset.filterDefaultSort;e=k(e,o.defaultSorting,i),U(),o.pagination?E(e,O,n,a,o.perPage):E(e,O,n);var c=Object.keys(r).filter(function(e){return"zip"!==e&&"sortby"!==e&&"pagenum"!==e});c.length>0?(j.hidden=!1,j.innerHTML=e.length+" result(s) found"):(j.hidden=!0,j.innerHTML=""),H.length>0&&H.forEach(function(e){c.length>0?e.hidden=!1:e.hidden=!0}),o.map&&function(e,t,n,r,a){var o,i=new google.maps.LatLngBounds;u||(u=new google.maps.InfoWindow({maxWidth:600})),T.length&&(T.forEach(function(e){e.setMap(null)}),T=[]),T=t.map(function(t,r){var a,o;n?((a=document.createElement("img")).src=n,a.alt=t.title):a=new google.maps.marker.PinElement({background:"#000",glyphColor:"white",borderColor:"white"}),o=x(t.title);var c=new google.maps.marker.AdvancedMarkerElement({map:e,position:{lat:Number(t.lat),lng:Number(t.lng)},content:a,title:o,gmpClickable:!0});return i.extend(c.position),c.addListener("gmp-click",function(){var n='\n        <div class="map-popup">\n          '.concat(t.popup,"\n        </div>\n      ");u.close(),u.setContent(n),u.open(e,c),e.setZoom(14),e.panTo(c.position)}),c}),r&&null!==(o=window.markerClusterer)&&void 0!==o&&o.MarkerClusterer&&(s&&s.clearMarkers(),s=new markerClusterer.MarkerClusterer({markers:T,map:e})),t.length>0?(e.fitBounds(i),google.maps.event.addListenerOnce(e,"bounds_changed",function(){var e=a?14:10;this.setZoom(Math.min(this.getZoom(),e))})):(e.setCenter({lat:q,lng:P}),e.setZoom(10))}(l,e,o.mapMarker,o.mapClustering,t),o.pagination&&function(e,t,n,r,a,o){a=a||Math.ceil(e.length/r),o=o||e.length;var i=Number(n),c="";if(t)if(e.length<=0||o<=r||r<=0)t.innerHTML="";else{(i>a||i<1||!i)&&(i=1);var l=function(e,t){return'\n      <button\n        class="'.concat(t?"page-numbers current":"page-numbers",'"\n        type="button"\n        data-page-num="').concat(e,'"\n        ').concat(i==e?"disabled":"",'\n      >\n        <span class="sr-only">Go to page </span>').concat(e,"\n      </button>")};c+='\n    <h2 class="sr-only">Post pagination</h2>\n\n    <div class="pagination">\n      <div class="nav-links">\n        <button\n          type="button"\n          class="page-numbers prev"\n          id="prev"\n          title="Previous page"\n          aria-label="Previous page"\n          data-page-num="'.concat(i-1,'"\n          ').concat(1==i?"disabled":"",'\n        >
3\n          <span class="sr-only">Previous page</span>\n        </button>\n  '),c+=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(1===t)return[1];for(var r=e-n,a=e+n+1,o="",i=1;i<=t;i++)(1==i||i==t||i>=r&&i<a)&&(i===r&&i>2&&(o+="..."),o+=l(i,i===e),i===a-1&&i<t-1&&(o+="..."));return o}(i,a),c+='\n      \n        <button\n          type="button"\n          class="page-numbers next"\n          id="next"\n          title="Next page"\n          aria-label="Next page"\n          data-page-num="'.concat(i+1,'"\n          ').concat(i==a?"disabled":"",'\n        >\n          <span class="sr-only">Next page</span>\n        </button>\n      </div>\n    </div>\n  '),t.innerHTML=c}}(e,N,a,o.perPage),B()},S=function(e,t){var n,r,a=function(e){var t=[];return e.forEach(function(e){var n=e.getAttribute("data-filter-name"),r=e.getAttribute("data-filter-taxonomy"),a=e.getAttribute("data-filter-type"),o=g(e,a);o=o.length>0&&o,t.push({name:n,taxonomy:r,type:a,value:o})}),t}(C),o=e,c=!!t;Object.entries(a).forEach(function(e){var t=i(e,2);t[0];var n=t[1],r=n.type,a=n.value,l=n.taxonomy;"text"===r&&a?(o=function(e,t,n){if(!t||!n)return e;var r=t.toLowerCase().split(" "),a=n.split(",");return e.filter(function(e){var t=a.map(function(t){return(e[t]||"").toLowerCase()}).filter(Boolean);return r.some(function(e){return!!e&&t.some(function(t){return t.includes(e)})})})}(o,a,l),c=!0):["checkbox","radio","select"].includes(r)&&a&&l&&(o=function(e,t,n){for(var r=[],a=0;a<e.length;a++){var o=void 0;e[a].hasOwnProperty(n)&&(o=e[a][n]),o&&(Array.isArray(o)||(o=[o.toString()]),o.some(function(e){return t.includes(e)})&&r.push(e[a]))}return r}(o,a,l),c=!0)}),a.forEach(function(e){if("checkbox"==e.type){var t=document.querySelector("[data-filter-name="+e.name+"]");if(!t)return;var n=t.querySelector("[data-field-count]"),r=g(t,"checkbox").length||0;if(!n)return;n.innerHTML=r>0?"".concat(r,'<span class="sr-only"> filters applied</span>'):""}}
3),n=a,r=new URLSearchParams(window.location.search),n.forEach(function(e){e.value?Array.isArray(e.value)?r.set(e.name,e.value.join(" ")):r.set(e.name,e.value):r.delete(e.name)}),h(r),f(o,c)},W=function(){var t=y();if(!o.zipSearch||!t)return S(e),!1;if(!w(t))return _("invalid"),S(e),!1;U();var n,r,a=c.find(function(e){return e.zipCode===t});if(a){var i=L(e,a.latlng);S(i,!0)}else(n=t,r=new google.maps.Geocoder,new Promise(function(e,t){r.geocode({address:n},function(n,r){"OK"==r?e([n[0].geometry.location.lat(),n[0].geometry.location.lng()]):t(r)})})).then(function(n){c.push({zipCode:t,latlng:n});var r=L(e,n);S(r,!0)}).catch(function(t){B(),_(t),S(e)})};z.classList.add("is-init"),M.addEventListener("submit",function(e){e.preventDefault()});var Z=location.href.split("#")[0];window.addEventListener("popstate",function(){var e=location.href.split("#")[0];e!==Z&&location.reload(),Z=e});var F=v();Object.keys(F).length>0&&function(e){var t=function(e,t){e&&(t.length>1?e.value=t.join(" "):e.value=t[0])},n=function(e){e&&(e.checked=!0)},r=function(e,t){t&&Array.isArray(t)&&t.forEach(function(t){var n=e.querySelector('input[value="'+t+'"]');n&&(n.checked=!0)})};for(var a in e)if("sortby"==a){var o=document.querySelector("[data-filter-sort] select");o&&(o.value=e[a][0])}else{var i=document.querySelector("[data-filter-name="+a.replace(/\[|\]/g,"")+"]");if(i){var c=i.getAttribute("data-filter-type");"text"==c||"zip"==c?t(i.querySelector('input[type="text"]'),e[a]):"select"==c?t(i.querySelector("select"),e[a]):"radio"==c?n(i.querySelector('input[value="'+e[a][0]+'"]')):"checkbox"==c&&r(i,e[a])}}}(F);var V=function(){m("pagenum",""),W()};if(C.forEach(function(e){var t=e.getAttribute("data-filter-type");"zip"==t?e.addEventListener("keyup",p(function(){var t=e.querySelector("input").value,n=w(t);if(!t)return b(),m("zip",""),!1;n?(b(),m("zip",t),m("pagenum",""),W()):(_("invalid"),m("zip",""))},500)):"text"==t?e.addEventListener("keyup",p(V,250)):"checkbox"!=t&&"radio"!=t&&"select"!=t||e.addEventListener("change",V)}),D){var X=D.querySelector("select");X.addEventListener("change",function(e){new URLSearchParams(window.location.search);var t=X.value;m("sortby",t||""),V()})}o.pagination&&N&&N.addEventListener("click",function(e){if(e.target.hasAttribute("data-page-num")){var t=e.target.getAttribute("data-page-num");m("pagenum",t),W(),O.scrollIntoView({behavior:"smooth"})}});var $=document.querySelectorAll("[data-filter-dropdown]");$.length>0&&$.forEach(function(e){A(e)});var J=document.querySelectorAll("[data-options-filter]");if(J.length>0&&J.forEach(function(e){var t=e.getAttribute("data-options-filter");t&&function(e,t){var n=e.querySelector("input"),r=e.parentNode.querySelectorAll("["+t+"]");e.addEventListener("keyup",p(function(e){!function(e,t){var n=e.value.toLowerCase();e&&t&&t.forEach(function(e){var t=e.querySelector("label").textContent.toLowerCase();e.classList.toggle("hide",!t.includes(n))})}(n,r)},250))}(e,t)}),I&&I.addEventListener("click",function(e){var t=document.querySelector('[data-filter-type="zip"]'),n=document.querySelector("[data-filter-find-message]");if(t&&n){var r=t.querySelector("input"),a=function(e){n.innerHTML=e};"geolocation"in navigator?(n.innerHTML='<div class="loader">\n              <span class="loader__spinner"></span>\n              <span class="loader__text">Loading...</span>\n            </div>
3',navigator.geolocation.getCurrentPosition(function(e){(t=new google.maps.LatLng(e.coords.latitude,e.coords.longitude),o=new google.maps.Geocoder,new Promise(function(e,n){o.geocode({location:t},function(t,r){"OK"==r?e(t[0]):n(r)})})).then(function(e){for(var t="",o=0;o<e.address_components.length;o++)"postal_code"==e.address_components[o].types[0]&&(t=e.address_components[o].short_name);if(!t)return a("There was an error finding your zip code."),!1;n.innerHTML="",r.value=t,m("zip",t),W()}).catch(function(e){return a(e),!1});var t,o},function(e){console.log(e.message),a(e.message)})):n.innerHTML="This feature is not available in your browser."}}),H.length>0&&H.forEach(function(e){e.addEventListener("click",function(e){e.preventDefault(),history.pushState({},"","".concat(location.pathname)),window.location.reload()})}),R.length>0&&R.forEach(function(e){e.addEventListener("click",function(e){e.preventDefault(),window.print()})}),G.length>0){G.forEach(function(e){e.addEventListener("click",function(e){e.preventDefault();var t=window.location.href;MicroModal.show("share-modal",{onShow:function(e){e.querySelector("#share-link").innerHTML=t}})})});var K=document.querySelector("[data-share-copy]"),Q=document.querySelector("#share-success"),Y=function(e){Q.textContent=e,Q.classList.remove("sr-only"),setTimeout(function(){Q.textContent="",Q.classList.add("sr-only")},3e3)};K.addEventListener("click",function(e){e.preventDefault();var t=document.querySelector("#share-link").textContent;navigator.clipboard.writeText(t).then(function(){Y("Link copied!")},function(e){Y("Link could not be copied.")})})}var ee=document.querySelector("[data-filter-toggle]");ee&&ee.addEventListener("click",function(e){e.preventDefault();var t="true"==ee.getAttribute("aria-expanded"),n=ee.getAttribute("aria-controls"),r=document.getElementById(n);ee.setAttribute("aria-expanded",!t),t?r.classList.remove("is-open"):r.classList.add("is-open")}),W()}else console.log("Missing filter UI elements. Filter did not initialize.")};if(document.querySelector("#resources")){var Z={pagination:!0,perPage:24,zipSearch:!1,map:!1,defaultSorting:"alphaDesc"},F=function(e){return e.map(function(e){var t={};return t.date=e.date,t.specialty_slugs=e.resource_specialty_slugs,t.type_slugs=e.resource_type_slugs,t.related_providers=e.related_providers,t.image=e.resource_image,t.primary_resource_type=e.primary_resource_type,t.title=e.title.rendered,t.id=e.id,t.post_type=e.type,t.link_type=e.acf.resource_post_link_type,t.link=e.link,t.resource_link=e.acf.resource_post_link,t.video_url=e.acf.resource_post_video_url,t.vm_video=e.acf.resource_post_vm_video,t})},V=function(){var e=n(a().m(function e(t){var n,r,o;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,f(t,100);case 1:return n=e.v,r=F(n.data),e.a(2,r);case 2:throw e.p=2,o=e.v,new Error("Could not load results: ".concat(o))}},e,null,[[0,2]])}));return function(t){return e.apply(this,arguments)}}(),X=function(e){var t,n,r="",a=e.link_type,o=e.image?e.image:"/wp-content/themes/orthonebraska/img/elem/default-resource.svg",i="",c="";"resource"!=e.post_type?i=e.link:i=null!==(t=null===(n=e.resource_link)||void 0===n?void 0:n.url)&&void 0!==t?t:"";if(e.primary_resource_type){var l="card__icon-tag--".concat(e.primary_resource_type.toLowerCase().replace(/\s/g,"-"));c='\n        <span class="card__tags">\n          <span class="card__icon-tag '.concat(l,'">').concat(e.primary_resource_type,"</span>\n        </span>\n      ")}return"video"==a&&e.video_url||"viewmedica"==a&&e.vm_video?r+='\n        <li>\n          <button role="button" class="card card--video video-overlay" '.concat(e.video_url?'data-modal-video="'.concat(e.video_url,'"'):'data-modal-viewmedica="'.concat(e.vm_video,'"'),'>\n            <span class="card__image">\n              <img src="').concat(o,'" alt="" width="350" height="262" loading="lazy">\n            </span>\n\n            <span class="card__content">\n              ').concat(c,'\n\n              <span class="card__title">\n                <span class="card__link">\n                  ').concat("video"==a||"viewmedica"==a?'\n                    <sp
3an class="sr-only">Watch video:</span>\n                    '.concat(e.title,'\n                    <span class="sr-only">(opens in modal window)</span>\n                  '):"\n                    ".concat(e.title,"\n                  "),"\n                </span>\n              </span>\n            </span>\n          </button>\n        </li>\n      "):r+='\n        <li>\n          <a href="'.concat(i,'" class="card">\n            <span class="card__image">\n              <img src="').concat(o,'" alt="" width="350" height="262" loading="lazy">\n            </span>\n\n            <span class="card__content">\n              ').concat(c,'\n              \n              <span class="card__title">\n                <span class="card__link">').concat(e.title,"</span>\n              </span>\n            </span>\n          </a>\n        </li>\n      "),r};U();var $="?_fields=id,type,title,link,date,featured_media,resource_image,resource_type_slugs,primary_resource_type,resource_specialty_slugs,related_providers,acf",J="/wp-json/wp/v2/posts".concat($),K="/wp-json/wp/v2/resource".concat($),Q="/wp-json/wp/v2/pillar".concat($);Promise.all([V(J),V(K),V(Q)]).then(function(e){var t=i(e,3),n=t[0],r=t[1],a=t[2],o=n.concat(r,a);W(o,Z,X),B()}).catch(function(e){var t,n;B(),t="There has been an error loading the search data. Please try again later.",n=document.createElement("div"),z.classList.add("is-error"),n.id="search-error",n.classList.add("filter-error"),n.textContent=t,O.append(n),console.log("ERROR! ".concat(e))})}}();
4//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vX3NyYy9fbW9kdWxlcy9sb2FkLWFwaS1kYXRhLmpzIiwiLi4vX3NyYy9fbW9kdWxlcy9tYXAuanMiLCIuLi9fc3JjL19tb2R1bGVzL2hlbHBlcnMuanMiLCIuLi9fc3JjL19tb2R1bGVzL3VybC1wYXJhbXMuanMiLCIuLi9fc3JjL19tb2R1bGVzL2ZpbHRlci12YWx1ZXMuanMiLCIuLi9fc3JjL19tb2R1bGVzL3ppcC1zZWFyY2guanMiLCIuLi9fc3JjL19tb2R1bGVzL3NvcnRpbmcuanMiLCIuLi9fc3JjL19tb2R1bGVzL2J1aWxkLWxpc3QuanMiLCIuLi9fc3JjL19tb2R1bGVzL29wdGlvbi1maWVsZHMuanMiLCIuLi9fc3JjL19tb2R1bGVzL2ZpbHRlci5qcyIsIi4uL19zcmMvX21vZHVsZXMvcGFnaW5hdGlvbi5qcyIsIi4uL19zcmMvX21vZHVsZXMvZmlsdGVyLW1ldGhvZHMuanMiLCIuLi9fc3JjL19tb2R1bGVzL2ZpZWxkLWNvdW50LmpzIiwiLi4vX3NyYy9jb21wb25lbnRzL3Jlc291cmNlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExvYWQgZGF0YSBmcm9tIGFuIEFQSSBVUkxcbiAqIEBwYXJhbSB1cmwgLSBBUEkgVVJMXG4gKiBAcGFyYW0gcGFyYW1zIC0gQWRkaXRpb25hbCBVUkwgcGFyYW1ldGVyc1xuICovXG5jb25zdCBsb2FkQVBJRGF0YSA9IGFzeW5jICh1cmwsIHBhcmFtcykgPT4ge1xuICBjb25zdCB1cmxXaXRoUGFyYW1zID0gYCR7dXJsfSR7cGFyYW1zID8gYD8ke3BhcmFtc31gIDogJyd9YDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxXaXRoUGFyYW1zKTtcbiAgXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG4gIFxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogTG9hZCBwYWdpbmF0ZWQgZGF0YSBmcm9tIGFuIEFQSSBVUkxcbiAqIEBwYXJhbSBiYXNlVXJsIC0gQmFzZSBBUEkgVVJMICh3aXRoIG5vIHBhcmFtZXRlcnMpXG4gKiBAcGFyYW0gcGVyUGFnZSAtIFJlc3VsdHMgcGVyIHBhZ2VcbiAqIEBwYXJhbSBwYXJhbXMgLSBBZGRpdGlvbmFsIFVSTCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gcGFnZU51bSAtIFBhZ2UgbnVtYmVyIGlmIHB1bGxpbmcgYSBzaW5nbGUgcGFnZVxuICogQHBhcmFtIHNvcnRPcHRpb24gLSBTb3J0IG9wdGlvblxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggcmVzdWx0cyAoZGF0YSkgYW5kIHRvdGFsIG51bWJlciBvZiBwYWdlcyAodG90YWxQYWdlcylcbiAqL1xuY29uc3QgbG9hZFBhZ2luYXRlZEFQSURhdGEgPSBhc3luYyAoYmFzZVVybCwgcGVyUGFnZSwgcGFyYW1zLCBwYWdlTnVtLCBzb3J0T3B0aW9uKSA9PiB7XG4gIGxldCBhbGxEYXRhID0gW10sXG5cdFx0XHRjdXJyZW50UGFnZSA9IHBhZ2VOdW0gPyBwYWdlTnVtIDogMSxcblx0XHRcdHRvdGFsUGFnZXMgPSAwLFxuXHRcdFx0cmVzcG9uc2UgPSBudWxsO1xuXG4gIHBlclBhZ2UgPSBwZXJQYWdlICYmIHBlclBhZ2UgPiAwID8gcGVyUGFnZSA6IDEwMDtcbiAgXG4gIHNvcnRPcHRpb24gPSBzb3J0T3B0aW9uID8gc29ydE9wdGlvbiA6IHtcbiAgICAnb3JkZXInIDogJ2FzYycsXG4gICAgJ29yZGVyYnknIDogJ3RpdGxlJ1xuICB9O1xuXG5cdGNvbnN0IGdldE5leHRQYWdlRGF0YSA9IGFzeW5jIChjdXJyZW50UGFnZSkgPT4ge1xuICAgIGNvbnN0IHVybEhhc1BhcmFtZXRlciA9IGJhc2VVcmwuaW5jbHVkZXMoJz8nKTtcblx0XHRjb25zdCB1cmwgPSBgJHtiYXNlVXJsfSR7dXJsSGFzUGFyYW1ldGVyID8gJyYnIDogJz8nfXBlcl9wYWdlPSR7cGVyUGFnZX0ke2N1cnJlbnRQYWdlID8gYCZwYWdlPSR7Y3VycmVudFBhZ2V9YCA6ICcnfSZvcmRlcj0ke3NvcnRPcHRpb24ub3JkZXJ9Jm9yZGVyYnk9JHtzb3J0T3B0aW9uLm9yZG
4VyYnl9JHtwYXJhbXMgPyBgJiR7cGFyYW1zfWAgOiAnJ31gO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIFN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBhbGxEYXRhID0gYWxsRGF0YS5jb25jYXQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGxvYWQgZGF0YS5gKTtcbiAgICB9XG5cdH1cblxuXHQvLyBnZXQgZmlyc3QgcGFnZSBhbmQgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG5cdGF3YWl0IGdldE5leHRQYWdlRGF0YShwYWdlTnVtKTtcblx0Y3VycmVudFBhZ2UrKztcblxuXHRpZiAocmVzcG9uc2UpIHtcbiAgICB0b3RhbFBhZ2VzID0gcGFnZU51bSA/IHBhZ2VOdW0gOiByZXNwb25zZS5oZWFkZXJzLmdldCgnWC1XUC1Ub3RhbFBhZ2VzJyk7XG4gIH1cblxuXHQvLyBnZXQgYWRkaXRpb25hbCBwYWdlcyBpZiB0aGV5IGV4aXN0XG4gIHdoaWxlIChjdXJyZW50UGFnZSA8PSB0b3RhbFBhZ2VzKSB7XG4gICAgYXdhaXQgZ2V0TmV4dFBhZ2VEYXRhKGN1cnJlbnRQYWdlKTtcblx0XHRjdXJyZW50UGFnZSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhIDogYWxsRGF0YSxcbiAgICByZXN1bHRzVG90YWwgOiByZXNwb25zZS5oZWFkZXJzLmdldCgnWC1XUC1Ub3RhbCcpLFxuICAgIHBhZ2VUb3RhbCA6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVdQLVRvdGFsUGFnZXMnKSxcbiAgfTtcbn1cblxuZXhwb3J0IHsgbG9hZEFQSURhdGEsIGxvYWRQYWdpbmF0ZWRBUElEYXRhIH0gOyIsIi8qKlxuICogRGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGhlbHBlcnNcbiAqL1xuLy8gZGVmYXVsdHNcbmNvbnN0IGRlZmF1bHRab29tTGltaXQgPSAxMDtcbmNvbnN0IGRlZmF1bHRNYXJrZXJab29tTGltaXQgPSAxNDtcbmNvbnN0IGRlZmF1bHRDZW50ZXJMYXQgPSA0MC4wOTI4Mjc2NTY2MDU1NTtcbmNvbnN0IGRlZmF1bHRDZW50ZXJMbmcgPSAtOTguOTcxMDU3NjE2NjI3NTU7XG5cbi8vIGdsb2JhbCBlbGVtZW50c1xubGV0IG1hcENsdXN0ZXI7XG5sZXQgbWFya2VycyA9IFtdO1xubGV0IGluZm9XaW5kb3c7XG5cbi8vIGhlbHBlcnNcbmNvbnN0IGh0bWxFbnRpdHlEZWNvZGVyID0gKCgpID0+IHtcbiAgY29uc3QgdHh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcblxuICByZXR1cm4gZnVuY3Rpb24gZGVjb2RlKHN0cikge1xuICAgIHR4dC5pbm5lckhUTUwgPSBzdHI7XG4gICAgcmV0dXJuIHR4dC52YWx1ZTtcbiAgfTtcbn0pKCk7XG5cbi8qKlxuICogTG9hZCBHb29nbGUgTWFwcyBBUElcbiAqIChwdWxscyBrZXkgZnJvbSBsb2NhbGl6ZWQgc2NyaXB0IHNldCB1cCBpbiB0aGVtZSBjb3JlIGZ1bmN0aW9ucylcbiAqL1xubGV0IGdvb2dsZUFQSVNldHVwID0gKCkgPT4ge1xuICBjb25zdCBnb29nbGVNYXBzQVBJS2V5ID0gd2luZG93LkdPT0dMRV9NQVBTX0RBVEE/LmFwaUtleSB8fCAnJztcblxuICAoZz0+e3ZhciBoLGEsayxwPVwiVGhlIEdvb2dsZSBNYXBzIEphdmFTY3JpcHQgQVBJXCIsYz1cImdvb2dsZVwiLGw9XCJpbXBvcnRMaWJyYXJ5XCIscT1cIl9faWJfX1wiLG09ZG9jdW1lbnQsYj13aW5kb3c7Yj1iW2NdfHwoYltjXT17fSk7dmFyIGQ9Yi5tYXBzfHwoYi5tYXBzPXt9KSxyPW5ldyBTZXQsZT1uZXcgVVJMU2VhcmNoUGFyYW1zLHU9KCk9Pmh8fChoPW5ldyBQcm9taXNlKGFzeW5jKGYsbik9Pnthd2FpdCAoYT1tLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpO2Uuc2V0KFwibGlicmFyaWVzXCIsWy4uLnJdK1wiXCIpO2ZvcihrIGluIGcpZS5zZXQoay5yZXBsYWNlKC9bQS1aXS9nLHQ9PlwiX1wiK3RbMF0udG9Mb3dlckNhc2UoKSksZ1trXSk7ZS5zZXQoXCJjYWxsYmFja1wiLGMrXCIubWFwcy5cIitxKTthLnNyYz1gaHR0cHM6Ly9tYXBzLiR7Y31hcGlzLmNvbS9tYXBzL2FwaS9qcz9gK2U7ZFtxXT1mO2Eub25lcnJvcj0oKT0+aD1uKEVycm9yKHArXCIgY291bGQgbm90IGxvYWQuXCIpKTthLm5vbmNlPW0ucXVlcnlTZWxlY3RvcihcInNjcmlwdFtub25jZV1cIik/Lm5vbmNlfHxcIlwiO20uaGVhZC5hcHBlbmQoYSl9KSk7ZFtsXT9jb25zb2xlLndhcm4ocCtcIiBvbmx5IGxvYWRzIG9uY2UuIElnbm9yaW5nOlwiLGcpOmRbbF09KGYsLi4ubik9PnIuYWRkKGYpJiZ1KCkudGhlbigoKT0+ZFtsXShmLC4uLm4pKX0pKHtcbiAgICBrZXk6IGdvb2dsZU1hcHNBUElLZXksXG4gICAgdjogJ3dlZWtseScsXG4gIH0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgbG9jYXRpb25zIG1hcFxuICogQHBhcmFtIG1hcCAtIEdvb2dsZSBNYXBcbiAqL1xuY29uc3QgbWFwSW5pdCA9IChtYXApID0+IHtcbiAgY29uc3QgTUFQX0lEID0gd2luZG93LkdPT0dMRV9NQVBTX0RBVEE/Lm1hcElkIHx8ICcnO1xuXG4gIGNvbnN0IG1hcE9wdGlvbnMgPSB7XG4gICAgY2VudGVyOiB7IGxhdDogZGVmYXVsdENlbnRlckxhdCwgbG5nOiBkZWZhdWx0Q2VudGVyTG5nIH0sXG4gICAgem9vbTogZGVmYXVsdFpvb21MaW1pdCxcbiAgICBtYXBJZDogTUFQX0lELFxuICAgIG1hcFR5cGVDb250cm9sOiBmYWxzZSxcbiAgICBzdHJlZXRWaWV3Q29udHJvbDogZmFsc2UsXG4gICAgem9vbUNvbnRyb2xPcHRpb25zOiB7XG4gICAgICBwb3NpdGlvbjogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLlRPUF9SSUdIVFxuICAgIH0sXG4gIH07XG5cbiAgbWFwLnNldE9wdGlvbnMobWFwT3B0aW9ucyk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBsb2NhdGlvbnMgbWFwXG4gKiBAcGFyYW0gbWFwIC0gR29vZ2xlIE1hcFxuICogQHBhcmFtIHtPYmplY3R9IGxvY2F0aW9ucyAtIExvY2F0aW9ucyBmb3IgbWFwXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFwTWFya2VySWNvb
4iAtIChvcHRpb25hbCkgTWFwIG1hcmtlciBpY29uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1hcENsdXN0ZXJpbmcgLSAob3B0aW9uYWwpIEVuYWJsZSBtYXAgY2x1c3RlcmluZ1xuICogQHBhcmFtIHtCb29sZWFufSBsaXN0SXNGaWx0ZXJlZCAtIChvcHRpb25hbCkgU3BlY2lmaWVzIGlmIGxpc3QgaGFzIGZpbHRlcnMgYXBwbGllZFxuICovXG5jb25zdCBidWlsZE1hcCA9IChtYXAsIGxvY2F0aW9ucywgbWFwTWFya2VySWNvbiwgbWFwQ2x1c3RlcmluZywgbGlzdElzRmlsdGVyZWQpID0+IHtcbiAgbGV0IGJvdW5kcyAgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XG5cbiAgaWYoIWluZm9XaW5kb3cpIHtcbiAgICBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coeyBtYXhXaWR0aDogNjAwIH0pO1xuICB9XG5cbiAgLy8gZGVsZXRlIGV4aXN0aW5nIG1hcCBtYXJrZXJzXG4gIGlmKG1hcmtlcnMubGVuZ3RoKSB7XG4gICAgbWFya2Vycy5mb3JFYWNoKG1hcmtlciA9PiB7XG4gICAgICBtYXJrZXIuc2V0TWFwKG51bGwpO1xuICAgIH0pO1xuICAgIFxuICAgIG1hcmtlcnMgPSBbXTtcbiAgfVxuXG4gIC8vIHNldCB1cCBuZXcgbWFya2Vyc1xuICBtYXJrZXJzID0gbG9jYXRpb25zLm1hcCgobG9jYXRpb24sIGkpID0+IHtcbiAgICAvLyBjcmVhdGUgbWFwIG1hcmtlciBwaW5cbiAgICBsZXQgbWFwTWFya2VySW1nLFxuICAgICAgICBtYXBNYXJrZXJUaXRsZTtcblxuICAgIGlmKCBtYXBNYXJrZXJJY29uICkge1xuICAgICAgbWFwTWFya2VySW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICAgIG1hcE1hcmtlckltZy5zcmMgPSBtYXBNYXJrZXJJY29uO1xuICAgICAgbWFwTWFya2VySW1nLmFsdCA9IGxvY2F0aW9uLnRpdGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwaW4gPSBuZXcgZ29vZ2xlLm1hcHMubWFya2VyLlBpbkVsZW1lbnQoe1xuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMwMDBcIixcbiAgICAgICAgZ2x5cGhDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICBib3JkZXJDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcE1hcmtlckltZyA9IHBpbjtcbiAgICB9XG4gICAgXG4gICAgLy8gZGVjb2RlIHRpdGxlXG4gICAgbWFwTWFya2VyVGl0bGUgPSBodG1sRW50aXR5RGVjb2Rlcihsb2NhdGlvbi50aXRsZSk7XG5cbiAgICAvLyBjcmVhdGUgdGhlIEFkdmFuY2VkIE1hcmtlclxuICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5tYXJrZXIuQWR2YW5jZWRNYXJrZXJFbGVtZW50KHtcbiAgICAgIG1hcDogbWFwLFxuICAgICAgcG9zaXRpb246IHsgbGF0OiBOdW1iZXIobG9jYXRpb24ubGF0KSwgbG5nOiBOdW1iZXIobG9jYXRpb24ubG5nKSB9LFxuICAgICAgY29udGVudCA6IG1hcE1hcmtlckltZyxcbiAgICAgIHRpdGxlOiBtYXBNYXJrZXJUaXRsZSxcbiAgICAgIGdtcENsaWNrYWJsZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGJvdW5kcy5leHRlbmQobWFya2VyLnBvc2l0aW9uKTtcblxuICAgIC8vIGhhbmRsZSBldmVudHNcbiAgICBjb25zdCBvcGVuSW5mb1dpbmRvdyA9ICgpID0+IHtcbiAgICAgIGxldCBpbmZvV2luZG93Q29udGVudCA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1wb3B1cFwiPlxuICAgICAgICAgICR7bG9jYXRpb24ucG9wdXB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcblxuICAgICAgaW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgaW5mb1dpbmRvdy5zZXRDb250ZW50KGluZm9XaW5kb3dDb250ZW50KTtcbiAgICAgIGluZm9XaW5kb3cub3BlbihtYXAsIG1hcmtlcik7XG4gICAgICBcbiAgICAgIG1hcC5zZXRab29tKGRlZmF1bHRNYXJrZXJab29tTGltaXQpO1xuICAgICAgbWFwLnBhblRvKG1hcmtlci5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgbWFya2VyLmFkZExpc3RlbmVyKCdnbXAtY2xpY2snLCBvcGVuSW5mb1dpbmRvdyk7XG5cbiAgICByZXR1cm4gbWFya2VyO1xuICB9KTtcblxuICAvLyBzZXQgdXAgbWFya2VyIGNsdXN0ZXJpbmdcbiAgaWYgKG1hcENsdXN0ZXJpbmcgJiYgd2luZG93Lm1hcmtlckNsdXN0ZXJlcj8uTWFya2VyQ2x1c3RlcmVyKSB7XG4gICAgaWYoIG1hcENsdXN0ZXIgKSB7XG4gICAgICBtYXBDbHVzdGVyLmNsZWFyTWFya2VycygpO1xuICAgIH1cblxuICAgIG1hcENsdXN0ZXIgPSBuZXcgbWFya2VyQ2x1c3RlcmVyLk1hcmtlckNsdXN0ZXJlcih7bWFya2VycywgbWFwfSk7XG4gIH1cblxuICAvLyByZWNlbnRlciB0aGUgbWFwXG4gIGlmIChsb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIG1hcC5maXRCb3VuZHMoYm91bmRzKTtcblxuICAgIC8vIGxpbWl0IHpvb20gb24gZml0Qm91bmRzXG4gICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXJPbmNlKG1hcCwgXCJib3VuZHNfY2hhbmdlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0YXJnZXRab29tID0gbGlzdElzRmlsdGVyZWQgPyBkZWZhdWx0TWFya2VyWm9vbUxpbWl0IDogZGVmYXVsdFpvb21MaW1pdDtcbiAgICAgIHRoaXMuc2V0Wm9vbShNYXRoLm1pbih0aGlzLmdldFpvb20oKSwgdGFyZ2V0Wm9vbSkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1hcC5zZXRDZW50ZXIoeyBsYXQ6IGRlZmF1bHRDZW50ZXJMYXQsIGxuZzogZGVmYXVsdENlbnRlckxuZyB9KTtcbiAgICBtYXAuc2V0Wm9vbShkZWZhdWx0Wm9vbUxpbWl0KTtcbiAgfVxufVxuXG5leHBvcnQgeyBnb29nbGVBUElTZXR1cCwgbWFwSW5pdCwgYnVpbGRNYXAgfTsiLCIvKipcbiAqIERlYm91bmNlXG4gKi9cbmNvbnN0IGRlYm91bmNlID0gKGNhbGxiYWNrLCB3YWl0KSA9PiB7XG4gIGxldCB0aW1lb3V0SWQgPSBudWxsO1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG59XG5cbi8qKlxuICogU2h1ZmZsZSBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gLSBBcnJheSB0byBzaHVmZmxlXG4gKiBAcmV0dXJucyB7QXJyYXl9IFNodWZmbGVkIGFycmF5XG4gKi9cbmNvbnN0IHNodWZmbGUgPSAoYXJyYXkpID0+IHtcbiAgZm9yIChsZXQgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBsZXQgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpICsgMSkpO1xuICAgIFthcnJheVtpXSwgYXJyYXlbal1dID0gW2FycmF5W2pdLCBhcnJheVtpXV07XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogVW5jaGVjayBsaXN0IG9mIGNoZWNrYm94ZXNcbiAqIEBwYXJhbSBlbGVtIC0gRWxlbWVudCB3aXRoIGNoZWNrYm94ZXNcbiAqL1xubGV0IGNsZWFyQ2hlY2tib3hlcyA9IChwYXJlbnRFbGVtKSA9PiB7XG4gIGxldCBjaGVja2JveGVzID0gcGFyZW50RWxlbS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkJyk7XG4gIFxuICBjaGVja2JveGVzLmZvckVhY2goZWxlbSA9PiB7XG4gICAgZWxlbS5jaGVja2VkID0gZmFsc2U7XG4gIH0pO1xufVxuXG5leHBvcnQgeyBkZWJvdW5jZSwgc2h1ZmZsZSwgY2xlYXJDaGVja2JveGVzIH07IiwiLyoqXG4gKiBDb252ZXJ0IFVSTCBwYXJhbWV0ZXIocykgdG8gYXJyYXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHBhcmFtIC0gU2luZ2xlIFVSTCBwYXJhbWV0ZXIgb3IgYXJyYXkgb2YgVVJMIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgb2YgVVJMIHBhcmFtZXRlcihzKVxuICovXG4gY29uc3QgY29udmVydFBhcmFtVG9BcnJheSA9IChwYXJhbSkgPT4ge1xuICByZXR1cm4gcGFyYW0gPyBwYXJhbS5zcGxpdCgnICcpIDogZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgZnJvbSBVUkxcbiAqIEByZXR1cm5zIHtPYmplY3R9IE9iamVjdCB3aXRoIGFsbCBVUkwgcGFyYW1ldGVycyBpbiB7bmFtZSwgdmFsdWUocyl9IGZvcm1hdFxuICovXG5jb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9PiB7XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIGxldCB1cmxQYXJhbVNldCA9IHt9O1xuXG4gIHVybFBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICB1cmxQYXJhbVNldFtrZXldID0gY29udmVydFBhcmFtVG9BcnJheSh2YWx1ZSk7XG4gIH0pO1xuICBcbiAgcmV0dXJuIHVybFBhcmFtU2V0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBVUkwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtIC0gVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICovXG5cbiBjb25zdCB1cGRhdGVVUkxQYXJhbXMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IGluaXRpYWxVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnRvU3RyaW5nKCk7XG4gIGxldCB1cmxQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmc
4oKTtcblxuICBpZiggaW5pdGlhbFVybFBhcmFtcyAhPSB1cmxQYXJhbXMgKSB7XG4gICAgaWYoIHVybFBhcmFtcy5sZW5ndGggPiAwICkge1xuICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBgJHtsb2NhdGlvbi5wYXRobmFtZX0/JHt1cmxQYXJhbXN9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgYCR7bG9jYXRpb24ucGF0aG5hbWV9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBkYXRlIGEgc2luZ2xlIFVSTCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbSAtIHBhcmFtZXRlciB0byB1cGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbSAtIG5ldyBwYXJhbWV0ZXIgdmFsdWVcbiAqL1xuXG4gY29uc3QgdXBkYXRlU2luZ2xlVVJMUGFyYW0gPSAocGFyYW0sIHZhbHVlKSA9PiB7XG4gIGxldCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gIGlmKCBwYXJhbSAmJiB2YWx1ZSApIHtcbiAgICB1cmxQYXJhbXMuc2V0KHBhcmFtLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdXJsUGFyYW1zLmRlbGV0ZShwYXJhbSk7XG4gIH1cblxuICB1cGRhdGVVUkxQYXJhbXMoIHVybFBhcmFtcyApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBVUkwgcGFyYW1ldGVycyB3aXRoIGZpbHRlciBmaWVsZCB2YWx1ZXNcbiAqIEBwYXJhbSBmaWx0ZXJWYWx1ZXMgLSBhcnJheSBvZiBmaWx0ZXIgZm9ybSB2YWx1ZXNcbiAqL1xuY29uc3QgY3JlYXRlVVJMRmlsdGVyUGFyYW1zID0gKGZpbHRlclZhbHVlcykgPT4ge1xuICBsZXQgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICBmaWx0ZXJWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICBpZiggZWxlbWVudFsndmFsdWUnXSApIHtcbiAgICAgIGlmKCBBcnJheS5pc0FycmF5KGVsZW1lbnRbJ3ZhbHVlJ10pICkge1xuICAgICAgICB1cmxQYXJhbXMuc2V0KGVsZW1lbnRbJ25hbWUnXSwgZWxlbWVudFsndmFsdWUnXS5qb2luKCcgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsUGFyYW1zLnNldChlbGVtZW50WyduYW1lJ10sIGVsZW1lbnRbJ3ZhbHVlJ10pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmxQYXJhbXMuZGVsZXRlKGVsZW1lbnRbJ25hbWUnXSk7XG4gICAgfVxuICB9KTtcblxuICB1cGRhdGVVUkxQYXJhbXModXJsUGFyYW1zKTtcbn1cblxuZXhwb3J0IHsgZ2V0VXJsUGFyYW1zLCBjcmVhdGVVUkxGaWx0ZXJQYXJhbXMsIHVwZGF0ZVVSTFBhcmFtcywgdXBkYXRlU2luZ2xlVVJMUGFyYW0gfTsiLCIvKipcbiAqIFB1c2ggY2hlY2tib3ggdmFsdWVzIHRvIGFuIGFycmF5XG4gKiBAcGFyYW0gZWxlbSAtIEVsZW1lbnQgd2l0aCBjaGVja2JveGVzXG4gKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIGNoZWNrYm94IHZhbHVlc1xuICovXG5jb25zdCBwdXNoQ2hlY2tib3hWYWx1ZXNUb0FycmF5ID0gKGVsZW0pID0+IHtcbiAgbGV0IGNoZWNrYm94ZXMgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJyksXG4gICAgICBhcnJheSA9IFtdO1xuXG4gIGNoZWNrYm94ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICBpZiggZWxlbWVudC5jaGVja2VkICkge1xuICAgICAgYXJyYXkucHVzaCggZWxlbWVudC52YWx1ZSApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGZpZWxkIHZhbHVlKHMpXG4gKiBAcmV0dXJucyBTaW5nbGUgdmFsdWUgZm9yIHRleHQgZmllbGRzLCBhcnJheSBvZiB2YWx1ZXMgZm9yIHJhZGlvIGFuZCBjaGVja2JveCBmaWVsZHNcbiAqL1xuY29uc3QgZ2V0RmllbGRWYWx1ZSA9IChlbGVtZW50LCBmaWx0ZXJUeXBlKSA9PiB7ICBcbiAgaWYoIGZpbHRlclR5cGUgPT0gXCJ0ZXh0XCIgfHwgZmlsdGVyVHlwZSA9PSBcInppcFwiICkge1xuICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWU7XG4gIH1cbiAgXG4gIGlmKCBmaWx0ZXJUeXBlID09IFwic2VsZWN0XCIgKSB7XG4gICAgY29uc3QgZmlsdGVyU2VsZWN0VmFsdWUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpLnZhbHVlO1xuICAgIHJldHVybiBmaWx0ZXJTZWxlY3RWYWx1ZSAmJiBmaWx0ZXJTZWxlY3RWYWx1ZSAhPSAtMSA/IFtmaWx0ZXJTZWxlY3RWYWx1ZV0gOiAnJztcbiAgfVxuICBcbiAgaWYoIGZpbHRlclR5cGUgPT0gXCJyYWRpb1wiICkge1xuICAgIGNvbnN0IGZpbHRlclJhZGlvID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dDpjaGVja2VkJyk7XG4gICAgcmV0dXJuIGZpbHRlclJhZGlvID8gW2ZpbHRlclJhZGlvLnZhbHVlXSA6ICcnO1xuICB9XG4gIFxuICBpZiggZmlsdGVyVHlwZSA9PSBcImNoZWNrYm94XCIgKSB7XG4gICByZXR1cm4gcHVzaENoZWNrYm94VmFsdWVzVG9BcnJheShlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJWYWx1ZTtcbn1cblxuLyoqXG4gKiBHZXQgc2VsZWN0ZWQgdmFsdWVzIGZvciBhbGwgZmlsdGVyIGZpZWxkc1xuICogRmllbGRzIG11c3QgaGF2ZSBkYXRhLWZpbHRlci1uYW1lIGF0dHJpYnV0ZSB0byBiZSBmb3VuZCxcbiAqIHdoaWNoIHNob3VsZCBpbmNsdWRlIHRoZSBVUkwgcGFyYW0gbmFtZSBmb3IgdGhhdCBmaWx0ZXIuXG4gKiBGaWVsZCB0eXBlcyBjYW4gYmUgaW5wdXQsIGNoZWNrYm94LCByYWRpbywgb3Igc2VsZWN0IGFuZFxuICogbXVzdCBiZSBkZW5vdGVkIHdpdGggdGhlIGRhdGEtZmlsdGVyLXR5cGUgYXR0cmlidXRlLlxuICogRWFjaCBmaWx0ZXIgc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgZGF0YS1maWx0ZXItdGF4b25vbXkgYXR0cmlidXRlXG4gKiB0byBpbmRpY2F0ZSB0aGUgYXNzb2NpYXRlZCB0YXhvbm9teSBpdCBmaWx0ZXJzLCB3aXRoIHRoZVxuICogZXhjZXB0aW9uIG9mIGtleXdvcmQgZmllbGRzIHRoYXQgZG8gbm90IHVzZSBhIHRheG9ub215IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBvYmplY3RzIHdpdGggZmlsdGVyIHZhbHVlc1xuICovXG5jb25zdCBnZXRGaWx0ZXJWYWx1ZXMgPSAoZmlsdGVyRmllbGRzKSA9PiB7XG4gIGxldCBmaWx0ZXJWYWx1ZUxpc3QgPSBbXTtcbiAgXG4gIGZpbHRlckZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGxldCBmaWx0ZXJOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmlsdGVyLW5hbWUnKSxcbiAgICAgICAgZmlsdGVyVGF4b25vbXkgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1maWx0ZXItdGF4b25vbXknKSxcbiAgICAgICAgZmlsdGVyVHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWZpbHRlci10eXBlJyk7XG5cbiAgICBsZXQgZmlsdGVyVmFsdWUgPSBnZXRGaWVsZFZhbHVlKGVsZW1lbnQsIGZpbHRlclR5cGUpO1xuXG4gICAgZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZS5sZW5ndGggPiAwID8gZmlsdGVyVmFsdWUgOiBmYWxzZTtcblxuICAgIGZpbHRlclZhbHVlTGlzdC5wdXNoKHtcbiAgICAgIG5hbWU6IGZpbHRlck5hbWUsXG4gICAgICB0YXhvbm9teTogZmlsdGVyVGF4b25vbXksXG4gICAgICB0eX
4BlOiBmaWx0ZXJUeXBlLFxuICAgICAgdmFsdWU6IGZpbHRlclZhbHVlXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJWYWx1ZUxpc3Q7XG59XG5cbi8qKlxuICogU2V0IGZpbHRlciB2YWx1ZXMgZnJvbSBVUkwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFVSTCBwYXJhbWV0ZXJzIG9iamVjdFxuICovXG5jb25zdCBzZXRGaWx0ZXJWYWx1ZXMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHNldEZpZWxkVmFsdWUgPSAoZmllbGQsIGZpZWxkVmFsdWUpID0+IHtcbiAgICBpZiggZmllbGQgKSB7XG4gICAgICBpZiggZmllbGRWYWx1ZS5sZW5ndGggPiAxICkge1xuICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkVmFsdWUuam9pbignICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZFZhbHVlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNldFJhZGlvRmllbGRWYWx1ZSA9IChmaWVsZCkgPT4ge1xuICAgIGlmKCBmaWVsZCApIHtcbiAgICAgIGZpZWxkLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNldENoZWNrYm94R3JvdXBWYWx1ZXMgPSAoIGZpZWxkR3JvdXAsIGZpZWxkVmFsdWVzKSA9PiB7XG4gICAgaWYoIGZpZWxkVmFsdWVzICYmIEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZXMpICkge1xuICAgICAgZmllbGRWYWx1ZXMuZm9yRWFjaChjaGVja1ZhbCA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWxlbSA9IGZpZWxkR3JvdXAucXVlcnlTZWxlY3RvcignaW5wdXRbdmFsdWU9XCInICsgY2hlY2tWYWwgKyAnXCJdJyk7XG5cbiAgICAgICAgaWYoIGNoZWNrYm94RWxlbSApIHtcbiAgICAgICAgICBjaGVja2JveEVsZW0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZvcihjb25zdCBwYXJhbSBpbiBwYXJhbXMpIHtcbiAgICBpZiggcGFyYW0gPT0gJ3NvcnRieScgKSB7XG4gICAgICBjb25zdCBzb3J0RmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1maWx0ZXItc29ydF0gc2VsZWN0Jyk7XG5cbiAgICAgIGlmKCBzb3J0RmllbGQgKSB7XG4gICAgICAgIHNvcnRGaWVsZC52YWx1ZSA9IHBhcmFtc1twYXJhbV1bMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmFtRmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1maWx0ZXItbmFtZT0nICsgcGFyYW0ucmVwbGFjZSgvXFxbfFxcXS9nLCAnJykgKyAnXScpO1xuXG4gICAgICBpZiggcGFyYW1GaWVsZCApIHtcbiAgICAgICAgY29uc3QgcGFyYW1GaWVsZFR5cGUgPSBwYXJhbUZpZWxkLmdldEF0dHJpYnV0ZSgnZGF0YS1maWx0ZXItdHlwZScpO1xuICBcbiAgICAgICAgLy8gc2V0IGZpZWxkIHZhbHVlc1xuICAgICAgICBpZiggcGFyYW1GaWVsZFR5cGUgPT0gJ3RleHQnIHx8IHBhcmFtRmllbGRUeXBlID09ICd6aXAnICkgeyAvLyB0ZXh0IG9yIHppcCBmaWx0ZXIgdHlwZVxuICAgICAgICAgIHNldEZpZWxkVmFsdWUoIHBhcmFtRmllbGQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cInRleHRcIl0nKSwgcGFyYW1zW3BhcmFtXSApO1xuICAgICAgICB9IGVsc2UgaWYoIHBhcmFtRmllbGRUeXBlID09ICdzZWxlY3QnKSB7IC8vIHNlbGVjdCBmaWx0ZXIgdHlwZXNcbiAgICAgICAgICBzZXRGaWVsZFZhbHVlKCBwYXJhbUZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpLCBwYXJhbXNbcGFyYW1dICk7XG4gICAgICAgIH0gZWxzZSBpZiggcGFyYW1GaWVsZFR5cGUgPT0gJ3JhZGlvJyApIHsgLy8gcmFkaW8gZmlsdGVyIHR5cGVzXG4gICAgICAgICAgc2V0UmFkaW9GaWVsZFZhbHVlKCBwYXJhbUZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3ZhbHVlPVwiJyArIHBhcmFtc1twYXJhbV1bMF0gKyAnXCJdJykgKTtcbiAgICAgICAgfSBlbHNlIGlmKCBwYXJhbUZpZWxkVHlwZSA9PSAnY2hlY2tib3gnICkgeyAvLyBjaGVja2JveCBmaWx0ZXIgdHlwZXNcbiAgICAgICAgICBzZXRDaGVja2JveEdyb3VwVmFsdWVzKCBwYXJhbUZpZWxkLCBwYXJhbXNbcGFyYW1dIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBnZXRGaWVsZFZhbHVlLCBnZXRGaWx0ZXJWYWx1ZXMsIHNldEZpbHRlclZhbHVlcyB9OyIsIi8qKlxuICogR2V0cyB6aXAgY29kZSBmcm9tIFVSTCBwYXJhbXNcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFppcCBjb2RlIGZyb20gVVJMIHBhcmFtc1xuICovXG5sZXQgZ2V0WmlwQ29kZUZyb21VUkwgPSAoKSA9PiB7XG4gIGxldCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICBsZXQgemlwVmFsdWUgPSAnJztcblxuICBpZiggcGFyYW1zLmhhcygnemlwJykgKSB7XG4gICAgemlwVmFsdWUgPSBwYXJhbXMuZ2V0KCd6aXAnKTtcbiAgfVxuXG4gIHJldHVybiB6aXBWYWx1ZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB6aXAgY29kZVxuICogQHBhcmFtIHtTdHJpbmd9IHppcCAtIHppcCBjb2RlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgdmFsaWQgemlwP1xuICovXG5sZXQgdmFsaWRhdGVaaXAgPSAoemlwKSA9PiB7XG4gIHJldHVybiAvKF5cXGR7NX0kKXwoXlxcZHs1fS1cXGR7NH0kKS8udGVzdCh6aXApO1xufVxuXG4vKipcbiAqIFJlbW92ZSB6aXBFcnJvciBkaXZcbiAqL1xuIGxldCBjbGVhclppcEVycm9yID0gKCkgPT4ge1xuICBsZXQgZXJyb3JXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ppcEVycm9yJyk7XG5cbiAgaWYoIGVycm9yV3JhcHBlciApIHtcbiAgICBlcnJvcldyYXBwZXIucmVtb3ZlKCk7XG4gIH1cblxufVxuXG4vKipcbiAqIEFkZCBlcnJvciB0byB6aXAgZmllbGQgd2l0aCBkYXRhLWZpbHRlci1uYW1lPXppcFxuICogQHBhcmFtIHtTdHJpbmd9IHppcCAtIEVycm9yIHRvIGluc2VydFxuICovXG5sZXQgYWRkWmlwRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgbGV0IHppcEZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLW5hbWU9XCJ6aXBcIl0nKTtcbiAgbGV0IGVycm9yV3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6aXBFcnJvcicpO1xuICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG5cbiAgaWYoICFlcnJvcldyYXBwZXIgKSB7XG4gICAgZXJyb3JXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZXJyb3JXcmFwcGVyLmlkID0gJ3ppcEVycm9yJztcbiAgICBlcnJvcldyYXBwZXIucm9sZSA9ICdhbGVydCc7XG4gICAgZXJyb3JXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ZpbHRlci1maWVsZF9fZXJyb3InKTtcbiAgfVxuXG4gIGlmKCBlcnJvciA9PSAnaW52YWxpZCcgKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gJ0VudGVyIGEgdmFsaWQsIGZpdmUtZGlnaXQgemlwIGNvZGUuJztcbiAgfSBlbHNlIGlmKCBlcnJvciA9PSBcIlpFUk9fUkVTVUxUU1wiICkge1xuICAgIGVycm9yTWVzc2FnZSA9ICdJbnZhbGlkIHppcCBjb2RlLic7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIGVycm9yTWVzc2FnZSA9ICdUaGVyZSB3YXMgYW4gZXJyb3Igd2l0aCB5b3VyIHNlYXJjaC4nXG4gIH1cblxuICBpZiAoICFlcnJvck1lc3NhZ2UgKSByZXR1cm4gZmFsc2U7XG5cbiAgZXJyb3JXcmFwcGVyLnRleHRDb250ZW50ID0gZXJyb3JNZXNzYWdlO1xuICB6aXBGaWVsZC5hcHBlbmQoZXJyb3JXcmFwcGVyKTtcbn1cblxuLyoqXG4gKiBHZW9jb2RlIHppcCBjb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gemlwIC0gemlwIGNvZGVcbiAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgd2l0aCBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlXG4gKi9cbmxldCBnZW9jb2RlWmlwID0gKHppcCkgPT4ge1xuICBsZXQgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGdlb2NvZGVyLmdlb2NvZGUoIHsgJ2FkZHJlc3MnIDogemlwIH0sIGZ1bmN0aW9uKHJlc3VsdHMsIHN0YXR1cykge1xuICAgICAgaWYgKHN0YXR1cyA9PSAnT0snKSB7XG4gICAgICAgI
4HJlc29sdmUoW3Jlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24ubGF0KCksIHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24ubG5nKCldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChzdGF0dXMpO1xuICAgICAgfVxuICAgIH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBHZXQgZ2VvY29kZWQgemlwIGZyb20gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb29yZHMgLSBjb29yZGluYXRlc1xuICogQHJldHVybnMge1N0cmluZ30gWmlwIGNvZGVcbiAqL1xubGV0IGdldFppcEZyb21Db29yZHMgPSAoY29vcmRzKSA9PiB7XG4gIGxldCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnbG9jYXRpb24nIDogY29vcmRzIH0sIGZ1bmN0aW9uKHJlc3VsdHMsIHN0YXR1cykge1xuICAgICAgaWYgKHN0YXR1cyA9PSAnT0snKSB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0c1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRpc3RhbmNlIChpbiBtaWxlcykgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5fSBwb2ludDEgLSBbbGF0aXR1ZGUsIGxvbmdpdHVkZV1cbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50MiAtIFtsYXRpdHVkZSwgbG9uZ2l0dWRlXVxuICogQHJldHVybnMge1N0cmluZ30gRGlzdGFuY2UgaW4gbWlsZXNcbiAqL1xubGV0IGNhbGN1bGF0ZURpc3RhbmNlID0gKHBvaW50MSwgcG9pbnQyKSA9PiB7XG4gIHZhciBSID0gMzk1OC44OyAvLyBSYWRpdXMgb2YgdGhlIEVhcnRoIGluIG1pbGVzXG4gIHZhciBybGF0MSA9IHBvaW50MVswXSAqIChNYXRoLlBJLzE4MCk7IC8vIENvbnZlcnQgZGVncmVlcyB0byByYWRpYW5zXG4gIHZhciBybGF0MiA9IHBvaW50MlswXSAqIChNYXRoLlBJLzE4MCk7IC8vIENvbnZlcnQgZGVncmVlcyB0byByYWRpYW5zXG4gIHZhciBkaWZmbGF0ID0gcmxhdDItcmxhdDE7IC8vIFJhZGlhbiBkaWZmZXJlbmNlIChsYXRpdHVkZXMpXG4gIHZhciBkaWZmbG9uID0gKHBvaW50MlsxXS1wb2ludDFbMV0pICogKE1hdGguUEkvMTgwKTsgLy8gUmFkaWFuIGRpZmZlcmVuY2UgKGxvbmdpdHVkZXMpXG5cbiAgdmFyIGQgPSAyICogUiAqIE1hdGguYXNpbihNYXRoLnNxcnQoTWF0aC5zaW4oZGlmZmxhdC8yKSpNYXRoLnNpbihkaWZmbGF0LzIpK01hdGguY29zKHJsYXQxKSpNYXRoLmNvcyhybGF0MikqTWF0aC5zaW4oZGlmZmxvbi8yKSpNYXRoLnNpbihkaWZmbG9uLzIpKSk7XG4gIHJldHVybiBkO1xufVxuXG4vKipcbiAqIEZpbHRlciBsb2NhdGlvbnMgbGlzdCBieSB6aXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gT2JqZWN0IGFycmF5IHRvIGZpbHRlclxuICogQHBhcmFtIHtBcnJheX0gY29vcmRzIC0gQ29vcmRpbmF0ZXMgb2YgemlwIHRvIGZpbHRlciBieVxuICovXG5jb25zdCBmaWx0ZXJCeVppcCA9IChkYXRhLCBjb29yZHMpID0+IHtcbiAgbGV0IGxvY2F0aW9uc0xpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgbGV0IGZpbHRlcmVkUmVzdWx0cyA9IFtdO1xuICBcbiAgaWYoIGNvb3JkcyAmJiBjb29yZHMubGVuZ3RoID09IDIgKSB7XG4gICAgbG9jYXRpb25zTGlzdC5mb3JFYWNoKChsaXN0SXRlbSkgPT4ge1xuXG4gICAgICBpZiggbGlzdEl0ZW0uaGFzT3duUHJvcGVydHkoJ2xvY2F0aW9ucycpICkgeyAvLyBpZiBsb2NhdGlvbnMgYXJlIGEgcHJvcGVydHkgYW5kIG5vdCB0aGUgbWFpbiBsaXN0IGl0ZW1cbiAgICAgICAgbGV0IGxvY2F0aW9ucyA9IGxpc3RJdGVtWydsb2NhdGlvbnMnXTtcbiAgICAgICAgbGV0IGxvd2VzdE1pbGVzO1xuICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBsb2NhdGlvbkNvb3JkcyA9IFtsb2NhdGlvbnNbaV0ubGF0LCBsb2NhdGlvbnNbaV0ubG5nXTtcbiAgICAgICAgICBsZXQgcmF3TWlsZXMgPSBjYWxjdWxhdGVEaXN0YW5jZShjb29yZHMsIGxvY2F0aW9uQ29vcmRzKTtcbiAgICAgICAgICBsZXQgbWlsZXMgPSBNYXRoLnJvdW5kKChyYXdNaWxlcyAqIDEwKSkgLyAxMDtcbiAgICAgICAgICBsb2NhdGlvbnNbaV0ubWlsZXMgPSBtaWxlcztcblxuICAgICAgICAgIGlmKCAhbG93ZXN0TWlsZXMgfHwgbG93ZXN0TWlsZXMgPiBtaWxlcyApIHtcbiAgICAgICAgICAgIGxvd2VzdE1pbGVzID0gbWlsZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoIGxvd2VzdE1pbGVzICkge1xuICAgICAgICAgIGxpc3RJdGVtLmRpc3RhbmNlID0gbG93ZXN0TWlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaCggbGlzdEl0ZW0gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBsb2NhdGlvbiA9IGxpc3RJdGVtO1xuICAgICAgICBsZXQgbG9jYXRpb25Db29yZHMgPSBbbG9jYXRpb24ubGF0LCBsb2NhdGlvbi5sbmddO1xuICAgICAgICBsZXQgcmF3TWlsZXMgPSBjYWxjdWxhdGVEaXN0YW5jZShjb29yZHMsIGxvY2F0aW9uQ29vcmRzKTtcbiAgICAgICAgbGV0IG1pbGVzID0gTWF0aC5yb3VuZCgocmF3TWlsZXMgKiAxMCkpIC8gMTA7XG4gICAgICAgIFxuICAgICAgICBsaXN0SXRlbS5kaXN0YW5jZSA9IG1pbGVzIHx8IG51bGw7XG5cbiAgICAgICAgZmlsdGVyZWRSZXN1bHRzLnB1c2goIGxvY2F0aW9uICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdJbnZhbGlkIGNvb3JkaW5hdGVzLicpXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IHsgdmFsaWRhdGVaaXAsIGdlb2NvZGVaaXAsIGdldFppcEZyb21Db29yZHMsIGNhbGN1bGF0ZURpc3RhbmNlLCBnZXRaaXBDb2RlRnJvbVVSTCwgYWRkWmlwRXJyb3IsIGNsZWFyWmlwRXJyb3IsIGZpbHRlckJ5WmlwIH07IiwiaW1wb3J0IHsgc2h1ZmZsZSB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBnZXRaaXBDb2RlRnJvbVVSTCwgdmFsaWRhdGVaaXAgfSBmcm9tICcuL3ppcC1zZWFyY2guanMnO1xuXG4vKipcbiAqIFNvcnQgbGlzdFxuICogQHBhcmFtIHtPYmplY3R9IGxpc3QgLSBsaXN0IHRvIHNvcnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3J0RGVmYXVsdCAtIGRlZmF1bHQgc29ydGluZyBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBhbHBoYVNvcnRWYWx1ZSAtIChvcHRpb25hbCkgZmllbGQgdG8gYWxwaGEgc29ydCBieSBcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNvcnRlZCBsaXN0XG4gKi9cbiBsZXQgc29ydExpc3QgPSAobGlzdCwgc29ydERlZmF1bHQsIGFscGhhU29ydFZhbHVlKSA9PiB7XG4gIGxldCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICBsZXQgc29ydFZhbHVlID0gJyc7XG4gIGFscGhhU29ydFZhbHVlID0gYWxwaGFTb3J0VmFsdWUgPyBhbHBoYVNvcnRWYWx1ZSA6IFwidGl0bGVcIjtcblxuICAvLyBpZiBzb3J0YnkgcGFyYW0gaW4gVVJMLCBvdmVycmlkZSBkZWZhdWx0IGFuZCB6aXAgc29ydFxuICBpZiggcGFyYW1zLmhhcygnc29ydGJ5JykgKSB7XG4gICAgc29ydFZhbHVlID0gcGFyYW1zLmdldCgnc29ydGJ5Jyk7XG4gIH1cblxuICAvLyBpZiB6aXAgc2VhcmNoIGFuZCBzb3J0YnkgaXMgbm90IG92ZXJyaWRkZW5cbiAgLy8gc29ydCBieSB6aXAgdmFsdWUgaWYgemlwIGV4aXN0c1xuICAvLyBvdGhlcndpc2UgdXNlIGRlZmF1bHQgc29ydCB2YWx1ZVxuICBpZiggIXNvcnRWYWx1ZSApIHtcbiAgICBsZXQgemlwVmFsdWUgPSBnZXRaaXBDb2RlRnJvbVVSTCgpO1xuXG4gICAgaWYoIHppcFZhbHVlICYmIHZhbGlkYXRlWmlwKHppcFZhbHVlKSApIHtcbiAgICAgIHNvcnRWYWx1ZSA9ICd6aXAnO1xuICAgIH0gZWxzZSBpZiggc29ydERlZmF1bHQgKSB7XG4gICAgICBzb3J0VmFsdWUgPSBzb3J0RGVmYXVsdDtcbiAgICB9XG4gI
4H1cbiAgXG4gIGlmKCBzb3J0VmFsdWUgPT0gJ3ppcCcgKSB7IC8vIHNvcnQgYnkgemlwIHZhbHVlXG4gICAgbGlzdC5zb3J0KChhLCBiKSA9PiAoYVthbHBoYVNvcnRWYWx1ZV0udG9Mb3dlckNhc2UoKSA+IGJbYWxwaGFTb3J0VmFsdWVdLnRvTG93ZXJDYXNlKCkpID8gMSA6IC0xKTtcblxuICAgIGxpc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEuZGlzdGFuY2UgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgXG4gICAgICBpZiAoYi5kaXN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgXG4gICAgICBpZiAoYS5kaXN0YW5jZSA9PT0gYi5kaXN0YW5jZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICBcbiAgICAgIHJldHVybiBhLmRpc3RhbmNlIDwgYi5kaXN0YW5jZSA/IC0xIDogMTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChzb3J0VmFsdWUgPT0gJ2FscGhhRGVzYycgKSB7IC8vIHNvcnQgYnkgYWxwaGEgZGVzY2VuZGluZ1xuICAgIGxpc3Quc29ydCgoYSwgYikgPT4gKGFbYWxwaGFTb3J0VmFsdWVdLnRvTG93ZXJDYXNlKCkgPiBiW2FscGhhU29ydFZhbHVlXS50b0xvd2VyQ2FzZSgpKSA/IC0xIDogMSk7XG4gIH0gZWxzZSBpZiAoc29ydFZhbHVlID09ICdyYW5kb20nICkgeyAvLyBzb3J0IGJ5IHJhbmRvbVxuICAgIGxpc3QgPSBzaHVmZmxlKGxpc3QpO1xuICB9IGVsc2UgaWYgKHNvcnRWYWx1ZSA9PSAnY3VzdG9tX29yZGVyJyApIHsgLy8gc29ydCBieSBjdXN0b20gb3JkZXJcbiAgICBsaXN0LnNvcnQoKGEsIGIpID0+IChhWydjdXN0b21fb3JkZXInXSA+IGJbJ2N1c3RvbV9vcmRlciddKSA/IDEgOiAtMSk7XG4gIH0gZWxzZSB7IC8vIGRlZmF1bHQgc29ydCBieSBhbHBoYSBhc2NlbmRpbmdcbiAgICBsaXN0LnNvcnQoKGEsIGIpID0+IChhW2FscGhhU29ydFZhbHVlXS50b0xvd2VyQ2FzZSgpID4gYlthbHBoYVNvcnRWYWx1ZV0udG9Mb3dlckNhc2UoKSkgPyAxIDogLTEpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG5cbmV4cG9ydCB7IHNvcnRMaXN0IH07IiwiLyoqXG4gKiBCdWlsZCByZXN1bHRzIGxpc3RcbiAqIEBwYXJhbSBkYXRhIC0gUmVzdWx0cyB0byBkaXNwbGF5XG4gKiBAcGFyYW0gcmVzdWx0c0VsZW0gLSBFbGVtZW50IHdoZXJlIHJlc3VsdHMgd2lsbCBiZSBpbnNlcnRlZFxuICogQHBhcmFtIGxpc3RCdWlsZGVyRnVuY3Rpb24gLSBUZW1wbGF0aW5nIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFnZU51bSAtIEN1cnJlbnQgcGFnaW5hdGVkIHBhZ2UgbnVtYmVyXG4gKiBAcGFyYW0gcGVyUGFnZSAtIE51bWJlciBvZiByZXN1bHRzIHRvIGRpc3BsYXkgcGVyIHBhZ2VcbiAqL1xuY29uc3QgYnVpbGRSZXN1bHRzTGlzdCA9IChkYXRhLCByZXN1bHRzRWxlbSwgbGlzdEJ1aWxkZXJGdW5jdGlvbiwgcGFnZU51bSwgcGVyUGFnZSkgPT4ge1xuICBsZXQgcmVzdWx0cyA9ICcnO1xuICBsZXQgZXJyb3JNZXNzYWdlRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZpbHRlci1lcnJvcl0nKTtcbiAgbGV0IGVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZUVsZW0gPyBlcnJvck1lc3NhZ2VFbGVtLmlubmVySFRNTCA6ICdObyByZXN1bHRzIHdlcmUgZm91bmQuIFBsZWFzZSB0cnkgYW5vdGhlciBzZWFyY2guJztcblxuICBpZiggZGF0YS5sZW5ndGggPiAwICkge1xuICAgIGlmKCBwZXJQYWdlID4gMCApIHtcbiAgICAgIGxldCBwYWdpbmF0aW9uU3RhcnQsXG4gICAgICAgICAgcGFnaW5hdGlvbkVuZCxcbiAgICAgICAgICBjdXJyZW50UGFnZVJlc3VsdHMsXG4gICAgICAgICAgcGFnZUNvdW50ID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gcGVyUGFnZSk7XG5cbiAgICAgIGlmKCAhcGFnZU51bSApIHtcbiAgICAgICAgcGFnZU51bSA9IDE7XG4gICAgICB9XG5cbiAgICAgIHBhZ2luYXRpb25TdGFydCA9IChwYWdlTnVtIC0gMSkgKiBwZXJQYWdlO1xuICAgICAgcGFnaW5hdGlvbkVuZCA9IHBhZ2luYXRpb25TdGFydCArIHBlclBhZ2U7XG5cbiAgICAgIGN1cnJlbnRQYWdlUmVzdWx0cyA9IGRhdGEuc2xpY2UocGFnaW5hdGlvblN0YXJ0LCBwYWdpbmF0aW9uRW5kKTtcblxuICAgICAgaWYoIHBhZ2VOdW0gPD0gcGFnZUNvdW50ICkge1xuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgY3VycmVudFBhZ2VSZXN1bHRzKSB7XG4gICAgICAgICAgcmVzdWx0cyArPSBsaXN0QnVpbGRlckZ1bmN0aW9uKHJlc3VsdCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzID0gZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCByZXN1bHQgb2YgZGF0YSkge1xuICAgICAgICByZXN1bHRzICs9IGxpc3RCdWlsZGVyRnVuY3Rpb24ocmVzdWx0KTtcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSBlcnJvck1lc3NhZ2U7XG4gIH1cbiAgICBcbiAgcmVzdWx0c0VsZW0uaW5uZXJIVE1MID0gcmVzdWx0cztcbn1cblxuZXhwb3J0IHsgYnVpbGRSZXN1bHRzTGlzdCB9OyIsImltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcblxuLyoqXG4gKiBPcHRpb24gZmllbGQgZHJvcGRvd24gdG9nZ2xlXG4gKiBAcGFyYW0gdG9nZ2xlRmllbGQgLSBGaWVsZCB3cmFwcGVyIHdpdGggdG9nZ2xlIHNlY3Rpb25cbiAqL1xuY29uc3Qgb3B0aW9uRHJvcGRvd25Ub2dnbGUgPSAodG9nZ2xlRmllbGQpID0+IHtcbiAgbGV0IGRyb3Bkb3duaXNPcGVuID0gZmFsc2U7XG5cbiAgY29uc3Qgb3BlbkRyb3Bkb3duID0gKGRyb3Bkb3duKSA9PiB7XG4gICAgbGV0IHRhcmdldElEID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgbGV0IGJ1dHRvblRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldElEKTtcbiAgICBcbiAgICBkcm9wZG93bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIGJ1dHRvblRhcmdldC5oaWRkZW4gPSBmYWxzZTtcbiAgICB0b2dnbGVGaWVsZC5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgICBkcm9wZG93bmlzT3BlbiA9IHRydWU7XG4gIH1cblxuICBjb25zdCBjbG9zZURyb3Bkb3duID0gKGRyb3Bkb3duKSA9PiB7XG4gICAgbGV0IHRhcmdldElEID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgbGV0IGJ1dHRvblRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldElEKTtcbiAgICBcbiAgICBkcm9wZG93bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICBidXR0b25UYXJnZXQuaGlkZGVuID0gdHJ1ZTtcbiAgICB0b2dnbGVGaWVsZC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICBkcm9wZG93bmlzT3BlbiA9IGZ
4hbHNlO1xuICB9XG5cbiAgdG9nZ2xlRmllbGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBpZiggZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnanMtZHJvcGRvd24tdG9nZ2xlJykgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCB0b2dnbGUgPSBldmVudC50YXJnZXQ7XG4gICAgICBsZXQgYnV0dG9uU3RhdGUgPSB0b2dnbGUuZ2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJyk7XG5cbiAgICAgIGlmKCBidXR0b25TdGF0ZSA9PSBcImZhbHNlXCIgKSB7XG4gICAgICAgIG9wZW5Ecm9wZG93bih0b2dnbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VEcm9wZG93bih0b2dnbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgdG9nZ2xlRmllbGQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgIGlmICggZHJvcGRvd25pc09wZW4gJiYgZXZlbnQua2V5ID09IFwiRXNjYXBlXCIgKSB7XG4gICAgICBjb25zdCB0b2dnbGVCdXR0b24gPSB0b2dnbGVGaWVsZC5xdWVyeVNlbGVjdG9yKFwiLmpzLWRyb3Bkb3duLXRvZ2dsZVwiKTtcbiAgICAgIGNsb3NlRHJvcGRvd24odG9nZ2xlQnV0dG9uKTtcbiAgICAgIHRvZ2dsZUJ1dHRvbi5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRmlsdGVyIGZpZWxkIG9wdGlvbnNcbiAqIEBwYXJhbSBmaWx0ZXJGaWVsZCAtIFNlYXJjaCBmaWVsZCBmb3IgZmlsdGVyaW5nIGFuIG9wdGlvbnMgbGlzdFxuICogQHBhcmFtIG9wdGlvbnNUb0ZpbHRlciAtIERhdGEgYXR0cmlidXRlIG9uIGVhY2ggaXRlbSB0byBmaWx0ZXJcbiAqL1xuY29uc3QgZmlsdGVyT3B0aW9uRmllbGQgPSAoZmlsdGVyRmllbGQsIG9wdGlvbnNUb0ZpbHRlcikgPT4ge1xuICBjb25zdCB1cGRhdGVPcHRpb25zRmlsdGVyID0gKGZpbHRlckZpZWxkLCBmaWx0ZXJPcHRpb25zKSA9PiB7XG4gICAgbGV0IGZpbHRlclZhbHVlID0gZmlsdGVyRmllbGQudmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmKCAhZmlsdGVyRmllbGQgfHwgIWZpbHRlck9wdGlvbnMgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmlsdGVyT3B0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgbGV0IGl0ZW1UZXh0ID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpdGVtLmNsYXNzTGlzdC50b2dnbGUoJ2hpZGUnLCAhaXRlbVRleHQuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBmaWx0ZXJGaWVsZElucHV0ID0gZmlsdGVyRmllbGQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICBsZXQgZmlsdGVyT3B0aW9ucyA9IGZpbHRlckZpZWxkLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChcIltcIiArIG9wdGlvbnNUb0ZpbHRlciArIFwiXVwiKTtcbiAgXG4gIGZpbHRlckZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZGVib3VuY2UoZXZlbnQgPT4ge1xuICAgIHVwZGF0ZU9wdGlvbnNGaWx0ZXIoZmlsdGVyRmllbGRJbnB1dCwgZmlsdGVyT3B0aW9ucyk7XG4gIH0sIDI1MCkpO1xufVxuXG5leHBvcnQgeyBvcHRpb25Ecm9wZG93blRvZ2dsZSwgZmlsdGVyT3B0aW9uRmllbGQgfTsiLCIvLyBEZWZhdWx0c1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zLCBjcmVhdGVVUkxGaWx0ZXJQYXJhbXMsIHVwZGF0ZVNpbmdsZVVSTFBhcmFtIH0gZnJvbSAnLi91cmwtcGFyYW1zLmpzJztcbmltcG9ydCB7IGdldEZpbHRlclZhbHVlcywgc2V0RmlsdGVyVmFsdWVzIH0gZnJvbSAnLi9maWx0ZXItdmFsdWVzLmpzJztcbmltcG9ydCB7IGZpbHRlckJ5S2V5d29yZCwgZmlsdGVyQnlDYXRlZ29yeSB9IGZyb20gJy4vZmlsdGVyLW1ldGhvZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQYWdpbmF0aW9uIH0gZnJvbSAnLi9wYWdpbmF0aW9uLmpzJztcbmltcG9ydCB7IHNvcnRMaXN0IH0gZnJvbSAnLi9zb3J0aW5nLmpzJztcbmltcG9ydCB7IGJ1aWxkUmVzdWx0c0xpc3QgfSBmcm9tICcuL2J1aWxkLWxpc3QuanMnO1xuaW1wb3J0IHsgc2hvd1NlbGVjdGVkT3B0aW9ucyB9IGZyb20gJy4vZmllbGQtY291bnQuanMnO1xuaW1wb3J0IHsgb3B0aW9uRHJvcGRvd25Ub2dnbGUsIGZpbHRlck9wdGlvbkZpZWxkIH0gZnJvbSAnLi9vcHRpb24tZmllbGRzLmpzJztcblxuLy8gTG9jYXRpb24gZmVhdHVyZXNcbmltcG9ydCB7IGdldFppcENvZGVGcm9tVVJMLCBnZW9jb2RlWmlwLCB2YWxpZGF0ZVppcCwgYWRkWmlwRXJyb3IsIGNsZWFyWmlwRXJyb3IsIGZpbHRlckJ5WmlwLCBnZXRaaXBGcm9tQ29vcmRzIH0gZnJvbSAnLi96aXAtc2VhcmNoLmpzJztcbmltcG9ydCB7IG1hcEluaXQsIGJ1aWxkTWFwIH0gZnJvbSAnLi9tYXAuanMnO1xuXG4vL1xuLy8gVUkgRUxFTUVOVFNcbi8vXG5cbmxldCBmaWx0ZXJXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLWZpZWxkc10nKTsgLy8gZm9ybSBjb250YWluaW5nIGZpbHRlciBmaWVsZHNcbmxldCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXJXcmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWZpbHRlci1uYW1lXScpOyAvLyBmaWx0ZXIgZmllbGRzXG5sZXQgZmlsdGVyTG9hZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLWxvYWRlcl0nKTsgLy8gbG9hZGluZyBtZXNzYWdlXG5sZXQgZmlsdGVyUmVzdWx0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZpbHRlci1yZXN1bHRzXScpOyAvLyByZXN1bHRzIGNvbnRhaW5lclxubGV0IGZpbHRlclJlc3VsdHNDb3VudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXJlc3VsdC1jb3VudF0nKTsgLy8gcmVzdWx0cyBjb3VudGVyXG5sZXQgZmlsdGVyRmluZExvY2F0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLWZpbmRdJyk7IC8vIGZpbmQgbXkgbG9jYXRpb24gYnV0dG9uXG5sZXQgZmlsdGVyQ2xlYXJCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtZmlsdGVyLWNsZWFyXScpOyAvLyBjbGVhciBidXR0b25cbmxldCBmaWx0ZXJQcmludEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1maWx0ZXItcHJpbnRdJyk7IC8vIHByaW50IGJ1dHRvblxubGV0IGZpbHRlclNoYXJlQnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWZpbHRlci1zaGFyZV0nKTsgLy8gc2hhcmUgYnV0dG9uXG5sZXQgZmlsdGVyU29ydEZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLXNvcnRdJyk7IC8vIHNvcnQgZmllbGRcbmxldCBmaWx0ZXJQYWdpbmF0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLXBhZ2luYXRpb25dJyk7IC8vIHBhZ2luYXRpb24gY29udGFpbmVyXG5cbi8qKlxuICogQWRkcyBhY3RpdmUgY2xhc3MgdG8gbG9hZGluZyBtZXNzYWdlLCBkaXNhYmxlcyBjaGVja2JveCBhbmQgc2VsZWN0IGZpZWxkc1xuICovXG5jb25zdCBlbmFibGVMb2FkaW5nU3RhdGUgPSAoKSA9PiB7XG4gIGlmKGZpbHRlckxvYWRlcikge1xuICAgIGZpbHRlckxvYWRlci5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgfVxuXG4gIGxldCBzZWxlY3Rpb25GaWVsZHMgPSBmaWx0ZXJXcmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9Y2hlY2tib3hdLCBzZWxlY3QnKTtcbiAgc2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgZmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFjdGl2ZSBjbGFzcyB0byBsb2FkaW5nIG1lc3NhZ2UsIHJlZW5hYmxlcyBjaGVja2JveCBhbmQgc2VsZWN0IGZpZWxkc1xuICovXG5jb25zdCBkaXNhYmxlTG9hZGluZ1N0YXRlID0gKCkgPT4ge1xuICBpZihmaWx0ZXJMb2FkZXIpIHtcbiAgICBmaWx0ZXJMb2FkZXIuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XG4gIH1cblxuICBsZXQgc2VsZWN0aW9uRmllbGRzID0gZmlsdGVyV3JhcHBlci5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XSwgc2VsZWN0Jyk7XG4gIHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFkZHMgZXJyb3IgdG8gZmlsdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNZXNzYWdlIC0gRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gKi9cbmNvbnN0IGFkZEZpbHRlckVycm9yID0gKGVycm9yTWVzc2FnZSkgPT4ge1xuICBsZXQgc2VhcmNoRXJyb3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICBmaWx0ZXJMb2FkZXIuY2xhc3NMaXN0LmFkZCgnaXMtZXJyb3InKTtcbiAgc2VhcmNoRXJyb3IuaWQgPSAnc2VhcmNoLWVycm9yJztcbiAgc2VhcmNoRXJyb3IuY2xhc3NMaXN0LmFkZCgnZmlsdGVyLWVycm9yJyk7XG4gIHNlYXJjaEVycm9yLnRleHRDb250ZW50ID0gZXJyb3JNZXNzYWdlO1xuICBmaWx0ZXJSZXN1bHRzLmFwcGVuZChzZWFyY2hFcnJvcik7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBsaXN0IGZpbHRlcmluZ1xuICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdHNMaXN0IC0gQVBJIGRhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyAtIEZpbHRlciBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IGxpc3RCdWlsZGVyRnVuY3Rpb24gLSBGdW5jdGlvbiB0byBidWlsZCByZXN1bHRzOyBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIG9iamVjdCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7R29vZ2xlIE1hcH0gbWFwIC0gR29vZ2xlIG1hcFxuICovXG5jb25zdCBmaWx0ZXJMaXN0SW5pdCA9IChyZXN1bHRzTGlzdCwgc2V0dGluZ3MsIGxpc3RCdWlsZGVyRnVuY3Rpb24sIG1hcCkgPT4ge1xuXG4gIC8vXG4gIC8vIFNFVFRJTkdTXG4gIC8vXG5cbiAgbGV0IGRlZmF1bHRzID0ge1xuICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgcGVyUGFnZTogLTEsXG4gICAgemlwU2VhcmNoOiB0cnVlLFxuICAgIG1hcDogdHJ1ZSxcbiAgICBtYXBNYXJrZXI6IG51bGwsXG4gICAgbWFwQ2x1c3RlcmluZzogZmFsc2UsXG4gICAgZGVmYXVsdFNvcnRpbmc6ICdhbHBoYUFzYycsIC8vIGFscGhhQXNjLCBhbHBoYURlc2MsIHJhbmRvbSwgY3VzdG9tX29yZGVyXG4gIH07XG5cbiAgbGV0IG9wdGlvbnMgPSB7fSxcbiAgICAgIGdlb2NvZGVkWmlwQ29sbGVjdGlvbiA9IG51bGwsXG4gICAgICBnb29nbGVNYXAgPSBudWxsO1xuXG4gIC8vIGV4dGVuZCBjdXN0b20gc2V0dGluZ3NcbiAgZm9yICggY29uc3QgcHJvcGVydHkgaW4gZGVmYXVsdHMgKSB7XG4gICAgaWYoIHNldHRpbmdzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSApIHtcbiAgICAgIG9wdGlvbnNbcHJvcGVydHldID0gc2V0dGluZ3NbcHJvcGVydHldO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zW3Byb3BlcnR5XSA9IGRlZmF1bHRzW3Byb3BlcnR5XTtcbiAgICB9XG4gI
4H1cblxuICBpZiggb3B0aW9ucy56aXBTZWFyY2ggfHwgb3B0aW9ucy5tYXAgKSB7XG4gICAgZ2VvY29kZWRaaXBDb2xsZWN0aW9uID0gW107IC8vIGFycmF5IHRvIGhvbGQgcHJldmlvdXNseSBnZW9jb2RlZCB6aXBzIHBlciBzZXNzaW9uXG4gIH1cblxuICBpZiggb3B0aW9ucy5tYXAgKSB7XG4gICAgZ29vZ2xlTWFwID0gbWFwID8gbWFwIDogbnVsbDtcbiAgICBtYXBJbml0KGdvb2dsZU1hcCk7XG4gIH1cblxuICAvL1xuICAvLyBGSUxURVJcbiAgLy9cblxuICAvLyBvbmx5IHNldCB1cCBmaWx0ZXIgaWYgVUkgZWxlbWVudHMgZXhpc3RcbiAgaWYoICFmaWx0ZXJXcmFwcGVyIHx8ICFmaWx0ZXJMb2FkZXIgfHwgIWZpbHRlclJlc3VsdHMgKSB7XG4gICAgY29uc29sZS5sb2coJ01pc3NpbmcgZmlsdGVyIFVJIGVsZW1lbnRzLiBGaWx0ZXIgZGlkIG5vdCBpbml0aWFsaXplLicpXG4gIH0gZWxzZSB7XG4gIFxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbGlzdCAmIGluc2VydHMgaW50byBwYWdlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGxpc3QgLSBBcnJheSBvZiBsaXN0IGl0ZW1zXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBsaXN0SXNGaWx0ZXJlZCAtIFRydWUgaWYgbGlzdCBoYXMgZmlsdGVycyBhcHBsaWVkXG4gICAgICovXG4gICAgbGV0IGRyYXdMaXN0ID0gKGxpc3QsIGxpc3RJc0ZpbHRlcmVkKSA9PiB7XG4gICAgICBsZXQgcGFnZVVybFBhcmFtcyA9IGdldFVybFBhcmFtcygpO1xuICAgICAgbGV0IHBhZ2VOdW0gPSBwYWdlVXJsUGFyYW1zLnBhZ2VudW07XG4gICAgICBcbiAgICAgIC8vIFNvcnQgdGhlIGxpc3RcbiAgICAgIGxldCBhbHBoYVNvcnRWYWx1ZSA9IGZpbHRlclJlc3VsdHMuZGF0YXNldC5maWx0ZXJEZWZhdWx0U29ydDtcbiAgICAgIGxpc3QgPSBzb3J0TGlzdChsaXN0LCBvcHRpb25zLmRlZmF1bHRTb3J0aW5nLCBhbHBoYVNvcnRWYWx1ZSk7XG5cbiAgICAgIC8vIEVuYWJsZSBsb2FkaW5nIHN0YXRlXG4gICAgICBlbmFibGVMb2FkaW5nU3RhdGUoKTtcblxuICAgICAgLy8gQnVpbGQgZGlyZWN0b3J5IHJlc3VsdHMgbGlzdFxuICAgICAgaWYoIG9wdGlvbnMucGFnaW5hdGlvbiApIHtcbiAgICAgICAgYnVpbGRSZXN1bHRzTGlzdChsaXN0LCBmaWx0ZXJSZXN1bHRzLCBsaXN0QnVpbGRlckZ1bmN0aW9uLCBwYWdlTnVtLCBvcHRpb25zLnBlclBhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRSZXN1bHRzTGlzdChsaXN0LCBmaWx0ZXJSZXN1bHRzLCBsaXN0QnVpbGRlckZ1bmN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHJlc3VsdHMgY291bnRcbiAgICAgIGxldCB1cmxQYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYWdlVXJsUGFyYW1zKS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBcInppcFwiICYmIGl0ZW0gIT09IFwic29ydGJ5XCIgJiYgaXRlbSAhPT0gXCJwYWdlbnVtXCIpO1xuICAgICAgXG4gICAgICBpZiggdXJsUGFyYW1LZXlzLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgIGZpbHRlclJlc3VsdHNDb3VudC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgZmlsdGVyUmVzdWx0c0NvdW50LmlubmVySFRNTCA9IGxpc3QubGVuZ3RoICsgJyByZXN1bHQocykgZm91bmQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyUmVzdWx0c0NvdW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIGZpbHRlclJlc3VsdHNDb3VudC5pbm5lckhUTUwgPSAnJztcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyAvIGhpZGUgY2xlYXIgYnV0dG9uXG4gICAgICBpZiggZmlsdGVyQ2xlYXJCdXR0b25zLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgIGZpbHRlckNsZWFyQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgaWYoIHVybFBhcmFtS2V5cy5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgYnV0dG9uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidXR0b24uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgbWFwXG4gICAgICBpZiggb3B0aW9ucy5tYXAgKSB7XG4gICAgICAgIGJ1aWxkTWFwKGdvb2dsZU1hcCwgbGlzdCwgb3B0aW9ucy5tYXBNYXJrZXIsIG9wdGlvbnMubWFwQ2x1c3RlcmluZywgbGlzdElzRmlsdGVyZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBwYWdpbmF0aW9uXG4gICAgICBpZiggb3B0aW9ucy5wYWdpbmF0aW9uICkge1xuICAgICAgICBidWlsZFBhZ2luYXRpb24obGlzdCwgZmlsdGVyUGFnaW5hdGlvbiwgcGFnZU51bSwgb3B0aW9ucy5wZXJQYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGlzYWJsZSBsb2FkaW5nIHN0YXRlXG4gICAgICBkaXNhYmxlTG9hZGluZ1N0YXRlKCk7XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIFJ1bnMgZmlsdGVyIGFuZCBnZW5lcmF0ZXMgbGlzdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXN1bHRzIC0gQXJyYXkgb2YgbGlzdCBpdGVtc1xuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlsdGVyZWRCeVppcCAtIChvcHRpb25hbCkgRGVub3RlcyBpZiByZXN1bHRzIGFyZSBwcmUtZmlsdGVyZWQgYnkgemlwXG4gICAgICovXG4gICAgbGV0IHJ1bkZpbHRlciA9IChyZXN1bHRzLCBmaWx0ZXJlZEJ5WmlwKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gZ2V0RmlsdGVyVmFsdWVzKGZpbHRlckZpZWxkcyk7IC8vIGdldCBjdXJyZW50IGZpbHRlciB2YWx1ZXNcbiAgICAgIGxldCBmaWx0ZXJlZFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgbGV0IGxpc3RJc0ZpbHRlcmVkID0gZmlsdGVyZWRCeVppcCA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgLy8gbG9vcCB0aHJvdWdoIGZpbHRlciB2YWx1ZXNcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLmZvckVhY2goKFtwcm9wZXJ0eSwgZmlsdGVyXSkgPT4ge1xuICAgICAgICBjb25zdCB7IHR5cGUsIHZhbHVlLCB0YXhvbm9teSB9ID0gZmlsdGVyO1xuXG4gICAgICAgIGlmICggdHlwZSA9PT0gXCJ0ZXh0XCIgJiYgdmFsdWUgKSB7XG4gICAgICAgICAgLy8gZmlsdGVyIGJ5IHNlYXJjaCB0ZXJtIGZvciB0ZXh0IGZpZWxkc1xuICAgICAgICAgIGZpbHRlcmVkUmVzdWx0cyA9IGZpbHRlckJ5S2V5d29yZChmaWx0ZXJlZFJlc3VsdHMsIHZhbHVlLCB0YXhvbm9teSk7XG4gICAgICAgICAgbGlzdElzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCBbXCJjaGVja2JveFwiLCBcInJhZGlvXCIsIFwic2VsZWN0XCJdLmluY2x1ZGVzKHR5cGUpICYmIHZhbHVlICYmIHRheG9ub215ICkge1xuICAgICAgICAgIC8vIGZpbHRlciBieSBjYXRlZ29yaWVzIGZvciBjaG9pY2UgZmllbGRzXG4gICAgICAgICAgZmlsdGVyZWRSZXN1bHRzID0gZmlsdGVyQnlDYXRlZ29yeShmaWx0ZXJlZFJlc3VsdHMsIHZhbHVlLCB0YXhvbm9teSk7XG4gICAgICAgICAgbGlzdElzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gdXBkYXRlIHNlbGVjdGVkIHZhbHVlcyBmb3IgY2hlY2tib3ggZmllbGRzXG4gICAgICBzaG93U2VsZWN0ZWRPcHRpb25zKGZpbHRlcnMpO1xuXG4gICAgICAvLyB1cGRhdGUgVVJMIHBhcmFtcyB3aXRoIG5ldyBmaWx0ZXIgdmFsdWVzXG4gICAgICBjcmVhdGVVUkxGaWx0ZXJQYXJhbXMoZmlsdGVycyk7XG5cbiAgICAgIC8vIHBhc3MgZmlsdGVyZWQgbGlzdCB0byBiZSBmb3JtYXR0ZWQgZm9yIGRpc3BsYXlcbiAgICAgIGRyYXdMaXN0KGZpbHRlcmVkUmVzdWx0cywgbGlzdElzRmlsdGVyZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtpY2tzIG9mZiBmaWx0ZXIgcHJvY2VzcztcbiAgICAgKiBjaGVja3MgZm9yIHppcCBjb2RlIGluIFVSTCBwYXJhbXMgZmlyc3RcbiAgICAgKiB0byBkZXRlcm1pbmUgd2h
4pY2ggZmlsdGVyIHRvIHJ1blxuICAgICAqL1xuICAgIGxldCBzdGFydEZpbHRlciA9ICgpID0+IHtcbiAgICAgIGxldCB6aXBDb2RlUGFyYW0gPSBnZXRaaXBDb2RlRnJvbVVSTCgpOyAvLyBnZXQgemlwIGNvZGUgZnJvbSBVUkwgcGFyYW1zXG5cbiAgICAgIC8vIGlmIHppcCBzZWFyY2ggaXMgdHVybmVkIG9mZiBvciB0aGVyZSBpcyBubyB6aXAgY29kZSBwcm92aWRlZCwgcHJvY2VlZCB0byBydW4gZmlsdGVyXG4gICAgICBpZiggIW9wdGlvbnMuemlwU2VhcmNoIHx8ICF6aXBDb2RlUGFyYW0gKSB7XG4gICAgICAgIHJ1bkZpbHRlcihyZXN1bHRzTGlzdCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlcmUgaXMgYSB6aXAgY29kZSwgdmFsaWRhdGUgaXRcbiAgICAgIGxldCBpc1ZhbGlkWmlwID0gdmFsaWRhdGVaaXAoemlwQ29kZVBhcmFtKTtcblxuICAgICAgLy8gaWYgemlwIGlzIGludmFsaWQsIGFkZCBlcnJvciBtZXNzYWdlIGFuZCBwcm9jZWVkIHRvIHJ1biBmaWx0ZXJcbiAgICAgIGlmKCAhaXNWYWxpZFppcCApIHtcbiAgICAgICAgYWRkWmlwRXJyb3IoJ2ludmFsaWQnKTtcbiAgICAgICAgcnVuRmlsdGVyKHJlc3VsdHNMaXN0KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB6aXAgaXMgdmFsaWQsIHN0YXJ0IGZpbHRlciBwcm9jZXNzXG4gICAgICBlbmFibGVMb2FkaW5nU3RhdGUoKTtcblxuICAgICAgLy8gY2hlY2sgaWYgemlwIGhhcyBhbHJlYWR5IGJlZW4gZ2VvY29kZWRcbiAgICAgIGNvbnN0IGV4aXN0aW5nWmlwID0gZ2VvY29kZWRaaXBDb2xsZWN0aW9uLmZpbmQoaXRlbSA9PiBpdGVtLnppcENvZGUgPT09IHppcENvZGVQYXJhbSk7XG5cbiAgICAgIGlmKCBleGlzdGluZ1ppcCkge1xuICAgICAgICAvLyBpZiB6aXAgaXMgc2F2ZWQsIHJ1biB0aGUgZmlsdGVyIHdpdGggZXhpc3RpbmcgY29vcmRzXG4gICAgICAgIGNvbnN0IHppcEZpbHRlcmVkUmVzdWx0cyA9IGZpbHRlckJ5WmlwKHJlc3VsdHNMaXN0LCBleGlzdGluZ1ppcC5sYXRsbmcpO1xuICAgICAgICBydW5GaWx0ZXIoemlwRmlsdGVyZWRSZXN1bHRzLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIHppcCBpc24ndCBzYXZlZCwgZ2VvY29kZSBpdCB0aGVuIHJ1biB0aGUgZmlsdGVyXG4gICAgICAgIGdlb2NvZGVaaXAoemlwQ29kZVBhcmFtKVxuICAgICAgICAgIC50aGVuKChnZW9jb2RlZFppcCkgPT4geyAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHNhdmUgemlwIGZvciBhZGRpdGlvbmFsIHNlYXJjaGVzXG4gICAgICAgICAgICBnZW9jb2RlZFppcENvbGxlY3Rpb24ucHVzaCh7XG4gICAgICAgICAgICAgIHppcENvZGU6IHppcENvZGVQYXJhbSxcbiAgICAgICAgICAgICAgbGF0bG5nOiBnZW9jb2RlZFppcFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHppcEZpbHRlcmVkUmVzdWx0cyA9IGZpbHRlckJ5WmlwKHJlc3VsdHNMaXN0LCBnZW9jb2RlZFppcCk7XG4gICAgICAgICAgICBydW5GaWx0ZXIoemlwRmlsdGVyZWRSZXN1bHRzLCB0cnVlKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHppcCBnaXZlcyBlcnJvciwgYWRkIGVycm9yIG1lc3NhZ2UgYW5kIHJ1biByZWd1bGFyIGZpbHRlclxuICAgICAgICAgICAgZGlzYWJsZUxvYWRpbmdTdGF0ZSgpO1xuICAgICAgICAgICAgYWRkWmlwRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcnVuRmlsdGVyKHJlc3VsdHNMaXN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGQgaW5pdGlhbGl6YXRpb24gY2xhc3MgdG8gbG9hZGVyXG4gICAgICovXG4gICAgZmlsdGVyTG9hZGVyLmNsYXNzTGlzdC5hZGQoJ2lzLWluaXQnKTtcblxuICAgIC8qKlxuICAgICAqIHByZXZlbnQgcGFnZSByZWZyZXNoIG9uIGZvcm0gc3VibWl0XG4gICAgICovXG4gICAgZmlsdGVyV3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAqIHJlbG9hZCBwYWdlIG9uIHBvcHN0YXRlIHRvIG1ha2UgYmFjayBidXR0b24gZnVuY3Rpb24gcHJvcGVybHlcbiAgICAqIChleGNsdWRpbmcgYW5jaG9yIGxpbmtzKVxuICAgICovXG4gICAgbGV0IGxhc3RVUkwgPSBsb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMF07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gbG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzBdO1xuXG4gICAgICBpZiAoY3VycmVudFVSTCAhPT0gbGFzdFVSTCkge1xuICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH1cblxuICAgICAgbGFzdFVSTCA9IGN1cnJlbnRVUkw7XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgKiBzZXQgcHJlZGVmaW5lZCBmaWVsZCB2YWx1ZXMgaWYgVVJMIHBhcmFtZXRlcnMgZXhpc3RcbiAgICAqL1xuICAgIGxldCBwYWdlVXJsUGFyYW1zID0gZ2V0VXJsUGFyYW1zKCk7XG5cbiAgICBpZiggT2JqZWN0LmtleXMocGFnZVVybFBhcmFtcykubGVuZ3RoID4gMCApIHtcbiAgICAgIHNldEZpbHRlclZhbHVlcyhwYWdlVXJsUGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIGxpc3RlbmVycyBmb3IgZmllbGQgY2hhbmdlc1xuICAgICovXG4gICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICB1cGRhdGVTaW5nbGVVUkxQYXJhbSgncGFnZW51bScsICcnKTtcbiAgICAgIHN0YXJ0RmlsdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIGZpZWxkc1xuICAgIGZpbHRlckZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IGZpbHRlclR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1maWx0ZXItdHlwZScpO1xuXG4gICAgICBjb25zdCBoYW5kbGVaaXBDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGxldCB6aXBWYWx1ZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZTtcbiAgICAgICAgbGV0IGlzVmFsaWRaaXAgPSB2YWxpZGF0ZVppcCh6aXBWYWx1ZSk7XG4gICAgICAgIFxuICAgICAgICBpZiggIXppcFZhbHVlICkge1xuICAgICAgICAgIGNsZWFyWmlwRXJyb3IoKTtcbiAgICAgICAgICB1cGRhdGVTaW5nbGVVUkxQYXJhbSgnemlwJywgJycpO1xuICAgICAgICAgI
4HJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCBpc1ZhbGlkWmlwICkge1xuICAgICAgICAgIGNsZWFyWmlwRXJyb3IoKTtcbiAgICAgICAgICB1cGRhdGVTaW5nbGVVUkxQYXJhbSgnemlwJywgemlwVmFsdWUpO1xuICAgICAgICAgIHVwZGF0ZVNpbmdsZVVSTFBhcmFtKCdwYWdlbnVtJywgJycpO1xuICAgICAgICAgIHN0YXJ0RmlsdGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkWmlwRXJyb3IoJ2ludmFsaWQnKTtcbiAgICAgICAgICB1cGRhdGVTaW5nbGVVUkxQYXJhbSgnemlwJywgJycpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiggZmlsdGVyVHlwZSA9PSAnemlwJyApIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGRlYm91bmNlKGhhbmRsZVppcENoYW5nZSwgNTAwKSk7XG4gICAgICB9IGVsc2UgaWYoIGZpbHRlclR5cGUgPT0gJ3RleHQnICkge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZGVib3VuY2UoaGFuZGxlRmllbGRDaGFuZ2UsIDI1MCkpO1xuICAgICAgfSBlbHNlIGlmKCBmaWx0ZXJUeXBlID09ICdjaGVja2JveCcgfHwgZmlsdGVyVHlwZSA9PSAncmFkaW8nIHx8IGZpbHRlclR5cGUgPT0gJ3NlbGVjdCcgKSB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlRmllbGRDaGFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gc29ydCBmaWVsZFxuICAgIGlmKCBmaWx0ZXJTb3J0RmllbGQgKSB7XG4gICAgICBsZXQgZmlsdGVyU29ydCA9IGZpbHRlclNvcnRGaWVsZC5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKTtcblxuICAgICAgZmlsdGVyU29ydC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudCA9PiB7ICAgICAgICBcbiAgICAgICAgbGV0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIGxldCBzb3J0VmFsdWUgPSBmaWx0ZXJTb3J0LnZhbHVlO1xuICAgICAgXG4gICAgICAgIGlmKCBzb3J0VmFsdWUgKSB7XG4gICAgICAgICAgdXBkYXRlU2luZ2xlVVJMUGFyYW0oJ3NvcnRieScsIHNvcnRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlU2luZ2xlVVJMUGFyYW0oJ3NvcnRieScsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIHBhZ2luYXRpb24gY2hhbmdlIGxpc3RlbmVyc1xuICAgICovXG4gICAgaWYoIG9wdGlvbnMucGFnaW5hdGlvbiAmJiBmaWx0ZXJQYWdpbmF0aW9uICkge1xuICAgICAgZmlsdGVyUGFnaW5hdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiggZXZlbnQudGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1wYWdlLW51bScpICkge1xuICAgICAgICAgIGxldCBwYWdlUGFyYW0gPSBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtbnVtJyk7XG4gICAgICAgICAgdXBkYXRlU2luZ2xlVVJMUGFyYW0oJ3BhZ2VudW0nLCBwYWdlUGFyYW0pO1xuICAgICAgICAgIHN0YXJ0RmlsdGVyKCk7XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cy5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6IFwic21vb3RoXCJ9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBzZXQgdXAgb3B0aW9uIGRyb3Bkb3duIHNlY3Rpb25zXG4gICAgKi9cbiAgICBsZXQgb3B0aW9uRHJvcGRvd25TZWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1maWx0ZXItZHJvcGRvd25dXCIpO1xuXG4gICAgaWYoIG9wdGlvbkRyb3Bkb3duU2VjdGlvbnMubGVuZ3RoID4gMCApIHtcbiAgICAgIG9wdGlvbkRyb3Bkb3duU2VjdGlvbnMuZm9yRWFjaCh0b2dnbGVTZWN0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uRHJvcGRvd25Ub2dnbGUodG9nZ2xlU2VjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIHNldCB1cCBvcHRpb24gbGlzdCBmaWx0ZXJzXG4gICAgKi9cbiAgICBsZXQgb3B0aW9uTGlzdEZpbHRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcHRpb25zLWZpbHRlcl1cIik7XG4gIFxuICAgIGlmKCBvcHRpb25MaXN0RmlsdGVyLmxlbmd0aCA+IDAgKSB7XG4gICAgICBvcHRpb25MaXN0RmlsdGVyLmZvckVhY2gob3B0aW9uTGlzdCA9PiB7XG4gICAgICAgIGxldCBvcHRpb25zVG9GaWx0ZXIgPSBvcHRpb25MaXN0LmdldEF0dHJpYnV0ZSgnZGF0YS1vcHRpb25zLWZpbHRlcicpO1xuXG4gICAgICAgIGlmKCBvcHRpb25zVG9GaWx0ZXIgKSB7XG4gICAgICAgICAgZmlsdGVyT3B0aW9uRmllbGQob3B0aW9uTGlzdCwgb3B0aW9uc1RvRmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBmaW5kIG15IGxvY2F0aW9uIGJ1dHRvblxuICAgICovXG4gICAgaWYoIGZpbHRlckZpbmRMb2NhdGlvbiApIHtcbiAgICAgIGZpbHRlckZpbmRMb2NhdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCB6aXBGaWVsZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZpbHRlci10eXBlPVwiemlwXCJdJyk7XG4gICAgICAgIGNvbnN0IGZpbmRMb2NhdGlvbk1lc3NhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1maWx0ZXItZmluZC1tZXNzYWdlXScpO1xuXG4gICAgICAgIGlmKCAhemlwRmllbGQgfHwgIWZpbmRMb2NhdGlvbk1lc3NhZ2UgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgemlwRmllbGRJbnB1dCA9IHppcEZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7ICAgIFxuXG4gICAgICAgIGNvbnN0IGFkZExvY2F0aW9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICBmaW5kTG9jYXRpb25NZXNzYWdlLmlubmVySFRNTCA9IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0VXNlckxvY2F0aW9uID0gKHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29vcmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUpO1xuXG4gICAgICAgICAgZ2V0WmlwRnJvbUNvb3Jkcyhjb29yZHMpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICBsZXQgemlwQ29kZSA9ICcnO1xuXG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzdWx0cy5hZGRyZXNzX2NvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cy5hZGRyZXNzX2NvbXBvbmVudHNbal0udHlwZXNbMF0gPT0gJ3Bvc3RhbF9jb2RlJykge1xuICAgICAgICAgICAgICAgICAgemlwQ29kZSA9IHJlc3VsdHMuYWRkcmVzc19jb21wb25lbnRzW2pdLnNob3J0X25hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYoIHppcENvZGUgKSB7XG4gICAgICAgICAgICAgICAgZmluZExvY2F0aW9uTWVzc2FnZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICB6aXBGaWVsZElucHV0LnZhbHVlID0gemlwQ29kZTtcbiAgICAgICAgICAgICAgICB1cGRhdGVTaW5nbGVVUkxQYXJhbSgnemlwJywgemlwQ29kZSk7XG4gICAgICAgICAgICAgICAgc3RhcnRGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRMb2NhdGlvbkVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZmluZGluZyB5b3VyIHppcCBjb2RlLicpO1xuICAgICAgICAgICAgICAgI
4HJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgYWRkTG9jYXRpb25FcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFuYWdlR2VvbG9jYXRpb25FcnJvciA9IChlcnJvcikgPT57XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICBhZGRMb2NhdGlvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXCJnZW9sb2NhdGlvblwiIGluIG5hdmlnYXRvcikge1xuICAgICAgICAgIGZpbmRMb2NhdGlvbk1lc3NhZ2UuaW5uZXJIVE1MID0gXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImxvYWRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvYWRlcl9fc3Bpbm5lclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2FkZXJfX3RleHRcIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHNldFVzZXJMb2NhdGlvbiwgbWFuYWdlR2VvbG9jYXRpb25FcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmluZExvY2F0aW9uTWVzc2FnZS5pbm5lckhUTUwgPSBcIlRoaXMgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgYnJvd3Nlci5cIjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgICAgXG4gICAgLyoqXG4gICAgKiBtYW5hZ2UgZmlsdGVyIGNsZWFyIGJ1dHRvblxuICAgICovXG4gICAgaWYoIGZpbHRlckNsZWFyQnV0dG9ucy5sZW5ndGggPiAwICkge1xuICAgICAgZmlsdGVyQ2xlYXJCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgYCR7bG9jYXRpb24ucGF0aG5hbWV9YCk7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogbWFuYWdlIHByaW50IGJ1dHRvblxuICAgICovXG4gICAgaWYoIGZpbHRlclByaW50QnV0dG9ucy5sZW5ndGggPiAwICkge1xuICAgICAgZmlsdGVyUHJpbnRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB3aW5kb3cucHJpbnQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIG1hbmFnZSBzaGFyZSBidXR0b25cbiAgICAqL1xuICAgIGlmKCBmaWx0ZXJTaGFyZUJ1dHRvbnMubGVuZ3RoID4gMCApIHtcbiAgICAgIGZpbHRlclNoYXJlQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBsZXQgcGFnZUxpbmsgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcblxuICAgICAgICAgIE1pY3JvTW9kYWwuc2hvdygnc2hhcmUtbW9kYWwnLCB7XG4gICAgICAgICAgICBvblNob3c6IG1vZGFsID0+IHtcbiAgICAgICAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcignI3NoYXJlLWxpbmsnKS5pbm5lckhUTUwgPSBwYWdlTGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgbGV0IHNoYXJlQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtc2hhcmUtY29weV0nKTtcbiAgICAgIGxldCBzaGFyZVN1Y2Nlc3NNZXNzYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NoYXJlLXN1Y2Nlc3MnKTtcblxuICAgICAgY29uc3QgdXBkYXRlU2hhcmVNZXNzYWdlID0gKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgc2hhcmVTdWNjZXNzTWVzc2FnZS50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgICAgIHNoYXJlU3VjY2Vzc01lc3NhZ2UuY2xhc3NMaXN0LnJlbW92ZSgnc3Itb25seScpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNoYXJlU3VjY2Vzc01lc3NhZ2UudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICBzaGFyZVN1Y2Nlc3NNZXNzYWdlLmNsYXNzTGlzdC5hZGQoJ3NyLW9ubHknKTtcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICB9XG5cbiAgICAgIHNoYXJlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IHBhZ2VMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NoYXJlLWxpbmsnKS50ZXh0Q29udGVudDtcblxuICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwYWdlTGluaykudGhlbihcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1cGRhdGVTaGFyZU1lc3NhZ2UoXCJMaW5rIGNvcGllZCFcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICB1cGRhdGVTaGFyZU1lc3NhZ2UoXCJMaW5rIGNvdWxkIG5vdCBiZSBjb3BpZWQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAqIGZpbHRlciBzZWN0aW9uIHRvZ2dsZSBsaXN0ZW5lclxuICAgICovXG4gICAgbGV0IGZpbHRlclRvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZpbHRlci10b2dnbGVdJyk7XG5cbiAgICBpZiggZmlsdGVyVG9nZ2xlICkge1xuICAgICAgZmlsdGVyVG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbn
4REZWZhdWx0KCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBidXR0b25TdGF0ZSA9IGZpbHRlclRvZ2dsZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PSAndHJ1ZSc7XG4gICAgICAgIGNvbnN0IHRhcmdldElEID0gZmlsdGVyVG9nZ2xlLmdldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpO1xuICAgICAgICBjb25zdCBidXR0b25UYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJRCk7XG5cbiAgICAgICAgZmlsdGVyVG9nZ2xlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICFidXR0b25TdGF0ZSk7XG5cbiAgICAgICAgaWYoICFidXR0b25TdGF0ZSApIHtcbiAgICAgICAgICBidXR0b25UYXJnZXQuY2xhc3NMaXN0LmFkZCgnaXMtb3BlbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1dHRvblRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vcGVuJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogc3RhcnQgZmlsdGVyIG9uIGluaXRcbiAgICAqL1xuICAgIHN0YXJ0RmlsdGVyKCk7XG4gIH1cblxufVxuXG5leHBvcnQgeyBlbmFibGVMb2FkaW5nU3RhdGUsIGRpc2FibGVMb2FkaW5nU3RhdGUsIGFkZEZpbHRlckVycm9yLCBmaWx0ZXJMaXN0SW5pdCB9OyIsIi8qKlxuICAgKiBCdWlsZCBwYWdpbmF0aW9uXG4gICAqIEBwYXJhbSBkYXRhIC0gUmVzdWx0cyB0byBkaXNwbGF5XG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uRWxlbSAtIEVsZW1lbnQgd2hlcmUgcmVzdWx0cyB3aWxsIGJlIGluc2VydGVkXG4gICAqIEBwYXJhbSBwYWdlTnVtIC0gQ3VycmVudCBwYWdpbmF0ZWQgcGFnZSBudW1iZXJcbiAgICogQHBhcmFtIHBlclBhZ2UgLSBOdW1iZXIgb2YgcmVzdWx0cyB0byBkaXNwbGF5IHBlciBwYWdlXG4gICAqIEBwYXJhbSB0b3RhbFBhZ2VzIC0gVG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gICAqIEBwYXJhbSB0b3RhbFJlc3VsdHMgLSBUb3RhbCBudW1iZXIgb2YgcmVzdWx0c1xuICAgKi9cbmNvbnN0IGJ1aWxkUGFnaW5hdGlvbiA9IChkYXRhLCBwYWdpbmF0aW9uRWxlbSwgcGFnZU51bSwgcGVyUGFnZSwgdG90YWxQYWdlcywgdG90YWxSZXN1bHRzKSA9PiB7XG4gIHRvdGFsUGFnZXMgPSB0b3RhbFBhZ2VzID8gdG90YWxQYWdlcyA6IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIHBlclBhZ2UpO1xuICB0b3RhbFJlc3VsdHMgPSB0b3RhbFJlc3VsdHMgPyB0b3RhbFJlc3VsdHMgOiBkYXRhLmxlbmd0aDtcbiAgbGV0IGFjdGl2ZVBhZ2VOdW1iZXIgPSBOdW1iZXIocGFnZU51bSk7XG4gIGxldCBwYWdlcyA9ICcnO1xuXG4gIC8vIHN0b3AgaWYgcGFnaW5hdGlvbiBlbGVtZW50IGRvZXNuJ3QgZXhpc3RcbiAgaWYoICFwYWdpbmF0aW9uRWxlbSApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiggZGF0YS5sZW5ndGggPD0gMCB8fCB0b3RhbFJlc3VsdHMgPD0gcGVyUGFnZSB8fCBwZXJQYWdlIDw9IDAgKSB7XG4gICAgcGFnaW5hdGlvbkVsZW0uaW5uZXJIVE1MID0gJyc7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBpZiggYWN0aXZlUGFnZU51bWJlciA+IHRvdGFsUGFnZXMgfHwgYWN0aXZlUGFnZU51bWJlciA8IDEgfHwgIWFjdGl2ZVBhZ2VOdW1iZXIgKSB7XG4gICAgYWN0aXZlUGFnZU51bWJlciA9IDE7XG4gIH1cblxuICBjb25zdCBnZW5lcmF0ZVBhZ2VCdXR0b24gPSAocGFnZU51bWJlciwgaXNBY3RpdmUpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uQ2xhc3MgPSBpc0FjdGl2ZSA/ICdwYWdlLW51bWJlcnMgY3VycmVudCcgOiAncGFnZS1udW1iZXJzJztcbiAgICByZXR1cm4gYFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cIiR7cGFnaW5hdGlvbkNsYXNzfVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBkYXRhLXBhZ2UtbnVtPVwiJHtwYWdlTnVtYmVyfVwiXG4gICAgICAgICR7YWN0aXZlUGFnZU51bWJlciA9PSBwYWdlTnVtYmVyID8gJ2Rpc2FibGVkJyA6ICcnfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBwYWdlIDwvc3Bhbj4ke3BhZ2VOdW1iZXJ9XG4gICAgICA8L2J1dHRvbj5gO1xuICB9O1xuXG4gIGNvbnN0IGdlbmVyYXRlUGFnaW5hdGlvbiA9IChjdXJyZW50LCBsYXN0LCBkZWx0YSA9IDEpID0+IHtcbiAgICBpZiAobGFzdCA9PT0gMSkgcmV0dXJuIFsxXTtcbiAgXG4gICAgY29uc3QgbGVmdCA9IGN1cnJlbnQgLSBkZWx0YSxcbiAgICAgIHJpZ2h0ID0gY3VycmVudCArIGRlbHRhICsgMTtcbiAgICBcbiAgICBsZXQgcGFnaW5hdGlvbiA9ICcnO1xuICBcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsYXN0OyBpKyspIHtcbiAgICAgIGlmIChpID09IDEgfHwgaSA9PSBsYXN0IHx8IChpID49IGxlZnQgJiYgaSA8IHJpZ2h0KSkge1xuICAgICAgICBpZiAoaSA9PT0gbGVmdCAmJiBpID4gMikge1xuICAgICAgICAgIHBhZ2luYXRpb24gKz0gXCIuLi5cIjtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKGkgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBwYWdpbmF0aW9uICs9IGdlbmVyYXRlUGFnZUJ1dHRvbihpLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdpbmF0aW9uICs9IGdlbmVyYXRlUGFnZUJ1dHRvbihpLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpID09PSByaWdodCAtIDEgJiYgaSA8IGxhc3QgLSAxKSB7XG4gICAgICAgICAgcGFnaW5hdGlvbiArPSBcIi4uLlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBcbiAgICByZXR1cm4gcGFnaW5hdGlvbjtcbiAgfVxuXG4gIHBhZ2VzICs9IGBcbiAgICA8aDIgY2xhc3M9XCJzci1vbmx5XCI+UG9zdCBwYWdpbmF0aW9uPC9oMj5cblxuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmF2LWxpbmtzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInBhZ2UtbnVtYmVycyBwcmV2XCJcbiAgICAgICAgICBpZD1cInByZXZcIlxuICAgICAgICAgIHRpdGxlPVwiUHJldmlvdXMgcGFnZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIHBhZ2VcIlxuICAgICAgICAgIGRhdGEtcGFn
4ZS1udW09XCIke2FjdGl2ZVBhZ2VOdW1iZXIgLSAxfVwiXG4gICAgICAgICAgJHthY3RpdmVQYWdlTnVtYmVyID09IDEgPyAnZGlzYWJsZWQnIDogJyd9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5QcmV2aW91cyBwYWdlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgYDtcbiAgXG4gIHBhZ2VzICs9IGdlbmVyYXRlUGFnaW5hdGlvbihhY3RpdmVQYWdlTnVtYmVyLCB0b3RhbFBhZ2VzKTtcbiAgICBcbiAgcGFnZXMgKz0gYFxuICAgICAgXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInBhZ2UtbnVtYmVycyBuZXh0XCJcbiAgICAgICAgICBpZD1cIm5leHRcIlxuICAgICAgICAgIHRpdGxlPVwiTmV4dCBwYWdlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBwYWdlXCJcbiAgICAgICAgICBkYXRhLXBhZ2UtbnVtPVwiJHthY3RpdmVQYWdlTnVtYmVyICsgMX1cIlxuICAgICAgICAgICR7YWN0aXZlUGFnZU51bWJlciA9PSB0b3RhbFBhZ2VzID8gJ2Rpc2FibGVkJyA6ICcnfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TmV4dCBwYWdlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuXG4gIHBhZ2luYXRpb25FbGVtLmlubmVySFRNTCA9IHBhZ2VzO1xufVxuXG5leHBvcnQgeyBidWlsZFBhZ2luYXRpb24gfTsiLCIvKipcbiAqIEZpbHRlciBieSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdFtdfSBkYXRhIC0gT2JqZWN0IGFycmF5IHRvIGZpbHRlclxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFRlcm0gLSBUZXJtIHRvIGZpbHRlciBieVxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaEZpZWxkcyAtIEZpZWxkIHRvIHNlYXJjaCBpblxuICogQHJldHVybnMge09iamVjdFtdfSBGaWx0ZXJlZCBhcnJheVxuICovXG5jb25zdCBmaWx0ZXJCeUtleXdvcmQgPSAoZGF0YSwgc2VhcmNoVGVybSwgc2VhcmNoRmllbGRzKSA9PiB7XG4gIC8vIHN0b3AgaWYgbm8gc2VhcmNoIHRlcm0gb3Igc2VhcmNoIGZpZWxkIGlzIGRlZmluZWRcbiAgaWYoICFzZWFyY2hUZXJtIHx8ICFzZWFyY2hGaWVsZHMgKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvLyBjb252ZXJ0IHNlYXJjaCB0ZXJtIHRvIGxvd2VyY2FzZSBhbmQgc3BsaXQgaXQgaW50byBhbiBhcnJheSBvZiB0ZXJtc1xuICBjb25zdCBzZWFyY2hUZXJtcyA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xuXG4gIC8vIHNwbGl0IHNlYXJjaCBmaWVsZHMgaWYgbXVsdGlwbGUgdmFsdWVzXG4gIGNvbnN0IGZpZWxkc1RvU2VhcmNoID0gc2VhcmNoRmllbGRzLnNwbGl0KCcsJyk7XG5cbiAgLy8gZmlsdGVyIGRhdGEgYmFzZWQgb24gc2VhcmNoIGNyaXRlcmlhXG4gIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAvLyBjb21iaW5lIHRva2VucyBpZiBtdWx0aXBsZSBmaWVsZHMgYXJlIGJlaW5nIHNlYXJjaGVkXG4gICAgY29uc3QgdGV4dFRva2VucyA9IGZpZWxkc1RvU2VhcmNoXG4gICAgICAubWFwKGZpZWxkID0+IChpdGVtW2ZpZWxkXSB8fCAnJykudG9Mb3dlckNhc2UoKSkgLy8gY29udmVydCB0byBsb3dlcmNhc2UgYW5kIGhhbmRsZSB1bmRlZmluZWQgZmllbGRzXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pOyAvLyByZW1vdmUgZmFsc3kgdmFsdWVzXG5cbiAgICAvLyBkZXRlcm1pbmUgaWYgYW55IHRva2VuIG1hdGNoZXMgdGhlIHNlYXJjaCB0ZXJtc1xuICAgIHJldHVybiBzZWFyY2hUZXJtcy5zb21lKHRlcm0gPT4ge1xuICAgICAgaWYoIHRlcm0gKSB7XG4gICAgICAgIHJldHVybiB0ZXh0VG9rZW5zLnNvbWUodG9rZW4gPT4gdG9rZW4uaW5jbHVkZXModGVybSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbHRlciBieSBjYXRlZ29yeVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBPYmplY3QgYXJyYXkgdG8gZmlsdGVyXG4gKiBAcGFyYW0ge0FycmF5fSBzZWFyY2hUZXJtcyAtIFRlcm1zIHRvIGZpbHRlciBieVxuICogQHBhcmFtIHtTdHJpbmd9IGNhdGVnb3J5IC0gQ2F0ZWdvcnkgdG8gc2VhcmNoIGluXG4gKi9cbmNvbnN0IGZpbHRlckJ5Q2F0ZWdvcnkgPSAoZGF0YSwgc2VhcmNoVGVybXMsIGNhdGVnb3J5KSA9PiB7XG4gIGxldCBzZWFyY2hSZXN1bHRzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNhdGVnb3J5VGVybXM7XG5cbiAgICBpZiggZGF0YVtpXS5oYXNPd25Qcm9wZXJ0eShjYXRlZ29yeSkgKSB7XG4gICAgICBjYXRlZ29yeVRlcm1zID0gZGF0YVtpXVtjYXRlZ29yeV07XG4gICAgfVxuICAgIFxuICAgIGlmKCBjYXRlZ29yeVRlcm1zICkge1xuICAgICAgaWYoICFBcnJheS5pc0FycmF5KGNhdGVnb3J5VGVybXMpICkge1xuICAgICAgICBjYXRlZ29yeVRlcm1zID0gW2NhdGVnb3J5VGVybXMudG9TdHJpbmcoKV07XG4gICAgICB9XG5cbiAgICAgIGlmKCBjYXRlZ29yeVRlcm1zLnNvbWUodGVybSA9PiBzZWFyY2hUZXJtcy5pbmNsdWRlcyh0ZXJtKSkgKSB7XG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCggZGF0YVtpXSApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWFyY2hSZXN1bHRzO1xufVxuXG5leHBvcnQgeyBmaWx0ZXJCeUtleXdvcmQsIGZpbHRlckJ5Q2F0ZWdvcnkgfTsiLCJpbXBvcnQgeyBnZXRGaWVsZFZhbHVlIH0gZnJvbSAnLi9maWx0ZXItdmFsdWVzLmpzJztcblxuLyoqXG4gKiBTaG93IHNlbGVjdGVkIG9wdGlvbnMgZm9yIHByb2R1Y3QgY29kZSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXJzVG9VcGRhdGUgLSBGaWx0ZXIgZmllbGRzIHRvIHVwZGF0ZVxuICovXG5jb25zdCBzaG93U2VsZWN0ZWRPcHRpb25zID0gKGZpbHRlcnNUb1VwZGF0ZSkgPT4ge1xuICBmaWx0ZXJzVG9VcGRhdGUuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmKCBmaWx0ZXIudHlwZSA9PSAnY2hlY2tib3gnICkge1xuICAgICAgbGV0IGZpbHRlckZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZmlsdGVyLW5hbWU9JyArIGZpbHRlci5uYW1lICsgJ10nKTtcblxuICAgICAgaWYoICFmaWx0ZXJGaWVsZCApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgY291bnRXcmFwcGVyID0gZmlsdGVyRmllbGQucXVlcnlTZWxlY3RvcignW2RhdGEtZmllbGQtY291bnRdJyk7XG4gICAgICBsZXQgZmlsdGVyVmFsdWUgPSBnZXRGaWVsZFZhbHVlKGZpbHRlckZpZWxkLCAnY2hlY2tib3gnKTtcbiAgICAgIGxldCBmaWx0ZXJDb3VudCA9IGZpbHRlclZhbHVlLmxlbmd0aCB8fCAwO1xuXG4gICAgICBpZiggIWNvdW50V3JhcHBlciApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiggZmlsdGVyQ291bnQgPiAwICkge1xuICAgICAgICBjb3VudFdyYXBwZXIuaW5uZXJIVE1MID0gYCR7ZmlsdGVyQ291bnR9PHNwYW4gY2xhc3M9XCJzci1vbmx
45XCI+IGZpbHRlcnMgYXBwbGllZDwvc3Bhbj5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY291bnRXcmFwcGVyLmlubmVySFRNTCA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7IHNob3dTZWxlY3RlZE9wdGlvbnMgfTsiLCJpbXBvcnQgeyBsb2FkUGFnaW5hdGVkQVBJRGF0YSB9IGZyb20gJy4uL19tb2R1bGVzL2xvYWQtYXBpLWRhdGEuanMnO1xuaW1wb3J0IHsgZW5hYmxlTG9hZGluZ1N0YXRlLCBkaXNhYmxlTG9hZGluZ1N0YXRlLCBhZGRGaWx0ZXJFcnJvciwgZmlsdGVyTGlzdEluaXQgfSBmcm9tICcuLi9fbW9kdWxlcy9maWx0ZXIuanMnO1xuXG4vLyBsb2FkIG9ubHkgaWYgZmlsdGVyIGV4aXN0c1xuY29uc3QgZmlsdGVyU2VhcmNoRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZXNvdXJjZXMnKTtcblxuaWYoIGZpbHRlclNlYXJjaEVsZW0gKSB7XG5cbiAgLy9cbiAgLy8gT1BUSU9OU1xuICAvL1xuICBcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBwYWdpbmF0aW9uOiB0cnVlLFxuICAgIHBlclBhZ2U6IDI0LFxuICAgIHppcFNlYXJjaDogZmFsc2UsXG4gICAgbWFwOiBmYWxzZSxcbiAgICBkZWZhdWx0U29ydGluZzogJ2FscGhhRGVzYycsIC8vIE5PVEU6IGNhbm5vdCB1c2UgcmFuZG9tIHNvcnRpbmcgd2l0aCBwYWdpbmF0aW9uXG4gIH07XG5cbiAgLy9cbiAgLy8gRlVOQ1RJT05TXG4gIC8vXG5cbiAgLyoqXG4gICAqIEZvcm1hdCBsaXN0XG4gICAqIEBwYXJhbSBkYXRhIC0gUG9zdCBkYXRhIGZyb20gQVBJXG4gICAqL1xuICBjb25zdCBmb3JtYXRMaXN0ID0gKGRhdGEpID0+IHtcbiAgICBsZXQgZm9ybWF0dGVkTGlzdCA9IGRhdGEubWFwKChsaXN0SXRlbSkgPT4ge1xuICAgICAgbGV0IGZvcm1hdHRlZEl0ZW0gPSB7fTtcblxuICAgICAgLy8gc29ydGluZyAmIGZpbHRlcmluZ1xuICAgICAgZm9ybWF0dGVkSXRlbS5kYXRlID0gbGlzdEl0ZW0uZGF0ZTtcbiAgICAgIGZvcm1hdHRlZEl0ZW0uc3BlY2lhbHR5X3NsdWdzID0gbGlzdEl0ZW0ucmVzb3VyY2Vfc3BlY2lhbHR5X3NsdWdzO1xuICAgICAgZm9ybWF0dGVkSXRlbS50eXBlX3NsdWdzID0gbGlzdEl0ZW0ucmVzb3VyY2VfdHlwZV9zbHVncztcbiAgICAgIGZvcm1hdHRlZEl0ZW0ucmVsYXRlZF9wcm92aWRlcnMgPSBsaXN0SXRlbS5yZWxhdGVkX3Byb3ZpZGVycztcblxuICAgICAgLy8gY29udGVudFxuICAgICAgZm9ybWF0dGVkSXRlbS5pbWFnZSA9IGxpc3RJdGVtLnJlc291cmNlX2ltYWdlO1xuICAgICAgZm9ybWF0dGVkSXRlbS5wcmltYXJ5X3Jlc291cmNlX3R5cGUgPSBsaXN0SXRlbS5wcmltYXJ5X3Jlc291cmNlX3R5cGU7XG4gICAgICBmb3JtYXR0ZWRJdGVtLnRpdGxlID0gbGlzdEl0ZW0udGl0bGUucmVuZGVyZWQ7XG5cbiAgICAgIC8vIGxpbmsgaW5mb1xuICAgICAgZm9ybWF0dGVkSXRlbS5pZCA9IGxpc3RJdGVtLmlkO1xuICAgICAgZm9ybWF0dGVkSXRlbS5wb3N0X3R5cGUgPSBsaXN0SXRlbS50eXBlO1xuICAgICAgZm9ybWF0dGVkSXRlbS5saW5rX3R5cGUgPSBsaXN0SXRlbS5hY2YucmVzb3VyY2VfcG9zdF9saW5rX3R5cGU7XG4gICAgICBmb3JtYXR0ZWRJdGVtLmxpbmsgPSBsaXN0SXRlbS5saW5rO1xuICAgICAgZm9ybWF0dGVkSXRlbS5yZXNvdXJjZV9saW5rID0gbGlzdEl0ZW0uYWNmLnJlc291cmNlX3Bvc3RfbGluaztcbiAgICAgIGZvcm1hdHRlZEl0ZW0udmlkZW9fdXJsID0gbGlzdEl0ZW0uYWNmLnJlc291cmNlX3Bvc3RfdmlkZW9fdXJsO1xuICAgICAgZm9ybWF0dGVkSXRlbS52bV92aWRlbyA9IGxpc3RJdGVtLmFjZi5yZXNvdXJjZV9wb3N0X3ZtX3ZpZGVvO1xuXG4gICAgICByZXR1cm4gZm9ybWF0dGVkSXRlbTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3JtYXR0ZWRMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YVxuICAgKiBAcGFyYW0gdXJsIC0gQVBJIFVSTFxuICAgKi9cbiAgY29uc3QgbG9hZEZpbHRlckRhdGEgPSBhc3luYyAodXJsKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBsb2FkUGFnaW5hdGVkQVBJRGF0YSh1cmwsIDEwMCk7XG4gICAgICBsZXQgZm9ybWF0dGVkUmVzdWx0cyA9IGZvcm1hdExpc3QocmVzdWx0c1snZGF0YSddKTtcblxuICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdHM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgcmVzdWx0czogJHtlcnJvcn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGxpc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IHBvc3QgLSBQb3N0IG9iamVjdFxuICAgKi9cbiAgY29uc3QgbGlzdEJ1aWxkZXIgPSAobGlzdEl0ZW0pID0+IHtcbiAgICBsZXQgZm9ybWF0dGVkTGlzdCA9ICcnO1xuICAgIGxldCBsaW5rX3R5cGUgPSBsaXN0SXRlbS5saW5rX3R5cGU7XG4gICAgbGV0IGltYWdlID0gbGlzdEl0ZW0uaW1hZ2UgPyBsaXN0SXRlbS5pbWFnZSA6ICcvd3AtY29udGVudC90aGVtZXMvb3J0aG9uZWJyYXNrYS9pbWcvZWxlbS9kZWZhdWx0LXJlc291cmNlLnN2Zyc7XG4gICAgbGV0IHJlc291cmNlX2xpbmsgPSAnJztcbiAgICBsZXQgcHJpbWFyeV9yZXNvdXJjZV90eXBlID0gJyc7XG5cbiAgICBpZiggbGlzdEl0ZW0ucG9zdF90eXBlICE9ICdyZXNvdXJjZScgKSB7XG4gICAgICByZXNvdXJjZV9saW5rID0gbGlzdEl0ZW0ubGluaztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2VfbGluayA9IGxpc3RJdGVtLnJlc291cmNlX2xpbms/LnVybCA/PyAnJztcbiAgICB9XG5cbiAgICBpZiggbGlzdEl0ZW0ucHJpbWFyeV9yZXNvdXJjZV90eXBlICkge1xuICAgICAgbGV0IHR5cGVfaWNvbl9jbGFzcyA9IGBjYXJkX19pY29uLXRhZy0tJHtsaXN0SXRlbS5wcmltYXJ5X3Jlc291cmNlX3R5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJy0nKX1gO1xuXG4gICAgICBwcmltYXJ5X3Jlc291cmNlX3R5cGUgPSBgXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZF9fdGFnc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZF9faWNvbi10YWcgJHt0eXBlX2ljb25fY2xhc3N9XCI+JHtsaXN0SXRlbS5wcmltYXJ5X3Jlc291cmNlX3R5cGV9PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICBgO1xuICAgIH1cblxuICAgIGlmKCAobGlua190eXBlID09ICd2aWRlbycgJiYgbGlzdEl0ZW0udmlkZW9fdXJsKSB8fCAobGlua190eXBlID09ICd2aWV3bWVkaWNhJyAmJiBsaXN0SXRlbS52bV92aWRlbykgKSB7XG4gICAgICBmb3JtYXR0ZWRMaXN0ICs9IGBcbiAgICAgICAgPGxpPlxuICAgICAgICAgIDxidXR0b24gcm9sZT1cImJ1dHRvblwiIGNsYXNzPVwiY2FyZCBjYXJkLS12aWRlbyB2aWRlby1vdmVybGF5XCIgJHtsaXN0SXRlbS52aWRlb191cmwgPyBgZGF0YS1tb2RhbC12aWRlbz1cIiR7bGlzdEl0ZW0udmlkZW9fdXJsfVwiYCA6IGBkYXRhLW1vZGFsLXZpZXdtZWRpY2E9XCIke2xpc3RJdGVtLnZtX3ZpZGVvfVwiYH0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmRfX2ltYWdlXCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtpbWFnZX1cIiBhbHQ9XCJcIiB3aWR0aD1cIjM1MFwiIGhlaWdodD1cIjI2MlwiIGxvYWRpbmc9XCJsYXp5XCI+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZF9fY29udGVudFwiPlxuICAgICAgICAgICAgICAke3ByaW1hcnlfcmVzb3VyY2VfdHlwZX1cblxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmRfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkX19saW5rXCI+XG4gICAgICAgICAgICAgICAgICAke2xpbmtfdHlwZSA9PSAndmlkZW8nIHx8IGxpbmtfdHlwZSA9PSAndmlld21lZGljYScgPyBgXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPldhdGNoIHZpZGVvOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgJHtsaXN0SXRlbS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx
45XCI+KG9wZW5zIGluIG1vZGFsIHdpbmRvdyk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICBgIDogYFxuICAgICAgICAgICAgICAgICAgICAke2xpc3RJdGVtLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdHRlZExpc3QgKz0gYFxuICAgICAgICA8bGk+XG4gICAgICAgICAgPGEgaHJlZj1cIiR7cmVzb3VyY2VfbGlua31cIiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZF9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCIke2ltYWdlfVwiIGFsdD1cIlwiIHdpZHRoPVwiMzUwXCIgaGVpZ2h0PVwiMjYyXCIgbG9hZGluZz1cImxhenlcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICR7cHJpbWFyeV9yZXNvdXJjZV90eXBlfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkX190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZF9fbGlua1wiPiR7bGlzdEl0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVkTGlzdDtcbiAgfVxuXG4gIC8vXG4gIC8vIElOSVRcbiAgLy9cblxuICBlbmFibGVMb2FkaW5nU3RhdGUodHJ1ZSk7XG5cbiAgY29uc3QgYXBpX2ZpZWxkX3BhcmFtcyA9ICc/X2ZpZWxkcz1pZCx0eXBlLHRpdGxlLGxpbmssZGF0ZSxmZWF0dXJlZF9tZWRpYSxyZXNvdXJjZV9pbWFnZSxyZXNvdXJjZV90eXBlX3NsdWdzLHByaW1hcnlfcmVzb3VyY2VfdHlwZSxyZXNvdXJjZV9zcGVjaWFsdHlfc2x1Z3MscmVsYXRlZF9wcm92aWRlcnMsYWNmJztcbiAgY29uc3QgcG9zdHNBUEkgPSBgL3dwLWpzb24vd3AvdjIvcG9zdHMke2FwaV9maWVsZF9wYXJhbXN9YDtcbiAgY29uc3QgcmVzb3VyY2VzQVBJID0gYC93cC1qc29uL3dwL3YyL3Jlc291cmNlJHthcGlfZmllbGRfcGFyYW1zfWA7XG4gIGNvbnN0IHBpbGxhclBhZ2VzQVBJID0gYC93cC1qc29uL3dwL3YyL3BpbGxhciR7YXBpX2ZpZWxkX3BhcmFtc31gO1xuXG4gIFByb21pc2UuYWxsKFtcbiAgICBsb2FkRmlsdGVyRGF0YShwb3N0c0FQSSksXG4gICAgbG9hZEZpbHRlckRhdGEocmVzb3VyY2VzQVBJKSxcbiAgICBsb2FkRmlsdGVyRGF0YShwaWxsYXJQYWdlc0FQSSlcbiAgXSlcbiAgICAudGhlbigoW3Bvc3RzLCByZXNvdXJjZXMsIHBpbGxhcl9wYWdlc10pID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBwb3N0cy5jb25jYXQocmVzb3VyY2VzLCBwaWxsYXJfcGFnZXMpO1xuICAgICAgZmlsdGVyTGlzdEluaXQoZGF0YSwgb3B0aW9ucywgbGlzdEJ1aWxkZXIpO1xuICAgICAgZGlzYWJsZUxvYWRpbmdTdGF0ZSgpO1xuICAgIH0pXG4gICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgZGlzYWJsZUxvYWRpbmdTdGF0ZSgpO1xuICAgICAgYWRkRmlsdGVyRXJyb3IoJ1RoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGxvYWRpbmcgdGhlIHNlYXJjaCBkYXRhLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgICAgY29uc29sZS5sb2coYEVSUk9SISAke2Vycm9yfWApO1xuICAgIH0pO1xufSJdLCJuYW1lcyI6WyJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwidXJsIiwicGFyYW1zIiwidXJsV2l0aFBhcmFtcyIsInJlc3BvbnNlIiwiZGF0YSIsInciLCJfY29udGV4dCIsIm4iLCJjb25jYXQiLCJmZXRjaCIsInYiLCJvayIsIkVycm9yIiwic3RhdHVzIiwianNvbiIsImEiLCJfcmVmMiIsIm1hcENsdXN0ZXIiLCJpbmZvV2luZG93IiwidHh0IiwibG9hZFBhZ2luYXRlZEFQSURhdGEiLCJfY2FsbGVlMyIsImJhc2VVcmwiLCJwZXJQYWdlIiwicGFnZU51bSIsInNvcnRPcHRpb24iLCJhbGxEYXRhIiwiY3VycmVudFBhZ2UiLCJ0b3RhbFBhZ2VzIiwiZ2V0TmV4dFBhZ2VEYXRhIiwiX2NvbnRleHQzIiwib3JkZXIiLCJvcmRlcmJ5IiwiX3JlZjMiLCJfY2FsbGVlMiIsInVybEhhc1BhcmFtZXRlciIsIl9jb250ZXh0MiIsInAiLCJpbmNsdWRlcyIsIl94OCIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsImhlYWRlcnMiLCJnZXQiLCJyZXN1bHRzVG90YWwiLCJwYWdlVG90YWwiLCJfeDMiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwid2FpdCIsInRpbWVvdXRJZCIsIl9sZW4iLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5Iiwid2luZG93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImdldFVybFBhcmFtcyIsInVybFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidXJsUGFyYW1TZXQiLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJwYXJhbSIsInNwbGl0IiwidXBkYXRlVVJMUGFyYW1zIiwiaW5pdGlhbFVybFBhcmFtcyIsInRvU3RyaW5nIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsInBhdGhuYW1lIiwidXBkYXRlU2luZ2xlVVJMUGFyYW0iLCJzZXQiLCJkZWxldGUiLCJnZXRGaWVsZFZhbHVlIiwiZWxlbWVudCIsImZpbHRlclR5cGUiLCJxdWVyeVNlbGVjdG9yIiwiZmlsdGVyU2VsZWN0VmFsdWUiLCJmaWx0ZXJSYWRpbyIsImNoZWNrYm94ZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYXJyYXkiLCJjaGVja2VkIiwicHVzaCIsImZpbHRlclZhbHVlIiwiZ2V0WmlwQ29kZUZyb21VUkwiLCJ6aXBWYWx1ZSIsImhhcyIsInZhbGlkYXRlWmlwIiwiemlwIiwidGVzdCIsImNsZWFyWmlwRXJyb3IiLCJlcnJvcldyYXBwZXIiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicmVtb3ZlIiwiYWRkWmlwRXJyb3IiLCJlcnJvciIsInppcEZpZWxkIiwiZXJyb3JNZXNzYWdlIiwiY3JlYXRlRWxlbWVudCIsImlkIiwicm9sZSIsImNsYXNzTGlzdCIsImFkZCIsImNvbnNvbGUiLCJsb2ciLCJ0ZXh0Q29udGVudCIsImFwcGVuZCIsImNhbGN1bGF0ZURpc3RhbmNlIiwicG9pbnQxIiwicG9pbnQyIiwicmxhdDEiLCJNYXRoIiwiUEkiLCJybGF0MiIsImRpZmZsYXQiLCJkaWZmbG9uIiwiYXNpbiIsInNxcnQiLCJzaW4iLCJjb3MiLCJmaWx0ZXJCeVppcCIsImNvb3JkcyIsImxvY2F0aW9uc0xpc3QiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJmaWx0ZXJlZFJlc3VsdHMiLCJsaXN0SXRlbSIsImhhc093blByb3BlcnR5IiwibG93ZXN0TWlsZXMiLCJsb2NhdGlvbnMiLCJpIiwibG9jYXRpb25Db29yZHMiLCJsYXQiLCJsbmciLCJyYXdNaWxlcyIsIm1pbGVzIiwicm91bmQiLCJkaXN0YW5jZSIsInNvcnRMaXN0IiwibGlzdCIsInNvcnREZWZhdWx0IiwiYWxwaGFTb3J0VmFsdWUiLCJzb3J0VmFsdWUiLCJzb3J0IiwiYiIsInRvTG93ZXJDYXNlIiwiaiIsImZsb29yIiwicmFuZG9tIiwiX3JlZiIsInNodWZmbGUiLCJidWlsZFJlc3VsdHNMaXN0IiwicmVzdWx0c0VsZW0iLCJsaXN0QnVpbGRlckZ1bmN0aW9uIiwicmVzdWx0cyIsImVycm9yTWVzc2FnZUVsZW0iLCJpbm5lckhUTUwiLCJwYWdpbmF0aW9uU3RhcnQiLCJwYWdpbmF0aW9uRW5kIiwiY3VycmVudFBhZ2VSZXN1bHRzIiwicGFnZUNvdW50IiwiY2VpbCIsInNsaWNlIiwiX3N0ZXAiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJkb25lIiwiZXJyIiwiZSIsImYiLCJfc3RlcDIiLCJfaXRlcmF0b3IyIiwib3B0aW9uRHJvcGRvd25Ub2dnbGUiLCJ0b2dnbGVGaWVsZCIsImRyb3Bkb3duaXNPcGVuIiwiY2xvc2VEcm9wZG93biIsImRyb3Bkb3duIiwidGFyZ2V0SUQiLCJ
4nZXRBdHRyaWJ1dGUiLCJidXR0b25UYXJnZXQiLCJzZXRBdHRyaWJ1dGUiLCJoaWRkZW4iLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0YXJnZXQiLCJjb250YWlucyIsInByZXZlbnREZWZhdWx0IiwidG9nZ2xlIiwidG9nZ2xlQnV0dG9uIiwiZm9jdXMiLCJkZWZhdWx0Q2VudGVyTGF0IiwiZGVmYXVsdENlbnRlckxuZyIsIm1hcmtlcnMiLCJodG1sRW50aXR5RGVjb2RlciIsInN0ciIsImZpbHRlcldyYXBwZXIiLCJmaWx0ZXJGaWVsZHMiLCJmaWx0ZXJMb2FkZXIiLCJmaWx0ZXJSZXN1bHRzIiwiZmlsdGVyUmVzdWx0c0NvdW50IiwiZmlsdGVyRmluZExvY2F0aW9uIiwiZmlsdGVyQ2xlYXJCdXR0b25zIiwiZmlsdGVyUHJpbnRCdXR0b25zIiwiZmlsdGVyU2hhcmVCdXR0b25zIiwiZmlsdGVyU29ydEZpZWxkIiwiZmlsdGVyUGFnaW5hdGlvbiIsImVuYWJsZUxvYWRpbmdTdGF0ZSIsImZpZWxkIiwiZGlzYWJsZWQiLCJkaXNhYmxlTG9hZGluZ1N0YXRlIiwiZmlsdGVyTGlzdEluaXQiLCJyZXN1bHRzTGlzdCIsInNldHRpbmdzIiwibWFwIiwiZGVmYXVsdHMiLCJwYWdpbmF0aW9uIiwiemlwU2VhcmNoIiwibWFwTWFya2VyIiwibWFwQ2x1c3RlcmluZyIsImRlZmF1bHRTb3J0aW5nIiwib3B0aW9ucyIsImdlb2NvZGVkWmlwQ29sbGVjdGlvbiIsImdvb2dsZU1hcCIsInByb3BlcnR5IiwiX3dpbmRvdyRHT09HTEVfTUFQU19EMiIsIk1BUF9JRCIsIkdPT0dMRV9NQVBTX0RBVEEiLCJtYXBJZCIsIm1hcE9wdGlvbnMiLCJjZW50ZXIiLCJ6b29tIiwibWFwVHlwZUNvbnRyb2wiLCJzdHJlZXRWaWV3Q29udHJvbCIsInpvb21Db250cm9sT3B0aW9ucyIsInBvc2l0aW9uIiwiZ29vZ2xlIiwibWFwcyIsIkNvbnRyb2xQb3NpdGlvbiIsIlRPUF9SSUdIVCIsInNldE9wdGlvbnMiLCJtYXBJbml0IiwiZHJhd0xpc3QiLCJsaXN0SXNGaWx0ZXJlZCIsInBhZ2VVcmxQYXJhbXMiLCJwYWdlbnVtIiwiZGF0YXNldCIsImZpbHRlckRlZmF1bHRTb3J0IiwidXJsUGFyYW1LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsIml0ZW0iLCJidXR0b24iLCJtYXBNYXJrZXJJY29uIiwiX3dpbmRvdyRtYXJrZXJDbHVzdGVyIiwiYm91bmRzIiwiTGF0TG5nQm91bmRzIiwiSW5mb1dpbmRvdyIsIm1heFdpZHRoIiwibWFya2VyIiwic2V0TWFwIiwibWFwTWFya2VySW1nIiwibWFwTWFya2VyVGl0bGUiLCJzcmMiLCJhbHQiLCJ0aXRsZSIsIlBpbkVsZW1lbnQiLCJiYWNrZ3JvdW5kIiwiZ2x5cGhDb2xvciIsImJvcmRlckNvbG9yIiwiQWR2YW5jZWRNYXJrZXJFbGVtZW50IiwiTnVtYmVyIiwiY29udGVudCIsImdtcENsaWNrYWJsZSIsImV4dGVuZCIsImFkZExpc3RlbmVyIiwiaW5mb1dpbmRvd0NvbnRlbnQiLCJwb3B1cCIsImNsb3NlIiwic2V0Q29udGVudCIsIm9wZW4iLCJzZXRab29tIiwicGFuVG8iLCJtYXJrZXJDbHVzdGVyZXIiLCJNYXJrZXJDbHVzdGVyZXIiLCJjbGVhck1hcmtlcnMiLCJmaXRCb3VuZHMiLCJhZGRMaXN0ZW5lck9uY2UiLCJ0YXJnZXRab29tIiwibWluIiwiZ2V0Wm9vbSIsInNldENlbnRlciIsImJ1aWxkTWFwIiwicGFnaW5hdGlvbkVsZW0iLCJ0b3RhbFJlc3VsdHMiLCJhY3RpdmVQYWdlTnVtYmVyIiwicGFnZXMiLCJnZW5lcmF0ZVBhZ2VCdXR0b24iLCJwYWdlTnVtYmVyIiwiaXNBY3RpdmUiLCJjdXJyZW50IiwibGFzdCIsImRlbHRhIiwidW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwiZ2VuZXJhdGVQYWdpbmF0aW9uIiwiYnVpbGRQYWdpbmF0aW9uIiwicnVuRmlsdGVyIiwiZmlsdGVyZWRCeVppcCIsImZpbHRlclZhbHVlcyIsImZpbHRlcnMiLCJmaWx0ZXJWYWx1ZUxpc3QiLCJmaWx0ZXJOYW1lIiwiZmlsdGVyVGF4b25vbXkiLCJuYW1lIiwidGF4b25vbXkiLCJ0eXBlIiwiZ2V0RmlsdGVyVmFsdWVzIiwiZW50cmllcyIsIl9zbGljZWRUb0FycmF5Iiwic2VhcmNoVGVybSIsInNlYXJjaEZpZWxkcyIsInNlYXJjaFRlcm1zIiwiZmllbGRzVG9TZWFyY2giLCJ0ZXh0VG9rZW5zIiwiQm9vbGVhbiIsInNvbWUiLCJ0ZXJtIiwidG9rZW4iLCJmaWx0ZXJCeUtleXdvcmQiLCJjYXRlZ29yeSIsInNlYXJjaFJlc3VsdHMiLCJjYXRlZ29yeVRlcm1zIiwiaXNBcnJheSIsImZpbHRlckJ5Q2F0ZWdvcnkiLCJmaWx0ZXJGaWVsZCIsImNvdW50V3JhcHBlciIsImZpbHRlckNvdW50Iiwiam9pbiIsInN0YXJ0RmlsdGVyIiwiemlwQ29kZVBhcmFtIiwiZ2VvY29kZXIiLCJleGlzdGluZ1ppcCIsImZpbmQiLCJ6aXBDb2RlIiwiemlwRmlsdGVyZWRSZXN1bHRzIiwibGF0bG5nIiwiR2VvY29kZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImdlb2NvZGUiLCJhZGRyZXNzIiwiZ2VvbWV0cnkiLCJ0aGVuIiwiZ2VvY29kZWRaaXAiLCJjYXRjaCIsImxhc3RVUkwiLCJocmVmIiwiY3VycmVudFVSTCIsInJlbG9hZCIsInNldEZpZWxkVmFsdWUiLCJmaWVsZFZhbHVlIiwic2V0UmFkaW9GaWVsZFZhbHVlIiwic2V0Q2hlY2tib3hHcm91cFZhbHVlcyIsImZpZWxkR3JvdXAiLCJmaWVsZFZhbHVlcyIsImNoZWNrVmFsIiwiY2hlY2tib3hFbGVtIiwic29ydEZpZWxkIiwicGFyYW1GaWVsZCIsInJlcGxhY2UiLCJwYXJhbUZpZWxkVHlwZSIsInNldEZpbHRlclZhbHVlcyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwiaXNWYWxpZFppcCIsImZpbHRlclNvcnQiLCJoYXNBdHRyaWJ1dGUiLCJwYWdlUGFyYW0iLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwib3B0aW9uRHJvcGRvd25TZWN0aW9ucyIsInRvZ2dsZVNlY3Rpb24iLCJvcHRpb25MaXN0RmlsdGVyIiwib3B0aW9uTGlzdCIsIm9wdGlvbnNUb0ZpbHRlciIsImZpbHRlckZpZWxkSW5wdXQiLCJmaWx0ZXJPcHRpb25zIiwicGFyZW50Tm9kZSIsIml0ZW1UZXh0IiwidXBkYXRlT3B0aW9uc0ZpbHRlciIsImZpbHRlck9wdGlvbkZpZWxkIiwiZmluZExvY2F0aW9uTWVzc2FnZSIsInppcEZpZWxkSW5wdXQiLCJhZGRMb2NhdGlvbkVycm9yIiwibmF2aWdhdG9yIiwiZ2VvbG9jYXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJMYXRMbmciLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImFkZHJlc3NfY29tcG9uZW50cyIsInR5cGVzIiwic2hvcnRfbmFtZSIsIm1lc3NhZ2UiLCJwcmludCIsInBhZ2VM
4aW5rIiwiTWljcm9Nb2RhbCIsInNob3ciLCJvblNob3ciLCJtb2RhbCIsInNoYXJlQnV0dG9uIiwic2hhcmVTdWNjZXNzTWVzc2FnZSIsInVwZGF0ZVNoYXJlTWVzc2FnZSIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImZpbHRlclRvZ2dsZSIsImJ1dHRvblN0YXRlIiwiZm9ybWF0TGlzdCIsImZvcm1hdHRlZEl0ZW0iLCJkYXRlIiwic3BlY2lhbHR5X3NsdWdzIiwicmVzb3VyY2Vfc3BlY2lhbHR5X3NsdWdzIiwidHlwZV9zbHVncyIsInJlc291cmNlX3R5cGVfc2x1Z3MiLCJyZWxhdGVkX3Byb3ZpZGVycyIsImltYWdlIiwicmVzb3VyY2VfaW1hZ2UiLCJwcmltYXJ5X3Jlc291cmNlX3R5cGUiLCJyZW5kZXJlZCIsInBvc3RfdHlwZSIsImxpbmtfdHlwZSIsImFjZiIsInJlc291cmNlX3Bvc3RfbGlua190eXBlIiwibGluayIsInJlc291cmNlX2xpbmsiLCJyZXNvdXJjZV9wb3N0X2xpbmsiLCJ2aWRlb191cmwiLCJyZXNvdXJjZV9wb3N0X3ZpZGVvX3VybCIsInZtX3ZpZGVvIiwicmVzb3VyY2VfcG9zdF92bV92aWRlbyIsImxvYWRGaWx0ZXJEYXRhIiwiZm9ybWF0dGVkUmVzdWx0cyIsIl90IiwiX3giLCJsaXN0QnVpbGRlciIsIl9saXN0SXRlbSRyZXNvdXJjZV9saSIsIl9saXN0SXRlbSRyZXNvdXJjZV9saTIiLCJmb3JtYXR0ZWRMaXN0IiwidHlwZV9pY29uX2NsYXNzIiwiYXBpX2ZpZWxkX3BhcmFtcyIsInBvc3RzQVBJIiwicmVzb3VyY2VzQVBJIiwicGlsbGFyUGFnZXNBUEkiLCJhbGwiLCJwb3N0cyIsInJlc291cmNlcyIsInBpbGxhcl9wYWdlcyIsInNlYXJjaEVycm9yIl0sIm1hcHBpbmdzIjoiOztrNUZBS2lCQSxFQUFBQyxJQUFBQyxFQUFHLFNBQUFDLEVBQU9DLEVBQUtDLEdBQU0sSUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBUCxJQUFBUSxFQUFBLFNBQUFDLEdBQUEsY0F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

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.