| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see translations.bundle.js.LICENSE.txt */
(()=>{var n={99271:(n,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={methods:{trans:function(n){return this.$store.getters.translations[n]}}}},65191:(n,t,e)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(e(72100)),o=i(e(78345)),a=i(e(3830));function i(n){return n&&n.__esModule?n:{default:n}}r.default.use(o.default),t.default=new o.default({mode:"history",base:window.data.baseUrl+"/translations",routes:[{path:"/",name:"overview",component:a.default}]})},58112:(n,t,e)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateSearch=t.updatePrincipalLoading=t.updateCurrentDomain=t.updatePageIndex=t.resetTranslation=t.saveTranslations=t.refreshCounts=t.getDomainsTree=t.getCatalog=t.getTranslations=void 0;var r=s(e(72100)),o=s(e(74104)),a=function(n){if(n&&n.__esModule)return n;var t={};if(null!=n)for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e]);return t.default=n,t}(e(98532)),i=e(50066);function s(n){return n&&n.__esModule?n:{default:n}}r.default.use(o.default),t.getTranslations=function(n){var t=n.commit,e=window.data.translationUrl;r.default.http.get(e).then((function(n){t(a.SET_TRANSLATIONS,n.body),t(a.APP_IS_READY)}),(function(n){(0,i.showGrowl)("error",n.bodyText?JSON.parse(n.bodyText).error:n.statusText)}))},t.getCatalog=function(n,t){var e=n.commit;e(a.PRINCIPAL_LOADING,!0),r.default.http.get(t.url,{params:{page_size:t.page_size,page_index:t.page_index}}).then((function(n){e(a.SET_TOTAL_PAGES,n.headers.get("Total-Pages")),e(a.SET_CATALOG,n.body),e(a.PRINCIPAL_LOADING,!1)}),(function(n){(0,i.showGrowl)("error",n.bodyText?JSON.parse(n.bodyText).error:n.statusText)}))},t.getDomainsTree=function(n,t){var e=n.commit,o=window.data.domainsTreeUrl,s={};e(a.SIDEBAR_LOADING,!0),e(a.PRINCIPAL_LOADING,!0),t.store.getters.searchTags.length&&(s.search=t.store.getters.searchTags),r.default.http.get(o,{params:s}).then((function(n){e(a.SET_DOMAINS_TREE,n.body),e(a.SIDEBAR_LOADING,!1),e(a.RESET_CURRENT_DOMAIN)}),(function(n){(0,i.showGrowl)("error",n.bodyText?JSON.parse(n.bodyText).error:n.statusText)}))},t.refreshCounts=function(n,t){var e=n.commit,o=window.data.domainsTreeUrl,s={};t.store.getters.searchTags.length&&(s.search=t.store.getters.searchTags),r.default.http.get(o,{params:s}).then((function(n){e(a.DECREASE_CURRENT_DOMAIN_TOTAL_MISSING_TRANSLATIONS,t.successfullySaved),e(a.SET_DOMAINS_TREE,n.body)}),(function(n){(0,i.showGrowl)("error",n.bodyText?JSON.parse(n.bodyText).error:n.statusText)}))},t.saveTranslations=function(n,t){var e=n.commit,o=t.url,s=t.translations;r.default.http.post(o,{translations:s}).then((function(){return t.store.dispatch("refreshCounts",{successfullySaved:s.length,store:t.store}),e(a.RESET_MODIFIED_TRANSLATIONS),(0,i.showGrowl)("success","Translations successfully updated")}),(function(n){(0,i.showGrowl)("error",n.bodyText?JSON.parse(n.bodyText).error:n.statusText)}))},t.resetTranslation=function(n,t){n.commit;var e=t.url,o=t.translations;r.default.http.post(e,{translations:o}).then((function(){(0,i.showGrowl)("success","Translations successfully reset")}),(function(n){(0,i.showGrowl)("error",n.bodyText?JSON.parse(n.bodyText).error:n.statusText)}))},t.updatePageIndex=function(n,t){(0,n.commit)(a.SET_PAGE_INDEX,t)},t.updateCurrentDomain=function(n,t){(0,n.commit)(a.SET_CURRENT_DOMAIN,t)},t.updatePrincipalLoading=function(n,t){(0,n.commit)(a.PRINCIPAL_LOADING,t)},t.updateSearch=function(n,t){(0,n.commit)(a.SEARCH_TAGS,t)}},29778:(n,t,e)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=u(e(72100)),o=u(e(20629)),a=u(e(96486)),i=function(n){if(n&&n.__esModule)return n;var t={};if(null!=n)for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e]);return t.default=n,t}(e(58112)),s=u(e(36205));function u(n){return n&&n.__esModule?n:{default:n}}r.default.use(o.default);var l={pageIndex:1,totalPages:0,translationsPerPage:20,currentDomain:"",translations:{data:{},info:{}},catalog:{data:{},info:{}},domainsTree:[],totalMissingTranslations:0,totalTranslations:0,currentDomainTotalTranslations:0,currentDomainTotalMissingTranslations:0,isReady:!1,sidebarLoading:!0,principalLoading:!0,searchTags:[],modifiedTranslations:[]},c={totalPages:function(n){return n.totalPages},pageIndex:function(n){return n.pageIndex},currentDomain:function(n){return n.currentDomain},translations:function(n){return n.translations},catalog:function(n){return n.catalog},domainsTree:function(){return function n(t){return t.forEach((function(t){t.children=a.default.values(t.children),t.extraLabel=t.total_missing_translations,t.dataValue=t.domain_catalog_link,t.warning=Boolean(t.total_missing_translations),t.disable=!t.total_translations,t.id=t.full_name,n(t.children)})),t}(l.domainsTree)},isReady:function(n){return n.isReady},searchTags:function(n){return n.searchTags}};t.default=new o.default.Store({state:l,getters:c,actions:i,mutations:s.default})},98532:(n,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SET_TRANSLATIONS="SET_TRANSLATIONS",t.SET_CATALOG="SET_CATALOG",t.SET_DOMAINS_TREE="SET_DOMAINS_TREE",t.APP_IS_READY="APP_IS_READY",t.SET_TOTAL_PAGES="SET_TOTAL_PAGES",t.SET_PAGE_INDEX="SET_PAGE_INDEX",t.SET_CURRENT_DOMAIN="SET_CURRENT_DOMAIN",t.RESET_CURRENT_DOMAIN="RESET_CURRENT_DOMAIN",t.SIDEBAR_LOADING="SIDEBAR_LOADING",t.PRINCIPAL_LOADING="PRINCIPAL_LOADING",t.SEARCH_TAGS="SEARCH_TAGS",t.DECREASE_CURRENT_DOMAIN_TOTAL_MISSING_TRANSLATIONS="DECREASE_CURRENT_DOMAIN_TOTAL_MISSING_TRANSLATIONS",t.RESET_MODIFIED_TRANSLATIONS="RESET_MODIFIED_TRANSLATIONS"},36205:(n,t,e)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o,a=(r=e(88106))&&r.__esModule?r:{default:r},i=function(n){if(n&&n.__esModule)return n;var t={};if(null!=n)for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e]);return t.default=n,t}(e(98532));t.default=(o={},(0,a.default)(o,i.SET_TRANSLATIONS,(function(n,t){t.data.forEach((function(t){n.translations[t.translation_id]=t.name}))})),(0,a.default)(o,i.SET_CATALOG,(function(n,t){n.catalog=t})),(0,a.default)(o,i.SET_DOMAINS_TREE,(function(n,t){n.totalMissingTranslations=t.data.tree.total_missing_translations,n.totalTranslations=t.data.tree.total_translations,n.domainsTree=t.data.tree.children})),(0,a.default)(o,i.APP_IS_READY,(function(n){n.isReady=!0})),(0,a.default)(o,i.SET_TOTAL_PAGES,(function(n,t){n.totalPages=Number(t)})),(0,a.default)(o,i.SET_PAGE_INDEX,(function(n,t){n.pageIndex=t})),(0,a.default)(o,i.SET_CURRENT_DOMAIN,(function(n,t){n.currentDomain=t.full_name,n.currentDomainTotalTranslations=t.total_translations,n.currentDomainTotalMissingTranslations=t.total_missing_translations})),(0,a.default)(o,i.RESET_CURRENT_DOMAIN,(function(n){n.currentDomain="",n.currentDomainTotalTranslations=0,n.currentDomainTotalMissingTranslations=0})),(0,a.default)(o,i.SIDEBAR_LOADING,(function(n,t){n.sidebarLoading=t})),(0,a.default)(o,i.PRINCIPAL_LOADING,(function(n,t){n.principalLoading=t})),(0,a.default)(o,i.SEARCH_TAGS,(function(n,t){n.searchTags=t})),(0,a.default)(o,i.DECREASE_CURRENT_DOMAIN_TOTAL_MISSING_TRANSLATIONS,(function(n,t){n.currentDomainTotalMissingTranslations-=t})),(0,a.default)(o,i.RESET_MODIFIED_TRANSLATIONS,(function(n){n.modifiedTranslations=[]})),o)},60891:(n,t,e)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventBus=void 0;var r,o=(r=e(72100))&&r.__esModule?r:{default:r},a=t.EventBus=new o.default;t.default=a},50066:(n,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=t.showGrowl=function(n,t,e){var r=void 0!==e?e:2e3;"success"===n?window.$.growl({title:"",size:"large",message:t,duration:r}):window.$.growl[n]({title:"",size:"large",message:t,duration:r})};t.default=e},57274:(n,t,e)=>{"use strict";var r=e(73609);Object.defineProperty(t,"X",{value:!0});var o=u(e(92181)),a=u(e(36455)),i=u(e(7900)),s=u(e(67368));function u(n){return n&&n.__esModule?n:{default:n}}t.Z={name:"App",computed:{isReady:function(){return this.$store.getters.isReady},totalTranslations:function(){return this.$store.state.totalTranslations<=1?this.trans("label_total_domain_singular").replace("%nb_translation%",this.$store.state.totalTranslations):this.trans("label_total_domain").replace("%nb_translations%",this.$store.state.totalTranslations)},totalMissingTranslations:function(){return this.$store.state.totalMissingTranslations},totalMissingTranslationsString:function(){return 1===this.totalMissingTranslations?this.trans("label_missing_singular"):this.trans("label_missing").replace("%d",this.totalMissingTranslations)},translations:function(){return{button_save:this.trans("button_save"),button_leave:this.trans("button_leave"),modal_content:this.trans("modal_content"),modal_title:this.trans("modal_title")}}},mounted:function(){var n=this;r("a").on("click",(function(t){r(t.currentTarget).attr("href")&&(n.destHref=r(t.currentTarget).attr("href"))})),window.onbeforeunload=function(){return!(n.destHref||!n.isEdited()||n.leave)||(!n.leave&&n.isEdited()?(setTimeout((function(){window.stop()}),500),n.$refs.transModal.showModal(),n.$refs.transModal.$once("save",(function(){n.$refs.principal.saveTranslations(),n.leavePage()})),n.$refs.transModal.$once("leave",(function(){n.leavePage()})),null):void 0)}},methods:{onSearch:function(){this.$store.dispatch("getDomainsTree",{store:this.$store}),this.$store.currentDomain=""},leavePage:function(){this.leave=!0,window.location.href=this.destHref},isEdited:function(){return this.$refs.principal.edited()}},data:function(){return{destHref:null,leave:!1}},components:{Search:o.default,Sidebar:a.default,Principal:i.default,PSModal:s.default}}},19390:(n,t,e)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var r=a(e(75576)),o=a(e(98382));function a(n){return n&&n.__esModule?n:{default:n}}t.Z={components:{PSTags:r.default,PSButton:o.default},methods:{onClick:function(){var n=this.$refs.psTags.tag;this.$refs.psTags.add(n)},onSearch:function(){this.$store.dispatch("updateSearch",this.tags),this.$emit("search",this.tags)}},watch:{$route:function(){this.tags=[]}},data:function(){return{tags:[]}}}},75410:(n,t,e)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var r=c(e(88902)),o=c(e(47518)),a=c(e(98382)),i=c(e(86842)),s=c(e(70695)),u=e(60891),l=c(e(39494));function c(n){return n&&n.__esModule?n:{default:n}}t.Z={props:{modal:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{originalTranslations:[],modifiedTranslations:[]}},computed:{principalReady:function(){return!this.$store.state.principalLoading},translationsCatalog:function(){return this.$store.getters.catalog.data.data},saveAction:function(){return this.$store.getters.catalog.data.info?this.$store.getters.catalog.data.info.edit_url:""},resetAction:function(){return this.$store.getters.catalog.data.info?this.$store.getters.catalog.data.info.reset_url:""},pagesCount:function(){return this.$store.getters.totalPages},currentPagination:function(){return this.$store.getters.pageIndex},currentDomain:function(){return this.$store.state.currentDomain},currentDomainTotalTranslations:function(){return this.$store.state.currentDomainTotalTranslations<=1?"- "+this.trans("label_total_domain_singular").replace("%nb_translation%",this.$store.state.currentDomainTotalTranslations):"- "+this.trans("label_total_domain").replace("%nb_translations%",this.$store.state.currentDomainTotalTranslations)},currentDomainTotalMissingTranslations:function(){return this.$store.state.currentDomainTotalMissingTranslations},currentDomainTotalMissingTranslationsString:function(){var n="";return this.currentDomainTotalMissingTranslations&&(n=1===this.currentDomainTotalMissingTranslations?this.trans("label_missing_singular"):this.trans("label_missing").replace("%d",this.currentDomainTotalMissingTranslations)),n},noResult:function(){return""===this.$store.getters.currentDomain||void 0===this.$store.getters.currentDomain},noResultInfo:function(){return this.trans("no_result").replace("%s",this.$store.getters.searchTags.join(" - "))},searchActive:function(){return this.$store.getters.searchTags.length},searchInfo:function(){var n=this.$store.state.totalTranslations<=1?"search_info_singular":"search_info";return this.trans(n).replace("%s",this.$store.getters.searchTags.join(" - ")).replace("%d",this.$store.state.totalTranslations)}},methods:{changePage:function(n){this.$store.dispatch("updatePageIndex",n),this.fetch(),this.$store.state.modifiedTranslations=[]},isEdited:function(n){n.translation.edited?this.$store.state.modifiedTranslations[n.id]=n.translation:this.$store.state.modifiedTranslations.splice(this.$store.state.modifiedTranslations.indexOf(n.id),1)},onPageChanged:function(n){var t=this;this.edited()?(this.modal.showModal(),this.modal.$once("save",(function(){t.saveTranslations(),t.changePage(n)})),this.modal.$once("leave",(function(){t.changePage(n)}))):this.changePage(n)},fetch:function(){this.$store.dispatch("getCatalog",{url:this.$store.getters.catalog.info.current_url_without_pagination,page_size:this.$store.state.translationsPerPage,page_index:this.$store.getters.pageIndex})},getDomain:function(n){var t="";return n.forEach((function(n){t+=n+" > "})),t.slice(0,-3)},saveTranslations:function(){this.getModifiedTranslations().length&&this.$store.dispatch("saveTranslations",{url:this.saveAction,translations:this.getModifiedTranslations(),store:this.$store})},getModifiedTranslations:function(){var n=this;this.modifiedTranslations=[];var t="modules"===window.data.type?"":window.data.selected;return(0,o.default)(this.$store.state.modifiedTranslations).forEach((function(e){n.modifiedTranslations.push({default:e.default,edited:e.edited,domain:e.tree_domain.join(""),locale:window.data.locale,theme:t})})),this.modifiedTranslations},edited:function(){return(0,r.default)(this.$store.state.modifiedTranslations).length>0}},mounted:function(){var n=this;u.EventBus.$on("resetTranslation",(function(t){var e=[];e.push({default:t.default,domain:t.tree_domain.join(""),locale:window.data.locale,theme:window.data.selected}),n.$store.dispatch("resetTranslation",{url:n.resetAction,translations:e})}))},components:{TranslationInput:l.default,PSButton:a.default,PSPagination:i.default,PSAlert:s.default}}},96986:(n,t,e)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var r,o=(r=e(98382))&&r.__esModule?r:{default:r},a=e(60891);t.Z={name:"TranslationInput",props:{id:{type:Number,required:!1,default:0},extraInfo:{type:String,required:!1,default:""},label:{type:String,required:!0},translated:{type:Object,required:!0}},computed:{getTranslated:{get:function(){return this.translated.user?this.translated.user:this.translated.project},set:function(n){var t=this.translated;t.user=n,t.edited=n,this.$emit("input",t),this.$emit("editedAction",{translation:t,id:this.id})}},isMissing:function(){return null===this.getTranslated}},methods:{resetTranslation:function(){this.getTranslated="",a.EventBus.$emit("resetTranslation",this.translated)}},components:{PSButton:o.default}}},82114:(n,t,e)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var r=s(e(88902)),o=s(e(76659)),a=s(e(63856)),i=e(60891);function s(n){return n&&n.__esModule?n:{default:n}}t.Z={props:{modal:{type:Object,required:!1,default:function(){return{}}},principal:{type:Object,required:!1,default:function(){return{}}}},computed:{treeReady:function(){return!this.$store.state.sidebarLoading},currentItem:function(){if((""===this.$store.getters.currentDomain||void 0===this.$store.getters.currentDomain)&&this.domainsTree.length){var n=this.getFirstDomainToDisplay(this.domainsTree);return i.EventBus.$emit("reduce"),this.$store.dispatch("updateCurrentDomain",n),""!==n?(this.$store.dispatch("getCatalog",{url:n.dataValue}),i.EventBus.$emit("setCurrentElement",n.full_name),n.full_name):(this.$store.dispatch("updatePrincipalLoading",!1),"")}return this.$store.getters.currentDomain},domainsTree:function(){return this.$store.getters.domainsTree},translations:function(){return{expand:this.trans("sidebar_expand"),reduce:this.trans("sidebar_collapse"),extra:this.trans("label_missing"),extra_singular:this.trans("label_missing_singular")}}},mounted:function(){var n=this;this.$store.dispatch("getDomainsTree",{store:this.$store}),i.EventBus.$on("lastTreeItemClick",(function(t){n.edited()?(n.modal.showModal(),n.modal.$once("save",(function(){n.principal.saveTranslations(),n.itemClick(t)})),n.modal.$once("leave",(function(){n.itemClick(t)}))):n.itemClick(t)}))},methods:{itemClick:function(n){this.$store.dispatch("updateCurrentDomain",n.item),this.$store.dispatch("getCatalog",{url:n.item.dataValue}),this.$store.dispatch("updatePageIndex",1),this.$store.state.modifiedTranslations=[]},getFirstDomainToDisplay:function n(t){for(var e=(0,r.default)(t),o="",a=0;a<t.length;a+=1)if(!t[e[a]].disable){if(t[e[a]].children&&t[e[a]].children.length>0)return n(t[e[a]].children);o=t[e[a]];break}return o},edited:function(){return(0,r.default)(this.$store.state.modifiedTranslations).length>0}},components:{PSTree:o.default,PSSpinner:a.default}}},22178:(n,t)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var e="ALERT_TYPE_INFO";t.Z={props:{duration:{type:Boolean,required:!1,default:!1},alertType:{type:String,required:!0},hasClose:{type:Boolean,required:!0}},computed:{classObject:function(){return{"alert-info":this.alertType===e,"alert-warning":"ALERT_TYPE_WARNING"===this.alertType,"alert-danger":"ALERT_TYPE_DANGER"===this.alertType,"alert-success":"ALERT_TYPE_SUCCESS"===this.alertType}},isInfo:function(){return this.alertType===e}},methods:{onClick:function(){this.$emit("closeAlert")}}}},11138:(n,t)=>{"use strict";Object.defineProperty(t,"X",{value:!0}),t.Z={props:{primary:{type:Boolean},ghost:{type:Boolean}},computed:{classObject:function(){return this.ghost?{"btn-outline-primary":this.primary,"btn-outline-secondary":!this.primary}:{"btn-primary":this.primary,"btn-secondary":!this.primary}}},methods:{onClick:function(){this.$emit("click")}}}},14012:(n,t)=>{"use strict";Object.defineProperty(t,"X",{value:!0}),t.Z={props:{id:{type:String,required:!1,default:""},model:{type:Object,required:!1,default:function(){return{}}},isIndeterminate:{type:Boolean,required:!1,default:!1}},watch:{checked:function(n){this.$emit("checked",{checked:n,item:this.model})}},data:function(){return{checked:!1}}}},99507:(n,t,e)=>{"use strict";var r=e(73609);Object.defineProperty(t,"X",{value:!0});var o,a=(o=e(98382))&&o.__esModule?o:{default:o},i=e(60891);t.Z={props:{translations:{type:Object,required:!1,default:function(){return{}}}},mounted:function(){var n=this;i.EventBus.$on("showModal",(function(){n.showModal()})),i.EventBus.$on("hideModal",(function(){n.hideModal()}))},methods:{showModal:function(){r(this.$el).modal("show")},hideModal:function(){r(this.$el).modal("hide")},onSave:function(){this.$emit("save")},onLeave:function(){this.$emit("leave")}},components:{PSButton:a.default}}},45260:(n,t)=>{"use strict";Object.defineProperty(t,"X",{value:!0}),t.Z={props:{pagesCount:{type:Number,required:!0},currentIndex:{type:Number,required:!0}},computed:{isMultiPagination:function(){return this.pagesCount>this.multiPagesActivationLimit},activeLeftArrow:function(){return 1!==this.currentIndex},activeRightArrow:function(){return this.currentIndex!==this.pagesCount},pagesToDisplay:function(){return this.multiPagesToDisplay},displayPagination:function(){return this.pagesCount>1}},methods:{checkCurrentIndex:function(n){return this.currentIndex===n},showIndex:function(n){var t=n<this.currentIndex+this.multiPagesToDisplay,e=n>this.currentIndex-this.multiPagesToDisplay,r=t&&e,o=n===this.pagesCount,a=1===n;return this.isMultiPagination?r||a||o:!this.isMultiPagination},changePage:function(n){this.$emit("pageChanged",n)},showFirstDots:function(n){var t=this.pagesCount-this.multiPagesToDisplay;return this.isMultiPagination?n===this.pagesCount&&this.currentIndex<=t:this.isMultiPagination},showLastDots:function(n){return this.isMultiPagination?1===n&&this.currentIndex>this.multiPagesToDisplay:this.isMultiPagination},prev:function(){this.currentIndex>1&&this.changePage(this.currentIndex-1)},next:function(){this.currentIndex<this.pagesCount&&this.changePage(this.currentIndex+1)}},data:function(){return{multiPagesToDisplay:2,multiPagesActivationLimit:5}}}},60994:(n,t)=>{"use strict";Object.defineProperty(t,"X",{value:!0}),t.Z={props:{tags:{type:Array,required:!1,default:function(){return[]}},placeholder:{type:String,required:!1,default:""},hasIcon:{type:Boolean,required:!1}},computed:{inputSize:function(){return!this.tags.length&&this.placeholder?this.placeholder.length:0},placeholderToDisplay:function(){return this.tags.length?"":this.placeholder}},methods:{onKeyUp:function(){this.$emit("typing",this.$refs.tags.value)},add:function(n){n&&(this.tags.push(n.trim()),this.tag="",this.focus(),this.$emit("tagChange",this.tag))},close:function(n){var t=this.tags[n];this.tags.splice(n,1),this.$emit("tagChange",t)},remove:function(){if(this.tags.length&&!this.tag.length){var n=this.tags[this.tags.length-1];this.tags.pop(),this.$emit("tagChange",n)}},focus:function(){this.$refs.tags.focus()}},data:function(){return{tag:null}}}},88513:(n,t,e)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var r,o=(r=e(93331))&&r.__esModule?r:{default:r},a=e(60891);t.Z={name:"PSTreeItem",props:{model:{type:Object,required:!0},className:{type:String,required:!1,default:""},hasCheckbox:{type:Boolean,required:!1},translations:{type:Object,required:!1,default:function(){return{}}},currentItem:{type:String,required:!1,default:""}},computed:{id:function(){return this.model.id},isFolder:function(){return this.model.children&&this.model.children.length},displayExtraLabel:function(){return this.isFolder&&this.model.extraLabel},getExtraLabel:function(){var n="";return this.model.extraLabel&&1===this.model.extraLabel?n=this.translations.extra_singular:this.model.extraLabel&&(n=this.translations.extra.replace("%d",this.model.extraLabel)),n},isHidden:function(){return!this.isFolder},chevronStatus:function(){return this.open?"open":"closed"},isWarning:function(){return!this.isFolder&&this.model.warning},active:function(){return this.model.full_name===this.currentItem}},methods:{setCurrentElement:function(n){this.$refs[n]?(this.openTreeItemAction(),this.current=!0,this.parentElement(this.$parent)):this.current=!1},parentElement:function(n){n.clickElement&&(n.clickElement(),this.parentElement(n.$parent))},clickElement:function(){return!this.model.disable&&this.openTreeItemAction()},openTreeItemAction:function(){this.setCurrentElement(this.model.full_name),this.isFolder?this.open=!this.open:a.EventBus.$emit("lastTreeItemClick",{item:this.model})},onCheck:function(n){this.$emit("checked",n)}},mounted:function(){var n=this;a.EventBus.$on("toggleCheckbox",(function(t){var e=n.$refs[t];e&&(e.$data.checked=!e.$data.checked)})).$on("expand",(function(){n.open=!0})).$on("reduce",(function(){n.open=!1})).$on("setCurrentElement",(function(t){n.setCurrentElement(t)})),this.setCurrentElement(this.currentItem)},components:{PSCheckbox:o.default},data:function(){return{open:!1,current:!1}}}},41134:(n,t,e)=>{"use strict";Object.defineProperty(t,"X",{value:!0});var r,o=e(60891),a=(r=e(37862))&&r.__esModule?r:{default:r};t.Z={name:"PSTree",props:{model:{type:Array,default:function(){return[]}},className:{type:String,default:""},currentItem:{type:String,default:""},hasCheckbox:{type:Boolean,default:!1},translations:{type:Object,required:!1,default:function(){return{}}}},methods:{onCheck:function(n){this.$emit("checked",n)},expand:function(){o.EventBus.$emit("expand")},reduce:function(){o.EventBus.$emit("reduce")},setCurrentElement:function(n){o.EventBus.$emit("setCurrentElement",n)}},components:{PSTreeItem:a.default}}},32242:(n,t,e)=>{n.exports={default:e(33391),__esModule:!0}},88902:(n,t,e)=>{n.exports={default:e(98613),__esModule:!0}},47518:(n,t,e)=>{n.exports={default:e(48056),__esModule:!0}},88106:(n,t,e)=>{"use strict";t.__esModule=!0;var r,o=(r=e(32242))&&r.__esModule?r:{default:r};t.default=function(n,t,e){return t in n?(0,o.default)(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}},33391:(n,t,e)=>{e(31477);var r=e(34579).Object;n.exports=function(n,t,e){return r.defineProperty(n,t,e)}},98613:(n,t,e)=>{e(40961),n.exports=e(34579).Object.keys},48056:(n,t,e)=>{e(21013),n.exports=e(34579).Object.values},85663:n=>{n.exports=function(n){if("function"!=typeof n)throw TypeError(n+" is not a function!");return n}},12159:(n,t,e)=>{var r=e(36727);n.exports=function(n){if(!r(n))throw TypeError(n+" is not an object!");return n}},57428:(n,t,e)=>{var r=e(7932),o=e(78728),a=e(16531);n.exports=function(n){return function(t,e,i){var s,u=r(t),l=o(u.length),c=a(i,l);if(n&&e!=e){for(;l>c;)if((s=u[c++])!=s)return!0}else for(;l>c;c++)if((n||c in u)&&u[c]===e)return n||c||0;return!n&&-1}}},32894:n=>{var t={}.toString;n.exports=function(n){return t.call(n).slice(8,-1)}},34579:n=>{var t=n.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},19216:(n,t,e)=>{var r=e(85663);n.exports=function(n,t,e){if(r(n),void 0===t)return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,o){return n.call(t,e,r,o)}}return function(){return n.apply(t,arguments)}}},8333:n=>{n.exports=function(n){if(null==n)throw TypeError("Can't call method on "+n);return n}},89666:(n,t,e)=>{n.exports=!e(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(n,t,e)=>{var r=e(36727),o=e(33938).document,a=r(o)&&r(o.createElement);n.exports=function(n){return a?o.createElement(n):{}}},73338:n=>{n.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(n,t,e)=>{var r=e(33938),o=e(34579),a=e(19216),i=e(41818),s=e(27069),u=function(n,t,e){var l,c,d,f=n&u.F,p=n&u.G,h=n&u.S,g=n&u.P,$=n&u.B,m=n&u.W,b=p?o:o[t]||(o[t]={}),v=b.prototype,y=p?r:h?r[t]:(r[t]||{}).prototype;for(l in p&&(e=t),e)(c=!f&&y&&void 0!==y[l])&&s(b,l)||(d=c?y[l]:e[l],b[l]=p&&"function"!=typeof y[l]?e[l]:$&&c?a(d,r):m&&y[l]==d?function(n){var t=function(t,e,r){if(this instanceof n){switch(arguments.length){case 0:return new n;case 1:return new n(t);case 2:return new n(t,e)}return new n(t,e,r)}return n.apply(this,arguments)};return t.prototype=n.prototype,t}(d):g&&"function"==typeof d?a(Function.call,d):d,g&&((b.virtual||(b.virtual={}))[l]=d,n&u.R&&v&&!v[l]&&i(v,l,d)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,n.exports=u},7929:n=>{n.exports=function(n){try{return!!n()}catch(n){return!0}}},33938:n=>{var t=n.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:n=>{var t={}.hasOwnProperty;n.exports=function(n,e){return t.call(n,e)}},41818:(n,t,e)=>{var r=e(4743),o=e(83101);n.exports=e(89666)?function(n,t,e){return r.f(n,t,o(1,e))}:function(n,t,e){return n[t]=e,n}},33758:(n,t,e)=>{n.exports=!e(89666)&&!e(7929)((function(){return 7!=Object.defineProperty(e(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(n,t,e)=>{var r=e(32894);n.exports=Object("z").propertyIsEnumerable(0)?Object:function(n){return"String"==r(n)?n.split(""):Object(n)}},36727:n=>{n.exports=function(n){return"object"==typeof n?null!==n:"function"==typeof n}},16227:n=>{n.exports=!0},4743:(n,t,e)=>{var r=e(12159),o=e(33758),a=e(33206),i=Object.defineProperty;t.f=e(89666)?Object.defineProperty:function(n,t,e){if(r(n),t=a(t,!0),r(e),o)try{return i(n,t,e)}catch(n){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(n[t]=e.value),n}},12963:(n,t,e)=>{var r=e(27069),o=e(7932),a=e(57428)(!1),i=e(58989)("IE_PROTO");n.exports=function(n,t){var e,s=o(n),u=0,l=[];for(e in s)e!=i&&r(s,e)&&l.push(e);for(;t.length>u;)r(s,e=t[u++])&&(~a(l,e)||l.push(e));return l}},46162:(n,t,e)=>{var r=e(12963),o=e(73338);n.exports=Object.keys||function(n){return r(n,o)}},86274:(n,t)=>{t.f={}.propertyIsEnumerable},12584:(n,t,e)=>{var r=e(83856),o=e(34579),a=e(7929);n.exports=function(n,t){var e=(o.Object||{})[n]||Object[n],i={};i[n]=t(e),r(r.S+r.F*a((function(){e(1)})),"Object",i)}},52050:(n,t,e)=>{var r=e(89666),o=e(46162),a=e(7932),i=e(86274).f;n.exports=function(n){return function(t){for(var e,s=a(t),u=o(s),l=u.length,c=0,d=[];l>c;)e=u[c++],r&&!i.call(s,e)||d.push(n?[e,s[e]]:s[e]);return d}}},83101:n=>{n.exports=function(n,t){return{enumerable:!(1&n),configurable:!(2&n),writable:!(4&n),value:t}}},58989:(n,t,e)=>{var r=e(20250)("keys"),o=e(65730);n.exports=function(n){return r[n]||(r[n]=o(n))}},20250:(n,t,e)=>{var r=e(34579),o=e(33938),a="__core-js_shared__",i=o[a]||(o[a]={});(n.exports=function(n,t){return i[n]||(i[n]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:e(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},16531:(n,t,e)=>{var r=e(11052),o=Math.max,a=Math.min;n.exports=function(n,t){return(n=r(n))<0?o(n+t,0):a(n,t)}},11052:n=>{var t=Math.ceil,e=Math.floor;n.exports=function(n){return isNaN(n=+n)?0:(n>0?e:t)(n)}},7932:(n,t,e)=>{var r=e(50799),o=e(8333);n.exports=function(n){return r(o(n))}},78728:(n,t,e)=>{var r=e(11052),o=Math.min;n.exports=function(n){return n>0?o(r(n),9007199254740991):0}},66530:(n,t,e)=>{var r=e(8333);n.exports=function(n){return Object(r(n))}},33206:(n,t,e)=>{var r=e(36727);n.exports=function(n,t){if(!r(n))return n;var e,o;if(t&&"function"==typeof(e=n.toString)&&!r(o=e.call(n)))return o;if("function"==typeof(e=n.valueOf)&&!r(o=e.call(n)))return o;if(!t&&"function"==typeof(e=n.toString)&&!r(o=e.call(n)))return o;throw TypeError("Can't convert object to primitive value")}},65730:n=>{var t=0,e=Math.random();n.exports=function(n){return"Symbol(".concat(void 0===n?"":n,")_",(++t+e).toString(36))}},31477:(n,t,e)=>{var r=e(83856);r(r.S+r.F*!e(89666),"Object",{defineProperty:e(4743).f})},40961:(n,t,e)=>{var r=e(66530),o=e(46162);e(12584)("keys",(function(){return function(n){return o(r(n))}}))},21013:(n,t,e)=>{var r=e(83856),o=e(52050)(!1);r(r.S,"Object",{values:function(n){return o(n)}})},29991:(n,t,e)=>{"use strict";e.r(t),e.d(t,{default:()=>s});var r=e(94015),o=e.n(r),a=e(23645),i=e.n(a)()(o());i.push([n.id,".flex{display:flex;align-items:center}.missing{color:#f54c3e}.translations-summary{font-weight:600;font-size:1rem}\n","",{version:3,sources:["webpack://./js/app/pages/translations/components/app.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAiKA,MACE,YAAa,CACb,kBAAmB,CACpB,SAGC,aCjIW,CDkIZ,sBAGC,eCgGwB,CD/FxB,cAAe",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n.flex {\n display: flex;\n align-items: center;\n}\n\n.missing {\n color: $danger;\n}\n\n.translations-summary {\n font-weight: $font-weight-semibold;\n font-size: 1rem;\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const s=i},45504:(n,t,e)=>{"use strict";e.r(t),e.d(t,{default:()=>s});var r=e(94015),o=e.n(r),a=e(23645),i=e.n(a)()(o());i.push([n.id,".fade-enter-active[data-v-6a9c6094],.fade-leave-active[data-v-6a9c6094]{transition:opacity .5s}.fade-enter[data-v-6a9c6094],.fade-leave-to[data-v-6a9c6094]{opacity:0}\n","",{version:3,sources:["webpack://./js/app/pages/translations/components/principal/index.vue"],names:[],mappings:"AAwTA,wEACE,sBACF,CAAC,6DAEC,SACF",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n.fade-enter-active, .fade-leave-active {\n transition: opacity .5s\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active in <2.1.8 */ {\n opacity: 0\n}\n"],sourceRoot:""}]);const s=i},17421:(n,t,e)=>{"use strict";e.r(t),e.d(t,{default:()=>s});var r=e(94015),o=e.n(r),a=e(23645),i=e.n(a)()(o());i.push([n.id,".form-group[data-v-3e1a5070]{overflow:hidden}.missing[data-v-3e1a5070]{border:1px solid #f54c3e}\n","",{version:3,sources:["webpack://./js/app/pages/translations/components/principal/translation-input.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AA0GA,6BACE,eAAgB,CACjB,0BAEC,wBCxEW",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n.form-group {\n overflow: hidden;\n}\n.missing {\n border: 1px solid $danger;\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const s=i},8296:(n,t,e)=>{"use strict";e.r(t),e.d(t,{default:()=>s});var r=e(94015),o=e.n(r),a=e(23645),i=e.n(a)()(o());i.push([n.id,".translationTree .tree-name{margin-bottom:.9375rem}.translationTree .tree-name.active{font-weight:bold}.translationTree .tree-name.extra{color:#f54c3e}.translationTree .tree-extra-label{color:#f54c3e;text-transform:uppercase;font-size:.65rem;margin-left:auto}.translationTree .tree-extra-label-mini{background-color:#f54c3e;color:#ffffff;padding:0 0.5rem;border-radius:0.75rem;display:inline-block;font-size:.75rem;height:1.5rem;margin-left:auto}.translationTree .tree-label:hover{color:#25b9d7}.ps-loader .animated-background{height:144px !important;animation-duration:2s !important}.ps-loader .background-masker.header-left{left:0;top:16px;height:108px;width:20px}.ps-loader .background-masker.content-top{left:0;top:16px;height:20px}.ps-loader .background-masker.content-first-end{left:0;top:52px;height:20px}.ps-loader .background-masker.content-second-end{left:0;top:88px;height:20px}.ps-loader .background-masker.content-third-end{left:0;top:124px;height:20px}\n","",{version:3,sources:["webpack://./js/app/pages/translations/components/sidebar/index.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAgKA,4BAEI,sBAAuB,CAF3B,mCAKM,gBAAiB,CALvB,kCASM,aCnIO,CD0Hb,mCAaI,aCvIS,CDwIT,wBAAyB,CACzB,gBAAiB,CACjB,gBAAiB,CAhBrB,wCAmBI,wBC7IS,CD8IT,aAAc,CACd,gBAAiB,CACjB,qBAAsB,CACtB,oBAAqB,CACrB,gBAAiB,CACjB,aAAc,CACd,gBAAiB,CA1BrB,mCA8BM,aC5JQ,CD6JT,gCAOD,uBAAuB,CACvB,gCAAgC,CALpC,0CASM,MAAO,CACP,QARqB,CASrB,YAAa,CACb,UAAW,CAZjB,0CAeM,MAAO,CACP,QAdqB,CAerB,WAhBsB,CAD5B,gDAoBM,MAAO,CACP,QAA+C,CAC/C,WArBsB,CAD5B,iDAyBM,MAAO,CACP,QAAiD,CACjD,WA1BsB,CAD5B,gDA8BM,MAAO,CACP,SAAiD,CACjD,WA/BsB",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n.translationTree {\n .tree-name {\n margin-bottom: .9375rem;\n\n &.active {\n font-weight: bold;\n }\n\n &.extra {\n color: $danger;\n }\n }\n .tree-extra-label {\n color: $danger;\n text-transform: uppercase;\n font-size: .65rem;\n margin-left: auto;\n }\n .tree-extra-label-mini {\n background-color: $danger;\n color: #ffffff;\n padding: 0 0.5rem;\n border-radius: 0.75rem;\n display: inline-block;\n font-size: .75rem;\n height: 1.5rem;\n margin-left: auto;\n }\n .tree-label {\n &:hover {\n color: $primary;\n }\n }\n}\n.ps-loader {\n $loader-white-height: 20px;\n $loader-line-height: 16px;\n .animated-background {\n height: 144px!important;\n animation-duration: 2s!important;\n }\n .background-masker {\n &.header-left {\n left: 0;\n top: $loader-line-height;\n height: 108px;\n width: 20px;\n }\n &.content-top {\n left: 0;\n top: $loader-line-height;\n height: $loader-white-height;\n }\n &.content-first-end {\n left: 0;\n top: $loader-line-height*2+$loader-white-height;\n height: $loader-white-height;\n }\n &.content-second-end {\n left: 0;\n top: $loader-line-height*3+$loader-white-height*2;\n height: $loader-white-height;\n }\n &.content-third-end {\n left: 0;\n top: $loader-line-height*4+$loader-white-height*3;\n height: $loader-white-height;\n }\n }\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const s=i},63438:(n,t,e)=>{"use strict";e.r(t),e.d(t,{default:()=>s});var r=e(94015),o=e.n(r),a=e(23645),i=e.n(a)()(o());i.push([n.id,".modal-header .close[data-v-17ba2b4e]{font-size:1.2rem;color:#6c868e;opacity:1}.modal-content[data-v-17ba2b4e]{border-radius:0}\n","",{version:3,sources:["webpack://./js/app/widgets/ps-modal.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAsHA,sCACE,gBAAiB,CACjB,aC7GgB,CD8GhB,SAAU,CACX,gCAEC,eACF",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n.modal-header .close {\n font-size: 1.2rem;\n color: $gray-medium;\n opacity: 1;\n}\n.modal-content {\n border-radius: 0\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const s=i},23645:n=>{"use strict";n.exports=function(n){var t=[];return t.toString=function(){return this.map((function(t){var e=n(t);return t[2]?"@media ".concat(t[2]," {").concat(e,"}"):e})).join("")},t.i=function(n,e,r){"string"==typeof n&&(n=[[null,n,""]]);var o={};if(r)for(var a=0;a<this.length;a++){var i=this[a][0];null!=i&&(o[i]=!0)}for(var s=0;s<n.length;s++){var u=[].concat(n[s]);r&&o[u[0]]||(e&&(u[2]?u[2]="".concat(e," and ").concat(u[2]):u[2]=e),t.push(u))}},t}},94015:n=>{"use strict";function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}n.exports=function(n){var e,r,o=(r=4,function(n){if(Array.isArray(n))return n}(e=n)||function(n,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(n)){var e=[],r=!0,o=!1,a=void 0;try{for(var i,s=n[Symbol.iterator]();!(r=(i=s.next()).done)&&(e.push(i.value),!t||e.length!==t);r=!0);}catch(n){o=!0,a=n}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}return e}}(e,r)||function(n,e){if(n){if("string"==typeof n)return t(n,e);var r=Object.prototype.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(n,e):void 0}}(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[1],i=o[3];if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),u="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),l="/*# ".concat(u," */"),c=i.sources.map((function(n){return"/*# sourceURL=".concat(i.sourceRoot||"").concat(n," */")}));return[a].concat(c).concat([l]).join("\n")}return[a].join("\n")}},96486:function(n,t,e){var r;n=e.nmd(n),function(){var o,a="Expected a function",i="__lodash_hash_undefined__",s="__lodash_placeholder__",u=32,l=128,c=1/0,d=9007199254740991,f=NaN,p=4294967295,h=[["ary",l],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",u],["partialRight",64],["rearg",256]],g="[object Arguments]",$="[object Array]",m="[object Boolean]",b="[object Date]",v="[object Error]",y="[object Function]",w="[object GeneratorFunction]",_="[object Map]",x="[object Number]",k="[object Object]",C="[object Promise]",A="[object RegExp]",T="[object Set]",E="[object String]",S="[object Symbol]",O="[object WeakMap]",j="[object ArrayBuffer]",M="[object DataView]",P="[object Float32Array]",I="[object Float64Array]",z="[object Int8Array]",R="[object Int16Array]",D="[object Int32Array]",N="[object Uint8Array]",L="[object Uint8ClampedArray]",B="[object Uint16Array]",F="[object Uint32Array]",U=/\b__p \+= '';/g,q=/\b(__p \+=) '' \+/g,G=/(__e\(.*?\)|\b__t\)) \+\n'';/g,H=/&(?:amp|lt|gt|quot|#39);/g,W=/[&<>"']/g,Z=RegExp(H.source),V=RegExp(W.source),X=/<%-([\s\S]+?)%>/g,J=/<%([\s\S]+?)%>/g,K=/<%=([\s\S]+?)%>/g,Y=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Q=/^\w*$/,nn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,tn=/[\\^$.*+?()[\]{}|]/g,en=RegExp(tn.source),rn=/^\s+/,on=/\s/,an=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,sn=/\{\n\/\* \[wrapped with (.+)\] \*/,un=/,? & /,ln=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,cn=/[()=,{}\[\]\/\s]/,dn=/\\(\\)?/g,fn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,pn=/\w*$/,hn=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,$n=/^\[object .+?Constructor\]$/,mn=/^0o[0-7]+$/i,bn=/^(?:0|[1-9]\d*)$/,vn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,yn=/($^)/,wn=/['\n\r\u2028\u2029\\]/g,_n="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",xn="a-z\\xdf-\\xf6\\xf8-\\xff",kn="A-Z\\xc0-\\xd6\\xd8-\\xde",Cn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",An="["+Cn+"]",Tn="["+_n+"]",En="\\d+",Sn="["+xn+"]",On="[^\\ud800-\\udfff"+Cn+En+"\\u2700-\\u27bf"+xn+kn+"]",jn="\\ud83c[\\udffb-\\udfff]",Mn="[^\\ud800-\\udfff]",Pn="(?:\\ud83c[\\udde6-\\uddff]){2}",In="[\\ud800-\\udbff][\\udc00-\\udfff]",zn="["+kn+"]",Rn="(?:"+Sn+"|"+On+")",Dn="(?:"+zn+"|"+On+")",Nn="(?:['’](?:d|ll|m|re|s|t|ve))?",Ln="(?:['’](?:D|LL|M|RE|S|T|VE))?",Bn="(?:"+Tn+"|"+jn+")?",Fn="[\\ufe0e\\ufe0f]?",Un=Fn+Bn+"(?:\\u200d(?:"+[Mn,Pn,In].join("|")+")"+Fn+Bn+")*",qn="(?:"+["[\\u2700-\\u27bf]",Pn,In].join("|")+")"+Un,Gn="(?:"+[Mn+Tn+"?",Tn,Pn,In,"[\\ud800-\\udfff]"].join("|")+")",Hn=RegExp("['’]","g"),Wn=RegExp(Tn,"g"),Zn=RegExp(jn+"(?="+jn+")|"+Gn+Un,"g"),Vn=RegExp([zn+"?"+Sn+"+"+Nn+"(?="+[An,zn,"$"].join("|")+")",Dn+"+"+Ln+"(?="+[An,zn+Rn,"$"].join("|")+")",zn+"?"+Rn+"+"+Nn,zn+"+"+Ln,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",En,qn].join("|"),"g"),Xn=RegExp("[\\u200d\\ud800-\\udfff"+_n+"\\ufe0e\\ufe0f]"),Jn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Kn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Yn=-1,Qn={};Qn[P]=Qn[I]=Qn[z]=Qn[R]=Qn[D]=Qn[N]=Qn[L]=Qn[B]=Qn[F]=!0,Qn[g]=Qn[$]=Qn[j]=Qn[m]=Qn[M]=Qn[b]=Qn[v]=Qn[y]=Qn[_]=Qn[x]=Qn[k]=Qn[A]=Qn[T]=Qn[E]=Qn[O]=!1;var nt={};nt[g]=nt[$]=nt[j]=nt[M]=nt[m]=nt[b]=nt[P]=nt[I]=nt[z]=nt[R]=nt[D]=nt[_]=nt[x]=nt[k]=nt[A]=nt[T]=nt[E]=nt[S]=nt[N]=nt[L]=nt[B]=nt[F]=!0,nt[v]=nt[y]=nt[O]=!1;var tt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},et=parseFloat,rt=parseInt,ot="object"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,at="object"==typeof self&&self&&self.Object===Object&&self,it=ot||at||Function("return this")(),st=t&&!t.nodeType&&t,ut=st&&n&&!n.nodeType&&n,lt=ut&&ut.exports===st,ct=lt&&ot.process,dt=function(){try{return ut&&ut.require&&ut.require("util").types||ct&&ct.binding&&ct.binding("util")}catch(n){}}(),ft=dt&&dt.isArrayBuffer,pt=dt&&dt.isDate,ht=dt&&dt.isMap,gt=dt&&dt.isRegExp,$t=dt&&dt.isSet,mt=dt&&dt.isTypedArray;function bt(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}function vt(n,t,e,r){for(var o=-1,a=null==n?0:n.length;++o<a;){var i=n[o];t(r,i,e(i),n)}return r}function yt(n,t){for(var e=-1,r=null==n?0:n.length;++e<r&&!1!==t(n[e],e,n););return n}function wt(n,t){for(var e=null==n?0:n.length;e--&&!1!==t(n[e],e,n););return n}function _t(n,t){for(var e=-1,r=null==n?0:n.length;++e<r;)if(!t(n[e],e,n))return!1;return!0}function xt(n,t){for(var e=-1,r=null==n?0:n.length,o=0,a=[];++e<r;){var i=n[e];t(i,e,n)&&(a[o++]=i)}return a}function kt(n,t){return!(null==n||!n.length)&&It(n,t,0)>-1}function Ct(n,t,e){for(var r=-1,o=null==n?0:n.length;++r<o;)if(e(t,n[r]))return!0;return!1}function At(n,t){for(var e=-1,r=null==n?0:n.length,o=Array(r);++e<r;)o[e]=t(n[e],e,n);return o}function Tt(n,t){for(var e=-1,r=t.length,o=n.length;++e<r;)n[o+e]=t[e];return n}function Et(n,t,e,r){var o=-1,a=null==n?0:n.length;for(r&&a&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n);return e}function St(n,t,e,r){var o=null==n?0:n.length;for(r&&o&&(e=n[--o]);o--;)e=t(e,n[o],o,n);return e}function Ot(n,t){for(var e=-1,r=null==n?0:n.length;++e<r;)if(t(n[e],e,n))return!0;return!1}var jt=Nt("length");function Mt(n,t,e){var r;return e(n,(function(n,e,o){if(t(n,e,o))return r=e,!1})),r}function Pt(n,t,e,r){for(var o=n.length,a=e+(r?1:-1);r?a--:++a<o;)if(t(n[a],a,n))return a;return-1}function It(n,t,e){return t==t?function(n,t,e){for(var r=e-1,o=n.length;++r<o;)if(n[r]===t)return r;return-1}(n,t,e):Pt(n,Rt,e)}function zt(n,t,e,r){for(var o=e-1,a=n.length;++o<a;)if(r(n[o],t))return o;return-1}function Rt(n){return n!=n}function Dt(n,t){var e=null==n?0:n.length;return e?Ft(n,t)/e:f}function Nt(n){return function(t){return null==t?o:t[n]}}function Lt(n){return function(t){return null==n?o:n[t]}}function Bt(n,t,e,r,o){return o(n,(function(n,o,a){e=r?(r=!1,n):t(e,n,o,a)})),e}function Ft(n,t){for(var e,r=-1,a=n.length;++r<a;){var i=t(n[r]);i!==o&&(e=e===o?i:e+i)}return e}function Ut(n,t){for(var e=-1,r=Array(n);++e<n;)r[e]=t(e);return r}function qt(n){return n?n.slice(0,se(n)+1).replace(rn,""):n}function Gt(n){return function(t){return n(t)}}function Ht(n,t){return At(t,(function(t){return n[t]}))}function Wt(n,t){return n.has(t)}function Zt(n,t){for(var e=-1,r=n.length;++e<r&&It(t,n[e],0)>-1;);return e}function Vt(n,t){for(var e=n.length;e--&&It(t,n[e],0)>-1;);return e}function Xt(n,t){for(var e=n.length,r=0;e--;)n[e]===t&&++r;return r}var Jt=Lt({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),Kt=Lt({"&":"&","<":"<",">":">",'"':""","'":"'"});function Yt(n){return"\\"+tt[n]}function Qt(n){return Xn.test(n)}function ne(n){var t=-1,e=Array(n.size);return n.forEach((function(n,r){e[++t]=[r,n]})),e}function te(n,t){return function(e){return n(t(e))}}function ee(n,t){for(var e=-1,r=n.length,o=0,a=[];++e<r;){var i=n[e];i!==t&&i!==s||(n[e]=s,a[o++]=e)}return a}function re(n){var t=-1,e=Array(n.size);return n.forEach((function(n){e[++t]=n})),e}function oe(n){var t=-1,e=Array(n.size);return n.forEach((function(n){e[++t]=[n,n]})),e}function ae(n){return Qt(n)?function(n){for(var t=Zn.lastIndex=0;Zn.test(n);)++t;return t}(n):jt(n)}function ie(n){return Qt(n)?function(n){return n.match(Zn)||[]}(n):function(n){return n.split("")}(n)}function se(n){for(var t=n.length;t--&&on.test(n.charAt(t)););return t}var ue=Lt({"&":"&","<":"<",">":">",""":'"',"'":"'"}),le=function n(t){var e,r=(t=null==t?it:le.defaults(it.Object(),t,le.pick(it,Kn))).Array,on=t.Date,_n=t.Error,xn=t.Function,kn=t.Math,Cn=t.Object,An=t.RegExp,Tn=t.String,En=t.TypeError,Sn=r.prototype,On=xn.prototype,jn=Cn.prototype,Mn=t["__core-js_shared__"],Pn=On.toString,In=jn.hasOwnProperty,zn=0,Rn=(e=/[^.]+$/.exec(Mn&&Mn.keys&&Mn.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",Dn=jn.toString,Nn=Pn.call(Cn),Ln=it._,Bn=An("^"+Pn.call(In).replace(tn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Fn=lt?t.Buffer:o,Un=t.Symbol,qn=t.Uint8Array,Gn=Fn?Fn.allocUnsafe:o,Zn=te(Cn.getPrototypeOf,Cn),Xn=Cn.create,tt=jn.propertyIsEnumerable,ot=Sn.splice,at=Un?Un.isConcatSpreadable:o,st=Un?Un.iterator:o,ut=Un?Un.toStringTag:o,ct=function(){try{var n=ca(Cn,"defineProperty");return n({},"",{}),n}catch(n){}}(),dt=t.clearTimeout!==it.clearTimeout&&t.clearTimeout,jt=on&&on.now!==it.Date.now&&on.now,Lt=t.setTimeout!==it.setTimeout&&t.setTimeout,ce=kn.ceil,de=kn.floor,fe=Cn.getOwnPropertySymbols,pe=Fn?Fn.isBuffer:o,he=t.isFinite,ge=Sn.join,$e=te(Cn.keys,Cn),me=kn.max,be=kn.min,ve=on.now,ye=t.parseInt,we=kn.random,_e=Sn.reverse,xe=ca(t,"DataView"),ke=ca(t,"Map"),Ce=ca(t,"Promise"),Ae=ca(t,"Set"),Te=ca(t,"WeakMap"),Ee=ca(Cn,"create"),Se=Te&&new Te,Oe={},je=La(xe),Me=La(ke),Pe=La(Ce),Ie=La(Ae),ze=La(Te),Re=Un?Un.prototype:o,De=Re?Re.valueOf:o,Ne=Re?Re.toString:o;function Le(n){if(es(n)&&!Hi(n)&&!(n instanceof qe)){if(n instanceof Ue)return n;if(In.call(n,"__wrapped__"))return Ba(n)}return new Ue(n)}var Be=function(){function n(){}return function(t){if(!ts(t))return{};if(Xn)return Xn(t);n.prototype=t;var e=new n;return n.prototype=o,e}}();function Fe(){}function Ue(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function qe(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Ge(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function He(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function We(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function Ze(n){var t=-1,e=null==n?0:n.length;for(this.__data__=new We;++t<e;)this.add(n[t])}function Ve(n){var t=this.__data__=new He(n);this.size=t.size}function Xe(n,t){var e=Hi(n),r=!e&&Gi(n),o=!e&&!r&&Xi(n),a=!e&&!r&&!o&&cs(n),i=e||r||o||a,s=i?Ut(n.length,Tn):[],u=s.length;for(var l in n)!t&&!In.call(n,l)||i&&("length"==l||o&&("offset"==l||"parent"==l)||a&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||ma(l,u))||s.push(l);return s}function Je(n){var t=n.length;return t?n[Wr(0,t-1)]:o}function Ke(n,t){return Ia(Eo(n),ir(t,0,n.length))}function Ye(n){return Ia(Eo(n))}function Qe(n,t,e){(e!==o&&!Fi(n[t],e)||e===o&&!(t in n))&&or(n,t,e)}function nr(n,t,e){var r=n[t];In.call(n,t)&&Fi(r,e)&&(e!==o||t in n)||or(n,t,e)}function tr(n,t){for(var e=n.length;e--;)if(Fi(n[e][0],t))return e;return-1}function er(n,t,e,r){return dr(n,(function(n,o,a){t(r,n,e(n),a)})),r}function rr(n,t){return n&&So(t,Ms(t),n)}function or(n,t,e){"__proto__"==t&&ct?ct(n,t,{configurable:!0,enumerable:!0,value:e,writable:!0}):n[t]=e}function ar(n,t){for(var e=-1,a=t.length,i=r(a),s=null==n;++e<a;)i[e]=s?o:Ts(n,t[e]);return i}function ir(n,t,e){return n==n&&(e!==o&&(n=n<=e?n:e),t!==o&&(n=n>=t?n:t)),n}function sr(n,t,e,r,a,i){var s,u=1&t,l=2&t,c=4&t;if(e&&(s=a?e(n,r,a,i):e(n)),s!==o)return s;if(!ts(n))return n;var d=Hi(n);if(d){if(s=function(n){var t=n.length,e=new n.constructor(t);return t&&"string"==typeof n[0]&&In.call(n,"index")&&(e.index=n.index,e.input=n.input),e}(n),!u)return Eo(n,s)}else{var f=pa(n),p=f==y||f==w;if(Xi(n))return _o(n,u);if(f==k||f==g||p&&!a){if(s=l||p?{}:ga(n),!u)return l?function(n,t){return So(n,fa(n),t)}(n,function(n,t){return n&&So(t,Ps(t),n)}(s,n)):function(n,t){return So(n,da(n),t)}(n,rr(s,n))}else{if(!nt[f])return a?n:{};s=function(n,t,e){var r,o=n.constructor;switch(t){case j:return xo(n);case m:case b:return new o(+n);case M:return function(n,t){var e=t?xo(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}(n,e);case P:case I:case z:case R:case D:case N:case L:case B:case F:return ko(n,e);case _:return new o;case x:case E:return new o(n);case A:return function(n){var t=new n.constructor(n.source,pn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case T:return new o;case S:return r=n,De?Cn(De.call(r)):{}}}(n,f,u)}}i||(i=new Ve);var h=i.get(n);if(h)return h;i.set(n,s),ss(n)?n.forEach((function(r){s.add(sr(r,t,e,r,n,i))})):rs(n)&&n.forEach((function(r,o){s.set(o,sr(r,t,e,o,n,i))}));var $=d?o:(c?l?ra:ea:l?Ps:Ms)(n);return yt($||n,(function(r,o){$&&(r=n[o=r]),nr(s,o,sr(r,t,e,o,n,i))})),s}function ur(n,t,e){var r=e.length;if(null==n)return!r;for(n=Cn(n);r--;){var a=e[r],i=t[a],s=n[a];if(s===o&&!(a in n)||!i(s))return!1}return!0}function lr(n,t,e){if("function"!=typeof n)throw new En(a);return Oa((function(){n.apply(o,e)}),t)}function cr(n,t,e,r){var o=-1,a=kt,i=!0,s=n.length,u=[],l=t.length;if(!s)return u;e&&(t=At(t,Gt(e))),r?(a=Ct,i=!1):t.length>=200&&(a=Wt,i=!1,t=new Ze(t));n:for(;++o<s;){var c=n[o],d=null==e?c:e(c);if(c=r||0!==c?c:0,i&&d==d){for(var f=l;f--;)if(t[f]===d)continue n;u.push(c)}else a(t,d,r)||u.push(c)}return u}Le.templateSettings={escape:X,evaluate:J,interpolate:K,variable:"",imports:{_:Le}},Le.prototype=Fe.prototype,Le.prototype.constructor=Le,Ue.prototype=Be(Fe.prototype),Ue.prototype.constructor=Ue,qe.prototype=Be(Fe.prototype),qe.prototype.constructor=qe,Ge.prototype.clear=function(){this.__data__=Ee?Ee(null):{},this.size=0},Ge.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},Ge.prototype.get=function(n){var t=this.__data__;if(Ee){var e=t[n];return e===i?o:e}return In.call(t,n)?t[n]:o},Ge.prototype.has=function(n){var t=this.__data__;return Ee?t[n]!==o:In.call(t,n)},Ge.prototype.set=function(n,t){var e=this.__data__;return this.size+=this.has(n)?0:1,e[n]=Ee&&t===o?i:t,this},He.prototype.clear=function(){this.__data__=[],this.size=0},He.prototype.delete=function(n){var t=this.__data__,e=tr(t,n);return!(e<0||(e==t.length-1?t.pop():ot.call(t,e,1),--this.size,0))},He.prototype.get=function(n){var t=this.__data__,e=tr(t,n);return e<0?o:t[e][1]},He.prototype.has=function(n){return tr(this.__data__,n)>-1},He.prototype.set=function(n,t){var e=this.__data__,r=tr(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this},We.prototype.clear=function(){this.size=0,this.__data__={hash:new Ge,map:new(ke||He),string:new Ge}},We.prototype.delete=function(n){var t=ua(this,n).delete(n);return this.size-=t?1:0,t},We.prototype.get=function(n){return ua(this,n).get(n)},We.prototype.has=function(n){return ua(this,n).has(n)},We.prototype.set=function(n,t){var e=ua(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this},Ze.prototype.add=Ze.prototype.push=function(n){return this.__data__.set(n,i),this},Ze.prototype.has=function(n){return this.__data__.has(n)},Ve.prototype.clear=function(){this.__data__=new He,this.size=0},Ve.prototype.delete=function(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e},Ve.prototype.get=function(n){return this.__data__.get(n)},Ve.prototype.has=function(n){return this.__data__.has(n)},Ve.prototype.set=function(n,t){var e=this.__data__;if(e instanceof He){var r=e.__data__;if(!ke||r.length<199)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new We(r)}return e.set(n,t),this.size=e.size,this};var dr=Mo(vr),fr=Mo(yr,!0);function pr(n,t){var e=!0;return dr(n,(function(n,r,o){return e=!!t(n,r,o)})),e}function hr(n,t,e){for(var r=-1,a=n.length;++r<a;){var i=n[r],s=t(i);if(null!=s&&(u===o?s==s&&!ls(s):e(s,u)))var u=s,l=i}return l}function gr(n,t){var e=[];return dr(n,(function(n,r,o){t(n,r,o)&&e.push(n)})),e}function $r(n,t,e,r,o){var a=-1,i=n.length;for(e||(e=$a),o||(o=[]);++a<i;){var s=n[a];t>0&&e(s)?t>1?$r(s,t-1,e,r,o):Tt(o,s):r||(o[o.length]=s)}return o}var mr=Po(),br=Po(!0);function vr(n,t){return n&&mr(n,t,Ms)}function yr(n,t){return n&&br(n,t,Ms)}function wr(n,t){return xt(t,(function(t){return Yi(n[t])}))}function _r(n,t){for(var e=0,r=(t=bo(t,n)).length;null!=n&&e<r;)n=n[Na(t[e++])];return e&&e==r?n:o}function xr(n,t,e){var r=t(n);return Hi(n)?r:Tt(r,e(n))}function kr(n){return null==n?n===o?"[object Undefined]":"[object Null]":ut&&ut in Cn(n)?function(n){var t=In.call(n,ut),e=n[ut];try{n[ut]=o;var r=!0}catch(n){}var a=Dn.call(n);return r&&(t?n[ut]=e:delete n[ut]),a}(n):function(n){return Dn.call(n)}(n)}function Cr(n,t){return n>t}function Ar(n,t){return null!=n&&In.call(n,t)}function Tr(n,t){return null!=n&&t in Cn(n)}function Er(n,t,e){for(var a=e?Ct:kt,i=n[0].length,s=n.length,u=s,l=r(s),c=1/0,d=[];u--;){var f=n[u];u&&t&&(f=At(f,Gt(t))),c=be(f.length,c),l[u]=!e&&(t||i>=120&&f.length>=120)?new Ze(u&&f):o}f=n[0];var p=-1,h=l[0];n:for(;++p<i&&d.length<c;){var g=f[p],$=t?t(g):g;if(g=e||0!==g?g:0,!(h?Wt(h,$):a(d,$,e))){for(u=s;--u;){var m=l[u];if(!(m?Wt(m,$):a(n[u],$,e)))continue n}h&&h.push($),d.push(g)}}return d}function Sr(n,t,e){var r=null==(n=Aa(n,t=bo(t,n)))?n:n[Na(Ka(t))];return null==r?o:bt(r,n,e)}function Or(n){return es(n)&&kr(n)==g}function jr(n,t,e,r,a){return n===t||(null==n||null==t||!es(n)&&!es(t)?n!=n&&t!=t:function(n,t,e,r,a,i){var s=Hi(n),u=Hi(t),l=s?$:pa(n),c=u?$:pa(t),d=(l=l==g?k:l)==k,f=(c=c==g?k:c)==k,p=l==c;if(p&&Xi(n)){if(!Xi(t))return!1;s=!0,d=!1}if(p&&!d)return i||(i=new Ve),s||cs(n)?na(n,t,e,r,a,i):function(n,t,e,r,o,a,i){switch(e){case M:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case j:return!(n.byteLength!=t.byteLength||!a(new qn(n),new qn(t)));case m:case b:case x:return Fi(+n,+t);case v:return n.name==t.name&&n.message==t.message;case A:case E:return n==t+"";case _:var s=ne;case T:var u=1&r;if(s||(s=re),n.size!=t.size&&!u)return!1;var l=i.get(n);if(l)return l==t;r|=2,i.set(n,t);var c=na(s(n),s(t),r,o,a,i);return i.delete(n),c;case S:if(De)return De.call(n)==De.call(t)}return!1}(n,t,l,e,r,a,i);if(!(1&e)){var h=d&&In.call(n,"__wrapped__"),y=f&&In.call(t,"__wrapped__");if(h||y){var w=h?n.value():n,C=y?t.value():t;return i||(i=new Ve),a(w,C,e,r,i)}}return!!p&&(i||(i=new Ve),function(n,t,e,r,a,i){var s=1&e,u=ea(n),l=u.length;if(l!=ea(t).length&&!s)return!1;for(var c=l;c--;){var d=u[c];if(!(s?d in t:In.call(t,d)))return!1}var f=i.get(n),p=i.get(t);if(f&&p)return f==t&&p==n;var h=!0;i.set(n,t),i.set(t,n);for(var g=s;++c<l;){var $=n[d=u[c]],m=t[d];if(r)var b=s?r(m,$,d,t,n,i):r($,m,d,n,t,i);if(!(b===o?$===m||a($,m,e,r,i):b)){h=!1;break}g||(g="constructor"==d)}if(h&&!g){var v=n.constructor,y=t.constructor;v==y||!("constructor"in n)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof y&&y instanceof y||(h=!1)}return i.delete(n),i.delete(t),h}(n,t,e,r,a,i))}(n,t,e,r,jr,a))}function Mr(n,t,e,r){var a=e.length,i=a,s=!r;if(null==n)return!i;for(n=Cn(n);a--;){var u=e[a];if(s&&u[2]?u[1]!==n[u[0]]:!(u[0]in n))return!1}for(;++a<i;){var l=(u=e[a])[0],c=n[l],d=u[1];if(s&&u[2]){if(c===o&&!(l in n))return!1}else{var f=new Ve;if(r)var p=r(c,d,l,n,t,f);if(!(p===o?jr(d,c,3,r,f):p))return!1}}return!0}function Pr(n){return!(!ts(n)||(t=n,Rn&&Rn in t))&&(Yi(n)?Bn:$n).test(La(n));var t}function Ir(n){return"function"==typeof n?n:null==n?ou:"object"==typeof n?Hi(n)?Lr(n[0],n[1]):Nr(n):pu(n)}function zr(n){if(!_a(n))return $e(n);var t=[];for(var e in Cn(n))In.call(n,e)&&"constructor"!=e&&t.push(e);return t}function Rr(n,t){return n<t}function Dr(n,t){var e=-1,o=Zi(n)?r(n.length):[];return dr(n,(function(n,r,a){o[++e]=t(n,r,a)})),o}function Nr(n){var t=la(n);return 1==t.length&&t[0][2]?ka(t[0][0],t[0][1]):function(e){return e===n||Mr(e,n,t)}}function Lr(n,t){return va(n)&&xa(t)?ka(Na(n),t):function(e){var r=Ts(e,n);return r===o&&r===t?Es(e,n):jr(t,r,3)}}function Br(n,t,e,r,a){n!==t&&mr(t,(function(i,s){if(a||(a=new Ve),ts(i))!function(n,t,e,r,a,i,s){var u=Ea(n,e),l=Ea(t,e),c=s.get(l);if(c)Qe(n,e,c);else{var d=i?i(u,l,e+"",n,t,s):o,f=d===o;if(f){var p=Hi(l),h=!p&&Xi(l),g=!p&&!h&&cs(l);d=l,p||h||g?Hi(u)?d=u:Vi(u)?d=Eo(u):h?(f=!1,d=_o(l,!0)):g?(f=!1,d=ko(l,!0)):d=[]:as(l)||Gi(l)?(d=u,Gi(u)?d=bs(u):ts(u)&&!Yi(u)||(d=ga(l))):f=!1}f&&(s.set(l,d),a(d,l,r,i,s),s.delete(l)),Qe(n,e,d)}}(n,t,s,e,Br,r,a);else{var u=r?r(Ea(n,s),i,s+"",n,t,a):o;u===o&&(u=i),Qe(n,s,u)}}),Ps)}function Fr(n,t){var e=n.length;if(e)return ma(t+=t<0?e:0,e)?n[t]:o}function Ur(n,t,e){t=t.length?At(t,(function(n){return Hi(n)?function(t){return _r(t,1===n.length?n[0]:n)}:n})):[ou];var r=-1;return t=At(t,Gt(sa())),function(n,t){var r=n.length;for(n.sort((function(n,t){return function(n,t,e){for(var r=-1,o=n.criteria,a=t.criteria,i=o.length,s=e.length;++r<i;){var u=Co(o[r],a[r]);if(u)return r>=s?u:u*("desc"==e[r]?-1:1)}return n.index-t.index}(n,t,e)}));r--;)n[r]=n[r].value;return n}(Dr(n,(function(n,e,o){return{criteria:At(t,(function(t){return t(n)})),index:++r,value:n}})))}function qr(n,t,e){for(var r=-1,o=t.length,a={};++r<o;){var i=t[r],s=_r(n,i);e(s,i)&&Kr(a,bo(i,n),s)}return a}function Gr(n,t,e,r){var o=r?zt:It,a=-1,i=t.length,s=n;for(n===t&&(t=Eo(t)),e&&(s=At(n,Gt(e)));++a<i;)for(var u=0,l=t[a],c=e?e(l):l;(u=o(s,c,u,r))>-1;)s!==n&&ot.call(s,u,1),ot.call(n,u,1);return n}function Hr(n,t){for(var e=n?t.length:0,r=e-1;e--;){var o=t[e];if(e==r||o!==a){var a=o;ma(o)?ot.call(n,o,1):lo(n,o)}}return n}function Wr(n,t){return n+de(we()*(t-n+1))}function Zr(n,t){var e="";if(!n||t<1||t>d)return e;do{t%2&&(e+=n),(t=de(t/2))&&(n+=n)}while(t);return e}function Vr(n,t){return ja(Ca(n,t,ou),n+"")}function Xr(n){return Je(Fs(n))}function Jr(n,t){var e=Fs(n);return Ia(e,ir(t,0,e.length))}function Kr(n,t,e,r){if(!ts(n))return n;for(var a=-1,i=(t=bo(t,n)).length,s=i-1,u=n;null!=u&&++a<i;){var l=Na(t[a]),c=e;if("__proto__"===l||"constructor"===l||"prototype"===l)return n;if(a!=s){var d=u[l];(c=r?r(d,l,u):o)===o&&(c=ts(d)?d:ma(t[a+1])?[]:{})}nr(u,l,c),u=u[l]}return n}var Yr=Se?function(n,t){return Se.set(n,t),n}:ou,Qr=ct?function(n,t){return ct(n,"toString",{configurable:!0,enumerable:!1,value:tu(t),writable:!0})}:ou;function no(n){return Ia(Fs(n))}function to(n,t,e){var o=-1,a=n.length;t<0&&(t=-t>a?0:a+t),(e=e>a?a:e)<0&&(e+=a),a=t>e?0:e-t>>>0,t>>>=0;for(var i=r(a);++o<a;)i[o]=n[o+t];return i}function eo(n,t){var e;return dr(n,(function(n,r,o){return!(e=t(n,r,o))})),!!e}function ro(n,t,e){var r=0,o=null==n?r:n.length;if("number"==typeof t&&t==t&&o<=2147483647){for(;r<o;){var a=r+o>>>1,i=n[a];null!==i&&!ls(i)&&(e?i<=t:i<t)?r=a+1:o=a}return o}return oo(n,t,ou,e)}function oo(n,t,e,r){var a=0,i=null==n?0:n.length;if(0===i)return 0;for(var s=(t=e(t))!=t,u=null===t,l=ls(t),c=t===o;a<i;){var d=de((a+i)/2),f=e(n[d]),p=f!==o,h=null===f,g=f==f,$=ls(f);if(s)var m=r||g;else m=c?g&&(r||p):u?g&&p&&(r||!h):l?g&&p&&!h&&(r||!$):!h&&!$&&(r?f<=t:f<t);m?a=d+1:i=d}return be(i,4294967294)}function ao(n,t){for(var e=-1,r=n.length,o=0,a=[];++e<r;){var i=n[e],s=t?t(i):i;if(!e||!Fi(s,u)){var u=s;a[o++]=0===i?0:i}}return a}function io(n){return"number"==typeof n?n:ls(n)?f:+n}function so(n){if("string"==typeof n)return n;if(Hi(n))return At(n,so)+"";if(ls(n))return Ne?Ne.call(n):"";var t=n+"";return"0"==t&&1/n==-1/0?"-0":t}function uo(n,t,e){var r=-1,o=kt,a=n.length,i=!0,s=[],u=s;if(e)i=!1,o=Ct;else if(a>=200){var l=t?null:Vo(n);if(l)return re(l);i=!1,o=Wt,u=new Ze}else u=t?[]:s;n:for(;++r<a;){var c=n[r],d=t?t(c):c;if(c=e||0!==c?c:0,i&&d==d){for(var f=u.length;f--;)if(u[f]===d)continue n;t&&u.push(d),s.push(c)}else o(u,d,e)||(u!==s&&u.push(d),s.push(c))}return s}function lo(n,t){return null==(n=Aa(n,t=bo(t,n)))||delete n[Na(Ka(t))]}function co(n,t,e,r){return Kr(n,t,e(_r(n,t)),r)}function fo(n,t,e,r){for(var o=n.length,a=r?o:-1;(r?a--:++a<o)&&t(n[a],a,n););return e?to(n,r?0:a,r?a+1:o):to(n,r?a+1:0,r?o:a)}function po(n,t){var e=n;return e instanceof qe&&(e=e.value()),Et(t,(function(n,t){return t.func.apply(t.thisArg,Tt([n],t.args))}),e)}function ho(n,t,e){var o=n.length;if(o<2)return o?uo(n[0]):[];for(var a=-1,i=r(o);++a<o;)for(var s=n[a],u=-1;++u<o;)u!=a&&(i[a]=cr(i[a]||s,n[u],t,e));return uo($r(i,1),t,e)}function go(n,t,e){for(var r=-1,a=n.length,i=t.length,s={};++r<a;){var u=r<i?t[r]:o;e(s,n[r],u)}return s}function $o(n){return Vi(n)?n:[]}function mo(n){return"function"==typeof n?n:ou}function bo(n,t){return Hi(n)?n:va(n,t)?[n]:Da(vs(n))}var vo=Vr;function yo(n,t,e){var r=n.length;return e=e===o?r:e,!t&&e>=r?n:to(n,t,e)}var wo=dt||function(n){return it.clearTimeout(n)};function _o(n,t){if(t)return n.slice();var e=n.length,r=Gn?Gn(e):new n.constructor(e);return n.copy(r),r}function xo(n){var t=new n.constructor(n.byteLength);return new qn(t).set(new qn(n)),t}function ko(n,t){var e=t?xo(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function Co(n,t){if(n!==t){var e=n!==o,r=null===n,a=n==n,i=ls(n),s=t!==o,u=null===t,l=t==t,c=ls(t);if(!u&&!c&&!i&&n>t||i&&s&&l&&!u&&!c||r&&s&&l||!e&&l||!a)return 1;if(!r&&!i&&!c&&n<t||c&&e&&a&&!r&&!i||u&&e&&a||!s&&a||!l)return-1}return 0}function Ao(n,t,e,o){for(var a=-1,i=n.length,s=e.length,u=-1,l=t.length,c=me(i-s,0),d=r(l+c),f=!o;++u<l;)d[u]=t[u];for(;++a<s;)(f||a<i)&&(d[e[a]]=n[a]);for(;c--;)d[u++]=n[a++];return d}function To(n,t,e,o){for(var a=-1,i=n.length,s=-1,u=e.length,l=-1,c=t.length,d=me(i-u,0),f=r(d+c),p=!o;++a<d;)f[a]=n[a];for(var h=a;++l<c;)f[h+l]=t[l];for(;++s<u;)(p||a<i)&&(f[h+e[s]]=n[a++]);return f}function Eo(n,t){var e=-1,o=n.length;for(t||(t=r(o));++e<o;)t[e]=n[e];return t}function So(n,t,e,r){var a=!e;e||(e={});for(var i=-1,s=t.length;++i<s;){var u=t[i],l=r?r(e[u],n[u],u,e,n):o;l===o&&(l=n[u]),a?or(e,u,l):nr(e,u,l)}return e}function Oo(n,t){return function(e,r){var o=Hi(e)?vt:er,a=t?t():{};return o(e,n,sa(r,2),a)}}function jo(n){return Vr((function(t,e){var r=-1,a=e.length,i=a>1?e[a-1]:o,s=a>2?e[2]:o;for(i=n.length>3&&"function"==typeof i?(a--,i):o,s&&ba(e[0],e[1],s)&&(i=a<3?o:i,a=1),t=Cn(t);++r<a;){var u=e[r];u&&n(t,u,r,i)}return t}))}function Mo(n,t){return function(e,r){if(null==e)return e;if(!Zi(e))return n(e,r);for(var o=e.length,a=t?o:-1,i=Cn(e);(t?a--:++a<o)&&!1!==r(i[a],a,i););return e}}function Po(n){return function(t,e,r){for(var o=-1,a=Cn(t),i=r(t),s=i.length;s--;){var u=i[n?s:++o];if(!1===e(a[u],u,a))break}return t}}function Io(n){return function(t){var e=Qt(t=vs(t))?ie(t):o,r=e?e[0]:t.charAt(0),a=e?yo(e,1).join(""):t.slice(1);return r[n]()+a}}function zo(n){return function(t){return Et(Ys(Gs(t).replace(Hn,"")),n,"")}}function Ro(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var e=Be(n.prototype),r=n.apply(e,t);return ts(r)?r:e}}function Do(n){return function(t,e,r){var a=Cn(t);if(!Zi(t)){var i=sa(e,3);t=Ms(t),e=function(n){return i(a[n],n,a)}}var s=n(t,e,r);return s>-1?a[i?t[s]:s]:o}}function No(n){return ta((function(t){var e=t.length,r=e,i=Ue.prototype.thru;for(n&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new En(a);if(i&&!u&&"wrapper"==aa(s))var u=new Ue([],!0)}for(r=u?r:e;++r<e;){var l=aa(s=t[r]),c="wrapper"==l?oa(s):o;u=c&&ya(c[0])&&424==c[1]&&!c[4].length&&1==c[9]?u[aa(c[0])].apply(u,c[3]):1==s.length&&ya(s)?u[l]():u.thru(s)}return function(){var n=arguments,r=n[0];if(u&&1==n.length&&Hi(r))return u.plant(r).value();for(var o=0,a=e?t[o].apply(this,n):r;++o<e;)a=t[o].call(this,a);return a}}))}function Lo(n,t,e,a,i,s,u,c,d,f){var p=t&l,h=1&t,g=2&t,$=24&t,m=512&t,b=g?o:Ro(n);return function o(){for(var l=arguments.length,v=r(l),y=l;y--;)v[y]=arguments[y];if($)var w=ia(o),_=Xt(v,w);if(a&&(v=Ao(v,a,i,$)),s&&(v=To(v,s,u,$)),l-=_,$&&l<f){var x=ee(v,w);return Wo(n,t,Lo,o.placeholder,e,v,x,c,d,f-l)}var k=h?e:this,C=g?k[n]:n;return l=v.length,c?v=Ta(v,c):m&&l>1&&v.reverse(),p&&d<l&&(v.length=d),this&&this!==it&&this instanceof o&&(C=b||Ro(C)),C.apply(k,v)}}function Bo(n,t){return function(e,r){return function(n,t,e,r){return vr(n,(function(n,o,a){t(r,e(n),o,a)})),r}(e,n,t(r),{})}}function Fo(n,t){return function(e,r){var a;if(e===o&&r===o)return t;if(e!==o&&(a=e),r!==o){if(a===o)return r;"string"==typeof e||"string"==typeof r?(e=so(e),r=so(r)):(e=io(e),r=io(r)),a=n(e,r)}return a}}function Uo(n){return ta((function(t){return t=At(t,Gt(sa())),Vr((function(e){var r=this;return n(t,(function(n){return bt(n,r,e)}))}))}))}function qo(n,t){var e=(t=t===o?" ":so(t)).length;if(e<2)return e?Zr(t,n):t;var r=Zr(t,ce(n/ae(t)));return Qt(t)?yo(ie(r),0,n).join(""):r.slice(0,n)}function Go(n){return function(t,e,a){return a&&"number"!=typeof a&&ba(t,e,a)&&(e=a=o),t=hs(t),e===o?(e=t,t=0):e=hs(e),function(n,t,e,o){for(var a=-1,i=me(ce((t-n)/(e||1)),0),s=r(i);i--;)s[o?i:++a]=n,n+=e;return s}(t,e,a=a===o?t<e?1:-1:hs(a),n)}}function Ho(n){return function(t,e){return"string"==typeof t&&"string"==typeof e||(t=ms(t),e=ms(e)),n(t,e)}}function Wo(n,t,e,r,a,i,s,l,c,d){var f=8&t;t|=f?u:64,4&(t&=~(f?64:u))||(t&=-4);var p=[n,t,a,f?i:o,f?s:o,f?o:i,f?o:s,l,c,d],h=e.apply(o,p);return ya(n)&&Sa(h,p),h.placeholder=r,Ma(h,n,t)}function Zo(n){var t=kn[n];return function(n,e){if(n=ms(n),(e=null==e?0:be(gs(e),292))&&he(n)){var r=(vs(n)+"e").split("e");return+((r=(vs(t(r[0]+"e"+(+r[1]+e)))+"e").split("e"))[0]+"e"+(+r[1]-e))}return t(n)}}var Vo=Ae&&1/re(new Ae([,-0]))[1]==c?function(n){return new Ae(n)}:lu;function Xo(n){return function(t){var e=pa(t);return e==_?ne(t):e==T?oe(t):function(n,t){return At(t,(function(t){return[t,n[t]]}))}(t,n(t))}}function Jo(n,t,e,i,c,d,f,p){var h=2&t;if(!h&&"function"!=typeof n)throw new En(a);var g=i?i.length:0;if(g||(t&=-97,i=c=o),f=f===o?f:me(gs(f),0),p=p===o?p:gs(p),g-=c?c.length:0,64&t){var $=i,m=c;i=c=o}var b=h?o:oa(n),v=[n,t,e,i,c,$,m,d,f,p];if(b&&function(n,t){var e=n[1],r=t[1],o=e|r,a=o<131,i=r==l&&8==e||r==l&&256==e&&n[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==e;if(!a&&!i)return n;1&r&&(n[2]=t[2],o|=1&e?0:4);var u=t[3];if(u){var c=n[3];n[3]=c?Ao(c,u,t[4]):u,n[4]=c?ee(n[3],s):t[4]}(u=t[5])&&(c=n[5],n[5]=c?To(c,u,t[6]):u,n[6]=c?ee(n[5],s):t[6]),(u=t[7])&&(n[7]=u),r&l&&(n[8]=null==n[8]?t[8]:be(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=o}(v,b),n=v[0],t=v[1],e=v[2],i=v[3],c=v[4],!(p=v[9]=v[9]===o?h?0:n.length:me(v[9]-g,0))&&24&t&&(t&=-25),t&&1!=t)y=8==t||16==t?function(n,t,e){var a=Ro(n);return function i(){for(var s=arguments.length,u=r(s),l=s,c=ia(i);l--;)u[l]=arguments[l];var d=s<3&&u[0]!==c&&u[s-1]!==c?[]:ee(u,c);return(s-=d.length)<e?Wo(n,t,Lo,i.placeholder,o,u,d,o,o,e-s):bt(this&&this!==it&&this instanceof i?a:n,this,u)}}(n,t,p):t!=u&&33!=t||c.length?Lo.apply(o,v):function(n,t,e,o){var a=1&t,i=Ro(n);return function t(){for(var s=-1,u=arguments.length,l=-1,c=o.length,d=r(c+u),f=this&&this!==it&&this instanceof t?i:n;++l<c;)d[l]=o[l];for(;u--;)d[l++]=arguments[++s];return bt(f,a?e:this,d)}}(n,t,e,i);else var y=function(n,t,e){var r=1&t,o=Ro(n);return function t(){return(this&&this!==it&&this instanceof t?o:n).apply(r?e:this,arguments)}}(n,t,e);return Ma((b?Yr:Sa)(y,v),n,t)}function Ko(n,t,e,r){return n===o||Fi(n,jn[e])&&!In.call(r,e)?t:n}function Yo(n,t,e,r,a,i){return ts(n)&&ts(t)&&(i.set(t,n),Br(n,t,o,Yo,i),i.delete(t)),n}function Qo(n){return as(n)?o:n}function na(n,t,e,r,a,i){var s=1&e,u=n.length,l=t.length;if(u!=l&&!(s&&l>u))return!1;var c=i.get(n),d=i.get(t);if(c&&d)return c==t&&d==n;var f=-1,p=!0,h=2&e?new Ze:o;for(i.set(n,t),i.set(t,n);++f<u;){var g=n[f],$=t[f];if(r)var m=s?r($,g,f,t,n,i):r(g,$,f,n,t,i);if(m!==o){if(m)continue;p=!1;break}if(h){if(!Ot(t,(function(n,t){if(!Wt(h,t)&&(g===n||a(g,n,e,r,i)))return h.push(t)}))){p=!1;break}}else if(g!==$&&!a(g,$,e,r,i)){p=!1;break}}return i.delete(n),i.delete(t),p}function ta(n){return ja(Ca(n,o,Wa),n+"")}function ea(n){return xr(n,Ms,da)}function ra(n){return xr(n,Ps,fa)}var oa=Se?function(n){return Se.get(n)}:lu;function aa(n){for(var t=n.name+"",e=Oe[t],r=In.call(Oe,t)?e.length:0;r--;){var o=e[r],a=o.func;if(null==a||a==n)return o.name}return t}function ia(n){return(In.call(Le,"placeholder")?Le:n).placeholder}function sa(){var n=Le.iteratee||au;return n=n===au?Ir:n,arguments.length?n(arguments[0],arguments[1]):n}function ua(n,t){var e,r,o=n.__data__;return("string"==(r=typeof(e=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==e:null===e)?o["string"==typeof t?"string":"hash"]:o.map}function la(n){for(var t=Ms(n),e=t.length;e--;){var r=t[e],o=n[r];t[e]=[r,o,xa(o)]}return t}function ca(n,t){var e=function(n,t){return null==n?o:n[t]}(n,t);return Pr(e)?e:o}var da=fe?function(n){return null==n?[]:(n=Cn(n),xt(fe(n),(function(t){return tt.call(n,t)})))}:$u,fa=fe?function(n){for(var t=[];n;)Tt(t,da(n)),n=Zn(n);return t}:$u,pa=kr;function ha(n,t,e){for(var r=-1,o=(t=bo(t,n)).length,a=!1;++r<o;){var i=Na(t[r]);if(!(a=null!=n&&e(n,i)))break;n=n[i]}return a||++r!=o?a:!!(o=null==n?0:n.length)&&ns(o)&&ma(i,o)&&(Hi(n)||Gi(n))}function ga(n){return"function"!=typeof n.constructor||_a(n)?{}:Be(Zn(n))}function $a(n){return Hi(n)||Gi(n)||!!(at&&n&&n[at])}function ma(n,t){var e=typeof n;return!!(t=null==t?d:t)&&("number"==e||"symbol"!=e&&bn.test(n))&&n>-1&&n%1==0&&n<t}function ba(n,t,e){if(!ts(e))return!1;var r=typeof t;return!!("number"==r?Zi(e)&&ma(t,e.length):"string"==r&&t in e)&&Fi(e[t],n)}function va(n,t){if(Hi(n))return!1;var e=typeof n;return!("number"!=e&&"symbol"!=e&&"boolean"!=e&&null!=n&&!ls(n))||Q.test(n)||!Y.test(n)||null!=t&&n in Cn(t)}function ya(n){var t=aa(n),e=Le[t];if("function"!=typeof e||!(t in qe.prototype))return!1;if(n===e)return!0;var r=oa(e);return!!r&&n===r[0]}(xe&&pa(new xe(new ArrayBuffer(1)))!=M||ke&&pa(new ke)!=_||Ce&&pa(Ce.resolve())!=C||Ae&&pa(new Ae)!=T||Te&&pa(new Te)!=O)&&(pa=function(n){var t=kr(n),e=t==k?n.constructor:o,r=e?La(e):"";if(r)switch(r){case je:return M;case Me:return _;case Pe:return C;case Ie:return T;case ze:return O}return t});var wa=Mn?Yi:mu;function _a(n){var t=n&&n.constructor;return n===("function"==typeof t&&t.prototype||jn)}function xa(n){return n==n&&!ts(n)}function ka(n,t){return function(e){return null!=e&&e[n]===t&&(t!==o||n in Cn(e))}}function Ca(n,t,e){return t=me(t===o?n.length-1:t,0),function(){for(var o=arguments,a=-1,i=me(o.length-t,0),s=r(i);++a<i;)s[a]=o[t+a];a=-1;for(var u=r(t+1);++a<t;)u[a]=o[a];return u[t]=e(s),bt(n,this,u)}}function Aa(n,t){return t.length<2?n:_r(n,to(t,0,-1))}function Ta(n,t){for(var e=n.length,r=be(t.length,e),a=Eo(n);r--;){var i=t[r];n[r]=ma(i,e)?a[i]:o}return n}function Ea(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}var Sa=Pa(Yr),Oa=Lt||function(n,t){return it.setTimeout(n,t)},ja=Pa(Qr);function Ma(n,t,e){var r=t+"";return ja(n,function(n,t){var e=t.length;if(!e)return n;var r=e-1;return t[r]=(e>1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(an,"{\n/* [wrapped with "+t+"] */\n")}(r,function(n,t){return yt(h,(function(e){var r="_."+e[0];t&e[1]&&!kt(n,r)&&n.push(r)})),n.sort()}(function(n){var t=n.match(sn);return t?t[1].split(un):[]}(r),e)))}function Pa(n){var t=0,e=0;return function(){var r=ve(),a=16-(r-e);if(e=r,a>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(o,arguments)}}function Ia(n,t){var e=-1,r=n.length,a=r-1;for(t=t===o?r:t;++e<t;){var i=Wr(e,a),s=n[i];n[i]=n[e],n[e]=s}return n.length=t,n}var za,Ra,Da=(za=zi((function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(nn,(function(n,e,r,o){t.push(r?o.replace(dn,"$1"):e||n)})),t}),(function(n){return 500===Ra.size&&Ra.clear(),n})),Ra=za.cache,za);function Na(n){if("string"==typeof n||ls(n))return n;var t=n+"";return"0"==t&&1/n==-1/0?"-0":t}function La(n){if(null!=n){try{return Pn.call(n)}catch(n){}try{return n+""}catch(n){}}return""}function Ba(n){if(n instanceof qe)return n.clone();var t=new Ue(n.__wrapped__,n.__chain__);return t.__actions__=Eo(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Fa=Vr((function(n,t){return Vi(n)?cr(n,$r(t,1,Vi,!0)):[]})),Ua=Vr((function(n,t){var e=Ka(t);return Vi(e)&&(e=o),Vi(n)?cr(n,$r(t,1,Vi,!0),sa(e,2)):[]})),qa=Vr((function(n,t){var e=Ka(t);return Vi(e)&&(e=o),Vi(n)?cr(n,$r(t,1,Vi,!0),o,e):[]}));function Ga(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var o=null==e?0:gs(e);return o<0&&(o=me(r+o,0)),Pt(n,sa(t,3),o)}function Ha(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var a=r-1;return e!==o&&(a=gs(e),a=e<0?me(r+a,0):be(a,r-1)),Pt(n,sa(t,3),a,!0)}function Wa(n){return null!=n&&n.length?$r(n,1):[]}function Za(n){return n&&n.length?n[0]:o}var Va=Vr((function(n){var t=At(n,$o);return t.length&&t[0]===n[0]?Er(t):[]})),Xa=Vr((function(n){var t=Ka(n),e=At(n,$o);return t===Ka(e)?t=o:e.pop(),e.length&&e[0]===n[0]?Er(e,sa(t,2)):[]})),Ja=Vr((function(n){var t=Ka(n),e=At(n,$o);return(t="function"==typeof t?t:o)&&e.pop(),e.length&&e[0]===n[0]?Er(e,o,t):[]}));function Ka(n){var t=null==n?0:n.length;return t?n[t-1]:o}var Ya=Vr(Qa);function Qa(n,t){return n&&n.length&&t&&t.length?Gr(n,t):n}var ni=ta((function(n,t){var e=null==n?0:n.length,r=ar(n,t);return Hr(n,At(t,(function(n){return ma(n,e)?+n:n})).sort(Co)),r}));function ti(n){return null==n?n:_e.call(n)}var ei=Vr((function(n){return uo($r(n,1,Vi,!0))})),ri=Vr((function(n){var t=Ka(n);return Vi(t)&&(t=o),uo($r(n,1,Vi,!0),sa(t,2))})),oi=Vr((function(n){var t=Ka(n);return t="function"==typeof t?t:o,uo($r(n,1,Vi,!0),o,t)}));function ai(n){if(!n||!n.length)return[];var t=0;return n=xt(n,(function(n){if(Vi(n))return t=me(n.length,t),!0})),Ut(t,(function(t){return At(n,Nt(t))}))}function ii(n,t){if(!n||!n.length)return[];var e=ai(n);return null==t?e:At(e,(function(n){return bt(t,o,n)}))}var si=Vr((function(n,t){return Vi(n)?cr(n,t):[]})),ui=Vr((function(n){return ho(xt(n,Vi))})),li=Vr((function(n){var t=Ka(n);return Vi(t)&&(t=o),ho(xt(n,Vi),sa(t,2))})),ci=Vr((function(n){var t=Ka(n);return t="function"==typeof t?t:o,ho(xt(n,Vi),o,t)})),di=Vr(ai),fi=Vr((function(n){var t=n.length,e=t>1?n[t-1]:o;return e="function"==typeof e?(n.pop(),e):o,ii(n,e)}));function pi(n){var t=Le(n);return t.__chain__=!0,t}function hi(n,t){return t(n)}var gi=ta((function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,a=function(t){return ar(t,n)};return!(t>1||this.__actions__.length)&&r instanceof qe&&ma(e)?((r=r.slice(e,+e+(t?1:0))).__actions__.push({func:hi,args:[a],thisArg:o}),new Ue(r,this.__chain__).thru((function(n){return t&&!n.length&&n.push(o),n}))):this.thru(a)})),$i=Oo((function(n,t,e){In.call(n,e)?++n[e]:or(n,e,1)})),mi=Do(Ga),bi=Do(Ha);function vi(n,t){return(Hi(n)?yt:dr)(n,sa(t,3))}function yi(n,t){return(Hi(n)?wt:fr)(n,sa(t,3))}var wi=Oo((function(n,t,e){In.call(n,e)?n[e].push(t):or(n,e,[t])})),_i=Vr((function(n,t,e){var o=-1,a="function"==typeof t,i=Zi(n)?r(n.length):[];return dr(n,(function(n){i[++o]=a?bt(t,n,e):Sr(n,t,e)})),i})),xi=Oo((function(n,t,e){or(n,e,t)}));function ki(n,t){return(Hi(n)?At:Dr)(n,sa(t,3))}var Ci=Oo((function(n,t,e){n[e?0:1].push(t)}),(function(){return[[],[]]})),Ai=Vr((function(n,t){if(null==n)return[];var e=t.length;return e>1&&ba(n,t[0],t[1])?t=[]:e>2&&ba(t[0],t[1],t[2])&&(t=[t[0]]),Ur(n,$r(t,1),[])})),Ti=jt||function(){return it.Date.now()};function Ei(n,t,e){return t=e?o:t,t=n&&null==t?n.length:t,Jo(n,l,o,o,o,o,t)}function Si(n,t){var e;if("function"!=typeof t)throw new En(a);return n=gs(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=o),e}}var Oi=Vr((function(n,t,e){var r=1;if(e.length){var o=ee(e,ia(Oi));r|=u}return Jo(n,r,t,e,o)})),ji=Vr((function(n,t,e){var r=3;if(e.length){var o=ee(e,ia(ji));r|=u}return Jo(t,r,n,e,o)}));function Mi(n,t,e){var r,i,s,u,l,c,d=0,f=!1,p=!1,h=!0;if("function"!=typeof n)throw new En(a);function g(t){var e=r,a=i;return r=i=o,d=t,u=n.apply(a,e)}function $(n){return d=n,l=Oa(b,t),f?g(n):u}function m(n){var e=n-c;return c===o||e>=t||e<0||p&&n-d>=s}function b(){var n=Ti();if(m(n))return v(n);l=Oa(b,function(n){var e=t-(n-c);return p?be(e,s-(n-d)):e}(n))}function v(n){return l=o,h&&r?g(n):(r=i=o,u)}function y(){var n=Ti(),e=m(n);if(r=arguments,i=this,c=n,e){if(l===o)return $(c);if(p)return wo(l),l=Oa(b,t),g(c)}return l===o&&(l=Oa(b,t)),u}return t=ms(t)||0,ts(e)&&(f=!!e.leading,s=(p="maxWait"in e)?me(ms(e.maxWait)||0,t):s,h="trailing"in e?!!e.trailing:h),y.cancel=function(){l!==o&&wo(l),d=0,r=c=i=l=o},y.flush=function(){return l===o?u:v(Ti())},y}var Pi=Vr((function(n,t){return lr(n,1,t)})),Ii=Vr((function(n,t,e){return lr(n,ms(t)||0,e)}));function zi(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new En(a);var e=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=e.cache;if(a.has(o))return a.get(o);var i=n.apply(this,r);return e.cache=a.set(o,i)||a,i};return e.cache=new(zi.Cache||We),e}function Ri(n){if("function"!=typeof n)throw new En(a);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}zi.Cache=We;var Di=vo((function(n,t){var e=(t=1==t.length&&Hi(t[0])?At(t[0],Gt(sa())):At($r(t,1),Gt(sa()))).length;return Vr((function(r){for(var o=-1,a=be(r.length,e);++o<a;)r[o]=t[o].call(this,r[o]);return bt(n,this,r)}))})),Ni=Vr((function(n,t){var e=ee(t,ia(Ni));return Jo(n,u,o,t,e)})),Li=Vr((function(n,t){var e=ee(t,ia(Li));return Jo(n,64,o,t,e)})),Bi=ta((function(n,t){return Jo(n,256,o,o,o,t)}));function Fi(n,t){return n===t||n!=n&&t!=t}var Ui=Ho(Cr),qi=Ho((function(n,t){return n>=t})),Gi=Or(function(){return arguments}())?Or:function(n){return es(n)&&In.call(n,"callee")&&!tt.call(n,"callee")},Hi=r.isArray,Wi=ft?Gt(ft):function(n){return es(n)&&kr(n)==j};function Zi(n){return null!=n&&ns(n.length)&&!Yi(n)}function Vi(n){return es(n)&&Zi(n)}var Xi=pe||mu,Ji=pt?Gt(pt):function(n){return es(n)&&kr(n)==b};function Ki(n){if(!es(n))return!1;var t=kr(n);return t==v||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!as(n)}function Yi(n){if(!ts(n))return!1;var t=kr(n);return t==y||t==w||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Qi(n){return"number"==typeof n&&n==gs(n)}function ns(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=d}function ts(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function es(n){return null!=n&&"object"==typeof n}var rs=ht?Gt(ht):function(n){return es(n)&&pa(n)==_};function os(n){return"number"==typeof n||es(n)&&kr(n)==x}function as(n){if(!es(n)||kr(n)!=k)return!1;var t=Zn(n);if(null===t)return!0;var e=In.call(t,"constructor")&&t.constructor;return"function"==typeof e&&e instanceof e&&Pn.call(e)==Nn}var is=gt?Gt(gt):function(n){return es(n)&&kr(n)==A},ss=$t?Gt($t):function(n){return es(n)&&pa(n)==T};function us(n){return"string"==typeof n||!Hi(n)&&es(n)&&kr(n)==E}function ls(n){return"symbol"==typeof n||es(n)&&kr(n)==S}var cs=mt?Gt(mt):function(n){return es(n)&&ns(n.length)&&!!Qn[kr(n)]},ds=Ho(Rr),fs=Ho((function(n,t){return n<=t}));function ps(n){if(!n)return[];if(Zi(n))return us(n)?ie(n):Eo(n);if(st&&n[st])return function(n){for(var t,e=[];!(t=n.next()).done;)e.push(t.value);return e}(n[st]());var t=pa(n);return(t==_?ne:t==T?re:Fs)(n)}function hs(n){return n?(n=ms(n))===c||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function gs(n){var t=hs(n),e=t%1;return t==t?e?t-e:t:0}function $s(n){return n?ir(gs(n),0,p):0}function ms(n){if("number"==typeof n)return n;if(ls(n))return f;if(ts(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=ts(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=qt(n);var e=gn.test(n);return e||mn.test(n)?rt(n.slice(2),e?2:8):hn.test(n)?f:+n}function bs(n){return So(n,Ps(n))}function vs(n){return null==n?"":so(n)}var ys=jo((function(n,t){if(_a(t)||Zi(t))So(t,Ms(t),n);else for(var e in t)In.call(t,e)&&nr(n,e,t[e])})),ws=jo((function(n,t){So(t,Ps(t),n)})),_s=jo((function(n,t,e,r){So(t,Ps(t),n,r)})),xs=jo((function(n,t,e,r){So(t,Ms(t),n,r)})),ks=ta(ar),Cs=Vr((function(n,t){n=Cn(n);var e=-1,r=t.length,a=r>2?t[2]:o;for(a&&ba(t[0],t[1],a)&&(r=1);++e<r;)for(var i=t[e],s=Ps(i),u=-1,l=s.length;++u<l;){var c=s[u],d=n[c];(d===o||Fi(d,jn[c])&&!In.call(n,c))&&(n[c]=i[c])}return n})),As=Vr((function(n){return n.push(o,Yo),bt(zs,o,n)}));function Ts(n,t,e){var r=null==n?o:_r(n,t);return r===o?e:r}function Es(n,t){return null!=n&&ha(n,t,Tr)}var Ss=Bo((function(n,t,e){null!=t&&"function"!=typeof t.toString&&(t=Dn.call(t)),n[t]=e}),tu(ou)),Os=Bo((function(n,t,e){null!=t&&"function"!=typeof t.toString&&(t=Dn.call(t)),In.call(n,t)?n[t].push(e):n[t]=[e]}),sa),js=Vr(Sr);function Ms(n){return Zi(n)?Xe(n):zr(n)}function Ps(n){return Zi(n)?Xe(n,!0):function(n){if(!ts(n))return function(n){var t=[];if(null!=n)for(var e in Cn(n))t.push(e);return t}(n);var t=_a(n),e=[];for(var r in n)("constructor"!=r||!t&&In.call(n,r))&&e.push(r);return e}(n)}var Is=jo((function(n,t,e){Br(n,t,e)})),zs=jo((function(n,t,e,r){Br(n,t,e,r)})),Rs=ta((function(n,t){var e={};if(null==n)return e;var r=!1;t=At(t,(function(t){return t=bo(t,n),r||(r=t.length>1),t})),So(n,ra(n),e),r&&(e=sr(e,7,Qo));for(var o=t.length;o--;)lo(e,t[o]);return e})),Ds=ta((function(n,t){return null==n?{}:function(n,t){return qr(n,t,(function(t,e){return Es(n,e)}))}(n,t)}));function Ns(n,t){if(null==n)return{};var e=At(ra(n),(function(n){return[n]}));return t=sa(t),qr(n,e,(function(n,e){return t(n,e[0])}))}var Ls=Xo(Ms),Bs=Xo(Ps);function Fs(n){return null==n?[]:Ht(n,Ms(n))}var Us=zo((function(n,t,e){return t=t.toLowerCase(),n+(e?qs(t):t)}));function qs(n){return Ks(vs(n).toLowerCase())}function Gs(n){return(n=vs(n))&&n.replace(vn,Jt).replace(Wn,"")}var Hs=zo((function(n,t,e){return n+(e?"-":"")+t.toLowerCase()})),Ws=zo((function(n,t,e){return n+(e?" ":"")+t.toLowerCase()})),Zs=Io("toLowerCase"),Vs=zo((function(n,t,e){return n+(e?"_":"")+t.toLowerCase()})),Xs=zo((function(n,t,e){return n+(e?" ":"")+Ks(t)})),Js=zo((function(n,t,e){return n+(e?" ":"")+t.toUpperCase()})),Ks=Io("toUpperCase");function Ys(n,t,e){return n=vs(n),(t=e?o:t)===o?function(n){return Jn.test(n)}(n)?function(n){return n.match(Vn)||[]}(n):function(n){return n.match(ln)||[]}(n):n.match(t)||[]}var Qs=Vr((function(n,t){try{return bt(n,o,t)}catch(n){return Ki(n)?n:new _n(n)}})),nu=ta((function(n,t){return yt(t,(function(t){t=Na(t),or(n,t,Oi(n[t],n))})),n}));function tu(n){return function(){return n}}var eu=No(),ru=No(!0);function ou(n){return n}function au(n){return Ir("function"==typeof n?n:sr(n,1))}var iu=Vr((function(n,t){return function(e){return Sr(e,n,t)}})),su=Vr((function(n,t){return function(e){return Sr(n,e,t)}}));function uu(n,t,e){var r=Ms(t),o=wr(t,r);null!=e||ts(t)&&(o.length||!r.length)||(e=t,t=n,n=this,o=wr(t,Ms(t)));var a=!(ts(e)&&"chain"in e&&!e.chain),i=Yi(n);return yt(o,(function(e){var r=t[e];n[e]=r,i&&(n.prototype[e]=function(){var t=this.__chain__;if(a||t){var e=n(this.__wrapped__),o=e.__actions__=Eo(this.__actions__);return o.push({func:r,args:arguments,thisArg:n}),e.__chain__=t,e}return r.apply(n,Tt([this.value()],arguments))})})),n}function lu(){}var cu=Uo(At),du=Uo(_t),fu=Uo(Ot);function pu(n){return va(n)?Nt(Na(n)):function(n){return function(t){return _r(t,n)}}(n)}var hu=Go(),gu=Go(!0);function $u(){return[]}function mu(){return!1}var bu,vu=Fo((function(n,t){return n+t}),0),yu=Zo("ceil"),wu=Fo((function(n,t){return n/t}),1),_u=Zo("floor"),xu=Fo((function(n,t){return n*t}),1),ku=Zo("round"),Cu=Fo((function(n,t){return n-t}),0);return Le.after=function(n,t){if("function"!=typeof t)throw new En(a);return n=gs(n),function(){if(--n<1)return t.apply(this,arguments)}},Le.ary=Ei,Le.assign=ys,Le.assignIn=ws,Le.assignInWith=_s,Le.assignWith=xs,Le.at=ks,Le.before=Si,Le.bind=Oi,Le.bindAll=nu,Le.bindKey=ji,Le.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Hi(n)?n:[n]},Le.chain=pi,Le.chunk=function(n,t,e){t=(e?ba(n,t,e):t===o)?1:me(gs(t),0);var a=null==n?0:n.length;if(!a||t<1)return[];for(var i=0,s=0,u=r(ce(a/t));i<a;)u[s++]=to(n,i,i+=t);return u},Le.compact=function(n){for(var t=-1,e=null==n?0:n.length,r=0,o=[];++t<e;){var a=n[t];a&&(o[r++]=a)}return o},Le.concat=function(){var n=arguments.length;if(!n)return[];for(var t=r(n-1),e=arguments[0],o=n;o--;)t[o-1]=arguments[o];return Tt(Hi(e)?Eo(e):[e],$r(t,1))},Le.cond=function(n){var t=null==n?0:n.length,e=sa();return n=t?At(n,(function(n){if("function"!=typeof n[1])throw new En(a);return[e(n[0]),n[1]]})):[],Vr((function(e){for(var r=-1;++r<t;){var o=n[r];if(bt(o[0],this,e))return bt(o[1],this,e)}}))},Le.conforms=function(n){return function(n){var t=Ms(n);return function(e){return ur(e,n,t)}}(sr(n,1))},Le.constant=tu,Le.countBy=$i,Le.create=function(n,t){var e=Be(n);return null==t?e:rr(e,t)},Le.curry=function n(t,e,r){var a=Jo(t,8,o,o,o,o,o,e=r?o:e);return a.placeholder=n.placeholder,a},Le.curryRight=function n(t,e,r){var a=Jo(t,16,o,o,o,o,o,e=r?o:e);return a.placeholder=n.placeholder,a},Le.debounce=Mi,Le.defaults=Cs,Le.defaultsDeep=As,Le.defer=Pi,Le.delay=Ii,Le.difference=Fa,Le.differenceBy=Ua,Le.differenceWith=qa,Le.drop=function(n,t,e){var r=null==n?0:n.length;return r?to(n,(t=e||t===o?1:gs(t))<0?0:t,r):[]},Le.dropRight=function(n,t,e){var r=null==n?0:n.length;return r?to(n,0,(t=r-(t=e||t===o?1:gs(t)))<0?0:t):[]},Le.dropRightWhile=function(n,t){return n&&n.length?fo(n,sa(t,3),!0,!0):[]},Le.dropWhile=function(n,t){return n&&n.length?fo(n,sa(t,3),!0):[]},Le.fill=function(n,t,e,r){var a=null==n?0:n.length;return a?(e&&"number"!=typeof e&&ba(n,t,e)&&(e=0,r=a),function(n,t,e,r){var a=n.length;for((e=gs(e))<0&&(e=-e>a?0:a+e),(r=r===o||r>a?a:gs(r))<0&&(r+=a),r=e>r?0:$s(r);e<r;)n[e++]=t;return n}(n,t,e,r)):[]},Le.filter=function(n,t){return(Hi(n)?xt:gr)(n,sa(t,3))},Le.flatMap=function(n,t){return $r(ki(n,t),1)},Le.flatMapDeep=function(n,t){return $r(ki(n,t),c)},Le.flatMapDepth=function(n,t,e){return e=e===o?1:gs(e),$r(ki(n,t),e)},Le.flatten=Wa,Le.flattenDeep=function(n){return null!=n&&n.length?$r(n,c):[]},Le.flattenDepth=function(n,t){return null!=n&&n.length?$r(n,t=t===o?1:gs(t)):[]},Le.flip=function(n){return Jo(n,512)},Le.flow=eu,Le.flowRight=ru,Le.fromPairs=function(n){for(var t=-1,e=null==n?0:n.length,r={};++t<e;){var o=n[t];r[o[0]]=o[1]}return r},Le.functions=function(n){return null==n?[]:wr(n,Ms(n))},Le.functionsIn=function(n){return null==n?[]:wr(n,Ps(n))},Le.groupBy=wi,Le.initial=function(n){return null!=n&&n.length?to(n,0,-1):[]},Le.intersection=Va,Le.intersectionBy=Xa,Le.intersectionWith=Ja,Le.invert=Ss,Le.invertBy=Os,Le.invokeMap=_i,Le.iteratee=au,Le.keyBy=xi,Le.keys=Ms,Le.keysIn=Ps,Le.map=ki,Le.mapKeys=function(n,t){var e={};return t=sa(t,3),vr(n,(function(n,r,o){or(e,t(n,r,o),n)})),e},Le.mapValues=function(n,t){var e={};return t=sa(t,3),vr(n,(function(n,r,o){or(e,r,t(n,r,o))})),e},Le.matches=function(n){return Nr(sr(n,1))},Le.matchesProperty=function(n,t){return Lr(n,sr(t,1))},Le.memoize=zi,Le.merge=Is,Le.mergeWith=zs,Le.method=iu,Le.methodOf=su,Le.mixin=uu,Le.negate=Ri,Le.nthArg=function(n){return n=gs(n),Vr((function(t){return Fr(t,n)}))},Le.omit=Rs,Le.omitBy=function(n,t){return Ns(n,Ri(sa(t)))},Le.once=function(n){return Si(2,n)},Le.orderBy=function(n,t,e,r){return null==n?[]:(Hi(t)||(t=null==t?[]:[t]),Hi(e=r?o:e)||(e=null==e?[]:[e]),Ur(n,t,e))},Le.over=cu,Le.overArgs=Di,Le.overEvery=du,Le.overSome=fu,Le.partial=Ni,Le.partialRight=Li,Le.partition=Ci,Le.pick=Ds,Le.pickBy=Ns,Le.property=pu,Le.propertyOf=function(n){return function(t){return null==n?o:_r(n,t)}},Le.pull=Ya,Le.pullAll=Qa,Le.pullAllBy=function(n,t,e){return n&&n.length&&t&&t.length?Gr(n,t,sa(e,2)):n},Le.pullAllWith=function(n,t,e){return n&&n.length&&t&&t.length?Gr(n,t,o,e):n},Le.pullAt=ni,Le.range=hu,Le.rangeRight=gu,Le.rearg=Bi,Le.reject=function(n,t){return(Hi(n)?xt:gr)(n,Ri(sa(t,3)))},Le.remove=function(n,t){var e=[];if(!n||!n.length)return e;var r=-1,o=[],a=n.length;for(t=sa(t,3);++r<a;){var i=n[r];t(i,r,n)&&(e.push(i),o.push(r))}return Hr(n,o),e},Le.rest=function(n,t){if("function"!=typeof n)throw new En(a);return Vr(n,t=t===o?t:gs(t))},Le.reverse=ti,Le.sampleSize=function(n,t,e){return t=(e?ba(n,t,e):t===o)?1:gs(t),(Hi(n)?Ke:Jr)(n,t)},Le.set=function(n,t,e){return null==n?n:Kr(n,t,e)},Le.setWith=function(n,t,e,r){return r="function"==typeof r?r:o,null==n?n:Kr(n,t,e,r)},Le.shuffle=function(n){return(Hi(n)?Ye:no)(n)},Le.slice=function(n,t,e){var r=null==n?0:n.length;return r?(e&&"number"!=typeof e&&ba(n,t,e)?(t=0,e=r):(t=null==t?0:gs(t),e=e===o?r:gs(e)),to(n,t,e)):[]},Le.sortBy=Ai,Le.sortedUniq=function(n){return n&&n.length?ao(n):[]},Le.sortedUniqBy=function(n,t){return n&&n.length?ao(n,sa(t,2)):[]},Le.split=function(n,t,e){return e&&"number"!=typeof e&&ba(n,t,e)&&(t=e=o),(e=e===o?p:e>>>0)?(n=vs(n))&&("string"==typeof t||null!=t&&!is(t))&&!(t=so(t))&&Qt(n)?yo(ie(n),0,e):n.split(t,e):[]},Le.spread=function(n,t){if("function"!=typeof n)throw new En(a);return t=null==t?0:me(gs(t),0),Vr((function(e){var r=e[t],o=yo(e,0,t);return r&&Tt(o,r),bt(n,this,o)}))},Le.tail=function(n){var t=null==n?0:n.length;return t?to(n,1,t):[]},Le.take=function(n,t,e){return n&&n.length?to(n,0,(t=e||t===o?1:gs(t))<0?0:t):[]},Le.takeRight=function(n,t,e){var r=null==n?0:n.length;return r?to(n,(t=r-(t=e||t===o?1:gs(t)))<0?0:t,r):[]},Le.takeRightWhile=function(n,t){return n&&n.length?fo(n,sa(t,3),!1,!0):[]},Le.takeWhile=function(n,t){return n&&n.length?fo(n,sa(t,3)):[]},Le.tap=function(n,t){return t(n),n},Le.throttle=function(n,t,e){var r=!0,o=!0;if("function"!=typeof n)throw new En(a);return ts(e)&&(r="leading"in e?!!e.leading:r,o="trailing"in e?!!e.trailing:o),Mi(n,t,{leading:r,maxWait:t,trailing:o})},Le.thru=hi,Le.toArray=ps,Le.toPairs=Ls,Le.toPairsIn=Bs,Le.toPath=function(n){return Hi(n)?At(n,Na):ls(n)?[n]:Eo(Da(vs(n)))},Le.toPlainObject=bs,Le.transform=function(n,t,e){var r=Hi(n),o=r||Xi(n)||cs(n);if(t=sa(t,4),null==e){var a=n&&n.constructor;e=o?r?new a:[]:ts(n)&&Yi(a)?Be(Zn(n)):{}}return(o?yt:vr)(n,(function(n,r,o){return t(e,n,r,o)})),e},Le.unary=function(n){return Ei(n,1)},Le.union=ei,Le.unionBy=ri,Le.unionWith=oi,Le.uniq=function(n){return n&&n.length?uo(n):[]},Le.uniqBy=function(n,t){return n&&n.length?uo(n,sa(t,2)):[]},Le.uniqWith=function(n,t){return t="function"==typeof t?t:o,n&&n.length?uo(n,o,t):[]},Le.unset=function(n,t){return null==n||lo(n,t)},Le.unzip=ai,Le.unzipWith=ii,Le.update=function(n,t,e){return null==n?n:co(n,t,mo(e))},Le.updateWith=function(n,t,e,r){return r="function"==typeof r?r:o,null==n?n:co(n,t,mo(e),r)},Le.values=Fs,Le.valuesIn=function(n){return null==n?[]:Ht(n,Ps(n))},Le.without=si,Le.words=Ys,Le.wrap=function(n,t){return Ni(mo(t),n)},Le.xor=ui,Le.xorBy=li,Le.xorWith=ci,Le.zip=di,Le.zipObject=function(n,t){return go(n||[],t||[],nr)},Le.zipObjectDeep=function(n,t){return go(n||[],t||[],Kr)},Le.zipWith=fi,Le.entries=Ls,Le.entriesIn=Bs,Le.extend=ws,Le.extendWith=_s,uu(Le,Le),Le.add=vu,Le.attempt=Qs,Le.camelCase=Us,Le.capitalize=qs,Le.ceil=yu,Le.clamp=function(n,t,e){return e===o&&(e=t,t=o),e!==o&&(e=(e=ms(e))==e?e:0),t!==o&&(t=(t=ms(t))==t?t:0),ir(ms(n),t,e)},Le.clone=function(n){return sr(n,4)},Le.cloneDeep=function(n){return sr(n,5)},Le.cloneDeepWith=function(n,t){return sr(n,5,t="function"==typeof t?t:o)},Le.cloneWith=function(n,t){return sr(n,4,t="function"==typeof t?t:o)},Le.conformsTo=function(n,t){return null==t||ur(n,t,Ms(t))},Le.deburr=Gs,Le.defaultTo=function(n,t){return null==n||n!=n?t:n},Le.divide=wu,Le.endsWith=function(n,t,e){n=vs(n),t=so(t);var r=n.length,a=e=e===o?r:ir(gs(e),0,r);return(e-=t.length)>=0&&n.slice(e,a)==t},Le.eq=Fi,Le.escape=function(n){return(n=vs(n))&&V.test(n)?n.replace(W,Kt):n},Le.escapeRegExp=function(n){return(n=vs(n))&&en.test(n)?n.replace(tn,"\\$&"):n},Le.every=function(n,t,e){var r=Hi(n)?_t:pr;return e&&ba(n,t,e)&&(t=o),r(n,sa(t,3))},Le.find=mi,Le.findIndex=Ga,Le.findKey=function(n,t){return Mt(n,sa(t,3),vr)},Le.findLast=bi,Le.findLastIndex=Ha,Le.findLastKey=function(n,t){return Mt(n,sa(t,3),yr)},Le.floor=_u,Le.forEach=vi,Le.forEachRight=yi,Le.forIn=function(n,t){return null==n?n:mr(n,sa(t,3),Ps)},Le.forInRight=function(n,t){return null==n?n:br(n,sa(t,3),Ps)},Le.forOwn=function(n,t){return n&&vr(n,sa(t,3))},Le.forOwnRight=function(n,t){return n&&yr(n,sa(t,3))},Le.get=Ts,Le.gt=Ui,Le.gte=qi,Le.has=function(n,t){return null!=n&&ha(n,t,Ar)},Le.hasIn=Es,Le.head=Za,Le.identity=ou,Le.includes=function(n,t,e,r){n=Zi(n)?n:Fs(n),e=e&&!r?gs(e):0;var o=n.length;return e<0&&(e=me(o+e,0)),us(n)?e<=o&&n.indexOf(t,e)>-1:!!o&&It(n,t,e)>-1},Le.indexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var o=null==e?0:gs(e);return o<0&&(o=me(r+o,0)),It(n,t,o)},Le.inRange=function(n,t,e){return t=hs(t),e===o?(e=t,t=0):e=hs(e),function(n,t,e){return n>=be(t,e)&&n<me(t,e)}(n=ms(n),t,e)},Le.invoke=js,Le.isArguments=Gi,Le.isArray=Hi,Le.isArrayBuffer=Wi,Le.isArrayLike=Zi,Le.isArrayLikeObject=Vi,Le.isBoolean=function(n){return!0===n||!1===n||es(n)&&kr(n)==m},Le.isBuffer=Xi,Le.isDate=Ji,Le.isElement=function(n){return es(n)&&1===n.nodeType&&!as(n)},Le.isEmpty=function(n){if(null==n)return!0;if(Zi(n)&&(Hi(n)||"string"==typeof n||"function"==typeof n.splice||Xi(n)||cs(n)||Gi(n)))return!n.length;var t=pa(n);if(t==_||t==T)return!n.size;if(_a(n))return!zr(n).length;for(var e in n)if(In.call(n,e))return!1;return!0},Le.isEqual=function(n,t){return jr(n,t)},Le.isEqualWith=function(n,t,e){var r=(e="function"==typeof e?e:o)?e(n,t):o;return r===o?jr(n,t,o,e):!!r},Le.isError=Ki,Le.isFinite=function(n){return"number"==typeof n&&he(n)},Le.isFunction=Yi,Le.isInteger=Qi,Le.isLength=ns,Le.isMap=rs,Le.isMatch=function(n,t){return n===t||Mr(n,t,la(t))},Le.isMatchWith=function(n,t,e){return e="function"==typeof e?e:o,Mr(n,t,la(t),e)},Le.isNaN=function(n){return os(n)&&n!=+n},Le.isNative=function(n){if(wa(n))throw new _n("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Pr(n)},Le.isNil=function(n){return null==n},Le.isNull=function(n){return null===n},Le.isNumber=os,Le.isObject=ts,Le.isObjectLike=es,Le.isPlainObject=as,Le.isRegExp=is,Le.isSafeInteger=function(n){return Qi(n)&&n>=-9007199254740991&&n<=d},Le.isSet=ss,Le.isString=us,Le.isSymbol=ls,Le.isTypedArray=cs,Le.isUndefined=function(n){return n===o},Le.isWeakMap=function(n){return es(n)&&pa(n)==O},Le.isWeakSet=function(n){return es(n)&&"[object WeakSet]"==kr(n)},Le.join=function(n,t){return null==n?"":ge.call(n,t)},Le.kebabCase=Hs,Le.last=Ka,Le.lastIndexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var a=r;return e!==o&&(a=(a=gs(e))<0?me(r+a,0):be(a,r-1)),t==t?function(n,t,e){for(var r=e+1;r--;)if(n[r]===t)return r;return r}(n,t,a):Pt(n,Rt,a,!0)},Le.lowerCase=Ws,Le.lowerFirst=Zs,Le.lt=ds,Le.lte=fs,Le.max=function(n){return n&&n.length?hr(n,ou,Cr):o},Le.maxBy=function(n,t){return n&&n.length?hr(n,sa(t,2),Cr):o},Le.mean=function(n){return Dt(n,ou)},Le.meanBy=function(n,t){return Dt(n,sa(t,2))},Le.min=function(n){return n&&n.length?hr(n,ou,Rr):o},Le.minBy=function(n,t){return n&&n.length?hr(n,sa(t,2),Rr):o},Le.stubArray=$u,Le.stubFalse=mu,Le.stubObject=function(){return{}},Le.stubString=function(){return""},Le.stubTrue=function(){return!0},Le.multiply=xu,Le.nth=function(n,t){return n&&n.length?Fr(n,gs(t)):o},Le.noConflict=function(){return it._===this&&(it._=Ln),this},Le.noop=lu,Le.now=Ti,Le.pad=function(n,t,e){n=vs(n);var r=(t=gs(t))?ae(n):0;if(!t||r>=t)return n;var o=(t-r)/2;return qo(de(o),e)+n+qo(ce(o),e)},Le.padEnd=function(n,t,e){n=vs(n);var r=(t=gs(t))?ae(n):0;return t&&r<t?n+qo(t-r,e):n},Le.padStart=function(n,t,e){n=vs(n);var r=(t=gs(t))?ae(n):0;return t&&r<t?qo(t-r,e)+n:n},Le.parseInt=function(n,t,e){return e||null==t?t=0:t&&(t=+t),ye(vs(n).replace(rn,""),t||0)},Le.random=function(n,t,e){if(e&&"boolean"!=typeof e&&ba(n,t,e)&&(t=e=o),e===o&&("boolean"==typeof t?(e=t,t=o):"boolean"==typeof n&&(e=n,n=o)),n===o&&t===o?(n=0,t=1):(n=hs(n),t===o?(t=n,n=0):t=hs(t)),n>t){var r=n;n=t,t=r}if(e||n%1||t%1){var a=we();return be(n+a*(t-n+et("1e-"+((a+"").length-1))),t)}return Wr(n,t)},Le.reduce=function(n,t,e){var r=Hi(n)?Et:Bt,o=arguments.length<3;return r(n,sa(t,4),e,o,dr)},Le.reduceRight=function(n,t,e){var r=Hi(n)?St:Bt,o=arguments.length<3;return r(n,sa(t,4),e,o,fr)},Le.repeat=function(n,t,e){return t=(e?ba(n,t,e):t===o)?1:gs(t),Zr(vs(n),t)},Le.replace=function(){var n=arguments,t=vs(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Le.result=function(n,t,e){var r=-1,a=(t=bo(t,n)).length;for(a||(a=1,n=o);++r<a;){var i=null==n?o:n[Na(t[r])];i===o&&(r=a,i=e),n=Yi(i)?i.call(n):i}return n},Le.round=ku,Le.runInContext=n,Le.sample=function(n){return(Hi(n)?Je:Xr)(n)},Le.size=function(n){if(null==n)return 0;if(Zi(n))return us(n)?ae(n):n.length;var t=pa(n);return t==_||t==T?n.size:zr(n).length},Le.snakeCase=Vs,Le.some=function(n,t,e){var r=Hi(n)?Ot:eo;return e&&ba(n,t,e)&&(t=o),r(n,sa(t,3))},Le.sortedIndex=function(n,t){return ro(n,t)},Le.sortedIndexBy=function(n,t,e){return oo(n,t,sa(e,2))},Le.sortedIndexOf=function(n,t){var e=null==n?0:n.length;if(e){var r=ro(n,t);if(r<e&&Fi(n[r],t))return r}return-1},Le.sortedLastIndex=function(n,t){return ro(n,t,!0)},Le.sortedLastIndexBy=function(n,t,e){return oo(n,t,sa(e,2),!0)},Le.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var e=ro(n,t,!0)-1;if(Fi(n[e],t))return e}return-1},Le.startCase=Xs,Le.startsWith=function(n,t,e){return n=vs(n),e=null==e?0:ir(gs(e),0,n.length),t=so(t),n.slice(e,e+t.length)==t},Le.subtract=Cu,Le.sum=function(n){return n&&n.length?Ft(n,ou):0},Le.sumBy=function(n,t){return n&&n.length?Ft(n,sa(t,2)):0},Le.template=function(n,t,e){var r=Le.templateSettings;e&&ba(n,t,e)&&(t=o),n=vs(n),t=_s({},t,r,Ko);var a,i,s=_s({},t.imports,r.imports,Ko),u=Ms(s),l=Ht(s,u),c=0,d=t.interpolate||yn,f="__p += '",p=An((t.escape||yn).source+"|"+d.source+"|"+(d===K?fn:yn).source+"|"+(t.evaluate||yn).source+"|$","g"),h="//# sourceURL="+(In.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Yn+"]")+"\n";n.replace(p,(function(t,e,r,o,s,u){return r||(r=o),f+=n.slice(c,u).replace(wn,Yt),e&&(a=!0,f+="' +\n__e("+e+") +\n'"),s&&(i=!0,f+="';\n"+s+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=u+t.length,t})),f+="';\n";var g=In.call(t,"variable")&&t.variable;if(g){if(cn.test(g))throw new _n("Invalid `variable` option passed into `_.template`")}else f="with (obj) {\n"+f+"\n}\n";f=(i?f.replace(U,""):f).replace(q,"$1").replace(G,"$1;"),f="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var $=Qs((function(){return xn(u,h+"return "+f).apply(o,l)}));if($.source=f,Ki($))throw $;return $},Le.times=function(n,t){if((n=gs(n))<1||n>d)return[];var e=p,r=be(n,p);t=sa(t),n-=p;for(var o=Ut(r,t);++e<n;)t(e);return o},Le.toFinite=hs,Le.toInteger=gs,Le.toLength=$s,Le.toLower=function(n){return vs(n).toLowerCase()},Le.toNumber=ms,Le.toSafeInteger=function(n){return n?ir(gs(n),-9007199254740991,d):0===n?n:0},Le.toString=vs,Le.toUpper=function(n){return vs(n).toUpperCase()},Le.trim=function(n,t,e){if((n=vs(n))&&(e||t===o))return qt(n);if(!n||!(t=so(t)))return n;var r=ie(n),a=ie(t);return yo(r,Zt(r,a),Vt(r,a)+1).join("")},Le.trimEnd=function(n,t,e){if((n=vs(n))&&(e||t===o))return n.slice(0,se(n)+1);if(!n||!(t=so(t)))return n;var r=ie(n);return yo(r,0,Vt(r,ie(t))+1).join("")},Le.trimStart=function(n,t,e){if((n=vs(n))&&(e||t===o))return n.replace(rn,"");if(!n||!(t=so(t)))return n;var r=ie(n);return yo(r,Zt(r,ie(t))).join("")},Le.truncate=function(n,t){var e=30,r="...";if(ts(t)){var a="separator"in t?t.separator:a;e="length"in t?gs(t.length):e,r="omission"in t?so(t.omission):r}var i=(n=vs(n)).length;if(Qt(n)){var s=ie(n);i=s.length}if(e>=i)return n;var u=e-ae(r);if(u<1)return r;var l=s?yo(s,0,u).join(""):n.slice(0,u);if(a===o)return l+r;if(s&&(u+=l.length-u),is(a)){if(n.slice(u).search(a)){var c,d=l;for(a.global||(a=An(a.source,vs(pn.exec(a))+"g")),a.lastIndex=0;c=a.exec(d);)var f=c.index;l=l.slice(0,f===o?u:f)}}else if(n.indexOf(so(a),u)!=u){var p=l.lastIndexOf(a);p>-1&&(l=l.slice(0,p))}return l+r},Le.unescape=function(n){return(n=vs(n))&&Z.test(n)?n.replace(H,ue):n},Le.uniqueId=function(n){var t=++zn;return vs(n)+t},Le.upperCase=Js,Le.upperFirst=Ks,Le.each=vi,Le.eachRight=yi,Le.first=Za,uu(Le,(bu={},vr(Le,(function(n,t){In.call(Le.prototype,t)||(bu[t]=n)})),bu),{chain:!1}),Le.VERSION="4.17.21",yt(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){Le[n].placeholder=Le})),yt(["drop","take"],(function(n,t){qe.prototype[n]=function(e){e=e===o?1:me(gs(e),0);var r=this.__filtered__&&!t?new qe(this):this.clone();return r.__filtered__?r.__takeCount__=be(e,r.__takeCount__):r.__views__.push({size:be(e,p),type:n+(r.__dir__<0?"Right":"")}),r},qe.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),yt(["filter","map","takeWhile"],(function(n,t){var e=t+1,r=1==e||3==e;qe.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:sa(n,3),type:e}),t.__filtered__=t.__filtered__||r,t}})),yt(["head","last"],(function(n,t){var e="take"+(t?"Right":"");qe.prototype[n]=function(){return this[e](1).value()[0]}})),yt(["initial","tail"],(function(n,t){var e="drop"+(t?"":"Right");qe.prototype[n]=function(){return this.__filtered__?new qe(this):this[e](1)}})),qe.prototype.compact=function(){return this.filter(ou)},qe.prototype.find=function(n){return this.filter(n).head()},qe.prototype.findLast=function(n){return this.reverse().find(n)},qe.prototype.invokeMap=Vr((function(n,t){return"function"==typeof n?new qe(this):this.map((function(e){return Sr(e,n,t)}))})),qe.prototype.reject=function(n){return this.filter(Ri(sa(n)))},qe.prototype.slice=function(n,t){n=gs(n);var e=this;return e.__filtered__&&(n>0||t<0)?new qe(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==o&&(e=(t=gs(t))<0?e.dropRight(-t):e.take(t-n)),e)},qe.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},qe.prototype.toArray=function(){return this.take(p)},vr(qe.prototype,(function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),a=Le[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);a&&(Le.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,u=t instanceof qe,l=s[0],c=u||Hi(t),d=function(n){var t=a.apply(Le,Tt([n],s));return r&&f?t[0]:t};c&&e&&"function"==typeof l&&1!=l.length&&(u=c=!1);var f=this.__chain__,p=!!this.__actions__.length,h=i&&!f,g=u&&!p;if(!i&&c){t=g?t:new qe(this);var $=n.apply(t,s);return $.__actions__.push({func:hi,args:[d],thisArg:o}),new Ue($,f)}return h&&g?n.apply(this,s):($=this.thru(d),h?r?$.value()[0]:$.value():$)})})),yt(["pop","push","shift","sort","splice","unshift"],(function(n){var t=Sn[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);Le.prototype[n]=function(){var n=arguments;if(r&&!this.__chain__){var o=this.value();return t.apply(Hi(o)?o:[],n)}return this[e]((function(e){return t.apply(Hi(e)?e:[],n)}))}})),vr(qe.prototype,(function(n,t){var e=Le[t];if(e){var r=e.name+"";In.call(Oe,r)||(Oe[r]=[]),Oe[r].push({name:t,func:e})}})),Oe[Lo(o,2).name]=[{name:"wrapper",func:o}],qe.prototype.clone=function(){var n=new qe(this.__wrapped__);return n.__actions__=Eo(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Eo(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Eo(this.__views__),n},qe.prototype.reverse=function(){if(this.__filtered__){var n=new qe(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},qe.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,e=Hi(n),r=t<0,o=e?n.length:0,a=function(n,t,e){for(var r=-1,o=e.length;++r<o;){var a=e[r],i=a.size;switch(a.type){case"drop":n+=i;break;case"dropRight":t-=i;break;case"take":t=be(t,n+i);break;case"takeRight":n=me(n,t-i)}}return{start:n,end:t}}(0,o,this.__views__),i=a.start,s=a.end,u=s-i,l=r?s:i-1,c=this.__iteratees__,d=c.length,f=0,p=be(u,this.__takeCount__);if(!e||!r&&o==u&&p==u)return po(n,this.__actions__);var h=[];n:for(;u--&&f<p;){for(var g=-1,$=n[l+=t];++g<d;){var m=c[g],b=m.iteratee,v=m.type,y=b($);if(2==v)$=y;else if(!y){if(1==v)continue n;break n}}h[f++]=$}return h},Le.prototype.at=gi,Le.prototype.chain=function(){return pi(this)},Le.prototype.commit=function(){return new Ue(this.value(),this.__chain__)},Le.prototype.next=function(){this.__values__===o&&(this.__values__=ps(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?o:this.__values__[this.__index__++]}},Le.prototype.plant=function(n){for(var t,e=this;e instanceof Fe;){var r=Ba(e);r.__index__=0,r.__values__=o,t?a.__wrapped__=r:t=r;var a=r;e=e.__wrapped__}return a.__wrapped__=n,t},Le.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof qe){var t=n;return this.__actions__.length&&(t=new qe(this)),(t=t.reverse()).__actions__.push({func:hi,args:[ti],thisArg:o}),new Ue(t,this.__chain__)}return this.thru(ti)},Le.prototype.toJSON=Le.prototype.valueOf=Le.prototype.value=function(){return po(this.__wrapped__,this.__actions__)},Le.prototype.first=Le.prototype.head,st&&(Le.prototype[st]=function(){return this}),Le}();it._=le,(r=function(){return le}.call(t,e,t,n))===o||(n.exports=r)}.call(this)},3830:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.isReady?e("div",{staticClass:"translations-app",attrs:{id:"app"}},[e("div",{staticClass:"container-fluid"},[e("div",{staticClass:"row justify-content-between align-items-center"},[e("Search",{on:{search:n.onSearch}}),n._v(" "),e("div",{staticClass:"translations-summary"},[e("span",[n._v(n._s(n.totalTranslations))]),n._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:n.totalMissingTranslations,expression:"totalMissingTranslations"}]},[n._v("\n -\n "),e("span",{staticClass:"missing"},[n._v(n._s(n.totalMissingTranslationsString))])])])],1),n._v(" "),e("div",{staticClass:"row"},[e("Sidebar",{attrs:{modal:this.$refs.transModal,principal:this.$refs.principal}}),n._v(" "),e("Principal",{ref:"principal",attrs:{modal:this.$refs.transModal}})],1)]),n._v(" "),e("PSModal",{ref:"transModal",attrs:{translations:n.translations}})],1):n._e()};r._withStripped=!0;var o=e(57274);const a=o.Z;e(59757);var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/pages/translations/components/app.vue";const s=i.exports},92181:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"col-md-8 mb-4",attrs:{id:"search"}},[e("form",{staticClass:"search-form",on:{submit:function(n){n.preventDefault()}}},[e("label",[n._v(n._s(n.trans("search_label")))]),n._v(" "),e("div",{staticClass:"input-group"},[e("PSTags",{ref:"psTags",attrs:{tags:n.tags,placeholder:n.trans("search_placeholder")},on:{tagChange:n.onSearch}}),n._v(" "),e("div",{staticClass:"input-group-append"},[e("PSButton",{staticClass:"search-button",attrs:{primary:!0},on:{click:n.onClick}},[e("i",{staticClass:"material-icons"},[n._v("search")]),n._v("\n "+n._s(n.trans("button_search"))+"\n ")])],1)],1)])])};r._withStripped=!0;var o=e(19390);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/pages/translations/components/header/search.vue";const s=i.exports},7900:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("transition",{attrs:{name:"fade"}},[n.principalReady?e("div",{staticClass:"col-sm-9 card"},[e("div",{staticClass:"p-3 translations-wrapper"},[n.noResult?e("PSAlert",{attrs:{"alert-type":"ALERT_TYPE_WARNING","has-close":!1}},[n._v("\n "+n._s(n.noResultInfo)+"\n ")]):e("div",{staticClass:"translations-catalog row p-0"},[n.searchActive?e("PSAlert",{staticClass:"col-sm-12",attrs:{"alert-type":"ALERT_TYPE_INFO","has-close":!1}},[n._v("\n "+n._s(n.searchInfo)+"\n ")]):n._e(),n._v(" "),e("div",{staticClass:"col-sm-8 pt-3"},[e("h3",{staticClass:"domain-info"},[e("span",[n._v(n._s(n.currentDomain))]),n._v(" "),e("span",[n._v(n._s(n.currentDomainTotalTranslations))]),n._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:n.currentDomainTotalMissingTranslations,expression:"currentDomainTotalMissingTranslations"}]},[n._v(" - "),e("span",{staticClass:"missing"},[n._v(n._s(n.currentDomainTotalMissingTranslationsString))])])])]),n._v(" "),e("div",{staticClass:"col-sm-4"},[e("PSPagination",{staticClass:"float-sm-right",attrs:{"current-index":n.currentPagination,"pages-count":n.pagesCount},on:{pageChanged:n.onPageChanged}})],1),n._v(" "),e("form",{staticClass:"col-sm-12",attrs:{method:"post",action:n.saveAction,isEdited:n.isEdited},on:{submit:function(t){return t.preventDefault(),n.saveTranslations(t)}}},[e("div",{staticClass:"row"},[e("div",{staticClass:"col-sm-12 mb-2"},[e("PSButton",{staticClass:"float-sm-right",attrs:{primary:!0,type:"submit"}},[n._v("\n "+n._s(n.trans("button_save"))+"\n ")])],1)]),n._v(" "),n._l(n.translationsCatalog,(function(t,r){return e("TranslationInput",{key:r,attrs:{id:r,translated:t,label:t.default,"extra-info":n.getDomain(t.tree_domain)},on:{editedAction:n.isEdited}})})),n._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-sm-12"},[e("PSButton",{staticClass:"float-sm-right mt-3",attrs:{primary:!0,type:"submit"}},[n._v("\n "+n._s(n.trans("button_save"))+"\n ")])],1)])],2),n._v(" "),e("div",{staticClass:"col-sm-12"},[e("PSPagination",{attrs:{"current-index":n.currentPagination,"pages-count":n.pagesCount},on:{pageChanged:n.onPageChanged}})],1)],1)],1)]):n._e()])};r._withStripped=!0;var o=e(75410);const a=o.Z;e(72939);var i=(0,e(51900).Z)(a,r,[],!1,null,"6a9c6094",null);i.options.__file="js/app/pages/translations/components/principal/index.vue";const s=i.exports},39494:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"form-group"},[e("label",[n._v(n._s(n.label))]),n._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:n.getTranslated,expression:"getTranslated"}],staticClass:"form-control",class:{missing:n.isMissing},attrs:{rows:"2"},domProps:{value:n.getTranslated},on:{input:function(t){t.target.composing||(n.getTranslated=t.target.value)}}}),n._v(" "),e("PSButton",{staticClass:"mt-3 float-sm-right",attrs:{primary:!1,ghost:""},on:{click:n.resetTranslation}},[n._v("\n "+n._s(n.trans("button_reset"))+"\n ")]),n._v(" "),e("small",{staticClass:"mt-3"},[n._v(n._s(n.extraInfo))])],1)};r._withStripped=!0;var o=e(96986);const a=o.Z;e(53552);var i=(0,e(51900).Z)(a,r,[],!1,null,"3e1a5070",null);i.options.__file="js/app/pages/translations/components/principal/translation-input.vue";const s=i.exports},36455:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"col-sm-3"},[e("div",{staticClass:"card p-3"},[n.treeReady?e("PSTree",{ref:"domainTree",attrs:{model:n.domainsTree,"class-name":"translationTree",translations:n.translations,"current-item":n.currentItem}}):e("PSSpinner")],1)])};r._withStripped=!0;var o=e(82114);const a=o.Z;e(9567);var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/pages/translations/components/sidebar/index.vue";const s=i.exports},70695:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"ps-alert alert",class:n.classObject,attrs:{role:"alert"}},[n.hasClose?e("button",{staticClass:"close",attrs:{type:"button","data-dismiss":"alert","aria-label":"Close"},on:{click:function(t){return t.stopPropagation(),n.onClick(t)}}},[e("span",{staticClass:"material-icons"},[n._v("close")])]):n._e(),n._v(" "),e("p",{staticClass:"alert-text"},[n._t("default")],2)])};r._withStripped=!0;var o=e(22178);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-alert.vue";const s=i.exports},98382:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement;return(n._self._c||t)("button",{staticClass:"btn",class:n.classObject,attrs:{type:"button"},on:{click:n.onClick}},[n._t("default")],2)};r._withStripped=!0;var o=e(11138);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-button.vue";const s=i.exports},93331:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"md-checkbox"},[e("label",[e("input",{directives:[{name:"model",rawName:"v-model",value:n.checked,expression:"checked"}],class:{indeterminate:n.isIndeterminate},attrs:{type:"checkbox",id:n.id},domProps:{checked:Array.isArray(n.checked)?n._i(n.checked,null)>-1:n.checked},on:{change:function(t){var e=n.checked,r=t.target,o=!!r.checked;if(Array.isArray(e)){var a=n._i(e,null);r.checked?a<0&&(n.checked=e.concat([null])):a>-1&&(n.checked=e.slice(0,a).concat(e.slice(a+1)))}else n.checked=o}}}),n._v(" "),e("i",{staticClass:"md-checkbox-control"}),n._v(" "),n._t("label")],2)])};r._withStripped=!0;var o=e(14012);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-checkbox.vue";const s=i.exports},67368:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"modal fade",attrs:{id:"ps-modal",tabindex:"-1",role:"dialog"}},[e("div",{staticClass:"modal-dialog",attrs:{role:"document"}},[e("div",{staticClass:"modal-content"},[e("div",{staticClass:"modal-header"},[n._m(0),n._v(" "),e("h4",{staticClass:"modal-title"},[n._v("\n "+n._s(n.translations.modal_title)+"\n ")])]),n._v(" "),e("div",{staticClass:"modal-body"},[n._v("\n "+n._s(n.translations.modal_content)+"\n ")]),n._v(" "),e("div",{staticClass:"modal-footer"},[e("PSButton",{staticClass:"btn-lg",attrs:{primary:"","data-dismiss":"modal"},on:{click:n.onSave}},[n._v("\n "+n._s(n.translations.button_save)+"\n ")]),n._v(" "),e("PSButton",{staticClass:"btn-lg",attrs:{ghost:"","data-dismiss":"modal"},on:{click:n.onLeave}},[n._v("\n "+n._s(n.translations.button_leave)+"\n ")])],1)])])])};r._withStripped=!0;var o=e(99507);const a=o.Z;e(74607);var i=(0,e(51900).Z)(a,r,[function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("button",{staticClass:"close",attrs:{type:"button","data-dismiss":"modal"}},[e("i",{staticClass:"material-icons"},[n._v("close")])])}],!1,null,"17ba2b4e",null);i.options.__file="js/app/widgets/ps-modal.vue";const s=i.exports},86842:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.displayPagination?e("nav",{staticClass:"mt-1 mx-auto"},[e("ul",{staticClass:"pagination",class:{multi:n.isMultiPagination}},[n.isMultiPagination?e("li",{staticClass:"page-item previous"},[e("a",{directives:[{name:"show",rawName:"v-show",value:n.activeLeftArrow,expression:"activeLeftArrow"}],staticClass:"float-left page-link",attrs:{href:"#"},on:{click:function(t){return n.prev(t)}}},[e("span",{staticClass:"sr-only"},[n._v("Previous")])])]):n._e(),n._v(" "),n._l(n.pagesCount,(function(t){return e("li",{key:t,staticClass:"page-item",class:{active:n.checkCurrentIndex(t)}},[n.showIndex(t)?e("a",{staticClass:"page-link",class:{"pl-0":n.showFirstDots(t),"pr-0":n.showLastDots(t)},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),n.changePage(t)}}},[n.isMultiPagination?e("span",{directives:[{name:"show",rawName:"v-show",value:n.showFirstDots(t),expression:"showFirstDots(index)"}]},[n._v("...")]):n._e(),n._v("\n "+n._s(t)+"\n "),n.isMultiPagination?e("span",{directives:[{name:"show",rawName:"v-show",value:n.showLastDots(t),expression:"showLastDots(index)"}]},[n._v("...")]):n._e()]):n._e()])})),n._v(" "),n.isMultiPagination?e("li",{staticClass:"page-item next"},[e("a",{directives:[{name:"show",rawName:"v-show",value:n.activeRightArrow,expression:"activeRightArrow"}],staticClass:"float-left page-link",attrs:{href:"#"},on:{click:function(t){return n.next(t)}}},[e("span",{staticClass:"sr-only"},[n._v("Next")])])]):n._e()],2)]):n._e()};r._withStripped=!0;var o=e(45260);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-pagination.vue";const s=i.exports},63856:(n,t,e)=>{"use strict";e.r(t),e.d(t,{default:()=>a});var r=function(){var n=this.$createElement;return(this._self._c||n)("div",{staticClass:"ps-spinner"})};r._withStripped=!0;var o=(0,e(51900).Z)({},r,[],!1,null,null,null);o.options.__file="js/app/widgets/ps-spinner.vue";const a=o.exports},75576:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"tags-input search-input search d-flex flex-wrap",class:{"search-with-icon":n.hasIcon},on:{click:function(t){return n.focus()}}},[e("div",{staticClass:"tags-wrapper"},n._l(n.tags,(function(t,r){return e("span",{key:r,staticClass:"tag"},[n._v(n._s(t)),e("i",{staticClass:"material-icons",on:{click:function(t){return n.close(r)}}},[n._v("close")])])})),0),n._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:n.tag,expression:"tag"}],ref:"tags",staticClass:"form-control input",attrs:{placeholder:n.placeholderToDisplay,type:"text",size:n.inputSize},domProps:{value:n.tag},on:{keyup:n.onKeyUp,keydown:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.add(n.tag)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:(t.stopPropagation(),n.remove())}],input:function(t){t.target.composing||(n.tag=t.target.value)}}})])};r._withStripped=!0;var o=e(60994);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-tags.vue";const s=i.exports},37862:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"ps-tree-items",class:{className:n.className}},[e("div",{staticClass:"d-flex tree-name",class:{active:n.active,disable:n.model.disable},on:{click:n.clickElement}},[e("button",{staticClass:"btn btn-text",class:[{hidden:n.isHidden},n.chevronStatus]},[n.translations?e("span",{staticClass:"sr-only"},[n._v(n._s(this.model.open?n.translations.reduce:n.translations.expand))]):n._e()]),n._v(" "),n.hasCheckbox?e("PSCheckbox",{ref:n.model.name,attrs:{id:n.id,model:n.model},on:{checked:n.onCheck}}):n._e(),n._v(" "),e("span",{staticClass:"tree-label",class:{warning:n.isWarning}},[n._v(n._s(n.model.name))]),n._v(" "),n.displayExtraLabel?e("span",{staticClass:"tree-extra-label d-sm-none d-xl-inline-block"},[n._v(n._s(n.getExtraLabel))]):n._e(),n._v(" "),n.displayExtraLabel?e("span",{staticClass:"tree-extra-label-mini d-xl-none"},[n._v(n._s(this.model.extraLabel))]):n._e()],1),n._v(" "),n.isFolder?e("ul",{directives:[{name:"show",rawName:"v-show",value:n.open,expression:"open"}],staticClass:"tree"},n._l(n.model.children,(function(t,r){return e("li",{key:r,staticClass:"tree-item",class:{disable:n.model.disable}},[e("PSTreeItem",{ref:t.id,refInFor:!0,class:n.className,attrs:{"has-checkbox":n.hasCheckbox,model:t,label:t.name,translations:n.translations,"current-item":n.currentItem},on:{checked:n.onCheck,setCurrentElement:n.setCurrentElement}})],1)})),0):n._e()])};r._withStripped=!0;var o=e(88513);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-tree/ps-tree-item.vue";const s=i.exports},76659:(n,t,e)=>{"use strict";e.r(t),e.d(t,{__esModule:()=>o.X,default:()=>s});var r=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"ps-tree"},[e("div",{staticClass:"mb-3 tree-header"},[e("button",{staticClass:"btn btn-text text-uppercase pointer",on:{click:n.expand}},[e("i",{staticClass:"material-icons"},[n._v("keyboard_arrow_down")]),n._v(" "),n.translations?e("span",[n._v(n._s(n.translations.expand))]):n._e()]),n._v(" "),e("button",{staticClass:"btn btn-text float-right text-uppercase pointer",on:{click:n.reduce}},[e("i",{staticClass:"material-icons"},[n._v("keyboard_arrow_up")]),n._v(" "),n.translations?e("span",[n._v(n._s(n.translations.reduce))]):n._e()])]),n._v(" "),e("ul",{staticClass:"tree",class:n.className},n._l(n.model,(function(t,r){return e("li",{key:r},[e("PSTreeItem",{ref:"item",refInFor:!0,attrs:{"has-checkbox":n.hasCheckbox,model:t,label:t.name,translations:n.translations,"current-item":n.currentItem},on:{checked:n.onCheck,setCurrentElement:n.setCurrentElement}})],1)})),0)])};r._withStripped=!0;var o=e(41134);const a=o.Z;var i=(0,e(51900).Z)(a,r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-tree/ps-tree.vue";const s=i.exports},51900:(n,t,e)=>{"use strict";function r(n,t,e,r,o,a,i,s){var u,l="function"==typeof n?n.options:n;if(t&&(l.render=t,l.staticRenderFns=e,l._compiled=!0),r&&(l.functional=!0),a&&(l._scopeId="data-v-"+a),i?(u=function(n){(n=n||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(n=__VUE_SSR_CONTEXT__),o&&o.call(this,n),n&&n._registeredComponents&&n._registeredComponents.add(i)},l._ssrRegister=u):o&&(u=s?function(){o.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:o),u)if(l.functional){l._injectStyles=u;var c=l.render;l.render=function(n,t){return u.call(t),c(n,t)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,u):[u]}return{exports:n,options:l}}e.d(t,{Z:()=>r})},74104:(n,t,e)=>{"use strict";function r(n){this.state=2,this.value=void 0,this.deferred=[];var t=this;try{n((function(n){t.resolve(n)}),(function(n){t.reject(n)}))}catch(n){t.reject(n)}}e.r(t),e.d(t,{default:()=>W,Url:()=>S,Http:()=>U,Resource:()=>q}),r.reject=function(n){return new r((function(t,e){e(n)}))},r.resolve=function(n){return new r((function(t,e){t(n)}))},r.all=function(n){return new r((function(t,e){var o=0,a=[];function i(e){return function(r){a[e]=r,(o+=1)===n.length&&t(a)}}0===n.length&&t(a);for(var s=0;s<n.length;s+=1)r.resolve(n[s]).then(i(s),e)}))},r.race=function(n){return new r((function(t,e){for(var o=0;o<n.length;o+=1)r.resolve(n[o]).then(t,e)}))};var o=r.prototype;function a(n,t){this.promise=n instanceof Promise?n:new Promise(n.bind(t)),this.context=t}o.resolve=function(n){var t=this;if(2===t.state){if(n===t)throw new TypeError("Promise settled with itself.");var e=!1;try{var r=n&&n.then;if(null!==n&&"object"==typeof n&&"function"==typeof r)return void r.call(n,(function(n){e||t.resolve(n),e=!0}),(function(n){e||t.reject(n),e=!0}))}catch(n){return void(e||t.reject(n))}t.state=0,t.value=n,t.notify()}},o.reject=function(n){var t=this;if(2===t.state){if(n===t)throw new TypeError("Promise settled with itself.");t.state=1,t.value=n,t.notify()}},o.notify=function(){var n=this;s((function(){if(2!==n.state)for(;n.deferred.length;){var t=n.deferred.shift(),e=t[0],r=t[1],o=t[2],a=t[3];try{0===n.state?o("function"==typeof e?e.call(void 0,n.value):n.value):1===n.state&&("function"==typeof r?o(r.call(void 0,n.value)):a(n.value))}catch(n){a(n)}}}),undefined)},o.then=function(n,t){var e=this;return new r((function(r,o){e.deferred.push([n,t,r,o]),e.notify()}))},o.catch=function(n){return this.then(void 0,n)},"undefined"==typeof Promise&&(window.Promise=r),a.all=function(n,t){return new a(Promise.all(n),t)},a.resolve=function(n,t){return new a(Promise.resolve(n),t)},a.reject=function(n,t){return new a(Promise.reject(n),t)},a.race=function(n,t){return new a(Promise.race(n),t)};var i=a.prototype;i.bind=function(n){return this.context=n,this},i.then=function(n,t){return n&&n.bind&&this.context&&(n=n.bind(this.context)),t&&t.bind&&this.context&&(t=t.bind(this.context)),new a(this.promise.then(n,t),this.context)},i.catch=function(n){return n&&n.bind&&this.context&&(n=n.bind(this.context)),new a(this.promise.catch(n),this.context)},i.finally=function(n){return this.then((function(t){return n.call(this),t}),(function(t){return n.call(this),Promise.reject(t)}))};var s,u={}.hasOwnProperty,l=[].slice,c=!1,d="undefined"!=typeof window;function f(n){return n?n.replace(/^\s*|\s*$/g,""):""}function p(n){return n?n.toLowerCase():""}var h=Array.isArray;function g(n){return"string"==typeof n}function $(n){return"function"==typeof n}function m(n){return null!==n&&"object"==typeof n}function b(n){return m(n)&&Object.getPrototypeOf(n)==Object.prototype}function v(n,t,e){var r=a.resolve(n);return arguments.length<2?r:r.then(t,e)}function y(n,t,e){return $(e=e||{})&&(e=e.call(t)),x(n.bind({$vm:t,$options:e}),n,{$options:e})}function w(n,t){var e,r;if(h(n))for(e=0;e<n.length;e++)t.call(n[e],n[e],e);else if(m(n))for(r in n)u.call(n,r)&&t.call(n[r],n[r],r);return n}var _=Object.assign||function(n){var t=l.call(arguments,1);return t.forEach((function(t){k(n,t)})),n};function x(n){var t=l.call(arguments,1);return t.forEach((function(t){k(n,t,!0)})),n}function k(n,t,e){for(var r in t)e&&(b(t[r])||h(t[r]))?(b(t[r])&&!b(n[r])&&(n[r]={}),h(t[r])&&!h(n[r])&&(n[r]=[]),k(n[r],t[r],e)):void 0!==t[r]&&(n[r]=t[r])}function C(n){return null!=n}function A(n){return";"===n||"&"===n||"?"===n}function T(n,t,e){return t="+"===n||"#"===n?E(t):encodeURIComponent(t),e?encodeURIComponent(e)+"="+t:t}function E(n){return n.split(/(%[0-9A-Fa-f]{2})/g).map((function(n){return/%[0-9A-Fa-f]/.test(n)||(n=encodeURI(n)),n})).join("")}function S(n,t){var e,r=this||{},o=n;return g(n)&&(o={url:n,params:t}),o=x({},S.options,r.$options,o),S.transforms.forEach((function(n){g(n)&&(n=S.transform[n]),$(n)&&(e=function(n,t,e){return function(r){return n.call(e,r,t)}}(n,e,r.$vm))})),e(o)}function O(n,t,e){var r,o=h(t),a=b(t);w(t,(function(t,i){r=m(t)||h(t),e&&(i=e+"["+(a||r?i:"")+"]"),!e&&o?n.add(t.name,t.value):r?O(n,t,i):n.add(i,t)}))}function j(n){return new a((function(t){var e=new XDomainRequest,r=function(r){var o=r.type,a=0;"load"===o?a=200:"error"===o&&(a=500),t(n.respondWith(e.responseText,{status:a}))};n.abort=function(){return e.abort()},e.open(n.method,n.getUrl()),n.timeout&&(e.timeout=n.timeout),e.onload=r,e.onabort=r,e.onerror=r,e.ontimeout=r,e.onprogress=function(){},e.send(n.getBody())}))}S.options={url:"",root:null,params:{}},S.transform={template:function(n){var t=[],e=function(n,t,e){var r=function(n){var t=["+","#",".","/",";","?","&"],e=[];return{vars:e,expand:function(r){return n.replace(/\{([^{}]+)\}|([^{}]+)/g,(function(n,o,a){if(o){var i=null,s=[];if(-1!==t.indexOf(o.charAt(0))&&(i=o.charAt(0),o=o.substr(1)),o.split(/,/g).forEach((function(n){var t=/([^:*]*)(?::(\d+)|(\*))?/.exec(n);s.push.apply(s,function(n,t,e,r){var o=n[e],a=[];if(C(o)&&""!==o)if("string"==typeof o||"number"==typeof o||"boolean"==typeof o)o=o.toString(),r&&"*"!==r&&(o=o.substring(0,parseInt(r,10))),a.push(T(t,o,A(t)?e:null));else if("*"===r)Array.isArray(o)?o.filter(C).forEach((function(n){a.push(T(t,n,A(t)?e:null))})):Object.keys(o).forEach((function(n){C(o[n])&&a.push(T(t,o[n],n))}));else{var i=[];Array.isArray(o)?o.filter(C).forEach((function(n){i.push(T(t,n))})):Object.keys(o).forEach((function(n){C(o[n])&&(i.push(encodeURIComponent(n)),i.push(T(t,o[n].toString())))})),A(t)?a.push(encodeURIComponent(e)+"="+i.join(",")):0!==i.length&&a.push(i.join(","))}else";"===t?a.push(encodeURIComponent(e)):""!==o||"&"!==t&&"?"!==t?""===o&&a.push(""):a.push(encodeURIComponent(e)+"=");return a}(r,i,t[1],t[2]||t[3])),e.push(t[1])})),i&&"+"!==i){var u=",";return"?"===i?u="&":"#"!==i&&(u=i),(0!==s.length?i:"")+s.join(u)}return s.join(",")}return E(a)}))}}}(n),o=r.expand(t);return e&&e.push.apply(e,r.vars),o}(n.url,n.params,t);return t.forEach((function(t){delete n.params[t]})),e},query:function(n,t){var e=Object.keys(S.options.params),r={},o=t(n);return w(n.params,(function(n,t){-1===e.indexOf(t)&&(r[t]=n)})),(r=S.params(r))&&(o+=(-1==o.indexOf("?")?"?":"&")+r),o},root:function(n,t){var e,r=t(n);return g(n.root)&&!/^(https?:)?\//.test(r)&&("/",r=((e=n.root)?e.replace(new RegExp("[/]+$"),""):e)+"/"+r),r}},S.transforms=["template","query","root"],S.params=function(n){var t=[],e=encodeURIComponent;return t.add=function(n,t){$(t)&&(t=t()),null===t&&(t=""),this.push(e(n)+"="+e(t))},O(t,n),t.join("&").replace(/%20/g,"+")},S.parse=function(n){var t=document.createElement("a");return document.documentMode&&(t.href=n,n=t.href),t.href=n,{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",port:t.port,host:t.host,hostname:t.hostname,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):""}};var M=d&&"withCredentials"in new XMLHttpRequest;function P(n){return new a((function(t){var e,r,o=n.jsonp||"callback",a=n.jsonpCallback||"_jsonp"+Math.random().toString(36).substr(2),i=null;e=function(e){var o=e.type,s=0;"load"===o&&null!==i?s=200:"error"===o&&(s=500),s&&window[a]&&(delete window[a],document.body.removeChild(r)),t(n.respondWith(i,{status:s}))},window[a]=function(n){i=JSON.stringify(n)},n.abort=function(){e({type:"abort"})},n.params[o]=a,n.timeout&&setTimeout(n.abort,n.timeout),(r=document.createElement("script")).src=n.getUrl(),r.type="text/javascript",r.async=!0,r.onload=e,r.onerror=e,document.body.appendChild(r)}))}function I(n){return new a((function(t){var e=new XMLHttpRequest,r=function(r){var o=n.respondWith("response"in e?e.response:e.responseText,{status:1223===e.status?204:e.status,statusText:1223===e.status?"No Content":f(e.statusText)});w(f(e.getAllResponseHeaders()).split("\n"),(function(n){o.headers.append(n.slice(0,n.indexOf(":")),n.slice(n.indexOf(":")+1))})),t(o)};n.abort=function(){return e.abort()},e.open(n.method,n.getUrl(),!0),n.timeout&&(e.timeout=n.timeout),n.responseType&&"responseType"in e&&(e.responseType=n.responseType),(n.withCredentials||n.credentials)&&(e.withCredentials=!0),n.crossOrigin||n.headers.set("X-Requested-With","XMLHttpRequest"),$(n.progress)&&"GET"===n.method&&e.addEventListener("progress",n.progress),$(n.downloadProgress)&&e.addEventListener("progress",n.downloadProgress),$(n.progress)&&/^(POST|PUT)$/i.test(n.method)&&e.upload.addEventListener("progress",n.progress),$(n.uploadProgress)&&e.upload&&e.upload.addEventListener("progress",n.uploadProgress),n.headers.forEach((function(n,t){e.setRequestHeader(t,n)})),e.onload=r,e.onabort=r,e.onerror=r,e.ontimeout=r,e.send(n.getBody())}))}function z(n){var t=e(76608);return new a((function(e){var r,o=n.getUrl(),a=n.getBody(),i=n.method,s={};n.headers.forEach((function(n,t){s[t]=n})),t(o,{body:a,method:i,headers:s}).then(r=function(t){var r=n.respondWith(t.body,{status:t.statusCode,statusText:f(t.statusMessage)});w(t.headers,(function(n,t){r.headers.set(t,n)})),e(r)},(function(n){return r(n.response)}))}))}function R(n){return(n.client||(d?I:z))(n)}var D=function(n){var t=this;this.map={},w(n,(function(n,e){return t.append(e,n)}))};function N(n,t){return Object.keys(n).reduce((function(n,e){return p(t)===p(e)?e:n}),null)}D.prototype.has=function(n){return null!==N(this.map,n)},D.prototype.get=function(n){var t=this.map[N(this.map,n)];return t?t.join():null},D.prototype.getAll=function(n){return this.map[N(this.map,n)]||[]},D.prototype.set=function(n,t){this.map[function(n){if(/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(n))throw new TypeError("Invalid character in header field name");return f(n)}(N(this.map,n)||n)]=[f(t)]},D.prototype.append=function(n,t){var e=this.map[N(this.map,n)];e?e.push(f(t)):this.set(n,t)},D.prototype.delete=function(n){delete this.map[N(this.map,n)]},D.prototype.deleteAll=function(){this.map={}},D.prototype.forEach=function(n,t){var e=this;w(this.map,(function(r,o){w(r,(function(r){return n.call(t,r,o,e)}))}))};var L=function(n,t){var e=t.url,r=t.headers,o=t.status,i=t.statusText;this.url=e,this.ok=o>=200&&o<300,this.status=o||0,this.statusText=i||"",this.headers=new D(r),this.body=n,g(n)?this.bodyText=n:"undefined"!=typeof Blob&&n instanceof Blob&&(this.bodyBlob=n,function(n){return 0===n.type.indexOf("text")||-1!==n.type.indexOf("json")}(n)&&(this.bodyText=function(n){return new a((function(t){var e=new FileReader;e.readAsText(n),e.onload=function(){t(e.result)}}))}(n)))};L.prototype.blob=function(){return v(this.bodyBlob)},L.prototype.text=function(){return v(this.bodyText)},L.prototype.json=function(){return v(this.text(),(function(n){return JSON.parse(n)}))},Object.defineProperty(L.prototype,"data",{get:function(){return this.body},set:function(n){this.body=n}});var B=function(n){var t;this.body=null,this.params={},_(this,n,{method:(t=n.method||"GET",t?t.toUpperCase():"")}),this.headers instanceof D||(this.headers=new D(this.headers))};B.prototype.getUrl=function(){return S(this)},B.prototype.getBody=function(){return this.body},B.prototype.respondWith=function(n,t){return new L(n,_(t||{},{url:this.getUrl()}))};var F={"Content-Type":"application/json;charset=utf-8"};function U(n){var t=this||{},e=function(n){var t=[R],e=[];function r(r){for(;t.length;){var o=t.pop();if($(o)){var i=void 0,s=void 0;if(m(i=o.call(n,r,(function(n){return s=n}))||s))return new a((function(t,r){e.forEach((function(t){i=v(i,(function(e){return t.call(n,e)||e}),r)})),v(i,t,r)}),n);$(i)&&e.unshift(i)}else u="Invalid interceptor of type "+typeof o+", must be a function","undefined"!=typeof console&&c&&console.warn("[VueResource warn]: "+u)}var u}return m(n)||(n=null),r.use=function(n){t.push(n)},r}(t.$vm);return function(n){l.call(arguments,1).forEach((function(t){for(var e in t)void 0===n[e]&&(n[e]=t[e])}))}(n||{},t.$options,U.options),U.interceptors.forEach((function(n){g(n)&&(n=U.interceptor[n]),$(n)&&e.use(n)})),e(new B(n)).then((function(n){return n.ok?n:a.reject(n)}),(function(n){var t;return n instanceof Error&&(t=n,"undefined"!=typeof console&&console.error(t)),a.reject(n)}))}function q(n,t,e,r){var o=this||{},a={};return w(e=_({},q.actions,e),(function(e,i){e=x({url:n,params:_({},t)},r,e),a[i]=function(){return(o.$http||U)(G(e,arguments))}})),a}function G(n,t){var e,r=_({},n),o={};switch(t.length){case 2:o=t[0],e=t[1];break;case 1:/^(POST|PUT|PATCH)$/i.test(r.method)?e=t[0]:o=t[0];break;case 0:break;default:throw"Expected up to 2 arguments [params, body], got "+t.length+" arguments"}return r.body=e,r.params=_({},r.params,o),r}function H(n){var t,e,r;H.installed||(e=(t=n).config,r=t.nextTick,s=r,c=e.debug||!e.silent,n.url=S,n.http=U,n.resource=q,n.Promise=a,Object.defineProperties(n.prototype,{$url:{get:function(){return y(n.url,this,this.$options.url)}},$http:{get:function(){return y(n.http,this,this.$options.http)}},$resource:{get:function(){return n.resource.bind(this)}},$promise:{get:function(){var t=this;return function(e){return new n.Promise(e,t)}}}}))}U.options={},U.headers={put:F,post:F,patch:F,delete:F,common:{Accept:"application/json, text/plain, */*"},custom:{}},U.interceptor={before:function(n){$(n.before)&&n.before.call(this,n)},method:function(n){n.emulateHTTP&&/^(PUT|PATCH|DELETE)$/i.test(n.method)&&(n.headers.set("X-HTTP-Method-Override",n.method),n.method="POST")},jsonp:function(n){"JSONP"==n.method&&(n.client=P)},json:function(n){var t=n.headers.get("Content-Type")||"";return m(n.body)&&0===t.indexOf("application/json")&&(n.body=JSON.stringify(n.body)),function(n){return n.bodyText?v(n.text(),(function(t){var e,r;if(0===(n.headers.get("Content-Type")||"").indexOf("application/json")||(r=(e=t).match(/^\s*(\[|\{)/))&&{"[":/]\s*$/,"{":/}\s*$/}[r[1]].test(e))try{n.body=JSON.parse(t)}catch(t){n.body=null}else n.body=t;return n})):n}},form:function(n){var t;t=n.body,"undefined"!=typeof FormData&&t instanceof FormData?n.headers.delete("Content-Type"):m(n.body)&&n.emulateJSON&&(n.body=S.params(n.body),n.headers.set("Content-Type","application/x-www-form-urlencoded"))},header:function(n){w(_({},U.headers.common,n.crossOrigin?{}:U.headers.custom,U.headers[p(n.method)]),(function(t,e){n.headers.has(e)||n.headers.set(e,t)}))},cors:function(n){if(d){var t=S.parse(location.href),e=S.parse(n.getUrl());e.protocol===t.protocol&&e.host===t.host||(n.crossOrigin=!0,n.emulateHTTP=!1,M||(n.client=j))}}},U.interceptors=["before","method","jsonp","json","form","header","cors"],["get","delete","head","jsonp"].forEach((function(n){U[n]=function(t,e){return this(_(e||{},{url:t,method:n}))}})),["post","put","patch"].forEach((function(n){U[n]=function(t,e,r){return this(_(r||{},{url:t,method:n,body:e}))}})),q.actions={get:{method:"GET"},save:{method:"POST"},query:{method:"GET"},update:{method:"PUT"},remove:{method:"DELETE"},delete:{method:"DELETE"}},"undefined"!=typeof window&&window.Vue&&window.Vue.use(H);const W=H},78345:(n,t,e)=>{"use strict";function r(n){return Object.prototype.toString.call(n).indexOf("Error")>-1}e.r(t),e.d(t,{default:()=>In});var o={name:"router-view",functional:!0,props:{name:{type:String,default:"default"}},render:function(n,t){var e=t.props,r=t.children,o=t.parent,a=t.data;a.routerView=!0;for(var i=o.$createElement,s=e.name,u=o.$route,l=o._routerViewCache||(o._routerViewCache={}),c=0,d=!1;o&&o._routerRoot!==o;)o.$vnode&&o.$vnode.data.routerView&&c++,o._inactive&&(d=!0),o=o.$parent;if(a.routerViewDepth=c,d)return i(l[s],a,r);var f=u.matched[c];if(!f)return l[s]=null,i();var p=l[s]=f.components[s];a.registerRouteInstance=function(n,t){var e=f.instances[s];(t&&e!==n||!t&&e===n)&&(f.instances[s]=t)},(a.hook||(a.hook={})).prepatch=function(n,t){f.instances[s]=t.componentInstance};var h=a.props=function(n,t){switch(typeof t){case"undefined":return;case"object":return t;case"function":return t(n);case"boolean":return t?n.params:void 0}}(u,f.props&&f.props[s]);if(h){h=a.props=function(n,t){for(var e in t)n[e]=t[e];return n}({},h);var g=a.attrs=a.attrs||{};for(var $ in h)p.props&&$ in p.props||(g[$]=h[$],delete h[$])}return i(p,a,r)}},a=/[!'()*]/g,i=function(n){return"%"+n.charCodeAt(0).toString(16)},s=/%2C/g,u=function(n){return encodeURIComponent(n).replace(a,i).replace(s,",")},l=decodeURIComponent;function c(n){var t={};return(n=n.trim().replace(/^(\?|#|&)/,""))?(n.split("&").forEach((function(n){var e=n.replace(/\+/g," ").split("="),r=l(e.shift()),o=e.length>0?l(e.join("=")):null;void 0===t[r]?t[r]=o:Array.isArray(t[r])?t[r].push(o):t[r]=[t[r],o]})),t):t}function d(n){var t=n?Object.keys(n).map((function(t){var e=n[t];if(void 0===e)return"";if(null===e)return u(t);if(Array.isArray(e)){var r=[];return e.forEach((function(n){void 0!==n&&(null===n?r.push(u(t)):r.push(u(t)+"="+u(n)))})),r.join("&")}return u(t)+"="+u(e)})).filter((function(n){return n.length>0})).join("&"):null;return t?"?"+t:""}var f=/\/?$/;function p(n,t,e,r){var o=r&&r.options.stringifyQuery,a=t.query||{};try{a=h(a)}catch(n){}var i={name:t.name||n&&n.name,meta:n&&n.meta||{},path:t.path||"/",hash:t.hash||"",query:a,params:t.params||{},fullPath:m(t,o),matched:n?$(n):[]};return e&&(i.redirectedFrom=m(e,o)),Object.freeze(i)}function h(n){if(Array.isArray(n))return n.map(h);if(n&&"object"==typeof n){var t={};for(var e in n)t[e]=h(n[e]);return t}return n}var g=p(null,{path:"/"});function $(n){for(var t=[];n;)t.unshift(n),n=n.parent;return t}function m(n,t){var e=n.path,r=n.query;void 0===r&&(r={});var o=n.hash;return void 0===o&&(o=""),(e||"/")+(t||d)(r)+o}function b(n,t){return t===g?n===t:!!t&&(n.path&&t.path?n.path.replace(f,"")===t.path.replace(f,"")&&n.hash===t.hash&&v(n.query,t.query):!(!n.name||!t.name)&&n.name===t.name&&n.hash===t.hash&&v(n.query,t.query)&&v(n.params,t.params))}function v(n,t){if(void 0===n&&(n={}),void 0===t&&(t={}),!n||!t)return n===t;var e=Object.keys(n),r=Object.keys(t);return e.length===r.length&&e.every((function(e){var r=n[e],o=t[e];return"object"==typeof r&&"object"==typeof o?v(r,o):String(r)===String(o)}))}var y,w={name:"router-link",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:[String,Array],default:"click"}},render:function(n){var t=this,e=this.$router,r=this.$route,o=e.resolve(this.to,r,this.append),a=o.location,i=o.route,s=o.href,u={},l=e.options.linkActiveClass,c=e.options.linkExactActiveClass,d=null==l?"router-link-active":l,h=null==c?"router-link-exact-active":c,g=null==this.activeClass?d:this.activeClass,$=null==this.exactActiveClass?h:this.exactActiveClass,m=a.path?p(null,a,null,e):i;u[$]=b(r,m),u[g]=this.exact?u[$]:function(n,t){return 0===n.path.replace(f,"/").indexOf(t.path.replace(f,"/"))&&(!t.hash||n.hash===t.hash)&&function(n,t){for(var e in t)if(!(e in n))return!1;return!0}(n.query,t.query)}(r,m);var v=function(n){_(n)&&(t.replace?e.replace(a):e.push(a))},w={click:_};Array.isArray(this.event)?this.event.forEach((function(n){w[n]=v})):w[this.event]=v;var k={class:u};if("a"===this.tag)k.on=w,k.attrs={href:s};else{var C=x(this.$slots.default);if(C){C.isStatic=!1;var A=y.util.extend;(C.data=A({},C.data)).on=w,(C.data.attrs=A({},C.data.attrs)).href=s}else k.on=w}return n(this.tag,k,this.$slots.default)}};function _(n){if(!(n.metaKey||n.altKey||n.ctrlKey||n.shiftKey||n.defaultPrevented||void 0!==n.button&&0!==n.button)){if(n.currentTarget&&n.currentTarget.getAttribute){var t=n.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return n.preventDefault&&n.preventDefault(),!0}}function x(n){if(n)for(var t,e=0;e<n.length;e++){if("a"===(t=n[e]).tag)return t;if(t.children&&(t=x(t.children)))return t}}var k="undefined"!=typeof window;function C(n,t,e){var r=n.charAt(0);if("/"===r)return n;if("?"===r||"#"===r)return t+n;var o=t.split("/");e&&o[o.length-1]||o.pop();for(var a=n.replace(/^\//,"").split("/"),i=0;i<a.length;i++){var s=a[i];".."===s?o.pop():"."!==s&&o.push(s)}return""!==o[0]&&o.unshift(""),o.join("/")}function A(n){return n.replace(/\/\//g,"/")}var T=Array.isArray||function(n){return"[object Array]"==Object.prototype.toString.call(n)},E=function n(t,e,r){return T(e)||(r=e||r,e=[]),r=r||{},t instanceof RegExp?function(n,t){var e=n.source.match(/\((?!\?)/g);if(e)for(var r=0;r<e.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return N(n,t)}(t,e):T(t)?function(t,e,r){for(var o=[],a=0;a<t.length;a++)o.push(n(t[a],e,r).source);return N(new RegExp("(?:"+o.join("|")+")",L(r)),e)}(t,e,r):function(n,t,e){return B(P(n,e),t,e)}(t,e,r)},S=P,O=z,j=B,M=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function P(n,t){for(var e,r=[],o=0,a=0,i="",s=t&&t.delimiter||"/";null!=(e=M.exec(n));){var u=e[0],l=e[1],c=e.index;if(i+=n.slice(a,c),a=c+u.length,l)i+=l[1];else{var d=n[a],f=e[2],p=e[3],h=e[4],g=e[5],$=e[6],m=e[7];i&&(r.push(i),i="");var b=null!=f&&null!=d&&d!==f,v="+"===$||"*"===$,y="?"===$||"*"===$,w=e[2]||s,_=h||g;r.push({name:p||o++,prefix:f||"",delimiter:w,optional:y,repeat:v,partial:b,asterisk:!!m,pattern:_?D(_):m?".*":"[^"+R(w)+"]+?"})}}return a<n.length&&(i+=n.substr(a)),i&&r.push(i),r}function I(n){return encodeURI(n).replace(/[\/?#]/g,(function(n){return"%"+n.charCodeAt(0).toString(16).toUpperCase()}))}function z(n){for(var t=new Array(n.length),e=0;e<n.length;e++)"object"==typeof n[e]&&(t[e]=new RegExp("^(?:"+n[e].pattern+")$"));return function(e,r){for(var o="",a=e||{},i=(r||{}).pretty?I:encodeURIComponent,s=0;s<n.length;s++){var u=n[s];if("string"!=typeof u){var l,c=a[u.name];if(null==c){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(T(c)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(c)+"`");if(0===c.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var d=0;d<c.length;d++){if(l=i(c[d]),!t[s].test(l))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(l)+"`");o+=(0===d?u.prefix:u.delimiter)+l}}else{if(l=u.asterisk?encodeURI(c).replace(/[?#]/g,(function(n){return"%"+n.charCodeAt(0).toString(16).toUpperCase()})):i(c),!t[s].test(l))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+l+'"');o+=u.prefix+l}}else o+=u}return o}}function R(n){return n.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function D(n){return n.replace(/([=!:$\/()])/g,"\\$1")}function N(n,t){return n.keys=t,n}function L(n){return n.sensitive?"":"i"}function B(n,t,e){T(t)||(e=t||e,t=[]);for(var r=(e=e||{}).strict,o=!1!==e.end,a="",i=0;i<n.length;i++){var s=n[i];if("string"==typeof s)a+=R(s);else{var u=R(s.prefix),l="(?:"+s.pattern+")";t.push(s),s.repeat&&(l+="(?:"+u+l+")*"),a+=l=s.optional?s.partial?u+"("+l+")?":"(?:"+u+"("+l+"))?":u+"("+l+")"}}var c=R(e.delimiter||"/"),d=a.slice(-c.length)===c;return r||(a=(d?a.slice(0,-c.length):a)+"(?:"+c+"(?=$))?"),a+=o?"$":r&&d?"":"(?="+c+"|$)",N(new RegExp("^"+a,L(e)),t)}E.parse=S,E.compile=function(n,t){return z(P(n,t))},E.tokensToFunction=O,E.tokensToRegExp=j;var F=Object.create(null);function U(n,t,e){try{return(F[n]||(F[n]=E.compile(n)))(t||{},{pretty:!0})}catch(n){return""}}function q(n,t,e,r){var o=t||[],a=e||Object.create(null),i=r||Object.create(null);n.forEach((function(n){G(o,a,i,n)}));for(var s=0,u=o.length;s<u;s++)"*"===o[s]&&(o.push(o.splice(s,1)[0]),u--,s--);return{pathList:o,pathMap:a,nameMap:i}}function G(n,t,e,r,o,a){var i=r.path,s=r.name,u=r.pathToRegexpOptions||{},l=function(n,t,e){return e||(n=n.replace(/\/$/,"")),"/"===n[0]||null==t?n:A(t.path+"/"+n)}(i,o,u.strict);"boolean"==typeof r.caseSensitive&&(u.sensitive=r.caseSensitive);var c={path:l,regex:H(l,u),components:r.components||{default:r.component},instances:{},name:s,parent:o,matchAs:a,redirect:r.redirect,beforeEnter:r.beforeEnter,meta:r.meta||{},props:null==r.props?{}:r.components?r.props:{default:r.props}};r.children&&r.children.forEach((function(r){var o=a?A(a+"/"+r.path):void 0;G(n,t,e,r,c,o)})),void 0!==r.alias&&(Array.isArray(r.alias)?r.alias:[r.alias]).forEach((function(a){var i={path:a,children:r.children};G(n,t,e,i,o,c.path||"/")})),t[c.path]||(n.push(c.path),t[c.path]=c),s&&(e[s]||(e[s]=c))}function H(n,t){return E(n,[],t)}function W(n,t,e,r){var o="string"==typeof n?{path:n}:n;if(o.name||o._normalized)return o;if(!o.path&&o.params&&t){(o=Z({},o))._normalized=!0;var a=Z(Z({},t.params),o.params);if(t.name)o.name=t.name,o.params=a;else if(t.matched.length){var i=t.matched[t.matched.length-1].path;o.path=U(i,a,t.path)}return o}var s=function(n){var t="",e="",r=n.indexOf("#");r>=0&&(t=n.slice(r),n=n.slice(0,r));var o=n.indexOf("?");return o>=0&&(e=n.slice(o+1),n=n.slice(0,o)),{path:n,query:e,hash:t}}(o.path||""),u=t&&t.path||"/",l=s.path?C(s.path,u,e||o.append):u,d=function(n,t,e){void 0===t&&(t={});var r,o=e||c;try{r=o(n||"")}catch(n){r={}}for(var a in t)r[a]=t[a];return r}(s.query,o.query,r&&r.options.parseQuery),f=o.hash||s.hash;return f&&"#"!==f.charAt(0)&&(f="#"+f),{_normalized:!0,path:l,query:d,hash:f}}function Z(n,t){for(var e in t)n[e]=t[e];return n}function V(n,t){var e=q(n),r=e.pathList,o=e.pathMap,a=e.nameMap;function i(n,e,i){var u=W(n,e,!1,t),l=u.name;if(l){var c=a[l];if(!c)return s(null,u);var d=c.regex.keys.filter((function(n){return!n.optional})).map((function(n){return n.name}));if("object"!=typeof u.params&&(u.params={}),e&&"object"==typeof e.params)for(var f in e.params)!(f in u.params)&&d.indexOf(f)>-1&&(u.params[f]=e.params[f]);if(c)return u.path=U(c.path,u.params),s(c,u,i)}else if(u.path){u.params={};for(var p=0;p<r.length;p++){var h=r[p],g=o[h];if(X(g.regex,u.path,u.params))return s(g,u,i)}}return s(null,u)}function s(n,e,r){return n&&n.redirect?function(n,e){var r=n.redirect,o="function"==typeof r?r(p(n,e,null,t)):r;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return s(null,e);var u=o,l=u.name,c=u.path,d=e.query,f=e.hash,h=e.params;return d=u.hasOwnProperty("query")?u.query:d,f=u.hasOwnProperty("hash")?u.hash:f,h=u.hasOwnProperty("params")?u.params:h,l?(a[l],i({_normalized:!0,name:l,query:d,hash:f,params:h},void 0,e)):c?i({_normalized:!0,path:U(function(n,t){return C(n,t.parent?t.parent.path:"/",!0)}(c,n),h),query:d,hash:f},void 0,e):s(null,e)}(n,r||e):n&&n.matchAs?function(n,t,e){var r=i({_normalized:!0,path:U(e,t.params)});if(r){var o=r.matched,a=o[o.length-1];return t.params=r.params,s(a,t)}return s(null,t)}(0,e,n.matchAs):p(n,e,r,t)}return{match:i,addRoutes:function(n){q(n,r,o,a)}}}function X(n,t,e){var r=t.match(n);if(!r)return!1;if(!e)return!0;for(var o=1,a=r.length;o<a;++o){var i=n.keys[o-1],s="string"==typeof r[o]?decodeURIComponent(r[o]):r[o];i&&(e[i.name]=s)}return!0}var J=Object.create(null);function K(){window.history.replaceState({key:cn()},""),window.addEventListener("popstate",(function(n){var t;Q(),n.state&&n.state.key&&(t=n.state.key,un=t)}))}function Y(n,t,e,r){if(n.app){var o=n.options.scrollBehavior;o&&n.app.$nextTick((function(){var n=function(){var n=cn();if(n)return J[n]}(),a=o(t,e,r?n:null);a&&("function"==typeof a.then?a.then((function(t){rn(t,n)})).catch((function(n){})):rn(a,n))}))}}function Q(){var n=cn();n&&(J[n]={x:window.pageXOffset,y:window.pageYOffset})}function nn(n){return en(n.x)||en(n.y)}function tn(n){return{x:en(n.x)?n.x:window.pageXOffset,y:en(n.y)?n.y:window.pageYOffset}}function en(n){return"number"==typeof n}function rn(n,t){var e,r="object"==typeof n;if(r&&"string"==typeof n.selector){var o=document.querySelector(n.selector);if(o){var a=n.offset&&"object"==typeof n.offset?n.offset:{};t=function(n,t){var e=document.documentElement.getBoundingClientRect(),r=n.getBoundingClientRect();return{x:r.left-e.left-t.x,y:r.top-e.top-t.y}}(o,a={x:en((e=a).x)?e.x:0,y:en(e.y)?e.y:0})}else nn(n)&&(t=tn(n))}else r&&nn(n)&&(t=tn(n));t&&window.scrollTo(t.x,t.y)}var on,an=k&&(-1===(on=window.navigator.userAgent).indexOf("Android 2.")&&-1===on.indexOf("Android 4.0")||-1===on.indexOf("Mobile Safari")||-1!==on.indexOf("Chrome")||-1!==on.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,sn=k&&window.performance&&window.performance.now?window.performance:Date,un=ln();function ln(){return sn.now().toFixed(3)}function cn(){return un}function dn(n,t){Q();var e=window.history;try{t?e.replaceState({key:un},"",n):(un=ln(),e.pushState({key:un},"",n))}catch(e){window.location[t?"replace":"assign"](n)}}function fn(n){dn(n,!0)}function pn(n,t,e){var r=function(o){o>=n.length?e():n[o]?t(n[o],(function(){r(o+1)})):r(o+1)};r(0)}function hn(n,t){return gn(n.map((function(n){return Object.keys(n.components).map((function(e){return t(n.components[e],n.instances[e],n,e)}))})))}function gn(n){return Array.prototype.concat.apply([],n)}var $n="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function mn(n){var t=!1;return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];if(!t)return t=!0,n.apply(this,e)}}var bn=function(n,t){this.router=n,this.base=function(n){if(!n)if(k){var t=document.querySelector("base");n=(n=t&&t.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else n="/";return"/"!==n.charAt(0)&&(n="/"+n),n.replace(/\/$/,"")}(t),this.current=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function vn(n,t,e,r){var o=hn(n,(function(n,r,o,a){var i=function(n,t){return"function"!=typeof n&&(n=y.extend(n)),n.options[t]}(n,t);if(i)return Array.isArray(i)?i.map((function(n){return e(n,r,o,a)})):e(i,r,o,a)}));return gn(r?o.reverse():o)}function yn(n,t){if(t)return function(){return n.apply(t,arguments)}}function wn(n,t,e,r){t[e]?n(t[e]):r()&&setTimeout((function(){wn(n,t,e,r)}),16)}bn.prototype.listen=function(n){this.cb=n},bn.prototype.onReady=function(n,t){this.ready?n():(this.readyCbs.push(n),t&&this.readyErrorCbs.push(t))},bn.prototype.onError=function(n){this.errorCbs.push(n)},bn.prototype.transitionTo=function(n,t,e){var r=this,o=this.router.match(n,this.current);this.confirmTransition(o,(function(){r.updateRoute(o),t&&t(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach((function(n){n(o)})))}),(function(n){e&&e(n),n&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach((function(t){t(n)})))}))},bn.prototype.confirmTransition=function(n,t,e){var o=this,a=this.current,i=function(n){r(n)&&(o.errorCbs.length?o.errorCbs.forEach((function(t){t(n)})):console.error(n)),e&&e(n)};if(b(n,a)&&n.matched.length===a.matched.length)return this.ensureURL(),i();var s,u=function(n,t){var e,r=Math.max(n.length,t.length);for(e=0;e<r&&n[e]===t[e];e++);return{updated:t.slice(0,e),activated:t.slice(e),deactivated:n.slice(e)}}(this.current.matched,n.matched),l=u.updated,c=u.deactivated,d=u.activated,f=[].concat(function(n){return vn(n,"beforeRouteLeave",yn,!0)}(c),this.router.beforeHooks,function(n){return vn(n,"beforeRouteUpdate",yn)}(l),d.map((function(n){return n.beforeEnter})),(s=d,function(n,t,e){var o=!1,a=0,i=null;hn(s,(function(n,t,s,u){if("function"==typeof n&&void 0===n.cid){o=!0,a++;var l,c=mn((function(t){var r;((r=t).__esModule||$n&&"Module"===r[Symbol.toStringTag])&&(t=t.default),n.resolved="function"==typeof t?t:y.extend(t),s.components[u]=t,--a<=0&&e()})),d=mn((function(n){var t="Failed to resolve async component "+u+": "+n;i||(i=r(n)?n:new Error(t),e(i))}));try{l=n(c,d)}catch(n){d(n)}if(l)if("function"==typeof l.then)l.then(c,d);else{var f=l.component;f&&"function"==typeof f.then&&f.then(c,d)}}})),o||e()}));this.pending=n;var p=function(t,e){if(o.pending!==n)return i();try{t(n,a,(function(n){!1===n||r(n)?(o.ensureURL(!0),i(n)):"string"==typeof n||"object"==typeof n&&("string"==typeof n.path||"string"==typeof n.name)?(i(),"object"==typeof n&&n.replace?o.replace(n):o.push(n)):e(n)}))}catch(n){i(n)}};pn(f,p,(function(){var e=[];pn(function(n,t,e){return vn(n,"beforeRouteEnter",(function(n,r,o,a){return function(n,t,e,r,o){return function(a,i,s){return n(a,i,(function(n){s(n),"function"==typeof n&&r.push((function(){wn(n,t.instances,e,o)}))}))}}(n,o,a,t,e)}))}(d,e,(function(){return o.current===n})).concat(o.router.resolveHooks),p,(function(){if(o.pending!==n)return i();o.pending=null,t(n),o.router.app&&o.router.app.$nextTick((function(){e.forEach((function(n){n()}))}))}))}))},bn.prototype.updateRoute=function(n){var t=this.current;this.current=n,this.cb&&this.cb(n),this.router.afterHooks.forEach((function(e){e&&e(n,t)}))};var _n=function(n){function t(t,e){var r=this;n.call(this,t,e);var o=t.options.scrollBehavior;o&&K();var a=xn(this.base);window.addEventListener("popstate",(function(n){var e=r.current,i=xn(r.base);r.current===g&&i===a||r.transitionTo(i,(function(n){o&&Y(t,n,e,!0)}))}))}return n&&(t.__proto__=n),t.prototype=Object.create(n&&n.prototype),t.prototype.constructor=t,t.prototype.go=function(n){window.history.go(n)},t.prototype.push=function(n,t,e){var r=this,o=this.current;this.transitionTo(n,(function(n){dn(A(r.base+n.fullPath)),Y(r.router,n,o,!1),t&&t(n)}),e)},t.prototype.replace=function(n,t,e){var r=this,o=this.current;this.transitionTo(n,(function(n){fn(A(r.base+n.fullPath)),Y(r.router,n,o,!1),t&&t(n)}),e)},t.prototype.ensureURL=function(n){if(xn(this.base)!==this.current.fullPath){var t=A(this.base+this.current.fullPath);n?dn(t):fn(t)}},t.prototype.getCurrentLocation=function(){return xn(this.base)},t}(bn);function xn(n){var t=window.location.pathname;return n&&0===t.indexOf(n)&&(t=t.slice(n.length)),(t||"/")+window.location.search+window.location.hash}var kn=function(n){function t(t,e,r){n.call(this,t,e),r&&function(n){var t=xn(n);if(!/^\/#/.test(t))return window.location.replace(A(n+"/#"+t)),!0}(this.base)||Cn()}return n&&(t.__proto__=n),t.prototype=Object.create(n&&n.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var n=this,t=this.router.options.scrollBehavior,e=an&&t;e&&K(),window.addEventListener(an?"popstate":"hashchange",(function(){var t=n.current;Cn()&&n.transitionTo(An(),(function(r){e&&Y(n.router,r,t,!0),an||Sn(r.fullPath)}))}))},t.prototype.push=function(n,t,e){var r=this,o=this.current;this.transitionTo(n,(function(n){En(n.fullPath),Y(r.router,n,o,!1),t&&t(n)}),e)},t.prototype.replace=function(n,t,e){var r=this,o=this.current;this.transitionTo(n,(function(n){Sn(n.fullPath),Y(r.router,n,o,!1),t&&t(n)}),e)},t.prototype.go=function(n){window.history.go(n)},t.prototype.ensureURL=function(n){var t=this.current.fullPath;An()!==t&&(n?En(t):Sn(t))},t.prototype.getCurrentLocation=function(){return An()},t}(bn);function Cn(){var n=An();return"/"===n.charAt(0)||(Sn("/"+n),!1)}function An(){var n=window.location.href,t=n.indexOf("#");return-1===t?"":n.slice(t+1)}function Tn(n){var t=window.location.href,e=t.indexOf("#");return(e>=0?t.slice(0,e):t)+"#"+n}function En(n){an?dn(Tn(n)):window.location.hash=n}function Sn(n){an?fn(Tn(n)):window.location.replace(Tn(n))}var On=function(n){function t(t,e){n.call(this,t,e),this.stack=[],this.index=-1}return n&&(t.__proto__=n),t.prototype=Object.create(n&&n.prototype),t.prototype.constructor=t,t.prototype.push=function(n,t,e){var r=this;this.transitionTo(n,(function(n){r.stack=r.stack.slice(0,r.index+1).concat(n),r.index++,t&&t(n)}),e)},t.prototype.replace=function(n,t,e){var r=this;this.transitionTo(n,(function(n){r.stack=r.stack.slice(0,r.index).concat(n),t&&t(n)}),e)},t.prototype.go=function(n){var t=this,e=this.index+n;if(!(e<0||e>=this.stack.length)){var r=this.stack[e];this.confirmTransition(r,(function(){t.index=e,t.updateRoute(r)}))}},t.prototype.getCurrentLocation=function(){var n=this.stack[this.stack.length-1];return n?n.fullPath:"/"},t.prototype.ensureURL=function(){},t}(bn),jn=function(n){void 0===n&&(n={}),this.app=null,this.apps=[],this.options=n,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=V(n.routes||[],this);var t=n.mode||"hash";switch(this.fallback="history"===t&&!an&&!1!==n.fallback,this.fallback&&(t="hash"),k||(t="abstract"),this.mode=t,t){case"history":this.history=new _n(this,n.base);break;case"hash":this.history=new kn(this,n.base,this.fallback);break;case"abstract":this.history=new On(this,n.base)}},Mn={currentRoute:{configurable:!0}};function Pn(n,t){return n.push(t),function(){var e=n.indexOf(t);e>-1&&n.splice(e,1)}}jn.prototype.match=function(n,t,e){return this.matcher.match(n,t,e)},Mn.currentRoute.get=function(){return this.history&&this.history.current},jn.prototype.init=function(n){var t=this;if(this.apps.push(n),!this.app){this.app=n;var e=this.history;if(e instanceof _n)e.transitionTo(e.getCurrentLocation());else if(e instanceof kn){var r=function(){e.setupListeners()};e.transitionTo(e.getCurrentLocation(),r,r)}e.listen((function(n){t.apps.forEach((function(t){t._route=n}))}))}},jn.prototype.beforeEach=function(n){return Pn(this.beforeHooks,n)},jn.prototype.beforeResolve=function(n){return Pn(this.resolveHooks,n)},jn.prototype.afterEach=function(n){return Pn(this.afterHooks,n)},jn.prototype.onReady=function(n,t){this.history.onReady(n,t)},jn.prototype.onError=function(n){this.history.onError(n)},jn.prototype.push=function(n,t,e){this.history.push(n,t,e)},jn.prototype.replace=function(n,t,e){this.history.replace(n,t,e)},jn.prototype.go=function(n){this.history.go(n)},jn.prototype.back=function(){this.go(-1)},jn.prototype.forward=function(){this.go(1)},jn.prototype.getMatchedComponents=function(n){var t=n?n.matched?n:this.resolve(n).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(n){return Object.keys(n.components).map((function(t){return n.components[t]}))}))):[]},jn.prototype.resolve=function(n,t,e){var r=W(n,t||this.history.current,e,this),o=this.match(r,t),a=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(n,t,e){var r="hash"===e?"#"+t:t;return n?A(n+"/"+r):r}(this.history.base,a,this.mode),normalizedTo:r,resolved:o}},jn.prototype.addRoutes=function(n){this.matcher.addRoutes(n),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(jn.prototype,Mn),jn.install=function n(t){if(!n.installed||y!==t){n.installed=!0,y=t;var e=function(n){return void 0!==n},r=function(n,t){var r=n.$options._parentVnode;e(r)&&e(r=r.data)&&e(r=r.registerRouteInstance)&&r(n,t)};t.mixin({beforeCreate:function(){e(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(t.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(t.prototype,"$route",{get:function(){return this._routerRoot._route}}),t.component("router-view",o),t.component("router-link",w);var a=t.config.optionMergeStrategies;a.beforeRouteEnter=a.beforeRouteLeave=a.beforeRouteUpdate=a.created}},jn.version="2.8.1",k&&window.Vue&&window.Vue.use(jn);const In=jn},59757:(n,t,e)=>{var r=e(29991);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[n.id,r,""]]),r.locals&&(n.exports=r.locals),(0,e(45346).Z)("003e28dc",r,!1,{})},72939:(n,t,e)=>{var r=e(45504);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[n.id,r,""]]),r.locals&&(n.exports=r.locals),(0,e(45346).Z)("a244fb50",r,!1,{})},53552:(n,t,e)=>{var r=e(17421);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[n.id,r,""]]),r.locals&&(n.exports=r.locals),(0,e(45346).Z)("580cb5a4",r,!1,{})},9567:(n,t,e)=>{var r=e(8296);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[n.id,r,""]]),r.locals&&(n.exports=r.locals),(0,e(45346).Z)("45c9974b",r,!1,{})},74607:(n,t,e)=>{var r=e(63438);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[n.id,r,""]]),r.locals&&(n.exports=r.locals),(0,e(45346).Z)("310e5a6e",r,!1,{})},45346:(n,t,e)=>{"use strict";function r(n,t){for(var e=[],r={},o=0;o<t.length;o++){var a=t[o],i=a[0],s={id:n+":"+o,css:a[1],media:a[2],sourceMap:a[3]};r[i]?r[i].parts.push(s):e.push(r[i]={id:i,parts:[s]})}return e}e.d(t,{Z:()=>h});var o="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!o)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var a={},i=o&&(document.head||document.getElementsByTagName("head")[0]),s=null,u=0,l=!1,c=function(){},d=null,f="data-vue-ssr-id",p="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function h(n,t,e,o){l=e,d=o||{};var i=r(n,t);return g(i),function(t){for(var e=[],o=0;o<i.length;o++){var s=i[o];(u=a[s.id]).refs--,e.push(u)}for(t?g(i=r(n,t)):i=[],o=0;o<e.length;o++){var u;if(0===(u=e[o]).refs){for(var l=0;l<u.parts.length;l++)u.parts[l]();delete a[u.id]}}}}function g(n){for(var t=0;t<n.length;t++){var e=n[t],r=a[e.id];if(r){r.refs++;for(var o=0;o<r.parts.length;o++)r.parts[o](e.parts[o]);for(;o<e.parts.length;o++)r.parts.push(m(e.parts[o]));r.parts.length>e.parts.length&&(r.parts.length=e.parts.length)}else{var i=[];for(o=0;o<e.parts.length;o++)i.push(m(e.parts[o]));a[e.id]={id:e.id,refs:1,parts:i}}}}function $(){var n=document.createElement("style");return n.type="text/css",i.appendChild(n),n}function m(n){var t,e,r=document.querySelector("style["+f+'~="'+n.id+'"]');if(r){if(l)return c;r.parentNode.removeChild(r)}if(p){var o=u++;r=s||(s=$()),t=y.bind(null,r,o,!1),e=y.bind(null,r,o,!0)}else r=$(),t=w.bind(null,r),e=function(){r.parentNode.removeChild(r)};return t(n),function(r){if(r){if(r.css===n.css&&r.media===n.media&&r.sourceMap===n.sourceMap)return;t(n=r)}else e()}}var b,v=(b=[],function(n,t){return b[n]=t,b.filter(Boolean).join("\n")});function y(n,t,e,r){var o=e?"":r.css;if(n.styleSheet)n.styleSheet.cssText=v(t,o);else{var a=document.createTextNode(o),i=n.childNodes;i[t]&&n.removeChild(i[t]),i.length?n.insertBefore(a,i[t]):n.appendChild(a)}}function w(n,t){var e=t.css,r=t.media,o=t.sourceMap;if(r&&n.setAttribute("media",r),d.ssrId&&n.setAttribute(f,t.id),o&&(e+="\n/*# sourceURL="+o.sources[0]+" */",e+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},72100:(n,t,e)=>{n.exports=e(91317)},91317:(n,t,e)=>{"use strict";var r=Object.freeze({});function o(n){return null==n}function a(n){return null!=n}function i(n){return!0===n}function s(n){return"string"==typeof n||"number"==typeof n||"symbol"==typeof n||"boolean"==typeof n}function u(n){return null!==n&&"object"==typeof n}var l=Object.prototype.toString;function c(n){return"[object Object]"===l.call(n)}function d(n){var t=parseFloat(String(n));return t>=0&&Math.floor(t)===t&&isFinite(n)}function f(n){return a(n)&&"function"==typeof n.then&&"function"==typeof n.catch}function p(n){return null==n?"":Array.isArray(n)||c(n)&&n.toString===l?JSON.stringify(n,null,2):String(n)}function h(n){var t=parseFloat(n);return isNaN(t)?n:t}function g(n,t){for(var e=Object.create(null),r=n.split(","),o=0;o<r.length;o++)e[r[o]]=!0;return t?function(n){return e[n.toLowerCase()]}:function(n){return e[n]}}var $=g("slot,component",!0),m=g("key,ref,slot,slot-scope,is");function b(n,t){if(n.length){var e=n.indexOf(t);if(e>-1)return n.splice(e,1)}}var v=Object.prototype.hasOwnProperty;function y(n,t){return v.call(n,t)}function w(n){var t=Object.create(null);return function(e){return t[e]||(t[e]=n(e))}}var _=/-(\w)/g,x=w((function(n){return n.replace(_,(function(n,t){return t?t.toUpperCase():""}))})),k=w((function(n){return n.charAt(0).toUpperCase()+n.slice(1)})),C=/\B([A-Z])/g,A=w((function(n){return n.replace(C,"-$1").toLowerCase()})),T=Function.prototype.bind?function(n,t){return n.bind(t)}:function(n,t){function e(e){var r=arguments.length;return r?r>1?n.apply(t,arguments):n.call(t,e):n.call(t)}return e._length=n.length,e};function E(n,t){t=t||0;for(var e=n.length-t,r=new Array(e);e--;)r[e]=n[e+t];return r}function S(n,t){for(var e in t)n[e]=t[e];return n}function O(n){for(var t={},e=0;e<n.length;e++)n[e]&&S(t,n[e]);return t}function j(n,t,e){}var M=function(n,t,e){return!1},P=function(n){return n};function I(n,t){if(n===t)return!0;var e=u(n),r=u(t);if(!e||!r)return!e&&!r&&String(n)===String(t);try{var o=Array.isArray(n),a=Array.isArray(t);if(o&&a)return n.length===t.length&&n.every((function(n,e){return I(n,t[e])}));if(n instanceof Date&&t instanceof Date)return n.getTime()===t.getTime();if(o||a)return!1;var i=Object.keys(n),s=Object.keys(t);return i.length===s.length&&i.every((function(e){return I(n[e],t[e])}))}catch(n){return!1}}function z(n,t){for(var e=0;e<n.length;e++)if(I(n[e],t))return e;return-1}function R(n){var t=!1;return function(){t||(t=!0,n.apply(this,arguments))}}var D="data-server-rendered",N=["component","directive","filter"],L=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],B={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:M,isReservedAttr:M,isUnknownElement:M,getTagNamespace:j,parsePlatformTagName:P,mustUseProp:M,async:!0,_lifecycleHooks:L},F=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function U(n,t,e,r){Object.defineProperty(n,t,{value:e,enumerable:!!r,writable:!0,configurable:!0})}var q,G=new RegExp("[^"+F.source+".$_\\d]"),H="__proto__"in{},W="undefined"!=typeof window,Z="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,V=Z&&WXEnvironment.platform.toLowerCase(),X=W&&window.navigator.userAgent.toLowerCase(),J=X&&/msie|trident/.test(X),K=X&&X.indexOf("msie 9.0")>0,Y=X&&X.indexOf("edge/")>0,Q=(X&&X.indexOf("android"),X&&/iphone|ipad|ipod|ios/.test(X)||"ios"===V),nn=(X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X),X&&X.match(/firefox\/(\d+)/)),tn={}.watch,en=!1;if(W)try{var rn={};Object.defineProperty(rn,"passive",{get:function(){en=!0}}),window.addEventListener("test-passive",null,rn)}catch(r){}var on=function(){return void 0===q&&(q=!W&&!Z&&void 0!==e.g&&e.g.process&&"server"===e.g.process.env.VUE_ENV),q},an=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function sn(n){return"function"==typeof n&&/native code/.test(n.toString())}var un,ln="undefined"!=typeof Symbol&&sn(Symbol)&&"undefined"!=typeof Reflect&&sn(Reflect.ownKeys);un="undefined"!=typeof Set&&sn(Set)?Set:function(){function n(){this.set=Object.create(null)}return n.prototype.has=function(n){return!0===this.set[n]},n.prototype.add=function(n){this.set[n]=!0},n.prototype.clear=function(){this.set=Object.create(null)},n}();var cn=j,dn=0,fn=function(){this.id=dn++,this.subs=[]};fn.prototype.addSub=function(n){this.subs.push(n)},fn.prototype.removeSub=function(n){b(this.subs,n)},fn.prototype.depend=function(){fn.target&&fn.target.addDep(this)},fn.prototype.notify=function(){for(var n=this.subs.slice(),t=0,e=n.length;t<e;t++)n[t].update()},fn.target=null;var pn=[];function hn(n){pn.push(n),fn.target=n}function gn(){pn.pop(),fn.target=pn[pn.length-1]}var $n=function(n,t,e,r,o,a,i,s){this.tag=n,this.data=t,this.children=e,this.text=r,this.elm=o,this.ns=void 0,this.context=a,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=i,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},mn={child:{configurable:!0}};mn.child.get=function(){return this.componentInstance},Object.defineProperties($n.prototype,mn);var bn=function(n){void 0===n&&(n="");var t=new $n;return t.text=n,t.isComment=!0,t};function vn(n){return new $n(void 0,void 0,void 0,String(n))}function yn(n){var t=new $n(n.tag,n.data,n.children&&n.children.slice(),n.text,n.elm,n.context,n.componentOptions,n.asyncFactory);return t.ns=n.ns,t.isStatic=n.isStatic,t.key=n.key,t.isComment=n.isComment,t.fnContext=n.fnContext,t.fnOptions=n.fnOptions,t.fnScopeId=n.fnScopeId,t.asyncMeta=n.asyncMeta,t.isCloned=!0,t}var wn=Array.prototype,_n=Object.create(wn);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(n){var t=wn[n];U(_n,n,(function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];var o,a=t.apply(this,e),i=this.__ob__;switch(n){case"push":case"unshift":o=e;break;case"splice":o=e.slice(2)}return o&&i.observeArray(o),i.dep.notify(),a}))}));var xn=Object.getOwnPropertyNames(_n),kn=!0;function Cn(n){kn=n}var An=function(n){var t;this.value=n,this.dep=new fn,this.vmCount=0,U(n,"__ob__",this),Array.isArray(n)?(H?(t=_n,n.__proto__=t):function(n,t,e){for(var r=0,o=e.length;r<o;r++){var a=e[r];U(n,a,t[a])}}(n,_n,xn),this.observeArray(n)):this.walk(n)};function Tn(n,t){var e;if(u(n)&&!(n instanceof $n))return y(n,"__ob__")&&n.__ob__ instanceof An?e=n.__ob__:kn&&!on()&&(Array.isArray(n)||c(n))&&Object.isExtensible(n)&&!n._isVue&&(e=new An(n)),t&&e&&e.vmCount++,e}function En(n,t,e,r,o){var a=new fn,i=Object.getOwnPropertyDescriptor(n,t);if(!i||!1!==i.configurable){var s=i&&i.get,u=i&&i.set;s&&!u||2!==arguments.length||(e=n[t]);var l=!o&&Tn(e);Object.defineProperty(n,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(n):e;return fn.target&&(a.depend(),l&&(l.dep.depend(),Array.isArray(t)&&function n(t){for(var e=void 0,r=0,o=t.length;r<o;r++)(e=t[r])&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&n(e)}(t))),t},set:function(t){var r=s?s.call(n):e;t===r||t!=t&&r!=r||s&&!u||(u?u.call(n,t):e=t,l=!o&&Tn(t),a.notify())}})}}function Sn(n,t,e){if(Array.isArray(n)&&d(t))return n.length=Math.max(n.length,t),n.splice(t,1,e),e;if(t in n&&!(t in Object.prototype))return n[t]=e,e;var r=n.__ob__;return n._isVue||r&&r.vmCount?e:r?(En(r.value,t,e),r.dep.notify(),e):(n[t]=e,e)}function On(n,t){if(Array.isArray(n)&&d(t))n.splice(t,1);else{var e=n.__ob__;n._isVue||e&&e.vmCount||y(n,t)&&(delete n[t],e&&e.dep.notify())}}An.prototype.walk=function(n){for(var t=Object.keys(n),e=0;e<t.length;e++)En(n,t[e])},An.prototype.observeArray=function(n){for(var t=0,e=n.length;t<e;t++)Tn(n[t])};var jn=B.optionMergeStrategies;function Mn(n,t){if(!t)return n;for(var e,r,o,a=ln?Reflect.ownKeys(t):Object.keys(t),i=0;i<a.length;i++)"__ob__"!==(e=a[i])&&(r=n[e],o=t[e],y(n,e)?r!==o&&c(r)&&c(o)&&Mn(r,o):Sn(n,e,o));return n}function Pn(n,t,e){return e?function(){var r="function"==typeof t?t.call(e,e):t,o="function"==typeof n?n.call(e,e):n;return r?Mn(r,o):o}:t?n?function(){return Mn("function"==typeof t?t.call(this,this):t,"function"==typeof n?n.call(this,this):n)}:t:n}function In(n,t){var e=t?n?n.concat(t):Array.isArray(t)?t:[t]:n;return e?function(n){for(var t=[],e=0;e<n.length;e++)-1===t.indexOf(n[e])&&t.push(n[e]);return t}(e):e}function zn(n,t,e,r){var o=Object.create(n||null);return t?S(o,t):o}jn.data=function(n,t,e){return e?Pn(n,t,e):t&&"function"!=typeof t?n:Pn(n,t)},L.forEach((function(n){jn[n]=In})),N.forEach((function(n){jn[n+"s"]=zn})),jn.watch=function(n,t,e,r){if(n===tn&&(n=void 0),t===tn&&(t=void 0),!t)return Object.create(n||null);if(!n)return t;var o={};for(var a in S(o,n),t){var i=o[a],s=t[a];i&&!Array.isArray(i)&&(i=[i]),o[a]=i?i.concat(s):Array.isArray(s)?s:[s]}return o},jn.props=jn.methods=jn.inject=jn.computed=function(n,t,e,r){if(!n)return t;var o=Object.create(null);return S(o,n),t&&S(o,t),o},jn.provide=Pn;var Rn=function(n,t){return void 0===t?n:t};function Dn(n,t,e){if("function"==typeof t&&(t=t.options),function(n,t){var e=n.props;if(e){var r,o,a={};if(Array.isArray(e))for(r=e.length;r--;)"string"==typeof(o=e[r])&&(a[x(o)]={type:null});else if(c(e))for(var i in e)o=e[i],a[x(i)]=c(o)?o:{type:o};n.props=a}}(t),function(n,t){var e=n.inject;if(e){var r=n.inject={};if(Array.isArray(e))for(var o=0;o<e.length;o++)r[e[o]]={from:e[o]};else if(c(e))for(var a in e){var i=e[a];r[a]=c(i)?S({from:a},i):{from:i}}}}(t),function(n){var t=n.directives;if(t)for(var e in t){var r=t[e];"function"==typeof r&&(t[e]={bind:r,update:r})}}(t),!t._base&&(t.extends&&(n=Dn(n,t.extends,e)),t.mixins))for(var r=0,o=t.mixins.length;r<o;r++)n=Dn(n,t.mixins[r],e);var a,i={};for(a in n)s(a);for(a in t)y(n,a)||s(a);function s(r){var o=jn[r]||Rn;i[r]=o(n[r],t[r],e,r)}return i}function Nn(n,t,e,r){if("string"==typeof e){var o=n[t];if(y(o,e))return o[e];var a=x(e);if(y(o,a))return o[a];var i=k(a);return y(o,i)?o[i]:o[e]||o[a]||o[i]}}function Ln(n,t,e,r){var o=t[n],a=!y(e,n),i=e[n],s=Un(Boolean,o.type);if(s>-1)if(a&&!y(o,"default"))i=!1;else if(""===i||i===A(n)){var u=Un(String,o.type);(u<0||s<u)&&(i=!0)}if(void 0===i){i=function(n,t,e){if(y(t,"default")){var r=t.default;return n&&n.$options.propsData&&void 0===n.$options.propsData[e]&&void 0!==n._props[e]?n._props[e]:"function"==typeof r&&"Function"!==Bn(t.type)?r.call(n):r}}(r,o,n);var l=kn;Cn(!0),Tn(i),Cn(l)}return i}function Bn(n){var t=n&&n.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Fn(n,t){return Bn(n)===Bn(t)}function Un(n,t){if(!Array.isArray(t))return Fn(t,n)?0:-1;for(var e=0,r=t.length;e<r;e++)if(Fn(t[e],n))return e;return-1}function qn(n,t,e){hn();try{if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var a=0;a<o.length;a++)try{if(!1===o[a].call(r,n,t,e))return}catch(n){Hn(n,r,"errorCaptured hook")}}Hn(n,t,e)}finally{gn()}}function Gn(n,t,e,r,o){var a;try{(a=e?n.apply(t,e):n.call(t))&&!a._isVue&&f(a)&&!a._handled&&(a.catch((function(n){return qn(n,r,o+" (Promise/async)")})),a._handled=!0)}catch(n){qn(n,r,o)}return a}function Hn(n,t,e){if(B.errorHandler)try{return B.errorHandler.call(null,n,t,e)}catch(t){t!==n&&Wn(t)}Wn(n)}function Wn(n,t,e){if(!W&&!Z||"undefined"==typeof console)throw n;console.error(n)}var Zn,Vn=!1,Xn=[],Jn=!1;function Kn(){Jn=!1;var n=Xn.slice(0);Xn.length=0;for(var t=0;t<n.length;t++)n[t]()}if("undefined"!=typeof Promise&&sn(Promise)){var Yn=Promise.resolve();Zn=function(){Yn.then(Kn),Q&&setTimeout(j)},Vn=!0}else if(J||"undefined"==typeof MutationObserver||!sn(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Zn="undefined"!=typeof setImmediate&&sn(setImmediate)?function(){setImmediate(Kn)}:function(){setTimeout(Kn,0)};else{var Qn=1,nt=new MutationObserver(Kn),tt=document.createTextNode(String(Qn));nt.observe(tt,{characterData:!0}),Zn=function(){Qn=(Qn+1)%2,tt.data=String(Qn)},Vn=!0}function et(n,t){var e;if(Xn.push((function(){if(n)try{n.call(t)}catch(n){qn(n,t,"nextTick")}else e&&e(t)})),Jn||(Jn=!0,Zn()),!n&&"undefined"!=typeof Promise)return new Promise((function(n){e=n}))}var rt=new un;function ot(n){!function n(t,e){var r,o,a=Array.isArray(t);if(!(!a&&!u(t)||Object.isFrozen(t)||t instanceof $n)){if(t.__ob__){var i=t.__ob__.dep.id;if(e.has(i))return;e.add(i)}if(a)for(r=t.length;r--;)n(t[r],e);else for(r=(o=Object.keys(t)).length;r--;)n(t[o[r]],e)}}(n,rt),rt.clear()}var at=w((function(n){var t="&"===n.charAt(0),e="~"===(n=t?n.slice(1):n).charAt(0),r="!"===(n=e?n.slice(1):n).charAt(0);return{name:n=r?n.slice(1):n,once:e,capture:r,passive:t}}));function it(n,t){function e(){var n=arguments,r=e.fns;if(!Array.isArray(r))return Gn(r,null,arguments,t,"v-on handler");for(var o=r.slice(),a=0;a<o.length;a++)Gn(o[a],null,n,t,"v-on handler")}return e.fns=n,e}function st(n,t,e,r,a,s){var u,l,c,d;for(u in n)l=n[u],c=t[u],d=at(u),o(l)||(o(c)?(o(l.fns)&&(l=n[u]=it(l,s)),i(d.once)&&(l=n[u]=a(d.name,l,d.capture)),e(d.name,l,d.capture,d.passive,d.params)):l!==c&&(c.fns=l,n[u]=c));for(u in t)o(n[u])&&r((d=at(u)).name,t[u],d.capture)}function ut(n,t,e){var r;n instanceof $n&&(n=n.data.hook||(n.data.hook={}));var s=n[t];function u(){e.apply(this,arguments),b(r.fns,u)}o(s)?r=it([u]):a(s.fns)&&i(s.merged)?(r=s).fns.push(u):r=it([s,u]),r.merged=!0,n[t]=r}function lt(n,t,e,r,o){if(a(t)){if(y(t,e))return n[e]=t[e],o||delete t[e],!0;if(y(t,r))return n[e]=t[r],o||delete t[r],!0}return!1}function ct(n){return s(n)?[vn(n)]:Array.isArray(n)?function n(t,e){var r,u,l,c,d=[];for(r=0;r<t.length;r++)o(u=t[r])||"boolean"==typeof u||(c=d[l=d.length-1],Array.isArray(u)?u.length>0&&(dt((u=n(u,(e||"")+"_"+r))[0])&&dt(c)&&(d[l]=vn(c.text+u[0].text),u.shift()),d.push.apply(d,u)):s(u)?dt(c)?d[l]=vn(c.text+u):""!==u&&d.push(vn(u)):dt(u)&&dt(c)?d[l]=vn(c.text+u.text):(i(t._isVList)&&a(u.tag)&&o(u.key)&&a(e)&&(u.key="__vlist"+e+"_"+r+"__"),d.push(u)));return d}(n):void 0}function dt(n){return a(n)&&a(n.text)&&!1===n.isComment}function ft(n,t){if(n){for(var e=Object.create(null),r=ln?Reflect.ownKeys(n):Object.keys(n),o=0;o<r.length;o++){var a=r[o];if("__ob__"!==a){for(var i=n[a].from,s=t;s;){if(s._provided&&y(s._provided,i)){e[a]=s._provided[i];break}s=s.$parent}if(!s&&"default"in n[a]){var u=n[a].default;e[a]="function"==typeof u?u.call(t):u}}}return e}}function pt(n,t){if(!n||!n.length)return{};for(var e={},r=0,o=n.length;r<o;r++){var a=n[r],i=a.data;if(i&&i.attrs&&i.attrs.slot&&delete i.attrs.slot,a.context!==t&&a.fnContext!==t||!i||null==i.slot)(e.default||(e.default=[])).push(a);else{var s=i.slot,u=e[s]||(e[s]=[]);"template"===a.tag?u.push.apply(u,a.children||[]):u.push(a)}}for(var l in e)e[l].every(ht)&&delete e[l];return e}function ht(n){return n.isComment&&!n.asyncFactory||" "===n.text}function gt(n,t,e){var o,a=Object.keys(t).length>0,i=n?!!n.$stable:!a,s=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(i&&e&&e!==r&&s===e.$key&&!a&&!e.$hasNormal)return e;for(var u in o={},n)n[u]&&"$"!==u[0]&&(o[u]=$t(t,u,n[u]))}else o={};for(var l in t)l in o||(o[l]=mt(t,l));return n&&Object.isExtensible(n)&&(n._normalized=o),U(o,"$stable",i),U(o,"$key",s),U(o,"$hasNormal",a),o}function $t(n,t,e){var r=function(){var n=arguments.length?e.apply(null,arguments):e({});return(n=n&&"object"==typeof n&&!Array.isArray(n)?[n]:ct(n))&&(0===n.length||1===n.length&&n[0].isComment)?void 0:n};return e.proxy&&Object.defineProperty(n,t,{get:r,enumerable:!0,configurable:!0}),r}function mt(n,t){return function(){return n[t]}}function bt(n,t){var e,r,o,i,s;if(Array.isArray(n)||"string"==typeof n)for(e=new Array(n.length),r=0,o=n.length;r<o;r++)e[r]=t(n[r],r);else if("number"==typeof n)for(e=new Array(n),r=0;r<n;r++)e[r]=t(r+1,r);else if(u(n))if(ln&&n[Symbol.iterator]){e=[];for(var l=n[Symbol.iterator](),c=l.next();!c.done;)e.push(t(c.value,e.length)),c=l.next()}else for(i=Object.keys(n),e=new Array(i.length),r=0,o=i.length;r<o;r++)s=i[r],e[r]=t(n[s],s,r);return a(e)||(e=[]),e._isVList=!0,e}function vt(n,t,e,r){var o,a=this.$scopedSlots[n];a?(e=e||{},r&&(e=S(S({},r),e)),o=a(e)||t):o=this.$slots[n]||t;var i=e&&e.slot;return i?this.$createElement("template",{slot:i},o):o}function yt(n){return Nn(this.$options,"filters",n)||P}function wt(n,t){return Array.isArray(n)?-1===n.indexOf(t):n!==t}function _t(n,t,e,r,o){var a=B.keyCodes[t]||e;return o&&r&&!B.keyCodes[t]?wt(o,r):a?wt(a,n):r?A(r)!==t:void 0}function xt(n,t,e,r,o){if(e&&u(e)){var a;Array.isArray(e)&&(e=O(e));var i=function(i){if("class"===i||"style"===i||m(i))a=n;else{var s=n.attrs&&n.attrs.type;a=r||B.mustUseProp(t,s,i)?n.domProps||(n.domProps={}):n.attrs||(n.attrs={})}var u=x(i),l=A(i);u in a||l in a||(a[i]=e[i],o&&((n.on||(n.on={}))["update:"+i]=function(n){e[i]=n}))};for(var s in e)i(s)}return n}function kt(n,t){var e=this._staticTrees||(this._staticTrees=[]),r=e[n];return r&&!t||At(r=e[n]=this.$options.staticRenderFns[n].call(this._renderProxy,null,this),"__static__"+n,!1),r}function Ct(n,t,e){return At(n,"__once__"+t+(e?"_"+e:""),!0),n}function At(n,t,e){if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&"string"!=typeof n[r]&&Tt(n[r],t+"_"+r,e);else Tt(n,t,e)}function Tt(n,t,e){n.isStatic=!0,n.key=t,n.isOnce=e}function Et(n,t){if(t&&c(t)){var e=n.on=n.on?S({},n.on):{};for(var r in t){var o=e[r],a=t[r];e[r]=o?[].concat(o,a):a}}return n}function St(n,t,e,r){t=t||{$stable:!e};for(var o=0;o<n.length;o++){var a=n[o];Array.isArray(a)?St(a,t,e):a&&(a.proxy&&(a.fn.proxy=!0),t[a.key]=a.fn)}return r&&(t.$key=r),t}function Ot(n,t){for(var e=0;e<t.length;e+=2){var r=t[e];"string"==typeof r&&r&&(n[t[e]]=t[e+1])}return n}function jt(n,t){return"string"==typeof n?t+n:n}function Mt(n){n._o=Ct,n._n=h,n._s=p,n._l=bt,n._t=vt,n._q=I,n._i=z,n._m=kt,n._f=yt,n._k=_t,n._b=xt,n._v=vn,n._e=bn,n._u=St,n._g=Et,n._d=Ot,n._p=jt}function Pt(n,t,e,o,a){var s,u=this,l=a.options;y(o,"_uid")?(s=Object.create(o))._original=o:(s=o,o=o._original);var c=i(l._compiled),d=!c;this.data=n,this.props=t,this.children=e,this.parent=o,this.listeners=n.on||r,this.injections=ft(l.inject,o),this.slots=function(){return u.$slots||gt(n.scopedSlots,u.$slots=pt(e,o)),u.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return gt(n.scopedSlots,this.slots())}}),c&&(this.$options=l,this.$slots=this.slots(),this.$scopedSlots=gt(n.scopedSlots,this.$slots)),l._scopeId?this._c=function(n,t,e,r){var a=Bt(s,n,t,e,r,d);return a&&!Array.isArray(a)&&(a.fnScopeId=l._scopeId,a.fnContext=o),a}:this._c=function(n,t,e,r){return Bt(s,n,t,e,r,d)}}function It(n,t,e,r,o){var a=yn(n);return a.fnContext=e,a.fnOptions=r,t.slot&&((a.data||(a.data={})).slot=t.slot),a}function zt(n,t){for(var e in t)n[x(e)]=t[e]}Mt(Pt.prototype);var Rt={init:function(n,t){if(n.componentInstance&&!n.componentInstance._isDestroyed&&n.data.keepAlive){var e=n;Rt.prepatch(e,e)}else(n.componentInstance=function(n,t){var e={_isComponent:!0,_parentVnode:n,parent:t},r=n.data.inlineTemplate;return a(r)&&(e.render=r.render,e.staticRenderFns=r.staticRenderFns),new n.componentOptions.Ctor(e)}(n,Jt)).$mount(t?n.elm:void 0,t)},prepatch:function(n,t){var e=t.componentOptions;!function(n,t,e,o,a){var i=o.data.scopedSlots,s=n.$scopedSlots,u=!!(i&&!i.$stable||s!==r&&!s.$stable||i&&n.$scopedSlots.$key!==i.$key),l=!!(a||n.$options._renderChildren||u);if(n.$options._parentVnode=o,n.$vnode=o,n._vnode&&(n._vnode.parent=o),n.$options._renderChildren=a,n.$attrs=o.data.attrs||r,n.$listeners=e||r,t&&n.$options.props){Cn(!1);for(var c=n._props,d=n.$options._propKeys||[],f=0;f<d.length;f++){var p=d[f],h=n.$options.props;c[p]=Ln(p,h,t,n)}Cn(!0),n.$options.propsData=t}e=e||r;var g=n.$options._parentListeners;n.$options._parentListeners=e,Xt(n,e,g),l&&(n.$slots=pt(a,o.context),n.$forceUpdate())}(t.componentInstance=n.componentInstance,e.propsData,e.listeners,t,e.children)},insert:function(n){var t,e=n.context,r=n.componentInstance;r._isMounted||(r._isMounted=!0,ne(r,"mounted")),n.data.keepAlive&&(e._isMounted?((t=r)._inactive=!1,ee.push(t)):Qt(r,!0))},destroy:function(n){var t=n.componentInstance;t._isDestroyed||(n.data.keepAlive?function n(t,e){if(!(e&&(t._directInactive=!0,Yt(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)n(t.$children[r]);ne(t,"deactivated")}}(t,!0):t.$destroy())}},Dt=Object.keys(Rt);function Nt(n,t,e,s,l){if(!o(n)){var c=e.$options._base;if(u(n)&&(n=c.extend(n)),"function"==typeof n){var d;if(o(n.cid)&&void 0===(n=function(n,t){if(i(n.error)&&a(n.errorComp))return n.errorComp;if(a(n.resolved))return n.resolved;var e=Ut;if(e&&a(n.owners)&&-1===n.owners.indexOf(e)&&n.owners.push(e),i(n.loading)&&a(n.loadingComp))return n.loadingComp;if(e&&!a(n.owners)){var r=n.owners=[e],s=!0,l=null,c=null;e.$on("hook:destroyed",(function(){return b(r,e)}));var d=function(n){for(var t=0,e=r.length;t<e;t++)r[t].$forceUpdate();n&&(r.length=0,null!==l&&(clearTimeout(l),l=null),null!==c&&(clearTimeout(c),c=null))},p=R((function(e){n.resolved=qt(e,t),s?r.length=0:d(!0)})),h=R((function(t){a(n.errorComp)&&(n.error=!0,d(!0))})),g=n(p,h);return u(g)&&(f(g)?o(n.resolved)&&g.then(p,h):f(g.component)&&(g.component.then(p,h),a(g.error)&&(n.errorComp=qt(g.error,t)),a(g.loading)&&(n.loadingComp=qt(g.loading,t),0===g.delay?n.loading=!0:l=setTimeout((function(){l=null,o(n.resolved)&&o(n.error)&&(n.loading=!0,d(!1))}),g.delay||200)),a(g.timeout)&&(c=setTimeout((function(){c=null,o(n.resolved)&&h(null)}),g.timeout)))),s=!1,n.loading?n.loadingComp:n.resolved}}(d=n,c)))return function(n,t,e,r,o){var a=bn();return a.asyncFactory=n,a.asyncMeta={data:t,context:e,children:r,tag:o},a}(d,t,e,s,l);t=t||{},we(n),a(t.model)&&function(n,t){var e=n.model&&n.model.prop||"value",r=n.model&&n.model.event||"input";(t.attrs||(t.attrs={}))[e]=t.model.value;var o=t.on||(t.on={}),i=o[r],s=t.model.callback;a(i)?(Array.isArray(i)?-1===i.indexOf(s):i!==s)&&(o[r]=[s].concat(i)):o[r]=s}(n.options,t);var p=function(n,t,e){var r=t.options.props;if(!o(r)){var i={},s=n.attrs,u=n.props;if(a(s)||a(u))for(var l in r){var c=A(l);lt(i,u,l,c,!0)||lt(i,s,l,c,!1)}return i}}(t,n);if(i(n.options.functional))return function(n,t,e,o,i){var s=n.options,u={},l=s.props;if(a(l))for(var c in l)u[c]=Ln(c,l,t||r);else a(e.attrs)&&zt(u,e.attrs),a(e.props)&&zt(u,e.props);var d=new Pt(e,u,i,o,n),f=s.render.call(null,d._c,d);if(f instanceof $n)return It(f,e,d.parent,s);if(Array.isArray(f)){for(var p=ct(f)||[],h=new Array(p.length),g=0;g<p.length;g++)h[g]=It(p[g],e,d.parent,s);return h}}(n,p,t,e,s);var h=t.on;if(t.on=t.nativeOn,i(n.options.abstract)){var g=t.slot;t={},g&&(t.slot=g)}!function(n){for(var t=n.hook||(n.hook={}),e=0;e<Dt.length;e++){var r=Dt[e],o=t[r],a=Rt[r];o===a||o&&o._merged||(t[r]=o?Lt(a,o):a)}}(t);var $=n.options.name||l;return new $n("vue-component-"+n.cid+($?"-"+$:""),t,void 0,void 0,void 0,e,{Ctor:n,propsData:p,listeners:h,tag:l,children:s},d)}}}function Lt(n,t){var e=function(e,r){n(e,r),t(e,r)};return e._merged=!0,e}function Bt(n,t,e,r,l,c){return(Array.isArray(e)||s(e))&&(l=r,r=e,e=void 0),i(c)&&(l=2),function(n,t,e,r,s){return a(e)&&a(e.__ob__)?bn():(a(e)&&a(e.is)&&(t=e.is),t?(Array.isArray(r)&&"function"==typeof r[0]&&((e=e||{}).scopedSlots={default:r[0]},r.length=0),2===s?r=ct(r):1===s&&(r=function(n){for(var t=0;t<n.length;t++)if(Array.isArray(n[t]))return Array.prototype.concat.apply([],n);return n}(r)),"string"==typeof t?(c=n.$vnode&&n.$vnode.ns||B.getTagNamespace(t),l=B.isReservedTag(t)?new $n(B.parsePlatformTagName(t),e,r,void 0,void 0,n):e&&e.pre||!a(d=Nn(n.$options,"components",t))?new $n(t,e,r,void 0,void 0,n):Nt(d,e,n,r,t)):l=Nt(t,e,n,r),Array.isArray(l)?l:a(l)?(a(c)&&function n(t,e,r){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,r=!0),a(t.children))for(var s=0,u=t.children.length;s<u;s++){var l=t.children[s];a(l.tag)&&(o(l.ns)||i(r)&&"svg"!==l.tag)&&n(l,e,r)}}(l,c),a(e)&&function(n){u(n.style)&&ot(n.style),u(n.class)&&ot(n.class)}(e),l):bn()):bn());var l,c,d}(n,t,e,r,l)}var Ft,Ut=null;function qt(n,t){return(n.__esModule||ln&&"Module"===n[Symbol.toStringTag])&&(n=n.default),u(n)?t.extend(n):n}function Gt(n){return n.isComment&&n.asyncFactory}function Ht(n){if(Array.isArray(n))for(var t=0;t<n.length;t++){var e=n[t];if(a(e)&&(a(e.componentOptions)||Gt(e)))return e}}function Wt(n,t){Ft.$on(n,t)}function Zt(n,t){Ft.$off(n,t)}function Vt(n,t){var e=Ft;return function r(){null!==t.apply(null,arguments)&&e.$off(n,r)}}function Xt(n,t,e){Ft=n,st(t,e||{},Wt,Zt,Vt,n),Ft=void 0}var Jt=null;function Kt(n){var t=Jt;return Jt=n,function(){Jt=t}}function Yt(n){for(;n&&(n=n.$parent);)if(n._inactive)return!0;return!1}function Qt(n,t){if(t){if(n._directInactive=!1,Yt(n))return}else if(n._directInactive)return;if(n._inactive||null===n._inactive){n._inactive=!1;for(var e=0;e<n.$children.length;e++)Qt(n.$children[e]);ne(n,"activated")}}function ne(n,t){hn();var e=n.$options[t],r=t+" hook";if(e)for(var o=0,a=e.length;o<a;o++)Gn(e[o],n,null,n,r);n._hasHookEvent&&n.$emit("hook:"+t),gn()}var te=[],ee=[],re={},oe=!1,ae=!1,ie=0,se=0,ue=Date.now;if(W&&!J){var le=window.performance;le&&"function"==typeof le.now&&ue()>document.createEvent("Event").timeStamp&&(ue=function(){return le.now()})}function ce(){var n,t;for(se=ue(),ae=!0,te.sort((function(n,t){return n.id-t.id})),ie=0;ie<te.length;ie++)(n=te[ie]).before&&n.before(),t=n.id,re[t]=null,n.run();var e=ee.slice(),r=te.slice();ie=te.length=ee.length=0,re={},oe=ae=!1,function(n){for(var t=0;t<n.length;t++)n[t]._inactive=!0,Qt(n[t],!0)}(e),function(n){for(var t=n.length;t--;){var e=n[t],r=e.vm;r._watcher===e&&r._isMounted&&!r._isDestroyed&&ne(r,"updated")}}(r),an&&B.devtools&&an.emit("flush")}var de=0,fe=function(n,t,e,r,o){this.vm=n,o&&(n._watcher=this),n._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=e,this.id=++de,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new un,this.newDepIds=new un,this.expression="","function"==typeof t?this.getter=t:(this.getter=function(n){if(!G.test(n)){var t=n.split(".");return function(n){for(var e=0;e<t.length;e++){if(!n)return;n=n[t[e]]}return n}}}(t),this.getter||(this.getter=j)),this.value=this.lazy?void 0:this.get()};fe.prototype.get=function(){var n;hn(this);var t=this.vm;try{n=this.getter.call(t,t)}catch(n){if(!this.user)throw n;qn(n,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&ot(n),gn(),this.cleanupDeps()}return n},fe.prototype.addDep=function(n){var t=n.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(n),this.depIds.has(t)||n.addSub(this))},fe.prototype.cleanupDeps=function(){for(var n=this.deps.length;n--;){var t=this.deps[n];this.newDepIds.has(t.id)||t.removeSub(this)}var e=this.depIds;this.depIds=this.newDepIds,this.newDepIds=e,this.newDepIds.clear(),e=this.deps,this.deps=this.newDeps,this.newDeps=e,this.newDeps.length=0},fe.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(n){var t=n.id;if(null==re[t]){if(re[t]=!0,ae){for(var e=te.length-1;e>ie&&te[e].id>n.id;)e--;te.splice(e+1,0,n)}else te.push(n);oe||(oe=!0,et(ce))}}(this)},fe.prototype.run=function(){if(this.active){var n=this.get();if(n!==this.value||u(n)||this.deep){var t=this.value;if(this.value=n,this.user)try{this.cb.call(this.vm,n,t)}catch(n){qn(n,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,n,t)}}},fe.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fe.prototype.depend=function(){for(var n=this.deps.length;n--;)this.deps[n].depend()},fe.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);for(var n=this.deps.length;n--;)this.deps[n].removeSub(this);this.active=!1}};var pe={enumerable:!0,configurable:!0,get:j,set:j};function he(n,t,e){pe.get=function(){return this[t][e]},pe.set=function(n){this[t][e]=n},Object.defineProperty(n,e,pe)}var ge={lazy:!0};function $e(n,t,e){var r=!on();"function"==typeof e?(pe.get=r?me(t):be(e),pe.set=j):(pe.get=e.get?r&&!1!==e.cache?me(t):be(e.get):j,pe.set=e.set||j),Object.defineProperty(n,t,pe)}function me(n){return function(){var t=this._computedWatchers&&this._computedWatchers[n];if(t)return t.dirty&&t.evaluate(),fn.target&&t.depend(),t.value}}function be(n){return function(){return n.call(this,this)}}function ve(n,t,e,r){return c(e)&&(r=e,e=e.handler),"string"==typeof e&&(e=n[e]),n.$watch(t,e,r)}var ye=0;function we(n){var t=n.options;if(n.super){var e=we(n.super);if(e!==n.superOptions){n.superOptions=e;var r=function(n){var t,e=n.options,r=n.sealedOptions;for(var o in e)e[o]!==r[o]&&(t||(t={}),t[o]=e[o]);return t}(n);r&&S(n.extendOptions,r),(t=n.options=Dn(e,n.extendOptions)).name&&(t.components[t.name]=n)}}return t}function _e(n){this._init(n)}function xe(n){return n&&(n.Ctor.options.name||n.tag)}function ke(n,t){return Array.isArray(n)?n.indexOf(t)>-1:"string"==typeof n?n.split(",").indexOf(t)>-1:(e=n,"[object RegExp]"===l.call(e)&&n.test(t));var e}function Ce(n,t){var e=n.cache,r=n.keys,o=n._vnode;for(var a in e){var i=e[a];if(i){var s=xe(i.componentOptions);s&&!t(s)&&Ae(e,a,r,o)}}}function Ae(n,t,e,r){var o=n[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),n[t]=null,b(e,t)}!function(n){n.prototype._init=function(n){var t=this;t._uid=ye++,t._isVue=!0,n&&n._isComponent?function(n,t){var e=n.$options=Object.create(n.constructor.options),r=t._parentVnode;e.parent=t.parent,e._parentVnode=r;var o=r.componentOptions;e.propsData=o.propsData,e._parentListeners=o.listeners,e._renderChildren=o.children,e._componentTag=o.tag,t.render&&(e.render=t.render,e.staticRenderFns=t.staticRenderFns)}(t,n):t.$options=Dn(we(t.constructor),n||{},t),t._renderProxy=t,t._self=t,function(n){var t=n.$options,e=t.parent;if(e&&!t.abstract){for(;e.$options.abstract&&e.$parent;)e=e.$parent;e.$children.push(n)}n.$parent=e,n.$root=e?e.$root:n,n.$children=[],n.$refs={},n._watcher=null,n._inactive=null,n._directInactive=!1,n._isMounted=!1,n._isDestroyed=!1,n._isBeingDestroyed=!1}(t),function(n){n._events=Object.create(null),n._hasHookEvent=!1;var t=n.$options._parentListeners;t&&Xt(n,t)}(t),function(n){n._vnode=null,n._staticTrees=null;var t=n.$options,e=n.$vnode=t._parentVnode,o=e&&e.context;n.$slots=pt(t._renderChildren,o),n.$scopedSlots=r,n._c=function(t,e,r,o){return Bt(n,t,e,r,o,!1)},n.$createElement=function(t,e,r,o){return Bt(n,t,e,r,o,!0)};var a=e&&e.data;En(n,"$attrs",a&&a.attrs||r,null,!0),En(n,"$listeners",t._parentListeners||r,null,!0)}(t),ne(t,"beforeCreate"),function(n){var t=ft(n.$options.inject,n);t&&(Cn(!1),Object.keys(t).forEach((function(e){En(n,e,t[e])})),Cn(!0))}(t),function(n){n._watchers=[];var t=n.$options;t.props&&function(n,t){var e=n.$options.propsData||{},r=n._props={},o=n.$options._propKeys=[];n.$parent&&Cn(!1);var a=function(a){o.push(a);var i=Ln(a,t,e,n);En(r,a,i),a in n||he(n,"_props",a)};for(var i in t)a(i);Cn(!0)}(n,t.props),t.methods&&function(n,t){for(var e in n.$options.props,t)n[e]="function"!=typeof t[e]?j:T(t[e],n)}(n,t.methods),t.data?function(n){var t=n.$options.data;c(t=n._data="function"==typeof t?function(n,t){hn();try{return n.call(t,t)}catch(n){return qn(n,t,"data()"),{}}finally{gn()}}(t,n):t||{})||(t={});for(var e,r=Object.keys(t),o=n.$options.props,a=(n.$options.methods,r.length);a--;){var i=r[a];o&&y(o,i)||36!==(e=(i+"").charCodeAt(0))&&95!==e&&he(n,"_data",i)}Tn(t,!0)}(n):Tn(n._data={},!0),t.computed&&function(n,t){var e=n._computedWatchers=Object.create(null),r=on();for(var o in t){var a=t[o],i="function"==typeof a?a:a.get;r||(e[o]=new fe(n,i||j,j,ge)),o in n||$e(n,o,a)}}(n,t.computed),t.watch&&t.watch!==tn&&function(n,t){for(var e in t){var r=t[e];if(Array.isArray(r))for(var o=0;o<r.length;o++)ve(n,e,r[o]);else ve(n,e,r)}}(n,t.watch)}(t),function(n){var t=n.$options.provide;t&&(n._provided="function"==typeof t?t.call(n):t)}(t),ne(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(_e),function(n){Object.defineProperty(n.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(n.prototype,"$props",{get:function(){return this._props}}),n.prototype.$set=Sn,n.prototype.$delete=On,n.prototype.$watch=function(n,t,e){if(c(t))return ve(this,n,t,e);(e=e||{}).user=!0;var r=new fe(this,n,t,e);if(e.immediate)try{t.call(this,r.value)}catch(n){qn(n,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(_e),function(n){var t=/^hook:/;n.prototype.$on=function(n,e){var r=this;if(Array.isArray(n))for(var o=0,a=n.length;o<a;o++)r.$on(n[o],e);else(r._events[n]||(r._events[n]=[])).push(e),t.test(n)&&(r._hasHookEvent=!0);return r},n.prototype.$once=function(n,t){var e=this;function r(){e.$off(n,r),t.apply(e,arguments)}return r.fn=t,e.$on(n,r),e},n.prototype.$off=function(n,t){var e=this;if(!arguments.length)return e._events=Object.create(null),e;if(Array.isArray(n)){for(var r=0,o=n.length;r<o;r++)e.$off(n[r],t);return e}var a,i=e._events[n];if(!i)return e;if(!t)return e._events[n]=null,e;for(var s=i.length;s--;)if((a=i[s])===t||a.fn===t){i.splice(s,1);break}return e},n.prototype.$emit=function(n){var t=this._events[n];if(t){t=t.length>1?E(t):t;for(var e=E(arguments,1),r='event handler for "'+n+'"',o=0,a=t.length;o<a;o++)Gn(t[o],this,e,this,r)}return this}}(_e),function(n){n.prototype._update=function(n,t){var e=this,r=e.$el,o=e._vnode,a=Kt(e);e._vnode=n,e.$el=o?e.__patch__(o,n):e.__patch__(e.$el,n,t,!1),a(),r&&(r.__vue__=null),e.$el&&(e.$el.__vue__=e),e.$vnode&&e.$parent&&e.$vnode===e.$parent._vnode&&(e.$parent.$el=e.$el)},n.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},n.prototype.$destroy=function(){var n=this;if(!n._isBeingDestroyed){ne(n,"beforeDestroy"),n._isBeingDestroyed=!0;var t=n.$parent;!t||t._isBeingDestroyed||n.$options.abstract||b(t.$children,n),n._watcher&&n._watcher.teardown();for(var e=n._watchers.length;e--;)n._watchers[e].teardown();n._data.__ob__&&n._data.__ob__.vmCount--,n._isDestroyed=!0,n.__patch__(n._vnode,null),ne(n,"destroyed"),n.$off(),n.$el&&(n.$el.__vue__=null),n.$vnode&&(n.$vnode.parent=null)}}}(_e),function(n){Mt(n.prototype),n.prototype.$nextTick=function(n){return et(n,this)},n.prototype._render=function(){var n,t=this,e=t.$options,r=e.render,o=e._parentVnode;o&&(t.$scopedSlots=gt(o.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=o;try{Ut=t,n=r.call(t._renderProxy,t.$createElement)}catch(e){qn(e,t,"render"),n=t._vnode}finally{Ut=null}return Array.isArray(n)&&1===n.length&&(n=n[0]),n instanceof $n||(n=bn()),n.parent=o,n}}(_e);var Te=[String,RegExp,Array],Ee={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Te,exclude:Te,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var n in this.cache)Ae(this.cache,n,this.keys)},mounted:function(){var n=this;this.$watch("include",(function(t){Ce(n,(function(n){return ke(t,n)}))})),this.$watch("exclude",(function(t){Ce(n,(function(n){return!ke(t,n)}))}))},render:function(){var n=this.$slots.default,t=Ht(n),e=t&&t.componentOptions;if(e){var r=xe(e),o=this.include,a=this.exclude;if(o&&(!r||!ke(o,r))||a&&r&&ke(a,r))return t;var i=this.cache,s=this.keys,u=null==t.key?e.Ctor.cid+(e.tag?"::"+e.tag:""):t.key;i[u]?(t.componentInstance=i[u].componentInstance,b(s,u),s.push(u)):(i[u]=t,s.push(u),this.max&&s.length>parseInt(this.max)&&Ae(i,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||n&&n[0]}}};!function(n){var t={get:function(){return B}};Object.defineProperty(n,"config",t),n.util={warn:cn,extend:S,mergeOptions:Dn,defineReactive:En},n.set=Sn,n.delete=On,n.nextTick=et,n.observable=function(n){return Tn(n),n},n.options=Object.create(null),N.forEach((function(t){n.options[t+"s"]=Object.create(null)})),n.options._base=n,S(n.options.components,Ee),function(n){n.use=function(n){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(n)>-1)return this;var e=E(arguments,1);return e.unshift(this),"function"==typeof n.install?n.install.apply(n,e):"function"==typeof n&&n.apply(null,e),t.push(n),this}}(n),function(n){n.mixin=function(n){return this.options=Dn(this.options,n),this}}(n),function(n){n.cid=0;var t=1;n.extend=function(n){n=n||{};var e=this,r=e.cid,o=n._Ctor||(n._Ctor={});if(o[r])return o[r];var a=n.name||e.options.name,i=function(n){this._init(n)};return(i.prototype=Object.create(e.prototype)).constructor=i,i.cid=t++,i.options=Dn(e.options,n),i.super=e,i.options.props&&function(n){var t=n.options.props;for(var e in t)he(n.prototype,"_props",e)}(i),i.options.computed&&function(n){var t=n.options.computed;for(var e in t)$e(n.prototype,e,t[e])}(i),i.extend=e.extend,i.mixin=e.mixin,i.use=e.use,N.forEach((function(n){i[n]=e[n]})),a&&(i.options.components[a]=i),i.superOptions=e.options,i.extendOptions=n,i.sealedOptions=S({},i.options),o[r]=i,i}}(n),function(n){N.forEach((function(t){n[t]=function(n,e){return e?("component"===t&&c(e)&&(e.name=e.name||n,e=this.options._base.extend(e)),"directive"===t&&"function"==typeof e&&(e={bind:e,update:e}),this.options[t+"s"][n]=e,e):this.options[t+"s"][n]}}))}(n)}(_e),Object.defineProperty(_e.prototype,"$isServer",{get:on}),Object.defineProperty(_e.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(_e,"FunctionalRenderContext",{value:Pt}),_e.version="2.6.12";var Se=g("style,class"),Oe=g("input,textarea,option,select,progress"),je=function(n,t,e){return"value"===e&&Oe(n)&&"button"!==t||"selected"===e&&"option"===n||"checked"===e&&"input"===n||"muted"===e&&"video"===n},Me=g("contenteditable,draggable,spellcheck"),Pe=g("events,caret,typing,plaintext-only"),Ie=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),ze="http://www.w3.org/1999/xlink",Re=function(n){return":"===n.charAt(5)&&"xlink"===n.slice(0,5)},De=function(n){return Re(n)?n.slice(6,n.length):""},Ne=function(n){return null==n||!1===n};function Le(n,t){return{staticClass:Be(n.staticClass,t.staticClass),class:a(n.class)?[n.class,t.class]:t.class}}function Be(n,t){return n?t?n+" "+t:n:t||""}function Fe(n){return Array.isArray(n)?function(n){for(var t,e="",r=0,o=n.length;r<o;r++)a(t=Fe(n[r]))&&""!==t&&(e&&(e+=" "),e+=t);return e}(n):u(n)?function(n){var t="";for(var e in n)n[e]&&(t&&(t+=" "),t+=e);return t}(n):"string"==typeof n?n:""}var Ue={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},qe=g("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Ge=g("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),He=function(n){return qe(n)||Ge(n)};function We(n){return Ge(n)?"svg":"math"===n?"math":void 0}var Ze=Object.create(null),Ve=g("text,number,password,search,email,tel,url");function Xe(n){return"string"==typeof n?document.querySelector(n)||document.createElement("div"):n}var Je=Object.freeze({createElement:function(n,t){var e=document.createElement(n);return"select"!==n||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&e.setAttribute("multiple","multiple"),e},createElementNS:function(n,t){return document.createElementNS(Ue[n],t)},createTextNode:function(n){return document.createTextNode(n)},createComment:function(n){return document.createComment(n)},insertBefore:function(n,t,e){n.insertBefore(t,e)},removeChild:function(n,t){n.removeChild(t)},appendChild:function(n,t){n.appendChild(t)},parentNode:function(n){return n.parentNode},nextSibling:function(n){return n.nextSibling},tagName:function(n){return n.tagName},setTextContent:function(n,t){n.textContent=t},setStyleScope:function(n,t){n.setAttribute(t,"")}}),Ke={create:function(n,t){Ye(t)},update:function(n,t){n.data.ref!==t.data.ref&&(Ye(n,!0),Ye(t))},destroy:function(n){Ye(n,!0)}};function Ye(n,t){var e=n.data.ref;if(a(e)){var r=n.context,o=n.componentInstance||n.elm,i=r.$refs;t?Array.isArray(i[e])?b(i[e],o):i[e]===o&&(i[e]=void 0):n.data.refInFor?Array.isArray(i[e])?i[e].indexOf(o)<0&&i[e].push(o):i[e]=[o]:i[e]=o}}var Qe=new $n("",{},[]),nr=["create","activate","update","remove","destroy"];function tr(n,t){return n.key===t.key&&(n.tag===t.tag&&n.isComment===t.isComment&&a(n.data)===a(t.data)&&function(n,t){if("input"!==n.tag)return!0;var e,r=a(e=n.data)&&a(e=e.attrs)&&e.type,o=a(e=t.data)&&a(e=e.attrs)&&e.type;return r===o||Ve(r)&&Ve(o)}(n,t)||i(n.isAsyncPlaceholder)&&n.asyncFactory===t.asyncFactory&&o(t.asyncFactory.error))}function er(n,t,e){var r,o,i={};for(r=t;r<=e;++r)a(o=n[r].key)&&(i[o]=r);return i}var rr={create:or,update:or,destroy:function(n){or(n,Qe)}};function or(n,t){(n.data.directives||t.data.directives)&&function(n,t){var e,r,o,a=n===Qe,i=t===Qe,s=ir(n.data.directives,n.context),u=ir(t.data.directives,t.context),l=[],c=[];for(e in u)r=s[e],o=u[e],r?(o.oldValue=r.value,o.oldArg=r.arg,ur(o,"update",t,n),o.def&&o.def.componentUpdated&&c.push(o)):(ur(o,"bind",t,n),o.def&&o.def.inserted&&l.push(o));if(l.length){var d=function(){for(var e=0;e<l.length;e++)ur(l[e],"inserted",t,n)};a?ut(t,"insert",d):d()}if(c.length&&ut(t,"postpatch",(function(){for(var e=0;e<c.length;e++)ur(c[e],"componentUpdated",t,n)})),!a)for(e in s)u[e]||ur(s[e],"unbind",n,n,i)}(n,t)}var ar=Object.create(null);function ir(n,t){var e,r,o=Object.create(null);if(!n)return o;for(e=0;e<n.length;e++)(r=n[e]).modifiers||(r.modifiers=ar),o[sr(r)]=r,r.def=Nn(t.$options,"directives",r.name);return o}function sr(n){return n.rawName||n.name+"."+Object.keys(n.modifiers||{}).join(".")}function ur(n,t,e,r,o){var a=n.def&&n.def[t];if(a)try{a(e.elm,n,e,r,o)}catch(r){qn(r,e.context,"directive "+n.name+" "+t+" hook")}}var lr=[Ke,rr];function cr(n,t){var e=t.componentOptions;if(!(a(e)&&!1===e.Ctor.options.inheritAttrs||o(n.data.attrs)&&o(t.data.attrs))){var r,i,s=t.elm,u=n.data.attrs||{},l=t.data.attrs||{};for(r in a(l.__ob__)&&(l=t.data.attrs=S({},l)),l)i=l[r],u[r]!==i&&dr(s,r,i);for(r in(J||Y)&&l.value!==u.value&&dr(s,"value",l.value),u)o(l[r])&&(Re(r)?s.removeAttributeNS(ze,De(r)):Me(r)||s.removeAttribute(r))}}function dr(n,t,e){n.tagName.indexOf("-")>-1?fr(n,t,e):Ie(t)?Ne(e)?n.removeAttribute(t):(e="allowfullscreen"===t&&"EMBED"===n.tagName?"true":t,n.setAttribute(t,e)):Me(t)?n.setAttribute(t,function(n,t){return Ne(t)||"false"===t?"false":"contenteditable"===n&&Pe(t)?t:"true"}(t,e)):Re(t)?Ne(e)?n.removeAttributeNS(ze,De(t)):n.setAttributeNS(ze,t,e):fr(n,t,e)}function fr(n,t,e){if(Ne(e))n.removeAttribute(t);else{if(J&&!K&&"TEXTAREA"===n.tagName&&"placeholder"===t&&""!==e&&!n.__ieph){var r=function(t){t.stopImmediatePropagation(),n.removeEventListener("input",r)};n.addEventListener("input",r),n.__ieph=!0}n.setAttribute(t,e)}}var pr={create:cr,update:cr};function hr(n,t){var e=t.elm,r=t.data,i=n.data;if(!(o(r.staticClass)&&o(r.class)&&(o(i)||o(i.staticClass)&&o(i.class)))){var s=function(n){for(var t=n.data,e=n,r=n;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=Le(r.data,t));for(;a(e=e.parent);)e&&e.data&&(t=Le(t,e.data));return function(n,t){return a(n)||a(t)?Be(n,Fe(t)):""}(t.staticClass,t.class)}(t),u=e._transitionClasses;a(u)&&(s=Be(s,Fe(u))),s!==e._prevClass&&(e.setAttribute("class",s),e._prevClass=s)}}var gr,$r,mr,br,vr,yr,wr={create:hr,update:hr},_r=/[\w).+\-_$\]]/;function xr(n){var t,e,r,o,a,i=!1,s=!1,u=!1,l=!1,c=0,d=0,f=0,p=0;for(r=0;r<n.length;r++)if(e=t,t=n.charCodeAt(r),i)39===t&&92!==e&&(i=!1);else if(s)34===t&&92!==e&&(s=!1);else if(u)96===t&&92!==e&&(u=!1);else if(l)47===t&&92!==e&&(l=!1);else if(124!==t||124===n.charCodeAt(r+1)||124===n.charCodeAt(r-1)||c||d||f){switch(t){case 34:s=!0;break;case 39:i=!0;break;case 96:u=!0;break;case 40:f++;break;case 41:f--;break;case 91:d++;break;case 93:d--;break;case 123:c++;break;case 125:c--}if(47===t){for(var h=r-1,g=void 0;h>=0&&" "===(g=n.charAt(h));h--);g&&_r.test(g)||(l=!0)}}else void 0===o?(p=r+1,o=n.slice(0,r).trim()):$();function $(){(a||(a=[])).push(n.slice(p,r).trim()),p=r+1}if(void 0===o?o=n.slice(0,r).trim():0!==p&&$(),a)for(r=0;r<a.length;r++)o=kr(o,a[r]);return o}function kr(n,t){var e=t.indexOf("(");if(e<0)return'_f("'+t+'")('+n+")";var r=t.slice(0,e),o=t.slice(e+1);return'_f("'+r+'")('+n+(")"!==o?","+o:o)}function Cr(n,t){console.error("[Vue compiler]: "+n)}function Ar(n,t){return n?n.map((function(n){return n[t]})).filter((function(n){return n})):[]}function Tr(n,t,e,r,o){(n.props||(n.props=[])).push(Rr({name:t,value:e,dynamic:o},r)),n.plain=!1}function Er(n,t,e,r,o){(o?n.dynamicAttrs||(n.dynamicAttrs=[]):n.attrs||(n.attrs=[])).push(Rr({name:t,value:e,dynamic:o},r)),n.plain=!1}function Sr(n,t,e,r){n.attrsMap[t]=e,n.attrsList.push(Rr({name:t,value:e},r))}function Or(n,t,e,r,o,a,i,s){(n.directives||(n.directives=[])).push(Rr({name:t,rawName:e,value:r,arg:o,isDynamicArg:a,modifiers:i},s)),n.plain=!1}function jr(n,t,e){return e?"_p("+t+',"'+n+'")':n+t}function Mr(n,t,e,o,a,i,s,u){var l;(o=o||r).right?u?t="("+t+")==='click'?'contextmenu':("+t+")":"click"===t&&(t="contextmenu",delete o.right):o.middle&&(u?t="("+t+")==='click'?'mouseup':("+t+")":"click"===t&&(t="mouseup")),o.capture&&(delete o.capture,t=jr("!",t,u)),o.once&&(delete o.once,t=jr("~",t,u)),o.passive&&(delete o.passive,t=jr("&",t,u)),o.native?(delete o.native,l=n.nativeEvents||(n.nativeEvents={})):l=n.events||(n.events={});var c=Rr({value:e.trim(),dynamic:u},s);o!==r&&(c.modifiers=o);var d=l[t];Array.isArray(d)?a?d.unshift(c):d.push(c):l[t]=d?a?[c,d]:[d,c]:c,n.plain=!1}function Pr(n,t,e){var r=Ir(n,":"+t)||Ir(n,"v-bind:"+t);if(null!=r)return xr(r);if(!1!==e){var o=Ir(n,t);if(null!=o)return JSON.stringify(o)}}function Ir(n,t,e){var r;if(null!=(r=n.attrsMap[t]))for(var o=n.attrsList,a=0,i=o.length;a<i;a++)if(o[a].name===t){o.splice(a,1);break}return e&&delete n.attrsMap[t],r}function zr(n,t){for(var e=n.attrsList,r=0,o=e.length;r<o;r++){var a=e[r];if(t.test(a.name))return e.splice(r,1),a}}function Rr(n,t){return t&&(null!=t.start&&(n.start=t.start),null!=t.end&&(n.end=t.end)),n}function Dr(n,t,e){var r=e||{},o=r.number,a="$$v";r.trim&&(a="(typeof $$v === 'string'? $$v.trim(): $$v)"),o&&(a="_n("+a+")");var i=Nr(t,a);n.model={value:"("+t+")",expression:JSON.stringify(t),callback:"function ($$v) {"+i+"}"}}function Nr(n,t){var e=function(n){if(n=n.trim(),gr=n.length,n.indexOf("[")<0||n.lastIndexOf("]")<gr-1)return(br=n.lastIndexOf("."))>-1?{exp:n.slice(0,br),key:'"'+n.slice(br+1)+'"'}:{exp:n,key:null};for($r=n,br=vr=yr=0;!Br();)Fr(mr=Lr())?qr(mr):91===mr&&Ur(mr);return{exp:n.slice(0,vr),key:n.slice(vr+1,yr)}}(n);return null===e.key?n+"="+t:"$set("+e.exp+", "+e.key+", "+t+")"}function Lr(){return $r.charCodeAt(++br)}function Br(){return br>=gr}function Fr(n){return 34===n||39===n}function Ur(n){var t=1;for(vr=br;!Br();)if(Fr(n=Lr()))qr(n);else if(91===n&&t++,93===n&&t--,0===t){yr=br;break}}function qr(n){for(var t=n;!Br()&&(n=Lr())!==t;);}var Gr;function Hr(n,t,e){var r=Gr;return function o(){null!==t.apply(null,arguments)&&Vr(n,o,e,r)}}var Wr=Vn&&!(nn&&Number(nn[1])<=53);function Zr(n,t,e,r){if(Wr){var o=se,a=t;t=a._wrapper=function(n){if(n.target===n.currentTarget||n.timeStamp>=o||n.timeStamp<=0||n.target.ownerDocument!==document)return a.apply(this,arguments)}}Gr.addEventListener(n,t,en?{capture:e,passive:r}:e)}function Vr(n,t,e,r){(r||Gr).removeEventListener(n,t._wrapper||t,e)}function Xr(n,t){if(!o(n.data.on)||!o(t.data.on)){var e=t.data.on||{},r=n.data.on||{};Gr=t.elm,function(n){if(a(n.__r)){var t=J?"change":"input";n[t]=[].concat(n.__r,n[t]||[]),delete n.__r}a(n.__c)&&(n.change=[].concat(n.__c,n.change||[]),delete n.__c)}(e),st(e,r,Zr,Vr,Hr,t.context),Gr=void 0}}var Jr,Kr={create:Xr,update:Xr};function Yr(n,t){if(!o(n.data.domProps)||!o(t.data.domProps)){var e,r,i=t.elm,s=n.data.domProps||{},u=t.data.domProps||{};for(e in a(u.__ob__)&&(u=t.data.domProps=S({},u)),s)e in u||(i[e]="");for(e in u){if(r=u[e],"textContent"===e||"innerHTML"===e){if(t.children&&(t.children.length=0),r===s[e])continue;1===i.childNodes.length&&i.removeChild(i.childNodes[0])}if("value"===e&&"PROGRESS"!==i.tagName){i._value=r;var l=o(r)?"":String(r);Qr(i,l)&&(i.value=l)}else if("innerHTML"===e&&Ge(i.tagName)&&o(i.innerHTML)){(Jr=Jr||document.createElement("div")).innerHTML="<svg>"+r+"</svg>";for(var c=Jr.firstChild;i.firstChild;)i.removeChild(i.firstChild);for(;c.firstChild;)i.appendChild(c.firstChild)}else if(r!==s[e])try{i[e]=r}catch(n){}}}}function Qr(n,t){return!n.composing&&("OPTION"===n.tagName||function(n,t){var e=!0;try{e=document.activeElement!==n}catch(n){}return e&&n.value!==t}(n,t)||function(n,t){var e=n.value,r=n._vModifiers;if(a(r)){if(r.number)return h(e)!==h(t);if(r.trim)return e.trim()!==t.trim()}return e!==t}(n,t))}var no={create:Yr,update:Yr},to=w((function(n){var t={},e=/:(.+)/;return n.split(/;(?![^(]*\))/g).forEach((function(n){if(n){var r=n.split(e);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function eo(n){var t=ro(n.style);return n.staticStyle?S(n.staticStyle,t):t}function ro(n){return Array.isArray(n)?O(n):"string"==typeof n?to(n):n}var oo,ao=/^--/,io=/\s*!important$/,so=function(n,t,e){if(ao.test(t))n.style.setProperty(t,e);else if(io.test(e))n.style.setProperty(A(t),e.replace(io,""),"important");else{var r=lo(t);if(Array.isArray(e))for(var o=0,a=e.length;o<a;o++)n.style[r]=e[o];else n.style[r]=e}},uo=["Webkit","Moz","ms"],lo=w((function(n){if(oo=oo||document.createElement("div").style,"filter"!==(n=x(n))&&n in oo)return n;for(var t=n.charAt(0).toUpperCase()+n.slice(1),e=0;e<uo.length;e++){var r=uo[e]+t;if(r in oo)return r}}));function co(n,t){var e=t.data,r=n.data;if(!(o(e.staticStyle)&&o(e.style)&&o(r.staticStyle)&&o(r.style))){var i,s,u=t.elm,l=r.staticStyle,c=r.normalizedStyle||r.style||{},d=l||c,f=ro(t.data.style)||{};t.data.normalizedStyle=a(f.__ob__)?S({},f):f;var p=function(n,t){for(var e,r={},o=n;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(e=eo(o.data))&&S(r,e);(e=eo(n.data))&&S(r,e);for(var a=n;a=a.parent;)a.data&&(e=eo(a.data))&&S(r,e);return r}(t);for(s in d)o(p[s])&&so(u,s,"");for(s in p)(i=p[s])!==d[s]&&so(u,s,null==i?"":i)}}var fo={create:co,update:co},po=/\s+/;function ho(n,t){if(t&&(t=t.trim()))if(n.classList)t.indexOf(" ")>-1?t.split(po).forEach((function(t){return n.classList.add(t)})):n.classList.add(t);else{var e=" "+(n.getAttribute("class")||"")+" ";e.indexOf(" "+t+" ")<0&&n.setAttribute("class",(e+t).trim())}}function go(n,t){if(t&&(t=t.trim()))if(n.classList)t.indexOf(" ")>-1?t.split(po).forEach((function(t){return n.classList.remove(t)})):n.classList.remove(t),n.classList.length||n.removeAttribute("class");else{for(var e=" "+(n.getAttribute("class")||"")+" ",r=" "+t+" ";e.indexOf(r)>=0;)e=e.replace(r," ");(e=e.trim())?n.setAttribute("class",e):n.removeAttribute("class")}}function $o(n){if(n){if("object"==typeof n){var t={};return!1!==n.css&&S(t,mo(n.name||"v")),S(t,n),t}return"string"==typeof n?mo(n):void 0}}var mo=w((function(n){return{enterClass:n+"-enter",enterToClass:n+"-enter-to",enterActiveClass:n+"-enter-active",leaveClass:n+"-leave",leaveToClass:n+"-leave-to",leaveActiveClass:n+"-leave-active"}})),bo=W&&!K,vo="transition",yo="animation",wo="transition",_o="transitionend",xo="animation",ko="animationend";bo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(wo="WebkitTransition",_o="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(xo="WebkitAnimation",ko="webkitAnimationEnd"));var Co=W?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(n){return n()};function Ao(n){Co((function(){Co(n)}))}function To(n,t){var e=n._transitionClasses||(n._transitionClasses=[]);e.indexOf(t)<0&&(e.push(t),ho(n,t))}function Eo(n,t){n._transitionClasses&&b(n._transitionClasses,t),go(n,t)}function So(n,t,e){var r=jo(n,t),o=r.type,a=r.timeout,i=r.propCount;if(!o)return e();var s=o===vo?_o:ko,u=0,l=function(){n.removeEventListener(s,c),e()},c=function(t){t.target===n&&++u>=i&&l()};setTimeout((function(){u<i&&l()}),a+1),n.addEventListener(s,c)}var Oo=/\b(transform|all)(,|$)/;function jo(n,t){var e,r=window.getComputedStyle(n),o=(r[wo+"Delay"]||"").split(", "),a=(r[wo+"Duration"]||"").split(", "),i=Mo(o,a),s=(r[xo+"Delay"]||"").split(", "),u=(r[xo+"Duration"]||"").split(", "),l=Mo(s,u),c=0,d=0;return t===vo?i>0&&(e=vo,c=i,d=a.length):t===yo?l>0&&(e=yo,c=l,d=u.length):d=(e=(c=Math.max(i,l))>0?i>l?vo:yo:null)?e===vo?a.length:u.length:0,{type:e,timeout:c,propCount:d,hasTransform:e===vo&&Oo.test(r[wo+"Property"])}}function Mo(n,t){for(;n.length<t.length;)n=n.concat(n);return Math.max.apply(null,t.map((function(t,e){return Po(t)+Po(n[e])})))}function Po(n){return 1e3*Number(n.slice(0,-1).replace(",","."))}function Io(n,t){var e=n.elm;a(e._leaveCb)&&(e._leaveCb.cancelled=!0,e._leaveCb());var r=$o(n.data.transition);if(!o(r)&&!a(e._enterCb)&&1===e.nodeType){for(var i=r.css,s=r.type,l=r.enterClass,c=r.enterToClass,d=r.enterActiveClass,f=r.appearClass,p=r.appearToClass,g=r.appearActiveClass,$=r.beforeEnter,m=r.enter,b=r.afterEnter,v=r.enterCancelled,y=r.beforeAppear,w=r.appear,_=r.afterAppear,x=r.appearCancelled,k=r.duration,C=Jt,A=Jt.$vnode;A&&A.parent;)C=A.context,A=A.parent;var T=!C._isMounted||!n.isRootInsert;if(!T||w||""===w){var E=T&&f?f:l,S=T&&g?g:d,O=T&&p?p:c,j=T&&y||$,M=T&&"function"==typeof w?w:m,P=T&&_||b,I=T&&x||v,z=h(u(k)?k.enter:k),D=!1!==i&&!K,N=Do(M),L=e._enterCb=R((function(){D&&(Eo(e,O),Eo(e,S)),L.cancelled?(D&&Eo(e,E),I&&I(e)):P&&P(e),e._enterCb=null}));n.data.show||ut(n,"insert",(function(){var t=e.parentNode,r=t&&t._pending&&t._pending[n.key];r&&r.tag===n.tag&&r.elm._leaveCb&&r.elm._leaveCb(),M&&M(e,L)})),j&&j(e),D&&(To(e,E),To(e,S),Ao((function(){Eo(e,E),L.cancelled||(To(e,O),N||(Ro(z)?setTimeout(L,z):So(e,s,L)))}))),n.data.show&&(t&&t(),M&&M(e,L)),D||N||L()}}}function zo(n,t){var e=n.elm;a(e._enterCb)&&(e._enterCb.cancelled=!0,e._enterCb());var r=$o(n.data.transition);if(o(r)||1!==e.nodeType)return t();if(!a(e._leaveCb)){var i=r.css,s=r.type,l=r.leaveClass,c=r.leaveToClass,d=r.leaveActiveClass,f=r.beforeLeave,p=r.leave,g=r.afterLeave,$=r.leaveCancelled,m=r.delayLeave,b=r.duration,v=!1!==i&&!K,y=Do(p),w=h(u(b)?b.leave:b),_=e._leaveCb=R((function(){e.parentNode&&e.parentNode._pending&&(e.parentNode._pending[n.key]=null),v&&(Eo(e,c),Eo(e,d)),_.cancelled?(v&&Eo(e,l),$&&$(e)):(t(),g&&g(e)),e._leaveCb=null}));m?m(x):x()}function x(){_.cancelled||(!n.data.show&&e.parentNode&&((e.parentNode._pending||(e.parentNode._pending={}))[n.key]=n),f&&f(e),v&&(To(e,l),To(e,d),Ao((function(){Eo(e,l),_.cancelled||(To(e,c),y||(Ro(w)?setTimeout(_,w):So(e,s,_)))}))),p&&p(e,_),v||y||_())}}function Ro(n){return"number"==typeof n&&!isNaN(n)}function Do(n){if(o(n))return!1;var t=n.fns;return a(t)?Do(Array.isArray(t)?t[0]:t):(n._length||n.length)>1}function No(n,t){!0!==t.data.show&&Io(t)}var Lo=function(n){var t,e,r={},u=n.modules,l=n.nodeOps;for(t=0;t<nr.length;++t)for(r[nr[t]]=[],e=0;e<u.length;++e)a(u[e][nr[t]])&&r[nr[t]].push(u[e][nr[t]]);function c(n){var t=l.parentNode(n);a(t)&&l.removeChild(t,n)}function d(n,t,e,o,s,u,c){if(a(n.elm)&&a(u)&&(n=u[c]=yn(n)),n.isRootInsert=!s,!function(n,t,e,o){var s=n.data;if(a(s)){var u=a(n.componentInstance)&&s.keepAlive;if(a(s=s.hook)&&a(s=s.init)&&s(n,!1),a(n.componentInstance))return f(n,t),p(e,n.elm,o),i(u)&&function(n,t,e,o){for(var i,s=n;s.componentInstance;)if(a(i=(s=s.componentInstance._vnode).data)&&a(i=i.transition)){for(i=0;i<r.activate.length;++i)r.activate[i](Qe,s);t.push(s);break}p(e,n.elm,o)}(n,t,e,o),!0}}(n,t,e,o)){var d=n.data,g=n.children,$=n.tag;a($)?(n.elm=n.ns?l.createElementNS(n.ns,$):l.createElement($,n),b(n),h(n,g,t),a(d)&&m(n,t),p(e,n.elm,o)):i(n.isComment)?(n.elm=l.createComment(n.text),p(e,n.elm,o)):(n.elm=l.createTextNode(n.text),p(e,n.elm,o))}}function f(n,t){a(n.data.pendingInsert)&&(t.push.apply(t,n.data.pendingInsert),n.data.pendingInsert=null),n.elm=n.componentInstance.$el,$(n)?(m(n,t),b(n)):(Ye(n),t.push(n))}function p(n,t,e){a(n)&&(a(e)?l.parentNode(e)===n&&l.insertBefore(n,t,e):l.appendChild(n,t))}function h(n,t,e){if(Array.isArray(t))for(var r=0;r<t.length;++r)d(t[r],e,n.elm,null,!0,t,r);else s(n.text)&&l.appendChild(n.elm,l.createTextNode(String(n.text)))}function $(n){for(;n.componentInstance;)n=n.componentInstance._vnode;return a(n.tag)}function m(n,e){for(var o=0;o<r.create.length;++o)r.create[o](Qe,n);a(t=n.data.hook)&&(a(t.create)&&t.create(Qe,n),a(t.insert)&&e.push(n))}function b(n){var t;if(a(t=n.fnScopeId))l.setStyleScope(n.elm,t);else for(var e=n;e;)a(t=e.context)&&a(t=t.$options._scopeId)&&l.setStyleScope(n.elm,t),e=e.parent;a(t=Jt)&&t!==n.context&&t!==n.fnContext&&a(t=t.$options._scopeId)&&l.setStyleScope(n.elm,t)}function v(n,t,e,r,o,a){for(;r<=o;++r)d(e[r],a,n,t,!1,e,r)}function y(n){var t,e,o=n.data;if(a(o))for(a(t=o.hook)&&a(t=t.destroy)&&t(n),t=0;t<r.destroy.length;++t)r.destroy[t](n);if(a(t=n.children))for(e=0;e<n.children.length;++e)y(n.children[e])}function w(n,t,e){for(;t<=e;++t){var r=n[t];a(r)&&(a(r.tag)?(_(r),y(r)):c(r.elm))}}function _(n,t){if(a(t)||a(n.data)){var e,o=r.remove.length+1;for(a(t)?t.listeners+=o:t=function(n,t){function e(){0==--e.listeners&&c(n)}return e.listeners=t,e}(n.elm,o),a(e=n.componentInstance)&&a(e=e._vnode)&&a(e.data)&&_(e,t),e=0;e<r.remove.length;++e)r.remove[e](n,t);a(e=n.data.hook)&&a(e=e.remove)?e(n,t):t()}else c(n.elm)}function x(n,t,e,r){for(var o=e;o<r;o++){var i=t[o];if(a(i)&&tr(n,i))return o}}function k(n,t,e,s,u,c){if(n!==t){a(t.elm)&&a(s)&&(t=s[u]=yn(t));var f=t.elm=n.elm;if(i(n.isAsyncPlaceholder))a(t.asyncFactory.resolved)?T(n.elm,t,e):t.isAsyncPlaceholder=!0;else if(i(t.isStatic)&&i(n.isStatic)&&t.key===n.key&&(i(t.isCloned)||i(t.isOnce)))t.componentInstance=n.componentInstance;else{var p,h=t.data;a(h)&&a(p=h.hook)&&a(p=p.prepatch)&&p(n,t);var g=n.children,m=t.children;if(a(h)&&$(t)){for(p=0;p<r.update.length;++p)r.update[p](n,t);a(p=h.hook)&&a(p=p.update)&&p(n,t)}o(t.text)?a(g)&&a(m)?g!==m&&function(n,t,e,r,i){for(var s,u,c,f=0,p=0,h=t.length-1,g=t[0],$=t[h],m=e.length-1,b=e[0],y=e[m],_=!i;f<=h&&p<=m;)o(g)?g=t[++f]:o($)?$=t[--h]:tr(g,b)?(k(g,b,r,e,p),g=t[++f],b=e[++p]):tr($,y)?(k($,y,r,e,m),$=t[--h],y=e[--m]):tr(g,y)?(k(g,y,r,e,m),_&&l.insertBefore(n,g.elm,l.nextSibling($.elm)),g=t[++f],y=e[--m]):tr($,b)?(k($,b,r,e,p),_&&l.insertBefore(n,$.elm,g.elm),$=t[--h],b=e[++p]):(o(s)&&(s=er(t,f,h)),o(u=a(b.key)?s[b.key]:x(b,t,f,h))?d(b,r,n,g.elm,!1,e,p):tr(c=t[u],b)?(k(c,b,r,e,p),t[u]=void 0,_&&l.insertBefore(n,c.elm,g.elm)):d(b,r,n,g.elm,!1,e,p),b=e[++p]);f>h?v(n,o(e[m+1])?null:e[m+1].elm,e,p,m,r):p>m&&w(t,f,h)}(f,g,m,e,c):a(m)?(a(n.text)&&l.setTextContent(f,""),v(f,null,m,0,m.length-1,e)):a(g)?w(g,0,g.length-1):a(n.text)&&l.setTextContent(f,""):n.text!==t.text&&l.setTextContent(f,t.text),a(h)&&a(p=h.hook)&&a(p=p.postpatch)&&p(n,t)}}}function C(n,t,e){if(i(e)&&a(n.parent))n.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var A=g("attrs,class,staticClass,staticStyle,key");function T(n,t,e,r){var o,s=t.tag,u=t.data,l=t.children;if(r=r||u&&u.pre,t.elm=n,i(t.isComment)&&a(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(a(u)&&(a(o=u.hook)&&a(o=o.init)&&o(t,!0),a(o=t.componentInstance)))return f(t,e),!0;if(a(s)){if(a(l))if(n.hasChildNodes())if(a(o=u)&&a(o=o.domProps)&&a(o=o.innerHTML)){if(o!==n.innerHTML)return!1}else{for(var c=!0,d=n.firstChild,p=0;p<l.length;p++){if(!d||!T(d,l[p],e,r)){c=!1;break}d=d.nextSibling}if(!c||d)return!1}else h(t,l,e);if(a(u)){var g=!1;for(var $ in u)if(!A($)){g=!0,m(t,e);break}!g&&u.class&&ot(u.class)}}else n.data!==t.text&&(n.data=t.text);return!0}return function(n,t,e,s){if(!o(t)){var u,c=!1,f=[];if(o(n))c=!0,d(t,f);else{var p=a(n.nodeType);if(!p&&tr(n,t))k(n,t,f,null,null,s);else{if(p){if(1===n.nodeType&&n.hasAttribute(D)&&(n.removeAttribute(D),e=!0),i(e)&&T(n,t,f))return C(t,f,!0),n;u=n,n=new $n(l.tagName(u).toLowerCase(),{},[],void 0,u)}var h=n.elm,g=l.parentNode(h);if(d(t,f,h._leaveCb?null:g,l.nextSibling(h)),a(t.parent))for(var m=t.parent,b=$(t);m;){for(var v=0;v<r.destroy.length;++v)r.destroy[v](m);if(m.elm=t.elm,b){for(var _=0;_<r.create.length;++_)r.create[_](Qe,m);var x=m.data.hook.insert;if(x.merged)for(var A=1;A<x.fns.length;A++)x.fns[A]()}else Ye(m);m=m.parent}a(g)?w([n],0,0):a(n.tag)&&y(n)}}return C(t,f,c),t.elm}a(n)&&y(n)}}({nodeOps:Je,modules:[pr,wr,Kr,no,fo,W?{create:No,activate:No,remove:function(n,t){!0!==n.data.show?zo(n,t):t()}}:{}].concat(lr)});K&&document.addEventListener("selectionchange",(function(){var n=document.activeElement;n&&n.vmodel&&Zo(n,"input")}));var Bo={inserted:function(n,t,e,r){"select"===e.tag?(r.elm&&!r.elm._vOptions?ut(e,"postpatch",(function(){Bo.componentUpdated(n,t,e)})):Fo(n,t,e.context),n._vOptions=[].map.call(n.options,Go)):("textarea"===e.tag||Ve(n.type))&&(n._vModifiers=t.modifiers,t.modifiers.lazy||(n.addEventListener("compositionstart",Ho),n.addEventListener("compositionend",Wo),n.addEventListener("change",Wo),K&&(n.vmodel=!0)))},componentUpdated:function(n,t,e){if("select"===e.tag){Fo(n,t,e.context);var r=n._vOptions,o=n._vOptions=[].map.call(n.options,Go);o.some((function(n,t){return!I(n,r[t])}))&&(n.multiple?t.value.some((function(n){return qo(n,o)})):t.value!==t.oldValue&&qo(t.value,o))&&Zo(n,"change")}}};function Fo(n,t,e){Uo(n,t),(J||Y)&&setTimeout((function(){Uo(n,t)}),0)}function Uo(n,t,e){var r=t.value,o=n.multiple;if(!o||Array.isArray(r)){for(var a,i,s=0,u=n.options.length;s<u;s++)if(i=n.options[s],o)a=z(r,Go(i))>-1,i.selected!==a&&(i.selected=a);else if(I(Go(i),r))return void(n.selectedIndex!==s&&(n.selectedIndex=s));o||(n.selectedIndex=-1)}}function qo(n,t){return t.every((function(t){return!I(t,n)}))}function Go(n){return"_value"in n?n._value:n.value}function Ho(n){n.target.composing=!0}function Wo(n){n.target.composing&&(n.target.composing=!1,Zo(n.target,"input"))}function Zo(n,t){var e=document.createEvent("HTMLEvents");e.initEvent(t,!0,!0),n.dispatchEvent(e)}function Vo(n){return!n.componentInstance||n.data&&n.data.transition?n:Vo(n.componentInstance._vnode)}var Xo={model:Bo,show:{bind:function(n,t,e){var r=t.value,o=(e=Vo(e)).data&&e.data.transition,a=n.__vOriginalDisplay="none"===n.style.display?"":n.style.display;r&&o?(e.data.show=!0,Io(e,(function(){n.style.display=a}))):n.style.display=r?a:"none"},update:function(n,t,e){var r=t.value;!r!=!t.oldValue&&((e=Vo(e)).data&&e.data.transition?(e.data.show=!0,r?Io(e,(function(){n.style.display=n.__vOriginalDisplay})):zo(e,(function(){n.style.display="none"}))):n.style.display=r?n.__vOriginalDisplay:"none")},unbind:function(n,t,e,r,o){o||(n.style.display=n.__vOriginalDisplay)}}},Jo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ko(n){var t=n&&n.componentOptions;return t&&t.Ctor.options.abstract?Ko(Ht(t.children)):n}function Yo(n){var t={},e=n.$options;for(var r in e.propsData)t[r]=n[r];var o=e._parentListeners;for(var a in o)t[x(a)]=o[a];return t}function Qo(n,t){if(/\d-keep-alive$/.test(t.tag))return n("keep-alive",{props:t.componentOptions.propsData})}var na=function(n){return n.tag||Gt(n)},ta=function(n){return"show"===n.name},ea={name:"transition",props:Jo,abstract:!0,render:function(n){var t=this,e=this.$slots.default;if(e&&(e=e.filter(na)).length){var r=this.mode,o=e[0];if(function(n){for(;n=n.parent;)if(n.data.transition)return!0}(this.$vnode))return o;var a=Ko(o);if(!a)return o;if(this._leaving)return Qo(n,o);var i="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?i+"comment":i+a.tag:s(a.key)?0===String(a.key).indexOf(i)?a.key:i+a.key:a.key;var u=(a.data||(a.data={})).transition=Yo(this),l=this._vnode,c=Ko(l);if(a.data.directives&&a.data.directives.some(ta)&&(a.data.show=!0),c&&c.data&&!function(n,t){return t.key===n.key&&t.tag===n.tag}(a,c)&&!Gt(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var d=c.data.transition=S({},u);if("out-in"===r)return this._leaving=!0,ut(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Qo(n,o);if("in-out"===r){if(Gt(a))return l;var f,p=function(){f()};ut(u,"afterEnter",p),ut(u,"enterCancelled",p),ut(d,"delayLeave",(function(n){f=n}))}}return o}}},ra=S({tag:String,moveClass:String},Jo);function oa(n){n.elm._moveCb&&n.elm._moveCb(),n.elm._enterCb&&n.elm._enterCb()}function aa(n){n.data.newPos=n.elm.getBoundingClientRect()}function ia(n){var t=n.data.pos,e=n.data.newPos,r=t.left-e.left,o=t.top-e.top;if(r||o){n.data.moved=!0;var a=n.elm.style;a.transform=a.WebkitTransform="translate("+r+"px,"+o+"px)",a.transitionDuration="0s"}}delete ra.mode;var sa={Transition:ea,TransitionGroup:{props:ra,beforeMount:function(){var n=this,t=this._update;this._update=function(e,r){var o=Kt(n);n.__patch__(n._vnode,n.kept,!1,!0),n._vnode=n.kept,o(),t.call(n,e,r)}},render:function(n){for(var t=this.tag||this.$vnode.data.tag||"span",e=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],a=this.children=[],i=Yo(this),s=0;s<o.length;s++){var u=o[s];u.tag&&null!=u.key&&0!==String(u.key).indexOf("__vlist")&&(a.push(u),e[u.key]=u,(u.data||(u.data={})).transition=i)}if(r){for(var l=[],c=[],d=0;d<r.length;d++){var f=r[d];f.data.transition=i,f.data.pos=f.elm.getBoundingClientRect(),e[f.key]?l.push(f):c.push(f)}this.kept=n(t,null,l),this.removed=c}return n(t,null,a)},updated:function(){var n=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";n.length&&this.hasMove(n[0].elm,t)&&(n.forEach(oa),n.forEach(aa),n.forEach(ia),this._reflow=document.body.offsetHeight,n.forEach((function(n){if(n.data.moved){var e=n.elm,r=e.style;To(e,t),r.transform=r.WebkitTransform=r.transitionDuration="",e.addEventListener(_o,e._moveCb=function n(r){r&&r.target!==e||r&&!/transform$/.test(r.propertyName)||(e.removeEventListener(_o,n),e._moveCb=null,Eo(e,t))})}})))},methods:{hasMove:function(n,t){if(!bo)return!1;if(this._hasMove)return this._hasMove;var e=n.cloneNode();n._transitionClasses&&n._transitionClasses.forEach((function(n){go(e,n)})),ho(e,t),e.style.display="none",this.$el.appendChild(e);var r=jo(e);return this.$el.removeChild(e),this._hasMove=r.hasTransform}}}};_e.config.mustUseProp=je,_e.config.isReservedTag=He,_e.config.isReservedAttr=Se,_e.config.getTagNamespace=We,_e.config.isUnknownElement=function(n){if(!W)return!0;if(He(n))return!1;if(n=n.toLowerCase(),null!=Ze[n])return Ze[n];var t=document.createElement(n);return n.indexOf("-")>-1?Ze[n]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Ze[n]=/HTMLUnknownElement/.test(t.toString())},S(_e.options.directives,Xo),S(_e.options.components,sa),_e.prototype.__patch__=W?Lo:j,_e.prototype.$mount=function(n,t){return function(n,t,e){var r;return n.$el=t,n.$options.render||(n.$options.render=bn),ne(n,"beforeMount"),r=function(){n._update(n._render(),e)},new fe(n,r,j,{before:function(){n._isMounted&&!n._isDestroyed&&ne(n,"beforeUpdate")}},!0),e=!1,null==n.$vnode&&(n._isMounted=!0,ne(n,"mounted")),n}(this,n=n&&W?Xe(n):void 0,t)},W&&setTimeout((function(){B.devtools&&an&&an.emit("init",_e)}),0);var ua,la=/\{\{((?:.|\r?\n)+?)\}\}/g,ca=/[-.*+?^${}()|[\]\/\\]/g,da=w((function(n){var t=n[0].replace(ca,"\\$&"),e=n[1].replace(ca,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+e,"g")})),fa={staticKeys:["staticClass"],transformNode:function(n,t){t.warn;var e=Ir(n,"class");e&&(n.staticClass=JSON.stringify(e));var r=Pr(n,"class",!1);r&&(n.classBinding=r)},genData:function(n){var t="";return n.staticClass&&(t+="staticClass:"+n.staticClass+","),n.classBinding&&(t+="class:"+n.classBinding+","),t}},pa={staticKeys:["staticStyle"],transformNode:function(n,t){t.warn;var e=Ir(n,"style");e&&(n.staticStyle=JSON.stringify(to(e)));var r=Pr(n,"style",!1);r&&(n.styleBinding=r)},genData:function(n){var t="";return n.staticStyle&&(t+="staticStyle:"+n.staticStyle+","),n.styleBinding&&(t+="style:("+n.styleBinding+"),"),t}},ha=g("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),ga=g("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),$a=g("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),ma=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ba=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,va="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+F.source+"]*",ya="((?:"+va+"\\:)?"+va+")",wa=new RegExp("^<"+ya),_a=/^\s*(\/?)>/,xa=new RegExp("^<\\/"+ya+"[^>]*>"),ka=/^<!DOCTYPE [^>]+>/i,Ca=/^<!\--/,Aa=/^<!\[/,Ta=g("script,style,textarea",!0),Ea={},Sa={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},Oa=/&(?:lt|gt|quot|amp|#39);/g,ja=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ma=g("pre,textarea",!0),Pa=function(n,t){return n&&Ma(n)&&"\n"===t[0]};function Ia(n,t){var e=t?ja:Oa;return n.replace(e,(function(n){return Sa[n]}))}var za,Ra,Da,Na,La,Ba,Fa,Ua,qa=/^@|^v-on:/,Ga=/^v-|^@|^:|^#/,Ha=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Wa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Za=/^\(|\)$/g,Va=/^\[.*\]$/,Xa=/:(.*)$/,Ja=/^:|^\.|^v-bind:/,Ka=/\.[^.\]]+(?=[^\]]*$)/g,Ya=/^v-slot(:|$)|^#/,Qa=/[\r\n]/,ni=/\s+/g,ti=w((function(n){return(ua=ua||document.createElement("div")).innerHTML=n,ua.textContent})),ei="_empty_";function ri(n,t,e){return{type:1,tag:n,attrsList:t,attrsMap:li(t),rawAttrsMap:{},parent:e,children:[]}}function oi(n,t){var e,r;(r=Pr(e=n,"key"))&&(e.key=r),n.plain=!n.key&&!n.scopedSlots&&!n.attrsList.length,function(n){var t=Pr(n,"ref");t&&(n.ref=t,n.refInFor=function(n){for(var t=n;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(n))}(n),function(n){var t;"template"===n.tag?(t=Ir(n,"scope"),n.slotScope=t||Ir(n,"slot-scope")):(t=Ir(n,"slot-scope"))&&(n.slotScope=t);var e=Pr(n,"slot");if(e&&(n.slotTarget='""'===e?'"default"':e,n.slotTargetDynamic=!(!n.attrsMap[":slot"]&&!n.attrsMap["v-bind:slot"]),"template"===n.tag||n.slotScope||Er(n,"slot",e,function(n,t){return n.rawAttrsMap[":"+t]||n.rawAttrsMap["v-bind:"+t]||n.rawAttrsMap[t]}(n,"slot"))),"template"===n.tag){var r=zr(n,Ya);if(r){var o=si(r),a=o.name,i=o.dynamic;n.slotTarget=a,n.slotTargetDynamic=i,n.slotScope=r.value||ei}}else{var s=zr(n,Ya);if(s){var u=n.scopedSlots||(n.scopedSlots={}),l=si(s),c=l.name,d=l.dynamic,f=u[c]=ri("template",[],n);f.slotTarget=c,f.slotTargetDynamic=d,f.children=n.children.filter((function(n){if(!n.slotScope)return n.parent=f,!0})),f.slotScope=s.value||ei,n.children=[],n.plain=!1}}}(n),function(n){"slot"===n.tag&&(n.slotName=Pr(n,"name"))}(n),function(n){var t;(t=Pr(n,"is"))&&(n.component=t),null!=Ir(n,"inline-template")&&(n.inlineTemplate=!0)}(n);for(var o=0;o<Da.length;o++)n=Da[o](n,t)||n;return function(n){var t,e,r,o,a,i,s,u,l=n.attrsList;for(t=0,e=l.length;t<e;t++)if(r=o=l[t].name,a=l[t].value,Ga.test(r))if(n.hasBindings=!0,(i=ui(r.replace(Ga,"")))&&(r=r.replace(Ka,"")),Ja.test(r))r=r.replace(Ja,""),a=xr(a),(u=Va.test(r))&&(r=r.slice(1,-1)),i&&(i.prop&&!u&&"innerHtml"===(r=x(r))&&(r="innerHTML"),i.camel&&!u&&(r=x(r)),i.sync&&(s=Nr(a,"$event"),u?Mr(n,'"update:"+('+r+")",s,null,!1,0,l[t],!0):(Mr(n,"update:"+x(r),s,null,!1,0,l[t]),A(r)!==x(r)&&Mr(n,"update:"+A(r),s,null,!1,0,l[t])))),i&&i.prop||!n.component&&Fa(n.tag,n.attrsMap.type,r)?Tr(n,r,a,l[t],u):Er(n,r,a,l[t],u);else if(qa.test(r))r=r.replace(qa,""),(u=Va.test(r))&&(r=r.slice(1,-1)),Mr(n,r,a,i,!1,0,l[t],u);else{var c=(r=r.replace(Ga,"")).match(Xa),d=c&&c[1];u=!1,d&&(r=r.slice(0,-(d.length+1)),Va.test(d)&&(d=d.slice(1,-1),u=!0)),Or(n,r,o,a,d,u,i,l[t])}else Er(n,r,JSON.stringify(a),l[t]),!n.component&&"muted"===r&&Fa(n.tag,n.attrsMap.type,r)&&Tr(n,r,"true",l[t])}(n),n}function ai(n){var t;if(t=Ir(n,"v-for")){var e=function(n){var t=n.match(Ha);if(t){var e={};e.for=t[2].trim();var r=t[1].trim().replace(Za,""),o=r.match(Wa);return o?(e.alias=r.replace(Wa,"").trim(),e.iterator1=o[1].trim(),o[2]&&(e.iterator2=o[2].trim())):e.alias=r,e}}(t);e&&S(n,e)}}function ii(n,t){n.ifConditions||(n.ifConditions=[]),n.ifConditions.push(t)}function si(n){var t=n.name.replace(Ya,"");return t||"#"!==n.name[0]&&(t="default"),Va.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'"'+t+'"',dynamic:!1}}function ui(n){var t=n.match(Ka);if(t){var e={};return t.forEach((function(n){e[n.slice(1)]=!0})),e}}function li(n){for(var t={},e=0,r=n.length;e<r;e++)t[n[e].name]=n[e].value;return t}var ci=/^xmlns:NS\d+/,di=/^NS\d+:/;function fi(n){return ri(n.tag,n.attrsList.slice(),n.parent)}var pi,hi,gi=[fa,pa,{preTransformNode:function(n,t){if("input"===n.tag){var e,r=n.attrsMap;if(!r["v-model"])return;if((r[":type"]||r["v-bind:type"])&&(e=Pr(n,"type")),r.type||e||!r["v-bind"]||(e="("+r["v-bind"]+").type"),e){var o=Ir(n,"v-if",!0),a=o?"&&("+o+")":"",i=null!=Ir(n,"v-else",!0),s=Ir(n,"v-else-if",!0),u=fi(n);ai(u),Sr(u,"type","checkbox"),oi(u,t),u.processed=!0,u.if="("+e+")==='checkbox'"+a,ii(u,{exp:u.if,block:u});var l=fi(n);Ir(l,"v-for",!0),Sr(l,"type","radio"),oi(l,t),ii(u,{exp:"("+e+")==='radio'"+a,block:l});var c=fi(n);return Ir(c,"v-for",!0),Sr(c,":type",e),oi(c,t),ii(u,{exp:o,block:c}),i?u.else=!0:s&&(u.elseif=s),u}}}}],$i={expectHTML:!0,modules:gi,directives:{model:function(n,t,e){var r=t.value,o=t.modifiers,a=n.tag,i=n.attrsMap.type;if(n.component)return Dr(n,r,o),!1;if("select"===a)!function(n,t,e){var r='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(e&&e.number?"_n(val)":"val")+"});";Mr(n,"change",r=r+" "+Nr(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(n,r,o);else if("input"===a&&"checkbox"===i)!function(n,t,e){var r=e&&e.number,o=Pr(n,"value")||"null",a=Pr(n,"true-value")||"true",i=Pr(n,"false-value")||"false";Tr(n,"checked","Array.isArray("+t+")?_i("+t+","+o+")>-1"+("true"===a?":("+t+")":":_q("+t+","+a+")")),Mr(n,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+a+"):("+i+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Nr(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Nr(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Nr(t,"$$c")+"}",null,!0)}(n,r,o);else if("input"===a&&"radio"===i)!function(n,t,e){var r=e&&e.number,o=Pr(n,"value")||"null";Tr(n,"checked","_q("+t+","+(o=r?"_n("+o+")":o)+")"),Mr(n,"change",Nr(t,o),null,!0)}(n,r,o);else if("input"===a||"textarea"===a)!function(n,t,e){var r=n.attrsMap.type,o=e||{},a=o.lazy,i=o.number,s=o.trim,u=!a&&"range"!==r,l=a?"change":"range"===r?"__r":"input",c="$event.target.value";s&&(c="$event.target.value.trim()"),i&&(c="_n("+c+")");var d=Nr(t,c);u&&(d="if($event.target.composing)return;"+d),Tr(n,"value","("+t+")"),Mr(n,l,d,null,!0),(s||i)&&Mr(n,"blur","$forceUpdate()")}(n,r,o);else if(!B.isReservedTag(a))return Dr(n,r,o),!1;return!0},text:function(n,t){t.value&&Tr(n,"textContent","_s("+t.value+")",t)},html:function(n,t){t.value&&Tr(n,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(n){return"pre"===n},isUnaryTag:ha,mustUseProp:je,canBeLeftOpenTag:ga,isReservedTag:He,getTagNamespace:We,staticKeys:function(n){return n.reduce((function(n,t){return n.concat(t.staticKeys||[])}),[]).join(",")}(gi)},mi=w((function(n){return g("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(n?","+n:""))})),bi=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,vi=/\([^)]*?\);*$/,yi=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,wi={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},_i={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},xi=function(n){return"if("+n+")return null;"},ki={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:xi("$event.target !== $event.currentTarget"),ctrl:xi("!$event.ctrlKey"),shift:xi("!$event.shiftKey"),alt:xi("!$event.altKey"),meta:xi("!$event.metaKey"),left:xi("'button' in $event && $event.button !== 0"),middle:xi("'button' in $event && $event.button !== 1"),right:xi("'button' in $event && $event.button !== 2")};function Ci(n,t){var e=t?"nativeOn:":"on:",r="",o="";for(var a in n){var i=Ai(n[a]);n[a]&&n[a].dynamic?o+=a+","+i+",":r+='"'+a+'":'+i+","}return r="{"+r.slice(0,-1)+"}",o?e+"_d("+r+",["+o.slice(0,-1)+"])":e+r}function Ai(n){if(!n)return"function(){}";if(Array.isArray(n))return"["+n.map((function(n){return Ai(n)})).join(",")+"]";var t=yi.test(n.value),e=bi.test(n.value),r=yi.test(n.value.replace(vi,""));if(n.modifiers){var o="",a="",i=[];for(var s in n.modifiers)if(ki[s])a+=ki[s],wi[s]&&i.push(s);else if("exact"===s){var u=n.modifiers;a+=xi(["ctrl","shift","alt","meta"].filter((function(n){return!u[n]})).map((function(n){return"$event."+n+"Key"})).join("||"))}else i.push(s);return i.length&&(o+=function(n){return"if(!$event.type.indexOf('key')&&"+n.map(Ti).join("&&")+")return null;"}(i)),a&&(o+=a),"function($event){"+o+(t?"return "+n.value+"($event)":e?"return ("+n.value+")($event)":r?"return "+n.value:n.value)+"}"}return t||e?n.value:"function($event){"+(r?"return "+n.value:n.value)+"}"}function Ti(n){var t=parseInt(n,10);if(t)return"$event.keyCode!=="+t;var e=wi[n],r=_i[n];return"_k($event.keyCode,"+JSON.stringify(n)+","+JSON.stringify(e)+",$event.key,"+JSON.stringify(r)+")"}var Ei={on:function(n,t){n.wrapListeners=function(n){return"_g("+n+","+t.value+")"}},bind:function(n,t){n.wrapData=function(e){return"_b("+e+",'"+n.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:j},Si=function(n){this.options=n,this.warn=n.warn||Cr,this.transforms=Ar(n.modules,"transformCode"),this.dataGenFns=Ar(n.modules,"genData"),this.directives=S(S({},Ei),n.directives);var t=n.isReservedTag||M;this.maybeComponent=function(n){return!!n.component||!t(n.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Oi(n,t){var e=new Si(t);return{render:"with(this){return "+(n?ji(n,e):'_c("div")')+"}",staticRenderFns:e.staticRenderFns}}function ji(n,t){if(n.parent&&(n.pre=n.pre||n.parent.pre),n.staticRoot&&!n.staticProcessed)return Mi(n,t);if(n.once&&!n.onceProcessed)return Pi(n,t);if(n.for&&!n.forProcessed)return zi(n,t);if(n.if&&!n.ifProcessed)return Ii(n,t);if("template"!==n.tag||n.slotTarget||t.pre){if("slot"===n.tag)return function(n,t){var e=n.slotName||'"default"',r=Li(n,t),o="_t("+e+(r?","+r:""),a=n.attrs||n.dynamicAttrs?Ui((n.attrs||[]).concat(n.dynamicAttrs||[]).map((function(n){return{name:x(n.name),value:n.value,dynamic:n.dynamic}}))):null,i=n.attrsMap["v-bind"];return!a&&!i||r||(o+=",null"),a&&(o+=","+a),i&&(o+=(a?"":",null")+","+i),o+")"}(n,t);var e;if(n.component)e=function(n,t,e){var r=t.inlineTemplate?null:Li(t,e,!0);return"_c("+n+","+Ri(t,e)+(r?","+r:"")+")"}(n.component,n,t);else{var r;(!n.plain||n.pre&&t.maybeComponent(n))&&(r=Ri(n,t));var o=n.inlineTemplate?null:Li(n,t,!0);e="_c('"+n.tag+"'"+(r?","+r:"")+(o?","+o:"")+")"}for(var a=0;a<t.transforms.length;a++)e=t.transforms[a](n,e);return e}return Li(n,t)||"void 0"}function Mi(n,t){n.staticProcessed=!0;var e=t.pre;return n.pre&&(t.pre=n.pre),t.staticRenderFns.push("with(this){return "+ji(n,t)+"}"),t.pre=e,"_m("+(t.staticRenderFns.length-1)+(n.staticInFor?",true":"")+")"}function Pi(n,t){if(n.onceProcessed=!0,n.if&&!n.ifProcessed)return Ii(n,t);if(n.staticInFor){for(var e="",r=n.parent;r;){if(r.for){e=r.key;break}r=r.parent}return e?"_o("+ji(n,t)+","+t.onceId+++","+e+")":ji(n,t)}return Mi(n,t)}function Ii(n,t,e,r){return n.ifProcessed=!0,function n(t,e,r,o){if(!t.length)return o||"_e()";var a=t.shift();return a.exp?"("+a.exp+")?"+i(a.block)+":"+n(t,e,r,o):""+i(a.block);function i(n){return r?r(n,e):n.once?Pi(n,e):ji(n,e)}}(n.ifConditions.slice(),t,e,r)}function zi(n,t,e,r){var o=n.for,a=n.alias,i=n.iterator1?","+n.iterator1:"",s=n.iterator2?","+n.iterator2:"";return n.forProcessed=!0,(r||"_l")+"(("+o+"),function("+a+i+s+"){return "+(e||ji)(n,t)+"})"}function Ri(n,t){var e="{",r=function(n,t){var e=n.directives;if(e){var r,o,a,i,s="directives:[",u=!1;for(r=0,o=e.length;r<o;r++){a=e[r],i=!0;var l=t.directives[a.name];l&&(i=!!l(n,a,t.warn)),i&&(u=!0,s+='{name:"'+a.name+'",rawName:"'+a.rawName+'"'+(a.value?",value:("+a.value+"),expression:"+JSON.stringify(a.value):"")+(a.arg?",arg:"+(a.isDynamicArg?a.arg:'"'+a.arg+'"'):"")+(a.modifiers?",modifiers:"+JSON.stringify(a.modifiers):"")+"},")}return u?s.slice(0,-1)+"]":void 0}}(n,t);r&&(e+=r+","),n.key&&(e+="key:"+n.key+","),n.ref&&(e+="ref:"+n.ref+","),n.refInFor&&(e+="refInFor:true,"),n.pre&&(e+="pre:true,"),n.component&&(e+='tag:"'+n.tag+'",');for(var o=0;o<t.dataGenFns.length;o++)e+=t.dataGenFns[o](n);if(n.attrs&&(e+="attrs:"+Ui(n.attrs)+","),n.props&&(e+="domProps:"+Ui(n.props)+","),n.events&&(e+=Ci(n.events,!1)+","),n.nativeEvents&&(e+=Ci(n.nativeEvents,!0)+","),n.slotTarget&&!n.slotScope&&(e+="slot:"+n.slotTarget+","),n.scopedSlots&&(e+=function(n,t,e){var r=n.for||Object.keys(t).some((function(n){var e=t[n];return e.slotTargetDynamic||e.if||e.for||Di(e)})),o=!!n.if;if(!r)for(var a=n.parent;a;){if(a.slotScope&&a.slotScope!==ei||a.for){r=!0;break}a.if&&(o=!0),a=a.parent}var i=Object.keys(t).map((function(n){return Ni(t[n],e)})).join(",");return"scopedSlots:_u(["+i+"]"+(r?",null,true":"")+(!r&&o?",null,false,"+function(n){for(var t=5381,e=n.length;e;)t=33*t^n.charCodeAt(--e);return t>>>0}(i):"")+")"}(n,n.scopedSlots,t)+","),n.model&&(e+="model:{value:"+n.model.value+",callback:"+n.model.callback+",expression:"+n.model.expression+"},"),n.inlineTemplate){var a=function(n,t){var e=n.children[0];if(e&&1===e.type){var r=Oi(e,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map((function(n){return"function(){"+n+"}"})).join(",")+"]}"}}(n,t);a&&(e+=a+",")}return e=e.replace(/,$/,"")+"}",n.dynamicAttrs&&(e="_b("+e+',"'+n.tag+'",'+Ui(n.dynamicAttrs)+")"),n.wrapData&&(e=n.wrapData(e)),n.wrapListeners&&(e=n.wrapListeners(e)),e}function Di(n){return 1===n.type&&("slot"===n.tag||n.children.some(Di))}function Ni(n,t){var e=n.attrsMap["slot-scope"];if(n.if&&!n.ifProcessed&&!e)return Ii(n,t,Ni,"null");if(n.for&&!n.forProcessed)return zi(n,t,Ni);var r=n.slotScope===ei?"":String(n.slotScope),o="function("+r+"){return "+("template"===n.tag?n.if&&e?"("+n.if+")?"+(Li(n,t)||"undefined")+":undefined":Li(n,t)||"undefined":ji(n,t))+"}",a=r?"":",proxy:true";return"{key:"+(n.slotTarget||'"default"')+",fn:"+o+a+"}"}function Li(n,t,e,r,o){var a=n.children;if(a.length){var i=a[0];if(1===a.length&&i.for&&"template"!==i.tag&&"slot"!==i.tag){var s=e?t.maybeComponent(i)?",1":",0":"";return""+(r||ji)(i,t)+s}var u=e?function(n,t){for(var e=0,r=0;r<n.length;r++){var o=n[r];if(1===o.type){if(Bi(o)||o.ifConditions&&o.ifConditions.some((function(n){return Bi(n.block)}))){e=2;break}(t(o)||o.ifConditions&&o.ifConditions.some((function(n){return t(n.block)})))&&(e=1)}}return e}(a,t.maybeComponent):0,l=o||Fi;return"["+a.map((function(n){return l(n,t)})).join(",")+"]"+(u?","+u:"")}}function Bi(n){return void 0!==n.for||"template"===n.tag||"slot"===n.tag}function Fi(n,t){return 1===n.type?ji(n,t):3===n.type&&n.isComment?(r=n,"_e("+JSON.stringify(r.text)+")"):"_v("+(2===(e=n).type?e.expression:qi(JSON.stringify(e.text)))+")";var e,r}function Ui(n){for(var t="",e="",r=0;r<n.length;r++){var o=n[r],a=qi(o.value);o.dynamic?e+=o.name+","+a+",":t+='"'+o.name+'":'+a+","}return t="{"+t.slice(0,-1)+"}",e?"_d("+t+",["+e.slice(0,-1)+"])":t}function qi(n){return n.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function Gi(n,t){try{return new Function(n)}catch(e){return t.push({err:e,code:n}),j}}function Hi(n){var t=Object.create(null);return function(e,r,o){(r=S({},r)).warn,delete r.warn;var a=r.delimiters?String(r.delimiters)+e:e;if(t[a])return t[a];var i=n(e,r),s={},u=[];return s.render=Gi(i.render,u),s.staticRenderFns=i.staticRenderFns.map((function(n){return Gi(n,u)})),t[a]=s}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b");var Wi,Zi,Vi=(Wi=function(n,t){var e=function(n,t){za=t.warn||Cr,Ba=t.isPreTag||M,Fa=t.mustUseProp||M,Ua=t.getTagNamespace||M,t.isReservedTag,Da=Ar(t.modules,"transformNode"),Na=Ar(t.modules,"preTransformNode"),La=Ar(t.modules,"postTransformNode"),Ra=t.delimiters;var e,r,o=[],a=!1!==t.preserveWhitespace,i=t.whitespace,s=!1,u=!1;function l(n){if(c(n),s||n.processed||(n=oi(n,t)),o.length||n===e||e.if&&(n.elseif||n.else)&&ii(e,{exp:n.elseif,block:n}),r&&!n.forbidden)if(n.elseif||n.else)i=n,(l=function(n){for(var t=n.length;t--;){if(1===n[t].type)return n[t];n.pop()}}(r.children))&&l.if&&ii(l,{exp:i.elseif,block:i});else{if(n.slotScope){var a=n.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[a]=n}r.children.push(n),n.parent=r}var i,l;n.children=n.children.filter((function(n){return!n.slotScope})),c(n),n.pre&&(s=!1),Ba(n.tag)&&(u=!1);for(var d=0;d<La.length;d++)La[d](n,t)}function c(n){if(!u)for(var t;(t=n.children[n.children.length-1])&&3===t.type&&" "===t.text;)n.children.pop()}return function(n,t){for(var e,r,o=[],a=t.expectHTML,i=t.isUnaryTag||M,s=t.canBeLeftOpenTag||M,u=0;n;){if(e=n,r&&Ta(r)){var l=0,c=r.toLowerCase(),d=Ea[c]||(Ea[c]=new RegExp("([\\s\\S]*?)(</"+c+"[^>]*>)","i")),f=n.replace(d,(function(n,e,r){return l=r.length,Ta(c)||"noscript"===c||(e=e.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Pa(c,e)&&(e=e.slice(1)),t.chars&&t.chars(e),""}));u+=n.length-f.length,n=f,A(c,u-l,u)}else{var p=n.indexOf("<");if(0===p){if(Ca.test(n)){var h=n.indexOf("--\x3e");if(h>=0){t.shouldKeepComment&&t.comment(n.substring(4,h),u,u+h+3),x(h+3);continue}}if(Aa.test(n)){var g=n.indexOf("]>");if(g>=0){x(g+2);continue}}var $=n.match(ka);if($){x($[0].length);continue}var m=n.match(xa);if(m){var b=u;x(m[0].length),A(m[1],b,u);continue}var v=k();if(v){C(v),Pa(v.tagName,n)&&x(1);continue}}var y=void 0,w=void 0,_=void 0;if(p>=0){for(w=n.slice(p);!(xa.test(w)||wa.test(w)||Ca.test(w)||Aa.test(w)||(_=w.indexOf("<",1))<0);)p+=_,w=n.slice(p);y=n.substring(0,p)}p<0&&(y=n),y&&x(y.length),t.chars&&y&&t.chars(y,u-y.length,u)}if(n===e){t.chars&&t.chars(n);break}}function x(t){u+=t,n=n.substring(t)}function k(){var t=n.match(wa);if(t){var e,r,o={tagName:t[1],attrs:[],start:u};for(x(t[0].length);!(e=n.match(_a))&&(r=n.match(ba)||n.match(ma));)r.start=u,x(r[0].length),r.end=u,o.attrs.push(r);if(e)return o.unarySlash=e[1],x(e[0].length),o.end=u,o}}function C(n){var e=n.tagName,u=n.unarySlash;a&&("p"===r&&$a(e)&&A(r),s(e)&&r===e&&A(e));for(var l=i(e)||!!u,c=n.attrs.length,d=new Array(c),f=0;f<c;f++){var p=n.attrs[f],h=p[3]||p[4]||p[5]||"",g="a"===e&&"href"===p[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;d[f]={name:p[1],value:Ia(h,g)}}l||(o.push({tag:e,lowerCasedTag:e.toLowerCase(),attrs:d,start:n.start,end:n.end}),r=e),t.start&&t.start(e,d,l,n.start,n.end)}function A(n,e,a){var i,s;if(null==e&&(e=u),null==a&&(a=u),n)for(s=n.toLowerCase(),i=o.length-1;i>=0&&o[i].lowerCasedTag!==s;i--);else i=0;if(i>=0){for(var l=o.length-1;l>=i;l--)t.end&&t.end(o[l].tag,e,a);o.length=i,r=i&&o[i-1].tag}else"br"===s?t.start&&t.start(n,[],!0,e,a):"p"===s&&(t.start&&t.start(n,[],!1,e,a),t.end&&t.end(n,e,a))}A()}(n,{warn:za,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(n,a,i,c,d){var f=r&&r.ns||Ua(n);J&&"svg"===f&&(a=function(n){for(var t=[],e=0;e<n.length;e++){var r=n[e];ci.test(r.name)||(r.name=r.name.replace(di,""),t.push(r))}return t}(a));var p,h=ri(n,a,r);f&&(h.ns=f),"style"!==(p=h).tag&&("script"!==p.tag||p.attrsMap.type&&"text/javascript"!==p.attrsMap.type)||on()||(h.forbidden=!0);for(var g=0;g<Na.length;g++)h=Na[g](h,t)||h;s||(function(n){null!=Ir(n,"v-pre")&&(n.pre=!0)}(h),h.pre&&(s=!0)),Ba(h.tag)&&(u=!0),s?function(n){var t=n.attrsList,e=t.length;if(e)for(var r=n.attrs=new Array(e),o=0;o<e;o++)r[o]={name:t[o].name,value:JSON.stringify(t[o].value)},null!=t[o].start&&(r[o].start=t[o].start,r[o].end=t[o].end);else n.pre||(n.plain=!0)}(h):h.processed||(ai(h),function(n){var t=Ir(n,"v-if");if(t)n.if=t,ii(n,{exp:t,block:n});else{null!=Ir(n,"v-else")&&(n.else=!0);var e=Ir(n,"v-else-if");e&&(n.elseif=e)}}(h),function(n){null!=Ir(n,"v-once")&&(n.once=!0)}(h)),e||(e=h),i?l(h):(r=h,o.push(h))},end:function(n,t,e){var a=o[o.length-1];o.length-=1,r=o[o.length-1],l(a)},chars:function(n,t,e){if(r&&(!J||"textarea"!==r.tag||r.attrsMap.placeholder!==n)){var o,l,c,d=r.children;(n=u||n.trim()?"script"===(o=r).tag||"style"===o.tag?n:ti(n):d.length?i?"condense"===i&&Qa.test(n)?"":" ":a?" ":"":"")&&(u||"condense"!==i||(n=n.replace(ni," ")),!s&&" "!==n&&(l=function(n,t){var e=t?da(t):la;if(e.test(n)){for(var r,o,a,i=[],s=[],u=e.lastIndex=0;r=e.exec(n);){(o=r.index)>u&&(s.push(a=n.slice(u,o)),i.push(JSON.stringify(a)));var l=xr(r[1].trim());i.push("_s("+l+")"),s.push({"@binding":l}),u=o+r[0].length}return u<n.length&&(s.push(a=n.slice(u)),i.push(JSON.stringify(a))),{expression:i.join("+"),tokens:s}}}(n,Ra))?c={type:2,expression:l.expression,tokens:l.tokens,text:n}:" "===n&&d.length&&" "===d[d.length-1].text||(c={type:3,text:n}),c&&d.push(c))}},comment:function(n,t,e){if(r){var o={type:3,text:n,isComment:!0};r.children.push(o)}}}),e}(n.trim(),t);!1!==t.optimize&&function(n,t){n&&(pi=mi(t.staticKeys||""),hi=t.isReservedTag||M,function n(t){if(t.static=function(n){return 2!==n.type&&(3===n.type||!(!n.pre&&(n.hasBindings||n.if||n.for||$(n.tag)||!hi(n.tag)||function(n){for(;n.parent;){if("template"!==(n=n.parent).tag)return!1;if(n.for)return!0}return!1}(n)||!Object.keys(n).every(pi))))}(t),1===t.type){if(!hi(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,r=t.children.length;e<r;e++){var o=t.children[e];n(o),o.static||(t.static=!1)}if(t.ifConditions)for(var a=1,i=t.ifConditions.length;a<i;a++){var s=t.ifConditions[a].block;n(s),s.static||(t.static=!1)}}}(n),function n(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var r=0,o=t.children.length;r<o;r++)n(t.children[r],e||!!t.for);if(t.ifConditions)for(var a=1,i=t.ifConditions.length;a<i;a++)n(t.ifConditions[a].block,e)}}(n,!1))}(e,t);var r=Oi(e,t);return{ast:e,render:r.render,staticRenderFns:r.staticRenderFns}},function(n){function t(t,e){var r=Object.create(n),o=[],a=[];if(e)for(var i in e.modules&&(r.modules=(n.modules||[]).concat(e.modules)),e.directives&&(r.directives=S(Object.create(n.directives||null),e.directives)),e)"modules"!==i&&"directives"!==i&&(r[i]=e[i]);r.warn=function(n,t,e){(e?a:o).push(n)};var s=Wi(t.trim(),r);return s.errors=o,s.tips=a,s}return{compile:t,compileToFunctions:Hi(t)}})($i),Xi=(Vi.compile,Vi.compileToFunctions);function Ji(n){return(Zi=Zi||document.createElement("div")).innerHTML=n?'<a href="\n"/>':'<div a="\n"/>',Zi.innerHTML.indexOf(" ")>0}var Ki=!!W&&Ji(!1),Yi=!!W&&Ji(!0),Qi=w((function(n){var t=Xe(n);return t&&t.innerHTML})),ns=_e.prototype.$mount;_e.prototype.$mount=function(n,t){if((n=n&&Xe(n))===document.body||n===document.documentElement)return this;var e=this.$options;if(!e.render){var r=e.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=Qi(r));else{if(!r.nodeType)return this;r=r.innerHTML}else n&&(r=function(n){if(n.outerHTML)return n.outerHTML;var t=document.createElement("div");return t.appendChild(n.cloneNode(!0)),t.innerHTML}(n));if(r){var o=Xi(r,{outputSourceRange:!1,shouldDecodeNewlines:Ki,shouldDecodeNewlinesForHref:Yi,delimiters:e.delimiters,comments:e.comments},this),a=o.render,i=o.staticRenderFns;e.render=a,e.staticRenderFns=i}}return ns.call(this,n,t)},_e.compile=Xi,n.exports=_e},20629:(n,t,e)=>{"use strict";e.r(t),e.d(t,{Store:()=>c,install:()=>b,mapState:()=>v,mapMutations:()=>y,mapGetters:()=>w,mapActions:()=>_,createNamespacedHelpers:()=>x,default:()=>T});var r="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function o(n,t){Object.keys(n).forEach((function(e){return t(n[e],e)}))}var a=function(n,t){this.runtime=t,this._children=Object.create(null),this._rawModule=n;var e=n.state;this.state=("function"==typeof e?e():e)||{}},i={namespaced:{configurable:!0}};i.namespaced.get=function(){return!!this._rawModule.namespaced},a.prototype.addChild=function(n,t){this._children[n]=t},a.prototype.removeChild=function(n){delete this._children[n]},a.prototype.getChild=function(n){return this._children[n]},a.prototype.update=function(n){this._rawModule.namespaced=n.namespaced,n.actions&&(this._rawModule.actions=n.actions),n.mutations&&(this._rawModule.mutations=n.mutations),n.getters&&(this._rawModule.getters=n.getters)},a.prototype.forEachChild=function(n){o(this._children,n)},a.prototype.forEachGetter=function(n){this._rawModule.getters&&o(this._rawModule.getters,n)},a.prototype.forEachAction=function(n){this._rawModule.actions&&o(this._rawModule.actions,n)},a.prototype.forEachMutation=function(n){this._rawModule.mutations&&o(this._rawModule.mutations,n)},Object.defineProperties(a.prototype,i);var s,u=function(n){this.register([],n,!1)};function l(n,t,e){if(t.update(e),e.modules)for(var r in e.modules){if(!t.getChild(r))return;l(n.concat(r),t.getChild(r),e.modules[r])}}u.prototype.get=function(n){return n.reduce((function(n,t){return n.getChild(t)}),this.root)},u.prototype.getNamespace=function(n){var t=this.root;return n.reduce((function(n,e){return n+((t=t.getChild(e)).namespaced?e+"/":"")}),"")},u.prototype.update=function(n){l([],this.root,n)},u.prototype.register=function(n,t,e){var r=this;void 0===e&&(e=!0);var i=new a(t,e);0===n.length?this.root=i:this.get(n.slice(0,-1)).addChild(n[n.length-1],i),t.modules&&o(t.modules,(function(t,o){r.register(n.concat(o),t,e)}))},u.prototype.unregister=function(n){var t=this.get(n.slice(0,-1)),e=n[n.length-1];t.getChild(e).runtime&&t.removeChild(e)};var c=function(n){var t=this;void 0===n&&(n={}),!s&&"undefined"!=typeof window&&window.Vue&&b(window.Vue);var e=n.plugins;void 0===e&&(e=[]);var o=n.strict;void 0===o&&(o=!1);var a=n.state;void 0===a&&(a={}),"function"==typeof a&&(a=a()||{}),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new u(n),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new s;var i=this,l=this.dispatch,c=this.commit;this.dispatch=function(n,t){return l.call(i,n,t)},this.commit=function(n,t,e){return c.call(i,n,t,e)},this.strict=o,g(this,a,[],this._modules.root),h(this,a),e.forEach((function(n){return n(t)})),s.config.devtools&&function(n){r&&(n._devtoolHook=r,r.emit("vuex:init",n),r.on("vuex:travel-to-state",(function(t){n.replaceState(t)})),n.subscribe((function(n,t){r.emit("vuex:mutation",n,t)})))}(this)},d={state:{configurable:!0}};function f(n,t){return t.indexOf(n)<0&&t.push(n),function(){var e=t.indexOf(n);e>-1&&t.splice(e,1)}}function p(n,t){n._actions=Object.create(null),n._mutations=Object.create(null),n._wrappedGetters=Object.create(null),n._modulesNamespaceMap=Object.create(null);var e=n.state;g(n,e,[],n._modules.root,!0),h(n,e,t)}function h(n,t,e){var r=n._vm;n.getters={};var a=n._wrappedGetters,i={};o(a,(function(t,e){i[e]=function(){return t(n)},Object.defineProperty(n.getters,e,{get:function(){return n._vm[e]},enumerable:!0})}));var u=s.config.silent;s.config.silent=!0,n._vm=new s({data:{$$state:t},computed:i}),s.config.silent=u,n.strict&&function(n){n._vm.$watch((function(){return this._data.$$state}),(function(){}),{deep:!0,sync:!0})}(n),r&&(e&&n._withCommit((function(){r._data.$$state=null})),s.nextTick((function(){return r.$destroy()})))}function g(n,t,e,r,o){var a=!e.length,i=n._modules.getNamespace(e);if(r.namespaced&&(n._modulesNamespaceMap[i]=r),!a&&!o){var u=$(t,e.slice(0,-1)),l=e[e.length-1];n._withCommit((function(){s.set(u,l,r.state)}))}var c=r.context=function(n,t,e){var r=""===t,o={dispatch:r?n.dispatch:function(e,r,o){var a=m(e,r,o),i=a.payload,s=a.options,u=a.type;return s&&s.root||(u=t+u),n.dispatch(u,i)},commit:r?n.commit:function(e,r,o){var a=m(e,r,o),i=a.payload,s=a.options,u=a.type;s&&s.root||(u=t+u),n.commit(u,i,s)}};return Object.defineProperties(o,{getters:{get:r?function(){return n.getters}:function(){return function(n,t){var e={},r=t.length;return Object.keys(n.getters).forEach((function(o){if(o.slice(0,r)===t){var a=o.slice(r);Object.defineProperty(e,a,{get:function(){return n.getters[o]},enumerable:!0})}})),e}(n,t)}},state:{get:function(){return $(n.state,e)}}}),o}(n,i,e);r.forEachMutation((function(t,e){!function(n,t,e,r){(n._mutations[t]||(n._mutations[t]=[])).push((function(t){e.call(n,r.state,t)}))}(n,i+e,t,c)})),r.forEachAction((function(t,e){var r=t.root?e:i+e,o=t.handler||t;!function(n,t,e,r){(n._actions[t]||(n._actions[t]=[])).push((function(t,o){var a,i=e.call(n,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:n.getters,rootState:n.state},t,o);return(a=i)&&"function"==typeof a.then||(i=Promise.resolve(i)),n._devtoolHook?i.catch((function(t){throw n._devtoolHook.emit("vuex:error",t),t})):i}))}(n,r,o,c)})),r.forEachGetter((function(t,e){!function(n,t,e,r){n._wrappedGetters[t]||(n._wrappedGetters[t]=function(n){return e(r.state,r.getters,n.state,n.getters)})}(n,i+e,t,c)})),r.forEachChild((function(r,a){g(n,t,e.concat(a),r,o)}))}function $(n,t){return t.length?t.reduce((function(n,t){return n[t]}),n):n}function m(n,t,e){var r;return null!==(r=n)&&"object"==typeof r&&n.type&&(e=t,t=n,n=n.type),{type:n,payload:t,options:e}}function b(n){s&&n===s||function(n){if(Number(n.version.split(".")[0])>=2)n.mixin({beforeCreate:e});else{var t=n.prototype._init;n.prototype._init=function(n){void 0===n&&(n={}),n.init=n.init?[e].concat(n.init):e,t.call(this,n)}}function e(){var n=this.$options;n.store?this.$store="function"==typeof n.store?n.store():n.store:n.parent&&n.parent.$store&&(this.$store=n.parent.$store)}}(s=n)}d.state.get=function(){return this._vm._data.$$state},d.state.set=function(n){},c.prototype.commit=function(n,t,e){var r=this,o=m(n,t,e),a=o.type,i=o.payload,s=(o.options,{type:a,payload:i}),u=this._mutations[a];u&&(this._withCommit((function(){u.forEach((function(n){n(i)}))})),this._subscribers.forEach((function(n){return n(s,r.state)})))},c.prototype.dispatch=function(n,t){var e=this,r=m(n,t),o=r.type,a=r.payload,i={type:o,payload:a},s=this._actions[o];if(s)return this._actionSubscribers.forEach((function(n){return n(i,e.state)})),s.length>1?Promise.all(s.map((function(n){return n(a)}))):s[0](a)},c.prototype.subscribe=function(n){return f(n,this._subscribers)},c.prototype.subscribeAction=function(n){return f(n,this._actionSubscribers)},c.prototype.watch=function(n,t,e){var r=this;return this._watcherVM.$watch((function(){return n(r.state,r.getters)}),t,e)},c.prototype.replaceState=function(n){var t=this;this._withCommit((function(){t._vm._data.$$state=n}))},c.prototype.registerModule=function(n,t,e){void 0===e&&(e={}),"string"==typeof n&&(n=[n]),this._modules.register(n,t),g(this,this.state,n,this._modules.get(n),e.preserveState),h(this,this.state)},c.prototype.unregisterModule=function(n){var t=this;"string"==typeof n&&(n=[n]),this._modules.unregister(n),this._withCommit((function(){var e=$(t.state,n.slice(0,-1));s.delete(e,n[n.length-1])})),p(this)},c.prototype.hotUpdate=function(n){this._modules.update(n),p(this,!0)},c.prototype._withCommit=function(n){var t=this._committing;this._committing=!0,n(),this._committing=t},Object.defineProperties(c.prototype,d);var v=C((function(n,t){var e={};return k(t).forEach((function(t){var r=t.key,o=t.val;e[r]=function(){var t=this.$store.state,e=this.$store.getters;if(n){var r=A(this.$store,0,n);if(!r)return;t=r.context.state,e=r.context.getters}return"function"==typeof o?o.call(this,t,e):t[o]},e[r].vuex=!0})),e})),y=C((function(n,t){var e={};return k(t).forEach((function(t){var r=t.key,o=t.val;e[r]=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=this.$store.commit;if(n){var a=A(this.$store,0,n);if(!a)return;r=a.context.commit}return"function"==typeof o?o.apply(this,[r].concat(t)):r.apply(this.$store,[o].concat(t))}})),e})),w=C((function(n,t){var e={};return k(t).forEach((function(t){var r=t.key,o=t.val;o=n+o,e[r]=function(){if(!n||A(this.$store,0,n))return this.$store.getters[o]},e[r].vuex=!0})),e})),_=C((function(n,t){var e={};return k(t).forEach((function(t){var r=t.key,o=t.val;e[r]=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=this.$store.dispatch;if(n){var a=A(this.$store,0,n);if(!a)return;r=a.context.dispatch}return"function"==typeof o?o.apply(this,[r].concat(t)):r.apply(this.$store,[o].concat(t))}})),e})),x=function(n){return{mapState:v.bind(null,n),mapGetters:w.bind(null,n),mapMutations:y.bind(null,n),mapActions:_.bind(null,n)}};function k(n){return Array.isArray(n)?n.map((function(n){return{key:n,val:n}})):Object.keys(n).map((function(t){return{key:t,val:n[t]}}))}function C(n){return function(t,e){return"string"!=typeof t?(e=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),n(t,e)}}function A(n,t,e){return n._modulesNamespaceMap[e]}const T={Store:c,install:b,version:"2.5.0",mapState:v,mapMutations:y,mapGetters:w,mapActions:_,createNamespacedHelpers:x}},73609:n=>{"use strict";n.exports=window.jQuery},76608:()=>{}},t={};function e(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,loaded:!1,exports:{}};return n[r].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}e.n=n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return e.d(t,{a:t}),t},e.d=(n,t)=>{for(var r in t)e.o(t,r)&&!e.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:t[r]})},e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),e.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),e.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.nmd=n=>(n.paths=[],n.children||(n.children=[]),n),(()=>{"use strict";var n=i(e(72100)),t=i(e(3830)),r=i(e(29778)),o=i(e(65191)),a=i(e(99271));function i(n){return n&&n.__esModule?n:{default:n}}n.default.mixin(a.default),new n.default({router:o.default,store:r.default,el:"#translations-app",template:"<app />",components:{app:t.default},beforeMount:function(){this.$store.dispatch("getTranslations")}})})(),window.translations={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL21peGlucy90cmFuc2xhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9yb3V0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9zdG9yZS9hY3Rpb25zLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvc3RvcmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9zdG9yZS9tdXRhdGlvbi10eXBlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL3N0b3JlL211dGF0aW9ucy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvZXZlbnQtYnVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC91dGlscy9ncm93bC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL2FwcC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbC9pbmRleC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9wcmluY2lwYWwvdHJhbnNsYXRpb24taW5wdXQudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvc2lkZWJhci9pbmRleC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLWFsZXJ0LnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3dpZGdldHMvcHMtYnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3dpZGdldHMvcHMtY2hlY2tib3gudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy1tb2RhbC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLXBhZ2luYXRpb24udnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy10YWdzLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0udnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy10cmVlL3BzLXRyZWUudnVlIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9hcHAudnVlP2MwYjYiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbC9pbmRleC52dWU/MmExNCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvcHJpbmNpcGFsL3RyYW5zbGF0aW9uLWlucHV0LnZ1ZT8wMjdhIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyL2luZGV4LnZ1ZT85NDNiIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW1vZGFsLnZ1ZT9kY2FiIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sb2Rhc2guanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL2FwcC52dWU/NDlkZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvYXBwLnZ1ZT82Y2E2Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9hcHAudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoLnZ1ZT9lYTZkIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoLnZ1ZT9jZDRhIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvcHJpbmNpcGFsL2luZGV4LnZ1ZT9lZGRkIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9wcmluY2lwYWwvaW5kZXgudnVlP2E4NGMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbC9pbmRleC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbC90cmFuc2xhdGlvbi1pbnB1dC52dWU/YWQxYiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvcHJpbmNpcGFsL3RyYW5zbGF0aW9uLWlucHV0LnZ1ZT82ZmEyIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9wcmluY2lwYWwvdHJhbnNsYXRpb24taW5wdXQudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyL2luZGV4LnZ1ZT8xZjk2Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyL2luZGV4LnZ1ZT85MWVmIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyL2luZGV4LnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1hbGVydC52dWU/N2UwMiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1hbGVydC52dWU/ODJlMCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1hbGVydC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtYnV0dG9uLnZ1ZT9hZTIxIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWJ1dHRvbi52dWU/MjVjMyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1idXR0b24udnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWNoZWNrYm94LnZ1ZT80ZTc2Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWNoZWNrYm94LnZ1ZT80MzJhIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWNoZWNrYm94LnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1tb2RhbC52dWU/YWY3ZCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1tb2RhbC52dWU/OTA5MSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1tb2RhbC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtcGFnaW5hdGlvbi52dWU/ZDQ2ZiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1wYWdpbmF0aW9uLnZ1ZT85Yjc4Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXBhZ2luYXRpb24udnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXNwaW5uZXIudnVlP2E1NjYiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtc3Bpbm5lci52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdGFncy52dWU/NmJiMSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy10YWdzLnZ1ZT8zMjZlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRhZ3MudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS1pdGVtLnZ1ZT85MjFiIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS1pdGVtLnZ1ZT9jMmNlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS1pdGVtLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy10cmVlL3BzLXRyZWUudnVlPzVhNmIiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLnZ1ZT8xZmM4Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlLXJlc291cmNlL2Rpc3QvdnVlLXJlc291cmNlLmVzbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuZXNtLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9hcHAudnVlPzc4NmIiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbC9pbmRleC52dWU/Yzk4ZiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvcHJpbmNpcGFsL3RyYW5zbGF0aW9uLWlucHV0LnZ1ZT9iZTg0Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyL2luZGV4LnZ1ZT9hNjJkIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW1vZGFsLnZ1ZT9kYmRhIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9saXN0VG9TdHlsZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5wcm9kLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWV4L2Rpc3QvdnVleC5lc20uanMiLCJ3ZWJwYWNrOi8vW25hbWVdL2V4dGVybmFsIFwialF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vW25hbWVdL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvaW5kZXguanMiXSwibmFtZXMiOlsibWV0aG9kcyIsInRyYW5zIiwia2V5IiwidGhpcyIsIiRzdG9yZSIsImdldHRlcnMiLCJ0cmFuc2xhdGlvbnMiLCJWdWUiLCJ1c2UiLCJWdWVSb3V0ZXIiLCJtb2RlIiwiYmFzZSIsIndpbmRvdyIsImRhdGEiLCJiYXNlVXJsIiwicm91dGVzIiwicGF0aCIsIm5hbWUiLCJjb21wb25lbnQiLCJPdmVydmlldyIsInR5cGVzIiwiVnVlUmVzb3VyY2UiLCJnZXRUcmFuc2xhdGlvbnMiLCJjb21taXQiLCJ1cmwiLCJ0cmFuc2xhdGlvblVybCIsImh0dHAiLCJnZXQiLCJ0aGVuIiwicmVzcG9uc2UiLCJTRVRfVFJBTlNMQVRJT05TIiwiYm9keSIsIkFQUF9JU19SRUFEWSIsImVycm9yIiwic2hvd0dyb3dsIiwiYm9keVRleHQiLCJKU09OIiwicGFyc2UiLCJzdGF0dXNUZXh0IiwiZ2V0Q2F0YWxvZyIsInBheWxvYWQiLCJQUklOQ0lQQUxfTE9BRElORyIsInBhcmFtcyIsInBhZ2Vfc2l6ZSIsInBhZ2VfaW5kZXgiLCJTRVRfVE9UQUxfUEFHRVMiLCJoZWFkZXJzIiwiU0VUX0NBVEFMT0ciLCJnZXREb21haW5zVHJlZSIsImRvbWFpbnNUcmVlVXJsIiwiU0lERUJBUl9MT0FESU5HIiwic3RvcmUiLCJzZWFyY2hUYWdzIiwibGVuZ3RoIiwic2VhcmNoIiwiU0VUX0RPTUFJTlNfVFJFRSIsIlJFU0VUX0NVUlJFTlRfRE9NQUlOIiwicmVmcmVzaENvdW50cyIsIkRFQ1JFQVNFX0NVUlJFTlRfRE9NQUlOX1RPVEFMX01JU1NJTkdfVFJBTlNMQVRJT05TIiwic3VjY2Vzc2Z1bGx5U2F2ZWQiLCJzYXZlVHJhbnNsYXRpb25zIiwicG9zdCIsImRpc3BhdGNoIiwiUkVTRVRfTU9ESUZJRURfVFJBTlNMQVRJT05TIiwicmVzZXRUcmFuc2xhdGlvbiIsInVwZGF0ZVBhZ2VJbmRleCIsInBhZ2VJbmRleCIsIlNFVF9QQUdFX0lOREVYIiwidXBkYXRlQ3VycmVudERvbWFpbiIsImN1cnJlbnREb21haW4iLCJTRVRfQ1VSUkVOVF9ET01BSU4iLCJ1cGRhdGVQcmluY2lwYWxMb2FkaW5nIiwicHJpbmNpcGFsTG9hZGluZyIsInVwZGF0ZVNlYXJjaCIsIlNFQVJDSF9UQUdTIiwiYWN0aW9ucyIsIlZ1ZXgiLCJzdGF0ZSIsInRvdGFsUGFnZXMiLCJ0cmFuc2xhdGlvbnNQZXJQYWdlIiwiaW5mbyIsImNhdGFsb2ciLCJkb21haW5zVHJlZSIsInRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyIsInRvdGFsVHJhbnNsYXRpb25zIiwiY3VycmVudERvbWFpblRvdGFsVHJhbnNsYXRpb25zIiwiY3VycmVudERvbWFpblRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyIsImlzUmVhZHkiLCJzaWRlYmFyTG9hZGluZyIsIm1vZGlmaWVkVHJhbnNsYXRpb25zIiwicm9vdFN0YXRlIiwiY29udmVydCIsImRvbWFpbnMiLCJmb3JFYWNoIiwiZG9tYWluIiwiY2hpbGRyZW4iLCJfIiwidmFsdWVzIiwiZXh0cmFMYWJlbCIsInRvdGFsX21pc3NpbmdfdHJhbnNsYXRpb25zIiwiZGF0YVZhbHVlIiwiZG9tYWluX2NhdGFsb2dfbGluayIsIndhcm5pbmciLCJCb29sZWFuIiwiZGlzYWJsZSIsInRvdGFsX3RyYW5zbGF0aW9ucyIsImlkIiwiZnVsbF9uYW1lIiwiU3RvcmUiLCJtdXRhdGlvbnMiLCJ0IiwidHJhbnNsYXRpb25faWQiLCJ0cmVlIiwiTnVtYmVyIiwiaXNMb2FkaW5nIiwiRXZlbnRCdXMiLCJ0eXBlIiwibWVzc2FnZSIsImR1cmF0aW9uVGltZSIsImR1cmF0aW9uIiwidW5kZWZpbmVkIiwiJCIsImdyb3dsIiwidGl0bGUiLCJzaXplIiwiZGVzdEhyZWYiLCJsZWF2ZSIsIm9yaWdpbmFsVHJhbnNsYXRpb25zIiwiY2hlY2tlZCIsIm11bHRpUGFnZXNUb0Rpc3BsYXkiLCJtdWx0aVBhZ2VzQWN0aXZhdGlvbkxpbWl0Iiwib3BlbiIsImN1cnJlbnQiLCJtb2R1bGUiLCJleHBvcnRzIiwiX19lc01vZHVsZSIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCIkT2JqZWN0IiwiaXQiLCJkZXNjIiwiZGVmaW5lUHJvcGVydHkiLCJUeXBlRXJyb3IiLCJpc09iamVjdCIsInRvSU9iamVjdCIsInRvTGVuZ3RoIiwidG9BYnNvbHV0ZUluZGV4IiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImVsIiwiZnJvbUluZGV4IiwiTyIsImluZGV4IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsImEiLCJiIiwiYyIsImFwcGx5IiwiYXJndW1lbnRzIiwiT2JqZWN0IiwiZG9jdW1lbnQiLCJpcyIsImNyZWF0ZUVsZW1lbnQiLCJzcGxpdCIsImdsb2JhbCIsImN0eCIsImhpZGUiLCJoYXMiLCIkZXhwb3J0Iiwic291cmNlIiwib3duIiwib3V0IiwiSVNfRk9SQ0VEIiwiRiIsIklTX0dMT0JBTCIsIkciLCJJU19TVEFUSUMiLCJTIiwiSVNfUFJPVE8iLCJQIiwiSVNfQklORCIsIkIiLCJJU19XUkFQIiwiVyIsImV4cFByb3RvIiwidGFyZ2V0IiwiQyIsIkZ1bmN0aW9uIiwidmlydHVhbCIsIlIiLCJVIiwiZXhlYyIsImUiLCJNYXRoIiwic2VsZiIsIl9fZyIsImhhc093blByb3BlcnR5IiwiZFAiLCJjcmVhdGVEZXNjIiwib2JqZWN0IiwiZiIsImNvZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiYW5PYmplY3QiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiQXR0cmlidXRlcyIsImFycmF5SW5kZXhPZiIsIklFX1BST1RPIiwibmFtZXMiLCJpIiwicmVzdWx0IiwicHVzaCIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJrZXlzIiwiZmFpbHMiLCJLRVkiLCJleHAiLCJERVNDUklQVE9SUyIsImdldEtleXMiLCJpc0VudW0iLCJpc0VudHJpZXMiLCJiaXRtYXAiLCJzaGFyZWQiLCJ1aWQiLCJTSEFSRUQiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXIiLCJtYXgiLCJtaW4iLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsIklPYmplY3QiLCJkZWZpbmVkIiwidmFsIiwidmFsdWVPZiIsInB4IiwicmFuZG9tIiwiY29uY2F0IiwidG9PYmplY3QiLCIkdmFsdWVzIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsIm1hcCIsIml0ZW0iLCJjb250ZW50Iiwiam9pbiIsIm1vZHVsZXMiLCJtZWRpYVF1ZXJ5IiwiZGVkdXBlIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIl9pIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJhcnIyIiwiQXJyYXkiLCJfaXRlbSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJTeW1ib2wiLCJpdGVyYXRvciIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIm5leHQiLCJkb25lIiwiZXJyIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwibyIsIm1pbkxlbiIsIm4iLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsImZyb20iLCJ0ZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzdHJpbmdpZnkiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2VSb290IiwiRlVOQ19FUlJPUl9URVhUIiwiSEFTSF9VTkRFRklORUQiLCJQTEFDRUhPTERFUiIsIldSQVBfUEFSVElBTF9GTEFHIiwiV1JBUF9BUllfRkxBRyIsIklORklOSVRZIiwiTUFYX1NBRkVfSU5URUdFUiIsIk5BTiIsIk1BWF9BUlJBWV9MRU5HVEgiLCJ3cmFwRmxhZ3MiLCJhcmdzVGFnIiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsImVycm9yVGFnIiwiZnVuY1RhZyIsImdlblRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsIm9iamVjdFRhZyIsInByb21pc2VUYWciLCJyZWdleHBUYWciLCJzZXRUYWciLCJzdHJpbmdUYWciLCJzeW1ib2xUYWciLCJ3ZWFrTWFwVGFnIiwiYXJyYXlCdWZmZXJUYWciLCJkYXRhVmlld1RhZyIsImZsb2F0MzJUYWciLCJmbG9hdDY0VGFnIiwiaW50OFRhZyIsImludDE2VGFnIiwiaW50MzJUYWciLCJ1aW50OFRhZyIsInVpbnQ4Q2xhbXBlZFRhZyIsInVpbnQxNlRhZyIsInVpbnQzMlRhZyIsInJlRW1wdHlTdHJpbmdMZWFkaW5nIiwicmVFbXB0eVN0cmluZ01pZGRsZSIsInJlRW1wdHlTdHJpbmdUcmFpbGluZyIsInJlRXNjYXBlZEh0bWwiLCJyZVVuZXNjYXBlZEh0bWwiLCJyZUhhc0VzY2FwZWRIdG1sIiwiUmVnRXhwIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwicmVJbnRlcnBvbGF0ZSIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJyZVByb3BOYW1lIiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwicmVUcmltU3RhcnQiLCJyZVdoaXRlc3BhY2UiLCJyZVdyYXBDb21tZW50IiwicmVXcmFwRGV0YWlscyIsInJlU3BsaXREZXRhaWxzIiwicmVBc2NpaVdvcmQiLCJyZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycyIsInJlRXNjYXBlQ2hhciIsInJlRXNUZW1wbGF0ZSIsInJlRmxhZ3MiLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNIb3N0Q3RvciIsInJlSXNPY3RhbCIsInJlSXNVaW50IiwicmVMYXRpbiIsInJlTm9NYXRjaCIsInJlVW5lc2NhcGVkU3RyaW5nIiwicnNDb21ib1JhbmdlIiwicnNDb21ib01hcmtzUmFuZ2UiLCJyc0xvd2VyUmFuZ2UiLCJyc1VwcGVyUmFuZ2UiLCJyc0JyZWFrUmFuZ2UiLCJyc01hdGhPcFJhbmdlIiwicnNCcmVhayIsInJzQ29tYm8iLCJyc0RpZ2l0cyIsInJzTG93ZXIiLCJyc01pc2MiLCJyc0ZpdHoiLCJyc05vbkFzdHJhbCIsInJzUmVnaW9uYWwiLCJyc1N1cnJQYWlyIiwicnNVcHBlciIsInJzTWlzY0xvd2VyIiwicnNNaXNjVXBwZXIiLCJyc09wdENvbnRyTG93ZXIiLCJyc09wdENvbnRyVXBwZXIiLCJyZU9wdE1vZCIsInJzTW9kaWZpZXIiLCJyc09wdFZhciIsInJzU2VxIiwicnNFbW9qaSIsInJzU3ltYm9sIiwicmVBcG9zIiwicmVDb21ib01hcmsiLCJyZVVuaWNvZGUiLCJyZVVuaWNvZGVXb3JkIiwicmVIYXNVbmljb2RlIiwicmVIYXNVbmljb2RlV29yZCIsImNvbnRleHRQcm9wcyIsInRlbXBsYXRlQ291bnRlciIsInR5cGVkQXJyYXlUYWdzIiwiY2xvbmVhYmxlVGFncyIsInN0cmluZ0VzY2FwZXMiLCJmcmVlUGFyc2VGbG9hdCIsInBhcnNlRmxvYXQiLCJmcmVlUGFyc2VJbnQiLCJwYXJzZUludCIsImZyZWVHbG9iYWwiLCJnIiwiZnJlZVNlbGYiLCJyb290IiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJyZXF1aXJlIiwiYmluZGluZyIsIm5vZGVJc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsIm5vZGVJc0RhdGUiLCJpc0RhdGUiLCJub2RlSXNNYXAiLCJpc01hcCIsIm5vZGVJc1JlZ0V4cCIsImlzUmVnRXhwIiwibm9kZUlzU2V0IiwiaXNTZXQiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiZnVuYyIsInRoaXNBcmciLCJhcmdzIiwiYXJyYXlBZ2dyZWdhdG9yIiwiYXJyYXkiLCJzZXR0ZXIiLCJpdGVyYXRlZSIsImFjY3VtdWxhdG9yIiwiYXJyYXlFYWNoIiwiYXJyYXlFYWNoUmlnaHQiLCJhcnJheUV2ZXJ5IiwicHJlZGljYXRlIiwiYXJyYXlGaWx0ZXIiLCJyZXNJbmRleCIsImFycmF5SW5jbHVkZXMiLCJiYXNlSW5kZXhPZiIsImFycmF5SW5jbHVkZXNXaXRoIiwiY29tcGFyYXRvciIsImFycmF5TWFwIiwiYXJyYXlQdXNoIiwib2Zmc2V0IiwiYXJyYXlSZWR1Y2UiLCJpbml0QWNjdW0iLCJhcnJheVJlZHVjZVJpZ2h0IiwiYXJyYXlTb21lIiwiYXNjaWlTaXplIiwiYmFzZVByb3BlcnR5IiwiYmFzZUZpbmRLZXkiLCJjb2xsZWN0aW9uIiwiZWFjaEZ1bmMiLCJiYXNlRmluZEluZGV4IiwiZnJvbVJpZ2h0Iiwic3RyaWN0SW5kZXhPZiIsImJhc2VJc05hTiIsImJhc2VJbmRleE9mV2l0aCIsImJhc2VNZWFuIiwiYmFzZVN1bSIsImJhc2VQcm9wZXJ0eU9mIiwiYmFzZVJlZHVjZSIsImJhc2VUaW1lcyIsImJhc2VUcmltIiwic3RyaW5nIiwidHJpbW1lZEVuZEluZGV4IiwicmVwbGFjZSIsImJhc2VVbmFyeSIsImJhc2VWYWx1ZXMiLCJwcm9wcyIsImNhY2hlSGFzIiwiY2FjaGUiLCJjaGFyc1N0YXJ0SW5kZXgiLCJzdHJTeW1ib2xzIiwiY2hyU3ltYm9scyIsImNoYXJzRW5kSW5kZXgiLCJjb3VudEhvbGRlcnMiLCJwbGFjZWhvbGRlciIsImRlYnVyckxldHRlciIsImVzY2FwZUh0bWxDaGFyIiwiZXNjYXBlU3RyaW5nQ2hhciIsImNociIsImhhc1VuaWNvZGUiLCJtYXBUb0FycmF5Iiwib3ZlckFyZyIsInRyYW5zZm9ybSIsImFyZyIsInJlcGxhY2VIb2xkZXJzIiwic2V0VG9BcnJheSIsInNldCIsInNldFRvUGFpcnMiLCJzdHJpbmdTaXplIiwibGFzdEluZGV4IiwidW5pY29kZVNpemUiLCJzdHJpbmdUb0FycmF5IiwibWF0Y2giLCJ1bmljb2RlVG9BcnJheSIsImFzY2lpVG9BcnJheSIsImNoYXJBdCIsInVuZXNjYXBlSHRtbENoYXIiLCJydW5JbkNvbnRleHQiLCJjb250ZXh0IiwiZGVmYXVsdHMiLCJwaWNrIiwiRGF0ZSIsIkVycm9yIiwiU3RyaW5nIiwiYXJyYXlQcm90byIsImZ1bmNQcm90byIsIm9iamVjdFByb3RvIiwiY29yZUpzRGF0YSIsImZ1bmNUb1N0cmluZyIsImlkQ291bnRlciIsIm1hc2tTcmNLZXkiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsIm9iamVjdEN0b3JTdHJpbmciLCJvbGREYXNoIiwicmVJc05hdGl2ZSIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJhbGxvY1Vuc2FmZSIsImdldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwib2JqZWN0Q3JlYXRlIiwiY3JlYXRlIiwic3BsaWNlIiwic3ByZWFkYWJsZVN5bWJvbCIsImlzQ29uY2F0U3ByZWFkYWJsZSIsInN5bUl0ZXJhdG9yIiwic3ltVG9TdHJpbmdUYWciLCJ0b1N0cmluZ1RhZyIsImdldE5hdGl2ZSIsImN0eENsZWFyVGltZW91dCIsImNsZWFyVGltZW91dCIsImN0eE5vdyIsIm5vdyIsImN0eFNldFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwibmF0aXZlQ2VpbCIsIm5hdGl2ZUZsb29yIiwibmF0aXZlR2V0U3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hdGl2ZUlzQnVmZmVyIiwiaXNCdWZmZXIiLCJuYXRpdmVJc0Zpbml0ZSIsImlzRmluaXRlIiwibmF0aXZlSm9pbiIsIm5hdGl2ZUtleXMiLCJuYXRpdmVNYXgiLCJuYXRpdmVNaW4iLCJuYXRpdmVOb3ciLCJuYXRpdmVQYXJzZUludCIsIm5hdGl2ZVJhbmRvbSIsIm5hdGl2ZVJldmVyc2UiLCJyZXZlcnNlIiwiRGF0YVZpZXciLCJNYXAiLCJQcm9taXNlIiwiU2V0IiwiV2Vha01hcCIsIm5hdGl2ZUNyZWF0ZSIsIm1ldGFNYXAiLCJyZWFsTmFtZXMiLCJkYXRhVmlld0N0b3JTdHJpbmciLCJ0b1NvdXJjZSIsIm1hcEN0b3JTdHJpbmciLCJwcm9taXNlQ3RvclN0cmluZyIsInNldEN0b3JTdHJpbmciLCJ3ZWFrTWFwQ3RvclN0cmluZyIsInN5bWJvbFByb3RvIiwic3ltYm9sVmFsdWVPZiIsInN5bWJvbFRvU3RyaW5nIiwibG9kYXNoIiwiaXNPYmplY3RMaWtlIiwiTGF6eVdyYXBwZXIiLCJMb2Rhc2hXcmFwcGVyIiwid3JhcHBlckNsb25lIiwiYmFzZUNyZWF0ZSIsInByb3RvIiwiYmFzZUxvZGFzaCIsImNoYWluQWxsIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fY2hhaW5fXyIsIl9faW5kZXhfXyIsIl9fdmFsdWVzX18iLCJfX2Rpcl9fIiwiX19maWx0ZXJlZF9fIiwiX19pdGVyYXRlZXNfXyIsIl9fdGFrZUNvdW50X18iLCJfX3ZpZXdzX18iLCJIYXNoIiwiZW50cmllcyIsImNsZWFyIiwiZW50cnkiLCJMaXN0Q2FjaGUiLCJNYXBDYWNoZSIsIlNldENhY2hlIiwiX19kYXRhX18iLCJhZGQiLCJTdGFjayIsImFycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNBcmd1bWVudHMiLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsImlzSW5kZXgiLCJhcnJheVNhbXBsZSIsImJhc2VSYW5kb20iLCJhcnJheVNhbXBsZVNpemUiLCJzaHVmZmxlU2VsZiIsImNvcHlBcnJheSIsImJhc2VDbGFtcCIsImFycmF5U2h1ZmZsZSIsImFzc2lnbk1lcmdlVmFsdWUiLCJlcSIsImJhc2VBc3NpZ25WYWx1ZSIsImFzc2lnblZhbHVlIiwib2JqVmFsdWUiLCJhc3NvY0luZGV4T2YiLCJiYXNlQWdncmVnYXRvciIsImJhc2VFYWNoIiwiYmFzZUFzc2lnbiIsImNvcHlPYmplY3QiLCJiYXNlQXQiLCJwYXRocyIsInNraXAiLCJudW1iZXIiLCJsb3dlciIsInVwcGVyIiwiYmFzZUNsb25lIiwiYml0bWFzayIsImN1c3RvbWl6ZXIiLCJzdGFjayIsImlzRGVlcCIsImlzRmxhdCIsImlzRnVsbCIsImlucHV0IiwiaW5pdENsb25lQXJyYXkiLCJ0YWciLCJnZXRUYWciLCJpc0Z1bmMiLCJjbG9uZUJ1ZmZlciIsImluaXRDbG9uZU9iamVjdCIsImdldFN5bWJvbHNJbiIsImNvcHlTeW1ib2xzSW4iLCJrZXlzSW4iLCJiYXNlQXNzaWduSW4iLCJnZXRTeW1ib2xzIiwiY29weVN5bWJvbHMiLCJzeW1ib2wiLCJDdG9yIiwiY2xvbmVBcnJheUJ1ZmZlciIsImRhdGFWaWV3IiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImJ5dGVMZW5ndGgiLCJjbG9uZURhdGFWaWV3IiwiY2xvbmVUeXBlZEFycmF5IiwicmVnZXhwIiwiY2xvbmVSZWdFeHAiLCJpbml0Q2xvbmVCeVRhZyIsInN0YWNrZWQiLCJzdWJWYWx1ZSIsImdldEFsbEtleXNJbiIsImdldEFsbEtleXMiLCJiYXNlQ29uZm9ybXNUbyIsImJhc2VEZWxheSIsIndhaXQiLCJiYXNlRGlmZmVyZW5jZSIsImluY2x1ZGVzIiwiaXNDb21tb24iLCJ2YWx1ZXNMZW5ndGgiLCJvdXRlciIsImNvbXB1dGVkIiwidmFsdWVzSW5kZXgiLCJ0ZW1wbGF0ZVNldHRpbmdzIiwicG9wIiwiZ2V0TWFwRGF0YSIsInBhaXJzIiwiTEFSR0VfQVJSQVlfU0laRSIsImNyZWF0ZUJhc2VFYWNoIiwiYmFzZUZvck93biIsImJhc2VFYWNoUmlnaHQiLCJiYXNlRm9yT3duUmlnaHQiLCJiYXNlRXZlcnkiLCJiYXNlRXh0cmVtdW0iLCJpc1N5bWJvbCIsImJhc2VGaWx0ZXIiLCJiYXNlRmxhdHRlbiIsImRlcHRoIiwiaXNTdHJpY3QiLCJpc0ZsYXR0ZW5hYmxlIiwiYmFzZUZvciIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yUmlnaHQiLCJiYXNlRnVuY3Rpb25zIiwiaXNGdW5jdGlvbiIsImJhc2VHZXQiLCJjYXN0UGF0aCIsInRvS2V5IiwiYmFzZUdldEFsbEtleXMiLCJrZXlzRnVuYyIsInN5bWJvbHNGdW5jIiwiYmFzZUdldFRhZyIsImlzT3duIiwidW5tYXNrZWQiLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHdCIsIm90aGVyIiwiYmFzZUhhcyIsImJhc2VIYXNJbiIsImJhc2VJbnRlcnNlY3Rpb24iLCJhcnJheXMiLCJvdGhMZW5ndGgiLCJvdGhJbmRleCIsImNhY2hlcyIsIm1heExlbmd0aCIsIkluZmluaXR5Iiwic2VlbiIsImJhc2VJbnZva2UiLCJwYXJlbnQiLCJsYXN0IiwiYmFzZUlzQXJndW1lbnRzIiwiYmFzZUlzRXF1YWwiLCJlcXVhbEZ1bmMiLCJvYmpJc0FyciIsIm90aElzQXJyIiwib2JqVGFnIiwib3RoVGFnIiwib2JqSXNPYmoiLCJvdGhJc09iaiIsImlzU2FtZVRhZyIsImVxdWFsQXJyYXlzIiwiaXNQYXJ0aWFsIiwiZXF1YWxCeVRhZyIsIm9iaklzV3JhcHBlZCIsIm90aElzV3JhcHBlZCIsIm9ialVud3JhcHBlZCIsIm90aFVud3JhcHBlZCIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsIm90aFN0YWNrZWQiLCJza2lwQ3RvciIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvYmpDdG9yIiwib3RoQ3RvciIsImVxdWFsT2JqZWN0cyIsImJhc2VJc0VxdWFsRGVlcCIsImJhc2VJc01hdGNoIiwibWF0Y2hEYXRhIiwibm9DdXN0b21pemVyIiwic3JjVmFsdWUiLCJDT01QQVJFX1BBUlRJQUxfRkxBRyIsImJhc2VJc05hdGl2ZSIsImJhc2VJdGVyYXRlZSIsImlkZW50aXR5IiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsImJhc2VNYXRjaGVzIiwicHJvcGVydHkiLCJiYXNlS2V5cyIsImlzUHJvdG90eXBlIiwiYmFzZUx0IiwiYmFzZU1hcCIsImlzQXJyYXlMaWtlIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJpc0tleSIsImlzU3RyaWN0Q29tcGFyYWJsZSIsImhhc0luIiwiYmFzZU1lcmdlIiwic3JjSW5kZXgiLCJtZXJnZUZ1bmMiLCJzYWZlR2V0IiwibmV3VmFsdWUiLCJpc1R5cGVkIiwiaXNBcnJheUxpa2VPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwidG9QbGFpbk9iamVjdCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTnRoIiwiYmFzZU9yZGVyQnkiLCJpdGVyYXRlZXMiLCJvcmRlcnMiLCJnZXRJdGVyYXRlZSIsImNvbXBhcmVyIiwic29ydCIsIm9iakNyaXRlcmlhIiwiY3JpdGVyaWEiLCJvdGhDcml0ZXJpYSIsIm9yZGVyc0xlbmd0aCIsImNvbXBhcmVBc2NlbmRpbmciLCJjb21wYXJlTXVsdGlwbGUiLCJiYXNlU29ydEJ5IiwiYmFzZVBpY2tCeSIsImJhc2VTZXQiLCJiYXNlUHVsbEFsbCIsImluZGV4T2YiLCJiYXNlUHVsbEF0IiwiaW5kZXhlcyIsInByZXZpb3VzIiwiYmFzZVVuc2V0IiwiYmFzZVJlcGVhdCIsImJhc2VSZXN0Iiwic3RhcnQiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiYmFzZVNhbXBsZSIsImJhc2VTYW1wbGVTaXplIiwibmVzdGVkIiwiYmFzZVNldERhdGEiLCJiYXNlU2V0VG9TdHJpbmciLCJjb25zdGFudCIsImJhc2VTaHVmZmxlIiwiYmFzZVNsaWNlIiwiZW5kIiwiYmFzZVNvbWUiLCJiYXNlU29ydGVkSW5kZXgiLCJyZXRIaWdoZXN0IiwibG93IiwiaGlnaCIsIm1pZCIsImJhc2VTb3J0ZWRJbmRleEJ5IiwidmFsSXNOYU4iLCJ2YWxJc051bGwiLCJ2YWxJc1N5bWJvbCIsInZhbElzVW5kZWZpbmVkIiwib3RoSXNEZWZpbmVkIiwib3RoSXNOdWxsIiwib3RoSXNSZWZsZXhpdmUiLCJvdGhJc1N5bWJvbCIsInNldExvdyIsImJhc2VTb3J0ZWRVbmlxIiwiYmFzZVRvTnVtYmVyIiwiYmFzZVRvU3RyaW5nIiwiYmFzZVVuaXEiLCJjcmVhdGVTZXQiLCJzZWVuSW5kZXgiLCJiYXNlVXBkYXRlIiwidXBkYXRlciIsImJhc2VXaGlsZSIsImlzRHJvcCIsImJhc2VXcmFwcGVyVmFsdWUiLCJhY3Rpb24iLCJiYXNlWG9yIiwiYmFzZVppcE9iamVjdCIsImFzc2lnbkZ1bmMiLCJ2YWxzTGVuZ3RoIiwiY2FzdEFycmF5TGlrZU9iamVjdCIsImNhc3RGdW5jdGlvbiIsInN0cmluZ1RvUGF0aCIsImNhc3RSZXN0IiwiY2FzdFNsaWNlIiwiY29weSIsImFycmF5QnVmZmVyIiwidHlwZWRBcnJheSIsInZhbElzRGVmaW5lZCIsInZhbElzUmVmbGV4aXZlIiwiY29tcG9zZUFyZ3MiLCJwYXJ0aWFscyIsImhvbGRlcnMiLCJpc0N1cnJpZWQiLCJhcmdzSW5kZXgiLCJhcmdzTGVuZ3RoIiwiaG9sZGVyc0xlbmd0aCIsImxlZnRJbmRleCIsImxlZnRMZW5ndGgiLCJyYW5nZUxlbmd0aCIsImlzVW5jdXJyaWVkIiwiY29tcG9zZUFyZ3NSaWdodCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsImlzTmV3IiwiY3JlYXRlQWdncmVnYXRvciIsImluaXRpYWxpemVyIiwiY3JlYXRlQXNzaWduZXIiLCJhc3NpZ25lciIsImd1YXJkIiwiaXNJdGVyYXRlZUNhbGwiLCJpdGVyYWJsZSIsImNyZWF0ZUNhc2VGaXJzdCIsIm1ldGhvZE5hbWUiLCJ0cmFpbGluZyIsImNyZWF0ZUNvbXBvdW5kZXIiLCJjYWxsYmFjayIsIndvcmRzIiwiZGVidXJyIiwiY3JlYXRlQ3RvciIsInRoaXNCaW5kaW5nIiwiY3JlYXRlRmluZCIsImZpbmRJbmRleEZ1bmMiLCJjcmVhdGVGbG93IiwiZmxhdFJlc3QiLCJmdW5jcyIsInByZXJlcSIsInRocnUiLCJ3cmFwcGVyIiwiZ2V0RnVuY05hbWUiLCJmdW5jTmFtZSIsImdldERhdGEiLCJpc0xhemlhYmxlIiwicGxhbnQiLCJjcmVhdGVIeWJyaWQiLCJwYXJ0aWFsc1JpZ2h0IiwiaG9sZGVyc1JpZ2h0IiwiYXJnUG9zIiwiYXJ5IiwiYXJpdHkiLCJpc0FyeSIsImlzQmluZCIsImlzQmluZEtleSIsImlzRmxpcCIsImdldEhvbGRlciIsImhvbGRlcnNDb3VudCIsIm5ld0hvbGRlcnMiLCJjcmVhdGVSZWN1cnJ5IiwicmVvcmRlciIsImNyZWF0ZUludmVydGVyIiwidG9JdGVyYXRlZSIsImJhc2VJbnZlcnRlciIsImNyZWF0ZU1hdGhPcGVyYXRpb24iLCJvcGVyYXRvciIsImRlZmF1bHRWYWx1ZSIsImNyZWF0ZU92ZXIiLCJhcnJheUZ1bmMiLCJjcmVhdGVQYWRkaW5nIiwiY2hhcnMiLCJjaGFyc0xlbmd0aCIsImNyZWF0ZVJhbmdlIiwic3RlcCIsInRvRmluaXRlIiwiYmFzZVJhbmdlIiwiY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbiIsInRvTnVtYmVyIiwid3JhcEZ1bmMiLCJpc0N1cnJ5IiwibmV3RGF0YSIsInNldERhdGEiLCJzZXRXcmFwVG9TdHJpbmciLCJjcmVhdGVSb3VuZCIsInByZWNpc2lvbiIsInBhaXIiLCJub29wIiwiY3JlYXRlVG9QYWlycyIsImJhc2VUb1BhaXJzIiwiY3JlYXRlV3JhcCIsInNyY0JpdG1hc2siLCJuZXdCaXRtYXNrIiwiaXNDb21ibyIsIm1lcmdlRGF0YSIsImNyZWF0ZUN1cnJ5IiwiY3JlYXRlUGFydGlhbCIsImNyZWF0ZUJpbmQiLCJjdXN0b21EZWZhdWx0c0Fzc2lnbkluIiwiY3VzdG9tRGVmYXVsdHNNZXJnZSIsImN1c3RvbU9taXRDbG9uZSIsImFyckxlbmd0aCIsImFyclN0YWNrZWQiLCJhcnJWYWx1ZSIsImZsYXR0ZW4iLCJvdGhlckZ1bmMiLCJnZXRWYWx1ZSIsInN0dWJBcnJheSIsImhhc1BhdGgiLCJoYXNGdW5jIiwiaXNMZW5ndGgiLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiaXNNYXNrYWJsZSIsInN0dWJGYWxzZSIsIm90aGVyQXJncyIsIm9sZEFycmF5Iiwic2hvcnRPdXQiLCJyZWZlcmVuY2UiLCJkZXRhaWxzIiwiaW5zZXJ0V3JhcERldGFpbHMiLCJ1cGRhdGVXcmFwRGV0YWlscyIsImdldFdyYXBEZXRhaWxzIiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJyYW5kIiwibWVtb2l6ZSIsImNoYXJDb2RlQXQiLCJxdW90ZSIsInN1YlN0cmluZyIsImNsb25lIiwiZGlmZmVyZW5jZSIsImRpZmZlcmVuY2VCeSIsImRpZmZlcmVuY2VXaXRoIiwiZmluZEluZGV4IiwiZmluZExhc3RJbmRleCIsImhlYWQiLCJpbnRlcnNlY3Rpb24iLCJtYXBwZWQiLCJpbnRlcnNlY3Rpb25CeSIsImludGVyc2VjdGlvbldpdGgiLCJwdWxsIiwicHVsbEFsbCIsInB1bGxBdCIsInVuaW9uIiwidW5pb25CeSIsInVuaW9uV2l0aCIsInVuemlwIiwiZ3JvdXAiLCJ1bnppcFdpdGgiLCJ3aXRob3V0IiwieG9yIiwieG9yQnkiLCJ4b3JXaXRoIiwiemlwIiwiemlwV2l0aCIsImNoYWluIiwiaW50ZXJjZXB0b3IiLCJ3cmFwcGVyQXQiLCJjb3VudEJ5IiwiZmluZCIsImZpbmRMYXN0IiwiZm9yRWFjaFJpZ2h0IiwiZ3JvdXBCeSIsImludm9rZU1hcCIsImtleUJ5IiwicGFydGl0aW9uIiwic29ydEJ5IiwiYmVmb3JlIiwiYmluZCIsImJpbmRLZXkiLCJXUkFQX0JJTkRfRkxBRyIsImRlYm91bmNlIiwib3B0aW9ucyIsImxhc3RBcmdzIiwibGFzdFRoaXMiLCJtYXhXYWl0IiwidGltZXJJZCIsImxhc3RDYWxsVGltZSIsImxhc3RJbnZva2VUaW1lIiwibGVhZGluZyIsIm1heGluZyIsImludm9rZUZ1bmMiLCJ0aW1lIiwibGVhZGluZ0VkZ2UiLCJ0aW1lckV4cGlyZWQiLCJzaG91bGRJbnZva2UiLCJ0aW1lU2luY2VMYXN0Q2FsbCIsInRyYWlsaW5nRWRnZSIsInRpbWVXYWl0aW5nIiwicmVtYWluaW5nV2FpdCIsImRlYm91bmNlZCIsImlzSW52b2tpbmciLCJjYW5jZWwiLCJmbHVzaCIsImRlZmVyIiwiZGVsYXkiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiQ2FjaGUiLCJuZWdhdGUiLCJvdmVyQXJncyIsInRyYW5zZm9ybXMiLCJmdW5jc0xlbmd0aCIsInBhcnRpYWwiLCJwYXJ0aWFsUmlnaHQiLCJyZWFyZyIsImd0IiwiZ3RlIiwiaXNFcnJvciIsImlzSW50ZWdlciIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJsdCIsImx0ZSIsInRvQXJyYXkiLCJpdGVyYXRvclRvQXJyYXkiLCJyZW1haW5kZXIiLCJpc0JpbmFyeSIsImFzc2lnbiIsImFzc2lnbkluIiwiYXNzaWduSW5XaXRoIiwiYXNzaWduV2l0aCIsImF0IiwicHJvcHNJbmRleCIsInByb3BzTGVuZ3RoIiwiZGVmYXVsdHNEZWVwIiwibWVyZ2VXaXRoIiwiaW52ZXJ0IiwiaW52ZXJ0QnkiLCJpbnZva2UiLCJuYXRpdmVLZXlzSW4iLCJpc1Byb3RvIiwiYmFzZUtleXNJbiIsIm1lcmdlIiwib21pdCIsIkNMT05FX0RFRVBfRkxBRyIsImJhc2VQaWNrIiwicGlja0J5IiwicHJvcCIsInRvUGFpcnMiLCJ0b1BhaXJzSW4iLCJjYW1lbENhc2UiLCJ3b3JkIiwidG9Mb3dlckNhc2UiLCJjYXBpdGFsaXplIiwidXBwZXJGaXJzdCIsImtlYmFiQ2FzZSIsImxvd2VyQ2FzZSIsImxvd2VyRmlyc3QiLCJzbmFrZUNhc2UiLCJzdGFydENhc2UiLCJ1cHBlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInBhdHRlcm4iLCJoYXNVbmljb2RlV29yZCIsInVuaWNvZGVXb3JkcyIsImFzY2lpV29yZHMiLCJhdHRlbXB0IiwiYmluZEFsbCIsIm1ldGhvZE5hbWVzIiwiZmxvdyIsImZsb3dSaWdodCIsIm1ldGhvZCIsIm1ldGhvZE9mIiwibWl4aW4iLCJvdmVyIiwib3ZlckV2ZXJ5Iiwib3ZlclNvbWUiLCJiYXNlUHJvcGVydHlEZWVwIiwicmFuZ2UiLCJyYW5nZVJpZ2h0IiwiYXVnZW5kIiwiYWRkZW5kIiwiZGl2aWRlIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwibXVsdGlwbHkiLCJtdWx0aXBsaWVyIiwibXVsdGlwbGljYW5kIiwicm91bmQiLCJzdWJ0cmFjdCIsIm1pbnVlbmQiLCJzdWJ0cmFoZW5kIiwiYWZ0ZXIiLCJjYXN0QXJyYXkiLCJjaHVuayIsImNvbXBhY3QiLCJjb25kIiwiY29uZm9ybXMiLCJiYXNlQ29uZm9ybXMiLCJwcm9wZXJ0aWVzIiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwiZHJvcCIsImRyb3BSaWdodCIsImRyb3BSaWdodFdoaWxlIiwiZHJvcFdoaWxlIiwiZmlsbCIsImJhc2VGaWxsIiwiZmlsdGVyIiwiZmxhdE1hcCIsImZsYXRNYXBEZWVwIiwiZmxhdE1hcERlcHRoIiwiZmxhdHRlbkRlZXAiLCJmbGF0dGVuRGVwdGgiLCJmbGlwIiwiZnJvbVBhaXJzIiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25zSW4iLCJpbml0aWFsIiwibWFwS2V5cyIsIm1hcFZhbHVlcyIsIm1hdGNoZXMiLCJtYXRjaGVzUHJvcGVydHkiLCJudGhBcmciLCJvbWl0QnkiLCJvbmNlIiwib3JkZXJCeSIsInByb3BlcnR5T2YiLCJwdWxsQWxsQnkiLCJwdWxsQWxsV2l0aCIsInJlamVjdCIsInJlbW92ZSIsInJlc3QiLCJzYW1wbGVTaXplIiwic2V0V2l0aCIsInNodWZmbGUiLCJzb3J0ZWRVbmlxIiwic29ydGVkVW5pcUJ5Iiwic2VwYXJhdG9yIiwibGltaXQiLCJzcHJlYWQiLCJ0YWlsIiwidGFrZSIsInRha2VSaWdodCIsInRha2VSaWdodFdoaWxlIiwidGFrZVdoaWxlIiwidGFwIiwidGhyb3R0bGUiLCJ0b1BhdGgiLCJpc0Fyckxpa2UiLCJ1bmFyeSIsInVuaXEiLCJ1bmlxQnkiLCJ1bmlxV2l0aCIsInVuc2V0IiwidXBkYXRlIiwidXBkYXRlV2l0aCIsInZhbHVlc0luIiwid3JhcCIsInppcE9iamVjdCIsInppcE9iamVjdERlZXAiLCJlbnRyaWVzSW4iLCJleHRlbmQiLCJleHRlbmRXaXRoIiwiY2xhbXAiLCJjbG9uZURlZXAiLCJjbG9uZURlZXBXaXRoIiwiY2xvbmVXaXRoIiwiY29uZm9ybXNUbyIsImRlZmF1bHRUbyIsImVuZHNXaXRoIiwicG9zaXRpb24iLCJlc2NhcGUiLCJlc2NhcGVSZWdFeHAiLCJldmVyeSIsImZpbmRLZXkiLCJmaW5kTGFzdEtleSIsImZvckluIiwiZm9ySW5SaWdodCIsImZvck93biIsImZvck93blJpZ2h0IiwiaW5SYW5nZSIsImJhc2VJblJhbmdlIiwiaXNCb29sZWFuIiwiaXNFbGVtZW50IiwiaXNFbXB0eSIsImlzRXF1YWwiLCJpc0VxdWFsV2l0aCIsImlzTWF0Y2giLCJpc01hdGNoV2l0aCIsImlzTmF0aXZlIiwiaXNOaWwiLCJpc051bGwiLCJpc1NhZmVJbnRlZ2VyIiwiaXNVbmRlZmluZWQiLCJpc1dlYWtNYXAiLCJpc1dlYWtTZXQiLCJsYXN0SW5kZXhPZiIsInN0cmljdExhc3RJbmRleE9mIiwibWF4QnkiLCJtZWFuIiwibWVhbkJ5IiwibWluQnkiLCJzdHViT2JqZWN0Iiwic3R1YlN0cmluZyIsInN0dWJUcnVlIiwibnRoIiwibm9Db25mbGljdCIsInBhZCIsInN0ckxlbmd0aCIsInBhZEVuZCIsInBhZFN0YXJ0IiwicmFkaXgiLCJmbG9hdGluZyIsInRlbXAiLCJyZWR1Y2UiLCJyZWR1Y2VSaWdodCIsInJlcGVhdCIsInNhbXBsZSIsInNvbWUiLCJzb3J0ZWRJbmRleCIsInNvcnRlZEluZGV4QnkiLCJzb3J0ZWRJbmRleE9mIiwic29ydGVkTGFzdEluZGV4Iiwic29ydGVkTGFzdEluZGV4QnkiLCJzb3J0ZWRMYXN0SW5kZXhPZiIsInN0YXJ0c1dpdGgiLCJzdW0iLCJzdW1CeSIsInRlbXBsYXRlIiwic2V0dGluZ3MiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW1wb3J0cyIsImltcG9ydHNLZXlzIiwiaW1wb3J0c1ZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJ0aW1lcyIsInRvTG93ZXIiLCJ0b1NhZmVJbnRlZ2VyIiwidG9VcHBlciIsInRyaW0iLCJ0cmltRW5kIiwidHJpbVN0YXJ0IiwidHJ1bmNhdGUiLCJvbWlzc2lvbiIsInN1YnN0cmluZyIsIm5ld0VuZCIsInVuaXF1ZUlkIiwicHJlZml4IiwiZWFjaCIsImVhY2hSaWdodCIsImZpcnN0IiwiVkVSU0lPTiIsImlzRmlsdGVyIiwidGFrZU5hbWUiLCJkcm9wTmFtZSIsImNoZWNrSXRlcmF0ZWUiLCJpc1Rha2VyIiwibG9kYXNoRnVuYyIsInJldFVud3JhcHBlZCIsImlzTGF6eSIsInVzZUxhenkiLCJpc0h5YnJpZCIsImlzVW53cmFwcGVkIiwib25seUxhenkiLCJjaGFpbk5hbWUiLCJkaXIiLCJpc1JpZ2h0IiwidmlldyIsImdldFZpZXciLCJpdGVyTGVuZ3RoIiwidGFrZUNvdW50IiwiaXRlckluZGV4Iiwid3JhcHBlZCIsInRvSlNPTiIsInJlbmRlciIsIl92bSIsIl9oIiwiJGNyZWF0ZUVsZW1lbnQiLCJfYyIsIl9zZWxmIiwic3RhdGljQ2xhc3MiLCJhdHRycyIsIm9uIiwib25TZWFyY2giLCJfdiIsImRpcmVjdGl2ZXMiLCJyYXdOYW1lIiwiZXhwcmVzc2lvbiIsInRvdGFsTWlzc2luZ1RyYW5zbGF0aW9uc1N0cmluZyIsIm1vZGFsIiwiJHJlZnMiLCJ0cmFuc01vZGFsIiwicHJpbmNpcGFsIiwicmVmIiwiX3dpdGhTdHJpcHBlZCIsIl9fZmlsZSIsInN1Ym1pdCIsIiRldmVudCIsInByZXZlbnREZWZhdWx0IiwidGFncyIsInRhZ0NoYW5nZSIsInByaW1hcnkiLCJjbGljayIsIm9uQ2xpY2siLCJwcmluY2lwYWxSZWFkeSIsIm5vUmVzdWx0Iiwibm9SZXN1bHRJbmZvIiwic2VhcmNoQWN0aXZlIiwic2VhcmNoSW5mbyIsImN1cnJlbnREb21haW5Ub3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmciLCJjdXJyZW50UGFnaW5hdGlvbiIsInBhZ2VzQ291bnQiLCJwYWdlQ2hhbmdlZCIsIm9uUGFnZUNoYW5nZWQiLCJzYXZlQWN0aW9uIiwiaXNFZGl0ZWQiLCJfbCIsInRyYW5zbGF0aW9uc0NhdGFsb2ciLCJ0cmFuc2xhdGlvbiIsInRyYW5zbGF0ZWQiLCJsYWJlbCIsImdldERvbWFpbiIsInRyZWVfZG9tYWluIiwiZWRpdGVkQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZCIsImNsYXNzIiwibWlzc2luZyIsImlzTWlzc2luZyIsInJvd3MiLCJkb21Qcm9wcyIsImNvbXBvc2luZyIsImdob3N0IiwiZXh0cmFJbmZvIiwidHJlZVJlYWR5IiwibW9kZWwiLCJjdXJyZW50SXRlbSIsImNsYXNzT2JqZWN0Iiwicm9sZSIsImhhc0Nsb3NlIiwic3RvcFByb3BhZ2F0aW9uIiwiX3QiLCJpbmRldGVybWluYXRlIiwiaXNJbmRldGVybWluYXRlIiwiY2hhbmdlIiwiJCRhIiwiJCRlbCIsIiQkYyIsIiQkaSIsInRhYmluZGV4IiwiX20iLCJtb2RhbF90aXRsZSIsIm1vZGFsX2NvbnRlbnQiLCJvblNhdmUiLCJidXR0b25fc2F2ZSIsIm9uTGVhdmUiLCJidXR0b25fbGVhdmUiLCJkaXNwbGF5UGFnaW5hdGlvbiIsIm11bHRpIiwiaXNNdWx0aVBhZ2luYXRpb24iLCJhY3RpdmVMZWZ0QXJyb3ciLCJocmVmIiwicHJldiIsImFjdGl2ZSIsImNoZWNrQ3VycmVudEluZGV4Iiwic2hvd0luZGV4Iiwic2hvd0ZpcnN0RG90cyIsInNob3dMYXN0RG90cyIsImNoYW5nZVBhZ2UiLCJhY3RpdmVSaWdodEFycm93IiwiaGFzSWNvbiIsImZvY3VzIiwiY2xvc2UiLCJwbGFjZWhvbGRlclRvRGlzcGxheSIsImlucHV0U2l6ZSIsImtleXVwIiwib25LZXlVcCIsImtleWRvd24iLCJfayIsImtleUNvZGUiLCJjbGFzc05hbWUiLCJjbGlja0VsZW1lbnQiLCJoaWRkZW4iLCJpc0hpZGRlbiIsImNoZXZyb25TdGF0dXMiLCJleHBhbmQiLCJoYXNDaGVja2JveCIsIm9uQ2hlY2siLCJpc1dhcm5pbmciLCJkaXNwbGF5RXh0cmFMYWJlbCIsImdldEV4dHJhTGFiZWwiLCJpc0ZvbGRlciIsImVsZW1lbnQiLCJyZWZJbkZvciIsInNldEN1cnJlbnRFbGVtZW50Iiwibm9ybWFsaXplQ29tcG9uZW50Iiwic2NyaXB0RXhwb3J0cyIsInN0YXRpY1JlbmRlckZucyIsImZ1bmN0aW9uYWxUZW1wbGF0ZSIsImluamVjdFN0eWxlcyIsInNjb3BlSWQiLCJtb2R1bGVJZGVudGlmaWVyIiwic2hhZG93TW9kZSIsImhvb2siLCJfY29tcGlsZWQiLCJmdW5jdGlvbmFsIiwiX3Njb3BlSWQiLCIkdm5vZGUiLCJzc3JDb250ZXh0IiwiX19WVUVfU1NSX0NPTlRFWFRfXyIsIl9yZWdpc3RlcmVkQ29tcG9uZW50cyIsIl9zc3JSZWdpc3RlciIsIiRyb290IiwiJG9wdGlvbnMiLCJzaGFkb3dSb290IiwiX2luamVjdFN0eWxlcyIsIm9yaWdpbmFsUmVuZGVyIiwiaCIsImV4aXN0aW5nIiwiYmVmb3JlQ3JlYXRlIiwiUHJvbWlzZSQxIiwiZXhlY3V0b3IiLCJkZWZlcnJlZCIsInByb21pc2UiLCJ4IiwiciIsImFsbCIsInJhY2UiLCJwIiwiUHJvbWlzZU9iaiIsImNhbGxlZCIsIm5vdGlmeSIsInJlYXNvbiIsIm50aWNrIiwic2hpZnQiLCJvblJlc29sdmVkIiwib25SZWplY3RlZCIsImNhdGNoIiwicCQxIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJmaW5hbGx5IiwiZGVidWciLCJpbkJyb3dzZXIiLCJzdHIiLCJ3aGVuIiwib3B0cyIsIiR2bSIsIl9tZXJnZSIsImRlZXAiLCJpc0RlZmluZWQiLCJpc0tleU9wZXJhdG9yIiwiZW5jb2RlVmFsdWUiLCJlbmNvZGVSZXNlcnZlZCIsInBhcnQiLCJlbmNvZGVVUkkiLCJVcmwiLCJvcHRpb25zJCQxIiwiaGFuZGxlciIsInZtIiwiZmFjdG9yeSIsInNlcmlhbGl6ZSIsInNjb3BlIiwiaGFzaCIsInBsYWluIiwieGRyQ2xpZW50IiwicmVxdWVzdCIsInhkciIsIlhEb21haW5SZXF1ZXN0Iiwic3RhdHVzIiwicmVzcG9uZFdpdGgiLCJyZXNwb25zZVRleHQiLCJhYm9ydCIsImdldFVybCIsInRpbWVvdXQiLCJvbmxvYWQiLCJvbmFib3J0Iiwib25lcnJvciIsIm9udGltZW91dCIsIm9ucHJvZ3Jlc3MiLCJzZW5kIiwiZ2V0Qm9keSIsInZhcmlhYmxlcyIsInRtcGwiLCJvcGVyYXRvcnMiLCJ2YXJzIiwibGl0ZXJhbCIsInN1YnN0ciIsInRtcCIsIm1vZGlmaWVyIiwiayIsImdldFZhbHVlcyIsImV4cGFuZGVkIiwicXVlcnkiLCJ1cmxQYXJhbXMiLCJkb2N1bWVudE1vZGUiLCJwcm90b2NvbCIsInBvcnQiLCJob3N0IiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsIlNVUFBPUlRTX0NPUlMiLCJYTUxIdHRwUmVxdWVzdCIsImpzb25wQ2xpZW50Iiwic2NyaXB0IiwianNvbnAiLCJqc29ucENhbGxiYWNrIiwicmVtb3ZlQ2hpbGQiLCJzcmMiLCJhc3luYyIsImFwcGVuZENoaWxkIiwieGhyQ2xpZW50IiwieGhyIiwiZXZlbnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyb3ciLCJhcHBlbmQiLCJyZXNwb25zZVR5cGUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJjcmVkZW50aWFscyIsImNyb3NzT3JpZ2luIiwicHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInVwbG9hZCIsInVwbG9hZFByb2dyZXNzIiwic2V0UmVxdWVzdEhlYWRlciIsIm5vZGVDbGllbnQiLCJjbGllbnQiLCJyZXNwIiwic3RhdHVzQ29kZSIsInN0YXR1c01lc3NhZ2UiLCJlcnJvciQkMSIsInNlbmRSZXF1ZXN0IiwiSGVhZGVycyIsInRoaXMkMSIsImdldE5hbWUiLCJjdXJyIiwiZ2V0QWxsIiwibm9ybWFsaXplTmFtZSIsImRlbGV0ZSIsImRlbGV0ZUFsbCIsIlJlc3BvbnNlIiwib2siLCJCbG9iIiwiYm9keUJsb2IiLCJpc0Jsb2JUZXh0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc1RleHQiLCJibG9iVGV4dCIsImJsb2IiLCJ0ZXh0IiwianNvbiIsIlJlcXVlc3QiLCJKU09OX0NPTlRFTlRfVFlQRSIsIkh0dHAiLCJyZXFIYW5kbGVycyIsInJlc0hhbmRsZXJzIiwiQ2xpZW50IiwidW5zaGlmdCIsIm1zZyIsImNvbnNvbGUiLCJ3YXJuIiwiaW50ZXJjZXB0b3JzIiwiUmVzb3VyY2UiLCJyZXNvdXJjZSIsIiRodHRwIiwicGx1Z2luIiwiY29uZmlnIiwibmV4dFRpY2siLCJpbnN0YWxsZWQiLCJzaWxlbnQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiJHVybCIsIiRyZXNvdXJjZSIsIiRwcm9taXNlIiwicHV0IiwicGF0Y2giLCJjb21tb24iLCJjdXN0b20iLCJlbXVsYXRlSFRUUCIsImZvcm0iLCJGb3JtRGF0YSIsImVtdWxhdGVKU09OIiwiaGVhZGVyIiwiY29ycyIsIm9yZ1VybCIsImxvY2F0aW9uIiwicmVxVXJsIiwibWV0aG9kJCQxIiwic2F2ZSIsIlZpZXciLCJyb3V0ZXJWaWV3Iiwicm91dGUiLCIkcm91dGUiLCJfcm91dGVyVmlld0NhY2hlIiwiaW5hY3RpdmUiLCJfcm91dGVyUm9vdCIsIl9pbmFjdGl2ZSIsIiRwYXJlbnQiLCJyb3V0ZXJWaWV3RGVwdGgiLCJtYXRjaGVkIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyUm91dGVJbnN0YW5jZSIsImluc3RhbmNlcyIsInByZXBhdGNoIiwidm5vZGUiLCJjb21wb25lbnRJbnN0YW5jZSIsInByb3BzVG9QYXNzIiwicmVzb2x2ZVByb3BzIiwidG8iLCJlbmNvZGVSZXNlcnZlUkUiLCJlbmNvZGVSZXNlcnZlUmVwbGFjZXIiLCJjb21tYVJFIiwiZW5jb2RlIiwiZGVjb2RlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicGFyc2VRdWVyeSIsInJlcyIsInBhcmFtIiwicGFydHMiLCJzdHJpbmdpZnlRdWVyeSIsInZhbDIiLCJ0cmFpbGluZ1NsYXNoUkUiLCJjcmVhdGVSb3V0ZSIsInJlY29yZCIsInJlZGlyZWN0ZWRGcm9tIiwicm91dGVyIiwic3RyaW5naWZ5UXVlcnkkJDEiLCJtZXRhIiwiZnVsbFBhdGgiLCJnZXRGdWxsUGF0aCIsImZvcm1hdE1hdGNoIiwiZnJlZXplIiwiU1RBUlQiLCJfc3RyaW5naWZ5UXVlcnkiLCJpc1NhbWVSb3V0ZSIsImlzT2JqZWN0RXF1YWwiLCJhS2V5cyIsImJLZXlzIiwiYVZhbCIsImJWYWwiLCJfVnVlIiwiTGluayIsInJlcXVpcmVkIiwiZXhhY3QiLCJhY3RpdmVDbGFzcyIsImV4YWN0QWN0aXZlQ2xhc3MiLCIkcm91dGVyIiwiY2xhc3NlcyIsImdsb2JhbEFjdGl2ZUNsYXNzIiwibGlua0FjdGl2ZUNsYXNzIiwiZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcyIsImxpbmtFeGFjdEFjdGl2ZUNsYXNzIiwiYWN0aXZlQ2xhc3NGYWxsYmFjayIsImV4YWN0QWN0aXZlQ2xhc3NGYWxsYmFjayIsImNvbXBhcmVUYXJnZXQiLCJxdWVyeUluY2x1ZGVzIiwiaXNJbmNsdWRlZFJvdXRlIiwiZ3VhcmRFdmVudCIsImZpbmRBbmNob3IiLCIkc2xvdHMiLCJpc1N0YXRpYyIsInV0aWwiLCJtZXRhS2V5IiwiYWx0S2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsImN1cnJlbnRUYXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJjaGlsZCIsInJlc29sdmVQYXRoIiwicmVsYXRpdmUiLCJmaXJzdENoYXIiLCJzZWdtZW50cyIsInNlZ21lbnQiLCJjbGVhblBhdGgiLCJpc2FycmF5IiwicGF0aFRvUmVnZXhwXzEiLCJwYXRoVG9SZWdleHAiLCJncm91cHMiLCJkZWxpbWl0ZXIiLCJvcHRpb25hbCIsImFzdGVyaXNrIiwiYXR0YWNoS2V5cyIsInJlZ2V4cFRvUmVnZXhwIiwiZmxhZ3MiLCJhcnJheVRvUmVnZXhwIiwidG9rZW5zVG9SZWdFeHAiLCJzdHJpbmdUb1JlZ2V4cCIsInBhcnNlXzEiLCJ0b2tlbnNUb0Z1bmN0aW9uXzEiLCJ0b2tlbnNUb0Z1bmN0aW9uIiwidG9rZW5zVG9SZWdFeHBfMSIsIlBBVEhfUkVHRVhQIiwidG9rZW5zIiwiZGVmYXVsdERlbGltaXRlciIsIm0iLCJlc2NhcGVkIiwiY2FwdHVyZSIsImVzY2FwZUdyb3VwIiwiZXNjYXBlU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IiwicHJldHR5IiwidG9rZW4iLCJqIiwicmUiLCJzZW5zaXRpdmUiLCJzdHJpY3QiLCJlbmRzV2l0aERlbGltaXRlciIsImNvbXBpbGUiLCJyZWdleHBDb21waWxlQ2FjaGUiLCJmaWxsUGFyYW1zIiwicm91dGVNc2ciLCJjcmVhdGVSb3V0ZU1hcCIsIm9sZFBhdGhMaXN0Iiwib2xkUGF0aE1hcCIsIm9sZE5hbWVNYXAiLCJwYXRoTGlzdCIsInBhdGhNYXAiLCJuYW1lTWFwIiwiYWRkUm91dGVSZWNvcmQiLCJsIiwibWF0Y2hBcyIsInBhdGhUb1JlZ2V4cE9wdGlvbnMiLCJub3JtYWxpemVkUGF0aCIsIm5vcm1hbGl6ZVBhdGgiLCJjYXNlU2Vuc2l0aXZlIiwicmVnZXgiLCJjb21waWxlUm91dGVSZWdleCIsInJlZGlyZWN0IiwiYmVmb3JlRW50ZXIiLCJjaGlsZE1hdGNoQXMiLCJhbGlhcyIsImFsaWFzUm91dGUiLCJub3JtYWxpemVMb2NhdGlvbiIsInJhdyIsIl9ub3JtYWxpemVkIiwicmF3UGF0aCIsInBhcnNlZFBhdGgiLCJoYXNoSW5kZXgiLCJxdWVyeUluZGV4IiwicGFyc2VQYXRoIiwiYmFzZVBhdGgiLCJleHRyYVF1ZXJ5IiwiX3BhcnNlUXVlcnkiLCJwYXJzZWRRdWVyeSIsInJlc29sdmVRdWVyeSIsImNyZWF0ZU1hdGNoZXIiLCJjdXJyZW50Um91dGUiLCJfY3JlYXRlUm91dGUiLCJwYXJhbU5hbWVzIiwicmVjb3JkJDEiLCJtYXRjaFJvdXRlIiwib3JpZ2luYWxSZWRpcmVjdCIsInJlc29sdmVSZWNvcmRQYXRoIiwiYWxpYXNlZE1hdGNoIiwiYWxpYXNlZFJlY29yZCIsImFkZFJvdXRlcyIsInBvc2l0aW9uU3RvcmUiLCJzZXR1cFNjcm9sbCIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJnZXRTdGF0ZUtleSIsInNhdmVTY3JvbGxQb3NpdGlvbiIsIl9rZXkiLCJoYW5kbGVTY3JvbGwiLCJpc1BvcCIsImFwcCIsImJlaGF2aW9yIiwic2Nyb2xsQmVoYXZpb3IiLCIkbmV4dFRpY2siLCJnZXRTY3JvbGxQb3NpdGlvbiIsInNob3VsZFNjcm9sbCIsInNjcm9sbFRvUG9zaXRpb24iLCJwYWdlWE9mZnNldCIsInkiLCJwYWdlWU9mZnNldCIsImlzVmFsaWRQb3NpdGlvbiIsIm5vcm1hbGl6ZVBvc2l0aW9uIiwidiIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImRvY1JlY3QiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJlbFJlY3QiLCJsZWZ0IiwidG9wIiwiZ2V0RWxlbWVudFBvc2l0aW9uIiwic2Nyb2xsVG8iLCJ1YSIsInN1cHBvcnRzUHVzaFN0YXRlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiVGltZSIsInBlcmZvcm1hbmNlIiwiZ2VuS2V5IiwidG9GaXhlZCIsInB1c2hTdGF0ZSIsInJ1blF1ZXVlIiwicXVldWUiLCJjYiIsImZsYXRNYXBDb21wb25lbnRzIiwiaGFzU3ltYm9sIiwiSGlzdG9yeSIsImJhc2VFbCIsIm5vcm1hbGl6ZUJhc2UiLCJwZW5kaW5nIiwicmVhZHkiLCJyZWFkeUNicyIsInJlYWR5RXJyb3JDYnMiLCJlcnJvckNicyIsImV4dHJhY3RHdWFyZHMiLCJyZWNvcmRzIiwiZ3VhcmRzIiwiZGVmIiwiaW5zdGFuY2UiLCJleHRyYWN0R3VhcmQiLCJiaW5kR3VhcmQiLCJwb2xsIiwiaXNWYWxpZCIsImxpc3RlbiIsIm9uUmVhZHkiLCJlcnJvckNiIiwib25FcnJvciIsInRyYW5zaXRpb25UbyIsIm9uQ29tcGxldGUiLCJvbkFib3J0IiwiY29uZmlybVRyYW5zaXRpb24iLCJ1cGRhdGVSb3V0ZSIsImVuc3VyZVVSTCIsInVwZGF0ZWQiLCJhY3RpdmF0ZWQiLCJkZWFjdGl2YXRlZCIsInJlc29sdmVRdWV1ZSIsImV4dHJhY3RMZWF2ZUd1YXJkcyIsImJlZm9yZUhvb2tzIiwiZXh0cmFjdFVwZGF0ZUhvb2tzIiwiaGFzQXN5bmMiLCJjaWQiLCJyZXNvbHZlZERlZiIsInJlc29sdmVkIiwiY29tcCIsInBvc3RFbnRlckNicyIsImNicyIsImJpbmRFbnRlckd1YXJkIiwiZXh0cmFjdEVudGVyR3VhcmRzIiwicmVzb2x2ZUhvb2tzIiwiYWZ0ZXJIb29rcyIsIkhUTUw1SGlzdG9yeSIsIkhpc3RvcnkkJDEiLCJleHBlY3RTY3JvbGwiLCJpbml0TG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsIl9fcHJvdG9fXyIsImdvIiwiZnJvbVJvdXRlIiwiZ2V0Q3VycmVudExvY2F0aW9uIiwiSGFzaEhpc3RvcnkiLCJmYWxsYmFjayIsImNoZWNrRmFsbGJhY2siLCJlbnN1cmVTbGFzaCIsInNldHVwTGlzdGVuZXJzIiwic3VwcG9ydHNTY3JvbGwiLCJnZXRIYXNoIiwicmVwbGFjZUhhc2giLCJwdXNoSGFzaCIsIkFic3RyYWN0SGlzdG9yeSIsInRhcmdldEluZGV4IiwiYXBwcyIsIm1hdGNoZXIiLCJwcm90b3R5cGVBY2Nlc3NvcnMiLCJyZWdpc3Rlckhvb2siLCJpbml0Iiwic2V0dXBIYXNoTGlzdGVuZXIiLCJfcm91dGUiLCJiZWZvcmVFYWNoIiwiYmVmb3JlUmVzb2x2ZSIsImFmdGVyRWFjaCIsImJhY2siLCJmb3J3YXJkIiwiZ2V0TWF0Y2hlZENvbXBvbmVudHMiLCJjcmVhdGVIcmVmIiwibm9ybWFsaXplZFRvIiwiaW5zdGFsbCIsImlzRGVmIiwicmVnaXN0ZXJJbnN0YW5jZSIsImNhbGxWYWwiLCJfcGFyZW50Vm5vZGUiLCJfcm91dGVyIiwiZGVmaW5lUmVhY3RpdmUiLCJkZXN0cm95ZWQiLCJzdHJhdHMiLCJvcHRpb25NZXJnZVN0cmF0ZWdpZXMiLCJiZWZvcmVSb3V0ZUVudGVyIiwiYmVmb3JlUm91dGVMZWF2ZSIsImJlZm9yZVJvdXRlVXBkYXRlIiwiY3JlYXRlZCIsImxvY2FscyIsImxpc3RUb1N0eWxlcyIsInBhcmVudElkIiwic3R5bGVzIiwibmV3U3R5bGVzIiwiY3NzIiwibWVkaWEiLCJzb3VyY2VNYXAiLCJoYXNEb2N1bWVudCIsIkRFQlVHIiwic3R5bGVzSW5Eb20iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInNpbmdsZXRvbkVsZW1lbnQiLCJzaW5nbGV0b25Db3VudGVyIiwiaXNQcm9kdWN0aW9uIiwic3NySWRLZXkiLCJpc09sZElFIiwiYWRkU3R5bGVzQ2xpZW50IiwiX2lzUHJvZHVjdGlvbiIsIl9vcHRpb25zIiwiYWRkU3R5bGVzVG9Eb20iLCJuZXdMaXN0IiwibWF5UmVtb3ZlIiwiZG9tU3R5bGUiLCJyZWZzIiwiYWRkU3R5bGUiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJzdHlsZUVsZW1lbnQiLCJwYXJlbnROb2RlIiwic3R5bGVJbmRleCIsImFwcGx5VG9TaW5nbGV0b25UYWciLCJhcHBseVRvVGFnIiwibmV3T2JqIiwidGV4dFN0b3JlIiwicmVwbGFjZVRleHQiLCJyZXBsYWNlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3NzTm9kZSIsImNyZWF0ZVRleHROb2RlIiwiY2hpbGROb2RlcyIsImluc2VydEJlZm9yZSIsInNldEF0dHJpYnV0ZSIsInNzcklkIiwiZmlyc3RDaGlsZCIsInMiLCJ1IiwiZCIsInciLCJfbGVuZ3RoIiwiQSIsIlQiLCJFIiwiTiIsImdldFRpbWUiLCJEIiwiTCIsIk0iLCJJIiwicHJvZHVjdGlvblRpcCIsImRldnRvb2xzIiwiZXJyb3JIYW5kbGVyIiwid2FybkhhbmRsZXIiLCJpZ25vcmVkRWxlbWVudHMiLCJrZXlDb2RlcyIsImlzUmVzZXJ2ZWRUYWciLCJpc1Jlc2VydmVkQXR0ciIsImlzVW5rbm93bkVsZW1lbnQiLCJnZXRUYWdOYW1lc3BhY2UiLCJwYXJzZVBsYXRmb3JtVGFnTmFtZSIsIm11c3RVc2VQcm9wIiwiX2xpZmVjeWNsZUhvb2tzIiwiSCIsInoiLCJWIiwiV1hFbnZpcm9ubWVudCIsInBsYXRmb3JtIiwiSyIsIkoiLCJxIiwiWiIsIlgiLCJZIiwid2F0Y2giLCJRIiwiZWUiLCJ0ZSIsImVudiIsIlZVRV9FTlYiLCJuZSIsIl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJpZSIsIm9lIiwiUmVmbGVjdCIsIm93bktleXMiLCJhZSIsInNlIiwiY2UiLCJzdWJzIiwiYWRkU3ViIiwicmVtb3ZlU3ViIiwiZGVwZW5kIiwiYWRkRGVwIiwidWUiLCJsZSIsImZlIiwicGUiLCJlbG0iLCJucyIsImZuQ29udGV4dCIsImZuT3B0aW9ucyIsImZuU2NvcGVJZCIsImNvbXBvbmVudE9wdGlvbnMiLCJpc1Jvb3RJbnNlcnQiLCJpc0NvbW1lbnQiLCJpc0Nsb25lZCIsImlzT25jZSIsImFzeW5jRmFjdG9yeSIsImFzeW5jTWV0YSIsImlzQXN5bmNQbGFjZWhvbGRlciIsImRlIiwidmUiLCJoZSIsIm1lIiwieWUiLCJnZSIsIl9fb2JfXyIsIm9ic2VydmVBcnJheSIsImRlcCIsImdldE93blByb3BlcnR5TmFtZXMiLCJiZSIsIiRlIiwid2UiLCJ2bUNvdW50Iiwid2FsayIsIkNlIiwiaXNFeHRlbnNpYmxlIiwiX2lzVnVlIiwieGUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZSIsIkFlIiwiT2UiLCJTZSIsIlRlIiwiRWUiLCJOZSIsImluamVjdCIsInByb3ZpZGUiLCJqZSIsIkRlIiwiX2Jhc2UiLCJleHRlbmRzIiwibWl4aW5zIiwiTGUiLCJNZSIsIlBlIiwicHJvcHNEYXRhIiwiX3Byb3BzIiwiSWUiLCJGZSIsIlJlIiwiZXJyb3JDYXB0dXJlZCIsIkJlIiwiSGUiLCJfaGFuZGxlZCIsIlVlIiwiemUiLCJWZSIsIktlIiwiSmUiLCJxZSIsIldlIiwiTXV0YXRpb25PYnNlcnZlciIsInNldEltbWVkaWF0ZSIsIlplIiwiR2UiLCJYZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwiWWUiLCJRZSIsImV0IiwiaXNGcm96ZW4iLCJ0dCIsInBhc3NpdmUiLCJudCIsImZucyIsInJ0IiwibWVyZ2VkIiwib3QiLCJzdCIsIl9pc1ZMaXN0IiwiY3QiLCJfcHJvdmlkZWQiLCJ1dCIsInNsb3QiLCJmdCIsIiRzdGFibGUiLCIka2V5IiwiJGhhc05vcm1hbCIsInB0IiwiZHQiLCJwcm94eSIsInZ0IiwiaHQiLCIkc2NvcGVkU2xvdHMiLCJtdCIsInl0IiwiYnQiLCJfc3RhdGljVHJlZXMiLCJ3dCIsIl9yZW5kZXJQcm94eSIsIiR0IiwiQ3QiLCJ4dCIsImt0IiwiQXQiLCJPdCIsIlN0IiwiX28iLCJfcSIsIl9mIiwiX2IiLCJfdSIsIl9nIiwiX3AiLCJUdCIsIl9vcmlnaW5hbCIsImxpc3RlbmVycyIsImluamVjdGlvbnMiLCJzbG90cyIsInNjb3BlZFNsb3RzIiwiUHQiLCJFdCIsIk50IiwianQiLCJfaXNEZXN0cm95ZWQiLCJrZWVwQWxpdmUiLCJfaXNDb21wb25lbnQiLCJpbmxpbmVUZW1wbGF0ZSIsIld0IiwiJG1vdW50IiwiX3JlbmRlckNoaWxkcmVuIiwiX3Zub2RlIiwiJGF0dHJzIiwiJGxpc3RlbmVycyIsIl9wcm9wS2V5cyIsIl9wYXJlbnRMaXN0ZW5lcnMiLCJxdCIsIiRmb3JjZVVwZGF0ZSIsImluc2VydCIsIl9pc01vdW50ZWQiLCJZdCIsImVuIiwiWHQiLCJkZXN0cm95IiwiX2RpcmVjdEluYWN0aXZlIiwiR3QiLCIkY2hpbGRyZW4iLCIkZGVzdHJveSIsIkR0IiwiTHQiLCJlcnJvckNvbXAiLCJIdCIsIm93bmVycyIsImxvYWRpbmciLCJsb2FkaW5nQ29tcCIsIiRvbiIsIkJ0IiwiJG4iLCJuYXRpdmVPbiIsImFic3RyYWN0IiwiX21lcmdlZCIsIk10IiwicHJlIiwic3R5bGUiLCJSdCIsIlV0IiwienQiLCJWdCIsIkt0IiwiJG9mZiIsIkp0IiwiWnQiLCJfaGFzSG9va0V2ZW50IiwiJGVtaXQiLCJRdCIsInRuIiwibm4iLCJybiIsImFuIiwic24iLCJjbiIsImNyZWF0ZUV2ZW50IiwidGltZVN0YW1wIiwidW4iLCJydW4iLCJfd2F0Y2hlciIsImVtaXQiLCJsbiIsIl93YXRjaGVycyIsInVzZXIiLCJsYXp5Iiwic3luYyIsImRpcnR5IiwiZGVwcyIsIm5ld0RlcHMiLCJkZXBJZHMiLCJuZXdEZXBJZHMiLCJnZXR0ZXIiLCJjbGVhbnVwRGVwcyIsInRlYXJkb3duIiwiX2lzQmVpbmdEZXN0cm95ZWQiLCJwbiIsImRuIiwiaG4iLCJtbiIsInluIiwiZ24iLCJfY29tcHV0ZWRXYXRjaGVycyIsIiR3YXRjaCIsImJuIiwic3VwZXIiLCJzdXBlck9wdGlvbnMiLCJzZWFsZWRPcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsInduIiwiX2luaXQiLCJ4biIsImtuIiwiQW4iLCJPbiIsIl91aWQiLCJfY29tcG9uZW50VGFnIiwiX2V2ZW50cyIsIl9kYXRhIiwidm4iLCIkc2V0IiwiJGRlbGV0ZSIsImltbWVkaWF0ZSIsIiRvbmNlIiwiX3VwZGF0ZSIsIiRlbCIsIl9fcGF0Y2hfXyIsIl9fdnVlX18iLCJfcmVuZGVyIiwiU24iLCJUbiIsIktlZXBBbGl2ZSIsImluY2x1ZGUiLCJleGNsdWRlIiwibW91bnRlZCIsIm1lcmdlT3B0aW9ucyIsIm9ic2VydmFibGUiLCJfaW5zdGFsbGVkUGx1Z2lucyIsIl9DdG9yIiwiQ24iLCJFbiIsIk5uIiwiam4iLCJEbiIsIkxuIiwiSW4iLCJGbiIsIlBuIiwiUm4iLCJIbiIsIlVuIiwiem4iLCJWbiIsIktuIiwic3ZnIiwibWF0aCIsIkpuIiwicW4iLCJXbiIsIlpuIiwiR24iLCJYbiIsIlluIiwiUW4iLCJtdWx0aXBsZSIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0ZUNvbW1lbnQiLCJuZXh0U2libGluZyIsInRhZ05hbWUiLCJzZXRUZXh0Q29udGVudCIsInRleHRDb250ZW50Iiwic2V0U3R5bGVTY29wZSIsImVyIiwidHIiLCJuciIsInJyIiwiaXIiLCJvciIsImFyIiwic3IiLCJ1ciIsIm9sZFZhbHVlIiwib2xkQXJnIiwiZnIiLCJjb21wb25lbnRVcGRhdGVkIiwiaW5zZXJ0ZWQiLCJjciIsIm1vZGlmaWVycyIsImxyIiwicHIiLCJkciIsImluaGVyaXRBdHRycyIsInZyIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJociIsIk1uIiwic2V0QXR0cmlidXRlTlMiLCJfX2llcGgiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibXIiLCJ5ciIsIkJuIiwiX3RyYW5zaXRpb25DbGFzc2VzIiwiX3ByZXZDbGFzcyIsImdyIiwiX3IiLCJiciIsIiRyIiwid3IiLCJDciIsInhyIiwia3IiLCJBciIsIk9yIiwiU3IiLCJUciIsIkVyIiwiUnIiLCJkeW5hbWljIiwiTnIiLCJkeW5hbWljQXR0cnMiLCJqciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiRHIiLCJpc0R5bmFtaWNBcmciLCJMciIsIk1yIiwicmlnaHQiLCJtaWRkbGUiLCJuYXRpdmUiLCJuYXRpdmVFdmVudHMiLCJldmVudHMiLCJJciIsIkZyIiwiUHIiLCJIciIsIkJyIiwienIiLCJWciIsIlVyIiwiSnIiLCJLciIsInFyIiwiR3IiLCJRciIsIlhyIiwiWXIiLCJfd3JhcHBlciIsIm93bmVyRG9jdW1lbnQiLCJlaSIsInRpIiwibmkiLCJyaSIsIl92YWx1ZSIsImlpIiwiaW5uZXJIVE1MIiwiYWN0aXZlRWxlbWVudCIsIl92TW9kaWZpZXJzIiwib2kiLCJhaSIsInNpIiwiY2kiLCJzdGF0aWNTdHlsZSIsInVpIiwibGkiLCJmaSIsInBpIiwic2V0UHJvcGVydHkiLCJ2aSIsImRpIiwiaGkiLCJub3JtYWxpemVkU3R5bGUiLCJtaSIsInlpIiwiZ2kiLCJjbGFzc0xpc3QiLCJiaSIsIiRpIiwiZW50ZXJDbGFzcyIsImVudGVyVG9DbGFzcyIsImVudGVyQWN0aXZlQ2xhc3MiLCJsZWF2ZUNsYXNzIiwibGVhdmVUb0NsYXNzIiwibGVhdmVBY3RpdmVDbGFzcyIsIndpIiwiQ2kiLCJ4aSIsImtpIiwiQWkiLCJPaSIsIlNpIiwib250cmFuc2l0aW9uZW5kIiwib253ZWJraXR0cmFuc2l0aW9uZW5kIiwib25hbmltYXRpb25lbmQiLCJvbndlYmtpdGFuaW1hdGlvbmVuZCIsIlRpIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiRWkiLCJOaSIsImppIiwiRGkiLCJNaSIsInByb3BDb3VudCIsIkxpIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIklpIiwiaGFzVHJhbnNmb3JtIiwiRmkiLCJQaSIsIl9sZWF2ZUNiIiwiY2FuY2VsbGVkIiwidHJhbnNpdGlvbiIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJlbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiQmkiLCJzaG93IiwiX3BlbmRpbmciLCJIaSIsIlJpIiwiYmVmb3JlTGVhdmUiLCJhZnRlckxlYXZlIiwibGVhdmVDYW5jZWxsZWQiLCJkZWxheUxlYXZlIiwiVWkiLCJ6aSIsIm5vZGVPcHMiLCJhY3RpdmF0ZSIsInBlbmRpbmdJbnNlcnQiLCJwb3N0cGF0Y2giLCJoYXNDaGlsZE5vZGVzIiwiaGFzQXR0cmlidXRlIiwidm1vZGVsIiwiWGkiLCJWaSIsIl92T3B0aW9ucyIsIktpIiwiV2kiLCJaaSIsIkdpIiwicWkiLCJKaSIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJZaSIsIlFpIiwiX192T3JpZ2luYWxEaXNwbGF5IiwiZGlzcGxheSIsInVuYmluZCIsImVvIiwibm8iLCJybyIsImlvIiwib28iLCJhbyIsIl9sZWF2aW5nIiwic28iLCJtb3ZlQ2xhc3MiLCJjbyIsIl9tb3ZlQ2IiLCJ1byIsIm5ld1BvcyIsImxvIiwicG9zIiwibW92ZWQiLCJXZWJraXRUcmFuc2Zvcm0iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJmbyIsIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uR3JvdXAiLCJiZWZvcmVNb3VudCIsImtlcHQiLCJwcmV2Q2hpbGRyZW4iLCJyZW1vdmVkIiwiaGFzTW92ZSIsIl9yZWZsb3ciLCJvZmZzZXRIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsIkhUTUxVbmtub3duRWxlbWVudCIsIkhUTUxFbGVtZW50IiwieW8iLCJwbyIsInZvIiwiaG8iLCJtbyIsInN0YXRpY0tleXMiLCJ0cmFuc2Zvcm1Ob2RlIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSIsInN0eWxlQmluZGluZyIsImJvIiwiJG8iLCJ3byIsIkNvIiwieG8iLCJrbyIsIkFvIiwiT28iLCJTbyIsIlRvIiwiRW8iLCJObyIsImpvIiwiRG8iLCJMbyIsIk1vIiwiSW8iLCJGbyIsIlBvIiwiUm8iLCJIbyIsIkJvIiwiVW8iLCJ6byIsIlZvIiwiS28iLCJKbyIsInFvIiwiV28iLCJabyIsIkdvIiwiWG8iLCJZbyIsIlFvIiwiZWEiLCJ0YSIsIm5hIiwicmEiLCJpYSIsIm9hIiwiYWEiLCJzYSIsImNhIiwibWEiLCJyYXdBdHRyc01hcCIsImZhIiwiZm9yIiwic2xvdFNjb3BlIiwic2xvdFRhcmdldCIsInNsb3RUYXJnZXREeW5hbWljIiwidmEiLCJzbG90TmFtZSIsImhhc0JpbmRpbmdzIiwiaGEiLCJjYW1lbCIsInBhIiwiaXRlcmF0b3IxIiwiaXRlcmF0b3IyIiwiZGEiLCJpZkNvbmRpdGlvbnMiLCJ5YSIsImdhIiwiX2EiLCIkYSIsIndhIiwiYmEiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwicHJvY2Vzc2VkIiwiaWYiLCJibG9jayIsImVsc2UiLCJlbHNlaWYiLCJDYSIsImV4cGVjdEhUTUwiLCJodG1sIiwiaXNQcmVUYWciLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsInhhIiwiQWEiLCJPYSIsIlNhIiwiVGEiLCJlc2MiLCJ0YWIiLCJzcGFjZSIsInVwIiwiZG93biIsIkVhIiwiTmEiLCJqYSIsInN0b3AiLCJwcmV2ZW50IiwiY3RybCIsImFsdCIsIkRhIiwiTGEiLCJNYSIsIklhIiwid3JhcExpc3RlbmVycyIsIndyYXBEYXRhIiwiY2xvYWsiLCJGYSIsImRhdGFHZW5GbnMiLCJtYXliZUNvbXBvbmVudCIsIm9uY2VJZCIsIlBhIiwiUmEiLCJzdGF0aWNSb290Iiwic3RhdGljUHJvY2Vzc2VkIiwiSGEiLCJvbmNlUHJvY2Vzc2VkIiwiQmEiLCJmb3JQcm9jZXNzZWQiLCJ6YSIsImlmUHJvY2Vzc2VkIiwiVWEiLCJxYSIsIkdhIiwiVmEiLCJzdGF0aWNJbkZvciIsIkthIiwiSmEiLCJXYSIsIlphIiwiWGEiLCJZYSIsImNvZGUiLCJRYSIsImRlbGltaXRlcnMiLCJlcyIsInRzIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZSIsImZvcmJpZGRlbiIsInNob3VsZEtlZXBDb21tZW50IiwiY29tbWVudCIsInVuYXJ5U2xhc2giLCJzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYiLCJzaG91bGREZWNvZGVOZXdsaW5lcyIsImxvd2VyQ2FzZWRUYWciLCJjb21tZW50cyIsIm91dHB1dFNvdXJjZVJhbmdlIiwibGEiLCJvcHRpbWl6ZSIsInN0YXRpYyIsImthIiwiYXN0IiwiZXJyb3JzIiwidGlwcyIsImNvbXBpbGVUb0Z1bmN0aW9ucyIsInJzIiwib3MiLCJhcyIsInNzIiwiY3MiLCJvdXRlckhUTUwiLCJkZXZ0b29sSG9vayIsImZvckVhY2hWYWx1ZSIsIk1vZHVsZSIsInJhd01vZHVsZSIsInJ1bnRpbWUiLCJfY2hpbGRyZW4iLCJfcmF3TW9kdWxlIiwicmF3U3RhdGUiLCJwcm90b3R5cGVBY2Nlc3NvcnMkMSIsIm5hbWVzcGFjZWQiLCJhZGRDaGlsZCIsImdldENoaWxkIiwiZm9yRWFjaENoaWxkIiwiZm9yRWFjaEdldHRlciIsImZvckVhY2hBY3Rpb24iLCJmb3JFYWNoTXV0YXRpb24iLCJNb2R1bGVDb2xsZWN0aW9uIiwicmF3Um9vdE1vZHVsZSIsInJlZ2lzdGVyIiwidGFyZ2V0TW9kdWxlIiwibmV3TW9kdWxlIiwiZ2V0TmFtZXNwYWNlIiwibmFtZXNwYWNlIiwicmF3Q2hpbGRNb2R1bGUiLCJ1bnJlZ2lzdGVyIiwicGx1Z2lucyIsIl9jb21taXR0aW5nIiwiX2FjdGlvbnMiLCJfYWN0aW9uU3Vic2NyaWJlcnMiLCJfbXV0YXRpb25zIiwiX3dyYXBwZWRHZXR0ZXJzIiwiX21vZHVsZXMiLCJfbW9kdWxlc05hbWVzcGFjZU1hcCIsIl9zdWJzY3JpYmVycyIsIl93YXRjaGVyVk0iLCJpbnN0YWxsTW9kdWxlIiwicmVzZXRTdG9yZVZNIiwiX2RldnRvb2xIb29rIiwidGFyZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJtdXRhdGlvbiIsImRldnRvb2xQbHVnaW4iLCJnZW5lcmljU3Vic2NyaWJlIiwicmVzZXRTdG9yZSIsImhvdCIsIm9sZFZtIiwid3JhcHBlZEdldHRlcnMiLCIkJHN0YXRlIiwiZW5hYmxlU3RyaWN0TW9kZSIsIl93aXRoQ29tbWl0IiwiaXNSb290IiwicGFyZW50U3RhdGUiLCJnZXROZXN0ZWRTdGF0ZSIsIm1vZHVsZU5hbWUiLCJsb2NhbCIsIm5vTmFtZXNwYWNlIiwiX3R5cGUiLCJfcGF5bG9hZCIsInVuaWZ5T2JqZWN0U3R5bGUiLCJnZXR0ZXJzUHJveHkiLCJzcGxpdFBvcyIsImxvY2FsVHlwZSIsIm1ha2VMb2NhbEdldHRlcnMiLCJtYWtlTG9jYWxDb250ZXh0IiwicmVnaXN0ZXJNdXRhdGlvbiIsInJvb3RHZXR0ZXJzIiwicmVnaXN0ZXJBY3Rpb24iLCJyYXdHZXR0ZXIiLCJyZWdpc3RlckdldHRlciIsInZ1ZXhJbml0IiwiYXBwbHlNaXhpbiIsInN1YiIsInN1YnNjcmliZUFjdGlvbiIsInJlZ2lzdGVyTW9kdWxlIiwicHJlc2VydmVTdGF0ZSIsInVucmVnaXN0ZXJNb2R1bGUiLCJob3RVcGRhdGUiLCJuZXdPcHRpb25zIiwiY29tbWl0dGluZyIsIm1hcFN0YXRlIiwibm9ybWFsaXplTmFtZXNwYWNlIiwic3RhdGVzIiwibm9ybWFsaXplTWFwIiwiZ2V0TW9kdWxlQnlOYW1lc3BhY2UiLCJ2dWV4IiwibWFwTXV0YXRpb25zIiwibWFwR2V0dGVycyIsIm1hcEFjdGlvbnMiLCJjcmVhdGVOYW1lc3BhY2VkSGVscGVycyIsImhlbHBlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJkZWZpbml0aW9uIiwiZ2xvYmFsVGhpcyIsIm5tZCIsIlRyYW5zbGF0aW9uIl0sIm1hcHBpbmdzIjoiO21HQXdCZSxDQUNiQSxRQUFTLENBQ1BDLE1BRE8sU0FDREMsR0FDSixPQUFPQyxLQUFLQyxPQUFPQyxRQUFRQyxhQUFhSixPLDhFQ0g5QyxJLElBQUEsVSxJQUNBLFUsSUFDQSxTLG1EQUVBSyxVQUFJQyxJQUFJQyxXLFVBRU8sSUFBSUEsVUFBVSxDQUMzQkMsS0FBTSxVQUNOQyxLQUFTQyxPQUFPQyxLQUFLQyxRQUFyQixnQkFDQUMsT0FBUSxDQUNOLENBQ0VDLEtBQU0sSUFDTkMsS0FBTSxXQUNOQyxVQUFXQyxlLDJRQ2JqQixJLElBQUEsVSxJQUNBLFVBQ1lDLEUsd0pBQVosVUFDQSxXLG1EQUVBYixVQUFJQyxJQUFJYSxXQUV1QkMsa0JBQUEsU0FBQyxHQUFhLElBQVpDLEVBQVksRUFBWkEsT0FDekJDLEVBQU1aLE9BQU9DLEtBQUtZLGVBQ3hCbEIsVUFBSW1CLEtBQUtDLElBQUlILEdBQUtJLE1BQ2hCLFNBQUNDLEdBQ0NOLEVBQU9ILEVBQU1VLGlCQUFrQkQsRUFBU0UsTUFDeENSLEVBQU9ILEVBQU1ZLGlCQUVmLFNBQUNDLElBQ0MsSUFBQUMsV0FBVSxRQUFTRCxFQUFNRSxTQUFXQyxLQUFLQyxNQUFNSixFQUFNRSxVQUFVRixNQUFRQSxFQUFNSyxnQkFLekRDLGFBQUEsU0FBQyxFQUFVQyxHQUFZLElBQXJCakIsRUFBcUIsRUFBckJBLE9BQzFCQSxFQUFPSCxFQUFNcUIsbUJBQW1CLEdBQ2hDbEMsVUFBSW1CLEtBQ0RDLElBQUlhLEVBQVFoQixJQUFLLENBQ2hCa0IsT0FBUSxDQUNOQyxVQUFXSCxFQUFRRyxVQUNuQkMsV0FBWUosRUFBUUksY0FHdkJoQixNQUNDLFNBQUNDLEdBQ0NOLEVBQU9ILEVBQU15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QUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQzFFLEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUMxRSxFQUFRLElBQU0sRUFBUSxJQUN0QixFQUFRLElBQU0sRUFBUSxJQUN0QixFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDaEQsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQ3RCLEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUMxRSxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDMUUsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUNuQyxFQUFRLEtBQU0sRUFBUSxLQUN0QixFQUFRLEtBQU0sRUFBUSxLQUN0QixFQUFRLEtBRVIsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUMxQixFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdEYsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3RGLEVBQVUsSUFBTSxFQUFVLElBQzFCLEVBQVUsSUFBTSxF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QUMxQzFYLE9BQU8xQixlQUFlWixFQUFTOEksT0FBT2tSLFlBQWEsQ0FBRTNaLE1BQU8sV0FFN0RpQyxPQUFPMUIsZUFBZVosRUFBUyxhQUFjLENBQUVLLE9BQU8sS0NMdkRncUYsRUFBb0JPLElBQU83cUYsSUFDMUJBLEVBQU9tZ0IsTUFBUSxHQUNWbmdCLEVBQU90QyxXQUFVc0MsRUFBT3RDLFNBQVcsSUFDakNzQyxHLG1CQ3FCUixJLElBQUEsVSxJQUNBLFMsSUFDQSxVLElBQ0EsVSxJQUNBLFUsbURBRUE5SCxVQUFJdW5DLE1BQU1xckQsV0FFVixJQUFJNXlGLFVBQUksQ0FDTjJxRCxpQkFDQS9uRCxnQkFDQXVHLEdBQUksb0JBQ0pnb0MsU0FBVSxVQUNWK1gsV0FBWSxDQUFDd0ssZUFDYjR0QixZQU5NLFdBT0oxaEYsS0FBS0MsT0FBTzBELFNBQVMsdUIiLCJmaWxlIjoidHJhbnNsYXRpb25zLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIHRyYW5zKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMudHJhbnNsYXRpb25zW2tleV07XG4gICAgfSxcbiAgfSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInO1xuaW1wb3J0IE92ZXJ2aWV3IGZyb20gJ0BhcHAvcGFnZXMvdHJhbnNsYXRpb25zL2NvbXBvbmVudHMvYXBwJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgVnVlUm91dGVyKHtcbiAgbW9kZTogJ2hpc3RvcnknLFxuICBiYXNlOiBgJHt3aW5kb3cuZGF0YS5iYXNlVXJsfS90cmFuc2xhdGlvbnNgLFxuICByb3V0ZXM6IFtcbiAgICB7XG4gICAgICBwYXRoOiAnLycsXG4gICAgICBuYW1lOiAnb3ZlcnZpZXcnLFxuICAgICAgY29tcG9uZW50OiBPdmVydmlldyxcbiAgICB9LFxuICBdLFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgVnVlUmVzb3VyY2UgZnJvbSAndnVlLXJlc291cmNlJztcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJ0BhcHAvcGFnZXMvdHJhbnNsYXRpb25zL3N0b3JlL211dGF0aW9uLXR5cGVzJztcbmltcG9ydCB7c2hvd0dyb3dsfSBmcm9tICdAYXBwL3V0aWxzL2dyb3dsJztcblxuVnVlLnVzZShWdWVSZXNvdXJjZSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUcmFuc2xhdGlvbnMgPSAoe2NvbW1pdH0pID0+IHtcbiAgY29uc3QgdXJsID0gd2luZG93LmRhdGEudHJhbnNsYXRpb25Vcmw7XG4gIFZ1ZS5odHRwLmdldCh1cmwpLnRoZW4oXG4gICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb21taXQodHlwZXMuU0VUX1RSQU5TTEFUSU9OUywgcmVzcG9uc2UuYm9keSk7XG4gICAgICBjb21taXQodHlwZXMuQVBQX0lTX1JFQURZKTtcbiAgICB9LFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLmJvZHlUZXh0ID8gSlNPTi5wYXJzZShlcnJvci5ib2R5VGV4dCkuZXJyb3IgOiBlcnJvci5zdGF0dXNUZXh0KTtcbiAgICB9LFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENhdGFsb2cgPSAoe2NvbW1pdH0sIHBheWxvYWQpID0+IHtcbiAgY29tbWl0KHR5cGVzLlBSSU5DSVBBTF9MT0FESU5HLCB0cnVlKTtcbiAgVnVlLmh0dHBcbiAgICAuZ2V0KHBheWxvYWQudXJsLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgcGFnZV9zaXplOiBwYXlsb2FkLnBhZ2Vfc2l6ZSxcbiAgICAgICAgcGFnZV9pbmRleDogcGF5bG9hZC5wYWdlX2luZGV4LFxuICAgICAgfSxcbiAgICB9KVxuICAgIC50aGVuKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbW1pdCh0eXBlcy5TRVRfVE9UQUxfUEFHRVMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdUb3RhbC1QYWdlcycpKTtcbiAgICAgICAgY29tbWl0KHR5cGVzLlNFVF9DQVRBTE9HLCByZXNwb25zZS5ib2R5KTtcbiAgICAgICAgY29tbWl0KHR5cGVzLlBSSU5DSVBBTF9MT0FESU5HLCBmYWxzZSk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHNob3dHcm93bCgnZXJyb3InLCBlcnJvci5ib2R5VGV4dCA/IEpTT04ucGFyc2UoZXJyb3IuYm9keVRleHQpLmVycm9yIDogZXJyb3Iuc3RhdHVzVGV4dCk7XG4gICAgICB9LFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RG9tYWluc1RyZWUgPSAoe2NvbW1pdH0sIHBheWxvYWQpID0+IHtcbiAgY29uc3QgdXJsID0gd2luZG93LmRhdGEuZG9tYWluc1RyZWVVcmw7XG4gIGNvbnN0IHBhcmFtcyA9IHt9O1xuXG4gIGNvbW1pdCh0eXBlcy5TSURFQkFSX0xPQURJTkcsIHRydWUpO1xuICBjb21taXQodHlwZXMuUFJJTkNJUEFMX0xPQURJTkcsIHRydWUpO1xuXG4gIGlmIChwYXlsb2FkLnN0b3JlLmdldHRlcnMuc2VhcmNoVGFncy5sZW5ndGgpIHtcbiAgICBwYXJhbXMuc2VhcmNoID0gcGF5bG9hZC5zdG9yZS5nZXR0ZXJzLnNlYXJjaFRhZ3M7XG4gIH1cblxuICBWdWUuaHR0cFxuICAgIC5nZXQodXJsLCB7XG4gICAgICBwYXJhbXMsXG4gICAgfSlcbiAgICAudGhlbihcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb21taXQodHlwZXMuU0VUX0RPTUFJTlNfVFJFRSwgcmVzcG9uc2UuYm9keSk7XG4gICAgICAgIGNvbW1pdCh0eXBlcy5TSURFQkFSX0xPQURJTkcsIGZhbHNlKTtcbiAgICAgICAgY29tbWl0KHR5cGVzLlJFU0VUX0NVUlJFTlRfRE9NQUlOKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLmJvZHlUZXh0ID8gSlNPTi5wYXJzZShlcnJvci5ib2R5VGV4dCkuZXJyb3IgOiBlcnJvci5zdGF0dXNUZXh0KTtcbiAgICAgIH0sXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoQ291bnRzID0gKHtjb21taXR9LCBwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHVybCA9IHdpbmRvdy5kYXRhLmRvbWFpbnNUcmVlVXJsO1xuICBjb25zdCBwYXJhbXMgPSB7fTtcblxuICBpZiAocGF5bG9hZC5zdG9yZS5nZXR0ZXJzLnNlYXJjaFRhZ3MubGVuZ3RoKSB7XG4gICAgcGFyYW1zLnNlYXJjaCA9IHBheWxvYWQuc3RvcmUuZ2V0dGVycy5zZWFyY2hUYWdzO1xuICB9XG5cbiAgVnVlLmh0dHBcbiAgICAuZ2V0KHVybCwge1xuICAgICAgcGFyYW1zLFxuICAgIH0pXG4gICAgLnRoZW4oXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29tbWl0KHR5cGVzLkRFQ1JFQVNFX0NVUlJFTlRfRE9NQUlOX1RPVEFMX01JU1NJTkdfVFJBTlNMQVRJT05TLCBwYXlsb2FkLnN1Y2Nlc3NmdWxseVNhdmVkKTtcbiAgICAgICAgY29tbWl0KHR5cGVzLlNFVF9ET01BSU5TX1RSRUUsIHJlc3BvbnNlLmJvZHkpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBzaG93R3Jvd2woJ2Vycm9yJywgZXJyb3IuYm9keVRleHQgPyBKU09OLnBhcnNlKGVycm9yLmJvZHlUZXh0KS5lcnJvciA6IGVycm9yLnN0YXR1c1RleHQpO1xuICAgICAgfSxcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVUcmFuc2xhdGlvbnMgPSAoe2NvbW1pdH0sIHBheWxvYWQpID0+IHtcbiAgY29uc3Qge3VybH0gPSBwYXlsb2FkO1xuICBjb25zdCB7dHJhbnNsYXRpb25zfSA9IHBheWxvYWQ7XG5cbiAgVnVlLmh0dHBcbiAgICAucG9zdCh1cmwsIHtcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KVxuICAgIC50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBwYXlsb2FkLnN0b3JlLmRpc3BhdGNoKCdyZWZyZXNoQ291bnRzJywge1xuICAgICAgICAgIHN1Y2Nlc3NmdWxseVNhdmVkOiB0cmFuc2xhdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN0b3JlOiBwYXlsb2FkLnN0b3JlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29tbWl0KHR5cGVzLlJFU0VUX01PRElGSUVEX1RSQU5TTEFUSU9OUyk7XG4gICAgICAgIHJldHVybiBzaG93R3Jvd2woJ3N1Y2Nlc3MnLCAnVHJhbnNsYXRpb25zIHN1Y2Nlc3NmdWxseSB1cGRhdGVkJyk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHNob3dHcm93bCgnZXJyb3InLCBlcnJvci5ib2R5VGV4dCA/IEpTT04ucGFyc2UoZXJyb3IuYm9keVRleHQpLmVycm9yIDogZXJyb3Iuc3RhdHVzVGV4dCk7XG4gICAgICB9LFxuICAgICk7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgKi9cbmV4cG9ydCBjb25zdCByZXNldFRyYW5zbGF0aW9uID0gKHtjb21taXR9LCBwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHt1cmx9ID0gcGF5bG9hZDtcbiAgY29uc3Qge3RyYW5zbGF0aW9uc30gPSBwYXlsb2FkO1xuXG4gIFZ1ZS5odHRwXG4gICAgLnBvc3QodXJsLCB7XG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSlcbiAgICAudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgc2hvd0dyb3dsKCdzdWNjZXNzJywgJ1RyYW5zbGF0aW9ucyBzdWNjZXNzZnVsbHkgcmVzZXQnKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLmJvZHlUZXh0ID8gSlNPTi5wYXJzZShlcnJvci5ib2R5VGV4dCkuZXJyb3IgOiBlcnJvci5zdGF0dXNUZXh0KTtcbiAgICAgIH0sXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQYWdlSW5kZXggPSAoe2NvbW1pdH0sIHBhZ2VJbmRleCkgPT4ge1xuICBjb21taXQodHlwZXMuU0VUX1BBR0VfSU5ERVgsIHBhZ2VJbmRleCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3VycmVudERvbWFpbiA9ICh7Y29tbWl0fSwgY3VycmVudERvbWFpbikgPT4ge1xuICBjb21taXQodHlwZXMuU0VUX0NVUlJFTlRfRE9NQUlOLCBjdXJyZW50RG9tYWluKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQcmluY2lwYWxMb2FkaW5nID0gKHtjb21taXR9LCBwcmluY2lwYWxMb2FkaW5nKSA9PiB7XG4gIGNvbW1pdCh0eXBlcy5QUklOQ0lQQUxfTE9BRElORywgcHJpbmNpcGFsTG9hZGluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlU2VhcmNoID0gKHtjb21taXR9LCBzZWFyY2hUYWdzKSA9PiB7XG4gIGNvbW1pdCh0eXBlcy5TRUFSQ0hfVEFHUywgc2VhcmNoVGFncyk7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IFZ1ZXggZnJvbSAndnVleCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IG11dGF0aW9ucyBmcm9tICcuL211dGF0aW9ucyc7XG5cblZ1ZS51c2UoVnVleCk7XG5cbi8vIHJvb3Qgc3RhdGUgb2JqZWN0LlxuXG5jb25zdCBzdGF0ZSA9IHtcbiAgcGFnZUluZGV4OiAxLFxuICB0b3RhbFBhZ2VzOiAwLFxuICB0cmFuc2xhdGlvbnNQZXJQYWdlOiAyMCxcbiAgY3VycmVudERvbWFpbjogJycsXG4gIHRyYW5zbGF0aW9uczoge1xuICAgIGRhdGE6IHt9LFxuICAgIGluZm86IHt9LFxuICB9LFxuICBjYXRhbG9nOiB7XG4gICAgZGF0YToge30sXG4gICAgaW5mbzoge30sXG4gIH0sXG4gIGRvbWFpbnNUcmVlOiBbXSxcbiAgdG90YWxNaXNzaW5nVHJhbnNsYXRpb25zOiAwLFxuICB0b3RhbFRyYW5zbGF0aW9uczogMCxcbiAgY3VycmVudERvbWFpblRvdGFsVHJhbnNsYXRpb25zOiAwLFxuICBjdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zOiAwLFxuICBpc1JlYWR5OiBmYWxzZSxcbiAgc2lkZWJhckxvYWRpbmc6IHRydWUsXG4gIHByaW5jaXBhbExvYWRpbmc6IHRydWUsXG4gIHNlYXJjaFRhZ3M6IFtdLFxuICBtb2RpZmllZFRyYW5zbGF0aW9uczogW10sXG59O1xuXG4vLyBnZXR0ZXJzIGFyZSBmdW5jdGlvbnNcbmNvbnN0IGdldHRlcnMgPSB7XG4gIHRvdGFsUGFnZXMocm9vdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJvb3RTdGF0ZS50b3RhbFBhZ2VzO1xuICB9LFxuICBwYWdlSW5kZXgocm9vdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJvb3RTdGF0ZS5wYWdlSW5kZXg7XG4gIH0sXG4gIGN1cnJlbnREb21haW4ocm9vdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJvb3RTdGF0ZS5jdXJyZW50RG9tYWluO1xuICB9LFxuICB0cmFuc2xhdGlvbnMocm9vdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJvb3RTdGF0ZS50cmFuc2xhdGlvbnM7XG4gIH0sXG4gIGNhdGFsb2cocm9vdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJvb3RTdGF0ZS5jYXRhbG9nO1xuICB9LFxuICBkb21haW5zVHJlZSgpIHtcbiAgICBmdW5jdGlvbiBjb252ZXJ0KGRvbWFpbnMpIHtcbiAgICAgIGRvbWFpbnMuZm9yRWFjaCgoZG9tYWluKSA9PiB7XG4gICAgICAgIGRvbWFpbi5jaGlsZHJlbiA9IF8udmFsdWVzKGRvbWFpbi5jaGlsZHJlbik7XG4gICAgICAgIGRvbWFpbi5leHRyYUxhYmVsID0gZG9tYWluLnRvdGFsX21pc3NpbmdfdHJhbnNsYXRpb25zO1xuICAgICAgICBkb21haW4uZGF0YVZhbHVlID0gZG9tYWluLmRvbWFpbl9jYXRhbG9nX2xpbms7XG4gICAgICAgIGRvbWFpbi53YXJuaW5nID0gQm9vbGVhbihkb21haW4udG90YWxfbWlzc2luZ190cmFuc2xhdGlvbnMpO1xuICAgICAgICBkb21haW4uZGlzYWJsZSA9ICFkb21haW4udG90YWxfdHJhbnNsYXRpb25zO1xuICAgICAgICBkb21haW4uaWQgPSBkb21haW4uZnVsbF9uYW1lO1xuICAgICAgICBjb252ZXJ0KGRvbWFpbi5jaGlsZHJlbik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkb21haW5zO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0KHN0YXRlLmRvbWFpbnNUcmVlKTtcbiAgfSxcbiAgaXNSZWFkeShyb290U3RhdGUpIHtcbiAgICByZXR1cm4gcm9vdFN0YXRlLmlzUmVhZHk7XG4gIH0sXG4gIHNlYXJjaFRhZ3Mocm9vdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJvb3RTdGF0ZS5zZWFyY2hUYWdzO1xuICB9LFxufTtcblxuLy8gQSBWdWV4IGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY29tYmluaW5nIHRoZSBzdGF0ZSwgbXV0YXRpb25zLCBhY3Rpb25zLFxuLy8gYW5kIGdldHRlcnMuXG5leHBvcnQgZGVmYXVsdCBuZXcgVnVleC5TdG9yZSh7XG4gIHN0YXRlLFxuICBnZXR0ZXJzLFxuICBhY3Rpb25zLFxuICBtdXRhdGlvbnMsXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmV4cG9ydCBjb25zdCBTRVRfVFJBTlNMQVRJT05TID0gJ1NFVF9UUkFOU0xBVElPTlMnO1xuZXhwb3J0IGNvbnN0IFNFVF9DQVRBTE9HID0gJ1NFVF9DQVRBTE9HJztcbmV4cG9ydCBjb25zdCBTRVRfRE9NQUlOU19UUkVFID0gJ1NFVF9ET01BSU5TX1RSRUUnO1xuZXhwb3J0IGNvbnN0IEFQUF9JU19SRUFEWSA9ICdBUFBfSVNfUkVBRFknO1xuZXhwb3J0IGNvbnN0IFNFVF9UT1RBTF9QQUdFUyA9ICdTRVRfVE9UQUxfUEFHRVMnO1xuZXhwb3J0IGNvbnN0IFNFVF9QQUdFX0lOREVYID0gJ1NFVF9QQUdFX0lOREVYJztcbmV4cG9ydCBjb25zdCBTRVRfQ1VSUkVOVF9ET01BSU4gPSAnU0VUX0NVUlJFTlRfRE9NQUlOJztcbmV4cG9ydCBjb25zdCBSRVNFVF9DVVJSRU5UX0RPTUFJTiA9ICdSRVNFVF9DVVJSRU5UX0RPTUFJTic7XG5leHBvcnQgY29uc3QgU0lERUJBUl9MT0FESU5HID0gJ1NJREVCQVJfTE9BRElORyc7XG5leHBvcnQgY29uc3QgUFJJTkNJUEFMX0xPQURJTkcgPSAnUFJJTkNJUEFMX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNFQVJDSF9UQUdTID0gJ1NFQVJDSF9UQUdTJztcbmV4cG9ydCBjb25zdCBERUNSRUFTRV9DVVJSRU5UX0RPTUFJTl9UT1RBTF9NSVNTSU5HX1RSQU5TTEFUSU9OUyA9ICdERUNSRUFTRV9DVVJSRU5UX0RPTUFJTl9UT1RBTF9NSVNTSU5HX1RSQU5TTEFUSU9OUyc7XG5leHBvcnQgY29uc3QgUkVTRVRfTU9ESUZJRURfVFJBTlNMQVRJT05TID0gJ1JFU0VUX01PRElGSUVEX1RSQU5TTEFUSU9OUyc7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vbXV0YXRpb24tdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFt0eXBlcy5TRVRfVFJBTlNMQVRJT05TXShzdGF0ZSwgdHJhbnNsYXRpb25zKSB7XG4gICAgdHJhbnNsYXRpb25zLmRhdGEuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgc3RhdGUudHJhbnNsYXRpb25zW3QudHJhbnNsYXRpb25faWRdID0gdC5uYW1lO1xuICAgIH0pO1xuICB9LFxuICBbdHlwZXMuU0VUX0NBVEFMT0ddKHN0YXRlLCBjYXRhbG9nKSB7XG4gICAgc3RhdGUuY2F0YWxvZyA9IGNhdGFsb2c7XG4gIH0sXG4gIFt0eXBlcy5TRVRfRE9NQUlOU19UUkVFXShzdGF0ZSwgZG9tYWluc1RyZWUpIHtcbiAgICBzdGF0ZS50b3RhbE1pc3NpbmdUcmFuc2xhdGlvbnMgPSBkb21haW5zVHJlZS5kYXRhLnRyZWUudG90YWxfbWlzc2luZ190cmFuc2xhdGlvbnM7XG4gICAgc3RhdGUudG90YWxUcmFuc2xhdGlvbnMgPSBkb21haW5zVHJlZS5kYXRhLnRyZWUudG90YWxfdHJhbnNsYXRpb25zO1xuICAgIHN0YXRlLmRvbWFpbnNUcmVlID0gZG9tYWluc1RyZWUuZGF0YS50cmVlLmNoaWxkcmVuO1xuICB9LFxuICBbdHlwZXMuQVBQX0lTX1JFQURZXShzdGF0ZSkge1xuICAgIHN0YXRlLmlzUmVhZHkgPSB0cnVlO1xuICB9LFxuICBbdHlwZXMuU0VUX1RPVEFMX1BBR0VTXShzdGF0ZSwgdG90YWxQYWdlcykge1xuICAgIHN0YXRlLnRvdGFsUGFnZXMgPSBOdW1iZXIodG90YWxQYWdlcyk7XG4gIH0sXG4gIFt0eXBlcy5TRVRfUEFHRV9JTkRFWF0oc3RhdGUsIHBhZ2VJbmRleCkge1xuICAgIHN0YXRlLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgfSxcbiAgW3R5cGVzLlNFVF9DVVJSRU5UX0RPTUFJTl0oc3RhdGUsIGN1cnJlbnREb21haW4pIHtcbiAgICBzdGF0ZS5jdXJyZW50RG9tYWluID0gY3VycmVudERvbWFpbi5mdWxsX25hbWU7XG4gICAgc3RhdGUuY3VycmVudERvbWFpblRvdGFsVHJhbnNsYXRpb25zID0gY3VycmVudERvbWFpbi50b3RhbF90cmFuc2xhdGlvbnM7XG4gICAgc3RhdGUuY3VycmVudERvbWFpblRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyA9IGN1cnJlbnREb21haW4udG90YWxfbWlzc2luZ190cmFuc2xhdGlvbnM7XG4gIH0sXG4gIFt0eXBlcy5SRVNFVF9DVVJSRU5UX0RPTUFJTl0oc3RhdGUpIHtcbiAgICBzdGF0ZS5jdXJyZW50RG9tYWluID0gJyc7XG4gICAgc3RhdGUuY3VycmVudERvbWFpblRvdGFsVHJhbnNsYXRpb25zID0gMDtcbiAgICBzdGF0ZS5jdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zID0gMDtcbiAgfSxcbiAgW3R5cGVzLlNJREVCQVJfTE9BRElOR10oc3RhdGUsIGlzTG9hZGluZykge1xuICAgIHN0YXRlLnNpZGViYXJMb2FkaW5nID0gaXNMb2FkaW5nO1xuICB9LFxuICBbdHlwZXMuUFJJTkNJUEFMX0xPQURJTkddKHN0YXRlLCBpc0xvYWRpbmcpIHtcbiAgICBzdGF0ZS5wcmluY2lwYWxMb2FkaW5nID0gaXNMb2FkaW5nO1xuICB9LFxuICBbdHlwZXMuU0VBUkNIX1RBR1NdKHN0YXRlLCBzZWFyY2hUYWdzKSB7XG4gICAgc3RhdGUuc2VhcmNoVGFncyA9IHNlYXJjaFRhZ3M7XG4gIH0sXG4gIFt0eXBlcy5ERUNSRUFTRV9DVVJSRU5UX0RPTUFJTl9UT1RBTF9NSVNTSU5HX1RSQU5TTEFUSU9OU10oc3RhdGUsIHN1Y2Nlc3NmdWxseVNhdmVkKSB7XG4gICAgc3RhdGUuY3VycmVudERvbWFpblRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyAtPSBzdWNjZXNzZnVsbHlTYXZlZDtcbiAgfSxcbiAgW3R5cGVzLlJFU0VUX01PRElGSUVEX1RSQU5TTEFUSU9OU10oc3RhdGUpIHtcbiAgICBzdGF0ZS5tb2RpZmllZFRyYW5zbGF0aW9ucyA9IFtdO1xuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuZXhwb3J0IGNvbnN0IEV2ZW50QnVzID0gbmV3IFZ1ZSgpO1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudEJ1cztcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93R3Jvd2wgPSAodHlwZSwgbWVzc2FnZSwgZHVyYXRpb25UaW1lKSA9PiB7XG4gIGNvbnN0IGR1cmF0aW9uID0gdW5kZWZpbmVkICE9PSBkdXJhdGlvblRpbWUgPyBkdXJhdGlvblRpbWUgOiAyMDAwO1xuXG4gIGlmICh0eXBlID09PSAnc3VjY2VzcycpIHtcbiAgICB3aW5kb3cuJC5ncm93bCh7XG4gICAgICB0aXRsZTogJycsXG4gICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy4kLmdyb3dsW3R5cGVdKHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZHVyYXRpb24sXG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNob3dHcm93bDtcbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIGlkPVwiYXBwXCJcbiAgICBjbGFzcz1cInRyYW5zbGF0aW9ucy1hcHBcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPFNlYXJjaCBAc2VhcmNoPVwib25TZWFyY2hcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNsYXRpb25zLXN1bW1hcnlcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0b3RhbFRyYW5zbGF0aW9ucyB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiB2LXNob3c9XCJ0b3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNcIj5cbiAgICAgICAgICAgIC1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWlzc2luZ1wiPnt7IHRvdGFsTWlzc2luZ1RyYW5zbGF0aW9uc1N0cmluZyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICA6bW9kYWw9XCJ0aGlzLiRyZWZzLnRyYW5zTW9kYWxcIlxuICAgICAgICAgIDpwcmluY2lwYWw9XCJ0aGlzLiRyZWZzLnByaW5jaXBhbFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxQcmluY2lwYWxcbiAgICAgICAgICA6bW9kYWw9XCJ0aGlzLiRyZWZzLnRyYW5zTW9kYWxcIlxuICAgICAgICAgIHJlZj1cInByaW5jaXBhbFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8UFNNb2RhbFxuICAgICAgcmVmPVwidHJhbnNNb2RhbFwiXG4gICAgICA6dHJhbnNsYXRpb25zPVwidHJhbnNsYXRpb25zXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBTZWFyY2ggZnJvbSAnQGFwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoJztcbiAgaW1wb3J0IFNpZGViYXIgZnJvbSAnQGFwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyJztcbiAgaW1wb3J0IFByaW5jaXBhbCBmcm9tICdAYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbCc7XG4gIGltcG9ydCBQU01vZGFsIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1tb2RhbCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdBcHAnLFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc1JlYWR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5pc1JlYWR5O1xuICAgICAgfSxcbiAgICAgIHRvdGFsVHJhbnNsYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUudG90YWxUcmFuc2xhdGlvbnMgPD0gMVxuICAgICAgICAgID8gdGhpcy50cmFucygnbGFiZWxfdG90YWxfZG9tYWluX3Npbmd1bGFyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCclbmJfdHJhbnNsYXRpb24lJywgdGhpcy4kc3RvcmUuc3RhdGUudG90YWxUcmFuc2xhdGlvbnMpXG4gICAgICAgICAgOiB0aGlzLnRyYW5zKCdsYWJlbF90b3RhbF9kb21haW4nKVxuICAgICAgICAgICAgLnJlcGxhY2UoJyVuYl90cmFuc2xhdGlvbnMlJywgdGhpcy4kc3RvcmUuc3RhdGUudG90YWxUcmFuc2xhdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIHRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucztcbiAgICAgIH0sXG4gICAgICB0b3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyA9PT0gMVxuICAgICAgICAgID8gdGhpcy50cmFucygnbGFiZWxfbWlzc2luZ19zaW5ndWxhcicpXG4gICAgICAgICAgOiB0aGlzLnRyYW5zKCdsYWJlbF9taXNzaW5nJykucmVwbGFjZSgnJWQnLCB0aGlzLnRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyk7XG4gICAgICB9LFxuICAgICAgdHJhbnNsYXRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1dHRvbl9zYXZlOiB0aGlzLnRyYW5zKCdidXR0b25fc2F2ZScpLFxuICAgICAgICAgIGJ1dHRvbl9sZWF2ZTogdGhpcy50cmFucygnYnV0dG9uX2xlYXZlJyksXG4gICAgICAgICAgbW9kYWxfY29udGVudDogdGhpcy50cmFucygnbW9kYWxfY29udGVudCcpLFxuICAgICAgICAgIG1vZGFsX3RpdGxlOiB0aGlzLnRyYW5zKCdtb2RhbF90aXRsZScpLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAkKCdhJykub24oJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgaWYgKCQoZS5jdXJyZW50VGFyZ2V0KS5hdHRyKCdocmVmJykpIHtcbiAgICAgICAgICB0aGlzLmRlc3RIcmVmID0gJChlLmN1cnJlbnRUYXJnZXQpLmF0dHIoJ2hyZWYnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5kZXN0SHJlZiAmJiB0aGlzLmlzRWRpdGVkKCkgJiYgIXRoaXMubGVhdmUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5sZWF2ZSAmJiB0aGlzLmlzRWRpdGVkKCkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5zdG9wKCk7XG4gICAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICAgIHRoaXMuJHJlZnMudHJhbnNNb2RhbC5zaG93TW9kYWwoKTtcbiAgICAgICAgICB0aGlzLiRyZWZzLnRyYW5zTW9kYWwuJG9uY2UoJ3NhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRyZWZzLnByaW5jaXBhbC5zYXZlVHJhbnNsYXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmxlYXZlUGFnZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy4kcmVmcy50cmFuc01vZGFsLiRvbmNlKCdsZWF2ZScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGVhdmVQYWdlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uU2VhcmNoKCkge1xuICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0RG9tYWluc1RyZWUnLCB7XG4gICAgICAgICAgc3RvcmU6IHRoaXMuJHN0b3JlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kc3RvcmUuY3VycmVudERvbWFpbiA9ICcnO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogU2V0IGxlYXZlIHRvIHRydWUgYW5kIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBuZXcgbG9jYXRpb25cbiAgICAgICAqL1xuICAgICAgbGVhdmVQYWdlKCkge1xuICAgICAgICB0aGlzLmxlYXZlID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmRlc3RIcmVmO1xuICAgICAgfSxcbiAgICAgIGlzRWRpdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmVmcy5wcmluY2lwYWwuZWRpdGVkKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIGRlc3RIcmVmOiBudWxsLFxuICAgICAgbGVhdmU6IGZhbHNlLFxuICAgIH0pLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFNlYXJjaCxcbiAgICAgIFNpZGViYXIsXG4gICAgICBQcmluY2lwYWwsXG4gICAgICBQU01vZGFsLFxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgdHlwZT1cInRleHQvc2Nzc1wiPlxuICBAaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcblxuICAuZmxleCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG5cbiAgLm1pc3Npbmcge1xuICAgIGNvbG9yOiAkZGFuZ2VyO1xuICB9XG5cbiAgLnRyYW5zbGF0aW9ucy1zdW1tYXJ5IHtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgfVxuPC9zdHlsZT5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgaWQ9XCJzZWFyY2hcIlxuICAgIGNsYXNzPVwiY29sLW1kLTggbWItNFwiXG4gID5cbiAgICA8Zm9ybVxuICAgICAgY2xhc3M9XCJzZWFyY2gtZm9ybVwiXG4gICAgICBAc3VibWl0LnByZXZlbnRcbiAgICA+XG4gICAgICA8bGFiZWw+e3sgdHJhbnMoJ3NlYXJjaF9sYWJlbCcpIH19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICA8UFNUYWdzXG4gICAgICAgICAgcmVmPVwicHNUYWdzXCJcbiAgICAgICAgICA6dGFncz1cInRhZ3NcIlxuICAgICAgICAgIEB0YWdDaGFuZ2U9XCJvblNlYXJjaFwiXG4gICAgICAgICAgOnBsYWNlaG9sZGVyPVwidHJhbnMoJ3NlYXJjaF9wbGFjZWhvbGRlcicpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgIDxQU0J1dHRvblxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1idXR0b25cIlxuICAgICAgICAgICAgOnByaW1hcnk9XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+c2VhcmNoPC9pPlxuICAgICAgICAgICAge3sgdHJhbnMoJ2J1dHRvbl9zZWFyY2gnKSB9fVxuICAgICAgICAgIDwvUFNCdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU1RhZ3MgZnJvbSAnQGFwcC93aWRnZXRzL3BzLXRhZ3MnO1xuICBpbXBvcnQgUFNCdXR0b24gZnJvbSAnQGFwcC93aWRnZXRzL3BzLWJ1dHRvbic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTVGFncyxcbiAgICAgIFBTQnV0dG9uLFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgb25DbGljaygpIHtcbiAgICAgICAgY29uc3Qge3RhZ30gPSB0aGlzLiRyZWZzLnBzVGFncztcbiAgICAgICAgdGhpcy4kcmVmcy5wc1RhZ3MuYWRkKHRhZyk7XG4gICAgICB9LFxuICAgICAgb25TZWFyY2goKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTZWFyY2gnLCB0aGlzLnRhZ3MpO1xuICAgICAgICB0aGlzLiRlbWl0KCdzZWFyY2gnLCB0aGlzLnRhZ3MpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAkcm91dGUoKSB7XG4gICAgICAgIHRoaXMudGFncyA9IFtdO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWdzOiBbXSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDx0cmFuc2l0aW9uIG5hbWU9XCJmYWRlXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2wtc20tOSBjYXJkXCJcbiAgICAgIHYtaWY9XCJwcmluY2lwYWxSZWFkeVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtMyB0cmFuc2xhdGlvbnMtd3JhcHBlclwiPlxuICAgICAgICA8UFNBbGVydFxuICAgICAgICAgIHYtaWY9XCJub1Jlc3VsdFwiXG4gICAgICAgICAgYWxlcnQtdHlwZT1cIkFMRVJUX1RZUEVfV0FSTklOR1wiXG4gICAgICAgICAgOmhhcy1jbG9zZT1cImZhbHNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG5vUmVzdWx0SW5mbyB9fVxuICAgICAgICA8L1BTQWxlcnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRyYW5zbGF0aW9ucy1jYXRhbG9nIHJvdyBwLTBcIlxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICA+XG4gICAgICAgICAgPFBTQWxlcnRcbiAgICAgICAgICAgIHYtaWY9XCJzZWFyY2hBY3RpdmVcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtc20tMTJcIlxuICAgICAgICAgICAgYWxlcnQtdHlwZT1cIkFMRVJUX1RZUEVfSU5GT1wiXG4gICAgICAgICAgICA6aGFzLWNsb3NlPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHNlYXJjaEluZm8gfX1cbiAgICAgICAgICA8L1BTQWxlcnQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04IHB0LTNcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImRvbWFpbi1pbmZvXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGN1cnJlbnREb21haW4gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGN1cnJlbnREb21haW5Ub3RhbFRyYW5zbGF0aW9ucyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICB2LXNob3c9XCJjdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zXCJcbiAgICAgICAgICAgICAgPiAtIDxzcGFuIGNsYXNzPVwibWlzc2luZ1wiPnt7IGN1cnJlbnREb21haW5Ub3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmcgfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgICAgICAgIDxQU1BhZ2luYXRpb25cbiAgICAgICAgICAgICAgOmN1cnJlbnQtaW5kZXg9XCJjdXJyZW50UGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgIDpwYWdlcy1jb3VudD1cInBhZ2VzQ291bnRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsb2F0LXNtLXJpZ2h0XCJcbiAgICAgICAgICAgICAgQHBhZ2VDaGFuZ2VkPVwib25QYWdlQ2hhbmdlZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICBjbGFzcz1cImNvbC1zbS0xMlwiXG4gICAgICAgICAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICAgICAgICAgIDphY3Rpb249XCJzYXZlQWN0aW9uXCJcbiAgICAgICAgICAgIDppc0VkaXRlZD1cImlzRWRpdGVkXCJcbiAgICAgICAgICAgIEBzdWJtaXQucHJldmVudD1cInNhdmVUcmFuc2xhdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPFBTQnV0dG9uXG4gICAgICAgICAgICAgICAgICA6cHJpbWFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsb2F0LXNtLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyB0cmFucygnYnV0dG9uX3NhdmUnKSB9fVxuICAgICAgICAgICAgICAgIDwvUFNCdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxUcmFuc2xhdGlvbklucHV0XG4gICAgICAgICAgICAgIHYtZm9yPVwiKHRyYW5zbGF0aW9uLCBrZXkpIGluIHRyYW5zbGF0aW9uc0NhdGFsb2dcIlxuICAgICAgICAgICAgICA6a2V5PVwia2V5XCJcbiAgICAgICAgICAgICAgOmlkPVwia2V5XCJcbiAgICAgICAgICAgICAgOnRyYW5zbGF0ZWQ9XCJ0cmFuc2xhdGlvblwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cInRyYW5zbGF0aW9uLmRlZmF1bHRcIlxuICAgICAgICAgICAgICA6ZXh0cmEtaW5mbz1cImdldERvbWFpbih0cmFuc2xhdGlvbi50cmVlX2RvbWFpbilcIlxuICAgICAgICAgICAgICBAZWRpdGVkQWN0aW9uPVwiaXNFZGl0ZWRcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XG4gICAgICAgICAgICAgICAgPFBTQnV0dG9uXG4gICAgICAgICAgICAgICAgICA6cHJpbWFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsb2F0LXNtLXJpZ2h0IG10LTNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zKCdidXR0b25fc2F2ZScpIH19XG4gICAgICAgICAgICAgICAgPC9QU0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxuICAgICAgICAgICAgPFBTUGFnaW5hdGlvblxuICAgICAgICAgICAgICA6Y3VycmVudC1pbmRleD1cImN1cnJlbnRQYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgOnBhZ2VzLWNvdW50PVwicGFnZXNDb3VudFwiXG4gICAgICAgICAgICAgIEBwYWdlQ2hhbmdlZD1cIm9uUGFnZUNoYW5nZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC90cmFuc2l0aW9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFBTQnV0dG9uIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1idXR0b24nO1xuICBpbXBvcnQgUFNQYWdpbmF0aW9uIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1wYWdpbmF0aW9uJztcbiAgaW1wb3J0IFBTQWxlcnQgZnJvbSAnQGFwcC93aWRnZXRzL3BzLWFsZXJ0JztcbiAgaW1wb3J0IHtFdmVudEJ1c30gZnJvbSAnQGFwcC91dGlscy9ldmVudC1idXMnO1xuICBpbXBvcnQgVHJhbnNsYXRpb25JbnB1dCBmcm9tICcuL3RyYW5zbGF0aW9uLWlucHV0JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIG1vZGFsOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBvcmlnaW5hbFRyYW5zbGF0aW9uczogW10sXG4gICAgICBtb2RpZmllZFRyYW5zbGF0aW9uczogW10sXG4gICAgfSksXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHByaW5jaXBhbFJlYWR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuJHN0b3JlLnN0YXRlLnByaW5jaXBhbExvYWRpbmc7XG4gICAgICB9LFxuICAgICAgdHJhbnNsYXRpb25zQ2F0YWxvZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMuY2F0YWxvZy5kYXRhLmRhdGE7XG4gICAgICB9LFxuICAgICAgc2F2ZUFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMuY2F0YWxvZy5kYXRhLmluZm8gPyB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNhdGFsb2cuZGF0YS5pbmZvLmVkaXRfdXJsIDogJyc7XG4gICAgICB9LFxuICAgICAgcmVzZXRBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNhdGFsb2cuZGF0YS5pbmZvID8gdGhpcy4kc3RvcmUuZ2V0dGVycy5jYXRhbG9nLmRhdGEuaW5mby5yZXNldF91cmwgOiAnJztcbiAgICAgIH0sXG4gICAgICBwYWdlc0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy50b3RhbFBhZ2VzO1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnRQYWdpbmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5wYWdlSW5kZXg7XG4gICAgICB9LFxuICAgICAgY3VycmVudERvbWFpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmN1cnJlbnREb21haW47XG4gICAgICB9LFxuICAgICAgY3VycmVudERvbWFpblRvdGFsVHJhbnNsYXRpb25zKCkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4gICAgICAgIHJldHVybiAodGhpcy4kc3RvcmUuc3RhdGUuY3VycmVudERvbWFpblRvdGFsVHJhbnNsYXRpb25zIDw9IDEpXG4gICAgICAgICAgPyBgLSAke3RoaXMudHJhbnMoJ2xhYmVsX3RvdGFsX2RvbWFpbl9zaW5ndWxhcicpLnJlcGxhY2UoJyVuYl90cmFuc2xhdGlvbiUnLCB0aGlzLiRzdG9yZS5zdGF0ZS5jdXJyZW50RG9tYWluVG90YWxUcmFuc2xhdGlvbnMpfWBcbiAgICAgICAgICA6IGAtICR7dGhpcy50cmFucygnbGFiZWxfdG90YWxfZG9tYWluJykucmVwbGFjZSgnJW5iX3RyYW5zbGF0aW9ucyUnLCB0aGlzLiRzdG9yZS5zdGF0ZS5jdXJyZW50RG9tYWluVG90YWxUcmFuc2xhdGlvbnMpfWA7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnREb21haW5Ub3RhbE1pc3NpbmdUcmFuc2xhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zO1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnREb21haW5Ub3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmcoKSB7XG4gICAgICAgIGxldCB0b3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmcgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudERvbWFpblRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyA9PT0gMSkge1xuICAgICAgICAgICAgdG90YWxNaXNzaW5nVHJhbnNsYXRpb25zU3RyaW5nID0gdGhpcy50cmFucygnbGFiZWxfbWlzc2luZ19zaW5ndWxhcicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmcgPSB0aGlzLnRyYW5zKCdsYWJlbF9taXNzaW5nJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJyVkJywgdGhpcy5jdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG90YWxNaXNzaW5nVHJhbnNsYXRpb25zU3RyaW5nO1xuICAgICAgfSxcbiAgICAgIG5vUmVzdWx0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuJHN0b3JlLmdldHRlcnMuY3VycmVudERvbWFpbiA9PT0gJycgfHwgdHlwZW9mIHRoaXMuJHN0b3JlLmdldHRlcnMuY3VycmVudERvbWFpbiA9PT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgfSxcbiAgICAgIG5vUmVzdWx0SW5mbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnMoJ25vX3Jlc3VsdCcpLnJlcGxhY2UoJyVzJywgdGhpcy4kc3RvcmUuZ2V0dGVycy5zZWFyY2hUYWdzLmpvaW4oJyAtICcpKTtcbiAgICAgIH0sXG4gICAgICBzZWFyY2hBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzLnNlYXJjaFRhZ3MubGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIHNlYXJjaEluZm8oKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zS2V5ID0gKHRoaXMuJHN0b3JlLnN0YXRlLnRvdGFsVHJhbnNsYXRpb25zIDw9IDEpID8gJ3NlYXJjaF9pbmZvX3Npbmd1bGFyJyA6ICdzZWFyY2hfaW5mbyc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnModHJhbnNLZXkpXG4gICAgICAgICAgLnJlcGxhY2UoJyVzJywgdGhpcy4kc3RvcmUuZ2V0dGVycy5zZWFyY2hUYWdzLmpvaW4oJyAtICcpKVxuICAgICAgICAgIC5yZXBsYWNlKCclZCcsIHRoaXMuJHN0b3JlLnN0YXRlLnRvdGFsVHJhbnNsYXRpb25zKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAvKipcbiAgICAgICAqIERpc3BhdGNoIHRoZSBldmVudCB0byBjaGFuZ2UgdGhlIHBhZ2UgaW5kZXgsXG4gICAgICAgKiBnZXQgdGhlIHRyYW5zbGF0aW9ucyBhbmQgcmVzZXQgdGhlIG1vZGlmaWVkIHRyYW5zbGF0aW9ucyBpbnRvIHRoZSBzdGF0ZVxuICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHBhZ2VJbmRleFxuICAgICAgICovXG4gICAgICBjaGFuZ2VQYWdlOiBmdW5jdGlvbiBjaGFuZ2VQYWdlKHBhZ2VJbmRleCkge1xuICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndXBkYXRlUGFnZUluZGV4JywgcGFnZUluZGV4KTtcbiAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5tb2RpZmllZFRyYW5zbGF0aW9ucyA9IFtdO1xuICAgICAgfSxcbiAgICAgIGlzRWRpdGVkKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC50cmFuc2xhdGlvbi5lZGl0ZWQpIHtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5tb2RpZmllZFRyYW5zbGF0aW9uc1tpbnB1dC5pZF0gPSBpbnB1dC50cmFuc2xhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5tb2RpZmllZFRyYW5zbGF0aW9ucy5zcGxpY2UoXG4gICAgICAgICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5tb2RpZmllZFRyYW5zbGF0aW9ucy5pbmRleE9mKGlucHV0LmlkKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uUGFnZUNoYW5nZWQocGFnZUluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRlZCgpKSB7XG4gICAgICAgICAgdGhpcy5tb2RhbC5zaG93TW9kYWwoKTtcbiAgICAgICAgICB0aGlzLm1vZGFsLiRvbmNlKCdzYXZlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlVHJhbnNsYXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UocGFnZUluZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm1vZGFsLiRvbmNlKCdsZWF2ZScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShwYWdlSW5kZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShwYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZmV0Y2goKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDYXRhbG9nJywge1xuICAgICAgICAgIHVybDogdGhpcy4kc3RvcmUuZ2V0dGVycy5jYXRhbG9nLmluZm8uY3VycmVudF91cmxfd2l0aG91dF9wYWdpbmF0aW9uLFxuICAgICAgICAgIHBhZ2Vfc2l6ZTogdGhpcy4kc3RvcmUuc3RhdGUudHJhbnNsYXRpb25zUGVyUGFnZSxcbiAgICAgICAgICBwYWdlX2luZGV4OiB0aGlzLiRzdG9yZS5nZXR0ZXJzLnBhZ2VJbmRleCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZ2V0RG9tYWluKGRvbWFpbnMpIHtcbiAgICAgICAgbGV0IGRvbWFpbiA9ICcnO1xuICAgICAgICBkb21haW5zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICBkb21haW4gKz0gYCR7ZH0gPiBgO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbWFpbi5zbGljZSgwLCAtMyk7XG4gICAgICB9LFxuICAgICAgc2F2ZVRyYW5zbGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZWRUcmFuc2xhdGlvbnMgPSB0aGlzLmdldE1vZGlmaWVkVHJhbnNsYXRpb25zKCk7XG5cbiAgICAgICAgaWYgKG1vZGlmaWVkVHJhbnNsYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzYXZlVHJhbnNsYXRpb25zJywge1xuICAgICAgICAgICAgdXJsOiB0aGlzLnNhdmVBY3Rpb24sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuZ2V0TW9kaWZpZWRUcmFuc2xhdGlvbnMoKSxcbiAgICAgICAgICAgIHN0b3JlOiB0aGlzLiRzdG9yZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldE1vZGlmaWVkVHJhbnNsYXRpb25zKCkge1xuICAgICAgICB0aGlzLm1vZGlmaWVkVHJhbnNsYXRpb25zID0gW107XG4gICAgICAgIGNvbnN0IHRhcmdldFRoZW1lID0gKHdpbmRvdy5kYXRhLnR5cGUgPT09ICdtb2R1bGVzJykgPyAnJyA6IHdpbmRvdy5kYXRhLnNlbGVjdGVkO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy4kc3RvcmUuc3RhdGUubW9kaWZpZWRUcmFuc2xhdGlvbnMpLmZvckVhY2goKHRyYW5zbGF0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RpZmllZFRyYW5zbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRyYW5zbGF0aW9uLmRlZmF1bHQsXG4gICAgICAgICAgICBlZGl0ZWQ6IHRyYW5zbGF0aW9uLmVkaXRlZCxcbiAgICAgICAgICAgIGRvbWFpbjogdHJhbnNsYXRpb24udHJlZV9kb21haW4uam9pbignJyksXG4gICAgICAgICAgICBsb2NhbGU6IHdpbmRvdy5kYXRhLmxvY2FsZSxcbiAgICAgICAgICAgIHRoZW1lOiB0YXJnZXRUaGVtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubW9kaWZpZWRUcmFuc2xhdGlvbnM7XG4gICAgICB9LFxuICAgICAgZWRpdGVkKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4kc3RvcmUuc3RhdGUubW9kaWZpZWRUcmFuc2xhdGlvbnMpLmxlbmd0aCA+IDA7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIEV2ZW50QnVzLiRvbigncmVzZXRUcmFuc2xhdGlvbicsIChlbCkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBbXTtcblxuICAgICAgICB0cmFuc2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgZGVmYXVsdDogZWwuZGVmYXVsdCxcbiAgICAgICAgICBkb21haW46IGVsLnRyZWVfZG9tYWluLmpvaW4oJycpLFxuICAgICAgICAgIGxvY2FsZTogd2luZG93LmRhdGEubG9jYWxlLFxuICAgICAgICAgIHRoZW1lOiB3aW5kb3cuZGF0YS5zZWxlY3RlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3Jlc2V0VHJhbnNsYXRpb24nLCB7XG4gICAgICAgICAgdXJsOiB0aGlzLnJlc2V0QWN0aW9uLFxuICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFRyYW5zbGF0aW9uSW5wdXQsXG4gICAgICBQU0J1dHRvbixcbiAgICAgIFBTUGFnaW5hdGlvbixcbiAgICAgIFBTQWxlcnQsXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XG4gIEBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xuXG4gIC5mYWRlLWVudGVyLWFjdGl2ZSwgLmZhZGUtbGVhdmUtYWN0aXZlIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC41c1xuICB9XG4gIC5mYWRlLWVudGVyLCAuZmFkZS1sZWF2ZS10byAvKiAuZmFkZS1sZWF2ZS1hY3RpdmUgaW4gPDIuMS44ICovIHtcbiAgICBvcGFjaXR5OiAwXG4gIH1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWw+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgcm93cz1cIjJcIlxuICAgICAgdi1tb2RlbD1cImdldFRyYW5zbGF0ZWRcIlxuICAgICAgOmNsYXNzPVwieyBtaXNzaW5nIDogaXNNaXNzaW5nIH1cIlxuICAgIC8+XG4gICAgPFBTQnV0dG9uXG4gICAgICBjbGFzcz1cIm10LTMgZmxvYXQtc20tcmlnaHRcIlxuICAgICAgOnByaW1hcnk9XCJmYWxzZVwiXG4gICAgICBnaG9zdFxuICAgICAgQGNsaWNrPVwicmVzZXRUcmFuc2xhdGlvblwiXG4gICAgPlxuICAgICAge3sgdHJhbnMoJ2J1dHRvbl9yZXNldCcpIH19XG4gICAgPC9QU0J1dHRvbj5cbiAgICA8c21hbGwgY2xhc3M9XCJtdC0zXCI+e3sgZXh0cmFJbmZvIH19PC9zbWFsbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgUFNCdXR0b24gZnJvbSAnQGFwcC93aWRnZXRzL3BzLWJ1dHRvbic7XG4gIGltcG9ydCB7RXZlbnRCdXN9IGZyb20gJ0BhcHAvdXRpbHMvZXZlbnQtYnVzJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1RyYW5zbGF0aW9uSW5wdXQnLFxuICAgIHByb3BzOiB7XG4gICAgICBpZDoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gICAgICBleHRyYUluZm86IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgdHJhbnNsYXRlZDoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBnZXRUcmFuc2xhdGVkOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVkLnVzZXIgPyB0aGlzLnRyYW5zbGF0ZWQudXNlciA6IHRoaXMudHJhbnNsYXRlZC5wcm9qZWN0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQobW9kaWZpZWRWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWVkVHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRlZDtcbiAgICAgICAgICBtb2RpZmllZFRyYW5zbGF0ZWQudXNlciA9IG1vZGlmaWVkVmFsdWU7XG4gICAgICAgICAgbW9kaWZpZWRUcmFuc2xhdGVkLmVkaXRlZCA9IG1vZGlmaWVkVmFsdWU7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBtb2RpZmllZFRyYW5zbGF0ZWQpO1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2VkaXRlZEFjdGlvbicsIHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uOiBtb2RpZmllZFRyYW5zbGF0ZWQsXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBpc01pc3NpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWQgPT09IG51bGw7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgcmVzZXRUcmFuc2xhdGlvbigpIHtcbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGVkID0gJyc7XG4gICAgICAgIEV2ZW50QnVzLiRlbWl0KCdyZXNldFRyYW5zbGF0aW9uJywgdGhpcy50cmFuc2xhdGVkKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBQU0J1dHRvbixcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbiAgQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XG5cbiAgLmZvcm0tZ3JvdXAge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbiAgLm1pc3Npbmcge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRkYW5nZXI7XG4gIH1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQgcC0zXCI+XG4gICAgICA8UFNUcmVlXG4gICAgICAgIHJlZj1cImRvbWFpblRyZWVcIlxuICAgICAgICA6bW9kZWw9XCJkb21haW5zVHJlZVwiXG4gICAgICAgIGNsYXNzLW5hbWU9XCJ0cmFuc2xhdGlvblRyZWVcIlxuICAgICAgICA6dHJhbnNsYXRpb25zPVwidHJhbnNsYXRpb25zXCJcbiAgICAgICAgOmN1cnJlbnQtaXRlbT1cImN1cnJlbnRJdGVtXCJcbiAgICAgICAgdi1pZj1cInRyZWVSZWFkeVwiXG4gICAgICAvPlxuICAgICAgPFBTU3Bpbm5lciB2LWVsc2UgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgUFNUcmVlIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy10cmVlL3BzLXRyZWUnO1xuICBpbXBvcnQgUFNTcGlubmVyIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1zcGlubmVyJztcbiAgaW1wb3J0IHtFdmVudEJ1c30gZnJvbSAnQGFwcC91dGlscy9ldmVudC1idXMnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgbW9kYWw6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICB9LFxuICAgICAgcHJpbmNpcGFsOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB0cmVlUmVhZHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy4kc3RvcmUuc3RhdGUuc2lkZWJhckxvYWRpbmc7XG4gICAgICB9LFxuICAgICAgY3VycmVudEl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLiRzdG9yZS5nZXR0ZXJzLmN1cnJlbnREb21haW4gPT09ICcnIHx8IHR5cGVvZiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmN1cnJlbnREb21haW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZG9tYWluc1RyZWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkb21haW4gPSB0aGlzLmdldEZpcnN0RG9tYWluVG9EaXNwbGF5KHRoaXMuZG9tYWluc1RyZWUpO1xuICAgICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ3JlZHVjZScpO1xuICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZUN1cnJlbnREb21haW4nLCBkb21haW4pO1xuXG4gICAgICAgICAgICBpZiAoZG9tYWluICE9PSAnJykge1xuICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q2F0YWxvZycsIHt1cmw6IGRvbWFpbi5kYXRhVmFsdWV9KTtcbiAgICAgICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ3NldEN1cnJlbnRFbGVtZW50JywgZG9tYWluLmZ1bGxfbmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybiBkb21haW4uZnVsbF9uYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndXBkYXRlUHJpbmNpcGFsTG9hZGluZycsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5jdXJyZW50RG9tYWluO1xuICAgICAgfSxcbiAgICAgIGRvbWFpbnNUcmVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5kb21haW5zVHJlZTtcbiAgICAgIH0sXG4gICAgICB0cmFuc2xhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXhwYW5kOiB0aGlzLnRyYW5zKCdzaWRlYmFyX2V4cGFuZCcpLFxuICAgICAgICAgIHJlZHVjZTogdGhpcy50cmFucygnc2lkZWJhcl9jb2xsYXBzZScpLFxuICAgICAgICAgIGV4dHJhOiB0aGlzLnRyYW5zKCdsYWJlbF9taXNzaW5nJyksXG4gICAgICAgICAgZXh0cmFfc2luZ3VsYXI6IHRoaXMudHJhbnMoJ2xhYmVsX21pc3Npbmdfc2luZ3VsYXInKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldERvbWFpbnNUcmVlJywge1xuICAgICAgICBzdG9yZTogdGhpcy4kc3RvcmUsXG4gICAgICB9KTtcbiAgICAgIEV2ZW50QnVzLiRvbignbGFzdFRyZWVJdGVtQ2xpY2snLCAoZWwpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGVkKCkpIHtcbiAgICAgICAgICB0aGlzLm1vZGFsLnNob3dNb2RhbCgpO1xuICAgICAgICAgIHRoaXMubW9kYWwuJG9uY2UoJ3NhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByaW5jaXBhbC5zYXZlVHJhbnNsYXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGljayhlbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5tb2RhbC4kb25jZSgnbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGljayhlbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pdGVtQ2xpY2soZWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogVXBkYXRlIHRoZSBkb21haW4sIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbnMgY2F0YWxvZywgc2V0IHRoZSBwYWdlIHRvIDFcbiAgICAgICAqIGFuZCByZXNldCB0aGUgbW9kaWZpZWQgdHJhbnNsYXRpb25zXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gZWwgLSBEb21haW4gdG8gc2V0XG4gICAgICAgKi9cbiAgICAgIGl0ZW1DbGljazogZnVuY3Rpb24gaXRlbUNsaWNrKGVsKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVDdXJyZW50RG9tYWluJywgZWwuaXRlbSk7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDYXRhbG9nJywge3VybDogZWwuaXRlbS5kYXRhVmFsdWV9KTtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVBhZ2VJbmRleCcsIDEpO1xuICAgICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5tb2RpZmllZFRyYW5zbGF0aW9ucyA9IFtdO1xuICAgICAgfSxcbiAgICAgIGdldEZpcnN0RG9tYWluVG9EaXNwbGF5OiBmdW5jdGlvbiBnZXRGaXJzdERvbWFpblRvRGlzcGxheSh0cmVlKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0cmVlKTtcbiAgICAgICAgbGV0IHRvRGlzcGxheSA9ICcnO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmICghdHJlZVtrZXlzW2ldXS5kaXNhYmxlKSB7XG4gICAgICAgICAgICBpZiAodHJlZVtrZXlzW2ldXS5jaGlsZHJlbiAmJiB0cmVlW2tleXNbaV1dLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZpcnN0RG9tYWluVG9EaXNwbGF5KHRyZWVba2V5c1tpXV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0Rpc3BsYXkgPSB0cmVlW2tleXNbaV1dO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvRGlzcGxheTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrIGlmIHNvbWUgdHJhbnNsYXRpb25zIGhhdmUgYmVlbiBlZGl0ZWRcbiAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICovXG4gICAgICBlZGl0ZWQ6IGZ1bmN0aW9uIGVkaXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuJHN0b3JlLnN0YXRlLm1vZGlmaWVkVHJhbnNsYXRpb25zKS5sZW5ndGggPiAwO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTVHJlZSxcbiAgICAgIFBTU3Bpbm5lcixcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIj5cbiAgQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XG5cbiAgLnRyYW5zbGF0aW9uVHJlZSB7XG4gICAgLnRyZWUtbmFtZSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAuOTM3NXJlbTtcblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIH1cblxuICAgICAgJi5leHRyYSB7XG4gICAgICAgIGNvbG9yOiAkZGFuZ2VyO1xuICAgICAgfVxuICAgIH1cbiAgICAudHJlZS1leHRyYS1sYWJlbCB7XG4gICAgICBjb2xvcjogJGRhbmdlcjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBmb250LXNpemU6IC42NXJlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIH1cbiAgICAudHJlZS1leHRyYS1sYWJlbC1taW5pIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkYW5nZXI7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogLjc1cmVtO1xuICAgICAgaGVpZ2h0OiAxLjVyZW07XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG4gICAgLnRyZWUtbGFiZWwge1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLnBzLWxvYWRlciB7XG4gICAgJGxvYWRlci13aGl0ZS1oZWlnaHQ6IDIwcHg7XG4gICAgJGxvYWRlci1saW5lLWhlaWdodDogMTZweDtcbiAgICAuYW5pbWF0ZWQtYmFja2dyb3VuZCB7XG4gICAgICBoZWlnaHQ6IDE0NHB4IWltcG9ydGFudDtcbiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMnMhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuYmFja2dyb3VuZC1tYXNrZXIge1xuICAgICAgJi5oZWFkZXItbGVmdCB7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogJGxvYWRlci1saW5lLWhlaWdodDtcbiAgICAgICAgaGVpZ2h0OiAxMDhweDtcbiAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICB9XG4gICAgICAmLmNvbnRlbnQtdG9wIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdG9wOiAkbG9hZGVyLWxpbmUtaGVpZ2h0O1xuICAgICAgICBoZWlnaHQ6ICRsb2FkZXItd2hpdGUtaGVpZ2h0O1xuICAgICAgfVxuICAgICAgJi5jb250ZW50LWZpcnN0LWVuZCB7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogJGxvYWRlci1saW5lLWhlaWdodCoyKyRsb2FkZXItd2hpdGUtaGVpZ2h0O1xuICAgICAgICBoZWlnaHQ6ICRsb2FkZXItd2hpdGUtaGVpZ2h0O1xuICAgICAgfVxuICAgICAgJi5jb250ZW50LXNlY29uZC1lbmQge1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6ICRsb2FkZXItbGluZS1oZWlnaHQqMyskbG9hZGVyLXdoaXRlLWhlaWdodCoyO1xuICAgICAgICBoZWlnaHQ6ICRsb2FkZXItd2hpdGUtaGVpZ2h0O1xuICAgICAgfVxuICAgICAgJi5jb250ZW50LXRoaXJkLWVuZCB7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogJGxvYWRlci1saW5lLWhlaWdodCo0KyRsb2FkZXItd2hpdGUtaGVpZ2h0KjM7XG4gICAgICAgIGhlaWdodDogJGxvYWRlci13aGl0ZS1oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG48L3N0eWxlPlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBzLWFsZXJ0IGFsZXJ0XCJcbiAgICA6Y2xhc3M9XCJjbGFzc09iamVjdFwiXG4gICAgcm9sZT1cImFsZXJ0XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIHYtaWY9XCJoYXNDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2xvc2VcIlxuICAgICAgZGF0YS1kaXNtaXNzPVwiYWxlcnRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIEBjbGljay5zdG9wPVwib25DbGlja1wiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmNsb3NlPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxwIGNsYXNzPVwiYWxlcnQtdGV4dFwiPlxuICAgICAgPHNsb3QgLz5cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgY29uc3QgQUxFUlRfVFlQRV9JTkZPID0gJ0FMRVJUX1RZUEVfSU5GTyc7XG4gIGNvbnN0IEFMRVJUX1RZUEVfV0FSTklORyA9ICdBTEVSVF9UWVBFX1dBUk5JTkcnO1xuICBjb25zdCBBTEVSVF9UWVBFX0RBTkdFUiA9ICdBTEVSVF9UWVBFX0RBTkdFUic7XG4gIGNvbnN0IEFMRVJUX1RZUEVfU1VDQ0VTUyA9ICdBTEVSVF9UWVBFX1NVQ0NFU1MnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhbGVydFR5cGU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBoYXNDbG9zZToge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgY2xhc3NPYmplY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJ2FsZXJ0LWluZm8nOiB0aGlzLmFsZXJ0VHlwZSA9PT0gQUxFUlRfVFlQRV9JTkZPLFxuICAgICAgICAgICdhbGVydC13YXJuaW5nJzogdGhpcy5hbGVydFR5cGUgPT09IEFMRVJUX1RZUEVfV0FSTklORyxcbiAgICAgICAgICAnYWxlcnQtZGFuZ2VyJzogdGhpcy5hbGVydFR5cGUgPT09IEFMRVJUX1RZUEVfREFOR0VSLFxuICAgICAgICAgICdhbGVydC1zdWNjZXNzJzogdGhpcy5hbGVydFR5cGUgPT09IEFMRVJUX1RZUEVfU1VDQ0VTUyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0luZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0VHlwZSA9PT0gQUxFUlRfVFlQRV9JTkZPO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlQWxlcnQnKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0blwiXG4gICAgOmNsYXNzPVwiY2xhc3NPYmplY3RcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICA+XG4gICAgPHNsb3QgLz5cbiAgPC9idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHByaW1hcnk6IHt0eXBlOiBCb29sZWFufSxcbiAgICAgIGdob3N0OiB7dHlwZTogQm9vbGVhbn0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgY2xhc3NPYmplY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmdob3N0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdidG4tb3V0bGluZS1wcmltYXJ5JzogdGhpcy5wcmltYXJ5LFxuICAgICAgICAgICAgJ2J0bi1vdXRsaW5lLXNlY29uZGFyeSc6ICF0aGlzLnByaW1hcnksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJ2J0bi1wcmltYXJ5JzogdGhpcy5wcmltYXJ5LFxuICAgICAgICAgICdidG4tc2Vjb25kYXJ5JzogIXRoaXMucHJpbWFyeSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdjbGljaycpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1kLWNoZWNrYm94XCI+XG4gICAgPGxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDppZD1cImlkXCJcbiAgICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgICA6Y2xhc3M9XCJ7J2luZGV0ZXJtaW5hdGUnIDogaXNJbmRldGVybWluYXRlIH1cIlxuICAgICAgPlxuICAgICAgPGkgY2xhc3M9XCJtZC1jaGVja2JveC1jb250cm9sXCIgLz5cbiAgICAgIDxzbG90IG5hbWU9XCJsYWJlbFwiIC8+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGlkOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgICBtb2RlbDoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgIH0sXG4gICAgICBpc0luZGV0ZXJtaW5hdGU6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgY2hlY2tlZCh2YWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hlY2tlZCcsIHtcbiAgICAgICAgICBjaGVja2VkOiB2YWwsXG4gICAgICAgICAgaXRlbTogdGhpcy5tb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXG4gICAgaWQ9XCJwcy1tb2RhbFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgcm9sZT1cImRpYWxvZ1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiXG4gICAgICByb2xlPVwiZG9jdW1lbnRcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2xvc2VcIlxuICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5jbG9zZTwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRpb25zLm1vZGFsX3RpdGxlIH19XG4gICAgICAgICAgPC9oND5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAge3sgdHJhbnNsYXRpb25zLm1vZGFsX2NvbnRlbnQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8UFNCdXR0b25cbiAgICAgICAgICAgIEBjbGljaz1cIm9uU2F2ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1sZ1wiXG4gICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRpb25zLmJ1dHRvbl9zYXZlIH19XG4gICAgICAgICAgPC9QU0J1dHRvbj5cbiAgICAgICAgICA8UFNCdXR0b25cbiAgICAgICAgICAgIEBjbGljaz1cIm9uTGVhdmVcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4tbGdcIlxuICAgICAgICAgICAgZ2hvc3RcbiAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGlvbnMuYnV0dG9uX2xlYXZlIH19XG4gICAgICAgICAgPC9QU0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgUFNCdXR0b24gZnJvbSAnQGFwcC93aWRnZXRzL3BzLWJ1dHRvbic7XG4gIGltcG9ydCB7RXZlbnRCdXN9IGZyb20gJ0BhcHAvdXRpbHMvZXZlbnQtYnVzJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHRyYW5zbGF0aW9uczoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgRXZlbnRCdXMuJG9uKCdzaG93TW9kYWwnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd01vZGFsKCk7XG4gICAgICB9KTtcbiAgICAgIEV2ZW50QnVzLiRvbignaGlkZU1vZGFsJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBzaG93TW9kYWwoKSB7XG4gICAgICAgICQodGhpcy4kZWwpLm1vZGFsKCdzaG93Jyk7XG4gICAgICB9LFxuICAgICAgaGlkZU1vZGFsKCkge1xuICAgICAgICAkKHRoaXMuJGVsKS5tb2RhbCgnaGlkZScpO1xuICAgICAgfSxcbiAgICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnc2F2ZScpO1xuICAgICAgfSxcbiAgICAgIG9uTGVhdmUoKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2xlYXZlJyk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUFNCdXR0b24sXG4gICAgfSxcbiAgfTtcblxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbiAgQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XG5cbiAgLm1vZGFsLWhlYWRlciAuY2xvc2Uge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgIGNvbG9yOiAkZ3JheS1tZWRpdW07XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAubW9kYWwtY29udGVudCB7XG4gICAgYm9yZGVyLXJhZGl1czogMFxuICB9XG48L3N0eWxlPlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxuYXZcbiAgICBjbGFzcz1cIm10LTEgbXgtYXV0b1wiXG4gICAgdi1pZj1cImRpc3BsYXlQYWdpbmF0aW9uXCJcbiAgPlxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uXCJcbiAgICAgIDpjbGFzcz1cInsnbXVsdGknOmlzTXVsdGlQYWdpbmF0aW9ufVwiXG4gICAgPlxuICAgICAgPGxpXG4gICAgICAgIHYtaWY9XCJpc011bHRpUGFnaW5hdGlvblwiXG4gICAgICAgIGNsYXNzPVwicGFnZS1pdGVtIHByZXZpb3VzXCJcbiAgICAgID5cbiAgICAgICAgPGFcbiAgICAgICAgICB2LXNob3c9XCJhY3RpdmVMZWZ0QXJyb3dcIlxuICAgICAgICAgIGNsYXNzPVwiZmxvYXQtbGVmdCBwYWdlLWxpbmtcIlxuICAgICAgICAgIEBjbGljaz1cInByZXYoJGV2ZW50KVwiXG4gICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+UHJldmlvdXM8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgY2xhc3M9XCJwYWdlLWl0ZW1cIlxuICAgICAgICA6Y2xhc3M9XCJ7J2FjdGl2ZScgOiBjaGVja0N1cnJlbnRJbmRleChpbmRleCl9XCJcbiAgICAgICAgdi1mb3I9XCJpbmRleCBpbiBwYWdlc0NvdW50XCJcbiAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgID5cbiAgICAgICAgPGFcbiAgICAgICAgICB2LWlmPVwic2hvd0luZGV4KGluZGV4KVwiXG4gICAgICAgICAgY2xhc3M9XCJwYWdlLWxpbmtcIlxuICAgICAgICAgIDpjbGFzcz1cIntcbiAgICAgICAgICAgICdwbC0wJyA6IHNob3dGaXJzdERvdHMoaW5kZXgpLFxuICAgICAgICAgICAgJ3ByLTAnIDogc2hvd0xhc3REb3RzKGluZGV4KVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwiY2hhbmdlUGFnZShpbmRleClcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICB2LWlmPVwiaXNNdWx0aVBhZ2luYXRpb25cIlxuICAgICAgICAgICAgdi1zaG93PVwic2hvd0ZpcnN0RG90cyhpbmRleClcIlxuICAgICAgICAgID4uLi48L3NwYW4+XG4gICAgICAgICAge3sgaW5kZXggfX1cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgdi1pZj1cImlzTXVsdGlQYWdpbmF0aW9uXCJcbiAgICAgICAgICAgIHYtc2hvdz1cInNob3dMYXN0RG90cyhpbmRleClcIlxuICAgICAgICAgID4uLi48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgdi1pZj1cImlzTXVsdGlQYWdpbmF0aW9uXCJcbiAgICAgICAgY2xhc3M9XCJwYWdlLWl0ZW0gbmV4dFwiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgdi1zaG93PVwiYWN0aXZlUmlnaHRBcnJvd1wiXG4gICAgICAgICAgY2xhc3M9XCJmbG9hdC1sZWZ0IHBhZ2UtbGlua1wiXG4gICAgICAgICAgQGNsaWNrPVwibmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5OZXh0PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmF2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICBwYWdlc0NvdW50OiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgY3VycmVudEluZGV4OiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzTXVsdGlQYWdpbmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlc0NvdW50ID4gdGhpcy5tdWx0aVBhZ2VzQWN0aXZhdGlvbkxpbWl0O1xuICAgICAgfSxcbiAgICAgIGFjdGl2ZUxlZnRBcnJvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ICE9PSAxO1xuICAgICAgfSxcbiAgICAgIGFjdGl2ZVJpZ2h0QXJyb3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCAhPT0gdGhpcy5wYWdlc0NvdW50O1xuICAgICAgfSxcbiAgICAgIHBhZ2VzVG9EaXNwbGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVBhZ2VzVG9EaXNwbGF5O1xuICAgICAgfSxcbiAgICAgIGRpc3BsYXlQYWdpbmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlc0NvdW50ID4gMTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBjaGVja0N1cnJlbnRJbmRleChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPT09IGluZGV4O1xuICAgICAgfSxcbiAgICAgIHNob3dJbmRleChpbmRleCkge1xuICAgICAgICBjb25zdCBzdGFydFBhZ2luYXRpb25JbmRleCA9IGluZGV4IDwgdGhpcy5jdXJyZW50SW5kZXggKyB0aGlzLm11bHRpUGFnZXNUb0Rpc3BsYXk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdpbmF0aW9uSW5kZXggPSBpbmRleCA+IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5tdWx0aVBhZ2VzVG9EaXNwbGF5O1xuICAgICAgICBjb25zdCBpbmRleFRvRGlzcGxheSA9IHN0YXJ0UGFnaW5hdGlvbkluZGV4ICYmIGxhc3RQYWdpbmF0aW9uSW5kZXg7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGluZGV4ID09PSB0aGlzLnBhZ2VzQ291bnQ7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBpbmRleCA9PT0gMTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aVBhZ2luYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gIXRoaXMuaXNNdWx0aVBhZ2luYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4VG9EaXNwbGF5IHx8IGZpcnN0SW5kZXggfHwgbGFzdEluZGV4O1xuICAgICAgfSxcbiAgICAgIGNoYW5nZVBhZ2UocGFnZUluZGV4KSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2VDaGFuZ2VkJywgcGFnZUluZGV4KTtcbiAgICAgIH0sXG4gICAgICBzaG93Rmlyc3REb3RzKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VzVG9EaXNwbGF5ID0gdGhpcy5wYWdlc0NvdW50IC0gdGhpcy5tdWx0aVBhZ2VzVG9EaXNwbGF5O1xuXG4gICAgICAgIGlmICghdGhpcy5pc011bHRpUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlQYWdpbmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gdGhpcy5wYWdlc0NvdW50ICYmIHRoaXMuY3VycmVudEluZGV4IDw9IHBhZ2VzVG9EaXNwbGF5O1xuICAgICAgfSxcbiAgICAgIHNob3dMYXN0RG90cyhpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aVBhZ2luYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc011bHRpUGFnaW5hdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXggPT09IDEgJiYgdGhpcy5jdXJyZW50SW5kZXggPiB0aGlzLm11bHRpUGFnZXNUb0Rpc3BsYXk7XG4gICAgICB9LFxuICAgICAgcHJldigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID4gMSkge1xuICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZSh0aGlzLmN1cnJlbnRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5wYWdlc0NvdW50KSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKHRoaXMuY3VycmVudEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgbXVsdGlQYWdlc1RvRGlzcGxheTogMixcbiAgICAgIG11bHRpUGFnZXNBY3RpdmF0aW9uTGltaXQ6IDUsXG4gICAgfSksXG4gIH07XG48L3NjcmlwdD5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ0YWdzLWlucHV0IHNlYXJjaC1pbnB1dCBzZWFyY2ggZC1mbGV4IGZsZXgtd3JhcFwiXG4gICAgOmNsYXNzPVwieyAnc2VhcmNoLXdpdGgtaWNvbic6IGhhc0ljb24gfVwiXG4gICAgQGNsaWNrPVwiZm9jdXMoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwidGFncy13cmFwcGVyXCI+XG4gICAgICA8c3BhblxuICAgICAgICB2LWZvcj1cIih0YWcsIGluZGV4KSBpbiB0YWdzXCJcbiAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJ0YWdcIlxuICAgICAgPnt7IHRhZyB9fTxpXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIlxuICAgICAgICBAY2xpY2s9XCJjbG9zZShpbmRleClcIlxuICAgICAgPmNsb3NlPC9pPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8aW5wdXRcbiAgICAgIHJlZj1cInRhZ3NcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJUb0Rpc3BsYXlcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgdi1tb2RlbD1cInRhZ1wiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dFwiXG4gICAgICBAa2V5dXA9XCJvbktleVVwXCJcbiAgICAgIEBrZXlkb3duLmVudGVyPVwiYWRkKHRhZylcIlxuICAgICAgQGtleWRvd24uZGVsZXRlLnN0b3A9XCJyZW1vdmUoKVwiXG4gICAgICA6c2l6ZT1cImlucHV0U2l6ZVwiXG4gICAgPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICB0YWdzOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IChbXSksXG4gICAgICB9LFxuICAgICAgcGxhY2Vob2xkZXI6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgfSxcbiAgICAgIGhhc0ljb246IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpbnB1dFNpemUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWdzLmxlbmd0aCAmJiB0aGlzLnBsYWNlaG9sZGVyID8gdGhpcy5wbGFjZWhvbGRlci5sZW5ndGggOiAwO1xuICAgICAgfSxcbiAgICAgIHBsYWNlaG9sZGVyVG9EaXNwbGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWdzLmxlbmd0aCA/ICcnIDogdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBvbktleVVwKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd0eXBpbmcnLCB0aGlzLiRyZWZzLnRhZ3MudmFsdWUpO1xuICAgICAgfSxcbiAgICAgIGFkZCh0YWcpIHtcbiAgICAgICAgaWYgKHRhZykge1xuICAgICAgICAgIHRoaXMudGFncy5wdXNoKHRhZy50cmltKCkpO1xuICAgICAgICAgIHRoaXMudGFnID0gJyc7XG4gICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3RhZ0NoYW5nZScsIHRoaXMudGFnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnRhZ3NbaW5kZXhdO1xuICAgICAgICB0aGlzLnRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy4kZW1pdCgndGFnQ2hhbmdlJywgdGFnTmFtZSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy50YWdzLmxlbmd0aCAmJiAhdGhpcy50YWcubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgdGhpcy50YWdzLnBvcCgpO1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3RhZ0NoYW5nZScsIHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuJHJlZnMudGFncy5mb2N1cygpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGE6ICgpID0+ICh7dGFnOiBudWxsfSksXG4gIH07XG48L3NjcmlwdD5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwcy10cmVlLWl0ZW1zXCJcbiAgICA6Y2xhc3M9XCJ7Y2xhc3NOYW1lfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCB0cmVlLW5hbWVcIlxuICAgICAgOmNsYXNzPVwie2FjdGl2ZTogYWN0aXZlLCBkaXNhYmxlOiBtb2RlbC5kaXNhYmxlfVwiXG4gICAgICBAY2xpY2s9XCJjbGlja0VsZW1lbnRcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXRleHRcIlxuICAgICAgICA6Y2xhc3M9XCJbe2hpZGRlbjogaXNIaWRkZW59LCBjaGV2cm9uU3RhdHVzXVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdi1pZj1cInRyYW5zbGF0aW9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgPnt7IHRoaXMubW9kZWwub3BlbiA/IHRyYW5zbGF0aW9ucy5yZWR1Y2UgOiB0cmFuc2xhdGlvbnMuZXhwYW5kIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8UFNDaGVja2JveFxuICAgICAgICA6cmVmPVwibW9kZWwubmFtZVwiXG4gICAgICAgIDppZD1cImlkXCJcbiAgICAgICAgOm1vZGVsPVwibW9kZWxcIlxuICAgICAgICBAY2hlY2tlZD1cIm9uQ2hlY2tcIlxuICAgICAgICB2LWlmPVwiaGFzQ2hlY2tib3hcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidHJlZS1sYWJlbFwiXG4gICAgICAgIDpjbGFzcz1cInt3YXJuaW5nOiBpc1dhcm5pbmd9XCJcbiAgICAgID57eyBtb2RlbC5uYW1lIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJ0cmVlLWV4dHJhLWxhYmVsIGQtc20tbm9uZSBkLXhsLWlubGluZS1ibG9ja1wiXG4gICAgICAgIHYtaWY9XCJkaXNwbGF5RXh0cmFMYWJlbFwiXG4gICAgICA+e3sgZ2V0RXh0cmFMYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidHJlZS1leHRyYS1sYWJlbC1taW5pIGQteGwtbm9uZVwiXG4gICAgICAgIHYtaWY9XCJkaXNwbGF5RXh0cmFMYWJlbFwiXG4gICAgICA+e3sgdGhpcy5tb2RlbC5leHRyYUxhYmVsIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDx1bFxuICAgICAgdi1zaG93PVwib3BlblwiXG4gICAgICB2LWlmPVwiaXNGb2xkZXJcIlxuICAgICAgY2xhc3M9XCJ0cmVlXCJcbiAgICA+XG4gICAgICA8bGlcbiAgICAgICAgdi1mb3I9XCIoZWxlbWVudCwgaW5kZXgpIGluIG1vZGVsLmNoaWxkcmVuXCJcbiAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJ0cmVlLWl0ZW1cIlxuICAgICAgICA6Y2xhc3M9XCJ7ZGlzYWJsZTogbW9kZWwuZGlzYWJsZX1cIlxuICAgICAgPlxuICAgICAgICA8UFNUcmVlSXRlbVxuICAgICAgICAgIDpyZWY9XCJlbGVtZW50LmlkXCJcbiAgICAgICAgICA6Y2xhc3M9XCJjbGFzc05hbWVcIlxuICAgICAgICAgIDpoYXMtY2hlY2tib3g9XCJoYXNDaGVja2JveFwiXG4gICAgICAgICAgOm1vZGVsPVwiZWxlbWVudFwiXG4gICAgICAgICAgOmxhYmVsPVwiZWxlbWVudC5uYW1lXCJcbiAgICAgICAgICA6dHJhbnNsYXRpb25zPVwidHJhbnNsYXRpb25zXCJcbiAgICAgICAgICA6Y3VycmVudC1pdGVtPVwiY3VycmVudEl0ZW1cIlxuICAgICAgICAgIEBjaGVja2VkPVwib25DaGVja1wiXG4gICAgICAgICAgQHNldEN1cnJlbnRFbGVtZW50PVwic2V0Q3VycmVudEVsZW1lbnRcIlxuICAgICAgICAvPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU0NoZWNrYm94IGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1jaGVja2JveCc7XG4gIGltcG9ydCB7RXZlbnRCdXN9IGZyb20gJ0BhcHAvdXRpbHMvZXZlbnQtYnVzJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1BTVHJlZUl0ZW0nLFxuICAgIHByb3BzOiB7XG4gICAgICBtb2RlbDoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgICAgaGFzQ2hlY2tib3g6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHRyYW5zbGF0aW9uczoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgIH0sXG4gICAgICBjdXJyZW50SXRlbToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5pZDtcbiAgICAgIH0sXG4gICAgICBpc0ZvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuY2hpbGRyZW4gJiYgdGhpcy5tb2RlbC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgZGlzcGxheUV4dHJhTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9sZGVyICYmIHRoaXMubW9kZWwuZXh0cmFMYWJlbDtcbiAgICAgIH0sXG4gICAgICBnZXRFeHRyYUxhYmVsKCkge1xuICAgICAgICBsZXQgZXh0cmFMYWJlbCA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmV4dHJhTGFiZWwgJiYgdGhpcy5tb2RlbC5leHRyYUxhYmVsID09PSAxKSB7XG4gICAgICAgICAgZXh0cmFMYWJlbCA9IHRoaXMudHJhbnNsYXRpb25zLmV4dHJhX3Npbmd1bGFyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwuZXh0cmFMYWJlbCkge1xuICAgICAgICAgIGV4dHJhTGFiZWwgPSB0aGlzLnRyYW5zbGF0aW9ucy5leHRyYS5yZXBsYWNlKCclZCcsIHRoaXMubW9kZWwuZXh0cmFMYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXh0cmFMYWJlbDtcbiAgICAgIH0sXG4gICAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRm9sZGVyO1xuICAgICAgfSxcbiAgICAgIGNoZXZyb25TdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW4gPyAnb3BlbicgOiAnY2xvc2VkJztcbiAgICAgIH0sXG4gICAgICBpc1dhcm5pbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0ZvbGRlciAmJiB0aGlzLm1vZGVsLndhcm5pbmc7XG4gICAgICB9LFxuICAgICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5mdWxsX25hbWUgPT09IHRoaXMuY3VycmVudEl0ZW07XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgc2V0Q3VycmVudEVsZW1lbnQoZWwpIHtcbiAgICAgICAgaWYgKHRoaXMuJHJlZnNbZWxdKSB7XG4gICAgICAgICAgdGhpcy5vcGVuVHJlZUl0ZW1BY3Rpb24oKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGFyZW50RWxlbWVudCh0aGlzLiRwYXJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcGFyZW50RWxlbWVudChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5jbGlja0VsZW1lbnQpIHtcbiAgICAgICAgICBwYXJlbnQuY2xpY2tFbGVtZW50KCk7XG4gICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KHBhcmVudC4kcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsaWNrRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm1vZGVsLmRpc2FibGUgPyB0aGlzLm9wZW5UcmVlSXRlbUFjdGlvbigpIDogZmFsc2U7XG4gICAgICB9LFxuICAgICAgb3BlblRyZWVJdGVtQWN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRFbGVtZW50KHRoaXMubW9kZWwuZnVsbF9uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2xkZXIpIHtcbiAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEV2ZW50QnVzLiRlbWl0KCdsYXN0VHJlZUl0ZW1DbGljaycsIHtcbiAgICAgICAgICAgIGl0ZW06IHRoaXMubW9kZWwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkNoZWNrKG9iaikge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGVja2VkJywgb2JqKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgRXZlbnRCdXMuJG9uKCd0b2dnbGVDaGVja2JveCcsICh0YWcpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tib3ggPSB0aGlzLiRyZWZzW3RhZ107XG5cbiAgICAgICAgaWYgKGNoZWNrYm94KSB7XG4gICAgICAgICAgY2hlY2tib3guJGRhdGEuY2hlY2tlZCA9ICFjaGVja2JveC4kZGF0YS5jaGVja2VkO1xuICAgICAgICB9XG4gICAgICB9KS4kb24oJ2V4cGFuZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgIH0pLiRvbigncmVkdWNlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgIH0pLiRvbignc2V0Q3VycmVudEVsZW1lbnQnLCAoZWwpID0+IHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50RWxlbWVudChlbCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0Q3VycmVudEVsZW1lbnQodGhpcy5jdXJyZW50SXRlbSk7XG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBQU0NoZWNrYm94LFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgY3VycmVudDogZmFsc2UsXG4gICAgfSksXG4gIH07XG48L3NjcmlwdD5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicHMtdHJlZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHRyZWUtaGVhZGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi10ZXh0IHRleHQtdXBwZXJjYXNlIHBvaW50ZXJcIlxuICAgICAgICBAY2xpY2s9XCJleHBhbmRcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvaT5cbiAgICAgICAgPHNwYW4gdi1pZj1cInRyYW5zbGF0aW9uc1wiPnt7IHRyYW5zbGF0aW9ucy5leHBhbmQgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXRleHQgZmxvYXQtcmlnaHQgdGV4dC11cHBlcmNhc2UgcG9pbnRlclwiXG4gICAgICAgIEBjbGljaz1cInJlZHVjZVwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5rZXlib2FyZF9hcnJvd191cDwvaT5cbiAgICAgICAgPHNwYW4gdi1pZj1cInRyYW5zbGF0aW9uc1wiPnt7IHRyYW5zbGF0aW9ucy5yZWR1Y2UgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8dWxcbiAgICAgIGNsYXNzPVwidHJlZVwiXG4gICAgICA6Y2xhc3M9XCJjbGFzc05hbWVcIlxuICAgID5cbiAgICAgIDxsaVxuICAgICAgICB2LWZvcj1cIihlbGVtZW50LCBpbmRleCkgaW4gbW9kZWxcIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8UFNUcmVlSXRlbVxuICAgICAgICAgIHJlZj1cIml0ZW1cIlxuICAgICAgICAgIDpoYXMtY2hlY2tib3g9XCJoYXNDaGVja2JveFwiXG4gICAgICAgICAgOm1vZGVsPVwiZWxlbWVudFwiXG4gICAgICAgICAgOmxhYmVsPVwiZWxlbWVudC5uYW1lXCJcbiAgICAgICAgICA6dHJhbnNsYXRpb25zPVwidHJhbnNsYXRpb25zXCJcbiAgICAgICAgICA6Y3VycmVudC1pdGVtPVwiY3VycmVudEl0ZW1cIlxuICAgICAgICAgIEBjaGVja2VkPVwib25DaGVja1wiXG4gICAgICAgICAgQHNldEN1cnJlbnRFbGVtZW50PVwic2V0Q3VycmVudEVsZW1lbnRcIlxuICAgICAgICAvPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCB7RXZlbnRCdXN9IGZyb20gJ0BhcHAvdXRpbHMvZXZlbnQtYnVzJztcbiAgaW1wb3J0IFBTVHJlZUl0ZW0gZnJvbSAnLi9wcy10cmVlLWl0ZW0nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnUFNUcmVlJyxcbiAgICBwcm9wczoge1xuICAgICAgbW9kZWw6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IChbXSksXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgICAgY3VycmVudEl0ZW06IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgICBoYXNDaGVja2JveDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB0cmFuc2xhdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgb25DaGVjayhvYmopIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hlY2tlZCcsIG9iaik7XG4gICAgICB9LFxuICAgICAgZXhwYW5kKCkge1xuICAgICAgICBFdmVudEJ1cy4kZW1pdCgnZXhwYW5kJyk7XG4gICAgICB9LFxuICAgICAgcmVkdWNlKCkge1xuICAgICAgICBFdmVudEJ1cy4kZW1pdCgncmVkdWNlJyk7XG4gICAgICB9LFxuICAgICAgc2V0Q3VycmVudEVsZW1lbnQoaWQpIHtcbiAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ3NldEN1cnJlbnRFbGVtZW50JywgaWQpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTVHJlZUl0ZW0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlc1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmtleXM7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QudmFsdWVzO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmZsZXh7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWlzc2luZ3tjb2xvcjojZjU0YzNlfS50cmFuc2xhdGlvbnMtc3VtbWFyeXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjFyZW19XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL2FwcC52dWVcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9wcmVzdGFraXQvc2Nzcy9fdmFyaWFibGVzLnNjc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBaUtBLE1BQ0UsWUFBYSxDQUNiLGtCQUFtQixDQUNwQixTQUdDLGFDaklXLENEa0laLHNCQUdDLGVDZ0d3QixDRC9GeEIsY0FBZVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcXG5cXG4uZmxleCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLm1pc3Npbmcge1xcbiAgY29sb3I6ICRkYW5nZXI7XFxufVxcblxcbi50cmFuc2xhdGlvbnMtc3VtbWFyeSB7XFxuICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbn1cXG5cIixcIi8qIHN0eWxlbGludC1kaXNhYmxlICovXFxuXFxuLy8gQ29sb3Igc3lzdGVtXFxuJHdoaXRlOiAjZmZmO1xcbiRncmF5LWRpc2FibGVkOiAjZWFlYmVjO1xcbiRncmF5LTEwMDogI2ZhZmJmYztcXG4kZ3JheS0yMDA6ICNmYWZiZmM7XFxuJGdyYXktMjUwOiAjZmFmYmZjO1xcbiRncmF5LTMwMDogI2JiY2RkMjtcXG4kZ3JheS00MDA6ICNiYmNkZDI7XFxuJGdyYXktNDUwOiAjYjNjN2NkO1xcbiRncmF5LTUwMDogIzZjODY4ZTtcXG4kZ3JheS01NTA6ICM3MDgwOTA7XFxuJGdyYXktNjAwOiAjNmM4NjhlO1xcbiRncmF5LTcwMDogIzM2M2E0MTtcXG4kZ3JheS03NTA6ICMzNjNhNDE7XFxuJGdyYXktODAwOiAjMzYzYTQxO1xcbiRncmF5LTkwMDogIzI4MmIzMDtcXG4kYmxhY2s6ICMwMDA7XFxuXFxuLy8gUFMgVmFyc1xcbiRleHRyYS1saWdodC1ncmF5OiAkZ3JheS0xMDA7XFxuJGxpZ2h0LWdyYXk6ICRncmF5LTMwMDtcXG4kbWVkaXVtLWdyYXk6ICRncmF5LTUwMDtcXG4kZGFyay1ncmF5OiAkZ3JheS03MDA7XFxuJGV4dHJhLWRhcmstZ3JheTogJGdyYXktOTAwO1xcbiRncmF5LWxpZ2h0OiAkbGlnaHQtZ3JheTtcXG4kZ3JheS1tZWRpdW06ICRtZWRpdW0tZ3JheTtcXG4kZ3JheS1kYXJrOiAkZGFyay1ncmF5O1xcbiRncmF5LXNvZnQ6ICRncmF5LTIwMDtcXG4kYmFja2dyb3VuZC1jb2xvcjogI2VmZjFmMjtcXG4kcHJpbWFyeS1saWdodGVuOiAjZjRmY2ZkO1xcbiRsb2NhbC1mb250OiBmYWxzZSAhZGVmYXVsdDtcXG5cXG4kYmx1ZTogIzI1YjlkNztcXG4kaW5kaWdvOiAjNjYxMGYyICFkZWZhdWx0O1xcbiRwdXJwbGU6ICM2ZjQyYzEgIWRlZmF1bHQ7XFxuJHBpbms6ICNlODNlOGMgIWRlZmF1bHQ7XFxuJHJlZDogI2Y1NGMzZTtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR5ZWxsb3c6ICNmYWIwMDA7XFxuJGdyZWVuOiAjNzBiNTgwO1xcbiRvcmFuZ2U6ICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHRlYWw6ICMyMGM5OTcgIWRlZmF1bHQ7XFxuJGN5YW46ICRibHVlO1xcbiRsaWdodC1ibHVlOiAjZjRmY2ZkO1xcblxcbi8vIG1haW4gYnV0dG9uIGJhY2tncm91bmQgY29sb3JzXFxuJHByaW1hcnktaG92ZXI6ICM3Y2Q1ZTc7XFxuJHByaW1hcnktYWN0aXZlOiAjMjFhNmMxO1xcbiRwcmltYXJ5LWRpc2FibGVkOiAjZDNmMWY3O1xcbiRzZWNvbmRhcnktaG92ZXI6ICNiN2NlZDM7XFxuJHNlY29uZGFyeS1hY3RpdmU6ICM4ODlkYTI7XFxuJGRhbmdlci1ob3ZlcjogI2ZkZTFlMTtcXG4kbm90aWNlOiAjZGZmNWY5O1xcblxcbiRwcmltYXJ5OiAkYmx1ZSAhZGVmYXVsdDtcXG4kc2Vjb25kYXJ5OiAkbWVkaXVtLWdyYXk7XFxuJHN1Y2Nlc3M6ICRncmVlbiAhZGVmYXVsdDtcXG4kaW5mbzogJGN5YW4gIWRlZmF1bHQ7XFxuJHdhcm5pbmc6ICR5ZWxsb3cgIWRlZmF1bHQ7XFxuJGRhbmdlcjogJHJlZCAhZGVmYXVsdDtcXG4kbGlnaHQ6ICRncmF5LTEwMCAhZGVmYXVsdDtcXG4kZGFyazogJGdyYXktODAwICFkZWZhdWx0O1xcblxcbiR0b2FzdC1zdWNjZXNzOiAjNTNkNTcyICFkZWZhdWx0O1xcbiR0b2FzdC13YXJuaW5nOiAjZmFiMDAwICFkZWZhdWx0O1xcblxcbiRicmFuZC1wcmltYXJ5OiAkcHJpbWFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5ICFkZWZhdWx0O1xcbiRicmFuZC1pbmZvOiAjNWJjMGRlICFkZWZhdWx0O1xcbiRicmFuZC13YXJuaW5nOiAjZjBhZDRlICFkZWZhdWx0O1xcbiRicmFuZC1zdWNjZXNzOiAkc3VjY2VzcyAhZGVmYXVsdDtcXG4kYnJhbmQtZGFuZ2VyOiAkZGFuZ2VyICFkZWZhdWx0O1xcblxcbiRidG4tcHJpbWFyeS1iZzogJHByaW1hcnktaG92ZXI7XFxuJGJ0bi1zZWNvbmRhcnktYm9yZGVyOiAjMDAwO1xcbiRidG4taW5mby1iZzogJGJyYW5kLWluZm8gIWRlZmF1bHQ7XFxuJGJ0bi1zdWNjZXNzLWJnOiAkYnJhbmQtc3VjY2VzcyAhZGVmYXVsdDtcXG4kYnRuLXdhcm5pbmctYmc6ICRicmFuZC13YXJuaW5nICFkZWZhdWx0O1xcbiRidG4tZGFuZ2VyLWJnOiAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xcblxcbiR0aGVtZS1jb2xvcnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAkd2FybmluZyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAkZGFuZ2VyLFxcbiAgXFxcImxpZ2h0XFxcIjogJGxpZ2h0LFxcbiAgXFxcImRhcmtcXFwiOiAkZGFya1xcbik7XFxuXFxuJGFsZXJ0cy1iYWNrZ3JvdW5kLWNvbG9yczogKFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAjY2JmMmQ0LFxcbiAgXFxcImluZm9cXFwiOiAjYmVlYWYzLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmZmYmQzLFxcbiAgXFxcImRhbmdlclxcXCI6ICNmYmM2YzNcXG4pO1xcblxcbiRhbGVydHMtc2Vjb25kLWNvbG9yczogKFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAjNTNkNTcyLFxcbiAgXFxcImluZm9cXFwiOiAjMjViOWQ3LFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICNmNDQzMzZcXG4pO1xcblxcbiR0aGVtZS1hbGVydHMtaWNvbnM6IChcXG4gIHN1Y2Nlc3M6IFxcXCJcXFxcRTVDQVxcXCIsXFxuICBpbmZvOiBcXFwiXFxcXGU4OGVcXFwiLFxcbiAgd2FybmluZzogXFxcIlxcXFxFMDAyXFxcIixcXG4gIGRhbmdlcjogXFxcIlxcXFxlMDAwXFxcIlxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1pY29uczogKFxcbiAgXFxcInByaW1hcnlcXFwiOiAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAkc2Vjb25kYXJ5LFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAkc3VjY2VzcyxcXG4gIFxcXCJpbmZvXFxcIjogJGluZm8sXFxuICBcXFwid2FybmluZ1xcXCI6ICNmYWIwMDAsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1ob3ZlcjogKFxcbiAgcHJpbWFyeTogJHByaW1hcnktaG92ZXIsXFxuICBzZWNvbmRhcnk6ICRzZWNvbmRhcnktaG92ZXIsXFxuICBzdWNjZXNzOiAjOWJjYmE2LFxcbiAgaW5mbzogJHByaW1hcnktaG92ZXIsXFxuICB3YXJuaW5nOiAjZTZiMDQ1LFxcbiAgZGFuZ2VyOiAjZTc2ZDdhLFxcbiAgbGlnaHQ6ICRncmF5LTgwMCxcXG4gIGRhcms6ICRncmF5LTEwMCxcXG4gIGRlZmF1bHQ6ICRsaWdodC1ibHVlXFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWFjdGl2ZTogKFxcbiAgcHJpbWFyeTogJHByaW1hcnktYWN0aXZlLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWFjdGl2ZSxcXG4gIHN1Y2Nlc3M6ICM1YTkxNjYsXFxuICBpbmZvOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiaW5mb1xcXCIpLCAxMCUpLFxcbiAgd2FybmluZzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcIndhcm5pbmdcXFwiKSwgMTAlKSxcXG4gIGRhbmdlcjogI2MzMzYyYixcXG4gIGxpZ2h0OiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwibGlnaHRcXFwiKSwgMTAlKSxcXG4gIGRhcms6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJkYXJrXFxcIiksIDEwJSksXFxuICBkZWZhdWx0OiAkcHJpbWFyeVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1iYWNrZ3JvdW5kOiAoXFxuICBwcmltYXJ5OiAjZGZmNWY5LFxcbiAgc2Vjb25kYXJ5OiAkYmxhY2ssXFxuICBzdWNjZXNzOiAjZDZmMGQ4LFxcbiAgaW5mbzogI2RmZjVmOSxcXG4gIHdhcm5pbmc6ICNmZmZiZDMsXFxuICBkYW5nZXI6ICNmZGUxZTEsXFxuICBsaWdodDogJGdyYXktMjAwLFxcbiAgZGFyazogJGdyYXktNzAwXFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLXNoYWRvdzogKFxcbiAgcHJpbWFyeTogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKSxcXG4gIGluZm86IHRoZW1lLWNvbG9yKFxcXCJpbmZvXFxcIiksXFxuICB3YXJuaW5nOiB0aGVtZS1jb2xvcihcXFwid2FybmluZ1xcXCIpLFxcbiAgZGFuZ2VyOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIiksXFxuICBsaWdodDogdGhlbWUtY29sb3IoXFxcImxpZ2h0XFxcIiksXFxuICBkYXJrOiB0aGVtZS1jb2xvcihcXFwiZGFya1xcXCIpXFxuKTtcXG5cXG4vLyBPcHRpb25zXFxuJGVuYWJsZS1jYXJldDogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXJvdW5kZWQ6IHRydWU7XFxuJGVuYWJsZS1zaGFkb3dzOiB0cnVlO1xcbiRlbmFibGUtZ3JhZGllbnRzOiBmYWxzZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXRyYW5zaXRpb25zOiB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtZ3JpZC1jbGFzc2VzOiB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcHJpbnQtc3R5bGVzOiB0cnVlICFkZWZhdWx0O1xcblxcbi8vIFNwYWNpbmdcXG4kc3BhY2VyOiAxLjg3NXJlbTtcXG5cXG4kc3BhY2VyczogKFxcbiAgMDogMCxcXG4gIDE6IChcXG4gICAgJHNwYWNlciAvIDZcXG4gICksXFxuICAyOiAoXFxuICAgICRzcGFjZXIgLyAzXFxuICApLFxcbiAgMzogKFxcbiAgICAkc3BhY2VyIC8gMlxcbiAgKSxcXG4gIDQ6ICRzcGFjZXIsXFxuICA1OiAoXFxuICAgICRzcGFjZXIgKiAyXFxuICApXFxuKTtcXG5cXG4vLyBCb2R5XFxuJGJvZHktYmc6ICR3aGl0ZSAhZGVmYXVsdDtcXG4kYm9keS1jb2xvcjogJGRhcmstZ3JheTtcXG5cXG4vLyBMaW5rc1xcbiRsaW5rLWhvdmVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbiRsaW5rLWhvdmVyLWRlY29yYXRpb246IHVuZGVybGluZTtcXG5cXG4vLyBQYXJhZ3JhcGhzXFxuJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tOiAxcmVtO1xcblxcbi8vIEdyaWQgYnJlYWtwb2ludHNcXG4kZ3JpZC1icmVha3BvaW50czogKFxcbiAgeHM6IDAsXFxuICBzbTogNTQ0cHgsXFxuICBtZDogNzY4cHgsXFxuICBsZzogMTAyNHB4LFxcbiAgeGw6IDEzMDBweCxcXG4gIHh4bDogMTYwMHB4IC8vIFBTIGN1c3RvbVxcbik7XFxuQGluY2x1ZGUgX2Fzc2VydC1hc2NlbmRpbmcoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCIkZ3JpZC1icmVha3BvaW50c1xcXCIpO1xcbkBpbmNsdWRlIF9hc3NlcnQtc3RhcnRzLWF0LXplcm8oJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbi8vIEdyaWQgY29udGFpbmVyc1xcbiRjb250YWluZXItbWF4LXdpZHRoczogKFxcbiAgc206IDU3NnB4LFxcbiAgbWQ6IDcyMHB4LFxcbiAgbGc6IDk3MnB4LFxcbiAgeGw6IDEyNDBweFxcbik7XFxuQGluY2x1ZGUgX2Fzc2VydC1hc2NlbmRpbmcoJGNvbnRhaW5lci1tYXgtd2lkdGhzLCBcXFwiJGNvbnRhaW5lci1tYXgtd2lkdGhzXFxcIik7XFxuXFxuLy8gR3JpZCBjb2x1bW5zXFxuLy8kZ3JpZC1jb2x1bW5zOiAgICAgICAgICAgICAgICAxMiAhZGVmYXVsdDtcXG4kZ3JpZC1ndXR0ZXItd2lkdGg6IDEuODc1cmVtICFkZWZhdWx0O1xcblxcbi8vIENvbXBvbmVudHNcXG4vLyRsaW5lLWhlaWdodC1sZzogICAgICAgICAgICAgIDEuNSAhZGVmYXVsdDtcXG4vLyRsaW5lLWhlaWdodC1zbTogICAgICAgICAgICAgIDEuNSAhZGVmYXVsdDtcXG5cXG4vLyRib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgIDFweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kYm9yZGVyLXJhZGl1czogNHB4ICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAgICAgLjNyZW0gIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjb21wb25lbnQtYWN0aXZlLWNvbG9yOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjb21wb25lbnQtYWN0aXZlLWJnOiAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuXFxuJGNhcmV0LXdpZHRoOiAuMjVyZW07XFxuXFxuLy8kdHJhbnNpdGlvbi1iYXNlOiAgICAgICAgICAgICBhbGwgLjJzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcbi8vJHRyYW5zaXRpb24tZmFkZTogICAgICAgICAgICAgb3BhY2l0eSAuMTVzIGxpbmVhciAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWNvbGxhcHNlOiAgICAgICAgIGhlaWdodCAuMzVzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gRm9udHNcXG4kZm9udC1mYW1pbHktc2Fucy1zZXJpZjogXFxcIk9wZW4gU2Fuc1xcXCIsIGhlbHZldGljYSwgYXJpYWwsIHNhbnMtc2VyaWY7XFxuLy8kZm9udC1mYW1pbHktbW9ub3NwYWNlOiAgICAgICBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFxcXCJMaWJlcmF0aW9uIE1vbm9cXFwiLCBcXFwiQ291cmllciBOZXdcXFwiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XFxuLy8kZm9udC1mYW1pbHktYmFzZTogICAgICAgICAgICAkZm9udC1mYW1pbHktc2Fucy1zZXJpZiAhZGVmYXVsdDtcXG5cXG4kZm9udC1zaXplLWJhc2U6IC44NzVyZW07XFxuJGZvbnQtc2l6ZS1sZzogMXJlbTtcXG4kZm9udC1zaXplLXNtOiAuNzVyZW07XFxuJGZvbnQtc2l6ZS14czogLjYyNXJlbTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kZm9udC13ZWlnaHQtbGlnaHQ6ICAgICAgICAgICAzMDA7XFxuLy8kZm9udC13ZWlnaHQtbm9ybWFsOiAgICAgICAgICA0MDA7XFxuJGZvbnQtd2VpZ2h0LXNlbWlib2xkOiA2MDA7XFxuJGZvbnQtd2VpZ2h0LWJvbGQ6IDcwMDtcXG5cXG4kaDEtZm9udC1zaXplOiAxLjVyZW07XFxuJGgyLWZvbnQtc2l6ZTogMS4yNXJlbTtcXG4kaDMtZm9udC1zaXplOiAxcmVtO1xcbiRoNC1mb250LXNpemU6IC44NzVyZW07XFxuJGg1LWZvbnQtc2l6ZTogLjc1cmVtO1xcbiRoNi1mb250LXNpemU6IC42MjVyZW07XFxuXFxuLy8kaGVhZGluZ3MtbWFyZ2luLWJvdHRvbTogICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbiRoZWFkaW5ncy1mb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY7XFxuJGhlYWRpbmdzLWZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZDtcXG4kaGVhZGluZ3MtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbi8vJGRpc3BsYXkxLXNpemU6ICAgICAgICAgICAgICAgNnJlbSAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5Mi1zaXplOiAgICAgICAgICAgICAgIDUuNXJlbSAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5My1zaXplOiAgICAgICAgICAgICAgIDQuNXJlbSAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5NC1zaXplOiAgICAgICAgICAgICAgIDMuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRkaXNwbGF5MS13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5Mi13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5My13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5NC13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4vLyRkaXNwbGF5LWxpbmUtaGVpZ2h0OiAgICAgICAgICRoZWFkaW5ncy1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG5cXG4vLyRsZWFkLWZvbnQtc2l6ZTogICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG4vLyRsZWFkLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG5cXG4vLyRzbWFsbC1mb250LXNpemU6ICAgICAgICAgICAgIDgwJSAhZGVmYXVsdDtcXG5cXG4kdGV4dC1tdXRlZDogJG1lZGl1bS1ncmF5O1xcblxcbi8vJGJsb2NrcXVvdGUtc21hbGwtY29sb3I6ICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcbi8vJGJsb2NrcXVvdGUtZm9udC1zaXplOiAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcblxcbiRoci1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGhyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLXBhZGRpbmc6ICAgICAgICAgICAgICAgIC4yZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZHQtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG5cXG4vLyRrYmQtYm94LXNoYWRvdzogICAgICAgICAgICAgIGluc2V0IDAgLS4xcmVtIDAgcmdiYSgkYmxhY2ssIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmVzdGVkLWtiZC1mb250LXdlaWdodDogICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWlubGluZS1wYWRkaW5nOiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG1hcmstYmc6ICAgICAgICAgICAgICAgICAgICAgI2ZjZjhlMyAhZGVmYXVsdDtcXG5cXG4vLyRoci1tYXJnaW4teTogICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuLy8gVGFibGVzXFxuJHRhYmxlLWNlbGwtcGFkZGluZzogLjRyZW07XFxuJHRhYmxlLWNlbGwtcGFkZGluZy1zbTogLjI1cmVtO1xcblxcbi8vJHRhYmxlLWJnOiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XFxuJHRhYmxlLWFjY2VudC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhvdmVyLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbiR0YWJsZS1hY3RpdmUtYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuXFxuLy8kdGFibGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJHRhYmxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiR0YWJsZS1oZWFkLWJnOiAkYmFja2dyb3VuZC1jb2xvcjtcXG4kdGFibGUtaGVhZC1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuJHRhYmxlLWRhcmstYmc6ICRib2R5LWNvbG9yO1xcbiR0YWJsZS1kYXJrLWFjY2VudC1iZzogJGV4dHJhLWRhcmstZ3JheTtcXG4kdGFibGUtZGFyay1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtZGFyay1ib3JkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4vLyR0YWJsZS1kYXJrLWNvbG9yOiAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcblxcbi8vIEJ1dHRvbnNcXG4kaW5wdXQtYnRuLXBhZGRpbmcteTogLjM3NXJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteDogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQ6ICAgICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJ0bi1mb2N1cy13aWR0aDogICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYnRuLWZvY3VzLWNvbG9yOiAgICAgICByZ2JhKCRjb21wb25lbnQtYWN0aXZlLWJnLCAuMjUpICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93OiAgMCAwIDAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAkaW5wdXQtYnRuLWZvY3VzLWNvbG9yICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tcGFkZGluZy15LXNtOiAuMzEzcmVtO1xcbiRpbnB1dC1idG4tcGFkZGluZy14LXNtOiAuNjI1cmVtO1xcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbTogICAgJGxpbmUtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tcGFkZGluZy15LWxnOiAuNDM4cmVtO1xcbiRpbnB1dC1idG4tcGFkZGluZy14LWxnOiAuODM4cmVtO1xcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZzogICAgJGxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJ0bi1ib3JkZXItd2lkdGg6ICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGJ0bi1wYWRkaW5nLXk6IC41cmVtICFkZWZhdWx0O1xcbiRidG4tcGFkZGluZy14OiAxcmVtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodDogICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLXBhZGRpbmcteC1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJvcmRlci13aWR0aDogICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4kYnRuLWZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtc2VtaWJvbGQ7XFxuJGJ0bi1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1mb2N1cy13aWR0aDogICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kYnRuLWZvY3VzLWJveC1zaGFkb3c6IG5vbmU7XFxuLy8kYnRuLWRpc2FibGVkLW9wYWNpdHk6ICAgICAgICAuNjUgIWRlZmF1bHQ7XFxuJGJ0bi1hY3RpdmUtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRidG4tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4vLyRidG4tYmxvY2stc3BhY2luZy15OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbiRidG4tYm9yZGVyLXJhZGl1czogNHB4O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWJvcmRlci1yYWRpdXMtc206ICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tdHJhbnNpdGlvbjogICAgICAgICAgICAgIGNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG5cXG4vLyBGb3Jtc1xcbiRpbnB1dC1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LXBhZGRpbmcteDogLjQzNzVyZW07XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LXBhZGRpbmcteS1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGlucHV0LXBhZGRpbmcteC1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRpbnB1dC1kaXNhYmxlZC1iZzogI2VjZWVlZjtcXG5cXG4kaW5wdXQtY29sb3I6ICRib2R5LWNvbG9yO1xcbiRpbnB1dC1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGlucHV0LWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRpbnB1dC1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vJGlucHV0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGlucHV0LWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGlucHV0LWJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLXNtICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWZvY3VzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbi8vJGlucHV0LWZvY3VzLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRpbnB1dC1mb2N1cy13aWR0aDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcblxcbiRpbnB1dC1wbGFjZWhvbGRlci1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vJGlucHV0LWhlaWdodC1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICRpbnB1dC1ib3JkZXItd2lkdGggKiAyICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lcjogICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0KSArICgkaW5wdXQtYnRuLXBhZGRpbmcteSAqIDIpICFkZWZhdWx0O1xcbiRpbnB1dC1oZWlnaHQ6IDIuMTg4cmVtO1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1zbTogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLXNtICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gKiAyKSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgICAgICBjYWxjKCN7JGlucHV0LWhlaWdodC1pbm5lci1zbX0gKyAjeyRpbnB1dC1oZWlnaHQtYm9yZGVyfSkgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyLWxnOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtbGcgKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAqIDIpICFkZWZhdWx0O1xcbiRpbnB1dC1oZWlnaHQtbGc6IDIuMTg4cmVtO1xcblxcbi8vJGlucHV0LXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS10ZXh0LW1hcmdpbi10b3A6ICAgICAgICAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tY2hlY2staW5wdXQtZ3V0dGVyOiAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbnB1dC1tYXJnaW4teTogICAgICAgICAgICAgLjNyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbnB1dC1tYXJnaW4teDogICAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tY2hlY2staW5saW5lLW1hcmdpbi14OiAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlubGluZS1pbnB1dC1tYXJnaW4teDogICAgICAuMzEyNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWdyb3VwLWFkZG9uLWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kaW5wdXQtZ3JvdXAtYWRkb24tYmc6ICRleHRyYS1saWdodC1ncmF5O1xcbi8vJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtZ3V0dGVyOiAgICAgICAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLXNwYWNlci14OiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLXNpemU6ICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYmc6ICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnLXNpemU6ICAgICAgNTAlIDUwJSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYm94LXNoYWRvdzogICBpbnNldCAwIC4yNXJlbSAuMjVyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZGlzYWJsZWQtYmc6ICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1sYWJlbC1kaXNhYmxlZC1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJnOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtZGlzYWJsZWQtYmc6ICByZ2JhKHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksIC41KSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1ib3gtc2hhZG93OiAgIG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWZvY3VzLWJveC1zaGFkb3c6ICAgICAwIDAgMCAxcHggJGJvZHktYmcsICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWNvbG9yOiAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYmc6ICAgICAgICAgICAgbGlnaHRlbigkY29tcG9uZW50LWFjdGl2ZS1iZywgMzUlKSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJveC1zaGFkb3c6ICAgIG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24tY2hlY2tlZDogICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9JyBkPSdNNi41NjQuNzVsLTMuNTkgMy42MTItMS41MzgtMS41NUwwIDQuMjYgMi45NzQgNy4yNSA4IDIuMTkzeicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtYmc6ICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1jb2xvcjogJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1pbmRldGVybWluYXRlOiAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDQnJTNFJTNDcGF0aCBzdHJva2U9JyN7JGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1jb2xvcn0nIGQ9J00wIDJoNCcvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtYm94LXNoYWRvdzogbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tcmFkaW8taW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIDUwJSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tcmFkaW8taW5kaWNhdG9yLWljb24tY2hlY2tlZDogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PSctNCAtNCA4IDgnJTNFJTNDY2lyY2xlIHI9JzMnIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tc2VsZWN0LXBhZGRpbmcteTogICAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodDogICAgICAgICAgICAgICRpbnB1dC1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItcGFkZGluZzogICAxcmVtICFkZWZhdWx0OyAvLyBFeHRyYSBwYWRkaW5nIHRvIGFjY291bnQgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYmFja2dyb3VuZC1pbWFnZSBiYXNlZCBpbmRpY2F0b3JcXG4vLyRjdXN0b20tc2VsZWN0LWxpbmUtaGVpZ2h0OiAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4vLyRjdXN0b20tc2VsZWN0LWJnOiAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1kaXNhYmxlZC1iZzogJGlucHV0LWRpc2FibGVkLWJnO1xcbiRjdXN0b20tc2VsZWN0LWJnLXNpemU6IDhweCAxMHB4ICFkZWZhdWx0OyAvLyBJbiBwaXhlbHMgYmVjYXVzZSBpbWFnZSBkaW1lbnNpb25zXFxuJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yOiAkaW5wdXQtY29sb3I7XFxuLy8kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3I6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNSclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yfScgZD0nTTIgMEwwIDJoNHptMCA1TDAgM2g0eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci13aWR0aDogICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLWNvbG9yOiAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRjdXN0b20tc2VsZWN0LWZvY3VzLWJvcmRlci1jb2xvcjogJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjtcXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3gtc2hhZG93OiAkaW5wdXQtZm9jdXMtYm94LXNoYWRvdztcXG5cXG4vLyRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1zbTogICAgICAgIDc1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1zbTogICAgICAgICAgICRpbnB1dC1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtbGc6ICAgICAgICAxMjUlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LWxnOiAgICAgICAgICAgJGlucHV0LWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tZmlsZS1oZWlnaHQ6ICAgICAgICAgICAgICAgICRpbnB1dC1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtZm9jdXMtYm9yZGVyLWNvbG9yOiAgICAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1mb2N1cy1ib3gtc2hhZG93OiAkaW5wdXQtZm9jdXMtYm94LXNoYWRvdztcXG5cXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXk6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLXBhZGRpbmcteDogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXggIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgJGlucHV0LWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm94LXNoYWRvdzogICAgICAgICAgICAkaW5wdXQtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1idXR0b24tY29sb3I6ICAgICAgICAgICRjdXN0b20tZmlsZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1idXR0b24tYmc6ICAgICAgICAgICAgICRpbnB1dC1ncm91cC1hZGRvbi1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS10ZXh0OiAoXFxuLy8gICAgICAgIGVuOiBcXFwiQnJvd3NlXFxcIlxcbi8vKSAhZGVmYXVsdDtcXG5cXG4kY3Vyc29yLWRpc2FibGVkOiBub3QtYWxsb3dlZDsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRm9ybSB2YWxpZGF0aW9uXFxuLy8kZm9ybS1mZWVkYmFjay1tYXJnaW4tdG9wOiAgICAgICAgICAkZm9ybS10ZXh0LW1hcmdpbi10b3AgIWRlZmF1bHQ7XFxuLy8kZm9ybS1mZWVkYmFjay1mb250LXNpemU6ICAgICAgICAgICAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xcbiRmb3JtLWZlZWRiYWNrLXZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpO1xcbiRmb3JtLWZlZWRiYWNrLWludmFsaWQtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay13YXJuaW5nLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwid2FybmluZ1xcXCIpOyAvLyBQUyBjdXN0b21cXG5cXG4vLyBEcm9wZG93bnNcXG4vLyRkcm9wZG93bi1taW4td2lkdGg6ICAgICAgICAgICAgICAgIDEwcmVtICFkZWZhdWx0O1xcbiRkcm9wZG93bi1wYWRkaW5nLXk6IDA7XFxuLy8kZHJvcGRvd24tcGFkZGluZy15OiAgICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1zcGFjZXI6ICAgICAgICAgICAgICAgICAgIC4xMjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYmc6ICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWRpdmlkZXItYmc6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgMCAuNXJlbSAxcmVtIHJnYmEoJGJsYWNrLCAuMTc1KSAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24tbGluay1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbiRkcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAkd2hpdGU7XFxuXFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbi8vJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteDogLjMxMjVyZW07XFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy15OiAuMzEyNXJlbTtcXG5cXG4vLyRkcm9wZG93bi1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4vLyBOYXZzXFxuJG5hdi1saW5rLXBhZGRpbmcteTogLjkzNzVyZW07XFxuJG5hdi1saW5rLXBhZGRpbmcteDogMS4yNXJlbTtcXG4kbmF2LWxpbmstZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcblxcbiRuYXYtdGFicy1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG4vLyRuYXYtdGFicy1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYmc6ICRib2R5LWJnO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuXFxuJG5hdi1waWxscy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yO1xcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnOiAjZjRmOWZiO1xcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOyAvLyBQUyBjdXN0b21cXG5cXG4vLyRuYXYtcGlsbHMtYm9yZGVyLXJhZGl1czogICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBOYXZiYXJcXG4vLyRuYXZiYXItcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICgkc3BhY2VyIC8gMikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1uYXYtbGluay1wYWRkaW5nLXg6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZTogICAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcblxcbi8vJG5hdi1saW5rLWhlaWdodDogICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRsaW5lLWhlaWdodC1iYXNlICsgJG5hdi1saW5rLXBhZGRpbmcteSAqIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1icmFuZC1oZWlnaHQ6ICAgICAgICAgICAgICAgJG5hdmJhci1icmFuZC1mb250LXNpemUgKiAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtcGFkZGluZy15OiAgICAgICAgICAgICgkbmF2LWxpbmstaGVpZ2h0IC0gJG5hdmJhci1icmFuZC1oZWlnaHQpIC8gMiAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXk6ICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItdG9nZ2xlci1mb250LXNpemU6ICAgICAgICAgICRmb250LXNpemUtbGcgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItYm9yZGVyLXJhZGl1czogICAgICAkYnRuLWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLWRhcmstY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWhvdmVyLWNvbG9yOiAgICAgICAgICAgcmdiYSgkd2hpdGUsIC43NSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstYWN0aXZlLWNvbG9yOiAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstZGlzYWJsZWQtY29sb3I6ICAgICAgICByZ2JhKCR3aGl0ZSwgLjI1KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay10b2dnbGVyLWljb24tYmc6ICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMwIDMwJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBzdHJva2U9JyN7JG5hdmJhci1kYXJrLWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1ib3JkZXItY29sb3I6ICByZ2JhKCR3aGl0ZSwgLjEpICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1saWdodC1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtaG92ZXItY29sb3I6ICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvcjogICAgICAgICByZ2JhKCRibGFjaywgLjkpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1kaXNhYmxlZC1jb2xvcjogICAgICAgcmdiYSgkYmxhY2ssIC4zKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1pY29uLWJnOiAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMwIDMwJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBzdHJva2U9JyN7JG5hdmJhci1saWdodC1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC10b2dnbGVyLWJvcmRlci1jb2xvcjogcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyBQYWdpbmF0aW9uXFxuJHBhZ2luYXRpb24tcGFkZGluZy15OiAuNjVyZW07XFxuJHBhZ2luYXRpb24tcGFkZGluZy14OiAuNXJlbTtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1zbTogICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1zbTogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy15LWxnOiAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy14LWxnOiAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgMS4yNSAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbiRwYWdpbmF0aW9uLWJnOiAkd2hpdGU7XFxuLy8kcGFnaW5hdGlvbi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjogJHdoaXRlO1xcblxcbi8vJHBhZ2luYXRpb24tZm9jdXMtYm94LXNoYWRvdzogICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yOiAkcGFnaW5hdGlvbi1jb2xvcjtcXG4kcGFnaW5hdGlvbi1ob3Zlci1iZzogJHBhZ2luYXRpb24tYmc7XFxuJHBhZ2luYXRpb24taG92ZXItYm9yZGVyLWNvbG9yOiAkcGFnaW5hdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1iZzogJHBhZ2luYXRpb24tYmc7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1iZzogJHBhZ2luYXRpb24tYmc7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiAkcGFnaW5hdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuLy8gSnVtYm90cm9uXFxuJGp1bWJvdHJvbi1wYWRkaW5nOiAycmVtICFkZWZhdWx0O1xcbiRqdW1ib3Ryb24tYmc6ICRleHRyYS1saWdodC1ncmF5O1xcblxcbi8vIENhcmRzXFxuJGNhcmQtc3BhY2VyLXg6IC42MjVyZW0gIWRlZmF1bHQ7XFxuJGNhcmQtc3BhY2VyLXk6IC42MjVyZW0gIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXdpZHRoOiAxcHggIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXJhZGl1czogNXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXMtaW5uZXI6ICRjYXJkLWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGNhcmQtY2FwLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJGNhcmQtYmc6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtbGluay1ob3Zlci1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItY29sb3I6ICNkYmU2ZTkgIWRlZmF1bHQ7XFxuLy8kY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzOiAgICAgICAgICBjYWxjKCN7JGNhcmQtYm9yZGVyLXJhZGl1c30gLSAjeyRjYXJkLWJvcmRlci13aWR0aH0pICFkZWZhdWx0O1xcbi8vJGNhcmQtY2FwLWJnOiAgICAgICAgICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4wMykgIWRlZmF1bHQ7XFxuLy8kY2FyZC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1pbWctb3ZlcmxheS1wYWRkaW5nOiAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtZ3JvdXAtbWFyZ2luOiAgICAgICAgICAgICAgICAgKCRncmlkLWd1dHRlci13aWR0aCAvIDIpICFkZWZhdWx0O1xcbi8vJGNhcmQtZGVjay1tYXJnaW46ICAgICAgICAgICAgICAgICAgJGNhcmQtZ3JvdXAtbWFyZ2luICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtY29sdW1ucy1jb3VudDogICAgICAgICAgICAgICAgMyAhZGVmYXVsdDtcXG4vLyRjYXJkLWNvbHVtbnMtZ2FwOiAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLW1hcmdpbjogICAgICAgICAgICAgICAkY2FyZC1zcGFjZXIteSAhZGVmYXVsdDtcXG5cXG4vLyBUb29sdGlwc1xcbi8vJHRvb2x0aXAtZm9udC1zaXplOiAgICAgICAgICAgJGZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLW1heC13aWR0aDogICAgICAgICAgIDIwMHB4ICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiR0b29sdGlwLWJnOiAkbWVkaXVtLWdyYXk7XFxuLy8kdG9vbHRpcC1ib3JkZXItcmFkaXVzOiAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1vcGFjaXR5OiAgICAgICAgICAgICAuOSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1wYWRkaW5nLXk6IC42MjVyZW07XFxuJHRvb2x0aXAtcGFkZGluZy14OiAxLjI1cmVtO1xcbi8vJHRvb2x0aXAtbWFyZ2luOiAgICAgICAgICAgICAgMCAhZGVmYXVsdDtcXG5cXG4vLyR0b29sdGlwLWFycm93LXdpZHRoOiAgICAgICAgIC44cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctaGVpZ2h0OiAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1hcnJvdy1jb2xvcjogICAgICAgICAkdG9vbHRpcC1iZyAhZGVmYXVsdDtcXG5cXG4vLyBQb3BvdmVyc1xcbi8vJHBvcG92ZXItZm9udC1zaXplOiAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLW1heC13aWR0aDogICAgICAgICAgICAgICAgIDI3NnB4ICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJHBvcG92ZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kcG9wb3Zlci1oZWFkZXItYmc6ICRleHRyYS1saWdodC1ncmF5O1xcbi8vJHBvcG92ZXItaGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAgJGhlYWRpbmdzLWNvbG9yICFkZWZhdWx0O1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXk6IC42MjVyZW07XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWJvZHktY29sb3I6ICAgICAgICAgICAgICAgICRib2R5LWNvbG9yICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvZHktcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWJvZHktcGFkZGluZy14OiAxLjI1cmVtO1xcblxcbi8vJHBvcG92ZXItYXJyb3ctd2lkdGg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWhlaWdodDogICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYXJyb3ctY29sb3I6ICAgICAgICAgICAgICAgJHBvcG92ZXItYmcgIWRlZmF1bHQ7XFxuXFxuLy8kcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjogICAgICAgICBmYWRlLWluKCRwb3BvdmVyLWJvcmRlci1jb2xvciwgLjA1KSAhZGVmYXVsdDtcXG5cXG4vLyBCYWRnZXNcXG4kYmFkZ2UtZm9udC1zaXplOiAuNjI1cmVtICFkZWZhdWx0O1xcbiRiYWRnZS1mb250LXdlaWdodDogNTAwICFkZWZhdWx0O1xcbiRiYWRnZS1wYWRkaW5nLXk6IC4yNXJlbTtcXG4kYmFkZ2UtcGFkZGluZy14OiAuNXJlbTtcXG4vLyRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJGJhZGdlLXBpbGwtcGFkZGluZy14OiAgICAgICAgICAgICAgLjZlbSAhZGVmYXVsdDtcXG4vLyRiYWRnZS1waWxsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIDEwcmVtICFkZWZhdWx0O1xcblxcbi8vIE1vZGFsc1xcbiRtb2RhbC1pbm5lci1wYWRkaW5nOiAxLjg3NXJlbTtcXG5cXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luOiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJG1vZGFsLWRpYWxvZy1tYXJnaW4teS1zbS11cDogMS43NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC10aXRsZS1saW5lLWhlaWdodDogICAgICAgICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcblxcbi8vJG1vZGFsLWNvbnRlbnQtYmc6ICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aDogICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy14czogMCA4cHggMTZweCAwIHJnYmEoMCwgMCwgMCwgLjEpO1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3ctc20tdXA6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG5cXG4vLyRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4vLyRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5OiAgICAgIC41ICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yOiBub25lO1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3I6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtaGVhZGVyLWJvcmRlci13aWR0aDogICAkbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbW9kYWwtZm9vdGVyLWJvcmRlci13aWR0aDogICAkbW9kYWwtaGVhZGVyLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLXBhZGRpbmc6ICRtb2RhbC1pbm5lci1wYWRkaW5nO1xcblxcbiRtb2RhbC1sZzogOTAwcHg7XFxuJG1vZGFsLW1kOiA2ODBweDtcXG4kbW9kYWwtc206IDQwMHB4O1xcblxcbi8vJG1vZGFsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtIC4zcyBlYXNlLW91dCAhZGVmYXVsdDtcXG5cXG4vLyBBbGVydHNcXG4kYWxlcnQtcGFkZGluZy15OiAxcmVtICFkZWZhdWx0O1xcbiRhbGVydC1wYWRkaW5nLXg6IDFyZW07XFxuLy8kYWxlcnQtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kYWxlcnQtbGluay1mb250LXdlaWdodDogICAgICAgICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG4kYWxlcnQtYm9yZGVyLXdpZHRoOiAuMTI1cmVtO1xcblxcbi8vJGFsZXJ0LWJnLWxldmVsOiAgICAgICAgICAgICAgICAgICAgLTEwICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWJvcmRlci1sZXZlbDogICAgICAgICAgICAgICAgLTkgIWRlZmF1bHQ7XFxuLy8kYWxlcnQtY29sb3ItbGV2ZWw6ICAgICAgICAgICAgICAgICA2ICFkZWZhdWx0O1xcblxcbi8vIFByb2dyZXNzIGJhcnNcXG4vLyRwcm9ncmVzcy1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtZm9udC1zaXplOiAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogLjc1KSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iZzogICAgICAgICAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgaW5zZXQgMCAuMXJlbSAuMXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci1jb2xvcjogICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci1iZzogICAgICAgICAgICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYW5pbWF0aW9uLXRpbWluZzogICAgIDFzIGxpbmVhciBpbmZpbml0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItdHJhbnNpdGlvbjogICAgICAgICAgIHdpZHRoIC42cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIExpc3QgZ3JvdXBcXG4vLyRsaXN0LWdyb3VwLWJnOiAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15OiAkaW5wdXQtcGFkZGluZy15O1xcbiRsaXN0LWdyb3VwLWl0ZW0tcGFkZGluZy14OiAkaW5wdXQtcGFkZGluZy14O1xcblxcbiRsaXN0LWdyb3VwLWhvdmVyLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbi8vJGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbi8vJGxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlci1jb2xvcjogICAgJGxpc3QtZ3JvdXAtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICAgICRsaXN0LWdyb3VwLWJnICFkZWZhdWx0O1xcblxcbi8vJGxpc3QtZ3JvdXAtYWN0aW9uLWNvbG9yOiAgICAgICAgICAgJGdyYXktNzAwICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1jb2xvcjogJHdoaXRlO1xcblxcbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3I6ICRib2R5LWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtYmc6ICRncmF5LTIwMCAhZGVmYXVsdDtcXG5cXG4vLyBJbWFnZSB0aHVtYm5haWxzXFxuJHRodW1ibmFpbC1wYWRkaW5nOiAwO1xcbi8vJHRodW1ibmFpbC1iZzogICAgICAgICAgICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci13aWR0aDogICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiR0aHVtYm5haWwtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyR0aHVtYm5haWwtYm9yZGVyLXJhZGl1czogICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiR0aHVtYm5haWwtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyBGaWd1cmVzXFxuLy8kZmlndXJlLWNhcHRpb24tZm9udC1zaXplOiAgICAgICAgICA5MCUgIWRlZmF1bHQ7XFxuJGZpZ3VyZS1jYXB0aW9uLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8gQnJlYWRjcnVtYnNcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXk6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLXBhZGRpbmcteDogLjMxMjVyZW07XFxuJGJyZWFkY3J1bWItaXRlbS1wYWRkaW5nOiAuM3JlbTtcXG5cXG4kYnJlYWRjcnVtYi1tYXJnaW4tYm90dG9tOiAwO1xcblxcbiRicmVhZGNydW1iLWJnOiBub25lO1xcbiRicmVhZGNydW1iLWRpdmlkZXItY29sb3I6ICRkYXJrLWdyYXk7XFxuJGJyZWFkY3J1bWItYWN0aXZlLWNvbG9yOiAkZXh0cmEtZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWRpdmlkZXI6IFxcXCIvXFxcIjtcXG5cXG4vLyBDYXJvdXNlbFxcbi8vJGNhcm91c2VsLWNvbnRyb2wtY29sb3I6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtd2lkdGg6ICAgICAgICAgICAgMTUlICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgLjUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLXdpZHRoOiAgICAgICAgICAzMHB4ICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWluZGljYXRvci1oZWlnaHQ6ICAgICAgICAgM3B4ICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWluZGljYXRvci1zcGFjZXI6ICAgICAgICAgM3B4ICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWNhcHRpb24td2lkdGg6ICAgICAgICAgICAgNzAlICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNhcHRpb24tY29sb3I6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWNvbnRyb2wtaWNvbi13aWR0aDogICAgICAgMjBweCAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J001LjI1IDBsLTQgNCA0IDQgMS41LTEuNS0yLjUtMi41IDIuNS0yLjUtMS41LTEuNXonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNMi43NSAwbC0xLjUgMS41IDIuNSAyLjUtMi41IDIuNSAxLjUgMS41IDQtNC00LTR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgdHJhbnNmb3JtIC42cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIENsb3NlXFxuLy8kY2xvc2UtZm9udC1zaXplOiAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjUgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG4vLyRjbG9zZS1jb2xvcjogICAgICAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4vLyRjbG9zZS10ZXh0LXNoYWRvdzogICAgICAgICAgIDAgMXB4IDAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vIENvZGVcXG4vLyRjb2RlLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgIDg3LjUlICFkZWZhdWx0O1xcbiRjb2RlLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRrYmQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGtiZC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XFxuLy8ka2JkLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgICAkY29kZS1mb250LXNpemUgIWRlZmF1bHQ7XFxuJGtiZC1jb2xvcjogJHdoaXRlO1xcbiRrYmQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuXFxuJHByZS1jb2xvcjogJGJvZHktY29sb3I7XFxuLy8kcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDogICAgICAgICAzNDBweCAhZGVmYXVsdDtcXG5cXG4vLyBQcmludGluZ1xcbi8vJHByaW50LXBhZ2Utc2l6ZTogICAgICAgICAgICAgICAgICAgYTMgIWRlZmF1bHQ7XFxuLy8kcHJpbnQtYm9keS1taW4td2lkdGg6ICAgICAgICAgICAgICBtYXAtZ2V0KCRncmlkLWJyZWFrcG9pbnRzLCBcXFwibGdcXFwiKSAhZGVmYXVsdDtcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuZmFkZS1lbnRlci1hY3RpdmVbZGF0YS12LTZhOWM2MDk0XSwuZmFkZS1sZWF2ZS1hY3RpdmVbZGF0YS12LTZhOWM2MDk0XXt0cmFuc2l0aW9uOm9wYWNpdHkgLjVzfS5mYWRlLWVudGVyW2RhdGEtdi02YTljNjA5NF0sLmZhZGUtbGVhdmUtdG9bZGF0YS12LTZhOWM2MDk0XXtvcGFjaXR5OjB9XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3ByaW5jaXBhbC9pbmRleC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBd1RBLHdFQUNFLHNCQUNGLENBQUMsNkRBRUMsU0FDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcXG5cXG4uZmFkZS1lbnRlci1hY3RpdmUsIC5mYWRlLWxlYXZlLWFjdGl2ZSB7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC41c1xcbn1cXG4uZmFkZS1lbnRlciwgLmZhZGUtbGVhdmUtdG8gLyogLmZhZGUtbGVhdmUtYWN0aXZlIGluIDwyLjEuOCAqLyB7XFxuICBvcGFjaXR5OiAwXFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5mb3JtLWdyb3VwW2RhdGEtdi0zZTFhNTA3MF17b3ZlcmZsb3c6aGlkZGVufS5taXNzaW5nW2RhdGEtdi0zZTFhNTA3MF17Ym9yZGVyOjFweCBzb2xpZCAjZjU0YzNlfVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2pzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9wcmluY2lwYWwvdHJhbnNsYXRpb24taW5wdXQudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQTBHQSw2QkFDRSxlQUFnQixDQUNqQiwwQkFFQyx3QkN4RVdcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XFxuXFxuLmZvcm0tZ3JvdXAge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLm1pc3Npbmcge1xcbiAgYm9yZGVyOiAxcHggc29saWQgJGRhbmdlcjtcXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnRyYW5zbGF0aW9uVHJlZSAudHJlZS1uYW1le21hcmdpbi1ib3R0b206LjkzNzVyZW19LnRyYW5zbGF0aW9uVHJlZSAudHJlZS1uYW1lLmFjdGl2ZXtmb250LXdlaWdodDpib2xkfS50cmFuc2xhdGlvblRyZWUgLnRyZWUtbmFtZS5leHRyYXtjb2xvcjojZjU0YzNlfS50cmFuc2xhdGlvblRyZWUgLnRyZWUtZXh0cmEtbGFiZWx7Y29sb3I6I2Y1NGMzZTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC1zaXplOi42NXJlbTttYXJnaW4tbGVmdDphdXRvfS50cmFuc2xhdGlvblRyZWUgLnRyZWUtZXh0cmEtbGFiZWwtbWluaXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTRjM2U7Y29sb3I6I2ZmZmZmZjtwYWRkaW5nOjAgMC41cmVtO2JvcmRlci1yYWRpdXM6MC43NXJlbTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6Ljc1cmVtO2hlaWdodDoxLjVyZW07bWFyZ2luLWxlZnQ6YXV0b30udHJhbnNsYXRpb25UcmVlIC50cmVlLWxhYmVsOmhvdmVye2NvbG9yOiMyNWI5ZDd9LnBzLWxvYWRlciAuYW5pbWF0ZWQtYmFja2dyb3VuZHtoZWlnaHQ6MTQ0cHggIWltcG9ydGFudDthbmltYXRpb24tZHVyYXRpb246MnMgIWltcG9ydGFudH0ucHMtbG9hZGVyIC5iYWNrZ3JvdW5kLW1hc2tlci5oZWFkZXItbGVmdHtsZWZ0OjA7dG9wOjE2cHg7aGVpZ2h0OjEwOHB4O3dpZHRoOjIwcHh9LnBzLWxvYWRlciAuYmFja2dyb3VuZC1tYXNrZXIuY29udGVudC10b3B7bGVmdDowO3RvcDoxNnB4O2hlaWdodDoyMHB4fS5wcy1sb2FkZXIgLmJhY2tncm91bmQtbWFza2VyLmNvbnRlbnQtZmlyc3QtZW5ke2xlZnQ6MDt0b3A6NTJweDtoZWlnaHQ6MjBweH0ucHMtbG9hZGVyIC5iYWNrZ3JvdW5kLW1hc2tlci5jb250ZW50LXNlY29uZC1lbmR7bGVmdDowO3RvcDo4OHB4O2hlaWdodDoyMHB4fS5wcy1sb2FkZXIgLmJhY2tncm91bmQtbWFza2VyLmNvbnRlbnQtdGhpcmQtZW5ke2xlZnQ6MDt0b3A6MTI0cHg7aGVpZ2h0OjIwcHh9XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vanMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL3NpZGViYXIvaW5kZXgudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQWdLQSw0QkFFSSxzQkFBdUIsQ0FGM0IsbUNBS00sZ0JBQWlCLENBTHZCLGtDQVNNLGFDbklPLENEMEhiLG1DQWFJLGFDdklTLENEd0lULHdCQUF5QixDQUN6QixnQkFBaUIsQ0FDakIsZ0JBQWlCLENBaEJyQix3Q0FtQkksd0JDN0lTLENEOElULGFBQWMsQ0FDZCxnQkFBaUIsQ0FDakIscUJBQXNCLENBQ3RCLG9CQUFxQixDQUNyQixnQkFBaUIsQ0FDakIsYUFBYyxDQUNkLGdCQUFpQixDQTFCckIsbUNBOEJNLGFDNUpRLENENkpULGdDQU9ELHVCQUF1QixDQUN2QixnQ0FBZ0MsQ0FMcEMsMENBU00sTUFBTyxDQUNQLFFBUnFCLENBU3JCLFlBQWEsQ0FDYixVQUFXLENBWmpCLDBDQWVNLE1BQU8sQ0FDUCxRQWRxQixDQWVyQixXQWhCc0IsQ0FENUIsZ0RBb0JNLE1BQU8sQ0FDUCxRQUErQyxDQUMvQyxXQXJCc0IsQ0FENUIsaURBeUJNLE1BQU8sQ0FDUCxRQUFpRCxDQUNqRCxXQTFCc0IsQ0FENUIsZ0RBOEJNLE1BQU8sQ0FDUCxTQUFpRCxDQUNqRCxXQS9Cc0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XFxuXFxuLnRyYW5zbGF0aW9uVHJlZSB7XFxuICAudHJlZS1uYW1lIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLjkzNzVyZW07XFxuXFxuICAgICYuYWN0aXZlIHtcXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgfVxcblxcbiAgICAmLmV4dHJhIHtcXG4gICAgICBjb2xvcjogJGRhbmdlcjtcXG4gICAgfVxcbiAgfVxcbiAgLnRyZWUtZXh0cmEtbGFiZWwge1xcbiAgICBjb2xvcjogJGRhbmdlcjtcXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG4gICAgZm9udC1zaXplOiAuNjVyZW07XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgfVxcbiAgLnRyZWUtZXh0cmEtbGFiZWwtbWluaSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRkYW5nZXI7XFxuICAgIGNvbG9yOiAjZmZmZmZmO1xcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcXG4gICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBmb250LXNpemU6IC43NXJlbTtcXG4gICAgaGVpZ2h0OiAxLjVyZW07XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgfVxcbiAgLnRyZWUtbGFiZWwge1xcbiAgICAmOmhvdmVyIHtcXG4gICAgICBjb2xvcjogJHByaW1hcnk7XFxuICAgIH1cXG4gIH1cXG59XFxuLnBzLWxvYWRlciB7XFxuICAkbG9hZGVyLXdoaXRlLWhlaWdodDogMjBweDtcXG4gICRsb2FkZXItbGluZS1oZWlnaHQ6IDE2cHg7XFxuICAuYW5pbWF0ZWQtYmFja2dyb3VuZCB7XFxuICAgIGhlaWdodDogMTQ0cHghaW1wb3J0YW50O1xcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDJzIWltcG9ydGFudDtcXG4gIH1cXG4gIC5iYWNrZ3JvdW5kLW1hc2tlciB7XFxuICAgICYuaGVhZGVyLWxlZnQge1xcbiAgICAgIGxlZnQ6IDA7XFxuICAgICAgdG9wOiAkbG9hZGVyLWxpbmUtaGVpZ2h0O1xcbiAgICAgIGhlaWdodDogMTA4cHg7XFxuICAgICAgd2lkdGg6IDIwcHg7XFxuICAgIH1cXG4gICAgJi5jb250ZW50LXRvcCB7XFxuICAgICAgbGVmdDogMDtcXG4gICAgICB0b3A6ICRsb2FkZXItbGluZS1oZWlnaHQ7XFxuICAgICAgaGVpZ2h0OiAkbG9hZGVyLXdoaXRlLWhlaWdodDtcXG4gICAgfVxcbiAgICAmLmNvbnRlbnQtZmlyc3QtZW5kIHtcXG4gICAgICBsZWZ0OiAwO1xcbiAgICAgIHRvcDogJGxvYWRlci1saW5lLWhlaWdodCoyKyRsb2FkZXItd2hpdGUtaGVpZ2h0O1xcbiAgICAgIGhlaWdodDogJGxvYWRlci13aGl0ZS1oZWlnaHQ7XFxuICAgIH1cXG4gICAgJi5jb250ZW50LXNlY29uZC1lbmQge1xcbiAgICAgIGxlZnQ6IDA7XFxuICAgICAgdG9wOiAkbG9hZGVyLWxpbmUtaGVpZ2h0KjMrJGxvYWRlci13aGl0ZS1oZWlnaHQqMjtcXG4gICAgICBoZWlnaHQ6ICRsb2FkZXItd2hpdGUtaGVpZ2h0O1xcbiAgICB9XFxuICAgICYuY29udGVudC10aGlyZC1lbmQge1xcbiAgICAgIGxlZnQ6IDA7XFxuICAgICAgdG9wOiAkbG9hZGVyLWxpbmUtaGVpZ2h0KjQrJGxvYWRlci13aGl0ZS1oZWlnaHQqMztcXG4gICAgICBoZWlnaHQ6ICRsb2FkZXItd2hpdGUtaGVpZ2h0O1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLyogc3R5bGVsaW50LWRpc2FibGUgKi9cXG5cXG4vLyBDb2xvciBzeXN0ZW1cXG4kd2hpdGU6ICNmZmY7XFxuJGdyYXktZGlzYWJsZWQ6ICNlYWViZWM7XFxuJGdyYXktMTAwOiAjZmFmYmZjO1xcbiRncmF5LTIwMDogI2ZhZmJmYztcXG4kZ3JheS0yNTA6ICNmYWZiZmM7XFxuJGdyYXktMzAwOiAjYmJjZGQyO1xcbiRncmF5LTQwMDogI2JiY2RkMjtcXG4kZ3JheS00NTA6ICNiM2M3Y2Q7XFxuJGdyYXktNTAwOiAjNmM4NjhlO1xcbiRncmF5LTU1MDogIzcwODA5MDtcXG4kZ3JheS02MDA6ICM2Yzg2OGU7XFxuJGdyYXktNzAwOiAjMzYzYTQxO1xcbiRncmF5LTc1MDogIzM2M2E0MTtcXG4kZ3JheS04MDA6ICMzNjNhNDE7XFxuJGdyYXktOTAwOiAjMjgyYjMwO1xcbiRibGFjazogIzAwMDtcXG5cXG4vLyBQUyBWYXJzXFxuJGV4dHJhLWxpZ2h0LWdyYXk6ICRncmF5LTEwMDtcXG4kbGlnaHQtZ3JheTogJGdyYXktMzAwO1xcbiRtZWRpdW0tZ3JheTogJGdyYXktNTAwO1xcbiRkYXJrLWdyYXk6ICRncmF5LTcwMDtcXG4kZXh0cmEtZGFyay1ncmF5OiAkZ3JheS05MDA7XFxuJGdyYXktbGlnaHQ6ICRsaWdodC1ncmF5O1xcbiRncmF5LW1lZGl1bTogJG1lZGl1bS1ncmF5O1xcbiRncmF5LWRhcms6ICRkYXJrLWdyYXk7XFxuJGdyYXktc29mdDogJGdyYXktMjAwO1xcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmMWYyO1xcbiRwcmltYXJ5LWxpZ2h0ZW46ICNmNGZjZmQ7XFxuJGxvY2FsLWZvbnQ6IGZhbHNlICFkZWZhdWx0O1xcblxcbiRibHVlOiAjMjViOWQ3O1xcbiRpbmRpZ286ICM2NjEwZjIgIWRlZmF1bHQ7XFxuJHB1cnBsZTogIzZmNDJjMSAhZGVmYXVsdDtcXG4kcGluazogI2U4M2U4YyAhZGVmYXVsdDtcXG4kcmVkOiAjZjU0YzNlO1xcbiRvcmFuZ2U6ICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHllbGxvdzogI2ZhYjAwMDtcXG4kZ3JlZW46ICM3MGI1ODA7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4kdGVhbDogIzIwYzk5NyAhZGVmYXVsdDtcXG4kY3lhbjogJGJsdWU7XFxuJGxpZ2h0LWJsdWU6ICNmNGZjZmQ7XFxuXFxuLy8gbWFpbiBidXR0b24gYmFja2dyb3VuZCBjb2xvcnNcXG4kcHJpbWFyeS1ob3ZlcjogIzdjZDVlNztcXG4kcHJpbWFyeS1hY3RpdmU6ICMyMWE2YzE7XFxuJHByaW1hcnktZGlzYWJsZWQ6ICNkM2YxZjc7XFxuJHNlY29uZGFyeS1ob3ZlcjogI2I3Y2VkMztcXG4kc2Vjb25kYXJ5LWFjdGl2ZTogIzg4OWRhMjtcXG4kZGFuZ2VyLWhvdmVyOiAjZmRlMWUxO1xcbiRub3RpY2U6ICNkZmY1Zjk7XFxuXFxuJHByaW1hcnk6ICRibHVlICFkZWZhdWx0O1xcbiRzZWNvbmRhcnk6ICRtZWRpdW0tZ3JheTtcXG4kc3VjY2VzczogJGdyZWVuICFkZWZhdWx0O1xcbiRpbmZvOiAkY3lhbiAhZGVmYXVsdDtcXG4kd2FybmluZzogJHllbGxvdyAhZGVmYXVsdDtcXG4kZGFuZ2VyOiAkcmVkICFkZWZhdWx0O1xcbiRsaWdodDogJGdyYXktMTAwICFkZWZhdWx0O1xcbiRkYXJrOiAkZ3JheS04MDAgIWRlZmF1bHQ7XFxuXFxuJHRvYXN0LXN1Y2Nlc3M6ICM1M2Q1NzIgIWRlZmF1bHQ7XFxuJHRvYXN0LXdhcm5pbmc6ICNmYWIwMDAgIWRlZmF1bHQ7XFxuXFxuJGJyYW5kLXByaW1hcnk6ICRwcmltYXJ5ICFkZWZhdWx0O1xcbiRicmFuZC1zZWNvbmRhcnk6ICRzZWNvbmRhcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLWluZm86ICM1YmMwZGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXdhcm5pbmc6ICNmMGFkNGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXN1Y2Nlc3M6ICRzdWNjZXNzICFkZWZhdWx0O1xcbiRicmFuZC1kYW5nZXI6ICRkYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1wcmltYXJ5LWJnOiAkcHJpbWFyeS1ob3ZlcjtcXG4kYnRuLXNlY29uZGFyeS1ib3JkZXI6ICMwMDA7XFxuJGJ0bi1pbmZvLWJnOiAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcXG4kYnRuLXN1Y2Nlc3MtYmc6ICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xcbiRidG4td2FybmluZy1iZzogJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XFxuJGJ0bi1kYW5nZXItYmc6ICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJHRoZW1lLWNvbG9yczogKFxcbiAgXFxcInByaW1hcnlcXFwiOiAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAkc2Vjb25kYXJ5LFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAkc3VjY2VzcyxcXG4gIFxcXCJpbmZvXFxcIjogJGluZm8sXFxuICBcXFwid2FybmluZ1xcXCI6ICR3YXJuaW5nLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHQsXFxuICBcXFwiZGFya1xcXCI6ICRkYXJrXFxuKTtcXG5cXG4kYWxlcnRzLWJhY2tncm91bmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICNjYmYyZDQsXFxuICBcXFwiaW5mb1xcXCI6ICNiZWVhZjMsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmZmZiZDMsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2ZiYzZjM1xcbik7XFxuXFxuJGFsZXJ0cy1zZWNvbmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICM1M2Q1NzIsXFxuICBcXFwiaW5mb1xcXCI6ICMyNWI5ZDcsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmYWIwMDAsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2Y0NDMzNlxcbik7XFxuXFxuJHRoZW1lLWFsZXJ0cy1pY29uczogKFxcbiAgc3VjY2VzczogXFxcIlxcXFxFNUNBXFxcIixcXG4gIGluZm86IFxcXCJcXFxcZTg4ZVxcXCIsXFxuICB3YXJuaW5nOiBcXFwiXFxcXEUwMDJcXFwiLFxcbiAgZGFuZ2VyOiBcXFwiXFxcXGUwMDBcXFwiXFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWljb25zOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAkZGFuZ2VyLFxcbiAgXFxcImxpZ2h0XFxcIjogJGxpZ2h0XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWhvdmVyOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1ob3ZlcixcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1ob3ZlcixcXG4gIHN1Y2Nlc3M6ICM5YmNiYTYsXFxuICBpbmZvOiAkcHJpbWFyeS1ob3ZlcixcXG4gIHdhcm5pbmc6ICNlNmIwNDUsXFxuICBkYW5nZXI6ICNlNzZkN2EsXFxuICBsaWdodDogJGdyYXktODAwLFxcbiAgZGFyazogJGdyYXktMTAwLFxcbiAgZGVmYXVsdDogJGxpZ2h0LWJsdWVcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYWN0aXZlOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1hY3RpdmUsXFxuICBzZWNvbmRhcnk6ICRzZWNvbmRhcnktYWN0aXZlLFxcbiAgc3VjY2VzczogIzVhOTE2NixcXG4gIGluZm86IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJpbmZvXFxcIiksIDEwJSksXFxuICB3YXJuaW5nOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwid2FybmluZ1xcXCIpLCAxMCUpLFxcbiAgZGFuZ2VyOiAjYzMzNjJiLFxcbiAgbGlnaHQ6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJsaWdodFxcXCIpLCAxMCUpLFxcbiAgZGFyazogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImRhcmtcXFwiKSwgMTAlKSxcXG4gIGRlZmF1bHQ6ICRwcmltYXJ5XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWJhY2tncm91bmQ6IChcXG4gIHByaW1hcnk6ICNkZmY1ZjksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6ICNkNmYwZDgsXFxuICBpbmZvOiAjZGZmNWY5LFxcbiAgd2FybmluZzogI2ZmZmJkMyxcXG4gIGRhbmdlcjogI2ZkZTFlMSxcXG4gIGxpZ2h0OiAkZ3JheS0yMDAsXFxuICBkYXJrOiAkZ3JheS03MDBcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtc2hhZG93OiAoXFxuICBwcmltYXJ5OiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLFxcbiAgc2Vjb25kYXJ5OiAkYmxhY2ssXFxuICBzdWNjZXNzOiB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpLFxcbiAgaW5mbzogdGhlbWUtY29sb3IoXFxcImluZm9cXFwiKSxcXG4gIHdhcm5pbmc6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIiksXFxuICBkYW5nZXI6IHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKSxcXG4gIGxpZ2h0OiB0aGVtZS1jb2xvcihcXFwibGlnaHRcXFwiKSxcXG4gIGRhcms6IHRoZW1lLWNvbG9yKFxcXCJkYXJrXFxcIilcXG4pO1xcblxcbi8vIE9wdGlvbnNcXG4kZW5hYmxlLWNhcmV0OiB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcm91bmRlZDogdHJ1ZTtcXG4kZW5hYmxlLXNoYWRvd3M6IHRydWU7XFxuJGVuYWJsZS1ncmFkaWVudHM6IGZhbHNlICFkZWZhdWx0O1xcbiRlbmFibGUtdHJhbnNpdGlvbnM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ncmlkLWNsYXNzZXM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1wcmludC1zdHlsZXM6IHRydWUgIWRlZmF1bHQ7XFxuXFxuLy8gU3BhY2luZ1xcbiRzcGFjZXI6IDEuODc1cmVtO1xcblxcbiRzcGFjZXJzOiAoXFxuICAwOiAwLFxcbiAgMTogKFxcbiAgICAkc3BhY2VyIC8gNlxcbiAgKSxcXG4gIDI6IChcXG4gICAgJHNwYWNlciAvIDNcXG4gICksXFxuICAzOiAoXFxuICAgICRzcGFjZXIgLyAyXFxuICApLFxcbiAgNDogJHNwYWNlcixcXG4gIDU6IChcXG4gICAgJHNwYWNlciAqIDJcXG4gIClcXG4pO1xcblxcbi8vIEJvZHlcXG4kYm9keS1iZzogJHdoaXRlICFkZWZhdWx0O1xcbiRib2R5LWNvbG9yOiAkZGFyay1ncmF5O1xcblxcbi8vIExpbmtzXFxuJGxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcblxcbi8vIFBhcmFncmFwaHNcXG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206IDFyZW07XFxuXFxuLy8gR3JpZCBicmVha3BvaW50c1xcbiRncmlkLWJyZWFrcG9pbnRzOiAoXFxuICB4czogMCxcXG4gIHNtOiA1NDRweCxcXG4gIG1kOiA3NjhweCxcXG4gIGxnOiAxMDI0cHgsXFxuICB4bDogMTMwMHB4LFxcbiAgeHhsOiAxNjAwcHggLy8gUFMgY3VzdG9tXFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkZ3JpZC1icmVha3BvaW50cywgXFxcIiRncmlkLWJyZWFrcG9pbnRzXFxcIik7XFxuQGluY2x1ZGUgX2Fzc2VydC1zdGFydHMtYXQtemVybygkZ3JpZC1icmVha3BvaW50cyk7XFxuXFxuLy8gR3JpZCBjb250YWluZXJzXFxuJGNvbnRhaW5lci1tYXgtd2lkdGhzOiAoXFxuICBzbTogNTc2cHgsXFxuICBtZDogNzIwcHgsXFxuICBsZzogOTcycHgsXFxuICB4bDogMTI0MHB4XFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkY29udGFpbmVyLW1heC13aWR0aHMsIFxcXCIkY29udGFpbmVyLW1heC13aWR0aHNcXFwiKTtcXG5cXG4vLyBHcmlkIGNvbHVtbnNcXG4vLyRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xcbiRncmlkLWd1dHRlci13aWR0aDogMS44NzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8gQ29tcG9uZW50c1xcbi8vJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcbi8vJGxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcblxcbi8vJGJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgMXB4ICFkZWZhdWx0O1xcbi8vJGJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRib3JkZXItcmFkaXVzOiA0cHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xcblxcbi8vJGNvbXBvbmVudC1hY3RpdmUtY29sb3I6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG5cXG4kY2FyZXQtd2lkdGg6IC4yNXJlbTtcXG5cXG4vLyR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1mYWRlOiAgICAgICAgICAgICBvcGFjaXR5IC4xNXMgbGluZWFyICFkZWZhdWx0O1xcbi8vJHRyYW5zaXRpb24tY29sbGFwc2U6ICAgICAgICAgaGVpZ2h0IC4zNXMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBGb250c1xcbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiBcXFwiT3BlbiBTYW5zXFxcIiwgaGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZjtcXG4vLyRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcXG4vLyRmb250LWZhbWlseS1iYXNlOiAgICAgICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xcblxcbiRmb250LXNpemUtYmFzZTogLjg3NXJlbTtcXG4kZm9udC1zaXplLWxnOiAxcmVtO1xcbiRmb250LXNpemUtc206IC43NXJlbTtcXG4kZm9udC1zaXplLXhzOiAuNjI1cmVtOyAvLyBQUyBjdXN0b21cXG5cXG4vLyRmb250LXdlaWdodC1saWdodDogICAgICAgICAgIDMwMDtcXG4vLyRmb250LXdlaWdodC1ub3JtYWw6ICAgICAgICAgIDQwMDtcXG4kZm9udC13ZWlnaHQtc2VtaWJvbGQ6IDYwMDtcXG4kZm9udC13ZWlnaHQtYm9sZDogNzAwO1xcblxcbiRoMS1mb250LXNpemU6IDEuNXJlbTtcXG4kaDItZm9udC1zaXplOiAxLjI1cmVtO1xcbiRoMy1mb250LXNpemU6IDFyZW07XFxuJGg0LWZvbnQtc2l6ZTogLjg3NXJlbTtcXG4kaDUtZm9udC1zaXplOiAuNzVyZW07XFxuJGg2LWZvbnQtc2l6ZTogLjYyNXJlbTtcXG5cXG4vLyRoZWFkaW5ncy1tYXJnaW4tYm90dG9tOiAgICAgICgkc3BhY2VyIC8gMikgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktc2Fucy1zZXJpZjtcXG4kaGVhZGluZ3MtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xcbiRoZWFkaW5ncy1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8kZGlzcGxheTEtc2l6ZTogICAgICAgICAgICAgICA2cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXNpemU6ICAgICAgICAgICAgICAgNS41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXNpemU6ICAgICAgICAgICAgICAgNC41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXNpemU6ICAgICAgICAgICAgICAgMy41cmVtICFkZWZhdWx0O1xcblxcbi8vJGRpc3BsYXkxLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXktbGluZS1oZWlnaHQ6ICAgICAgICAgJGhlYWRpbmdzLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGxlYWQtZm9udC1zaXplOiAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcbi8vJGxlYWQtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcblxcbi8vJHNtYWxsLWZvbnQtc2l6ZTogICAgICAgICAgICAgODAlICFkZWZhdWx0O1xcblxcbiR0ZXh0LW11dGVkOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuLy8kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuXFxuJGhyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vJG1hcmstcGFkZGluZzogICAgICAgICAgICAgICAgLjJlbSAhZGVmYXVsdDtcXG5cXG4vLyRkdC1mb250LXdlaWdodDogICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGtiZC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAtLjFyZW0gMCByZ2JhKCRibGFjaywgLjI1KSAhZGVmYXVsdDtcXG4vLyRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0OiAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGxpc3QtaW5saW5lLXBhZGRpbmc6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1iZzogICAgICAgICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xcblxcbi8vJGhyLW1hcmdpbi15OiAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyBUYWJsZXNcXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAuNHJlbTtcXG4kdGFibGUtY2VsbC1wYWRkaW5nLXNtOiAuMjVyZW07XFxuXFxuLy8kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcXG4kdGFibGUtYWNjZW50LWJnOiAkYmFja2dyb3VuZC1jb2xvcjtcXG4kdGFibGUtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4vLyR0YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWhlYWQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1oZWFkLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4kdGFibGUtZGFyay1iZzogJGJvZHktY29sb3I7XFxuJHRhYmxlLWRhcmstYWNjZW50LWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcbiR0YWJsZS1kYXJrLWhvdmVyLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbiR0YWJsZS1kYXJrLWJvcmRlci1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJHRhYmxlLWRhcmstY29sb3I6ICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRpbnB1dC1idG4tcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1idG4tcGFkZGluZy14OiAuODM4cmVtO1xcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodDogICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgIHJnYmEoJGNvbXBvbmVudC1hY3RpdmUtYmcsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAwIDAgMCAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICRpbnB1dC1idG4tZm9jdXMtY29sb3IgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktc206IC4zMTNyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtc206IC42MjVyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAkbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6IC40MzhyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGc6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAkbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWJvcmRlci13aWR0aDogICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vIEJ1dHRvbnNcXG4kYnRuLXBhZGRpbmcteTogLjVyZW0gIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXg6IDFyZW0gIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1wYWRkaW5nLXktc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kYnRuLXBhZGRpbmcteC1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQtc206ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1sZzogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRidG4tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbiRidG4tZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1zZW1pYm9sZDtcXG4kYnRuLWJveC1zaGFkb3c6IG5vbmU7XFxuLy8kYnRuLWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xcbiRidG4tZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZGlzYWJsZWQtb3BhY2l0eTogICAgICAgIC42NSAhZGVmYXVsdDtcXG4kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ibG9jay1zcGFjaW5nLXk6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGJ0bi1ib3JkZXItcmFkaXVzOiA0cHg7XFxuLy8kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICRib3JkZXItcmFkaXVzLXNtICFkZWZhdWx0O1xcblxcbi8vJGJ0bi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vIEZvcm1zXFxuJGlucHV0LXBhZGRpbmcteTogLjM3NXJlbTtcXG4kaW5wdXQtcGFkZGluZy14OiAuNDM3NXJlbTtcXG4vLyRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LXBhZGRpbmcteS1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LXBhZGRpbmcteC1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGlucHV0LWRpc2FibGVkLWJnOiAjZWNlZWVmO1xcblxcbiRpbnB1dC1jb2xvcjogJGJvZHktY29sb3I7XFxuJGlucHV0LWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZm9jdXMtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kaW5wdXQtZm9jdXMtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbi8vJGlucHV0LWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAqIDIgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQpICsgKCRpbnB1dC1idG4tcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodDogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyLXNtOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtc20gKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAqIDIpICFkZWZhdWx0O1xcbi8vJGlucHV0LWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyLXNtfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItbGc6ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1sZyAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcpICsgKCRpbnB1dC1idG4tcGFkZGluZy15LWxnICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodC1sZzogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbnB1dC1ndXR0ZXI6ICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi15OiAgICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi14OiAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtbWFyZ2luLXg6ICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5saW5lLWlucHV0LW1hcmdpbi14OiAgICAgIC4zMTI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yOiAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1ndXR0ZXI6ICAgICAgICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtc3BhY2VyLXg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3Itc2l6ZTogICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYmctc2l6ZTogICAgICA1MCUgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1ib3gtc2hhZG93OiAgIGluc2V0IDAgLjI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1kaXNhYmxlZC1iZzogICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWxhYmVsLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1kaXNhYmxlZC1iZzogIHJnYmEodGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSwgLjUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJveC1zaGFkb3c6ICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtY29sb3I6ICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAzNSUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYm94LXNoYWRvdzogICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nIGQ9J002LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yOiAkY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWluZGV0ZXJtaW5hdGU6ICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM0UlM0NwYXRoIHN0cm9rZT0nI3skY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yfScgZD0nTTAgMmg0Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1ib3gtc2hhZG93OiBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgICAgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM0UlM0NjaXJjbGUgcj0nMycgZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0OiAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nOiAgIDFyZW0gIWRlZmF1bHQ7IC8vIEV4dHJhIHBhZGRpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBiYWNrZ3JvdW5kLWltYWdlIGJhc2VkIGluZGljYXRvclxcbi8vJGN1c3RvbS1zZWxlY3QtbGluZS1oZWlnaHQ6ICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJGN1c3RvbS1zZWxlY3QtYmc6ICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWJnOiAkaW5wdXQtZGlzYWJsZWQtYmc7XFxuJGN1c3RvbS1zZWxlY3QtYmctc2l6ZTogOHB4IDEwcHggIWRlZmF1bHQ7IC8vIEluIHBpeGVscyBiZWNhdXNlIGltYWdlIGRpbWVuc2lvbnNcXG4kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3I6ICRpbnB1dC1jb2xvcjtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXdpZHRoOiAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yO1xcbiRjdXN0b20tc2VsZWN0LWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgNzUlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LXNtOiAgICAgICAgICAgJGlucHV0LWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1sZzogICAgICAgIDEyNSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtbGc6ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1maWxlLWhlaWdodDogICAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1mb2N1cy1ib3JkZXItY29sb3I6ICAgICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1maWxlLXBhZGRpbmcteTogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy14OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1saW5lLWhlaWdodDogICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtY29sb3I6ICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYmc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXJhZGl1czogICAgICAgICAkaW5wdXQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3gtc2hhZG93OiAgICAgICAgICAgICRpbnB1dC1ib3gtc2hhZG93ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1jb2xvcjogICAgICAgICAgJGN1c3RvbS1maWxlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1iZzogICAgICAgICAgICAgJGlucHV0LWdyb3VwLWFkZG9uLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLXRleHQ6IChcXG4vLyAgICAgICAgZW46IFxcXCJCcm93c2VcXFwiXFxuLy8pICFkZWZhdWx0O1xcblxcbiRjdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkOyAvLyBQUyBjdXN0b21cXG5cXG4vLyBGb3JtIHZhbGlkYXRpb25cXG4vLyRmb3JtLWZlZWRiYWNrLW1hcmdpbi10b3A6ICAgICAgICAgICRmb3JtLXRleHQtbWFyZ2luLXRvcCAhZGVmYXVsdDtcXG4vLyRmb3JtLWZlZWRiYWNrLWZvbnQtc2l6ZTogICAgICAgICAgICRzbWFsbC1mb250LXNpemUgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIik7XFxuJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpO1xcbiRmb3JtLWZlZWRiYWNrLXdhcm5pbmctY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIik7IC8vIFBTIGN1c3RvbVxcblxcbi8vIERyb3Bkb3duc1xcbi8vJGRyb3Bkb3duLW1pbi13aWR0aDogICAgICAgICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLXBhZGRpbmcteTogMDtcXG4vLyRkcm9wZG93bi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLXNwYWNlcjogICAgICAgICAgICAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tZGl2aWRlci1iZzogJGxpZ2h0LWdyYXk7XFxuLy8kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNzUpICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICR3aGl0ZTtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6IC4zMTI1cmVtO1xcblxcbi8vJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vIE5hdnNcXG4kbmF2LWxpbmstcGFkZGluZy15OiAuOTM3NXJlbTtcXG4kbmF2LWxpbmstcGFkZGluZy14OiAxLjI1cmVtO1xcbiRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuXFxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogJHdoaXRlO1xcbi8vJG5hdi10YWJzLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZzogJGJvZHktYmc7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4kbmF2LXBpbGxzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yO1xcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICNmNGY5ZmI7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I7IC8vIFBTIGN1c3RvbVxcblxcbi8vJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbi8vIE5hdmJhclxcbi8vJG5hdmJhci1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItYnJhbmQtZm9udC1zaXplOiAgICAgICAgICAgICRmb250LXNpemUtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLWhlaWdodDogICAgICAgICAgICAgICAkbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZSAqICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1icmFuZC1wYWRkaW5nLXk6ICAgICAgICAgICAgKCRuYXYtbGluay1oZWlnaHQgLSAkbmF2YmFyLWJyYW5kLWhlaWdodCkgLyAyICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4vLyRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItZGFyay1jb2xvcjogICAgICAgICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstaG92ZXItY29sb3I6ICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjc1KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcjogICAgICAgIHJnYmEoJHdoaXRlLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItaWNvbi1iZzogICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWRhcmstY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjogIHJnYmEoJHdoaXRlLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLWxpZ2h0LWNvbG9yOiAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1ob3Zlci1jb2xvcjogICAgICAgICAgcmdiYSgkYmxhY2ssIC43KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEoJGJsYWNrLCAuOSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWRpc2FibGVkLWNvbG9yOiAgICAgICByZ2JhKCRibGFjaywgLjMpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC10b2dnbGVyLWljb24tYmc6ICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWxpZ2h0LWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vIFBhZ2luYXRpb25cXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6IC42NXJlbTtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy14LXNtOiAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1saW5lLWhlaWdodDogICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJHBhZ2luYXRpb24tYmc6ICR3aGl0ZTtcXG4vLyRwYWdpbmF0aW9uLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuLy8kcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24taG92ZXItY29sb3I6ICRwYWdpbmF0aW9uLWNvbG9yO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkcGFnaW5hdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4vLyBKdW1ib3Ryb25cXG4kanVtYm90cm9uLXBhZGRpbmc6IDJyZW0gIWRlZmF1bHQ7XFxuJGp1bWJvdHJvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuXFxuLy8gQ2FyZHNcXG4kY2FyZC1zcGFjZXIteDogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1zcGFjZXIteTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzOiA1cHggIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXJhZGl1cy1pbm5lcjogJGNhcmQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY2FyZC1jYXAtYmc6ICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kY2FyZC1iZzogI2ZmZiAhZGVmYXVsdDtcXG4kY2FyZC1saW5rLWhvdmVyLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1jb2xvcjogI2RiZTZlOSAhZGVmYXVsdDtcXG4vLyRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIGNhbGMoI3skY2FyZC1ib3JkZXItcmFkaXVzfSAtICN7JGNhcmQtYm9yZGVyLXdpZHRofSkgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjAzKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWltZy1vdmVybGF5LXBhZGRpbmc6ICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1ncm91cC1tYXJnaW46ICAgICAgICAgICAgICAgICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikgIWRlZmF1bHQ7XFxuLy8kY2FyZC1kZWNrLW1hcmdpbjogICAgICAgICAgICAgICAgICAkY2FyZC1ncm91cC1tYXJnaW4gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1jb2x1bW5zLWNvdW50OiAgICAgICAgICAgICAgICAzICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1nYXA6ICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNvbHVtbnMtbWFyZ2luOiAgICAgICAgICAgICAgICRjYXJkLXNwYWNlci15ICFkZWZhdWx0O1xcblxcbi8vIFRvb2x0aXBzXFxuLy8kdG9vbHRpcC1mb250LXNpemU6ICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1jb2xvcjogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYmc6ICRtZWRpdW0tZ3JheTtcXG4vLyR0b29sdGlwLWJvcmRlci1yYWRpdXM6ICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLW9wYWNpdHk6ICAgICAgICAgICAgIC45ICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kdG9vbHRpcC1wYWRkaW5nLXg6IDEuMjVyZW07XFxuLy8kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAwICFkZWZhdWx0O1xcblxcbi8vJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgLjhyZW0gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1hcnJvdy1oZWlnaHQ6ICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWNvbG9yOiAgICAgICAgICR0b29sdGlwLWJnICFkZWZhdWx0O1xcblxcbi8vIFBvcG92ZXJzXFxuLy8kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3gtc2hhZG93OiBub25lO1xcblxcbiRwb3BvdmVyLWhlYWRlci1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy14OiAxLjI1cmVtO1xcblxcbi8vJHBvcG92ZXItYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXk6IC42MjVyZW07XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYXJyb3ctaGVpZ2h0OiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcXG5cXG4vLyRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xcblxcbi8vIEJhZGdlc1xcbiRiYWRnZS1mb250LXNpemU6IC42MjVyZW0gIWRlZmF1bHQ7XFxuJGJhZGdlLWZvbnQtd2VpZ2h0OiA1MDAgIWRlZmF1bHQ7XFxuJGJhZGdlLXBhZGRpbmcteTogLjI1cmVtO1xcbiRiYWRnZS1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJGJhZGdlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuLy8kYmFkZ2UtcGlsbC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNmVtICFkZWZhdWx0O1xcbi8vJGJhZGdlLXBpbGwtYm9yZGVyLXJhZGl1czogICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuXFxuLy8gTW9kYWxzXFxuJG1vZGFsLWlubmVyLXBhZGRpbmc6IDEuODc1cmVtO1xcblxcbi8vJG1vZGFsLWRpYWxvZy1tYXJnaW46ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbi15LXNtLXVwOiAxLjc1cmVtICFkZWZhdWx0O1xcblxcbi8vJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yOiBub25lO1xcbi8vJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1zbS11cDogMCA4cHggMTZweCAwIHJnYmEoMCwgMCwgMCwgLjEpO1xcblxcbi8vJG1vZGFsLWJhY2tkcm9wLWJnOiAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgLjUgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjogICAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XFxuXFxuJG1vZGFsLWxnOiA5MDBweDtcXG4kbW9kYWwtbWQ6IDY4MHB4O1xcbiRtb2RhbC1zbTogNDAwcHg7XFxuXFxuLy8kbW9kYWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0ICFkZWZhdWx0O1xcblxcbi8vIEFsZXJ0c1xcbiRhbGVydC1wYWRkaW5nLXk6IDFyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LXBhZGRpbmcteDogMXJlbTtcXG4vLyRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRhbGVydC1saW5rLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItd2lkdGg6IC4xMjVyZW07XFxuXFxuLy8kYWxlcnQtYmctbGV2ZWw6ICAgICAgICAgICAgICAgICAgICAtMTAgIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLWxldmVsOiAgICAgICAgICAgICAgICAtOSAhZGVmYXVsdDtcXG4vLyRhbGVydC1jb2xvci1sZXZlbDogICAgICAgICAgICAgICAgIDYgIWRlZmF1bHQ7XFxuXFxuLy8gUHJvZ3Jlc3MgYmFyc1xcbi8vJHByb2dyZXNzLWhlaWdodDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1mb250LXNpemU6ICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAuNzUpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm94LXNoYWRvdzogICAgICAgICAgICAgICBpbnNldCAwIC4xcmVtIC4xcmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci1hbmltYXRpb24tdGltaW5nOiAgICAgMXMgbGluZWFyIGluZmluaXRlICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci10cmFuc2l0aW9uOiAgICAgICAgICAgd2lkdGggLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gTGlzdCBncm91cFxcbi8vJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1czogICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXk6ICRpbnB1dC1wYWRkaW5nLXk7XFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICRpbnB1dC1wYWRkaW5nLXg7XFxuXFxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc6ICAgICAgICAgICAgJGxpc3QtZ3JvdXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWhvdmVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcblxcbi8vIEltYWdlIHRodW1ibmFpbHNcXG4kdGh1bWJuYWlsLXBhZGRpbmc6IDA7XFxuLy8kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG4vLyR0aHVtYm5haWwtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vIEZpZ3VyZXNcXG4vLyRmaWd1cmUtY2FwdGlvbi1mb250LXNpemU6ICAgICAgICAgIDkwJSAhZGVmYXVsdDtcXG4kZmlndXJlLWNhcHRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyBCcmVhZGNydW1ic1xcbiRicmVhZGNydW1iLXBhZGRpbmcteTogLjMxMjVyZW07XFxuJGJyZWFkY3J1bWItcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1pdGVtLXBhZGRpbmc6IC4zcmVtO1xcblxcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206IDA7XFxuXFxuJGJyZWFkY3J1bWItYmc6IG5vbmU7XFxuJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjogJGRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICRleHRyYS1kYXJrLWdyYXk7XFxuJGJyZWFkY3J1bWItZGl2aWRlcjogXFxcIi9cXFwiO1xcblxcbi8vIENhcm91c2VsXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAxNSUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itd2lkdGg6ICAgICAgICAgIDMwcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLXNwYWNlcjogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi13aWR0aDogICAgICAgICAgICA3MCUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAgICAgICAyMHB4ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J00yLjc1IDBsLTEuNSAxLjUgMi41IDIuNS0yLjUgMi41IDEuNSAxLjUgNC00LTQtNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gQ2xvc2VcXG4vLyRjbG9zZS1mb250LXNpemU6ICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNSAhZGVmYXVsdDtcXG4vLyRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbi8vJGNsb3NlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gQ29kZVxcbi8vJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgODcuNSUgIWRlZmF1bHQ7XFxuJGNvZGUtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbi8vJGtiZC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuLy8ka2JkLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgICRjb2RlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4ka2JkLWNvbG9yOiAkd2hpdGU7XFxuJGtiZC1iZzogJGV4dHJhLWRhcmstZ3JheTtcXG5cXG4kcHJlLWNvbG9yOiAkYm9keS1jb2xvcjtcXG4vLyRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgICAgICAgIDM0MHB4ICFkZWZhdWx0O1xcblxcbi8vIFByaW50aW5nXFxuLy8kcHJpbnQtcGFnZS1zaXplOiAgICAgICAgICAgICAgICAgICBhMyAhZGVmYXVsdDtcXG4vLyRwcmludC1ib2R5LW1pbi13aWR0aDogICAgICAgICAgICAgIG1hcC1nZXQoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCJsZ1xcXCIpICFkZWZhdWx0O1xcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5tb2RhbC1oZWFkZXIgLmNsb3NlW2RhdGEtdi0xN2JhMmI0ZV17Zm9udC1zaXplOjEuMnJlbTtjb2xvcjojNmM4NjhlO29wYWNpdHk6MX0ubW9kYWwtY29udGVudFtkYXRhLXYtMTdiYTJiNGVde2JvcmRlci1yYWRpdXM6MH1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9hcHAvd2lkZ2V0cy9wcy1tb2RhbC52dWVcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9wcmVzdGFraXQvc2Nzcy9fdmFyaWFibGVzLnNjc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBc0hBLHNDQUNFLGdCQUFpQixDQUNqQixhQzdHZ0IsQ0Q4R2hCLFNBQVUsQ0FDWCxnQ0FFQyxlQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xcblxcbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbiAgY29sb3I6ICRncmF5LW1lZGl1bTtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5tb2RhbC1jb250ZW50IHtcXG4gIGJvcmRlci1yYWRpdXM6IDBcXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuOyhmdW5jdGlvbigpIHtcblxuICAvKiogVXNlZCBhcyBhIHNhZmUgcmVmZXJlbmNlIGZvciBgdW5kZWZpbmVkYCBpbiBwcmUtRVM1IGVudmlyb25tZW50cy4gKi9cbiAgdmFyIHVuZGVmaW5lZDtcblxuICAvKiogVXNlZCBhcyB0aGUgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIuICovXG4gIHZhciBWRVJTSU9OID0gJzQuMTcuMjEnO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xuICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuICAvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG4gIHZhciBDT1JFX0VSUk9SX1RFWFQgPSAnVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuJyxcbiAgICAgIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJyxcbiAgICAgIElOVkFMSURfVEVNUExfVkFSX0VSUk9SX1RFWFQgPSAnSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAnO1xuXG4gIC8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbiAgdmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbiAgdmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xuICB2YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbiAgdmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbiAgdmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICB2YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuICAvKiogVXNlZCBhcyBkZWZhdWx0IG9wdGlvbnMgZm9yIGBfLnRydW5jYXRlYC4gKi9cbiAgdmFyIERFRkFVTFRfVFJVTkNfTEVOR1RIID0gMzAsXG4gICAgICBERUZBVUxUX1RSVU5DX09NSVNTSU9OID0gJy4uLic7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xuICB2YXIgSE9UX0NPVU5UID0gODAwLFxuICAgICAgSE9UX1NQQU4gPSAxNjtcblxuICAvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi9cbiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgICAgTEFaWV9NQVBfRkxBRyA9IDIsXG4gICAgICBMQVpZX1dISUxFX0ZMQUcgPSAzO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xuICB2YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxuICAgICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCxcbiAgICAgIE5BTiA9IDAgLyAwO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG4gIHZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICAgIE1BWF9BUlJBWV9JTkRFWCA9IE1BWF9BUlJBWV9MRU5HVEggLSAxLFxuICAgICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTtcblxuICAvKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xuICB2YXIgd3JhcEZsYWdzID0gW1xuICAgIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gICAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICAgIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gICAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gICAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gICAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICAgIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICAgIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG4gIF07XG5cbiAgLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xuICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICAgIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICAgIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XScsXG4gICAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLFxuICAgICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJyxcbiAgICAgIHdlYWtTZXRUYWcgPSAnW29iamVjdCBXZWFrU2V0XSc7XG5cbiAgdmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xuICB2YXIgcmVFbXB0eVN0cmluZ0xlYWRpbmcgPSAvXFxiX19wIFxcKz0gJyc7L2csXG4gICAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlZEh0bWwgPSAvJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csXG4gICAgICByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICAgIHJlSGFzRXNjYXBlZEh0bWwgPSBSZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLFxuICAgICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVFdmFsdWF0ZSA9IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xuICB2YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLyxcbiAgICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAgICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbiAgdmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xuICB2YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy8sXG4gICAgICByZVdyYXBEZXRhaWxzID0gL1xce1xcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggKC4rKVxcXSBcXCovLFxuICAgICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHdvcmRzIGNvbXBvc2VkIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVBc2NpaVdvcmQgPSAvW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdmFsaWRhdGUgdGhlIGB2YWxpZGF0ZWAgb3B0aW9uIGluIGBfLnRlbXBsYXRlYCB2YXJpYWJsZS5cbiAgICpcbiAgICogRm9yYmlkcyBjaGFyYWN0ZXJzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnQgZGVmaW5pdGlvbjpcbiAgICogLSBcIigpLFwiIChtb2RpZmljYXRpb24gb2YgZnVuY3Rpb24gcGFyYW1ldGVycylcbiAgICogLSBcIj1cIiAoZGVmYXVsdCB2YWx1ZSlcbiAgICogLSBcIltde31cIiAoZGVzdHJ1Y3R1cmluZyBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKVxuICAgKiAtIFwiL1wiIChiZWdpbm5pbmcgb2YgYSBjb21tZW50KVxuICAgKiAtIHdoaXRlc3BhY2VcbiAgICovXG4gIHZhciByZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycyA9IC9bKCk9LHt9XFxbXFxdXFwvXFxzXS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaFxuICAgKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICAgKi9cbiAgdmFyIHJlRXNUZW1wbGF0ZSA9IC9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG4gIHZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG4gIHZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggTGF0aW4gVW5pY29kZSBsZXR0ZXJzIChleGNsdWRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdG9ycykuICovXG4gIHZhciByZUxhdGluID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2c7XG5cbiAgLyoqIFVzZWQgdG8gZW5zdXJlIGNhcHR1cmluZyBvcmRlciBvZiB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xuICB2YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbiAgdmFyIHJlVW5lc2NhcGVkU3RyaW5nID0gL1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbiAgdmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgICByc0RpbmdiYXRSYW5nZSA9ICdcXFxcdTI3MDAtXFxcXHUyN2JmJyxcbiAgICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLFxuICAgICAgcnNNYXRoT3BSYW5nZSA9ICdcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3JyxcbiAgICAgIHJzTm9uQ2hhclJhbmdlID0gJ1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZicsXG4gICAgICByc1B1bmN0dWF0aW9uUmFuZ2UgPSAnXFxcXHUyMDAwLVxcXFx1MjA2ZicsXG4gICAgICByc1NwYWNlUmFuZ2UgPSAnIFxcXFx0XFxcXHgwYlxcXFxmXFxcXHhhMFxcXFx1ZmVmZlxcXFxuXFxcXHJcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdTE2ODBcXFxcdTE4MGVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMGFcXFxcdTIwMmZcXFxcdTIwNWZcXFxcdTMwMDAnLFxuICAgICAgcnNVcHBlclJhbmdlID0gJ0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZScsXG4gICAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgICByc0JyZWFrUmFuZ2UgPSByc01hdGhPcFJhbmdlICsgcnNOb25DaGFyUmFuZ2UgKyByc1B1bmN0dWF0aW9uUmFuZ2UgKyByc1NwYWNlUmFuZ2U7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xuICB2YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCIsXG4gICAgICByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgICByc0JyZWFrID0gJ1snICsgcnNCcmVha1JhbmdlICsgJ10nLFxuICAgICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICAgIHJzRGlnaXRzID0gJ1xcXFxkKycsXG4gICAgICByc0RpbmdiYXQgPSAnWycgKyByc0RpbmdiYXRSYW5nZSArICddJyxcbiAgICAgIHJzTG93ZXIgPSAnWycgKyByc0xvd2VyUmFuZ2UgKyAnXScsXG4gICAgICByc01pc2MgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArIHJzQnJlYWtSYW5nZSArIHJzRGlnaXRzICsgcnNEaW5nYmF0UmFuZ2UgKyByc0xvd2VyUmFuZ2UgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICAgIHJzVXBwZXIgPSAnWycgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xuICB2YXIgcnNNaXNjTG93ZXIgPSAnKD86JyArIHJzTG93ZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgICByc01pc2NVcHBlciA9ICcoPzonICsgcnNVcHBlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICAgIHJzT3B0Q29udHJMb3dlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OmR8bGx8bXxyZXxzfHR8dmUpKT8nLFxuICAgICAgcnNPcHRDb250clVwcGVyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86RHxMTHxNfFJFfFN8VHxWRSkpPycsXG4gICAgICByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICAgIHJzT3JkTG93ZXIgPSAnXFxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxcXGR0aCkoPz1cXFxcYnxbQS1aX10pJyxcbiAgICAgIHJzT3JkVXBwZXIgPSAnXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pJyxcbiAgICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICAgIHJzRW1vamkgPSAnKD86JyArIFtyc0RpbmdiYXQsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzU2VxLFxuICAgICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYXBvc3Ryb3BoZXMuICovXG4gIHZhciByZUFwb3MgPSBSZWdFeHAocnNBcG9zLCAnZycpO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykgYW5kXG4gICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19mb3JfU3ltYm9scykuXG4gICAqL1xuICB2YXIgcmVDb21ib01hcmsgPSBSZWdFeHAocnNDb21ibywgJ2cnKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xuICB2YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi9cbiAgdmFyIHJlVW5pY29kZVdvcmQgPSBSZWdFeHAoW1xuICAgIHJzVXBwZXIgKyAnPycgKyByc0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gICAgcnNNaXNjVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyICsgcnNNaXNjTG93ZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICAgIHJzVXBwZXIgKyAnPycgKyByc01pc2NMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlcixcbiAgICByc1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyLFxuICAgIHJzT3JkVXBwZXIsXG4gICAgcnNPcmRMb3dlcixcbiAgICByc0RpZ2l0cyxcbiAgICByc0Vtb2ppXG4gIF0uam9pbignfCcpLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xuICB2YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG4gIHZhciByZUhhc1VuaWNvZGVXb3JkID0gL1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS87XG5cbiAgLyoqIFVzZWQgdG8gYXNzaWduIGRlZmF1bHQgYGNvbnRleHRgIG9iamVjdCBwcm9wZXJ0aWVzLiAqL1xuICB2YXIgY29udGV4dFByb3BzID0gW1xuICAgICdBcnJheScsICdCdWZmZXInLCAnRGF0YVZpZXcnLCAnRGF0ZScsICdFcnJvcicsICdGbG9hdDMyQXJyYXknLCAnRmxvYXQ2NEFycmF5JyxcbiAgICAnRnVuY3Rpb24nLCAnSW50OEFycmF5JywgJ0ludDE2QXJyYXknLCAnSW50MzJBcnJheScsICdNYXAnLCAnTWF0aCcsICdPYmplY3QnLFxuICAgICdQcm9taXNlJywgJ1JlZ0V4cCcsICdTZXQnLCAnU3RyaW5nJywgJ1N5bWJvbCcsICdUeXBlRXJyb3InLCAnVWludDhBcnJheScsXG4gICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ1VpbnQxNkFycmF5JywgJ1VpbnQzMkFycmF5JywgJ1dlYWtNYXAnLFxuICAgICdfJywgJ2NsZWFyVGltZW91dCcsICdpc0Zpbml0ZScsICdwYXJzZUludCcsICdzZXRUaW1lb3V0J1xuICBdO1xuXG4gIC8qKiBVc2VkIHRvIG1ha2UgdGVtcGxhdGUgc291cmNlVVJMcyBlYXNpZXIgdG8gaWRlbnRpZnkuICovXG4gIHZhciB0ZW1wbGF0ZUNvdW50ZXIgPSAtMTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG4gIHZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xuICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICB0eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbiAgdmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbiAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbiAgY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbiAgY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBMYXRpbiBVbmljb2RlIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy4gKi9cbiAgdmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgICAvLyBMYXRpbi0xIFN1cHBsZW1lbnQgYmxvY2suXG4gICAgJ1xceGMwJzogJ0EnLCAgJ1xceGMxJzogJ0EnLCAnXFx4YzInOiAnQScsICdcXHhjMyc6ICdBJywgJ1xceGM0JzogJ0EnLCAnXFx4YzUnOiAnQScsXG4gICAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICAgJ1xceGM3JzogJ0MnLCAgJ1xceGU3JzogJ2MnLFxuICAgICdcXHhkMCc6ICdEJywgICdcXHhmMCc6ICdkJyxcbiAgICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAgICdcXHhlOCc6ICdlJywgICdcXHhlOSc6ICdlJywgJ1xceGVhJzogJ2UnLCAnXFx4ZWInOiAnZScsXG4gICAgJ1xceGNjJzogJ0knLCAgJ1xceGNkJzogJ0knLCAnXFx4Y2UnOiAnSScsICdcXHhjZic6ICdJJyxcbiAgICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAgICdcXHhkMSc6ICdOJywgICdcXHhmMSc6ICduJyxcbiAgICAnXFx4ZDInOiAnTycsICAnXFx4ZDMnOiAnTycsICdcXHhkNCc6ICdPJywgJ1xceGQ1JzogJ08nLCAnXFx4ZDYnOiAnTycsICdcXHhkOCc6ICdPJyxcbiAgICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgICAnXFx4ZDknOiAnVScsICAnXFx4ZGEnOiAnVScsICdcXHhkYic6ICdVJywgJ1xceGRjJzogJ1UnLFxuICAgICdcXHhmOSc6ICd1JywgICdcXHhmYSc6ICd1JywgJ1xceGZiJzogJ3UnLCAnXFx4ZmMnOiAndScsXG4gICAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICAgJ1xceGM2JzogJ0FlJywgJ1xceGU2JzogJ2FlJyxcbiAgICAnXFx4ZGUnOiAnVGgnLCAnXFx4ZmUnOiAndGgnLFxuICAgICdcXHhkZic6ICdzcycsXG4gICAgLy8gTGF0aW4gRXh0ZW5kZWQtQSBibG9jay5cbiAgICAnXFx1MDEwMCc6ICdBJywgICdcXHUwMTAyJzogJ0EnLCAnXFx1MDEwNCc6ICdBJyxcbiAgICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgICAnXFx1MDEwNic6ICdDJywgICdcXHUwMTA4JzogJ0MnLCAnXFx1MDEwYSc6ICdDJywgJ1xcdTAxMGMnOiAnQycsXG4gICAgJ1xcdTAxMDcnOiAnYycsICAnXFx1MDEwOSc6ICdjJywgJ1xcdTAxMGInOiAnYycsICdcXHUwMTBkJzogJ2MnLFxuICAgICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgICAnXFx1MDExMic6ICdFJywgICdcXHUwMTE0JzogJ0UnLCAnXFx1MDExNic6ICdFJywgJ1xcdTAxMTgnOiAnRScsICdcXHUwMTFhJzogJ0UnLFxuICAgICdcXHUwMTEzJzogJ2UnLCAgJ1xcdTAxMTUnOiAnZScsICdcXHUwMTE3JzogJ2UnLCAnXFx1MDExOSc6ICdlJywgJ1xcdTAxMWInOiAnZScsXG4gICAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAgICdcXHUwMTFkJzogJ2cnLCAgJ1xcdTAxMWYnOiAnZycsICdcXHUwMTIxJzogJ2cnLCAnXFx1MDEyMyc6ICdnJyxcbiAgICAnXFx1MDEyNCc6ICdIJywgICdcXHUwMTI2JzogJ0gnLCAnXFx1MDEyNSc6ICdoJywgJ1xcdTAxMjcnOiAnaCcsXG4gICAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgICAnXFx1MDEyOSc6ICdpJywgICdcXHUwMTJiJzogJ2knLCAnXFx1MDEyZCc6ICdpJywgJ1xcdTAxMmYnOiAnaScsICdcXHUwMTMxJzogJ2knLFxuICAgICdcXHUwMTM0JzogJ0onLCAgJ1xcdTAxMzUnOiAnaicsXG4gICAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICAgJ1xcdTAxMzknOiAnTCcsICAnXFx1MDEzYic6ICdMJywgJ1xcdTAxM2QnOiAnTCcsICdcXHUwMTNmJzogJ0wnLCAnXFx1MDE0MSc6ICdMJyxcbiAgICAnXFx1MDEzYSc6ICdsJywgICdcXHUwMTNjJzogJ2wnLCAnXFx1MDEzZSc6ICdsJywgJ1xcdTAxNDAnOiAnbCcsICdcXHUwMTQyJzogJ2wnLFxuICAgICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgICAnXFx1MDE0NCc6ICduJywgICdcXHUwMTQ2JzogJ24nLCAnXFx1MDE0OCc6ICduJywgJ1xcdTAxNGInOiAnbicsXG4gICAgJ1xcdTAxNGMnOiAnTycsICAnXFx1MDE0ZSc6ICdPJywgJ1xcdTAxNTAnOiAnTycsXG4gICAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICAgJ1xcdTAxNTQnOiAnUicsICAnXFx1MDE1Nic6ICdSJywgJ1xcdTAxNTgnOiAnUicsXG4gICAgJ1xcdTAxNTUnOiAncicsICAnXFx1MDE1Nyc6ICdyJywgJ1xcdTAxNTknOiAncicsXG4gICAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAgICdcXHUwMTViJzogJ3MnLCAgJ1xcdTAxNWQnOiAncycsICdcXHUwMTVmJzogJ3MnLCAnXFx1MDE2MSc6ICdzJyxcbiAgICAnXFx1MDE2Mic6ICdUJywgICdcXHUwMTY0JzogJ1QnLCAnXFx1MDE2Nic6ICdUJyxcbiAgICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgICAnXFx1MDE2OCc6ICdVJywgICdcXHUwMTZhJzogJ1UnLCAnXFx1MDE2Yyc6ICdVJywgJ1xcdTAxNmUnOiAnVScsICdcXHUwMTcwJzogJ1UnLCAnXFx1MDE3Mic6ICdVJyxcbiAgICAnXFx1MDE2OSc6ICd1JywgICdcXHUwMTZiJzogJ3UnLCAnXFx1MDE2ZCc6ICd1JywgJ1xcdTAxNmYnOiAndScsICdcXHUwMTcxJzogJ3UnLCAnXFx1MDE3Myc6ICd1JyxcbiAgICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAgICdcXHUwMTc2JzogJ1knLCAgJ1xcdTAxNzcnOiAneScsICdcXHUwMTc4JzogJ1knLFxuICAgICdcXHUwMTc5JzogJ1onLCAgJ1xcdTAxN2InOiAnWicsICdcXHUwMTdkJzogJ1onLFxuICAgICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAgICdcXHUwMTMyJzogJ0lKJywgJ1xcdTAxMzMnOiAnaWonLFxuICAgICdcXHUwMTUyJzogJ09lJywgJ1xcdTAxNTMnOiAnb2UnLFxuICAgICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG4gIHZhciBodG1sRXNjYXBlcyA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzM5OydcbiAgfTtcblxuICAvKiogVXNlZCB0byBtYXAgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgaHRtbFVuZXNjYXBlcyA9IHtcbiAgICAnJmFtcDsnOiAnJicsXG4gICAgJyZsdDsnOiAnPCcsXG4gICAgJyZndDsnOiAnPicsXG4gICAgJyZxdW90Oyc6ICdcIicsXG4gICAgJyYjMzk7JzogXCInXCJcbiAgfTtcblxuICAvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbiAgdmFyIHN0cmluZ0VzY2FwZXMgPSB7XG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgXCInXCI6IFwiJ1wiLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbiAgdmFyIGZyZWVQYXJzZUZsb2F0ID0gcGFyc2VGbG9hdCxcbiAgICAgIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG4gIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xuICB2YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuICAvKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbiAgdmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbiAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbiAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuICAvKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xuICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbiAgLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG4gIHZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgICAgaWYgKHR5cGVzKSB7XG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICAgIH1cblxuICAgICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9KCkpO1xuXG4gIC8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG4gIHZhciBub2RlSXNBcnJheUJ1ZmZlciA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzQXJyYXlCdWZmZXIsXG4gICAgICBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlLFxuICAgICAgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXAsXG4gICAgICBub2RlSXNSZWdFeHAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1JlZ0V4cCxcbiAgICAgIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0LFxuICAgICAgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvKipcbiAgICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVtsZW5ndGhdLCBsZW5ndGgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgKiBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzXG4gICAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlSZWR1Y2VSaWdodChhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbLS1sZW5ndGhdO1xuICAgIH1cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgKiBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAqICBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYW4gQVNDSUkgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIHZhciBhc2NpaVNpemUgPSBiYXNlUHJvcGVydHkoJ2xlbmd0aCcpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFzY2lpV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmZpbmRLZXlgIGFuZCBgXy5maW5kTGFzdEtleWAsXG4gICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmBcbiAgICogdXNpbmcgYGVhY2hGdW5jYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZm91bmQgZWxlbWVudCBvciBpdHMga2V5LCBlbHNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUZpbmRLZXkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBlYWNoRnVuYykge1xuICAgIHZhciByZXN1bHQ7XG4gICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSkge1xuICAgICAgICByZXN1bHQgPSBrZXk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAgICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlSW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2ZXaXRoKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVhbmAgYW5kIGBfLm1lYW5CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZU1lYW4oYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgIHJldHVybiBsZW5ndGggPyAoYmFzZVN1bShhcnJheSwgaXRlcmF0ZWUpIC8gbGVuZ3RoKSA6IE5BTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlZHVjZWAgYW5kIGBfLnJlZHVjZVJpZ2h0YCwgd2l0aG91dCBzdXBwb3J0XG4gICAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYCB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdEFjY3VtIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IG9yIGxhc3QgZWxlbWVudCBvZlxuICAgKiAgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgZWFjaEZ1bmMpIHtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaW5pdEFjY3VtXG4gICAgICAgID8gKGluaXRBY2N1bSA9IGZhbHNlLCB2YWx1ZSlcbiAgICAgICAgOiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICAgKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNyaXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nXG4gICAqIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICBhcnJheS5zb3J0KGNvbXBhcmVyKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGFycmF5W2xlbmd0aF0gPSBhcnJheVtsZW5ndGhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc3VtYCBhbmQgYF8uc3VtQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVN1bShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgcmVzdWx0LFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBpdGVyYXRlZShhcnJheVtpbmRleF0pO1xuICAgICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGN1cnJlbnQgOiAocmVzdWx0ICsgY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICAgKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvUGFpcnNgIGFuZCBgXy50b1BhaXJzSW5gIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXlcbiAgICogb2Yga2V5LXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBgcHJvcHNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRvUGFpcnMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nXG4gICAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgICAgOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAgICogb2YgYHByb3BzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICAgIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltU3RhcnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSAwO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgKytyZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuXG4gICAqL1xuICB2YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSB3b3JkIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlV29yZC50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICAgIHZhciBkYXRhLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gaXRzIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldFRvUGFpcnMoc2V0KSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICAgIDogYXNjaWlTaXplKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAgICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICAgIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIHZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVVbmljb2RlLmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKHJlVW5pY29kZS50ZXN0KHN0cmluZykpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJpc3RpbmUgYGxvZGFzaGAgZnVuY3Rpb24gdXNpbmcgdGhlIGBjb250ZXh0YCBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDEuMS4wXG4gICAqIEBjYXRlZ29yeSBVdGlsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dD1yb290XSBUaGUgY29udGV4dCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBhIG5ldyBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5taXhpbih7ICdmb28nOiBfLmNvbnN0YW50KCdmb28nKSB9KTtcbiAgICpcbiAgICogdmFyIGxvZGFzaCA9IF8ucnVuSW5Db250ZXh0KCk7XG4gICAqIGxvZGFzaC5taXhpbih7ICdiYXInOiBsb2Rhc2guY29uc3RhbnQoJ2JhcicpIH0pO1xuICAgKlxuICAgKiBfLmlzRnVuY3Rpb24oXy5mb28pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqIF8uaXNGdW5jdGlvbihfLmJhcik7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5mb28pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guYmFyKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiAvLyBDcmVhdGUgYSBzdXBlZC11cCBgZGVmZXJgIGluIE5vZGUuanMuXG4gICAqIHZhciBkZWZlciA9IF8ucnVuSW5Db250ZXh0KHsgJ3NldFRpbWVvdXQnOiBzZXRJbW1lZGlhdGUgfSkuZGVmZXI7XG4gICAqL1xuICB2YXIgcnVuSW5Db250ZXh0ID0gKGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgPT0gbnVsbCA/IHJvb3QgOiBfLmRlZmF1bHRzKHJvb3QuT2JqZWN0KCksIGNvbnRleHQsIF8ucGljayhyb290LCBjb250ZXh0UHJvcHMpKTtcblxuICAgIC8qKiBCdWlsdC1pbiBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0Lk9iamVjdCxcbiAgICAgICAgUmVnRXhwID0gY29udGV4dC5SZWdFeHAsXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0LlR5cGVFcnJvcjtcblxuICAgIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICAgICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG4gICAgdmFyIGNvcmVKc0RhdGEgPSBjb250ZXh0WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgICAvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xuICAgIHZhciBpZENvdW50ZXIgPSAwO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbiAgICB2YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gICAgICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAgICAgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAgICAgKiBvZiB2YWx1ZXMuXG4gICAgICovXG4gICAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG4gICAgdmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbiAgICApO1xuXG4gICAgLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBjb250ZXh0LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3ltYm9sID0gY29udGV4dC5TeW1ib2wsXG4gICAgICAgIFVpbnQ4QXJyYXkgPSBjb250ZXh0LlVpbnQ4QXJyYXksXG4gICAgICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkLFxuICAgICAgICBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSxcbiAgICAgICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICAgICAgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICAgICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgICAgIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgICAgICBmdW5jKHt9LCAnJywge30pO1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfSgpKTtcblxuICAgIC8qKiBNb2NrZWQgYnVpbHQtaW5zLiAqL1xuICAgIHZhciBjdHhDbGVhclRpbWVvdXQgPSBjb250ZXh0LmNsZWFyVGltZW91dCAhPT0gcm9vdC5jbGVhclRpbWVvdXQgJiYgY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIGN0eE5vdyA9IERhdGUgJiYgRGF0ZS5ub3cgIT09IHJvb3QuRGF0ZS5ub3cgJiYgRGF0ZS5ub3csXG4gICAgICAgIGN0eFNldFRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQgIT09IHJvb3Quc2V0VGltZW91dCAmJiBjb250ZXh0LnNldFRpbWVvdXQ7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG4gICAgdmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgICAgIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICAgICAgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gICAgICAgIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBuYXRpdmVJc0Zpbml0ZSA9IGNvbnRleHQuaXNGaW5pdGUsXG4gICAgICAgIG5hdGl2ZUpvaW4gPSBhcnJheVByb3RvLmpvaW4sXG4gICAgICAgIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpLFxuICAgICAgICBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICAgICAgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgICAgIG5hdGl2ZU5vdyA9IERhdGUubm93LFxuICAgICAgICBuYXRpdmVQYXJzZUludCA9IGNvbnRleHQucGFyc2VJbnQsXG4gICAgICAgIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tLFxuICAgICAgICBuYXRpdmVSZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG4gICAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuICAgIHZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShjb250ZXh0LCAnRGF0YVZpZXcnKSxcbiAgICAgICAgTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdNYXAnKSxcbiAgICAgICAgUHJvbWlzZSA9IGdldE5hdGl2ZShjb250ZXh0LCAnUHJvbWlzZScpLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBXZWFrTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdXZWFrTWFwJyksXG4gICAgICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuICAgIC8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICAgIHZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxuICAgIC8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xuICAgIHZhciByZWFsTmFtZXMgPSB7fTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG4gICAgdmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICAgICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgICAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4gICAgLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG4gICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAgICAgKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAgICAgKiBvciBtYXkgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIGNoYWluIHNlcXVlbmNlXG4gICAgICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gICAgICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gICAgICpcbiAgICAgKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gICAgICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAgICAgKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICAgICAqIHRoZSBjcmVhdGlvbiBvZiBpbnRlcm1lZGlhdGUgYXJyYXlzIGFuZCBjYW4gZ3JlYXRseSByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gICAgICogb25lIGFyZ3VtZW50LiBUaGUgaGV1cmlzdGljIGZvciB3aGV0aGVyIGEgc2VjdGlvbiBxdWFsaWZpZXMgZm9yIHNob3J0Y3V0XG4gICAgICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHNoaWZ0YCwgYHNvcnRgLCBgc3BsaWNlYCwgYW5kIGB1bnNoaWZ0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gICAgICogYHJlcGxhY2VgIGFuZCBgc3BsaXRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICAgICAqIGBhdGAsIGBjb21wYWN0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGRyb3BXaGlsZWAsIGBmaWx0ZXJgLCBgZmluZGAsXG4gICAgICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gICAgICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICAgICAqXG4gICAgICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAgICAgKiBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCwgYGNhc3RBcnJheWAsIGBjaGFpbmAsIGBjaHVua2AsXG4gICAgICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gICAgICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gICAgICogYGRpZmZlcmVuY2VgLCBgZGlmZmVyZW5jZUJ5YCwgYGRpZmZlcmVuY2VXaXRoYCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCxcbiAgICAgKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gICAgICogYGZsYXR0ZW5EZXB0aGAsIGBmbGlwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCwgYGZyb21QYWlyc2AsIGBmdW5jdGlvbnNgLFxuICAgICAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAgICAgKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAgICAgKiBga2V5c2AsIGBrZXlzSW5gLCBgbWFwYCwgYG1hcEtleXNgLCBgbWFwVmFsdWVzYCwgYG1hdGNoZXNgLCBgbWF0Y2hlc1Byb3BlcnR5YCxcbiAgICAgKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gICAgICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gICAgICogYG92ZXJFdmVyeWAsIGBvdmVyU29tZWAsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsIGBwYXJ0aXRpb25gLCBgcGlja2AsXG4gICAgICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICAgICAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gICAgICogYHJlbW92ZWAsIGByZXN0YCwgYHJldmVyc2VgLCBgc2FtcGxlU2l6ZWAsIGBzZXRgLCBgc2V0V2l0aGAsIGBzaHVmZmxlYCxcbiAgICAgKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICAgICAqIGB0b1BhaXJzYCwgYHRvUGFpcnNJbmAsIGB0b1BhdGhgLCBgdG9QbGFpbk9iamVjdGAsIGB0cmFuc2Zvcm1gLCBgdW5hcnlgLFxuICAgICAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gICAgICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gICAgICogYHZhbHVlc0luYCwgYHdpdGhvdXRgLCBgd3JhcGAsIGB4b3JgLCBgeG9yQnlgLCBgeG9yV2l0aGAsIGB6aXBgLFxuICAgICAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBhcmUgKipub3QqKiBjaGFpbmFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICAgICAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICAgICAqIGBkZWZhdWx0VG9gLCBgZGl2aWRlYCwgYGVhY2hgLCBgZWFjaFJpZ2h0YCwgYGVuZHNXaXRoYCwgYGVxYCwgYGVzY2FwZWAsXG4gICAgICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAgICAgKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gICAgICogYGZvckluYCwgYGZvckluUmlnaHRgLCBgZm9yT3duYCwgYGZvck93blJpZ2h0YCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCxcbiAgICAgKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAgICAgKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAgICAgKiBgaXNCb29sZWFuYCwgYGlzQnVmZmVyYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLCBgaXNFbXB0eWAsIGBpc0VxdWFsYCxcbiAgICAgKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gICAgICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAgICAgKiBgaXNOdW1iZXJgLCBgaXNPYmplY3RgLCBgaXNPYmplY3RMaWtlYCwgYGlzUGxhaW5PYmplY3RgLCBgaXNSZWdFeHBgLFxuICAgICAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gICAgICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gICAgICogYGxvd2VyQ2FzZWAsIGBsb3dlckZpcnN0YCwgYGx0YCwgYGx0ZWAsIGBtYXhgLCBgbWF4QnlgLCBgbWVhbmAsIGBtZWFuQnlgLFxuICAgICAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAgICAgKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAgICAgKiBgcmVwZWF0YCwgYHJlc3VsdGAsIGByb3VuZGAsIGBydW5JbkNvbnRleHRgLCBgc2FtcGxlYCwgYHNoaWZ0YCwgYHNpemVgLFxuICAgICAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gICAgICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICAgICAqIGBzdHViT2JqZWN0YCwgYHN0dWJTdHJpbmdgLCBgc3R1YlRydWVgLCBgc3VidHJhY3RgLCBgc3VtYCwgYHN1bUJ5YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gICAgICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICAgICAqIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGB0cnVuY2F0ZWAsIGB1bmVzY2FwZWAsIGB1bmlxdWVJZGAsIGB1cHBlckNhc2VgLFxuICAgICAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBuYW1lIF9cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcCBpbiBhIGBsb2Rhc2hgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICAgICAqIHZhciBzcXVhcmVzID0gd3JhcHBlZC5tYXAoc3F1YXJlKTtcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgICAgIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLCBjaGFpbkFsbCkge1xuICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgICAgdGhpcy5fX2luZGV4X18gPSAwO1xuICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gICAgICogZW1iZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFuZ2UgdGhlXG4gICAgICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkYXRhIG9iamVjdCBpbiB0aGUgdGVtcGxhdGUgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICAndmFyaWFibGUnOiAnJyxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgICAgICovXG4gICAgICAgICdfJzogbG9kYXNoXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB3cmFwcGVycyBhcmUgaW5zdGFuY2VzIG9mIGBiYXNlTG9kYXNoYC5cbiAgICBsb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuICAgIExvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fZGlyX18gPSAxO1xuICAgICAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgICAgIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICAgICAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gY29weUFycmF5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKGFycmF5LCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAobGVuZ3RoLS0gJiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuXG4gICAgICAgIHZhciBpdGVySW5kZXggPSAtMSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGl0ZXJhdGVlc1tpdGVySW5kZXhdLFxuICAgICAgICAgICAgICBpdGVyYXRlZSA9IGRhdGEuaXRlcmF0ZWUsXG4gICAgICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9NQVBfRkxBRykge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRykge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICAgICAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG4gICAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG4gICAgSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuICAgIEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG4gICAgSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgICAgICBkYXRhLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgLS10aGlzLnNpemU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgKyt0aGlzLnNpemU7XG4gICAgICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAgICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYWRkXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQGFsaWFzIHB1c2hcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICAgICAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICAgICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICAgICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gICAgICB9XG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG4gICAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcbiAgICBTdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG4gICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuICAgIFN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcbiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICAgICAgKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3RoIC0gMSldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVTaXplYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlU2l6ZShhcnJheSwgbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFnZ3JlZ2F0ZXMgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIG9uIGBhY2N1bXVsYXRvcmAgd2l0aCBrZXlzIHRyYW5zZm9ybWVkXG4gICAgICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICAgICAqIHZhbHVlIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBza2lwID0gb2JqZWN0ID09IG51bGw7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gICAgICogdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIERlZXAgY2xvbmVcbiAgICAgKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgKiAgNCAtIENsb25lIHN5bWJvbHNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZDtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtcyhzb3VyY2UpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zVG9gIHdoaWNoIGFjY2VwdHMgYHByb3BzYCB0byBjaGVjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICFsZW5ndGg7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbbGVuZ3RoXSxcbiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNvdXJjZVtrZXldLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmRlbGF5YCBhbmQgYF8uZGVmZXJgIHdoaWNoIGFjY2VwdHMgYGFyZ3NgXG4gICAgICogdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsgfSwgd2FpdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICAgICAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgICAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2ggPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hSaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2hSaWdodCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCwgdHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ldmVyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gICAgICogYGNvbXBhcmF0b3JgIHRvIGRldGVybWluZSB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKGN1cnJlbnQgPT09IGN1cnJlbnQgJiYgIWlzU3ltYm9sKGN1cnJlbnQpKVxuICAgICAgICAgICAgICA6IGNvbXBhcmF0b3IoY3VycmVudCwgY29tcHV0ZWQpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgdmFyIGNvbXB1dGVkID0gY3VycmVudCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsbGAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gbGVuZ3RoKSA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgZW5kICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVuZCA9IHN0YXJ0ID4gZW5kID8gMCA6IHRvTGVuZ3RoKGVuZCk7XG4gICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICAgICAgYXJyYXlbc3RhcnQrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gICAgICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICAgICAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUZvcmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzXG4gICAgICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yUmlnaHQgPSBjcmVhdGVCYXNlRm9yKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93blJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JSaWdodChvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2ZcbiAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHtcbiAgICAgIHJldHVybiBhcnJheUZpbHRlcihwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gICAgICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgICAgIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgICAgIH1cbiAgICAgIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc2Agd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pblJhbmdlYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBudW1iZXIgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIG51bWJlciA8IG5hdGl2ZU1heChzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCwgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludGVyc2VjdGlvbihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5jbHVkZXMgPSBjb21wYXJhdG9yID8gYXJyYXlJbmNsdWRlc1dpdGggOiBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBvdGhJbmRleCA9IG90aExlbmd0aCxcbiAgICAgICAgICBjYWNoZXMgPSBBcnJheShvdGhMZW5ndGgpLFxuICAgICAgICAgIG1heExlbmd0aCA9IEluZmluaXR5LFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAob3RoSW5kZXgtLSkge1xuICAgICAgICB2YXIgYXJyYXkgPSBhcnJheXNbb3RoSW5kZXhdO1xuICAgICAgICBpZiAob3RoSW5kZXggJiYgaXRlcmF0ZWUpIHtcbiAgICAgICAgICBhcnJheSA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhMZW5ndGggPSBuYXRpdmVNaW4oYXJyYXkubGVuZ3RoLCBtYXhMZW5ndGgpO1xuICAgICAgICBjYWNoZXNbb3RoSW5kZXhdID0gIWNvbXBhcmF0b3IgJiYgKGl0ZXJhdGVlIHx8IChsZW5ndGggPj0gMTIwICYmIGFycmF5Lmxlbmd0aCA+PSAxMjApKVxuICAgICAgICAgID8gbmV3IFNldENhY2hlKG90aEluZGV4ICYmIGFycmF5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJyYXkgPSBhcnJheXNbMF07XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHNlZW4gPSBjYWNoZXNbMF07XG5cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgcmVzdWx0Lmxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmICghKHNlZW5cbiAgICAgICAgICAgICAgPyBjYWNoZUhhcyhzZWVuLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgOiBpbmNsdWRlcyhyZXN1bHQsIGNvbXB1dGVkLCBjb21wYXJhdG9yKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICAgICAgaWYgKCEoY2FjaGVcbiAgICAgICAgICAgICAgICAgID8gY2FjaGVIYXMoY2FjaGUsIGNvbXB1dGVkKVxuICAgICAgICAgICAgICAgICAgOiBpbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLCBjb21wdXRlZCwgY29tcGFyYXRvcikpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzXG4gICAgICogYG9iamVjdGAgd2l0aCB2YWx1ZXMgdHJhbnNmb3JtZWQgYnkgYGl0ZXJhdGVlYCBhbmQgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRlZSh2YWx1ZSksIGtleSwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludm9rZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogbWV0aG9kIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgdmFyIGZ1bmMgPSBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcnJheUJ1ZmZlclRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGRhdGUgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gZGF0ZVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gICAgICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gICAgICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICAgICAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gICAgICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICAgICAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICAgICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICAgICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzU2FtZVRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICAgICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1JlZ0V4cGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSByZWdleHBUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAgICAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gICAgICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICAgICAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgICAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYmFzZUZvcihzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICAgICAqIGRlZXAgbWVyZ2VzIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gbWVyZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgICAgIHNyY1ZhbHVlID0gc2FmZUdldChzb3VyY2UsIGtleSksXG4gICAgICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHN0YWNrZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiBpc0J1ZmZlcihzcmNWYWx1ZSksXG4gICAgICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNsb25lQnVmZmVyKHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgICAgIGlmIChpc0FyZ3VtZW50cyhvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFpc09iamVjdChvYmpWYWx1ZSkgfHwgaXNGdW5jdGlvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU50aChhcnJheSwgbikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICAgICAgcmV0dXJuIGlzSW5kZXgobiwgbGVuZ3RoKSA/IGFycmF5W25dIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IG9yZGVycyBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICBpZiAoaXRlcmF0ZWVzLmxlbmd0aCkge1xuICAgICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoaXRlcmF0ZWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2VHZXQodmFsdWUsIGl0ZXJhdGVlLmxlbmd0aCA9PT0gMSA/IGl0ZXJhdGVlWzBdIDogaXRlcmF0ZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXRlcmF0ZWU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW2lkZW50aXR5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICAgIHJldHVybiBpdGVyYXRlZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYmFzZVNvcnRCeShyZXN1bHQsIGZ1bmN0aW9uKG9iamVjdCwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7XG4gICAgICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgICAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcblxuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBbGxCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgICAqIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleE9mID0gY29tcGFyYXRvciA/IGJhc2VJbmRleE9mV2l0aCA6IGJhc2VJbmRleE9mLFxuICAgICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICBzZWVuID0gYXJyYXk7XG5cbiAgICAgIGlmIChhcnJheSA9PT0gdmFsdWVzKSB7XG4gICAgICAgIHZhbHVlcyA9IGNvcHlBcnJheSh2YWx1ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4gPSBhcnJheU1hcChhcnJheSwgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZnJvbUluZGV4ID0gMCxcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB3aGlsZSAoKGZyb21JbmRleCA9IGluZGV4T2Yoc2VlbiwgY29tcHV0ZWQsIGZyb21JbmRleCwgY29tcGFyYXRvcikpID4gLTEpIHtcbiAgICAgICAgICBpZiAoc2VlbiAhPT0gYXJyYXkpIHtcbiAgICAgICAgICAgIHNwbGljZS5jYWxsKHNlZW4sIGZyb21JbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBmcm9tSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBpbmRleGVzIG9yIGNhcHR1cmluZyB0aGUgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleGVzIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBpbmRleGVzLmxlbmd0aCA6IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKGxlbmd0aCA9PSBsYXN0SW5kZXggfHwgaW5kZXggIT09IHByZXZpb3VzKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzID0gaW5kZXg7XG4gICAgICAgICAgaWYgKGlzSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgaW5kZXgsIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlVW5zZXQoYXJyYXksIGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5kb21gIHdpdGhvdXQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxvd2VyIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpIHtcbiAgICAgIHJldHVybiBsb3dlciArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZ2VgIGFuZCBgXy5yYW5nZVJpZ2h0YCB3aGljaCBkb2Vzbid0XG4gICAgICogY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcCBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZCAtIHN0YXJ0KSAvIChzdGVwIHx8IDEpKSwgMCksXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XSA9IHN0YXJ0O1xuICAgICAgICBzdGFydCArPSBzdGVwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXBlYXRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJlcGVhdGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVwZWF0KHN0cmluZywgbikge1xuICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgaWYgKCFzdHJpbmcgfHwgbiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgICAgIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHBvbmVudGlhdGlvbl9ieV9zcXVhcmluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgZG8ge1xuICAgICAgICBpZiAobiAlIDIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAobik7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2FtcGxlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZVNpemVgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNhbXBsZVNpemUoY29sbGVjdGlvbiwgbikge1xuICAgICAgdmFyIGFycmF5ID0gdmFsdWVzKGNvbGxlY3Rpb24pO1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGFycmF5LCBiYXNlQ2xhbXAobiwgMCwgYXJyYXkubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICAgICAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKSxcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IGxhc3RJbmRleCkge1xuICAgICAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldO1xuICAgICAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSlcbiAgICAgICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgICAgICA6IChpc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBbXSA6IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgbmVzdGVkID0gbmVzdGVkW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgICAgIG1ldGFNYXAuc2V0KGZ1bmMsIGRhdGEpO1xuICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2h1ZmZsZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKHZhbHVlcyhjb2xsZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb21lYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICFyZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2hcbiAgICAgKiBwZXJmb3JtcyBhIGJpbmFyeSBzZWFyY2ggb2YgYGFycmF5YCB0byBkZXRlcm1pbmUgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmV0SGlnaGVzdF0gU3BlY2lmeSByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgcXVhbGlmaWVkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IGxvdyA6IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gdmFsdWUgJiYgaGlnaCA8PSBIQUxGX01BWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpZ2gpID4+PiAxLFxuICAgICAgICAgICAgICBjb21wdXRlZCA9IGFycmF5W21pZF07XG5cbiAgICAgICAgICBpZiAoY29tcHV0ZWQgIT09IG51bGwgJiYgIWlzU3ltYm9sKGNvbXB1dGVkKSAmJlxuICAgICAgICAgICAgICAocmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSkpKSB7XG4gICAgICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGlnaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleEJ5YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4QnlgXG4gICAgICogd2hpY2ggaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlXG4gICAgICogdGhlaXIgc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFyIGxvdyA9IDAsXG4gICAgICAgICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGhpZ2ggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gaXRlcmF0ZWUodmFsdWUpO1xuICAgICAgdmFyIHZhbElzTmFOID0gdmFsdWUgIT09IHZhbHVlLFxuICAgICAgICAgIHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLFxuICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpLFxuICAgICAgICAgIHZhbElzVW5kZWZpbmVkID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgdmFyIG1pZCA9IG5hdGl2ZUZsb29yKChsb3cgKyBoaWdoKSAvIDIpLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZShhcnJheVttaWRdKSxcbiAgICAgICAgICAgIG90aElzRGVmaW5lZCA9IGNvbXB1dGVkICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBjb21wdXRlZCA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gY29tcHV0ZWQgPT09IGNvbXB1dGVkLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChjb21wdXRlZCk7XG5cbiAgICAgICAgaWYgKHZhbElzTmFOKSB7XG4gICAgICAgICAgdmFyIHNldExvdyA9IHJldEhpZ2hlc3QgfHwgb3RoSXNSZWZsZXhpdmU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiAocmV0SGlnaGVzdCB8fCBvdGhJc0RlZmluZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzTnVsbCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAocmV0SGlnaGVzdCB8fCAhb3RoSXNOdWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1N5bWJvbCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAhb3RoSXNOdWxsICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc1N5bWJvbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3RoSXNOdWxsIHx8IG90aElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0TG93ID0gcmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldExvdykge1xuICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZFVuaXFgIGFuZCBgXy5zb3J0ZWRVbmlxQnlgIHdpdGhvdXRcbiAgICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghaW5kZXggfHwgIWVxKGNvbXB1dGVkLCBzZWVuKSkge1xuICAgICAgICAgIHZhciBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9OdW1iZXJgIHdoaWNoIGRvZXNuJ3QgZW5zdXJlIGNvcnJlY3RcbiAgICAgKiBjb252ZXJzaW9ucyBvZiBiaW5hcnksIGhleGFkZWNpbWFsLCBvciBvY3RhbCBzdHJpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9OdW1iZXIodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gTkFOO1xuICAgICAgfVxuICAgICAgcmV0dXJuICt2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAgICAgKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgICAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgICAgICBpZiAoc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgICAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51cGRhdGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdXBkYXRlcihiYXNlR2V0KG9iamVjdCwgcGF0aCkpLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZHJvcFdoaWxlYCBhbmQgYF8udGFrZVdoaWxlYFxuICAgICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRHJvcF0gU3BlY2lmeSBkcm9wcGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIHRha2luZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgaXNEcm9wLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTtcblxuICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkgJiZcbiAgICAgICAgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cblxuICAgICAgcmV0dXJuIGlzRHJvcFxuICAgICAgICA/IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IDAgOiBpbmRleCksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiBsZW5ndGgpKVxuICAgICAgICA6IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IDApLCAoZnJvbVJpZ2h0ID8gbGVuZ3RoIDogaW5kZXgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgd3JhcHBlclZhbHVlYCB3aGljaCByZXR1cm5zIHRoZSByZXN1bHQgb2ZcbiAgICAgKiBwZXJmb3JtaW5nIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucyBvbiB0aGUgdW53cmFwcGVkIGB2YWx1ZWAsIHdoZXJlIGVhY2hcbiAgICAgKiBzdWNjZXNzaXZlIGFjdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFjdGlvbnMgQWN0aW9ucyB0byBwZXJmb3JtIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVdyYXBwZXJWYWx1ZSh2YWx1ZSwgYWN0aW9ucykge1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFjdGlvbnMsIGZ1bmN0aW9uKHJlc3VsdCwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZnVuYy5hcHBseShhY3Rpb24udGhpc0FyZywgYXJyYXlQdXNoKFtyZXN1bHRdLCBhY3Rpb24uYXJncykpO1xuICAgICAgfSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tpbmRleF0sXG4gICAgICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgICAgIHdoaWxlICgrK290aEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG90aEluZGV4ICE9IGluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKHJlc3VsdCwgMSksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uemlwT2JqZWN0YCB3aGljaCBhc3NpZ25zIHZhbHVlcyB1c2luZyBgYXNzaWduRnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25GdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVppcE9iamVjdChwcm9wcywgdmFsdWVzLCBhc3NpZ25GdW5jKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgdmFsc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGluZGV4IDwgdmFsc0xlbmd0aCA/IHZhbHVlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGFzc2lnbkZ1bmMocmVzdWx0LCBwcm9wc1tpbmRleF0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCBhbiBhcnJheSBsaWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYGlkZW50aXR5YCBpZiBpdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgYGJhc2VSZXN0YCBhbGlhcyB3aGljaCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBgaWRlbnRpdHlgIGJ5IG1vZHVsZVxuICAgICAqIHJlcGxhY2VtZW50IHBsdWdpbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHZhciBjYXN0UmVzdCA9IGJhc2VSZXN0O1xuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYGFycmF5YCB0byBhIHNsaWNlIGlmIGl0J3MgbmVlZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3Qgc2xpY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQ7XG4gICAgICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgY2xlYXJUaW1lb3V0YF0oaHR0cHM6Ly9tZG4uaW8vY2xlYXJUaW1lb3V0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBpZCBUaGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3Qgb2YgdGhlIHRpbWVyIHRvIGNsZWFyLlxuICAgICAqL1xuICAgIHZhciBjbGVhclRpbWVvdXQgPSBjdHhDbGVhclRpbWVvdXQgfHwgZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiByb290LmNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICBidWZmZXIuY29weShyZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICAgICAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gICAgICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICAgICAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgdmFsdWVgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBc2NlbmRpbmcodmFsdWUsIG90aGVyKSB7XG4gICAgICBpZiAodmFsdWUgIT09IG90aGVyKSB7XG4gICAgICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgICB2YWxJc1JlZmxleGl2ZSA9IHZhbHVlID09PSB2YWx1ZSxcbiAgICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgICAgIHZhciBvdGhJc0RlZmluZWQgPSBvdGhlciAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3RoSXNOdWxsID0gb3RoZXIgPT09IG51bGwsXG4gICAgICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgICAgIG90aElzU3ltYm9sID0gaXNTeW1ib2wob3RoZXIpO1xuXG4gICAgICAgIGlmICgoIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wgJiYgIXZhbElzU3ltYm9sICYmIHZhbHVlID4gb3RoZXIpIHx8XG4gICAgICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAgICAgKHZhbElzTnVsbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAoIXZhbElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgICAgICAob3RoSXNTeW1ib2wgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlICYmICF2YWxJc051bGwgJiYgIXZhbElzU3ltYm9sKSB8fFxuICAgICAgICAgICAgKG90aElzTnVsbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICFvdGhJc1JlZmxleGl2ZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gICAgICogYW5kIHN0YWJsZSBzb3J0IHRoZW0uXG4gICAgICpcbiAgICAgKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICAgICAqIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yIGRlc2NlbmRpbmcgb3IgXCJhc2NcIiBmb3IgYXNjZW5kaW5nIHNvcnQgb3JkZXJcbiAgICAgKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW5bXXxzdHJpbmdbXX0gb3JkZXJzIFRoZSBvcmRlciB0byBzb3J0IGJ5IGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBvdGhlciwgb3JkZXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBvYmpDcml0ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSxcbiAgICAgICAgICBvdGhDcml0ZXJpYSA9IG90aGVyLmNyaXRlcmlhLFxuICAgICAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgICAgICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sIG90aENyaXRlcmlhW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXJzTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb3JkZXIgPSBvcmRlcnNbaW5kZXhdO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgKiAob3JkZXIgPT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAgICAgLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3JcbiAgICAgIC8vIGBvYmplY3RgIGFuZCBgb3RoZXJgLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMTI0N1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGFsc28gZW5zdXJlcyBhIHN0YWJsZSBzb3J0IGluIFY4IGFuZCBvdGhlciBlbmdpbmVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0LmluZGV4IC0gb3RoZXIuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gICAgICogcGxhY2Vob2xkZXJzLCBhbmQgcHJvdmlkZWQgYXJndW1lbnRzIGludG8gYSBzaW5nbGUgYXJyYXkgb2YgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgICB9XG4gICAgICB3aGlsZSAoKythcmdzSW5kZXggPCBob2xkZXJzTGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXgrK10gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICAgICAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICAgICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgICAgICBob2xkZXJzSW5kZXggPSAtMSxcbiAgICAgICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7XG5cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICAgICAgfVxuICAgICAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgICAgIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgICAgICByZXN1bHRbb2Zmc2V0ICsgcmlnaHRJbmRleF0gPSBwYXJ0aWFsc1tyaWdodEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICAgICAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgICAgIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05ldykge1xuICAgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhZ2dyZWdhdG9yIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBzZXR0ZXIsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGJhc2VFYWNoYCBvciBgYmFzZUVhY2hSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgICAgICA/IHN0cmluZ1RvQXJyYXkoc3RyaW5nKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICAgICAgPyBzdHJTeW1ib2xzWzBdXG4gICAgICAgICAgOiBzdHJpbmcuY2hhckF0KDApO1xuXG4gICAgICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IGNhc3RTbGljZShzdHJTeW1ib2xzLCAxKS5qb2luKCcnKVxuICAgICAgICAgIDogc3RyaW5nLnNsaWNlKDEpO1xuXG4gICAgICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5jYW1lbENhc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBlYWNoIHdvcmQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBhcnJheVJlZHVjZSh3b3JkcyhkZWJ1cnIoc3RyaW5nKS5yZXBsYWNlKHJlQXBvcywgJycpKSwgY2FsbGJhY2ssICcnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAgICAgKiB3aGV0aGVyIGl0IHdhcyBpbnZva2VkIGFzIHBhcnQgb2YgYSBgbmV3YCBleHByZXNzaW9uIG9yIGJ5IGBjYWxsYCBvciBgYXBwbHlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBDdG9yIFRoZSBjb25zdHJ1Y3RvciB0byB3cmFwLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3RvcihDdG9yKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1mdW5jdGlvbi1vYmplY3RzLWNhbGwtdGhpc2FyZ3VtZW50LWFyZ3VtZW50c2xpc3RcbiAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgICAgIC8vIE1pbWljIHRoZSBjb25zdHJ1Y3RvcidzIGByZXR1cm5gIGJlaGF2aW9yLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gICAgICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyZ3MsIGhvbGRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSAtIGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZuLCB0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgICB2YXIgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgICAgIHByZWRpY2F0ZSA9IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSk7IH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgICAgIHJldHVybiBpbmRleCA+IC0xID8gaXRlcmFibGVbaXRlcmF0ZWUgPyBjb2xsZWN0aW9uW2luZGV4XSA6IGluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsb3cgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihmdW5jcykge1xuICAgICAgICB2YXIgbGVuZ3RoID0gZnVuY3MubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgICAgICBwcmVyZXEgPSBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS50aHJ1O1xuXG4gICAgICAgIGlmIChmcm9tUmlnaHQpIHtcbiAgICAgICAgICBmdW5jcy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2luZGV4XTtcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJlcmVxICYmICF3cmFwcGVyICYmIGdldEZ1bmNOYW1lKGZ1bmMpID09ICd3cmFwcGVyJykge1xuICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgTG9kYXNoV3JhcHBlcihbXSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gd3JhcHBlciA/IGluZGV4IDogbGVuZ3RoO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGZ1bmMgPSBmdW5jc1tpbmRleF07XG5cbiAgICAgICAgICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgICAgICAgICAgZGF0YSA9IGZ1bmNOYW1lID09ICd3cmFwcGVyJyA/IGdldERhdGEoZnVuYykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc0xhemlhYmxlKGRhdGFbMF0pICYmXG4gICAgICAgICAgICAgICAgZGF0YVsxXSA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSAmJlxuICAgICAgICAgICAgICAgICFkYXRhWzRdLmxlbmd0aCAmJiBkYXRhWzldID09IDFcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gd3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlciwgZGF0YVszXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGggPT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKVxuICAgICAgICAgICAgICA/IHdyYXBwZXJbZnVuY05hbWVdKClcbiAgICAgICAgICAgICAgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGxlbmd0aCA/IGZ1bmNzW2luZGV4XS5hcHBseSh0aGlzLCBhcmdzKSA6IHZhbHVlO1xuXG4gICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGljYXRpb24sIGFuZCBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkXG4gICAgICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0FyeSA9IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLFxuICAgICAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxcbiAgICAgICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgICAgICBob2xkZXJzQ291bnQgPSBjb3VudEhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgaXNDdXJyaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgICAgICBpZiAoaXNDdXJyaWVkICYmIGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHRoaXNBcmcsXG4gICAgICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChhcmdQb3MpIHtcbiAgICAgICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7XG4gICAgICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpIHtcbiAgICAgICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmludmVydEJ5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRvSXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludmVydGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmVydGVyKHNldHRlciwgdG9JdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZlcnRlcihvYmplY3QsIHNldHRlciwgdG9JdGVyYXRlZShpdGVyYXRlZSksIHt9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSB1c2VkIGZvciBgdW5kZWZpbmVkYCBhcmd1bWVudHMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgb3RoZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG90aGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSBiYXNlVG9TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgb3RoZXIgPSBiYXNlVG9TdHJpbmcob3RoZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb051bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb051bWJlcihvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IG9wZXJhdG9yKHZhbHVlLCBvdGhlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ub3ZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGl0ZXJhdGVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBvdmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU92ZXIoYXJyYXlGdW5jKSB7XG4gICAgICByZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oaXRlcmF0ZWVzKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgICB2YXIgdGhpc0FyZyA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIGFycmF5RnVuYyhpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0ZWUsIHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgIGJhc2VkIG9uIGBsZW5ndGhgLiBUaGUgYGNoYXJzYCBzdHJpbmdcbiAgICAgKiBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWRkaW5nKGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIGNoYXJzID0gY2hhcnMgPT09IHVuZGVmaW5lZCA/ICcgJyA6IGJhc2VUb1N0cmluZyhjaGFycyk7XG5cbiAgICAgIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgICAgIGlmIChjaGFyc0xlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJzTGVuZ3RoID8gYmFzZVJlcGVhdChjaGFycywgbGVuZ3RoKSA6IGNoYXJzO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VSZXBlYXQoY2hhcnMsIG5hdGl2ZUNlaWwobGVuZ3RoIC8gc3RyaW5nU2l6ZShjaGFycykpKTtcbiAgICAgIHJldHVybiBoYXNVbmljb2RlKGNoYXJzKVxuICAgICAgICA/IGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHJlc3VsdCksIDAsIGxlbmd0aCkuam9pbignJylcbiAgICAgICAgOiByZXN1bHQuc2xpY2UoMCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gICAgICogb2YgYHRoaXNBcmdgIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCksXG4gICAgICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgICAgIGFyZ3NbbGVmdEluZGV4KytdID0gYXJndW1lbnRzWysrYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJhbmdlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICAgICAgaWYgKHN0ZXAgJiYgdHlwZW9mIHN0ZXAgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RhcnQsIGVuZCwgc3RlcCkpIHtcbiAgICAgICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXAgPSBzdGVwID09PSB1bmRlZmluZWQgPyAoc3RhcnQgPCBlbmQgPyAxIDogLTEpIDogdG9GaW5pdGUoc3RlcCk7XG4gICAgICAgIHJldHVybiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSByZWxhdGlvbmFsIG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlbGF0aW9uYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24ob3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnICYmIHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICBvdGhlciA9IHRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gICAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICAgICAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgICAgIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgICAgIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gICAgICB9XG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLnJvdW5kYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBNYXRoYCBtZXRob2QgdG8gdXNlIHdoZW4gcm91bmRpbmcuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcm91bmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUm91bmQobWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBNYXRoW21ldGhvZE5hbWVdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PSBudWxsID8gMCA6IG5hdGl2ZU1pbih0b0ludGVnZXIocHJlY2lzaW9uKSwgMjkyKTtcbiAgICAgICAgaWYgKHByZWNpc2lvbiAmJiBuYXRpdmVJc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgICAgLy8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4gICAgICAgICAgLy8gU2VlIFtNRE5dKGh0dHBzOi8vbWRuLmlvL3JvdW5kI0V4YW1wbGVzKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgIHZhciBwYWlyID0gKHRvU3RyaW5nKG51bWJlcikgKyAnZScpLnNwbGl0KCdlJyksXG4gICAgICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7XG5cbiAgICAgICAgICBwYWlyID0gKHRvU3RyaW5nKHZhbHVlKSArICdlJykuc3BsaXQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gKyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdIC0gcHJlY2lzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gICAgICovXG4gICAgdmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhaXJzIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyhvYmplY3QpO1xuICAgICAgICBpZiAodGFnID09IG1hcFRhZykge1xuICAgICAgICAgIHJldHVybiBtYXBUb0FycmF5KG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9QYWlycyhvYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlVG9QYWlycyhvYmplY3QsIGtleXNGdW5jKG9iamVjdCkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gICAgICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICogICAgMSAtIGBfLmJpbmRgXG4gICAgICogICAgMiAtIGBfLmJpbmRLZXlgXG4gICAgICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gICAgICogICAgOCAtIGBfLmN1cnJ5YFxuICAgICAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICAgICAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICAgICAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gICAgICogIDEyOCAtIGBfLnJlYXJnYFxuICAgICAqICAyNTYgLSBgXy5hcnlgXG4gICAgICogIDUxMiAtIGBfLmZsaXBgXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgICAgIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICAgICAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICAgICAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgICAgIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICAgICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gICAgICB9XG4gICAgICBmdW5jID0gbmV3RGF0YVswXTtcbiAgICAgIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICAgICAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gICAgICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gICAgICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgICAgIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gICAgICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgICAgIH1cbiAgICAgIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICAgICAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gICAgICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gICAgICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAgICAgKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzRGVlcGAgdG8gY3VzdG9taXplIGl0cyBgXy5tZXJnZWAgdXNlIHRvIG1lcmdlIHNvdXJjZVxuICAgICAqIG9iamVjdHMgaW50byBkZXN0aW5hdGlvbiBvYmplY3RzIHRoYXQgYXJlIHBhc3NlZCB0aHJ1LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykge1xuICAgICAgaWYgKGlzT2JqZWN0KG9ialZhbHVlKSAmJiBpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgb2JqVmFsdWUpO1xuICAgICAgICBiYXNlTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCB1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICAgICAqIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gICAgICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gICAgICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gICAgICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgICAgIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gICAgICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICAgICAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgICAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICAgICAgY2FzZSByZWdleHBUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgICAgIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICAgICAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gICAgICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgICAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgICAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gICAgICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSAoZnVuYy5uYW1lICsgJycpLFxuICAgICAgICAgIGFycmF5ID0gcmVhbE5hbWVzW3Jlc3VsdF0sXG4gICAgICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBhcnJheVtsZW5ndGhdLFxuICAgICAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgICAgICBpZiAob3RoZXJGdW5jID09IG51bGwgfHwgb3RoZXJGdW5jID09IGZ1bmMpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFyZ3VtZW50IHBsYWNlaG9sZGVyIHZhbHVlIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gsICdwbGFjZWhvbGRlcicpID8gbG9kYXNoIDogZnVuYztcbiAgICAgIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgXCJpdGVyYXRlZVwiIGZ1bmN0aW9uLiBJZiBgXy5pdGVyYXRlZWAgaXMgY3VzdG9taXplZCxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1c3RvbSBtZXRob2QsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBiYXNlSXRlcmF0ZWVgLlxuICAgICAqIElmIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBjaG9zZW4gZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRoZW0gYW5kXG4gICAgICogaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBbdmFsdWVdIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiB0aGUgY3JlYXRlZCBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNob3NlbiBmdW5jdGlvbiBvciBpdHMgcmVzdWx0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdGVlKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pdGVyYXRlZSB8fCBpdGVyYXRlZTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gaXRlcmF0ZWUgPyBiYXNlSXRlcmF0ZWUgOiByZXN1bHQ7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHJlc3VsdChhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSkgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgICAgIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgICAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgICAgICA6IGRhdGEubWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICAgICAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgaWYgKHVubWFza2VkKSB7XG4gICAgICAgIGlmIChpc093bikge1xuICAgICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICovXG4gICAgdmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICovXG4gICAgdmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIHZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4gICAgLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuICAgIGlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAgICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgICAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAgICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICAgICAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgICAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZpZXcsIGFwcGx5aW5nIGFueSBgdHJhbnNmb3Jtc2AgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdHJhbnNmb3JtcyBUaGUgdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSB2aWV3LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzdGFydGAgYW5kIGBlbmRgXG4gICAgICogIHBvc2l0aW9ucyBvZiB0aGUgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRWaWV3KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRyYW5zZm9ybXNbaW5kZXhdLFxuICAgICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2Ryb3AnOiAgICAgIHN0YXJ0ICs9IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Ryb3BSaWdodCc6IGVuZCAtPSBzaXplOyBicmVhaztcbiAgICAgICAgICBjYXNlICd0YWtlJzogICAgICBlbmQgPSBuYXRpdmVNaW4oZW5kLCBzdGFydCArIHNpemUpOyBicmVhaztcbiAgICAgICAgICBjYXNlICd0YWtlUmlnaHQnOiBzdGFydCA9IG5hdGl2ZU1heChzdGFydCwgZW5kIC0gc2l6ZSk7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyAnc3RhcnQnOiBzdGFydCwgJ2VuZCc6IGVuZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd3JhcHBlciBkZXRhaWxzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICAgICAgdmFyIG1hdGNoID0gc291cmNlLm1hdGNoKHJlV3JhcERldGFpbHMpO1xuICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICAgICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICAgICAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAgICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gICAgICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgICAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICAgICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgICAgIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgICAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgICAgIDoge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgICAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHNldFRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICAgICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIGRldGFpbHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICAgIGRldGFpbHNbbGFzdEluZGV4XSA9IChsZW5ndGggPiAxID8gJyYgJyA6ICcnKSArIGRldGFpbHNbbGFzdEluZGV4XTtcbiAgICAgIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICAgICAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAgICAgKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICAgICAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICAgICApIHtcbiAgICAgICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgICAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICAgICAgOiAodmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gICAgICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgICAgICBvdGhlciA9IGxvZGFzaFtmdW5jTmFtZV07XG5cbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgICAgIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gICAgICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaXMgY2FwYWJsZSBvZiBiZWluZyBtYXNrZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2FibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICB2YXIgaXNNYXNrYWJsZSA9IGNvcmVKc0RhdGEgPyBpc0Z1bmN0aW9uIDogc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICAgICAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICAgICAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gICAgICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gICAgICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gICAgICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAgICAgKlxuICAgICAqIE1lcmdpbmcgbWV0YWRhdGEgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdyYXBwZXJzIHVzZWQgdG8gaW52b2tlIGEgZnVuY3Rpb24uXG4gICAgICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAgICAgKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gICAgICogYF8ucmVhcmdgIG1vZGlmeSBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmVcbiAgICAgKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAgICAgKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICAgICAqIGFuZCBvciBgXy5yZWFyZ2AgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGVzdGluYXRpb24gbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gICAgICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSxcbiAgICAgICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgICAgIHZhciBpc0NvbWJvID1cbiAgICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpO1xuXG4gICAgICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgICAgIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICAgICAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRykge1xuICAgICAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgICAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAgICBuZXdCaXRtYXNrIHw9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyA/IDAgOiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUc7XG4gICAgICB9XG4gICAgICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICAgICAgdmFyIHZhbHVlID0gc291cmNlWzNdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IHZhbHVlO1xuICAgICAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gICAgICB9XG4gICAgICAvLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxuICAgICAgdmFsdWUgPSBzb3VyY2VbNV07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcGFydGlhbHMgPSBkYXRhWzVdO1xuICAgICAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgICAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgICAgIHZhbHVlID0gc291cmNlWzddO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyeWAgaWYgaXQncyBzbWFsbGVyLlxuICAgICAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgICAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgICAgICBkYXRhWzldID0gc291cmNlWzldO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICAgICAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgICAgIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAgICAgKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICAgICAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGFyZW50IHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlb3JkZXIgYGFycmF5YCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBpbmRleGVzIHdoZXJlIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFycmF5IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVvcmRlcihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICAgICAgb2xkQXJyYXkgPSBjb3B5QXJyYXkoYXJyYXkpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBhcnJheVtsZW5ndGhdID0gaXNJbmRleChpbmRleCwgYXJyTGVuZ3RoKSA/IG9sZEFycmF5W2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhZmVHZXQob2JqZWN0LCBrZXkpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAgICAgKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gICAgICogZnVuY3Rpb24gdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlXG4gICAgICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBzZXREYXRhID0gc2hvcnRPdXQoYmFzZVNldERhdGEpO1xuXG4gICAgLyoqXG4gICAgICogQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIGdsb2JhbCBbYHNldFRpbWVvdXRgXShodHRwczovL21kbi5pby9zZXRUaW1lb3V0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gICAgICovXG4gICAgdmFyIHNldFRpbWVvdXQgPSBjdHhTZXRUaW1lb3V0IHx8IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICAgIHJldHVybiByb290LnNldFRpbWVvdXQoZnVuYywgd2FpdCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gICAgICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgICAgIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKHdyYXBwZXIsIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgdXBkYXRlV3JhcERldGFpbHMoZ2V0V3JhcERldGFpbHMoc291cmNlKSwgYml0bWFzaykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAgICAgKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAgICAgKiBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gICAgICB2YXIgY291bnQgPSAwLFxuICAgICAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgICAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgd2hpY2ggbXV0YXRlcyBhbmQgc2V0cyB0aGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9YXJyYXkubGVuZ3RoXSBUaGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgc2l6ZSA9IHNpemUgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHNpemU7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IHNpemUpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtyYW5kXTtcblxuICAgICAgICBhcnJheVtyYW5kXSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBhcnJheS5sZW5ndGggPSBzaXplO1xuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIHZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgICAgIH1cbiAgICAgIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gICAgICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscywgYml0bWFzaykge1xuICAgICAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgICAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICAgICAgaWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUpKSB7XG4gICAgICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGB3cmFwcGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZXIgVGhlIHdyYXBwZXIgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHtcbiAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gICAgICByZXN1bHQuX19pbmRleF9fICA9IHdyYXBwZXIuX19pbmRleF9fO1xuICAgICAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byBncm91cHMgdGhlIGxlbmd0aCBvZiBgc2l6ZWAuXG4gICAgICogSWYgYGFycmF5YCBjYW4ndCBiZSBzcGxpdCBldmVubHksIHRoZSBmaW5hbCBjaHVuayB3aWxsIGJlIHRoZSByZW1haW5pbmdcbiAgICAgKiBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0xXSBUaGUgbGVuZ3RoIG9mIGVhY2ggY2h1bmtcbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNodW5rcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jaHVuayhbJ2EnLCAnYicsICdjJywgJ2QnXSwgMik7XG4gICAgICogLy8gPT4gW1snYScsICdiJ10sIFsnYycsICdkJ11dXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAzKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InLCAnYyddLCBbJ2QnXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjaHVuayhhcnJheSwgc2l6ZSwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc2l6ZSwgZ3VhcmQpIDogc2l6ZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBzaXplID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSBuYXRpdmVNYXgodG9JbnRlZ2VyKHNpemUpLCAwKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICAgICAqIGAwYCwgYFwiXCJgLCBgdW5kZWZpbmVkYCwgYW5kIGBOYU5gIGFyZSBmYWxzZXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY29tcGFjdChbMCwgMSwgZmFsc2UsIDIsICcnLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgY29uY2F0ZW5hdGluZyBgYXJyYXlgIHdpdGggYW55IGFkZGl0aW9uYWwgYXJyYXlzXG4gICAgICogYW5kL29yIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY29uY2F0ZW5hdGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgY29uY2F0ZW5hdGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMV07XG4gICAgICogdmFyIG90aGVyID0gXy5jb25jYXQoYXJyYXksIDIsIFszXSwgW1s0XV0pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob3RoZXIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF1dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uY2F0KCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCAtIDEpLFxuICAgICAgICAgIGFycmF5ID0gYXJndW1lbnRzWzBdLFxuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICBhcmdzW2luZGV4IC0gMV0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5UHVzaChpc0FycmF5KGFycmF5KSA/IGNvcHlBcnJheShhcnJheSkgOiBbYXJyYXldLCBiYXNlRmxhdHRlbihhcmdzLCAxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbEJ5YCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2VCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kaWZmZXJlbmNlQnkoW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCBbeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2VCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QodmFsdWVzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBvcmRlciBhbmRcbiAgICAgKiByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvclxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsV2l0aGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2VXaXRoKG9iamVjdHMsIFt7ICd4JzogMSwgJ3knOiAyIH1dLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2VXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KHZhbHVlcyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICAgICAgY29tcGFyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBuIDwgMCA/IDAgOiBuLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgbiA9IGxlbmd0aCAtIG47XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wV2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbGxzIGVsZW1lbnRzIG9mIGBhcnJheWAgd2l0aCBgdmFsdWVgIGZyb20gYHN0YXJ0YCB1cCB0bywgYnV0IG5vdFxuICAgICAqIGluY2x1ZGluZywgYGVuZGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfLmZpbGwoYXJyYXksICdhJyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYScsICdhJywgJ2EnXVxuICAgICAqXG4gICAgICogXy5maWxsKEFycmF5KDMpLCAyKTtcbiAgICAgKiAvLyA9PiBbMiwgMiwgMl1cbiAgICAgKlxuICAgICAqIF8uZmlsbChbNCwgNiwgOCwgMTBdLCAnKicsIDEsIDMpO1xuICAgICAqIC8vID0+IFs0LCAnKicsICcqJywgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAmJiB0eXBlb2Ygc3RhcnQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHZhbHVlLCBzdGFydCkpIHtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICAgICAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHNcbiAgICAgKiBvZiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ3BlYmJsZXMnOyB9KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgICAgaWYgKGZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICAgIGluZGV4ID0gZnJvbUluZGV4IDwgMFxuICAgICAgICAgID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKVxuICAgICAgICAgIDogbmF0aXZlTWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgNCwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuRGVlcChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBJTkZJTklUWSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBmbGF0dGVuIGBhcnJheWAgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIFsyLCBbMywgWzRdXSwgNV1dO1xuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgWzRdLCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZXB0aChhcnJheSwgZGVwdGgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGRlcHRoID0gZGVwdGggPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGgpO1xuICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkXG4gICAgICogZnJvbSBrZXktdmFsdWUgYHBhaXJzYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIFRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mcm9tUGFpcnMoW1snYScsIDFdLCBbJ2InLCAyXV0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21QYWlycyhwYWlycykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBwYWlyID0gcGFpcnNbaW5kZXhdO1xuICAgICAgICByZXN1bHRbcGFpclswXV0gPSBwYWlyWzFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgZmlyc3RcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5oZWFkKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBhcnJheVswXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAgICAgKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlU2xpY2UoYXJyYXksIDAsIC0xKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbGwgZ2l2ZW4gYXJyYXlzXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMl1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZClcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH1dXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbkJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyksXG4gICAgICAgICAgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcblxuICAgICAgaWYgKGl0ZXJhdGVlID09PSBsYXN0KG1hcHBlZCkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXBwZWQucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzXG4gICAgICogb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9XVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKSxcbiAgICAgICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBtYXBwZWQucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQsIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFsbCBlbGVtZW50cyBpbiBgYXJyYXlgIGludG8gYSBzdHJpbmcgc2VwYXJhdGVkIGJ5IGBzZXBhcmF0b3JgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbnZlcnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXBhcmF0b3I9JywnXSBUaGUgZWxlbWVudCBzZXBhcmF0b3IuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgam9pbmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5qb2luKFsnYScsICdiJywgJ2MnXSwgJ34nKTtcbiAgICAgKiAvLyA9PiAnYX5ifmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gam9pbihhcnJheSwgc2VwYXJhdG9yKSB7XG4gICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/ICcnIDogbmF0aXZlSm9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgYXJyYXlgIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogLy8gU2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLlxuICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCkgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgICAgICA/IHN0cmljdExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpXG4gICAgICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZWxlbWVudCBhdCBpbmRleCBgbmAgb2YgYGFycmF5YC4gSWYgYG5gIGlzIG5lZ2F0aXZlLCB0aGUgbnRoXG4gICAgICogZWxlbWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBudGggZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTtcbiAgICAgKlxuICAgICAqIF8ubnRoKGFycmF5LCAxKTtcbiAgICAgKiAvLyA9PiAnYidcbiAgICAgKlxuICAgICAqIF8ubnRoKGFycmF5LCAtMik7XG4gICAgICogLy8gPT4gJ2MnO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG50aChhcnJheSwgbikge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZU50aChhcnJheSwgdG9JbnRlZ2VyKG4pKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBnaXZlbiB2YWx1ZXMgZnJvbSBgYXJyYXlgIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLndpdGhvdXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBgXy5yZW1vdmVgXG4gICAgICogdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgcHJlZGljYXRlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107XG4gICAgICpcbiAgICAgKiBfLnB1bGwoYXJyYXksICdhJywgJ2MnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydiJywgJ2InXVxuICAgICAqL1xuICAgIHZhciBwdWxsID0gYmFzZVJlc3QocHVsbEFsbCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGwoYXJyYXksIFsnYScsICdjJ10pO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbChhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZUJ5YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDMgfSwgeyAneCc6IDEgfV07XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGxCeShhcnJheSwgW3sgJ3gnOiAxIH0sIHsgJ3gnOiAzIH1dLCAneCcpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsQnkoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxBbGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBjb21wYXJhdG9yIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VXaXRoYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAzLCAneSc6IDQgfSwgeyAneCc6IDUsICd5JzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbFdpdGgoYXJyYXksIFt7ICd4JzogMywgJ3knOiA0IH1dLCBfLmlzRXF1YWwpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogNSwgJ3knOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbFdpdGgoYXJyYXksIHZhbHVlcywgY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSBgYXJyYXlgIGNvcnJlc3BvbmRpbmcgdG8gYGluZGV4ZXNgIGFuZCByZXR1cm5zIGFuXG4gICAgICogYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uYXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IFtpbmRleGVzXSBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gICAgICogdmFyIHB1bGxlZCA9IF8ucHVsbEF0KGFycmF5LCBbMSwgM10pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYScsICdjJ11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHB1bGxlZCk7XG4gICAgICogLy8gPT4gWydiJywgJ2QnXVxuICAgICAqL1xuICAgIHZhciBwdWxsQXQgPSBmbGF0UmVzdChmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGJhc2VBdChhcnJheSwgaW5kZXhlcyk7XG5cbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGFycmF5TWFwKGluZGV4ZXMsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpc0luZGV4KGluZGV4LCBsZW5ndGgpID8gK2luZGV4IDogaW5kZXg7XG4gICAgICB9KS5zb3J0KGNvbXBhcmVBc2NlbmRpbmcpKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByZW1vdmVkIGVsZW1lbnRzLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5maWx0ZXJgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBgXy5wdWxsYFxuICAgICAqIHRvIHB1bGwgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzLCA0XTtcbiAgICAgKiB2YXIgZXZlbnMgPSBfLnJlbW92ZShhcnJheSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDNdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhldmVucyk7XG4gICAgICogLy8gPT4gWzIsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VzIGBhcnJheWAgc28gdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0LCB0aGUgc2Vjb25kXG4gICAgICogZWxlbWVudCBiZWNvbWVzIHRoZSBzZWNvbmQgdG8gbGFzdCwgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YCBhbmQgaXMgYmFzZWQgb25cbiAgICAgKiBbYEFycmF5I3JldmVyc2VgXShodHRwczovL21kbi5pby9BcnJheS9yZXZlcnNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8ucmV2ZXJzZShhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmV2ZXJzZShhcnJheSkge1xuICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgPyBhcnJheSA6IG5hdGl2ZVJldmVyc2UuY2FsbChhcnJheSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnN0ZWFkIG9mXG4gICAgICogW2BBcnJheSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJyYXlzIGFyZVxuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgJiYgdHlwZW9mIGVuZCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VzIGEgYmluYXJ5IHNlYXJjaCB0byBkZXRlcm1pbmUgdGhlIGxvd2VzdCBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXgoWzMwLCA1MF0sIDQwKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICAgICAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpO1xuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXEoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBoaWdoZXN0XG4gICAgICogaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvXG4gICAgICogbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleChbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXgoYXJyYXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRMYXN0SW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgKiBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmxhc3RJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKSAtIDE7XG4gICAgICAgIGlmIChlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRVbmlxKFsxLCAxLCAyXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkVW5pcShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXkpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxQnlgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICAgICAqIGZvciBzb3J0ZWQgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRVbmlxQnkoWzEuMSwgMS4yLCAyLjMsIDIuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjEsIDIuM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRVbmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWlsKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFpbChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMSwgbGVuZ3RoKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2UoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICBuID0gbGVuZ3RoIC0gbjtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuIEVsZW1lbnRzIGFyZVxuICAgICAqIHRha2VuIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy4gRWxlbWVudHNcbiAgICAgKiBhcmUgdGFrZW4gdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgdmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAqIHdoaWNoIHVuaXF1ZW5lc3MgaXMgY29tcHV0ZWQuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tIHRoZSBmaXJzdFxuICAgICAqIGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlvbkJ5KFsyLjFdLCBbMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnVuaW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIHVuaW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb21cbiAgICAgKiB0aGUgZmlyc3QgYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8udW5pb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpbiB3aGljaCBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggZWxlbWVudFxuICAgICAqIGlzIGtlcHQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXJcbiAgICAgKiBpbiB0aGUgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxKFsyLCAxLCAyXSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXkpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gICAgICogdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGVcbiAgICAgKiBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxQnkoWzIuMSwgMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8udW5pcVdpdGgob2JqZWN0cywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcVdpdGgoYXJyYXksIGNvbXBhcmF0b3IpIHtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgZ3JvdXBlZFxuICAgICAqIGVsZW1lbnRzIGFuZCBjcmVhdGVzIGFuIGFycmF5IHJlZ3JvdXBpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZWlyIHByZS16aXBcbiAgICAgKiBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB6aXBwZWQgPSBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICAgICAqXG4gICAgICogXy51bnppcCh6aXBwZWQpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IDA7XG4gICAgICBhcnJheSA9IGFycmF5RmlsdGVyKGFycmF5LCBmdW5jdGlvbihncm91cCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoZ3JvdXApKSB7XG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGdyb3VwLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmFzZVRpbWVzKGxlbmd0aCwgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICogaG93IHJlZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAqICByZWdyb3VwZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHppcHBlZCA9IF8uemlwKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0pO1xuICAgICAqIC8vID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV1cbiAgICAgKlxuICAgICAqIF8udW56aXBXaXRoKHppcHBlZCwgXy5hZGQpO1xuICAgICAqIC8vID0+IFszLCAzMCwgMzAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwV2l0aChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHVuemlwKGFycmF5KTtcbiAgICAgIGlmIChpdGVyYXRlZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlNYXAocmVzdWx0LCBmdW5jdGlvbihncm91cCkge1xuICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0ZWUsIHVuZGVmaW5lZCwgZ3JvdXApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBleGNsdWRpbmcgYWxsIGdpdmVuIHZhbHVlcyB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy54b3JcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53aXRob3V0KFsyLCAxLCAyLCAzXSwgMSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICovXG4gICAgdmFyIHdpdGhvdXQgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZVxuICAgICAqIFtzeW1tZXRyaWMgZGlmZmVyZW5jZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ltbWV0cmljX2RpZmZlcmVuY2UpXG4gICAgICogb2YgdGhlIGdpdmVuIGFycmF5cy4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXJcbiAgICAgKiB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLndpdGhvdXRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy54b3IoWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqL1xuICAgIHZhciB4b3IgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ueG9yYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gICAgICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZFxuICAgICAqIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lXG4gICAgICogYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy54b3JCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4yLCAzLjRdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnhvckJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciB4b3JCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICAgICAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8ueG9yV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciB4b3JXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gICAgICogZmlyc3QgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgKiBzZWNvbmQgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICovXG4gICAgdmFyIHppcCA9IGJhc2VSZXN0KHVuemlwKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZnJvbVBhaXJzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHR3byBhcnJheXMsXG4gICAgICogb25lIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwT2JqZWN0KFsnYScsICdiJ10sIFsxLCAyXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGFzc2lnblZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcE9iamVjdGAgZXhjZXB0IHRoYXQgaXQgc3VwcG9ydHMgcHJvcGVydHkgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwT2JqZWN0RGVlcChbJ2EuYlswXS5jJywgJ2EuYlsxXS5kJ10sIFsxLCAyXSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2InOiBbeyAnYyc6IDEgfSwgeyAnZCc6IDIgfV0gfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0RGVlcChwcm9wcywgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBiYXNlU2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHRvIHNwZWNpZnlcbiAgICAgKiBob3cgZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lXG4gICAgICogIGdyb3VwZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwV2l0aChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdLCBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gYSArIGIgKyBjO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFsxMTEsIDIyMl1cbiAgICAgKi9cbiAgICB2YXIgemlwV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICAgICAgaXRlcmF0ZWUgPSBsZW5ndGggPiAxID8gYXJyYXlzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpdGVyYXRlZSA9IHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nID8gKGFycmF5cy5wb3AoKSwgaXRlcmF0ZWUpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHVuemlwV2l0aChhcnJheXMsIGl0ZXJhdGVlKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHRoYXQgd3JhcHMgYHZhbHVlYCB3aXRoIGV4cGxpY2l0IG1ldGhvZFxuICAgICAqIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLiBUaGUgcmVzdWx0IG9mIHN1Y2ggc2VxdWVuY2VzIG11c3QgYmUgdW53cmFwcGVkXG4gICAgICogd2l0aCBgXyN2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHlvdW5nZXN0ID0gX1xuICAgICAqICAgLmNoYWluKHVzZXJzKVxuICAgICAqICAgLnNvcnRCeSgnYWdlJylcbiAgICAgKiAgIC5tYXAoZnVuY3Rpb24obykge1xuICAgICAqICAgICByZXR1cm4gby51c2VyICsgJyBpcyAnICsgby5hZ2U7XG4gICAgICogICB9KVxuICAgICAqICAgLmhlYWQoKVxuICAgICAqICAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMgaXMgMSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjaGFpbih2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaCh2YWx1ZSk7XG4gICAgICByZXN1bHQuX19jaGFpbl9fID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBgaW50ZXJjZXB0b3JgIGFuZCByZXR1cm5zIGB2YWx1ZWAuIFRoZSBpbnRlcmNlcHRvclxuICAgICAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvXG4gICAgICogXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlIGluIG9yZGVyIHRvIG1vZGlmeSBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSlcbiAgICAgKiAgLnRhcChmdW5jdGlvbihhcnJheSkge1xuICAgICAqICAgIC8vIE11dGF0ZSBpbnB1dCBhcnJheS5cbiAgICAgKiAgICBhcnJheS5wb3AoKTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnJldmVyc2UoKVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gICAgICBpbnRlcmNlcHRvcih2YWx1ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy50YXBgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwicGFzcyB0aHJ1XCIgdmFsdWVzIHJlcGxhY2luZyBpbnRlcm1lZGlhdGVcbiAgICAgKiByZXN1bHRzIGluIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXygnICBhYmMgICcpXG4gICAgICogIC5jaGFpbigpXG4gICAgICogIC50cmltKClcbiAgICAgKiAgLnRocnUoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydhYmMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRocnUodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3IodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSB3cmFwcGVyIHZlcnNpb24gb2YgYF8uYXRgLlxuICAgICAqXG4gICAgICogQG5hbWUgYXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXyhvYmplY3QpLmF0KFsnYVswXS5iLmMnLCAnYVsxXSddKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqL1xuICAgIHZhciB3cmFwcGVyQXQgPSBmbGF0UmVzdChmdW5jdGlvbihwYXRocykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IGxlbmd0aCA/IHBhdGhzWzBdIDogMCxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgaW50ZXJjZXB0b3IgPSBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGJhc2VBdChvYmplY3QsIHBhdGhzKTsgfTtcblxuICAgICAgaWYgKGxlbmd0aCA+IDEgfHwgdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGggfHxcbiAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHx8ICFpc0luZGV4KHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2Uoc3RhcnQsICtzdGFydCArIChsZW5ndGggPyAxIDogMCkpO1xuICAgICAgdmFsdWUuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAgICdmdW5jJzogdGhydSxcbiAgICAgICAgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLFxuICAgICAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUsIHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgIGlmIChsZW5ndGggJiYgIWFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIGFycmF5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHdpdGggZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgY2hhaW5cbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gQSBzZXF1ZW5jZSB3aXRob3V0IGV4cGxpY2l0IGNoYWluaW5nLlxuICAgICAqIF8odXNlcnMpLmhlYWQoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICpcbiAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGggZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICogXyh1c2VycylcbiAgICAgKiAgIC5jaGFpbigpXG4gICAgICogICAuaGVhZCgpXG4gICAgICogICAucGljaygndXNlcicpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgICAgIHJldHVybiBjaGFpbih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgYW5kIHJldHVybnMgdGhlIHdyYXBwZWQgcmVzdWx0LlxuICAgICAqXG4gICAgICogQG5hbWUgY29tbWl0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyXTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oYXJyYXkpLnB1c2goMyk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkID0gd3JhcHBlZC5jb21taXQoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkLmxhc3QoKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNvbW1pdCgpIHtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICAgICAqIFtpdGVyYXRvciBwcm90b2NvbF0oaHR0cHM6Ly9tZG4uaW8vaXRlcmF0aW9uX3Byb3RvY29scyNpdGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAbmFtZSBuZXh0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV4dCBpdGVyYXRvciB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDEgfVxuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IGZhbHNlLCAndmFsdWUnOiAyIH1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiB0cnVlLCAndmFsdWUnOiB1bmRlZmluZWQgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJOZXh0KCkge1xuICAgICAgaWYgKHRoaXMuX192YWx1ZXNfXyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX192YWx1ZXNfXyA9IHRvQXJyYXkodGhpcy52YWx1ZSgpKTtcbiAgICAgIH1cbiAgICAgIHZhciBkb25lID0gdGhpcy5fX2luZGV4X18gPj0gdGhpcy5fX3ZhbHVlc19fLmxlbmd0aCxcbiAgICAgICAgICB2YWx1ZSA9IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK107XG5cbiAgICAgIHJldHVybiB7ICdkb25lJzogZG9uZSwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSB3cmFwcGVyIHRvIGJlIGl0ZXJhYmxlLlxuICAgICAqXG4gICAgICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgd3JhcHBlciBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pO1xuICAgICAqXG4gICAgICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogQXJyYXkuZnJvbSh3cmFwcGVkKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgY2hhaW4gc2VxdWVuY2UgcGxhbnRpbmcgYHZhbHVlYCBhcyB0aGUgd3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHBsYW50XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGxhbnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSkubWFwKHNxdWFyZSk7XG4gICAgICogdmFyIG90aGVyID0gd3JhcHBlZC5wbGFudChbMywgNF0pO1xuICAgICAqXG4gICAgICogb3RoZXIudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbOSwgMTZdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzEsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclBsYW50KHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0LFxuICAgICAgICAgIHBhcmVudCA9IHRoaXM7XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IHdyYXBwZXJDbG9uZShwYXJlbnQpO1xuICAgICAgICBjbG9uZS5fX2luZGV4X18gPSAwO1xuICAgICAgICBjbG9uZS5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSBjbG9uZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBjbG9uZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldmlvdXMgPSBjbG9uZTtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9fd3JhcHBlZF9fO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5yZXZlcnNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFwcGVkIGFycmF5LlxuICAgICAqXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKVxuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHZhciB3cmFwcGVkID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkge1xuICAgICAgICAgIHdyYXBwZWQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpO1xuICAgICAgICB3cmFwcGVkLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICAgICAgICdmdW5jJzogdGhydSxcbiAgICAgICAgICAnYXJncyc6IFtyZXZlcnNlXSxcbiAgICAgICAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRocnUocmV2ZXJzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGNoYWluIHNlcXVlbmNlIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgdG9KU09OLCB2YWx1ZU9mXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDIsIDNdKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpIHtcbiAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKHRoaXMuX193cmFwcGVkX18sIHRoaXMuX19hY3Rpb25zX18pO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAqIGVhY2gga2V5IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSB3YXMgcmV0dXJuZWQgYnkgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jb3VudEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4geyAnNCc6IDEsICc2JzogMiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmNvdW50QnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAgICAgKiAvLyA9PiB7ICczJzogMiwgJzUnOiAxIH1cbiAgICAgKi9cbiAgICB2YXIgY291bnRCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICAgICAgKytyZXN1bHRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgZm9yXG4gICAgICogW2VtcHR5IGNvbGxlY3Rpb25zXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbXB0eV9zZXQpIGJlY2F1c2VcbiAgICAgKiBbZXZlcnl0aGluZyBpcyB0cnVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWN1b3VzX3RydXRoKSBvZlxuICAgICAqIGVsZW1lbnRzIG9mIGVtcHR5IGNvbGxlY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ldmVyeShbdHJ1ZSwgMSwgbnVsbCwgJ3llcyddLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFdmVyeSA6IGJhc2VFdmVyeTtcbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSkge1xuICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAc2VlIF8ucmVqZWN0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICAgICAqL1xuICAgIHZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlvbi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmbGF0dGVuZWQgYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYFxuICAgICAqIHRocnUgYGl0ZXJhdGVlYCBhbmQgZmxhdHRlbmluZyB0aGUgbWFwcGVkIHJlc3VsdHMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbbiwgbl07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMiwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlZXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgSU5GSU5JVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gICAgICogbWFwcGVkIHJlc3VsdHMgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTtcbiAgICAgKiAvLyA9PiBbWzEsIDFdLCBbMiwgMl1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkge1xuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiXG4gICAgICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAgICAgKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIGVhY2hcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAc2VlIF8uZm9yRWFjaFJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChbMSwgMl0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyBgMWAgdGhlbiBgMmAuXG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvckVhY2hgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGFsaWFzIGVhY2hSaWdodFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaFJpZ2h0KFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAyYCB0aGVuIGAxYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaFJpZ2h0IDogYmFzZUVhY2hSaWdodDtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBvcmRlciBvZiBncm91cGVkIHZhbHVlc1xuICAgICAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICAgICAqIHZhbHVlIG9mIGVhY2gga2V5IGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZVxuICAgICAqIGtleS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjNdIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZ3JvdXBCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICAgICAqL1xuICAgIHZhciBncm91cEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICAgICAqIGNoZWNrZWQgZm9yIGEgc3Vic3RyaW5nIG9mIGB2YWx1ZWAsIG90aGVyd2lzZVxuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAgICAgKiB0aGUgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICAgIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gICAgICBmcm9tSW5kZXggPSAoZnJvbUluZGV4ICYmICFndWFyZCkgPyB0b0ludGVnZXIoZnJvbUluZGV4KSA6IDA7XG5cbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgICAgIGZyb21JbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGggJiYgY29sbGVjdGlvbi5pbmRleE9mKHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpXG4gICAgICAgIDogKCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgZWFjaCBpbnZva2VkIG1ldGhvZC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogYXJlIHByb3ZpZGVkIHRvIGVhY2ggaW52b2tlZCBtZXRob2QuIElmIGBwYXRoYCBpcyBhIGZ1bmN0aW9uLCBpdCdzIGludm9rZWRcbiAgICAgKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAqICB0aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludm9rZU1hcChbWzUsIDEsIDddLCBbMywgMiwgMV1dLCAnc29ydCcpO1xuICAgICAqIC8vID0+IFtbMSwgNSwgN10sIFsxLCAyLCAzXV1cbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFsxMjMsIDQ1Nl0sIFN0cmluZy5wcm90b3R5cGUuc3BsaXQsICcnKTtcbiAgICAgKiAvLyA9PiBbWycxJywgJzInLCAnMyddLCBbJzQnLCAnNScsICc2J11dXG4gICAgICovXG4gICAgdmFyIGludm9rZU1hcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAgICAgKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtcbiAgICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICAgICAqICAgeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmtleUJ5KGFycmF5LCBmdW5jdGlvbihvKSB7XG4gICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksICdkaXInKTtcbiAgICAgKiAvLyA9PiB7ICdsZWZ0JzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdyaWdodCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqL1xuICAgIHZhciBrZXlCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gICAgICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICAgICAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICAgICAqIGBzYW1wbGVTaXplYCwgYHNsaWNlYCwgYHNvbWVgLCBgc29ydEJ5YCwgYHNwbGl0YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICAgICAqIC8vID0+IFsxNiwgNjRdXG4gICAgICpcbiAgICAgKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJyB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIHNvcnRcbiAgICAgKiBvcmRlcnMgb2YgdGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlc1xuICAgICAqIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yXG4gICAgICogZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBTb3J0IGJ5IGB1c2VyYCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5KGl0ZXJhdGVlcykpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdO1xuICAgICAgfVxuICAgICAgb3JkZXJzID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBvcmRlcnM7XG4gICAgICBpZiAoIWlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleSBmb3IuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydwZWJibGVzJ10sIFsnYmFybmV5JywgJ2ZyZWQnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsICdwZWJibGVzJ10sIFsnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKi9cbiAgICB2YXIgcGFydGl0aW9uID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24oKSB7IHJldHVybiBbW10sIFtdXTsgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsZWN0aW9uYCB0byBhIHZhbHVlIHdoaWNoIGlzIHRoZSBhY2N1bXVsYXRlZCByZXN1bHQgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gICAgICogaXMgbm90IGdpdmVuLCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgaXMgdXNlZCBhcyB0aGUgaW5pdGlhbFxuICAgICAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gICAgICogYW5kIGBzb3J0QnlgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICAgICAqICAgcmV0dXJuIHN1bSArIG47XG4gICAgICogfSwgMCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZWR1Y2UoeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgKiAgIHJldHVybiByZXN1bHQ7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZSA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmVkdWNlYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbWzAsIDFdLCBbMiwgM10sIFs0LCA1XV07XG4gICAgICpcbiAgICAgKiBfLnJlZHVjZVJpZ2h0KGFycmF5LCBmdW5jdGlvbihmbGF0dGVuZWQsIG90aGVyKSB7XG4gICAgICogICByZXR1cm4gZmxhdHRlbmVkLmNvbmNhdChvdGhlcik7XG4gICAgICogfSwgW10pO1xuICAgICAqIC8vID0+IFs0LCA1LCAyLCAzLCAwLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2VSaWdodCA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2hSaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYFxuICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5maWx0ZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5yZWplY3QodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZSA6IGJhc2VTYW1wbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGBuYCByYW5kb20gZWxlbWVudHMgYXQgdW5pcXVlIGtleXMgZnJvbSBgY29sbGVjdGlvbmAgdXAgdG8gdGhlXG4gICAgICogc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzMsIDFdXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCA0KTtcbiAgICAgKiAvLyA9PiBbMiwgMywgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICB9XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemUgOiBiYXNlU2FtcGxlU2l6ZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2h1ZmZsZShbMSwgMiwgMywgNF0pO1xuICAgICAqIC8vID0+IFs0LCAxLCAzLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzaXplIG9mIGBjb2xsZWN0aW9uYCBieSByZXR1cm5pbmcgaXRzIGxlbmd0aCBmb3IgYXJyYXktbGlrZVxuICAgICAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIHNpemUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8uc2l6ZSgncGViYmxlcycpO1xuICAgICAqIC8vID0+IDdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyhjb2xsZWN0aW9uKTtcbiAgICAgIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb21lKFtudWxsLCAwLCAneWVzJywgZmFsc2VdLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U29tZSA6IGJhc2VTb21lO1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICAgICAqIHBlcmZvcm1zIGEgc3RhYmxlIHNvcnQsIHRoYXQgaXMsIGl0IHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgc29ydCBvcmRlciBvZlxuICAgICAqIGVxdWFsIGVsZW1lbnRzLiBUaGUgaXRlcmF0ZWVzIGFyZSBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDMwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCAzMF1dXG4gICAgICpcbiAgICAgKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNF0sIFsnYmFybmV5JywgMzZdLCBbJ2ZyZWQnLCAzMF0sIFsnZnJlZCcsIDQ4XV1cbiAgICAgKi9cbiAgICB2YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAyICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdLCBpdGVyYXRlZXNbMl0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtpdGVyYXRlZXNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGJhc2VGbGF0dGVuKGl0ZXJhdGVlcywgMSksIFtdKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICAgICAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IERhdGVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICogfSwgXy5ub3coKSk7XG4gICAgICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAgICAgKi9cbiAgICB2YXIgbm93ID0gY3R4Tm93IHx8IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbiAgICB9O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmJlZm9yZWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXNcbiAgICAgKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXZlcyA9IFsncHJvZmlsZScsICdzZXR0aW5ncyddO1xuICAgICAqXG4gICAgICogdmFyIGRvbmUgPSBfLmFmdGVyKHNhdmVzLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG9uZSBzYXZpbmchJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goc2F2ZXMsIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdkb25lIHNhdmluZyEnIGFmdGVyIHRoZSB0d28gYXN5bmMgc2F2ZXMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWZ0ZXIobiwgZnVuYykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHVwIHRvIGBuYCBhcmd1bWVudHMsXG4gICAgICogaWdub3JpbmcgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgY2FwLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnOCcsICcxMCddLCBfLmFyeShwYXJzZUludCwgMSkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnkoZnVuYywgbiwgZ3VhcmQpIHtcbiAgICAgIG4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IG47XG4gICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbjtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQVJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBhdCB3aGljaCBgZnVuY2AgaXMgbm8gbG9uZ2VyIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgKiAvLyA9PiBBbGxvd3MgYWRkaW5nIHVwIHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgbmF0aXZlIGBGdW5jdGlvbiNiaW5kYCwgdGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGJpdG1hc2sgPSBXUkFQX0JJTkRfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICAgICAgYml0bWFzayB8PSBXUkFQX1BBUlRJQUxfRkxBRztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgb2JqZWN0W2tleV1gIHdpdGggYHBhcnRpYWxzYFxuICAgICAqIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBfLmJpbmRgIGJ5IGFsbG93aW5nIGJvdW5kIGZ1bmN0aW9ucyB0byByZWZlcmVuY2VcbiAgICAgKiBtZXRob2RzIHRoYXQgbWF5IGJlIHJlZGVmaW5lZCBvciBkb24ndCB5ZXQgZXhpc3QuIFNlZVxuICAgICAqIFtQZXRlciBNaWNoYXV4J3MgYXJ0aWNsZV0oaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvbGF6eS1mdW5jdGlvbi1kZWZpbml0aW9uLXBhdHRlcm4pXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kS2V5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52b2tlIHRoZSBtZXRob2Qgb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICogICAndXNlcic6ICdmcmVkJyxcbiAgICAgKiAgICdncmVldCc6IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiBvYmplY3QuZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICd5YSAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqL1xuICAgIHZhciBiaW5kS2V5ID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZEtleSkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYXJndW1lbnRzIG9mIGBmdW5jYCBhbmQgZWl0aGVyIGludm9rZXNcbiAgICAgKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gICAgICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICAgICAqIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWQgaWYgYGZ1bmMubGVuZ3RoYFxuICAgICAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEpKDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyKSgzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jdXJyeWAgZXhjZXB0IHRoYXQgYXJndW1lbnRzIGFyZSBhcHBsaWVkIHRvIGBmdW5jYFxuICAgICAqIGluIHRoZSBtYW5uZXIgb2YgYF8ucGFydGlhbFJpZ2h0YCBpbnN0ZWFkIG9mIGBfLnBhcnRpYWxgLlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5UmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnlSaWdodChhYmMpO1xuICAgICAqXG4gICAgICogY3VycmllZCgzKSgyKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMiwgMykoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIsIDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiBjdXJyaWVkKDMpKDEsIF8pKDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeVJpZ2h0LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAgICAgKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAgICAgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gICAgICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gICAgICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gICAgICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICAgICAqIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICAgICAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gICAgICogICAnbGVhZGluZyc6IHRydWUsXG4gICAgICogICAndHJhaWxpbmcnOiBmYWxzZVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gICAgICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gICAgICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICAgICAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAgICAgKlxuICAgICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxhc3RBcmdzLFxuICAgICAgICAgIGxhc3RUaGlzLFxuICAgICAgICAgIG1heFdhaXQsXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHRpbWVySWQsXG4gICAgICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgICAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgICAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAgICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICAgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgICAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICAgICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgICAgICByZXR1cm4gbWF4aW5nXG4gICAgICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuICAgICAgICAgIDogdGltZVdhaXRpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICAgICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgICAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAgICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICAgICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgICAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICAgICAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gICAgICByZXR1cm4gZGVib3VuY2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWZlci5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAnZGVmZXJyZWQnKTtcbiAgICAgKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWZlciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIGBmdW5jYCBhZnRlciBgd2FpdGAgbWlsbGlzZWNvbmRzLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWxheShmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAxMDAwLCAnbGF0ZXInKTtcbiAgICAgKiAvLyA9PiBMb2dzICdsYXRlcicgYWZ0ZXIgb25lIHNlY29uZC5cbiAgICAgKi9cbiAgICB2YXIgZGVsYXkgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIHRvTnVtYmVyKHdhaXQpIHx8IDAsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxpcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZsaXBwZWQgPSBfLmZsaXAoZnVuY3Rpb24oKSB7XG4gICAgICogICByZXR1cm4gXy50b0FycmF5KGFyZ3VtZW50cyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBmbGlwcGVkKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGlwKGZ1bmMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICAgICAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICAgICAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICAgICAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gICAgICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAgICAgKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICAgICAqXG4gICAgICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB2YWx1ZXMob3RoZXIpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqXG4gICAgICogb2JqZWN0LmEgPSAyO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gICAgICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKlxuICAgICAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgYE1hcENhY2hlYC5cbiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBgZnVuY2AuIFRoZVxuICAgICAqIGBmdW5jYCBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbmVnYXRlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKFsxLCAyLCAzLCA0LCA1LCA2XSwgXy5uZWdhdGUoaXNFdmVuKSk7XG4gICAgICogLy8gPT4gWzEsIDMsIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpcyByZXN0cmljdGVkIHRvIGludm9raW5nIGBmdW5jYCBvbmNlLiBSZXBlYXQgY2FsbHNcbiAgICAgKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBpbml0aWFsaXplID0gXy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIC8vID0+IGBjcmVhdGVBcHBsaWNhdGlvbmAgaXMgaW52b2tlZCBvbmNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gb25jZShmdW5jKSB7XG4gICAgICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1zPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGFyZ3VtZW50IHRyYW5zZm9ybXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGRvdWJsZWQobikge1xuICAgICAqICAgcmV0dXJuIG4gKiAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJBcmdzKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICogfSwgW3NxdWFyZSwgZG91YmxlZF0pO1xuICAgICAqXG4gICAgICogZnVuYyg5LCAzKTtcbiAgICAgKiAvLyA9PiBbODEsIDZdXG4gICAgICpcbiAgICAgKiBmdW5jKDEwLCA1KTtcbiAgICAgKiAvLyA9PiBbMTAwLCAxMF1cbiAgICAgKi9cbiAgICB2YXIgb3ZlckFyZ3MgPSBjYXN0UmVzdChmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gKHRyYW5zZm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSlcbiAgICAgICAgPyBhcnJheU1hcCh0cmFuc2Zvcm1zWzBdLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpXG4gICAgICAgIDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciBmdW5jc0xlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oYXJncy5sZW5ndGgsIGZ1bmNzTGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gdHJhbnNmb3Jtc1tpbmRleF0uY2FsbCh0aGlzLCBhcmdzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICAgICAqIGFyZ3VtZW50cyBpdCByZWNlaXZlcy4gVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5iaW5kYCBleGNlcHQgaXQgZG9lcyAqKm5vdCoqXG4gICAgICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWwucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIHBhcnRpYWxseVxuICAgICAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMi4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWwoZ3JlZXQsIF8sICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnBhcnRpYWxgIGV4Y2VwdCB0aGF0IHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50c1xuICAgICAqIGFyZSBhcHBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWxSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2hlbGxvJywgXyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsUmlnaHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgYXJyYW5nZWQgYWNjb3JkaW5nXG4gICAgICogdG8gdGhlIHNwZWNpZmllZCBgaW5kZXhlc2Agd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2UgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9LCBbMiwgMCwgMV0pO1xuICAgICAqXG4gICAgICogcmVhcmdlZCgnYicsICdjJywgJ2EnKVxuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIHZhciByZWFyZyA9IGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsIGluZGV4ZXMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5kZXhlcyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uIGFuZCBhcmd1bWVudHMgZnJvbSBgc3RhcnRgIGFuZCBiZXlvbmQgcHJvdmlkZWQgYXNcbiAgICAgKiBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAgICAgKiBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vbWRuLmlvL3Jlc3RfcGFyYW1ldGVycykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8ucmVzdChmdW5jdGlvbih3aGF0LCBuYW1lcykge1xuICAgICAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jLCBzdGFydCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlIGZ1bmN0aW9uIGFuZCBhbiBhcnJheSBvZiBhcmd1bWVudHMgbXVjaCBsaWtlXG4gICAgICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNwcmVhZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8uc3ByZWFkKGZ1bmN0aW9uKHdobywgd2hhdCkge1xuICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQgc2F5cyBoZWxsbydcbiAgICAgKlxuICAgICAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDQwKSxcbiAgICAgKiAgIFByb21pc2UucmVzb2x2ZSgzNilcbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIG51bWJlcnMudGhlbihfLnNwcmVhZChmdW5jdGlvbih4LCB5KSB7XG4gICAgICogICByZXR1cm4geCArIHk7XG4gICAgICogfSkpO1xuICAgICAqIC8vID0+IGEgUHJvbWlzZSBvZiA3NlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNwcmVhZChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IG5hdGl2ZU1heCh0b0ludGVnZXIoc3RhcnQpLCAwKTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFyZ3Nbc3RhcnRdLFxuICAgICAgICAgICAgb3RoZXJBcmdzID0gY2FzdFNsaWNlKGFyZ3MsIDAsIHN0YXJ0KTtcblxuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBhcnJheVB1c2gob3RoZXJBcmdzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gICAgICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAgICAgKiBtZXRob2QgdG8gY2FuY2VsIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvXG4gICAgICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICAgICAqIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGVcbiAgICAgKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gICAgICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqXG4gICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gICAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgICAqXG4gICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy50aHJvdHRsZWAgYW5kIGBfLmRlYm91bmNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAqXG4gICAgICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gICAgICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCB0aHJvdHRsZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCB0aHJvdHRsZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVhZGluZyA9IHRydWUsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHtcbiAgICAgICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgICAgICd0cmFpbGluZyc6IHRyYWlsaW5nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHVwIHRvIG9uZSBhcmd1bWVudCwgaWdub3JpbmcgYW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8udW5hcnkocGFyc2VJbnQpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5hcnkoZnVuYykge1xuICAgICAgcmV0dXJuIGFyeShmdW5jLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBgdmFsdWVgIHRvIGB3cmFwcGVyYCBhcyBpdHMgZmlyc3RcbiAgICAgKiBhcmd1bWVudC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbiBhcmUgYXBwZW5kZWRcbiAgICAgKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFt3cmFwcGVyPWlkZW50aXR5XSBUaGUgd3JhcHBlciBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAgICAgKiAgIHJldHVybiAnPHA+JyArIGZ1bmModGV4dCkgKyAnPC9wPic7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBwKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICc8cD5mcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXM8L3A+J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXAodmFsdWUsIHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsKGNhc3RGdW5jdGlvbih3cmFwcGVyKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoMSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbbnVsbF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gW3VuZGVmaW5lZF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKiBjb25zb2xlLmxvZyhfLmNhc3RBcnJheShhcnJheSkgPT09IGFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5KCkge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjbG9uZSBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwczovL21kbi5pby9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobSlcbiAgICAgKiBhbmQgc3VwcG9ydHMgY2xvbmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLCBkYXRlIG9iamVjdHMsIG1hcHMsXG4gICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gICAgICogYXJyYXlzLiBUaGUgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgYXJndW1lbnRzYCBvYmplY3RzIGFyZSBjbG9uZWRcbiAgICAgKiBhcyBwbGFpbiBvYmplY3RzLiBBbiBlbXB0eSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHVuY2xvbmVhYmxlIHZhbHVlcyBzdWNoXG4gICAgICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKHNoYWxsb3dbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAgICAgKiBjbG9uaW5nIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHVwIHRvIGZvdXIgYXJndW1lbnRzOyAodmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lV2l0aGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZVdpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVEZWVwV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGNvbnNvbGUubG9nKGVsLm5vZGVOYW1lKTtcbiAgICAgKiAvLyA9PiAnQk9EWSdcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURlZXBXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgb2JqZWN0YCBjb25mb3JtcyB0byBgc291cmNlYCBieSBpbnZva2luZyB0aGUgcHJlZGljYXRlXG4gICAgICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLmNvbmZvcm1zYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uY29uZm9ybXNUbyhvYmplY3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMjsgfSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2UgPT0gbnVsbCB8fCBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKE5hTiwgTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmx0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3QoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5ndCgxLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBndCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUd0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheUJ1ZmZlcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheUJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheUJ1ZmZlciA9IG5vZGVJc0FycmF5QnVmZmVyID8gYmFzZVVuYXJ5KG5vZGVJc0FycmF5QnVmZmVyKSA6IGJhc2VJc0FycmF5QnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICAgICAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAgICAgKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gICAgICogaXMgYW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJvb2xlYW4sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4oZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCb29sZWFuKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUobmV3IERhdGUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgRE9NIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgRE9NIGVsZW1lbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoJzxib2R5PicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAgICAgKlxuICAgICAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICAgICAqIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAgICAgKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gICAgICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkodHJ1ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gICAgICB9XG4gICAgICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICAgICAqIGVxdWl2YWxlbnQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gICAgICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICAgICAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gICAgICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gICAgICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogb2JqZWN0ID09PSBvdGhlcjtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xuICAgICAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnaGVsbG8nLCAnZ29vZGJ5ZSddO1xuICAgICAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xuICAgICAqXG4gICAgICogXy5pc0VxdWFsV2l0aChhcnJheSwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgb3RoZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAgICAgKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IoRXJyb3IpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBwcmltaXRpdmUgbnVtYmVyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNGaW5pdGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbihfKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gICAgICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT0gdG9JbnRlZ2VyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gICAgICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICAgICAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3Qoe30pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gICAgICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiBgb2JqZWN0YCBhbmQgYHNvdXJjZWAgdG9cbiAgICAgKiBkZXRlcm1pbmUgaWYgYG9iamVjdGAgY29udGFpbnMgZXF1aXZhbGVudCBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5tYXRjaGVzYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdCBgc291cmNlYFxuICAgICAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gICAgICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc01hdGNoYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICAgICAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICAgICAqIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwgaW5kZXh8a2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdncmVldGluZyc6ICdoZWxsbycgfTtcbiAgICAgKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAgICAgKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4oTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAgICAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAgICAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcmlzdGluZSBuYXRpdmUgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgY2FuJ3QgcmVsaWFibHkgZGV0ZWN0IG5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhlIHByZXNlbmNlXG4gICAgICogb2YgdGhlIGNvcmUtanMgcGFja2FnZSBiZWNhdXNlIGNvcmUtanMgY2lyY3VtdmVudHMgdGhpcyBraW5kIG9mIGRldGVjdGlvbi5cbiAgICAgKiBEZXNwaXRlIG11bHRpcGxlIHJlcXVlc3RzLCB0aGUgY29yZS1qcyBtYWludGFpbmVyIGhhcyBtYWRlIGl0IGNsZWFyOiBhbnlcbiAgICAgKiBhdHRlbXB0IHRvIGZpeCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgb2JzdHJ1Y3RlZC4gQXMgYSByZXN1bHQsIHdlJ3JlIGxlZnRcbiAgICAgKiB3aXRoIGxpdHRsZSBjaG9pY2UgYnV0IHRvIHRocm93IGFuIGVycm9yLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsc28gYWZmZWN0c1xuICAgICAqIHBhY2thZ2VzLCBsaWtlIFtiYWJlbC1wb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmFiZWwtcG9seWZpbGwpLFxuICAgICAqIHdoaWNoIHJlbHkgb24gY29yZS1qcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShfKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAoaXNNYXNrYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPUkVfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBudWxsYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbCh2b2lkIDApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbCh2b2lkIDApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICAgICAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gICAgICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuOC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICAgICAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgvYWJjLyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgnL2FiYy8nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1JlZ0V4cCA9IG5vZGVJc1JlZ0V4cCA/IGJhc2VVbmFyeShub2RlSXNSZWdFeHApIDogYmFzZUlzUmVnRXhwO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBzYWZlIGludGVnZXIuIEFuIGludGVnZXIgaXMgc2FmZSBpZiBpdCdzIGFuIElFRUUtNzU0XG4gICAgICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IC1NQVhfU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gd2Vha01hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgV2Vha1NldCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtTZXQobmV3IFNldCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtTZXQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHdlYWtTZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5ndFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0KDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDw9IG90aGVyO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqXG4gICAgICogXy50b0FycmF5KDEpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkobnVsbCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMi4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoMy4yKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gNWUtMzI0XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICAgICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcigzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBsZW5ndGggb2YgYW5cbiAgICAgKiBhcnJheS1saWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDQyOTQ5NjcyOTVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIDAsIE1BWF9BUlJBWV9MRU5HVEgpIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b051bWJlcigzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgICAgIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICAgICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAgICAgKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNhZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZFxuICAgICAqIHJlcHJlc2VudGVkIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9TYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAgICAgKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKG51bGwpO1xuICAgICAqIC8vID0+ICcnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKC0wKTtcbiAgICAgKiAvLyA9PiAnLTAnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25JblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gICAgICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgb3duIGFuZFxuICAgICAqIGluaGVyaXRlZCBzb3VyY2UgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGV4dGVuZFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbkluKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMywgJ2QnOiA0IH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduSW4gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBleHRlbmRXaXRoXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbldpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduSW5XaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduV2l0aCwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gYHBhdGhzYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXy5hdChvYmplY3QsIFsnYVswXS5iLmMnLCAnYVsxXSddKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKi9cbiAgICB2YXIgYXQgPSBmbGF0UmVzdChiYXNlQXQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgcHJvdG90eXBlYCBvYmplY3QuIElmIGFcbiAgICAgKiBgcHJvcGVydGllc2Agb2JqZWN0IGlzIGdpdmVuLCBpdHMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXNcbiAgICAgKiBhcmUgYXNzaWduZWQgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBUaGUgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgICAgKiAgIHRoaXMueCA9IDA7XG4gICAgICogICB0aGlzLnkgPSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAgICAgKiAgIFNoYXBlLmNhbGwodGhpcyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogQ2lyY2xlLnByb3RvdHlwZSA9IF8uY3JlYXRlKFNoYXBlLnByb3RvdHlwZSwge1xuICAgICAqICAgJ2NvbnN0cnVjdG9yJzogQ2lyY2xlXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiB2YXIgY2lyY2xlID0gbmV3IENpcmNsZTtcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBDaXJjbGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY2lyY2xlIGluc3RhbmNlb2YgU2hhcGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcyA9PSBudWxsID8gcmVzdWx0IDogYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAgICAgKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAgICAgKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gICAgICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgICAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgICAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kZWZhdWx0c2AgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgYXNzaWduc1xuICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0c0RlZXAoeyAnYSc6IHsgJ2InOiAyIH0gfSwgeyAnYSc6IHsgJ2InOiAxLCAnYyc6IDMgfSB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IDIsICdjJzogMyB9IH1cbiAgICAgKi9cbiAgICB2YXIgZGVmYXVsdHNEZWVwID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgYXJncy5wdXNoKHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSk7XG4gICAgICByZXR1cm4gYXBwbHkobWVyZ2VXaXRoLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+ICdiYXJuZXknIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGJhc2VGb3JPd24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGEgY29sbGVjdGlvbiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiByZXR1cm5zICdwZWJibGVzJyBhc3N1bWluZyBgXy5maW5kS2V5YCByZXR1cm5zICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kTGFzdEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93blJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAgICAgKiBvYmplY3QgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdFxuICAgICAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5SaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJbihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3Iob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JJbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9ySW5SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2MnLCAnYicsIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvckluYCBsb2dzICdhJywgJ2InLCB0aGVuICdjJy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3JSaWdodChvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmRcbiAgICAgKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uXG4gICAgICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvck93blJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yT3duYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgKiBgb2JqZWN0YCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JPd25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdiJyB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JPd25gIGxvZ3MgJ2EnIHRoZW4gJ2InLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93blJpZ2h0KG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAqIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICogQHNlZSBfLmZ1bmN0aW9uc0luXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9ucyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBpbmhlcml0ZWRcbiAgICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKiBAc2VlIF8uZnVuY3Rpb25zXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9uc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uc0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gICAgICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IHsgJ2InOiAyIH0gfTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYS5iJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvdGhlciwgJ2EnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBpbnZlcnRlZCBrZXlzIGFuZCB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gICAgICogcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pbnZlcnQob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogJ2MnLCAnMic6ICdiJyB9XG4gICAgICovXG4gICAgdmFyIGludmVydCA9IGNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbdmFsdWVdID0ga2V5O1xuICAgIH0sIGNvbnN0YW50KGlkZW50aXR5KSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludmVydGAgZXhjZXB0IHRoYXQgdGhlIGludmVydGVkIG9iamVjdCBpcyBnZW5lcmF0ZWRcbiAgICAgKiBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogY29ycmVzcG9uZGluZyBpbnZlcnRlZCB2YWx1ZSBvZiBlYWNoIGludmVydGVkIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzXG4gICAgICogcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGludmVydGVkIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gICAgICpcbiAgICAgKiBfLmludmVydEJ5KG9iamVjdCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiAnZ3JvdXAnICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnZ3JvdXAxJzogWydhJywgJ2MnXSwgJ2dyb3VwMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICB2YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07XG4gICAgICB9XG4gICAgfSwgZ2V0SXRlcmF0ZWUpO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IFsxLCAyLCAzLCA0XSB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmludm9rZShvYmplY3QsICdhWzBdLmIuYy5zbGljZScsIDEsIDMpO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIHZhciBpbnZva2UgPSBiYXNlUmVzdChiYXNlSW52b2tlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAgICAgKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5cyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiBfLmtleXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWycwJywgJzEnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1hcFZhbHVlc2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICogc2FtZSB2YWx1ZXMgYXMgYG9iamVjdGAgYW5kIGtleXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZVxuICAgICAqIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQHNlZSBfLm1hcFZhbHVlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICByZXR1cm4ga2V5ICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBLZXlzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgYG9iamVjdGAgYW5kIHZhbHVlcyBnZW5lcmF0ZWRcbiAgICAgKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBzZWUgXy5tYXBLZXlzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgJ2FnZScpO1xuICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAgICAgKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGFyZVxuICAgICAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gICAgICogYXNzaWdubWVudC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBTdWJzZXF1ZW50XG4gICAgICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYic6IDIgfSwgeyAnZCc6IDQgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIG90aGVyID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVyZ2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBtZXJnZWQgdmFsdWVzIG9mIHRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlXG4gICAgICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAgICAgKiBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggc2l4IGFyZ3VtZW50czpcbiAgICAgKiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogWzFdLCAnYic6IFsyXSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiBbM10sICdiJzogWzRdIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlV2l0aChvYmplY3QsIG90aGVyLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogWzEsIDNdLCAnYic6IFsyLCA0XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICAgICAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIHZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gICAgICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfSk7XG4gICAgICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tCeWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mXG4gICAgICogdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYG9iamVjdGAgdGhhdFxuICAgICAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLm9taXRCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9taXRCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHBpY2tCeShvYmplY3QsIG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBgb2JqZWN0YCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIHZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAgICAgKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGlja0J5KG9iamVjdCwgXy5pc051bWJlcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gcGlja0J5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICAgIH0pO1xuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlKTtcbiAgICAgIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwcmVkaWNhdGUodmFsdWUsIHBhdGhbMF0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhXG4gICAgICogZnVuY3Rpb24gaXQncyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZFxuICAgICAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMScpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMicpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3VsdChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICAgICAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICAgICAqIGFyZSBjcmVhdGVkIGZvciBhbGwgb3RoZXIgbWlzc2luZyBwcm9wZXJ0aWVzLiBVc2UgYF8uc2V0V2l0aGAgdG8gY3VzdG9taXplXG4gICAgICogYHBhdGhgIGNyZWF0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgWyd4JywgJzAnLCAneScsICd6J10sIDUpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAobnNWYWx1ZSwga2V5LCBuc09iamVjdCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICpcbiAgICAgKiBfLnNldFdpdGgob2JqZWN0LCAnWzBdWzFdJywgJ2EnLCBPYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdpdGgob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGBcbiAgICAgKiB3aGljaCBjYW4gYmUgY29uc3VtZWQgYnkgYF8uZnJvbVBhaXJzYC4gSWYgYG9iamVjdGAgaXMgYSBtYXAgb3Igc2V0LCBpdHNcbiAgICAgKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBlbnRyaWVzXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMV0sIFsnYicsIDJdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzID0gY3JlYXRlVG9QYWlycyhrZXlzKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnNcbiAgICAgKiBmb3IgYG9iamVjdGAgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwXG4gICAgICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZW50cmllc0luXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlyc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl0sIFsnYycsIDNdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzSW4gPSBjcmVhdGVUb1BhaXJzKGtleXNJbik7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICAgICAqIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgdGhydSBgaXRlcmF0ZWVgLCB3aXRoIGVhY2ggaW52b2NhdGlvblxuICAgICAqIHBvdGVudGlhbGx5IG11dGF0aW5nIHRoZSBgYWNjdW11bGF0b3JgIG9iamVjdC4gSWYgYGFjY3VtdWxhdG9yYCBpcyBub3RcbiAgICAgKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0sIFtdKTtcbiAgICAgKiAvLyA9PiBbNCwgOV1cbiAgICAgKlxuICAgICAqIF8udHJhbnNmb3JtKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgICAgIGlmIChhY2N1bXVsYXRvciA9PSBudWxsKSB7XG4gICAgICAgIHZhciBDdG9yID0gb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0gaXNBcnIgPyBuZXcgQ3RvciA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzRnVuY3Rpb24oQ3RvcikgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIChpc0Fyckxpa2UgPyBhcnJheUVhY2ggOiBiYXNlRm9yT3duKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcHJvcGVydHkgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gICAgICogXy51bnNldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udW5zZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdHJ1ZSA6IGJhc2VVbnNldChvYmplY3QsIHBhdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBhY2NlcHRzIGB1cGRhdGVyYCB0byBwcm9kdWNlIHRoZVxuICAgICAqIHZhbHVlIHRvIHNldC4gVXNlIGBfLnVwZGF0ZVdpdGhgIHRvIGN1c3RvbWl6ZSBgcGF0aGAgY3JlYXRpb24uIFRoZSBgdXBkYXRlcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlKG9iamVjdCwgJ2FbMF0uYi5jJywgZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIG47IH0pO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICogLy8gPT4gOVxuICAgICAqXG4gICAgICogXy51cGRhdGUob2JqZWN0LCAneFswXS55LnonLCBmdW5jdGlvbihuKSB7IHJldHVybiBuID8gbiArIDEgOiAwOyB9KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVwZGF0ZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7fTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlV2l0aChvYmplY3QsICdbMF1bMV0nLCBfLmNvbnN0YW50KCdhJyksIE9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV2l0aChvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlciksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKCdoaScpO1xuICAgICAqIC8vID0+IFsnaCcsICdpJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5XG4gICAgICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICAgICAqIC8vID0+IC01XG4gICAgICpcbiAgICAgKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVwcGVyID0gdG9OdW1iZXIodXBwZXIpO1xuICAgICAgICB1cHBlciA9IHVwcGVyID09PSB1cHBlciA/IHVwcGVyIDogMDtcbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvd2VyID0gdG9OdW1iZXIobG93ZXIpO1xuICAgICAgICBsb3dlciA9IGxvd2VyID09PSBsb3dlciA/IGxvd2VyIDogMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSwgbG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAgICAgKiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLCBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICogSWYgYHN0YXJ0YCBpcyBncmVhdGVyIHRoYW4gYGVuZGAgdGhlIHBhcmFtcyBhcmUgc3dhcHBlZCB0byBzdXBwb3J0XG4gICAgICogbmVnYXRpdmUgcmFuZ2VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMy4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLnJhbmdlLCBfLnJhbmdlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDMsIDIsIDQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCA4KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgyLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDEuMiwgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDUuMiwgNCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgtMywgLTIsIC02KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9GaW5pdGUoc3RhcnQpO1xuICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgfVxuICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgIHJldHVybiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICogSWYgb25seSBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIHRoZSBnaXZlbiBudW1iZXJcbiAgICAgKiBpcyByZXR1cm5lZC4gSWYgYGZsb2F0aW5nYCBpcyBgdHJ1ZWAsIG9yIGVpdGhlciBgbG93ZXJgIG9yIGB1cHBlcmAgYXJlXG4gICAgICogZmxvYXRzLCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyPTBdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3VwcGVyPTFdIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmbG9hdGluZ10gU3BlY2lmeSByZXR1cm5pbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMCwgNSk7XG4gICAgICogLy8gPT4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUpO1xuICAgICAqIC8vID0+IGFsc28gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUsIHRydWUpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMS4yLCA1LjIpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMS4yIGFuZCA1LjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByYW5kb20obG93ZXIsIHVwcGVyLCBmbG9hdGluZykge1xuICAgICAgaWYgKGZsb2F0aW5nICYmIHR5cGVvZiBmbG9hdGluZyAhPSAnYm9vbGVhbicgJiYgaXNJdGVyYXRlZUNhbGwobG93ZXIsIHVwcGVyLCBmbG9hdGluZykpIHtcbiAgICAgICAgdXBwZXIgPSBmbG9hdGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChmbG9hdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXBwZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSB1cHBlcjtcbiAgICAgICAgICB1cHBlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG93ZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSBsb3dlcjtcbiAgICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID09PSB1bmRlZmluZWQgJiYgdXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb3dlciA9IDA7XG4gICAgICAgIHVwcGVyID0gMTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsb3dlciA9IHRvRmluaXRlKGxvd2VyKTtcbiAgICAgICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICAgIGxvd2VyID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cHBlciA9IHRvRmluaXRlKHVwcGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID4gdXBwZXIpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBsb3dlcjtcbiAgICAgICAgbG93ZXIgPSB1cHBlcjtcbiAgICAgICAgdXBwZXIgPSB0ZW1wO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nIHx8IGxvd2VyICUgMSB8fCB1cHBlciAlIDEpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBuYXRpdmVSYW5kb20oKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZU1pbihsb3dlciArIChyYW5kICogKHVwcGVyIC0gbG93ZXIgKyBmcmVlUGFyc2VGbG9hdCgnMWUtJyArICgocmFuZCArICcnKS5sZW5ndGggLSAxKSkpKSwgdXBwZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbY2FtZWwgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FtZWxDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhbWVsIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICovXG4gICAgdmFyIGNhbWVsQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyBjYXBpdGFsaXplKHdvcmQpIDogd29yZCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UgYW5kIHRoZSByZW1haW5pbmdcbiAgICAgKiB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FwaXRhbGl6ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhcGl0YWxpemUoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICAgICAgcmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmdcbiAgICAgKiBbTGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0xX1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSlcbiAgICAgKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gICAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZ1xuICAgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZGVidXJyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICAgICAqIC8vID0+ICdkZWphIHZ1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4sIGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBlbmRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InLCAyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLCB0YXJnZXQsIHBvc2l0aW9uKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG5cbiAgICAgIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGVuZ3RoXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIGxlbmd0aCk7XG5cbiAgICAgIHZhciBlbmQgPSBwb3NpdGlvbjtcbiAgICAgIHBvc2l0aW9uIC09IHRhcmdldC5sZW5ndGg7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIGVuZCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICAgICAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gICAgICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICAgICAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAgICAgKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAgICAgKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICAgICAqIFhTUyB2ZWN0b3JzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gICAgICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICAgICAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBba2ViYWIgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3BlY2lhbF9jYXNlX3N0eWxlcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKi9cbiAgICB2YXIga2ViYWJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckZpcnN0KCdGcmVkJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnZlJFRCdcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLlxuICAgICAqIFBhZGRpbmcgY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgY2FuJ3QgYmUgZXZlbmx5IGRpdmlkZWQgYnkgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgpO1xuICAgICAqIC8vID0+ICcgIGFiYyAgICdcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCA4LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnXy1hYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc3RyTGVuZ3RoID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSwgY2hhcnMpICtcbiAgICAgICAgc3RyaW5nICtcbiAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksIGNoYXJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSByaWdodCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWRFbmQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgICAgICA/IChzdHJpbmcgKyBjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJyAgIGFiYydcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdfLV9hYmMnXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICAgICAgPyAoY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJzKSArIHN0cmluZylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gaW50ZWdlciBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4LiBJZiBgcmFkaXhgIGlzXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGFcbiAgICAgKiBoZXhhZGVjaW1hbCwgaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZVxuICAgICAqIFtFUzUgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjEuMi4yKSBvZiBgcGFyc2VJbnRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXg9MTBdIFRoZSByYWRpeCB0byBpbnRlcnByZXQgYHZhbHVlYCBieS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhcnNlSW50KCcwOCcpO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICcwOCcsICcxMCddLCBfLnBhcnNlSW50KTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyc2VJbnQoc3RyaW5nLCByYWRpeCwgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCB8fCByYWRpeCA9PSBudWxsKSB7XG4gICAgICAgIHJhZGl4ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocmFkaXgpIHtcbiAgICAgICAgcmFkaXggPSArcmFkaXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlUGFyc2VJbnQodG9TdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyksIHJhZGl4IHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGVhdHMgdGhlIGdpdmVuIHN0cmluZyBgbmAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnKicsIDMpO1xuICAgICAqIC8vID0+ICcqKionXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnYWJjJywgMik7XG4gICAgICogLy8gPT4gJ2FiY2FiYydcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAwKTtcbiAgICAgKiAvLyA9PiAnJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0cmluZyksIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIG1hdGNoZXMgZm9yIGBwYXR0ZXJuYCBpbiBgc3RyaW5nYCB3aXRoIGByZXBsYWNlbWVudGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNyZXBsYWNlYF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3JlcGxhY2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVwbGFjZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gcmVwbGFjZW1lbnQgVGhlIG1hdGNoIHJlcGxhY2VtZW50LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZXBsYWNlKCdIaSBGcmVkJywgJ0ZyZWQnLCAnQmFybmV5Jyk7XG4gICAgICogLy8gPT4gJ0hpIEJhcm5leSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBsYWNlKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoYXJnc1swXSk7XG5cbiAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA8IDMgPyBzdHJpbmcgOiBzdHJpbmcucmVwbGFjZShhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtzbmFrZSBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbmFrZV9jYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqL1xuICAgIHZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnXycgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgYHN0cmluZ2AgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNzcGxpdGBdKGh0dHBzOi8vbWRuLmlvL1N0cmluZy9zcGxpdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gc3BsaXQuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHNwbGl0IGJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGltaXRdIFRoZSBsZW5ndGggdG8gdHJ1bmNhdGUgcmVzdWx0cyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHN0cmluZyBzZWdtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zcGxpdCgnYS1iLWMnLCAnLScsIDIpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIGlmIChsaW1pdCAmJiB0eXBlb2YgbGltaXQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBsaW1pdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGxpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmICghbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKFxuICAgICAgICAgICAgdHlwZW9mIHNlcGFyYXRvciA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgKHNlcGFyYXRvciAhPSBudWxsICYmICFpc1JlZ0V4cChzZXBhcmF0b3IpKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gYmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7XG4gICAgICAgIGlmICghc2VwYXJhdG9yICYmIGhhc1VuaWNvZGUoc3RyaW5nKSkge1xuICAgICAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShzdHJpbmcpLCAwLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBbc3RhcnQgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3R5bGlzdGljX29yX3NwZWNpYWxpc2VkX3VzYWdlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0YXJ0IGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgc3RhcnRDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgdXBwZXJGaXJzdCh3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj0wXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIHN0cmluZy5sZW5ndGgpO1xuXG4gICAgICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcbiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGNhbiBpbnRlcnBvbGF0ZSBkYXRhIHByb3BlcnRpZXNcbiAgICAgKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICAgICAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICAgICAqIHByb3BlcnRpZXMgbWF5IGJlIGFjY2Vzc2VkIGFzIGZyZWUgdmFyaWFibGVzIGluIHRoZSB0ZW1wbGF0ZS4gSWYgYSBzZXR0aW5nXG4gICAgICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEluIHRoZSBkZXZlbG9wbWVudCBidWlsZCBgXy50ZW1wbGF0ZWAgdXRpbGl6ZXNcbiAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gICAgICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5ldmFsdWF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXZhbHVhdGVdXG4gICAgICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICAgICAqICBBbiBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gICAgICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zb3VyY2VVUkw9J2xvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICAgICAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudmFyaWFibGU9J29iaiddXG4gICAgICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gICAgICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGludGVybmFsIGBwcmludGAgZnVuY3Rpb24gaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGJhcm5leSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogLy8gRGlzYWJsZSBzdXBwb3J0IGJ5IHJlcGxhY2luZyB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gcGViYmxlcyEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlPSBcIlxcXFw8JS0gdmFsdWUgJVxcXFw+XCIgJT4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICAgICAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSh0ZXh0LCB7ICdpbXBvcnRzJzogeyAnanEnOiBqUXVlcnkgfSB9KTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAqIGNvbXBpbGVkKGRhdGEpO1xuICAgICAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGB2YXJpYWJsZWAgb3B0aW9uIHRvIGVuc3VyZSBhIHdpdGgtc3RhdGVtZW50IGlzbid0IHVzZWQgaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAqIC8vICAgcmV0dXJuIF9fcDtcbiAgICAgKiAvLyB9XG4gICAgICpcbiAgICAgKiAvLyBVc2UgY3VzdG9tIHRlbXBsYXRlIGRlbGltaXRlcnMuXG4gICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnbXVzdGFjaGUnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBzb3VyY2VgIHByb3BlcnR5IHRvIGlubGluZSBjb21waWxlZCB0ZW1wbGF0ZXMgZm9yIG1lYW5pbmdmdWxcbiAgICAgKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAgICAgKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICAgICAqICAgdmFyIEpTVCA9IHtcXFxuICAgICAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICAgICAqICAgfTtcXFxuICAgICAqICcpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgICAgIC8vIEJhc2VkIG9uIEpvaG4gUmVzaWcncyBgdG1wbGAgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgICAgIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICAgICAgdmFyIHNldHRpbmdzID0gbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSkge1xuICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICAgICAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICAgICAgaW1wb3J0c0tleXMgPSBrZXlzKGltcG9ydHMpLFxuICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICAgICAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICAgICAgaXNFdmFsdWF0aW5nLFxuICAgICAgICAgIGluZGV4ID0gMCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgICAgIHNvdXJjZSA9IFwiX19wICs9ICdcIjtcblxuICAgICAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICAgICAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAgICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCdcbiAgICAgICwgJ2cnKTtcblxuICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAgLy8gVGhlIHNvdXJjZVVSTCBnZXRzIGluamVjdGVkIGludG8gdGhlIHNvdXJjZSB0aGF0J3MgZXZhbC1lZCwgc28gYmUgY2FyZWZ1bFxuICAgICAgLy8gdG8gbm9ybWFsaXplIGFsbCBraW5kcyBvZiB3aGl0ZXNwYWNlLCBzbyBlLmcuIG5ld2xpbmVzIChhbmQgdW5pY29kZSB2ZXJzaW9ucyBvZiBpdCkgY2FuJ3Qgc25lYWsgaW5cbiAgICAgIC8vIGFuZCBlc2NhcGUgdGhlIGNvbW1lbnQsIHRodXMgaW5qZWN0aW5nIGNvZGUgdGhhdCBnZXRzIGV2YWxlZC5cbiAgICAgIHZhciBzb3VyY2VVUkwgPSAnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAgKGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgICAgICAgPyAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvXFxzL2csICcgJylcbiAgICAgICAgICA6ICgnbG9kYXNoLnRlbXBsYXRlU291cmNlc1snICsgKCsrdGVtcGxhdGVDb3VudGVyKSArICddJylcbiAgICAgICAgKSArICdcXG4nO1xuXG4gICAgICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBpbmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgICAgIGlmIChlc2NhcGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZVZhbHVlICsgXCI7XFxuX19wICs9ICdcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbigoX190ID0gKFwiICsgaW50ZXJwb2xhdGVWYWx1ZSArIFwiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICAgIC8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgbmVlZHMgYG1hdGNoYCByZXR1cm5lZCBpblxuICAgICAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTtcblxuICAgICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgICAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAgICAgLy8gY29kZSB0byBhZGQgdGhlIGRhdGEgb2JqZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLlxuICAgICAgdmFyIHZhcmlhYmxlID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAndmFyaWFibGUnKSAmJiBvcHRpb25zLnZhcmlhYmxlO1xuICAgICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgICAgIH1cbiAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIGEgZm9yYmlkZGVuIGNoYXJhY3RlciB3YXMgZm91bmQgaW4gYHZhcmlhYmxlYCwgdG8gcHJldmVudFxuICAgICAgLy8gcG90ZW50aWFsIGNvbW1hbmQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAgICBlbHNlIGlmIChyZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycy50ZXN0KHZhcmlhYmxlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9URU1QTF9WQVJfRVJST1JfVEVYVCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgICAgIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nTWlkZGxlLCAnJDEnKVxuICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAgICAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgICAgIHNvdXJjZSA9ICdmdW5jdGlvbignICsgKHZhcmlhYmxlIHx8ICdvYmonKSArICcpIHtcXG4nICtcbiAgICAgICAgKHZhcmlhYmxlXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogJ29iaiB8fCAob2JqID0ge30pO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgICAgIChpc0VzY2FwaW5nXG4gICAgICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgICAgIDogJydcbiAgICAgICAgKSArXG4gICAgICAgIChpc0V2YWx1YXRpbmdcbiAgICAgICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICAgICAgXCJmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIlxuICAgICAgICAgIDogJztcXG4nXG4gICAgICAgICkgK1xuICAgICAgICBzb3VyY2UgK1xuICAgICAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKGltcG9ydHNLZXlzLCBzb3VyY2VVUkwgKyAncmV0dXJuICcgKyBzb3VyY2UpXG4gICAgICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24ncyBzb3VyY2UgYnkgaXRzIGB0b1N0cmluZ2AgbWV0aG9kIG9yXG4gICAgICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICAgICAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIGlmIChpc0Vycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gbG93ZXIgY2FzZSBqdXN0IGxpa2VcbiAgICAgKiBbU3RyaW5nI3RvTG93ZXJDYXNlXShodHRwczovL21kbi5pby90b0xvd2VyQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignLS1Gb28tQmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnLS1mb28tYmFyLS0nXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb29iYXInXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ19fZm9vX2Jhcl9fJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTG93ZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gdXBwZXIgY2FzZSBqdXN0IGxpa2VcbiAgICAgKiBbU3RyaW5nI3RvVXBwZXJDYXNlXShodHRwczovL21kbi5pby90b1VwcGVyQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnLS1GT08tQkFSLS0nXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdGT09CQVInXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICogLy8gPT4gJ19fRk9PX0JBUl9fJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvVXBwZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lmaWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cmltLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqXG4gICAgICogXy50cmltKCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqXG4gICAgICogXy5tYXAoWycgIGZvbyAgJywgJyAgYmFyICAnXSwgXy50cmltKTtcbiAgICAgKiAvLyA9PiBbJ2ZvbycsICdiYXInXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW0oc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gYmFzZVRyaW0oc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykgKyAxO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJy1fLWFiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbVN0YXJ0KCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJ2FiYyAgJ1xuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMtXy0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCBzdGFydCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScuLi4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHRydW5jYXRlIHRvLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAnICdcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnbGVuZ3RoJzogMjQsXG4gICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZS4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnb21pc3Npb24nOiAnIFsuLi5dJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICAgICAgb21pc3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OO1xuXG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgbGVuZ3RoID0gJ2xlbmd0aCcgaW4gb3B0aW9ucyA/IHRvSW50ZWdlcihvcHRpb25zLmxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgIG9taXNzaW9uID0gJ29taXNzaW9uJyBpbiBvcHRpb25zID8gYmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pIDogb21pc3Npb247XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyk7XG4gICAgICAgIHN0ckxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBlbmQgPSBsZW5ndGggLSBzdHJpbmdTaXplKG9taXNzaW9uKTtcbiAgICAgIGlmIChlbmQgPCAxKSB7XG4gICAgICAgIHJldHVybiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBzdHJTeW1ib2xzXG4gICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICAgICAgOiBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJTeW1ib2xzKSB7XG4gICAgICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2gsXG4gICAgICAgICAgICAgIHN1YnN0cmluZyA9IHJlc3VsdDtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIHRvU3RyaW5nKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpKSArICdnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkge1xuICAgICAgICAgICAgdmFyIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09PSB1bmRlZmluZWQgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgICAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAgICAgKiBgJmFtcDtgLCBgJmx0O2AsIGAmZ3Q7YCwgYCZxdW90O2AsIGFuZCBgJiMzOTtgIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIEhUTUwgZW50aXRpZXMgYXJlIHVuZXNjYXBlZC4gVG8gdW5lc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIEhUTUwgZW50aXRpZXMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNi4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRlJFRCdcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9VcHBlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnLCAvW14sIF0rL2cpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3b3JkcyhzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICAgICAgaWYgKHBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGJpbmQgYW5kIGFzc2lnbiB0aGUgYm91bmQgbWV0aG9kcyB0by5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB2aWV3ID0ge1xuICAgICAqICAgJ2xhYmVsJzogJ2RvY3MnLFxuICAgICAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdjbGlja2VkICcgKyB0aGlzLmxhYmVsKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5iaW5kQWxsKHZpZXcsIFsnY2xpY2snXSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICAgICAqIC8vID0+IExvZ3MgJ2NsaWNrZWQgZG9jcycgd2hlbiBjbGlja2VkLlxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAga2V5ID0gdG9LZXkoa2V5KTtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICAgICAqIHBhaXJzIGFyZSBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAgICAgKiAgIFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksICAgICAgICAgICBfLmNvbnN0YW50KCdtYXRjaGVzIEEnKV0sXG4gICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwgXy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLFxuICAgICAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gJ21hdGNoZXMgQSdcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBCJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAgICAgKiAvLyA9PiAnbm8gbWF0Y2gnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZChwYWlycykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHRvSXRlcmF0ZWUgPSBnZXRJdGVyYXRlZSgpO1xuXG4gICAgICBwYWlycyA9ICFsZW5ndGggPyBbXSA6IGFycmF5TWFwKHBhaXJzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFpclsxXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdG9JdGVyYXRlZShwYWlyWzBdKSwgcGFpclsxXV07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgICAgaWYgKGFwcGx5KHBhaXJbMF0sIHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGEgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgYHRydWVgIGlmXG4gICAgICogYWxsIHByZWRpY2F0ZXMgcmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNUb2Agd2l0aFxuICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDIsICdiJzogMSB9LFxuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICAgICAqIGl0cyBwbGFjZS4gVGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGBudWxsYCxcbiAgICAgKiBvciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8oMSwgMTApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdFRvKHVuZGVmaW5lZCwgMTApO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVmYXVsdFRvKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBzZWUgXy5mbG93UmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93UmlnaHQoW3NxdWFyZSwgXy5hZGRdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIHRoZVxuICAgICAqIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIGVsZW1lbnQuIElmIGBmdW5jYCBpcyBhbiBhcnJheSBvciBvYmplY3QsIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZSh7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqIF8uaXRlcmF0ZWUgPSBfLndyYXAoXy5pdGVyYXRlZSwgZnVuY3Rpb24oaXRlcmF0ZWUsIGZ1bmMpIHtcbiAgICAgKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICogICAgIHJldHVybiBmdW5jLnRlc3Qoc3RyaW5nKTtcbiAgICAgKiAgIH07XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihbJ2FiYycsICdkZWYnXSwgL2VmLyk7XG4gICAgICogLy8gPT4gWydkZWYnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAgICAgKiBvYmplY3QgYW5kIGBzb3VyY2VgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGVxdWl2YWxlbnRcbiAgICAgKiBwcm9wZXJ0eSB2YWx1ZXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmlzTWF0Y2hgIHdpdGggYHNvdXJjZWBcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGNoZWNrZWQgYnkgY29tYmluaW5nIHNldmVyYWwgbWF0Y2hlcnNcbiAgICAgKiB1c2luZyBgXy5vdmVyU29tZWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKlxuICAgICAqIC8vIENoZWNraW5nIGZvciBzZXZlcmFsIHBvc3NpYmxlIHZhbHVlc1xuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8ub3ZlclNvbWUoW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgXy5tYXRjaGVzKHsgJ2EnOiA0IH0pXSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSwgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdGhlXG4gICAgICogdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0IHRvIGBzcmNWYWx1ZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlXG4gICAgICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdFxuICAgICAqIGBzcmNWYWx1ZWAgdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWVcbiAgICAgKiBgXy5pc0VxdWFsYCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGNoZWNrZWQgYnkgY29tYmluaW5nIHNldmVyYWwgbWF0Y2hlcnNcbiAgICAgKiB1c2luZyBgXy5vdmVyU29tZWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKG9iamVjdHMsIF8ubWF0Y2hlc1Byb3BlcnR5KCdhJywgNCkpO1xuICAgICAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gICAgICpcbiAgICAgKiAvLyBDaGVja2luZyBmb3Igc2V2ZXJhbCBwb3NzaWJsZSB2YWx1ZXNcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm92ZXJTb21lKFtfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDEpLCBfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDQpXSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSwgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICogQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgyKSB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IF8uY29uc3RhbnQoMSkgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKCdhLmInKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICpcbiAgICAgKiBfLm1hcChvYmplY3RzLCBfLm1ldGhvZChbJ2EnLCAnYiddKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgdmFyIG1ldGhvZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWV0aG9kYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICAgICAqIHRoZSBtZXRob2QgYXQgYSBnaXZlbiBwYXRoIG9mIGBvYmplY3RgLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IF8udGltZXMoMywgXy5jb25zdGFudCksXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kT2YgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbGwgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2VcbiAgICAgKiBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9iamVjdGAgaXMgYSBmdW5jdGlvbiwgdGhlbiBtZXRob2RzXG4gICAgICogYXJlIGFkZGVkIHRvIGl0cyBwcm90b3R5cGUgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVc2UgYF8ucnVuSW5Db250ZXh0YCB0byBjcmVhdGUgYSBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB0b1xuICAgICAqIGF2b2lkIGNvbmZsaWN0cyBjYXVzZWQgYnkgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IFtvYmplY3Q9bG9kYXNoXSBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBmdW5jdGlvbnMgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hhaW49dHJ1ZV0gU3BlY2lmeSB3aGV0aGVyIG1peGlucyBhcmUgY2hhaW5hYmxlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0aW9uKHYpIHtcbiAgICAgKiAgICAgcmV0dXJuIC9bYWVpb3VdL2kudGVzdCh2KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICAgICAqIF8udm93ZWxzKCdmcmVkJyk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICpcbiAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1peGluKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwgcHJvcHMpO1xuXG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsICYmXG4gICAgICAgICAgIShpc09iamVjdChzb3VyY2UpICYmIChtZXRob2ROYW1lcy5sZW5ndGggfHwgIXByb3BzLmxlbmd0aCkpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBzb3VyY2U7XG4gICAgICAgIHNvdXJjZSA9IG9iamVjdDtcbiAgICAgICAgb2JqZWN0ID0gdGhpcztcbiAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGFpbiA9ICEoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NoYWluJyBpbiBvcHRpb25zKSB8fCAhIW9wdGlvbnMuY2hhaW4sXG4gICAgICAgICAgaXNGdW5jID0gaXNGdW5jdGlvbihvYmplY3QpO1xuXG4gICAgICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBzb3VyY2VbbWV0aG9kTmFtZV07XG4gICAgICAgIG9iamVjdFttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgICAgICBvYmplY3QucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXztcbiAgICAgICAgICAgIGlmIChjaGFpbiB8fCBjaGFpbkFsbCkge1xuICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLFxuICAgICAgICAgICAgICAgICAgYWN0aW9ucyA9IHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTtcblxuICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goeyAnZnVuYyc6IGZ1bmMsICdhcmdzJzogYXJndW1lbnRzLCAndGhpc0FyZyc6IG9iamVjdCB9KTtcbiAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVydHMgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHMgcHJldmlvdXMgdmFsdWUgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG9cbiAgICAgKiB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBsb2Rhc2ggPSBfLm5vQ29uZmxpY3QoKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub0NvbmZsaWN0KCkge1xuICAgICAgaWYgKHJvb3QuXyA9PT0gdGhpcykge1xuICAgICAgICByb290Ll8gPSBvbGREYXNoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAgICAgKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggYG5gLiBJZiBgbmAgaXMgbmVnYXRpdmUsXG4gICAgICogdGhlIG50aCBhcmd1bWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXNzLXRocnUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5udGhBcmcoMSk7XG4gICAgICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+ICdiJ1xuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygtMik7XG4gICAgICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+ICdjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG50aEFyZyhuKSB7XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VOdGgoYXJncywgbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBpdGVyYXRlZXNgIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlc1xuICAgICAqIGFuZCByZXR1cm5zIHRoZWlyIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyKFtNYXRoLm1heCwgTWF0aC5taW5dKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoMSwgMiwgMywgNCk7XG4gICAgICogLy8gPT4gWzQsIDFdXG4gICAgICovXG4gICAgdmFyIG92ZXIgPSBjcmVhdGVPdmVyKGFycmF5TWFwKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFsbCoqIG9mIHRoZSBgcHJlZGljYXRlc2AgcmV0dXJuXG4gICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBGb2xsb3dpbmcgc2hvcnRoYW5kcyBhcmUgcG9zc2libGUgZm9yIHByb3ZpZGluZyBwcmVkaWNhdGVzLlxuICAgICAqIFBhc3MgYW4gYE9iamVjdGAgYW5kIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiBwYXJhbWV0ZXIgZm9yIGBfLm1hdGNoZXNgIHRvIGNyZWF0ZSB0aGUgcHJlZGljYXRlLlxuICAgICAqIFBhc3MgYW4gYEFycmF5YCBvZiBwYXJhbWV0ZXJzIGZvciBgXy5tYXRjaGVzUHJvcGVydHlgIGFuZCB0aGUgcHJlZGljYXRlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGVtLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJFdmVyeShbQm9vbGVhbiwgaXNGaW5pdGVdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoJzEnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBmdW5jKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBmdW5jKE5hTik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgb3ZlckV2ZXJ5ID0gY3JlYXRlT3ZlcihhcnJheUV2ZXJ5KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFueSoqIG9mIHRoZSBgcHJlZGljYXRlc2AgcmV0dXJuXG4gICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBGb2xsb3dpbmcgc2hvcnRoYW5kcyBhcmUgcG9zc2libGUgZm9yIHByb3ZpZGluZyBwcmVkaWNhdGVzLlxuICAgICAqIFBhc3MgYW4gYE9iamVjdGAgYW5kIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiBwYXJhbWV0ZXIgZm9yIGBfLm1hdGNoZXNgIHRvIGNyZWF0ZSB0aGUgcHJlZGljYXRlLlxuICAgICAqIFBhc3MgYW4gYEFycmF5YCBvZiBwYXJhbWV0ZXJzIGZvciBgXy5tYXRjaGVzUHJvcGVydHlgIGFuZCB0aGUgcHJlZGljYXRlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGVtLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiB2YXIgbWF0Y2hlc0Z1bmMgPSBfLm92ZXJTb21lKFt7ICdhJzogMSB9LCB7ICdhJzogMiB9XSlcbiAgICAgKiB2YXIgbWF0Y2hlc1Byb3BlcnR5RnVuYyA9IF8ub3ZlclNvbWUoW1snYScsIDFdLCBbJ2EnLCAyXV0pXG4gICAgICovXG4gICAgdmFyIG92ZXJTb21lID0gY3JlYXRlT3ZlcihhcnJheVNvbWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICAgICAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAgICAgKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoNCk7XG4gICAgICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKC00KTtcbiAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICAgICAqIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDQpO1xuICAgICAqIC8vID0+IFszLCAyLCAxLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KC00KTtcbiAgICAgKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgxLCA1KTtcbiAgICAgKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAyMCwgNSk7XG4gICAgICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgdmFyIHJhbmdlUmlnaHQgPSBjcmVhdGVSYW5nZSh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAgICAgKiAvLyA9PiBbW10sIFtdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICAgICAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uc3R1Yk9iamVjdCk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAgICAgKiAvLyA9PiBbe30sIHt9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlN0cmluZyk7XG4gICAgICogLy8gPT4gWycnLCAnJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlRydWUpO1xuICAgICAqIC8vID0+IFt0cnVlLCB0cnVlXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJUcnVlKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBlYWNoIGludm9jYXRpb24uIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBTdHJpbmcpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJywgJzInXVxuICAgICAqXG4gICAgICogIF8udGltZXMoNCwgXy5jb25zdGFudCgwKSk7XG4gICAgICogLy8gPT4gWzAsIDAsIDAsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO1xuICAgICAgbiAtPSBNQVhfQVJSQVlfTEVOR1RIO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1BhdGgoJ2EuYi5jJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgdG9LZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdWdlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWRkZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFkZCg2LCA0KTtcbiAgICAgKiAvLyA9PiAxMFxuICAgICAqL1xuICAgIHZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gICAgICByZXR1cm4gYXVnZW5kICsgYWRkZW5kO1xuICAgIH0sIDApO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgdXAgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNC4wMDYpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2LjAwNCwgMik7XG4gICAgICogLy8gPT4gNi4wMVxuICAgICAqXG4gICAgICogXy5jZWlsKDYwNDAsIC0yKTtcbiAgICAgKiAvLyA9PiA2MTAwXG4gICAgICovXG4gICAgdmFyIGNlaWwgPSBjcmVhdGVSb3VuZCgnY2VpbCcpO1xuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc29yIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGl2aWRlKDYsIDQpO1xuICAgICAqIC8vID0+IDEuNVxuICAgICAqL1xuICAgIHZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICByZXR1cm4gZGl2aWRlbmQgLyBkaXZpc29yO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCBkb3duIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgZG93biBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoMC4wNDYsIDIpO1xuICAgICAqIC8vID0+IDAuMDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQwMDBcbiAgICAgKi9cbiAgICB2YXIgZmxvb3IgPSBjcmVhdGVSb3VuZCgnZmxvb3InKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWF4KFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tYXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5tYXhCeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWF4Qnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF4QnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tZWFuKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lYW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgaWRlbnRpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVhbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIGF2ZXJhZ2VkLlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWVhbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8ubWluKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VMdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5taW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5taW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWNhbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwcm9kdWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm11bHRpcGx5KDYsIDQpO1xuICAgICAqIC8vID0+IDI0XG4gICAgICovXG4gICAgdmFyIG11bHRpcGx5ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmQpIHtcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnVlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdWJ0cmFoZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICByZXR1cm4gbWludWVuZCAtIHN1YnRyYWhlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3VtKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTdW0oYXJyYXksIGlkZW50aXR5KVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zdW1gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnN1bUJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gd3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZnRlciA9IGFmdGVyO1xuICAgIGxvZGFzaC5hcnkgPSBhcnk7XG4gICAgbG9kYXNoLmFzc2lnbiA9IGFzc2lnbjtcbiAgICBsb2Rhc2guYXNzaWduSW4gPSBhc3NpZ25JbjtcbiAgICBsb2Rhc2guYXNzaWduSW5XaXRoID0gYXNzaWduSW5XaXRoO1xuICAgIGxvZGFzaC5hc3NpZ25XaXRoID0gYXNzaWduV2l0aDtcbiAgICBsb2Rhc2guYXQgPSBhdDtcbiAgICBsb2Rhc2guYmVmb3JlID0gYmVmb3JlO1xuICAgIGxvZGFzaC5iaW5kID0gYmluZDtcbiAgICBsb2Rhc2guYmluZEFsbCA9IGJpbmRBbGw7XG4gICAgbG9kYXNoLmJpbmRLZXkgPSBiaW5kS2V5O1xuICAgIGxvZGFzaC5jYXN0QXJyYXkgPSBjYXN0QXJyYXk7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25jYXQgPSBjb25jYXQ7XG4gICAgbG9kYXNoLmNvbmQgPSBjb25kO1xuICAgIGxvZGFzaC5jb25mb3JtcyA9IGNvbmZvcm1zO1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZUJ5ID0gZGlmZmVyZW5jZUJ5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlV2l0aCA9IGRpZmZlcmVuY2VXaXRoO1xuICAgIGxvZGFzaC5kcm9wID0gZHJvcDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0ID0gZHJvcFJpZ2h0O1xuICAgIGxvZGFzaC5kcm9wUmlnaHRXaGlsZSA9IGRyb3BSaWdodFdoaWxlO1xuICAgIGxvZGFzaC5kcm9wV2hpbGUgPSBkcm9wV2hpbGU7XG4gICAgbG9kYXNoLmZpbGwgPSBmaWxsO1xuICAgIGxvZGFzaC5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLmZsYXRNYXAgPSBmbGF0TWFwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVlcCA9IGZsYXRNYXBEZWVwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVwdGggPSBmbGF0TWFwRGVwdGg7XG4gICAgbG9kYXNoLmZsYXR0ZW4gPSBmbGF0dGVuO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVlcCA9IGZsYXR0ZW5EZWVwO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVwdGggPSBmbGF0dGVuRGVwdGg7XG4gICAgbG9kYXNoLmZsaXAgPSBmbGlwO1xuICAgIGxvZGFzaC5mbG93ID0gZmxvdztcbiAgICBsb2Rhc2guZmxvd1JpZ2h0ID0gZmxvd1JpZ2h0O1xuICAgIGxvZGFzaC5mcm9tUGFpcnMgPSBmcm9tUGFpcnM7XG4gICAgbG9kYXNoLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2guZnVuY3Rpb25zSW4gPSBmdW5jdGlvbnNJbjtcbiAgICBsb2Rhc2guZ3JvdXBCeSA9IGdyb3VwQnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbkJ5ID0gaW50ZXJzZWN0aW9uQnk7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBpbnRlcnNlY3Rpb25XaXRoO1xuICAgIGxvZGFzaC5pbnZlcnQgPSBpbnZlcnQ7XG4gICAgbG9kYXNoLmludmVydEJ5ID0gaW52ZXJ0Qnk7XG4gICAgbG9kYXNoLmludm9rZU1hcCA9IGludm9rZU1hcDtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiAgICBsb2Rhc2gua2V5QnkgPSBrZXlCeTtcbiAgICBsb2Rhc2gua2V5cyA9IGtleXM7XG4gICAgbG9kYXNoLmtleXNJbiA9IGtleXNJbjtcbiAgICBsb2Rhc2gubWFwID0gbWFwO1xuICAgIGxvZGFzaC5tYXBLZXlzID0gbWFwS2V5cztcbiAgICBsb2Rhc2gubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuICAgIGxvZGFzaC5tYXRjaGVzID0gbWF0Y2hlcztcbiAgICBsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gbWF0Y2hlc1Byb3BlcnR5O1xuICAgIGxvZGFzaC5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBsb2Rhc2gubWVyZ2UgPSBtZXJnZTtcbiAgICBsb2Rhc2gubWVyZ2VXaXRoID0gbWVyZ2VXaXRoO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICBsb2Rhc2gubnRoQXJnID0gbnRoQXJnO1xuICAgIGxvZGFzaC5vbWl0ID0gb21pdDtcbiAgICBsb2Rhc2gub21pdEJ5ID0gb21pdEJ5O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gub3JkZXJCeSA9IG9yZGVyQnk7XG4gICAgbG9kYXNoLm92ZXIgPSBvdmVyO1xuICAgIGxvZGFzaC5vdmVyQXJncyA9IG92ZXJBcmdzO1xuICAgIGxvZGFzaC5vdmVyRXZlcnkgPSBvdmVyRXZlcnk7XG4gICAgbG9kYXNoLm92ZXJTb21lID0gb3ZlclNvbWU7XG4gICAgbG9kYXNoLnBhcnRpYWwgPSBwYXJ0aWFsO1xuICAgIGxvZGFzaC5wYXJ0aWFsUmlnaHQgPSBwYXJ0aWFsUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbiAgICBsb2Rhc2gucGljayA9IHBpY2s7XG4gICAgbG9kYXNoLnBpY2tCeSA9IHBpY2tCeTtcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsID0gcHVsbEFsbDtcbiAgICBsb2Rhc2gucHVsbEFsbEJ5ID0gcHVsbEFsbEJ5O1xuICAgIGxvZGFzaC5wdWxsQWxsV2l0aCA9IHB1bGxBbGxXaXRoO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJhbmdlUmlnaHQgPSByYW5nZVJpZ2h0O1xuICAgIGxvZGFzaC5yZWFyZyA9IHJlYXJnO1xuICAgIGxvZGFzaC5yZWplY3QgPSByZWplY3Q7XG4gICAgbG9kYXNoLnJlbW92ZSA9IHJlbW92ZTtcbiAgICBsb2Rhc2gucmVzdCA9IHJlc3Q7XG4gICAgbG9kYXNoLnJldmVyc2UgPSByZXZlcnNlO1xuICAgIGxvZGFzaC5zYW1wbGVTaXplID0gc2FtcGxlU2l6ZTtcbiAgICBsb2Rhc2guc2V0ID0gc2V0O1xuICAgIGxvZGFzaC5zZXRXaXRoID0gc2V0V2l0aDtcbiAgICBsb2Rhc2guc2h1ZmZsZSA9IHNodWZmbGU7XG4gICAgbG9kYXNoLnNsaWNlID0gc2xpY2U7XG4gICAgbG9kYXNoLnNvcnRCeSA9IHNvcnRCeTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcSA9IHNvcnRlZFVuaXE7XG4gICAgbG9kYXNoLnNvcnRlZFVuaXFCeSA9IHNvcnRlZFVuaXFCeTtcbiAgICBsb2Rhc2guc3BsaXQgPSBzcGxpdDtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWlsID0gdGFpbDtcbiAgICBsb2Rhc2gudGFrZSA9IHRha2U7XG4gICAgbG9kYXNoLnRha2VSaWdodCA9IHRha2VSaWdodDtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0V2hpbGUgPSB0YWtlUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2gudGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuICAgIGxvZGFzaC50YXAgPSB0YXA7XG4gICAgbG9kYXNoLnRocm90dGxlID0gdGhyb3R0bGU7XG4gICAgbG9kYXNoLnRocnUgPSB0aHJ1O1xuICAgIGxvZGFzaC50b0FycmF5ID0gdG9BcnJheTtcbiAgICBsb2Rhc2gudG9QYWlycyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLnRvUGFpcnNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2gudG9QYXRoID0gdG9QYXRoO1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmFyeSA9IHVuYXJ5O1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlvbkJ5ID0gdW5pb25CeTtcbiAgICBsb2Rhc2gudW5pb25XaXRoID0gdW5pb25XaXRoO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW5pcUJ5ID0gdW5pcUJ5O1xuICAgIGxvZGFzaC51bmlxV2l0aCA9IHVuaXFXaXRoO1xuICAgIGxvZGFzaC51bnNldCA9IHVuc2V0O1xuICAgIGxvZGFzaC51bnppcCA9IHVuemlwO1xuICAgIGxvZGFzaC51bnppcFdpdGggPSB1bnppcFdpdGg7XG4gICAgbG9kYXNoLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgICBsb2Rhc2gudXBkYXRlV2l0aCA9IHVwZGF0ZVdpdGg7XG4gICAgbG9kYXNoLnZhbHVlcyA9IHZhbHVlcztcbiAgICBsb2Rhc2gudmFsdWVzSW4gPSB2YWx1ZXNJbjtcbiAgICBsb2Rhc2gud2l0aG91dCA9IHdpdGhvdXQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG4gICAgbG9kYXNoLndyYXAgPSB3cmFwO1xuICAgIGxvZGFzaC54b3IgPSB4b3I7XG4gICAgbG9kYXNoLnhvckJ5ID0geG9yQnk7XG4gICAgbG9kYXNoLnhvcldpdGggPSB4b3JXaXRoO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwT2JqZWN0RGVlcCA9IHppcE9iamVjdERlZXA7XG4gICAgbG9kYXNoLnppcFdpdGggPSB6aXBXaXRoO1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVudHJpZXMgPSB0b1BhaXJzO1xuICAgIGxvZGFzaC5lbnRyaWVzSW4gPSB0b1BhaXJzSW47XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5leHRlbmRXaXRoID0gYXNzaWduSW5XaXRoO1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIG1peGluKGxvZGFzaCwgbG9kYXNoKTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZGQgPSBhZGQ7XG4gICAgbG9kYXNoLmF0dGVtcHQgPSBhdHRlbXB0O1xuICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG4gICAgbG9kYXNoLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuICAgIGxvZGFzaC5jZWlsID0gY2VpbDtcbiAgICBsb2Rhc2guY2xhbXAgPSBjbGFtcDtcbiAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTtcbiAgICBsb2Rhc2guY2xvbmVEZWVwID0gY2xvbmVEZWVwO1xuICAgIGxvZGFzaC5jbG9uZURlZXBXaXRoID0gY2xvbmVEZWVwV2l0aDtcbiAgICBsb2Rhc2guY2xvbmVXaXRoID0gY2xvbmVXaXRoO1xuICAgIGxvZGFzaC5jb25mb3Jtc1RvID0gY29uZm9ybXNUbztcbiAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyO1xuICAgIGxvZGFzaC5kZWZhdWx0VG8gPSBkZWZhdWx0VG87XG4gICAgbG9kYXNoLmRpdmlkZSA9IGRpdmlkZTtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXEgPSBlcTtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZ2V0ID0gZ2V0O1xuICAgIGxvZGFzaC5ndCA9IGd0O1xuICAgIGxvZGFzaC5ndGUgPSBndGU7XG4gICAgbG9kYXNoLmhhcyA9IGhhcztcbiAgICBsb2Rhc2guaGFzSW4gPSBoYXNJbjtcbiAgICBsb2Rhc2guaGVhZCA9IGhlYWQ7XG4gICAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mO1xuICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5nZTtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzO1xuICAgIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbiAgICBsb2Rhc2guaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2U7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0ID0gaXNBcnJheUxpa2VPYmplY3Q7XG4gICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbiAgICBsb2Rhc2guaXNCdWZmZXIgPSBpc0J1ZmZlcjtcbiAgICBsb2Rhc2guaXNEYXRlID0gaXNEYXRlO1xuICAgIGxvZGFzaC5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG4gICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5O1xuICAgIGxvZGFzaC5pc0VxdWFsID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guaXNFcXVhbFdpdGggPSBpc0VxdWFsV2l0aDtcbiAgICBsb2Rhc2guaXNFcnJvciA9IGlzRXJyb3I7XG4gICAgbG9kYXNoLmlzRmluaXRlID0gaXNGaW5pdGU7XG4gICAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuICAgIGxvZGFzaC5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG4gICAgbG9kYXNoLmlzTGVuZ3RoID0gaXNMZW5ndGg7XG4gICAgbG9kYXNoLmlzTWFwID0gaXNNYXA7XG4gICAgbG9kYXNoLmlzTWF0Y2ggPSBpc01hdGNoO1xuICAgIGxvZGFzaC5pc01hdGNoV2l0aCA9IGlzTWF0Y2hXaXRoO1xuICAgIGxvZGFzaC5pc05hTiA9IGlzTmFOO1xuICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlO1xuICAgIGxvZGFzaC5pc05pbCA9IGlzTmlsO1xuICAgIGxvZGFzaC5pc051bGwgPSBpc051bGw7XG4gICAgbG9kYXNoLmlzTnVtYmVyID0gaXNOdW1iZXI7XG4gICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4gICAgbG9kYXNoLmlzT2JqZWN0TGlrZSA9IGlzT2JqZWN0TGlrZTtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU2FmZUludGVnZXIgPSBpc1NhZmVJbnRlZ2VyO1xuICAgIGxvZGFzaC5pc1NldCA9IGlzU2V0O1xuICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgIGxvZGFzaC5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuICAgIGxvZGFzaC5pc1R5cGVkQXJyYXkgPSBpc1R5cGVkQXJyYXk7XG4gICAgbG9kYXNoLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG4gICAgbG9kYXNoLmlzV2Vha01hcCA9IGlzV2Vha01hcDtcbiAgICBsb2Rhc2guaXNXZWFrU2V0ID0gaXNXZWFrU2V0O1xuICAgIGxvZGFzaC5qb2luID0gam9pbjtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubG93ZXJDYXNlID0gbG93ZXJDYXNlO1xuICAgIGxvZGFzaC5sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1heEJ5ID0gbWF4Qnk7XG4gICAgbG9kYXNoLm1lYW4gPSBtZWFuO1xuICAgIGxvZGFzaC5tZWFuQnkgPSBtZWFuQnk7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubWluQnkgPSBtaW5CeTtcbiAgICBsb2Rhc2guc3R1YkFycmF5ID0gc3R1YkFycmF5O1xuICAgIGxvZGFzaC5zdHViRmFsc2UgPSBzdHViRmFsc2U7XG4gICAgbG9kYXNoLnN0dWJPYmplY3QgPSBzdHViT2JqZWN0O1xuICAgIGxvZGFzaC5zdHViU3RyaW5nID0gc3R1YlN0cmluZztcbiAgICBsb2Rhc2guc3R1YlRydWUgPSBzdHViVHJ1ZTtcbiAgICBsb2Rhc2gubXVsdGlwbHkgPSBtdWx0aXBseTtcbiAgICBsb2Rhc2gubnRoID0gbnRoO1xuICAgIGxvZGFzaC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDtcbiAgICBsb2Rhc2gubm9vcCA9IG5vb3A7XG4gICAgbG9kYXNoLm5vdyA9IG5vdztcbiAgICBsb2Rhc2gucGFkID0gcGFkO1xuICAgIGxvZGFzaC5wYWRFbmQgPSBwYWRFbmQ7XG4gICAgbG9kYXNoLnBhZFN0YXJ0ID0gcGFkU3RhcnQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7XG4gICAgbG9kYXNoLnJvdW5kID0gcm91bmQ7XG4gICAgbG9kYXNoLnJ1bkluQ29udGV4dCA9IHJ1bkluQ29udGV4dDtcbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhCeSA9IHNvcnRlZEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4T2YgPSBzb3J0ZWRJbmRleE9mO1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXggPSBzb3J0ZWRMYXN0SW5kZXg7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5ID0gc29ydGVkTGFzdEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gc29ydGVkTGFzdEluZGV4T2Y7XG4gICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTtcbiAgICBsb2Rhc2guc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGg7XG4gICAgbG9kYXNoLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgbG9kYXNoLnN1bSA9IHN1bTtcbiAgICBsb2Rhc2guc3VtQnkgPSBzdW1CeTtcbiAgICBsb2Rhc2gudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICBsb2Rhc2gudGltZXMgPSB0aW1lcztcbiAgICBsb2Rhc2gudG9GaW5pdGUgPSB0b0Zpbml0ZTtcbiAgICBsb2Rhc2gudG9JbnRlZ2VyID0gdG9JbnRlZ2VyO1xuICAgIGxvZGFzaC50b0xlbmd0aCA9IHRvTGVuZ3RoO1xuICAgIGxvZGFzaC50b0xvd2VyID0gdG9Mb3dlcjtcbiAgICBsb2Rhc2gudG9OdW1iZXIgPSB0b051bWJlcjtcbiAgICBsb2Rhc2gudG9TYWZlSW50ZWdlciA9IHRvU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgbG9kYXNoLnRvVXBwZXIgPSB0b1VwcGVyO1xuICAgIGxvZGFzaC50cmltID0gdHJpbTtcbiAgICBsb2Rhc2gudHJpbUVuZCA9IHRyaW1FbmQ7XG4gICAgbG9kYXNoLnRyaW1TdGFydCA9IHRyaW1TdGFydDtcbiAgICBsb2Rhc2gudHJ1bmNhdGUgPSB0cnVuY2F0ZTtcbiAgICBsb2Rhc2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbiAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDtcbiAgICBsb2Rhc2gudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuICAgIGxvZGFzaC51cHBlckZpcnN0ID0gdXBwZXJGaXJzdDtcblxuICAgIC8vIEFkZCBhbGlhc2VzLlxuICAgIGxvZGFzaC5lYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5maXJzdCA9IGhlYWQ7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gucHJvdG90eXBlLCBtZXRob2ROYW1lKSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsb2Rhc2guVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICAvLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG4gICAgYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgbG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyID0gbG9kYXNoO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuICAgIGFycmF5RWFjaChbJ2Ryb3AnLCAndGFrZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24obikge1xuICAgICAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSAodGhpcy5fX2ZpbHRlcmVkX18gJiYgIWluZGV4KVxuICAgICAgICAgID8gbmV3IExhenlXcmFwcGVyKHRoaXMpXG4gICAgICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5fX2ZpbHRlcmVkX18pIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihuLCByZXN1bHQuX190YWtlQ291bnRfXyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHtcbiAgICAgICAgICAgICdzaXplJzogbmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpLFxuICAgICAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICAgICAnaXRlcmF0ZWUnOiBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAgICAgJ3R5cGUnOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5oZWFkYCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnaGVhZCcsICdsYXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGFrZU5hbWVdKDEpLnZhbHVlKClbMF07XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaW5pdGlhbGAgYW5kIGBfLnRhaWxgLlxuICAgIGFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGRyb3BOYW1lID0gJ2Ryb3AnICsgKGluZGV4ID8gJycgOiAnUmlnaHQnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXyAmJiAoc3RhcnQgPiAwIHx8IGVuZCA8IDApKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuZHJvcChzdGFydCk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gdG9JbnRlZ2VyKGVuZCk7XG4gICAgICAgIHJlc3VsdCA9IGVuZCA8IDAgPyByZXN1bHQuZHJvcFJpZ2h0KC1lbmQpIDogcmVzdWx0LnRha2UoZW5kIC0gc3RhcnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgbG9kYXNoRnVuYyA9IGxvZGFzaFtpc1Rha2VyID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV0sXG4gICAgICAgICAgcmV0VW53cmFwcGVkID0gaXNUYWtlciB8fCAvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgICBhcmdzID0gaXNUYWtlciA/IFsxXSA6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLCBhcnJheVB1c2goW3ZhbHVlXSwgYXJncykpO1xuICAgICAgICAgIHJldHVybiAoaXNUYWtlciAmJiBjaGFpbkFsbCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHVzZUxhenkgJiYgY2hlY2tJdGVyYXRlZSAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVyYXRlZS5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIEF2b2lkIGxhenkgdXNlIGlmIHRoZSBpdGVyYXRlZSBoYXMgYSBcImxlbmd0aFwiIHZhbHVlIG90aGVyIHRoYW4gYDFgLlxuICAgICAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzVW53cmFwcGVkID0gcmV0VW53cmFwcGVkICYmICFjaGFpbkFsbCxcbiAgICAgICAgICAgIG9ubHlMYXp5ID0gaXNMYXp5ICYmICFpc0h5YnJpZDtcblxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIocmVzdWx0LCBjaGFpbkFsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIGlzVW53cmFwcGVkID8gKGlzVGFrZXIgPyByZXN1bHQudmFsdWUoKVswXSA6IHJlc3VsdC52YWx1ZSgpKSA6IHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBhcnJheUVhY2goWydwb3AnLCAncHVzaCcsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgICAgICBjaGFpbk5hbWUgPSAvXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyAndGFwJyA6ICd0aHJ1JyxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSAvXig/OnBvcHxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBNYXAgbWluaWZpZWQgbWV0aG9kIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSArICcnO1xuICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCBrZXkpKSB7XG4gICAgICAgICAgcmVhbE5hbWVzW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZWFsTmFtZXNba2V5XS5wdXNoKHsgJ25hbWUnOiBtZXRob2ROYW1lLCAnZnVuYyc6IGxvZGFzaEZ1bmMgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWFsTmFtZXNbY3JlYXRlSHlicmlkKHVuZGVmaW5lZCwgV1JBUF9CSU5EX0tFWV9GTEFHKS5uYW1lXSA9IFt7XG4gICAgICAnbmFtZSc6ICd3cmFwcGVyJyxcbiAgICAgICdmdW5jJzogdW5kZWZpbmVkXG4gICAgfV07XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGF6eVdyYXBwZXJgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS52YWx1ZSA9IGxhenlWYWx1ZTtcblxuICAgIC8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuYXQgPSB3cmFwcGVyQXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jaGFpbiA9IHdyYXBwZXJDaGFpbjtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbW1pdCA9IHdyYXBwZXJDb21taXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gd3JhcHBlck5leHQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSB3cmFwcGVyVmFsdWU7XG5cbiAgICAvLyBBZGQgbGF6eSBhbGlhc2VzLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuZmlyc3QgPSBsb2Rhc2gucHJvdG90eXBlLmhlYWQ7XG5cbiAgICBpZiAoc3ltSXRlcmF0b3IpIHtcbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbc3ltSXRlcmF0b3JdID0gd3JhcHBlclRvSXRlcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH0pO1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8vIEV4cG9ydCBsb2Rhc2guXG4gIHZhciBfID0gcnVuSW5Db250ZXh0KCk7XG5cbiAgLy8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6XG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEV4cG9zZSBMb2Rhc2ggb24gdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBlcnJvcnMgd2hlbiBMb2Rhc2ggaXNcbiAgICAvLyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTUQgbG9hZGVyLlxuICAgIC8vIFNlZSBodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sI21pc21hdGNoIGZvciBtb3JlIGRldGFpbHMuXG4gICAgLy8gVXNlIGBfLm5vQ29uZmxpY3RgIHRvIHJlbW92ZSBMb2Rhc2ggZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuXG4gICAgLy8gRGVmaW5lIGFzIGFuIGFub255bW91cyBtb2R1bGUgc28sIHRocm91Z2ggcGF0aCBtYXBwaW5nLCBpdCBjYW4gYmVcbiAgICAvLyByZWZlcmVuY2VkIGFzIHRoZSBcInVuZGVyc2NvcmVcIiBtb2R1bGUuXG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGBleHBvcnRzYCBhZnRlciBgZGVmaW5lYCBpbiBjYXNlIGEgYnVpbGQgb3B0aW1pemVyIGFkZHMgaXQuXG4gIGVsc2UgaWYgKGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMuXG4gICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBmcmVlRXhwb3J0cy5fID0gXztcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgdG8gdGhlIGdsb2JhbCBvYmplY3QuXG4gICAgcm9vdC5fID0gXztcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLmlzUmVhZHlcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInRyYW5zbGF0aW9ucy1hcHBcIiwgYXR0cnM6IHsgaWQ6IFwiYXBwXCIgfSB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250YWluZXItZmx1aWRcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiU2VhcmNoXCIsIHsgb246IHsgc2VhcmNoOiBfdm0ub25TZWFyY2ggfSB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidHJhbnNsYXRpb25zLXN1bW1hcnlcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLnRvdGFsVHJhbnNsYXRpb25zKSldKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnRvdGFsTWlzc2luZ1RyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ0b3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICAtXFxuICAgICAgICAgIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJtaXNzaW5nXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udG90YWxNaXNzaW5nVHJhbnNsYXRpb25zU3RyaW5nKSlcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJTaWRlYmFyXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsOiB0aGlzLiRyZWZzLnRyYW5zTW9kYWwsXG4gICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbDogdGhpcy4kcmVmcy5wcmluY2lwYWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwiUHJpbmNpcGFsXCIsIHtcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJwcmluY2lwYWxcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG1vZGFsOiB0aGlzLiRyZWZzLnRyYW5zTW9kYWwgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiUFNNb2RhbFwiLCB7XG4gICAgICAgICAgICByZWY6IFwidHJhbnNNb2RhbFwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHJhbnNsYXRpb25zOiBfdm0udHJhbnNsYXRpb25zIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjIyOTBmOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc1YjIyOTBmOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1YjIyOTBmOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1YjIyOTBmOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjIyOTBmOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YjIyOTBmOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3RyYW5zbGF0aW9ucy9jb21wb25lbnRzL2FwcC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kLTggbWItNFwiLCBhdHRyczogeyBpZDogXCJzZWFyY2hcIiB9IH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZm9ybVwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJzZWFyY2gtZm9ybVwiLFxuICAgICAgICBvbjoge1xuICAgICAgICAgIHN1Ym1pdDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJsYWJlbFwiLCBbX3ZtLl92KF92bS5fcyhfdm0udHJhbnMoXCJzZWFyY2hfbGFiZWxcIikpKV0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZ3JvdXBcIiB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwiUFNUYWdzXCIsIHtcbiAgICAgICAgICAgICAgcmVmOiBcInBzVGFnc1wiLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHRhZ3M6IF92bS50YWdzLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0udHJhbnMoXCJzZWFyY2hfcGxhY2Vob2xkZXJcIilcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHsgdGFnQ2hhbmdlOiBfdm0ub25TZWFyY2ggfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZ3JvdXAtYXBwZW5kXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJQU0J1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzZWFyY2gtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHByaW1hcnk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkNsaWNrIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcInNlYXJjaFwiKVxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJidXR0b25fc2VhcmNoXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApXG4gICAgICBdXG4gICAgKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MzAwMmFlNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzMwMDJhZTYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzMwMDJhZTYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzMwMDJhZTYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3NlYXJjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzMwMDJhZTYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzMwMDJhZTYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJ0cmFuc2l0aW9uXCIsIHsgYXR0cnM6IHsgbmFtZTogXCJmYWRlXCIgfSB9LCBbXG4gICAgX3ZtLnByaW5jaXBhbFJlYWR5XG4gICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLXNtLTkgY2FyZFwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInAtMyB0cmFuc2xhdGlvbnMtd3JhcHBlclwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5ub1Jlc3VsdFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiUFNBbGVydFwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWxlcnQtdHlwZVwiOiBcIkFMRVJUX1RZUEVfV0FSTklOR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXMtY2xvc2VcIjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLm5vUmVzdWx0SW5mbykgKyBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ0cmFuc2xhdGlvbnMtY2F0YWxvZyByb3cgcC0wXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJQU0FsZXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY29sLXNtLTEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFsZXJ0LXR5cGVcIjogXCJBTEVSVF9UWVBFX0lORk9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXMtY2xvc2VcIjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uc2VhcmNoSW5mbykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLXNtLTggcHQtM1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaDNcIiwgeyBzdGF0aWNDbGFzczogXCJkb21haW4taW5mb1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jdXJyZW50RG9tYWluKSldKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5jdXJyZW50RG9tYWluVG90YWxUcmFuc2xhdGlvbnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jdXJyZW50RG9tYWluVG90YWxNaXNzaW5nVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImN1cnJlbnREb21haW5Ub3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgLSBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJtaXNzaW5nXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmN1cnJlbnREb21haW5Ub3RhbE1pc3NpbmdUcmFuc2xhdGlvbnNTdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wtc20tNFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiUFNQYWdpbmF0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJmbG9hdC1zbS1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImN1cnJlbnQtaW5kZXhcIjogX3ZtLmN1cnJlbnRQYWdpbmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYWdlcy1jb3VudFwiOiBfdm0ucGFnZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgcGFnZUNoYW5nZWQ6IF92bS5vblBhZ2VDaGFuZ2VkIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3JtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImNvbC1zbS0xMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBfdm0uc2F2ZUFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRlZDogX3ZtLmlzRWRpdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnNhdmVUcmFuc2xhdGlvbnMoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wtc20tMTIgbWItMlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUFNCdXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJmbG9hdC1zbS1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcHJpbWFyeTogdHJ1ZSwgdHlwZTogXCJzdWJtaXRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwiYnV0dG9uX3NhdmVcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS50cmFuc2xhdGlvbnNDYXRhbG9nLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwiVHJhbnNsYXRpb25JbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWQ6IHRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdHJhbnNsYXRpb24uZGVmYXVsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJleHRyYS1pbmZvXCI6IF92bS5nZXREb21haW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24udHJlZV9kb21haW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGVkaXRlZEFjdGlvbjogX3ZtLmlzRWRpdGVkIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wtc20tMTJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlBTQnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmxvYXQtc20tcmlnaHQgbXQtM1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcHJpbWFyeTogdHJ1ZSwgdHlwZTogXCJzdWJtaXRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwiYnV0dG9uX3NhdmVcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wtc20tMTJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcIlBTUGFnaW5hdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VycmVudC1pbmRleFwiOiBfdm0uY3VycmVudFBhZ2luYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhZ2VzLWNvdW50XCI6IF92bS5wYWdlc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBwYWdlQ2hhbmdlZDogX3ZtLm9uUGFnZUNoYW5nZWQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YTljNjA5NCZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD02YTljNjA5NCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjZhOWM2MDk0XCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzZhOWM2MDk0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzZhOWM2MDk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzZhOWM2MDk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmE5YzYwOTQmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNmE5YzYwOTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9wcmluY2lwYWwvaW5kZXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZm9ybS1ncm91cFwiIH0sXG4gICAgW1xuICAgICAgX2MoXCJsYWJlbFwiLCBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLmdldFRyYW5zbGF0ZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcImdldFRyYW5zbGF0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICAgIGNsYXNzOiB7IG1pc3Npbmc6IF92bS5pc01pc3NpbmcgfSxcbiAgICAgICAgYXR0cnM6IHsgcm93czogXCIyXCIgfSxcbiAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5nZXRUcmFuc2xhdGVkIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3ZtLmdldFRyYW5zbGF0ZWQgPSAkZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJQU0J1dHRvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwibXQtMyBmbG9hdC1zbS1yaWdodFwiLFxuICAgICAgICAgIGF0dHJzOiB7IHByaW1hcnk6IGZhbHNlLCBnaG9zdDogXCJcIiB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmVzZXRUcmFuc2xhdGlvbiB9XG4gICAgICAgIH0sXG4gICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnRyYW5zKFwiYnV0dG9uX3Jlc2V0XCIpKSArIFwiXFxuICBcIildXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic21hbGxcIiwgeyBzdGF0aWNDbGFzczogXCJtdC0zXCIgfSwgW192bS5fdihfdm0uX3MoX3ZtLmV4dHJhSW5mbykpXSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWlucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZTFhNTA3MCZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3RyYW5zbGF0aW9uLWlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zZTFhNTA3MCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjNlMWE1MDcwXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzNlMWE1MDcwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzNlMWE1MDcwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzNlMWE1MDcwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2UxYTUwNzAmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignM2UxYTUwNzAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9wcmluY2lwYWwvdHJhbnNsYXRpb24taW5wdXQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbC1zbS0zXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY2FyZCBwLTNcIiB9LFxuICAgICAgW1xuICAgICAgICBfdm0udHJlZVJlYWR5XG4gICAgICAgICAgPyBfYyhcIlBTVHJlZVwiLCB7XG4gICAgICAgICAgICAgIHJlZjogXCJkb21haW5UcmVlXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IF92bS5kb21haW5zVHJlZSxcbiAgICAgICAgICAgICAgICBcImNsYXNzLW5hbWVcIjogXCJ0cmFuc2xhdGlvblRyZWVcIixcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IF92bS50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50LWl0ZW1cIjogX3ZtLmN1cnJlbnRJdGVtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfYyhcIlBTU3Bpbm5lclwiKVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMwYmM5MTAyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzMwYmM5MTAyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzMwYmM5MTAyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzMwYmM5MTAyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzBiYzkxMDImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzBiYzkxMDInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy90cmFuc2xhdGlvbnMvY29tcG9uZW50cy9zaWRlYmFyL2luZGV4LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJwcy1hbGVydCBhbGVydFwiLFxuICAgICAgY2xhc3M6IF92bS5jbGFzc09iamVjdCxcbiAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYWxlcnRcIiB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uaGFzQ2xvc2VcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImNsb3NlXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICBcImRhdGEtZGlzbWlzc1wiOiBcImFsZXJ0XCIsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiQ2xvc2VcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNsaWNrKCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbX3ZtLl92KFwiY2xvc2VcIildKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJwXCIsIHsgc3RhdGljQ2xhc3M6IFwiYWxlcnQtdGV4dFwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtYWxlcnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtYWxlcnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1hbGVydC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWJhMzg5ODgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtYWxlcnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1hbGVydC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYmEzODk4OCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYmEzODk4OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYmEzODk4OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtYWxlcnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiYTM4OTg4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFiYTM4OTg4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1hbGVydC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuXCIsXG4gICAgICBjbGFzczogX3ZtLmNsYXNzT2JqZWN0LFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgb246IHsgY2xpY2s6IF92bS5vbkNsaWNrIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDM0YmYwOTQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHMtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzAzNGJmMDk0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzAzNGJmMDk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzAzNGJmMDk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzNGJmMDk0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzAzNGJmMDk0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1idXR0b24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm1kLWNoZWNrYm94XCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJsYWJlbFwiLFxuICAgICAgW1xuICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uY2hlY2tlZCxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjaGVja2VkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiB7IGluZGV0ZXJtaW5hdGU6IF92bS5pc0luZGV0ZXJtaW5hdGUgfSxcbiAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImNoZWNrYm94XCIsIGlkOiBfdm0uaWQgfSxcbiAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0uY2hlY2tlZClcbiAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLmNoZWNrZWQsIG51bGwpID4gLTFcbiAgICAgICAgICAgICAgOiBfdm0uY2hlY2tlZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0uY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgIHZhciAkJHYgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5jaGVja2VkID0gJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChfdm0uY2hlY2tlZCA9ICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdm0uY2hlY2tlZCA9ICQkY1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWQtY2hlY2tib3gtY29udHJvbFwiIH0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uX3QoXCJsYWJlbFwiKVxuICAgICAgXSxcbiAgICAgIDJcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTczY2E0MGM3JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHMtY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzNjYTQwYzcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzNjYTQwYzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzNjYTQwYzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03M2NhNDBjNyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3M2NhNDBjNycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtY2hlY2tib3gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcIm1vZGFsIGZhZGVcIixcbiAgICAgIGF0dHJzOiB7IGlkOiBcInBzLW1vZGFsXCIsIHRhYmluZGV4OiBcIi0xXCIsIHJvbGU6IFwiZGlhbG9nXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtb2RhbC1kaWFsb2dcIiwgYXR0cnM6IHsgcm9sZTogXCJkb2N1bWVudFwiIH0gfSwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm1vZGFsLWNvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtb2RhbC1oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX20oMCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJoNFwiLCB7IHN0YXRpY0NsYXNzOiBcIm1vZGFsLXRpdGxlXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50cmFuc2xhdGlvbnMubW9kYWxfdGl0bGUpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtb2RhbC1ib2R5XCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRyYW5zbGF0aW9ucy5tb2RhbF9jb250ZW50KSArIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibW9kYWwtZm9vdGVyXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJQU0J1dHRvblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0bi1sZ1wiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcHJpbWFyeTogXCJcIiwgXCJkYXRhLWRpc21pc3NcIjogXCJtb2RhbFwiIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLm9uU2F2ZSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zbGF0aW9ucy5idXR0b25fc2F2ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJQU0J1dHRvblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0bi1sZ1wiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZ2hvc3Q6IFwiXCIsIFwiZGF0YS1kaXNtaXNzXCI6IFwibW9kYWxcIiB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkxlYXZlIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnNsYXRpb25zLmJ1dHRvbl9sZWF2ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXG4gICAgICBcImJ1dHRvblwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJjbG9zZVwiLFxuICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCBcImRhdGEtZGlzbWlzc1wiOiBcIm1vZGFsXCIgfVxuICAgICAgfSxcbiAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJjbG9zZVwiKV0pXVxuICAgIClcbiAgfVxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1tb2RhbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTdiYTJiNGUmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1tb2RhbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MTdiYTJiNGUmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIxN2JhMmI0ZVwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxN2JhMmI0ZScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxN2JhMmI0ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxN2JhMmI0ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE3YmEyYjRlJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzE3YmEyYjRlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1tb2RhbC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5kaXNwbGF5UGFnaW5hdGlvblxuICAgID8gX2MoXCJuYXZcIiwgeyBzdGF0aWNDbGFzczogXCJtdC0xIG14LWF1dG9cIiB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBjbGFzczogeyBtdWx0aTogX3ZtLmlzTXVsdGlQYWdpbmF0aW9uIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5pc011bHRpUGFnaW5hdGlvblxuICAgICAgICAgICAgICA/IF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJwYWdlLWl0ZW0gcHJldmlvdXNcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmFjdGl2ZUxlZnRBcnJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhY3RpdmVMZWZ0QXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmxvYXQtbGVmdCBwYWdlLWxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ucHJldigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwic3Itb25seVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlByZXZpb3VzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS5wYWdlc0NvdW50LCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwYWdlLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogX3ZtLmNoZWNrQ3VycmVudEluZGV4KGluZGV4KSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uc2hvd0luZGV4KGluZGV4KVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBhZ2UtbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGwtMFwiOiBfdm0uc2hvd0ZpcnN0RG90cyhpbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwci0wXCI6IF92bS5zaG93TGFzdERvdHMoaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2hhbmdlUGFnZShpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5pc011bHRpUGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93Rmlyc3REb3RzKGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93Rmlyc3REb3RzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiLi4uXCIpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoaW5kZXgpICsgXCJcXG4gICAgICAgIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzTXVsdGlQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dMYXN0RG90cyhpbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0xhc3REb3RzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiLi4uXCIpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5pc011bHRpUGFnaW5hdGlvblxuICAgICAgICAgICAgICA/IF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJwYWdlLWl0ZW0gbmV4dFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uYWN0aXZlUmlnaHRBcnJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhY3RpdmVSaWdodEFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImZsb2F0LWxlZnQgcGFnZS1saW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm5leHQoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW19jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInNyLW9ubHlcIiB9LCBbX3ZtLl92KFwiTmV4dFwiKV0pXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtcGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLXBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU2M2M0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLXBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1wYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzYyZjU2M2M0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzYyZjU2M2M0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzYyZjU2M2M0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy1wYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MmY1NjNjNCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2MmY1NjNjNCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtcGFnaW5hdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHMtc3Bpbm5lclwiIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1zcGlubmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ODY5MTI3NiZcIlxudmFyIHNjcmlwdCA9IHt9XG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDg2OTEyNzYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDg2OTEyNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDg2OTEyNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ4NjkxMjc2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzQ4NjkxMjc2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1zcGlubmVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJ0YWdzLWlucHV0IHNlYXJjaC1pbnB1dCBzZWFyY2ggZC1mbGV4IGZsZXgtd3JhcFwiLFxuICAgICAgY2xhc3M6IHsgXCJzZWFyY2gtd2l0aC1pY29uXCI6IF92bS5oYXNJY29uIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF92bS5mb2N1cygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInRhZ3Mtd3JhcHBlclwiIH0sXG4gICAgICAgIF92bS5fbChfdm0udGFncywgZnVuY3Rpb24odGFnLCBpbmRleCkge1xuICAgICAgICAgIHJldHVybiBfYyhcInNwYW5cIiwgeyBrZXk6IGluZGV4LCBzdGF0aWNDbGFzczogXCJ0YWdcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKHRhZykpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiaVwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIixcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNsb3NlKGluZGV4KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW192bS5fdihcImNsb3NlXCIpXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pLFxuICAgICAgICAwXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnRhZyxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwidGFnXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlZjogXCJ0YWdzXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImZvcm0tY29udHJvbCBpbnB1dFwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucGxhY2Vob2xkZXJUb0Rpc3BsYXksXG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgc2l6ZTogX3ZtLmlucHV0U2l6ZVxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnRhZyB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGtleXVwOiBfdm0ub25LZXlVcCxcbiAgICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEkZXZlbnQudHlwZS5pbmRleE9mKFwia2V5XCIpICYmXG4gICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5hZGQoX3ZtLnRhZylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEkZXZlbnQudHlwZS5pbmRleE9mKFwia2V5XCIpICYmXG4gICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRlbGV0ZVwiLCBbOCwgNDZdLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICBcIkJhY2tzcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICAgIFwiRGVsXCJcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm4gX3ZtLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdm0udGFnID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtdGFncy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy10YWdzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtdGFncy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGY5ZmQ3YzYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtdGFncy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BzLXRhZ3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMGY5ZmQ3YzYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMGY5ZmQ3YzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMGY5ZmQ3YzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLXRhZ3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBmOWZkN2M2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBmOWZkN2M2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy10YWdzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInBzLXRyZWUtaXRlbXNcIiwgY2xhc3M6IHsgY2xhc3NOYW1lOiBfdm0uY2xhc3NOYW1lIH0gfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImQtZmxleCB0cmVlLW5hbWVcIixcbiAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IF92bS5hY3RpdmUsIGRpc2FibGU6IF92bS5tb2RlbC5kaXNhYmxlIH0sXG4gICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jbGlja0VsZW1lbnQgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLXRleHRcIixcbiAgICAgICAgICAgICAgY2xhc3M6IFt7IGhpZGRlbjogX3ZtLmlzSGlkZGVuIH0sIF92bS5jaGV2cm9uU3RhdHVzXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnRyYW5zbGF0aW9uc1xuICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwic3Itb25seVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwub3BlblxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IF92bS50cmFuc2xhdGlvbnMucmVkdWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLnRyYW5zbGF0aW9ucy5leHBhbmRcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uaGFzQ2hlY2tib3hcbiAgICAgICAgICAgID8gX2MoXCJQU0NoZWNrYm94XCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IF92bS5tb2RlbC5uYW1lLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiBfdm0uaWQsIG1vZGVsOiBfdm0ubW9kZWwgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjaGVja2VkOiBfdm0ub25DaGVjayB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwidHJlZS1sYWJlbFwiLCBjbGFzczogeyB3YXJuaW5nOiBfdm0uaXNXYXJuaW5nIH0gfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5tb2RlbC5uYW1lKSldXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5kaXNwbGF5RXh0cmFMYWJlbFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInRyZWUtZXh0cmEtbGFiZWwgZC1zbS1ub25lIGQteGwtaW5saW5lLWJsb2NrXCIgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZ2V0RXh0cmFMYWJlbCkpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLmRpc3BsYXlFeHRyYUxhYmVsXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInRyZWUtZXh0cmEtbGFiZWwtbWluaSBkLXhsLW5vbmVcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyh0aGlzLm1vZGVsLmV4dHJhTGFiZWwpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5pc0ZvbGRlclxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5vcGVuLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJvcGVuXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInRyZWVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ubW9kZWwuY2hpbGRyZW4sIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInRyZWUtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgZGlzYWJsZTogX3ZtLm1vZGVsLmRpc2FibGUgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJQU1RyZWVJdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICByZWZJbkZvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJoYXMtY2hlY2tib3hcIjogX3ZtLmhhc0NoZWNrYm94LFxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBfdm0udHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIFwiY3VycmVudC1pdGVtXCI6IF92bS5jdXJyZW50SXRlbVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5vbkNoZWNrLFxuICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRFbGVtZW50OiBfdm0uc2V0Q3VycmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXRyZWUtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy10cmVlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy10cmVlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWIyMGU3MWQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLXRyZWUtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BzLXRyZWUtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdiMjBlNzFkNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdiMjBlNzFkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdiMjBlNzFkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtdHJlZS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iMjBlNzFkNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdiMjBlNzFkNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzLXRyZWVcIiB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtYi0zIHRyZWUtaGVhZGVyXCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLXRleHQgdGV4dC11cHBlcmNhc2UgcG9pbnRlclwiLFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uZXhwYW5kIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KFwia2V5Ym9hcmRfYXJyb3dfZG93blwiKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnRyYW5zbGF0aW9uc1xuICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLnRyYW5zbGF0aW9ucy5leHBhbmQpKV0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLXRleHQgZmxvYXQtcmlnaHQgdGV4dC11cHBlcmNhc2UgcG9pbnRlclwiLFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmVkdWNlIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KFwia2V5Ym9hcmRfYXJyb3dfdXBcIilcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS50cmFuc2xhdGlvbnNcbiAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFuc2xhdGlvbnMucmVkdWNlKSldKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwidWxcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwidHJlZVwiLCBjbGFzczogX3ZtLmNsYXNzTmFtZSB9LFxuICAgICAgX3ZtLl9sKF92bS5tb2RlbCwgZnVuY3Rpb24oZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICB7IGtleTogaW5kZXggfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcIlBTVHJlZUl0ZW1cIiwge1xuICAgICAgICAgICAgICByZWY6IFwiaXRlbVwiLFxuICAgICAgICAgICAgICByZWZJbkZvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBcImhhcy1jaGVja2JveFwiOiBfdm0uaGFzQ2hlY2tib3gsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IF92bS50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50LWl0ZW1cIjogX3ZtLmN1cnJlbnRJdGVtXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLm9uQ2hlY2ssXG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudEVsZW1lbnQ6IF92bS5zZXRDdXJyZW50RWxlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIDBcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXRyZWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtdHJlZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLXRyZWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhYmQ4ZThhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLXRyZWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy10cmVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2NhYmQ4ZThhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2NhYmQ4ZThhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2NhYmQ4ZThhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy10cmVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYWJkOGU4YSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjYWJkOGU4YScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCIvKiFcbiAqIHZ1ZS1yZXNvdXJjZSB2MS41LjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWdla2l0L3Z1ZS1yZXNvdXJjZVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogUHJvbWlzZXMvQSsgcG9seWZpbGwgdjEuMS40IChodHRwczovL2dpdGh1Yi5jb20vYnJhbXN0ZWluL3Byb21pcylcbiAqL1xuXG52YXIgUkVTT0xWRUQgPSAwO1xudmFyIFJFSkVDVEVEID0gMTtcbnZhciBQRU5ESU5HID0gMjtcblxuZnVuY3Rpb24gUHJvbWlzZSQxKGV4ZWN1dG9yKSB7XG5cbiAgICB0aGlzLnN0YXRlID0gUEVORElORztcbiAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmZXJyZWQgPSBbXTtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcztcblxuICAgIHRyeSB7XG4gICAgICAgIGV4ZWN1dG9yKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoeCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcm9taXNlLnJlamVjdChlKTtcbiAgICB9XG59XG5cblByb21pc2UkMS5yZWplY3QgPSBmdW5jdGlvbiAocikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcmVqZWN0KHIpO1xuICAgIH0pO1xufTtcblxuUHJvbWlzZSQxLnJlc29sdmUgPSBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcmVzb2x2ZSh4KTtcbiAgICB9KTtcbn07XG5cblByb21pc2UkMS5hbGwgPSBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBjb3VudCA9IDAsIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGlmIChpdGVyYWJsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlc29sdmVyKGkpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IHg7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgUHJvbWlzZSQxLnJlc29sdmUoaXRlcmFibGVbaV0pLnRoZW4ocmVzb2x2ZXIoaSksIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cblByb21pc2UkMS5yYWNlID0gZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgUHJvbWlzZSQxLnJlc29sdmUoaXRlcmFibGVbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxudmFyIHAgPSBQcm9taXNlJDEucHJvdG90eXBlO1xuXG5wLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG5cbiAgICBpZiAocHJvbWlzZS5zdGF0ZSA9PT0gUEVORElORykge1xuICAgICAgICBpZiAoeCA9PT0gcHJvbWlzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZSBzZXR0bGVkIHdpdGggaXRzZWxmLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgdGhlbiA9IHggJiYgeFsndGhlbiddO1xuXG4gICAgICAgICAgICBpZiAoeCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGVuLmNhbGwoeCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZS5zdGF0ZSA9IFJFU09MVkVEO1xuICAgICAgICBwcm9taXNlLnZhbHVlID0geDtcbiAgICAgICAgcHJvbWlzZS5ub3RpZnkoKTtcbiAgICB9XG59O1xuXG5wLnJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdChyZWFzb24pIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG5cbiAgICBpZiAocHJvbWlzZS5zdGF0ZSA9PT0gUEVORElORykge1xuICAgICAgICBpZiAocmVhc29uID09PSBwcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlIHNldHRsZWQgd2l0aCBpdHNlbGYuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9taXNlLnN0YXRlID0gUkVKRUNURUQ7XG4gICAgICAgIHByb21pc2UudmFsdWUgPSByZWFzb247XG4gICAgICAgIHByb21pc2Uubm90aWZ5KCk7XG4gICAgfVxufTtcblxucC5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuXG4gICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvbWlzZS5zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgICAgICAgd2hpbGUgKHByb21pc2UuZGVmZXJyZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gcHJvbWlzZS5kZWZlcnJlZC5zaGlmdCgpLFxuICAgICAgICAgICAgICAgICAgICBvblJlc29sdmVkID0gZGVmZXJyZWRbMF0sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVqZWN0ZWQgPSBkZWZlcnJlZFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSA9IGRlZmVycmVkWzJdLFxuICAgICAgICAgICAgICAgICAgICByZWplY3QgPSBkZWZlcnJlZFszXTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLnN0YXRlID09PSBSRVNPTFZFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvblJlc29sdmVkLmNhbGwodW5kZWZpbmVkLCBwcm9taXNlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocHJvbWlzZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvbWlzZS5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob25SZWplY3RlZC5jYWxsKHVuZGVmaW5lZCwgcHJvbWlzZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocHJvbWlzZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbnAudGhlbiA9IGZ1bmN0aW9uIHRoZW4ob25SZXNvbHZlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcHJvbWlzZS5kZWZlcnJlZC5wdXNoKFtvblJlc29sdmVkLCBvblJlamVjdGVkLCByZXNvbHZlLCByZWplY3RdKTtcbiAgICAgICAgcHJvbWlzZS5ub3RpZnkoKTtcbiAgICB9KTtcbn07XG5cbnAuY2F0Y2ggPSBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbn07XG5cbi8qKlxuICogUHJvbWlzZSBhZGFwdGVyLlxuICovXG5cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB3aW5kb3cuUHJvbWlzZSA9IFByb21pc2UkMTtcbn1cblxuZnVuY3Rpb24gUHJvbWlzZU9iaihleGVjdXRvciwgY29udGV4dCkge1xuXG4gICAgaWYgKGV4ZWN1dG9yIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB0aGlzLnByb21pc2UgPSBleGVjdXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShleGVjdXRvci5iaW5kKGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Qcm9taXNlT2JqLmFsbCA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaihQcm9taXNlLmFsbChpdGVyYWJsZSksIGNvbnRleHQpO1xufTtcblxuUHJvbWlzZU9iai5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKFByb21pc2UucmVzb2x2ZSh2YWx1ZSksIGNvbnRleHQpO1xufTtcblxuUHJvbWlzZU9iai5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKFByb21pc2UucmVqZWN0KHJlYXNvbiksIGNvbnRleHQpO1xufTtcblxuUHJvbWlzZU9iai5yYWNlID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKFByb21pc2UucmFjZShpdGVyYWJsZSksIGNvbnRleHQpO1xufTtcblxudmFyIHAkMSA9IFByb21pc2VPYmoucHJvdG90eXBlO1xuXG5wJDEuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbnAkMS50aGVuID0gZnVuY3Rpb24gKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcblxuICAgIGlmIChmdWxmaWxsZWQgJiYgZnVsZmlsbGVkLmJpbmQgJiYgdGhpcy5jb250ZXh0KSB7XG4gICAgICAgIGZ1bGZpbGxlZCA9IGZ1bGZpbGxlZC5iaW5kKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHJlamVjdGVkICYmIHJlamVjdGVkLmJpbmQgJiYgdGhpcy5jb250ZXh0KSB7XG4gICAgICAgIHJlamVjdGVkID0gcmVqZWN0ZWQuYmluZCh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaih0aGlzLnByb21pc2UudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKSwgdGhpcy5jb250ZXh0KTtcbn07XG5cbnAkMS5jYXRjaCA9IGZ1bmN0aW9uIChyZWplY3RlZCkge1xuXG4gICAgaWYgKHJlamVjdGVkICYmIHJlamVjdGVkLmJpbmQgJiYgdGhpcy5jb250ZXh0KSB7XG4gICAgICAgIHJlamVjdGVkID0gcmVqZWN0ZWQuYmluZCh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaih0aGlzLnByb21pc2UuY2F0Y2gocmVqZWN0ZWQpLCB0aGlzLmNvbnRleHQpO1xufTtcblxucCQxLmZpbmFsbHkgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblxuICAgIHJldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgIH1cbiAgICApO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgcmVmID0ge307XG52YXIgaGFzT3duUHJvcGVydHkgPSByZWYuaGFzT3duUHJvcGVydHk7XG52YXIgcmVmJDEgPSBbXTtcbnZhciBzbGljZSA9IHJlZiQxLnNsaWNlO1xudmFyIGRlYnVnID0gZmFsc2UsIG50aWNrO1xuXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5cbmZ1bmN0aW9uIFV0aWwgKHJlZikge1xuICAgIHZhciBjb25maWcgPSByZWYuY29uZmlnO1xuICAgIHZhciBuZXh0VGljayA9IHJlZi5uZXh0VGljaztcblxuICAgIG50aWNrID0gbmV4dFRpY2s7XG4gICAgZGVidWcgPSBjb25maWcuZGVidWcgfHwgIWNvbmZpZy5zaWxlbnQ7XG59XG5cbmZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWVSZXNvdXJjZSB3YXJuXTogJyArIG1zZyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrKGNiLCBjdHgpIHtcbiAgICByZXR1cm4gbnRpY2soY2IsIGN0eCk7XG59XG5cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gICAgcmV0dXJuIHN0ciA/IHN0ci5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJykgOiAnJztcbn1cblxuZnVuY3Rpb24gdHJpbUVuZChzdHIsIGNoYXJzKSB7XG5cbiAgICBpZiAoc3RyICYmIGNoYXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMrJC8sICcnKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0ciB8fCAhY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cCgoXCJbXCIgKyBjaGFycyArIFwiXSskXCIpKSwgJycpO1xufVxuXG5mdW5jdGlvbiB0b0xvd2VyKHN0cikge1xuICAgIHJldHVybiBzdHIgPyBzdHIudG9Mb3dlckNhc2UoKSA6ICcnO1xufVxuXG5mdW5jdGlvbiB0b1VwcGVyKHN0cikge1xuICAgIHJldHVybiBzdHIgPyBzdHIudG9VcHBlckNhc2UoKSA6ICcnO1xufVxuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG5mdW5jdGlvbiBpc0Jsb2Iob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBvYmogaW5zdGFuY2VvZiBCbG9iO1xufVxuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKG9iaikge1xuICAgIHJldHVybiB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIG9iaiBpbnN0YW5jZW9mIEZvcm1EYXRhO1xufVxuXG5mdW5jdGlvbiB3aGVuKHZhbHVlLCBmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG5cbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2VPYmoucmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9ucyhmbiwgb2JqLCBvcHRzKSB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzLmNhbGwob2JqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoZm4uYmluZCh7JHZtOiBvYmosICRvcHRpb25zOiBvcHRzfSksIGZuLCB7JG9wdGlvbnM6IG9wdHN9KTtcbn1cblxuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yKSB7XG5cbiAgICB2YXIgaSwga2V5O1xuXG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVyYXRvci5jYWxsKG9ialtpXSwgb2JqW2ldLCBpKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwob2JqW2tleV0sIG9ialtrZXldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn1cblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgX2Fzc2lnbjtcblxuZnVuY3Rpb24gbWVyZ2UodGFyZ2V0KSB7XG5cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIF9tZXJnZSh0YXJnZXQsIHNvdXJjZSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0cyh0YXJnZXQpIHtcblxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2Fzc2lnbih0YXJnZXQpIHtcblxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgX21lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9tZXJnZSh0YXJnZXQsIHNvdXJjZSwgZGVlcCkge1xuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGRlZXAgJiYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pIHx8IGlzQXJyYXkoc291cmNlW2tleV0pKSkge1xuICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pICYmICFpc1BsYWluT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBcnJheShzb3VyY2Vba2V5XSkgJiYgIWlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9tZXJnZSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIGRlZXApO1xuICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogUm9vdCBQcmVmaXggVHJhbnNmb3JtLlxuICovXG5cbmZ1bmN0aW9uIHJvb3QgKG9wdGlvbnMkJDEsIG5leHQpIHtcblxuICAgIHZhciB1cmwgPSBuZXh0KG9wdGlvbnMkJDEpO1xuXG4gICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMkJDEucm9vdCkgJiYgIS9eKGh0dHBzPzopP1xcLy8udGVzdCh1cmwpKSB7XG4gICAgICAgIHVybCA9IHRyaW1FbmQob3B0aW9ucyQkMS5yb290LCAnLycpICsgJy8nICsgdXJsO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogUXVlcnkgUGFyYW1ldGVyIFRyYW5zZm9ybS5cbiAqL1xuXG5mdW5jdGlvbiBxdWVyeSAob3B0aW9ucyQkMSwgbmV4dCkge1xuXG4gICAgdmFyIHVybFBhcmFtcyA9IE9iamVjdC5rZXlzKFVybC5vcHRpb25zLnBhcmFtcyksIHF1ZXJ5ID0ge30sIHVybCA9IG5leHQob3B0aW9ucyQkMSk7XG5cbiAgICBlYWNoKG9wdGlvbnMkJDEucGFyYW1zLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICBpZiAodXJsUGFyYW1zLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHF1ZXJ5W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcXVlcnkgPSBVcmwucGFyYW1zKHF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeSkge1xuICAgICAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgcXVlcnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBVUkwgVGVtcGxhdGUgdjIuMC42IChodHRwczovL2dpdGh1Yi5jb20vYnJhbXN0ZWluL3VybC10ZW1wbGF0ZSlcbiAqL1xuXG5mdW5jdGlvbiBleHBhbmQodXJsLCBwYXJhbXMsIHZhcmlhYmxlcykge1xuXG4gICAgdmFyIHRtcGwgPSBwYXJzZSh1cmwpLCBleHBhbmRlZCA9IHRtcGwuZXhwYW5kKHBhcmFtcyk7XG5cbiAgICBpZiAodmFyaWFibGVzKSB7XG4gICAgICAgIHZhcmlhYmxlcy5wdXNoLmFwcGx5KHZhcmlhYmxlcywgdG1wbC52YXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwYW5kZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHRlbXBsYXRlKSB7XG5cbiAgICB2YXIgb3BlcmF0b3JzID0gWycrJywgJyMnLCAnLicsICcvJywgJzsnLCAnPycsICcmJ10sIHZhcmlhYmxlcyA9IFtdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFyczogdmFyaWFibGVzLFxuICAgICAgICBleHBhbmQ6IGZ1bmN0aW9uIGV4cGFuZChjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFtee31dKylcXH18KFtee31dKykvZywgZnVuY3Rpb24gKF8sIGV4cHJlc3Npb24sIGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbikge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IG51bGwsIHZhbHVlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IC8oW146Kl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaC5hcHBseSh2YWx1ZXMsIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMucHVzaCh0bXBbMV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09ICcrJykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gJywnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9ICcmJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggIT09IDAgPyBvcGVyYXRvciA6ICcnKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG5cbiAgICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sIHJlc3VsdCA9IFtdO1xuXG4gICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSAnKicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IG51bGwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtb2RpZmllciA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogbnVsbCkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVUklDb21wb25lbnQoaykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIHRtcC5qb2luKCcsJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0bXAuam9pbignLCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09ICc7Jykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyAmJiAob3BlcmF0b3IgPT09ICcmJyB8fCBvcGVyYXRvciA9PT0gJz8nKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0b3IgPT09ICc7JyB8fCBvcGVyYXRvciA9PT0gJyYnIHx8IG9wZXJhdG9yID09PSAnPyc7XG59XG5cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG5cbiAgICB2YWx1ZSA9IChvcGVyYXRvciA9PT0gJysnIHx8IG9wZXJhdG9yID09PSAnIycpID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlUmVzZXJ2ZWQoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydDtcbiAgICB9KS5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBVUkwgVGVtcGxhdGUgKFJGQyA2NTcwKSBUcmFuc2Zvcm0uXG4gKi9cblxuZnVuY3Rpb24gdGVtcGxhdGUgKG9wdGlvbnMpIHtcblxuICAgIHZhciB2YXJpYWJsZXMgPSBbXSwgdXJsID0gZXhwYW5kKG9wdGlvbnMudXJsLCBvcHRpb25zLnBhcmFtcywgdmFyaWFibGVzKTtcblxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucGFyYW1zW2tleV07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgZm9yIFVSTCB0ZW1wbGF0aW5nLlxuICovXG5cbmZ1bmN0aW9uIFVybCh1cmwsIHBhcmFtcykge1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzIHx8IHt9LCBvcHRpb25zJCQxID0gdXJsLCB0cmFuc2Zvcm07XG5cbiAgICBpZiAoaXNTdHJpbmcodXJsKSkge1xuICAgICAgICBvcHRpb25zJCQxID0ge3VybDogdXJsLCBwYXJhbXM6IHBhcmFtc307XG4gICAgfVxuXG4gICAgb3B0aW9ucyQkMSA9IG1lcmdlKHt9LCBVcmwub3B0aW9ucywgc2VsZi4kb3B0aW9ucywgb3B0aW9ucyQkMSk7XG5cbiAgICBVcmwudHJhbnNmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG5cbiAgICAgICAgaWYgKGlzU3RyaW5nKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gVXJsLnRyYW5zZm9ybVtoYW5kbGVyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm0gPSBmYWN0b3J5KGhhbmRsZXIsIHRyYW5zZm9ybSwgc2VsZi4kdm0pO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm0ob3B0aW9ucyQkMSk7XG59XG5cbi8qKlxuICogVXJsIG9wdGlvbnMuXG4gKi9cblxuVXJsLm9wdGlvbnMgPSB7XG4gICAgdXJsOiAnJyxcbiAgICByb290OiBudWxsLFxuICAgIHBhcmFtczoge31cbn07XG5cbi8qKlxuICogVXJsIHRyYW5zZm9ybXMuXG4gKi9cblxuVXJsLnRyYW5zZm9ybSA9IHt0ZW1wbGF0ZTogdGVtcGxhdGUsIHF1ZXJ5OiBxdWVyeSwgcm9vdDogcm9vdH07XG5VcmwudHJhbnNmb3JtcyA9IFsndGVtcGxhdGUnLCAncXVlcnknLCAncm9vdCddO1xuXG4vKipcbiAqIEVuY29kZXMgYSBVcmwgcGFyYW1ldGVyIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuVXJsLnBhcmFtcyA9IGZ1bmN0aW9uIChvYmopIHtcblxuICAgIHZhciBwYXJhbXMgPSBbXSwgZXNjYXBlID0gZW5jb2RlVVJJQ29tcG9uZW50O1xuXG4gICAgcGFyYW1zLmFkZCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnB1c2goZXNjYXBlKGtleSkgKyAnPScgKyBlc2NhcGUodmFsdWUpKTtcbiAgICB9O1xuXG4gICAgc2VyaWFsaXplKHBhcmFtcywgb2JqKTtcblxuICAgIHJldHVybiBwYXJhbXMuam9pbignJicpLnJlcGxhY2UoLyUyMC9nLCAnKycpO1xufTtcblxuLyoqXG4gKiBQYXJzZSBhIFVSTCBhbmQgcmV0dXJuIGl0cyBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqL1xuXG5VcmwucGFyc2UgPSBmdW5jdGlvbiAodXJsKSB7XG5cbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSB7XG4gICAgICAgIGVsLmhyZWYgPSB1cmw7XG4gICAgICAgIHVybCA9IGVsLmhyZWY7XG4gICAgfVxuXG4gICAgZWwuaHJlZiA9IHVybDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IGVsLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiBlbC5wcm90b2NvbCA/IGVsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIHBvcnQ6IGVsLnBvcnQsXG4gICAgICAgIGhvc3Q6IGVsLmhvc3QsXG4gICAgICAgIGhvc3RuYW1lOiBlbC5ob3N0bmFtZSxcbiAgICAgICAgcGF0aG5hbWU6IGVsLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nID8gZWwucGF0aG5hbWUgOiAnLycgKyBlbC5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBlbC5zZWFyY2ggPyBlbC5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiBlbC5oYXNoID8gZWwuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnXG4gICAgfTtcbn07XG5cbmZ1bmN0aW9uIGZhY3RvcnkoaGFuZGxlciwgbmV4dCwgdm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9wdGlvbnMkJDEpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbCh2bSwgb3B0aW9ucyQkMSwgbmV4dCk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKHBhcmFtcywgb2JqLCBzY29wZSkge1xuXG4gICAgdmFyIGFycmF5ID0gaXNBcnJheShvYmopLCBwbGFpbiA9IGlzUGxhaW5PYmplY3Qob2JqKSwgaGFzaDtcblxuICAgIGVhY2gob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuXG4gICAgICAgIGhhc2ggPSBpc09iamVjdCh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgICAgICBrZXkgPSBzY29wZSArICdbJyArIChwbGFpbiB8fCBoYXNoID8ga2V5IDogJycpICsgJ10nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzY29wZSAmJiBhcnJheSkge1xuICAgICAgICAgICAgcGFyYW1zLmFkZCh2YWx1ZS5uYW1lLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzaCkge1xuICAgICAgICAgICAgc2VyaWFsaXplKHBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXMuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogWERvbWFpbiBjbGllbnQgKEludGVybmV0IEV4cGxvcmVyKS5cbiAqL1xuXG5mdW5jdGlvbiB4ZHJDbGllbnQgKHJlcXVlc3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmooZnVuY3Rpb24gKHJlc29sdmUpIHtcblxuICAgICAgICB2YXIgeGRyID0gbmV3IFhEb21haW5SZXF1ZXN0KCksIGhhbmRsZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSByZWYudHlwZTtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDIwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gNTAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXNwb25kV2l0aCh4ZHIucmVzcG9uc2VUZXh0LCB7c3RhdHVzOiBzdGF0dXN9KSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB4ZHIuYWJvcnQoKTsgfTtcblxuICAgICAgICB4ZHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC5nZXRVcmwoKSk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCkge1xuICAgICAgICAgICAgeGRyLnRpbWVvdXQgPSByZXF1ZXN0LnRpbWVvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICB4ZHIub25sb2FkID0gaGFuZGxlcjtcbiAgICAgICAgeGRyLm9uYWJvcnQgPSBoYW5kbGVyO1xuICAgICAgICB4ZHIub25lcnJvciA9IGhhbmRsZXI7XG4gICAgICAgIHhkci5vbnRpbWVvdXQgPSBoYW5kbGVyO1xuICAgICAgICB4ZHIub25wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB4ZHIuc2VuZChyZXF1ZXN0LmdldEJvZHkoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ09SUyBJbnRlcmNlcHRvci5cbiAqL1xuXG52YXIgU1VQUE9SVFNfQ09SUyA9IGluQnJvd3NlciAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuZnVuY3Rpb24gY29ycyAocmVxdWVzdCkge1xuXG4gICAgaWYgKGluQnJvd3Nlcikge1xuXG4gICAgICAgIHZhciBvcmdVcmwgPSBVcmwucGFyc2UobG9jYXRpb24uaHJlZik7XG4gICAgICAgIHZhciByZXFVcmwgPSBVcmwucGFyc2UocmVxdWVzdC5nZXRVcmwoKSk7XG5cbiAgICAgICAgaWYgKHJlcVVybC5wcm90b2NvbCAhPT0gb3JnVXJsLnByb3RvY29sIHx8IHJlcVVybC5ob3N0ICE9PSBvcmdVcmwuaG9zdCkge1xuXG4gICAgICAgICAgICByZXF1ZXN0LmNyb3NzT3JpZ2luID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlcXVlc3QuZW11bGF0ZUhUVFAgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKCFTVVBQT1JUU19DT1JTKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5jbGllbnQgPSB4ZHJDbGllbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuLyoqXG4gKiBGb3JtIGRhdGEgSW50ZXJjZXB0b3IuXG4gKi9cblxuZnVuY3Rpb24gZm9ybSAocmVxdWVzdCkge1xuXG4gICAgaWYgKGlzRm9ybURhdGEocmVxdWVzdC5ib2R5KSkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKCdDb250ZW50LVR5cGUnKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHJlcXVlc3QuYm9keSkgJiYgcmVxdWVzdC5lbXVsYXRlSlNPTikge1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSBVcmwucGFyYW1zKHJlcXVlc3QuYm9keSk7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBKU09OIEludGVyY2VwdG9yLlxuICovXG5cbmZ1bmN0aW9uIGpzb24gKHJlcXVlc3QpIHtcblxuICAgIHZhciB0eXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgfHwgJyc7XG5cbiAgICBpZiAoaXNPYmplY3QocmVxdWVzdC5ib2R5KSAmJiB0eXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA9PT0gMCkge1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LmJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keVRleHQgPyB3aGVuKHJlc3BvbnNlLnRleHQoKSwgZnVuY3Rpb24gKHRleHQpIHtcblxuICAgICAgICAgICAgdmFyIHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgfHwgJyc7XG5cbiAgICAgICAgICAgIGlmICh0eXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA9PT0gMCB8fCBpc0pzb24odGV4dCkpIHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYm9keSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG5cbiAgICAgICAgfSkgOiByZXNwb25zZTtcblxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGlzSnNvbihzdHIpIHtcblxuICAgIHZhciBzdGFydCA9IHN0ci5tYXRjaCgvXlxccyooXFxbfFxceykvKTtcbiAgICB2YXIgZW5kID0geydbJzogL11cXHMqJC8sICd7JzogL31cXHMqJC99O1xuXG4gICAgcmV0dXJuIHN0YXJ0ICYmIGVuZFtzdGFydFsxXV0udGVzdChzdHIpO1xufVxuXG4vKipcbiAqIEpTT05QIGNsaWVudCAoQnJvd3NlcikuXG4gKi9cblxuZnVuY3Rpb24ganNvbnBDbGllbnQgKHJlcXVlc3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmooZnVuY3Rpb24gKHJlc29sdmUpIHtcblxuICAgICAgICB2YXIgbmFtZSA9IHJlcXVlc3QuanNvbnAgfHwgJ2NhbGxiYWNrJywgY2FsbGJhY2sgPSByZXF1ZXN0Lmpzb25wQ2FsbGJhY2sgfHwgJ19qc29ucCcgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiksIGJvZHkgPSBudWxsLCBoYW5kbGVyLCBzY3JpcHQ7XG5cbiAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG5cblxuICAgICAgICAgICAgdmFyIHN0YXR1cyA9IDA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbG9hZCcgJiYgYm9keSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9IDIwMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9IDUwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0YXR1cyAmJiB3aW5kb3dbY2FsbGJhY2tdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHdpbmRvd1tjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHJlcXVlc3QucmVzcG9uZFdpdGgoYm9keSwge3N0YXR1czogc3RhdHVzfSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvd1tjYWxsYmFja10gPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0LmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFuZGxlcih7dHlwZTogJ2Fib3J0J30pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3QucGFyYW1zW25hbWVdID0gY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChyZXF1ZXN0LmFib3J0LCByZXF1ZXN0LnRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHNjcmlwdC5zcmMgPSByZXF1ZXN0LmdldFVybCgpO1xuICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICBzY3JpcHQub25sb2FkID0gaGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBoYW5kbGVyO1xuXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBKU09OUCBJbnRlcmNlcHRvci5cbiAqL1xuXG5mdW5jdGlvbiBqc29ucCAocmVxdWVzdCkge1xuXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kID09ICdKU09OUCcpIHtcbiAgICAgICAgcmVxdWVzdC5jbGllbnQgPSBqc29ucENsaWVudDtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBCZWZvcmUgSW50ZXJjZXB0b3IuXG4gKi9cblxuZnVuY3Rpb24gYmVmb3JlIChyZXF1ZXN0KSB7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihyZXF1ZXN0LmJlZm9yZSkpIHtcbiAgICAgICAgcmVxdWVzdC5iZWZvcmUuY2FsbCh0aGlzLCByZXF1ZXN0KTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBIVFRQIG1ldGhvZCBvdmVycmlkZSBJbnRlcmNlcHRvci5cbiAqL1xuXG5mdW5jdGlvbiBtZXRob2QgKHJlcXVlc3QpIHtcblxuICAgIGlmIChyZXF1ZXN0LmVtdWxhdGVIVFRQICYmIC9eKFBVVHxQQVRDSHxERUxFVEUpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ1gtSFRUUC1NZXRob2QtT3ZlcnJpZGUnLCByZXF1ZXN0Lm1ldGhvZCk7XG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gJ1BPU1QnO1xuICAgIH1cblxufVxuXG4vKipcbiAqIEhlYWRlciBJbnRlcmNlcHRvci5cbiAqL1xuXG5mdW5jdGlvbiBoZWFkZXIgKHJlcXVlc3QpIHtcblxuICAgIHZhciBoZWFkZXJzID0gYXNzaWduKHt9LCBIdHRwLmhlYWRlcnMuY29tbW9uLFxuICAgICAgICAhcmVxdWVzdC5jcm9zc09yaWdpbiA/IEh0dHAuaGVhZGVycy5jdXN0b20gOiB7fSxcbiAgICAgICAgSHR0cC5oZWFkZXJzW3RvTG93ZXIocmVxdWVzdC5tZXRob2QpXVxuICAgICk7XG5cbiAgICBlYWNoKGhlYWRlcnMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAoIXJlcXVlc3QuaGVhZGVycy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn1cblxuLyoqXG4gKiBYTUxIdHRwIGNsaWVudCAoQnJvd3NlcikuXG4gKi9cblxuZnVuY3Rpb24geGhyQ2xpZW50IChyZXF1ZXN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpLCBoYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbmRXaXRoKFxuICAgICAgICAgICAgICAgICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dCwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiB4aHIuc3RhdHVzLCAvLyBJRTkgc3RhdHVzIGJ1Z1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzID09PSAxMjIzID8gJ05vIENvbnRlbnQnIDogdHJpbSh4aHIuc3RhdHVzVGV4dClcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGVhY2godHJpbSh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gKHJvdykge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzLmFwcGVuZChyb3cuc2xpY2UoMCwgcm93LmluZGV4T2YoJzonKSksIHJvdy5zbGljZShyb3cuaW5kZXhPZignOicpICsgMSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB4aHIuYWJvcnQoKTsgfTtcblxuICAgICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC5nZXRVcmwoKSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCkge1xuICAgICAgICAgICAgeGhyLnRpbWVvdXQgPSByZXF1ZXN0LnRpbWVvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdC5yZXNwb25zZVR5cGUgJiYgJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gcmVxdWVzdC5yZXNwb25zZVR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgfHwgcmVxdWVzdC5jcmVkZW50aWFscykge1xuICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlcXVlc3QuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlcHJlY2F0ZWQgdXNlIGRvd25sb2FkUHJvZ3Jlc3NcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWVzdC5wcm9ncmVzcykgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCByZXF1ZXN0LnByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlcXVlc3QuZG93bmxvYWRQcm9ncmVzcykpIHtcbiAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHJlcXVlc3QuZG93bmxvYWRQcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXByZWNhdGVkIHVzZSB1cGxvYWRQcm9ncmVzc1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1ZXN0LnByb2dyZXNzKSAmJiAvXihQT1NUfFBVVCkkL2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCByZXF1ZXN0LnByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlcXVlc3QudXBsb2FkUHJvZ3Jlc3MpICYmIHhoci51cGxvYWQpIHtcbiAgICAgICAgICAgIHhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCByZXF1ZXN0LnVwbG9hZFByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB4aHIub25sb2FkID0gaGFuZGxlcjtcbiAgICAgICAgeGhyLm9uYWJvcnQgPSBoYW5kbGVyO1xuICAgICAgICB4aHIub25lcnJvciA9IGhhbmRsZXI7XG4gICAgICAgIHhoci5vbnRpbWVvdXQgPSBoYW5kbGVyO1xuICAgICAgICB4aHIuc2VuZChyZXF1ZXN0LmdldEJvZHkoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogSHR0cCBjbGllbnQgKE5vZGUpLlxuICovXG5cbmZ1bmN0aW9uIG5vZGVDbGllbnQgKHJlcXVlc3QpIHtcblxuICAgIHZhciBjbGllbnQgPSByZXF1aXJlKCdnb3QnKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXG4gICAgICAgIHZhciB1cmwgPSByZXF1ZXN0LmdldFVybCgpO1xuICAgICAgICB2YXIgYm9keSA9IHJlcXVlc3QuZ2V0Qm9keSgpO1xuICAgICAgICB2YXIgbWV0aG9kID0gcmVxdWVzdC5tZXRob2Q7XG4gICAgICAgIHZhciBoZWFkZXJzID0ge30sIGhhbmRsZXI7XG5cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsaWVudCh1cmwsIHtib2R5OiBib2R5LCBtZXRob2Q6IG1ldGhvZCwgaGVhZGVyczogaGVhZGVyc30pLnRoZW4oaGFuZGxlciA9IGZ1bmN0aW9uIChyZXNwKSB7XG5cbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uZFdpdGgocmVzcC5ib2R5LCB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogdHJpbShyZXNwLnN0YXR1c01lc3NhZ2UpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWFjaChyZXNwLmhlYWRlcnMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcblxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IkJDEpIHsgcmV0dXJuIGhhbmRsZXIoZXJyb3IkJDEucmVzcG9uc2UpOyB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsaWVudC5cbiAqL1xuXG5mdW5jdGlvbiBDbGllbnQgKGNvbnRleHQpIHtcblxuICAgIHZhciByZXFIYW5kbGVycyA9IFtzZW5kUmVxdWVzdF0sIHJlc0hhbmRsZXJzID0gW107XG5cbiAgICBpZiAoIWlzT2JqZWN0KGNvbnRleHQpKSB7XG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENsaWVudChyZXF1ZXN0KSB7XG4gICAgICAgIHdoaWxlIChyZXFIYW5kbGVycy5sZW5ndGgpIHtcblxuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSByZXFIYW5kbGVycy5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcblxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9ICh2b2lkIDApLCBuZXh0ID0gKHZvaWQgMCk7XG5cbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGhhbmRsZXIuY2FsbChjb250ZXh0LCByZXF1ZXN0LCBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBuZXh0ID0gdmFsOyB9KSB8fCBuZXh0O1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2VPYmooZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNIYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB3aGVuKHJlc3BvbnNlLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbChjb250ZXh0LCByZXNwb25zZSkgfHwgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuKHJlc3BvbnNlLCByZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNIYW5kbGVycy51bnNoaWZ0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2FybigoXCJJbnZhbGlkIGludGVyY2VwdG9yIG9mIHR5cGUgXCIgKyAodHlwZW9mIGhhbmRsZXIpICsgXCIsIG11c3QgYmUgYSBmdW5jdGlvblwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDbGllbnQudXNlID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmVxSGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIENsaWVudDtcbn1cblxuZnVuY3Rpb24gc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuXG4gICAgdmFyIGNsaWVudCA9IHJlcXVlc3QuY2xpZW50IHx8IChpbkJyb3dzZXIgPyB4aHJDbGllbnQgOiBub2RlQ2xpZW50KTtcblxuICAgIHJldHVybiBjbGllbnQocmVxdWVzdCk7XG59XG5cbi8qKlxuICogSFRUUCBIZWFkZXJzLlxuICovXG5cbnZhciBIZWFkZXJzID0gZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgIHRoaXMubWFwID0ge307XG5cbiAgICBlYWNoKGhlYWRlcnMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkgeyByZXR1cm4gdGhpcyQxLmFwcGVuZChuYW1lLCB2YWx1ZSk7IH0pO1xufTtcblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChuYW1lKSB7XG4gICAgcmV0dXJuIGdldE5hbWUodGhpcy5tYXAsIG5hbWUpICE9PSBudWxsO1xufTtcblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChuYW1lKSB7XG5cbiAgICB2YXIgbGlzdCA9IHRoaXMubWFwW2dldE5hbWUodGhpcy5tYXAsIG5hbWUpXTtcblxuICAgIHJldHVybiBsaXN0ID8gbGlzdC5qb2luKCkgOiBudWxsO1xufTtcblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsIChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwW2dldE5hbWUodGhpcy5tYXAsIG5hbWUpXSB8fCBbXTtcbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKGdldE5hbWUodGhpcy5tYXAsIG5hbWUpIHx8IG5hbWUpXSA9IFt0cmltKHZhbHVlKV07XG59O1xuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG5cbiAgICB2YXIgbGlzdCA9IHRoaXMubWFwW2dldE5hbWUodGhpcy5tYXAsIG5hbWUpXTtcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICAgIGxpc3QucHVzaCh0cmltKHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgIH1cbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIGRlbGV0ZSQxIChuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW2dldE5hbWUodGhpcy5tYXAsIG5hbWUpXTtcbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLmRlbGV0ZUFsbCA9IGZ1bmN0aW9uIGRlbGV0ZUFsbCAoKSB7XG4gICAgdGhpcy5tYXAgPSB7fTtcbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoIChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGVhY2godGhpcy5tYXAsIGZ1bmN0aW9uIChsaXN0LCBuYW1lKSB7XG4gICAgICAgIGVhY2gobGlzdCwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHZhbHVlLCBuYW1lLCB0aGlzJDEpOyB9KTtcbiAgICB9KTtcbn07XG5cbmZ1bmN0aW9uIGdldE5hbWUobWFwLCBuYW1lKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG1hcCkucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgICAgIHJldHVybiB0b0xvd2VyKG5hbWUpID09PSB0b0xvd2VyKGN1cnIpID8gY3VyciA6IHByZXY7XG4gICAgfSwgbnVsbCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuXG4gICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH5dL2kudGVzdChuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmltKG5hbWUpO1xufVxuXG4vKipcbiAqIEhUVFAgUmVzcG9uc2UuXG4gKi9cblxudmFyIFJlc3BvbnNlID0gZnVuY3Rpb24gUmVzcG9uc2UoYm9keSwgcmVmKSB7XG4gICAgdmFyIHVybCA9IHJlZi51cmw7XG4gICAgdmFyIGhlYWRlcnMgPSByZWYuaGVhZGVycztcbiAgICB2YXIgc3RhdHVzID0gcmVmLnN0YXR1cztcbiAgICB2YXIgc3RhdHVzVGV4dCA9IHJlZi5zdGF0dXNUZXh0O1xuXG5cbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLm9rID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXMgfHwgMDtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8ICcnO1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlcnMpO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICBpZiAoaXNTdHJpbmcoYm9keSkpIHtcblxuICAgICAgICB0aGlzLmJvZHlUZXh0ID0gYm9keTtcblxuICAgIH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cbiAgICAgICAgdGhpcy5ib2R5QmxvYiA9IGJvZHk7XG5cbiAgICAgICAgaWYgKGlzQmxvYlRleHQoYm9keSkpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keVRleHQgPSBibG9iVGV4dChib2R5KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblJlc3BvbnNlLnByb3RvdHlwZS5ibG9iID0gZnVuY3Rpb24gYmxvYiAoKSB7XG4gICAgcmV0dXJuIHdoZW4odGhpcy5ib2R5QmxvYik7XG59O1xuXG5SZXNwb25zZS5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uIHRleHQgKCkge1xuICAgIHJldHVybiB3aGVuKHRoaXMuYm9keVRleHQpO1xufTtcblxuUmVzcG9uc2UucHJvdG90eXBlLmpzb24gPSBmdW5jdGlvbiBqc29uICgpIHtcbiAgICByZXR1cm4gd2hlbih0aGlzLnRleHQoKSwgZnVuY3Rpb24gKHRleHQpIHsgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7IH0pO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgJ2RhdGEnLCB7XG5cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoYm9keSkge1xuICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIH1cblxufSk7XG5cbmZ1bmN0aW9uIGJsb2JUZXh0KGJvZHkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmooZnVuY3Rpb24gKHJlc29sdmUpIHtcblxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChib2R5KTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICAgIH07XG5cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNCbG9iVGV4dChib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkudHlwZS5pbmRleE9mKCd0ZXh0JykgPT09IDAgfHwgYm9keS50eXBlLmluZGV4T2YoJ2pzb24nKSAhPT0gLTE7XG59XG5cbi8qKlxuICogSFRUUCBSZXF1ZXN0LlxuICovXG5cbnZhciBSZXF1ZXN0ID0gZnVuY3Rpb24gUmVxdWVzdChvcHRpb25zJCQxKSB7XG5cbiAgICB0aGlzLmJvZHkgPSBudWxsO1xuICAgIHRoaXMucGFyYW1zID0ge307XG5cbiAgICBhc3NpZ24odGhpcywgb3B0aW9ucyQkMSwge1xuICAgICAgICBtZXRob2Q6IHRvVXBwZXIob3B0aW9ucyQkMS5tZXRob2QgfHwgJ0dFVCcpXG4gICAgfSk7XG5cbiAgICBpZiAoISh0aGlzLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpO1xuICAgIH1cbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmdldFVybCA9IGZ1bmN0aW9uIGdldFVybCAoKSB7XG4gICAgcmV0dXJuIFVybCh0aGlzKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmdldEJvZHkgPSBmdW5jdGlvbiBnZXRCb2R5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5O1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUucmVzcG9uZFdpdGggPSBmdW5jdGlvbiByZXNwb25kV2l0aCAoYm9keSwgb3B0aW9ucyQkMSkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSwgYXNzaWduKG9wdGlvbnMkJDEgfHwge30sIHt1cmw6IHRoaXMuZ2V0VXJsKCl9KSk7XG59O1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHNlbmRpbmcgbmV0d29yayByZXF1ZXN0cy5cbiAqL1xuXG52YXIgQ09NTU9OX0hFQURFUlMgPSB7J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonfTtcbnZhciBKU09OX0NPTlRFTlRfVFlQRSA9IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCd9O1xuXG5mdW5jdGlvbiBIdHRwKG9wdGlvbnMkJDEpIHtcblxuICAgIHZhciBzZWxmID0gdGhpcyB8fCB7fSwgY2xpZW50ID0gQ2xpZW50KHNlbGYuJHZtKTtcblxuICAgIGRlZmF1bHRzKG9wdGlvbnMkJDEgfHwge30sIHNlbGYuJG9wdGlvbnMsIEh0dHAub3B0aW9ucyk7XG5cbiAgICBIdHRwLmludGVyY2VwdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG5cbiAgICAgICAgaWYgKGlzU3RyaW5nKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gSHR0cC5pbnRlcmNlcHRvcltoYW5kbGVyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICBjbGllbnQudXNlKGhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiBjbGllbnQobmV3IFJlcXVlc3Qob3B0aW9ucyQkMSkpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm9rID8gcmVzcG9uc2UgOiBQcm9taXNlT2JqLnJlamVjdChyZXNwb25zZSk7XG5cbiAgICB9LCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblxuICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgZXJyb3IocmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VPYmoucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9KTtcbn1cblxuSHR0cC5vcHRpb25zID0ge307XG5cbkh0dHAuaGVhZGVycyA9IHtcbiAgICBwdXQ6IEpTT05fQ09OVEVOVF9UWVBFLFxuICAgIHBvc3Q6IEpTT05fQ09OVEVOVF9UWVBFLFxuICAgIHBhdGNoOiBKU09OX0NPTlRFTlRfVFlQRSxcbiAgICBkZWxldGU6IEpTT05fQ09OVEVOVF9UWVBFLFxuICAgIGNvbW1vbjogQ09NTU9OX0hFQURFUlMsXG4gICAgY3VzdG9tOiB7fVxufTtcblxuSHR0cC5pbnRlcmNlcHRvciA9IHtiZWZvcmU6IGJlZm9yZSwgbWV0aG9kOiBtZXRob2QsIGpzb25wOiBqc29ucCwganNvbjoganNvbiwgZm9ybTogZm9ybSwgaGVhZGVyOiBoZWFkZXIsIGNvcnM6IGNvcnN9O1xuSHR0cC5pbnRlcmNlcHRvcnMgPSBbJ2JlZm9yZScsICdtZXRob2QnLCAnanNvbnAnLCAnanNvbicsICdmb3JtJywgJ2hlYWRlcicsICdjb3JzJ107XG5cblsnZ2V0JywgJ2RlbGV0ZScsICdoZWFkJywgJ2pzb25wJ10uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kJCQxKSB7XG5cbiAgICBIdHRwW21ldGhvZCQkMV0gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zJCQxKSB7XG4gICAgICAgIHJldHVybiB0aGlzKGFzc2lnbihvcHRpb25zJCQxIHx8IHt9LCB7dXJsOiB1cmwsIG1ldGhvZDogbWV0aG9kJCQxfSkpO1xuICAgIH07XG5cbn0pO1xuXG5bJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kJCQxKSB7XG5cbiAgICBIdHRwW21ldGhvZCQkMV0gPSBmdW5jdGlvbiAodXJsLCBib2R5LCBvcHRpb25zJCQxKSB7XG4gICAgICAgIHJldHVybiB0aGlzKGFzc2lnbihvcHRpb25zJCQxIHx8IHt9LCB7dXJsOiB1cmwsIG1ldGhvZDogbWV0aG9kJCQxLCBib2R5OiBib2R5fSkpO1xuICAgIH07XG5cbn0pO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGludGVyYWN0aW5nIHdpdGggUkVTVGZ1bCBzZXJ2aWNlcy5cbiAqL1xuXG5mdW5jdGlvbiBSZXNvdXJjZSh1cmwsIHBhcmFtcywgYWN0aW9ucywgb3B0aW9ucyQkMSkge1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzIHx8IHt9LCByZXNvdXJjZSA9IHt9O1xuXG4gICAgYWN0aW9ucyA9IGFzc2lnbih7fSxcbiAgICAgICAgUmVzb3VyY2UuYWN0aW9ucyxcbiAgICAgICAgYWN0aW9uc1xuICAgICk7XG5cbiAgICBlYWNoKGFjdGlvbnMsIGZ1bmN0aW9uIChhY3Rpb24sIG5hbWUpIHtcblxuICAgICAgICBhY3Rpb24gPSBtZXJnZSh7dXJsOiB1cmwsIHBhcmFtczogYXNzaWduKHt9LCBwYXJhbXMpfSwgb3B0aW9ucyQkMSwgYWN0aW9uKTtcblxuICAgICAgICByZXNvdXJjZVtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc2VsZi4kaHR0cCB8fCBIdHRwKShvcHRzKGFjdGlvbiwgYXJndW1lbnRzKSk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzb3VyY2U7XG59XG5cbmZ1bmN0aW9uIG9wdHMoYWN0aW9uLCBhcmdzKSB7XG5cbiAgICB2YXIgb3B0aW9ucyQkMSA9IGFzc2lnbih7fSwgYWN0aW9uKSwgcGFyYW1zID0ge30sIGJvZHk7XG5cbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG5cbiAgICAgICAgY2FzZSAyOlxuXG4gICAgICAgICAgICBwYXJhbXMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYm9keSA9IGFyZ3NbMV07XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcblxuICAgICAgICAgICAgaWYgKC9eKFBPU1R8UFVUfFBBVENIKSQvaS50ZXN0KG9wdGlvbnMkJDEubWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBhcmdzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDA6XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG5cbiAgICAgICAgICAgIHRocm93ICdFeHBlY3RlZCB1cCB0byAyIGFyZ3VtZW50cyBbcGFyYW1zLCBib2R5XSwgZ290ICcgKyBhcmdzLmxlbmd0aCArICcgYXJndW1lbnRzJztcbiAgICB9XG5cbiAgICBvcHRpb25zJCQxLmJvZHkgPSBib2R5O1xuICAgIG9wdGlvbnMkJDEucGFyYW1zID0gYXNzaWduKHt9LCBvcHRpb25zJCQxLnBhcmFtcywgcGFyYW1zKTtcblxuICAgIHJldHVybiBvcHRpb25zJCQxO1xufVxuXG5SZXNvdXJjZS5hY3Rpb25zID0ge1xuXG4gICAgZ2V0OiB7bWV0aG9kOiAnR0VUJ30sXG4gICAgc2F2ZToge21ldGhvZDogJ1BPU1QnfSxcbiAgICBxdWVyeToge21ldGhvZDogJ0dFVCd9LFxuICAgIHVwZGF0ZToge21ldGhvZDogJ1BVVCd9LFxuICAgIHJlbW92ZToge21ldGhvZDogJ0RFTEVURSd9LFxuICAgIGRlbGV0ZToge21ldGhvZDogJ0RFTEVURSd9XG5cbn07XG5cbi8qKlxuICogSW5zdGFsbCBwbHVnaW4uXG4gKi9cblxuZnVuY3Rpb24gcGx1Z2luKFZ1ZSkge1xuXG4gICAgaWYgKHBsdWdpbi5pbnN0YWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFV0aWwoVnVlKTtcblxuICAgIFZ1ZS51cmwgPSBVcmw7XG4gICAgVnVlLmh0dHAgPSBIdHRwO1xuICAgIFZ1ZS5yZXNvdXJjZSA9IFJlc291cmNlO1xuICAgIFZ1ZS5Qcm9taXNlID0gUHJvbWlzZU9iajtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZ1ZS5wcm90b3R5cGUsIHtcblxuICAgICAgICAkdXJsOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucyhWdWUudXJsLCB0aGlzLCB0aGlzLiRvcHRpb25zLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJGh0dHA6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zKFZ1ZS5odHRwLCB0aGlzLCB0aGlzLiRvcHRpb25zLmh0dHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgICRyZXNvdXJjZToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFZ1ZS5yZXNvdXJjZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgICRwcm9taXNlOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXhlY3V0b3IpIHsgcmV0dXJuIG5ldyBWdWUuUHJvbWlzZShleGVjdXRvciwgdGhpcyQxKTsgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfSk7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gICAgd2luZG93LlZ1ZS51c2UocGx1Z2luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luO1xuZXhwb3J0IHsgVXJsLCBIdHRwLCBSZXNvdXJjZSB9O1xuIiwiLyoqXG4gICogdnVlLXJvdXRlciB2Mi44LjFcbiAgKiAoYykgMjAxNyBFdmFuIFlvdVxuICAqIEBsaWNlbnNlIE1JVFxuICAqL1xuLyogICovXG5cbmZ1bmN0aW9uIGFzc2VydCAoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKChcIlt2dWUtcm91dGVyXSBcIiArIG1lc3NhZ2UpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm4gKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZGl0aW9uKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2FybigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNFcnJvciAoZXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXJyKS5pbmRleE9mKCdFcnJvcicpID4gLTFcbn1cblxudmFyIFZpZXcgPSB7XG4gIG5hbWU6ICdyb3V0ZXItdmlldycsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoXywgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBjaGlsZHJlbiA9IHJlZi5jaGlsZHJlbjtcbiAgICB2YXIgcGFyZW50ID0gcmVmLnBhcmVudDtcbiAgICB2YXIgZGF0YSA9IHJlZi5kYXRhO1xuXG4gICAgZGF0YS5yb3V0ZXJWaWV3ID0gdHJ1ZTtcblxuICAgIC8vIGRpcmVjdGx5IHVzZSBwYXJlbnQgY29udGV4dCdzIGNyZWF0ZUVsZW1lbnQoKSBmdW5jdGlvblxuICAgIC8vIHNvIHRoYXQgY29tcG9uZW50cyByZW5kZXJlZCBieSByb3V0ZXItdmlldyBjYW4gcmVzb2x2ZSBuYW1lZCBzbG90c1xuICAgIHZhciBoID0gcGFyZW50LiRjcmVhdGVFbGVtZW50O1xuICAgIHZhciBuYW1lID0gcHJvcHMubmFtZTtcbiAgICB2YXIgcm91dGUgPSBwYXJlbnQuJHJvdXRlO1xuICAgIHZhciBjYWNoZSA9IHBhcmVudC5fcm91dGVyVmlld0NhY2hlIHx8IChwYXJlbnQuX3JvdXRlclZpZXdDYWNoZSA9IHt9KTtcblxuICAgIC8vIGRldGVybWluZSBjdXJyZW50IHZpZXcgZGVwdGgsIGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZSB0cmVlXG4gICAgLy8gaGFzIGJlZW4gdG9nZ2xlZCBpbmFjdGl2ZSBidXQga2VwdC1hbGl2ZS5cbiAgICB2YXIgZGVwdGggPSAwO1xuICAgIHZhciBpbmFjdGl2ZSA9IGZhbHNlO1xuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Ll9yb3V0ZXJSb290ICE9PSBwYXJlbnQpIHtcbiAgICAgIGlmIChwYXJlbnQuJHZub2RlICYmIHBhcmVudC4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3KSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50Ll9pbmFjdGl2ZSkge1xuICAgICAgICBpbmFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgZGF0YS5yb3V0ZXJWaWV3RGVwdGggPSBkZXB0aDtcblxuICAgIC8vIHJlbmRlciBwcmV2aW91cyB2aWV3IGlmIHRoZSB0cmVlIGlzIGluYWN0aXZlIGFuZCBrZXB0LWFsaXZlXG4gICAgaWYgKGluYWN0aXZlKSB7XG4gICAgICByZXR1cm4gaChjYWNoZVtuYW1lXSwgZGF0YSwgY2hpbGRyZW4pXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoZWQgPSByb3V0ZS5tYXRjaGVkW2RlcHRoXTtcbiAgICAvLyByZW5kZXIgZW1wdHkgbm9kZSBpZiBubyBtYXRjaGVkIHJvdXRlXG4gICAgaWYgKCFtYXRjaGVkKSB7XG4gICAgICBjYWNoZVtuYW1lXSA9IG51bGw7XG4gICAgICByZXR1cm4gaCgpXG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudCA9IGNhY2hlW25hbWVdID0gbWF0Y2hlZC5jb21wb25lbnRzW25hbWVdO1xuXG4gICAgLy8gYXR0YWNoIGluc3RhbmNlIHJlZ2lzdHJhdGlvbiBob29rXG4gICAgLy8gdGhpcyB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgaW5zdGFuY2UncyBpbmplY3RlZCBsaWZlY3ljbGUgaG9va3NcbiAgICBkYXRhLnJlZ2lzdGVyUm91dGVJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgdmFsKSB7XG4gICAgICAvLyB2YWwgY291bGQgYmUgdW5kZWZpbmVkIGZvciB1bnJlZ2lzdHJhdGlvblxuICAgICAgdmFyIGN1cnJlbnQgPSBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXTtcbiAgICAgIGlmIChcbiAgICAgICAgKHZhbCAmJiBjdXJyZW50ICE9PSB2bSkgfHxcbiAgICAgICAgKCF2YWwgJiYgY3VycmVudCA9PT0gdm0pXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWxzbyByZWdpc3RlciBpbnN0YW5jZSBpbiBwcmVwYXRjaCBob29rXG4gICAgLy8gaW4gY2FzZSB0aGUgc2FtZSBjb21wb25lbnQgaW5zdGFuY2UgaXMgcmV1c2VkIGFjcm9zcyBkaWZmZXJlbnQgcm91dGVzXG4gICAgOyhkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KSkucHJlcGF0Y2ggPSBmdW5jdGlvbiAoXywgdm5vZGUpIHtcbiAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfTtcblxuICAgIC8vIHJlc29sdmUgcHJvcHNcbiAgICB2YXIgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gcmVzb2x2ZVByb3BzKHJvdXRlLCBtYXRjaGVkLnByb3BzICYmIG1hdGNoZWQucHJvcHNbbmFtZV0pO1xuICAgIGlmIChwcm9wc1RvUGFzcykge1xuICAgICAgLy8gY2xvbmUgdG8gcHJldmVudCBtdXRhdGlvblxuICAgICAgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gZXh0ZW5kKHt9LCBwcm9wc1RvUGFzcyk7XG4gICAgICAvLyBwYXNzIG5vbi1kZWNsYXJlZCBwcm9wcyBhcyBhdHRyc1xuICAgICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycyA9IGRhdGEuYXR0cnMgfHwge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNUb1Bhc3MpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQucHJvcHMgfHwgIShrZXkgaW4gY29tcG9uZW50LnByb3BzKSkge1xuICAgICAgICAgIGF0dHJzW2tleV0gPSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICAgIGRlbGV0ZSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoY29tcG9uZW50LCBkYXRhLCBjaGlsZHJlbilcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVByb3BzIChyb3V0ZSwgY29uZmlnKSB7XG4gIHN3aXRjaCAodHlwZW9mIGNvbmZpZykge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybiBjb25maWcocm91dGUpXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gY29uZmlnID8gcm91dGUucGFyYW1zIDogdW5kZWZpbmVkXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJwcm9wcyBpbiBcXFwiXCIgKyAocm91dGUucGF0aCkgKyBcIlxcXCIgaXMgYSBcIiArICh0eXBlb2YgY29uZmlnKSArIFwiLCBcIiArXG4gICAgICAgICAgXCJleHBlY3RpbmcgYW4gb2JqZWN0LCBmdW5jdGlvbiBvciBib29sZWFuLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0ZW5kICh0bywgZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qICAqL1xuXG52YXIgZW5jb2RlUmVzZXJ2ZVJFID0gL1shJygpKl0vZztcbnZhciBlbmNvZGVSZXNlcnZlUmVwbGFjZXIgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTsgfTtcbnZhciBjb21tYVJFID0gLyUyQy9nO1xuXG4vLyBmaXhlZCBlbmNvZGVVUklDb21wb25lbnQgd2hpY2ggaXMgbW9yZSBjb25mb3JtYW50IHRvIFJGQzM5ODY6XG4vLyAtIGVzY2FwZXMgWyEnKCkqXVxuLy8gLSBwcmVzZXJ2ZSBjb21tYXNcbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKVxuICAucmVwbGFjZShlbmNvZGVSZXNlcnZlUkUsIGVuY29kZVJlc2VydmVSZXBsYWNlcilcbiAgLnJlcGxhY2UoY29tbWFSRSwgJywnKTsgfTtcblxudmFyIGRlY29kZSA9IGRlY29kZVVSSUNvbXBvbmVudDtcblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXJ5IChcbiAgcXVlcnksXG4gIGV4dHJhUXVlcnksXG4gIF9wYXJzZVF1ZXJ5XG4pIHtcbiAgaWYgKCBleHRyYVF1ZXJ5ID09PSB2b2lkIDAgKSBleHRyYVF1ZXJ5ID0ge307XG5cbiAgdmFyIHBhcnNlID0gX3BhcnNlUXVlcnkgfHwgcGFyc2VRdWVyeTtcbiAgdmFyIHBhcnNlZFF1ZXJ5O1xuICB0cnkge1xuICAgIHBhcnNlZFF1ZXJ5ID0gcGFyc2UocXVlcnkgfHwgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKGZhbHNlLCBlLm1lc3NhZ2UpO1xuICAgIHBhcnNlZFF1ZXJ5ID0ge307XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIGV4dHJhUXVlcnkpIHtcbiAgICBwYXJzZWRRdWVyeVtrZXldID0gZXh0cmFRdWVyeVtrZXldO1xuICB9XG4gIHJldHVybiBwYXJzZWRRdWVyeVxufVxuXG5mdW5jdGlvbiBwYXJzZVF1ZXJ5IChxdWVyeSkge1xuICB2YXIgcmVzID0ge307XG5cbiAgcXVlcnkgPSBxdWVyeS50cmltKCkucmVwbGFjZSgvXihcXD98I3wmKS8sICcnKTtcblxuICBpZiAoIXF1ZXJ5KSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgcXVlcnkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG4gICAgdmFyIGtleSA9IGRlY29kZShwYXJ0cy5zaGlmdCgpKTtcbiAgICB2YXIgdmFsID0gcGFydHMubGVuZ3RoID4gMFxuICAgICAgPyBkZWNvZGUocGFydHMuam9pbignPScpKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHJlc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc1trZXldID0gdmFsO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgIHJlc1trZXldLnB1c2godmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzW2tleV0gPSBbcmVzW2tleV0sIHZhbF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVF1ZXJ5IChvYmopIHtcbiAgdmFyIHJlcyA9IG9iaiA/IE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gb2JqW2tleV07XG5cbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbmNvZGUoa2V5KVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhbC5mb3JFYWNoKGZ1bmN0aW9uICh2YWwyKSB7XG4gICAgICAgIGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsMiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZShrZXkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2YWwyKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcmJylcbiAgICB9XG5cbiAgICByZXR1cm4gZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodmFsKVxuICB9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgubGVuZ3RoID4gMDsgfSkuam9pbignJicpIDogbnVsbDtcbiAgcmV0dXJuIHJlcyA/IChcIj9cIiArIHJlcykgOiAnJ1xufVxuXG4vKiAgKi9cblxuXG52YXIgdHJhaWxpbmdTbGFzaFJFID0gL1xcLz8kLztcblxuZnVuY3Rpb24gY3JlYXRlUm91dGUgKFxuICByZWNvcmQsXG4gIGxvY2F0aW9uLFxuICByZWRpcmVjdGVkRnJvbSxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHN0cmluZ2lmeVF1ZXJ5JCQxID0gcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnN0cmluZ2lmeVF1ZXJ5O1xuXG4gIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5IHx8IHt9O1xuICB0cnkge1xuICAgIHF1ZXJ5ID0gY2xvbmUocXVlcnkpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByb3V0ZSA9IHtcbiAgICBuYW1lOiBsb2NhdGlvbi5uYW1lIHx8IChyZWNvcmQgJiYgcmVjb3JkLm5hbWUpLFxuICAgIG1ldGE6IChyZWNvcmQgJiYgcmVjb3JkLm1ldGEpIHx8IHt9LFxuICAgIHBhdGg6IGxvY2F0aW9uLnBhdGggfHwgJy8nLFxuICAgIGhhc2g6IGxvY2F0aW9uLmhhc2ggfHwgJycsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIHBhcmFtczogbG9jYXRpb24ucGFyYW1zIHx8IHt9LFxuICAgIGZ1bGxQYXRoOiBnZXRGdWxsUGF0aChsb2NhdGlvbiwgc3RyaW5naWZ5UXVlcnkkJDEpLFxuICAgIG1hdGNoZWQ6IHJlY29yZCA/IGZvcm1hdE1hdGNoKHJlY29yZCkgOiBbXVxuICB9O1xuICBpZiAocmVkaXJlY3RlZEZyb20pIHtcbiAgICByb3V0ZS5yZWRpcmVjdGVkRnJvbSA9IGdldEZ1bGxQYXRoKHJlZGlyZWN0ZWRGcm9tLCBzdHJpbmdpZnlRdWVyeSQkMSk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocm91dGUpXG59XG5cbmZ1bmN0aW9uIGNsb25lICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKGNsb25lKVxuICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKHZhbHVlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuLy8gdGhlIHN0YXJ0aW5nIHJvdXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCBzdGF0ZVxudmFyIFNUQVJUID0gY3JlYXRlUm91dGUobnVsbCwge1xuICBwYXRoOiAnLydcbn0pO1xuXG5mdW5jdGlvbiBmb3JtYXRNYXRjaCAocmVjb3JkKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgd2hpbGUgKHJlY29yZCkge1xuICAgIHJlcy51bnNoaWZ0KHJlY29yZCk7XG4gICAgcmVjb3JkID0gcmVjb3JkLnBhcmVudDtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoIChcbiAgcmVmLFxuICBfc3RyaW5naWZ5UXVlcnlcbikge1xuICB2YXIgcGF0aCA9IHJlZi5wYXRoO1xuICB2YXIgcXVlcnkgPSByZWYucXVlcnk7IGlmICggcXVlcnkgPT09IHZvaWQgMCApIHF1ZXJ5ID0ge307XG4gIHZhciBoYXNoID0gcmVmLmhhc2g7IGlmICggaGFzaCA9PT0gdm9pZCAwICkgaGFzaCA9ICcnO1xuXG4gIHZhciBzdHJpbmdpZnkgPSBfc3RyaW5naWZ5UXVlcnkgfHwgc3RyaW5naWZ5UXVlcnk7XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgc3RyaW5naWZ5KHF1ZXJ5KSArIGhhc2hcbn1cblxuZnVuY3Rpb24gaXNTYW1lUm91dGUgKGEsIGIpIHtcbiAgaWYgKGIgPT09IFNUQVJUKSB7XG4gICAgcmV0dXJuIGEgPT09IGJcbiAgfSBlbHNlIGlmICghYikge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKGEucGF0aCAmJiBiLnBhdGgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnJykgPT09IGIucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJycpICYmXG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KVxuICAgIClcbiAgfSBlbHNlIGlmIChhLm5hbWUgJiYgYi5uYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEubmFtZSA9PT0gYi5uYW1lICYmXG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KSAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0RXF1YWwgKGEsIGIpIHtcbiAgaWYgKCBhID09PSB2b2lkIDAgKSBhID0ge307XG4gIGlmICggYiA9PT0gdm9pZCAwICkgYiA9IHt9O1xuXG4gIC8vIGhhbmRsZSBudWxsIHZhbHVlICMxNTY2XG4gIGlmICghYSB8fCAhYikgeyByZXR1cm4gYSA9PT0gYiB9XG4gIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgYVZhbCA9IGFba2V5XTtcbiAgICB2YXIgYlZhbCA9IGJba2V5XTtcbiAgICAvLyBjaGVjayBuZXN0ZWQgZXF1YWxpdHlcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiVmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0RXF1YWwoYVZhbCwgYlZhbClcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKSA9PT0gU3RyaW5nKGJWYWwpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRSb3V0ZSAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiAoXG4gICAgY3VycmVudC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpLmluZGV4T2YoXG4gICAgICB0YXJnZXQucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJy8nKVxuICAgICkgPT09IDAgJiZcbiAgICAoIXRhcmdldC5oYXNoIHx8IGN1cnJlbnQuaGFzaCA9PT0gdGFyZ2V0Lmhhc2gpICYmXG4gICAgcXVlcnlJbmNsdWRlcyhjdXJyZW50LnF1ZXJ5LCB0YXJnZXQucXVlcnkpXG4gIClcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlcyAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBpZiAoIShrZXkgaW4gY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKiAgKi9cblxuLy8gd29yayBhcm91bmQgd2VpcmQgZmxvdyBidWdcbnZhciB0b1R5cGVzID0gW1N0cmluZywgT2JqZWN0XTtcbnZhciBldmVudFR5cGVzID0gW1N0cmluZywgQXJyYXldO1xuXG52YXIgTGluayA9IHtcbiAgbmFtZTogJ3JvdXRlci1saW5rJyxcbiAgcHJvcHM6IHtcbiAgICB0bzoge1xuICAgICAgdHlwZTogdG9UeXBlcyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdhJ1xuICAgIH0sXG4gICAgZXhhY3Q6IEJvb2xlYW4sXG4gICAgYXBwZW5kOiBCb29sZWFuLFxuICAgIHJlcGxhY2U6IEJvb2xlYW4sXG4gICAgYWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBleGFjdEFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZXZlbnQ6IHtcbiAgICAgIHR5cGU6IGV2ZW50VHlwZXMsXG4gICAgICBkZWZhdWx0OiAnY2xpY2snXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJvdXRlciA9IHRoaXMuJHJvdXRlcjtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuJHJvdXRlO1xuICAgIHZhciByZWYgPSByb3V0ZXIucmVzb2x2ZSh0aGlzLnRvLCBjdXJyZW50LCB0aGlzLmFwcGVuZCk7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVmLmxvY2F0aW9uO1xuICAgIHZhciByb3V0ZSA9IHJlZi5yb3V0ZTtcbiAgICB2YXIgaHJlZiA9IHJlZi5ocmVmO1xuXG4gICAgdmFyIGNsYXNzZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsQWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rRXhhY3RBY3RpdmVDbGFzcztcbiAgICAvLyBTdXBwb3J0IGdsb2JhbCBlbXB0eSBhY3RpdmUgY2xhc3NcbiAgICB2YXIgYWN0aXZlQ2xhc3NGYWxsYmFjayA9IGdsb2JhbEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgICAgID8gJ3JvdXRlci1saW5rLWFjdGl2ZSdcbiAgICAgICAgICAgIDogZ2xvYmFsQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3NGYWxsYmFjayA9IGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICAgICAgPyAncm91dGVyLWxpbmstZXhhY3QtYWN0aXZlJ1xuICAgICAgICAgICAgOiBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzO1xuICAgIHZhciBhY3RpdmVDbGFzcyA9IHRoaXMuYWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICAgICAgPyBhY3RpdmVDbGFzc0ZhbGxiYWNrXG4gICAgICAgICAgICA6IHRoaXMuYWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3MgPSB0aGlzLmV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICAgICAgPyBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2tcbiAgICAgICAgICAgIDogdGhpcy5leGFjdEFjdGl2ZUNsYXNzO1xuICAgIHZhciBjb21wYXJlVGFyZ2V0ID0gbG9jYXRpb24ucGF0aFxuICAgICAgPyBjcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbiwgbnVsbCwgcm91dGVyKVxuICAgICAgOiByb3V0ZTtcblxuICAgIGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc10gPSBpc1NhbWVSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0KTtcbiAgICBjbGFzc2VzW2FjdGl2ZUNsYXNzXSA9IHRoaXMuZXhhY3RcbiAgICAgID8gY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXVxuICAgICAgOiBpc0luY2x1ZGVkUm91dGUoY3VycmVudCwgY29tcGFyZVRhcmdldCk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZ3VhcmRFdmVudChlKSkge1xuICAgICAgICBpZiAodGhpcyQxLnJlcGxhY2UpIHtcbiAgICAgICAgICByb3V0ZXIucmVwbGFjZShsb2NhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm91dGVyLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbiA9IHsgY2xpY2s6IGd1YXJkRXZlbnQgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmV2ZW50KSkge1xuICAgICAgdGhpcy5ldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IG9uW2VdID0gaGFuZGxlcjsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uW3RoaXMuZXZlbnRdID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBjbGFzc2VzXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnRhZyA9PT0gJ2EnKSB7XG4gICAgICBkYXRhLm9uID0gb247XG4gICAgICBkYXRhLmF0dHJzID0geyBocmVmOiBocmVmIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IDxhPiBjaGlsZCBhbmQgYXBwbHkgbGlzdGVuZXIgYW5kIGhyZWZcbiAgICAgIHZhciBhID0gZmluZEFuY2hvcih0aGlzLiRzbG90cy5kZWZhdWx0KTtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIC8vIGluIGNhc2UgdGhlIDxhPiBpcyBhIHN0YXRpYyBub2RlXG4gICAgICAgIGEuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgdmFyIGV4dGVuZCA9IF9WdWUudXRpbC5leHRlbmQ7XG4gICAgICAgIHZhciBhRGF0YSA9IGEuZGF0YSA9IGV4dGVuZCh7fSwgYS5kYXRhKTtcbiAgICAgICAgYURhdGEub24gPSBvbjtcbiAgICAgICAgdmFyIGFBdHRycyA9IGEuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYS5kYXRhLmF0dHJzKTtcbiAgICAgICAgYUF0dHJzLmhyZWYgPSBocmVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG9lc24ndCBoYXZlIDxhPiBjaGlsZCwgYXBwbHkgbGlzdGVuZXIgdG8gc2VsZlxuICAgICAgICBkYXRhLm9uID0gb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGhpcy50YWcsIGRhdGEsIHRoaXMuJHNsb3RzLmRlZmF1bHQpXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGd1YXJkRXZlbnQgKGUpIHtcbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2l0aCBjb250cm9sIGtleXNcbiAgaWYgKGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCB3aGVuIHByZXZlbnREZWZhdWx0IGNhbGxlZFxuICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IG9uIHJpZ2h0IGNsaWNrXG4gIGlmIChlLmJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIGUuYnV0dG9uICE9PSAwKSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgaWYgKGUuY3VycmVudFRhcmdldCAmJiBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldCA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpO1xuICAgIGlmICgvXFxiX2JsYW5rXFxiL2kudGVzdCh0YXJnZXQpKSB7IHJldHVybiB9XG4gIH1cbiAgLy8gdGhpcyBtYXkgYmUgYSBXZWV4IGV2ZW50IHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGlzIG1ldGhvZFxuICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaW5kQW5jaG9yIChjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICB2YXIgY2hpbGQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICdhJykge1xuICAgICAgICByZXR1cm4gY2hpbGRcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiAoY2hpbGQgPSBmaW5kQW5jaG9yKGNoaWxkLmNoaWxkcmVuKSkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBfVnVlO1xuXG5mdW5jdGlvbiBpbnN0YWxsIChWdWUpIHtcbiAgaWYgKGluc3RhbGwuaW5zdGFsbGVkICYmIF9WdWUgPT09IFZ1ZSkgeyByZXR1cm4gfVxuICBpbnN0YWxsLmluc3RhbGxlZCA9IHRydWU7XG5cbiAgX1Z1ZSA9IFZ1ZTtcblxuICB2YXIgaXNEZWYgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAhPT0gdW5kZWZpbmVkOyB9O1xuXG4gIHZhciByZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKHZtLCBjYWxsVmFsKSB7XG4gICAgdmFyIGkgPSB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gICAgaWYgKGlzRGVmKGkpICYmIGlzRGVmKGkgPSBpLmRhdGEpICYmIGlzRGVmKGkgPSBpLnJlZ2lzdGVyUm91dGVJbnN0YW5jZSkpIHtcbiAgICAgIGkodm0sIGNhbGxWYWwpO1xuICAgIH1cbiAgfTtcblxuICBWdWUubWl4aW4oe1xuICAgIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlICgpIHtcbiAgICAgIGlmIChpc0RlZih0aGlzLiRvcHRpb25zLnJvdXRlcikpIHtcbiAgICAgICAgdGhpcy5fcm91dGVyUm9vdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuJG9wdGlvbnMucm91dGVyO1xuICAgICAgICB0aGlzLl9yb3V0ZXIuaW5pdCh0aGlzKTtcbiAgICAgICAgVnVlLnV0aWwuZGVmaW5lUmVhY3RpdmUodGhpcywgJ19yb3V0ZScsIHRoaXMuX3JvdXRlci5oaXN0b3J5LmN1cnJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcm91dGVyUm9vdCA9ICh0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50Ll9yb3V0ZXJSb290KSB8fCB0aGlzO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJJbnN0YW5jZSh0aGlzLCB0aGlzKTtcbiAgICB9LFxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRyb3V0ZXInLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyUm9vdC5fcm91dGVyIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyUm9vdC5fcm91dGUgfVxuICB9KTtcblxuICBWdWUuY29tcG9uZW50KCdyb3V0ZXItdmlldycsIFZpZXcpO1xuICBWdWUuY29tcG9uZW50KCdyb3V0ZXItbGluaycsIExpbmspO1xuXG4gIHZhciBzdHJhdHMgPSBWdWUuY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbiAgLy8gdXNlIHRoZSBzYW1lIGhvb2sgbWVyZ2luZyBzdHJhdGVneSBmb3Igcm91dGUgaG9va3NcbiAgc3RyYXRzLmJlZm9yZVJvdXRlRW50ZXIgPSBzdHJhdHMuYmVmb3JlUm91dGVMZWF2ZSA9IHN0cmF0cy5iZWZvcmVSb3V0ZVVwZGF0ZSA9IHN0cmF0cy5jcmVhdGVkO1xufVxuXG4vKiAgKi9cblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGggKFxuICByZWxhdGl2ZSxcbiAgYmFzZSxcbiAgYXBwZW5kXG4pIHtcbiAgdmFyIGZpcnN0Q2hhciA9IHJlbGF0aXZlLmNoYXJBdCgwKTtcbiAgaWYgKGZpcnN0Q2hhciA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlXG4gIH1cblxuICBpZiAoZmlyc3RDaGFyID09PSAnPycgfHwgZmlyc3RDaGFyID09PSAnIycpIHtcbiAgICByZXR1cm4gYmFzZSArIHJlbGF0aXZlXG4gIH1cblxuICB2YXIgc3RhY2sgPSBiYXNlLnNwbGl0KCcvJyk7XG5cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNlZ21lbnQgaWY6XG4gIC8vIC0gbm90IGFwcGVuZGluZ1xuICAvLyAtIGFwcGVuZGluZyB0byB0cmFpbGluZyBzbGFzaCAobGFzdCBzZWdtZW50IGlzIGVtcHR5KVxuICBpZiAoIWFwcGVuZCB8fCAhc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIC8vIHJlc29sdmUgcmVsYXRpdmUgcGF0aFxuICB2YXIgc2VnbWVudHMgPSByZWxhdGl2ZS5yZXBsYWNlKC9eXFwvLywgJycpLnNwbGl0KCcvJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSAnLi4nKSB7XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnQgIT09ICcuJykge1xuICAgICAgc3RhY2sucHVzaChzZWdtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBlbnN1cmUgbGVhZGluZyBzbGFzaFxuICBpZiAoc3RhY2tbMF0gIT09ICcnKSB7XG4gICAgc3RhY2sudW5zaGlmdCgnJyk7XG4gIH1cblxuICByZXR1cm4gc3RhY2suam9pbignLycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICB2YXIgaGFzaCA9ICcnO1xuICB2YXIgcXVlcnkgPSAnJztcblxuICB2YXIgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggPj0gMCkge1xuICAgIGhhc2ggPSBwYXRoLnNsaWNlKGhhc2hJbmRleCk7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgaGFzaEluZGV4KTtcbiAgfVxuXG4gIHZhciBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ID49IDApIHtcbiAgICBxdWVyeSA9IHBhdGguc2xpY2UocXVlcnlJbmRleCArIDEpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHF1ZXJ5SW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG59XG5cbnZhciBpc2FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbnZhciBwYXRoVG9SZWdleHBfMSA9IHBhdGhUb1JlZ2V4cDtcbnZhciBwYXJzZV8xID0gcGFyc2U7XG52YXIgY29tcGlsZV8xID0gY29tcGlsZTtcbnZhciB0b2tlbnNUb0Z1bmN0aW9uXzEgPSB0b2tlbnNUb0Z1bmN0aW9uO1xudmFyIHRva2Vuc1RvUmVnRXhwXzEgPSB0b2tlbnNUb1JlZ0V4cDtcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSk/fFxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpKFsrKj9dKT98KFxcXFwqKSknXG5dLmpvaW4oJ3wnKSwgJ2cnKTtcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIga2V5ID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHBhdGggPSAnJztcbiAgdmFyIGRlZmF1bHREZWxpbWl0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJztcbiAgdmFyIHJlcztcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdO1xuICAgIHZhciBlc2NhcGVkID0gcmVzWzFdO1xuICAgIHZhciBvZmZzZXQgPSByZXMuaW5kZXg7XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldCk7XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aDtcblxuICAgIC8vIElnbm9yZSBhbHJlYWR5IGVzY2FwZWQgc2VxdWVuY2VzLlxuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBwYXRoICs9IGVzY2FwZWRbMV07XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XTtcbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdO1xuICAgIHZhciBuYW1lID0gcmVzWzNdO1xuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdO1xuICAgIHZhciBncm91cCA9IHJlc1s1XTtcbiAgICB2YXIgbW9kaWZpZXIgPSByZXNbNl07XG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddO1xuXG4gICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICBpZiAocGF0aCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gICAgICBwYXRoID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4O1xuICAgIHZhciByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIG9wdGlvbmFsID0gbW9kaWZpZXIgPT09ICc/JyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgIHZhciBkZWxpbWl0ZXIgPSByZXNbMl0gfHwgZGVmYXVsdERlbGltaXRlcjtcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXA7XG5cbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lIHx8IGtleSsrLFxuICAgICAgcHJlZml4OiBwcmVmaXggfHwgJycsXG4gICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgIHJlcGVhdDogcmVwZWF0LFxuICAgICAgcGFydGlhbDogcGFydGlhbCxcbiAgICAgIGFzdGVyaXNrOiAhIWFzdGVyaXNrLFxuICAgICAgcGF0dGVybjogcGF0dGVybiA/IGVzY2FwZUdyb3VwKHBhdHRlcm4pIDogKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBlc2NhcGVTdHJpbmcoZGVsaW1pdGVyKSArICddKz8nKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KTtcbiAgfVxuXG4gIC8vIElmIHRoZSBwYXRoIGV4aXN0cywgcHVzaCBpdCBvbnRvIHRoZSBlbmQuXG4gIGlmIChwYXRoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshZnVuY3Rpb24oT2JqZWN0PSwgT2JqZWN0PSl9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpKVxufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1tcXC8/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aCk7XG5cbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHBhdHRlcm5zIGJlZm9yZSBjb21waWxhdGlvbi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1hdGNoZXNbaV0gPSBuZXcgUmVnRXhwKCdeKD86JyArIHRva2Vuc1tpXS5wYXR0ZXJuICsgJykkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcbiAgICB2YXIgcGF0aCA9ICcnO1xuICAgIHZhciBkYXRhID0gb2JqIHx8IHt9O1xuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZW5jb2RlID0gb3B0aW9ucy5wcmV0dHkgPyBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgOiBlbmNvZGVVUklDb21wb25lbnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuO1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV07XG4gICAgICB2YXIgc2VnbWVudDtcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICdgJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IGVuY29kZSh2YWx1ZVtqXSk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkoc2VnbWVudCkgKyAnYCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aCArPSAoaiA9PT0gMCA/IHRva2VuLnByZWZpeCA6IHRva2VuLmRlbGltaXRlcikgKyBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKTtcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFxuICB9XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18XFwvXFxcXF0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEVzY2FwZSB0aGUgY2FwdHVyaW5nIGdyb3VwIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgbWVhbmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGdyb3VwXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUdyb3VwIChncm91cCkge1xuICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokXFwvKCldKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGtleXMgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhdHRhY2hLZXlzIChyZSwga2V5cykge1xuICByZS5rZXlzID0ga2V5cztcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpO1xuXG4gIGlmIChncm91cHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgbmFtZTogaSxcbiAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICBkZWxpbWl0ZXI6IG51bGwsXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIGFzdGVyaXNrOiBmYWxzZSxcbiAgICAgICAgcGF0dGVybjogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocGF0aCwga2V5cylcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYXJyYXkgaW50byBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHBhcnRzLnB1c2gocGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSk7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86JyArIHBhcnRzLmpvaW4oJ3wnKSArICcpJywgZmxhZ3Mob3B0aW9ucykpO1xuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9SZWdFeHAocGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICAgICAgICAgIHRva2Vuc1xuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvUmVnRXhwICh0b2tlbnMsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuICB2YXIgZW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlO1xuICB2YXIgcm91dGUgPSAnJztcblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlZml4ID0gZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeCk7XG4gICAgICB2YXIgY2FwdHVyZSA9ICcoPzonICsgdG9rZW4ucGF0dGVybiArICcpJztcblxuICAgICAga2V5cy5wdXNoKHRva2VuKTtcblxuICAgICAgaWYgKHRva2VuLnJlcGVhdCkge1xuICAgICAgICBjYXB0dXJlICs9ICcoPzonICsgcHJlZml4ICsgY2FwdHVyZSArICcpKic7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIXRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICBjYXB0dXJlID0gJyg/OicgKyBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJykpPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKT8nO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpJztcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gY2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJyk7XG4gIHZhciBlbmRzV2l0aERlbGltaXRlciA9IHJvdXRlLnNsaWNlKC1kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gZGVsaW1pdGVyO1xuXG4gIC8vIEluIG5vbi1zdHJpY3QgbW9kZSB3ZSBhbGxvdyBhIHNsYXNoIGF0IHRoZSBlbmQgb2YgbWF0Y2guIElmIHRoZSBwYXRoIHRvXG4gIC8vIG1hdGNoIGFscmVhZHkgZW5kcyB3aXRoIGEgc2xhc2gsIHdlIHJlbW92ZSBpdCBmb3IgY29uc2lzdGVuY3kuIFRoZSBzbGFzaFxuICAvLyBpcyB2YWxpZCBhdCB0aGUgZW5kIG9mIGEgcGF0aCBtYXRjaCwgbm90IGluIHRoZSBtaWRkbGUuIFRoaXMgaXMgaW1wb3J0YW50XG4gIC8vIGluIG5vbi1lbmRpbmcgbW9kZSwgd2hlcmUgXCIvdGVzdC9cIiBzaG91bGRuJ3QgbWF0Y2ggXCIvdGVzdC8vcm91dGVcIi5cbiAgaWYgKCFzdHJpY3QpIHtcbiAgICByb3V0ZSA9IChlbmRzV2l0aERlbGltaXRlciA/IHJvdXRlLnNsaWNlKDAsIC1kZWxpbWl0ZXIubGVuZ3RoKSA6IHJvdXRlKSArICcoPzonICsgZGVsaW1pdGVyICsgJyg/PSQpKT8nO1xuICB9XG5cbiAgaWYgKGVuZCkge1xuICAgIHJvdXRlICs9ICckJztcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBub24tZW5kaW5nIG1vZGUsIHdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYXMgbXVjaCBhc1xuICAgIC8vIHBvc3NpYmxlIGJ5IHVzaW5nIGEgcG9zaXRpdmUgbG9va2FoZWFkIHRvIHRoZSBlbmQgb3IgbmV4dCBwYXRoIHNlZ21lbnQuXG4gICAgcm91dGUgKz0gc3RyaWN0ICYmIGVuZHNXaXRoRGVsaW1pdGVyID8gJycgOiAnKD89JyArIGRlbGltaXRlciArICd8JCknO1xuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMobmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpLCBrZXlzKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKlxuICogQHBhcmFtICB7KHN0cmluZ3xSZWdFeHB8QXJyYXkpfSBwYXRoXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19ICAgICAgIGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcGF0aFRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpO1xuICAgIGtleXMgPSBbXTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cykpXG4gIH1cblxuICBpZiAoaXNhcnJheShwYXRoKSkge1xuICAgIHJldHVybiBhcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9SZWdleHAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbn1cblxucGF0aFRvUmVnZXhwXzEucGFyc2UgPSBwYXJzZV8xO1xucGF0aFRvUmVnZXhwXzEuY29tcGlsZSA9IGNvbXBpbGVfMTtcbnBhdGhUb1JlZ2V4cF8xLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXzE7XG5cbi8qICAqL1xuXG4vLyAkZmxvdy1kaXNhYmxlLWxpbmVcbnZhciByZWdleHBDb21waWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBmaWxsUGFyYW1zIChcbiAgcGF0aCxcbiAgcGFyYW1zLFxuICByb3V0ZU1zZ1xuKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZpbGxlciA9XG4gICAgICByZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gfHxcbiAgICAgIChyZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gPSBwYXRoVG9SZWdleHBfMS5jb21waWxlKHBhdGgpKTtcbiAgICByZXR1cm4gZmlsbGVyKHBhcmFtcyB8fCB7fSwgeyBwcmV0dHk6IHRydWUgfSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKGZhbHNlLCAoXCJtaXNzaW5nIHBhcmFtIGZvciBcIiArIHJvdXRlTXNnICsgXCI6IFwiICsgKGUubWVzc2FnZSkpKTtcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlTWFwIChcbiAgcm91dGVzLFxuICBvbGRQYXRoTGlzdCxcbiAgb2xkUGF0aE1hcCxcbiAgb2xkTmFtZU1hcFxuKSB7XG4gIC8vIHRoZSBwYXRoIGxpc3QgaXMgdXNlZCB0byBjb250cm9sIHBhdGggbWF0Y2hpbmcgcHJpb3JpdHlcbiAgdmFyIHBhdGhMaXN0ID0gb2xkUGF0aExpc3QgfHwgW107XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgcGF0aE1hcCA9IG9sZFBhdGhNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciBuYW1lTWFwID0gb2xkTmFtZU1hcCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJvdXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCByb3V0ZSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSB3aWxkY2FyZCByb3V0ZXMgYXJlIGFsd2F5cyBhdCB0aGUgZW5kXG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGF0aExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHBhdGhMaXN0W2ldID09PSAnKicpIHtcbiAgICAgIHBhdGhMaXN0LnB1c2gocGF0aExpc3Quc3BsaWNlKGksIDEpWzBdKTtcbiAgICAgIGwtLTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhMaXN0OiBwYXRoTGlzdCxcbiAgICBwYXRoTWFwOiBwYXRoTWFwLFxuICAgIG5hbWVNYXA6IG5hbWVNYXBcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSb3V0ZVJlY29yZCAoXG4gIHBhdGhMaXN0LFxuICBwYXRoTWFwLFxuICBuYW1lTWFwLFxuICByb3V0ZSxcbiAgcGFyZW50LFxuICBtYXRjaEFzXG4pIHtcbiAgdmFyIHBhdGggPSByb3V0ZS5wYXRoO1xuICB2YXIgbmFtZSA9IHJvdXRlLm5hbWU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHBhdGggIT0gbnVsbCwgXCJcXFwicGF0aFxcXCIgaXMgcmVxdWlyZWQgaW4gYSByb3V0ZSBjb25maWd1cmF0aW9uLlwiKTtcbiAgICBhc3NlcnQoXG4gICAgICB0eXBlb2Ygcm91dGUuY29tcG9uZW50ICE9PSAnc3RyaW5nJyxcbiAgICAgIFwicm91dGUgY29uZmlnIFxcXCJjb21wb25lbnRcXFwiIGZvciBwYXRoOiBcIiArIChTdHJpbmcocGF0aCB8fCBuYW1lKSkgKyBcIiBjYW5ub3QgYmUgYSBcIiArXG4gICAgICBcInN0cmluZyBpZC4gVXNlIGFuIGFjdHVhbCBjb21wb25lbnQgaW5zdGVhZC5cIlxuICAgICk7XG4gIH1cblxuICB2YXIgcGF0aFRvUmVnZXhwT3B0aW9ucyA9IHJvdXRlLnBhdGhUb1JlZ2V4cE9wdGlvbnMgfHwge307XG4gIHZhciBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgoXG4gICAgcGF0aCxcbiAgICBwYXJlbnQsXG4gICAgcGF0aFRvUmVnZXhwT3B0aW9ucy5zdHJpY3RcbiAgKTtcblxuICBpZiAodHlwZW9mIHJvdXRlLmNhc2VTZW5zaXRpdmUgPT09ICdib29sZWFuJykge1xuICAgIHBhdGhUb1JlZ2V4cE9wdGlvbnMuc2Vuc2l0aXZlID0gcm91dGUuY2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIHZhciByZWNvcmQgPSB7XG4gICAgcGF0aDogbm9ybWFsaXplZFBhdGgsXG4gICAgcmVnZXg6IGNvbXBpbGVSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRQYXRoLCBwYXRoVG9SZWdleHBPcHRpb25zKSxcbiAgICBjb21wb25lbnRzOiByb3V0ZS5jb21wb25lbnRzIHx8IHsgZGVmYXVsdDogcm91dGUuY29tcG9uZW50IH0sXG4gICAgaW5zdGFuY2VzOiB7fSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIG1hdGNoQXM6IG1hdGNoQXMsXG4gICAgcmVkaXJlY3Q6IHJvdXRlLnJlZGlyZWN0LFxuICAgIGJlZm9yZUVudGVyOiByb3V0ZS5iZWZvcmVFbnRlcixcbiAgICBtZXRhOiByb3V0ZS5tZXRhIHx8IHt9LFxuICAgIHByb3BzOiByb3V0ZS5wcm9wcyA9PSBudWxsXG4gICAgICA/IHt9XG4gICAgICA6IHJvdXRlLmNvbXBvbmVudHNcbiAgICAgICAgPyByb3V0ZS5wcm9wc1xuICAgICAgICA6IHsgZGVmYXVsdDogcm91dGUucHJvcHMgfVxuICB9O1xuXG4gIGlmIChyb3V0ZS5jaGlsZHJlbikge1xuICAgIC8vIFdhcm4gaWYgcm91dGUgaXMgbmFtZWQsIGRvZXMgbm90IHJlZGlyZWN0IGFuZCBoYXMgYSBkZWZhdWx0IGNoaWxkIHJvdXRlLlxuICAgIC8vIElmIHVzZXJzIG5hdmlnYXRlIHRvIHRoaXMgcm91dGUgYnkgbmFtZSwgdGhlIGRlZmF1bHQgY2hpbGQgd2lsbFxuICAgIC8vIG5vdCBiZSByZW5kZXJlZCAoR0ggSXNzdWUgIzYyOSlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHJvdXRlLm5hbWUgJiYgIXJvdXRlLnJlZGlyZWN0ICYmIHJvdXRlLmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAvXlxcLz8kLy50ZXN0KGNoaWxkLnBhdGgpOyB9KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwiTmFtZWQgUm91dGUgJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInIGhhcyBhIGRlZmF1bHQgY2hpbGQgcm91dGUuIFwiICtcbiAgICAgICAgICBcIldoZW4gbmF2aWdhdGluZyB0byB0aGlzIG5hbWVkIHJvdXRlICg6dG89XFxcIntuYW1lOiAnXCIgKyAocm91dGUubmFtZSkgKyBcIidcXFwiKSwgXCIgK1xuICAgICAgICAgIFwidGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgd2lsbCBub3QgYmUgcmVuZGVyZWQuIFJlbW92ZSB0aGUgbmFtZSBmcm9tIFwiICtcbiAgICAgICAgICBcInRoaXMgcm91dGUgYW5kIHVzZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBjaGlsZCByb3V0ZSBmb3IgbmFtZWQgXCIgK1xuICAgICAgICAgIFwibGlua3MgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByb3V0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgdmFyIGNoaWxkTWF0Y2hBcyA9IG1hdGNoQXNcbiAgICAgICAgPyBjbGVhblBhdGgoKG1hdGNoQXMgKyBcIi9cIiArIChjaGlsZC5wYXRoKSkpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgYWRkUm91dGVSZWNvcmQocGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXAsIGNoaWxkLCByZWNvcmQsIGNoaWxkTWF0Y2hBcyk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocm91dGUuYWxpYXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBhbGlhc2VzID0gQXJyYXkuaXNBcnJheShyb3V0ZS5hbGlhcylcbiAgICAgID8gcm91dGUuYWxpYXNcbiAgICAgIDogW3JvdXRlLmFsaWFzXTtcblxuICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgIHZhciBhbGlhc1JvdXRlID0ge1xuICAgICAgICBwYXRoOiBhbGlhcyxcbiAgICAgICAgY2hpbGRyZW46IHJvdXRlLmNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgYWRkUm91dGVSZWNvcmQoXG4gICAgICAgIHBhdGhMaXN0LFxuICAgICAgICBwYXRoTWFwLFxuICAgICAgICBuYW1lTWFwLFxuICAgICAgICBhbGlhc1JvdXRlLFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHJlY29yZC5wYXRoIHx8ICcvJyAvLyBtYXRjaEFzXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFwYXRoTWFwW3JlY29yZC5wYXRoXSkge1xuICAgIHBhdGhMaXN0LnB1c2gocmVjb3JkLnBhdGgpO1xuICAgIHBhdGhNYXBbcmVjb3JkLnBhdGhdID0gcmVjb3JkO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpZiAoIW5hbWVNYXBbbmFtZV0pIHtcbiAgICAgIG5hbWVNYXBbbmFtZV0gPSByZWNvcmQ7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFtYXRjaEFzKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgXCJEdXBsaWNhdGUgbmFtZWQgcm91dGVzIGRlZmluaXRpb246IFwiICtcbiAgICAgICAgXCJ7IG5hbWU6IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIHBhdGg6IFxcXCJcIiArIChyZWNvcmQucGF0aCkgKyBcIlxcXCIgfVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlUm91dGVSZWdleCAocGF0aCwgcGF0aFRvUmVnZXhwT3B0aW9ucykge1xuICB2YXIgcmVnZXggPSBwYXRoVG9SZWdleHBfMShwYXRoLCBbXSwgcGF0aFRvUmVnZXhwT3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJlZ2V4LmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB3YXJuKCFrZXlzW2tleS5uYW1lXSwgKFwiRHVwbGljYXRlIHBhcmFtIGtleXMgaW4gcm91dGUgd2l0aCBwYXRoOiBcXFwiXCIgKyBwYXRoICsgXCJcXFwiXCIpKTtcbiAgICAgIGtleXNba2V5Lm5hbWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVnZXhcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aCAocGF0aCwgcGFyZW50LCBzdHJpY3QpIHtcbiAgaWYgKCFzdHJpY3QpIHsgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTsgfVxuICBpZiAocGF0aFswXSA9PT0gJy8nKSB7IHJldHVybiBwYXRoIH1cbiAgaWYgKHBhcmVudCA9PSBudWxsKSB7IHJldHVybiBwYXRoIH1cbiAgcmV0dXJuIGNsZWFuUGF0aCgoKHBhcmVudC5wYXRoKSArIFwiL1wiICsgcGF0aCkpXG59XG5cbi8qICAqL1xuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2F0aW9uIChcbiAgcmF3LFxuICBjdXJyZW50LFxuICBhcHBlbmQsXG4gIHJvdXRlclxuKSB7XG4gIHZhciBuZXh0ID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyB7IHBhdGg6IHJhdyB9IDogcmF3O1xuICAvLyBuYW1lZCB0YXJnZXRcbiAgaWYgKG5leHQubmFtZSB8fCBuZXh0Ll9ub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIG5leHRcbiAgfVxuXG4gIC8vIHJlbGF0aXZlIHBhcmFtc1xuICBpZiAoIW5leHQucGF0aCAmJiBuZXh0LnBhcmFtcyAmJiBjdXJyZW50KSB7XG4gICAgbmV4dCA9IGFzc2lnbih7fSwgbmV4dCk7XG4gICAgbmV4dC5fbm9ybWFsaXplZCA9IHRydWU7XG4gICAgdmFyIHBhcmFtcyA9IGFzc2lnbihhc3NpZ24oe30sIGN1cnJlbnQucGFyYW1zKSwgbmV4dC5wYXJhbXMpO1xuICAgIGlmIChjdXJyZW50Lm5hbWUpIHtcbiAgICAgIG5leHQubmFtZSA9IGN1cnJlbnQubmFtZTtcbiAgICAgIG5leHQucGFyYW1zID0gcGFyYW1zO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudC5tYXRjaGVkLmxlbmd0aCkge1xuICAgICAgdmFyIHJhd1BhdGggPSBjdXJyZW50Lm1hdGNoZWRbY3VycmVudC5tYXRjaGVkLmxlbmd0aCAtIDFdLnBhdGg7XG4gICAgICBuZXh0LnBhdGggPSBmaWxsUGFyYW1zKHJhd1BhdGgsIHBhcmFtcywgKFwicGF0aCBcIiArIChjdXJyZW50LnBhdGgpKSk7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKGZhbHNlLCBcInJlbGF0aXZlIHBhcmFtcyBuYXZpZ2F0aW9uIHJlcXVpcmVzIGEgY3VycmVudCByb3V0ZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBuZXh0XG4gIH1cblxuICB2YXIgcGFyc2VkUGF0aCA9IHBhcnNlUGF0aChuZXh0LnBhdGggfHwgJycpO1xuICB2YXIgYmFzZVBhdGggPSAoY3VycmVudCAmJiBjdXJyZW50LnBhdGgpIHx8ICcvJztcbiAgdmFyIHBhdGggPSBwYXJzZWRQYXRoLnBhdGhcbiAgICA/IHJlc29sdmVQYXRoKHBhcnNlZFBhdGgucGF0aCwgYmFzZVBhdGgsIGFwcGVuZCB8fCBuZXh0LmFwcGVuZClcbiAgICA6IGJhc2VQYXRoO1xuXG4gIHZhciBxdWVyeSA9IHJlc29sdmVRdWVyeShcbiAgICBwYXJzZWRQYXRoLnF1ZXJ5LFxuICAgIG5leHQucXVlcnksXG4gICAgcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnBhcnNlUXVlcnlcbiAgKTtcblxuICB2YXIgaGFzaCA9IG5leHQuaGFzaCB8fCBwYXJzZWRQYXRoLmhhc2g7XG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIHtcbiAgICBoYXNoID0gXCIjXCIgKyBoYXNoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduIChhLCBiKSB7XG4gIGZvciAodmFyIGtleSBpbiBiKSB7XG4gICAgYVtrZXldID0gYltrZXldO1xuICB9XG4gIHJldHVybiBhXG59XG5cbi8qICAqL1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZU1hdGNoZXIgKFxuICByb3V0ZXMsXG4gIHJvdXRlclxuKSB7XG4gIHZhciByZWYgPSBjcmVhdGVSb3V0ZU1hcChyb3V0ZXMpO1xuICB2YXIgcGF0aExpc3QgPSByZWYucGF0aExpc3Q7XG4gIHZhciBwYXRoTWFwID0gcmVmLnBhdGhNYXA7XG4gIHZhciBuYW1lTWFwID0gcmVmLm5hbWVNYXA7XG5cbiAgZnVuY3Rpb24gYWRkUm91dGVzIChyb3V0ZXMpIHtcbiAgICBjcmVhdGVSb3V0ZU1hcChyb3V0ZXMsIHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoIChcbiAgICByYXcsXG4gICAgY3VycmVudFJvdXRlLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHJhdywgY3VycmVudFJvdXRlLCBmYWxzZSwgcm91dGVyKTtcbiAgICB2YXIgbmFtZSA9IGxvY2F0aW9uLm5hbWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFyIHJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKHJlY29yZCwgKFwiUm91dGUgd2l0aCBuYW1lICdcIiArIG5hbWUgKyBcIicgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWNvcmQpIHsgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbikgfVxuICAgICAgdmFyIHBhcmFtTmFtZXMgPSByZWNvcmQucmVnZXgua2V5c1xuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFrZXkub3B0aW9uYWw7IH0pXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5Lm5hbWU7IH0pO1xuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Um91dGUgJiYgdHlwZW9mIGN1cnJlbnRSb3V0ZS5wYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50Um91dGUucGFyYW1zKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGxvY2F0aW9uLnBhcmFtcykgJiYgcGFyYW1OYW1lcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyYW1zW2tleV0gPSBjdXJyZW50Um91dGUucGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgbG9jYXRpb24ucGF0aCA9IGZpbGxQYXJhbXMocmVjb3JkLnBhdGgsIGxvY2F0aW9uLnBhcmFtcywgKFwibmFtZWQgcm91dGUgXFxcIlwiICsgbmFtZSArIFwiXFxcIlwiKSk7XG4gICAgICAgIHJldHVybiBfY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbi5wYXRoKSB7XG4gICAgICBsb2NhdGlvbi5wYXJhbXMgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhdGggPSBwYXRoTGlzdFtpXTtcbiAgICAgICAgdmFyIHJlY29yZCQxID0gcGF0aE1hcFtwYXRoXTtcbiAgICAgICAgaWYgKG1hdGNoUm91dGUocmVjb3JkJDEucmVnZXgsIGxvY2F0aW9uLnBhdGgsIGxvY2F0aW9uLnBhcmFtcykpIHtcbiAgICAgICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKHJlY29yZCQxLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gbm8gbWF0Y2hcbiAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVkaXJlY3QgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvblxuICApIHtcbiAgICB2YXIgb3JpZ2luYWxSZWRpcmVjdCA9IHJlY29yZC5yZWRpcmVjdDtcbiAgICB2YXIgcmVkaXJlY3QgPSB0eXBlb2Ygb3JpZ2luYWxSZWRpcmVjdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IG9yaWdpbmFsUmVkaXJlY3QoY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgbnVsbCwgcm91dGVyKSlcbiAgICAgICAgOiBvcmlnaW5hbFJlZGlyZWN0O1xuXG4gICAgaWYgKHR5cGVvZiByZWRpcmVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlZGlyZWN0ID0geyBwYXRoOiByZWRpcmVjdCB9O1xuICAgIH1cblxuICAgIGlmICghcmVkaXJlY3QgfHwgdHlwZW9mIHJlZGlyZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSwgKFwiaW52YWxpZCByZWRpcmVjdCBvcHRpb246IFwiICsgKEpTT04uc3RyaW5naWZ5KHJlZGlyZWN0KSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHZhciByZSA9IHJlZGlyZWN0O1xuICAgIHZhciBuYW1lID0gcmUubmFtZTtcbiAgICB2YXIgcGF0aCA9IHJlLnBhdGg7XG4gICAgdmFyIHF1ZXJ5ID0gbG9jYXRpb24ucXVlcnk7XG4gICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuICAgIHZhciBwYXJhbXMgPSBsb2NhdGlvbi5wYXJhbXM7XG4gICAgcXVlcnkgPSByZS5oYXNPd25Qcm9wZXJ0eSgncXVlcnknKSA/IHJlLnF1ZXJ5IDogcXVlcnk7XG4gICAgaGFzaCA9IHJlLmhhc093blByb3BlcnR5KCdoYXNoJykgPyByZS5oYXNoIDogaGFzaDtcbiAgICBwYXJhbXMgPSByZS5oYXNPd25Qcm9wZXJ0eSgncGFyYW1zJykgPyByZS5wYXJhbXMgOiBwYXJhbXM7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgLy8gcmVzb2x2ZWQgbmFtZWQgZGlyZWN0XG4gICAgICB2YXIgdGFyZ2V0UmVjb3JkID0gbmFtZU1hcFtuYW1lXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRSZWNvcmQsIChcInJlZGlyZWN0IGZhaWxlZDogbmFtZWQgcm91dGUgXFxcIlwiICsgbmFtZSArIFwiXFxcIiBub3QgZm91bmQuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaCh7XG4gICAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhc2g6IGhhc2gsXG4gICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAocGF0aCkge1xuICAgICAgLy8gMS4gcmVzb2x2ZSByZWxhdGl2ZSByZWRpcmVjdFxuICAgICAgdmFyIHJhd1BhdGggPSByZXNvbHZlUmVjb3JkUGF0aChwYXRoLCByZWNvcmQpO1xuICAgICAgLy8gMi4gcmVzb2x2ZSBwYXJhbXNcbiAgICAgIHZhciByZXNvbHZlZFBhdGggPSBmaWxsUGFyYW1zKHJhd1BhdGgsIHBhcmFtcywgKFwicmVkaXJlY3Qgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIHJhd1BhdGggKyBcIlxcXCJcIikpO1xuICAgICAgLy8gMy4gcmVtYXRjaCB3aXRoIGV4aXN0aW5nIHF1ZXJ5IGFuZCBoYXNoXG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhc2g6IGhhc2hcbiAgICAgIH0sIHVuZGVmaW5lZCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFsaWFzIChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb24sXG4gICAgbWF0Y2hBc1xuICApIHtcbiAgICB2YXIgYWxpYXNlZFBhdGggPSBmaWxsUGFyYW1zKG1hdGNoQXMsIGxvY2F0aW9uLnBhcmFtcywgKFwiYWxpYXNlZCByb3V0ZSB3aXRoIHBhdGggXFxcIlwiICsgbWF0Y2hBcyArIFwiXFxcIlwiKSk7XG4gICAgdmFyIGFsaWFzZWRNYXRjaCA9IG1hdGNoKHtcbiAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgcGF0aDogYWxpYXNlZFBhdGhcbiAgICB9KTtcbiAgICBpZiAoYWxpYXNlZE1hdGNoKSB7XG4gICAgICB2YXIgbWF0Y2hlZCA9IGFsaWFzZWRNYXRjaC5tYXRjaGVkO1xuICAgICAgdmFyIGFsaWFzZWRSZWNvcmQgPSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV07XG4gICAgICBsb2NhdGlvbi5wYXJhbXMgPSBhbGlhc2VkTWF0Y2gucGFyYW1zO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShhbGlhc2VkUmVjb3JkLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVSb3V0ZSAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLnJlZGlyZWN0KSB7XG4gICAgICByZXR1cm4gcmVkaXJlY3QocmVjb3JkLCByZWRpcmVjdGVkRnJvbSB8fCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHJlY29yZCAmJiByZWNvcmQubWF0Y2hBcykge1xuICAgICAgcmV0dXJuIGFsaWFzKHJlY29yZCwgbG9jYXRpb24sIHJlY29yZC5tYXRjaEFzKVxuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20sIHJvdXRlcilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIGFkZFJvdXRlczogYWRkUm91dGVzXG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hSb3V0ZSAoXG4gIHJlZ2V4LFxuICBwYXRoLFxuICBwYXJhbXNcbikge1xuICB2YXIgbSA9IHBhdGgubWF0Y2gocmVnZXgpO1xuXG4gIGlmICghbSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IG0ubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIga2V5ID0gcmVnZXgua2V5c1tpIC0gMV07XG4gICAgdmFyIHZhbCA9IHR5cGVvZiBtW2ldID09PSAnc3RyaW5nJyA/IGRlY29kZVVSSUNvbXBvbmVudChtW2ldKSA6IG1baV07XG4gICAgaWYgKGtleSkge1xuICAgICAgcGFyYW1zW2tleS5uYW1lXSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVjb3JkUGF0aCAocGF0aCwgcmVjb3JkKSB7XG4gIHJldHVybiByZXNvbHZlUGF0aChwYXRoLCByZWNvcmQucGFyZW50ID8gcmVjb3JkLnBhcmVudC5wYXRoIDogJy8nLCB0cnVlKVxufVxuXG4vKiAgKi9cblxuXG52YXIgcG9zaXRpb25TdG9yZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIHNldHVwU2Nyb2xsICgpIHtcbiAgLy8gRml4IGZvciAjMTU4NSBmb3IgRmlyZWZveFxuICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyBrZXk6IGdldFN0YXRlS2V5KCkgfSwgJycpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmdW5jdGlvbiAoZSkge1xuICAgIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICAgIGlmIChlLnN0YXRlICYmIGUuc3RhdGUua2V5KSB7XG4gICAgICBzZXRTdGF0ZUtleShlLnN0YXRlLmtleSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsIChcbiAgcm91dGVyLFxuICB0byxcbiAgZnJvbSxcbiAgaXNQb3Bcbikge1xuICBpZiAoIXJvdXRlci5hcHApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiZWhhdmlvciA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICBpZiAoIWJlaGF2aW9yKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgYmVoYXZpb3IgPT09ICdmdW5jdGlvbicsIFwic2Nyb2xsQmVoYXZpb3IgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgLy8gd2FpdCB1bnRpbCByZS1yZW5kZXIgZmluaXNoZXMgYmVmb3JlIHNjcm9sbGluZ1xuICByb3V0ZXIuYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICB2YXIgc2hvdWxkU2Nyb2xsID0gYmVoYXZpb3IodG8sIGZyb20sIGlzUG9wID8gcG9zaXRpb24gOiBudWxsKTtcblxuICAgIGlmICghc2hvdWxkU2Nyb2xsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNob3VsZFNjcm9sbC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzaG91bGRTY3JvbGwudGhlbihmdW5jdGlvbiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgIHNjcm9sbFRvUG9zaXRpb24oKHNob3VsZFNjcm9sbCksIHBvc2l0aW9uKTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBhc3NlcnQoZmFsc2UsIGVyci50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcm9sbFRvUG9zaXRpb24oc2hvdWxkU2Nyb2xsLCBwb3NpdGlvbik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZVNjcm9sbFBvc2l0aW9uICgpIHtcbiAgdmFyIGtleSA9IGdldFN0YXRlS2V5KCk7XG4gIGlmIChrZXkpIHtcbiAgICBwb3NpdGlvblN0b3JlW2tleV0gPSB7XG4gICAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICB5OiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFBvc2l0aW9uICgpIHtcbiAgdmFyIGtleSA9IGdldFN0YXRlS2V5KCk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gcG9zaXRpb25TdG9yZVtrZXldXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFBvc2l0aW9uIChlbCwgb2Zmc2V0KSB7XG4gIHZhciBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgdmFyIGRvY1JlY3QgPSBkb2NFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHg6IGVsUmVjdC5sZWZ0IC0gZG9jUmVjdC5sZWZ0IC0gb2Zmc2V0LngsXG4gICAgeTogZWxSZWN0LnRvcCAtIGRvY1JlY3QudG9wIC0gb2Zmc2V0LnlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4gaXNOdW1iZXIob2JqLngpIHx8IGlzTnVtYmVyKG9iai55KVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQb3NpdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgeDogaXNOdW1iZXIob2JqLngpID8gb2JqLnggOiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPZmZzZXQgKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogMCxcbiAgICB5OiBpc051bWJlcihvYmoueSkgPyBvYmoueSA6IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBpc051bWJlciAodikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInXG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24gKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pIHtcbiAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIHNob3VsZFNjcm9sbCA9PT0gJ29iamVjdCc7XG4gIGlmIChpc09iamVjdCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLnNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBzaG91bGRTY3JvbGwub2Zmc2V0ICYmIHR5cGVvZiBzaG91bGRTY3JvbGwub2Zmc2V0ID09PSAnb2JqZWN0JyA/IHNob3VsZFNjcm9sbC5vZmZzZXQgOiB7fTtcbiAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldChvZmZzZXQpO1xuICAgICAgcG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkUG9zaXRpb24oc2hvdWxkU2Nyb2xsKSkge1xuICAgICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCAmJiBpc1ZhbGlkUG9zaXRpb24oc2hvdWxkU2Nyb2xsKSkge1xuICAgIHBvc2l0aW9uID0gbm9ybWFsaXplUG9zaXRpb24oc2hvdWxkU2Nyb2xsKTtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbikge1xuICAgIHdpbmRvdy5zY3JvbGxUbyhwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHN1cHBvcnRzUHVzaFN0YXRlID0gaW5Ccm93c2VyICYmIChmdW5jdGlvbiAoKSB7XG4gIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIGlmIChcbiAgICAodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiZcbiAgICB1YS5pbmRleE9mKCdNb2JpbGUgU2FmYXJpJykgIT09IC0xICYmXG4gICAgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xICYmXG4gICAgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeVxufSkoKTtcblxuLy8gdXNlIFVzZXIgVGltaW5nIGFwaSAoaWYgcHJlc2VudCkgZm9yIG1vcmUgYWNjdXJhdGUga2V5IHByZWNpc2lvblxudmFyIFRpbWUgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3dcbiAgPyB3aW5kb3cucGVyZm9ybWFuY2VcbiAgOiBEYXRlO1xuXG52YXIgX2tleSA9IGdlbktleSgpO1xuXG5mdW5jdGlvbiBnZW5LZXkgKCkge1xuICByZXR1cm4gVGltZS5ub3coKS50b0ZpeGVkKDMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlS2V5ICgpIHtcbiAgcmV0dXJuIF9rZXlcbn1cblxuZnVuY3Rpb24gc2V0U3RhdGVLZXkgKGtleSkge1xuICBfa2V5ID0ga2V5O1xufVxuXG5mdW5jdGlvbiBwdXNoU3RhdGUgKHVybCwgcmVwbGFjZSkge1xuICBzYXZlU2Nyb2xsUG9zaXRpb24oKTtcbiAgLy8gdHJ5Li4uY2F0Y2ggdGhlIHB1c2hTdGF0ZSBjYWxsIHRvIGdldCBhcm91bmQgU2FmYXJpXG4gIC8vIERPTSBFeGNlcHRpb24gMTggd2hlcmUgaXQgbGltaXRzIHRvIDEwMCBwdXNoU3RhdGUgY2FsbHNcbiAgdmFyIGhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgdHJ5IHtcbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyBrZXk6IF9rZXkgfSwgJycsIHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9rZXkgPSBnZW5LZXkoKTtcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsga2V5OiBfa2V5IH0sICcnLCB1cmwpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbltyZXBsYWNlID8gJ3JlcGxhY2UnIDogJ2Fzc2lnbiddKHVybCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVN0YXRlICh1cmwpIHtcbiAgcHVzaFN0YXRlKHVybCwgdHJ1ZSk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBydW5RdWV1ZSAocXVldWUsIGZuLCBjYikge1xuICB2YXIgc3RlcCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmIChpbmRleCA+PSBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWV1ZVtpbmRleF0pIHtcbiAgICAgICAgZm4ocXVldWVbaW5kZXhdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RlcChpbmRleCArIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHN0ZXAoMCk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnRzIChtYXRjaGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodG8sIGZyb20sIG5leHQpIHtcbiAgICB2YXIgaGFzQXN5bmMgPSBmYWxzZTtcbiAgICB2YXIgcGVuZGluZyA9IDA7XG4gICAgdmFyIGVycm9yID0gbnVsbDtcblxuICAgIGZsYXRNYXBDb21wb25lbnRzKG1hdGNoZWQsIGZ1bmN0aW9uIChkZWYsIF8sIG1hdGNoLCBrZXkpIHtcbiAgICAgIC8vIGlmIGl0J3MgYSBmdW5jdGlvbiBhbmQgZG9lc24ndCBoYXZlIGNpZCBhdHRhY2hlZCxcbiAgICAgIC8vIGFzc3VtZSBpdCdzIGFuIGFzeW5jIGNvbXBvbmVudCByZXNvbHZlIGZ1bmN0aW9uLlxuICAgICAgLy8gd2UgYXJlIG5vdCB1c2luZyBWdWUncyBkZWZhdWx0IGFzeW5jIHJlc29sdmluZyBtZWNoYW5pc20gYmVjYXVzZVxuICAgICAgLy8gd2Ugd2FudCB0byBoYWx0IHRoZSBuYXZpZ2F0aW9uIHVudGlsIHRoZSBpbmNvbWluZyBjb21wb25lbnQgaGFzIGJlZW5cbiAgICAgIC8vIHJlc29sdmVkLlxuICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZGVmLmNpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhhc0FzeW5jID0gdHJ1ZTtcbiAgICAgICAgcGVuZGluZysrO1xuXG4gICAgICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzb2x2ZWREZWYpIHtcbiAgICAgICAgICBpZiAoaXNFU01vZHVsZShyZXNvbHZlZERlZikpIHtcbiAgICAgICAgICAgIHJlc29sdmVkRGVmID0gcmVzb2x2ZWREZWYuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2F2ZSByZXNvbHZlZCBvbiBhc3luYyBmYWN0b3J5IGluIGNhc2UgaXQncyB1c2VkIGVsc2V3aGVyZVxuICAgICAgICAgIGRlZi5yZXNvbHZlZCA9IHR5cGVvZiByZXNvbHZlZERlZiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyByZXNvbHZlZERlZlxuICAgICAgICAgICAgOiBfVnVlLmV4dGVuZChyZXNvbHZlZERlZik7XG4gICAgICAgICAgbWF0Y2guY29tcG9uZW50c1trZXldID0gcmVzb2x2ZWREZWY7XG4gICAgICAgICAgcGVuZGluZy0tO1xuICAgICAgICAgIGlmIChwZW5kaW5nIDw9IDApIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICB2YXIgbXNnID0gXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQgXCIgKyBrZXkgKyBcIjogXCIgKyByZWFzb247XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKGZhbHNlLCBtc2cpO1xuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gaXNFcnJvcihyZWFzb24pXG4gICAgICAgICAgICAgID8gcmVhc29uXG4gICAgICAgICAgICAgIDogbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzID0gZGVmKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5ldyBzeW50YXggaW4gVnVlIDIuM1xuICAgICAgICAgICAgdmFyIGNvbXAgPSByZXMuY29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGNvbXAgJiYgdHlwZW9mIGNvbXAudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjb21wLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghaGFzQXN5bmMpIHsgbmV4dCgpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdE1hcENvbXBvbmVudHMgKFxuICBtYXRjaGVkLFxuICBmblxuKSB7XG4gIHJldHVybiBmbGF0dGVuKG1hdGNoZWQubWFwKGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZuKFxuICAgICAgbS5jb21wb25lbnRzW2tleV0sXG4gICAgICBtLmluc3RhbmNlc1trZXldLFxuICAgICAgbSwga2V5XG4gICAgKTsgfSlcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4gKGFycikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxuZnVuY3Rpb24gaXNFU01vZHVsZSAob2JqKSB7XG4gIHJldHVybiBvYmouX19lc01vZHVsZSB8fCAoaGFzU3ltYm9sICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbn1cblxuLy8gaW4gV2VicGFjayAyLCByZXF1aXJlLmVuc3VyZSBub3cgYWxzbyByZXR1cm5zIGEgUHJvbWlzZVxuLy8gc28gdGhlIHJlc29sdmUvcmVqZWN0IGZ1bmN0aW9ucyBtYXkgZ2V0IGNhbGxlZCBhbiBleHRyYSB0aW1lXG4vLyBpZiB0aGUgdXNlciB1c2VzIGFuIGFycm93IGZ1bmN0aW9uIHNob3J0aGFuZCB0aGF0IGhhcHBlbnMgdG9cbi8vIHJldHVybiB0aGF0IFByb21pc2UuXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgaWYgKGNhbGxlZCkgeyByZXR1cm4gfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBIaXN0b3J5ID0gZnVuY3Rpb24gSGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gIHRoaXMucm91dGVyID0gcm91dGVyO1xuICB0aGlzLmJhc2UgPSBub3JtYWxpemVCYXNlKGJhc2UpO1xuICAvLyBzdGFydCB3aXRoIGEgcm91dGUgb2JqZWN0IHRoYXQgc3RhbmRzIGZvciBcIm5vd2hlcmVcIlxuICB0aGlzLmN1cnJlbnQgPSBTVEFSVDtcbiAgdGhpcy5wZW5kaW5nID0gbnVsbDtcbiAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICB0aGlzLnJlYWR5Q2JzID0gW107XG4gIHRoaXMucmVhZHlFcnJvckNicyA9IFtdO1xuICB0aGlzLmVycm9yQ2JzID0gW107XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5saXN0ZW4gPSBmdW5jdGlvbiBsaXN0ZW4gKGNiKSB7XG4gIHRoaXMuY2IgPSBjYjtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLm9uUmVhZHkgPSBmdW5jdGlvbiBvblJlYWR5IChjYiwgZXJyb3JDYikge1xuICBpZiAodGhpcy5yZWFkeSkge1xuICAgIGNiKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZWFkeUNicy5wdXNoKGNiKTtcbiAgICBpZiAoZXJyb3JDYikge1xuICAgICAgdGhpcy5yZWFkeUVycm9yQ2JzLnB1c2goZXJyb3JDYik7XG4gICAgfVxuICB9XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gb25FcnJvciAoZXJyb3JDYikge1xuICB0aGlzLmVycm9yQ2JzLnB1c2goZXJyb3JDYik7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS50cmFuc2l0aW9uVG8gPSBmdW5jdGlvbiB0cmFuc2l0aW9uVG8gKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHJvdXRlID0gdGhpcy5yb3V0ZXIubWF0Y2gobG9jYXRpb24sIHRoaXMuY3VycmVudCk7XG4gIHRoaXMuY29uZmlybVRyYW5zaXRpb24ocm91dGUsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgdGhpcyQxLmVuc3VyZVVSTCgpO1xuXG4gICAgLy8gZmlyZSByZWFkeSBjYnMgb25jZVxuICAgIGlmICghdGhpcyQxLnJlYWR5KSB7XG4gICAgICB0aGlzJDEucmVhZHkgPSB0cnVlO1xuICAgICAgdGhpcyQxLnJlYWR5Q2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7IGNiKHJvdXRlKTsgfSk7XG4gICAgfVxuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKG9uQWJvcnQpIHtcbiAgICAgIG9uQWJvcnQoZXJyKTtcbiAgICB9XG4gICAgaWYgKGVyciAmJiAhdGhpcyQxLnJlYWR5KSB7XG4gICAgICB0aGlzJDEucmVhZHkgPSB0cnVlO1xuICAgICAgdGhpcyQxLnJlYWR5RXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHsgY2IoZXJyKTsgfSk7XG4gICAgfVxuICB9KTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmNvbmZpcm1UcmFuc2l0aW9uID0gZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb24gKHJvdXRlLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gIHZhciBhYm9ydCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoaXNFcnJvcihlcnIpKSB7XG4gICAgICBpZiAodGhpcyQxLmVycm9yQ2JzLmxlbmd0aCkge1xuICAgICAgICB0aGlzJDEuZXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHsgY2IoZXJyKTsgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKGZhbHNlLCAndW5jYXVnaHQgZXJyb3IgZHVyaW5nIHJvdXRlIG5hdmlnYXRpb246Jyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb25BYm9ydCAmJiBvbkFib3J0KGVycik7XG4gIH07XG4gIGlmIChcbiAgICBpc1NhbWVSb3V0ZShyb3V0ZSwgY3VycmVudCkgJiZcbiAgICAvLyBpbiB0aGUgY2FzZSB0aGUgcm91dGUgbWFwIGhhcyBiZWVuIGR5bmFtaWNhbGx5IGFwcGVuZGVkIHRvXG4gICAgcm91dGUubWF0Y2hlZC5sZW5ndGggPT09IGN1cnJlbnQubWF0Y2hlZC5sZW5ndGhcbiAgKSB7XG4gICAgdGhpcy5lbnN1cmVVUkwoKTtcbiAgICByZXR1cm4gYWJvcnQoKVxuICB9XG5cbiAgdmFyIHJlZiA9IHJlc29sdmVRdWV1ZSh0aGlzLmN1cnJlbnQubWF0Y2hlZCwgcm91dGUubWF0Y2hlZCk7XG4gICAgdmFyIHVwZGF0ZWQgPSByZWYudXBkYXRlZDtcbiAgICB2YXIgZGVhY3RpdmF0ZWQgPSByZWYuZGVhY3RpdmF0ZWQ7XG4gICAgdmFyIGFjdGl2YXRlZCA9IHJlZi5hY3RpdmF0ZWQ7XG5cbiAgdmFyIHF1ZXVlID0gW10uY29uY2F0KFxuICAgIC8vIGluLWNvbXBvbmVudCBsZWF2ZSBndWFyZHNcbiAgICBleHRyYWN0TGVhdmVHdWFyZHMoZGVhY3RpdmF0ZWQpLFxuICAgIC8vIGdsb2JhbCBiZWZvcmUgaG9va3NcbiAgICB0aGlzLnJvdXRlci5iZWZvcmVIb29rcyxcbiAgICAvLyBpbi1jb21wb25lbnQgdXBkYXRlIGhvb2tzXG4gICAgZXh0cmFjdFVwZGF0ZUhvb2tzKHVwZGF0ZWQpLFxuICAgIC8vIGluLWNvbmZpZyBlbnRlciBndWFyZHNcbiAgICBhY3RpdmF0ZWQubWFwKGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLmJlZm9yZUVudGVyOyB9KSxcbiAgICAvLyBhc3luYyBjb21wb25lbnRzXG4gICAgcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyhhY3RpdmF0ZWQpXG4gICk7XG5cbiAgdGhpcy5wZW5kaW5nID0gcm91dGU7XG4gIHZhciBpdGVyYXRvciA9IGZ1bmN0aW9uIChob29rLCBuZXh0KSB7XG4gICAgaWYgKHRoaXMkMS5wZW5kaW5nICE9PSByb3V0ZSkge1xuICAgICAgcmV0dXJuIGFib3J0KClcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGhvb2socm91dGUsIGN1cnJlbnQsIGZ1bmN0aW9uICh0bykge1xuICAgICAgICBpZiAodG8gPT09IGZhbHNlIHx8IGlzRXJyb3IodG8pKSB7XG4gICAgICAgICAgLy8gbmV4dChmYWxzZSkgLT4gYWJvcnQgbmF2aWdhdGlvbiwgZW5zdXJlIGN1cnJlbnQgVVJMXG4gICAgICAgICAgdGhpcyQxLmVuc3VyZVVSTCh0cnVlKTtcbiAgICAgICAgICBhYm9ydCh0byk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIHRvID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmIChcbiAgICAgICAgICAgIHR5cGVvZiB0by5wYXRoID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZW9mIHRvLm5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbmV4dCgnLycpIG9yIG5leHQoeyBwYXRoOiAnLycgfSkgLT4gcmVkaXJlY3RcbiAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmIHRvLnJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRoaXMkMS5yZXBsYWNlKHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcyQxLnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25maXJtIHRyYW5zaXRpb24gYW5kIHBhc3Mgb24gdGhlIHZhbHVlXG4gICAgICAgICAgbmV4dCh0byk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFib3J0KGUpO1xuICAgIH1cbiAgfTtcblxuICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9zdEVudGVyQ2JzID0gW107XG4gICAgdmFyIGlzVmFsaWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuY3VycmVudCA9PT0gcm91dGU7IH07XG4gICAgLy8gd2FpdCB1bnRpbCBhc3luYyBjb21wb25lbnRzIGFyZSByZXNvbHZlZCBiZWZvcmVcbiAgICAvLyBleHRyYWN0aW5nIGluLWNvbXBvbmVudCBlbnRlciBndWFyZHNcbiAgICB2YXIgZW50ZXJHdWFyZHMgPSBleHRyYWN0RW50ZXJHdWFyZHMoYWN0aXZhdGVkLCBwb3N0RW50ZXJDYnMsIGlzVmFsaWQpO1xuICAgIHZhciBxdWV1ZSA9IGVudGVyR3VhcmRzLmNvbmNhdCh0aGlzJDEucm91dGVyLnJlc29sdmVIb29rcyk7XG4gICAgcnVuUXVldWUocXVldWUsIGl0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcyQxLnBlbmRpbmcgIT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBhYm9ydCgpXG4gICAgICB9XG4gICAgICB0aGlzJDEucGVuZGluZyA9IG51bGw7XG4gICAgICBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIGlmICh0aGlzJDEucm91dGVyLmFwcCkge1xuICAgICAgICB0aGlzJDEucm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBvc3RFbnRlckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikgeyBjYigpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudXBkYXRlUm91dGUgPSBmdW5jdGlvbiB1cGRhdGVSb3V0ZSAocm91dGUpIHtcbiAgdmFyIHByZXYgPSB0aGlzLmN1cnJlbnQ7XG4gIHRoaXMuY3VycmVudCA9IHJvdXRlO1xuICB0aGlzLmNiICYmIHRoaXMuY2Iocm91dGUpO1xuICB0aGlzLnJvdXRlci5hZnRlckhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICBob29rICYmIGhvb2socm91dGUsIHByZXYpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2UgKGJhc2UpIHtcbiAgaWYgKCFiYXNlKSB7XG4gICAgaWYgKGluQnJvd3Nlcikge1xuICAgICAgLy8gcmVzcGVjdCA8YmFzZT4gdGFnXG4gICAgICB2YXIgYmFzZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYmFzZScpO1xuICAgICAgYmFzZSA9IChiYXNlRWwgJiYgYmFzZUVsLmdldEF0dHJpYnV0ZSgnaHJlZicpKSB8fCAnLyc7XG4gICAgICAvLyBzdHJpcCBmdWxsIFVSTCBvcmlnaW5cbiAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoL15odHRwcz86XFwvXFwvW15cXC9dKy8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZSA9ICcvJztcbiAgICB9XG4gIH1cbiAgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgdGhlIHN0YXJ0aW5nIHNsYXNoXG4gIGlmIChiYXNlLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgYmFzZSA9ICcvJyArIGJhc2U7XG4gIH1cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIHJldHVybiBiYXNlLnJlcGxhY2UoL1xcLyQvLCAnJylcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXVlIChcbiAgY3VycmVudCxcbiAgbmV4dFxuKSB7XG4gIHZhciBpO1xuICB2YXIgbWF4ID0gTWF0aC5tYXgoY3VycmVudC5sZW5ndGgsIG5leHQubGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7XG4gICAgaWYgKGN1cnJlbnRbaV0gIT09IG5leHRbaV0pIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgdXBkYXRlZDogbmV4dC5zbGljZSgwLCBpKSxcbiAgICBhY3RpdmF0ZWQ6IG5leHQuc2xpY2UoaSksXG4gICAgZGVhY3RpdmF0ZWQ6IGN1cnJlbnQuc2xpY2UoaSlcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0R3VhcmRzIChcbiAgcmVjb3JkcyxcbiAgbmFtZSxcbiAgYmluZCxcbiAgcmV2ZXJzZVxuKSB7XG4gIHZhciBndWFyZHMgPSBmbGF0TWFwQ29tcG9uZW50cyhyZWNvcmRzLCBmdW5jdGlvbiAoZGVmLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSkge1xuICAgIHZhciBndWFyZCA9IGV4dHJhY3RHdWFyZChkZWYsIG5hbWUpO1xuICAgIGlmIChndWFyZCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ3VhcmQpXG4gICAgICAgID8gZ3VhcmQubWFwKGZ1bmN0aW9uIChndWFyZCkgeyByZXR1cm4gYmluZChndWFyZCwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpOyB9KVxuICAgICAgICA6IGJpbmQoZ3VhcmQsIGluc3RhbmNlLCBtYXRjaCwga2V5KVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbGF0dGVuKHJldmVyc2UgPyBndWFyZHMucmV2ZXJzZSgpIDogZ3VhcmRzKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0R3VhcmQgKFxuICBkZWYsXG4gIGtleVxuKSB7XG4gIGlmICh0eXBlb2YgZGVmICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZXh0ZW5kIG5vdyBzbyB0aGF0IGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQuXG4gICAgZGVmID0gX1Z1ZS5leHRlbmQoZGVmKTtcbiAgfVxuICByZXR1cm4gZGVmLm9wdGlvbnNba2V5XVxufVxuXG5mdW5jdGlvbiBleHRyYWN0TGVhdmVHdWFyZHMgKGRlYWN0aXZhdGVkKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKGRlYWN0aXZhdGVkLCAnYmVmb3JlUm91dGVMZWF2ZScsIGJpbmRHdWFyZCwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFVwZGF0ZUhvb2tzICh1cGRhdGVkKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKHVwZGF0ZWQsICdiZWZvcmVSb3V0ZVVwZGF0ZScsIGJpbmRHdWFyZClcbn1cblxuZnVuY3Rpb24gYmluZEd1YXJkIChndWFyZCwgaW5zdGFuY2UpIHtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kUm91dGVHdWFyZCAoKSB7XG4gICAgICByZXR1cm4gZ3VhcmQuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVudGVyR3VhcmRzIChcbiAgYWN0aXZhdGVkLFxuICBjYnMsXG4gIGlzVmFsaWRcbikge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhhY3RpdmF0ZWQsICdiZWZvcmVSb3V0ZUVudGVyJywgZnVuY3Rpb24gKGd1YXJkLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgcmV0dXJuIGJpbmRFbnRlckd1YXJkKGd1YXJkLCBtYXRjaCwga2V5LCBjYnMsIGlzVmFsaWQpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGJpbmRFbnRlckd1YXJkIChcbiAgZ3VhcmQsXG4gIG1hdGNoLFxuICBrZXksXG4gIGNicyxcbiAgaXNWYWxpZFxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiByb3V0ZUVudGVyR3VhcmQgKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgcmV0dXJuIGd1YXJkKHRvLCBmcm9tLCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgIG5leHQoY2IpO1xuICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYnMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gIzc1MFxuICAgICAgICAgIC8vIGlmIGEgcm91dGVyLXZpZXcgaXMgd3JhcHBlZCB3aXRoIGFuIG91dC1pbiB0cmFuc2l0aW9uLFxuICAgICAgICAgIC8vIHRoZSBpbnN0YW5jZSBtYXkgbm90IGhhdmUgYmVlbiByZWdpc3RlcmVkIGF0IHRoaXMgdGltZS5cbiAgICAgICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gcG9sbCBmb3IgcmVnaXN0cmF0aW9uIHVudGlsIGN1cnJlbnQgcm91dGVcbiAgICAgICAgICAvLyBpcyBubyBsb25nZXIgdmFsaWQuXG4gICAgICAgICAgcG9sbChjYiwgbWF0Y2guaW5zdGFuY2VzLCBrZXksIGlzVmFsaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvbGwgKFxuICBjYiwgLy8gc29tZWhvdyBmbG93IGNhbm5vdCBpbmZlciB0aGlzIGlzIGEgZnVuY3Rpb25cbiAgaW5zdGFuY2VzLFxuICBrZXksXG4gIGlzVmFsaWRcbikge1xuICBpZiAoaW5zdGFuY2VzW2tleV0pIHtcbiAgICBjYihpbnN0YW5jZXNba2V5XSk7XG4gIH0gZWxzZSBpZiAoaXNWYWxpZCgpKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBwb2xsKGNiLCBpbnN0YW5jZXMsIGtleSwgaXNWYWxpZCk7XG4gICAgfSwgMTYpO1xuICB9XG59XG5cbi8qICAqL1xuXG5cbnZhciBIVE1MNUhpc3RvcnkgPSAoZnVuY3Rpb24gKEhpc3RvcnkkJDEpIHtcbiAgZnVuY3Rpb24gSFRNTDVIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIEhpc3RvcnkkJDEuY2FsbCh0aGlzLCByb3V0ZXIsIGJhc2UpO1xuXG4gICAgdmFyIGV4cGVjdFNjcm9sbCA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuXG4gICAgaWYgKGV4cGVjdFNjcm9sbCkge1xuICAgICAgc2V0dXBTY3JvbGwoKTtcbiAgICB9XG5cbiAgICB2YXIgaW5pdExvY2F0aW9uID0gZ2V0TG9jYXRpb24odGhpcy5iYXNlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzJDEuY3VycmVudDtcblxuICAgICAgLy8gQXZvaWRpbmcgZmlyc3QgYHBvcHN0YXRlYCBldmVudCBkaXNwYXRjaGVkIGluIHNvbWUgYnJvd3NlcnMgYnV0IGZpcnN0XG4gICAgICAvLyBoaXN0b3J5IHJvdXRlIG5vdCB1cGRhdGVkIHNpbmNlIGFzeW5jIGd1YXJkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbih0aGlzJDEuYmFzZSk7XG4gICAgICBpZiAodGhpcyQxLmN1cnJlbnQgPT09IFNUQVJUICYmIGxvY2F0aW9uID09PSBpbml0TG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMkMS50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBpZiAoZXhwZWN0U2Nyb2xsKSB7XG4gICAgICAgICAgaGFuZGxlU2Nyb2xsKHJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSQkMSApIEhUTUw1SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5JCQxO1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSQkMSAmJiBIaXN0b3J5JCQxLnByb3RvdHlwZSApO1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSFRNTDVIaXN0b3J5O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcHVzaFN0YXRlKGNsZWFuUGF0aCh0aGlzJDEuYmFzZSArIHJvdXRlLmZ1bGxQYXRoKSk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHJlcGxhY2VTdGF0ZShjbGVhblBhdGgodGhpcyQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICBpZiAoZ2V0TG9jYXRpb24odGhpcy5iYXNlKSAhPT0gdGhpcy5jdXJyZW50LmZ1bGxQYXRoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGNsZWFuUGF0aCh0aGlzLmJhc2UgKyB0aGlzLmN1cnJlbnQuZnVsbFBhdGgpO1xuICAgICAgcHVzaCA/IHB1c2hTdGF0ZShjdXJyZW50KSA6IHJlcGxhY2VTdGF0ZShjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRMb2NhdGlvbih0aGlzLmJhc2UpXG4gIH07XG5cbiAgcmV0dXJuIEhUTUw1SGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBnZXRMb2NhdGlvbiAoYmFzZSkge1xuICB2YXIgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgaWYgKGJhc2UgJiYgcGF0aC5pbmRleE9mKGJhc2UpID09PSAwKSB7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoXG59XG5cbi8qICAqL1xuXG5cbnZhciBIYXNoSGlzdG9yeSA9IChmdW5jdGlvbiAoSGlzdG9yeSQkMSkge1xuICBmdW5jdGlvbiBIYXNoSGlzdG9yeSAocm91dGVyLCBiYXNlLCBmYWxsYmFjaykge1xuICAgIEhpc3RvcnkkJDEuY2FsbCh0aGlzLCByb3V0ZXIsIGJhc2UpO1xuICAgIC8vIGNoZWNrIGhpc3RvcnkgZmFsbGJhY2sgZGVlcGxpbmtpbmdcbiAgICBpZiAoZmFsbGJhY2sgJiYgY2hlY2tGYWxsYmFjayh0aGlzLmJhc2UpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW5zdXJlU2xhc2goKTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSQkMSApIEhhc2hIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3RvcnkkJDE7XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkkJDEgJiYgSGlzdG9yeSQkMS5wcm90b3R5cGUgKTtcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSGFzaEhpc3Rvcnk7XG5cbiAgLy8gdGhpcyBpcyBkZWxheWVkIHVudGlsIHRoZSBhcHAgbW91bnRzXG4gIC8vIHRvIGF2b2lkIHRoZSBoYXNoY2hhbmdlIGxpc3RlbmVyIGJlaW5nIGZpcmVkIHRvbyBlYXJseVxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuc2V0dXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXR1cExpc3RlbmVycyAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XG4gICAgdmFyIGV4cGVjdFNjcm9sbCA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgc2V0dXBTY3JvbGwoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihzdXBwb3J0c1B1c2hTdGF0ZSA/ICdwb3BzdGF0ZScgOiAnaGFzaGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcyQxLmN1cnJlbnQ7XG4gICAgICBpZiAoIWVuc3VyZVNsYXNoKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzJDEudHJhbnNpdGlvblRvKGdldEhhc2goKSwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgY3VycmVudCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHB1c2hIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudC5mdWxsUGF0aDtcbiAgICBpZiAoZ2V0SGFzaCgpICE9PSBjdXJyZW50KSB7XG4gICAgICBwdXNoID8gcHVzaEhhc2goY3VycmVudCkgOiByZXBsYWNlSGFzaChjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEhhc2goKVxuICB9O1xuXG4gIHJldHVybiBIYXNoSGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBjaGVja0ZhbGxiYWNrIChiYXNlKSB7XG4gIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKGJhc2UpO1xuICBpZiAoIS9eXFwvIy8udGVzdChsb2NhdGlvbikpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShcbiAgICAgIGNsZWFuUGF0aChiYXNlICsgJy8jJyArIGxvY2F0aW9uKVxuICAgICk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVTbGFzaCAoKSB7XG4gIHZhciBwYXRoID0gZ2V0SGFzaCgpO1xuICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmVwbGFjZUhhc2goJy8nICsgcGF0aCk7XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBnZXRIYXNoICgpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGhlcmUgYmVjYXVzZSBpdCdzIG5vdFxuICAvLyBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VycyAtIEZpcmVmb3ggd2lsbCBwcmUtZGVjb2RlIGl0IVxuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGluZGV4ID09PSAtMSA/ICcnIDogaHJlZi5zbGljZShpbmRleCArIDEpXG59XG5cbmZ1bmN0aW9uIGdldFVybCAocGF0aCkge1xuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaSA9IGhyZWYuaW5kZXhPZignIycpO1xuICB2YXIgYmFzZSA9IGkgPj0gMCA/IGhyZWYuc2xpY2UoMCwgaSkgOiBocmVmO1xuICByZXR1cm4gKGJhc2UgKyBcIiNcIiArIHBhdGgpXG59XG5cbmZ1bmN0aW9uIHB1c2hIYXNoIChwYXRoKSB7XG4gIGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgIHB1c2hTdGF0ZShnZXRVcmwocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGF0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYWNlSGFzaCAocGF0aCkge1xuICBpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICByZXBsYWNlU3RhdGUoZ2V0VXJsKHBhdGgpKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShnZXRVcmwocGF0aCkpO1xuICB9XG59XG5cbi8qICAqL1xuXG5cbnZhciBBYnN0cmFjdEhpc3RvcnkgPSAoZnVuY3Rpb24gKEhpc3RvcnkkJDEpIHtcbiAgZnVuY3Rpb24gQWJzdHJhY3RIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgICBIaXN0b3J5JCQxLmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICB0aGlzLnN0YWNrID0gW107XG4gICAgdGhpcy5pbmRleCA9IC0xO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5JCQxICkgQWJzdHJhY3RIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3RvcnkkJDE7XG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5JCQxICYmIEhpc3RvcnkkJDEucHJvdG90eXBlICk7XG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEhpc3Rvcnk7XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHRoaXMkMS5zdGFjayA9IHRoaXMkMS5zdGFjay5zbGljZSgwLCB0aGlzJDEuaW5kZXggKyAxKS5jb25jYXQocm91dGUpO1xuICAgICAgdGhpcyQxLmluZGV4Kys7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4KS5jb25jYXQocm91dGUpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuaW5kZXggKyBuO1xuICAgIGlmICh0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gdGhpcy5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcm91dGUgPSB0aGlzLnN0YWNrW3RhcmdldEluZGV4XTtcbiAgICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKHJvdXRlLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEuaW5kZXggPSB0YXJnZXRJbmRleDtcbiAgICAgIHRoaXMkMS51cGRhdGVSb3V0ZShyb3V0ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBjdXJyZW50ID8gY3VycmVudC5mdWxsUGF0aCA6ICcvJ1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMICgpIHtcbiAgICAvLyBub29wXG4gIH07XG5cbiAgcmV0dXJuIEFic3RyYWN0SGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG4vKiAgKi9cblxudmFyIFZ1ZVJvdXRlciA9IGZ1bmN0aW9uIFZ1ZVJvdXRlciAob3B0aW9ucykge1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICB0aGlzLmFwcCA9IG51bGw7XG4gIHRoaXMuYXBwcyA9IFtdO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLmJlZm9yZUhvb2tzID0gW107XG4gIHRoaXMucmVzb2x2ZUhvb2tzID0gW107XG4gIHRoaXMuYWZ0ZXJIb29rcyA9IFtdO1xuICB0aGlzLm1hdGNoZXIgPSBjcmVhdGVNYXRjaGVyKG9wdGlvbnMucm91dGVzIHx8IFtdLCB0aGlzKTtcblxuICB2YXIgbW9kZSA9IG9wdGlvbnMubW9kZSB8fCAnaGFzaCc7XG4gIHRoaXMuZmFsbGJhY2sgPSBtb2RlID09PSAnaGlzdG9yeScgJiYgIXN1cHBvcnRzUHVzaFN0YXRlICYmIG9wdGlvbnMuZmFsbGJhY2sgIT09IGZhbHNlO1xuICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgIG1vZGUgPSAnaGFzaCc7XG4gIH1cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICBtb2RlID0gJ2Fic3RyYWN0JztcbiAgfVxuICB0aGlzLm1vZGUgPSBtb2RlO1xuXG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ2hpc3RvcnknOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhUTUw1SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdoYXNoJzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIYXNoSGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UsIHRoaXMuZmFsbGJhY2spO1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdhYnN0cmFjdCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgQWJzdHJhY3RIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSk7XG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQoZmFsc2UsIChcImludmFsaWQgbW9kZTogXCIgKyBtb2RlKSk7XG4gICAgICB9XG4gIH1cbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGN1cnJlbnRSb3V0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gbWF0Y2ggKFxuICByYXcsXG4gIGN1cnJlbnQsXG4gIHJlZGlyZWN0ZWRGcm9tXG4pIHtcbiAgcmV0dXJuIHRoaXMubWF0Y2hlci5tYXRjaChyYXcsIGN1cnJlbnQsIHJlZGlyZWN0ZWRGcm9tKVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmN1cnJlbnRSb3V0ZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhpc3RvcnkgJiYgdGhpcy5oaXN0b3J5LmN1cnJlbnRcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIGluaXQgKGFwcCAvKiBWdWUgY29tcG9uZW50IGluc3RhbmNlICovKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnQoXG4gICAgaW5zdGFsbC5pbnN0YWxsZWQsXG4gICAgXCJub3QgaW5zdGFsbGVkLiBNYWtlIHN1cmUgdG8gY2FsbCBgVnVlLnVzZShWdWVSb3V0ZXIpYCBcIiArXG4gICAgXCJiZWZvcmUgY3JlYXRpbmcgcm9vdCBpbnN0YW5jZS5cIlxuICApO1xuXG4gIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG5cbiAgLy8gbWFpbiBhcHAgYWxyZWFkeSBpbml0aWFsaXplZC5cbiAgaWYgKHRoaXMuYXBwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB0aGlzLmFwcCA9IGFwcDtcblxuICB2YXIgaGlzdG9yeSA9IHRoaXMuaGlzdG9yeTtcblxuICBpZiAoaGlzdG9yeSBpbnN0YW5jZW9mIEhUTUw1SGlzdG9yeSkge1xuICAgIGhpc3RvcnkudHJhbnNpdGlvblRvKGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCkpO1xuICB9IGVsc2UgaWYgKGhpc3RvcnkgaW5zdGFuY2VvZiBIYXNoSGlzdG9yeSkge1xuICAgIHZhciBzZXR1cEhhc2hMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGhpc3Rvcnkuc2V0dXBMaXN0ZW5lcnMoKTtcbiAgICB9O1xuICAgIGhpc3RvcnkudHJhbnNpdGlvblRvKFxuICAgICAgaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSxcbiAgICAgIHNldHVwSGFzaExpc3RlbmVyLFxuICAgICAgc2V0dXBIYXNoTGlzdGVuZXJcbiAgICApO1xuICB9XG5cbiAgaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgdGhpcyQxLmFwcHMuZm9yRWFjaChmdW5jdGlvbiAoYXBwKSB7XG4gICAgICBhcHAuX3JvdXRlID0gcm91dGU7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iZWZvcmVFYWNoID0gZnVuY3Rpb24gYmVmb3JlRWFjaCAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLmJlZm9yZUhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmVmb3JlUmVzb2x2ZSA9IGZ1bmN0aW9uIGJlZm9yZVJlc29sdmUgKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5yZXNvbHZlSG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZnRlckVhY2ggPSBmdW5jdGlvbiBhZnRlckVhY2ggKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5hZnRlckhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUub25SZWFkeSA9IGZ1bmN0aW9uIG9uUmVhZHkgKGNiLCBlcnJvckNiKSB7XG4gIHRoaXMuaGlzdG9yeS5vblJlYWR5KGNiLCBlcnJvckNiKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5oaXN0b3J5Lm9uRXJyb3IoZXJyb3JDYik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICB0aGlzLmhpc3RvcnkucHVzaChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICB0aGlzLmhpc3RvcnkucmVwbGFjZShsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgdGhpcy5oaXN0b3J5LmdvKG4pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gYmFjayAoKSB7XG4gIHRoaXMuZ28oLTEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gZm9yd2FyZCAoKSB7XG4gIHRoaXMuZ28oMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldE1hdGNoZWRDb21wb25lbnRzID0gZnVuY3Rpb24gZ2V0TWF0Y2hlZENvbXBvbmVudHMgKHRvKSB7XG4gIHZhciByb3V0ZSA9IHRvXG4gICAgPyB0by5tYXRjaGVkXG4gICAgICA/IHRvXG4gICAgICA6IHRoaXMucmVzb2x2ZSh0bykucm91dGVcbiAgICA6IHRoaXMuY3VycmVudFJvdXRlO1xuICBpZiAoIXJvdXRlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgcm91dGUubWF0Y2hlZC5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobS5jb21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIG0uY29tcG9uZW50c1trZXldXG4gICAgfSlcbiAgfSkpXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlIChcbiAgdG8sXG4gIGN1cnJlbnQsXG4gIGFwcGVuZFxuKSB7XG4gIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKFxuICAgIHRvLFxuICAgIGN1cnJlbnQgfHwgdGhpcy5oaXN0b3J5LmN1cnJlbnQsXG4gICAgYXBwZW5kLFxuICAgIHRoaXNcbiAgKTtcbiAgdmFyIHJvdXRlID0gdGhpcy5tYXRjaChsb2NhdGlvbiwgY3VycmVudCk7XG4gIHZhciBmdWxsUGF0aCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tIHx8IHJvdXRlLmZ1bGxQYXRoO1xuICB2YXIgYmFzZSA9IHRoaXMuaGlzdG9yeS5iYXNlO1xuICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYoYmFzZSwgZnVsbFBhdGgsIHRoaXMubW9kZSk7XG4gIHJldHVybiB7XG4gICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgIHJvdXRlOiByb3V0ZSxcbiAgICBocmVmOiBocmVmLFxuICAgIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgbm9ybWFsaXplZFRvOiBsb2NhdGlvbixcbiAgICByZXNvbHZlZDogcm91dGVcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZGRSb3V0ZXMgPSBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICB0aGlzLm1hdGNoZXIuYWRkUm91dGVzKHJvdXRlcyk7XG4gIGlmICh0aGlzLmhpc3RvcnkuY3VycmVudCAhPT0gU1RBUlQpIHtcbiAgICB0aGlzLmhpc3RvcnkudHJhbnNpdGlvblRvKHRoaXMuaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gIH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWdWVSb3V0ZXIucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJIb29rIChsaXN0LCBmbikge1xuICBsaXN0LnB1c2goZm4pO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gbGlzdC5pbmRleE9mKGZuKTtcbiAgICBpZiAoaSA+IC0xKSB7IGxpc3Quc3BsaWNlKGksIDEpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSHJlZiAoYmFzZSwgZnVsbFBhdGgsIG1vZGUpIHtcbiAgdmFyIHBhdGggPSBtb2RlID09PSAnaGFzaCcgPyAnIycgKyBmdWxsUGF0aCA6IGZ1bGxQYXRoO1xuICByZXR1cm4gYmFzZSA/IGNsZWFuUGF0aChiYXNlICsgJy8nICsgcGF0aCkgOiBwYXRoXG59XG5cblZ1ZVJvdXRlci5pbnN0YWxsID0gaW5zdGFsbDtcblZ1ZVJvdXRlci52ZXJzaW9uID0gJzIuOC4xJztcblxuaWYgKGluQnJvd3NlciAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKFZ1ZVJvdXRlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZVJvdXRlcjtcbiIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiMDAzZTI4ZGNcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD02YTljNjA5NCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcImEyNDRmYjUwXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmE5YzYwOTQmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmE5YzYwOTQmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RyYW5zbGF0aW9uLWlucHV0LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNlMWE1MDcwJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiNTgwY2I1YTRcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zZTFhNTA3MCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90cmFuc2xhdGlvbi1pbnB1dC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zZTFhNTA3MCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI0NWM5OTc0YlwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1tb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0xN2JhMmI0ZSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjMxMGU1YTZlXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MTdiYTJiNGUmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbW9kYWwudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MTdiYTJiNGUmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKipcbiAqIFRyYW5zbGF0ZXMgdGhlIGxpc3QgZm9ybWF0IHByb2R1Y2VkIGJ5IGNzcy1sb2FkZXIgaW50byBzb21ldGhpbmdcbiAqIGVhc2llciB0byBtYW5pcHVsYXRlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuIiwiLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuICBNb2RpZmllZCBieSBFdmFuIFlvdSBAeXl4OTkwODAzXG4qL1xuXG5pbXBvcnQgbGlzdFRvU3R5bGVzIGZyb20gJy4vbGlzdFRvU3R5bGVzJ1xuXG52YXIgaGFzRG9jdW1lbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG5cbmlmICh0eXBlb2YgREVCVUcgIT09ICd1bmRlZmluZWQnICYmIERFQlVHKSB7XG4gIGlmICghaGFzRG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3Z1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gJyArXG4gICAgXCJVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiXG4gICkgfVxufVxuXG4vKlxudHlwZSBTdHlsZU9iamVjdCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgcGFydHM6IEFycmF5PFN0eWxlT2JqZWN0UGFydD5cbn1cblxudHlwZSBTdHlsZU9iamVjdFBhcnQgPSB7XG4gIGNzczogc3RyaW5nO1xuICBtZWRpYTogc3RyaW5nO1xuICBzb3VyY2VNYXA6ID9zdHJpbmdcbn1cbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHsvKlxuICBbaWQ6IG51bWJlcl06IHtcbiAgICBpZDogbnVtYmVyLFxuICAgIHJlZnM6IG51bWJlcixcbiAgICBwYXJ0czogQXJyYXk8KG9iaj86IFN0eWxlT2JqZWN0UGFydCkgPT4gdm9pZD5cbiAgfVxuKi99XG5cbnZhciBoZWFkID0gaGFzRG9jdW1lbnQgJiYgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSlcbnZhciBzaW5nbGV0b25FbGVtZW50ID0gbnVsbFxudmFyIHNpbmdsZXRvbkNvdW50ZXIgPSAwXG52YXIgaXNQcm9kdWN0aW9uID0gZmFsc2VcbnZhciBub29wID0gZnVuY3Rpb24gKCkge31cbnZhciBvcHRpb25zID0gbnVsbFxudmFyIHNzcklkS2V5ID0gJ2RhdGEtdnVlLXNzci1pZCdcblxuLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4vLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG52YXIgaXNPbGRJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9tc2llIFs2LTldXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkU3R5bGVzQ2xpZW50IChwYXJlbnRJZCwgbGlzdCwgX2lzUHJvZHVjdGlvbiwgX29wdGlvbnMpIHtcbiAgaXNQcm9kdWN0aW9uID0gX2lzUHJvZHVjdGlvblxuXG4gIG9wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fVxuXG4gIHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIGxpc3QpXG4gIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG4gICAgdmFyIG1heVJlbW92ZSA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgICAgZG9tU3R5bGUucmVmcy0tXG4gICAgICBtYXlSZW1vdmUucHVzaChkb21TdHlsZSlcbiAgICB9XG4gICAgaWYgKG5ld0xpc3QpIHtcbiAgICAgIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbmV3TGlzdClcbiAgICAgIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzID0gW11cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXVxuICAgICAgaWYgKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKClcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMgLyogQXJyYXk8U3R5bGVPYmplY3Q+ICovKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgIGlmIChkb21TdHlsZSkge1xuICAgICAgZG9tU3R5bGUucmVmcysrXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pXG4gICAgICB9XG4gICAgICBmb3IgKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIGlmIChkb21TdHlsZS5wYXJ0cy5sZW5ndGggPiBpdGVtLnBhcnRzLmxlbmd0aCkge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5sZW5ndGggPSBpdGVtLnBhcnRzLmxlbmd0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFydHMgPSBbXVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHsgaWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0cyB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAoKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gIHN0eWxlRWxlbWVudC50eXBlID0gJ3RleHQvY3NzJ1xuICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudClcbiAgcmV0dXJuIHN0eWxlRWxlbWVudFxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICB2YXIgdXBkYXRlLCByZW1vdmVcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlWycgKyBzc3JJZEtleSArICd+PVwiJyArIG9iai5pZCArICdcIl0nKVxuXG4gIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBhbmQgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgLy8gc2ltcGx5IGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbm9vcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBidXQgaW4gZGV2IG1vZGUuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24gQ2hyb21lIGNhbid0IGhhbmRsZSBzb3VyY2UgbWFwIGluIHNlcnZlci1yZW5kZXJlZFxuICAgICAgLy8gc3R5bGUgdGFncyAtIHNvdXJjZSBtYXBzIGluIDxzdHlsZT4gb25seSB3b3JrcyBpZiB0aGUgc3R5bGUgdGFnIGlzXG4gICAgICAvLyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBkeW5hbWljYWxseS4gU28gd2UgcmVtb3ZlIHRoZSBzZXJ2ZXIgcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlcyBhbmQgaW5qZWN0IG5ldyBvbmVzLlxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc09sZElFKSB7XG4gICAgLy8gdXNlIHNpbmdsZXRvbiBtb2RlIGZvciBJRTkuXG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKytcbiAgICBzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KCkpXG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgZmFsc2UpXG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgdHJ1ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbXVsdGktc3R5bGUtdGFnIG1vZGUgaW4gYWxsIG90aGVyIGNhc2VzXG4gICAgc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KClcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50KVxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICB1cGRhdGUob2JqKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG4gICAgICAgICAgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcbiAgICAgICAgICBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iailcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnRcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKVxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlRWxlbWVudCwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5jc3NcblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcylcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcylcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY3NzTm9kZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGVFbGVtZW50LCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3NcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwXG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSlcbiAgfVxuICBpZiAob3B0aW9ucy5zc3JJZCkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3NySWRLZXksIG9iai5pZClcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXApIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RldnRvb2xzL2RvY3MvamF2YXNjcmlwdC1kZWJ1Z2dpbmdcbiAgICAvLyB0aGlzIG1ha2VzIHNvdXJjZSBtYXBzIGluc2lkZSBzdHlsZSB0YWdzIHdvcmsgcHJvcGVybHkgaW4gQ2hyb21lXG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlVVJMPScgKyBzb3VyY2VNYXAuc291cmNlc1swXSArICcgKi8nXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJyArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyAnICovJ1xuICB9XG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKVxuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSlcbiAgfVxufVxuIiwiaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3Z1ZS5jb21tb24ucHJvZC5qcycpXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vdnVlLmNvbW1vbi5kZXYuanMnKVxufVxuIiwiLyohXG4gKiBWdWUuanMgdjIuNi4xMlxuICogKGMpIDIwMTQtMjAyMCBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cInVzZSBzdHJpY3RcIjt2YXIgZT1PYmplY3QuZnJlZXplKHt9KTtmdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT1lfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIG51bGwhPWV9ZnVuY3Rpb24gcihlKXtyZXR1cm4hMD09PWV9ZnVuY3Rpb24gaShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGV8fFwic3ltYm9sXCI9PXR5cGVvZiBlfHxcImJvb2xlYW5cIj09dHlwZW9mIGV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gcyhlKXtyZXR1cm5cIltvYmplY3QgT2JqZWN0XVwiPT09YS5jYWxsKGUpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9cGFyc2VGbG9hdChTdHJpbmcoZSkpO3JldHVybiB0Pj0wJiZNYXRoLmZsb29yKHQpPT09dCYmaXNGaW5pdGUoZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gbihlKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNhdGNofWZ1bmN0aW9uIGwoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpBcnJheS5pc0FycmF5KGUpfHxzKGUpJiZlLnRvU3RyaW5nPT09YT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoXCIsXCIpLGk9MDtpPHIubGVuZ3RoO2krKyluW3JbaV1dPSEwO3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV19OmZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfX12YXIgZD1wKFwic2xvdCxjb21wb25lbnRcIiwhMCksdj1wKFwia2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXNcIik7ZnVuY3Rpb24gaChlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYobj4tMSlyZXR1cm4gZS5zcGxpY2UobiwxKX19dmFyIG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5KGUsdCl7cmV0dXJuIG0uY2FsbChlLHQpfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbbl18fCh0W25dPWUobikpfX12YXIgXz0vLShcXHcpL2csYj1nKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoXyxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKTpcIlwifSl9KSwkPWcoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLHc9L1xcQihbQS1aXSkvZyxDPWcoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSh3LFwiLSQxXCIpLnRvTG93ZXJDYXNlKCl9KTt2YXIgeD1GdW5jdGlvbi5wcm90b3R5cGUuYmluZD9mdW5jdGlvbihlLHQpe3JldHVybiBlLmJpbmQodCl9OmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByP3I+MT9lLmFwcGx5KHQsYXJndW1lbnRzKTplLmNhbGwodCxuKTplLmNhbGwodCl9cmV0dXJuIG4uX2xlbmd0aD1lLmxlbmd0aCxufTtmdW5jdGlvbiBrKGUsdCl7dD10fHwwO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9bmV3IEFycmF5KG4pO24tLTspcltuXT1lW24rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gQShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBPKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmQSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIFMoZSx0LG4pe312YXIgVD1mdW5jdGlvbihlLHQsbil7cmV0dXJuITF9LEU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIE4oZSx0KXtpZihlPT09dClyZXR1cm4hMDt2YXIgbj1vKGUpLHI9byh0KTtpZighbnx8IXIpcmV0dXJuIW4mJiFyJiZTdHJpbmcoZSk9PT1TdHJpbmcodCk7dHJ5e3ZhciBpPUFycmF5LmlzQXJyYXkoZSksYT1BcnJheS5pc0FycmF5KHQpO2lmKGkmJmEpcmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGgmJmUuZXZlcnkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gTihlLHRbbl0pfSk7aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldFRpbWUoKT09PXQuZ2V0VGltZSgpO2lmKGl8fGEpcmV0dXJuITE7dmFyIHM9T2JqZWN0LmtleXMoZSksYz1PYmplY3Qua2V5cyh0KTtyZXR1cm4gcy5sZW5ndGg9PT1jLmxlbmd0aCYmcy5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gTihlW25dLHRbbl0pfSl9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGooZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihOKGVbbl0sdCkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gRChlKXt2YXIgdD0hMTtyZXR1cm4gZnVuY3Rpb24oKXt0fHwodD0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXZhciBMPVwiZGF0YS1zZXJ2ZXItcmVuZGVyZWRcIixNPVtcImNvbXBvbmVudFwiLFwiZGlyZWN0aXZlXCIsXCJmaWx0ZXJcIl0sST1bXCJiZWZvcmVDcmVhdGVcIixcImNyZWF0ZWRcIixcImJlZm9yZU1vdW50XCIsXCJtb3VudGVkXCIsXCJiZWZvcmVVcGRhdGVcIixcInVwZGF0ZWRcIixcImJlZm9yZURlc3Ryb3lcIixcImRlc3Ryb3llZFwiLFwiYWN0aXZhdGVkXCIsXCJkZWFjdGl2YXRlZFwiLFwiZXJyb3JDYXB0dXJlZFwiLFwic2VydmVyUHJlZmV0Y2hcIl0sRj17b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOk9iamVjdC5jcmVhdGUobnVsbCksc2lsZW50OiExLHByb2R1Y3Rpb25UaXA6ITEsZGV2dG9vbHM6ITEscGVyZm9ybWFuY2U6ITEsZXJyb3JIYW5kbGVyOm51bGwsd2FybkhhbmRsZXI6bnVsbCxpZ25vcmVkRWxlbWVudHM6W10sa2V5Q29kZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxpc1Jlc2VydmVkVGFnOlQsaXNSZXNlcnZlZEF0dHI6VCxpc1Vua25vd25FbGVtZW50OlQsZ2V0VGFnTmFtZXNwYWNlOlMscGFyc2VQbGF0Zm9ybVRhZ05hbWU6RSxtdXN0VXNlUHJvcDpULGFzeW5jOiEwLF9saWZlY3ljbGVIb29rczpJfSxQPS9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztmdW5jdGlvbiBSKGUsdCxuLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohIXIsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9dmFyIEg9bmV3IFJlZ0V4cChcIlteXCIrUC5zb3VyY2UrXCIuJF9cXFxcZF1cIik7dmFyIEIsVT1cIl9fcHJvdG9fX1wiaW57fSx6PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csVj1cInVuZGVmaW5lZFwiIT10eXBlb2YgV1hFbnZpcm9ubWVudCYmISFXWEVudmlyb25tZW50LnBsYXRmb3JtLEs9ViYmV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpLEo9eiYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxxPUomJi9tc2llfHRyaWRlbnQvLnRlc3QoSiksVz1KJiZKLmluZGV4T2YoXCJtc2llIDkuMFwiKT4wLFo9SiYmSi5pbmRleE9mKFwiZWRnZS9cIik+MCxHPShKJiZKLmluZGV4T2YoXCJhbmRyb2lkXCIpLEomJi9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChKKXx8XCJpb3NcIj09PUspLFg9KEomJi9jaHJvbWVcXC9cXGQrLy50ZXN0KEopLEomJi9waGFudG9tanMvLnRlc3QoSiksSiYmSi5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pKSxZPXt9LndhdGNoLFE9ITE7aWYoeil0cnl7dmFyIGVlPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlZSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7UT0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3QtcGFzc2l2ZVwiLG51bGwsZWUpfWNhdGNoKGUpe312YXIgdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09QiYmKEI9IXomJiFWJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsJiYoZ2xvYmFsLnByb2Nlc3MmJlwic2VydmVyXCI9PT1nbG9iYWwucHJvY2Vzcy5lbnYuVlVFX0VOVikpLEJ9LG5lPXomJndpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO2Z1bmN0aW9uIHJlKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJi9uYXRpdmUgY29kZS8udGVzdChlLnRvU3RyaW5nKCkpfXZhciBpZSxvZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZyZShTeW1ib2wpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUmVmbGVjdCYmcmUoUmVmbGVjdC5vd25LZXlzKTtpZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU2V0JiZyZShTZXQpP1NldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnNldD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT10aGlzLnNldFtlXX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2V0W2VdPSEwfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9LGV9KCk7dmFyIGFlPVMsc2U9MCxjZT1mdW5jdGlvbigpe3RoaXMuaWQ9c2UrKyx0aGlzLnN1YnM9W119O2NlLnByb3RvdHlwZS5hZGRTdWI9ZnVuY3Rpb24oZSl7dGhpcy5zdWJzLnB1c2goZSl9LGNlLnByb3RvdHlwZS5yZW1vdmVTdWI9ZnVuY3Rpb24oZSl7aCh0aGlzLnN1YnMsZSl9LGNlLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oKXtjZS50YXJnZXQmJmNlLnRhcmdldC5hZGREZXAodGhpcyl9LGNlLnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5zdWJzLnNsaWNlKCksdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnVwZGF0ZSgpfSxjZS50YXJnZXQ9bnVsbDt2YXIgdWU9W107ZnVuY3Rpb24gbGUoZSl7dWUucHVzaChlKSxjZS50YXJnZXQ9ZX1mdW5jdGlvbiBmZSgpe3VlLnBvcCgpLGNlLnRhcmdldD11ZVt1ZS5sZW5ndGgtMV19dmFyIHBlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dGhpcy50YWc9ZSx0aGlzLmRhdGE9dCx0aGlzLmNoaWxkcmVuPW4sdGhpcy50ZXh0PXIsdGhpcy5lbG09aSx0aGlzLm5zPXZvaWQgMCx0aGlzLmNvbnRleHQ9byx0aGlzLmZuQ29udGV4dD12b2lkIDAsdGhpcy5mbk9wdGlvbnM9dm9pZCAwLHRoaXMuZm5TY29wZUlkPXZvaWQgMCx0aGlzLmtleT10JiZ0LmtleSx0aGlzLmNvbXBvbmVudE9wdGlvbnM9YSx0aGlzLmNvbXBvbmVudEluc3RhbmNlPXZvaWQgMCx0aGlzLnBhcmVudD12b2lkIDAsdGhpcy5yYXc9ITEsdGhpcy5pc1N0YXRpYz0hMSx0aGlzLmlzUm9vdEluc2VydD0hMCx0aGlzLmlzQ29tbWVudD0hMSx0aGlzLmlzQ2xvbmVkPSExLHRoaXMuaXNPbmNlPSExLHRoaXMuYXN5bmNGYWN0b3J5PXMsdGhpcy5hc3luY01ldGE9dm9pZCAwLHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyPSExfSxkZT17Y2hpbGQ6e2NvbmZpZ3VyYWJsZTohMH19O2RlLmNoaWxkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwZS5wcm90b3R5cGUsZGUpO3ZhciB2ZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1cIlwiKTt2YXIgdD1uZXcgcGU7cmV0dXJuIHQudGV4dD1lLHQuaXNDb21tZW50PSEwLHR9O2Z1bmN0aW9uIGhlKGUpe3JldHVybiBuZXcgcGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsU3RyaW5nKGUpKX1mdW5jdGlvbiBtZShlKXt2YXIgdD1uZXcgcGUoZS50YWcsZS5kYXRhLGUuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc2xpY2UoKSxlLnRleHQsZS5lbG0sZS5jb250ZXh0LGUuY29tcG9uZW50T3B0aW9ucyxlLmFzeW5jRmFjdG9yeSk7cmV0dXJuIHQubnM9ZS5ucyx0LmlzU3RhdGljPWUuaXNTdGF0aWMsdC5rZXk9ZS5rZXksdC5pc0NvbW1lbnQ9ZS5pc0NvbW1lbnQsdC5mbkNvbnRleHQ9ZS5mbkNvbnRleHQsdC5mbk9wdGlvbnM9ZS5mbk9wdGlvbnMsdC5mblNjb3BlSWQ9ZS5mblNjb3BlSWQsdC5hc3luY01ldGE9ZS5hc3luY01ldGEsdC5pc0Nsb25lZD0hMCx0fXZhciB5ZT1BcnJheS5wcm90b3R5cGUsZ2U9T2JqZWN0LmNyZWF0ZSh5ZSk7W1wicHVzaFwiLFwicG9wXCIsXCJzaGlmdFwiLFwidW5zaGlmdFwiLFwic3BsaWNlXCIsXCJzb3J0XCIsXCJyZXZlcnNlXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9eWVbZV07UihnZSxlLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KW5bcl09YXJndW1lbnRzW3JdO3ZhciBpLG89dC5hcHBseSh0aGlzLG4pLGE9dGhpcy5fX29iX187c3dpdGNoKGUpe2Nhc2VcInB1c2hcIjpjYXNlXCJ1bnNoaWZ0XCI6aT1uO2JyZWFrO2Nhc2VcInNwbGljZVwiOmk9bi5zbGljZSgyKX1yZXR1cm4gaSYmYS5vYnNlcnZlQXJyYXkoaSksYS5kZXAubm90aWZ5KCksb30pfSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGdlKSxiZT0hMDtmdW5jdGlvbiAkZShlKXtiZT1lfXZhciB3ZT1mdW5jdGlvbihlKXt2YXIgdDt0aGlzLnZhbHVlPWUsdGhpcy5kZXA9bmV3IGNlLHRoaXMudm1Db3VudD0wLFIoZSxcIl9fb2JfX1wiLHRoaXMpLEFycmF5LmlzQXJyYXkoZSk/KFU/KHQ9Z2UsZS5fX3Byb3RvX189dCk6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wLGk9bi5sZW5ndGg7cjxpO3IrKyl7dmFyIG89bltyXTtSKGUsbyx0W29dKX19KGUsZ2UsX2UpLHRoaXMub2JzZXJ2ZUFycmF5KGUpKTp0aGlzLndhbGsoZSl9O2Z1bmN0aW9uIENlKGUsdCl7dmFyIG47aWYobyhlKSYmIShlIGluc3RhbmNlb2YgcGUpKXJldHVybiB5KGUsXCJfX29iX19cIikmJmUuX19vYl9fIGluc3RhbmNlb2Ygd2U/bj1lLl9fb2JfXzpiZSYmIXRlKCkmJihBcnJheS5pc0FycmF5KGUpfHxzKGUpKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmIWUuX2lzVnVlJiYobj1uZXcgd2UoZSkpLHQmJm4mJm4udm1Db3VudCsrLG59ZnVuY3Rpb24geGUoZSx0LG4scixpKXt2YXIgbz1uZXcgY2UsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCk7aWYoIWF8fCExIT09YS5jb25maWd1cmFibGUpe3ZhciBzPWEmJmEuZ2V0LGM9YSYmYS5zZXQ7cyYmIWN8fDIhPT1hcmd1bWVudHMubGVuZ3RofHwobj1lW3RdKTt2YXIgdT0haSYmQ2Uobik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9cz9zLmNhbGwoZSk6bjtyZXR1cm4gY2UudGFyZ2V0JiYoby5kZXBlbmQoKSx1JiYodS5kZXAuZGVwZW5kKCksQXJyYXkuaXNBcnJheSh0KSYmZnVuY3Rpb24gZSh0KXtmb3IodmFyIG49dm9pZCAwLHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspKG49dFtyXSkmJm4uX19vYl9fJiZuLl9fb2JfXy5kZXAuZGVwZW5kKCksQXJyYXkuaXNBcnJheShuKSYmZShuKX0odCkpKSx0fSxzZXQ6ZnVuY3Rpb24odCl7dmFyIHI9cz9zLmNhbGwoZSk6bjt0PT09cnx8dCE9dCYmciE9cnx8cyYmIWN8fChjP2MuY2FsbChlLHQpOm49dCx1PSFpJiZDZSh0KSxvLm5vdGlmeSgpKX19KX19ZnVuY3Rpb24ga2UoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkmJmModCkpcmV0dXJuIGUubGVuZ3RoPU1hdGgubWF4KGUubGVuZ3RoLHQpLGUuc3BsaWNlKHQsMSxuKSxuO2lmKHQgaW4gZSYmISh0IGluIE9iamVjdC5wcm90b3R5cGUpKXJldHVybiBlW3RdPW4sbjt2YXIgcj1lLl9fb2JfXztyZXR1cm4gZS5faXNWdWV8fHImJnIudm1Db3VudD9uOnI/KHhlKHIudmFsdWUsdCxuKSxyLmRlcC5ub3RpZnkoKSxuKTooZVt0XT1uLG4pfWZ1bmN0aW9uIEFlKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSYmYyh0KSllLnNwbGljZSh0LDEpO2Vsc2V7dmFyIG49ZS5fX29iX187ZS5faXNWdWV8fG4mJm4udm1Db3VudHx8eShlLHQpJiYoZGVsZXRlIGVbdF0sbiYmbi5kZXAubm90aWZ5KCkpfX13ZS5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSksbj0wO248dC5sZW5ndGg7bisrKXhlKGUsdFtuXSl9LHdlLnByb3RvdHlwZS5vYnNlcnZlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUNlKGVbdF0pfTt2YXIgT2U9Ri5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7ZnVuY3Rpb24gU2UoZSx0KXtpZighdClyZXR1cm4gZTtmb3IodmFyIG4scixpLG89b2U/UmVmbGVjdC5vd25LZXlzKHQpOk9iamVjdC5rZXlzKHQpLGE9MDthPG8ubGVuZ3RoO2ErKylcIl9fb2JfX1wiIT09KG49b1thXSkmJihyPWVbbl0saT10W25dLHkoZSxuKT9yIT09aSYmcyhyKSYmcyhpKSYmU2UocixpKTprZShlLG4saSkpO3JldHVybiBlfWZ1bmN0aW9uIFRlKGUsdCxuKXtyZXR1cm4gbj9mdW5jdGlvbigpe3ZhciByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKG4sbik6dCxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZS5jYWxsKG4sbik6ZTtyZXR1cm4gcj9TZShyLGkpOml9OnQ/ZT9mdW5jdGlvbigpe3JldHVybiBTZShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QuY2FsbCh0aGlzLHRoaXMpOnQsXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwodGhpcyx0aGlzKTplKX06dDplfWZ1bmN0aW9uIEVlKGUsdCl7dmFyIG49dD9lP2UuY29uY2F0KHQpOkFycmF5LmlzQXJyYXkodCk/dDpbdF06ZTtyZXR1cm4gbj9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKS0xPT09dC5pbmRleE9mKGVbbl0pJiZ0LnB1c2goZVtuXSk7cmV0dXJuIHR9KG4pOm59ZnVuY3Rpb24gTmUoZSx0LG4scil7dmFyIGk9T2JqZWN0LmNyZWF0ZShlfHxudWxsKTtyZXR1cm4gdD9BKGksdCk6aX1PZS5kYXRhPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj9UZShlLHQsbik6dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9lOlRlKGUsdCl9LEkuZm9yRWFjaChmdW5jdGlvbihlKXtPZVtlXT1FZX0pLE0uZm9yRWFjaChmdW5jdGlvbihlKXtPZVtlK1wic1wiXT1OZX0pLE9lLndhdGNoPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT1ZJiYoZT12b2lkIDApLHQ9PT1ZJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciBpPXt9O2Zvcih2YXIgbyBpbiBBKGksZSksdCl7dmFyIGE9aVtvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSksaVtvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIGl9LE9lLnByb3BzPU9lLm1ldGhvZHM9T2UuaW5qZWN0PU9lLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXJldHVybiB0O3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEEoaSxlKSx0JiZBKGksdCksaX0sT2UucHJvdmlkZT1UZTt2YXIgamU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIERlKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10Lm9wdGlvbnMpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5wcm9wcztpZihuKXt2YXIgcixpLG89e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3Iocj1uLmxlbmd0aDtyLS07KVwic3RyaW5nXCI9PXR5cGVvZihpPW5bcl0pJiYob1tiKGkpXT17dHlwZTpudWxsfSk7ZWxzZSBpZihzKG4pKWZvcih2YXIgYSBpbiBuKWk9blthXSxvW2IoYSldPXMoaSk/aTp7dHlwZTppfTtlLnByb3BzPW99fSh0KSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuaW5qZWN0O2lmKG4pe3ZhciByPWUuaW5qZWN0PXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspcltuW2ldXT17ZnJvbTpuW2ldfTtlbHNlIGlmKHMobikpZm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107cltvXT1zKGEpP0Eoe2Zyb206b30sYSk6e2Zyb206YX19fX0odCksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXJlY3RpdmVzO2lmKHQpZm9yKHZhciBuIGluIHQpe3ZhciByPXRbbl07XCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX0odCksIXQuX2Jhc2UmJih0LmV4dGVuZHMmJihlPURlKGUsdC5leHRlbmRzLG4pKSx0Lm1peGlucykpZm9yKHZhciByPTAsaT10Lm1peGlucy5sZW5ndGg7cjxpO3IrKyllPURlKGUsdC5taXhpbnNbcl0sbik7dmFyIG8sYT17fTtmb3IobyBpbiBlKWMobyk7Zm9yKG8gaW4gdCl5KGUsbyl8fGMobyk7ZnVuY3Rpb24gYyhyKXt2YXIgaT1PZVtyXXx8amU7YVtyXT1pKGVbcl0sdFtyXSxuLHIpfXJldHVybiBhfWZ1bmN0aW9uIExlKGUsdCxuLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXt2YXIgaT1lW3RdO2lmKHkoaSxuKSlyZXR1cm4gaVtuXTt2YXIgbz1iKG4pO2lmKHkoaSxvKSlyZXR1cm4gaVtvXTt2YXIgYT0kKG8pO3JldHVybiB5KGksYSk/aVthXTppW25dfHxpW29dfHxpW2FdfX1mdW5jdGlvbiBNZShlLHQsbixyKXt2YXIgaT10W2VdLG89IXkobixlKSxhPW5bZV0scz1QZShCb29sZWFuLGkudHlwZSk7aWYocz4tMSlpZihvJiYheShpLFwiZGVmYXVsdFwiKSlhPSExO2Vsc2UgaWYoXCJcIj09PWF8fGE9PT1DKGUpKXt2YXIgYz1QZShTdHJpbmcsaS50eXBlKTsoYzwwfHxzPGMpJiYoYT0hMCl9aWYodm9pZCAwPT09YSl7YT1mdW5jdGlvbihlLHQsbil7aWYoIXkodCxcImRlZmF1bHRcIikpcmV0dXJuO3ZhciByPXQuZGVmYXVsdDtpZihlJiZlLiRvcHRpb25zLnByb3BzRGF0YSYmdm9pZCAwPT09ZS4kb3B0aW9ucy5wcm9wc0RhdGFbbl0mJnZvaWQgMCE9PWUuX3Byb3BzW25dKXJldHVybiBlLl9wcm9wc1tuXTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZcIkZ1bmN0aW9uXCIhPT1JZSh0LnR5cGUpP3IuY2FsbChlKTpyfShyLGksZSk7dmFyIHU9YmU7JGUoITApLENlKGEpLCRlKHUpfXJldHVybiBhfWZ1bmN0aW9uIEllKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxccypmdW5jdGlvbiAoXFx3KykvKTtyZXR1cm4gdD90WzFdOlwiXCJ9ZnVuY3Rpb24gRmUoZSx0KXtyZXR1cm4gSWUoZSk9PT1JZSh0KX1mdW5jdGlvbiBQZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBGZSh0LGUpPzA6LTE7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKEZlKHRbbl0sZSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gUmUoZSx0LG4pe2xlKCk7dHJ5e2lmKHQpZm9yKHZhciByPXQ7cj1yLiRwYXJlbnQ7KXt2YXIgaT1yLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7aWYoaSlmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl0cnl7aWYoITE9PT1pW29dLmNhbGwocixlLHQsbikpcmV0dXJufWNhdGNoKGUpe0JlKGUscixcImVycm9yQ2FwdHVyZWQgaG9va1wiKX19QmUoZSx0LG4pfWZpbmFsbHl7ZmUoKX19ZnVuY3Rpb24gSGUoZSx0LG4scixpKXt2YXIgbzt0cnl7KG89bj9lLmFwcGx5KHQsbik6ZS5jYWxsKHQpKSYmIW8uX2lzVnVlJiZ1KG8pJiYhby5faGFuZGxlZCYmKG8uY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIFJlKGUscixpK1wiIChQcm9taXNlL2FzeW5jKVwiKX0pLG8uX2hhbmRsZWQ9ITApfWNhdGNoKGUpe1JlKGUscixpKX1yZXR1cm4gb31mdW5jdGlvbiBCZShlLHQsbil7aWYoRi5lcnJvckhhbmRsZXIpdHJ5e3JldHVybiBGLmVycm9ySGFuZGxlci5jYWxsKG51bGwsZSx0LG4pfWNhdGNoKHQpe3QhPT1lJiZVZSh0LG51bGwsXCJjb25maWcuZXJyb3JIYW5kbGVyXCIpfVVlKGUsdCxuKX1mdW5jdGlvbiBVZShlLHQsbil7aWYoIXomJiFWfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgY29uc29sZSl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSl9dmFyIHplLFZlPSExLEtlPVtdLEplPSExO2Z1bmN0aW9uIHFlKCl7SmU9ITE7dmFyIGU9S2Uuc2xpY2UoMCk7S2UubGVuZ3RoPTA7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfWlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlJiZyZShQcm9taXNlKSl7dmFyIFdlPVByb21pc2UucmVzb2x2ZSgpO3plPWZ1bmN0aW9uKCl7V2UudGhlbihxZSksRyYmc2V0VGltZW91dChTKX0sVmU9ITB9ZWxzZSBpZihxfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgTXV0YXRpb25PYnNlcnZlcnx8IXJlKE11dGF0aW9uT2JzZXJ2ZXIpJiZcIltvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXVwiIT09TXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpKXplPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXRJbW1lZGlhdGUmJnJlKHNldEltbWVkaWF0ZSk/ZnVuY3Rpb24oKXtzZXRJbW1lZGlhdGUocWUpfTpmdW5jdGlvbigpe3NldFRpbWVvdXQocWUsMCl9O2Vsc2V7dmFyIFplPTEsR2U9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocWUpLFhlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhaZSkpO0dlLm9ic2VydmUoWGUse2NoYXJhY3RlckRhdGE6ITB9KSx6ZT1mdW5jdGlvbigpe1plPShaZSsxKSUyLFhlLmRhdGE9U3RyaW5nKFplKX0sVmU9ITB9ZnVuY3Rpb24gWWUoZSx0KXt2YXIgbjtpZihLZS5wdXNoKGZ1bmN0aW9uKCl7aWYoZSl0cnl7ZS5jYWxsKHQpfWNhdGNoKGUpe1JlKGUsdCxcIm5leHRUaWNrXCIpfWVsc2UgbiYmbih0KX0pLEplfHwoSmU9ITAsemUoKSksIWUmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtuPWV9KX12YXIgUWU9bmV3IGllO2Z1bmN0aW9uIGV0KGUpeyFmdW5jdGlvbiBlKHQsbil7dmFyIHIsaTt2YXIgYT1BcnJheS5pc0FycmF5KHQpO2lmKCFhJiYhbyh0KXx8T2JqZWN0LmlzRnJvemVuKHQpfHx0IGluc3RhbmNlb2YgcGUpcmV0dXJuO2lmKHQuX19vYl9fKXt2YXIgcz10Ll9fb2JfXy5kZXAuaWQ7aWYobi5oYXMocykpcmV0dXJuO24uYWRkKHMpfWlmKGEpZm9yKHI9dC5sZW5ndGg7ci0tOyllKHRbcl0sbik7ZWxzZSBmb3IoaT1PYmplY3Qua2V5cyh0KSxyPWkubGVuZ3RoO3ItLTspZSh0W2lbcl1dLG4pfShlLFFlKSxRZS5jbGVhcigpfXZhciB0dD1nKGZ1bmN0aW9uKGUpe3ZhciB0PVwiJlwiPT09ZS5jaGFyQXQoMCksbj1cIn5cIj09PShlPXQ/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCkscj1cIiFcIj09PShlPW4/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCk7cmV0dXJue25hbWU6ZT1yP2Uuc2xpY2UoMSk6ZSxvbmNlOm4sY2FwdHVyZTpyLHBhc3NpdmU6dH19KTtmdW5jdGlvbiBudChlLHQpe2Z1bmN0aW9uIG4oKXt2YXIgZT1hcmd1bWVudHMscj1uLmZucztpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gSGUocixudWxsLGFyZ3VtZW50cyx0LFwidi1vbiBoYW5kbGVyXCIpO2Zvcih2YXIgaT1yLnNsaWNlKCksbz0wO288aS5sZW5ndGg7bysrKUhlKGlbb10sbnVsbCxlLHQsXCJ2LW9uIGhhbmRsZXJcIil9cmV0dXJuIG4uZm5zPWUsbn1mdW5jdGlvbiBydChlLG4saSxvLGEscyl7dmFyIGMsdSxsLGY7Zm9yKGMgaW4gZSl1PWVbY10sbD1uW2NdLGY9dHQoYyksdCh1KXx8KHQobCk/KHQodS5mbnMpJiYodT1lW2NdPW50KHUscykpLHIoZi5vbmNlKSYmKHU9ZVtjXT1hKGYubmFtZSx1LGYuY2FwdHVyZSkpLGkoZi5uYW1lLHUsZi5jYXB0dXJlLGYucGFzc2l2ZSxmLnBhcmFtcykpOnUhPT1sJiYobC5mbnM9dSxlW2NdPWwpKTtmb3IoYyBpbiBuKXQoZVtjXSkmJm8oKGY9dHQoYykpLm5hbWUsbltjXSxmLmNhcHR1cmUpfWZ1bmN0aW9uIGl0KGUsaSxvKXt2YXIgYTtlIGluc3RhbmNlb2YgcGUmJihlPWUuZGF0YS5ob29rfHwoZS5kYXRhLmhvb2s9e30pKTt2YXIgcz1lW2ldO2Z1bmN0aW9uIGMoKXtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoKGEuZm5zLGMpfXQocyk/YT1udChbY10pOm4ocy5mbnMpJiZyKHMubWVyZ2VkKT8oYT1zKS5mbnMucHVzaChjKTphPW50KFtzLGNdKSxhLm1lcmdlZD0hMCxlW2ldPWF9ZnVuY3Rpb24gb3QoZSx0LHIsaSxvKXtpZihuKHQpKXtpZih5KHQscikpcmV0dXJuIGVbcl09dFtyXSxvfHxkZWxldGUgdFtyXSwhMDtpZih5KHQsaSkpcmV0dXJuIGVbcl09dFtpXSxvfHxkZWxldGUgdFtpXSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBhdChlKXtyZXR1cm4gaShlKT9baGUoZSldOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24gZShvLGEpe3ZhciBzPVtdO3ZhciBjLHUsbCxmO2ZvcihjPTA7YzxvLmxlbmd0aDtjKyspdCh1PW9bY10pfHxcImJvb2xlYW5cIj09dHlwZW9mIHV8fChsPXMubGVuZ3RoLTEsZj1zW2xdLEFycmF5LmlzQXJyYXkodSk/dS5sZW5ndGg+MCYmKHN0KCh1PWUodSwoYXx8XCJcIikrXCJfXCIrYykpWzBdKSYmc3QoZikmJihzW2xdPWhlKGYudGV4dCt1WzBdLnRleHQpLHUuc2hpZnQoKSkscy5wdXNoLmFwcGx5KHMsdSkpOmkodSk/c3QoZik/c1tsXT1oZShmLnRleHQrdSk6XCJcIiE9PXUmJnMucHVzaChoZSh1KSk6c3QodSkmJnN0KGYpP3NbbF09aGUoZi50ZXh0K3UudGV4dCk6KHIoby5faXNWTGlzdCkmJm4odS50YWcpJiZ0KHUua2V5KSYmbihhKSYmKHUua2V5PVwiX192bGlzdFwiK2ErXCJfXCIrYytcIl9fXCIpLHMucHVzaCh1KSkpO3JldHVybiBzfShlKTp2b2lkIDB9ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIG4oZSkmJm4oZS50ZXh0KSYmITE9PT1lLmlzQ29tbWVudH1mdW5jdGlvbiBjdChlLHQpe2lmKGUpe2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9b2U/UmVmbGVjdC5vd25LZXlzKGUpOk9iamVjdC5rZXlzKGUpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihcIl9fb2JfX1wiIT09byl7Zm9yKHZhciBhPWVbb10uZnJvbSxzPXQ7czspe2lmKHMuX3Byb3ZpZGVkJiZ5KHMuX3Byb3ZpZGVkLGEpKXtuW29dPXMuX3Byb3ZpZGVkW2FdO2JyZWFrfXM9cy4kcGFyZW50fWlmKCFzJiZcImRlZmF1bHRcImluIGVbb10pe3ZhciBjPWVbb10uZGVmYXVsdDtuW29dPVwiZnVuY3Rpb25cIj09dHlwZW9mIGM/Yy5jYWxsKHQpOmN9fX1yZXR1cm4gbn19ZnVuY3Rpb24gdXQoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybnt9O2Zvcih2YXIgbj17fSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdLGE9by5kYXRhO2lmKGEmJmEuYXR0cnMmJmEuYXR0cnMuc2xvdCYmZGVsZXRlIGEuYXR0cnMuc2xvdCxvLmNvbnRleHQhPT10JiZvLmZuQ29udGV4dCE9PXR8fCFhfHxudWxsPT1hLnNsb3QpKG4uZGVmYXVsdHx8KG4uZGVmYXVsdD1bXSkpLnB1c2gobyk7ZWxzZXt2YXIgcz1hLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7XCJ0ZW1wbGF0ZVwiPT09by50YWc/Yy5wdXNoLmFwcGx5KGMsby5jaGlsZHJlbnx8W10pOmMucHVzaChvKX19Zm9yKHZhciB1IGluIG4pblt1XS5ldmVyeShsdCkmJmRlbGV0ZSBuW3VdO3JldHVybiBufWZ1bmN0aW9uIGx0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmIWUuYXN5bmNGYWN0b3J5fHxcIiBcIj09PWUudGV4dH1mdW5jdGlvbiBmdCh0LG4scil7dmFyIGksbz1PYmplY3Qua2V5cyhuKS5sZW5ndGg+MCxhPXQ/ISF0LiRzdGFibGU6IW8scz10JiZ0LiRrZXk7aWYodCl7aWYodC5fbm9ybWFsaXplZClyZXR1cm4gdC5fbm9ybWFsaXplZDtpZihhJiZyJiZyIT09ZSYmcz09PXIuJGtleSYmIW8mJiFyLiRoYXNOb3JtYWwpcmV0dXJuIHI7Zm9yKHZhciBjIGluIGk9e30sdCl0W2NdJiZcIiRcIiE9PWNbMF0mJihpW2NdPXB0KG4sYyx0W2NdKSl9ZWxzZSBpPXt9O2Zvcih2YXIgdSBpbiBuKXUgaW4gaXx8KGlbdV09ZHQobix1KSk7cmV0dXJuIHQmJk9iamVjdC5pc0V4dGVuc2libGUodCkmJih0Ll9ub3JtYWxpemVkPWkpLFIoaSxcIiRzdGFibGVcIixhKSxSKGksXCIka2V5XCIscyksUihpLFwiJGhhc05vcm1hbFwiLG8pLGl9ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD9uLmFwcGx5KG51bGwsYXJndW1lbnRzKTpuKHt9KTtyZXR1cm4oZT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmIUFycmF5LmlzQXJyYXkoZSk/W2VdOmF0KGUpKSYmKDA9PT1lLmxlbmd0aHx8MT09PWUubGVuZ3RoJiZlWzBdLmlzQ29tbWVudCk/dm9pZCAwOmV9O3JldHVybiBuLnByb3h5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtnZXQ6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHJ9ZnVuY3Rpb24gZHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19ZnVuY3Rpb24gdnQoZSx0KXt2YXIgcixpLGEscyxjO2lmKEFycmF5LmlzQXJyYXkoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlKWZvcihyPW5ldyBBcnJheShlLmxlbmd0aCksaT0wLGE9ZS5sZW5ndGg7aTxhO2krKylyW2ldPXQoZVtpXSxpKTtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiBlKWZvcihyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPXQoaSsxLGkpO2Vsc2UgaWYobyhlKSlpZihvZSYmZVtTeW1ib2wuaXRlcmF0b3JdKXtyPVtdO2Zvcih2YXIgdT1lW1N5bWJvbC5pdGVyYXRvcl0oKSxsPXUubmV4dCgpOyFsLmRvbmU7KXIucHVzaCh0KGwudmFsdWUsci5sZW5ndGgpKSxsPXUubmV4dCgpfWVsc2UgZm9yKHM9T2JqZWN0LmtleXMoZSkscj1uZXcgQXJyYXkocy5sZW5ndGgpLGk9MCxhPXMubGVuZ3RoO2k8YTtpKyspYz1zW2ldLHJbaV09dChlW2NdLGMsaSk7cmV0dXJuIG4ocil8fChyPVtdKSxyLl9pc1ZMaXN0PSEwLHJ9ZnVuY3Rpb24gaHQoZSx0LG4scil7dmFyIGksbz10aGlzLiRzY29wZWRTbG90c1tlXTtvPyhuPW58fHt9LHImJihuPUEoQSh7fSxyKSxuKSksaT1vKG4pfHx0KTppPXRoaXMuJHNsb3RzW2VdfHx0O3ZhciBhPW4mJm4uc2xvdDtyZXR1cm4gYT90aGlzLiRjcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIix7c2xvdDphfSxpKTppfWZ1bmN0aW9uIG10KGUpe3JldHVybiBMZSh0aGlzLiRvcHRpb25zLFwiZmlsdGVyc1wiLGUpfHxFfWZ1bmN0aW9uIHl0KGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/LTE9PT1lLmluZGV4T2YodCk6ZSE9PXR9ZnVuY3Rpb24gZ3QoZSx0LG4scixpKXt2YXIgbz1GLmtleUNvZGVzW3RdfHxuO3JldHVybiBpJiZyJiYhRi5rZXlDb2Rlc1t0XT95dChpLHIpOm8/eXQobyxlKTpyP0MocikhPT10OnZvaWQgMH1mdW5jdGlvbiBfdChlLHQsbixyLGkpe2lmKG4paWYobyhuKSl7dmFyIGE7QXJyYXkuaXNBcnJheShuKSYmKG49TyhuKSk7dmFyIHM9ZnVuY3Rpb24obyl7aWYoXCJjbGFzc1wiPT09b3x8XCJzdHlsZVwiPT09b3x8dihvKSlhPWU7ZWxzZXt2YXIgcz1lLmF0dHJzJiZlLmF0dHJzLnR5cGU7YT1yfHxGLm11c3RVc2VQcm9wKHQscyxvKT9lLmRvbVByb3BzfHwoZS5kb21Qcm9wcz17fSk6ZS5hdHRyc3x8KGUuYXR0cnM9e30pfXZhciBjPWIobyksdT1DKG8pO2MgaW4gYXx8dSBpbiBhfHwoYVtvXT1uW29dLGkmJigoZS5vbnx8KGUub249e30pKVtcInVwZGF0ZTpcIitvXT1mdW5jdGlvbihlKXtuW29dPWV9KSl9O2Zvcih2YXIgYyBpbiBuKXMoYyl9ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBidChlLHQpe3ZhciBuPXRoaXMuX3N0YXRpY1RyZWVzfHwodGhpcy5fc3RhdGljVHJlZXM9W10pLHI9bltlXTtyZXR1cm4gciYmIXQ/cjood3Qocj1uW2VdPXRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2VdLmNhbGwodGhpcy5fcmVuZGVyUHJveHksbnVsbCx0aGlzKSxcIl9fc3RhdGljX19cIitlLCExKSxyKX1mdW5jdGlvbiAkdChlLHQsbil7cmV0dXJuIHd0KGUsXCJfX29uY2VfX1wiK3QrKG4/XCJfXCIrbjpcIlwiKSwhMCksZX1mdW5jdGlvbiB3dChlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiZcInN0cmluZ1wiIT10eXBlb2YgZVtyXSYmQ3QoZVtyXSx0K1wiX1wiK3Isbik7ZWxzZSBDdChlLHQsbil9ZnVuY3Rpb24gQ3QoZSx0LG4pe2UuaXNTdGF0aWM9ITAsZS5rZXk9dCxlLmlzT25jZT1ufWZ1bmN0aW9uIHh0KGUsdCl7aWYodClpZihzKHQpKXt2YXIgbj1lLm9uPWUub24/QSh7fSxlLm9uKTp7fTtmb3IodmFyIHIgaW4gdCl7dmFyIGk9bltyXSxvPXRbcl07bltyXT1pP1tdLmNvbmNhdChpLG8pOm99fWVsc2U7cmV0dXJuIGV9ZnVuY3Rpb24ga3QoZSx0LG4scil7dD10fHx7JHN0YWJsZTohbn07Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07QXJyYXkuaXNBcnJheShvKT9rdChvLHQsbik6byYmKG8ucHJveHkmJihvLmZuLnByb3h5PSEwKSx0W28ua2V5XT1vLmZuKX1yZXR1cm4gciYmKHQuJGtleT1yKSx0fWZ1bmN0aW9uIEF0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXt2YXIgcj10W25dO1wic3RyaW5nXCI9PXR5cGVvZiByJiZyJiYoZVt0W25dXT10W24rMV0pfXJldHVybiBlfWZ1bmN0aW9uIE90KGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/dCtlOmV9ZnVuY3Rpb24gU3QoZSl7ZS5fbz0kdCxlLl9uPWYsZS5fcz1sLGUuX2w9dnQsZS5fdD1odCxlLl9xPU4sZS5faT1qLGUuX209YnQsZS5fZj1tdCxlLl9rPWd0LGUuX2I9X3QsZS5fdj1oZSxlLl9lPXZlLGUuX3U9a3QsZS5fZz14dCxlLl9kPUF0LGUuX3A9T3R9ZnVuY3Rpb24gVHQodCxuLGksbyxhKXt2YXIgcyxjPXRoaXMsdT1hLm9wdGlvbnM7eShvLFwiX3VpZFwiKT8ocz1PYmplY3QuY3JlYXRlKG8pKS5fb3JpZ2luYWw9bzoocz1vLG89by5fb3JpZ2luYWwpO3ZhciBsPXIodS5fY29tcGlsZWQpLGY9IWw7dGhpcy5kYXRhPXQsdGhpcy5wcm9wcz1uLHRoaXMuY2hpbGRyZW49aSx0aGlzLnBhcmVudD1vLHRoaXMubGlzdGVuZXJzPXQub258fGUsdGhpcy5pbmplY3Rpb25zPWN0KHUuaW5qZWN0LG8pLHRoaXMuc2xvdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy4kc2xvdHN8fGZ0KHQuc2NvcGVkU2xvdHMsYy4kc2xvdHM9dXQoaSxvKSksYy4kc2xvdHN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2NvcGVkU2xvdHNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnQodC5zY29wZWRTbG90cyx0aGlzLnNsb3RzKCkpfX0pLGwmJih0aGlzLiRvcHRpb25zPXUsdGhpcy4kc2xvdHM9dGhpcy5zbG90cygpLHRoaXMuJHNjb3BlZFNsb3RzPWZ0KHQuc2NvcGVkU2xvdHMsdGhpcy4kc2xvdHMpKSx1Ll9zY29wZUlkP3RoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9UHQocyxlLHQsbixyLGYpO3JldHVybiBpJiYhQXJyYXkuaXNBcnJheShpKSYmKGkuZm5TY29wZUlkPXUuX3Njb3BlSWQsaS5mbkNvbnRleHQ9byksaX06dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gUHQocyxlLHQsbixyLGYpfX1mdW5jdGlvbiBFdChlLHQsbixyLGkpe3ZhciBvPW1lKGUpO3JldHVybiBvLmZuQ29udGV4dD1uLG8uZm5PcHRpb25zPXIsdC5zbG90JiYoKG8uZGF0YXx8KG8uZGF0YT17fSkpLnNsb3Q9dC5zbG90KSxvfWZ1bmN0aW9uIE50KGUsdCl7Zm9yKHZhciBuIGluIHQpZVtiKG4pXT10W25dfVN0KFR0LnByb3RvdHlwZSk7dmFyIGp0PXtpbml0OmZ1bmN0aW9uKGUsdCl7aWYoZS5jb21wb25lbnRJbnN0YW5jZSYmIWUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkJiZlLmRhdGEua2VlcEFsaXZlKXt2YXIgcj1lO2p0LnByZXBhdGNoKHIscil9ZWxzZXsoZS5jb21wb25lbnRJbnN0YW5jZT1mdW5jdGlvbihlLHQpe3ZhciByPXtfaXNDb21wb25lbnQ6ITAsX3BhcmVudFZub2RlOmUscGFyZW50OnR9LGk9ZS5kYXRhLmlubGluZVRlbXBsYXRlO24oaSkmJihyLnJlbmRlcj1pLnJlbmRlcixyLnN0YXRpY1JlbmRlckZucz1pLnN0YXRpY1JlbmRlckZucyk7cmV0dXJuIG5ldyBlLmNvbXBvbmVudE9wdGlvbnMuQ3RvcihyKX0oZSxXdCkpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX19LHByZXBhdGNoOmZ1bmN0aW9uKHQsbil7dmFyIHI9bi5jb21wb25lbnRPcHRpb25zOyFmdW5jdGlvbih0LG4scixpLG8pe3ZhciBhPWkuZGF0YS5zY29wZWRTbG90cyxzPXQuJHNjb3BlZFNsb3RzLGM9ISEoYSYmIWEuJHN0YWJsZXx8cyE9PWUmJiFzLiRzdGFibGV8fGEmJnQuJHNjb3BlZFNsb3RzLiRrZXkhPT1hLiRrZXkpLHU9ISEob3x8dC4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW58fGMpO3QuJG9wdGlvbnMuX3BhcmVudFZub2RlPWksdC4kdm5vZGU9aSx0Ll92bm9kZSYmKHQuX3Zub2RlLnBhcmVudD1pKTtpZih0LiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbj1vLHQuJGF0dHJzPWkuZGF0YS5hdHRyc3x8ZSx0LiRsaXN0ZW5lcnM9cnx8ZSxuJiZ0LiRvcHRpb25zLnByb3BzKXskZSghMSk7Zm9yKHZhciBsPXQuX3Byb3BzLGY9dC4kb3B0aW9ucy5fcHJvcEtleXN8fFtdLHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIGQ9ZltwXSx2PXQuJG9wdGlvbnMucHJvcHM7bFtkXT1NZShkLHYsbix0KX0kZSghMCksdC4kb3B0aW9ucy5wcm9wc0RhdGE9bn1yPXJ8fGU7dmFyIGg9dC4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycz1yLHF0KHQscixoKSx1JiYodC4kc2xvdHM9dXQobyxpLmNvbnRleHQpLHQuJGZvcmNlVXBkYXRlKCkpfShuLmNvbXBvbmVudEluc3RhbmNlPXQuY29tcG9uZW50SW5zdGFuY2Usci5wcm9wc0RhdGEsci5saXN0ZW5lcnMsbixyLmNoaWxkcmVuKX0saW5zZXJ0OmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jb250ZXh0LHI9ZS5jb21wb25lbnRJbnN0YW5jZTtyLl9pc01vdW50ZWR8fChyLl9pc01vdW50ZWQ9ITAsWXQocixcIm1vdW50ZWRcIikpLGUuZGF0YS5rZWVwQWxpdmUmJihuLl9pc01vdW50ZWQ/KCh0PXIpLl9pbmFjdGl2ZT0hMSxlbi5wdXNoKHQpKTpYdChyLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTt0Ll9pc0Rlc3Ryb3llZHx8KGUuZGF0YS5rZWVwQWxpdmU/ZnVuY3Rpb24gZSh0LG4pe2lmKG4mJih0Ll9kaXJlY3RJbmFjdGl2ZT0hMCxHdCh0KSkpcmV0dXJuO2lmKCF0Ll9pbmFjdGl2ZSl7dC5faW5hY3RpdmU9ITA7Zm9yKHZhciByPTA7cjx0LiRjaGlsZHJlbi5sZW5ndGg7cisrKWUodC4kY2hpbGRyZW5bcl0pO1l0KHQsXCJkZWFjdGl2YXRlZFwiKX19KHQsITApOnQuJGRlc3Ryb3koKSl9fSxEdD1PYmplY3Qua2V5cyhqdCk7ZnVuY3Rpb24gTHQoaSxhLHMsYyxsKXtpZighdChpKSl7dmFyIGY9cy4kb3B0aW9ucy5fYmFzZTtpZihvKGkpJiYoaT1mLmV4dGVuZChpKSksXCJmdW5jdGlvblwiPT10eXBlb2YgaSl7dmFyIHA7aWYodChpLmNpZCkmJnZvaWQgMD09PShpPWZ1bmN0aW9uKGUsaSl7aWYocihlLmVycm9yKSYmbihlLmVycm9yQ29tcCkpcmV0dXJuIGUuZXJyb3JDb21wO2lmKG4oZS5yZXNvbHZlZCkpcmV0dXJuIGUucmVzb2x2ZWQ7dmFyIGE9SHQ7YSYmbihlLm93bmVycykmJi0xPT09ZS5vd25lcnMuaW5kZXhPZihhKSYmZS5vd25lcnMucHVzaChhKTtpZihyKGUubG9hZGluZykmJm4oZS5sb2FkaW5nQ29tcCkpcmV0dXJuIGUubG9hZGluZ0NvbXA7aWYoYSYmIW4oZS5vd25lcnMpKXt2YXIgcz1lLm93bmVycz1bYV0sYz0hMCxsPW51bGwsZj1udWxsO2EuJG9uKFwiaG9vazpkZXN0cm95ZWRcIixmdW5jdGlvbigpe3JldHVybiBoKHMsYSl9KTt2YXIgcD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPXMubGVuZ3RoO3Q8bjt0Kyspc1t0XS4kZm9yY2VVcGRhdGUoKTtlJiYocy5sZW5ndGg9MCxudWxsIT09bCYmKGNsZWFyVGltZW91dChsKSxsPW51bGwpLG51bGwhPT1mJiYoY2xlYXJUaW1lb3V0KGYpLGY9bnVsbCkpfSxkPUQoZnVuY3Rpb24odCl7ZS5yZXNvbHZlZD1CdCh0LGkpLGM/cy5sZW5ndGg9MDpwKCEwKX0pLHY9RChmdW5jdGlvbih0KXtuKGUuZXJyb3JDb21wKSYmKGUuZXJyb3I9ITAscCghMCkpfSksbT1lKGQsdik7cmV0dXJuIG8obSkmJih1KG0pP3QoZS5yZXNvbHZlZCkmJm0udGhlbihkLHYpOnUobS5jb21wb25lbnQpJiYobS5jb21wb25lbnQudGhlbihkLHYpLG4obS5lcnJvcikmJihlLmVycm9yQ29tcD1CdChtLmVycm9yLGkpKSxuKG0ubG9hZGluZykmJihlLmxvYWRpbmdDb21wPUJ0KG0ubG9hZGluZyxpKSwwPT09bS5kZWxheT9lLmxvYWRpbmc9ITA6bD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bD1udWxsLHQoZS5yZXNvbHZlZCkmJnQoZS5lcnJvcikmJihlLmxvYWRpbmc9ITAscCghMSkpfSxtLmRlbGF5fHwyMDApKSxuKG0udGltZW91dCkmJihmPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmPW51bGwsdChlLnJlc29sdmVkKSYmdihudWxsKX0sbS50aW1lb3V0KSkpKSxjPSExLGUubG9hZGluZz9lLmxvYWRpbmdDb21wOmUucmVzb2x2ZWR9fShwPWksZikpKXJldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXZlKCk7cmV0dXJuIG8uYXN5bmNGYWN0b3J5PWUsby5hc3luY01ldGE9e2RhdGE6dCxjb250ZXh0Om4sY2hpbGRyZW46cix0YWc6aX0sb30ocCxhLHMsYyxsKTthPWF8fHt9LCRuKGkpLG4oYS5tb2RlbCkmJmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5tb2RlbCYmZS5tb2RlbC5wcm9wfHxcInZhbHVlXCIsaT1lLm1vZGVsJiZlLm1vZGVsLmV2ZW50fHxcImlucHV0XCI7KHQuYXR0cnN8fCh0LmF0dHJzPXt9KSlbcl09dC5tb2RlbC52YWx1ZTt2YXIgbz10Lm9ufHwodC5vbj17fSksYT1vW2ldLHM9dC5tb2RlbC5jYWxsYmFjaztuKGEpPyhBcnJheS5pc0FycmF5KGEpPy0xPT09YS5pbmRleE9mKHMpOmEhPT1zKSYmKG9baV09W3NdLmNvbmNhdChhKSk6b1tpXT1zfShpLm9wdGlvbnMsYSk7dmFyIGQ9ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIub3B0aW9ucy5wcm9wcztpZighdChvKSl7dmFyIGE9e30scz1lLmF0dHJzLGM9ZS5wcm9wcztpZihuKHMpfHxuKGMpKWZvcih2YXIgdSBpbiBvKXt2YXIgbD1DKHUpO290KGEsYyx1LGwsITApfHxvdChhLHMsdSxsLCExKX1yZXR1cm4gYX19KGEsaSk7aWYocihpLm9wdGlvbnMuZnVuY3Rpb25hbCkpcmV0dXJuIGZ1bmN0aW9uKHQscixpLG8sYSl7dmFyIHM9dC5vcHRpb25zLGM9e30sdT1zLnByb3BzO2lmKG4odSkpZm9yKHZhciBsIGluIHUpY1tsXT1NZShsLHUscnx8ZSk7ZWxzZSBuKGkuYXR0cnMpJiZOdChjLGkuYXR0cnMpLG4oaS5wcm9wcykmJk50KGMsaS5wcm9wcyk7dmFyIGY9bmV3IFR0KGksYyxhLG8sdCkscD1zLnJlbmRlci5jYWxsKG51bGwsZi5fYyxmKTtpZihwIGluc3RhbmNlb2YgcGUpcmV0dXJuIEV0KHAsaSxmLnBhcmVudCxzKTtpZihBcnJheS5pc0FycmF5KHApKXtmb3IodmFyIGQ9YXQocCl8fFtdLHY9bmV3IEFycmF5KGQubGVuZ3RoKSxoPTA7aDxkLmxlbmd0aDtoKyspdltoXT1FdChkW2hdLGksZi5wYXJlbnQscyk7cmV0dXJuIHZ9fShpLGQsYSxzLGMpO3ZhciB2PWEub247aWYoYS5vbj1hLm5hdGl2ZU9uLHIoaS5vcHRpb25zLmFic3RyYWN0KSl7dmFyIG09YS5zbG90O2E9e30sbSYmKGEuc2xvdD1tKX0hZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuaG9va3x8KGUuaG9vaz17fSksbj0wO248RHQubGVuZ3RoO24rKyl7dmFyIHI9RHRbbl0saT10W3JdLG89anRbcl07aT09PW98fGkmJmkuX21lcmdlZHx8KHRbcl09aT9NdChvLGkpOm8pfX0oYSk7dmFyIHk9aS5vcHRpb25zLm5hbWV8fGw7cmV0dXJuIG5ldyBwZShcInZ1ZS1jb21wb25lbnQtXCIraS5jaWQrKHk/XCItXCIreTpcIlwiKSxhLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHMse0N0b3I6aSxwcm9wc0RhdGE6ZCxsaXN0ZW5lcnM6dix0YWc6bCxjaGlsZHJlbjpjfSxwKX19fWZ1bmN0aW9uIE10KGUsdCl7dmFyIG49ZnVuY3Rpb24obixyKXtlKG4sciksdChuLHIpfTtyZXR1cm4gbi5fbWVyZ2VkPSEwLG59dmFyIEl0PTEsRnQ9MjtmdW5jdGlvbiBQdChlLGEscyxjLHUsbCl7cmV0dXJuKEFycmF5LmlzQXJyYXkocyl8fGkocykpJiYodT1jLGM9cyxzPXZvaWQgMCkscihsKSYmKHU9RnQpLGZ1bmN0aW9uKGUsaSxhLHMsYyl7aWYobihhKSYmbihhLl9fb2JfXykpcmV0dXJuIHZlKCk7bihhKSYmbihhLmlzKSYmKGk9YS5pcyk7aWYoIWkpcmV0dXJuIHZlKCk7QXJyYXkuaXNBcnJheShzKSYmXCJmdW5jdGlvblwiPT10eXBlb2Ygc1swXSYmKChhPWF8fHt9KS5zY29wZWRTbG90cz17ZGVmYXVsdDpzWzBdfSxzLmxlbmd0aD0wKTtjPT09RnQ/cz1hdChzKTpjPT09SXQmJihzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKEFycmF5LmlzQXJyYXkoZVt0XSkpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSk7cmV0dXJuIGV9KHMpKTt2YXIgdSxsO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpKXt2YXIgZjtsPWUuJHZub2RlJiZlLiR2bm9kZS5uc3x8Ri5nZXRUYWdOYW1lc3BhY2UoaSksdT1GLmlzUmVzZXJ2ZWRUYWcoaSk/bmV3IHBlKEYucGFyc2VQbGF0Zm9ybVRhZ05hbWUoaSksYSxzLHZvaWQgMCx2b2lkIDAsZSk6YSYmYS5wcmV8fCFuKGY9TGUoZS4kb3B0aW9ucyxcImNvbXBvbmVudHNcIixpKSk/bmV3IHBlKGksYSxzLHZvaWQgMCx2b2lkIDAsZSk6THQoZixhLGUscyxpKX1lbHNlIHU9THQoaSxhLGUscyk7cmV0dXJuIEFycmF5LmlzQXJyYXkodSk/dTpuKHUpPyhuKGwpJiZmdW5jdGlvbiBlKGksbyxhKXtpLm5zPW87XCJmb3JlaWduT2JqZWN0XCI9PT1pLnRhZyYmKG89dm9pZCAwLGE9ITApO2lmKG4oaS5jaGlsZHJlbikpZm9yKHZhciBzPTAsYz1pLmNoaWxkcmVuLmxlbmd0aDtzPGM7cysrKXt2YXIgdT1pLmNoaWxkcmVuW3NdO24odS50YWcpJiYodCh1Lm5zKXx8cihhKSYmXCJzdmdcIiE9PXUudGFnKSYmZSh1LG8sYSl9fSh1LGwpLG4oYSkmJmZ1bmN0aW9uKGUpe28oZS5zdHlsZSkmJmV0KGUuc3R5bGUpO28oZS5jbGFzcykmJmV0KGUuY2xhc3MpfShhKSx1KTp2ZSgpfShlLGEscyxjLHUpfXZhciBSdCxIdD1udWxsO2Z1bmN0aW9uIEJ0KGUsdCl7cmV0dXJuKGUuX19lc01vZHVsZXx8b2UmJlwiTW9kdWxlXCI9PT1lW1N5bWJvbC50b1N0cmluZ1RhZ10pJiYoZT1lLmRlZmF1bHQpLG8oZSk/dC5leHRlbmQoZSk6ZX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJmUuYXN5bmNGYWN0b3J5fWZ1bmN0aW9uIHp0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWVbdF07aWYobihyKSYmKG4oci5jb21wb25lbnRPcHRpb25zKXx8VXQocikpKXJldHVybiByfX1mdW5jdGlvbiBWdChlLHQpe1J0LiRvbihlLHQpfWZ1bmN0aW9uIEt0KGUsdCl7UnQuJG9mZihlLHQpfWZ1bmN0aW9uIEp0KGUsdCl7dmFyIG49UnQ7cmV0dXJuIGZ1bmN0aW9uIHIoKXtudWxsIT09dC5hcHBseShudWxsLGFyZ3VtZW50cykmJm4uJG9mZihlLHIpfX1mdW5jdGlvbiBxdChlLHQsbil7UnQ9ZSxydCh0LG58fHt9LFZ0LEt0LEp0LGUpLFJ0PXZvaWQgMH12YXIgV3Q9bnVsbDtmdW5jdGlvbiBadChlKXt2YXIgdD1XdDtyZXR1cm4gV3Q9ZSxmdW5jdGlvbigpe1d0PXR9fWZ1bmN0aW9uIEd0KGUpe2Zvcig7ZSYmKGU9ZS4kcGFyZW50KTspaWYoZS5faW5hY3RpdmUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWHQoZSx0KXtpZih0KXtpZihlLl9kaXJlY3RJbmFjdGl2ZT0hMSxHdChlKSlyZXR1cm59ZWxzZSBpZihlLl9kaXJlY3RJbmFjdGl2ZSlyZXR1cm47aWYoZS5faW5hY3RpdmV8fG51bGw9PT1lLl9pbmFjdGl2ZSl7ZS5faW5hY3RpdmU9ITE7Zm9yKHZhciBuPTA7bjxlLiRjaGlsZHJlbi5sZW5ndGg7bisrKVh0KGUuJGNoaWxkcmVuW25dKTtZdChlLFwiYWN0aXZhdGVkXCIpfX1mdW5jdGlvbiBZdChlLHQpe2xlKCk7dmFyIG49ZS4kb3B0aW9uc1t0XSxyPXQrXCIgaG9va1wiO2lmKG4pZm9yKHZhciBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKUhlKG5baV0sZSxudWxsLGUscik7ZS5faGFzSG9va0V2ZW50JiZlLiRlbWl0KFwiaG9vazpcIit0KSxmZSgpfXZhciBRdD1bXSxlbj1bXSx0bj17fSxubj0hMSxybj0hMSxvbj0wO3ZhciBhbj0wLHNuPURhdGUubm93O2lmKHomJiFxKXt2YXIgY249d2luZG93LnBlcmZvcm1hbmNlO2NuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjbi5ub3cmJnNuKCk+ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKS50aW1lU3RhbXAmJihzbj1mdW5jdGlvbigpe3JldHVybiBjbi5ub3coKX0pfWZ1bmN0aW9uIHVuKCl7dmFyIGUsdDtmb3IoYW49c24oKSxybj0hMCxRdC5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaWQtdC5pZH0pLG9uPTA7b248UXQubGVuZ3RoO29uKyspKGU9UXRbb25dKS5iZWZvcmUmJmUuYmVmb3JlKCksdD1lLmlkLHRuW3RdPW51bGwsZS5ydW4oKTt2YXIgbj1lbi5zbGljZSgpLHI9UXQuc2xpY2UoKTtvbj1RdC5sZW5ndGg9ZW4ubGVuZ3RoPTAsdG49e30sbm49cm49ITEsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5faW5hY3RpdmU9ITAsWHQoZVt0XSwhMCl9KG4pLGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7dmFyIG49ZVt0XSxyPW4udm07ci5fd2F0Y2hlcj09PW4mJnIuX2lzTW91bnRlZCYmIXIuX2lzRGVzdHJveWVkJiZZdChyLFwidXBkYXRlZFwiKX19KHIpLG5lJiZGLmRldnRvb2xzJiZuZS5lbWl0KFwiZmx1c2hcIil9dmFyIGxuPTAsZm49ZnVuY3Rpb24oZSx0LG4scixpKXt0aGlzLnZtPWUsaSYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIubGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMsdGhpcy5iZWZvcmU9ci5iZWZvcmUpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK2xuLHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IGllLHRoaXMubmV3RGVwSWRzPW5ldyBpZSx0aGlzLmV4cHJlc3Npb249XCJcIixcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3RoaXMuZ2V0dGVyPXQ6KHRoaXMuZ2V0dGVyPWZ1bmN0aW9uKGUpe2lmKCFILnRlc3QoZSkpe3ZhciB0PWUuc3BsaXQoXCIuXCIpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoIWUpcmV0dXJuO2U9ZVt0W25dXX1yZXR1cm4gZX19fSh0KSx0aGlzLmdldHRlcnx8KHRoaXMuZ2V0dGVyPVMpKSx0aGlzLnZhbHVlPXRoaXMubGF6eT92b2lkIDA6dGhpcy5nZXQoKX07Zm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3ZhciBlO2xlKHRoaXMpO3ZhciB0PXRoaXMudm07dHJ5e2U9dGhpcy5nZXR0ZXIuY2FsbCh0LHQpfWNhdGNoKGUpe2lmKCF0aGlzLnVzZXIpdGhyb3cgZTtSZShlLHQsJ2dldHRlciBmb3Igd2F0Y2hlciBcIicrdGhpcy5leHByZXNzaW9uKydcIicpfWZpbmFsbHl7dGhpcy5kZWVwJiZldChlKSxmZSgpLHRoaXMuY2xlYW51cERlcHMoKX1yZXR1cm4gZX0sZm4ucHJvdG90eXBlLmFkZERlcD1mdW5jdGlvbihlKXt2YXIgdD1lLmlkO3RoaXMubmV3RGVwSWRzLmhhcyh0KXx8KHRoaXMubmV3RGVwSWRzLmFkZCh0KSx0aGlzLm5ld0RlcHMucHVzaChlKSx0aGlzLmRlcElkcy5oYXModCl8fGUuYWRkU3ViKHRoaXMpKX0sZm4ucHJvdG90eXBlLmNsZWFudXBEZXBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxmbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT10blt0XSl7aWYodG5bdF09ITAscm4pe2Zvcih2YXIgbj1RdC5sZW5ndGgtMTtuPm9uJiZRdFtuXS5pZD5lLmlkOyluLS07UXQuc3BsaWNlKG4rMSwwLGUpfWVsc2UgUXQucHVzaChlKTtubnx8KG5uPSEwLFllKHVuKSl9fSh0aGlzKX0sZm4ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxvKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtSZShlLHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyIFwiJyt0aGlzLmV4cHJlc3Npb24rJ1wiJyl9ZWxzZSB0aGlzLmNiLmNhbGwodGhpcy52bSxlLHQpfX19LGZuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5nZXQoKSx0aGlzLmRpcnR5PSExfSxmbi5wcm90b3R5cGUuZGVwZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl0aGlzLmRlcHNbZV0uZGVwZW5kKCl9LGZuLnByb3RvdHlwZS50ZWFyZG93bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkfHxoKHRoaXMudm0uX3dhdGNoZXJzLHRoaXMpO2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLnJlbW92ZVN1Yih0aGlzKTt0aGlzLmFjdGl2ZT0hMX19O3ZhciBwbj17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OlMsc2V0OlN9O2Z1bmN0aW9uIGRuKGUsdCxuKXtwbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0XVtuXX0scG4uc2V0PWZ1bmN0aW9uKGUpe3RoaXNbdF1bbl09ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixwbil9ZnVuY3Rpb24gdm4oZSl7ZS5fd2F0Y2hlcnM9W107dmFyIHQ9ZS4kb3B0aW9uczt0LnByb3BzJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuJG9wdGlvbnMucHJvcHNEYXRhfHx7fSxyPWUuX3Byb3BzPXt9LGk9ZS4kb3B0aW9ucy5fcHJvcEtleXM9W107ZS4kcGFyZW50JiYkZSghMSk7dmFyIG89ZnVuY3Rpb24obyl7aS5wdXNoKG8pO3ZhciBhPU1lKG8sdCxuLGUpO3hlKHIsbyxhKSxvIGluIGV8fGRuKGUsXCJfcHJvcHNcIixvKX07Zm9yKHZhciBhIGluIHQpbyhhKTskZSghMCl9KGUsdC5wcm9wcyksdC5tZXRob2RzJiZmdW5jdGlvbihlLHQpe2UuJG9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpZVtuXT1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0W25dP1M6eCh0W25dLGUpfShlLHQubWV0aG9kcyksdC5kYXRhP2Z1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMuZGF0YTtzKHQ9ZS5fZGF0YT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCl7bGUoKTt0cnl7cmV0dXJuIGUuY2FsbCh0LHQpfWNhdGNoKGUpe3JldHVybiBSZShlLHQsXCJkYXRhKClcIikse319ZmluYWxseXtmZSgpfX0odCxlKTp0fHx7fSl8fCh0PXt9KTt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPWUuJG9wdGlvbnMucHJvcHMsaT0oZS4kb3B0aW9ucy5tZXRob2RzLG4ubGVuZ3RoKTtmb3IoO2ktLTspe3ZhciBvPW5baV07ciYmeShyLG8pfHwoYT12b2lkIDAsMzYhPT0oYT0obytcIlwiKS5jaGFyQ29kZUF0KDApKSYmOTUhPT1hJiZkbihlLFwiX2RhdGFcIixvKSl9dmFyIGE7Q2UodCwhMCl9KGUpOkNlKGUuX2RhdGE9e30sITApLHQuY29tcHV0ZWQmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fY29tcHV0ZWRXYXRjaGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGUoKTtmb3IodmFyIGkgaW4gdCl7dmFyIG89dFtpXSxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIG8/bzpvLmdldDtyfHwobltpXT1uZXcgZm4oZSxhfHxTLFMsaG4pKSxpIGluIGV8fG1uKGUsaSxvKX19KGUsdC5jb21wdXRlZCksdC53YXRjaCYmdC53YXRjaCE9PVkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpe3ZhciByPXRbbl07aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylfbihlLG4scltpXSk7ZWxzZSBfbihlLG4scil9fShlLHQud2F0Y2gpfXZhciBobj17bGF6eTohMH07ZnVuY3Rpb24gbW4oZSx0LG4pe3ZhciByPSF0ZSgpO1wiZnVuY3Rpb25cIj09dHlwZW9mIG4/KHBuLmdldD1yP3luKHQpOmduKG4pLHBuLnNldD1TKToocG4uZ2V0PW4uZ2V0P3ImJiExIT09bi5jYWNoZT95bih0KTpnbihuLmdldCk6Uyxwbi5zZXQ9bi5zZXR8fFMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQscG4pfWZ1bmN0aW9uIHluKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMmJnRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNbZV07aWYodClyZXR1cm4gdC5kaXJ0eSYmdC5ldmFsdWF0ZSgpLGNlLnRhcmdldCYmdC5kZXBlbmQoKSx0LnZhbHVlfX1mdW5jdGlvbiBnbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIF9uKGUsdCxuLHIpe3JldHVybiBzKG4pJiYocj1uLG49bi5oYW5kbGVyKSxcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49ZVtuXSksZS4kd2F0Y2godCxuLHIpfXZhciBibj0wO2Z1bmN0aW9uICRuKGUpe3ZhciB0PWUub3B0aW9ucztpZihlLnN1cGVyKXt2YXIgbj0kbihlLnN1cGVyKTtpZihuIT09ZS5zdXBlck9wdGlvbnMpe2Uuc3VwZXJPcHRpb25zPW47dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLm9wdGlvbnMscj1lLnNlYWxlZE9wdGlvbnM7Zm9yKHZhciBpIGluIG4pbltpXSE9PXJbaV0mJih0fHwodD17fSksdFtpXT1uW2ldKTtyZXR1cm4gdH0oZSk7ciYmQShlLmV4dGVuZE9wdGlvbnMsciksKHQ9ZS5vcHRpb25zPURlKG4sZS5leHRlbmRPcHRpb25zKSkubmFtZSYmKHQuY29tcG9uZW50c1t0Lm5hbWVdPWUpfX1yZXR1cm4gdH1mdW5jdGlvbiB3bihlKXt0aGlzLl9pbml0KGUpfWZ1bmN0aW9uIENuKGUpe2UuY2lkPTA7dmFyIHQ9MTtlLmV4dGVuZD1mdW5jdGlvbihlKXtlPWV8fHt9O3ZhciBuPXRoaXMscj1uLmNpZCxpPWUuX0N0b3J8fChlLl9DdG9yPXt9KTtpZihpW3JdKXJldHVybiBpW3JdO3ZhciBvPWUubmFtZXx8bi5vcHRpb25zLm5hbWUsYT1mdW5jdGlvbihlKXt0aGlzLl9pbml0KGUpfTtyZXR1cm4oYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWEsYS5jaWQ9dCsrLGEub3B0aW9ucz1EZShuLm9wdGlvbnMsZSksYS5zdXBlcj1uLGEub3B0aW9ucy5wcm9wcyYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLnByb3BzO2Zvcih2YXIgbiBpbiB0KWRuKGUucHJvdG90eXBlLFwiX3Byb3BzXCIsbil9KGEpLGEub3B0aW9ucy5jb21wdXRlZCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KW1uKGUucHJvdG90eXBlLG4sdFtuXSl9KGEpLGEuZXh0ZW5kPW4uZXh0ZW5kLGEubWl4aW49bi5taXhpbixhLnVzZT1uLnVzZSxNLmZvckVhY2goZnVuY3Rpb24oZSl7YVtlXT1uW2VdfSksbyYmKGEub3B0aW9ucy5jb21wb25lbnRzW29dPWEpLGEuc3VwZXJPcHRpb25zPW4ub3B0aW9ucyxhLmV4dGVuZE9wdGlvbnM9ZSxhLnNlYWxlZE9wdGlvbnM9QSh7fSxhLm9wdGlvbnMpLGlbcl09YSxhfX1mdW5jdGlvbiB4bihlKXtyZXR1cm4gZSYmKGUuQ3Rvci5vcHRpb25zLm5hbWV8fGUudGFnKX1mdW5jdGlvbiBrbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuaW5kZXhPZih0KT4tMTpcInN0cmluZ1wiPT10eXBlb2YgZT9lLnNwbGl0KFwiLFwiKS5pbmRleE9mKHQpPi0xOihuPWUsXCJbb2JqZWN0IFJlZ0V4cF1cIj09PWEuY2FsbChuKSYmZS50ZXN0KHQpKTt2YXIgbn1mdW5jdGlvbiBBbihlLHQpe3ZhciBuPWUuY2FjaGUscj1lLmtleXMsaT1lLl92bm9kZTtmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtpZihhKXt2YXIgcz14bihhLmNvbXBvbmVudE9wdGlvbnMpO3MmJiF0KHMpJiZPbihuLG8scixpKX19fWZ1bmN0aW9uIE9uKGUsdCxuLHIpe3ZhciBpPWVbdF07IWl8fHImJmkudGFnPT09ci50YWd8fGkuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKSxlW3RdPW51bGwsaChuLHQpfSFmdW5jdGlvbih0KXt0LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzO24uX3VpZD1ibisrLG4uX2lzVnVlPSEwLHQmJnQuX2lzQ29tcG9uZW50P2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucykscj10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1yO3ZhciBpPXIuY29tcG9uZW50T3B0aW9ucztuLnByb3BzRGF0YT1pLnByb3BzRGF0YSxuLl9wYXJlbnRMaXN0ZW5lcnM9aS5saXN0ZW5lcnMsbi5fcmVuZGVyQ2hpbGRyZW49aS5jaGlsZHJlbixuLl9jb21wb25lbnRUYWc9aS50YWcsdC5yZW5kZXImJihuLnJlbmRlcj10LnJlbmRlcixuLnN0YXRpY1JlbmRlckZucz10LnN0YXRpY1JlbmRlckZucyl9KG4sdCk6bi4kb3B0aW9ucz1EZSgkbihuLmNvbnN0cnVjdG9yKSx0fHx7fSxuKSxuLl9yZW5kZXJQcm94eT1uLG4uX3NlbGY9bixmdW5jdGlvbihlKXt2YXIgdD1lLiRvcHRpb25zLG49dC5wYXJlbnQ7aWYobiYmIXQuYWJzdHJhY3Qpe2Zvcig7bi4kb3B0aW9ucy5hYnN0cmFjdCYmbi4kcGFyZW50OyluPW4uJHBhcmVudDtuLiRjaGlsZHJlbi5wdXNoKGUpfWUuJHBhcmVudD1uLGUuJHJvb3Q9bj9uLiRyb290OmUsZS4kY2hpbGRyZW49W10sZS4kcmVmcz17fSxlLl93YXRjaGVyPW51bGwsZS5faW5hY3RpdmU9bnVsbCxlLl9kaXJlY3RJbmFjdGl2ZT0hMSxlLl9pc01vdW50ZWQ9ITEsZS5faXNEZXN0cm95ZWQ9ITEsZS5faXNCZWluZ0Rlc3Ryb3llZD0hMX0obiksZnVuY3Rpb24oZSl7ZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksZS5faGFzSG9va0V2ZW50PSExO3ZhciB0PWUuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVyczt0JiZxdChlLHQpfShuKSxmdW5jdGlvbih0KXt0Ll92bm9kZT1udWxsLHQuX3N0YXRpY1RyZWVzPW51bGw7dmFyIG49dC4kb3B0aW9ucyxyPXQuJHZub2RlPW4uX3BhcmVudFZub2RlLGk9ciYmci5jb250ZXh0O3QuJHNsb3RzPXV0KG4uX3JlbmRlckNoaWxkcmVuLGkpLHQuJHNjb3BlZFNsb3RzPWUsdC5fYz1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gUHQodCxlLG4scixpLCExKX0sdC4kY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gUHQodCxlLG4scixpLCEwKX07dmFyIG89ciYmci5kYXRhO3hlKHQsXCIkYXR0cnNcIixvJiZvLmF0dHJzfHxlLG51bGwsITApLHhlKHQsXCIkbGlzdGVuZXJzXCIsbi5fcGFyZW50TGlzdGVuZXJzfHxlLG51bGwsITApfShuKSxZdChuLFwiYmVmb3JlQ3JlYXRlXCIpLGZ1bmN0aW9uKGUpe3ZhciB0PWN0KGUuJG9wdGlvbnMuaW5qZWN0LGUpO3QmJigkZSghMSksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt4ZShlLG4sdFtuXSl9KSwkZSghMCkpfShuKSx2bihuKSxmdW5jdGlvbihlKXt2YXIgdD1lLiRvcHRpb25zLnByb3ZpZGU7dCYmKGUuX3Byb3ZpZGVkPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKGUpOnQpfShuKSxZdChuLFwiY3JlYXRlZFwiKSxuLiRvcHRpb25zLmVsJiZuLiRtb3VudChuLiRvcHRpb25zLmVsKX19KHduKSxmdW5jdGlvbihlKXt2YXIgdD17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9fSxuPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvcHN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCIkZGF0YVwiLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIiRwcm9wc1wiLG4pLGUucHJvdG90eXBlLiRzZXQ9a2UsZS5wcm90b3R5cGUuJGRlbGV0ZT1BZSxlLnByb3RvdHlwZS4kd2F0Y2g9ZnVuY3Rpb24oZSx0LG4pe2lmKHModCkpcmV0dXJuIF9uKHRoaXMsZSx0LG4pOyhuPW58fHt9KS51c2VyPSEwO3ZhciByPW5ldyBmbih0aGlzLGUsdCxuKTtpZihuLmltbWVkaWF0ZSl0cnl7dC5jYWxsKHRoaXMsci52YWx1ZSl9Y2F0Y2goZSl7UmUoZSx0aGlzLCdjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXCInK3IuZXhwcmVzc2lvbisnXCInKX1yZXR1cm4gZnVuY3Rpb24oKXtyLnRlYXJkb3duKCl9fX0od24pLGZ1bmN0aW9uKGUpe3ZhciB0PS9eaG9vazovO2UucHJvdG90eXBlLiRvbj1mdW5jdGlvbihlLG4pe3ZhciByPXRoaXM7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIGk9MCxvPWUubGVuZ3RoO2k8bztpKyspci4kb24oZVtpXSxuKTtlbHNlKHIuX2V2ZW50c1tlXXx8KHIuX2V2ZW50c1tlXT1bXSkpLnB1c2gobiksdC50ZXN0KGUpJiYoci5faGFzSG9va0V2ZW50PSEwKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2Z1bmN0aW9uIHIoKXtuLiRvZmYoZSxyKSx0LmFwcGx5KG4sYXJndW1lbnRzKX1yZXR1cm4gci5mbj10LG4uJG9uKGUsciksbn0sZS5wcm90b3R5cGUuJG9mZj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4uX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLG47aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKW4uJG9mZihlW3JdLHQpO3JldHVybiBufXZhciBvLGE9bi5fZXZlbnRzW2VdO2lmKCFhKXJldHVybiBuO2lmKCF0KXJldHVybiBuLl9ldmVudHNbZV09bnVsbCxuO2Zvcih2YXIgcz1hLmxlbmd0aDtzLS07KWlmKChvPWFbc10pPT09dHx8by5mbj09PXQpe2Euc3BsaWNlKHMsMSk7YnJlYWt9cmV0dXJuIG59LGUucHJvdG90eXBlLiRlbWl0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2V2ZW50c1tlXTtpZih0KXt0PXQubGVuZ3RoPjE/ayh0KTp0O2Zvcih2YXIgbj1rKGFyZ3VtZW50cywxKSxyPSdldmVudCBoYW5kbGVyIGZvciBcIicrZSsnXCInLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspSGUodFtpXSx0aGlzLG4sdGhpcyxyKX1yZXR1cm4gdGhpc319KHduKSxmdW5jdGlvbihlKXtlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uJGVsLGk9bi5fdm5vZGUsbz1adChuKTtuLl92bm9kZT1lLG4uJGVsPWk/bi5fX3BhdGNoX18oaSxlKTpuLl9fcGF0Y2hfXyhuLiRlbCxlLHQsITEpLG8oKSxyJiYoci5fX3Z1ZV9fPW51bGwpLG4uJGVsJiYobi4kZWwuX192dWVfXz1uKSxuLiR2bm9kZSYmbi4kcGFyZW50JiZuLiR2bm9kZT09PW4uJHBhcmVudC5fdm5vZGUmJihuLiRwYXJlbnQuJGVsPW4uJGVsKX0sZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fd2F0Y2hlciYmdGhpcy5fd2F0Y2hlci51cGRhdGUoKX0sZS5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtZdChlLFwiYmVmb3JlRGVzdHJveVwiKSxlLl9pc0JlaW5nRGVzdHJveWVkPSEwO3ZhciB0PWUuJHBhcmVudDshdHx8dC5faXNCZWluZ0Rlc3Ryb3llZHx8ZS4kb3B0aW9ucy5hYnN0cmFjdHx8aCh0LiRjaGlsZHJlbixlKSxlLl93YXRjaGVyJiZlLl93YXRjaGVyLnRlYXJkb3duKCk7Zm9yKHZhciBuPWUuX3dhdGNoZXJzLmxlbmd0aDtuLS07KWUuX3dhdGNoZXJzW25dLnRlYXJkb3duKCk7ZS5fZGF0YS5fX29iX18mJmUuX2RhdGEuX19vYl9fLnZtQ291bnQtLSxlLl9pc0Rlc3Ryb3llZD0hMCxlLl9fcGF0Y2hfXyhlLl92bm9kZSxudWxsKSxZdChlLFwiZGVzdHJveWVkXCIpLGUuJG9mZigpLGUuJGVsJiYoZS4kZWwuX192dWVfXz1udWxsKSxlLiR2bm9kZSYmKGUuJHZub2RlLnBhcmVudD1udWxsKX19fSh3biksZnVuY3Rpb24oZSl7U3QoZS5wcm90b3R5cGUpLGUucHJvdG90eXBlLiRuZXh0VGljaz1mdW5jdGlvbihlKXtyZXR1cm4gWWUoZSx0aGlzKX0sZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxuPXQuJG9wdGlvbnMscj1uLnJlbmRlcixpPW4uX3BhcmVudFZub2RlO2kmJih0LiRzY29wZWRTbG90cz1mdChpLmRhdGEuc2NvcGVkU2xvdHMsdC4kc2xvdHMsdC4kc2NvcGVkU2xvdHMpKSx0LiR2bm9kZT1pO3RyeXtIdD10LGU9ci5jYWxsKHQuX3JlbmRlclByb3h5LHQuJGNyZWF0ZUVsZW1lbnQpfWNhdGNoKG4pe1JlKG4sdCxcInJlbmRlclwiKSxlPXQuX3Zub2RlfWZpbmFsbHl7SHQ9bnVsbH1yZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMT09PWUubGVuZ3RoJiYoZT1lWzBdKSxlIGluc3RhbmNlb2YgcGV8fChlPXZlKCkpLGUucGFyZW50PWksZX19KHduKTt2YXIgU249W1N0cmluZyxSZWdFeHAsQXJyYXldLFRuPXtLZWVwQWxpdmU6e25hbWU6XCJrZWVwLWFsaXZlXCIsYWJzdHJhY3Q6ITAscHJvcHM6e2luY2x1ZGU6U24sZXhjbHVkZTpTbixtYXg6W1N0cmluZyxOdW1iZXJdfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5jYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMua2V5cz1bXX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuY2FjaGUpT24odGhpcy5jYWNoZSxlLHRoaXMua2V5cyl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJHdhdGNoKFwiaW5jbHVkZVwiLGZ1bmN0aW9uKHQpe0FuKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGtuKHQsZSl9KX0pLHRoaXMuJHdhdGNoKFwiZXhjbHVkZVwiLGZ1bmN0aW9uKHQpe0FuKGUsZnVuY3Rpb24oZSl7cmV0dXJuIWtuKHQsZSl9KX0pfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzbG90cy5kZWZhdWx0LHQ9enQoZSksbj10JiZ0LmNvbXBvbmVudE9wdGlvbnM7aWYobil7dmFyIHI9eG4obiksaT10aGlzLmluY2x1ZGUsbz10aGlzLmV4Y2x1ZGU7aWYoaSYmKCFyfHwha24oaSxyKSl8fG8mJnImJmtuKG8scikpcmV0dXJuIHQ7dmFyIGE9dGhpcy5jYWNoZSxzPXRoaXMua2V5cyxjPW51bGw9PXQua2V5P24uQ3Rvci5jaWQrKG4udGFnP1wiOjpcIituLnRhZzpcIlwiKTp0LmtleTthW2NdPyh0LmNvbXBvbmVudEluc3RhbmNlPWFbY10uY29tcG9uZW50SW5zdGFuY2UsaChzLGMpLHMucHVzaChjKSk6KGFbY109dCxzLnB1c2goYyksdGhpcy5tYXgmJnMubGVuZ3RoPnBhcnNlSW50KHRoaXMubWF4KSYmT24oYSxzWzBdLHMsdGhpcy5fdm5vZGUpKSx0LmRhdGEua2VlcEFsaXZlPSEwfXJldHVybiB0fHxlJiZlWzBdfX19OyFmdW5jdGlvbihlKXt2YXIgdD17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImNvbmZpZ1wiLHQpLGUudXRpbD17d2FybjphZSxleHRlbmQ6QSxtZXJnZU9wdGlvbnM6RGUsZGVmaW5lUmVhY3RpdmU6eGV9LGUuc2V0PWtlLGUuZGVsZXRlPUFlLGUubmV4dFRpY2s9WWUsZS5vYnNlcnZhYmxlPWZ1bmN0aW9uKGUpe3JldHVybiBDZShlKSxlfSxlLm9wdGlvbnM9T2JqZWN0LmNyZWF0ZShudWxsKSxNLmZvckVhY2goZnVuY3Rpb24odCl7ZS5vcHRpb25zW3QrXCJzXCJdPU9iamVjdC5jcmVhdGUobnVsbCl9KSxlLm9wdGlvbnMuX2Jhc2U9ZSxBKGUub3B0aW9ucy5jb21wb25lbnRzLFRuKSxmdW5jdGlvbihlKXtlLnVzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnN0YWxsZWRQbHVnaW5zfHwodGhpcy5faW5zdGFsbGVkUGx1Z2lucz1bXSk7aWYodC5pbmRleE9mKGUpPi0xKXJldHVybiB0aGlzO3ZhciBuPWsoYXJndW1lbnRzLDEpO3JldHVybiBuLnVuc2hpZnQodGhpcyksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5pbnN0YWxsP2UuaW5zdGFsbC5hcHBseShlLG4pOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCxuKSx0LnB1c2goZSksdGhpc319KGUpLGZ1bmN0aW9uKGUpe2UubWl4aW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1EZSh0aGlzLm9wdGlvbnMsZSksdGhpc319KGUpLENuKGUpLGZ1bmN0aW9uKGUpe00uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4/KFwiY29tcG9uZW50XCI9PT10JiZzKG4pJiYobi5uYW1lPW4ubmFtZXx8ZSxuPXRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQobikpLFwiZGlyZWN0aXZlXCI9PT10JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYobj17YmluZDpuLHVwZGF0ZTpufSksdGhpcy5vcHRpb25zW3QrXCJzXCJdW2VdPW4sbik6dGhpcy5vcHRpb25zW3QrXCJzXCJdW2VdfX0pfShlKX0od24pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3bi5wcm90b3R5cGUsXCIkaXNTZXJ2ZXJcIix7Z2V0OnRlfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHduLnByb3RvdHlwZSxcIiRzc3JDb250ZXh0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod24sXCJGdW5jdGlvbmFsUmVuZGVyQ29udGV4dFwiLHt2YWx1ZTpUdH0pLHduLnZlcnNpb249XCIyLjYuMTJcIjt2YXIgRW49cChcInN0eWxlLGNsYXNzXCIpLE5uPXAoXCJpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzXCIpLGpuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5cInZhbHVlXCI9PT1uJiZObihlKSYmXCJidXR0b25cIiE9PXR8fFwic2VsZWN0ZWRcIj09PW4mJlwib3B0aW9uXCI9PT1lfHxcImNoZWNrZWRcIj09PW4mJlwiaW5wdXRcIj09PWV8fFwibXV0ZWRcIj09PW4mJlwidmlkZW9cIj09PWV9LERuPXAoXCJjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2tcIiksTG49cChcImV2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHlcIiksTW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSG4odCl8fFwiZmFsc2VcIj09PXQ/XCJmYWxzZVwiOlwiY29udGVudGVkaXRhYmxlXCI9PT1lJiZMbih0KT90OlwidHJ1ZVwifSxJbj1wKFwiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZVwiKSxGbj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixQbj1mdW5jdGlvbihlKXtyZXR1cm5cIjpcIj09PWUuY2hhckF0KDUpJiZcInhsaW5rXCI9PT1lLnNsaWNlKDAsNSl9LFJuPWZ1bmN0aW9uKGUpe3JldHVybiBQbihlKT9lLnNsaWNlKDYsZS5sZW5ndGgpOlwiXCJ9LEhuPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIEJuKGUpe2Zvcih2YXIgdD1lLmRhdGEscj1lLGk9ZTtuKGkuY29tcG9uZW50SW5zdGFuY2UpOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKHQ9VW4oaS5kYXRhLHQpKTtmb3IoO24ocj1yLnBhcmVudCk7KXImJnIuZGF0YSYmKHQ9VW4odCxyLmRhdGEpKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihuKGUpfHxuKHQpKXJldHVybiB6bihlLFZuKHQpKTtyZXR1cm5cIlwifSh0LnN0YXRpY0NsYXNzLHQuY2xhc3MpfWZ1bmN0aW9uIFVuKGUsdCl7cmV0dXJue3N0YXRpY0NsYXNzOnpuKGUuc3RhdGljQ2xhc3MsdC5zdGF0aWNDbGFzcyksY2xhc3M6bihlLmNsYXNzKT9bZS5jbGFzcyx0LmNsYXNzXTp0LmNsYXNzfX1mdW5jdGlvbiB6bihlLHQpe3JldHVybiBlP3Q/ZStcIiBcIit0OmU6dHx8XCJcIn1mdW5jdGlvbiBWbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IodmFyIHQscj1cIlwiLGk9MCxvPWUubGVuZ3RoO2k8bztpKyspbih0PVZuKGVbaV0pKSYmXCJcIiE9PXQmJihyJiYocis9XCIgXCIpLHIrPXQpO3JldHVybiByfShlKTpvKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PVwiXCI7Zm9yKHZhciBuIGluIGUpZVtuXSYmKHQmJih0Kz1cIiBcIiksdCs9bik7cmV0dXJuIHR9KGUpOlwic3RyaW5nXCI9PXR5cGVvZiBlP2U6XCJcIn12YXIgS249e3N2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsbWF0aDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIn0sSm49cChcImh0bWwsYm9keSxiYXNlLGhlYWQsbGluayxtZXRhLHN0eWxlLHRpdGxlLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbixkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCxhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSxkYXRhLGRmbixlbSxpLGtiZCxtYXJrLHEscnAscnQscnRjLHJ1YnkscyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbixvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLGRldGFpbHMsZGlhbG9nLG1lbnUsbWVudWl0ZW0sc3VtbWFyeSxjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290XCIpLHFuPXAoXCJzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2Usdmlld1wiLCEwKSxXbj1mdW5jdGlvbihlKXtyZXR1cm4gSm4oZSl8fHFuKGUpfTtmdW5jdGlvbiBabihlKXtyZXR1cm4gcW4oZSk/XCJzdmdcIjpcIm1hdGhcIj09PWU/XCJtYXRoXCI6dm9pZCAwfXZhciBHbj1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBYbj1wKFwidGV4dCxudW1iZXIscGFzc3dvcmQsc2VhcmNoLGVtYWlsLHRlbCx1cmxcIik7ZnVuY3Rpb24gWW4oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk7cmV0dXJuIHR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIil9cmV0dXJuIGV9dmFyIFFuPU9iamVjdC5mcmVlemUoe2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVyblwic2VsZWN0XCIhPT1lP246KHQuZGF0YSYmdC5kYXRhLmF0dHJzJiZ2b2lkIDAhPT10LmRhdGEuYXR0cnMubXVsdGlwbGUmJm4uc2V0QXR0cmlidXRlKFwibXVsdGlwbGVcIixcIm11bHRpcGxlXCIpLG4pfSxjcmVhdGVFbGVtZW50TlM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEtuW2VdLHQpfSxjcmVhdGVUZXh0Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSl9LGNyZWF0ZUNvbW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZSl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQsbil7ZS5pbnNlcnRCZWZvcmUodCxuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oZSx0KXtlLnJlbW92ZUNoaWxkKHQpfSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlLHQpe2UuYXBwZW5kQ2hpbGQodCl9LHBhcmVudE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZX0sbmV4dFNpYmxpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmV4dFNpYmxpbmd9LHRhZ05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZX0sc2V0VGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSx0KXtlLnRleHRDb250ZW50PXR9LHNldFN0eWxlU2NvcGU6ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZSh0LFwiXCIpfX0pLGVyPXtjcmVhdGU6ZnVuY3Rpb24oZSx0KXt0cih0KX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnJlZiE9PXQuZGF0YS5yZWYmJih0cihlLCEwKSx0cih0KSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dHIoZSwhMCl9fTtmdW5jdGlvbiB0cihlLHQpe3ZhciByPWUuZGF0YS5yZWY7aWYobihyKSl7dmFyIGk9ZS5jb250ZXh0LG89ZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5lbG0sYT1pLiRyZWZzO3Q/QXJyYXkuaXNBcnJheShhW3JdKT9oKGFbcl0sbyk6YVtyXT09PW8mJihhW3JdPXZvaWQgMCk6ZS5kYXRhLnJlZkluRm9yP0FycmF5LmlzQXJyYXkoYVtyXSk/YVtyXS5pbmRleE9mKG8pPDAmJmFbcl0ucHVzaChvKTphW3JdPVtvXTphW3JdPW99fXZhciBucj1uZXcgcGUoXCJcIix7fSxbXSkscnI9W1wiY3JlYXRlXCIsXCJhY3RpdmF0ZVwiLFwidXBkYXRlXCIsXCJyZW1vdmVcIixcImRlc3Ryb3lcIl07ZnVuY3Rpb24gaXIoZSxpKXtyZXR1cm4gZS5rZXk9PT1pLmtleSYmKGUudGFnPT09aS50YWcmJmUuaXNDb21tZW50PT09aS5pc0NvbW1lbnQmJm4oZS5kYXRhKT09PW4oaS5kYXRhKSYmZnVuY3Rpb24oZSx0KXtpZihcImlucHV0XCIhPT1lLnRhZylyZXR1cm4hMDt2YXIgcixpPW4ocj1lLmRhdGEpJiZuKHI9ci5hdHRycykmJnIudHlwZSxvPW4ocj10LmRhdGEpJiZuKHI9ci5hdHRycykmJnIudHlwZTtyZXR1cm4gaT09PW98fFhuKGkpJiZYbihvKX0oZSxpKXx8cihlLmlzQXN5bmNQbGFjZWhvbGRlcikmJmUuYXN5bmNGYWN0b3J5PT09aS5hc3luY0ZhY3RvcnkmJnQoaS5hc3luY0ZhY3RvcnkuZXJyb3IpKX1mdW5jdGlvbiBvcihlLHQscil7dmFyIGksbyxhPXt9O2ZvcihpPXQ7aTw9cjsrK2kpbihvPWVbaV0ua2V5KSYmKGFbb109aSk7cmV0dXJuIGF9dmFyIGFyPXtjcmVhdGU6c3IsdXBkYXRlOnNyLGRlc3Ryb3k6ZnVuY3Rpb24oZSl7c3IoZSxucil9fTtmdW5jdGlvbiBzcihlLHQpeyhlLmRhdGEuZGlyZWN0aXZlc3x8dC5kYXRhLmRpcmVjdGl2ZXMpJiZmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPWU9PT1ucixhPXQ9PT1ucixzPXVyKGUuZGF0YS5kaXJlY3RpdmVzLGUuY29udGV4dCksYz11cih0LmRhdGEuZGlyZWN0aXZlcyx0LmNvbnRleHQpLHU9W10sbD1bXTtmb3IobiBpbiBjKXI9c1tuXSxpPWNbbl0scj8oaS5vbGRWYWx1ZT1yLnZhbHVlLGkub2xkQXJnPXIuYXJnLGZyKGksXCJ1cGRhdGVcIix0LGUpLGkuZGVmJiZpLmRlZi5jb21wb25lbnRVcGRhdGVkJiZsLnB1c2goaSkpOihmcihpLFwiYmluZFwiLHQsZSksaS5kZWYmJmkuZGVmLmluc2VydGVkJiZ1LnB1c2goaSkpO2lmKHUubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgbj0wO248dS5sZW5ndGg7bisrKWZyKHVbbl0sXCJpbnNlcnRlZFwiLHQsZSl9O28/aXQodCxcImluc2VydFwiLGYpOmYoKX1sLmxlbmd0aCYmaXQodCxcInBvc3RwYXRjaFwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjxsLmxlbmd0aDtuKyspZnIobFtuXSxcImNvbXBvbmVudFVwZGF0ZWRcIix0LGUpfSk7aWYoIW8pZm9yKG4gaW4gcyljW25dfHxmcihzW25dLFwidW5iaW5kXCIsZSxlLGEpfShlLHQpfXZhciBjcj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIHVyKGUsdCl7dmFyIG4scixpPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoIWUpcmV0dXJuIGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocj1lW25dKS5tb2RpZmllcnN8fChyLm1vZGlmaWVycz1jciksaVtscihyKV09cixyLmRlZj1MZSh0LiRvcHRpb25zLFwiZGlyZWN0aXZlc1wiLHIubmFtZSk7cmV0dXJuIGl9ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIGUucmF3TmFtZXx8ZS5uYW1lK1wiLlwiK09iamVjdC5rZXlzKGUubW9kaWZpZXJzfHx7fSkuam9pbihcIi5cIil9ZnVuY3Rpb24gZnIoZSx0LG4scixpKXt2YXIgbz1lLmRlZiYmZS5kZWZbdF07aWYobyl0cnl7byhuLmVsbSxlLG4scixpKX1jYXRjaChyKXtSZShyLG4uY29udGV4dCxcImRpcmVjdGl2ZSBcIitlLm5hbWUrXCIgXCIrdCtcIiBob29rXCIpfX12YXIgcHI9W2VyLGFyXTtmdW5jdGlvbiBkcihlLHIpe3ZhciBpPXIuY29tcG9uZW50T3B0aW9ucztpZighKG4oaSkmJiExPT09aS5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzfHx0KGUuZGF0YS5hdHRycykmJnQoci5kYXRhLmF0dHJzKSkpe3ZhciBvLGEscz1yLmVsbSxjPWUuZGF0YS5hdHRyc3x8e30sdT1yLmRhdGEuYXR0cnN8fHt9O2ZvcihvIGluIG4odS5fX29iX18pJiYodT1yLmRhdGEuYXR0cnM9QSh7fSx1KSksdSlhPXVbb10sY1tvXSE9PWEmJnZyKHMsbyxhKTtmb3IobyBpbihxfHxaKSYmdS52YWx1ZSE9PWMudmFsdWUmJnZyKHMsXCJ2YWx1ZVwiLHUudmFsdWUpLGMpdCh1W29dKSYmKFBuKG8pP3MucmVtb3ZlQXR0cmlidXRlTlMoRm4sUm4obykpOkRuKG8pfHxzLnJlbW92ZUF0dHJpYnV0ZShvKSl9fWZ1bmN0aW9uIHZyKGUsdCxuKXtlLnRhZ05hbWUuaW5kZXhPZihcIi1cIik+LTE/aHIoZSx0LG4pOkluKHQpP0huKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOihuPVwiYWxsb3dmdWxsc2NyZWVuXCI9PT10JiZcIkVNQkVEXCI9PT1lLnRhZ05hbWU/XCJ0cnVlXCI6dCxlLnNldEF0dHJpYnV0ZSh0LG4pKTpEbih0KT9lLnNldEF0dHJpYnV0ZSh0LE1uKHQsbikpOlBuKHQpP0huKG4pP2UucmVtb3ZlQXR0cmlidXRlTlMoRm4sUm4odCkpOmUuc2V0QXR0cmlidXRlTlMoRm4sdCxuKTpocihlLHQsbil9ZnVuY3Rpb24gaHIoZSx0LG4pe2lmKEhuKG4pKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7aWYocSYmIVcmJlwiVEVYVEFSRUFcIj09PWUudGFnTmFtZSYmXCJwbGFjZWhvbGRlclwiPT09dCYmXCJcIiE9PW4mJiFlLl9faWVwaCl7dmFyIHI9ZnVuY3Rpb24odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLHIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLHIpLGUuX19pZXBoPSEwfWUuc2V0QXR0cmlidXRlKHQsbil9fXZhciBtcj17Y3JlYXRlOmRyLHVwZGF0ZTpkcn07ZnVuY3Rpb24geXIoZSxyKXt2YXIgaT1yLmVsbSxvPXIuZGF0YSxhPWUuZGF0YTtpZighKHQoby5zdGF0aWNDbGFzcykmJnQoby5jbGFzcykmJih0KGEpfHx0KGEuc3RhdGljQ2xhc3MpJiZ0KGEuY2xhc3MpKSkpe3ZhciBzPUJuKHIpLGM9aS5fdHJhbnNpdGlvbkNsYXNzZXM7bihjKSYmKHM9em4ocyxWbihjKSkpLHMhPT1pLl9wcmV2Q2xhc3MmJihpLnNldEF0dHJpYnV0ZShcImNsYXNzXCIscyksaS5fcHJldkNsYXNzPXMpfX12YXIgZ3IsX3IsYnIsJHIsd3IsQ3IseHI9e2NyZWF0ZTp5cix1cGRhdGU6eXJ9LGtyPS9bXFx3KS4rXFwtXyRcXF1dLztmdW5jdGlvbiBBcihlKXt2YXIgdCxuLHIsaSxvLGE9ITEscz0hMSxjPSExLHU9ITEsbD0wLGY9MCxwPTAsZD0wO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaWYobj10LHQ9ZS5jaGFyQ29kZUF0KHIpLGEpMzk9PT10JiY5MiE9PW4mJihhPSExKTtlbHNlIGlmKHMpMzQ9PT10JiY5MiE9PW4mJihzPSExKTtlbHNlIGlmKGMpOTY9PT10JiY5MiE9PW4mJihjPSExKTtlbHNlIGlmKHUpNDc9PT10JiY5MiE9PW4mJih1PSExKTtlbHNlIGlmKDEyNCE9PXR8fDEyND09PWUuY2hhckNvZGVBdChyKzEpfHwxMjQ9PT1lLmNoYXJDb2RlQXQoci0xKXx8bHx8Znx8cCl7c3dpdGNoKHQpe2Nhc2UgMzQ6cz0hMDticmVhaztjYXNlIDM5OmE9ITA7YnJlYWs7Y2FzZSA5NjpjPSEwO2JyZWFrO2Nhc2UgNDA6cCsrO2JyZWFrO2Nhc2UgNDE6cC0tO2JyZWFrO2Nhc2UgOTE6ZisrO2JyZWFrO2Nhc2UgOTM6Zi0tO2JyZWFrO2Nhc2UgMTIzOmwrKzticmVhaztjYXNlIDEyNTpsLS19aWYoNDc9PT10KXtmb3IodmFyIHY9ci0xLGg9dm9pZCAwO3Y+PTAmJlwiIFwiPT09KGg9ZS5jaGFyQXQodikpO3YtLSk7aCYma3IudGVzdChoKXx8KHU9ITApfX1lbHNlIHZvaWQgMD09PWk/KGQ9cisxLGk9ZS5zbGljZSgwLHIpLnRyaW0oKSk6bSgpO2Z1bmN0aW9uIG0oKXsob3x8KG89W10pKS5wdXNoKGUuc2xpY2UoZCxyKS50cmltKCkpLGQ9cisxfWlmKHZvaWQgMD09PWk/aT1lLnNsaWNlKDAscikudHJpbSgpOjAhPT1kJiZtKCksbylmb3Iocj0wO3I8by5sZW5ndGg7cisrKWk9T3IoaSxvW3JdKTtyZXR1cm4gaX1mdW5jdGlvbiBPcihlLHQpe3ZhciBuPXQuaW5kZXhPZihcIihcIik7aWYobjwwKXJldHVybidfZihcIicrdCsnXCIpKCcrZStcIilcIjt2YXIgcj10LnNsaWNlKDAsbiksaT10LnNsaWNlKG4rMSk7cmV0dXJuJ19mKFwiJytyKydcIikoJytlKyhcIilcIiE9PWk/XCIsXCIraTppKX1mdW5jdGlvbiBTcihlLHQpe2NvbnNvbGUuZXJyb3IoXCJbVnVlIGNvbXBpbGVyXTogXCIrZSl9ZnVuY3Rpb24gVHIoZSx0KXtyZXR1cm4gZT9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVt0XX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pOltdfWZ1bmN0aW9uIEVyKGUsdCxuLHIsaSl7KGUucHJvcHN8fChlLnByb3BzPVtdKSkucHVzaChScih7bmFtZTp0LHZhbHVlOm4sZHluYW1pYzppfSxyKSksZS5wbGFpbj0hMX1mdW5jdGlvbiBOcihlLHQsbixyLGkpeyhpP2UuZHluYW1pY0F0dHJzfHwoZS5keW5hbWljQXR0cnM9W10pOmUuYXR0cnN8fChlLmF0dHJzPVtdKSkucHVzaChScih7bmFtZTp0LHZhbHVlOm4sZHluYW1pYzppfSxyKSksZS5wbGFpbj0hMX1mdW5jdGlvbiBqcihlLHQsbixyKXtlLmF0dHJzTWFwW3RdPW4sZS5hdHRyc0xpc3QucHVzaChScih7bmFtZTp0LHZhbHVlOm59LHIpKX1mdW5jdGlvbiBEcihlLHQsbixyLGksbyxhLHMpeyhlLmRpcmVjdGl2ZXN8fChlLmRpcmVjdGl2ZXM9W10pKS5wdXNoKFJyKHtuYW1lOnQscmF3TmFtZTpuLHZhbHVlOnIsYXJnOmksaXNEeW5hbWljQXJnOm8sbW9kaWZpZXJzOmF9LHMpKSxlLnBsYWluPSExfWZ1bmN0aW9uIExyKGUsdCxuKXtyZXR1cm4gbj9cIl9wKFwiK3QrJyxcIicrZSsnXCIpJzplK3R9ZnVuY3Rpb24gTXIodCxuLHIsaSxvLGEscyxjKXt2YXIgdTsoaT1pfHxlKS5yaWdodD9jP249XCIoXCIrbitcIik9PT0nY2xpY2snPydjb250ZXh0bWVudSc6KFwiK24rXCIpXCI6XCJjbGlja1wiPT09biYmKG49XCJjb250ZXh0bWVudVwiLGRlbGV0ZSBpLnJpZ2h0KTppLm1pZGRsZSYmKGM/bj1cIihcIituK1wiKT09PSdjbGljayc/J21vdXNldXAnOihcIituK1wiKVwiOlwiY2xpY2tcIj09PW4mJihuPVwibW91c2V1cFwiKSksaS5jYXB0dXJlJiYoZGVsZXRlIGkuY2FwdHVyZSxuPUxyKFwiIVwiLG4sYykpLGkub25jZSYmKGRlbGV0ZSBpLm9uY2Usbj1McihcIn5cIixuLGMpKSxpLnBhc3NpdmUmJihkZWxldGUgaS5wYXNzaXZlLG49THIoXCImXCIsbixjKSksaS5uYXRpdmU/KGRlbGV0ZSBpLm5hdGl2ZSx1PXQubmF0aXZlRXZlbnRzfHwodC5uYXRpdmVFdmVudHM9e30pKTp1PXQuZXZlbnRzfHwodC5ldmVudHM9e30pO3ZhciBsPVJyKHt2YWx1ZTpyLnRyaW0oKSxkeW5hbWljOmN9LHMpO2khPT1lJiYobC5tb2RpZmllcnM9aSk7dmFyIGY9dVtuXTtBcnJheS5pc0FycmF5KGYpP28/Zi51bnNoaWZ0KGwpOmYucHVzaChsKTp1W25dPWY/bz9bbCxmXTpbZixsXTpsLHQucGxhaW49ITF9ZnVuY3Rpb24gSXIoZSx0LG4pe3ZhciByPUZyKGUsXCI6XCIrdCl8fEZyKGUsXCJ2LWJpbmQ6XCIrdCk7aWYobnVsbCE9cilyZXR1cm4gQXIocik7aWYoITEhPT1uKXt2YXIgaT1GcihlLHQpO2lmKG51bGwhPWkpcmV0dXJuIEpTT04uc3RyaW5naWZ5KGkpfX1mdW5jdGlvbiBGcihlLHQsbil7dmFyIHI7aWYobnVsbCE9KHI9ZS5hdHRyc01hcFt0XSkpZm9yKHZhciBpPWUuYXR0cnNMaXN0LG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYoaVtvXS5uYW1lPT09dCl7aS5zcGxpY2UobywxKTticmVha31yZXR1cm4gbiYmZGVsZXRlIGUuYXR0cnNNYXBbdF0scn1mdW5jdGlvbiBQcihlLHQpe2Zvcih2YXIgbj1lLmF0dHJzTGlzdCxyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdO2lmKHQudGVzdChvLm5hbWUpKXJldHVybiBuLnNwbGljZShyLDEpLG99fWZ1bmN0aW9uIFJyKGUsdCl7cmV0dXJuIHQmJihudWxsIT10LnN0YXJ0JiYoZS5zdGFydD10LnN0YXJ0KSxudWxsIT10LmVuZCYmKGUuZW5kPXQuZW5kKSksZX1mdW5jdGlvbiBIcihlLHQsbil7dmFyIHI9bnx8e30saT1yLm51bWJlcixvPVwiJCR2XCI7ci50cmltJiYobz1cIih0eXBlb2YgJCR2ID09PSAnc3RyaW5nJz8gJCR2LnRyaW0oKTogJCR2KVwiKSxpJiYobz1cIl9uKFwiK28rXCIpXCIpO3ZhciBhPUJyKHQsbyk7ZS5tb2RlbD17dmFsdWU6XCIoXCIrdCtcIilcIixleHByZXNzaW9uOkpTT04uc3RyaW5naWZ5KHQpLGNhbGxiYWNrOlwiZnVuY3Rpb24gKCQkdikge1wiK2ErXCJ9XCJ9fWZ1bmN0aW9uIEJyKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7aWYoZT1lLnRyaW0oKSxncj1lLmxlbmd0aCxlLmluZGV4T2YoXCJbXCIpPDB8fGUubGFzdEluZGV4T2YoXCJdXCIpPGdyLTEpcmV0dXJuKCRyPWUubGFzdEluZGV4T2YoXCIuXCIpKT4tMT97ZXhwOmUuc2xpY2UoMCwkciksa2V5OidcIicrZS5zbGljZSgkcisxKSsnXCInfTp7ZXhwOmUsa2V5Om51bGx9O19yPWUsJHI9d3I9Q3I9MDtmb3IoOyF6cigpOylWcihicj1VcigpKT9Kcihicik6OTE9PT1iciYmS3IoYnIpO3JldHVybntleHA6ZS5zbGljZSgwLHdyKSxrZXk6ZS5zbGljZSh3cisxLENyKX19KGUpO3JldHVybiBudWxsPT09bi5rZXk/ZStcIj1cIit0OlwiJHNldChcIituLmV4cCtcIiwgXCIrbi5rZXkrXCIsIFwiK3QrXCIpXCJ9ZnVuY3Rpb24gVXIoKXtyZXR1cm4gX3IuY2hhckNvZGVBdCgrKyRyKX1mdW5jdGlvbiB6cigpe3JldHVybiAkcj49Z3J9ZnVuY3Rpb24gVnIoZSl7cmV0dXJuIDM0PT09ZXx8Mzk9PT1lfWZ1bmN0aW9uIEtyKGUpe3ZhciB0PTE7Zm9yKHdyPSRyOyF6cigpOylpZihWcihlPVVyKCkpKUpyKGUpO2Vsc2UgaWYoOTE9PT1lJiZ0KyssOTM9PT1lJiZ0LS0sMD09PXQpe0NyPSRyO2JyZWFrfX1mdW5jdGlvbiBKcihlKXtmb3IodmFyIHQ9ZTshenIoKSYmKGU9VXIoKSkhPT10Oyk7fXZhciBxcixXcj1cIl9fclwiLFpyPVwiX19jXCI7ZnVuY3Rpb24gR3IoZSx0LG4pe3ZhciByPXFyO3JldHVybiBmdW5jdGlvbiBpKCl7bnVsbCE9PXQuYXBwbHkobnVsbCxhcmd1bWVudHMpJiZRcihlLGksbixyKX19dmFyIFhyPVZlJiYhKFgmJk51bWJlcihYWzFdKTw9NTMpO2Z1bmN0aW9uIFlyKGUsdCxuLHIpe2lmKFhyKXt2YXIgaT1hbixvPXQ7dD1vLl93cmFwcGVyPWZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09ZS5jdXJyZW50VGFyZ2V0fHxlLnRpbWVTdGFtcD49aXx8ZS50aW1lU3RhbXA8PTB8fGUudGFyZ2V0Lm93bmVyRG9jdW1lbnQhPT1kb2N1bWVudClyZXR1cm4gby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXFyLmFkZEV2ZW50TGlzdGVuZXIoZSx0LFE/e2NhcHR1cmU6bixwYXNzaXZlOnJ9Om4pfWZ1bmN0aW9uIFFyKGUsdCxuLHIpeyhyfHxxcikucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQuX3dyYXBwZXJ8fHQsbil9ZnVuY3Rpb24gZWkoZSxyKXtpZighdChlLmRhdGEub24pfHwhdChyLmRhdGEub24pKXt2YXIgaT1yLmRhdGEub258fHt9LG89ZS5kYXRhLm9ufHx7fTtxcj1yLmVsbSxmdW5jdGlvbihlKXtpZihuKGVbV3JdKSl7dmFyIHQ9cT9cImNoYW5nZVwiOlwiaW5wdXRcIjtlW3RdPVtdLmNvbmNhdChlW1dyXSxlW3RdfHxbXSksZGVsZXRlIGVbV3JdfW4oZVtacl0pJiYoZS5jaGFuZ2U9W10uY29uY2F0KGVbWnJdLGUuY2hhbmdlfHxbXSksZGVsZXRlIGVbWnJdKX0oaSkscnQoaSxvLFlyLFFyLEdyLHIuY29udGV4dCkscXI9dm9pZCAwfX12YXIgdGksbmk9e2NyZWF0ZTplaSx1cGRhdGU6ZWl9O2Z1bmN0aW9uIHJpKGUscil7aWYoIXQoZS5kYXRhLmRvbVByb3BzKXx8IXQoci5kYXRhLmRvbVByb3BzKSl7dmFyIGksbyxhPXIuZWxtLHM9ZS5kYXRhLmRvbVByb3BzfHx7fSxjPXIuZGF0YS5kb21Qcm9wc3x8e307Zm9yKGkgaW4gbihjLl9fb2JfXykmJihjPXIuZGF0YS5kb21Qcm9wcz1BKHt9LGMpKSxzKWkgaW4gY3x8KGFbaV09XCJcIik7Zm9yKGkgaW4gYyl7aWYobz1jW2ldLFwidGV4dENvbnRlbnRcIj09PWl8fFwiaW5uZXJIVE1MXCI9PT1pKXtpZihyLmNoaWxkcmVuJiYoci5jaGlsZHJlbi5sZW5ndGg9MCksbz09PXNbaV0pY29udGludWU7MT09PWEuY2hpbGROb2Rlcy5sZW5ndGgmJmEucmVtb3ZlQ2hpbGQoYS5jaGlsZE5vZGVzWzBdKX1pZihcInZhbHVlXCI9PT1pJiZcIlBST0dSRVNTXCIhPT1hLnRhZ05hbWUpe2EuX3ZhbHVlPW87dmFyIHU9dChvKT9cIlwiOlN0cmluZyhvKTtpaShhLHUpJiYoYS52YWx1ZT11KX1lbHNlIGlmKFwiaW5uZXJIVE1MXCI9PT1pJiZxbihhLnRhZ05hbWUpJiZ0KGEuaW5uZXJIVE1MKSl7KHRpPXRpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pbm5lckhUTUw9XCI8c3ZnPlwiK28rXCI8L3N2Zz5cIjtmb3IodmFyIGw9dGkuZmlyc3RDaGlsZDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IoO2wuZmlyc3RDaGlsZDspYS5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpfWVsc2UgaWYobyE9PXNbaV0pdHJ5e2FbaV09b31jYXRjaChlKXt9fX19ZnVuY3Rpb24gaWkoZSx0KXtyZXR1cm4hZS5jb21wb3NpbmcmJihcIk9QVElPTlwiPT09ZS50YWdOYW1lfHxmdW5jdGlvbihlLHQpe3ZhciBuPSEwO3RyeXtuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1lfWNhdGNoKGUpe31yZXR1cm4gbiYmZS52YWx1ZSE9PXR9KGUsdCl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS52YWx1ZSxpPWUuX3ZNb2RpZmllcnM7aWYobihpKSl7aWYoaS5udW1iZXIpcmV0dXJuIGYocikhPT1mKHQpO2lmKGkudHJpbSlyZXR1cm4gci50cmltKCkhPT10LnRyaW0oKX1yZXR1cm4gciE9PXR9KGUsdCkpfXZhciBvaT17Y3JlYXRlOnJpLHVwZGF0ZTpyaX0sYWk9ZyhmdW5jdGlvbihlKXt2YXIgdD17fSxuPS86KC4rKS87cmV0dXJuIGUuc3BsaXQoLzsoPyFbXihdKlxcKSkvZykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlKXt2YXIgcj1lLnNwbGl0KG4pO3IubGVuZ3RoPjEmJih0W3JbMF0udHJpbSgpXT1yWzFdLnRyaW0oKSl9fSksdH0pO2Z1bmN0aW9uIHNpKGUpe3ZhciB0PWNpKGUuc3R5bGUpO3JldHVybiBlLnN0YXRpY1N0eWxlP0EoZS5zdGF0aWNTdHlsZSx0KTp0fWZ1bmN0aW9uIGNpKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP08oZSk6XCJzdHJpbmdcIj09dHlwZW9mIGU/YWkoZSk6ZX12YXIgdWksbGk9L14tLS8sZmk9L1xccyohaW1wb3J0YW50JC8scGk9ZnVuY3Rpb24oZSx0LG4pe2lmKGxpLnRlc3QodCkpZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2UgaWYoZmkudGVzdChuKSllLnN0eWxlLnNldFByb3BlcnR5KEModCksbi5yZXBsYWNlKGZpLFwiXCIpLFwiaW1wb3J0YW50XCIpO2Vsc2V7dmFyIHI9dmkodCk7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspZS5zdHlsZVtyXT1uW2ldO2Vsc2UgZS5zdHlsZVtyXT1ufX0sZGk9W1wiV2Via2l0XCIsXCJNb3pcIixcIm1zXCJdLHZpPWcoZnVuY3Rpb24oZSl7aWYodWk9dWl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJmaWx0ZXJcIiE9PShlPWIoZSkpJiZlIGluIHVpKXJldHVybiBlO2Zvcih2YXIgdD1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj0wO248ZGkubGVuZ3RoO24rKyl7dmFyIHI9ZGlbbl0rdDtpZihyIGluIHVpKXJldHVybiByfX0pO2Z1bmN0aW9uIGhpKGUscil7dmFyIGk9ci5kYXRhLG89ZS5kYXRhO2lmKCEodChpLnN0YXRpY1N0eWxlKSYmdChpLnN0eWxlKSYmdChvLnN0YXRpY1N0eWxlKSYmdChvLnN0eWxlKSkpe3ZhciBhLHMsYz1yLmVsbSx1PW8uc3RhdGljU3R5bGUsbD1vLm5vcm1hbGl6ZWRTdHlsZXx8by5zdHlsZXx8e30sZj11fHxsLHA9Y2koci5kYXRhLnN0eWxlKXx8e307ci5kYXRhLm5vcm1hbGl6ZWRTdHlsZT1uKHAuX19vYl9fKT9BKHt9LHApOnA7dmFyIGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXt9O2lmKHQpZm9yKHZhciBpPWU7aS5jb21wb25lbnRJbnN0YW5jZTspKGk9aS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpJiZpLmRhdGEmJihuPXNpKGkuZGF0YSkpJiZBKHIsbik7KG49c2koZS5kYXRhKSkmJkEocixuKTtmb3IodmFyIG89ZTtvPW8ucGFyZW50OylvLmRhdGEmJihuPXNpKG8uZGF0YSkpJiZBKHIsbik7cmV0dXJuIHJ9KHIsITApO2ZvcihzIGluIGYpdChkW3NdKSYmcGkoYyxzLFwiXCIpO2ZvcihzIGluIGQpKGE9ZFtzXSkhPT1mW3NdJiZwaShjLHMsbnVsbD09YT9cIlwiOmEpfX12YXIgbWk9e2NyZWF0ZTpoaSx1cGRhdGU6aGl9LHlpPS9cXHMrLztmdW5jdGlvbiBnaShlLHQpe2lmKHQmJih0PXQudHJpbSgpKSlpZihlLmNsYXNzTGlzdCl0LmluZGV4T2YoXCIgXCIpPi0xP3Quc3BsaXQoeWkpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCh0KX0pOmUuY2xhc3NMaXN0LmFkZCh0KTtlbHNle3ZhciBuPVwiIFwiKyhlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKStcIiBcIjtuLmluZGV4T2YoXCIgXCIrdCtcIiBcIik8MCYmZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLChuK3QpLnRyaW0oKSl9fWZ1bmN0aW9uIF9pKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZihcIiBcIik+LTE/dC5zcGxpdCh5aSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKHQpfSk6ZS5jbGFzc0xpc3QucmVtb3ZlKHQpLGUuY2xhc3NMaXN0Lmxlbmd0aHx8ZS5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKTtlbHNle2Zvcih2YXIgbj1cIiBcIisoZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikrXCIgXCIscj1cIiBcIit0K1wiIFwiO24uaW5kZXhPZihyKT49MDspbj1uLnJlcGxhY2UocixcIiBcIik7KG49bi50cmltKCkpP2Uuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixuKTplLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpfX1mdW5jdGlvbiBiaShlKXtpZihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSl7dmFyIHQ9e307cmV0dXJuITEhPT1lLmNzcyYmQSh0LCRpKGUubmFtZXx8XCJ2XCIpKSxBKHQsZSksdH1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT8kaShlKTp2b2lkIDB9fXZhciAkaT1nKGZ1bmN0aW9uKGUpe3JldHVybntlbnRlckNsYXNzOmUrXCItZW50ZXJcIixlbnRlclRvQ2xhc3M6ZStcIi1lbnRlci10b1wiLGVudGVyQWN0aXZlQ2xhc3M6ZStcIi1lbnRlci1hY3RpdmVcIixsZWF2ZUNsYXNzOmUrXCItbGVhdmVcIixsZWF2ZVRvQ2xhc3M6ZStcIi1sZWF2ZS10b1wiLGxlYXZlQWN0aXZlQ2xhc3M6ZStcIi1sZWF2ZS1hY3RpdmVcIn19KSx3aT16JiYhVyxDaT1cInRyYW5zaXRpb25cIix4aT1cImFuaW1hdGlvblwiLGtpPVwidHJhbnNpdGlvblwiLEFpPVwidHJhbnNpdGlvbmVuZFwiLE9pPVwiYW5pbWF0aW9uXCIsU2k9XCJhbmltYXRpb25lbmRcIjt3aSYmKHZvaWQgMD09PXdpbmRvdy5vbnRyYW5zaXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQmJihraT1cIldlYmtpdFRyYW5zaXRpb25cIixBaT1cIndlYmtpdFRyYW5zaXRpb25FbmRcIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihPaT1cIldlYmtpdEFuaW1hdGlvblwiLFNpPVwid2Via2l0QW5pbWF0aW9uRW5kXCIpKTt2YXIgVGk9ej93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOnNldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX07ZnVuY3Rpb24gRWkoZSl7VGkoZnVuY3Rpb24oKXtUaShlKX0pfWZ1bmN0aW9uIE5pKGUsdCl7dmFyIG49ZS5fdHJhbnNpdGlvbkNsYXNzZXN8fChlLl90cmFuc2l0aW9uQ2xhc3Nlcz1bXSk7bi5pbmRleE9mKHQpPDAmJihuLnB1c2godCksZ2koZSx0KSl9ZnVuY3Rpb24gamkoZSx0KXtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmaChlLl90cmFuc2l0aW9uQ2xhc3Nlcyx0KSxfaShlLHQpfWZ1bmN0aW9uIERpKGUsdCxuKXt2YXIgcj1NaShlLHQpLGk9ci50eXBlLG89ci50aW1lb3V0LGE9ci5wcm9wQ291bnQ7aWYoIWkpcmV0dXJuIG4oKTt2YXIgcz1pPT09Q2k/QWk6U2ksYz0wLHU9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIocyxsKSxuKCl9LGw9ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT1lJiYrK2M+PWEmJnUoKX07c2V0VGltZW91dChmdW5jdGlvbigpe2M8YSYmdSgpfSxvKzEpLGUuYWRkRXZlbnRMaXN0ZW5lcihzLGwpfXZhciBMaT0vXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO2Z1bmN0aW9uIE1pKGUsdCl7dmFyIG4scj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSxpPShyW2tpK1wiRGVsYXlcIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksbz0ocltraStcIkR1cmF0aW9uXCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGE9SWkoaSxvKSxzPShyW09pK1wiRGVsYXlcIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksYz0ocltPaStcIkR1cmF0aW9uXCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLHU9SWkocyxjKSxsPTAsZj0wO3JldHVybiB0PT09Q2k/YT4wJiYobj1DaSxsPWEsZj1vLmxlbmd0aCk6dD09PXhpP3U+MCYmKG49eGksbD11LGY9Yy5sZW5ndGgpOmY9KG49KGw9TWF0aC5tYXgoYSx1KSk+MD9hPnU/Q2k6eGk6bnVsbCk/bj09PUNpP28ubGVuZ3RoOmMubGVuZ3RoOjAse3R5cGU6bix0aW1lb3V0OmwscHJvcENvdW50OmYsaGFzVHJhbnNmb3JtOm49PT1DaSYmTGkudGVzdChyW2tpK1wiUHJvcGVydHlcIl0pfX1mdW5jdGlvbiBJaShlLHQpe2Zvcig7ZS5sZW5ndGg8dC5sZW5ndGg7KWU9ZS5jb25jYXQoZSk7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gRmkodCkrRmkoZVtuXSl9KSl9ZnVuY3Rpb24gRmkoZSl7cmV0dXJuIDFlMypOdW1iZXIoZS5zbGljZSgwLC0xKS5yZXBsYWNlKFwiLFwiLFwiLlwiKSl9ZnVuY3Rpb24gUGkoZSxyKXt2YXIgaT1lLmVsbTtuKGkuX2xlYXZlQ2IpJiYoaS5fbGVhdmVDYi5jYW5jZWxsZWQ9ITAsaS5fbGVhdmVDYigpKTt2YXIgYT1iaShlLmRhdGEudHJhbnNpdGlvbik7aWYoIXQoYSkmJiFuKGkuX2VudGVyQ2IpJiYxPT09aS5ub2RlVHlwZSl7Zm9yKHZhciBzPWEuY3NzLGM9YS50eXBlLHU9YS5lbnRlckNsYXNzLGw9YS5lbnRlclRvQ2xhc3MscD1hLmVudGVyQWN0aXZlQ2xhc3MsZD1hLmFwcGVhckNsYXNzLHY9YS5hcHBlYXJUb0NsYXNzLGg9YS5hcHBlYXJBY3RpdmVDbGFzcyxtPWEuYmVmb3JlRW50ZXIseT1hLmVudGVyLGc9YS5hZnRlckVudGVyLF89YS5lbnRlckNhbmNlbGxlZCxiPWEuYmVmb3JlQXBwZWFyLCQ9YS5hcHBlYXIsdz1hLmFmdGVyQXBwZWFyLEM9YS5hcHBlYXJDYW5jZWxsZWQseD1hLmR1cmF0aW9uLGs9V3QsQT1XdC4kdm5vZGU7QSYmQS5wYXJlbnQ7KWs9QS5jb250ZXh0LEE9QS5wYXJlbnQ7dmFyIE89IWsuX2lzTW91bnRlZHx8IWUuaXNSb290SW5zZXJ0O2lmKCFPfHwkfHxcIlwiPT09JCl7dmFyIFM9TyYmZD9kOnUsVD1PJiZoP2g6cCxFPU8mJnY/djpsLE49TyYmYnx8bSxqPU8mJlwiZnVuY3Rpb25cIj09dHlwZW9mICQ/JDp5LEw9TyYmd3x8ZyxNPU8mJkN8fF8sST1mKG8oeCk/eC5lbnRlcjp4KSxGPSExIT09cyYmIVcsUD1CaShqKSxSPWkuX2VudGVyQ2I9RChmdW5jdGlvbigpe0YmJihqaShpLEUpLGppKGksVCkpLFIuY2FuY2VsbGVkPyhGJiZqaShpLFMpLE0mJk0oaSkpOkwmJkwoaSksaS5fZW50ZXJDYj1udWxsfSk7ZS5kYXRhLnNob3d8fGl0KGUsXCJpbnNlcnRcIixmdW5jdGlvbigpe3ZhciB0PWkucGFyZW50Tm9kZSxuPXQmJnQuX3BlbmRpbmcmJnQuX3BlbmRpbmdbZS5rZXldO24mJm4udGFnPT09ZS50YWcmJm4uZWxtLl9sZWF2ZUNiJiZuLmVsbS5fbGVhdmVDYigpLGomJmooaSxSKX0pLE4mJk4oaSksRiYmKE5pKGksUyksTmkoaSxUKSxFaShmdW5jdGlvbigpe2ppKGksUyksUi5jYW5jZWxsZWR8fChOaShpLEUpLFB8fChIaShJKT9zZXRUaW1lb3V0KFIsSSk6RGkoaSxjLFIpKSl9KSksZS5kYXRhLnNob3cmJihyJiZyKCksaiYmaihpLFIpKSxGfHxQfHxSKCl9fX1mdW5jdGlvbiBSaShlLHIpe3ZhciBpPWUuZWxtO24oaS5fZW50ZXJDYikmJihpLl9lbnRlckNiLmNhbmNlbGxlZD0hMCxpLl9lbnRlckNiKCkpO3ZhciBhPWJpKGUuZGF0YS50cmFuc2l0aW9uKTtpZih0KGEpfHwxIT09aS5ub2RlVHlwZSlyZXR1cm4gcigpO2lmKCFuKGkuX2xlYXZlQ2IpKXt2YXIgcz1hLmNzcyxjPWEudHlwZSx1PWEubGVhdmVDbGFzcyxsPWEubGVhdmVUb0NsYXNzLHA9YS5sZWF2ZUFjdGl2ZUNsYXNzLGQ9YS5iZWZvcmVMZWF2ZSx2PWEubGVhdmUsaD1hLmFmdGVyTGVhdmUsbT1hLmxlYXZlQ2FuY2VsbGVkLHk9YS5kZWxheUxlYXZlLGc9YS5kdXJhdGlvbixfPSExIT09cyYmIVcsYj1CaSh2KSwkPWYobyhnKT9nLmxlYXZlOmcpLHc9aS5fbGVhdmVDYj1EKGZ1bmN0aW9uKCl7aS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUuX3BlbmRpbmcmJihpLnBhcmVudE5vZGUuX3BlbmRpbmdbZS5rZXldPW51bGwpLF8mJihqaShpLGwpLGppKGkscCkpLHcuY2FuY2VsbGVkPyhfJiZqaShpLHUpLG0mJm0oaSkpOihyKCksaCYmaChpKSksaS5fbGVhdmVDYj1udWxsfSk7eT95KEMpOkMoKX1mdW5jdGlvbiBDKCl7dy5jYW5jZWxsZWR8fCghZS5kYXRhLnNob3cmJmkucGFyZW50Tm9kZSYmKChpLnBhcmVudE5vZGUuX3BlbmRpbmd8fChpLnBhcmVudE5vZGUuX3BlbmRpbmc9e30pKVtlLmtleV09ZSksZCYmZChpKSxfJiYoTmkoaSx1KSxOaShpLHApLEVpKGZ1bmN0aW9uKCl7amkoaSx1KSx3LmNhbmNlbGxlZHx8KE5pKGksbCksYnx8KEhpKCQpP3NldFRpbWVvdXQodywkKTpEaShpLGMsdykpKX0pKSx2JiZ2KGksdyksX3x8Ynx8dygpKX19ZnVuY3Rpb24gSGkoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBCaShlKXtpZih0KGUpKXJldHVybiExO3ZhciByPWUuZm5zO3JldHVybiBuKHIpP0JpKEFycmF5LmlzQXJyYXkocik/clswXTpyKTooZS5fbGVuZ3RofHxlLmxlbmd0aCk+MX1mdW5jdGlvbiBVaShlLHQpeyEwIT09dC5kYXRhLnNob3cmJlBpKHQpfXZhciB6aT1mdW5jdGlvbihlKXt2YXIgbyxhLHM9e30sYz1lLm1vZHVsZXMsdT1lLm5vZGVPcHM7Zm9yKG89MDtvPHJyLmxlbmd0aDsrK28pZm9yKHNbcnJbb11dPVtdLGE9MDthPGMubGVuZ3RoOysrYSluKGNbYV1bcnJbb11dKSYmc1tycltvXV0ucHVzaChjW2FdW3JyW29dXSk7ZnVuY3Rpb24gbChlKXt2YXIgdD11LnBhcmVudE5vZGUoZSk7bih0KSYmdS5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGYoZSx0LGksbyxhLGMsbCl7aWYobihlLmVsbSkmJm4oYykmJihlPWNbbF09bWUoZSkpLGUuaXNSb290SW5zZXJ0PSFhLCFmdW5jdGlvbihlLHQsaSxvKXt2YXIgYT1lLmRhdGE7aWYobihhKSl7dmFyIGM9bihlLmNvbXBvbmVudEluc3RhbmNlKSYmYS5rZWVwQWxpdmU7aWYobihhPWEuaG9vaykmJm4oYT1hLmluaXQpJiZhKGUsITEpLG4oZS5jb21wb25lbnRJbnN0YW5jZSkpcmV0dXJuIGQoZSx0KSx2KGksZS5lbG0sbykscihjKSYmZnVuY3Rpb24oZSx0LHIsaSl7Zm9yKHZhciBvLGE9ZTthLmNvbXBvbmVudEluc3RhbmNlOylpZihhPWEuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLG4obz1hLmRhdGEpJiZuKG89by50cmFuc2l0aW9uKSl7Zm9yKG89MDtvPHMuYWN0aXZhdGUubGVuZ3RoOysrbylzLmFjdGl2YXRlW29dKG5yLGEpO3QucHVzaChhKTticmVha312KHIsZS5lbG0saSl9KGUsdCxpLG8pLCEwfX0oZSx0LGksbykpe3ZhciBmPWUuZGF0YSxwPWUuY2hpbGRyZW4sbT1lLnRhZztuKG0pPyhlLmVsbT1lLm5zP3UuY3JlYXRlRWxlbWVudE5TKGUubnMsbSk6dS5jcmVhdGVFbGVtZW50KG0sZSksZyhlKSxoKGUscCx0KSxuKGYpJiZ5KGUsdCksdihpLGUuZWxtLG8pKTpyKGUuaXNDb21tZW50KT8oZS5lbG09dS5jcmVhdGVDb21tZW50KGUudGV4dCksdihpLGUuZWxtLG8pKTooZS5lbG09dS5jcmVhdGVUZXh0Tm9kZShlLnRleHQpLHYoaSxlLmVsbSxvKSl9fWZ1bmN0aW9uIGQoZSx0KXtuKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCxtKGUpPyh5KGUsdCksZyhlKSk6KHRyKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gdihlLHQscil7bihlKSYmKG4ocik/dS5wYXJlbnROb2RlKHIpPT09ZSYmdS5pbnNlcnRCZWZvcmUoZSx0LHIpOnUuYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gaChlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilmKHRbcl0sbixlLmVsbSxudWxsLCEwLHQscik7ZWxzZSBpKGUudGV4dCkmJnUuYXBwZW5kQ2hpbGQoZS5lbG0sdS5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uIG0oZSl7Zm9yKDtlLmNvbXBvbmVudEluc3RhbmNlOyllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiBuKGUudGFnKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPTA7cjxzLmNyZWF0ZS5sZW5ndGg7KytyKXMuY3JlYXRlW3JdKG5yLGUpO24obz1lLmRhdGEuaG9vaykmJihuKG8uY3JlYXRlKSYmby5jcmVhdGUobnIsZSksbihvLmluc2VydCkmJnQucHVzaChlKSl9ZnVuY3Rpb24gZyhlKXt2YXIgdDtpZihuKHQ9ZS5mblNjb3BlSWQpKXUuc2V0U3R5bGVTY29wZShlLmVsbSx0KTtlbHNlIGZvcih2YXIgcj1lO3I7KW4odD1yLmNvbnRleHQpJiZuKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJnUuc2V0U3R5bGVTY29wZShlLmVsbSx0KSxyPXIucGFyZW50O24odD1XdCkmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmbih0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZ1LnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24gXyhlLHQsbixyLGksbyl7Zm9yKDtyPD1pOysrcilmKG5bcl0sbyxlLHQsITEsbixyKX1mdW5jdGlvbiBiKGUpe3ZhciB0LHIsaT1lLmRhdGE7aWYobihpKSlmb3Iobih0PWkuaG9vaykmJm4odD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PHMuZGVzdHJveS5sZW5ndGg7Kyt0KXMuZGVzdHJveVt0XShlKTtpZihuKHQ9ZS5jaGlsZHJlbikpZm9yKHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoOysrciliKGUuY2hpbGRyZW5bcl0pfWZ1bmN0aW9uICQoZSx0LHIpe2Zvcig7dDw9cjsrK3Qpe3ZhciBpPWVbdF07bihpKSYmKG4oaS50YWcpPyh3KGkpLGIoaSkpOmwoaS5lbG0pKX19ZnVuY3Rpb24gdyhlLHQpe2lmKG4odCl8fG4oZS5kYXRhKSl7dmFyIHIsaT1zLnJlbW92ZS5sZW5ndGgrMTtmb3Iobih0KT90Lmxpc3RlbmVycys9aTp0PWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpezA9PS0tbi5saXN0ZW5lcnMmJmwoZSl9cmV0dXJuIG4ubGlzdGVuZXJzPXQsbn0oZS5lbG0saSksbihyPWUuY29tcG9uZW50SW5zdGFuY2UpJiZuKHI9ci5fdm5vZGUpJiZuKHIuZGF0YSkmJncocix0KSxyPTA7cjxzLnJlbW92ZS5sZW5ndGg7KytyKXMucmVtb3ZlW3JdKGUsdCk7bihyPWUuZGF0YS5ob29rKSYmbihyPXIucmVtb3ZlKT9yKGUsdCk6dCgpfWVsc2UgbChlLmVsbSl9ZnVuY3Rpb24gQyhlLHQscixpKXtmb3IodmFyIG89cjtvPGk7bysrKXt2YXIgYT10W29dO2lmKG4oYSkmJmlyKGUsYSkpcmV0dXJuIG99fWZ1bmN0aW9uIHgoZSxpLG8sYSxjLGwpe2lmKGUhPT1pKXtuKGkuZWxtKSYmbihhKSYmKGk9YVtjXT1tZShpKSk7dmFyIHA9aS5lbG09ZS5lbG07aWYocihlLmlzQXN5bmNQbGFjZWhvbGRlcikpbihpLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/TyhlLmVsbSxpLG8pOmkuaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYocihpLmlzU3RhdGljKSYmcihlLmlzU3RhdGljKSYmaS5rZXk9PT1lLmtleSYmKHIoaS5pc0Nsb25lZCl8fHIoaS5pc09uY2UpKSlpLmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgZCx2PWkuZGF0YTtuKHYpJiZuKGQ9di5ob29rKSYmbihkPWQucHJlcGF0Y2gpJiZkKGUsaSk7dmFyIGg9ZS5jaGlsZHJlbix5PWkuY2hpbGRyZW47aWYobih2KSYmbShpKSl7Zm9yKGQ9MDtkPHMudXBkYXRlLmxlbmd0aDsrK2Qpcy51cGRhdGVbZF0oZSxpKTtuKGQ9di5ob29rKSYmbihkPWQudXBkYXRlKSYmZChlLGkpfXQoaS50ZXh0KT9uKGgpJiZuKHkpP2ghPT15JiZmdW5jdGlvbihlLHIsaSxvLGEpe2Zvcih2YXIgcyxjLGwscD0wLGQ9MCx2PXIubGVuZ3RoLTEsaD1yWzBdLG09clt2XSx5PWkubGVuZ3RoLTEsZz1pWzBdLGI9aVt5XSx3PSFhO3A8PXYmJmQ8PXk7KXQoaCk/aD1yWysrcF06dChtKT9tPXJbLS12XTppcihoLGcpPyh4KGgsZyxvLGksZCksaD1yWysrcF0sZz1pWysrZF0pOmlyKG0sYik/KHgobSxiLG8saSx5KSxtPXJbLS12XSxiPWlbLS15XSk6aXIoaCxiKT8oeChoLGIsbyxpLHkpLHcmJnUuaW5zZXJ0QmVmb3JlKGUsaC5lbG0sdS5uZXh0U2libGluZyhtLmVsbSkpLGg9clsrK3BdLGI9aVstLXldKTppcihtLGcpPyh4KG0sZyxvLGksZCksdyYmdS5pbnNlcnRCZWZvcmUoZSxtLmVsbSxoLmVsbSksbT1yWy0tdl0sZz1pWysrZF0pOih0KHMpJiYocz1vcihyLHAsdikpLHQoYz1uKGcua2V5KT9zW2cua2V5XTpDKGcscixwLHYpKT9mKGcsbyxlLGguZWxtLCExLGksZCk6aXIobD1yW2NdLGcpPyh4KGwsZyxvLGksZCkscltjXT12b2lkIDAsdyYmdS5pbnNlcnRCZWZvcmUoZSxsLmVsbSxoLmVsbSkpOmYoZyxvLGUsaC5lbG0sITEsaSxkKSxnPWlbKytkXSk7cD52P18oZSx0KGlbeSsxXSk/bnVsbDppW3krMV0uZWxtLGksZCx5LG8pOmQ+eSYmJChyLHAsdil9KHAsaCx5LG8sbCk6bih5KT8obihlLnRleHQpJiZ1LnNldFRleHRDb250ZW50KHAsXCJcIiksXyhwLG51bGwseSwwLHkubGVuZ3RoLTEsbykpOm4oaCk/JChoLDAsaC5sZW5ndGgtMSk6bihlLnRleHQpJiZ1LnNldFRleHRDb250ZW50KHAsXCJcIik6ZS50ZXh0IT09aS50ZXh0JiZ1LnNldFRleHRDb250ZW50KHAsaS50ZXh0KSxuKHYpJiZuKGQ9di5ob29rKSYmbihkPWQucG9zdHBhdGNoKSYmZChlLGkpfX19ZnVuY3Rpb24gayhlLHQsaSl7aWYocihpKSYmbihlLnBhcmVudCkpZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PXQ7ZWxzZSBmb3IodmFyIG89MDtvPHQubGVuZ3RoOysrbyl0W29dLmRhdGEuaG9vay5pbnNlcnQodFtvXSl9dmFyIEE9cChcImF0dHJzLGNsYXNzLHN0YXRpY0NsYXNzLHN0YXRpY1N0eWxlLGtleVwiKTtmdW5jdGlvbiBPKGUsdCxpLG8pe3ZhciBhLHM9dC50YWcsYz10LmRhdGEsdT10LmNoaWxkcmVuO2lmKG89b3x8YyYmYy5wcmUsdC5lbG09ZSxyKHQuaXNDb21tZW50KSYmbih0LmFzeW5jRmFjdG9yeSkpcmV0dXJuIHQuaXNBc3luY1BsYWNlaG9sZGVyPSEwLCEwO2lmKG4oYykmJihuKGE9Yy5ob29rKSYmbihhPWEuaW5pdCkmJmEodCwhMCksbihhPXQuY29tcG9uZW50SW5zdGFuY2UpKSlyZXR1cm4gZCh0LGkpLCEwO2lmKG4ocykpe2lmKG4odSkpaWYoZS5oYXNDaGlsZE5vZGVzKCkpaWYobihhPWMpJiZuKGE9YS5kb21Qcm9wcykmJm4oYT1hLmlubmVySFRNTCkpe2lmKGEhPT1lLmlubmVySFRNTClyZXR1cm4hMX1lbHNle2Zvcih2YXIgbD0hMCxmPWUuZmlyc3RDaGlsZCxwPTA7cDx1Lmxlbmd0aDtwKyspe2lmKCFmfHwhTyhmLHVbcF0saSxvKSl7bD0hMTticmVha31mPWYubmV4dFNpYmxpbmd9aWYoIWx8fGYpcmV0dXJuITF9ZWxzZSBoKHQsdSxpKTtpZihuKGMpKXt2YXIgdj0hMTtmb3IodmFyIG0gaW4gYylpZighQShtKSl7dj0hMCx5KHQsaSk7YnJlYWt9IXYmJmMuY2xhc3MmJmV0KGMuY2xhc3MpfX1lbHNlIGUuZGF0YSE9PXQudGV4dCYmKGUuZGF0YT10LnRleHQpO3JldHVybiEwfXJldHVybiBmdW5jdGlvbihlLGksbyxhKXtpZighdChpKSl7dmFyIGMsbD0hMSxwPVtdO2lmKHQoZSkpbD0hMCxmKGkscCk7ZWxzZXt2YXIgZD1uKGUubm9kZVR5cGUpO2lmKCFkJiZpcihlLGkpKXgoZSxpLHAsbnVsbCxudWxsLGEpO2Vsc2V7aWYoZCl7aWYoMT09PWUubm9kZVR5cGUmJmUuaGFzQXR0cmlidXRlKEwpJiYoZS5yZW1vdmVBdHRyaWJ1dGUoTCksbz0hMCkscihvKSYmTyhlLGkscCkpcmV0dXJuIGsoaSxwLCEwKSxlO2M9ZSxlPW5ldyBwZSh1LnRhZ05hbWUoYykudG9Mb3dlckNhc2UoKSx7fSxbXSx2b2lkIDAsYyl9dmFyIHY9ZS5lbG0saD11LnBhcmVudE5vZGUodik7aWYoZihpLHAsdi5fbGVhdmVDYj9udWxsOmgsdS5uZXh0U2libGluZyh2KSksbihpLnBhcmVudCkpZm9yKHZhciB5PWkucGFyZW50LGc9bShpKTt5Oyl7Zm9yKHZhciBfPTA7XzxzLmRlc3Ryb3kubGVuZ3RoOysrXylzLmRlc3Ryb3lbX10oeSk7aWYoeS5lbG09aS5lbG0sZyl7Zm9yKHZhciB3PTA7dzxzLmNyZWF0ZS5sZW5ndGg7Kyt3KXMuY3JlYXRlW3ddKG5yLHkpO3ZhciBDPXkuZGF0YS5ob29rLmluc2VydDtpZihDLm1lcmdlZClmb3IodmFyIEE9MTtBPEMuZm5zLmxlbmd0aDtBKyspQy5mbnNbQV0oKX1lbHNlIHRyKHkpO3k9eS5wYXJlbnR9bihoKT8kKFtlXSwwLDApOm4oZS50YWcpJiZiKGUpfX1yZXR1cm4gayhpLHAsbCksaS5lbG19bihlKSYmYihlKX19KHtub2RlT3BzOlFuLG1vZHVsZXM6W21yLHhyLG5pLG9pLG1pLHo/e2NyZWF0ZTpVaSxhY3RpdmF0ZTpVaSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXshMCE9PWUuZGF0YS5zaG93P1JpKGUsdCk6dCgpfX06e31dLmNvbmNhdChwcil9KTtXJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UmJmUudm1vZGVsJiZYaShlLFwiaW5wdXRcIil9KTt2YXIgVmk9e2luc2VydGVkOmZ1bmN0aW9uKGUsdCxuLHIpe1wic2VsZWN0XCI9PT1uLnRhZz8oci5lbG0mJiFyLmVsbS5fdk9wdGlvbnM/aXQobixcInBvc3RwYXRjaFwiLGZ1bmN0aW9uKCl7VmkuY29tcG9uZW50VXBkYXRlZChlLHQsbil9KTpLaShlLHQsbi5jb250ZXh0KSxlLl92T3B0aW9ucz1bXS5tYXAuY2FsbChlLm9wdGlvbnMsV2kpKTooXCJ0ZXh0YXJlYVwiPT09bi50YWd8fFhuKGUudHlwZSkpJiYoZS5fdk1vZGlmaWVycz10Lm1vZGlmaWVycyx0Lm1vZGlmaWVycy5sYXp5fHwoZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25zdGFydFwiLFppKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLEdpKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixHaSksVyYmKGUudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKGUsdCxuKXtpZihcInNlbGVjdFwiPT09bi50YWcpe0tpKGUsdCxuLmNvbnRleHQpO3ZhciByPWUuX3ZPcHRpb25zLGk9ZS5fdk9wdGlvbnM9W10ubWFwLmNhbGwoZS5vcHRpb25zLFdpKTtpZihpLnNvbWUoZnVuY3Rpb24oZSx0KXtyZXR1cm4hTihlLHJbdF0pfSkpKGUubXVsdGlwbGU/dC52YWx1ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBxaShlLGkpfSk6dC52YWx1ZSE9PXQub2xkVmFsdWUmJnFpKHQudmFsdWUsaSkpJiZYaShlLFwiY2hhbmdlXCIpfX19O2Z1bmN0aW9uIEtpKGUsdCxuKXtKaShlLHQsbiksKHF8fFopJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7SmkoZSx0LG4pfSwwKX1mdW5jdGlvbiBKaShlLHQsbil7dmFyIHI9dC52YWx1ZSxpPWUubXVsdGlwbGU7aWYoIWl8fEFycmF5LmlzQXJyYXkocikpe2Zvcih2YXIgbyxhLHM9MCxjPWUub3B0aW9ucy5sZW5ndGg7czxjO3MrKylpZihhPWUub3B0aW9uc1tzXSxpKW89aihyLFdpKGEpKT4tMSxhLnNlbGVjdGVkIT09byYmKGEuc2VsZWN0ZWQ9byk7ZWxzZSBpZihOKFdpKGEpLHIpKXJldHVybiB2b2lkKGUuc2VsZWN0ZWRJbmRleCE9PXMmJihlLnNlbGVjdGVkSW5kZXg9cykpO2l8fChlLnNlbGVjdGVkSW5kZXg9LTEpfX1mdW5jdGlvbiBxaShlLHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiFOKHQsZSl9KX1mdW5jdGlvbiBXaShlKXtyZXR1cm5cIl92YWx1ZVwiaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIFppKGUpe2UudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBHaShlKXtlLnRhcmdldC5jb21wb3NpbmcmJihlLnRhcmdldC5jb21wb3Npbmc9ITEsWGkoZS50YXJnZXQsXCJpbnB1dFwiKSl9ZnVuY3Rpb24gWGkoZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7bi5pbml0RXZlbnQodCwhMCwhMCksZS5kaXNwYXRjaEV2ZW50KG4pfWZ1bmN0aW9uIFlpKGUpe3JldHVybiFlLmNvbXBvbmVudEluc3RhbmNlfHxlLmRhdGEmJmUuZGF0YS50cmFuc2l0aW9uP2U6WWkoZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpfXZhciBRaT17bW9kZWw6Vmksc2hvdzp7YmluZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZSxpPShuPVlpKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbixvPWUuX192T3JpZ2luYWxEaXNwbGF5PVwibm9uZVwiPT09ZS5zdHlsZS5kaXNwbGF5P1wiXCI6ZS5zdHlsZS5kaXNwbGF5O3ImJmk/KG4uZGF0YS5zaG93PSEwLFBpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9b30pKTplLnN0eWxlLmRpc3BsYXk9cj9vOlwibm9uZVwifSx1cGRhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWU7IXIhPSF0Lm9sZFZhbHVlJiYoKG49WWkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uPyhuLmRhdGEuc2hvdz0hMCxyP1BpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXl9KTpSaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5Olwibm9uZVwiKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCxuLHIsaSl7aXx8KGUuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheSl9fX0sZW89e25hbWU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLGNzczpCb29sZWFuLG1vZGU6U3RyaW5nLHR5cGU6U3RyaW5nLGVudGVyQ2xhc3M6U3RyaW5nLGxlYXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsbGVhdmVUb0NsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJDbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGR1cmF0aW9uOltOdW1iZXIsU3RyaW5nLE9iamVjdF19O2Z1bmN0aW9uIHRvKGUpe3ZhciB0PWUmJmUuY29tcG9uZW50T3B0aW9ucztyZXR1cm4gdCYmdC5DdG9yLm9wdGlvbnMuYWJzdHJhY3Q/dG8oenQodC5jaGlsZHJlbikpOmV9ZnVuY3Rpb24gbm8oZSl7dmFyIHQ9e30sbj1lLiRvcHRpb25zO2Zvcih2YXIgciBpbiBuLnByb3BzRGF0YSl0W3JdPWVbcl07dmFyIGk9bi5fcGFyZW50TGlzdGVuZXJzO2Zvcih2YXIgbyBpbiBpKXRbYihvKV09aVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBybyhlLHQpe2lmKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKFwia2VlcC1hbGl2ZVwiLHtwcm9wczp0LmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhfSl9dmFyIGlvPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ3x8VXQoZSl9LG9vPWZ1bmN0aW9uKGUpe3JldHVyblwic2hvd1wiPT09ZS5uYW1lfSxhbz17bmFtZTpcInRyYW5zaXRpb25cIixwcm9wczplbyxhYnN0cmFjdDohMCxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuJHNsb3RzLmRlZmF1bHQ7aWYobiYmKG49bi5maWx0ZXIoaW8pKS5sZW5ndGgpe3ZhciByPXRoaXMubW9kZSxvPW5bMF07aWYoZnVuY3Rpb24oZSl7Zm9yKDtlPWUucGFyZW50OylpZihlLmRhdGEudHJhbnNpdGlvbilyZXR1cm4hMH0odGhpcy4kdm5vZGUpKXJldHVybiBvO3ZhciBhPXRvKG8pO2lmKCFhKXJldHVybiBvO2lmKHRoaXMuX2xlYXZpbmcpcmV0dXJuIHJvKGUsbyk7dmFyIHM9XCJfX3RyYW5zaXRpb24tXCIrdGhpcy5fdWlkK1wiLVwiO2Eua2V5PW51bGw9PWEua2V5P2EuaXNDb21tZW50P3MrXCJjb21tZW50XCI6cythLnRhZzppKGEua2V5KT8wPT09U3RyaW5nKGEua2V5KS5pbmRleE9mKHMpP2Eua2V5OnMrYS5rZXk6YS5rZXk7dmFyIGM9KGEuZGF0YXx8KGEuZGF0YT17fSkpLnRyYW5zaXRpb249bm8odGhpcyksdT10aGlzLl92bm9kZSxsPXRvKHUpO2lmKGEuZGF0YS5kaXJlY3RpdmVzJiZhLmRhdGEuZGlyZWN0aXZlcy5zb21lKG9vKSYmKGEuZGF0YS5zaG93PSEwKSxsJiZsLmRhdGEmJiFmdW5jdGlvbihlLHQpe3JldHVybiB0LmtleT09PWUua2V5JiZ0LnRhZz09PWUudGFnfShhLGwpJiYhVXQobCkmJighbC5jb21wb25lbnRJbnN0YW5jZXx8IWwuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudCkpe3ZhciBmPWwuZGF0YS50cmFuc2l0aW9uPUEoe30sYyk7aWYoXCJvdXQtaW5cIj09PXIpcmV0dXJuIHRoaXMuX2xlYXZpbmc9ITAsaXQoZixcImFmdGVyTGVhdmVcIixmdW5jdGlvbigpe3QuX2xlYXZpbmc9ITEsdC4kZm9yY2VVcGRhdGUoKX0pLHJvKGUsbyk7aWYoXCJpbi1vdXRcIj09PXIpe2lmKFV0KGEpKXJldHVybiB1O3ZhciBwLGQ9ZnVuY3Rpb24oKXtwKCl9O2l0KGMsXCJhZnRlckVudGVyXCIsZCksaXQoYyxcImVudGVyQ2FuY2VsbGVkXCIsZCksaXQoZixcImRlbGF5TGVhdmVcIixmdW5jdGlvbihlKXtwPWV9KX19cmV0dXJuIG99fX0sc289QSh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSxlbyk7ZnVuY3Rpb24gY28oZSl7ZS5lbG0uX21vdmVDYiYmZS5lbG0uX21vdmVDYigpLGUuZWxtLl9lbnRlckNiJiZlLmVsbS5fZW50ZXJDYigpfWZ1bmN0aW9uIHVvKGUpe2UuZGF0YS5uZXdQb3M9ZS5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gbG8oZSl7dmFyIHQ9ZS5kYXRhLnBvcyxuPWUuZGF0YS5uZXdQb3Mscj10LmxlZnQtbi5sZWZ0LGk9dC50b3Atbi50b3A7aWYocnx8aSl7ZS5kYXRhLm1vdmVkPSEwO3ZhciBvPWUuZWxtLnN0eWxlO28udHJhbnNmb3JtPW8uV2Via2l0VHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK3IrXCJweCxcIitpK1wicHgpXCIsby50cmFuc2l0aW9uRHVyYXRpb249XCIwc1wifX1kZWxldGUgc28ubW9kZTt2YXIgZm89e1RyYW5zaXRpb246YW8sVHJhbnNpdGlvbkdyb3VwOntwcm9wczpzbyxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl91cGRhdGU7dGhpcy5fdXBkYXRlPWZ1bmN0aW9uKG4scil7dmFyIGk9WnQoZSk7ZS5fX3BhdGNoX18oZS5fdm5vZGUsZS5rZXB0LCExLCEwKSxlLl92bm9kZT1lLmtlcHQsaSgpLHQuY2FsbChlLG4scil9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8XCJzcGFuXCIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixpPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLG89dGhpcy5jaGlsZHJlbj1bXSxhPW5vKHRoaXMpLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGM9aVtzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoXCJfX3ZsaXN0XCIpJiYoby5wdXNoKGMpLG5bYy5rZXldPWMsKGMuZGF0YXx8KGMuZGF0YT17fSkpLnRyYW5zaXRpb249YSl9aWYocil7Zm9yKHZhciB1PVtdLGw9W10sZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgcD1yW2ZdO3AuZGF0YS50cmFuc2l0aW9uPWEscC5kYXRhLnBvcz1wLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuW3Aua2V5XT91LnB1c2gocCk6bC5wdXNoKHApfXRoaXMua2VwdD1lKHQsbnVsbCx1KSx0aGlzLnJlbW92ZWQ9bH1yZXR1cm4gZSh0LG51bGwsbyl9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByZXZDaGlsZHJlbix0PXRoaXMubW92ZUNsYXNzfHwodGhpcy5uYW1lfHxcInZcIikrXCItbW92ZVwiO2UubGVuZ3RoJiZ0aGlzLmhhc01vdmUoZVswXS5lbG0sdCkmJihlLmZvckVhY2goY28pLGUuZm9yRWFjaCh1byksZS5mb3JFYWNoKGxvKSx0aGlzLl9yZWZsb3c9ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuZGF0YS5tb3ZlZCl7dmFyIG49ZS5lbG0scj1uLnN0eWxlO05pKG4sdCksci50cmFuc2Zvcm09ci5XZWJraXRUcmFuc2Zvcm09ci50cmFuc2l0aW9uRHVyYXRpb249XCJcIixuLmFkZEV2ZW50TGlzdGVuZXIoQWksbi5fbW92ZUNiPWZ1bmN0aW9uIGUocil7ciYmci50YXJnZXQhPT1ufHxyJiYhL3RyYW5zZm9ybSQvLnRlc3Qoci5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKEFpLGUpLG4uX21vdmVDYj1udWxsLGppKG4sdCkpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIXdpKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtfaShuLGUpfSksZ2kobix0KSxuLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy4kZWwuYXBwZW5kQ2hpbGQobik7dmFyIHI9TWkobik7cmV0dXJuIHRoaXMuJGVsLnJlbW92ZUNoaWxkKG4pLHRoaXMuX2hhc01vdmU9ci5oYXNUcmFuc2Zvcm19fX19O3duLmNvbmZpZy5tdXN0VXNlUHJvcD1qbix3bi5jb25maWcuaXNSZXNlcnZlZFRhZz1Xbix3bi5jb25maWcuaXNSZXNlcnZlZEF0dHI9RW4sd24uY29uZmlnLmdldFRhZ05hbWVzcGFjZT1abix3bi5jb25maWcuaXNVbmtub3duRWxlbWVudD1mdW5jdGlvbihlKXtpZigheilyZXR1cm4hMDtpZihXbihlKSlyZXR1cm4hMTtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsIT1HbltlXSlyZXR1cm4gR25bZV07dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gZS5pbmRleE9mKFwiLVwiKT4tMT9HbltlXT10LmNvbnN0cnVjdG9yPT09d2luZG93LkhUTUxVbmtub3duRWxlbWVudHx8dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MRWxlbWVudDpHbltlXT0vSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KHQudG9TdHJpbmcoKSl9LEEod24ub3B0aW9ucy5kaXJlY3RpdmVzLFFpKSxBKHduLm9wdGlvbnMuY29tcG9uZW50cyxmbyksd24ucHJvdG90eXBlLl9fcGF0Y2hfXz16P3ppOlMsd24ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIGUuJGVsPXQsZS4kb3B0aW9ucy5yZW5kZXJ8fChlLiRvcHRpb25zLnJlbmRlcj12ZSksWXQoZSxcImJlZm9yZU1vdW50XCIpLHI9ZnVuY3Rpb24oKXtlLl91cGRhdGUoZS5fcmVuZGVyKCksbil9LG5ldyBmbihlLHIsUyx7YmVmb3JlOmZ1bmN0aW9uKCl7ZS5faXNNb3VudGVkJiYhZS5faXNEZXN0cm95ZWQmJll0KGUsXCJiZWZvcmVVcGRhdGVcIil9fSwhMCksbj0hMSxudWxsPT1lLiR2bm9kZSYmKGUuX2lzTW91bnRlZD0hMCxZdChlLFwibW91bnRlZFwiKSksZX0odGhpcyxlPWUmJno/WW4oZSk6dm9pZCAwLHQpfSx6JiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ri5kZXZ0b29scyYmbmUmJm5lLmVtaXQoXCJpbml0XCIsd24pfSwwKTt2YXIgcG89L1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2csdm89L1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZyxobz1nKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0ucmVwbGFjZSh2byxcIlxcXFwkJlwiKSxuPWVbMV0ucmVwbGFjZSh2byxcIlxcXFwkJlwiKTtyZXR1cm4gbmV3IFJlZ0V4cCh0K1wiKCg/Oi58XFxcXG4pKz8pXCIrbixcImdcIil9KTt2YXIgbW89e3N0YXRpY0tleXM6W1wic3RhdGljQ2xhc3NcIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1GcihlLFwiY2xhc3NcIik7biYmKGUuc3RhdGljQ2xhc3M9SlNPTi5zdHJpbmdpZnkobikpO3ZhciByPUlyKGUsXCJjbGFzc1wiLCExKTtyJiYoZS5jbGFzc0JpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZS5zdGF0aWNDbGFzcyYmKHQrPVwic3RhdGljQ2xhc3M6XCIrZS5zdGF0aWNDbGFzcytcIixcIiksZS5jbGFzc0JpbmRpbmcmJih0Kz1cImNsYXNzOlwiK2UuY2xhc3NCaW5kaW5nK1wiLFwiKSx0fX07dmFyIHlvLGdvPXtzdGF0aWNLZXlzOltcInN0YXRpY1N0eWxlXCJdLHRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXt0Lndhcm47dmFyIG49RnIoZSxcInN0eWxlXCIpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KGFpKG4pKSk7dmFyIHI9SXIoZSxcInN0eWxlXCIsITEpO3ImJihlLnN0eWxlQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiO3JldHVybiBlLnN0YXRpY1N0eWxlJiYodCs9XCJzdGF0aWNTdHlsZTpcIitlLnN0YXRpY1N0eWxlK1wiLFwiKSxlLnN0eWxlQmluZGluZyYmKHQrPVwic3R5bGU6KFwiK2Uuc3R5bGVCaW5kaW5nK1wiKSxcIiksdH19LF9vPWZ1bmN0aW9uKGUpe3JldHVybih5bz15b3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPWUseW8udGV4dENvbnRlbnR9LGJvPXAoXCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiclwiKSwkbz1wKFwiY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZVwiKSx3bz1wKFwiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLGRldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSxvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdGl0bGUsdHIsdHJhY2tcIiksQ289L15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy8seG89L15cXHMqKCg/OnYtW1xcdy1dKzp8QHw6fCMpXFxbW149XStcXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vLGtvPVwiW2EtekEtWl9dW1xcXFwtXFxcXC4wLTlfYS16QS1aXCIrUC5zb3VyY2UrXCJdKlwiLEFvPVwiKCg/OlwiK2tvK1wiXFxcXDopP1wiK2tvK1wiKVwiLE9vPW5ldyBSZWdFeHAoXCJePFwiK0FvKSxTbz0vXlxccyooXFwvPyk+LyxUbz1uZXcgUmVnRXhwKFwiXjxcXFxcL1wiK0FvK1wiW14+XSo+XCIpLEVvPS9ePCFET0NUWVBFIFtePl0rPi9pLE5vPS9ePCFcXC0tLyxqbz0vXjwhXFxbLyxEbz1wKFwic2NyaXB0LHN0eWxlLHRleHRhcmVhXCIsITApLExvPXt9LE1vPXtcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImYW1wO1wiOlwiJlwiLFwiJiMxMDtcIjpcIlxcblwiLFwiJiM5O1wiOlwiXFx0XCIsXCImIzM5O1wiOlwiJ1wifSxJbz0vJig/Omx0fGd0fHF1b3R8YW1wfCMzOSk7L2csRm89LyYoPzpsdHxndHxxdW90fGFtcHwjMzl8IzEwfCM5KTsvZyxQbz1wKFwicHJlLHRleHRhcmVhXCIsITApLFJvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlBvKGUpJiZcIlxcblwiPT09dFswXX07ZnVuY3Rpb24gSG8oZSx0KXt2YXIgbj10P0ZvOklvO3JldHVybiBlLnJlcGxhY2UobixmdW5jdGlvbihlKXtyZXR1cm4gTW9bZV19KX12YXIgQm8sVW8sem8sVm8sS28sSm8scW8sV28sWm89L15AfF52LW9uOi8sR289L152LXxeQHxeOnxeIy8sWG89LyhbXFxzXFxTXSo/KVxccysoPzppbnxvZilcXHMrKFtcXHNcXFNdKikvLFlvPS8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLyxRbz0vXlxcKHxcXCkkL2csZWE9L15cXFsuKlxcXSQvLHRhPS86KC4qKSQvLG5hPS9eOnxeXFwufF52LWJpbmQ6LyxyYT0vXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZyxpYT0vXnYtc2xvdCg6fCQpfF4jLyxvYT0vW1xcclxcbl0vLGFhPS9cXHMrL2csc2E9ZyhfbyksY2E9XCJfZW1wdHlfXCI7ZnVuY3Rpb24gdWEoZSx0LG4pe3JldHVybnt0eXBlOjEsdGFnOmUsYXR0cnNMaXN0OnQsYXR0cnNNYXA6bWEodCkscmF3QXR0cnNNYXA6e30scGFyZW50Om4sY2hpbGRyZW46W119fWZ1bmN0aW9uIGxhKGUsdCl7Qm89dC53YXJufHxTcixKbz10LmlzUHJlVGFnfHxULHFvPXQubXVzdFVzZVByb3B8fFQsV289dC5nZXRUYWdOYW1lc3BhY2V8fFQ7dC5pc1Jlc2VydmVkVGFnO3pvPVRyKHQubW9kdWxlcyxcInRyYW5zZm9ybU5vZGVcIiksVm89VHIodC5tb2R1bGVzLFwicHJlVHJhbnNmb3JtTm9kZVwiKSxLbz1Ucih0Lm1vZHVsZXMsXCJwb3N0VHJhbnNmb3JtTm9kZVwiKSxVbz10LmRlbGltaXRlcnM7dmFyIG4scixpPVtdLG89ITEhPT10LnByZXNlcnZlV2hpdGVzcGFjZSxhPXQud2hpdGVzcGFjZSxzPSExLGM9ITE7ZnVuY3Rpb24gdShlKXtpZihsKGUpLHN8fGUucHJvY2Vzc2VkfHwoZT1mYShlLHQpKSxpLmxlbmd0aHx8ZT09PW58fG4uaWYmJihlLmVsc2VpZnx8ZS5lbHNlKSYmZGEobix7ZXhwOmUuZWxzZWlmLGJsb2NrOmV9KSxyJiYhZS5mb3JiaWRkZW4paWYoZS5lbHNlaWZ8fGUuZWxzZSlhPWUsKHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXtpZigxPT09ZVt0XS50eXBlKXJldHVybiBlW3RdO2UucG9wKCl9fShyLmNoaWxkcmVuKSkmJnUuaWYmJmRhKHUse2V4cDphLmVsc2VpZixibG9jazphfSk7ZWxzZXtpZihlLnNsb3RTY29wZSl7dmFyIG89ZS5zbG90VGFyZ2V0fHwnXCJkZWZhdWx0XCInOyhyLnNjb3BlZFNsb3RzfHwoci5zY29wZWRTbG90cz17fSkpW29dPWV9ci5jaGlsZHJlbi5wdXNoKGUpLGUucGFyZW50PXJ9dmFyIGEsdTtlLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNsb3RTY29wZX0pLGwoZSksZS5wcmUmJihzPSExKSxKbyhlLnRhZykmJihjPSExKTtmb3IodmFyIGY9MDtmPEtvLmxlbmd0aDtmKyspS29bZl0oZSx0KX1mdW5jdGlvbiBsKGUpe2lmKCFjKWZvcih2YXIgdDsodD1lLmNoaWxkcmVuW2UuY2hpbGRyZW4ubGVuZ3RoLTFdKSYmMz09PXQudHlwZSYmXCIgXCI9PT10LnRleHQ7KWUuY2hpbGRyZW4ucG9wKCl9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaT1bXSxvPXQuZXhwZWN0SFRNTCxhPXQuaXNVbmFyeVRhZ3x8VCxzPXQuY2FuQmVMZWZ0T3BlblRhZ3x8VCxjPTA7ZTspe2lmKG49ZSxyJiZEbyhyKSl7dmFyIHU9MCxsPXIudG9Mb3dlckNhc2UoKSxmPUxvW2xdfHwoTG9bbF09bmV3IFJlZ0V4cChcIihbXFxcXHNcXFxcU10qPykoPC9cIitsK1wiW14+XSo+KVwiLFwiaVwiKSkscD1lLnJlcGxhY2UoZixmdW5jdGlvbihlLG4scil7cmV0dXJuIHU9ci5sZW5ndGgsRG8obCl8fFwibm9zY3JpcHRcIj09PWx8fChuPW4ucmVwbGFjZSgvPCFcXC0tKFtcXHNcXFNdKj8pLS0+L2csXCIkMVwiKS5yZXBsYWNlKC88IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXV0+L2csXCIkMVwiKSksUm8obCxuKSYmKG49bi5zbGljZSgxKSksdC5jaGFycyYmdC5jaGFycyhuKSxcIlwifSk7Yys9ZS5sZW5ndGgtcC5sZW5ndGgsZT1wLEEobCxjLXUsYyl9ZWxzZXt2YXIgZD1lLmluZGV4T2YoXCI8XCIpO2lmKDA9PT1kKXtpZihOby50ZXN0KGUpKXt2YXIgdj1lLmluZGV4T2YoXCItLVxceDNlXCIpO2lmKHY+PTApe3Quc2hvdWxkS2VlcENvbW1lbnQmJnQuY29tbWVudChlLnN1YnN0cmluZyg0LHYpLGMsYyt2KzMpLEModiszKTtjb250aW51ZX19aWYoam8udGVzdChlKSl7dmFyIGg9ZS5pbmRleE9mKFwiXT5cIik7aWYoaD49MCl7QyhoKzIpO2NvbnRpbnVlfX12YXIgbT1lLm1hdGNoKEVvKTtpZihtKXtDKG1bMF0ubGVuZ3RoKTtjb250aW51ZX12YXIgeT1lLm1hdGNoKFRvKTtpZih5KXt2YXIgZz1jO0MoeVswXS5sZW5ndGgpLEEoeVsxXSxnLGMpO2NvbnRpbnVlfXZhciBfPXgoKTtpZihfKXtrKF8pLFJvKF8udGFnTmFtZSxlKSYmQygxKTtjb250aW51ZX19dmFyIGI9dm9pZCAwLCQ9dm9pZCAwLHc9dm9pZCAwO2lmKGQ+PTApe2ZvcigkPWUuc2xpY2UoZCk7IShUby50ZXN0KCQpfHxPby50ZXN0KCQpfHxOby50ZXN0KCQpfHxqby50ZXN0KCQpfHwodz0kLmluZGV4T2YoXCI8XCIsMSkpPDApOylkKz13LCQ9ZS5zbGljZShkKTtiPWUuc3Vic3RyaW5nKDAsZCl9ZDwwJiYoYj1lKSxiJiZDKGIubGVuZ3RoKSx0LmNoYXJzJiZiJiZ0LmNoYXJzKGIsYy1iLmxlbmd0aCxjKX1pZihlPT09bil7dC5jaGFycyYmdC5jaGFycyhlKTticmVha319ZnVuY3Rpb24gQyh0KXtjKz10LGU9ZS5zdWJzdHJpbmcodCl9ZnVuY3Rpb24geCgpe3ZhciB0PWUubWF0Y2goT28pO2lmKHQpe3ZhciBuLHIsaT17dGFnTmFtZTp0WzFdLGF0dHJzOltdLHN0YXJ0OmN9O2ZvcihDKHRbMF0ubGVuZ3RoKTshKG49ZS5tYXRjaChTbykpJiYocj1lLm1hdGNoKHhvKXx8ZS5tYXRjaChDbykpOylyLnN0YXJ0PWMsQyhyWzBdLmxlbmd0aCksci5lbmQ9YyxpLmF0dHJzLnB1c2gocik7aWYobilyZXR1cm4gaS51bmFyeVNsYXNoPW5bMV0sQyhuWzBdLmxlbmd0aCksaS5lbmQ9YyxpfX1mdW5jdGlvbiBrKGUpe3ZhciBuPWUudGFnTmFtZSxjPWUudW5hcnlTbGFzaDtvJiYoXCJwXCI9PT1yJiZ3byhuKSYmQShyKSxzKG4pJiZyPT09biYmQShuKSk7Zm9yKHZhciB1PWEobil8fCEhYyxsPWUuYXR0cnMubGVuZ3RoLGY9bmV3IEFycmF5KGwpLHA9MDtwPGw7cCsrKXt2YXIgZD1lLmF0dHJzW3BdLHY9ZFszXXx8ZFs0XXx8ZFs1XXx8XCJcIixoPVwiYVwiPT09biYmXCJocmVmXCI9PT1kWzFdP3Quc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOnQuc2hvdWxkRGVjb2RlTmV3bGluZXM7ZltwXT17bmFtZTpkWzFdLHZhbHVlOkhvKHYsaCl9fXV8fChpLnB1c2goe3RhZzpuLGxvd2VyQ2FzZWRUYWc6bi50b0xvd2VyQ2FzZSgpLGF0dHJzOmYsc3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9KSxyPW4pLHQuc3RhcnQmJnQuc3RhcnQobixmLHUsZS5zdGFydCxlLmVuZCl9ZnVuY3Rpb24gQShlLG4sbyl7dmFyIGEscztpZihudWxsPT1uJiYobj1jKSxudWxsPT1vJiYobz1jKSxlKWZvcihzPWUudG9Mb3dlckNhc2UoKSxhPWkubGVuZ3RoLTE7YT49MCYmaVthXS5sb3dlckNhc2VkVGFnIT09czthLS0pO2Vsc2UgYT0wO2lmKGE+PTApe2Zvcih2YXIgdT1pLmxlbmd0aC0xO3U+PWE7dS0tKXQuZW5kJiZ0LmVuZChpW3VdLnRhZyxuLG8pO2kubGVuZ3RoPWEscj1hJiZpW2EtMV0udGFnfWVsc2VcImJyXCI9PT1zP3Quc3RhcnQmJnQuc3RhcnQoZSxbXSwhMCxuLG8pOlwicFwiPT09cyYmKHQuc3RhcnQmJnQuc3RhcnQoZSxbXSwhMSxuLG8pLHQuZW5kJiZ0LmVuZChlLG4sbykpfUEoKX0oZSx7d2FybjpCbyxleHBlY3RIVE1MOnQuZXhwZWN0SFRNTCxpc1VuYXJ5VGFnOnQuaXNVbmFyeVRhZyxjYW5CZUxlZnRPcGVuVGFnOnQuY2FuQmVMZWZ0T3BlblRhZyxzaG91bGREZWNvZGVOZXdsaW5lczp0LnNob3VsZERlY29kZU5ld2xpbmVzLHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjp0LnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixzaG91bGRLZWVwQ29tbWVudDp0LmNvbW1lbnRzLG91dHB1dFNvdXJjZVJhbmdlOnQub3V0cHV0U291cmNlUmFuZ2Usc3RhcnQ6ZnVuY3Rpb24oZSxvLGEsbCxmKXt2YXIgcD1yJiZyLm5zfHxXbyhlKTtxJiZcInN2Z1wiPT09cCYmKG89ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTt5YS50ZXN0KHIubmFtZSl8fChyLm5hbWU9ci5uYW1lLnJlcGxhY2UoZ2EsXCJcIiksdC5wdXNoKHIpKX1yZXR1cm4gdH0obykpO3ZhciBkLHY9dWEoZSxvLHIpO3AmJih2Lm5zPXApLFwic3R5bGVcIiE9PShkPXYpLnRhZyYmKFwic2NyaXB0XCIhPT1kLnRhZ3x8ZC5hdHRyc01hcC50eXBlJiZcInRleHQvamF2YXNjcmlwdFwiIT09ZC5hdHRyc01hcC50eXBlKXx8dGUoKXx8KHYuZm9yYmlkZGVuPSEwKTtmb3IodmFyIGg9MDtoPFZvLmxlbmd0aDtoKyspdj1Wb1toXSh2LHQpfHx2O3N8fCghZnVuY3Rpb24oZSl7bnVsbCE9RnIoZSxcInYtcHJlXCIpJiYoZS5wcmU9ITApfSh2KSx2LnByZSYmKHM9ITApKSxKbyh2LnRhZykmJihjPSEwKSxzP2Z1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cnNMaXN0LG49dC5sZW5ndGg7aWYobilmb3IodmFyIHI9ZS5hdHRycz1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspcltpXT17bmFtZTp0W2ldLm5hbWUsdmFsdWU6SlNPTi5zdHJpbmdpZnkodFtpXS52YWx1ZSl9LG51bGwhPXRbaV0uc3RhcnQmJihyW2ldLnN0YXJ0PXRbaV0uc3RhcnQscltpXS5lbmQ9dFtpXS5lbmQpO2Vsc2UgZS5wcmV8fChlLnBsYWluPSEwKX0odik6di5wcm9jZXNzZWR8fChwYSh2KSxmdW5jdGlvbihlKXt2YXIgdD1GcihlLFwidi1pZlwiKTtpZih0KWUuaWY9dCxkYShlLHtleHA6dCxibG9jazplfSk7ZWxzZXtudWxsIT1GcihlLFwidi1lbHNlXCIpJiYoZS5lbHNlPSEwKTt2YXIgbj1GcihlLFwidi1lbHNlLWlmXCIpO24mJihlLmVsc2VpZj1uKX19KHYpLGZ1bmN0aW9uKGUpe251bGwhPUZyKGUsXCJ2LW9uY2VcIikmJihlLm9uY2U9ITApfSh2KSksbnx8KG49diksYT91KHYpOihyPXYsaS5wdXNoKHYpKX0sZW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1pW2kubGVuZ3RoLTFdO2kubGVuZ3RoLT0xLHI9aVtpLmxlbmd0aC0xXSx1KG8pfSxjaGFyczpmdW5jdGlvbihlLHQsbil7aWYociYmKCFxfHxcInRleHRhcmVhXCIhPT1yLnRhZ3x8ci5hdHRyc01hcC5wbGFjZWhvbGRlciE9PWUpKXt2YXIgaSx1LGwsZj1yLmNoaWxkcmVuO2lmKGU9Y3x8ZS50cmltKCk/XCJzY3JpcHRcIj09PShpPXIpLnRhZ3x8XCJzdHlsZVwiPT09aS50YWc/ZTpzYShlKTpmLmxlbmd0aD9hP1wiY29uZGVuc2VcIj09PWEmJm9hLnRlc3QoZSk/XCJcIjpcIiBcIjpvP1wiIFwiOlwiXCI6XCJcIiljfHxcImNvbmRlbnNlXCIhPT1hfHwoZT1lLnJlcGxhY2UoYWEsXCIgXCIpKSwhcyYmXCIgXCIhPT1lJiYodT1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/aG8odCk6cG87aWYobi50ZXN0KGUpKXtmb3IodmFyIHIsaSxvLGE9W10scz1bXSxjPW4ubGFzdEluZGV4PTA7cj1uLmV4ZWMoZSk7KXsoaT1yLmluZGV4KT5jJiYocy5wdXNoKG89ZS5zbGljZShjLGkpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKTt2YXIgdT1BcihyWzFdLnRyaW0oKSk7YS5wdXNoKFwiX3MoXCIrdStcIilcIikscy5wdXNoKHtcIkBiaW5kaW5nXCI6dX0pLGM9aStyWzBdLmxlbmd0aH1yZXR1cm4gYzxlLmxlbmd0aCYmKHMucHVzaChvPWUuc2xpY2UoYykpLGEucHVzaChKU09OLnN0cmluZ2lmeShvKSkpLHtleHByZXNzaW9uOmEuam9pbihcIitcIiksdG9rZW5zOnN9fX0oZSxVbykpP2w9e3R5cGU6MixleHByZXNzaW9uOnUuZXhwcmVzc2lvbix0b2tlbnM6dS50b2tlbnMsdGV4dDplfTpcIiBcIj09PWUmJmYubGVuZ3RoJiZcIiBcIj09PWZbZi5sZW5ndGgtMV0udGV4dHx8KGw9e3R5cGU6Myx0ZXh0OmV9KSxsJiZmLnB1c2gobCl9fSxjb21tZW50OmZ1bmN0aW9uKGUsdCxuKXtpZihyKXt2YXIgaT17dHlwZTozLHRleHQ6ZSxpc0NvbW1lbnQ6ITB9O3IuY2hpbGRyZW4ucHVzaChpKX19fSksbn1mdW5jdGlvbiBmYShlLHQpe3ZhciBuLHI7KHI9SXIobj1lLFwia2V5XCIpKSYmKG4ua2V5PXIpLGUucGxhaW49IWUua2V5JiYhZS5zY29wZWRTbG90cyYmIWUuYXR0cnNMaXN0Lmxlbmd0aCxmdW5jdGlvbihlKXt2YXIgdD1JcihlLFwicmVmXCIpO3QmJihlLnJlZj10LGUucmVmSW5Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtmb3IoO3Q7KXtpZih2b2lkIDAhPT10LmZvcilyZXR1cm4hMDt0PXQucGFyZW50fXJldHVybiExfShlKSl9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0O1widGVtcGxhdGVcIj09PWUudGFnPyh0PUZyKGUsXCJzY29wZVwiKSxlLnNsb3RTY29wZT10fHxGcihlLFwic2xvdC1zY29wZVwiKSk6KHQ9RnIoZSxcInNsb3Qtc2NvcGVcIikpJiYoZS5zbG90U2NvcGU9dCk7dmFyIG49SXIoZSxcInNsb3RcIik7biYmKGUuc2xvdFRhcmdldD0nXCJcIic9PT1uPydcImRlZmF1bHRcIic6bixlLnNsb3RUYXJnZXREeW5hbWljPSEoIWUuYXR0cnNNYXBbXCI6c2xvdFwiXSYmIWUuYXR0cnNNYXBbXCJ2LWJpbmQ6c2xvdFwiXSksXCJ0ZW1wbGF0ZVwiPT09ZS50YWd8fGUuc2xvdFNjb3BlfHxOcihlLFwic2xvdFwiLG4sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yYXdBdHRyc01hcFtcIjpcIit0XXx8ZS5yYXdBdHRyc01hcFtcInYtYmluZDpcIit0XXx8ZS5yYXdBdHRyc01hcFt0XX0oZSxcInNsb3RcIikpKTtpZihcInRlbXBsYXRlXCI9PT1lLnRhZyl7dmFyIHI9UHIoZSxpYSk7aWYocil7dmFyIGk9dmEociksbz1pLm5hbWUsYT1pLmR5bmFtaWM7ZS5zbG90VGFyZ2V0PW8sZS5zbG90VGFyZ2V0RHluYW1pYz1hLGUuc2xvdFNjb3BlPXIudmFsdWV8fGNhfX1lbHNle3ZhciBzPVByKGUsaWEpO2lmKHMpe3ZhciBjPWUuc2NvcGVkU2xvdHN8fChlLnNjb3BlZFNsb3RzPXt9KSx1PXZhKHMpLGw9dS5uYW1lLGY9dS5keW5hbWljLHA9Y1tsXT11YShcInRlbXBsYXRlXCIsW10sZSk7cC5zbG90VGFyZ2V0PWwscC5zbG90VGFyZ2V0RHluYW1pYz1mLHAuY2hpbGRyZW49ZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oZSl7aWYoIWUuc2xvdFNjb3BlKXJldHVybiBlLnBhcmVudD1wLCEwfSkscC5zbG90U2NvcGU9cy52YWx1ZXx8Y2EsZS5jaGlsZHJlbj1bXSxlLnBsYWluPSExfX19KGUpLGZ1bmN0aW9uKGUpe1wic2xvdFwiPT09ZS50YWcmJihlLnNsb3ROYW1lPUlyKGUsXCJuYW1lXCIpKX0oZSksZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9SXIoZSxcImlzXCIpKSYmKGUuY29tcG9uZW50PXQpO251bGwhPUZyKGUsXCJpbmxpbmUtdGVtcGxhdGVcIikmJihlLmlubGluZVRlbXBsYXRlPSEwKX0oZSk7Zm9yKHZhciBpPTA7aTx6by5sZW5ndGg7aSsrKWU9em9baV0oZSx0KXx8ZTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsYyx1PWUuYXR0cnNMaXN0O2Zvcih0PTAsbj11Lmxlbmd0aDt0PG47dCsrKWlmKHI9aT11W3RdLm5hbWUsbz11W3RdLnZhbHVlLEdvLnRlc3QocikpaWYoZS5oYXNCaW5kaW5ncz0hMCwoYT1oYShyLnJlcGxhY2UoR28sXCJcIikpKSYmKHI9ci5yZXBsYWNlKHJhLFwiXCIpKSxuYS50ZXN0KHIpKXI9ci5yZXBsYWNlKG5hLFwiXCIpLG89QXIobyksKGM9ZWEudGVzdChyKSkmJihyPXIuc2xpY2UoMSwtMSkpLGEmJihhLnByb3AmJiFjJiZcImlubmVySHRtbFwiPT09KHI9YihyKSkmJihyPVwiaW5uZXJIVE1MXCIpLGEuY2FtZWwmJiFjJiYocj1iKHIpKSxhLnN5bmMmJihzPUJyKG8sXCIkZXZlbnRcIiksYz9NcihlLCdcInVwZGF0ZTpcIisoJytyK1wiKVwiLHMsbnVsbCwhMSwwLHVbdF0sITApOihNcihlLFwidXBkYXRlOlwiK2IocikscyxudWxsLCExLDAsdVt0XSksQyhyKSE9PWIocikmJk1yKGUsXCJ1cGRhdGU6XCIrQyhyKSxzLG51bGwsITEsMCx1W3RdKSkpKSxhJiZhLnByb3B8fCFlLmNvbXBvbmVudCYmcW8oZS50YWcsZS5hdHRyc01hcC50eXBlLHIpP0VyKGUscixvLHVbdF0sYyk6TnIoZSxyLG8sdVt0XSxjKTtlbHNlIGlmKFpvLnRlc3Qocikpcj1yLnJlcGxhY2UoWm8sXCJcIiksKGM9ZWEudGVzdChyKSkmJihyPXIuc2xpY2UoMSwtMSkpLE1yKGUscixvLGEsITEsMCx1W3RdLGMpO2Vsc2V7dmFyIGw9KHI9ci5yZXBsYWNlKEdvLFwiXCIpKS5tYXRjaCh0YSksZj1sJiZsWzFdO2M9ITEsZiYmKHI9ci5zbGljZSgwLC0oZi5sZW5ndGgrMSkpLGVhLnRlc3QoZikmJihmPWYuc2xpY2UoMSwtMSksYz0hMCkpLERyKGUscixpLG8sZixjLGEsdVt0XSl9ZWxzZSBOcihlLHIsSlNPTi5zdHJpbmdpZnkobyksdVt0XSksIWUuY29tcG9uZW50JiZcIm11dGVkXCI9PT1yJiZxbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscikmJkVyKGUscixcInRydWVcIix1W3RdKX0oZSksZX1mdW5jdGlvbiBwYShlKXt2YXIgdDtpZih0PUZyKGUsXCJ2LWZvclwiKSl7dmFyIG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChYbyk7aWYoIXQpcmV0dXJuO3ZhciBuPXt9O24uZm9yPXRbMl0udHJpbSgpO3ZhciByPXRbMV0udHJpbSgpLnJlcGxhY2UoUW8sXCJcIiksaT1yLm1hdGNoKFlvKTtpPyhuLmFsaWFzPXIucmVwbGFjZShZbyxcIlwiKS50cmltKCksbi5pdGVyYXRvcjE9aVsxXS50cmltKCksaVsyXSYmKG4uaXRlcmF0b3IyPWlbMl0udHJpbSgpKSk6bi5hbGlhcz1yO3JldHVybiBufSh0KTtuJiZBKGUsbil9fWZ1bmN0aW9uIGRhKGUsdCl7ZS5pZkNvbmRpdGlvbnN8fChlLmlmQ29uZGl0aW9ucz1bXSksZS5pZkNvbmRpdGlvbnMucHVzaCh0KX1mdW5jdGlvbiB2YShlKXt2YXIgdD1lLm5hbWUucmVwbGFjZShpYSxcIlwiKTtyZXR1cm4gdHx8XCIjXCIhPT1lLm5hbWVbMF0mJih0PVwiZGVmYXVsdFwiKSxlYS50ZXN0KHQpP3tuYW1lOnQuc2xpY2UoMSwtMSksZHluYW1pYzohMH06e25hbWU6J1wiJyt0KydcIicsZHluYW1pYzohMX19ZnVuY3Rpb24gaGEoZSl7dmFyIHQ9ZS5tYXRjaChyYSk7aWYodCl7dmFyIG49e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihlKXtuW2Uuc2xpY2UoMSldPSEwfSksbn19ZnVuY3Rpb24gbWEoZSl7Zm9yKHZhciB0PXt9LG49MCxyPWUubGVuZ3RoO248cjtuKyspdFtlW25dLm5hbWVdPWVbbl0udmFsdWU7cmV0dXJuIHR9dmFyIHlhPS9eeG1sbnM6TlNcXGQrLyxnYT0vXk5TXFxkKzovO2Z1bmN0aW9uIF9hKGUpe3JldHVybiB1YShlLnRhZyxlLmF0dHJzTGlzdC5zbGljZSgpLGUucGFyZW50KX12YXIgYmE9W21vLGdvLHtwcmVUcmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7aWYoXCJpbnB1dFwiPT09ZS50YWcpe3ZhciBuLHI9ZS5hdHRyc01hcDtpZighcltcInYtbW9kZWxcIl0pcmV0dXJuO2lmKChyW1wiOnR5cGVcIl18fHJbXCJ2LWJpbmQ6dHlwZVwiXSkmJihuPUlyKGUsXCJ0eXBlXCIpKSxyLnR5cGV8fG58fCFyW1widi1iaW5kXCJdfHwobj1cIihcIityW1widi1iaW5kXCJdK1wiKS50eXBlXCIpLG4pe3ZhciBpPUZyKGUsXCJ2LWlmXCIsITApLG89aT9cIiYmKFwiK2krXCIpXCI6XCJcIixhPW51bGwhPUZyKGUsXCJ2LWVsc2VcIiwhMCkscz1GcihlLFwidi1lbHNlLWlmXCIsITApLGM9X2EoZSk7cGEoYyksanIoYyxcInR5cGVcIixcImNoZWNrYm94XCIpLGZhKGMsdCksYy5wcm9jZXNzZWQ9ITAsYy5pZj1cIihcIituK1wiKT09PSdjaGVja2JveCdcIitvLGRhKGMse2V4cDpjLmlmLGJsb2NrOmN9KTt2YXIgdT1fYShlKTtGcih1LFwidi1mb3JcIiwhMCksanIodSxcInR5cGVcIixcInJhZGlvXCIpLGZhKHUsdCksZGEoYyx7ZXhwOlwiKFwiK24rXCIpPT09J3JhZGlvJ1wiK28sYmxvY2s6dX0pO3ZhciBsPV9hKGUpO3JldHVybiBGcihsLFwidi1mb3JcIiwhMCksanIobCxcIjp0eXBlXCIsbiksZmEobCx0KSxkYShjLHtleHA6aSxibG9jazpsfSksYT9jLmVsc2U9ITA6cyYmKGMuZWxzZWlmPXMpLGN9fX19XTt2YXIgJGEsd2EsQ2E9e2V4cGVjdEhUTUw6ITAsbW9kdWxlczpiYSxkaXJlY3RpdmVzOnttb2RlbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZSxpPXQubW9kaWZpZXJzLG89ZS50YWcsYT1lLmF0dHJzTWFwLnR5cGU7aWYoZS5jb21wb25lbnQpcmV0dXJuIEhyKGUscixpKSwhMTtpZihcInNlbGVjdFwiPT09bykhZnVuY3Rpb24oZSx0LG4pe3ZhciByPSd2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFwiX3ZhbHVlXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZTtyZXR1cm4gJysobiYmbi5udW1iZXI/XCJfbih2YWwpXCI6XCJ2YWxcIikrXCJ9KTtcIjtyPXIrXCIgXCIrQnIodCxcIiRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXVwiKSxNcihlLFwiY2hhbmdlXCIscixudWxsLCEwKX0oZSxyLGkpO2Vsc2UgaWYoXCJpbnB1dFwiPT09byYmXCJjaGVja2JveFwiPT09YSkhZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9SXIoZSxcInZhbHVlXCIpfHxcIm51bGxcIixvPUlyKGUsXCJ0cnVlLXZhbHVlXCIpfHxcInRydWVcIixhPUlyKGUsXCJmYWxzZS12YWx1ZVwiKXx8XCJmYWxzZVwiO0VyKGUsXCJjaGVja2VkXCIsXCJBcnJheS5pc0FycmF5KFwiK3QrXCIpP19pKFwiK3QrXCIsXCIraStcIik+LTFcIisoXCJ0cnVlXCI9PT1vP1wiOihcIit0K1wiKVwiOlwiOl9xKFwiK3QrXCIsXCIrbytcIilcIikpLE1yKGUsXCJjaGFuZ2VcIixcInZhciAkJGE9XCIrdCtcIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oXCIrbytcIik6KFwiK2ErXCIpO2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7dmFyICQkdj1cIisocj9cIl9uKFwiK2krXCIpXCI6aSkrXCIsJCRpPV9pKCQkYSwkJHYpO2lmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIitCcih0LFwiJCRhLmNvbmNhdChbJCR2XSlcIikrXCIpfWVsc2V7JCRpPi0xJiYoXCIrQnIodCxcIiQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpXCIpK1wiKX19ZWxzZXtcIitCcih0LFwiJCRjXCIpK1wifVwiLG51bGwsITApfShlLHIsaSk7ZWxzZSBpZihcImlucHV0XCI9PT1vJiZcInJhZGlvXCI9PT1hKSFmdW5jdGlvbihlLHQsbil7dmFyIHI9biYmbi5udW1iZXIsaT1JcihlLFwidmFsdWVcIil8fFwibnVsbFwiO0VyKGUsXCJjaGVja2VkXCIsXCJfcShcIit0K1wiLFwiKyhpPXI/XCJfbihcIitpK1wiKVwiOmkpK1wiKVwiKSxNcihlLFwiY2hhbmdlXCIsQnIodCxpKSxudWxsLCEwKX0oZSxyLGkpO2Vsc2UgaWYoXCJpbnB1dFwiPT09b3x8XCJ0ZXh0YXJlYVwiPT09bykhZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuYXR0cnNNYXAudHlwZSxpPW58fHt9LG89aS5sYXp5LGE9aS5udW1iZXIscz1pLnRyaW0sYz0hbyYmXCJyYW5nZVwiIT09cix1PW8/XCJjaGFuZ2VcIjpcInJhbmdlXCI9PT1yP1dyOlwiaW5wdXRcIixsPVwiJGV2ZW50LnRhcmdldC52YWx1ZVwiO3MmJihsPVwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIiksYSYmKGw9XCJfbihcIitsK1wiKVwiKTt2YXIgZj1Ccih0LGwpO2MmJihmPVwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuO1wiK2YpLEVyKGUsXCJ2YWx1ZVwiLFwiKFwiK3QrXCIpXCIpLE1yKGUsdSxmLG51bGwsITApLChzfHxhKSYmTXIoZSxcImJsdXJcIixcIiRmb3JjZVVwZGF0ZSgpXCIpfShlLHIsaSk7ZWxzZSBpZighRi5pc1Jlc2VydmVkVGFnKG8pKXJldHVybiBIcihlLHIsaSksITE7cmV0dXJuITB9LHRleHQ6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZFcihlLFwidGV4dENvbnRlbnRcIixcIl9zKFwiK3QudmFsdWUrXCIpXCIsdCl9LGh0bWw6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZFcihlLFwiaW5uZXJIVE1MXCIsXCJfcyhcIit0LnZhbHVlK1wiKVwiLHQpfX0saXNQcmVUYWc6ZnVuY3Rpb24oZSl7cmV0dXJuXCJwcmVcIj09PWV9LGlzVW5hcnlUYWc6Ym8sbXVzdFVzZVByb3A6am4sY2FuQmVMZWZ0T3BlblRhZzokbyxpc1Jlc2VydmVkVGFnOlduLGdldFRhZ05hbWVzcGFjZTpabixzdGF0aWNLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0LnN0YXRpY0tleXN8fFtdKX0sW10pLmpvaW4oXCIsXCIpfShiYSl9LHhhPWcoZnVuY3Rpb24oZSl7cmV0dXJuIHAoXCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcFwiKyhlP1wiLFwiK2U6XCJcIikpfSk7ZnVuY3Rpb24ga2EoZSx0KXtlJiYoJGE9eGEodC5zdGF0aWNLZXlzfHxcIlwiKSx3YT10LmlzUmVzZXJ2ZWRUYWd8fFQsZnVuY3Rpb24gZSh0KXt0LnN0YXRpYz1mdW5jdGlvbihlKXtpZigyPT09ZS50eXBlKXJldHVybiExO2lmKDM9PT1lLnR5cGUpcmV0dXJuITA7cmV0dXJuISghZS5wcmUmJihlLmhhc0JpbmRpbmdzfHxlLmlmfHxlLmZvcnx8ZChlLnRhZyl8fCF3YShlLnRhZyl8fGZ1bmN0aW9uKGUpe2Zvcig7ZS5wYXJlbnQ7KXtpZihcInRlbXBsYXRlXCIhPT0oZT1lLnBhcmVudCkudGFnKXJldHVybiExO2lmKGUuZm9yKXJldHVybiEwfXJldHVybiExfShlKXx8IU9iamVjdC5rZXlzKGUpLmV2ZXJ5KCRhKSkpfSh0KTtpZigxPT09dC50eXBlKXtpZighd2EodC50YWcpJiZcInNsb3RcIiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwW1wiaW5saW5lLXRlbXBsYXRlXCJdKXJldHVybjtmb3IodmFyIG49MCxyPXQuY2hpbGRyZW4ubGVuZ3RoO248cjtuKyspe3ZhciBpPXQuY2hpbGRyZW5bbl07ZShpKSxpLnN0YXRpY3x8KHQuc3RhdGljPSExKX1pZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKXt2YXIgcz10LmlmQ29uZGl0aW9uc1tvXS5ibG9jaztlKHMpLHMuc3RhdGljfHwodC5zdGF0aWM9ITEpfX19KGUpLGZ1bmN0aW9uIGUodCxuKXtpZigxPT09dC50eXBlKXtpZigodC5zdGF0aWN8fHQub25jZSkmJih0LnN0YXRpY0luRm9yPW4pLHQuc3RhdGljJiZ0LmNoaWxkcmVuLmxlbmd0aCYmKDEhPT10LmNoaWxkcmVuLmxlbmd0aHx8MyE9PXQuY2hpbGRyZW5bMF0udHlwZSkpcmV0dXJuIHZvaWQodC5zdGF0aWNSb290PSEwKTtpZih0LnN0YXRpY1Jvb3Q9ITEsdC5jaGlsZHJlbilmb3IodmFyIHI9MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO3I8aTtyKyspZSh0LmNoaWxkcmVuW3JdLG58fCEhdC5mb3IpO2lmKHQuaWZDb25kaXRpb25zKWZvcih2YXIgbz0xLGE9dC5pZkNvbmRpdGlvbnMubGVuZ3RoO288YTtvKyspZSh0LmlmQ29uZGl0aW9uc1tvXS5ibG9jayxuKX19KGUsITEpKX12YXIgQWE9L14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb24oPzpcXHMrW1xcdyRdKyk/XFxzKlxcKC8sT2E9L1xcKFteKV0qP1xcKTsqJC8sU2E9L15bQS1aYS16XyRdW1xcdyRdKig/OlxcLltBLVphLXpfJF1bXFx3JF0qfFxcWydbXiddKj8nXXxcXFtcIlteXCJdKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSokLyxUYT17ZXNjOjI3LHRhYjo5LGVudGVyOjEzLHNwYWNlOjMyLHVwOjM4LGxlZnQ6MzcscmlnaHQ6MzksZG93bjo0MCxkZWxldGU6WzgsNDZdfSxFYT17ZXNjOltcIkVzY1wiLFwiRXNjYXBlXCJdLHRhYjpcIlRhYlwiLGVudGVyOlwiRW50ZXJcIixzcGFjZTpbXCIgXCIsXCJTcGFjZWJhclwiXSx1cDpbXCJVcFwiLFwiQXJyb3dVcFwiXSxsZWZ0OltcIkxlZnRcIixcIkFycm93TGVmdFwiXSxyaWdodDpbXCJSaWdodFwiLFwiQXJyb3dSaWdodFwiXSxkb3duOltcIkRvd25cIixcIkFycm93RG93blwiXSxkZWxldGU6W1wiQmFja3NwYWNlXCIsXCJEZWxldGVcIixcIkRlbFwiXX0sTmE9ZnVuY3Rpb24oZSl7cmV0dXJuXCJpZihcIitlK1wiKXJldHVybiBudWxsO1wifSxqYT17c3RvcDpcIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIixwcmV2ZW50OlwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XCIsc2VsZjpOYShcIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLGN0cmw6TmEoXCIhJGV2ZW50LmN0cmxLZXlcIiksc2hpZnQ6TmEoXCIhJGV2ZW50LnNoaWZ0S2V5XCIpLGFsdDpOYShcIiEkZXZlbnQuYWx0S2V5XCIpLG1ldGE6TmEoXCIhJGV2ZW50Lm1ldGFLZXlcIiksbGVmdDpOYShcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAwXCIpLG1pZGRsZTpOYShcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIpLHJpZ2h0Ok5hKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIil9O2Z1bmN0aW9uIERhKGUsdCl7dmFyIG49dD9cIm5hdGl2ZU9uOlwiOlwib246XCIscj1cIlwiLGk9XCJcIjtmb3IodmFyIG8gaW4gZSl7dmFyIGE9TGEoZVtvXSk7ZVtvXSYmZVtvXS5keW5hbWljP2krPW8rXCIsXCIrYStcIixcIjpyKz0nXCInK28rJ1wiOicrYStcIixcIn1yZXR1cm4gcj1cIntcIityLnNsaWNlKDAsLTEpK1wifVwiLGk/bitcIl9kKFwiK3IrXCIsW1wiK2kuc2xpY2UoMCwtMSkrXCJdKVwiOm4rcn1mdW5jdGlvbiBMYShlKXtpZighZSlyZXR1cm5cImZ1bmN0aW9uKCl7fVwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuXCJbXCIrZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIExhKGUpfSkuam9pbihcIixcIikrXCJdXCI7dmFyIHQ9U2EudGVzdChlLnZhbHVlKSxuPUFhLnRlc3QoZS52YWx1ZSkscj1TYS50ZXN0KGUudmFsdWUucmVwbGFjZShPYSxcIlwiKSk7aWYoZS5tb2RpZmllcnMpe3ZhciBpPVwiXCIsbz1cIlwiLGE9W107Zm9yKHZhciBzIGluIGUubW9kaWZpZXJzKWlmKGphW3NdKW8rPWphW3NdLFRhW3NdJiZhLnB1c2gocyk7ZWxzZSBpZihcImV4YWN0XCI9PT1zKXt2YXIgYz1lLm1vZGlmaWVycztvKz1OYShbXCJjdHJsXCIsXCJzaGlmdFwiLFwiYWx0XCIsXCJtZXRhXCJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hY1tlXX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cIiRldmVudC5cIitlK1wiS2V5XCJ9KS5qb2luKFwifHxcIikpfWVsc2UgYS5wdXNoKHMpO3JldHVybiBhLmxlbmd0aCYmKGkrPWZ1bmN0aW9uKGUpe3JldHVyblwiaWYoISRldmVudC50eXBlLmluZGV4T2YoJ2tleScpJiZcIitlLm1hcChNYSkuam9pbihcIiYmXCIpK1wiKXJldHVybiBudWxsO1wifShhKSksbyYmKGkrPW8pLFwiZnVuY3Rpb24oJGV2ZW50KXtcIitpKyh0P1wicmV0dXJuIFwiK2UudmFsdWUrXCIoJGV2ZW50KVwiOm4/XCJyZXR1cm4gKFwiK2UudmFsdWUrXCIpKCRldmVudClcIjpyP1wicmV0dXJuIFwiK2UudmFsdWU6ZS52YWx1ZSkrXCJ9XCJ9cmV0dXJuIHR8fG4/ZS52YWx1ZTpcImZ1bmN0aW9uKCRldmVudCl7XCIrKHI/XCJyZXR1cm4gXCIrZS52YWx1ZTplLnZhbHVlKStcIn1cIn1mdW5jdGlvbiBNYShlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0KXJldHVyblwiJGV2ZW50LmtleUNvZGUhPT1cIit0O3ZhciBuPVRhW2VdLHI9RWFbZV07cmV0dXJuXCJfaygkZXZlbnQua2V5Q29kZSxcIitKU09OLnN0cmluZ2lmeShlKStcIixcIitKU09OLnN0cmluZ2lmeShuKStcIiwkZXZlbnQua2V5LFwiK0pTT04uc3RyaW5naWZ5KHIpK1wiKVwifXZhciBJYT17b246ZnVuY3Rpb24oZSx0KXtlLndyYXBMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuXCJfZyhcIitlK1wiLFwiK3QudmFsdWUrXCIpXCJ9fSxiaW5kOmZ1bmN0aW9uKGUsdCl7ZS53cmFwRGF0YT1mdW5jdGlvbihuKXtyZXR1cm5cIl9iKFwiK24rXCIsJ1wiK2UudGFnK1wiJyxcIit0LnZhbHVlK1wiLFwiKyh0Lm1vZGlmaWVycyYmdC5tb2RpZmllcnMucHJvcD9cInRydWVcIjpcImZhbHNlXCIpKyh0Lm1vZGlmaWVycyYmdC5tb2RpZmllcnMuc3luYz9cIix0cnVlXCI6XCJcIikrXCIpXCJ9fSxjbG9hazpTfSxGYT1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLndhcm49ZS53YXJufHxTcix0aGlzLnRyYW5zZm9ybXM9VHIoZS5tb2R1bGVzLFwidHJhbnNmb3JtQ29kZVwiKSx0aGlzLmRhdGFHZW5GbnM9VHIoZS5tb2R1bGVzLFwiZ2VuRGF0YVwiKSx0aGlzLmRpcmVjdGl2ZXM9QShBKHt9LElhKSxlLmRpcmVjdGl2ZXMpO3ZhciB0PWUuaXNSZXNlcnZlZFRhZ3x8VDt0aGlzLm1heWJlQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiEhZS5jb21wb25lbnR8fCF0KGUudGFnKX0sdGhpcy5vbmNlSWQ9MCx0aGlzLnN0YXRpY1JlbmRlckZucz1bXSx0aGlzLnByZT0hMX07ZnVuY3Rpb24gUGEoZSx0KXt2YXIgbj1uZXcgRmEodCk7cmV0dXJue3JlbmRlcjpcIndpdGgodGhpcyl7cmV0dXJuIFwiKyhlP1JhKGUsbik6J19jKFwiZGl2XCIpJykrXCJ9XCIsc3RhdGljUmVuZGVyRm5zOm4uc3RhdGljUmVuZGVyRm5zfX1mdW5jdGlvbiBSYShlLHQpe2lmKGUucGFyZW50JiYoZS5wcmU9ZS5wcmV8fGUucGFyZW50LnByZSksZS5zdGF0aWNSb290JiYhZS5zdGF0aWNQcm9jZXNzZWQpcmV0dXJuIEhhKGUsdCk7aWYoZS5vbmNlJiYhZS5vbmNlUHJvY2Vzc2VkKXJldHVybiBCYShlLHQpO2lmKGUuZm9yJiYhZS5mb3JQcm9jZXNzZWQpcmV0dXJuIHphKGUsdCk7aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIFVhKGUsdCk7aWYoXCJ0ZW1wbGF0ZVwiIT09ZS50YWd8fGUuc2xvdFRhcmdldHx8dC5wcmUpe2lmKFwic2xvdFwiPT09ZS50YWcpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zbG90TmFtZXx8J1wiZGVmYXVsdFwiJyxyPXFhKGUsdCksaT1cIl90KFwiK24rKHI/XCIsXCIrcjpcIlwiKSxvPWUuYXR0cnN8fGUuZHluYW1pY0F0dHJzP0dhKChlLmF0dHJzfHxbXSkuY29uY2F0KGUuZHluYW1pY0F0dHJzfHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOmIoZS5uYW1lKSx2YWx1ZTplLnZhbHVlLGR5bmFtaWM6ZS5keW5hbWljfX0pKTpudWxsLGE9ZS5hdHRyc01hcFtcInYtYmluZFwiXTshbyYmIWF8fHJ8fChpKz1cIixudWxsXCIpO28mJihpKz1cIixcIitvKTthJiYoaSs9KG8/XCJcIjpcIixudWxsXCIpK1wiLFwiK2EpO3JldHVybiBpK1wiKVwifShlLHQpO3ZhciBuO2lmKGUuY29tcG9uZW50KW49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuaW5saW5lVGVtcGxhdGU/bnVsbDpxYSh0LG4sITApO3JldHVyblwiX2MoXCIrZStcIixcIitWYSh0LG4pKyhyP1wiLFwiK3I6XCJcIikrXCIpXCJ9KGUuY29tcG9uZW50LGUsdCk7ZWxzZXt2YXIgcjsoIWUucGxhaW58fGUucHJlJiZ0Lm1heWJlQ29tcG9uZW50KGUpKSYmKHI9VmEoZSx0KSk7dmFyIGk9ZS5pbmxpbmVUZW1wbGF0ZT9udWxsOnFhKGUsdCwhMCk7bj1cIl9jKCdcIitlLnRhZytcIidcIisocj9cIixcIityOlwiXCIpKyhpP1wiLFwiK2k6XCJcIikrXCIpXCJ9Zm9yKHZhciBvPTA7bzx0LnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPXQudHJhbnNmb3Jtc1tvXShlLG4pO3JldHVybiBufXJldHVybiBxYShlLHQpfHxcInZvaWQgMFwifWZ1bmN0aW9uIEhhKGUsdCl7ZS5zdGF0aWNQcm9jZXNzZWQ9ITA7dmFyIG49dC5wcmU7cmV0dXJuIGUucHJlJiYodC5wcmU9ZS5wcmUpLHQuc3RhdGljUmVuZGVyRm5zLnB1c2goXCJ3aXRoKHRoaXMpe3JldHVybiBcIitSYShlLHQpK1wifVwiKSx0LnByZT1uLFwiX20oXCIrKHQuc3RhdGljUmVuZGVyRm5zLmxlbmd0aC0xKSsoZS5zdGF0aWNJbkZvcj9cIix0cnVlXCI6XCJcIikrXCIpXCJ9ZnVuY3Rpb24gQmEoZSx0KXtpZihlLm9uY2VQcm9jZXNzZWQ9ITAsZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIFVhKGUsdCk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciBuPVwiXCIscj1lLnBhcmVudDtyOyl7aWYoci5mb3Ipe249ci5rZXk7YnJlYWt9cj1yLnBhcmVudH1yZXR1cm4gbj9cIl9vKFwiK1JhKGUsdCkrXCIsXCIrdC5vbmNlSWQrKytcIixcIituK1wiKVwiOlJhKGUsdCl9cmV0dXJuIEhhKGUsdCl9ZnVuY3Rpb24gVWEoZSx0LG4scil7cmV0dXJuIGUuaWZQcm9jZXNzZWQ9ITAsZnVuY3Rpb24gZSh0LG4scixpKXtpZighdC5sZW5ndGgpcmV0dXJuIGl8fFwiX2UoKVwiO3ZhciBvPXQuc2hpZnQoKTtyZXR1cm4gby5leHA/XCIoXCIrby5leHArXCIpP1wiK2Eoby5ibG9jaykrXCI6XCIrZSh0LG4scixpKTpcIlwiK2Eoby5ibG9jayk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gcj9yKGUsbik6ZS5vbmNlP0JhKGUsbik6UmEoZSxuKX19KGUuaWZDb25kaXRpb25zLnNsaWNlKCksdCxuLHIpfWZ1bmN0aW9uIHphKGUsdCxuLHIpe3ZhciBpPWUuZm9yLG89ZS5hbGlhcyxhPWUuaXRlcmF0b3IxP1wiLFwiK2UuaXRlcmF0b3IxOlwiXCIscz1lLml0ZXJhdG9yMj9cIixcIitlLml0ZXJhdG9yMjpcIlwiO3JldHVybiBlLmZvclByb2Nlc3NlZD0hMCwocnx8XCJfbFwiKStcIigoXCIraStcIiksZnVuY3Rpb24oXCIrbythK3MrXCIpe3JldHVybiBcIisobnx8UmEpKGUsdCkrXCJ9KVwifWZ1bmN0aW9uIFZhKGUsdCl7dmFyIG49XCJ7XCIscj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlyZWN0aXZlcztpZighbilyZXR1cm47dmFyIHIsaSxvLGEscz1cImRpcmVjdGl2ZXM6W1wiLGM9ITE7Zm9yKHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe289bltyXSxhPSEwO3ZhciB1PXQuZGlyZWN0aXZlc1tvLm5hbWVdO3UmJihhPSEhdShlLG8sdC53YXJuKSksYSYmKGM9ITAscys9J3tuYW1lOlwiJytvLm5hbWUrJ1wiLHJhd05hbWU6XCInK28ucmF3TmFtZSsnXCInKyhvLnZhbHVlP1wiLHZhbHVlOihcIitvLnZhbHVlK1wiKSxleHByZXNzaW9uOlwiK0pTT04uc3RyaW5naWZ5KG8udmFsdWUpOlwiXCIpKyhvLmFyZz9cIixhcmc6XCIrKG8uaXNEeW5hbWljQXJnP28uYXJnOidcIicrby5hcmcrJ1wiJyk6XCJcIikrKG8ubW9kaWZpZXJzP1wiLG1vZGlmaWVyczpcIitKU09OLnN0cmluZ2lmeShvLm1vZGlmaWVycyk6XCJcIikrXCJ9LFwiKX1pZihjKXJldHVybiBzLnNsaWNlKDAsLTEpK1wiXVwifShlLHQpO3ImJihuKz1yK1wiLFwiKSxlLmtleSYmKG4rPVwia2V5OlwiK2Uua2V5K1wiLFwiKSxlLnJlZiYmKG4rPVwicmVmOlwiK2UucmVmK1wiLFwiKSxlLnJlZkluRm9yJiYobis9XCJyZWZJbkZvcjp0cnVlLFwiKSxlLnByZSYmKG4rPVwicHJlOnRydWUsXCIpLGUuY29tcG9uZW50JiYobis9J3RhZzpcIicrZS50YWcrJ1wiLCcpO2Zvcih2YXIgaT0wO2k8dC5kYXRhR2VuRm5zLmxlbmd0aDtpKyspbis9dC5kYXRhR2VuRm5zW2ldKGUpO2lmKGUuYXR0cnMmJihuKz1cImF0dHJzOlwiK0dhKGUuYXR0cnMpK1wiLFwiKSxlLnByb3BzJiYobis9XCJkb21Qcm9wczpcIitHYShlLnByb3BzKStcIixcIiksZS5ldmVudHMmJihuKz1EYShlLmV2ZW50cywhMSkrXCIsXCIpLGUubmF0aXZlRXZlbnRzJiYobis9RGEoZS5uYXRpdmVFdmVudHMsITApK1wiLFwiKSxlLnNsb3RUYXJnZXQmJiFlLnNsb3RTY29wZSYmKG4rPVwic2xvdDpcIitlLnNsb3RUYXJnZXQrXCIsXCIpLGUuc2NvcGVkU2xvdHMmJihuKz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5mb3J8fE9iamVjdC5rZXlzKHQpLnNvbWUoZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtyZXR1cm4gbi5zbG90VGFyZ2V0RHluYW1pY3x8bi5pZnx8bi5mb3J8fEthKG4pfSksaT0hIWUuaWY7aWYoIXIpZm9yKHZhciBvPWUucGFyZW50O287KXtpZihvLnNsb3RTY29wZSYmby5zbG90U2NvcGUhPT1jYXx8by5mb3Ipe3I9ITA7YnJlYWt9by5pZiYmKGk9ITApLG89by5wYXJlbnR9dmFyIGE9T2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKYSh0W2VdLG4pfSkuam9pbihcIixcIik7cmV0dXJuXCJzY29wZWRTbG90czpfdShbXCIrYStcIl1cIisocj9cIixudWxsLHRydWVcIjpcIlwiKSsoIXImJmk/XCIsbnVsbCxmYWxzZSxcIitmdW5jdGlvbihlKXt2YXIgdD01MzgxLG49ZS5sZW5ndGg7Zm9yKDtuOyl0PTMzKnReZS5jaGFyQ29kZUF0KC0tbik7cmV0dXJuIHQ+Pj4wfShhKTpcIlwiKStcIilcIn0oZSxlLnNjb3BlZFNsb3RzLHQpK1wiLFwiKSxlLm1vZGVsJiYobis9XCJtb2RlbDp7dmFsdWU6XCIrZS5tb2RlbC52YWx1ZStcIixjYWxsYmFjazpcIitlLm1vZGVsLmNhbGxiYWNrK1wiLGV4cHJlc3Npb246XCIrZS5tb2RlbC5leHByZXNzaW9uK1wifSxcIiksZS5pbmxpbmVUZW1wbGF0ZSl7dmFyIG89ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoaWxkcmVuWzBdO2lmKG4mJjE9PT1uLnR5cGUpe3ZhciByPVBhKG4sdC5vcHRpb25zKTtyZXR1cm5cImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXtcIityLnJlbmRlcitcIn0sc3RhdGljUmVuZGVyRm5zOltcIityLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvbigpe1wiK2UrXCJ9XCJ9KS5qb2luKFwiLFwiKStcIl19XCJ9fShlLHQpO28mJihuKz1vK1wiLFwiKX1yZXR1cm4gbj1uLnJlcGxhY2UoLywkLyxcIlwiKStcIn1cIixlLmR5bmFtaWNBdHRycyYmKG49XCJfYihcIituKycsXCInK2UudGFnKydcIiwnK0dhKGUuZHluYW1pY0F0dHJzKStcIilcIiksZS53cmFwRGF0YSYmKG49ZS53cmFwRGF0YShuKSksZS53cmFwTGlzdGVuZXJzJiYobj1lLndyYXBMaXN0ZW5lcnMobikpLG59ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIDE9PT1lLnR5cGUmJihcInNsb3RcIj09PWUudGFnfHxlLmNoaWxkcmVuLnNvbWUoS2EpKX1mdW5jdGlvbiBKYShlLHQpe3ZhciBuPWUuYXR0cnNNYXBbXCJzbG90LXNjb3BlXCJdO2lmKGUuaWYmJiFlLmlmUHJvY2Vzc2VkJiYhbilyZXR1cm4gVWEoZSx0LEphLFwibnVsbFwiKTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiB6YShlLHQsSmEpO3ZhciByPWUuc2xvdFNjb3BlPT09Y2E/XCJcIjpTdHJpbmcoZS5zbG90U2NvcGUpLGk9XCJmdW5jdGlvbihcIityK1wiKXtyZXR1cm4gXCIrKFwidGVtcGxhdGVcIj09PWUudGFnP2UuaWYmJm4/XCIoXCIrZS5pZitcIik/XCIrKHFhKGUsdCl8fFwidW5kZWZpbmVkXCIpK1wiOnVuZGVmaW5lZFwiOnFhKGUsdCl8fFwidW5kZWZpbmVkXCI6UmEoZSx0KSkrXCJ9XCIsbz1yP1wiXCI6XCIscHJveHk6dHJ1ZVwiO3JldHVyblwie2tleTpcIisoZS5zbG90VGFyZ2V0fHwnXCJkZWZhdWx0XCInKStcIixmbjpcIitpK28rXCJ9XCJ9ZnVuY3Rpb24gcWEoZSx0LG4scixpKXt2YXIgbz1lLmNoaWxkcmVuO2lmKG8ubGVuZ3RoKXt2YXIgYT1vWzBdO2lmKDE9PT1vLmxlbmd0aCYmYS5mb3ImJlwidGVtcGxhdGVcIiE9PWEudGFnJiZcInNsb3RcIiE9PWEudGFnKXt2YXIgcz1uP3QubWF5YmVDb21wb25lbnQoYSk/XCIsMVwiOlwiLDBcIjpcIlwiO3JldHVyblwiXCIrKHJ8fFJhKShhLHQpK3N9dmFyIGM9bj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigxPT09aS50eXBlKXtpZihXYShpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIFdhKGUuYmxvY2spfSkpe249MjticmVha30odChpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5ibG9jayl9KSkmJihuPTEpfX1yZXR1cm4gbn0obyx0Lm1heWJlQ29tcG9uZW50KTowLHU9aXx8WmE7cmV0dXJuXCJbXCIrby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSx0KX0pLmpvaW4oXCIsXCIpK1wiXVwiKyhjP1wiLFwiK2M6XCJcIil9fWZ1bmN0aW9uIFdhKGUpe3JldHVybiB2b2lkIDAhPT1lLmZvcnx8XCJ0ZW1wbGF0ZVwiPT09ZS50YWd8fFwic2xvdFwiPT09ZS50YWd9ZnVuY3Rpb24gWmEoZSx0KXtyZXR1cm4gMT09PWUudHlwZT9SYShlLHQpOjM9PT1lLnR5cGUmJmUuaXNDb21tZW50PyhyPWUsXCJfZShcIitKU09OLnN0cmluZ2lmeShyLnRleHQpK1wiKVwiKTpcIl92KFwiKygyPT09KG49ZSkudHlwZT9uLmV4cHJlc3Npb246WGEoSlNPTi5zdHJpbmdpZnkobi50ZXh0KSkpK1wiKVwiO3ZhciBuLHJ9ZnVuY3Rpb24gR2EoZSl7Zm9yKHZhciB0PVwiXCIsbj1cIlwiLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxvPVhhKGkudmFsdWUpO2kuZHluYW1pYz9uKz1pLm5hbWUrXCIsXCIrbytcIixcIjp0Kz0nXCInK2kubmFtZSsnXCI6JytvK1wiLFwifXJldHVybiB0PVwie1wiK3Quc2xpY2UoMCwtMSkrXCJ9XCIsbj9cIl9kKFwiK3QrXCIsW1wiK24uc2xpY2UoMCwtMSkrXCJdKVwiOnR9ZnVuY3Rpb24gWGEoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFx1MjAyOC9nLFwiXFxcXHUyMDI4XCIpLnJlcGxhY2UoL1xcdTIwMjkvZyxcIlxcXFx1MjAyOVwiKX1uZXcgUmVnRXhwKFwiXFxcXGJcIitcImRvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3Qsc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LGV4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHNcIi5zcGxpdChcIixcIikuam9pbihcIlxcXFxifFxcXFxiXCIpK1wiXFxcXGJcIik7ZnVuY3Rpb24gWWEoZSx0KXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbihlKX1jYXRjaChuKXtyZXR1cm4gdC5wdXNoKHtlcnI6bixjb2RlOmV9KSxTfX1mdW5jdGlvbiBRYShlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihuLHIsaSl7KHI9QSh7fSxyKSkud2FybjtkZWxldGUgci53YXJuO3ZhciBvPXIuZGVsaW1pdGVycz9TdHJpbmcoci5kZWxpbWl0ZXJzKStuOm47aWYodFtvXSlyZXR1cm4gdFtvXTt2YXIgYT1lKG4scikscz17fSxjPVtdO3JldHVybiBzLnJlbmRlcj1ZYShhLnJlbmRlcixjKSxzLnN0YXRpY1JlbmRlckZucz1hLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIFlhKGUsYyl9KSx0W29dPXN9fXZhciBlcyx0cyxucz0oZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1sYShlLnRyaW0oKSx0KTshMSE9PXQub3B0aW1pemUmJmthKG4sdCk7dmFyIHI9UGEobix0KTtyZXR1cm57YXN0Om4scmVuZGVyOnIucmVuZGVyLHN0YXRpY1JlbmRlckZuczpyLnN0YXRpY1JlbmRlckZuc319LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1PYmplY3QuY3JlYXRlKGUpLGk9W10sbz1bXTtpZihuKWZvcih2YXIgYSBpbiBuLm1vZHVsZXMmJihyLm1vZHVsZXM9KGUubW9kdWxlc3x8W10pLmNvbmNhdChuLm1vZHVsZXMpKSxuLmRpcmVjdGl2ZXMmJihyLmRpcmVjdGl2ZXM9QShPYmplY3QuY3JlYXRlKGUuZGlyZWN0aXZlc3x8bnVsbCksbi5kaXJlY3RpdmVzKSksbilcIm1vZHVsZXNcIiE9PWEmJlwiZGlyZWN0aXZlc1wiIT09YSYmKHJbYV09blthXSk7ci53YXJuPWZ1bmN0aW9uKGUsdCxuKXsobj9vOmkpLnB1c2goZSl9O3ZhciBzPWVzKHQudHJpbSgpLHIpO3JldHVybiBzLmVycm9ycz1pLHMudGlwcz1vLHN9cmV0dXJue2NvbXBpbGU6dCxjb21waWxlVG9GdW5jdGlvbnM6UWEodCl9fSkoQ2EpLHJzPShucy5jb21waWxlLG5zLmNvbXBpbGVUb0Z1bmN0aW9ucyk7ZnVuY3Rpb24gaXMoZSl7cmV0dXJuKHRzPXRzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pbm5lckhUTUw9ZT8nPGEgaHJlZj1cIlxcblwiLz4nOic8ZGl2IGE9XCJcXG5cIi8+Jyx0cy5pbm5lckhUTUwuaW5kZXhPZihcIiYjMTA7XCIpPjB9dmFyIG9zPSEheiYmaXMoITEpLGFzPSEheiYmaXMoITApLHNzPWcoZnVuY3Rpb24oZSl7dmFyIHQ9WW4oZSk7cmV0dXJuIHQmJnQuaW5uZXJIVE1MfSksY3M9d24ucHJvdG90eXBlLiRtb3VudDt3bi5wcm90b3R5cGUuJG1vdW50PWZ1bmN0aW9uKGUsdCl7aWYoKGU9ZSYmWW4oZSkpPT09ZG9jdW1lbnQuYm9keXx8ZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudClyZXR1cm4gdGhpczt2YXIgbj10aGlzLiRvcHRpb25zO2lmKCFuLnJlbmRlcil7dmFyIHI9bi50ZW1wbGF0ZTtpZihyKWlmKFwic3RyaW5nXCI9PXR5cGVvZiByKVwiI1wiPT09ci5jaGFyQXQoMCkmJihyPXNzKHIpKTtlbHNle2lmKCFyLm5vZGVUeXBlKXJldHVybiB0aGlzO3I9ci5pbm5lckhUTUx9ZWxzZSBlJiYocj1mdW5jdGlvbihlKXtpZihlLm91dGVySFRNTClyZXR1cm4gZS5vdXRlckhUTUw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlLmNsb25lTm9kZSghMCkpLHQuaW5uZXJIVE1MfShlKSk7aWYocil7dmFyIGk9cnMocix7b3V0cHV0U291cmNlUmFuZ2U6ITEsc2hvdWxkRGVjb2RlTmV3bGluZXM6b3Msc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOmFzLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzLGNvbW1lbnRzOm4uY29tbWVudHN9LHRoaXMpLG89aS5yZW5kZXIsYT1pLnN0YXRpY1JlbmRlckZucztuLnJlbmRlcj1vLG4uc3RhdGljUmVuZGVyRm5zPWF9fXJldHVybiBjcy5jYWxsKHRoaXMsZSx0KX0sd24uY29tcGlsZT1ycyxtb2R1bGUuZXhwb3J0cz13bjsiLCIvKipcbiAqIHZ1ZXggdjIuNS4wXG4gKiAoYykgMjAxNyBFdmFuIFlvdVxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbnZhciBhcHBseU1peGluID0gZnVuY3Rpb24gKFZ1ZSkge1xuICB2YXIgdmVyc2lvbiA9IE51bWJlcihWdWUudmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcblxuICBpZiAodmVyc2lvbiA+PSAyKSB7XG4gICAgVnVlLm1peGluKHsgYmVmb3JlQ3JlYXRlOiB2dWV4SW5pdCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdmVycmlkZSBpbml0IGFuZCBpbmplY3QgdnVleCBpbml0IHByb2NlZHVyZVxuICAgIC8vIGZvciAxLnggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgdmFyIF9pbml0ID0gVnVlLnByb3RvdHlwZS5faW5pdDtcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBvcHRpb25zLmluaXQgPSBvcHRpb25zLmluaXRcbiAgICAgICAgPyBbdnVleEluaXRdLmNvbmNhdChvcHRpb25zLmluaXQpXG4gICAgICAgIDogdnVleEluaXQ7XG4gICAgICBfaW5pdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVnVleCBpbml0IGhvb2ssIGluamVjdGVkIGludG8gZWFjaCBpbnN0YW5jZXMgaW5pdCBob29rcyBsaXN0LlxuICAgKi9cblxuICBmdW5jdGlvbiB2dWV4SW5pdCAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgIC8vIHN0b3JlIGluamVjdGlvblxuICAgIGlmIChvcHRpb25zLnN0b3JlKSB7XG4gICAgICB0aGlzLiRzdG9yZSA9IHR5cGVvZiBvcHRpb25zLnN0b3JlID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gb3B0aW9ucy5zdG9yZSgpXG4gICAgICAgIDogb3B0aW9ucy5zdG9yZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRzdG9yZSkge1xuICAgICAgdGhpcy4kc3RvcmUgPSBvcHRpb25zLnBhcmVudC4kc3RvcmU7XG4gICAgfVxuICB9XG59O1xuXG52YXIgZGV2dG9vbEhvb2sgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuZnVuY3Rpb24gZGV2dG9vbFBsdWdpbiAoc3RvcmUpIHtcbiAgaWYgKCFkZXZ0b29sSG9vaykgeyByZXR1cm4gfVxuXG4gIHN0b3JlLl9kZXZ0b29sSG9vayA9IGRldnRvb2xIb29rO1xuXG4gIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6aW5pdCcsIHN0b3JlKTtcblxuICBkZXZ0b29sSG9vay5vbigndnVleDp0cmF2ZWwtdG8tc3RhdGUnLCBmdW5jdGlvbiAodGFyZ2V0U3RhdGUpIHtcbiAgICBzdG9yZS5yZXBsYWNlU3RhdGUodGFyZ2V0U3RhdGUpO1xuICB9KTtcblxuICBzdG9yZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG11dGF0aW9uLCBzdGF0ZSkge1xuICAgIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6bXV0YXRpb24nLCBtdXRhdGlvbiwgc3RhdGUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBwYXNzIHRoZSB0ZXN0XG4gKiBieSBzZWNvbmQgYXJndW1lbnQgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHsqfVxuICovXG4vKipcbiAqIERlZXAgY29weSB0aGUgZ2l2ZW4gb2JqZWN0IGNvbnNpZGVyaW5nIGNpcmN1bGFyIHN0cnVjdHVyZS5cbiAqIFRoaXMgZnVuY3Rpb24gY2FjaGVzIGFsbCBuZXN0ZWQgb2JqZWN0cyBhbmQgaXRzIGNvcGllcy5cbiAqIElmIGl0IGRldGVjdHMgY2lyY3VsYXIgc3RydWN0dXJlLCB1c2UgY2FjaGVkIGNvcHkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC5cbiAqXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjYWNoZVxuICogQHJldHVybiB7Kn1cbiAqL1xuXG5cbi8qKlxuICogZm9yRWFjaCBmb3Igb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hWYWx1ZSAob2JqLCBmbikge1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4ob2JqW2tleV0sIGtleSk7IH0pO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChjb25kaXRpb24sIG1zZykge1xuICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoKFwiW3Z1ZXhdIFwiICsgbXNnKSkgfVxufVxuXG52YXIgTW9kdWxlID0gZnVuY3Rpb24gTW9kdWxlIChyYXdNb2R1bGUsIHJ1bnRpbWUpIHtcbiAgdGhpcy5ydW50aW1lID0gcnVudGltZTtcbiAgdGhpcy5fY2hpbGRyZW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9yYXdNb2R1bGUgPSByYXdNb2R1bGU7XG4gIHZhciByYXdTdGF0ZSA9IHJhd01vZHVsZS5zdGF0ZTtcbiAgdGhpcy5zdGF0ZSA9ICh0eXBlb2YgcmF3U3RhdGUgPT09ICdmdW5jdGlvbicgPyByYXdTdGF0ZSgpIDogcmF3U3RhdGUpIHx8IHt9O1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyQxID0geyBuYW1lc3BhY2VkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycyQxLm5hbWVzcGFjZWQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISF0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZFxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIGFkZENoaWxkIChrZXksIG1vZHVsZSkge1xuICB0aGlzLl9jaGlsZHJlbltrZXldID0gbW9kdWxlO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIHJlbW92ZUNoaWxkIChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW2tleV07XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmdldENoaWxkID0gZnVuY3Rpb24gZ2V0Q2hpbGQgKGtleSkge1xuICByZXR1cm4gdGhpcy5fY2hpbGRyZW5ba2V5XVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKHJhd01vZHVsZSkge1xuICB0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZCA9IHJhd01vZHVsZS5uYW1lc3BhY2VkO1xuICBpZiAocmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICB0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucyA9IHJhd01vZHVsZS5hY3Rpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucyA9IHJhd01vZHVsZS5tdXRhdGlvbnM7XG4gIH1cbiAgaWYgKHJhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmdldHRlcnMgPSByYXdNb2R1bGUuZ2V0dGVycztcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoQ2hpbGQgPSBmdW5jdGlvbiBmb3JFYWNoQ2hpbGQgKGZuKSB7XG4gIGZvckVhY2hWYWx1ZSh0aGlzLl9jaGlsZHJlbiwgZm4pO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoR2V0dGVyID0gZnVuY3Rpb24gZm9yRWFjaEdldHRlciAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzLCBmbik7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEFjdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hBY3Rpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hNdXRhdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hNdXRhdGlvbiAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucywgZm4pO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggTW9kdWxlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzJDEgKTtcblxudmFyIE1vZHVsZUNvbGxlY3Rpb24gPSBmdW5jdGlvbiBNb2R1bGVDb2xsZWN0aW9uIChyYXdSb290TW9kdWxlKSB7XG4gIC8vIHJlZ2lzdGVyIHJvb3QgbW9kdWxlIChWdWV4LlN0b3JlIG9wdGlvbnMpXG4gIHRoaXMucmVnaXN0ZXIoW10sIHJhd1Jvb3RNb2R1bGUsIGZhbHNlKTtcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAocGF0aCkge1xuICByZXR1cm4gcGF0aC5yZWR1Y2UoZnVuY3Rpb24gKG1vZHVsZSwga2V5KSB7XG4gICAgcmV0dXJuIG1vZHVsZS5nZXRDaGlsZChrZXkpXG4gIH0sIHRoaXMucm9vdClcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLmdldE5hbWVzcGFjZSA9IGZ1bmN0aW9uIGdldE5hbWVzcGFjZSAocGF0aCkge1xuICB2YXIgbW9kdWxlID0gdGhpcy5yb290O1xuICByZXR1cm4gcGF0aC5yZWR1Y2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwga2V5KSB7XG4gICAgbW9kdWxlID0gbW9kdWxlLmdldENoaWxkKGtleSk7XG4gICAgcmV0dXJuIG5hbWVzcGFjZSArIChtb2R1bGUubmFtZXNwYWNlZCA/IGtleSArICcvJyA6ICcnKVxuICB9LCAnJylcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSQxIChyYXdSb290TW9kdWxlKSB7XG4gIHVwZGF0ZShbXSwgdGhpcy5yb290LCByYXdSb290TW9kdWxlKTtcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIgKHBhdGgsIHJhd01vZHVsZSwgcnVudGltZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgIGlmICggcnVudGltZSA9PT0gdm9pZCAwICkgcnVudGltZSA9IHRydWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRSYXdNb2R1bGUocGF0aCwgcmF3TW9kdWxlKTtcbiAgfVxuXG4gIHZhciBuZXdNb2R1bGUgPSBuZXcgTW9kdWxlKHJhd01vZHVsZSwgcnVudGltZSk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMucm9vdCA9IG5ld01vZHVsZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5nZXQocGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIHBhcmVudC5hZGRDaGlsZChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIG5ld01vZHVsZSk7XG4gIH1cblxuICAvLyByZWdpc3RlciBuZXN0ZWQgbW9kdWxlc1xuICBpZiAocmF3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlLm1vZHVsZXMsIGZ1bmN0aW9uIChyYXdDaGlsZE1vZHVsZSwga2V5KSB7XG4gICAgICB0aGlzJDEucmVnaXN0ZXIocGF0aC5jb25jYXQoa2V5KSwgcmF3Q2hpbGRNb2R1bGUsIHJ1bnRpbWUpO1xuICAgIH0pO1xuICB9XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS51bnJlZ2lzdGVyID0gZnVuY3Rpb24gdW5yZWdpc3RlciAocGF0aCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5nZXQocGF0aC5zbGljZSgwLCAtMSkpO1xuICB2YXIga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICBpZiAoIXBhcmVudC5nZXRDaGlsZChrZXkpLnJ1bnRpbWUpIHsgcmV0dXJuIH1cblxuICBwYXJlbnQucmVtb3ZlQ2hpbGQoa2V5KTtcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZSAocGF0aCwgdGFyZ2V0TW9kdWxlLCBuZXdNb2R1bGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRSYXdNb2R1bGUocGF0aCwgbmV3TW9kdWxlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSB0YXJnZXQgbW9kdWxlXG4gIHRhcmdldE1vZHVsZS51cGRhdGUobmV3TW9kdWxlKTtcblxuICAvLyB1cGRhdGUgbmVzdGVkIG1vZHVsZXNcbiAgaWYgKG5ld01vZHVsZS5tb2R1bGVzKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG5ld01vZHVsZS5tb2R1bGVzKSB7XG4gICAgICBpZiAoIXRhcmdldE1vZHVsZS5nZXRDaGlsZChrZXkpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJbdnVleF0gdHJ5aW5nIHRvIGFkZCBhIG5ldyBtb2R1bGUgJ1wiICsga2V5ICsgXCInIG9uIGhvdCByZWxvYWRpbmcsIFwiICtcbiAgICAgICAgICAgICdtYW51YWwgcmVsb2FkIGlzIG5lZWRlZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKFxuICAgICAgICBwYXRoLmNvbmNhdChrZXkpLFxuICAgICAgICB0YXJnZXRNb2R1bGUuZ2V0Q2hpbGQoa2V5KSxcbiAgICAgICAgbmV3TW9kdWxlLm1vZHVsZXNba2V5XVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZ1bmN0aW9uQXNzZXJ0ID0ge1xuICBhc3NlcnQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nOyB9LFxuICBleHBlY3RlZDogJ2Z1bmN0aW9uJ1xufTtcblxudmFyIG9iamVjdEFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbiBvciBvYmplY3Qgd2l0aCBcImhhbmRsZXJcIiBmdW5jdGlvbidcbn07XG5cbnZhciBhc3NlcnRUeXBlcyA9IHtcbiAgZ2V0dGVyczogZnVuY3Rpb25Bc3NlcnQsXG4gIG11dGF0aW9uczogZnVuY3Rpb25Bc3NlcnQsXG4gIGFjdGlvbnM6IG9iamVjdEFzc2VydFxufTtcblxuZnVuY3Rpb24gYXNzZXJ0UmF3TW9kdWxlIChwYXRoLCByYXdNb2R1bGUpIHtcbiAgT2JqZWN0LmtleXMoYXNzZXJ0VHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghcmF3TW9kdWxlW2tleV0pIHsgcmV0dXJuIH1cblxuICAgIHZhciBhc3NlcnRPcHRpb25zID0gYXNzZXJ0VHlwZXNba2V5XTtcblxuICAgIGZvckVhY2hWYWx1ZShyYXdNb2R1bGVba2V5XSwgZnVuY3Rpb24gKHZhbHVlLCB0eXBlKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIGFzc2VydE9wdGlvbnMuYXNzZXJ0KHZhbHVlKSxcbiAgICAgICAgbWFrZUFzc2VydGlvbk1lc3NhZ2UocGF0aCwga2V5LCB0eXBlLCB2YWx1ZSwgYXNzZXJ0T3B0aW9ucy5leHBlY3RlZClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlQXNzZXJ0aW9uTWVzc2FnZSAocGF0aCwga2V5LCB0eXBlLCB2YWx1ZSwgZXhwZWN0ZWQpIHtcbiAgdmFyIGJ1ZiA9IGtleSArIFwiIHNob3VsZCBiZSBcIiArIGV4cGVjdGVkICsgXCIgYnV0IFxcXCJcIiArIGtleSArIFwiLlwiICsgdHlwZSArIFwiXFxcIlwiO1xuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgYnVmICs9IFwiIGluIG1vZHVsZSBcXFwiXCIgKyAocGF0aC5qb2luKCcuJykpICsgXCJcXFwiXCI7XG4gIH1cbiAgYnVmICs9IFwiIGlzIFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgKyBcIi5cIjtcbiAgcmV0dXJuIGJ1ZlxufVxuXG52YXIgVnVlOyAvLyBiaW5kIG9uIGluc3RhbGxcblxudmFyIFN0b3JlID0gZnVuY3Rpb24gU3RvcmUgKG9wdGlvbnMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIC8vIEF1dG8gaW5zdGFsbCBpZiBpdCBpcyBub3QgZG9uZSB5ZXQgYW5kIGB3aW5kb3dgIGhhcyBgVnVlYC5cbiAgLy8gVG8gYWxsb3cgdXNlcnMgdG8gYXZvaWQgYXV0by1pbnN0YWxsYXRpb24gaW4gc29tZSBjYXNlcyxcbiAgLy8gdGhpcyBjb2RlIHNob3VsZCBiZSBwbGFjZWQgaGVyZS4gU2VlICM3MzFcbiAgaWYgKCFWdWUgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuICAgIGluc3RhbGwod2luZG93LlZ1ZSk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChWdWUsIFwibXVzdCBjYWxsIFZ1ZS51c2UoVnVleCkgYmVmb3JlIGNyZWF0aW5nIGEgc3RvcmUgaW5zdGFuY2UuXCIpO1xuICAgIGFzc2VydCh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcsIFwidnVleCByZXF1aXJlcyBhIFByb21pc2UgcG9seWZpbGwgaW4gdGhpcyBicm93c2VyLlwiKTtcbiAgICBhc3NlcnQodGhpcyBpbnN0YW5jZW9mIFN0b3JlLCBcIlN0b3JlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvci5cIik7XG4gIH1cblxuICB2YXIgcGx1Z2lucyA9IG9wdGlvbnMucGx1Z2luczsgaWYgKCBwbHVnaW5zID09PSB2b2lkIDAgKSBwbHVnaW5zID0gW107XG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsgaWYgKCBzdHJpY3QgPT09IHZvaWQgMCApIHN0cmljdCA9IGZhbHNlO1xuXG4gIHZhciBzdGF0ZSA9IG9wdGlvbnMuc3RhdGU7IGlmICggc3RhdGUgPT09IHZvaWQgMCApIHN0YXRlID0ge307XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdGF0ZSA9IHN0YXRlKCkgfHwge307XG4gIH1cblxuICAvLyBzdG9yZSBpbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl9jb21taXR0aW5nID0gZmFsc2U7XG4gIHRoaXMuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl9tdXRhdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX21vZHVsZXMgPSBuZXcgTW9kdWxlQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgdGhpcy5fbW9kdWxlc05hbWVzcGFjZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG4gIHRoaXMuX3dhdGNoZXJWTSA9IG5ldyBWdWUoKTtcblxuICAvLyBiaW5kIGNvbW1pdCBhbmQgZGlzcGF0Y2ggdG8gc2VsZlxuICB2YXIgc3RvcmUgPSB0aGlzO1xuICB2YXIgcmVmID0gdGhpcztcbiAgdmFyIGRpc3BhdGNoID0gcmVmLmRpc3BhdGNoO1xuICB2YXIgY29tbWl0ID0gcmVmLmNvbW1pdDtcbiAgdGhpcy5kaXNwYXRjaCA9IGZ1bmN0aW9uIGJvdW5kRGlzcGF0Y2ggKHR5cGUsIHBheWxvYWQpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2guY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZClcbiAgfTtcbiAgdGhpcy5jb21taXQgPSBmdW5jdGlvbiBib3VuZENvbW1pdCAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBjb21taXQuY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZCwgb3B0aW9ucylcbiAgfTtcblxuICAvLyBzdHJpY3QgbW9kZVxuICB0aGlzLnN0cmljdCA9IHN0cmljdDtcblxuICAvLyBpbml0IHJvb3QgbW9kdWxlLlxuICAvLyB0aGlzIGFsc28gcmVjdXJzaXZlbHkgcmVnaXN0ZXJzIGFsbCBzdWItbW9kdWxlc1xuICAvLyBhbmQgY29sbGVjdHMgYWxsIG1vZHVsZSBnZXR0ZXJzIGluc2lkZSB0aGlzLl93cmFwcGVkR2V0dGVyc1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHN0YXRlLCBbXSwgdGhpcy5fbW9kdWxlcy5yb290KTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBzdG9yZSB2bSwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZSByZWFjdGl2aXR5XG4gIC8vIChhbHNvIHJlZ2lzdGVycyBfd3JhcHBlZEdldHRlcnMgYXMgY29tcHV0ZWQgcHJvcGVydGllcylcbiAgcmVzZXRTdG9yZVZNKHRoaXMsIHN0YXRlKTtcblxuICAvLyBhcHBseSBwbHVnaW5zXG4gIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7IHJldHVybiBwbHVnaW4odGhpcyQxKTsgfSk7XG5cbiAgaWYgKFZ1ZS5jb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29sUGx1Z2luKHRoaXMpO1xuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBzdGF0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuc3RhdGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fdm0uX2RhdGEuJCRzdGF0ZVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnN0YXRlLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCBcIlVzZSBzdG9yZS5yZXBsYWNlU3RhdGUoKSB0byBleHBsaWNpdCByZXBsYWNlIHN0b3JlIHN0YXRlLlwiKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIGNvbW1pdCAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vIGNoZWNrIG9iamVjdC1zdHlsZSBjb21taXRcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuICAgIHZhciBvcHRpb25zID0gcmVmLm9wdGlvbnM7XG5cbiAgdmFyIG11dGF0aW9uID0geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIH07XG4gIHZhciBlbnRyeSA9IHRoaXMuX211dGF0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uIGNvbW1pdEl0ZXJhdG9yIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcbiAgdGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIobXV0YXRpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnNpbGVudFxuICApIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlt2dWV4XSBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUgKyBcIi4gU2lsZW50IG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBcIiArXG4gICAgICAnVXNlIHRoZSBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdnVlLWRldnRvb2xzJ1xuICAgICk7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoIChfdHlwZSwgX3BheWxvYWQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgZGlzcGF0Y2hcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkKTtcbiAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgIHZhciBwYXlsb2FkID0gcmVmLnBheWxvYWQ7XG5cbiAgdmFyIGFjdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9hY3Rpb25zW3R5cGVdO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gYWN0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViKGFjdGlvbiwgdGhpcyQxLnN0YXRlKTsgfSk7XG5cbiAgcmV0dXJuIGVudHJ5Lmxlbmd0aCA+IDFcbiAgICA/IFByb21pc2UuYWxsKGVudHJ5Lm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlcihwYXlsb2FkKTsgfSkpXG4gICAgOiBlbnRyeVswXShwYXlsb2FkKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSAoZm4pIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX3N1YnNjcmliZXJzKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZUFjdGlvbiA9IGZ1bmN0aW9uIHN1YnNjcmliZUFjdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzKVxufTtcblxuU3RvcmUucHJvdG90eXBlLndhdGNoID0gZnVuY3Rpb24gd2F0Y2ggKGdldHRlciwgY2IsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgZ2V0dGVyID09PSAnZnVuY3Rpb24nLCBcInN0b3JlLndhdGNoIG9ubHkgYWNjZXB0cyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICByZXR1cm4gdGhpcy5fd2F0Y2hlclZNLiR3YXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiBnZXR0ZXIodGhpcyQxLnN0YXRlLCB0aGlzJDEuZ2V0dGVycyk7IH0sIGNiLCBvcHRpb25zKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZSAoc3RhdGUpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzJDEuX3ZtLl9kYXRhLiQkc3RhdGUgPSBzdGF0ZTtcbiAgfSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVnaXN0ZXJNb2R1bGUgPSBmdW5jdGlvbiByZWdpc3Rlck1vZHVsZSAocGF0aCwgcmF3TW9kdWxlLCBvcHRpb25zKSB7XG4gICAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgICBhc3NlcnQocGF0aC5sZW5ndGggPiAwLCAnY2Fubm90IHJlZ2lzdGVyIHRoZSByb290IG1vZHVsZSBieSB1c2luZyByZWdpc3Rlck1vZHVsZS4nKTtcbiAgfVxuXG4gIHRoaXMuX21vZHVsZXMucmVnaXN0ZXIocGF0aCwgcmF3TW9kdWxlKTtcbiAgaW5zdGFsbE1vZHVsZSh0aGlzLCB0aGlzLnN0YXRlLCBwYXRoLCB0aGlzLl9tb2R1bGVzLmdldChwYXRoKSwgb3B0aW9ucy5wcmVzZXJ2ZVN0YXRlKTtcbiAgLy8gcmVzZXQgc3RvcmUgdG8gdXBkYXRlIGdldHRlcnMuLi5cbiAgcmVzZXRTdG9yZVZNKHRoaXMsIHRoaXMuc3RhdGUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnVucmVnaXN0ZXJNb2R1bGUgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyTW9kdWxlIChwYXRoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgfVxuXG4gIHRoaXMuX21vZHVsZXMudW5yZWdpc3RlcihwYXRoKTtcbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudFN0YXRlID0gZ2V0TmVzdGVkU3RhdGUodGhpcyQxLnN0YXRlLCBwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgVnVlLmRlbGV0ZShwYXJlbnRTdGF0ZSwgcGF0aFtwYXRoLmxlbmd0aCAtIDFdKTtcbiAgfSk7XG4gIHJlc2V0U3RvcmUodGhpcyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuaG90VXBkYXRlID0gZnVuY3Rpb24gaG90VXBkYXRlIChuZXdPcHRpb25zKSB7XG4gIHRoaXMuX21vZHVsZXMudXBkYXRlKG5ld09wdGlvbnMpO1xuICByZXNldFN0b3JlKHRoaXMsIHRydWUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLl93aXRoQ29tbWl0ID0gZnVuY3Rpb24gX3dpdGhDb21taXQgKGZuKSB7XG4gIHZhciBjb21taXR0aW5nID0gdGhpcy5fY29tbWl0dGluZztcbiAgdGhpcy5fY29tbWl0dGluZyA9IHRydWU7XG4gIGZuKCk7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSBjb21taXR0aW5nO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFN0b3JlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbmZ1bmN0aW9uIGdlbmVyaWNTdWJzY3JpYmUgKGZuLCBzdWJzKSB7XG4gIGlmIChzdWJzLmluZGV4T2YoZm4pIDwgMCkge1xuICAgIHN1YnMucHVzaChmbik7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHN1YnMuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkge1xuICAgICAgc3Vicy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0U3RvcmUgKHN0b3JlLCBob3QpIHtcbiAgc3RvcmUuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdG9yZS5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgc3RhdGUgPSBzdG9yZS5zdGF0ZTtcbiAgLy8gaW5pdCBhbGwgbW9kdWxlc1xuICBpbnN0YWxsTW9kdWxlKHN0b3JlLCBzdGF0ZSwgW10sIHN0b3JlLl9tb2R1bGVzLnJvb3QsIHRydWUpO1xuICAvLyByZXNldCB2bVxuICByZXNldFN0b3JlVk0oc3RvcmUsIHN0YXRlLCBob3QpO1xufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlVk0gKHN0b3JlLCBzdGF0ZSwgaG90KSB7XG4gIHZhciBvbGRWbSA9IHN0b3JlLl92bTtcblxuICAvLyBiaW5kIHN0b3JlIHB1YmxpYyBnZXR0ZXJzXG4gIHN0b3JlLmdldHRlcnMgPSB7fTtcbiAgdmFyIHdyYXBwZWRHZXR0ZXJzID0gc3RvcmUuX3dyYXBwZWRHZXR0ZXJzO1xuICB2YXIgY29tcHV0ZWQgPSB7fTtcbiAgZm9yRWFjaFZhbHVlKHdyYXBwZWRHZXR0ZXJzLCBmdW5jdGlvbiAoZm4sIGtleSkge1xuICAgIC8vIHVzZSBjb21wdXRlZCB0byBsZXZlcmFnZSBpdHMgbGF6eS1jYWNoaW5nIG1lY2hhbmlzbVxuICAgIGNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmbihzdG9yZSk7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0b3JlLmdldHRlcnMsIGtleSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5fdm1ba2V5XTsgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUgLy8gZm9yIGxvY2FsIGdldHRlcnNcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gdXNlIGEgVnVlIGluc3RhbmNlIHRvIHN0b3JlIHRoZSBzdGF0ZSB0cmVlXG4gIC8vIHN1cHByZXNzIHdhcm5pbmdzIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBoYXMgYWRkZWRcbiAgLy8gc29tZSBmdW5reSBnbG9iYWwgbWl4aW5zXG4gIHZhciBzaWxlbnQgPSBWdWUuY29uZmlnLnNpbGVudDtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSB0cnVlO1xuICBzdG9yZS5fdm0gPSBuZXcgVnVlKHtcbiAgICBkYXRhOiB7XG4gICAgICAkJHN0YXRlOiBzdGF0ZVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IGNvbXB1dGVkXG4gIH0pO1xuICBWdWUuY29uZmlnLnNpbGVudCA9IHNpbGVudDtcblxuICAvLyBlbmFibGUgc3RyaWN0IG1vZGUgZm9yIG5ldyB2bVxuICBpZiAoc3RvcmUuc3RyaWN0KSB7XG4gICAgZW5hYmxlU3RyaWN0TW9kZShzdG9yZSk7XG4gIH1cblxuICBpZiAob2xkVm0pIHtcbiAgICBpZiAoaG90KSB7XG4gICAgICAvLyBkaXNwYXRjaCBjaGFuZ2VzIGluIGFsbCBzdWJzY3JpYmVkIHdhdGNoZXJzXG4gICAgICAvLyB0byBmb3JjZSBnZXR0ZXIgcmUtZXZhbHVhdGlvbiBmb3IgaG90IHJlbG9hZGluZy5cbiAgICAgIHN0b3JlLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2xkVm0uX2RhdGEuJCRzdGF0ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9sZFZtLiRkZXN0cm95KCk7IH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxNb2R1bGUgKHN0b3JlLCByb290U3RhdGUsIHBhdGgsIG1vZHVsZSwgaG90KSB7XG4gIHZhciBpc1Jvb3QgPSAhcGF0aC5sZW5ndGg7XG4gIHZhciBuYW1lc3BhY2UgPSBzdG9yZS5fbW9kdWxlcy5nZXROYW1lc3BhY2UocGF0aCk7XG5cbiAgLy8gcmVnaXN0ZXIgaW4gbmFtZXNwYWNlIG1hcFxuICBpZiAobW9kdWxlLm5hbWVzcGFjZWQpIHtcbiAgICBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdID0gbW9kdWxlO1xuICB9XG5cbiAgLy8gc2V0IHN0YXRlXG4gIGlmICghaXNSb290ICYmICFob3QpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZShyb290U3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICB2YXIgbW9kdWxlTmFtZSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICBWdWUuc2V0KHBhcmVudFN0YXRlLCBtb2R1bGVOYW1lLCBtb2R1bGUuc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGxvY2FsID0gbW9kdWxlLmNvbnRleHQgPSBtYWtlTG9jYWxDb250ZXh0KHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpO1xuXG4gIG1vZHVsZS5mb3JFYWNoTXV0YXRpb24oZnVuY3Rpb24gKG11dGF0aW9uLCBrZXkpIHtcbiAgICB2YXIgbmFtZXNwYWNlZFR5cGUgPSBuYW1lc3BhY2UgKyBrZXk7XG4gICAgcmVnaXN0ZXJNdXRhdGlvbihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIG11dGF0aW9uLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQWN0aW9uKGZ1bmN0aW9uIChhY3Rpb24sIGtleSkge1xuICAgIHZhciB0eXBlID0gYWN0aW9uLnJvb3QgPyBrZXkgOiBuYW1lc3BhY2UgKyBrZXk7XG4gICAgdmFyIGhhbmRsZXIgPSBhY3Rpb24uaGFuZGxlciB8fCBhY3Rpb247XG4gICAgcmVnaXN0ZXJBY3Rpb24oc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hHZXR0ZXIoZnVuY3Rpb24gKGdldHRlciwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyR2V0dGVyKHN0b3JlLCBuYW1lc3BhY2VkVHlwZSwgZ2V0dGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQ2hpbGQoZnVuY3Rpb24gKGNoaWxkLCBrZXkpIHtcbiAgICBpbnN0YWxsTW9kdWxlKHN0b3JlLCByb290U3RhdGUsIHBhdGguY29uY2F0KGtleSksIGNoaWxkLCBob3QpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBtYWtlIGxvY2FsaXplZCBkaXNwYXRjaCwgY29tbWl0LCBnZXR0ZXJzIGFuZCBzdGF0ZVxuICogaWYgdGhlcmUgaXMgbm8gbmFtZXNwYWNlLCBqdXN0IHVzZSByb290IG9uZXNcbiAqL1xuZnVuY3Rpb24gbWFrZUxvY2FsQ29udGV4dCAoc3RvcmUsIG5hbWVzcGFjZSwgcGF0aCkge1xuICB2YXIgbm9OYW1lc3BhY2UgPSBuYW1lc3BhY2UgPT09ICcnO1xuXG4gIHZhciBsb2NhbCA9IHtcbiAgICBkaXNwYXRjaDogbm9OYW1lc3BhY2UgPyBzdG9yZS5kaXNwYXRjaCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX2FjdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIGFjdGlvbiB0eXBlOiBcIiArIChhcmdzLnR5cGUpICsgXCIsIGdsb2JhbCB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2godHlwZSwgcGF5bG9hZClcbiAgICB9LFxuXG4gICAgY29tbWl0OiBub05hbWVzcGFjZSA/IHN0b3JlLmNvbW1pdCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX211dGF0aW9uc1t0eXBlXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gbG9jYWwgbXV0YXRpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmUuY29tbWl0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzdGF0ZSBvYmplY3QgbXVzdCBiZSBnb3R0ZW4gbGF6aWx5XG4gIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNoYW5nZWQgYnkgdm0gdXBkYXRlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxvY2FsLCB7XG4gICAgZ2V0dGVyczoge1xuICAgICAgZ2V0OiBub05hbWVzcGFjZVxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLmdldHRlcnM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlTG9jYWxHZXR0ZXJzKHN0b3JlLCBuYW1lc3BhY2UpOyB9XG4gICAgfSxcbiAgICBzdGF0ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXROZXN0ZWRTdGF0ZShzdG9yZS5zdGF0ZSwgcGF0aCk7IH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFxufVxuXG5mdW5jdGlvbiBtYWtlTG9jYWxHZXR0ZXJzIChzdG9yZSwgbmFtZXNwYWNlKSB7XG4gIHZhciBnZXR0ZXJzUHJveHkgPSB7fTtcblxuICB2YXIgc3BsaXRQb3MgPSBuYW1lc3BhY2UubGVuZ3RoO1xuICBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgLy8gc2tpcCBpZiB0aGUgdGFyZ2V0IGdldHRlciBpcyBub3QgbWF0Y2ggdGhpcyBuYW1lc3BhY2VcbiAgICBpZiAodHlwZS5zbGljZSgwLCBzcGxpdFBvcykgIT09IG5hbWVzcGFjZSkgeyByZXR1cm4gfVxuXG4gICAgLy8gZXh0cmFjdCBsb2NhbCBnZXR0ZXIgdHlwZVxuICAgIHZhciBsb2NhbFR5cGUgPSB0eXBlLnNsaWNlKHNwbGl0UG9zKTtcblxuICAgIC8vIEFkZCBhIHBvcnQgdG8gdGhlIGdldHRlcnMgcHJveHkuXG4gICAgLy8gRGVmaW5lIGFzIGdldHRlciBwcm9wZXJ0eSBiZWNhdXNlXG4gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZXZhbHVhdGUgdGhlIGdldHRlcnMgaW4gdGhpcyB0aW1lLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZXR0ZXJzUHJveHksIGxvY2FsVHlwZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5nZXR0ZXJzW3R5cGVdOyB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZ2V0dGVyc1Byb3h5XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YXRpb24gKHN0b3JlLCB0eXBlLCBoYW5kbGVyLCBsb2NhbCkge1xuICB2YXIgZW50cnkgPSBzdG9yZS5fbXV0YXRpb25zW3R5cGVdIHx8IChzdG9yZS5fbXV0YXRpb25zW3R5cGVdID0gW10pO1xuICBlbnRyeS5wdXNoKGZ1bmN0aW9uIHdyYXBwZWRNdXRhdGlvbkhhbmRsZXIgKHBheWxvYWQpIHtcbiAgICBoYW5kbGVyLmNhbGwoc3RvcmUsIGxvY2FsLnN0YXRlLCBwYXlsb2FkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyQWN0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX2FjdGlvbnNbdHlwZV0gfHwgKHN0b3JlLl9hY3Rpb25zW3R5cGVdID0gW10pO1xuICBlbnRyeS5wdXNoKGZ1bmN0aW9uIHdyYXBwZWRBY3Rpb25IYW5kbGVyIChwYXlsb2FkLCBjYikge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmNhbGwoc3RvcmUsIHtcbiAgICAgIGRpc3BhdGNoOiBsb2NhbC5kaXNwYXRjaCxcbiAgICAgIGNvbW1pdDogbG9jYWwuY29tbWl0LFxuICAgICAgZ2V0dGVyczogbG9jYWwuZ2V0dGVycyxcbiAgICAgIHN0YXRlOiBsb2NhbC5zdGF0ZSxcbiAgICAgIHJvb3RHZXR0ZXJzOiBzdG9yZS5nZXR0ZXJzLFxuICAgICAgcm9vdFN0YXRlOiBzdG9yZS5zdGF0ZVxuICAgIH0sIHBheWxvYWQsIGNiKTtcbiAgICBpZiAoIWlzUHJvbWlzZShyZXMpKSB7XG4gICAgICByZXMgPSBQcm9taXNlLnJlc29sdmUocmVzKTtcbiAgICB9XG4gICAgaWYgKHN0b3JlLl9kZXZ0b29sSG9vaykge1xuICAgICAgcmV0dXJuIHJlcy5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHN0b3JlLl9kZXZ0b29sSG9vay5lbWl0KCd2dWV4OmVycm9yJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJHZXR0ZXIgKHN0b3JlLCB0eXBlLCByYXdHZXR0ZXIsIGxvY2FsKSB7XG4gIGlmIChzdG9yZS5fd3JhcHBlZEdldHRlcnNbdHlwZV0pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gZHVwbGljYXRlIGdldHRlciBrZXk6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBzdG9yZS5fd3JhcHBlZEdldHRlcnNbdHlwZV0gPSBmdW5jdGlvbiB3cmFwcGVkR2V0dGVyIChzdG9yZSkge1xuICAgIHJldHVybiByYXdHZXR0ZXIoXG4gICAgICBsb2NhbC5zdGF0ZSwgLy8gbG9jYWwgc3RhdGVcbiAgICAgIGxvY2FsLmdldHRlcnMsIC8vIGxvY2FsIGdldHRlcnNcbiAgICAgIHN0b3JlLnN0YXRlLCAvLyByb290IHN0YXRlXG4gICAgICBzdG9yZS5nZXR0ZXJzIC8vIHJvb3QgZ2V0dGVyc1xuICAgIClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlU3RyaWN0TW9kZSAoc3RvcmUpIHtcbiAgc3RvcmUuX3ZtLiR3YXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhLiQkc3RhdGUgfSwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBhc3NlcnQoc3RvcmUuX2NvbW1pdHRpbmcsIFwiRG8gbm90IG11dGF0ZSB2dWV4IHN0b3JlIHN0YXRlIG91dHNpZGUgbXV0YXRpb24gaGFuZGxlcnMuXCIpO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlLCBzeW5jOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBnZXROZXN0ZWRTdGF0ZSAoc3RhdGUsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoXG4gICAgPyBwYXRoLnJlZHVjZShmdW5jdGlvbiAoc3RhdGUsIGtleSkgeyByZXR1cm4gc3RhdGVba2V5XTsgfSwgc3RhdGUpXG4gICAgOiBzdGF0ZVxufVxuXG5mdW5jdGlvbiB1bmlmeU9iamVjdFN0eWxlICh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdCh0eXBlKSAmJiB0eXBlLnR5cGUpIHtcbiAgICBvcHRpb25zID0gcGF5bG9hZDtcbiAgICBwYXlsb2FkID0gdHlwZTtcbiAgICB0eXBlID0gdHlwZS50eXBlO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAoXCJFeHBlY3RzIHN0cmluZyBhcyB0aGUgdHlwZSwgYnV0IGZvdW5kIFwiICsgKHR5cGVvZiB0eXBlKSArIFwiLlwiKSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkLCBvcHRpb25zOiBvcHRpb25zIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoX1Z1ZSkge1xuICBpZiAoVnVlICYmIF9WdWUgPT09IFZ1ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnW3Z1ZXhdIGFscmVhZHkgaW5zdGFsbGVkLiBWdWUudXNlKFZ1ZXgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIFZ1ZSA9IF9WdWU7XG4gIGFwcGx5TWl4aW4oVnVlKTtcbn1cblxudmFyIG1hcFN0YXRlID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIHN0YXRlcykge1xuICB2YXIgcmVzID0ge307XG4gIG5vcm1hbGl6ZU1hcChzdGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRTdGF0ZSAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLiRzdG9yZS5zdGF0ZTtcbiAgICAgIHZhciBnZXR0ZXJzID0gdGhpcy4kc3RvcmUuZ2V0dGVycztcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwU3RhdGUnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gbW9kdWxlLmNvbnRleHQuc3RhdGU7XG4gICAgICAgIGdldHRlcnMgPSBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuY2FsbCh0aGlzLCBzdGF0ZSwgZ2V0dGVycylcbiAgICAgICAgOiBzdGF0ZVt2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgbm9ybWFsaXplTWFwKG11dGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZE11dGF0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICB2YXIgY29tbWl0ID0gdGhpcy4kc3RvcmUuY29tbWl0O1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgbW9kdWxlID0gZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBNdXRhdGlvbnMnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbW1pdCA9IG1vZHVsZS5jb250ZXh0LmNvbW1pdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtjb21taXRdLmNvbmNhdChhcmdzKSlcbiAgICAgICAgOiBjb21taXQuYXBwbHkodGhpcy4kc3RvcmUsIFt2YWxdLmNvbmNhdChhcmdzKSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbnZhciBtYXBHZXR0ZXJzID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGdldHRlcnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBub3JtYWxpemVNYXAoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICB2YWwgPSBuYW1lc3BhY2UgKyB2YWw7XG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRHZXR0ZXIgKCkge1xuICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBHZXR0ZXJzJywgbmFtZXNwYWNlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEodmFsIGluIHRoaXMuJHN0b3JlLmdldHRlcnMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gZ2V0dGVyOiBcIiArIHZhbCkpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzW3ZhbF1cbiAgICB9O1xuICAgIC8vIG1hcmsgdnVleCBnZXR0ZXIgZm9yIGRldnRvb2xzXG4gICAgcmVzW2tleV0udnVleCA9IHRydWU7XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxudmFyIG1hcEFjdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgYWN0aW9ucykge1xuICB2YXIgcmVzID0ge307XG4gIG5vcm1hbGl6ZU1hcChhY3Rpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkQWN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICB2YXIgZGlzcGF0Y2ggPSB0aGlzLiRzdG9yZS5kaXNwYXRjaDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwQWN0aW9ucycsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2ggPSBtb2R1bGUuY29udGV4dC5kaXNwYXRjaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtkaXNwYXRjaF0uY29uY2F0KGFyZ3MpKVxuICAgICAgICA6IGRpc3BhdGNoLmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG52YXIgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7IHJldHVybiAoe1xuICBtYXBTdGF0ZTogbWFwU3RhdGUuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBHZXR0ZXJzOiBtYXBHZXR0ZXJzLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBBY3Rpb25zOiBtYXBBY3Rpb25zLmJpbmQobnVsbCwgbmFtZXNwYWNlKVxufSk7IH07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcClcbiAgICA/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWVzcGFjZSAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1hcCkge1xuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlICE9PSAnc3RyaW5nJykge1xuICAgICAgbWFwID0gbmFtZXNwYWNlO1xuICAgICAgbmFtZXNwYWNlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuYW1lc3BhY2UuY2hhckF0KG5hbWVzcGFjZS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICBuYW1lc3BhY2UgKz0gJy8nO1xuICAgIH1cbiAgICByZXR1cm4gZm4obmFtZXNwYWNlLCBtYXApXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlQnlOYW1lc3BhY2UgKHN0b3JlLCBoZWxwZXIsIG5hbWVzcGFjZSkge1xuICB2YXIgbW9kdWxlID0gc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIW1vZHVsZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIG1vZHVsZSBuYW1lc3BhY2Ugbm90IGZvdW5kIGluIFwiICsgaGVscGVyICsgXCIoKTogXCIgKyBuYW1lc3BhY2UpKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlXG59XG5cbnZhciBpbmRleF9lc20gPSB7XG4gIFN0b3JlOiBTdG9yZSxcbiAgaW5zdGFsbDogaW5zdGFsbCxcbiAgdmVyc2lvbjogJzIuNS4wJyxcbiAgbWFwU3RhdGU6IG1hcFN0YXRlLFxuICBtYXBNdXRhdGlvbnM6IG1hcE11dGF0aW9ucyxcbiAgbWFwR2V0dGVyczogbWFwR2V0dGVycyxcbiAgbWFwQWN0aW9uczogbWFwQWN0aW9ucyxcbiAgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnM6IGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzXG59O1xuXG5leHBvcnQgeyBTdG9yZSwgaW5zdGFsbCwgbWFwU3RhdGUsIG1hcE11dGF0aW9ucywgbWFwR2V0dGVycywgbWFwQWN0aW9ucywgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGluZGV4X2VzbTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wialF1ZXJ5XCJdOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBhcHAgZnJvbSAnLi9jb21wb25lbnRzL2FwcCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgcm91dGVyIGZyb20gJy4vcm91dGVyJztcbmltcG9ydCBUcmFuc2xhdGlvbiBmcm9tICcuL21peGlucy90cmFuc2xhdGUnO1xuXG5WdWUubWl4aW4oVHJhbnNsYXRpb24pO1xuXG5uZXcgVnVlKHtcbiAgcm91dGVyLFxuICBzdG9yZSxcbiAgZWw6ICcjdHJhbnNsYXRpb25zLWFwcCcsXG4gIHRlbXBsYXRlOiAnPGFwcCAvPicsXG4gIGNvbXBvbmVudHM6IHthcHB9LFxuICBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0VHJhbnNsYXRpb25zJyk7XG4gIH0sXG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=