(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"./js/app/browse/views/NewCollectionView.js":function(e,t,o){var i,s;i=[o("./node_modules/jquery/dist/jquery.js"),o("./node_modules/underscore/underscore.js"),o("./js/app/common/constants/uiprops.js"),o("./js/app/govinfo.js"),o("./node_modules/element-closest-polyfill/index.js")],void 0===(s=function(e,t,o,i){return i.BaseView.extend({useState:!0,showBottomPagination:!1,middleEntries:4,edgeEntries:2,statePath:["collection"],wsBaseUrl:"/wssearch/rb/",template:"browse/templates/browsecontent.html",errorTemplate:"common/templates/errornotificationpage.html",templateBase:"browse/templates/results/",loadingTemplate:"templates/loading/blockingSpinner.html",onHashChange:function(e){this.onHashChangeLock||this.renderView()},events:{"click .accordion-heading > a":"togglesign","click .panel-heading":"toggleaccordion","click .panel-title .modal-btn":"volumemodal","click #nodeOperatorButtonId":"toggleAccordians","click .custom-sort-on":"sortleaf","click .fw-pagination-btn":"onPaginationBtn","change .fw-pagination-items-per-page":"onPaginationBtn","click .displayShare":"shareModal","click #closeModal":"removeShareModal","click #modal-shadow":"removeShareModal","click #share-modal__inner--copy":"copyShareUrl","click #collection-link-share":"copyShareUrl","click .volumeModal":"openVolumeModal","click #closeVolumeModal":"removeVolumeModal","click #volumeModal-shadow":"removeVolumeModal","click .closeModals":"removeVolumeModal","click #dl_csv":"downloadReport","click #dl_json":"downloadReport"},initialize:function(e){i.BaseView.prototype.initialize.call(this,e),this.uiprops=o,this.psdata=this.uiprops.browsepagesizeoptions},volumesincollections:{cfr:!0},hybridcollections:{crecb:!0,hjournal:!0,govman:!0,cdir:!0,statute:!0},hybridcollections_bimap:{crecb:"crecb_gpo",crecb_gpo:"crecb",govman:"govman_gpo",govman_gpo:"govman",hjournal:"gpo_hjournal",gpo_hjournal:"hjournal",cdir:"gpo_cdir",gpo_cdir:"cdir",statute:"statute_statuted",statute_statuted:"statute"},hybridcollections_bpmap:{crecb:"_crecb",govman:"_United States Government Manual",hjournal:"hjournal_",cdir:"cdir_",statute:"_"},snippets:{master:"browse/templates/results/default/master.html",errornotification:"common/templates/errornotification.html",exceeding:"browse/templates/results/default/browseexceeding10000.html",loadingspinner:"common/templates/loadingspinner.html",noresults:"browse/templates/results/default/browsenoresults.html",pagination:"browse/templates/results/default/NewPaginationPanel.html","share-modal":"browse/templates/sharemodal.html","collection-header-share":"browse/templates/collectionheadshareicons.html"},shareModal:function(t){if($currentTarget=e(t.target),e("#share-contain").remove(),shareButton=$currentTarget[0],modal=this.snippet("share-modal"),~e.inArray("displayShare",shareButton.classList)){var a=e(shareButton).attr("addthis:url");-1!==a.indexOf("CFR")||-1!==a.indexOf("USCODE")?-1!==a.indexOf("GPO-CFR-INDEX")?shareButton.classList.contains("displayShare__outer")?e(shareButton.parentElement.closest(".panel-heading")).after(modal):e(shareButton.parentElement).after(modal):e(shareButton.parentElement.closest(".panel-heading")).after(modal):(-1!==a.indexOf("GPO")||-1!==a.indexOf("/BUDGET")||-1!==a.indexOf("HJOURNAL"))&&shareButton.classList.contains("displayShare__outer")?e(shareButton.parentElement.closest(".panel-heading")).after(modal):e(shareButton.parentElement).after(modal)}"displayShare"==shareButton.classList[4]&&e("#share-contain").insertAfter(e(shareButton).closest(".modal-dialog")),i.BaseView.prototype.shareModalData()},openVolumeModal:function(t){$currentTarget=e(t.target),$modal=e($currentTarget[0].nextElementSibling),$modal_inner=e($currentTarget[0].nextElementSibling.children[0]),$modal.removeClass("volumeModal--hide").addClass("volumeModal--show"),$modal_inner.removeClass("volumeModal--hide").addClass("volumeModal--show"),$modal_inner.before('<div class="modal-shadow" id="volumeModal-shadow"></div>')},removeVolumeModal:function(t){e(".volumeModal__inner").addClass("volumeModal--hide"),e(".volumeModal__container").addClass("volumeModal--hide"),e("#volumeModal-shadow").remove(),e("#modal-shadow").remove()},removeShareModal:function(t){e(".share-modal__inner").addClass("modalFadeOut--slower"),e("#share-contain").fadeOut((function(){e("#share-contain").remove()}))},copyShareUrl:function(e){i.BaseView.prototype.copyShareUrl(e)},_formatHeadings:function(e){var a=e,i=a&&a.nodeValue&&a.nodeValue.collectionCode&&a.nodeValue.collectionCode.toLowerCase(),s=function(e){for(var a=e.childNodes,n="",r="",l=[],d=0,c=a.length;d<c;d++){var h=a[d];if("CFRPARTS"==h.nodeValue.collectionCode&&2==h.nodeValue.level){var p=this.nodeMetadata.href.split("/")[2],u=p+" CFR",g=h.nodeValue.displayValue;if(g.indexOf("Chapter")>=0)continue;var m=g.split("/");if(2!=m.length||m[0]!=u);else{h.nodeValue.displayValue=m[1];var f=p+"/"+m[1].split(" ")[1];h.nodeValue.value=f,h.nodeValue.browsePathAlias=f,h.nodeValue.browsePath=f,l.push(h)}}else l.push(h);h.nodeValue.section===n?(n=h.nodeValue.section,h.nodeValue.section=""):(n=h.nodeValue.section,h.nodeValue.section=o.docresultsmapping[i][h.nodeValue.section]),h.nodeValue.firstpage==r?(r=h.nodeValue.firstpage,h.nodeValue.firstpage=""):h.nodeValue.firstpage&&(r=h.nodeValue.firstpage),h.childNodes&&h.childNodes.length>0&&s(h)}e.nodeValue&&"CFRPARTS"==e.nodeValue.collectionCode&&0==e.nodeValue.level&&(l=t.sortBy(l,(function(e){if(e.nodeValue){var t=e.nodeValue.displayValue.split(" ");if(2==t.length)return Number(t[1])}return null}))),e.childNodes=l}.bind(this);"erp"==i&&s(a),"cfrparts"==i&&(i="fr",s(a))},_preloadDataAsync:function(e,t,a){this.getJSON(e,function(e){this._formatHeadings(e),t(e)}.bind(this),function(e){var t=o.messages.error.GENERAL;a({errorText:t})}.bind(this))},preloadDataAsync:function(e,t){var a=this.wsBaseUrl+this.collection;a+=this.browsePath?"/"+this.browsePath:"",a+="?fetchChildrenOnly=0",a+=this.queryParams?"&"+this.queryParams:"",this._preloadDataAsync(this._decorateUrl(a),e,t)},toggleAccordians:function(t){t.preventDefault();var a=e(t.currentTarget),o=this.$("#browseresultsId");o.find(".panel-collapse.in").collapse("hide"),o.find(".panel-title i.fa-minus-circle").toggleClass("fa-plus-circle").toggleClass("fa-minus-circle"),o.find(".panel-heading").attr("data-open","off"),e("html, body").animate({scrollTop:10},"slow"),a.css("visibility","hidden")},_setCollectionSpecificSnippets:function(){-1!==this.collection.indexOf("_")?t.each(this.collection.split("_"),(function(e){this.snippets[e+"node"]=this.templateBase+e+"/node.html",this.snippets[e+"leaf"]=this.templateBase+e+"/leaf.html"}),this):(this.snippets[this.collection+"node"]=this.templateBase+this.collection+"/node.html",this.snippets[this.collection+"leaf"]=this.templateBase+this.collection+"/leaf.html"),"crec"==this.collection&&(this.snippets[this.collection+"books"]=this.templateBase+this.collection+"/books.html"),this.snippets.entireissue=this.templateBase+"/entireissue.html",this.volumesincollections[this.collection]&&(this.snippets[this.collection+"volume"]=this.templateBase+this.collection+"/volume.html")},getInterval:function(e,t){var a=Math.ceil(this.middleEntries/2),o=t-this.middleEntries;return[e>a?Math.max(Math.min(e-a,o),0):0,e>a?Math.min(e+a,t):Math.min(this.middleEntries,t)]},renderView:function(t){var a=this.getStateParameters();this.pageSizeOptions={};var o=a[a.length-1],s={};this.sort="1",this.isJSON(o)&&(s=JSON.parse(o),this.queryParams=e.param(s),"sort"in s&&(this.sort=s.sort),"offset"in s&&(this.offset=s.offset),"pageSize"in s&&(this.pageSize=s.pageSize),a.splice(-1)),this.collection=a[1]&&a[1].toLowerCase(),this.browsePath=a.splice(2).join("/"),this.paginationenabledleaf=!!this.psdata.hasOwnProperty(this.collection),this.pageSizeOptions=this.psdata.hasOwnProperty(this.collection)?this.psdata[this.collection]:{},this.pageSize=this.pageSize?this.pageSize:this.pageSizeOptions[0],this.hybridcollections[this.collection]&&(this.browsePath=this.browsePath?this.browsePath:this.hybridcollections_bpmap[this.collection],this.collection=this.hybridcollections_bimap[this.collection]),this.snippets.header="browse/templates/collection_headers/"+this.collection+"_header.html",this.snippets.resources="browse/templates/related_resources/"+this.collection+"_related_resources.html",this._setCollectionSpecificSnippets(),e("#nodeOperatorButtonId").affix({position:"fixed"}),i.BaseView.prototype.renderView.call(this,t)},render:function(t){i.BaseView.prototype.render.call(this,t),this.$el.find("#HeaderShareMenu").html(this.snippet("collection-header-share")),this.$('div.panel-heading[data-nodestatus="O"]').length>0&&this.$("#nodeOperatorButtonId").css("visibility","visible"),null!=e('[data-toggle="popover"]')&&e('[data-toggle="popover"]').popover(),i.BaseView.prototype.shareContent.call(this)},errorcb:function(t){this.$("#loadgraphicoverlay")?this.$("#loadgraphicoverlay").remove():e(this.targetAccordionBody+" > #loadgraphicoverlay").fadeOut().remove();var a=o.messages.error.GENERAL;if(this.nodeMetadata.targetAppendSelector.length){var i=!1;try{var s=JSON.parse(t.responseText);i=(s=s.error)&&s.MESSAGE&&"Error page size + offset must be less than maxoffset: 10000"==s.MESSAGE}catch(e){}i?this.nodeMetadata.targetAppendSelector.html(this.snippet("exceeding",{})):this.nodeMetadata.targetAppendSelector.html(this.snippet("errornotification",{errorText:a}))}else this.$el.html(this.snippet("errornotification",{errorText:a}));this.nodeMetadata={}},pushState:function(t){var a=this.nodeMetadata.href,o=this.browsePath?this.browsePath.split("_"):[],i=this.collection?this.collection.split("_"):[];if("-1"!==e.trim(this.collection.indexOf("_"))&&o.length===i.length&&-1!==e.trim(this.collection.indexOf(this.nodeMetadata.nodecc))){for(var s=[],n=0;n<i.length;n++)e.trim(this.nodeMetadata.nodecc)===e.trim(i[n].toLowerCase())?s[n]=this.nodeMetadata.nodebp:s[n]=o[n];this.browsePath=s.join("_"),a=this.hybridcollections_bimap.hasOwnProperty(this.collection)?["/",this.hybridcollections_bimap[this.collection],"/",this.browsePath].join(""):["/",this.collection,"/",this.browsePath].join("")}var r={};this.pageSize&&(r.pageSize=this.pageSize,r.offset=this.offset),Object.keys(r).length>0&&(a=a+"/"+encodeURIComponent(JSON.stringify(r))),this.onHashChangeLock=!0,window.history.pushState("object or string","Title",location.origin+"/app/collection"+a),this.onHashChangeLock=!1},volumemodal:function(t){var a=e(t.currentTarget).data("target");e(a).modal("show"),t.stopImmediatePropagation()},toggleaccordion:function(t){var a=this,o=this.getNodeAttributes(t);if(this.nodeMetadata={},this.nodeMetadata=o,o.target.hasClass("not-an-accordion")||"modal"==e(o.target).data("toggle"))o.target.hasClass("spa-href")&&o.target.hasClass("modal-close")&&(e(".modal").modal("hide"),e(".modal-backdrop").hide(),e("body").removeClass("modal-open"));else if(o.target.parents(".modal").length||o.target.is(".btn")||o.target.is("a"))t.stopImmediatePropagation();else{if("true"==o.expanded?o.cTarget.attr("aria-expanded","false"):o.cTarget.attr("aria-expanded","true"),"on"==o.cTarget.attr("data-open")?o.cTarget.attr("data-open","off"):o.cTarget.attr("data-open","on"),"C"===o.nodeStatus){t.preventDefault(),o.targetAppendSelector.html(this.snippet("loadingspinner")),o.targetAccordionSelector.collapse("toggle");var i=this._decorateUrl(this.wsBaseUrl+o.href+"?fetchChildrenOnly=1");this.paginationenabledleaf&&(this.pageSize=this.pageSizeOptions[0],this.offset="0",i=i+"&offset=0&pageSize="+this.pageSizeOptions[0]),this.getJSON(i,function(e){this.sort="1",this._formatHeadings(e),this.pushState(),o.targetAppendSelector.html(this.snippet("master",{_preloadData:e,_this:this}))}.bind(this),this.errorcb.bind(this)).done((function(){return a.addTabIndex()})),o.currentTarget.data("nodestatus","O")}e("#toggle"+o.id).toggleClass("fa-plus-circle").toggleClass("fa-minus-circle"),this.toggleGlobalButtonState()}},_decorateUrl:function(e){return e},sortleaf:function(e){var t=this,a=this.getNodeAttributes(e);this.sort=a.newSort,this.nodeMetadata=a,a.targetAppendSelector.html(this.snippet("loadingspinner"));var o=this._decorateUrl(this.wsBaseUrl+a.href+"?fetchChildrenOnly=1&sortDirection="+a.newSort);this.pageSize&&(o=o+"&pageSize="+this.pageSize+"&offset="+this.offset),this.getJSON(o,function(e){this._formatHeadings(e),a.targetAppendSelector.html(this.snippet("master",{_preloadData:e,_this:this}))}.bind(this),this.errorcb.bind(this)).done((function(){return t.addTabIndex()}))},getNodeAttributes:function(t){var a={};a.target=e(t.target),a.cTarget=e(t.currentTarget),a.currentSort=a.cTarget.attr("data-sort"),a.newSort="1"==a.currentSort?"0":"1";var o="#"+a.target.closest(".panel").attr("id").split("panel")[1];return a.currentTarget=e(o),a.nodeStatus=a.currentTarget.data("nodestatus"),a.targetAccordion=a.currentTarget.data("target"),a.targetAccordionSelector=e(a.targetAccordion),a.href=a.currentTarget.data("href"),a.id=a.currentTarget.attr("id"),a.targetAccordionBody=a.targetAccordion+" > .panel-body",a.targetAppendSelector=e(a.targetAccordionBody),a.nodecc=a.currentTarget.data("collectioncode").toLowerCase(),a.nodebp=a.currentTarget.data("browsepathalias"),a.pageSize=a.cTarget[0].value,a.offset=a.cTarget.attr("data-page"),a.expanded=a.cTarget.attr("aria-expanded"),a},afterRender:function(){this.$("div.panel-body p>span",this.$el).contents().unwrap()},onPaginationBtn:function(e){var t=this,a=this.getNodeAttributes(e);a.cTarget.hasClass("fw-pagination-btn")?this.offset=a.offset:(this.pageSize=a.pageSize,this.offset="0"),this.nodeMetadata=a,a.targetAppendSelector.html(this.snippet("loadingspinner"));var o=this._decorateUrl(this.wsBaseUrl+a.href+"?fetchChildrenOnly=1&pageSize="+this.pageSize+"&offset="+this.offset+"&sortDirection="+a.newSort);this.getJSON(o,function(e){this._formatHeadings(e),this.pushState(),a.targetAppendSelector.html(this.snippet("master",{_preloadData:e,_this:this}))}.bind(this),this.errorcb.bind(this)).done((function(){return t.addTabIndex()})),document.getElementById(a.targetAccordionSelector[0].parentNode.id).scrollIntoView()},toggleGlobalButtonState:function(){this.$('div.panel-heading[data-open="on"]').length>0?e("#nodeOperatorButtonId").css("visibility","visible"):e("#nodeOperatorButtonId").css("visibility","hidden")},addTabIndex:function(){e("div.panel-body").find(".custom-sort-on").attr({tabindex:0,href:"javascript:;","aria-label":"sort results alphabetically"})},downloadReport:function(t){var o=this.$("#congressSelect").val(),i=function(a,o,i,s){e(t.target).attr("id")==a?document.getElementById(a).innerHTML=i:e(t.target).attr("id")==o&&(document.getElementById(o).innerHTML=s)};e(t.target).addClass("disabled-shadow"),i("dl_csv","dl_json",'<i class="fa fa-spinner fa-spin fa-lg"></i>','<i class="fa fa-spinner fa-spin fa-lg"></i>');var s=new XMLHttpRequest;s.open("POST","/wssearch/browse/downloadCMRReport",!0),s.setRequestHeader("Content-Type","application/json;charset=UTF-8"),s.responseType="blob",s.send(JSON.stringify({contentType:t.currentTarget.dataset.downloadtype,congress:o,collectionCode:"CMR",pageSize:"1000",offset:"0"})),s.onreadystatechange=function(){var o=s.response;if(s.getResponseHeader("content-disposition")){var n=s.getResponseHeader("content-disposition");fileName=n.substring(n.indexOf("=")+1)}else fileName="unnamed.json";4===s.readyState&&200===s.status&&(window.navigator.msSaveOrOpenBlob?(window.navigator.msSaveOrOpenBlob(new Blob([o],{type:contentType}),fileName),e(t.target).removeClass("disabled-shadow"),i("dl_csv","dl_json","CSV","JSON")):(a=document.createElement("a"),a.href=window.URL.createObjectURL(o),a.download=fileName,a.style.display="none",document.body.appendChild(a),a.click(),e(t.target).removeClass("disabled-shadow"),i("dl_csv","dl_json","CSV","JSON")))},t.stopPropogation}})}.apply(t,i))||(e.exports=s)}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9qcy9hcHAvYnJvd3NlL3ZpZXdzL05ld0NvbGxlY3Rpb25WaWV3LmpzIl0sIm5hbWVzIjpbImRlZmluZSIsIiQiLCJfIiwidWlwcm9wcyIsIkdvdkluZm8iLCJCYXNlVmlldyIsImV4dGVuZCIsInVzZVN0YXRlIiwic2hvd0JvdHRvbVBhZ2luYXRpb24iLCJtaWRkbGVFbnRyaWVzIiwiZWRnZUVudHJpZXMiLCJzdGF0ZVBhdGgiLCJ3c0Jhc2VVcmwiLCJ0ZW1wbGF0ZSIsImVycm9yVGVtcGxhdGUiLCJ0ZW1wbGF0ZUJhc2UiLCJsb2FkaW5nVGVtcGxhdGUiLCJvbkhhc2hDaGFuZ2UiLCJtYXAiLCJ0aGlzIiwib25IYXNoQ2hhbmdlTG9jayIsInJlbmRlclZpZXciLCJldmVudHMiLCJpbml0aWFsaXplIiwib3B0aW9ucyIsInByb3RvdHlwZSIsImNhbGwiLCJwc2RhdGEiLCJicm93c2VwYWdlc2l6ZW9wdGlvbnMiLCJ2b2x1bWVzaW5jb2xsZWN0aW9ucyIsImh5YnJpZGNvbGxlY3Rpb25zIiwiaHlicmlkY29sbGVjdGlvbnNfYmltYXAiLCJoeWJyaWRjb2xsZWN0aW9uc19icG1hcCIsInNuaXBwZXRzIiwic2hhcmVNb2RhbCIsImUiLCIkY3VycmVudFRhcmdldCIsInRhcmdldCIsInJlbW92ZSIsInNoYXJlQnV0dG9uIiwibW9kYWwiLCJzbmlwcGV0IiwiaW5BcnJheSIsImNsYXNzTGlzdCIsInNoYXJlVVJMIiwiYXR0ciIsImluZGV4T2YiLCJjb250YWlucyIsInBhcmVudEVsZW1lbnQiLCJjbG9zZXN0IiwiYWZ0ZXIiLCJpbnNlcnRBZnRlciIsInNoYXJlTW9kYWxEYXRhIiwib3BlblZvbHVtZU1vZGFsIiwiJG1vZGFsIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiJG1vZGFsX2lubmVyIiwiY2hpbGRyZW4iLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiYmVmb3JlIiwicmVtb3ZlVm9sdW1lTW9kYWwiLCJyZW1vdmVTaGFyZU1vZGFsIiwiZmFkZU91dCIsImNvcHlTaGFyZVVybCIsIl9mb3JtYXRIZWFkaW5ncyIsImRhdGEiLCJyb290IiwiY29sbGVjdGlvbkNvZGUiLCJub2RlVmFsdWUiLCJ0b0xvd2VyQ2FzZSIsInRyYXZlcnNlIiwiY2hpbGROb2RlcyIsInByZXZpb3Vzc2VjdGlvbiIsInByZXZpb3VzUGFnZSIsImZpbHRlcmVkQ2hpbGROb2RlcyIsImkiLCJsIiwibGVuZ3RoIiwiaXRlbSIsImxldmVsIiwidCIsIm5vZGVNZXRhZGF0YSIsInNwbGl0IiwidHJ1ZVRpdGxlIiwiZHYiLCJ0b2tlbnMiLCJkaXNwbGF5VmFsdWUiLCJicCIsInZhbHVlIiwiYnJvd3NlUGF0aEFsaWFzIiwiYnJvd3NlUGF0aCIsInB1c2giLCJkb2NyZXN1bHRzbWFwcGluZyIsInNvcnRCeSIsIm8iLCJOdW1iZXIiLCJiaW5kIiwiX3ByZWxvYWREYXRhQXN5bmMiLCJ1cmwiLCJjYWxsYmFjayIsImVycm9yIiwiZ2V0SlNPTiIsImVycm9yVGV4dCIsIm1lc3NhZ2VzIiwicHJlbG9hZERhdGFBc3luYyIsImNvbGxlY3Rpb24iLCJxdWVyeVBhcmFtcyIsIl9kZWNvcmF0ZVVybCIsInRvZ2dsZUFjY29yZGlhbnMiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Tm9kZSIsImN1cnJlbnRUYXJnZXQiLCJicm93c2VyZXN1bHRzSWQiLCJmaW5kIiwiY29sbGFwc2UiLCJ0b2dnbGVDbGFzcyIsImFuaW1hdGUiLCJzY3JvbGxUb3AiLCJjc3MiLCJfc2V0Q29sbGVjdGlvblNwZWNpZmljU25pcHBldHMiLCJlYWNoIiwiZ2V0SW50ZXJ2YWwiLCJjdXJyZW50X3BhZ2UiLCJucCIsIm5lX2hhbGYiLCJNYXRoIiwiY2VpbCIsInVwcGVyX2xpbWl0IiwibWF4IiwibWluIiwicGFyYW1zIiwiZ2V0U3RhdGVQYXJhbWV0ZXJzIiwicGFnZVNpemVPcHRpb25zIiwib3B0UGFyYW1zIiwib3B0UGFyYW1zSlNPTiIsInNvcnQiLCJpc0pTT04iLCJKU09OIiwicGFyc2UiLCJwYXJhbSIsIm9mZnNldCIsInBhZ2VTaXplIiwic3BsaWNlIiwiam9pbiIsInBhZ2luYXRpb25lbmFibGVkbGVhZiIsImhhc093blByb3BlcnR5IiwiaGVhZGVyIiwicmVzb3VyY2VzIiwiYWZmaXgiLCJyZW5kZXIiLCIkZWwiLCJodG1sIiwicG9wb3ZlciIsInNoYXJlQ29udGVudCIsImVycm9yY2IiLCJ0YXJnZXRBY2NvcmRpb25Cb2R5IiwiZXhjZWVkaW5nIiwicmVzcG9uc2VUZXh0IiwiTUVTU0FHRSIsInB1c2hTdGF0ZSIsIm5vZGVEYXRhIiwicHVzaFVybCIsIlVSTEJyb3dzZVBhdGhBcnJheSIsIlVSTENvbGxlY3Rpb25Db2RlQXJyYXkiLCJ0cmltIiwiYnJvd3NlUGF0aEFycmF5IiwieCIsIm9wdGlvbmFsUGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImVuY29kZVVSSUNvbXBvbmVudCIsInN0cmluZ2lmeSIsIndpbmRvdyIsImhpc3RvcnkiLCJsb2NhdGlvbiIsIm9yaWdpbiIsInZvbHVtZW1vZGFsIiwibW9kYWxUYXJnZXQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJ0b2dnbGVhY2NvcmRpb24iLCJfdGhpcyIsImdldE5vZGVBdHRyaWJ1dGVzIiwiaGFzQ2xhc3MiLCJoaWRlIiwicGFyZW50cyIsImlzIiwiX3ByZWxvYWREYXRhIiwiZG9uZSIsImFkZFRhYkluZGV4IiwidG9nZ2xlR2xvYmFsQnV0dG9uU3RhdGUiLCJzb3J0bGVhZiIsIl90aGlzMiIsIm5vZGVBIiwibm9kZUF0dHJpYnV0ZXMiLCJwYW5lbGhlYWRpbmdJZCIsImFmdGVyUmVuZGVyIiwiY29udGVudHMiLCJ1bndyYXAiLCJvblBhZ2luYXRpb25CdG4iLCJfdGhpczMiLCJjVGFyZ2V0IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInBhcmVudE5vZGUiLCJpZCIsInNjcm9sbEludG9WaWV3IiwiZG93bmxvYWRSZXBvcnQiLCJzZWxlY3RlZENvbmdyZXNzIiwidmFsIiwic3Bpbm5lckljb24iLCJidG4xIiwiYnRuMiIsImJ0bjFpbm5lciIsImJ0bjJpbm5lciIsImlubmVySFRNTCIsInhodHRwIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2V0UmVxdWVzdEhlYWRlciIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJkYXRhc2V0IiwiZG93bmxvYWR0eXBlIiwib25yZWFkeXN0YXRlY2hhbmdlIiwiYmxvYiIsInJlc3BvbnNlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJjb250ZW50RGlzcG9zaXRpb24iLCJmaWxlTmFtZSIsInN1YnN0cmluZyIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJuYXZpZ2F0b3IiLCJtc1NhdmVPck9wZW5CbG9iIiwiQmxvYiIsInR5cGUiLCJjb250ZW50VHlwZSIsImEiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImRvd25sb2FkIiwic3R5bGUiLCJkaXNwbGF5IiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzdG9wUHJvcG9nYXRpb24iXSwibWFwcGluZ3MiOiJzSEFBQUEsVUFBTyxDQUFDLDBDQUFVLDZDQUFjLDBDQUE0Qix5QkFBVyw0REFzcUJ0RSxLQXRxQm1HLEVBQUYsU0FBV0MsRUFBR0MsRUFBR0MsRUFBU0MsR0FxcUJ4SCxPQXBxQnFCQSxFQUFRQyxTQUFTQyxPQUFPLENBRXpDQyxVQUFVLEVBQ1ZDLHNCQUF1QixFQUN2QkMsY0FBZSxFQUNmQyxZQUFhLEVBQ2JDLFVBQVcsQ0FBQyxjQUNaQyxVQUFXLGdCQUNYQyxTQUFVLHNDQUNWQyxjQUFlLDhDQUNmQyxhQUFjLDRCQUNkQyxnQkFBaUIseUNBRWpCQyxhQUFjLFNBQVNDLEdBQ2RDLEtBQUtDLGtCQUNORCxLQUFLRSxjQUdiQyxPQUFRLENBQ04sK0JBQWdDLGFBQ2hDLHVCQUF3QixrQkFDeEIsZ0NBQWlDLGNBQ2pDLDhCQUErQixtQkFDL0Isd0JBQXlCLFdBQ3pCLDJCQUE0QixrQkFDNUIsdUNBQXdDLGtCQUN4QyxzQkFBdUIsYUFDdkIsb0JBQXFCLG1CQUNyQixzQkFBdUIs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LFFBQVFxQixZQUFZLG1CQUUzQnlKLEVBQVksU0FBVSxVQUFXLE1BQU8sVUFHeEM0QixFQUFJcEMsU0FBU3FDLGNBQWMsS0FDM0JELEVBQUVFLEtBQU9uRSxPQUFPb0UsSUFBSUMsZ0JBQWdCakIsR0FFcENhLEVBQUVLLFNBQVdkLFNBQ2JTLEVBQUVNLE1BQU1DLFFBQVUsT0FDbEIzQyxTQUFTNEMsS0FBS0MsWUFBWVQsR0FDMUJBLEVBQUVVLFFBRUN4UCxFQUFFa0MsRUFBRUUsUUFBUXFCLFlBQVksbUJBRTNCeUosRUFBWSxTQUFVLFVBQVcsTUFBTyxXQWdCakRoTCxFQUFFdU4sb0JBTUwiLCJmaWxlIjoiMi5idW5kbGUuNi4yNC4wLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZGVmaW5lKFtcImpxdWVyeVwiLCBcInVuZGVyc2NvcmVcIiwgXCJjb21tb24vY29uc3RhbnRzL3VpcHJvcHNcIiwgXCJnb3ZpbmZvXCIsIFwiZWxlbWVudC1jbG9zZXN0LXBvbHlmaWxsXCJdLCBmdW5jdGlvbigkLCBfLCB1aXByb3BzLCBHb3ZJbmZvKSB7XG4gICAgdmFyIENvbGxlY3Rpb25WaWV3ID0gR292SW5mby5CYXNlVmlldy5leHRlbmQoe1xuICAgICAgICAvLyB0aXRsZTogJ0Jyb3dzZSBSZXN1bHRzIHwgR292SW5mbycsXG4gICAgICAgIHVzZVN0YXRlOiB0cnVlLFxuICAgICAgICBzaG93Qm90dG9tUGFnaW5hdGlvbiA6IGZhbHNlLFxuICAgICAgICBtaWRkbGVFbnRyaWVzOiA0LFxuICAgICAgICBlZGdlRW50cmllczogMixcbiAgICAgICAgc3RhdGVQYXRoOiBbJ2NvbGxlY3Rpb24nXSxcbiAgICAgICAgd3NCYXNlVXJsOiAnL3dzc2VhcmNoL3JiLycsXG4gICAgICAgIHRlbXBsYXRlOiAnYnJvd3NlL3RlbXBsYXRlcy9icm93c2Vjb250ZW50Lmh0bWwnLFxuICAgICAgICBlcnJvclRlbXBsYXRlOiAnY29tbW9uL3RlbXBsYXRlcy9lcnJvcm5vdGlmaWNhdGlvbnBhZ2UuaHRtbCcsXG4gICAgICAgIHRlbXBsYXRlQmFzZTogJ2Jyb3dzZS90ZW1wbGF0ZXMvcmVzdWx0cy8nLFxuICAgICAgICBsb2FkaW5nVGVtcGxhdGU6ICd0ZW1wbGF0ZXMvbG9hZGluZy9ibG9ja2luZ1NwaW5uZXIuaHRtbCcsXG4gICAgICAgIC8vcmVmcmVzaCB0aGUgcGFnZSBvbiBiYWNrL2ZvcndhcmQsIGJ1dCBub3QgaWYgb25seSBzbWFsbCBwYXJ0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICAgIG9uSGFzaENoYW5nZTogZnVuY3Rpb24obWFwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub25IYXNoQ2hhbmdlTG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBcImNsaWNrIC5hY2NvcmRpb24taGVhZGluZyA+IGFcIjogXCJ0b2dnbGVzaWduXCIsXG4gICAgICAgICAgXCJjbGljayAucGFuZWwtaGVhZGluZ1wiOiBcInRvZ2dsZWFjY29yZGlvblwiLFxuICAgICAgICAgIFwiY2xpY2sgLnBhbmVsLXRpdGxlIC5tb2RhbC1idG5cIjogXCJ2b2x1bWVtb2RhbFwiLFxuICAgICAgICAgIFwiY2xpY2sgI25vZGVPcGVyYXRvckJ1dHRvbklkXCI6IFwidG9nZ2xlQWNjb3JkaWFuc1wiLFxuICAgICAgICAgIFwiY2xpY2sgLmN1c3RvbS1zb3J0LW9uXCI6IFwic29ydGxlYWZcIixcbiAgICAgICAgICAnY2xpY2sgLmZ3LXBhZ2luYXRpb24tYnRuJzogJ29uUGFnaW5hdGlvbkJ0bicsXG4gICAgICAgICAgJ2NoYW5nZSAuZnctcGFnaW5hdGlvbi1pdGVtcy1wZXItcGFnZSc6ICdvblBhZ2luYXRpb25CdG4nLFxuICAgICAgICAgICdjbGljayAuZGlzcGxheVNoYXJlJzogJ3NoYXJlTW9kYWwnLFxuICAgICAgICAgICdjbGljayAjY2xvc2VNb2RhbCc6ICdyZW1vdmVTaGFyZU1vZGFsJyxcbiAgICAgICAgICAnY2xpY2sgI21vZGFsLXNoYWRvdyc6ICdyZW1vdmVTaGFyZU1vZGFsJyxcbiAgICAgICAgICAnY2xpY2sgI3NoYXJlLW1vZGFsX19pbm5lci0tY29weSc6ICdjb3B5U2hhcmVVcmwnLFxuICAgICAgICAgICdjbGljayAjY29sbGVjdGlvbi1saW5rLXNoYXJlJzogJ2NvcHlTaGFyZVVybCcsXG4gICAgICAgICAgJ2NsaWNrIC52b2x1bWVNb2RhbCc6ICdvcGVuVm9sdW1lTW9kYWwnLFxuICAgICAgICAgICdjbGljayAjY2xvc2VWb2x1bWVNb2RhbCc6ICdyZW1vdmVWb2x1bWVNb2RhbCcsXG4gICAgICAgICAgJ2NsaWNrICN2b2x1bWVNb2RhbC1zaGFkb3cnOiAncmVtb3ZlVm9sdW1lTW9kYWwnLFxuICAgICAgICAgICdjbGljayAuY2xvc2VNb2RhbHMnOiAncmVtb3ZlVm9sdW1lTW9kYWwnLFxuICAgICAgICAgICdjbGljayAjZGxfY3N2JzogJ2Rvd25sb2FkUmVwb3J0JyxcbiAgICAgICAgICAnY2xpY2sgI2RsX2pzb24nOiAnZG93bmxvYWRSZXBvcnQnXG4gICAgICAvLyAgICdjbGljayAjZG93bmxvYWRSZXBvcnQnOiAnZG93bmxvYWRNb2RhbCdcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy51aXByb3BzID0gdWlwcm9wcztcbiAgICAgICAgICAgIHRoaXMucHNkYXRhID0gdGhpcy51aXByb3BzLmJyb3dzZXBhZ2VzaXplb3B0aW9ucztcbiAgICAgICAgfSxcbiAgICAgICB2b2x1bWVzaW5jb2xsZWN0aW9uczoge1xuICAgICAgICAgICAgXCJjZnJcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBoeWJyaWRjb2xsZWN0aW9uczoge1xuICAgICAgICAgICAgXCJjcmVjYlwiOiB0cnVlLFxuICAgICAgICAgICAgXCJoam91cm5hbFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJnb3ZtYW5cIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiY2RpclwiOnRydWUsXG5cdFx0XHRcInN0YXR1dGVcIjp0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGh5YnJpZGNvbGxlY3Rpb25zX2JpbWFwOiB7XG4gICAgICAgICAgICBcImNyZWNiXCI6IFwiY3JlY2JfZ3BvXCIsXG5cdFx0XHRcImNyZWNiX2dwb1wiOiBcImNyZWNiXCIsXG4gICAgICAgICAgICBcImdvdm1hblwiOiBcImdvdm1hbl9ncG9cIixcbiAgICAgICAgICAgIFwiZ292bWFuX2dwb1wiOiBcImdvdm1hblwiLFxuICAgICAgICAgICAgXCJoam91cm5hbFwiOiBcImdwb19oam91cm5hbFwiLFxuICAgICAgICAgICAgXCJncG9faGpvdXJuYWxcIjogXCJoam91cm5hbFwiLFxuICAgICAgICAgICAgXCJjZGlyXCI6IFwiZ3BvX2NkaXJcIixcbiAgICAgICAgICAgIFwiZ3BvX2NkaXJcIjogXCJjZGlyXCIsXG5cdFx0XHRcInN0YXR1dGVcIjogXCJzdGF0dXRlX3N0YXR1dGVkXCIsXG5cdFx0XHRcInN0YXR1dGVfc3RhdHV0ZWRcIjogXCJzdGF0dXRlXCJcblxuXHRcdH0sXG4gICAgICAgIGh5YnJpZGNvbGxlY3Rpb25zX2JwbWFwOiB7XG4gICAgICAgICAgICBcImNyZWNiXCI6IFwiX2NyZWNiXCIsXG4gICAgICAgICAgICBcImdvdm1hblwiOiBcIl9Vbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgTWFudWFsXCIsXG4gICAgICAgICAgICBcImhqb3VybmFsXCI6IFwiaGpvdXJuYWxfXCIsXG4gICAgICAgICAgICBcImNkaXJcIjogXCJjZGlyX1wiLFxuXHRcdFx0XCJzdGF0dXRlXCI6IFwiX1wiXG4gICAgICAgIH0sXG5cbiAgICAgICAgc25pcHBldHM6IHtcbiAgICAgICAgICAgICdtYXN0ZXInOiAnYnJvd3NlL3RlbXBsYXRlcy9yZXN1bHRzL2RlZmF1bHQvbWFzdGVyLmh0bWwnLFxuICAgICAgICAgICAgJ2Vycm9ybm90aWZpY2F0aW9uJzogJ2NvbW1vbi90ZW1wbGF0ZXMvZXJyb3Jub3RpZmljYXRpb24uaHRtbCcsXG4gICAgICAgICAgICAnZXhjZWVkaW5nJzogJ2Jyb3dzZS90ZW1wbGF0ZXMvcmVzdWx0cy9kZWZhdWx0L2Jyb3dzZWV4Y2VlZGluZzEwMDAwLmh0bWwnLFxuICAgICAgICAgICAgJ2xvYWRpbmdzcGlubmVyJzogJ2NvbW1vbi90ZW1wbGF0ZXMvbG9hZGluZ3NwaW5uZXIuaHRtbCcsXG4gICAgICAgICAgICAnbm9yZXN1bHRzJzogJ2Jyb3dzZS90ZW1wbGF0ZXMvcmVzdWx0cy9kZWZhdWx0L2Jyb3dzZW5vcmVzdWx0cy5odG1sJyxcbiAgICAgICAgICAgICdwYWdpbmF0aW9uJzogJ2Jyb3dzZS90ZW1wbGF0ZXMvcmVzdWx0cy9kZWZhdWx0L05ld1BhZ2luYXRpb25QYW5lbC5odG1sJyxcbiAgICAgICAgICAgICdzaGFyZS1tb2RhbCc6ICdicm93c2UvdGVtcGxhdGVzL3NoYXJlbW9kYWwuaHRtbCcsXG4gICAgICAgICAgICAnY29sbGVjdGlvbi1oZWFkZXItc2hhcmUnOiAnYnJvd3NlL3RlbXBsYXRlcy9jb2xsZWN0aW9uaGVhZHNoYXJlaWNvbnMuaHRtbCdcbiAgICAgICAgfSxcbiAgICAgICAgc2hhcmVNb2RhbDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICRjdXJyZW50VGFyZ2V0ID0gJChlLnRhcmdldCk7XG4gICAgICAgICAgJChcIiNzaGFyZS1jb250YWluXCIpLnJlbW92ZSgpO1xuICAgICAgICAgIC8vIGNsaWNrIHRhcmdldCdzIGZpcnN0IGFycmF5IGVsZW1lbnQ6IHRoZSBwYXNzZWQgaW4gSFRNTCBtYXJrdXBcbiAgICAgICAgICBzaGFyZUJ1dHRvbiA9ICRjdXJyZW50VGFyZ2V0WzBdO1xuICAgICAgICAgIG1vZGFsID0gdGhpcy5zbmlwcGV0KCdzaGFyZS1tb2RhbCcpO1xuXG4gICAgICAgICAgaWYgKH4kLmluQXJyYXkoXCJkaXNwbGF5U2hhcmVcIiwgc2hhcmVCdXR0b24uY2xhc3NMaXN0KSkge1xuICAgICAgICAgICAgLy8gdGFrZXMgdGhlIHNoYXJlIG1vZGFsJ3MgbWFya3VwIGFuZCBpbnNlcnRzIGl0IGFmdGVyIHRoZSBjdXJyZW50IGJyb3dzZSBub2RlLCBoZWxwcyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24uIEhhZCB0byB3cmFwICRjdXJyZW50VGFyZ2V0WzBdIGluIGEgalF1ZXJ5IHNlbGVjdG9yIGZvciBJRTExXG4gICAgICAgICAgICB2YXIgc2hhcmVVUkwgPSAkKHNoYXJlQnV0dG9uKS5hdHRyKFwiYWRkdGhpczp1cmxcIik7XG5cbiAgICAgICAgICAgIGlmIChzaGFyZVVSTC5pbmRleE9mKCdDRlInKSAhPT0gLTEgfHwgc2hhcmVVUkwuaW5kZXhPZignVVNDT0RFJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGlmIChzaGFyZVVSTC5pbmRleE9mKCdHUE8tQ0ZSLUlOREVYJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgaWYgc3RhdGVtZW50IGZvciBDRlIgaW5kZXggYmVjYXVzZSBpdCdzIGEgR1BPIGNvbGxlY3Rpb24gYW5kIG5lZWRzIHNlcGFyYXRlIGZ1bmN0aW9uYWxpdHkgZnJvbSByZWd1bGFyIENGUlxuICAgICAgICAgICAgICAgIGlmIChzaGFyZUJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc3BsYXlTaGFyZV9fb3V0ZXInKSkge1xuICAgICAgICAgICAgICAgICAgLy8gb3V0ZXJtb3N0IG5vZGVzIGhhdmUgc2hhcmUgbW9kYWwgYWRkZWQgYWZ0ZXIgdGhlIGJyb3dzZSBub2RlIHJhdGhlciB0aGFuIGJ1dHRvbnMsIHN0b3BzIGNsaWNrIGV2ZW50IGZyb20gZmlyaW5nIHRvZ2dsZVxuICAgICAgICAgICAgICAgICAgJChzaGFyZUJ1dHRvbi5wYXJlbnRFbGVtZW50LmNsb3Nlc3QoXCIucGFuZWwtaGVhZGluZ1wiKSkuYWZ0ZXIobW9kYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBpbm5lcm1vc3Qgbm9kZXMgaGF2ZSBzaGFyZSBtb2RhbCBhZGRlZCBhZnRlciBidXR0b25zXG4gICAgICAgICAgICAgICAgICAkKHNoYXJlQnV0dG9uLnBhcmVudEVsZW1lbnQpLmFmdGVyKG1vZGFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJChzaGFyZUJ1dHRvbi5wYXJlbnRFbGVtZW50LmNsb3Nlc3QoXCIucGFuZWwtaGVhZGluZ1wiKSkuYWZ0ZXIobW9kYWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXJlVVJMLmluZGV4T2YoJ0dQTycpICE9PSAtMSB8fCBzaGFyZVVSTC5pbmRleE9mKCcvQlVER0VUJykgIT09IC0xIHx8IHNoYXJlVVJMLmluZGV4T2YoJ0hKT1VSTkFMJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgZXhjZXB0aW9uIGZvciBHUE8gY29sbGVjdGlvbnMgd2l0aCBvdXRlciBicm93c2Ugbm9kZSBkZXNpZ24gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIChzaGFyZUJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc3BsYXlTaGFyZV9fb3V0ZXInKSkge1xuICAgICAgICAgICAgICAgICAgJChzaGFyZUJ1dHRvbi5wYXJlbnRFbGVtZW50LmNsb3Nlc3QoXCIucGFuZWwtaGVhZGluZ1wiKSkuYWZ0ZXIobW9kYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAkKHNoYXJlQnV0dG9uLnBhcmVudEVsZW1lbnQpLmFmdGVyKG1vZGFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAkKHNoYXJlQnV0dG9uLnBhcmVudEVsZW1lbnQpLmFmdGVyKG1vZGFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hhcmVCdXR0b24uY2xhc3NMaXN0WzRdID09IFwiZGlzcGxheVNoYXJlXCIpIHtcbiAgICAgICAgICAgIC8vIGp1c3QgZm9yIHRoZSBDRlIgYnJvd3NlIG1vZGFsLCBzaGFyZSBtb2RhbCBuZWVkcyB0byBiZSBwbGFjZWQgYWZ0ZXIgdm9sdW1lcyBtb2RhbCBtYXJrdXBcbiAgICAgICAgICAgICQoXCIjc2hhcmUtY29udGFpblwiKS5pbnNlcnRBZnRlcigkKHNoYXJlQnV0dG9uKS5jbG9zZXN0KFwiLm1vZGFsLWRpYWxvZ1wiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gb2JqZWN0IHRoYXQgcGFzc2VzIGRhdGEgYXJvdW5kIGZyb20gbWV0YSB0YWdzIHRvIG1vZGFsXG4gICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuc2hhcmVNb2RhbERhdGEoKTtcblxuICAgICAgICB9LFxuICAgICAgICBvcGVuVm9sdW1lTW9kYWw6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vIG5lZWRzIHRvIGJlIGEgc2VwYXJhdGUgZXZlbnQgYmVjYXVzZSBub2RlLmh0bWwgZmlsZSBsb2FkcyBhbHJlYWR5IG9uIHRoZSBwYWdlLCBvdGhlciBtb2RhbHMgYXJlIHNuaXBwZXRzIHRoYXQgZG8gbm90IHNob3cgdXAgb24gcGFnZSBsb2FkXG4gICAgICAgICAgICAkY3VycmVudFRhcmdldCA9ICQoZS50YXJnZXQpO1xuICAgICAgICAgICAgJG1vZGFsID0gJCgkY3VycmVudFRhcmdldFswXS5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICAgICAgJG1vZGFsX2lubmVyID0gJCgkY3VycmVudFRhcmdldFswXS5uZXh0RWxlbWVudFNpYmxpbmcuY2hpbGRyZW5bMF0pO1xuXG4gICAgICAgICAgICAkbW9kYWwucmVtb3ZlQ2xhc3MoXCJ2b2x1bWVNb2RhbC0taGlkZVwiKS5hZGRDbGFzcyhcInZvbHVtZU1vZGFsLS1zaG93XCIpO1xuICAgICAgICAgICAgJG1vZGFsX2lubmVyLnJlbW92ZUNsYXNzKFwidm9sdW1lTW9kYWwtLWhpZGVcIikuYWRkQ2xhc3MoXCJ2b2x1bWVNb2RhbC0tc2hvd1wiKTtcbiAgICAgICAgICAgICRtb2RhbF9pbm5lci5iZWZvcmUoJzxkaXYgY2xhc3M9XCJtb2RhbC1zaGFkb3dcIiBpZD1cInZvbHVtZU1vZGFsLXNoYWRvd1wiPjwvZGl2PicpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVWb2x1bWVNb2RhbDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgJCgnLnZvbHVtZU1vZGFsX19pbm5lcicpLmFkZENsYXNzKCd2b2x1bWVNb2RhbC0taGlkZScpO1xuICAgICAgICAgICAgJCgnLnZvbHVtZU1vZGFsX19jb250YWluZXInKS5hZGRDbGFzcygndm9sdW1lTW9kYWwtLWhpZGUnKTtcbiAgICAgICAgICAgICQoJyN2b2x1bWVNb2RhbC1zaGFkb3cnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICQoJyNtb2RhbC1zaGFkb3cnKS5yZW1vdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlU2hhcmVNb2RhbDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICQoJy5zaGFyZS1tb2RhbF9faW5uZXInKS5hZGRDbGFzcyhcIm1vZGFsRmFkZU91dC0tc2xvd2VyXCIpO1xuXG4gICAgICAgICAgICAkKFwiI3NoYXJlLWNvbnRhaW5cIikuZmFkZU91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgJChcIiNzaGFyZS1jb250YWluXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvcHlTaGFyZVVybDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAvLyBzZXBhcmF0ZSBldmVudCBmb3IgY29weWluZyB1cmxzIGluc2lkZSBtb2RhbCwgc2VwYXJhdGUgYmVjYXVzZSBpdCdzIGEgZGlmZmVyZW50IGNsaWNrIGV2ZW50XG4gICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuY29weVNoYXJlVXJsKGUpO1xuICAgICAgICB9LFxuICAgICAgICBfZm9ybWF0SGVhZGluZ3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBfcHJlbG9hZERhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBkYXRhO1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb25Db2RlID0gcm9vdCAmJiByb290Lm5vZGVWYWx1ZSAmJiByb290Lm5vZGVWYWx1ZS5jb2xsZWN0aW9uQ29kZSAmJiByb290Lm5vZGVWYWx1ZS5jb2xsZWN0aW9uQ29kZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24ocm9vdCkge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gcm9vdC5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c3NlY3Rpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1BhZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZENoaWxkTm9kZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUkZDIDYxNixcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ubm9kZVZhbHVlW1wiY29sbGVjdGlvbkNvZGVcIl0gPT0gXCJDRlJQQVJUU1wiICYmIGl0ZW0ubm9kZVZhbHVlLmxldmVsID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5ub2RlTWV0YWRhdGFbJ2hyZWYnXS5zcGxpdCgnLycpWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRydWVUaXRsZSA9IHQgKyBcIiBDRlJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkdiA9IGl0ZW0ubm9kZVZhbHVlW1wiZGlzcGxheVZhbHVlXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9za2lwIG5vbiBwYXJ0c1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZHYuaW5kZXhPZihcIkNoYXB0ZXJcIikgPj0gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGR2LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0b2tlbnMubGVuZ3RoID09IDIgJiYgdG9rZW5zWzBdID09IHRydWVUaXRsZSkpIHt9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubm9kZVZhbHVlLmRpc3BsYXlWYWx1ZSA9IHRva2Vuc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnAgPSB0ICsgJy8nICsgdG9rZW5zWzFdLnNwbGl0KCcgJylbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5ub2RlVmFsdWUudmFsdWUgPSBicDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5vZGVWYWx1ZS5icm93c2VQYXRoQWxpYXMgPSBicDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5vZGVWYWx1ZS5icm93c2VQYXRoID0gYnA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRDaGlsZE5vZGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZENoaWxkTm9kZXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5ub2RlVmFsdWVbXCJzZWN0aW9uXCJdID09PSBwcmV2aW91c3NlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3Vzc2VjdGlvbiA9IGl0ZW0ubm9kZVZhbHVlWydzZWN0aW9uJ107XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5vZGVWYWx1ZVtcInNlY3Rpb25cIl0gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNzZWN0aW9uID0gaXRlbS5ub2RlVmFsdWVbJ3NlY3Rpb24nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubm9kZVZhbHVlW1wic2VjdGlvblwiXSA9IHVpcHJvcHMuZG9jcmVzdWx0c21hcHBpbmdbY29sbGVjdGlvbkNvZGVdW2l0ZW0ubm9kZVZhbHVlW1wic2VjdGlvblwiXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ubm9kZVZhbHVlW1wiZmlyc3RwYWdlXCJdID09IHByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQYWdlID0gaXRlbS5ub2RlVmFsdWVbJ2ZpcnN0cGFnZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5ub2RlVmFsdWVbXCJmaXJzdHBhZ2VcIl0gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubm9kZVZhbHVlW1wiZmlyc3RwYWdlXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2UgPSBpdGVtLm5vZGVWYWx1ZVsnZmlyc3RwYWdlJ107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2RlcyAmJiBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJvb3Qubm9kZVZhbHVlICYmIHJvb3Qubm9kZVZhbHVlLmNvbGxlY3Rpb25Db2RlID09IFwiQ0ZSUEFSVFNcIiAmJiByb290Lm5vZGVWYWx1ZS5sZXZlbCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQ2hpbGROb2RlcyA9IF8uc29ydEJ5KGZpbHRlcmVkQ2hpbGROb2RlcywgZnVuY3Rpb24obykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoby5ub2RlVmFsdWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IG8ubm9kZVZhbHVlLmRpc3BsYXlWYWx1ZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodG9rZW5zLmxlbmd0aCA9PSAyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0b2tlbnNbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDtyb290LmNoaWxkTm9kZXMgPSBmaWx0ZXJlZENoaWxkTm9kZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uQ29kZSA9PSBcImVycFwiKSB7XG4gICAgICAgICAgICAgICAgdHJhdmVyc2Uocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbkNvZGUgPT0gXCJjZnJwYXJ0c1wiKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkNvZGUgPSBcImZyXCI7XG4gICAgICAgICAgICAgICAgdHJhdmVyc2Uocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF9wcmVsb2FkRGF0YUFzeW5jOiBmdW5jdGlvbih1cmwsIGNhbGxiYWNrLCBlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdEhlYWRpbmdzKGRhdGEpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmJpbmQodGhpcyksIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3JUZXh0ID0gdWlwcm9wcy5tZXNzYWdlcy5lcnJvclsnR0VORVJBTCddO1xuICAgICAgICAgICAgICAgIGVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JUZXh0OiBlcnJvclRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlbG9hZERhdGFBc3luYzogZnVuY3Rpb24oY2FsbGJhY2ssIGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy53c0Jhc2VVcmwgKyB0aGlzLmNvbGxlY3Rpb247XG4gICAgICAgICAgICB1cmwgKz0gdGhpcy5icm93c2VQYXRoID8gKCcvJyArIHRoaXMuYnJvd3NlUGF0aCkgOiAnJztcbiAgICAgICAgICAgIHVybCArPSAnP2ZldGNoQ2hpbGRyZW5Pbmx5PTAnO1xuICAgICAgICAgICAgdXJsICs9ICh0aGlzLnF1ZXJ5UGFyYW1zKSA/IFwiJlwiICsgdGhpcy5xdWVyeVBhcmFtcyA6IFwiXCI7XG4gICAgICAgICAgICB0aGlzLl9wcmVsb2FkRGF0YUFzeW5jKHRoaXMuX2RlY29yYXRlVXJsKHVybCksIGNhbGxiYWNrLCBlcnJvcik7XG5cbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlQWNjb3JkaWFuczogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgYnJvd3NlcmVzdWx0c0lkID0gdGhpcy4kKCcjYnJvd3NlcmVzdWx0c0lkJyk7XG4gICAgICAgICAgICBicm93c2VyZXN1bHRzSWQuZmluZCgnLnBhbmVsLWNvbGxhcHNlLmluJykuY29sbGFwc2UoXCJoaWRlXCIpO1xuICAgICAgICAgICAgYnJvd3NlcmVzdWx0c0lkLmZpbmQoJy5wYW5lbC10aXRsZSBpLmZhLW1pbnVzLWNpcmNsZScpLnRvZ2dsZUNsYXNzKCdmYS1wbHVzLWNpcmNsZScpLnRvZ2dsZUNsYXNzKCdmYS1taW51cy1jaXJjbGUnKTtcbiAgICAgICAgICAgIGJyb3dzZXJlc3VsdHNJZC5maW5kKCcucGFuZWwtaGVhZGluZycpLmF0dHIoJ2RhdGEtb3BlbicsICdvZmYnKTtcbiAgICAgICAgICAgICQoXCJodG1sLCBib2R5XCIpLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogMTBcbiAgICAgICAgICAgIH0sIFwic2xvd1wiKTtcbiAgICAgICAgICAgIHRhcmdldE5vZGUuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICB9LFxuICAgICAgICAvL2R5bmFtaWNhbGx5IGxvYWQgaGVhZGVyK3Jlc291cmNlcytsZWFmK25vZGUgaWYgaXQncyBub3QgaW4gY2FjaGVcbiAgICAgICAgX3NldENvbGxlY3Rpb25TcGVjaWZpY1NuaXBwZXRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb24uaW5kZXhPZignXycpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIF8uZWFjaCh0aGlzLmNvbGxlY3Rpb24uc3BsaXQoJ18nKSwgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNuaXBwZXRzW2l0ZW0gKyAnbm9kZSddID0gdGhpcy50ZW1wbGF0ZUJhc2UgKyBpdGVtICsgJy9ub2RlLmh0bWwnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNuaXBwZXRzW2l0ZW0gKyAnbGVhZiddID0gdGhpcy50ZW1wbGF0ZUJhc2UgKyBpdGVtICsgJy9sZWFmLmh0bWwnO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNuaXBwZXRzW3RoaXMuY29sbGVjdGlvbiArICdub2RlJ10gPSB0aGlzLnRlbXBsYXRlQmFzZSArIHRoaXMuY29sbGVjdGlvbiArICcvbm9kZS5odG1sJztcbiAgICAgICAgICAgICAgICB0aGlzLnNuaXBwZXRzW3RoaXMuY29sbGVjdGlvbiArICdsZWFmJ10gPSB0aGlzLnRlbXBsYXRlQmFzZSArIHRoaXMuY29sbGVjdGlvbiArICcvbGVhZi5odG1sJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuY29sbGVjdGlvbiA9PSAnY3JlYycpe1xuICAgICAgICAgICAgICAgIHRoaXMuc25pcHBldHNbdGhpcy5jb2xsZWN0aW9uKydib29rcyddID0gdGhpcy50ZW1wbGF0ZUJhc2UgKyB0aGlzLmNvbGxlY3Rpb24gKyAnL2Jvb2tzLmh0bWwnO1xuICAgICAgICAgICAgfVxuXHRcdFx0dGhpcy5zbmlwcGV0c1snZW50aXJlaXNzdWUnXSA9IHRoaXMudGVtcGxhdGVCYXNlICsgJy9lbnRpcmVpc3N1ZS5odG1sJztcbiAgICAgICAgICAgIGlmICh0aGlzLnZvbHVtZXNpbmNvbGxlY3Rpb25zW3RoaXMuY29sbGVjdGlvbl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNuaXBwZXRzW3RoaXMuY29sbGVjdGlvbiArICd2b2x1bWUnXSA9IHRoaXMudGVtcGxhdGVCYXNlICsgdGhpcy5jb2xsZWN0aW9uICsgJy92b2x1bWUuaHRtbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cblxuICAgICAgICBnZXRJbnRlcnZhbDogZnVuY3Rpb24oY3VycmVudF9wYWdlLCBucCkge1xuICAgICAgICAgICAgdmFyIG5lX2hhbGYgPSBNYXRoLmNlaWwodGhpcy5taWRkbGVFbnRyaWVzIC8gMik7XG4gICAgICAgICAgICB2YXIgdXBwZXJfbGltaXQgPSBucCAtIHRoaXMubWlkZGxlRW50cmllcztcbiAgICAgICAgICAgIHZhciBzdGFydCA9IGN1cnJlbnRfcGFnZSA+IG5lX2hhbGYgPyBNYXRoLm1heChNYXRoLm1pbihjdXJyZW50X3BhZ2UgLSBuZV9oYWxmLCB1cHBlcl9saW1pdCksIDApIDogMDtcbiAgICAgICAgICAgIHZhciBlbmQgPSBjdXJyZW50X3BhZ2UgPiBuZV9oYWxmID8gTWF0aC5taW4oY3VycmVudF9wYWdlICsgbmVfaGFsZiwgbnApIDogTWF0aC5taW4odGhpcy5taWRkbGVFbnRyaWVzLCBucCk7XG4gICAgICAgICAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xuICAgICAgICB9LFxuXG5cblxuICAgICAgICByZW5kZXJWaWV3OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuZ2V0U3RhdGVQYXJhbWV0ZXJzKCk7XG5cbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0ge307XG5cbiAgICAgICAgICAgIC8vR2V0IFF1ZXJ5IHBvcnRpb24gb2YgcGFyYW1zIGlmIGV4aXN0c1xuICAgICAgICAgICAgdmFyIG9wdFBhcmFtcyA9IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0xXTtcblxuICAgICAgICAgICAgdmFyIG9wdFBhcmFtc0pTT04gPSB7fTtcblxuICAgICAgICAgICAgdGhpcy5zb3J0PVwiMVwiO1xuXG5cblxuICAgICAgICAgICAgLy8gVGhpcyBjb252ZXJ0cyBKU09OIFN0cmluZyB7J3NvcnQnOicxJywncGFnZXNpemUnIDogJzEwJ30gdG8gJnNvcnQ9MSZwYWdlc2l6ZT0xMFxuICAgICAgICAgICAgaWYodGhpcy5pc0pTT04ob3B0UGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIG9wdFBhcmFtc0pTT04gPSBKU09OLnBhcnNlKG9wdFBhcmFtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz0gJC5wYXJhbShvcHRQYXJhbXNKU09OKTtcbiAgICAgICAgICAgICAgICBpZihcInNvcnRcIiBpbiBvcHRQYXJhbXNKU09OKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydD0gb3B0UGFyYW1zSlNPTlsnc29ydCddXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKFwib2Zmc2V0XCIgaW4gb3B0UGFyYW1zSlNPTikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldD0gb3B0UGFyYW1zSlNPTlsnb2Zmc2V0J107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKFwicGFnZVNpemVcIiBpbiBvcHRQYXJhbXNKU09OKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemU9IG9wdFBhcmFtc0pTT05bJ3BhZ2VTaXplJ107XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgUXVlcnkgUGFyYW1ldGVycyBhdCB0aGUgZW5kIG9mIHRoZSBVUkxcbiAgICAgICAgICAgICAgICBwYXJhbXMuc3BsaWNlKC0xKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gcGFyYW1zWzFdICYmIHBhcmFtc1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGhpcy5icm93c2VQYXRoID0gcGFyYW1zLnNwbGljZSgyKS5qb2luKCcvJyk7XG5cbiAgICAgICAgICAgIC8vIFNldCBwYWdpbmF0aW9uIG9wdGlvbnNcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbmVuYWJsZWRsZWFmID0gdGhpcy5wc2RhdGEuaGFzT3duUHJvcGVydHkodGhpcy5jb2xsZWN0aW9uKT8gdHJ1ZTogZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucHNkYXRhLmhhc093blByb3BlcnR5KHRoaXMuY29sbGVjdGlvbikgPyB0aGlzLnBzZGF0YVt0aGlzLmNvbGxlY3Rpb25dIDoge307XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZSA/IHRoaXMucGFnZVNpemUgOiB0aGlzLnBhZ2VTaXplT3B0aW9uc1swXTtcblxuXG4gICAgICAgICAgICBpZiAodGhpcy5oeWJyaWRjb2xsZWN0aW9uc1t0aGlzLmNvbGxlY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VQYXRoID0gdGhpcy5icm93c2VQYXRoID8gdGhpcy5icm93c2VQYXRoIDogdGhpcy5oeWJyaWRjb2xsZWN0aW9uc19icG1hcFt0aGlzLmNvbGxlY3Rpb25dO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHRoaXMuaHlicmlkY29sbGVjdGlvbnNfYmltYXBbdGhpcy5jb2xsZWN0aW9uXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc25pcHBldHMuaGVhZGVyID0gJ2Jyb3dzZS90ZW1wbGF0ZXMvY29sbGVjdGlvbl9oZWFkZXJzLycgKyB0aGlzLmNvbGxlY3Rpb24gKyAnX2hlYWRlci5odG1sJztcbiAgICAgICAgICAgIHRoaXMuc25pcHBldHMucmVzb3VyY2VzID0gJ2Jyb3dzZS90ZW1wbGF0ZXMvcmVsYXRlZF9yZXNvdXJjZXMvJyArIHRoaXMuY29sbGVjdGlvbiArICdfcmVsYXRlZF9yZXNvdXJjZXMuaHRtbCc7XG4gICAgICAgICAgICB0aGlzLl9zZXRDb2xsZWN0aW9uU3BlY2lmaWNTbmlwcGV0cygpO1xuICAgICAgICAgICAgJChcIiNub2RlT3BlcmF0b3JCdXR0b25JZFwiKS5hZmZpeCh7XG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJzogJ2ZpeGVkJ1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUucmVuZGVyVmlldy5jYWxsKHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBHb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICAgIC8vIGFkZHMgc2hhcmUgaWNvbnMgZHluYW1pY2FsbHkgc28gbWFya3VwIGlzbid0IGhhcmRjb2RlZCBvbiBpbmRpdmlkdWFsIGNvbGxlY3Rpb24gaGVhZGVyIGZpbGVzXG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcjSGVhZGVyU2hhcmVNZW51JykuaHRtbCh0aGlzLnNuaXBwZXQoJ2NvbGxlY3Rpb24taGVhZGVyLXNoYXJlJykpO1xuXG4gICAgICAgICAgICAvLyBjaGVja3MgaWYgYW55IG5vZGVzIGFyZSBvcGVuIG9uIHJlbmRlciwgYW5kIGlmIGl0IGlzIHRoZSBjb2xsYXBzZSBhbGwgYnV0dG9uIGlzIHZpc2libGVcbiAgICAgICAgICAgIGlmICh0aGlzLiQoJ2Rpdi5wYW5lbC1oZWFkaW5nW2RhdGEtbm9kZXN0YXR1cz1cIk9cIl0nKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kKCcjbm9kZU9wZXJhdG9yQnV0dG9uSWQnKS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoJCgnW2RhdGEtdG9nZ2xlPVwicG9wb3ZlclwiXScpICE9IG51bGwpe1xuICAgICAgICAgICAgICAgICQoJ1tkYXRhLXRvZ2dsZT1cInBvcG92ZXJcIl0nKS5wb3BvdmVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLnNoYXJlQ29udGVudC5jYWxsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcmNiOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLiQoJyNsb2FkZ3JhcGhpY292ZXJsYXknKSA/IHRoaXMuJCgnI2xvYWRncmFwaGljb3ZlcmxheScpLnJlbW92ZSgpIDogJCh0aGlzLnRhcmdldEFjY29yZGlvbkJvZHkgKyAnID4gICNsb2FkZ3JhcGhpY292ZXJsYXknKS5mYWRlT3V0KCkucmVtb3ZlKCk7XG4gICAgICAgICAgICB2YXIgZXJyb3JUZXh0ID0gdWlwcm9wcy5tZXNzYWdlcy5lcnJvclsnR0VORVJBTCddO1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZU1ldGFkYXRhWyd0YXJnZXRBcHBlbmRTZWxlY3RvciddLmxlbmd0aCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4Y2VlZGluZz1mYWxzZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBKU09OLnBhcnNlKGRhdGEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvci5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgZXhjZWVkaW5nID0gZXJyb3IgJiYgZXJyb3IuTUVTU0FHRSAmJiBlcnJvci5NRVNTQUdFID09IFwiRXJyb3IgcGFnZSBzaXplICsgb2Zmc2V0IG11c3QgYmUgbGVzcyB0aGFuIG1heG9mZnNldDogMTAwMDBcIjtcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihleGNlZWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlTWV0YWRhdGFbJ3RhcmdldEFwcGVuZFNlbGVjdG9yJ10uaHRtbCh0aGlzLnNuaXBwZXQoJ2V4Y2VlZGluZycsIHt9KSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVNZXRhZGF0YVsndGFyZ2V0QXBwZW5kU2VsZWN0b3InXS5odG1sKHRoaXMuc25pcHBldCgnZXJyb3Jub3RpZmljYXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yVGV4dDogZXJyb3JUZXh0IH0pKVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwodGhpcy5zbmlwcGV0KCdlcnJvcm5vdGlmaWNhdGlvbicsIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JUZXh0OiBlcnJvclRleHRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubm9kZU1ldGFkYXRhPXt9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24obm9kZURhdGEpIHtcbiAgICAgICAgICAgIHZhciBwdXNoVXJsID0gdGhpcy5ub2RlTWV0YWRhdGFbJ2hyZWYnXTtcbiAgICAgICAgICAgIHZhciBVUkxCcm93c2VQYXRoQXJyYXkgPSB0aGlzLmJyb3dzZVBhdGggPyB0aGlzLmJyb3dzZVBhdGguc3BsaXQoXCJfXCIpIDogW107XG4gICAgICAgICAgICB2YXIgVVJMQ29sbGVjdGlvbkNvZGVBcnJheSA9IHRoaXMuY29sbGVjdGlvbiA/IHRoaXMuY29sbGVjdGlvbi5zcGxpdChcIl9cIikgOiBbXTtcbiAgICAgICAgICAgIGlmICgkLnRyaW0odGhpcy5jb2xsZWN0aW9uLmluZGV4T2YoJ18nKSkgIT09IFwiLTFcIiAmJiAoVVJMQnJvd3NlUGF0aEFycmF5Lmxlbmd0aCA9PT0gVVJMQ29sbGVjdGlvbkNvZGVBcnJheS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQudHJpbSh0aGlzLmNvbGxlY3Rpb24uaW5kZXhPZih0aGlzLm5vZGVNZXRhZGF0YVsnbm9kZWNjJ10pKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJyb3dzZVBhdGhBcnJheSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IFVSTENvbGxlY3Rpb25Db2RlQXJyYXkubGVuZ3RoOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnRyaW0odGhpcy5ub2RlTWV0YWRhdGFbJ25vZGVjYyddKSA9PT0gJC50cmltKFVSTENvbGxlY3Rpb25Db2RlQXJyYXlbeF0udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VQYXRoQXJyYXlbeF0gPSB0aGlzLm5vZGVNZXRhZGF0YVsnbm9kZWJwJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZVBhdGhBcnJheVt4XSA9IFVSTEJyb3dzZVBhdGhBcnJheVt4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZVBhdGggPSBicm93c2VQYXRoQXJyYXkuam9pbignXycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oeWJyaWRjb2xsZWN0aW9uc19iaW1hcC5oYXNPd25Qcm9wZXJ0eSh0aGlzLmNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoVXJsID0gWycvJywgdGhpcy5oeWJyaWRjb2xsZWN0aW9uc19iaW1hcFt0aGlzLmNvbGxlY3Rpb25dLCAnLycsIHRoaXMuYnJvd3NlUGF0aF0uam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoVXJsID0gWycvJywgdGhpcy5jb2xsZWN0aW9uLCAnLycsIHRoaXMuYnJvd3NlUGF0aF0uam9pbignJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG9wdGlvbmFsUGFyYW1zID0ge307XG4gICAgICAvLyAgICAgIG9wdGlvbmFsUGFyYW1zLnNvcnQgPSB0aGlzLnNvcnQ7XG5cbiAgICAgICAgICAgIGlmKHRoaXMucGFnZVNpemUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25hbFBhcmFtcy5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICAgICAgICAgICAgb3B0aW9uYWxQYXJhbXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKG9wdGlvbmFsUGFyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHVzaFVybCA9IHB1c2hVcmwgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkob3B0aW9uYWxQYXJhbXMpKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAvLyAgIHRoaXMubm9kZU1ldGFkYXRhPXt9O1xuXG4gICAgICAgICAgICAvLyBkbyBub3QgcmVyZW5kZXIgdGhlIHdob2xlIHRoaW5nLi4uIHNpbmNlIHdlIGFyZSBkb2luZyB0aGlzIG1hbnVhbGx5XG4gICAgICAgICAgICB0aGlzLm9uSGFzaENoYW5nZUxvY2sgPSB0cnVlO1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKFwib2JqZWN0IG9yIHN0cmluZ1wiLCBcIlRpdGxlXCIsIGxvY2F0aW9uLm9yaWdpbiArIFwiL2FwcC9jb2xsZWN0aW9uXCIgKyBwdXNoVXJsKTtcbiAgICAgICAgICAgIHRoaXMub25IYXNoQ2hhbmdlTG9jayA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICB2b2x1bWVtb2RhbDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBtb2RhbFRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShcInRhcmdldFwiKTtcbiAgICAgICAgICAgICQobW9kYWxUYXJnZXQpLm1vZGFsKCdzaG93Jyk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgICB0b2dnbGVhY2NvcmRpb246IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgICAgIHZhciBub2RlRGF0YSA9IHRoaXMuZ2V0Tm9kZUF0dHJpYnV0ZXMoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ub2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5ub2RlTWV0YWRhdGE9bm9kZURhdGE7XG5cbiAgICAgICAgICAgIGlmIChub2RlRGF0YVsndGFyZ2V0J10uaGFzQ2xhc3MoJ25vdC1hbi1hY2NvcmRpb24nKSB8fCAkKG5vZGVEYXRhWyd0YXJnZXQnXSkuZGF0YShcInRvZ2dsZVwiKSA9PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZURhdGFbJ3RhcmdldCddLmhhc0NsYXNzKCdzcGEtaHJlZicpICYmICBub2RlRGF0YVsndGFyZ2V0J10uaGFzQ2xhc3MoJ21vZGFsLWNsb3NlJykgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIubW9kYWxcIikubW9kYWwoXCJoaWRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAkKCcubW9kYWwtYmFja2Ryb3AnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCJib2R5XCIpLnJlbW92ZUNsYXNzKFwibW9kYWwtb3BlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZURhdGFbJ3RhcmdldCddLnBhcmVudHMoJy5tb2RhbCcpLmxlbmd0aCB8fCBub2RlRGF0YVsndGFyZ2V0J10uaXMoXCIuYnRuXCIpIHx8IG5vZGVEYXRhWyd0YXJnZXQnXS5pcyhcImFcIikpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGVEYXRhWydleHBhbmRlZCddID09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgbm9kZURhdGFbJ2NUYXJnZXQnXS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGVEYXRhWydjVGFyZ2V0J10uYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlRGF0YVsnY1RhcmdldCddLmF0dHIoJ2RhdGEtb3BlbicpID09IFwib25cIikge1xuICAgICAgICAgICAgICAgIG5vZGVEYXRhWydjVGFyZ2V0J10uYXR0cignZGF0YS1vcGVuJywgJ29mZicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlRGF0YVsnY1RhcmdldCddLmF0dHIoJ2RhdGEtb3BlbicsICdvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZURhdGFbJ25vZGVTdGF0dXMnXSA9PT0gJ0MnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBub2RlRGF0YVsndGFyZ2V0QXBwZW5kU2VsZWN0b3InXS5odG1sKHRoaXMuc25pcHBldCgnbG9hZGluZ3NwaW5uZXInKSk7XG4gICAgICAgICAgICAgICAgbm9kZURhdGFbJ3RhcmdldEFjY29yZGlvblNlbGVjdG9yJ10uY29sbGFwc2UoJ3RvZ2dsZScpO1xuICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLl9kZWNvcmF0ZVVybCh0aGlzLndzQmFzZVVybCArIG5vZGVEYXRhWydocmVmJ10gKyBcIj9mZXRjaENoaWxkcmVuT25seT0xXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMucGFnaW5hdGlvbmVuYWJsZWRsZWFmKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHBhZ2Ugc2l6ZSBhbmQgb2Zmc2V0IHdoZW4gYWNjb3JkaW9uIG9wZW5lZFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplPXRoaXMucGFnZVNpemVPcHRpb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldD0nMCc7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArICcmb2Zmc2V0PTAmcGFnZVNpemU9JyArIHRoaXMucGFnZVNpemVPcHRpb25zWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdldEpTT04odXJsLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydCA9IFwiMVwiO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRIZWFkaW5ncyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZURhdGFbJ3RhcmdldEFwcGVuZFNlbGVjdG9yJ10uaHRtbCh0aGlzLnNuaXBwZXQoJ21hc3RlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9wcmVsb2FkRGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOiB0aGlzXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gLmRvbmUoKSBjYWxsYmFjayBhZGRzIHRoZSB0YWJpbmRleCB0byB0aGUgc29ydCBidXR0b24gYWZ0ZXIgYWpheCBjYWxsXG4gICAgICAgICAgICAgICAgLmJpbmQodGhpcyksIHRoaXMuZXJyb3JjYi5iaW5kKHRoaXMpKS5kb25lKFxuICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5hZGRUYWJJbmRleCgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBub2RlRGF0YVsnY3VycmVudFRhcmdldCddLmRhdGEoJ25vZGVzdGF0dXMnLCAnTycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkKCcjdG9nZ2xlJyArIG5vZGVEYXRhWydpZCddKS50b2dnbGVDbGFzcygnZmEtcGx1cy1jaXJjbGUnKS50b2dnbGVDbGFzcygnZmEtbWludXMtY2lyY2xlJyk7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrcyBpZiBhbnkgbm9kZXMgYXJlIGxlZnQgb3BlbiBvbiBwYWdlLCBhbmQgaWYgbm90IHRoZSBjb2xsYXBzZSBhbGwgYnV0dG9uIGRpc2FwcGVhcnNcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlR2xvYmFsQnV0dG9uU3RhdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgX2RlY29yYXRlVXJsOiBmdW5jdGlvbih1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnRsZWFmOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIG5vZGVBID0gdGhpcy5nZXROb2RlQXR0cmlidXRlcyhldmVudCk7XG4gICAgICAgICAgICB0aGlzLnNvcnQ9IG5vZGVBWyduZXdTb3J0J107XG4gICAgICAgICAgICB0aGlzLm5vZGVNZXRhZGF0YT1ub2RlQTtcbiAgICAgICAgICAgLy8gdGhpcy5wdXNoU3RhdGUoKTtcbiAgICAgICAgICAgIG5vZGVBWyd0YXJnZXRBcHBlbmRTZWxlY3RvciddLmh0bWwodGhpcy5zbmlwcGV0KCdsb2FkaW5nc3Bpbm5lcicpKTtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLl9kZWNvcmF0ZVVybCh0aGlzLndzQmFzZVVybCArICBub2RlQVsnaHJlZiddICsgXCI/ZmV0Y2hDaGlsZHJlbk9ubHk9MSZzb3J0RGlyZWN0aW9uPVwiICsgIG5vZGVBWyduZXdTb3J0J10pO1xuICAgICAgICAgICAgaWYodGhpcy5wYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiJnBhZ2VTaXplPVwiICsgdGhpcy5wYWdlU2l6ZSAgKyBcIiZvZmZzZXQ9XCIgKyB0aGlzLm9mZnNldCA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdEhlYWRpbmdzKGRhdGEpO1xuICAgICAgICAgICAgICAgIG5vZGVBWyd0YXJnZXRBcHBlbmRTZWxlY3RvciddLmh0bWwodGhpcy5zbmlwcGV0KCdtYXN0ZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIF9wcmVsb2FkRGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX3RoaXM6IHRoaXNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAuZG9uZSgpIGNhbGxiYWNrIGFkZHMgdGhlIHRhYmluZGV4IHRvIHRoZSBzb3J0IGJ1dHRvbiBhZnRlciBhamF4IGNhbGxcbiAgICAgICAgICAgIC5iaW5kKHRoaXMpLCB0aGlzLmVycm9yY2IuYmluZCh0aGlzKSkuZG9uZShcbiAgICAgICAgICAgICAgKCkgPT4gdGhpcy5hZGRUYWJJbmRleCgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldE5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgICAgICB2YXIgbm9kZUF0dHJpYnV0ZXM9IHt9XG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1sndGFyZ2V0J10gPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1snY1RhcmdldCddID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWydjdXJyZW50U29ydCddID0gbm9kZUF0dHJpYnV0ZXNbJ2NUYXJnZXQnXS5hdHRyKCdkYXRhLXNvcnQnKTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWyduZXdTb3J0J10gPSAobm9kZUF0dHJpYnV0ZXNbJ2N1cnJlbnRTb3J0J10gPT0gJzEnKSA/IFwiMFwiIDogXCIxXCI7XG4gICAgICAgICAgICB2YXIgcGFuZWxpZCA9IG5vZGVBdHRyaWJ1dGVzWyd0YXJnZXQnXS5jbG9zZXN0KFwiLnBhbmVsXCIpLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgICB2YXIgcGFuZWxoZWFkaW5nSWQgPSAnIycgKyBwYW5lbGlkLnNwbGl0KCdwYW5lbCcpWzFdO1xuXG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1snY3VycmVudFRhcmdldCddID0gJChwYW5lbGhlYWRpbmdJZCk7XG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1snbm9kZVN0YXR1cyddID0gbm9kZUF0dHJpYnV0ZXNbJ2N1cnJlbnRUYXJnZXQnXS5kYXRhKFwibm9kZXN0YXR1c1wiKTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWyd0YXJnZXRBY2NvcmRpb24nXSA9IG5vZGVBdHRyaWJ1dGVzWydjdXJyZW50VGFyZ2V0J10uZGF0YSgndGFyZ2V0Jyk7XG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1sndGFyZ2V0QWNjb3JkaW9uU2VsZWN0b3InXSA9ICQobm9kZUF0dHJpYnV0ZXNbJ3RhcmdldEFjY29yZGlvbiddKTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWydocmVmJ10gPSBub2RlQXR0cmlidXRlc1snY3VycmVudFRhcmdldCddLmRhdGEoXCJocmVmXCIpO1xuICAgICAgICAgICAgbm9kZUF0dHJpYnV0ZXNbJ2lkJ10gPSBub2RlQXR0cmlidXRlc1snY3VycmVudFRhcmdldCddLmF0dHIoXCJpZFwiKTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWyd0YXJnZXRBY2NvcmRpb25Cb2R5J10gPSBub2RlQXR0cmlidXRlc1sndGFyZ2V0QWNjb3JkaW9uJ10gKyAnID4gLnBhbmVsLWJvZHknO1xuICAgICAgICAgICAgbm9kZUF0dHJpYnV0ZXNbJ3RhcmdldEFwcGVuZFNlbGVjdG9yJ10gPSAkKG5vZGVBdHRyaWJ1dGVzWyd0YXJnZXRBY2NvcmRpb25Cb2R5J10pO1xuICAgICAgICAgICAgbm9kZUF0dHJpYnV0ZXNbJ25vZGVjYyddID0gbm9kZUF0dHJpYnV0ZXNbJ2N1cnJlbnRUYXJnZXQnXS5kYXRhKCdjb2xsZWN0aW9uY29kZScpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1snbm9kZWJwJ10gPSBub2RlQXR0cmlidXRlc1snY3VycmVudFRhcmdldCddLmRhdGEoJ2Jyb3dzZXBhdGhhbGlhcycpO1xuICAgICAgICAgICAgIC8vbm9kZUF0dHJpYnV0ZXNbJ3BhZ2VTaXplJ109ICQobm9kZUF0dHJpYnV0ZXNbJ3RhcmdldEFjY29yZGlvbkJvZHknXSArICcgI2l0ZW1zUGVyUGFnZScpLnZhbCgpO1xuICAgICAgICAgICAgbm9kZUF0dHJpYnV0ZXNbJ3BhZ2VTaXplJ109IG5vZGVBdHRyaWJ1dGVzWydjVGFyZ2V0J11bMF1bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWydvZmZzZXQnXT0gbm9kZUF0dHJpYnV0ZXNbJ2NUYXJnZXQnXS5hdHRyKCdkYXRhLXBhZ2UnKTtcbiAgICAgICAgICAgIG5vZGVBdHRyaWJ1dGVzWydleHBhbmRlZCddID0gbm9kZUF0dHJpYnV0ZXNbJ2NUYXJnZXQnXS5hdHRyKCdhcmlhLWV4cGFuZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZUF0dHJpYnV0ZXM7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBhZnRlclJlbmRlcjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgLy8gYWNjZXNzaWJpbGl0eSBmaXggcmVtb3ZlIHRoZVxuICAgICAgICAgICAgdGhpcy4kKCdkaXYucGFuZWwtYm9keSBwPnNwYW4nLCB0aGlzLiRlbCkuY29udGVudHMoKS51bndyYXAoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25QYWdpbmF0aW9uQnRuOiBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgICAgICB2YXIgbm9kZUEgPSB0aGlzLmdldE5vZGVBdHRyaWJ1dGVzKGV2ZW50KTtcbiAgICAgICAgICAgIGlmKG5vZGVBLmNUYXJnZXQuaGFzQ2xhc3MoXCJmdy1wYWdpbmF0aW9uLWJ0blwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0PW5vZGVBWydvZmZzZXQnXVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplPW5vZGVBWydwYWdlU2l6ZSddO1xuICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0PVwiMFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5vZGVNZXRhZGF0YT1ub2RlQTtcblxuICAgICAgICAgICAgbm9kZUFbJ3RhcmdldEFwcGVuZFNlbGVjdG9yJ10uaHRtbCh0aGlzLnNuaXBwZXQoJ2xvYWRpbmdzcGlubmVyJykpO1xuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMuX2RlY29yYXRlVXJsKHRoaXMud3NCYXNlVXJsICsgbm9kZUFbJ2hyZWYnXSArIFwiP2ZldGNoQ2hpbGRyZW5Pbmx5PTEmcGFnZVNpemU9XCIgKyB0aGlzLnBhZ2VTaXplICsgXCImb2Zmc2V0PVwiICsgdGhpcy5vZmZzZXQgKyBcIiZzb3J0RGlyZWN0aW9uPVwiICsgIG5vZGVBWyduZXdTb3J0J10pO1xuICAgICAgICAgICAgdGhpcy5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdEhlYWRpbmdzKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgbm9kZUFbJ3RhcmdldEFwcGVuZFNlbGVjdG9yJ10uaHRtbCh0aGlzLnNuaXBwZXQoJ21hc3RlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgX3ByZWxvYWREYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfdGhpczogdGhpc1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5iaW5kKHRoaXMpLCB0aGlzLmVycm9yY2IuYmluZCh0aGlzKSkuZG9uZShcbiAgICAgICAgICAgICAgKCkgPT4gdGhpcy5hZGRUYWJJbmRleCgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobm9kZUFbJ3RhcmdldEFjY29yZGlvblNlbGVjdG9yJ11bMF0ucGFyZW50Tm9kZS5pZCkuc2Nyb2xsSW50b1ZpZXcoKTtcblxuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVHbG9iYWxCdXR0b25TdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kKCdkaXYucGFuZWwtaGVhZGluZ1tkYXRhLW9wZW49XCJvblwiXScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcjbm9kZU9wZXJhdG9yQnV0dG9uSWQnKS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcjbm9kZU9wZXJhdG9yQnV0dG9uSWQnKS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkZFRhYkluZGV4OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKCdkaXYucGFuZWwtYm9keScpLmZpbmQoJy5jdXN0b20tc29ydC1vbicpLmF0dHIoe1xuICAgICAgICAgICAgJ3RhYmluZGV4JzogMCxcbiAgICAgICAgICAgICdocmVmJzogJ2phdmFzY3JpcHQ6OycsXG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6ICdzb3J0IHJlc3VsdHMgYWxwaGFiZXRpY2FsbHknXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgICBkb3dubG9hZFJlcG9ydDogZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHR2YXIgc2VsZWN0ZWRDb25ncmVzcyA9IHRoaXMuJChcIiNjb25ncmVzc1NlbGVjdFwiKS52YWwoKTtcblx0XHRcdFx0XHRjb25zdCBzcGlubmVySWNvbiA9IChidG4xLCBidG4yLCBidG4xaW5uZXIsIGJ0bjJpbm5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5hdHRyKCdpZCcpID09IGJ0bjEgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidG4xKS5pbm5lckhUTUwgPSBidG4xaW5uZXIgOiAoJChlLnRhcmdldCkuYXR0cignaWQnKSA9PSBidG4yID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnRuMikuaW5uZXJIVE1MID0gYnRuMmlubmVyIDonJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcyhcImRpc2FibGVkLXNoYWRvd1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxzIGJ1dHRvbiBidWlsZGVyXG4gICAgICAgICAgICAgICAgICAgIHNwaW5uZXJJY29uKCdkbF9jc3YnLCAnZGxfanNvbicsICc8aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpbiBmYS1sZ1wiPjwvaT4nLCAnPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW4gZmEtbGdcIj48L2k+Jyk7XG5cblx0XHRcdFx0XHRjb25zdCB4aHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0IHhodHRwLm9wZW4oXCJQT1NUXCIsJy93c3NlYXJjaC9icm93c2UvZG93bmxvYWRDTVJSZXBvcnQnICx0cnVlKTtcblx0XHRcdFx0XHQgeGh0dHAuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOFwiKTtcblx0XHRcdFx0XHQgeGh0dHAucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuXHRcdFx0XHQgIC8vICAgeGh0dHAuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvY3N2XCIpO1xuXHRcdFx0XHRcdCB4aHR0cC5zZW5kKEpTT04uc3RyaW5naWZ5KHsgXCJjb250ZW50VHlwZVwiOiBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5kb3dubG9hZHR5cGUsIFwiY29uZ3Jlc3NcIjogc2VsZWN0ZWRDb25ncmVzcywgXCJjb2xsZWN0aW9uQ29kZVwiOiBcIkNNUlwiLCBcInBhZ2VTaXplXCI6IFwiMTAwMFwiLCBcIm9mZnNldFwiOiBcIjBcIiB9KSk7XG5cblx0XHRcdFx0XHQgeGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdCBjb25zdCBibG9iID0geGh0dHAucmVzcG9uc2U7XG5cblx0XHRcdFx0XHRcdFx0ICBpZiAoeGh0dHAuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHZhciBjb250ZW50RGlzcG9zaXRpb24gPSB4aHR0cC5nZXRSZXNwb25zZUhlYWRlcihcImNvbnRlbnQtZGlzcG9zaXRpb25cIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGZpbGVOYW1lID0gY29udGVudERpc3Bvc2l0aW9uLnN1YnN0cmluZyhjb250ZW50RGlzcG9zaXRpb24uaW5kZXhPZihcIj1cIikrMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGZpbGVOYW1lID0gXCJ1bm5hbWVkLlwiICsgJ2pzb24nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIGlmICh4aHR0cC5yZWFkeVN0YXRlID09PSA0ICYmIHhodHRwLnN0YXR1cyA9PT0gMjAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGlmICh3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IobmV3IEJsb2IoW2Jsb2JdLCB7dHlwZTogY29udGVudFR5cGV9KSwgZmlsZU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IC8vIG1ha2VzIGJ1dHRvbiBjbGlja2FibGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICQoZS50YXJnZXQpLnJlbW92ZUNsYXNzKFwiZGlzYWJsZWQtc2hhZG93XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IC8vIGNoYW5nZXMgYnV0dG9uIGJhY2sgdG8gaW5pdGlhbCBzZXR0aW5nc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHNwaW5uZXJJY29uKCdkbF9jc3YnLCAnZGxfanNvbicsICdDU1YnLCAnSlNPTicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgLy8gVHJpY2sgZm9yIG1ha2luZyBkb3dubG9hZGFibGUgbGlua1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgYS5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgLy8gR2l2ZSBmaWxlbmFtZSB5b3Ugd2lzaCB0byBkb3dubG9hZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGEuZG93bmxvYWQgPSBmaWxlTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBhLmNsaWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgLy8gbWFrZXMgYnV0dG9uIGNsaWNrYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgJChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZC1zaGFkb3dcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgLy8gY2hhbmdlcyBidXR0b24gYmFjayB0byBpbml0aWFsIHNldHRpbmdzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgc3Bpbm5lckljb24oJ2RsX2NzdicsICdkbF9qc29uJywgJ0NTVicsICdKU09OJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH1cblxuXG5cdFx0XHRcdFx0XHQvKlx0IHZhciBmaWxlTmFtZSA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdCBpZiAoeGh0dHAuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHhodHRwLmdldFJlc3BvbnNlSGVhZGVyKFwiY29udGVudC1kaXNwb3NpdGlvblwiKTtcblx0XHRcdFx0XHRcdFx0XHRmaWxlTmFtZSA9IGNvbnRlbnREaXNwb3NpdGlvbi5zdWJzdHJpbmcoY29udGVudERpc3Bvc2l0aW9uLmluZGV4T2YoXCI9XCIpKzEpO1xuXHRcdFx0XHRcdFx0XHQgfSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRmaWxlTmFtZSA9IFwidW5uYW1lZC5cIiArICdqc29uJztcblx0XHRcdFx0XHRcdFx0IH0gKi9cblxuXG5cblx0XHRcdFx0ZS5zdG9wUHJvcG9nYXRpb247XG5cbiAgICAgICAgICAgICB9XG5cbiAgICB9KTtcbiAgICByZXR1cm4gQ29sbGVjdGlvblZpZXc7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=