(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{"./js/app/common/constants/uiprops.js":function(t,e,i){var n,o;n=[i("./node_modules/jquery/dist/jquery.js")],void 0===(o=function(t){return{devMode:"0",browseurl:"collection",searchresultsurl:"#search",committeebrowseurl:"browsecommittee",aboutlinks:{bills:"http://www.gpo.gov/help/index.html#about_congressional_bills.htm",fr:"http://www.gpo.gov/help/index.html#about_federal_register.htm",cpd:"http://www.gpo.gov/help/index.html#about_compilation_of_presidential_documents.htm",plaw:"http://www.gpo.gov/help/index.html#about_public_and_private_laws.htm",cdoc:"http://www.gpo.gov/help/index.html#about_congressional_documents.htm",chrg:"http://www.gpo.gov/help/index.html#about_congressional_hearings.htm",crpt:"http://www.gpo.gov/help/index.html#about_congressional_reports.htm",crec:"http://www.gpo.gov/help/index.html#about_congressional_record.htm",budget:"http://www.gpo.gov/help/index.html#about_budget_of_the_united_states_government.htm",cprt:"http://www.gpo.gov/help/index.html#about_congressional_committee_prints.htm",ccal:"http://www.gpo.gov/help/index.html#about_congressional_calendars.htm",czic:"http://www.gpo.gov/help/index.html#about_coastal_zone_information_center.htm",hob:"http://www.gpo.gov/help/index.html#about_history_of_bills.htm",econi:"http://www.gpo.gov/help/index.html#about_economic_indicators.htm",lsa:"http://www.gpo.gov/help/index.html#about_list_of_cfr_sections_affected.htm",cri:"http://www.gpo.gov/help/index.html#about_congressional_record_index.htm",govman:"http://www.gpo.gov/help/index.html#about_united_states_government_manual.htm",gaoreports:"http://www.gpo.gov/help/index.html#about_gao_reports_and_comptroller_general_decisions.htm",erp:"http://www.gpo.gov/help/index.html#about_economic_report_of_the_president.htm",crecb:"http://www.gpo.gov/help/index.html#about_congressional_record_bound_edition.htm",cdir:"http://www.gpo.gov/help/index.html#about_congressional_directory.htm",statute:"http://www.gpo.gov/help/index.html#about_united_states_statutes_at_large.htm",ppp:"http://www.gpo.gov/help/index.html#about_public_papers_of_the_presidents_of_the_united_states.htm",cfr:"http://www.gpo.gov/help/index.html#about_code_of_federal_regulations.htm",hprec:"http://www.gpo.gov/help/index.html#about_additional_government_publications.htm",uscode:"http://www.gpo.gov/help/index.html#about_united_states_code.htm",hman:"http://www.gpo.gov/help/index.html#about_house_rules_and_manual.htm",sman:"http://www.gpo.gov/help/index.html#about_senate_manual.htm",gpo:"http://www.gpo.gov/help/index.html#about_additional_government_publications.htm",eric:"http://www.gpo.gov/help/index.html#about_education_reports_from_eric.htm",pai:"http://www.gpo.gov/help/index.html#about_privacy_act_issuances.htm",hjournal:"http://www.gpo.gov/help/index.html#about_journal_of_the_house_of_representatives.htm",uscourts:"http://www.gpo.gov/fdsys/browse/collection.action?collectionCode=USCOURTS",sjournal:"http://www.gpo.gov/help/index.html#journal_of_seante.htm",cmr:"http://www.gpo.gov/help/index.html#journal_of_seante.htm"},messages:{error:{GENERAL:'<h2>Error occurred. The content you requested cannot be found.</h2><p>Please report this error to <a class="underlined-link" href="https://www.gpo.gov/error-pages/askgpo" target="_blank">askGPO.</a></p><p>Provide the following information to help us resolve this problem: the URL of the page or the content you were trying to access, the steps you followed to produce the error, specific search or browse terms, and/or a screenshot of the page where the error occurred.</p><p>Thank you for your patience.<p><p><a class="underlined-link" href="/">Homepage</a></p><p><a id="searchtipsId" href="/help/searching" class="underlined-link">Search Tips</a></p>',NO_SEARCH_RESULTS:"No Search Results. Refine the query and try again.",REQUEST_TIMED_OUT:"Request Timed Out...",SERVICE_EXCEPTION:"Error occured while processing this request ...",EXCEPTION_500:"Error occured while processing this request. Please check your input and try again."}},browse_messages:{browsenotimplemented:"Coming soon. Currently in development."},advanced_search_messages:{alert:{NO_COL_SELECTED:"No Collection selected: All Collections will be searched by default.",MAX_CRITERIA_REACH:"Maximum Search Criteria reached."}},content_detail:{selectedgranuleborder:"3px solid rgb(242,101,49)"},browse:{docresultstablehtml:'<table id="<%- collectionCode %>" class="table table-hover table-condensed">'},collectiondescription:{bills:"Congressional Bills",fr:"Federal Register",wcpd:"Compilation of Presidential Documents",dcpd:"Compilation of Presidential Documents",cpd:"Compilation of Presidential Documents",plaw:"Public and Private Laws",cdoc:"Congressional Documents",chrg:"Congressional Hearings",crpt:"Congressional Reports",crec:"Congressional Record",budget:"Budget of the United States Government",cprt:"Congressional Committee Prints",ccal:"Congressional Calendars",czic:"Coastal Zone Information Center",hob:"History of Bills",econi:"Economic Indicators",lsa:"List of CFR Sections Affected",cri:"Congressional Record Index",govman:"United States Government Manual",gaoreports:"GAO Reports and Comptroller General Decisions",erp:"Economic Report of the President",crecb:"Congressional Record (Bound Edition)",cdir:"Congressional Directory",statute:"United States Statutes at Large",ppp:"Public Papers of the Presidents of the United States",cfr:"Code of Federal Regulations (annual edition)",hprec:"House Precedents",uscode:"United States Code",hman:"House Rules and Manual",sman:"Senate Manual",gpo:"Additional Government Publications",eric:"Education Reports from ERIC",pai:"Privacy Act Issuances",hjournal:"House Journal",uscourts:"United States Courts Opinions",govpub:"Bulk Government Publications",serialset:"U.S. Serial Set",sjournal:"Journal of the Senate",cmr:"Congressionally Mandated Reports"},browsepagesizeoptions:{uscourts:["100","200","500"],bills:["20","50","100"],plaw:["20","50","100"],serialset:["100","200","500"],crpt:["100","200","500"],gpo:["50","100","200"]},docresultsmapping:{cdir:{SENATOR:"Senators",REPRESENTATIVE:"Representatives",DELEGATE:"Delegates",RESIDENTCOMMISSIONER:"Resident Commissioners"},fr:{RULE:"Rules and Regulations",CONTENTS:"Contents",CORRECT:"Corrections",NOTICE:"Notices",PRORULE:"Proposed Rules",PRESDOCU:"Presidential Documents",SUNSHINE:"Sunshine Act Meetings",AIDS:"READER AIDS"},erp:{FRONTMATTER:"Front Matter",TOC:"Table of Contents",OVERVIEW:"Overview",CHAPTER:"Chapters",APPENDIX:"Appendices",TABLE:"",OTHER:"Other"}},nodemapping:{statute:{PUBLICLAW:"Public Laws",PRIVATELAW:"Private Laws",HCONRES:"House Concurrent Resolutions",SCONRES:"Senate Concurrent Resolutions",PROCLAMATION:"Proclamations",CONSTAMEND:"Constitutional Amendments",REORGPLAN:"Reorganization Plans",OTHER:"Other Content",FRONTMATTER:"Front Matter (Cover & Lists)",BACKMATTER:"Back Matter (Indexes)"}},searchresults:{querytraillabel:'<h4 class="light-weight">Refined By:<%= ahref %></h4>'},browsebydate:{EMPTY_DATE:"Please enter the date field.",VALID_DATE:"Please enter a valid date.",BOTH_DATES:"Please enter both the date fields.",VALID_BTWN_DATE:"From date should be before To date.",EMPTY_TIMEFRAME:"Please select a time frame."},dicCollections:["statute","uscode","fr","cfr","crecb","uscourts","hob","ppp","cdir","budget","ccal","cprt","econi","eric","erp","wcpd","gpo","cdoc","hjournal","govpub"],pkglevelhidedic:["hob","cri","cmr"]}}.apply(e,n))||(t.exports=o)},"./js/app/govinfo.js":function(t,e,i){var n,o;function a(t){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}n=[i("./node_modules/jquery/dist/jquery.js"),t,i("./node_modules/underscore/underscore.js"),i("./node_modules/custom-backbone/backbone-min.js"),i("./node_modules/element-closest-polyfill/index.js"),i("./node_modules/text-loader/index.js!./js/app/common/templates/loadingspinner.html"),i("./node_modules/text-loader/index.js!./js/app/common/templates/blockingspinner.html"),i("./node_modules/text-loader/index.js!./js/app/common/templates/errornotificationpage.html"),i("./node_modules/text-loader/index.js!./js/app/common/templates/errornotificationsection.html")],void 0===(o=function(t,e,i,n,o,s,r,l){var h=function(t){location.pathname;for(var e=location.pathname.split("/"),i=0,n=e.length;i<n;i++)try{var o=new RegExp(d.apacheEscape,"g");e[i]=e[i].replace(o,"/"),e[i]=decodeURIComponent(e[i])}catch(t){}return""==e[0]&&e.splice(0,1),"app"==e[0]&&e.splice(0,1),t?e[t-1]:e},c=function(){return location.href};window.govinfo_last_hash=null,window.govinfo_hash=c(),window.govinfo_last_state=window.null,window.govinfo_state=h(),t(window).bind("hashchange",(function(t){window.govinfo_last_hash=window.govinfo_hash,window.govinfo_hash=c()}));var p=function(t,e){var i=(location.protocol+"//"+location.hostname+"/app/").length,n=location.href.substr(i);t=t.substr(i);if(e){var o=n;n=t,t=o}for(var a=n.split("/"),s=t.split("/"),r={},l=Math.max(a.length,s.length),h=0;h<l;h++)a[h]!=s[h]&&(r[h+1]=s[h]);return{diff:r,params:s}},d={_stateChangeCallbacks:[],_stateChangePaths:[],apacheEscape:"%C2%BC"},u=location.href;return function(t){var e=t.pushState,i=function(t){for(var e=0,i=d._stateChangeCallbacks.length;e<i;e++){for(var n=d._stateChangePaths[e],o=!0,a=0,s=n.length;a<s;a++)if(n[a]!=t.params[a]){o=!1;break}o&&d._stateChangeCallbacks[e](t.diff)}};t.pushState=function(n,o,a){var s=p(a);e.apply(t,arguments),i(s),u=a},window.onpopstate=function(t,e,n){var o=p(u,!0);i(o),u=location.href}}(window.history),d.BaseView=n.View.extend({template:null,useState:!0,isRendered:!1,BaseRequireObject:{templateCache:{},CACHE_TEMPLATES:!0,loadCompressed:function(t){for(var e=t.indexOf("fpacker1911begin"),i=t.indexOf("fpacker1911end"),n=t.substring(e+21,i-1).split(" "),o=0,a=0;a<n.length;a+=2)this.templateCache[n[a+1]]=t.substring(o,n[a]),o=n[a]}},getStateParameters:function(t){return h(t)},setStateParameter:function(t,e,i){var n={};n[t]=e,this.setStateParameters(n,i)},setStateParameters:function(t,e){var i=this.getStateParameters();if(0===o)throw"must provide level from 1 to infinitay";var n=1;for(var o in t){n<o&&(n=o);var a=encodeURIComponent(t[o]);a&&(a=a.replace(/%2F/g,d.apacheEscape)),i[o-1]=a}for(var s=0;s<n;s++)i[s]||(i[s]="");i=i.slice(0,n);var r=location.origin+"/app/"+i.join("/");location.href!=r&&(e?history.replaceState(t,"",r):history.pushState(t,"",r))},snippets:{},doNotKillDiv:!0,setOverlay:function(){if(this.__$temp=null,this.loadingTemplate&&this.BaseRequireObject.templateCache[this.loadingTemplate])this.__$temp=t(this.BaseRequireObject.templateCache[this.loadingTemplate]);else{if(this.overlayClass)return this.$("."+this.overlayClass).remove(),void this.$el.append('<div class="'+this.overlayClass+'"></div>');this.__$temp=t("<div>Validate Async In Progress (this.loadingTemplate == null)</div>")}this.__$children=this.$el.children(),this.__$children.detach(),this.$el.append(this.__$temp)},removeOverlay:function(){this.overlayClass?this.$("."+this.overlayClass).remove():(this.$el.append(this.__$children),this.__$temp.remove(),this.__$temp=null)},validateView:function(t,e){this.setOverlay(),this.validateAsync(function(e){this.removeOverlay(),t(e)}.bind(this),function(t){this.removeOverlay(),e(t)}.bind(this))},validateAsync:function(t,e){console.log("validateAsync is empty, override me"),t({})},_killChildren:function(){for(var t in this.viewsSack)this.viewsSack[t].destroy()},_terminateAllActiveXHRs:function(){if(this._xhrs){for(var t=0,e=this._xhrs.length;t<e;t++)this._xhrs[t].abort();this._xhrs=null}},_getParameters:function(t){var e=t,i=e.indexOf("#");i>=0&&(e=e.substr(i));for(var n=!0,o=0,a=e.length;o<a&&("&"!=e[o]&&"?"!=e[o]);o++)if("="==e[o]){n=!1;break}var s=null;n&&(s=e.substr(0,o),e=e.substr(o+1),"#"==s[0]&&(s=s.substr(1)));var r=e.split("&"),l={},h=0;for(a=r.length;h<a;h++)if(""!=r[h]){var c=r[h].split("=");l[c[0]]=c[1]}return s&&(l.root=s),l},_diff:function(t,e){var i={};for(var n in e)if(!t[n]||t[n]!=e[n])try{i[n]=decodeURI(e[n])}catch(t){i[n]=e[n]}for(var n in t)e[n]||(i[n]=null);return i},getAppBaseUrl:function(t){return t.substr(6)},getAppBaseUrlWOContext:function(t){return[window.location.protocol,"//",window.location.hostname,"/",t].join("")},initialize:function(e){this.viewsSack={},e||(e={}),this._options=e,this._parent=e._parent,this.onHashChange&&(t(window).on("hashchange."+this.cid,function(t){var e=t.originalEvent,i=window.govinfo_hash?window.govinfo_hash:e.newURL,n=window.govinfo_last_hash?window.govinfo_last_hash:e.oldURL,o=this._getParameters(i),a=this._getParameters(n),s=this._diff(a,o);this.onHashChange(s)}.bind(this)),this.useState&&(d._stateChangePaths.push(this.statePath||[]),d._stateChangeCallbacks.push(this.onHashChange.bind(this)))),i.bindAll(this,"render","destroy");var n=this;this.render=i.wrap(this.render,(function(t,e){return n._beforeRender(),t(e),n.afterRender(),n})),this.destroy=i.wrap(this.destroy,(function(t,e,i,o){return n._beforeDestroy(),t(e,i,o),n}))},_renderView:function(t,e){this._terminateAllActiveXHRs();var n=function(n,o){(e=e||{})._this=this,e._options=this._options,this._preloadData=o,e._preloadData=o,this.$el.html(i.template(n)(e)),this.render(),t&&t()}.bind(this);if(null!=this.template)if(this.BaseRequireObject.templateCache[this.template])this.preloadDataAsync(function(t){n(this.BaseRequireObject.templateCache[this.template],t)}.bind(this),function(t){var e=this.errorTemplate&&this.BaseRequireObject.templateCache[this.errorTemplate]?this.BaseRequireObject.templateCache[this.errorTemplate]:"ERROR in preloadDataAsync";n(e,t)}.bind(this));else{var o=function(t){this.BaseRequireObject.CACHE_TEMPLATES&&(this.BaseRequireObject.templateCache[this.template]=t),this.preloadDataAsync(function(e){n(t,e)}.bind(this),function(t){var e=this.errorTemplate&&this.BaseRequireObject.templateCache[this.errorTemplate]?this.BaseRequireObject.templateCache[this.errorTemplate]:"ERROR in preloadDataAsync";n(e,t)}.bind(this))}.bind(this);this.webpackhack({url:this.template,method:"GET",success:o,error:function(t){this.$el.html("template ["+this.template+"] failed to load.")}.bind(this)})}else this.preloadDataAsync(function(t){this.render()}.bind(this),function(){this.$el.html("ERROR in preloadDataAsync")}.bind(this)),t&&t()},render:function(){return this},afterRender:function(){this.isRendered=!0},_beforeRender:function(){},_beforeDestroy:function(){}}),d.BaseView.prototype.isJSON=function(e){var i=!1;try{i="object"===a(t.parseJSON(e))}catch(t){}return i},d.BaseView.prototype.apiURLval=function(e){var i=t(e),n="https://api.",o=".govinfo.gov/docs";switch(window.location.origin){case"https://www.int.govinfo.gov":case"https://curation.int.govinfo.gov":i.attr("href",n+"int"+o);break;case"https://www.qa.govinfo.gov":case"https://curation.qa.govinfo.gov":i.attr("href",n+"qa"+o);break;case"https://www.stage.govinfo.gov":case"https://curation.stage.govinfo.gov":i.attr("href",n+"stage"+o)}},d.BaseView.prototype.dcmiHead=function(e){t("meta[name^='dc.']").remove(),document.getElementsByTagName("head")[0].setAttribute("profile","http://dublincore.org/documents/2008/08/04/dc-html/");var i,n,o=e.dcMD,a=e.metadata.columnnamevalueset.filter((function(t){return"Summary"===t.colname}))[0];i=void 0!==a?a.colvalue:"Official Publications from the U.S. Government Publishing Office.",t("meta[property='og:description']").attr("content",i),t("meta[name='twitter:description']").attr("content",i),n=void 0===o.governmentAuthors[1]?o.governmentAuthors[0]:o.governmentAuthors[1]+", "+o.governmentAuthors[0];var s=[{name:"dc.title",content:e.title},{name:"dc.abstract",content:i},{name:"dc.creator",content:n},{name:"dc.date",content:o.dateIssued},{name:"dc.language",content:o.language},{name:"dc.identifier",content:document.location.href},{name:"dc.publisher",content:o.publisher},{name:"dc.type",content:"Government"},{name:"dc.source",content:"govinfo.gov"},{name:"dc.format",content:"text/html"}];s.reverse(),s.forEach((function(e){var i=document.createElement("meta");i.setAttribute("name",e.name),i.setAttribute("content",e.content),t("meta[name='author']").after(i)}))},d.BaseView.prototype.shareContent=function(e){var i=encodeURIComponent(document.URL),n=document.URL,o=document.title.split(" | ").shift();window.location.protocol,window.location.host;void 0!==this.$el&&($heading=this.$el.find(t("h1.page-title")).html()+" | GovInfo"),-1!==n.indexOf("/app/search")||-1!==n.indexOf("/app/browse")||-1!==n.indexOf("/app/details")||-1!==n.indexOf("/app/cfrparts")?($title=document.title,$plainTitle=o):-1!==n.indexOf("/app/frtoc")?($title=e+" | GovInfo",$plainTitle=e):"undefined | GovInfo"==$heading?($title=document.title,$plainTitle=o):(document.title=$heading,$title=$heading,$plainTitle=$heading.split(" | ").shift()),t('meta[property="og:title"]').attr("content",$plainTitle),t('meta[property="og:url"]').attr("content",i),t('meta[name="twitter:title"]').attr("content",$plainTitle),t('meta[name="twitter:url"]').attr("content",i),t("a#facebook-share").attr("href","https://www.facebook.com/sharer.php?u="+n),t("a#twitter-share").attr("href","https://twitter.com/intent/tweet?text="+encodeURIComponent($plainTitle)+"&url="+i),t("a#email-share").attr("href","mailto:?subject="+$title+"&body="+i),t("a#email-share-search").attr("href","mailto:?subject="+$title+"&body="+i),t(".header__share-icons a, .search__share-icons a").click((function(){t("a#facebook-share").removeAttr("href").attr("href","https://www.facebook.com/sharer.php?u="+document.URL),t("a#twitter-share").removeAttr("href").attr("href","https://twitter.com/intent/tweet?text="+encodeURIComponent(document.title.split(" | ").shift())+"&url="+encodeURIComponent(document.URL)),t("a#email-share").removeAttr("href").attr("href","mailto:?subject="+document.title+"&body="+encodeURIComponent(document.URL))}))},d.BaseView.prototype.imgModalData=function(){var e=$currentTarget[0].getAttribute("data-href"),i=$currentTarget[0].getAttribute("data-title"),n=$currentTarget[0].getAttribute("data-origin");t("#imgPreview-desc").html(i),t("#imgPreview-thumb").attr("src",e),t("#imgPreview-thumblink").attr("href",e),t("#imgPreview-origin").attr("href",n)},d.BaseView.prototype.shareModalData=function(){var e=$currentTarget.attr("addthis:title"),i=encodeURIComponent($currentTarget.attr("addthis:url")),n=$currentTarget.attr("addthis:url"),o=window.location.protocol+"//"+window.location.host;t(this).empty(),t("#share-modal__title").html("<p>"+e+"</p>"),t("a#share-modal__inner--fb").attr("href","https://www.facebook.com/sharer.php?u="+o+i),t("a#share-modal__inner--twitter").attr("href","https://twitter.com/intent/tweet?url="+o+i+"&text="+encodeURIComponent(e)),t("a#share-modal__inner--email").attr("href","mailto:?subject="+e+"&body="+o+i),t("a#share-modal__inner--copy").attr("copy:url",o+n)},d.BaseView.prototype.copyShareUrl=function(e,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Link Copied";$currentLinkTarget=t(e.target);var o=function(e,i){var n=t("<input id='ghost'>");if(t(i).prepend(n),n.attr("value",e),navigator.userAgent.match(/ipad|iphone/i)){var o=n.get(0),a=o.contentEditable,s=o.readOnly;o.contentEditable="true",o.readOnly="false";var r=document.createRange();r.selectNodeContents(o);var l=window.getSelection();l.removeAllRanges(),l.addRange(r),o.setSelectionRange(0,999999),o.contentEditable=a,o.readOnly=s}else n.val(e).select();document.execCommand("copy"),n.remove()},a=$currentLinkTarget[0].classList.contains("copyBtn"),s="collection-link-share"==$currentLinkTarget[0].id,r="<span class='link-copy-alert'>".concat(n,"</span>");function l(){t(this).remove()}s||"collection-link-share"==$currentLinkTarget[0].parentElement.id?(o(location.href,"#homeheaderId"),t("<span class='link-copy-alert'>Link Copied</span>").prependTo("body")):a?(o(i,"body"),t(r).prependTo(".copy-container")):(o(t("#share-modal__inner--copy").attr("copy:url"),".share-modal__inner"),t(".share-modal__inner h2").before("<span class='link-copy-alert--modal'>Link Copied</span>")),$currentLinkTarget.focus();var h=[".link-copy-alert--modal",".link-copy-alert"];h.forEach((function(e){t(e).delay(800).fadeOut(1200,"linear",l)}))},d.BaseView.prototype.getJSON=function(e,i,n,o,a,s){this._xhrs||(this._xhrs=[]);var r={headers:{Accept:"application/json, text/javascript, */*; q=0.01"},cache:!0,contentType:"application/json",type:a||"GET",processData:!1,url:e,success:i,error:n};o&&(r.type=a||"POST",r.data=JSON.stringify(o),r.dataType="json",delete r.processData),s&&(r.headers=s&&s.headers?s.headers:r.headers),s&&s.timeout&&(r.timeout=s.timeout);var l=t.ajax(r);return this._xhrs.push(l),l},d.BaseView.prototype.postJSON=function(t,e,i,n,o,a){this.getJSON(t,e,i,n,o,a)},d.BaseView.prototype.errorTemplate=null,d.BaseView.prototype.loadingTemplate=null,d.BaseView.prototype.getParameter=function(t){if(this.useState)return this.getStateParameters(t);for(var e=this.useHash?location.hash:location.search,i=!0,n=0,o=e.length;n<o&&("&"!=e[n]&&"?"!=e[n]);n++)if("="==e[n]){i=!1;break}if(i){if("root"==t){var a=e.substr(0,n);return"#"==a[0]?a.substr(1):a}e=e.substr(n+1)}var s=e.split("&"),r=0;for(o=s.length;r<o;r++){var l=s[r].split("=");if(l[0]==t)try{return decodeURIComponent(l[1])}catch(t){return l[1]}}return null},d.BaseView.prototype.setParameter=function(t,e,i){var n={};n[t]=e,this.setParameters(n,i)},d.BaseView.prototype.setParameters=function(t,e){if(this.useState)this.setStateParameters(t,e);else{var i=location.hash;for(var n in t)i=this._getNewHash(i,n,t[n]);e?history.replaceState(null,null,i):location.hash=i}},d.BaseView.prototype._getNewHash=function(t,e,i){i&&(i=encodeURI(i));for(var n=!0,o=0,a=t.length;o<a&&("&"!=t[o]&&"?"!=t[o]);o++)if("="==t[o]){n=!1;break}var s="";if(n&&(s=t.substr(0,o+1),t=t.substr(o+1)),"root"==e){var r="#"+i;return t&&""!=t&&(r+="?"+t),r}var l=t.split("&");""==l[0]&&(l=[]);var h=!1,c=0;for(a=l.length;c<a;c++){if(l[c].split("=")[0]==e){l[c]=i?e+"="+i:"",h=!0;break}}!h&&i&&l.push(e+"="+i);var p=[];for(c=0,a=l.length;c<a;c++)l[c]&&p.push(l[c]);r=s;p.length>0&&(r+=(r&&r.length>0&&("?"==r[r.length-1]||"&"==r[r.length-1])?"":"?")+p.join("&"));return r},d.BaseView.prototype.destroy=function(){this._terminateAllActiveXHRs(),this._killChildren(),this.onHashChange&&t(window).off("hashchange."+this.cid),this.undelegateEvents(),this._parent&&this._parent.viewsSack[this.cid]&&delete this._parent.viewsSack[this.cid],this.$el.removeData().unbind(),this.doNotKillDiv?(this.$el.empty(),this.stopListening()):this.remove(),this.trigger("destroy",this)},d.BaseView.prototype.webpackhack=function(t){var e=window.isDev?"/js/app/":"/app/dynamic/js/app/";return this.getJSON(e+t.url,t.success,t.error)},d.BaseView.prototype.renderView=function(t,e){this._loadSnippets(function(){this.loadingMessage?(this.$el.html(this.loadingMessage),this._renderView(t,e)):this.overlayClass?(this.$("."+this.overlayClass).remove(),this.$el.append('<div class="'+this.overlayClass+'"></div>'),this._renderView(t,e)):this.loadingTemplate?this.BaseRequireObject.templateCache[this.loadingTemplate]?(this.$el.html(this.BaseRequireObject.templateCache[this.loadingTemplate]),this._renderView(t,e)):(this.$el.html(""),this.webpackhack({url:this.loadingTemplate,method:"GET",cache:this.BaseRequireObject.CACHE_TEMPLATES,success:function(i){this.BaseRequireObject.templateCache[this.loadingTemplate]=i,this._renderView(t,e)}.bind(this),error:function(i){this.BaseRequireObject.templateCache[this.loadingTemplate]="Loading Template ["+this.loadingTemplate+"] failed to load.",this._renderView(t,e)}.bind(this)})):this._renderView(t,e)}.bind(this))},d.BaseView.prototype.snippet=function(t,e){var n=this.snippets[t];if(n)return i.template(this.BaseRequireObject.templateCache[n])(i.extend({_this:this},e));throw"error: snippet "+t+" is not declared in the prototype."},d.BaseView.prototype._loadSnippets=function(t){this.errorTemplate&&(this.snippets.__errorTemplate=this.errorTemplate);var e=i.keys(this.snippets).length;if(0!=e){var n=function(){--e<=0&&t()};for(var o in this.snippets){var a=this.snippets[o];if(this.BaseRequireObject.templateCache[a])n();else this.webpackhack({url:a,method:"GET",cache:this.BaseRequireObject.CACHE_TEMPLATES,success:function(t,e,i,o){this.BaseRequireObject.templateCache[i.dirtyClosureHack]=t,n()}.bind(this),error:function(t,e,i,o){this.BaseRequireObject.templateCache[t.dirtyClosureHack]="Loading Template ["+t.dirtyClosureHack+"] failed to load.",n()}.bind(this)}).dirtyClosureHack=a}}else t()},d.BaseView.prototype.instantiate=function(t,e){(e=e||{})._parent=this;var i=new t(e);return this.viewsSack[i.cid]=i,i},d.BaseView.prototype.getParent=function(){return this._parent},d.BaseView.prototype.getChildren=function(){return this.viewsSack},d.BaseView.prototype.preloadDataAsync=function(t,e){t({})},d.TabView=d.BaseView.extend({Constructors:{},initialize:function(t){d.BaseView.prototype.initialize.call(this,t),this._tabMap={}},refresh:function(){this._killChildren(),this._tabMap={},this.renderView()},events:function(){var t={};return t['click .fw-tab-toggle[data-cid="'+this.cid+'"]']=this._tabChange,t},onHashChange:function(t){this.persistBy&&t.hasOwnProperty(this.persistBy)&&(this._change(t[this.persistBy]),this.trigger("tab",t[this.persistBy]))},_tabChange:function(e){var i=t(e.currentTarget)[0].id;if(this.persistBy){var n={};n[this.persistBy]=i,this.setParameters(n,this.doNotleaveHistoryTrail)}this._change(i),this.trigger("tab",i)},_change:function(e){if(null==e){var i=this.$('.fw-tab-toggle[data-cid="'+this.cid+'"]');if(0==i.length)throw"malformed markup, no .fw-tab-toggle found. Please refer to API";e=i[0].id;for(var n=0,o=i.length;n<o;n++)t(i[n]).hasClass("fw-tab-default")&&(e=i[n].id)}var a=this.$('.fw-tab-toggle[data-cid="'+this.cid+'"]#'+e),s=a.data("viewconstructor"),r=this.$('.fw-tab-content[data-cid="'+this.cid+'"][data-id="'+e+'"]'),l=this.$('.fw-tab-content[data-cid="'+this.cid+'"][data-for="'+e+'"]');if(0==r.length){if(this.handlePageDoesNotExist)return void this.handlePageDoesNotExist();throw"corresponding div does not exist for id "+e}if(this.$('.fw-tab-toggle[data-cid="'+this.cid+'"]').removeClass("active"),a.addClass("active"),-1===location.pathname.indexOf("/app/details")&&(t("meta[name^='dc.']").remove(),document.getElementsByTagName("head")[0].removeAttribute("profile")),this.$('.fw-tab-content[data-cid="'+this.cid+'"]').hide(),r.show(),l.show(),!this._tabMap[e]){this.destroyViewsOnExit&&(this._killChildren(),this._tabMap={}),this._tabMap[e]=!0;var h=null;if(s&&window[s])h=window[s];else{if(!s||!this.Constructors[s])throw"constructor "+s+" does not exist";h=this.Constructors[s]}this["content_"+e]=this.instantiate(h,{}),this["content_"+e].setElement(r).renderView(),this.listenTo(this["content_"+e],"destroy",function(){delete this._tabMap[e]}.bind(this))}},render:function(){this._killChildren(),this._tabMap={},this.$(".fw-tab-content").attr("data-cid",this.cid),this.$(".fw-tab-toggle").attr("data-cid",this.cid),this.$('.fw-tab-content[data-cid="'+this.cid+'"]').hide(),this.persistBy&&this.getParameter(this.persistBy)?this.setTabById(this.getParameter(this.persistBy),!0):this._change(null)}}),d.TabView.prototype.setTabByIndex=function(t){this.$(this.$(".fw-tab-toggle")[t]).click()},d.TabView.prototype.setTabById=function(t,e){e?(this._change(t),this.trigger("tab",t)):this.$(".fw-tab-toggle#"+t).click()},d.AbstractConstraintModel=n.View.extend({type:"GET",initialize:function(){this.constraints={}},getJSONString:function(){return JSON.stringify(this.constraints)},setFromJSONString:function(t){this.constraints=JSON.parse(t)},mergeConstraints:function(t,e){for(var n in e){var o=e[n];"number"==typeof o||"string"==typeof o||"boolean"==typeof o?t[n]=o:o instanceof Array?t[n]?t[n]=i.union(t[n],o):t[n]=o:t[n]?t[n]=i.extend(t[n],o):t[n]=o}return t}}),d.PostConstraintModel=d.AbstractConstraintModel.extend({type:"POST"}),d.PostConstraintModel.prototype.getBody=function(){throw"must override getBody"},d.AbstractConstraintModel.prototype.union=function(t){var e=new this.constructor;return e.constraints=this.mergeConstraints(e.constraints,this.constraints),e.constraints=this.mergeConstraints(e.constraints,t.constraints),e},d.AbstractConstraintModel.prototype.setField=function(t,e){this.constraints[t]=e,null===e&&delete this.constraints[t]},d.AbstractConstraintModel.prototype.getField=function(t){return this.constraints[t]},d.AbstractConstraintModel.prototype.getUrl=function(){return"override me, refer to API for more help"},d.AbstractConstraintModel.prototype.defaultPageNumber=0,d.AbstractConstraintModel.prototype.defaultPageSize=10,d.AbstractConstraintModel.prototype.getPageNumber=function(){var t=this.getField("pageNumber");return void 0===t?this.defaultPageNumber:t},d.AbstractConstraintModel.prototype.getPageSize=function(){var t=this.getField("pageSize");return void 0===t?this.defaultPageSize:t},d.AbstractConstraintModel.prototype.setPageNumber=function(t){this.setField("pageNumber",t)},d.AbstractConstraintModel.prototype.setPageSize=function(t){this.setField("pageSize",t)},d.RestSource=d.BaseView.extend({dataType:"json",url:null,initialize:function(t){if(t=t||{},d.BaseView.prototype.initialize.call(this,t),t.persistBy&&(this.persistBy=t.persistBy),t.url&&(this.url=t.url),t.ConstraintModelPrototype&&(this.ConstraintModelPrototype=t.ConstraintModelPrototype),t.parseAsync&&(this.parseAsync=t.parseAsync),this.constraintModel=new this.ConstraintModelPrototype,this.constraintPanels={},this.callbackQueues={},this.errorCallbackQueues={},this.cache={},this.countcache={},this._loading={},this.noCache=!1,!this.url)throw"this.url must be defined";t.initialConstraintModel&&this.setConstraintModel(t.initialConstraintModel)},subscribe:function(t){t.useState=this.useState,this.constraintPanels[t.cid]=t,t instanceof d.ScrollPaginationPanel&&(this._contineous=!0),this.listenTo(t,"constraint:append",function(e){this.onConstraintAppend(e,t,!1)}.bind(this)),this.listenTo(t,"constraint:replace",function(e){this.onConstraintAppend(e,t,!0)}.bind(this)),this.listenTo(t,"constraint:change",function(e){this.onConstraintChange(t)}.bind(this))},onConstraintChange:function(t){var e=new this.ConstraintModelPrototype;for(var i in this.constraintPanels)e=e.union(this.constraintPanels[i].getConstraintModel());t instanceof d.PaginationPanel||(e.setPageNumber(null),this._cwrapperdata=null),this.setConstraintModel(e)},onConstraintAppend:function(t,e,i){var n=null;n=i?t:(n=this.getConstraintModel()).union(t),e instanceof d.PaginationPanel||(n.setPageNumber(null),this._cwrapperdata=null),this.setConstraintModel(n)},unsubscribe:function(t){delete this.constraintPanels[t.cid]},clearCache:function(){this.cache={}},_triggerChange:function(){this.getConstraintModel().getPageNumber()||(this._cwrapperdata=null),this.trigger("source:change")},onHashChange:function(t){this.persistBy&&t.hasOwnProperty(this.persistBy)&&this._triggerChange()},setConstraintModel:function(t){this.persistBy?this.setParameter(this.persistBy,t.getJSONString()):(this.cmStr=t.getJSONString(),this._triggerChange())},getCount:function(){return this.count},getAllUrl:function(t){return this.url+t},getAll:function(e,i,n){var o="";this.constraintModel=this.getConstraintModel(),this.constraintModel&&(o="?"+this.constraintModel.getUrl());var a=this.getAllUrl(o);if(this.countcache.hasOwnProperty(a)&&(this.count=this.countcache[a]),null==this.cache[a]||this._lastPayload&&this._lastPayload!=this.payload){if(this._loading[a])return this.callbackQueues[a]||(this.callbackQueues[a]=[]),this.callbackQueues[a].push(i),this.errorCallbackQueues[a]||(this.errorCallbackQueues[a]=[]),void(n&&this.errorCallbackQueues[a].push(n));this._loading[a]=!0,this.callbackQueues[a]=[],this.errorCallbackQueues[a]=[],this.callbackQueues[a].push(i),n&&this.errorCallbackQueues[a].push(n),this._xhr&&(this._xhr.url!=a&&(this.callbackQueues[a]=this.callbackQueues[this._xhr.url].concat(this.callbackQueues[a]),delete this.callbackQueues[this._xhr.url],this.errorCallbackQueues[a]=this.errorCallbackQueues[this._xhr.url].concat(this.errorCallbackQueues[a]),delete this.errorCallbackQueues[this._xhr.url]),this._xhr.abort()),this._xhr=t.ajax({headers:{Accept:"application/json"},cache:!1,contentType:"application/json",type:this.constraintModel&&"POST"==this.constraintModel.type?"POST":"GET",processData:!1,url:this.constraintModel&&"POST"==this.constraintModel.type?a.substr(0,a.indexOf("?")):a,dataType:this.dataType,data:this.constraintModel&&"POST"==this.constraintModel.type?JSON.stringify(this.constraintModel.getBody()):this.payload,success:function(t){var e=function(t){this._loading[a]=!1,this._contineous&&(this._cwrapperdata||(this._cwrapperdata=[]),this._cwrapperdata=this._cwrapperdata.concat(t),t=this._cwrapperdata),this._lastPayload=this.payload,this.noCache||(this.cache[a]=t,this.countcache[a]=this.count);for(var e=0,i=this.callbackQueues[a].length;e<i;e++)this.callbackQueues[a][e](t);this.callbackQueues[a]=[]}.bind(this);this.parseAsync(t,function(t){e(t)}.bind(this))}.bind(this),error:function(t){if(this._loading[a]=!1,"abort"!=t.statusText){for(var e=0,i=this.errorCallbackQueues[a].length;e<i;e++)this.errorCallbackQueues[a][e](t);this.errorCallbackQueues[a]=[]}}.bind(this)}),this._xhr.url=a}else this._xhr.abort(),i(this.cache[a])},refresh:function(){this.cache={},this.trigger("source:change")}}),d.RestSource.prototype.getConstraintModel=function(){var t=null;if(this.persistBy)t=this.getParameter(this.persistBy);else t=this.cmStr;if(t){var e=new this.ConstraintModelPrototype;return e.setFromJSONString(t),e}return new this.ConstraintModelPrototype},d.RestSource.prototype.ConstraintModelPrototype=d.AbstractConstraintModel,d.RestSource.prototype.get=function(t,e){this.getAll(null,t,e)},d.RestSource.prototype.setCount=function(t){this.count=t},d.RestSource.prototype.getCount=function(){return this.count},d.RestSource.prototype.parseAsync=function(t,e){e(t)},d.AbstractConstraintPanel=d.BaseView.extend({initialize:function(t){d.BaseView.prototype.initialize.call(this,t),this.setSource(t.source)},setSource:function(t){t&&this.source!=t&&(this.source&&(this.source.unsubscribe(this),this.stopListening(this.source,"source:change",this.renderView)),this.source=t,this.source.subscribe(this),this.listenTo(this.source,"source:change",this.renderView))},destroy:function(){this.source.unsubscribe(this),d.BaseView.prototype.destroy.call(this)}}),d.AbstractConstraintPanel.prototype.preloadDataAsync=function(t){this.source;t(this.source.getConstraintModel())},d.AbstractConstraintPanel.prototype.getConstraintModel=function(){return new this.source.ConstraintModelPrototype},d.AbstractConstraintPanel.prototype.getSource=function(){return this.source},d.AbstractConstraintPanel.prototype.onConstraintChange=function(){this.trigger("constraintPanel:changed",this)},d.PaginationPanel=d.AbstractConstraintPanel.extend({middleEntries:4,edgeEntries:2,events:{"click .fw-pagination-btn":"onPaginationBtn","change .fw-pagination-items-per-page":"onPaginationBtn"},initialize:function(t){d.AbstractConstraintPanel.prototype.initialize.call(this,t)},getInterval:function(t,e){var i=Math.ceil(this.middleEntries/2),n=e-this.middleEntries;return[t>i?Math.max(Math.min(t-i,n),0):0,t>i?Math.min(t+i,e):Math.min(this.middleEntries,e)]},getConstraintModel:function(){var t=new this.source.ConstraintModelPrototype,e=this.$(".fw-selected").data("page");return t.setPageNumber(e),this.getPageSize&&t.setPageSize(this.getPageSize()),t},onPaginationBtn:function(e){var i=t(e.currentTarget);this.$(".fw-selected").removeClass("fw-selected"),i.addClass("fw-selected"),this.trigger("constraint:append",this.getConstraintModel())},render:function(){this.$('.fw-pagination-btn[data-page="'+this._preloadData.pageNumber+'"]').addClass("fw-selected")},reset:function(){}}),d.PaginationPanel.prototype.preloadDataAsync=function(t,e){this.source.get(function(){var e=this.source.getConstraintModel(),i={};i.pageSize=e.getPageSize(),i.pageNumber=e.getPageNumber(),i.count=this.source.count,i.count=i.count>1e4?1e4:i.count,i.totalPages=Math.ceil(i.count/i.pageSize);var n=this.getInterval(i.pageNumber,i.totalPages),o=!1,a=[],s=this.edgeEntries;this.edgeEntries>=n[0]&&(o=!0,s=n[1]);for(var r=0,l=s;r<l;r++)a.push(r);var h=[],c=i.totalPages-this.edgeEntries,p=c;c<=n[1]&&(o=!0,p=n[0]);for(r=p,l=i.totalPages;r<l;r++)h.push(r);var d=[];if(a[a.length-1]>=h[0]){a=[],h=[];for(r=0,l=i.totalPages;r<l;r++)d.push(r)}else if(!o)for(r=n[0],l=n[1];r<l;r++)d.push(r);i.left=a,i.right=h,i.middle=d,i.hasNext=i.pageNumber<i.totalPages-1,i.next=i.pageNumber+1,i.hasPrevious=i.pageNumber>0,i.hasNext||i.hasPrevious||(i.left=i.right=i.middle=[]),i.previous=i.pageNumber-1,i.beginStr=i.pageNumber*i.pageSize+1,i.endStr=i.beginStr+i.pageSize-1,i.endStr=i.endStr>i.count?i.count:i.endStr,t(i)}.bind(this),e)},d.ScrollPaginationPanel=d.PaginationPanel.extend({}),d}.apply(e,n))||(t.exports=o)},"./node_modules/text-loader/index.js!./js/app/common/templates/blockingspinner.html":function(t,e){t.exports='<div class="blocking-wrapper" id="blocking-wrapper">\n\t<div class="blocking-content">\n\t\t<div class="vertical-center-wrapper">\n\t\t\t<div class="vertical-center">\n\t\t\t\t<div id="blocking-text">\n\t\t\t\t\t<i class="fa fa-spinner fa-spin fa-lg"></i>\n\t\t\t\t\t<p class="small">Loading...</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'},"./node_modules/text-loader/index.js!./js/app/common/templates/errornotificationpage.html":function(t,e){t.exports="\x3c!--Page Error Message with Side Bar--\x3e\n <div class=\"alert alert-info\"><%= (typeof _preloadData !== 'undefined' && _preloadData && _preloadData.errorText) || errorText %></div>\n"},"./node_modules/text-loader/index.js!./js/app/common/templates/errornotificationsection.html":function(t,e){t.exports='\x3c!--Section Error Message--\x3e\n <div class="alert alert-info"><%= errorText %></div>\n'},"./node_modules/text-loader/index.js!./js/app/common/templates/loadingspinner.html":function(t,e){t.exports='<div id="loadgraphicoverlay">\n\t<p>\n\t\t<i class="fa fa-spinner fa-spin"></i> Loading...\n\t</p>\n\n</div>\n'}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9qcy9hcHAvY29tbW9uL2NvbnN0YW50cy91aXByb3BzLmpzIiwid2VicGFjazovLy8uL2pzL2FwcC9nb3ZpbmZvLmpzIiwid2VicGFjazovLy8uL2pzL2FwcC9jb21tb24vdGVtcGxhdGVzL2Jsb2NraW5nc3Bpbm5lci5odG1sIiwid2VicGFjazovLy8uL2pzL2FwcC9jb21tb24vdGVtcGxhdGVzL2Vycm9ybm90aWZpY2F0aW9ucGFnZS5odG1sIiwid2VicGFjazovLy8uL2pzL2FwcC9jb21tb24vdGVtcGxhdGVzL2Vycm9ybm90aWZpY2F0aW9uc2VjdGlvbi5odG1sIiwid2VicGFjazovLy8uL2pzL2FwcC9jb21tb24vdGVtcGxhdGVzL2xvYWRpbmdzcGlubmVyLmh0bWwiXSwibmFtZXMiOlsiZGVmaW5lIiwiJCIsImRldk1vZGUiLCJicm93c2V1cmwiLCJzZWFyY2hyZXN1bHRzdXJsIiwiY29tbWl0dGVlYnJvd3NldXJsIiwiYWJvdXRsaW5rcyIsImJpbGxzIiwiZnIiLCJjcGQiLCJwbGF3IiwiY2RvYyIsImNocmciLCJjcnB0IiwiY3JlYyIsImJ1ZGdldCIsImNwcnQiLCJjY2FsIiwiY3ppYyIsImhvYiIsImVjb25pIiwibHNhIiwiY3JpIiwiZ292bWFuIiwiZ2FvcmVwb3J0cyIsImVycCIsImNyZWNiIiwiY2RpciIsInN0YXR1dGUiLCJwcHAiLCJjZnIiLCJocHJlYyIsInVzY29kZSIsImhtYW4iLCJzbWFuIiwiZ3BvIiwiZXJpYyIsInBhaSIsImhqb3VybmFsIiwidXNjb3VydHMiLCJzam91cm5hbCIsImNtciIsIm1lc3NhZ2VzIiwiZXJyb3IiLCJHRU5FUkFMIiwiTk9fU0VBUkNIX1JFU1VMVFMiLCJSRVFVRVNUX1RJTUVEX09VVCIsIlNFUlZJQ0VfRVhDRVBUSU9OIiwiRVhDRVBUSU9OXzUwMCIsImJyb3dzZV9tZXNzYWdlcyIsImJyb3dzZW5vdGltcGxlbWVudGVkIiwiYWR2YW5jZWRfc2VhcmNoX21lc3NhZ2VzIiwiYWxlcnQiLCJOT19DT0xfU0VMRUNURUQiLCJNQVhfQ1JJVEVSSUFfUkVBQ0giLCJjb250ZW50X2RldGFpbCIsInNlbGVjdGVkZ3JhbnVsZWJvcmRlciIsImJyb3dzZSIsImRvY3Jlc3VsdHN0YWJsZWh0bWwiLCJjb2xsZWN0aW9uZGVzY3JpcHRpb24iLCJ3Y3BkIiwiZGNwZCIsImdvdnB1YiIsInNlcmlhbHNldCIsImJyb3dzZXBhZ2VzaXplb3B0aW9ucyIsImRvY3Jlc3VsdHNtYXBwaW5nIiwiU0VOQVRPUiIsIlJFUFJFU0VOVEFUSVZFIiwiREVMRUdBVEUiLCJSRVNJREVOVENPTU1JU1NJT05FUiIsIlJVTEUiLCJDT05URU5UUyIsIkNPUlJFQ1QiLCJOT1RJQ0UiLCJQUk9SVUxFIiwiUFJFU0RPQ1UiLCJTVU5TSElORSIsIkFJRFMiLCJGUk9OVE1BVFRFUiIsIlRPQyIsIk9WRVJWSUVXIiwiQ0hBUFRFUiIsIkFQUEVORElYIiwiVEFCTEUiLCJPVEhFUiIsIm5vZGVtYXBwaW5nIiwiUFVCTElDTEFXIiwiUFJJVkFURUxBVyIsIkhDT05SRVMiLCJTQ09OUkVTIiwiUFJPQ0xBTUFUSU9OIiwiQ09OU1RBTUVORCIsIlJFT1JHUExBTiIsIkJBQ0tNQVRURVIiLCJzZWFyY2hyZXN1bHRzIiwicXVlcnl0cmFpbGxhYmVsIiwiYnJvd3NlYnlkYXRlIiwiRU1QVFlfREFURSIsIlZBTElEX0RBVEUiLCJCT1RIX0RBVEVTIiwiVkFMSURfQlRXTl9EQVRFIiwiRU1QVFlfVElNRUZSQU1FIiwiZGljQ29sbGVjdGlvbnMiLCJwa2dsZXZlbGhpZGVkaWMiLCJtb2R1bGUiLCJfIiwiQmFja2JvbmUiLCJzcGlubmVydGVtcGxhdGUiLCJibG9ja2luZ3RlbXBsYXRlIiwiZXJyb3J0ZW1wbGF0ZXBhZ2UiLCJlcnJvcnRlbXBsYXRlc2VjdGlvbiIsIl9nZXRTdGF0ZVBhcmFtZXRlcnMiLCJsZXZlbCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJ0b2tlbnMiLCJzcGxpdCIsImkiLCJsIiwibGVuZ3RoIiwicmVnZXgiLCJSZWdFeHAiLCJHb3ZJbmZvIiwiYXBhY2hlRXNjYXBlIiwicmVwbGFjZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImUiLCJzcGxpY2UiLCJjdXJyZW50SGFzaCIsImhyZWYiLCJ3aW5kb3ciLCJnb3ZpbmZvX2xhc3RfaGFzaCIsImdvdmluZm9faGFzaCIsImdvdmluZm9fbGFzdF9zdGF0ZSIsImdvdmluZm9fc3RhdGUiLCJiaW5kIiwiZXZlbnQiLCJnZXREaWZmZXJlbmNlIiwibmV3VXJsIiwic3dhcCIsImNob3BPZmYiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwib2xkVXJsIiwic3Vic3RyIiwidGVtcCIsIm9hIiwibmEiLCJkaWZmIiwiTWF0aCIsIm1heCIsInBhcmFtcyIsIl9zdGF0ZUNoYW5nZUNhbGxiYWNrcyIsIl9zdGF0ZUNoYW5nZVBhdGhzIiwibGFzdFVybCIsImhpc3RvcnkiLCJwdXNoU3RhdGUiLCJ0cmlnZ2VyT25IYXNoQ2hhbmdlIiwicCIsImluUGF0aCIsImoiLCJsMiIsInN0YXRlIiwidGVzdCIsInVybCIsImFwcGx5IiwiYXJndW1lbnRzIiwib25wb3BzdGF0ZSIsImEiLCJiIiwiYyIsIkJhc2VWaWV3IiwiVmlldyIsImV4dGVuZCIsInRlbXBsYXRlIiwidXNlU3RhdGUiLCJpc1JlbmRlcmVkIiwiQmFzZVJlcXVpcmVPYmplY3QiLCJ0ZW1wbGF0ZUNhY2hlIiwiQ0FDSEVfVEVNUExBVEVTIiwibG9hZENvbXByZXNzZWQiLCJzdHIiLCJpQmVnaW4iLCJpbmRleE9mIiwiaUVuZCIsInN1YnN0cmluZyIsInByZXYiLCJ0aGlzIiwiZ2V0U3RhdGVQYXJhbWV0ZXJzIiwic2V0U3RhdGVQYXJhbWV0ZXIiLCJ2YWx1ZSIsInJlcGxhY2VTdGF0ZSIsIm8iLCJzZXRTdGF0ZVBhcmFtZXRlcnMiLCJtYXAiLCJhbGxwYXJhbWV0ZXJzIiwibGFyZ2VzdExldmVsIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2xpY2UiLCJvcmlnaW4iLCJqb2luIiwic25pcHBldHMiLCJkb05vdEtpbGxEaXYiLCJzZXRPdmVybGF5IiwiX18kdGVtcCIsImxvYWRpbmdUZW1wbGF0ZSIsInJlbW92ZSIsIiRlbCIsImFwcGVuZCIsIl9fJGNoaWxkcmVuIiwiY2hpbGRyZW4iLCJkZXRhY2giLCJyZW1vdmVPdmVybGF5IiwidmFsaWRhdGVWaWV3IiwiY2FsbGJhY2siLCJ2YWxpZGF0ZUFzeW5jIiwiZGF0YSIsImNvbnNvbGUiLCJsb2ciLCJfa2lsbENoaWxkcmVuIiwidmlld3NTYWNrIiwiZGVzdHJveSIsIl90ZXJtaW5hdGVBbGxBY3RpdmVYSFJzIiwiX3hocnMiLCJhYm9ydCIsIl9nZXRQYXJhbWV0ZXJzIiwidSIsImgiLCJoYXNSb290IiwiaW5kZXgiLCJyb290IiwicGFyYW1QYWlycyIsIl9kaWZmIiwib2xkTWFwIiwibmV3TWFwIiwiZGVjb2RlVVJJIiwiZ2V0QXBwQmFzZVVybCIsImdldEFwcEJhc2VVcmxXT0NvbnRleHQiLCJpbml0aWFsaXplIiwib3B0aW9ucyIsIl9vcHRpb25zIiwiX3BhcmVudCIsIm9uSGFzaENoYW5nZSIsIm9uIiwiY2lkIiwib3JpZ2luYWxFdmVudCIsIm5ld1VSTCIsIm9sZFVSTCIsIm5ld1BhcmFtZXRlcnMiLCJvbGRQYXJhbWV0ZXJzIiwicHVzaCIsInN0YXRlUGF0aCIsImJpbmRBbGwiLCJfdGhpcyIsInJlbmRlciIsIndyYXAiLCJfYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJkIiwiX2JlZm9yZURlc3Ryb3kiLCJfcmVuZGVyVmlldyIsInN1Y2Nlc3MiLCJodG1sIiwicHJlbG9hZERhdGEiLCJlcnJvclJlc3AiLCJlcnJvclRlbXBsYXRlIiwiYWpheFN1Y2Nlc3MiLCJyZXNwb25zZSIsIndlYnBhY2toYWNrIiwibWV0aG9kIiwicHJvdG90eXBlIiwiaXNKU09OIiwiaXNKc29uIiwiX3R5cGVvZiIsInBhcnNlSlNPTiIsImV4IiwiYXBpVVJMdmFsIiwiZWxlbSIsIngiLCJwcmVmaXgiLCJzbHVnIiwiYXR0ciIsImRjbWlIZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInNldEF0dHJpYnV0ZSIsImRlc2MiLCJhdXRob3IiLCJtZXRhZGF0YSIsImRjTUQiLCJzdW1tYXJ5TWV0YSIsImNvbHVtbm5hbWV2YWx1ZXNldCIsImZpbHRlciIsImVsZW1lbnQiLCJjb2xuYW1lIiwidW5kZWZpbmVkIiwiY29sdmFsdWUiLCJnb3Zlcm5tZW50QXV0aG9ycyIsInRhZ3MiLCJ0aXRsZSIsImRhdGVJc3N1ZWQiLCJsYW5ndWFnZSIsInB1Ymxpc2hlciIsInJldmVyc2UiLCJmb3JFYWNoIiwibWV0YSIsImNyZWF0ZUVsZW1lbnQiLCJuYW1lIiwiY29udGVudCIsImFmdGVyIiwic2hhcmVDb250ZW50IiwicGFnZVVybCIsIlVSTCIsInBsYWluVXJsIiwidHJ1bmNhdGVkVGl0bGUiLCJzaGlmdCIsImhvc3QiLCIkaGVhZGluZyIsImZpbmQiLCIkdGl0bGUiLCIkcGxhaW5UaXRsZSIsImNsaWNrIiwicmVtb3ZlQXR0ciIsImltZ01vZGFsRGF0YSIsIiRqcGVnIiwiJGN1cnJlbnRUYXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCIkdGl0bGUxIiwiJGNvbnRlbnRfZGV0YWlscyIsInNoYXJlTW9kYWxEYXRhIiwiJHBhY2thZ2VUaXRsZSIsIiRwYWNrYWdlVVJMIiwiJHBsYWluVVJMIiwiVVJMcHJlZml4IiwiZW1wdHkiLCJjb3B5U2hhcmVVcmwiLCJjb3BpZWRFbGVtZW50IiwiJGN1cnJlbnRMaW5rVGFyZ2V0IiwidGFyZ2V0IiwiZ2hvc3RDb3B5IiwiY29weVRhcmdldCIsImlucHV0TG9jYXRpb24iLCIkdGVtcCIsInByZXBlbmQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJtYXRjaCIsImlucHV0IiwiZ2V0IiwiZWRpdGFibGUiLCJjb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJzZWwiLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInNldFNlbGVjdGlvblJhbmdlIiwidmFsIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJjb21tb25CdG4iLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImNvbGxlY3Rpb25IZWFkZXJCdG4iLCJpZCIsImNvcHlBbGVydCIsImNvbmNhdCIsImNvbXBsZXRlIiwicGFyZW50RWxlbWVudCIsInByZXBlbmRUbyIsImJlZm9yZSIsImZvY3VzIiwiYWxlcnRNZXNzYWdlcyIsImRlbGF5IiwiZmFkZU91dCIsImdldEpTT04iLCJ0eXBlIiwiZXh0cmEiLCJoZWFkZXJzIiwiQWNjZXB0IiwiY2FjaGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGFUeXBlIiwidGltZW91dCIsInhociIsImFqYXgiLCJwb3N0SlNPTiIsImdldFBhcmFtZXRlciIsInBhcmFtZXRlciIsImhhc2giLCJ1c2VIYXNoIiwic2VhcmNoIiwic2V0UGFyYW1ldGVyIiwic2V0UGFyYW1ldGVycyIsInJlc3VsdCIsIl9nZXROZXdIYXNoIiwiZW5jb2RlVVJJIiwicmVwbGFjZWQiLCJub0VtcHR5Iiwib2ZmIiwidW5kZWxlZ2F0ZUV2ZW50cyIsInJlbW92ZURhdGEiLCJ1bmJpbmQiLCJzdG9wTGlzdGVuaW5nIiwidHJpZ2dlciIsInByZWZpeFBhdGgiLCJpc0RldiIsInJlbmRlclZpZXciLCJfbG9hZFNuaXBwZXRzIiwibG9hZGluZ01lc3NhZ2UiLCJzbmlwcGV0IiwicyIsImNvdW50Iiwia2V5cyIsImNiIiwiZGlydHlDbG9zdXJlSGFjayIsImluc3RhbnRpYXRlIiwiQ29uc3RydWN0b3IiLCJ2aWV3IiwiZ2V0UGFyZW50IiwiZ2V0Q2hpbGRyZW4iLCJUYWJWaWV3IiwiQ29uc3RydWN0b3JzIiwiY2FsbCIsIl90YWJNYXAiLCJyZWZyZXNoIiwiZXZlbnRzIiwiX2V2ZW50cyIsIl90YWJDaGFuZ2UiLCJwZXJzaXN0QnkiLCJoYXNPd25Qcm9wZXJ0eSIsIl9jaGFuZ2UiLCJjdXJyZW50VGFyZ2V0IiwiZG9Ob3RsZWF2ZUhpc3RvcnlUcmFpbCIsIiRncm91cCIsImhhc0NsYXNzIiwiY29uc3RydWN0b3IiLCIkZGl2IiwiJGZvciIsImhhbmRsZVBhZ2VEb2VzTm90RXhpc3QiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwicmVtb3ZlQXR0cmlidXRlIiwiaGlkZSIsInNob3ciLCJkZXN0cm95Vmlld3NPbkV4aXQiLCJzZXRFbGVtZW50IiwibGlzdGVuVG8iLCJzZXRUYWJCeUlkIiwic2V0VGFiQnlJbmRleCIsImluaXRpYWwiLCJBYnN0cmFjdENvbnN0cmFpbnRNb2RlbCIsImNvbnN0cmFpbnRzIiwiZ2V0SlNPTlN0cmluZyIsInNldEZyb21KU09OU3RyaW5nIiwicGFyc2UiLCJtZXJnZUNvbnN0cmFpbnRzIiwicHJvcCIsIkFycmF5IiwidW5pb24iLCJQb3N0Q29uc3RyYWludE1vZGVsIiwiZ2V0Qm9keSIsIm90aGVyIiwic2V0RmllbGQiLCJnZXRGaWVsZCIsInBhZ2VOdW1iZXIiLCJkZWZhdWx0UGFnZU51bWJlciIsInBhZ2VTaXplIiwiZGVmYXVsdFBhZ2VTaXplIiwiUmVzdFNvdXJjZSIsIkNvbnN0cmFpbnRNb2RlbFByb3RvdHlwZSIsInBhcnNlQXN5bmMiLCJjb25zdHJhaW50TW9kZWwiLCJjb25zdHJhaW50UGFuZWxzIiwiY2FsbGJhY2tRdWV1ZXMiLCJlcnJvckNhbGxiYWNrUXVldWVzIiwiY291bnRjYWNoZSIsIl9sb2FkaW5nIiwibm9DYWNoZSIsImluaXRpYWxDb25zdHJhaW50TW9kZWwiLCJzZXRDb25zdHJhaW50TW9kZWwiLCJzdWJzY3JpYmUiLCJjb25zdHJhaW50UGFuZWwiLCJTY3JvbGxQYWdpbmF0aW9uUGFuZWwiLCJfY29udGluZW91cyIsIm9uQ29uc3RyYWludEFwcGVuZCIsIm9uQ29uc3RyYWludENoYW5nZSIsImdldENvbnN0cmFpbnRNb2RlbCIsIlBhZ2luYXRpb25QYW5lbCIsInNldFBhZ2VOdW1iZXIiLCJfY3dyYXBwZXJkYXRhIiwidG9BcHBlbmQiLCJ1bnN1YnNjcmliZSIsImNsZWFyQ2FjaGUiLCJfdHJpZ2dlckNoYW5nZSIsImdldFBhZ2VOdW1iZXIiLCJjbVN0ciIsImdldENvdW50IiwiZ2V0QWxsVXJsIiwiY29uc3RyYWludFVybCIsImdldEFsbCIsInBhdGgiLCJlcnJvcmNhbGxiYWNrIiwiX2xhc3RQYXlsb2FkIiwicGF5bG9hZCIsIl94aHIiLCJwb3N0UGFyc2UiLCJzdGF0dXNUZXh0Iiwic2V0Q291bnQiLCJBYnN0cmFjdENvbnN0cmFpbnRQYW5lbCIsInNldFNvdXJjZSIsInNvdXJjZSIsImdldFNvdXJjZSIsIm1pZGRsZUVudHJpZXMiLCJlZGdlRW50cmllcyIsImdldEludGVydmFsIiwiY3VycmVudF9wYWdlIiwibnAiLCJuZV9oYWxmIiwiY2VpbCIsInVwcGVyX2xpbWl0IiwibWluIiwicGFnZSIsImdldFBhZ2VTaXplIiwic2V0UGFnZVNpemUiLCJvblBhZ2luYXRpb25CdG4iLCJfcHJlbG9hZERhdGEiLCJyZXNldCIsImVycm9yQ2FsbGJhY2siLCJ0b3RhbFBhZ2VzIiwiaW50ZXJ2YWwiLCJub01pZGRsZSIsImxlZnQiLCJsZW5kIiwicmlnaHQiLCJyaWdodEVkZ2VCZWdpbiIsInJiZWdpbiIsIm1pZGRsZSIsImhhc05leHQiLCJuZXh0IiwiaGFzUHJldmlvdXMiLCJwcmV2aW91cyIsImJlZ2luU3RyIiwiZW5kU3RyIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6ImdIQUFBQSxVQUFPLENBQUMsZ0RBc0xQLEtBdExnQixXQUNBQyxHQW9MTCxNQW5MYyxDQUNWQyxRQUFVLElBQ1ZDLFVBQVksYUFDeEJDLGlCQUFrQixVQUNwQkMsbUJBQXFCLGtCQUNQQyxXQUFhLENBQ1RDLE1BQU8sbUVBQ1BDLEdBQUksZ0VBQ0pDLElBQUsscUZBQ0xDLEtBQU0sdUVBQ05DLEtBQU0sdUVBQ05DLEtBQUssc0VBQ0xDLEtBQU0scUVBQ05DLEtBQU0sb0VBQ05DLE9BQVEsc0ZBQ1JDLEtBQU0sOEVBQ05DLEtBQU0sdUVBQ05DLEtBQU0sK0VBQ05DLElBQUssZ0VBQ0xDLE1BQU8sbUVBQ1BDLElBQUssNkVBQ0xDLElBQUss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NFUsU0FBWTVVLEVBQUsrUCxXQUFhL1AsRUFBS2lRLFNBQVcsRUFDbkRqUSxFQUFLNlUsT0FBUzdVLEVBQUs0VSxTQUFXNVUsRUFBS2lRLFNBQVcsRUFDOUNqUSxFQUFLNlUsT0FBUzdVLEVBQUs2VSxPQUFTN1UsRUFBSzBNLE1BQVExTSxFQUFLME0sTUFBUTFNLEVBQUs2VSxPQUMzRC9VLEVBQVNFLElBRVpqRixLQUFLb0QsTUFBTzJWLElBRWpCNVosRUFBUStXLHNCQUF3Qi9XLEVBQVFvWCxnQkFBZ0JqVSxPQUFPLElBQ3hEbkQsR0FDViw0QixtR0M5dEREbEIsRUFBTzhiLFFBQVUsNFcseUdDQWpCOWIsRUFBTzhiLFFBQVUsa00sNEdDQWpCOWIsRUFBTzhiLFFBQVUsa0csa0dDQWpCOWIsRUFBTzhiLFFBQVUiLCJmaWxlIjoiMC5idW5kbGUuNi4yNC4wLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZGVmaW5lKFtcImpxdWVyeVwiXSxcbiAgICAgICAgZnVuY3Rpb24oJCkge1xuICAgICAgICAgICAgdmFyIHVpcHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgZGV2TW9kZSA6ICcwJyxcbiAgICAgICAgICAgICAgICBicm93c2V1cmwgOiAnY29sbGVjdGlvbicsXG5cdFx0XHRcdHNlYXJjaHJlc3VsdHN1cmw6ICcjc2VhcmNoJyxcblx0XHRjb21taXR0ZWVicm93c2V1cmwgOiAnYnJvd3NlY29tbWl0dGVlJyxcbiAgICAgICAgICAgICAgICBhYm91dGxpbmtzIDoge1xuICAgICAgICAgICAgICAgICAgICBiaWxsczogJ2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfY29uZ3Jlc3Npb25hbF9iaWxscy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBmcjogJ2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfZmVkZXJhbF9yZWdpc3Rlci5odG0nLFxuICAgICAgICAgICAgICAgICAgICBjcGQgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2NvbXBpbGF0aW9uX29mX3ByZXNpZGVudGlhbF9kb2N1bWVudHMuaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgcGxhdyA6J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfcHVibGljX2FuZF9wcml2YXRlX2xhd3MuaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgY2RvYyA6J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfY29uZ3Jlc3Npb25hbF9kb2N1bWVudHMuaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgY2hyZzonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9jb25ncmVzc2lvbmFsX2hlYXJpbmdzLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGNycHQgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2NvbmdyZXNzaW9uYWxfcmVwb3J0cy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBjcmVjIDonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9jb25ncmVzc2lvbmFsX3JlY29yZC5odG0nLFxuICAgICAgICAgICAgICAgICAgICBidWRnZXQgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2J1ZGdldF9vZl90aGVfdW5pdGVkX3N0YXRlc19nb3Zlcm5tZW50Lmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGNwcnQgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2NvbmdyZXNzaW9uYWxfY29tbWl0dGVlX3ByaW50cy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBjY2FsIDonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9jb25ncmVzc2lvbmFsX2NhbGVuZGFycy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBjemljIDonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9jb2FzdGFsX3pvbmVfaW5mb3JtYXRpb25fY2VudGVyLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGhvYiA6J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfaGlzdG9yeV9vZl9iaWxscy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBlY29uaSA6J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfZWNvbm9taWNfaW5kaWNhdG9ycy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBsc2EgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2xpc3Rfb2ZfY2ZyX3NlY3Rpb25zX2FmZmVjdGVkLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGNyaSA6J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfY29uZ3Jlc3Npb25hbF9yZWNvcmRfaW5kZXguaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgZ292bWFuIDonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF91bml0ZWRfc3RhdGVzX2dvdmVybm1lbnRfbWFudWFsLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGdhb3JlcG9ydHMgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2dhb19yZXBvcnRzX2FuZF9jb21wdHJvbGxlcl9nZW5lcmFsX2RlY2lzaW9ucy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBlcnAgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2Vjb25vbWljX3JlcG9ydF9vZl90aGVfcHJlc2lkZW50Lmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGNyZWNiIDonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9jb25ncmVzc2lvbmFsX3JlY29yZF9ib3VuZF9lZGl0aW9uLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGNkaXIgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2NvbmdyZXNzaW9uYWxfZGlyZWN0b3J5Lmh0bScsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1dGUgOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X3VuaXRlZF9zdGF0ZXNfc3RhdHV0ZXNfYXRfbGFyZ2UuaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgcHBwOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X3B1YmxpY19wYXBlcnNfb2ZfdGhlX3ByZXNpZGVudHNfb2ZfdGhlX3VuaXRlZF9zdGF0ZXMuaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgY2ZyOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2NvZGVfb2ZfZmVkZXJhbF9yZWd1bGF0aW9ucy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBocHJlYzonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9hZGRpdGlvbmFsX2dvdmVybm1lbnRfcHVibGljYXRpb25zLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIHVzY29kZTonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF91bml0ZWRfc3RhdGVzX2NvZGUuaHRtJyxcbiAgICAgICAgICAgICAgICAgICAgaG1hbjonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNhYm91dF9ob3VzZV9ydWxlc19hbmRfbWFudWFsLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIHNtYW46J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfc2VuYXRlX21hbnVhbC5odG0nLFxuICAgICAgICAgICAgICAgICAgICBncG86J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfYWRkaXRpb25hbF9nb3Zlcm5tZW50X3B1YmxpY2F0aW9ucy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBlcmljOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2VkdWNhdGlvbl9yZXBvcnRzX2Zyb21fZXJpYy5odG0nLFxuICAgICAgICAgICAgICAgICAgICBwYWk6J2h0dHA6Ly93d3cuZ3BvLmdvdi9oZWxwL2luZGV4Lmh0bWwjYWJvdXRfcHJpdmFjeV9hY3RfaXNzdWFuY2VzLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGhqb3VybmFsOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2Fib3V0X2pvdXJuYWxfb2ZfdGhlX2hvdXNlX29mX3JlcHJlc2VudGF0aXZlcy5odG0nLFxuICAgICAgICAgICAgICAgICAgICB1c2NvdXJ0czonaHR0cDovL3d3dy5ncG8uZ292L2Zkc3lzL2Jyb3dzZS9jb2xsZWN0aW9uLmFjdGlvbj9jb2xsZWN0aW9uQ29kZT1VU0NPVVJUUycsXG4gICAgICAgICAgICAgICAgICAgIHNqb3VybmFsOidodHRwOi8vd3d3Lmdwby5nb3YvaGVscC9pbmRleC5odG1sI2pvdXJuYWxfb2Zfc2VhbnRlLmh0bScsXG4gICAgICAgICAgICAgICAgICAgIGNtcjonaHR0cDovL3d3dy5ncG8uZ292L2hlbHAvaW5kZXguaHRtbCNqb3VybmFsX29mX3NlYW50ZS5odG0nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBHRU5FUkFMOic8aDI+RXJyb3Igb2NjdXJyZWQuIFRoZSBjb250ZW50IHlvdSByZXF1ZXN0ZWQgY2Fubm90IGJlIGZvdW5kLjwvaDI+PHA+UGxlYXNlIHJlcG9ydCB0aGlzIGVycm9yIHRvIDxhIGNsYXNzPVwidW5kZXJsaW5lZC1saW5rXCIgaHJlZj1cImh0dHBzOi8vd3d3Lmdwby5nb3YvZXJyb3ItcGFnZXMvYXNrZ3BvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+YXNrR1BPLjwvYT48L3A+PHA+UHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvIGhlbHAgdXMgcmVzb2x2ZSB0aGlzIHByb2JsZW06IHRoZSBVUkwgb2YgdGhlIHBhZ2Ugb3IgdGhlIGNvbnRlbnQgeW91IHdlcmUgdHJ5aW5nIHRvIGFjY2VzcywgdGhlIHN0ZXBzIHlvdSBmb2xsb3dlZCB0byBwcm9kdWNlIHRoZSBlcnJvciwgc3BlY2lmaWMgc2VhcmNoIG9yIGJyb3dzZSB0ZXJtcywgYW5kL29yIGEgc2NyZWVuc2hvdCBvZiB0aGUgcGFnZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuPC9wPjxwPlRoYW5rIHlvdSBmb3IgeW91ciBwYXRpZW5jZS48cD48cD48YSBjbGFzcz1cInVuZGVybGluZWQtbGlua1wiIGhyZWY9XCIvXCI+SG9tZXBhZ2U8L2E+PC9wPjxwPjxhIGlkPVwic2VhcmNodGlwc0lkXCIgaHJlZj1cIi9oZWxwL3NlYXJjaGluZ1wiIGNsYXNzPVwidW5kZXJsaW5lZC1saW5rXCI+U2VhcmNoIFRpcHM8L2E+PC9wPicsXG4gICAgICAgICAgICAgICAgICAgICAgICBOT19TRUFSQ0hfUkVTVUxUUzonTm8gU2VhcmNoIFJlc3VsdHMuIFJlZmluZSB0aGUgcXVlcnkgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVF9USU1FRF9PVVQ6J1JlcXVlc3QgVGltZWQgT3V0Li4uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfRVhDRVBUSU9OOidFcnJvciBvY2N1cmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0IC4uLicsXG4gICAgICAgICAgICAgICAgICAgICAgICBFWENFUFRJT05fNTAwOidFcnJvciBvY2N1cmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0LiBQbGVhc2UgY2hlY2sgeW91ciBpbnB1dCBhbmQgdHJ5IGFnYWluLidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnJvd3NlX21lc3NhZ2VzIDoge1xuICAgICAgICAgICAgICAgICAgICBicm93c2Vub3RpbXBsZW1lbnRlZDonQ29taW5nIHNvb24uIEN1cnJlbnRseSBpbiBkZXZlbG9wbWVudC4nXG5cblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWR2YW5jZWRfc2VhcmNoX21lc3NhZ2VzOiB7XG5cdFx0ICAgIGFsZXJ0Ontcblx0XHRcdE5PX0NPTF9TRUxFQ1RFRDonTm8gQ29sbGVjdGlvbiBzZWxlY3RlZDogQWxsIENvbGxlY3Rpb25zIHdpbGwgYmUgc2VhcmNoZWQgYnkgZGVmYXVsdC4nLFxuXHRcdFx0TUFYX0NSSVRFUklBX1JFQUNIOidNYXhpbXVtIFNlYXJjaCBDcml0ZXJpYSByZWFjaGVkLidcblxuXHRcdCAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb250ZW50X2RldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZGdyYW51bGVib3JkZXI6ICczcHggc29saWQgcmdiKDI0MiwxMDEsNDkpJ1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBicm93c2U6IHtcbiAgICAgICAgICAgICAgICAgIGRvY3Jlc3VsdHN0YWJsZWh0bWw6ICc8dGFibGUgaWQ9XFxcIjwlLSBjb2xsZWN0aW9uQ29kZSAlPlxcXCIgY2xhc3M9XFxcInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZFxcXCI+J1xuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uZGVzY3JpcHRpb24gOiB7XG4gICAgICAgICAgICAgICAgICAgIGJpbGxzOiAnQ29uZ3Jlc3Npb25hbCBCaWxscycsXG4gICAgICAgICAgICAgICAgICAgIGZyOiAnRmVkZXJhbCBSZWdpc3RlcicsXG4gICAgICAgICAgICAgICAgICAgIHdjcGQgOidDb21waWxhdGlvbiBvZiBQcmVzaWRlbnRpYWwgRG9jdW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGNwZCA6J0NvbXBpbGF0aW9uIG9mIFByZXNpZGVudGlhbCBEb2N1bWVudHMnLFxuICAgICAgICAgICAgICAgICAgICBjcGQgOidDb21waWxhdGlvbiBvZiBQcmVzaWRlbnRpYWwgRG9jdW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGxhdyA6J1B1YmxpYyBhbmQgUHJpdmF0ZSBMYXdzJyxcbiAgICAgICAgICAgICAgICAgICAgY2RvYyA6J0NvbmdyZXNzaW9uYWwgRG9jdW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgY2hyZzonQ29uZ3Jlc3Npb25hbCBIZWFyaW5ncycsXG4gICAgICAgICAgICAgICAgICAgIGNycHQgOidDb25ncmVzc2lvbmFsIFJlcG9ydHMnLFxuICAgICAgICAgICAgICAgICAgICBjcmVjIDonQ29uZ3Jlc3Npb25hbCBSZWNvcmQnLFxuICAgICAgICAgICAgICAgICAgICBidWRnZXQgOidCdWRnZXQgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCcsXG4gICAgICAgICAgICAgICAgICAgIGNwcnQgOidDb25ncmVzc2lvbmFsIENvbW1pdHRlZSBQcmludHMnLFxuICAgICAgICAgICAgICAgICAgICBjY2FsIDonQ29uZ3Jlc3Npb25hbCBDYWxlbmRhcnMnLFxuICAgICAgICAgICAgICAgICAgICBjemljIDonQ29hc3RhbCBab25lIEluZm9ybWF0aW9uIENlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGhvYiA6J0hpc3Rvcnkgb2YgQmlsbHMnLFxuICAgICAgICAgICAgICAgICAgICBlY29uaSA6J0Vjb25vbWljIEluZGljYXRvcnMnLFxuICAgICAgICAgICAgICAgICAgICBsc2EgOidMaXN0IG9mIENGUiBTZWN0aW9ucyBBZmZlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGNyaSA6J0NvbmdyZXNzaW9uYWwgUmVjb3JkIEluZGV4JyxcbiAgICAgICAgICAgICAgICAgICAgZ292bWFuIDonVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IE1hbnVhbCcsXG4gICAgICAgICAgICAgICAgICAgIGdhb3JlcG9ydHMgOidHQU8gUmVwb3J0cyBhbmQgQ29tcHRyb2xsZXIgR2VuZXJhbCBEZWNpc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICBlcnAgOidFY29ub21pYyBSZXBvcnQgb2YgdGhlIFByZXNpZGVudCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWNiIDonQ29uZ3Jlc3Npb25hbCBSZWNvcmQgKEJvdW5kIEVkaXRpb24pJyxcbiAgICAgICAgICAgICAgICAgICAgY2RpciA6J0NvbmdyZXNzaW9uYWwgRGlyZWN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHV0ZSA6J1VuaXRlZCBTdGF0ZXMgU3RhdHV0ZXMgYXQgTGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgICBwcHA6J1B1YmxpYyBQYXBlcnMgb2YgdGhlIFByZXNpZGVudHMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMnLFxuICAgICAgICAgICAgICAgICAgICBjZnI6J0NvZGUgb2YgRmVkZXJhbCBSZWd1bGF0aW9ucyAoYW5udWFsIGVkaXRpb24pJyxcbiAgICAgICAgICAgICAgICAgICAgaHByZWM6J0hvdXNlIFByZWNlZGVudHMnLFxuICAgICAgICAgICAgICAgICAgICB1c2NvZGU6J1VuaXRlZCBTdGF0ZXMgQ29kZScsXG4gICAgICAgICAgICAgICAgICAgIGhtYW46J0hvdXNlIFJ1bGVzIGFuZCBNYW51YWwnLFxuICAgICAgICAgICAgICAgICAgICBzbWFuOidTZW5hdGUgTWFudWFsJyxcbiAgICAgICAgICAgICAgICAgICAgZ3BvOidBZGRpdGlvbmFsIEdvdmVybm1lbnQgUHVibGljYXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgZXJpYzonRWR1Y2F0aW9uIFJlcG9ydHMgZnJvbSBFUklDJyxcbiAgICAgICAgICAgICAgICAgICAgcGFpOidQcml2YWN5IEFjdCBJc3N1YW5jZXMnLFxuICAgICAgICAgICAgICAgICAgICBoam91cm5hbDonSG91c2UgSm91cm5hbCcsXG4gICAgICAgICAgICAgICAgICAgIHVzY291cnRzOidVbml0ZWQgU3RhdGVzIENvdXJ0cyBPcGluaW9ucycsXG4gICAgICAgICAgICAgICAgICAgIGdvdnB1YjonQnVsayBHb3Zlcm5tZW50IFB1YmxpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbHNldDonVS5TLiBTZXJpYWwgU2V0JyxcbiAgICAgICAgICAgICAgICAgICAgc2pvdXJuYWw6J0pvdXJuYWwgb2YgdGhlIFNlbmF0ZScsXG4gICAgICAgICAgICAgICAgICAgIGNtcjonQ29uZ3Jlc3Npb25hbGx5IE1hbmRhdGVkIFJlcG9ydHMnXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJyb3dzZXBhZ2VzaXplb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2NvdXJ0c1wiIDogW1wiMTAwXCIsXCIyMDBcIixcIjUwMFwiXSxcbiAgICAgICAgICAgICAgICAgICAgXCJiaWxsc1wiIDogW1wiMjBcIixcIjUwXCIsXCIxMDBcIl0sXG4gICAgICAgICAgICAgICAgICAgIFwicGxhd1wiIDogW1wiMjBcIixcIjUwXCIsXCIxMDBcIl0sXG4gICAgICAgICAgICAgICAgICAgIFwic2VyaWFsc2V0XCIgOiBbXCIxMDBcIixcIjIwMFwiLFwiNTAwXCJdLFxuICAgICAgICAgICAgICAgICAgICBcImNycHRcIiA6IFtcIjEwMFwiLFwiMjAwXCIsXCI1MDBcIl0sXG4gICAgICAgICAgICAgICAgICAgIFwiZ3BvXCIgOiBbXCI1MFwiLFwiMTAwXCIsXCIyMDBcIl1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvY3Jlc3VsdHNtYXBwaW5nIDoge1xuICAgICAgICAgICAgICAgICAgICBjZGlyOntcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTkFUT1I6J1NlbmF0b3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJFUFJFU0VOVEFUSVZFOidSZXByZXNlbnRhdGl2ZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRUdBVEU6J0RlbGVnYXRlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICBSRVNJREVOVENPTU1JU1NJT05FUjonUmVzaWRlbnQgQ29tbWlzc2lvbmVycydcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZnI6e1xuICAgICAgICAgICAgICAgICAgICAgICAgUlVMRTonUnVsZXMgYW5kIFJlZ3VsYXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFTlRTOidDb250ZW50cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBDT1JSRUNUOidDb3JyZWN0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICBOT1RJQ0U6J05vdGljZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgUFJPUlVMRTonUHJvcG9zZWQgUnVsZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgUFJFU0RPQ1U6J1ByZXNpZGVudGlhbCBEb2N1bWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgU1VOU0hJTkU6J1N1bnNoaW5lIEFjdCBNZWV0aW5ncycsXG4gICAgICAgICAgICAgICAgICAgICAgICBBSURTOidSRUFERVIgQUlEUydcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgIGVycDp7XG4gICAgICAgICAgICAgICAgICAgICBcdEZST05UTUFUVEVSOidGcm9udCBNYXR0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgIFRPQzonVGFibGUgb2YgQ29udGVudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgIE9WRVJWSUVXOidPdmVydmlldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUFRFUjonQ2hhcHRlcnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgIEFQUEVORElYOidBcHBlbmRpY2VzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRTonJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBPVEhFUjonT3RoZXInXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm9kZW1hcHBpbmcgOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1dGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgUFVCTElDTEFXOidQdWJsaWMgTGF3cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBQUklWQVRFTEFXOiAnUHJpdmF0ZSBMYXdzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIEhDT05SRVM6J0hvdXNlIENvbmN1cnJlbnQgUmVzb2x1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgU0NPTlJFUzonU2VuYXRlIENvbmN1cnJlbnQgUmVzb2x1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgUFJPQ0xBTUFUSU9OOidQcm9jbGFtYXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU1FTkQ6J0NvbnN0aXR1dGlvbmFsIEFtZW5kbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgUkVPUkdQTEFOOidSZW9yZ2FuaXphdGlvbiBQbGFucycsXG4gICAgICAgICAgICAgICAgICAgICAgICBPVEhFUjonT3RoZXIgQ29udGVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9OVE1BVFRFUjonRnJvbnQgTWF0dGVyIChDb3ZlciAmIExpc3RzKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBCQUNLTUFUVEVSOidCYWNrIE1hdHRlciAoSW5kZXhlcyknXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlYXJjaHJlc3VsdHMgOiB7XG4gICAgICAgICAgICAgICAgICBxdWVyeXRyYWlsbGFiZWwgOic8aDQgY2xhc3M9XFxcImxpZ2h0LXdlaWdodFxcXCI+UmVmaW5lZCBCeTo8JT0gYWhyZWYgJT48L2g0PidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJyb3dzZWJ5ZGF0ZSA6IHtcbiAgICAgICAgICAgICAgICAgIEVNUFRZX0RBVEU6ICdQbGVhc2UgZW50ZXIgdGhlIGRhdGUgZmllbGQuJyxcbiAgICAgICAgICAgICAgICAgIFZBTElEX0RBVEU6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlLicsXG4gICAgICAgICAgICAgICAgICBCT1RIX0RBVEVTOiAnUGxlYXNlIGVudGVyIGJvdGggdGhlIGRhdGUgZmllbGRzLicsXG4gICAgICAgICAgICAgICAgICBWQUxJRF9CVFdOX0RBVEU6ICdGcm9tIGRhdGUgc2hvdWxkIGJlIGJlZm9yZSBUbyBkYXRlLicsXG4gICAgICAgICAgICAgICAgICBFTVBUWV9USU1FRlJBTUU6ICdQbGVhc2Ugc2VsZWN0IGEgdGltZSBmcmFtZS4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaWNDb2xsZWN0aW9uczpbJ3N0YXR1dGUnLCd1c2NvZGUnLCdmcicsJ2NmcicsJ2NyZWNiJywndXNjb3VydHMnLCdob2InLCdwcHAnLCdjZGlyJywnYnVkZ2V0JywnY2NhbCcsJ2NwcnQnLCdlY29uaScsJ2VyaWMnLCdlcnAnLCd3Y3BkJywgJ2dwbycsJ2Nkb2MnLCdoam91cm5hbCcsJ2dvdnB1YiddLFxuICAgICAgICAgICAgICAgIHBrZ2xldmVsaGlkZWRpYzpbJ2hvYicsJ2NyaScsJ2NtciddXG5cblxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHVpcHJvcHM7XG59KTtcbiIsImRlZmluZShbXCJqcXVlcnlcIiwgXCJtb2R1bGVcIiwgXCJ1bmRlcnNjb3JlXCIsIFwiYmFja2JvbmVcIiwgXCJlbGVtZW50LWNsb3Nlc3QtcG9seWZpbGxcIiwgXCJ0ZXh0IWNvbW1vbi90ZW1wbGF0ZXMvbG9hZGluZ3NwaW5uZXIuaHRtbFwiLCBcInRleHQhY29tbW9uL3RlbXBsYXRlcy9ibG9ja2luZ3NwaW5uZXIuaHRtbFwiLCBcInRleHQhY29tbW9uL3RlbXBsYXRlcy9lcnJvcm5vdGlmaWNhdGlvbnBhZ2UuaHRtbFwiLCBcInRleHQhY29tbW9uL3RlbXBsYXRlcy9lcnJvcm5vdGlmaWNhdGlvbnNlY3Rpb24uaHRtbFwiXSwgZnVuY3Rpb24oJCwgbW9kdWxlLCBfLCBCYWNrYm9uZSwgc3Bpbm5lcnRlbXBsYXRlLCBibG9ja2luZ3RlbXBsYXRlLCBlcnJvcnRlbXBsYXRlcGFnZSwgZXJyb3J0ZW1wbGF0ZXNlY3Rpb24pIHtcclxuICAgIC8qKlxyXG4gKiBCYXNlIFZpZXcuIEFsbCBvdGhlciBjbGFzc2VzIG11c3QgaW5oZXJpdCBmcm9tIGl0LlxyXG4gKiBAZXhhbXBsZSBNeUNsYXNzID0gQmFzZVZpZXcuZXh0ZW5kKHsgfSk7XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG4gICAgdmFyIF9nZXRTdGF0ZVBhcmFtZXRlcnMgPSBmdW5jdGlvbihsZXZlbCkge1xyXG4gICAgICAgIHZhciBwID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgdmFyIHRva2VucyA9IGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKEdvdkluZm8uYXBhY2hlRXNjYXBlLCBcImdcIik7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0gPSB0b2tlbnNbaV0ucmVwbGFjZShyZWdleCwgJy8nKTsgLy9pc3N1ZSAjNDY5XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0gPSBkZWNvZGVVUklDb21wb25lbnQodG9rZW5zW2ldKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2Vuc1swXSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0b2tlbnNbMF0gPT0gXCJhcHBcIikge1xyXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGV2ZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2Vuc1tsZXZlbCAtIDFdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGN1cnJlbnRIYXNoID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWY7XHJcbiAgICB9XHJcbiAgICB2YXIgY3VycmVudFN0YXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9nZXRTdGF0ZVBhcmFtZXRlcnMoKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5nb3ZpbmZvX2xhc3RfaGFzaCA9IG51bGwgO1xyXG4gICAgd2luZG93LmdvdmluZm9faGFzaCA9IGN1cnJlbnRIYXNoKClcclxuICAgIHdpbmRvdy5nb3ZpbmZvX2xhc3Rfc3RhdGUgPSB3aW5kb3cubnVsbDtcclxuICAgIHdpbmRvdy5nb3ZpbmZvX3N0YXRlID0gY3VycmVudFN0YXRlKCk7XHJcbiAgICAkKHdpbmRvdykuYmluZCgnaGFzaGNoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgd2luZG93LmdvdmluZm9fbGFzdF9oYXNoID0gd2luZG93LmdvdmluZm9faGFzaDtcclxuICAgICAgICB3aW5kb3cuZ292aW5mb19oYXNoID0gY3VycmVudEhhc2goKVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2hhc2ggY2hhbmdlZCBmcm9tICcgKyAgd2luZG93LmdvdmluZm9fbGFzdF9oYXNoICsgJyB0byAnICsgd2luZG93LmdvdmluZm9faGFzaClcclxuICAgIH0pO1xyXG4gICAgdmFyIGdldERpZmZlcmVuY2UgPSBmdW5jdGlvbihuZXdVcmwsIHN3YXApIHtcclxuICAgICAgICB2YXIgY2hvcE9mZiA9IChsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0bmFtZSArICcvYXBwLycpLmxlbmd0aDtcclxuICAgICAgICB2YXIgb2xkVXJsID0gbG9jYXRpb24uaHJlZi5zdWJzdHIoY2hvcE9mZik7XHJcbiAgICAgICAgdmFyIG5ld1VybCA9IG5ld1VybC5zdWJzdHIoY2hvcE9mZik7XHJcbiAgICAgICAgaWYgKHN3YXApIHtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSBvbGRVcmw7XHJcbiAgICAgICAgICAgIG9sZFVybCA9IG5ld1VybDtcclxuICAgICAgICAgICAgbmV3VXJsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9hID0gb2xkVXJsLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgdmFyIG5hID0gbmV3VXJsLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB7fTtcclxuICAgICAgICB2YXIgbCA9IE1hdGgubWF4KG9hLmxlbmd0aCwgbmEubGVuZ3RoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAob2FbaV0gIT0gbmFbaV0pIHtcclxuICAgICAgICAgICAgICAgIGRpZmZbaSArIDFdID0gbmFbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGlmZjogZGlmZixcclxuICAgICAgICAgICAgcGFyYW1zOiBuYVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIDtcclxuICAgIHZhciBHb3ZJbmZvID0ge1xyXG4gICAgICAgIF9zdGF0ZUNoYW5nZUNhbGxiYWNrczogW10sXHJcbiAgICAgICAgX3N0YXRlQ2hhbmdlUGF0aHM6IFtdLFxyXG4gICAgICAgIGFwYWNoZUVzY2FwZSA6ICclQzIlQkMnIC8vIGlzc3VlICM0NjlcclxuICAgIH07XHJcbiAgICB2YXIgbGFzdFVybCA9IGxvY2F0aW9uLmhyZWY7XHJcbiAgICAoZnVuY3Rpb24oaGlzdG9yeSkge1xyXG4gICAgICAgIHZhciBwdXNoU3RhdGUgPSBoaXN0b3J5LnB1c2hTdGF0ZTtcclxuICAgICAgICB2YXIgdHJpZ2dlck9uSGFzaENoYW5nZSA9IGZ1bmN0aW9uKGRpZmYpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBHb3ZJbmZvLl9zdGF0ZUNoYW5nZUNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwID0gR292SW5mby5fc3RhdGVDaGFuZ2VQYXRoc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBpblBhdGggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwyID0gcC5sZW5ndGg7IGogPCBsMjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBbal0gIT0gZGlmZi5wYXJhbXNbal0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5QYXRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpblBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBHb3ZJbmZvLl9zdGF0ZUNoYW5nZUNhbGxiYWNrc1tpXShkaWZmLmRpZmYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlID0gZnVuY3Rpb24oc3RhdGUsIHRlc3QsIHVybCkge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IGdldERpZmZlcmVuY2UodXJsKTtcclxuICAgICAgICAgICAgcHVzaFN0YXRlLmFwcGx5KGhpc3RvcnksIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHRyaWdnZXJPbkhhc2hDaGFuZ2UoZGlmZik7XHJcbiAgICAgICAgICAgIGxhc3RVcmwgPSB1cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oYSwgYiwgYykge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IGdldERpZmZlcmVuY2UobGFzdFVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRyaWdnZXJPbkhhc2hDaGFuZ2UoZGlmZik7XHJcbiAgICAgICAgICAgIGxhc3RVcmwgPSBsb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgIH1cclxuICAgIH0pKHdpbmRvdy5oaXN0b3J5KTtcclxuICAgIEdvdkluZm8uQmFzZVZpZXcgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7XHJcbiAgICAgICAgLyoqIEBsZW5kcyBHb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZSAqL1xyXG4gICAgICAgIHRlbXBsYXRlOiBudWxsICxcclxuICAgICAgICB1c2VTdGF0ZSA6IHRydWUsXHJcbiAgICAgICAgaXNSZW5kZXJlZDogZmFsc2UsXHJcbiAgICAgICAgQmFzZVJlcXVpcmVPYmplY3Q6IHtcclxuICAgICAgICAgICAgdGVtcGxhdGVDYWNoZToge30sXHJcbiAgICAgICAgICAgIENBQ0hFX1RFTVBMQVRFUzogdHJ1ZSxcclxuICAgICAgICAgICAgbG9hZENvbXByZXNzZWQ6IGZ1bmN0aW9uKHN0cikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlCZWdpbiA9IHN0ci5pbmRleE9mKCdmcGFja2VyMTkxMWJlZ2luJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaUVuZCA9IHN0ci5pbmRleE9mKCdmcGFja2VyMTkxMWVuZCcpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHN0ci5zdWJzdHJpbmcoaUJlZ2luICsgMjEsIGlFbmQgLSAxKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVDYWNoZVt0b2tlbnNbaSArIDFdXSA9IHN0ci5zdWJzdHJpbmcocHJldiwgdG9rZW5zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gdG9rZW5zW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRTdGF0ZVBhcmFtZXRlcnM6IGZ1bmN0aW9uKGxldmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZ2V0U3RhdGVQYXJhbWV0ZXJzKGxldmVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldFN0YXRlUGFyYW1ldGVyOiBmdW5jdGlvbihsZXZlbCwgdmFsdWUsIHJlcGxhY2VTdGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgbyA9IHt9O1xyXG4gICAgICAgICAgICBvW2xldmVsXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlUGFyYW1ldGVycyhvLCByZXBsYWNlU3RhdGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0U3RhdGVQYXJhbWV0ZXJzOiBmdW5jdGlvbihtYXAsIHJlcGxhY2VTdGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgYWxscGFyYW1ldGVycyA9IHRoaXMuZ2V0U3RhdGVQYXJhbWV0ZXJzKCk7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgXCJtdXN0IHByb3ZpZGUgbGV2ZWwgZnJvbSAxIHRvIGluZmluaXRheVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsYXJnZXN0TGV2ZWwgPSAxO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBsZXZlbCBpbiBtYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChsYXJnZXN0TGV2ZWwgPCBsZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhcmdlc3RMZXZlbCA9IGxldmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBlbmNvZGVVUklDb21wb25lbnQobWFwW2xldmVsXSk7XHJcbiAgICAgICAgICAgICAgICBpZihwKXtcclxuICAgICAgICAgICAgICAgICAgICBwID0gcC5yZXBsYWNlKC8lMkYvZywgR292SW5mby5hcGFjaGVFc2NhcGUpOyAvL2lzc3VlICM0NjlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFsbHBhcmFtZXRlcnNbbGV2ZWwgLSAxXSA9IHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXJnZXN0TGV2ZWw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxwYXJhbWV0ZXJzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxscGFyYW1ldGVyc1tpXSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxscGFyYW1ldGVycyA9IGFsbHBhcmFtZXRlcnMuc2xpY2UoMCwgbGFyZ2VzdExldmVsKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKGFsbHBhcmFtZXRlcnNbMF0gPT0gXCJcIil7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgYWxscGFyYW1ldGVycy5zcGxpY2UoMCwxKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKGFsbHBhcmFtZXRlcnNbMF0gPT0gXCJhcHBcIil7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgYWxscGFyYW1ldGVycy5zcGxpY2UoMCwxKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLm9yaWdpbiArIFwiL2FwcC9cIiArIGFsbHBhcmFtZXRlcnMuam9pbignLycpO1xyXG4gICAgICAgICAgICBpZiAobG9jYXRpb24uaHJlZiAhPSB1cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShtYXAsICcnLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZShtYXAsICcnLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzbmlwcGV0czoge30sXHJcbiAgICAgICAgZG9Ob3RLaWxsRGl2OiB0cnVlLFxyXG4gICAgICAgIHNldE92ZXJsYXk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9fJHRlbXAgPSBudWxsIDtcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1RlbXBsYXRlICYmIHRoaXMuQmFzZVJlcXVpcmVPYmplY3QudGVtcGxhdGVDYWNoZVt0aGlzLmxvYWRpbmdUZW1wbGF0ZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX18kdGVtcCA9ICQodGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXMubG9hZGluZ1RlbXBsYXRlXSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzWydvdmVybGF5Q2xhc3MnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kKCcuJyArIHRoaXNbJ292ZXJsYXlDbGFzcyddKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzWydvdmVybGF5Q2xhc3MnXSArICdcIj48L2Rpdj4nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX18kdGVtcCA9ICQoJzxkaXY+VmFsaWRhdGUgQXN5bmMgSW4gUHJvZ3Jlc3MgKHRoaXMubG9hZGluZ1RlbXBsYXRlID09IG51bGwpPC9kaXY+Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fXyRjaGlsZHJlbiA9IHRoaXMuJGVsLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX18kY2hpbGRyZW4uZGV0YWNoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZCh0aGlzLl9fJHRlbXApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlT3ZlcmxheTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzWydvdmVybGF5Q2xhc3MnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kKCcuJyArIHRoaXNbJ292ZXJsYXlDbGFzcyddKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZCh0aGlzLl9fJGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX18kdGVtcC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX18kdGVtcCA9IG51bGwgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWxpZGF0ZVZpZXc6IGZ1bmN0aW9uKGNhbGxiYWNrLCBlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldE92ZXJsYXkoKTtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFzeW5jKGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlT3ZlcmxheSgpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLmJpbmQodGhpcyksIGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlT3ZlcmxheSgpO1xyXG4gICAgICAgICAgICAgICAgZXJyb3IoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsaWRhdGVBc3luYzogZnVuY3Rpb24oY2FsbGJhY2ssIGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0ZUFzeW5jIGlzIGVtcHR5LCBvdmVycmlkZSBtZScpO1xyXG4gICAgICAgICAgICBjYWxsYmFjayh7fSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfa2lsbENoaWxkcmVuOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnZpZXdzU2Fjaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3c1NhY2tbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBjYWxscyBvbiByZW5kZXJWaWV3IG9yIGRlc3Ryb3lcclxuICAgICAgICBfdGVybWluYXRlQWxsQWN0aXZlWEhSczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl94aHJzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuX3hocnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feGhyc1tpXS5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5feGhycyA9IG51bGwgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfZ2V0UGFyYW1ldGVyczogZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgICAgIHZhciB1ID0gdXJsO1xyXG4gICAgICAgICAgICB2YXIgaCA9IHUuaW5kZXhPZihcIiNcIik7XHJcbiAgICAgICAgICAgIGlmIChoID49IDApIHtcclxuICAgICAgICAgICAgICAgIHUgPSB1LnN1YnN0cihoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaGFzUm9vdCA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbCA9IHUubGVuZ3RoOyBpbmRleCA8IGw7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh1W2luZGV4XSA9PSAnJicgfHwgdVtpbmRleF0gPT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVbaW5kZXhdID09ICc9Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc1Jvb3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcm9vdCA9IG51bGwgO1xyXG4gICAgICAgICAgICBpZiAoaGFzUm9vdCkge1xyXG4gICAgICAgICAgICAgICAgcm9vdCA9IHUuc3Vic3RyKDAsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgIHUgPSB1LnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RbMF0gPT0gXCIjXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByb290ID0gcm9vdC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcmFtUGFpcnMgPSB1LnNwbGl0KCcmJyk7XHJcbiAgICAgICAgICAgIHZhciBtYXAgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJhbVBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtUGFpcnNbaV0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHBhcmFtUGFpcnNbaV0uc3BsaXQoJz0nKTtcclxuICAgICAgICAgICAgICAgIG1hcFt0b2tlbnNbMF1dID0gdG9rZW5zWzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb290KSB7XHJcbiAgICAgICAgICAgICAgICBtYXBbJ3Jvb3QnXSA9IHJvb3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1hcDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIF9kaWZmOiBmdW5jdGlvbihvbGRNYXAsIG5ld01hcCkge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG5ld01hcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbGRNYXBbaV0gfHwgb2xkTWFwW2ldICE9IG5ld01hcFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZbaV0gPSBkZWNvZGVVUkkobmV3TWFwW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZbaV0gPSBuZXdNYXBbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIHNvbWV0aGluZyBkaXNhcHBlYXJlZFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG9sZE1hcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdNYXBbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBkaWZmW2ldID0gbnVsbCA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRpZmY7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRBcHBCYXNlVXJsOiBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICAgICAgLy92YXIgY29tcHV0ZWRVcmwgPSBbcmVxdWlyZS50b1VybCgnJyksIHVybF07XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwuc3Vic3RyKDYpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0QXBwQmFzZVVybFdPQ29udGV4dDogZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgICAgIHZhciBjb21wdXRlZFVybCA9IFt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wsICcvLycsIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgJy8nLCB1cmxdO1xyXG4gICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRVcmwuam9pbignJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKiogQHByaXZhdGUgKi9cclxuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld3NTYWNrID0ge307XHJcbiAgICAgICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XHJcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgICAgICB0aGlzLl9wYXJlbnQgPSBvcHRpb25zLl9wYXJlbnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uSGFzaENoYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLm9uKCdoYXNoY2hhbmdlLicgKyB0aGlzLmNpZCwgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZS5vcmlnaW5hbEV2ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdVUkwgPSB3aW5kb3cuZ292aW5mb19oYXNoID8gd2luZG93LmdvdmluZm9faGFzaCA6IG9yaWdpbmFsRXZlbnQubmV3VVJMO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvbGRVUkwgPSB3aW5kb3cuZ292aW5mb19sYXN0X2hhc2ggPyB3aW5kb3cuZ292aW5mb19sYXN0X2hhc2ggOiBvcmlnaW5hbEV2ZW50Lm9sZFVSTDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UGFyYW1ldGVycyA9IHRoaXMuX2dldFBhcmFtZXRlcnMobmV3VVJMKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2xkUGFyYW1ldGVycyA9IHRoaXMuX2dldFBhcmFtZXRlcnMob2xkVVJMKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMuX2RpZmYob2xkUGFyYW1ldGVycywgbmV3UGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZGlmZik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkhhc2hDaGFuZ2UoZGlmZik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIEdvdkluZm8uX3N0YXRlQ2hhbmdlUGF0aHMucHVzaCh0aGlzLnN0YXRlUGF0aCB8fCBbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgR292SW5mby5fc3RhdGVDaGFuZ2VDYWxsYmFja3MucHVzaCh0aGlzLm9uSGFzaENoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfLmJpbmRBbGwodGhpcywgJ3JlbmRlcicsICdkZXN0cm95Jyk7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyID0gXy53cmFwKHRoaXMucmVuZGVyLCBmdW5jdGlvbihyZW5kZXIsIGIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9iZWZvcmVSZW5kZXIoKTtcclxuICAgICAgICAgICAgICAgIHJlbmRlcihiKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFmdGVyUmVuZGVyKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBfLndyYXAodGhpcy5kZXN0cm95LCBmdW5jdGlvbihkZXN0cm95LCBiLCBjLCBkKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fYmVmb3JlRGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgZGVzdHJveShiLCBjLCBkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKiogQHByaXZhdGUgKi9cclxuICAgICAgICBfcmVuZGVyVmlldzogZnVuY3Rpb24oY2FsbGJhY2ssIGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGVybWluYXRlQWxsQWN0aXZlWEhScygpO1xyXG4gICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZ1bmN0aW9uKGh0bWwsIHByZWxvYWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSA/IGRhdGEgOiB7fTtcclxuICAgICAgICAgICAgICAgIGRhdGFbJ190aGlzJ10gPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgZGF0YVsnX29wdGlvbnMnXSA9IHRoaXMuX29wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICB0aGlzWydfcHJlbG9hZERhdGEnXSA9IHByZWxvYWREYXRhO1xyXG4gICAgICAgICAgICAgICAgZGF0YVsnX3ByZWxvYWREYXRhJ10gPSBwcmVsb2FkRGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwoXy50ZW1wbGF0ZShodG1sKShkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUgIT0gbnVsbCApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLkJhc2VSZXF1aXJlT2JqZWN0LnRlbXBsYXRlQ2FjaGVbdGhpcy50ZW1wbGF0ZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzWydwcmVsb2FkRGF0YUFzeW5jJ10oZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzKHRoaXMuQmFzZVJlcXVpcmVPYmplY3QudGVtcGxhdGVDYWNoZVt0aGlzLnRlbXBsYXRlXSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpLCBmdW5jdGlvbihlcnJvclJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICh0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXMuZXJyb3JUZW1wbGF0ZV0pID8gdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXMuZXJyb3JUZW1wbGF0ZV0gOiBcIkVSUk9SIGluIHByZWxvYWREYXRhQXN5bmNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyhzdHIsIGVycm9yUmVzcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFqYXhTdWNjZXNzID0gZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuQmFzZVJlcXVpcmVPYmplY3QuQ0FDSEVfVEVNUExBVEVTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkJhc2VSZXF1aXJlT2JqZWN0LnRlbXBsYXRlQ2FjaGVbdGhpcy50ZW1wbGF0ZV0gPSByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzWydwcmVsb2FkRGF0YUFzeW5jJ10oZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyhyZXNwb25zZSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcyksIGZ1bmN0aW9uKGVycm9yUmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICh0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXMuZXJyb3JUZW1wbGF0ZV0pID8gdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXMuZXJyb3JUZW1wbGF0ZV0gOiBcIkVSUk9SIGluIHByZWxvYWREYXRhQXN5bmNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Moc3RyLCBlcnJvclJlc3ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJwYWNraGFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy50ZW1wbGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogYWpheFN1Y2Nlc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCgndGVtcGxhdGUgWycgKyB0aGlzLnRlbXBsYXRlICsgJ10gZmFpbGVkIHRvIGxvYWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNbJ3ByZWxvYWREYXRhQXN5bmMnXShmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbC5odG1sKFwiRVJST1IgaW4gcHJlbG9hZERhdGFBc3luY1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKiBAb3ZlcnJpZGUgKi9cclxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xyXG4gICAgICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JlbmRlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xyXG4gICAgICAgIF9iZWZvcmVSZW5kZXI6IGZ1bmN0aW9uKCkge30sXHJcbiAgICAgICAgLyoqIEBwcml2YXRlICovXHJcbiAgICAgICAgX2JlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uKCkgey8vIGRvIGFsbCBleHRyYSBjbGVhbiB1cCBoZXJlXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5Hb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5pc0pTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICB2YXIgaXNKc29uID0gZmFsc2VcclxuICAgIHRyeSB7XHJcbiAgICAgICB2YXIganNvbiA9ICQucGFyc2VKU09OKGRhdGEpO1xyXG4gICAgICAgaXNKc29uID0gdHlwZW9mIGpzb24gPT09ICdvYmplY3QnIDtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIC8vICAgY29uc29sZS5lcnJvcignZGF0YSBpcyBub3QgSlNPTicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzSnNvbjtcclxufTtcclxuXHJcbi8vIHNldHMgQVBJIHVybCBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLCB1c2VkIGluIGJvdGggaGVhZGVyIGFuZCBmb290ZXJcclxuR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuYXBpVVJMdmFsID0gZnVuY3Rpb24oZWxlbSkge1xyXG4gIGNvbnN0IHggPSAkKGVsZW0pO1xyXG4gIGNvbnN0IHByZWZpeCA9ICdodHRwczovL2FwaS4nO1xyXG4gIGNvbnN0IHNsdWcgPSAnLmdvdmluZm8uZ292L2RvY3MnO1xyXG4gIHN3aXRjaCAod2luZG93LmxvY2F0aW9uLm9yaWdpbikge1xyXG4gICAgY2FzZSAnaHR0cHM6Ly93d3cuaW50LmdvdmluZm8uZ292JzpcclxuICAgICAgeC5hdHRyKCdocmVmJywgcHJlZml4ICsnaW50JyArIHNsdWcpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2h0dHBzOi8vY3VyYXRpb24uaW50LmdvdmluZm8uZ292JzpcclxuICAgICAgeC5hdHRyKCdocmVmJywgcHJlZml4ICsnaW50JyArIHNsdWcpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2h0dHBzOi8vd3d3LnFhLmdvdmluZm8uZ292JzpcclxuICAgICAgeC5hdHRyKCdocmVmJywgcHJlZml4ICsncWEnICsgc2x1Zyk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnaHR0cHM6Ly9jdXJhdGlvbi5xYS5nb3ZpbmZvLmdvdic6XHJcbiAgICAgIHguYXR0cignaHJlZicsIHByZWZpeCArJ3FhJyArIHNsdWcpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2h0dHBzOi8vd3d3LnN0YWdlLmdvdmluZm8uZ292JzogXHJcbiAgICAgIHguYXR0cignaHJlZicsIHByZWZpeCArJ3N0YWdlJyArIHNsdWcpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2h0dHBzOi8vY3VyYXRpb24uc3RhZ2UuZ292aW5mby5nb3YnOiBcclxuICAgICAgeC5hdHRyKCdocmVmJywgcHJlZml4ICsnc3RhZ2UnICsgc2x1Zyk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgZGVmYXVsdDogXHJcbiAgICAgIGJyZWFrO1xyXG4gIH1cclxufVxyXG5cclxuR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuZGNtaUhlYWQgPSBmdW5jdGlvbihkYXRhKSB7XHJcblxyXG4gICAgJChcIm1ldGFbbmFtZV49J2RjLiddXCIpLnJlbW92ZSgpO1xyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uc2V0QXR0cmlidXRlKFwicHJvZmlsZVwiLCBcImh0dHA6Ly9kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvMjAwOC8wOC8wNC9kYy1odG1sL1wiKTtcclxuXHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IGRhdGEuZGNNRDtcclxuICAgIGNvbnN0IHN1bW1hcnlNZXRhID0gZGF0YS5tZXRhZGF0YS5jb2x1bW5uYW1ldmFsdWVzZXQuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5jb2xuYW1lID09PSBcIlN1bW1hcnlcIilbMF07XHJcbiAgICBcclxuICAgIGxldCBkZXNjO1xyXG4gICAgc3VtbWFyeU1ldGEgIT09IHVuZGVmaW5lZCA/IGRlc2MgPSBzdW1tYXJ5TWV0YS5jb2x2YWx1ZSA6IGRlc2MgPSBcIk9mZmljaWFsIFB1YmxpY2F0aW9ucyBmcm9tIHRoZSBVLlMuIEdvdmVybm1lbnQgUHVibGlzaGluZyBPZmZpY2UuXCI7XHJcblxyXG4gICAgJChcIm1ldGFbcHJvcGVydHk9J29nOmRlc2NyaXB0aW9uJ11cIikuYXR0cignY29udGVudCcsIGRlc2MpO1xyXG4gICAgJChcIm1ldGFbbmFtZT0ndHdpdHRlcjpkZXNjcmlwdGlvbiddXCIpLmF0dHIoJ2NvbnRlbnQnLCBkZXNjKTtcclxuXHJcbiAgICBsZXQgYXV0aG9yO1xyXG4gICAgbWV0YWRhdGEuZ292ZXJubWVudEF1dGhvcnNbMV0gPT09IHVuZGVmaW5lZCA/IGF1dGhvciA9IG1ldGFkYXRhLmdvdmVybm1lbnRBdXRob3JzWzBdIDogYXV0aG9yID0gbWV0YWRhdGEuZ292ZXJubWVudEF1dGhvcnNbMV0gKyBcIiwgXCIgKyBtZXRhZGF0YS5nb3Zlcm5tZW50QXV0aG9yc1swXTtcclxuXHJcbiAgICBjb25zdCB0YWdzID0gW1xyXG4gICAgICAgIHtcIm5hbWVcIjpcImRjLnRpdGxlXCIsIFwiY29udGVudFwiOmRhdGEudGl0bGV9LFxyXG4gICAgICAgIHtcIm5hbWVcIjpcImRjLmFic3RyYWN0XCIsIFwiY29udGVudFwiOmRlc2N9LFxyXG4gICAgICAgIHtcIm5hbWVcIjpcImRjLmNyZWF0b3JcIiwgXCJjb250ZW50XCI6YXV0aG9yfSwgXHJcbiAgICAgICAge1wibmFtZVwiOlwiZGMuZGF0ZVwiLCBcImNvbnRlbnRcIjptZXRhZGF0YS5kYXRlSXNzdWVkfSxcclxuICAgICAgICB7XCJuYW1lXCI6XCJkYy5sYW5ndWFnZVwiLCBcImNvbnRlbnRcIjptZXRhZGF0YS5sYW5ndWFnZX0sXHJcbiAgICAgICAge1wibmFtZVwiOlwiZGMuaWRlbnRpZmllclwiLCBcImNvbnRlbnRcIjpkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSxcclxuICAgICAgICB7XCJuYW1lXCI6XCJkYy5wdWJsaXNoZXJcIiwgXCJjb250ZW50XCI6bWV0YWRhdGEucHVibGlzaGVyfSxcclxuICAgICAgICB7XCJuYW1lXCI6XCJkYy50eXBlXCIsIFwiY29udGVudFwiOlwiR292ZXJubWVudFwifSxcclxuICAgICAgICB7XCJuYW1lXCI6XCJkYy5zb3VyY2VcIiwgXCJjb250ZW50XCI6XCJnb3ZpbmZvLmdvdlwifSxcclxuICAgICAgICB7XCJuYW1lXCI6XCJkYy5mb3JtYXRcIiwgXCJjb250ZW50XCI6XCJ0ZXh0L2h0bWxcIn0sXHJcbiAgICBdO1xyXG4gICAgdGFncy5yZXZlcnNlKCk7XHJcbiAgICBcclxuICAgIHRhZ3MuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xyXG4gICAgICAgIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBlbGVtZW50Lm5hbWUpO1xyXG4gICAgICAgIG1ldGEuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCBlbGVtZW50LmNvbnRlbnQpO1xyXG4gICAgICAgICQoXCJtZXRhW25hbWU9J2F1dGhvciddXCIpLmFmdGVyKG1ldGEpO1xyXG4gICAgfSk7XHJcblxyXG59XHJcblxyXG5Hb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5zaGFyZUNvbnRlbnQgPSBmdW5jdGlvbih0aXRsZSkge1xyXG5cclxuICB2YXIgcGFnZVVybCA9IGVuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5VUkwpO1xyXG4gIHZhciBwbGFpblVybCA9IGRvY3VtZW50LlVSTDtcclxuICB2YXIgdHJ1bmNhdGVkVGl0bGUgPSBkb2N1bWVudC50aXRsZS5zcGxpdCgnIHwgJykuc2hpZnQoKTtcclxuICB2YXIgVVJMcHJlZml4ID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG5cclxuICBpZiAodGhpcy4kZWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgJGhlYWRpbmcgPSB0aGlzLiRlbC5maW5kKCQoXCJoMS5wYWdlLXRpdGxlXCIpKS5odG1sKCkgKyBcIiB8IEdvdkluZm9cIjtcclxuICAgIC8vIGFsdGVybmF0aXZlbHksIHRoZXJlJ3MgdmFuaWxsYSBKUywganVzdCBub3RlIHRoYXQgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2Vzbid0IHdvcmsgaW4gSUU4OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicGFnZS10aXRsZVwiKVswXS5pbm5lckhUTUwgIFxyXG4gIH1cclxuICBpZiAocGxhaW5VcmwuaW5kZXhPZignL2FwcC9zZWFyY2gnKSAhPT0gLTEgfHwgcGxhaW5VcmwuaW5kZXhPZignL2FwcC9icm93c2UnKSAhPT0gLTEgfHwgcGxhaW5VcmwuaW5kZXhPZignL2FwcC9kZXRhaWxzJykgIT09IC0xIHx8IHBsYWluVXJsLmluZGV4T2YoJy9hcHAvY2ZycGFydHMnKSAhPT0gLTEgKSB7XHJcbiAgICAvLyBsb2FkIHRoZSByZWd1bGFyIHRpdGxlIGludG8gbWV0YWRhdGEgb24gcGFnZSBsb2FkLCB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gd2hhdCB0aGUgdXNlciBjbGlja3Mgb25cclxuICAgICR0aXRsZSA9IGRvY3VtZW50LnRpdGxlO1xyXG4gICAgJHBsYWluVGl0bGUgPSB0cnVuY2F0ZWRUaXRsZTtcclxuICB9IGVsc2UgaWYgKHBsYWluVXJsLmluZGV4T2YoJy9hcHAvZnJ0b2MnKSAhPT0gLTEgKSB7XHJcbiAgICAkdGl0bGUgPSB0aXRsZSArIFwiIHwgR292SW5mb1wiO1xyXG4gICAgJHBsYWluVGl0bGUgPSB0aXRsZTtcclxuICB9IGVsc2UgaWYgKCRoZWFkaW5nID09ICd1bmRlZmluZWQgfCBHb3ZJbmZvJykge1xyXG4gICAgLy8gY2hlY2tzIGlmIHRoZXJlIGlzbid0IGFuIGgxLnBhZ2UtdGl0bGUsIGFuZCBpZiBub3QganVzdCB1c2VzIHdoYXQgRHJ1cGFsIHByb3ZpZGVkLiBIb21lcGFnZSBoYXMgdGhpcyB1c2UgY2FzZS5cclxuICAgICR0aXRsZSA9IGRvY3VtZW50LnRpdGxlO1xyXG4gICAgJHBsYWluVGl0bGUgPSB0cnVuY2F0ZWRUaXRsZTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gYWxsIG90aGVyIHBhZ2VzLCBtb3N0bHkgYXBwLCB1c2VzIHRoZSBoMS5wYWdlLXRpdGxlIGFzIGl0J3MgZG9jdW1lbnQgdGl0bGVcclxuICAgIGRvY3VtZW50LnRpdGxlID0gJGhlYWRpbmc7XHJcbiAgICAkdGl0bGUgPSAkaGVhZGluZztcclxuICAgIC8vIHJlbW92ZXMgdGhlIHBpcGUgYnJlYWsgZm9yIHR3aXR0ZXIgcXVlcnkgc3RyaW5nXHJcbiAgICAkcGxhaW5UaXRsZSA9ICRoZWFkaW5nLnNwbGl0KCcgfCAnKS5zaGlmdCgpO1xyXG4gIH1cclxuXHJcbiAgLy9idWlsZHMgb3V0IG1ldGFkYXRhIGZvciBhbGwgcGFnZXMgb24gaW5pdGlhbCBsb2FkXHJcblxyXG4gICQoJ21ldGFbcHJvcGVydHk9XCJvZzp0aXRsZVwiXScpLmF0dHIoJ2NvbnRlbnQnLCAkcGxhaW5UaXRsZSk7XHJcbiAgJCgnbWV0YVtwcm9wZXJ0eT1cIm9nOnVybFwiXScpLmF0dHIoJ2NvbnRlbnQnLCBwYWdlVXJsKTtcclxuXHJcbiAgJCgnbWV0YVtuYW1lPVwidHdpdHRlcjp0aXRsZVwiXScpLmF0dHIoJ2NvbnRlbnQnLCAkcGxhaW5UaXRsZSk7XHJcbiAgJCgnbWV0YVtuYW1lPVwidHdpdHRlcjp1cmxcIl0nKS5hdHRyKCdjb250ZW50JywgcGFnZVVybCk7XHJcblxyXG4gICQoXCJhI2ZhY2Vib29rLXNoYXJlXCIpLmF0dHIoJ2hyZWYnLCBcImh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZXIucGhwP3U9XCIgKyBwbGFpblVybCk7XHJcbiAgJChcImEjdHdpdHRlci1zaGFyZVwiKS5hdHRyKCdocmVmJywgXCJodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC90d2VldD90ZXh0PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KCRwbGFpblRpdGxlKSArIFwiJnVybD1cIiArIHBhZ2VVcmwpO1xyXG4gIC8vIGVtYWlsIHNoYXJlcyBvbiBEcnVwYWwgcGFnZXMgdXNlcyBwbGFpbmx5IGZvcm1hdHRlZCBVUkxzICAgIFxyXG4gICQoXCJhI2VtYWlsLXNoYXJlXCIpLmF0dHIoJ2hyZWYnLCBcIm1haWx0bzo/c3ViamVjdD1cIiArICR0aXRsZSArIFwiJmJvZHk9XCIgKyBwYWdlVXJsKTtcclxuICAvLyBlbWFpbCBzaGFyZSBidXR0b24gb24gc2VhcmNoIHBhZ2UgbmVlZHMgZnVsbHkgZW5jb2RlZCBVUkxcclxuICAkKFwiYSNlbWFpbC1zaGFyZS1zZWFyY2hcIikuYXR0cignaHJlZicsIFwibWFpbHRvOj9zdWJqZWN0PVwiICsgJHRpdGxlICsgXCImYm9keT1cIiArIHBhZ2VVcmwpO1xyXG5cclxuICAkKCcuaGVhZGVyX19zaGFyZS1pY29ucyBhLCAuc2VhcmNoX19zaGFyZS1pY29ucyBhJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBPbiB0b3AtbGV2ZWwgYW5kIHNlYXJjaCBwYWdlcywgY2xpY2sgZXZlbnQgY2xlYXJzIG91dCBkYXRhIGFuZCByZWJ1aWxkcy4gRG9lcyBub3QgcmVmZXJlbmNlIGdsb2JhbCB2YXJpYWJsZXMgYmVjYXVzZSBvZiBob3cgdG9wLWxldmVsIC9hcHAvIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHJlbmRlciBtZXRob2RzLlxyXG4gICAgJCgnYSNmYWNlYm9vay1zaGFyZScpLnJlbW92ZUF0dHIoJ2hyZWYnKS5hdHRyKCdocmVmJywgXCJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyLnBocD91PVwiICsgZG9jdW1lbnQuVVJMKTtcclxuICAgICQoJ2EjdHdpdHRlci1zaGFyZScpLnJlbW92ZUF0dHIoJ2hyZWYnKS5hdHRyKCdocmVmJywgXCJodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC90d2VldD90ZXh0PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LnRpdGxlLnNwbGl0KCcgfCAnKS5zaGlmdCgpKSArIFwiJnVybD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5VUkwpKTtcclxuICAgIC8vIGVtYWlsIHNoYXJlcyBvbiBEcnVwYWwgcGFnZXMgdXNlcyBwbGFpbmx5IGZvcm1hdHRlZCBVUkxzICAgIFxyXG4gICAgJCgnYSNlbWFpbC1zaGFyZScpLnJlbW92ZUF0dHIoJ2hyZWYnKS5hdHRyKCdocmVmJywgXCJtYWlsdG86P3N1YmplY3Q9XCIgKyBkb2N1bWVudC50aXRsZSArIFwiJmJvZHk9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuVVJMKSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbkdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLmltZ01vZGFsRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gIGNvbnN0ICRqcGVnID0gJGN1cnJlbnRUYXJnZXRbMF0uZ2V0QXR0cmlidXRlKFwiZGF0YS1ocmVmXCIpO1xyXG4gIGNvbnN0ICR0aXRsZTEgPSAkY3VycmVudFRhcmdldFswXS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRpdGxlXCIpO1xyXG4gIGNvbnN0ICRjb250ZW50X2RldGFpbHMgPSAkY3VycmVudFRhcmdldFswXS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9yaWdpblwiKTtcclxuICAvLyBhZGRzIGRlc2NyaXB0aW9uIGluIG1vZGFsIGFuZCBpbWcgc3JjXHJcbiAgJChcIiNpbWdQcmV2aWV3LWRlc2NcIikuaHRtbCgkdGl0bGUxKTtcclxuICAkKFwiI2ltZ1ByZXZpZXctdGh1bWJcIikuYXR0cignc3JjJywgJGpwZWcpO1xyXG4gICQoXCIjaW1nUHJldmlldy10aHVtYmxpbmtcIikuYXR0cignaHJlZicsICRqcGVnKTtcclxuICAkKFwiI2ltZ1ByZXZpZXctb3JpZ2luXCIpLmF0dHIoJ2hyZWYnLCAkY29udGVudF9kZXRhaWxzKTtcclxufVxyXG5cclxuR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuc2hhcmVNb2RhbERhdGEgPSBmdW5jdGlvbigpIHtcclxuICB2YXIgJHBhY2thZ2VUaXRsZSA9ICRjdXJyZW50VGFyZ2V0LmF0dHIoXCJhZGR0aGlzOnRpdGxlXCIpO1xyXG5cclxuICB2YXIgJHBhY2thZ2VVUkwgPSBlbmNvZGVVUklDb21wb25lbnQoJGN1cnJlbnRUYXJnZXQuYXR0cihcImFkZHRoaXM6dXJsXCIpKTtcclxuICB2YXIgJHBsYWluVVJMID0gJGN1cnJlbnRUYXJnZXQuYXR0cihcImFkZHRoaXM6dXJsXCIpO1xyXG4gIHZhciBVUkxwcmVmaXggPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcblxyXG4gIC8vIGNsZWFycyBtZXRhZGF0YSBzbyB0aGF0IG5ldyBkYXRhIGNhbiBiZSBhZGRlZFxyXG4gICQodGhpcykuZW1wdHkoKTtcclxuXHJcbiAgLy8gYWRkcyB0aXRsZSB0byBtb2RhbCBib3hcclxuICAkKCcjc2hhcmUtbW9kYWxfX3RpdGxlJykuaHRtbCgnPHA+JyArICRwYWNrYWdlVGl0bGUgKyAnPC9wPicpO1xyXG5cclxuICAvLyBidWlsZHMgb3V0IGlubmVyIG1vZGFsIGJveCBkYXRhXHJcbiAgJCgnYSNzaGFyZS1tb2RhbF9faW5uZXItLWZiJykuYXR0cignaHJlZicsIFwiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci5waHA/dT1cIiArIFVSTHByZWZpeCArICRwYWNrYWdlVVJMKTtcclxuICAkKCdhI3NoYXJlLW1vZGFsX19pbm5lci0tdHdpdHRlcicpLmF0dHIoJ2hyZWYnLCBcImh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3VybD1cIiArIFVSTHByZWZpeCArICRwYWNrYWdlVVJMICsgXCImdGV4dD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCgkcGFja2FnZVRpdGxlKSk7XHJcbiAgJChcImEjc2hhcmUtbW9kYWxfX2lubmVyLS1lbWFpbFwiKS5hdHRyKCdocmVmJywgXCJtYWlsdG86P3N1YmplY3Q9XCIgKyAkcGFja2FnZVRpdGxlICsgXCImYm9keT1cIiArIFVSTHByZWZpeCArICRwYWNrYWdlVVJMKTtcclxuICAkKFwiYSNzaGFyZS1tb2RhbF9faW5uZXItLWNvcHlcIikuYXR0cignY29weTp1cmwnLCBVUkxwcmVmaXggKyAkcGxhaW5VUkwpO1xyXG59XHJcblxyXG5Hb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5jb3B5U2hhcmVVcmwgPSBmdW5jdGlvbihlLCBjb3BpZWRFbGVtZW50LCBhbGVydCA9IFwiTGluayBDb3BpZWRcIikge1xyXG4gICAgJGN1cnJlbnRMaW5rVGFyZ2V0ID0gJChlLnRhcmdldCk7XHJcbiAgXHJcbiAgICB2YXIgZ2hvc3RDb3B5ID0gZnVuY3Rpb24oY29weVRhcmdldCwgaW5wdXRMb2NhdGlvbikge1xyXG4gICAgICB2YXIgJHRlbXAgPSAkKFwiPGlucHV0IGlkPSdnaG9zdCc+XCIpO1xyXG4gICAgICAvLyBwcmVwZW5kcyBnaG9zdCBpbnB1dCB0byBmdW5jdGlvbidzIHNlbGVjdGVkIGVsZW1lbnRcclxuICAgICAgJChpbnB1dExvY2F0aW9uKS5wcmVwZW5kKCR0ZW1wKTtcclxuICAgICAgLy8gc2V0IHZhbHVlIGF0dHJpYnV0ZSB0byBVUkxcclxuICAgICAgJHRlbXAuYXR0cihcInZhbHVlXCIsIGNvcHlUYXJnZXQpO1xyXG4gICAgICAvLyBpT1MgPD0xMiBmaXggZm9yIHNlbGVjdGluZyB2YWx1ZVxyXG4gICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaXBhZHxpcGhvbmUvaSkpIHtcclxuICAgICAgICB2YXIgaW5wdXQgPSAkdGVtcC5nZXQoMCk7XHJcbiAgICAgICAgLy8gc2F2ZSBpbml0aWFsIHZhbHVlc1xyXG4gICAgICAgIHZhciBlZGl0YWJsZSA9IGlucHV0LmNvbnRlbnRFZGl0YWJsZTtcclxuICAgICAgICB2YXIgcmVhZE9ubHkgPSBpbnB1dC5yZWFkT25seTtcclxuICAgICAgICAvLyBzZXQgY29udGVudEVkaXRhYmxlIGFuZCByZWFkT25seSByZXF1aXJlZCBieSBpT1NcclxuICAgICAgICBpbnB1dC5jb250ZW50RWRpdGFibGUgPSAndHJ1ZSc7XHJcbiAgICAgICAgaW5wdXQucmVhZE9ubHkgPSAnZmFsc2UnO1xyXG4gICAgICAgIC8vIHNlbGVjdHMgaW5wdXQgcmFuZ2VcclxuICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhpbnB1dCk7XHJcbiAgICAgICAgLy8gYWRkcyBpdCB0byB3aW5kb3dcclxuICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIC8vIHNldCBzZWxlY3Rpb24gcmFuZ2UsIGhpZ2ggbnVtYmVyIGp1c3QgdG8gYmUgY2VydGFpbiBpdCdzIHNlbGVjdGVkXHJcbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5OTk5KTtcclxuICAgICAgICAvLyByZXN0b3JlIHByZXZpb3VzIHZhbHVlcyBmb3IgZWRpdC9yZWFkXHJcbiAgICAgICAgaW5wdXQuY29udGVudEVkaXRhYmxlID0gZWRpdGFibGU7XHJcbiAgICAgICAgaW5wdXQucmVhZE9ubHkgPSByZWFkT25seTsgLy8gcmVhZE9ubHkgYWxzbyBwcmV2ZW50cyB0aGUga2V5Ym9hcmQgZnJvbSBxdWlja2x5IGFwcGVhcmluZ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICR0ZW1wLnZhbChjb3B5VGFyZ2V0KS5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAgIC8vIHJlbW92ZSBpbnB1dCBhZnRlciBjb3B5aW5nIGNvbnRlbnRzXHJcbiAgICAgICR0ZW1wLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbW1vbkJ0biA9ICRjdXJyZW50TGlua1RhcmdldFswXS5jbGFzc0xpc3QuY29udGFpbnMoXCJjb3B5QnRuXCIpO1xyXG4gICAgY29uc3QgY29sbGVjdGlvbkhlYWRlckJ0biA9ICRjdXJyZW50TGlua1RhcmdldFswXS5pZCAgPT0gXCJjb2xsZWN0aW9uLWxpbmstc2hhcmVcIjtcclxuICAgIGNvbnN0IGNvcHlBbGVydCA9IGA8c3BhbiBjbGFzcz0nbGluay1jb3B5LWFsZXJ0Jz4ke2FsZXJ0fTwvc3Bhbj5gO1xyXG4gICAgXHJcbiAgICBsZXQgdmFsdWU7XHJcblxyXG4gICAgaWYgKGNvbGxlY3Rpb25IZWFkZXJCdG4gfHwgJGN1cnJlbnRMaW5rVGFyZ2V0WzBdLnBhcmVudEVsZW1lbnQuaWQgPT0gXCJjb2xsZWN0aW9uLWxpbmstc2hhcmVcIikge1xyXG4gICAgICAgIHZhbHVlID0gbG9jYXRpb24uaHJlZjtcclxuICAgICAgICBnaG9zdENvcHkodmFsdWUsICcjaG9tZWhlYWRlcklkJyk7XHJcbiAgICAgICAgJChcIjxzcGFuIGNsYXNzPSdsaW5rLWNvcHktYWxlcnQnPkxpbmsgQ29waWVkPC9zcGFuPlwiKS5wcmVwZW5kVG8oXCJib2R5XCIpO1xyXG4gICAgfSBlbHNlIGlmKGNvbW1vbkJ0bikge1xyXG4gICAgICAgIGdob3N0Q29weShjb3BpZWRFbGVtZW50LCAnYm9keScpO1xyXG4gICAgICAgICQoY29weUFsZXJ0KS5wcmVwZW5kVG8oXCIuY29weS1jb250YWluZXJcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gJChcIiNzaGFyZS1tb2RhbF9faW5uZXItLWNvcHlcIikuYXR0cignY29weTp1cmwnKTtcclxuICAgICAgICBnaG9zdENvcHkodmFsdWUsICcuc2hhcmUtbW9kYWxfX2lubmVyJyk7XHJcbiAgICAgICAgJChcIi5zaGFyZS1tb2RhbF9faW5uZXIgaDJcIikuYmVmb3JlKFwiPHNwYW4gY2xhc3M9J2xpbmstY29weS1hbGVydC0tbW9kYWwnPkxpbmsgQ29waWVkPC9zcGFuPlwiKTtcclxuICAgIH1cclxuICAgICRjdXJyZW50TGlua1RhcmdldC5mb2N1cygpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkgeyAkKHRoaXMpLnJlbW92ZSgpOyB9XHJcbiAgICAvLyByZW1vdmVzIGNvcHkgYWxlcnQgZGl2LCBzbG93IGZhZGVcclxuICAgIGNvbnN0IGFsZXJ0TWVzc2FnZXMgPSBbXCIubGluay1jb3B5LWFsZXJ0LS1tb2RhbFwiLCBcIi5saW5rLWNvcHktYWxlcnRcIl07XHJcbiAgICBhbGVydE1lc3NhZ2VzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgJCh4KS5kZWxheSg4MDApLmZhZGVPdXQoMTIwMCwgXCJsaW5lYXJcIiwgY29tcGxldGUpO1xyXG4gICAgfSk7ICAgXHJcbn1cclxuXHJcbiAgICAvKiogVXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2YgJC5hamF4IHRvIGdldCBkYXRhXHJcbiogVGhpcyB3aWxsIGVuc3VyZSBwcm9wZXIgaGFuZGxpbmcgb2YgeGhyIC0tXHJcbiogSWYgdGhlIHZpZXcgaXMgZGVzdHJveWVkIGJlZm9yZSB4aHIgY29tcGxldGVzLCBpdCB3aWxsIGJlIGFib3J0ZWQgYW5kIGFueSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQuXHJcbiogQGV4cG9ydCB7Kn1cclxuKiBAcGFyYW0ge3N0cmluZ30gdXJsIHRvIGJlIHBhc3NlZCBpbiB0aGUgYWpheCBjYWxsXHJcbiogQHBhcmFtIHtmdW5jdGlvbn0gc3VjY2VzcyBjYWxsYmFjayBvbiBzdWNjZXNzIG9mIHRoZSB4aHIgY2FsbFxyXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGVycm9yIGNhbGxiYWNrIG1ldGhvZCBvbiBlcnJvciBvZiB0aGUgeGhyIGNhbGxcclxuKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIG9wdGlvbnMgc3VjaCBhcyB0eXBlLCBkYXRhLCBldGMuLlxyXG4qIEBleGFtcGxlIHRoaXMuZ2V0SlNPTignL3NvbWVVcmwnLCBmdW5jdGlvbihkYXRhKXtcclxuICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG4qL1xyXG4gICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuZ2V0SlNPTiA9IGZ1bmN0aW9uKHVybCwgc3VjY2VzcywgZXJyb3IsIGRhdGEsIHR5cGUsIGV4dHJhKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl94aHJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3hocnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQsICovKjsgcT0wLjAxXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgdHlwZTogdHlwZSA/IHR5cGUgOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9IHR5cGUgPyB0eXBlIDogXCJQT1NUXCI7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlID0gXCJqc29uXCI7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnByb2Nlc3NEYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0cmEpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gZXh0cmEgJiYgZXh0cmEuaGVhZGVycyA/IGV4dHJhLmhlYWRlcnMgOiBvcHRpb25zLmhlYWRlcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRyYSAmJiBleHRyYS50aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMudGltZW91dCA9IGV4dHJhLnRpbWVvdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4aHIgPSAkLmFqYXgob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5feGhycy5wdXNoKHhocik7XHJcbiAgICAgICAgcmV0dXJuIHhocjtcclxuICAgIH1cclxuICAgIDtcclxuICAgIC8qKiBAZXhwb3J0IHtzdHJpbmd9ICovXHJcbiAgICBHb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5wb3N0SlNPTiA9IGZ1bmN0aW9uKHVybCwgc3VjY2VzcywgZXJyb3IsIGRhdGEsIHR5cGUsIGV4dHJhKSB7XHJcbiAgICAgICAgdGhpcy5nZXRKU09OKHVybCwgc3VjY2VzcywgZXJyb3IsIGRhdGEsIHR5cGUsIGV4dHJhKTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIC8qKiBAZXhwb3J0IHtzdHJpbmd9ICovXHJcbiAgICBHb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5lcnJvclRlbXBsYXRlID0gbnVsbCA7XHJcbiAgICAvKiogQGV4cG9ydCB7c3RyaW5nfSAqL1xyXG4gICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUubG9hZGluZ1RlbXBsYXRlID0gbnVsbCA7XHJcbiAgICAvKiogQGV4cG9ydCB7ZnVuY3Rpb24oc3RyaW5nKTpzdHJpbmd9ICovXHJcbiAgICBHb3ZJbmZvLkJhc2VWaWV3LnByb3RvdHlwZS5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy51c2VTdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZVBhcmFtZXRlcnMocGFyYW1ldGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhc2ggPSB0aGlzLnVzZUhhc2ggPyBsb2NhdGlvbi5oYXNoIDogbG9jYXRpb24uc2VhcmNoO1xyXG4gICAgICAgIHZhciBoYXNSb290ID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGwgPSBoYXNoLmxlbmd0aDsgaW5kZXggPCBsOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoYXNoW2luZGV4XSA9PSAnJicgfHwgaGFzaFtpbmRleF0gPT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNoW2luZGV4XSA9PSAnPScpIHtcclxuICAgICAgICAgICAgICAgIGhhc1Jvb3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoYXNSb290KSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIgPT0gJ3Jvb3QnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IGhhc2guc3Vic3RyKDAsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByb290WzBdID09IFwiI1wiID8gcm9vdC5zdWJzdHIoMSkgOiByb290O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoLnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGFyYW1zID0gaGFzaC5zcGxpdCgnJicpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdG9rZW5zID0gcGFyYW1zW2ldLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgICAgIGlmICh0b2tlbnNbMF0gPT0gcGFyYW1ldGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodG9rZW5zWzFdKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5zWzFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsIDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gKiBZb3UgY2FuIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgVXJsIHBhcmFtZXRlclxyXG4gKiBAZXhhbXBsZSB0aGlzLnNldFBhcmFtZXRlcigncScsICduYW1lPVwidGVzdFwiJyk7XHJcbiAqIEBleHBvcnQge2Z1bmN0aW9uKHN0cmluZyxzdHJpbmcpfVxyXG5cclxuKi9cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLnNldFBhcmFtZXRlciA9IGZ1bmN0aW9uKHBhcmFtZXRlciwgdmFsdWUsIHJlcGxhY2VTdGF0ZSkge1xyXG4gICAgICAgIC8vICAgICAgICAgaWYodGhpcy51c2VTdGF0ZSl7XHJcbiAgICAgICAgLy8gICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGxvY2F0aW9uLmhhc2ggPSB0aGlzLl9nZXROZXdIYXNoKGhhc2gsIHBhcmFtZXRlciwgdmFsdWUpOyAgICAgICAgICAgIFxyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIHZhciBtYXAgPSB7fTtcclxuICAgICAgICBtYXBbcGFyYW1ldGVyXSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycyhtYXAsIHJlcGxhY2VTdGF0ZSk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICAvKipcclxuICogWW91IGNhbiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IHBhcmFtZXRlciBtYXAgdG8gdXJsLCB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2V0IG11bHRpcGxlIHdoaWxlIHNldHRpbmcgdXJsIGp1c3Qgb25jZS5cclxuICogQGV4YW1wbGUgdGhpcy5zZXRQYXJhbWV0ZXJzKHsgYSA6ICdhJywgYiA6ICdiJ30pO1xyXG4gKiBAZXhwb3J0IHtmdW5jdGlvbihPYmplY3QpfVxyXG5cclxuKi9cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLnNldFBhcmFtZXRlcnMgPSBmdW5jdGlvbihtYXAsIHJlcGxhY2VTdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGVQYXJhbWV0ZXJzKG1hcCwgcmVwbGFjZVN0YXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbG9jYXRpb24uaGFzaDtcclxuICAgICAgICAgICAgZm9yICh2YXIgcGFyYW1ldGVyIGluIG1hcCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0TmV3SGFzaChyZXN1bHQsIHBhcmFtZXRlciwgbWFwW3BhcmFtZXRlcl0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVwbGFjZVN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5oYXNoID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCAsIG51bGwgLCByZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuX2dldE5ld0hhc2ggPSBmdW5jdGlvbihoYXNoLCBwYXJhbWV0ZXIsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZW5jb2RlVVJJKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhc1Jvb3QgPSB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbCA9IGhhc2gubGVuZ3RoOyBpbmRleCA8IGw7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgaWYgKGhhc2hbaW5kZXhdID09ICcmJyB8fCBoYXNoW2luZGV4XSA9PSAnPycpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc2hbaW5kZXhdID09ICc9Jykge1xyXG4gICAgICAgICAgICAgICAgaGFzUm9vdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJvb3QgPSBcIlwiO1xyXG4gICAgICAgIGlmIChoYXNSb290KSB7XHJcbiAgICAgICAgICAgIHJvb3QgPSBoYXNoLnN1YnN0cigwLCBpbmRleCArIDEpO1xyXG4gICAgICAgICAgICBoYXNoID0gaGFzaC5zdWJzdHIoaW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlciA9PSAncm9vdCcpIHtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSAnIycgKyB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKGhhc2ggJiYgaGFzaCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wICs9ICc/JyArIGhhc2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwYXJhbXMgPSBoYXNoLnNwbGl0KCcmJyk7XHJcbiAgICAgICAgaWYgKHBhcmFtc1swXSA9PSAnJykge1xyXG4gICAgICAgICAgICBwYXJhbXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlcGxhY2VkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKTtcclxuICAgICAgICAgICAgaWYgKHRva2Vuc1swXSA9PSBwYXJhbWV0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAnJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gcGFyYW1ldGVyICsgJz0nICsgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXBsYWNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlcGxhY2VkICYmIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtZXRlciArICc9JyArIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5vRW1wdHkgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgbm9FbXB0eS5wdXNoKHBhcmFtc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRlbXAgPSByb290O1xyXG4gICAgICAgIGlmIChub0VtcHR5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGVuZHNXaXRoUXVlc3Rpb25PckFtcGVyc2FudCA9IHRlbXAgJiYgdGVtcC5sZW5ndGggPiAwICYmICh0ZW1wW3RlbXAubGVuZ3RoIC0gMV0gPT0gJz8nIHx8IHRlbXBbdGVtcC5sZW5ndGggLSAxXSA9PSAnJicpO1xyXG4gICAgICAgICAgICB0ZW1wICs9IChlbmRzV2l0aFF1ZXN0aW9uT3JBbXBlcnNhbnQgPyAnJyA6ICc/JykgKyBub0VtcHR5LmpvaW4oJyYnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRlbXA7XHJcbiAgICB9XHJcbiAgICAvKiogRGVzdHJveXMgdmlldy4gUmVtb3ZlcyBhbGwgaGFuZGxlcyBmcm9tIHBhcmVudCwgcmVtb3ZlcyBhbGwgcmVuZGVyZWQgRE9NIGVsZW1lbnRzIChpbmNsdWRpbmcgdGhpcy4kZWwpXHJcbiogSWYgdGhlcmUgYW55IHhociBpbiBwcm9ncmVzcyBjcmVhdGVkIGJ5IHRoaXMuZ2V0SlNPTiwgdGhleSB3aWxsIGJlIGFib3J0ZWQuIEJhY2tib25lIGV2ZW50cyBhcmUgdW5kZWxlZ2F0ZWQuXHJcbiogQHRvZG8gT3B0aW9uIG5vdCB0byByZW1vdmUgcGFyZW50IGRpdlxyXG4qIEBmaXJlcyBCYXNlVmlldyNkZXN0cm95XHJcbiogQGV4cG9ydCB7ZnVuY3Rpb24oKX0gKi9cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBraWxsIG9mZiBhbGwgcmVnaXN0ZXJlZCB4aHJzIHRvIHByZXZlbnQgc2lkZSBlZmZlY3RzXHJcbiAgICAgICAgdGhpcy5fdGVybWluYXRlQWxsQWN0aXZlWEhScygpO1xyXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBkZXN0cnVjdGlvbiBvZiBhbGwgY2hpZGxyZW4uXHJcbiAgICAgICAgdGhpcy5fa2lsbENoaWxkcmVuKCk7XHJcbiAgICAgICAgaWYgKHRoaXMub25IYXNoQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgICQod2luZG93KS5vZmYoJ2hhc2hjaGFuZ2UuJyArIHRoaXMuY2lkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCAmJiB0aGlzLl9wYXJlbnQudmlld3NTYWNrW3RoaXMuY2lkXSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50LnZpZXdzU2Fja1t0aGlzLmNpZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJGVsLnJlbW92ZURhdGEoKS51bmJpbmQoKTtcclxuICAgICAgICBpZiAodGhpcy5kb05vdEtpbGxEaXYpIHtcclxuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkZXN0cm95JywgdGhpcyk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICAvKipcclxuKiBSZW5kZXJzIFZpZXcgaW50byBkZXNpcmVkIERPTSBlbGVtZW50IChwcm92aWRlZCBpdCBpcyBzZXQgcHJpb3Igd2l0aCBiYWNrYm9uZSdzIHNldEVsZW1lbnQoZWwpIClcclxuKiBEZWZpbmUgdGVtcGxhdGUgZmllbGQgd2l0aCB0aGUgcGF0aCB0byB5b3VyIGh0bWwgdGVtcGxhdGUgYW5kIGl0IHdpbGwgYmUgcmVuZGVyZWQgdGhlblxyXG4qIElmIHlvdSBkbyBub3QgZGVmaW5lIHRlbXBsYXRlIGZpZWxkLCB0aGlzIG1ldGhvZCB3aWxsIG5vdCByZW5kZXIgdGVtcGxhdGUgYnV0IGdvZXMgZGlyZWN0bHkgdG8gcmVuZGVyKClcclxuKiAocmVuZGVyKCkgZXhlY3V0ZXMgbGFzdCwgcmVncmFkbGVzcyBvZiB3aGV0aGVyIHRoZSB0ZW1wbGF0ZSBpcyBwcmVzZW50IG9yIG5vdCApXHJcbiogQGV4YW1wbGVcclxuTXlWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcclxuICAgdGVtcGxhdGUgOiAndGVtcGxhdGVzL015Vmlldy5odG1sJ1xyXG59KTtcclxuXHJcbnZhciBteVZpZXcgPSBuZXcgTXlWaWV3KCk7XHJcbm15Vmlldy5zZXRFbGVtZW50KCQoJyNteUVsZW1lbnQnKSkucmVuZGVyVmlldygpO1xyXG5cclxuQGV4cG9ydCB7Kn0gKi9cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLndlYnBhY2toYWNrID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIC8vdmFyIHRlbXBsYXRlID0gcmVxdWlyZShvcHRpb25zLnVybCk7XHJcbiAgICAgICAgLy9vcHRpb25zLnN1Y2Nlc3ModGVtcGxhdGUpO1xyXG4gICAgICAgIC8vIHZhciByZXEgPSByZXF1aXJlLmNvbnRleHQoXCIuL1wiLCB0cnVlLCAvXi4qXFwuaHRtbCQvKTtcclxuICAgICAgICAvLyB2YXIgaHRtbCA9IHJlcShvcHRpb25zLnVybCk7XHJcbiAgICAgICAgdmFyIHByZWZpeFBhdGggPSB3aW5kb3cuaXNEZXYgPyAnL2pzL2FwcC8nIDogJy9hcHAvZHluYW1pYy9qcy9hcHAvJztcclxuICAgICAgICB2YXIgeGhyID0gdGhpcy5nZXRKU09OKHByZWZpeFBhdGggKyBvcHRpb25zLnVybCwgb3B0aW9ucy5zdWNjZXNzLCBvcHRpb25zLmVycm9yKTtcclxuICAgICAgICByZXR1cm4geGhyO1xyXG4gICAgfVxyXG4gICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUucmVuZGVyVmlldyA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZFNuaXBwZXRzKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCh0aGlzLmxvYWRpbmdNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclZpZXcoY2FsbGJhY2ssIGRhdGEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXNbJ292ZXJsYXlDbGFzcyddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiQoJy4nICsgdGhpc1snb3ZlcmxheUNsYXNzJ10pLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXNbJ292ZXJsYXlDbGFzcyddICsgJ1wiPjwvZGl2PicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyVmlldyhjYWxsYmFjaywgZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpc1snbG9hZGluZ1RlbXBsYXRlJ10pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLkJhc2VSZXF1aXJlT2JqZWN0LnRlbXBsYXRlQ2FjaGVbdGhpc1snbG9hZGluZ1RlbXBsYXRlJ11dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCh0aGlzLkJhc2VSZXF1aXJlT2JqZWN0LnRlbXBsYXRlQ2FjaGVbdGhpc1snbG9hZGluZ1RlbXBsYXRlJ11dKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJWaWV3KGNhbGxiYWNrLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbChcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlYnBhY2toYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzWydsb2FkaW5nVGVtcGxhdGUnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGU6IHRoaXMuQmFzZVJlcXVpcmVPYmplY3QuQ0FDSEVfVEVNUExBVEVTLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXNbJ2xvYWRpbmdUZW1wbGF0ZSddXSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyVmlldyhjYWxsYmFjaywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW3RoaXNbJ2xvYWRpbmdUZW1wbGF0ZSddXSA9ICdMb2FkaW5nIFRlbXBsYXRlIFsnICsgdGhpc1snbG9hZGluZ1RlbXBsYXRlJ10gKyAnXSBmYWlsZWQgdG8gbG9hZC4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyVmlldyhjYWxsYmFjaywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclZpZXcoY2FsbGJhY2ssIGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLnNuaXBwZXQgPSBmdW5jdGlvbihuYW1lLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIHMgPSB0aGlzLnNuaXBwZXRzW25hbWVdO1xyXG4gICAgICAgIGlmICghcykge1xyXG4gICAgICAgICAgICB0aHJvdyBcImVycm9yOiBzbmlwcGV0IFwiICsgbmFtZSArIFwiIGlzIG5vdCBkZWNsYXJlZCBpbiB0aGUgcHJvdG90eXBlLlwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfLnRlbXBsYXRlKHRoaXMuQmFzZVJlcXVpcmVPYmplY3QudGVtcGxhdGVDYWNoZVtzXSkoXy5leHRlbmQoe1xyXG4gICAgICAgICAgICAgICAgX3RoaXM6IHRoaXNcclxuICAgICAgICAgICAgfSwgZGF0YSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLl9sb2FkU25pcHBldHMgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0aGlzLmVycm9yVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmlwcGV0c1snX19lcnJvclRlbXBsYXRlJ10gPSB0aGlzLmVycm9yVGVtcGxhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb3VudCA9IF8ua2V5cyh0aGlzLnNuaXBwZXRzKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGNvdW50ID09IDApIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnNuaXBwZXRzKSB7XHJcbiAgICAgICAgICAgIHZhciBzID0gdGhpcy5zbmlwcGV0c1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuQmFzZVJlcXVpcmVPYmplY3QudGVtcGxhdGVDYWNoZVtzXSkge1xyXG4gICAgICAgICAgICAgICAgY2IoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB4aHIgPSB0aGlzLndlYnBhY2toYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHMsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICBjYWNoZTogdGhpcy5CYXNlUmVxdWlyZU9iamVjdC5DQUNIRV9URU1QTEFURVMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UsIGMsIGQsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5CYXNlUmVxdWlyZU9iamVjdC50ZW1wbGF0ZUNhY2hlW2QuZGlydHlDbG9zdXJlSGFja10gPSByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2IoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHJlc3BvbnNlLCBjLCBkLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuQmFzZVJlcXVpcmVPYmplY3QudGVtcGxhdGVDYWNoZVtyZXNwb25zZS5kaXJ0eUNsb3N1cmVIYWNrXSA9ICdMb2FkaW5nIFRlbXBsYXRlIFsnICsgcmVzcG9uc2UuZGlydHlDbG9zdXJlSGFjayArICddIGZhaWxlZCB0byBsb2FkLic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHhoci5kaXJ0eUNsb3N1cmVIYWNrID0gcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG5AcGFyYW0ge09iamVjdH0gQ29uc3RydWN0b3IgY29uc3RydWN0b3Igb2YgdGhlIGNsYXNzIChtdXN0IGV4dGVuZCBmcm9tIEJhc2VWaWV3KTtcclxuQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgcGFzcyBpbiBhZGRpdGlvbmFsIG9wdGlvbnMsIHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGltbWVkaWF0ZWx5IHZpYSB0aGlzLl9vcHRpb25zXHJcbkByZXR1cm5zIHtPYmplY3R9IHJlZmVyZW5jZSB0byBuZXcgY2hpbGQgdmlldy5cclxuQGV4YW1wbGVcclxuTXlTdWJWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcclxuICAgIHJlbmRlciA6IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy4kZWwuaHRtbCgncmVuZGVyZWQuIFByb3VkIGNoaWxkIG9mICcgKyB0aGlzLl9wYXJlbnQuY2lkKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5NeVZpZXcgPSBCYXNlVmlldy5leHRlbmQoe1xyXG4gICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKG9wdGlvbnMpe1xyXG4gICAgICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLm15U3ViVmlldyA9IHRoaXMuaW5zdGFudGlhdGUoTXlTdWJWaWV3KTtcclxuICAgIH0sXHJcbiAgICByZW5kZXIgOiBmdW5jdGlvbigpe1xyXG4gICAgICAgIHRoaXMubXlTdWJWaWV3LnNldEVsZW1lbnQodGhpcy4kKCcjc3ViVmlldycpKS5yZW5kZXJWaWV3KCk7XHJcbiAgICB9XHJcbn0pO1xyXG5AZXhwb3J0IHsqfSAqL1xyXG4gICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuaW5zdGFudGlhdGUgPSBmdW5jdGlvbihDb25zdHJ1Y3Rvciwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gb3B0aW9ucyA6IHt9O1xyXG4gICAgICAgIG9wdGlvbnMuX3BhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHZpZXcgPSBuZXcgQ29uc3RydWN0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy52aWV3c1NhY2tbdmlldy5jaWRdID0gdmlldztcclxuICAgICAgICByZXR1cm4gdmlldztcclxuICAgIH1cclxuICAgIDtcclxuICAgIC8qKiBAZXhwb3J0IHsqfVxyXG4qIEByZXR1cm5zIHtPYmplY3R9IHJldHVybnMgcGFyZW50IHZpZXdcclxuKi9cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgICB9XHJcbiAgICAvKiogQGV4cG9ydCB7Kn1cclxuKiBAcmV0dXJucyB7T2JqZWN0fEFycmF5fSByZXR1cm5zIGFsbCBpbnN0YW50aWF0ZWQgY2hpbGRyZW4gdmlld3Mgd2l0aGluIHRoaXMgdmlld1xyXG4qL1xyXG4gICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3c1NhY2s7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICAvKipcclxuKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIHByZWxvYWQgZGF0YSBhc3luY2hyb25vdXNseS4gRGF0YSB3aWxsIGJlY29tZSBhdmFpbGFibGUgaW4gdGhpcy5fcHJlbG9hZERhdGEgYWZ0ZXIgcmVuZGVyVmlldygpIGlzIGNhbGxlZCwgYnV0IGJlZm9yZSByZW5kZXIoKVxyXG4qIEBwYXJhbSB7Y2FsbGJhY2t9IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJ5IGJhc2UgdmlldyB1cG9uIGNvbXBsZXRpb25cclxuXHJcbiogQGV4YW1wbGVcclxuTXlWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcclxuIHByZWxvYWREYXRhQXN5bmMgOiBmdW5jdGlvbihjYWxsYmFjaywgZXJyb3Ipe1xyXG4gICAgdGhpcy5nZXRKU09OKCcvc29tZVVybCcsIGNhbGxiYWNrLCBlcnJvcik7XHJcbiB9LFxyXG4gcmVuZGVyIDogZnVuY3Rpb24oKXtcclxuICAgICBjb25zb2xlLmxvZyh0aGlzLl9wcmVsb2FkRGF0YSk7XHJcbiB9XHJcbn0pO1xyXG5cclxuKi9cclxuICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlWydwcmVsb2FkRGF0YUFzeW5jJ10gPSBmdW5jdGlvbihjYWxsYmFjaywgZXJyb3IpIHtcclxuICAgICAgICBjYWxsYmFjayh7fSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICogSGVscGVyIGNsYXNzIHRoYXQgY3JlYXRlcyB0YWJiZWQgY29udGFpbmVyLiBSZWZlciB0byBwcm9wZXIgbWFya3VwIHRvIGxldmVyYWdlIHRoaXNcclxuICogQGV4YW1wbGUgXHJcblxyXG5UZW1wbGF0ZTpcclxuXHJcbjxkaXY+PHA+SGVyZSBhcmUgeW91ciB0b2dnbGVzPC9wPjwvZGl2PlxyXG5cclxuPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XHJcbiAgPGxpIGlkPSdhJyBjbGFzcz1cImZ3LXRhYi10b2dnbGUgZnctdGFiLWRlZmF1bHRcIiBkYXRhLXZpZXdjb25zdHJ1Y3Rvcj0nc2FtcGxlQ2xhc3NBJz48YT5Ib21lPC9hPjwvbGk+XHJcbiAgPGxpIGlkPSdiJyBjbGFzcz1cImZ3LXRhYi10b2dnbGVcIiBkYXRhLXZpZXdjb25zdHJ1Y3Rvcj0nc2FtcGxlQ2xhc3NCJz48YT5Qcm9maWxlPC9hPjwvbGk+XHJcbiAgPGxpIGlkPSdjJyBjbGFzcz1cImZ3LXRhYi10b2dnbGVcIiBkYXRhLXZpZXdjb25zdHJ1Y3Rvcj0nc2FtcGxlQ2xhc3NDJz48YT5NZXNzYWdlczwvYT48L2xpPlxyXG48L3VsPlxyXG5cclxuPGRpdj48cD5IZXJlIGlzIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRlbnQ8L3A+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG48ZGl2IGNsYXNzPSdmdy10YWItY29udGVudCB0YWItcGFuZWwnIGlkPSdhJyBkYXRhLWlkPSdhJz48L2Rpdj5cclxuPGRpdiBjbGFzcz0nZnctdGFiLWNvbnRlbnQgdGFiLXBhbmVsJyBkYXRhLWlkPSdiJz48L2Rpdj5cclxuPGRpdiBjbGFzcz0nZnctdGFiLWNvbnRlbnQgdGFiLXBhbmVsJyBkYXRhLWlkPSdjJz48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5KczpcclxuXHJcbiBNeVRhYlZpZXcgPSBHb3ZJbmZvLlRhYlZpZXcuZXh0ZW5kKHtcclxuICAgICB0ZW1wbGF0ZSA6ICdNeVRhYlZpZXcuaHRtbCcgXHJcbiB9KTtcclxuXHJcbiBteVRhYlZpZXcgPSBuZXcgTXlUYWJWaWV3KCk7XHJcbiBteVRhYlZpZXcuc2V0RWxlbWVudCgkKCcjdGFiVmlldycpKS5yZW5kZXJWaWV3XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG4gICAgLy8gbWFya3VwOiAuZnctdGFiLWRlZmF1bHQgLS0gYWRkIHRoaXMgZm9yIHRoZSB0YWIgdG8gYmUgb3BlbiBvbiBkZWZhdWx0IGlmIG5vIG90aGVyIGluZGljYXRvcnMgYXJlIHByZXNlbnQgIFxyXG4gICAgLy8gLmZ3LXRhYi10b2dnbGUgYXR0cltkYXRhLXZpZXdjb25zdHJ1Y3Rvcl0gI2lkIGNsaWNrYWJsZSBidXR0b24gdGhhdCB3aWxsIHRha2UgeW91IHRvIHRoZSB0YWJcclxuICAgIC8vIC5mdy10YWItY29udGVudCBhdHRyW2RhdGEtaWRdIGNvbnRhaW50ZXIgd2hlcmUgeW91IHdvdWxkIGxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgdGFiIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgLy8gLmZ3LXRhYi1jb250ZW50W2RhdGEtZm9yXSBjb250YWluZXIgd2hlcmUgeW91IHdvdWxkIGxpa2UgdG8gcHV0IHN1cHBsZW1lbnRhbCB2aWV3cyAoaS5lLiBhY3Rpb24gcGFuZWwsIGV4dGVybmFsIG1lbnUsIGV0Yy4uLilcclxuICAgIEdvdkluZm8uVGFiVmlldyA9IEdvdkluZm8uQmFzZVZpZXcuZXh0ZW5kKHtcclxuICAgICAgICBDb25zdHJ1Y3RvcnM6IHt9LFxyXG4gICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLl90YWJNYXAgPSB7fTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGRlc3Ryb3lzIHRhYlZpZXdzLCByZXNldHMgdGFiTWFwLCBhbmQgcmVuZGVyVmlld1xyXG4gICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9raWxsQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fdGFiTWFwID0ge307XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVmlldygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXZlbnRzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIF9ldmVudHMgPSB7fTtcclxuICAgICAgICAgICAgX2V2ZW50c1snY2xpY2sgLmZ3LXRhYi10b2dnbGVbZGF0YS1jaWQ9XCInICsgdGhpcy5jaWQgKyAnXCJdJ10gPSB0aGlzLl90YWJDaGFuZ2U7XHJcbiAgICAgICAgICAgIHJldHVybiBfZXZlbnRzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25IYXNoQ2hhbmdlOiBmdW5jdGlvbihkaWZmKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBlcnNpc3RCeSAmJiBkaWZmLmhhc093blByb3BlcnR5KHRoaXMucGVyc2lzdEJ5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlKGRpZmZbdGhpcy5wZXJzaXN0QnldKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndGFiJywgZGlmZlt0aGlzLnBlcnNpc3RCeV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfdGFiQ2hhbmdlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIHZhciAkZWwgPSAkKGUuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgICAgIHZhciBpZCA9ICRlbFswXS5pZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGVyc2lzdEJ5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb1t0aGlzLnBlcnNpc3RCeV0gPSBpZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycyhvLCB0aGlzLmRvTm90bGVhdmVIaXN0b3J5VHJhaWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZShpZCk7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndGFiJywgaWQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2NoYW5nZTogZnVuY3Rpb24oaWQpIHtcclxuICAgICAgICAgICAgaWYgKGlkID09IG51bGwgKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJGdyb3VwID0gdGhpcy4kKCcuZnctdGFiLXRvZ2dsZVtkYXRhLWNpZD1cIicgKyB0aGlzLmNpZCArICdcIl0nKTtcclxuICAgICAgICAgICAgICAgIGlmICgkZ3JvdXAubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIm1hbGZvcm1lZCBtYXJrdXAsIG5vIC5mdy10YWItdG9nZ2xlIGZvdW5kLiBQbGVhc2UgcmVmZXIgdG8gQVBJXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gJGdyb3VwWzBdLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gJGdyb3VwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCgkZ3JvdXBbaV0pLmhhc0NsYXNzKCdmdy10YWItZGVmYXVsdCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICRncm91cFtpXS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgJGVsID0gdGhpcy4kKCcuZnctdGFiLXRvZ2dsZVtkYXRhLWNpZD1cIicgKyB0aGlzLmNpZCArICdcIl0jJyArIGlkKTtcclxuICAgICAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gJGVsLmRhdGEoJ3ZpZXdjb25zdHJ1Y3RvcicpO1xyXG4gICAgICAgICAgICB2YXIgJGRpdiA9IHRoaXMuJCgnLmZ3LXRhYi1jb250ZW50W2RhdGEtY2lkPVwiJyArIHRoaXMuY2lkICsgJ1wiXVtkYXRhLWlkPVwiJyArIGlkICsgJ1wiXScpO1xyXG4gICAgICAgICAgICB2YXIgJGZvciA9IHRoaXMuJCgnLmZ3LXRhYi1jb250ZW50W2RhdGEtY2lkPVwiJyArIHRoaXMuY2lkICsgJ1wiXVtkYXRhLWZvcj1cIicgKyBpZCArICdcIl0nKTtcclxuICAgICAgICAgICAgaWYgKCRkaXYubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhbmRsZVBhZ2VEb2VzTm90RXhpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhZ2VEb2VzTm90RXhpc3QoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiY29ycmVzcG9uZGluZyBkaXYgZG9lcyBub3QgZXhpc3QgZm9yIGlkIFwiICsgaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4kKCcuZnctdGFiLXRvZ2dsZVtkYXRhLWNpZD1cIicgKyB0aGlzLmNpZCArICdcIl0nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICRlbC5hZGRDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZS5pbmRleE9mKFwiL2FwcC9kZXRhaWxzXCIpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgJChcIm1ldGFbbmFtZV49J2RjLiddXCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVBdHRyaWJ1dGUoXCJwcm9maWxlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuJCgnLmZ3LXRhYi1jb250ZW50W2RhdGEtY2lkPVwiJyArIHRoaXMuY2lkICsgJ1wiXScpLmhpZGUoKTtcclxuICAgICAgICAgICAgJGRpdi5zaG93KCk7XHJcbiAgICAgICAgICAgICRmb3Iuc2hvdygpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RhYk1hcFtpZF0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3lWaWV3c09uRXhpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tpbGxDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYk1hcCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFiTWFwW2lkXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBudWxsIDtcclxuICAgICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvciAmJiB3aW5kb3dbY29uc3RydWN0b3JdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgPSB3aW5kb3dbY29uc3RydWN0b3JdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25zdHJ1Y3RvciAmJiB0aGlzLkNvbnN0cnVjdG9yc1tjb25zdHJ1Y3Rvcl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciA9IHRoaXMuQ29uc3RydWN0b3JzW2NvbnN0cnVjdG9yXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJjb25zdHJ1Y3RvciBcIiArIGNvbnN0cnVjdG9yICsgXCIgZG9lcyBub3QgZXhpc3RcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXNbJ2NvbnRlbnRfJyArIGlkXSA9IHRoaXMuaW5zdGFudGlhdGUoQ29uc3RydWN0b3IsIHt9KTtcclxuICAgICAgICAgICAgICAgIHRoaXNbJ2NvbnRlbnRfJyArIGlkXS5zZXRFbGVtZW50KCRkaXYpLnJlbmRlclZpZXcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpc1snY29udGVudF8nICsgaWRdLCAnZGVzdHJveScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90YWJNYXBbaWRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vVE9ETyBtb3ZlIHRoaXMgbGluZSBpbiB0aGUgY2xhdXNlIGFmdGVyIHdlIGxpYmVyYXRlIGZyb20gdGhlIHJvdXRlci5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2tpbGxDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl90YWJNYXAgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy4kKCcuZnctdGFiLWNvbnRlbnQnKS5hdHRyKCdkYXRhLWNpZCcsIHRoaXMuY2lkKTtcclxuICAgICAgICAgICAgdGhpcy4kKCcuZnctdGFiLXRvZ2dsZScpLmF0dHIoJ2RhdGEtY2lkJywgdGhpcy5jaWQpO1xyXG4gICAgICAgICAgICB0aGlzLiQoJy5mdy10YWItY29udGVudFtkYXRhLWNpZD1cIicgKyB0aGlzLmNpZCArICdcIl0nKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBlcnNpc3RCeSAmJiB0aGlzLmdldFBhcmFtZXRlcih0aGlzLnBlcnNpc3RCeSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiQnlJZCh0aGlzLmdldFBhcmFtZXRlcih0aGlzLnBlcnNpc3RCeSksIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlKG51bGwgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqIEBleHBvcnQge30gKi9cclxuICAgIEdvdkluZm8uVGFiVmlldy5wcm90b3R5cGUuc2V0VGFiQnlJbmRleCA9IGZ1bmN0aW9uKGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy4kKHRoaXMuJCgnLmZ3LXRhYi10b2dnbGUnKVtpbmRleF0pLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICAvKiogQGV4cG9ydCB7fSAqL1xyXG4gICAgR292SW5mby5UYWJWaWV3LnByb3RvdHlwZS5zZXRUYWJCeUlkID0gZnVuY3Rpb24oaWQsIGluaXRpYWwpIHtcclxuICAgICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2UoaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3RhYicsIGlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiQoJy5mdy10YWItdG9nZ2xlIycgKyBpZCkuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICAvKipcclxuICogVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgY2hhbmdlcyBjYXVzZWQgYnkgQ29uc3RyYWludFBhbmVscyB0byBSZXN0U291cmNlLiBcclxuICogQW55IENvbnN0cmFpbnQgUGFuZWwgbXVzdCBpbXBsZW1lbnQgZnVuY3Rpb24gY2FsbGVkIGdldENvbnN0cmFpbnRNb2RlbCB3aGljaCB3b3VsZCByZXR1cm4gdGhpcyBvYmplY3QuIEF0IGFueSBtb21lbW50IGluIHRpbWUsIFJlc3RTb3VyY2UgY291bGQgY29sbGVjdCBcclxuICogY29uc3RyYWludCBtb2RlbHMgZnJvbSBDb25zdHJhaW50IFBhbmVscyBzdWJzY3JpYmVkIHRvIGl0IGFuZCBidWlsZCB0aGUgZmluYWwgQ29uc3RyYWludE1vZGVsIHZpYSBpbnRlcnNlY3Rpb24gY2FsbHMuXHJcbiAqIEBleGFtcGxlXHJcbk15U291cmNlID0gbmV3IEdvdkluZm8uUmVzdFNvdXJjZS5leHRlbmQoe1xyXG4gICAgdXJsIDogJy9zZWFyY2gnXHJcbiAgICBjb25zdHJhaW50VHlwZSA6IFwiR0VUXCIsXHJcbiAgICBDb25zdHJhaW50TW9kZWxQcm90b3R5cGUgOiBNeUNvbnN0cmFpbnRNb2RlbCAvLyBzZWUgQWJzdHJhY3RDb25zdHJhaW50TW9kZWwgZm9yIGRldGFpbHNcclxufSk7XHJcbnZhciBzb3VyY2UgPSBuZXcgTXlTb3VyY2UoKTtcclxuc291cmNlLmdldChmdW5jdGlvbihkYXRhKXtcclxuICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG59KTtcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBleHBvcnRcclxuICovXHJcbiAgICBHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludE1vZGVsID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xyXG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXHJcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgPSB7fTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldEpTT05TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25zdHJhaW50cyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXRGcm9tSlNPTlN0cmluZzogZnVuY3Rpb24oc3RyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgPSBKU09OLnBhcnNlKHN0cik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXJnZUNvbnN0cmFpbnRzOiBmdW5jdGlvbihyZXN1bHQsIGNvbnN0cmFpbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gY29uc3RyYWludHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlID0gY29uc3RyYWludHNbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BdID0gZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W3Byb3BdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbcHJvcF0gPSBfLnVuaW9uKHJlc3VsdFtwcm9wXSwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbcHJvcF0gPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtwcm9wXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BdID0gXy5leHRlbmQocmVzdWx0W3Byb3BdLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4qIEBjb25zdHJ1Y3RvclxyXG4qIEBleHBvcnRcclxuKi9cclxuICAgIEdvdkluZm8uUG9zdENvbnN0cmFpbnRNb2RlbCA9IEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50TW9kZWwuZXh0ZW5kKHtcclxuICAgICAgICB0eXBlOiAnUE9TVCdcclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiogQGV4cG9ydFxyXG4qL1xyXG4gICAgR292SW5mby5Qb3N0Q29uc3RyYWludE1vZGVsLnByb3RvdHlwZS5nZXRCb2R5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhyb3cgXCJtdXN0IG92ZXJyaWRlIGdldEJvZHlcIjtcclxuICAgIH1cclxuICAgIDtcclxuICAgIC8qKlxyXG4qIGFycmF5cyBnZXQgY29uY2F0IHwgc3RyaW5ncywgYm9vbGVhbnMgYW5kIG51bWJlcnMgZ2V0IHJlcGxhY2VkIHwgb2JqZWN0cyAobm90IGFycmF5cykgdXNlIF8uZXh0ZW5kXHJcbiogQGV4cG9ydFxyXG4qL1xyXG4gICAgR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRNb2RlbC5wcm90b3R5cGUudW5pb24gPSBmdW5jdGlvbihvdGhlcikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIHJlc3VsdC5jb25zdHJhaW50cyA9IHRoaXMubWVyZ2VDb25zdHJhaW50cyhyZXN1bHQuY29uc3RyYWludHMsIHRoaXMuY29uc3RyYWludHMpO1xyXG4gICAgICAgIHJlc3VsdC5jb25zdHJhaW50cyA9IHRoaXMubWVyZ2VDb25zdHJhaW50cyhyZXN1bHQuY29uc3RyYWludHMsIG90aGVyLmNvbnN0cmFpbnRzKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiogQGV4cG9ydFxyXG4qL1xyXG4gICAgR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRNb2RlbC5wcm90b3R5cGUuc2V0RmllbGQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY29uc3RyYWludHNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnN0cmFpbnRzW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4qIEBleHBvcnRcclxuKi9cclxuICAgIEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50TW9kZWwucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRNb2RlbC5wcm90b3R5cGVbJ2dldFVybCddID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwib3ZlcnJpZGUgbWUsIHJlZmVyIHRvIEFQSSBmb3IgbW9yZSBoZWxwXCI7XHJcbiAgICB9XHJcbiAgICBHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludE1vZGVsLnByb3RvdHlwZVsnZGVmYXVsdFBhZ2VOdW1iZXInXSA9IDA7XHJcbiAgICBHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludE1vZGVsLnByb3RvdHlwZVsnZGVmYXVsdFBhZ2VTaXplJ10gPSAxMDtcclxuICAgIEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50TW9kZWwucHJvdG90eXBlWydnZXRQYWdlTnVtYmVyJ10gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGFnZU51bWJlciA9IHRoaXMuZ2V0RmllbGQoJ3BhZ2VOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gKHBhZ2VOdW1iZXIgPT09IHVuZGVmaW5lZCkgPyB0aGlzLmRlZmF1bHRQYWdlTnVtYmVyIDogcGFnZU51bWJlcjtcclxuICAgIH1cclxuICAgIEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50TW9kZWwucHJvdG90eXBlWydnZXRQYWdlU2l6ZSddID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHBhZ2VTaXplID0gdGhpcy5nZXRGaWVsZCgncGFnZVNpemUnKTtcclxuICAgICAgICByZXR1cm4gKHBhZ2VTaXplID09PSB1bmRlZmluZWQpID8gdGhpcy5kZWZhdWx0UGFnZVNpemUgOiBwYWdlU2l6ZTtcclxuICAgIH1cclxuICAgIEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50TW9kZWwucHJvdG90eXBlWydzZXRQYWdlTnVtYmVyJ10gPSBmdW5jdGlvbihwYWdlTnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZCgncGFnZU51bWJlcicsIHBhZ2VOdW1iZXIpO1xyXG4gICAgfVxyXG4gICAgR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRNb2RlbC5wcm90b3R5cGVbJ3NldFBhZ2VTaXplJ10gPSBmdW5jdGlvbihwYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGQoJ3BhZ2VTaXplJywgcGFnZVNpemUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAqIFJlc3RTb3VyY2UuIFRoaXMgaXMgYSBjbGFzcyB0aGF0IHdpbGwgaGFuZGxlIGludGVyYWN0aW9uIHdpdGggcmVzdCBwb2ludHMgdGhhdCBjaGFuZ2UgdGhlIG91dHB1dCBkZXBlbmRpbmcgb24gY29uc3RyYWludHMgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMuPGJyPlxyXG4gICBSZXN0U291cmNlIGhhbmRsZXMgY2FjaGluZywgcXVldWluZyBvZiBjYWxsYmFja3MsIGFib3J0cyBhbmQgdHJhbnNmZXJzIHJlcXVlc3RzIGFzIHRoZXkgY29tZSBpbi48YnI+XHJcbiAgIEl0IGlzIGFzc3VtZWQgdGhhdCBlYWNoIGRlY2xhcmVkIHNvdXJjZSB3aWxsIGhhdmUgb25lIGN1cnJlbnQgc3RhdGUuIFRoYXQgbWVhbnMgdGhhdCBpZiB5b3UgaGF2ZSB0d28gdmlld3MgdGhhdCByZW5kZXIgZGF0YSBmcm9tIHRoaXMgc291cmNlIGFuZCBzb21lIGNvbnN0cmFpbnRQYW5lbHMsXHJcbiAgIEFuZCBhIHZpZXcgY2FsbHMgLmdldCAsIGl0IHdpbGwgcmVxdWVzdCB0aGUgbW9zdCBcImN1cnJlbnRcIiBzdGF0ZSBvZiBjb25zdHJhaW50IG1vZGVsLjxicj5cclxuICAgRm9yIGV4YW1wbGUgaW1hZ2luZSBhIHNlcXVlbmNlIG9mIGV2ZW50cyA8YnI+IDxocj5cclxuICAgY3VycmVudFVybFN0YXRlIDogJy9zZWFyY2g/cT1tb25leSc8YnI+XHJcbiAgIDEuXSBzb3VyY2UuZ2V0KGNhbGxiYWNrQSk7IGNhbGxiYWNrQSBxdWV1ZWQgZm9yICcvc2VhcmNoP3E9bW9uZXknPGJyPlxyXG4gICAyLl0gc291cmNlLmdldChjYWxsYmFja0IpOyBjYWxsYmFja0IgcXVldWVkIGZvciAnL3NlYXJjaD9xPW1vbmV5Jzxicj5cclxuICAgY2hhbmdlIGN1cnJlbnRVcmxTdGF0ZSB0byA6ICcvc2VhcmNoP3E9dGVzdCc7PGJyPlxyXG4gICAzLl0gJy9zZWFyY2g/cT1tb25leScgeGhyIGlzIGFib3J0ZWQgYW5kIGNhbGxiYWNrQSBhbmQgY2FsbGJhY2tCIHRyYW5zZmVycmVkIHRvIHF1ZXVlIGZvciAnL3NlYXJjaD9xPXRlc3QnPGJyPlxyXG4gICBJZiB5b3Ugd2FudCB0byBkZXJpdmUgZGF0YSBmcm9tIHRoZSBzYW1lIHVybCBidXQgbm90IGJpbmQgdG9nZXRoZXIsIHNpbXBsZSBjcmVhdGUgbmV3IFJlc3RTb3VyY2Ugb2YgdGhhdCB0eXBlLiA8aHI+XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG5NeVNvdXJjZSA9IG5ldyBHb3ZJbmZvLlJlc3RTb3VyY2UuZXh0ZW5kKHtcclxuICAgIHVybCA6ICcvc2VhcmNoJ1xyXG4gICAgY29uc3RyYWludFR5cGUgOiBcIkdFVFwiLFxyXG4gICAgQ29uc3RyYWludE1vZGVsUHJvdG90eXBlIDogTXlDb25zdHJhaW50TW9kZWwgLy8gc2VlIEFic3RyYWN0Q29uc3RyYWludE1vZGVsIGZvciBkZXRhaWxzXHJcbn0pO1xyXG5cclxudmFyIHNvdXJjZSA9IG5ldyBNeVNvdXJjZSgpO1xyXG5zb3VyY2UuZ2V0KGZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgY29uc29sZS5sb2coZGF0YSk7XHJcbn0pO1xyXG5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBleHBvcnRcclxuICovXHJcbiAgICBHb3ZJbmZvLlJlc3RTb3VyY2UgPSBHb3ZJbmZvLkJhc2VWaWV3LmV4dGVuZCh7XHJcbiAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgIHVybDogbnVsbCAsXHJcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IG9wdGlvbnMgOiB7fTtcclxuICAgICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wZXJzaXN0QnkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc2lzdEJ5ID0gb3B0aW9ucy5wZXJzaXN0Qnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLkNvbnN0cmFpbnRNb2RlbFByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1snQ29uc3RyYWludE1vZGVsUHJvdG90eXBlJ10gPSBvcHRpb25zLkNvbnN0cmFpbnRNb2RlbFByb3RvdHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJzZUFzeW5jKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzWydwYXJzZUFzeW5jJ10gPSBvcHRpb25zLnBhcnNlQXN5bmM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50TW9kZWwgPSBuZXcgdGhpc1snQ29uc3RyYWludE1vZGVsUHJvdG90eXBlJ10oKTtcclxuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50UGFuZWxzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tRdWV1ZXMgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5jb3VudGNhY2hlID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5ub0NhY2hlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51cmwpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFwidGhpcy51cmwgbXVzdCBiZSBkZWZpbmVkXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbENvbnN0cmFpbnRNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb25zdHJhaW50TW9kZWwob3B0aW9ucy5pbml0aWFsQ29uc3RyYWludE1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbihjb25zdHJhaW50UGFuZWwpIHtcclxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGFyZSB1c2luZyB0aGUgc2FtZSB1cmwgcGVyc2lzdGVuY2UgcGF0dGVyblxyXG4gICAgICAgICAgICBjb25zdHJhaW50UGFuZWwudXNlU3RhdGUgPSB0aGlzLnVzZVN0YXRlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRQYW5lbHNbY29uc3RyYWludFBhbmVsLmNpZF0gPSBjb25zdHJhaW50UGFuZWw7XHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50UGFuZWwgaW5zdGFuY2VvZiBHb3ZJbmZvLlNjcm9sbFBhZ2luYXRpb25QYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGluZW91cyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyhjb25zdHJhaW50UGFuZWwsICdjb25zdHJhaW50OmFwcGVuZCcsIGZ1bmN0aW9uKGNvbnN0cmFpbnRNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbnN0cmFpbnRBcHBlbmQoY29uc3RyYWludE1vZGVsLCBjb25zdHJhaW50UGFuZWwsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8oY29uc3RyYWludFBhbmVsLCAnY29uc3RyYWludDpyZXBsYWNlJywgZnVuY3Rpb24oY29uc3RyYWludE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29uc3RyYWludEFwcGVuZChjb25zdHJhaW50TW9kZWwsIGNvbnN0cmFpbnRQYW5lbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlblRvKGNvbnN0cmFpbnRQYW5lbCwgJ2NvbnN0cmFpbnQ6Y2hhbmdlJywgZnVuY3Rpb24oY29uc3RyYWludE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29uc3RyYWludENoYW5nZShjb25zdHJhaW50UGFuZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQ29uc3RyYWludENoYW5nZTogZnVuY3Rpb24oY29uc3RyYWludFBhbmVsKSB7XHJcbiAgICAgICAgICAgIHZhciBjb25zdHJhaW50TW9kZWwgPSBuZXcgdGhpcy5Db25zdHJhaW50TW9kZWxQcm90b3R5cGUoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLmNvbnN0cmFpbnRQYW5lbHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRNb2RlbCA9IGNvbnN0cmFpbnRNb2RlbC51bmlvbih0aGlzLmNvbnN0cmFpbnRQYW5lbHNbcHJvcF0uZ2V0Q29uc3RyYWludE1vZGVsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKGNvbnN0cmFpbnRQYW5lbCBpbnN0YW5jZW9mIEdvdkluZm8uUGFnaW5hdGlvblBhbmVsKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3RyYWludE1vZGVsLnNldFBhZ2VOdW1iZXIobnVsbCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3dyYXBwZXJkYXRhID0gbnVsbCA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDb25zdHJhaW50TW9kZWwoY29uc3RyYWludE1vZGVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQ29uc3RyYWludEFwcGVuZDogZnVuY3Rpb24odG9BcHBlbmQsIGNvbnN0cmFpbnRQYW5lbCwgcmVwbGFjZSkge1xyXG4gICAgICAgICAgICB2YXIgY29uc3RyYWludE1vZGVsID0gbnVsbCA7XHJcbiAgICAgICAgICAgIGlmIChyZXBsYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50TW9kZWwgPSB0b0FwcGVuZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRNb2RlbCA9IHRoaXMuZ2V0Q29uc3RyYWludE1vZGVsKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50TW9kZWwgPSBjb25zdHJhaW50TW9kZWwudW5pb24odG9BcHBlbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKGNvbnN0cmFpbnRQYW5lbCBpbnN0YW5jZW9mIEdvdkluZm8uUGFnaW5hdGlvblBhbmVsKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3RyYWludE1vZGVsLnNldFBhZ2VOdW1iZXIobnVsbCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3dyYXBwZXJkYXRhID0gbnVsbCA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDb25zdHJhaW50TW9kZWwoY29uc3RyYWludE1vZGVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHVuc3Vic2NyaWJlOiBmdW5jdGlvbihjb25zdHJhaW50UGFuZWwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29uc3RyYWludFBhbmVsc1tjb25zdHJhaW50UGFuZWwuY2lkXTtcclxuICAgICAgICAgICAgLy8gSSB0aGluayB0aGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0LlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXJDYWNoZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIF90cmlnZ2VyQ2hhbmdlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRNb2RlbCA9IHRoaXMuZ2V0Q29uc3RyYWludE1vZGVsKCk7XHJcbiAgICAgICAgICAgIHZhciBwYWdlTnVtYmVyID0gY29uc3RyYWludE1vZGVsLmdldFBhZ2VOdW1iZXIoKTtcclxuICAgICAgICAgICAgaWYgKCFwYWdlTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jd3JhcHBlcmRhdGEgPSBudWxsIDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3NvdXJjZTpjaGFuZ2UnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uSGFzaENoYW5nZTogZnVuY3Rpb24obWFwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBlcnNpc3RCeSAmJiBtYXAuaGFzT3duUHJvcGVydHkodGhpcy5wZXJzaXN0QnkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldENvbnN0cmFpbnRNb2RlbDogZnVuY3Rpb24oY29uc3RyYWludE1vZGVsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBlcnNpc3RCeSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIodGhpcy5wZXJzaXN0QnksIGNvbnN0cmFpbnRNb2RlbC5nZXRKU09OU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbVN0ciA9IGNvbnN0cmFpbnRNb2RlbC5nZXRKU09OU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldENvdW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRBbGxVcmw6IGZ1bmN0aW9uKGNvbnN0cmFpbnRVcmwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJsICsgY29uc3RyYWludFVybDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldEFsbDogZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2ssIGVycm9yY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRVcmwgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRNb2RlbCA9IHRoaXMuZ2V0Q29uc3RyYWludE1vZGVsKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cmFpbnRNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3RyYWludFVybCA9IFwiP1wiICsgdGhpcy5jb25zdHJhaW50TW9kZWxbJ2dldFVybCddKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMuZ2V0QWxsVXJsKGNvbnN0cmFpbnRVcmwpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb3VudGNhY2hlLmhhc093blByb3BlcnR5KHVybCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50Y2FjaGVbdXJsXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZVt1cmxdID09IG51bGwgfHwgKHRoaXMuX2xhc3RQYXlsb2FkICYmIHRoaXMuX2xhc3RQYXlsb2FkICE9IHRoaXMucGF5bG9hZCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nW3VybF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tRdWV1ZXNbdXJsXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrUXVldWVzW3VybF0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja1F1ZXVlc1t1cmxdLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVycm9yIGNhbGxiYWNrc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzW3VybF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzW3VybF0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzW3VybF0ucHVzaChlcnJvcmNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1t1cmxdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tRdWV1ZXNbdXJsXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzW3VybF0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIG9yIGNyZWF0ZSBuZXcgcXVldWVcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tRdWV1ZXNbdXJsXS5wdXNoKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcmNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzW3VybF0ucHVzaChlcnJvcmNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGlzIGNhbGxiYWNrIHRvIHRoZSBxdWV1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3hocikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl94aHIudXJsICE9IHVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrUXVldWVzW3VybF0gPSB0aGlzLmNhbGxiYWNrUXVldWVzW3RoaXMuX3hoci51cmxdLmNvbmNhdCh0aGlzLmNhbGxiYWNrUXVldWVzW3VybF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja1F1ZXVlc1t0aGlzLl94aHIudXJsXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrUXVldWVzW3VybF0gPSB0aGlzLmVycm9yQ2FsbGJhY2tRdWV1ZXNbdGhpcy5feGhyLnVybF0uY29uY2F0KHRoaXMuZXJyb3JDYWxsYmFja1F1ZXVlc1t1cmxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXJyb3JDYWxsYmFja1F1ZXVlc1t0aGlzLl94aHIudXJsXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feGhyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAodGhpcy5jb25zdHJhaW50TW9kZWwgJiYgdGhpcy5jb25zdHJhaW50TW9kZWwudHlwZSA9PSBcIlBPU1RcIikgPyBcIlBPU1RcIiA6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogKHRoaXMuY29uc3RyYWludE1vZGVsICYmIHRoaXMuY29uc3RyYWludE1vZGVsLnR5cGUgPT0gXCJQT1NUXCIpID8gdXJsLnN1YnN0cigwLCB1cmwuaW5kZXhPZignPycpKSA6ICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLmRhdGFUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6ICh0aGlzLmNvbnN0cmFpbnRNb2RlbCAmJiB0aGlzLmNvbnN0cmFpbnRNb2RlbC50eXBlID09IFwiUE9TVFwiKSA/IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uc3RyYWludE1vZGVsLmdldEJvZHkoKSkgOiB0aGlzLnBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zdFBhcnNlID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1t1cmxdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29udGluZW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY3dyYXBwZXJkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N3cmFwcGVyZGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jd3JhcHBlcmRhdGEgPSB0aGlzLl9jd3JhcHBlcmRhdGEuY29uY2F0KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9jd3JhcHBlcmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVt1cmxdID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50Y2FjaGVbdXJsXSA9IHRoaXMuY291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuY2FsbGJhY2tRdWV1ZXNbdXJsXS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrUXVldWVzW3VybF1baV0oZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrUXVldWVzW3VybF0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1sncGFyc2VBc3luYyddKGRhdGEsIGZ1bmN0aW9uKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFBhcnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1t1cmxdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXNUZXh0ICE9IFwiYWJvcnRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmVycm9yQ2FsbGJhY2tRdWV1ZXNbdXJsXS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2tRdWV1ZXNbdXJsXVtpXShlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2tRdWV1ZXNbdXJsXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3hoci51cmwgPSB1cmw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl94aHIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuY2FjaGVbdXJsXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlID0ge307XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignc291cmNlOmNoYW5nZScpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqIEBleHBvcnQgKi9cclxuICAgIEdvdkluZm8uUmVzdFNvdXJjZS5wcm90b3R5cGUuZ2V0Q29uc3RyYWludE1vZGVsID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGNtU3RyID0gbnVsbCA7XHJcbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdEJ5KSB7XHJcbiAgICAgICAgICAgIHZhciBjbVN0ciA9IHRoaXMuZ2V0UGFyYW1ldGVyKHRoaXMucGVyc2lzdEJ5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbVN0ciA9IHRoaXMuY21TdHI7XHJcbiAgICAgICAgICAgIC8vdGhyb3cgXCJvbmx5IHBlcnNpc3RCeSBpbXBsZW1lbnRlZCBpbiAxLjRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNtU3RyKSB7XHJcbiAgICAgICAgICAgIHZhciBjb25zdHJhaW50TW9kZWwgPSBuZXcgdGhpcy5Db25zdHJhaW50TW9kZWxQcm90b3R5cGUoKTtcclxuICAgICAgICAgICAgY29uc3RyYWludE1vZGVsLnNldEZyb21KU09OU3RyaW5nKGNtU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRNb2RlbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuQ29uc3RyYWludE1vZGVsUHJvdG90eXBlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgR292SW5mby5SZXN0U291cmNlLnByb3RvdHlwZVsnQ29uc3RyYWludE1vZGVsUHJvdG90eXBlJ10gPSBHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludE1vZGVsO1xyXG4gICAgLyoqIFxyXG5GaXJzdCAoaWYgbm90IGRvbmUgc28gcHJpb3IpLCBSZXN0U291cmNlIHdpbGwgY29sbGVjdCBhbGwgQ29uc3RyYWludCBNb2RlbHMgZnJvbSBzdWJzY3JpYmVkIENvbnN0YWludFBhbmVscy4gPGJyPlxyXG5UaGVuLCB0aGlzLmNvbnN0cmFpbnRNb2RlbCB3aWxsIGJlIGNyZWF0ZWQgYnkgdGFraW5nIGFuIGludGVyc2VjdGlvbiBvZiBhbGwgdGhlIGNvbnN0cmFpbnQgbW9kZWxzLlxyXG5UaGVuLCB0aGlzLmNvbnN0cmFpbnRNb2RlbC5nZXRVcmwgaXMgY2FsbGVkIHRvIGNvbnN0cnVjdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHNlcnZlciByZXF1ZXN0IHVybCB0aGF0IGNvbnRhaW5zIHNlYXJjaCBjb25zdHJhaW50cy5cclxuVGhlbiwgUmVzdFNvdXJjZSBpc3N1ZXMgYWpheCBjYWxsIGFuZCBxdWV1ZXMgY29ycmVzcG9uZGluZyBjYWxsYmFja3NcclxuT25jZSBSZXNwb25zZSBpcyByZWNlaXZlZCwgZWl0aGVyIGNhbGxiYWNrcyBvciBlcnJvcmNhbGxiYWNrcyBhcmUgY2FsbGVkLlxyXG5cclxuQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gY2FsbCB1cG9uIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuXHJcbkBwYXJhbSB7ZnVuY3Rpb259IGVycm9yY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGVycm9yIHJlc3BvbnNlIGZyb20gc2VydmVyLlxyXG5AZXhhbXBsZVxyXG52YXIgc291cmNlID0gbmV3IE15U291cmNlKCk7XHJcbnZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgLy8gLi4uIGRvIHN0dWZmIHdpdGggZGF0YVxyXG59XHJcbnZhciBlcnJvcmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSl7XHJcbiAgICAvLyBoYW5kbGUgZXJyb3JcclxufVxyXG5zb3VyY2UuZ2V0KGNhbGxiYWNrLCBlcnJvcmNhbGxiYWNrKTtcclxuQGV4cG9ydCB7Kn0gKi9cclxuICAgIEdvdkluZm8uUmVzdFNvdXJjZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVycm9yY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLmdldEFsbChudWxsICwgY2FsbGJhY2ssIGVycm9yY2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgLyoqIEBleHBvcnQgKi9cclxuICAgIEdvdkluZm8uUmVzdFNvdXJjZS5wcm90b3R5cGUuc2V0Q291bnQgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgICAgIHRoaXMuY291bnQgPSBjb3VudDtcclxuICAgIH1cclxuICAgIC8qKiBAZXhwb3J0ICovXHJcbiAgICBHb3ZJbmZvLlJlc3RTb3VyY2UucHJvdG90eXBlLmdldENvdW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnQ7XHJcbiAgICB9XHJcbiAgICBHb3ZJbmZvLlJlc3RTb3VyY2UucHJvdG90eXBlWydwYXJzZUFzeW5jJ10gPSBmdW5jdGlvbihkYXRhLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAqIEFic3RyYWN0Q29uc3RyYWludFBhbmVsLiBBbGwgY29uc3RyYWludCBwYW5lbHMgbXVzdCBpbmhlcml0IGZyb20gaXQuIFxyXG4gICBJbnN0YW50aWF0ZSB0aGlzIGNsYXNzIHRvIGFwcGx5IGNvbnN0cmFpbnRzIG9uIHRoZSBSZXN0U291cmNlIHZpYSBHRVQgb3IgUE9TVCBtZXRob2RzLCBieSBjaGFuZ2luZyBpdCdzIGNvbnN0cmFpbnRNb2RlbC5nZXRVcmwoKSBvdXRwdXQuIFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuRGF0YVNvdXJjZSA9IG5ldyBHb3ZJbmZvLlJlc3RTb3VyY2UuZXh0ZW5kKHtcclxuICAgIFxyXG59KTtcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBleHBvcnRcclxuICovXHJcbiAgICBHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludFBhbmVsID0gR292SW5mby5CYXNlVmlldy5leHRlbmQoe1xyXG4gICAgICAgIC8vICAgIHRoaXMudHJpZ2dlcignY29uc3RyYWludDphcHBlbmQnLCBjb25zdHJhaW50TW9kZWwpO1xyXG4gICAgICAgIC8vICAgIHRoaXMudHJpZ2dlcignY29uc3RyYWludDpyZXBsYWNlJywgY29uc3RyYWludE1vZGVsKTtcclxuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIEdvdkluZm8uQmFzZVZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIHNvdXJjZVxyXG4gICAgICAgICAgICB0aGlzLnNldFNvdXJjZShvcHRpb25zLnNvdXJjZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXRTb3VyY2U6IGZ1bmN0aW9uKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCB0aGlzLnNvdXJjZSA9PSBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnVuc3Vic2NyaWJlKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcExpc3RlbmluZyh0aGlzLnNvdXJjZSwgJ3NvdXJjZTpjaGFuZ2UnLCB0aGlzLnJlbmRlclZpZXcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5zdWJzY3JpYmUodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMuc291cmNlLCAnc291cmNlOmNoYW5nZScsIHRoaXMucmVuZGVyVmlldyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZS51bnN1YnNjcmliZSh0aGlzKTtcclxuICAgICAgICAgICAgR292SW5mby5CYXNlVmlldy5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRQYW5lbC5wcm90b3R5cGVbJ3ByZWxvYWREYXRhQXN5bmMnXSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuc291cmNlO1xyXG4gICAgICAgIHZhciBjb25zdHJhaW50TW9kZWwgPSB0aGlzLnNvdXJjZS5nZXRDb25zdHJhaW50TW9kZWwoKTtcclxuICAgICAgICBjYWxsYmFjayhjb25zdHJhaW50TW9kZWwpO1xyXG4gICAgfVxyXG4gICAgLyoqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybiBjb25zdHJhaW50TW9kZWwgd2l0aCBleHBsaWNpdCBjb25zdHJhaW50IHZhbHVlcyBkZXBlbmRpbmcgb24gc3RhdGUgb2YgdGhpcyBjb25zdHJhaW50UGFuZWwgXHJcbiogQGV4YW1wbGVcclxuXHJcbk15Q29uc3RyYWludFBhbmVsID0gR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRQYW5lbC5leHRlbmQoe1xyXG4gICAgZ2V0Q29uc3RyYWludE1vZGVsIDogZnVuY3Rpb24oKXtcclxuICAgICAgICB2YXIgY29uc3RyYWludE1vZGVsID0gbmV3IHRoaXMuc291cmNlLkNvbnN0cmFpbnRNb2RlbFByb3RvdHlwZSgpO1xyXG4gICAgICAgIGNvbnN0cmFpbnRNb2RlbC5zZXQoJ3NvbWVmaWVsZG5hbWUnLCB0aGlzLiQoJyNpbnB1dCcpLnZhbCgpKTsgLy8gYXNzdW1pbmcgdGhhdCB0aGlzIHZpZXcgY29uc3RhaW5zICNpbnB1dCBlbGVtZW50XHJcbiAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gdGhlIHZhbHVlIG9mIGlucHV0IGV2ZXJ5dGltZSBSZXN0U291cmNlIHJlcXVlc3RzIENvbnN0cmFpbnRNb2RlbCBmcm9tIHRoaXMgcGFuZWxcclxuICAgICAgICByZXR1cm4gY29uc3RyYWludE1vZGVsO1xyXG4gICAgfVxyXG59KTtcclxuKiBAbGVuZHMge0dvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50UGFuZWwucHJvdG90eXBlfVxyXG4qIEByZXR1cm5zIHtPYmplY3R9IHJldHVybnMgQ29uc3RyYWludE1vZGVsXHJcbiovXHJcbiAgICBHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludFBhbmVsLnByb3RvdHlwZVsnZ2V0Q29uc3RyYWludE1vZGVsJ10gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY29uc3RyYWludE1vZGVsID0gbmV3IHRoaXMuc291cmNlWydDb25zdHJhaW50TW9kZWxQcm90b3R5cGUnXSgpO1xyXG4gICAgICAgIHJldHVybiBjb25zdHJhaW50TW9kZWw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuKiBAZXhwb3J0IHsqfSBcclxuKiBAcmV0dXJucyB7T2JqZWN0fSByZXR1cm5zIFJlc3RTb3VyY2VcclxuKi9cclxuICAgIEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50UGFuZWwucHJvdG90eXBlLmdldFNvdXJjZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIC8qKlxyXG4qIEBleHBvcnQgeyp9IFxyXG4qL1xyXG4gICAgR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRQYW5lbC5wcm90b3R5cGUub25Db25zdHJhaW50Q2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjb25zdHJhaW50UGFuZWw6Y2hhbmdlZCcsIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgO1xyXG4gICAgLyoqXHJcbiAqIEBleHRlbmRzIHtHb3ZJbmZvLkFic3RyYWN0Q29uc3RyYWludFBhbmVsfVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGV4cG9ydFxyXG4gKi9cclxuICAgIEdvdkluZm8uUGFnaW5hdGlvblBhbmVsID0gR292SW5mby5BYnN0cmFjdENvbnN0cmFpbnRQYW5lbC5leHRlbmQoe1xyXG4gICAgICAgIG1pZGRsZUVudHJpZXM6IDQsXHJcbiAgICAgICAgZWRnZUVudHJpZXM6IDIsXHJcbiAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICdjbGljayAuZnctcGFnaW5hdGlvbi1idG4nOiAnb25QYWdpbmF0aW9uQnRuJyxcclxuICAgICAgICAgICAgJ2NoYW5nZSAuZnctcGFnaW5hdGlvbi1pdGVtcy1wZXItcGFnZSc6ICdvblBhZ2luYXRpb25CdG4nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIEdvdkluZm8uQWJzdHJhY3RDb25zdHJhaW50UGFuZWwucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldEludGVydmFsOiBmdW5jdGlvbihjdXJyZW50X3BhZ2UsIG5wKSB7XHJcbiAgICAgICAgICAgIHZhciBuZV9oYWxmID0gTWF0aC5jZWlsKHRoaXMubWlkZGxlRW50cmllcyAvIDIpO1xyXG4gICAgICAgICAgICB2YXIgdXBwZXJfbGltaXQgPSBucCAtIHRoaXMubWlkZGxlRW50cmllcztcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY3VycmVudF9wYWdlID4gbmVfaGFsZiA/IE1hdGgubWF4KE1hdGgubWluKGN1cnJlbnRfcGFnZSAtIG5lX2hhbGYsIHVwcGVyX2xpbWl0KSwgMCkgOiAwO1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gY3VycmVudF9wYWdlID4gbmVfaGFsZiA/IE1hdGgubWluKGN1cnJlbnRfcGFnZSArIG5lX2hhbGYsIG5wKSA6IE1hdGgubWluKHRoaXMubWlkZGxlRW50cmllcywgbnApO1xyXG4gICAgICAgICAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0Q29uc3RyYWludE1vZGVsOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRNb2RlbCA9IG5ldyB0aGlzLnNvdXJjZS5Db25zdHJhaW50TW9kZWxQcm90b3R5cGUoKTtcclxuICAgICAgICAgICAgdmFyICRlbCA9IHRoaXMuJCgnLmZ3LXNlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgIHZhciBwYWdlID0gJGVsLmRhdGEoJ3BhZ2UnKTtcclxuICAgICAgICAgICAgY29uc3RyYWludE1vZGVsLnNldFBhZ2VOdW1iZXIocGFnZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBhZ2VTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50TW9kZWwuc2V0UGFnZVNpemUodGhpcy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29uc3RyYWludE1vZGVsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25QYWdpbmF0aW9uQnRuOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIHZhciAkZWwgPSAkKGUuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgICAgIHRoaXMuJCgnLmZ3LXNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJ2Z3LXNlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICRlbC5hZGRDbGFzcygnZnctc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjb25zdHJhaW50OmFwcGVuZCcsIHRoaXMuZ2V0Q29uc3RyYWludE1vZGVsKCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGhpcy4kKCcuZnctcGFnaW5hdGlvbi1idG5bZGF0YS1wYWdlPVwiJyArIHRoaXMuX3ByZWxvYWREYXRhLnBhZ2VOdW1iZXIgKyAnXCJdJykuYWRkQ2xhc3MoJ2Z3LXNlbGVjdGVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7fVxyXG4gICAgfSlcclxuICAgIEdvdkluZm8uUGFnaW5hdGlvblBhbmVsLnByb3RvdHlwZVsncHJlbG9hZERhdGFBc3luYyddID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICAvL2xlZnQsIG1pZGRsZSwgcmlnaHQsIHNlbGVjdGVkLCBoYXNOZXh0LCBoYXNQcmV2aW91cywgYmVnaW5TdHIsIGVuZFN0ciwgY291bnRcclxuICAgICAgICAvL21hcmt1cDogIGZ3LXBhZ2luYXRpb24tYnRuICBhdHRyOiBkYXRhLXBhZ2VcclxuICAgICAgICB0aGlzLnNvdXJjZS5nZXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBjb25zdHJhaW50TW9kZWwgPSB0aGlzLnNvdXJjZS5nZXRDb25zdHJhaW50TW9kZWwoKTtcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcclxuICAgICAgICAgICAgZGF0YS5wYWdlU2l6ZSA9IGNvbnN0cmFpbnRNb2RlbC5nZXRQYWdlU2l6ZSgpO1xyXG4gICAgICAgICAgICBkYXRhLnBhZ2VOdW1iZXIgPSBjb25zdHJhaW50TW9kZWwuZ2V0UGFnZU51bWJlcigpO1xyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gdGhpcy5zb3VyY2UuY291bnQ7XHJcbiAgICAgICAgICAgIGRhdGEuY291bnQgPSBkYXRhLmNvdW50ID4xMDAwMCA/IDEwMDAwIDpkYXRhLmNvdW50O1xyXG4gICAgICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwoZGF0YS5jb3VudCAvIGRhdGEucGFnZVNpemUpO1xyXG4gICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSB0aGlzLmdldEludGVydmFsKGRhdGEucGFnZU51bWJlciwgZGF0YS50b3RhbFBhZ2VzKTtcclxuICAgICAgICAgICAgdmFyIG5vTWlkZGxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gW107XHJcbiAgICAgICAgICAgIHZhciBsZW5kID0gdGhpcy5lZGdlRW50cmllcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRnZUVudHJpZXMgPj0gaW50ZXJ2YWxbMF0pIHtcclxuICAgICAgICAgICAgICAgIG5vTWlkZGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGxlbmQgPSBpbnRlcnZhbFsxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxlbmQ7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxlZnQucHVzaChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmlnaHQgPSBbXTtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0RWRnZUJlZ2luID0gZGF0YS50b3RhbFBhZ2VzIC0gdGhpcy5lZGdlRW50cmllcztcclxuICAgICAgICAgICAgdmFyIHJiZWdpbiA9IHJpZ2h0RWRnZUJlZ2luO1xyXG4gICAgICAgICAgICBpZiAocmlnaHRFZGdlQmVnaW4gPD0gaW50ZXJ2YWxbMV0pIHtcclxuICAgICAgICAgICAgICAgIG5vTWlkZGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJiZWdpbiA9IGludGVydmFsWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSByYmVnaW4sIGwgPSBkYXRhLnRvdGFsUGFnZXM7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0LnB1c2goaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1pZGRsZSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAobGVmdFtsZWZ0Lmxlbmd0aCAtIDFdID49IHJpZ2h0WzBdKSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gW107XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkYXRhLnRvdGFsUGFnZXM7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBtaWRkbGUucHVzaChpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghbm9NaWRkbGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbnRlcnZhbFswXSwgbCA9IGludGVydmFsWzFdOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWlkZGxlLnB1c2goaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5sZWZ0ID0gbGVmdDtcclxuICAgICAgICAgICAgZGF0YS5yaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgICAgICBkYXRhLm1pZGRsZSA9IG1pZGRsZTtcclxuICAgICAgICAgICAgZGF0YS5oYXNOZXh0ID0gZGF0YS5wYWdlTnVtYmVyIDwgZGF0YS50b3RhbFBhZ2VzIC0gMTtcclxuICAgICAgICAgICAgZGF0YS5uZXh0ID0gZGF0YS5wYWdlTnVtYmVyICsgMTtcclxuICAgICAgICAgICAgZGF0YS5oYXNQcmV2aW91cyA9IGRhdGEucGFnZU51bWJlciA+IDA7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS5oYXNOZXh0ICYmICFkYXRhLmhhc1ByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmxlZnQgPSBkYXRhLnJpZ2h0ID0gZGF0YS5taWRkbGUgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLnByZXZpb3VzID0gZGF0YS5wYWdlTnVtYmVyIC0gMTtcclxuICAgICAgICAgICAgZGF0YS5iZWdpblN0ciA9IChkYXRhLnBhZ2VOdW1iZXIgKiBkYXRhLnBhZ2VTaXplICsgMSk7XHJcbiAgICAgICAgICAgIGRhdGEuZW5kU3RyID0gZGF0YS5iZWdpblN0ciArIGRhdGEucGFnZVNpemUgLSAxO1xyXG4gICAgICAgICAgICBkYXRhLmVuZFN0ciA9IGRhdGEuZW5kU3RyID4gZGF0YS5jb3VudCA/IGRhdGEuY291bnQgOiBkYXRhLmVuZFN0cjtcclxuICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5iaW5kKHRoaXMpLCBlcnJvckNhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIEdvdkluZm8uU2Nyb2xsUGFnaW5hdGlvblBhbmVsID0gR292SW5mby5QYWdpbmF0aW9uUGFuZWwuZXh0ZW5kKHt9KTtcclxuICAgIHJldHVybiBHb3ZJbmZvO1xyXG59KTsiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwiYmxvY2tpbmctd3JhcHBlclxcXCIgaWQ9XFxcImJsb2NraW5nLXdyYXBwZXJcXFwiPlxcblxcdDxkaXYgY2xhc3M9XFxcImJsb2NraW5nLWNvbnRlbnRcXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInZlcnRpY2FsLWNlbnRlci13cmFwcGVyXFxcIj5cXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ2ZXJ0aWNhbC1jZW50ZXJcXFwiPlxcblxcdFxcdFxcdFxcdDxkaXYgaWQ9XFxcImJsb2NraW5nLXRleHRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdDxpIGNsYXNzPVxcXCJmYSBmYS1zcGlubmVyIGZhLXNwaW4gZmEtbGdcXFwiPjwvaT5cXG5cXHRcXHRcXHRcXHRcXHQ8cCBjbGFzcz1cXFwic21hbGxcXFwiPkxvYWRpbmcuLi48L3A+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuXFx0PC9kaXY+XFxuPC9kaXY+XFxuXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPCEtLVBhZ2UgRXJyb3IgTWVzc2FnZSB3aXRoIFNpZGUgQmFyLS0+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFsZXJ0IGFsZXJ0LWluZm9cXFwiPjwlPSAodHlwZW9mIF9wcmVsb2FkRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgX3ByZWxvYWREYXRhICYmIF9wcmVsb2FkRGF0YS5lcnJvclRleHQpIHx8IGVycm9yVGV4dCAlPjwvZGl2PlxcblwiIiwibW9kdWxlLmV4cG9ydHMgPSBcIjwhLS1TZWN0aW9uIEVycm9yIE1lc3NhZ2UtLT5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYWxlcnQgYWxlcnQtaW5mb1xcXCI+PCU9IGVycm9yVGV4dCAlPjwvZGl2PlxcblwiIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXYgaWQ9XFxcImxvYWRncmFwaGljb3ZlcmxheVxcXCI+XFxuXFx0PHA+XFxuXFx0XFx0PGkgY2xhc3M9XFxcImZhIGZhLXNwaW5uZXIgZmEtc3BpblxcXCI+PC9pPiBMb2FkaW5nLi4uXFxuXFx0PC9wPlxcblxcbjwvZGl2PlxcblwiIl0sInNvdXJjZVJvb3QiOiIifQ==